Our Logo
WebAsOne
Home
How To
Join US
Design
Design Block
Design Patterns
Animation
Themes
Fonts
Marketing
Hero
About
BIO
Contact
CTA
FAQ
Footer
Portfolio
Price
Service
Team
Testimonials
Pages
UI
ReactJS
SvelteJS
VueJS
Apps
OpenSource
Mini-Apps
Opencart-3
EasyAppointment1
Yii2
Yii2-Extra
RoleCommand
GoogleLogin
OpenSource
->
Yii2-Extra
->
RoleCommand
GoogleLogin
See
yii2-rbac.asoneshare.com
for instructions
b_codeEditor/id14-34,Click to clipboard
ezE6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6ICcnLAogICAgICAgICAgICAnRGF0YSc6ICc8P3BocCBcclxuJwogICAgICAgICAgICAgICAgICAgICcgICRjbGllbnRJRCA9ICcKICAgICAgICAgICAgICAgICAgICAiJzc2NDk5NzQzMTc1NC1wZmNpc2VmaXVlanNpbjNkNTVzaW0yNzB2MTVuNTRpMC5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSc7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAkY2xpZW50U2VjcmV0ID0gJwogICAgICAgICAgICAgICAgICAgICInR09DU1BYLW1UV2FqckFsa3lJeXEtenpvQ19QeDFGelV3ZTEnO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgJHJlZGlyZWN0VXJpID0gJ2h0dHBzOi8vX0hPU1RfJztcclxuIgogICAgICAgICAgICAgICAgICAgICc/PicsCiAgICAgICAgICAgICdGaWxlTmFtZSc6ICcuLi9waHAvZ2NvbmZpZy5waHAnLAogICAgICAgICAgICAnSXNUZXh0JzogJycsCiAgICAgICAgICAgICdNeU1vZHVsZSc6ICdiX2NvZGVFZGl0b3InLAogICAgICAgICAgICAnTmVlZENvcHknOiAnJywKICAgICAgICAgICAgJ05vdGVzJzogJycsCiAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAnJywKICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdhRmlsZScsCiAgICAgICAgICAgICdhTGFiZWwnOiAnZ2NvbmZpZy5waHAnLAogICAgICAgICAgICAnYXN2Z2ZpbGUnOiAnJywKICAgICAgICAgICAgJ3ljb2RlJzogJyd9LAogICAgICdlbi1VUyc6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAgICdDb3B5VG9NeVBhZ2VPbmx5JzogJycsCiAgICAgICAgICAgICAgICdEYXRhJzogJzw/cGhwIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudElEID0gJwogICAgICAgICAgICAgICAgICAgICAgICInNzY0OTk3NDMxNzU0LXBmY2lzZWZpdWVqc2luM2Q1NXNpbTI3MHYxNW41NGkwLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tJztcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICRjbGllbnRTZWNyZXQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIidHT0NTUFgtbVRXYWpyQWxreUl5cS16em9DX1B4MUZ6VXdlMSc7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAkcmVkaXJlY3RVcmkgPSAnaHR0cHM6Ly9fSE9TVF8nO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJz8+JywKICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJy4uL3BocC9nY29uZmlnLnBocCcsCiAgICAgICAgICAgICAgICdJc1RleHQnOiAnJywKICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICAgICdOZWVkQ29weSc6ICcnLAogICAgICAgICAgICAgICAnTm90ZXMnOiAnJywKICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6ICcnLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgICAgJ2FMYWJlbCc6ICdnY29uZmlnLnBocCcsCiAgICAgICAgICAgICAgICdhc3ZnZmlsZSc6ICcnLAogICAgICAgICAgICAgICAneWNvZGUnOiAnJ319LAogMjogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJy8uLi9waHAvZ29vZ2xlJywKICAgICAgICAgICAgJ0NvcHlUb015UGFnZU9ubHknOiAxLAogICAgICAgICAgICAnRGF0YSc6ICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICJyZXF1aXJlIjoge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgImdvb2dsZS9hcGljbGllbnQiOiAiXjIuMTUuMCJcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgfSxcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgInNjcmlwdHMiOiB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAicHJlLWF1dG9sb2FkLWR1bXAiOiAnCiAgICAgICAgICAgICAgICAgICAgJyJHb29nbGVcXFxcVGFza1xcXFxDb21wb3Nlcjo6Y2xlYW51cCJcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ31cclxuJywKICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ2NvbXBvc2VyLmpzb24nLAogICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICdOb3Rlcyc6ICcnLAogICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdhRmlsZScsCiAgICAgICAgICAgICdhTGFiZWwnOiAnY29tcG9zZXIuanNvbicsCiAgICAgICAgICAgICdhc3ZnZmlsZSc6ICcnLAogICAgICAgICAgICAneWNvZGUnOiAnJ30sCiAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnLy4uL3BocC9nb29nbGUnLAogICAgICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6IDEsCiAgICAgICAgICAgICAgICdEYXRhJzogJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgInJlcXVpcmUiOiB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAiZ29vZ2xlL2FwaWNsaWVudCI6ICJeMi4xNS4wIlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9LFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAic2NyaXB0cyI6IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICJwcmUtYXV0b2xvYWQtZHVtcCI6ICcKICAgICAgICAgICAgICAgICAgICAgICAnIkdvb2dsZVxcXFxUYXNrXFxcXENvbXBvc2VyOjpjbGVhbnVwIlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nLAogICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnY29tcG9zZXIuanNvbicsCiAgICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnYl9jb2RlRWRpdG9yJywKICAgICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICAgJ05vdGVzJzogJycsCiAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgICAgJ2FMYWJlbCc6ICdjb21wb3Nlci5qc29uJywKICAgICAgICAgICAgICAgJ2FzdmdmaWxlJzogJycsCiAgICAgICAgICAgICAgICd5Y29kZSc6ICcnfX0sCiAzOiB7J2VuJzogeydDb3B5VG9NeVBhZ2VPbmx5JzogMSwKICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICdOb3Rlcyc6ICcnLAogICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0dQcmVJbmMnLAogICAgICAgICAgICAnYUxhYmVsJzogJ2ZvciBpbmRleC5waHAnLAogICAgICAgICAgICAnYXN2Z2ZpbGUnOiAnJywKICAgICAgICAgICAgJ2NvZGUnOiAnPD9waHBcclxuJwogICAgICAgICAgICAgICAgICAgICJpZiAoaXNzZXQoJF9HRVRbJ2NvZGUnXSkpIHtcclxuIgogICAgICAgICAgICAgICAgICAgICIgIHJlcXVpcmVfb25jZSAnLi4vcGhwL2dvb2dsZS92ZW5kb3IvYXV0b2xvYWQucGhwJztcclxuIgogICAgICAgICAgICAgICAgICAgICIgIHJlcXVpcmVfb25jZSAnLi4vcGhwL2djb25maWcucGhwJztcclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgIC8vIGNyZWF0ZSBDbGllbnQgUmVxdWVzdCB0byBhY2Nlc3MgR29vZ2xlIEFQSVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudCA9IG5ldyBHb29nbGVfQ2xpZW50KCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAkY2xpZW50LT5zZXRDbGllbnRJZCgkY2xpZW50SUQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0Q2xpZW50U2VjcmV0KCRjbGllbnRTZWNyZXQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0UmVkaXJlY3RVcmkoJHJlZGlyZWN0VXJpKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQtPmFkZFNjb3BlKCJlbWFpbCIpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+YWRkU2NvcGUoInByb2ZpbGUiKTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICIgICRjbGllbnQtPmF1dGhlbnRpY2F0ZSgkX0dFVFsnY29kZSddKTtcclxuIgogICAgICAgICAgICAgICAgICAgICcgICRnb29nbGVUb2tlbiA9ICRjbGllbnQtPmdldEFjY2Vzc1Rva2VuKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICBpZiAoIWlzc2V0KCRfU0VTU0lPTlsnZ29vZ2xlVG9rZW4nXSkpIHtcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgJF9TRVNTSU9OWydnb29nbGVUb2tlbiddID0gJGdvb2dsZVRva2VuO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICB0cnkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICRjbGllbnQtPnNldEFjY2Vzc1Rva2VuKCRnb29nbGVUb2tlbik7XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICBoZWFkZXIoJ2xvY2F0aW9uOiBodHRwczovL19IT1NUXycpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIC8vIGdldCBwcm9maWxlIGluZm9cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJGdvb2dsZV9vYXV0aCA9IG5ldyAnCiAgICAgICAgICAgICAgICAgICAgJ0dvb2dsZV9TZXJ2aWNlX09hdXRoMigkY2xpZW50KTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJGdvb2dsZV9hY2NvdW50X2luZm8gPSAnCiAgICAgICAgICAgICAgICAgICAgJyRnb29nbGVfb2F1dGgtPnVzZXJpbmZvLT5nZXQoKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJGVtYWlsID0gICRnb29nbGVfYWNjb3VudF9pbmZvLT5lbWFpbDtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJG5hbWUgPSAgJGdvb2dsZV9hY2NvdW50X2luZm8tPm5hbWU7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICRjb25maWdbJ3BhcmFtcyddWydnbWFpbCddID0gJGVtYWlsO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAvL2VjaG8gImVtYWlsICIuJGVtYWlsLiIgbmFtZSAiLiRuYW1lO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAvL2V4aXQoMCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICR1cmwgPSAiaHR0cHM6Ly9fSE9TVF8vd2ViYXNvbmVZaWkvY3JlYXRlVXNlci5waHAiOyAnCiAgICAgICAgICAgICAgICAgICAgJy8vIFJlcGxhY2Ugd2l0aCB5b3VyIHRhcmdldCBVUkxcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJGRhdGEgPSBhcnJheSgiZW1haWwiID0+ICRlbWFpbCwgIm5hbWUiID0+ICRuYW1lKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJG9wdGlvbnMgPSBhcnJheShcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAnaHR0cCcgPT4gYXJyYXkoXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICBcJ2hlYWRlclwnICA9PiAiQ29udGVudC10eXBlOiAnCiAgICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxcclxcbiIsXHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAnbWV0aG9kJyAgPT4gJ1BPU1QnLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgJ2NvbnRlbnQnID0+IGh0dHBfYnVpbGRfcXVlcnkoJGRhdGEpXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgKVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICApO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkY29udGV4dCAgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoJG9wdGlvbnMpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkcmVzdWx0ID0gZmlsZV9nZXRfY29udGVudHMoJHVybCwgZmFsc2UsICcKICAgICAgICAgICAgICAgICAgICAnJGNvbnRleHQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBpZiAoJHJlc3VsdCA9PT0gRkFMU0UpIHsgLyogSGFuZGxlIGVycm9yICovIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJHBhc3N3b3JkPSIiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkdXNlcm5hbWU9IiI7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICRyID0gZXhwbG9kZSgnfCcsICAkcmVzdWx0KTtcclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgZm9yZWFjaCAoJHIgYXMgJHYpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAvL2VjaG8gJHYuIjxiciAvPiI7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgJGEgPSBleHBsb2RlKCc6JywgJHYpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgIGlmICgkYVswXSA9PSAnUGFzc3dvcmQnKSB7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkcGFzc3dvcmQgPSAkYVsxXTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgIGlmICgkYVswXSA9PSAnVXNlcm5hbWUnKSB7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkdXNlcm5hbWUgPSAkYVsxXTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgZWNobyAiPHNjcmlwdD4gICAgICcKICAgICAgICAgICAgICAgICAgICAibG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2dtYWlsVXNlcicsICIKICAgICAgICAgICAgICAgICAgICAnXCciLiR1c2VybmFtZS4iXCcpOyI7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIGVjaG8gIiAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCdnbWFpbFBhc3N3b3JkXCcsICcKICAgICAgICAgICAgICAgICAgICAnXCciLiRwYXNzd29yZC4iXCcpOzwvc2NyaXB0PiI7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgIGVjaG8gJzxzY3JpcHQ+IHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIgogICAgICAgICAgICAgICAgICAgICciaHR0cHM6Ly9fSE9TVF8vZGVmYXVsdC9lbi1VUy9uYXY2aDAvcy9Mb2dpbi8/cj1zaXRlJTJGbG9naW4iOzwvc2NyaXB0PlwnO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgdW5zZXQoJF9TRVNTSU9OWyJnb29nbGVUb2tlbiJdKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAnICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJz8+JywKICAgICAgICAgICAgJ2Rlc2MnOiAnbWFpbiBpbmNsdWRlJ30sCiAgICAgJ2VuLVVTJzogeydDb3B5VG9NeVBhZ2VPbmx5JzogMSwKICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICAgICdOb3Rlcyc6ICcnLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0dQcmVJbmMnLAogICAgICAgICAgICAgICAnYUxhYmVsJzogJ2ZvciBpbmRleC5waHAnLAogICAgICAgICAgICAgICAnYXN2Z2ZpbGUnOiAnJywKICAgICAgICAgICAgICAgJ2NvZGUnOiAnPD9waHBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICJpZiAoaXNzZXQoJF9HRVRbJ2NvZGUnXSkpIHtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgIHJlcXVpcmVfb25jZSAnLi4vcGhwL2dvb2dsZS92ZW5kb3IvYXV0b2xvYWQucGhwJztcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgIHJlcXVpcmVfb25jZSAnLi4vcGhwL2djb25maWcucGhwJztcclxuIgogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIC8vIGNyZWF0ZSBDbGllbnQgUmVxdWVzdCB0byBhY2Nlc3MgR29vZ2xlIEFQSVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudCA9IG5ldyBHb29nbGVfQ2xpZW50KCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAkY2xpZW50LT5zZXRDbGllbnRJZCgkY2xpZW50SUQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0Q2xpZW50U2VjcmV0KCRjbGllbnRTZWNyZXQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0UmVkaXJlY3RVcmkoJHJlZGlyZWN0VXJpKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQtPmFkZFNjb3BlKCJlbWFpbCIpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+YWRkU2NvcGUoInByb2ZpbGUiKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICRjbGllbnQtPmF1dGhlbnRpY2F0ZSgkX0dFVFsnY29kZSddKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICRnb29nbGVUb2tlbiA9ICRjbGllbnQtPmdldEFjY2Vzc1Rva2VuKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICBpZiAoIWlzc2V0KCRfU0VTU0lPTlsnZ29vZ2xlVG9rZW4nXSkpIHtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgJF9TRVNTSU9OWydnb29nbGVUb2tlbiddID0gJGdvb2dsZVRva2VuO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB0cnkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICRjbGllbnQtPnNldEFjY2Vzc1Rva2VuKCRnb29nbGVUb2tlbik7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICBoZWFkZXIoJ2xvY2F0aW9uOiBodHRwczovL19IT1NUXycpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIC8vIGdldCBwcm9maWxlIGluZm9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJGdvb2dsZV9vYXV0aCA9IG5ldyAnCiAgICAgICAgICAgICAgICAgICAgICAgJ0dvb2dsZV9TZXJ2aWNlX09hdXRoMigkY2xpZW50KTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJGdvb2dsZV9hY2NvdW50X2luZm8gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRnb29nbGVfb2F1dGgtPnVzZXJpbmZvLT5nZXQoKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJGVtYWlsID0gICRnb29nbGVfYWNjb3VudF9pbmZvLT5lbWFpbDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJG5hbWUgPSAgJGdvb2dsZV9hY2NvdW50X2luZm8tPm5hbWU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICRjb25maWdbJ3BhcmFtcyddWydnbWFpbCddID0gJGVtYWlsO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAvL2VjaG8gImVtYWlsICIuJGVtYWlsLiIgbmFtZSAiLiRuYW1lO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAvL2V4aXQoMCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICR1cmwgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgJyJodHRwczovL19IT1NUXy93ZWJhc29uZVlpaS9jcmVhdGVVc2VyLnBocCI7IC8vICcKICAgICAgICAgICAgICAgICAgICAgICAnUmVwbGFjZSB3aXRoIHlvdXIgdGFyZ2V0IFVSTFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAkZGF0YSA9IGFycmF5KCJlbWFpbCIgPT4gJGVtYWlsLCAibmFtZSIgPT4gJwogICAgICAgICAgICAgICAgICAgICAgICckbmFtZSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICRvcHRpb25zID0gYXJyYXkoXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgJ2h0dHAnID0+IGFycmF5KFxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgXCdoZWFkZXJcJyAgPT4gIkNvbnRlbnQtdHlwZTogJwogICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXHJcXG4iLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgJ21ldGhvZCcgID0+ICdQT1NUJyxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICdjb250ZW50JyA9PiBodHRwX2J1aWxkX3F1ZXJ5KCRkYXRhKVxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJGNvbnRleHQgID0gc3RyZWFtX2NvbnRleHRfY3JlYXRlKCRvcHRpb25zKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJHJlc3VsdCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwsIGZhbHNlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRjb250ZXh0KTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgaWYgKCRyZXN1bHQgPT09IEZBTFNFKSB7IC8qIEhhbmRsZSBlcnJvciAqLyB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICRwYXNzd29yZD0iIjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJHVzZXJuYW1lPSIiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAkciA9IGV4cGxvZGUoJ3wnLCAgJHJlc3VsdCk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIGZvcmVhY2ggKCRyIGFzICR2KSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgLy9lY2hvICR2LiI8YnIgLz4iO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICRhID0gZXhwbG9kZSgnOicsICR2KTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICBpZiAoJGFbMF0gPT0gJ1Bhc3N3b3JkJykge1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHBhc3N3b3JkID0gJGFbMV07XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICBpZiAoJGFbMF0gPT0gJ1VzZXJuYW1lJykge1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHVzZXJuYW1lID0gJGFbMV07XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIGVjaG8gIjxzY3JpcHQ+ICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsU3RvcmFnZS5zZXRJdGVtKCdnbWFpbFVzZXInLCAiCiAgICAgICAgICAgICAgICAgICAgICAgJ1wnIi4kdXNlcm5hbWUuIlwnKTsiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICBlY2hvICIgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwnZ21haWxQYXNzd29yZFwnLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ1wnIi4kcGFzc3dvcmQuIlwnKTs8L3NjcmlwdD4iO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICBlY2hvICc8c2NyaXB0PiB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIKICAgICAgICAgICAgICAgICAgICAgICAnImh0dHBzOi8vX0hPU1RfL2RlZmF1bHQvZW4tVVMvbmF2NmgwL3MvTG9naW4vP3I9c2l0ZSUyRmxvZ2luIjs8L3NjcmlwdD5cJztcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHVuc2V0KCRfU0VTU0lPTlsiZ29vZ2xlVG9rZW4iXSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICc/PicsCiAgICAgICAgICAgICAgICdkZXNjJzogJ21haW4gaW5jbHVkZSd9fSwKIDQ6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6IDEsCiAgICAgICAgICAgICdEYXRhJzogJzw/cGhwXHJcbicKICAgICAgICAgICAgICAgICAgICAnJGNvbmZpZyA9ICcKICAgICAgICAgICAgICAgICAgICAicmVxdWlyZSgnLi4vLi4vc3JjL3lpaTIvYWR2YW5jZWQvY29tbW9uL2NvbmZpZy9tYWluLWxvY2FsLnBocCcpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiRjbWQgPSAnLi4vLi4vc3JjL3lpaTIvYWR2YW5jZWQveWlpICc7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAiJHVzZXJuYW1lID0gICd1Jy5zdWJzdHIobWQ1KG10X3JhbmQoKSksIDAsIDcpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiRlbWFpbCA9ICdjeXVhbjEyM0BnbWFpbC5jb20nO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyRsYXN0bmFtZT0iIjtcclxuJwogICAgICAgICAgICAgICAgICAgICckZmlyc3RuYW1lPSIiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ2lmIChpc3NldCgkX1BPU1RbImVtYWlsIl0pKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkZW1haWwgPSAkX1BPU1RbImVtYWlsIl07XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAvLyR1c2VybmFtZSA9IHN0cl9yZXBsYWNlKCdAJywnJywgJGVtYWlsKTtcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICRuYW1lID0gJF9QT1NUWyJuYW1lIl07XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkbmEgPSBleHBsb2RlKFwnIFwnLCRfUE9TVFsibmFtZSJdKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICRsYXN0bmFtZSA9IGVuZCgkbmEpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGZpcnN0bmFtZSA9ICRuYVswXTtcclxuJwogICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnJHVzZXJFeGlzdCA9IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAiJGRiID0gJGNvbmZpZ1snY29tcG9uZW50cyddWydkYiddO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiRjb25uID0gbmV3IFBETygkZGJbJ2RzbiddLCAkZGJbJ3VzZXJuYW1lJ10sICIKICAgICAgICAgICAgICAgICAgICAiJGRiWydwYXNzd29yZCddKTtcclxuIgogICAgICAgICAgICAgICAgICAgICckY29ubi0+c2V0QXR0cmlidXRlKFBETzo6QVRUUl9FUlJNT0RFLCAnCiAgICAgICAgICAgICAgICAgICAgJ1BETzo6RVJSTU9ERV9FWENFUFRJT04pO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyMgY2hlY2sgaWYgZW1haWwgZXhpc3RcclxuJwogICAgICAgICAgICAgICAgICAgICd0cnkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkc3FsID0gIlNFTEVDVCAqICBGUk9NIHVzZXIgV0hFUkUgZW1haWwgPSA6ZW1haWwiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkc3RtdCA9ICRjb25uLT5wcmVwYXJlKCRzcWwpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAkc3RtdC0+YmluZFBhcmFtKCc6ZW1haWwnLCAkZW1haWwpOyAvLyBCaW5kIHRoZSAiCiAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkc3RtdC0+ZXhlY3V0ZSgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAvLyBGZXRjaCB0aGUgcmVzdWx0c1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkcm93ID0gJHN0bXQtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAjZWNobyAnfGZldGNoRHVtcDonLiR1aWQ7XHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgIGlmIChpc3NldCgkcm93Wyd1c2VybmFtZSddKSkge1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAvL3Zhcl9kdW1wKCRyb3dbJ3VzZXJuYW1lJ10pO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAkdXNlcm5hbWUgPSAkcm93Wyd1c2VybmFtZSddO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAkdXNlckV4aXN0ID0gMTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ30gY2F0Y2goUERPRXhjZXB0aW9uICRlKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIGVjaG8gIkNvbm5lY3Rpb24gZmFpbGVkOiAiIC4gJGUtPmdldE1lc3NhZ2UoKTtcclxuJwogICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAiJHVybCA9ICdfSE9TVF8nO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiRwbGFpbl9wYXNzd29yZCA9ICAncCcuc3Vic3RyKG1kNShtdF9yYW5kKCkpLCAwLCAxMCk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAiIyRwbGFpbl9wYXNzd29yZCA9ICAnTmNodW5nbGkxMjMnO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJ2lmICgkdXNlckV4aXN0ID09IDApIHtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAjZWNobyAkY21kO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICRjY21kID0gJGNtZC4ndXNlci9jcmVhdGUgJy4kZW1haWwuJyAnLiR1c2VybmFtZS4nICIKICAgICAgICAgICAgICAgICAgICAiJy4kdXJsLicgJy4kcGxhaW5fcGFzc3dvcmQ7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgZWNobyAkY2NtZDtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAkcmV0ID0gc2hlbGxfZXhlYygkY2NtZCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgI2VjaG8gJHJldDtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAkcmNtZCA9ICRjbWQuJ3VzZXIvcm9sZSAnLiRlbWFpbC4nIFJlZ2lzdGVyZWQnO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICRyZXQgPSBzaGVsbF9leGVjKCRyY21kKTtcclxuJwogICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAnLy95aWkgdXNlci9wYXNzd29yZCA8dXNlcm5hbWVPckVtYWlsPiA8cGFzc3dvcmQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAiJGNjbWQgPSAkY21kLid1c2VyL3Bhc3N3b3JkICcuJGVtYWlsLicgIgogICAgICAgICAgICAgICAgICAgICInLiRwbGFpbl9wYXNzd29yZDtcclxuIgogICAgICAgICAgICAgICAgICAgICckcmV0ID0gc2hlbGxfZXhlYygkY2NtZCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnZWNobyAkcmV0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gInxFbWFpbDoiLiRlbWFpbDtcclxuJwogICAgICAgICAgICAgICAgICAgICdlY2hvICJ8VXNlcm5hbWU6Ii4kdXNlcm5hbWU7XHJcbicKICAgICAgICAgICAgICAgICAgICAnZWNobyAifEZ1bGxOYW1lOiIuJG5hbWU7XHJcbicKICAgICAgICAgICAgICAgICAgICAnZWNobyAifExhc3ROYW1lOiIuJGxhc3RuYW1lO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gInxGaXJzdE5hbWU6Ii4kZmlyc3RuYW1lO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyNlY2hvICJ8UGxhaW5QYXNzd29yZDoiLiRwbGFpbl9wYXNzd29yZDtcclxuJwogICAgICAgICAgICAgICAgICAgICdlY2hvICJ8UGFzc3dvcmQ6Ii4kcGxhaW5fcGFzc3dvcmQ7JywKICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ3dlYmFzb25lWWlpL2NyZWF0ZVVzZXIucGhwJywKICAgICAgICAgICAgJ0lzVGV4dCc6ICcnLAogICAgICAgICAgICAnTXlNb2R1bGUnOiAnYl9jb2RlRWRpdG9yJywKICAgICAgICAgICAgJ05lZWRDb3B5JzogJycsCiAgICAgICAgICAgICdOb3Rlcyc6ICcnLAogICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogJycsCiAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnYUZpbGUnLAogICAgICAgICAgICAnYUxhYmVsJzogJ2NyZWF0ZVVzZXIucGhwJywKICAgICAgICAgICAgJ2FzdmdmaWxlJzogJycsCiAgICAgICAgICAgICd5Y29kZSc6ICcnfSwKICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6IDEsCiAgICAgICAgICAgICAgICdEYXRhJzogJzw/cGhwXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnJGNvbmZpZyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZSgnLi4vLi4vc3JjL3lpaTIvYWR2YW5jZWQvY29tbW9uL2NvbmZpZy9tYWluLWxvY2FsLnBocCcpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiRjbWQgPSAnLi4vLi4vc3JjL3lpaTIvYWR2YW5jZWQveWlpICc7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiJHVzZXJuYW1lID0gICd1Jy5zdWJzdHIobWQ1KG10X3JhbmQoKSksIDAsIDcpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiRlbWFpbCA9ICdjeXVhbjEyM0BnbWFpbC5jb20nO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyRsYXN0bmFtZT0iIjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICckZmlyc3RuYW1lPSIiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ2lmIChpc3NldCgkX1BPU1RbImVtYWlsIl0pKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkZW1haWwgPSAkX1BPU1RbImVtYWlsIl07XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAvLyR1c2VybmFtZSA9IHN0cl9yZXBsYWNlKCdAJywnJywgJGVtYWlsKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICRuYW1lID0gJF9QT1NUWyJuYW1lIl07XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkbmEgPSBleHBsb2RlKFwnIFwnLCRfUE9TVFsibmFtZSJdKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICRsYXN0bmFtZSA9IGVuZCgkbmEpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGZpcnN0bmFtZSA9ICRuYVswXTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnJHVzZXJFeGlzdCA9IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiJGRiID0gJGNvbmZpZ1snY29tcG9uZW50cyddWydkYiddO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiRjb25uID0gbmV3IFBETygkZGJbJ2RzbiddLCAkZGJbJ3VzZXJuYW1lJ10sICIKICAgICAgICAgICAgICAgICAgICAgICAiJGRiWydwYXNzd29yZCddKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICckY29ubi0+c2V0QXR0cmlidXRlKFBETzo6QVRUUl9FUlJNT0RFLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ1BETzo6RVJSTU9ERV9FWENFUFRJT04pO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyMgY2hlY2sgaWYgZW1haWwgZXhpc3RcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd0cnkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAkc3FsID0gIlNFTEVDVCAqICBGUk9NIHVzZXIgV0hFUkUgZW1haWwgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgJzplbWFpbCI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICRzdG10ID0gJGNvbm4tPnByZXBhcmUoJHNxbCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICRzdG10LT5iaW5kUGFyYW0oJzplbWFpbCcsICRlbWFpbCk7IC8vIEJpbmQgdGhlICIKICAgICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICRzdG10LT5leGVjdXRlKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIC8vIEZldGNoIHRoZSByZXN1bHRzXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICRyb3cgPSAkc3RtdC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQyk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICNlY2hvICd8ZmV0Y2hEdW1wOicuJHVpZDtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgaWYgKGlzc2V0KCRyb3dbJ3VzZXJuYW1lJ10pKSB7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgIC8vdmFyX2R1bXAoJHJvd1sndXNlcm5hbWUnXSk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICR1c2VybmFtZSA9ICRyb3dbJ3VzZXJuYW1lJ107XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICR1c2VyRXhpc3QgPSAxO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnfSBjYXRjaChQRE9FeGNlcHRpb24gJGUpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgZWNobyAiQ29ubmVjdGlvbiBmYWlsZWQ6ICIgLiAkZS0+Z2V0TWVzc2FnZSgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIkdXJsID0gJ19IT1NUXyc7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiJHBsYWluX3Bhc3N3b3JkID0gICdwJy5zdWJzdHIobWQ1KG10X3JhbmQoKSksIDAsICIKICAgICAgICAgICAgICAgICAgICAgICAnMTApO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiMkcGxhaW5fcGFzc3dvcmQgPSAgJ05jaHVuZ2xpMTIzJztcclxuIgogICAgICAgICAgICAgICAgICAgICAgICdpZiAoJHVzZXJFeGlzdCA9PSAwKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgI2VjaG8gJGNtZDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAkY2NtZCA9ICRjbWQuJ3VzZXIvY3JlYXRlICcuJGVtYWlsLicgJy4kdXNlcm5hbWUuJyAiCiAgICAgICAgICAgICAgICAgICAgICAgIicuJHVybC4nICcuJHBsYWluX3Bhc3N3b3JkO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgIGVjaG8gJGNjbWQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgJHJldCA9IHNoZWxsX2V4ZWMoJGNjbWQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICNlY2hvICRyZXQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgJHJjbWQgPSAkY21kLid1c2VyL3JvbGUgJy4kZW1haWwuJyBSZWdpc3RlcmVkJztcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAkcmV0ID0gc2hlbGxfZXhlYygkcmNtZCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJy8veWlpIHVzZXIvcGFzc3dvcmQgPHVzZXJuYW1lT3JFbWFpbD4gPHBhc3N3b3JkPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiRjY21kID0gJGNtZC4ndXNlci9wYXNzd29yZCAnLiRlbWFpbC4nICIKICAgICAgICAgICAgICAgICAgICAgICAiJy4kcGxhaW5fcGFzc3dvcmQ7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnJHJldCA9IHNoZWxsX2V4ZWMoJGNjbWQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ2VjaG8gJHJldDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdlY2hvICJ8RW1haWw6Ii4kZW1haWw7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnZWNobyAifFVzZXJuYW1lOiIuJHVzZXJuYW1lO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ2VjaG8gInxGdWxsTmFtZToiLiRuYW1lO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ2VjaG8gInxMYXN0TmFtZToiLiRsYXN0bmFtZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdlY2hvICJ8Rmlyc3ROYW1lOiIuJGZpcnN0bmFtZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjZWNobyAifFBsYWluUGFzc3dvcmQ6Ii4kcGxhaW5fcGFzc3dvcmQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnZWNobyAifFBhc3N3b3JkOiIuJHBsYWluX3Bhc3N3b3JkOycsCiAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICd3ZWJhc29uZVlpaS9jcmVhdGVVc2VyLnBocCcsCiAgICAgICAgICAgICAgICdJc1RleHQnOiAnJywKICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICAgICdOZWVkQ29weSc6ICcnLAogICAgICAgICAgICAgICAnTm90ZXMnOiAnJywKICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6ICcnLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgICAgJ2FMYWJlbCc6ICdjcmVhdGVVc2VyLnBocCcsCiAgICAgICAgICAgICAgICdhc3ZnZmlsZSc6ICcnLAogICAgICAgICAgICAgICAneWNvZGUnOiAnJ319LAogNTogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICdDb3B5VG9NeVBhZ2VPbmx5JzogMSwKICAgICAgICAgICAgJ0RhdGEnOiAnPD9waHBcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcvKiogQHZhciB5aWlcXHdlYlxcVmlldyAkdGhpcyAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJy8qKiBAdmFyIHlpaVxcYm9vdHN0cmFwNFxcQWN0aXZlRm9ybSAkZm9ybSAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJy8qKiBAdmFyIFxcY29tbW9uXFxtb2RlbHNcXExvZ2luRm9ybSAkbW9kZWwgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICcvKiogV2ViQXNPbmUgVXBkYXRlICovXHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcYm9vdHN0cmFwNFxcQWN0aXZlRm9ybTtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFxib290c3RyYXA0XFxIdG1sO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiR0aGlzLT50aXRsZSAgICAgICAgICAgICAgICAgICA9ICdMb2dpbic7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnaWYgJwogICAgICAgICAgICAgICAgICAgICIoZmlsZV9leGlzdHMoJy4uLy4uLy4uLy4uLy4uLy4uL3BocC9nb29nbGUvdmVuZG9yL2F1dG9sb2FkLnBocCcpKSAiCiAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICcgICMgb25seSBydW4gb24gRG9jUm9vdCBQYWdlXHJcbicKICAgICAgICAgICAgICAgICAgICAnICByZXF1aXJlX29uY2UgJwogICAgICAgICAgICAgICAgICAgICInLi4vLi4vLi4vLi4vLi4vLi4vcGhwL2dvb2dsZS92ZW5kb3IvYXV0b2xvYWQucGhwJztcclxuIgogICAgICAgICAgICAgICAgICAgICIgIHJlcXVpcmVfb25jZSAnLi4vLi4vLi4vLi4vLi4vLi4vcGhwL2djb25maWcucGhwJztcclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgIC8vIGNyZWF0ZSBDbGllbnQgUmVxdWVzdCB0byBhY2Nlc3MgR29vZ2xlIEFQSVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudCA9IG5ldyBHb29nbGVfQ2xpZW50KCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAkY2xpZW50LT5zZXRDbGllbnRJZCgkY2xpZW50SUQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0Q2xpZW50U2VjcmV0KCRjbGllbnRTZWNyZXQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0UmVkaXJlY3RVcmkoJHJlZGlyZWN0VXJpKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQtPmFkZFNjb3BlKCJlbWFpbCIpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+YWRkU2NvcGUoInByb2ZpbGUiKTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgIC8vIGF1dGhlbnRpY2F0ZSBjb2RlIGZyb20gR29vZ2xlIE9BdXRoIEZsb3dcclxuJwogICAgICAgICAgICAgICAgICAgICIgIGlmICghaXNzZXQoJF9HRVRbJ2NvZGUnXSkpIHtcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgZWNobyAiPGRpdiBjbGFzcz1cJ2NvbnRhaW5lclwnPiA8ZGl2IGNsYXNzPVwncm93XCc+ICcKICAgICAgICAgICAgICAgICAgICAiPGRpdiBjbGFzcz0nY29sLXhzLTEyJz48YSBjbGFzcz0nYnRuIGJ0bi13YXJuaW5nICIKICAgICAgICAgICAgICAgICAgICAnYnRuLWJsb2NrXCcgaHJlZj1cJyIuJGNsaWVudC0+Y3JlYXRlQXV0aFVybCgpLiJcJz5Hb29nbGUgJwogICAgICAgICAgICAgICAgICAgICdMb2dpbjwvYT48L2Rpdj48L2Rpdj48L2Rpdj4iO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICc/PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIjxkaXYgY2xhc3M9J2NvbnRhaW5lcic+IDxkaXYgY2xhc3M9J3Jvdyc+IDxkaXYgIgogICAgICAgICAgICAgICAgICAgICdjbGFzcz1cJ2NvbC14cy0xMlwnPiA8aDM+IDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSAnCiAgICAgICAgICAgICAgICAgICAgJ3ctMTAwIiBvbmNsaWNrPSJ1c2VyTG9naW4oKSI+IFVzZSB1c2VybmFtZSBsb2dpbiwgbm90ICcKICAgICAgICAgICAgICAgICAgICAnZW1haWwgPC9idXR0b24+IDwvaDM+IDwvZGl2PjwvZGl2PjwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImQtZmxleCB3LTEwMCBoLTEwMCIgPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgPGRpdiBpZD0idXNlcmxvZ2luIiBjbGFzcz0ibS1hdXRvIiBzdHlsZT0iZGlzcGxheTogJwogICAgICAgICAgICAgICAgICAgICdub25lOyI+XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgIDxoMT48P3BocCBlY2hvIEh0bWw6OmVuY29kZShZaWk6OnQoJ2FwcCcsICIKICAgICAgICAgICAgICAgICAgICAnJHRoaXMtPnRpdGxlKSkgPz48L2gxPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICA8cD48P3BocCBlY2hvIFlpaTo6dCgnYXBwJywgJ1BsZWFzZSBmaWxsIG91dCB0aGUgIgogICAgICAgICAgICAgICAgICAgICJmb2xsb3dpbmcgZmllbGRzIHRvIGxvZ2luOicpID8+PC9wPlxyXG4iCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICA8P3BocCAkZm9ybSA9IEFjdGl2ZUZvcm06OmJlZ2luKFsnaWQnID0+ICIKICAgICAgICAgICAgICAgICAgICAiJ2xvZ2luLWZvcm0nXSk7ID8+XHJcbiIKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIDw/cGhwIGVjaG8gJGZvcm0tPmZpZWxkKCRtb2RlbCwgJwogICAgICAgICAgICAgICAgICAgICIndXNlcm5hbWUnKS0+dGV4dElucHV0KFsnYXV0b2ZvY3VzJyA9PiB0cnVlXSkgPz5cclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgPD9waHAgZWNobyAkZm9ybS0+ZmllbGQoJG1vZGVsLCAnCiAgICAgICAgICAgICAgICAgICAgIidwYXNzd29yZCcpLT5wYXNzd29yZElucHV0KCkgPz5cclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgPD9waHAgZWNobyAkZm9ybS0+ZmllbGQoJG1vZGVsLCAnCiAgICAgICAgICAgICAgICAgICAgIidyZW1lbWJlck1lJyktPmNoZWNrYm94KCkgPz5cclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgPGRpdiBzdHlsZT0iY29sb3I6Izk5OTttYXJnaW46MWVtIDAiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgIDw/cGhwIGVjaG8gWUlJOjp0KCdhcHAnLCAnSWYgeW91IGZvcmdvdCB5b3VyICIKICAgICAgICAgICAgICAgICAgICAicGFzc3dvcmQgeW91IGNhbicpID8+XHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgPD9waHAgZWNobyBIdG1sOjphKFlpaTo6dCgnYXBwJywgJ3Jlc2V0IGl0JyksICIKICAgICAgICAgICAgICAgICAgICAiWydzaXRlL3JlcXVlc3QtcGFzc3dvcmQtcmVzZXQnXSkgPz4uXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgPGJyPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgIDw/cGhwIGVjaG8gWUlJOjp0KCdhcHAnLCAnTmVlZCBuZXcgdmVyaWZpY2F0aW9uICIKICAgICAgICAgICAgICAgICAgICAiZW1haWw/Jyk/Pjw/cGhwIGVjaG8gSHRtbDo6YShZSUk6OnQoJ2FwcCcsICdSZXNlbmQnKSwgIgogICAgICAgICAgICAgICAgICAgICJbJ3NpdGUvcmVzZW5kLXZlcmlmaWNhdGlvbi1lbWFpbCddKSA/PlxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgPD9waHAgZWNobyBIdG1sOjpzdWJtaXRCdXR0b24oWUlJOjp0KCdhcHAnLCAiCiAgICAgICAgICAgICAgICAgICAgIidMb2dpbicpLCBbJ2NsYXNzJyA9PiAnYnRuIGJ0bi1wcmltYXJ5JywgJ25hbWUnID0+ICIKICAgICAgICAgICAgICAgICAgICAiJ2xvZ2luLWJ1dHRvbiddKSA/PlxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgPD9waHAgQWN0aXZlRm9ybTo6ZW5kKCk7ID8+XHJcbicKICAgICAgICAgICAgICAgICAgICAnICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICcgIDxzY3JpcHQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIGZ1bmN0aW9uIHVzZXJMb2dpbigpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAkKCcjdXNlcmxvZ2luJykudG9nZ2xlKCdzbG93JylcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICBsZXQgZ21haWxVc2VyPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZ21haWxVc2VyJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgIGxldCBnbWFpbFBhc3N3b3JkPSAnCiAgICAgICAgICAgICAgICAgICAgImxvY2FsU3RvcmFnZS5nZXRJdGVtKCdnbWFpbFBhc3N3b3JkJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgIGlmIChnbWFpbFVzZXIpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICBjb25zb2xlLmxvZygnbG9naW4ucGhwOicsIGdtYWlsVXNlciwgIgogICAgICAgICAgICAgICAgICAgICdnbWFpbFBhc3N3b3JkKTtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZ21haWxVc2VyJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2dtYWlsUGFzc3dvcmQnKTtcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICBsZXQgdWVsZW1lbnQgPSAnCiAgICAgICAgICAgICAgICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbmZvcm0tdXNlcm5hbWUnKTtcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICB1ZWxlbWVudC52YWx1ZT0gZ21haWxVc2VyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgIGxldCBwZWxlbWVudCA9ICcKICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luZm9ybS1wYXNzd29yZCcpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgIHBlbGVtZW50LnZhbHVlPSBnbWFpbFBhc3N3b3JkO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgIC8vLyBwZXJmb3JtIHN1Ym1pdFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgIGNvbnN0IG15Rm9ybSA9ICcKICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luLWZvcm0nKTtcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICBteUZvcm0uc3VibWl0KCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgIDwvc2NyaXB0PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PlxyXG4nLAogICAgICAgICAgICAnRmlsZU5hbWUnOiAnLi4vc3JjL3lpaTIvYWR2YW5jZWQvZnJvbnRlbmQvdmlld3Mvc2l0ZS9sb2dpbi5waHAnLAogICAgICAgICAgICAnSXNUZXh0JzogJycsCiAgICAgICAgICAgICdNeU1vZHVsZSc6ICdiX2NvZGVFZGl0b3InLAogICAgICAgICAgICAnTmVlZENvcHknOiAnJywKICAgICAgICAgICAgJ05vdGVzJzogJycsCiAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAnJywKICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdhRmlsZScsCiAgICAgICAgICAgICdhTGFiZWwnOiAnbG9naW4ucGhwJywKICAgICAgICAgICAgJ2FzdmdmaWxlJzogJycsCiAgICAgICAgICAgICd5Y29kZSc6ICcnfSwKICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6IDEsCiAgICAgICAgICAgICAgICdEYXRhJzogJzw/cGhwXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnLyoqIEB2YXIgeWlpXFx3ZWJcXFZpZXcgJHRoaXMgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcvKiogQHZhciB5aWlcXGJvb3RzdHJhcDRcXEFjdGl2ZUZvcm0gJGZvcm0gKi9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcvKiogQHZhciBcXGNvbW1vblxcbW9kZWxzXFxMb2dpbkZvcm0gJG1vZGVsICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnLyoqIFdlYkFzT25lIFVwZGF0ZSAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSB5aWlcXGJvb3RzdHJhcDRcXEFjdGl2ZUZvcm07XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcYm9vdHN0cmFwNFxcSHRtbDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIkdGhpcy0+dGl0bGUgICAgICAgICAgICAgICAgICAgPSAnTG9naW4nO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ2lmICcKICAgICAgICAgICAgICAgICAgICAgICAiKGZpbGVfZXhpc3RzKCcuLi8uLi8uLi8uLi8uLi8uLi9waHAvZ29vZ2xlL3ZlbmRvci9hdXRvbG9hZC5waHAnKSkgIgogICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAjIG9ubHkgcnVuIG9uIERvY1Jvb3QgUGFnZVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgcmVxdWlyZV9vbmNlICcKICAgICAgICAgICAgICAgICAgICAgICAiJy4uLy4uLy4uLy4uLy4uLy4uL3BocC9nb29nbGUvdmVuZG9yL2F1dG9sb2FkLnBocCc7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICByZXF1aXJlX29uY2UgJy4uLy4uLy4uLy4uLy4uLy4uL3BocC9nY29uZmlnLnBocCc7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAvLyBjcmVhdGUgQ2xpZW50IFJlcXVlc3QgdG8gYWNjZXNzIEdvb2dsZSBBUElcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQgPSBuZXcgR29vZ2xlX0NsaWVudCgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0Q2xpZW50SWQoJGNsaWVudElEKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQtPnNldENsaWVudFNlY3JldCgkY2xpZW50U2VjcmV0KTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQtPnNldFJlZGlyZWN0VXJpKCRyZWRpcmVjdFVyaSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAkY2xpZW50LT5hZGRTY29wZSgiZW1haWwiKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQtPmFkZFNjb3BlKCJwcm9maWxlIik7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAvLyBhdXRoZW50aWNhdGUgY29kZSBmcm9tIEdvb2dsZSBPQXV0aCBGbG93XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICBpZiAoIWlzc2V0KCRfR0VUWydjb2RlJ10pKSB7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgIGVjaG8gIjxkaXYgY2xhc3M9XCdjb250YWluZXJcJz4gPGRpdiAnCiAgICAgICAgICAgICAgICAgICAgICAgImNsYXNzPSdyb3cnPiA8ZGl2IGNsYXNzPSdjb2wteHMtMTInPjxhIGNsYXNzPSdidG4gIgogICAgICAgICAgICAgICAgICAgICAgICJidG4td2FybmluZyBidG4tYmxvY2snICIKICAgICAgICAgICAgICAgICAgICAgICAnaHJlZj1cJyIuJGNsaWVudC0+Y3JlYXRlQXV0aFVybCgpLiJcJz5Hb29nbGUgJwogICAgICAgICAgICAgICAgICAgICAgICdMb2dpbjwvYT48L2Rpdj48L2Rpdj48L2Rpdj4iO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICc/PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIjxkaXYgY2xhc3M9J2NvbnRhaW5lcic+IDxkaXYgY2xhc3M9J3Jvdyc+IDxkaXYgIgogICAgICAgICAgICAgICAgICAgICAgICdjbGFzcz1cJ2NvbC14cy0xMlwnPiA8aDM+IDxidXR0b24gY2xhc3M9ImJ0biAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2J0bi1wcmltYXJ5IHctMTAwIiBvbmNsaWNrPSJ1c2VyTG9naW4oKSI+IFVzZSB1c2VybmFtZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2xvZ2luLCBub3QgZW1haWwgPC9idXR0b24+IDwvaDM+IDwvZGl2PjwvZGl2PjwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImQtZmxleCB3LTEwMCBoLTEwMCIgPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgPGRpdiBpZD0idXNlcmxvZ2luIiBjbGFzcz0ibS1hdXRvIiBzdHlsZT0iZGlzcGxheTogJwogICAgICAgICAgICAgICAgICAgICAgICdub25lOyI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgIDxoMT48P3BocCBlY2hvIEh0bWw6OmVuY29kZShZaWk6OnQoJ2FwcCcsICIKICAgICAgICAgICAgICAgICAgICAgICAnJHRoaXMtPnRpdGxlKSkgPz48L2gxPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8cD48P3BocCBlY2hvIFlpaTo6dCgnYXBwJywgJ1BsZWFzZSBmaWxsIG91dCB0aGUgIgogICAgICAgICAgICAgICAgICAgICAgICJmb2xsb3dpbmcgZmllbGRzIHRvIGxvZ2luOicpID8+PC9wPlxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8P3BocCAkZm9ybSA9IEFjdGl2ZUZvcm06OmJlZ2luKFsnaWQnID0+ICIKICAgICAgICAgICAgICAgICAgICAgICAiJ2xvZ2luLWZvcm0nXSk7ID8+XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIDw/cGhwIGVjaG8gJGZvcm0tPmZpZWxkKCRtb2RlbCwgJwogICAgICAgICAgICAgICAgICAgICAgICIndXNlcm5hbWUnKS0+dGV4dElucHV0KFsnYXV0b2ZvY3VzJyA9PiB0cnVlXSkgPz5cclxuIgogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgPD9waHAgZWNobyAkZm9ybS0+ZmllbGQoJG1vZGVsLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIidwYXNzd29yZCcpLT5wYXNzd29yZElucHV0KCkgPz5cclxuIgogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgPD9waHAgZWNobyAkZm9ybS0+ZmllbGQoJG1vZGVsLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIidyZW1lbWJlck1lJyktPmNoZWNrYm94KCkgPz5cclxuIgogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgPGRpdiBzdHlsZT0iY29sb3I6Izk5OTttYXJnaW46MWVtIDAiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIDw/cGhwIGVjaG8gWUlJOjp0KCdhcHAnLCAnSWYgeW91IGZvcmdvdCB5b3VyICIKICAgICAgICAgICAgICAgICAgICAgICAicGFzc3dvcmQgeW91IGNhbicpID8+XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgPD9waHAgZWNobyBIdG1sOjphKFlpaTo6dCgnYXBwJywgJ3Jlc2V0IGl0JyksICIKICAgICAgICAgICAgICAgICAgICAgICAiWydzaXRlL3JlcXVlc3QtcGFzc3dvcmQtcmVzZXQnXSkgPz4uXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgPGJyPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIDw/cGhwIGVjaG8gWUlJOjp0KCdhcHAnLCAnTmVlZCBuZXcgdmVyaWZpY2F0aW9uICIKICAgICAgICAgICAgICAgICAgICAgICAiZW1haWw/Jyk/Pjw/cGhwIGVjaG8gSHRtbDo6YShZSUk6OnQoJ2FwcCcsICdSZXNlbmQnKSwgIgogICAgICAgICAgICAgICAgICAgICAgICJbJ3NpdGUvcmVzZW5kLXZlcmlmaWNhdGlvbi1lbWFpbCddKSA/PlxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgPD9waHAgZWNobyBIdG1sOjpzdWJtaXRCdXR0b24oWUlJOjp0KCdhcHAnLCAiCiAgICAgICAgICAgICAgICAgICAgICAgIidMb2dpbicpLCBbJ2NsYXNzJyA9PiAnYnRuIGJ0bi1wcmltYXJ5JywgJ25hbWUnID0+ICIKICAgICAgICAgICAgICAgICAgICAgICAiJ2xvZ2luLWJ1dHRvbiddKSA/PlxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgPD9waHAgQWN0aXZlRm9ybTo6ZW5kKCk7ID8+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIDxzY3JpcHQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIGZ1bmN0aW9uIHVzZXJMb2dpbigpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAkKCcjdXNlcmxvZ2luJykudG9nZ2xlKCdzbG93JylcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICBsZXQgZ21haWxVc2VyPSAnCiAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsU3RvcmFnZS5nZXRJdGVtKCdnbWFpbFVzZXInKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgbGV0IGdtYWlsUGFzc3dvcmQ9ICcKICAgICAgICAgICAgICAgICAgICAgICAibG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2dtYWlsUGFzc3dvcmQnKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgaWYgKGdtYWlsVXNlcikge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIGNvbnNvbGUubG9nKCdsb2dpbi5waHA6JywgZ21haWxVc2VyLCAiCiAgICAgICAgICAgICAgICAgICAgICAgJ2dtYWlsUGFzc3dvcmQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdnbWFpbFVzZXInKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZ21haWxQYXNzd29yZCcpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIGxldCB1ZWxlbWVudCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luZm9ybS11c2VybmFtZScpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIHVlbGVtZW50LnZhbHVlPSBnbWFpbFVzZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgbGV0IHBlbGVtZW50ID0gJwogICAgICAgICAgICAgICAgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9naW5mb3JtLXBhc3N3b3JkJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgcGVsZW1lbnQudmFsdWU9IGdtYWlsUGFzc3dvcmQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgLy8vIHBlcmZvcm0gc3VibWl0XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgY29uc3QgbXlGb3JtID0gJwogICAgICAgICAgICAgICAgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9naW4tZm9ybScpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIG15Rm9ybS5zdWJtaXQoKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgPC9zY3JpcHQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+XHJcbicsCiAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICcuLi9zcmMveWlpMi9hZHZhbmNlZC9mcm9udGVuZC92aWV3cy9zaXRlL2xvZ2luLnBocCcsCiAgICAgICAgICAgICAgICdJc1RleHQnOiAnJywKICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICAgICdOZWVkQ29weSc6ICcnLAogICAgICAgICAgICAgICAnTm90ZXMnOiAnJywKICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6ICcnLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgICAgJ2FMYWJlbCc6ICdsb2dpbi5waHAnLAogICAgICAgICAgICAgICAnYXN2Z2ZpbGUnOiAnJywKICAgICAgICAgICAgICAgJ3ljb2RlJzogJyd9fSwKIDY6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6IDEsCiAgICAgICAgICAgICdEYXRhJzogJzw/cGhwIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJy8qXHJcbicKICAgICAgICAgICAgICAgICAgICAnICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIDJhbWlnb3MveWlpMi11c3VhcmlvICcKICAgICAgICAgICAgICAgICAgICAncHJvamVjdC5cclxuJwogICAgICAgICAgICAgICAgICAgICcgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqIChjKSAyYW1pZ09TISA8aHR0cDovLzJhbWlnb3MudXMvPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqXHJcbicKICAgICAgICAgICAgICAgICAgICAnICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlICcKICAgICAgICAgICAgICAgICAgICAndmlld1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSAnCiAgICAgICAgICAgICAgICAgICAgJ2NvZGUuXHJcbicKICAgICAgICAgICAgICAgICAgICAnICovXHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnbmFtZXNwYWNlIERhXFxVc2VyXFxDb21tYW5kO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcRmFjdG9yeVxcTWFpbEZhY3Rvcnk7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxNb2RlbFxcVXNlcjtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXFNlcnZpY2VcXFVzZXJDcmVhdGVTZXJ2aWNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcVHJhaXRzXFxDb250YWluZXJBd2FyZVRyYWl0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBZaWk7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcY29uc29sZVxcQ29udHJvbGxlcjtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFxoZWxwZXJzXFxDb25zb2xlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ2NsYXNzIENyZWF0ZUNvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyXHJcbicKICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICB1c2UgQ29udGFpbmVyQXdhcmVUcmFpdDtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgLyoqXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgbmV3IHVzZXIgYWNjb3VudC4gSWYgbm8gJwogICAgICAgICAgICAgICAgICAgICdwYXNzd29yZCBpcyBub3Qgc2V0LCBhbiA4LWNoYXIgcGFzc3dvcmQgd2lsbCBiZSAnCiAgICAgICAgICAgICAgICAgICAgJ2dlbmVyYXRlZC4gQWZ0ZXJcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICogc2F2aW5nIHVzZXIgdG8gZGF0YWJhc2UsIHRoaXMgY29tbWFuZCB1c2VzIG1haWxlciAnCiAgICAgICAgICAgICAgICAgICAgJ2NvbXBvbmVudCB0byBzZW5kIGNyZWRlbnRpYWxzICh1c2VybmFtZSBhbmQgcGFzc3dvcmQpIHRvICcKICAgICAgICAgICAgICAgICAgICAndXNlclxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgKiB2aWEgZW1haWwuIEEgcm9sZSBjYW4gYmUgYWxzbyBhc3NpZ25lZCBidXQgaXQgbXVzdCAnCiAgICAgICAgICAgICAgICAgICAgJ2V4aXN0cyBwcmV2aW91c2x5IG9uIHRoZSBkYXRhYmFzZS5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICpcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICogQHBhcmFtIHN0cmluZyAgICAgICRlbWFpbCAgICBFbWFpbFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHVzZXJuYW1lIFVzZXJuYW1lXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAkdXJsIHdlYnNpdGUgdXJsXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGFzc3dvcmQgVGhlIHBhc3N3b3JkLiBJZiBudWxsICcKICAgICAgICAgICAgICAgICAgICAnaXQgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJvbGUgICAgIFJvbGUgdG8gYXNzaWduIChtdXN0ICcKICAgICAgICAgICAgICAgICAgICAnYWxyZWFkeSBleGlzdClcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICpcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICogQHRocm93cyBcXHlpaVxcYmFzZVxcSW52YWxpZENvbmZpZ0V4Y2VwdGlvblxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgcHVibGljIGZ1bmN0aW9uIGFjdGlvbkluZGV4KCRlbWFpbCwgJHVzZXJuYW1lLCAkdXJsLCAnCiAgICAgICAgICAgICAgICAgICAgJyRwYXNzd29yZCA9IG51bGwsICRyb2xlID0gbnVsbClcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgLyoqIEB2YXIgVXNlciAkdXNlciAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHVzZXIgPSAkdGhpcy0+bWFrZShcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBVc2VyOjpjbGFzcyxcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBbXSxcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBbJ3NjZW5hcmlvJyA9PiAnY3JlYXRlJywgJ2VtYWlsJyA9PiAkZW1haWwsICIKICAgICAgICAgICAgICAgICAgICAiJ3VzZXJuYW1lJyA9PiAkdXNlcm5hbWUsICdwYXNzd29yZCcgPT4gJHBhc3N3b3JkXVxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgKTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcdCNwcmludF9yKCR1c2VyLT51c2VybmFtZSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHQjcmV0dXJuO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJG1haWxTZXJ2aWNlID0gJwogICAgICAgICAgICAgICAgICAgICdNYWlsRmFjdG9yeTo6bWFrZVdlbGNvbWVNYWlsZXJTZXJ2aWNlKCR1c2VyLCB0cnVlLCAnCiAgICAgICAgICAgICAgICAgICAgIihvYmplY3QpWyd1cmwnID0+ICR1cmxdKTtcclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIGlmICgkdGhpcy0+bWFrZShVc2VyQ3JlYXRlU2VydmljZTo6Y2xhc3MsIFskdXNlciwgJwogICAgICAgICAgICAgICAgICAgICckbWFpbFNlcnZpY2VdKS0+cnVuKCkpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAkdGhpcy0+c3Rkb3V0KFlpaTo6dCgndXN1YXJpbycsICdVc2VyIGhhcyAiCiAgICAgICAgICAgICAgICAgICAgJ2JlZW4gY3JlYXRlZFwnKSAuICIhXFxuIiwgQ29uc29sZTo6RkdfR1JFRU4pO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGlmIChudWxsICE9PSAkcm9sZSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAkdGhpcy0+YXNzaWduUm9sZSgkdXNlciwgJHJvbGUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIH0gZWxzZSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgJHRoaXMtPnN0ZG91dChZaWk6OnQoJ3VzdWFyaW8nLCAnUGxlYXNlIGZpeCAiCiAgICAgICAgICAgICAgICAgICAgJ2ZvbGxvd2luZyBlcnJvcnM6XCcpIC4gIlxcbiIsIENvbnNvbGU6OkZHX1JFRCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgZm9yZWFjaCAoJHVzZXItPmVycm9ycyBhcyAkZXJyb3JzKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlcnJvcnMgYXMgJGVycm9yKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c3Rkb3V0KCcgLSAnIC4gJGVycm9yIC4gIgogICAgICAgICAgICAgICAgICAgICciXFxuIiwgQ29uc29sZTo6RkdfUkVEKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYXNzaWduUm9sZShVc2VyICR1c2VyLCAkcm9sZSlcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGF1dGggPSBZaWk6OiRhcHAtPmdldEF1dGhNYW5hZ2VyKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICBpZiAoZmFsc2UgPT09ICRhdXRoKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJHRoaXMtPnN0ZG91dChcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgWWlpOjp0KFxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgJ3VzdWFyaW8nLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgXCdDYW5ub3QgYXNzaWduIHJvbGUgInswfSIgYXMgdGhlICcKICAgICAgICAgICAgICAgICAgICAnQXV0aE1hbmFnZXIgaXMgbm90IGNvbmZpZ3VyZWQgb24geW91ciBjb25zb2xlICcKICAgICAgICAgICAgICAgICAgICAiYXBwbGljYXRpb24uJyxcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICRyb2xlXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICkgLiAiXFxuIixcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgQ29uc29sZTo6RkdfUkVEXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIH0gZWxzZSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJHVzZXJSb2xlID0gJGF1dGgtPmdldFJvbGUoJHJvbGUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGlmIChudWxsID09PSAkdXNlclJvbGUpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgJHRoaXMtPnN0ZG91dChZaWk6OnQoJ3VzdWFyaW8nLCAnUm9sZSAiCiAgICAgICAgICAgICAgICAgICAgJyJ7MH0iIG5vdCBmb3VuZC4gQ3JlYXRpbmcgaXQuXCcsIFskcm9sZV0pIC4gIiFcXG4iLCAnCiAgICAgICAgICAgICAgICAgICAgJ0NvbnNvbGU6OkZHX0dSRUVOKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgJHVzZXJSb2xlID0gJGF1dGgtPmNyZWF0ZVJvbGUoJHJvbGUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAkYXV0aC0+YWRkKCR1c2VyUm9sZSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICRhdXRoLT5hc3NpZ24oJHVzZXJSb2xlLCAkdXNlci0+aWQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnfVxyXG4nLAogICAgICAgICAgICAnRmlsZU5hbWUnOiAnLi4vc3JjL3lpaTIvYWR2YW5jZWQvdmVuZG9yLzJhbWlnb3MveWlpMi11c3VhcmlvL3NyYy9Vc2VyL0NvbW1hbmQvQ3JlYXRlQ29udHJvbGxlci5waHAnLAogICAgICAgICAgICAnSXNUZXh0JzogJycsCiAgICAgICAgICAgICdNeU1vZHVsZSc6ICdiX2NvZGVFZGl0b3InLAogICAgICAgICAgICAnTmVlZENvcHknOiAnJywKICAgICAgICAgICAgJ05vdGVzJzogJycsCiAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgJ2FMYWJlbCc6ICd5aWkyIGNvbnNvbGUgY29tbWFuZCB1c3IvY3JlYXRlJywKICAgICAgICAgICAgJ2FzdmdmaWxlJzogJycsCiAgICAgICAgICAgICd5Y29kZSc6ICcnfSwKICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6IDEsCiAgICAgICAgICAgICAgICdEYXRhJzogJzw/cGhwIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJy8qXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIDJhbWlnb3MveWlpMi11c3VhcmlvICcKICAgICAgICAgICAgICAgICAgICAgICAncHJvamVjdC5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqIChjKSAyYW1pZ09TISA8aHR0cDovLzJhbWlnb3MudXMvPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgJwogICAgICAgICAgICAgICAgICAgICAgICdwbGVhc2Ugdmlld1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzICcKICAgICAgICAgICAgICAgICAgICAgICAnc291cmNlIGNvZGUuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnbmFtZXNwYWNlIERhXFxVc2VyXFxDb21tYW5kO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcRmFjdG9yeVxcTWFpbEZhY3Rvcnk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxNb2RlbFxcVXNlcjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXFNlcnZpY2VcXFVzZXJDcmVhdGVTZXJ2aWNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcVHJhaXRzXFxDb250YWluZXJBd2FyZVRyYWl0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBZaWk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcY29uc29sZVxcQ29udHJvbGxlcjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFxoZWxwZXJzXFxDb25zb2xlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzIENyZWF0ZUNvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB1c2UgQ29udGFpbmVyQXdhcmVUcmFpdDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgLyoqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAqIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgbmV3IHVzZXIgYWNjb3VudC4gSWYgbm8gJwogICAgICAgICAgICAgICAgICAgICAgICdwYXNzd29yZCBpcyBub3Qgc2V0LCBhbiA4LWNoYXIgcGFzc3dvcmQgd2lsbCBiZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2dlbmVyYXRlZC4gQWZ0ZXJcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICogc2F2aW5nIHVzZXIgdG8gZGF0YWJhc2UsIHRoaXMgY29tbWFuZCB1c2VzICcKICAgICAgICAgICAgICAgICAgICAgICAnbWFpbGVyIGNvbXBvbmVudCB0byBzZW5kIGNyZWRlbnRpYWxzICh1c2VybmFtZSBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICdwYXNzd29yZCkgdG8gdXNlclxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiB2aWEgZW1haWwuIEEgcm9sZSBjYW4gYmUgYWxzbyBhc3NpZ25lZCBidXQgaXQgJwogICAgICAgICAgICAgICAgICAgICAgICdtdXN0IGV4aXN0cyBwcmV2aW91c2x5IG9uIHRoZSBkYXRhYmFzZS5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICpcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICogQHBhcmFtIHN0cmluZyAgICAgICRlbWFpbCAgICBFbWFpbFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHVzZXJuYW1lIFVzZXJuYW1lXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAkdXJsIHdlYnNpdGUgdXJsXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGFzc3dvcmQgVGhlIHBhc3N3b3JkLiBJZiAnCiAgICAgICAgICAgICAgICAgICAgICAgJ251bGwgaXQgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJvbGUgICAgIFJvbGUgdG8gYXNzaWduICcKICAgICAgICAgICAgICAgICAgICAgICAnKG11c3QgYWxyZWFkeSBleGlzdClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICpcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICogQHRocm93cyBcXHlpaVxcYmFzZVxcSW52YWxpZENvbmZpZ0V4Y2VwdGlvblxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgcHVibGljIGZ1bmN0aW9uIGFjdGlvbkluZGV4KCRlbWFpbCwgJHVzZXJuYW1lLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJyR1cmwsICRwYXNzd29yZCA9IG51bGwsICRyb2xlID0gbnVsbClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgLyoqIEB2YXIgVXNlciAkdXNlciAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHVzZXIgPSAkdGhpcy0+bWFrZShcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBVc2VyOjpjbGFzcyxcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBbXSxcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBbJ3NjZW5hcmlvJyA9PiAnY3JlYXRlJywgJ2VtYWlsJyA9PiAiCiAgICAgICAgICAgICAgICAgICAgICAgIiRlbWFpbCwgJ3VzZXJuYW1lJyA9PiAkdXNlcm5hbWUsICdwYXNzd29yZCcgPT4gIgogICAgICAgICAgICAgICAgICAgICAgICckcGFzc3dvcmRdXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICApO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1x0I3ByaW50X3IoJHVzZXItPnVzZXJuYW1lKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcdCNyZXR1cm47XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkbWFpbFNlcnZpY2UgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ01haWxGYWN0b3J5OjptYWtlV2VsY29tZU1haWxlclNlcnZpY2UoJHVzZXIsIHRydWUsICcKICAgICAgICAgICAgICAgICAgICAgICAiKG9iamVjdClbJ3VybCcgPT4gJHVybF0pO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgaWYgKCR0aGlzLT5tYWtlKFVzZXJDcmVhdGVTZXJ2aWNlOjpjbGFzcywgJwogICAgICAgICAgICAgICAgICAgICAgICdbJHVzZXIsICRtYWlsU2VydmljZV0pLT5ydW4oKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICR0aGlzLT5zdGRvdXQoWWlpOjp0KCd1c3VhcmlvJywgJ1VzZXIgaGFzICIKICAgICAgICAgICAgICAgICAgICAgICAnYmVlbiBjcmVhdGVkXCcpIC4gIiFcXG4iLCBDb25zb2xlOjpGR19HUkVFTik7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgaWYgKG51bGwgIT09ICRyb2xlKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICR0aGlzLT5hc3NpZ25Sb2xlKCR1c2VyLCAkcm9sZSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfSBlbHNlIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAkdGhpcy0+c3Rkb3V0KFlpaTo6dCgndXN1YXJpbycsICdQbGVhc2UgIgogICAgICAgICAgICAgICAgICAgICAgICdmaXggZm9sbG93aW5nIGVycm9yczpcJykgLiAiXFxuIiwgQ29uc29sZTo6RkdfUkVEKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBmb3JlYWNoICgkdXNlci0+ZXJyb3JzIGFzICRlcnJvcnMpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGVycm9ycyBhcyAkZXJyb3IpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zdGRvdXQoJyAtICcgLiAkZXJyb3IgLiAiCiAgICAgICAgICAgICAgICAgICAgICAgJyJcXG4iLCBDb25zb2xlOjpGR19SRUQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhc3NpZ25Sb2xlKFVzZXIgJHVzZXIsICcKICAgICAgICAgICAgICAgICAgICAgICAnJHJvbGUpXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICRhdXRoID0gWWlpOjokYXBwLT5nZXRBdXRoTWFuYWdlcigpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgaWYgKGZhbHNlID09PSAkYXV0aCkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICR0aGlzLT5zdGRvdXQoXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIFlpaTo6dChcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICd1c3VhcmlvJyxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIFwnQ2Fubm90IGFzc2lnbiByb2xlICJ7MH0iIGFzIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhNYW5hZ2VyIGlzIG5vdCBjb25maWd1cmVkIG9uIHlvdXIgY29uc29sZSAnCiAgICAgICAgICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uLicsXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAkcm9sZVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICApIC4gIlxcbiIsXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIENvbnNvbGU6OkZHX1JFRFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9IGVsc2Uge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICR1c2VyUm9sZSA9ICRhdXRoLT5nZXRSb2xlKCRyb2xlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBpZiAobnVsbCA9PT0gJHVzZXJSb2xlKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICR0aGlzLT5zdGRvdXQoWWlpOjp0KCd1c3VhcmlvJywgJ1JvbGUgIgogICAgICAgICAgICAgICAgICAgICAgICciezB9IiBub3QgZm91bmQuIENyZWF0aW5nIGl0LlwnLCBbJHJvbGVdKSAuICIhXFxuIiwgJwogICAgICAgICAgICAgICAgICAgICAgICdDb25zb2xlOjpGR19HUkVFTik7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICR1c2VyUm9sZSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAnJGF1dGgtPmNyZWF0ZVJvbGUoJHJvbGUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAkYXV0aC0+YWRkKCR1c2VyUm9sZSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICRhdXRoLT5hc3NpZ24oJHVzZXJSb2xlLCAkdXNlci0+aWQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nLAogICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnLi4vc3JjL3lpaTIvYWR2YW5jZWQvdmVuZG9yLzJhbWlnb3MveWlpMi11c3VhcmlvL3NyYy9Vc2VyL0NvbW1hbmQvQ3JlYXRlQ29udHJvbGxlci5waHAnLAogICAgICAgICAgICAgICAnSXNUZXh0JzogJycsCiAgICAgICAgICAgICAgICdNeU1vZHVsZSc6ICdiX2NvZGVFZGl0b3InLAogICAgICAgICAgICAgICAnTmVlZENvcHknOiAnJywKICAgICAgICAgICAgICAgJ05vdGVzJzogJycsCiAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgICAgJ2FMYWJlbCc6ICd5aWkyIGNvbnNvbGUgY29tbWFuZCB1c3IvY3JlYXRlJywKICAgICAgICAgICAgICAgJ2FzdmdmaWxlJzogJycsCiAgICAgICAgICAgICAgICd5Y29kZSc6ICcnfX0sCiA3OiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgJ0NvcHlUb015UGFnZU9ubHknOiAnJywKICAgICAgICAgICAgJ0RhdGEnOiAnPD9waHBcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcvKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSAyYW1pZ29zL3lpaTItdXN1YXJpbyAnCiAgICAgICAgICAgICAgICAgICAgJ3Byb2plY3QuXHJcbicKICAgICAgICAgICAgICAgICAgICAnICpcclxuJwogICAgICAgICAgICAgICAgICAgICcgKiAoYykgMmFtaWdPUyEgPGh0dHA6Ly8yYW1pZ29zLnVzLz5cclxuJwogICAgICAgICAgICAgICAgICAgICcgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSAnCiAgICAgICAgICAgICAgICAgICAgJ3ZpZXdcclxuJwogICAgICAgICAgICAgICAgICAgICcgKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgJwogICAgICAgICAgICAgICAgICAgICdjb2RlLlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ25hbWVzcGFjZSBEYVxcVXNlclxcU2VydmljZTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXENvbnRyYWN0c1xcU2VydmljZUludGVyZmFjZTtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXEV2ZW50XFxVc2VyRXZlbnQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxIZWxwZXJcXFNlY3VyaXR5SGVscGVyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcTW9kZWxcXFVzZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxUcmFpdHNcXE1haWxBd2FyZVRyYWl0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcVHJhaXRzXFxNb2R1bGVBd2FyZVRyYWl0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBFeGNlcHRpb247XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIFlpaTtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFxiYXNlXFxJbnZhbGlkQ2FsbEV4Y2VwdGlvbjtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICdjbGFzcyBVc2VyQ3JlYXRlU2VydmljZSBpbXBsZW1lbnRzIFNlcnZpY2VJbnRlcmZhY2VcclxuJwogICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHVzZSBNYWlsQXdhcmVUcmFpdDtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgdXNlIE1vZHVsZUF3YXJlVHJhaXQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCAkbW9kZWw7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCAkc2VjdXJpdHlIZWxwZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCAkbWFpbFNlcnZpY2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChVc2VyICRtb2RlbCwgTWFpbFNlcnZpY2UgJwogICAgICAgICAgICAgICAgICAgICckbWFpbFNlcnZpY2UsIFNlY3VyaXR5SGVscGVyICRzZWN1cml0eUhlbHBlcilcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHRoaXMtPm1vZGVsID0gJG1vZGVsO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHRoaXMtPm1haWxTZXJ2aWNlID0gJG1haWxTZXJ2aWNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHRoaXMtPnNlY3VyaXR5SGVscGVyID0gJHNlY3VyaXR5SGVscGVyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIC8qKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAdGhyb3dzIEludmFsaWRDYWxsRXhjZXB0aW9uXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqIEB0aHJvd3MgXFx5aWlcXGRiXFxFeGNlcHRpb25cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICogQHJldHVybiBib29sXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBwdWJsaWMgZnVuY3Rpb24gcnVuKClcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJG1vZGVsID0gJHRoaXMtPm1vZGVsO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgaWYgKCRtb2RlbC0+Z2V0SXNOZXdSZWNvcmQoKSA9PT0gZmFsc2UpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENhbGxFeGNlcHRpb24oJ0Nhbm5vdCBjcmVhdGUgIgogICAgICAgICAgICAgICAgICAgICJhIG5ldyB1c2VyIGZyb20gYW4gZXhpc3Rpbmcgb25lLicpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHRyYW5zYWN0aW9uID0gJwogICAgICAgICAgICAgICAgICAgICckbW9kZWw6OmdldERiKCktPmJlZ2luVHJhbnNhY3Rpb24oKTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIHRyeSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJG1vZGVsLT5jb25maXJtZWRfYXQgPSB0aW1lKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJG1vZGVsLT5wYXNzd29yZCA9ICcKICAgICAgICAgICAgICAgICAgICAnIWVtcHR5KCRtb2RlbC0+cGFzc3dvcmQpXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgID8gJG1vZGVsLT5wYXNzd29yZFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICA6ICcKICAgICAgICAgICAgICAgICAgICAnJHRoaXMtPnNlY3VyaXR5SGVscGVyLT5nZW5lcmF0ZVBhc3N3b3JkKDgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIC8qKiBAdmFyIFVzZXJFdmVudCAkZXZlbnQgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAkZXZlbnQgPSAkdGhpcy0+bWFrZShVc2VyRXZlbnQ6OmNsYXNzLCAnCiAgICAgICAgICAgICAgICAgICAgJ1skbW9kZWxdKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgJyRtb2RlbC0+dHJpZ2dlcihVc2VyRXZlbnQ6OkVWRU5UX0JFRk9SRV9DUkVBVEUsICcKICAgICAgICAgICAgICAgICAgICAnJGV2ZW50KTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBpZiAoISRtb2RlbC0+c2F2ZSgpKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICR0cmFuc2FjdGlvbi0+cm9sbEJhY2soKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgJyRtb2RlbC0+dHJpZ2dlcihVc2VyRXZlbnQ6OkVWRU5UX0FGVEVSX0NSRUFURSwgJwogICAgICAgICAgICAgICAgICAgICckZXZlbnQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGlmICghJHRoaXMtPnNlbmRNYWlsKCRtb2RlbCkpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgJGVycm9yX21zZyA9IFlpaTo6dChcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICd1c3VhcmlvJyxcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICdFcnJvciBzZW5kaW5nIHdlbGNvbWUgbWVzc2FnZSB0byAiCiAgICAgICAgICAgICAgICAgICAgJyJ7ZW1haWx9Ii4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5cJyxcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgIFsnZW1haWwnID0+ICRtb2RlbC0+ZW1haWxdXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIC8vIGZyb20gd2ViIGRpc3BsYXkgYSBmbGFzaCBtZXNzYWdlIChpZiAnCiAgICAgICAgICAgICAgICAgICAgJ2VuYWJsZWQpXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIGlmICcKICAgICAgICAgICAgICAgICAgICAnKCR0aGlzLT5nZXRNb2R1bGUoKS0+ZW5hYmxlRmxhc2hNZXNzYWdlcyA9PT0gdHJ1ZSAmJiAnCiAgICAgICAgICAgICAgICAgICAgJ2lzX2EoWWlpOjokYXBwLCB5aWlcXHdlYlxcQXBwbGljYXRpb246OmNsYXNzKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgWWlpOjokYXBwLT5zZXNzaW9uLT5zZXRGbGFzaChcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAnd2FybmluZycsXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yX21zZ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBmcm9tIGNvbnNvbGUgYWRkIGFuIGVycm9yIHRvICIKICAgICAgICAgICAgICAgICAgICAndGhlIG1vZGVsIGluIG9yZGVyIHRvIHJldHVybiBhbiBlcnJvciBtZXNzYWdlXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIGlmIChpc19hKFlpaTo6JGFwcCwgJwogICAgICAgICAgICAgICAgICAgICd5aWlcXGNvbnNvbGVcXEFwcGxpY2F0aW9uOjpjbGFzcykpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICRtb2RlbC0+YWRkRXJyb3IoJ3VzZXJuYW1lJywgIgogICAgICAgICAgICAgICAgICAgICckZXJyb3JfbXNnKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgLy8gV29uJ3Qgc3RvcCBpZiBlbWFpbCBtYWlsIGZhaWxlZC5cclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgLy8kdHJhbnNhY3Rpb24tPnJvbGxCYWNrKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIC8vcmV0dXJuIGZhbHNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAkdHJhbnNhY3Rpb24tPmNvbW1pdCgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJHRyYW5zYWN0aW9uLT5yb2xsQmFjaygpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIFlpaTo6ZXJyb3IoJGUtPmdldE1lc3NhZ2UoKSwgJ3VzdWFyaW8nKTtcclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICd9XHJcbicsCiAgICAgICAgICAgICdGaWxlTmFtZSc6ICcuLi9zcmMveWlpMi9hZHZhbmNlZC92ZW5kb3IvMmFtaWdvcy95aWkyLXVzdWFyaW8vc3JjL1VzZXIvU2VydmljZS9Vc2VyQ3JlYXRlU2VydmljZS5waHAnLAogICAgICAgICAgICAnSXNUZXh0JzogJycsCiAgICAgICAgICAgICdNeU1vZHVsZSc6ICdiX2NvZGVFZGl0b3InLAogICAgICAgICAgICAnTmVlZENvcHknOiAnJywKICAgICAgICAgICAgJ05vdGVzJzogJycsCiAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAnJywKICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdhRmlsZScsCiAgICAgICAgICAgICdhTGFiZWwnOiAnVXNlckNyZWF0ZVNlcnZpY2UucGhwIHVwZGF0ZScsCiAgICAgICAgICAgICdhc3ZnZmlsZSc6ICcnLAogICAgICAgICAgICAneWNvZGUnOiAnJ30sCiAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgJ0NvcHlUb015UGFnZU9ubHknOiAnJywKICAgICAgICAgICAgICAgJ0RhdGEnOiAnPD9waHBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcvKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSAyYW1pZ29zL3lpaTItdXN1YXJpbyAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3Byb2plY3QuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICpcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgKiAoYykgMmFtaWdPUyEgPGh0dHA6Ly8yYW1pZ29zLnVzLz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sICcKICAgICAgICAgICAgICAgICAgICAgICAncGxlYXNlIHZpZXdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZSBjb2RlLlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ25hbWVzcGFjZSBEYVxcVXNlclxcU2VydmljZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXENvbnRyYWN0c1xcU2VydmljZUludGVyZmFjZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXEV2ZW50XFxVc2VyRXZlbnQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxIZWxwZXJcXFNlY3VyaXR5SGVscGVyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcTW9kZWxcXFVzZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxUcmFpdHNcXE1haWxBd2FyZVRyYWl0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcVHJhaXRzXFxNb2R1bGVBd2FyZVRyYWl0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBFeGNlcHRpb247XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIFlpaTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFxiYXNlXFxJbnZhbGlkQ2FsbEV4Y2VwdGlvbjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdjbGFzcyBVc2VyQ3JlYXRlU2VydmljZSBpbXBsZW1lbnRzIFNlcnZpY2VJbnRlcmZhY2VcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHVzZSBNYWlsQXdhcmVUcmFpdDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgdXNlIE1vZHVsZUF3YXJlVHJhaXQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCAkbW9kZWw7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCAkc2VjdXJpdHlIZWxwZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCAkbWFpbFNlcnZpY2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChVc2VyICRtb2RlbCwgJwogICAgICAgICAgICAgICAgICAgICAgICdNYWlsU2VydmljZSAkbWFpbFNlcnZpY2UsIFNlY3VyaXR5SGVscGVyICcKICAgICAgICAgICAgICAgICAgICAgICAnJHNlY3VyaXR5SGVscGVyKVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkdGhpcy0+bW9kZWwgPSAkbW9kZWw7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkdGhpcy0+bWFpbFNlcnZpY2UgPSAkbWFpbFNlcnZpY2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkdGhpcy0+c2VjdXJpdHlIZWxwZXIgPSAkc2VjdXJpdHlIZWxwZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgLyoqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAqIEB0aHJvd3MgSW52YWxpZENhbGxFeGNlcHRpb25cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICogQHRocm93cyBcXHlpaVxcZGJcXEV4Y2VwdGlvblxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAcmV0dXJuIGJvb2xcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICpcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHB1YmxpYyBmdW5jdGlvbiBydW4oKVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkbW9kZWwgPSAkdGhpcy0+bW9kZWw7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICBpZiAoJG1vZGVsLT5nZXRJc05ld1JlY29yZCgpID09PSBmYWxzZSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2FsbEV4Y2VwdGlvbignQ2Fubm90ICIKICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRlIGEgbmV3IHVzZXIgZnJvbSBhbiBleGlzdGluZyBvbmUuJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkdHJhbnNhY3Rpb24gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRtb2RlbDo6Z2V0RGIoKS0+YmVnaW5UcmFuc2FjdGlvbigpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgdHJ5IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAkbW9kZWwtPmNvbmZpcm1lZF9hdCA9IHRpbWUoKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAkbW9kZWwtPnBhc3N3b3JkID0gJwogICAgICAgICAgICAgICAgICAgICAgICchZW1wdHkoJG1vZGVsLT5wYXNzd29yZClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgPyAkbW9kZWwtPnBhc3N3b3JkXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIDogJwogICAgICAgICAgICAgICAgICAgICAgICckdGhpcy0+c2VjdXJpdHlIZWxwZXItPmdlbmVyYXRlUGFzc3dvcmQoOCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgLyoqIEB2YXIgVXNlckV2ZW50ICRldmVudCAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICRldmVudCA9ICR0aGlzLT5tYWtlKFVzZXJFdmVudDo6Y2xhc3MsICcKICAgICAgICAgICAgICAgICAgICAgICAnWyRtb2RlbF0pO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAnJG1vZGVsLT50cmlnZ2VyKFVzZXJFdmVudDo6RVZFTlRfQkVGT1JFX0NSRUFURSwgJwogICAgICAgICAgICAgICAgICAgICAgICckZXZlbnQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGlmICghJG1vZGVsLT5zYXZlKCkpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgJHRyYW5zYWN0aW9uLT5yb2xsQmFjaygpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAnJG1vZGVsLT50cmlnZ2VyKFVzZXJFdmVudDo6RVZFTlRfQUZURVJfQ1JFQVRFLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRldmVudCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgaWYgKCEkdGhpcy0+c2VuZE1haWwoJG1vZGVsKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAkZXJyb3JfbXNnID0gWWlpOjp0KFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgJ3VzdWFyaW8nLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgJ0Vycm9yIHNlbmRpbmcgd2VsY29tZSBtZXNzYWdlIHRvICIKICAgICAgICAgICAgICAgICAgICAgICAnIntlbWFpbH0iLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlwnLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgWydlbWFpbCcgPT4gJG1vZGVsLT5lbWFpbF1cclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgLy8gZnJvbSB3ZWIgZGlzcGxheSBhIGZsYXNoIG1lc3NhZ2UgJwogICAgICAgICAgICAgICAgICAgICAgICcoaWYgZW5hYmxlZClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICcoJHRoaXMtPmdldE1vZHVsZSgpLT5lbmFibGVGbGFzaE1lc3NhZ2VzID09PSB0cnVlICYmICcKICAgICAgICAgICAgICAgICAgICAgICAnaXNfYShZaWk6OiRhcHAsIHlpaVxcd2ViXFxBcHBsaWNhdGlvbjo6Y2xhc3MpKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICBZaWk6OiRhcHAtPnNlc3Npb24tPnNldEZsYXNoKFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICd3YXJuaW5nJyxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JfbXNnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICApO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGZyb20gY29uc29sZSBhZGQgYW4gZXJyb3IgIgogICAgICAgICAgICAgICAgICAgICAgICd0byB0aGUgbW9kZWwgaW4gb3JkZXIgdG8gcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2VcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgaWYgKGlzX2EoWWlpOjokYXBwLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3lpaVxcY29uc29sZVxcQXBwbGljYXRpb246OmNsYXNzKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgJG1vZGVsLT5hZGRFcnJvcigndXNlcm5hbWUnLCAiCiAgICAgICAgICAgICAgICAgICAgICAgJyRlcnJvcl9tc2cpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAvLyBXb24ndCBzdG9wIGlmIGVtYWlsIG1haWwgZmFpbGVkLlxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAvLyR0cmFuc2FjdGlvbi0+cm9sbEJhY2soKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICR0cmFuc2FjdGlvbi0+Y29tbWl0KCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAkdHJhbnNhY3Rpb24tPnJvbGxCYWNrKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgWWlpOjplcnJvcigkZS0+Z2V0TWVzc2FnZSgpLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIid1c3VhcmlvJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nLAogICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnLi4vc3JjL3lpaTIvYWR2YW5jZWQvdmVuZG9yLzJhbWlnb3MveWlpMi11c3VhcmlvL3NyYy9Vc2VyL1NlcnZpY2UvVXNlckNyZWF0ZVNlcnZpY2UucGhwJywKICAgICAgICAgICAgICAgJ0lzVGV4dCc6ICcnLAogICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnYl9jb2RlRWRpdG9yJywKICAgICAgICAgICAgICAgJ05lZWRDb3B5JzogJycsCiAgICAgICAgICAgICAgICdOb3Rlcyc6ICcnLAogICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogJycsCiAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnYUZpbGUnLAogICAgICAgICAgICAgICAnYUxhYmVsJzogJ1VzZXJDcmVhdGVTZXJ2aWNlLnBocCB1cGRhdGUnLAogICAgICAgICAgICAgICAnYXN2Z2ZpbGUnOiAnJywKICAgICAgICAgICAgICAgJ3ljb2RlJzogJyd9fX0K
Copyright © 2025 by WebAsOne LLC, All Rights Reserved