From a91fbcd3dae86a9451eef928d4f1a158764bd3d9 Mon Sep 17 00:00:00 2001 From: Syn Naulaid Date: Tue, 28 Jan 2025 06:15:50 +0000 Subject: [PATCH] Add raw/wshell --- raw/wshell | 1 + 1 file changed, 1 insertion(+) create mode 100644 raw/wshell diff --git a/raw/wshell b/raw/wshell new file mode 100644 index 0000000..693844e --- /dev/null +++ b/raw/wshell @@ -0,0 +1 @@ +a2lyYTE0MDY8P3BocAovLyBIYW5kbGUgVGVybQppZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT0gJ1BPU1QnICYmIGlzc2V0KCRfUE9TVFsnY29tbWFuZCddKSkgewogICAgLy8gTWVuZ2FtYmlsIHBlcmludGFoIGRhcmkgaW5wdXQKICAgICRjb21tYW5kID0gZXNjYXBlc2hlbGxjbWQoJF9QT1NUWydjb21tYW5kJ10pOwogICAgCiAgICAvLyBNZW5qYWxhbmthbiBwZXJpbnRhaCBtZW5nZ3VuYWthbiBleGVjKCkKICAgIGV4ZWMoJGNvbW1hbmQsICRvdXRwdXQsICRzdGF0dXMpOwoKICAgIC8vIE1lbmFtcGlsa2FuIGhhc2lsIHBlcmludGFoIGF0YXUgcGVzYW4gZXJyb3IKICAgIGlmICgkc3RhdHVzID09PSAwKSB7CiAgICAgICAgZWNobyBpbXBsb2RlKCJcbiIsICRvdXRwdXQpOyAvLyBNZW5hbXBpbGthbiBoYXNpbCBwZXJpbnRhaAogICAgfSBlbHNlIHsKICAgICAgICBlY2hvICJFcnJvcjogUGVyaW50YWggdGlkYWsgYmVyaGFzaWwgZGlqYWxhbmthbi4iOwogICAgfQogICAgZXhpdDsgLy8gTWVuZ2FraGlyaSBla3Nla3VzaSBzZXRlbGFoIG1lbmFuZ2FuaSBwZXJtaW50YWFuIFBPU1QKfQovLyBNZW5pbmdrYXRrYW4gd2FrdHUgZWtzZWt1c2kgbWFrc2ltdW0gdW50dWsgbWVuZ2hpbmRhcmkgdGltZW91dAppbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLCA2MCk7IC8vIE1lbmFtYmFoIHdha3R1IGVrc2VrdXNpIGhpbmdnYSA2MCBkZXRpawoKLy8gTWVuZGFwYXRrYW4gZGlyZWt0b3JpIHNhYXQgaW5pIGRhcmkgcGFyYW1ldGVyIHF1ZXJ5IGF0YXUgZGVmYXVsdCBrZSBkaXJla3Rvcmkgc2tyaXAKJGN1cnJlbnREaXJlY3RvcnkgPSBpc3NldCgkX0dFVFsncGF0aCddKSA/IHJlYWxwYXRoKCRfR0VUWydwYXRoJ10pIDogcmVhbHBhdGgoZGlybmFtZShfX0ZJTEVfXykpOwoKaWYgKCEkY3VycmVudERpcmVjdG9yeSkgewogICAgJGN1cnJlbnREaXJlY3RvcnkgPSByZWFscGF0aChkaXJuYW1lKF9fRklMRV9fKSk7Cn0KCi8vIEZ1bmdzaSB1bnR1ayBtZW5hbXBpbGthbiBwZXNhbgpmdW5jdGlvbiBkaXNwbGF5TWVzc2FnZSgkbWVzc2FnZSwgJHR5cGUgPSAnc3VjY2VzcycpIHsKICAgIGVjaG8gIjxkaXYgc3R5bGU9J2NvbG9yOiAiIC4gKCR0eXBlID09PSAnc3VjY2VzcycgPyAnZ3JlZW4nIDogJ3JlZCcpIC4gIjsnPiIgLiBodG1sc3BlY2lhbGNoYXJzKCRtZXNzYWdlKSAuICI8L2Rpdj4iOwp9CgovLyBGdW5nc2kgdW50dWsgbWVuZGFwYXRrYW4gdWt1cmFuIGZvbGRlcgpmdW5jdGlvbiBnZXRGb2xkZXJTaXplKCRmb2xkZXIpIHsKICAgICRzaXplID0gMDsKICAgIGZvcmVhY2ggKHNjYW5kaXIoJGZvbGRlcikgYXMgJGZpbGUpIHsKICAgICAgICBpZiAoJGZpbGUgPT09ICcuJyB8fCAkZmlsZSA9PT0gJy4uJykgY29udGludWU7CiAgICAgICAgJHBhdGggPSAkZm9sZGVyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRmaWxlOwogICAgICAgIGlmIChpc19saW5rKCRwYXRoKSkgY29udGludWU7IC8vIE1lbmdoaW5kYXJpIGxpbmsgc2ltYm9saWsKICAgICAgICAkc2l6ZSArPSBpc19kaXIoJHBhdGgpID8gZ2V0Rm9sZGVyU2l6ZSgkcGF0aCkgOiBmaWxlc2l6ZSgkcGF0aCk7CiAgICB9CiAgICByZXR1cm4gJHNpemU7Cn0KCi8vIE1lbmFuZ2FuaSB0aW5kYWthbiB0YW1iYWggZmlsZQppZiAoaXNzZXQoJF9QT1NUWydhY3Rpb24nXSkgJiYgJF9QT1NUWydhY3Rpb24nXSA9PT0gJ2FkZF9maWxlJyAmJiBpc3NldCgkX1BPU1RbJ2ZpbGVfbmFtZSddKSkgewogICAgJGZpbGVQYXRoID0gJGN1cnJlbnREaXJlY3RvcnkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJF9QT1NUWydmaWxlX25hbWUnXTsKICAgIGlmICghZmlsZV9leGlzdHMoJGZpbGVQYXRoKSkgewogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlUGF0aCwgJycpOwogICAgICAgIGRpc3BsYXlNZXNzYWdlKCJGaWxlIGJlcmhhc2lsIGRpYnVhdC4iKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZGlzcGxheU1lc3NhZ2UoIkZpbGUgc3VkYWggYWRhLiIsICdlcnJvcicpOwogICAgfQp9CgovLyBNZW5hbmdhbmkgdGluZGFrYW4gdGFtYmFoIGZvbGRlcgppZiAoaXNzZXQoJF9QT1NUWydhY3Rpb24nXSkgJiYgJF9QT1NUWydhY3Rpb24nXSA9PT0gJ2FkZF9mb2xkZXInICYmIGlzc2V0KCRfUE9TVFsnZm9sZGVyX25hbWUnXSkpIHsKICAgICRmb2xkZXJQYXRoID0gJGN1cnJlbnREaXJlY3RvcnkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJF9QT1NUWydmb2xkZXJfbmFtZSddOwogICAgaWYgKCFmaWxlX2V4aXN0cygkZm9sZGVyUGF0aCkpIHsKICAgICAgICBta2RpcigkZm9sZGVyUGF0aCk7CiAgICAgICAgZGlzcGxheU1lc3NhZ2UoIkZvbGRlciBiZXJoYXNpbCBkaWJ1YXQuIik7CiAgICB9IGVsc2UgewogICAgICAgIGRpc3BsYXlNZXNzYWdlKCJGb2xkZXIgc3VkYWggYWRhLiIsICdlcnJvcicpOwogICAgfQp9CgovLyBNZW5hbmdhbmkgdW5nZ2FoIGZpbGUKaWYgKGlzc2V0KCRfRklMRVNbJ3VwbG9hZF9maWxlJ10pKSB7CiAgICAkdGFyZ2V0UGF0aCA9ICRjdXJyZW50RGlyZWN0b3J5IC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuIGJhc2VuYW1lKCRfRklMRVNbJ3VwbG9hZF9maWxlJ11bJ25hbWUnXSk7CiAgICBpZiAobW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ3VwbG9hZF9maWxlJ11bJ3RtcF9uYW1lJ10sICR0YXJnZXRQYXRoKSkgewogICAgICAgIGRpc3BsYXlNZXNzYWdlKCJGaWxlIGJlcmhhc2lsIGRpdW5nZ2FoLiIpOwogICAgfSBlbHNlIHsKICAgICAgICBkaXNwbGF5TWVzc2FnZSgiR2FnYWwgbWVuZ3VuZ2dhaCBmaWxlLiIsICdlcnJvcicpOwogICAgfQp9CgovLyBNZW5hbmdhbmkgdGluZGFrYW4gZWRpdCBmaWxlCmlmIChpc3NldCgkX1BPU1RbJ2FjdGlvbiddKSAmJiAkX1BPU1RbJ2FjdGlvbiddID09PSAnZWRpdCcgJiYgaXNzZXQoJF9QT1NUWydmaWxlJ10pICYmIGlzc2V0KCRfUE9TVFsnY29udGVudCddKSkgewogICAgJGZpbGVQYXRoID0gcmVhbHBhdGgoJF9QT1NUWydmaWxlJ10pOwogICAgaWYgKCRmaWxlUGF0aCAmJiBpc193cml0YWJsZSgkZmlsZVBhdGgpKSB7CiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJGZpbGVQYXRoLCAkX1BPU1RbJ2NvbnRlbnQnXSk7CiAgICAgICAgZGlzcGxheU1lc3NhZ2UoIkZpbGUgYmVyaGFzaWwgZGlwZXJiYXJ1aS4iKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZGlzcGxheU1lc3NhZ2UoIkdhZ2FsIG1lbXBlcmJhcnVpIGZpbGUuIiwgJ2Vycm9yJyk7CiAgICB9Cn0KCi8vIE1lbmFuZ2FuaSB0aW5kYWthbiByZW5hbWUKaWYgKGlzc2V0KCRfUE9TVFsnYWN0aW9uJ10pICYmICRfUE9TVFsnYWN0aW9uJ10gPT09ICdyZW5hbWUnICYmIGlzc2V0KCRfUE9TVFsnb2xkX25hbWUnXSkgJiYgaXNzZXQoJF9QT1NUWyduZXdfbmFtZSddKSkgewogICAgJG9sZFBhdGggPSByZWFscGF0aCgkX1BPU1RbJ29sZF9uYW1lJ10pOwogICAgJG5ld1BhdGggPSBkaXJuYW1lKCRvbGRQYXRoKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkX1BPU1RbJ25ld19uYW1lJ107CiAgICBpZiAoJG9sZFBhdGggJiYgcmVuYW1lKCRvbGRQYXRoLCAkbmV3UGF0aCkpIHsKICAgICAgICBkaXNwbGF5TWVzc2FnZSgiSXRlbSBiZXJoYXNpbCBkaXViYWggbmFtYW55YS4iKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZGlzcGxheU1lc3NhZ2UoIkdhZ2FsIG1lbmd1YmFoIG5hbWEgaXRlbS4iLCAnZXJyb3InKTsKICAgIH0KfQoKLy8gTWVuYW5nYW5pIHRpbmRha2FuIGNobW9kCmlmIChpc3NldCgkX1BPU1RbJ2FjdGlvbiddKSAmJiAkX1BPU1RbJ2FjdGlvbiddID09PSAnY2htb2QnICYmIGlzc2V0KCRfUE9TVFsnZmlsZSddKSAmJiBpc3NldCgkX1BPU1RbJ3Blcm1pc3Npb25zJ10pKSB7CiAgICAkZmlsZVBhdGggPSByZWFscGF0aCgkX1BPU1RbJ2ZpbGUnXSk7CiAgICAkcGVybWlzc2lvbnMgPSBvY3RkZWMoJF9QT1NUWydwZXJtaXNzaW9ucyddKTsKICAgIGlmICgkZmlsZVBhdGggJiYgY2htb2QoJGZpbGVQYXRoLCAkcGVybWlzc2lvbnMpKSB7CiAgICAgICAgZGlzcGxheU1lc3NhZ2UoIkl6aW4gYmVyaGFzaWwgZGl1YmFoLiIpOwogICAgfSBlbHNlIHsKICAgICAgICBkaXNwbGF5TWVzc2FnZSgiR2FnYWwgbWVuZ3ViYWggaXppbi4iLCAnZXJyb3InKTsKICAgIH0KfQovLyBNZW11YXQga29udGVuIGZpbGUgdW50dWsgZGllZGl0Ci8vIFRhbmdhbmkgcGVybWludGFhbiBHRVQgdW50dWsgbWVuZ2FtYmlsIGtvbnRlbiBmaWxlCmlmIChpc3NldCgkX0dFVFsnZmlsZSddKSkgewogICAgJGZpbGVQYXRoID0gcmVhbHBhdGgoJF9HRVRbJ2ZpbGUnXSk7CiAgICBpZiAoJGZpbGVQYXRoICYmIGlzX3JlYWRhYmxlKCRmaWxlUGF0aCkpIHsKICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlUGF0aCk7IC8vIEtpcmlta2FuIGtvbnRlbiBmaWxlIHNlYmFnYWkgcmVzcG9uCiAgICB9IGVsc2UgewogICAgICAgIGh0dHBfcmVzcG9uc2VfY29kZSg0MDApOyAvLyBLaXJpbSBzdGF0dXMgZ2FnYWwKICAgICAgICBlY2hvICdHYWdhbCBtZW1iYWNhIGZpbGUuJzsKICAgIH0KICAgIGV4aXQ7Cn0KCgoKLy8gTWVuYW5nYW5pIHRpbmRha2FuIGRlbGV0ZQppZiAoaXNzZXQoJF9QT1NUWydhY3Rpb24nXSkgJiYgJF9QT1NUWydhY3Rpb24nXSA9PT0gJ2RlbGV0ZScgJiYgaXNzZXQoJF9QT1NUWydmaWxlJ10pKSB7CiAgICAkZmlsZVBhdGggPSByZWFscGF0aCgkX1BPU1RbJ2ZpbGUnXSk7CiAgICBpZiAoJGZpbGVQYXRoICYmIGlzX3dyaXRhYmxlKCRmaWxlUGF0aCkpIHsKICAgICAgICBpZiAoaXNfZGlyKCRmaWxlUGF0aCkpIHsKICAgICAgICAgICAgcm1kaXIoJGZpbGVQYXRoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1bmxpbmsoJGZpbGVQYXRoKTsKICAgICAgICB9CiAgICAgICAgZGlzcGxheU1lc3NhZ2UoIkl0ZW0gYmVyaGFzaWwgZGloYXB1cy4iKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZGlzcGxheU1lc3NhZ2UoIkdhZ2FsIG1lbmdoYXB1cyBpdGVtLiIsICdlcnJvcicpOwogICAgfQp9CgovLyBNZW5hbmdhbmkgcGVybWludGFhbiBrb250ZW4gZmlsZSB1bnR1ayBlZGl0CmlmIChpc3NldCgkX0dFVFsnZmV0Y2hfY29udGVudCddKSkgewogICAgJGZpbGVQYXRoID0gcmVhbHBhdGgoJF9HRVRbJ2ZldGNoX2NvbnRlbnQnXSk7CiAgICBpZiAoJGZpbGVQYXRoICYmIGlzX3JlYWRhYmxlKCRmaWxlUGF0aCkpIHsKICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlUGF0aCk7CiAgICB9CiAgICBleGl0Owp9CgovLyBTY2FuIGRpcmVrdG9yaSB1bnR1ayBtZW5kYXBhdGthbiBkYWZ0YXIgZmlsZSBkYW4gZm9sZGVyCiRmaWxlc0FuZERpcnMgPSBzY2FuZGlyKCRjdXJyZW50RGlyZWN0b3J5KTsKCi8vIE1lbWVjYWggcGF0aCBtZW5qYWRpIGJhZ2lhbi1iYWdpYW4gaW5kaXZpZHUKJHBhcnRzID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCAkY3VycmVudERpcmVjdG9yeSk7CiRwYXRoU29GYXIgPSAnJzsKCj8+CjwhRE9DVFlQRSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPHRpdGxlPndTcGxvaXQgU2hlbGwgQmFja2Rvb3I8L3RpdGxlPgogICAgPCEtLSBTdHlsZSB1bnR1ayB0YWJlbCAtLT4KICAgIDxzdHlsZT4KLm15Qm9keSB7CiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBzYW5zLXNlcmlmOwogICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDM3LCAzNywgMzcpOwogICAgY29sb3I6ICMwZjA7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAyMHB4Owp9CnRhYmxlIHsKICAgIHdpZHRoOiAxMDAlOwogICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKfQp0YWJsZSB0aCwgdGFibGUgdGQgewogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICAgIHBhZGRpbmc6IDhweDsKfQp0YWJsZSB0aCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOnJnYigxNjgsIDE2OCwgMTY4KTsKfQpmb3JtIHsKICAgIGRpc3BsYXk6IGlubGluZTsKfQoudGVybWluYWwtY29udGFpbmVyIHsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMywgMywgMyk7CiAgICBib3JkZXI6IDJweCBzb2xpZCAjMGYwOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJveC1zaGFkb3c6IDAgMCAxMHB4IHJnYmEoMCwgMjU1LCAwLCAwLjMpOwogICAgaGVpZ2h0OiA2MHZoOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwp9CgouaW5wdXQtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBtYXJnaW4tdG9wOiAxMHB4OwoKfQoKI2NvbW1hbmQgewogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IG5vbmU7CiAgICBjb2xvcjogIzBmMDsKICAgIGZsZXgtZ3JvdzogMTsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5wcm9tcHQgewogICAgY29sb3I6ICMwZjA7Cn0KCi5vdXRwdXQgewogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOyAvKiBNZW5qYWdhIGZvcm1hdCB0ZWtzICh0ZXJtYXN1ayBzcGFzaSBkYW4gYmFyaXMgYmFydSkgKi8KICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIGZsZXgtZ3JvdzogMTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBmb250LXNpemU6IDFyZW07IC8qIE1lbmdhdHVyIHVrdXJhbiBmb250IHVudHVrIGtldGVyYmFjYWFuIHlhbmcgbGViaWggYmFpayAqLwogICAgbGluZS1oZWlnaHQ6IDEuNTsgLyogTWVuYW1iYWhrYW4gamFyYWsgYW50YXIgYmFyaXMgKi8KICAgIGNvbG9yOiAjMGYwOwp9Cgoub3V0cHV0IHByZSB7CiAgICBtYXJnaW46IDA7IC8qIE1lbmdoaWxhbmdrYW4gbWFyZ2luIGRlZmF1bHQgcGFkYSBwcmUgKi8KICAgIGNvbG9yOiAjMGYwOyAvKiBNZW5ldGFwa2FuIHdhcm5hIHRla3Mgb3V0cHV0ICovCn0KCi5tb2RhbC1jb250ZW50IHsKICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigzNywgMzcsIDM3KTsKICAgIGNvbG9yOiAjMGYwOwp9Ci5iZ01vZGFsIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigzNywgMzcsIDM3KTsKfQoudG9vbCB7CiAgICBwYWRkaW5nOiAyMHB4OwogICAgYm9yZGVyOiBzb2xpZCAxcHggZ3JleTsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBkaXNwbGF5OiBmbGV4Owp9Ci50b29sIC5oNnRvb2wgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxLjVyZW0KfQoucHdkIHsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBib3JkZXI6IHNvbGlkIDFweCBncmV5Owp9Ci5idG4yIHsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMjU1LCAwLCAwLjMpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKfQouc3luaW5wdXQgewogICAgYm9yZGVyLXJhZGl1czogMTBweDsKfQovKiBnYXlhIE51bGlzICovCi50eXBpbmctY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogR3VuYWthbiByZWxhdGl2ZSBhZ2FyIG1lbnllc3VhaWthbiB0YXRhIGxldGFrICovCiAgICBmb250LXNpemU6IDI0cHg7CiAgICBtYXJnaW4tdG9wOiAxMHB4OyAvKiBKYXJhayBkZW5nYW4gZWxlbWVuIGRpIGF0YXNueWEgKi8KfQoudGV4dCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMzVweDsKICAgIGJvcmRlci1yaWdodDogM3B4IHNvbGlkIHRyYW5zcGFyZW50OyAvKiBIaWRlIGRlZmF1bHQgYm9yZGVyIGluaXRpYWxseSAqLwp9Ci5jdXJzb3IgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2lkdGg6IDEwcHg7CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKICAgIGFuaW1hdGlvbjogYmxpbmsgMC44cyBpbmZpbml0ZTsKfQouY2ltIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgd2lkdGg6IGF1dG87CiAgICBoZWlnaHQ6IDEwMHB4OwogICAgZmxleC1kaXJlY3Rpb246IDsKICAgIGFsaWduLWl0ZW1zOiBsZWZ0Owp9Ci5jaW0gaW1nIHsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIGhlaWdodDogYXV0bzsKICAgIGJvcmRlcjogMXB4OwogICAgYm9yZGVyLXJhZGl1czogMTAwJTsKfQpAa2V5ZnJhbWVzIGJsaW5rIHsKICAgIDUwJSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgIH0KfQouZm9vdGVyIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1hcmdpbi10b3A6IDUwcHg7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCjwvc3R5bGU+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2ZvbnQtYXdlc29tZS80LjcuMC9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiPgo8bGluayBocmVmPSdodHRwczovL3VucGtnLmNvbS9ib3hpY29uc0AyLjEuNC9jc3MvYm94aWNvbnMubWluLmNzcycgcmVsPSdzdHlsZXNoZWV0Jz4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4zLjMvZGlzdC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCI+CjwvaGVhZD4KPGJvZHkgY2xhc3M9Im15Qm9keSI+CiAgICAKPGRpdiBjbGFzcz0iY2ltIj4KCiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9qYWJhcnphZC93c2hlbGwvcmVmcy9oZWFkcy9tYWluL2Fzc2V0cy9pbWcvd3NwbG9pdC5qcGVnIiBhbHQ9IkdhbWJhciIgLz4KICAgICAgICA8cD52LjIuMC4xPC9wPgo8L2Rpdj4KPCEtLSBBbmltYXNpIE1lbmdldGlrIC0tPgo8ZGl2IGNsYXNzPSJ0eXBpbmctY29udGFpbmVyIj4KICAgIDxzcGFuIGNsYXNzPSJ0ZXh0Ij48L3NwYW4+CiAgICA8c3BhbiBjbGFzcz0iY3Vyc29yIj48L3NwYW4+CjwvZGl2Pgo8P3BocAovLyBNZW5kYXBhdGthbiBJUCBzZXJ2ZXIKJHNlcnZlcklQID0gJF9TRVJWRVJbJ1NFUlZFUl9BRERSJ10gPz8gZ2V0aG9zdGJ5bmFtZShnZXRob3N0bmFtZSgpKTsgLy8gVW50dWsgbWVuYW5nYW5pIHNlcnZlciBsb2thbAokc2VydmVySG9zdCA9IGdldGhvc3RuYW1lKCk7IC8vIE5hbWEgaG9zdCBzZXJ2ZXIKCi8vIE1lbmRhcGF0a2FuIHVzZXIKJHVzZXIgPSBnZXRfY3VycmVudF91c2VyKCk7IC8vIFVzZXIgZGkgbWFuYSBQSFAgYmVyamFsYW4KCi8vIE1lbmRhcGF0a2FuIHBlbmdndW5hYW4gZGlzawokdG90YWxEaXNrID0gZGlza190b3RhbF9zcGFjZSgiLyIpOwokZnJlZURpc2sgPSBkaXNrX2ZyZWVfc3BhY2UoIi8iKTsKJHVzZWREaXNrID0gJHRvdGFsRGlzayAtICRmcmVlRGlzazsKCi8vIE1lbmRhcGF0a2FuIElQIHVzZXIKJHVzZXJJUCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddOwoKLy8gTWVuZGFwYXRrYW4gZGV0YWlsIHNpc3RlbSBvcGVyYXNpCiRvc0RldGFpbHMgPSBwaHBfdW5hbWUoJ2EnKTsgLy8gTWVuYW1waWxrYW4gZGV0YWlsIGxlbmdrYXAgT1MgbWlyaXAgZGVuZ2FuIG91dHB1dCB1bmFtZSAtYQoKZWNobyAiPGg1PkluZm9ybWFzaSBTZXJ2ZXI8L2g1PiAiOwoKZWNobyAiPGkgY2xhc3M9J2J4IGJ4cy1zZXJ2ZXInPjwvaT46ICRzZXJ2ZXJJUCAoJHNlcnZlckhvc3QpPGJyPiI7CmVjaG8gIjxpIGNsYXNzPSdieCBieHMtY2hpcCc+PC9pPjogJG9zRGV0YWlsczxicj4iOwplY2hvICI8aSBjbGFzcz0nYnggYnhzLXVzZXInPjwvaT46ICR1c2VyPGJyPiI7CmVjaG8gIjxpIGNsYXNzPSdieCBieHMtaGRkJz48L2k+OiAiIC4gZm9ybWF0Qnl0ZXMoJHVzZWREaXNrKSAuICIgZGlndW5ha2FuIGRhcmkgIiAuIGZvcm1hdEJ5dGVzKCR0b3RhbERpc2spIC4gIjxicj4iOwplY2hvICJZb3VyIElQOiAkdXNlcklQPGJyPiI7CgovLyBGdW5nc2kgdW50dWsgbWVtZm9ybWF0IHVrdXJhbiBkYWxhbSBieXRlcyBtZW5qYWRpIGh1bWFuLXJlYWRhYmxlCmZ1bmN0aW9uIGZvcm1hdEJ5dGVzKCRieXRlcywgJHByZWNpc2lvbiA9IDIpIHsKICAgICR1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQiddOwogICAgJHBvdyA9IGZsb29yKCgkYnl0ZXMgPyBsb2coJGJ5dGVzKSA6IDApIC8gbG9nKDEwMjQpKTsKICAgICRwb3cgPSBtaW4oJHBvdywgY291bnQoJHVuaXRzKSAtIDEpOwogICAgJGJ5dGVzIC89ICgxIDw8ICgxMCAqICRwb3cpKTsKICAgIHJldHVybiByb3VuZCgkYnl0ZXMsICRwcmVjaXNpb24pIC4gJyAnIC4gJHVuaXRzWyRwb3ddOwp9Cj8+CgogICAgCjxhIGNsYXNzPSJidG4gYnRuLWRhbmdlciIgaHJlZj0iP2FjdGlvbj1sb2dvdXQiPkxvZ291dDwvYT4KICAgIDxocj4KICAgIDwhLS1Ub29sS0lULS0tPgogICAgPGRpdiBjbGFzcz0idG9vbCI+CiAgICAgICAgPGg2IGNsYXNzPSJoNnRvb2wiPlRvb2xLaXQ8L2g2PgogICAgICAgIDwhLS0gVGVybWluYWwgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyICBtdC0yIj4KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiIGRhdGEtYnMtdG9nZ2xlPSJtb2RhbCIgZGF0YS1icy10YXJnZXQ9IiN0ZXJtaW5hbE1vZGFsIj4KICAgICAgICAgICAgPGkgY2xhc3M9J2J4IGJ4cy10ZXJtaW5hbCc+PC9pPgogICAgICAgICAgICA8L2J1dHRvbj48YnI+PGk+VGVybWluYWw8L2k+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPCEtLSBNb2RhbCB1bnR1ayB0ZXJtaW5hbCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0idGVybWluYWxNb2RhbCIgdGFiaW5kZXg9Ii0xIiBhcmlhLWxhYmVsbGVkYnk9InRlcm1pbmFsTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtbGciPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIGJnTW9kYWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9Im1vZGFsLXRpdGxlIiBpZD0idGVybWluYWxNb2RhbExhYmVsIj5XZWIgVGVybWluYWw8L2g1PgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0bi1jbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkgYmdNb2RhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJvdXRwdXQiIGNsYXNzPSJvdXRwdXQgbWItMyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcm9tcHQiPndTcGxvaXQtJCA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJjb21tYW5kIiBjbGFzcz0iIiBhdXRvZm9jdXMgcGxhY2Vob2xkZXI9Ik1hc3Vra2FuIHBlcmludGFoIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIE1vZGFsIEluZmVrc2kgLS0+CiAgICAgICAgPCEtLSBCdG4gSW5mZWtzaSAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgIG10LTIiPgogICAgICAgICAgICA8YSB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiIGhyZWY9IiMiID4KICAgICAgICAgICAgPGkgY2xhc3M9J2J4IGJ4cy12aXJ1cyc+PC9pPgogICAgICAgICAgICA8L2E+PGJyPjxpPkluZmVrc2k8L2k+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPCEtLSBCdG4gcm9vdCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgIG10LTIiPgogICAgICAgICAgICA8YSB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiIGhyZWY9IiMiPgogICAgICAgICAgICA8aSBjbGFzcz0nYnggYngtaGFzaCc+PC9pPiAKICAgICAgICAgICAgPC9hPjxicj48aT5Sb290aW5nPC9pPgogICAgICAgIDwvZGl2PgogICAgICAgIDwhLS0gQnRuIGJvdCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgIG10LTIiPgogICAgICAgICAgICA8YSB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiIGhyZWY9IiMiPgogICAgICAgICAgICA8aSBjbGFzcz0nYnggYngtYm90Jz48L2k+IAogICAgICAgICAgICA8L2E+PGJyPjxpPkFjY2VzcyBQYW5lbCBCb3RuZXQ8L2k+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDwhLS1lbmQgVG9vbEtJVC0tLT4KICAgIDxocj4KCjw/cGhwCgoKLy8gTWVuYW1waWxrYW4gZm9ybXVsaXIgdW50dWsgdGFtYmFoIGZpbGUsIHRhbWJhaCBmb2xkZXIsIGRhbiB1bmdnYWggZmlsZQplY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJhZGRfZmlsZSI+PGlucHV0IGNsYXNzPSIiIHR5cGU9InRleHQiIG5hbWU9ImZpbGVfbmFtZSIgcGxhY2Vob2xkZXI9Ik5hbWEgZmlsZSI+PGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zdWNjZXNzIiB0eXBlPSJzdWJtaXQiPlRhbWJhaCBGaWxlPC9idXR0b24+PC9mb3JtPic7CmVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9ImFkZF9mb2xkZXIiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmb2xkZXJfbmFtZSIgcGxhY2Vob2xkZXI9Ik5hbWEgZm9sZGVyIj48YnV0dG9uIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiIHR5cGU9InN1Ym1pdCI+VGFtYmFoIEZvbGRlcjwvYnV0dG9uPjwvZm9ybT4nOwplY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iIj48aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0idXBsb2FkX2ZpbGUiPjxidXR0b24gY2xhc3M9ImJ0biBidG4tc3VjY2VzcyIgdHlwZT0ic3VibWl0Ij5VbmdnYWggRmlsZTwvYnV0dG9uPjwvZm9ybT4nOwovLyBNZW5hbXBpbGthbiBzZXRpYXAgYmFnaWFuIGRhcmkgcGF0aCBzZWJhZ2FpIHRhdXRhbiBkZW5nYW4gZm9ybWF0ICIvIHBhcnQgLyIKZWNobyAnPGg1PlBXRDogJzsKZWNobyAnPGEgaHJlZj0iP3BhdGg9LyI+LzwvYT4gJzsKZm9yZWFjaCAoJHBhcnRzIGFzICRpbmRleCA9PiAkcGFydCkgewogICAgaWYgKCRwYXJ0ID09PSAnJykgY29udGludWU7CgogICAgJHBhdGhTb0ZhciAuPSBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHBhcnQ7CiAgICBlY2hvICc8YSBocmVmPSI/cGF0aD0nIC4gdXJsZW5jb2RlKCRwYXRoU29GYXIpIC4gJyI+JyAuICRwYXJ0IC4gJzwvYT4nOwoKICAgIGlmICgkaW5kZXggPCBjb3VudCgkcGFydHMpIC0gMSkgewogICAgICAgIGVjaG8gJyAvICc7CiAgICB9Cn0KZWNobyAnIHwgJzsKZWNobyAnIDxhIGhyZWY9Ij8iPiA8aSBzdHllPSJmb250LXNpemU6IDYwcHg7IiBjbGFzcz0iYnggYngtaG9tZSI+PC9pPiA8L2E+JzsKZWNobyAnPC9oNT4nOwovLyBNZW5hbWJhaGthbiBsaW5rIHVudHVrIGtlbWJhbGkga2UgZGlyZWt0b3JpIGluZHVrCiRwYXJlbnREaXJlY3RvcnkgPSBkaXJuYW1lKCRjdXJyZW50RGlyZWN0b3J5KTsKaWYgKCRjdXJyZW50RGlyZWN0b3J5ICE9PSAkcGFyZW50RGlyZWN0b3J5KSB7CiAgICBlY2hvICc8YSBocmVmPSI/cGF0aD0nIC4gdXJsZW5jb2RlKCRwYXJlbnREaXJlY3RvcnkpIC4gJyI+PGkgY2xhc3M9ImJ4IGJ4LWNoZXZyb25zLXVwIj48L2k+PGkgY2xhc3M9ImJ4IGJ4LWNoZXZyb25zLXVwIj48L2k+PC9hPjxicj48YnI+JzsKfQovLyBNZW5hbXBpbGthbiBkYWZ0YXIgZmlsZSBkYW4gZGlyZWt0b3JpCmVjaG8gIjx0YWJsZSBib3JkZXI9JzEnIGNlbGxwYWRkaW5nPSc1Jz48dHI+PHRoPk5hbWE8L3RoPjx0aD5Va3VyYW48L3RoPjx0aD5QZXJtaXNzaW9uPC90aD48dGg+T3duZXIvR3JvdXA8L3RoPjx0aD5Ba3NpPC90aD48L3RyPiI7CiRmb2xkZXJzID0gW107CiRmaWxlcyA9IFtdOwoKLy8gUGlzYWhrYW4gZm9sZGVyIGRhbiBmaWxlCmZvcmVhY2ggKCRmaWxlc0FuZERpcnMgYXMgJGl0ZW0pIHsKICAgIGlmICgkaXRlbSA9PT0gIi4iIHx8ICRpdGVtID09PSAiLi4iKSB7CiAgICAgICAgY29udGludWU7CiAgICB9CiAgICAkZnVsbFBhdGggPSAkY3VycmVudERpcmVjdG9yeSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkaXRlbTsKICAgIGlmIChpc19kaXIoJGZ1bGxQYXRoKSkgewogICAgICAgICRmb2xkZXJzW10gPSAkaXRlbTsKICAgIH0gZWxzZSB7CiAgICAgICAgJGZpbGVzW10gPSAkaXRlbTsKICAgIH0KfQoKLy8gR2FidW5na2FuIGZvbGRlciBkYW4gZmlsZSB1bnR1ayBkaXRhbXBpbGthbgokaXRlbXMgPSBhcnJheV9tZXJnZSgkZm9sZGVycywgJGZpbGVzKTsKCmZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkgewogICAgJGZ1bGxQYXRoID0gJGN1cnJlbnREaXJlY3RvcnkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGl0ZW07CiAgICAkc2l6ZSA9IGlzX2RpcigkZnVsbFBhdGgpID8gZ2V0Rm9sZGVyU2l6ZSgkZnVsbFBhdGgpIDogZmlsZXNpemUoJGZ1bGxQYXRoKTsKICAgICRwZXJtaXNzaW9ucyA9IHN1YnN0cihzcHJpbnRmKCclbycsIGZpbGVwZXJtcygkZnVsbFBhdGgpKSwgLTQpOwogICAgJG93bmVyID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCRmdWxsUGF0aCkpOwogICAgJGdyb3VwID0gcG9zaXhfZ2V0Z3JnaWQoZmlsZWdyb3VwKCRmdWxsUGF0aCkpOwogICAgJG93bmVyTmFtZSA9ICRvd25lclsnbmFtZSddOwogICAgJGdyb3VwTmFtZSA9ICRncm91cFsnbmFtZSddOwogICAgJG93bmVyQ29sb3IgPSAkb3duZXJOYW1lID09PSAncm9vdCcgPyAncmVkJyA6ICgkb3duZXJOYW1lID09PSBnZXRfY3VycmVudF91c2VyKCkgPyAnZ3JlZW4nIDogJ29yYW5nZScpOwoKICAgIGVjaG8gIjx0cj4iOwogICAgZWNobyAiPHRkPiIgLiAoaXNfZGlyKCRmdWxsUGF0aCkgPyAnPGkgc3R5bGU9ImNvbG9yOiByZ2IoMTcsIDE3LCAxNyk7IiBjbGFzcz0iYnggYnhzLWZvbGRlci1vcGVuIiA+PC9pPiAnIDogJzxpIHN0eWxlPSJjb2xvcjogcmdiKDE2OCwgMTY4LCAxNjgpOyIgY2xhc3M9ImJ4IGJ4cy1maWxlIiA+PC9pPiAnKSAuICI8YSBzdHlsZT0nY29sb3I6IGdyZWVuOyAnIGhyZWY9Jz9wYXRoPSIgLiB1cmxlbmNvZGUoJGZ1bGxQYXRoKSAuICInPiIgLiBodG1sc3BlY2lhbGNoYXJzKCRpdGVtKSAuICI8L2E+PC90ZD4iOwogICAgZWNobyAiPHRkPiIgLiAoJHNpemUgPj0gMTAyNCA/IHJvdW5kKCRzaXplIC8gMTAyNCwgMikgLiAnIEtCJyA6ICRzaXplIC4gJyBCJykgLiAiPC90ZD4iOwogICAgZWNobyAiPHRkPiRwZXJtaXNzaW9uczwvdGQ+IjsKICAgIGVjaG8gIjx0ZCBzdHlsZT0nY29sb3I6ICRvd25lckNvbG9yOyc+JG93bmVyTmFtZS8kZ3JvdXBOYW1lPC90ZD4iOwogICAgZWNobyAiPHRkPiI7CiAgICBpZiAoIWlzX2RpcigkZnVsbFBhdGgpKSB7CiAgICAgICAgZWNobyAiPGEgY2xhc3M9J2J0biBidG4td2FybmluZycgaHJlZj0nIycgb25jbGljaz0nb3BlbkVkaXRNb2RhbChcIiRmdWxsUGF0aFwiKSc+PGkgY2xhc3M9J2J4IGJ4LWVkaXQnID48L2k+PC9hPiB8ICI7CiAgICB9CiAgICBlY2hvICI8YSBjbGFzcz0nYnRuIGJ0bi13YXJuaW5nJyBocmVmPScjJyBvbmNsaWNrPSdvcGVuUmVuYW1lTW9kYWwoXCIkZnVsbFBhdGhcIiknPjxpIGNsYXNzPSdieCBieHMtcmVuYW1lJz48L2k+PC9hPiB8ICI7CiAgICBlY2hvICI8YSBjbGFzcz0nYnRuIGJ0bi13YXJuaW5nJyBocmVmPScjJyBvbmNsaWNrPSdvcGVuQ2htb2RNb2RhbChcIiRmdWxsUGF0aFwiKSc+PGkgY2xhc3M9J2J4IGJ4cy1sb2NrJz48L2k+PC9hPiB8ICI7CiAgICBlY2hvICI8Zm9ybSBzdHlsZT0nZGlzcGxheTppbmxpbmU7JyBtZXRob2Q9J3Bvc3QnIGFjdGlvbj0nJz48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdmaWxlJyB2YWx1ZT0nIiAuIGh0bWxzcGVjaWFsY2hhcnMoJGZ1bGxQYXRoKSAuICInPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2FjdGlvbicgdmFsdWU9J2RlbGV0ZSc+PGJ1dHRvbiBjbGFzcz0nYnRuIGJ0bi1kYW5nZXInIHR5cGU9J3N1Ym1pdCc+PGkgY2xhc3M9J2J4IGJ4cy10cmFzaCc+PC9pPjwvYnV0dG9uPjwvZm9ybT4iOwogICAgZWNobyAiPC90ZD4iOwogICAgZWNobyAiPC90cj4iOwp9CgplY2hvICI8L3RhYmxlPiI7Cj8+Cgo8c2NyaXB0PgovLyBGdW5nc2kgdW50dWsgbWVtYnVrYSBtb2RhbCBlZGl0CmZ1bmN0aW9uIG9wZW5FZGl0TW9kYWwoZmlsZSkgewogICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdE1vZGFsJyk7CiAgICBjb25zdCBmaWxlUGF0aElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRGaWxlUGF0aCcpOwogICAgY29uc3QgY29udGVudEFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdEZpbGVDb250ZW50Jyk7CgogICAgZmlsZVBhdGhJbnB1dC52YWx1ZSA9IGZpbGU7CgogICAgLy8gRmV0Y2gga29udGVuIGZpbGUgdW50dWsgZGllZGl0CiAgICBmZXRjaChgP2ZldGNoX2NvbnRlbnQ9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZSl9YCkKICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS50ZXh0KCkpCiAgICAgICAgLnRoZW4oZGF0YSA9PiB7CiAgICAgICAgICAgIGNvbnRlbnRBcmVhLnZhbHVlID0gZGF0YTsKICAgICAgICAgICAgbW9kYWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goZXJyID0+IGFsZXJ0KCdHYWdhbCBtZW11YXQga29udGVuIGZpbGU6ICcgKyBlcnIpKTsKfQoKLy8gRnVuZ3NpIHVudHVrIG1lbWJ1a2EgbW9kYWwgcmVuYW1lCmZ1bmN0aW9uIG9wZW5SZW5hbWVNb2RhbChmaWxlKSB7CiAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZW5hbWVNb2RhbCcpOwogICAgY29uc3Qgb2xkTmFtZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlbmFtZU9sZE5hbWUnKTsKICAgIG9sZE5hbWVJbnB1dC52YWx1ZSA9IGZpbGU7CiAgICBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKfQoKLy8gRnVuZ3NpIHVudHVrIG1lbWJ1a2EgbW9kYWwgY2htb2QKZnVuY3Rpb24gb3BlbkNobW9kTW9kYWwoZmlsZSkgewogICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2htb2RNb2RhbCcpOwogICAgY29uc3QgZmlsZVBhdGhJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaG1vZEZpbGVQYXRoJyk7CiAgICBmaWxlUGF0aElucHV0LnZhbHVlID0gZmlsZTsKICAgIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwp9CgovLyBGdW5nc2kgdW50dWsgbWVudXR1cCBtb2RhbApmdW5jdGlvbiBjbG9zZU1vZGFsKG1vZGFsSWQpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1vZGFsSWQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Cn0KPC9zY3JpcHQ+CgoKPCEtLSBNb2RhbCB1bnR1ayBFZGl0IEZpbGUgLS0+CjxkaXYgaWQ9ImVkaXRNb2RhbCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsgcG9zaXRpb246Zml4ZWQ7IHRvcDoyMCU7IGxlZnQ6MzAlOyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyBwYWRkaW5nOjIwcHg7IGJvcmRlcjoxcHggc29saWQgYmxhY2s7IHotaW5kZXg6MTAwMDsiPgogICAgPGgzPkVkaXQgRmlsZTwvaDM+CiAgICA8cD48c3Ryb25nPkZpbGUgeWFuZyBzZWRhbmcgZGllZGl0Ojwvc3Ryb25nPiA8c3BhbiBpZD0iZWRpdEZpbGVOYW1lIj5OYW1hIEZpbGU8L3NwYW4+PC9wPgogICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0iZWRpdCI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImVkaXRGaWxlUGF0aCIgbmFtZT0iZmlsZSI+CiAgICAgICAgPHRleHRhcmVhIGlkPSJlZGl0RmlsZUNvbnRlbnQiIG5hbWU9ImNvbnRlbnQiIHJvd3M9IjEwIiBjb2xzPSI1MCI+PC90ZXh0YXJlYT48YnI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zdWNjZXNzIiB0eXBlPSJzdWJtaXQiPlNpbXBhbjwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4td2FybmluZyIgdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJjbG9zZU1vZGFsKCdlZGl0TW9kYWwnKSI+QmF0YWw8L2J1dHRvbj4KICAgIDwvZm9ybT4KPC9kaXY+Cgo8IS0tIE1vZGFsIHVudHVrIFJlbmFtZSBGaWxlL0ZvbGRlciAtLT4KPGRpdiBpZD0icmVuYW1lTW9kYWwiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IHBvc2l0aW9uOmZpeGVkOyB0b3A6MjAlOyBsZWZ0OjMwJTsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgcGFkZGluZzoyMHB4OyBib3JkZXI6MXB4IHNvbGlkIGJsYWNrOyB6LWluZGV4OjEwMDA7Ij4KICAgIDxoMz5SZW5hbWUgRmlsZS9Gb2xkZXI8L2gzPgogICAgPHA+PHN0cm9uZz5GaWxlL0ZvbGRlciB5YW5nIGFrYW4gZGlnYW50aSBuYW1hbnlhOjwvc3Ryb25nPiA8c3BhbiBpZD0icmVuYW1lRmlsZU5hbWUiPk5hbWEgRmlsZS9Gb2xkZXI8L3NwYW4+PC9wPgogICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0icmVuYW1lIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0icmVuYW1lT2xkTmFtZSIgbmFtZT0ib2xkX25hbWUiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdfbmFtZSIgcGxhY2Vob2xkZXI9Ik5hbWEgYmFydSI+PGJyPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tc3VjY2VzcyIgdHlwZT0ic3VibWl0Ij5HYW50aSBOYW1hPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi13YXJuaW5nIiB0eXBlPSJidXR0b24iIG9uY2xpY2s9ImNsb3NlTW9kYWwoJ3JlbmFtZU1vZGFsJykiPkJhdGFsPC9idXR0b24+CiAgICA8L2Zvcm0+CjwvZGl2PgoKPCEtLSBNb2RhbCB1bnR1ayBDaG1vZCAtLT4KPGRpdiBpZD0iY2htb2RNb2RhbCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsgcG9zaXRpb246Zml4ZWQ7IHRvcDoyMCU7IGxlZnQ6MzAlOyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyBwYWRkaW5nOjIwcHg7IGJvcmRlcjoxcHggc29saWQgYmxhY2s7IHotaW5kZXg6MTAwMDsiPgogICAgPGgzPlViYWggSXppbiBGaWxlL0ZvbGRlcjwvaDM+CiAgICA8cD48c3Ryb25nPkZpbGUvRm9sZGVyIHlhbmcgYWthbiBkaXViYWggaXppbm55YTo8L3N0cm9uZz4gPHNwYW4gaWQ9ImNobW9kRmlsZU5hbWUiPk5hbWEgRmlsZS9Gb2xkZXI8L3NwYW4+PC9wPgogICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0iY2htb2QiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJjaG1vZEZpbGVQYXRoIiBuYW1lPSJmaWxlIj4KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGVybWlzc2lvbnMiIHBsYWNlaG9sZGVyPSJJemluIChjb250b2g6IDA3NTUpIj48YnI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zdWNjZXNzIiB0eXBlPSJzdWJtaXQiPlViYWggSXppbjwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4td2FybmluZyIgdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJjbG9zZU1vZGFsKCdjaG1vZE1vZGFsJykiPkJhdGFsPC9idXR0b24+CiAgICA8L2Zvcm0+CjwvZGl2Pgo8c2NyaXB0PgovLyBGdW5nc2kgdW50dWsgbWVuZ2FtYmlsIG5hbWEgZmlsZS9mb2xkZXIgZGFyaSBwYXRoIGxlbmdrYXAKZnVuY3Rpb24gZ2V0RmlsZU5hbWVGcm9tUGF0aChwYXRoKSB7CiAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7CiAgICByZXR1cm4gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07Cn0KCi8vZ2V0ZmlsZQpmdW5jdGlvbiBvcGVuRWRpdE1vZGFsKGZpbGVQYXRoKSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdE1vZGFsJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdEZpbGVQYXRoJykudmFsdWUgPSBmaWxlUGF0aDsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0RmlsZU5hbWUnKS5pbm5lclRleHQgPSBnZXRGaWxlTmFtZUZyb21QYXRoKGZpbGVQYXRoKTsKCiAgICAvLyBNZW5nYW1iaWwga29udGVuIGZpbGUgbWVuZ2d1bmFrYW4gQUpBWAogICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgeGhyLm9wZW4oJ0dFVCcsICc/ZmlsZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVQYXRoKSwgdHJ1ZSk7CiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHsKICAgICAgICAgICAgY29uc29sZS5sb2coJ1Jlc3BvbiBkYXJpIHNlcnZlcjonLCB4aHIucmVzcG9uc2VUZXh0KTsgLy8gRGVidWdnaW5nCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0RmlsZUNvbnRlbnQnKS52YWx1ZSA9IHhoci5yZXNwb25zZVRleHQ7IC8vIFRhbXBpbGthbiBrb250ZW4gZmlsZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFsZXJ0KCdHYWdhbCBtZW11YXQga29udGVuIGZpbGUuJyk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0RmlsZUNvbnRlbnQnKS52YWx1ZSA9ICcnOyAvLyBLb3NvbmdrYW4gamlrYSBnYWdhbAogICAgICAgIH0KICAgIH07CiAgICB4aHIuc2VuZCgpOwp9CgoKCgovLyBGdW5nc2kgdW50dWsgbWVtYnVrYSBtb2RhbCBSZW5hbWUgRmlsZS9Gb2xkZXIKZnVuY3Rpb24gb3BlblJlbmFtZU1vZGFsKG9sZE5hbWUpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZW5hbWVNb2RhbCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlbmFtZU9sZE5hbWUnKS52YWx1ZSA9IG9sZE5hbWU7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVuYW1lRmlsZU5hbWUnKS5pbm5lclRleHQgPSBnZXRGaWxlTmFtZUZyb21QYXRoKG9sZE5hbWUpOyAvLyBNZW5hbXBpbGthbiBoYW55YSBuYW1hIGZpbGUvZm9sZGVyCn0KCi8vIEZ1bmdzaSB1bnR1ayBtZW1idWthIG1vZGFsIENobW9kCmZ1bmN0aW9uIG9wZW5DaG1vZE1vZGFsKGZpbGVQYXRoKSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2htb2RNb2RhbCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NobW9kRmlsZVBhdGgnKS52YWx1ZSA9IGZpbGVQYXRoOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NobW9kRmlsZU5hbWUnKS5pbm5lclRleHQgPSBnZXRGaWxlTmFtZUZyb21QYXRoKGZpbGVQYXRoKTsgLy8gTWVuYW1waWxrYW4gaGFueWEgbmFtYSBmaWxlL2ZvbGRlcgp9CgovLyBGdW5nc2kgdW50dWsgbWVudXR1cCBtb2RhbApmdW5jdGlvbiBjbG9zZU1vZGFsKG1vZGFsSWQpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1vZGFsSWQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Cn0KPC9zY3JpcHQ+CjwhLS0gU0MgLS0+CjxzY3JpcHQ+CmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21tYW5kJykuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCBmdW5jdGlvbiAoZSkgewogICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7CiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICB2YXIgY29tbWFuZCA9IHRoaXMudmFsdWU7CiAgICAgICAgdmFyIG91dHB1dERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdXRwdXQnKTsKICAgICAgICB2YXIgcHJvbXB0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgcHJvbXB0RGl2LmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz0icHJvbXB0Ij4+IDwvc3Bhbj4nICsgY29tbWFuZDsKICAgICAgICBvdXRwdXREaXYuYXBwZW5kQ2hpbGQocHJvbXB0RGl2KTsKCiAgICAgICAgLy8gS2lyaW0gcGVyaW50YWgga2Ugc2VydmVyIHVudHVrIGRpZWtzZWt1c2kKICAgICAgICBmZXRjaCgnJywgewogICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGJvZHk6ICdjb21tYW5kPScgKyBlbmNvZGVVUklDb21wb25lbnQoY29tbWFuZCkKICAgICAgICB9KQogICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLnRleHQoKSkKICAgICAgICAudGhlbihyZXN1bHQgPT4gewogICAgICAgICAgICB2YXIgcmVzdWx0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgIHZhciBwcmVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7CiAgICAgICAgICAgIHByZUVsZW1lbnQudGV4dENvbnRlbnQgPSByZXN1bHQ7IC8vIE1lbmdndW5ha2FuIDxwcmU+IHVudHVrIG1lbmphZ2EgZm9ybWF0CiAgICAgICAgICAgIHJlc3VsdERpdi5hcHBlbmRDaGlsZChwcmVFbGVtZW50KTsKICAgICAgICAgICAgcmVzdWx0RGl2LmNsYXNzTGlzdC5hZGQoJ3RleHQtbGlnaHQnKTsKICAgICAgICAgICAgb3V0cHV0RGl2LmFwcGVuZENoaWxkKHJlc3VsdERpdik7CgogICAgICAgICAgICAvLyBTY3JvbGwgb3RvbWF0aXMga2UgYmF3YWggc2V0ZWxhaCBvdXRwdXQgZGl0YW1iYWhrYW4KICAgICAgICAgICAgb3V0cHV0RGl2LnNjcm9sbFRvcCA9IG91dHB1dERpdi5zY3JvbGxIZWlnaHQ7CiAgICAgICAgfSk7CgogICAgICAgIHRoaXMudmFsdWUgPSAnJzsgLy8gUmVzZXQgaW5wdXQKICAgIH0KfSk7Cgpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKCkgewogICAgY29uc3QgZWRpdEJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZWRpdC1idG4nKTsKICAgIGVkaXRCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXRlbScpOwogICAgICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbnRlbnQnKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLWZpbGUtbmFtZScpLnZhbHVlID0gZmlsZU5hbWU7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC1maWxlLWNvbnRlbnQnKS52YWx1ZSA9IGZpbGVDb250ZW50OwogICAgICAgIH0pOwogICAgfSk7Cn0pOwoKLyogTnVsaXMgKi8KY29uc3QgdGV4dFRvVHlwZSA9ICJUaGUgd1NwbG9pdCBTaGVsbCBCYWNrZG9vciI7CmNvbnN0IHR5cGluZ1NwZWVkID0gMTAwOyAvLyBUeXBpbmcgc3BlZWQgaW4gbXMKY29uc3QgdGV4dEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIudGV4dCIpOwpsZXQgY2hhckluZGV4ID0gMDsKZnVuY3Rpb24gdHlwZVRleHQoKSB7CiAgaWYgKGNoYXJJbmRleCA8IHRleHRUb1R5cGUubGVuZ3RoKSB7CiAgICB0ZXh0RWxlbWVudC50ZXh0Q29udGVudCArPSB0ZXh0VG9UeXBlW2NoYXJJbmRleF07CiAgICBjaGFySW5kZXgrKzsKICAgIHNldFRpbWVvdXQodHlwZVRleHQsIHR5cGluZ1NwZWVkKTsKICB9Cn0KLy8gU3RhcnQgdHlwaW5nIGFuaW1hdGlvbgp0eXBlVGV4dCgpOwo8L3NjcmlwdD4KPCEtLSBCb290c3RyYXAgSlMgZGFuIFBvcHBlci5qcyBDRE4gLS0+CjxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0Bwb3BwZXJqcy9jb3JlQDIuMTEuNi9kaXN0L3VtZC9wb3BwZXIubWluLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMy4zL2Rpc3QvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CjxkaXYgY2xhc3M9ImZvb3RlciI+CiAgICA8aT5AMjAyNSB3U3Bsb2l0IEtpdCB8IDxhIGhyZWY9Imh0dHBzOi8vd2FyY2V1cHJvamVjdC5vcmciPldhcmNldSBQcm9qZWN0PC9hPjwvaT4KPC9kaXY+CmtpcmExNDA2 \ No newline at end of file