PD9waHAKLyoqCiAqIFNjaGVtYSBKU09OLUxEOiBNdXNpY0V2ZW50LCBSZXZpZXcsIFBlcnNvbiwgTmV3c0FydGljbGUKICogR29vZ2xlIE5ld3MgU2l0ZW1hcCBlbmRwb2ludDogL25ld3Mtc2l0ZW1hcC54bWwKICogU2hvcnRjb2RlIFtkaXN0cmlidXRpZV0gKyBbYXJ0aXN0IG51bWU9IlgiIHJvbD0iWSIgdm9jZT0iWiJdCiAqIG1hZGFsaW5nZW9yZ2Vncm96YS5ybyAtIG11LXBsdWdpbgogKi8KCi8vIOKUgOKUgOKUgCDDjm5yZWdpc3RyYXJlIG1ldGEgc3BlY3RhY29sX2RhdGVfc29ydCAobmVjZXNhcsSDIHBlbnRydSBSRVNUIHdyaXRlICsgV1BfUXVlcnkpIOKUgOKUgAoKYWRkX2FjdGlvbignaW5pdCcsICdtZ2dfcmVnaXN0ZXJfc3BlY3RhY29sX21ldGEnKTsKZnVuY3Rpb24gbWdnX3JlZ2lzdGVyX3NwZWN0YWNvbF9tZXRhKCkgewogICAgcmVnaXN0ZXJfcG9zdF9tZXRhKCdzcGVjdGFjb2wnLCAnc3BlY3RhY29sX2RhdGVfc29ydCcsIFsKICAgICAgICAndHlwZScgICAgICAgICA9PiAnc3RyaW5nJywKICAgICAgICAnc2luZ2xlJyAgICAgICA9PiB0cnVlLAogICAgICAgICdzaG93X2luX3Jlc3QnID0+IHRydWUsCiAgICAgICAgJ2F1dGhfY2FsbGJhY2snPT4gJ19fcmV0dXJuX3RydWUnLAogICAgICAgICdkZWZhdWx0JyAgICAgID0+ICcnLAogICAgXSk7Cn0KCi8vIOKUgOKUgOKUgCBBcmhpdsSDIHNwZWN0YWNvbGUg4oCUIHNvcnRhcmUgY3Jvbm9sb2dpY8SDIEFTQywgZG9hciB2aWl0b2FyZSArIGF6aSDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmFkZF9hY3Rpb24oJ3ByZV9nZXRfcG9zdHMnLCAnbWdnX3NwZWN0YWNvbF9hcmNoaXZlX3F1ZXJ5Jyk7CmZ1bmN0aW9uIG1nZ19zcGVjdGFjb2xfYXJjaGl2ZV9xdWVyeSgkcXVlcnkpIHsKICAgIGlmIChpc19hZG1pbigpIHx8ICEkcXVlcnktPmlzX21haW5fcXVlcnkoKSkgcmV0dXJuOwogICAgJHB0ID0gJHF1ZXJ5LT5nZXQoJ3Bvc3RfdHlwZScpOwogICAgJGlzX3NwZWN0YWNvbF9hcmNoaXZlID0gJHF1ZXJ5LT5pc19wb3N0X3R5cGVfYXJjaGl2ZSgnc3BlY3RhY29sJykKICAgICAgICB8fCAoJHB0ID09PSAnc3BlY3RhY29sJyAmJiAkcXVlcnktPmlzX2FyY2hpdmUoKSk7CiAgICBpZiAoISRpc19zcGVjdGFjb2xfYXJjaGl2ZSkgcmV0dXJuOwoKICAgIC8vIFRFU1QgSVpPTEFUOiBET0FSIHBvc3RzX3Blcl9wYWdlCiAgICAkcXVlcnktPnNldCgncG9zdHNfcGVyX3BhZ2UnLCAyMCk7Cn0KCi8vIOKUgOKUgOKUgCBHb29nbGUgTmV3cyBTaXRlbWFwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBGxINyxIMgcmV3cml0ZSBydWxlcyDigJQgdmVyaWZpY8SDIFJFUVVFU1RfVVJJIGRpcmVjdCDDrm4gJ3BhcnNlX3JlcXVlc3QnCgphZGRfYWN0aW9uKCdwYXJzZV9yZXF1ZXN0JywgJ21nZ19uZXdzX3NpdGVtYXBfaW50ZXJjZXB0Jyk7CmZ1bmN0aW9uIG1nZ19uZXdzX3NpdGVtYXBfaW50ZXJjZXB0KCkgewogICAgJHVyaSA9IHRyaW0ocGFyc2VfdXJsKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddID8/ICcnLCBQSFBfVVJMX1BBVEgpLCAnLycpOwogICAgaWYgKCR1cmkgIT09ICduZXdzLXNpdGVtYXAueG1sJykgcmV0dXJuOwogICAgbWdnX25ld3Nfc2l0ZW1hcF9vdXRwdXQoKTsKfQoKZnVuY3Rpb24gbWdnX25ld3Nfc2l0ZW1hcF9vdXRwdXQoKSB7CgogICAgJHBvc3RzID0gZ2V0X3Bvc3RzKFsKICAgICAgICAncG9zdF90eXBlJyAgICAgID0+ICdzdGlyZScsCiAgICAgICAgJ3Bvc3Rfc3RhdHVzJyAgICA9PiAncHVibGlzaCcsCiAgICAgICAgJ3Bvc3RzX3Blcl9wYWdlJyA9PiAxMDAwLAogICAgICAgICdkYXRlX3F1ZXJ5JyAgICAgPT4gW1snYWZ0ZXInID0+ICcyIGRheXMgYWdvJ11dLAogICAgICAgICdvcmRlcmJ5JyAgICAgICAgPT4gJ2RhdGUnLAogICAgICAgICdvcmRlcicgICAgICAgICAgPT4gJ0RFU0MnLAogICAgXSk7CgogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD1VVEYtOCcpOwogICAgaGVhZGVyKCdYLVJvYm90cy1UYWc6IG5vaW5kZXgnKTsKCiAgICBlY2hvICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PicgLiAiXG4iOwogICAgZWNobyAnPHVybHNldCB4bWxucz0iaHR0cDovL3d3dy5zaXRlbWFwcy5vcmcvc2NoZW1hcy9zaXRlbWFwLzAuOSInIC4gIlxuIjsKICAgIGVjaG8gJyAgICAgICAgeG1sbnM6bmV3cz0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NjaGVtYXMvc2l0ZW1hcC1uZXdzLzAuOSI+JyAuICJcbiI7CgogICAgZm9yZWFjaCAoJHBvc3RzIGFzICRwb3N0KSB7CiAgICAgICAgJHRpdGxlID0gZXNjX3htbChnZXRfdGhlX3RpdGxlKCRwb3N0KSk7CiAgICAgICAgJHVybCAgID0gZXNjX3VybChnZXRfcGVybWFsaW5rKCRwb3N0KSk7CiAgICAgICAgJGRhdGUgID0gZ2V0X3RoZV9kYXRlKCdjJywgJHBvc3QpOwoKICAgICAgICBlY2hvICIgIDx1cmw+XG4iOwogICAgICAgIGVjaG8gIiAgICA8bG9jPnskdXJsfTwvbG9jPlxuIjsKICAgICAgICBlY2hvICIgICAgPG5ld3M6bmV3cz5cbiI7CiAgICAgICAgZWNobyAiICAgICAgPG5ld3M6cHVibGljYXRpb24+XG4iOwogICAgICAgIGVjaG8gIiAgICAgICAgPG5ld3M6bmFtZT5tYWRhbGluZ2VvcmdlZ3JvemEucm88L25ld3M6bmFtZT5cbiI7CiAgICAgICAgZWNobyAiICAgICAgICA8bmV3czpsYW5ndWFnZT5ybzwvbmV3czpsYW5ndWFnZT5cbiI7CiAgICAgICAgZWNobyAiICAgICAgPC9uZXdzOnB1YmxpY2F0aW9uPlxuIjsKICAgICAgICBlY2hvICIgICAgICA8bmV3czpwdWJsaWNhdGlvbl9kYXRlPnskZGF0ZX08L25ld3M6cHVibGljYXRpb25fZGF0ZT5cbiI7CiAgICAgICAgZWNobyAiICAgICAgPG5ld3M6dGl0bGU+eyR0aXRsZX08L25ld3M6dGl0bGU+XG4iOwogICAgICAgIGVjaG8gIiAgICA8L25ld3M6bmV3cz5cbiI7CiAgICAgICAgZWNobyAiICA8L3VybD5cbiI7CiAgICB9CgogICAgZWNobyAnPC91cmxzZXQ+JzsKICAgIGV4aXQ7Cn0KCmFkZF9hY3Rpb24oJ3dwX2hlYWQnLCAnbWdnX291dHB1dF9zY2hlbWEnLCAyMCk7CgpmdW5jdGlvbiBtZ2dfb3V0cHV0X3NjaGVtYSgpIHsKICAgIGlmICghaXNfc2luZ3VsYXIoKSkgcmV0dXJuOwogICAgJHBvc3QgPSBnZXRfcG9zdCgpOwogICAgaWYgKCEkcG9zdCkgcmV0dXJuOwoKICAgICRzY2hlbWEgPSBudWxsOwoKICAgIGlmICgkcG9zdC0+cG9zdF90eXBlID09PSAnc3BlY3RhY29sJykgewogICAgICAgICRzY2hlbWEgPSBtZ2dfbXVzaWNfZXZlbnRfc2NoZW1hKCRwb3N0KTsKICAgIH0gZWxzZWlmICgkcG9zdC0+cG9zdF90eXBlID09PSAncG9zdCcgJiYgaGFzX2NhdGVnb3J5KCdyZWNlbnppaScsICRwb3N0KSkgewogICAgICAgICRzY2hlbWEgPSBtZ2dfcmV2aWV3X3NjaGVtYSgkcG9zdCk7CiAgICB9IGVsc2VpZiAoJHBvc3QtPnBvc3RfdHlwZSA9PT0gJ3Bvc3QnICYmIGhhc19jYXRlZ29yeSgnY2F0ZWdvcmllLWFydGlzdGknLCAkcG9zdCkpIHsKICAgICAgICAkc2NoZW1hID0gbWdnX3BlcnNvbl9zY2hlbWEoJHBvc3QpOwogICAgfSBlbHNlaWYgKCRwb3N0LT5wb3N0X3R5cGUgPT09ICdhcnRpc3RpJykgewogICAgICAgICRzY2hlbWEgPSBtZ2dfcGVyc29uX3NjaGVtYSgkcG9zdCk7CiAgICB9IGVsc2VpZiAoJHBvc3QtPnBvc3RfdHlwZSA9PT0gJ3N0aXJlJykgewogICAgICAgICRzY2hlbWEgPSBtZ2dfbmV3c19hcnRpY2xlX3NjaGVtYSgkcG9zdCk7CiAgICB9CgogICAgaWYgKCEkc2NoZW1hKSByZXR1cm47CgogICAgZWNobyAnPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIiBjbGFzcz0ibWdnLXNjaGVtYSI+JyAuICJcbiI7CiAgICBlY2hvIHdwX2pzb25fZW5jb2RlKCRzY2hlbWEsIEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFIHwgSlNPTl9QUkVUVFlfUFJJTlQpOwogICAgZWNobyAiXG48L3NjcmlwdD5cbiI7Cn0KCmZ1bmN0aW9uIG1nZ19tdXNpY19ldmVudF9zY2hlbWEoJHBvc3QpIHsKICAgICR2ZW51ZSA9IGdldF9wb3N0X21ldGEoJHBvc3QtPklELCAnc3BlY3RhY29sX3ZlbnVlJywgdHJ1ZSk7CiAgICAkZGF0ZSAgPSBnZXRfcG9zdF9tZXRhKCRwb3N0LT5JRCwgJ3NwZWN0YWNvbF9kYXRlJywgIHRydWUpOwogICAgJHRpbWUgID0gZ2V0X3Bvc3RfbWV0YSgkcG9zdC0+SUQsICdzcGVjdGFjb2xfdGltZScsICB0cnVlKTsKICAgICR0eXBlICA9IGdldF9wb3N0X21ldGEoJHBvc3QtPklELCAnc3BlY3RhY29sX3R5cGUnLCAgdHJ1ZSk7CgogICAgJHN0YXJ0X2RhdGUgPSBtZ2dfcm9fZGF0ZV90b19pc28oJGRhdGUsICR0aW1lKTsKCiAgICAkc2NoZW1hID0gWwogICAgICAgICdAY29udGV4dCcgICAgICAgICAgICA9PiAnaHR0cHM6Ly9zY2hlbWEub3JnJywKICAgICAgICAnQHR5cGUnICAgICAgICAgICAgICAgPT4gJ011c2ljRXZlbnQnLAogICAgICAgICduYW1lJyAgICAgICAgICAgICAgICA9PiBnZXRfdGhlX3RpdGxlKCRwb3N0KSwKICAgICAgICAndXJsJyAgICAgICAgICAgICAgICAgPT4gZ2V0X3Blcm1hbGluaygkcG9zdCksCiAgICAgICAgJ2V2ZW50U3RhdHVzJyAgICAgICAgID0+ICdodHRwczovL3NjaGVtYS5vcmcvRXZlbnRTY2hlZHVsZWQnLAogICAgICAgICdldmVudEF0dGVuZGFuY2VNb2RlJyA9PiAnaHR0cHM6Ly9zY2hlbWEub3JnL09mZmxpbmVFdmVudEF0dGVuZGFuY2VNb2RlJywKICAgIF07CgogICAgaWYgKCRzdGFydF9kYXRlKSB7CiAgICAgICAgJHNjaGVtYVsnc3RhcnREYXRlJ10gPSAkc3RhcnRfZGF0ZTsKICAgIH0KCiAgICBpZiAoJHZlbnVlKSB7CiAgICAgICAgJHNjaGVtYVsnbG9jYXRpb24nXSA9IFsKICAgICAgICAgICAgJ0B0eXBlJyAgID0+ICdQZXJmb3JtaW5nQXJ0c1RoZWF0ZXInLAogICAgICAgICAgICAnbmFtZScgICAgPT4gJHZlbnVlLAogICAgICAgICAgICAnYWRkcmVzcycgPT4gWydAdHlwZScgPT4gJ1Bvc3RhbEFkZHJlc3MnLCAnYWRkcmVzc0NvdW50cnknID0+ICdSTyddLAogICAgICAgIF07CiAgICAgICAgJHNjaGVtYVsnb3JnYW5pemVyJ10gPSBbJ0B0eXBlJyA9PiAnT3JnYW5pemF0aW9uJywgJ25hbWUnID0+ICR2ZW51ZV07CiAgICB9CgogICAgJHRodW1iX2lkID0gZ2V0X3Bvc3RfdGh1bWJuYWlsX2lkKCRwb3N0LT5JRCk7CiAgICBpZiAoJHRodW1iX2lkKSB7CiAgICAgICAgJGltZyA9IHdwX2dldF9hdHRhY2htZW50X2ltYWdlX3NyYygkdGh1bWJfaWQsICdmdWxsJyk7CiAgICAgICAgaWYgKCRpbWcpIHsKICAgICAgICAgICAgJHNjaGVtYVsnaW1hZ2UnXSA9ICRpbWdbMF07CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkdHlwZSkgewogICAgICAgICRzY2hlbWFbJ2Rlc2NyaXB0aW9uJ10gPSB1Y2ZpcnN0KCR0eXBlKTsKICAgIH0KCiAgICByZXR1cm4gJHNjaGVtYTsKfQoKZnVuY3Rpb24gbWdnX3Jldmlld19zY2hlbWEoJHBvc3QpIHsKICAgICRvdmVyYWxsX3JhdGluZyA9IGdldF9wb3N0X21ldGEoJHBvc3QtPklELCAneWFzcl9vdmVyYWxsX3JhdGluZycsIHRydWUpOwoKICAgICRzY2hlbWEgPSBbCiAgICAgICAgJ0Bjb250ZXh0JyAgICAgID0+ICdodHRwczovL3NjaGVtYS5vcmcnLAogICAgICAgICdAdHlwZScgICAgICAgICA9PiAnUmV2aWV3JywKICAgICAgICAndXJsJyAgICAgICAgICAgPT4gZ2V0X3Blcm1hbGluaygkcG9zdCksCiAgICAgICAgJ25hbWUnICAgICAgICAgID0+IGdldF90aGVfdGl0bGUoJHBvc3QpLAogICAgICAgICdkYXRlUHVibGlzaGVkJyA9PiBnZXRfdGhlX2RhdGUoJ2MnLCAkcG9zdCksCiAgICAgICAgJ2F1dGhvcicgICAgICAgID0+IG1nZ19hdXRob3Jfc2NoZW1hKCksCiAgICAgICAgJ2l0ZW1SZXZpZXdlZCcgID0+IFsKICAgICAgICAgICAgJ0B0eXBlJyA9PiAnRXZlbnQnLAogICAgICAgICAgICAnbmFtZScgID0+IGdldF90aGVfdGl0bGUoJHBvc3QpLAogICAgICAgIF0sCiAgICAgICAgJ3B1Ymxpc2hlcicgICAgID0+IFsKICAgICAgICAgICAgJ0B0eXBlJyA9PiAnT3JnYW5pemF0aW9uJywKICAgICAgICAgICAgJ25hbWUnICA9PiAnbWFkYWxpbmdlb3JnZWdyb3phLnJvJywKICAgICAgICAgICAgJ3VybCcgICA9PiBob21lX3VybCgpLAogICAgICAgIF0sCiAgICBdOwoKICAgIGlmICgkb3ZlcmFsbF9yYXRpbmcgIT09ICcnICYmICRvdmVyYWxsX3JhdGluZyAhPT0gZmFsc2UpIHsKICAgICAgICAkc2NoZW1hWydyZXZpZXdSYXRpbmcnXSA9IFsKICAgICAgICAgICAgJ0B0eXBlJyAgICAgICA9PiAnUmF0aW5nJywKICAgICAgICAgICAgJ3JhdGluZ1ZhbHVlJyA9PiAoZmxvYXQpICRvdmVyYWxsX3JhdGluZywKICAgICAgICAgICAgJ2Jlc3RSYXRpbmcnICA9PiA1LAogICAgICAgICAgICAnd29yc3RSYXRpbmcnID0+IDEsCiAgICAgICAgXTsKICAgIH0KCiAgICByZXR1cm4gJHNjaGVtYTsKfQoKZnVuY3Rpb24gbWdnX3BlcnNvbl9zY2hlbWEoJHBvc3QpIHsKICAgICRzY2hlbWEgPSBbCiAgICAgICAgJ0Bjb250ZXh0JyA9PiAnaHR0cHM6Ly9zY2hlbWEub3JnJywKICAgICAgICAnQHR5cGUnICAgID0+ICdQZXJzb24nLAogICAgICAgICduYW1lJyAgICAgPT4gZ2V0X3RoZV90aXRsZSgkcG9zdCksCiAgICAgICAgJ3VybCcgICAgICA9PiBnZXRfcGVybWFsaW5rKCRwb3N0KSwKICAgIF07CgogICAgJHRodW1iX2lkID0gZ2V0X3Bvc3RfdGh1bWJuYWlsX2lkKCRwb3N0LT5JRCk7CiAgICBpZiAoJHRodW1iX2lkKSB7CiAgICAgICAgJGltZyA9IHdwX2dldF9hdHRhY2htZW50X2ltYWdlX3NyYygkdGh1bWJfaWQsICdmdWxsJyk7CiAgICAgICAgaWYgKCRpbWcpIHsKICAgICAgICAgICAgJHNjaGVtYVsnaW1hZ2UnXSA9IFsKICAgICAgICAgICAgICAgICdAdHlwZScgID0+ICdJbWFnZU9iamVjdCcsCiAgICAgICAgICAgICAgICAndXJsJyAgICA9PiAkaW1nWzBdLAogICAgICAgICAgICAgICAgJ3dpZHRoJyAgPT4gKGludCkgJGltZ1sxXSwKICAgICAgICAgICAgICAgICdoZWlnaHQnID0+IChpbnQpICRpbWdbMl0sCiAgICAgICAgICAgIF07CiAgICAgICAgfQogICAgfQoKICAgIC8vIFRheG9ub21pYSBwcmltYXJhIGEgcGFnaW5paSBkZSBhcnRpc3QgKGRpcmlqb3IsIHNvcHJhbmEgZXRjKSDihpIgam9iVGl0bGUKICAgICR0ZXJtcyA9IGdldF90aGVfdGVybXMoJHBvc3QtPklELCAnY2F0ZWdvcnknKTsKICAgIGlmICgkdGVybXMgJiYgIWlzX3dwX2Vycm9yKCR0ZXJtcykpIHsKICAgICAgICAkc2NoZW1hWydqb2JUaXRsZSddID0gJHRlcm1zWzBdLT5uYW1lOwogICAgfQoKICAgIHJldHVybiAkc2NoZW1hOwp9CgpmdW5jdGlvbiBtZ2dfYXV0aG9yX3NjaGVtYSgpIHsKICAgIHJldHVybiBbCiAgICAgICAgJ0B0eXBlJyAgPT4gJ1BlcnNvbicsCiAgICAgICAgJ25hbWUnICAgPT4gJ03Eg2TEg2xpbiBHZW9yZ2UgR3JvemEnLAogICAgICAgICd1cmwnICAgID0+ICdodHRwczovL21hZGFsaW5nZW9yZ2Vncm96YS5yby9tYWRhbGluLWdlb3JnZS1ncm96YS10ZW5vci1jcml0aWMtbXV6aWNhbC8nLAogICAgICAgICdzYW1lQXMnID0+IFsKICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnRpa3Rvay5jb20vQG1hZGFsaW4uZ3JvemEub3BlcmEnLAogICAgICAgICAgICAnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL21hZGFsaW5nZW9yZ2Vncm96YScsCiAgICAgICAgICAgICdodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL21hZGFsaW4uZ3JvemEub3BlcmEvJywKICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BtYWRhbGluZ2VvcmdlZ3JvemEnLAogICAgICAgIF0sCiAgICBdOwp9CgpmdW5jdGlvbiBtZ2dfbmV3c19hcnRpY2xlX3NjaGVtYSgkcG9zdCkgewogICAgJHNjaGVtYSA9IFsKICAgICAgICAnQGNvbnRleHQnICAgICAgPT4gJ2h0dHBzOi8vc2NoZW1hLm9yZycsCiAgICAgICAgJ0B0eXBlJyAgICAgICAgID0+ICdOZXdzQXJ0aWNsZScsCiAgICAgICAgJ2hlYWRsaW5lJyAgICAgID0+IG1iX3N1YnN0cihnZXRfdGhlX3RpdGxlKCRwb3N0KSwgMCwgMTEwKSwKICAgICAgICAndXJsJyAgICAgICAgICAgPT4gZ2V0X3Blcm1hbGluaygkcG9zdCksCiAgICAgICAgJ2RhdGVQdWJsaXNoZWQnID0+IGdldF90aGVfZGF0ZSgnYycsICRwb3N0KSwKICAgICAgICAnZGF0ZU1vZGlmaWVkJyAgPT4gZ2V0X3RoZV9tb2RpZmllZF9kYXRlKCdjJywgJHBvc3QpLAogICAgICAgICdhdXRob3InICAgICAgICA9PiBtZ2dfYXV0aG9yX3NjaGVtYSgpLAogICAgICAgICdwdWJsaXNoZXInICAgICA9PiBbCiAgICAgICAgICAgICdAdHlwZScgPT4gJ09yZ2FuaXphdGlvbicsCiAgICAgICAgICAgICduYW1lJyAgPT4gJ21hZGFsaW5nZW9yZ2Vncm96YS5ybycsCiAgICAgICAgICAgICd1cmwnICAgPT4gaG9tZV91cmwoKSwKICAgICAgICAgICAgJ2xvZ28nICA9PiBbCiAgICAgICAgICAgICAgICAnQHR5cGUnICA9PiAnSW1hZ2VPYmplY3QnLAogICAgICAgICAgICAgICAgJ3VybCcgICAgPT4gJ2h0dHBzOi8vbWFkYWxpbmdlb3JnZWdyb3phLnJvL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzAyL0lNR18wNjMxLmpwZycsCiAgICAgICAgICAgICAgICAnd2lkdGgnICA9PiAxMzIwLAogICAgICAgICAgICAgICAgJ2hlaWdodCcgPT4gNTYwLAogICAgICAgICAgICBdLAogICAgICAgIF0sCiAgICAgICAgJ2luTGFuZ3VhZ2UnICAgID0+ICdyby1STycsCiAgICBdOwoKICAgICR0aHVtYl9pZCA9IGdldF9wb3N0X3RodW1ibmFpbF9pZCgkcG9zdC0+SUQpOwogICAgaWYgKCR0aHVtYl9pZCkgewogICAgICAgICRpbWcgPSB3cF9nZXRfYXR0YWNobWVudF9pbWFnZV9zcmMoJHRodW1iX2lkLCAnZnVsbCcpOwogICAgICAgIGlmICgkaW1nKSB7CiAgICAgICAgICAgICRzY2hlbWFbJ2ltYWdlJ10gPSBbCiAgICAgICAgICAgICAgICAnQHR5cGUnICA9PiAnSW1hZ2VPYmplY3QnLAogICAgICAgICAgICAgICAgJ3VybCcgICAgPT4gJGltZ1swXSwKICAgICAgICAgICAgICAgICd3aWR0aCcgID0+IChpbnQpICRpbWdbMV0sCiAgICAgICAgICAgICAgICAnaGVpZ2h0JyA9PiAoaW50KSAkaW1nWzJdLAogICAgICAgICAgICBdOwogICAgICAgIH0KICAgIH0KCiAgICAkZXhjZXJwdCA9IGdldF90aGVfZXhjZXJwdCgkcG9zdCk7CiAgICBpZiAoJGV4Y2VycHQpIHsKICAgICAgICAkc2NoZW1hWydkZXNjcmlwdGlvbiddID0gd3Bfc3RyaXBfYWxsX3RhZ3MoJGV4Y2VycHQpOwogICAgfQoKICAgIHJldHVybiAkc2NoZW1hOwp9CgpmdW5jdGlvbiBtZ2dfcm9fZGF0ZV90b19pc28oJGRhdGVfcm8sICR0aW1lID0gJycpIHsKICAgIGlmICghJGRhdGVfcm8pIHJldHVybiAnJzsKICAgICRsdW5pID0gWwogICAgICAgICdpYW51YXJpZScgPT4gJzAxJywgJ2ZlYnJ1YXJpZScgPT4gJzAyJywgJ21hcnRpZScgICAgID0+ICcwMycsCiAgICAgICAgJ2FwcmlsaWUnICA9PiAnMDQnLCAnbWFpJyAgICAgICAgPT4gJzA1JywgJ2l1bmllJyAgICAgID0+ICcwNicsCiAgICAgICAgJ2l1bGllJyAgICA9PiAnMDcnLCAnYXVndXN0JyAgICAgPT4gJzA4JywgJ3NlcHRlbWJyaWUnID0+ICcwOScsCiAgICAgICAgJ29jdG9tYnJpZSc9PiAnMTAnLCAnbm9pZW1icmllJyAgPT4gJzExJywgJ2RlY2VtYnJpZScgID0+ICcxMicsCiAgICBdOwogICAgJHBhcnRzID0gcHJlZ19zcGxpdCgnL1xzKy8nLCB0cmltKCRkYXRlX3JvKSk7CiAgICBpZiAoY291bnQoJHBhcnRzKSA8IDMpIHJldHVybiAnJzsKICAgICR6aSAgID0gc3RyX3BhZCgoaW50KSRwYXJ0c1swXSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpOwogICAgJGx1bmEgPSAkbHVuaVtzdHJ0b2xvd2VyKCRwYXJ0c1sxXSldID8/ICcnOwogICAgJGFuICAgPSAkcGFydHNbMl07CiAgICBpZiAoISRsdW5hIHx8ICEkYW4pIHJldHVybiAnJzsKICAgICRpc28gPSAieyRhbn0teyRsdW5hfS17JHppfSI7CiAgICBpZiAoJHRpbWUpIHsKICAgICAgICAkdCA9IHByZWdfcmVwbGFjZSgnL1teMC05Ol0vJywgJycsICR0aW1lKTsKICAgICAgICBpZiAoc3RybGVuKCR0KSA+PSA0KSAkaXNvIC49ICdUJyAuICR0IC4gJzowMCc7CiAgICB9CiAgICByZXR1cm4gJGlzbzsKfQoKLy8g4pSA4pSA4pSAIFNob3J0Y29kZSBkaXN0cmlidcibaWUgYXJ0aciZdGkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgphZGRfc2hvcnRjb2RlKCdtZ2dfZGlzdHJpYnV0aWUnLCAnbWdnX3NjX2Rpc3RyaWJ1dGllJyk7CmFkZF9zaG9ydGNvZGUoJ21nZ19hcnRpc3QnLCAgICAgJ21nZ19zY19hcnRpc3QnKTsKLy8gQWxpYXN1cmkgc2N1cnRlIChkb2FyIGRhY2EgbnUgc3VudCBkZWphIGlucmVnaXN0cmF0ZSBkZSBhbHQgcGx1Z2luKQphZGRfYWN0aW9uKCdpbml0JywgZnVuY3Rpb24oKSB7CiAgICBpZiAoIXNob3J0Y29kZV9leGlzdHMoJ2Rpc3RyaWJ1dGllJykpIGFkZF9zaG9ydGNvZGUoJ2Rpc3RyaWJ1dGllJywgJ21nZ19zY19kaXN0cmlidXRpZScpOwogICAgaWYgKCFzaG9ydGNvZGVfZXhpc3RzKCdhcnRpc3QnKSkgICAgICBhZGRfc2hvcnRjb2RlKCdhcnRpc3QnLCAgICAgICdtZ2dfc2NfYXJ0aXN0Jyk7Cn0sIDIwKTsKCmZ1bmN0aW9uIG1nZ19zY19kaXN0cmlidXRpZSgkYXR0cywgJGNvbnRlbnQgPSAnJykgewogICAgaWYgKCEkY29udGVudCkgcmV0dXJuICcnOwogICAgJGlubmVyID0gZG9fc2hvcnRjb2RlKCRjb250ZW50KTsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0ibWdnLWRpc3RyaWJ1dGllIj4nIC4gJGlubmVyIC4gJzwvZGl2Pic7Cn0KCmZ1bmN0aW9uIG1nZ19zY19hcnRpc3QoJGF0dHMpIHsKICAgICRhdHRzID0gc2hvcnRjb2RlX2F0dHMoWwogICAgICAgICdudW1lJyA9PiAnJywKICAgICAgICAncm9sJyAgPT4gJycsCiAgICAgICAgJ3ZvY2UnID0+ICcnLAogICAgXSwgJGF0dHMsICdhcnRpc3QnKTsKCiAgICAkbnVtZSA9IHNhbml0aXplX3RleHRfZmllbGQoJGF0dHNbJ251bWUnXSk7CiAgICAkcm9sICA9IHNhbml0aXplX3RleHRfZmllbGQoJGF0dHNbJ3JvbCddKTsKICAgICR2b2NlID0gc2FuaXRpemVfdGV4dF9maWVsZCgkYXR0c1sndm9jZSddKTsKCiAgICBpZiAoISRudW1lKSByZXR1cm4gJyc7CgogICAgJHBvc3QgPSBtZ2dfZmluZF9hcnRpc3QoJG51bWUpOwoKICAgIGlmICghJHBvc3QpIHsKICAgICAgICAvLyBGYWlsLXNhZmU6IGFmaciZZWF6xIMgbnVtZWxlIHNpbXBsdSBmxINyxIMgbGluawogICAgICAgICRsYWJlbCAgPSAkdm9jZSA/ICI8c21hbGw+eyR2b2NlfTwvc21hbGw+IiA6ICcnOwogICAgICAgICRyb2xfZWwgPSAkcm9sICA/ICI8c3BhbiBjbGFzcz1cIm1nZy1hcnRpc3Qtcm9sXCI+eyRyb2x9PC9zcGFuPiIgOiAnJzsKICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9Im1nZy1hcnRpc3QtY2FyZCBtZ2ctYXJ0aXN0LW5vZm91bmQiPicKICAgICAgICAgICAgIC4gIjxzcGFuIGNsYXNzPVwibWdnLWFydGlzdC1uYW1lXCI+eyRudW1lfTwvc3Bhbj57JGxhYmVsfXskcm9sX2VsfTwvZGl2PiI7CiAgICB9CgogICAgJGxpbmsgICAgPSBnZXRfcGVybWFsaW5rKCRwb3N0KTsKICAgICR0aHVtYiAgID0gJyc7CiAgICAkdGh1bWJfaWQgPSBnZXRfcG9zdF90aHVtYm5haWxfaWQoJHBvc3QtPklEKTsKICAgIGlmICgkdGh1bWJfaWQpIHsKICAgICAgICAkaW1nID0gd3BfZ2V0X2F0dGFjaG1lbnRfaW1hZ2Vfc3JjKCR0aHVtYl9pZCwgJ3RodW1ibmFpbCcpOwogICAgICAgIGlmICgkaW1nKSB7CiAgICAgICAgICAgICR0aHVtYiA9ICI8aW1nIHNyYz1cInskaW1nWzBdfVwiIGFsdD1cIiIgLiBlc2NfYXR0cigkbnVtZSkgLiAiXCIgIgogICAgICAgICAgICAgICAgICAgLiAid2lkdGg9XCJ7JGltZ1sxXX1cIiBoZWlnaHQ9XCJ7JGltZ1syXX1cIiBsb2FkaW5nPVwibGF6eVwiPiI7CiAgICAgICAgfQogICAgfQoKICAgICR2b2NlX2VsID0gJHZvY2UgPyAiPHNtYWxsIGNsYXNzPVwibWdnLWFydGlzdC12b2NlXCI+eyR2b2NlfTwvc21hbGw+IiA6ICcnOwogICAgJHJvbF9lbCAgPSAkcm9sICA/ICI8c3BhbiBjbGFzcz1cIm1nZy1hcnRpc3Qtcm9sXCI+eyRyb2x9PC9zcGFuPiIgOiAnJzsKCiAgICByZXR1cm4gJzxkaXYgY2xhc3M9Im1nZy1hcnRpc3QtY2FyZCI+JwogICAgICAgICAuICI8YSBocmVmPVwieyRsaW5rfVwiIGNsYXNzPVwibWdnLWFydGlzdC1saW5rXCI+IgogICAgICAgICAuICR0aHVtYgogICAgICAgICAuICI8c3BhbiBjbGFzcz1cIm1nZy1hcnRpc3QtbmFtZVwiPnskbnVtZX08L3NwYW4+IgogICAgICAgICAuICR2b2NlX2VsCiAgICAgICAgIC4gIjwvYT4iCiAgICAgICAgIC4gJHJvbF9lbAogICAgICAgICAuICc8L2Rpdj4nOwp9CgpmdW5jdGlvbiBtZ2dfZmluZF9hcnRpc3QoJG5hbWUpIHsKICAgIHN0YXRpYyAkY2FjaGUgPSBbXTsKICAgIGlmIChpc3NldCgkY2FjaGVbJG5hbWVdKSkgcmV0dXJuICRjYWNoZVskbmFtZV07CgogICAgLy8gQ2F1dGEgZGlyZWN0IGluIERCIGR1cGEgcG9zdF9uYW1lIChzbHVnKSDigJQgYnlwYXNzZXMgcmVzdHJpY3RpaSBDUFQgcHVibGljbHlfcXVlcnlhYmxlCiAgICBnbG9iYWwgJHdwZGI7CiAgICAkc2x1ZyAgICA9IHNhbml0aXplX3RpdGxlKCRuYW1lKTsKICAgICRwb3N0X2lkID0gJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoCiAgICAgICAgIlNFTEVDVCBJRCBGUk9NIHskd3BkYi0+cG9zdHN9CiAgICAgICAgIFdIRVJFIHBvc3RfbmFtZSA9ICVzIEFORCBwb3N0X3N0YXR1cyA9ICdwdWJsaXNoJyBBTkQgcG9zdF90eXBlID0gJ2FydGlzdGknCiAgICAgICAgIExJTUlUIDEiLAogICAgICAgICRzbHVnCiAgICApKTsKCiAgICAkcmVzdWx0ID0gJHBvc3RfaWQgPyBnZXRfcG9zdCgoaW50KSAkcG9zdF9pZCkgOiBudWxsOwogICAgJGNhY2hlWyRuYW1lXSA9ICRyZXN1bHQ7CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKZnVuY3Rpb24gbWdnX2Rpc3RyaWJ1dGllX3N0eWxlcygpIHsKICAgIGlmICghaXNfc2luZ3VsYXIoKSkgcmV0dXJuOwogICAgZWNobyAnPHN0eWxlPgoubWdnLWRpc3RyaWJ1dGlle2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6MTJweDttYXJnaW46MjBweCAwO30KLm1nZy1hcnRpc3QtY2FyZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjsKICB3aWR0aDoxMjBweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjQ7fQoubWdnLWFydGlzdC1saW5re2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQoubWdnLWFydGlzdC1saW5rOmhvdmVyIC5tZ2ctYXJ0aXN0LW5hbWV7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9Ci5tZ2ctYXJ0aXN0LWNhcmQgaW1ne3dpZHRoOjkwcHg7aGVpZ2h0OjkwcHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjUwJTsKICBkaXNwbGF5OmJsb2NrO21hcmdpbjowIGF1dG8gNnB4O30KLm1nZy1hcnRpc3QtbmFtZXtkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMWExYTFhO30KLm1nZy1hcnRpc3Qtdm9jZXtkaXNwbGF5OmJsb2NrO2NvbG9yOiM4ODg7Zm9udC1zaXplOjExcHg7bWFyZ2luLXRvcDoycHg7fQoubWdnLWFydGlzdC1yb2x7ZGlzcGxheTpibG9jaztjb2xvcjojOEIwMDAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtc3R5bGU6aXRhbGljO21hcmdpbi10b3A6NHB4O30KLm1nZy1hcnRpc3Qtbm9mb3VuZCAubWdnLWFydGlzdC1uYW1le2NvbG9yOiM1NTU7fQpAbWVkaWEobWF4LXdpZHRoOjQ4MHB4KXsubWdnLWRpc3RyaWJ1dGlle2dhcDo4cHg7fS5tZ2ctYXJ0aXN0LWNhcmR7d2lkdGg6OTBweDt9fQo8L3N0eWxlPicgLiAiXG4iOwp9CmFkZF9hY3Rpb24oJ3dwX2hlYWQnLCAnbWdnX2Rpc3RyaWJ1dGllX3N0eWxlcycsIDUpOwoKLy8g4pSA4pSA4pSAIEF1dGhvciBib3ggcGUgcmVjZW56aWkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgphZGRfZmlsdGVyKCd0aGVfY29udGVudCcsICdtZ2dfYXV0aG9yX2JveF9hcHBlbmQnLCAzMCk7CgpmdW5jdGlvbiBtZ2dfYXV0aG9yX2JveF9hcHBlbmQoJGNvbnRlbnQpIHsKICAgIGlmICghaXNfc2luZ3VsYXIoJ3Bvc3QnKSkgcmV0dXJuICRjb250ZW50OwogICAgJHBvc3QgPSBnZXRfcG9zdCgpOwogICAgaWYgKCEkcG9zdCB8fCAhaGFzX2NhdGVnb3J5KCdyZWNlbnppaScsICRwb3N0KSkgcmV0dXJuICRjb250ZW50OwoKICAgICRhdXRob3JfdXJsICAgPSAnaHR0cHM6Ly9tYWRhbGluZ2VvcmdlZ3JvemEucm8vbWFkYWxpbi1nZW9yZ2UtZ3JvemEtdGVub3ItY3JpdGljLW11emljYWwvJzsKICAgICRhdXRob3JfaW1nICAgPSAnaHR0cHM6Ly9tYWRhbGluZ2VvcmdlZ3JvemEucm8vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDIvSU1HXzA2MzEuanBnJzsKICAgICRzb2NpYWwgPSBbCiAgICAgICAgWydUaWtUb2snLCAgICAnaHR0cHM6Ly93d3cudGlrdG9rLmNvbS9AbWFkYWxpbi5ncm96YS5vcGVyYSddLAogICAgICAgIFsnRmFjZWJvb2snLCAgJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9tYWRhbGluZ2VvcmdlZ3JvemEnXSwKICAgICAgICBbJ0luc3RhZ3JhbScsICdodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL21hZGFsaW4uZ3JvemEub3BlcmEvJ10sCiAgICAgICAgWydZb3VUdWJlJywgICAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vQG1hZGFsaW5nZW9yZ2Vncm96YSddLAogICAgXTsKICAgICRzb2NpYWxfaHRtbCA9ICcnOwogICAgZm9yZWFjaCAoJHNvY2lhbCBhcyBbJGxhYmVsLCAkdXJsXSkgewogICAgICAgICRzb2NpYWxfaHRtbCAuPSAnPGEgaHJlZj0iJyAuIGVzY191cmwoJHVybCkgLiAnIiBjbGFzcz0ibWdnLWFiLXNvY2lhbCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPicgLiAkbGFiZWwgLiAnPC9hPiAnOwogICAgfQoKICAgICRib3ggPSAnPGRpdiBjbGFzcz0ibWdnLWF1dGhvci1ib3giPicKICAgICAgICAgLiAnPGltZyBzcmM9IicgLiBlc2NfdXJsKCRhdXRob3JfaW1nKSAuICciIGFsdD0iTcSDZMSDbGluIEdlb3JnZSBHcm96YSIgY2xhc3M9Im1nZy1hYi1pbWciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgbG9hZGluZz0ibGF6eSI+JwogICAgICAgICAuICc8ZGl2IGNsYXNzPSJtZ2ctYWItY29udGVudCI+JwogICAgICAgICAuICc8c3Ryb25nIGNsYXNzPSJtZ2ctYWItbmFtZSI+PGEgaHJlZj0iJyAuIGVzY191cmwoJGF1dGhvcl91cmwpIC4gJyI+TcSDZMSDbGluIEdlb3JnZSBHcm96YTwvYT48L3N0cm9uZz4nCiAgICAgICAgIC4gJzxwIGNsYXNzPSJtZ2ctYWItYmlvIj5UZW5vciwgY3JpdGljIG11emljYWwgyJlpIGJsb2dnZXIuIFNjcmllIGRlc3ByZSBvcGVyxIMsIG11emljxIMgY2xhc2ljxIMgyJlpIHNwZWN0YWNvbGUgZGluIFJvbcOibmlhIMiZaSBFdXJvcGEuPC9wPicKICAgICAgICAgLiAnPGRpdiBjbGFzcz0ibWdnLWFiLXNvY2lhbHMiPicgLiB0cmltKCRzb2NpYWxfaHRtbCkgLiAnPC9kaXY+JwogICAgICAgICAuICc8L2Rpdj4nCiAgICAgICAgIC4gJzwvZGl2Pic7CgogICAgcmV0dXJuICRjb250ZW50IC4gJGJveDsKfQoKYWRkX2FjdGlvbignd3BfaGVhZCcsICdtZ2dfYXV0aG9yX2JveF9zdHlsZXMnLCA1KTsKZnVuY3Rpb24gbWdnX2F1dGhvcl9ib3hfc3R5bGVzKCkgewogICAgaWYgKCFpc19zaW5ndWxhcigncG9zdCcpKSByZXR1cm47CiAgICAkcG9zdCA9IGdldF9wb3N0KCk7CiAgICBpZiAoISRwb3N0IHx8ICFoYXNfY2F0ZWdvcnkoJ3JlY2VuemlpJywgJHBvc3QpKSByZXR1cm47CiAgICBlY2hvICc8c3R5bGU+Ci5tZ2ctYXV0aG9yLWJveHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6MTZweDttYXJnaW46MzJweCAwIDE2cHg7cGFkZGluZzoyMHB4OwogIGJhY2tncm91bmQ6I2Y5ZjlmOTtib3JkZXItbGVmdDozcHggc29saWQgIzhCMDAwMDtib3JkZXItcmFkaXVzOjJweDt9Ci5tZ2ctYWItaW1ne3dpZHRoOjgwcHg7aGVpZ2h0OjgwcHg7Ym9yZGVyLXJhZGl1czo1MCU7b2JqZWN0LWZpdDpjb3ZlcjtmbGV4LXNocmluazowO30KLm1nZy1hYi1jb250ZW50e2ZsZXg6MTttaW4td2lkdGg6MDt9Ci5tZ2ctYWItbmFtZXtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxNXB4O21hcmdpbi1ib3R0b206NnB4O30KLm1nZy1hYi1uYW1lIGF7Y29sb3I6IzFhMWExYTt0ZXh0LWRlY29yYXRpb246bm9uZTt9Ci5tZ2ctYWItbmFtZSBhOmhvdmVye2NvbG9yOiM4QjAwMDA7fQoubWdnLWFiLWJpb3ttYXJnaW46MCAwIDhweDtmb250LXNpemU6MTNweDtjb2xvcjojNTU1O2xpbmUtaGVpZ2h0OjEuNTt9Ci5tZ2ctYWItc29jaWFse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo4cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzhCMDAwMDsKICB0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgIzhCMDAwMDt9Ci5tZ2ctYWItc29jaWFsOmhvdmVye2NvbG9yOiM1YTAwMDA7fQpAbWVkaWEobWF4LXdpZHRoOjQ4MHB4KXsubWdnLWF1dGhvci1ib3h7ZmxleC1kaXJlY3Rpb246Y29sdW1uO30ubWdnLWFiLWltZ3t3aWR0aDo2MHB4O2hlaWdodDo2MHB4O319Cjwvc3R5bGU+JyAuICJcbiI7Cn0K Manuel Giugula | madalingeorgegroza.ro

Manuel Giugula

# Manuel Giugula - Dirijor și Pedagog Român

Manuel Giugula este un dirijor și pedagog român care a adus contribuții semnificative în lumea muzicii clasice și a

Dă click pentru a evalua acest articol!
[Total: 0 Media: 0]

# Manuel Giugula – Dirijor și Pedagog Român

Manuel Giugula este un dirijor și pedagog român care a adus contribuții semnificative în lumea muzicii clasice și a instituțiilor muzicale din România.

Formare și debut

Manuel Giugula a urmat o formație muzicală riguroasă, tipică pentru muzicienii de prim rang din România. Educația sa a inclus studii aprofundate în domeniul dirijării și teoriei muzicale, discipline esențiale pentru oricine dorește să se dedice acestei profesii. Formarea unui dirijor începe, de obicei, cu studii instrumentale solide, urmată de specializarea în arta dirijării, care necesită o înțelegere profundă a partituri, a istoriei muzicale și a capacității de a comunica viziunea artistică unui ansamblu.

Drumul lui Manuel Giugula în muzică s-a caracterizat prin dedicație și angajament față de standarde artistice ridicate. Debutul său în viața publică a marcat începutul unei cariere care ar cuprinde activități diversificate în domeniul muzical, combinând munca interpretativă cu cea pedagogică. Trecerea de la formație la profesionalism a reprezentat un moment crucial în evoluția sa ca artist și educator.

Cariera

Cariera lui Manuel Giugula s-a desfășurat în contextul peisajului muzical românesc, în cadrul unor instituții și orchestrerespectate. Ca dirijor, el a ocupat poziții de responsabilitate în diferite formații artistice, având ocazia să lucreze cu diverse ansambluri și să-și dezvolte abilitățile de conducere muzicală. Munca unui dirijor implică nu doar aspectul interpretativ, ci și capacitatea de a instrui, de a dezvolta o viziune artistică coerentă și de a obține cea mai bună performanță din partea muzicienilor sub conducerea sa.

Manuel Giugula a fost implicat în activități care au cuprins atât concertele publice cât și proiecte de dezvoltare a calității muzicale în instituciile cu care a colaborat. Dirijiturile sale s-au concentrat pe promovarea unui repertoriu larg, ceea ce demonstrează versatilitatea și cunoștințele sale aprofundate ale literaturii muzicale. Prezența sa în viața muzicală românească a fost marcată de o muncă consecventă și de o preocupare constantă pentru ridicarea nivelului artistic.

Activitățile sale profesionale au inclus și colaborări cu alți artiști și instituții prestigioase, ceea ce a contribuit la crearea unei rețele de relații artistice valoroase. Implicarea sa în diverse proiecte muzicale a arătat deschiderea sa față de diferite genuri și stiluri, precum și capacitatea de a se adapta la cerințele specifice ale fiecărei producții.

Repertoriu și roluri (dirijor)

Ca dirijor, Manuel Giugula a lucrat cu un repertoriu care cuprinde lucrări din diverse perioade și stiluri ale muzicii clasice și contemporane. Rolul unui dirijor este complex și multifacetic, implicând o înțelegere profundă a partituri, capacitatea de a transmite o viziune artistică și de a ghida muzicienii către realizarea unei interpretări coerente și expresive.

Dirijiturile sale au acoperit atât clasicii muzicii europene cât și, probabil, și opere ale compozitorilor contemporani sau lucrări de relevanță locală. Competența unui bun dirijor se măsoară prin capacitatea sa de a extrage esența unei lucrări muzicale și de a o comunica cu claritate și articulație unui ansamblu muzical.

Rolul pedagogic și artistic al unui dirijor presupune și o responsabilitate didactică, de a forma și a ghida generațiile viitoare de muzicieni. Manuel Giugula a demonstrat, prin activitatea sa, o preocupare pentru transmiterea cunoștințelor și a standardelor artistice către studenții și colaboratorii săi.

Recunoaștere

Manuel Giugula a beneficiat de recunoașterea in mediile profesionale muzicale din România, fiind apreciat pentru implicarea sa în promovarea artei dirijării și a calității interpretative. Contribuția sa la dezvoltarea instituțiilor muzicale și la formarea tinerilor artiști este considerată semnificativă în contextul peisajului cultural românesc.

Respectul și estima pe care i le-au acordat colegii și elevii săi reflectă valoarea muncii sale și impactul pe care l-a avut în domeniul muzicii. Prin activitatea sa, Manuel Giugula a rămas o figură importantă în istoricul muzicii clasice românești.

Dă click pentru a evalua acest articol!
[Total: 0 Media: 0]
Partajează

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *