PD9waHAKCnVzZSBJbGx1bWluYXRlXFN1cHBvcnRcU3RyOwoKcmV0dXJuIFsKCiAgICAvKgogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8IERlZmF1bHQgRGF0YWJhc2UgQ29ubmVjdGlvbiBOYW1lCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgSGVyZSB5b3UgbWF5IHNwZWNpZnkgd2hpY2ggb2YgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb25zIGJlbG93IHlvdSB3aXNoCiAgICB8IHRvIHVzZSBhcyB5b3VyIGRlZmF1bHQgY29ubmVjdGlvbiBmb3IgYWxsIGRhdGFiYXNlIHdvcmsuIE9mIGNvdXJzZQogICAgfCB5b3UgbWF5IHVzZSBtYW55IGNvbm5lY3Rpb25zIGF0IG9uY2UgdXNpbmcgdGhlIERhdGFiYXNlIGxpYnJhcnkuCiAgICB8CiAgICAqLwoKICAgICdkZWZhdWx0JyA9PiBlbnYoJ0RCX0NPTk5FQ1RJT04nLCAnbXlzcWwnKSwKCiAgICAvKgogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8IERhdGFiYXNlIENvbm5lY3Rpb25zCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgSGVyZSBhcmUgZWFjaCBvZiB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbnMgc2V0dXAgZm9yIHlvdXIgYXBwbGljYXRpb24uCiAgICB8IE9mIGNvdXJzZSwgZXhhbXBsZXMgb2YgY29uZmlndXJpbmcgZWFjaCBkYXRhYmFzZSBwbGF0Zm9ybSB0aGF0IGlzCiAgICB8IHN1cHBvcnRlZCBieSBMYXJhdmVsIGlzIHNob3duIGJlbG93IHRvIG1ha2UgZGV2ZWxvcG1lbnQgc2ltcGxlLgogICAgfAogICAgfAogICAgfCBBbGwgZGF0YWJhc2Ugd29yayBpbiBMYXJhdmVsIGlzIGRvbmUgdGhyb3VnaCB0aGUgUEhQIFBETyBmYWNpbGl0aWVzCiAgICB8IHNvIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgZHJpdmVyIGZvciB5b3VyIHBhcnRpY3VsYXIgZGF0YWJhc2Ugb2YKICAgIHwgY2hvaWNlIGluc3RhbGxlZCBvbiB5b3VyIG1hY2hpbmUgYmVmb3JlIHlvdSBiZWdpbiBkZXZlbG9wbWVudC4KICAgIHwKICAgICovCgogICAgJ2Nvbm5lY3Rpb25zJyA9PiBbCgogICAgICAgICdzcWxpdGUnID0+IFsKICAgICAgICAgICAgJ2RyaXZlcicgPT4gJ3NxbGl0ZScsCiAgICAgICAgICAgICd1cmwnID0+IGVudignREFUQUJBU0VfVVJMJyksCiAgICAgICAgICAgICdkYXRhYmFzZScgPT4gZW52KCdEQl9EQVRBQkFTRScsIGRhdGFiYXNlX3BhdGgoJ2RhdGFiYXNlLnNxbGl0ZScpKSwKICAgICAgICAgICAgJ3ByZWZpeCcgPT4gJycsCiAgICAgICAgICAgICdmb3JlaWduX2tleV9jb25zdHJhaW50cycgPT4gZW52KCdEQl9GT1JFSUdOX0tFWVMnLCB0cnVlKSwKICAgICAgICBdLAoKICAgICAgICAnbXlzcWwnID0+IFsKICAgICAgICAgICAgJ2RyaXZlcicgPT4gJ215c3FsJywKICAgICAgICAgICAgJ3VybCcgPT4gZW52KCdEQVRBQkFTRV9VUkwnKSwKICAgICAgICAgICAgJ2hvc3QnID0+IGVudignREJfSE9TVCcsICcxMjcuMC4wLjEnKSwKICAgICAgICAgICAgJ3BvcnQnID0+IGVudignREJfUE9SVCcsICczMzA2JyksCiAgICAgICAgICAgICdkYXRhYmFzZScgPT4gZW52KCdEQl9EQVRBQkFTRScsICdmb3JnZScpLAogICAgICAgICAgICAndXNlcm5hbWUnID0+IGVudignREJfVVNFUk5BTUUnLCAnZm9yZ2UnKSwKICAgICAgICAgICAgJ3Bhc3N3b3JkJyA9PiBlbnYoJ0RCX1BBU1NXT1JEJywgJycpLAogICAgICAgICAgICAndW5peF9zb2NrZXQnID0+IGVudignREJfU09DS0VUJywgJycpLAogICAgICAgICAgICAnY2hhcnNldCcgPT4gJ3V0ZjhtYjQnLAogICAgICAgICAgICAnY29sbGF0aW9uJyA9PiAndXRmOG1iNF91bmljb2RlX2NpJywKICAgICAgICAgICAgJ3ByZWZpeCcgPT4gIGVudignREJfUFJFRklYJywgJycpLAogICAgICAgICAgICAncHJlZml4X2luZGV4ZXMnID0+IHRydWUsCiAgICAgICAgICAgICdzdHJpY3QnID0+IHRydWUsCiAgICAgICAgICAgICdlbmdpbmUnID0+IG51bGwsCiAgICAgICAgICAgICdvcHRpb25zJyA9PiBleHRlbnNpb25fbG9hZGVkKCdwZG9fbXlzcWwnKSA/IGFycmF5X2ZpbHRlcihbCiAgICAgICAgICAgICAgICBQRE86Ok1ZU1FMX0FUVFJfU1NMX0NBID0+IGVudignTVlTUUxfQVRUUl9TU0xfQ0EnKSwKICAgICAgICAgICAgXSkgOiBbXSwKICAgICAgICBdLAoKICAgICAgICAncGdzcWwnID0+IFsKICAgICAgICAgICAgJ2RyaXZlcicgPT4gJ3Bnc3FsJywKICAgICAgICAgICAgJ3VybCcgPT4gZW52KCdEQVRBQkFTRV9VUkwnKSwKICAgICAgICAgICAgJ2hvc3QnID0+IGVudignREJfSE9TVCcsICcxMjcuMC4wLjEnKSwKICAgICAgICAgICAgJ3BvcnQnID0+IGVudignREJfUE9SVCcsICc1NDMyJyksCiAgICAgICAgICAgICdkYXRhYmFzZScgPT4gZW52KCdEQl9EQVRBQkFTRScsICdmb3JnZScpLAogICAgICAgICAgICAndXNlcm5hbWUnID0+IGVudignREJfVVNFUk5BTUUnLCAnZm9yZ2UnKSwKICAgICAgICAgICAgJ3Bhc3N3b3JkJyA9PiBlbnYoJ0RCX1BBU1NXT1JEJywgJycpLAogICAgICAgICAgICAnY2hhcnNldCcgPT4gJ3V0ZjgnLAogICAgICAgICAgICAncHJlZml4JyA9PiAnJywKICAgICAgICAgICAgJ3ByZWZpeF9pbmRleGVzJyA9PiB0cnVlLAogICAgICAgICAgICAnc2NoZW1hJyA9PiAncHVibGljJywKICAgICAgICAgICAgJ3NzbG1vZGUnID0+ICdwcmVmZXInLAogICAgICAgIF0sCgogICAgICAgICdzcWxzcnYnID0+IFsKICAgICAgICAgICAgJ2RyaXZlcicgPT4gJ3NxbHNydicsCiAgICAgICAgICAgICd1cmwnID0+IGVudignREFUQUJBU0VfVVJMJyksCiAgICAgICAgICAgICdob3N0JyA9PiBlbnYoJ0RCX0hPU1QnLCAnbG9jYWxob3N0JyksCiAgICAgICAgICAgICdwb3J0JyA9PiBlbnYoJ0RCX1BPUlQnLCAnMTQzMycpLAogICAgICAgICAgICAnZGF0YWJhc2UnID0+IGVudignREJfREFUQUJBU0UnLCAnZm9yZ2UnKSwKICAgICAgICAgICAgJ3VzZXJuYW1lJyA9PiBlbnYoJ0RCX1VTRVJOQU1FJywgJ2ZvcmdlJyksCiAgICAgICAgICAgICdwYXNzd29yZCcgPT4gZW52KCdEQl9QQVNTV09SRCcsICcnKSwKICAgICAgICAgICAgJ2NoYXJzZXQnID0+ICd1dGY4JywKICAgICAgICAgICAgJ3ByZWZpeCcgPT4gJycsCiAgICAgICAgICAgICdwcmVmaXhfaW5kZXhlcycgPT4gdHJ1ZSwKICAgICAgICBdLAoKICAgIF0sCgogICAgLyoKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfCBNaWdyYXRpb24gUmVwb3NpdG9yeSBUYWJsZQogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8CiAgICB8IFRoaXMgdGFibGUga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBtaWdyYXRpb25zIHRoYXQgaGF2ZSBhbHJlYWR5IHJ1biBmb3IKICAgIHwgeW91ciBhcHBsaWNhdGlvbi4gVXNpbmcgdGhpcyBpbmZvcm1hdGlvbiwgd2UgY2FuIGRldGVybWluZSB3aGljaCBvZgogICAgfCB0aGUgbWlncmF0aW9ucyBvbiBkaXNrIGhhdmVuJ3QgYWN0dWFsbHkgYmVlbiBydW4gaW4gdGhlIGRhdGFiYXNlLgogICAgfAogICAgKi8KCiAgICAnbWlncmF0aW9ucycgPT4gJ21pZ3JhdGlvbnMnLAoKICAgIC8qCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgUmVkaXMgRGF0YWJhc2VzCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgUmVkaXMgaXMgYW4gb3BlbiBzb3VyY2UsIGZhc3QsIGFuZCBhZHZhbmNlZCBrZXktdmFsdWUgc3RvcmUgdGhhdCBhbHNvCiAgICB8IHByb3ZpZGVzIGEgcmljaGVyIGJvZHkgb2YgY29tbWFuZHMgdGhhbiBhIHR5cGljYWwga2V5LXZhbHVlIHN5c3RlbQogICAgfCBzdWNoIGFzIEFQQyBvciBNZW1jYWNoZWQuIExhcmF2ZWwgbWFrZXMgaXQgZWFzeSB0byBkaWcgcmlnaHQgaW4uCiAgICB8CiAgICAqLwoKICAgICdyZWRpcycgPT4gWwoKICAgICAgICAnY2xpZW50JyA9PiBlbnYoJ1JFRElTX0NMSUVOVCcsICdwaHByZWRpcycpLAoKICAgICAgICAnb3B0aW9ucycgPT4gWwogICAgICAgICAgICAnY2x1c3RlcicgPT4gZW52KCdSRURJU19DTFVTVEVSJywgJ3JlZGlzJyksCiAgICAgICAgICAgICdwcmVmaXgnID0+IGVudignUkVESVNfUFJFRklYJywgU3RyOjpzbHVnKGVudignQVBQX05BTUUnLCAnbGFyYXZlbCcpLCAnXycpLidfZGF0YWJhc2VfJyksCiAgICAgICAgXSwKCiAgICAgICAgJ2RlZmF1bHQnID0+IFsKICAgICAgICAgICAgJ3VybCcgPT4gZW52KCdSRURJU19VUkwnKSwKICAgICAgICAgICAgJ2hvc3QnID0+IGVudignUkVESVNfSE9TVCcsICcxMjcuMC4wLjEnKSwKICAgICAgICAgICAgJ3Bhc3N3b3JkJyA9PiBlbnYoJ1JFRElTX1BBU1NXT1JEJywgbnVsbCksCiAgICAgICAgICAgICdwb3J0JyA9PiBlbnYoJ1JFRElTX1BPUlQnLCA2Mzc5KSwKICAgICAgICAgICAgJ2RhdGFiYXNlJyA9PiBlbnYoJ1JFRElTX0RCJywgMCksCi8vICAgICAgICAgICAgJ3BhcmFtZXRlcnMnPT5bCi8vICAgICAgICAgICAgICAgICdwYXNzd29yZCc9PmVudignUkVESVNfUEFTU1dPUkQnLCBudWxsKQovLyAgICAgICAgICAgIF0KICAgICAgICBdLAogICAgICAgICdwcmljZV9uZXcnID0+IFsKICAgICAgICAgICAgJ3VybCcgPT4gZW52KCdSRURJU19VUkwnKSwKICAgICAgICAgICAgJ2hvc3QnID0+IGVudignUkVESVNfSE9TVCcsICcxMjcuMC4wLjEnKSwKICAgICAgICAgICAgJ3Bhc3N3b3JkJyA9PiBlbnYoJ1JFRElTX1BBU1NXT1JEJywgbnVsbCksCiAgICAgICAgICAgICdwb3J0JyA9PiBlbnYoJ1JFRElTX1BPUlQnLCA2Mzc5KSwKICAgICAgICAgICAgJ2RhdGFiYXNlJyA9PiBlbnYoJ1JFRElTX0RCXzInLCAyKSwKICAgICAgICBdLAogICAgICAgICd1YXRfc291cmNlJyA9PiBbCiAgICAgICAgICAgICd1cmwnID0+IGVudignUkVESVNfVVJMJyksCiAgICAgICAgICAgICdob3N0JyA9PiBlbnYoJ1JFRElTX0hPU1QnLCAnMTI3LjAuMC4xJyksCiAgICAgICAgICAgICdwYXNzd29yZCcgPT4gZW52KCdSRURJU19QQVNTV09SRCcsIG51bGwpLAogICAgICAgICAgICAncG9ydCcgPT4gZW52KCdSRURJU19QT1JUJywgNjM3OSksCiAgICAgICAgICAgICdkYXRhYmFzZScgPT4gZW52KCdSRURJU19EQl9VQVRfU09VUkNFJywgNSksCiAgICAgICAgICAgICdvcHRpb25zJyA9PiBbCiAgICAgICAgICAgICAgICAncHJlZml4JyA9PiAnJywKICAgICAgICAgICAgXSwKICAgICAgICBdLAogICAgICAgICd1YXQnID0+IFsKICAgICAgICAgICAgJ3VybCcgPT4gZW52KCdSRURJU19VUkwnKSwKICAgICAgICAgICAgJ2hvc3QnID0+IGVudignUkVESVNfSE9TVCcsICcxMjcuMC4wLjEnKSwKICAgICAgICAgICAgJ3Bhc3N3b3JkJyA9PiBlbnYoJ1JFRElTX1BBU1NXT1JEJywgbnVsbCksCiAgICAgICAgICAgICdwb3J0JyA9PiBlbnYoJ1JFRElTX1BPUlQnLCA2Mzc5KSwKICAgICAgICAgICAgJ2RhdGFiYXNlJyA9PiBlbnYoJ1JFRElTX0RCX1VBVCcsIDYpLAogICAgICAgICAgICAnb3B0aW9ucycgPT4gWwogICAgICAgICAgICAgICAgJ3ByZWZpeCcgPT4gJycsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSwKCiAgICAgICAgJ2NhY2hlJyA9PiBbCiAgICAgICAgICAgICd1cmwnID0+IGVudignUkVESVNfVVJMJyksCiAgICAgICAgICAgICdob3N0JyA9PiBlbnYoJ1JFRElTX0hPU1QnLCAnMTI3LjAuMC4xJyksCiAgICAgICAgICAgICdwYXNzd29yZCcgPT4gZW52KCdSRURJU19QQVNTV09SRCcsIG51bGwpLAogICAgICAgICAgICAncG9ydCcgPT4gZW52KCdSRURJU19QT1JUJywgNjM3OSksCiAgICAgICAgICAgICdkYXRhYmFzZScgPT4gZW52KCdSRURJU19DQUNIRV9EQicsIDEpLAogICAgICAgIF0sCgogICAgXSwKCl07Cg==PD9waHAKCnJldHVybiBbCgogICAgLyoKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfCBEZWZhdWx0IEZpbGVzeXN0ZW0gRGlzawogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8CiAgICB8IEhlcmUgeW91IG1heSBzcGVjaWZ5IHRoZSBkZWZhdWx0IGZpbGVzeXN0ZW0gZGlzayB0aGF0IHNob3VsZCBiZSB1c2VkCiAgICB8IGJ5IHRoZSBmcmFtZXdvcmsuIFRoZSAibG9jYWwiIGRpc2ssIGFzIHdlbGwgYXMgYSB2YXJpZXR5IG9mIGNsb3VkCiAgICB8IGJhc2VkIGRpc2tzIGFyZSBhdmFpbGFibGUgdG8geW91ciBhcHBsaWNhdGlvbi4gSnVzdCBzdG9yZSBhd2F5IQogICAgfAogICAgKi8KCiAgICAnZGVmYXVsdCcgPT4gZW52KCdGSUxFU1lTVEVNX0RSSVZFUicsICdsb2NhbCcpLAoKICAgIC8qCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgRGVmYXVsdCBDbG91ZCBGaWxlc3lzdGVtIERpc2sKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfAogICAgfCBNYW55IGFwcGxpY2F0aW9ucyBzdG9yZSBmaWxlcyBib3RoIGxvY2FsbHkgYW5kIGluIHRoZSBjbG91ZC4gRm9yIHRoaXMKICAgIHwgcmVhc29uLCB5b3UgbWF5IHNwZWNpZnkgYSBkZWZhdWx0ICJjbG91ZCIgZHJpdmVyIGhlcmUuIFRoaXMgZHJpdmVyCiAgICB8IHdpbGwgYmUgYm91bmQgYXMgdGhlIENsb3VkIGRpc2sgaW1wbGVtZW50YXRpb24gaW4gdGhlIGNvbnRhaW5lci4KICAgIHwKICAgICovCgogICAgJ2Nsb3VkJyA9PiBlbnYoJ0ZJTEVTWVNURU1fQ0xPVUQnLCAnczMnKSwKCiAgICAvKgogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8IEZpbGVzeXN0ZW0gRGlza3MKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfAogICAgfCBIZXJlIHlvdSBtYXkgY29uZmlndXJlIGFzIG1hbnkgZmlsZXN5c3RlbSAiZGlza3MiIGFzIHlvdSB3aXNoLCBhbmQgeW91CiAgICB8IG1heSBldmVuIGNvbmZpZ3VyZSBtdWx0aXBsZSBkaXNrcyBvZiB0aGUgc2FtZSBkcml2ZXIuIERlZmF1bHRzIGhhdmUKICAgIHwgYmVlbiBzZXR1cCBmb3IgZWFjaCBkcml2ZXIgYXMgYW4gZXhhbXBsZSBvZiB0aGUgcmVxdWlyZWQgb3B0aW9ucy4KICAgIHwKICAgIHwgU3VwcG9ydGVkIERyaXZlcnM6ICJsb2NhbCIsICJmdHAiLCAic2Z0cCIsICJzMyIKICAgIHwKICAgICovCgogICAgJ2Rpc2tzJyA9PiBbCgogICAgICAgICdsb2NhbCcgPT4gWwogICAgICAgICAgICAnZHJpdmVyJyA9PiAnbG9jYWwnLAogICAgICAgICAgICAncm9vdCcgPT4gc3RvcmFnZV9wYXRoKCdhcHAnKSwKICAgICAgICBdLAoKICAgICAgICAncHVibGljJyA9PiBbCiAgICAgICAgICAgICdkcml2ZXInID0+ICdsb2NhbCcsCiAgICAgICAgICAgICdyb290JyA9PiBzdG9yYWdlX3BhdGgoJ2FwcC9wdWJsaWMnKSwKICAgICAgICAgICAgJ3VybCcgPT4gZW52KCdBUFBfVVJMJykuJy9zdG9yYWdlJywKICAgICAgICAgICAgJ3Zpc2liaWxpdHknID0+ICdwdWJsaWMnLAogICAgICAgIF0sCgogICAgICAgICdhZG1pbicgPT4gWwogICAgICAgICAgICAnZHJpdmVyJyA9PiAnbG9jYWwnLAogICAgICAgICAgICAncm9vdCcgPT4gc3RvcmFnZV9wYXRoKCdhcHAvYWRtaW4nKSwKICAgICAgICAgICAgJ3VybCcgPT4gZW52KCdBUFBfVVJMJykgLiAnL2FkbWluX3N0b3JhZ2UnLAogICAgICAgICAgICAndmlzaWJpbGl0eScgPT4gJ3B1YmxpYycsCiAgICAgICAgXSwKLy/miYvliqjliJvlu7rova/ov57mjqUgbG4gLXMgL3BhdGgvdG8vcm9vdC9zdG9yYWdlL2FwcC9hZG1pbiBwdWJsaWMvYWRtaW5fc3RvcmFnZQoKICAgICAgICAnczMnID0+IFsKICAgICAgICAgICAgJ2RyaXZlcicgPT4gJ3MzJywKICAgICAgICAgICAgJ2tleScgPT4gZW52KCdBV1NfQUNDRVNTX0tFWV9JRCcpLAogICAgICAgICAgICAnc2VjcmV0JyA9PiBlbnYoJ0FXU19TRUNSRVRfQUNDRVNTX0tFWScpLAogICAgICAgICAgICAncmVnaW9uJyA9PiBlbnYoJ0FXU19ERUZBVUxUX1JFR0lPTicpLAogICAgICAgICAgICAnYnVja2V0JyA9PiBlbnYoJ0FXU19CVUNLRVQnKSwKICAgICAgICAgICAgJ3VybCcgPT4gZW52KCdBV1NfVVJMJyksCiAgICAgICAgXSwKCiAgICBdLAoKICAgICdsaW5rcycgPT4gWwogICAgICAgIHB1YmxpY19wYXRoKCdzdG9yYWdlJykgPT4gc3RvcmFnZV9wYXRoKCdhcHAvcHVibGljJyksCiAgICAgICAgcHVibGljX3BhdGgoJ2FkbWluX3N0b3JhZ2UnKSA9PiBzdG9yYWdlX3BhdGgoJ2FwcC9hZG1pbicpLAogICAgXSwKCgpdOwo=PD9waHAKCnJldHVybiBbCgogICAgLyoKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfCBNYWlsIERyaXZlcgogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8CiAgICB8IExhcmF2ZWwgc3VwcG9ydHMgYm90aCBTTVRQIGFuZCBQSFAncyAibWFpbCIgZnVuY3Rpb24gYXMgZHJpdmVycyBmb3IgdGhlCiAgICB8IHNlbmRpbmcgb2YgZS1tYWlsLiBZb3UgbWF5IHNwZWNpZnkgd2hpY2ggb25lIHlvdSdyZSB1c2luZyB0aHJvdWdob3V0CiAgICB8IHlvdXIgYXBwbGljYXRpb24gaGVyZS4gQnkgZGVmYXVsdCwgTGFyYXZlbCBpcyBzZXR1cCBmb3IgU01UUCBtYWlsLgogICAgfAogICAgfCBTdXBwb3J0ZWQ6ICJzbXRwIiwgInNlbmRtYWlsIiwgIm1haWxndW4iLCAic2VzIiwKICAgIHwgICAgICAgICAgICAicG9zdG1hcmsiLCAibG9nIiwgImFycmF5IgogICAgfAogICAgKi8KCiAgICAnZHJpdmVyJyA9PiBlbnYoJ01BSUxfRFJJVkVSJywgJ3NtdHAnKSwKCiAgICAvKgogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8IFNNVFAgSG9zdCBBZGRyZXNzCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgSGVyZSB5b3UgbWF5IHByb3ZpZGUgdGhlIGhvc3QgYWRkcmVzcyBvZiB0aGUgU01UUCBzZXJ2ZXIgdXNlZCBieSB5b3VyCiAgICB8IGFwcGxpY2F0aW9ucy4gQSBkZWZhdWx0IG9wdGlvbiBpcyBwcm92aWRlZCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aAogICAgfCB0aGUgTWFpbGd1biBtYWlsIHNlcnZpY2Ugd2hpY2ggd2lsbCBwcm92aWRlIHJlbGlhYmxlIGRlbGl2ZXJpZXMuCiAgICB8CiAgICAqLwoKICAgICdob3N0JyA9PiBlbnYoJ01BSUxfSE9TVCcsICdzbXRwLm1haWxndW4ub3JnJyksCgogICAgLyoKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfCBTTVRQIEhvc3QgUG9ydAogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8CiAgICB8IFRoaXMgaXMgdGhlIFNNVFAgcG9ydCB1c2VkIGJ5IHlvdXIgYXBwbGljYXRpb24gdG8gZGVsaXZlciBlLW1haWxzIHRvCiAgICB8IHVzZXJzIG9mIHRoZSBhcHBsaWNhdGlvbi4gTGlrZSB0aGUgaG9zdCB3ZSBoYXZlIHNldCB0aGlzIHZhbHVlIHRvCiAgICB8IHN0YXkgY29tcGF0aWJsZSB3aXRoIHRoZSBNYWlsZ3VuIGUtbWFpbCBhcHBsaWNhdGlvbiBieSBkZWZhdWx0LgogICAgfAogICAgKi8KCiAgICAncG9ydCcgPT4gZW52KCdNQUlMX1BPUlQnLCA1ODcpLAoKICAgIC8qCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgR2xvYmFsICJGcm9tIiBBZGRyZXNzCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgWW91IG1heSB3aXNoIGZvciBhbGwgZS1tYWlscyBzZW50IGJ5IHlvdXIgYXBwbGljYXRpb24gdG8gYmUgc2VudCBmcm9tCiAgICB8IHRoZSBzYW1lIGFkZHJlc3MuIEhlcmUsIHlvdSBtYXkgc3BlY2lmeSBhIG5hbWUgYW5kIGFkZHJlc3MgdGhhdCBpcwogICAgfCB1c2VkIGdsb2JhbGx5IGZvciBhbGwgZS1tYWlscyB0aGF0IGFyZSBzZW50IGJ5IHlvdXIgYXBwbGljYXRpb24uCiAgICB8CiAgICAqLwoKICAgICdmcm9tJyA9PiBbCiAgICAgICAgJ2FkZHJlc3MnID0+IGVudignTUFJTF9GUk9NX0FERFJFU1MnLCAnaGVsbG9AZXhhbXBsZS5jb20nKSwKICAgICAgICAnbmFtZScgPT4gZW52KCdNQUlMX0ZST01fTkFNRScsICdFeGFtcGxlJyksCiAgICBdLAoKICAgIC8qCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgRS1NYWlsIEVuY3J5cHRpb24gUHJvdG9jb2wKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfAogICAgfCBIZXJlIHlvdSBtYXkgc3BlY2lmeSB0aGUgZW5jcnlwdGlvbiBwcm90b2NvbCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4KICAgIHwgdGhlIGFwcGxpY2F0aW9uIHNlbmQgZS1tYWlsIG1lc3NhZ2VzLiBBIHNlbnNpYmxlIGRlZmF1bHQgdXNpbmcgdGhlCiAgICB8IHRyYW5zcG9ydCBsYXllciBzZWN1cml0eSBwcm90b2NvbCBzaG91bGQgcHJvdmlkZSBncmVhdCBzZWN1cml0eS4KICAgIHwKICAgICovCgogICAgJ2VuY3J5cHRpb24nID0+IGVudignTUFJTF9FTkNSWVBUSU9OJywgJ3RscycpLAoKICAgIC8qCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgU01UUCBTZXJ2ZXIgVXNlcm5hbWUKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfAogICAgfCBJZiB5b3VyIFNNVFAgc2VydmVyIHJlcXVpcmVzIGEgdXNlcm5hbWUgZm9yIGF1dGhlbnRpY2F0aW9uLCB5b3Ugc2hvdWxkCiAgICB8IHNldCBpdCBoZXJlLiBUaGlzIHdpbGwgZ2V0IHVzZWQgdG8gYXV0aGVudGljYXRlIHdpdGggeW91ciBzZXJ2ZXIgb24KICAgIHwgY29ubmVjdGlvbi4gWW91IG1heSBhbHNvIHNldCB0aGUgInBhc3N3b3JkIiB2YWx1ZSBiZWxvdyB0aGlzIG9uZS4KICAgIHwKICAgICovCgogICAgJ3VzZXJuYW1lJyA9PiBlbnYoJ01BSUxfVVNFUk5BTUUnKSwKCiAgICAncGFzc3dvcmQnID0+IGVudignTUFJTF9QQVNTV09SRCcpLAoKICAgIC8qCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgU2VuZG1haWwgU3lzdGVtIFBhdGgKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfAogICAgfCBXaGVuIHVzaW5nIHRoZSAic2VuZG1haWwiIGRyaXZlciB0byBzZW5kIGUtbWFpbHMsIHdlIHdpbGwgbmVlZCB0byBrbm93CiAgICB8IHRoZSBwYXRoIHRvIHdoZXJlIFNlbmRtYWlsIGxpdmVzIG9uIHRoaXMgc2VydmVyLiBBIGRlZmF1bHQgcGF0aCBoYXMKICAgIHwgYmVlbiBwcm92aWRlZCBoZXJlLCB3aGljaCB3aWxsIHdvcmsgd2VsbCBvbiBtb3N0IG9mIHlvdXIgc3lzdGVtcy4KICAgIHwKICAgICovCgogICAgJ3NlbmRtYWlsJyA9PiAnL3Vzci9zYmluL3NlbmRtYWlsIC1icycsCgogICAgLyoKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfCBNYXJrZG93biBNYWlsIFNldHRpbmdzCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgSWYgeW91IGFyZSB1c2luZyBNYXJrZG93biBiYXNlZCBlbWFpbCByZW5kZXJpbmcsIHlvdSBtYXkgY29uZmlndXJlIHlvdXIKICAgIHwgdGhlbWUgYW5kIGNvbXBvbmVudCBwYXRocyBoZXJlLCBhbGxvd2luZyB5b3UgdG8gY3VzdG9taXplIHRoZSBkZXNpZ24KICAgIHwgb2YgdGhlIGVtYWlscy4gT3IsIHlvdSBtYXkgc2ltcGx5IHN0aWNrIHdpdGggdGhlIExhcmF2ZWwgZGVmYXVsdHMhCiAgICB8CiAgICAqLwoKICAgICdtYXJrZG93bicgPT4gWwogICAgICAgICd0aGVtZScgPT4gJ2RlZmF1bHQnLAoKICAgICAgICAncGF0aHMnID0+IFsKICAgICAgICAgICAgcmVzb3VyY2VfcGF0aCgndmlld3MvdmVuZG9yL21haWwnKSwKICAgICAgICBdLAogICAgXSwKCiAgICAvKgogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8IExvZyBDaGFubmVsCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwKICAgIHwgSWYgeW91IGFyZSB1c2luZyB0aGUgImxvZyIgZHJpdmVyLCB5b3UgbWF5IHNwZWNpZnkgdGhlIGxvZ2dpbmcgY2hhbm5lbAogICAgfCBpZiB5b3UgcHJlZmVyIHRvIGtlZXAgbWFpbCBtZXNzYWdlcyBzZXBhcmF0ZSBmcm9tIG90aGVyIGxvZyBlbnRyaWVzCiAgICB8IGZvciBzaW1wbGVyIHJlYWRpbmcuIE90aGVyd2lzZSwgdGhlIGRlZmF1bHQgY2hhbm5lbCB3aWxsIGJlIHVzZWQuCiAgICB8CiAgICAqLwoKICAgICdsb2dfY2hhbm5lbCcgPT4gZW52KCdNQUlMX0xPR19DSEFOTkVMJyksCgpdOwo=PD9waHAKCnJldHVybiBbCgogICAgLyoKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfCBUaGlyZCBQYXJ0eSBTZXJ2aWNlcwogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB8CiAgICB8IFRoaXMgZmlsZSBpcyBmb3Igc3RvcmluZyB0aGUgY3JlZGVudGlhbHMgZm9yIHRoaXJkIHBhcnR5IHNlcnZpY2VzIHN1Y2gKICAgIHwgYXMgTWFpbGd1biwgUG9zdG1hcmssIEFXUyBhbmQgbW9yZS4gVGhpcyBmaWxlIHByb3ZpZGVzIHRoZSBkZSBmYWN0bwogICAgfCBsb2NhdGlvbiBmb3IgdGhpcyB0eXBlIG9mIGluZm9ybWF0aW9uLCBhbGxvd2luZyBwYWNrYWdlcyB0byBoYXZlCiAgICB8IGEgY29udmVudGlvbmFsIGZpbGUgdG8gbG9jYXRlIHRoZSB2YXJpb3VzIHNlcnZpY2UgY3JlZGVudGlhbHMuCiAgICB8CiAgICAqLwoKICAgICdtYWlsZ3VuJyA9PiBbCiAgICAgICAgJ2RvbWFpbicgPT4gZW52KCdNQUlMR1VOX0RPTUFJTicpLAogICAgICAgICdzZWNyZXQnID0+IGVudignTUFJTEdVTl9TRUNSRVQnKSwKICAgICAgICAnZW5kcG9pbnQnID0+IGVudignTUFJTEdVTl9FTkRQT0lOVCcsICdhcGkubWFpbGd1bi5uZXQnKSwKICAgIF0sCgogICAgJ3Bvc3RtYXJrJyA9PiBbCiAgICAgICAgJ3Rva2VuJyA9PiBlbnYoJ1BPU1RNQVJLX1RPS0VOJyksCiAgICBdLAoKICAgICdzZXMnID0+IFsKICAgICAgICAna2V5JyA9PiBlbnYoJ0FXU19BQ0NFU1NfS0VZX0lEJyksCiAgICAgICAgJ3NlY3JldCcgPT4gZW52KCdBV1NfU0VDUkVUX0FDQ0VTU19LRVknKSwKICAgICAgICAncmVnaW9uJyA9PiBlbnYoJ0FXU19ERUZBVUxUX1JFR0lPTicsICd1cy1lYXN0LTEnKSwKICAgIF0sCgpdOwo=