xiaomianao666

小程序:聚漫🔮

Aug 20th, 2023
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@聚漫🔮@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi6IGa5ryr8J+UriIsImF1dGhvciI6IiIsInVybCI6Imhpa2VyOi8vZW1wdHkiLCJ2ZXJzaW9uIjoyMzAyMTkxMDgsImNvbF90eXBlIjoiaWNvbl9zbWFsbF80IiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJjYXJ0b29uIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6XG5jb25zdCBRSU5HX1RJVExFID0gZ2V0TXlWYXIoJ215Q29sbGVjdGlvbicpLFxuICAgIG5ld1dpbmRvdyA9IHJlYWRGaWxlKCduZXdXaW5kb3cnKSxcbiAgICB0eXBlU2hvdyA9IGdldE15VmFyKCd0eXBlU2hvdycsICdAJyksXG4gICAgdHlwZXMgPSB7XG4gICAgICAgICdhbGwnOiAn8J+NgOS8mOi0qCcsXG4gICAgICAgICd2aWRlbyc6ICfwn5al5Yqo5ryrJyxcbiAgICAgICAgJ211c2ljJzogJ/Cfkr3pn7PkuZAnLFxuICAgICAgICAnbGl2ZSc6ICfwn46b55u05pKtJyxcbiAgICAgICAgJ2NhcnRvb24nOiAn8J+Urua8q+eUuycsXG4gICAgICAgICdyZWFkJzogJ/Cfk5nkuaYnLFxuICAgICAgICAncGljdHVyZSc6ICfwn5Oa5Zu+54mHJyxcbiAgICAgICAgJ25ld3MnOiAn8J+aq+aXoOaQnOe0oicsXG4gICAgICAgICd0b29sJzogJ/Cfk6XkuIvovb0nLFxuICAgICAgICAnb3RoZXInOiAn4pyI77iPJ1xuICAgIH1cbmxldCBlbCA9IFt7XG4gICAgICAgIHRpdGxlOiAnICcgKyBRSU5HX1RJVExFLmJvbGQoKSArICcgJm5ic3AgJm5ic3AgJyArICfimpkg6IGa5ryr8J+Uruiuvue9riDimpknLnNtYWxsKCksXG4gICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db25maWc/cnVsZT0nICsgUUlOR19USVRMRSArICcmI25vUmVjb3JkSGlzdG9yeSMnLFxuICAgICAgICBpbWc6IE1ZX1JVTEUuaWNvbiB8fCAnaGlrZXI6Ly9pbWFnZXMvaWNvbjEnLFxuICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiBNWV9SVUxFLnZlcnNpb25cbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAgZGVzYzogJzAnLFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvTWFpbi52aWV3P3J1bGU95pys5Zyw6LWE5rqQ566h55CGJyxcbiAgICAgICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMvY2FyZF9iZycsXG4gICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcbiAgICB9LCB7XG4gICAgICAgIHVybDogJ1wiaGlrZXI6Ly9zZWFyY2g/cz1cIitpbnB1dCcsXG4gICAgICAgIGRlc2M6ICfov5nmmK/ogZrmvKvwn5Su55qE5pCc57Si5ZOmfn4nLFxuICAgICAgICB0aXRsZTogJ+aQnOe0oicsXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxuICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgcnVsZXM6ICQudG9TdHJpbmcoKFFJTkdfVElUTEUsIHR5cGVTaG93KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRSlcbiAgICAgICAgICAgICAgICBpZiAodHlwZVNob3dbMF0gPT0gJ0AnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJLZXkgPSB0eXBlU2hvdy5zbGljZSgxKVxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyS2V5KSBydWxlcyA9IHJ1bGVzLmZpbHRlcigodikgPT4gdi50aXRsZS5pbmNsdWRlcyhmaWx0ZXJLZXkpKVxuICAgICAgICAgICAgICAgIH0gZWxzZSBydWxlcyA9IHJ1bGVzLmZpbHRlcigodikgPT4gdi50eXBlID09IHR5cGVTaG93KTtcbiAgICAgICAgICAgICAgICBsZXQgeXV4PVwieXV4XCIrRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBsZXQgZWwgPSAkLnRvU3RyaW5nKChRSU5HX1RJVExFLCB5dXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpamFja0VsXG4gICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9mdW5jVG9vbHM/cnVsZT0nICsgUUlOR19USVRMRSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgUUlOR19USVRMRTpRSU5HX1RJVExFLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNJbmRleDogJC5oaWtlclt5dXhdLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVlfUlVMRTpNWV9SVUxFXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAgICAgJC5oaWtlci5zZXRSZXN1bHQgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW0wLmRhdGEpKSBwYXJhbTAgPSBwYXJhbTAuZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0wID0gcGFyYW0wLm1hcChoaWphY2tFbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICQuaGlrZXIuc2V0SG9tZVJlc3VsdCA9IHNldFJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAkLmhpa2VyLnNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxuICAgICAgICAgICAgICAgIH0sIFFJTkdfVElUTEUsIHl1eCk7XG4gICAgICAgICAgICAgICAgcnVsZXMgPSBydWxlcy5tYXAoKHYsaSk9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2LnNlYXJjaEZpbmQuc3RhcnRzV2l0aCgnanM6JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHYuc2VhcmNoRmluZCA9IFwianM6JC5oaWtlci5cIit5dXgrXCI9XCIraStcIjtcIiArIGVsICsgXCI7XCIgKyB2LnNlYXJjaEZpbmQuc2xpY2UoMyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJ1bGVzKVxuICAgICAgICAgICAgfSwgUUlOR19USVRMRSwgdHlwZVNob3cpLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcignc2VhcmNoS2V5JywgJycpLFxuICAgICAgICAgICAgb25DaGFuZ2U6IFwicHV0TXlWYXIoJ3NlYXJjaEtleScsaW5wdXQpXCJcbiAgICAgICAgfVxuICAgIH1dLFxuICAgIHJ1bGVzID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRSksXG4gICAgcnVsZXNUeXBlID0gcnVsZXMucmVkdWNlKChvYmosIHYpID0+IHtcbiAgICAgICAgbGV0IHR5cGUgPSB2LnR5cGVcbiAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmpbdHlwZV0pKVxuICAgICAgICAgICAgICAgIG9ialt0eXBlXSA9IFtdXG4gICAgICAgICAgICBvYmpbdHlwZV0ucHVzaCh2KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmpcbiAgICB9LCB7fSlcbmlmICh0eXBlU2hvd1swXSA9PSAnQCcpIHtcbiAgICBsZXQgZmlsdGVyS2V5ID0gdHlwZVNob3cuc2xpY2UoMSlcbiAgICBpZiAoZmlsdGVyS2V5KSBydWxlcyA9IHJ1bGVzLmZpbHRlcigodikgPT4gdi50aXRsZS5pbmNsdWRlcyhmaWx0ZXJLZXkpKVxufVxuZWwucHVzaCh7XG4gICAgaW1nOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzEucG5nJyxcbiAgICB0aXRsZTogJ+aUtuiXjycsXG4gICAgdXJsOiBcImhpa2VyOi8vY29sbGVjdGlvbj9ncm91cD3ogZrmvKvwn5SuXCIsXG4gICAgY29sX3R5cGU6IFwiaWNvbl8yXCJcbn0sIHtcbiAgICBpbWc6ICdodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8va2UvMTM3LnBuZycsXG4gICAgdGl0bGU6ICfljoblj7InLFxuICAgIHVybDogXCJoaWtlcjovL2hpc3RvcnlcIixcbiAgICBjb2xfdHlwZTogXCJpY29uXzJcIlxufSlcbmVsLnB1c2godHlwZVNob3dbMF0gPT0gJ0AnID8ge1xuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArICgn5YWo6YOoJyArICh0eXBlU2hvd1sxXSA/ICdbJyArIHR5cGVTaG93LnNsaWNlKDEpICsgJ10nIDogJycpKS5ib2xkKCkuZm9udGNvbG9yKCcjMTJiNjY4JykgKyAnICcgKyAocnVsZXMubGVuZ3RoKS50b1N0cmluZygpLnNtYWxsKCksXG4gICAgdXJsOiAkKHR5cGVTaG93LnNsaWNlKDUpLCAn5p+l5om+5bCP56iL5bqP5YWz6ZSu6K+NJykuaW5wdXQoKCkgPT4ge1xuICAgICAgICBwdXRNeVZhcigndHlwZVNob3cnLCAnQCcgKyBpbnB1dClcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcbiAgICB9KSxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXG59IDoge1xuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCd5YWo6YOoICcgKyAocnVsZXMubGVuZ3RoKS50b1N0cmluZygpLnNtYWxsKCksXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcbiAgICAgICAgcHV0TXlWYXIoJ3R5cGVTaG93JywgJ0AnKVxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+WGjeasoeeCueWHu+OAkOWFqOmDqOOAkeWPr+afpeaJvuWwj+eoi+W6jydcbiAgICB9KSxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXG59KVxuXG5mb3IgKGxldCBrIGluIHR5cGVzKVxuICAgIGlmIChrIGluIHJ1bGVzVHlwZSlcbiAgICAgICAgZWwucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAoayA9PSB0eXBlU2hvdyA/IHR5cGVzW2tdLmJvbGQoKS5mb250Y29sb3IoJyMxMmI2NjgnKSA6IHR5cGVzW2tdKSArICcgJyArIChydWxlc1R5cGVba10ubGVuZ3RoKS50b1N0cmluZygpLnNtYWxsKCksXG4gICAgICAgICAgICB1cmw6IGsgPT0gdHlwZVNob3cgPyAnaGlrZXI6Ly9lbXB0eScgOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3R5cGVTaG93JywgaylcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXG4gICAgICAgICAgICB9LCBrKSxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcbiAgICAgICAgfSlcbmlmIChnZXRJdGVtKFwicmVhZF9wb2xpY3lcIikgIT09IFwiMVwiKSB7XG4gICAgZWwucHVzaCh7XG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPSM4NzFmNzg+5Lul5LiL5pWw5o2u5p2l5rqQ5LqO572R57uc77yM5aaC5oKo5Zac5qyi77yM6K+35pSv5oyB5a6Y5pa5PC9mb250Pjwvc21hbGw+JyxcbiAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnTxzbWFsbD48Zm9udCBjb2xvcj0jZjIwYzAwPuacrOinhOWImeS7hemZkOWFjei0ueWtpuS5oOS6pOa1geS9v+eUqO+8jOivt+S6juWvvOWFpeWQjjI05bCP5pe25YaF5Yig6Zmk77yM5Lu75L2V57uE57uH5oiW5Liq5Lq65LiN5b6X5Lul5Lu75L2V5pa55byP5pa55rOV5Lyg5pKt5oiW5ZSu5Y2W5q2k6KeE5YiZ55qE5pW05L2T5oiW6YOo5YiG77yBPC9mb250Pjwvc21hbGw+JyxcbiAgICAgICAgdXJsOiAkKCcjbm9IaXN0b3J5IycpLmxhenlSdWxlKCgpID0+IHtcbiAgICAgICAgICAgIHNldEl0ZW0oXCJyZWFkX3BvbGljeVwiLCBcIjFcIilcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/kvaDlt7LlkIzmhI/or6XljY/orq5cIlxuICAgICAgICB9KSxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xuICAgIH0pXG59XG5cbmlmIChnZXRJdGVtKFwiZGF0YVwiKSAhPT0gXCIxXCIpIHtcbiAgICB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJylcbiAgICBlbC5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9Izg3MWY3OD7ngrnlh7vojrflj5bmvKvnlLvmupA8L2ZvbnQ+PC9zbWFsbD4nLFxuICAgICAgICB1cmw6ICQoJyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHVybCkgPT4ge1xuICAgICAgICAgICAgc2V0SXRlbShcImRhdGFcIiwgXCIxXCIpXG4gICAgICAgICAgICByZXF1aXJlRG93bmxvYWQoJ2h0dHBzOi8vYWdpdC5haS9EcmVhbU92Ty9KdU1hbi9yYXcvYnJhbmNoL21hc3Rlci9KTScsIHVybClcbiAgICAgICAgICAgIGJhY2soZmFsc2UpXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxuICAgICAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/mlbDmja7lt7Lojrflj5ZcIlxuICAgICAgICB9LCB1cmwpLFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXG4gICAgfSlcbn1cbmlmICh0eXBlU2hvd1swXSAhPSAnQCcpIHJ1bGVzID0gcnVsZXNUeXBlW3R5cGVTaG93XVxubGV0IHsgcGFyYW1IYW5kbGUgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2Z1bmNUb29scz9ydWxlPScgKyBRSU5HX1RJVExFLCB7fSlcbnJ1bGVzLmZvckVhY2goKHYpID0+IHtcbiAgICBsZXQgdXJsUGFyYW0gPSB2LnVybC5zcGxpdCgnOycpLFxuICAgICAgICBydWxlVG1wID0ge1xuICAgICAgICAgICAgdGl0bGU6IHYudGl0bGUsIHVybDogdXJsUGFyYW0uc2hpZnQoKSxcbiAgICAgICAgICAgIGNsYXNzX25hbWU6IHYuY2xhc3NfbmFtZSwgY2xhc3NfdXJsOiB2LmNsYXNzX3VybCxcbiAgICAgICAgICAgIGFyZWFfbmFtZTogdi5hcmVhX25hbWUsIGFyZWFfdXJsOiB2LmFyZWFfdXJsLFxuICAgICAgICAgICAgeWVhcl9uYW1lOiB2LnllYXJfbmFtZSwgeWVhcl91cmw6IHYueWVhcl91cmwsXG4gICAgICAgICAgICBzb3J0X25hbWU6IHYuc29ydF9uYW1lLCBzb3J0X3VybDogdi5zb3J0X3VybFxuICAgICAgICB9LFxuICAgICAgICBmeXBhZ2UgPSBydWxlVG1wLnVybC5pbmNsdWRlcygnZnlwYWdlJykgPyAnZnlwYWdlJyA6ICcxJyxcbiAgICAgICAgZG9tYWluID0gKC9eaHR0cHM/OlxcL1xcL1teLz8jXSsvaS5leGVjKHJ1bGVUbXAudXJsKSB8fCBbJ2hpa2VyOi8vZW1wdHknXSlbMF0sXG4gICAgICAgIGQgPSB7XG4gICAgICAgICAgICB0aXRsZTogdi50aXRsZSxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9mcmFtZUxvYWQnLFxuICAgICAgICAgICAgaW1nOiB2Lmljb24gfHwgJ2hpa2VyOi8vaW1hZ2VzL2ljb24xJyxcbiAgICAgICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAgICAgdXJsOiBkb21haW4gKyAnLyNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMjIyMnICsgZnlwYWdlICtcbiAgICAgICAgICAgICAgICAgICAgJy5qczpsZXQgeyBydW5Db2RlLCBpbmRleFVybCB9ID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL2Z1bmNUb29sc++8n++8n3J1bGU9JyArIFFJTkdfVElUTEUgKyAnXCIsICdcbiAgICAgICAgICAgICAgICAgICAgICsgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgTVlfUlVMRTogYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KHJ1bGVUbXApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFFJTkdfVElUTEU6IFFJTkdfVElUTEVcbiAgICAgICAgICAgICAgICAgICAgfSkgKyAnKe+8m++8m2luZGV4VXJsKGlucHV0KTsnICsgcGFyYW1IYW5kbGUodXJsUGFyYW0sIHYudWEpLFxuICAgICAgICAgICAgICAgIFJVTEU6IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeSh7IHRpdGxlOiB2LnRpdGxlIH0pKSxcbiAgICAgICAgICAgICAgICBpc0luZGV4OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBpZiAobmV3V2luZG93KSBPYmplY3QuYXNzaWduKGQuZXh0cmEsIHtcbiAgICAgICAgbmV3V2luZG93OiB0cnVlLFxuICAgICAgICB3aW5kb3dJZDogUUlOR19USVRMRSArICdfJyArIGQudGl0bGVcbiAgICB9KVxuICAgIGVsLnB1c2goZClcbn0pXG5zZXRSZXN1bHQoZWwpIiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHk/a2V5d29yZD0qKiIsImdyb3VwIjoi6L275bqU55SoIiwic2VhcmNoRmluZCI6ImpzOlxuc2V0UmVzdWx0KFt7XG4gICAgdGl0bGU6IFwi54K55oiR5byA5aeL6IGa5ryr4oCi6KeG55WM6IGa5pCcXCIsXG4gICAgdXJsOiBcImhpa2VyOi8vc2VhcmNoP3M9XCIgKyBnZXRQYXJhbShcImtleXdvcmRcIiksXG4gICAgZXh0cmE6IHtcbiAgICAgICAgcnVsZXM6ICQudG9TdHJpbmcoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgUUlOR19USVRMRSA9IGdldE15VmFyKCdteUNvbGxlY3Rpb24nKSxcbiAgICAgICAgICAgICAgICB0eXBlU2hvdyA9IGdldE15VmFyKCd0eXBlU2hvdycsICdAJylcbiAgICAgICAgICAgIGxldCBydWxlcyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVTaG93WzBdID09ICdAJykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyS2V5ID0gdHlwZVNob3cuc2xpY2UoMSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcktleSkgcnVsZXMgPSBydWxlcy5maWx0ZXIoKHYpID0+IHYudGl0bGUuaW5jbHVkZXMoZmlsdGVyS2V5KSlcbiAgICAgICAgICAgICAgICB9IGVsc2UgcnVsZXMgPSBydWxlcy5maWx0ZXIoKHYpID0+IHYudHlwZSA9PSB0eXBlU2hvdyk7XG4gICAgICAgICAgICAgICAgbGV0IHl1eD1cInl1eFwiK0RhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgbGV0IGVsID0gJC50b1N0cmluZygoUUlOR19USVRMRSwgeXV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaWphY2tFbFxuICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZnVuY1Rvb2xzP3J1bGU9JyArIFFJTkdfVElUTEUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFFJTkdfVElUTEU6UUlOR19USVRMRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSW5kZXg6ICQuaGlrZXJbeXV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1JVTEU6TVlfUlVMRVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICQuaGlrZXIuc2V0UmVzdWx0ID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbTEgPSBDQUxMQkFDS19LRVlcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtMyA9IE1ZX1RZUEVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtMC5kYXRhKSkgcGFyYW0wID0gcGFyYW0wLmRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtMCA9IHBhcmFtMC5tYXAoaGlqYWNrRWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkLmhpa2VyLnNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgJC5oaWtlci5zZXRTZWFyY2hSZXN1bHQgPSBzZXRSZXN1bHRcbiAgICAgICAgICAgICAgICB9LCBRSU5HX1RJVExFLCB5dXgpO1xuICAgICAgICAgICAgICAgIHJ1bGVzID0gcnVsZXMubWFwKCh2LGkpPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodi5zZWFyY2hGaW5kLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2LnNlYXJjaEZpbmQgPSBcImpzOiQuaGlrZXIuXCIreXV4K1wiPVwiK2krXCI7XCIgKyBlbCArIFwiO1wiICsgdi5zZWFyY2hGaW5kLnNsaWNlKDMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShydWxlcylcbiAgICAgICAgfSlcbiAgICB9XG59XSlcbiIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6InB1dE15VmFyKCdteUNvbGxlY3Rpb24nLCBNWV9SVUxFLnRpdGxlKVxucHV0TXlWYXIoJ3JlbW90ZVVybCcsICdoaWtlcjovL2ZpbGVzLy9ydWxlcy9Uei9KTScpXG5pZiAocmVxdWVzdCgnaGlrZXI6Ly9ob21lQOacrOWcsOi1hOa6kOeuoeeQhicpID09ICdudWxsJykge1xuICAgIGNvbmZpcm0oe1xuICAgICAgICB0aXRsZTogJ+S+nei1luajgOa1iycsXG4gICAgICAgIGNvbnRlbnQ6ICfmo4DmtYvliLDnvLrlsJHmqKHmnb/kvp3otZYs6K+35a+85YWlIScsXG4gICAgICAgIGNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBcIua1t+mYlOinhueVjOmmlumhtemikemBk+inhOWImeOAkOacrOWcsOi1hOa6kOeuoeeQhuOAke+/pWhvbWVfcnVsZV91cmzvv6VodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0zNTU5XCJcbiAgICAgICAgfVxuICAgIH0pXG59XG4vLyBcbi8qXG4qLyIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIkNsYXNzVGFiXCIsXCJwYXRoXCI6XCJDbGFzc1RhYlwiLFwicnVsZVwiOlwidmFyIHtcXG4gICAgUUlOR19USVRMRSwgdGl0bGUsIHVybCxcXG4gICAgY2xhc3NfbmFtZSwgY2xhc3NfdXJsLFxcbiAgICBhcmVhX25hbWUsIGFyZWFfdXJsLFxcbiAgICB5ZWFyX25hbWUsIHllYXJfdXJsLFxcbiAgICBzb3J0X25hbWUsIHNvcnRfdXJsXFxufSA9ICQuaW1wb3J0UGFyYW1cXG5jb25zdCBDbGFzc1RhYiA9IGZ1bmN0aW9uKGNsYXNzQXJyYXksIHBhcmFtcykge1xcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHBhcmFtcylcXG4gICAgdGhpcy5hcnIgPSBjbGFzc0FycmF5Lm1hcCh2ID0+IHRoaXMuaW5pdCh2KSlcXG4gICAgdGhpcy5zaWduID0gJyQnICsgUUlOR19USVRMRSArICdfJyArICh0aGlzLm5hbWUgfHwgJycpICsgJ18nXFxuICAgIHRoaXMuY29sb3IgPSB0aGlzLmNvbG9yIHx8ICcjMTJiNjY4J1xcbiAgICB0aGlzLmJvdW5kYXJ5ID0gdGhpcy5ib3VuZGFyeSB8fCAnYmxhbmtfYmxvY2snXFxufVxcbkNsYXNzVGFiLnByb3RvdHlwZSA9IHtcXG4gICAgY29uc3RydWN0b3I6IENsYXNzVGFiLFxcbiAgICBsb2FkKGVsKSB7XFxuICAgICAgICBsZXQgZm9sZGVkID0gdGhpcy5mb2xkICYmIGdldFZhcignJGZvbGRfJyArIHRoaXMuc2lnbiwgJycpXFxuICAgICAgICBpZiAodGhpcy5hcnIubGVuZ3RoID4gMSAmJiB0aGlzLmZvbGQpIGVsLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArIChmb2xkZWQgPyAn4pa2JyA6ICfilrwnKS5mb250Y29sb3IoJyMwNDllZmYnKSxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNpZ24sIGZvbGRlZCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIoJyRmb2xkXycgKyBzaWduLCBmb2xkZWQgPyAnJyA6ICdUJylcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGZvbGRlZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGxldCBhcnIgPSBmb2xkZWQgPyBbdGhpcy5hcnJbMF1dIDogdGhpcy5hcnJcXG4gICAgICAgIGFyci5mb3JFYWNoKCh2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IHsgaWQsIGNsYXNzX25hbWUsIGNsYXNzX3VybCB9ID0gdixcXG4gICAgICAgICAgICBzZWxlY3RlZCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Q2xhc3MoaWQpKVxcbiAgICAgICAgICAgIGNsYXNzX25hbWUuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gY2xhc3NfdXJsW2ldLFxcbiAgICAgICAgICAgICAgICAgICAgbm93ID0gSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiBuYW1lLCB1cmw6IHVybCB9KVxcbiAgICAgICAgICAgICAgICBlbC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzZWxlY3RlZCA9PSBub3cgPyAn4oCc4oCc4oCd4oCdJyArIG5hbWUuZm9udGNvbG9yKHRoaXMuY29sb3IpLmJvbGQoKSA6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHNlbGVjdGVkID09IG5vdyA/ICdoaWtlcjovL2VtcHR5JyA6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNpZ24sIGlkLCBub3cpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoc2lnbiArIGlkLCBub3cpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5zaWduLCBpZCwgbm93KSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGVsLnB1c2goeyBjb2xfdHlwZTogdGhpcy5ib3VuZGFyeSB9KVxcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgaW5pdChjbGFzc09iamVjdCkge1xcbiAgICAgICAgaWYgKHR5cGVvZiBjbGFzc09iamVjdC5jbGFzc19uYW1lID09ICdzdHJpbmcnKVxcbiAgICAgICAgICAgIGNsYXNzT2JqZWN0LmNsYXNzX25hbWUgPSBjbGFzc09iamVjdC5jbGFzc19uYW1lLnNwbGl0KCcmJylcXG4gICAgICAgIGlmICh0eXBlb2YgY2xhc3NPYmplY3QuY2xhc3NfdXJsID09ICdzdHJpbmcnKVxcbiAgICAgICAgICAgIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9IGNsYXNzT2JqZWN0LmNsYXNzX3VybC5zcGxpdCgnJicpLm1hcCgodikgPT4gdi50cmltKCkpXFxuICAgICAgICByZXR1cm4gY2xhc3NPYmplY3RcXG4gICAgfSxcXG4gICAgcHVzaChjbGFzc09iamVjdCkge1xcbiAgICAgICAgdGhpcy5hcnIucHVzaCh0aGlzLmluaXQoY2xhc3NPYmplY3QpKVxcbiAgICB9LFxcbiAgICBnZXRDbGFzcyhpZCkge1xcbiAgICAgICAgbGV0IGRlZmF1bHRDbGFzcyA9IHRoaXMuYXJyLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09IGlkKVxcbiAgICAgICAgZGVmYXVsdENsYXNzID0gSlNPTi5zdHJpbmdpZnkoZGVmYXVsdENsYXNzID8ge1xcbiAgICAgICAgICAgIG5hbWU6IGRlZmF1bHRDbGFzcy5jbGFzc19uYW1lWzBdLFxcbiAgICAgICAgICAgIHVybDogZGVmYXVsdENsYXNzLmNsYXNzX3VybFswXVxcbiAgICAgICAgfSA6IHsgbmFtZTogICdjYW5ub3QgZmluZCBpZDogJyArIGlkICsgJyBpbiBjbGFzc1RhYjogJyArIHRoaXMuc2lnbiwgdXJsOiAnJ30pXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRWYXIodGhpcy5zaWduICsgaWQsIGRlZmF1bHRDbGFzcykpXFxuICAgIH0sXFxuICAgIHNldFVybCh1cmwpIHtcXG4gICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgvXFxcXCRcXFxceyhbXn1dKilcXFxcfS9nLCAoXywgaWQpID0+IHRoaXMuZ2V0Q2xhc3MoaWQpLnVybClcXG4gICAgfVxcbn1cXG4vLyDnlJ/miJDlpLTpg6jliIbnsbtcXG5sZXQgZnlBbGwgPSB1cmwuaW5jbHVkZXMoJ2Z5QWxsJyksXFxuICAgIHRhYkhlYWRlciA9IFtdXFxuaWYgKGNsYXNzX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeWNsYXNzJyxcXG4gICAgY2xhc3NfbmFtZTogY2xhc3NfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiBjbGFzc191cmxcXG59KVxcbmlmIChhcmVhX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeWFyZWEnLFxcbiAgICBjbGFzc19uYW1lOiBhcmVhX25hbWUsXFxuICAgIGNsYXNzX3VybDogYXJlYV91cmxcXG59KVxcbmlmICh5ZWFyX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeXllYXInLFxcbiAgICBjbGFzc19uYW1lOiB5ZWFyX25hbWUsXFxuICAgIGNsYXNzX3VybDogeWVhcl91cmxcXG59KVxcbmlmIChzb3J0X25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeXNvcnQnLFxcbiAgICBjbGFzc19uYW1lOiBzb3J0X25hbWUsXFxuICAgIGNsYXNzX3VybDogc29ydF91cmxcXG59KVxcbiQuZXhwb3J0cyA9IHtcXG4gICAgZnlBbGw6IGZ5QWxsLFxcbiAgICB0YWJIZWFkZXI6IG5ldyBDbGFzc1RhYih0YWJIZWFkZXIsIHsgbmFtZTogdGl0bGUsIGZvbGQ6IHJlYWRGaWxlKCd0YWJGb2xkJyksIH0pXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwiaWNvbl8yX3JvdW5kXCIsXCJuYW1lXCI6XCLorr7nva5cIixcInBhdGhcIjpcIkNvbmZpZ1wiLFwicnVsZVwiOlwianM6XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJNeVZhcihcXFwic29ydEZsYWdcXFwiKTtyZWZyZXNoUGFnZSgpJylcXG5zZXRQYWdlVGl0bGUoJ+KamSDogZrmvKvwn5Su6K6+572uIOKamScpXFxuY29uc3QgUUlOR19USVRMRSA9IGdldE15VmFyKCdteUNvbGxlY3Rpb24nKSxcXG4gICAgdXJsID0gZ2V0TXlWYXIoJ3JlbW90ZVVybCcpXFxubGV0IGRhdGEgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFLCB0cnVlKSxcXG4gICAgZWwgPSBbe1xcbiAgICAgICAgdGl0bGU6ICc8Yj4g5riF6Zmk57yT5a2Y77yM56uL5Y2z5pu05pawIDxzbWFsbD4g77yI5Z+65LqO6L+c56iL5LuT5bqT77yM5rKh5LqL5Yir54K577yM5Y+v5q+P5pyI54K55LiA5qyh5pu05paw77yJJyxcXG4gICAgICAgIHVybDogJChcXFwi5riF6Zmk57yT5a2Y77yM56uL5Y2z5pu05pawXFxcIikuY29uZmlybSgodXJsKSA9PiB7XFxuICAgICAgICAgICAgLy/ov5znqIvkvp3otZbntKLlvJXmlofku7bku6PnkIblnLDlnYDliJfooahcXG4gICAgICAgICAgICBsZXQgcmVxdWlyZWxpc3QgPSBbJ2h0dHBzOi8vcmF3LmlxaXEuaW8vJywgJ2h0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tLycsICdodHRwczovL2docHJveHkuY29tL2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS8nLCAnaHR0cHM6Ly9jZG4uc3RhdGljYWx5LmNvbS9naC8nLCAnaHR0cHM6Ly9naXRodWIuamV2b25zLnZpcC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vJ11cXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVpcmVsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7IC8v6L+c56iL5L6d6LWW57Si5byVXFxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzID0gcmVxdWVzdChyZXF1aXJlbGlzdFtpXSArICdEcmVhbU96Ty9KTS9tYWluL0pNJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhTdGF0dXNDb2RlOiB0cnVlXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzKS5zdGF0dXNDb2RlID09IDIwMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlRXhpc3QodXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlKHVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZURvd25sb2FkKHJlcXVpcmVsaXN0W2ldICsgJ0RyZWFtT3pPL0pNL21haW4vSk0nLHVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlRG93bmxvYWQocmVxdWlyZWxpc3RbaV0gKyAnRHJlYW1Pek8vSk0vbWFpbi9KTScsdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSlcXG4gICAgICAgICAgICBiYWNrKGZhbHNlKVxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lmm7TmlrAnXFxuICAgICAgICB9LCB1cmwpLFxcbiAgICAgICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMvaWNvbjQnLFxcbiAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInXFxuICAgIH1dLFxcbiAgICB1cGRhdGVJbnRlcnZhbCA9IHJlYWRGaWxlKCd1cGRhdGVJbnRlcnZhbCcpIHx8ICcxJyxcXG4gICAgbmV3V2luZG93ID0gcmVhZEZpbGUoJ25ld1dpbmRvdycpLFxcbiAgICB0YWJGb2xkID0gcmVhZEZpbGUoJ3RhYkZvbGQnKSxcXG4gICAgZGlzYWJsZUN1c3RvbSA9IHJlYWRGaWxlKCdkaXNhYmxlQ3VzdG9tJyksXFxuICAgIGVkaXRNb2RlID0gZGlzYWJsZUN1c3RvbSA/ICflr7zlhaXmtbfpmJQnIDogZ2V0TXlWYXIoJ2VkaXRNb2RlJywgJ+WQr+eUqC/npoHnlKgnKVxcblxcbmVsLnB1c2goe1xcbiAgICB0aXRsZTogJyAg8J+SoSDmm7TmlrDpopHnjoc6ICcgKyAodXBkYXRlSW50ZXJ2YWwgPT0gMCA/ICfmiYvliqgnIDogdXBkYXRlSW50ZXJ2YWwgKyAn5aSpJykgKyAnICAnLFxcbiAgICB1cmw6ICQodXBkYXRlSW50ZXJ2YWwsICfovpPlhaXmm7TmlrDpl7TpmpTvvIjlpKnvvInvvIzkuLow5YiZ5omL5Yqo5pu05pawXFxcXG7mnKzlnLDmlofku7bpk77mjqXml6DmlYgnKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICBpbnB1dCA9IHBhcnNlSW50KGlucHV0KVxcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihpbnB1dCkpIGlucHV0ID0gMVxcbiAgICAgICAgZWxzZSBpZiAoaW5wdXQgPCAxKSBpbnB1dCA9IDBcXG4gICAgICAgIHNhdmVGaWxlKCd1cGRhdGVJbnRlcnZhbCcsIGlucHV0LnRvU3RyaW5nKCkpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJyAg8J+WpSDni6znq4vpppbpobU6ICcgKyAobmV3V2luZG93ID8gJ+aYrycgOiAn5ZCmJykgKyAnICAnLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG5ld1dpbmRvdykgPT4ge1xcbiAgICAgICAgc2F2ZUZpbGUoJ25ld1dpbmRvdycsIG5ld1dpbmRvdyA/ICcnIDogJ1QnKVxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICB9LCBuZXdXaW5kb3cpLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJyAg8J+SoCDliIbnsbvmipjlj6A6ICcgKyAodGFiRm9sZCA/ICfmmK8nIDogJ+WQpicpICsgJyAgJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0YWJGb2xkKSA9PiB7XFxuICAgICAgICBzYXZlRmlsZSgndGFiRm9sZCcsIHRhYkZvbGQgPyAnJyA6ICdUJylcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSwgdGFiRm9sZCksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59LCB7XFxuICAgIHRpdGxlOiAnICDwn5K8IOWkh+S7veaBouWkjSAgJyxcXG4gICAgdXJsOiAkKFsn5aSH5Lu9JywgJ+aBouWkjSddLCAxKS5zZWxlY3QoKFFJTkdfVElUTEUsIHVwZGF0ZUludGVydmFsLCBuZXdXaW5kb3csIHRhYkZvbGQsIGRpc2FibGVDdXN0b20pID0+IHtcXG4gICAgICAgIGxldCB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJylcXG4gICAgICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykgJiYgIXVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpXFxuICAgICAgICAgICAgdXJsID0gJ2hpa2VyOi8vZmlsZXMvbGlicy8nICsgbWQ1KHVybCkgKyAnLmpzJ1xcbiAgICAgICAgZWxzZSBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkgdXJsID0gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICBpZiAoaW5wdXQgPT0gJ+Wkh+S7vScpIHJldHVybiAkKCdoaWtlcjovL2ZpbGVzL3RtcC8nICsgUUlOR19USVRMRSArICdfYmFja3VwLmpzb24nLCAn6L6T5YWl5aSH5Lu96Lev5b6EJylcXG4gICAgICAgICAgICAuaW5wdXQoKHVybCwgdXBkYXRlSW50ZXJ2YWwsIG5ld1dpbmRvdywgdGFiRm9sZCwgZGlzYWJsZUN1c3RvbSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSByZXF1ZXN0KHVybCksXFxuICAgICAgICAgICAgICAgICAgICBjdXN0b21EYXRhID0gcmVhZEZpbGUoJ2N1c3RvbURhdGEnKVxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoaW5wdXQsIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUludGVydmFsOiB1cGRhdGVJbnRlcnZhbCxcXG4gICAgICAgICAgICAgICAgICAgIG5ld1dpbmRvdzogbmV3V2luZG93LFxcbiAgICAgICAgICAgICAgICAgICAgdGFiRm9sZDogdGFiRm9sZCxcXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDdXN0b206IGRpc2FibGVDdXN0b20sXFxuICAgICAgICAgICAgICAgICAgICBjdXN0b21EYXRhOiBjdXN0b21EYXRhLFxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXM6IHJ1bGVzXFxuICAgICAgICAgICAgICAgIH0pKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5aSH5Lu977yM5rOo5oSP6Iul5LuT5bqT5Li65a2Q6aG16Z2i5YiZ5LiN5aSH5Lu9J1xcbiAgICAgICAgICAgIH0sIHVybCwgdXBkYXRlSW50ZXJ2YWwsIG5ld1dpbmRvdywgdGFiRm9sZCwgZGlzYWJsZUN1c3RvbSlcXG4gICAgICAgIGVsc2UgcmV0dXJuICQoJ2hpa2VyOi8vZmlsZXMvdG1wLycgKyBRSU5HX1RJVExFICsgJ19iYWNrdXAuanNvbicsICfovpPlhaXlpIfku73ot6/lvoQnKS5pbnB1dCgodXJsKSA9PiB7XFxuICAgICAgICAgICAgbGV0IHsgdXBkYXRlSW50ZXJ2YWwsIG5ld1dpbmRvdywgdGFiRm9sZCwgZGlzYWJsZUN1c3RvbSwgY3VzdG9tRGF0YSwgcnVsZXMgfSA9IEpTT04ucGFyc2UocmVxdWVzdChpbnB1dCkpXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3VwZGF0ZUludGVydmFsJywgdXBkYXRlSW50ZXJ2YWwpXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ25ld1dpbmRvdycsIG5ld1dpbmRvdylcXG4gICAgICAgICAgICBzYXZlRmlsZSgndGFiRm9sZCcsIHRhYkZvbGQpXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2Rpc2FibGVDdXN0b20nLCBkaXNhYmxlQ3VzdG9tKVxcbiAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgY3VzdG9tRGF0YSlcXG4gICAgICAgICAgICBpZiAocnVsZXMpIHdyaXRlRmlsZSh1cmwsIHJ1bGVzKVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oGi5aSN77yM5aaC5p6c5LiN5oOz5ZCM5q2l6L+c56iL5LuT5bqT77yM5Y+v5Lul6K6+572u5pu05paw6aKR546H5Li65omL5YqoJ1xcbiAgICAgICAgfSwgdXJsKVxcbiAgICB9LCBRSU5HX1RJVExFLCB1cGRhdGVJbnRlcnZhbCwgbmV3V2luZG93LCB0YWJGb2xkLCBkaXNhYmxlQ3VzdG9tKSxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbn0sIHtcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiIzY2NjY2NlxcXCI+PHNtYWxsPueJueWIq+m4o+iwou+8jOWwj+eoi+W6j+aPkOS+m+iAhe+8mvCfiJrvuI9cXFxcbidcXG4gICAgICAgIC8qZGF0YS5yZWR1Y2UoKHNlbGYsIHYpID0+IHYuYXV0aG9yID8gc2VsZi5jb25jYXQodi5hdXRob3Iuc3BsaXQoJyYnKSkgOiBzZWxmLCBbXSlcXG4gICAgICAgIC5maWx0ZXIoKHYsIGksIGFycikgPT4gdiAmJiBhcnIuaW5kZXhPZih2KSA9PSBpKS5qb2luKCfjgIEnKSovLFxcbiAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbn0pXFxuZWwucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5pu05pawJuWPjemmiFxcXCIsXFxuICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9VcCNub1JlZnJlc2gjI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1xcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICB2ZXJzaW9uOiBNWV9QQVJBTVMudmVyc2lvbiB8fCBcXFwi6I635Y+W54mI5pys5aSx6LSl77yM6Ieq6KGM5p+l55yLXFxcIlxcbiAgICB9LFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxufSk7XFxuZWwucHVzaCh7IGNvbF90eXBlOiAnbGluZScgfSwge1xcbiAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAn8J+TnScuc21hbGwoKSArICcmbmJzcCDogZrmvKvwn5Su6Ieq5a6a5LmJICZuYnNwJy5ib2xkKCkuZm9udGNvbG9yKCcjNzU3NTc1JykgKyAoZGlzYWJsZUN1c3RvbSA/ICfinYwnIDogJ+KtlScpLnNtYWxsKCksXFxuICAgIHVybDogJChbKGRpc2FibGVDdXN0b20gPyAn5ZCv55SoJyA6ICfnpoHnlKgnKSArICflkIjpm4boh6rlrprkuYknLCAn5riF6Zmk6Ieq5a6a5LmJ5pWw5o2uJywgJ+e8lui+kUpTT04nXSwgMSkuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgIHN3aXRjaCAoaW5wdXQuc2xpY2UoMCwgMikpIHtcXG4gICAgICAgICAgICBjYXNlICfmuIXpmaQnOlxcbiAgICAgICAgICAgICAgICBkZWxldGVGaWxlKCdjdXN0b21EYXRhJylcXG4gICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICBjYXNlICflkK/nlKgnOlxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnZGlzYWJsZUN1c3RvbScsICcnKVxcbiAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgIGNhc2UgJ+emgeeUqCc6XFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdkaXNhYmxlQ3VzdG9tJywgJ1QnKVxcbiAgICAgICAgICAgICAgICBpbnB1dCArPSAnXFxcXG7lsI/nqIvluo/lkK/nlKgv56aB55So44CB6YeN5paw5o6S5bqP562J5pON5L2c5Z2H5LiN5Lya5L2T546w5Zyo6aaW6aG15bCP56iL5bqP5YiX6KGo5LitJ1xcbiAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgIGNhc2UgJ+e8lui+kSc6XFxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJylcXG4gICAgICAgICAgICAgICAgaWYgKCF1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9maWxlcy8nKSAmJiAhdXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSlcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9ICdoaWtlcjovL2ZpbGVzL2xpYnMvJyArIG1kNSh1cmwpICsgJy5qcydcXG4gICAgICAgICAgICAgICAgcmV0dXJuICAnaGlrZXI6Ly9wYWdlL2ludGVyZmFjZSNub1JlZnJlc2gjI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9ydWxlPUpTT07nvJbovpHlmagmSnNvbj0nK2Jhc2U2NEVuY29kZSh1cmwpXFxuICAgICAgICB9XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7InICsgaW5wdXRcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSB9XFxufSk7LypcXG4oZGlzYWJsZUN1c3RvbSA/IFsn5a+85YWl5rW36ZiUJ10gOiBbJ+WQr+eUqC/npoHnlKgnLCAn6YeN5paw5o6S5bqPJywgJ+abtOaUueWbvuaghycsICflr7zlhaXmtbfpmJQnXSkuZm9yRWFjaCgodikgPT4ge1xcbiAgICBlbC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB2ID09IGVkaXRNb2RlID8gJ+KAnOKAnOKAneKAnScgKyB2LmJvbGQoKS5mb250Y29sb3IoJyMxMmI2NjgnKSA6IHYsXFxuICAgICAgICB1cmw6IHYgPT0gZWRpdE1vZGUgPyAnaGlrZXI6Ly9lbXB0eScgOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh2KSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ2VkaXRNb2RlJywgdilcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICB9LCB2KSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgfSlcXG59KTtcXG5pZiAoZWRpdE1vZGUgPT0gJ+WvvOWFpea1t+mYlCcpIGVsLnB1c2goe1xcbiAgICB0aXRsZTogJ+WFqOmDqOWvvOWFpScsXFxuICAgIHVybDogJ+a1t+mYlOinhueVjO+/pWhvbWVfcnVsZV91cmzvv6UnICsgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpIHx8IHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykgPyB1cmwgOiAnaGlrZXI6Ly9maWxlcy9saWJzLycgKyBtZDUodXJsKSArICcuanMnKSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlIH1cXG59KTtcXG4oZGlzYWJsZUN1c3RvbSA/IGRhdGEgOiBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJykpLmZvckVhY2goKHYsIGkpID0+IHtcXG4gICAgbGV0IGQgPSB7IHRpdGxlOiB2LnRpdGxlLCBpbWc6IGRhdGFbaV0uaWNvbiB9XFxuICAgIHN3aXRjaCAoZWRpdE1vZGUpIHtcXG4gICAgICAgIGNhc2UgJ+WQr+eUqC/npoHnlKgnOlxcbiAgICAgICAgICAgIGQudGl0bGUgPSAodi52aXNpYmxlID8gJ/Cfn6IgICcgOiAn8J+UtCAgJykgKyBkLnRpdGxlXFxuICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKVxcbiAgICAgICAgICAgICAgICBydWxlc1tpXS52aXNpYmxlID0gIXJ1bGVzW2ldLnZpc2libGVcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICBicmVha1xcbiAgICAgICAgY2FzZSAn6YeN5paw5o6S5bqPJzpcXG4gICAgICAgICAgICBsZXQgc29ydEZsYWcgPSBwYXJzZUludChnZXRNeVZhcignc29ydEZsYWcnLCAnLTEnKSlcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHNvcnRGbGFnID09IGkgPyAn8J+UgyAgJyA6ICcnKSArIGQudGl0bGVcXG4gICAgICAgICAgICBpZiAoc29ydEZsYWcgPT0gLTEpXFxuICAgICAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NvcnRGbGFnJywgaS50b1N0cmluZygpKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YCJ5oup6KaB56e75Yqo5Yiw55qE5L2N572uJ1xcbiAgICAgICAgICAgICAgICB9LCBpKVxcbiAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvbGRJbmRleCwgbmV3SW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKVxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXMuc3BsaWNlKG5ld0luZGV4LCAwLCBydWxlcy5zcGxpY2Uob2xkSW5kZXgsIDEpWzBdKVxcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignc29ydEZsYWcnLCAnLTEnKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIHNvcnRGbGFnLCBpKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICfmm7TmlLnlm77moIcnOlxcbiAgICAgICAgICAgIGQudXJsID0gJCh2Lmljb24gfHwgJycsICfovpPlhaXmlrDlm77moIflnLDlnYDmiJbpopzoibLku6PnoIHvvJonKS5pbnB1dCgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXNbaV0uaWNvbiA9IGlucHV0XFxuICAgICAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBydWxlc1tpXS5pY29uXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIGkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIGNhc2UgJ+WvvOWFpea1t+mYlCc6XFxuICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgZ2V0TXlWYXIoJ215Q29sbGVjdGlvbicpLCB0cnVlKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGFbaV0pKVxcbiAgICAgICAgICAgIH0sIGkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgfVxcbiAgICBlbC5wdXNoKGQpXFxufSkqL1xcbihkaXNhYmxlQ3VzdG9tID8gWyflr7zlhaXmtbfpmJQnXSA6IFsn5ZCv55SoL+emgeeUqCcsICfph43mlrDmjpLluo8nLCAn5pu05pS55Zu+5qCHJywgJ+WvvOWFpea1t+mYlCddKS5mb3JFYWNoKCh2KSA9PiB7XFxuICAgIGVsLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHYgPT0gZWRpdE1vZGUgPyAn4oCc4oCc4oCd4oCdJyArIHYuYm9sZCgpLmZvbnRjb2xvcignIzEyYjY2OCcpIDogdixcXG4gICAgICAgIHVybDogdiA9PSBlZGl0TW9kZSA/ICdoaWtlcjovL2VtcHR5JyA6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHYpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcignZWRpdE1vZGUnLCB2KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0sIHYpLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pO1xcbmlmKGVkaXRNb2RlID09PSAn5a+85YWl5rW36ZiUJykge1xcbiAgICBlbC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOifmkJzntKInLFxcbiAgICAgICAgZGVzYzon6L6T5YWl5bCP56iL5bqP5qCH6aKYfOWcsOWdgOi/m+ihjOaQnOe0oi4uLicsXFxuICAgICAgICB1cmw6JC50b1N0cmluZygoKT0+e1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6J2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRNeVZhcignaW1wb3J0U2VhcmNoS2V5JyxpbnB1dClcXFwiLFxcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6Z2V0TXlWYXIoJ2ltcG9ydFNlYXJjaEtleScsJycpXFxuICAgICAgICB9LFxcbiAgICB9KTtcXG4gICAgZWwucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+WFqOmDqOWvvOWFpSjpnZ7mkJzntKLov4fmu6TlkI7nu5PmnpwpJyxcXG4gICAgICAgIHVybDogJ+a1t+mYlOinhueVjO+/pWhvbWVfcnVsZV91cmzvv6UnICsgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpIHx8IHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykgPyB1cmwgOiAnaGlrZXI6Ly9maWxlcy9saWJzLycgKyBtZDUodXJsKSArICcuanMnKSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICBleHRyYToge2xpbmVWaXNpYmxlOiBmYWxzZX1cXG4gICAgfSk7XFxufVxcbnZhciBkYXRhcyA9IChkaXNhYmxlQ3VzdG9tID8gZGF0YSA6IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKSk7XFxubGV0IHNrID0gZ2V0TXlWYXIoJ2ltcG9ydFNlYXJjaEtleScsJycpO1xcbmlmKGVkaXRNb2RlID09PSAn5a+85YWl5rW36ZiUJyYmc2spIHtcXG4gICAgZGF0YXMgPSBkYXRhcy5maWx0ZXIoaXQ9Pml0LnRpdGxlLmluY2x1ZGVzKHNrKXx8KGl0LnVybCYmaXQudXJsLmluY2x1ZGVzKHNrKSkpO1xcbiAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXQ9Pml0LnRpdGxlLmluY2x1ZGVzKHNrKXx8KGl0LnVybCYmaXQudXJsLmluY2x1ZGVzKHNrKSkpO1xcbn1cXG5kYXRhcy5mb3JFYWNoKCh2LCBpKSA9PiB7XFxuICAgIGxldCBkID0geyB0aXRsZTogdi50aXRsZSwgaW1nOiBkYXRhW2ldLmljb24gfVxcbiAgICBzd2l0Y2ggKGVkaXRNb2RlKSB7XFxuICAgICAgICBjYXNlICflkK/nlKgv56aB55SoJzpcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHYudmlzaWJsZSA/ICfwn5+iICAnIDogJ/CflLQgICcpICsgZC50aXRsZVxcbiAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgcnVsZXNbaV0udmlzaWJsZSA9ICFydWxlc1tpXS52aXNpYmxlXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIGkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIGNhc2UgJ+mHjeaWsOaOkuW6jyc6XFxuICAgICAgICAgICAgbGV0IHNvcnRGbGFnID0gcGFyc2VJbnQoZ2V0TXlWYXIoJ3NvcnRGbGFnJywgJy0xJykpXFxuICAgICAgICAgICAgZC50aXRsZSA9IChzb3J0RmxhZyA9PSBpID8gJ/CflIMgICcgOiAnJykgKyBkLnRpdGxlXFxuICAgICAgICAgICAgaWYgKHNvcnRGbGFnID09IC0xKVxcbiAgICAgICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzb3J0RmxhZycsIGkudG9TdHJpbmcoKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mAieaLqeimgeenu+WKqOWIsOeahOS9jee9ridcXG4gICAgICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob2xkSW5kZXgsIG5ld0luZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZXMuc3BsaWNlKG9sZEluZGV4LCAxKVswXSlcXG4gICAgICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NvcnRGbGFnJywgJy0xJylcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBzb3J0RmxhZywgaSlcXG4gICAgICAgICAgICBicmVha1xcbiAgICAgICAgY2FzZSAn5pu05pS55Zu+5qCHJzpcXG4gICAgICAgICAgICBkLnVybCA9ICQodi5pY29uIHx8ICcnLCAn6L6T5YWl5paw5Zu+5qCH5Zyw5Z2A5oiW6aKc6Imy5Luj56CB77yaJykuaW5wdXQoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzW2ldLmljb24gPSBpbnB1dFxcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcnVsZXNbaV0uaWNvblxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCBpKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICflr7zlhaXmtbfpmJQnOlxcbiAgICAgICAgICAgIGQudXJsID0gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGFbaV0pKTtcXG4gICAgICAgICAgICBicmVha1xcbiAgICB9XFxuICAgIGVsLnB1c2goZClcXG59KVxcbnNldFJlc3VsdChlbClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumhtemdoui9veWFpVwiLFwicGF0aFwiOlwiZnJhbWVMb2FkXCIsXCJydWxlXCI6XCJqczpcXG5jb25zdCBRSU5HX1RJVExFID0gZ2V0TXlWYXIoJ215Q29sbGVjdGlvbicpXFxudmFyIG15Q29sbF9lbCA9IFtdXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvaGlqYWNrRW52P3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcblxcbmlmICghaXNJbmRleCkge1xcbiAgICBpZiAocGFnZVRpdGxlKSBzZXRQYWdlVGl0bGUocGFnZVRpdGxlKVxcbiAgICBzZXRMYXN0Q2hhcHRlclJ1bGUob3JpUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSlcXG4gICAgTVlfUEFSQU1TID0gTVlfUlVMRS5wYXJhbXNcXG59IGVsc2UgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICB0YWJIZWFkZXIubG9hZChteUNvbGxfZWwpXFxuICAgIGlmIChSVUxFLnNlYXJjaF91cmwpIG15Q29sbF9lbC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5pCc57SiXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLov5nmmK/ogZrmvKvwn5Su55qE5pCc57Si5ZOmfn5cXFwiLFxcbiAgICAgICAgdXJsOiAnXFxcImhpa2VyOi8vc2VhcmNoP3M9XFxcIitpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHJ1bGVzOiAkLnRvU3RyaW5nKChRSU5HX1RJVExFLCB0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFKVxcbiAgICAgICAgICAgICAgICBydWxlcyA9IFtydWxlcy5maW5kKCh2KSA9PiB2LnRpdGxlID09IHRpdGxlKV1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJ1bGVzKVxcbiAgICAgICAgICAgIH0sIFFJTkdfVElUTEUsIFJVTEUudGl0bGUpLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoJ3NlYXJjaEtleScsICcnKSxcXG4gICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dE15VmFyKCdzZWFyY2hLZXknLGlucHV0KVxcXCJcXG4gICAgICAgIH0sXFxuICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgfSlcXG59XFxuLy8g5q2j5paH6Kej5p6QXFxudmFyIHtcXG4gICAgcGFyYW1IYW5kbGUsXFxuICAgIHJ1blByZVJ1bGUsXFxuICAgIGdlbkV4VXJsLFxcbiAgICBoaWphY2tMYXp5UnVsZVxcbn0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9mdW5jVG9vbHM/cnVsZT0nICsgUUlOR19USVRMRSlcXG5ydW5QcmVSdWxlKG9yaVJVTEUucHJlUnVsZSlcXG5pZiAoTVlfUlVMRS5maW5kX3J1bGUuc3RhcnRzV2l0aCgnanM6JykpIHtcXG4gICAgbGV0IHsgaGlqYWNrRWwgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2Z1bmNUb29scz9ydWxlPScgKyBRSU5HX1RJVExFKVxcbiAgICBzZXRSZXN1bHQgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXG4gICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW0wLmRhdGEpKSBwYXJhbTAgPSBwYXJhbTAuZGF0YVxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsX2VsLCBwYXJhbTAubWFwKGhpamFja0VsKSlcXG4gICAgICAgIG1ldGhvZF9zZXRSZXN1bHQuaW52b2tlKGphdmFDb250ZXh0LCBteUNvbGxfZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpXFxuICAgIH1cXG4gICAgc2V0SG9tZVJlc3VsdCA9IHNldFJlc3VsdFxcbiAgICBzZXRTZWFyY2hSZXN1bHQgPSBzZXRSZXN1bHRcXG5cXG4gICAgZXZhbChNWV9SVUxFLmZpbmRfcnVsZS5zbGljZSgzKSlcXG59IGVsc2Uge1xcbiAgICBsZXQgeyBydW5Db2RlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9mdW5jVG9vbHM/cnVsZT0nICsgUUlOR19USVRMRSksXFxuICAgICAgICBbXywgZmluZFJ1bGUsIGRldGFpbEZpbmRSdWxlXSA9IE1ZX1JVTEUuZmluZF9ydWxlLm1hdGNoKC9eKFtcXFxcc1xcXFxTXSo/KSg/Oj09PihbXFxcXHNcXFxcU10qKSk/JC8pXFxuICAgIGZpbmRSdWxlID0gZmluZFJ1bGUuc3BsaXQoJzsnKVxcbiAgICBwYXJzZURvbUZvckFycmF5KGdldFJlc0NvZGUoKSwgZmluZFJ1bGUuc2hpZnQoKSkuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbiAgICAgICAgbGV0IFt0aXRsZSwgaW1nLCBkZXNjLCB1cmxdID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSAnKicpIHJldHVybiAnJ1xcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDMpID9cXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbShkYXRhLCB2KSA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb21Gb3JIdG1sKGRhdGEsIHYpXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAzKSB2ID0gcnVuQ29kZSh2KVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gJycgfVxcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIHJlcyA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLCB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYywgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgaWYgKHJlcy51cmwpIHtcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIGxldCByZUluZGV4ID0gcmVzLnVybC5pbmRleE9mKCcuanM6JylcXG4gICAgICAgICAgICAgICAgaWYgKHJlSW5kZXggPj0gMCkgcmVzLnVybCA9IHJlcy51cmwuc2xpY2UoMCwgcmVJbmRleCkgKyAnLmpzOicgKyBoaWphY2tMYXp5UnVsZSArICc7JyArIHJlcy51cmwuc2xpY2UocmVJbmRleCArIDQpXFxuICAgICAgICAgICAgfSBlbHNlICBpZiAoZGV0YWlsRmluZFJ1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0ge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBnZW5FeFVybCh1cmwpLFxcbiAgICAgICAgICAgICAgICAgICAgUlVMRTogYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KE9iamVjdC5hc3NpZ24oZ2VuTXlSdWxlKCksIHsgZGV0YWlsX2ZpbmRfcnVsZTogZGV0YWlsRmluZFJ1bGUgfSkpKSxcXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogaXNJbmRleCAmJiB0aXRsZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2ZyYW1lTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0ge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBnZW5FeFVybCh1cmwpLFxcbiAgICAgICAgICAgICAgICAgICAgUlVMRTogYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGdlbk15UnVsZSgpKSksXFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IGlzSW5kZXggJiYgdGl0bGVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9mcmFtZUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIG15Q29sbF9lbC5wdXNoKHJlcylcXG4gICAgfSlcXG4gICAgc2V0UmVzdWx0KG15Q29sbF9lbClcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmlbDmja7ovb3lhaVcIixcInBhdGhcIjpcImRhdGFMb2FkXCIsXCJydWxlXCI6XCJsZXQgc2hvd0FsbCA9ICQuaW1wb3J0UGFyYW0sXFxuICAgIHVybCA9IGdldE15VmFyKCdyZW1vdGVVcmwnKSxcXG4gICAgZGF0YSA9IFtdXFxuaWYgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpIHx8IHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcXG4gICAgLy8g5aaC5p6c5Li65pys5Zyw5paH5Lu25YiZ5LiN6L+b6KGM57yT5a2YXFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgb3JpRGF0YSA9IGZldGNoKHVybClcXG4gICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKVxcbiAgICAgICAgICAgIG9yaURhdGEgPSBKU09OLnBhcnNlKG9yaURhdGEpLnJ1bGVcXG4gICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKG9yaURhdGEpXFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxufSBlbHNlIHtcXG4gICAgLy8g6I635Y+W6L+c56iL5pWw5o2u77yM5qOA5p+l6Ze06ZqU6buY6K6k5LiA5aSpXFxuICAgIGxldCBpbnRlcnZhbCA9IHBhcnNlSW50KHJlYWRGaWxlKCd1cGRhdGVJbnRlcnZhbCcpIHx8ICcxJyksXFxuICAgICAgICBvbGREYXRhID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvbGlicy8nICsgbWQ1KHVybCkgKyAnLmpzJyksXFxuICAgICAgICByZW1vdGVEYXRhID0gW11cXG4gICAgaWYgKGludGVydmFsID09IDApIGludGVydmFsID0gLTFcXG4gICAgdHJ5IHsgcmVtb3RlRGF0YSA9IEpTT04ucGFyc2UoZmV0Y2hDYWNoZSh1cmwsIDI0ICogaW50ZXJ2YWwsIHsgdGltZW91dDogNTAwMDAgfSkpIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGlmICghQXJyYXkuaXNBcnJheShyZW1vdGVEYXRhKSkgcmVtb3RlRGF0YSA9IFtdXFxuICAgIGlmIChyZW1vdGVEYXRhLmxlbmd0aCA8IDMpIHtcXG4gICAgICAgIGxvZygn5pyq6I635Y+W5Yiw5pWw5o2uJylcXG4gICAgICAgIGlmIChvbGREYXRhKSB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvbGlicy8nICsgbWQ1KHVybCkgKyAnLmpzJywgb2xkRGF0YSlcXG4gICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKG9sZERhdGEgfHwgJ1tdJylcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGxvZygn5bey6I635Y+W5Yiw5pWw5o2uJylcXG4gICAgICAgIGRhdGEgPSByZW1vdGVEYXRhXFxuICAgIH1cXG59XFxuZGF0YSA9IGRhdGEuZmlsdGVyKCh2KSA9PiB2LnRpdGxlICE9IGdldE15VmFyKCdteUNvbGxlY3Rpb24nKSAmJiAhKHYuYXV0aG9yIHx8ICcnKS5pbmNsdWRlcygn6IGa5ryr8J+UrueUn+aIkOWZqCcpKVxcbmlmIChyZWFkRmlsZSgnZGlzYWJsZUN1c3RvbScpKSAkLmV4cG9ydHMgPSBkYXRhXFxuZWxzZSB7IC8vIOWGmeWFpeiHquWumuS5ieaVsOaNrlxcbiAgICBsZXQgY3VzdG9tRGF0YSA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKSxcXG4gICAgICAgIHJld3JpdGVEYXRhID0gW11cXG4gICAgY3VzdG9tRGF0YSA9IGN1c3RvbURhdGEucmVkdWNlKChzZWxmLCB2KSA9PiB7XFxuICAgICAgICBsZXQgaW5kZXggPSBkYXRhLmZpbmRJbmRleCgodnYpID0+IHYudGl0bGUgPT0gdnYudGl0bGUpXFxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xcbiAgICAgICAgICAgIHNlbGYucHVzaCh2KVxcbiAgICAgICAgICAgIGxldCBydWxlID0gZGF0YS5zcGxpY2UoaW5kZXgsIDEpWzBdXFxuICAgICAgICAgICAgaWYgKHNob3dBbGwgfHwgdi52aXNpYmxlKVxcbiAgICAgICAgICAgICAgICByZXdyaXRlRGF0YS5wdXNoKE9iamVjdC5hc3NpZ24ocnVsZSwgdikpXFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gc2VsZlxcbiAgICB9LCBbXSlcXG4gICAgZGF0YS5mb3JFYWNoKCh2KSA9PiBjdXN0b21EYXRhLnB1c2goeyB0aXRsZTogdi50aXRsZSwgdmlzaWJsZTogdHJ1ZSB9KSlcXG4gICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShjdXN0b21EYXRhKSlcXG4gICAgJC5leHBvcnRzID0gcmV3cml0ZURhdGEuY29uY2F0KGRhdGEpXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6ZO+5o6l5aSE55CGKlwiLFwicGF0aFwiOlwidXJsUGFyc2VcIixcInJ1bGVcIjpcIi8vIOmmlumhtemTvuaOpeabv+aNouWIhuexu1xcbmZ1bmN0aW9uIGluZGV4VXJsKHBhcmFtKSB7XFxuICAgIGZ1bmN0aW9uIHJ1bkNvZGUocnVsZSkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgW2lucHV0LCBjb2RlXSA9IHJ1bGUuc3BsaXQoJy5qczonKVxcbiAgICAgICAgICAgIHJldHVybiBjb2RlID8gZXZhbChjb2RlKSA6IHJ1bGVcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIHJ1bGUgfVxcbiAgICB9XFxuICAgIGxldCB7IFJVTEUsIHBhZ2VOdW0sIFFJTkdfVElUTEUgfSA9IEpTT04ucGFyc2UocGFyYW0uc3BsaXQoJyMjIycpWzFdKVxcbiAgICBSVUxFID0gSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoUlVMRSkpXFxuICAgIHBhZ2VOdW0gPSBwYXJzZUludChwYWdlTnVtKVxcbiAgICBsZXQgdXJsID0gUlVMRS51cmxcXG5cXG4gICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvQ2xhc3NUYWI/cnVsZT0nICsgUUlOR19USVRMRSkpLnJ1bGUpXFxuICAgIHVybCA9IHRhYkhlYWRlci5zZXRVcmwoZnlBbGwgPyB1cmwucmVwbGFjZSgvZnlBbGwvZywgJyQke2Z5QWxsfScpIDogdXJsLnJlcGxhY2UoL2Z5KGNsYXNzfGFyZWF8eWVhcnxzb3J0KS9nLCAnJCR7ZnkkMX0nKSlcXG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL2Z5cGFnZSg/OkAoLT9cXFxcZCspQCk/KD86XFxcXCooXFxcXGQrKUApPy9nLCAoXywgc3RhcnQsIHNwYWNlKSA9PiBwYXJzZUludChzdGFydCB8fCAwKSArIDEgKyAocGFnZU51bSAtIDEpICogcGFyc2VJbnQoc3BhY2UgfHwgMSkpXFxuICAgIHVybCA9IC9eKFtcXFxcc1xcXFxTXSo/KSg/OlxcXFxbZmlyc3RQYWdlPShbXFxcXHNcXFxcU10qPylcXFxcXSk/KD86KFxcXFwuanM6W1xcXFxzXFxcXFNdKj8pKT8kLy5leGVjKHVybClcXG4gICAgaWYgKHBhZ2VOdW0gPT0gMSAmJiB1cmxbMl0pIHVybFsxXSA9IHVybFsyXVxcbiAgICBpZiAodXJsWzNdICYmICF1cmxbMV0uaW5jbHVkZXMoJy5qczonKSkgdXJsWzFdICs9IHVybFszXVxcbiAgICByZXR1cm4gcnVuQ29kZSh1cmxbMV0pXFxufVxcbmZ1bmN0aW9uIHBhcmFtSGFuZGxlKHVybFBhcmFtLCB1YSwgdXJsVG1wKSB7XFxuICAgIGxldCBjaGFyc2V0LCBwYXJhbVRtcFxcbiAgICB0cnkgeyAvLyDpk77mjqXnmoTnvJbnoIHjgIFVQeWSjFJlZmVyZXLlupTor6XmmK/pppblhYjnu6fmib/pppbpobXpk77mjqVcXG4gICAgICAgIFssICwgY2hhcnNldCwgcGFyYW1UbXBdID0gdXJsVG1wLnNwbGl0KCc7JylcXG4gICAgICAgIHBhcmFtVG1wID0gcGFyYW1UbXAubWF0Y2goL157KC4qKX0kLylbMV0uc3BsaXQoJyYmJylcXG4gICAgfSBjYXRjaCAoZSkgeyBwYXJhbVRtcCA9IFtdIH1cXG4gICAgbGV0IFVzZXJBZ2VudCA9IHBhcmFtVG1wLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgnVXNlci1BZ2VudEAnKSksXFxuICAgICAgICBSZWZlcmVyID0gcGFyYW1UbXAuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCdSZWZlcmVyQCcpKVxcbiAgICB1cmxQYXJhbVswXSA9IHVybFBhcmFtWzBdIHx8ICdHRVQnXFxuICAgIHVybFBhcmFtWzFdID0gdXJsUGFyYW1bMV0gfHwgY2hhcnNldCB8fCAnVVRGLTgnXFxuICAgIHRyeSB7XFxuICAgICAgICB1cmxQYXJhbVsyXSA9IHVybFBhcmFtWzJdLm1hdGNoKC9eeyguKil9JC8pWzFdLnNwbGl0KCcmJicpXFxuICAgIH0gY2F0Y2ggKGUpIHsgdXJsUGFyYW1bMl0gPSBbXSB9XFxuICAgIC8vIOa3u+WKoOWFqOWxgFVB5ZKM5LiK57qnUmVmZXJlclxcbiAgICBpZiAoIXVybFBhcmFtWzJdLnNvbWUoKHYpID0+IHYuc3RhcnRzV2l0aCgnVXNlci1BZ2VudEAnKSkpIHtcXG4gICAgICAgIGlmIChVc2VyQWdlbnQpIHVybFBhcmFtWzJdLnB1c2goVXNlckFnZW50KVxcbiAgICAgICAgZWxzZSBpZiAodWEgPT0gJ3BjJylcXG4gICAgICAgICAgICB1cmxQYXJhbVsyXS5wdXNoKCdVc2VyLUFnZW50QCcgKyBQQ19VQS5yZXBsYWNlKC87L2csICfvvJvvvJsnKS5yZXBsYWNlKC9cXFxcPy8sICfvvJ/vvJ8nKSlcXG4gICAgICAgIGVsc2UgaWYgKHVhID09ICdtb2JpbGUnKVxcbiAgICAgICAgICAgIHVybFBhcmFtWzJdLnB1c2goJ1VzZXItQWdlbnRAJyArIE1PQklMRV9VQS5yZXBsYWNlKC87L2csICfvvJvvvJsnKS5yZXBsYWNlKC9cXFxcPy8sICfvvJ/vvJ8nKSlcXG4gICAgfVxcbiAgICBpZiAoUmVmZXJlciAmJiAhdXJsUGFyYW1bMl0uc29tZSgodikgPT4gdi5zdGFydHNXaXRoKCdSZWZlcmVyQCcpKSlcXG4gICAgICAgIHVybFBhcmFtWzJdLnB1c2goUmVmZXJlcilcXG4gICAgdXJsUGFyYW1bMl0gPSAneycgKyB1cmxQYXJhbVsyXS5qb2luKCcmJicpICsgJ30nXFxuICAgIHJldHVybiB1cmxQYXJhbS5qb2luKCc7JylcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqdb5LiAXSpcIixcInBhdGhcIjpcImVqdG9vbFwiLFwicnVsZVwiOlwiZnVuY3Rpb24gY292ZXIo5qCH6aKYLCDkvZzogIUsIOWIhuexuywg54q25oCBLCDnq6DoioIsIOabtOaWsCwg566A5LuLLOWwgemdouWbvueJhyx0cnVlX3VybCwgaGFzTGluZSkge1xcclxcbnZhciDmoIfpopgsIOS9nOiAhSwg5YiG57G7LCDnirbmgIEsIOeroOiKgiwg5pu05pawLCDnroDku4ss5bCB6Z2i5Zu+54mHLHRydWVfdXJsLCBoYXNMaW5lO1xcclxcblxcdHRyeSB7XFxyXFxuXFx0XFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHRcXHR0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48Zm9udCBjb2xvcj1cXFwiI0ZBNzI5OFxcXCI+JyvkvZzogIUuc2xpY2UoMCwxNSkrXFxcIiZuYnNwO1xcXCIr54q25oCBKyc8L2ZvbnQ+PC9zbWFsbD4nKyfigJjigJjigJnigJk8c21hbGw+PGZvbnQgY29sb3I9XFxcIiNCMTVCRkZcXFwiPicrXFxcIlxcXFxuXFxcIivliIbnsbsrJzwvZm9udD48L3NtYWxsPicrJ+KAmOKAmOKAmeKAmTxzbWFsbD48Zm9udCBjb2xvcj1cXFwiI0ZGMzU5QVxcXCI+JytcXFwiXFxcXG5cXFwiK+eroOiKgitcXFwiJm5ic3A7XFxcIivmm7TmlrArJzwvZm9udD48L3NtYWxsPicsXFxyXFxuXFx0XFx0XFx0ZGVzYzon4oCY4oCY4oCZ4oCZPHNtYWxsPicgK+eugOS7iysgJzwvc21hbGw+JyxcXHJcXG5cXHRcXHRcXHRwaWNfdXJsOiAg5bCB6Z2i5Zu+54mHLFxcclxcblxcdFxcdFxcdHVybDogdHJ1ZV91cmwsXFxyXFxuXFx0XFx0XFx0Y29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcclxcblxcdFxcdH0pO1xcblxcdFxcdGQucHVzaCh7XFxyXFxuXFx0XFx0XFx0Y29sX3R5cGU6ICdsaW5lX2JsYW5rJyxcXHJcXG5cXHRcXHR9KTtcXG5cXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdGNvbF90eXBlOiAnbGluZScsXFxyXFxuXFx0XFx0fSk7XFxyXFxuXFx0XFx0aWYgKGhhc0xpbmUpIHtcXHJcXG5cXHRcXHRcXHRpdGVtLmV4dHJhID0ge1xcclxcblxcdFxcdFxcdFxcdGxpbmVWaXNpYmxlOiBmYWxzZVxcclxcblxcdFxcdFxcdH1cXHJcXG5cXHRcXHR9XFxyXFxuXFx0XFx0ZC5wdXNoKGl0ZW0pO1xcclxcblxcdH0gY2F0Y2ggKGUpIHt9XFxyXFxufVxcclxcbmZ1bmN0aW9uIGNoYXB0ZXIodGl0bGUscGljX3VybCxjaGFwdGVyTGlzdCwgY2hhcHRlclRpdGxlLCBjaGFwdGVyVXJsLCBkZWZhdWx0T3JkZXIsIGhhc0xpbmUsZG93bmxvYWRsYXp5KSB7XFxyXFxuXFx0dmFyIGxpc3QgPSBjaGFwdGVyTGlzdDtcXHJcXG5cXHR2YXIgb3JpZ2luYWwgPSBbe1xcclxcblxcdFxcdHVybDogTVlfVVJMLFxcclxcblxcdFxcdG9yZGVyOiBkZWZhdWx0T3JkZXJcXHJcXG5cXHR9XTtcXHJcXG5cXHQhZmlsZUV4aXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL2NvbWljL2NvbWljTG9nRmlsZS5qcycpID8gKHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnLCBKU09OLnN0cmluZ2lmeShvcmlnaW5hbCkpKSA6IDA7XFxyXFxuXFx0dmFyIGxvZyA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY29taWMvY29taWNMb2dGaWxlLmpzJykpO1xcclxcblxcdGZvciAodmFyIGkgaW4gbG9nKSB7XFxyXFxuXFx0XFx0aWYgKGxvZ1tpXS51cmwgPT0gTVlfVVJMKSB7XFxyXFxuXFx0XFx0XFx0dmFyIG5vdyA9IGk7XFxyXFxuXFx0XFx0XFx0dmFyIG9yZGVyID0gbG9nW2ldLm9yZGVyO1xcclxcblxcdFxcdFxcdGJyZWFrO1xcclxcblxcdFxcdH0gZWxzZSB7XFxyXFxuXFx0XFx0XFx0dmFyIG5vdyA9ICcnO1xcclxcblxcdFxcdFxcdHZhciBvcmRlciA9IGRlZmF1bHRPcmRlcjtcXHJcXG5cXHRcXHR9XFxyXFxuXFx0fVxcclxcblxcdGxldCBvcmRlckl0ZW0gPSB7XFxyXFxuXFx0XFx0dGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgJzxzdHJvbmc+PGZvbnQgY29sb3I9XFxcIiMwOThBQzFcXFwiPicgKyAn56ug6IqC5o6S5bqP4oeFJyArICc8L2ZvbnQ+PC9zdHJvbmc+JyxcXHJcXG5cXHRcXHR1cmw6IE1ZX1VSTCArIGBAbGF6eVJ1bGU9LmpzOnZhciBsb2cgPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2NvbWljL2NvbWljTG9nRmlsZS5qcycpKTt2YXIgbm93PSdgICsgbm93ICsgYCc7aWYobm93IT0nJyl7dmFyIG5vdz1wYXJzZUludChub3cpO3ZhciBvcmRlcj1sb2dbbm93XS5vcmRlcn1lbHNle3ZhciBub3c9cGFyc2VJbnQobG9nLmxlbmd0aCk7dmFyIG9yZGVyPWAgKyBkZWZhdWx0T3JkZXIgKyBgO2xvZy5wdXNoKHt1cmw6aW5wdXQsb3JkZXI6b3JkZXJ9KTt9aWYobG9nW25vd10ub3JkZXIpe2xvZ1tub3ddLm9yZGVyPTA7fWVsc2V7bG9nW25vd10ub3JkZXI9MTt9O3dyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnLCBKU09OLnN0cmluZ2lmeShsb2cpKTtyZWZyZXNoUGFnZSgpOydoaWtlcjovL2VtcHR5J2AsXFxyXFxuXFx0XFx0Y29sX3R5cGU6ICd0ZXh0XzInXFxyXFxuXFx0fVxcclxcblxcdGlmIChoYXNMaW5lKSB7XFxyXFxuXFx0XFx0b3JkZXJJdGVtLnRpdGxlID0gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyAnPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiIzA5OEFDMVxcXCI+JyArICfpm4bmlbDmjpLluo/ih4UnICsgJzwvZm9udD48L3N0cm9uZz4nO1xcclxcblxcdFxcdG9yZGVySXRlbS5jb2xfdHlwZSA9IFxcXCJ0ZXh0XzJcXFwiXFxyXFxuXFx0fVxcclxcblxcdGxldCBjaGFwdGVyTGlzdHMgPSBsaXN0Lm1hcCgoaXRlbSk9Pih7XFxyXFxuXFx0XFx0dGl0bGU6IHBkZmgoaXRlbSxcXFwiYSYmVGV4dFxcXCIpLFxcclxcblxcdFxcdHVybDogcGQoaXRlbSxcXFwiYSYmaHJlZlxcXCIpLFxcclxcblxcdH0pKTtcXHJcXG5kLnB1c2goe1xcclxcblxcdHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj0gXFxcIiMwOThBQzFcXFwiPicgKyBcXFwi5LiL6L295ryr55S7XFxcIiArICc8L2Zyb250Pjwvc3Ryb25nPicsXFxyXFxuXFx0dXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2Rvd25sb2FkLnZpZXcjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjI25vUmVmcmVzaCM/cnVsZT3mnKzlnLDotYTmupDnrqHnkIZcXFwiLFxcclxcblxcdGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXHJcXG5cXHRleHRyYToge1xcclxcblxcdFxcdGNoYXB0ZXJMaXN0OiBjaGFwdGVyTGlzdHMsXFxyXFxuXFx0XFx0aW5mbzp7XFxyXFxuXFx0XFx0XFx0Ym9va05hbWU6IHRpdGxlLFxcclxcblxcdFxcdFxcdHJ1bGVOYW1lOiBNWV9SVUxFLnRpdGxlLFxcclxcblxcdFxcdFxcdGJvb2tUb3BQaWM6IHBpY191cmwsXFxyXFxuXFx0XFx0XFx0cGFyc2VDb2RlOiBkb3dubG9hZGxhenlcXHJcXG5cXHRcXHR9LFxcclxcblxcdFxcdGRlZmF1bHRWaWV3OlxcXCIxXFxcIlxcclxcblxcdH1cXHJcXG59KTtcXHJcXG5cXHRkLnB1c2goe1xcclxcblxcdFxcdHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj0gXFxcIiMwOThBQzFcXFwiPicgKyBcXFwi5pys5Zyw5Lmm5p62XFxcIiArICc8L2Zyb250Pjwvc3Ryb25nPicsXFxyXFxuXFx0XFx0dXJsOiBcXFwiaGlrZXI6Ly9wYWdlL01haW4udmlldz9ydWxlPeacrOWcsOi1hOa6kOeuoeeQhlxcXCIsXFxyXFxuXFx0XFx0Y29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcclxcblxcdH0pOyAgXFxyXFxuXFx0ZC5wdXNoKG9yZGVySXRlbSk7XFxyXFxuXFx0ZC5wdXNoKHtjb2xfdHlwZTogJ2xpbmUnfSk7XFx0XFxyXFxuXFx0dmFyIGxpc3QgPSBvcmRlciA/IGxpc3QgOiBsaXN0LnJldmVyc2UoKTtcXG5cXHRpZighbGlzdHx8bGlzdD09XFxcIlxcXCIpe1xcclxcblxcdFxcdGQucHVzaCh7XFxyXFxuXFx0XFx0XFx0dGl0bGU6ICfmraTmvKvnlLvlt7LkuIvmnrYhIScsXFxyXFxuXFx0XFx0XFx0Y29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXHJcXG5cXHRcXHR9KTtcXHJcXG5cXHR9XFxyXFxuXFx0Zm9yICh2YXIgaSBpbiBsaXN0KSB7XFxyXFxuXFx0XFx0dHJ5IHtcXHJcXG5cXHRcXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdFxcdHRpdGxlOiBwZGZoKGxpc3RbaV0sIGNoYXB0ZXJUaXRsZSksXFxyXFxuXFx0XFx0XFx0XFx0dXJsOiBwZChsaXN0W2ldLCBjaGFwdGVyVXJsKSArIGxhenksXFxyXFxuXFx0XFx0XFx0XFx0Y29sX3R5cGU6ICd0ZXh0XzInLFxcclxcblxcdFxcdFxcdH0pO1xcclxcblxcdFxcdH1jYXRjaCAoZSkge31cXHJcXG5cXHR9XFxyXFxufVxcclxcblxcclxcbmZ1bmN0aW9uIGxpbmUobGluZUxpc3QsIGxpbmVUaXRsZVJ1bGUsIHZhcktleSkge1xcclxcblxcdGxldCBsaXN0ID0gbGluZUxpc3RcXHJcXG5cXHR2YXJLZXkgPSB2YXJLZXkgPT0gbnVsbCA/IChNWV9SVUxFLnVybCArICcjbGluZS1pbmRleCcpOiB2YXJLZXk7XFxyXFxuXFx0YWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKChrZXlMaXN0KSA9PiB7XFxyXFxuXFx0XFx0Zm9yIChsZXQgaSBpbiBrZXlMaXN0KSB7Y2xlYXJWYXIoa2V5TGlzdFtpXSl9XFxyXFxuXFx0fSwgW3ZhcktleSwgTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZSddKSlcXHJcXG5cXHRsZXQgbGluZTBUaXRsZSA9ICcnO1xcclxcblxcdHRyeSB7XFxyXFxuXFx0XFx0bGluZTBUaXRsZSA9IHBkZmgobGlzdFswXSwgbGluZVRpdGxlUnVsZSkucmVwbGFjZShcXFwi56ug6IqC5YiX6KGo77yaXFxcIixcXFwiXFxcIik7XFxyXFxuXFx0fSBjYXRjaCAoZSkge31cXHJcXG5cXHRsb2coTVlfUlVMRS50aXRsZSArIGdldE15VmFyKChNWV9SVUxFLnRpdGxlICsgJyNsaW5lLXRpdGxlJykpKVxcclxcblxcdGZvciAobGV0IGkgaW4gbGlzdCkge1xcclxcblxcdFxcdHRyeSB7XFxyXFxuXFx0XFx0XFx0bGV0IGxpbmVUaXRsZSA9IHBkZmgobGlzdFtpXSwgbGluZVRpdGxlUnVsZSkucmVwbGFjZShcXFwi56ug6IqC5YiX6KGo77yaXFxcIixcXFwiXFxcIik7XFxyXFxuXFx0XFx0XFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHRcXHRcXHR0aXRsZTogZ2V0TXlWYXIoKE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnKSwgbGluZTBUaXRsZSkgPT09IGxpbmVUaXRsZSA/IFxcXCLliIfmjaI64oCY4oCYXFxcIiArIGxpbmVUaXRsZStcXFwiXFxcIjpsaW5lVGl0bGUrXFxcIuKAmOKAmDrliIfmjaJcXFwiLFxcclxcblxcdFxcdFxcdFxcdHVybDogJCgpLmxhenlSdWxlKCh2YXJLZXksIGxpbmVJbmRleCwgbGluZVRpdGxlKSA9PiB7XFxyXFxuXFx0XFx0XFx0XFx0XFx0cHV0TXlWYXIodmFyS2V5LCBsaW5lSW5kZXgudG9TdHJpbmcoKSk7XFxyXFxuXFx0XFx0XFx0XFx0XFx0cHV0TXlWYXIoKE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnKSwgbGluZVRpdGxlKTtcXHJcXG5cXHRcXHRcXHRcXHRcXHRsb2coTVlfUlVMRS50aXRsZSArIGdldE15VmFyKChNWV9SVUxFLnRpdGxlICsgJyNsaW5lLXRpdGxlJykpKTtcXHJcXG5cXHRcXHRcXHRcXHRcXHRyZWZyZXNoUGFnZSgpO1xcclxcblxcdFxcdFxcdFxcdFxcdHJldHVybiBcXFwidG9hc3Q6Ly/lt7LliIfmjaLoh7NcXFwiICsgbGluZVRpdGxlO1xcclxcblxcdFxcdFxcdFxcdH0sIHZhcktleSwgaSwgbGluZVRpdGxlKSxcXHJcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ3RleHRfMicsXFxyXFxuXFx0XFx0XFx0fSk7XFxyXFxuXFx0XFx0fSBjYXRjaCAoZSkge31cXHJcXG5cXHR9XFxyXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqM57qnW+S6jF0qXCIsXCJwYXRoXCI6XCJjb21pY0Z1bmN0aW9uRmlsZS5qc1wiLFwicnVsZVwiOlwiZnVuY3Rpb24gY292ZXIoY292ZXJUaXRsZSwgY292ZXJUaXRsZTEsIGNvdmVyVGl0bGUyLCBjb3ZlclRpdGxlMywgY292ZXJEZXNjLCBjb3ZlclBpYywgY292ZXJVcmwsIGhhc0xpbmUpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGNvbnN0IENvbG9yID0gXFxcIiMxOUI4OURcXFwiO1xcbiAgICAgICAgdmFyIGRlc19kZXNjID0gcGRmaChodG1sLCBjb3ZlckRlc2MpLnJlcGxhY2UoJ+eugOOAgOOAgOS7i++8micsICcnKS5yZXBsYWNlKCfmvKvnlLvnroDku4vvvJonLCAnJyk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPD48Zm9udCBjb2xvcj1cXFwiI0ZBNzI5OFxcXCI+JyArIHBkZmgoaHRtbCwgY292ZXJUaXRsZSkgKyAnXFxcXG4nICsgJ+KAmOKAmOKAmeKAmTw+PGZvbnQgY29sb3I9XFxcIiM3MzQzMzhcXFwiPicgKyBwZGZoKGh0bWwsIGNvdmVyVGl0bGUxKSArICdcXFxcbicsXFxuICAgICAgICAgICAgZGVzYzogJ+KAmOKAmOKAmeKAmTw+PGZvbnQgY29sb3I9XFxcIiM5NTRBNDVcXFwiPicgKyBwZGZoKGh0bWwsIGNvdmVyVGl0bGUyKSArICdcXFxcbicgKyAn4oCY4oCY4oCZ4oCZPD48Zm9udCBjb2xvcj1cXFwiIzk1NEE0NVxcXCI+JyArIHBkZmgoaHRtbCwgY292ZXJUaXRsZTMpLFxcbiAgICAgICAgICAgIHBpY191cmw6IHBkKGh0bWwsIGNvdmVyUGljKXx8Y292ZXJQaWMsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9zZWFyY2g/cz0nK01ZX1BBUkFNUy55dGl0bGUrJyZydWxlPeiBmua8q/CflK4nLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cidcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vdmFyIGpqID0gZ2V0TXlWYXIoXFxcImpqc1xcXCIsIFxcXCLmlLbotbdcXFwiKTtcXG4gICAgICAgIC8vdmFyIGpqdXJsID0gJ2hpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOmdldE15VmFyKFxcXCJqanNcXFwiKSA9PSBcXFwi5pS26LW3XFxcIj9wdXRNeVZhcihcXFwiampzXFxcIixcXFwi5bGV5byAXFxcIik6cHV0TXlWYXIoXFxcImpqc1xcXCIsXFxcIuaUtui1t1xcXCIpO1xcXCJoaWtlcjovL2VtcHR5XFxcIic7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn566A5LuLIDxzbWFsbD48c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiMxOUI4OURcXFwiPuWxleW8gD48L3NwYW4+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgaW1nOiBcXFwiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vcmUvMTk3LnBuZ1xcXCIsXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChqamlkLCBkZWNpZCwgZGVzX2Rlc2MpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKFxcXCJqanNcXFwiLCBcXFwi5pS26LW3XFxcIikgPT0gXFxcIuaUtui1t1xcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJqanNcXFwiLCBcXFwi5bGV5byAXFxcIik7XFxuXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogamppZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfnroDku4sgPHNtYWxsPjxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzE5Qjg5RFxcXCI+5pS26LW3Pjwvc3Bhbj48L3NtYWxsPjwvc21hbGw+J1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG5cXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTaXplOiAxNCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVNwYWNpbmc6IDMsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkZWNpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzgwODA4MFxcXCI+JyArIGRlc19kZXNjICsgJy4uLjwvc3Bhbj4nXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImpqc1xcXCIsIFxcXCLmlLbotbdcXFwiKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBqamlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+eugOS7iyA8c21hbGw+PHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMTlCODlEXFxcIj7lsZXlvIA+PC9zcGFuPjwvc21hbGw+PC9zbWFsbD4nXFxuICAgICAgICAgICAgICAgICAgICB9KVxcblxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFNpemU6IDE0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3BhY2luZzogMyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRlY2lkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojODA4MDgwXFxcIj4nICsgZGVzX2Rlc2Muc3Vic3RyKDAsIDMwKSArICcuLi48L3NwYW4+J1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIH0sIE1ZX1JVTEUgKyBcXFwiX2pqaWRcXFwiLCBNWV9SVUxFICsgXFxcIl9kZWNpZFxcXCIsIGRlc19kZXNjKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IE1ZX1JVTEUgKyBcXFwiX2pqaWRcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiM4MDgwODBcXFwiPicgKyBkZXNfZGVzYy5zdWJzdHIoMCwgMzApICsgJy4uLjwvc3Bhbj4nLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogMTQsXFxuICAgICAgICAgICAgICAgIGxpbmVTcGFjaW5nOiAzLFxcbiAgICAgICAgICAgICAgICBpZDogTVlfUlVMRSArIFxcXCJfZGVjaWRcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgIH0pXFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxufVxcblxcbmZ1bmN0aW9uIGRvd24oVGl0bGUsIGNoYXB0ZXJQaWMsIGxpc3QsIGNoYXB0ZXJUaXRsZSwgY2hhcHRlckxpbmUsIGRvd25sb2FkbGF6eSkge1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IGRvTGlzdCA9IGxpc3QubWFwKChpdGVtKSA9PiAoe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIGNoYXB0ZXJUaXRsZSksXFxuICAgICAgICAgICAgdXJsOiBwZChpdGVtLCBjaGFwdGVyTGluZSksXFxuICAgICAgICB9KSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjMWFhZDE5XFxcIj7kuIvovb3mvKvnlLvwn5S5PC9zcGFuPjwvYj4nLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9kb3dubG9hZC52aWV3I25vUmVjb3JkSGlzdG9yeSMjbm9SZWZyZXNoIz9ydWxlPeacrOWcsOi1hOa6kOeuoeeQhlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBjaGFwdGVyTGlzdDogZG9MaXN0LFxcbiAgICAgICAgICAgICAgICBpbmZvOiB7XFxuICAgICAgICAgICAgICAgICAgICBib29rTmFtZTogcGRmaChodG1sLCBUaXRsZSksXFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZTogTVlfUlVMRS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGJvb2tUb3BQaWM6IHBkKGh0bWwsIGNoYXB0ZXJQaWMpLFxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlOiBkb3dubG9hZGxhenlcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZpZXc6IFxcXCIxXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICB9KTtcXG4gICAgfSBjYXRjaCAoZSkge31cXG59XFxuXFxuZnVuY3Rpb24gY2hhcHRlcihjaGFwdGVyTGlzdCwgY2hhcHRlclRpdGxlLCBjaGFwdGVyVXJsLCBkZWZhdWx0T3JkZXIsIGhhc0xpbmUpIHtcXG4gICAgdmFyIGxpc3QgPSBjaGFwdGVyTGlzdDtcXG4gICAgdmFyIG9yaWdpbmFsID0gW3tcXG4gICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgb3JkZXI6IGRlZmF1bHRPcmRlclxcbiAgICB9XTtcXG4gICAgIWZpbGVFeGlzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnKSA/ICh3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY29taWMvY29taWNMb2dGaWxlLmpzJywgSlNPTi5zdHJpbmdpZnkob3JpZ2luYWwpKSkgOiAwO1xcbiAgICB2YXIgbG9nID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnKSk7XFxuICAgIGZvciAodmFyIGkgaW4gbG9nKSB7XFxuICAgICAgICBpZiAobG9nW2ldLnVybCA9PSBNWV9VUkwpIHtcXG4gICAgICAgICAgICB2YXIgbm93ID0gaTtcXG4gICAgICAgICAgICB2YXIgb3JkZXIgPSBsb2dbaV0ub3JkZXI7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciBub3cgPSAnJztcXG4gICAgICAgICAgICB2YXIgb3JkZXIgPSBkZWZhdWx0T3JkZXI7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgbGV0IG9yZGVySXRlbSA9IHtcXG4gICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArICc8Zm9udCBjb2xvcj1cXFwiI2YzNzMzNVxcXCI+JyArICfnq6DoioLmjpLluo/ih4UnICsgJzwvZm9udD4nLFxcbiAgICAgICAgdXJsOiBNWV9VUkwgKyBgQGxhenlSdWxlPS5qczp2YXIgbG9nID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnKSk7dmFyIG5vdz0nYCArIG5vdyArIGAnO2lmKG5vdyE9Jycpe3ZhciBub3c9cGFyc2VJbnQobm93KTt2YXIgb3JkZXI9bG9nW25vd10ub3JkZXJ9ZWxzZXt2YXIgbm93PXBhcnNlSW50KGxvZy5sZW5ndGgpO3ZhciBvcmRlcj1gICsgZGVmYXVsdE9yZGVyICsgYDtsb2cucHVzaCh7dXJsOmlucHV0LG9yZGVyOm9yZGVyfSk7fWlmKGxvZ1tub3ddLm9yZGVyKXtsb2dbbm93XS5vcmRlcj0wO31lbHNle2xvZ1tub3ddLm9yZGVyPTE7fTt3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY29taWMvY29taWNMb2dGaWxlLmpzJywgSlNPTi5zdHJpbmdpZnkobG9nKSk7cmVmcmVzaFBhZ2UoKTsnaGlrZXI6Ly9lbXB0eSdgLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICB9XFxuICAgIGlmIChoYXNMaW5lKSB7XFxuICAgICAgICBvcmRlckl0ZW0udGl0bGUgPSBcXFwi4oCc4oCc4oCd4oCdXFxcIiArICc8Zm9udCBjb2xvcj1cXFwiI2YzNzMzNVxcXCI+JyArICfpm4bmlbDmjpLluo/ih4UnICsgJzwvZm9udD4nO1xcbiAgICAgICAgb3JkZXJJdGVtLmNvbF90eXBlID0gXFxcInRleHRfY2VudGVyXzFcXFwiXFxuICAgIH1cXG4gICAgZC5wdXNoKG9yZGVySXRlbSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgIH0pO1xcblxcbiAgICB2YXIgbGlzdCA9IG9yZGVyID8gbGlzdCA6IGxpc3QucmV2ZXJzZSgpO1xcbiAgICBmb3IgKGxldCBpIGluIGxpc3QpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+JyArIHBkZmgobGlzdFtpXSwgY2hhcHRlclRpdGxlKSArICc8L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgIHVybDogcGQobGlzdFtpXSwgY2hhcHRlclVybCkgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGxpbmUobGluZUxpc3QsIGxpbmVUaXRsZVJ1bGUsIHZhcktleSkge1xcbiAgICBsZXQgbGlzdCA9IGxpbmVMaXN0XFxuICAgIHZhcktleSA9IHZhcktleSA9PSBudWxsID8gKE1ZX1JVTEUudXJsICsgJyNsaW5lLWluZGV4JykgOiB2YXJLZXk7XFxuICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoa2V5TGlzdCkgPT4ge1xcbiAgICAgICAgZm9yIChsZXQgaSBpbiBrZXlMaXN0KSB7XFxuICAgICAgICAgICAgY2xlYXJWYXIoa2V5TGlzdFtpXSlcXG4gICAgICAgIH1cXG5cXG4gICAgfSwgW3ZhcktleSwgTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZSddKSlcXG4gICAgbGV0IGxpbmUwVGl0bGUgPSAnJ1xcbiAgICB0cnkge1xcbiAgICAgICAgbGluZTBUaXRsZSA9IHBkZmgobGlzdFswXSwgbGluZVRpdGxlUnVsZSk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGxvZyhNWV9SVUxFLnRpdGxlICsgZ2V0TXlWYXIoKE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnKSkpXFxuICAgIGZvciAobGV0IGkgaW4gbGlzdCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgbGluZVRpdGxlID0gcGRmaChsaXN0W2ldLCBsaW5lVGl0bGVSdWxlKTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoKE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnKSwgbGluZTBUaXRsZSkgPT09IGxpbmVUaXRsZSA/IFxcXCLliIfmjaI64oCY4oCYXFxcIiArIGxpbmVUaXRsZSArIFxcXCJcXFwiIDogbGluZVRpdGxlICsgXFxcIuKAmOKAmDrliIfmjaJcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgodmFyS2V5LCBsaW5lSW5kZXgsIGxpbmVUaXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIodmFyS2V5LCBsaW5lSW5kZXgudG9TdHJpbmcoKSlcXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvZyhNWV9SVUxFLnVybClcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKChNWV9SVUxFLnRpdGxlICsgJyNsaW5lLXRpdGxlJyksIGxpbmVUaXRsZSlcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhNWV9SVUxFLnRpdGxlICsgZ2V0TXlWYXIoKE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnKSkpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5YiH5o2i6IezXFxcIiArIGxpbmVUaXRsZVxcbiAgICAgICAgICAgICAgICB9LCB2YXJLZXksIGksIGxpbmVUaXRsZSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgICAgICB9KTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliqjmgIFb5LqMXSpcIixcInBhdGhcIjpcImR0ZmxcIixcInJ1bGVcIjpcImNvbnN0IGVtcHR5ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuXFxuaWYgKHR5cGVvZijmi7zmjqXliIbnsbspICE9ICd1bmRlZmluZWQnICYmIOaLvOaOpeWIhuexuyAhPSAnJykge1xcbiAgICB2YXIgY2F0ZWdvcmllcyA9IHBkZmEoaHRtbCwg5aSn57G75a6a5L2NKS5jb25jYXQocGRmYShodG1sLCDmi7zmjqXliIbnsbspKVxcbn0gZWxzZSB7XFxuICAgIHZhciBjYXRlZ29yaWVzID0gcGRmYShodG1sLCDlpKfnsbvlrprkvY0pXFxufVxcblxcbmxldCBpbml0X2NhdGUgPSBbXVxcblxcbmZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xcbiAgICBpbml0X2NhdGUucHVzaChcXFwiMFxcXCIpXFxufVxcblxcbmNvbnN0IGZvbGQgPSBnZXRNeVZhcihNWV9SVUxFLmdyb3VwLCBcXFwiMFxcXCIpXFxuY29uc3QgY2F0ZV90ZW1wX2pzb24gPSBnZXRNeVZhcihNWV9SVUxFLnRpdGxlLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbmNvbnN0IGNhdGVfdGVtcCA9IEpTT04ucGFyc2UoY2F0ZV90ZW1wX2pzb24pXFxuXFxuaWYgKHBhcnNlSW50KHBhZ2UpID09PSAxKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZm9sZCA9PT0gJzEnID8gJ+KAnOKAnOKAneKAnTxiPicgKyAn4oioJy5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKSArICc8L2I+JyA6ICfigJzigJzigJ3igJ08Yj4nICsgJ+KIpycuZm9udGNvbG9yKFxcXCIjMWFhZDE5XFxcIikgKyAnPC9iPicsXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoZm9sZCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKE1ZX1JVTEUuZ3JvdXAsIGZvbGQgPT09ICcxJyA/ICcwJyA6ICcxJyk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0sIGZvbGQpLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgfSlcXG4gICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcXG4gICAgICAgIGxldCBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jSk7XFxuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcXG4gICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gcGRmaChpdGVtLCDliIbnsbvmoIfpopgpXFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yo5o6S6ZmkKSAhPSAndW5kZWZpbmVkJyAmJiDmjpLpmaQgIT0gJycpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBrZXkudG9TdHJpbmcoKSA9PT0gY2F0ZV90ZW1wW2luZGV4XSA/IFxcXCLigJzigJzigJ3igJ1cXFwiICsgdGl0bGUuZm9udGNvbG9yKOWIhuexu+minOiJsikgOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChwZChpdGVtLCDliIbnsbvpk77mjqUpICsgJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfY2F0ZSA9IFtdXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcC5mb3JFYWNoKChjYXRlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcIjBcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoTVlfUlVMRS50aXRsZSwgSlNPTi5zdHJpbmdpZnkobmV3X2NhdGUpKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKE1ZX1JVTEUudXJsLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSBpZiAoZm9sZCA9PT0gJzEnKSB7XFxuICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHBkZmgoaXRlbSwg5YiG57G75qCH6aKYKVxcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKOaOkumZpCkgIT0gJ3VuZGVmaW5lZCcgJiYg5o6S6ZmkICE9ICcnKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIHRpdGxlLmZvbnRjb2xvcijliIbnsbvpopzoibIpIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQocGQoaXRlbSwg5YiG57G76ZO+5o6lKSArICcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLnRpdGxlLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuY2F0ZV90ZW1wKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLnVybCwgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9KVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWKqOaAgVvkuIBdKlwiLFwicGF0aFwiOlwiY2F0ZWdvcmllcy1oZWFkZXJcIixcInJ1bGVcIjpcIi8qKlxcbiAqIOacrOWcsOe9kemhteaPkuS7tumTvuaOpSBoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL2NhdGVnb3JpZXMtaGVhZGVyLmpzXFxuICog5a2Q6aG16Z2i6ZO+5o6lIGhpa2VyOi8vcGFnZS9jYXRlZ29yaWVzLWhlYWRlclxcbiAqIOmBk+mVv+S7k+W6k+mTvuaOpSBodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0yNzA1XFxuICog56CB5LqRIEdpdGVlIOmTvuaOpSBodHRwczovL2dpdGVlLmNvbS9yZWJvcm4wL0hpa2VyUnVsZXMvcmF3L21hc3Rlci9wbHVnaW5zL2NhdGVnb3JpZXMtaGVhZGVyLmpzXFxuICovXFxuLyoqXFxuICogT2JqZWN0LmFzc2lnbiDnlKjms5Xlj4LogIPpk77mjqVcXG4gKlxcbiAqIDEuaHR0cHM6Ly93d3cuZGFpbWFqaWFvbGl1LmNvbS9kYWltYS80NzEzOWE5ZTcxMDA0MDdcXG4gKiAyLmh0dHBzOi8vc2VnbWVudGZhdWx0LmNvbS9hLzExOTAwMDAwMTE3Nzg4NzVcXG4gKiAzLmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL3poLUNOL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cXG4gKi9cXG4vLyDliKnnlKggU3ltYm9sIOWunueOsOengeacieWPmOmHj+WSjOengeacieaWueazle+8jOWklueVjOS4jeWPr+iuv+mXru+8iOWPguiAg+mTvuaOpTLvvIlcXG5jb25zdCBzeW1ib2xNYXAgPSB7XFxuICAgIC8vIGNoZWNrUGFyYW1zOiBTeW1ib2woJ2NoZWNrUGFyYW1zJyksXFxuICAgIG1MYXlvdXQ6IFN5bWJvbCgnbUxheW91dCcpLFxcbiAgICB0cnVlX3VybDogU3ltYm9sKCd0cnVlX3VybCcpLFxcbiAgICBtUGFnZTogU3ltYm9sKCdtUGFnZScpLFxcbiAgICBzcmM6IFN5bWJvbCgnc3JjJyksXFxuICAgIHJ1bGVPYmpMaXN0OiBTeW1ib2woJ3J1bGVPYmpMaXN0JyksXFxuICAgIG1Gb2xkOiBTeW1ib2woJ21Gb2xkJyksXFxuICAgIG1Gb2xkSW5uZXJFbmFibGU6IFN5bWJvbCgnbUZvbGRJbm5lckVuYWJsZScpLFxcbiAgICBtRm9sZEluZGV4OiBTeW1ib2woJ21Gb2xkSW5kZXgnKSxcXG4gICAgbUZvbGRMYXlvdXQ6IFN5bWJvbCgnbUZvbGRMYXlvdXQnKSxcXG4gICAgbUNvbG9yOiBTeW1ib2woJ21Db2xvcicpLFxcbiAgICBtVGFnOiBTeW1ib2woJ21UYWcnKSxcXG59XFxuXFxuZnVuY3Rpb24gQ2F0ZWdvcmllc0hlYWRlcihjb2xvcikge1xcbiAgICAvLyAndXNlIHN0cmljdCc7XFxuICAgIC8vIC4uLlxcbiAgICAvLyB0aGlzW3N5bWJvbE1hcC5saXN0UnVsZV0gPSBbXVxcbiAgICAvLyB0aGlzW3N5bWJvbE1hcC5zdWJMaXN0UnVsZV0gPSBbXVxcbiAgICB0aGlzW3N5bWJvbE1hcC5tQ29sb3JdID0gY29sb3IgfHwgXFxcIiNGQTcyOThcXFwiO1xcbiAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0gPSBbXVxcbiAgICB0aGlzLlZBUk1BUCA9IHtcXG4gICAgICAgIENBVEVHT1JZOiBcXFwiaGVhZGVyLmNhdGVnb3J5XFxcIixcXG4gICAgICAgIFVSTDogXFxcImhlYWRlci51cmxcXFwiLFxcbiAgICAgICAgRk9MRDogXFxcImhlYWRlci5mb2xkXFxcIixcXG4gICAgfVxcbiAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF0gPSB7XFxuICAgICAgICBpbmplY3RJbmRleDogMVxcbiAgICB9XFxuICAgIHRoaXNbc3ltYm9sTWFwLm1Gb2xkSW5kZXhdID0gMVxcbn1cXG5cXG5PYmplY3QuYXNzaWduKENhdGVnb3JpZXNIZWFkZXIucHJvdG90eXBlLCB7XFxuICAgIC8vIE92ZXJyaWRlIOaehOmAoOaWueazle+8jOebuOW9k+S6jiBmdW5jdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSAoLi4uKSA9PiB7Li4ufe+8jG5ldyBmdW5jdGlvbigpIOeahOaXtuWAmeS8muiHquWKqOaJp+ihjFxcbiAgICBjb25zdHJ1Y3RvcjogQ2F0ZWdvcmllc0hlYWRlcixcXG4gICAgLy8g5a6a5LmJ56eB5pyJ5pa55rOVXFxuICAgIFZFUlNJT046IDIwMjExMTMwMTkwMCxcXG4gICAgY2hlY2tQYXJhbXMoKSB7XFxuICAgICAgICBpZiAoIXRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fosIPnlKggbGF5b3V0KGQpIOS8oOWFpeW9k+WJjeeVjOmdolxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXRoaXNbc3ltYm9sTWFwLnRydWVfdXJsXSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+36LCD55SoIHRydWVVcmwodXJsKSDkvKDlhaXlvZPliY3liIbnsbvnmoTpk77mjqVcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5tUGFnZV0pIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+iwg+eUqCBwYWdlKG1QYWdlKSDkvKDlhaXlvZPliY3pobXmlbBcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XS5sZW5ndGggPCAxKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fosIPnlKjnm7jlhbPmlrnms5XkvKDlhaXlrprkvY3op4TliJlcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5tRm9sZF0pIHtcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPSAnMCdcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgbGF5b3V0KG1MYXlvdXQpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdID0gbUxheW91dFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgdHJ1ZVVybCh1cmwpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnRydWVfdXJsXSA9IHVybFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgcGFnZShtUGFnZSkge1xcbiAgICAgICAgaWYgKHR5cGVvZiAobVBhZ2UpID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICAgIG1QYWdlID0gcGFyc2VJbnQobVBhZ2UpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tUGFnZV0gPSBtUGFnZVxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgaHRtbChtU3JjKSB7XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5zcmNdID0gbVNyY1xcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgbGlzdChydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcImxpc3QocnVsZSkgYWRkKHJ1bGVPYmopIOWPquiDveS6jOmAieS4gO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0gPSBbe31dXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0ubGlzdFJ1bGUgPSBydWxlXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+S4gOe6p+WIhuexuyddID0gcnVsZVxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgc3ViTGlzdChydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcInN1Ykxpc3QocnVsZSkgYWRkKHJ1bGVPYmopIOWPquiDveS6jOmAieS4gO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXSB8fCAoIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS5saXN0UnVsZSAmJiAhdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdWyfkuIDnuqfliIbnsbsnXSkpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+WFiOiwg+eUqCBsaXN0KHJ1bGUpIOaIliDkuIDnuqfliIbnsbsocnVsZSkg5a6a5L2N5LiA57qn5YiG57G7XFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS5zdWJMaXN0UnVsZSA9IHJ1bGVcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXVsn5a2Q5YiG57G7J10gPSBydWxlXFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICB0aXRsZShydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcInRpdGxlKHJ1bGUpIGFkZChydWxlT2JqKSDlj6rog73kuozpgInkuIDvvIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0gfHwgKCF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0ubGlzdFJ1bGUgJiYgIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXVsn5LiA57qn5YiG57G7J10pKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7flhYjosIPnlKggbGlzdChydWxlKSDmiJYg5LiA57qn5YiG57G7KHJ1bGUpIOWumuS9jeS4gOe6p+WIhuexu1xcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0udGl0bGVSdWxlID0gcnVsZVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdWyfliIbnsbvmoIfpopgnXSA9IHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS50aXRsZVJ1bGVcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIHVybChydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcInVybChydWxlKSBhZGQocnVsZU9iaikg5Y+q6IO95LqM6YCJ5LiA77yBXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdIHx8ICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLmxpc3RSdWxlICYmICF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+S4gOe6p+WIhuexuyddKSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35YWI6LCD55SoIGxpc3QocnVsZSkg5oiWIOS4gOe6p+WIhuexuyhydWxlKSDlrprkvY3kuIDnuqfliIbnsbtcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLnVybFJ1bGUgPSBydWxlXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+WIhuexu+mTvuaOpSddID0gdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLnVybFJ1bGVcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIC8qKlxcbiAgICAgKiDmmK/lkKblvIDlkK/mipjlj6Dlip/og71cXG4gICAgICpcXG4gICAgICogQHBhcmFtIGVuYWJsZWQgdHJ1ZSDooajnpLrlvIDlkK/vvIxmYWxzZSDooajnpLrnpoHnlKhcXG4gICAgICogQHJldHVybnMge0NhdGVnb3JpZXNIZWFkZXJ9XFxuICAgICAqL1xcbiAgICBmb2xkSW5uZXIoZW5hYmxlZCkge1xcbiAgICAgICAgaWYgKCEodHlwZW9mIChlbmFibGVkKSA9PT0gJ2Jvb2xlYW4nKSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWlIHRydWUg5oiWIGZhbHNlIOihqOekuuW8gOWQr+aIluWFs+mXreaKmOWPoOWKn+iDve+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZElubmVyRW5hYmxlXSA9IGVuYWJsZWRcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIC8qKlxcbiAgICAgKiDku47nrKwgaW5kZXgg6KGM5byA5aeL5oqY5Y+gXFxuICAgICAqXFxuICAgICAqIEBwYXJhbSBpbmRleCDlvIDlp4vmipjlj6DnmoTooYzmlbBcXG4gICAgICogQHJldHVybnMge0NhdGVnb3JpZXNIZWFkZXJ9XFxuICAgICAqL1xcbiAgICBmb2xkSW5kZXgoaW5kZXgpIHtcXG4gICAgICAgIGlmICghKHR5cGVvZiAoaW5kZXgpID09PSAnbnVtYmVyJykpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuW8gOWni+aKmOWPoOihjOivt+S8oOWFpeaVsOWtl++8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaW5kZXggPCAxKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLlvIDlp4vmipjlj6DooYzor7fkvKDlhaXlpKfkuo4gMCDnmoTmlbTmlbDvvIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAubUZvbGRJbmRleF0gPSBpbmRleCB8fCAxO1xcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgLyoqXFxuICAgICAqIOaKmOWPoOaMiemSrueahOeVjOmdolxcbiAgICAgKlxcbiAgICAgKiBAcGFyYW0gbGF5b3V0IOS4jiBkLnB1c2gg57uT5p6E5LiA6Ie077yMXFxuICAgICAqICAgICAgICDkvovvvJp7IHRpdGxlOlxcXCLmoIfpopgxXFxcIiwgdXJsOlxcXCJ4eHhcXFwiLCBjb2xfdHlwZTpcXFwic2Nyb2xsX2J1dHRvblxcXCIgfTtcXG4gICAgICogICAgICAgIOWPguaVsOmHh+eUqOWPr+mAieimhuebluaooeW8j++8jOS4jeWGmeeahOWPguaVsOWImeS9v+eUqOm7mOiupDtcXG4gICAgICogICAgICAgIOavlOWmguS8oOWFpSB7IGNvbF90eXBlOlxcXCJ0ZXh0XzFcXFwiIH3vvIzpgqPmnIDnu4jnu5PmnpzlsLHmmK8geyB0aXRsZTpcXFwi5qCH6aKYMVxcXCIsIHVybDpcXFwieHh4XFxcIiwgY29sX3R5cGU6XFxcInRleHRfMVxcXCIgfVxcbiAgICAgKiBAcmV0dXJucyB7Q2F0ZWdvcmllc0hlYWRlcn1cXG4gICAgICovXFxuICAgIGZvbGRMYXlvdXQobGF5b3V0KSB7XFxuICAgICAgICBpZiAodHlwZW9mIGxheW91dCA9PT0gJ29iamVjdCcpIHtcXG4gICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGxheW91dClcXG4gICAgICAgICAgICBsZXQgaW5qZWN0SW5kZXggPSBsYXlvdXQuaW5qZWN0SW5kZXggfHwgbGF5b3V0Wyfmipjlj6DmjInpkq7mj5LlhaXooYwnXVxcbiAgICAgICAgICAgIGlmIChsYXlvdXQudGl0bGUgfHwgbGF5b3V0LnVybCB8fCBsYXlvdXQuY29sX3R5cGUgfHwgaW5qZWN0SW5kZXgpIHtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXFxuICAgICAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF1ba2V5XSA9IGxheW91dFtrZXldO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXmraPnoa7nmoTmipjlj6DnlYzpnaLlhYPntKDvvIFcXFwiKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvLyBpbmplY3RJbmRleCDmipjlj6DmjInpkq7mj5LlhaXnrKwgaW5qZWN0SW5kZXgg6KGMXFxuICAgICAgICAgICAgaWYgKGluamVjdEluZGV4KSB7XFxuICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiAoaW5qZWN0SW5kZXgpID09PSAnbnVtYmVyJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5oqY5Y+g5oyJ6ZKu5o+S5YWl6KGM6K+35Lyg5YWl5pWw5a2X77yBXFxcIilcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaW5qZWN0SW5kZXggPCAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuaKmOWPoOaMiemSruaPkuWFpeihjOivt+S8oOWFpeWkp+S6jiAwIOeahOaVtOaVsO+8gVxcXCIpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGluamVjdEluZGV4ID4gdGhpc1tzeW1ib2xNYXAubUZvbGRJbmRleF0pIHtcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5oqY5Y+g5oyJ6ZKu5o+S5YWl6KGM5LiN5b6X5aSn5LqO5pi+56S65oqY5Y+g6KGM5pWw77yB6K+36LCD55SoIC5mb2xkSW5kZXgoaW5kZXgpIOaIliAu56ys5Yeg6KGM5byA5aeL5oqY5Y+gKGluZGV4KSDkvKDlhaXmraPnoa7nmoTmmL7npLrmipjlj6DooYzmlbBcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XS5pbmplY3RJbmRleCA9IGluamVjdEluZGV4IHx8IDE7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpeato+ehrueahOaKmOWPoOeVjOmdouWFg+e0oO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgLy8g5b2T5YmN5piv5ZCm5oqY5Y+gXFxuICAgIGZvbGQoaXNGb2xkKSB7XFxuICAgICAgICBpZiAodHlwZW9mIChpc0ZvbGQpID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICAgIGlzRm9sZCA9IGlzRm9sZCA9PT0gJzEnXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaXNGb2xkKSB7XFxuICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUZvbGRdID0gJzEnO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPSAnMCc7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICBjb2xvcihtQ29sb3IpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLm1Db2xvcl0gPSBtQ29sb3JcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIHRhZyhtVGFnKSB7XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tVGFnXSA9IG1UYWdcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIGFkZChydWxlT2JqKSB7XFxuICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkocnVsZU9iaikpXFxuICAgICAgICBpZiAocnVsZU9iai5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHtcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0gPSB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0uY29uY2F0KHJ1bGVPYmopXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XS5wdXNoKHJ1bGVPYmopXFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgZXZhbEpTUnVsZShpdGVtLCBqc1J1bGUpIHtcXG4gICAgICAgIGxldCBydWxlID0ganNSdWxlLnJlcGxhY2UoXFxcIkBqczpcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgIHJ1bGUgPSBydWxlLnRyaW0oKVxcbiAgICAgICAgLy8gbG9nKCQuc3RyaW5naWZ5KHJ1bGUpKVxcbiAgICAgICAgbGV0IGlucHV0ID0gaXRlbVxcbiAgICAgICAgaWYgKHJ1bGUuc3RhcnRzV2l0aChcXFwiKFxcXCIpKSB7XFxuICAgICAgICAgICAgZXZhbCgncmVzdWx0ID0gJyArIHJ1bGUpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8qKlxcbiAgICAgICAgICAgICAqIOi/mOWOn+aIkCAkLnRvU3RyaW5nKC4uLikg55qE5pyA57uI57uT5p6c77yM6L6+5Yiw5pyA57uI5aSE55CG5pa55byP6Lef5LiK6Z2i55qEIGlmIOS4gOiHtOeahOebrueahFxcbiAgICAgICAgICAgICAqL1xcbiAgICAgICAgICAgIGV2YWwoJ3Jlc3VsdCA9ICcgKyAnKCgpID0+IHsnICsgcnVsZSArICd9KSgpJylcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiAocmVzdWx0IHx8ICcnKVxcbiAgICB9LFxcbiAgICBnZXRUaXRsZShzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgICBsZXQgdGl0bGUgPSAnJ1xcbiAgICAgICAgbGV0IHRpdGxlUnVsZSA9IGNhdGVnb3J5LnRpdGxlUnVsZSB8fCAnYSYmVGV4dCdcXG4gICAgICAgIGlmICh0aXRsZVJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB0aXRsZVJ1bGUpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKHNyYywgdGl0bGVSdWxlKVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHRpdGxlIHx8IFxcXCJcXFwiO1xcbiAgICB9LFxcbiAgICBnZXRVcmwoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgbGV0IHVybCA9ICcnXFxuICAgICAgICBsZXQgdXJsUnVsZSA9IGNhdGVnb3J5LnVybFJ1bGUgfHwgJ2EmJmhyZWYnXFxuICAgICAgICBpZiAodHlwZW9mIHVybFJ1bGUgPT09ICdvYmplY3QnKSB7XFxuICAgICAgICAgICAgbGV0IG1VcmxSdWxlID0gdXJsUnVsZS5ydWxlIHx8IHVybFJ1bGVbJ+ino+aekOinhOWImSddIHx8ICdhJiZocmVmJztcXG4gICAgICAgICAgICBpZiAobVVybFJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuZXZhbEpTUnVsZShzcmMsIG1VcmxSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2UgPSBwYXJzZURvbTtcXG4gICAgICAgICAgICAgICAgaWYgKHVybFJ1bGUucGFyc2VPcHRpb24pIHtcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodXJsUnVsZS5wYXJzZU9wdGlvbikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBhcnNlRG9tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwZFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb207XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBhcnNlRG9tRm9ySHRtbFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGRmaFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb21Gb3JIdG1sO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZSA9IHBhcnNlRG9tO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVybFJ1bGVbXFxcIuino+aekOaWueazlVxcXCJdKSB7XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHVybFJ1bGVbXFxcIuino+aekOaWueazlVxcXCJdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGFyc2VEb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBkXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZURvbTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGFyc2VEb21Gb3JIdG1sXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwZGZoXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZURvbUZvckh0bWw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb207XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdXJsID0gcGFyc2Uoc3JjLCBtVXJsUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh1cmxSdWxlLmRlYWxVcmwpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdXJsUnVsZS5kZWFsVXJsKHVybClcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybFJ1bGVbJ+S6jOasoeWkhOeQhiddKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHVybFJ1bGVbJ+S6jOasoeWkhOeQhiddKHVybClcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmICh1cmxSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB1cmxSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBwYXJzZURvbShzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB1cmwgfHwgXFxcIlxcXCI7XFxuICAgIH0sXFxuICAgIGJ1aWxkKCkge1xcbiAgICAgICAgLy8g5qOA5rWL5piv5ZCm5Lyg5YWl6ZyA6KaB55qE5Y+C5pWwXFxuICAgICAgICB0aGlzLmNoZWNrUGFyYW1zKClcXG4gICAgICAgIC8vIOavj+S4gOS4quWIhuexu+eahOWUr+S4gOagh+ivhlxcbiAgICAgICAgbGV0IG1UYWcgPSB0aGlzW3N5bWJvbE1hcC5tVGFnXSB8fCBcXFwiXFxcIlxcbiAgICAgICAgLy/nv7vpobUg6ZyA6KaB5qC55o2u5a6e6ZmF5pu/5o2iXFxuICAgICAgICBjb25zdCBodG1sID0gdGhpc1tzeW1ib2xNYXAuc3JjXSB8fCByZXF1ZXN0KHRoaXNbc3ltYm9sTWFwLnRydWVfdXJsXSlcXG4gICAgICAgIGNvbnN0IGVtcHR5ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAvL+iOt+WPluWIl+ihqFxcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFtdXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0ubWFwKHJ1bGVPYmogPT4ge1xcbiAgICAgICAgICAgIGxldCBsaXN0ID0gW11cXG4gICAgICAgICAgICBsZXQgbGlzdFJ1bGUgPSBydWxlT2JqLmxpc3RSdWxlIHx8IHJ1bGVPYmpbXFxcIuS4gOe6p+WIhuexu1xcXCJdXFxuICAgICAgICAgICAgaWYgKGxpc3RSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkobGlzdFJ1bGUpKVxcbiAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIGxpc3RSdWxlKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsIGxpc3RSdWxlKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvLyBsb2cobGlzdClcXG4gICAgICAgICAgICBsaXN0Lm1hcChjYXRlZ29yeSA9PiB7XFxuICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBsaXN0OiBjYXRlZ29yeSxcXG4gICAgICAgICAgICAgICAgICAgIHN1Ykxpc3RSdWxlOiBydWxlT2JqLnN1Ykxpc3RSdWxlIHx8IHJ1bGVPYmpbXFxcIuWtkOWIhuexu1xcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVSdWxlOiBydWxlT2JqLnRpdGxlUnVsZSB8fCBydWxlT2JqW1xcXCLliIbnsbvmoIfpophcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIHVybFJ1bGU6IHJ1bGVPYmoudXJsUnVsZSB8fCBydWxlT2JqW1xcXCLliIbnsbvpk77mjqVcXFwiXSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuXFxuICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkoY2F0ZWdvcmllcykpXFxuXFxuICAgICAgICBsZXQgaW5pdF9jYXRlID0gW11cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xcbiAgICAgICAgICAgIGluaXRfY2F0ZS5wdXNoKFxcXCIwXFxcIilcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGNvbnN0IGNhdGVfdGVtcF9qc29uID0gZ2V0TXlWYXIobVRhZyArIHRoaXMuVkFSTUFQLkNBVEVHT1JZLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbiAgICAgICAgY29uc3QgY2F0ZV90ZW1wID0gSlNPTi5wYXJzZShjYXRlX3RlbXBfanNvbilcXG5cXG4gICAgICAgIGlmICh0aGlzW3N5bWJvbE1hcC5tUGFnZV0gPT09IDEpIHtcXG5cXG4gICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAvLyDmipjlj6AgVUlcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbc3ltYm9sTWFwLm1Gb2xkSW5uZXJFbmFibGVdICYmIHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XS5pbmplY3RJbmRleCA9PT0gKGluZGV4KzEpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9sZExheW91dCA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpc1tzeW1ib2xNYXAubUZvbGRMYXlvdXRdLnRpdGxlIHx8ICh0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPT09ICcxJyA/ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNGRjAwMDBcXFwiPuKIqDwvc3Bhbj48L2I+JyA6ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICMxYWFkMTlcXFwiPuKIpzwvc3Bhbj48L2I+JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF0udXJsIHx8ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5I1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLm1UYWcgKyBwYXJhbXMuVkFSTUFQLkZPTEQsIGdldE15VmFyKHBhcmFtcy5tVGFnICsgcGFyYW1zLlZBUk1BUC5GT0xELCBwYXJhbXMuaXNGb2xkKSA9PT0gJzEnID8gJzAnIDogJzEnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UYWc6IG1UYWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRm9sZDogdGhpc1tzeW1ib2xNYXAubUZvbGRdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJNQVA6IHRoaXMuVkFSTUFQXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XS5jb2xfdHlwZSB8fCBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tTGF5b3V0XS5wdXNoKGZvbGRMYXlvdXQpXFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgLy/lhbfkvZPliJfooajkuIvnmoTliIbnsbtcXG4gICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeS5zdWJMaXN0UnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gdGhpcy5ldmFsSlNSdWxlKGNhdGVnb3J5Lmxpc3QsIGNhdGVnb3J5LnN1Ykxpc3RSdWxlKVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBwYXJzZURvbUZvckFycmF5KGNhdGVnb3J5Lmxpc3QsIGNhdGVnb3J5LnN1Ykxpc3RSdWxlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAodGhpc1tzeW1ib2xNYXAubUZvbGRJbmRleF0gfHwgMSkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoaXRlbSwgY2F0ZWdvcnkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuZ2V0VXJsKGl0ZW0sIGNhdGVnb3J5KVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9JyArIHRoaXNbc3ltYm9sTWFwLm1Db2xvcl0gKyAnPicgKyB0aXRsZSArICcgPC9mb250PjwvYj4nIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCh1cmwpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfY2F0ZSA9IFtdXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcC5mb3JFYWNoKChjYXRlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcIjBcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy50YWcgKyBwYXJhbXMuVkFSTUFQLkNBVEVHT1JZLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuaW5kZXggPT09IDAgPyBuZXdfY2F0ZSA6IHBhcmFtcy5jYXRlX3RlbXApKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLnRhZyArIHBhcmFtcy5WQVJNQVAuVVJMLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFSTUFQOiB0aGlzLlZBUk1BUCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogbVRhZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogdGhpc1tzeW1ib2xNYXAubVBhZ2VdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPT09ICcwJykge1xcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5nZXRUaXRsZShpdGVtLCBjYXRlZ29yeSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdGhpcy5nZXRVcmwoaXRlbSwgY2F0ZWdvcnkpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0ucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBrZXkudG9TdHJpbmcoKSA9PT0gY2F0ZV90ZW1wW2luZGV4XSA/ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0nICsgdGhpc1tzeW1ib2xNYXAubUNvbG9yXSArICc+JyArIHRpdGxlICsgJyA8L2ZvbnQ+PC9iPicgOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHVybCkubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcFtwYXJhbXMuaW5kZXhdID0gcGFyYW1zLmtleS50b1N0cmluZygpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMudGFnICsgcGFyYW1zLlZBUk1BUC5DQVRFR09SWSwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMudGFnICsgcGFyYW1zLlZBUk1BUC5VUkwsIGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJNQVA6IHRoaXMuVkFSTUFQLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBtVGFnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiB0aGlzW3N5bWJvbE1hcC5tUGFnZV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0ucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0sXFxuXFxuICAgIOeVjOmdoihsYXlvdXQpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dChsYXlvdXQpXFxuICAgIH0sXFxuICAgIOWIhuexu+mTvuaOpSh0cnVlVXJsKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy50cnVlVXJsKHRydWVVcmwpO1xcbiAgICB9LFxcbiAgICDpobXnoIEocGFnZSkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZShwYWdlKTtcXG4gICAgfSxcXG4gICAg5rqQ56CBKGh0bWwpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmh0bWwoaHRtbCk7XFxuICAgIH0sXFxuICAgIOWumuS9jeS4gOe6p+WIhuexuyhsaXN0KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5saXN0KGxpc3QpO1xcbiAgICB9LFxcbiAgICDlrprkvY3lrZDliIbnsbsoc3ViTGlzdCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViTGlzdChzdWJMaXN0KTtcXG4gICAgfSxcXG4gICAg5a6a5L2N5YiG57G75qCH6aKYKHRpdGxlKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy50aXRsZSh0aXRsZSk7XFxuICAgIH0sXFxuICAgIOWumuS9jeWIhuexu+mTvuaOpSh1cmwpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnVybCh1cmwpO1xcbiAgICB9LFxcbiAgICDlvIDlkK/lhoXnva7mipjlj6Dlip/og70oKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5mb2xkSW5uZXIodHJ1ZSk7XFxuICAgIH0sXFxuICAgIOWFs+mXreWGhee9ruaKmOWPoOWKn+iDvSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmZvbGRJbm5lcihmYWxzZSk7XFxuICAgIH0sXFxuICAgIOesrOWHoOihjOW8gOWni+aKmOWPoChpbmRleCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZEluZGV4KGluZGV4KTtcXG4gICAgfSxcXG4gICAg5oqY5Y+g5oyJ6ZKu5qC35byPKGxheW91dCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZExheW91dChsYXlvdXQpXFxuICAgIH0sXFxuICAgIOaKmOWPoChmb2xkKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5mb2xkKGZvbGQpO1xcbiAgICB9LFxcbiAgICDpgInkuK3nmoTliIbnsbvpopzoibIoY29sb3IpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yKGNvbG9yKTtcXG4gICAgfSxcXG4gICAg5ZSv5LiA5qCH6K+GKG1UYWcpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnRhZyhtVGFnKVxcbiAgICB9LFxcbiAgICDmt7vliqDliIbnsbvlrprkvY0ocnVsZU9iaikge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkKHJ1bGVPYmopO1xcbiAgICB9LFxcbiAgICDlvIDlp4vmiZPpgKDliIbnsbsoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5idWlsZCgpO1xcbiAgICB9LFxcblxcbn0pXFxuJC5leHBvcnRzID0gbmV3IENhdGVnb3JpZXNIZWFkZXIoKTtcXG4kLmV4cG9ydHNcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumTvuaOpeWkhOeQhlvkuoxdKlwiLFwicGF0aFwiOlwidXJsLXByb2Nlc3NvclwiLFwicnVsZVwiOlwiLyoqXFxuICog5pys5Zyw572R6aG15o+S5Lu26ZO+5o6lIGhpa2VyOi8vZmlsZXMvcnVsZXMvanMvVXJsUHJvY2Vzc29yLmpzXFxuICog5a2Q6aG16Z2i6ZO+5o6lIGhpa2VyOi8vcGFnZS91cmwtcHJvY2Vzc29yXFxuICog6YGT6ZW/5LuT5bqT6ZO+5o6lIGh0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTI4NDlcXG4gKiDnoIHkupEgR2l0ZWUg6ZO+5o6lIGh0dHBzOi8vZ2l0ZWUuY29tL3JlYm9ybjAvSGlrZXJSdWxlcy9yYXcvbWFzdGVyL3BsdWdpbnMvVXJsUHJvY2Vzc29yLmpzXFxuICovXFxuZnVuY3Rpb24gVXJsUHJvY2Vzc29yKCkge1xcbiAgICB0aGlzLnBhcmFtcyA9IHt9XFxuICAgIHRoaXMucmVnZXhNYXAgPSBbXFxuICAgICAgICB7XFxuICAgICAgICAgICAgcmVnOiAnKHZvZHR5cGV8dmlkZW90KVxcXFxcXFxcL1xcXFxcXFxcdysnLFxcbiAgICAgICAgICAgIGV4ZWM6ICgpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnVybFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLy1cXFxcZCsuaHRtbC8sICctJyArIHRoaXMucGFyYW1zLnBhZ2UgKyAnLmh0bWwnKVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLygodm9kdHlwZXx2aWRlb3QpXFxcXC9cXFxcdyspLmh0bWwvLCAnJDEtJyArIHRoaXMucGFyYW1zLnBhZ2UgKyAnLmh0bWwnKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgcmVnOiAnXFxcXFxcXFwvP1tcXFxcXFxcXHdcXFxcXFxcXGRdKy0uKj8tLio/LS4qPy0uKj8tLio/LS4qPy0uKj8tXFxcXFxcXFxkKi0tLVxcXFxcXFxcZCouaHRtbCcsXFxuICAgICAgICAgICAgZXhlYzogKCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMudXJsXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXGQqKC0tLS5odG1sKS8sIHRoaXMucGFyYW1zLnBhZ2UgKyAnJDEnKVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLygtLS1cXFxcZCsuaHRtbCkvLCB0aGlzLnBhcmFtcy5wYWdlICsgJyQxJyk7IC8vIOaLvOaOpemhteeggVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgcmVnOiAnKChcXFxcXFxcXC92b2RcXFxcXFxcXC9zaG93KT8oXFxcXFxcXFwvYXJlYVxcXFxcXFxcL1tcXFxcXFxcXHdcXFxcXFxcXGQlXSspPyhcXFxcXFxcXC9ieVxcXFxcXFxcL1tcXFxcXFxcXHdcXFxcXFxcXGQlXSspPyhcXFxcXFxcXC9pZFxcXFxcXFxcL1xcXFxcXFxcZCspPyhcXFxcXFxcXC9sZXR0ZXJcXFxcXFxcXC9bXFxcXFxcXFx3XFxcXFxcXFxkJV0rKT8pKFxcXFxcXFxcL3BhZ2VcXFxcXFxcXC9cXFxcXFxcXGQrKT8oXFxcXFxcXFwveWVhclxcXFxcXFxcL1xcXFxcXFxcZCspP1xcXFxcXFxcLmh0bWwnLFxcbiAgICAgICAgICAgIGV4ZWM6ICgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJlZ0V4cCA9IC8oKFxcXFwvdm9kXFxcXC9zaG93KT8oXFxcXC9hcmVhXFxcXC9bXFxcXHdcXFxcZCVdKyk/KFxcXFwvYnlcXFxcL1tcXFxcd1xcXFxkJV0rKT8oXFxcXC9pZFxcXFwvXFxcXGQrKT8oXFxcXC9sZXR0ZXJcXFxcL1tcXFxcd1xcXFxkJV0rKT8pKFxcXFwvcGFnZVxcXFwvXFxcXGQrKT8oXFxcXC95ZWFyXFxcXC9cXFxcZCspP1xcXFwuaHRtbC9cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnVybFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UocmVnRXhwLCAnJDEnICsgKFxcXCIvcGFnZS9cXFwiICsgdGhpcy5wYXJhbXMucGFnZSkgKyAnJDgnICsgXFxcIi5odG1sXFxcIilcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIF1cXG59XFxuXFxuT2JqZWN0LmFzc2lnbihVcmxQcm9jZXNzb3IucHJvdG90eXBlLCB7XFxuICAgIGNvbnN0cnVjdG9yOiBVcmxQcm9jZXNzb3IsXFxuICAgIGNoZWNrUGFyYW1zKCkge1xcbiAgICAgICAgaWYgKCF0aGlzLnBhcmFtcy51cmwpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+WFiOiwg+eUqCAuYmFzZVVybCh1cmwpIOS8oOWFpemTvuaOpei/m+ihjOWIneWni+WMliFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzLnBhcmFtcy5wYWdlKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7flhYjosIPnlKggLnBhZ2UocGFnZSkg5Lyg5YWl6aG156CB6L+b6KGM5Yid5aeL5YyWIVxcXCIpXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGJhc2VVcmwodXJsKXtcXG4gICAgICAgIHRoaXMucGFyYW1zLnVybCA9IHVybFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgcGFnZShwYWdlKXtcXG4gICAgICAgIHRoaXMucGFyYW1zLnBhZ2UgPSBwYWdlXFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICBhZGRFeHRyYShyZWdFeHApIHtcXG4gICAgICAgIGlmIChyZWdFeHAuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XFxuICAgICAgICAgICAgdGhpcy5yZWdleE1hcCA9IHRoaXMucmVnZXhNYXAuY29uY2F0KHJlZ0V4cClcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdGhpcy5yZWdleE1hcC5wdXNoKHJlZ0V4cClcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBkZWJ1ZygpIHtcXG4gICAgICAgIHRoaXMucGFyYW1zLmRlYnVnID0gdHJ1ZVxcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIGV4ZWMoKSB7XFxuICAgICAgICB0aGlzLmNoZWNrUGFyYW1zKClcXG4gICAgICAgIGxldCB0cnVlX3VybCA9ICcnXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVnZXhNYXAubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBsZXQgcmVnT2JqID0gdGhpcy5yZWdleE1hcFtpXTtcXG4gICAgICAgICAgICBsZXQgdXJsRXhwID0gcmVnT2JqLnJlZztcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybEV4cCA9PT0gJ3N0cmluZycpIHtcXG4gICAgICAgICAgICAgICAgdXJsRXhwID0gbmV3IFJlZ0V4cCh1cmxFeHApXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh1cmxFeHAudGVzdCh0aGlzLnBhcmFtcy51cmwpKSB7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmFtcy5kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHVybEV4cC50b1N0cmluZygpKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHRydWVfdXJsID0gcmVnT2JqLmV4ZWMoKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHRydWVfdXJsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRydWVfdXJsO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMudXJsXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIOiOt+WPluWkhOeQhue7k+aenCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWMoKVxcbiAgICB9LFxcbiAgICDpk77mjqUodXJsKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsKHVybClcXG4gICAgfSxcXG4gICAg6aG156CBKHBhZ2UpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2UocGFnZSlcXG4gICAgfSxcXG4gICAg5o+S5YWl5paw5aSE55CG6KeE5YiZKHJlZ0V4cCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRXh0cmEocmVnRXhwKVxcbiAgICB9LFxcbiAgICDosIPor5XmqKHlvI8oKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5kZWJ1ZygpO1xcbiAgICB9XFxufSlcXG4kLmV4cG9ydHM9bmV3IFVybFByb2Nlc3NvcigpXFxuJC5leHBvcnRzXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqcqXCIsXCJwYXRoXCI6XCJ5anRvb2xcIixcInJ1bGVcIjpcImZ1bmN0aW9uIGNvbnZlcnQxKHN0cikge1xcbiAgICBsZXQgYyA9IHN0ci5zcGxpdChcXFwiO1xcXCIpXFxuICAgIHJldHVybiB7XFxuICAgICAgICDliJfooag6IGNbMF0sXFxuICAgICAgICDmoIfpopg6IGNbMV0sXFxuICAgICAgICDlm77niYc6IGNbMl0sXFxuICAgICAgICDmj4/ov7A6IGNbM10sXFxuICAgICAgICDpk77mjqU6IGNbNF1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBtZXJnZShzb3VyY2UsIHRhcmdldCkge1xcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSlcXG4gICAgZm9yIChsZXQgaSBpbiBrZXlzKSB7XFxuICAgICAgICB0YXJnZXRba2V5c1tpXV0gPSBzb3VyY2Vba2V5c1tpXV1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiDkuIDnuqcob2JqKSB7XFxuICAgIHZhciBkID0gW107XFxuICAgIGlmICgkLnR5cGUob2JqKSA9PSBcXFwic3RyaW5nXFxcIikge1xcbiAgICAgICAgb2JqID0gY29udmVydDEob2JqKVxcbiAgICB9XFxuICAgIGlmIChvYmou6KeE5YiZKSB7XFxuICAgICAgICBsZXQgYyA9IGNvbnZlcnQxKG9iai7op4TliJkpXFxuICAgICAgICBtZXJnZShjLCBvYmopXFxuICAgIH1cXG4gICAgbGV0IGFyciA9IHBkZmEoZ2V0UmVzQ29kZSgpLCBvYmou5YiX6KGoKTtcXG4gICAgICAgaWYgKG9iai7liJfooajlpITnkIYgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIGFyciA9IG9iai7pk77mjqXlpITnkIYoYXJyKVxcbiAgICAgICAgfVxcbiAgICBmb3IgKGxldCBpdCBvZiBhcnIpIHtcXG4gICAgICAgIGxldCB1cmwgPSBwZChpdCwgb2JqLumTvuaOpSlcXG4gICAgICAgIGlmIChvYmou6ZO+5o6l5aSE55CGICE9IG51bGwpIHtcXG4gICAgICAgICAgICB1cmwgPSBvYmou6ZO+5o6l5aSE55CGKHVybClcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB0aXRsZSA9IHBkZmgoaXQsIG9iai7moIfpopgpXFxuICAgICAgICBpZiAob2JqLuagh+mimOWkhOeQhiAhPSBudWxsKSB7XFxuICAgICAgICAgICAgdGl0bGUgPSBvYmou5qCH6aKY5aSE55CGKHRpdGxlKVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHBpYyA9IHBkKGl0LCBvYmou5Zu+54mHKVxcbiAgICAgICAgaWYgKG9iai7lm77niYflpITnkIYgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIHBpYyA9IG9iai7lm77niYflpITnkIYocGljKVxcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogb2JqLuagh+mimCA/IHBkZmgoaXQsIG9iai7moIfpopgpIDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgdXJsOiB1cmwrJyNhdXRvQ2FjaGUjJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZGVzYzogb2JqLuaPj+i/sCA/IHBkZmgoaXQsIG9iai7mj4/ov7ApIDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogcGljLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHl0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIHlwaWM6IHBpYyxcXG4gICAgICAgICAgICAgICAgeXVybDogdXJsLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsJycpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuXFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpO1xcbn1cXG52YXIgdG9vbCA9IHtcXG4gICAg5LiA57qnOiDkuIDnuqdcXG59XFxuJC5leHBvcnRzID0gdG9vbFwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiA57qnW+S6jF0qXCIsXCJwYXRoXCI6XCJ5aWppXCIsXCJydWxlXCI6XCJmdW5jdGlvbiDkuIDnuqcoKSB7fTtcXHJcXG5PYmplY3QuYXNzaWduKOS4gOe6py5wcm90b3R5cGUsIHtcXHJcXG5cXHRjb25zdHJ1Y3Rvcjog5LiA57qnLFxcclxcblxcdHRlc3QoKSB7fSxcXHJcXG5cXHTojrflj5bmupDnoIEodXJsLCBoZWFkZXIpIHtyZXR1cm4gZmV0Y2godHJ1ZV91cmwsIHtoZWFkZXJzOiBoZWFkZXIgfHwgeydVc2VyLUFnZW50JzogUENfVUF9fSkgfSwvLyDpu5jorqTnu5/kuIDkvb/nlKhNT0JJTEVfVUFcXHJcXG5cXHTmkJzntKLmoYbmnrYocGFnZSkge1xcclxcblxcdFxcdGlmIChwYWdlID09ICcxJykge1xcbi8qXFxyXFxuXFx0XFx0XFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHRcXHRcXHR0aXRsZTogXFxcIuaQnOe0ouacrOinhOWImVxcXCIsXFxyXFxuXFx0XFx0XFx0XFx0dXJsOiBcXFwiJ2hpa2VyOi8vc2VhcmNoP3J1bGU9XFxcIiArIE1ZX1JVTEUudGl0bGUgKyBcXFwiJnM9JytpbnB1dFxcXCIsXFxyXFxuXFx0XFx0XFx0XFx0ZGVzYzogXFxcIiBcXFwiLFxcclxcblxcdFxcdFxcdFxcdGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiXFxyXFxuXFx0XFx0XFx0fSk7XFxuKi9cXHJcXG5cXHRcXHR9XFxyXFxuXFx0fSxcXHJcXG5cXHTojrflj5bpk77mjqUocGFnZSwgcmVnZXgpIHtcXHJcXG5cXHRcXHRsZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcignaGVhZGVyLnVybCcsIE1ZX1VSTCk7XFxyXFxuXFx0XFx0Ly9sZXQg6ZO+5o6l5aSE55CG5bel5YW3ID0gcmVxdWlyZUNhY2hlKGNvbmZpZy7pk77mjqXlpITnkIblt6Xlhbfkvp3otZYpXFxyXFxuXFx0XFx0Ly9sZXQg6ZO+5o6l5aSE55CG5bel5YW3ID0gcmVxdWlyZUNhY2hlKCdodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0yODQ5JylcXHJcXG5cXHRcXHQvL2xldCDpk77mjqXlpITnkIblt6XlhbcgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS91cmwtcHJvY2Vzc29yJylcXHJcXG5cXHRcXHRsZXQg6ZO+5o6l5aSE55CG5bel5YW3ID0gcmVxdWlyZUNhY2hlKCdodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0yODQ5JylcXHJcXG5cXHRcXHR0cnVlX3VybCA9IOmTvuaOpeWkhOeQhuW3peWFt1xcclxcblxcdFxcdFxcdC7pk77mjqUodHJ1ZV91cmwpXFxyXFxuXFx0XFx0XFx0LumhteeggShwYWdlKVxcclxcblxcdFxcdFxcdC7mj5LlhaXmlrDlpITnkIbop4TliJkocmVnZXggfHwgW10pXFxyXFxuXFx0XFx0XFx0LuiOt+WPluWkhOeQhue7k+aenCgpO1xcclxcblxcdFxcdHJldHVybiB0cnVlX3VybDtcXHJcXG5cXHR9LFxcclxcblxcdOaJk+mAoOWIhuexuyhydWxlTGlzdCkge1xcclxcblxcdFxcdC8vICBsZXQgaHRtbENhdGVnb3JpZXMgPSByZXF1aXJlQ2FjaGUoY29uZmlnLuWKqOaAgeWIhuexu+S+nei1lilcXHJcXG5cXHRcXHQvL2xldCBodG1sQ2F0ZWdvcmllcyA9IHJlcXVpcmVDYWNoZSgnaHR0cDovL2hpa2VyLm5va2lhLnByZXNzL2hpa2VydWxlL3J1bGVsaXN0Lmpzb24/aWQ9MjcwNScpXFxyXFxuXFx0XFx0aWYgKCFydWxlTGlzdCkge1xcclxcblxcdFxcdFxcdGxldCDliIbnsbvlrprkvY0gPSBbe1xcclxcblxcdFxcdFxcdFxcdFxcdOS4gOe6p+WIhuexuzog5LiA57qn5a6a5L2NQSxcXHJcXG5cXHRcXHRcXHRcXHRcXHTlrZDliIbnsbs6IOe7n+S4gOWumuS9jUIgfHwg5LiA57qn5a6a5L2NQixcXHJcXG5cXHRcXHRcXHRcXHRcXHTliIbnsbvpk77mjqU6IHvkuozmrKHlpITnkIYodXJsKSB7dHJ5IHtyZXR1cm4g5LiA57qn5aSE55CGQyh1cmwpfSBjYXRjaCAoZSkge3JldHVybiB1cmx9fX1cXHJcXG5cXHRcXHRcXHR9XVxcclxcblxcdFxcdFxcdGlmICjkuoznuqflrprkvY1BICYmICjnu5/kuIDlrprkvY1CIHx8IOS6jOe6p+WumuS9jUIpKSB7XFxyXFxuXFx0XFx0XFx0XFx05YiG57G75a6a5L2NLnB1c2goe1xcclxcblxcdFxcdFxcdFxcdFxcdFxcdOS4gOe6p+WIhuexuzog5LqM57qn5a6a5L2NQSxcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHTlrZDliIbnsbs6IOe7n+S4gOWumuS9jUIgfHwg5LqM57qn5a6a5L2NQixcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHTliIbnsbvpk77mjqU6IHvkuozmrKHlpITnkIYodXJsKSB7dHJ5IHtyZXR1cm4g5LqM57qn5aSE55CGQyh1cmwpfSBjYXRjaCAoZSkge3JldHVybiB1cmx9fX1cXHJcXG5cXHRcXHRcXHRcXHR9KVxcclxcblxcdFxcdFxcdH1cXHJcXG5cXHRcXHRcXHRpZiAo5LiJ57qn5a6a5L2NQSAmJiAo57uf5LiA5a6a5L2NQiB8fCDkuInnuqflrprkvY1CKSkge1xcclxcblxcdFxcdFxcdFxcdOWIhuexu+WumuS9jS5wdXNoKHtcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHTkuIDnuqfliIbnsbs6IOS4iee6p+WumuS9jUEsXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx05a2Q5YiG57G7OiDnu5/kuIDlrprkvY1CIHx8IOS4iee6p+WumuS9jUIsXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx05YiG57G76ZO+5o6lOiB75LqM5qyh5aSE55CGKHVybCkge3RyeSB7cmV0dXJuIOS4iee6p+WkhOeQhkModXJsKX0gY2F0Y2ggKGUpIHtyZXR1cm4gdXJsfX19XFxyXFxuXFx0XFx0XFx0XFx0fSlcXHJcXG5cXHRcXHRcXHR9XFxyXFxuXFx0XFx0XFx0aWYgKOWbm+e6p+WumuS9jUEgJiYgKOe7n+S4gOWumuS9jUIgfHwg5Zub57qn5a6a5L2NQikpIHtcXHJcXG5cXHRcXHRcXHRcXHTliIbnsbvlrprkvY0ucHVzaCh7XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx05LiA57qn5YiG57G7OiDlm5vnuqflrprkvY1BLFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdOWtkOWIhuexuzog57uf5LiA5a6a5L2NQiB8fCDlm5vnuqflrprkvY1CLFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdOWIhuexu+mTvuaOpToge+S6jOasoeWkhOeQhih1cmwpIHt0cnkge3JldHVybiDlm5vnuqflpITnkIZDKHVybCl9IGNhdGNoIChlKSB7cmV0dXJuIHVybH19fVxcclxcblxcdFxcdFxcdFxcdH0pXFxyXFxuXFx0XFx0XFx0fVxcclxcblxcdFxcdFxcdHJ1bGVMaXN0ID0g5YiG57G75a6a5L2NO1xcclxcblxcdFxcdH1cXHJcXG5cXHRcXHQvLyAnMCcg5Li66buY6K6k5LiN5oqY5Y+g77yMJzEnIOS4uum7mOiupOaKmOWPoFxcclxcblxcdFxcdGNvbnN0IOW9k+WJjeaKmOWPoOeKtuaAgSA9IGdldE15VmFyKCdoZWFkZXIuZm9sZCcsICcwJylcXHJcXG5cXHRcXHQvLyDlvJXlhaXliqjmgIHliIbnsbvkvp3otZZcXHJcXG5cXHRcXHRsZXQgaHRtbENhdGVnb3JpZXMgPSByZXF1aXJlQ2FjaGUoJ2h0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTI3MDUnKVxcclxcblxcdFxcdHZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge1xcclxcblxcdFxcdFxcdHJldHVybiAnIycgKyAoJzAwMDAwJyArIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwIDw8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcXHJcXG5cXHRcXHR9IC8vIOmaj+acuumAieS4reeahOWIhuexu+minOiJslxcclxcblxcdFxcdHZhciBjb2xvdXI7XFxyXFxuXFx0XFx0aWYgKOWIhuexu+minOiJsiAhPT0gJycpIHtcXHJcXG5cXHRcXHRcXHRjb2xvdXIgPSDliIbnsbvpopzoibJcXHJcXG5cXHRcXHR9IGVsc2Uge1xcclxcblxcdFxcdFxcdGNvbG91ciA9IGdldFJhbmdlQ29sb3JzKClcXHJcXG5cXHRcXHR9XFxyXFxuXFx0XFx0aHRtbENhdGVnb3JpZXMu55WM6Z2iKGQpXFxyXFxuXFx0XFx0XFx0Ly8u5YiG57G76ZO+5o6lKHRydWVfdXJsKVxcclxcblxcdFxcdFxcdC7mupDnoIEoaHRtbClcXHJcXG5cXHRcXHRcXHQu6aG156CBKHBhZ2UpXFxyXFxuXFx0XFx0XFx0Lua3u+WKoOWIhuexu+WumuS9jShydWxlTGlzdClcXHJcXG5cXHRcXHRcXHQu5byA5ZCv5YaF572u5oqY5Y+g5Yqf6IO9KCkgLy8g5b+F6aG7XFxyXFxuXFx0XFx0XFx0LuaKmOWPoCjlvZPliY3mipjlj6DnirbmgIEpIC8vIOW/hemhu1xcclxcblxcdFxcdFxcdC7mipjlj6DmjInpkq7moLflvI8oe1xcclxcblxcdFxcdFxcdFxcdHRpdGxlOiDlvZPliY3mipjlj6DnirbmgIEgPT0gXFxcIjFcXFwiID8gXFxcIuKAnOKAnOKAneKAnTxiaWc+PGI+PGZvbnQgY29sb3I9JyM1OTU5QUInPlxcXCIgKyDliqjmgIHnvKnlsI8gKyBcXFwiPC9mb250PjwvYj48L2JpZz5cXFwiIDogXFxcIuKAnOKAnOKAneKAnTxiaWc+PGI+PGZvbnQgY29sb3I9JyNGNzVENTknPlxcXCIgKyDliqjmgIHmianlsZUgKyBcXFwiPC9mb250PjwvYj48L2JpZz5cXFwiXFxyXFxuXFx0XFx0XFx0fSkgLy8g5Y+v6YCJXFxyXFxuXFx0XFx0XFx0Ly8gLuesrOWHoOihjOW8gOWni+aKmOWPoCgyKSAvLyDlj6/pgIlcXHJcXG5cXHRcXHRcXHQvLyAu5oqY5Y+g5oyJ6ZKu5qC35byPKHsg5oqY5Y+g5oyJ6ZKu5o+S5YWl6KGMOiAyIH0pICAvLyDlj6/pgInvvIzkvYblv4XpobvlhYjosIPnlKggLuesrOWHoOihjOW8gOWni+aKmOWPoChpbmRleCnvvIznhLblkI7lho3kvKDlhaUgeyDmipjlj6DmjInpkq7mj5LlhaXooYw6IGluZGV4IH1cXHJcXG5cXHRcXHRcXHQu6YCJ5Lit55qE5YiG57G76aKc6ImyKGNvbG91cilcXHJcXG5cXHRcXHRcXHQu5byA5aeL5omT6YCg5YiG57G7KCk7XFxyXFxuXFx0fSxcXHJcXG5cXHJcXG5cXHTnlJ/miJDniYfljZUoZCxodG1sKSB7XFxyXFxuXFxyXFxuXFx0XFx0dmFyIOWIl+ihqFxcclxcblxcdFxcdHZhciDmoIfpophcXHJcXG5cXHRcXHR2YXIg5o+P6L+wXFxyXFxuXFx0XFx0dmFyIOWbvueJh1xcclxcblxcdFxcdHZhciDpk77mjqVcXHJcXG5cXHJcXG5cXHRcXHRpZiAo5qGG5p6257G75Z6LID09PSAnbXl1aS12b2RsaXN0Jykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICcubXl1aS12b2RsaXN0JiZsaSc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2g0JiZUZXh0JztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnLnBpYy10YWd8fC5waWMtdGV4dCYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJy5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdFxcdC8vbG9nKCfmoYbmnrbnsbvlnovCt215dWktdm9kbGlzdCcpXFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICcjZGF0YV9saXN0Jykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICcjZGF0YV9saXN0JiZsaSc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2EmJnRpdGxlJztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnZW0mJlRleHQnO1xcclxcblxcdFxcdFxcdOWbvueJhyA9ICdpbWcmJmRhdGEtc3JjbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdFxcdC8vbG9nKCfmoYbmnrbnsbvlnovCt2RhdGFfbGlzdCcpXFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICdmZWQtbGlzdC10aXRsZScpIHtcXHJcXG5cXHRcXHRcXHTliJfooaggPSAnLmZlZC1saXN0LWluZm8mJmxpJztcXHJcXG5cXHRcXHRcXHTmoIfpopggPSAnLmZlZC1saXN0LXRpdGxlJiZUZXh0JztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnLmZlZC10ZXh0LWNlbnRlciYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJ2EmJmRhdGEtb3JpZ2luYWwnO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9ICdhJiZocmVmJztcXHJcXG5cXHRcXHRcXHQvL2xvZygn5qGG5p6257G75Z6LwrcuZmVkLWxpc3QtaW5mbycpXFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICdpdGVtJykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICdib2R5JiYuaXRlbSc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2ltZyYmYWx0JztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAncCYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJ2ltZyYmc3JjbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdH0gZWxzZSBpZiAo5qGG5p6257G75Z6LID09PSAnbW9kdWxlLWl0ZW1zJykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICcubW9kdWxlLWl0ZW1zJiYubW9kdWxlLWl0ZW0nO1xcclxcblxcdFxcdFxcdOagh+mimCA9ICdhJiZ0aXRsZSc7XFxyXFxuXFx0XFx0XFx05o+P6L+wID0gJy5tb2R1bGUtaXRlbS10ZXh0JiZUZXh0JztcXHJcXG5cXHRcXHRcXHTlm77niYcgPSAnaW1nfHwubGF6eSYmZGF0YS1zcmMnO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9ICdhJiZocmVmJztcXHJcXG5cXHRcXHR9IGVsc2UgaWYgKOahhuaetuexu+WeiyA9PT0gJ3BhY2steWtwYWNrJykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICdib2R5JiYucGFjay15a3BhY2snO1xcclxcblxcdFxcdFxcdOagh+mimCA9ICdhJiZ0aXRsZSc7XFxyXFxuXFx0XFx0XFx05o+P6L+wID0gJ3NwYW4sLTEmJlRleHQnO1xcclxcblxcdFxcdFxcdOWbvueJhyA9ICcuZWNsYXp5JiZkYXRhLW9yaWdpbmFsJztcXHJcXG5cXHRcXHRcXHTpk77mjqUgPSAnYSYmaHJlZic7XFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICdzdHVpLXZvZGxpc3QnKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0gJy5zdHVpLXZvZGxpc3QmJmxpJztcXHJcXG5cXHRcXHRcXHTmoIfpopggPSAnYSYmdGl0bGUnO1xcclxcblxcdFxcdFxcdOaPj+i/sCA9ICcucGljLXRleHQmJlRleHQnO1xcclxcblxcdFxcdFxcdOWbvueJhyA9ICcubGF6eWxvYWR8fGEmJmRhdGEtb3JpZ2luYWwnO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9ICdhJiZocmVmJztcXHJcXG5cXHRcXHR9IGVsc2UgaWYgKOahhuaetuexu+WeiyA9PT0gJ3ZvZGxpc3QnKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0gJy52b2RsaXN0JiZsaSc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2EmJnRpdGxlJztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnYSYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJy5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdH0gZWxzZSBpZiAo5qGG5p6257G75Z6LID09PSAn5rWL6K+VJykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICdib2R5JiZhJztcXHJcXG5cXHRcXHRcXHTmoIfpopggPSAnYm9keSYmYSc7XFxyXFxuXFx0XFx0XFx05o+P6L+wID0gJ2JvZHkmJmEnO1xcclxcblxcdFxcdFxcdOWbvueJhyA9ICdib2R5JiZhJztcXHJcXG5cXHRcXHRcXHTpk77mjqUgPSAnYm9keSYmYSc7XFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICcnKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0g5qGG5p625YiX6KGoO1xcclxcblxcdFxcdFxcdOagh+mimCA9IOahhuaetuagh+mimDtcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSDmoYbmnrbmj4/ov7A7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0g5qGG5p625Zu+54mHO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9IOahhuaetumTvuaOpTtcXHJcXG5cXHRcXHR9XFxyXFxuXFx0XFx0bGV0IGxpc3QgPSBwZGZhKGh0bWwsIOWIl+ihqCk7XFxyXFxuXFx0XFx0Zm9yIChsZXQgayBpbiBsaXN0KSB7XFxyXFxuXFx0XFx0XFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHRcXHRcXHR0aXRsZTogcGRmaChsaXN0W2tdLCDmoIfpopgpLFxcclxcblxcdFxcdFxcdFxcdGRlc2M6IHBkZmgobGlzdFtrXSwg5o+P6L+wKSxcXHJcXG5cXHRcXHRcXHRcXHRpbWc6IHBkKGxpc3Rba10sIOWbvueJhykgKyAnQFJlZmVyZXI9JyxcXHJcXG5cXHRcXHRcXHRcXHR1cmw6IHBkKGxpc3Rba10sIOmTvuaOpSkrXFxcIiNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI1xcXCIsXFxyXFxuXFx0XFx0XFx0fSk7XFxyXFxuXFx0XFx0fVxcclxcblxcdFxcdGQucHVzaCh7XFxyXFxuXFx0XFx0XFx0Y29sX3R5cGU6ICdiaWdfYmlnX2JsYW5rX2Jsb2NrJyxcXHJcXG5cXHRcXHR9KTtcXHJcXG5cXHR9XFxyXFxufSlcXHJcXG5cXHJcXG4kLmV4cG9ydHMgPSBuZXcg5LiA57qnKCk7XFxyXFxuJC5leHBvcnRzXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlh73mlbDnu4Tku7YqXCIsXCJwYXRoXCI6XCJxc1wiLFwicnVsZVwiOlwiZnVuY3Rpb24g5LyY5YyW6Lev57q/56ug6IqC5pWw5o2uKOWkmui3r+e6v+WQpiwg5rqQ5pWw5o2uLCDot6/nur/liJfooagsIOi3r+e6v+WQjSwg6YCJ6ZuG5oC75YiX6KGoLCDpgInpm4bliJfooagsIOmbhuWQjSwg6ZuGdXJsLCDliY3nvIAsIOagh+mimCwg5Zu+54mHKSB7XFxuXFxuICAgIC8v5b2T5aSa6Lev57q/5ZCmIOmAiembhuaAu+WIl+ihqOS4uuepulxcbiAgICAvL+acgOe7iOi/lOWbniBbe3RpdGxlOiAn6Lev57q/5ZCNJyxsaXN0OiBbe3RpdGxlOifpgInpm4blkI0nLHVybDon6YCJ6ZuGdXJsJywuLi59XSxzanNzOifkuIvovb3otYTmlpknfSwuLi4uXVxcbiAgICAvL+mAiembhuWIl+ihqCDnrKzkuIDpobnmmK9jc3PpgInmi6nlmajvvIzkuYvlkI7lj6/ku6XnlKgk5YiG5Ymy5re75Yqg6KaB5Yig6Zmk56ug6IqC5ZCNXFxuXFxuXFxuICAgIHZhciDnq6DoioJqc29uID0gW107XFxuICAgIHZhciDljZXot6/nur/nq6DoioIgPSAn56ug6IqC5YiX6KGoJ1xcblxcbiAgICB2YXIg5YiX6KGo5ZCNID0gW107XFxuICAgIGlmICgh5aSa6Lev57q/5ZCmKSB7XFxuXFxuICAgICAgICDliJfooajlkI0ucHVzaCjljZXot6/nur/nq6DoioIpXFxuXFxuICAgIH0gZWxzZSB7XFxuXFxuICAgICAgICBwZGZhKOa6kOaVsOaNriwg6Lev57q/5YiX6KGoKS5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgICAgICAgICDliJfooajlkI0ucHVzaChwZGZoKGRhdGEsIOi3r+e6v+WQjSkpXFxuICAgICAgICB9KTtcXG5cXG4gICAgfVxcblxcbiAgICB2YXIg6ZuG5pWw57uEID0gW107XFxuXFxuXFxudmFyIOaOkumZpOeroOiKgiA9IFtdO1xcbmlmKOmAiembhuWIl+ihqC5pbmNsdWRlcygnJCcpKXtcXG7mjpLpmaTnq6DoioIgPSDpgInpm4bliJfooaguc3BsaXQoJyQnKVxcbumAiembhuWIl+ihqCA9IOaOkumZpOeroOiKgi5zaGlmdCgpXFxufVxcblxcbiAgICBpZiAoIeWkmui3r+e6v+WQpikge1xcbiAgICAgICAg6ZuG5pWw57uELnB1c2gocGRmYSjmupDmlbDmja4sIOmAiembhuWIl+ihqCkpXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBwZGZhKOa6kOaVsOaNriwg6YCJ6ZuG5oC75YiX6KGoKS5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgICAgICAgICDpm4bmlbDnu4QucHVzaChwZGZhKGRhdGEsIOmAiembhuWIl+ihqCkpXFxuICAgICAgICB9KTtcXG4gICAgfVxcblxcblxcbiAgICBmb3IgKGxldCBpIGluIOmbhuaVsOe7hCkge1xcblxcbiAgICAgICAgdmFyIGRvTGlzdCA9IFtdO1xcblxcbuaOkumZpOeroOiKgi5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgdmFyIOagh+ivhmlkID0g6ZuG5pWw57uEW2ldLmZpbmRJbmRleCjov5Tlm54gPT4g6L+U5ZueLmluZGV4T2YoZGF0YSkgIT0gLTEpO1xcbiAgICBpZiAo5qCH6K+GaWQgIT0gLTEpIHtcXG4gICAgICDpm4bmlbDnu4RbaV0uc3BsaWNlKOagh+ivhmlkLCAxKVxcbiAgICB9O1xcbiAgfSk7XFxuXFxuICAgICAgICBmb3IgKGxldCBpdCBvZiDpm4bmlbDnu4RbaV0pIHtcXG4gICAgICAgICAgICB2YXIgZG9MaXN0dXJsID0gcGRmaChpdCwg6ZuGdXJsKVxcbiAgICAgICAgICAgIGRvTGlzdHVybCA9IGRvTGlzdHVybC5pbmNsdWRlcyhcXFwiaHR0cFxcXCIpID8gZG9MaXN0dXJsIDog5YmN57yAICsgZG9MaXN0dXJsXFxuICAgICAgICAgICAgZG9MaXN0LnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzbWFsbD4nICsgcGRmaChpdCwg6ZuG5ZCNKSArICc8L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgIHVybDogZG9MaXN0dXJsXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHZhciBib29rTmFtZSA9ICHlpJrot6/nur/lkKYgPyDmoIfpopggOiDmoIfpopggKyAnLScgKyDliJfooajlkI1baV1cXG5cXG4gICAgICAgIOeroOiKgmpzb24ucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IOWIl+ihqOWQjVtpXSxcXG4gICAgICAgICAgICBsaXN0OiBkb0xpc3QsXFxuICAgICAgICAgICAgc2pzczoge1xcbiAgICAgICAgICAgICAgICBjaGFwdGVyTGlzdDogZG9MaXN0LFxcbiAgICAgICAgICAgICAgICBpbmZvOiB7XFxuICAgICAgICAgICAgICAgICAgICBib29rTmFtZTogYm9va05hbWUsIC8v5ryr55S75ZCN56ewLFxcbiAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWU6IE1ZX1JVTEUudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBib29rVG9wUGljOiDlm77niYcsXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGU6IGRvd25sb2FkbGF6eSxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZpZXc6IFxcXCIxXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG4gICAgcmV0dXJuIOeroOiKgmpzb25cXG59XFxuXFxuXFxuZnVuY3Rpb24g5re75Yqg5aS06YOo5YiX6KGoKGQsIOagh+mimCwg5Zu+54mHLCDmj4/ov7AsIOS9nOiAhSwg5pe26Ze0LCDliIbnsbss6aG1VVJMKSB7XFxuXFxuICAgIOagh+mimCA9ICHmoIfpopggPyAnJyA6IOagh+mimCArICdcXFxcbidcXG4gICAg5Zu+54mHID0gIeWbvueJhyA/ICcnIDog5Zu+54mHXFxuICAgIOaPj+i/sCA9ICHmj4/ov7AgPyAnJyA6IOaPj+i/sC5yZXBsYWNlKFxcXCLmm7TmlrDoh7PvvJpcXFwiLCAnJylcXG5cXG4gICAg5L2c6ICFID0gIeS9nOiAhSA/ICcnIDogJ1xcXFxuJyArIOS9nOiAhVxcbiAgICDml7bpl7QgPSAh5pe26Ze0ID8gJycgOiAnXFxcXG4nICsg5pe26Ze0XFxuICAgIOWIhuexuyA9ICHliIbnsbsgPyAnJyA6ICdcXFxcbicgKyDliIbnsbtcXG5cXG5cXG4gICAgdmFyIOWktOmDqHRpdGxlID0gWyfigJjigJjigJnigJk8Yj4nLCc8L2I+IDxzbWFsbD48Zm9udCBjb2xvcj0jRkE3Mjk4PicsJzwvZm9udD4nLCc8L3NtYWxsPiddXFxuICAgIHZhciDlpLTpg6hkZXNjID0gWyfigJjigJjigJnigJk8Zm9udCBjb2xvcj0jZjhlY2M5PicsJzwvZm9udD4nXVxcblxcblxcblxcbiAgICDlpLTpg6h0aXRsZSA9IOWktOmDqHRpdGxlWzBdK+agh+mimCvlpLTpg6h0aXRsZVsxXSvmj4/ov7Ar5aS06YOodGl0bGVbMl0r5L2c6ICFK+WktOmDqHRpdGxlWzNdXFxuXFxuICAgIOWktOmDqGRlc2MgPSDlpLTpg6hkZXNjWzBdK+aXtumXtCvliIbnsbsr5aS06YOoZGVzY1sxXVxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IOWktOmDqHRpdGxlLFxcbiAgICAgICAgZGVzYzog5aS06YOoZGVzYyxcXG4gICAgICAgIHBpY191cmw6IOWbvueJhyxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vc2VhcmNoP3M9JytnZXRQYXJhbSgnTmFtZScpKycmcnVsZT3ogZrmvKvwn5SuJyxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cidcXG4gICAgfSk7XFxuXFxufVxcblxcblxcbmZ1bmN0aW9uIOa3u+WKoOeugOS7iyhkLCDmlbDmja7mupAsIOmhtVVSTCwg5Zu+54mHKSB7XFxuICAgIC8v6I635Y+W5pWw5o2uXFxuICAgIHZhciDnroDku4vlhoXlrrkgPSDmlbDmja7mupBcXG4gICAg566A5LuL5YaF5a65ID0g566A5LuL5YaF5a65LnJlcGxhY2UoXFxcIueugOS7i++8mlxcXCIsIFxcXCJcXFwiKS5yZXBsYWNlKFxcXCLku4vnu406XFxcIiwgXFxcIlxcXCIpLnJlcGxhY2UoXFxcIua8q+eUu1xcXCIsIFxcXCJcXFwiKS5yZXBsYWNlKFxcXCLigKbigKZcXFwiLCBcXFwiXFxcIikucmVwbGFjZShcXFwi566A5LuLXFxcIiwgXFxcIlxcXCIpXFxuXFxuICAgIHZhciDnroDku4vlhoXlrrnmlLY7XFxuICAgIGlmICjnroDku4vlhoXlrrkubGVuZ3RoID4gNDUpIHtcXG4gICAgICAgIOeugOS7i+WGheWuueaUtiA9IOeugOS7i+WGheWuuS5zdWJzdHIoMCwgNDUpICsgJy4uLidcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIOeugOS7i+WGheWuueaUtiA9IOeugOS7i+WGheWuuSArICcuLi4nXFxuICAgIH1cXG5cXG4gICAgLy/lm77moIfojrflj5ZcXG4gICAgaWYgKCHlm77niYcpIHtcXG4gICAgICAgIOWbvueJhyA9ICdodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vcS8xMDcucG5nJ1xcbiAgICB9XFxuXFxuICAgIC8v6aG1VVJMIOiOt+WPllxcbiAgICBpZiAoIemhtVVSTCkge1xcbiAgICAgICAg6aG1VVJMID0gTVlfUlVMRS50aXRsZVxcbiAgICB9XFxuXFxuICAgIC8v5qCH6aKY5LiO566A5LuL5qC35byPXFxuICAgIHZhciBtenRleHQgPSBcXFwiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PHNtYWxsPueugOS7izwvc21hbGw+PGJyPlxcXCJcXG4gICAgdmFyIGJ0dGl0bGUgPSAnPGZvbnQgY29sb3I9XFxcIiMwOThBQzFcXFwiPua8q+eUu+eugOS7iyAgPC9mb250PjxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcIiNmNDc5ODNcXFwiPueugOS7i+aUtj48L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPidcXG5cXG4gICAgLy/lsZXlvIDkuI7mlLbnvKnmk43kvZxcXG4gICAgdmFyIGpqID0gZ2V0TXlWYXIo6aG1VVJMICsgXFxcIueugOS7i+aUtlxcXCIsIFxcXCLlt7LmlLbotbdcXFwiKTtcXG4gICAgdmFyIGpqdXJsID0gJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgo566A5LuL5YaF5a65LCDnroDku4vlhoXlrrnmlLYsIOaUtiwg5pS25YaF5a65LCDlvZPliY1VUkwpID0+IHtcXG4gICAgICAgIHZhciBqc2JsID0g5b2T5YmNVVJMICsgXFxcIueugOS7i+aUtlxcXCI7XFxuICAgICAgICB2YXIgamogPSBnZXRNeVZhcijlvZPliY1VUkwgKyBcXFwi566A5LuL5pS2XFxcIiwgXFxcIuW3suaUtui1t1xcXCIpO1xcbiAgICAgICAgamogPSBqaiA9PSBcXFwi5bey5pS26LW3XFxcIiA/IFxcXCLlsZXlvIBcXFwiIDogXFxcIuW3suaUtui1t1xcXCI7XFxuICAgICAgICBwdXRNeVZhcihqc2JsLCBqailcXG4gICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiDlvZPliY1VUkwgKyBcXFwiX2J0XFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgdGl0bGU6IOaUti5yZXBsYWNlKFxcXCLnroDku4vmlLZcXFwiLCBqailcXG4gICAgICAgIH0pXFxuXFxuICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDog5b2T5YmNVVJMICsgXFxcIl9telxcXCJcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHRpdGxlOiBqaiA9PSBcXFwi5bey5pS26LW3XFxcIiA/IOaUtuWGheWuuS5yZXBsYWNlKFxcXCLnroDku4tcXFwiLCDnroDku4vlhoXlrrnmlLYpIDog5pS25YaF5a65LnJlcGxhY2UoXFxcIueugOS7i1xcXCIsIOeugOS7i+WGheWuuSlcXG4gICAgICAgIH0pXFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0sIOeugOS7i+WGheWuuSwg566A5LuL5YaF5a655pS2LCBidHRpdGxlLCBtenRleHQsIOmhtVVSTClcXG5cXG5cXG4gICAgLy/moIfpophcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBidHRpdGxlLnJlcGxhY2UoXFxcIueugOS7i+aUtlxcXCIsIGpqKSxcXG4gICAgICAgIHVybDogamp1cmwsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICBwaWNfdXJsOiDlm77niYcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiDpobVVUkwgKyBcXFwiX2J0XFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG4gICAgLy/nroDku4tcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBqaiA9PSBcXFwi5bey5pS26LW3XFxcIiA/IG16dGV4dC5yZXBsYWNlKFxcXCLnroDku4tcXFwiLCDnroDku4vlhoXlrrnmlLYpIDogbXp0ZXh0LnJlcGxhY2UoXFxcIueugOS7i1xcXCIsIOeugOS7i+WGheWuuSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiDpobVVUkwgKyBcXFwiX216XFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG59XFxuXFxuZnVuY3Rpb24g5re75Yqg5YiX6KGo56ug6IqCKGQsIOagh+mimOaVsOaNriwg5YiX6KGo5pWw5o2uLCDop6PmnpDku6PnoIEsIOmhtVVSTCwg5Zu+54mHKSB7XFxuXFxuXFxuICAgIC8vZOS4juWklueVjGTvvIzkuLrlkIzlhoXlrZjlnLDlnYDvvIzkuI3nlKjov5Tlm55cXG4gICAgLy/moIfpopjmlbDmja4gIOWNs+agh+mimOWQjeWtl1xcbiAgICAvL+WIl+ihqOaVsOaNruW/hemhu+aYr0pTT04gIOagvOW8j+aYr1t7dGl0bGU6JycsdXJsOicnLH0sLi4uLi5dICDkuJR1cmzlv4XpobvmnInliY3nvIBcXG5cXG4gICAgLy/lm77moIfojrflj5ZcXG4gICAgaWYgKCHlm77niYcpIHtcXG4gICAgICAgIOWbvueJhyA9ICdodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vcS8xOC5wbmcnXFxuICAgIH1cXG5cXG4gICAgLy/pobVVUkwg6I635Y+WXFxuICAgIGlmICgh6aG1VVJMKSB7XFxuICAgICAgICDpobVVUkwgPSBNWV9SVUxFLnRpdGxlXFxuICAgIH1cXG5cXG4gICAgLy/moIfpopjlkI1cXG4gICAgdmFyIOagh+mimOWQjSA9ICc8Yj7ot6/nur88L2I+ICA8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPSNmOTkwNmY+5o6S5bqPID48L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPidcXG5cXG5cXG4gICAgdmFyIOaOkuW6jyA9IGdldE15VmFyKOmhtVVSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCBcXFwi5q2j5bqPXFxcIik7XFxuICAgIHZhciDmj5DnpLogPSDmjpLluo8gPT0gJ+WAkuW6jycgPyAn5q2j5bqPJyA6ICflgJLluo8nO1xcblxcbiAgICB2YXIg5o6S5bqPdXJsID0gJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgo5qCH6aKY5ZCNLCDmoIfpopjmlbDmja4sIOWIl+ihqOaVsOaNriwg6Kej5p6Q5Luj56CBLCDpobVVUkwpID0+IHtcXG4gICAgICAgIHZhciDmjpLluo8gPSBnZXRNeVZhcijpobVVUkwgKyBcXFwi56ug6IqC5o6S5bqPXFxcIiwgXFxcIuato+W6j1xcXCIpO1xcbiAgICAgICAgdmFyIOaPkOekuiA9IOaOkuW6jyA9PSAn5YCS5bqPJyA/ICfmraPluo8nIDogJ+WAkuW6jyc7XFxuICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDog6aG1VVJMICsgXFxcIl/mjpLluo9cXFwiXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB0aXRsZTog5qCH6aKY5ZCNLnJlcGxhY2UoJ+i3r+e6vycsIOagh+mimOaVsOaNrikucmVwbGFjZSgn5o6S5bqPJywg5o+Q56S6KVxcbiAgICAgICAgfSlcXG5cXG5cXG4gICAgICAgIGlmICjmj5DnpLogPT0gJ+WAkuW6jycpIHtcXG4gICAgICAgICAgICDliJfooajmlbDmja4ucmV2ZXJzZSgpXFxuICAgICAgICB9XFxuICAgICAgICDliJfooajmlbDmja4uZm9yRWFjaChmdW5jdGlvbihkYXRhLCBzc2lkKSB7XFxuICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6IGRhdGEudXJsICsg6Kej5p6Q5Luj56CBLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IOmhtVVSTCArIFxcXCJf6YCJ6ZuGXFxcIiArIHNzaWRcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuXFxuXFxuICAgICAgICBwdXRNeVZhcijpobVVUkwgKyBcXFwi56ug6IqC5o6S5bqPXFxcIiwg5o+Q56S6KVxcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICB9LCDmoIfpopjlkI0sIOagh+mimOaVsOaNriwg5YiX6KGo5pWw5o2uLCDop6PmnpDku6PnoIEsIOmhtVVSTClcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiDmoIfpopjlkI0ucmVwbGFjZSgn6Lev57q/Jywg5qCH6aKY5pWw5o2uKS5yZXBsYWNlKCfmjpLluo8nLCDmjpLluo8pLFxcbiAgICAgICAgcGljX3VybDog5Zu+54mHLFxcbiAgICAgICAgdXJsOiDmjpLluo91cmwsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiDpobVVUkwgKyBcXFwiX+aOkuW6j1xcXCJcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgIGlmICjmjpLluo8gPT0gJ+WAkuW6jycpIHtcXG4gICAgICAgIOWIl+ihqOaVsOaNri5yZXZlcnNlKClcXG4gICAgfVxcblxcbiAgICDliJfooajmlbDmja4uZm9yRWFjaChmdW5jdGlvbihkYXRhLCBpZCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6IGRhdGEudXJsICsg6Kej5p6Q5Luj56CBLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDog6aG1VVJMICsgXFxcIl/pgInpm4ZcXFwiICsgaWRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxuXFxufVxcblxcbi8qXFxuZnVuY3Rpb24g5re75Yqg6Ziy5q2i572R6aG1KOmhuXVybCwgVUEpIHtcXG5cXG4gICAgLy/kuIrnuqfot7PovazliLDlvZPliY3pobXnmoTpk77mjqXlv4XpobvmmK9oaWtlcjovL2VtcHR577yb5LiN54S25LiA5Yi35paw6L+Y5piv5Lya6YeN5aSN5Yqg6L29XFxuICAgIC8vVUEgJyfmiJZmYWxzZeaIlifmiYvmnLonIOm7mOiupOaYr+aJi+acuuerryA7IOeUteiEkSAnUEMnXFxuXFxuICAgIHZhciDliLfmlrDph43lpI0gPSBNWV9SVUxFLnRpdGxlICsgXFxcIue9kemhtea6kOeggVxcXCJcXG4gICAgdmFyIHBj6ZO+5o6lID0g6aG5dXJsLnJlcGxhY2UoXFxcIm0uXFxcIiwgXFxcInd3dy5cXFwiKVxcbiAgICB2YXIg5omL5py66ZO+5o6lID0g6aG5dXJsLnJlcGxhY2UoXFxcInd3dy5cXFwiLCBcXFwibS5cXFwiKVxcblxcbiAgICB2YXIgY29kZTtcXG4gICAgaWYgKGdldE15VmFyKOWIt+aWsOmHjeWkjSwgXFxcImZhbHNlXFxcIikgPT0gXFxcImZhbHNlXFxcIikge1xcblxcbiAgICAgICAgY29kZSA9IFVBID09ICdQQycgPyBmZXRjaChwY+mTvuaOpSkgOiByZXF1ZXN0KOaJi+acuumTvuaOpSk7XFxuICAgICAgICBwdXRNeVZhcijliLfmlrDph43lpI0sIGdldFBhcmFtKCd1cmwnKSArIFxcXCLvv6Um77+lXFxcIiArIGNvZGUpXFxuXFxuICAgIH0gZWxzZSB7XFxuXFxuICAgICAgICB2YXIgcG0gPSBnZXRNeVZhcijliLfmlrDph43lpI0pLnNwbGl0KFxcXCLvv6Um77+lXFxcIilcXG4gICAgICAgIGlmIChwbVswXSA9PSBnZXRQYXJhbSgndXJsJykpIHtcXG4gICAgICAgICAgICBjb2RlID0gcG1bMV1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY29kZSA9IFVBID09ICdQQycgPyBmZXRjaChwY+mTvuaOpSkgOiByZXF1ZXN0KOaJi+acuumTvuaOpSk7XFxuICAgICAgICAgICAgcHV0TXlWYXIo5Yi35paw6YeN5aSNLCBnZXRQYXJhbSgndXJsJykgKyBcXFwi77+lJu+/pVxcXCIgKyBjb2RlKVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBjb2RlXFxufVxcbiovXFxuXFxuZnVuY3Rpb24g5re75Yqg6YCJ5oup6Lev57q/KGQsIOi3r+e6v+aVsOaNriwg6aG1VVJMLCDlpJrot6/nur/lkKYpIHtcXG5cXG4gICAgLy/ot6/nur/mlbDmja4g5qC85byPW3t0aXRsZTon6Lev57q/5ZCNJ30sLi4uLl1cXG4gICAgLy/lpJrot6/nur/lkKYgIGZhbHNlIOWImeS4jeWQr+eUqOmAieaLqei3r+e6v++8m3RydWUg5YiZ5ZCv55SoXFxuXFxuICAgIHZhciDpgInmi6nliJfooaggPSBnZXRJdGVtKOmhtVVSTCArIFxcXCLpgInmi6nliJfooahcXFwiLCBcXFwiMFxcXCIpXFxuXFxuICAgIGlmICjlpJrot6/nur/lkKYpIHtcXG5cXG4gICAgICAgIHZhciDot6/nur/pgInkuK0gPSAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9IzA5OEFDMT7pgInkuK08L2ZvbnQ+J1xcblxcblxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmfCfk5Y8Zm9udCBjb2xvcj1cXFwiI0ZBNzI5OFxcXCI+IOWbvua6kOWIl+ihqDwvZm9udD4g77yaJyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJ0b2FzdDovL+eCueaIkeW5suWVpeWRolxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXG4gICAgICAgIH0pO1xcblxcblxcbiAgICAgICAg6Lev57q/5pWw5o2uLmZvckVhY2goZnVuY3Rpb24oZGF0YSwgaWQpIHtcXG5cXG4gICAgICAgICAgICB2YXIgamp1cmwgPSAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCjpobVVUkwsaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbSjpobVVUkwgKyAn6YCJ5oup5YiX6KGoJyxpZCsnJyk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICB9LOmhtVVSTCxpZCk7XFxuXFxuICAgICAgICAgICAgdmFyIOagh+mimOWQjSA9IGlkID09IOmAieaLqeWIl+ihqCA/IOi3r+e6v+mAieS4rS5yZXBsYWNlKCfpgInkuK0nLCBkYXRhLnRpdGxlKSA6IGRhdGEudGl0bGU7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IOagh+mimOWQjSxcXG4gICAgICAgICAgICAgICAgdXJsOiBqanVybCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDog6aG1VVJMICsgXFxcIl/ot6/nur9cXFwiICsgaWRcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuXFxuICAgIH1cXG4gICAgcmV0dXJuIOmAieaLqeWIl+ihqFxcbn1cXG5cXG5cXG5mdW5jdGlvbiDmt7vliqDpgInmi6nkuIvovb0oZCwg6Lev57q/5pWw5o2uLCDlpJrot6/nur/lkKYpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJnwn5ezPGZvbnQgY29sb3I9XFxcIiNmNDc5ODNcXFwiPiDkuabmnrY8L2ZvbnQ+ICcsXFxuICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9Cb29rcmFjay52aWV3P3J1bGU95pys5Zyw6LWE5rqQ566h55CGJnJ1bGVOYW1lPVxcXCIrTVlfUlVMRS50aXRsZSxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbn0pO1xcblxcbiAgICAvL+i3r+e6v+aVsOaNriDmoLzlvI9be3RpdGxlOifot6/nur/lkI0nLHNqc3M6J+S4i+i9vei1hOaWmeS/oeaBryd9LC4uLi5dXFxuICAgIC8v5aSa6Lev57q/5ZCmICBmYWxzZSDliJnlj6rmnInikaDkuKrkuIvovb0g5qCH6aKY5Li6IOeCueWHu+S4i+i9ve+8m3RydWUg5YiZ5aSa5Liq5LiL6L29XFxuXFxuaWYo5aSa6Lev57q/5ZCmKXtcXG5cXG5kLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJnwn5OlPGZvbnQgY29sb3I9XFxcIiNmNDc5ODNcXFwiPiDkuIvovb08L2ZvbnQ+IO+8micsXFxuICAgICAgICB1cmw6IFxcXCJ0b2FzdDovL+eCueaIkeW5suWVpeWRolxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0pO1xcblxcbn1cXG5cXG4gICAg6Lev57q/5pWw5o2uLmZvckVhY2goZnVuY3Rpb24oZGF0YSwgaWQpIHtcXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUuaW5jbHVkZXMoJ+eroOiKguWIl+ihqCcpID8gJ+eCueWHu+S4i+i9vScgOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9kb3dubG9hZC52aWV3I25vUmVjb3JkSGlzdG9yeSMjbm9SZWZyZXNoIyNub0hpc3RvcnkjP3J1bGU95pys5Zyw6LWE5rqQ566h55CGJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIGV4dHJhOiBkYXRhLnNqc3NcXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG5cXG4gICAgaWYgKOWkmui3r+e6v+WQpikge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcblxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIkNTU+mAieaLqeWZqOaooeeJiCpcIixcInBhdGhcIjpcImVqd2IuanNcIixcInJ1bGVcIjpcImZ1bmN0aW9uIOS4gOe6pyjliJfooagsIOagh+mimCwg5Zu+54mHLCDpm4bmlbAsIOmTvuaOpSwg6K6/6Zeu5aS0KSB7XFxuICAgIOiuv+mXruWktCA9ICHorr/pl67lpLQgPyAnJyA6IOiuv+mXruWktFxcbiAgICB2YXIgZCA9IFtdO1xcbiAgICB2YXIgY29kZSA9IGdldENvZGUoKVxcbiAgICBwZGZhKGNvZGUsIOWIl+ihqCkuZm9yRWFjaChmdW5jdGlvbihkYXRhKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGRhdGEsIOagh+mimCksXFxuICAgICAgICAgICAgZGVzYzogcGRmaChkYXRhLCDpm4bmlbApLFxcbiAgICAgICAgICAgIHBpY191cmw6IHBkKGRhdGEsIOWbvueJhyl8fOWbvueJhyArIFxcXCJAUmVmZXJlcj1cXFwiICsg6K6/6Zeu5aS0LFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHkjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSMnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfM1xcXCIsXFxuZXh0cmE6IHtcXG4gICAgICAgICAgICBuYW1lOiBwZGZoKGRhdGEsIOagh+mimCksXFxuICAgICAgICAgICAgdXJsOiBwZChkYXRhLCDpk77mjqUpLFxcbiAgICAgICAgICAgIHF6OiBNWV9IT01FXFxuICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxuICAgIHNldFJlc3VsdChkKTtcXG59XFxuXFxuXFxuXFxuZnVuY3Rpb24g5pCc57SiKOWIl+ihqCwg5qCH6aKYLCDpk77mjqUsIOaPj+i/sCwg6K+m5oOFLCDlm77niYcsIOiuv+mXruWktCkge1xcbiAgICB2YXIgZCA9IFtdO1xcbiAgICDorr/pl67lpLQgPSAh6K6/6Zeu5aS0ID8gJycgOiDorr/pl67lpLRcXG4gICAgcGRmYShnZXRSZXNDb2RlKCksIOWIl+ihqCkuZm9yRWFjaChmdW5jdGlvbihkYXRhKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGRhdGEsIOagh+mimCksXFxuICAgICAgICAgICAgZGVzYzogcGRmaChkYXRhLCDmj4/ov7ApLFxcbiAgICAgICAgICAgIHBpY191cmw6IHBkKGRhdGEsIOWbvueJhykgKyBcXFwiQFJlZmVyZXI9XFxcIiArIOiuv+mXruWktCxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5I2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjJyxcXG4gICAgICAgICAgICBjb250ZW50OiBwZGZoKGRhdGEsIOivpuaDhSksXFxuXFxuZXh0cmE6IHtcXG4gICAgICAgICAgICBuYW1lOiBwZGZoKGRhdGEsIOagh+mimCksXFxuICAgICAgICAgICAgdXJsOiBwZChkYXRhLCDpk77mjqUpLFxcbiAgICAgICAgICAgIHF6OiBNWV9IT01FXFxuICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxuICAgIHNldFJlc3VsdChkKTtcXG59XFxuXFxuXFxuXFxuXFxuZnVuY3Rpb24g5pyA5pawKOmAieaLqeWZqCwgVUEpIHtcXG4gICAgaWYgKFVBID09IFxcXCJQQ1xcXCIpIHtcXG4gICAgICAgIHZhciBjb2RlID0gZmV0Y2goZ2V0UGFyYW0oJ3VybCcpLnJlcGxhY2UoXFxcIm0uXFxcIiwgXFxcInd3dy5cXFwiKSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgY29kZSA9IHJlcXVlc3QoZ2V0UGFyYW0oJ3VybCcpLnJlcGxhY2UoXFxcInd3dy5cXFwiLCBcXFwibS5cXFwiKSk7XFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KHBkZmgoY29kZSwg6YCJ5oup5ZmoKSlcXG59XFxuXFxuXFxuXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vcGFnZS9xcz9ydWxlPeiBmua8q/CflK5cXFwiKSkucnVsZSlcXG5cXG5mdW5jdGlvbiDkuoznuqco5aS06YOo5YiX6KGoLCDmoIfpopgsIOWbvueJhywg5o+P6L+wLCDorr/pl67lpLQsIOS9nOiAhSwg5pe26Ze0LCDliIbnsbssIOeugOS7iywg5aSa6Lev57q/5ZCmLCDot6/nur/liJfooagsIOi3r+e6v+WQjSwg6YCJ6ZuG5oC75YiX6KGoLCDpgInpm4bliJfooagsIOmbhuWQjSwg6ZuGdXJsLCBkb3dubG9hZGxhenks5b2T5YmNVVJMLOW9k+WJjemhteWQjSzliY3nvIAsVUEs6Ziy6YeN6L295ZCmKSB7XFxuICAgIHZhciBkID0gW107XFxuXFxuLy/lpLTpg6jliJfooaggIOWImem7mOiupOS9v+eUqCBjb2RlIOadpeS9nOS4uuWktOmDqOWIl+ihqOaVsOaNrlxcbi8v5aSa6Lev57q/5ZCmICB0cnVlIOWImeS9v+eUqOWkmui3r+e6v++8m2ZhbHNlIOWImeS9v+eUqOeroOi3r+e6v1xcbi8vVUEgIOS4jeWhq+WImeS9v+eUqOaJi+acuuerryAgJ1BDJ+WImeaJi+acuuerr1xcblxcbmlmICjlvZPliY3pobXlkI0pIHtcXG4gICAgc2V0UGFnZVRpdGxlKOW9k+WJjemhteWQjSlcXG59XFxuXFxuaWYo6Ziy6YeN6L295ZCmKXtcXG4vL+e9kemhteWGheWuuSvpmLLmraLph43mi4lcXG4gICAgdmFyIGNvZGUgPSDmt7vliqDpmLLmraLnvZHpobUo5b2T5YmNVVJMLCBVQSlcXG59ZWxzZXtcXG4gICAgdmFyIGNvZGUgPSBnZXRDb2RlKClcXG59XFxuICAgIFxcblxcbiAgICAvL+WktOmDqOWIl+ihqOaVsOaNrlxcbiAgICB2YXIg5aS06YOoID0gIeWktOmDqOWIl+ihqCA/IGNvZGUgOiBwZGZhKGNvZGUsIOWktOmDqOWIl+ihqClbMF07XFxuICAgIOagh+mimCA9IHBkZmgo5aS06YOoLCDmoIfpopgpXFxuICAgIOWbvueJhyA9IHBkZmgo5aS06YOoLCDlm77niYcpfHzlm77niYdcXG4gICAgaWYgKOWbvueJhykge1xcbiAgICAgICAg5Zu+54mHID0g5Zu+54mHLmluY2x1ZGVzKCdodHRwJykgPyDlm77niYcgOiDliY3nvIAgKyDlm77niYdcXG4gICAgICAgIGlmICgh6K6/6Zeu5aS0KSB7fSBlbHNlIGlmICjorr/pl67lpLQuc3Vic3RyKDAsIDEpID09ICdAJykge1xcbiAgICAgICAgICAgIOWbvueJhyA9IOWbvueJhyArIOiuv+mXruWktFxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICDlm77niYcgPSDlm77niYcgKyBcXFwiQFJlZmVyZXI9XFxcIiArIOiuv+mXruWktFxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIFxcblxcbuaPj+i/sCA9IOaPj+i/sC5pbmNsdWRlcygnJCcpID8g5o+P6L+wLnNwbGl0KCckJylbMV0gKyBwZGZoKOWktOmDqCwg5o+P6L+wLnNwbGl0KCckJylbMF0pIDogcGRmaCjlpLTpg6gsIOaPj+i/sClcXG5cXG7kvZzogIUgPSDkvZzogIUuaW5jbHVkZXMoJyQnKSA/IOS9nOiAhS5zcGxpdCgnJCcpWzFdICsgcGRmaCjlpLTpg6gsIOS9nOiAhS5zcGxpdCgnJCcpWzBdKSA6IHBkZmgo5aS06YOoLCDkvZzogIUpXFxuICAgIFxcbuaXtumXtCA9IOaXtumXtC5pbmNsdWRlcygnJCcpID8g5pe26Ze0LnNwbGl0KCckJylbMV0gKyBwZGZoKOWktOmDqCwg5pe26Ze0LnNwbGl0KCckJylbMF0pIDogcGRmaCjlpLTpg6gsIOaXtumXtClcXG5cXG7liIbnsbsgPSDliIbnsbsuaW5jbHVkZXMoJyQnKSA/IOWIhuexuy5zcGxpdCgnJCcpWzFdICsgcGRmaCjlpLTpg6gsIOWIhuexuy5zcGxpdCgnJCcpWzBdKSA6IHBkZmgo5aS06YOoLCDliIbnsbspXFxuXFxuICAgIFxcbiAgICAvL+WktOmDqOWIl+ihqFxcbiAgICDmt7vliqDlpLTpg6jliJfooagoZCwg5qCH6aKYLCDlm77niYcsIOaPj+i/sCwg5L2c6ICFLCDml7bpl7QsIOWIhuexuyzlvZPliY1VUkwpXFxuICAgIFxcbiAgICAvL+i3r+e6v+WQjeS4jumAiembhuaVsOaNrlxcbiAgICB2YXIg56ug6IqCanNvbiA9IOS8mOWMlui3r+e6v+eroOiKguaVsOaNrijlpJrot6/nur/lkKYsIGNvZGUsIOi3r+e6v+WIl+ihqCzot6/nur/lkI0s6YCJ6ZuG5oC75YiX6KGoLOmAiembhuWIl+ihqCzpm4blkI0s6ZuGdXJsLOWJjee8gCzlvZPliY3pobXlkI0s5Zu+54mHKVxcblxcbiAgICAvL+eugOS7i1xcbiAgICDmt7vliqDnroDku4soZCwgcGRmaChjb2RlLCDnroDku4spLCDlvZPliY1VUkwsICcnKVxcblxcbiAgIC8v5b2T5rKh5pyJ56ug6IqC5YaF5a6577yM5bCx5LiN5pi+56S6XFxuICAgIGlmICjnq6DoioJqc29uLmxlbmd0aCA+IDApIHtcXG5cXG4gICAgICAgIC8v6Lev57q/6YCJ5oupXFxuICAgICAgICB2YXIg6YCJ5oup5YiX6KGoID0g5re75Yqg6YCJ5oup6Lev57q/KGQsIOeroOiKgmpzb24sIOW9k+WJjVVSTCwg5aSa6Lev57q/5ZCmKVxcblxcbiAgICAgICAgLy/pgInmi6nkuIvovb1cXG4gICAgICAgIOa3u+WKoOmAieaLqeS4i+i9vShkLCDnq6DoioJqc29uLOWkmui3r+e6v+WQpilcXG5cXG4gICAgICAgIC8v5o6S5bqP5LiO6YCJ6ZuGXFxuICAgICAgICDmt7vliqDliJfooajnq6DoioIoZCwg56ug6IqCanNvblvpgInmi6nliJfooahdLnRpdGxlLCDnq6DoioJqc29uW+mAieaLqeWIl+ihqF0ubGlzdCwgbGF6eSwg5b2T5YmNVVJMLCAnJylcXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsb25nX3RleHRcXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZClcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqfliJfooagqXCIsXCJwYXRoXCI6XCJlamxiXCIsXCJydWxlXCI6XCJ2YXIgdGFicyA9IFtdXFxudmFyIGxpc3RzID0gW11cXG52YXIgYXJ0cyA9IHBkZmEoaHRtbCwg57q/6LevKTtcXG5hcnRzLmZvckVhY2goKGRhdGEsIGlkKSA9PiB7XFxuICAgIHRhYnMucHVzaChwZGZoKGRhdGEsIOe6v+i3r+WQjSkpXFxufSlcXG52YXIgY29udHMgPSBwZGZhKGh0bWwsIOmAiembhik7XFxuY29udHMuZm9yRWFjaCgoZGF0YSwgaWQpID0+IHtcXG4gICAgbGlzdHMucHVzaChwZGZhKGRhdGEsIOmAiembhuWIl+ihqCkpXFxufSlcXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhck15VmFyKFxcXCJsaXN0c1xcXCIpO1xcbn0pKTtcXG5zdG9yYWdlMC5wdXRNeVZhcihcXFwibGlzdHNcXFwiLCBsaXN0cyk7XFxudmFyIGxpc3QgPSBsaXN0c1tnZXRNeVZhcihNWV9VUkwsICcwJyldO1xcbnZhciDmjpLluo8gPSBnZXRNeVZhcihNWV9VUkwgKyBcXFwi56ug6IqC5o6S5bqPXFxcIiwgJyMxYWFkMTlcXFwiPuato+W6jycpO1xcbnZhciDmj5DnpLogPSDmjpLluo8gPT0gJyNGRjAwMDBcXFwiPuWAkuW6jycgPyAnIzFhYWQxOVxcXCI+5q2j5bqPJyA6ICcjRkYwMDAwXFxcIj7lgJLluo8nO1xcbnZhciDmjpLluo/lkI0gPSAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOuaOkuW6jzwvc3Bhbj48L2I+J1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiAnICsg5o6S5bqPICsgJzwvc3Bhbj48L2I+JyxcXG4gICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCjmjpLluo/lkI0sIGxhenkpID0+IHtcXG4gICAgICAgIHZhciBsaXN0cyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJsaXN0c1xcXCIpO1xcbiAgICAgICAgdmFyIOeroOiKgiA9IGxpc3RzW2dldE15VmFyKE1ZX1VSTCwgJzAnKV07XFxuICAgICAgICB2YXIg5o6S5bqPID0gZ2V0TXlWYXIoTVlfVVJMICsgXFxcIueroOiKguaOkuW6j1xcXCIsICcjMWFhZDE5XFxcIj7mraPluo8nKTtcXG4gICAgICAgIHZhciDmj5DnpLogPSDmjpLluo8gPT0gJyNGRjAwMDBcXFwiPuWAkuW6jycgPyAnIzFhYWQxOVxcXCI+5q2j5bqPJyA6ICcjRkYwMDAwXFxcIj7lgJLluo8nO1xcbiAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IE1ZX1VSTCArIFxcXCJf5o6S5bqPXFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgdGl0bGU6IOaOkuW6j+WQjS5yZXBsYWNlKCfmjpLluo8nLCDmj5DnpLopXFxuICAgICAgICB9KVxcbiAgICAgICAgaWYgKOaOkuW6jyA9PSAnIzFhYWQxOVxcXCI+5q2j5bqPJykge1xcbiAgICAgICAgICAgIOeroOiKgi5yZXZlcnNlKClcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBjcCA9IOeroOiKgi5tYXAoKGRhdGEsIHNzaWQpID0+IHtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChkYXRhLCAnYSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkKGRhdGEsICdhJiZocmVmJykgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1VSTCArIFxcXCJf6YCJ6ZuGXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKE1ZX1VSTCArIFxcXCJf6YCJ6ZuGXFxcIik7XFxuICAgICAgICBhZGRJdGVtQmVmb3JlKE1ZX1VSTCArIFxcXCJmb290ZXJcXFwiLCBjcCk7XFxuICAgICAgICBwdXRNeVZhcihNWV9VUkwgKyBcXFwi56ug6IqC5o6S5bqPXFxcIiwg5o+Q56S6KVxcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICB9LCDmjpLluo/lkI0sIGxhenkpLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IE1ZX1VSTCArIFxcXCJf5o6S5bqPXFxcIlxcbiAgICB9XFxufSlcXG50YWJzLmZvckVhY2goKGRhdGEsIGlkKSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZ2V0TXlWYXIoTVlfVVJMLCAnMCcpID09IGlkID8gJ+KAnOKAnCcgKyBkYXRhICsgJ+KAneKAnScgOiBkYXRhLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCjnur/ot68sIGxhenksIGlkKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGxpc3RzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImxpc3RzXFxcIik7XFxuICAgICAgICAgICAgdmFyIOaOkuW6jyA9IGdldE15VmFyKE1ZX1VSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCAnIzFhYWQxOVxcXCI+5q2j5bqPJyk7XFxuICAgICAgICAgICAgdmFyIOaPkOekuiA9IOaOkuW6jyA9PSAnI0ZGMDAwMFxcXCI+5YCS5bqPJyA/ICcjMWFhZDE5XFxcIj7mraPluo8nIDogJyNGRjAwMDBcXFwiPuWAkuW6jyc7XFxuXFxuICAgICAgICAgICAg57q/6LevLmZvckVhY2goKGRhdGEsIHhsaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaWQgPT0geGxpZCA/ICfigJzigJwnICsgZGF0YSArICfigJ3igJ0nIDogZGF0YSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IE1ZX1VSTCArIFxcXCJf57q/6LevXFxcIiArIHhsaWRcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBwdXRNeVZhcihNWV9VUkwsIGlkKVxcbiAgICAgICAgICAgIHZhciDnq6DoioIgPSBsaXN0c1tnZXRNeVZhcihNWV9VUkwsICcwJyldO1xcbiAgICAgICAgICAgIGlmICjmjpLluo8gPT0gJyNGRjAwMDBcXFwiPuWAkuW6jycpIHtcXG4gICAgICAgICAgICAgICAg56ug6IqCLnJldmVyc2UoKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgY3AgPSDnq6DoioIubWFwKChkYXRhLCBzc2lkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChkYXRhLCAnYSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBwZChkYXRhLCAnYSYmaHJlZicpICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBNWV9VUkwgKyBcXFwiX+mAiembhlxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoTVlfVVJMICsgXFxcIl/pgInpm4ZcXFwiKTtcXG4gICAgICAgICAgICBhZGRJdGVtQmVmb3JlKE1ZX1VSTCArIFxcXCJmb290ZXJcXFwiLCBjcCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSwgdGFicywgbGF6eSwgaWQpLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IE1ZX1VSTCArIFxcXCJf57q/6LevXFxcIiArIGlkXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0pXFxuXFxuaWYgKOaOkuW6jyA9PSAnI0ZGMDAwMFxcXCI+5YCS5bqPJykge1xcbiAgICBsaXN0LnJldmVyc2UoKVxcbn1cXG5saXN0LmZvckVhY2goKGRhdGEsIGlkKSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChkYXRhLCAnYSYmVGV4dCcpLFxcbiAgICAgICAgdXJsOiBwZChkYXRhLCAnYSYmaHJlZicpICsgbGF6eSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgY2xzOiBNWV9VUkwgKyBcXFwiX+mAiembhlxcXCJcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufSlcXG5sZXQgbmV3c3RpcCA9IGxpc3QubGVuZ3RoO1xcbmlmIChuZXdzdGlwKSB7XFxuICAgIHNldExhc3RDaGFwdGVyUnVsZSgnanM6JyArICQudG9TdHJpbmcoKG5ld3N0aXApID0+IHtcXG4gICAgICAgIHNldFJlc3VsdCgn5pu05paw6IezOiDnrKwnICsgbmV3c3RpcCArIFxcXCLpm4ZcXFwiKTtcXG4gICAgfSwgbmV3c3RpcCkpO1xcbn1cXG5cXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImJpZ19ibGFua19ibG9ja1xcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogTVlfVVJMICsgXFxcImZvb3RlclxcXCJcXG4gICAgfVxcbn0pO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi546v5aKD5Yqr5oyBXCIsXCJwYXRoXCI6XCJoaWphY2tFbnZcIixcInJ1bGVcIjpcInZhciB7IFJVTEUsIGlzSW5kZXgsIHBhZ2VUaXRsZSB9ID0gTVlfUEFSQU1TXFxuUlVMRSA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKFJVTEUpKVxcbnZhciBvcmlSVUxFID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRSkuZmluZCgodikgPT4gdi50aXRsZSA9PSBSVUxFLnRpdGxlKVxcbmlmIChpc0luZGV4KSB7XFxuICAgIFJVTEUgPSBvcmlSVUxFXFxuICAgIHZhciB7IHRhYkhlYWRlciwgZnlBbGwgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0NsYXNzVGFiP3J1bGU9JyArIFFJTkdfVElUTEUsIE9iamVjdC5hc3NpZ24oeyBRSU5HX1RJVExFOiBRSU5HX1RJVExFIH0sIFJVTEUpKVxcbiAgICAvLyDlpITnkIZNWV9SVUxFXFxuICAgIE1ZX1JVTEUuY2xhc3NfdXJsID0gdGFiSGVhZGVyLmdldENsYXNzKGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeWNsYXNzJykudXJsXFxuICAgIE1ZX1JVTEUuYXJlYV91cmwgPSBmeUFsbCA/IE1ZX1JVTEUuY2xhc3NfdXJsIDogdGFiSGVhZGVyLmdldENsYXNzKCdmeWFyZWEnKS51cmxcXG4gICAgTVlfUlVMRS55ZWFyX3VybCA9IGZ5QWxsID8gTVlfUlVMRS5jbGFzc191cmwgOiB0YWJIZWFkZXIuZ2V0Q2xhc3MoJ2Z5eWVhcicpLnVybFxcbiAgICBNWV9SVUxFLnNvcnRfdXJsID0gZnlBbGwgPyBNWV9SVUxFLmNsYXNzX3VybCA6IHRhYkhlYWRlci5nZXRDbGFzcygnZnlzb3J0JykudXJsXFxuICAgIE1ZX1JVTEUudXJsID0gUlVMRS51cmxcXG4gICAgTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuY29sX3R5cGVcXG4gICAgTVlfUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBSVUxFLmRldGFpbF9jb2xfdHlwZVxcbiAgICBNWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuZmluZF9ydWxlXFxuICAgIE1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZVxcbiAgICBNWV9SVUxFLnBhcmFtcyA9IHt9XFxufSBlbHNlIHtcXG4gICAgUlVMRS5wYWdlcyA9IG9yaVJVTEUucGFnZXNcXG4gICAgLy8g5aSE55CGTVlfUlVMRVxcbiAgICBNWV9SVUxFLnVybCA9IE1ZX1BBUkFNUy51cmxcXG4gICAgTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxuICAgIE1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxuICAgIE1ZX1JVTEUucGFyYW1zID0gUlVMRS5wYXJhbXNcXG59XFxuTVlfUlVMRS5wYWdlcyA9IFJVTEUucGFnZXNcXG5NWV9SVUxFLnBhZ2VMaXN0ID0gSlNPTi5wYXJzZShNWV9SVUxFLnBhZ2VzIHx8ICdbXScpXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXG5NWV9SVUxFLnVhID0gUlVMRS51YVxcbmxvZyhNWV9SVUxFLnVybClcXG4vLyDovb3lhaXlh73mlbDlt6XlhbdcXG52YXIgeyBnZW5NeVJ1bGUgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2Z1bmNUb29scz9ydWxlPScgKyBRSU5HX1RJVExFLCB7XFxuICAgIFFJTkdfVElUTEU6IFFJTkdfVElUTEUsXFxuICAgIE1ZX1JVTEU6IE1ZX1JVTEUsXFxuICAgIGlzSW5kZXg6IGlzSW5kZXhcXG59KVxcbi8vIOmYsuatonJlcXVpcmXlpJrmrKHov5DooYxcXG5jb25zdCBteUNvbGxfcmVxdWlyZWQgPSB7fVxcbnJlcXVpcmUgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCkge1xcbiAgICBpZiAobXlDb2xsX3JlcXVpcmVkW3BhcmFtMF0pIHJldHVyblxcbiAgICBteUNvbGxfcmVxdWlyZWRbcGFyYW0wXSA9IHRydWVcXG4gICAgcGFyYW0yID0gcGFyYW0yICE9IG51bGwgPyBwYXJhbTIgOiAwXFxuICAgIHBhcmFtMyA9IE1ZX1RJQ0tFVFxcbiAgICBwYXJhbTQgPSBldmFsXFxuICAgIHJldHVybiBtZXRob2RfcmVxdWlyZS5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00KVxcbn1cXG5yZXF1aXJlQ2FjaGUgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01KSB7XFxuICAgIGlmIChteUNvbGxfcmVxdWlyZWRbcGFyYW0wXSkgcmV0dXJuXFxuICAgIG15Q29sbF9yZXF1aXJlZFtwYXJhbTBdID0gdHJ1ZVxcbiAgICBwYXJhbTMgPSBwYXJhbTMgIT0gbnVsbCA/IHBhcmFtMyA6IDBcXG4gICAgcGFyYW00ID0gTVlfVElDS0VUXFxuICAgIHBhcmFtNSA9IGV2YWxcXG4gICAgcmV0dXJuIG1ldGhvZF9yZXF1aXJlQ2FjaGUuaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01KVxcbn1cXG5yYyA9IHJlcXVpcmVDYWNoZVxcbi8vIOacgOaWsOeroOiKguinhOWImeeOr+Wig+WKq+aMgVxcbnNldExhc3RDaGFwdGVyUnVsZSA9IGZ1bmN0aW9uKHBhcmFtMCkge1xcbiAgICBpZiAocGFyYW0wLnN0YXJ0c1dpdGgoXFxcImpzOlxcXCIpKSB7XFxuICAgICAgICBwYXJhbTAgPSAnanM6JyArICQudG9TdHJpbmcoKFFJTkdfVElUTEUsIE1ZX1BBUkFNUykgPT4ge1xcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2hpamFja0Vudj9ydWxlPScgKyBRSU5HX1RJVExFKSkucnVsZSlcXG4gICAgICAgICAgICB2YXIgeyBydW5QcmVSdWxlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9mdW5jVG9vbHM/cnVsZT0nICsgUUlOR19USVRMRSlcXG4gICAgICAgICAgICBydW5QcmVSdWxlKG9yaVJVTEUucHJlUnVsZSlcXG4gICAgICAgIH0sIFFJTkdfVElUTEUsIHsgdXJsOiBNWV9SVUxFLnVybCwgUlVMRTogYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGdlbk15UnVsZSgpKSksIGlzSW5kZXg6IGlzSW5kZXggfSkgKyAnOycgKyBwYXJhbTAuc2xpY2UoMylcXG4gICAgfVxcbiAgICBtZXRob2Rfc2V0TGFzdENoYXB0ZXJSdWxlLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wKVxcbn1cXG4vLyDliqjmgIHmlrDlop7lh73mlbDliqvmjIFcXG5hZGRJdGVtQWZ0ZXIgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSkge1xcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbTEpKSBwYXJhbTEgPSBwYXJhbTEubWFwKGhpamFja0VsKVxcbiAgICBlbHNlIHBhcmFtMSA9IGhpamFja0VsKHBhcmFtMSlcXG4gICAgbWV0aG9kX2FkZEl0ZW1BZnRlci5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xKVxcbn1cXG5hZGRJdGVtQmVmb3JlID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEpIHtcXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW0xKSkgcGFyYW0xID0gcGFyYW0xLm1hcChoaWphY2tFbClcXG4gICAgZWxzZSBwYXJhbTEgPSBoaWphY2tFbChwYXJhbTEpXFxuICAgIG1ldGhvZF9hZGRJdGVtQmVmb3JlLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEpXFxufVxcbi8vQOiPnOWboiDnjq/looPliqvmjIHliqvmjIHlk6rph4zliqDkuKrov5nkuKotTOS9rFxcbnJlcXVlc3QgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKSB7XFxuICAgIGlmIChwYXJhbTAuaW5jbHVkZXMoXFxcImhpa2VyOi8vcGFnZS9cXFwiKSkge1xcbiAgICAgICAgbGV0IHJ1bGUgPSAocGFyYW0wLnNwbGl0KC9cXFxcPy4qcnVsZT0vKVsxXSB8fCBcXFwiXFxcIikuc3BsaXQoXFxcIiZcXFwiKVswXTtcXG4gICAgICAgIGxldCBwYWdlVXJsID0gcGFyYW0wLnNwbGl0KFxcXCJoaWtlcjovL3BhZ2UvXFxcIilbMV0uc3BsaXQoXFxcIj9cXFwiKVswXTtcXG4gICAgICAgIGlmIChydWxlICE9PSBRSU5HX1RJVExFKSB7XFxuICAgICAgICAgICAgbGV0IHJ1bGVDb2RlO1xcbiAgICAgICAgICAgIGlmICghcnVsZSB8fCBydWxlID09PSBSVUxFLnRpdGxlKSB7XFxuICAgICAgICAgICAgICAgIHJ1bGVDb2RlID0gKFJVTEUucGFnZUxpc3QgfHwgKFJVTEUucGFnZUxpc3QgPSBKU09OLnBhcnNlKFJVTEUucGFnZXMpKSkuZmluZCh2ID0+IHYucGF0aCA9PT0gcGFnZVVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmKHJ1bGVDb2RlKXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJ1bGVDb2RlKTtcXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBwYXJhbTIgPSBNWV9SVUxFO1xcbiAgICB2YXIgcmV0U3RyID0gbWV0aG9kX3JlcXVlc3QuaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKTtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGlmIChyZXRTdHIgaW5zdGFuY2VvZiBqYXZhLmlvLklucHV0U3RyZWFtKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJldFN0cjtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge31cXG4gICAgcmV0dXJuIHJldFN0ciA9PSBudWxsID8gcmV0U3RyIDogcmV0U3RyICsgXFxcIlxcXCI7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Ye95pWw5bel5YW3XCIsXCJwYXRoXCI6XCJmdW5jVG9vbHNcIixcInJ1bGVcIjpcImxldCB7IFFJTkdfVElUTEUsIE1ZX1JVTEUsIGlzSW5kZXggfSA9ICQuaW1wb3J0UGFyYW1cXG5pZiAoIU1ZX1JVTEUpIE1ZX1JVTEUgPSB7fVxcblxcbmZ1bmN0aW9uIHJ1bkNvZGUocnVsZSkge1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IFtpbnB1dCwgY29kZV0gPSBydWxlLnNwbGl0KCcuanM6JylcXG4gICAgICAgIHJldHVybiBjb2RlID8gZXZhbChjb2RlKSA6IHJ1bGVcXG4gICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gcnVsZSB9XFxufVxcbi8vIOmmlumhtemTvuaOpeabv+aNouWIhuexu1xcbmZ1bmN0aW9uIGluZGV4VXJsKHBhcmFtKSB7XFxuICAgIE1ZX1JVTEUgPSBKU09OLnBhcnNlKGJhc2U2NERlY29kZShNWV9SVUxFKSlcXG4gICAgbGV0IHBhZ2VOdW0gPSBwYXJzZUludChwYXJhbS5zcGxpdCgnIyMjJylbMV0pLFxcbiAgICAgICAgdXJsID0gTVlfUlVMRS51cmwsXFxuICAgICAgICB7IGZ5QWxsLCB0YWJIZWFkZXIgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0NsYXNzVGFiP3J1bGU9JyArIFFJTkdfVElUTEUsIE9iamVjdC5hc3NpZ24oeyBRSU5HX1RJVExFOiBRSU5HX1RJVExFIH0sIE1ZX1JVTEUpKVxcblxcbiAgICB1cmwgPSB0YWJIZWFkZXIuc2V0VXJsKGZ5QWxsID8gdXJsLnJlcGxhY2UoL2Z5QWxsL2csICckJHtmeUFsbH0nKSA6IHVybC5yZXBsYWNlKC9meShjbGFzc3xhcmVhfHllYXJ8c29ydCkvZywgJyQke2Z5JDF9JykpXFxuICAgIHVybCA9IHVybC5yZXBsYWNlKC9meXBhZ2UoPzpAKC0/XFxcXGQrKUApPyg/OlxcXFwqKFxcXFxkKylAKT8vZywgKF8sIHN0YXJ0LCBzcGFjZSkgPT4gcGFyc2VJbnQoc3RhcnQgfHwgMCkgKyAxICsgKHBhZ2VOdW0gLSAxKSAqIHBhcnNlSW50KHNwYWNlIHx8IDEpKVxcbiAgICB1cmwgPSAvXihbXFxcXHNcXFxcU10qPykoPzpcXFxcW2ZpcnN0UGFnZT0oW1xcXFxzXFxcXFNdKj8pXFxcXF0pPyg/OihcXFxcLmpzOltcXFxcc1xcXFxTXSo/KSk/JC8uZXhlYyh1cmwpXFxuICAgIGlmIChwYWdlTnVtID09IDEgJiYgdXJsWzJdKSB1cmxbMV0gPSB1cmxbMl1cXG4gICAgaWYgKHVybFszXSAmJiAhdXJsWzFdLmluY2x1ZGVzKCcuanM6JykpIHVybFsxXSArPSB1cmxbM11cXG4gICAgcmV0dXJuIHJ1bkNvZGUodXJsWzFdKVxcbn1cXG5cXG5mdW5jdGlvbiBwYXJhbUhhbmRsZSh1cmxQYXJhbSwgdWEsIHVybFRtcCkge1xcbiAgICBsZXQgY2hhcnNldCwgcGFyYW1UbXBcXG4gICAgdHJ5IHsgLy8g6ZO+5o6l55qE57yW56CB44CBVUHlkoxSZWZlcmVy5bqU6K+l5piv6aaW5YWI57un5om/6aaW6aG16ZO+5o6lXFxuICAgICAgICBbLCAsIGNoYXJzZXQsIHBhcmFtVG1wXSA9IHVybFRtcC5zcGxpdCgnOycpXFxuICAgICAgICBwYXJhbVRtcCA9IHBhcmFtVG1wLm1hdGNoKC9eeyguKil9JC8pWzFdLnNwbGl0KCcmJicpXFxuICAgIH0gY2F0Y2ggKGUpIHsgcGFyYW1UbXAgPSBbXSB9XFxuICAgIGxldCBVc2VyQWdlbnQgPSBwYXJhbVRtcC5maW5kKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ1VzZXItQWdlbnRAJykpLFxcbiAgICAgICAgUmVmZXJlciA9IHBhcmFtVG1wLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgnUmVmZXJlckAnKSlcXG4gICAgdXJsUGFyYW1bMF0gPSB1cmxQYXJhbVswXSB8fCAnR0VUJ1xcbiAgICB1cmxQYXJhbVsxXSA9IHVybFBhcmFtWzFdIHx8IGNoYXJzZXQgfHwgJ1VURi04J1xcbiAgICB0cnkge1xcbiAgICAgICAgdXJsUGFyYW1bMl0gPSB1cmxQYXJhbVsyXS5tYXRjaCgvXnsoLiopfSQvKVsxXS5zcGxpdCgnJiYnKVxcbiAgICB9IGNhdGNoIChlKSB7IHVybFBhcmFtWzJdID0gW10gfVxcbiAgICAvLyDmt7vliqDlhajlsYBVQeWSjOS4iue6p1JlZmVyZXJcXG4gICAgaWYgKCF1cmxQYXJhbVsyXS5zb21lKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ1VzZXItQWdlbnRAJykpKSB7XFxuICAgICAgICBpZiAoVXNlckFnZW50KSB1cmxQYXJhbVsyXS5wdXNoKFVzZXJBZ2VudClcXG4gICAgICAgIGVsc2UgaWYgKHVhID09ICdwYycpXFxuICAgICAgICAgICAgdXJsUGFyYW1bMl0ucHVzaCgnVXNlci1BZ2VudEAnICsgUENfVUEucmVwbGFjZSgvOy9nLCAn77yb77ybJykucmVwbGFjZSgvXFxcXD8vLCAn77yf77yfJykpXFxuICAgICAgICBlbHNlIGlmICh1YSA9PSAnbW9iaWxlJylcXG4gICAgICAgICAgICB1cmxQYXJhbVsyXS5wdXNoKCdVc2VyLUFnZW50QCcgKyBNT0JJTEVfVUEucmVwbGFjZSgvOy9nLCAn77yb77ybJykucmVwbGFjZSgvXFxcXD8vLCAn77yf77yfJykpXFxuICAgIH1cXG4gICAgaWYgKFJlZmVyZXIgJiYgIXVybFBhcmFtWzJdLnNvbWUoKHYpID0+IHYuc3RhcnRzV2l0aCgnUmVmZXJlckAnKSkpXFxuICAgICAgICB1cmxQYXJhbVsyXS5wdXNoKFJlZmVyZXIpXFxuICAgIHVybFBhcmFtWzJdID0gJ3snICsgdXJsUGFyYW1bMl0uam9pbignJiYnKSArICd9J1xcbiAgICByZXR1cm4gdXJsUGFyYW0uam9pbignOycpXFxufVxcbi8vIOmihOWkhOeQhuW5tuWIneWni+WMlmNvbmZpZ1xcbmZ1bmN0aW9uIHJ1blByZVJ1bGUocnVsZSkge1xcbiAgICBpZiAoKHR5cGVvZiBNWV9QQUdFICE9ICd1bmRlZmluZWQnICYmICBNWV9QQUdFID09IDEpICYmXFxuICAgICAgICAgKGlzSW5kZXggfHwgIWdldE15VmFyKCckcHJlUnVsZV8nICsgTVlfUlVMRS50aXRsZSkpKSB7XFxuICAgICAgICBldmFsKHJ1bGUpXFxuICAgICAgICBwdXRNeVZhcignJHByZVJ1bGVfJyArIE1ZX1JVTEUudGl0bGUsICdUJylcXG4gICAgfVxcbiAgICBsZXQgX2NmZyA9IGdldE15VmFyKCdpbml0Q29uZmlnJywgJ3t9JylcXG4gICAgaWYgKF9jZmcgJiYgX2NmZy5sZW5ndGggPiAwKSB7XFxuICAgICAgICBjb25maWcgPSBKU09OLnBhcnNlKF9jZmcpXFxuICAgIH1cXG59XFxuLy8g5q2j5paH6Kej5p6Q6YCa55So5Y+Y6YePXFxuZnVuY3Rpb24gZ2VuTXlSdWxlKCkge1xcbiAgICBsZXQgUlVMRSA9IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUpXFxuICAgIGRlbGV0ZSBSVUxFLmxhc3RfY2hhcHRlcl9ydWxlXFxuICAgIGRlbGV0ZSBSVUxFLnByZVJ1bGVcXG4gICAgZGVsZXRlIFJVTEUucGFnZUxpc3RcXG4gICAgZGVsZXRlIFJVTEUucGFnZXNcXG4gICAgcmV0dXJuIFJVTEVcXG59XFxuXFxuZnVuY3Rpb24gZ2VuRXhVcmwodXJsKSB7XFxuICAgIHVybCA9IHVybC5zcGxpdCgnOycpXFxuICAgIHJldHVybiB1cmwuc2hpZnQoKSArICc7JyArIHBhcmFtSGFuZGxlKHVybCwgTVlfUlVMRS51YSwgTVlfUlVMRS51cmwpXFxufVxcblxcbmhpamFja0xhenlSdWxlID0gJC50b1N0cmluZygoUUlOR19USVRMRSwgTVlfUEFSQU1TKSA9PiB7XFxuICAgIGlmICghTVlfUlVMRSkgTVlfUlVMRSA9IHt9XFxuICAgIE1ZX1BBUkFNUyA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKE1ZX1BBUkFNUykpXFxuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2hpamFja0Vudj9ydWxlPScgKyBRSU5HX1RJVExFKSkucnVsZSlcXG4gICAgdmFyIHtcXG4gICAgICAgIHBhcmFtSGFuZGxlLFxcbiAgICAgICAgZ2VuRXhVcmwsXFxuICAgICAgICBoaWphY2tMYXp5UnVsZSxcXG4gICAgICAgIGhpamFja0VsXFxuICAgIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9mdW5jVG9vbHM/cnVsZT0nICsgUUlOR19USVRMRSlcXG59LCBRSU5HX1RJVExFLCBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoeyB1cmw6IE1ZX1JVTEUudXJsLCBSVUxFOiBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoZ2VuTXlSdWxlKCkpKSwgaXNJbmRleDogaXNJbmRleCB9KSkpXFxuXFxuZnVuY3Rpb24gaGlqYWNrRWwoZWwpIHtcXG4gICAgaWYoIWVsIHx8IHR5cGVvZiBlbCAhPSAnb2JqZWN0JykgcmV0dXJuXFxuICAgIGlmICghZWwuZXh0cmEpIGVsLmV4dHJhID0ge31cXG4gICAgZWwuY29sX3R5cGUgPSBlbC5jb2xfdHlwZSB8fCBNWV9SVUxFLmNvbF90eXBlXFxuICAgIGxldCBOT1dfUlVMRSA9IE9iamVjdC5hc3NpZ24oZ2VuTXlSdWxlKCksIHsgcGFyYW1zOiBlbC5leHRyYSB9KVxcblxcbiAgICBpZiAodHlwZW9mIGVsLnVybCAhPSAnc3RyaW5nJyB8fFxcbiAgICAgICAgWyd4NV93ZWJ2aWV3X3NpbmdsZScsICdpbnB1dCddLnNvbWUoKHYpID0+IGVsLmNvbF90eXBlID09IHYpIHx8XFxuICAgICAgICBbJ+a1t+mYlOinhueVjCcsICdqYXZhc2NyaXB0OiddLnNvbWUoKHYpID0+IGVsLnVybC5zdGFydHNXaXRoKHYpKSB8fFxcbiAgICAgICAgWydydWxlJywgJ3BpY3MnLCAndG9hc3QnLCAnY29weScsICdlZGl0RmlsZScsICd4NScsICd4NVdlYlZpZXcnLCAneDVQbGF5JywgJ3dlYicsICd4NVJ1bGUnLCAnd2ViUnVsZScsXFxuICAgICAgICAgICAgJ2Rvd25sb2FkJywgJ3NoYXJlJywgJ2ZpbGVTZWxlY3QnLCAndmlkZW8nXS5zb21lKCh2KSA9PiBlbC51cmwuc3RhcnRzV2l0aCh2ICsgJzovLycpKSkge1xcbiAgICAgICAgcmV0dXJuIGVsXFxuICAgIH0gZWxzZSBpZiAoZWwudXJsLnN0YXJ0c1dpdGgoJ2lucHV0Oi8vJykpIHtcXG4gICAgICAgIGxldCBwYXJhID0gSlNPTi5wYXJzZShlbC51cmwuc2xpY2UoOCkpXFxuICAgICAgICBpZiAocGFyYS5qcykgcGFyYS5qcyA9IGhpamFja0xhenlSdWxlICsgJzsnICsgcGFyYS5qc1xcbiAgICAgICAgZWwudXJsID0gJ2lucHV0Oi8vJyArIEpTT04uc3RyaW5naWZ5KHBhcmEpXFxuICAgICAgICByZXR1cm4gZWxcXG4gICAgfSBlbHNlIGlmIChlbC51cmwuc3RhcnRzV2l0aCgnY29uZmlybTovLycpKSB7XFxuICAgICAgICBsZXQgcmVJbmRleCA9IGVsLnVybC5pbmRleE9mKCcuanM6JylcXG4gICAgICAgIGlmIChyZUluZGV4ID49IDApIGVsLnVybCA9IGVsLnVybC5zbGljZSgwLCByZUluZGV4KSArICcuanM6JyArIGhpamFja0xhenlSdWxlICsgJzsnICsgZWwudXJsLnNsaWNlKHJlSW5kZXggKyA0KVxcbiAgICAgICAgcmV0dXJuIGVsXFxuICAgIH0gZWxzZSBpZiAoZWwudXJsLnN0YXJ0c1dpdGgoJ3NlbGVjdDovLycpKSB7XFxuICAgICAgICBsZXQgcGFyYSA9IEpTT04ucGFyc2UoZWwudXJsLnNsaWNlKDkpKVxcbiAgICAgICAgaWYgKHBhcmEuanMpIHBhcmEuanMgPSBoaWphY2tMYXp5UnVsZSArICc7JyArIHBhcmEuanNcXG4gICAgICAgIGVsLnVybCA9ICdzZWxlY3Q6Ly8nICsgSlNPTi5zdHJpbmdpZnkocGFyYSlcXG4gICAgICAgIHJldHVybiBlbFxcbiAgICB9IGVsc2UgaWYgKGVsLnVybC5pbmNsdWRlcygnQHJ1bGU9JykpIHtcXG4gICAgICAgIGxldCBbXywgdXJsLCBydWxlXSA9IGVsLnVybC5tYXRjaCgvXihbXFxcXHNcXFxcU10qPylAcnVsZT0oW1xcXFxzXFxcXFNdKikkLylcXG4gICAgICAgIGVsLnVybCA9IHVybFxcbiAgICAgICAgTk9XX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXG4gICAgICAgIE5PV19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgfSBlbHNlIGlmIChlbC51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB7XFxuICAgICAgICBpZiAoZWwudXJsLmluY2x1ZGVzKCdydWxlPScpIHx8IGVsLmV4dHJhLnJ1bGUpXFxuICAgICAgICAgICAgcmV0dXJuIGVsXFxuICAgICAgICBsZXQgW18sIHBhdGgsIGZsYWcsIHBhcmFtc10gPSBlbC51cmwubWF0Y2goL15oaWtlcjpcXFxcL1xcXFwvcGFnZVxcXFwvKC4rPykoIy4qPyk/KD86XFxcXD8oLiopKT8kLyksXFxuICAgICAgICAgICAgc3ViUGFnZSA9IE1ZX1JVTEUucGFnZUxpc3QuZmluZCgodikgPT4gdi5wYXRoID09IHBhdGgpLFxcbiAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxuICAgICAgICBlbC51cmwgPSAoc3ViVXJsID8gc3ViVXJsLnNsaWNlKDQpLnJlcGxhY2UoL++8n++8ny9nLCAnPycpLnJlcGxhY2UoL++8hu+8hi9nLCAnJicpIDogKGVsLmV4dHJhIHx8IHt9KS51cmwpIHx8ICdoaWtlcjovL2VtcHR5JyArIGZsYWcgKyAnPycgKyAocGFyYW1zIHx8ICcnKVxcbiAgICAgICAgTk9XX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHN1YlBhZ2UucnVsZVxcbiAgICAgICAgTk9XX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gc3ViUGFnZS5jb2xfdHlwZVxcbiAgICB9IGVsc2UgaWYgKGVsLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICBsZXQgcmVJbmRleCA9IGVsLnVybC5pbmRleE9mKCcuanM6JylcXG4gICAgICAgIGlmIChyZUluZGV4ID49IDApIGVsLnVybCA9IGVsLnVybC5zbGljZSgwLCByZUluZGV4KSArICcuanM6JyArIGhpamFja0xhenlSdWxlICsgJzsnICsgZWwudXJsLnNsaWNlKHJlSW5kZXggKyA0KVxcbiAgICAgICAgcmV0dXJuIGVsXFxuICAgIH0gZWxzZSBpZiAoaXNJbmRleCkge1xcbiAgICAgICAgaWYgKCFNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgfHwgL2hpa2VyOlxcXFwvXFxcXC8oPyFlbXB0eS4rJCkvLnRlc3QoZWwudXJsKSkgcmV0dXJuIGVsXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXR1cm4gZWxcXG4gICAgfVxcbiAgICBlbC5leHRyYSA9IE9iamVjdC5hc3NpZ24oe30sIGVsLmV4dHJhLCB7XFxuICAgICAgICB1cmw6IGdlbkV4VXJsKGVsLnVybCksXFxuICAgICAgICBSVUxFOiBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoTk9XX1JVTEUpKSxcXG4gICAgICAgIHBhZ2VUaXRsZTogaXNJbmRleCAmJiBlbC50aXRsZVxcbiAgICB9KVxcbiAgICBlbC51cmwgPSAnaGlrZXI6Ly9wYWdlL2ZyYW1lTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFXFxuICAgIHJldHVybiBlbFxcbn1cXG4kLmV4cG9ydHMgPSB7XFxuICAgIHJ1bkNvZGU6IHJ1bkNvZGUsXFxuICAgIGluZGV4VXJsOiBpbmRleFVybCxcXG4gICAgcGFyYW1IYW5kbGU6IHBhcmFtSGFuZGxlLFxcbiAgICBydW5QcmVSdWxlOiBydW5QcmVSdWxlLFxcbiAgICBnZW5NeVJ1bGU6IGdlbk15UnVsZSxcXG4gICAgZ2VuRXhVcmw6IGdlbkV4VXJsLFxcbiAgICBoaWphY2tMYXp5UnVsZTogaGlqYWNrTGF6eVJ1bGUsXFxuICAgIGhpamFja0VsOiBoaWphY2tFbFxcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIua8q+eUu+ino+aekCpcIixcInBhdGhcIjpcImpzXCIsXCJydWxlXCI6XCJmdW5jdGlvbiDniLHnsbPmjqjnsbsoaW5wdXQpIHtcXG5cXHR0cnl7XFxuICAgICAgICB2YXIgdXJsID0gaW5wdXRcXG4gICAgICAgIC5yZXBsYWNlKCdtLid8fCdtaC4nfHwnd2FwLicsICd3d3cuJylcXG4gICAgICAgIC5yZXBsYWNlKCdpa3IuJywgJ2ljZWtyLicpO1xcbiAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KHVybCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgJ1JlZmVyZXInOiB1cmxcXG4gICAgfVxcbn0pXFxuICAgIGV2YWwocGRmaChwZGZhKGh0bWwsICdib2R5JiZzY3JpcHQ6bm90KFtzcmNdKTpub3QoW3R5cGVdKScpWzBdLCAnc2NyaXB0JiZIdG1sJykpO1xcbiAgICB2YXIgcGljcyA9IFtdO1xcbiAgICBpZiAoY2hhcHRlckltYWdlcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICB2YXIgaG9zdCA9IHJlcXVlc3QoaW5wdXQpLm1hdGNoKC9pbWcgc3JjPVxcXCIoLio/KVxcXFwvaW1hZ2UvKVsxXTtcXG4gICAgICAgIGNoYXB0ZXJJbWFnZXMuZm9yRWFjaChpbWcgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbWcuaW5kZXhPZihcXFwiaHR0cFxcXCIpID4gLTEpIHtcXG4gICAgICAgICAgICBwaWNzLnB1c2goaW1nICsgJ0BSZWZlcmVyPScgKyB1cmwpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBwaWNzLnB1c2goaG9zdCArIGltZyArICdAUmVmZXJlcj0nICsgdXJsKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3QoaW5wdXQpO1xcbiAgICAgICAgdmFyIHBpY3MgPSBbXTtcXG4gICAgICAgIGlmKC9rX3RvdGFsLy50ZXN0KGh0bWwpKXtcXG4gICAgICAgICAgICB2YXIgUGFnZSA9IHBkZmgoaHRtbCwgJyNrX3RvdGFsJiZUZXh0Jyk7XFxuICAgICAgICAgICAgaWYoUGFnZS5sZW5ndGggPiAwKXtcXG4gICAgICAgICAgICAgICAgdmFyIGhvc3QgPSBodG1sLm1hdGNoKC9taXAtaW1nIHNyYz1cXFwiKC4qPylpbWFnZS8pWzFdO1xcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgUGFnZTsgaSsrKSB7XFxuICAgICAgICBwaWNzLnB1c2goaG9zdCArICdpbWFnZS92aWV3LycgKyBpbnB1dC5tYXRjaCgvXFxcXGQrLylbMF0gKyAnLycgKyBpICsgJy53ZWJwJysgJ0BSZWZlcmVyPScpXFxuICAgICAgICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyIHJlczEgPSB7fTtcXG4gICAgICAgIHZhciBkMSA9IFtdO1xcbiAgICAgICAgdmFyIGpzSHRtbCA9IGZldGNoKGlucHV0LCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiY29udGVudC10eXBlXFxcIjogXFxcIlVURi04XFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiTW9iaWxlXFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgbWV0aG9kOiBcXFwiR0VUXFxcIlxcbiAgICAgICAgfSk7XFxuICAgICAgICB2YXIgcGljcyA9IFtdO1xcbiAgICAgICAgZm9yICh2YXIgayA9IDE7OyBrKyspIHtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICB2YXIganNIdG1sID0gZmV0Y2goaW5wdXQuc3BsaXQoXFxcIi5odG1sXFxcIilbMF0gKyBcXFwiLVxcXCIgKyBrICsgXFxcIi5odG1sXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJjb250ZW50LXR5cGVcXFwiOiBcXFwiVVRGLThcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vYmlsZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFxcXCJHRVRcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBsZXQgcGFnZSA9IHBkZmgoanNIdG1sLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgIGlmIChwYWdlICYmIHBhZ2UuaW5jbHVkZXMoXFxcIi9cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcGFnZSA9IHBhcnNlSW50KHBhZ2Uuc3BsaXQoXFxcIi9cXFwiKVsxXSk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIganNVcmwgPSBwYXJzZURvbUZvckh0bWwoanNIdG1sLCBcXFwiLmVyUGFnJiZtaXAtaW1nfHxpbWcmJnNyY1xcXCIpKyAnQFJlZmVyZXI9JztcXG4gICAgICAgICAgICAgICAgICAgIGlmIChqc1VybC5pbmRleE9mKFxcXCJwbmdcXFwiKSA+IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmxzID0gW107XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8PSBwYWdlOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGlucHV0LnNwbGl0KFxcXCIuaHRtbFxcXCIpWzBdICsgXFxcIi1cXFwiICsgaSArIFxcXCIuaHRtbFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiY29udGVudC10eXBlXFxcIjogXFxcIlVURi04XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJNb2JpbGVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcXFwiR0VUXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGxldCBodG1scyA9IGJmKHVybHMpO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBodG1scy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqc1VybCA9IHBhcnNlRG9tRm9ySHRtbChodG1sc1tpXSwgXFxcIi5lclBhZyYmbWlwLWltZ3x8aW1nJiZzcmNcXFwiKSsgJ0BSZWZlcmVyPSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzVXJsLmluZGV4T2YoXFxcInBuZ1xcXCIpID4gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBwaWNzLnB1c2goanNVcmwpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBqc1VybCA9IHBhcnNlRG9tRm9ySHRtbChqc0h0bWwsIFxcXCIuZXJQYWcmJm1pcC1pbWd8fGltZyYmc3JjXFxcIikrICdAUmVmZXJlcj0nO1xcbiAgICAgICAgICAgICAgICBpZiAoanNVcmwuaW5kZXhPZihcXFwicG5nXFxcIikgPiAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHBpY3MucHVzaChqc1VybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmLnNjcm9sbC1pdGVtfHwuaW1hZ2UtY29udGVudHx8I3Njcm9sbC1pbWFnZScpO1xcbiAgICAgICAgdmFyIGZpcnN0ID0gcGRmYShodG1sLCAnYm9keSYmI2ltYWdlJyk7XFxuICAgICAgICBsaXN0ID0gZmlyc3QuY29uY2F0KGxpc3QpO1xcbiAgICAgICAgbGlzdC5mb3JFYWNoKGltZyA9PiB7XFxuICAgICAgICAgICAgcGljcy5wdXNoKHBkZmgoaW1nLCAnaW1nJiZkYXRhLXNyY3x8c3JjJykgKyAnQFJlZmVyZXI9JyArIGlucHV0KVxcbiAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB9IGNhdGNoKGUpIHtcXG4gICAgICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICB2YXIgcGljcyA9IFtdO1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuc2Nyb2xsLWl0ZW18fC5pbWFnZS1jb250ZW50fHwjc2Nyb2xsLWltYWdlJyk7XFxuICAgICAgICB2YXIgZmlyc3QgPSBwZGZhKGh0bWwsICdib2R5JiYjaW1hZ2UnKTtcXG4gICAgICAgIGxpc3QgPSBmaXJzdC5jb25jYXQobGlzdCk7XFxuICAgICAgICBsaXN0LmZvckVhY2goaW1nID0+IHtcXG4gICAgICAgICAgICBwaWNzLnB1c2gocGRmaChpbWcsICdpbWcmJmRhdGEtc3JjfHxzcmMnKSArICdAUmVmZXJlcj0nICsgaW5wdXQpXFxuICAgICAgICB9KVxcbiAgICB9XFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIilcXG59XFxuJC5leHBvcnRzLmp4PeeIseexs+aOqOexuztcXG5cXG5mdW5jdGlvbiDljIXlrZAoaW5wdXQpIHtcXG4gICAgdmFyIGlkID0gdHJ1ZTtcXG4gICAgdmFyIGNvZGUgPSByZXF1ZXN0KGlucHV0KVxcbiAgICB2YXIgcGljcyA9IFtdO1xcbiAgICB2YXIgdG9fUmVwZWF0ID0gZmFsc2U7XFxuXFxuXFxuICAgIHdoaWxlIChpZCkge1xcbiAgICAgICAgcGRmYShjb2RlLCBcXFwiLmNoYXB0ZXItbWFpbiYmYW1wLWltZ1xcXCIpXFxuICAgICAgICAgICAgLmZvckVhY2goZGF0YSA9PiBwaWNzLnB1c2gocGRmaChkYXRhLCBcXFwiYW1wLWltZyYmc3JjXFxcIikgKyAnQFJlZmVyZXI9aHR0cHM6Ly93d3cud2VibW90YS5jb20vJykpO1xcbiAgICAgICAgdmFyIG5leHRfUGFnZSA9IHBkZmgoY29kZSwgXFxcIi5uZXh0X2NoYXB0ZXIsLTEmJkh0bWxcXFwiKVxcbiAgICAgICAgaWYgKG5leHRfUGFnZS5pbmNsdWRlcygn5LiL5LiA6aG1JykpIHtcXG4gICAgICAgICAgICBjb2RlID0gcmVxdWVzdChwZGZoKG5leHRfUGFnZSwgXFxcImEmJmhyZWZcXFwiKSlcXG4gICAgICAgICAgICB0b19SZXBlYXQgPSB0cnVlO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZCA9IGZhbHNlO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC8v5Y676Zmk6YeN5aSN5Zu+54mHXFxuICAgIGlmICh0b19SZXBlYXQpIHtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGljcy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIHdoaWxlIChwaWNzLmluZGV4T2YocGljc1tpXSwgaSArIDEpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgIHBpY3Muc3BsaWNlKHBpY3MuaW5kZXhPZihwaWNzW2ldLCBpICsgMSksIDEpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIik7XFxufVxcbiQuZXhwb3J0cy5iej3ljIXlrZA7XFxuXFxuZnVuY3Rpb24g5Y+k6aOOKGlucHV0KSB7XFxuXFx0dmFyIGh0bWwgPSBmZXRjaFBDKGlucHV0KTtcXG5cXHRldmFsKHBkZmgocGRmYShodG1sLCAnYm9keSYmc2NyaXB0Om5vdChbc3JjXSk6bm90KFt0eXBlXSknKVswXSwgJ3NjcmlwdCYmSHRtbCcpKTtcXG5cXHR2YXIgcGljcyA9IFtdO1xcblxcdGZvciAodmFyIGkgaW4gY2hhcHRlckltYWdlcykge1xcblxcdFxcdHBpY3MucHVzaCgnaHR0cHM6Ly9yZXMueGlhb3FpbnJlLmNvbS8nICsgY2hhcHRlclBhdGggKyBjaGFwdGVySW1hZ2VzW2ldICsgJ0BSZWZlcmVyPWh0dHBzOi8vd3d3LjEyM2dmLmNvbScpXFxuXFx0XFx0fVxcblxcdHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIilcXG59XFxuJC5leHBvcnRzLkdGPeWPpOmjjjtcXG5cXG5mdW5jdGlvbiDniLHnsbMoaW5wdXQpIHtcXG4gICAgICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICB2YXIgcGljcyA9IFtdO1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuc2Nyb2xsLWl0ZW18fC5pbWFnZS1jb250ZW50fHwjc2Nyb2xsLWltYWdlJyk7XFxuICAgICAgICB2YXIgZmlyc3QgPSBwZGZhKGh0bWwsICdib2R5JiYjaW1hZ2UnKTtcXG4gICAgICAgIGxpc3QgPSBmaXJzdC5jb25jYXQobGlzdCk7XFxuICAgICAgICBsaXN0LmZvckVhY2goaW1nID0+IHtcXG4gICAgICAgICAgICBwaWNzLnB1c2gocGRmaChpbWcsICdpbWcmJmRhdGEtc3JjfHxzcmMnKSArICdAUmVmZXJlcj0nICsgaW5wdXQpXFxuICAgICAgICB9KVxcbiAgICAgICAgcmV0dXJuIFxcXCJwaWNzOi8vXFxcIiArIHBpY3Muam9pbihcXFwiJiZcXFwiKVxcbn1cXG4kLmV4cG9ydHMuSU0954ix57GzO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqR5Y+j5LukKlwiLFwicGF0aFwiOlwiaW1wb3J0XCIsXCJydWxlXCI6XCJ3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvL3J1bGVzL1R6L0pNJyxmZXRjaChpbnB1dCkpXFxuJ3RvYXN0Oi8v5bey5LuO5LqR5Y+j5Luk6I635Y+W6IGa5ryr8J+Urua6kCdcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuabtOaWsOivpuaDhSpcIixcInBhdGhcIjpcIlVwXCIsXCJydWxlXCI6XCJqczpcXG52YXIgcmVzID0ge307XFxudmFyIGl0ZW1zID0gW107XFxudmFyIGltZyA9ICdodHRwczovL2JpbmcuaW1nLnJ1bi8xMzY2eDc2OC5waHAnO1xcbml0ZW1zLnB1c2goe1xcbiAgICBpbWc6IGltZyxcXG4gICAgdXJsOiBpbWcgKyBcXFwiIy5qcGdcXFwiLFxcbiAgICBkZXNjOiAnMCcsXFxuICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcXG59KTtcXG5cXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ08aDQ+44CQ6IGa5ryr8J+UruWPjemmiOaUtumbhuOAkTwvaDQ+XFxcIiArICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IGdyZXlcXFwiPuWbouWtkDwvc3Bhbj4nLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvcnVsZURldGFpbCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbHZlcjogTVlfUEFSQU1TLnZlcnNpb24gfHwgXFxcIuiOt+WPlueJiOacrOWksei0pe+8jOiHquihjOafpeeci1xcXCIsXFxuICAgICAgICBpZDogXFxcIjI4NDdcXFwiXFxuICAgIH1cXG59KTtcXG5cXG5pZiAoZ2V0SXRlbShcXFwicmVhZF9wb2xpY3lcXFwiKSAhPT0gXFxcIjFcXFwiKSB7XFxuICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9Izg3MWY3OD7mnKzop4TliJnmlbDmja7mnaXmupDkuo7nvZHnu5zvvIzlpoLmgqjllpzmrKLvvIzor7fmlK/mjIHlrpjmlrk8L2ZvbnQ+PC9zbWFsbD4nLFxcbiAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnTxzbWFsbD48Zm9udCBjb2xvcj0jZjIwYzAwPuacrOinhOWImeS7hemZkOWFjei0ueWtpuS5oOS6pOa1geS9v+eUqO+8jOivt+S6juWvvOWFpeWQjjI05bCP5pe25YaF5Yig6Zmk77yM5Lu75L2V57uE57uH5oiW5Liq5Lq65LiN5b6X5Lul5Lu75L2V5pa55byP5pa55rOV5Lyg5pKt5oiW5ZSu5Y2W5q2k6KeE5YiZ55qE5pW05L2T5oiW6YOo5YiG77yBPC9mb250Pjwvc21hbGw+JyxcXG4gICAgICAgIHVybDogJCgnI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwicmVhZF9wb2xpY3lcXFwiLCBcXFwiMVxcXCIpXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S9oOW3suWQjOaEj+ivpeWNj+iurlxcXCJcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICB9KVxcbn1cXG5cXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ08Yj7kvb/nlKjor7TmmI48L2I+JyxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL0hlbHAjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiXFxufSk7XFxuXFxubGV0IG5ld1ZlcnNpb247XFxubGV0IG15VmVyc2lvbiA9IE1ZX1BBUkFNUy52ZXJzaW9uO1xcbnRyeSB7XFxuICAgIG5ld1ZlcnNpb24gPSBKU09OLnBhcnNlKGZldGNoUEMoXFxcImh0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9kZXYvZ2V0YnlpZD9pZD0yODQ3XFxcIiwge1xcbiAgICAgICAgdGltZW91dDogMTAwMFxcbiAgICB9KSkucmVzdWx0LnZlcjtcXG59IGNhdGNoIChlKSB7XFxuICAgIHRvYXN0KFxcXCLpgZPplb/ku5PlupPmir3po47kuobvvIzmnKzmrKHmnKrmo4DmtYvliLDmlrDniYjkv6Hmga9cXFwiKTtcXG4gICAgbmV3VmVyc2lvbiA9IG15VmVyc2lvbjtcXG59XFxubGV0IGlzVXBkYXRlID0gTnVtYmVyKG5ld1ZlcnNpb24pID4gTnVtYmVyKG15VmVyc2lvbik7XFxubGV0IGlzVmVyID0gTnVtYmVyKG5ld1ZlcnNpb24pID09PSBOdW1iZXIobXlWZXJzaW9uKTtcXG5pZiAoaXNVcGRhdGUpIHtcXG4gICAgbG9nKCfmnInmlrDniYjmnKw6JyArIG5ld1ZlcnNpb24gKyAnLOW9k+WJjTonICsgbXlWZXJzaW9uKTtcXG59XFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOiBpc1VwZGF0ZSA/IFxcXCLwn4aZ5paw54mI5pysXFxcIiA6IFxcXCLop4TliJnlj5HluIPpobUm5Y+N6aaIXFxcIixcXG4gICAgdXJsOiBpc1VwZGF0ZSA/IFxcXCJydWxlOi8vNXJXMzZaaVU2S2VHNTVXTTZhYVc2YUcxNmFLUjZZR1Q2S2VFNVlpWjQ0Q1E2SUdhNXJ5cjhKK1VydU9Ba2UrL3BXaHZiV1ZmY25Wc1pWOTFjbXp2djZWb2RIUndPaTh2YUdsclpYSXVibTlyYVdFdWNISmxjM012YUdsclpYSjFiR1V2Y25Wc1pXeHBjM1F1YW5OdmJqOXBaRDB5T0RRM1xcXCIgOiBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVEZXRhaWwjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbHZlcjogTVlfUEFSQU1TLnZlcnNpb24gfHwgXFxcIuiOt+WPlueJiOacrOWksei0pe+8jOiHquihjOafpeeci1xcXCIsXFxuICAgICAgICBpZDogXFxcIjI4NDdcXFwiXFxuICAgIH1cXG59KTtcXG5jb25zdCBDb2xvciA9IFxcXCIjMTlCODlEXFxcIjtcXG52YXIgZGVzX2Rlc2MgPSAnPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzIzMDIxMV08L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOWJlOmZpOaXoOeUqOa6kO+8jOS/ruWkjemDqOWIhuWkseaViOa6kDwvYnI+PGJyPuKRoeWwneivleS8mOWMlumhtemdouWKoOi9vemAn+W6pu+8iOaEn+iwokzkvazvvInvvIzmi4nov5znqIvvvIzkuI7ml6fop4TliJnkuI3lhbzlrrnvvIzmm7TmlrDmtbfpmJToh7M3LjMwPC9icj48LzxibG9ja3F1b3RlPicgK1xcblxcbic8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMTIzMF08L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOWJlOmZpOaXoOeUqOa6kO+8jOaLiei/nOeoi++8jOabtOaWsOa1t+mYlOiHszcuMjc8L2JyPjxicj48LzxibG9ja3F1b3RlPicgK1xcblxcbic8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMTIxOF08L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOS8mOWMluS4i+i9veaooeW8j++8jOmcgOabtOaWsOacgOaWsOeJiOacrOWcsOi1hOa6kOeuoeeQhu+8jOaLiei/nOeoi++8jOabtOaWsOa1t+mYlOiHszcuMjY8L2JyPuKRoeS/ruWkjemDqOWIhmJ1Zzxicj48LzxibG9ja3F1b3RlPicgK1xcblxcbic8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMTEyNl08L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOWinuWKoEFQUOWbvua6kO+8muaLiei/nOeoi++8jOabtOaWsOa1t+mYlOiHszcuMjM8L2JyPuKRoeS/ruWkjemDqOWIhmJ1Zzxicj48LzxibG9ja3F1b3RlPicgK1xcblxcbic8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMTExNl08L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOWinuWKoOS4ieWbvua6kFBT77ya5ouJ6L+c56iL77yM5pu05paw5rW36ZiU6IezNy4yMjwvYnI+4pGh5L+u5aSN6YOo5YiGYnVnPGJyPjwvPGJsb2NrcXVvdGU+JyArXFxuXFxuJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFsxMTEzXTwvaDE+JyArXFxuICAgICc8PGJsb2NrcXVvdGU+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4pGg5L+u5aSN5YyF5a2Q6YOo5YiG5ryr55S756ug6IqC5YiX6KGo5a6a5L2N6ZSZ6K+vUFPvvJrmi4nov5znqIs8L2JyPuKRoeS/ruWkjemDqOWIhmJ1Zzxicj48LzxibG9ja3F1b3RlPicgK1xcblxcbic8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMTEwOF08L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOabtOaWsOiBmua8q/CflK7mnKzlnLDkv67lpI3lrZDpobXpnaLliqjmgIHliIbnsbtidWfvvIzkv67lpI3pg6jliIbmupDvvIjlpJrlpJrvvIxDQ++8iTwvYnI+PGJyPjwvPGJsb2NrcXVvdGU+JyArXFxuICAgICc8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMTEwMl08L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOabtOaNouiBmua8q/CflK7mnKzkvZPvvIzmm7TmjaLpg6jliIbmoLflvI/vvIzkv67lpI3pg6jliIbmupDjgILlj6/nm7TmjqXorqLpmIXku5PlupPpk77mjqXmm7TmlrDvvIhQU++8mumaj+e8mOabtO+8iTwvYnI+PGJyPjwvPGJsb2NrcXVvdGU+JyArXFxuXFxuICAgICc8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMTAwNV08L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOabtOaNouiBmua8q/CflK7mnKzkvZPvvIzliqDlhaXmnIDmlrDniYjnvJPlrZjmnLrliLblrp7njrDkuozmrKHmiZPlvIDnp5LlvIDvvIzkv67lpI3pg6jliIbmupA8L2JyPjxicj48LzxibG9ja3F1b3RlPicgK1xcblxcbiAgICAnPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzA5MjZdPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDmm7TmjaLov5znqIvku5PlupPvvIzkv67lpI3pg6jliIbmupA8L2JyPjxicj48LzxibG9ja3F1b3RlPicgK1xcblxcbiAgICAnPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzA4MTZdPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDmm7TmlrDogZrmvKvwn5Su5pys5L2T77yM5L+u5aSN6YOo5YiG5rqQPC9icj48YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4gICAgJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFswODA5XTwvaDE+JyArXFxuICAgICc8PGJsb2NrcXVvdGU+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4pGg5Yig6Zmk5aSx5pWI5rqQPC9icj48YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4gICAgJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFswNzE3XTwvaDE+JyArXFxuICAgICc8PGJsb2NrcXVvdGU+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4pGg5aKe5Yqg5Yqo5oCB5YiH5o2i5o6S5bqP77yMUFPvvJrmvKvnlLvlkKc8YnI+4pGh5pCs5qih5p2/UeWKqOaAgeWIhuexuybliqjmgIHmjpLluo/oh7PogZrmvKvwn5Su772cUFPvvJrpnIDmm7TmlrDogZrmvKvwn5SuPC9icj48YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4gICAgJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFswNTI2XTwvaDE+PDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOS/ruWkjeWMheWtkOmAiembhumUmeivrybop6PmnpDplJnor688YnI+PGJyPjwvPGJsb2NrcXVvdGU+JyArXFxuXFxuICAgICc8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMDUyN108L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOaWsOWinuiLpeW5suWbvua6kDxicj48YnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4gICAgJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFswNTI5XTwvaDE+JyArXFxuICAgICc8PGJsb2NrcXVvdGU+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4pGg576O5YyW6YOo5YiG5Zu+5rqQPGJyPjxicj48LzxibG9ja3F1b3RlPicgK1xcblxcbiAgICAnPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzA1MzBdPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDmm7TmlrDogZrmvKvwn5Su5qih5p2/PGJyPjxicj48LzxibG9ja3F1b3RlPicgK1xcblxcbiAgICAnPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzA2MDJdPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDkv67lpI0m576O5YyW5aW95ryrODxicj7ikaHnvo7ljJblhavmnoHvvZxQU++8mumcgOa4heeQhue8k+WtmDwvYnI+PC88YmxvY2txdW90ZT4nICtcXG5cXG4gICAgJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+8J+QvuabtOaWsFswNjA2XTwvaDE+JyArXFxuICAgICc8PGJsb2NrcXVvdGU+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4pGg5pu05paw5YyF5a2Q77yM5bCd6K+V6Kej5Yaz5pS26JeP6Zeu6aKY77yMUFPvvJrpnIDmm7TmlrDogZrmvKvwn5SuPGJyPjxicj48LzxibG9ja3F1b3RlPicgK1xcblxcbiAgICAnPGgxIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj7wn5C+5pu05pawWzA2MDhdPC9oMT4nICtcXG4gICAgJzw8YmxvY2txdW90ZT48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7ikaDkv67lpI3prLzokJ3ojonmkJzntKI8YnI+PGJyPjwvPGJsb2NrcXVvdGU+JyArXFxuXFxuICAgICc8aDEgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPvCfkL7mm7TmlrBbMDYxNl08L2gxPicgK1xcbiAgICAnPDxibG9ja3F1b3RlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKRoOe+juWMlumDqOWIhuWbvua6kO+8jFBT77ya6ZyA5riF55CG57yT5a2YPGJyPjxicj48LzxibG9ja3F1b3RlPidcXG5cXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6ICfmm7TmlrDor6bmg4UgPHNtYWxsPjxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzE5Qjg5RFxcXCI+5bGV5byAPjwvc3Bhbj48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgaW1nOiBcXFwiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vcmUvMTk3LnBuZ1xcXCIsXFxuICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoamppZCwgZGVjaWQsIGRlc19kZXNjKSA9PiB7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoXFxcImpqc1xcXCIsIFxcXCLmlLbotbdcXFwiKSA9PSBcXFwi5pS26LW3XFxcIikge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJqanNcXFwiLCBcXFwi5bGV5byAXFxcIik7XFxuXFxuICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogamppZFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+abtOaWsOivpuaDhSA8c21hbGw+PHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMTlCODlEXFxcIj7mlLbotbc+PC9zcGFuPjwvc21hbGw+PC9zbWFsbD4nXFxuICAgICAgICAgICAgfSlcXG5cXG4gICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIHRleHRTaXplOiAxNCxcXG4gICAgICAgICAgICAgICAgICAgIGxpbmVTcGFjaW5nOiAzLFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGRlY2lkXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiM4MDgwODBcXFwiPicgKyBkZXNfZGVzYyArICc8L3NwYW4+J1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwiampzXFxcIiwgXFxcIuaUtui1t1xcXCIpO1xcblxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGpqaWRcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmm7TmlrDor6bmg4U8c21hbGw+PHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMTlCODlEXFxcIj7lsZXlvIA+PC9zcGFuPjwvc21hbGw+PC9zbWFsbD4nXFxuICAgICAgICAgICAgfSlcXG5cXG4gICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIHRleHRTaXplOiAxNCxcXG4gICAgICAgICAgICAgICAgICAgIGxpbmVTcGFjaW5nOiAzLFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGRlY2lkXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiM4MDgwODBcXFwiPicgKyBkZXNfZGVzYy5zdWJzdHIoMCwgMTUwKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfVxcblxcbiAgICB9LCBNWV9SVUxFICsgXFxcIl9qamlkXFxcIiwgTVlfUlVMRSArIFxcXCJfZGVjaWRcXFwiLCBkZXNfZGVzYyksXFxuICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiBNWV9SVUxFICsgXFxcIl9qamlkXFxcIlxcbiAgICB9XFxufSk7XFxuXFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiM4MDgwODBcXFwiPicgKyBkZXNfZGVzYy5zdWJzdHIoMCwgMTUwKSxcXG4gICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdGV4dFNpemU6IDE0LFxcbiAgICAgICAgbGluZVNwYWNpbmc6IDMsXFxuICAgICAgICBpZDogTVlfUlVMRSArIFxcXCJfZGVjaWRcXFwiXFxuICAgIH1cXG59KTtcXG5cXG5yZXMuZGF0YSA9IGl0ZW1zO1xcbnNldEhvbWVSZXN1bHQocmVzKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS9v+eUqOW4ruWKqSpcIixcInBhdGhcIjpcIkhlbHBcIixcInJ1bGVcIjpcImpzOlxcbnZhciByZXMgPSB7fTtcXG52YXIgaXRlbXMgPSBbXTtcXG5cXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6J+S6jOe6p+mhtemdouagh+mimOWPjOWHu+S8mOWMlu+8jOWcqOmhtumDqOWImeWPjOWHu+WIsOW6lemDqO+8jOWQpuWImeWPjOWHu+WbnumhtumDqCcsXFxuICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbn0pO1xcblxcbml0ZW1zLnB1c2goe1xcbiAgICBpbWc6ICdodHRwczovL3MxLmF4MXguY29tLzIwMjIvMTEvMDQveExoZ29SLmpwZycsXFxuICAgIGRlc2M6ICcwJyxcXG4gICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcbn0pO1xcblxcbml0ZW1zLnB1c2goe1xcbiAgICBpbWc6ICdodHRwczovL3MxLmF4MXguY29tLzIwMjIvMTEvMDQveExoY3c5LmpwZycsXFxuICAgIGRlc2M6ICcwJyxcXG4gICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcbn0pO1xcblxcbnJlcy5kYXRhID0gaXRlbXM7XFxuc2V0SG9tZVJlc3VsdChyZXMpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57SiKlwiLFwicGF0aFwiOlwic2VhcmNoXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBjb252ZXJ0MShzdHIpIHtcXG4gICAgbGV0IGMgPSBzdHIuc3BsaXQoXFxcIjtcXFwiKVxcbiAgICByZXR1cm4ge1xcbiAgICAgICAg5YiX6KGoOiBjWzBdLFxcbiAgICAgICAg5qCH6aKYOiBjWzFdLFxcbiAgICAgICAg6ZO+5o6lOiBjWzJdLFxcbiAgICAgICAg5o+P6L+wOiBjWzNdLFxcbiAgICAgICAg6K+m5oOFOiBjWzRdLFxcbiAgICAgICAg5Zu+54mHOiBjWzVdXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gbWVyZ2Uoc291cmNlLCB0YXJnZXQpIHtcXG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpXFxuICAgIGZvciAobGV0IGkgaW4ga2V5cykge1xcbiAgICAgICAgdGFyZ2V0W2tleXNbaV1dID0gc291cmNlW2tleXNbaV1dXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24g5pCc57SiKG9iaikge1xcbiAgICB2YXIgZCA9IFtdO1xcbiAgICBpZiAoJC50eXBlKG9iaikgPT0gXFxcInN0cmluZ1xcXCIpIHtcXG4gICAgICAgIG9iaiA9IGNvbnZlcnQxKG9iailcXG4gICAgfVxcbiAgICBpZiAob2JqLuinhOWImSkge1xcbiAgICAgICAgbGV0IGMgPSBjb252ZXJ0MShvYmou6KeE5YiZKVxcbiAgICAgICAgbWVyZ2UoYywgb2JqKVxcbiAgICB9XFxuICAgIGxldCBhcnIgPSBwZGZhKGdldFJlc0NvZGUoKSwgb2JqLuWIl+ihqCk7XFxuICAgICAgIGlmIChvYmou5YiX6KGo5aSE55CGICE9IG51bGwpIHtcXG4gICAgICAgICAgICBhcnIgPSBvYmou6ZO+5o6l5aSE55CGKGFycilcXG4gICAgICAgIH1cXG4gICAgZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxuICAgICAgICBsZXQgdXJsID0gcGQoaXQsIG9iai7pk77mjqUpXFxuICAgICAgICBpZiAob2JqLumTvuaOpeWkhOeQhiAhPSBudWxsKSB7XFxuICAgICAgICAgICAgdXJsID0gb2JqLumTvuaOpeWkhOeQhih1cmwpXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKGl0LCBvYmou5qCH6aKYKVxcbiAgICAgICAgaWYgKG9iai7moIfpopjlpITnkIYgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIHRpdGxlID0gb2JqLuagh+mimOWkhOeQhih0aXRsZSlcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBwaWMgPSBwZChpdCwgb2JqLuWbvueJhylcXG4gICAgICAgIGlmIChvYmou5Zu+54mH5aSE55CGICE9IG51bGwpIHtcXG4gICAgICAgICAgICBwaWMgPSBvYmou5Zu+54mH5aSE55CGKHBpYylcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IG9iai7moIfpopggPyBwZGZoKGl0LCBvYmou5qCH6aKYKSA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHVybDogdXJsKycjYXV0b0NhY2hlIycsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IG9iai7mj4/ov7AgPyBwZGZoKGl0LCBvYmou5o+P6L+wKSA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG9iai7or6bmg4UgPyBwZGZoKGl0LCBvYmou6K+m5oOFKSA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IHBpYyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICB5dGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB5cGljOiBwaWMsXFxuICAgICAgICAgICAgICAgIHl1cmw6IHVybC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCcnKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKTtcXG59XFxudmFyIHRvb2wgPSB7XFxuICAgIOaQnOe0ojog5pCc57SiXFxufVxcbiQuZXhwb3J0cyA9IHRvb2xcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWbvueJh+ino+WvhipcIixcInBhdGhcIjpcImltZ0RFU1wiLFwicnVsZVwiOlwiJC5leHBvcnRzLmltZ0RlY3J5cHQgPSBmdW5jdGlvbigpIHtcXG4gICAgdmFyIGphdmFJbXBvcnQgPSBuZXcgSmF2YUltcG9ydGVyKCk7XFxuICAgIGphdmFJbXBvcnQuaW1wb3J0UGFja2FnZShcXG4gICAgICAgIFBhY2thZ2VzLmNvbS5leGFtcGxlLmhpa2Vydmlldy51dGlscyxcXG4gICAgICAgIFBhY2thZ2VzLmphdmEubGFuZyxcXG4gICAgICAgIFBhY2thZ2VzLmphdmEuc2VjdXJpdHksXFxuICAgICAgICBQYWNrYWdlcy5qYXZhLnV0aWwsXFxuICAgICAgICBQYWNrYWdlcy5qYXZhLmlvLFxcbiAgICAgICAgUGFja2FnZXMuamF2YS50ZXh0LFxcbiAgICAgICAgUGFja2FnZXMuamF2YXguY3J5cHRvLFxcbiAgICAgICAgUGFja2FnZXMuamF2YXguY3J5cHRvLnNwZWNcXG4gICAgKTtcXG4gICAgd2l0aChqYXZhSW1wb3J0KSB7XFxuICAgICAgICBsZXQgYnl0ZXMgPSBGaWxlVXRpbC50b0J5dGVzKGlucHV0KTtcXG4gICAgICAgIGZ1bmN0aW9uIGRlY3J5cHREYXRhKGJBcnIpIHtcXG4gICAgICAgICAgICB2YXIgZ2VuZXJhdGVTZWNyZXQgPSBTZWNyZXRLZXlGYWN0b3J5LmdldEluc3RhbmNlKFxcXCJkZXNlZGVcXFwiKS5nZW5lcmF0ZVNlY3JldChuZXcgREVTZWRlS2V5U3BlYyhTdHJpbmcoJ09XODRVOEVlcmRiOTlydHNUWFdTSUxETycpLmdldEJ5dGVzKCkpKTtcXG4gICAgICAgICAgICB2YXIgY2lwaGVyID0gQ2lwaGVyLmdldEluc3RhbmNlKFxcXCJkZXNlZGUvQ0JDL1BLQ1M1UGFkZGluZ1xcXCIpO1xcbiAgICAgICAgICAgIGNpcGhlci5pbml0KDIsIGdlbmVyYXRlU2VjcmV0LCBuZXcgSXZQYXJhbWV0ZXJTcGVjKFN0cmluZygnU0s4Ym5jVnUnKS5nZXRCeXRlcygpKSk7XFxuICAgICAgICAgICAgcmV0dXJuIGNpcGhlci5kb0ZpbmFsKGJBcnIpO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9kZWNyeXB0RGF0YeS4uuino+WvhuaWueazlVxcbiAgICAgICAgYnl0ZXMgPSBkZWNyeXB0RGF0YShieXRlcyk7XFxuICAgICAgICByZXR1cm4gRmlsZVV0aWwudG9JbnB1dFN0cmVhbShieXRlcyk7XFxuICAgIH1cXG5cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJERVMqXCIsXCJwYXRoXCI6XCJkZXNcIixcInJ1bGVcIjpcInZhciBqYXZhSW1wb3J0ID0gbmV3IEphdmFJbXBvcnRlcigpO1xcbmphdmFJbXBvcnQuaW1wb3J0UGFja2FnZShcXG4gICAgUGFja2FnZXMuamF2YS5sYW5nLFxcbiAgICBQYWNrYWdlcy5qYXZhLnNlY3VyaXR5LFxcbiAgICBQYWNrYWdlcy5qYXZhLnV0aWwsXFxuICAgIFBhY2thZ2VzLmphdmEuaW8sXFxuICAgIFBhY2thZ2VzLmphdmEudGV4dCxcXG4gICAgUGFja2FnZXMuamF2YXguY3J5cHRvLFxcbiAgICBQYWNrYWdlcy5qYXZheC5jcnlwdG8uc3BlY1xcbik7XFxud2l0aChqYXZhSW1wb3J0KSB7XFxuICAgZnVuY3Rpb24gRGUoc3RyKSB7XFxuICAgICAgICB2YXIgZ2VuZXJhdGVTZWNyZXQgPSBTZWNyZXRLZXlGYWN0b3J5LmdldEluc3RhbmNlKFxcXCJkZXNlZGVcXFwiKS5nZW5lcmF0ZVNlY3JldChuZXcgREVTZWRlS2V5U3BlYyhTdHJpbmcoJ09XODRVOEVlcmRiOTlydHNUWFdTSUxETycpLmdldEJ5dGVzKCkpKTtcXG4gICAgICAgIHZhciBpbnN0YW5jZSA9IENpcGhlci5nZXRJbnN0YW5jZShcXFwiZGVzZWRlL0NCQy9QS0NTNVBhZGRpbmdcXFwiKTtcXG4gICAgICAgIGluc3RhbmNlLmluaXQoMiwgZ2VuZXJhdGVTZWNyZXQsIG5ldyBJdlBhcmFtZXRlclNwZWMoU3RyaW5nKCdTSzhibmNWdScpLmdldEJ5dGVzKCkpKTtcXG4gICAgICAgIHJldHVybiBTdHJpbmcoaW5zdGFuY2UuZG9GaW5hbChfYmFzZTY0LmRlY29kZShzdHIsIDIpKSk7ICAgICAgICBcXG4gICAgfVxcbn1cXG5cXG4vKlxcbmV2YWwoZ2V0Q3J5cHRvSlMoKSlcXG52YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoJ09XODRVOEVlcmRiOTlydHNUWFdTSUxETycpXFxudmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoJ1NLOGJuY1Z1JylcXG5cXG5mdW5jdGlvbiBEZShkYXRhLCBlbmNvZGluZykge1xcbiAgICB2YXIgZGVjcnlwdGVkID0gQ3J5cHRvSlMuVHJpcGxlREVTLmRlY3J5cHQoZGF0YSwga2V5LCB7XFxuICAgICAgICBpdjogaXYsXFxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICB9KTtcXG4gICAgaWYgKCFlbmNvZGluZykge1xcbiAgICAgICAgcmV0dXJuIGRlY3J5cHRlZC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGRlY3J5cHRlZC50b1N0cmluZyhDcnlwdG9KUy5lbmMuQmFzZTY0KTtcXG59O1xcbiovXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmvKvom5kqXCIsXCJwYXRoXCI6XCJpbWFnZVwiLFwicnVsZVwiOlwianM6XFxuY29uc3QgU29mdFJlZmVyZW5jZSA9IGphdmEubGFuZy5yZWYuU29mdFJlZmVyZW5jZTtcXG5jb25zdCBDaXBoZXIgPSBDaXBoZXIgPSBqYXZheC5jcnlwdG8uQ2lwaGVyO1xcbmNvbnN0IEl2UGFyYW1ldGVyU3BlYyA9IGphdmF4LmNyeXB0by5zcGVjLkl2UGFyYW1ldGVyU3BlYztcXG5jb25zdCBTZWNyZXRLZXlTcGVjID0gamF2YXguY3J5cHRvLnNwZWMuU2VjcmV0S2V5U3BlYztcXG5jb25zdCBLRVkgPSBuZXcgamF2YS5sYW5nLlN0cmluZyhcXFwibXkyZWNyZXQ3ODJlY3JldFxcXCIpO1xcbmNvbnN0IGYyMzE5SVYgPSBuZXcgamF2YS5sYW5nLlN0cmluZyhcXFwibXkyZWNyZXQ3ODJlY3JldFxcXCIpO1xcbmNvbnN0IEtFWV9BTEdPUklUSE0gPSBcXFwiQUVTXFxcIjtcXG5jb25zdCBBRVNfTU9ERSA9IFxcXCJBRVMvQ0JDL1BLQ1M3UGFkZGluZ1xcXCI7XFxuXFxuZnVuY3Rpb24gZGVjcnlwdERhdGEoZmlsZTJCeXRlcykge1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IHNlY3JldEtleVNwZWMgPSBuZXcgU2VjcmV0S2V5U3BlYyhLRVkuZ2V0Qnl0ZXMoKSwgS0VZX0FMR09SSVRITSk7XFxuICAgICAgICBsZXQgaXZQYXJhbWV0ZXJTcGVjID0gbmV3IEl2UGFyYW1ldGVyU3BlYyhmMjMxOUlWLmdldEJ5dGVzKCkpO1xcbiAgICAgICAgbGV0IGNpcGhlciA9IENpcGhlci5nZXRJbnN0YW5jZShBRVNfTU9ERSk7XFxuICAgICAgICBjaXBoZXIuaW5pdCgyLCBzZWNyZXRLZXlTcGVjLCBpdlBhcmFtZXRlclNwZWMpO1xcbiAgICAgICAgcmV0dXJuIGNpcGhlci5kb0ZpbmFsKGZpbGUyQnl0ZXMpO1xcbiAgICAgICAgcmV0dXJuIG5ldyBTb2Z0UmVmZXJlbmNlKGNpcGhlci5kb0ZpbmFsKGZpbGUyQnl0ZXMpKS5nZXQoKTtcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpO1xcbiAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7XFxuICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbn1cXG5cXG4kLmV4cG9ydHMuaW1hZ2VEZWNyeXB0ID0gZnVuY3Rpb24oKSB7XFxuICAgIGxldCBqYXZhSW1wb3J0ID0gbmV3IEphdmFJbXBvcnRlcigpO1xcbiAgICBqYXZhSW1wb3J0LmltcG9ydFBhY2thZ2UoXFxuICAgICAgICBQYWNrYWdlcy5jb20uZXhhbXBsZS5oaWtlcnZpZXcudXRpbHNcXG4gICAgKTtcXG4gICAgd2l0aChqYXZhSW1wb3J0KSB7XFxuICAgICAgICBsZXQgYnl0ZXMgPSBGaWxlVXRpbC50b0J5dGVzKGlucHV0KTtcXG4gICAgICAgIGJ5dGVzID0gZGVjcnlwdERhdGEoYnl0ZXMpO1xcbiAgICAgICAgcmV0dXJuIEZpbGVVdGlsLnRvSW5wdXRTdHJlYW0oYnl0ZXMpO1xcbiAgICB9XFxufVxcblwifV0iLCJpY29uIjoiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzI4LnBuZyIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment