diff --git a/.gitea/workflows/desktop.yml b/.gitea/workflows/desktop.yml index 23e423d..75e6c69 100644 --- a/.gitea/workflows/desktop.yml +++ b/.gitea/workflows/desktop.yml @@ -247,7 +247,7 @@ jobs: $PatchScript = [Text.Encoding]::UTF8.GetString( [Convert]::FromBase64String( - "CmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTsKCmNvbnN0IGRvd25sb2Fkc1BhdGggPSAnZmx1eGVyLXNyYy9mbHV4ZXJfZGVza3RvcC9zcmMvbWFpbi9VcGRhdGVyRG93bmxvYWRzLnRzJzsKY29uc3QgdXBkYXRlclBhdGggPSAnZmx1eGVyLXNyYy9mbHV4ZXJfZGVza3RvcC9zcmMvbWFpbi9VcGRhdGVyLnRzJzsKCmZ1bmN0aW9uIHJlcGxhY2VPbmNlKGlucHV0LCBwYXR0ZXJuLCByZXBsYWNlbWVudCwgbGFiZWwpIHsKICBjb25zdCBbYmVmb3JlLCAuLi5yZXN0XSA9IGlucHV0LnNwbGl0KHBhdHRlcm4pOwogIGlmIChyZXN0Lmxlbmd0aCA9PT0gMCkgewogICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGF0Y2ggJHtsYWJlbH1gKTsKICB9CiAgaWYgKHJlc3QubGVuZ3RoID4gMSkgewogICAgdGhyb3cgbmV3IEVycm9yKGBQYXRjaCB0YXJnZXQgaXMgYW1iaWd1b3VzIGZvciAke2xhYmVsfWApOwogIH0KICByZXR1cm4gYmVmb3JlICsgcmVwbGFjZW1lbnQgKyByZXN0WzBdOwp9CgpmdW5jdGlvbiByZXBsYWNlUmVnZXhPbmNlKGlucHV0LCBwYXR0ZXJuLCByZXBsYWNlbWVudCwgbGFiZWwpIHsKICBsZXQgY291bnQgPSAwOwogIGNvbnN0IG91dHB1dCA9IGlucHV0LnJlcGxhY2UocGF0dGVybiwgKC4uLmFyZ3MpID0+IHsKICAgIGNvdW50ICs9IDE7CiAgICByZXR1cm4gdHlwZW9mIHJlcGxhY2VtZW50ID09PSAnZnVuY3Rpb24nID8gcmVwbGFjZW1lbnQoLi4uYXJncykgOiByZXBsYWNlbWVudDsKICB9KTsKICBpZiAoY291bnQgIT09IDEpIHsKICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhdGNoICR7bGFiZWx9OiBtYXRjaGVzPSR7Y291bnR9YCk7CiAgfQogIHJldHVybiBvdXRwdXQ7Cn0KCmxldCBkb3dubG9hZHMgPSBmcy5yZWFkRmlsZVN5bmMoZG93bmxvYWRzUGF0aCwgJ3V0ZjgnKTsKCmRvd25sb2FkcyA9IHJlcGxhY2VPbmNlKAogIGRvd25sb2FkcywKICAiY29uc3QgUEtHU19CQVNFX1VSTCA9ICdodHRwczovL3BrZ3MuZmx1eGVyLmNvbSc7XG4iICsKICAgICJleHBvcnQgY29uc3QgVVBEQVRFX0JBU0VfVVJMID0gYCR7UEtHU19CQVNFX1VSTH0vZGVza3RvcC8ke0JVSUxEX0NIQU5ORUx9LyR7cHJvY2Vzcy5wbGF0Zm9ybX0vJHtERVNLVE9QX0RPV05MT0FEX0FSQ0h9YDtcbiIgKwogICAgImV4cG9ydCBjb25zdCBET1dOTE9BRF9QQUdFX1VSTCA9XG4iICsKICAgICJcdEJVSUxEX0NIQU5ORUwgPT09ICdjYW5hcnknID8gJ2h0dHBzOi8vY2FuYXJ5LmZsdXhlci5hcHAvZG93bmxvYWQnIDogJ2h0dHBzOi8vZmx1eGVyLmFwcC9kb3dubG9hZCc7IiwKICAiZXhwb3J0IGNvbnN0IFVQREFURV9CQVNFX1VSTCA9ICdodHRwczovL2dpdC5nYW5kYy5ydS9nc2NvcmQvZ3Njb3JkLWRlc2t0b3AvcmVsZWFzZXMnO1xuIiArCiAgICAiZXhwb3J0IGNvbnN0IERPV05MT0FEX1BBR0VfVVJMID0gVVBEQVRFX0JBU0VfVVJMOyIsCiAgJ1VwZGF0ZXJEb3dubG9hZHMgdXBkYXRlIHNvdXJjZScsCik7Cgpkb3dubG9hZHMgPSByZXBsYWNlT25jZSgKICBkb3dubG9hZHMsCiAgIlx0cmV0dXJuIGAke1VQREFURV9CQVNFX1VSTH0vJHt2ZXJzaW9ufS8ke2Zvcm1hdH1gOyIsCiAgIlx0dm9pZCB2ZXJzaW9uO1xuXHR2b2lkIGZvcm1hdDtcblx0cmV0dXJuIERPV05MT0FEX1BBR0VfVVJMOyIsCiAgJ21hbnVhbCBmYWxsYmFjayBVUkwnLAopOwoKZG93bmxvYWRzID0gcmVwbGFjZU9uY2UoCiAgZG93bmxvYWRzLAogICJcdFx0XHRcdHVybDogYnVpbGRNYW51YWxWZXJzaW9uRG93bmxvYWRVcmwoaW5mby52ZXJzaW9uLCBmb3JtYXQpLCIsCiAgIlx0XHRcdFx0dXJsOiBmaWxlPy51cmwgPz8gYnVpbGRNYW51YWxWZXJzaW9uRG93bmxvYWRVcmwoaW5mby52ZXJzaW9uLCBmb3JtYXQpLCIsCiAgJ21hbnVhbCBhc3NldCBVUkwnLAopOwoKaWYgKGRvd25sb2Fkcy5pbmNsdWRlcygncGtncy5mbHV4ZXIuY29tJykpIHsKICB0aHJvdyBuZXcgRXJyb3IoJ3BrZ3MuZmx1eGVyLmNvbSBpcyBzdGlsbCBwcmVzZW50IGluIFVwZGF0ZXJEb3dubG9hZHMudHMnKTsKfQoKZnMud3JpdGVGaWxlU3luYyhkb3dubG9hZHNQYXRoLCBkb3dubG9hZHMsICd1dGY4Jyk7CgpsZXQgdXBkYXRlciA9IGZzLnJlYWRGaWxlU3luYyh1cGRhdGVyUGF0aCwgJ3V0ZjgnKTsKCmNvbnN0IGdpdGVhRmV0Y2ggPSBgYXN5bmMgZnVuY3Rpb24gZmV0Y2hNYW51YWxMYXRlc3Qob3B0aW9uczoge2ZvcmNlUmVmcmVzaD86IGJvb2xlYW59ID0ge30pOiBQcm9taXNlPE1hbnVhbExhdGVzdEluZm8+IHsKCWNvbnN0IG5vdyA9IERhdGUubm93KCk7CglpZiAoIW9wdGlvbnMuZm9yY2VSZWZyZXNoICYmIG1hbnVhbExhdGVzdENhY2hlICYmIG5vdyAtIG1hbnVhbExhdGVzdENhY2hlLmF0IDwgTUFOVUFMX0NBQ0hFX1RUTF9NUykgewoJCXJldHVybiBtYW51YWxMYXRlc3RDYWNoZS5pbmZvOwoJfQoKCWNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goCgkJJ2h0dHBzOi8vZ2l0LmdhbmRjLnJ1L2FwaS92MS9yZXBvcy9nc2NvcmQvZ3Njb3JkLWRlc2t0b3AvcmVsZWFzZXMvbGF0ZXN0JywKCQl7CgkJCWNhY2hlOiAnbm8tc3RvcmUnLAoJCQloZWFkZXJzOiB7CgkJCQlBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJywKCQkJCSdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlJywKCQkJCVByYWdtYTogJ25vLWNhY2hlJywKCQkJfSwKCQl9LAoJKTsKCglpZiAoIXJlc3BvbnNlLm9rKSB7CgkJdGhyb3cgbmV3IEVycm9yKFxgR1NDT1JEIGxhdGVzdCByZWxlYXNlIHJlcXVlc3QgZmFpbGVkOiBcJHtyZXNwb25zZS5zdGF0dXN9XGApOwoJfQoKCWNvbnN0IHBheWxvYWQgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7CgkJdGFnX25hbWU/OiB1bmtub3duOwoJCXB1Ymxpc2hlZF9hdD86IHVua25vd247CgkJY3JlYXRlZF9hdD86IHVua25vd247CgkJYXNzZXRzPzogdW5rbm93bjsKCX07CgoJaWYgKHR5cGVvZiBwYXlsb2FkLnRhZ19uYW1lICE9PSAnc3RyaW5nJyB8fCBwYXlsb2FkLnRhZ19uYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHsKCQl0aHJvdyBuZXcgRXJyb3IoJ0dTQ09SRCBsYXRlc3QgcmVsZWFzZSByZXNwb25zZSBtaXNzaW5nIHRhZ19uYW1lJyk7Cgl9CgoJY29uc3QgdmVyc2lvbiA9IHBheWxvYWQudGFnX25hbWUudHJpbSgpLnJlcGxhY2UoL152LywgJycpOwoJY29uc3QgYXNzZXRzID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLmFzc2V0cykgPyBwYXlsb2FkLmFzc2V0cyA6IFtdOwoJY29uc3QgZmlsZXM6IFBhcnRpYWw8UmVjb3JkPE1hbnVhbERlc2t0b3BGb3JtYXQsIE1hbnVhbExhdGVzdEZpbGU+PiA9IHt9OwoJY29uc3QgaXNBcm02NCA9IHByb2Nlc3MuYXJjaCA9PT0gJ2FybTY0JzsKCglmb3IgKGNvbnN0IHJhd0Fzc2V0IG9mIGFzc2V0cykgewoJCWlmICghaXNSZWNvcmQocmF3QXNzZXQpKSBjb250aW51ZTsKCgkJY29uc3QgbmFtZSA9IHR5cGVvZiByYXdBc3NldC5uYW1lID09PSAnc3RyaW5nJyA/IHJhd0Fzc2V0Lm5hbWUgOiAnJzsKCQljb25zdCB1cmwgPQoJCQl0eXBlb2YgcmF3QXNzZXQuYnJvd3Nlcl9kb3dubG9hZF91cmwgPT09ICdzdHJpbmcnCgkJCQk/IHJhd0Fzc2V0LmJyb3dzZXJfZG93bmxvYWRfdXJsCgkJCQk6ICcnOwoKCQlpZiAoIW5hbWUgfHwgIXVybCkgY29udGludWU7CgoJCWNvbnN0IGxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpOwoJCWNvbnN0IGxvb2tzQXJtNjQgPSBsb3dlci5pbmNsdWRlcygnYXJtNjQnKSB8fCBsb3dlci5pbmNsdWRlcygnYWFyY2g2NCcpOwoJCWlmIChpc0FybTY0ICE9PSBsb29rc0FybTY0ICYmIChsb29rc0FybTY0IHx8IC8oPzp4NjR8eDg2XzY0fGFtZDY0KS9pLnRlc3QobmFtZSkpKSB7CgkJCWNvbnRpbnVlOwoJCX0KCgkJaWYgKC9cXC5BcHBJbWFnZSQvaS50ZXN0KG5hbWUpKSB7CgkJCWZpbGVzLmFwcGltYWdlID0ge3VybCwgc2hhMjU2OiBudWxsfTsKCQkJY29udGludWU7CgkJfQoJCWlmICgvXFwuZGViJC9pLnRlc3QobmFtZSkpIHsKCQkJZmlsZXMuZGViID0ge3VybCwgc2hhMjU2OiBudWxsfTsKCQkJY29udGludWU7CgkJfQoJCWlmICgvXFwucnBtJC9pLnRlc3QobmFtZSkpIHsKCQkJZmlsZXMucnBtID0ge3VybCwgc2hhMjU2OiBudWxsfTsKCQkJY29udGludWU7CgkJfQoJCWlmICgvXFwudGFyXFwuZ3okL2kudGVzdChuYW1lKSkgewoJCQlmaWxlcy50YXJfZ3ogPSB7dXJsLCBzaGEyNTY6IG51bGx9OwoJCQljb250aW51ZTsKCQl9CgkJaWYgKC9cXC5leGUkL2kudGVzdChuYW1lKSkgewoJCQlmaWxlcy5zZXR1cCA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJCWNvbnRpbnVlOwoJCX0KCQlpZiAoL1xcLmRtZyQvaS50ZXN0KG5hbWUpKSB7CgkJCWZpbGVzLmRtZyA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJCWNvbnRpbnVlOwoJCX0KCQlpZiAoL1xcLnppcCQvaS50ZXN0KG5hbWUpKSB7CgkJCWZpbGVzLnppcCA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJfQoJfQoKCWNvbnN0IGluZm86IE1hbnVhbExhdGVzdEluZm8gPSB7CgkJdmVyc2lvbiwKCQlwdWJEYXRlOgoJCQl0eXBlb2YgcGF5bG9hZC5wdWJsaXNoZWRfYXQgPT09ICdzdHJpbmcnCgkJCQk/IHBheWxvYWQucHVibGlzaGVkX2F0CgkJCQk6IHR5cGVvZiBwYXlsb2FkLmNyZWF0ZWRfYXQgPT09ICdzdHJpbmcnCgkJCQkJPyBwYXlsb2FkLmNyZWF0ZWRfYXQKCQkJCQk6IG51bGwsCgkJZmlsZXMsCgl9OwoKCW1hbnVhbExhdGVzdENhY2hlID0ge2F0OiBub3csIGluZm99OwoJcmV0dXJuIGluZm87Cn1gOwoKdXBkYXRlciA9IHJlcGxhY2VSZWdleE9uY2UoCiAgdXBkYXRlciwKICAvYXN5bmMgZnVuY3Rpb24gZmV0Y2hNYW51YWxMYXRlc3RcKG9wdGlvbnM6IFx7Zm9yY2VSZWZyZXNoXD86IGJvb2xlYW5cfSA9IFx7XH1cKTogUHJvbWlzZTxNYW51YWxMYXRlc3RJbmZvPiBce1tcc1xTXSo/XG5cfVxuZnVuY3Rpb24gc2VuZE1hbnVhbFVwZGF0ZUF2YWlsYWJsZS8sCiAgYCR7Z2l0ZWFGZXRjaH1cbmZ1bmN0aW9uIHNlbmRNYW51YWxVcGRhdGVBdmFpbGFibGVgLAogICdHaXRlYSBsYXRlc3QgcmVsZWFzZSByZXNvbHZlcicsCik7Cgp1cGRhdGVyID0gcmVwbGFjZU9uY2UoCiAgdXBkYXRlciwKICAiXHRjb25zdCB1cmwgPSBidWlsZE1hbnVhbFZlcnNpb25Eb3dubG9hZFVybCh2ZXJzaW9uLCAnYXBwaW1hZ2UnKTsiLAogICJcdGNvbnN0IHVybCA9IGxhdGVzdC5maWxlcy5hcHBpbWFnZT8udXJsID8/IGJ1aWxkTWFudWFsVmVyc2lvbkRvd25sb2FkVXJsKHZlcnNpb24sICdhcHBpbWFnZScpOyIsCiAgJ0FwcEltYWdlIGFzc2V0IFVSTCcsCik7CgppZiAoIXVwZGF0ZXIuaW5jbHVkZXMoJ2h0dHBzOi8vZ2l0LmdhbmRjLnJ1L2FwaS92MS9yZXBvcy9nc2NvcmQvZ3Njb3JkLWRlc2t0b3AvcmVsZWFzZXMvbGF0ZXN0JykpIHsKICB0aHJvdyBuZXcgRXJyb3IoJ0dpdGVhIHJlbGVhc2VzIEFQSSBVUkwgd2FzIG5vdCBpbnN0YWxsZWQnKTsKfQoKZnMud3JpdGVGaWxlU3luYyh1cGRhdGVyUGF0aCwgdXBkYXRlciwgJ3V0ZjgnKTsKCi8vIFN0YXRpYyB2YWxpZGF0aW9uIGZvciB0aGUgV2luZG93cyBwb3J0YWJsZSBicmFuY2guCi8vIEluIHRoZSBjdXJyZW50IHVwc3RyZWFtIHJlZ2lzdGVyVXBkYXRlcigpLCBpc1BvcnRhYmxlTW9kZSgpIGlzIGNoZWNrZWQgYmVmb3JlIHdpbjMyLAovLyBzbyB0aGUgcG9ydGFibGUgLmV4ZSB1c2VzIHJlZ2lzdGVyTWFudWFsVXBkYXRlcigpLCBpLmUuIHRoZSBzYW1lIEdpdGVhIGZldGNoIGFib3ZlLgpjb25zdCBwb3J0YWJsZUluZGV4ID0gdXBkYXRlci5pbmRleE9mKCdpZiAoaXNQb3J0YWJsZU1vZGUoKSknKTsKY29uc3Qgd2luMzJJbmRleCA9IHVwZGF0ZXIuaW5kZXhPZigiaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIik7CmlmIChwb3J0YWJsZUluZGV4IDwgMCB8fCB3aW4zMkluZGV4IDwgMCB8fCBwb3J0YWJsZUluZGV4ID4gd2luMzJJbmRleCkgewogIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB1cGRhdGVyIGJyYW5jaCBvcmRlcjogcG9ydGFibGUgbW9kZSBpcyBub3QgY2hlY2tlZCBiZWZvcmUgd2luMzInKTsKfQoKY29uc29sZS5sb2coJ0dTQ09SRCB1cGRhdGVyIGNvbmZpZ3VyZWQgc3VjY2Vzc2Z1bGx5Jyk7CmNvbnNvbGUubG9nKCcgIFJlbGVhc2VzOiBodHRwczovL2dpdC5nYW5kYy5ydS9nc2NvcmQvZ3Njb3JkLWRlc2t0b3AvcmVsZWFzZXMnKTsKY29uc29sZS5sb2coJyAgQVBJOiAgICAgIGh0dHBzOi8vZ2l0LmdhbmRjLnJ1L2FwaS92MS9yZXBvcy9nc2NvcmQvZ3Njb3JkLWRlc2t0b3AvcmVsZWFzZXMvbGF0ZXN0Jyk7CmNvbnNvbGUubG9nKCcgIExpbnV4IG1hbnVhbC9BcHBJbWFnZSBzb3VyY2U6IEdpdGVhJyk7CmNvbnNvbGUubG9nKCcgIFdpbmRvd3MgcG9ydGFibGUgc291cmNlOiBHaXRlYSBtYW51YWwgdXBkYXRlcicpOwpjb25zb2xlLmxvZygnICBwa2dzLmZsdXhlci5jb20gcmVtb3ZlZCBmcm9tIFVwZGF0ZXJEb3dubG9hZHMudHMnKTsK" + "CmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTsKCmNvbnN0IGRvd25sb2Fkc1BhdGggPSAnZmx1eGVyLXNyYy9mbHV4ZXJfZGVza3RvcC9zcmMvbWFpbi9VcGRhdGVyRG93bmxvYWRzLnRzJzsKY29uc3QgdXBkYXRlclBhdGggPSAnZmx1eGVyLXNyYy9mbHV4ZXJfZGVza3RvcC9zcmMvbWFpbi9VcGRhdGVyLnRzJzsKCmZ1bmN0aW9uIHJlcGxhY2VSZWdleE9uY2UoaW5wdXQsIHBhdHRlcm4sIHJlcGxhY2VtZW50LCBsYWJlbCkgewogIGxldCBjb3VudCA9IDA7CiAgY29uc3Qgb3V0cHV0ID0gaW5wdXQucmVwbGFjZShwYXR0ZXJuLCAoLi4uYXJncykgPT4gewogICAgY291bnQgKz0gMTsKICAgIHJldHVybiB0eXBlb2YgcmVwbGFjZW1lbnQgPT09ICdmdW5jdGlvbicKICAgICAgPyByZXBsYWNlbWVudCguLi5hcmdzKQogICAgICA6IHJlcGxhY2VtZW50OwogIH0pOwoKICBpZiAoY291bnQgIT09IDEpIHsKICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhdGNoICR7bGFiZWx9OiBtYXRjaGVzPSR7Y291bnR9YCk7CiAgfQoKICByZXR1cm4gb3V0cHV0Owp9CgpsZXQgZG93bmxvYWRzID0gZnMucmVhZEZpbGVTeW5jKGRvd25sb2Fkc1BhdGgsICd1dGY4Jyk7Cgpkb3dubG9hZHMgPSByZXBsYWNlUmVnZXhPbmNlKAogIGRvd25sb2FkcywKICAvY29uc3QgUEtHU19CQVNFX1VSTCA9ICdodHRwczpcL1wvcGtnc1wuZmx1eGVyXC5jb20nO1xyP1xuZXhwb3J0IGNvbnN0IFVQREFURV9CQVNFX1VSTCA9IGBcJFx7UEtHU19CQVNFX1VSTFx9XC9kZXNrdG9wXC9cJFx7QlVJTERfQ0hBTk5FTFx9XC9cJFx7cHJvY2Vzc1wucGxhdGZvcm1cfVwvXCRce0RFU0tUT1BfRE9XTkxPQURfQVJDSFx9YDtccj9cbmV4cG9ydCBjb25zdCBET1dOTE9BRF9QQUdFX1VSTCA9XHI/XG5ccypCVUlMRF9DSEFOTkVMID09PSAnY2FuYXJ5JyBcPyAnaHR0cHM6XC9cL2NhbmFyeVwuZmx1eGVyXC5hcHBcL2Rvd25sb2FkJyA6ICdodHRwczpcL1wvZmx1eGVyXC5hcHBcL2Rvd25sb2FkJzsvLAogICJleHBvcnQgY29uc3QgVVBEQVRFX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0LmdhbmRjLnJ1L2dzY29yZC9nc2NvcmQtZGVza3RvcC9yZWxlYXNlcyc7XG4iICsKICAgICJleHBvcnQgY29uc3QgRE9XTkxPQURfUEFHRV9VUkwgPSBVUERBVEVfQkFTRV9VUkw7IiwKICAnVXBkYXRlckRvd25sb2FkcyB1cGRhdGUgc291cmNlJywKKTsKCmRvd25sb2FkcyA9IHJlcGxhY2VSZWdleE9uY2UoCiAgZG93bmxvYWRzLAogIC9leHBvcnQgZnVuY3Rpb24gYnVpbGRNYW51YWxWZXJzaW9uRG93bmxvYWRVcmxcKHZlcnNpb246IHN0cmluZywgZm9ybWF0OiBNYW51YWxEZXNrdG9wRm9ybWF0XCk6IHN0cmluZyBce1xyP1xuXHMqcmV0dXJuIGBcJFx7VVBEQVRFX0JBU0VfVVJMXH1cL1wkXHt2ZXJzaW9uXH1cL1wkXHtmb3JtYXRcfWA7XHI/XG5cfS8sCiAgImV4cG9ydCBmdW5jdGlvbiBidWlsZE1hbnVhbFZlcnNpb25Eb3dubG9hZFVybCh2ZXJzaW9uOiBzdHJpbmcsIGZvcm1hdDogTWFudWFsRGVza3RvcEZvcm1hdCk6IHN0cmluZyB7XG4iICsKICAgICJcdHZvaWQgdmVyc2lvbjtcbiIgKwogICAgIlx0dm9pZCBmb3JtYXQ7XG4iICsKICAgICJcdHJldHVybiBET1dOTE9BRF9QQUdFX1VSTDtcbiIgKwogICAgIn0iLAogICdtYW51YWwgZmFsbGJhY2sgVVJMJywKKTsKCmRvd25sb2FkcyA9IHJlcGxhY2VSZWdleE9uY2UoCiAgZG93bmxvYWRzLAogIC91cmw6XHMqYnVpbGRNYW51YWxWZXJzaW9uRG93bmxvYWRVcmxcKGluZm9cLnZlcnNpb24sXHMqZm9ybWF0XCksLywKICAidXJsOiBmaWxlPy51cmwgPz8gYnVpbGRNYW51YWxWZXJzaW9uRG93bmxvYWRVcmwoaW5mby52ZXJzaW9uLCBmb3JtYXQpLCIsCiAgJ21hbnVhbCBhc3NldCBVUkwnLAopOwoKaWYgKGRvd25sb2Fkcy5pbmNsdWRlcygncGtncy5mbHV4ZXIuY29tJykpIHsKICB0aHJvdyBuZXcgRXJyb3IoCiAgICAncGtncy5mbHV4ZXIuY29tIGlzIHN0aWxsIHByZXNlbnQgaW4gVXBkYXRlckRvd25sb2Fkcy50cycsCiAgKTsKfQoKaWYgKAogICFkb3dubG9hZHMuaW5jbHVkZXMoCiAgICAnaHR0cHM6Ly9naXQuZ2FuZGMucnUvZ3Njb3JkL2dzY29yZC1kZXNrdG9wL3JlbGVhc2VzJywKICApCikgewogIHRocm93IG5ldyBFcnJvcignR1NDT1JEIHJlbGVhc2VzIFVSTCB3YXMgbm90IGluc3RhbGxlZCcpOwp9Cgpmcy53cml0ZUZpbGVTeW5jKGRvd25sb2Fkc1BhdGgsIGRvd25sb2FkcywgJ3V0ZjgnKTsKCmxldCB1cGRhdGVyID0gZnMucmVhZEZpbGVTeW5jKHVwZGF0ZXJQYXRoLCAndXRmOCcpOwoKdXBkYXRlciA9IHJlcGxhY2VSZWdleE9uY2UoCiAgdXBkYXRlciwKICAvY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFwoYFwkXHtVUERBVEVfQkFTRV9VUkxcfVwvbGF0ZXN0YCwgXHsvLAogICJjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuIiArCiAgICAiXHRcdCdodHRwczovL2dpdC5nYW5kYy5ydS9hcGkvdjEvcmVwb3MvZ3Njb3JkL2dzY29yZC1kZXNrdG9wL3JlbGVhc2VzL2xhdGVzdCcsXG4iICsKICAgICJcdFx0eyIsCiAgJ0dpdGVhIGxhdGVzdCByZWxlYXNlIFVSTCcsCik7Cgpjb25zdCBnaXRlYVBhcnNlciA9IGAJY29uc3QgcGF5bG9hZCA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHsKCQl0YWdfbmFtZT86IHVua25vd247CgkJcHVibGlzaGVkX2F0PzogdW5rbm93bjsKCQljcmVhdGVkX2F0PzogdW5rbm93bjsKCQlhc3NldHM/OiB1bmtub3duOwoJfTsKCglpZiAoCgkJdHlwZW9mIHBheWxvYWQudGFnX25hbWUgIT09ICdzdHJpbmcnIHx8CgkJcGF5bG9hZC50YWdfbmFtZS50cmltKCkubGVuZ3RoID09PSAwCgkpIHsKCQl0aHJvdyBuZXcgRXJyb3IoJ0dTQ09SRCBsYXRlc3QgcmVsZWFzZSByZXNwb25zZSBtaXNzaW5nIHRhZ19uYW1lJyk7Cgl9CgoJY29uc3QgdmVyc2lvbiA9IHBheWxvYWQudGFnX25hbWUudHJpbSgpLnJlcGxhY2UoL152LywgJycpOwoJY29uc3QgYXNzZXRzID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLmFzc2V0cykgPyBwYXlsb2FkLmFzc2V0cyA6IFtdOwoJY29uc3QgZmlsZXM6IFBhcnRpYWw8CgkJUmVjb3JkPE1hbnVhbERlc2t0b3BGb3JtYXQsIE1hbnVhbExhdGVzdEZpbGU+Cgk+ID0ge307CgoJY29uc3QgaXNBcm02NCA9IHByb2Nlc3MuYXJjaCA9PT0gJ2FybTY0JzsKCglmb3IgKGNvbnN0IHJhd0Fzc2V0IG9mIGFzc2V0cykgewoJCWlmICghaXNSZWNvcmQocmF3QXNzZXQpKSB7CgkJCWNvbnRpbnVlOwoJCX0KCgkJY29uc3QgbmFtZSA9CgkJCXR5cGVvZiByYXdBc3NldC5uYW1lID09PSAnc3RyaW5nJwoJCQkJPyByYXdBc3NldC5uYW1lCgkJCQk6ICcnOwoKCQljb25zdCB1cmwgPQoJCQl0eXBlb2YgcmF3QXNzZXQuYnJvd3Nlcl9kb3dubG9hZF91cmwgPT09ICdzdHJpbmcnCgkJCQk/IHJhd0Fzc2V0LmJyb3dzZXJfZG93bmxvYWRfdXJsCgkJCQk6ICcnOwoKCQlpZiAoIW5hbWUgfHwgIXVybCkgewoJCQljb250aW51ZTsKCQl9CgoJCWNvbnN0IGxvd2VyTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKCgkJaWYgKGlzQXJtNjQpIHsKCQkJaWYgKAoJCQkJIWxvd2VyTmFtZS5pbmNsdWRlcygnYXJtNjQnKSAmJgoJCQkJIWxvd2VyTmFtZS5pbmNsdWRlcygnYWFyY2g2NCcpCgkJCSkgewoJCQkJY29udGludWU7CgkJCX0KCQl9IGVsc2UgaWYgKAoJCQlsb3dlck5hbWUuaW5jbHVkZXMoJ2FybTY0JykgfHwKCQkJbG93ZXJOYW1lLmluY2x1ZGVzKCdhYXJjaDY0JykKCQkpIHsKCQkJY29udGludWU7CgkJfQoKCQlpZiAoL2xpbnV4LXg4Nl82NFxcLkFwcEltYWdlJC9pLnRlc3QobmFtZSkgfHwKCQkJL2xpbnV4LWFybTY0XFwuQXBwSW1hZ2UkL2kudGVzdChuYW1lKSkgewoJCQlmaWxlcy5hcHBpbWFnZSA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJCWNvbnRpbnVlOwoJCX0KCgkJaWYgKC9saW51eC1hbWQ2NFxcLmRlYiQvaS50ZXN0KG5hbWUpIHx8CgkJCS9saW51eC1hcm02NFxcLmRlYiQvaS50ZXN0KG5hbWUpKSB7CgkJCWZpbGVzLmRlYiA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJCWNvbnRpbnVlOwoJCX0KCgkJaWYgKC9saW51eC14ODZfNjRcXC5ycG0kL2kudGVzdChuYW1lKSB8fAoJCQkvbGludXgtYWFyY2g2NFxcLnJwbSQvaS50ZXN0KG5hbWUpKSB7CgkJCWZpbGVzLnJwbSA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJCWNvbnRpbnVlOwoJCX0KCgkJaWYgKC9saW51eC14NjRcXC50YXJcXC5neiQvaS50ZXN0KG5hbWUpIHx8CgkJCS9saW51eC1hcm02NFxcLnRhclxcLmd6JC9pLnRlc3QobmFtZSkpIHsKCQkJZmlsZXMudGFyX2d6ID0ge3VybCwgc2hhMjU2OiBudWxsfTsKCQkJY29udGludWU7CgkJfQoKCQlpZiAoL3BvcnRhYmxlLXdpbi14NjRcXC5leGUkL2kudGVzdChuYW1lKSB8fAoJCQkvcG9ydGFibGUtd2luLWFybTY0XFwuZXhlJC9pLnRlc3QobmFtZSkpIHsKCQkJZmlsZXMuc2V0dXAgPSB7dXJsLCBzaGEyNTY6IG51bGx9OwoJCQljb250aW51ZTsKCQl9CgoJCWlmICgvXFwuZG1nJC9pLnRlc3QobmFtZSkpIHsKCQkJZmlsZXMuZG1nID0ge3VybCwgc2hhMjU2OiBudWxsfTsKCQkJY29udGludWU7CgkJfQoKCQlpZiAoL1xcLnppcCQvaS50ZXN0KG5hbWUpKSB7CgkJCWZpbGVzLnppcCA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJfQoJfQoKCWNvbnN0IGluZm86IE1hbnVhbExhdGVzdEluZm8gPSB7CgkJdmVyc2lvbiwKCQlwdWJEYXRlOgoJCQl0eXBlb2YgcGF5bG9hZC5wdWJsaXNoZWRfYXQgPT09ICdzdHJpbmcnCgkJCQk/IHBheWxvYWQucHVibGlzaGVkX2F0CgkJCQk6IHR5cGVvZiBwYXlsb2FkLmNyZWF0ZWRfYXQgPT09ICdzdHJpbmcnCgkJCQkJPyBwYXlsb2FkLmNyZWF0ZWRfYXQKCQkJCQk6IG51bGwsCgkJZmlsZXMsCgl9O2A7Cgp1cGRhdGVyID0gcmVwbGFjZVJlZ2V4T25jZSgKICB1cGRhdGVyLAogIC9cdGNvbnN0IHBheWxvYWQgPSBcKGF3YWl0IHJlc3BvbnNlXC5qc29uXChcKVwpIGFzIFx7dmVyc2lvblw/OiB1bmtub3duOyBwdWJfZGF0ZVw/OiB1bmtub3duOyBmaWxlc1w/OiB1bmtub3duXH07W1xzXFNdKj9ccj9cblx0Y29uc3QgaW5mbzogTWFudWFsTGF0ZXN0SW5mbyA9IFx7W1xzXFNdKj9ccj9cblx0XH07LywKICBnaXRlYVBhcnNlciwKICAnR2l0ZWEgbGF0ZXN0IHJlbGVhc2UgcGFyc2VyJywKKTsKCmlmICgKICAhdXBkYXRlci5pbmNsdWRlcygKICAgICdodHRwczovL2dpdC5nYW5kYy5ydS9hcGkvdjEvcmVwb3MvZ3Njb3JkL2dzY29yZC1kZXNrdG9wL3JlbGVhc2VzL2xhdGVzdCcsCiAgKQopIHsKICB0aHJvdyBuZXcgRXJyb3IoJ0dpdGVhIGxhdGVzdC1yZWxlYXNlIEFQSSBVUkwgd2FzIG5vdCBpbnN0YWxsZWQnKTsKfQoKaWYgKHVwZGF0ZXIuaW5jbHVkZXMoJ0xhdGVzdCB2ZXJzaW9uIHJlc3BvbnNlIG1pc3NpbmcgdmVyc2lvbiBzdHJpbmcnKSkgewogIHRocm93IG5ldyBFcnJvcignT2xkIEZsdXhlciBsYXRlc3QtcmVsZWFzZSBwYXJzZXIgaXMgc3RpbGwgcHJlc2VudCcpOwp9Cgpjb25zdCBwb3J0YWJsZUluZGV4ID0gdXBkYXRlci5pbmRleE9mKCdpZiAoaXNQb3J0YWJsZU1vZGUoKSknKTsKY29uc3Qgd2luMzJJbmRleCA9IHVwZGF0ZXIuaW5kZXhPZigKICAiaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIiwKKTsKCmlmICgKICBwb3J0YWJsZUluZGV4IDwgMCB8fAogIHdpbjMySW5kZXggPCAwIHx8CiAgcG9ydGFibGVJbmRleCA+IHdpbjMySW5kZXgKKSB7CiAgdGhyb3cgbmV3IEVycm9yKAogICAgJ1BvcnRhYmxlIG1vZGUgaXMgbm90IGNoZWNrZWQgYmVmb3JlIHRoZSB3aW4zMiB1cGRhdGVyIGJyYW5jaCcsCiAgKTsKfQoKZnMud3JpdGVGaWxlU3luYyh1cGRhdGVyUGF0aCwgdXBkYXRlciwgJ3V0ZjgnKTsKCmNvbnNvbGUubG9nKCdHU0NPUkQgdXBkYXRlciBjb25maWd1cmVkIHN1Y2Nlc3NmdWxseScpOwpjb25zb2xlLmxvZygKICAnICBSZWxlYXNlczogaHR0cHM6Ly9naXQuZ2FuZGMucnUvZ3Njb3JkL2dzY29yZC1kZXNrdG9wL3JlbGVhc2VzJywKKTsKY29uc29sZS5sb2coCiAgJyAgQVBJOiBodHRwczovL2dpdC5nYW5kYy5ydS9hcGkvdjEvcmVwb3MvZ3Njb3JkL2dzY29yZC1kZXNrdG9wL3JlbGVhc2VzL2xhdGVzdCcsCik7CmNvbnNvbGUubG9nKCcgIExpbnV4IG1hbnVhbC9BcHBJbWFnZSBzb3VyY2U6IEdpdGVhJyk7CmNvbnNvbGUubG9nKCcgIFdpbmRvd3MgcG9ydGFibGUgc291cmNlOiBHaXRlYSBtYW51YWwgdXBkYXRlcicpOwpjb25zb2xlLmxvZygnICBVcHN0cmVhbSBwa2dzLmZsdXhlci5jb20gc291cmNlIHJlbW92ZWQnKTsK" ) ) @@ -849,7 +849,7 @@ jobs: PATCH_PATH="$(mktemp --suffix=.cjs)" - printf '%s' 'CmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTsKCmNvbnN0IGRvd25sb2Fkc1BhdGggPSAnZmx1eGVyLXNyYy9mbHV4ZXJfZGVza3RvcC9zcmMvbWFpbi9VcGRhdGVyRG93bmxvYWRzLnRzJzsKY29uc3QgdXBkYXRlclBhdGggPSAnZmx1eGVyLXNyYy9mbHV4ZXJfZGVza3RvcC9zcmMvbWFpbi9VcGRhdGVyLnRzJzsKCmZ1bmN0aW9uIHJlcGxhY2VPbmNlKGlucHV0LCBwYXR0ZXJuLCByZXBsYWNlbWVudCwgbGFiZWwpIHsKICBjb25zdCBbYmVmb3JlLCAuLi5yZXN0XSA9IGlucHV0LnNwbGl0KHBhdHRlcm4pOwogIGlmIChyZXN0Lmxlbmd0aCA9PT0gMCkgewogICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGF0Y2ggJHtsYWJlbH1gKTsKICB9CiAgaWYgKHJlc3QubGVuZ3RoID4gMSkgewogICAgdGhyb3cgbmV3IEVycm9yKGBQYXRjaCB0YXJnZXQgaXMgYW1iaWd1b3VzIGZvciAke2xhYmVsfWApOwogIH0KICByZXR1cm4gYmVmb3JlICsgcmVwbGFjZW1lbnQgKyByZXN0WzBdOwp9CgpmdW5jdGlvbiByZXBsYWNlUmVnZXhPbmNlKGlucHV0LCBwYXR0ZXJuLCByZXBsYWNlbWVudCwgbGFiZWwpIHsKICBsZXQgY291bnQgPSAwOwogIGNvbnN0IG91dHB1dCA9IGlucHV0LnJlcGxhY2UocGF0dGVybiwgKC4uLmFyZ3MpID0+IHsKICAgIGNvdW50ICs9IDE7CiAgICByZXR1cm4gdHlwZW9mIHJlcGxhY2VtZW50ID09PSAnZnVuY3Rpb24nID8gcmVwbGFjZW1lbnQoLi4uYXJncykgOiByZXBsYWNlbWVudDsKICB9KTsKICBpZiAoY291bnQgIT09IDEpIHsKICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhdGNoICR7bGFiZWx9OiBtYXRjaGVzPSR7Y291bnR9YCk7CiAgfQogIHJldHVybiBvdXRwdXQ7Cn0KCmxldCBkb3dubG9hZHMgPSBmcy5yZWFkRmlsZVN5bmMoZG93bmxvYWRzUGF0aCwgJ3V0ZjgnKTsKCmRvd25sb2FkcyA9IHJlcGxhY2VPbmNlKAogIGRvd25sb2FkcywKICAiY29uc3QgUEtHU19CQVNFX1VSTCA9ICdodHRwczovL3BrZ3MuZmx1eGVyLmNvbSc7XG4iICsKICAgICJleHBvcnQgY29uc3QgVVBEQVRFX0JBU0VfVVJMID0gYCR7UEtHU19CQVNFX1VSTH0vZGVza3RvcC8ke0JVSUxEX0NIQU5ORUx9LyR7cHJvY2Vzcy5wbGF0Zm9ybX0vJHtERVNLVE9QX0RPV05MT0FEX0FSQ0h9YDtcbiIgKwogICAgImV4cG9ydCBjb25zdCBET1dOTE9BRF9QQUdFX1VSTCA9XG4iICsKICAgICJcdEJVSUxEX0NIQU5ORUwgPT09ICdjYW5hcnknID8gJ2h0dHBzOi8vY2FuYXJ5LmZsdXhlci5hcHAvZG93bmxvYWQnIDogJ2h0dHBzOi8vZmx1eGVyLmFwcC9kb3dubG9hZCc7IiwKICAiZXhwb3J0IGNvbnN0IFVQREFURV9CQVNFX1VSTCA9ICdodHRwczovL2dpdC5nYW5kYy5ydS9nc2NvcmQvZ3Njb3JkLWRlc2t0b3AvcmVsZWFzZXMnO1xuIiArCiAgICAiZXhwb3J0IGNvbnN0IERPV05MT0FEX1BBR0VfVVJMID0gVVBEQVRFX0JBU0VfVVJMOyIsCiAgJ1VwZGF0ZXJEb3dubG9hZHMgdXBkYXRlIHNvdXJjZScsCik7Cgpkb3dubG9hZHMgPSByZXBsYWNlT25jZSgKICBkb3dubG9hZHMsCiAgIlx0cmV0dXJuIGAke1VQREFURV9CQVNFX1VSTH0vJHt2ZXJzaW9ufS8ke2Zvcm1hdH1gOyIsCiAgIlx0dm9pZCB2ZXJzaW9uO1xuXHR2b2lkIGZvcm1hdDtcblx0cmV0dXJuIERPV05MT0FEX1BBR0VfVVJMOyIsCiAgJ21hbnVhbCBmYWxsYmFjayBVUkwnLAopOwoKZG93bmxvYWRzID0gcmVwbGFjZU9uY2UoCiAgZG93bmxvYWRzLAogICJcdFx0XHRcdHVybDogYnVpbGRNYW51YWxWZXJzaW9uRG93bmxvYWRVcmwoaW5mby52ZXJzaW9uLCBmb3JtYXQpLCIsCiAgIlx0XHRcdFx0dXJsOiBmaWxlPy51cmwgPz8gYnVpbGRNYW51YWxWZXJzaW9uRG93bmxvYWRVcmwoaW5mby52ZXJzaW9uLCBmb3JtYXQpLCIsCiAgJ21hbnVhbCBhc3NldCBVUkwnLAopOwoKaWYgKGRvd25sb2Fkcy5pbmNsdWRlcygncGtncy5mbHV4ZXIuY29tJykpIHsKICB0aHJvdyBuZXcgRXJyb3IoJ3BrZ3MuZmx1eGVyLmNvbSBpcyBzdGlsbCBwcmVzZW50IGluIFVwZGF0ZXJEb3dubG9hZHMudHMnKTsKfQoKZnMud3JpdGVGaWxlU3luYyhkb3dubG9hZHNQYXRoLCBkb3dubG9hZHMsICd1dGY4Jyk7CgpsZXQgdXBkYXRlciA9IGZzLnJlYWRGaWxlU3luYyh1cGRhdGVyUGF0aCwgJ3V0ZjgnKTsKCmNvbnN0IGdpdGVhRmV0Y2ggPSBgYXN5bmMgZnVuY3Rpb24gZmV0Y2hNYW51YWxMYXRlc3Qob3B0aW9uczoge2ZvcmNlUmVmcmVzaD86IGJvb2xlYW59ID0ge30pOiBQcm9taXNlPE1hbnVhbExhdGVzdEluZm8+IHsKCWNvbnN0IG5vdyA9IERhdGUubm93KCk7CglpZiAoIW9wdGlvbnMuZm9yY2VSZWZyZXNoICYmIG1hbnVhbExhdGVzdENhY2hlICYmIG5vdyAtIG1hbnVhbExhdGVzdENhY2hlLmF0IDwgTUFOVUFMX0NBQ0hFX1RUTF9NUykgewoJCXJldHVybiBtYW51YWxMYXRlc3RDYWNoZS5pbmZvOwoJfQoKCWNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goCgkJJ2h0dHBzOi8vZ2l0LmdhbmRjLnJ1L2FwaS92MS9yZXBvcy9nc2NvcmQvZ3Njb3JkLWRlc2t0b3AvcmVsZWFzZXMvbGF0ZXN0JywKCQl7CgkJCWNhY2hlOiAnbm8tc3RvcmUnLAoJCQloZWFkZXJzOiB7CgkJCQlBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJywKCQkJCSdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlJywKCQkJCVByYWdtYTogJ25vLWNhY2hlJywKCQkJfSwKCQl9LAoJKTsKCglpZiAoIXJlc3BvbnNlLm9rKSB7CgkJdGhyb3cgbmV3IEVycm9yKFxgR1NDT1JEIGxhdGVzdCByZWxlYXNlIHJlcXVlc3QgZmFpbGVkOiBcJHtyZXNwb25zZS5zdGF0dXN9XGApOwoJfQoKCWNvbnN0IHBheWxvYWQgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7CgkJdGFnX25hbWU/OiB1bmtub3duOwoJCXB1Ymxpc2hlZF9hdD86IHVua25vd247CgkJY3JlYXRlZF9hdD86IHVua25vd247CgkJYXNzZXRzPzogdW5rbm93bjsKCX07CgoJaWYgKHR5cGVvZiBwYXlsb2FkLnRhZ19uYW1lICE9PSAnc3RyaW5nJyB8fCBwYXlsb2FkLnRhZ19uYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHsKCQl0aHJvdyBuZXcgRXJyb3IoJ0dTQ09SRCBsYXRlc3QgcmVsZWFzZSByZXNwb25zZSBtaXNzaW5nIHRhZ19uYW1lJyk7Cgl9CgoJY29uc3QgdmVyc2lvbiA9IHBheWxvYWQudGFnX25hbWUudHJpbSgpLnJlcGxhY2UoL152LywgJycpOwoJY29uc3QgYXNzZXRzID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLmFzc2V0cykgPyBwYXlsb2FkLmFzc2V0cyA6IFtdOwoJY29uc3QgZmlsZXM6IFBhcnRpYWw8UmVjb3JkPE1hbnVhbERlc2t0b3BGb3JtYXQsIE1hbnVhbExhdGVzdEZpbGU+PiA9IHt9OwoJY29uc3QgaXNBcm02NCA9IHByb2Nlc3MuYXJjaCA9PT0gJ2FybTY0JzsKCglmb3IgKGNvbnN0IHJhd0Fzc2V0IG9mIGFzc2V0cykgewoJCWlmICghaXNSZWNvcmQocmF3QXNzZXQpKSBjb250aW51ZTsKCgkJY29uc3QgbmFtZSA9IHR5cGVvZiByYXdBc3NldC5uYW1lID09PSAnc3RyaW5nJyA/IHJhd0Fzc2V0Lm5hbWUgOiAnJzsKCQljb25zdCB1cmwgPQoJCQl0eXBlb2YgcmF3QXNzZXQuYnJvd3Nlcl9kb3dubG9hZF91cmwgPT09ICdzdHJpbmcnCgkJCQk/IHJhd0Fzc2V0LmJyb3dzZXJfZG93bmxvYWRfdXJsCgkJCQk6ICcnOwoKCQlpZiAoIW5hbWUgfHwgIXVybCkgY29udGludWU7CgoJCWNvbnN0IGxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpOwoJCWNvbnN0IGxvb2tzQXJtNjQgPSBsb3dlci5pbmNsdWRlcygnYXJtNjQnKSB8fCBsb3dlci5pbmNsdWRlcygnYWFyY2g2NCcpOwoJCWlmIChpc0FybTY0ICE9PSBsb29rc0FybTY0ICYmIChsb29rc0FybTY0IHx8IC8oPzp4NjR8eDg2XzY0fGFtZDY0KS9pLnRlc3QobmFtZSkpKSB7CgkJCWNvbnRpbnVlOwoJCX0KCgkJaWYgKC9cXC5BcHBJbWFnZSQvaS50ZXN0KG5hbWUpKSB7CgkJCWZpbGVzLmFwcGltYWdlID0ge3VybCwgc2hhMjU2OiBudWxsfTsKCQkJY29udGludWU7CgkJfQoJCWlmICgvXFwuZGViJC9pLnRlc3QobmFtZSkpIHsKCQkJZmlsZXMuZGViID0ge3VybCwgc2hhMjU2OiBudWxsfTsKCQkJY29udGludWU7CgkJfQoJCWlmICgvXFwucnBtJC9pLnRlc3QobmFtZSkpIHsKCQkJZmlsZXMucnBtID0ge3VybCwgc2hhMjU2OiBudWxsfTsKCQkJY29udGludWU7CgkJfQoJCWlmICgvXFwudGFyXFwuZ3okL2kudGVzdChuYW1lKSkgewoJCQlmaWxlcy50YXJfZ3ogPSB7dXJsLCBzaGEyNTY6IG51bGx9OwoJCQljb250aW51ZTsKCQl9CgkJaWYgKC9cXC5leGUkL2kudGVzdChuYW1lKSkgewoJCQlmaWxlcy5zZXR1cCA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJCWNvbnRpbnVlOwoJCX0KCQlpZiAoL1xcLmRtZyQvaS50ZXN0KG5hbWUpKSB7CgkJCWZpbGVzLmRtZyA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJCWNvbnRpbnVlOwoJCX0KCQlpZiAoL1xcLnppcCQvaS50ZXN0KG5hbWUpKSB7CgkJCWZpbGVzLnppcCA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJfQoJfQoKCWNvbnN0IGluZm86IE1hbnVhbExhdGVzdEluZm8gPSB7CgkJdmVyc2lvbiwKCQlwdWJEYXRlOgoJCQl0eXBlb2YgcGF5bG9hZC5wdWJsaXNoZWRfYXQgPT09ICdzdHJpbmcnCgkJCQk/IHBheWxvYWQucHVibGlzaGVkX2F0CgkJCQk6IHR5cGVvZiBwYXlsb2FkLmNyZWF0ZWRfYXQgPT09ICdzdHJpbmcnCgkJCQkJPyBwYXlsb2FkLmNyZWF0ZWRfYXQKCQkJCQk6IG51bGwsCgkJZmlsZXMsCgl9OwoKCW1hbnVhbExhdGVzdENhY2hlID0ge2F0OiBub3csIGluZm99OwoJcmV0dXJuIGluZm87Cn1gOwoKdXBkYXRlciA9IHJlcGxhY2VSZWdleE9uY2UoCiAgdXBkYXRlciwKICAvYXN5bmMgZnVuY3Rpb24gZmV0Y2hNYW51YWxMYXRlc3RcKG9wdGlvbnM6IFx7Zm9yY2VSZWZyZXNoXD86IGJvb2xlYW5cfSA9IFx7XH1cKTogUHJvbWlzZTxNYW51YWxMYXRlc3RJbmZvPiBce1tcc1xTXSo/XG5cfVxuZnVuY3Rpb24gc2VuZE1hbnVhbFVwZGF0ZUF2YWlsYWJsZS8sCiAgYCR7Z2l0ZWFGZXRjaH1cbmZ1bmN0aW9uIHNlbmRNYW51YWxVcGRhdGVBdmFpbGFibGVgLAogICdHaXRlYSBsYXRlc3QgcmVsZWFzZSByZXNvbHZlcicsCik7Cgp1cGRhdGVyID0gcmVwbGFjZU9uY2UoCiAgdXBkYXRlciwKICAiXHRjb25zdCB1cmwgPSBidWlsZE1hbnVhbFZlcnNpb25Eb3dubG9hZFVybCh2ZXJzaW9uLCAnYXBwaW1hZ2UnKTsiLAogICJcdGNvbnN0IHVybCA9IGxhdGVzdC5maWxlcy5hcHBpbWFnZT8udXJsID8/IGJ1aWxkTWFudWFsVmVyc2lvbkRvd25sb2FkVXJsKHZlcnNpb24sICdhcHBpbWFnZScpOyIsCiAgJ0FwcEltYWdlIGFzc2V0IFVSTCcsCik7CgppZiAoIXVwZGF0ZXIuaW5jbHVkZXMoJ2h0dHBzOi8vZ2l0LmdhbmRjLnJ1L2FwaS92MS9yZXBvcy9nc2NvcmQvZ3Njb3JkLWRlc2t0b3AvcmVsZWFzZXMvbGF0ZXN0JykpIHsKICB0aHJvdyBuZXcgRXJyb3IoJ0dpdGVhIHJlbGVhc2VzIEFQSSBVUkwgd2FzIG5vdCBpbnN0YWxsZWQnKTsKfQoKZnMud3JpdGVGaWxlU3luYyh1cGRhdGVyUGF0aCwgdXBkYXRlciwgJ3V0ZjgnKTsKCi8vIFN0YXRpYyB2YWxpZGF0aW9uIGZvciB0aGUgV2luZG93cyBwb3J0YWJsZSBicmFuY2guCi8vIEluIHRoZSBjdXJyZW50IHVwc3RyZWFtIHJlZ2lzdGVyVXBkYXRlcigpLCBpc1BvcnRhYmxlTW9kZSgpIGlzIGNoZWNrZWQgYmVmb3JlIHdpbjMyLAovLyBzbyB0aGUgcG9ydGFibGUgLmV4ZSB1c2VzIHJlZ2lzdGVyTWFudWFsVXBkYXRlcigpLCBpLmUuIHRoZSBzYW1lIEdpdGVhIGZldGNoIGFib3ZlLgpjb25zdCBwb3J0YWJsZUluZGV4ID0gdXBkYXRlci5pbmRleE9mKCdpZiAoaXNQb3J0YWJsZU1vZGUoKSknKTsKY29uc3Qgd2luMzJJbmRleCA9IHVwZGF0ZXIuaW5kZXhPZigiaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIik7CmlmIChwb3J0YWJsZUluZGV4IDwgMCB8fCB3aW4zMkluZGV4IDwgMCB8fCBwb3J0YWJsZUluZGV4ID4gd2luMzJJbmRleCkgewogIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB1cGRhdGVyIGJyYW5jaCBvcmRlcjogcG9ydGFibGUgbW9kZSBpcyBub3QgY2hlY2tlZCBiZWZvcmUgd2luMzInKTsKfQoKY29uc29sZS5sb2coJ0dTQ09SRCB1cGRhdGVyIGNvbmZpZ3VyZWQgc3VjY2Vzc2Z1bGx5Jyk7CmNvbnNvbGUubG9nKCcgIFJlbGVhc2VzOiBodHRwczovL2dpdC5nYW5kYy5ydS9nc2NvcmQvZ3Njb3JkLWRlc2t0b3AvcmVsZWFzZXMnKTsKY29uc29sZS5sb2coJyAgQVBJOiAgICAgIGh0dHBzOi8vZ2l0LmdhbmRjLnJ1L2FwaS92MS9yZXBvcy9nc2NvcmQvZ3Njb3JkLWRlc2t0b3AvcmVsZWFzZXMvbGF0ZXN0Jyk7CmNvbnNvbGUubG9nKCcgIExpbnV4IG1hbnVhbC9BcHBJbWFnZSBzb3VyY2U6IEdpdGVhJyk7CmNvbnNvbGUubG9nKCcgIFdpbmRvd3MgcG9ydGFibGUgc291cmNlOiBHaXRlYSBtYW51YWwgdXBkYXRlcicpOwpjb25zb2xlLmxvZygnICBwa2dzLmZsdXhlci5jb20gcmVtb3ZlZCBmcm9tIFVwZGF0ZXJEb3dubG9hZHMudHMnKTsK' | + printf '%s' 'CmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTsKCmNvbnN0IGRvd25sb2Fkc1BhdGggPSAnZmx1eGVyLXNyYy9mbHV4ZXJfZGVza3RvcC9zcmMvbWFpbi9VcGRhdGVyRG93bmxvYWRzLnRzJzsKY29uc3QgdXBkYXRlclBhdGggPSAnZmx1eGVyLXNyYy9mbHV4ZXJfZGVza3RvcC9zcmMvbWFpbi9VcGRhdGVyLnRzJzsKCmZ1bmN0aW9uIHJlcGxhY2VSZWdleE9uY2UoaW5wdXQsIHBhdHRlcm4sIHJlcGxhY2VtZW50LCBsYWJlbCkgewogIGxldCBjb3VudCA9IDA7CiAgY29uc3Qgb3V0cHV0ID0gaW5wdXQucmVwbGFjZShwYXR0ZXJuLCAoLi4uYXJncykgPT4gewogICAgY291bnQgKz0gMTsKICAgIHJldHVybiB0eXBlb2YgcmVwbGFjZW1lbnQgPT09ICdmdW5jdGlvbicKICAgICAgPyByZXBsYWNlbWVudCguLi5hcmdzKQogICAgICA6IHJlcGxhY2VtZW50OwogIH0pOwoKICBpZiAoY291bnQgIT09IDEpIHsKICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhdGNoICR7bGFiZWx9OiBtYXRjaGVzPSR7Y291bnR9YCk7CiAgfQoKICByZXR1cm4gb3V0cHV0Owp9CgpsZXQgZG93bmxvYWRzID0gZnMucmVhZEZpbGVTeW5jKGRvd25sb2Fkc1BhdGgsICd1dGY4Jyk7Cgpkb3dubG9hZHMgPSByZXBsYWNlUmVnZXhPbmNlKAogIGRvd25sb2FkcywKICAvY29uc3QgUEtHU19CQVNFX1VSTCA9ICdodHRwczpcL1wvcGtnc1wuZmx1eGVyXC5jb20nO1xyP1xuZXhwb3J0IGNvbnN0IFVQREFURV9CQVNFX1VSTCA9IGBcJFx7UEtHU19CQVNFX1VSTFx9XC9kZXNrdG9wXC9cJFx7QlVJTERfQ0hBTk5FTFx9XC9cJFx7cHJvY2Vzc1wucGxhdGZvcm1cfVwvXCRce0RFU0tUT1BfRE9XTkxPQURfQVJDSFx9YDtccj9cbmV4cG9ydCBjb25zdCBET1dOTE9BRF9QQUdFX1VSTCA9XHI/XG5ccypCVUlMRF9DSEFOTkVMID09PSAnY2FuYXJ5JyBcPyAnaHR0cHM6XC9cL2NhbmFyeVwuZmx1eGVyXC5hcHBcL2Rvd25sb2FkJyA6ICdodHRwczpcL1wvZmx1eGVyXC5hcHBcL2Rvd25sb2FkJzsvLAogICJleHBvcnQgY29uc3QgVVBEQVRFX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0LmdhbmRjLnJ1L2dzY29yZC9nc2NvcmQtZGVza3RvcC9yZWxlYXNlcyc7XG4iICsKICAgICJleHBvcnQgY29uc3QgRE9XTkxPQURfUEFHRV9VUkwgPSBVUERBVEVfQkFTRV9VUkw7IiwKICAnVXBkYXRlckRvd25sb2FkcyB1cGRhdGUgc291cmNlJywKKTsKCmRvd25sb2FkcyA9IHJlcGxhY2VSZWdleE9uY2UoCiAgZG93bmxvYWRzLAogIC9leHBvcnQgZnVuY3Rpb24gYnVpbGRNYW51YWxWZXJzaW9uRG93bmxvYWRVcmxcKHZlcnNpb246IHN0cmluZywgZm9ybWF0OiBNYW51YWxEZXNrdG9wRm9ybWF0XCk6IHN0cmluZyBce1xyP1xuXHMqcmV0dXJuIGBcJFx7VVBEQVRFX0JBU0VfVVJMXH1cL1wkXHt2ZXJzaW9uXH1cL1wkXHtmb3JtYXRcfWA7XHI/XG5cfS8sCiAgImV4cG9ydCBmdW5jdGlvbiBidWlsZE1hbnVhbFZlcnNpb25Eb3dubG9hZFVybCh2ZXJzaW9uOiBzdHJpbmcsIGZvcm1hdDogTWFudWFsRGVza3RvcEZvcm1hdCk6IHN0cmluZyB7XG4iICsKICAgICJcdHZvaWQgdmVyc2lvbjtcbiIgKwogICAgIlx0dm9pZCBmb3JtYXQ7XG4iICsKICAgICJcdHJldHVybiBET1dOTE9BRF9QQUdFX1VSTDtcbiIgKwogICAgIn0iLAogICdtYW51YWwgZmFsbGJhY2sgVVJMJywKKTsKCmRvd25sb2FkcyA9IHJlcGxhY2VSZWdleE9uY2UoCiAgZG93bmxvYWRzLAogIC91cmw6XHMqYnVpbGRNYW51YWxWZXJzaW9uRG93bmxvYWRVcmxcKGluZm9cLnZlcnNpb24sXHMqZm9ybWF0XCksLywKICAidXJsOiBmaWxlPy51cmwgPz8gYnVpbGRNYW51YWxWZXJzaW9uRG93bmxvYWRVcmwoaW5mby52ZXJzaW9uLCBmb3JtYXQpLCIsCiAgJ21hbnVhbCBhc3NldCBVUkwnLAopOwoKaWYgKGRvd25sb2Fkcy5pbmNsdWRlcygncGtncy5mbHV4ZXIuY29tJykpIHsKICB0aHJvdyBuZXcgRXJyb3IoCiAgICAncGtncy5mbHV4ZXIuY29tIGlzIHN0aWxsIHByZXNlbnQgaW4gVXBkYXRlckRvd25sb2Fkcy50cycsCiAgKTsKfQoKaWYgKAogICFkb3dubG9hZHMuaW5jbHVkZXMoCiAgICAnaHR0cHM6Ly9naXQuZ2FuZGMucnUvZ3Njb3JkL2dzY29yZC1kZXNrdG9wL3JlbGVhc2VzJywKICApCikgewogIHRocm93IG5ldyBFcnJvcignR1NDT1JEIHJlbGVhc2VzIFVSTCB3YXMgbm90IGluc3RhbGxlZCcpOwp9Cgpmcy53cml0ZUZpbGVTeW5jKGRvd25sb2Fkc1BhdGgsIGRvd25sb2FkcywgJ3V0ZjgnKTsKCmxldCB1cGRhdGVyID0gZnMucmVhZEZpbGVTeW5jKHVwZGF0ZXJQYXRoLCAndXRmOCcpOwoKdXBkYXRlciA9IHJlcGxhY2VSZWdleE9uY2UoCiAgdXBkYXRlciwKICAvY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFwoYFwkXHtVUERBVEVfQkFTRV9VUkxcfVwvbGF0ZXN0YCwgXHsvLAogICJjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuIiArCiAgICAiXHRcdCdodHRwczovL2dpdC5nYW5kYy5ydS9hcGkvdjEvcmVwb3MvZ3Njb3JkL2dzY29yZC1kZXNrdG9wL3JlbGVhc2VzL2xhdGVzdCcsXG4iICsKICAgICJcdFx0eyIsCiAgJ0dpdGVhIGxhdGVzdCByZWxlYXNlIFVSTCcsCik7Cgpjb25zdCBnaXRlYVBhcnNlciA9IGAJY29uc3QgcGF5bG9hZCA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHsKCQl0YWdfbmFtZT86IHVua25vd247CgkJcHVibGlzaGVkX2F0PzogdW5rbm93bjsKCQljcmVhdGVkX2F0PzogdW5rbm93bjsKCQlhc3NldHM/OiB1bmtub3duOwoJfTsKCglpZiAoCgkJdHlwZW9mIHBheWxvYWQudGFnX25hbWUgIT09ICdzdHJpbmcnIHx8CgkJcGF5bG9hZC50YWdfbmFtZS50cmltKCkubGVuZ3RoID09PSAwCgkpIHsKCQl0aHJvdyBuZXcgRXJyb3IoJ0dTQ09SRCBsYXRlc3QgcmVsZWFzZSByZXNwb25zZSBtaXNzaW5nIHRhZ19uYW1lJyk7Cgl9CgoJY29uc3QgdmVyc2lvbiA9IHBheWxvYWQudGFnX25hbWUudHJpbSgpLnJlcGxhY2UoL152LywgJycpOwoJY29uc3QgYXNzZXRzID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLmFzc2V0cykgPyBwYXlsb2FkLmFzc2V0cyA6IFtdOwoJY29uc3QgZmlsZXM6IFBhcnRpYWw8CgkJUmVjb3JkPE1hbnVhbERlc2t0b3BGb3JtYXQsIE1hbnVhbExhdGVzdEZpbGU+Cgk+ID0ge307CgoJY29uc3QgaXNBcm02NCA9IHByb2Nlc3MuYXJjaCA9PT0gJ2FybTY0JzsKCglmb3IgKGNvbnN0IHJhd0Fzc2V0IG9mIGFzc2V0cykgewoJCWlmICghaXNSZWNvcmQocmF3QXNzZXQpKSB7CgkJCWNvbnRpbnVlOwoJCX0KCgkJY29uc3QgbmFtZSA9CgkJCXR5cGVvZiByYXdBc3NldC5uYW1lID09PSAnc3RyaW5nJwoJCQkJPyByYXdBc3NldC5uYW1lCgkJCQk6ICcnOwoKCQljb25zdCB1cmwgPQoJCQl0eXBlb2YgcmF3QXNzZXQuYnJvd3Nlcl9kb3dubG9hZF91cmwgPT09ICdzdHJpbmcnCgkJCQk/IHJhd0Fzc2V0LmJyb3dzZXJfZG93bmxvYWRfdXJsCgkJCQk6ICcnOwoKCQlpZiAoIW5hbWUgfHwgIXVybCkgewoJCQljb250aW51ZTsKCQl9CgoJCWNvbnN0IGxvd2VyTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKCgkJaWYgKGlzQXJtNjQpIHsKCQkJaWYgKAoJCQkJIWxvd2VyTmFtZS5pbmNsdWRlcygnYXJtNjQnKSAmJgoJCQkJIWxvd2VyTmFtZS5pbmNsdWRlcygnYWFyY2g2NCcpCgkJCSkgewoJCQkJY29udGludWU7CgkJCX0KCQl9IGVsc2UgaWYgKAoJCQlsb3dlck5hbWUuaW5jbHVkZXMoJ2FybTY0JykgfHwKCQkJbG93ZXJOYW1lLmluY2x1ZGVzKCdhYXJjaDY0JykKCQkpIHsKCQkJY29udGludWU7CgkJfQoKCQlpZiAoL2xpbnV4LXg4Nl82NFxcLkFwcEltYWdlJC9pLnRlc3QobmFtZSkgfHwKCQkJL2xpbnV4LWFybTY0XFwuQXBwSW1hZ2UkL2kudGVzdChuYW1lKSkgewoJCQlmaWxlcy5hcHBpbWFnZSA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJCWNvbnRpbnVlOwoJCX0KCgkJaWYgKC9saW51eC1hbWQ2NFxcLmRlYiQvaS50ZXN0KG5hbWUpIHx8CgkJCS9saW51eC1hcm02NFxcLmRlYiQvaS50ZXN0KG5hbWUpKSB7CgkJCWZpbGVzLmRlYiA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJCWNvbnRpbnVlOwoJCX0KCgkJaWYgKC9saW51eC14ODZfNjRcXC5ycG0kL2kudGVzdChuYW1lKSB8fAoJCQkvbGludXgtYWFyY2g2NFxcLnJwbSQvaS50ZXN0KG5hbWUpKSB7CgkJCWZpbGVzLnJwbSA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJCWNvbnRpbnVlOwoJCX0KCgkJaWYgKC9saW51eC14NjRcXC50YXJcXC5neiQvaS50ZXN0KG5hbWUpIHx8CgkJCS9saW51eC1hcm02NFxcLnRhclxcLmd6JC9pLnRlc3QobmFtZSkpIHsKCQkJZmlsZXMudGFyX2d6ID0ge3VybCwgc2hhMjU2OiBudWxsfTsKCQkJY29udGludWU7CgkJfQoKCQlpZiAoL3BvcnRhYmxlLXdpbi14NjRcXC5leGUkL2kudGVzdChuYW1lKSB8fAoJCQkvcG9ydGFibGUtd2luLWFybTY0XFwuZXhlJC9pLnRlc3QobmFtZSkpIHsKCQkJZmlsZXMuc2V0dXAgPSB7dXJsLCBzaGEyNTY6IG51bGx9OwoJCQljb250aW51ZTsKCQl9CgoJCWlmICgvXFwuZG1nJC9pLnRlc3QobmFtZSkpIHsKCQkJZmlsZXMuZG1nID0ge3VybCwgc2hhMjU2OiBudWxsfTsKCQkJY29udGludWU7CgkJfQoKCQlpZiAoL1xcLnppcCQvaS50ZXN0KG5hbWUpKSB7CgkJCWZpbGVzLnppcCA9IHt1cmwsIHNoYTI1NjogbnVsbH07CgkJfQoJfQoKCWNvbnN0IGluZm86IE1hbnVhbExhdGVzdEluZm8gPSB7CgkJdmVyc2lvbiwKCQlwdWJEYXRlOgoJCQl0eXBlb2YgcGF5bG9hZC5wdWJsaXNoZWRfYXQgPT09ICdzdHJpbmcnCgkJCQk/IHBheWxvYWQucHVibGlzaGVkX2F0CgkJCQk6IHR5cGVvZiBwYXlsb2FkLmNyZWF0ZWRfYXQgPT09ICdzdHJpbmcnCgkJCQkJPyBwYXlsb2FkLmNyZWF0ZWRfYXQKCQkJCQk6IG51bGwsCgkJZmlsZXMsCgl9O2A7Cgp1cGRhdGVyID0gcmVwbGFjZVJlZ2V4T25jZSgKICB1cGRhdGVyLAogIC9cdGNvbnN0IHBheWxvYWQgPSBcKGF3YWl0IHJlc3BvbnNlXC5qc29uXChcKVwpIGFzIFx7dmVyc2lvblw/OiB1bmtub3duOyBwdWJfZGF0ZVw/OiB1bmtub3duOyBmaWxlc1w/OiB1bmtub3duXH07W1xzXFNdKj9ccj9cblx0Y29uc3QgaW5mbzogTWFudWFsTGF0ZXN0SW5mbyA9IFx7W1xzXFNdKj9ccj9cblx0XH07LywKICBnaXRlYVBhcnNlciwKICAnR2l0ZWEgbGF0ZXN0IHJlbGVhc2UgcGFyc2VyJywKKTsKCmlmICgKICAhdXBkYXRlci5pbmNsdWRlcygKICAgICdodHRwczovL2dpdC5nYW5kYy5ydS9hcGkvdjEvcmVwb3MvZ3Njb3JkL2dzY29yZC1kZXNrdG9wL3JlbGVhc2VzL2xhdGVzdCcsCiAgKQopIHsKICB0aHJvdyBuZXcgRXJyb3IoJ0dpdGVhIGxhdGVzdC1yZWxlYXNlIEFQSSBVUkwgd2FzIG5vdCBpbnN0YWxsZWQnKTsKfQoKaWYgKHVwZGF0ZXIuaW5jbHVkZXMoJ0xhdGVzdCB2ZXJzaW9uIHJlc3BvbnNlIG1pc3NpbmcgdmVyc2lvbiBzdHJpbmcnKSkgewogIHRocm93IG5ldyBFcnJvcignT2xkIEZsdXhlciBsYXRlc3QtcmVsZWFzZSBwYXJzZXIgaXMgc3RpbGwgcHJlc2VudCcpOwp9Cgpjb25zdCBwb3J0YWJsZUluZGV4ID0gdXBkYXRlci5pbmRleE9mKCdpZiAoaXNQb3J0YWJsZU1vZGUoKSknKTsKY29uc3Qgd2luMzJJbmRleCA9IHVwZGF0ZXIuaW5kZXhPZigKICAiaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIiwKKTsKCmlmICgKICBwb3J0YWJsZUluZGV4IDwgMCB8fAogIHdpbjMySW5kZXggPCAwIHx8CiAgcG9ydGFibGVJbmRleCA+IHdpbjMySW5kZXgKKSB7CiAgdGhyb3cgbmV3IEVycm9yKAogICAgJ1BvcnRhYmxlIG1vZGUgaXMgbm90IGNoZWNrZWQgYmVmb3JlIHRoZSB3aW4zMiB1cGRhdGVyIGJyYW5jaCcsCiAgKTsKfQoKZnMud3JpdGVGaWxlU3luYyh1cGRhdGVyUGF0aCwgdXBkYXRlciwgJ3V0ZjgnKTsKCmNvbnNvbGUubG9nKCdHU0NPUkQgdXBkYXRlciBjb25maWd1cmVkIHN1Y2Nlc3NmdWxseScpOwpjb25zb2xlLmxvZygKICAnICBSZWxlYXNlczogaHR0cHM6Ly9naXQuZ2FuZGMucnUvZ3Njb3JkL2dzY29yZC1kZXNrdG9wL3JlbGVhc2VzJywKKTsKY29uc29sZS5sb2coCiAgJyAgQVBJOiBodHRwczovL2dpdC5nYW5kYy5ydS9hcGkvdjEvcmVwb3MvZ3Njb3JkL2dzY29yZC1kZXNrdG9wL3JlbGVhc2VzL2xhdGVzdCcsCik7CmNvbnNvbGUubG9nKCcgIExpbnV4IG1hbnVhbC9BcHBJbWFnZSBzb3VyY2U6IEdpdGVhJyk7CmNvbnNvbGUubG9nKCcgIFdpbmRvd3MgcG9ydGFibGUgc291cmNlOiBHaXRlYSBtYW51YWwgdXBkYXRlcicpOwpjb25zb2xlLmxvZygnICBVcHN0cmVhbSBwa2dzLmZsdXhlci5jb20gc291cmNlIHJlbW92ZWQnKTsK' | base64 -d > "$PATCH_PATH" node "$PATCH_PATH"