Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@酷安@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi6YW35a6JIiwiYXV0aG9yIjoi5pen5be36ZmM5Lq6IiwidXJsIjoiaGlrZXI6Ly9lbXB0eSQkZnlwYWdlIiwidmVyc2lvbiI6MjAyNDA4MTkwMCwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOlxuaWYgKGdldEl0ZW0oXCJmaXJzdFwiKSA9PSBNWV9SVUxFLnZlcnNpb24pIHtcbiAgICAkLnJlcXVpcmUoXCJDb25maWcudmlld1wiKS5fYmFzZVBhcnNlKCk7XG59IGVsc2Uge1xuICAgICQucmVxdWlyZShcIkNvbmZpZy52aWV3XCIpLl9nZXRzTWluZCgpO1xufTsiLCJzZWFyY2hfdXJsIjoiIiwiZ3JvdXAiOiIjMTIzIiwic2VhcmNoRmluZCI6IiIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6ImxldCBDYXJvdXNlbCA9IFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9DYXJvdXNlbC5odG1sXCI7XG5sZXQgQ2Fyb3VzZWxVcmwgPSBcImh0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTY5OTdcIjtcbmxldCBTY3JvbGxDYXJkID0gXCJoaWtlcjovL2ZpbGVzL3J1bGVzL1Njcm9sbENhcmQuaHRtbFwiO1xubGV0IFNjcm9sbENhcmRVcmwgPSBcImh0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTcwMDBcIjtcbmxldCBfZGVtb2xSdWxlVXJsID0gXCJodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD02OTk5XCI7XG5jb25zdCBoaWtlclBvcCA9ICQucmVxdWlyZShcImh0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTY5NjZcIiwgMjQpO1xuaWYgKCFmaWxlRXhpc3QoQ2Fyb3VzZWwpKSBzYXZlRmlsZShDYXJvdXNlbCwgcmVxdWVzdChDYXJvdXNlbFVybCksIDApO1xuaWYgKCFmaWxlRXhpc3QoU2Nyb2xsQ2FyZCkpIHNhdmVGaWxlKFNjcm9sbENhcmQsIHJlcXVlc3QoU2Nyb2xsQ2FyZFVybCksIDApO1xubGV0IF9kZW1vbFJ1bGVWciA9IGdldE15VmFyKFwiOnJ1bGVWclwiLCBcIjBcIik7XG5pZiAoX2RlbW9sUnVsZVZyID09IDApIHtcbiAgICBsZXQgX2RlbW9sUnVsZU1hcCA9IEpTT04ucGFyc2UocmVxdWVzdChfZGVtb2xSdWxlVXJsKSk7XG4gICAgaWYgKE1ZX1JVTEUudmVyc2lvbiA8IF9kZW1vbFJ1bGVNYXAudmVyc2lvbikge1xuICAgICAgICBoaWtlclBvcC5jb25maXJtKHtcbiAgICAgICAgICAgIHRpdGxlOiBcIuWPkeeOsOaWsOeJiOacrFwiLFxuICAgICAgICAgICAgb2tUaXRsZTogXCLmm7TmlrBcIixcbiAgICAgICAgICAgIGhpZGVDYW5jZWw6IHRydWUsXG4gICAgICAgICAgICBjb25maXJtKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBg5rW36ZiU6KeG55WM6KeE5YiZ5YiG5Lqr77yM5b2T5YmN5YiG5Lqr55qE5piv77ya5bCP56iL5bqP77+laG9tZV9ydWxlX3Yy77+lYmFzZTY0Oi8vQOmFt+WuiUAke2Jhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShfZGVtb2xSdWxlTWFwKSl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBwdXRNeVZhcihcIjpydWxlVnJcIiwgXCIxXCIpO1xufTsiLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6aG16Z2iXCIsXCJwYXRoXCI6XCJDb25maWcudmlld1wiLFwicnVsZVwiOlwiY29uc3QgYXBpdmlldyA9IHtcXG4gICAgY29sb3I6ICh0ZXN0KSA9PiB7XFxuICAgICAgICByZXR1cm4gJzxmb250IGNvbG9yPVxcXCIjRkE3Mjk4XFxcIj4nICsgdGVzdCArICc8L2ZvbnQ+JztcXG4gICAgfSxcXG4gICAgb3JhbmdlOiAodGVzdCkgPT4ge1xcbiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj1cXFwiI0ZGQTUwMFxcXCI+JyArIHRlc3QgKyAnPC9mb250Pic7XFxuICAgIH0sXFxuICAgIHN0cm9uZzogKHRlc3QpID0+IHtcXG4gICAgICAgIHJldHVybiBcXFwiPHN0cm9uZz5cXFwiICsgdGVzdCArIFxcXCI8L3N0cm9uZz5cXFwiO1xcbiAgICB9LFxcbiAgICBzbWFsbDogKHRlc3QpID0+IHtcXG4gICAgICAgIHJldHVybiBcXFwiPHNtYWxsPlxcXCIgKyB0ZXN0ICsgXFxcIjwvc21hbGw+XFxcIjtcXG4gICAgfSxcXG4gICAgY2VudGVyOiAodGVzdCkgPT4ge1xcbiAgICAgICAgcmV0dXJuICc8cCBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+JyArIHRlc3QgKyAnPC9wPic7XFxuICAgIH0sXFxuICAgIGJpZzogKHRlc3QpID0+IHtcXG4gICAgICAgIHJldHVybiBcXFwiPGJpZz5cXFwiICsgdGVzdCArIFxcXCI8L2JpZz5cXFwiO1xcbiAgICB9LFxcbiAgICBncmF5OiAodGVzdCkgPT4ge1xcbiAgICAgICAgcmV0dXJuIFxcXCI8Zm9udCBjb2xvcj0nZ3JheSc+XFxcIiArIHRlc3QgKyBcXFwiPC9mb250PlxcXCI7XFxuICAgIH0sXFxuICAgIHJpY2g6ICh0ZXN0KSA9PiB7XFxuICAgICAgICByZXR1cm4gXFxcIuKAmOKAmOKAmeKAmVxcXCIgKyB0ZXN0O1xcbiAgICB9LFxcbiAgICBhZGRyZXNzVGFnOiAodXJsLCB0ZXh0KSA9PiB7XFxuICAgICAgICByZXR1cm4gJzxhIGhyZWY9XFxcIicgKyB1cmwgKyAnXFxcIj4nICsgdGV4dCArICc8L2E+JztcXG4gICAgfSxcXG4gICAgZW1wdHk6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgbGF5b3V0OiBbXSxcXG4gICAgX0dldF9zY3JpcHRpb246IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL3N1YnNjcmlwdGlvbi5qc1xcXCIsXFxuICAgIF9maWxlVXRpbDogKHRleHQpID0+IHtcXG4gICAgICAgIGlmICghdGV4dC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikgJiYgIXRleHQuc3RhcnRzV2l0aChcXFwiaHR0cHNcXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBgaHR0cHM6Ly9hcGkuY29vbGFway5jb20ke3RleHR9YDtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gdGV4dDtcXG4gICAgfSxcXG4gICAgX2ZpbGVXZWJVdGlsOiAodGV4dCkgPT4ge1xcbiAgICAgICAgaWYgKCF0ZXh0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSAmJiAhdGV4dC5zdGFydHNXaXRoKFxcXCJodHRwc1xcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGBodHRwOi8vd3d3LmNvb2xhcGsuY29tJHt0ZXh0fWA7XFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIHRleHQ7XFxuICAgIH0sXFxuICAgIF9HZXRfa2V5d29yZDogKGt3LCBlbXB0eSkgPT4ge1xcbiAgICAgICAgbGV0IG1lbSA9IHN0b3JhZ2UwLmdldEl0ZW0oTVlfUlVMRS50aXRsZSwgW10pO1xcbiAgICAgICAgbWVtID0gbWVtLmZpbHRlcihpdCA9PiBpdCAhPSBrdyk7XFxuICAgICAgICBpZiAobWVtLmxlbmd0aCA+PSAxMCkge1xcbiAgICAgICAgICAgIG1lbSA9IG1lbS5zbGljZSgxKTtcXG4gICAgICAgIH07XFxuICAgICAgICBtZW0ucHVzaChrdyk7XFxuICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKE1ZX1JVTEUudGl0bGUsIG1lbSk7XFxuICAgICAgICByZXR1cm4gZW1wdHk7XFxuICAgIH0sXFxuICAgIF9Qb3NpdGlvbl90b29sOiAoZGF0YSwgYXJyYXksIGNob2ljZSwgdXVpZCkgPT4ge1xcbiAgICAgICAgbGV0IG9iaiA9IHt9O1xcbiAgICAgICAgZGF0YS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgIGlmIChpdGVtW3V1aWRdID09PSBhcnJheVt1dWlkXSkge1xcbiAgICAgICAgICAgICAgICBvYmogPSBpdGVtO1xcbiAgICAgICAgICAgICAgICBkYXRhLnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfSk7XFxuICAgICAgICBzd2l0Y2ggKGNob2ljZSkge1xcbiAgICAgICAgICAgIGNhc2UgXFxcInRvcFxcXCI6XFxuICAgICAgICAgICAgICAgIGRhdGEudW5zaGlmdChvYmopO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlIFxcXCJlbmRcXFwiOlxcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2gob2JqKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9O1xcbiAgICB9LFxcbiAgICBfZ2VuZXJhdGVTdGFyczogKG51bSkgPT4ge1xcbiAgICAgICAgbGV0IHN0YXJzID0gXFxcIuKYhVxcXCIucmVwZWF0KG51bSk7XFxuICAgICAgICBsZXQgd2hpdGVzcGFjZXMgPSBcXFwi4piGXFxcIi5yZXBlYXQoNSAtIG51bSk7XFxuICAgICAgICByZXR1cm4gc3RhcnMgKyB3aGl0ZXNwYWNlcztcXG4gICAgfSxcXG4gICAgX2dlbmVyYXRlU3RyaW5nOiAoc3RyLCBtYXhMZW5ndGgpID0+IHtcXG4gICAgICAgIGlmIChzdHIubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKSArIFxcXCIuLi5cXFwiO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gc3RyO1xcbiAgICAgICAgfTtcXG4gICAgfSxcXG4gICAgX2Zvcm1hdFRpbWVzdGFtcDogKHRpbWVzdGFtcCkgPT4ge1xcbiAgICAgICAgbGV0IG5vdyA9IERhdGUubm93KCkgLyAxMDAwO1xcbiAgICAgICAgbGV0IHNlY29uZHNQZXJEYXkgPSA4NjQwMDtcXG4gICAgICAgIGxldCBzZWNvbmRzUGVyV2VlayA9IHNlY29uZHNQZXJEYXkgKiA3O1xcbiAgICAgICAgbGV0IGRpZmYgPSBub3cgLSB0aW1lc3RhbXA7XFxuICAgICAgICBpZiAoZGlmZiA8PSBzZWNvbmRzUGVyV2Vlaykge1xcbiAgICAgICAgICAgIGlmIChkaWZmIDwgc2Vjb25kc1BlckRheSkge1xcbiAgICAgICAgICAgICAgICBsZXQgaG91cnNBZ28gPSBNYXRoLmZsb29yKGRpZmYgLyAzNjAwKTtcXG4gICAgICAgICAgICAgICAgbGV0IG1pbnV0ZXNBZ28gPSBNYXRoLmZsb29yKChkaWZmICUgMzYwMCkgLyA2MCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtob3Vyc0FnbyA9PT0gMCA/IGAke21pbnV0ZXNBZ2995YiG6ZKf5YmNYCA6IGAke2hvdXJzQWdvfeWwj+aXtuWJjWB9YDtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBsZXQgZGF5c0FnbyA9IE1hdGguZmxvb3IoZGlmZiAvIHNlY29uZHNQZXJEYXkpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZGF5c0Fnb33lpKnliY1gO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUodGltZXN0YW1wICogMTAwMCk7XFxuICAgICAgICAgICAgbGV0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XFxuICAgICAgICAgICAgbGV0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsIFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgbGV0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcXG4gICAgICAgIH07XFxuICAgIH0sXFxuICAgIF9vYmplY3RUb1F1ZXJ5U3RyaW5nOiAob2JBcnIpID0+IHtcXG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhvYkFycikubWFwKChba2V5LCB2YWxdKSA9PiBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsKX1gKS5qb2luKFxcXCImXFxcIik7XFxuICAgIH0sXFxuICAgIF9nZW5lcmF0ZVJhbmRvbVN0cmluZzogKGxlbmd0aCkgPT4ge1xcbiAgICAgICAgbGV0IHJlc3VsdCA9IFxcXCJcXFwiO1xcbiAgICAgICAgY29uc3QgY2hhcmFjdGVycyA9IFxcXCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlxcXCI7XFxuICAgICAgICBjb25zdCBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgcmVzdWx0ICs9IGNoYXJhY3RlcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnNMZW5ndGgpKTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9LFxcbiAgICBfZ2VuZXJhdGVJZGVudGlmaWVyOiAoKSA9PiB7XFxuICAgICAgICBsZXQgdXVpZCA9IFxcXCJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHhcXFwiLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24oYykge1xcbiAgICAgICAgICAgIGxldCByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCxcXG4gICAgICAgICAgICAgICAgdiA9IGMgPT09IFxcXCJ4XFxcIiA/IHIgOiAociAmIDB4MyB8IDB4OCk7XFxuICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xcbiAgICAgICAgfSk7XFxuICAgICAgICByZXR1cm4gdXVpZDtcXG4gICAgfSxcXG4gICAgX2dlbkhlYXJkT2JqZWN0OiAoKSA9PiB7XFxuICAgICAgICBsZXQgcmFuZG9taWZpZXIgPSBnZXRNeVZhcihcXFwiOmlmaWVyXFxcIiwgXFxcIjBcXFwiKTtcXG4gICAgICAgIGlmIChyYW5kb21pZmllciA9PSBcXFwiMFxcXCIpIHtcXG4gICAgICAgICAgICByYW5kb21pZmllciA9IGFwaXZpZXcuX2dlbmVyYXRlSWRlbnRpZmllcigpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCI6aWZpZXJcXFwiLCByYW5kb21pZmllcik7XFxuICAgICAgICB9O1xcbiAgICAgICAgbGV0IHJhbmRvbVN0cmluZyA9IGdldE15VmFyKFxcXCI6c3RyaW5nXFxcIiwgXFxcIjBcXFwiKTtcXG4gICAgICAgIGlmIChyYW5kb21TdHJpbmcgPT0gXFxcIjBcXFwiKSB7XFxuICAgICAgICAgICAgcmFuZG9tU3RyaW5nID0gYXBpdmlldy5fZ2VuZXJhdGVSYW5kb21TdHJpbmcoNTApO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCI6c3RyaW5nXFxcIiwgcmFuZG9tU3RyaW5nKTtcXG4gICAgICAgIH07XFxuICAgICAgICBsZXQgZGVtb2x0b2tlbiA9ICd0b2tlbjovL2NvbS5jb29sYXBrLm1hcmtldC9jNjdlZjU5NDM3ODRkMDk3NTBkY2ZiYjMxMDIwZjBhYj8nXFxuICAgICAgICBsZXQgZGVtb2xOYW1lID0gXFxcImNvbS5jb29sYXBrLm1hcmtldFxcXCI7XFxuICAgICAgICBsZXQgZGVtb2xUaW1lID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xcbiAgICAgICAgbGV0IGRlbW9sVGltZUhleCA9IGAweCR7ZGVtb2xUaW1lLnRvU3RyaW5nKDE2KX1gO1xcbiAgICAgICAgbGV0IGRlbW9sVGltZU1kNSA9IG1kNShkZW1vbFRpbWUudG9TdHJpbmcoKSk7XFxuICAgICAgICBsZXQgZGVtb2xTdHIgPSBgJHtkZW1vbHRva2VufSR7ZGVtb2xUaW1lTWQ1fSQke3JhbmRvbWlmaWVyfSYke2RlbW9sTmFtZX1gO1xcbiAgICAgICAgbGV0IGRlbW9sU3RyTWQ1ID0gbWQ1KGJhc2U2NEVuY29kZShkZW1vbFN0cikpO1xcbiAgICAgICAgZGVtb2x0b2tlbiA9IGAke2RlbW9sU3RyTWQ1fSR7cmFuZG9taWZpZXJ9JHtkZW1vbFRpbWVIZXh9YDtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgXFxcIlgtQXBwLVZlcnNpb25cXFwiOiBcXFwiMTMuMy42XFxcIixcXG4gICAgICAgICAgICBcXFwiWC1BcHAtQ29kZVxcXCI6IFxcXCIyMzEwMjMyXFxcIixcXG4gICAgICAgICAgICBcXFwiWC1BcGktVmVyc2lvblxcXCI6IFxcXCIxM1xcXCIsXFxuICAgICAgICAgICAgXFxcIlgtQXBwLUlkXFxcIjogZGVtb2xOYW1lLFxcbiAgICAgICAgICAgIFxcXCJYLUFwcC1Ub2tlblxcXCI6IGRlbW9sdG9rZW4sXFxuICAgICAgICAgICAgXFxcIlgtQXBwLURldmljZVxcXCI6IHJhbmRvbVN0cmluZyxcXG4gICAgICAgICAgICBcXFwiWC1SZXF1ZXN0ZWQtV2l0aFxcXCI6IFxcXCJYTUxIdHRwUmVxdWVzdFxcXCIsXFxuICAgICAgICAgICAgXFxcIlgtQXBwLUNoYW5uZWxcXFwiOiBcXFwiY29vbGFwa1xcXCJcXG4gICAgICAgIH07XFxuICAgIH0sXFxuICAgIF9kZW1vbF9BamF4OiAoX2RlbW9sLCBfb2JqZWN0LCBfbmV4dCwgX3VybCkgPT4ge1xcbiAgICAgICAgbGV0IF9kZW1vbEhlYXJkID0gYXBpdmlldy5fZ2VuSGVhcmRPYmplY3QoKTtcXG4gICAgICAgIGxldCBfZGVtb2xNYXAgPSByZXF1ZXN0KGFwaXZpZXcuX2ZpbGVVdGlsKF9kZW1vbCArICgkLnR5cGUoX29iamVjdCkgPT0gXFxcIm9iamVjdFxcXCIgPyAoXFxcIj9cXFwiICsgYXBpdmlldy5fb2JqZWN0VG9RdWVyeVN0cmluZyhfb2JqZWN0KSkgOiBcXFwiXFxcIikpLCBPYmplY3QuYXNzaWduKHtcXG4gICAgICAgICAgICBoZWFkZXJzOiBfZGVtb2xIZWFyZCxcXG4gICAgICAgICAgICBib2R5OiAkLnR5cGUoX25leHQpID09IFxcXCJvYmplY3RcXFwiID8gYXBpdmlldy5fb2JqZWN0VG9RdWVyeVN0cmluZyhfbmV4dCkgOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBtZXRob2Q6IF9uZXh0ID8gXFxcInBvc3RcXFwiIDogXFxcImdldFxcXCJcXG4gICAgICAgIH0sIF91cmwgPyB7XFxuICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWVcXG4gICAgICAgIH0gOiB7fSkpO1xcbiAgICAgICAgZXZhbChcXFwiX2RlbW9sTWFwID1cXFwiICsgX2RlbW9sTWFwKTtcXG4gICAgICAgIGlmIChfdXJsKSByZXR1cm4gX2RlbW9sTWFwLnVybDtcXG4gICAgICAgIGlmICghX2RlbW9sTWFwLmRhdGEpIHtcXG4gICAgICAgICAgICBpZiAoX2RlbW9sTWFwLm1lc3NhZ2UpIHtcXG4gICAgICAgICAgICAgICAgdG9hc3QoX2RlbW9sTWFwLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgcmV0dXJuIHt9O1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBfZGVtb2xNYXAuZGF0YTtcXG4gICAgfSxcXG4gICAgX2dldFJlZ0V4cDogKF9kZW1vbE1hcCwgX25leHQpID0+IHtcXG4gICAgICAgIGxldCBfdHlwZV8gPSBfZGVtb2xNYXAuZW50aXR5VHlwZTtcXG4gICAgICAgIGxldCBfZGVtb2xfID0gX2RlbW9sTWFwLmV4dHJhX2Zyb21BcGk7XFxuICAgICAgICBsZXQgX3RleHRfID0gX2RlbW9sTWFwLm1lc3NhZ2U7XFxuICAgICAgICBsZXQgX2lkXyA9IF9kZW1vbE1hcC5pZDtcXG4gICAgICAgIGxldCBfZGVtb2xSZXBseSA9IF9kZW1vbE1hcC5yZXBseVJvd3M7XFxuICAgICAgICBpZiAoIV9uZXh0ICYmIChfdHlwZV8gPT0gXFxcImZlZWRcXFwiIHx8IF90eXBlXyA9PSBcXFwibm9kZVJhdGluZ1xcXCIpICYmIF90ZXh0Xy5zZWFyY2goXFxcIuafpeeci+abtOWkmlxcXCIpID09IC0xKSB7XFxuICAgICAgICAgICAgX3RleHRfICs9IGFwaXZpZXcuYWRkcmVzc1RhZyhcXFwiXFxcIiwgXFxcIuafpeeci+abtOWkmlxcXCIpO1xcbiAgICAgICAgfSBlbHNlIGlmICghX25leHQgJiYgX3R5cGVfID09IFxcXCJmZWVkX3JlcGx5XFxcIiAmJiBfZGVtb2xSZXBseSAmJiAkLnR5cGUoX2RlbW9sUmVwbHkpID09IFxcXCJhcnJheVxcXCIgJiYgX2RlbW9sUmVwbHkubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgIF90ZXh0XyArPSBhcGl2aWV3LmFkZHJlc3NUYWcoXFxcIlxcXCIsIFxcXCLmn6XnnIvmm7TlpJpcXFwiKTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gX3RleHRfID8gKF90ZXh0X1xcbiAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIlxcXFxuXFxcIiwgXFxcImdcXFwiKSwgXFxcIjxicj5cXFwiKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9zcmM9XFxcIiguKj8pXFxcIi9nLCAobWF0Y2gsIGdyb3VwMSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2gucmVwbGFjZShncm91cDEsIGAke2dyb3VwMX0jb3JpZ2luYWxTaXplI2ApO1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcXCJ0XFxcXC8oLio/KVxcXCIvZywgKG1hdGNoLCBncm91cDEpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoYXBpdmlldy5lbXB0eSArIFxcXCIjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjI2dhbWVUaGVtZSNmeXBhZ2VcXFwiKS5iNjQoKS5ydWxlKChncm91cDEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcIkNvbmZpZy52aWV3XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXRUYWJSdWxlUGFyc2UoZ3JvdXAxKTtcXG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChhcGl2aWV3LmxheW91dCk7XFxuICAgICAgICAgICAgICAgIH0sIGdyb3VwMSk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvKDxhIGNsYXNzPVxcXCJmZWVkLWxpbmstdW5hbWVbXFxcXFNcXFxcc10qPzxcXFxcL2E+KS9nLCAobWF0Y2gpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IF9kZW1vbFRhZyA9IHBkZmgobWF0Y2gsIFxcXCJhJiZUZXh0XFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBfZGVtb2xVcmwgPSBwZGZoKG1hdGNoLCBcXFwiYSYmaHJlZlxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgX2RlbW9sID0gX2RlbW9sVGFnLnNwbGl0KFxcXCJAXFxcIilbMV07XFxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC5yZXBsYWNlKGBcXFwiJHtfZGVtb2xVcmx9XFxcImAsICgpID0+ICQoXFxcIiNub0xvYWRpbmcjXFxcIikuYjY0KCkubGF6eVJ1bGUoKF9kZW1vbCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBpdmlldyA9ICQucmVxdWlyZShcXFwiQ29uZmlnLnZpZXdcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBfZGVtb2xNYXAgPSBhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvdXNlci9zcGFjZVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1aWQ6IF9kZW1vbFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoX2RlbW9sTWFwKS5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoYXBpdmlldy5lbXB0eSArIFxcXCIjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjI2dhbWVUaGVtZSNmeXBhZ2VcXFwiKS5ydWxlKChfZGVtb2xNYXApID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBpdmlldyA9ICQucmVxdWlyZShcXFwiQ29uZmlnLnZpZXdcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpdmlldy5fZ2VuZXJhdGVUb3AoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0VXNlclJ1bGVQYXJzZShfZGVtb2xNYXApO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYXBpdmlldy5sYXlvdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9kZW1vbE1hcClcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwaXZpZXcuZW1wdHk7XFxuICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICB9LCBfZGVtb2wpKTtcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oPGEgY2xhc3M9XFxcImZlZWQtbGluay10YWdcXFwiW1xcXFxTXFxcXHNdKj88XFxcXC9hPikvZywgKG1hdGNoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBfZGVtb2xUYWcgPSBwZGZoKG1hdGNoLCBcXFwiYSYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgX2RlbW9sVXJsID0gcGRmaChtYXRjaCwgXFxcImEmJmhyZWZcXFwiKTtcXG4gICAgICAgICAgICAgICAgbGV0IF9kZW1vbF8gPSBfZGVtb2xUYWcuc3BsaXQoXFxcIiNcXFwiKVsxXTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLnJlcGxhY2UoYFxcXCIke19kZW1vbFVybH1cXFwiYCwgKCkgPT4gJChhcGl2aWV3LmVtcHR5ICsgXFxcIiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMjZ2FtZVRoZW1lI2Z5cGFnZVxcXCIpLmI2NCgpLnJ1bGUoKF9kZW1vbF8pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcIkNvbmZpZy52aWV3XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXRUYWJSdWxlUGFyc2UoX2RlbW9sXyk7XFxuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYXBpdmlldy5sYXlvdXQpO1xcbiAgICAgICAgICAgICAgICB9LCBfZGVtb2xfKSk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxcIlxcXCIvZywgKCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChhcGl2aWV3LmVtcHR5ICsgXFxcIiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMjZ2FtZVRoZW1lI2Z5cGFnZVxcXCIpLmI2NCgpLnJ1bGUoKF9pZF8sIF9kZW1vbF8sIF90eXBlXykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBpdmlldyA9ICQucmVxdWlyZShcXFwiQ29uZmlnLnZpZXdcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBfZGVtb2xwYWdlID0gTVlfUEFHRTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChfdHlwZV8gPT0gXFxcImZlZWRfcmVwbHlcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kZW1vbHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGl2aWV3Ll9nZW5lcmF0ZVRvcCgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IF9kZW1vbE1hcCA9IGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9mZWVkL3JlcGx5TGlzdFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF9pZF8sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUeXBlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3Vzc01vZGU6IDAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRUeXBlOiBcXFwiZmVlZF9yZXBseVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrU3RhdHVzOiAwLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRmVlZEF1dGhvcjogMFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dERldGVybWluZVBhcnNlKF9kZW1vbE1hcCwgX2lkXyk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF90eXBlXyA9PSBcXFwiZmVlZFxcXCIgfHwgX3R5cGVfID09IFxcXCJub2RlUmF0aW5nXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dFJ1bGVQYXJzZShfaWRfLCBfZGVtb2xfKTtcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYXBpdmlldy5sYXlvdXQpO1xcbiAgICAgICAgICAgICAgICB9LCBfaWRfLCBfZGVtb2xfLCBfdHlwZV8pO1xcbiAgICAgICAgICAgIH0pKSA6IF90ZXh0XztcXG4gICAgfSxcXG4gICAgX2Jhc2VQYXJzZTogKCkgPT4ge1xcbiAgICAgICAgbGV0IHRvb2xkb3duID0gYXBpdmlldy5fR2V0X3NjcmlwdGlvbjtcXG4gICAgICAgIGlmICghZmlsZUV4aXN0KHRvb2xkb3duKSkgc2F2ZUZpbGUodG9vbGRvd24sIEpTT04uc3RyaW5naWZ5KHt9KSwgMCk7XFxuICAgICAgICBldmFsKFxcXCJhamF4X21hcCA9XFxcIiArIHJlYWRGaWxlKHRvb2xkb3duKSk7XFxuICAgICAgICBpZiAoYWpheF9tYXBbTVlfUlVMRS50aXRsZV0gPT0gbnVsbCkge1xcbiAgICAgICAgICAgIGFqYXhfbWFwW01ZX1JVTEUudGl0bGVdID0ge307XFxuICAgICAgICAgICAgc2F2ZUZpbGUodG9vbGRvd24sIEpTT04uc3RyaW5naWZ5KGFqYXhfbWFwKSwgMCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgW1xcXCJ1c2VyXFxcIiwgXFxcInRvcGljXFxcIiwgXFxcImNhcmRcXFwiLCBcXFwiYWxidW1cXFwiLCBcXFwicHJvZHVjdFxcXCIsIFxcXCJhcGtcXFwiLCBcXFwiZHloXFxcIl1bXFxcImZvckVhY2hcXFwiXShpdCA9PiB7XFxuICAgICAgICAgICAgaWYgKGFqYXhfbWFwW01ZX1JVTEUudGl0bGVdW2l0XSA9PSBudWxsKSB7XFxuICAgICAgICAgICAgICAgIGFqYXhfbWFwW01ZX1JVTEUudGl0bGVdW2l0XSA9IFtdO1xcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSh0b29sZG93biwgSlNPTi5zdHJpbmdpZnkoYWpheF9tYXApLCAwKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfSk7XFxuICAgICAgICBsZXQgX2RlbW9scGFnZSA9IE1ZX1BBR0U7XFxuICAgICAgICBsZXQgdGluZGV4ID0gZ2V0TXlWYXIoXFxcIjpiYXNlVGFnXFxcIiwgXFxcIjBcXFwiKTtcXG4gICAgICAgIGxldCB4aW5kZXggPSBnZXRNeVZhcih0aW5kZXggKyBcXFwiOmJhc2VUYXhcXFwiLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgbGV0IF9vYmplY3RBcnJheSA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCI6YmFzZVRhYlxcXCIsIFtdKTtcXG4gICAgICAgIGlmIChfb2JqZWN0QXJyYXkubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICBkZW1vbFRpbWUgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCkudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICBfb2JqZWN0QXJyYXkgPSBhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvbWFpbi9pbml0XFxcIiwge1xcbiAgICAgICAgICAgICAgICBleHA6IDAsXFxuICAgICAgICAgICAgICAgIHQ6IGRlbW9sVGltZVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIF9vYmplY3RBcnJheSA9IF9vYmplY3RBcnJheS5maWx0ZXIoXyA9PiBfLmVudGl0eVRlbXBsYXRlID09IFxcXCJjb25maWdDYXJkXFxcIik7XFxuICAgICAgICAgICAgX29iamVjdEFycmF5ID0gX29iamVjdEFycmF5LmNvbmNhdChbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuiuoumYhVxcXCIsXFxuICAgICAgICAgICAgICAgIGVudGl0aWVzOiBbXVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICAgICAgICAgICAgICBlbnRpdGllczogW11cXG4gICAgICAgICAgICB9XSk7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcIjpiYXNlVGFiXFxcIiwgX29iamVjdEFycmF5KTtcXG4gICAgICAgIH07XFxuICAgICAgICBsZXQgX2RlbW9sTWFwID0gc3RvcmFnZTAuZ2V0TXlWYXIodGluZGV4ICsgXFxcIjpiYXNlVGFiXFxcIiwgW10pO1xcbiAgICAgICAgaWYgKF9kZW1vbE1hcC5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgIF9kZW1vbE1hcCA9IF9vYmplY3RBcnJheVt0aW5kZXhdW1xcXCJlbnRpdGllc1xcXCJdO1xcbiAgICAgICAgICAgIF9kZW1vbE1hcCA9IF9kZW1vbE1hcC5maWx0ZXIoXyA9PiBfLnRpdGxlICE9IFxcXCLlhbPms6hcXFwiICYmIF8udGl0bGUgIT0gXFxcIuS6jOaJi1xcXCIpO1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKHRpbmRleCArIFxcXCI6YmFzZVRhYlxcXCIsIF9kZW1vbE1hcCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgaWYgKF9kZW1vbHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0ID0gYXBpdmlldy5sYXlvdXQuY29uY2F0KF9vYmplY3RBcnJheS5tYXAoKGl0ZW0sIGkpID0+ICh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpID09IHRpbmRleCA/IGFwaXZpZXcucmljaChhcGl2aWV3LnN0cm9uZyhhcGl2aWV3LmNvbG9yKGl0ZW0udGl0bGUpKSkgOiBpdGVtLnRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGksIGVtcHR5KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCI6bGlua05leHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcIjpsaW5rVGFnXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiOmJhc2VUYWdcXFwiLCBpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHk7XFxuICAgICAgICAgICAgICAgIH0sIGksIGFwaXZpZXcuZW1wdHkpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpID09IHRpbmRleCA/IFxcXCIjMjBGQTcyOThcXFwiIDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLlj43ppohCVUdcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IFxcXCJtcXF3cGE6Ly9pbS9jaGF0P2NoYXRfdHlwZT13cGEmdWluPTg2MjM0NzIwNVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICB9XVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSkpKTtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dCA9IGFwaXZpZXcubGF5b3V0LmNvbmNhdChfZGVtb2xNYXAubWFwKChpdGVtLCBpKSA9PiAoe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaSA9PSB4aW5kZXggPyBhcGl2aWV3LnJpY2goYXBpdmlldy5zdHJvbmcoYXBpdmlldy5jb2xvcihpdGVtLnRpdGxlKSkpIDogaXRlbS50aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpLCBlbXB0eSwgdGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCI6bGlua05leHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcIjpsaW5rVGFnXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcih0aW5kZXggKyBcXFwiOmJhc2VUYXhcXFwiLCBpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHk7XFxuICAgICAgICAgICAgICAgIH0sIGksIGFwaXZpZXcuZW1wdHksIHRpbmRleCksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGkgPT0geGluZGV4ID8gXFxcIiMyMEZBNzI5OFxcXCIgOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pKSk7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgbGV0IF9kZW1vbExlbiA9IF9vYmplY3RBcnJheS5sZW5ndGg7XFxuICAgICAgICBzd2l0Y2ggKF9vYmplY3RBcnJheVt0aW5kZXhdKSB7XFxuICAgICAgICAgICAgY2FzZSBfb2JqZWN0QXJyYXlbX2RlbW9sTGVuIC0gMV06XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcuX3NlYXJjaFBhcnNlKCk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgX29iamVjdEFycmF5W19kZW1vbExlbiAtIDJdOlxcbiAgICAgICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXRTdWJzY3JQYXJzZSgpO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICBhcGl2aWV3Ll9maXJzdHBhZ2VfUGFyc2UoX2RlbW9sTWFwW3hpbmRleF0pO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH07XFxuICAgICAgICBzZXRSZXN1bHQoYXBpdmlldy5sYXlvdXQpO1xcbiAgICB9LFxcbiAgICBfc2VhcmNoUGFyc2U6ICgpID0+IHtcXG4gICAgICAgIGxldCBfZGVtb2xwYWdlID0gTVlfUEFHRTtcXG4gICAgICAgIGxldCBrZXl3b3JkID0gZ2V0TXlWYXIoXFxcIjprZXl3b3JkXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgbGV0IHR5cGUgPSBnZXRNeVZhcihcXFwic2VhcmNoVHlwZVxcXCIsIFxcXCLliqjmgIFcXFwiKTtcXG4gICAgICAgIGlmIChfZGVtb2xwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGFwaXZpZXcuc3Ryb25nKGFwaXZpZXcuYmlnKFxcXCLmkJzntKLnsbvlnotcXFwiKSkgKyBgPHU+JHt0eXBlfTwvdT5gLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHR5cGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFtcXFwi5Yqo5oCBXFxcIiwgXFxcIuW6lOeUqFxcXCIsIFxcXCLmuLjmiI9cXFwiLCBcXFwi55So5oi3XFxcIiwgXFxcIuivnemimFxcXCIsIFxcXCLmlbDnoIFcXFwiLCBcXFwi5LqM5omLXFxcIiwgXFxcIumXruetlFxcXCIsIFxcXCLlupTnlKjpm4ZcXFwiLCBcXFwi55yL55yL5Y+3XFxcIl0sIDMsIFxcXCLmkJzntKLnsbvlnos6XFxcIiArIHR5cGUpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNlYXJjaFR5cGVcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5YiH5o2i5Li6IFxcXCIgKyBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9LCB0eXBlKSxcXG4gICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoXFxcImljb24udG9vbFxcXCIpLnRhYnNlYXJjaCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmkJzkvaDmg7PopoHnmoQuLi4uXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcIkNvbmZpZy52aWV3XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5d29yZHMgPSBpbnB1dC50cmltKCk7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiOmtleXdvcmRcXFwiLCBrZXl3b3Jkcyk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZHMpIGFwaXZpZXcuX0dldF9rZXl3b3JkKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBpdmlldy5lbXB0eTtcXG4gICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwiOmtleXdvcmRcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgaWYgKGtleXdvcmQgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBsZXQgX29iamVjdEFycmF5ID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcIjpzZWFyY2hUYWdcXFwiLCBbXSk7XFxuICAgICAgICAgICAgaWYgKF9vYmplY3RBcnJheS5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgICAgICBfb2JqZWN0QXJyYXkgPSBhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvc2VhcmNoXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcImhvdFNlYXJjaFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoOiAwLFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZTogXFxcImFsbFxcXCJcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIF9vYmplY3RBcnJheSA9IF9vYmplY3RBcnJheS5maWx0ZXIoXyA9PiBfLmVudGl0eVRlbXBsYXRlID09IFxcXCJob3RTZWFyY2hcXFwiKTtcXG4gICAgICAgICAgICAgICAgX29iamVjdEFycmF5ID0gX29iamVjdEFycmF5WzBdLmVudGl0aWVzLm1hcChpdCA9PiBpdC50aXRsZSk7XFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCI6c2VhcmNoVGFnXFxcIiwgX29iamVjdEFycmF5KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmIChfZGVtb2xwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYXBpdmlldy5iaWcoXFxcIvCfk4og54Ot6Zeo5pCc57SiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZShcXFwiaWNvbi50b29sXFxcIikuaG90LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBhcGl2aWV3LmVtcHR5LFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2ljb25cXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBhcGl2aWV3LmxheW91dCA9IGFwaXZpZXcubGF5b3V0LmNvbmNhdChfb2JqZWN0QXJyYXkuc2xpY2UoMCwgMTApLm1hcCgoaXQpID0+ICh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYXBpdmlldy5yaWNoKGFwaXZpZXcuc21hbGwoYXBpdmlldy5ncmF5KGl0KSkpLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcIkNvbmZpZy52aWV3XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcIjprZXl3b3JkXFxcIiwgaXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaXZpZXcuX0dldF9rZXl3b3JkKGl0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcGl2aWV3LmVtcHR5O1xcbiAgICAgICAgICAgICAgICAgICAgfSwgaXQpLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCJcXG4gICAgICAgICAgICAgICAgfSkpKTtcXG4gICAgICAgICAgICAgICAgbGV0IG1lbSA9IHN0b3JhZ2UwLmdldEl0ZW0oTVlfUlVMRS50aXRsZSwgW10pO1xcbiAgICAgICAgICAgICAgICBpZiAobWVtLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhcGl2aWV3LmJpZyhcXFwi8J+TnSDmkJzntKLljoblj7JcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZShcXFwiaWNvbi50b29sXFxcIikuZGVsZXRlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwi5piv5ZCm5riF6Zmk5pCc57Si6K6w5b2V77yfXFxcIikuY29uZmlybSgoaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKE1ZX1JVTEUudGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChcXFwi5riF6Zmk5oiQ5YqfflxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9pY29uXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBtZW0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpdCA9IG1lbVtpXTtcXG4gICAgICAgICAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhcGl2aWV3LnJpY2goYXBpdmlldy5zbWFsbChhcGl2aWV3LmdyYXkoaXQpKSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiOmtleXdvcmRcXFwiLCBpdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaXZpZXcuX0dldF9rZXl3b3JkKGl0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwaXZpZXcuZW1wdHk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaXQpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogYXBpdmlldy5fZXh0cmFTZWFyY2goaXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcIuWKqOaAgVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBfZGVtb2xNYXAgPSBhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvc2VhcmNoXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJmZWVkXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWVkVHlwZTogXFxcImFsbFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogXFxcImRlZmF1bHRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBrZXl3b3JkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IF9kZW1vbHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Fub255bW91czogXFxcIi0xXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwi5pWw56CBXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIF9kZW1vbE1hcCA9IGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9zZWFyY2hcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcInByb2R1Y3RcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBrZXl3b3JkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IF9kZW1vbHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Fub255bW91czogXFxcIi0xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogXFxcIlxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcIuW6lOeUqFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBfZGVtb2xNYXAgPSBhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvc2VhcmNoXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJhcGtcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogXFxcImRlZmF1bHRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBrZXl3b3JkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IF9kZW1vbHBhZ2VcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcIua4uOaIj1xcXCI6XFxuICAgICAgICAgICAgICAgICAgICBfZGVtb2xNYXAgPSBhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvc2VhcmNoXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJnYW1lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXQ6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQ6IFxcXCJkZWZhdWx0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hWYWx1ZToga2V5d29yZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBfZGVtb2xwYWdlXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlIFxcXCLnlKjmiLdcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgX2RlbW9sTWFwID0gYXBpdmlldy5fZGVtb2xfQWpheChcXFwiL3Y2L3NlYXJjaFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFwidXNlclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IGtleXdvcmQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QW5vbnltb3VzOiBcXFwiLTFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwi6K+d6aKYXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIF9kZW1vbE1hcCA9IGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9zZWFyY2hcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcImZlZWRUb3BpY1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IGtleXdvcmQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QW5vbnltb3VzOiBcXFwiLTFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwi6Zeu562UXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIF9kZW1vbE1hcCA9IGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9zZWFyY2hcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcImFza1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmVlZFR5cGU6IFxcXCJhbGxcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBrZXl3b3JkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IF9kZW1vbHBhZ2VcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcIuW6lOeUqOmbhlxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBfZGVtb2xNYXAgPSBhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvc2VhcmNoXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJhbGJ1bVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IGtleXdvcmQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QW5vbnltb3VzOiBcXFwiLTFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwi55yL55yL5Y+3XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIF9kZW1vbE1hcCA9IGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9zZWFyY2hcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcImR5aFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IGtleXdvcmQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QW5vbnltb3VzOiBcXFwiLTFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwi5LqM5omLXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIF9kZW1vbE1hcCA9IGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9zZWFyY2hcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcImVyc2hvdVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogXFxcImRlZmF1bHRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBrZXl3b3JkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWFsX3R5cGU6IDAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2l0eV9jb2RlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBpc19saW5rOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleGNoYW5nZV90eXBlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnNob3VfdHlwZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdF9pZDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnczogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmIChfZGVtb2xNYXAgPT0gbnVsbCB8fCAkLnR5cGUoX2RlbW9sTWFwKSA9PSBcXFwib2JqZWN0XFxcIikge1xcbiAgICAgICAgICAgICAgICBfZGVtb2xNYXAgPSBbXTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dERldGVybWluZVBhcnNlKF9kZW1vbE1hcCk7XFxuICAgICAgICB9O1xcbiAgICB9LFxcbiAgICBfc2VhcmNoR29vZHNQYXJzZTogKCkgPT4ge1xcbiAgICAgICAgbGV0IF9kZW1vbHBhZ2UgPSBNWV9QQUdFO1xcbiAgICAgICAgbGV0IGtleXdvcmQgPSBnZXRNeVZhcihcXFwiOmtleXdvcmRHb29kXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgbGV0IHR5cGUgPSBnZXRNeVZhcihcXFwic2VhcmNoR29vZFR5cGVcXFwiLCBcXFwi5Lqs5LicXFxcIik7XFxuICAgICAgICBpZiAoX2RlbW9scGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgYXBpdmlldy5fZ2VuZXJhdGVUb3AoKTtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGFwaXZpZXcuc3Ryb25nKGFwaXZpZXcuYmlnKFxcXCLmkJzntKLnsbvlnotcXFwiKSkgKyBgPHU+JHt0eXBlfTwvdT5gLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHR5cGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFtcXFwi5Lqs5LicXFxcIiwgXFxcIua3mOWunVxcXCIsIFxcXCLmi7zlpJrlpJpcXFwiXSwgMywgXFxcIuaQnOe0ouexu+WeizpcXFwiICsgdHlwZSkuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic2VhcmNoR29vZFR5cGVcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5YiH5o2i5Li6IFxcXCIgKyBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9LCB0eXBlKSxcXG4gICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoXFxcImljb24udG9vbFxcXCIpLnRhYnNlYXJjaCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmkJzkvaDmg7PopoHnmoQuLi4uXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcIkNvbmZpZy52aWV3XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5d29yZHMgPSBpbnB1dC50cmltKCk7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiOmtleXdvcmRHb29kXFxcIiwga2V5d29yZHMpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleXdvcmRzKSBhcGl2aWV3Ll9HZXRfa2V5d29yZChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwaXZpZXcuZW1wdHk7XFxuICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcIjprZXl3b3JkR29vZFxcXCIpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH07XFxuICAgICAgICBpZiAoa2V5d29yZCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIGxldCBfb2JqZWN0QXJyYXkgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwiOnNlYXJjaEdvb2RUYWdcXFwiLCBbXSk7XFxuICAgICAgICAgICAgaWYgKF9vYmplY3RBcnJheS5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgICAgICBfb2JqZWN0QXJyYXkgPSBhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvZ29vZHMvc2VhcmNoSG90V29yZHNcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKCQudHlwZShfb2JqZWN0QXJyYXkpICE9IFxcXCJhcnJheVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIF9vYmplY3RBcnJheSA9IF9vYmplY3RBcnJheS5zcGxpdChcXFwiLFxcXCIpO1xcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwiOnNlYXJjaEdvb2RUYWdcXFwiLCBfb2JqZWN0QXJyYXkpO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgaWYgKF9kZW1vbHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBpZiAoX29iamVjdEFycmF5Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhcGl2aWV3LmJpZyhcXFwi8J+TiiDng63pl6jmkJzntKJcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZShcXFwiaWNvbi50b29sXFxcIikuaG90LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogYXBpdmlldy5lbXB0eSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfaWNvblxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQgPSBhcGl2aWV3LmxheW91dC5jb25jYXQoX29iamVjdEFycmF5LnNsaWNlKDAsIDEwKS5tYXAoKGl0KSA9PiAoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhcGl2aWV3LnJpY2goYXBpdmlldy5zbWFsbChhcGl2aWV3LmdyYXkoaXQpKSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiOmtleXdvcmRHb29kXFxcIiwgaXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGl2aWV3Ll9HZXRfa2V5d29yZChpdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcGl2aWV3LmVtcHR5O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGl0KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSkpKTtcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgbGV0IG1lbSA9IHN0b3JhZ2UwLmdldEl0ZW0oTVlfUlVMRS50aXRsZSwgW10pO1xcbiAgICAgICAgICAgICAgICBpZiAobWVtLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhcGl2aWV3LmJpZyhcXFwi8J+TnSDmkJzntKLljoblj7JcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZShcXFwiaWNvbi50b29sXFxcIikuZGVsZXRlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwi5piv5ZCm5riF6Zmk5pCc57Si6K6w5b2V77yfXFxcIikuY29uZmlybSgoaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKE1ZX1JVTEUudGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChcXFwi5riF6Zmk5oiQ5YqfflxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9pY29uXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBtZW0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpdCA9IG1lbVtpXTtcXG4gICAgICAgICAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhcGl2aWV3LnJpY2goYXBpdmlldy5zbWFsbChhcGl2aWV3LmdyYXkoaXQpKSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiOmtleXdvcmRHb29kXFxcIiwgaXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGl2aWV3Ll9HZXRfa2V5d29yZChpdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcGl2aWV3LmVtcHR5O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGl0KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IGFwaXZpZXcuX2V4dHJhU2VhcmNoKGl0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xcbiAgICAgICAgICAgICAgICBjYXNlIFxcXCLkuqzkuJxcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgX2RlbW9sTWFwID0gYXBpdmlldy5fZGVtb2xfQWpheChcXFwiL3Y2L2dvb2RzL3NlYXJjaFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiBrZXl3b3JkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnROYW1lOiBcXFwiaW5PcmRlckNvdW50MzBEYXlzXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NvdXBvbjogMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBfZGVtb2xwYWdlXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlIFxcXCLmt5jlrp1cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgX2RlbW9sTWFwID0gYXBpdmlldy5fZGVtb2xfQWpheChcXFwiL3Y2L2dvb2RzL3Rhb2Jhb1NlYXJjaFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBxOiBrZXl3b3JkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQ6IFxcXCJ0b3RhbF9zYWxlc1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwi5ou85aSa5aSaXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIF9kZW1vbE1hcCA9IGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9wYWdlL2RhdGFMaXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcIi9nb29kcy9zZWFyY2hQZGRHb29kc0xpc3RcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IGtleXdvcmQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydFR5cGU6IDYsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmIChfZGVtb2xNYXAgPT0gbnVsbCB8fCAkLnR5cGUoX2RlbW9sTWFwKSA9PSBcXFwib2JqZWN0XFxcIikge1xcbiAgICAgICAgICAgICAgICBfZGVtb2xNYXAgPSBbXTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dERldGVybWluZVBhcnNlKF9kZW1vbE1hcCk7XFxuICAgICAgICB9O1xcbiAgICB9LFxcbiAgICBfZmlyc3RwYWdlX1BhcnNlOiAoX2RlbW9sTWFwKSA9PiB7XFxuICAgICAgICBsZXQgX2RlbW9scGFnZSA9IE1ZX1BBR0U7XFxuICAgICAgICBsZXQgZGVtb2xUaW1lID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApLnRvU3RyaW5nKCk7XFxuICAgICAgICBsZXQgX2RlbW9sVXJsID0gX2RlbW9sTWFwLnVybDtcXG4gICAgICAgIGxldCBfZGVtb2xOYW1lID0gX2RlbW9sTWFwLnRpdGxlO1xcbiAgICAgICAgaWYgKF9kZW1vbFVybC5zdGFydHNXaXRoKFxcXCIvbWFpbi9cXFwiKSkge1xcbiAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dERldGVybWluZVBhcnNlKGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9tYWluL2luZGV4VjhcXFwiLCB7XFxuICAgICAgICAgICAgICAgIHBhZ2U6IF9kZW1vbHBhZ2UsXFxuICAgICAgICAgICAgICAgIGZpcnN0TGF1bmNoOiAwLFxcbiAgICAgICAgICAgICAgICBpbnN0YWxsVGltZTogZGVtb2xUaW1lLFxcbiAgICAgICAgICAgICAgICBpZHM6IFxcXCJcXFwiXFxuICAgICAgICAgICAgfSksIFxcXCJmYWxzZVxcXCIpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGlmIChfZGVtb2xVcmwuc3RhcnRzV2l0aChcXFwiL3BhZ2VcXFwiKSkge1xcbiAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dERldGVybWluZVBhcnNlKGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9wYWdlL2RhdGFMaXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICB1cmw6IF9kZW1vbFVybCxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IF9kZW1vbE5hbWUsXFxuICAgICAgICAgICAgICAgIHN1YlRpdGxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZVxcbiAgICAgICAgICAgIH0pKTtcXG4gICAgICAgIH07XFxuICAgICAgICBpZiAoX2RlbW9sVXJsID09IFxcXCIvdXNlci9keWhTdWJzY3JpYmVcXFwiKSB7XFxuICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0RGV0ZXJtaW5lUGFyc2UoYXBpdmlldy5fZGVtb2xfQWpheChcXFwiL3Y2L3BhZ2UvZGF0YUxpc3RcXFwiLCB7XFxuICAgICAgICAgICAgICAgIHVybDogXFxcIi9keWgvcmVjb21tZW5kTGlzdD8mdGl0bGU956uZ5YaF6K6i6ZiFXFxcIixcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLnq5nlhoXorqLpmIVcXFwiLFxcbiAgICAgICAgICAgICAgICBzdWJUaXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgIHBhZ2U6IF9kZW1vbHBhZ2VcXG4gICAgICAgICAgICB9KSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgaWYgKF9kZW1vbFVybCA9PSBcXFwiL3Byb2R1Y3QvY2F0ZWdvcnlMaXN0XFxcIikge1xcbiAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dExpbmtUYWJQYXJzZShhcGl2aWV3Ll9kZW1vbF9BamF4KGAvdjYke19kZW1vbFVybH1gKSk7XFxuICAgICAgICB9O1xcbiAgICB9LFxcbiAgICBfbGF5b3V0RGV0ZXJtaW5lUGFyc2U6IChfZGVtb2xNYXAsIF9kZW1vbCkgPT4ge1xcbiAgICAgICAgbGV0IF9kZW1vbCA9IF9kZW1vbCA/IF9kZW1vbCA6IFxcXCJcXFwiO1xcbiAgICAgICAgbGV0IF9saW5rTmV4dCA9ICgpID0+IGdldE15VmFyKFxcXCI6bGlua05leHRcXFwiICsgX2RlbW9sLCBcXFwiXFxcIik7XFxuICAgICAgICBsZXQgX2RlbW9sTmV4dCA9IF9kZW1vbE1hcC5zb21lKGl0ID0+IGl0LmVudGl0eVRlbXBsYXRlID09PSBcXFwic29ydFNlbGVjdENhcmRcXFwiKTtcXG4gICAgICAgIGlmIChfZGVtb2xOZXh0KSB7XFxuICAgICAgICAgICAgX2RlbW9sTWFwID0gX2RlbW9sTWFwLmZpbHRlcihpdCA9PiBpdC5lbnRpdHlUZW1wbGF0ZSA9PT0gXFxcInNvcnRTZWxlY3RDYXJkXFxcIik7XFxuICAgICAgICB9O1xcbiAgICAgICAgcHV0TXlWYXIoXFxcIjpuZXh0XFxcIiArIF9kZW1vbCwgX2RlbW9sTmV4dCA/IFxcXCJ0cnVlXFxcIiA6IFxcXCJcXFwiKTtcXG4gICAgICAgIGxldCBfZGVtb2xNYXBfID0gKF9saW5rTmV4dCgpID09IFxcXCJ0cnVlXFxcIiAmJiAhX2RlbW9sKSA/IHN0b3JhZ2UwLmdldE15VmFyKFxcXCI6ZGVtb2xNYXBcXFwiICsgX2RlbW9sLCBbXSkgOiBfZGVtb2xNYXA7XFxuICAgICAgICBsZXQgX2RlbW9sTWFwID0gX2RlbW9sTWFwLmxlbmd0aCA+IDAgPyBfZGVtb2xNYXAgOiBfZGVtb2xNYXBfO1xcbiAgICAgICAgaWYgKF9saW5rTmV4dCgpID09IFxcXCJcXFwiICYmIF9kZW1vbE1hcC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcIjpkZW1vbE1hcFxcXCIgKyBfZGVtb2wsIF9kZW1vbE1hcCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX2RlbW9sTWFwLmZvckVhY2goKGl0LCBpKSA9PiB7XFxuICAgICAgICAgICAgX2RlbW9sVHlwZSA9IGl0LmVudGl0eVRlbXBsYXRlO1xcbiAgICAgICAgICAgIF90eXBlXyA9IGl0LmVudGl0eVR5cGU7XFxuICAgICAgICAgICAgX2RlbW9sTWFwcyA9IGl0LmVudGl0aWVzO1xcbiAgICAgICAgICAgIGlmIChfZGVtb2xUeXBlID09IFxcXCJpbWFnZUNhcm91c2VsQ2FyZF8xXFxcIikge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIoXFxcIjpjYXJvdXNlbE1hcFxcXCIsIEpTT04uc3RyaW5naWZ5KF9kZW1vbE1hcHMpKTtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKFxcXCI6cnVsZU1hcFxcXCIsIEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUpKTtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGdldFBhdGgoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvQ2Fyb3VzZWwuaHRtbFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIjEzNSYmbGlzdFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9kZW1vbFR5cGUgPT0gXFxcImltYWdlU3F1YXJlU2Nyb2xsQ2FyZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKFxcXCI6Y2Fyb3VzZWxNYXBcXFwiLCBKU09OLnN0cmluZ2lmeShfZGVtb2xNYXBzKSk7XFxuICAgICAgICAgICAgICAgIHB1dFZhcihcXFwiOnJ1bGVNYXBcXFwiLCBKU09OLnN0cmluZ2lmeShNWV9SVUxFKSk7XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBnZXRQYXRoKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL1Njcm9sbENhcmQuaHRtbFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIjgwJiZsaXN0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX2RlbW9sVHlwZSA9PSBcXFwiaWNvbkxpbmtHcmlkQ2FyZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQgPSBhcGl2aWV3LmxheW91dC5jb25jYXQoX2RlbW9sTWFwcy5tYXAoXyA9PiAoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IF8ucGljLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAoIV8udXJsLnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSAmJiAhXy51cmwuc3RhcnRzV2l0aChcXFwiaHR0cHNcXFwiKSkgPyAkKGFwaXZpZXcuZW1wdHkgKyBcXFwiI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5IyNnYW1lVGhlbWUjZnlwYWdlXFxcIikucnVsZSgoXykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcIkNvbmZpZy52aWV3XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0TGlua1J1bGVQYXJzZShfKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYXBpdmlldy5sYXlvdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgXykgOiBfLnVybCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBfZGVtb2xNYXBzLmxlbmd0aCA+IDQgPyBcXFwiaWNvbl81XFxcIiA6IFxcXCJpY29uX3NtYWxsXzRcXFwiXFxuICAgICAgICAgICAgICAgIH0pKSk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChfZGVtb2xUeXBlID09IFxcXCJpY29uVGFiTGlua0dyaWRDYXJkXFxcIiB8fCBfZGVtb2xUeXBlID09IFxcXCJ2ZXJ0aWNhbENvbHVtbnNGdWxsUGFnZUNhcmRcXFwiIHx8IF9kZW1vbFR5cGUgPT0gXFxcInNvcnRTZWxlY3RDYXJkXFxcIikge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiOmxpbmtOZXh0XFxcIiArIF9kZW1vbCwgXFxcInRydWVcXFwiKTtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0TGlua1RhYlBhcnNlKF9kZW1vbE1hcHMsIF9kZW1vbCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChfZGVtb2xUeXBlID09IFxcXCJpY29uTGlzdENhcmRcXFwiIHx8IChfZGVtb2xUeXBlID09IFxcXCJsaXN0Q2FyZFxcXCIgJiYgX2RlbW9sICE9IFxcXCJmYWxzZVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dERldGVybWluZVBhcnNlKF9kZW1vbE1hcHMpO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX2RlbW9sVHlwZSA9PSBcXFwiaW1hZ2VUZXh0R3JpZENhcmRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dEdyaWRDYXJkUGFyc2UoX2RlbW9sTWFwcyk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChfZGVtb2xUeXBlID09IFxcXCJoZWFkQ2FyZFxcXCIgJiYgaXQudGl0bGUgJiYgaXQuZGVzY3JpcHRpb24pIHtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0SGVhZENhcmRQYXJzZShpdCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChfZGVtb2xUeXBlID09IFxcXCJub01vcmVEYXRhQ2FyZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYXBpdmlldy5yaWNoKGFwaXZpZXcuc21hbGwoYXBpdmlldy5ncmF5KGl0LnRpdGxlKSkpLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBhcGl2aWV3LmVtcHR5LFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9kZW1vbFR5cGUgPT0gbnVsbCAmJiBfdHlwZV8gPT0gXFxcInVzZXJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dFVzZXJQYXJzZShpdCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChfdHlwZV8gPT0gXFxcImNvbGxlY3Rpb25cXFwiKSB7XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dENvbGxlY3Rpb25QYXJzZShpdCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChfdHlwZV8gPT0gXFxcImFsYnVtXFxcIikge1xcbiAgICAgICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXRBbGJ1bVBhcnNlKGl0KTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKF90eXBlXyA9PSBcXFwibGl2ZVRvcGljXFxcIikge1xcbiAgICAgICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXRMaXZlUGFyc2UoaXQpO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX3R5cGVfID09IFxcXCJ0b3BpY1xcXCIgfHwgX3R5cGVfID09IFxcXCJwcm9kdWN0XFxcIiB8fCBfdHlwZV8gPT0gXFxcImFwa1xcXCIgfHwgX3R5cGVfID09IFxcXCJkeWhcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dFRhZ1BhcnNlKGl0KTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKF90eXBlXyA9PSBcXFwicGVhcl9nb29kc1xcXCIpIHtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0UGVhckdvb2RQYXJzZShpdCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChfdHlwZV8gPT0gXFxcImZlZWRcXFwiIHx8IF90eXBlXyA9PSBcXFwiZmVlZF9yZXBseVxcXCIgfHwgX3R5cGVfID09IFxcXCJub2RlUmF0aW5nXFxcIikge1xcbiAgICAgICAgICAgICAgICBpZiAoIWl0LmV4dHJhX2Zyb21BcGkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGl0LmV4dHJhX2Zyb21BcGkgPSBfZGVtb2w7XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIGlmICghaXQuaWQpIGl0LmlkID0gaXQuZmVlZF9pZDtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0RmVlZFBhcnNlKGl0KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfSk7XFxuICAgICAgICBpZiAoX2RlbW9sTWFwLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgYXBpdmlldy5fRW5kX1BhcnNlKCk7XFxuICAgICAgICB9O1xcbiAgICB9LFxcbiAgICBfbGF5b3V0SGVhZENhcmRQYXJzZTogKF9kZW1vbE1hcCkgPT4ge1xcbiAgICAgICAgX2RlbW9sTWFwLm1lc3NhZ2UgPSBgJHthcGl2aWV3LmJpZyhhcGl2aWV3LnN0cm9uZyhfZGVtb2xNYXAudGl0bGUpKX08YnI+JHtfZGVtb2xNYXAuc3ViVGl0bGV9PGJyPjxicj4ke19kZW1vbE1hcC5kZXNjcmlwdGlvbn1gO1xcbiAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGFwaXZpZXcuX2dldFJlZ0V4cChfZGVtb2xNYXAsIHRydWUpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbiAgICAgICAgfSk7XFxuICAgICAgICBhcGl2aWV3Ll9nZW5lcmF0ZUVuZCgpO1xcbiAgICB9LFxcbiAgICBfbGF5b3V0TGl2ZVBhcnNlOiAoX2RlbW9sTWFwKSA9PiB7XFxuICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogX2RlbW9sTWFwLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IChfZGVtb2xNYXAubGl2ZV9zdGF0dXMgPT0gLTEgPyBcXFwi5bey57uT5p2fIC0gXFxcIiA6IFxcXCJcXFwiKSArIF9kZW1vbE1hcC5kZXNjcmlwdGlvbixcXG4gICAgICAgICAgICBpbWc6IF9kZW1vbE1hcC5waWNfdXJsLFxcbiAgICAgICAgICAgIHVybDogX2RlbW9sTWFwLnZpZGVvX2xpdmVfdXJsLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfMlxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBfbGF5b3V0QWxidW1QYXJzZTogKF9kZW1vbE1hcCkgPT4ge1xcbiAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IF9kZW1vbE1hcC50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBgJHtfZGVtb2xNYXAuZGVzY3JpcHRpb259XFxcXG4ke19kZW1vbE1hcC5hcGtudW195Liq5bqU55SoYCxcXG4gICAgICAgICAgICBpbWc6IF9kZW1vbE1hcC5sb2dvLFxcbiAgICAgICAgICAgIHVybDogJChhcGl2aWV3LmVtcHR5ICsgXFxcIiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMjZ2FtZVRoZW1lI2Z5cGFnZVxcXCIpLnJ1bGUoKF9kZW1vbFVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgX2RlbW9scGFnZSA9IE1ZX1BBR0U7XFxuICAgICAgICAgICAgICAgIGlmIChfZGVtb2xwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGFwaXZpZXcuX2dlbmVyYXRlVG9wKCk7XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dEFsYnVtUnVsZVBhcnNlKGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9hbGJ1bS9hcGtMaXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IF9kZW1vbFVybCxcXG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IF9kZW1vbHBhZ2VcXG4gICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYXBpdmlldy5sYXlvdXQpO1xcbiAgICAgICAgICAgIH0sIF9kZW1vbE1hcC5pZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8xX2xlZnRfcGljXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IGFwaXZpZXcuX2V4dHJhX3Rvb2woX2RlbW9sTWFwLCBcXFwiYWxidW1cXFwiLCBcXFwiaWRcXFwiKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBfbGF5b3V0UGVhckdvb2RQYXJzZTogKF9kZW1vbE1hcCkgPT4ge1xcbiAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IF9kZW1vbE1hcC50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBgJHtfZGVtb2xNYXAuZ29vZHNfYnV5X3RleHR9XFxcXG4ke19kZW1vbE1hcC5nb29kc19wcm9tb190aXRsZX1gLFxcbiAgICAgICAgICAgIGltZzogX2RlbW9sTWFwLmdvb2RzX3BpYyxcXG4gICAgICAgICAgICB1cmw6ICQoYXBpdmlldy5lbXB0eSkubGF6eVJ1bGUoKHtcXG4gICAgICAgICAgICAgICAgZ29vZHNfdXJsLFxcbiAgICAgICAgICAgICAgICBnb29kc19idXlfdXJsXFxuICAgICAgICAgICAgfSkgPT4gZGVjb2RlVVJJQ29tcG9uZW50KCQucmVxdWlyZShcXFwiQ29uZmlnLnZpZXdcXFwiKS5fZGVtb2xfQWpheChcXFwiL3Y2L2dvb2RzL2dldEJ1eVVybFxcXCIsIG51bGwsIHtcXG4gICAgICAgICAgICAgICAgZ29vZHNfdXJsOiBnb29kc191cmwsXFxuICAgICAgICAgICAgICAgIGdvb2RzX2J1eV91cmw6IGdvb2RzX2J1eV91cmxcXG4gICAgICAgICAgICB9KSksIF9kZW1vbE1hcCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8xX2xlZnRfcGljXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuICAgIF9sYXlvdXRDb2xsZWN0aW9uUGFyc2U6IChfZGVtb2xNYXApID0+IHtcXG4gICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBfZGVtb2xNYXAudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogYCR7X2RlbW9sTWFwLmlzX29wZW5fdGl0bGV9XFxcXG4ke19kZW1vbE1hcC5pdGVtX251bX3kuKrlhoXlrrlgLFxcbiAgICAgICAgICAgIGltZzogX2RlbW9sTWFwLmNvdmVyX3BpYyxcXG4gICAgICAgICAgICB1cmw6IF9kZW1vbE1hcC5pc19vcGVuX3RpdGxlID09IFxcXCLlhazlvIBcXFwiID8gJChhcGl2aWV3LmVtcHR5ICsgXFxcIiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMjZ2FtZVRoZW1lI2Z5cGFnZVxcXCIpLnJ1bGUoKF9kZW1vbFVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgX2RlbW9scGFnZSA9IE1ZX1BBR0U7XFxuICAgICAgICAgICAgICAgIGlmIChfZGVtb2xwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGFwaXZpZXcuX2dlbmVyYXRlVG9wKCk7XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dERldGVybWluZVBhcnNlKGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9jb2xsZWN0aW9uL2l0ZW1MaXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IF9kZW1vbFVybCxcXG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IF9kZW1vbHBhZ2VcXG4gICAgICAgICAgICAgICAgfSksIF9kZW1vbFVybCk7XFxuICAgICAgICAgICAgICAgIHNldFJlc3VsdChhcGl2aWV3LmxheW91dCk7XFxuICAgICAgICAgICAgfSwgX2RlbW9sTWFwLmlkKSA6IGB0b2FzdDovLyR7X2RlbW9sTWFwLmlzX29wZW5fdGl0bGV9YCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzFfbGVmdF9waWNcXFwiXFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgX2xheW91dEdyaWRDYXJkUGFyc2U6IChfZGVtb2xNYXApID0+IHtcXG4gICAgICAgIGFwaXZpZXcubGF5b3V0ID0gYXBpdmlldy5sYXlvdXQuY29uY2F0KF9kZW1vbE1hcC5tYXAoXyA9PiAoe1xcbiAgICAgICAgICAgIHRpdGxlOiBfLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCIwXFxcIixcXG4gICAgICAgICAgICBpbWc6IF8ucGljLFxcbiAgICAgICAgICAgIHVybDogJChhcGl2aWV3LmVtcHR5ICsgXFxcIiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMjZ2FtZVRoZW1lI2Z5cGFnZVxcXCIpLnJ1bGUoKF8pID0+IHtcXG4gICAgICAgICAgICAgICAgY29uc3QgYXBpdmlldyA9ICQucmVxdWlyZShcXFwiQ29uZmlnLnZpZXdcXFwiKTtcXG4gICAgICAgICAgICAgICAgbGV0IF9kZW1vbHBhZ2UgPSBNWV9QQUdFO1xcbiAgICAgICAgICAgICAgICBsZXQgX2RlbW9sTmFtZSA9IF8udGl0bGU7XFxuICAgICAgICAgICAgICAgIGxldCBfZGVtb2xVcmwgPSBfLnVybDtcXG4gICAgICAgICAgICAgICAgaWYgKF9kZW1vbFVybC5zdGFydHNXaXRoKFxcXCIvcGFnZVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBfZGVtb2xVcmwgPSBfZGVtb2xVcmwuc3BsaXQoXFxcIj1cXFwiKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGVtb2xwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcGl2aWV3Ll9nZW5lcmF0ZVRvcCgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dERldGVybWluZVBhcnNlKGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9wYWdlL2RhdGFMaXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IF9kZW1vbFVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF9kZW1vbE5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlRpdGxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBfZGVtb2xVcmwgPSBfZGVtb2xVcmwuc3BsaXQoXFxcIi9mZWVkL1xcXCIpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0UnVsZVBhcnNlKF9kZW1vbFVybCk7XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIHNldFJlc3VsdChhcGl2aWV3LmxheW91dCk7XFxuICAgICAgICAgICAgfSwgXyksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJjYXJkX3BpY18xXFxcIlxcbiAgICAgICAgfSkpKTtcXG4gICAgICAgIGlmIChfZGVtb2xNYXAubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICBhcGl2aWV3Ll9FbmRfUGFyc2UoKTtcXG4gICAgICAgIH07XFxuICAgIH0sXFxuICAgIF9sYXlvdXRVc2VyUGFyc2U6IChfZGVtb2xNYXApID0+IHtcXG4gICAgICAgIF9kZW1vbE1hcCA9IF9kZW1vbE1hcC51c2VySW5mbyB8fCBfZGVtb2xNYXA7XFxuICAgICAgICBsZXQgX2RlbW9sTWFwcyA9IHt9O1xcbiAgICAgICAgX2RlbW9sTWFwcy51c2VybmFtZSA9IF9kZW1vbE1hcC51c2VybmFtZTtcXG4gICAgICAgIF9kZW1vbE1hcHMudXNlckF2YXRhciA9IF9kZW1vbE1hcC51c2VyQXZhdGFyO1xcbiAgICAgICAgX2RlbW9sTWFwcy51aWQgPSBfZGVtb2xNYXAudWlkO1xcbiAgICAgICAgX2RlbW9sTWFwcy5lbnRpdHlUeXBlID0gX2RlbW9sTWFwLmVudGl0eVR5cGU7XFxuICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogX2RlbW9sTWFwLnVzZXJuYW1lLFxcbiAgICAgICAgICAgIGltZzogX2RlbW9sTWFwLnVzZXJBdmF0YXIsXFxuICAgICAgICAgICAgdXJsOiAkKGFwaXZpZXcuZW1wdHkgKyBcXFwiI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I2Z5cGFnZVxcXCIpLnJ1bGUoKF9kZW1vbE1hcHMpID0+IHtcXG4gICAgICAgICAgICAgICAgY29uc3QgYXBpdmlldyA9ICQucmVxdWlyZShcXFwiQ29uZmlnLnZpZXdcXFwiKTtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0VXNlclJ1bGVQYXJzZShfZGVtb2xNYXBzKTtcXG4gICAgICAgICAgICAgICAgc2V0UmVzdWx0KGFwaXZpZXcubGF5b3V0KTtcXG4gICAgICAgICAgICB9LCBfZGVtb2xNYXBzKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImNhcmRfcGljXzNfY2VudGVyXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IGDnlKjmiLcvJHtfZGVtb2xNYXAudXNlcm5hbWV9YCxcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBhcGl2aWV3Ll9leHRyYV90b29sKF9kZW1vbE1hcHMsIFxcXCJ1c2VyXFxcIiwgXFxcInVpZFxcXCIsIHRydWUpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuICAgIF9sYXlvdXRUYWdQYXJzZTogKF9kZW1vbE1hcCkgPT4ge1xcbiAgICAgICAgbGV0IF9kZW1vbE1hcHMgPSB7fTtcXG4gICAgICAgIF9kZW1vbE1hcHMudGl0bGUgPSBfZGVtb2xNYXAudGl0bGU7XFxuICAgICAgICBfZGVtb2xNYXBzLmxvZ28gPSBfZGVtb2xNYXAubG9nbztcXG4gICAgICAgIF9kZW1vbE1hcHMudXJsID0gX2RlbW9sTWFwLnVybDtcXG4gICAgICAgIF9kZW1vbE1hcHMuaWQgPSBfZGVtb2xNYXAuaWQ7XFxuICAgICAgICBfZGVtb2xNYXBzLmVudGl0eVR5cGUgPSBfZGVtb2xNYXAuZW50aXR5VHlwZTtcXG4gICAgICAgIHN3aXRjaCAoX2RlbW9sTWFwcy5lbnRpdHlUeXBlKSB7XFxuICAgICAgICAgICAgY2FzZSBcXFwidG9waWNcXFwiOlxcbiAgICAgICAgICAgICAgICBfdGFnID0gXFxcInRvcGljXFxcIjtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSBcXFwicHJvZHVjdFxcXCI6XFxuICAgICAgICAgICAgICAgIF90YWcgPSBcXFwicHJvZHVjdFxcXCI7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgXFxcImR5aFxcXCI6XFxuICAgICAgICAgICAgICAgIF90YWcgPSBcXFwiZHloXFxcIjtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgX3RhZyA9IFxcXCJhcGtcXFwiO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH07XFxuICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogX2RlbW9sTWFwLnRpdGxlLFxcbiAgICAgICAgICAgIGltZzogX2RlbW9sTWFwLmxvZ28sXFxuICAgICAgICAgICAgdXJsOiAkKGFwaXZpZXcuZW1wdHkgKyBcXFwiI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5IyNnYW1lVGhlbWUjZnlwYWdlXFxcIikucnVsZSgoX2RlbW9sTWFwcykgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcblxcbiAgICAgICAgICAgICAgICBpZiAoX2RlbW9sTWFwcy51cmwpIHtcXG4gICAgICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dExpbmtSdWxlUGFyc2UoX2RlbW9sTWFwcyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXRUYWJSdWxlUGFyc2UoX2RlbW9sTWFwcy5pZCk7XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIHNldFJlc3VsdChhcGl2aWV3LmxheW91dCk7XFxuICAgICAgICAgICAgfSwgX2RlbW9sTWFwcyksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJjYXJkX3BpY18zX2NlbnRlclxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBhcGl2aWV3Ll9leHRyYV90b29sKF9kZW1vbE1hcHMsIF90YWcsIFxcXCJ0aXRsZVxcXCIpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuICAgIF9sYXlvdXRBbGJ1bVJ1bGVQYXJzZTogKF9kZW1vbE1hcCkgPT4ge1xcbiAgICAgICAgYXBpdmlldy5sYXlvdXQgPSBhcGl2aWV3LmxheW91dC5jb25jYXQoX2RlbW9sTWFwLm1hcChfID0+ICh7XFxuICAgICAgICAgICAgdGl0bGU6IF8udGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogXy5ub3RlLFxcbiAgICAgICAgICAgIGltZzogXy5waWMsXFxuICAgICAgICAgICAgdXJsOiAkKGFwaXZpZXcuZW1wdHkgKyBcXFwiI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5IyNnYW1lVGhlbWUjZnlwYWdlXFxcIikucnVsZSgoXykgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgX2RlbW9sVXJsID0gXy51cmxcXG4gICAgICAgICAgICAgICAgaWYgKF9kZW1vbFVybC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikgfHwgX2RlbW9sVXJsLnN0YXJ0c1dpdGgoXFxcImh0dHBzXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIF8udXJsID0gX2RlbW9sVXJsLnNwbGl0KGFwaXZpZXcuX2ZpbGVXZWJVdGlsKFxcXCJcXFwiKSlbMV07XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX2RlbW9sVXJsLnN0YXJ0c1dpdGgoXFxcIm1hcmtldDpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgXy51cmwgPSBgL2Fway8ke19kZW1vbFVybC5zcGxpdChcXFwiPVxcXCIpWzFdfWA7XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dExpbmtSdWxlUGFyc2UoXyk7XFxuICAgICAgICAgICAgICAgIHNldFJlc3VsdChhcGl2aWV3LmxheW91dCk7XFxuICAgICAgICAgICAgfSwgXyksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8xX2xlZnRfcGljXFxcIlxcbiAgICAgICAgfSkpKTtcXG4gICAgICAgIGlmIChfZGVtb2xNYXAubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICBhcGl2aWV3Ll9FbmRfUGFyc2UoKTtcXG4gICAgICAgIH07XFxuICAgIH0sXFxuICAgIF9sYXlvdXRGZWVkUGFyc2U6IChfZGVtb2xNYXApID0+IHtcXG4gICAgICAgIF90eXBlXyA9IF9kZW1vbE1hcC5lbnRpdHlUeXBlO1xcbiAgICAgICAgcnVzZXJuYW1lID0gX2RlbW9sTWFwLnJ1c2VybmFtZTtcXG4gICAgICAgIHVzZXJNYXAgPSBfZGVtb2xNYXAudXNlckluZm8gfHwgX2RlbW9sTWFwO1xcbiAgICAgICAgaW5mb0h0bWwgPSBfZGVtb2xNYXAuaW5mb0h0bWw7XFxuICAgICAgICBmZWVkVHlwZU5hbWUgPSBfZGVtb2xNYXAuZmVlZFR5cGVOYW1lO1xcbiAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHVzZXJNYXAudXNlcm5hbWUgKyBcXFwiXFxcXHRcXFxcdFxcXCIgKyBhcGl2aWV3LnNtYWxsKGFwaXZpZXcuX2Zvcm1hdFRpbWVzdGFtcChfZGVtb2xNYXAuZGF0ZWxpbmUgfHwgX2RlbW9sTWFwLnJlZ2RhdGUpKSxcXG4gICAgICAgICAgICBkZXNjOiBhcGl2aWV3LnNtYWxsKChpbmZvSHRtbCA/IGluZm9IdG1sIDogXFxcIlxcXCIpICsgKGZlZWRUeXBlTmFtZSA/IGZlZWRUeXBlTmFtZSA6IFxcXCJcXFwiKSArIChydXNlcm5hbWUgPyBydXNlcm5hbWUgOiBcXFwiXFxcIikpLFxcbiAgICAgICAgICAgIGltZzogdXNlck1hcC51c2VyQXZhdGFyLFxcbiAgICAgICAgICAgIHVybDogJChhcGl2aWV3LmVtcHR5ICsgXFxcIiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNmeXBhZ2VcXFwiKS5ydWxlKChfZGVtb2xNYXApID0+IHtcXG4gICAgICAgICAgICAgICAgY29uc3QgYXBpdmlldyA9ICQucmVxdWlyZShcXFwiQ29uZmlnLnZpZXdcXFwiKTtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0VXNlclJ1bGVQYXJzZShfZGVtb2xNYXApO1xcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYXBpdmlldy5sYXlvdXQpO1xcbiAgICAgICAgICAgIH0sIHVzZXJNYXApLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IGDnlKjmiLcvJHt1c2VyTWFwLnVzZXJuYW1lfWAsXFxuICAgICAgICAgICAgICAgIGxvbmdDbGljazogYXBpdmlldy5fZXh0cmFfdG9vbChfZGVtb2xNYXAsIFxcXCJjYXJkXFxcIiwgXFxcImlkXFxcIilcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCJcXG4gICAgICAgIH0pO1xcbiAgICAgICAgaWYgKF9kZW1vbE1hcC5zdGFyKSB7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBg6K+E5YiG77yaJHthcGl2aWV3Lm9yYW5nZShhcGl2aWV3Ll9nZW5lcmF0ZVN0YXJzKF9kZW1vbE1hcC5zdGFyKSkgKyBfZGVtb2xNYXAuc3RhciAqIDJ95YiGYCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgaWYgKF9kZW1vbE1hcC5tZXNzYWdlX3RpdGxlKSB7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBhcGl2aWV3LmJpZyhfZGVtb2xNYXAubWVzc2FnZV90aXRsZSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGlmIChfZGVtb2xNYXAuY29tbWVudF9nb29kKSB7XFxuICAgICAgICAgICAgX2RlbW9sTWFwLm1lc3NhZ2UgPSBhcGl2aWV3Ll9nZW5lcmF0ZVN0cmluZyhfZGVtb2xNYXAuY29tbWVudF9nb29kLCAzMCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgaWYgKF9kZW1vbE1hcC5tZXNzYWdlKSB7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBhcGl2aWV3Ll9nZXRSZWdFeHAoX2RlbW9sTWFwKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX2RlbW9sUGljTWFwID0gX2RlbW9sTWFwLnBpY0FycjtcXG4gICAgICAgIGlmIChfZGVtb2xQaWNNYXAgJiYgJC50eXBlKF9kZW1vbFBpY01hcCkgPT0gXFxcImFycmF5XFxcIikge1xcbiAgICAgICAgICAgIF9kZW1vbFBpY01hcC5mb3JFYWNoKChfLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChfdHlwZV8gPT0gXFxcImZlZWRfcmVwbHlcXFwiID8gdHJ1ZSA6IChpIDwgMykpIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBfLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBfLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfM19zcXVhcmVcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICB9KTtcXG4gICAgICAgIGlmIChfZGVtb2xNYXAudGFyZ2V0X2luZm8pIHtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IF9kZW1vbE1hcC50YXJnZXRfaW5mby50aXRsZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBfZGVtb2xNYXAudGFyZ2V0X2luZm8ubG9nbyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKGFwaXZpZXcuZW1wdHkgKyBcXFwiI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5IyNnYW1lVGhlbWUjZnlwYWdlXFxcIikucnVsZSgoX2RlbW9sTWFwKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0TGlua1J1bGVQYXJzZShfZGVtb2xNYXAsIFxcXCJ0aXRsZVxcXCIsIFxcXCJ1cmxcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChhcGl2aWV3LmxheW91dCk7XFxuICAgICAgICAgICAgICAgIH0sIF9kZW1vbE1hcC50YXJnZXRfaW5mbyksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGlmIChfZGVtb2xNYXAudHRpdGxlKSB7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBfZGVtb2xNYXAudHRpdGxlLFxcbiAgICAgICAgICAgICAgICBpbWc6IF9kZW1vbE1hcC50cGljLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoYXBpdmlldy5lbXB0eSArIFxcXCIjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjI2dhbWVUaGVtZSNmeXBhZ2VcXFwiKS5ydWxlKChfZGVtb2xNYXApID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcIkNvbmZpZy52aWV3XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXRMaW5rUnVsZVBhcnNlKF9kZW1vbE1hcCwgXFxcInR0aXRsZVxcXCIsIFxcXCJ0dXJsXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoYXBpdmlldy5sYXlvdXQpO1xcbiAgICAgICAgICAgICAgICB9LCBfZGVtb2xNYXApLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH07XFxuICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgfSk7XFxuICAgICAgICBpZiAoX2RlbW9sTWFwLnNoYXJlX251bSAhPSBudWxsKSB7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBTdHJpbmcoX2RlbW9sTWFwLmxpa2VudW0pLFxcbiAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZShcXFwiaWNvbi50b29sXFxcIikuZ29vZCxcXG4gICAgICAgICAgICAgICAgdXJsOiBhcGl2aWV3LmVtcHR5LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfM1xcXCJcXG4gICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBTdHJpbmcoX2RlbW9sTWFwLnJlcGx5bnVtKSxcXG4gICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoXFxcImljb24udG9vbFxcXCIpLmRpc2N1c3MsXFxuICAgICAgICAgICAgICAgIHVybDogX2RlbW9sTWFwLnJlcGx5bnVtID4gMCA/ICQoYXBpdmlldy5lbXB0eSArIFxcXCIjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjI2dhbWVUaGVtZSNmeXBhZ2VcXFwiKS5ydWxlKChfaWRfKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkgYXBpdmlldy5fZ2VuZXJhdGVUb3AoKTtcXG4gICAgICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dFJlbWFya1BhcnNlKF9pZF8pO1xcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGFwaXZpZXcubGF5b3V0KTtcXG4gICAgICAgICAgICAgICAgfSwgX2RlbW9sTWFwLmlkKSA6IGFwaXZpZXcuZW1wdHksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF8zXFxcIlxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFN0cmluZyhfZGVtb2xNYXAuc2hhcmVfbnVtKSxcXG4gICAgICAgICAgICAgICAgaW1nOiAkLnJlcXVpcmUoXFxcImljb24udG9vbFxcXCIpLnNoYXJlLFxcbiAgICAgICAgICAgICAgICB1cmw6IGFwaXZpZXcuZW1wdHksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF8zXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH07XFxuICAgIH0sXFxuICAgIF9sYXlvdXRSZW1hcmtQYXJzZTogKF9pZF8pID0+IHtcXG4gICAgICAgIGxldCBfZGVtb2xwYWdlID0gTVlfUEFHRTtcXG4gICAgICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwiOnJlcGx5TGlzdFR5cGVcXFwiKTtcXG4gICAgICAgICAgICBjbGVhck15VmFyKFxcXCI6cmVwbHlOZXh0XFxcIik7XFxuICAgICAgICB9KSk7XFxuICAgICAgICBsZXQgX2RlbW9sdHlwZSA9IGdldE15VmFyKFxcXCI6cmVwbHlMaXN0VHlwZVxcXCIsIFxcXCLpu5jorqRcXFwiKTtcXG4gICAgICAgIGxldCBmcm9tRmVlZEF1dGhvciA9IG51bGw7XFxuICAgICAgICBzd2l0Y2ggKF9kZW1vbHR5cGUpIHtcXG4gICAgICAgICAgICBjYXNlIFxcXCLpu5jorqRcXFwiOlxcbiAgICAgICAgICAgICAgICBfdHlwZV8gPSBcXFwibGFzdHVwZGF0ZV9kZXNjXFxcIjtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSBcXFwi5pyA5pawXFxcIjpcXG4gICAgICAgICAgICAgICAgX3R5cGVfID0gXFxcImRhdGVsaW5lX2Rlc2NcXFwiO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlIFxcXCLng63pl6hcXFwiOlxcbiAgICAgICAgICAgICAgICBfdHlwZV8gPSBcXFwicG9wdWxhclxcXCI7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgXFxcIualvOS4u1xcXCI6XFxuICAgICAgICAgICAgICAgIF90eXBlXyA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICBmcm9tRmVlZEF1dGhvciA9IDE7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGxldCBfZGVtb2xSZXBseU1hcCA9IGFwaXZpZXcuX2RlbW9sX0FqYXgoYnVpbGRVcmwoXFxcIi92Ni9mZWVkL3JlcGx5TGlzdFxcXCIsIHtcXG4gICAgICAgICAgICBpZDogX2lkXyxcXG4gICAgICAgICAgICBsaXN0VHlwZTogX3R5cGVfLFxcbiAgICAgICAgICAgIHBhZ2U6IF9kZW1vbHBhZ2UsXFxuICAgICAgICAgICAgZGlzY3Vzc01vZGU6IDEsXFxuICAgICAgICAgICAgZmVlZFR5cGU6IFxcXCJmZWVkXFxcIixcXG4gICAgICAgICAgICBibG9ja1N0YXR1czogMCxcXG4gICAgICAgICAgICBmcm9tRmVlZEF1dGhvcjogZnJvbUZlZWRBdXRob3IgPyBmcm9tRmVlZEF1dGhvciA6IDBcXG4gICAgICAgIH0pLCB0cnVlKTtcXG4gICAgICAgIGxldCBfbmV4dCA9IF9kZW1vbFJlcGx5TWFwICYmICQudHlwZShfZGVtb2xSZXBseU1hcCkgPT0gXFxcImFycmF5XFxcIiAmJiBfZGVtb2xSZXBseU1hcC5sZW5ndGggPiAwO1xcbiAgICAgICAgaWYgKF9uZXh0KSBwdXRNeVZhcihcXFwiOnJlcGx5TmV4dFxcXCIsIFxcXCJ0cnVlXFxcIik7XFxuICAgICAgICBfbmV4dCA9IGdldE15VmFyKFxcXCI6cmVwbHlOZXh0XFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgaWYgKF9kZW1vbHBhZ2UgPT0gMSAmJiBfbmV4dCA9PSBcXFwidHJ1ZVxcXCIpIHtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGFwaXZpZXcuc3Ryb25nKGFwaXZpZXcuYmlnKFxcXCLor4TorrrljLpcXFwiKSksXFxuICAgICAgICAgICAgICAgIGRlc2M6IGA8dT4ke19kZW1vbHR5cGV9PC91PmAsXFxuICAgICAgICAgICAgICAgIHVybDogJChbXFxcIum7mOiupFxcXCIsIFxcXCLmnIDmlrBcXFwiLCBcXFwi54Ot6ZeoXFxcIiwgXFxcIualvOS4u1xcXCJdLCAyLCBcXFwi5o6S5bqPOlxcXCIgKyBfZGVtb2x0eXBlKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcIjpyZXBseUxpc3RUeXBlXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suWIh+aNouS4uiBcXFwiICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICBpbWc6ICQucmVxdWlyZShcXFwiaWNvbi50b29sXFxcIikucmVwbHlzb3J0LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH07XFxuICAgICAgICBpZiAoX25leHQgPT0gXFxcInRydWVcXFwiKSB7XFxuICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0RGV0ZXJtaW5lUGFyc2UoX2RlbW9sUmVwbHlNYXAsIF9pZF8pO1xcbiAgICAgICAgfTtcXG4gICAgfSxcXG4gICAgX2xheW91dExpbmtSdWxlUGFyc2U6IChfZGVtb2xNYXAsIHRpdGxlLCB1cmwpID0+IHtcXG4gICAgICAgIGxldCBfZGVtb2xwYWdlID0gTVlfUEFHRTtcXG4gICAgICAgIGxldCBfZGVtb2xVcmwgPSBfZGVtb2xNYXBbdXJsID8gdXJsIDogXFxcInVybFxcXCJdO1xcbiAgICAgICAgX2RlbW9sVXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KF9kZW1vbFVybCk7XFxuICAgICAgICBsZXQgX2RlbW9sTmFtZSA9IF9kZW1vbE1hcFt0aXRsZSA/IHRpdGxlIDogXFxcInRpdGxlXFxcIl07XFxuICAgICAgICBpZiAoIV9kZW1vbFVybC5zdGFydHNXaXRoKFxcXCIvcGFnZVxcXCIpICYmIF9kZW1vbFVybC5pbmNsdWRlcyhcXFwiL3QvXFxcIikpIHtcXG4gICAgICAgICAgICBfZGVtb2xVcmwgPSBfZGVtb2xVcmwuc3BsaXQoXFxcIi90L1xcXCIpWzFdO1xcbiAgICAgICAgICAgIGlmIChfZGVtb2xNYXAuZW50aXR5VHlwZSA9PSBcXFwicGljQ2F0ZWdvcnlcXFwiKSB7XFxuICAgICAgICAgICAgICAgIF9kZW1vbFVybCA9IF9kZW1vbFVybC5zcGxpdChcXFwiP1xcXCIpWzBdO1xcbiAgICAgICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXRQaWN0dXJlUnVsZVBhcnNlKF9kZW1vbFVybCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0VGFiUnVsZVBhcnNlKF9kZW1vbFVybCk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgIH0gZWxzZSBpZiAoIV9kZW1vbFVybC5zdGFydHNXaXRoKFxcXCIvcGFnZVxcXCIpICYmIF9kZW1vbFVybC5pbmNsdWRlcyhcXFwiL3Byb2R1Y3QvXFxcIikpIHtcXG4gICAgICAgICAgICBfZGVtb2xVcmxzID0gX2RlbW9sVXJsLnNwbGl0KFxcXCIvcHJvZHVjdC9cXFwiKVsxXTtcXG4gICAgICAgICAgICBpZiAoX2RlbW9sTWFwLmVudGl0eVR5cGUgPT0gXFxcInBpY0NhdGVnb3J5XFxcIikge1xcbiAgICAgICAgICAgICAgICBfZGVtb2xVcmwgPSBfZGVtb2xVcmxzLnNwbGl0KFxcXCI/XFxcIilbMF07XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dFBpY3R1cmVSdWxlUGFyc2UoX2RlbW9sVXJsKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9kZW1vbFVybHMuc3RhcnRzV2l0aChcXFwiY2F0ZWdvcnlMaXN0XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgaWYgKF9kZW1vbHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgYXBpdmlldy5fZ2VuZXJhdGVUb3AoKTtcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgX2RlbW9sVXJsID0gX2RlbW9sVXJsLnNwbGl0KFxcXCI/XFxcIilbMF07XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dExpbmtUYWJQYXJzZShhcGl2aWV3Ll9kZW1vbF9BamF4KGAvdjYke19kZW1vbFVybH1gKSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0VGFiUnVsZVBhcnNlKF9kZW1vbFVybHMpO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICB9IGVsc2UgaWYgKCFfZGVtb2xVcmwuc3RhcnRzV2l0aChcXFwiL3BhZ2VcXFwiKSAmJiBfZGVtb2xVcmwuaW5jbHVkZXMoXFxcIi9keWgvXFxcIikpIHtcXG4gICAgICAgICAgICBfZGVtb2xVcmxzID0gX2RlbW9sVXJsLnNwbGl0KFxcXCIvZHloL1xcXCIpWzFdO1xcbiAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dER5aFJ1bGVQYXJzZShfZGVtb2xVcmxzKTtcXG4gICAgICAgIH0gZWxzZSBpZiAoX2RlbW9sVXJsLmVuZHNXaXRoKFxcXCJjb3Vwb25TZWFyY2hcXFwiKSkge1xcbiAgICAgICAgICAgIGFwaXZpZXcuX3NlYXJjaEdvb2RzUGFyc2UoKTtcXG4gICAgICAgIH0gZWxzZSBpZiAoX2RlbW9sVXJsLnN0YXJ0c1dpdGgoXFxcIi9hcGsvXFxcIikgfHwgX2RlbW9sVXJsLnN0YXJ0c1dpdGgoXFxcIi9nYW1lL1xcXCIpKSB7XFxuICAgICAgICAgICAgaWYgKF9kZW1vbFVybC5zdGFydHNXaXRoKFxcXCIvYXBrL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgIF9kZW1vbFVybCA9IF9kZW1vbFVybC5zcGxpdChcXFwiL2Fway9cXFwiKVsxXTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBfZGVtb2xVcmwgPSBfZGVtb2xVcmwuc3BsaXQoXFxcIi9nYW1lL1xcXCIpWzFdO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0QXBrUnVsZVBhcnNlKF9kZW1vbFVybCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmIChfZGVtb2xwYWdlID09IDEpIGFwaXZpZXcuX2dlbmVyYXRlVG9wKCk7XFxuICAgICAgICAgICAgaWYgKF9kZW1vbFVybC5pbmNsdWRlcyhcXFwiL3BhZ2VcXFwiKSkge1xcbiAgICAgICAgICAgICAgICBfZGVtb2xVcmwgPSBfZGVtb2xVcmwuc3BsaXQoXFxcIi9wYWdlP3VybD1cXFwiKVsxXTtcXG4gICAgICAgICAgICAgICAgaWYgKF9kZW1vbFVybC5pbmNsdWRlcyhcXFwic2VsZWN0ZWRUYWJcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgX2RlbW9sVXJsID0gX2RlbW9sVXJsLnNwbGl0KFxcXCImXFxcIilbMF07XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgX2RlbW9sVXJsID0gX2RlbW9sVXJsLnNwbGl0KFxcXCIjXFxcIilbMV07XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXREZXRlcm1pbmVQYXJzZShhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvcGFnZS9kYXRhTGlzdFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgdXJsOiBfZGVtb2xVcmwsXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBfZGVtb2xOYW1lLFxcbiAgICAgICAgICAgICAgICBzdWJUaXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgIHBhZ2U6IF9kZW1vbHBhZ2VcXG4gICAgICAgICAgICB9KSk7XFxuICAgICAgICB9O1xcbiAgICB9LFxcbiAgICBfbGF5b3V0TGlua1RhYlBhcnNlOiAoX2RlbW9sTWFwLCBfZGVtb2wpID0+IHtcXG4gICAgICAgIGxldCBfZGVtb2wgPSBfZGVtb2wgPyBfZGVtb2wgOiBcXFwiXFxcIjtcXG4gICAgICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoX2RlbW9sKSA9PiB7XFxuICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwiOmxpbmtOZXh0XFxcIiArIF9kZW1vbCk7XFxuICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwiOmxpbmtUYWdcXFwiICsgX2RlbW9sKTtcXG4gICAgICAgIH0sIF9kZW1vbCkpO1xcbiAgICAgICAgbGV0IF9kZW1vbHBhZ2UgPSBNWV9QQUdFO1xcbiAgICAgICAgbGV0IHRpbmRleCA9IGdldE15VmFyKFxcXCI6bGlua1RhZ1xcXCIgKyBfZGVtb2wsIFxcXCIwXFxcIik7XFxuICAgICAgICBsZXQgX2RlbW9sTWFwID0gX2RlbW9sTWFwLmZpbHRlcihfID0+IF8udGl0bGUgIT0gXFxcIuWFs+azqFxcXCIgJiYgXy50aXRsZSAhPSBcXFwi5ZOB54mMXFxcIik7XFxuICAgICAgICBpZiAoX2RlbW9scGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQgPSBhcGl2aWV3LmxheW91dC5jb25jYXQoX2RlbW9sTWFwLm1hcCgoXywgaSkgPT4gKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGkgPT0gdGluZGV4ID8gYXBpdmlldy5yaWNoKGFwaXZpZXcuc3Ryb25nKGFwaXZpZXcuY29sb3IoXy50aXRsZSkpKSA6IF8udGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaSwgZW1wdHksIF9kZW1vbCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcIjpsaW5rVGFnXFxcIiArIF9kZW1vbCwgaSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5O1xcbiAgICAgICAgICAgICAgICB9LCBpLCBhcGl2aWV3LmVtcHR5LCBfZGVtb2wpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpID09IHRpbmRleCA/IFxcXCIjMjBGQTcyOThcXFwiIDogXFxcIlxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX2RlbW9sTWFwID0gX2RlbW9sTWFwW3RpbmRleF07XFxuICAgICAgICBsZXQgX2RlbW9sVXJsID0gX2RlbW9sTWFwLnVybDtcXG4gICAgICAgIGxldCBfZGVtb2xOYW1lID0gX2RlbW9sTWFwLnRpdGxlO1xcbiAgICAgICAgbGV0IF9saW5rTmV4dCA9ICgpID0+IGdldE15VmFyKFxcXCI6bmV4dFxcXCIgKyBfZGVtb2xVcmwsIFxcXCJcXFwiKTtcXG4gICAgICAgIGlmICghX2RlbW9sVXJsLnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSAmJiAhX2RlbW9sVXJsLnN0YXJ0c1dpdGgoXFxcImh0dHBzXFxcIikpIHtcXG4gICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXREZXRlcm1pbmVQYXJzZShhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvcGFnZS9kYXRhTGlzdFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgdXJsOiBfZGVtb2xVcmwsXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBfZGVtb2xOYW1lLFxcbiAgICAgICAgICAgICAgICBzdWJUaXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgIHBhZ2U6IF9saW5rTmV4dCgpID8gMSA6IF9kZW1vbHBhZ2VcXG4gICAgICAgICAgICB9KSwgX2RlbW9sVXJsKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJhdXRvXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBfZGVtb2xVcmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgY2FuQmFjazogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgICAgIMKgwqDCoMKgdXJsSW50ZXJjZXB0b3I6ICQudG9TdHJpbmcoKE1ZX1JVTEUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuaW5jbHVkZXMoXFxcIi90L1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaW5wdXQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKGFycmF5LCBNWV9SVUxFKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZTogTVlfUlVMRS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGBoaWtlcjovL3BhZ2UvQ2Fyb3VzZWwudmlldz9ydWxlPemFt+WuiSZwYWdlPWZ5cGFnZSZhcnJheT0ke2VuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShhcnJheSkpfSZoaWtlcj0jbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjI2dhbWVUaGVtZSNmeXBhZ2VgLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRSdWxlOiBNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3V2luZG93OiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dJZDogTVlfUlVMRS50aXRsZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYXJyYXksIE1ZX1JVTEUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSwgTVlfUlVMRSksXFxuICAgICAgICAgICAgICAgICAgICB1YTogXFxcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMDsgVjIzMDRBIEJ1aWxkL1VQMUEuMjMxMDA1LjAwNzsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS83NC4wLjM3MjkuMTg2IE1vYmlsZSBTYWZhcmkvNTM3LjM2ICgjQnVpbGQ7IHZpdm87IFYyMzA0QTsgVVAxQS4yMzEwMDUuMDA3IHJlbGVhc2Uta2V5czsgMTApICtDb29sTWFya2V0LzEzLjMuNi0yMzEwMjMyLXVuaXZlcnNhbFxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgfSxcXG4gICAgX2xheW91dFJ1bGVQYXJzZTogKF9pZF8sIF9kZW1vbF8pID0+IHtcXG4gICAgICAgIGxldCBfZGVtb2xwYWdlID0gTVlfUEFHRTtcXG4gICAgICAgIGxldCBfZGVtb2xNYXAgPSBzdG9yYWdlMC5nZXRNeVZhcihgJHtfaWRffTpmZWVkRGV0YWlsYCwgW10pO1xcbiAgICAgICAgaWYgKF9kZW1vbE1hcC5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgIF9kZW1vbE1hcCA9IGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9mZWVkL2RldGFpbFxcXCIsIE9iamVjdC5hc3NpZ24oe1xcbiAgICAgICAgICAgICAgICBpZDogX2lkX1xcbiAgICAgICAgICAgIH0sIF9kZW1vbF8gPyB7XFxuICAgICAgICAgICAgICAgIGZyb21BcGk6IF9kZW1vbF9cXG4gICAgICAgICAgICB9IDoge30pLCB0cnVlKTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihgJHtfaWRffTpmZWVkRGV0YWlsYCwgX2RlbW9sTWFwKTtcXG4gICAgICAgIH07XFxuICAgICAgICBsZXQgX2RlbW9sUGljcyA9IF9kZW1vbE1hcC5waWNBcnI7XFxuICAgICAgICBpZiAoX2RlbW9scGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgYXBpdmlldy5fZ2VuZXJhdGVUb3AoKTtcXG4gICAgICAgICAgICBpZiAoX2RlbW9sUGljcyAmJiAkLnR5cGUoX2RlbW9sUGljcykgPT0gXFxcImFycmF5XFxcIikge1xcbiAgICAgICAgICAgICAgICBhcGl2aWV3LmxheW91dCA9IGFwaXZpZXcubGF5b3V0LmNvbmNhdChfZGVtb2xQaWNzLm1hcChfID0+ICh7XFxuICAgICAgICAgICAgICAgICAgICBpbWc6IF8sXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IF8sXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18zX3NxdWFyZVxcXCJcXG4gICAgICAgICAgICAgICAgfSkpKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGxldCBfZGVtb2xNc2cgPSBhcGl2aWV3Ll9nZXRSZWdFeHAoX2RlbW9sTWFwLCB0cnVlKTtcXG4gICAgICAgICAgICBpZiAoX2RlbW9sTXNnKSB7XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF9kZW1vbE1zZyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICB9O1xcbiAgICAgICAgYXBpdmlldy5fbGF5b3V0UmVtYXJrUGFyc2UoX2lkXyk7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoXFxcIjpyZXBseU5leHRcXFwiLCBcXFwiXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBhcGl2aWV3Ll9nZW5lcmF0ZUVuZCgpO1xcbiAgICAgICAgfTtcXG4gICAgfSxcXG4gICAgX2xheW91dEFwcFJ1bGVQYXJzZTogKF9kZW1vbE1hcCkgPT4ge1xcbiAgICAgICAgbGV0IF9kZW1vbHBhZ2UgPSBNWV9QQUdFO1xcbiAgICAgICAgbGV0IF9kZW1vbFBpY3MgPSBfZGVtb2xNYXAudGh1bWJMaXN0O1xcbiAgICAgICAgaWYgKF9kZW1vbHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIGlmIChfZGVtb2xQaWNzICYmICQudHlwZShfZGVtb2xQaWNzKSA9PSBcXFwiYXJyYXlcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0ID0gYXBpdmlldy5sYXlvdXQuY29uY2F0KF9kZW1vbFBpY3MubWFwKF8gPT4gKHtcXG4gICAgICAgICAgICAgICAgICAgIGltZzogXyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogYXBpdmlldy5lbXB0eSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzNfc3F1YXJlXFxcIlxcbiAgICAgICAgICAgICAgICB9KSkpO1xcbiAgICAgICAgICAgICAgICBfZGVtb2xNYXAubWVzc2FnZSA9IChfZGVtb2xNYXAuY2hhbmdlbG9nID8gYCR7YXBpdmlldy5zdHJvbmcoYXBpdmlldy5iaWcoYXBpdmlldy5iaWcoXFxcIuaWsOeJiOeJueaAp++8mlxcXCIpKSl9PGJyPiR7X2RlbW9sTWFwLmNoYW5nZWxvZ31gIDogXFxcIlxcXCIpICsgKChfZGVtb2xNYXAuY2hhbmdlbG9nICYmIF9kZW1vbE1hcC5pbnRyb2R1Y2UpID8gXFxcIjxicj48YnI+XFxcIiA6IFxcXCJcXFwiKSArIChfZGVtb2xNYXAuaW50cm9kdWNlID8gYCR7YXBpdmlldy5zdHJvbmcoYXBpdmlldy5iaWcoYXBpdmlldy5iaWcoXFxcIuW6lOeUqOS7i+e7je+8mlxcXCIpKSl9PGJyPiR7X2RlbW9sTWFwLmludHJvZHVjZX1gIDogXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgX2RlbW9sTXNnID0gYXBpdmlldy5fZ2V0UmVnRXhwKF9kZW1vbE1hcCwgdHJ1ZSk7XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF9kZW1vbE1zZyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgYXBpdmlldy5fZ2VuZXJhdGVFbmQoKTtcXG4gICAgICAgIH07XFxuICAgIH0sXFxuICAgIF9sYXlvdXRQaWN0dXJlUnVsZVBhcnNlOiAoX2RlbW9sKSA9PiB7XFxuICAgICAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcIjpwaWN0dXJlVGFnXFxcIik7XFxuICAgICAgICB9KSk7XFxuICAgICAgICBsZXQgX2RlbW9scGFnZSA9IE1ZX1BBR0U7XFxuICAgICAgICBsZXQgX2RlbW9sTWFwID0gW1xcXCLnsr7pgIlcXFwiLCBcXFwi54Ot6ZeoXFxcIiwgXFxcIuacgOaWsFxcXCJdO1xcbiAgICAgICAgbGV0IHRpbmRleCA9IGdldE15VmFyKFxcXCI6cGljdHVyZVRhZ1xcXCIsIFxcXCIwXFxcIik7XFxuICAgICAgICBpZiAoX2RlbW9scGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgYXBpdmlldy5fZ2VuZXJhdGVUb3AoKTtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dCA9IGFwaXZpZXcubGF5b3V0LmNvbmNhdChfZGVtb2xNYXAubWFwKChpdGVtLCBpKSA9PiAoe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaSA9PSB0aW5kZXggPyBhcGl2aWV3LnJpY2goYXBpdmlldy5zdHJvbmcoYXBpdmlldy5jb2xvcihpdGVtKSkpIDogaXRlbSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpLCBlbXB0eSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcIjpwaWN0dXJlVGFnXFxcIiwgaSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5O1xcbiAgICAgICAgICAgICAgICB9LCBpLCBhcGl2aWV3LmVtcHR5KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaSA9PSB0aW5kZXggPyBcXFwiIzIwRkE3Mjk4XFxcIiA6IFxcXCJcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHN3aXRjaCAoX2RlbW9sTWFwW3RpbmRleF0pIHtcXG4gICAgICAgICAgICBjYXNlIF9kZW1vbE1hcFswXTpcXG4gICAgICAgICAgICAgICAgX3R5cGVfID0gXFxcInJlY29tbWVuZFxcXCI7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgX2RlbW9sTWFwWzFdOlxcbiAgICAgICAgICAgICAgICBfdHlwZV8gPSBcXFwiaG90XFxcIjtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSBfZGVtb2xNYXBbMl06XFxuICAgICAgICAgICAgICAgIF90eXBlXyA9IFxcXCJuZXdlc3RcXFwiO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH07XFxuICAgICAgICBhcGl2aWV3Ll9sYXlvdXREZXRlcm1pbmVQYXJzZShhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvcGljdHVyZS9saXN0XFxcIiwge1xcbiAgICAgICAgICAgIHRhZzogX2RlbW9sLFxcbiAgICAgICAgICAgIHR5cGU6IF90eXBlXyxcXG4gICAgICAgICAgICBwYWdlOiBfZGVtb2xwYWdlXFxuICAgICAgICB9KSk7XFxuICAgIH0sXFxuICAgIF9sYXlvdXRVc2VyUnVsZVBhcnNlOiAoX2RlbW9sTWFwKSA9PiB7XFxuICAgICAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcIjp1c2VyVGFnXFxcIik7XFxuICAgICAgICB9KSk7XFxuICAgICAgICBfZGVtb2xNYXAgPSBfZGVtb2xNYXAudXNlckluZm8gfHwgX2RlbW9sTWFwO1xcbiAgICAgICAgbGV0IF9kZW1vbE1hcHMgPSB7fTtcXG4gICAgICAgIF9kZW1vbE1hcHMudXNlcm5hbWUgPSBfZGVtb2xNYXAudXNlcm5hbWU7XFxuICAgICAgICBfZGVtb2xNYXBzLnVzZXJBdmF0YXIgPSBfZGVtb2xNYXAudXNlckF2YXRhcjtcXG4gICAgICAgIF9kZW1vbE1hcHMudWlkID0gX2RlbW9sTWFwLnVpZDtcXG4gICAgICAgIF9kZW1vbE1hcHMuZW50aXR5VHlwZSA9IF9kZW1vbE1hcC5lbnRpdHlUeXBlO1xcbiAgICAgICAgbGV0IF9kZW1vbHBhZ2UgPSBNWV9QQUdFO1xcbiAgICAgICAgbGV0IGRvd24gPSBhcGl2aWV3Ll9HZXRfc2NyaXB0aW9uO1xcbiAgICAgICAgbGV0IGFicmVhayA9IGZhbHNlO1xcbiAgICAgICAgZXZhbChcXFwiZmlsZV9tYXAgPVxcXCIgKyByZWFkRmlsZShkb3duKSk7XFxuICAgICAgICBmaWxlX21hcFtNWV9SVUxFLnRpdGxlXVtcXFwidXNlclxcXCJdLmZvckVhY2goXyA9PiB7XFxuICAgICAgICAgICAgaWYgKF9bXFxcInVpZFxcXCJdID09IF9kZW1vbE1hcC51aWQpIHtcXG4gICAgICAgICAgICAgICAgYWJyZWFrID0gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCBfdGFiTWFwID0gW1xcXCLliqjmgIFcXFwiLCBcXFwi54K56K+EXFxcIiwgXFxcIuWbvuaWh1xcXCIsIFxcXCLpl67nrZRcXFwiLCBcXFwi6YW35Zu+XFxcIiwgXFxcIuWlveeJqVxcXCIsIFxcXCLmlLbol4/ljZVcXFwiLCBcXFwi5bqU55So6ZuGXFxcIl07XFxuICAgICAgICBsZXQgdGluZGV4ID0gZ2V0TXlWYXIoXFxcIjp1c2VyVGFnXFxcIiwgXFxcIjBcXFwiKTtcXG4gICAgICAgIGlmIChfZGVtb2xwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiY2FyZF9waWNfM1xcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogYXBpdmlldy5lbXB0eVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICBpbWc6IF9kZW1vbE1hcC51c2VyQXZhdGFyLFxcbiAgICAgICAgICAgICAgICB1cmw6IGFwaXZpZXcuZW1wdHksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiY2FyZF9waWNfM1xcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGFwaXZpZXcucmljaChhcGl2aWV3LmJpZyhfZGVtb2xNYXAudXNlcm5hbWUpKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBhcGl2aWV3LmVtcHR5LFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGFwaXZpZXcucmljaChhcGl2aWV3LnN0cm9uZyhhcGl2aWV3LmJpZyhhYnJlYWsgPyBcXFwi5Y+W5YWzXFxcIiA6IFxcXCLlhbPms6hcXFwiKSkpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IGFicmVhayA/ICQoYXBpdmlldy5lbXB0eSkubGF6eVJ1bGUoKF9kZW1vbE1hcHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcIkNvbmZpZy52aWV3XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgZG93biA9IGFwaXZpZXcuX0dldF9zY3JpcHRpb247XFxuICAgICAgICAgICAgICAgICAgICBsZXQgYWJyZWFrID0gZmFsc2U7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKFxcXCJhamF4X21hcCA9XFxcIiArIHJlYWRGaWxlKGRvd24pKTtcXG4gICAgICAgICAgICAgICAgICAgIGFqYXhfbWFwW01ZX1JVTEUudGl0bGVdW1xcXCJ1c2VyXFxcIl0uZm9yRWFjaCgoSXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJdGVtW1xcXCJ1aWRcXFwiXSA9PSBfZGVtb2xNYXBzLnVpZCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW5kZXggPSBpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnJlYWsgPSB0cnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFicmVhaykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhfbWFwW01ZX1JVTEUudGl0bGVdW1xcXCJ1c2VyXFxcIl0uc3BsaWNlKHRpbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGUoZG93biwgSlNPTi5zdHJpbmdpZnkoYWpheF9tYXApLCAwKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChcXFwi5pON5L2c5oiQ5YqfXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChcXFwi5pON5L2c5aSx6LSlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwaXZpZXcuZW1wdHk7XFxuICAgICAgICAgICAgICAgIH0sIF9kZW1vbE1hcHMpIDogJChhcGl2aWV3LmVtcHR5KS5sYXp5UnVsZSgoX2RlbW9sTWFwcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBpdmlldyA9ICQucmVxdWlyZShcXFwiQ29uZmlnLnZpZXdcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBkb3duID0gYXBpdmlldy5fR2V0X3NjcmlwdGlvbjtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoXFxcImFqYXhfbWFwID1cXFwiICsgcmVhZEZpbGUoZG93bikpO1xcbiAgICAgICAgICAgICAgICAgICAgYWpheF9tYXBbTVlfUlVMRS50aXRsZV1bXFxcInVzZXJcXFwiXS5wdXNoKF9kZW1vbE1hcHMpO1xcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGUoZG93biwgSlNPTi5zdHJpbmdpZnkoYWpheF9tYXApLCAwKTtcXG4gICAgICAgICAgICAgICAgICAgIHRvYXN0KFxcXCLmk43kvZzmiJDlip9cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcGl2aWV3LmVtcHR5O1xcbiAgICAgICAgICAgICAgICB9LCBfZGVtb2xNYXBzKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0ID0gYXBpdmlldy5sYXlvdXQuY29uY2F0KF90YWJNYXAubWFwKChfLCBpKSA9PiAoe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaSA9PSB0aW5kZXggPyBhcGl2aWV3LnJpY2goYXBpdmlldy5iaWcoYXBpdmlldy5zdHJvbmcoXykpKSA6IF8sXFxuICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaSwgZW1wdHkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCI6dXNlclRhZ1xcXCIsIGkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eTtcXG4gICAgICAgICAgICAgICAgfSwgaSwgYXBpdmlldy5lbXB0eSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgICAgICB9KSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHN3aXRjaCAoX3RhYk1hcFt0aW5kZXhdKSB7XFxuICAgICAgICAgICAgY2FzZSBfdGFiTWFwWzBdOlxcbiAgICAgICAgICAgICAgICBfZGVtb2xNYXBzID0gYXBpdmlldy5fZGVtb2xfQWpheChcXFwiL3Y2L3VzZXIvZmVlZExpc3RcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICB1aWQ6IF9kZW1vbE1hcC51aWQsXFxuICAgICAgICAgICAgICAgICAgICBwYWdlOiBfZGVtb2xwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgc2hvd0Fub255bW91czogMCxcXG4gICAgICAgICAgICAgICAgICAgIGlzSW5jbHVkZVRvcDogMSxcXG4gICAgICAgICAgICAgICAgICAgIHNob3dEb2luZzogMVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSBfdGFiTWFwWzFdOlxcbiAgICAgICAgICAgICAgICBfZGVtb2xfID0gYnVpbGRVcmwoXFxcIi9mZWVkL25vZGVSYXRpbmdMaXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgdWlkOiBfZGVtb2xNYXAudWlkLFxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VHlwZTogXFxcImFsbFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVJhdGluZ1RvRmVlZDogMVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgX2RlbW9sTWFwcyA9IGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9wYWdlL2RhdGFMaXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBfZGVtb2xfLFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgc3ViVGl0bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSBfdGFiTWFwWzJdOlxcbiAgICAgICAgICAgICAgICBfZGVtb2xNYXBzID0gYXBpdmlldy5fZGVtb2xfQWpheChcXFwiL3Y2L3VzZXIvaHRtbEZlZWRMaXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgdWlkOiBfZGVtb2xNYXAudWlkLFxcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSBfdGFiTWFwWzNdOlxcbiAgICAgICAgICAgICAgICBfZGVtb2xNYXBzID0gYXBpdmlldy5fZGVtb2xfQWpheChcXFwiL3Y2L3VzZXIvcXVlc3Rpb25BbmRBbnN3ZXJMaXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgdWlkOiBfZGVtb2xNYXAudWlkLFxcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSBfdGFiTWFwWzRdOlxcbiAgICAgICAgICAgICAgICBfZGVtb2xfID0gYnVpbGRVcmwoXFxcIi9mZWVkL3VzZXJDb29sUGljdHVyZUZlZWRMaXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRUZW1wbGF0ZTogXFxcImZsZXhcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdWlkOiBTdHJpbmcoX2RlbW9sTWFwLnVpZClcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIF9kZW1vbE1hcHMgPSBhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvcGFnZS9kYXRhTGlzdFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgIHVybDogX2RlbW9sXyxcXG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IF9kZW1vbHBhZ2VcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgX3RhYk1hcFs1XTpcXG4gICAgICAgICAgICAgICAgX2RlbW9sXyA9IGJ1aWxkVXJsKFxcXCIvZ29vZHMvZ29vZHNGZWVkTGlzdFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50VGVtcGxhdGU6IFxcXCJmbGV4XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVpZDogX2RlbW9sTWFwLnVpZFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgX2RlbW9sTWFwcyA9IGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9wYWdlL2RhdGFMaXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBfZGVtb2xfLFxcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSBfdGFiTWFwWzZdOlxcbiAgICAgICAgICAgICAgICBfZGVtb2xNYXBzID0gYXBpdmlldy5fZGVtb2xfQWpheChcXFwiL3Y2L2NvbGxlY3Rpb24vbGlzdFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgIHVpZDogX2RlbW9sTWFwLnVpZCxcXG4gICAgICAgICAgICAgICAgICAgIHNob3dEZWZhdWx0OiAwLFxcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSBfdGFiTWFwWzddOlxcbiAgICAgICAgICAgICAgICBfZGVtb2xNYXBzID0gYXBpdmlldy5fZGVtb2xfQWpheChcXFwiL3Y2L3VzZXIvYWxidW1MaXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgdWlkOiBfZGVtb2xNYXAudWlkLFxcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogX2RlbW9scGFnZVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9O1xcbiAgICAgICAgaWYgKF9kZW1vbE1hcHMgPT0gbnVsbCB8fCAkLnR5cGUoX2RlbW9sTWFwcykgPT0gXFxcIm9iamVjdFxcXCIpIHtcXG4gICAgICAgICAgICBfZGVtb2xNYXBzID0gW107XFxuICAgICAgICB9O1xcbiAgICAgICAgYXBpdmlldy5fbGF5b3V0RGV0ZXJtaW5lUGFyc2UoX2RlbW9sTWFwcywgX2RlbW9sTWFwLnVpZCk7XFxuICAgIH0sXFxuICAgIF9sYXlvdXREeWhSdWxlUGFyc2U6IChfZGVtb2wpID0+IHtcXG4gICAgICAgIGxldCBfZGVtb2xwYWdlID0gTVlfUEFHRTtcXG4gICAgICAgIGxldCBkb3duID0gYXBpdmlldy5fR2V0X3NjcmlwdGlvbjtcXG4gICAgICAgIGxldCBhYnJlYWsgPSBmYWxzZTtcXG4gICAgICAgIGV2YWwoXFxcImZpbGVfbWFwID1cXFwiICsgcmVhZEZpbGUoZG93bikpO1xcbiAgICAgICAgbGV0IF9kZW1vbE1hcCA9IHN0b3JhZ2UwLmdldE15VmFyKF9kZW1vbCArIFxcXCI6ZHloVGFnXFxcIiwgW10pO1xcbiAgICAgICAgaWYgKF9kZW1vbE1hcC5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgIF9kZW1vbE1hcCA9IGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9keWgvZGV0YWlsXFxcIiwge1xcbiAgICAgICAgICAgICAgICBkeWhJZDogX2RlbW9sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoX2RlbW9sICsgXFxcIjpkeWhUYWdcXFwiLCBfZGVtb2xNYXApO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGxldCBfZGVtb2xNYXBzID0ge307XFxuICAgICAgICBfZGVtb2xNYXBzLnRpdGxlID0gX2RlbW9sTWFwLnRpdGxlO1xcbiAgICAgICAgX2RlbW9sTWFwcy5pZCA9IF9kZW1vbDtcXG4gICAgICAgIF9kZW1vbE1hcHMubG9nbyA9IF9kZW1vbE1hcC5sb2dvO1xcbiAgICAgICAgX2RlbW9sTWFwcy5lbnRpdHlUeXBlID0gX2RlbW9sTWFwLmVudGl0eVR5cGU7XFxuICAgICAgICBfZGVtb2xNYXBzLnVybCA9IGAvZHloLyR7X2RlbW9sfWA7XFxuICAgICAgICBmaWxlX21hcFtNWV9SVUxFLnRpdGxlXVtcXFwiZHloXFxcIl0uZm9yRWFjaChfID0+IHtcXG4gICAgICAgICAgICBpZiAoXy50aXRsZSA9PSBfZGVtb2xNYXAudGl0bGUpIHtcXG4gICAgICAgICAgICAgICAgYWJyZWFrID0gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICB9KTtcXG4gICAgICAgIGlmIChfZGVtb2xwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBhcGl2aWV3Ll9nZW5lcmF0ZVRvcCgpO1xcbiAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJjYXJkX3BpY18zXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBhcGl2aWV3LmVtcHR5XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGltZzogX2RlbW9sTWFwcy5sb2dvLFxcbiAgICAgICAgICAgICAgICB1cmw6IGFwaXZpZXcuZW1wdHksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiY2FyZF9waWNfM1xcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGFwaXZpZXcucmljaChhcGl2aWV3LmJpZyhfZGVtb2xNYXBzLnRpdGxlKSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogYXBpdmlldy5lbXB0eSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBhcGl2aWV3LnJpY2goYXBpdmlldy5ncmF5KGFicmVhayA/IFxcXCLlj5blhbNcXFwiIDogXFxcIuWFs+azqFxcXCIpKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBhYnJlYWsgPyAkKGFwaXZpZXcuZW1wdHkpLmxhenlSdWxlKChfZGVtb2xNYXBzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvd24gPSBhcGl2aWV3Ll9HZXRfc2NyaXB0aW9uO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFicmVhayA9IGZhbHNlO1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbChcXFwiYWpheF9tYXAgPVxcXCIgKyByZWFkRmlsZShkb3duKSk7XFxuICAgICAgICAgICAgICAgICAgICBhamF4X21hcFtNWV9SVUxFLnRpdGxlXVtcXFwiZHloXFxcIl0uZm9yRWFjaCgoSXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJdGVtLnRpdGxlID09IF9kZW1vbE1hcHMudGl0bGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGluZGV4ID0gaTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJyZWFrID0gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChhYnJlYWspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhamF4X21hcFtNWV9SVUxFLnRpdGxlXVtcXFwiZHloXFxcIl0uc3BsaWNlKHRpbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGUoZG93biwgSlNPTi5zdHJpbmdpZnkoYWpheF9tYXApLCAwKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChcXFwi5pON5L2c5oiQ5YqfXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChcXFwi5pON5L2c5aSx6LSlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwaXZpZXcuZW1wdHk7XFxuICAgICAgICAgICAgICAgIH0sIF9kZW1vbE1hcHMpIDogJChhcGl2aWV3LmVtcHR5KS5sYXp5UnVsZSgoX2RlbW9sTWFwcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBpdmlldyA9ICQucmVxdWlyZShcXFwiQ29uZmlnLnZpZXdcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBkb3duID0gYXBpdmlldy5fR2V0X3NjcmlwdGlvbjtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoXFxcImFqYXhfbWFwID1cXFwiICsgcmVhZEZpbGUoZG93bikpO1xcbiAgICAgICAgICAgICAgICAgICAgYWpheF9tYXBbTVlfUlVMRS50aXRsZV1bXFxcImR5aFxcXCJdLnB1c2goX2RlbW9sTWFwcyk7XFxuICAgICAgICAgICAgICAgICAgICBzYXZlRmlsZShkb3duLCBKU09OLnN0cmluZ2lmeShhamF4X21hcCksIDApO1xcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QoXFxcIuaTjeS9nOaIkOWKn1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwaXZpZXcuZW1wdHk7XFxuICAgICAgICAgICAgICAgIH0sIF9kZW1vbE1hcHMpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX2RlbW9sTWFwID0gYXBpdmlldy5fZGVtb2xfQWpheChcXFwiL3Y2L2R5aEFydGljbGUvbGlzdFxcXCIsIHtcXG4gICAgICAgICAgICBkeWhJZDogX2RlbW9sTWFwLmlkLFxcbiAgICAgICAgICAgIHR5cGU6IFxcXCJhbGxcXFwiLFxcbiAgICAgICAgICAgIHBhZ2U6IF9kZW1vbHBhZ2VcXG4gICAgICAgIH0pO1xcbiAgICAgICAgYXBpdmlldy5fbGF5b3V0RGV0ZXJtaW5lUGFyc2UoX2RlbW9sTWFwLCBfZGVtb2wpO1xcbiAgICB9LFxcbiAgICBfbGF5b3V0VGFiUnVsZVBhcnNlOiAoX2RlbW9sKSA9PiB7XFxuICAgICAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKF9kZW1vbCkgPT4ge1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcIjpuZXdUYWdcXFwiICsgX2RlbW9sKTtcXG4gICAgICAgIH0sIF9kZW1vbCkpO1xcbiAgICAgICAgbGV0IF9kZW1vbHBhZ2UgPSBNWV9QQUdFO1xcbiAgICAgICAgbGV0IGRvd24gPSBhcGl2aWV3Ll9HZXRfc2NyaXB0aW9uO1xcbiAgICAgICAgbGV0IGFicmVhayA9IGZhbHNlO1xcbiAgICAgICAgZXZhbChcXFwiZmlsZV9tYXAgPVxcXCIgKyByZWFkRmlsZShkb3duKSk7XFxuICAgICAgICBsZXQgX2RlbW9sID0gJC50eXBlKF9kZW1vbCkgPT0gXFxcIm9iamVjdFxcXCIgPyBkZWNvZGVVUklDb21wb25lbnQoX2RlbW9sLnRpdGxlKSA6IF9kZW1vbDtcXG4gICAgICAgIGxldCBfZGVtb2xNYXAgPSBzdG9yYWdlMC5nZXRNeVZhcihfZGVtb2wgKyBcXFwiOm5ld1RhZ1xcXCIsIFtdKTtcXG4gICAgICAgIGlmIChfZGVtb2xNYXAubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICBpZiAoIWlzTmFOKF9kZW1vbCkgJiYgIWlzTmFOKHBhcnNlRmxvYXQoX2RlbW9sKSkpIHtcXG4gICAgICAgICAgICAgICAgX2RlbW9sTWFwID0gYXBpdmlldy5fZGVtb2xfQWpheChcXFwiL3Y2L3Byb2R1Y3QvZGV0YWlsXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IF9kZW1vbFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBfZGVtb2xNYXAgPSBhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvdG9waWMvbmV3VGFnRGV0YWlsXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgdGFnOiBfZGVtb2xcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihfZGVtb2wgKyBcXFwiOm5ld1RhZ1xcXCIsIF9kZW1vbE1hcCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgbGV0IF9kZW1vbE1hcHMgPSB7fTtcXG4gICAgICAgIF9kZW1vbE1hcHMudGl0bGUgPSBfZGVtb2xNYXAudGl0bGU7XFxuICAgICAgICBfZGVtb2xNYXBzLmlkID0gX2RlbW9sO1xcbiAgICAgICAgX2RlbW9sTWFwcy5sb2dvID0gX2RlbW9sTWFwLmxvZ287XFxuICAgICAgICBfZGVtb2xNYXBzLmVudGl0eVR5cGUgPSBfZGVtb2xNYXAuZW50aXR5VHlwZTtcXG4gICAgICAgIHN3aXRjaCAoX2RlbW9sTWFwcy5lbnRpdHlUeXBlKSB7XFxuICAgICAgICAgICAgY2FzZSBcXFwidG9waWNcXFwiOlxcbiAgICAgICAgICAgICAgICBfdGFnID0gXFxcInRvcGljXFxcIjtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSBcXFwicHJvZHVjdFxcXCI6XFxuICAgICAgICAgICAgICAgIF90YWcgPSBcXFwicHJvZHVjdFxcXCI7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGZpbGVfbWFwW01ZX1JVTEUudGl0bGVdW190YWddLmZvckVhY2goXyA9PiB7XFxuICAgICAgICAgICAgaWYgKF8udGl0bGUgPT0gX2RlbW9sTWFwLnRpdGxlKSB7XFxuICAgICAgICAgICAgICAgIGFicmVhayA9IHRydWU7XFxuICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfSk7XFxuICAgICAgICBsZXQgdGluZGV4ID0gZ2V0TXlWYXIoXFxcIjpuZXdUYWdcXFwiICsgX2RlbW9sLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgX2RlbW9sTWFwID0gX2RlbW9sTWFwLnRhYkxpc3QuZmlsdGVyKF8gPT4gXy50aXRsZSAhPSBcXFwi5YWo6YOoXFxcIiAmJiBfLnRpdGxlICE9IFxcXCLmnaXmipXnpahcXFwiKTtcXG4gICAgICAgIGlmIChfZGVtb2xwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBhcGl2aWV3Ll9nZW5lcmF0ZVRvcCgpO1xcbiAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJjYXJkX3BpY18zXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBhcGl2aWV3LmVtcHR5XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGltZzogX2RlbW9sTWFwcy5sb2dvLFxcbiAgICAgICAgICAgICAgICB1cmw6IGFwaXZpZXcuZW1wdHksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiY2FyZF9waWNfM1xcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGFwaXZpZXcucmljaChhcGl2aWV3LmJpZyhfZGVtb2xNYXBzLnRpdGxlKSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogYXBpdmlldy5lbXB0eSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBhcGl2aWV3LnJpY2goYXBpdmlldy5ncmF5KGFicmVhayA/IFxcXCLlj5blhbNcXFwiIDogXFxcIuWFs+azqFxcXCIpKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBhYnJlYWsgPyAkKGFwaXZpZXcuZW1wdHkpLmxhenlSdWxlKChfZGVtb2xNYXBzLCBfdGFnKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvd24gPSBhcGl2aWV3Ll9HZXRfc2NyaXB0aW9uO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFicmVhayA9IGZhbHNlO1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbChcXFwiYWpheF9tYXAgPVxcXCIgKyByZWFkRmlsZShkb3duKSk7XFxuICAgICAgICAgICAgICAgICAgICBhamF4X21hcFtNWV9SVUxFLnRpdGxlXVtfdGFnXS5mb3JFYWNoKChJdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEl0ZW0udGl0bGUgPT0gX2RlbW9sTWFwcy50aXRsZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW5kZXggPSBpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnJlYWsgPSB0cnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFicmVhaykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhfbWFwW01ZX1JVTEUudGl0bGVdW190YWddLnNwbGljZSh0aW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVGaWxlKGRvd24sIEpTT04uc3RyaW5naWZ5KGFqYXhfbWFwKSwgMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXFxcIuaTjeS9nOaIkOWKn1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXFxcIuaTjeS9nOWksei0pVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcGl2aWV3LmVtcHR5O1xcbiAgICAgICAgICAgICAgICB9LCBfZGVtb2xNYXBzLCBfdGFnKSA6ICQoYXBpdmlldy5lbXB0eSkubGF6eVJ1bGUoKF9kZW1vbE1hcHMsIF90YWcpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcIkNvbmZpZy52aWV3XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgZG93biA9IGFwaXZpZXcuX0dldF9zY3JpcHRpb247XFxuICAgICAgICAgICAgICAgICAgICBldmFsKFxcXCJhamF4X21hcCA9XFxcIiArIHJlYWRGaWxlKGRvd24pKTtcXG4gICAgICAgICAgICAgICAgICAgIGFqYXhfbWFwW01ZX1JVTEUudGl0bGVdW190YWddLnB1c2goX2RlbW9sTWFwcyk7XFxuICAgICAgICAgICAgICAgICAgICBzYXZlRmlsZShkb3duLCBKU09OLnN0cmluZ2lmeShhamF4X21hcCksIDApO1xcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QoXFxcIuaTjeS9nOaIkOWKn1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwaXZpZXcuZW1wdHk7XFxuICAgICAgICAgICAgICAgIH0sIF9kZW1vbE1hcHMsIF90YWcpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQgPSBhcGl2aWV3LmxheW91dC5jb25jYXQoX2RlbW9sTWFwLm1hcCgoXywgaSkgPT4gKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGkgPT0gdGluZGV4ID8gYXBpdmlldy5yaWNoKGFwaXZpZXcuc3Ryb25nKGFwaXZpZXcuY29sb3IoXy50aXRsZSkpKSA6IF8udGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaSwgZW1wdHksIF9kZW1vbCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcIjpuZXdUYWdcXFwiICsgX2RlbW9sLCBpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHk7XFxuICAgICAgICAgICAgICAgIH0sIGksIGFwaXZpZXcuZW1wdHksIF9kZW1vbCksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGkgPT0gdGluZGV4ID8gXFxcIiMyMEZBNzI5OFxcXCIgOiBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSkpKTtcXG4gICAgICAgIH07XFxuICAgICAgICBsZXQgX2xpbmtOZXh0ID0gKCkgPT4gZ2V0TXlWYXIoXFxcIjpuZXh0XFxcIiArIF9kZW1vbCwgXFxcIlxcXCIpO1xcbiAgICAgICAgX2RlbW9sTWFwID0gX2RlbW9sTWFwW3RpbmRleF07XFxuICAgICAgICBfZGVtb2xNYXAgPSBhcGl2aWV3Ll9kZW1vbF9BamF4KFxcXCIvdjYvcGFnZS9kYXRhTGlzdFxcXCIsIHtcXG4gICAgICAgICAgICB1cmw6IF9kZW1vbE1hcC51cmwsXFxuICAgICAgICAgICAgdGl0bGU6IF9kZW1vbE1hcC50aXRsZSxcXG4gICAgICAgICAgICBzdWJUaXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcGFnZTogX2xpbmtOZXh0KCkgPyAxIDogX2RlbW9scGFnZVxcbiAgICAgICAgfSk7XFxuICAgICAgICBhcGl2aWV3Ll9sYXlvdXREZXRlcm1pbmVQYXJzZShfZGVtb2xNYXAsIF9kZW1vbCk7XFxuICAgIH0sXFxuICAgIF9sYXlvdXRBcGtSdWxlUGFyc2U6IChfZGVtb2wpID0+IHtcXG4gICAgICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwiOmFwa1RhZ1xcXCIpO1xcbiAgICAgICAgfSkpO1xcbiAgICAgICAgbGV0IF9kZW1vbHBhZ2UgPSBNWV9QQUdFO1xcbiAgICAgICAgbGV0IGRvd24gPSBhcGl2aWV3Ll9HZXRfc2NyaXB0aW9uO1xcbiAgICAgICAgbGV0IGFicmVhayA9IGZhbHNlO1xcbiAgICAgICAgZXZhbChcXFwiZmlsZV9tYXAgPVxcXCIgKyByZWFkRmlsZShkb3duKSk7XFxuICAgICAgICBsZXQgX2RlbW9sTWFwID0gc3RvcmFnZTAuZ2V0TXlWYXIoX2RlbW9sICsgXFxcIjphcGtUYWdcXFwiLCBbXSk7XFxuICAgICAgICBpZiAoX2RlbW9sTWFwLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgX2RlbW9sTWFwID0gYXBpdmlldy5fZGVtb2xfQWpheChcXFwiL3Y2L2Fway9kZXRhaWxcXFwiLCB7XFxuICAgICAgICAgICAgICAgIGlkOiBfZGVtb2wsXFxuICAgICAgICAgICAgICAgIGluc3RhbGxlZDogXFxcIlxcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihfZGVtb2wgKyBcXFwiOmFwa1RhZ1xcXCIsIF9kZW1vbE1hcCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgbGV0IF9kZW1vbE1hcHMgPSB7fTtcXG4gICAgICAgIF9kZW1vbE1hcHMuZW50aXR5VHlwZSA9IF9kZW1vbE1hcC5lbnRpdHlUeXBlIHx8IFxcXCJhcGtcXFwiO1xcbiAgICAgICAgX2RlbW9sTWFwcy5sb2dvID0gX2RlbW9sTWFwLmxvZ287XFxuICAgICAgICBfZGVtb2xNYXBzLnRpdGxlID0gX2RlbW9sTWFwLnRpdGxlO1xcbiAgICAgICAgX2RlbW9sTWFwcy51cmwgPSBgL2Fway8ke19kZW1vbH1gO1xcbiAgICAgICAgZmlsZV9tYXBbTVlfUlVMRS50aXRsZV1bXFxcImFwa1xcXCJdLmZvckVhY2goXyA9PiB7XFxuICAgICAgICAgICAgaWYgKF8udGl0bGUgPT0gX2RlbW9sTWFwLnRpdGxlKSB7XFxuICAgICAgICAgICAgICAgIGFicmVhayA9IHRydWU7XFxuICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfSk7XFxuICAgICAgICBsZXQgdGluZGV4ID0gZ2V0TXlWYXIoXFxcIjphcGtUYWdcXFwiLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgbGV0IF9kZW1vbE1hcF8gPSBbXFxcIuivpuaDhVxcXCIsIFxcXCLorqjorrpcXFwiXTtcXG4gICAgICAgIGlmIChfZGVtb2xwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBhcGl2aWV3Ll9nZW5lcmF0ZVRvcCgpO1xcbiAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJjYXJkX3BpY18zXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBhcGl2aWV3LmVtcHR5XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGltZzogX2RlbW9sTWFwLmxvZ28sXFxuICAgICAgICAgICAgICAgIHVybDogYXBpdmlldy5lbXB0eSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJjYXJkX3BpY18zXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogYXBpdmlldy5yaWNoKGFwaXZpZXcuYmlnKF9kZW1vbE1hcC50aXRsZSkpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IGFwaXZpZXcuZW1wdHksXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuS4i+i9vVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogX2RlbW9sTWFwLmFwa2ZpbGUgPyAoKF9kZW1vbE1hcC5hcGtmaWxlICYmICFfZGVtb2xNYXAuYXBrZmlsZS5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikgJiYgIV9kZW1vbE1hcC5hcGtmaWxlLnN0YXJ0c1dpdGgoXFxcImh0dHBzXFxcIikpID8gJChhcGl2aWV3LmVtcHR5KS5sYXp5UnVsZSgoe1xcbiAgICAgICAgICAgICAgICAgICAgaWQsXFxuICAgICAgICAgICAgICAgICAgICBhcGtuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgYXBrdmVyc2lvbmNvZGVcXG4gICAgICAgICAgICAgICAgfSkgPT4gXFxcImRvd25sb2FkOi8vXFxcIiArIGRlY29kZVVSSUNvbXBvbmVudCgkLnJlcXVpcmUoXFxcIkNvbmZpZy52aWV3XFxcIikuX2RlbW9sX0FqYXgoXFxcIi92Ni9hcGsvZG93bmxvYWRcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICBwbjogYXBrbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGFpZDogaWQsXFxuICAgICAgICAgICAgICAgICAgICB2YzogYXBrdmVyc2lvbmNvZGUsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYTogXFxcIlxcXCJcXG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSwgdHJ1ZSkpLCBfZGVtb2xNYXApIDogXFxcImRvd25sb2FkOi8vXFxcIiArIF9kZW1vbE1hcC5hcGtmaWxlKSA6IFxcXCJ0b2FzdDovL+aXoOS4i+i9vemTvuaOpVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF80XFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogYWJyZWFrID8gXFxcIuWPluWFs1xcXCIgOiBcXFwi5YWz5rOoXFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzRcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IGFicmVhayA/ICQoYXBpdmlldy5lbXB0eSkubGF6eVJ1bGUoKF9kZW1vbE1hcHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcIkNvbmZpZy52aWV3XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgZG93biA9IGFwaXZpZXcuX0dldF9zY3JpcHRpb247XFxuICAgICAgICAgICAgICAgICAgICBsZXQgYWJyZWFrID0gZmFsc2U7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKFxcXCJhamF4X21hcCA9XFxcIiArIHJlYWRGaWxlKGRvd24pKTtcXG4gICAgICAgICAgICAgICAgICAgIGFqYXhfbWFwW01ZX1JVTEUudGl0bGVdW1xcXCJhcGtcXFwiXS5mb3JFYWNoKChJdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEl0ZW0udGl0bGUgPT0gX2RlbW9sTWFwcy50aXRsZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW5kZXggPSBpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnJlYWsgPSB0cnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFicmVhaykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhfbWFwW01ZX1JVTEUudGl0bGVdW1xcXCJhcGtcXFwiXS5zcGxpY2UodGluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzYXZlRmlsZShkb3duLCBKU09OLnN0cmluZ2lmeShhamF4X21hcCksIDApO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFxcXCLmk43kvZzmiJDlip9cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFxcXCLmk43kvZzlpLHotKVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBpdmlldy5lbXB0eTtcXG4gICAgICAgICAgICAgICAgfSwgX2RlbW9sTWFwcykgOiAkKGFwaXZpZXcuZW1wdHkpLmxhenlSdWxlKChfZGVtb2xNYXBzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvd24gPSBhcGl2aWV3Ll9HZXRfc2NyaXB0aW9uO1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbChcXFwiYWpheF9tYXAgPVxcXCIgKyByZWFkRmlsZShkb3duKSk7XFxuICAgICAgICAgICAgICAgICAgICBhamF4X21hcFtNWV9SVUxFLnRpdGxlXVtcXFwiYXBrXFxcIl0ucHVzaChfZGVtb2xNYXBzKTtcXG4gICAgICAgICAgICAgICAgICAgIHNhdmVGaWxlKGRvd24sIEpTT04uc3RyaW5naWZ5KGFqYXhfbWFwKSwgMCk7XFxuICAgICAgICAgICAgICAgICAgICB0b2FzdChcXFwi5pON5L2c5oiQ5YqfXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBpdmlldy5lbXB0eTtcXG4gICAgICAgICAgICAgICAgfSwgX2RlbW9sTWFwcylcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dCA9IGFwaXZpZXcubGF5b3V0LmNvbmNhdChfZGVtb2xNYXBfLm1hcCgoXywgaSkgPT4gKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGkgPT0gdGluZGV4ID8gYXBpdmlldy5yaWNoKGFwaXZpZXcuY29sb3IoYXBpdmlldy5zdHJvbmcoXykpKSA6IF8sXFxuICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaSwgZW1wdHkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCI6YXBrVGFnXFxcIiwgaSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5O1xcbiAgICAgICAgICAgICAgICB9LCBpLCBhcGl2aWV3LmVtcHR5KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzRcXFwiXFxuICAgICAgICAgICAgfSkpKTtcXG4gICAgICAgIH07XFxuICAgICAgICBsZXQgX2xpbmtOZXh0ID0gKCkgPT4gZ2V0TXlWYXIoXFxcIjpuZXh0XFxcIiArIF9kZW1vbCwgXFxcIlxcXCIpO1xcbiAgICAgICAgc3dpdGNoIChfZGVtb2xNYXBfW3RpbmRleF0pIHtcXG4gICAgICAgICAgICBjYXNlIF9kZW1vbE1hcF9bMF06XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dEFwcFJ1bGVQYXJzZShfZGVtb2xNYXApO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlIF9kZW1vbE1hcF9bMV06XFxuICAgICAgICAgICAgICAgIF9kZW1vbE1hcCA9IGFwaXZpZXcuX2RlbW9sX0FqYXgoXFxcIi92Ni9wYWdlL2RhdGFMaXN0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBgIy9mZWVkL2Fwa0NvbW1lbnRMaXN0P2lzSW5jbHVkZVRvcD0xJndpdGhTb3J0Q2FyZD0xJmlkPSR7X2RlbW9sTWFwLmlkfWAsXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuiuqOiuulxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBzdWJUaXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBwYWdlOiBfbGlua05leHQoKSA/IDEgOiBfZGVtb2xwYWdlXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXREZXRlcm1pbmVQYXJzZShfZGVtb2xNYXAsIF9kZW1vbCk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfTtcXG4gICAgfSxcXG4gICAgX2xheW91dFN1YnNjclBhcnNlOiAoKSA9PiB7XFxuICAgICAgICBldmFsKFxcXCJhamF4X21hcCA9XFxcIiArIHJlYWRGaWxlKGFwaXZpZXcuX0dldF9zY3JpcHRpb24pKTtcXG4gICAgICAgIGxldCBhamF4X21hcHMgPSBhamF4X21hcFtNWV9SVUxFLnRpdGxlXTtcXG4gICAgICAgIGxldCBvYmplY3RNYXAgPSBbXFxcIueUqOaIt1xcXCIsIFxcXCLluJblrZBcXFwiLCBcXFwi6K+d6aKYXFxcIiwgXFxcIuaVsOeggVxcXCIsIFxcXCLlupTnlKhcXFwiLCBcXFwi5bqU55So6ZuGXFxcIiwgXFxcIueci+eci+WPt1xcXCJdO1xcbiAgICAgICAgbGV0IF9kZW1vbHBhZ2UgPSBNWV9QQUdFO1xcbiAgICAgICAgbGV0IHRpbmRleCA9IGdldE15VmFyKFxcXCI6c3Vic2NyVGFiXFxcIiwgXFxcIjBcXFwiKTtcXG4gICAgICAgIGlmIChfZGVtb2xwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dCA9IGFwaXZpZXcubGF5b3V0LmNvbmNhdChvYmplY3RNYXAubWFwKChpdGVtLCBpKSA9PiAoe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaSA9PSB0aW5kZXggPyBhcGl2aWV3LnJpY2goYXBpdmlldy5zdHJvbmcoYXBpdmlldy5jb2xvcihpdGVtKSkpIDogaXRlbSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpLCBlbXB0eSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcIjpzdWJzY3JUYWJcXFwiLCBpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHk7XFxuICAgICAgICAgICAgICAgIH0sIGksIGFwaXZpZXcuZW1wdHkpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpID09IHRpbmRleCA/IFxcXCIjMjBGQTcyOThcXFwiIDogXFxcIlxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pKSk7XFxuICAgICAgICAgICAgc3dpdGNoIChvYmplY3RNYXBbdGluZGV4XSkge1xcbiAgICAgICAgICAgICAgICBjYXNlIG9iamVjdE1hcFswXTpcXG4gICAgICAgICAgICAgICAgICAgIGFwaXZpZXcuX2xheW91dERldGVybWluZVBhcnNlKGFqYXhfbWFwc1tcXFwidXNlclxcXCJdLCBcXFwidXNlclxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2Ugb2JqZWN0TWFwWzFdOlxcbiAgICAgICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0RGV0ZXJtaW5lUGFyc2UoYWpheF9tYXBzW1xcXCJjYXJkXFxcIl0sIFxcXCJjYXJkXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBvYmplY3RNYXBbMl06XFxuICAgICAgICAgICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXREZXRlcm1pbmVQYXJzZShhamF4X21hcHNbXFxcInRvcGljXFxcIl0sIFxcXCJ0b3BpY1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2Ugb2JqZWN0TWFwWzNdOlxcbiAgICAgICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0RGV0ZXJtaW5lUGFyc2UoYWpheF9tYXBzW1xcXCJwcm9kdWN0XFxcIl0sIFxcXCJwcm9kdWN0XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBvYmplY3RNYXBbNF06XFxuICAgICAgICAgICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXREZXRlcm1pbmVQYXJzZShhamF4X21hcHNbXFxcImFwa1xcXCJdLCBcXFwiYXBrXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBvYmplY3RNYXBbNV06XFxuICAgICAgICAgICAgICAgICAgICBhcGl2aWV3Ll9sYXlvdXREZXRlcm1pbmVQYXJzZShhamF4X21hcHNbXFxcImFsYnVtXFxcIl0sIFxcXCJhbGJ1bVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2Ugb2JqZWN0TWFwWzZdOlxcbiAgICAgICAgICAgICAgICAgICAgYXBpdmlldy5fbGF5b3V0RGV0ZXJtaW5lUGFyc2UoYWpheF9tYXBzW1xcXCJkeWhcXFwiXSwgXFxcImR5aFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgIH07XFxuICAgIH0sXFxuICAgIF9FbmRfUGFyc2U6ICgpID0+IHtcXG4gICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBhcGl2aWV3LnJpY2goYXBpdmlldy5zbWFsbChhcGl2aWV3LmdyYXkoXFxcIu+9nu+9nu+9nuaIkeaYr+acieW6lee6v+eahO+9nu+9nu+9nlxcXCIpKSksXFxuICAgICAgICAgICAgdXJsOiBhcGl2aWV3LmVtcHR5LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBfZ2VuZXJhdGVUb3A6ICgpID0+IHtcXG4gICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgIGltZzogJC5yZXF1aXJlKFxcXCJpY29uLnRvb2xcXFwiKS50b3AsXFxuICAgICAgICAgICAgdXJsOiBhcGl2aWV3LmVtcHR5LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFfZnVsbFxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBfZ2VuZXJhdGVFbmQ6ICgpID0+IHtcXG4gICAgICAgIGxldCB0aXBzID0gXFxcIuivpeaWh+eroOadpea6kOS6jumFt+Wuie+8jOWmguaCqOWWnOasou+8jOivt+S4i+i9vUFQUFxcXCI7XFxuICAgICAgICBsZXQgd2FybmluZyA9IFxcXCLmraTop4TliJnku4XpmZDlrabkuaDkvb/nlKjvvIzlpoLmnInkuI3lpqXvvIzor7fmnKzlkKfkuLvogZTns7vmiJHliKDpmaRcXFwiO1xcbiAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGFwaXZpZXcuY2VudGVyKGAke2FwaXZpZXcuc3Ryb25nKHRpcHMpfTxicj4ke2FwaXZpZXcuc21hbGwoYXBpdmlldy5ncmF5KHdhcm5pbmcpKX1gKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBfZ2V0c01pbmQ6ICgpID0+IHtcXG4gICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICBjb25zdCBoaWtlclBvcCA9ICQucmVxdWlyZShcXFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3dlaXN5ci9qcy9oaWtlclBvcC5qc1xcXCIpO1xcbiAgICAgICAgICAgIGlmIChnZXRNeVZhcihcXFwiOnVwZGF0ZURhdGFcXFwiLCBcXFwiXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgaGlrZXJQb3AudXBkYXRlUmVjb3Jkc0JvdHRvbShhcGl2aWV3Ll91cGRhdGVEYXRhKTtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcIjp1cGRhdGVEYXRhXFxcIiwgXFxcInRydWVcXFwiKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGxldCB0aW1lID0gMTU7XFxuICAgICAgICAgICAgbGV0IGlkID0gRGF0ZS5ub3coKTtcXG4gICAgICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGFwaXZpZXcuYmlnKGFwaXZpZXcuc3Ryb25nKFxcXCLigJzigJzkvb/nlKjliY3pobvnn6XigJzigJxcXFwiKSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogYXBpdmlldy5lbXB0eSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgYXBpdmlldy5sYXlvdXQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBgMS4g5pys5bCP56iL5bqP5omA5pyJ5Luj56CB5YWo6YOo5byA5rqQ77yM5LiU5pys6KeE5YiZ5Li65a2m5Lmg55uu55qE77yM6K+35LqO5a+85YWlMjTlsI/ml7blhoXliKDpmaTvvIHvvIHvvIE8YnI+Mi4g5pys5bCP56iL5bqPPGI+5a6M5YWo5YWN6LS5PC9iPu+8jOWmguaenOS9oOaYr+S7mOi0uei0reS5sOeahOaBreWWnOS9oOiiq+mql+S6huOAgjxicj7lvZPnhLblpoLmnpzmnInog73lipvmg7PpvJPlirHkvZzogIXnmoTlj6/ku6Uke1xcXCLmlK/mjIHkuIDkuItcXFwiLmxpbmsoJChhcGl2aWV3LmVtcHR5ICsgXFxcIiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiKS5iNjQoXFxcIlxcXCIpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgICAgICBhcGl2aWV3Ll9kb25hdGVfUGFyc2UoKTtcXG4gICAgICAgICAgICAgICAgc2V0UmVzdWx0KGFwaXZpZXcubGF5b3V0KTtcXG4gICAgICAgICAgICB9KSl9PHNtYWxsPijngrnlh7vlj6/ov5vlhaXmjZDotaAp44CCPC9zbWFsbD48YnI+My4g5aaC5p6c5Ye6546w5bqV57q/77yM6K+3PGI+5Yi35paw5LiA5LiLPC9iPuS5n+iuuOacieS4nOilv+WRouOAgjxicj40LiDlh7rnjrBCVUfkuoY8Yj7or7flvZXlsY88L2I+5Y+R57uZJHthcGl2aWV3LmFkZHJlc3NUYWcoXFxcIm1xcXdwYTovL2ltL2NoYXQ/Y2hhdF90eXBlPXdwYSZ1aW49ODYyMzQ3MjA1XFxcIiwgXFxcIuS9nOiAhVxcXCIpfeWTpjxicj41LiDkuI3lhpk8Yj7nmbvlvZU8L2I+5Y+v6IO95Lya5bCB5Y+377yB77yB77yBPGJyPjxicj48Yj7lvIDlp4vkvb/nlKjmnKzop4TliJnljbPku6PooajpgbXlrojop4TliJk8L2I+PGJyPuW9k+WJjeeJiOacrO+8mmAgKyBNWV9SVUxFLnZlcnNpb24sXFxuICAgICAgICAgICAgICAgIFxcXCJjb2xfdHlwZVxcXCI6IFxcXCJyaWNoX3RleHRcXFwiXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuabtOaWsOaXpeW/l1xcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlrZXJQb3AgPSAkLnJlcXVpcmUoXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS93ZWlzeXIvanMvaGlrZXJQb3AuanNcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGhpa2VyUG9wLnVwZGF0ZVJlY29yZHNCb3R0b20oYXBpdmlldy5fdXBkYXRlRGF0YSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGltZSArIFxcXCLnp5LlkI7nu6fnu61cXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJ0b2FzdDovL+ivt+iupOecn+mYheivu+S7peS4iuWGheWuuVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogaWQgKyBcXFwidGltZXJcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzZXRSZXN1bHQoYXBpdmlldy5sYXlvdXQpO1xcbiAgICAgICAgICAgIHdoaWxlICh0aW1lICE9IDApIHtcXG4gICAgICAgICAgICAgICAgamF2YS5sYW5nLlRocmVhZC5zbGVlcCgxMDAwKTtcXG4gICAgICAgICAgICAgICAgdGltZSAtPSAxO1xcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGlkICsgXFxcInRpbWVyXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpbWUgKyBcXFwi56eS5ZCO57un57utXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdXBkYXRlSXRlbShpZCArIFxcXCJ0aW1lclxcXCIsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzmiJHlkIzmhI/ku6XkuIropoHmsYLigJzigJxcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHYpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcImZpcnN0XFxcIiwgU3RyaW5nKHYpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oSf6LCi5oKo55qE55CG6KejXFxcIjtcXG4gICAgICAgICAgICAgICAgfSwgTVlfUlVMRS52ZXJzaW9uKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgfSxcXG4gICAgX2RvbmF0ZV9QYXJzZTogKCkgPT4ge1xcbiAgICAgICAgc2V0UGFnZVRpdGxlKFxcXCLmjZDotaAv5pSv5oyBXFxcIik7XFxuICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuaNkOi1oC/mlK/mjIFcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCLov5nkuKrmjZDotaDkuI3og73kuLrkvaDluKbmnaXnibnmnYPvvIzkvYbmgqjnmoTmlK/mjIHmmK/miJHmm7TmlrDliJvkvZznmoTliqjlipvjgIJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwidG9hc3Q6Ly/mhJ/osKLmgqjnmoTmlK/mjIFcXFwiXFxuICAgICAgICB9KTtcXG4gICAgICAgIGFwaXZpZXcubGF5b3V0LnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFfZnVsbFxcXCIsXFxuICAgICAgICAgICAgdXJsOiAkLnJlcXVpcmUoXFxcImljb24udG9vbFxcXCIpLmRvbmF0ZSxcXG4gICAgICAgICAgICBwaWNfdXJsOiAkLnJlcXVpcmUoXFxcImljb24udG9vbFxcXCIpLmRvbmF0ZVxcbiAgICAgICAgfSk7XFxuICAgICAgICBhcGl2aWV3LmxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCLlm77niYfliqDovb3nvJPmhaLor7fnqI3nrYlcXFwiLnNtYWxsKCkuZm9udGNvbG9yKFxcXCJHcmF5XFxcIiksXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuICAgIF9leHRyYV90b29sOiAoXywgX3RhYiwgX3RhZywgX25leHQpID0+IFt7XFxuICAgICAgICB0aXRsZTogYPCfk6wke19uZXh0ID8gXFxcIuWFs+azqFxcXCIgOiBcXFwi5pS26JePXFxcIn1gLFxcbiAgICAgICAganM6ICQudG9TdHJpbmcoKF8sIF90YWIsIF90YWcpID0+IHtcXG4gICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgIGxldCB0b29sZG93biA9IGFwaXZpZXcuX0dldF9zY3JpcHRpb247XFxuICAgICAgICAgICAgbGV0IGFicmVhayA9IHRydWU7XFxuICAgICAgICAgICAgZXZhbChcXFwiYWpheF9tYXAgPVxcXCIgKyByZWFkRmlsZSh0b29sZG93bikpO1xcbiAgICAgICAgICAgIGFqYXhfbWFwW01ZX1JVTEUudGl0bGVdW190YWJdLmZvckVhY2goSXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChJdGVtW190YWddID09IF9bX3RhZ10pIHtcXG4gICAgICAgICAgICAgICAgICAgIHRvYXN0KFxcXCLph43lpI3kuoblk6ZcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGFicmVhayA9IGZhbHNlO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGlmIChhYnJlYWspIHtcXG4gICAgICAgICAgICAgICAgYWpheF9tYXBbTVlfUlVMRS50aXRsZV1bX3RhYl0ucHVzaChfKTtcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUodG9vbGRvd24sIEpTT04uc3RyaW5naWZ5KGFqYXhfbWFwKSwgMCk7XFxuICAgICAgICAgICAgICAgIHRvYXN0KFxcXCLmk43kvZzmiJDlip9cXFwiKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhcGl2aWV3LmVtcHR5O1xcbiAgICAgICAgfSwgXywgX3RhYiwgX3RhZylcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IGDwn5Ot5Y+W5raIJHtfbmV4dCA/IFxcXCLlhbPms6hcXFwiIDogXFxcIuaUtuiXj1xcXCJ9YCxcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKChfLCBfdGFiLCBfdGFnKSA9PiB7XFxuICAgICAgICAgICAgY29uc3QgYXBpdmlldyA9ICQucmVxdWlyZShcXFwiQ29uZmlnLnZpZXdcXFwiKTtcXG4gICAgICAgICAgICBsZXQgdG9vbGRvd24gPSBhcGl2aWV3Ll9HZXRfc2NyaXB0aW9uO1xcbiAgICAgICAgICAgIGxldCBhYnJlYWsgPSBmYWxzZTtcXG4gICAgICAgICAgICBldmFsKFxcXCJhamF4X21hcCA9XFxcIiArIHJlYWRGaWxlKHRvb2xkb3duKSk7XFxuICAgICAgICAgICAgYWpheF9tYXBbTVlfUlVMRS50aXRsZV1bX3RhYl0uZm9yRWFjaCgoSXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoSXRlbVtfdGFnXSA9PSBfW190YWddKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aW5kZXggPSBpO1xcbiAgICAgICAgICAgICAgICAgICAgYWJyZWFrID0gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBpZiAoYWJyZWFrKSB7XFxuICAgICAgICAgICAgICAgIGFqYXhfbWFwW01ZX1JVTEUudGl0bGVdW190YWJdLnNwbGljZSh0aW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSh0b29sZG93biwgSlNPTi5zdHJpbmdpZnkoYWpheF9tYXApLCAwKTtcXG4gICAgICAgICAgICAgICAgdG9hc3QoXFxcIuaTjeS9nOaIkOWKn1xcXCIpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdG9hc3QoXFxcIuaTjeS9nOWksei0pVxcXCIpO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgcmV0dXJuIGFwaXZpZXcuZW1wdHk7XFxuICAgICAgICB9LCBfLCBfdGFiLCBfdGFnKVxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogXFxcIuKshu+4j+e9rumhtlxcXCIsXFxuICAgICAgICBqczogJC50b1N0cmluZygoXywgX3RhYiwgX3RhZykgPT4ge1xcbiAgICAgICAgICAgIGNvbnN0IGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcIkNvbmZpZy52aWV3XFxcIik7XFxuICAgICAgICAgICAgbGV0IHRvb2xkb3duID0gYXBpdmlldy5fR2V0X3NjcmlwdGlvbjtcXG4gICAgICAgICAgICBsZXQgYWJyZWFrID0gZmFsc2U7XFxuICAgICAgICAgICAgZXZhbChcXFwiYWpheF9tYXAgPVxcXCIgKyByZWFkRmlsZSh0b29sZG93bikpO1xcbiAgICAgICAgICAgIGFqYXhfbWFwW01ZX1JVTEUudGl0bGVdW190YWJdLmZvckVhY2goSXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChJdGVtW190YWddID09IF9bX3RhZ10pIHtcXG4gICAgICAgICAgICAgICAgICAgIGFicmVhayA9IHRydWU7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKGFicmVhaykge1xcbiAgICAgICAgICAgICAgICBhcGl2aWV3Ll9Qb3NpdGlvbl90b29sKGFqYXhfbWFwW01ZX1JVTEUudGl0bGVdW190YWJdLCBfLCBcXFwidG9wXFxcIiwgX3RhZyk7XFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKHRvb2xkb3duLCBKU09OLnN0cmluZ2lmeShhamF4X21hcCksIDApO1xcbiAgICAgICAgICAgICAgICB0b2FzdChcXFwi5pON5L2c5oiQ5YqfXFxcIik7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0b2FzdChcXFwi5pON5L2c5aSx6LSlXFxcIik7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gYXBpdmlldy5lbXB0eTtcXG4gICAgICAgIH0sIF8sIF90YWIsIF90YWcpXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwi4qyH77iP572u5bqVXFxcIixcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKChfLCBfdGFiLCBfdGFnKSA9PiB7XFxuICAgICAgICAgICAgY29uc3QgYXBpdmlldyA9ICQucmVxdWlyZShcXFwiQ29uZmlnLnZpZXdcXFwiKTtcXG4gICAgICAgICAgICBsZXQgdG9vbGRvd24gPSBhcGl2aWV3Ll9HZXRfc2NyaXB0aW9uO1xcbiAgICAgICAgICAgIGxldCBhYnJlYWsgPSBmYWxzZTtcXG4gICAgICAgICAgICBldmFsKFxcXCJhamF4X21hcCA9XFxcIiArIHJlYWRGaWxlKHRvb2xkb3duKSk7XFxuICAgICAgICAgICAgYWpheF9tYXBbTVlfUlVMRS50aXRsZV1bX3RhYl0uZm9yRWFjaChJdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKEl0ZW1bX3RhZ10gPT0gX1tfdGFnXSkge1xcbiAgICAgICAgICAgICAgICAgICAgYWJyZWFrID0gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBpZiAoYWJyZWFrKSB7XFxuICAgICAgICAgICAgICAgIGFwaXZpZXcuX1Bvc2l0aW9uX3Rvb2woYWpheF9tYXBbTVlfUlVMRS50aXRsZV1bX3RhYl0sIF8sIFxcXCJlbmRcXFwiLCBfdGFnKTtcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUodG9vbGRvd24sIEpTT04uc3RyaW5naWZ5KGFqYXhfbWFwKSwgMCk7XFxuICAgICAgICAgICAgICAgIHRvYXN0KFxcXCLmk43kvZzmiJDlip9cXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHRvYXN0KFxcXCLmk43kvZzlpLHotKVcXFwiKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhcGl2aWV3LmVtcHR5O1xcbiAgICAgICAgfSwgXywgX3RhYiwgX3RhZylcXG4gICAgfV0sXFxuICAgIF9leHRyYVNlYXJjaDogKGl0KSA9PiBbe1xcbiAgICAgICAgdGl0bGU6IGDliKDpmaTjgIwke2l0feOAjWAsXFxuICAgICAgICBqczogJC50b1N0cmluZygoaXQpID0+IHtcXG4gICAgICAgICAgICBjb25zdCBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJDb25maWcudmlld1xcXCIpO1xcbiAgICAgICAgICAgIGxldCBtZW0gPSBzdG9yYWdlMC5nZXRJdGVtKE1ZX1JVTEUudGl0bGUsIFtdKTtcXG4gICAgICAgICAgICBtZW0uZm9yRWFjaCgoXywgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoXyA9PSBpdCkge1xcbiAgICAgICAgICAgICAgICAgICAgdGluZGV4ID0gaTtcXG4gICAgICAgICAgICAgICAgICAgIGFicmVhayA9IHRydWU7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgbWVtLnNwbGljZSh0aW5kZXgsIDEpO1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oTVlfUlVMRS50aXRsZSwgbWVtKTtcXG4gICAgICAgICAgICB0b2FzdChcXFwi5pON5L2c5oiQ5YqfXFxcIik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBhcGl2aWV3LmVtcHR5O1xcbiAgICAgICAgfSwgaXQpXFxuICAgIH1dLFxcbiAgICBfdXBkYXRlRGF0YTogW3tcXG4gICAgICAgIHRpdGxlOiBcXFwiMjAyNC8wOC8xOVxcXCIsXFxuICAgICAgICByZWNvcmRzOiBbXFxuICAgICAgICAgICAgXFxcIuKAmOKAmOabtOaWsOKAmeKAmTpoaWtlclBvcOmTvuaOpVxcXCJcXG4gICAgICAgIF1cXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFxcXCIyMDI0LzA4LzE3XFxcIixcXG4gICAgICAgIHJlY29yZHM6IFtcXG4gICAgICAgICAgICBcXFwi4oCY4oCY5LyY5YyW4oCZ4oCZOuS4i+i9vVxcXCIsXFxuICAgICAgICAgICAgXFxcIuKAmOKAmOS8mOWMluKAmeKAmTrliKTmlq3pk77mjqVcXFwiXFxuICAgICAgICBdXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwiMjAyNC8wOC8xNVxcXCIsXFxuICAgICAgICByZWNvcmRzOiBbXFxuICAgICAgICAgICAgXFxcIuKAmOKAmOS8mOWMluKAmeKAmTrluJblrZDor6bnu4bml7bpl7TvvIjlpoLvvJrlh6DliIbpkp/liY3vvIlcXFwiXFxuICAgICAgICBdXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwiMjAyNC8wOC8xMVxcXCIsXFxuICAgICAgICByZWNvcmRzOiBbXFxuICAgICAgICAgICAgXFxcIuKAmOKAmOS8mOWMluKAmeKAmTrnlKjmiLfkuLvpobXmmL7npLrmlYjmnpxcXFwiXFxuICAgICAgICBdXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwiMjAyNC8wOC8xMFxcXCIsXFxuICAgICAgICByZWNvcmRzOiBbXFxuICAgICAgICAgICAgXFxcIuKAmOKAmOS8mOWMluKAmeKAmTrliKTmlq3pgLvovpFcXFwiXFxuICAgICAgICBdXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwiMjAyNC8wOC8wN1xcXCIsXFxuICAgICAgICByZWNvcmRzOiBbXFxuICAgICAgICAgICAgXFxcIuKAmOKAmOS8mOWMluKAmeKAmTrnu5npqprnsonliqDkuKrog4zmma/oibJcXFwiLFxcbiAgICAgICAgICAgIFxcXCLigJjigJjkvJjljJbigJnigJk65pS26JeP5Y2V5Yik5patXFxcIixcXG4gICAgICAgICAgICBcXFwi4oCY4oCY5L+u5aSN4oCZ4oCZOumFt+WTgemTvuaOpVxcXCJcXG4gICAgICAgIF1cXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFxcXCIyMDI0LzA4LzA1XFxcIixcXG4gICAgICAgIHJlY29yZHM6IFtcXG4gICAgICAgICAgICBcXFwi4oCc4oCc5pu05paw4oCd4oCdOuaUr+aMgeeci+eci+WPt1xcXCIsXFxuICAgICAgICAgICAgXFxcIuKAnOKAnOabtOaWsOKAneKAnTrplb/mjInnrKzkuIDmjpLliIbnsbvlj6/lj43ppohCVUco6KaB5b2V5bGP5ZOmKVxcXCIsXFxuICAgICAgICAgICAgXFxcIuKAmOKAmOS8mOWMluKAmeKAmTrnu4bliIbmoIfnrb4v6K+d6aKYL2FwcO+8jOS5i+WJjeeahOaUtuiXj+eahOayoeS6huivt+mHjeaWsOaUtuiXj++8jOS4uuWQjue7reabtOWlvee7tOaKpFxcXCJcXG4gICAgICAgIF1cXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFxcXCIyMDI0LzA4LzAzXFxcIixcXG4gICAgICAgIHJlY29yZHM6IFtcXG4gICAgICAgICAgICBcXFwi4oCY4oCY5LyY5YyW4oCZ4oCZOuivhOiuuuWIh+aNouS4jeWGjeWbnumhtumDqFxcXCIsXFxuICAgICAgICAgICAgXFxcIuKAmOKAmOS8mOWMluKAmeKAmTrorqLpmIXliIfmjaJMb2FkaW5nXFxcIlxcbiAgICAgICAgXVxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogXFxcIjIwMjQvMDgvMDJcXFwiLFxcbiAgICAgICAgcmVjb3JkczogW1xcbiAgICAgICAgICAgIFxcXCLigJjigJjkvJjljJbigJnigJk65biW5a2Q5qCH562+XFxcIixcXG4gICAgICAgICAgICBcXFwi4oCY4oCY5L+u5aSN4oCZ4oCZOuW9k+ayoeaQnOe0ouWIsOi1hOa6kOaXtuaKpemUmVxcXCIsXFxuICAgICAgICAgICAgXFxcIuKAmOKAmOS/ruWkjeKAmeKAmTrpgLvovpHplJnor6/lr7zoh7TlhoXlrrnph43lpI0uLi4uXFxcIlxcbiAgICAgICAgXVxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogXFxcIjIwMjQvMDgvMDFcXFwiLFxcbiAgICAgICAgcmVjb3JkczogW1xcbiAgICAgICAgICAgIFxcXCLigJjigJjkvJjljJbigJnigJk65re75Yqg5Y+R5biW5pe26Ze0XFxcIixcXG4gICAgICAgICAgICBcXFwi4oCY4oCY5LyY5YyW4oCZ4oCZOuWktOadoeS4jeaYvuekuumFt+WTge+8iOmDqOWIhuS6uuiupOS4uuaYr+W5v+WRiu+8iVxcXCJcXG4gICAgICAgIF1cXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFxcXCIyMDI0LzA3LzMxXFxcIixcXG4gICAgICAgIHJlY29yZHM6IFtcXG4gICAgICAgICAgICBcXFwi4oCY4oCY5L+u5aSN4oCZ4oCZOumFt+WTgeaQnOe0oumhtemdouaXoOeDreaQnOaXtuaKpemUmVxcXCIsXFxuICAgICAgICAgICAgXFxcIuKAmOKAmOS/ruWkjeKAmeKAmTrpgLvovpHplJnor6/lr7zoh7TlhoXlrrnph43lpI1cXFwiLFxcbiAgICAgICAgICAgIFxcXCLigJjigJjkv67lpI3igJnigJk66K+E6K665peg6ZmQ5Y+g5YqgXFxcIixcXG4gICAgICAgICAgICBcXFwi4oCY4oCY5L+u5aSN4oCZ4oCZOmFwcOmhtemdouWPluWFs++8jOiuoumYhemhteaXoOaViOaenFxcXCIsXFxuICAgICAgICAgICAgXFxcIuKAmOKAmOS8mOWMluKAmeKAmTrnlLFA6ZO+5o6l6L+b5YWl55So5oi35Li76aG177yM5aKe5Yqg5LiA5bGC5riQ5Y+Y576O5YyWXFxcIixcXG4gICAgICAgICAgICBcXFwi4oCY4oCY5LyY5YyW4oCZ4oCZOuWFs+azqOWtmOWCqOWcqOacrOWcsOi/h+WkmuS4jeW/heimgeeahOaVsOaNrlxcXCJcXG4gICAgICAgIF1cXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFxcXCIyMDI0LzA3LzMwXFxcIixcXG4gICAgICAgIHJlY29yZHM6IFtcXG4gICAgICAgICAgICBcXFwi4oCc4oCc5pu05paw4oCd4oCdOuabtOaWsG7kuKrlhoXlrrnvvIzlsLHkuI3nu4bnu4bor7TkuoZcXFwiXFxuICAgICAgICBdXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwiMjAyNC8wNy8yOVxcXCIsXFxuICAgICAgICByZWNvcmRzOiBbXFxuICAgICAgICAgICAgXFxcIuKAnOKAnOabtOaWsOKAneKAnTrmlK/mjIHor53popjllaZcXFwiLFxcblxcbiAgICAgICAgICAgIFxcXCLigJzigJzmm7TmlrDigJ3igJ065pSv5oyB5Y+R546wPT7phbflm754NVxcXCIsXFxuXFxuICAgICAgICAgICAgXFxcIuKAmOKAmOS/ruWkjeKAmeKAmTrpgLvovpHplJnor6/lr7zoh7Tml6DpmZDlvqrnjq/orr/pl67pk77mjqVcXFwiXFxuICAgICAgICBdXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwiMjAyNC8wNy8yOFxcXCIsXFxuICAgICAgICByZWNvcmRzOiBbXFxuICAgICAgICAgICAgXFxcIuKAnOKAnOabtOaWsOKAneKAnTrlop7liqDliIbnsbvpobXpnaJcXFwiLFxcbiAgICAgICAgICAgIFxcXCLigJjigJjkv67lpI3igJnigJk65Yik5pat6aG16Z2i5LiN5YeG56GuXFxcIlxcbiAgICAgICAgXVxcbiAgICB9XVxcbn1cXG5cXG4kLmV4cG9ydHMgPSBhcGl2aWV3O1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Zu+5qCHXCIsXCJwYXRoXCI6XCJpY29uLnRvb2xcIixcInJ1bGVcIjpcImpzOlxcbiQuZXhwb3J0cyA9IHtcXG4gICAgZGVsZXRlOiBcXFwiaHR0cHM6Ly9pY29uZm9udC50eXJhbnRnLmNvbS9hcGkvaWxsdXN0cmF0ZS5zdmc/c3ZnX3N0cmluZz0lM0NzdmclMjBjbGFzcyUzRCUyMmljb24lMjIlMjBzdHlsZSUzRCUyMndpZHRoJTNBJTIwMWVtJTNCaGVpZ2h0JTNBJTIwMWVtJTNCdmVydGljYWwtYWxpZ24lM0ElMjBtaWRkbGUlM0JmaWxsJTNBJTIwY3VycmVudENvbG9yJTNCb3ZlcmZsb3clM0ElMjBoaWRkZW4lM0IlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDI0JTIwMTAyNCUyMiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTY4Ni4wOCUyMDkyMS42aC0zMjcuNjhDMjY4LjI4OCUyMDkyMS42JTIwMTg0LjMyJTIwODM3LjYzMiUyMDE4NC4zMiUyMDc0My40MjRWMzI3LjY4YzAtMjIuNTI4JTIwMTguNDMyLTQwLjk2JTIwNDAuOTYtNDAuOTZzNDAuOTYlMjAxOC40MzIlMjA0MC45NiUyMDQwLjk2djQxNS43NDRjMCUyMDQ3LjEwNCUyMDQ3LjEwNCUyMDk2LjI1NiUyMDkyLjE2JTIwOTYuMjU2aDMyNy42OGM0NS4wNTYlMjAwJTIwNzEuNjgtNDkuMTUyJTIwNzEuNjgtOTYuMjU2VjMyNy42OGMwLTIyLjUyOCUyMDE4LjQzMi00MC45NiUyMDQwLjk2LTQwLjk2czQwLjk2JTIwMTguNDMyJTIwNDAuOTYlMjA0MC45NnY0MTUuNzQ0YzAlMjA4OC4wNjQtNTcuMzQ0JTIwMTc4LjE3Ni0xNTMuNiUyMDE3OC4xNzZ6JTIyJTIwZmlsbCUzRCUyMiUyMzMzMzMzMyUyMiUyMCUyRiUzRSUzQ3BhdGglMjBkJTNEJTIyTTkyMS42JTIwMzQ4LjE2SDEwMi40Yy0yMi41MjglMjAwLTQwLjk2LTE4LjQzMi00MC45Ni00MC45NnMxOC40MzItNDAuOTYlMjA0MC45Ni00MC45Nmg4MTkuMmMyMi41MjglMjAwJTIwNDAuOTYlMjAxOC40MzIlMjA0MC45NiUyMDQwLjk2cy0xOC40MzIlMjA0MC45Ni00MC45NiUyMDQwLjk2ek03NTcuNzYlMjAxODQuMzJIMjY2LjI0Yy0yMi41MjglMjAwLTQwLjk2LTE4LjQzMi00MC45Ni00MC45NnMxOC40MzItNDAuOTYlMjA0MC45Ni00MC45Nmg0OTEuNTJjMjIuNTI4JTIwMCUyMDQwLjk2JTIwMTguNDMyJTIwNDAuOTYlMjA0MC45NnMtMTguNDMyJTIwNDAuOTYtNDAuOTYlMjA0MC45NnolMjIlMjBmaWxsJTNEJTIyJTIzMzMzMzMzJTIyJTIwJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJNNTkzLjkyJTIwNzE2LjhjLTIyLjUyOCUyMDAtNDAuOTYtMTguNDMyLTQwLjk2LTQwLjk2VjQzMC4wOGMwLTIyLjUyOCUyMDE4LjQzMi00MC45NiUyMDQwLjk2LTQwLjk2czQwLjk2JTIwMTguNDMyJTIwNDAuOTYlMjA0MC45NnYyNDUuNzZjMCUyMDIyLjUyOC0xOC40MzIlMjA0MC45Ni00MC45NiUyMDQwLjk2ek00MzAuMDglMjA3MTYuOGMtMjIuNTI4JTIwMC00MC45Ni0xOC40MzItNDAuOTYtNDAuOTZWNDMwLjA4YzAtMjIuNTI4JTIwMTguNDMyLTQwLjk2JTIwNDAuOTYtNDAuOTZzNDAuOTYlMjAxOC40MzIlMjA0MC45NiUyMDQwLjk2djI0NS43NmMwJTIwMjIuNTI4LTE4LjQzMiUyMDQwLjk2LTQwLjk2JTIwNDAuOTZ6JTIyJTIwZmlsbCUzRCUyMiUyM0U1QkQ0MSUyMiUyMCUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIsXFxuICAgIHRhYnNlYXJjaDogXFxcImh0dHBzOi8vaWNvbmZvbnQudHlyYW50Zy5jb20vYXBpL2lsbHVzdHJhdGUuc3ZnP3N2Z19zdHJpbmc9JTNDc3ZnJTIwY2xhc3MlM0QlMjJpY29uJTIyJTIwc3R5bGUlM0QlMjJ3aWR0aCUzQSUyMDFlbSUzQmhlaWdodCUzQSUyMDFlbSUzQnZlcnRpY2FsLWFsaWduJTNBJTIwbWlkZGxlJTNCZmlsbCUzQSUyMGN1cnJlbnRDb2xvciUzQm92ZXJmbG93JTNBJTIwaGlkZGVuJTNCJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTAyNCUyMDEwMjQlMjIlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0zMjcuNTI2NCUyMDE2MEgxMTguODM1MmMtMy43ODg4JTIwMC02Ljg2MDglMjAzLjU4NC02Ljg2MDglMjA3Ljk4NzJ2MjA0LjQ5MjhjMCUyMDQuNDAzMiUyMDMuMDcyJTIwNy45ODcyJTIwNi44NjA4JTIwNy45ODcyaDIwOC42OTEyYzMuNzM3NiUyMDAlMjA2LjgwOTYtMy41ODQlMjA2LjgwOTYtNy45ODcyVjE2Ny45MzZjMC00LjQwMzItMy4wNzItNy45ODcyLTYuODA5Ni03Ljk4NzJ6JTIwbTU1MS4xNjglMjAyOTQuNGMxOC40MzIlMjAwJTIwMzMuMjglMjAxMS4xMTA0JTIwMzMuMjI4OCUyMDI0LjgzMnYzNTkuOTM2YzAlMjAxMy43MjE2LTE0Ljg5OTIlMjAyNC44MzItMzMuMjglMjAyNC44MzJIMTQ1LjI1NDRjLTE4LjQzMiUyMDAtMzMuMjgtMTEuMTEwNC0zMy4yOC0yNC44MzJWNDc5LjIzMmMwLTEzLjcyMTYlMjAxNC44NDgtMjQuODMyJTIwMzMuMjgtMjQuODMyaDczMy4zODg4eiUyMG0tMzguNTAyNCUyMDcxLjY4SDE4My43MDU2djI2Ni4yNEg4NDAuMTkydi0yNjYuMjR6TTYxNi4yOTQ0JTIwMTYwYzMuNzg4OCUyMDAlMjA2LjgwOTYlMjAzLjU4NCUyMDYuODA5NiUyMDcuOTg3MnYyMDQuNDkyOGMwJTIwNC40MDMyLTMuMDcyJTIwNy45ODcyLTYuODA5NiUyMDcuOTg3Mkg0MDcuNjAzMmMtMy43Mzc2JTIwMC02LjgwOTYtMy41ODQtNi44MDk2LTcuOTg3MlYxNjcuOTM2YzAtNC40MDMyJTIwMy4wNzItNy45ODcyJTIwNi44MDk2LTcuOTg3MmgyMDguNjkxMnolMjBtLTQ0LjM5MDQlMjA1MS4ySDQ1MS45OTM2VjMyOS4yMTZoMTE5LjkxMDRWMjExLjJ6JTIwbTMzMy4xNTg0LTUxLjJjMy43ODg4JTIwMCUyMDYuODYwOCUyMDMuNTg0JTIwNi44NjA4JTIwNy45ODcydjIwNC40OTI4YzAlMjA0LjQwMzItMy4wNzIlMjA3Ljk4NzItNi44NjA4JTIwNy45ODcyaC0yMDguNjkxMmMtMy43Mzc2JTIwMC02LjgwOTYtMy41ODQtNi44MDk2LTcuOTg3MlYxNjcuOTM2YzAtNC40MDMyJTIwMy4wNzItNy45ODcyJTIwNi44MDk2LTcuOTg3MmgyMDguNjkxMnolMjBtLTQ0LjM5MDQlMjA1MS4yaC0xMTkuOTEwNFYzMjkuMjE2aDExOS45MTA0VjIxMS4yeiUyMiUyMCUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIsXFxuICAgIGhvdDogXFxcImh0dHBzOi8vaWNvbmZvbnQudHlyYW50Zy5jb20vYXBpL2lsbHVzdHJhdGUuc3ZnP3N2Z19zdHJpbmc9JTNDc3ZnJTIwY2xhc3MlM0QlMjJpY29uJTIyJTIwc3R5bGUlM0QlMjJ3aWR0aCUzQSUyMDFlbSUzQmhlaWdodCUzQSUyMDFlbSUzQnZlcnRpY2FsLWFsaWduJTNBJTIwbWlkZGxlJTNCZmlsbCUzQSUyMGN1cnJlbnRDb2xvciUzQm92ZXJmbG93JTNBJTIwaGlkZGVuJTNCJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTAyNCUyMDEwMjQlMjIlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk01MjguNTglMjA2MjIuMDdxLTE3Ljg4JTIwMC0yOC4xNSUyMDEzLjI3dC0xMC4yOCUyMDM0LjM3cTAlMjAyMC44MiUyMDEwJTIwMzR0MjcuNiUyMDEzLjI5cTE3Ljg3JTIwMCUyMDI3LjgzLTEyLjY3dDkuOTQtMzRxMC0yMi4zMS05LjY2LTM1LjI1dC0yNy4yOC0xMy4wMXolMjIlMjBmaWxsJTNEJTIyJTIzRkY3MTZFJTIyJTIwJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJNODc0LjI0JTIwNTg2LjM4Qzg2NS4zJTIwNDg2LjE0JTIwNzc5JTIwNDA5LjcyJTIwNzcyLjg1JTIwMzExLjRjLTI5LjE5JTIwNTMuNzctMzIuMjYlMjA4OS4xLTM1LjMzJTIwMTQyLjg3LTg5LjEtMTEwLjYxLTE4Mi44MS0yNTYuNTUtMTYxLjMtMzkwLjE5JTIwMCUyMDAtMTcwLjUyJTIwNTAuNjktMjM5LjY1JTIwMzE2LjQ1LTQzLTM1LjMzLTM5Ljk0LTExMC42MS0xOC40My0xNTUuMTVDMjcxJTIwMjU3LjkxLTMuMjglMjA1NzQuNTYlMjAyNTcuODglMjA4MzguMDUlMjAzMTEuODIlMjA4OTEuNzYlMjA0MDIuNTQlMjA5NjIlMjA1MjIuNDMlMjA5NTkuODZoMC42N2M4LjYzJTIwMC40MSUyMDE2Ni44NCUyMDIlMjAyOTQuNjEtMTQ4LjY5JTIwNTkuNjgtODYuMTclMjA2NC45LTEzMC44OCUyMDU2LjUzLTIyNC43OXpNNDMzLjc2JTIwNzMxLjY1YTkuMiUyMDkuMiUyMDAlMjAwJTIwMS05LjIlMjA5LjJoLTEyYTkuMiUyMDkuMiUyMDAlMjAwJTIwMS05LjIxLTkuMlY2ODJoLTYwLjgxdjQ5LjY5YTkuMiUyMDkuMiUyMDAlMjAwJTIwMS05LjIxJTIwOS4yaC0xMmE5LjIlMjA5LjIlMjAwJTIwMCUyMDEtOS4yLTkuMlY2MDUuNTdhNy40NSUyMDcuNDUlMjAwJTIwMCUyMDElMjA3LjQ1LTcuNDVoMTUuNWE3LjQ1JTIwNy40NSUyMDAlMjAwJTIwMSUyMDcuNDYlMjA3LjQ1djUwLjE0aDYwLjgxdi01MC4xNGE3LjQ1JTIwNy40NSUyMDAlMjAwJTIwMSUyMDcuNDYtNy40NWgxNS41YTcuNDUlMjA3LjQ1JTIwMCUyMDAlMjAxJTIwNy40NSUyMDcuNDV6TTU3OCUyMDcyMi41NnEtMTkuMzglMjAyMC43OC01MC44MSUyMDIwLjc4LTMwLjY5JTIwMC00OS44Ni0yMC4xNHQtMTkuMTYtNTEuODNxMC0zMy41NCUyMDE5LjU4LTU0LjZ0NTEuNzQtMjFxMzAuNiUyMDAlMjA0OS4yNSUyMDIwLjM2dDE4LjY2JTIwNTIuMzRxMC4wMSUyMDMzLjMxLTE5LjQlMjA1NC4wOXolMjBtMTMzLjg2LTEwNS4yMWE1LjY1JTIwNS42NSUyMDAlMjAwJTIwMS01LjY1JTIwNS42NWgtMzUuMDh2MTEwYTcuODQlMjA3Ljg0JTIwMCUyMDAlMjAxLTcuODQlMjA3Ljg0aC0xNC44M2E3Ljg0JTIwNy44NCUyMDAlMjAwJTIwMS03Ljg0LTcuODRWNjIzaC0zMy40NGE3LjE5JTIwNy4xOSUyMDAlMjAwJTIwMS03LjE5LTcuMTlWNjA1LjNhNy4xOCUyMDcuMTglMjAwJTIwMCUyMDElMjA3LjE5LTcuMThoOTlhNS42NCUyMDUuNjQlMjAwJTIwMCUyMDElMjA1LjY1JTIwNS42NHolMjIlMjBmaWxsJTNEJTIyJTIzRkY3MTZFJTIyJTIwJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJNNzM3LjUyJTIwNDU0LjI3QzcwNS4wNiUyMDQxNCUyMDY3MiUyMDM2OSUyMDY0NC4xMSUyMDMyMS42MyUyMDQ0Mi43NiUyMDM0NC40MiUyMDI4Ni4zJTIwNTE1LjMyJTIwMjg2LjMlMjA3MjIuNzZhNDAyLjE1JTIwNDAyLjE1JTIwMCUyMDAlMjAwJTIwMzguMjUlMjAxNzEuNzNjNTEuNjQlMjAzNi4zMyUyMDExOC4zNCUyMDY2Ljc2JTIwMTk3Ljg4JTIwNjUuMzdoMC42N2M4LjYzJTIwMC40MSUyMDE2Ni44NCUyMDIlMjAyOTQuNjEtMTQ4LjY5JTIwNTkuNjgtODYuMjMlMjA2NC45LTEzMC44OSUyMDU2LjUzLTIyNC44LTguNDQtOTQuNTUtODUuNjgtMTY3LjkxLTk5LjU5LTI1OC40NHEtNC42NS0xLTkuMzQtMS44N2MtMjIuMjMlMjA0NS45NC0yNS4wMSUyMDc5LjQ4LTI3Ljc5JTIwMTI4LjIxek00MzMuNzYlMjA3MzEuNjVhOS4yJTIwOS4yJTIwMCUyMDAlMjAxLTkuMiUyMDkuMmgtMTJhOS4yJTIwOS4yJTIwMCUyMDAlMjAxLTkuMjEtOS4yVjY4MmgtNjAuODF2NDkuNjlhOS4yJTIwOS4yJTIwMCUyMDAlMjAxLTkuMjElMjA5LjJoLTEyYTkuMiUyMDkuMiUyMDAlMjAwJTIwMS05LjItOS4yVjYwNS41N2E3LjQ1JTIwNy40NSUyMDAlMjAwJTIwMSUyMDcuNDUtNy40NWgxNS41YTcuNDUlMjA3LjQ1JTIwMCUyMDAlMjAxJTIwNy40NiUyMDcuNDV2NTAuMTRoNjAuODF2LTUwLjE0YTcuNDUlMjA3LjQ1JTIwMCUyMDAlMjAxJTIwNy40Ni03LjQ1aDE1LjVhNy40NSUyMDcuNDUlMjAwJTIwMCUyMDElMjA3LjQ1JTIwNy40NXpNNTc4JTIwNzIyLjU2cS0xOS4zOCUyMDIwLjc4LTUwLjgxJTIwMjAuNzgtMzAuNjklMjAwLTQ5Ljg2LTIwLjE0dC0xOS4xNi01MS44M3EwLTMzLjU0JTIwMTkuNTgtNTQuNnQ1MS43NC0yMXEzMC42JTIwMCUyMDQ5LjI1JTIwMjAuMzZ0MTguNjYlMjA1Mi4zNHEwLjAxJTIwMzMuMzEtMTkuNCUyMDU0LjA5eiUyMG0xMzMuODYtMTA1LjIxYTUuNjUlMjA1LjY1JTIwMCUyMDAlMjAxLTUuNjUlMjA1LjY1aC0zNS4wOHYxMTBhNy44NCUyMDcuODQlMjAwJTIwMCUyMDEtNy44NCUyMDcuODRoLTE0LjgzYTcuODQlMjA3Ljg0JTIwMCUyMDAlMjAxLTcuODQtNy44NFY2MjNoLTMzLjQ0YTcuMTklMjA3LjE5JTIwMCUyMDAlMjAxLTcuMTktNy4xOVY2MDUuM2E3LjE4JTIwNy4xOCUyMDAlMjAwJTIwMSUyMDcuMTktNy4xOGg5OWE1LjY0JTIwNS42NCUyMDAlMjAwJTIwMSUyMDUuNjUlMjA1LjY0eiUyMiUyMGZpbGwlM0QlMjIlMjNGRjVDNjQlMjIlMjAlMkYlM0UlM0NwYXRoJTIwZCUzRCUyMk01MjguNTglMjA2MjIuMDdxLTE3Ljg4JTIwMC0yOC4xNSUyMDEzLjI3dC0xMC4yOCUyMDM0LjM3cTAlMjAyMC44MiUyMDEwJTIwMzR0MjcuNiUyMDEzLjI5cTE3Ljg3JTIwMCUyMDI3LjgzLTEyLjY3dDkuOTQtMzRxMC0yMi4zMS05LjY2LTM1LjI1dC0yNy4yOC0xMy4wMXolMjIlMjBmaWxsJTNEJTIyJTIzRkM0OTU2JTIyJTIwJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJNODc0LjI0JTIwNTg2LjM4Yy01Ljg0LTY1LjQ2LTQ0LjY3LTEyMC43Ny03Mi42Mi0xNzguNjRhNDA0JTIwNDA0JTIwMCUyMDAlMjAwLTYxLjMyJTIwOC4zNmMtMS4yMSUyMDExLjkzLTIlMjAyNC40NS0yLjc4JTIwMzguMTdRNzI1LjI3JTIwNDM5LjA2JTIwNzEzJTIwNDIzYy0xMzcuNjMlMjA0MC0yNDQuOTMlMjAxNTEuMy0yNzkuMjQlMjAyOTEuMjZ2MTcuMzlhOS4xOSUyMDkuMTklMjAwJTIwMCUyMDEtNS40MyUyMDguMzglMjA0MDYuMzElMjA0MDYuMzElMjAwJTIwMCUyMDAlMjAxOS4xMSUyMDIxMS42MiUyMDI5OS43NSUyMDI5OS43NSUyMDAlMjAwJTIwMCUyMDc1JTIwOC4yMWgwLjY3YzguNjMlMjAwLjQxJTIwMTY2Ljg0JTIwMiUyMDI5NC42MS0xNDguNjklMjA1OS42Ny04Ni4xNyUyMDY0Ljg5LTEzMC44OCUyMDU2LjUyLTIyNC43OXpNNTc4JTIwNzIyLjU2cS0xOS4zOCUyMDIwLjc4LTUwLjgxJTIwMjAuNzgtMzAuNjklMjAwLTQ5Ljg2LTIwLjE0dC0xOS4xNi01MS44M3EwLTMzLjU0JTIwMTkuNTgtNTQuNnQ1MS43NC0yMXEzMC42JTIwMCUyMDQ5LjI1JTIwMjAuMzZ0MTguNjYlMjA1Mi4zNHEwLjAxJTIwMzMuMzEtMTkuNCUyMDU0LjA5eiUyMG0xMzMuODYtMTA1LjIxYTUuNjUlMjA1LjY1JTIwMCUyMDAlMjAxLTUuNjUlMjA1LjY1aC0zNS4wOHYxMTBhNy44NCUyMDcuODQlMjAwJTIwMCUyMDEtNy44NCUyMDcuODRoLTE0LjgzYTcuODQlMjA3Ljg0JTIwMCUyMDAlMjAxLTcuODQtNy44NFY2MjNoLTMzLjQ0YTcuMTklMjA3LjE5JTIwMCUyMDAlMjAxLTcuMTktNy4xOVY2MDUuM2E3LjE4JTIwNy4xOCUyMDAlMjAwJTIwMSUyMDcuMTktNy4xOGg5OWE1LjY0JTIwNS42NCUyMDAlMjAwJTIwMSUyMDUuNjUlMjA1LjY0eiUyMiUyMGZpbGwlM0QlMjIlMjNGQzQ5NTYlMjIlMjAlMkYlM0UlM0NwYXRoJTIwZCUzRCUyMk03MTEuODYlMjA2MTUuMzZ2MmE1LjY1JTIwNS42NSUyMDAlMjAwJTIwMS01LjY1JTIwNS42NWgtMS4zNWE0MDQuNTQlMjA0MDQuNTQlMjAwJTIwMCUyMDAtMzMuNzMlMjA0My4zM1Y3MzNhNy44NCUyMDcuODQlMjAwJTIwMCUyMDEtNy44NCUyMDcuODRoLTE0LjgzYTcuODQlMjA3Ljg0JTIwMCUyMDAlMjAxLTcuODQtNy44NHYtMTNhNDAyLjEyJTIwNDAyLjEyJTIwMCUyMDAlMjAwLTM4LjI5JTIwMTcxLjgzQTQwNy40MyUyMDQwNy40MyUyMDAlMjAwJTIwMCUyMDYwNi4yJTIwOTQ4YzU5LTE1Ljg1JTIwMTQwLTUyLjQ4JTIwMjExLjUxLTEzNi43OCUyMDU5LjY4LTg2LjIzJTIwNjQuOS0xMzAuODklMjA1Ni41My0yMjQuOC0yLjE4LTI0LjM4LTguOTMtNDcuMzQtMTgtNjkuNTVhNDA0LjM4JTIwNDA0LjM4JTIwMCUyMDAlMjAwLTE0NC4zOCUyMDk4LjQ5eiUyMiUyMGZpbGwlM0QlMjIlMjNGMjNENEYlMjIlMjAlMkYlM0UlM0NwYXRoJTIwZCUzRCUyMk02MDQuMzYlMjA0MjEuMTJjMCUyMDEzLjY1LTQwLjklMjAzLjM3LTkxLjM1JTIwMy41MnMtOTEuMzMlMjAxMC42Ni05MS4zNy0zJTIwNDAuODEtMzMuMjklMjA5MS4yNi0zMy40NCUyMDkxLjQyJTIwMTkuMjclMjA5MS40NiUyMDMyLjkyeiUyMiUyMGZpbGwlM0QlMjIlMjNGRkZGRkYlMjIlMjAlMkYlM0UlM0MlMkZzdmclM0VcXFwiLFxcbiAgICBnb29kOiBcXFwiaHR0cHM6Ly9pY29uZm9udC50eXJhbnRnLmNvbS9hcGkvaWxsdXN0cmF0ZS5zdmc/c3ZnX3N0cmluZz0lM0NzdmclMjBjbGFzcyUzRCUyMmljb24lMjIlMjBzdHlsZSUzRCUyMndpZHRoJTNBJTIwMWVtJTNCaGVpZ2h0JTNBJTIwMWVtJTNCdmVydGljYWwtYWxpZ24lM0ElMjBtaWRkbGUlM0JmaWxsJTNBJTIwY3VycmVudENvbG9yJTNCb3ZlcmZsb3clM0ElMjBoaWRkZW4lM0IlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDI0JTIwMTAyNCUyMiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTU5MS42MjgxOSUyMDEyMS45MDQ3NjJjNy42OCUyMDAlMjAyMS4xODcwNDglMjAxLjYzMzUyNCUyMDMxLjUyNDU3MiUyMDQuOTczNzE0JTIwNTAuOTA3NDI5JTIwMTYuNTA1OTA1JTIwODAuMjEzMzMzJTIwNzAuNTgyODU3JTIwNjguMzM5ODA5JTIwMTI0LjcwODU3MmwtMS4yMTkwNDclMjA1LjA3MTIzOC00NS4zNzI5NTMlMjAxNzAuMTc5MDQ3aDE3OS43MzYzODFjMjEuODIwOTUyJTIwMCUyMDQzLjM5ODA5NSUyMDguMDk0NDc2JTIwNTguMDI2NjY3JTIwMjQuMjgzNDI5JTIwMTYuMzM1MjM4JTIwMTguMDkwNjY3JTIwMjIuNjk4NjY3JTIwNDIuMDMyNzYyJTIwMTcuODQ2ODU3JTIwNjUuMjY3ODA5bC0xLjIxOTA0NyUyMDQuOTczNzE1LTk0Ljc2ODc2MiUyMDMzNy40MzIzODFhNTkuMjk0NDc2JTIwNTkuMjk0NDc2JTIwMCUyMDAlMjAxLTUyLjY2Mjg1NyUyMDQzLjE1NDI4NWwtNC4zODg1NzIlMjAwLjE0NjI4NkgyNjguMTkwNDc2VjQ0NC4wMDE1MjRjOTcuMDg0OTUyLTIxLjAxNjM4MSUyMDIzOS4wNzk2MTktMjc5LjI4MzgxJTIwMjM5LjA3OTYxOS0yNzkuMjgzODFDNTI3LjQ1NzUyNCUyMDEzNy4zMzc5MDUlMjA1NTEuOTM2JTIwMTIxLjkwNDc2MiUyMDU5MS42MjgxOSUyMDEyMS45MDQ3NjJ6TTgyOC45NTIzODElMjA1MDEuMTI2MDk1YzAtMC4zMTY5NTItMC4xNDYyODYtMC41MTItMC41NjA3NjItMC45NzUyMzglMjAwLjM0MTMzMyUyMDAuMzkwMDk1LTAuOTc1MjM4LTAuMTcwNjY3LTMuNzU0NjY3LTAuMTcwNjY3SDU0OS42OTI5NTJsNjkuOTAwMTkxLTI2Mi4yMTcxNDJjNS4wMjI0NzYtMTguNzczMzMzLTQuMTQ0NzYyLTM2LjQ5ODI4Ni0xOC45NjgzODEtNDEuMzAxMzM0YTUyLjU4OTcxNCUyMDUyLjU4OTcxNCUyMDAlMjAwJTIwMC05LjAyMDk1Mi0xLjQxNDA5NWMtMTAuOTIyNjY3JTIwMC0xNS40NTc1MjQlMjAxLjI2NzgxLTIxLjA2NTE0MyUyMDcuNTU4MDk1bC0xLjk1MDQ3NyUyMDIuMjkxODEtOS4yMTYlMjAxNi4wOTE0MjgtOS44NzQyODUlMjAxNi43MDA5NTNhMTUzNC42ODM0MjklMjAxNTM0LjY4MzQyOSUyMDAlMjAwJTIwMS03Mi4yMTYzODElMjAxMTAuMjAxOTA1Yy0yOC4wMTM3MTQlMjAzOC43NjU3MTQtNTUuNTM5ODElMjA3Mi4xNjc2MTktODIuNTUzOTA1JTIwOTguODE2LTE3Ljk2ODc2MiUyMDE3LjcyNDk1Mi0zNS41OTYxOSUyMDMyLjQ5OTgxLTUzLjM5NDI4NiUyMDQzLjk1ODg1N1Y4MjguOTUyMzgxaDM5NS42MDUzMzRMODI4Ljk1MjM4MSUyMDUwMS4xMjYwOTV6TTEyMS45MDQ3NjIlMjA0MzguODU3MTQzaDczLjE0Mjg1N3Y0NjMuMjM4MDk1SDEyMS45MDQ3NjJ6JTIyJTIwJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIixcXG4gICAgZGlzY3VzczogXFxcImh0dHBzOi8vaWNvbmZvbnQudHlyYW50Zy5jb20vYXBpL2lsbHVzdHJhdGUuc3ZnP3N2Z19zdHJpbmc9JTNDc3ZnJTIwY2xhc3MlM0QlMjJpY29uJTIyJTIwc3R5bGUlM0QlMjJ3aWR0aCUzQSUyMDFlbSUzQmhlaWdodCUzQSUyMDFlbSUzQnZlcnRpY2FsLWFsaWduJTNBJTIwbWlkZGxlJTNCZmlsbCUzQSUyMGN1cnJlbnRDb2xvciUzQm92ZXJmbG93JTNBJTIwaGlkZGVuJTNCJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTAyNCUyMDEwMjQlMjIlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk03MzEuNDI4NTcxJTIwMjY4LjE5MDQ3NmE3My4xNDI4NTclMjA3My4xNDI4NTclMjAwJTIwMCUyMDElMjA3My4xNDI4NTglMjA3My4xNDI4NTd2MzY1LjcxNDI4NmE3My4xNDI4NTclMjA3My4xNDI4NTclMjAwJTIwMCUyMDEtNzMuMTQyODU4JTIwNzMuMTQyODU3SDQ3OS40NzU4MWwtMTY1LjM3NiUyMDExNC40OTI5NTNBMjkuMjU3MTQzJTIwMjkuMjU3MTQzJTIwMCUyMDAlMjAxJTIwMjY4LjE5MDQ3NiUyMDg3MC42NDM4MVY3ODAuMTkwNDc2SDE3MC42NjY2NjdhNzMuMTQyODU3JTIwNzMuMTQyODU3JTIwMCUyMDAlMjAxLTczLjE0Mjg1Ny03My4xNDI4NTdWMzQxLjMzMzMzM2E3My4xNDI4NTclMjA3My4xNDI4NTclMjAwJTIwMCUyMDElMjA3My4xNDI4NTctNzMuMTQyODU3aDU2MC43NjE5MDR6JTIwbTAlMjA3My4xNDI4NTdIMTcwLjY2NjY2N3YzNjUuNzE0Mjg2aDE3MC42NjY2NjZ2NzkuNzk4ODU3TDQ1Ni42MzA4NTclMjA3MDcuMDQ3NjE5SDczMS40Mjg1NzFWMzQxLjMzMzMzM3olMjBtLTI4NS43NDQ3NjElMjAyMTkuNDI4NTcydjczLjE0Mjg1N0gyNDMuODA5NTI0di03My4xNDI4NTdoMjAxLjg3NDI4NnpNODUzLjMzMzMzMyUyMDE0Ni4yODU3MTRhNzMuMTQyODU3JTIwNzMuMTQyODU3JTIwMCUyMDAlMjAxJTIwNzMuMTQyODU3JTIwNzMuMTQyODU3djM5MC4wOTUyMzloLTczLjE0Mjg1N1YyMTkuNDI4NTcxSDI5Mi41NzE0MjlWMTQ2LjI4NTcxNGg1NjAuNzYxOTA0ek01ODUuMTQyODU3JTIwNDE0LjQ3NjE5djczLjE0Mjg1OEgyNDMuODA5NTI0di03My4xNDI4NThoMzQxLjMzMzMzM3olMjIlMjAlMkYlM0UlM0MlMkZzdmclM0VcXFwiLFxcbiAgICBzaGFyZTogXFxcImh0dHBzOi8vaWNvbmZvbnQudHlyYW50Zy5jb20vYXBpL2lsbHVzdHJhdGUuc3ZnP3N2Z19zdHJpbmc9JTNDc3ZnJTIwY2xhc3MlM0QlMjJpY29uJTIyJTIwc3R5bGUlM0QlMjJ3aWR0aCUzQSUyMDFlbSUzQmhlaWdodCUzQSUyMDFlbSUzQnZlcnRpY2FsLWFsaWduJTNBJTIwbWlkZGxlJTNCZmlsbCUzQSUyMGN1cnJlbnRDb2xvciUzQm92ZXJmbG93JTNBJTIwaGlkZGVuJTNCJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTAyNCUyMDEwMjQlMjIlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0zNTQuOTg2NjY3JTIwMjE5LjQyODU3MXY3My4xNDI4NThIMTk1LjA0NzYxOXY1MzYuMzgwOTUyaDU4NS4xNDI4NTdWNTQ4LjU3MTQyOWg3My4xNDI4NTdWODI4Ljk1MjM4MWE3My4xNDI4NTclMjA3My4xNDI4NTclMjAwJTIwMCUyMDEtNzMuMTQyODU3JTIwNzMuMTQyODU3SDE5NS4wNDc2MTlhNzMuMTQyODU3JTIwNzMuMTQyODU3JTIwMCUyMDAlMjAxLTczLjE0Mjg1Ny03My4xNDI4NTdWMjkyLjU3MTQyOWE3My4xNDI4NTclMjA3My4xNDI4NTclMjAwJTIwMCUyMDElMjA3My4xNDI4NTctNzMuMTQyODU4aDE1OS45MzkwNDh6JTIwbTM4My44MjkzMzMtMTAwLjQ3MzkwNGwxNzIuMzk3NzE0JTIwMTcyLjM3MzMzMy0xODEuMDA0MTklMjAxODEuMDI4NTcxLTUxLjczNjM4MS01MS43MTJMNzU3Ljc4NDM4MSUyMDM0MS4zMzMzMzNINjcwLjQ3NjE5Yy0xMzkuMDY4OTUyJTIwMC0yNTIuMjQ1MzMzJTIwMTEwLjg4NDU3MS0yNTUuOTAyNDc2JTIwMjQ5LjA3NTgxTDQxNC40NzYxOSUyMDU5Ny4zMzMzMzN2OTcuNTIzODFoLTczLjE0Mjg1N3YtOTcuNTIzODFDMzQxLjMzMzMzMyUyMDQxNS41NDg5NTIlMjA0ODguNjkxODElMjAyNjguMTkwNDc2JTIwNjcwLjQ3NjE5JTIwMjY4LjE5MDQ3NmgxMTQuMTI3MjM5bC05Ny40OTk0MjktOTcuNTIzODA5JTIwNTEuNzEyLTUxLjcxMnolMjIlMjAlMkYlM0UlM0MlMkZzdmclM0VcXFwiLFxcbiAgICByZXBseXNvcnQ6IFxcXCJodHRwczovL2ljb25mb250LnR5cmFudGcuY29tL2FwaS9pbGx1c3RyYXRlLnN2Zz9zdmdfc3RyaW5nPSUzQ3N2ZyUyMGNsYXNzJTNEJTIyaWNvbiUyMiUyMHN0eWxlJTNEJTIyd2lkdGglM0ElMjAxZW0lM0JoZWlnaHQlM0ElMjAxZW0lM0J2ZXJ0aWNhbC1hbGlnbiUzQSUyMG1pZGRsZSUzQmZpbGwlM0ElMjBjdXJyZW50Q29sb3IlM0JvdmVyZmxvdyUzQSUyMGhpZGRlbiUzQiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEwMjQlMjAxMDI0JTIyJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTQ2LjI4NTcxNCUyMDYwOS41MjM4MWgxMjEuOTA0NzYydjI0My44MDk1MjNIMTQ2LjI4NTcxNHolMjBtMTk1LjA0NzYxOS0xOTUuMDQ3NjJoMTIxLjkwNDc2MnY0MzguODU3MTQzaC0xMjEuOTA0NzYyeiUyMG0xOTUuMDQ3NjE5JTIwNDguNzYxOTA1aDEyMS45MDQ3NjJ2MzkwLjA5NTIzOGgtMTIxLjkwNDc2MnolMjBtMTk1LjA0NzYxOS0yOTIuNTcxNDI4aDEyMS45MDQ3NjJ2NjgyLjY2NjY2NmgtMTIxLjkwNDc2MnolMjIlMjAlMkYlM0UlM0MlMkZzdmclM0VcXFwiLFxcbiAgICBkb25hdGU6IFxcXCJodHRwczovL3MyLmxvbGkubmV0LzIwMjQvMDcvMjgvRndxUWlXdE5yMXVQSUdLLnBuZ1xcXCIsXFxuICAgIHRvcDogXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS9pbWcvdG9wLnBuZ1xcXCJcXG59O1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6L2u5pKt6aG16Z2iXCIsXCJwYXRoXCI6XCJDYXJvdXNlbC52aWV3XCIsXCJydWxlXCI6XCJqczpcXG4oZnVuY3Rpb24oKSB7XFxuICAgIGNvbnN0IGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcIkNvbmZpZy52aWV3XFxcIik7XFxuICAgIGxldCBhcnJheSA9IGRlY29kZVVSSUNvbXBvbmVudChnZXRQYXJhbShcXFwiYXJyYXlcXFwiKSk7XFxuICAgIGV2YWwoXFxcImFycmF5ID1cXFwiICsgYXJyYXkpO1xcbiAgICBhcGl2aWV3Ll9sYXlvdXRMaW5rUnVsZVBhcnNlKGFycmF5KTtcXG4gICAgc2V0UmVzdWx0KGFwaXZpZXcubGF5b3V0KTtcXG59KSgpXCJ9XSIsImljb24iOiJodHRwczovL3N0YXRpYy5jb29sYXBrLmNvbS9zdGF0aWMvd2ViL3Y4L2ltYWdlcy9oZWFkZXItbG9nby5wbmciLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment