# Name: ied_plugin_composer v1.2.1 # Type: Admin/Public/AJAX plugin # Create, publish and edit plugins from within Textpattern CMS # Author: Yura Linnyk, Stef Dawson, Steve Dickinson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern CMS - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMjp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjY6ImF1dGhv ciI7czo0MToiWXVyYSBMaW5ueWssIFN0ZWYgRGF3c29uLCBTdGV2ZSBEaWNraW5zb24iO3M6 MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS8iO3M6NzoidmVy c2lvbiI7czo1OiIxLjIuMSI7czoxMToiZGVzY3JpcHRpb24iO3M6NjA6IkNyZWF0ZSwgcHVi bGlzaCBhbmQgZWRpdCBwbHVnaW5zIGZyb20gd2l0aGluIFRleHRwYXR0ZXJuIENNUyI7czo0 OiJjb2RlIjtzOjE2OTQwNToiLy8gPD9waHAKLyoqCiAqIGllZF9wbHVnaW5fY29tcG9zZXIK ICoKICogQSBUZXh0cGF0dGVybiBDTVMgcGx1Z2luIGZvciB3cml0aW5nLCBlZGl0aW5nIGFu ZCBzaGFyaW5nIHBsdWdpbnMKICogIC0+IENyZWF0ZSBhbmQgZWRpdCBhZG1pbi1zaWRlIG9y IHB1YmxpYyBwbHVnaW5zCiAqICAtPiBTdXBwb3J0cyBwbHVnaW4gbGlmZWN5Y2xlIGV2ZW50 cyBhbmQgcHJlZnMKICogIC0+IFN1cHBvcnRzIFRleHRwYWNrcwogKiAgLT4gT3B0aW9uYWwg c3ludGF4IGNoZWNrZXIgb24gc2F2ZQogKgogKiBAYXV0aG9yIFl1cmEgTGlubnlrCiAqIEBh dXRob3IgU3RlZiBEYXdzb24KICogQGF1dGhvciBTdGV2ZSBEaWNraW5zb24KICogQGxpbmsg ICBodHRwOi8vc3RlZmRhd3Nvbi5jb20vCiAqLwoKLy8gVE9ETzoKLy8gICogVXNlIGhyZWYo KSAoZnJvbSA0LjYuKykgZm9yIGFuY2hvciBjcmVhdGlvbiB0byBhdm9pZCBkb3VibGUtZW5j b2RlZCBhbXBlcnNhbmRzCi8vICAqIEZpZ3VyZSBvdXQgd2h5IHN5bnRheCBjaGVja2VyIGRv ZXNuJ3QganVtcCB0byBsaW5lIG51bWJlciBzb21ldGltZXMgKEFKQVggZmFpbHMgd2l0aCBl cnJvciBidXQgaXQncyBub3QgaGFuZGxlZCkKLy8gICogU2hvdyB3aGljaCBsYW5ncyBoYXZl IGluc3RhbGxlZCBzdHJpbmdzIGluIHRoZSBkaXN0cmlidXRpb24gc2VjdGlvbiBzbyB0aGUg Y29ycmVjdCBsYW5ncyBpbiB0aGUgc2VsZWN0IGxpc3QgY2FuIGJlIGNob3NlbgovLyAgKiBG aW5kIG91dCB3aHkgdXBsb2FkaW5nIFBIUCBmaWxlcyBzb21ldGllbXMgdGhyb3dzIGFuIGVy cm9yIGV2ZW4gdGhvdWdoIGl0IHN1Y2NlZWRzCi8vICAqIGpRdWVyeSBvbiBlZGl0b3IgZHJv cGRvd25zIGluIHNldHVwCi8vICAqIHBocGRvYwoKaWYgKHR4cGludGVyZmFjZSA9PT0gJ2Fk bWluJykgewogICAgbmV3IGllZF9wYygpOwp9IGVsc2VpZiAodHhwaW50ZXJmYWNlID09PSAn cHVibGljJykgewogICAgaWYgKGNsYXNzX2V4aXN0cygnXFRleHRwYXR0ZXJuXFRhZ1xSZWdp c3RyeScpKSB7CiAgICAgICAgVHhwOjpnZXQoJ1xUZXh0cGF0dGVyblxUYWdcUmVnaXN0cnkn KQogICAgICAgICAgICAtPnJlZ2lzdGVyKCdpZWRfcGx1Z2luX2xpc3QnKQogICAgICAgICAg ICAtPnJlZ2lzdGVyKCdpZWRfcGx1Z2luX2luZm8nKQogICAgICAgICAgICAtPnJlZ2lzdGVy KCdpZWRfcGx1Z2luX3RleHRwYWNrcycpCiAgICAgICAgICAgIC0+cmVnaXN0ZXIoJ2llZF9w bHVnaW5fZG93bmxvYWQnKQogICAgICAgICAgICAtPnJlZ2lzdGVyKCdpZWRfcGx1Z2luX2Rv d25sb2FkX2xpbmsnKTsKICAgIH0KCiAgICByZWdpc3Rlcl9jYWxsYmFjaygnaWVkX3BsdWdp bl9kb3dubG9hZCcsICdwcmV0ZXh0Jyk7CgogICAgLyoKICAgICAqIFB1YmxpYyB0YWc6IExp c3QgcGx1Z2lucywgZmlsdGVyZWQgYnkgbmFtZSBvciBwcmVmaXguCiAgICAgKgogICAgICog QHBhcmFtIGFycmF5ICAkYXR0cyAgVGFnIGF0dHJpYnV0ZXMKICAgICAqIEBwYXJhbSBzdHJp bmcgJHRoaW5nIFRhZyBjb250YWluZXIgY29udGVudAogICAgICovCiAgICBmdW5jdGlvbiBp ZWRfcGx1Z2luX2xpc3QoJGF0dHMgPSBhcnJheSgpLCAkdGhpbmcgPSBudWxsKQogICAgewog ICAgICAgIGdsb2JhbCAkaWVkX3BsdWdpbl9kYXRhOwoKICAgICAgICBleHRyYWN0KGxBdHRz KGFycmF5KAogICAgICAgICAgICAnZnJvbScgICAgICAgPT4gJ2RhdGFiYXNlJywgLy8gZGF0 YWJhc2UsIGNhY2hlIChvciBib3RoKQogICAgICAgICAgICAnbmFtZScgICAgICAgPT4gJycs IC8vIExpc3Qgb2YgcGx1Z2luIG5hbWVzIHRvIHJldHVybgogICAgICAgICAgICAncHJlZml4 JyAgICAgPT4gJycsIC8vIFBsdWdpbiBwcmVmaXhlcwogICAgICAgICAgICAnZXhjbHVkZScg ICAgPT4gJycsIC8vIG5hbWVzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgbGlzdAogICAgICAgICAg ICAndHlwZScgICAgICAgPT4gJycsIC8vIDAtNSBvciBjb21tYS1zZXBhcmF0ZWQgY29tYm9z IHRoZXJlb2YKICAgICAgICAgICAgJ3dyYXB0YWcnICAgID0+ICcnLAogICAgICAgICAgICAn Y2xhc3MnICAgICAgPT4gJycsCiAgICAgICAgICAgICdicmVhaycgICAgICA9PiAnJywKICAg ICAgICAgICAgJ2JyZWFrY2xhc3MnID0+ICcnLAogICAgICAgICAgICAnaHRtbF9pZCcgICAg PT4gJycsCiAgICAgICAgICAgICdmb3JtJyAgICAgICA9PiAnJywKICAgICAgICApLCRhdHRz KSk7CgogICAgICAgICR0aGluZyA9IChlbXB0eSgkZm9ybSkpID8gKChlbXB0eSgkdGhpbmcp KSA/ICc8dHhwOmllZF9wbHVnaW5faW5mbyBpdGVtPSJuYW1lIiAvPicgOiAkdGhpbmcpIDog ZmV0Y2hfZm9ybSgkZm9ybSk7CgogICAgICAgICRsb2NhdGlvbiA9IGRvX2xpc3QoJGZyb20p OwogICAgICAgICRuYW1lcyA9IGRvX2xpc3QoJG5hbWUpOwogICAgICAgICRwcmVmaXhlcyA9 IGRvX2xpc3QoJHByZWZpeCk7CiAgICAgICAgJGV4Y2x1ZGVzID0gZG9fbGlzdCgkZXhjbHVk ZSk7CgogICAgICAgIGlmIChpbl9hcnJheSgnZGF0YWJhc2UnLCAkbG9jYXRpb24pKSB7CiAg ICAgICAgICAgICRzcWwgPSBhcnJheSgpOwogICAgICAgICAgICAkc3FsW10gPSAnMSc7CiAg ICAgICAgICAgIGlmICgkbmFtZSkgewogICAgICAgICAgICAgICAgJHNxbFtdID0gIm5hbWUg SU4gKCciLmltcGxvZGUoIicsJyIsIGRvU2xhc2goJG5hbWVzKSkuIicpIjsKICAgICAgICAg ICAgfQogICAgICAgICAgICBpZiAoJHByZWZpeCkgewogICAgICAgICAgICAgICAgJHNxbG9y ID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcmVmaXhlcyBhcyAkcGZ4 KSB7CiAgICAgICAgICAgICAgICAgICAgJHNxbG9yW10gPSAibmFtZSBMSUtFICciLmRvU2xh c2goJHBmeCkuIiUnIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRzcWxb XSA9ICcoJyAuIGltcGxvZGUoJyBPUiAnLCAkc3Fsb3IpIC4gJyknOwogICAgICAgICAgICB9 CiAgICAgICAgICAgIGlmICgkZXhjbHVkZSkgewogICAgICAgICAgICAgICAgJHNxbFtdID0g Im5hbWUgTk9UIElOICgnIi5pbXBsb2RlKCInLCciLCBkb1NsYXNoKCRleGNsdWRlcykpLiIn KSI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRycyA9IHNhZmVfcm93cygnKicsICd0 eHBfcGx1Z2luJywgaW1wbG9kZSgnIEFORCAnLCAkc3FsKSAuICcgT1JERVIgQlkgbmFtZScp OwogICAgICAgIH0KCiAgICAgICAgLy8gVE9ETzogQWRkIHRoZSBtZXRhIGRhdGEgZnJvbSBt YXRjaGluZyBwbHVnaW5zIGluIHRoZSBjYWNoZSBkaXJlY3RvcnkKICAgICAgICBpZiAoaW5f YXJyYXkoJ2NhY2hlJywgJGxvY2F0aW9uKSkgewoKCiAgICAgICAgfQoKICAgICAgICAkb3V0 ID0gYXJyYXkoKTsKICAgICAgICAkaWVkX3BkX3NhdmVkID0gJGllZF9wbHVnaW5fZGF0YTsK CiAgICAgICAgZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsKICAgICAgICAgICAgJGllZF9wbHVn aW5fZGF0YSA9ICRyb3c7CiAgICAgICAgICAgICRpZWRfcGx1Z2luX2RhdGFbJ2hlbHBfdW5z dHlsZWQnXSA9IHByZWdfcmVwbGFjZSgnL1w8XCFcLVwtIFwqXCpcKiBCRUdJTiBQTFVHSU4g Q1NTLitFTkQgUExVR0lOIENTUyBcKlwqXCogXC1cLVw+L3MnLCAnJywgJHJvd1snaGVscCdd KTsKICAgICAgICAgICAgJG91dFtdID0gcGFyc2UoJHRoaW5nKTsKICAgICAgICAgICAgJGll ZF9wbHVnaW5fZGF0YSA9IGFycmF5KCk7CiAgICAgICAgfQoKICAgICAgICAkaWVkX3BsdWdp bl9kYXRhID0gJGllZF9wZF9zYXZlZDsKCiAgICAgICAgcmV0dXJuICgkd3JhcHRhZykgPyBk b1dyYXAoJG91dCwgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzLCAkYnJlYWtjbGFzcywgJycs ICcnLCAkaHRtbF9pZCkgOiBpbXBsb2RlKCRicmVhaywgJG91dCk7CiAgICB9CgogICAgLyoq CiAgICAgKiBQdWJsaWMgdGFnOiBEaXNwbGF5IHBsdWdpbiBkYXRhIGZvciBmb3JtL2NvbnRh aW5lciB1c2FnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgICRhdHRzICBUYWcgYXR0 cmlidXRlcwogICAgICogQHBhcmFtIHN0cmluZyAkdGhpbmcgVGFnIGNvbnRhaW5lciBjb250 ZW50CiAgICAgKi8KICAgIGZ1bmN0aW9uIGllZF9wbHVnaW5faW5mbygkYXR0cywgJHRoaW5n ID0gbnVsbCkKICAgIHsKICAgICAgICBnbG9iYWwgJGllZF9wbHVnaW5fZGF0YTsKCiAgICAg ICAgZXh0cmFjdChsQXR0cyhhcnJheSgKICAgICAgICAgICAgJ2l0ZW0nICAgID0+ICcnLAog ICAgICAgICAgICAnd3JhcHRhZycgPT4gJycsCiAgICAgICAgICAgICdicmVhaycgICA9PiAn JywKICAgICAgICAgICAgJ2NsYXNzJyAgID0+ICcnLAogICAgICAgICAgICAnZGVidWcnICAg PT4gMCwKICAgICAgICApLCAkYXR0cykpOwoKICAgICAgICAkcGRhdGEgPSBpc19hcnJheSgk aWVkX3BsdWdpbl9kYXRhKSA/ICRpZWRfcGx1Z2luX2RhdGEgOiBhcnJheSgpOwoKICAgICAg ICBpZiAoJGRlYnVnKSB7CiAgICAgICAgICAgIGVjaG8gJysrIEFWQUlMQUJMRSBJTkZPICsr JzsKICAgICAgICAgICAgZG1wKCRwZGF0YSk7CiAgICAgICAgfQoKICAgICAgICAkaXRlbXMg PSBkb19saXN0KCRpdGVtKTsKICAgICAgICAkb3V0ID0gYXJyYXkoKTsKCiAgICAgICAgZm9y ZWFjaCAoJGl0ZW1zIGFzICRpdCkgewogICAgICAgICAgICBpZiAoaXNzZXQoJHBkYXRhWyRp dF0pKSB7CiAgICAgICAgICAgICAgICAkb3V0W10gPSAkcGRhdGFbJGl0XTsKICAgICAgICAg ICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGRvV3JhcCgkb3V0LCAkd3JhcHRhZywg JGJyZWFrLCAkY2xhc3MpOwogICAgfQoKICAgIC8qKgogICAgICogUHVibGljIHRhZzogTGlz dCBvZiBhdmFpbGFibGUgdGV4dHBhY2sgaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogQHBh cmFtIGFycmF5ICAkYXR0cyAgVGFnIGF0dHJpYnV0ZXMKICAgICAqIEBwYXJhbSBzdHJpbmcg JHRoaW5nIFRhZyBjb250YWluZXIgY29udGVudAogICAgICovCiAgICBmdW5jdGlvbiBpZWRf cGx1Z2luX3RleHRwYWNrcygkYXR0cywgJHRoaW5nID0gbnVsbCkKICAgIHsKICAgICAgICBn bG9iYWwgJGllZF9wbHVnaW5fZGF0YTsKCiAgICAgICAgZXh0cmFjdChsQXR0cyhhcnJheSgK ICAgICAgICAgICAgJ25hbWUnICAgICA9PiAnJywKICAgICAgICAgICAgJ2ZpbGVuYW1lJyA9 PiAnJywKICAgICAgICAgICAgJ2xhbmcnICAgICA9PiAnSUVEX0FMTCcsCiAgICAgICAgICAg ICd3cmFwdGFnJyAgPT4gJycsCiAgICAgICAgICAgICdicmVhaycgICAgPT4gJycsCiAgICAg ICAgICAgICdjbGFzcycgICAgPT4gJycsCiAgICAgICAgICAgICdmb3JtJyAgICAgPT4gJycs CiAgICAgICAgKSwgJGF0dHMpKTsKCiAgICAgICAgaWYgKCEkbmFtZSAmJiAhJGZpbGVuYW1l KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICgkbmFtZSkg ewogICAgICAgICAgICAkdGhlTmFtZSA9ICRuYW1lOwogICAgICAgIH0gZWxzZWlmICgkZmls ZW5hbWUpIHsKICAgICAgICAgICAgJHRoZU5hbWUgPSAkZmlsZW5hbWU7CiAgICAgICAgfQoK ICAgICAgICAkdGhpbmcgPSAoZW1wdHkoJGZvcm0pKSA/ICgoZW1wdHkoJHRoaW5nKSkgPyAn PHR4cDppZWRfcGx1Z2luX2luZm8gaXRlbT0ibGFuZyIgLz4nIDogJHRoaW5nKSA6IGZldGNo X2Zvcm0oJGZvcm0pOwoKICAgICAgICAkbGFuZ3MgPSBhcnJheSgpOwogICAgICAgICR0cF9w cmVmaXhlcyA9IHVuc2VyaWFsaXplKGdldF9wcmVmKCdpZWRfcGx1Z2luX3RwX3ByZWZpeCcs ICcnKSk7CgogICAgICAgIGlmIChpc3NldCgkdHBfcHJlZml4ZXNbJHRoZU5hbWVdKSkgewog ICAgICAgICAgICAkc3RyaW5ncyA9IGllZF9wbHVnaW5fdGV4dHBhY2tfZ3JhYigkbGFuZywg JHRwX3ByZWZpeGVzWyR0aGVOYW1lXSk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRzdHJpbmdz IGFzICRyb3cpIHsKICAgICAgICAgICAgICAgIGlmIChhcnJheV9zZWFyY2goJHJvd1snbGFu ZyddLCAkbGFuZ3MpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICRsYW5nc1td ID0gJHJvd1snbGFuZyddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICAgICRvdXQgPSBhcnJheSgpOwogICAgICAgICRpZWRfcGRfc2F2ZWQgPSAk aWVkX3BsdWdpbl9kYXRhOwogICAgICAgICRpZHggPSAwOwogICAgICAgICRudW1fbGFuZ3Mg PSBjb3VudCgkbGFuZ3MpOwoKICAgICAgICBmb3JlYWNoICgkbGFuZ3MgYXMgJHJvdykgewog ICAgICAgICAgICAkaWVkX3BsdWdpbl9kYXRhWydsYW5nJ10gPSAkcm93OwogICAgICAgICAg ICAkaWVkX3BsdWdpbl9kYXRhWydmaXJzdF9sYW5nJ10gPSAoKCRpZHggPT09IDApID8gMSA6 IDApOwogICAgICAgICAgICAkaWVkX3BsdWdpbl9kYXRhWydsYXN0X2xhbmcnXSA9ICgoJGlk eCA9PT0gJG51bV9sYW5ncyAtIDEpID8gMSA6IDApOwogICAgICAgICAgICAkb3V0W10gPSBw YXJzZSgkdGhpbmcpOwogICAgICAgICAgICAkaWVkX3BsdWdpbl9kYXRhWydsYW5nJ10gPSAk aWVkX3BsdWdpbl9kYXRhWydmaXJzdF9sYW5nJ10gPSAkaWVkX3BsdWdpbl9kYXRhWydsYXN0 X2xhbmcnXSA9ICcnOwogICAgICAgICAgICAkaWR4Kys7CiAgICAgICAgfQogICAgICAgICRp ZWRfcGx1Z2luX2RhdGEgPSAkaWVkX3BkX3NhdmVkOwoKICAgICAgICByZXR1cm4gZG9XcmFw KCRvdXQsICR3cmFwdGFnLCAkYnJlYWssICRjbGFzcyk7CiAgICB9CgogICAgLyoqCiAgICAg KiBQdWJsaWMgdGFnOiBEb3dubG9hZCBhIHBsdWdpbi4KICAgICAqCiAgICAgKiBAcGFyYW0g YXJyYXkgICRhdHRzICBUYWcgYXR0cmlidXRlcwogICAgICogQHBhcmFtIHN0cmluZyAkdGhp bmcgVGFnIGNvbnRhaW5lciBjb250ZW50CiAgICAgKi8KICAgIGZ1bmN0aW9uIGllZF9wbHVn aW5fZG93bmxvYWRfbGluaygkYXR0cywgJHRoaW5nID0gbnVsbCkKICAgIHsKICAgICAgICBl eHRyYWN0KGxBdHRzKGFycmF5KAogICAgICAgICAgICAndHlwZScgICAgID0+ICdjb21wcmVz c2VkJywgLy8gdW5jb21wcmVzc2VkLCBjb21wcmVzc2VkLCB0ZW1wbGF0ZSwgdGV4dHBhY2sK ICAgICAgICAgICAgJ25hbWUnICAgICA9PiAnJywKICAgICAgICAgICAgJ2ZpbGVuYW1lJyA9 PiAnJywKICAgICAgICAgICAgJ2xhYmVsJyAgICA9PiAnRG93bmxvYWQnLAogICAgICAgICAg ICAnY2xhc3MnICAgID0+ICcnLAogICAgICAgICAgICAnbGFuZycgICAgID0+ICdJRURfQUxM JywKICAgICAgICAgICAgJ2Zvcm0nICAgICA9PiAnJywKICAgICAgICAgICAgJ2VzY2FwZScg ICA9PiAnaHRtbCcsCiAgICAgICAgKSwgJGF0dHMpKTsKCiAgICAgICAgaWYgKCEkbmFtZSAm JiAhJGZpbGVuYW1lKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAg ICRhbXAgPSAoJGVzY2FwZSA9PT0gJ2h0bWwnKSA/ICcmYW1wOycgOiAnJic7CgogICAgICAg IGlmICgkbmFtZSkgewogICAgICAgICAgICAkdGhlTmFtZSA9ICRhbXAuJ25hbWU9Jy51cmxl bmNvZGUoJG5hbWUpOwogICAgICAgIH0gZWxzZWlmICgkZmlsZW5hbWUpIHsKICAgICAgICAg ICAgJHRoZU5hbWUgPSAkYW1wLidmaWxlbmFtZT0nLnVybGVuY29kZSgkZmlsZW5hbWUpOwog ICAgICAgIH0KCiAgICAgICAgJHRoZUNsYXNzID0gJyc7CiAgICAgICAgaWYgKCRjbGFzcykg ewogICAgICAgICAgICAkdGhlQ2xhc3MgPSAnIGNsYXNzPSInLiRjbGFzcy4nIic7CiAgICAg ICAgfQogICAgICAgICRsYW5nb3B0ID0gJyc7CiAgICAgICAgaWYgKCRsYW5nKSB7CiAgICAg ICAgICAgICRsYW5ncyA9IGRvX2xpc3QoJGxhbmcpOwogICAgICAgICAgICAkbGFuZ29wdCA9 ICRhbXAuJ2xhbmc9Jy5pbXBsb2RlKCcsJywgJGxhbmdzKTsKICAgICAgICB9CgogICAgICAg ICRsaW5rTmFtZSA9IChlbXB0eSgkZm9ybSkpID8gKChlbXB0eSgkdGhpbmcpKSA/ICRsYWJl bCA6IHBhcnNlKCR0aGluZykpIDogcGFyc2VfZm9ybSgkZm9ybSk7CgogICAgICAgIGlmICgk dHlwZSA9PT0gJ2NvbXByZXNzZWQnKSB7CiAgICAgICAgICAgIHJldHVybiBocmVmKCRsaW5r TmFtZSwgJz9pZWRfcGx1Z2luX2Rvd25sb2FkPTEnLiR0aGVOYW1lLiRhbXAuJ3R5cGU9emlw Jy4kbGFuZ29wdCwgJHRoZUNsYXNzKTsKICAgICAgICB9IGVsc2VpZiAoJHR5cGUgPT09ICd1 bmNvbXByZXNzZWQnKSB7CiAgICAgICAgICAgIHJldHVybiBocmVmKCRsaW5rTmFtZSwgJz9p ZWRfcGx1Z2luX2Rvd25sb2FkPTEnLiR0aGVOYW1lLiRhbXAuJ3R5cGU9dHh0Jy4kbGFuZ29w dCwgJHRoZUNsYXNzKTsKICAgICAgICB9IGVsc2VpZiAoJHR5cGUgPT09ICd0ZW1wbGF0ZScp IHsKICAgICAgICAgICAgcmV0dXJuIGhyZWYoJGxpbmtOYW1lLCAnP2llZF9wbHVnaW5fZG93 bmxvYWQ9MScuJHRoZU5hbWUuJGFtcC4ndHlwZT1waHAnLiRsYW5nb3B0LCAkdGhlQ2xhc3Mp OwogICAgICAgIH0gZWxzZWlmICgkdHlwZSA9PT0gJ3RleHRwYWNrJykgewogICAgICAgICAg ICByZXR1cm4gaHJlZigkbGlua05hbWUsICc/aWVkX3BsdWdpbl9kb3dubG9hZD0xJy4kdGhl TmFtZS4kYW1wLid0eXBlPXRleHRwYWNrJy4kbGFuZ29wdCwgJHRoZUNsYXNzKTsKICAgICAg ICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBIYW5kbGVzIGRvd25sb2FkaW5nIHBsdWdpbiBj b250ZW50LgogICAgICovCiAgICBmdW5jdGlvbiBpZWRfcGx1Z2luX2Rvd25sb2FkKCkKICAg IHsKICAgICAgICBpZiAoZ3BzKCdpZWRfcGx1Z2luX2Rvd25sb2FkJykpIHsKICAgICAgICAg ICAgJHR5cGUgPSBncHMoJ3R5cGUnKTsKICAgICAgICAgICAgc3dpdGNoICgkdHlwZSkgewog ICAgICAgICAgICAgICAgY2FzZSAnemlwJzoKICAgICAgICAgICAgICAgIGNhc2UgJ3R4dCc6 CiAgICAgICAgICAgICAgICAgICAgJGllZF9wYyA9IG5ldyBpZWRfcGMoKTsKICAgICAgICAg ICAgICAgICAgICAkaWVkX3BjLT5zYXZlX2FzX2ZpbGUoKTsKICAgICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3BocCc6CiAgICAgICAgICAgICAgICAg ICAgJGllZF9wYyA9IG5ldyBpZWRfcGMoKTsKICAgICAgICAgICAgICAgICAgICAkaWVkX3Bj LT5zYXZlX2FzX3BocF9maWxlKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICBjYXNlICd0ZXh0cGFjayc6CiAgICAgICAgICAgICAgICAgICAgJGllZF9w YyA9IG5ldyBpZWRfcGMoKTsKICAgICAgICAgICAgICAgICAgICAkaWVkX3BjLT5zYXZlX2Fz X3RleHRwYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICB9Cn0KCi8qKgogKiBQbHVnaW4gY29tcG9zZXIgYWRtaW4gaW50ZXJm YWNlLgogKi8KY2xhc3MgaWVkX3BjCnsKICAgIC8qKgogICAgICogU2hhcmVkIGluZm9ybWF0 aW9uIGFjcm9zcyBtZXRob2RzLgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwog ICAgcHJvdGVjdGVkICRpZWRfcGx1Z2luX2dsb2JhbHMgPSBhcnJheSgpOwoKICAgIC8qKgog ICAgICogVGhlIHBsdWdpbidzIGV2ZW50IGFzIHJlZ2lzdGVyZWQgaW4gVHhwLgogICAgICoK ICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkaWVkX3BjX2V2ZW50 ID0gJ2llZF9wbHVnaW5fY29tcG9zZXInOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0b3Ig dG8gc2V0IHVwIGNhbGxiYWNrcyBhbmQgZW52aXJvbm1lbnQuCiAgICAgKi8KICAgIHB1Ymxp YyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmllZF9wbHVn aW5fZ2xvYmFscyA9IGFycmF5KAogICAgICAgICAgICAnY3NzX3N0YXJ0JyA9PiAnPCEtLScs CiAgICAgICAgICAgICdjc3NfZW5kJyAgID0+ICctLT4nLAogICAgICAgICAgICAnZGxtX3N0 YXJ0JyA9PiAnIycsCiAgICAgICAgICAgICdkbG1fZW5kJyAgID0+ICcnLAogICAgICAgICAg ICAnc3RhcnQnICAgICA9PiAnIC0tLSBCRUdJTiBQTFVHSU4gU0VDVElPTiAtLS0nLAogICAg ICAgICAgICAnZW5kJyAgICAgICA9PiAnIC0tLSBFTkQgUExVR0lOIFNFQ1RJT04gLS0tJywK ICAgICAgICAgICAgJ3NpemVfaGVscCcgPT4gJzYzNTM1JywKICAgICAgICAgICAgJ3NpemVf Y3NzJyAgPT4gJzIwMDAnLAogICAgICAgICAgICAnc2l6ZV9jb2RlJyA9PiAnMTY3NzcyMTUn LAogICAgICAgICk7CgogICAgICAgIGFkZF9wcml2cygkdGhpcy0+aWVkX3BjX2V2ZW50LCAn MSwyJyk7CiAgICAgICAgYWRkX3ByaXZzKCdwbHVnaW5fcHJlZnMuJyAuICR0aGlzLT5pZWRf cGNfZXZlbnQsICcxLDInKTsKCiAgICAgICAgcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywg JHRoaXMtPmllZF9wY19ldmVudCwgZ1R4dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpKTsKICAg ICAgICByZWdpc3Rlcl9jYWxsYmFjayhhcnJheSgkdGhpcywgJ3BsdWdpbl9jb21wb3Nlcicp LCAkdGhpcy0+aWVkX3BjX2V2ZW50KTsKICAgICAgICByZWdpc3Rlcl9jYWxsYmFjayhhcnJh eSgkdGhpcywgJ3NldHVwJyksICdwbHVnaW5fcHJlZnMuJyAuICR0aGlzLT5pZWRfcGNfZXZl bnQpOwogICAgICAgIHJlZ2lzdGVyX2NhbGxiYWNrKGFycmF5KCR0aGlzLCAnd2VsY29tZScp LCAncGx1Z2luX2xpZmVjeWNsZS4nIC4gJHRoaXMtPmllZF9wY19ldmVudCk7CiAgICAgICAg cmVnaXN0ZXJfY2FsbGJhY2soYXJyYXkoJHRoaXMsICdpbmplY3RfY3NzJyksICdhZG1pbl9z aWRlJywgJ2hlYWRfZW5kJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDU1MgZGVmaW5pdGlv bnM6IGhvcGVmdWxseSBraW5kIHRvIHRoZW1lcnMuCiAgICAgKgogICAgICogQHJldHVybiBz dHJpbmcgU3R5bGUgcnVsZXMKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF9z dHlsZV9ydWxlcygpCiAgICB7CiAgICAgICAgJGllZF9wY19zdHlsZXMgPSBhcnJheSgKICAg ICAgICAgICAgJ2llZF9wbHVnaW4nID0+ICcKLmllZF9sYWJlbCB7IG1hcmdpbjowIDAuMmVt IDAgMC42ZW07fQouaWVkX3BsdWdpbl9saW5rIHsgZmxvYXQ6cmlnaHQ7IH0KLmllZF9wbHVn aW5faW5mb19iYXIgeyB0ZXh0LWFsaWduOnJpZ2h0OyB9CiNpZWRfcGx1Z2luX2p1bXBUb0xp bmUgeyB3aWR0aDo0ZW07IG1hcmdpbjowIDFlbSAwIDAuNGVtOyB9Ci5pZWRfZWRpdEZvcm0g eyB3aWR0aDp7ZWR3aWR0aH07IG1hcmdpbjowIGF1dG87IH0KLmllZF9zdWJkdWUgeyBjb2xv cjpncmF5OyBwYWRkaW5nOjFweCAycHggMnB4IDFweDsgfQojaWVkX3BsdWdpbl90cF9jb250 cm9scyBpbnB1dFt0eXBlPSJ0ZXh0Il0geyB3aWR0aDoxNiU7IH0KI29wdGlvbnNfZ3JvdXBf cGFjayB1bCB7IGxpc3Qtc3R5bGUtdHlwZTpub25lOyB9CiNvcHRpb25zX2dyb3VwX3BhY2sg dWwgbGFiZWwgeyBtYXJnaW46MCA4cHggMCAwOyB9CiNvcHRpb25zX2dyb3VwX3BhY2sgdWwg aW5wdXQgeyB3aWR0aDo0NTBweDsgfQojb3B0aW9uc19ncm91cF9wYWNrIGxpIHsgbWFyZ2lu LWJvdHRvbTouMmVtIH0KLmRpc3RyaWJ1dGlvbi1jb2RlIHsgaGVpZ2h0OjQuMmVtIWltcG9y dGFudDsgfQouaWVkX3BsdWdpbl9lZGl0X3Rvb2xiYXIgeyB0ZXh0LWFsaWduOnJpZ2h0OyB3 aWR0aDo5NSU7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBtYXJnaW46LTJlbSAwIDAgMDsgfQoj aWVkX3BsdWdpbl9tc2dwb3AgeyBkaXNwbGF5Om5vbmU7IHBvc2l0aW9uOmFic29sdXRlOyBs ZWZ0OjIwMHB4OyBtYXgtd2lkdGg6NTAwcHg7IGJvcmRlcjozcHggcmlkZ2UgIzk5OTsgb3Bh Y2l0eTouOTI7IGZpbHRlcjphbHBoYShvcGFjaXR5OjkyKTsgcGFkZGluZzoxNXB4IDIwcHg7 IGJhY2tncm91bmQtY29sb3I6I2UyZGZjZTsgY29sb3I6IzgwNTUxZTsgfQojaWVkX3BsdWdp bl9tc2dwb3AgLnB1Ymxpc2ggeyBmbG9hdDpyaWdodDsgfQogICAgJywKICAgICAgICApOwoK ICAgICAgICByZXR1cm4gJGllZF9wY19zdHlsZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBJ bmplY3Qgc3R5bGUgcnVsZXMgaW50byB0aGUgJmx0O2hlYWQmZ3Q7IG9mIHRoZSBwYWdlLgog ICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRldnQgVGV4dHBhdHRlcm4gZXZlbnQKICAg ICAqIEBwYXJhbSAgc3RyaW5nICRzdHAgVGV4dHBhdHRlcm4gc3RlcCAoYWN0aW9uKQogICAg ICogQHJldHVybiBzdHJpbmcgICAgICBTdHlsZSBydWxlcywgb3Igbm90aGluZyBpZiBub3Qg dGhlIGNvcnJlY3QgJGV2ZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmplY3Rf Y3NzKCRldnQsICRzdHApCiAgICB7CiAgICAgICAgZ2xvYmFsICRldmVudDsKCiAgICAgICAg aWYgKCRldmVudCA9PT0gJHRoaXMtPmllZF9wY19ldmVudCkgewogICAgICAgICAgICAkaWVk X3BsdWdpbl9wcmVmcyA9ICR0aGlzLT5nZXRfcHJlZnMoKTsKICAgICAgICAgICAgJGllZF9w bHVnaW5fc3R5bGVzID0gJHRoaXMtPmdldF9zdHlsZV9ydWxlcygpOwoKICAgICAgICAgICAg Ly8gUG9zc2libGUgdmFyaWFibGUgcmVwbGFjZW1lbnRzLgogICAgICAgICAgICAkZWR3aWR0 aCA9IGdldF9wcmVmKCdpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCcsICRpZWRfcGx1Z2luX3By ZWZzWydpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCddWydkZWZhdWx0J10pOwogICAgICAgICAg ICAkc3R5bGVmaW5kID0gYXJyYXkoCiAgICAgICAgICAgICAgICAne2Vkd2lkdGh9JywKICAg ICAgICAgICAgKTsKICAgICAgICAgICAgJHN0eWxlcmVwcyA9IGFycmF5KAogICAgICAgICAg ICAgICAgJGVkd2lkdGgsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBlY2hvICc8c3R5 bGUgdHlwZT0idGV4dC9jc3MiPicgLiBzdHJfcmVwbGFjZSgkc3R5bGVmaW5kLCAkc3R5bGVy ZXBzLCAkaWVkX3BsdWdpbl9zdHlsZXNbJ2llZF9wbHVnaW4nXSkgLiAnPC9zdHlsZT4nOwog ICAgICAgIH0KCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICogUGx1Z2lu IGp1bXBvZmYgcG9pbnQuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJGV2dCBUZXh0 cGF0dGVybiBldmVudAogICAgICogQHBhcmFtICBzdHJpbmcgJHN0cCBUZXh0cGF0dGVybiBz dGVwIChhY3Rpb24pCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwbHVnaW5fY29tcG9z ZXIoJGV2dCwgJHN0cCkKICAgIHsKICAgICAgICAkYXZhaWxhYmxlX3N0ZXBzID0gYXJyYXko CiAgICAgICAgICAgICdjb2RlX3NhdmUnICAgICAgICA9PiB0cnVlLAogICAgICAgICAgICAn Y3JlYXRlJyAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgJ2VkaXQnICAgICAgICAg ICAgID0+IGZhbHNlLAogICAgICAgICAgICAnZ2VuZXJhdGVfcGhwZG9jJyAgPT4gdHJ1ZSwK ICAgICAgICAgICAgJ2hlbHAnICAgICAgICAgICAgID0+IHRydWUsCiAgICAgICAgICAgICdo ZWxwX3ZpZXdlcicgICAgICA9PiBmYWxzZSwKICAgICAgICAgICAgJ2luc3RhbGwnICAgICAg ICAgID0+IHRydWUsCiAgICAgICAgICAgICdsYW5nX3NldCcgICAgICAgICA9PiB0cnVlLAog ICAgICAgICAgICAndGFibGUnICAgICAgICAgICAgPT4gZmFsc2UsCiAgICAgICAgICAgICdt ZXRhX3NhdmUnICAgICAgICA9PiB0cnVlLAogICAgICAgICAgICAnbXVsdGlfZWRpdCcgICAg ICAgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3ByZWZzJyAgICAgICAgICAgID0+IGZhbHNlLAog ICAgICAgICAgICAncmVzdG9yZScgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3Nh dmUnICAgICAgICAgICAgID0+IHRydWUsCiAgICAgICAgICAgICdzYXZlX2FzX2ZpbGUnICAg ICA9PiB0cnVlLAogICAgICAgICAgICAnc2F2ZV9hc19waHBfZmlsZScgPT4gdHJ1ZSwKICAg ICAgICAgICAgJ3NhdmVfYXNfdGV4dHBhY2snID0+IHRydWUsCiAgICAgICAgICAgICdzZXRf dHBfcHJlZml4JyAgICA9PiB0cnVlLAogICAgICAgICAgICAnc3dpdGNoX3N0YXR1cycgICAg PT4gdHJ1ZSwKICAgICAgICAgICAgJ3RleHRwYWNrX2RlbCcgICAgID0+IHRydWUsCiAgICAg ICAgICAgICd0ZXh0cGFja19nZXQnICAgICA9PiB0cnVlLAogICAgICAgICAgICAndGV4dHBh Y2tfbG9hZCcgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3RleHRwYWNrX3NhdmUnICAgID0+ IHRydWUsCiAgICAgICAgICAgICd1cGxvYWQnICAgICAgICAgICA9PiB0cnVlLAogICAgICAg ICAgICAnc2F2ZV9wYW5lX3N0YXRlJyAgPT4gdHJ1ZSwKICAgICAgICApOwoKICAgICAgICBp ZiAoISRzdHAgb3IgIWJvdW5jZXIoJHN0cCwgJGF2YWlsYWJsZV9zdGVwcykpIHsKICAgICAg ICAgICAgJHN0cCA9ICd0YWJsZSc7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+JHN0cCgp OwogICAgfQoKICAgIC8qKgogICAgICogTGlmZWN5Y2xlIGhhbmRsaW5nLCBwb3N0LWluc3Rh bGwgLyBkZWxldGUuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJGV2dCBUZXh0cGF0 dGVybiBldmVudAogICAgICogQHBhcmFtICBzdHJpbmcgJHN0cCBUZXh0cGF0dGVybiBzdGVw IChhY3Rpb24pCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgIFN1Y2Nlc3MvZmFpbHVyZSBt ZXNzYWdlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3ZWxjb21lKCRldnQsICRzdHAp CiAgICB7CiAgICAgICAgJG1zZyA9ICcnOwoKICAgICAgICBzd2l0Y2ggKCRzdHApIHsKICAg ICAgICAgICAgY2FzZSAnaW5zdGFsbGVkJzoKICAgICAgICAgICAgICAgICR0aGlzLT5wcmVm c191cGRhdGUoKTsKICAgICAgICAgICAgICAgICRtc2cgPSAnVGhhbmtzIGZvciBpbnN0YWxs aW5nIHRoZSBwbHVnaW4gY29tcG9zZXIuIEhhcHB5IGF1dGhvcmluZyA6LSknOwogICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZWQnOgogICAgICAgICAg ICAgICAgJHRoaXMtPnByZWZzX3JlbW92ZSgwKTsKICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRtc2c7CiAgICB9CgogICAgLyoqCiAgICAgKiBU YWJsZSBvZiBwbHVnaW5zIGluIGJvdGggZGF0YWJhc2UgYW5kIGZpbGUgc3lzdGVtIGNhY2hl LgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRtZXNzYWdlIEZsYXNoIG1lc3NhZ2Ug dG8gZGlzcGxheSBzdWNjZXNzL2Vycm9yCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAg ICBIVE1MCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0YWJsZSgkbWVzc2FnZSA9ICcn KQogICAgewogICAgICAgIHBhZ2V0b3AoZ1R4dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpLCAk bWVzc2FnZSk7CgogICAgICAgIHJlcXVpcmVfcHJpdnMoJ2llZF9wbHVnaW5fY29tcG9zZXIn KTsKCiAgICAgICAgJGllZF9wbHVnaW5fcHJlZnMgPSAkdGhpcy0+Z2V0X3ByZWZzKCk7Cgog ICAgICAgICRsY19vcHRzID0gZG9fbGlzdChnZXRfcHJlZignaWVkX3BsdWdpbl9saWZlY3lj bGVfb3B0aW9ucycpKTsKICAgICAgICAkY2hlY2tlZCA9IGluX2FycmF5KCdpbnN0YWxsZWQn LCAkbGNfb3B0cyk7CiAgICAgICAgJGF1dG9fZW4gPSBnZXRfcHJlZignaWVkX3BsdWdpbl9h dXRvX2VuYWJsZScpOwogICAgICAgICRwY2QgPSBnZXRfcHJlZigncGx1Z2luX2NhY2hlX2Rp cicpOwoKICAgICAgICAkYWVSYWRpb1tdID0gJzxwIGNsYXNzPSJpZWRfcGx1Z2luX3JhZGlv c2V0IGllZF9wbHVnaW5fYXV0b2VuYWJsZSB0eHAtbGF5b3V0LTJjb2wiPic7CiAgICAgICAg JGFlUmFkaW9bXSA9ICc8bGFiZWwgY2xhc3M9ImllZF9sYWJlbCI+JyAuIGdUeHQoJ2llZF9w bHVnaW5fYXV0b19lbmFibGUnKSAuICc8L2xhYmVsPic7CiAgICAgICAgJGFlUmFkaW9bXSA9 IHJhZGlvc2V0KCRpZWRfcGx1Z2luX3ByZWZzWydpZWRfcGx1Z2luX2F1dG9fZW5hYmxlJ11b J2NvbnRlbnQnXSwgJ2llZF9wbHVnaW5fYXV0b2VuYWJsZScsICRhdXRvX2VuKTsKICAgICAg ICAkYWVSYWRpb1tdID0gJzwvcD4nOwoKICAgICAgICAkaW9SYWRpb1tdID0gJzxwIGNsYXNz PSJpZWRfcGx1Z2luX3JhZGlvc2V0IGllZF9wbHVnaW5faW5zdGFsbG9wdHMgdHhwLWxheW91 dC0yY29sIiBoaWRkZW4+JzsKICAgICAgICAkaW9SYWRpb1tdID0gJzxsYWJlbCBjbGFzcz0i aWVkX2xhYmVsIj4nIC4gZ1R4dCgnaWVkX3BsdWdpbl9ydW5faW5zdGFsbCcpIC4gJzwvbGFi ZWw+JzsKICAgICAgICAkaW9SYWRpb1tdID0geWVzbm9yYWRpbygnaWVkX3BsdWdpbl9pbnN0 YWxsb3B0cycsICRjaGVja2VkKTsKICAgICAgICAkaW9SYWRpb1tdID0gJzwvcD4nOwoKICAg ICAgICBleHRyYWN0KGdwc2EoYXJyYXkoJ3NvcnQnLCAnZGlyJykpKTsKCiAgICAgICAgaWYg KCRzb3J0ID09PSAnJykgJHNvcnQgPSBnZXRfcHJlZignaWVkX3BsdWdpbl9zb3J0X2NvbHVt bicsICduYW1lJyk7CiAgICAgICAgaWYgKCRkaXIgPT09ICcnKSAkZGlyID0gZ2V0X3ByZWYo J2llZF9wbHVnaW5fc29ydF9kaXInLCAnYXNjJyk7CiAgICAgICAgJGRpciA9ICgkZGlyID09 ICdkZXNjJykgPyAnZGVzYycgOiAnYXNjJzsKICAgICAgICBpZiAoIWluX2FycmF5KCRzb3J0 LCBhcnJheSgnbmFtZScsICdzdGF0dXMnLCAnYXV0aG9yJywgJ3ZlcnNpb24nLCAnbG9hZF9v cmRlcicpKSkgJHNvcnQgPSAnbmFtZSc7CgogICAgICAgICRzb3J0X3NxbCA9ICRzb3J0Licg Jy4kZGlyOwoKICAgICAgICBzZXRfcHJlZignaWVkX3BsdWdpbl9zb3J0X2NvbHVtbicsICRz b3J0LCAnaWVkX3BsdWdpbicsIFBSRUZfSElEREVOLCAnJywgMCwgUFJFRl9QUklWQVRFKTsK ICAgICAgICBzZXRfcHJlZignaWVkX3BsdWdpbl9zb3J0X2RpcicsICRkaXIsICdpZWRfcGx1 Z2luJywgUFJFRl9ISURERU4sICcnLCAwLCBQUkVGX1BSSVZBVEUpOwoKICAgICAgICAkc3dp dGNoX2RpciA9ICgkZGlyID09ICdkZXNjJykgPyAnYXNjJyA6ICdkZXNjJzsKCiAgICAgICAg Ly8gVG9wIGNvbnRyb2wtcGFuZWwgcGFydCBvZiBzY3JlZW4KICAgICAgICBlY2hvICc8ZGl2 IGNsYXNzPSJ0eHAtbGF5b3V0Ij4nLgogICAgICAgICAgICBuLiAnPGRpdiBjbGFzcz0idHhw LWxheW91dC0yY29sIj4nLgogICAgICAgICAgICBuLiAnPGgxIGNsYXNzPSJ0eHAtaGVhZGlu ZyI+Jy5nVHh0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykuc3AuJHRoaXMtPmFuY2hvcigkdGhp cy0+aWVkX3BjX2V2ZW50LCAnaGVscF92aWV3ZXInLCAnPycsIGFycmF5KCduYW1lJyA9PiAn aWVkX3BsdWdpbl9jb21wb3NlcicpLCBhcnJheSgnY2xhc3MnID0+ICdwb3BoZWxwJykpLic8 L2gxPicuCiAgICAgICAgICAgIG4uICc8L2Rpdj4nLgogICAgICAgICAgICBuLiAnPGRpdiBp ZD0iaWVkX3BsdWdpbl9jb250cm9sIiBjbGFzcz0idHhwLWxheW91dC0yY29sIj4nLgogICAg ICAgICAgICBuLiBzTGluaygkdGhpcy0+aWVkX3BjX2V2ZW50LCAncHJlZnMnLCBnVHh0KCdp ZWRfcGx1Z2luX3NldHVwJyksICdpZWRfcGx1Z2luX2xpbmsnKS4KICAgICAgICAgICAgbi4g JzwvZGl2PicuCiAgICAgICAgICAgIG4uICc8ZGl2IGNsYXNzPSJ0eHAtbGF5b3V0LTFjb2wi PicuCiAgICAgICAgICAgIG4uICc8ZGl2IGNsYXNzPSJzdW1tYXJ5LWRldGFpbHMgY2xlYXIi PjxoMyBjbGFzcz0ibGV2ZXIgdHhwLXN1bW1hcnknLihnZXRfcHJlZigncGFuZV9pZWRfcGx1 Z2luX2NwYW5lbF92aXNpYmxlJykgPyAnIGV4cGFuZGVkJyA6ICcnKS4nIj48YSBocmVmPSIj aWVkX3BsdWdpbl9jcGFuZWwiPicgLiBnVHh0KCdpZWRfcGx1Z2luX2NwYW5lbF9sZWdlbmQn KSAuICc8L2E+PC9oMz48ZGl2IGlkPSJpZWRfcGx1Z2luX2NwYW5lbCIgY2xhc3M9InRvZ2ds ZSIgc3R5bGU9ImRpc3BsYXk6Jy4oZ2V0X3ByZWYoJ3BhbmVfaWVkX3BsdWdpbl9jcGFuZWxf dmlzaWJsZScpID8gJ2Jsb2NrJyA6ICdub25lJykuJyI+Jy4KICAgICAgICAgICAgbi4gJzxm b3JtIGNsYXNzPSJpZWRfcGx1Z2luX2Zvcm0iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRh dGEiIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBvc3QiPicuCiAgICAgICAgICAgIG4u IGltcGxvZGUobiwgJGFlUmFkaW8pLgogICAgICAgICAgICBuLiBpbXBsb2RlKG4sICRpb1Jh ZGlvKS4KICAgICAgICAgICAgbi4gJzxwIGNsYXNzPSJjbGVhciI+Jy4KICAgICAgICAgICAg bi4gJzxsYWJlbCBmb3I9ImllZF9wbHVnaW5fbmV3bmFtZSIgY2xhc3M9ImllZF9sYWJlbCI+ Jy5nVHh0KCduYW1lJykuJzwvbGFiZWw+Jy4KICAgICAgICAgICAgbi4gZklucHV0KCd0ZXh0 JywgJ25hbWUnLCAnJywgJycsICcnLCAnJywgSU5QVVRfUkVHVUxBUiwgJycsICdpZWRfcGx1 Z2luX25ld25hbWUnLCBmYWxzZSwgZmFsc2UsICdDcmVhdGUgYSBuZXcgcGx1Z2luJykuCiAg ICAgICAgICAgIG4uIGZJbnB1dCgnc3VibWl0JywgJ3BsdWdpbl9jcmVhdGUnLCBnVHh0KCdj cmVhdGUnKSkuCiAgICAgICAgICAgIG4uICc8L3A+Jy4KICAgICAgICAgICAgbi4gJzxwPicu CiAgICAgICAgICAgIG4uICc8bGFiZWwgZm9yPSJpZWRfcGx1Z2luX2ZpbGUiIGNsYXNzPSJp ZWRfbGFiZWwiPicuZ1R4dCgnaWVkX3BsdWdpbl91cGxvYWRfcGhwJykuJzwvbGFiZWw+Jy4K ICAgICAgICAgICAgbi4gZklucHV0KCdmaWxlJywgJ3RoZWZpbGUnLCAnJywgJycsICcnLCAn JywgJycsICcnLCAnaWVkX3BsdWdpbl9maWxlJykuCiAgICAgICAgICAgIG4uIGZJbnB1dCgn c3VibWl0JywgJ3BsdWdpbl91cGxvYWQnLCBnVHh0KCd1cGxvYWQnKSkuCiAgICAgICAgICAg IG4uICc8L3A+Jy4KICAgICAgICAgICAgbi4gJzxwPicuCiAgICAgICAgICAgIG4uICc8bGFi ZWwgZm9yPSJpZWRfcGx1Z2luNjQiIGNsYXNzPSJpZWRfbGFiZWwiPicuZ1R4dCgnaWVkX3Bs dWdpbl9pbnN0YWxsX3R4dCcpLic8L2xhYmVsPicuCiAgICAgICAgICAgIG4uIHRleHRfYXJl YSgncGx1Z2luNjQnLCAnJywgJycsICcnLCAnaWVkX3BsdWdpbjY0JykuCiAgICAgICAgICAg IG4uIGZJbnB1dCgnc3VibWl0JywgJ3BsdWdpbl9pbnN0YWxsJywgZ1R4dCgnaW5zdGFsbCcp KS4KICAgICAgICAgICAgbi4gJzwvcD4nLgogICAgICAgICAgICBuLiBlSW5wdXQoJHRoaXMt PmllZF9wY19ldmVudCkuCiAgICAgICAgICAgIG4uIHNJbnB1dCgnY3JlYXRlJykuCiAgICAg ICAgICAgIG4uIGhJbnB1dCgnTUFYX0ZJTEVfU0laRScsIDEwMDAwMDApLgogICAgICAgICAg ICBuLiB0SW5wdXQoKS4KICAgICAgICAgICAgbi4gJzwvZm9ybT4nLgogICAgICAgICAgICBu LiAnPC9kaXY+Jy4KICAgICAgICAgICAgbi4gJzwvZGl2PicuCiAgICAgICAgICAgIG4uICc8 L2Rpdj4nOwoKICAgICAgICAvLyBNYWluIHBsdWdpbiBsaXN0CiAgICAgICAgJHJzID0gc2Fm ZV9yb3dzKCcqJywgJ3R4cF9wbHVnaW4nLCAnMT0xIE9SREVSIEJZICcuJHNvcnRfc3FsKTsK CiAgICAgICAgaWYgKCRycykgewogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ0eHAt bGF5b3V0LTFjb2wiPicuCiAgICAgICAgICAgICAgICBuLiAnPGRpdiBjbGFzcz0ic3VtbWFy eS1kZXRhaWxzIj4nLgogICAgICAgICAgICAgICAgbi4gJzxmb3JtIGFjdGlvbj0iaW5kZXgu cGhwIiBpZD0iaWVkX3BsdWdpbl9kYl9mb3JtIiBtZXRob2Q9InBvc3QiPicuCiAgICAgICAg ICAgICAgICBuLiAnPGgzIGNsYXNzPSJsZXZlciB0eHAtc3VtbWFyeScuKGdldF9wcmVmKCdw YW5lX2llZF9wbHVnaW5fZGJwbHVnc192aXNpYmxlJykgPyAnIGV4cGFuZGVkJyA6ICcnKS4n Ij4nLgogICAgICAgICAgICAgICAgbi4gJzxhIGhyZWY9IiNpZWRfcGx1Z2luX2RicGx1Z3Mi PicgLiBnVHh0KCdpZWRfcGx1Z2luX2RicGx1Z3NfbGVnZW5kJykgLiAnPC9hPicuCiAgICAg ICAgICAgICAgICBuLiAnPC9oMz4nLgogICAgICAgICAgICAgICAgbi4gJzxkaXYgaWQ9Imll ZF9wbHVnaW5fZGJwbHVncyIgY2xhc3M9InRvZ2dsZSIgc3R5bGU9ImRpc3BsYXk6Jy4oZ2V0 X3ByZWYoJ3BhbmVfaWVkX3BsdWdpbl9kYnBsdWdzX3Zpc2libGUnKSA/ICdibG9jaycgOiAn bm9uZScpLiciPicuCiAgICAgICAgICAgIG4uICc8ZGl2IGNsYXNzPSJ0eHAtbGlzdHRhYmxl cyI+Jy4KICAgICAgICAgICAgbi4gc3RhcnRUYWJsZSgnJywgJycsICd0eHAtbGlzdCcpLgog ICAgICAgICAgICBuLic8dGhlYWQ+Jy4KICAgICAgICAgICAgbi4gdHIoCiAgICAgICAgICAg ICAgICBuLmhDZWxsKGZJbnB1dCgnY2hlY2tib3gnLCAnc2VsZWN0X2FsbCcsIDAsICcnLCAn JywgJycsICcnLCAnJywgJ3NlbGVjdF9hbGwnKSwgJycsICcgdGl0bGU9IicuZ1R4dCgndG9n Z2xlX2FsbF9zZWxlY3RlZCcpLiciIGNsYXNzPSJtdWx0aS1lZGl0IicpCiAgICAgICAgICAg ICAgICAubi5jb2x1bW5faGVhZCgncGx1Z2luJywgJ25hbWUnLCAnaWVkX3BsdWdpbl9jb21w b3NlcicsIHRydWUsICRzd2l0Y2hfZGlyLCAnJywgJycsICgoJ25hbWUnID09ICRzb3J0KSA/ ICIkZGlyICIgOiAnJykuJ25hbWUnKQogICAgICAgICAgICAgICAgLm4uY29sdW1uX2hlYWQo J2F1dGhvcicsICdhdXRob3InLCAnaWVkX3BsdWdpbl9jb21wb3NlcicsIHRydWUsICRzd2l0 Y2hfZGlyLCAnJywgJycsICgoJ2F1dGhvcicgPT0gJHNvcnQpID8gIiRkaXIgIiA6ICcnKS4n YXV0aG9yJykKICAgICAgICAgICAgICAgIC5uLmNvbHVtbl9oZWFkKGdUeHQoJ3ZlcnNpb24n KS4nICgnLmdUeHQoJ3BsdWdpbl9tb2RpZmllZCcpLicpJywgJ3ZlcnNpb24nLCAnaWVkX3Bs dWdpbl9jb21wb3NlcicsIHRydWUsICRzd2l0Y2hfZGlyLCAnJywgJycsICgoJ3ZlcnNpb24n ID09ICRzb3J0KSA/ICIkZGlyICIgOiAnJykuJ3ZlcnNpb24nKQogICAgICAgICAgICAgICAg Lm4uaENlbGwoZ1R4dCgnZGVzY3JpcHRpb24nKSwgJycsICcgY2xhc3M9ImRlc2NyaXB0aW9u IicpCiAgICAgICAgICAgICAgICAubi5oQ2VsbChnVHh0KCdtYW5hZ2UnKSwgJycsICcgY2xh c3M9Im1hbmFnZSInKQogICAgICAgICAgICAgICAgLm4uY29sdW1uX2hlYWQoJ2FjdGl2ZScs ICdzdGF0dXMnLCAnaWVkX3BsdWdpbl9jb21wb3NlcicsIHRydWUsICRzd2l0Y2hfZGlyLCAn JywgJycsICgoJ3N0YXR1cycgPT0gJHNvcnQpID8gIiRkaXIgIiA6ICcnKS4nc3RhdHVzJykK ICAgICAgICAgICAgKS4KICAgICAgICAgICAgbi4gJzwvdGhlYWQ+Jy4KICAgICAgICAgICAg bi4gJzx0Ym9keT4nOwoKICAgICAgICAgICAgZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsKICAg ICAgICAgICAgICAgIGV4dHJhY3QoJHJvdyk7CiAgICAgICAgICAgICAgICAkZW5hbWUgPSAk dGhpcy0+YW5jaG9yKCR0aGlzLT5pZWRfcGNfZXZlbnQsICdlZGl0JywgJG5hbWUsIGFycmF5 KCduYW1lJyA9PiAkbmFtZSkpOwogICAgICAgICAgICAgICAgJGhsaW5rID0gKCRoZWxwKSA/ ICR0aGlzLT5hbmNob3IoJHRoaXMtPmllZF9wY19ldmVudCwgJ2hlbHBfdmlld2VyJywgZ1R4 dCgnaWVkX3BsdWdpbl9kb2NzJyksIGFycmF5KCduYW1lJyA9PiAkbmFtZSkpIDogZ1R4dCgn bm9uZScpOwogICAgICAgICAgICAgICAgJGZuYW1lcyA9ICR0aGlzLT5nZXRfbmFtZSgkbmFt ZSwgJHZlcnNpb24pOwogICAgICAgICAgICAgICAgJHB1YnRhZyA9ICR0aGlzLT5hbmNob3Io JHRoaXMtPmllZF9wY19ldmVudCwgJ3NhdmVfYXNfZmlsZScsIGdUeHQoJ3B1Ymxpc2gnKSwg YXJyYXkoJ25hbWUnID0+ICRuYW1lKSwgYXJyYXkoJ3RpdGxlJyA9PiBnVHh0KCdpZWRfcGx1 Z2luX2V4cG9ydCcsIGFycmF5KCd7bmFtZX0nID0+ICRmbmFtZXNbMF0pKSkpOwogICAgICAg ICAgICAgICAgJHB1Ynp0YWcgPSAkdGhpcy0+YW5jaG9yKCR0aGlzLT5pZWRfcGNfZXZlbnQs ICdzYXZlX2FzX2ZpbGUnLCBnVHh0KCdpZWRfcGx1Z2luX2NvbXByZXNzJyksIGFycmF5KCdu YW1lJyA9PiAkbmFtZSwgJ3R5cGUnID0+ICd6aXAnKSwgYXJyYXkoJ3RpdGxlJyA9PiBnVHh0 KCdpZWRfcGx1Z2luX2V4cG9ydCcsIGFycmF5KCd7bmFtZX0nID0+ICRmbmFtZXNbMV0pKSkp OwogICAgICAgICAgICAgICAgJG1vZGlmaWVkID0gKHN0cnRvbG93ZXIoJGNvZGUpICE9IChz dHJ0b2xvd2VyKCRjb2RlX3Jlc3RvcmUpKSk7CiAgICAgICAgICAgICAgICAkcGx1Z3ByZWYg PSAoJGZsYWdzICYgUExVR0lOX0hBU19QUkVGUykgPyAoc3AuJHRoaXMtPmFuY2hvcigncGx1 Z2luX3ByZWZzLicudXJsZW5jb2RlKCRuYW1lKSwgJycsICdbJy5nVHh0KCdwbHVnaW5fcHJl ZnMnKS4nXScsIGFycmF5KCduYW1lJyA9PiAkbmFtZSksIGFycmF5KCdjbGFzcycgPT4gJ3Bs dWdpbl9wcmVmcycuKCAoJHN0YXR1cykgPyAnJyA6ICcgZW1wdHknKSkpICkgOiAnJzsKCiAg ICAgICAgICAgICAgICBlY2hvIHRyKAogICAgICAgICAgICAgICAgICAgIG4udGQoCiAgICAg ICAgICAgICAgICAgICAgICAgIGZJbnB1dCgnY2hlY2tib3gnLCAnc2VsZWN0ZWRbXScsICRu YW1lKQogICAgICAgICAgICAgICAgICAgICwnJywgJ211bHRpLWVkaXQnKQogICAgICAgICAg ICAgICAgICAgIC5uLnRkKCRlbmFtZS4kcGx1Z3ByZWYpCiAgICAgICAgICAgICAgICAgICAg Lm4udGQoKCAoJGF1dGhvcl91cmkpID8gJzxhIGhyZWY9IicudHhwc3BlY2lhbGNoYXJzKCRh dXRob3JfdXJpKS4nIj4nLnR4cHNwZWNpYWxjaGFycygkYXV0aG9yKS4nPC9hPicgOiB0eHBz cGVjaWFsY2hhcnMoJGF1dGhvcikpKQogICAgICAgICAgICAgICAgICAgIC5uLnRkKCggKCRt b2RpZmllZCkgPyAkdGhpcy0+YW5jaG9yKCR0aGlzLT5pZWRfcGNfZXZlbnQsICdyZXN0b3Jl JywgJHZlcnNpb24sIGFycmF5KCduYW1lJyA9PiAkbmFtZSksIGFycmF5KCd0aXRsZScgPT4g Z1R4dCgnaWVkX3BsdWdpbl9yZXN0b3JlX2hlbHAnKSwgJ29uY2xpY2snID0+ICdyZXR1cm4g dmVyaWZ5KFwnJy5nVHh0KCdpZWRfcGx1Z2luX3Jlc3RvcmVfdmVyaWZ5JywgYXJyYXkoJ3tu YW1lfScgPT4gJG5hbWUpKS4nXCcpOycpKSA6ICR2ZXJzaW9uKSAuICgoJG1vZGlmaWVkKSA/ IHNwLicoJy5nVHh0KCd5ZXMnKS4nKScgOiAnJykpCiAgICAgICAgICAgICAgICAgICAgLm4u dGQodHhwc3BlY2lhbGNoYXJzKCRkZXNjcmlwdGlvbikpCiAgICAgICAgICAgICAgICAgICAg Lm4udGQoJHB1YnRhZyAuc3AuICcmIzEyNDsnIC5zcC4gJHB1Ynp0YWcgLnNwLiAnJiMxMjQ7 JyAuc3AuICRobGluaykKICAgICAgICAgICAgICAgICAgICAubi50ZCgkdGhpcy0+c3RhdHVz X2xpbmsoJHN0YXR1cywkbmFtZSx5ZXNfbm8oJHN0YXR1cykpKQogICAgICAgICAgICAgICAg KTsKICAgICAgICAgICAgICAgIHVuc2V0KCRuYW1lLCRwYWdlKTsKICAgICAgICAgICAgfQog ICAgICAgICAgICBlY2hvIG4uICc8L3Rib2R5PicuCiAgICAgICAgICAgICAgICBuLiBlbmRU YWJsZSgpLgogICAgICAgICAgICAgICAgbi4gJzwvZGl2PicuCiAgICAgICAgICAgICAgICBu LiAnPC9kaXY+Jy4KICAgICAgICAgICAgICAgIG4uIHRJbnB1dCgpLgogICAgICAgICAgICAg ICAgJHRoaXMtPm11bHRpZWRpdF9mb3JtKCdkYicsICcnLCAkc29ydCwgJGRpciwgJycsICcn KS4KICAgICAgICAgICAgICAgIG4uICc8L2Zvcm0+Jy4KICAgICAgICAgICAgICAgIG4uICc8 L2Rpdj4nLgogICAgICAgICAgICAgICAgbi4gJzwvZGl2Pic7CiAgICAgICAgfQoKICAgICAg ICBpZiAoIWVtcHR5KCRwY2QpICYmIGZpbGVfZXhpc3RzKCRwY2QpKSB7CiAgICAgICAgICAg ICRmaWxlbmFtZXMgPSBhcnJheSgpOwoKICAgICAgICAgICAgJGRpcmVjdG9yeSA9IGRpcigk cGNkKTsKCiAgICAgICAgICAgIHdoaWxlICgkZmlsZSA9ICRkaXJlY3RvcnktPnJlYWQoKSkg ewogICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICIuIiAmJiAkZmlsZSAhPSAiLi4iKSB7 CiAgICAgICAgICAgICAgICAgICAgJGZpbGVhZGRyID0gJHBjZCAuIERTIC4gJGZpbGU7CiAg ICAgICAgICAgICAgICAgICAgaWYgKCFpc19kaXIoJGZpbGVhZGRyKSkgewogICAgICAgICAg ICAgICAgICAgICAgICAkZmlsZW5hbWVzW109JGZpbGU7CiAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRkaXJlY3Rv cnktPmNsb3NlKCk7CiAgICAgICAgICAgICgkZmlsZW5hbWVzKT9uYXRjYXNlc29ydCgkZmls ZW5hbWVzKTonJzsKCiAgICAgICAgICAgICRvdXQgPSBhcnJheSgpOwoKICAgICAgICAgICAg Zm9yZWFjaCAoJGZpbGVuYW1lcyBhcyAkZmlsZW5hbWUpIHsKICAgICAgICAgICAgICAgICRw YXJ0cyA9IGV4cGxvZGUgKCcuJywkZmlsZW5hbWUpOwogICAgICAgICAgICAgICAgJGZpbGVl eHQgPSBhcnJheV9wb3AoJHBhcnRzKTsKCiAgICAgICAgICAgICAgICBpZiAoJGZpbGVleHQ9 PSdwaHAnKSB7CiAgICAgICAgICAgICAgICAgICAgJGJhc2VuYW1lID0gYmFzZW5hbWUoJGZp bGVuYW1lKTsKICAgICAgICAgICAgICAgICAgICAkcGx1Z2luID0gJHRoaXMtPnJlYWRfZmls ZSgkcGNkIC4gRFMgLiAkZmlsZW5hbWUpOwogICAgICAgICAgICAgICAgICAgICRobGluayA9 ICgkcGx1Z2luWydoZWxwJ10pID8gJHRoaXMtPmFuY2hvcigkdGhpcy0+aWVkX3BjX2V2ZW50 LCAnaGVscF92aWV3ZXInLCBnVHh0KCdpZWRfcGx1Z2luX2RvY3MnKSwgYXJyYXkoJ2ZpbGVu YW1lJyA9PiAkZmlsZW5hbWUpKSA6IGdUeHQoJ25vbmUnKTsKICAgICAgICAgICAgICAgICAg ICAkZWZpbGUgPSAkdGhpcy0+YW5jaG9yKCR0aGlzLT5pZWRfcGNfZXZlbnQsICdlZGl0Jywg JHBsdWdpblsnbmFtZSddLCBhcnJheSgnZmlsZW5hbWUnID0+ICRmaWxlbmFtZSkpOwogICAg ICAgICAgICAgICAgICAgICRmbmFtZXMgPSAkdGhpcy0+Z2V0X25hbWUoJHBsdWdpblsnbmFt ZSddLCAkcGx1Z2luWyd2ZXJzaW9uJ10pOwogICAgICAgICAgICAgICAgICAgICRwbHVncHJl ZiA9ICgoJHBsdWdpblsnZmxhZ3MnXSAmIFBMVUdJTl9IQVNfUFJFRlMpKSA/ICcgJy4kdGhp cy0+YW5jaG9yKCdwbHVnaW5fcHJlZnMuJy51cmxlbmNvZGUoJHBsdWdpblsnbmFtZSddKSwg JycsICcgWycuZ1R4dCgncGx1Z2luX3ByZWZzJykuJ10nKSA6ICcnOwogICAgICAgICAgICAg ICAgICAgICRwdWJ0YWcgPSAkdGhpcy0+YW5jaG9yKCR0aGlzLT5pZWRfcGNfZXZlbnQsICdz YXZlX2FzX2ZpbGUnLCBnVHh0KCdwdWJsaXNoJyksIGFycmF5KCdmaWxlbmFtZScgPT4gJGZp bGVuYW1lKSwgYXJyYXkoJ3RpdGxlJyA9PiBnVHh0KCdpZWRfcGx1Z2luX2V4cG9ydCcsIGFy cmF5KCd7bmFtZX0nID0+ICRmbmFtZXNbMF0pKSkpOwogICAgICAgICAgICAgICAgICAgICRw dWJ6dGFnID0gJHRoaXMtPmFuY2hvcigkdGhpcy0+aWVkX3BjX2V2ZW50LCAnc2F2ZV9hc19m aWxlJywgZ1R4dCgnaWVkX3BsdWdpbl9jb21wcmVzcycpLCBhcnJheSgnZmlsZW5hbWUnID0+ ICRmaWxlbmFtZSwgJ3R5cGUnID0+ICd6aXAnKSwgYXJyYXkoJ3RpdGxlJyA9PiBnVHh0KCdp ZWRfcGx1Z2luX2V4cG9ydCcsIGFycmF5KCd7bmFtZX0nID0+ICRmbmFtZXNbMV0pKSkpOwoK ICAgICAgICAgICAgICAgICAgICAkb3V0W10gPSB0cigKICAgICAgICAgICAgICAgICAgICAg ICAgbi50ZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZJbnB1dCgnY2hlY2tib3gn LCAnc2VsZWN0ZWQtY2FjaGVbXScsICRmaWxlbmFtZSkKICAgICAgICAgICAgICAgICAgICAg ICAgLCcnLCAnbXVsdGktZWRpdCcpCiAgICAgICAgICAgICAgICAgICAgICAgIC5uLnRkKAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnKCRmaWxlbmFtZSwnZGl2JywnIGNsYXNz PSJpZWRfc3ViZHVlIicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuKGlzc2V0KCRw bHVnaW5bJ25hbWUnXSkgPyAkZWZpbGUuJHBsdWdwcmVmLic8YnIgLz4nIDogJycpLicgJwog ICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgIC5uLnRk KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBpc3NldCgkcGx1Z2luWydhdXRob3Jf dXJpJ10pID8gJzxhIGhyZWY9IicuJHBsdWdpblsnYXV0aG9yX3VyaSddLiciPicgOiAnJyAp IC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICggaXNzZXQoJHBsdWdpblsnYXV0aG9y J10pID8gJHBsdWdpblsnYXV0aG9yJ10gOiAnJm5ic3A7JyApLgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKCBpc3NldCgkcGx1Z2luWydhdXRob3JfdXJpJ10pID8gJzwvYT4nIDog JycgKQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAg IC5uLnRkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzc2V0KCRwbHVnaW5bJ3Zl cnNpb24nXSkgPyAkcGx1Z2luWyd2ZXJzaW9uJ10gOiAnJm5ic3A7JykKICAgICAgICAgICAg ICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAubi50ZCgKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChpc3NldCgkcGx1Z2luWydkZXNjcmlwdGlvbiddKSA/ICRw bHVnaW5bJ2Rlc2NyaXB0aW9uJ10gOiAnJm5ic3A7JykKICAgICAgICAgICAgICAgICAgICAg ICAgKQogICAgICAgICAgICAgICAgICAgICAgICAubi50ZCgKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpc3NldCgkcGx1Z2luWyduYW1lJ10pID8gJHB1YnRhZyAuc3AuICcmIzEy NDsnIC5zcC4gJHB1Ynp0YWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRh ZygnJm5ic3A7JywgJ3NwYW4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgLnNwLiAnJiMxMjQ7JyAuc3AuICRobGluawogICAg ICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRvdXQpIHsKICAgICAg ICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InR4cC1sYXlvdXQtMWNvbCI+Jy4KICAgICAg ICAgICAgICAgICAgICBuLiAnPGRpdiBjbGFzcz0ic3VtbWFyeS1kZXRhaWxzIj4nLgogICAg ICAgICAgICAgICAgICAgIG4uICc8Zm9ybSBhY3Rpb249ImluZGV4LnBocCIgaWQ9ImllZF9w bHVnaW5fY2FjaGVfZm9ybSIgbWV0aG9kPSJwb3N0Ij4nLgogICAgICAgICAgICAgICAgICAg ICAgICBuLiAnPGgzIGNsYXNzPSJsZXZlciB0eHAtc3VtbWFyeScuKGdldF9wcmVmKCdwYW5l X2llZF9wbHVnaW5fY2FjaGVwbHVnc192aXNpYmxlJykgPyAnIGV4cGFuZGVkJyA6ICcnKS4n Ij4nLgogICAgICAgICAgICAgICAgICAgICAgICBuLiAnPGEgaHJlZj0iI2llZF9wbHVnaW5f Y2FjaGVwbHVncyI+JyAuIGdUeHQoJ2llZF9wbHVnaW5fY2FjaGVwbHVnc19sZWdlbmQnKSAu ICc8L2E+Jy4KICAgICAgICAgICAgICAgICAgICAgICAgbi4gJzwvaDM+Jy4KICAgICAgICAg ICAgICAgICAgICAgICAgbi4gJzxkaXYgaWQ9ImllZF9wbHVnaW5fY2FjaGVwbHVncyIgY2xh c3M9InRvZ2dsZSIgc3R5bGU9ImRpc3BsYXk6Jy4oZ2V0X3ByZWYoJ3BhbmVfaWVkX3BsdWdp bl9jYWNoZXBsdWdzX3Zpc2libGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPicuCiAgICAg ICAgICAgICAgICAgICAgbi4gJzxkaXYgY2xhc3M9InR4cC1saXN0dGFibGVzIGllZF9wbHVn aW5fY2FjaGVwbHVncyI+Jy4KICAgICAgICAgICAgICAgICAgICBuLnN0YXJ0VGFibGUoJycs ICcnLCAndHhwLWxpc3QnKS4KICAgICAgICAgICAgICAgICAgICBuLiAnPHRoZWFkPicuCiAg ICAgICAgICAgICAgICAgICAgbi4gdHIoCiAgICAgICAgICAgICAgICAgICAgICAgIG4uaENl bGwoZklucHV0KCdjaGVja2JveCcsICdzZWxlY3RfYWxsJywgMCwgJycsICcnLCAnJywgJycs ICcnLCAnc2VsZWN0X2FsbCcpLCAnJywgJyB0aXRsZT0iJy5nVHh0KCd0b2dnbGVfYWxsX3Nl bGVjdGVkJykuJyIgY2xhc3M9Im11bHRpLWVkaXQiJykKICAgICAgICAgICAgICAgICAgICAg ICAgLm4uaENlbGwoZ1R4dCgncGx1Z2luJyksICcnLCAnIGNsYXNzPSJuYW1lIicpCiAgICAg ICAgICAgICAgICAgICAgICAgIC5uLmhDZWxsKGdUeHQoJ2F1dGhvcicpLCAnJywgJyBjbGFz cz0iYXV0aG9yIicpCiAgICAgICAgICAgICAgICAgICAgICAgIC5uLmhDZWxsKGdUeHQoJ3Zl cnNpb24nKSAuICcgKCcuZ1R4dCgncGx1Z2luX21vZGlmaWVkJykuJyknLCAnJywgJyBjbGFz cz0idmVyc2lvbiInKQogICAgICAgICAgICAgICAgICAgICAgICAubi5oQ2VsbChnVHh0KCdk ZXNjcmlwdGlvbicpLCAnJywgJyBjbGFzcz0iZGVzY3JpcHRpb24iJykKICAgICAgICAgICAg ICAgICAgICAgICAgLm4uaENlbGwoZ1R4dCgnbWFuYWdlJyksICcnLCAnIGNsYXNzPSJtYW5h Z2UiJykKICAgICAgICAgICAgICAgICAgICApLgogICAgICAgICAgICAgICAgICAgIG4uICc8 L3RoZWFkPicuCiAgICAgICAgICAgICAgICAgICAgbi4gJzx0Ym9keT4nLgogICAgICAgICAg ICAgICAgICAgIG4uIGltcGxvZGUobiwgJG91dCkuCiAgICAgICAgICAgICAgICAgICAgbi4g JzwvdGJvZHk+Jy4KICAgICAgICAgICAgICAgICAgICBuLiBlbmRUYWJsZSgpLgogICAgICAg ICAgICAgICAgICAgIG4uICc8L2Rpdj4nLgogICAgICAgICAgICAgICAgICAgIG4uIHRJbnB1 dCgpLgogICAgICAgICAgICAgICAgICAgICR0aGlzLT5tdWx0aWVkaXRfZm9ybSgnY2FjaGUn LCAnJywgJHNvcnQsICRkaXIsICcnLCAnJykuCiAgICAgICAgICAgICAgICAgICAgbi4gJzwv Zm9ybT4nLgogICAgICAgICAgICAgICAgICAgIG4uICc8L2Rpdj4nLgogICAgICAgICAgICAg ICAgICAgIG4uICc8L2Rpdj4nLgogICAgICAgICAgICAgICAgICAgIG4uICc8L2Rpdj4nOwog ICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlY2hvICc8L2Rpdj4nLgogICAgICAg ICAgICBuLiBzY3JpcHRfanMoIDw8PEVPSlMKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24g KCkgewogICAgJCgnI2llZF9wbHVnaW5fZGJfZm9ybScpLnR4cE11bHRpRWRpdEZvcm0oewog ICAgICAgICdjaGVja2JveCcgOiAnaW5wdXRbbmFtZT0ic2VsZWN0ZWRbXSJdW3R5cGU9Y2hl Y2tib3hdJwogICAgfSk7CgogICAgJCgnI2llZF9wbHVnaW5fY2FjaGVfZm9ybScpLnR4cE11 bHRpRWRpdEZvcm0oewogICAgICAgICdjaGVja2JveCcgOiAnaW5wdXRbbmFtZT0ic2VsZWN0 ZWQtY2FjaGVbXSJdW3R5cGU9Y2hlY2tib3hdJwogICAgfSk7CgogICAgdmFyIGllZF9pbyA9 ICQoJy5pZWRfcGx1Z2luX2luc3RhbGxvcHRzJyk7CgogICAgJCgnI2llZF9wbHVnaW5fZmls ZScpLmNoYW5nZShmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZm4gPSAkKHRoaXMpLnZhbCgp OwoKICAgICAgICBpZiAoZm4uc3Vic3RyKGZuLmxhc3RJbmRleE9mKCcuJykgKyAxKSA9PT0g J3R4dCcpIHsKICAgICAgICAgICAgaWVkX2lvLnNob3coKTsKICAgICAgICB9IGVsc2Ugewog ICAgICAgICAgICBpZWRfaW8uaGlkZSgpOwogICAgICAgIH0KICAgIH0pOwoKICAgICQoJyNp ZWRfcGx1Z2luNjQnKS5vbignYmx1ciwga2V5dXAnLCBmdW5jdGlvbigpIHsKICAgICAgICBp ZiAoJCh0aGlzKS52YWwoKSkgewogICAgICAgICAgICBpZWRfaW8uc2hvdygpOwogICAgICAg IH0gZWxzZSB7CiAgICAgICAgICAgIGllZF9pby5oaWRlKCk7CiAgICAgICAgfQogICAgfSk7 Cn0pOwpFT0pTCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgLy8gU2hvdy9oaWRl ICJPcHRpb25zIiBsaW5rIGJ5IHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlIGNsYXNzIG9uIHRo ZSBwbHVnaW4ncyAmbHQ7dHImZ3Q7CiAgICAgICAgZWNobyBzY3JpcHRfanMoPDw8RU9KUwp0 ZXh0cGF0dGVybi5SZWxheS5yZWdpc3RlcigndHhwQXN5bmNIcmVmLnN1Y2Nlc3MnLCBmdW5j dGlvbiAoZXZlbnQsIGRhdGEpIHsKICAgIGpRdWVyeShkYXRhLnRoaXMpLmNsb3Nlc3QoJ3Ry JykuZmluZCgnYS5wbHVnaW5fcHJlZnMnKS50b2dnbGVDbGFzcygnZW1wdHknKTsKfSk7CkVP SlMKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogUmVuZGVyIGEgbXVsdGktZWRp dCBkcm9wZG93biBsaXN0IG9mIGFjdGlvbnMuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJp bmcgJGZsYXZvdXIgICAgICAgV2hldGhlciB0aGUgZHJvcGRvd24gaXMgZm9yIGZpbGUtYmFz ZWQgcGx1Z2lucyBvciB0aG9zZSBpbiB0aGUgREIKICAgICAqIEBwYXJhbSAgc3RyaW5nICRw YWdlICAgICAgICAgIEN1cnJlbnQgcGFnZSBvZiByZXN1bHRzICh1bnVzZWQpCiAgICAgKiBA cGFyYW0gIHN0cmluZyAkc29ydCAgICAgICAgICBDdXJyZW50IHNvcnQgY29sdW1uIG5hbWUK ICAgICAqIEBwYXJhbSAgc3RyaW5nICRkaXIgICAgICAgICAgIEN1cnJlbnQgc29ydCBkaXJl Y3Rpb24gKGFzYyBvciBkZXNjKQogICAgICogQHBhcmFtICBzdHJpbmcgJGNyaXQgICAgICAg ICAgQ3VycmVudCBmaWx0ZXIgY3JpdGVyaWEgKHVudXNlZCkKICAgICAqIEBwYXJhbSAgc3Ry aW5nICRzZWFyY2hfbWV0aG9kIENvbHVtbiBuYW1lIHVwb24gd2hpY2ggdGhlIHNlYXJjaCBp cyBiZWluZyBwZXJmb3JtZWQgKHVudXNlZCkKICAgICAqIEByZXR1cm4gSFRNTAogICAgICov CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbXVsdGllZGl0X2Zvcm0oJGZsYXZvdXIsICRwYWdl LCAkc29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKQogICAgewogICAgICAgICRv cmRlcnMgPSBzZWxlY3RJbnB1dCgnb3JkZXInLCBhcnJheSgxPT4xLCAyPT4yLCAzPT4zLCA0 PT40LCA1PT41LCA2PT42LCA3PT43LCA4PT44LCA5PT45KSwgNSwgZmFsc2UpOwogICAgICAg ICRzdGF0aSA9IHNlbGVjdElucHV0KCdzd2l0Y2hfc3RhdHVzJywgYXJyYXkoJ3RvZ2dsZScg PT4gZ1R4dCgnaWVkX3BsdWdpbl90b2dnbGUnKSwgJ29uJyA9PiBnVHh0KCdvbicpLCAnb2Zm JyA9PiBnVHh0KCdvZmYnKSksICd0b2dnbGUnLCBmYWxzZSk7CiAgICAgICAgJGxpZmVjeWNs ZXMgPSBzZWxlY3RJbnB1dCgnaWVkX2xjX2V2ZW50JywgYXJyYXkoCiAgICAgICAgICAgICdp bnN0YWxsZWQnICAgICAgICAgPT4gZ1R4dCgnaWVkX3BsdWdpbl9sYmxfbGNfaW5zdGFsbCcp LAogICAgICAgICAgICAnZW5hYmxlZCcgICAgICAgICAgID0+IGdUeHQoJ2llZF9wbHVnaW5f bGJsX2xjX2VuYWJsZScpLAogICAgICAgICAgICAnaW5zdGFsbGVkLGVuYWJsZWQnID0+IGdU eHQoJ2llZF9wbHVnaW5fbGJsX2xjX2luc3RhYmxlJyksCiAgICAgICAgICAgICdkaXNhYmxl ZCcgICAgICAgICAgPT4gZ1R4dCgnaWVkX3BsdWdpbl9sYmxfbGNfZGlzYWJsZScpLAogICAg ICAgICAgICAnZGVsZXRlZCcgICAgICAgICAgID0+IGdUeHQoJ2llZF9wbHVnaW5fbGJsX2xj X2RlbGV0ZScpLAogICAgICAgICAgICAnZGlzYWJsZWQsZGVsZXRlZCcgID0+IGdUeHQoJ2ll ZF9wbHVnaW5fbGJsX2xjX2Rpc2RlbCcpLAogICAgICAgICkpOwoKICAgICAgICBpZiAoJGZs YXZvdXIgPT09ICdkYicpIHsKICAgICAgICAgICAgJG1ldGhvZHMgPSBhcnJheSgKICAgICAg ICAgICAgICAgICdjaGFuZ2VzdGF0dXMnID0+IGFycmF5KCdsYWJlbCcgPT4gZ1R4dCgnY2hh bmdlc3RhdHVzJyksICdodG1sJyA9PiAkc3RhdGkpLAogICAgICAgICAgICAgICAgJ2NoYW5n ZW9yZGVyJyAgPT4gYXJyYXkoJ2xhYmVsJyA9PiBnVHh0KCdjaGFuZ2VvcmRlcicpLCAnaHRt bCcgPT4gJG9yZGVycyksCiAgICAgICAgICAgICAgICAnbGlmZWN5Y2xlJyAgICA9PiBhcnJh eSgnbGFiZWwnID0+IGdUeHQoJ2llZF9wbHVnaW5fbGlmZWN5Y2xlJyksICdodG1sJyA9PiAk bGlmZWN5Y2xlcyksCiAgICAgICAgICAgICAgICAnZGVsZXRlJyAgICAgICA9PiBnVHh0KCdk ZWxldGUnKSwKICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAk bWV0aG9kcyA9IGFycmF5KAogICAgICAgICAgICAgICAgJ2xpZmVjeWNsZScgPT4gYXJyYXko J2xhYmVsJyA9PiBnVHh0KCdpZWRfcGx1Z2luX2xpZmVjeWNsZScpLCAnaHRtbCcgPT4gJGxp ZmVjeWNsZXMpLAogICAgICAgICAgICAgICAgJ3RleHRwYWNrJyAgPT4gYXJyYXkoJ2xhYmVs JyA9PiBnVHh0KCdpZWRfcGx1Z2luX2luc3RhbGxfdGV4dHBhY2snKSksCiAgICAgICAgICAg ICAgICAnZGVsZXRlJyAgICA9PiBnVHh0KCdkZWxldGUnKSwKICAgICAgICAgICAgKTsKICAg ICAgICB9CgogICAgICAgIHJldHVybiBtdWx0aV9lZGl0KCRtZXRob2RzLCAkdGhpcy0+aWVk X3BjX2V2ZW50LCAnbXVsdGlfZWRpdCcsICRwYWdlLCAkc29ydCwgJGRpciwgJGNyaXQsICRz ZWFyY2hfbWV0aG9kKTsKICAgIH0KCiAgICAvKioKICAgICAqIEhhbmRsZSBtdWx0aS1lZGl0 IGFjdGlvbnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtdWx0aV9lZGl0KCkKICAg IHsKICAgICAgICAkc2VsZWN0ZWQgPSBwcygnc2VsZWN0ZWQnKTsKICAgICAgICAkc2VsZWN0 ZWRfY2FjaGUgPSBwcygnc2VsZWN0ZWQtY2FjaGUnKTsKICAgICAgICAkbWV0aG9kID0gYXNz ZXJ0X3N0cmluZyhwcygnZWRpdF9tZXRob2QnKSk7CgogICAgICAgIGlmICgkc2VsZWN0ZWQg JiYgaXNfYXJyYXkoJHNlbGVjdGVkKSkgewogICAgICAgICAgICAkd2hlcmUgPSAibmFtZSBJ TiAoJyIuaW1wbG9kZSgiJywnIiwgZG9TbGFzaCgkc2VsZWN0ZWQpKS4iJykiOwogICAgICAg ICAgICAkbGNfb3B0cyA9IGRvX2xpc3QoZ2V0X3ByZWYoJ2llZF9wbHVnaW5fbGlmZWN5Y2xl X29wdGlvbnMnKSk7CgogICAgICAgICAgICBzd2l0Y2ggKCRtZXRob2QpIHsKICAgICAgICAg ICAgICAgIGNhc2UgJ2RlbGV0ZSc6CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHNl bGVjdGVkIGFzICRuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYWZlX2Zp ZWxkKCdmbGFncycsICd0eHBfcGx1Z2luJywgIm5hbWUgPSciLmRvU2xhc2goJG5hbWUpLiIn IikgJiBQTFVHSU5fTElGRUNZQ0xFX05PVElGWSkgewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgbG9hZF9wbHVnaW4oJG5hbWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGluX2FycmF5KCdkaXNhYmxlZCcsICRsY19vcHRzKSkgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2V2ZW50KCJwbHVnaW5fbGlmZWN5Y2xl LiRuYW1lIiwgJ2Rpc2FibGVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJ2RlbGV0ZWQnLCAkbGNf b3B0cykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja19ldmVu dCgicGx1Z2luX2xpZmVjeWNsZS4kbmFtZSIsICdkZWxldGVkJyk7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc2FmZV9kZWxldGUoJ3R4cF9wbHVnaW4n LCAkd2hlcmUpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAg IGNhc2UgJ2NoYW5nZXN0YXR1cyc6CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcygn c3dpdGNoX3N0YXR1cycpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ29uJzoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdzdGF0ID0gJzEnOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug J29mZic6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV3c3RhdCA9ICcwJzsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg ICBjYXNlICd0b2dnbGUnOgogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgJG5ld3N0YXQgPSAnKDEtc3RhdHVzKSc7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzZWxlY3RlZCBhcyAkbmFtZSkgewogICAg ICAgICAgICAgICAgICAgICAgICBpZiAoc2FmZV9maWVsZCgnZmxhZ3MnLCAndHhwX3BsdWdp bicsICJuYW1lID0nIi5kb1NsYXNoKCRuYW1lKS4iJyIpICYgUExVR0lOX0xJRkVDWUNMRV9O T1RJRlkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdGF0dXMgPSBzYWZlX2Zp ZWxkKCdzdGF0dXMnLCAndHhwX3BsdWdpbicsICJuYW1lID0nIi5kb1NsYXNoKCRuYW1lKS4i JyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXR1cyA9ICRzdGF0dXMgPyAn ZGlzYWJsZWQnIDogJ2VuYWJsZWQnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9h ZF9wbHVnaW4oJG5hbWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGluX2FycmF5KCRzdGF0dXMsICRsY19vcHRzKSkgewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhbGxiYWNrX2V2ZW50KCJwbHVnaW5fbGlmZWN5Y2xlLiRuYW1lIiwgJHN0 YXR1cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHNh ZmVfdXBkYXRlKCd0eHBfcGx1Z2luJywgJ3N0YXR1cyA9ICcuJG5ld3N0YXQsICR3aGVyZSk7 CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnY2hh bmdlb3JkZXInOgogICAgICAgICAgICAgICAgICAgICRvcmRlciA9IG1pbihtYXgoaW50dmFs KHBzKCdvcmRlcicpKSwgMSksIDkpOwogICAgICAgICAgICAgICAgICAgIHNhZmVfdXBkYXRl KCd0eHBfcGx1Z2luJywgJ2xvYWRfb3JkZXIgPSAnLiRvcmRlciwgJHdoZXJlKTsKICAgICAg ICAgICAgICAgICAgICBicmVhazsKCgogICAgICAgICAgICAgICAgY2FzZSAnbGlmZWN5Y2xl JzoKICAgICAgICAgICAgICAgICAgICAkbGNfZXZzID0gZG9fbGlzdChwcygnaWVkX2xjX2V2 ZW50JykpOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzZWxlY3RlZCBhcyAkbmFt ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGNfZXZzIGFzICRsY19l dikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tfZXZlbnQoInBsdWdp bl9saWZlY3ljbGUuJG5hbWUiLCAkbGNfZXYpOwogICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHNlbGVjdGVkID0gYXJy YXkoKTsKICAgICAgICB9CgogICAgICAgIGlmICgkc2VsZWN0ZWRfY2FjaGUgJiYgaXNfYXJy YXkoJHNlbGVjdGVkX2NhY2hlKSkgewogICAgICAgICAgICAkcGNkID0gZ2V0X3ByZWYoJ3Bs dWdpbl9jYWNoZV9kaXInKTsKCiAgICAgICAgICAgIHN3aXRjaCAoJG1ldGhvZCkgewogICAg ICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzoKICAgICAgICAgICAgICAgICAgICBmb3JlYWNo ICgkc2VsZWN0ZWRfY2FjaGUgYXMgJG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg JGZpbGVuYW1lcyA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICRkaXIgPSBk aXIoJHBjZCk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoJGZpbGUgPSAkZGly LT5yZWFkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAi LiIgJiYgJGZpbGUgIT0gIi4uIiAmJiBpbl9hcnJheSgkZmlsZSwgJHNlbGVjdGVkX2NhY2hl KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlYWRkciA9ICRwY2Qg LiBEUyAuICRmaWxlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlz X2RpcigkZmlsZWFkZHIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVubGluaygkZmlsZWFkZHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAgICAgICAgICAgJGRpci0+Y2xvc2UoKTsKICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAg Y2FzZSAnbGlmZWN5Y2xlJzoKICAgICAgICAgICAgICAgICAgICAkbGNfZXZzID0gZG9fbGlz dChwcygnaWVkX2xjX2V2ZW50JykpOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRz ZWxlY3RlZF9jYWNoZSBhcyAkbmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbmFt ZSA9IHN0cl9yZXBsYWNlKCcucGhwJywgJycsICRuYW1lKTsKICAgICAgICAgICAgICAgICAg ICAgICAgZm9yZWFjaCAoJGxjX2V2cyBhcyAkbGNfZXYpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhbGxiYWNrX2V2ZW50KCJwbHVnaW5fbGlmZWN5Y2xlLiRuYW1lIiwgJGxj X2V2KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlICd0ZXh0 cGFjayc6CiAgICAgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgdGV4dHBhY2sgZnJvbSB0 aGUgLnBocCBmaWxlIGFuZCBjYWxsIGluc3RhbGxfdGV4dHBhY2soKQogICAgICAgICAgICAg ICAgICAgICR0ZXh0cGFjayA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFj aCAoJHNlbGVjdGVkX2NhY2hlIGFzICRuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICRmaWxlYWRkciA9ICRwY2QgLiBEUyAuICRuYW1lOwoKICAgICAgICAgICAgICAgICAgICAg ICAgJGNvbnRlbnRzID0gZmlsZSgkZmlsZWFkZHIpOwogICAgICAgICAgICAgICAgICAgICAg ICAkaW5fdHAgPSAkaW5fY29tbWVudCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAg ICBmb3JlYWNoICgkY29udGVudHMgYXMgJHJvdykgewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHN0cnBvcygkcm93LCAnLyoqJykgPT09IDApIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAkaW5fY29tbWVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RycG9zKCRy b3csICcqKi8nKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRp bl9jb21tZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RycG9zKCRyb3csICdFT1Q7JykgIT09IGZh bHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo JGluX3RwID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRl eHRwYWNrW10gPSB0cmltKCRyb3cpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkaW5fY29tbWVudCAmJiBzdHJwb3Mo JHJvdywgJyRwbHVnaW5bXCd0ZXh0cGFja1wnXScpICE9PSBmYWxzZSkgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICRpbl90cCA9IHRydWU7CiAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgICAgICAgICAkZG9uZSA9IGluc3RhbGxfdGV4dHBhY2soaW1wbG9kZShuLCAk dGV4dHBhY2spKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAg ICAgfSBlbHNlIHsKICAgICAgICAgICAgJHNlbGVjdGVkX2NhY2hlID0gYXJyYXkoKTsKICAg ICAgICB9CgogICAgICAgICRtZXNzYWdlID0gJyc7CgogICAgICAgIGlmICgkc2VsZWN0ZWQg fHwgJHNlbGVjdGVkX2NhY2hlKSB7CiAgICAgICAgICAgIGlmICgkbWV0aG9kID09PSAnZGVs ZXRlJykgewogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSBnVHh0KCdwbHVnaW5fZGVsZXRl ZCcsIGFycmF5KCd7bmFtZX0nID0+IGltcGxvZGUoJywgJywgYXJyYXlfbWVyZ2UoJHNlbGVj dGVkLCAkc2VsZWN0ZWRfY2FjaGUpKSkpOwogICAgICAgICAgICB9IGVsc2VpZiAoJG1ldGhv ZCA9PT0gJ2xpZmVjeWNsZScpIHsKICAgICAgICAgICAgICAgICRtZXNzYWdlID0gZ1R4dCgn aWVkX3BsdWdpbl9sY19maXJlZCcsIGFycmF5KCd7bmFtZX0nID0+IGltcGxvZGUoJywgJywg YXJyYXlfbWVyZ2UoJHNlbGVjdGVkLCAkc2VsZWN0ZWRfY2FjaGUpKSwgJ3tldmVudH0nID0+ IGltcGxvZGUoJywnLCAkbGNfZXZzKSkpOwogICAgICAgICAgICB9IGVsc2VpZiAoJG1ldGhv ZCA9PT0gJ3RleHRwYWNrJykgewogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSBnVHh0KCd0 ZXh0cGFja19zdHJpbmdzX2luc3RhbGxlZCcsIGFycmF5KCd7Y291bnR9JyA9PiAkZG9uZSkp OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSBnVHh0 KCdwbHVnaW5fdXBkYXRlZCcsIGFycmF5KCd7bmFtZX0nID0+IGltcGxvZGUoJywgJywgJHNl bGVjdGVkKSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICR0aGlzLT50YWJs ZSgkbWVzc2FnZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW5kZXIgYSBoeXBlcmxpbmsg dG8gYW5vdGhlciBwbHVnaW4gY29tcG9zZXIgbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJh bSAgc3RyaW5nICRldnQgICAgICBUZXh0cGF0dGVybiBldmVudCBkZXN0aW5hdGlvbgogICAg ICogQHBhcmFtICBzdHJpbmcgJHN0cCAgICAgIFRleHRwYXR0ZXJuIHN0ZXAgKGFjdGlvbikg ZGVzdGluYXRpb24KICAgICAqIEBwYXJhbSAgc3RyaW5nICRsaW5rdGV4dCBUZXh0IGZvciB0 aGUgaHlwZXJsaW5rCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkbnYgICAgICAgTmFtZS12YWx1 ZSB0dXBsZXMgdG8gYWRkIHRvIHRoZSBVUkwKICAgICAqIEBwYXJhbSAgYXJyYXkgICRhdHRz ICAgICBOYW1lLXZhbHVlIHR1cGxlcyB0byBhZGQgdG8gdGhlIGFuY2hvciB0YWcKICAgICAq IEByZXR1cm4gSFRNTAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYW5jaG9yKCRl dnQsICRzdHAsICRsaW5rdGV4dCwgJG52ID0gYXJyYXkoKSwgJGF0dHMgPSBhcnJheSgpKQog ICAgewogICAgICAgICRudlsnX3R4cF90b2tlbiddID0gZm9ybV90b2tlbigpOwogICAgICAg ICRhdHRzWydocmVmJ10gPSAnP2V2ZW50PScgLiAkZXZ0IC4gKCRzdHAgPyAnJnN0ZXA9JyAu ICRzdHAgOiAnJykgLiAnJicgLiBodHRwX2J1aWxkX3F1ZXJ5KCRudik7CgogICAgICAgICRh dHRyaWJzID0gJyc7CgogICAgICAgIGZvcmVhY2ggKCRhdHRzIGFzICRuID0+ICR2KSB7CiAg ICAgICAgICAgICRhdHRyaWJzIC49ICcgJyAuIHR4cHNwZWNpYWxjaGFycygkbikgLiAnPSIn IC4gdHhwc3BlY2lhbGNoYXJzKCR2KSAuICciJzsKICAgICAgICB9CgogICAgICAgIHJldHVy biB0YWcoJGxpbmt0ZXh0LCAnYScsICRhdHRyaWJzKTsKICAgIH0KCiAgICAvKioKICAgICAq IFJlbmRlciBhbiBhc3luY2hyb25vdXMgYW5jaG9yIHRhZyBmb3IgdG9nZ2xpbmcgcGx1Z2lu IHN0YXR1cy4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkc3RhdHVzICAgQ3VycmVu dCBwbHVnaW4gc3RhdHVzICgwPWRpc2FibGVkLCAxPWVuYWJsZWQpCiAgICAgKiBAcGFyYW0g IHN0cmluZyAkbmFtZSAgICAgUGx1Z2luIG5hbWUgdG8gdG9nZ2xlCiAgICAgKiBAcGFyYW0g IHN0cmluZyAkbGlua3RleHQgTGluayB0ZXh0IHRvIGRpc3BsYXkgb24gdGhlIGFuY2hvcgog ICAgICogQHJldHVybiBzdHJpbmcgICAgICAgICAgIEhUTUwKICAgICAqLwogICAgcHJvdGVj dGVkIGZ1bmN0aW9uIHN0YXR1c19saW5rKCRzdGF0dXMsICRuYW1lLCAkbGlua3RleHQpCiAg ICB7CiAgICAgICAgcmV0dXJuIGFzeW5jSHJlZigkbGlua3RleHQsIGFycmF5KCdzdGVwJyA9 PiAnc3dpdGNoX3N0YXR1cycsICd0aGluZycgPT4gJG5hbWUpLCcgdGl0bGU9IicuKCRzdGF0 dXM9PTEgPyBnVHh0KCdkaXNhYmxlJykgOiBnVHh0KCdlbmFibGUnKSkuJyInICk7CiAgICB9 CgogICAgLyoqCiAgICAgKiBUb2dnbGUgdGhlIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gcGx1Z2lu IChwYXJhbXMgc2VudCB2aWEgUE9TVCkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBO ZXcgc3RhdHVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzd2l0Y2hfc3RhdHVzKCkK ICAgIHsKICAgICAgICBleHRyYWN0KGFycmF5X21hcCgnYXNzZXJ0X3N0cmluZycsIGdwc2Eo YXJyYXkoJ3RoaW5nJywgJ3ZhbHVlJykpKSk7CiAgICAgICAgJGNoYW5nZSA9ICgkdmFsdWUg PT0gZ1R4dCgneWVzJykpID8gMCA6IDE7CgogICAgICAgIHNhZmVfdXBkYXRlKCd0eHBfcGx1 Z2luJywgInN0YXR1cyA9ICRjaGFuZ2UiLCAibmFtZSA9ICciLmRvU2xhc2goJHRoaW5nKS4i JyIpOwoKICAgICAgICAkbGNfb3B0cyA9IGRvX2xpc3QoZ2V0X3ByZWYoJ2llZF9wbHVnaW5f bGlmZWN5Y2xlX29wdGlvbnMnKSk7CiAgICAgICAgJHN0cCA9ICRjaGFuZ2UgPyAnZW5hYmxl ZCcgOiAnZGlzYWJsZWQnOwoKICAgICAgICBpZiAoaW5fYXJyYXkoJHN0cCwgJGxjX29wdHMp ICYmIChzYWZlX2ZpZWxkKCdmbGFncycsICd0eHBfcGx1Z2luJywgIm5hbWU9JyIuZG9TbGFz aCgkdGhpbmcpLiInIikgJiBQTFVHSU5fTElGRUNZQ0xFX05PVElGWSkgKSB7CiAgICAgICAg ICAgIGxvYWRfcGx1Z2luKCR0aGluZywgdHJ1ZSk7CiAgICAgICAgICAgICRtZXNzYWdlID0g Y2FsbGJhY2tfZXZlbnQoInBsdWdpbl9saWZlY3ljbGUuJHRoaW5nIiwgJHN0cCk7CiAgICAg ICAgfQoKICAgICAgICBlY2hvIGdUeHQoJGNoYW5nZSA/ICd5ZXMnIDogJ25vJyk7CiAgICB9 CgogICAgLyoqCiAgICAgKiBSZXNldCB0aGUgZ2l2ZW4gcGx1Z2luIHRvIGl0cyBsYXN0IHJl c3RvcmUgcG9pbnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXN0b3JlKCkKICAg IHsKICAgICAgICAkbmFtZSA9IGRvU2xhc2goZ3BzKCduYW1lJykpOwogICAgICAgIHNhZmVf dXBkYXRlKCJ0eHBfcGx1Z2luIiwgImNvZGUgPSBjb2RlX3Jlc3RvcmUiLCAibmFtZT0nJG5h bWUnIik7CiAgICAgICAgJHRoaXMtPnRhYmxlKGdUeHQoJ2llZF9wbHVnaW5fcmVzdG9yZWQn LCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEVk aXQgdGhlIHNlbGVjdGVkIHBsdWdpbiBkYXRhLgogICAgICoKICAgICAqIEBwYXJhbSAgc3Ry aW5nICRtZXNzYWdlIEZsYXNoIG1lc3NhZ2UgdG8gZGlzcGxheSBhZnRlciBhY3Rpb24KICAg ICAqIEBwYXJhbSAgc3RyaW5nICRuZXdmaWxlIEZpbGVuYW1lIGlmIHBsdWdpbiBiZWluZyBl ZGl0ZWQgaXMgaW4gdGhlIGZpbGVzeXN0ZW0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9u IGVkaXQoJG1lc3NhZ2UgPSAnJywgJG5ld2ZpbGUgPSAnJykKICAgIHsKICAgICAgICAkbmV3 bmFtZSA9IHRyaW0oZ3BzKCduZXduYW1lJykpOwogICAgICAgICRmaWxlbmFtZSA9IGdwcygn ZmlsZW5hbWUnKTsKICAgICAgICAkZWRpdGZpbGUgPSAkZmlsZW5hbWUgPyAxIDogMDsKICAg ICAgICAkbmFtZSA9IGVtcHR5KCRuZXduYW1lKSA/IGdwcygnbmFtZScpIDogJG5ld25hbWU7 CiAgICAgICAgJG5hbWUgPSAoJG5ld2ZpbGUpID8gJG5ld2ZpbGUgOiAoKCRmaWxlbmFtZSkg PyAkZmlsZW5hbWUgOiAkbmFtZSk7CgogICAgICAgIHBhZ2V0b3AoZ1R4dCgnaWVkX3BsdWdp bl9lZGl0aW5nJywgYXJyYXkoJ3tuYW1lfScgPT4gdHhwc3BlY2lhbGNoYXJzKCRuYW1lKSkp LCAkbWVzc2FnZSk7CiAgICAgICAgcmVxdWlyZV9wcml2cygnaWVkX3BsdWdpbl9jb21wb3Nl cicpOwoKICAgICAgICBlY2hvICR0aGlzLT5pbnNlcnRfZWRpdG9ycygpOwoKICAgICAgICBp ZiAoISRlZGl0ZmlsZSkgewogICAgICAgICAgICAkcnMgPSBzYWZlX3JvdygiYXV0aG9yLCBh dXRob3JfdXJpLCB2ZXJzaW9uLCBkZXNjcmlwdGlvbiwgY29kZSwgaGVscCwgc3RhdHVzLCB0 eXBlLCBsb2FkX29yZGVyLCBmbGFncyIsICJ0eHBfcGx1Z2luIiwgIm5hbWU9JyIuZG9TbGFz aCgkbmFtZSkuIiciKTsKICAgICAgICAgICAgZXh0cmFjdCgkcnMpOwogICAgICAgICAgICBs aXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/ICR0aGlzLT5leHRyYWN0X2h1bmsoJGhlbHAs ICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5KCcnLCRoZWxwKTsKICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICAkcGx1Z2luID0gJHRoaXMtPnJlYWRfZmlsZShnZXRfcHJl ZigncGx1Z2luX2NhY2hlX2RpcicpLkRTLiRuYW1lKTsKICAgICAgICAgICAgJGZpbGVuYW1l ID0gJG5hbWU7CiAgICAgICAgICAgICRuYW1lID0gZXhwbG9kZSAoJy4nLCAkbmFtZSk7CiAg ICAgICAgICAgICRmaWxlZXh0ID0gYXJyYXlfcG9wKCRuYW1lKTsKICAgICAgICAgICAgJG5h bWUgPSBpbXBsb2RlKCRuYW1lKTsKICAgICAgICAgICAgZXh0cmFjdCgkcGx1Z2luKTsKICAg ICAgICAgICAgJHN0YXR1cyA9ICgkZmlsZWV4dD09J3BocCcpPyAxOiAwOwogICAgICAgIH0K CiAgICAgICAgJGlmZWwgPSBnZXRfcHJlZignaWVkX3BsdWdpbl9pbnRlcmZhY2VfZWxlbXMn KTsKICAgICAgICAkZGlzdGJsb2NrID0gKHN0cnBvcygkaWZlbCwgJ2Rpc3RyaWJ1dGlvbicp ICE9PSBmYWxzZSk7CiAgICAgICAgJHN0eWxlYmxvY2sgPSAoc3RycG9zKCRpZmVsLCAnc3R5 bGUnKSAhPT0gZmFsc2UpOwogICAgICAgICRkaXN0cmlidXRpb24gPSAnJzsKCiAgICAgICAg bGlzdCAoJHN0YXJ0X2NzcywgJGVuZF9jc3MpID0gJHRoaXMtPm1ha2VfbWFya2VycygiQ1NT IiwgJHRoaXMtPmllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICR0aGlzLT5pZWRf cGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7CgogICAgICAgIGlmICgkZGlzdGJsb2NrKSB7 CiAgICAgICAgICAgICRwbHVnaW5bJ25hbWUnXSA9ICRuYW1lOwogICAgICAgICAgICAkcGx1 Z2luWydhdXRob3InXSA9ICRhdXRob3I7CiAgICAgICAgICAgICRwbHVnaW5bJ2F1dGhvcl91 cmknXSA9ICRhdXRob3JfdXJpOwogICAgICAgICAgICAkcGx1Z2luWyd2ZXJzaW9uJ10gPSAk dmVyc2lvbjsKICAgICAgICAgICAgJHBsdWdpblsnZGVzY3JpcHRpb24nXSA9ICRkZXNjcmlw dGlvbjsKICAgICAgICAgICAgJHBsdWdpblsnaGVscCddID0gJHRoaXMtPnRleHRpbGUoJG5h bWUsICRoZWxwLCAkY3NzLCAkc3RhcnRfY3NzLCAkZW5kX2Nzcyk7CiAgICAgICAgICAgICRw bHVnaW5bJ2NvZGUnXSA9ICRjb2RlOwogICAgICAgICAgICAkcGx1Z2luWyd0eXBlJ10gPSAk dHlwZTsKICAgICAgICAgICAgJHBsdWdpblsnb3JkZXInXSA9ICRsb2FkX29yZGVyOwogICAg ICAgICAgICAkcGx1Z2luWydmbGFncyddID0gJGZsYWdzOwogICAgICAgICAgICAkcGx1Z2lu WydtZDUnXSA9IG1kNSggJHBsdWdpblsnY29kZSddICk7CiAgICAgICAgICAgICRkaXN0cmli dXRpb24gPSAnPHRleHRhcmVhIG5hbWU9ImRpc3RyaWJ1dGlvbiIgY2xhc3M9ImRpc3RyaWJ1 dGlvbi1jb2RlIiByb3dzPSIxIiBvbmNsaWNrPSJ0aGlzLnNlbGVjdCgpIj4nLmJhc2U2NF9l bmNvZGUoc2VyaWFsaXplKCRwbHVnaW4pKS4nPC90ZXh0YXJlYT4nOwogICAgICAgIH0KCiAg ICAgICAgZm9yICgkaSA9IDE7ICRpIDw9IDk7ICRpKyspICRvcmRlcnNbJGldID0gJGk7Cgog ICAgICAgICR0cF9wZnggPSB1bnNlcmlhbGl6ZShnZXRfcHJlZignaWVkX3BsdWdpbl90cF9w cmVmaXgnLCAnJywgMSkpOwogICAgICAgICR0cF9wZnggPSBpc3NldCgkdHBfcGZ4WyRuYW1l XSkgPyAkdHBfcGZ4WyRuYW1lXSA6ICcnOwoKICAgICAgICAkZm5hbWVzID0gJHRoaXMtPmdl dF9uYW1lKCRuYW1lLCAkdmVyc2lvbik7CiAgICAgICAgJG5hbWVkTGluayA9ICgkZmlsZW5h bWUpID8gYXJyYXkoJ2ZpbGVuYW1lJyA9PiAkZmlsZW5hbWUpIDogYXJyYXkoJ25hbWUnID0+ ICRuYW1lKTsKICAgICAgICAkemlwcGVkTGluayA9IGFycmF5X21lcmdlKCRuYW1lZExpbmss IGFycmF5KCd0eXBlJyA9PiAnemlwJykpOwoKICAgICAgICAkc2xpbmsgPSAkdGhpcy0+YW5j aG9yKCR0aGlzLT5pZWRfcGNfZXZlbnQsICdzYXZlX2FzX2ZpbGUnLCBnVHh0KCdpZWRfcGx1 Z2luX2V4cG9ydCcsIGFycmF5KCd7bmFtZX0nID0+ICRmbmFtZXNbMF0pKSwgJG5hbWVkTGlu ayk7CiAgICAgICAgJHN6aXBsaW5rID0gJHRoaXMtPmFuY2hvcigkdGhpcy0+aWVkX3BjX2V2 ZW50LCAnc2F2ZV9hc19maWxlJywgZ1R4dCgnaWVkX3BsdWdpbl9leHBvcnRfemlwJywgYXJy YXkoJ3tuYW1lfScgPT4gJGZuYW1lc1sxXSkpLCAkemlwcGVkTGluayk7CiAgICAgICAgJHNw aHBsaW5rID0gJHRoaXMtPmFuY2hvcigkdGhpcy0+aWVkX3BjX2V2ZW50LCAnc2F2ZV9hc19w aHBfZmlsZScsIGdUeHQoJ2llZF9wbHVnaW5fc2F2ZV9hcycsIGFycmF5KCd7bmFtZX0nID0+ ICRmbmFtZXNbMl0pKSwgJG5hbWVkTGluayk7CiAgICAgICAgJHN0eHRsaW5rID0gJHRoaXMt PmFuY2hvcigkdGhpcy0+aWVkX3BjX2V2ZW50LCAnc2F2ZV9hc190ZXh0cGFjaycsIGdUeHQo J2llZF9wbHVnaW5fZXhwb3J0X3RleHRwYWNrJyksICRuYW1lZExpbmspOwogICAgICAgICR2 aGVscGxpbmtmdWxsID0gKCRoZWxwKSA/ICdbICcgLiR0aGlzLT5hbmNob3IoJHRoaXMtPmll ZF9wY19ldmVudCwgJ2hlbHBfdmlld2VyJywgZ1R4dCgnaWVkX3BsdWdpbl9kb2NzJyksICRu YW1lZExpbmspIC4gJyBdJyA6ICcnOwoKICAgICAgICAkbXNncG9wID0gJzxkaXYgaWQ9Imll ZF9wbHVnaW5fbXNncG9wIj48aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0icHVibGlzaCIg dmFsdWU9IicuZ1R4dCgnb2snKS4nIiBvbmNsaWNrPSJpZWRfcGx1Z2luX3RvZ2dsZV9tc2dw b3AoXCcwXCcpOyIgLz48aDI+Jy5nVHh0KCdpZWRfcGx1Z2luX21zZ3BvcF9sYmwnKS4nPC9o Mj48c3BhbiBjbGFzcz0iaWVkX3BsdWdpbl9tc2dwb3BfY29udGVudCI+PC9zcGFuPjwvZGl2 Pic7CgogICAgICAgICRuZXduYW1lID0gZklucHV0KCd0ZXh0JywgJ25ld25hbWUnLCAkbmFt ZSwgJycsICcnLCAnJywgSU5QVVRfUkVHVUxBUik7CiAgICAgICAgJGF1dGhvcl93aWRnZXQg PSBmSW5wdXQoJ3RleHQnLCAnYXV0aG9yJywgJGF1dGhvciwgJycsICcnLCAnJywgSU5QVVRf UkVHVUxBUik7CiAgICAgICAgJGF1dGhvcl91cmlfd2lkZ2V0ID0gZklucHV0KCd0ZXh0Jywg J2F1dGhvcl91cmknLCAkYXV0aG9yX3VyaSwgJycsICcnLCAnJywgSU5QVVRfUkVHVUxBUik7 CiAgICAgICAgJHZlcnNpb25fd2lkZ2V0ID0gZklucHV0KCd0ZXh0JywgJ3ZlcnNpb24nLCAk dmVyc2lvbiwgJ2lucHV0LXNtYWxsJywgJycsICcnLElOUFVUX1NNQUxMKSAuc3AuICgoJGVk aXRmaWxlKSA/IGNoZWNrYm94KCdyZW5hbWVfZmlsZScsICcxJywgMCwgJycsJ3JlbmFtZV9m aWxlJykgLiAnIDxsYWJlbCBmb3I9InJlbmFtZV9maWxlIj4nLmdUeHQoJ2llZF9wbHVnaW5f cmVuYW1lX2ZpbGUnKS4nPC9sYWJlbD4nIDogY2hlY2tib3goJ3Jlc3RvcmVfcG9pbnQnLCAn MScsIDAsICcnLCdyZXN0b3JlX3BvaW50JykgLiAnIDxsYWJlbCBmb3I9InJlc3RvcmVfcG9p bnQiPicuZ1R4dCgnaWVkX3BsdWdpbl9yZXN0b3JlX3BvaW50JykuJzwvbGFiZWw+Jyk7CiAg ICAgICAgJGRlc2NyaXB0aW9uX3dpZGdldCA9IGZJbnB1dCgndGV4dCcsICdkZXNjcmlwdGlv bicsICRkZXNjcmlwdGlvbiwgJ2lucHV0LXhsYXJnZScsICcnLCAnJywgSU5QVVRfUkVHVUxB Uik7CiAgICAgICAgJGNvZGVibG9jayA9ICc8dGV4dGFyZWEgbmFtZT0iY29kZSIgaWQ9InBs dWdpbl9lZGl0b3IiIHJvd3M9IicuSU5QVVRfUkVHVUxBUi4nIiBjbGFzcz0iY29kZSBjb2Rl cHJlc3MgcGhwIiBtYXhsZW5ndGg9IicuJHRoaXMtPmllZF9wbHVnaW5fZ2xvYmFsc1snc2l6 ZV9jb2RlJ10uJyI+Jy50eHBzcGVjaWFsY2hhcnMoJGNvZGUpLic8L3RleHRhcmVhPjxkaXYg Y2xhc3M9ImllZF9wbHVnaW5faW5mb19iYXIiPjxzcGFuPicuZ1R4dCgnaWVkX3BsdWdpbl9q dW1wX3RvX2xpbmUnKS4nPC9zcGFuPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaWVkX3BsdWdp bl9qdW1wVG9MaW5lIiBzaXplPSI1IiBtYXhsZW5ndGg9IjYiIC8+PHNwYW4gY2xhc3M9Imll ZF9wbHVnaW5fY2hhcnNSZW1haW4iPjwvc3Bhbj48L2Rpdj4nOwogICAgICAgICRoZWxwX3dp ZGdldCA9ICc8dGV4dGFyZWEgbmFtZT0iaGVscCIgaWQ9InBsdWdpbl9oZWxwIiByb3dzPSIn LklOUFVUX1JFR1VMQVIuJyIgY2xhc3M9Im1jZUVkaXRvciIgbWF4bGVuZ3RoPSInLiR0aGlz LT5pZWRfcGx1Z2luX2dsb2JhbHNbJ3NpemVfaGVscCddLiciPicudHhwc3BlY2lhbGNoYXJz KCRoZWxwKS4nPC90ZXh0YXJlYT48ZGl2IGNsYXNzPSJpZWRfcGx1Z2luX2luZm9fYmFyIj48 c3BhbiBjbGFzcz0iaWVkX3BsdWdpbl9jaGFyc1JlbWFpbiI+PC9zcGFuPjwvZGl2Pic7CiAg ICAgICAgJGNzc193aWRnZXQgPSAoJHN0eWxlYmxvY2spID8gJzx0ZXh0YXJlYSBuYW1lPSJj c3MiIGlkPSJwbHVnaW5faGVscF9jc3MiIHJvd3M9IicuSU5QVVRfTUVESVVNLiciIGNsYXNz PSJjb2RlIiBtYXhsZW5ndGg9IicuJHRoaXMtPmllZF9wbHVnaW5fZ2xvYmFsc1snc2l6ZV9j c3MnXS4nIj4nLnR4cHNwZWNpYWxjaGFycygkY3NzKS4nPC90ZXh0YXJlYT48ZGl2IGNsYXNz PSJpZWRfcGx1Z2luX2luZm9fYmFyIj48c3BhbiBjbGFzcz0iaWVkX3BsdWdpbl9jaGFyc1Jl bWFpbiI+PC9zcGFuPjwvZGl2PicgOiAnJzsKICAgICAgICAkcGx1Z3N0YXR1cyA9ICghJGVk aXRmaWxlKSA/IHNwLnNwLmNoZWNrYm94KCdzdGF0dXMnLDEsJHN0YXR1cywgJycsJ3N0YXR1 cycpLiAnIDxsYWJlbCBmb3I9InN0YXR1cyI+Jy5nVHh0KCdpZWRfcGx1Z2luX2VuYWJsZScp Lic8L2xhYmVsPicgOiAnJzsKCiAgICAgICAgJHBsdWd0eXBlcyA9IGFycmF5KAogICAgICAg ICAgICAnMCcgPT4gZ1R4dCgnaWVkX3BsdWdpbl90eXBlXzAnKSwKICAgICAgICAgICAgJzEn ID0+IGdUeHQoJ2llZF9wbHVnaW5fdHlwZV8xJyksCiAgICAgICAgICAgICcyJyA9PiBnVHh0 KCdpZWRfcGx1Z2luX3R5cGVfMicpLAogICAgICAgICAgICAnMycgPT4gZ1R4dCgnaWVkX3Bs dWdpbl90eXBlXzMnKSwKICAgICAgICAgICAgJzQnID0+IGdUeHQoJ2llZF9wbHVnaW5fdHlw ZV80JyksCiAgICAgICAgICAgICc1JyA9PiBnVHh0KCdpZWRfcGx1Z2luX3R5cGVfNScpLAog ICAgICAgICk7CiAgICAgICAgJHBsdWd0eXBlID0gc2VsZWN0SW5wdXQoJ3R5cGUnLCAkcGx1 Z3R5cGVzLCAkdHlwZSwgZmFsc2UsICcnLCAndHlwZScpOwoKICAgICAgICAkcGx1Z29yZGVy ID0gc2VsZWN0SW5wdXQoJ2xvYWRfb3JkZXInLCAkb3JkZXJzLCAkbG9hZF9vcmRlciwgMCwg MCk7CiAgICAgICAgJGZsYWdsaXN0ID0gY2hlY2tib3goCiAgICAgICAgICAgICAgICAnZmxh Z3NbXScsCiAgICAgICAgICAgICAgICBQTFVHSU5fSEFTX1BSRUZTLAogICAgICAgICAgICAg ICAgKCgkZmxhZ3MgJiBQTFVHSU5fSEFTX1BSRUZTKSA/IDEgOiAwKSwKICAgICAgICAgICAg ICAgICcnLAogICAgICAgICAgICAgICAgJ2llZF9wbHVnaW5fZmxhZ19oYXNfcHJlZnMnCiAg ICAgICAgICAgICkKICAgICAgICAgICAgLm4uICc8bGFiZWwgZm9yPSJpZWRfcGx1Z2luX2Zs YWdfaGFzX3ByZWZzIj4nIC4gZ1R4dCgnaWVkX3BsdWdpbl9mbGFnX2hhc19wcmVmcycpIC4g JzwvbGFiZWw+JwogICAgICAgICAgICAubi4gY2hlY2tib3goCiAgICAgICAgICAgICAgICAn ZmxhZ3NbXScsCiAgICAgICAgICAgICAgICBQTFVHSU5fTElGRUNZQ0xFX05PVElGWSwKICAg ICAgICAgICAgICAgICgoJGZsYWdzICYgUExVR0lOX0xJRkVDWUNMRV9OT1RJRlkpID8gMSA6 IDApLAogICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAnaWVkX3BsdWdpbl9m bGFnX2xpZmVjeWNsZV9ub3RpZnknCiAgICAgICAgICAgICkKICAgICAgICAgICAgLm4uICc8 bGFiZWwgZm9yPSJpZWRfcGx1Z2luX2ZsYWdfbGlmZWN5Y2xlX25vdGlmeSI+JyAuIGdUeHQo J2llZF9wbHVnaW5fZmxhZ19saWZlY3ljbGVfbm90aWZ5JykgLiAnPC9sYWJlbD4nOwoKICAg ICAgICAkc3ViID0gZ3JhZihmSW5wdXQoJ3N1Ym1pdCcsICcnLCBnVHh0KCdzYXZlJyksICdw dWJsaXNoJywgJycsICcnLCAnJywgJycsICdpZWRfZWRpdFNhdmUnKSwgYXJyYXkoJ2NsYXNz JyA9PiAndHhwLXNhdmUnKSk7CiAgICAgICAgJGNvZGVzdWIgPSAoISRlZGl0ZmlsZSkgPyAn PGEgY2xhc3M9Im5hdmxpbmsiIG5hbWU9ImllZF9wbHVnaW5fY29kZV9zYXZlIiBpZD0iaWVk X3BsdWdpbl9jb2RlX3NhdmUiPicgLiBnVHh0KCdpZWRfcGx1Z2luX2NvZGVfc2F2ZScpIC4g JzwvYT4nIDogJyc7CiAgICAgICAgJG1ldGFzdWIgPSAoISRlZGl0ZmlsZSkgPyAnPGEgY2xh c3M9Im5hdmxpbmsiIG5hbWU9ImllZF9wbHVnaW5fbWV0YV9zYXZlIiBpZD0iaWVkX3BsdWdp bl9tZXRhX3NhdmUiPicgLiBnVHh0KCdpZWRfcGx1Z2luX21ldGFfc2F2ZScpIC4gJzwvYT4n IDogJyc7CgogICAgICAgIC8vIExhbmd1YWdlIGluZm8uIGllZF92aXNpYmxlX2xhbmdzIGlz IHRoZSB1c2VyJ3MgY2hvaWNlIG9mIHdoaWNoIG9uZXMgdGhleSB3YW50IHRvIHNlZSBhdmFp bGFibGUuCiAgICAgICAgLy8gaWVkX2F2YWlsYWJsZV9sYW5ncyBpcyB0aGUgbGlzdCBvZiBh Y3R1YWwsIGN1cnJlbnRseS1pbnN0YWxsZWQgbGFuZ3MuCiAgICAgICAgJHRoZUxhbmcgPSBn ZXRfcHJlZignbGFuZ3VhZ2UnKTsKICAgICAgICAkc3RyaW5nX2NvdW50ID0gKCR0cF9wZngp ID8gc2FmZV9yb3dzKCdsYW5nLCBjb3VudCgqKSBhcyBjb3VudCcsICd0eHBfbGFuZycsICJu YW1lIGxpa2UgJyIuJHRwX3BmeC4iJScgZ3JvdXAgYnkgbGFuZyIpIDogYXJyYXkoKTsKICAg ICAgICAkaWVkX2xpc3RsYW5ncyA9IGdldF9wcmVmKCdpZWRfcGx1Z2luX2xhbmdfY2hvb3Nl JywgJ2luc3RhbGxlZCcpOwogICAgICAgICRpZWRfdmlzaWJsZV9sYW5ncyA9IHNlbGY6Omxh bmdfbGlzdCgkaWVkX2xpc3RsYW5ncyk7CiAgICAgICAgJGllZF9hdmFpbGFibGVfbGFuZ3Mg PSAoJGllZF9saXN0bGFuZ3MgPT0gJ2luc3RhbGxlZCcpID8gJGllZF92aXNpYmxlX2xhbmdz IDogc2VsZjo6bGFuZ19saXN0KCdpbnN0YWxsZWQnKTsKICAgICAgICAkZGZsdF9sYW5nID0g Z2V0X3ByZWYoJ2llZF9wbHVnaW5fbGFuZ19kZWZhdWx0JywgJHRoZUxhbmcpOwogICAgICAg ICRkZmx0X2xhbmcgPSBhcnJheV9rZXlfZXhpc3RzKCRkZmx0X2xhbmcsICRpZWRfdmlzaWJs ZV9sYW5ncykgPyAkZGZsdF9sYW5nIDogJHRoZUxhbmc7CiAgICAgICAgJGRmbHRfbGFuZ19z dHJpbmdfY291bnQgPSAwOwoKICAgICAgICBmb3JlYWNoICgkc3RyaW5nX2NvdW50IGFzICRz dHJfdG90YWxzKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkaWVkX3Zpc2libGVfbGFuZ3Nb JHN0cl90b3RhbHNbJ2xhbmcnXV0pKSB7CiAgICAgICAgICAgICAgICAkaWVkX3Zpc2libGVf bGFuZ3NbJHN0cl90b3RhbHNbJ2xhbmcnXV0gLj0gJyBbJy4kc3RyX3RvdGFsc1snY291bnQn XS4nXSc7CiAgICAgICAgICAgICAgICBpZiAoJHN0cl90b3RhbHNbJ2xhbmcnXSA9PT0gJGRm bHRfbGFuZykgewogICAgICAgICAgICAgICAgICAgICRkZmx0X2xhbmdfc3RyaW5nX2NvdW50 ID0gJHN0cl90b3RhbHNbJ2NvdW50J107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgICAgJGxhbmdzZWwgPSBzZWxlY3RJbnB1dCgnaWVkX3BsdWdp bl90cF9sYW5nJywgJGllZF92aXNpYmxlX2xhbmdzLCAkZGZsdF9sYW5nLCAnJywgJycsICdp ZWRfcGx1Z2luX3RwX2xhbmcnKQogICAgICAgICAgICAuZklucHV0KCdidXR0b24nLCAnaWVk X3BsdWdpbl90cF9yZWZyZXNoJywgZ1R4dCgnaWVkX3BsdWdpbl9sb2FkJyksICcnLCAnJywg JycsICcnLCAnJywgJ2llZF9wbHVnaW5fdHBfcmVmcmVzaCcpOwoKICAgICAgICAkcHJlc2Vs ZWN0ZWQgPSBkb19saXN0KGdldF9wcmVmKCdpZWRfcGx1Z2luX2xhbmdfc2VsZWN0ZWQnLCAn JykpOwoKICAgICAgICAkb3BfbGFuZ3NbXSA9ICc8c2VsZWN0IG5hbWU9ImllZF9wbHVnaW5f dHBfb3BsYW5ncyIgaWQ9ImllZF9wbHVnaW5fdHBfb3BsYW5ncyIgbXVsdGlwbGU9Im11bHRp cGxlIj48b3B0aW9uIHZhbHVlPSIiPjwvb3B0aW9uPic7CiAgICAgICAgZm9yZWFjaCAoJGll ZF9hdmFpbGFibGVfbGFuZ3MgYXMgJGxhbmdjb2RlID0+ICRhbGFuZykgewogICAgICAgICAg ICAkc2VsID0gaW5fYXJyYXkoJGxhbmdjb2RlLCAkcHJlc2VsZWN0ZWQpID8gJyBzZWxlY3Rl ZD0ic2VsZWN0ZWQiJyA6ICcnOwogICAgICAgICAgICAkb3BfbGFuZ3NbXSA9ICc8b3B0aW9u IHZhbHVlPSInLiRsYW5nY29kZS4nIicuJHNlbC4nPicuJGFsYW5nLic8L29wdGlvbj4nOwog ICAgICAgIH0KICAgICAgICAkb3BfbGFuZ3NbXSA9ICc8L3NlbGVjdD4nOwoKICAgICAgICAk dHBfc3RyaW5ncyA9IGFycmF5KCk7CiAgICAgICAgJHRwX3Jvd3MgPSBpZWRfcGx1Z2luX3Rl eHRwYWNrX2dyYWIoJGRmbHRfbGFuZywgJHRwX3BmeCk7CiAgICAgICAgZm9yZWFjaCAoJHRw X3Jvd3MgYXMgJHRwX3N0cmluZykgewogICAgICAgICAgICAkYXBzZWwgPSBzZWxlY3RJbnB1 dCgnaWVkX3BsdWdpbl90cF9ldmVudCcsIGFycmF5KCdhZG1pbicgPT4gZ1R4dCgnYWRtaW4n KSwgJ3B1YmxpYycgPT4gZ1R4dCgncHVibGljJyksICdjb21tb24nID0+IGdUeHQoJ2JvdGgn KSksICgkdHBfc3RyaW5nWydldmVudCddID09ICdwdWJsaWMnID8gJ3B1YmxpYycgOiAoJHRw X3N0cmluZ1snZXZlbnQnXSA9PSAnY29tbW9uJyA/ICdjb21tb24nIDogJ2FkbWluJykpICk7 CiAgICAgICAgICAgICR0cF9zdHJpbmdzW10gPSAnPGxpPicuZklucHV0KCd0ZXh0JywgJ3Rl eHRwYWNrXycuJHRwX3N0cmluZ1snbmFtZSddLCAkdHBfc3RyaW5nWydkYXRhJ10pLicgJy4k YXBzZWwuJyA8bGFiZWw+Jy4kdHBfc3RyaW5nWyduYW1lJ10uJzwvbGFiZWw+Jy4nPC9saT4n OwogICAgICAgIH0KCgogICAgICAgICRlcnJfcHJlZml4ID0gZ1R4dCgnaWVkX3BsdWdpbl9z eW50YXhfZXJyJyk7CiAgICAgICAgJGNvZGVzYXZlX29rID0gZ1R4dCgnaWVkX3BsdWdpbl9j b2RlX3NhdmVkJyk7CiAgICAgICAgJHBocGRvYyA9ICcnOwoKICAgICAgICAvLyBUT0RPCiAg ICAgICAgJGNsYXNzRmluZGVyID0gJy9jbGFzc1tcc1xuXSsoXHcrKVtcc1xuXSpcez8oZnVu Y3Rpb25bXHNcbl0rKFx3KylbXHNcbl0qXCguKlwpW1xzXG5dKlx7PykqLyc7CiAgICAgICAg JGZ1bmN0aW9uRmluZGVyID0gJy9mdW5jdGlvbltcc1xuXSsoXHcrKVtcc1xuXSpcKC4qXClb XHNcbl0qXHs/Lyc7CiAgICAgICAgcHJlZ19tYXRjaF9hbGwoJGZ1bmN0aW9uRmluZGVyLCAk Y29kZSAsICRmdW5jdGlvbkFycmF5KTsKICAgICAgICAvLyBzZWxlY3RJbnB1dCByZXF1aXJl cyBrZXkgYW5kIHZhbHVlIHRvIGJlIHRoZSBzYW1lCiAgICAvL2RtcCgkZnVuY3Rpb25BcnJh eSk7CiAgICAgICAgJGZuQXJyYXkgPSBhcnJheSgpOwogICAgLyoKICAgICAgICBmb3JlYWNo ICgkZnVuY3Rpb25BcnJheVsxXSBhcyAka2V5ID0+ICR2YWwpIHsKICAgICAgICAgICAgJGZu QXJyYXlbJHZhbF0gPSAkZnVuY3Rpb25BcnJheVsxXVska2V5XTsKICAgICAgICB9CiAgICAg ICAgJHBocGRvYyA9IHNlbGVjdElucHV0KCdpZWRfcGx1Z2luX3RvX3BocGRvYycsICRmbkFy cmF5LCAnJywgZmFsc2UsICcnLCAnaWVkX3BsdWdpbl90b19waHBkb2MnKQogICAgICAgICAg ICAuJzxhIGNsYXNzPSJuYXZsaW5rIiBuYW1lPSJpZWRfcGx1Z2luX2J0bl9waHBkb2MiIGlk PSJpZWRfcGx1Z2luX2J0bl9waHBkb2MiPicgLiBnVHh0KCdpZWRfcGx1Z2luX3BocF9kb2Mn KSAuICc8L2E+JzsKICAgICovCiAgICAgICAgJHBocGRvYyA9ICcnOwogICAgICAgICR0YWJD b3VudCA9ICR0YWJBY3RpdmUgPSAwOwogICAgICAgICRzZWxlY3RlZFRhYiA9IGdldF9wcmVm KCdwYW5lXycgLiAkdGhpcy0+aWVkX3BjX2V2ZW50IC4gJ192aXNpYmxlJyk7CiAgICAgICAg JHRva2VuU3VmZml4ID0gJHRoaXMtPmllZF9wY19ldmVudCAuIGZvcm1fdG9rZW4oKSAuIGdl dF9wcmVmKCdibG9nX3VpZCcpOwogICAgICAgICRwYW5lbFNldCA9IGFycmF5KAogICAgICAg ICAgICAwID0+ICdtZXRhJywKICAgICAgICAgICAgMSA9PiAnY29kZScsCiAgICAgICAgICAg IDIgPT4gJ3BhY2snLAogICAgICAgICAgICAzID0+ICdkb2NzJywKICAgICAgICAgICAgKTsK CiAgICAgICAgJHN3aXRjaGVyTGlzdCA9IGFycmF5KCk7CgogICAgICAgIGZvcmVhY2ggKCRw YW5lbFNldCBhcyAkdGFiSWQgPT4gJHBhbmVsKSB7CiAgICAgICAgICAgICRzd2l0Y2hlckxp c3RbXSA9ICc8bGk+PGEgaHJlZj0iI29wdGlvbnNfZ3JvdXBfJy4kcGFuZWwuJyIgZGF0YS10 eHAtcGFuZT0iJy4kcGFuZWwuJyIgZGF0YS10eHAtdG9rZW49IicgLiBtZDUoJHBhbmVsLiR0 b2tlblN1ZmZpeCkuJyI+JyAuIGdUeHQoJ2llZF9wbHVnaW5fJy4kcGFuZWwuJ19sZWdlbmQn KSAuICc8L2E+PC9saT4nOwogICAgICAgICAgICBpZiAoJHBhbmVsID09PSAkc2VsZWN0ZWRU YWIpIHsKICAgICAgICAgICAgICAgICR0YWJBY3RpdmUgPSAkdGFiQ291bnQ7CiAgICAgICAg ICAgIH0KCiAgICAgICAgICAgICR0YWJDb3VudCsrOwogICAgICAgIH0KCiAgICAgICAgZWNo bwogICAgICAgICAgICBuLiBmb3JtKAogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InR4 cC1sYXlvdXQiPicKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWxheW91 dC0yY29sIj4nCiAgICAgICAgICAgICAgICAubi4gaGVkKGdUeHQoJ2llZF9wbHVnaW5fZWRp dCcsIGFycmF5KCd7bmFtZX0nID0+ICRuYW1lLCAne3ZlcnNpb259JyA9PiAkdmVyc2lvbikp LCAxLCBhcnJheSgnY2xhc3MnID0+ICd0eHAtaGVhZGluZycpKQogICAgICAgICAgICAgICAg Lm4uICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzxkaXYgY2xhc3M9InR4cC1sYXlv dXQtMmNvbCI+JwogICAgICAgICAgICAgICAgLm4uIHNMaW5rKCR0aGlzLT5pZWRfcGNfZXZl bnQsICcnLCBnVHh0KCdpZWRfcGx1Z2luX2xpc3QnKSwgJ2llZF9wbHVnaW5fbGluaycpCiAg ICAgICAgICAgICAgICAubi4gJzwvZGl2PicKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBj bGFzcz0idHhwLWxheW91dC00Y29sLWFsdCIgaWQ9ImllZF9lZGl0X3N3aXRjaGVyIiByb2xl PSJyZWdpb24iPicKICAgICAgICAgICAgICAgIC5uLiAnPHNlY3Rpb24gY2xhc3M9InR4cC1k ZXRhaWxzIiBpZD0iYWxsX29wdGlvbnMiIGFyaWEtbGFiZWxsZWRieT0iYWxsX29wdGlvbnMt bGFiZWwiPicKICAgICAgICAgICAgICAgIC5uLiAnPGgzIGlkPSJhbGxfb3B0aW9ucy1sYWJl bCI+UGFuZWxzPC9oMz4nCiAgICAgICAgICAgICAgICAubi4gJzxkaXYgcm9sZT0iZ3JvdXAi PicKICAgICAgICAgICAgICAgIC5uLiAnPHVsIGNsYXNzPSJzd2l0Y2hlci1saXN0Ij4nCiAg ICAgICAgICAgICAgICAuaW1wbG9kZShuLCAkc3dpdGNoZXJMaXN0KQogICAgICAgICAgICAg ICAgLm4uICc8L3VsPicKICAgICAgICAgICAgICAgIC5uLiAnPC9kaXY+JwogICAgICAgICAg ICAgICAgLm4uICc8L3NlY3Rpb24+JwogICAgICAgICAgICAgICAgLm4uICRzdWIKICAgICAg ICAgICAgICAgIC5uLiAnPHNlY3Rpb24gY2xhc3M9InR4cC1wcmVmcy1ncm91cCIgaWQ9Im9w dGlvbnNfZ3JvdXBfZGlzdCIgYXJpYS1sYWJlbGxlZGJ5PSJvcHRpb25zX2dyb3VwX2Rpc3Qt bGFiZWwiPicKICAgICAgICAgICAgICAgIC5uLiBoZWQoZ1R4dCgnaWVkX3BsdWdpbl91dGls c19sZWdlbmQnKSwgMiwgYXJyYXkoJ2lkJyA9PiAnb3B0aW9uc19ncm91cF9kaXN0LWxhYmVs JykpCiAgICAgICAgICAgICAgICAubi4gZ3JhZihnVHh0KCdpZWRfcGx1Z2luX3V0aWxzX2xl Z2VuZF9leHRyYScpLCBhcnJheSgnY2xhc3MnID0+ICd3YXJuaW5nJykpCiAgICAgICAgICAg ICAgICAubi4gKCgkZGlzdGJsb2NrKSA/ICc8ZGl2PicgLiAkZGlzdHJpYnV0aW9uIC4gJzwv ZGl2PicgOiAnJykKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0t ZmllbGQgdHhwLWZvcm0tZmllbGQtdGV4dGFyZWEiPicKICAgICAgICAgICAgICAgIC5uLiAn PGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtbGFiZWwiPjxsYWJlbCBmb3I9ImllZF9wbHVn aW5fdHBfb3BsYW5ncyI+JyAuIGdUeHQoJ2llZF9wbHVnaW5fbGFuZ19jaG9vc2UnKSAuICc8 L2xhYmVsPjwvZGl2PicKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZv cm0tZmllbGQtdmFsdWUiPicgLiBpbXBsb2RlKG4sICRvcF9sYW5ncykgLiAnPC9kaXY+Jwog ICAgICAgICAgICAgICAgLm4uICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzx1bD4n CiAgICAgICAgICAgICAgICAubi4gJzxsaT4nIC4gJHNsaW5rIC4gJzwvbGk+JwogICAgICAg ICAgICAgICAgLm4uICc8bGk+JyAuICRzemlwbGluayAuICc8L2xpPicKICAgICAgICAgICAg ICAgIC5uLiAnPGxpPicgLiAkc3R4dGxpbmsgLiAnPC9saT4nCiAgICAgICAgICAgICAgICAu bi4gJzxsaT4nIC4gJHNwaHBsaW5rIC4gJzwvbGk+JwogICAgICAgICAgICAgICAgLm4uICc8 L3VsPicKICAgICAgICAgICAgICAgIC5uLiAnPC9zZWN0aW9uPicKICAgICAgICAgICAgICAg IC5uLiAnPC9kaXY+JwoKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWxh eW91dC00Y29sLTNzcGFuIiBpZD0iaWVkX2VkaXRfY29udGVudCIgcm9sZT0icmVnaW9uIj4n CiAgICAgICAgICAgICAgICAubi4gJzxzZWN0aW9uIGNsYXNzPSJ0eHAtcHJlZnMtZ3JvdXAi IGlkPSJvcHRpb25zX2dyb3VwX21ldGEiIGFyaWEtbGFiZWxsZWRieT0ib3B0aW9uc19ncm91 cF9tZXRhLWxhYmVsIj4nCiAgICAgICAgICAgICAgICAubi4gaGVkKGdUeHQoJ2llZF9wbHVn aW5fbWV0YV9sZWdlbmQnKSwgMiwgYXJyYXkoJ2lkJyA9PiAnb3B0aW9uc19ncm91cF9tZXRh LWxhYmVsJykpCiAgICAgICAgICAgICAgICAubi4gJzxzcGFuIGNsYXNzPSJpZWRfcGx1Z2lu X2VkaXRfdG9vbGJhciI+JyAuICRtZXRhc3ViIC4gJzwvc3Bhbj4nCiAgICAgICAgICAgICAg ICAubi4gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkIj4nCiAgICAgICAgICAgICAgICAu bi4gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkLWxhYmVsIj48bGFiZWwgZm9yPSJuZXdu YW1lIj4nIC4gZ1R4dCgnbmFtZScpIC4gJzwvbGFiZWw+PC9kaXY+JwogICAgICAgICAgICAg ICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+JyAuICRuZXduYW1l IC4gJzwvZGl2PicKICAgICAgICAgICAgICAgIC5uLiAnPC9kaXY+JwogICAgICAgICAgICAg ICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZCI+JwogICAgICAgICAgICAgICAg Lm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC1sYWJlbCI+PGxhYmVsIGZvcj0idmVy c2lvbiI+JyAuIGdUeHQoJ3ZlcnNpb24nKSAuICc8L2xhYmVsPjwvZGl2PicKICAgICAgICAg ICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtdmFsdWUiPicKICAgICAg ICAgICAgICAgIC5uLiAkdmVyc2lvbl93aWRnZXQKICAgICAgICAgICAgICAgIC5uLiAkcGx1 Z3N0YXR1cwogICAgICAgICAgICAgICAgLm4uICgoJGZpbGVuYW1lKSA/IHRhZyhzcC5zcC4n KCcuJGZpbGVuYW1lLicpJywnc3BhbicsJyBzdHlsZT0iY29sb3I6Z3JheTsiJykuaElucHV0 KCdmaWxlbmFtZScsICRmaWxlbmFtZSkgOiAnJykKICAgICAgICAgICAgICAgIC5uLiAnPC9k aXY+JwogICAgICAgICAgICAgICAgLm4uICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4g JzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkIj4nCiAgICAgICAgICAgICAgICAubi4gJzxk aXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkLWxhYmVsIj48bGFiZWwgZm9yPSJkZXNjcmlwdGlv biI+JyAuIGdUeHQoJ2Rlc2NyaXB0aW9uJykgLiAnPC9sYWJlbD48L2Rpdj4nCiAgICAgICAg ICAgICAgICAubi4gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkLXZhbHVlIj4nIC4gJGRl c2NyaXB0aW9uX3dpZGdldCAuICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzwvZGl2 PicKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQiPicK ICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtbGFiZWwi PjxsYWJlbCBmb3I9ImF1dGhvciI+JyAuIGdUeHQoJ2F1dGhvcicpIC4gJzwvbGFiZWw+PC9k aXY+JwogICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12 YWx1ZSI+JyAuICRhdXRob3Jfd2lkZ2V0IC4gJzwvZGl2PicKICAgICAgICAgICAgICAgIC5u LiAnPC9kaXY+JwogICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1m aWVsZCI+JwogICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVs ZC1sYWJlbCI+PGxhYmVsIGZvcj0iYXV0aG9yX3VyaSI+JyAuIGdUeHQoJ3dlYnNpdGUnKSAu ICc8L2xhYmVsPjwvZGl2PicKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhw LWZvcm0tZmllbGQtdmFsdWUiPicgLiAkYXV0aG9yX3VyaV93aWRnZXQgLiAnPC9kaXY+Jwog ICAgICAgICAgICAgICAgLm4uICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzxkaXYg Y2xhc3M9InR4cC1mb3JtLWZpZWxkIj4nCiAgICAgICAgICAgICAgICAubi4gJzxkaXYgY2xh c3M9InR4cC1mb3JtLWZpZWxkLWxhYmVsIj48bGFiZWwgZm9yPSJ0eXBlIj4nIC4gZ1R4dCgn aWVkX3BsdWdpbl90eXBlJykgLiAnPC9sYWJlbD48L2Rpdj4nCiAgICAgICAgICAgICAgICAu bi4gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkLXZhbHVlIj4nIC4gJHBsdWd0eXBlIC4g JzwvZGl2PicKICAgICAgICAgICAgICAgIC5uLiAnPC9kaXY+JwogICAgICAgICAgICAgICAg Lm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZCI+JwogICAgICAgICAgICAgICAgLm4u ICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC1sYWJlbCI+PGxhYmVsPicgLiBnVHh0KCdp ZWRfcGx1Z2luX2ZsYWdzJykgIC4gJzwvbGFiZWw+PC9kaXY+JwogICAgICAgICAgICAgICAg Lm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+JyAuICRmbGFnbGlzdCAu ICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzwvZGl2PicKICAgICAgICAgICAgICAg IC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQiPicKICAgICAgICAgICAgICAgIC5u LiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtbGFiZWwiPjxsYWJlbD4nIC4gZ1R4dCgn aWVkX3BsdWdpbl9sb2FkX29yZGVyJykgLiBnVHh0KCdpZWRfcGx1Z2luX2xvYWRfb3JkZXJf aGVscCcpIC4gJzwvbGFiZWw+PC9kaXY+JwogICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNs YXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+JyAuICRwbHVnb3JkZXIgLiAnPC9kaXY+Jwog ICAgICAgICAgICAgICAgLm4uICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzwvc2Vj dGlvbj4nCgogICAgICAgICAgICAgICAgLm4uICc8c2VjdGlvbiBjbGFzcz0idHhwLXByZWZz LWdyb3VwIiBpZD0ib3B0aW9uc19ncm91cF9jb2RlIiBhcmlhLWxhYmVsbGVkYnk9Im9wdGlv bnNfZ3JvdXBfY29kZS1sYWJlbCI+JwogICAgICAgICAgICAgICAgLm4uIGhlZChnVHh0KCdp ZWRfcGx1Z2luX2NvZGVfbGVnZW5kJyksIDIsIGFycmF5KCdpZCcgPT4gJ29wdGlvbnNfZ3Jv dXBfY29kZS1sYWJlbCcpKQogICAgICAgICAgICAgICAgLm4uICc8c3BhbiBjbGFzcz0iaWVk X3BsdWdpbl9lZGl0X3Rvb2xiYXIiPicgLiAkbXNncG9wIC4gJHBocGRvYyAuIHNwIC4gJGNv ZGVzdWIgLiAnPC9zcGFuPicKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhw LWZvcm0tZmllbGQgdHhwLWZvcm0tZmllbGQtdGV4dGFyZWEiPicKICAgICAgICAgICAgICAg IC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtbGFiZWwiPjxsYWJlbCBmb3I9InBs dWdpbl9lZGl0b3IiPlBIUDwvbGFiZWw+PC9kaXY+JwogICAgICAgICAgICAgICAgLm4uICc8 ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+JyAuICRjb2RlYmxvY2sgLiAnPC9k aXY+JwogICAgICAgICAgICAgICAgLm4uICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4g Jzwvc2VjdGlvbj4nCgogICAgICAgICAgICAgICAgLm4uICc8c2VjdGlvbiBjbGFzcz0idHhw LXByZWZzLWdyb3VwIiBpZD0ib3B0aW9uc19ncm91cF9wYWNrIiBhcmlhLWxhYmVsbGVkYnk9 Im9wdGlvbnNfZ3JvdXBfcGFjay1sYWJlbCI+JwogICAgICAgICAgICAgICAgLm4uIGhlZChn VHh0KCdpZWRfcGx1Z2luX3BhY2tfbGVnZW5kJyksIDIsIGFycmF5KCdpZCcgPT4gJ29wdGlv bnNfZ3JvdXBfcGFjay1sYWJlbCcpKQogICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNz PSJ0eHAtZm9ybS1maWVsZCI+JwogICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0 eHAtZm9ybS1maWVsZC1sYWJlbCI+PGxhYmVsIGZvcj0iaWVkX3BsdWdpbl90cF9wcmVmaXgi PicgLiBnVHh0KCdpZWRfcGx1Z2luX3RwX3ByZWZpeCcpIC4gJzwvbGFiZWw+PC9kaXY+Jwog ICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+ JwogICAgICAgICAgICAgICAgLm4uIGZJbnB1dCgndGV4dCcsICdpZWRfcGx1Z2luX3RwX3By ZWZpeCcsICR0cF9wZngsICcnLCAnJywgJycsICcnLCAnJywgJ2llZF9wbHVnaW5fdHBfcHJl Zml4JykKICAgICAgICAgICAgICAgIC5uLiAkbGFuZ3NlbAogICAgICAgICAgICAgICAgLm4u IGZJbnB1dCgnaGlkZGVuJywgJ2llZF9wbHVnaW5fdHBfbGFuZ19kZmx0JywgJGRmbHRfbGFu ZywgJycsICcnLCAnJywgJycsICcnLCAnaWVkX3BsdWdpbl90cF9sYW5nX2RmbHQnKQogICAg ICAgICAgICAgICAgLm4uICc8L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzwvZGl2PicK ICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQiPicKICAg ICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtbGFiZWwiPjxs YWJlbD4nIC4gZ1R4dCgnaWVkX3BsdWdpbl90cF9wb3B1bGF0ZScpICAuICc8L2xhYmVsPjwv ZGl2PicKICAgICAgICAgICAgICAgIC5uLiAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQt dmFsdWUiPicKICAgICAgICAgICAgICAgIC5uLiBmSW5wdXQoJ3RleHQnLCAnaWVkX3BsdWdp bl90cF9wb3B1bGF0ZScsICcnLCAnJywgJycsICcnLCAnJywgJycsICdpZWRfcGx1Z2luX3Rw X3BvcHVsYXRlJykKICAgICAgICAgICAgICAgIC5uLiAnPGJ1dHRvbiBpZD0iaWVkX3BsdWdp bl90cF9sb2FkIj4nIC4gZ1R4dCgnZ28nKSAuICc8L2J1dHRvbj4nCiAgICAgICAgICAgICAg ICAubi4gJzxzcGFuIGlkPSJpZWRfcGx1Z2luX3RwX2xvYWRfY291bnQiPjwvc3Bhbj4nCiAg ICAgICAgICAgICAgICAubi4gJzwvZGl2PicKICAgICAgICAgICAgICAgIC5uLiAnPC9kaXY+ JwogICAgICAgICAgICAgICAgLm4uICc8YSBocmVmPSIjIiBpZD0iaWVkX3BsdWdpbl9hZGRf c3RyaW5nIiBjbGFzcz0idHhwLWJ1dHRvbiI+KzwvYT4nCiAgICAgICAgICAgICAgICAubi4g Jzx1bD4nCiAgICAgICAgICAgICAgICAubi4gaW1wbG9kZShuLCAkdHBfc3RyaW5ncykKICAg ICAgICAgICAgICAgIC5uLiAnPC91bD4nCiAgICAgICAgICAgICAgICAubi4gJzwvc2VjdGlv bj4nCgogICAgICAgICAgICAgICAgLm4uICc8c2VjdGlvbiBjbGFzcz0idHhwLXByZWZzLWdy b3VwIiBpZD0ib3B0aW9uc19ncm91cF9kb2NzIiBhcmlhLWxhYmVsbGVkYnk9Im9wdGlvbnNf Z3JvdXBfZG9jcy1sYWJlbCI+JwogICAgICAgICAgICAgICAgLm4uIGhlZChnVHh0KCdpZWRf cGx1Z2luX2RvY3NfbGVnZW5kJykgLiBuIC4gJHZoZWxwbGlua2Z1bGwsIDIsIGFycmF5KCdp ZCcgPT4gJ29wdGlvbnNfZ3JvdXBfZG9jcy1sYWJlbCcpKQogICAgICAgICAgICAgICAgLm4u ICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZCB0eHAtZm9ybS1maWVsZC10ZXh0YXJlYSI+ JwogICAgICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC1sYWJl bCI+PGxhYmVsIGZvcj0icGx1Z2luX2hlbHAiPicgLiBnVHh0KCd0ZXh0JykgLiAnPC9sYWJl bD48L2Rpdj4nCiAgICAgICAgICAgICAgICAubi4gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZp ZWxkLXZhbHVlIj4nIC4gJGhlbHBfd2lkZ2V0IC4gJzwvZGl2PicKICAgICAgICAgICAgICAg IC5uLiAnPC9kaXY+JwogICAgICAgICAgICAgICAgLm4uICgoJHN0eWxlYmxvY2spCiAgICAg ICAgICAgICAgICAgICAgICAgID8gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkIHR4cC1m b3JtLWZpZWxkLXRleHRhcmVhIj4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICc8 ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC1sYWJlbCI+PGxhYmVsIGZvcj0icGx1Z2luX2hl bHBfY3NzIj4nIC4gZ1R4dCgnY3NzJykgLiAnPC9sYWJlbD48L2Rpdj4nCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAuICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+ JyAuICRjc3Nfd2lkZ2V0IC4gJzwvZGl2PicKICAgICAgICAgICAgICAgICAgICAgICAgICAg IC4gJzwvZGl2PicKICAgICAgICAgICAgICAgICAgICAgICAgOiAnJykKICAgICAgICAgICAg ICAgIC5uLiAnPC9zZWN0aW9uPicKICAgICAgICAgICAgICAgIC5uLiAnPC9kaXY+JwogICAg ICAgICAgICAgICAgLm4uIHNJbnB1dCgnc2F2ZScpCiAgICAgICAgICAgICAgICAubi4gZUlu cHV0KCR0aGlzLT5pZWRfcGNfZXZlbnQpCiAgICAgICAgICAgICAgICAubi4gaElucHV0KCdu YW1lJywkbmFtZSkKICAgICAgICAgICAgLCAnJywgJycsICdwb3N0JywgJ2llZC1lZGl0LWZv cm0nKS4KICAgICAgICAgICAgc2NyaXB0X2pzKDw8PEVPSlMKdmFyIHNlbGVjdGVkVGFiID0g J3skdGFiQWN0aXZlfSc7CnZhciBpZWRQbHVnaW5Hcm91cCA9ICQoJy5pZWQtZWRpdC1mb3Jt Jyk7CnZhciBpZWRQbHVnaW5UYWJzID0gaWVkUGx1Z2luR3JvdXAuZmluZCgnLnN3aXRjaGVy LWxpc3QgbGknKTsKCmllZFBsdWdpbkdyb3VwLnRhYnMoe2FjdGl2ZTogc2VsZWN0ZWRUYWJ9 KS5yZW1vdmVDbGFzcygndWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1h bGwnKS5hZGRDbGFzcygndWktdGFicy12ZXJ0aWNhbCcpOwppZWRQbHVnaW5Hcm91cC5maW5k KCcuc3dpdGNoZXItbGlzdCcpLnJlbW92ZUNsYXNzKCd1aS1oZWxwZXItcmVzZXQgdWktaGVs cGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCcpOwppZWRQbHVn aW5UYWJzLnJlbW92ZUNsYXNzKCd1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci10b3AnKTsK aWVkUGx1Z2luR3JvdXAuZmluZCgnLnR4cC1wcmVmcy1ncm91cCcpLnJlbW92ZUNsYXNzKCd1 aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tJyk7CgppZWRQbHVnaW5UYWJzLm9u KCdjbGljaycsICdhJywgZnVuY3Rpb24oZXYpIHsKICAgIHZhciBtZSA9ICQodGhpcyk7CiAg ICBzZW5kQXN5bmNFdmVudCh7CiAgICAgICAgICAgIGV2ZW50ICAgOiAncGFuZScsCiAgICAg ICAgICAgIHN0ZXAgICAgOiAndGFiVmlzaWJsZScsCiAgICAgICAgICAgIHBhbmUgICAgOiBt ZS5kYXRhKCd0eHAtcGFuZScpLAogICAgICAgICAgICBvcmlnaW4gIDogdGV4dHBhdHRlcm4u ZXZlbnQsCiAgICAgICAgICAgIHRva2VuICAgOiBtZS5kYXRhKCd0eHAtdG9rZW4nKQogICAg ICAgIH0pOwp9KTsKCnZhciBpZWRfcGx1Z2luX3RwX3RvdGFsID0gMDsKCmpRdWVyeS5mbi5z ZWxlY3RSYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKICAgIHJldHVybiB0aGlzLmVh Y2goZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UpIHsK ICAgICAgICAgICAgdGhpcy5mb2N1cygpOwogICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlv blJhbmdlKHN0YXJ0LCBlbmQpOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5jcmVhdGVUZXh0 UmFuZ2UpIHsKICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5jcmVhdGVUZXh0UmFuZ2Uo KTsKICAgICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7CiAgICAgICAgICAgIHJhbmdl Lm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZCk7CiAgICAgICAgICAgIHJhbmdlLm1vdmVTdGFy dCgnY2hhcmFjdGVyJywgc3RhcnQpOwogICAgICAgICAgICByYW5nZS5zZWxlY3QoKTsKICAg ICAgICB9CiAgICB9KTsKfTsKCkFycmF5LnByb3RvdHlwZS51bmlxdWUgPSBmdW5jdGlvbigp IHsKICAgIHZhciByID0gbmV3IEFycmF5KCk7CiAgICBvOmZvciAodmFyIGkgPSAwLCBuID0g dGhpcy5sZW5ndGg7IGkgPCBuOyBpKyspIHsKICAgICAgICBmb3IgKHZhciB4ID0gMCwgeSA9 IHIubGVuZ3RoOyB4IDwgeTsgeCsrKSB7CiAgICAgICAgICAgIGlmIChyW3hdPT10aGlzW2ld KSB7CiAgICAgICAgICAgICAgICBjb250aW51ZSBvOwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICAgIHJbci5sZW5ndGhdID0gdGhpc1tpXTsKICAgIH0KCiAgICByZXR1cm4gcjsK fTsKCmZ1bmN0aW9uIGllZF9nb1RvTGluZSgpCnsKICAgIHZhciBsaW5lID0gcGFyc2VJbnQo alF1ZXJ5KCcjaWVkX3BsdWdpbl9qdW1wVG9MaW5lJykudmFsKCkpOwogICAgdmFyIGllZF9l ZCA9IGpRdWVyeSgnI3BsdWdpbl9lZGl0b3InKTsKICAgIHZhciBpZWRfZWRkID0gZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ3BsdWdpbl9lZGl0b3InKTsgLy8gRHVubm8gaG93IHRvIGNv bnZlcnQgYSBqUXVlcnkgb2JqIGJhY2sgdG8gRE9NCiAgICB2YXIgbGluZXMgPSBpZWRfZWQu dmFsKCkuc3BsaXQoJ1xcbicpOwogICAgdmFyIG51bWNoYXJzID0gMDsKICAgIHZhciBjb3Vu dCA9IDA7CiAgICB2YXIgZmluZHN0ciA9ICcnOwogICAgalF1ZXJ5LmVhY2gobGluZXMsIGZ1 bmN0aW9uICgpIHsKICAgICAgICBjb3VudCsrOwogICAgICAgIGlmIChjb3VudCA+PSBsaW5l KSB7CiAgICAgICAgICAgIGZpbmRzdHIgPSB0aGlzOwoKCiAgICAgICAgICAgIHJldHVybiBm YWxzZTsKICAgICAgICB9CiAgICAgICAgbnVtY2hhcnMgKz0gKHRoaXMubGVuZ3RoKSsyOyAv LyBEb24ndCBhc2suICsyIGlzIHNvbWV0aGluZyB0byBkbyB3aXRoIGxpbmUgZW5kaW5ncyBJ IHRoaW5rCiAgICB9KTsKCiAgICAvLyBGaW5kIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIHN0 cmluZyB3ZSBmb3VuZC4gU3RhcnQgY291bnRpbmcgZnJvbSB0aGUgbGluZSBiZWZvcmUuCiAg ICAvLyBUaG9zZSBwZXNreSBsaW5lIGVuZGluZ3MgY29tZSBpbnRvIHBsYXkgYWdhaW4gc28g d2UgbmVlZCB0byBzdWJ0cmFjdCB0aGUgbnVtYmVyCiAgICAvLyBvZiBsaW5lcyBmb3VuZCBm cm9tIHRoZSBzdGFydCBjaGFyYWN0ZXIgcG9zaXRpb24gKnNocnVnKgogICAgc3RhcnQgPSBp ZWRfZWQudmFsKCkuaW5kZXhPZihmaW5kc3RyLCBudW1jaGFycy1jb3VudCk7CiAgICBzdGFy dCA9IChmaW5kc3RyID09ICcnKSA/IHN0YXJ0KzEgOiBzdGFydDsKICAgIGVuZCA9IHN0YXJ0 K2ZpbmRzdHIubGVuZ3RoOwogICAgaWVkX2VkLnNlbGVjdFJhbmdlKGVuZC0xLCBlbmQpOwoK ICAgIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkgewogICAgICAgIHZhciBpZWRfdGhlQ29k ZSA9IGllZF9lZC52YWwoKS5jaGFyQ29kZUF0KGVuZC0xKTsKICAgICAgICBpZiAod2luZG93 LktleUV2ZW50KSB7CiAgICAgICAgICAgIHZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50 KCdLZXlFdmVudHMnKTsKICAgICAgICAgICAgZXYuaW5pdEtleUV2ZW50KCdrZXlwcmVzcycs IGZhbHNlLCB0cnVlLCB3aW5kb3csIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBp ZWRfdGhlQ29kZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGV2ID0gZG9j dW1lbnQuY3JlYXRlRXZlbnQoJ1VJRXZlbnRzJyk7CiAgICAgICAgICAgIGV2LmluaXRVSUV2 ZW50KCdrZXlwcmVzcycsIGZhbHNlLCB0cnVlLCB3aW5kb3csIDApOwogICAgICAgICAgICBl di5rZXlDb2RlID0gaWVkX3RoZUNvZGU7CiAgICAgICAgfQogICAgICAgIGllZF9lZGQuZGlz cGF0Y2hFdmVudChldik7IC8vIGNhdXNlIHNjcm9sbCB0byBjdXJzb3IgYnkgcmVwbGFjaW5n IGxhc3QgY2hhciB3aXRoIGl0c2VsZgogICAgfQogICAgaWVkX2VkLnNlbGVjdFJhbmdlKHN0 YXJ0LCBlbmQpOwoKICAgIHJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBpZWRfcGx1Z2luX3Rv Z2dsZV9tc2dwb3Aoc3RhdGUpCnsKICAgIHZhciBvYmogPSBqUXVlcnkoIiNpZWRfcGx1Z2lu X21zZ3BvcCIpOwogICAgaWYgKHN0YXRlICE9IHVuZGVmaW5lZCkgewogICAgICAgIGlmIChz dGF0ZSA9PSAxKSB7CiAgICAgICAgICAgIG9iai5zaG93KCdub3JtYWwnKTsKICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICBvYmouaGlkZSgnbm9ybWFsJyk7CiAgICAgICAgfQogICAg fSBlbHNlIHsKICAgICAgICBvYmoudG9nZ2xlKCdub3JtYWwnKTsKICAgIH0KfQpmdW5jdGlv biBpZWRfcGx1Z2luX3J0cmltKHN0ciwgY2hhcnMpCnsKICAgIGNoYXJzID0gY2hhcnMgfHwg IlxzIjsKCiAgICByZXR1cm4gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cCgiWyIgKyBjaGFycyAr ICJdKyQiLCAiZyIpLCAiIik7Cn0KZnVuY3Rpb24gaWVkX3BsdWdpbl91cGRhdGVfdHBfY291 bnQoKQp7CiAgICB2YXIgdHBfY291bnQgPSB0cF93YXJucyA9IHRwX2hhc19jb250ZW50ID0g MDsKCiAgICBqUXVlcnkoJyNvcHRpb25zX2dyb3VwX3BhY2sgdWwgbGknKS5lYWNoKGZ1bmN0 aW9uKCkgewogICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMpOwogICAgICAgIHRwX2Nv dW50Kys7CiAgICAgICAgaWYgKHNlbGYuZmluZCgnaW5wdXQnKS52YWwoKSAhPT0gJycpIHsK ICAgICAgICAgICAgdHBfaGFzX2NvbnRlbnQrKzsKICAgICAgICB9CiAgICAgICAgaWYgKHNl bGYuZmluZCgnbGFiZWwnKS5oYXNDbGFzcygnd2FybmluZycpKSB7CiAgICAgICAgICAgIHRw X3dhcm5zKys7CiAgICAgICAgfQogICAgfSk7CiAgICBqUXVlcnkoJyNpZWRfcGx1Z2luX3Rw X2NvdW50JykuZW1wdHkoKS5hcHBlbmQoJygnICt0cF9jb3VudCsgJyB8ICcgK3RwX2hhc19j b250ZW50KyAnIHwgJyArdHBfd2FybnMrICcpJyk7CiAgICBqUXVlcnkoJyNpZWRfcGx1Z2lu X3RwX2xhbmcgb3B0aW9uJykuZmluZCgnOnNlbGVjdGVkJykuZGF0YSgnc3RyaW5nLWNvdW50 JywgdHBfaGFzX2NvbnRlbnQpOwoKICAgIC8vIFVwZGF0ZSB0aGUgZ2xvYmFsIHZhciBmb3Ig dXNlIHdoZW4gbG9hZGluZyBzdHJpbmdzCiAgICBpZWRfcGx1Z2luX3RwX3RvdGFsID0gdHBf Y291bnQ7Cn0KCmpRdWVyeShmdW5jdGlvbiAoKSB7CiAgICBjdXJoID0gZ2V0Q29va2llKCdp ZWRfcGx1Z2luX2VkaGVpZ2h0Jyk7CiAgICBjdXJoID0gKGN1cmggPT0gbnVsbCkgPyAnNDgw JyA6IGN1cmg7CiAgICBqUXVlcnkoJ3RleHRhcmVhW21heGxlbmd0aF0nKS5rZXl1cChmdW5j dGlvbiAoKSB7CiAgICAgICAgdmFyIG1heCA9IHBhcnNlSW50KGpRdWVyeSh0aGlzKS5hdHRy KCdtYXhsZW5ndGgnKSk7CiAgICAgICAgaWYgKGpRdWVyeSh0aGlzKS52YWwoKS5sZW5ndGgg PiBtYXgpIHsKICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLnZhbChqUXVlcnkodGhpcykudmFs KCkuc3Vic3RyKDAsIGpRdWVyeSh0aGlzKS5hdHRyKCdtYXhsZW5ndGgnKSkpOwogICAgICAg IH0KICAgICAgICBqUXVlcnkodGhpcykucGFyZW50KCkuZmluZCgnLmllZF9wbHVnaW5fY2hh cnNSZW1haW4nKS5odG1sKCdDaGFycyByZW1haW5pbmc6ICcrIChtYXggLSBqUXVlcnkodGhp cykudmFsKCkubGVuZ3RoKSk7CiAgICB9KTsKICAgIGpRdWVyeSgndGV4dGFyZWFbbWF4bGVu Z3RoXScpLmtleXVwKCk7CiAgICBqUXVlcnkoJyNpZWRfcGx1Z2luX2p1bXBUb0xpbmUnKS5r ZXlkb3duKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgdmFyIGNvZGUgPSAoZS5rZXlDb2RlID8g ZS5rZXlDb2RlIDogZS53aGljaCk7CiAgICAgICAgaWYgKGNvZGUgPT0gMTMpIHsKICAgICAg ICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlv bigpOwogICAgICAgICAgICBpZWRfZ29Ub0xpbmUoKTsKCgogICAgICAgICAgICByZXR1cm4g ZmFsc2U7CiAgICAgICAgfQogICAgfSk7CgogICAgLy8gU3RvcmUgdGhlIHByZWZpeAogICAg alF1ZXJ5KCcjaWVkX3BsdWdpbl90cF9wcmVmaXgnKS5ibHVyKGZ1bmN0aW9uICgpIHsKICAg ICAgICB2YXIgcGZ4ID0galF1ZXJ5KHRoaXMpLnZhbCgpOwogICAgICAgIHNlbmRBc3luY0V2 ZW50KAogICAgICAgIHsKICAgICAgICAgICAgZXZlbnQ6IHRleHRwYXR0ZXJuLmV2ZW50LAog ICAgICAgICAgICBzdGVwOiAnc2V0X3RwX3ByZWZpeCcsCiAgICAgICAgICAgIHBsdWdpbjog J3skbmFtZX0nLAogICAgICAgICAgICBwcmVmaXg6IHBmeAogICAgICAgIH0pOwogICAgfSk7 CgogICAgLy8gRmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgZ1R4dCgnc29tZXRoaW5nJykKICAg IGpRdWVyeSgnI3BsdWdpbl9lZGl0b3IsICNpZWRfcGx1Z2luX3RwX3ByZWZpeCcpLmJsdXIo ZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBpZWRfdHBfcGZ4ID0galF1ZXJ5KCcjaWVkX3Bs dWdpbl90cF9wcmVmaXgnKS52YWwoKTsKICAgICAgICBpZiAoaWVkX3RwX3BmeCAhPSAnJykg ewogICAgICAgICAgICB2YXIgaWVkX2d0eHRfcmUgPSAvZ1R4dFwoW1wnXCJdKFthLXpBLVow LTlfXSo/KVtcIlwnXVssXCldL2dpOwogICAgICAgICAgICB2YXIgaWVkX3RwX3RhID0galF1 ZXJ5KCcjcGx1Z2luX2VkaXRvcicpLnZhbCgpLnJlcGxhY2UoL1xzKi9nLCcnKTsgLy8gU3Ry aXAgc3BhY2VzIHRvIG1ha2UgbG9va3VwcyBlYXNpZXIKICAgICAgICAgICAgdmFyIGllZF90 cF9pdGVtcyA9IGllZF90cF90YS5tYXRjaChpZWRfZ3R4dF9yZSk7CgogICAgICAgICAgICAv LyBpZiBKUyBSZWdFeHAgY2FwdHVyZWQgcGFyZW50aGljYWwgZXhwcmVzc2lvbnMgaW4gZ2xv YmFsIHNlYXJjaGVzIG9yIGl0IHdhcyBlYXN5IHRvIGluamVjdCB2YXJpYWJsZXMKICAgICAg ICAgICAgLy8gaW50byBuZXcgUmVnRXhwKCkgY2FsbHMsIHRoaXMgbG9vcCBjb3VsZCBiZSBh dm9pZGVkCiAgICAgICAgICAgIHZhciBpZWRfdHBfdXNlZCA9IFtdOwogICAgICAgICAgICBm b3IgKHZhciBpZHggPSAwOyBpZHggPCBpZWRfdHBfaXRlbXMubGVuZ3RoOyBpZHgrKykgewog ICAgICAgICAgICAgICAgdmFyIHBvcyA9IGllZF90cF9pdGVtc1tpZHhdLmxhc3RJbmRleE9m KCInIik7CiAgICAgICAgICAgICAgICBwb3MgPSAocG9zID09IC0xKSA/IGllZF90cF9pdGVt c1tpZHhdLmxhc3RJbmRleE9mKCciJykgOiBwb3M7CiAgICAgICAgICAgICAgICB0cHN0ciA9 IGllZF90cF9pdGVtc1tpZHhdLnN1YnN0cig2LHBvcy02KTsKICAgICAgICAgICAgICAgIGlm ICh0cHN0ci5pbmRleE9mKGllZF90cF9wZngpID09IDApIHsKICAgICAgICAgICAgICAgICAg ICBpZWRfdHBfdXNlZFtpZWRfdHBfdXNlZC5sZW5ndGhdID0gdHBzdHI7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGllZF90cF91c2VkID0gaWVkX3Rw X3VzZWQudW5pcXVlKCk7CgogICAgICAgICAgICAvLyBMaXN0IG9mIGFsbCBjdXJyZW50IHRl eHRwYWNrIHN0cmluZ3MgaW4gdXNlIChhcyBvZiBsYXN0IFNhdmUgb3BlcmF0aW9uKQogICAg ICAgICAgICB2YXIgaWVkX3RwX2N1cnIgPSBbXTsKICAgICAgICAgICAgalF1ZXJ5KCcjb3B0 aW9uc19ncm91cF9wYWNrIHVsIGxhYmVsJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAg ICAgICAgICBpZWRfdHBfY3VycltpZWRfdHBfY3Vyci5sZW5ndGhdID0galF1ZXJ5KHRoaXMp LnRleHQoKTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBJdGVyYXRlIG92ZXIg Y3VycmVudCBhcnJheSBhbmQgY2hlY2sgaWYgZWFjaCBuYW1lIGlzIGluIHRoZSB1c2VkIHRl eHRwYWNrIGl0ZW0gbGlzdC4KICAgICAgICAgICAgLy8gSWYgaXQgaXMsIHJlbW92ZSBpdCBm cm9tIHRoZSBmaW5hbCBsaXN0LgogICAgICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHgg PCBpZWRfdHBfY3Vyci5sZW5ndGg7IGlkeCsrKSB7CiAgICAgICAgICAgICAgICBpZiAoKHBv cyA9IGpRdWVyeS5pbkFycmF5KGllZF90cF9jdXJyW2lkeF0sIGllZF90cF91c2VkKSkgPiAt MSkgewogICAgICAgICAgICAgICAgICAgIGllZF90cF91c2VkLnNwbGljZShwb3MsIDEpOwog ICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI29wdGlvbnNfZ3JvdXBfcGFjayB1bCBsYWJl bDpjb250YWlucygnK2llZF90cF9jdXJyW2lkeF0rJyknKS50b2dnbGVDbGFzcygnd2Fybmlu ZycsIGZhbHNlKS5uZXh0KCIuZGVzdHJveSIpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAg fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzZXRjbGFzcyA9IDE7CiAgICAgICAgICAg ICAgICAgICAgalF1ZXJ5KCcjb3B0aW9uc19ncm91cF9wYWNrIHVsIGxhYmVsOmNvbnRhaW5z KCcraWVkX3RwX2N1cnJbaWR4XSsnKScpLnRvZ2dsZUNsYXNzKCd3YXJuaW5nJywgdHJ1ZSku bmV4dCgiLmRlc3Ryb3kiKS5yZW1vdmUoKS5lbmQoKS5hZnRlcignPGEgaHJlZj0iIyIgY2xh c3M9ImRlc3Ryb3kiPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tY2xvc2UiPkRlbGV0 ZTwvc3Bhbj48L2E+Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg ICAgICAgLy8gRm9yIGVhY2ggcmVtYWluaW5nIGl0ZW0gdGhhdCBoYXMgYmVlbiB1c2VkLCBh ZGQgYW4gaW5wdXQgYm94CiAgICAgICAgICAgIC8vIFRPRE86IGkxOG4gdGhlIHNlbGVjdCBv cHRpb25zCiAgICAgICAgICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGllZF90cF91c2Vk Lmxlbmd0aDsgaWR4KyspIHsKICAgICAgICAgICAgICAgIGpRdWVyeSgnI29wdGlvbnNfZ3Jv dXBfcGFjayB1bCcpLnByZXBlbmQoJzxsaT48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGV4 dHBhY2tfJytpZWRfdHBfdXNlZFtpZHhdKyciIHZhbHVlPSIiIC8+IDxzZWxlY3QgbmFtZT0i aWVkX3BsdWdpbl90cF9ldmVudCI+PG9wdGlvbiB2YWx1ZT0iYWRtaW4iPkFkbWluPC9vcHRp b24+PG9wdGlvbiB2YWx1ZT0icHVibGljIj5QdWJsaWM8L29wdGlvbj48b3B0aW9uIHZhbHVl PSJjb21tb24iPkJvdGg8L29wdGlvbj48L3NlbGVjdD4gPGxhYmVsPicraWVkX3RwX3VzZWRb aWR4XSsnPC9sYWJlbD48L2xpPicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGllZF9w bHVnaW5fdXBkYXRlX3RwX2NvdW50KCk7CiAgICAgICAgfQogICAgfSkuYmx1cigpOwoKICAg IC8vIEhhbmRsZSBhZGRpbmcgbmV3IHN0cmluZ3MgbWFudWFsbHkKICAgIGpRdWVyeSgnI2ll ZF9wbHVnaW5fYWRkX3N0cmluZycpLmNsaWNrKGZ1bmN0aW9uIChldikgewogICAgICAgIGpR dWVyeSgnI29wdGlvbnNfZ3JvdXBfcGFjayB1bCcpLmJlZm9yZSgnPGRpdiBpZD0iaWVkX3Bs dWdpbl9uZXdfY29udGFpbmVyIj48bGFiZWw+JytqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX3By ZWZpeCcpLnZhbCgpKydfPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImllZF9wbHVnaW5fdHBf bmV3bmFtZSIgaWQ9ImllZF9wbHVnaW5fdHBfbmV3bmFtZSIgdmFsdWU9IiIgLz48L2xhYmVs PjwvZGl2PicpOwogICAgICAgIGpRdWVyeSgnI2llZF9wbHVnaW5fdHBfbmV3bmFtZScpLmZv Y3VzKCk7CiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTsKICAgIH0pOwogICAgalF1ZXJ5 KGRvY3VtZW50KS5vbignYmx1cicsICcjaWVkX3BsdWdpbl90cF9uZXduYW1lJywgZnVuY3Rp b24gKCkgewogICAgICAgIHZhciBuZXduYW1lID0gaWVkX3BsdWdpbl9ydHJpbShqUXVlcnko JyNpZWRfcGx1Z2luX3RwX3ByZWZpeCcpLnZhbCgpKydfJytqUXVlcnkoJyNpZWRfcGx1Z2lu X3RwX25ld25hbWUnKS52YWwoKSwgJ18nKTsKICAgICAgICB2YXIgbmV3b2sgPSB0cnVlOwog ICAgICAgIGpRdWVyeSgnI29wdGlvbnNfZ3JvdXBfcGFjayB1bCBsaSBsYWJlbCcpLmVhY2go ZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAoalF1ZXJ5KHRoaXMpLnRleHQoKSA9PSBu ZXduYW1lKSB7CiAgICAgICAgICAgICAgICBqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX25ld25h bWUnKS5jc3MoJ2NvbG9yJywgJyNFMDAnKTsKICAgICAgICAgICAgICAgIG5ld29rID0gZmFs c2U7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAvLyBUT0RPOiBpMThuIHNl bGVjdCBvcHRpb24gdGV4dAogICAgICAgIGlmIChuZXdvaykgewogICAgICAgICAgICBqUXVl cnkoJyNvcHRpb25zX2dyb3VwX3BhY2sgdWwnKS5wcmVwZW5kKCc8bGk+PGlucHV0IHR5cGU9 InRleHQiIG5hbWU9InRleHRwYWNrXycrbmV3bmFtZSsnIiB2YWx1ZT0iIiAvPiA8c2VsZWN0 IG5hbWU9ImllZF9wbHVnaW5fdHBfZXZlbnQiPjxvcHRpb24gdmFsdWU9ImFkbWluIj5BZG1p bjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InB1YmxpYyI+UHVibGljPC9vcHRpb24+PG9wdGlv biB2YWx1ZT0iY29tbW9uIj5Cb3RoPC9vcHRpb24+PC9zZWxlY3Q+IDxsYWJlbD4nK25ld25h bWUrJzwvbGFiZWw+PC9saT4nKTsKICAgICAgICAgICAgalF1ZXJ5KCcjaWVkX3BsdWdpbl9u ZXdfY29udGFpbmVyJykucmVtb3ZlKCk7CiAgICAgICAgICAgIGpRdWVyeSgnaW5wdXRbbmFt ZT0idGV4dHBhY2tfJytuZXduYW1lKyciXScpLmZvY3VzKCk7CiAgICAgICAgfQogICAgICAg IGllZF9wbHVnaW5fdXBkYXRlX3RwX2NvdW50KCk7CiAgICB9KTsKCiAgICAvLyBJbml0aWFs aXNlIHRoZSBnZW5lcmljIEFKQVggZXJyb3IgaGFuZGxlcgogICAgalF1ZXJ5KCcuaWVkX2Vk aXRGb3JtJykuYWpheEVycm9yKGZ1bmN0aW9uIChldmVudCwgcmVxdWVzdCwgc2V0dGluZ3Mp IHsKICAgICAgICB2YXIgeGhyID0galF1ZXJ5KHJlcXVlc3QucmVzcG9uc2VUZXh0KTsKCiAg ICAgICAgLy8gcGhwZG9jIGdlbmVyYXRpb24gYmFyZmVkCiAgICAgICAgaWYgKHNldHRpbmdz LmRhdGEuaW5kZXhPZignc3RlcD1pZWRfcGx1Z2luX2dlbmVyYXRlX3BocGRvYycpID4gLTEp IHsKICAgICAgICAgICAgdmFyIG1zZ0NvbnRlbnQgPSBqUXVlcnkoIiNpZWRfcGx1Z2luX21z Z3BvcCAuaWVkX3BsdWdpbl9tc2dwb3BfY29udGVudCIpOwogICAgICAgICAgICBzdGF0dXMg PSB4aHIuZmluZCgnaHR0cC1zdGF0dXMnKS5hdHRyKCd2YWx1ZScpCiAgICAgICAgICAgIGlm IChzdGF0dXMgPT0gJzIwMCBPSycpIHsKICAgICAgICAgICAgICAgIG1zZ0NvbnRlbnQuYXBw ZW5kKHhoci5maW5kKCdpZWRfcGx1Z2luX3BocGRvYycpLmF0dHIoJ3ZhbHVlJykpOwogICAg ICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PSAnNTAxIE5vdCBJbXBsZW1lbnRlZCcpIHsK ICAgICAgICAgICAgICAgIG1zZ0NvbnRlbnQuYXBwZW5kKHhoci5maW5kKCdlcnJvcl9tc2cn KS5hdHRyKCd2YWx1ZScpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZWRfcGx1Z2lu X3RvZ2dsZV9tc2dwb3AoJzEnKTsKICAgICAgICB9CgogICAgICAgIC8vIGNvZGUgc2F2ZSBi YXJmZWQKICAgICAgICBpZiAoc2V0dGluZ3MuZGF0YS5pbmRleE9mKCdzdGVwPWllZF9wbHVn aW5fY29kZV9zYXZlJykgPiAtMSkgewogICAgICAgICAgICB2YXIgbXNnID0geGhyLmZpbmQo J2llZF9wbHVnaW5fbXNnJykuYXR0cigndmFsdWUnKTsKICAgICAgICAgICAgdmFyIGxpbmUg PSB4aHIuZmluZCgnaWVkX3BsdWdpbl9lcnJfbGluZScpLmF0dHIoJ3ZhbHVlJyk7CiAgICAg ICAgICAgIGpRdWVyeSgnI2llZF9wbHVnaW5fanVtcFRvTGluZScpLnZhbChsaW5lKTsKICAg ICAgICAgICAgaWVkX2dvVG9MaW5lKCk7CiAgICAgICAgICAgIHZhciBjb2Rlb2JqID0galF1 ZXJ5KCIjcGx1Z2luX2VkaXRvciIpOwogICAgICAgICAgICBjb2Rlb2JqLmNzcyh7J29wYWNp dHknOiAnLjc1J30pOyAvLyBSZWR1Y2VkIG9wYWNpdHkgYXMgYSB2aXN1YWwgY3VlIHRoYXQg c29tZXRoaW5nJ3Mgd3JvbmcKICAgICAgICAgICAgZXZhbChtc2cpOyAvLyBibGV1cmdoIQog ICAgICAgIH0KICAgIH0pOwoKICAgIC8vIEhhbmRsZSAneCcgYnV0dG9uCiAgICBqUXVlcnko ZG9jdW1lbnQpLm9uKCdjbGljaycsICcuZGVzdHJveScsIGZ1bmN0aW9uIChldmVudCkgewog ICAgICAgIHZhciBlbGVtID0galF1ZXJ5KHRoaXMpLnByZXYoJ2xhYmVsJyk7CiAgICAgICAg dmFyIHRwX2xibCA9IGVsZW0udGV4dCgpOwoKICAgICAgICBzZW5kQXN5bmNFdmVudCgKICAg ICAgICB7CiAgICAgICAgICAgIGV2ZW50OiB0ZXh0cGF0dGVybi5ldmVudCwKICAgICAgICAg ICAgc3RlcDogJ3RleHRwYWNrX2RlbCcsCiAgICAgICAgICAgIGllZF90cF9sYmw6IHRwX2xi bAogICAgICAgIH0pOwoKICAgICAgICBlbGVtLnBhcmVudCgpLnJlbW92ZSgpOwogICAgICAg IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaWVkX3BsdWdpbl91cGRhdGVfdHBf Y291bnQoKTsKICAgIH0pOwoKICAgIC8vIFNhdmUgdGV4dHBhY2sgc3RyaW5nIHRvIGRhdGFi YXNlCiAgICBmdW5jdGlvbiBpZWRfcGx1Z2luX3RwX3NhdmUoZXZlbnQpCiAgICB7CiAgICAg ICAgdmFyIGVsZW0gPSBqUXVlcnkodGhpcyk7CiAgICAgICAgdmFyIGlzU2VsID0gZWxlbS5p cygnc2VsZWN0Jyk7CiAgICAgICAgdmFyIHRwX2xibCA9IGVsZW0ubmV4dEFsbCgnbGFiZWwn KS50ZXh0KCk7CiAgICAgICAgdmFyIHRwX3N0ciA9IChpc1NlbCkgPyBlbGVtLnByZXZBbGwo J2lucHV0JykudmFsKCkgOiBlbGVtLnZhbCgpOwogICAgICAgIHZhciB0cF9ldiA9IChpc1Nl bCkgPyBlbGVtLnZhbCgpIDogZWxlbS5uZXh0QWxsKCdzZWxlY3QnKS52YWwoKTsKICAgICAg ICB2YXIgdHBfZXZ0ID0gKHRwX2V2PT0ncHVibGljJyB8fCB0cF9ldj09J2NvbW1vbicpID8g dHBfZXYgOiBqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX3ByZWZpeCcpLnZhbCgpOwogICAgICAg IHZhciB0cF9sbmcgPSBqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX2xhbmcnKS52YWwoKTsKICAg ICAgICB2YXIgdHBfb3duID0galF1ZXJ5KCcjaWVkX3BsdWdpbl90cF9wcmVmaXgnKS52YWwo KTsKCiAgICAgICAgc2VuZEFzeW5jRXZlbnQoCiAgICAgICAgewogICAgICAgICAgICBldmVu dDogdGV4dHBhdHRlcm4uZXZlbnQsCiAgICAgICAgICAgIHN0ZXA6ICd0ZXh0cGFja19zYXZl JywKICAgICAgICAgICAgaWVkX3RwX2V2dDogdHBfZXZ0LAogICAgICAgICAgICBpZWRfdHBf bGJsOiB0cF9sYmwsCiAgICAgICAgICAgIGllZF90cF9sbmc6IHRwX2xuZywKICAgICAgICAg ICAgaWVkX3RwX3N0cjogdHBfc3RyLAogICAgICAgICAgICBpZWRfdHBfb3duOiB0cF9vd24K ICAgICAgICB9KTsKICAgIH0KCiAgICAvLyBIYW5kbGUgc2F2aW5nIHRleHRwYWNrIHN0cmlu ZwogICAgalF1ZXJ5KGRvY3VtZW50KS5vbignYmx1cicsICcjb3B0aW9uc19ncm91cF9wYWNr IHVsIGxpIGlucHV0JywgaWVkX3BsdWdpbl90cF9zYXZlKTsKICAgIGpRdWVyeShkb2N1bWVu dCkub24oJ2NoYW5nZScsICcjb3B0aW9uc19ncm91cF9wYWNrIHVsIGxpIHNlbGVjdCcsIGll ZF9wbHVnaW5fdHBfc2F2ZSk7CgogICAgLy8gSGFuZGxlIGxhbmd1YWdlIGNoYW5nZS4KICAg IGpRdWVyeSgiI2llZF9wbHVnaW5fdHBfbGFuZyIpLmNoYW5nZShmdW5jdGlvbiAoZXZlbnQp IHsKICAgICAgICBqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX2xvYWRfY291bnQnKS5lbXB0eSgp LnNob3coKTsKCiAgICAgICAgdmFyIHRwX2xuZyA9IGpRdWVyeSh0aGlzKS52YWwoKTsKICAg ICAgICB2YXIgdHBfZGZsdCA9IGpRdWVyeSgnI2llZF9wbHVnaW5fdHBfbGFuZ19kZmx0Jyku dmFsKCk7CiAgICAgICAgdmFyIHNlbCA9ICcjb3B0aW9uc19ncm91cF9wYWNrIHVsIGxpJzsK ICAgICAgICB2YXIgbnVtU3RyaW5ncyA9IHNlbC5sZW5ndGg7CiAgICAgICAgdmFyIG51bUZl dGNoZWQgPSAwOwoKICAgICAgICBqUXVlcnkoc2VsKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAg ICAgICAgICAgdmFyIG9iaiA9IGpRdWVyeSh0aGlzKTsKICAgICAgICAgICAgdmFyIHRwX2xi bCA9IG9iai5maW5kKCdsYWJlbCcpLnRleHQoKTsKICAgICAgICAgICAgdmFyIHRwX2Rlc3Qg PSBvYmouZmluZCgnaW5wdXQnKTsKCiAgICAgICAgICAgIHNlbmRBc3luY0V2ZW50KAogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICBldmVudDogdGV4dHBhdHRlcm4uZXZlbnQsCiAg ICAgICAgICAgICAgICBzdGVwOiAndGV4dHBhY2tfZ2V0JywKICAgICAgICAgICAgICAgIGll ZF90cF9sYmw6IHRwX2xibCwKICAgICAgICAgICAgICAgIGllZF90cF9sbmc6IHRwX2xuZywK ICAgICAgICAgICAgICAgIGllZF90cF9kZmx0OiB0cF9kZmx0CiAgICAgICAgICAgIH0sIGZ1 bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICAgICAgICBudW1GZXRjaGVkKys7CiAgICAgICAg ICAgICAgICB2YXIgdGhlVmFsID0gZGF0YS5pZWRfcGx1Z2luX3RwX3N0cmluZzsKICAgICAg ICAgICAgICAgIHZhciB4bDhzdHIgPSBkYXRhLmllZF9wbHVnaW5fdHBfZGZsdDsKCiAgICAg ICAgICAgICAgICB0cF9kZXN0LnZhbCh0aGVWYWwpOwoKICAgICAgICAgICAgICAgIGlmICh4 bDhzdHIgPT0gdW5kZWZpbmVkIHx8IHhsOHN0ciA9PSAnJykgewogICAgICAgICAgICAgICAg ICAgIG9iai5yZW1vdmVBdHRyKCd0aXRsZScpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsK ICAgICAgICAgICAgICAgICAgICBvYmouYXR0cigndGl0bGUnLCB4bDhzdHIpOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG51bUZldGNoZWQgPCBpZWRfcGx1Z2lu X3RwX3RvdGFsKSB7CiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjaWVkX3BsdWdpbl90 cF9sb2FkX2NvdW50JykudGV4dChudW1GZXRjaGVkICsgJy8nICsgaWVkX3BsdWdpbl90cF90 b3RhbCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGpR dWVyeSgnI2llZF9wbHVnaW5fdHBfbG9hZF9jb3VudCcpLnRleHQoJ09LJykuaGlkZSgnc2xv dycpOwogICAgICAgICAgICAgICAgICAgIGllZF9wbHVnaW5fdXBkYXRlX3RwX2NvdW50KCk7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdqc29uJyk7 CiAgICAgICAgfSk7CiAgICB9KTsKCiAgICAvLyBDdXJyZW50IGxhbmd1YWdlIHJlZnJlc2gu CiAgICBqUXVlcnkoJyNpZWRfcGx1Z2luX3RwX3JlZnJlc2gnKS5jbGljayhmdW5jdGlvbiAo KSB7CiAgICAgICAgLy8gVHJpZ2dlciB0aGUgY2hhbmdlIGV2ZW50CiAgICAgICAgalF1ZXJ5 KCIjaWVkX3BsdWdpbl90cF9sYW5nIikuY2hhbmdlKCk7CiAgICB9KTsKCiAgICAvLyBMb2Fk IHRleHRwYWNrIHN0cmluZ3MgZnJvbSBwbHVnaW4ncyBjdXN0b20gZ1R4dCgpCiAgICBqUXVl cnkoIiNpZWRfcGx1Z2luX3RwX2xvYWQiKS5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHsKICAg ICAgICB2YXIgaWVkX2ZuID0galF1ZXJ5KCIjaWVkX3BsdWdpbl90cF9wb3B1bGF0ZSIpLnZh bCgpOwoKCiAgICAgICAgalF1ZXJ5KCcjb3B0aW9uc19ncm91cF9wYWNrIHVsIGxpJykuZWFj aChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBvYmogPSBqUXVlcnkodGhpcyk7CiAg ICAgICAgICAgIHZhciB0cF9sYmwgPSBvYmouZmluZCgnbGFiZWwnKS50ZXh0KCk7CiAgICAg ICAgICAgIHZhciB0cF9kZXN0ID0gb2JqLmZpbmQoJ2lucHV0Jyk7CgogICAgICAgICAgICBz ZW5kQXN5bmNFdmVudCgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZXZlbnQ6IHRl eHRwYXR0ZXJuLmV2ZW50LAogICAgICAgICAgICAgICAgc3RlcDogJ3RleHRwYWNrX2xvYWQn LAogICAgICAgICAgICAgICAgaWVkX3RwX2ZuOiBpZWRfZm4sCiAgICAgICAgICAgICAgICBp ZWRfdHBfbGJsOiB0cF9sYmwKICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGRhdGEpIHsKICAg ICAgICAgICAgICAgIC8vIFBhc3RlIHRoZSByZXR1cm5lZCBzdHJpbmcgaW50byB0aGUgaW5w dXQgYm94IGFuZCBzYXZlIGl0IGJ5IGludm9raW5nIGJsdXIoKQogICAgICAgICAgICAgICAg dHBfZGVzdC52YWwoZGF0YS5pZWRfcGx1Z2luX3RwX3N0cmluZykuYmx1cigpOwogICAgICAg ICAgICB9LAogICAgICAgICAgICAnanNvbicpOwogICAgICAgIH0pOwogICAgICAgIGV2ZW50 LnByZXZlbnREZWZhdWx0KCk7CiAgICB9KTsKCiAgICAvLyBIYW5kbGUgc2F2aW5nIG1ldGFk YXRhLgogICAgalF1ZXJ5KCIjaWVkX3BsdWdpbl9tZXRhX3NhdmUiKS5jbGljayhmdW5jdGlv bihldmVudCkgewogICAgICAgIHZhciBtc2dhcmVhID0galF1ZXJ5KCIjaWVkX3BsdWdpbl9t ZXNzYWdlcyIpOwogICAgICAgIG1zZ2FyZWEuZW1wdHkoKTsKICAgICAgICB2YXIgbWV0YW9i aiA9IGpRdWVyeSgiI29wdGlvbnNfZ3JvdXBfbWV0YSIpOwogICAgICAgIHZhciBkYXRhYmxv Y2sgPSB7fTsKCiAgICAgICAgalF1ZXJ5KG1ldGFvYmopLmZpbmQoJ2lucHV0W3R5cGU9InRl eHQiXSwgc2VsZWN0JykuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIG9iaiA9 IGpRdWVyeSh0aGlzKTsKICAgICAgICAgICAgdmFyIG9iamlkID0gb2JqLmF0dHIoJ25hbWUn KTsKICAgICAgICAgICAgZGF0YWJsb2NrW29iamlkXSA9IG9iai52YWwoKTsKICAgICAgICB9 KTsKCiAgICAgICAgalF1ZXJ5KG1ldGFvYmopLmZpbmQoJ2lucHV0W3R5cGU9InJhZGlvIl0s IGlucHV0W3R5cGU9ImNoZWNrYm94Il0nKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAg ICB2YXIgb2JqID0galF1ZXJ5KHRoaXMpOwogICAgICAgICAgICB2YXIgb2JqaWQgPSBvYmou YXR0cignbmFtZScpLnJlcGxhY2UoL1xbXF0vLCAnJyk7CiAgICAgICAgICAgIGlmICh0eXBl b2YgZGF0YWJsb2NrW29iamlkXSA9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAg ZGF0YWJsb2NrW29iamlkXSA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChv YmoucHJvcCgnY2hlY2tlZCcpID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBkYXRhYmxv Y2tbb2JqaWRdLnB1c2gob2JqLnZhbCgpKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoK ICAgICAgICBqUXVlcnkobWV0YW9iaikuZmluZCgnc2VsZWN0JykuZWFjaChmdW5jdGlvbigp IHsKICAgICAgICAgICAgdmFyIG9iaiA9IGpRdWVyeSh0aGlzKTsKICAgICAgICAgICAgdmFy IG9iamlkID0gb2JqLmF0dHIoJ25hbWUnKTsKICAgICAgICAgICAgaWYgKG9iai5wcm9wKCdz ZWxlY3RlZCcpID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBkYXRhYmxvY2tbb2JqaWRd ID0gb2JqLnZhbCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHBs dWdpbiA9ICd7JG5hbWV9JzsKCiAgICAgICAgbWV0YW9iai5jc3MoJ29wYWNpdHknLCAnMC40 Jyk7CiAgICAgICAgc2VuZEFzeW5jRXZlbnQoCiAgICAgICAgewogICAgICAgICAgICBldmVu dDogdGV4dHBhdHRlcm4uZXZlbnQsCiAgICAgICAgICAgIHN0ZXA6ICdtZXRhX3NhdmUnLAog ICAgICAgICAgICBwbHVnaW46IHBsdWdpbiwKICAgICAgICAgICAgZGF0YTogZGF0YWJsb2Nr CiAgICAgICAgfSwgZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICBtZXRhb2JqLmNzcyh7 J29wYWNpdHknOiAnMSd9KTsKICAgICAgICAgICAgdmFyIG1zZyA9IGpRdWVyeShkYXRhKS5m aW5kKCdpZWRfcGx1Z2luX21zZycpLmF0dHIoJ3ZhbHVlJyk7CiAgICAgICAgICAgIGV2YWwo bXNnKTsgLy8geXVrIQogICAgICAgIH0pOwoKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs dCgpOwogICAgfSk7CgogICAgLy8gSGFuZGxlIHNhdmluZyBjb2RlLgogICAgalF1ZXJ5KCIj aWVkX3BsdWdpbl9jb2RlX3NhdmUiKS5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAg ICB2YXIgbXNnYXJlYSA9IGpRdWVyeSgiI2llZF9wbHVnaW5fbWVzc2FnZXMiKTsKICAgICAg ICBtc2dhcmVhLmVtcHR5KCk7CiAgICAgICAgdmFyIGNvZGVvYmogPSBqUXVlcnkoIiNwbHVn aW5fZWRpdG9yIik7CiAgICAgICAgdmFyIGNvZGVibG9jayA9IGNvZGVvYmoudmFsKCk7CiAg ICAgICAgdmFyIHBsdWdpbiA9ICd7JG5hbWV9JzsKCiAgICAgICAgY29kZW9iai5jc3MoJ29w YWNpdHknLCAnMC40Jyk7CiAgICAgICAgc2VuZEFzeW5jRXZlbnQoCiAgICAgICAgewogICAg ICAgICAgICBldmVudDogdGV4dHBhdHRlcm4uZXZlbnQsCiAgICAgICAgICAgIHN0ZXA6ICdj b2RlX3NhdmUnLAogICAgICAgICAgICBwbHVnaW46IHBsdWdpbiwKICAgICAgICAgICAgY29k ZWJsb2NrOiBjb2RlYmxvY2sKICAgICAgICB9LCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAg ICAgICBjb2Rlb2JqLmNzcyh7J29wYWNpdHknOiAnMSd9KTsKICAgICAgICAgICAgdmFyIG1z ZyA9IGpRdWVyeShkYXRhKS5maW5kKCdpZWRfcGx1Z2luX21zZycpLmF0dHIoJ3ZhbHVlJyk7 CiAgICAgICAgICAgIGV2YWwobXNnKTsgLy8geXVrIQogICAgICAgIH0pOwoKICAgICAgICBl dmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgfSk7CgogICAgLy8gSGFuZGxlIGdlbmVyYXRp bmcgcGhwZG9jCiAgICBqUXVlcnkoIiNpZWRfcGx1Z2luX2J0bl9waHBkb2MiKS5jbGljayhm dW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICB2YXIgbXNnYXJlYSA9IGpRdWVyeSgiI2llZF9w bHVnaW5fbXNncG9wIik7CiAgICAgICAgdmFyIG1zZ0NvbnRlbnQgPSBqUXVlcnkoIiNpZWRf cGx1Z2luX21zZ3BvcCAuaWVkX3BsdWdpbl9tc2dwb3BfY29udGVudCIpOwogICAgICAgIG1z Z0NvbnRlbnQuZW1wdHkoKTsKICAgICAgICB2YXIgZm5vYmogPSBqUXVlcnkoIiNpZWRfcGx1 Z2luX3RvX3BocGRvYyIpOwogICAgICAgIHZhciBmbiA9IGZub2JqLnZhbCgpOwogICAgICAg IHZhciBwbHVnaW4gPSAneyRuYW1lfSc7CgogICAgICAgIHNlbmRBc3luY0V2ZW50KAogICAg ICAgIHsKICAgICAgICAgICAgZXZlbnQ6IHRleHRwYXR0ZXJuLmV2ZW50LAogICAgICAgICAg ICBzdGVwOiAnZ2VuZXJhdGVfcGhwZG9jJywKICAgICAgICAgICAgcGx1Z2luOiBwbHVnaW4s CiAgICAgICAgICAgIGZuOiBmbgogICAgICAgIH0sIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAg ICAgICAgIG1zZ0NvbnRlbnQuYXBwZW5kKGpRdWVyeShkYXRhKS5maW5kKCdpZWRfcGx1Z2lu X3BocGRvYycpLmF0dHIoJ3ZhbHVlJykpOwogICAgICAgICAgICBpZWRfcGx1Z2luX3RvZ2ds ZV9tc2dwb3AoJzEnKTsKICAgICAgICB9KTsKCiAgICAgICAgZXZlbnQucHJldmVudERlZmF1 bHQoKTsKICAgIH0pOwoKICAgIGpRdWVyeSgnI2llZF9wbHVnaW5fdHBfb3BsYW5ncycpLmNo YW5nZShmdW5jdGlvbiAoKSB7CiAgICAgICAgc2VsID0galF1ZXJ5KCcjaWVkX3BsdWdpbl90 cF9vcGxhbmdzIG9wdGlvbjpzZWxlY3RlZCcpLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiB0 aGlzLnZhbHVlIH0pLmdldCgpLmpvaW4oJywgJyk7CiAgICAgICAgc2VuZEFzeW5jRXZlbnQo CiAgICAgICAgewogICAgICAgICAgICBldmVudDogdGV4dHBhdHRlcm4uZXZlbnQsCiAgICAg ICAgICAgIHN0ZXA6ICdsYW5nX3NldCcsCiAgICAgICAgICAgIGllZF90cF9sYW5nc2VsOiBz ZWwKICAgICAgICB9KTsKICAgIH0pOwoKfSk7CkVPSlMKICAgICAgICAgICAgKQogICAgICAg IC5uLiAnPC9kaXY+JzsKICAgIH0KCiAgICAvKioKICAgICAqIFNhdmUgdGhlIHBsdWdpbiB0 byB0aGUgREIgb3IgZmlsZXN5c3RlbS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNh dmUoKQogICAgewogICAgICAgIGV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJywn bmV3bmFtZScsJ2ZpbGVuYW1lJywnY29kZScsJ2F1dGhvcicsJ2F1dGhvcl91cmknLCd2ZXJz aW9uJywnZGVzY3JpcHRpb24nLCdoZWxwJywnY3NzJywnc3RhdHVzJywndHlwZScsJ2xvYWRf b3JkZXInLCdyZW5hbWVfZmlsZScsJ3Jlc3RvcmVfcG9pbnQnLCdpZWRfcGx1Z2luX3RwX3By ZWZpeCcpKSkpOwogICAgICAgICRmbGFncyA9IGdwcygnZmxhZ3MnKTsKCiAgICAgICAgbGlz dCAoJHN0YXJ0X2NzcywgJGVuZF9jc3MpID0gJHRoaXMtPm1ha2VfbWFya2VycygiQ1NTIiwg JHRoaXMtPmllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICR0aGlzLT5pZWRfcGx1 Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7CiAgICAgICAgJGV4dHJhTXNnID0gJG5ld2ZpbGVu YW1lID0gJG1zZzEgPSAkbXNnMiA9ICcnOwogICAgICAgICRuZXduYW1lID0gdHJpbSgkbmV3 bmFtZSk7CiAgICAgICAgaWYgKCRmbGFncykgewogICAgICAgICAgICAkZmxhZ291dCA9IDA7 CiAgICAgICAgICAgIGZvcmVhY2ggKCRmbGFncyBhcyAkZmxhZykgewogICAgICAgICAgICAg ICAgJGZsYWdvdXQgfD0gJGZsYWc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGZsYWdz ID0gJGZsYWdvdXQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJG5ld25hbWUpKSB7 CiAgICAgICAgICAgICRtc2cxID0gZ1R4dCgnaWVkX3BsdWdpbl9uYW1lX2ZpcnN0Jyk7CiAg ICAgICAgICAgICRtc2dUeXBlID0gRV9FUlJPUjsKICAgICAgICB9IGVsc2UgewogICAgICAg ICAgICBpZiAoZW1wdHkoJGZpbGVuYW1lKSkgewogICAgICAgICAgICAgICAgJGhvdXQgPSBh cnJheSgpOwogICAgICAgICAgICAgICAgJGhvdXRbMF0gPSAkaGVscDsKICAgICAgICAgICAg ICAgIGlmICgkY3NzKSB7ICRob3V0WzFdID0gbi4kc3RhcnRfY3NzLm4uJGNzcy5uLiRlbmRf Y3NzOyB9CiAgICAgICAgICAgICAgICBzYWZlX3VwZGF0ZSgKICAgICAgICAgICAgICAgICAg ICAndHhwX3BsdWdpbicsCiAgICAgICAgICAgICAgICAgICAgIm5hbWU9JyIuJG5ld25hbWUu IicsCiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gIi5pbnR2YWwoJHN0YXR1cykuIiwK ICAgICAgICAgICAgICAgICAgICB0eXBlID0gIi5pbnR2YWwoJHR5cGUpLiIsCiAgICAgICAg ICAgICAgICAgICAgYXV0aG9yID0gJyIuJGF1dGhvci4iJywKICAgICAgICAgICAgICAgICAg ICBhdXRob3JfdXJpID0gJyIuJGF1dGhvcl91cmkuIicsCiAgICAgICAgICAgICAgICAgICAg dmVyc2lvbiA9ICciLiR2ZXJzaW9uLiInLAogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0 aW9uID0gJyIuJGRlc2NyaXB0aW9uLiInLAogICAgICAgICAgICAgICAgICAgIGhlbHAgPSAn Ii5pbXBsb2RlKCcnLCRob3V0KS4iJywKICAgICAgICAgICAgICAgICAgICBjb2RlID0gJyIu JGNvZGUuIicsCiAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSAiLmludHZhbCgkZmxhZ3Mp LiIsCiAgICAgICAgICAgICAgICAgICAgIi4oKCRyZXN0b3JlX3BvaW50ID09IDEpPyAiY29k ZV9yZXN0b3JlID0gJyIuJGNvZGUuIicsIiA6ICcnKS4iCiAgICAgICAgICAgICAgICAgICAg bG9hZF9vcmRlciA9ICIuJGxvYWRfb3JkZXIsCiAgICAgICAgICAgICAgICAgICAgIm5hbWUg PSAnIi4kbmFtZS4iJyIpOwogICAgICAgICAgICAgICAgJG1zZzEgPSBnVHh0KCdwbHVnaW5f c2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3bmFtZSkpOwogICAgICAgICAgICAgICAg JG1zZ1R5cGUgPSAnJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRw Y2QgPSBnZXRfcHJlZigncGx1Z2luX2NhY2hlX2RpcicpOwogICAgICAgICAgICAgICAgJGRp ciA9ICRwY2QuRFM7CgogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRwY2QpKSB7CiAgICAg ICAgICAgICAgICAgICAgJGZpbGVjb250ZW50ID0gJyc7CiAgICAgICAgICAgICAgICAgICAg JG1zZzIgPSBnVHh0KCdpZWRfcGx1Z2luX2NhY2hlX25vdF9zZXQnKTsKICAgICAgICAgICAg ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGlvbyA9IGdldF9wcmVmKCdpZWRf cGx1Z2luX291dHB1dF9vcmRlcicpOwogICAgICAgICAgICAgICAgICAgICRvcG9yZGVyID0g KGlzc2V0KCRpb28pICYmIGlzX251bWVyaWMoJGlvbykpID8gJGlvbyA6IDA7CiAgICAgICAg ICAgICAgICAgICAgJHRleHRwYWNrID0gJHRoaXMtPnRleHRwYWNrX2J1aWxkKCRuZXduYW1l KTsKICAgICAgICAgICAgICAgICAgICAkaGVscGNodW5rID0gJHRoaXMtPmJ1aWxkX3RlbXBs YXRlKCdoZWxwJywgYXJyYXkoJGhlbHAsICcgJykpOyAvLyBVc2UgYSBzcGFjZSB0byBmb3Jj ZSBhIENTUyBodW5rIGluIHRoZSBmaWxlCiAgICAgICAgICAgICAgICAgICAgJGNvZGVjaHVu ayA9ICR0aGlzLT5idWlsZF90ZW1wbGF0ZSgnY29kZScsICRjb2RlKTsKICAgICAgICAgICAg ICAgICAgICAkZmlsZWNvbnRlbnQgPSAkdGhpcy0+YnVpbGRfdGVtcGxhdGUoInByZWFtYmxl IikKICAgICAgICAgICAgICAgICAgICAgICAgLiR0aGlzLT5idWlsZF90ZW1wbGF0ZSgibmFt ZSIsICRuZXduYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAuJHRoaXMtPmJ1aWxkX3Rl bXBsYXRlKCJodG1sX2hlbHAiKQogICAgICAgICAgICAgICAgICAgICAgICAuJHRoaXMtPmJ1 aWxkX3RlbXBsYXRlKCJ2ZXJzaW9uIiwgJHZlcnNpb24pCiAgICAgICAgICAgICAgICAgICAg ICAgIC4kdGhpcy0+YnVpbGRfdGVtcGxhdGUoImF1dGhvciIsICRhdXRob3IpCiAgICAgICAg ICAgICAgICAgICAgICAgIC4kdGhpcy0+YnVpbGRfdGVtcGxhdGUoImF1dGhvcl91cmkiLCAk YXV0aG9yX3VyaSkKICAgICAgICAgICAgICAgICAgICAgICAgLiR0aGlzLT5idWlsZF90ZW1w bGF0ZSgiZGVzY3JpcHRpb24iLCAkZGVzY3JpcHRpb24pCiAgICAgICAgICAgICAgICAgICAg ICAgIC4kdGhpcy0+YnVpbGRfdGVtcGxhdGUoImxvYWRfb3JkZXIiLCAkbG9hZF9vcmRlcikK ICAgICAgICAgICAgICAgICAgICAgICAgLiR0aGlzLT5idWlsZF90ZW1wbGF0ZSgidHlwZSIs ICR0eXBlKQogICAgICAgICAgICAgICAgICAgICAgICAuJHRoaXMtPmJ1aWxkX3RlbXBsYXRl KCJmbGFncyIsICRmbGFncykKICAgICAgICAgICAgICAgICAgICAgICAgLiR0aGlzLT5idWls ZF90ZW1wbGF0ZSgidGV4dHBhY2siLCAkdGV4dHBhY2spCiAgICAgICAgICAgICAgICAgICAg ICAgIC4kdGhpcy0+YnVpbGRfdGVtcGxhdGUoImluY2x1ZGUiKQogICAgICAgICAgICAgICAg ICAgICAgICAuKCgkb3BvcmRlciA9PSAwKSA/ICRjb2RlY2h1bmsgOiAkaGVscGNodW5rKQog ICAgICAgICAgICAgICAgICAgICAgICAuKCgkb3BvcmRlciA9PSAxKSA/ICRjb2RlY2h1bmsg OiAkaGVscGNodW5rKQogICAgICAgICAgICAgICAgICAgICAgICAuJHRoaXMtPmJ1aWxkX3Rl bXBsYXRlKCJwb3N0YW1ibGUiKTsKICAgICAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICcn OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRmaWxlY29udGVudCA9ICR0 aGlzLT5tYWtlX2FycmF5KCRmaWxlY29udGVudCk7CiAgICAgICAgICAgICAgICAkbWV0YXZh cnMgPSBhcnJheSgibmFtZSIgPT4gIiRuZXduYW1lIiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIiA9PiAiJHZlcnNpb24iLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dGhvciIgPT4gIiRhdXRob3IiLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dGhvcl91cmkiID0+ ICIkYXV0aG9yX3VyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiZGVzY3JpcHRpb24iID0+ICIkZGVzY3JpcHRpb24iLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgInR5cGUiID0+ICIkdHlwZSIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiZmxhZ3MiID0+ICIkZmxhZ3MiLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZGVyIiA9PiAiJGxvYWRfb3Jk ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAg ICAkaHVua3ZhcnMgPSBhcnJheSgiQ09ERSIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJc bicsJwonLCRjb2RlKSksIC8vIG5ld2xpbmUgd29ya2Fyb3VuZAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIkhFTFAiID0+IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcKJywk aGVscCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNTUyIgPT4gZG9TdHJpcChz dHJfcmVwbGFjZSgnXHJcbicsJwonLCRjc3MpKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoJG1ldGF2YXJzIGFzICR2YXJu YW1lID0+ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIGZvciAoJGlkeCA9IDA7ICRp ZHggPCBjb3VudCgkZmlsZWNvbnRlbnQpOyAkaWR4KyspIHsKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHN0cnBvcygkZmlsZWNvbnRlbnRbJGlkeF0sICckcGx1Z2luW1wnJy4kdmFy bmFtZS4nXCddJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxl Y29udGVudFskaWR4XSA9ICckcGx1Z2luW1wnJy4kdmFybmFtZS4nXCddID0gJy5kb1F1b3Rl KCR2YWx1ZSkuJzsnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkaHVua3ZhcnMgYXMgJHZhcm5hbWUg PT4gJGh1bmspIHsKICAgICAgICAgICAgICAgICAgICBsaXN0ICgkc3RhcnRfZGVsaW0sICRl bmRfZGVsaW0pID0gJHRoaXMtPm1ha2VfbWFya2VycygkdmFybmFtZSwgJHRoaXMtPmllZF9w bHVnaW5fZ2xvYmFsc1snZGxtX3N0YXJ0J10sICR0aGlzLT5pZWRfcGx1Z2luX2dsb2JhbHNb J2RsbV9lbmQnXSk7CiAgICAgICAgICAgICAgICAgICAgJHN0YXJ0ID0gYXJyYXlfc2VhcmNo KCRzdGFydF9kZWxpbSwgJGZpbGVjb250ZW50KSArIDE7CiAgICAgICAgICAgICAgICAgICAg JGVuZCA9IGFycmF5X3NlYXJjaCgkZW5kX2RlbGltLCAkZmlsZWNvbnRlbnQpOwogICAgICAg ICAgICAgICAgICAgIGlmIChpc19udW1lcmljKCRzdGFydCkgJiYgaXNfbnVtZXJpYygkZW5k KSAmJiAkZW5kID49ICRzdGFydCkgewogICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9z cGxpY2UoJGZpbGVjb250ZW50LCAkc3RhcnQsICRlbmQtJHN0YXJ0LCAkaHVuayk7CiAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGZp bGVjb250ZW50ID0gaW1wbG9kZSgiXG4iLCAkZmlsZWNvbnRlbnQpOwoKICAgICAgICAgICAg ICAgIGlmICgkZmlsZWNvbnRlbnQpIHsKICAgICAgICAgICAgICAgICAgICAkZmggPSBmb3Bl bigkZGlyLiRmaWxlbmFtZSwgJ3crJyk7CiAgICAgICAgICAgICAgICAgICAgZndyaXRlKCRm aCwgJGZpbGVjb250ZW50KTsKICAgICAgICAgICAgICAgICAgICBmY2xvc2UoJGZoKTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRtc2cxID0gKGVtcHR5KCRtc2cxKSkg PyBnVHh0KCdwbHVnaW5fc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3bmFtZSkpIDog JG1zZzE7CiAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICcnOwoKICAgICAgICAgICAgICAg IC8vIE1ha2UgbmV3IGZpbGUgaWYgcmVxdWlyZWQKICAgICAgICAgICAgICAgIGlmICgkcmVu YW1lX2ZpbGUgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICRmbmFtZXMgPSAkdGhpcy0+ Z2V0X25hbWUoJG5ld25hbWUsICR2ZXJzaW9uKTsKICAgICAgICAgICAgICAgICAgICAkbmV3 ZmlsZW5hbWUgPSAkZm5hbWVzWzJdOwogICAgICAgICAgICAgICAgICAgICRyZXMgPSByZW5h bWUoJGRpci4kZmlsZW5hbWUsICRkaXIuJG5ld2ZpbGVuYW1lKTsKICAgICAgICAgICAgICAg ICAgICAkZXh0cmFNc2cgPSAoJHJlcykgPyBnVHh0KCdpZWRfcGx1Z2luX3JlbmFtZWQnKSA6 IGdUeHQoJ2llZF9wbHVnaW5fcmVuYW1lX2ZhaWxlZCcpOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBTdG9yZSB0aGUgcGx1Z2luIHRleHRwYWNr IHByZWZpeAogICAgICAgICAgICAkdGhpcy0+c2V0X3RwX3ByZWZpeCgkbmV3bmFtZSwgJGll ZF9wbHVnaW5fdHBfcHJlZml4KTsKICAgICAgICB9CiAgICAgICAgaWYgKCRtc2cyKSB7CiAg ICAgICAgICAgICR0aGlzLT50YWJsZSgkbXNnMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAg ICAgICAgLy8gQ2hlY2sgdGhlIHBsdWdpbiB0eXBlIG1hdGNoZXMgdGhlIGNvZGUgdXNlZC4K ICAgICAgICAgICAgJGV4dHJhTXNnIC49ICgkdGhpcy0+YWRtaW5fY2hlY2soJGNvZGUsICR0 eXBlKSkgPyAnJyA6IHN0cm9uZyhnVHh0KCdpZWRfcGx1Z2luX2NoZWNrX3R5cGUnKSk7CiAg ICAgICAgICAgICRtZXNzYWdlID0gJG1zZzEuJGV4dHJhTXNnOwogICAgICAgICAgICAkdGhp cy0+ZWRpdChhcnJheSgkbWVzc2FnZSwgJG1zZ1R5cGUpLCAkbmV3ZmlsZW5hbWUpOwogICAg ICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEV4cG9ydCB0aGUgcGx1Z2luIGFzIGEgZGlz dHJpYnV0YWJsZSB0eHQgZmlsZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmVf YXNfZmlsZSgpCiAgICB7CiAgICAgICAgaWYgKGdwcygnbmFtZScpKSB7CiAgICAgICAgICAg ICRuYW1lID0gZ3BzKCduYW1lJyk7CiAgICAgICAgICAgICRycyA9IHNhZmVfcm93KCdkZXNj cmlwdGlvbiwgYXV0aG9yLCBhdXRob3JfdXJpLCB2ZXJzaW9uLCBjb2RlLCBoZWxwLCB0eXBl LCBsb2FkX29yZGVyLCBmbGFncycsICd0eHBfcGx1Z2luJywgIm5hbWU9JyIuZG9TbGFzaCgk bmFtZSkuIiciKTsKICAgICAgICAgICAgZXh0cmFjdCgkcnMpOwoKICAgICAgICAgICAgbGlz dCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyAkdGhpcy0+ZXh0cmFjdF9odW5rKCRoZWxwLCAi Q1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7CiAgICAgICAgfSBl bHNlaWYgKGdwcygnZmlsZW5hbWUnKSkgewogICAgICAgICAgICAkcGx1Z2luID0gJHRoaXMt PnJlYWRfZmlsZShnZXRfcHJlZigncGx1Z2luX2NhY2hlX2RpcicpLkRTLmdwcygnZmlsZW5h bWUnKSk7CiAgICAgICAgICAgIGV4dHJhY3QoJHBsdWdpbik7CiAgICAgICAgfQoKICAgICAg ICAkemlwID0gZ3BzKCd0eXBlJyk7CiAgICAgICAgaWYgKGdwcygndHJpbScpPT0xKSB7CiAg ICAgICAgICAgICRjb2RlPWV4cGxvZGUoIlxyXG4iLCRjb2RlKTsKICAgICAgICAgICAgJGNv ZGU9YXJyYXlfbWFwKCd0cmltJywkY29kZSk7CiAgICAgICAgICAgICRjb2RlPWltcGxvZGUo IlxyXG4iLCRjb2RlKTsKICAgICAgICB9CgogICAgICAgIC8vIEdldCBhbnkgdGV4dHBhY2sg c3RyaW5ncwogICAgICAgICR0ZXh0cGFjayA9ICR0aGlzLT50ZXh0cGFja19idWlsZCgkbmFt ZSk7CgogICAgICAgIGxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9ICR0aGlzLT5tYWtl X21hcmtlcnMoIkNTUyIsICR0aGlzLT5pZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCdd LCAkdGhpcy0+aWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOwogICAgICAgICRmbmFt ZXMgPSAkdGhpcy0+Z2V0X25hbWUoJG5hbWUsICR2ZXJzaW9uKTsKCiAgICAgICAgaGVhZGVy KCdDb250ZW50LXR5cGU6IHRleHQvcGxhaW4nKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQt RGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScgLiAoKCR6aXAgPT09ICd6aXAn KSA/ICRmbmFtZXNbMV0gOiAkZm5hbWVzWzBdKSk7CgogICAgICAgICR0eXBlcyA9IGFycmF5 KCdQdWJsaWMnICwgJ0FkbWluL1B1YmxpYycgLCAnTGlicmFyeScgLCAnQWRtaW4nLCAnQWRt aW4vQUpBWCcsICdBZG1pbi9QdWJsaWMvQUpBWCcpOyAvLyBObyBnVHh0KCkgYmVjYXVzZSB0 aGUgdGVtcGxhdGUgaXMgRW5nbGlzaAogICAgICAgICRwbHVnaW5bJ25hbWUnXSA9ICRuYW1l OwogICAgICAgICRwbHVnaW5bJ2F1dGhvciddID0gJGF1dGhvcjsKICAgICAgICAkcGx1Z2lu WydhdXRob3JfdXJpJ10gPSAkYXV0aG9yX3VyaTsKICAgICAgICAkcGx1Z2luWyd2ZXJzaW9u J10gPSAkdmVyc2lvbjsKICAgICAgICAkcGx1Z2luWydkZXNjcmlwdGlvbiddID0gJGRlc2Ny aXB0aW9uOwogICAgICAgICRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOwogICAgICAgICRwbHVn aW5bJ3R5cGUnXSA9ICR0eXBlOwogICAgICAgICRwbHVnaW5bJ29yZGVyJ10gPSAkbG9hZF9v cmRlcjsKICAgICAgICAkcGx1Z2luWydmbGFncyddID0gJGZsYWdzOwogICAgLy8gICRwbHVn aW5bJ2FsbG93X2h0bWxfaGVscCddID0gdHJ1ZTsKICAgIC8vICAkcGx1Z2luWydoZWxwX3Jh dyddID0gJGhlbHAuJHN0YXJ0X2Nzcy4kY3NzLiRlbmRfY3NzOwogICAgICAgICRwbHVnaW5b J2hlbHAnXSA9ICR0aGlzLT50ZXh0aWxlKCRuYW1lLCAkaGVscCwgJGNzcywgJHN0YXJ0X2Nz cywgJGVuZF9jc3MpOwogICAgICAgICRwbHVnaW5bJ21kNSddID0gbWQ1KCAkcGx1Z2luWydj b2RlJ10gKTsKICAgICAgICBpZiAoJHRleHRwYWNrKSB7CiAgICAgICAgICAgICRwbHVnaW5b J3RleHRwYWNrJ10gPSAkdGV4dHBhY2s7CiAgICAgICAgfQoKICAgICAgICBlY2hvICcjIE5h bWU6ICcuJG5hbWUuJyB2Jy4kdmVyc2lvbi4nICcuKCgkemlwID09PSAnemlwJykgPyAiKGNv bXByZXNzZWQpIiA6ICIiKS4nCiMgVHlwZTogJy4kdHlwZXNbJHR5cGVdLicgcGx1Z2luCiMg Jy4kZGVzY3JpcHRpb24uJwojIEF1dGhvcjogJy4kYXV0aG9yLicKIyBVUkw6ICcuJGF1dGhv cl91cmkuJwojIFJlY29tbWVuZGVkIGxvYWQgb3JkZXI6ICcuJGxvYWRfb3JkZXIuJwoKIyAu Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4KIyBUaGlzIGlzIGEgcGx1Z2luIGZvciBUZXh0cGF0dGVybiBDTVMg LSBodHRwOi8vdGV4dHBhdHRlcm4uY29tLwojIFRvIGluc3RhbGw6IHRleHRwYXR0ZXJuID4g YWRtaW4gPiBwbHVnaW5zCiMgUGFzdGUgdGhlIGZvbGxvd2luZyB0ZXh0IGludG8gdGhlIFwn SW5zdGFsbCBwbHVnaW5cJyBib3g6CiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgonLigoJHppcCA9PT0g J3ppcCcpID8gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShnemVuY29kZShzZXJpYWxpemUo JHBsdWdpbikpKSwgNzIpIDogY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShzZXJpYWxpemUo JHBsdWdpbikpLCA3MikpOwoKICAgICAgICBkaWUoKTsKICAgIH0KCiAgICAvKioKICAgICAq IEV4cG9ydCB0aGUgcGx1Z2luIGFzIGEgcGx1Z2luIHRlbXBsYXRlIFBIUCBmaWxlLgogICAg ICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZV9hc19waHBfZmlsZSgpCiAgICB7CiAgICAg ICAgaWYgKGdwcygnbmFtZScpKSB7CiAgICAgICAgICAgICRuYW1lID0gZ3BzKCduYW1lJyk7 CiAgICAgICAgICAgICRycyA9IHNhZmVfcm93KCJkZXNjcmlwdGlvbiwgYXV0aG9yLCBhdXRo b3JfdXJpLCB2ZXJzaW9uLCBjb2RlLCBoZWxwLCB0eXBlLCBsb2FkX29yZGVyLCBmbGFncyIs ICJ0eHBfcGx1Z2luIiwgIm5hbWU9JyIuZG9TbGFzaCgkbmFtZSkuIiciKTsKICAgICAgICAg ICAgZXh0cmFjdCgkcnMpOwoKICAgICAgICAgICAgbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVs cCkgPyAkdGhpcy0+ZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1 ZSkgOiBhcnJheSgnJywkaGVscCk7CiAgICAgICAgfSBlbHNlaWYgKGdwcygnZmlsZW5hbWUn KSkgewogICAgICAgICAgICAkcGx1Z2luPSR0aGlzLT5yZWFkX2ZpbGUoZ2V0X3ByZWYoJ3Bs dWdpbl9jYWNoZV9kaXInKS5EUy5ncHMoJ2ZpbGVuYW1lJykpOwogICAgICAgICAgICBleHRy YWN0KCRwbHVnaW4pOwogICAgICAgIH0KCiAgICAgICAgJGlvbyA9IGdldF9wcmVmKCdpZWRf cGx1Z2luX291dHB1dF9vcmRlcicpOwogICAgICAgICRvcG9yZGVyID0gKGlzc2V0KCRpb28p ICYmIGlzX251bWVyaWMoJGlvbykpID8gJGlvbyA6IDA7CiAgICAgICAgJGZuYW1lcyA9ICR0 aGlzLT5nZXRfbmFtZSgkbmFtZSwgJHZlcnNpb24pOwoKICAgICAgICBoZWFkZXIoJ0NvbnRl bnQtdHlwZTogdGV4dC9waHAnKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRp b246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScgLiRmbmFtZXNbMl0pOwoKICAgICAgICAkdGV4 dHBhY2sgPSAkdGhpcy0+dGV4dHBhY2tfYnVpbGQoJG5hbWUpOwogICAgICAgICRoZWxwY2h1 bmsgPSAkdGhpcy0+YnVpbGRfdGVtcGxhdGUoJ2hlbHAnLCBhcnJheSgkaGVscCwgJGNzcykp OwogICAgICAgICRjb2RlY2h1bmsgPSAkdGhpcy0+YnVpbGRfdGVtcGxhdGUoJ2NvZGUnLCBz dHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkY29kZSkpOwoKICAgICAgICBlY2hvICR0aGlzLT5i dWlsZF90ZW1wbGF0ZSgncHJlYW1ibGUnKS4KICAgICAgICAgICAgJHRoaXMtPmJ1aWxkX3Rl bXBsYXRlKCduYW1lJywgJG5hbWUpLgogICAgICAgICAgICAkdGhpcy0+YnVpbGRfdGVtcGxh dGUoJ2h0bWxfaGVscCcpLgogICAgICAgICAgICAkdGhpcy0+YnVpbGRfdGVtcGxhdGUoJ3Zl cnNpb24nLCAkdmVyc2lvbikuCiAgICAgICAgICAgICR0aGlzLT5idWlsZF90ZW1wbGF0ZSgn YXV0aG9yJywgJGF1dGhvcikuCiAgICAgICAgICAgICR0aGlzLT5idWlsZF90ZW1wbGF0ZSgn YXV0aG9yX3VyaScsICRhdXRob3JfdXJpKS4KICAgICAgICAgICAgJHRoaXMtPmJ1aWxkX3Rl bXBsYXRlKCdkZXNjcmlwdGlvbicsICRkZXNjcmlwdGlvbikuCiAgICAgICAgICAgICR0aGlz LT5idWlsZF90ZW1wbGF0ZSgnbG9hZF9vcmRlcicsICRsb2FkX29yZGVyKS4KICAgICAgICAg ICAgJHRoaXMtPmJ1aWxkX3RlbXBsYXRlKCd0eXBlJywgJHR5cGUpLgogICAgICAgICAgICAk dGhpcy0+YnVpbGRfdGVtcGxhdGUoJ2ZsYWdzJywgJGZsYWdzKS4KICAgICAgICAgICAgJHRo aXMtPmJ1aWxkX3RlbXBsYXRlKCd0ZXh0cGFjaycsICR0ZXh0cGFjaykuCiAgICAgICAgICAg ICR0aGlzLT5idWlsZF90ZW1wbGF0ZSgnaW5jbHVkZScpLgogICAgICAgICAgICAoKCRvcG9y ZGVyID09IDApID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspLgogICAgICAgICAgICAoKCRv cG9yZGVyID09IDEpID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspLgogICAgICAgICAgICAk dGhpcy0+YnVpbGRfdGVtcGxhdGUoJ3Bvc3RhbWJsZScpOwoKICAgICAgICBkaWUoKTsKICAg IH0KCiAgICAvKioKICAgICAqIEV4cG9ydCBvbmx5IHRoZSB0ZXh0cGFja3MgZnJvbSB0aGUg cGx1Z2luLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZV9hc190ZXh0cGFjaygp CiAgICB7CiAgICAgICAgaWYgKGdwcygnbmFtZScpKSB7CiAgICAgICAgICAgICRuYW1lID0g JGJhc2VfbmFtZSA9IGdwcygnbmFtZScpOwogICAgICAgICAgICAkdmVyc2lvbiA9IHNhZmVf ZmllbGQoJ3ZlcnNpb24nLCAidHhwX3BsdWdpbiIsICJuYW1lPSciLmRvU2xhc2goJG5hbWUp LiInIik7CiAgICAgICAgfSBlbHNlaWYgKGdwcygnZmlsZW5hbWUnKSkgewogICAgICAgICAg ICAkbmFtZSA9IGdwcygnZmlsZW5hbWUnKTsKICAgICAgICAgICAgJGJhc2VfbmFtZSA9IHN0 cl9yZXBsYWNlKCcucGhwJywgJycsICRuYW1lKTsKICAgICAgICAgICAgJHBsdWdpbj0kdGhp cy0+cmVhZF9maWxlKGdldF9wcmVmKCdwbHVnaW5fY2FjaGVfZGlyJykuRFMuZ3BzKCdmaWxl bmFtZScpKTsKICAgICAgICAgICAgJHZlcnNpb24gPSAkcGx1Z2luWyd2ZXJzaW9uJ107CiAg ICAgICAgfQoKICAgICAgICAkbGFuZ3MgPSBncHMoJ2xhbmcnKTsKICAgICAgICBpZiAoISRs YW5ncykgewogICAgICAgICAgICAkbGFuZ3MgPSBnZXRfcHJlZignaWVkX3BsdWdpbl9sYW5n X3NlbGVjdGVkJywgJycpOwogICAgICAgIH0KCiAgICAgICAgJGZvcmNlID0gMDsKICAgICAg ICBpZiAoJGxhbmdzID09ICcnKSB7CiAgICAgICAgICAgICRsYW5nc3RyID0gJ2FsbCc7CiAg ICAgICAgICAgICRmb3JjZSA9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGxh bmdsaXN0ID0gZG9fbGlzdCgkbGFuZ3MpOwogICAgICAgICAgICBpZiAoY291bnQoJGxhbmds aXN0KSA9PSAxKSB7CiAgICAgICAgICAgICAgICAkbGFuZ3N0ciA9ICRsYW5nbGlzdFswXTsK ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRjb3VudHJ5X2NvZGVzID0g YXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRsYW5nbGlzdCBhcyAkbG4pIHsK ICAgICAgICAgICAgICAgICAgICAkbHBhcnRzID0gZG9fbGlzdCgkbG4sICctJyk7CiAgICAg ICAgICAgICAgICAgICAgJGNvdW50cnlfY29kZXNbXSA9ICRscGFydHNbMF07CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAkbGFuZ3N0ciA9IGltcGxvZGUoJysnLCBhcnJh eV91bmlxdWUoJGNvdW50cnlfY29kZXMpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgICAkdGV4dHBhY2sgPSAkdGhpcy0+dGV4dHBhY2tfYnVpbGQoJGJhc2VfbmFtZSwgJGZv cmNlKTsKICAgICAgICAkZm5hbWVzID0gJHRoaXMtPmdldF9uYW1lKCRuYW1lLCAkdmVyc2lv biwgJGxhbmdzdHIpOwoKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogdGV4dC9odG1s OyBjaGFyc2V0PVVURi04Jyk7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9u OiBhdHRhY2htZW50OyBmaWxlbmFtZT0nIC4gJGZuYW1lc1szXSk7CiAgICAgICAgZWNobyAk dGV4dHBhY2s7CiAgICAgICAgZGllKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUg YSBwbHVnaW4gaW4gc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0LgogICAgICovCiAgICBwdWJs aWMgZnVuY3Rpb24gYnVpbGRfdGVtcGxhdGUoJHBydCwgJHZhbD0nJykKICAgIHsKICAgICAg ICAkY3NzID0gJGhlbHAgPSAnJzsKICAgICAgICBpZiAoaXNfYXJyYXkoJHZhbCkpIHsKICAg ICAgICAgICAgJGhlbHAgPSAkdmFsWzBdOwogICAgICAgICAgICAkY3NzID0gaXNzZXQoJHZh bFsxXSkgPyAkdmFsWzFdIDogJyc7CiAgICAgICAgICAgICR2YWwgPSAnJzsKICAgICAgICB9 CiAgICAgICAgJHRlbXBsYXRlID0gYXJyYXkoCiAgICAgICAgICAgICJwcmVhbWJsZSIgPT4g Jzw/cGhwJy5uLm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nLy8gVGhpcyBpcyBh IFBMVUdJTiBURU1QTEFURSBmb3IgVGV4dHBhdHRlcm4gQ01TLicubi5uCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAuJy8vIENvcHkgdGhpcyBmaWxlIHRvIGEgbmV3IG5hbWUgbGlr ZSBhYmNfbXlwbHVnaW4ucGhwLiAgRWRpdCB0aGUgY29kZSwgdGhlbicubgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgLicvLyBydW4gdGhpcyBmaWxlIGF0IHRoZSBjb21tYW5kIGxp bmUgdG8gcHJvZHVjZSBhIHBsdWdpbiBmb3IgZGlzdHJpYnV0aW9uOicubgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgLicvLyAkIHBocCBhYmNfbXlwbHVnaW4ucGhwID4gYWJjX215 cGx1Z2luLTAuMS50eHQnLm4ubiwKICAgICAgICAgICAgIm5hbWUiID0+ICcvLyBQbHVnaW4g bmFtZSBpcyBvcHRpb25hbC4gIElmIHVuc2V0LCBpdCB3aWxsIGJlIGV4dHJhY3RlZCBmcm9t IHRoZSBjdXJyZW50Jy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJy8vIGZpbGUg bmFtZS4gUGx1Z2luIG5hbWVzIHNob3VsZCBzdGFydCB3aXRoIGEgdGhyZWUgbGV0dGVyIHBy ZWZpeCB3aGljaCBpcycubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLicvLyB1bmlx dWUgYW5kIHJlc2VydmVkIGZvciBlYWNoIHBsdWdpbiBhdXRob3IgKCJhYmMiIGlzIGp1c3Qg YW4gZXhhbXBsZSkuJy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJy8vIFVuY29t bWVudCBhbmQgZWRpdCB0aGlzIGxpbmUgdG8gb3ZlcnJpZGU6Jy5uCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAuJyRwbHVnaW5bXCduYW1lXCddID0gJy5kb1F1b3RlKGRvU2xhc2go JHZhbCkpLic7Jy5uLm4sCiAgICAgICAgICAgICJodG1sX2hlbHAiID0+ICcvLyBBbGxvdyBy YXcgSFRNTCBoZWxwLCBhcyBvcHBvc2VkIHRvIFRleHRpbGUuJy5uCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAuJy8vIDAgPSBQbHVnaW4gaGVscCBpcyBpbiBUZXh0aWxlIGZvcm1h dCwgbm8gcmF3IEhUTUwgYWxsb3dlZCAoZGVmYXVsdCkuJy5uCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAuJy8vIDEgPSBQbHVnaW4gaGVscCBpcyBpbiByYXcgSFRNTC4gIE5vdCBy ZWNvbW1lbmRlZC4nLm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nIyAkcGx1Z2lu W1wnYWxsb3dfaHRtbF9oZWxwXCddID0gMTsnLm4ubiwKICAgICAgICAgICAgInZlcnNpb24i ID0+ICckcGx1Z2luW1wndmVyc2lvblwnXSA9ICcuZG9RdW90ZSgkdmFsKS4nOycubiwKICAg ICAgICAgICAgImZsYWdzIiA9PiAnLy8gUGx1Z2luICJmbGFncyIgc2lnbmFsIHRoZSBwcmVz ZW5jZSBvZiBvcHRpb25hbCBjYXBhYmlsaXRpZXMgdG8gdGhlIGNvcmUgcGx1Z2luIGxvYWRl ci4nLm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nLy8gVXNlIGFuIGFwcHJvcHJp YXRlbHkgT1ItZWQgY29tYmluYXRpb24gb2YgdGhlc2UgZmxhZ3MuJy5uCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAuJy8vIFRoZSBmb3VyIGhpZ2gtb3JkZXIgYml0cyAweGYwMDAg YXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBwbHVnaW5cJ3MgcHJpdmF0ZSB1c2UnLm4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC4naWYgKCFkZWZpbmVkKFwnUExVR0lOX0hBU19QUkVG U1wnKSkgZGVmaW5lKFwnUExVR0lOX0hBU19QUkVGU1wnLCAweDAwMDEpOyAvLyBUaGlzIHBs dWdpbiB3YW50cyB0byByZWNlaXZlICJwbHVnaW5fcHJlZnMueyRwbHVnaW5bXCduYW1lXCdd fSIgZXZlbnRzJy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJ2lmICghZGVmaW5l ZChcJ1BMVUdJTl9MSUZFQ1lDTEVfTk9USUZZXCcpKSBkZWZpbmUoXCdQTFVHSU5fTElGRUNZ Q0xFX05PVElGWVwnLCAweDAwMDIpOyAvLyBUaGlzIHBsdWdpbiB3YW50cyB0byByZWNlaXZl ICJwbHVnaW5fbGlmZWN5Y2xlLnskcGx1Z2luW1wnbmFtZVwnXX0iIGV2ZW50cycubi5uCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAuJyRwbHVnaW5bXCdmbGFnc1wnXSA9ICcuZG9R dW90ZSgkdmFsKS4nOycubi5uLAogICAgICAgICAgICAidGV4dHBhY2siID0+ICcvLyBQbHVn aW4gXCd0ZXh0cGFja1wnIGlzIG9wdGlvbmFsLiBJdCBwcm92aWRlcyBpMThuIHN0cmluZ3Mg dG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGdUeHQoKS4nLm4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC4nLy8gU3ludGF4OicubgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgLicvLyAjIyBhcmJpdHJhcnkgY29tbWVudCcubgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgLicvLyAjQGV2ZW50Jy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAu Jy8vICNAbGFuZ3VhZ2UgSVNPLUxBTkdVQUdFLUNPREUnLm4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC4nLy8gYWJjX3N0cmluZ19uYW1lID0+IExvY2FsaXplZCBTdHJpbmcnLm4u bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLigoJHZhbCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA/ICckcGx1Z2luW1wndGV4dHBhY2tcJ10gPSA8PDxFT1QnLm4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiR2YWwubgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAuJ0VPVDsnLm4ubgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogJy8qKiBVbmNvbW1lbnQgbWUsIGlmIHlvdSBuZWVkIGEgdGV4 dHBhY2snLm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLickcGx1Z2lu W1wndGV4dHBhY2tcJ10gPSA8PDwgRU9UJy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC4nI0BhZG1pbicubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAuJyNAbGFuZ3VhZ2UgZW4tZ2InLm4KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLidhYmNfc2FtcGxlX3N0cmluZyA9PiBTYW1wbGUgU3RyaW5nJy5uCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nYWJjX29uZV9tb3JlID0+IE9uZSBt b3JlJy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nI0BsYW5ndWFn ZSBkZS1kZScubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJ2FiY19z YW1wbGVfc3RyaW5nID0+IEJlaXNwaWVsdGV4dCcubgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAuJ2FiY19vbmVfbW9yZSA9PiBOb2NoIGVpbmVyJy5uCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nRU9UOycubgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAuJyoqLycubgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAuJy8vIEVuZCBvZiB0ZXh0cGFjaycubi5uKSwKICAgICAgICAgICAgImF1 dGhvciIgPT4gJyRwbHVnaW5bXCdhdXRob3JcJ10gPSAnLmRvUXVvdGUoZG9TbGFzaCgkdmFs KSkuJzsnLm4sCiAgICAgICAgICAgICJhdXRob3JfdXJpIiA9PiAnJHBsdWdpbltcJ2F1dGhv cl91cmlcJ10gPSAnLmRvUXVvdGUoZG9TbGFzaCgkdmFsKSkuJzsnLm4sCiAgICAgICAgICAg ICJkZXNjcmlwdGlvbiIgPT4gJyRwbHVnaW5bXCdkZXNjcmlwdGlvblwnXSA9ICcuZG9RdW90 ZShkb1NsYXNoKCR2YWwpKS4nOycubi5uLAogICAgICAgICAgICAibG9hZF9vcmRlciIgPT4g Jy8vIFBsdWdpbiBsb2FkIG9yZGVyOicubgogICAgICAgICAgICAgICAgICAgICAgICAgICAg LicvLyBUaGUgZGVmYXVsdCB2YWx1ZSBvZiA1IHdvdWxkIGZpdCBtb3N0IHBsdWdpbnMsIHdo aWxlIGZvciBpbnN0YW5jZSBjb21tZW50Jy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAuJy8vIHNwYW0gZXZhbHVhdG9ycyBvciBVUkwgcmVkaXJlY3RvcnMgd291bGQgcHJvYmFi bHkgd2FudCB0byBydW4gZWFybGllcicubgogICAgICAgICAgICAgICAgICAgICAgICAgICAg LicvLyAoMS4uLjQpIHRvIHByZXBhcmUgdGhlIGVudmlyb25tZW50IGZvciBldmVyeXRoaW5n IGVsc2UgdGhhdCBmb2xsb3dzLicubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLicv LyBWYWx1ZXMgNi4uLjkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIHBsdWdpbnMgd2hpY2gg d291bGQgd29yayBsYXRlLicubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLicvLyBU aGlzIG9yZGVyIGlzIHVzZXItb3ZlcnJpZGVhYmxlLicubgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgLickcGx1Z2luW1wnb3JkZXJcJ10gPSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4u biwKICAgICAgICAgICAgInR5cGUiID0+ICcvLyBQbHVnaW4gXCd0eXBlXCcgZGVmaW5lcyB3 aGVyZSB0aGUgcGx1Z2luIGlzIGxvYWRlZCcubgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgLicvLyAwID0gcHVibGljICAgICAgICAgICAgICA6IG9ubHkgb24gdGhlIHB1YmxpYyBz aWRlIG9mIHRoZSB3ZWJzaXRlIChkZWZhdWx0KScubgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgLicvLyAxID0gcHVibGljK2FkbWluICAgICAgICA6IG9uIGJvdGggdGhlIHB1Ymxp YyBhbmQgYWRtaW4gc2lkZScubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLicvLyAy ID0gbGlicmFyeSAgICAgICAgICAgICA6IG9ubHkgd2hlbiBpbmNsdWRlX3BsdWdpbigpIG9y IHJlcXVpcmVfcGx1Z2luKCkgaXMgY2FsbGVkJy5uCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAuJy8vIDMgPSBhZG1pbiAgICAgICAgICAgICAgIDogb25seSBvbiB0aGUgYWRtaW4g c2lkZSAobm8gQUpBWCknLm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nLy8gNCA9 IGFkbWluK2FqYXggICAgICAgICAgOiBvbmx5IG9uIHRoZSBhZG1pbiBzaWRlIChBSkFYIHN1 cHBvcnRlZCknLm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nLy8gNSA9IHB1Ymxp YythZG1pbithamF4ICAgOiBvbiBib3RoIHRoZSBwdWJsaWMgYW5kIGFkbWluIHNpZGUgKEFK QVggc3VwcG9ydGVkKScubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLickcGx1Z2lu W1wndHlwZVwnXSA9ICcuZG9RdW90ZSgkdmFsKS4nOycubi5uLAogICAgICAgICAgICAiaW5j bHVkZSIgPT4gJ2lmICghZGVmaW5lZChcJ3R4cGludGVyZmFjZVwnKSknLm4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC4nICAgICAgICBAaW5jbHVkZV9vbmNlKFwnemVtX3RwbC5w aHBcJyk7Jy5uLm4sCiAgICAgICAgICAgICJoZWxwIiA9PiAnaWYgKDApIHsnLm4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC4nPz4nLm4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC4gKCgkY3NzKSA/ICc8IS0tJy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAu JyMgLS0tIEJFR0lOIFBMVUdJTiBDU1MgLS0tJy5uCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAuJGNzcy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJyMgLS0tIEVORCBQ TFVHSU4gQ1NTIC0tLScubgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLictLT4nLm4g OiAnJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nPCEtLScubgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgLicjIC0tLSBCRUdJTiBQTFVHSU4gSEVMUCAtLS0nLm4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC4kaGVscC5uCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAuJyMgLS0tIEVORCBQTFVHSU4gSEVMUCAtLS0nLm4KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC4nLS0+Jy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJzw/ cGhwJy5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJ30nLm4sCiAgICAgICAgICAg ICJjb2RlIiA9PiAnIyAtLS0gQkVHSU4gUExVR0lOIENPREUgLS0tJy5uCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAuJHZhbC5uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAu JyMgLS0tIEVORCBQTFVHSU4gQ09ERSAtLS0nLm4sCiAgICAgICAgICAgICJwb3N0YW1ibGUi ID0+ICc/PicsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIChhcnJheV9rZXlfZXhpc3Rz KCRwcnQsICR0ZW1wbGF0ZSkgPyAkdGVtcGxhdGVbJHBydF0gOiAnJyk7CiAgICB9CgogICAg LyoqCiAgICAgKiBDcmVhdGUgLyB1cGxvYWQgLyBpbnN0YWxsIGEgbmV3IHBsdWdpbi4KICAg ICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZSgpCiAgICB7CiAgICAgICAgZXh0cmFj dChkb1NsYXNoKGdwc2EoYXJyYXkoJ25hbWUnLCAncGx1Z2luX2NyZWF0ZScsICdwbHVnaW5f dXBsb2FkJywgJ3BsdWdpbl9pbnN0YWxsJywgJ2llZF9wbHVnaW5fYXV0b2VuYWJsZScpKSkp OwoKICAgICAgICBpZiAoJHBsdWdpbl9jcmVhdGUpIHsKICAgICAgICAgICAgJGZuYW1lID0g Jyc7CiAgICAgICAgICAgIGlmICgkbmFtZSA9PSAnJykgewogICAgICAgICAgICAgICAgJHRo aXMtPnRhYmxlKGFycmF5KGdUeHQoJ2llZF9wbHVnaW5fbmFtZV9maXJzdCcpLCBFX0VSUk9S KSk7CgoKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAg ICBpZiAoc3RycG9zKCRuYW1lLCAiLnBocCIpICE9PSBmYWxzZSkgewogICAgICAgICAgICAg ICAgJGZuYW1lID0gJG5hbWU7CiAgICAgICAgICAgICAgICAkbmFtZSA9IGJhc2VuYW1lKCRu YW1lLCAiLnBocCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRleGlzdHMgPSBmZXRj aCgnbmFtZScsICd0eHBfcGx1Z2luJywgJ25hbWUnLCAkbmFtZSk7CgogICAgICAgICAgICAv LyBNeVNRTCBkZWZhdWx0cyB0byBzZXQgc3RhdHVzPTEgc28gd2UgbmVlZCB0byBleHBsaWNp dGx5IG92ZXJyaWRlIHRoaXMgaWYgdGhpcwogICAgICAgICAgICAvLyBpcyBhIGZyZXNoIGlu c3RhbGxhdGlvbgogICAgICAgICAgICAkc3RhdGUgPSAoJGllZF9wbHVnaW5fYXV0b2VuYWJs ZT09MSkgPyAxIDogMDsKCgogICAgICAgICAgICBpZiAoISRleGlzdHMpIHsKICAgICAgICAg ICAgICAgIGlmICgkZm5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAvLyBQdXQgcGx1Z2lu IGluIGNhY2hlIGRpciBieSBmYWtpbmcgYSBQT1NUIHN1Ym1pc3Npb24gYW5kIHNhdmluZwog ICAgICAgICAgICAgICAgICAgICRfUE9TVFsnZmlsZW5hbWUnXSA9ICRmbmFtZTsKICAgICAg ICAgICAgICAgICAgICAkX1BPU1RbJ25ld25hbWUnXSA9ICRuYW1lOwogICAgICAgICAgICAg ICAgICAgICRfUE9TVFsnc3RhdHVzJ10gPSAxOyAvLyBDYWNoZV9kaXIgcGx1Z2lucyBhcmUg YWx3YXlzIG9uIHNvIHRoaXMgc2V0dGluZyBpcyBpZ25vcmVkCiAgICAgICAgICAgICAgICAg ICAgJF9QT1NUWyd0eXBlJ10gPSAwOwogICAgICAgICAgICAgICAgICAgICRfUE9TVFsndmVy c2lvbiddID0gJzAuMSc7CiAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydsb2FkX29yZGVy J10gPSA1OwogICAgICAgICAgICAgICAgICAgICRfUE9TVFsnZmxhZ3MnXSA9IDA7CiAgICAg ICAgICAgICAgICAgICAgJHRoaXMtPnNhdmUoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICAgICAgICAgICAgc2FmZV9pbnNlcnQoInR4cF9wbHVnaW4iLCAiCiAgICAg ICAgICAgICAgICAgICAgICAgIG5hbWU9JyRuYW1lJywKICAgICAgICAgICAgICAgICAgICAg ICAgc3RhdHVzPSRzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0wLAogICAg ICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPScwLjEnLAogICAgICAgICAgICAgICAgICAg ICAgICBsb2FkX29yZGVyPTUsCiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPTAsCiAg ICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPScnLAogICAgICAgICAgICAgICAg ICAgICAgICBoZWxwPScnLAogICAgICAgICAgICAgICAgICAgICAgICBjb2RlPScnLAogICAg ICAgICAgICAgICAgICAgICAgICBjb2RlX3Jlc3RvcmU9JycKICAgICAgICAgICAgICAgICAg ICAiKTsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZWRpdChnVHh0KCdpZWRfcGx1Z2lu X2VkaXRfbmV3JyksICRuYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBl bHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT50YWJsZShhcnJheShnVHh0KCdwbHVnaW4n KS4nIDxzdHJvbmc+Jy4kbmFtZS4nPC9zdHJvbmc+ICcuZ1R4dCgnYWxyZWFkeV9leGlzdHMn KSwgRV9FUlJPUikpOwogICAgICAgICAgICB9CgogICAgICAgIH0gZWxzZWlmICgkcGx1Z2lu X3VwbG9hZCkgewogICAgICAgICAgICBsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSAk dGhpcy0+bWFrZV9tYXJrZXJzKCJDU1MiLCAkdGhpcy0+aWVkX3BsdWdpbl9nbG9iYWxzWydj c3Nfc3RhcnQnXSwgJHRoaXMtPmllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCddKTsKCiAg ICAgICAgICAgIGlmICghJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKSB7CiAgICAg ICAgICAgICAgICAkdGhpcy0+dGFibGUoYXJyYXkoZ1R4dCgnaWVkX3BsdWdpbl9jaG9vc2Vf ZmlsZScpLCBFX0VSUk9SKSk7CgogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg ICB9CgogICAgICAgICAgICAkaW5mbyA9IGV4cGxvZGUgKCcuJywkX0ZJTEVTWyd0aGVmaWxl J11bJ25hbWUnXSk7CiAgICAgICAgICAgICRsYXN0cGFydCA9IGNvdW50KCRpbmZvKS0xOwog ICAgICAgICAgICAkZXh0ID0gJGluZm9bJGxhc3RwYXJ0XTsKCiAgICAgICAgICAgIGlmICgk ZXh0ID09ICdwaHAnKSB7CiAgICAgICAgICAgICAgICAkcGx1Z2luID0gJHRoaXMtPnJlYWRf ZmlsZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pOwovLyAgJG5ld25hbWUgPSAo ZW1wdHkoJHBsdWdpblsnbmFtZSddKSkgPyBiYXNlbmFtZSgkX0ZJTEVTWyd0aGVmaWxlJ11b J25hbWUnXSwgJy5waHAnKSA6ICRwbHVnaW5bJ25hbWUnXTsKICAgICAgICAgICAgICAgICRu ZXduYW1lID0gKCRuYW1lKSA/ICRuYW1lIDogZG9TbGFzaCgkcGx1Z2luWyduYW1lJ10pOwoK ICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkcGx1Z2luWydjb2RlJ10pKSB7CiAgICAgICAg ICAgICAgICAgICAgJHBsdWdpblsnY29kZSddID0gZmlsZV9nZXRfY29udGVudHMoJF9GSUxF U1sndGhlZmlsZSddWyd0bXBfbmFtZSddKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICAgICBleHRyYWN0KGRvU2xhc2goJHBsdWdpbikpOwoKICAgICAgICAgICAgICAgICRt ZDUgPSBtZDUoJGNvZGUpOwogICAgICAgICAgICAgICAgJHZlcnNpb24gPSAoJHZlcnNpb24p ID8gJHZlcnNpb24gOiAiMC4xIjsKICAgICAgICAgICAgICAgICRoZWxwID0gJGhlbHAuKCgk Y3NzKSA/IG4uJHN0YXJ0X2Nzcy5uLiRjc3Mubi4kZW5kX2NzcyA6ICcnKTsKICAgICAgICAg ICAgICAgICRleGlzdHMgPSBmZXRjaCgnbmFtZScsICd0eHBfcGx1Z2luJywgJ25hbWUnLCAk bmV3bmFtZSk7CgogICAgICAgICAgICAgICAgLy8gTXlTUUwgZGVmYXVsdHMgdG8gc2V0IHN0 YXR1cz0xIHNvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBvdmVycmlkZSB0aGlzIGlmIHRoaXMK ICAgICAgICAgICAgICAgIC8vIGlzIGEgZnJlc2ggaW5zdGFsbGF0aW9uCiAgICAgICAgICAg ICAgICAkc3RhdGUgPSAoJGllZF9wbHVnaW5fYXV0b2VuYWJsZT09MSkgPyAnc3RhdHVzPTEs JyA6ICgkZXhpc3RzICYmICgkaWVkX3BsdWdpbl9hdXRvZW5hYmxlPT0yKSA/ICcnIDogJ3N0 YXR1cz0wLCcpOwoKICAgICAgICAgICAgICAgIGlmICgkZXhpc3RzKSB7CiAgICAgICAgICAg ICAgICAgICAgLy8gTm90ZTogc3RhdHVzIG9taXR0ZWQgc28gaXQgcmV0YWlucyBpdHMgdmFs dWUKICAgICAgICAgICAgICAgICAgICAkcnMgPSBzYWZlX3VwZGF0ZSgKICAgICAgICAgICAg ICAgICAgICAgICAgInR4cF9wbHVnaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAiJHN0 YXRlCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAiLmludHZhbCgkdHlwZSkuIiwK ICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yID0gJyRhdXRob3InLAogICAgICAgICAg ICAgICAgICAgICAgICBhdXRob3JfdXJpID0gJyRhdXRob3JfdXJpJywKICAgICAgICAgICAg ICAgICAgICAgICAgdmVyc2lvbiA9ICckdmVyc2lvbicsCiAgICAgICAgICAgICAgICAgICAg ICAgIGRlc2NyaXB0aW9uID0gJyRkZXNjcmlwdGlvbicsCiAgICAgICAgICAgICAgICAgICAg ICAgIGhlbHAgPSAnJGhlbHAnLAogICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gJyRj b2RlJywKICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9yZXN0b3JlID0gJyRjb2RlJywK ICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9tZDUgPSAnJG1kNScsCiAgICAgICAgICAg ICAgICAgICAgICAgIGZsYWdzID0gIi5pbnR2YWwoJGZsYWdzKS4iLAogICAgICAgICAgICAg ICAgICAgICAgICBsb2FkX29yZGVyID0gIi5pbnR2YWwoJGxvYWRfb3JkZXIpLAogICAgICAg ICAgICAgICAgICAgICAgICAibmFtZSA9ICckbmV3bmFtZSciCiAgICAgICAgICAgICAgICAg ICAgKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHJz ID0gc2FmZV9pbnNlcnQoCiAgICAgICAgICAgICAgICAgICAgICAgICJ0eHBfcGx1Z2luIiwK ICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgPSAnJG5ld25hbWUnLAogICAgICAgICAg ICAgICAgICAgICAgICAkc3RhdGUKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICIu aW50dmFsKCR0eXBlKS4iLAogICAgICAgICAgICAgICAgICAgICAgICBhdXRob3IgPSAnJGF1 dGhvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcl91cmkgPSAnJGF1dGhvcl91 cmknLAogICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gJyR2ZXJzaW9uJywKICAg ICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAnJGRlc2NyaXB0aW9uJywKICAg ICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICckaGVscCcsCiAgICAgICAgICAgICAgICAg ICAgICAgIGNvZGUgPSAnJGNvZGUnLAogICAgICAgICAgICAgICAgICAgICAgICBjb2RlX3Jl c3RvcmUgPSAnJGNvZGUnLAogICAgICAgICAgICAgICAgICAgICAgICBjb2RlX21kNSA9ICck bWQ1JywKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSAiLmludHZhbCgkZmxhZ3Mp LiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRfb3JkZXIgPSAiLmludHZhbCgkbG9h ZF9vcmRlcikKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgICAgICRtc2cgPSAoJGV4aXN0cykgPyBnVHh0KCdpZWRfcGx1Z2luX3VwZGF0 ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3bmFtZSkpIDogZ1R4dCgnaWVkX3BsdWdpbl91 cGxvYWRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXduYW1lKSk7CiAgICAgICAgICAgICAg ICAkdGhpcy0+dGFibGUoJG1zZywgJG5ld25hbWUpOwoKICAgICAgICAgICAgfSBlbHNlaWYg KCRleHQgPT09ICd0eHQnKSB7CiAgICAgICAgICAgICAgICAkcGx1Z2luNjQgPSBmaWxlX2dl dF9jb250ZW50cygkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pOwogICAgICAgICAg ICAgICAgJHJldCA9ICR0aGlzLT5pbnN0YWxsKCRwbHVnaW42NCk7CgogICAgICAgICAgICAg ICAgaWYgKCRyZXRbJ2VyciddID09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMt PnRhYmxlKCRyZXRbJ21zZyddLCAkcmV0WyduYW0nXSk7CiAgICAgICAgICAgICAgfSBlbHNl IHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dGFibGUoYXJyYXkoJHJldFsnbXNnJ10s ICRyZXRbJ2VyciddKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAg ICAgfSBlbHNlaWYgKCRwbHVnaW5faW5zdGFsbCkgewogICAgICAgICAgICAkcmV0ID0gJHRo aXMtPmluc3RhbGwocHMoJ3BsdWdpbjY0JykpOwogICAgICAgICAgICBpZiAoJHJldFsnZXJy J10gPT0gJycpIHsKICAgICAgICAgICAgICAgICR0aGlzLT50YWJsZSgkcmV0Wydtc2cnXSwg JHJldFsnbmFtJ10pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlz LT50YWJsZShhcnJheSgkcmV0Wydtc2cnXSwgJHJldFsnZXJyJ10pKTsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEluc3RhbGwgcGx1Z2luIGZyb20g ZGlzdHJpYnV0YWJsZSB0eHQgZmlsZS4KICAgICAqCiAgICAgKiBGcmFua2Vuc3RlaW5lZCBz aGFtZWxlc3NseSBmcm9tIGluY2x1ZGUvdHhwX3BsdWdpbi5waHAKICAgICAqCiAgICAgKiBA cGFyYW0gIHN0cmluZyAkcGx1Z2luIFRoZSByYXcgYmFzZTY0LWVuY29kZWQvZ3ppcHBlZCBw bHVnaW4gYmxvY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluc3RhbGwoJHBsdWdp biA9ICcnKQogICAgewogICAgICAgIGlmIChzdHJwb3MoJHBsdWdpbiwgJyRwbHVnaW49XCcn KSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgQGluaV9zZXQoJ3BjcmUuYmFja3RyYWNrX2xp bWl0JywgJzEwMDAwMDAnKTsKICAgICAgICAgICAgJHBsdWdpbiA9IHByZWdfcmVwbGFjZSgn QC4qXCRwbHVnaW49XCcoW1x3PSsvXSspXCcuKkBzJywgJyQxJywgJHBsdWdpbik7CiAgICAg ICAgfQoKICAgICAgICAkcGx1Z2luID0gcHJlZ19yZXBsYWNlKCcvXiMuKiQvbScsICcnLCAk cGx1Z2luKTsKCiAgICAgICAgaWYgKHRyaW0oJHBsdWdpbikpIHsKICAgICAgICAgICAgJHBs dWdpbiA9IGJhc2U2NF9kZWNvZGUoJHBsdWdpbik7CgogICAgICAgICAgICBpZiAoc3RybmNt cCgkcGx1Z2luLCAiXHgxRlx4OEIiLCAyKSA9PT0gMCkgewogICAgICAgICAgICAgICAgJHBs dWdpbiA9IGd6aW5mbGF0ZShzdWJzdHIoJHBsdWdpbiwgMTApKTsKICAgICAgICAgICAgfQoK ICAgICAgICAgICAgaWYgKCRwbHVnaW4gPSBAdW5zZXJpYWxpemUoJHBsdWdpbikpIHsKICAg ICAgICAgICAgICAgIGlmIChpc19hcnJheSgkcGx1Z2luKSkgewogICAgICAgICAgICAgICAg ICAgIGV4dHJhY3QoJHBsdWdpbik7CgogICAgICAgICAgICAgICAgICAgICR0eXBlICA9IGVt cHR5KCR0eXBlKSAgPyAwIDogbWluKG1heChpbnR2YWwoJHR5cGUpLCAwKSwgNSk7CiAgICAg ICAgICAgICAgICAgICAgJG9yZGVyID0gZW1wdHkoJG9yZGVyKSA/IDUgOiBtaW4obWF4KGlu dHZhbCgkb3JkZXIpLCAxKSwgOSk7CiAgICAgICAgICAgICAgICAgICAgJGZsYWdzID0gZW1w dHkoJGZsYWdzKSA/IDAgOiBpbnR2YWwoJGZsYWdzKTsKCiAgICAgICAgICAgICAgICAgICAg JGV4aXN0cyA9IGZldGNoKCduYW1lJywgJ3R4cF9wbHVnaW4nLCAnbmFtZScsICRuYW1lKTsK CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRoZWxwX3JhdykgJiYgZW1wdHkoJHBs dWdpblsnYWxsb3dfaHRtbF9oZWxwJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8v IERlZmF1bHQ6IGhlbHAgaXMgaW4gVGV4dGlsZSBmb3JtYXQuCiAgICAgICAgICAgICAgICAg ICAgICAgIGluY2x1ZGVfb25jZSB0eHBhdGguJy9saWIvY2xhc3NUZXh0aWxlLnBocCc7CiAg ICAgICAgICAgICAgICAgICAgICAgICR0ZXh0aWxlID0gbmV3IFRleHRpbGUoKTsKICAgICAg ICAgICAgICAgICAgICAgICAgJGhlbHAgPSAkdGV4dGlsZS0+VGV4dGlsZVJlc3RyaWN0ZWQo JGhlbHBfcmF3LCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg ICAgICAgIC8vIE15U1FMIGRlZmF1bHRzIHRvIHNldCBzdGF0dXM9MSBzbyB3ZSBuZWVkIHRv IGV4cGxpY2l0bHkgb3ZlcnJpZGUgdGhpcyBpZiB0aGlzCiAgICAgICAgICAgICAgICAgICAg Ly8gaXMgYSBmcmVzaCBpbnN0YWxsYXRpb24uCiAgICAgICAgICAgICAgICAgICAgJGllZF9w bHVnaW5fYXV0b2VuYWJsZSA9IHBzKCdpZWRfcGx1Z2luX2F1dG9lbmFibGUnKTsKICAgICAg ICAgICAgICAgICAgICAkc3RhdGUgPSAoJGllZF9wbHVnaW5fYXV0b2VuYWJsZT09MSkgPyAn c3RhdHVzPTEsJyA6ICgkZXhpc3RzICYmICgkaWVkX3BsdWdpbl9hdXRvZW5hYmxlPT0yKSA/ ICcnIDogJ3N0YXR1cz0wLCcpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJGV4aXN0cykg ewogICAgICAgICAgICAgICAgICAgICAgICAkcnMgPSBzYWZlX3VwZGF0ZSgKICAgICAgICAg ICAgICAgICAgICAgICAgICAgInR4cF9wbHVnaW4iLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIiRzdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAgICAgICAg ID0gJHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3IgICAgICAgPSAn Ii5kb1NsYXNoKCRhdXRob3IpLiInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0 aG9yX3VyaSAgID0gJyIuZG9TbGFzaCgkYXV0aG9yX3VyaSkuIicsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2ZXJzaW9uICAgICAgPSAnIi5kb1NsYXNoKCR2ZXJzaW9uKS4iJywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICA9ICciLmRvU2xhc2go JGRlc2NyaXB0aW9uKS4iJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHAgICAg ICAgICA9ICciLmRvU2xhc2goJGhlbHApLiInLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29kZSAgICAgICAgID0gJyIuZG9TbGFzaCgkY29kZSkuIicsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb2RlX3Jlc3RvcmUgPSAnIi5kb1NsYXNoKCRjb2RlKS4iJywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfbWQ1ICAgICA9ICciLmRvU2xhc2goJG1k NSkuIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAgICAgICAgPSAkZmxh Z3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgICAgICAgID0gJyIuZG9T bGFzaCgkbmFtZSkuIiciCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAkcnMgPSBzYWZl X2luc2VydCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgInR4cF9wbHVnaW4iLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAibmFtZSAgICAgICAgID0gJyIuZG9TbGFzaCgkbmFt ZSkuIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdGUKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGUgICAgICAgICA9ICR0eXBlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXV0aG9yICAgICAgID0gJyIuZG9TbGFzaCgkYXV0aG9yKS4iJywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcl91cmkgICA9ICciLmRvU2xhc2goJGF1 dGhvcl91cmkpLiInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiAgICAg ID0gJyIuZG9TbGFzaCgkdmVyc2lvbikuIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXNjcmlwdGlvbiAgPSAnIi5kb1NsYXNoKCRkZXNjcmlwdGlvbikuIicsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBoZWxwICAgICAgICAgPSAnIi5kb1NsYXNoKCRoZWxwKS4i JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgICAgICAgICA9ICciLmRvU2xh c2goJGNvZGUpLiInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9yZXN0b3Jl ID0gJyIuZG9TbGFzaCgkY29kZSkuIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b2RlX21kNSAgICAgPSAnIi5kb1NsYXNoKCRtZDUpLiInLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgbG9hZF9vcmRlciAgID0gJyIuJG9yZGVyLiInLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmxhZ3MgICAgICAgID0gJGZsYWdzIgogICAgICAgICAgICAgICAgICAg ICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYg KCRycyBhbmQgJGNvZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgk dGV4dHBhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsX3RleHRw YWNrKCR0ZXh0cGFjaywgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg ICAgICAgICAgICAgICAgICAgICBpZiAocHMoJ2llZF9wbHVnaW5faW5zdGFsbG9wdHMnKSAm JiAoJGZsYWdzICYgUExVR0lOX0xJRkVDWUNMRV9OT1RJRlkpICkgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgbG9hZF9wbHVnaW4oJG5hbWUsIHRydWUpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSBjYWxsYmFja19ldmVudCgicGx1Z2luX2xpZmVj eWNsZS4kbmFtZSIsICdpbnN0YWxsZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRtZXNzYWdlKSkgJG1lc3NhZ2Ug PSBnVHh0KCdwbHVnaW5faW5zdGFsbGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKTsK CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSgnbXNnJyA9PiAkbWVzc2Fn ZSwgJ2VycicgPT4gJycsICduYW0nID0+ICRuYW1lKTsKICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoJ21zZycgPT4g Z1R4dCgncGx1Z2luX2luc3RhbGxfZmFpbGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUp KSwgJ2VycicgPT4gRV9FUlJPUik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXJyYXko J21zZycgPT4gZ1R4dCgnYmFkX3BsdWdpbl9jb2RlJyksICdlcnInID0+IEVfRVJST1IpOwog ICAgfQoKICAgIC8qKgogICAgICogU3RvcmUgdGhlIHN0YXRlIG9mIHRoZSB0b2dnbGFibGUg cGFuZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzYXZlX3BhbmVfc3RhdGUoKQog ICAgewogICAgICAgICRwYW5lcyA9IGFycmF5KCdpZWRfcGx1Z2luX3RwX3N0cmluZ3MnLCAn aWVkX3BsdWdpbl9jb2RlJywgJ2llZF9wbHVnaW5fZG9jcycsICdpZWRfcGx1Z2luX21ldGEn LCAnaWVkX3BsdWdpbl91dGlscycsICdpZWRfcGx1Z2luX2NwYW5lbCcsICdpZWRfcGx1Z2lu X2RicGx1Z3MnLCAnaWVkX3BsdWdpbl9jYWNoZXBsdWdzJyk7CiAgICAgICAgJHBhbmUgPSBn cHMoJ3BhbmUnKTsKICAgICAgICBpZiAoaW5fYXJyYXkoJHBhbmUsICRwYW5lcykpIHsKICAg ICAgICAgICAgc2V0X3ByZWYoInBhbmVfeyRwYW5lfV92aXNpYmxlIiwgKGdwcygndmlzaWJs ZScpID09ICd0cnVlJyA/ICcxJyA6ICcwJyksICdpZWRfcGx1Z2luJywgUFJFRl9ISURERU4s ICd5ZXNub3JhZGlvJywgMCwgUFJFRl9QUklWQVRFKTsKICAgICAgICAgICAgc2VuZF94bWxf cmVzcG9uc2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZW5kX3htbF9yZXNw b25zZShhcnJheSgnaHR0cC1zdGF0dXMnID0+ICc0MDAgQmFkIFJlcXVlc3QnKSk7CiAgICAg ICAgfQogICAgfQoKICAgIC8qKgogICAgICogR2V0IHBsdWdpbiAoZmlsZSluYW1lIGluZm9y bWF0aW9uLgogICAgICoKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgKGZpbGUpbmFtZXM7 CiAgICAgKiAgMSkgdGhlIHN0YW5kYXJkIHBsdWdpbgogICAgICogIDIpIHRoZSBjb21wcmVz c2VkIHBsdWdpbgogICAgICogIDMpIHRoZSBQSFAgdGVtcGxhdGUKICAgICAqICA0KSB0aGUg dGV4dHBhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9uYW1lKCRuYW1lLCAk dmVyc2lvbiA9ICcnLCAkbGFuZz0nJykKICAgIHsKICAgICAgICAkaWVkX3BsdWdpbl9wcmVm cyA9ICR0aGlzLT5nZXRfcHJlZnMoKTsKCiAgICAgICAgJG9wID0gZ2V0X3ByZWYoJ2llZF9w bHVnaW5fb3V0cHV0X3NmaWxlJyk7CiAgICAgICAgJG9wYyA9IGdldF9wcmVmKCdpZWRfcGx1 Z2luX291dHB1dF9zZmlsZWMnKTsKICAgICAgICAkb3BwID0gZ2V0X3ByZWYoJ2llZF9wbHVn aW5fb3V0cHV0X3NmaWxlcCcpOwogICAgICAgICRvcHQgPSBnZXRfcHJlZignaWVkX3BsdWdp bl9vdXRwdXRfc2ZpbGV0Jyk7CgogICAgICAgICRvdXQgPSBhcnJheSgKICAgICAgICAgICAg KCAoZW1wdHkoJG9wKSkgPyAkaWVkX3BsdWdpbl9wcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRf c2ZpbGUnXVsnZGVmYXVsdCddIDogJG9wICksCiAgICAgICAgICAgICggKGVtcHR5KCRvcGMp KSA/ICRpZWRfcGx1Z2luX3ByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXVsnZGVm YXVsdCddIDogJG9wYyApLAogICAgICAgICAgICAoIChlbXB0eSgkb3BwKSkgPyAkaWVkX3Bs dWdpbl9wcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVwJ11bJ2RlZmF1bHQnXSA6ICRv cHAgKSwKICAgICAgICAgICAgKCAoZW1wdHkoJG9wdCkpID8gJGllZF9wbHVnaW5fcHJlZnNb J2llZF9wbHVnaW5fb3V0cHV0X3NmaWxldCddWydkZWZhdWx0J10gOiAkb3B0ICksCiAgICAg ICAgKTsKCiAgICAgICAgJGZyb20gPSBhcnJheSgne25hbWV9JywgJ3t2ZXJzaW9ufScsICd7 bGFuZ30nKTsKICAgICAgICAkdG8gPSBhcnJheSgkbmFtZSwgJHZlcnNpb24sICRsYW5nKTsK CiAgICAgICAgZm9yZWFjaCAoJG91dCBhcyAkZmlkeCA9PiAkZm5hbWUpIHsKICAgICAgICAg ICAgJGZuYW1lID0gc3RyX3JlcGxhY2UoJGZyb20sICR0bywgJGZuYW1lKTsKICAgICAgICAg ICAgJG91dFskZmlkeF0gPSBzYW5pdGl6ZUZvckZpbGUoJGZuYW1lKTsKICAgICAgICB9Cgog ICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgYSBwbHVn aW4gaW4gU3RhbmRhcmQgVGV4dHBhdHRlcm4gVGVtcGxhdGUgZm9ybWF0LgogICAgICoKICAg ICAqIEBwYXJhbSAgc3RyaW5nICRmaWxlcGF0aCBGdWxsIHBhdGggdG8gdGhlIGZpbGUgdG8g YmUgcmVhZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZF9maWxlKCRmaWxlcGF0 aCkKICAgIHsKICAgICAgICAkY29udGVudCA9IGZpbGUoJGZpbGVwYXRoKTsKICAgICAgICAk anVzdGZpbGUgPSBiYXNlbmFtZSgkZmlsZXBhdGgpOwogICAgICAgICRwYXJ0cyA9IGV4cGxv ZGUgKCcuJywkanVzdGZpbGUpOwogICAgICAgICRleHQgPSBhcnJheV9wb3AoJHBhcnRzKTsK ICAgICAgICAkZXh0ID0gKCRleHQ9PSRqdXN0ZmlsZSkgPyAnJyA6ICcuJy4kZXh0OyAvLyBP bmx5IGFzc2lnbiBhbiBleHRlbnNpb24gaWYgb25lIGV4aXN0cwogICAgICAgICRzb3VyY2Vf bGluZXMgPSBjb3VudCgkY29udGVudCk7CiAgICAgICAgJGNvbW1lbnRibG9jayA9IGZhbHNl OwogICAgICAgICRpbl90ZXh0cGFjayA9IGZhbHNlOwogICAgICAgICRtZXRhZGF0YSA9IGFy cmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnICAgICAgICA9PiAnJywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uJyAgICAgPT4gJycsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAncmV2aXNpb24nICAgID0+ICcnLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ2F1dGhvcicgICAgICA9PiAnJywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdhdXRob3JfdXJpJyAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnZGVzY3JpcHRpb24nID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ29yZGVyJyAgICAgICA9PiAnNScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAn dHlwZScgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZsYWdz JyAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0cGFjaycg ICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgZm9yICgkaWR4 PTA7ICRpZHggPCAkc291cmNlX2xpbmVzOyAkaWR4KyspIHsKICAgICAgICAgICAgJGNvbnRl bnRbJGlkeF0gPSBydHJpbSgkY29udGVudFskaWR4XSk7CgogICAgICAgICAgICAvLyBCb21i IG91dCBpZiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGFyZWEKICAgICAg ICAgICAgaWYgKHN0cnBvcyggJGNvbnRlbnRbJGlkeF0sICdpZiAoIWRlZmluZWQoXCd0eHBp bnRlcmZhY2VcJyknICkgPT09IDApIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICB9CiAgICAgICAgICAgIGlmIChzdHJwb3MoJGNvbnRlbnRbJGlkeF0sICcvKicpID09 PSAwKSB7CiAgICAgICAgICAgICAgICAkY29tbWVudGJsb2NrID0gdHJ1ZTsKICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggKHN0cnBv cygkY29udGVudFskaWR4XSwgJyovJykgPT09IDApIHx8IChzdHJwb3MoJGNvbnRlbnRbJGlk eF0sICcqKi8nKSA9PT0gMCkgKSB7CiAgICAgICAgICAgICAgICAkY29tbWVudGJsb2NrID0g ZmFsc2U7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAg ICAgICAgaWYgKHN0cnBvcygkY29udGVudFskaWR4XSwgJ0VPVDsnKSA9PT0gMCkgewogICAg ICAgICAgICAgICAgJGluX3RleHRwYWNrID0gZmFsc2U7CiAgICAgICAgICAgICAgICBjb250 aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRpbl90ZXh0cGFjaykgewog ICAgICAgICAgICAgICAgJG1ldGFkYXRhWyd0ZXh0cGFjayddIC49ICRjb250ZW50WyRpZHhd Lm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghJGNvbW1lbnRibG9jayAmJiBz dHJwb3MoJGNvbnRlbnRbJGlkeF0sICckcGx1Z2luWycpID09PSAwKSB7CiAgICAgICAgICAg ICAgICAvLyBGb3VuZCBhIHBsdWdpbiB2YXJpYWJsZSBzbyBleHRyYWN0IGl0CiAgICAgICAg ICAgICAgICAkcGFydHMgPSBleHBsb2RlKCIgPSAiLCAkY29udGVudFskaWR4XSk7CiAgICAg ICAgICAgICAgICAkcGFydHNbMF0gPSBzdHJfcmVwbGFjZSgiJyIsICIiLCAkcGFydHNbMF0p OyAvLyBNYWtlIHRoZSBtYXRjaCBlYXNpZXIhCiAgICAgICAgICAgICAgICAkc2VtaWNvbG9u ID0gc3RycG9zKCRwYXJ0c1sxXSwgJzsnKTsKCiAgICAgICAgICAgICAgICBpZiAoJHNlbWlj b2xvbiAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAkcGFydHNbMV0gPSBzdWJz dHIoJHBhcnRzWzFdLCAwLCAkc2VtaWNvbG9uKTsgLy8gRGl0dG8KICAgICAgICAgICAgICAg IH0KCiAgICAgICAgICAgICAgICBwcmVnX21hdGNoKCIvcGx1Z2luXFsoLiopXF0vIiwgJHBh cnRzWzBdLCAkdmFyKTsgLy8gRXh0cmFjdCBqdXN0IHRoZSB2YXJpYWJsZSBuYW1lCgogICAg ICAgICAgICAgICAgaWYgKGlzX251bWVyaWMoJHBhcnRzWzFdKSkgewogICAgICAgICAgICAg ICAgICAgICRwYXJ0c1sxXSA9ICInIi4kcGFydHNbMV0uIiciOwogICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJHBhcnRzWzFdLCAnPDw8JykgPT09IGZh bHNlKSB7CiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaCgiLy4qJyguKiknLiovIiwg JHBhcnRzWzFdLCAkdmFsKTsgLy8gUmVtb3ZlIGFueXRoaW5nIG91dHNpZGUgdGhlIHF1b3Rl cyAoZS5nLiAkcmV2aXNpb24pCgogICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkdmFs KSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdW5xdW90ZWQgLSBtYXkgYmUg YSBjb25zdGFudCBvciB0d28uCiAgICAgICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2go Ii8oLiopLyIsICRwYXJ0c1sxXSwgJHZhbCk7CgogICAgICAgICAgICAgICAgICAgICAgICBp ZiAoc3RydG91cHBlcigkdmFsWzFdKSA9PSAkdmFsWzFdKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLyBJdCdzIGEgY29uc3RhbnQgc28gZ2V0IGl0cyB2YWx1ZQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgJHZhbFsxXSA9IDA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAkY29uc3RhbnRzID0gZG9fbGlzdCgkcGFydHNbMV0sICd8Jyk7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGNvbnN0YW50cyBhcyAkY29uc3RhbnQp IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsWzFdIHw9IChkZWZpbmVk KCRjb25zdGFudCkpID8gY29uc3RhbnQoJGNvbnN0YW50KSA6IDA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCR2YXJb MV0gPT09ICdyZXZpc2lvbicgJiYgaXNzZXQoJHZhbFsxXSkgJiYgIWVtcHR5KCR2YWxbMV0p KSB7CiAgICAgICAgICAgICAgICAgICAgJHJldnBhcnRzID0gZXhwbG9kZSgnICcsIHRyaW0o JHZhbFsxXSwgJyQgJykpOwogICAgICAgICAgICAgICAgICAgICR2YWxbMV0gPSAkcmV2cGFy dHNbY291bnQoJHJldnBhcnRzKS0xXTsKICAgICAgICAgICAgICAgICAgICAkdmFsWzFdID0g KGVtcHR5KCR2YWxbMV0pKSA/ICcnIDogJy4nIC4kdmFsWzFdOwogICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAgIGlmICgkdmFyWzFdID09PSAndGV4dHBhY2snKSB7CiAgICAg ICAgICAgICAgICAgICAgJGluX3RleHRwYWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRtZXRhZGF0 YVskdmFyWzFdXSA9ICR2YWxbMV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg ICRtZXRhZGF0YVsnbmFtZSddID0gKGVtcHR5KCRtZXRhZGF0YVsnbmFtZSddKSkgPyBiYXNl bmFtZSgkanVzdGZpbGUsICRleHQpIDogJG1ldGFkYXRhWyduYW1lJ107CiAgICAgICAgJG1l dGFkYXRhWydsb2FkX29yZGVyJ10gPSAkbWV0YWRhdGFbJ29yZGVyJ107CiAgICAgICAgJG1l dGFkYXRhWyd2ZXJzaW9uJ10gLj0gJG1ldGFkYXRhWydyZXZpc2lvbiddOwogICAgICAgICRt ZXRhZGF0YVsnaGVscCddID0gJHRoaXMtPmV4dHJhY3RfaHVuaygkY29udGVudCwgJ0hFTFAn KTsKICAgICAgICAkbWV0YWRhdGFbJ2NzcyddICA9ICR0aGlzLT5leHRyYWN0X2h1bmsoJGNv bnRlbnQsICdDU1MnICk7CiAgICAgICAgJG1ldGFkYXRhWydjb2RlJ10gPSAkdGhpcy0+ZXh0 cmFjdF9odW5rKCRjb250ZW50LCAnQ09ERScpOwoKICAgICAgICByZXR1cm4gJG1ldGFkYXRh OwogICAgfQoKICAgIC8qKgogICAgICogUHVsbCBvdXQgYSBjaHVuayBvZiB0ZXh0IGZyb20g dGhlIFN0YW5kYXJkIFRlbXBsYXRlIEZvcm1hdC4KICAgICAqCiAgICAgKiBSaXBwZWQgYW5k IG1vZGRlZCBmcm9tIG5ldC1jYXJ2ZXIncyB6ZW1fdHBsIHRlbXBsYXRlLgogICAgICoKICAg ICAqIEBwYXJhbSAgW3R5cGVdICAkY29udGVudCBbZGVzY3JpcHRpb25dCiAgICAgKiBAcGFy YW0gIFt0eXBlXSAgJGh1bmsgICAgW2Rlc2NyaXB0aW9uXQogICAgICogQHBhcmFtICBzdHJp bmcgICRjbW50ICAgIFtkZXNjcmlwdGlvbl0KICAgICAqIEBwYXJhbSAgYm9vbGVhbiAkZGVs ZXRlICBbZGVzY3JpcHRpb25dCiAgICAgKiBAcmV0dXJuIFt0eXBlXSAgICAgICAgICAgW2Rl c2NyaXB0aW9uXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXh0cmFjdF9odW5rKCRj b250ZW50LCAkaHVuaywgJGNtbnQ9IiMiLCAkZGVsZXRlPWZhbHNlKQogICAgewogICAgICAg ICRkbG0gPSBleHBsb2RlKCJ8IiwgJGNtbnQpOwogICAgICAgICRkbG1TdGFydCA9ICRkbG1b MF07CiAgICAgICAgJGRsbUVuZCA9IChpc3NldCgkZGxtWzFdKSkgPyAkZGxtWzFdIDogJyc7 CiAgICAgICAgJGxpbmVzID0gJHRoaXMtPm1ha2VfYXJyYXkoJGNvbnRlbnQpOwoKICAgICAg ICBsaXN0ICgkc3RhcnRfZGVsaW0sICRlbmRfZGVsaW0pID0gJHRoaXMtPm1ha2VfbWFya2Vy cygkaHVuaywgJGRsbVN0YXJ0LCAkZGxtRW5kKTsKICAgICAgICAkc3RhcnQgPSBhcnJheV9z ZWFyY2goJHN0YXJ0X2RlbGltLCAkbGluZXMpICsgMTsKICAgICAgICAkZW5kID0gYXJyYXlf c2VhcmNoKCRlbmRfZGVsaW0sICRsaW5lcyk7CgogICAgICAgIC8vIEtsdWRnZSB0byBnZXQg cm91bmQgdGhlIGRlbGltaXRlciBjaGFuZ2UgaW4gdjAuODMKICAgICAgICBpZiAoJGh1bmsg PT0gJ0NTUycgJiYgJGVuZCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgJHN0YXJ0X2RlbGlt ID0gc3RyX3JlcGxhY2UoJy0tLScsICcqKionLCAkc3RhcnRfZGVsaW0pOwogICAgICAgICAg ICAkZW5kX2RlbGltID0gc3RyX3JlcGxhY2UoJy0tLScsICcqKionLCAkZW5kX2RlbGltKTsK ICAgICAgICAgICAgJHN0YXJ0ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9kZWxpbSwgJGxpbmVz KSArIDE7CiAgICAgICAgICAgICRlbmQgPSBhcnJheV9zZWFyY2goJGVuZF9kZWxpbSwgJGxp bmVzKTsKICAgICAgICB9CgogICAgICAgICRleHRyYWN0ZWQgPSBhcnJheSgpOwogICAgICAg IGlmIChjb3VudCgkbGluZXMpID4gMCAmJiBpc19udW1lcmljKCRzdGFydCkgJiYgaXNfbnVt ZXJpYygkZW5kKSAmJiAkZW5kID4gJHN0YXJ0KSB7CiAgICAgICAgICAgICRleHRyYWN0ZWQg PSBhcnJheV9zbGljZSgkbGluZXMsICRzdGFydCwgJGVuZC0kc3RhcnQpOwogICAgICAgICAg ICAkbGluZU51bSA9IGNvdW50KCRleHRyYWN0ZWQpLTE7CiAgICAgICAgICAgIHdoaWxlICgk bGluZU51bSA+IDAgJiYgdHJpbSgkZXh0cmFjdGVkWyRsaW5lTnVtLS1dKSA9PSAiIikgewog ICAgICAgICAgICAgICAgYXJyYXlfcG9wKCRleHRyYWN0ZWQpOwogICAgICAgICAgICB9CiAg ICAgICAgICAgIHdoaWxlIChjb3VudCgkZXh0cmFjdGVkKSA+IDAgJiYgdHJpbSgkZXh0cmFj dGVkWzBdKSA9PSAiIikgewogICAgICAgICAgICAgICAgYXJyYXlfc2hpZnQoJGV4dHJhY3Rl ZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRkZWxldGUpIHsKICAgICAgICAg ICAgICAgICRjaG9wcGVkID0gYXJyYXlfc3BsaWNlKCRsaW5lcywgJHN0YXJ0LTEsICRlbmQt JHN0YXJ0KzIsICIiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkcmVtYWlu cyA9ICRsaW5lczsKICAgICAgICAvLyBDaGVjayBpZiB0aGUgQ1NTIHNlY3Rpb24gaGFzIDxz dHlsZT4gdGFncyBhcm91bmQgaXQ7IGFkZCB0aGVtIGlmIG5vdAogICAgICAgIGlmICgkaHVu ayA9PSAiQ1NTIikgewogICAgICAgICAgICAkbnVtcm93cyA9IGNvdW50KCRleHRyYWN0ZWQp OwogICAgICAgICAgICBpZiAoJG51bXJvd3MgPiAxKSB7CiAgICAgICAgICAgICAgICBpZiAo c3RycG9zKCRleHRyYWN0ZWRbJG51bXJvd3MtMV0sICc8L3N0eWxlPicpID09PSBmYWxzZSkg ewogICAgICAgICAgICAgICAgICAgICRleHRyYWN0ZWRbXSA9ICc8L3N0eWxlPic7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3RycG9zKCRleHRyYWN0ZWRbMF0s ICc8c3R5bGUgJykgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgYXJyYXlfdW5z aGlmdCgkZXh0cmFjdGVkLCAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nKTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJGRlbGV0ZSkg ewogICAgICAgICAgICByZXR1cm4gYXJyYXkodHJpbShpbXBsb2RlKCJcbiIsICRleHRyYWN0 ZWQpKSwgdHJpbShpbXBsb2RlKCJcbiIsICRyZW1haW5zKSkpOwogICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICAgIHJldHVybiB0cmltKGltcGxvZGUoIlxuIiwgJGV4dHJhY3RlZCkpOwog ICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHRyaW1tZWQgYXJyYXkg ZnJvbSBhIG11bHRpLWxpbmUgZG9jdW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtICBbdHlw ZV0gJGFyciBbZGVzY3JpcHRpb25dCiAgICAgKiBAcmV0dXJuIFt0eXBlXSAgICAgIFtkZXNj cmlwdGlvbl0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1ha2VfYXJyYXkoJGFycikK ICAgIHsKICAgICAgICBpZiAoIWlzX2FycmF5KCRhcnIpKSB7CiAgICAgICAgICAgICRhcnIg PSBleHBsb2RlKCJcbiIsICRhcnIpOwogICAgICAgIH0KCiAgICAgICAgJHNvdXJjZV9saW5l cyA9IGNvdW50KCRhcnIpOwoKICAgICAgICBmb3IgKCRpZHg9MDsgJGlkeCA8ICRzb3VyY2Vf bGluZXM7ICRpZHgrKykgewogICAgICAgICAgICAkYXJyWyRpZHhdID0gcnRyaW0oJGFyclsk aWR4XSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGFycjsKICAgIH0KCiAgICAvKioK ICAgICAqIENyZWF0ZSBzdGFydCBhbmQgZW5kIG1hcmtlcnMgZm9yIHRoZSBnaXZlbiBodW5r LgogICAgICoKICAgICAqIEBwYXJhbSAgW3R5cGVdICRodW5rICBbZGVzY3JpcHRpb25dCiAg ICAgKiBAcGFyYW0gIFt0eXBlXSAkc3RhcnQgW2Rlc2NyaXB0aW9uXQogICAgICogQHBhcmFt ICBbdHlwZV0gJGVuZCAgIFtkZXNjcmlwdGlvbl0KICAgICAqIEByZXR1cm4gW3R5cGVdICAg ICAgICBbZGVzY3JpcHRpb25dCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYWtlX21h cmtlcnMoJGh1bmssICRzdGFydCwgJGVuZCkKICAgIHsKICAgICAgICAkc21hcmtlciA9ICRz dGFydCAuIHN0cl9yZXBsYWNlKCJTRUNUSU9OIiwgJGh1bmssICR0aGlzLT5pZWRfcGx1Z2lu X2dsb2JhbHNbJ3N0YXJ0J10pIC4gKCgkZW5kKT8nICcuJGVuZDonJyk7CiAgICAgICAgJGVt YXJrZXIgPSAkc3RhcnQgLiBzdHJfcmVwbGFjZSgiU0VDVElPTiIsICRodW5rLCAkdGhpcy0+ aWVkX3BsdWdpbl9nbG9iYWxzWydlbmQnXSkgLiAoKCRlbmQpPycgJy4kZW5kOicnKTsKCiAg ICAgICAgcmV0dXJuIChhcnJheSgkc21hcmtlciwgJGVtYXJrZXIpKTsKICAgIH0KCiAgICAv KioKICAgICAqIENoZWNrIGlmIHRoZSBjb2RlIHNtZWxscyBsaWtlIGFuIGFkbWluLXNpZGUg cGx1Z2luLgogICAgICoKICAgICAqIFJpcHBlZCBhbmQgbW9kZGVkIGZyb20gbmV0LWNhcnZl cidzIHplbV90cGwgdGVtcGxhdGUuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJGNv ZGVibG9jayBUaGUgc291cmNlIGNvZGUKICAgICAqIEBwYXJhbSAgc3RyaW5nICR0eXBlICAg ICAgVGhlIHBsdWdpbidzIHR5cGUKICAgICAqIEByZXR1cm4gYm9vbCAgICAgICAgICAgICAg dHJ1ZSBpZiB0aGUgY29kZSBpcyBhIHB1YmxpYy1zaWRlIHBsdWdpbgogICAgICogICAgICAg ICAgICAgICAgICAgICAgICAgICBmYWxzZSBpZiBpdCBzZWVtcyB0byBiZSBhZG1pbi1zaWRl CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZG1pbl9jaGVjaygkY29kZWJsb2NrLCAk dHlwZSkKICAgIHsKICAgICAgICAvLyBTaG9ydCBjaXJjdWl0IHNpbmNlIHdlJ3JlIG9ubHkg aW50ZXJlc3RlZCBpbiBwdWJsaWMgcGx1Z2lucy4KICAgICAgICBpZiAoJHR5cGUgIT0gJzAn IHx8IHN0cnBvcygkY29kZWJsb2NrLCAndHhwaW50ZXJmYWNlJykgPT09IGZhbHNlKSB7CiAg ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gVGhpcyBpcyBz ZXZlcmFsIG9yZGVycyBvZiBtYWduaXR1ZGUgcXVpY2tlciB0aGFuIGEgc2luZ2xlIHByZWdf bWF0Y2gKICAgICAgICAvLyBhcyBwbHVnaW4gc2l6ZSBpbmNyZWFzZXMuCiAgICAgICAgJGNi ID0gc3RyX3JlcGxhY2UoYXJyYXkoJ1x0JywgJyAnKSwgJycsICRjb2RlYmxvY2spOwogICAg ICAgICRjYiA9IHN0cl9yZXBsYWNlKCc9PT0nLCAnPT0nLCAkY2IpOwoKICAgICAgICBpZiAo c3RycG9zKCRjYiwgJ3R4cGludGVyZmFjZT09XCJhZG1pbicpIHx8CiAgICAgICAgICAgIHN0 cnBvcygkY2IsICJ0eHBpbnRlcmZhY2U9PVwnYWRtaW4iKSB8fAogICAgICAgICAgICBzdHJw b3MoJGNiLCAnYWRtaW5cIj09dHhwaW50ZXJmYWNlJykgfHwKICAgICAgICAgICAgc3RycG9z KCRjYiwgImFkbWluXCc9PXR4cGludGVyZmFjZSIpIHx8CiAgICAgICAgICAgIHN0cnBvcygk Y2IsICdhZG1pblwiPT1AdHhwaW50ZXJmYWNlJykgfHwKICAgICAgICAgICAgc3RycG9zKCRj YiwgImFkbWluXCc9PUB0eHBpbnRlcmZhY2UiKSkgewoKICAgICAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAg ICAgKiBUZXh0aWxlIHRoZSBwYXNzZWQgaGVscCBkb2MgYW5kIHN0eWxlIGluZm8uCiAgICAg KgogICAgICogQ2FjaGUgdGhlIGNvbnRlbnQgaWYgdGhlIHByZWZzIGluZGljYXRlIHRvIGRv IHNvLgogICAgICoKICAgICAqIEBwYXJhbSAgW3R5cGVdICRuYW1lICAgICAgW2Rlc2NyaXB0 aW9uXQogICAgICogQHBhcmFtICBbdHlwZV0gJGhlbHAgICAgICBbZGVzY3JpcHRpb25dCiAg ICAgKiBAcGFyYW0gIFt0eXBlXSAkY3NzICAgICAgIFtkZXNjcmlwdGlvbl0KICAgICAqIEBw YXJhbSAgW3R5cGVdICRzdGFydF9kbG0gW2Rlc2NyaXB0aW9uXQogICAgICogQHBhcmFtICBb dHlwZV0gJGVuZF9kbG0gICBbZGVzY3JpcHRpb25dCiAgICAgKiBAcmV0dXJuIFt0eXBlXSAg ICAgICAgICAgIFtkZXNjcmlwdGlvbl0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRl eHRpbGUoJG5hbWUsICRoZWxwLCAkY3NzLCAkc3RhcnRfZGxtLCAkZW5kX2RsbSkKICAgIHsK ICAgICAgICAkdG1wZGlyID0gJGhscGZpbGUgPSAnJzsKICAgICAgICAkY2hhbmdlZCA9IHRy dWU7CiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgJGlvdGMgPSBnZXRfcHJlZign aWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnKTsKCiAgICAgICAgaWYgKGlzc2V0KCRpb3Rj KSAmJiAhZW1wdHkoJGlvdGMpICYmIGlzX3dyaXRhYmxlKCRpb3RjKSkgewogICAgICAgICAg ICAkdG1wZGlyID0gJGlvdGM7CiAgICAgICAgICAgICRjYWNoZSA9IGJ1aWxkX2ZpbGVfcGF0 aCgkdG1wZGlyLCAnaWVkX3BsdWdpbl9jb21wb3Nlci5jYWNoZScpOwogICAgICAgICAgICBp ZiAoIWZpbGVfZXhpc3RzKCRjYWNoZSkpIHsKICAgICAgICAgICAgICAgIHRvdWNoKCRjYWNo ZSk7IC8vIENyZWF0ZSBmaWxlIGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgICAgICAgICAgfQog ICAgICAgICAgICAkcGx1Z3MgPSBwYXJzZV9pbmlfZmlsZSgkY2FjaGUpOwoKICAgICAgICAg ICAgJG9sZF9tZDUgPSAoaXNfYXJyYXkoJHBsdWdzKSAmJiBhcnJheV9rZXlfZXhpc3RzKCRu YW1lLCAkcGx1Z3MpKSA/ICRwbHVnc1skbmFtZV0gOiAnJzsKICAgICAgICAgICAgJGN1cnJf bWQ1ID0gbWQ1KCRoZWxwKTsKICAgICAgICAgICAgJGhscGZpbGUgPSBidWlsZF9maWxlX3Bh dGgoJHRtcGRpciwgJG5hbWUuJ19oZWxwLnR4dGwnKTsKICAgICAgICAgICAgaWYgKCRvbGRf bWQ1ID09ICRjdXJyX21kNSkgewogICAgICAgICAgICAgICAgJG91dFswXSA9IGZpbGVfZ2V0 X2NvbnRlbnRzKCRobHBmaWxlKTsKICAgICAgICAgICAgICAgICRjaGFuZ2VkID0gZmFsc2U7 CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcGx1Z3NbJG5hbWVdID0g JGN1cnJfbWQ1OwogICAgICAgICAgICAgICAgJGZkID0gZm9wZW4oJGNhY2hlLCAidyIpOwog ICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBsdWdzIGFzICRpZHggPT4gJHZhbCkgewogICAg ICAgICAgICAgICAgICAgIGZ3cml0ZSgkZmQsICRpZHguJyA9ICcuJHZhbC5uKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZjbG9zZSgkZmQpOwogICAgICAgICAgICB9 CiAgICAgICAgfQoKICAgICAgICBpZiAoISRvdXQpIHsKICAgICAgICAgICAgQGluY2x1ZGVf b25jZSB0eHBhdGguJy9saWIvY2xhc3NUZXh0aWxlLnBocCc7CiAgICAgICAgICAgICRvdXRb MF0gPSAkaGVscDsKICAgICAgICAgICAgaWYgKGNsYXNzX2V4aXN0cygnVGV4dGlsZScpKSB7 CiAgICAgICAgICAgICAgICAvLyBUcnkgYW5kIGJlIGEgbGl0dGxlIG1vcmUgaW50ZWxsaWdl bnQgYWJvdXQgYXBwbHlpbmcgdGV4dGlsZSBvciBub3QKICAgICAgICAgICAgICAgICRyZSA9 ICcvaFswLTZdKFwoLipcKSk/XC4vJzsKICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNo KCRyZSwgJGhlbHApKSB7CiAgICAgICAgICAgICAgICAgICAgJHRleHRpbGUgPSBuZXcgVGV4 dGlsZSgpOwogICAgICAgICAgICAgICAgICAgICRvdXRbMF0gPSAkdGV4dGlsZS0+VGV4dGls ZVRoaXMoJGhlbHApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg fQoKICAgICAgICBpZiAoJHRtcGRpciAmJiAkY2hhbmdlZCkgewogICAgICAgICAgICBpZiAo IWZpbGVfZXhpc3RzKCRobHBmaWxlKSkgewogICAgICAgICAgICAgICAgdG91Y2goJGhscGZp bGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRmZCA9IGZvcGVuKCRobHBmaWxlLCAi dyIpOwogICAgICAgICAgICBmd3JpdGUoJGZkLCAkb3V0WzBdKTsKICAgICAgICAgICAgZmNs b3NlKCRmZCk7CiAgICAgICAgfQoKICAgICAgICAvLyBSZXBsYWNlIHRoZSB0cmlwbGUgJy0t LScgaW4gdGhlIGRlbGltaXRlcnMgc28gdGhlIGhlbHAgZmlsZSBjYW4gdmFsaWRhdGUKICAg ICAgICAkc3RhcnRfZGxtID0gc3RyX3JlcGxhY2UoJy0tLScsICcqKionLCAkc3RhcnRfZGxt KTsKICAgICAgICAkZW5kX2RsbSA9IHN0cl9yZXBsYWNlKCctLS0nLCAnKioqJywgJGVuZF9k bG0pOwoKICAgICAgICAkb3V0WzFdID0gKCRjc3MpID8gIlxuJHN0YXJ0X2RsbVxuJGNzc1xu JGVuZF9kbG1cbiIgOiAnJzsKCiAgICAgICAgcmV0dXJuIHN1YnN0cihpbXBsb2RlKCcnLCAk b3V0KSwgMCwgJHRoaXMtPmllZF9wbHVnaW5fZ2xvYmFsc1snc2l6ZV9oZWxwJ10rJHRoaXMt PmllZF9wbHVnaW5fZ2xvYmFsc1snc2l6ZV9jc3MnXSk7CiAgICB9CgogICAgLyoqCiAgICAg KiBJbmplY3QgYW55IG5lY2Vzc2FyeSBqYXZhc2NyaXB0IG9uIHRoZSBwYWdlIGZvciBjb2Rl IGhlbHBlcnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbnNlcnRfZWRpdG9ycygp CiAgICB7CiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgJGVkID0gYXJyYXkoKTsK ICAgICAgICAkY2VkID0gZ2V0X3ByZWYoJ2llZF9wbHVnaW5fZWRpdG9yJyk7CiAgICAgICAg JGhlZCA9IGdldF9wcmVmKCdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yJyk7CiAgICAgICAgJGNv cCA9IGdldF9wcmVmKCdpZWRfcGx1Z2luX2VkaXRvcl9vcHRpb25zJyk7CiAgICAgICAgJGhv cCA9IGdldF9wcmVmKCdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX29wdGlvbnMnKTsKICAgICAg ICAkZWRbJGNlZF0gPSBnZXRfcHJlZignaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCcpOwogICAg ICAgICRlZFskaGVkXSA9IGdldF9wcmVmKCdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgn KTsKCiAgICAgICAgJGNvcCA9ICRjb3AgPyAnLCcuJGNvcCA6ICcnOwogICAgICAgICRob3Ag PSAkaG9wID8gJywnLiRob3AgOiAnJzsKCiAgICAgICAgZm9yZWFjaCAoJGVkIGFzICRlZGl0 b3IgPT4gJGVkaXRvcl9sb2NzKSB7CiAgICAgICAgICAgICRqc29wID0gYXJyYXkoKTsKICAg ICAgICAgICAgJGxvY3MgPSBkb19saXN0KCRlZGl0b3JfbG9jcyk7CiAgICAgICAgICAgIGZv cmVhY2ggKCRsb2NzIGFzICRsb2MpIHsKICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJGxv YywgJ2NzczonKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAkanNvcFtdID0g JzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iJy5zdWJzdHIoJGxvYywgNCkuJyI+JzsK ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGpzb3BbXSA9 ICc8c2NyaXB0IHR5cGU9ImphdmFzY3JpcHQiIHNyYz0iJy4kbG9jLiciPjwvc2NyaXB0Pic7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRqc29wID0g aW1wbG9kZShuLCAkanNvcCk7CgogICAgICAgICAgICBzd2l0Y2ggKCRlZGl0b3IpIHsKICAg ICAgICAgICAgICAgIGNhc2UgInRpbnlfbWNlIjoKICAgICAgICAgICAgICAgICAgICAkb3V0 W10gPSA8PDxFT0pTCnskanNvcH0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgp0 aW55TUNFLmluaXQoewogICAgbW9kZSA6ICJzcGVjaWZpY190ZXh0YXJlYXMiLAogICAgZWRp dG9yX3NlbGVjdG9yIDogIm1jZUVkaXRvciIKICAgIHskaG9wfQp9KTsKPC9zY3JpcHQ+OwpF T0pTOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJlZGl0 X2FyZWEiOgogICAgICAgICAgICAgICAgICAgICRvdXRbXSA9IDw8PEVPSlMKeyRqc29wfQo8 c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vIGluaXRpYWxpc2F0aW9uCmVkaXRB cmVhTG9hZGVyLmluaXQoewogICAgaWQ6ICJwbHVnaW5fZWRpdG9yIiwKICAgIHN5bnRheDog InBocCIKICAgIHskY29wfQp9KTsKPC9zY3JpcHQ+CkVPSlM7CiAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImNvZGVtaXJyb3IiOgogICAgICAgICAgICAg ICAgICAgICRvdXRbXSA9IDw8PEVPSlMKeyRqc29wfQo8c2NyaXB0IHR5cGU9InRleHQvamF2 YXNjcmlwdCI+Cm15VGV4dEFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGx1Z2lu X2VkaXRvciIpOwp2YXIgaWVkX3BjX2VkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVh KG15VGV4dEFyZWEsIHsKICAgIHZhbHVlOiBteVRleHRBcmVhLnZhbHVlCiAgICB7JGNvcH0K fSk7Cjwvc2NyaXB0PgpFT0pTOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICBjYXNlICJjb2RlcHJlc3MiOgogICAgICAgICAgICAgICAgICAgICRvdXRbXSA9ICRq c29wOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9Cgog ICAgICAgIHJldHVybiBpbXBsb2RlKCJcbiIsICRvdXQpOwogICAgfQoKICAgIC8qKgogICAg ICogU2hvdyBwbHVnaW4gaGVscCBkb2N1bWVudGF0aW9uLgogICAgICoKICAgICAqIElmIHJh dywgd2lsbCBUZXh0aWxlIGZpcnN0LgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRt ZXNzYWdlIFtkZXNjcmlwdGlvbl0KICAgICAqIEByZXR1cm4gW3R5cGVdICAgICAgICAgIFtk ZXNjcmlwdGlvbl0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhlbHBfdmlld2VyKCRt ZXNzYWdlID0gJycpCiAgICB7CiAgICAgICAgaWYgKGdwcygnbmFtZScpKSB7CiAgICAgICAg ICAgICRuYW1lID0gZ3BzKCduYW1lJyk7CiAgICAgICAgICAgICRoZWxwID0gKCRuYW1lKSA/ IGZldGNoKCdoZWxwJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwogICAgICAg ICAgICBsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/ICR0aGlzLT5leHRyYWN0X2h1bmso JGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5KCcnLCRoZWxwKTsKICAg ICAgICB9IGVsc2VpZiAoZ3BzKCdmaWxlbmFtZScpKSB7CiAgICAgICAgICAgICRwbHVnaW4g PSAkdGhpcy0+cmVhZF9maWxlKGdldF9wcmVmKCdwbHVnaW5fY2FjaGVfZGlyJykuRFMuZ3Bz KCdmaWxlbmFtZScpKTsKICAgICAgICAgICAgZXh0cmFjdCgkcGx1Z2luKTsKICAgICAgICB9 CgogICAgICAgICRvdXQgPSAnJzsKICAgICAgICBpZiAoZW1wdHkoJGhlbHApKSB7CiAgICAg ICAgICAgICRvdXQgPSBnVHh0KCdpZWRfcGx1Z2luX2hlbHBfbm90X2F2YWlsYWJsZScpOwog ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3Nz KSA9ICR0aGlzLT5tYWtlX21hcmtlcnMoIkNTUyIsICR0aGlzLT5pZWRfcGx1Z2luX2dsb2Jh bHNbJ2Nzc19zdGFydCddLCAkdGhpcy0+aWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10p OwogICAgICAgICAgICAkb3V0ID0gJHRoaXMtPnRleHRpbGUoJG5hbWUsICRoZWxwLCAkY3Nz LCAkc3RhcnRfY3NzLCAkZW5kX2Nzcyk7CiAgICAgICAgfQoKICAgICAgICBwYWdldG9wKGdU eHQoJ2llZF9wbHVnaW5fdmlld19oZWxwJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKSwg JG1lc3NhZ2UpOwogICAgICAgIGVjaG8gbi4gJzxkaXYgaWQ9InBsdWdpbl9jb250YWluZXIi IGNsYXNzPSJ0eHAtY29udGFpbmVyIHR4cC12aWV3Ij4nLgogICAgICAgICAgICBuLiAnPGRp diBjbGFzcz0idGV4dC1jb2x1bW4iPicgLiAkb3V0IC4gJzwvZGl2PicuCiAgICAgICAgICAg IG4uICc8L2Rpdj4nOwogICAgfQoKICAgIC8qKgogICAgICogV3JhcCB0aGUgcGFzc2VkIHdp ZGdldCB3aXRoIHN0YW5kYXJkIG1hcmt1cC4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmlu ZyAkd2lkZ2V0IFRoZSB3aWRnZXQgdG8gd3JhcAogICAgICogQHBhcmFtICBzdHJpbmcgJGNs YXNzICBUaGUgQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSB3cmFwcGVyCiAgICAgKiBAcmV0 dXJuIHN0cmluZyAgICAgICAgIEhUTUwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdy YXBfd2lkZ2V0KCR3aWRnZXQsICRjbGFzcyA9ICd0eHAtZm9ybS1maWVsZC12YWx1ZScpCiAg ICB7CiAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSInIC4gJGNsYXNzIC4gJyI+Jy4kd2lk Z2V0Lic8L2Rpdj4nOwogICAgfQoKICAgIC8qKgogICAgICogUHJlZmVyZW5jZXMgc3R1YiB3 aXRoIGNvcnJlY3Qgc2lnbmF0dXJlIGZvciBsaWZlY3ljbGUgY2FsbGJhY2suCiAgICAgKgog ICAgICogQHBhcmFtICBzdHJpbmcgJGV2dCBUZXh0cGF0dGVybiBldmVudAogICAgICogQHBh cmFtICBzdHJpbmcgJHN0cCBUZXh0cGF0dGVybiBzdGVwIChhY3Rpb24pCiAgICAgKi8KICAg IHB1YmxpYyBmdW5jdGlvbiBzZXR1cCgkZXZ0ID0gJycsICRzdHAgPSAnJykKICAgIHsKICAg ICAgICAkdGhpcy0+cHJlZnMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIERpc3BsYXkgdGhl IHNldHVwIC8gcHJlZnMgcGFuZWwuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJG1l c3NhZ2UgQW55IGZlZWRiYWNrIGVycm9yIC8gaW5mbyBtZXNzYWdlIHRvIGRpc3BseQogICAg ICogQHJldHVybiBzdHJpbmcgICAgICAgICAgSFRNTAogICAgICovCiAgICBwdWJsaWMgZnVu Y3Rpb24gcHJlZnMoJG1lc3NhZ2UgPSAnJykKICAgIHsKICAgICAgICByZXF1aXJlX3ByaXZz KCdwbHVnaW5fcHJlZnMuJy4kdGhpcy0+aWVkX3BjX2V2ZW50KTsKCiAgICAgICAgaWYgKHBz KCdpZWRfcGx1Z2luX3ByZWZfc2F2ZScpKSB7CiAgICAgICAgICAgICR0aGlzLT5wcmVmc191 cGRhdGUoKTsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBnVHh0KCdwcmVmZXJlbmNlc19zYXZl ZCcpOwogICAgICAgIH0KCiAgICAgICAgJGllZF9wbHVnaW5fcHJlZnMgPSAkdGhpcy0+Z2V0 X3ByZWZzKCk7CgogICAgICAgIHBhZ2V0b3AoZ1R4dCgnaWVkX3BsdWdpbl9sYmxfc2V0dXAn KSwgJG1lc3NhZ2UpOwoKICAgICAgICAkYnRuU2F2ZSA9IGZJbnB1dCgnc3VibWl0JywgJ3N1 Ym1pdCcsIGdUeHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKTsKCiAgICAgICAgZWNobyAnPGRpdiBj bGFzcz0idHhwLWxheW91dCI+JwogICAgICAgICAgICAubi4gJzxkaXYgY2xhc3M9InR4cC1s YXlvdXQtMmNvbCI+JwogICAgICAgICAgICAubi4gJzxoMSBjbGFzcz0idHhwLWhlYWRpbmci PicgLiBnVHh0KCdpZWRfcGx1Z2luX2xibF9zZXR1cCcpIC4gJzwvaDE+JwogICAgICAgICAg ICAubi4gJzwvZGl2PicKICAgICAgICAgICAgLm4uICc8ZGl2IGNsYXNzPSJ0eHAtbGF5b3V0 LTJjb2wiPicKICAgICAgICAgICAgLm4uIHNMaW5rKCR0aGlzLT5pZWRfcGNfZXZlbnQsICcn LCBnVHh0KCdpZWRfcGx1Z2luX2xpc3QnKSwgJ2llZF9wbHVnaW5fbGluaycpCiAgICAgICAg ICAgIC5uLiAnPC9kaXY+JwogICAgICAgICAgICAubi4gc2NyaXB0X2pzKDw8PEVPSlMKdmFy IGllZF9wbHVnaW5fcGF0aF9yZSA9IG5ldyBSZWdFeHAoIl4uKlsvXFxdIiwgImciKQpmdW5j dGlvbiBpZWRfcGx1Z2luX3ByZWZzd2FwKHNlbElELCBzZWxWYWx1ZSkKewogICAgdmFyIGlk ID0gc2VsSUQrJ19wYXRoJzsKICAgIHZhciBudXZhbCA9ICgoYmFzZW5hbWUoJCgiIyIraWQp LnZhbCgpKSA9PSBzZWxWYWx1ZSkgPyAkKCIjIitpZCkudmFsKCkgOiBkaXJuYW1lKCQoIiMi K2lkKS52YWwoKSkrc2VsVmFsdWUpOwoKICAgIGlmICgkKCIjIitzZWxJRClbMF0uc2VsZWN0 ZWRJbmRleCA9PSAwKSB7CiAgICAgICAgJCgiIyIraWQpLmF0dHIoImRpc2FibGVkIiwgdHJ1 ZSk7CiAgICB9IGVsc2UgewogICAgICAgICQoIiMiK2lkKS5hdHRyKCJkaXNhYmxlZCIsIGZh bHNlKTsKICAgICAgICAkKCIjIitpZCkudmFsKG51dmFsKTsKICAgIH0KfQpmdW5jdGlvbiBi YXNlbmFtZShwYXRoLCBzdWZmaXgpCnsKICAgIHJldHVybiBwYXRoLnJlcGxhY2UoaWVkX3Bs dWdpbl9wYXRoX3JlLCAnJyk7Cn0KZnVuY3Rpb24gZGlybmFtZShwYXRoKQp7CiAgICByZXR1 cm4gcGF0aC5tYXRjaChpZWRfcGx1Z2luX3BhdGhfcmUpOwp9CmpRdWVyeShmdW5jdGlvbiAo KSB7CiAgICBqUXVlcnkoIi5pZWRfcGx1Z2luX3NldHVwIHNlbGVjdCBvcHRpb246c2VsZWN0 ZWQiKS5lYWNoKGZ1bmN0aW9uIChvYmopIHsKICAgICAgICB2YXIgaXRlbSA9IGpRdWVyeSh0 aGlzKTsKICAgICAgICBpZWRfcGx1Z2luX3ByZWZzd2FwKGl0ZW0ucGFyZW50KCkuYXR0cign aWQnKSwgaXRlbS52YWwoKSk7CiAgICB9KTsKfSk7CkVPSlMKICAgICAgICAgICAgKTsKCiAg ICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgJG91dFtdID0gbi4nPGRpdiBjbGFzcz0i dHhwLWxheW91dC0xY29sIj4nOwogICAgICAgICRvdXRbXSA9ICc8Zm9ybSBuYW1lPSJpZWRf cGNfcHJlZnMiIGlkPSJpZWRfcGNfcHJlZnMiIGNsYXNzPSJ0eHAtcHJlZnMtZ3JvdXAiIGFj dGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBvc3QiPic7CiAgICAgICAgJG91dFtdID0gZUlu cHV0KCR0aGlzLT5pZWRfcGNfZXZlbnQpLnNJbnB1dCgncHJlZnMnKTsKCiAgICAgICAgJGxh c3RfZ3JwID0gJyc7CgogICAgICAgIGZvcmVhY2ggKCRpZWRfcGx1Z2luX3ByZWZzIGFzICRp ZHggPT4gJHByZWZvYmopIHsKICAgICAgICAgICAgaWYgKCRsYXN0X2dycCAhPSAkcHJlZm9i alsnZ3JvdXAnXSkgewogICAgICAgICAgICAgICAgJG91dFtdID0gaGVkKGdUeHQoJHByZWZv YmpbJ2dyb3VwJ10pLCAyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbGFzdF9ncnAg PSAkcHJlZm9ialsnZ3JvdXAnXTsKICAgICAgICAgICAgJHN1Ym91dCA9IGFycmF5KCk7CiAg ICAgICAgICAgICRsYWJlbCA9ICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC1sYWJlbCI+ JwogICAgICAgICAgICAgICAgICAgIC4nPGxhYmVsPicuZ1R4dCgkaWR4KS4nPC9sYWJlbD4n CiAgICAgICAgICAgICAgICAgICAgLic8L2Rpdj4nOwogICAgICAgICAgICAkdmFsID0gZ2V0 X3ByZWYoJGlkeCwgJHByZWZvYmpbJ2RlZmF1bHQnXSwgMSk7CiAgICAgICAgICAgICR2aXMg PSAoaXNzZXQoJHByZWZvYmpbJ3Zpc2libGUnXSkgJiYgISRwcmVmb2JqWyd2aXNpYmxlJ10p ID8gJ2VtcHR5JyA6ICd0eHAtZm9ybS1maWVsZCc7CiAgICAgICAgICAgIHN3aXRjaCAoJHBy ZWZvYmpbJ2h0bWwnXSkgewogICAgICAgICAgICAgICAgY2FzZSAndGV4dF9pbnB1dCc6CiAg ICAgICAgICAgICAgICAgICAgJHN1Ym91dFtdID0gJHRoaXMtPndyYXBfd2lkZ2V0KGZJbnB1 dCgndGV4dCcsICRpZHgsICR2YWwsICcnLCAnJywgJycsIElOUFVUX1JFR1VMQVIsICcnLCAk aWR4KSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3Rl eHRhcmVhJzoKICAgICAgICAgICAgICAgICAgICAkc3Vib3V0W10gPSAkdGhpcy0+d3JhcF93 aWRnZXQodGV4dF9hcmVhKCRpZHgsICcnLCAnJywgJHZhbCwgJGlkeCkpOwogICAgICAgICAg ICAgICAgICAgICR2aXMgPSAoaXNzZXQoJHByZWZvYmpbJ3Zpc2libGUnXSkgJiYgISRwcmVm b2JqWyd2aXNpYmxlJ10pID8gJ2VtcHR5JyA6ICd0eHAtZm9ybS1maWVsZC10ZXh0YXJlYSc7 CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3llc25vcmFk aW8nOgogICAgICAgICAgICAgICAgICAgICRzdWJvdXRbXSA9ICR0aGlzLT53cmFwX3dpZGdl dCh5ZXNub1JhZGlvKCRpZHgsICR2YWwpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgY2FzZSAncmFkaW9zZXQnOgogICAgICAgICAgICAgICAgICAgICRzdWJv dXRbXSA9ICR0aGlzLT53cmFwX3dpZGdldChyYWRpb1NldCgkcHJlZm9ialsnY29udGVudCdd LCAkaWR4LCAkdmFsKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg IGNhc2UgJ2NoZWNrYm94c2V0JzoKICAgICAgICAgICAgICAgICAgICAkdmFscyA9IGRvX2xp c3QoJHZhbCk7CiAgICAgICAgICAgICAgICAgICAgJGxjbG91dCA9IGFycmF5KCk7CiAgICAg ICAgICAgICAgICAgICAgJGNiX2NvdW50ID0gMDsKCiAgICAgICAgICAgICAgICAgICAgZm9y ZWFjaCAoJHByZWZvYmpbJ2NvbnRlbnQnXSBhcyAkY2IgPT4gJHZhbCkgewogICAgICAgICAg ICAgICAgICAgICAgICAkY2hlY2tlZCA9IGluX2FycmF5KCRjYiwgJHZhbHMpOwogICAgICAg ICAgICAgICAgICAgICAgICAkY2JJZCA9IHR4cHNwZWNpYWxjaGFycygkaWR4LictJy4kY2Jf Y291bnQpOwogICAgICAgICAgICAgICAgICAgICAgICAkbGNsb3V0W10gPSBjaGVja2JveCgk aWR4IC4gJ1tdJywgJGNiLCAkY2hlY2tlZCwgJycsICRjYklkKSAuIG4gLiAnPGxhYmVsIGZv cj0iJyAuICRjYklkIC4gJyI+JyAuIGdUeHQoJHZhbCkgLiAnPC9sYWJlbD4nOwogICAgICAg ICAgICAgICAgICAgICAgICAkY2JfY291bnQrKzsKICAgICAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICAgICAgICRzdWJvdXRbXSA9ICR0aGlzLT53cmFwX3dpZGdldChpbXBs b2RlKG4sICRsY2xvdXQpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgY2FzZSAnc2VsZWN0bGlzdCc6CiAgICAgICAgICAgICAgICAgICAgJHN1Ym91dFtdID0g JHRoaXMtPndyYXBfd2lkZ2V0KHNlbGVjdElucHV0KCRpZHgsICRwcmVmb2JqWydjb250ZW50 J11bMF0sICR2YWwsICRwcmVmb2JqWydjb250ZW50J11bMV0pKTsKICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBp ZiAoaXNfY2FsbGFibGUoJHByZWZvYmpbJ2h0bWwnXSkpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgJHN1Ym91dFtdID0gJHRoaXMtPndyYXBfd2lkZ2V0KCRwcmVmb2JqWydodG1sJ10o JGlkeCwgJHZhbCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvdXRbXSA9IHRhZygkbGFiZWwgLiBu LmltcGxvZGUobiAsJHN1Ym91dCksICdkaXYnLCAoJHZpcyA/ICcgY2xhc3M9IicuJHZpcy4n IicgOiAnJykpOwogICAgICAgIH0KICAgICAgICAkb3V0W10gPSBncmFmKGZJbnB1dCgnc3Vi bWl0JywgJ2llZF9wbHVnaW5fcHJlZl9zYXZlJywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcp LCBhcnJheSgnY2xhc3MnID0+ICd0eHAtc2F2ZScpKTsKICAgICAgICAkb3V0W10gPSB0SW5w dXQoKTsKICAgICAgICAkb3V0W10gPSAnPC9mb3JtPjwvZGl2PjwvZGl2Pic7CgogICAgICAg IGVjaG8gaW1wbG9kZShuLCAkb3V0KTsKICAgIH0KCiAgICAvKioKICAgICAqIFNhdmUgcGx1 Z2luIHByZWZzIGZyb20gc2V0dXAgcGFuZWwuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlv biBwcmVmc191cGRhdGUoKQogICAgewogICAgICAgIGdsb2JhbCAkcHJlZnM7CgogICAgICAg ICRpZWRfcGx1Z2luX3ByZWZzID0gJHRoaXMtPmdldF9wcmVmcygpOwogICAgICAgICRzYXZl ZCA9IHBzKCdpZWRfcGx1Z2luX3ByZWZfc2F2ZScpOwoKICAgICAgICAvLyBMb29wIHRocm91 Z2ggZWFjaCBwbHVnaW4gc2V0dGluZyBhbmQgbWFrZSBzdXJlIGl0J3MgaW4gdGhlIHByZWZz IHRhYmxlLCBhcyBmb2xsb3dzOgogICAgICAgIC8vIDEpIGlmIHRoZSB2YWx1ZSBoYXMgYmVl biBQT1NUZWQgZnJvbSB0aGUgcHJlZnMgcGFuZWwsIHNldCB0aGUgcGFzc2VkIHZhbHVlCiAg ICAgICAgLy8gMikgaWYgdGhlIHZhbHVlIGV4aXN0cyBpbiB0aGUgcHJlZnMgKGkuZS4gcnVu IG9uIHVwZ3JhZGUpLCBzZXQgdGhlIGV4aXN0aW5nIHZhbHVlCiAgICAgICAgLy8gMykgaWYg bmVpdGhlciBleGlzdCwgc2V0IHRoZSBwbHVnaW4gZGVmYXVsdCB2YWx1ZQogICAgICAgIGZv cmVhY2ggKCRpZWRfcGx1Z2luX3ByZWZzIGFzICRrZXkgPT4gJHByZWZvYmopIHsKICAgICAg ICAgICAgJHZhbCA9ICgkc2F2ZWQgfHwgaXNzZXQoJF9QT1NUWyRrZXldKSkgPyBwcygka2V5 KSA6ICgoaXNzZXQoJHByZWZzWyRrZXldKSkgPyAkcHJlZnNbJGtleV0gOiAkcHJlZm9ialsn ZGVmYXVsdCddKTsKICAgICAgICAgICAgJHZhbCA9IChpc19hcnJheSgkdmFsKSkgPyBpbXBs b2RlKCcsICcsICR2YWwpIDogJHZhbDsKICAgICAgICAgICAgc2V0X3ByZWYoJGtleSwgJHZh bCwgJ2llZF9wbHVnaW4nLCAkcHJlZm9ialsndHlwZSddLCAkcHJlZm9ialsnaHRtbCddLCAk cHJlZm9ialsncG9zaXRpb24nXSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICog RGVsZXRlIHBsdWdpbiBwcmVmcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludGVnZXIgJHNo b3dwYW5lIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgcGFuZWwgYWZ0ZXJ3YXJkcwogICAgICov CiAgICBwdWJsaWMgZnVuY3Rpb24gcHJlZnNfcmVtb3ZlKCRzaG93cGFuZSA9IDEpCiAgICB7 CiAgICAgICAgc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsICJuYW1lIGxpa2UgJ2llZF9wbHVn aW5fJSciKTsKCiAgICAgICAgaWYgKCRzaG93cGFuZSkgewogICAgICAgICAgICAkbWVzc2Fn ZSA9IGdUeHQoJ2llZF9wbHVnaW5fcHJlZnNfZGVsZXRlZCcpOwogICAgICAgICAgICAkdGhp cy0+cHJlZnMoJG1lc3NhZ2UpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdl bmVyYXRlIGxpc3Qgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcy4KICAgICAqCiAgICAgKiBAcGFy YW0gIHN0cmluZyAkZmxhdm91ciBJZiAnaW5zdGFsbGVkJyB0aGVuIHNob3cgb25seSB0aG9z ZSBhdmFpbGFibGUsIGVsc2UgJ2FsbCcKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwog ICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsYW5nX2xpc3QoJGZsYXZvdXIgPSAnaW5zdGFs bGVkJykKICAgIHsKICAgICAgICAkaWVkX2xhbmdzID0gYXJyYXkoKTsKCiAgICAgICAgaWYg KCRmbGF2b3VyID09PSAnaW5zdGFsbGVkJykgewogICAgICAgICAgICAvLyBTZWxmLWpvaW4g dG8gZ2V0IGFsbCB0aGUgaW5zdGFsbGVkIGxhbmdzIGFuZCBsYW5ndWFnZSBzdHJpbmdzIGlu IG9uZSBzdGVwLgovLyAgICAgICAgICAgICRpbnN0YWxsZWRfbGFuZ3MgPSBzYWZlX3F1ZXJ5 KCdzZWxlY3QgdDEubGFuZywgdDIuZGF0YSBmcm9tICcuUEZYLid0eHBfbGFuZyBhcyB0MSwg Jy5QRlguJ3R4cF9sYW5nIGFzIHQyIFdIRVJFIHQxLmxhbmcgPSB0Mi5uYW1lIEdST1VQIEJZ IGxhbmcnKTsKICAgICAgICAgICAgJGllZF9sYW5ncyA9IHNhZmVfY29sdW1uKCdsYW5nJywg J3R4cF9sYW5nJywgJzE9MSBHUk9VUCBCWSBsYW5nJyk7CiAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgLy8gR3JhYiBhbGwgYXZhaWxhYmxlIGxhbmdzIGZyb20gdGhlIFJQQyBzZXJ2 ZXIuCiAgICAgICAgICAgIHJlcXVpcmVfb25jZSB0eHBhdGguJy9saWIvSVhSQ2xhc3MucGhw JzsKCiAgICAgICAgICAgICRjbGllbnQgPSBuZXcgSVhSX0NsaWVudChSUENfU0VSVkVSKTsK CiAgICAgICAgICAgIC8vIEdldCBpdGVtcyBmcm9tIFJQQy4KICAgICAgICAgICAgQHNldF90 aW1lX2xpbWl0KDUpOwoKICAgICAgICAgICAgaWYgKCRjbGllbnQtPnF1ZXJ5KCd0dXBzLmxp c3RMYW5ndWFnZXMnLCBnZXRfcHJlZignYmxvZ191aWQnKSkpIHsKICAgICAgICAgICAgICAg ICRyZXNwb25zZSA9ICRjbGllbnQtPmdldFJlc3BvbnNlKCk7CgogICAgICAgICAgICAgICAg Zm9yZWFjaCAoJHJlc3BvbnNlIGFzICRsYW5ndWFnZSkgewogICAgICAgICAgICAgICAgICAg ICRpZWRfbGFuZ3NbXSA9ICRsYW5ndWFnZVsnbGFuZ3VhZ2UnXTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQnVpbGQgdGhlIHNlbGVj dCBsaXN0IGFycmF5LgogICAgICAgICRsYW5nbGlzdCA9IGFycmF5KCk7CgogICAgICAgIGZv cmVhY2ggKCRpZWRfbGFuZ3MgYXMgJGllZF9sYW5nKSB7CiAgICAgICAgICAgICRsYW5nbGlz dFskaWVkX2xhbmddID0gZ1R4dCgkaWVkX2xhbmcpOwogICAgICAgIH0KCiAgICAgICAgcmV0 dXJuICRsYW5nbGlzdDsKICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkIHRleHRwYWNrIGZy b20gc3RyaW5ncyBpbiB0aGUgZGF0YWJhc2UuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJp bmcgICRuYW1lICAgICAgUGx1Z2luIG5hbWUKICAgICAqIEBwYXJhbSAgaW50ZWdlciAkZm9y Y2VfYWxsIFdoZXRoZXIgdG8gYnVpbGQgZm9yIHRoZSBjdXJyZW50IGxhbmd1ZSAoMCkgb3Ig YWxsIGluc3RhbGxlZCBsYW5ndWFnZXMgKDEpCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAg ICAgICAgICBUaGUgVGV4dHBhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRleHRw YWNrX2J1aWxkKCRuYW1lLCAkZm9yY2VfYWxsID0gMCkKICAgIHsKICAgICAgICAkZmV0Y2hf bGFuZyA9IG51bGw7CgogICAgICAgIGlmICgkZm9yY2VfYWxsID09PSAwKSB7CiAgICAgICAg ICAgICRmZXRjaF9sYW5nID0gZ3BzKCdsYW5nJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAo ISRmZXRjaF9sYW5nKSB7CiAgICAgICAgICAgICRmZXRjaF9sYW5nID0gKCRmb3JjZV9hbGwg PT09IDEpCiAgICAgICAgICAgICAgICA/IGltcGxvZGUoJywnLCBhcnJheV9rZXlzKHNlbGY6 OmxhbmdfbGlzdCgnaW5zdGFsbGVkJykpKQogICAgICAgICAgICAgICAgOiBnZXRfcHJlZign aWVkX3BsdWdpbl9sYW5nX3NlbGVjdGVkJywgJycpOwogICAgICAgIH0KCiAgICAgICAgJHRw b3V0ID0gYXJyYXkoKTsKCiAgICAgICAgaWYgKCRmZXRjaF9sYW5nKSB7CiAgICAgICAgICAg ICRjaG9zZW5fbGFuZyA9IGdldF9wcmVmKCdpZWRfcGx1Z2luX2xhbmdfZGVmYXVsdCcsICcn KTsKCiAgICAgICAgICAgIC8vIEd1YXJkIGFnYWluc3Qgc2l0dWF0aW9ucyB3aGVuIHRoZSBj aG9zZW4gZGVmYXVsdCBsYW5nIGlzICdhbnknLgogICAgICAgICAgICAkZGZsdF9sYW5nID0g KCRjaG9zZW5fbGFuZyA9PT0gJycpID8gZ2V0X3ByZWYoJ2xhbmd1YWdlJykgOiAkY2hvc2Vu X2xhbmc7CgogICAgICAgICAgICAkdHBfcGZ4ID0gdW5zZXJpYWxpemUoZ2V0X3ByZWYoJ2ll ZF9wbHVnaW5fdHBfcHJlZml4JywgJycsIDEpKTsKICAgICAgICAgICAgJHRwX3BmeCA9IGlz c2V0KCR0cF9wZnhbJG5hbWVdKSA/ICR0cF9wZnhbJG5hbWVdIDogJyc7CiAgICAgICAgICAg ICR0cF9yb3dzID0gaWVkX3BsdWdpbl90ZXh0cGFja19ncmFiKCRmZXRjaF9sYW5nLCAkdHBf cGZ4KTsKCiAgICAgICAgICAgIGlmICgkdHBfcm93cykgewogICAgICAgICAgICAgICAgJGN0 ciA9IDA7CiAgICAgICAgICAgICAgICAkcHJldmxhbmcgPSAnJzsKCiAgICAgICAgICAgICAg ICAvLyBHbyB0aHJvdWdoIGFsbCB0aGUgbGFuZ3VhZ2VzIGFuZCBwdXQgdGhlIGRlZmF1bHQg bGFuZ3VhZ2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBhcnJheS4KICAgICAgICAgICAgICAgIGZv cmVhY2ggKCR0cF9yb3dzIGFzICRyb3cpIHsKICAgICAgICAgICAgICAgICAgICAvLyBBZGQg dGhlIGV2ZW50IG1hcmtlcgogICAgICAgICAgICAgICAgICAgICR0aGVFdmVudCA9IGluX2Fy cmF5KCRyb3dbJ2V2ZW50J10sIGFycmF5KCdwdWJsaWMnLCAnY29tbW9uJykpID8gJHJvd1sn ZXZlbnQnXSA6ICR0cF9wZng7CgogICAgICAgICAgICAgICAgICAgIGlmICgkcHJldmxhbmcg IT0gJHJvd1snbGFuZyddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjdHIrKzsKICAg ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRpZHggPSAoJHJvd1sn bGFuZyddID09ICRkZmx0X2xhbmcpID8gMCA6ICRjdHI7CiAgICAgICAgICAgICAgICAgICAg JHRwbGFuZ1skaWR4XVskdGhlRXZlbnRdWyRyb3dbJ2xhbmcnXV1bJHJvd1snbmFtZSddXSA9 ICRyb3dbJ2RhdGEnXTsKICAgICAgICAgICAgICAgICAgICAkcHJldmxhbmcgPSAkcm93Wyds YW5nJ107CiAgICAgICAgICAgICAgICAgICAgJHByZXZldmVudCA9ICRyb3dbJ2V2ZW50J107 CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGRlZmF1 bHQgbGFuZ3VhZ2UgaXMgYWN0dWFsbHkgZmlyc3QuCiAgICAgICAgICAgICAgICBrc29ydCgk dHBsYW5nKTsKCiAgICAgICAgICAgICAgICAvLyBCdWlsZCB0aGUgZmluYWwgdGV4dHBhY2sg YXJyYXkgd2l0aCBsYW5ndWFnZSBtYXJrZXJzLgogICAgICAgICAgICAgICAgLy8gTm90ZSB0 aGUgbWFya2VyIGZvciB0aGUgZGVmYXVsdCBsYW5ndWFnZSBtYXkgKHNob3VsZCEpIGJlIG9t aXR0ZWQgaWYgdGhlIGF1dGhvciB3YW50cwogICAgICAgICAgICAgICAgLy8gdGhlIHN0cmlu Z3MgdG8gYmUgaW5zdGFsbGVkIHJlZ2FyZGxlc3Mgb2YgbGFuZ3VhZ2Ugb24gZGVzdGluYXRp b24gc2VydmVyLgogICAgICAgICAgICAgICAgLy8gSWYgYSBzcGVjaWZpYyBsYW5ndWFnZSBp cyBzZXQgYW5kIHRoZSB1c2VyIGRvZXMgbm90IGhhdmUgdGhhdCBsYW5ndWFnZQogICAgICAg ICAgICAgICAgLy8gaW5zdGFsbGVkLCB0aGUgc3RyaW5ncyB3b3VsZCBub3QgYmUgaW5zZXJ0 ZWQuCiAgICAgICAgICAgICAgICAkcHJldmV2ZW50ID0gJyc7CgogICAgICAgICAgICAgICAg Zm9yZWFjaCAoJHRwbGFuZyBhcyAkaWR4ID0+ICRsYW5nYmxvY2spIHsKICAgICAgICAgICAg ICAgICAgICBmb3JlYWNoICgkbGFuZ2Jsb2NrIGFzICRldiA9PiAkY29kZWJsb2NrKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgICR0cGhlYWRlciA9IGFycmF5KCk7CiAgICAgICAgICAg ICAgICAgICAgICAgICR0cHN0cmluZ3MgPSBhcnJheSgpOwoKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCRwcmV2ZXZlbnQgIT0gJGV2KSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAkdHBoZWFkZXJbXSA9ICcjQCcgLiAkZXY7CiAgICAgICAgICAgICAgICAgICAgICAg IH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb2RlYmxvY2sgYXMgJGNv ZGUgPT4gJGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGlkeCA9 PSAwICYmICRjaG9zZW5fbGFuZykgfHwgKCRpZHggPiAwKSkgewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICR0cGhlYWRlcltdID0gJyNAbGFuZ3VhZ2UgJyAuICRjb2RlOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZvcmVhY2ggKCRkYXRhIGFzICRrZXkgPT4gJHZhbCkgewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIERvbid0IG91dHB1dCBlbXB0eSBzdHJpbmdzLgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdmFsKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICR0cHN0cmluZ3NbXSA9ICRrZXkgLiAnID0+ICcgLiAkdmFs OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRwc3RyaW5n cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cG91dCA9IGFycmF5X21l cmdlKCR0cG91dCwgJHRwaGVhZGVyLCAkdHBzdHJpbmdzKTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAg ICAgcmV0dXJuIGltcGxvZGUobiwgJHRwb3V0KTsKICAgIH0KCiAgICAvKioKICAgICAqIFNl dCB0aGUgY3VycmVudCBUZXh0cGFjayBsYW5ndWFnZSBmcm9tIHdoaWNoIHRvIGRpc3BsYXkg c3RyaW5ncyBpbiB0aGUgaW50ZXJmYWNlLgogICAgICoKICAgICAqIFJlcXVpcmVzIFBPU1Qg dmFyaWFibGU6CiAgICAgKiAgcGFyYW0gIHN0cmluZyBpZWRfdHBfbGFuZ3NlbCAgVGhlIGxh bmd1YWdlIG5hbWUgdG8gc2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsYW5nX3Nl dCgpCiAgICB7CiAgICAgICAgJHNlbCA9IGRvU2xhc2goZ3BzKCdpZWRfdHBfbGFuZ3NlbCcp KTsKICAgICAgICBzZXRfcHJlZignaWVkX3BsdWdpbl9sYW5nX3NlbGVjdGVkJywgJHNlbCwg J2llZF9wbHVnaW4nLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnLCAwLCBQUkVGX1BSSVZB VEUpOwogICAgfQoKICAgIC8qKgogICAgICogU3RvcmUgdGhlIHBsdWdpbiB0ZXh0cGFjayBw cmVmaXguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGx1Z25hbWUgUGx1Z2luIG5h bWUgdG8gc3RvcmUgKGlmIG9taXR0ZWQsIHRyaWVzIEdFVC9QT1NUIGZvciAncGx1Z2luJykK ICAgICAqIEBwYXJhbSBzdHJpbmcgJHBmeCAgICAgIFByZWZpeCB0byBzdG9yZSAoaWYgb21p dHRlZCwgdHJpZXMgR0VUL1BPU1QgZm9yICdwcmVmaXgnKQogICAgICovCiAgICBwdWJsaWMg ZnVuY3Rpb24gc2V0X3RwX3ByZWZpeCgkcGx1Z25hbWUgPSAnJywgJHBmeCA9ICcnKQogICAg ewogICAgICAgICRwbHVnbmFtZSA9ICgkcGx1Z25hbWUpID8gJHBsdWduYW1lIDogZ3BzKCdw bHVnaW4nKTsKICAgICAgICAkcGZ4ID0gKCRwZngpID8gJHBmeCA6IGdwcygncHJlZml4Jyk7 CgogICAgICAgIGlmICgkcGZ4KSB7CiAgICAgICAgICAgICRjdXJyX3BmeCA9IHVuc2VyaWFs aXplKGdldF9wcmVmKCdpZWRfcGx1Z2luX3RwX3ByZWZpeCcpKTsKICAgICAgICAgICAgJGN1 cnJfcGZ4WyRwbHVnbmFtZV0gPSAkcGZ4OwogICAgICAgICAgICBzZXRfcHJlZignaWVkX3Bs dWdpbl90cF9wcmVmaXgnLCBzZXJpYWxpemUoJGN1cnJfcGZ4KSwgJ2llZF9wbHVnaW4nLCBQ UkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAg ICAgKiBBSkFYOiBSZXR1cm4gYSBUZXh0cGFjayBzdHJpbmcgZnJvbSBhICh0eXBlIDQgb3Ig NSkgcGx1Z2luIGdUeHQoKSBmdW5jdGlvbi9tZXRob2QuCiAgICAgKgogICAgICogR2l2ZW4g YSBmdW5jdGlvbiBuYW1lICh1c3VhbGx5ICdhYmNfcGx1Z2luX2dUeHQnKSBpdCBjYWxscyB0 aGUgZnVuY3Rpb24KICAgICAqIHRvIGZldGNoIHRoZSBnaXZlbiBzdHJpbmcgZnJvbSB0aGUg cGx1Z2luLiBCeSBjYWxsaW5nIHRoaXMgcmVwZWF0ZWRseQogICAgICogb3IgZWFjaCBzdHJp bmcsIGFuIGVudGlyZSBUZXh0cGFjayBjYW4gYmUgYnVpbHQgZnJvbSBzdHJpbmdzIHRoYXQg d2VyZQogICAgICogcHJldmlvdXNseSBoYXJkLWNvZGVkIGluIG9sZCBwbHVnaW5zLgogICAg ICoKICAgICAqIE5vdGUgdGhlIGRlc3RpbmF0aW9uIHBsdWdpbiBNVVNUIGJlIG9mIHR5cGUg NCBvciA1IGluIG9yZGVyIGZvciB0aGUKICAgICAqIGZ1bmN0aW9uIHRvIGJlIGNhbGxhYmxl IHNvIHlvdSBtYXkgaGF2ZSB0byAodGVtcG9yYXJpbHkpIGFsdGVyIHRoZQogICAgICogcGx1 Z2luIHR5cGUgYmVmb3JlIHVzaW5nIHRoaXMgZmVhdHVyZS4KICAgICAqCiAgICAgKiBSZXF1 aXJlcyBQT1NUIHZhcmlhYmxlczoKICAgICAqICBwYXJhbSAgc3RyaW5nIGllZF90cF9mbiAg VGhlIGZ1bmN0aW9uIHRvIGNhbGwKICAgICAqICBwYXJhbSAgc3RyaW5nIGllZF90cF9sYmwg VGhlIGxhbmd1YWdlIGxhYmVsIChrZXkpCiAgICAgKiBAcmV0dXJuIGFycmF5ICAgICAgICAg ICAgIEpTT04gc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHN0cmluZydzIHZhbHVlCiAgICAg KiBAdG9kbyBzYW5pdGl6ZSAkZm4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRleHRw YWNrX2xvYWQoKQogICAgewogICAgICAgICRmbiA9IGRvU2xhc2goZ3BzKCdpZWRfdHBfZm4n KSk7CiAgICAgICAgJGxibCA9IGRvU2xhc2goZ3BzKCdpZWRfdHBfbGJsJykpOwogICAgICAg ICRyZXQgPSAnJzsKCiAgICAgICAgJGZucGFydHMgPSBkb19saXN0KCRmbiwgJzo6Jyk7CiAg ICAgICAgaWYgKGNvdW50KCRmbnBhcnRzKSA9PSAyKSB7CiAgICAgICAgICAgIC8vIENhbGxh YmxlIGNsYXNzIC0+IG1ldGhvZAogICAgICAgICAgICAkZm9iaiA9IGFycmF5KCRmbnBhcnRz WzBdLCAkZm5wYXJ0c1sxXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGZvYmog PSAkZm5wYXJ0c1swXTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzX2NhbGxhYmxlKCRmb2Jq KSkgewogICAgICAgICAgICAkcmV0ID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJGZvYmosIGFy cmF5KCRsYmwpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkcmV0KSB7CiAgICAgICAgICAg IGVjaG8ganNvbl9lbmNvZGUoYXJyYXkoJ2llZF9wbHVnaW5fdHBfc3RyaW5nJyA9PiAkcmV0 KSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQUpBWDogRGVsZXRlIGEgVGV4 dHBhY2sgc3RyaW5nIGZyb20gdGhlIGRhdGFiYXNlLgogICAgICoKICAgICAqIFJlcXVpcmVz IFBPU1QgdmFyaWFibGU6CiAgICAgKiAgcGFyYW0gIHN0cmluZyBpZWRfdHBfbGJsIFRoZSBs YW5ndWFnZSBsYWJlbCAoa2V5KSB0byBkZWxldGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0 aW9uIHRleHRwYWNrX2RlbCgpCiAgICB7CiAgICAgICAgJGxibCA9IGRvU2xhc2goZ3BzKCdp ZWRfdHBfbGJsJykpOwoKICAgICAgICAkcmV0ID0gc2FmZV9kZWxldGUoJ3R4cF9sYW5nJywg Im5hbWU9JyRsYmwnIik7CiAgICB9CgogICAgLyoqCiAgICAgKiBBSkFYOiBzYXZlIGEgVGV4 dHBhY2sgc3RyaW5nIHRvIHRoZSBkYXRhYmFzZS4KICAgICAqCiAgICAgKiBSZXF1aXJlcyBQ T1NUIHZhcmlhYmxlczoKICAgICAqICBwYXJhbSAgc3RyaW5nIGllZF90cF9sYmwgVGhlIGxh bmd1YWdlIGxhYmVsIChrZXkpCiAgICAgKiAgcGFyYW0gIHN0cmluZyBpZWRfdHBfc3RyIFRo ZSBkYXRhIHZhbHVlIHRvIHN0b3JlCiAgICAgKiAgcGFyYW0gIHN0cmluZyBpZWRfdHBfbG5n IERlc2lyZWQgbGFuZ3VhZ2Ugb2Ygc3RyaW5nCiAgICAgKiAgcGFyYW0gIHN0cmluZyBpZWRf dHBfZXZ0IEV2ZW50IChncm91cCkgdGhhdCB0aGUgc3RyaW5nIGJlbG9uZ3MgaW4KICAgICAq LwogICAgcHVibGljIGZ1bmN0aW9uIHRleHRwYWNrX3NhdmUoKQogICAgewogICAgICAgIGds b2JhbCAkREI7CgogICAgICAgICRsYmwgPSBkb1NsYXNoKGdwcygnaWVkX3RwX2xibCcpKTsK ICAgICAgICAkc3RyID0gZG9TbGFzaChncHMoJ2llZF90cF9zdHInKSk7CiAgICAgICAgJGxu ZyA9IGRvU2xhc2goZ3BzKCdpZWRfdHBfbG5nJykpOwogICAgICAgICRldnQgPSBkb1NsYXNo KGdwcygnaWVkX3RwX2V2dCcpKTsKICAgICAgICAkb3duID0gZG9TbGFzaChncHMoJ2llZF90 cF9vd24nKSk7CgogICAgICAgICR3aGVyZSA9ICJuYW1lPSckbGJsJyBBTkQgbGFuZz0nJGxu ZyciOwogICAgICAgICRyZXQgPSBzYWZlX3VwZGF0ZSgndHhwX2xhbmcnLCAiZGF0YT0nJHN0 cicsIGV2ZW50PSckZXZ0Jywgb3duZXI9JyRvd24nIiwgJHdoZXJlKTsKCiAgICAgICAgaWYg KCRyZXQgJiYgKG15c3FsaV9hZmZlY3RlZF9yb3dzKCREQi0+bGluaykgfHwgc2FmZV9jb3Vu dCgndHhwX2xhbmcnLCAkd2hlcmUpKSkgewogICAgICAgICAgICAvLyBVcGRhdGUgT0s6IGRv IG5vdGhpbmcgZWxzZS4KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmV0ID0gc2Fm ZV9pbnNlcnQoJ3R4cF9sYW5nJywgIm5hbWU9JyRsYmwnLCBsYW5nPSckbG5nJywgZXZlbnQ9 JyRldnQnLCBvd25lcj0nJG93bicsIGRhdGE9JyRzdHInIik7CiAgICAgICAgfQogICAgfQoK ICAgIC8qKgogICAgICogQUpBWDogRmV0Y2ggYSBUZXh0cGFjayBzdHJpbmcgZnJvbSB0aGUg ZGF0YWJhc2UuCiAgICAgKgogICAgICogUmVxdWlyZXMgUE9TVCB2YXJpYWJsZXM6CiAgICAg KiAgcGFyYW0gIHN0cmluZyBpZWRfdHBfbGJsICBUaGUgbGFuZ3VhZ2UgbGFiZWwgKGtleSkK ICAgICAqICBwYXJhbSAgc3RyaW5nIGllZF90cF9sbmcgIExhbmd1YWdlIG9mIHN0cmluZyB0 byBmZXRjaAogICAgICogIHBhcmFtICBzdHJpbmcgaWVkX3RwX2RmbHQgRGVmYXVsdCBsYW5n dWFnZSB0byBmZXRjaCBzdHJpbmcgaWYgbWFpbiBsYW5nIG1pc3NpbmcKICAgICAqIEByZXR1 cm4gYXJyYXkgICAgICAgICAgICAgIEpTT04gcmVzcG9uc2UKICAgICAqLwogICAgcHVibGlj IGZ1bmN0aW9uIHRleHRwYWNrX2dldCgpCiAgICB7CiAgICAgICAgJGxibCA9IGRvU2xhc2go Z3BzKCdpZWRfdHBfbGJsJykpOwogICAgICAgICRsbmcgPSBkb1NsYXNoKGdwcygnaWVkX3Rw X2xuZycpKTsKICAgICAgICAkZGZsdCA9IGRvU2xhc2goZ3BzKCdpZWRfdHBfZGZsdCcpKTsK CiAgICAgICAgJHJzID0gc2FmZV9yb3dzKCdsYW5nLCBkYXRhJywgJ3R4cF9sYW5nJywgIm5h bWU9JyRsYmwnIEFORCAobGFuZz0nJGxuZycgT1IgbGFuZz0nJGRmbHQnKSIpOwogICAgICAg ICRvdXQgPSBhcnJheSgpOwoKICAgICAgICBmb3JlYWNoICgkcnMgYXMgJHJvdykgewogICAg ICAgICAgICBpZiAoKCRyb3dbJ2xhbmcnXSA9PSAkZGZsdCkgJiYgKCRsbmcgIT0gJGRmbHQp KSB7CiAgICAgICAgICAgICAgICAkb3V0WydpZWRfcGx1Z2luX3RwX2RmbHQnXSA9ICRyb3db J2RhdGEnXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRvdXRbJ2ll ZF9wbHVnaW5fdHBfc3RyaW5nJ10gPSAkcm93WydkYXRhJ107CiAgICAgICAgICAgIH0KICAg ICAgICB9CgogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJG91dCk7CiAgICB9CgogICAgLyoq CiAgICAgKiBBSkFYOiBTYXZlIGp1c3QgdGhlIHBsdWdpbiBjb2RlLCBvcHRpb25hbGx5IGNo ZWNraW5nIHN5bnRheC4KICAgICAqCiAgICAgKiBSZXF1aXJlcyBQT1NUIHZhcmlhYmxlczoK ICAgICAqICBwYXJhbSAgc3RyaW5nIHBsdWdpbiAgICBOYW1lIG9mIHBsdWdpbiB0byBzYXZl IGFnYWluc3QKICAgICAqICBwYXJhbSAgc3RyaW5nIGNvZGVibG9jayBQSFAgY29kZQogICAg ICogQHJldHVybiBhcnJheSAgICAgICAgICAgIFhNTCByZXNwb25zZQogICAgICovCiAgICBw dWJsaWMgZnVuY3Rpb24gY29kZV9zYXZlKCkKICAgIHsKICAgICAgICBnbG9iYWwgJHRoZW1l OwoKICAgICAgICAkc3ludGF4X2NoZWNrID0gZ2V0X3ByZWYoJ2llZF9wbHVnaW5fc3ludGF4 X2NoZWNrJyk7CgogICAgICAgICRwbHVnID0gZG9TbGFzaChwcygncGx1Z2luJykpOwogICAg ICAgICRjb2RlID0gcHMoJ2NvZGVibG9jaycpOwoKICAgICAgICAkcmV0ID0gKCRzeW50YXhf Y2hlY2spID8gJHRoaXMtPmNoZWNrX3N5bnRheF9lcnIoJGNvZGUpIDogZmFsc2U7CiAgICAg ICAgJG1zZyA9ICcnOwoKICAgICAgICBpZiAoJHJldCA9PT0gZmFsc2UpIHsKICAgICAgICAg ICAgJHJldCA9IEBzYWZlX3VwZGF0ZSgndHhwX3BsdWdpbicsICJjb2RlPSciLmRvU2xhc2go JGNvZGUpLiInIiwgIm5hbWU9JyRwbHVnJyIpOwogICAgICAgICAgICBpZiAoJHJldCkgewog ICAgICAgICAgICAgICAgJG1zZyA9ICR0aGVtZS0+YW5ub3VuY2VfYXN5bmMoZ1R4dCgnaWVk X3BsdWdpbl9jb2RlX3NhdmVkJykpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg ICAgICAgJG1zZyA9ICR0aGVtZS0+YW5ub3VuY2VfYXN5bmMoYXJyYXkoZ1R4dCgnaWVkX3Bs dWdpbl9jb2RlX3NhdmVkX2ZhaWwnKSwgRV9FUlJPUikpOwogICAgICAgICAgICB9CiAgICAg ICAgICAgIHNlbmRfeG1sX3Jlc3BvbnNlKGFycmF5KCdpZWRfcGx1Z2luX21zZycgPT4gJG1z ZykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRtc2cgPSAkdGhlbWUtPmFubm91 bmNlX2FzeW5jKGFycmF5KGh0bWxlbnRpdGllcygkcmV0WzBdLCBFTlRfUVVPVEVTKSwgRV9F UlJPUikpOwogICAgICAgICAgICBzZW5kX3htbF9yZXNwb25zZShhcnJheSgnaHR0cC1zdGF0 dXMnID0+ICc0MTIgUHJlY29uZGl0aW9uIEZhaWxlZCcsICdpZWRfcGx1Z2luX21zZycgPT4g JG1zZywgJ2llZF9wbHVnaW5fZXJyX2xpbmUnID0+ICRyZXRbMV0pKTsKICAgICAgICB9CiAg ICB9CgogICAgLyoqCiAgICAgKiBBSkFYOiBTYXZlIGp1c3QgdGhlIHBsdWdpbiBtZXRhZGF0 YS4KICAgICAqCiAgICAgKiBSZXF1aXJlcyBQT1NUIHZhcmlhYmxlczoKICAgICAqICBwYXJh bSAgc3RyaW5nIHBsdWdpbiBOYW1lIG9mIHBsdWdpbiB0byBzYXZlIGFnYWluc3QKICAgICAq ICBwYXJhbSAgYXJyYXkgIGRhdGEgICBOYW1lLXZhbHVlIHBhaXJzIHRvIHN0b3JlCiAgICAg KiBAcmV0dXJuIGFycmF5ICAgICAgICAgWE1MIHJlc3BvbnNlCiAgICAgKi8KICAgIHB1Ymxp YyBmdW5jdGlvbiBtZXRhX3NhdmUoKSB7CiAgICAgICAgZ2xvYmFsICR0aGVtZTsKCiAgICAg ICAgJGllZF9wbHVnaW5fcHJlZnMgPSAkdGhpcy0+Z2V0X3ByZWZzKCk7CgogICAgICAgICRw bHVnID0gZG9TbGFzaChwcygncGx1Z2luJykpOwogICAgICAgICRkYXRhID0gcHMoJ2RhdGEn KTsKICAgICAgICAkbXNnID0gJyc7CiAgICAgICAgJG1ldGEgPSBhcnJheSgpOwoKICAgICAg ICAvLyBEZWZhdWx0cyByZXF1aXJlZCBiZWNhdXNlIEhUTUwgZm9ybXMgZG9uJ3QgcG9zdCB1 bmNoZWNrZWQgaXRlbXMuCiAgICAgICAgJHNldCA9IGFycmF5KAogICAgICAgICAgICAnZmxh Z3MnICA9PiAiZmxhZ3M9JzAnIiwKICAgICAgICAgICAgJ3N0YXR1cycgPT4gInN0YXR1cz0n MCciLAogICAgICAgICAgICApOwoKICAgICAgICBmb3JlYWNoICgkZGF0YSBhcyAka2V5ID0+ ICR2YWx1ZSkgewogICAgICAgICAgICBzd2l0Y2ggKCRrZXkpIHsKICAgICAgICAgICAgICAg IGNhc2UgJ2Rlc2NyaXB0aW9uJzoKICAgICAgICAgICAgICAgIGNhc2UgJ3ZlcnNpb24nOgog ICAgICAgICAgICAgICAgY2FzZSAnYXV0aG9yJzoKICAgICAgICAgICAgICAgIGNhc2UgJ2F1 dGhvcl91cmknOgogICAgICAgICAgICAgICAgY2FzZSAndHlwZSc6CiAgICAgICAgICAgICAg ICBjYXNlICdsb2FkX29yZGVyJzoKICAgICAgICAgICAgICAgICAgICAkc2V0WyRrZXldID0g JGtleSAuICI9JyIuZG9TbGFzaCgkdmFsdWUpLiInIjsKICAgICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ25ld25hbWUnOgogICAgICAgICAgICAgICAg ICAgICR2YWwgPSBkb1NsYXNoKCR2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgJHNldFsn bmFtZSddID0gIm5hbWU9JyIuJHZhbC4iJyI7CiAgICAgICAgICAgICAgICAgICAgJG1ldGFb J25hbWUnXSA9ICR2YWw7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICBjYXNlICdzdGF0dXMnOgogICAgICAgICAgICAgICAgY2FzZSAnZmxhZ3MnOgogICAg ICAgICAgICAgICAgICAgICRwYXJ0ID0gYXJyYXkoKTsKCiAgICAgICAgICAgICAgICAgICAg Zm9yZWFjaCAoJHZhbHVlIGFzICRpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlm ICghaXNzZXQoJHBhcnRbJGtleV0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk cGFydFska2V5XSA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICAgICRwYXJ0WyRrZXldICs9ICRpdGVtOwogICAgICAgICAgICAgICAgICAg IH0KCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBhcnQgYXMgJGlkeCA9PiAkdmFs KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZXRbJGlkeF0gPSAkaWR4IC4gIj0nIiAu IGRvU2xhc2goJHZhbCkuIiciOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR1cGRh dGUgPSBpbXBsb2RlKCcsJywgJHNldCk7CiAgICAgICAgJHJldCA9IHNhZmVfdXBkYXRlKCd0 eHBfcGx1Z2luJywgJHVwZGF0ZSwgIm5hbWU9JyRwbHVnJyIpOwoKICAgICAgICBpZiAoJHJl dCkgewogICAgICAgICAgICAkbXNnID0gJHRoZW1lLT5hbm5vdW5jZV9hc3luYyhnVHh0KCdp ZWRfcGx1Z2luX21ldGFfc2F2ZWQnKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg JG1zZyA9ICR0aGVtZS0+YW5ub3VuY2VfYXN5bmMoYXJyYXkoZ1R4dCgnaWVkX3BsdWdpbl9t ZXRhX3NhdmVkX2ZhaWwnKSwgRV9FUlJPUikpOwogICAgICAgIH0KCiAgICAgICAgc2VuZF94 bWxfcmVzcG9uc2UoYXJyYXkoJ2llZF9wbHVnaW5fbXNnJyA9PiAkbXNnKSk7CiAgICB9Cgog ICAgLyoqCiAgICAgKiBDaGVjayB0aGUgc3ludGF4IG9mIHNvbWUgUEhQIGNvZGUuCiAgICAg KgogICAgICogTW9zdGx5IGZyb20gYSBjb21tZW50IGluIGh0dHA6Ly9waHAubmV0L21hbnVh bC9lbi9mdW5jdGlvbi5waHAtY2hlY2stc3ludGF4LnBocAogICAgICoKICAgICAqIEBwYXJh bSAgc3RyaW5nICRjb2RlICBQSFAgY29kZSB0byBjaGVjay4KICAgICAqIEByZXR1cm4gYm9v bGVhbnxhcnJheSBJZiBmYWxzZSwgdGhlbiBjaGVjayB3YXMgc3VjY2Vzc2Z1bCwgb3RoZXJ3 aXNlIGFuIGFycmF5KG1lc3NhZ2UsbGluZSkgb2YgZXJyb3JzIGlzIHJldHVybmVkLgogICAg ICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tfc3ludGF4X2VycigkY29kZSkKICAgIHsK ICAgICAgICBpZiAoIWRlZmluZWQoJ0NSJykpIGRlZmluZSgnQ1InLGNocigxMykpOwogICAg ICAgIGlmICghZGVmaW5lZCgnTEYnKSkgZGVmaW5lKCdMRicsY2hyKDEwKSk7CgogICAgICAg ICRicmFjZXM9MDsKICAgICAgICAkaW5TdHJpbmc9MDsKCiAgICAgICAgZm9yZWFjaCAodG9r ZW5fZ2V0X2FsbCgnPD9waHAgJyAuICRjb2RlKSBhcyAkdG9rZW4pIHsKICAgICAgICAgICAg aWYgKGlzX2FycmF5KCR0b2tlbikpIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAoJHRva2Vu WzBdKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSBUX0NVUkxZX09QRU46CiAgICAgICAg ICAgICAgICAgICAgY2FzZSBUX0RPTExBUl9PUEVOX0NVUkxZX0JSQUNFUzoKICAgICAgICAg ICAgICAgICAgICBjYXNlIFRfU1RBUlRfSEVSRURPQzogKyskaW5TdHJpbmc7IGJyZWFrOwog ICAgICAgICAgICAgICAgICAgIGNhc2UgVF9FTkRfSEVSRURPQzogICAtLSRpblN0cmluZzsg YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICgkaW5TdHJp bmcgJiAxKSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKCR0b2tlbikgewogICAgICAgICAg ICAgICAgICAgIGNhc2UgJ2AnOiBjYXNlICdcJyc6CiAgICAgICAgICAgICAgICAgICAgY2Fz ZSAnIic6IC0tJGluU3RyaW5nOyBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAoJHRva2VuKSB7CiAgICAgICAg ICAgICAgICAgICAgY2FzZSAnYCc6IGNhc2UgJ1wnJzoKICAgICAgICAgICAgICAgICAgICBj YXNlICciJzogKyskaW5TdHJpbmc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2Ug J3snOiArKyRicmFjZXM7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ30nOgog ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGluU3RyaW5nKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtLSRpblN0cmluZzsKICAgICAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tJGJyYWNlczsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgkYnJhY2VzIDwgMCkgYnJlYWsgMjsKICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkaW5TdHJpbmcg PSBAaW5pX3NldCgnbG9nX2Vycm9ycycsIGZhbHNlKTsKICAgICAgICAkdG9rZW4gPSBAaW5p X3NldCgnZGlzcGxheV9lcnJvcnMnLCB0cnVlKTsKICAgICAgICBvYl9zdGFydCgpOwogICAg ICAgICRicmFjZXMgfHwgJGNvZGUgPSAiaWYgKDApIHt7JGNvZGV9XG59IjsKICAgICAgICBp ZiAoZXZhbCgkY29kZSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIGlmICgkYnJhY2VzKSB7 CiAgICAgICAgICAgICAgICAkYnJhY2VzID0gUEhQX0lOVF9NQVg7CiAgICAgICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICAgICBmYWxzZSAhPT0gc3RycG9zKCRjb2RlLENSKSAmJiAk Y29kZSA9IHN0cl9yZXBsYWNlKENSLExGLHN0cl9yZXBsYWNlKENSTEYsTEYsJGNvZGUpKTsK ICAgICAgICAgICAgICAgICRicmFjZXMgPSBzdWJzdHJfY291bnQoJGNvZGUsTEYpOwogICAg ICAgICAgICB9CiAgICAgICAgICAgICRjb2RlID0gb2JfZ2V0X2NsZWFuKCk7CiAgICAgICAg ICAgICRjb2RlID0gc3RyaXBfdGFncygkY29kZSk7CiAgICAgICAgICAgIGlmIChwcmVnX21h dGNoKCInc3ludGF4IGVycm9yLCAoLispIGluIC4rIG9uIGxpbmUgKFxkKykkJ3MiLCAkY29k ZSwgJGNvZGUpKSB7CiAgICAgICAgICAgICAgICAkY29kZVsyXSA9IChpbnQpICRjb2RlWzJd OwogICAgICAgICAgICAgICAgJGNvZGUgPSAkY29kZVsyXSA8PSAkYnJhY2VzCiAgICAgICAg ICAgICAgICAgICAgPyBhcnJheSgkY29kZVsxXSwgJGNvZGVbMl0pCiAgICAgICAgICAgICAg ICAgICAgOiBhcnJheSgndW5leHBlY3RlZCAkZW5kJyAuIHN1YnN0cigkY29kZVsxXSwgMTQp LCAkYnJhY2VzKTsKICAgICAgICAgICAgfSBlbHNlICRjb2RlID0gYXJyYXkoJ3N5bnRheCBl cnJvcicsIDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG9iX2VuZF9jbGVhbigp OwogICAgICAgICAgICAkY29kZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBAaW5pX3Nl dCgnZGlzcGxheV9lcnJvcnMnLCAkdG9rZW4pOwogICAgICAgIEBpbmlfc2V0KCdsb2dfZXJy b3JzJywgJGluU3RyaW5nKTsKCiAgICAgICAgcmV0dXJuICRjb2RlOwogICAgfQoKICAgIC8v IFJlZmxlY3Rpb24gdXRpbGl0eSBmb3IgcGhwZG9jIGdlbmVyYXRpb24KICAgIHB1YmxpYyBm dW5jdGlvbiByZWZsdW5jdGlvbl9mYWN0b3J5KCRjYWxsYmFjaykKICAgIHsKICAgICAgICBp ZiAoaXNfYXJyYXkoJGNhbGxiYWNrKSkgewogICAgICAgICAgICAvLyBtdXN0IGJlIGEgY2xh c3MgbWV0aG9kCiAgICAgICAgICAgIGxpc3QoJGNsYXNzLCAkbWV0aG9kKSA9ICRjYWxsYmFj azsKCgogICAgICAgICAgICByZXR1cm4gbmV3IFJlZmxlY3Rpb25NZXRob2QoJGNsYXNzLCAk bWV0aG9kKTsKICAgICAgICB9CgogICAgICAgIC8vIGNsYXNzOjptZXRob2Qgc3ludGF4CiAg ICAgICAgaWYgKGlzX3N0cmluZygkY2FsbGJhY2spICYmIHN0cnBvcygkY2FsbGJhY2ssICI6 OiIpICE9PSBmYWxzZSkgewogICAgICAgICAgICBsaXN0KCRjbGFzcywgJG1ldGhvZCkgPSBl eHBsb2RlKCI6OiIsICRjYWxsYmFjayk7CgogICAgICAgICAgICByZXR1cm4gbmV3IFJlZmxl Y3Rpb25NZXRob2QoJGNsYXNzLCAkbWV0aG9kKTsKICAgICAgICB9CgogICAgICAgIC8vIG9i amVjdHMgYXMgZnVuY3Rpb25zIChQSFAgNS4zKykKICAgICAgICBpZiAodmVyc2lvbl9jb21w YXJlKFBIUF9WRVJTSU9OLCAiNS4zLjAiLCAiPj0iKSAmJiBtZXRob2RfZXhpc3RzKCRjYWxs YmFjaywgIl9faW52b2tlIikpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWZsZWN0aW9u TWV0aG9kKCRjYWxsYmFjaywgIl9faW52b2tlIik7CiAgICAgICAgfQoKICAgICAgICAvLyBh c3N1bWUgaXQncyBhIGZ1bmN0aW9uCiAgICAgICAgcmV0dXJuIG5ldyBSZWZsZWN0aW9uRnVu Y3Rpb24oJGNhbGxiYWNrKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGVf cGhwZG9jKCkKICAgIHsKICAgICAgICAkcGx1ZyA9IGdwcygncGx1Z2luJyk7CiAgICAgICAg JG9iaiA9IGdwcygnZm4nKTsKICAgICAgICAkcmV0ID0gbG9hZF9wbHVnaW4oJHBsdWcpOwog ICAgICAgIGlmICgkcmV0KSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAk b2JqID0gJHRoaXMtPnJlZmx1bmN0aW9uX2ZhY3RvcnkoJG9iaik7CiAgICAgICAgICAgICAg ICAkbmFtZSA9ICRvYmotPmdldE5hbWUoKTsKICAgICAgICAgICAgICAgICRkb2MgPSAkb2Jq LT5nZXREb2NDb21tZW50KCk7CgogICAgICAgICAgICAgICAgaWYgKCRkb2MpIHsKICAgICAg ICAgICAgICAgICAgICAvL1RPRE86IG1ha2UgbGlzdCBvZiBhbGxvd2VkIGRvY2Jsb2NrIHRh Z3MgYSBwcmVmCiAgICAgICAgICAgICAgICAgICAgLy9UT0RPOiBwYXJzZSBleGlzdGluZyBk b2MgYmxvY2sgYW5kIGFwcGVuZCBhbnkgbmV3IHZhcnMvcGFyYW1zCiAgICAgICAgICAgICAg ICAgICAgcHJlZ19tYXRjaF9hbGwoJy9ccypcKlxzKlxAKGFic3RyYWN0fGFjY2Vzc3xhdXRo b3J8Y2F0ZWdvcnl8Y29weXJpZ2h0fGRlcHJlY2F0ZWR8ZXhhbXBsZXxmaW5hbHxmaWxlc291 cmNlfGdsb2JhbHxpZ25vcmV8aW50ZXJuYWx8bGljZW5zZXxsaW5rfG1ldGhvZHxuYW1lfHBh Y2thZ2V8cGFyYW18cHJvcGVydHl8cmV0dXJufHNlZXxzaW5jZXxzdGF0aWN8c3RhdGljdmFy fHN1YnBhY2thZ2V8dG9kb3x0dXRvcmlhbHx1c2VzfHZhcnx2ZXJzaW9uKVxzKyhcdyspXHMr KFwkXHcrKD86Olx3K3wtPlx3KykqKVxzKyhcWyhcJnxcK3xhYnN0cmFjdHxmaW5hbHxwcml2 YXRlfHByb3RlY3RlZHxwdWJsaWN8c3RhdGljKVxdKSpccysoLiopLycsICRkb2MsICRtYXRj aGVzLCBQUkVHX1NFVF9PUkRFUik7CgogICAgICAgICAgICAgICAgICAgICR0YWdzID0gYXJy YXkoKTsKICAgICAgICAgICAgICAgICAgICAvLyBSZXNodWZmbGUgdGhlIG1hdGNoZXMgdG8g aW5kZXggb24gW3RhZ11bdmFyXQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRtYXRj aGVzIGFzICRpZHggPT4gJGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bCA9 IGlzc2V0KCRkYXRhWzBdKSA/ICRkYXRhWzBdIDogJyc7CiAgICAgICAgICAgICAgICAgICAg ICAgICR0YWcgPSBpc3NldCgkZGF0YVsxXSkgPyAkZGF0YVsxXSA6ICcnOwogICAgICAgICAg ICAgICAgICAgICAgICAkdHlwID0gaXNzZXQoJGRhdGFbMl0pID8gJGRhdGFbMl0gOiAnJzsK ICAgICAgICAgICAgICAgICAgICAgICAgJHZhciA9IGlzc2V0KCRkYXRhWzNdKSA/ICRkYXRh WzNdIDogJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICRtb2QgPSBpc3NldCgkZGF0YVs0 XSkgPyAkZGF0YVs0XSA6ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAkdGFnc1skdGFn XVskdmFyXSA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnID0+ ICR0eXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnVsbCcgPT4gJGZ1bCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdtb2QnICA9PiAkbW9kLAogICAgICAgICAgICAg ICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K CiAgICAgICAgICAgICAgICAkZm50eXBlID0gYXJyYXkoJ21ldGEnID0+IGFycmF5KCksICd0 eXBlJyA9PiBhcnJheSgpKTsKCiAgICAgICAgICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygk b2JqLCAnaXNDb25zdHJ1Y3RvcicpKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gRGVhbGlu ZyB3aXRoIGEgY2xhc3MgbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgaWYgKCRvYmotPmlz Q29uc3RydWN0b3IoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZm50eXBlWydtZXRh J11bXSA9ICcgW2NdJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgaWYgKCRvYmotPmlzUHVibGljKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGZu dHlwZVsnbW9kJ11bXSA9ICdbcHVibGljXSc7CiAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgIGlmICgkb2JqLT5pc1ByaXZhdGUoKSkgewogICAgICAgICAgICAg ICAgICAgICAgICAkZm50eXBlWydtb2QnXVtdID0gJ1twcml2YXRlXSc7CiAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICgkb2JqLT5pc1Byb3RlY3RlZCgp KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmbnR5cGVbJ21vZCddW10gPSAnW3Byb3Rl Y3RlZF0nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAo JG9iai0+aXNBYnN0cmFjdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmbnR5cGVb J21vZCddW10gPSAnW2Fic3RyYWN0XSc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgIGlmICgkb2JqLT5pc0ZpbmFsKCkpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgJGZudHlwZVsnbW9kJ11bXSA9ICdbZmluYWxdJzsKICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCRvYmotPmlzU3RhdGljKCkpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgJGZudHlwZVsnbW9kJ11bXSA9ICdbc3RhdGljXSc7CiAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRw YXJhbXMgPSAkb2JqLT5nZXRQYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAkcGFyYW1f bGlzdCA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICBpZiAoJHBhcmFtcyAhPSBudWxsKSB7 CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBhcmFtcyBhcyAkcGFyYW0pIHsKICAg ICAgICAgICAgICAgICAgICAgICAgJGhhc19kZmx0ID0gZmFsc2U7CiAgICAgICAgICAgICAg ICAgICAgICAgICR0eXBlID0gJ3N0cmluZyc7CgogICAgICAgICAgICAgICAgICAgICAgICAv LyBDcnVkZSB0eXBlIGNoZWNrZXIKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJh bS0+aXNEZWZhdWx0VmFsdWVBdmFpbGFibGUoKSkgewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgJGhhc19kZmx0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRk Zmx0ID0gJHBhcmFtLT5nZXREZWZhdWx0VmFsdWUoKTsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoaXNfYm9vbCgkZGZsdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAkdHlwZSA9ICdib29sZWFuJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAkZGZsdCA9ICRkZmx0ID8gJ3RydWUnIDogJ2ZhbHNlJzsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0gZWxzZWlmIChpc19udWxsKCRkZmx0KSkgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICRkZmx0ID0gJ05VTEwnOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgfSBlbHNlaWYgKCRkZmx0ID09IChzdHJpbmcpIChpbnQpICRkZmx0KSB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAnaW50ZWdlcic7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGRmbHQgPT0gKHN0cmluZykgKGZs b2F0KSAkZGZsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0g J2Zsb2F0JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChpc19udW1l cmljKCRkZmx0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0g J251bWJlcic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfYXJy YXkoJGRmbHQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAn YXJyYXknOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmICggKCR0eXBlID09ICdzdHJpbmcnIHx8ICR0eXBlID09ICdhcnJh eScpICYmIGVtcHR5KCRkZmx0KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAkZGZsdCA9ICdlbXB0eSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Vp ZiAoJHR5cGUgPT0gJ3N0cmluZycgJiYgJGRmbHQgIT0gJ05VTEwnKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJGRmbHQgPSAnIicuJGRmbHQuJyInOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg ICAgICAgICAgICAgICAgICAkaXRlbSA9ICdAcGFyYW0nLnQuJHR5cGUudC4nJCcuJHBhcmFt LT5nZXROYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW0tPmlzUGFz c2VkQnlSZWZlcmVuY2UoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0g Lj0gJyBbJl0nOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgkcGFyYW0tPmFsbG93c051bGwoKSkgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgJGl0ZW0gLj0gJyBbK10nOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgICRpdGVtIC49ICgkaGFzX2RmbHQpID8gdC4nKERlZmF1 bHQ6ICcgLiRkZmx0LiAnKScgOiB0OwogICAgICAgICAgICAgICAgICAgICAgICAkaXRlbSAu PSB0LidQYXJhbSBkZXNjcmlwdGlvbic7CiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJh bV9saXN0W10gPSAkaXRlbTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICB9CgogICAgICAgICAgICAgICAgJGZpbmFsID0gJzxwcmU+JzsKICAgICAgICAgICAgICAg ICRmaW5hbCAuPSAiLyoqIi5icjsKICAgICAgICAgICAgICAgICRmaW5hbCAuPSAiICogJG5h bWUiIC4gKCghZW1wdHkoJGZudHlwZVsnbWV0YSddKSkgPyAkZm50eXBlWydtZXRhJ10gOiAn JykgLnQuICgoJGZuVHlwZVsnbW9kJ10pID8gaW1wbG9kZSgnICcsICRmblR5cGVbJ21vZCdd KS4nICcgOiAnJykgLiAiRGVzY3JpcHRpb24iLmJyOwogICAgICAgICAgICAgICAgJGZpbmFs IC49ICIgKiIuYnI7CiAgICAgICAgICAgICAgICAkZmluYWwgLj0gIiAqIFN1bW1hcnkgZ29l cyBoZXJlIi5icjsKICAgICAgICAgICAgICAgICRmaW5hbCAuPSAiICoiLmJyOwogICAgICAg ICAgICAgICAgZm9yZWFjaCAoJHBhcmFtX2xpc3QgYXMgJGl0ZW0pIHsKICAgICAgICAgICAg ICAgICAgICAkZmluYWwgLj0gIiAqICIuICRpdGVtLmJyOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgJGZpbmFsIC49ICIgKi88L3ByZT4iLmJyOwoKICAgICAgICAgICAg ICAgIHNlbmRfeG1sX3Jlc3BvbnNlKGFycmF5KCdpZWRfcGx1Z2luX3BocGRvYycgPT4gJGZp bmFsKSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAg ICAgICAgIHNlbmRfeG1sX3Jlc3BvbnNlKCBhcnJheSggJ2h0dHAtc3RhdHVzJyA9PiAnNTAx IE5vdCBJbXBsZW1lbnRlZCcsICdlcnJvcl9tc2cnID0+ICRleC0+Z2V0TWVzc2FnZSgpIC4g Z1R4dCgnaWVkX3BsdWdpbl9mbl9ub3RfZXhpc3QnKSApICk7CiAgICAgICAgICAgIH0KICAg ICAgICB9IGVsc2UgewogICAgICAgICAgICBzZW5kX3htbF9yZXNwb25zZShhcnJheSgnaHR0 cC1zdGF0dXMnID0+ICc0MDAgQmFkIFJlcXVlc3QnKSk7CiAgICAgICAgfQoKICAgIC8qICAk Y2xhc3NJbnRlcmZhY2VzPSRyZWZsZWN0aW9uLT5nZXRJbnRlcmZhY2VzKCk7CiAgICAgICAg Ly9nZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGludGVyZmFjZXMKICAgICAgICBpZiAoJGNs YXNzSW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgZndyaXRlKCRoZiwiXG48L2k+XHQ8 L3RkPjwvdHI+XG5cdDx0cj4iLgogICAgICAgICI8dGQgYWxpZ249XCJjZW50ZXJcIiBjb2xz cGFuPVwiMFwiPiIuCiAgICAgICAgIjxmb250IGZhY2U9XCJhcmlhbFwiIHNpemU9XCIyXCIi LgogICAgICAgICIgY29sb3I9XCJwdXJwbGVcIj5JbXBsZW1lbnRlZCIuCiAgICAgICAgIiBp bnRlcmZhY2VzOjwvdGQ+PHRkIGFsaWduPVwiY2VudGVyXCIiLgogICAgICAgICIgY29sc3Bh bj1cIjBcIj48Zm9udCBmYWNlPVwiYXJpYWxcIiIuCiAgICAgICAgIiBzaXplPVwiMlwiIGNv bG9yPVwiYmxhY2tcIj48Yj5OYW1lPC9iPiIuCiAgICAgICAgIjwvZm9udD48L3RkPjx0ZCBh bGlnbj1cImNlbnRlclwiIi4KICAgICAgICAiIGNvbHNwYW49XCIzXCI+PGZvbnQgZmFjZT1c ImFyaWFsXCIiLgogICAgICAgICIgc2l6ZT1cIjJcIiBjb2xvcj1cImJsYWNrXCI+PGI+Ii4K ICAgICAgICAiRGVzY3JpcHRpb248L2I+PC9mb250PjwvdGQ+PC90cj5cbiIpOwogICAgICAg ICBmb3JlYWNoICgkY2xhc3NJbnRlcmZhY2VzIGFzICRpbikgewogICAgICAgICAgICBmd3Jp dGUoJGhmLCJcdDx0cj48dGQ+PC90ZD48dGQgYWxpZ249Ii4KICAgICAgICAgICAgIlwiY2Vu dGVyXCI+Iik7CiAgICAgICAgICAgIGZ3cml0ZSgkaGYsJGluLT5nZXROYW1lKCkpOwogICAg ICAgICAgICBmd3JpdGUoJGhmLCI8L3RkPjx0ZCBhbGlnbj1cImNlbnRlclwiIi4KICAgICAg ICAgICAgIiBjb2xzcGFuPVwiM1wiPjxpPlxuIik7CiAgICAgICAgICAgIGZ3cml0ZSgkaGYs JGluLT5nZXREb2NDb21tZW50KCkpOwogICAgICAgICAgICBmd3JpdGUoJGhmLCI8L2k+PC90 ZD48L3RyPlxuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgfQoKICAgICAgICAvL2dldCB0 aGUgc3VwZXJjbGFzcyBpbmZvcm1hdGlvbgogICAgICAgICRzdXBlcmNsYXNzPSRyZWZsZWN0 aW9uLT5nZXRQYXJlbnRDbGFzcygpOwogICAgICAgIGlmICgkc3VwZXJjbGFzcyAhPSBudWxs KSB7CiAgICAgICAgICAgIGZ3cml0ZSgkaGYsIlx0PHRyPjx0ZCBhbGlnbj1cImNlbnRlclwi Ii4KICAgICAgICAgICAgICJjb2xzcGFuPVwiMFwiPjxmb250IGZhY2U9XCJhcmlhbFwiIi4K ICAgICAgICAgICAgICIgc2l6ZT1cIjJcIiBjb2xvcj1cInB1cnBsZVwiPiIuCiAgICAgICAg ICAgICAiVGhlIHN1cGVyY2xhc3MgaXM6PC90ZD48dGQiLgogICAgICAgICAgICAgIiBhbGln bj1cImNlbnRlclwiIGNvbHNwYW49XCI0XCI+Ii4KICAgICAgICAgICAgICI8Zm9udCBmYWNl PVwiYXJpYWxcIiBzaXplPVwiMlwiIi4KICAgICAgICAgICAgICIgY29sb3I9XCJibGFja1wi PjxiPlxuIik7CiAgICAgICAgICAgIGZ3cml0ZSgkaGYsJHN1cGVyY2xhc3MtPmdldE5hbWUo KSk7CiAgICAgICAgICAgIGZ3cml0ZSgkaGYsIjwvZm9udD48L3RkPjwvdHI+XG4iKTsKICAg ICAgICAgICAgfQoKICAgICAgICAvL2dldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uc3Rh bnRzCiAgICAgICAgJGNvbnN0YW50cz0kcmVmbGVjdGlvbi0+Z2V0Q29uc3RhbnRzKCk7CiAg ICAgICAgaWYgKCRjb25zdGFudHMgIT0gbnVsbCkgewogICAgICAgICAgJGNvbnN0YW50c051 bWJlcj1jb3VudCgkY29uc3RhbnRzKTsKICAgICAgICAgIGZ3cml0ZSgkaGYsIlx0PHRyPjx0 ZCBhbGlnbj1cImNlbnRlclwiIi4KICAgICAgICAgICIgY29sc3Bhbj1cIjBcIj48Zm9udCBm YWNlPVwiYXJpYWxcIiIuCiAgICAgICAgICAiIHNpemU9XCIyXCIgY29sb3I9XCJwdXJwbGVc Ij4iLgogICAgICAgICAgIkNvbnN0YW50czo8L3RkPjx0ZCBhbGlnbj1cImNlbnRlclwiIi4K ICAgICAgICAgICIgY29sc3Bhbj1cIjBcIj48Zm9udCBmYWNlPVwiYXJpYWxcIiIuCiAgICAg ICAgICAiIHNpemU9XCIyXCIgY29sb3I9XCJibGFja1wiPjxiPk5hbWU8L2I+Ii4KICAgICAg ICAgICI8L2ZvbnQ+PC90ZD48dGQgYWxpZ249XCJjZW50ZXJcIiIuCiAgICAgICAgICAiIGNv bHNwYW49XCIzXCI+PGZvbnQgZmFjZT1cImFyaWFsXCIiLgogICAgICAgICAgIiBzaXplPVwi MlwiIGNvbG9yPVwiYmxhY2tcIj48Yj5WYWx1ZTwvYj4iLgogICAgICAgICAgIjwvZm9udD48 L3RkPjwvdHI+XG4iKTsKICAgICAgICAgIGZvcmVhY2ggKCRjb25zdGFudHMgYXMgJGtleXM9 PiR2YWx1ZSkgewogICAgICAgICAgICBmd3JpdGUoJGhmLCJcdDx0cj48dGQ+PC90ZD48dGQi LgogICAgICAgICAgICAiIGFsaWduPVwiY2VudGVyXCI+Iik7CiAgICAgICAgICAgIGZ3cml0 ZSgkaGYsJGtleXMpOwogICAgICAgICAgICBmd3JpdGUoJGhmLCI8L3RkPjx0ZCBhbGlnbj1c ImNlbnRlclwiIi4KICAgICAgICAgICAgIiBjb2xzcGFuPVwiM1wiPiIpOwogICAgICAgICAg ICBmd3JpdGUoJGhmLCR2YWx1ZSk7CiAgICAgICAgICAgIGZ3cml0ZSgkaGYsIjwvdGQ+PC90 cj5cbiIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgIC8vZ2V0IGluZm9y bWF0aW9uIGFib3V0IHByb3BlcnRpZXMKICAgICAgICAkcHJvcGVydGllcz0kcmVmbGVjdGlv bi0+Z2V0UHJvcGVydGllcygpOwogICAgICAgIGlmICgkcHJvcGVydGllcyAhPSBudWxsKSB7 CiAgICAgICAgICBmd3JpdGUoJGhmLCJcdDx0cj48dGQgYWxpZ249XCJjZW50ZXJcIiIuCiAg ICAgICAgICAiIGNvbHNwYW49XCIwXCI+PGZvbnQgZmFjZT1cImFyaWFsXCIiLgogICAgICAg ICAgIiBzaXplPVwiMlwiIGNvbG9yPVwicHVycGxlXCI+Ii4KICAgICAgICAgICJQcm9wZXJ0 aWVzOjwvdGQ+PHRkIGFsaWduPVwiY2VudGVyXCIiLgogICAgICAgICAgIiBjb2xzcGFuPVwi MFwiPjxmb250IGZhY2U9XCJhcmlhbFwiIi4KICAgICAgICAgICIgc2l6ZT1cIjJcIiBjb2xv cj1cImJsYWNrXCI+PGI+TmFtZTwvYj4iLgogICAgICAgICAgIjwvZm9udD48L3RkPjx0ZCBh bGlnbj1cImNlbnRlclwiIi4KICAgICAgICAgICIgY29sc3Bhbj1cIjNcIj48Zm9udCBmYWNl PVwiYXJpYWxcIiIuCiAgICAgICAgICAiIHNpemU9XCIyXCIgY29sb3I9XCJibGFja1wiPjxi PiIuCiAgICAgICAgICAiTW9kaWZpZXJzPC9iPjwvZm9udD48L3RkPjwvdHI+XG4iKTsKICAg ICAgICAgIGZvcmVhY2ggKCRwcm9wZXJ0aWVzIGFzICRpbikgewogICAgICAgICAgICAgZndy aXRlKCRoZiwiXHQ8dHI+PHRkPjwvdGQ+PHRkIi4KICAgICAgICAgICAgICIgYWxpZ249XCJj ZW50ZXJcIiBjb2xzcGFuPVwiMFwiPiIpOwogICAgICAgICAgICAgZndyaXRlKCRoZiwkaW4t PmdldE5hbWUoKSk7CiAgICAgICAgICAgICBmd3JpdGUoJGhmLCI8L3RkPjx0ZCBhbGlnbj1c ImNlbnRlclwiIi4KICAgICAgICAgICAgICIgY29sc3Bhbj1cIjNcIj4iKTsKCiAgICAgICAg ICAgICBpZiAoJGluLT5pc1B1YmxpYygpKSB7IGZ3cml0ZSgkaGYsIltwdWJsaWNdIik7IH0K ICAgICAgICAgICAgIGlmICgkaW4tPmlzUHJpdmF0ZSgpKSB7IGZ3cml0ZSgkaGYsIltwcml2 YXRlXSIpOyB9CiAgICAgICAgICAgICBpZiAoJGluLT5pc1Byb3RlY3RlZCgpKSB7IGZ3cml0 ZSgkaGYsIltwcm90ZWN0ZWRdIik7IH0KICAgICAgICAgICAgIGlmICgkaW4tPmlzU3RhdGlj KCkpIHsgZndyaXRlKCRoZiwiW3N0YXRpY10iKTsgfQogICAgICAgICAgICAgZndyaXRlKCRo ZiwiPC90ZD48L3RyPlxuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAqLwoK ICAgIH0KCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFNldHRpbmdz IGZvciB0aGUgcGx1Z2luCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3ByZWZzKCkKICAgIHsK ICAgICAgICAkdGVtcGRpciA9IGdldF9wcmVmKCd0ZW1wZGlyJyk7CgogICAgICAgICRpZWRf cGNfcHJlZnMgPSBhcnJheSgKICAgICAgICAgICAgJ2llZF9wbHVnaW5fZWRpdG9yJyA9PiBh cnJheSgKICAgICAgICAgICAgICAgICdodG1sJyAgICAgPT4gJ2llZF9wbHVnaW5fY29kZV9l ZGl0b3JzJywKICAgICAgICAgICAgICAgICd0eXBlJyAgICAgPT4gUFJFRl9ISURERU4sCiAg ICAgICAgICAgICAgICAncG9zaXRpb24nID0+IDEwLAogICAgICAgICAgICAgICAgJ2RlZmF1 bHQnICA9PiAnbm9uZScsCiAgICAgICAgICAgICAgICAnZ3JvdXAnICAgID0+ICdpZWRfcGx1 Z2luX2lmX3NldHRpbmdzJywKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ2llZF9wbHVn aW5fZWRpdG9yX3BhdGgnID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ2h0bWwnICAgICA9 PiAndGV4dF9pbnB1dCcsCiAgICAgICAgICAgICAgICAndHlwZScgICAgID0+IFBSRUZfSElE REVOLAogICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiAyMCwKICAgICAgICAgICAgICAg ICdkZWZhdWx0JyAgPT4gaHUuJ2pzLycsCiAgICAgICAgICAgICAgICAnZ3JvdXAnICAgID0+ ICdpZWRfcGx1Z2luX2lmX3NldHRpbmdzJywKICAgICAgICAgICAgKSwKICAgICAgICAgICAg J2llZF9wbHVnaW5fZWRpdG9yX29wdGlvbnMnID0+IGFycmF5KAogICAgICAgICAgICAgICAg J2h0bWwnICAgICA9PiAndGV4dGFyZWEnLAogICAgICAgICAgICAgICAgJ3R5cGUnICAgICA9 PiBQUkVGX0hJRERFTiwKICAgICAgICAgICAgICAgICdwb3NpdGlvbicgPT4gMzAsCiAgICAg ICAgICAgICAgICAnZGVmYXVsdCcgID0+ICcnLAogICAgICAgICAgICAgICAgJ2dyb3VwJyAg ICA9PiAnaWVkX3BsdWdpbl9pZl9zZXR0aW5ncycsCiAgICAgICAgICAgICksCiAgICAgICAg ICAgICdpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAg ICAnaHRtbCcgICAgID0+ICd0ZXh0X2lucHV0JywKICAgICAgICAgICAgICAgICd0eXBlJyAg ICAgPT4gUFJFRl9ISURERU4sCiAgICAgICAgICAgICAgICAncG9zaXRpb24nID0+IDQwLAog ICAgICAgICAgICAgICAgJ2RlZmF1bHQnICA9PiAnOTAlJywKICAgICAgICAgICAgICAgICdn cm91cCcgICAgPT4gJ2llZF9wbHVnaW5faWZfc2V0dGluZ3MnLAogICAgICAgICAgICApLAog ICAgICAgICAgICAnaWVkX3BsdWdpbl9oZWxwX2VkaXRvcicgPT4gYXJyYXkoCiAgICAgICAg ICAgICAgICAnaHRtbCcgICAgID0+ICdpZWRfcGx1Z2luX2hlbHBfZWRpdG9ycycsCiAgICAg ICAgICAgICAgICAndHlwZScgICAgID0+IFBSRUZfSElEREVOLAogICAgICAgICAgICAgICAg J3Bvc2l0aW9uJyA9PiA1MCwKICAgICAgICAgICAgICAgICdkZWZhdWx0JyAgPT4gJ3RleHRp bGUnLAogICAgICAgICAgICAgICAgJ2dyb3VwJyAgICA9PiAnaWVkX3BsdWdpbl9pZl9zZXR0 aW5ncycsCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdpZWRfcGx1Z2luX2hlbHBfZWRp dG9yX3BhdGgnID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ2h0bWwnICAgICA9PiAndGV4 dF9pbnB1dCcsCiAgICAgICAgICAgICAgICAndHlwZScgICAgID0+IFBSRUZfSElEREVOLAog ICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiA2MCwKICAgICAgICAgICAgICAgICdkZWZh dWx0JyAgPT4gaHUuJ2pzLycsCiAgICAgICAgICAgICAgICAnZ3JvdXAnICAgID0+ICdpZWRf cGx1Z2luX2lmX3NldHRpbmdzJywKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ2llZF9w bHVnaW5faGVscF9lZGl0b3Jfb3B0aW9ucycgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAn aHRtbCcgICAgID0+ICd0ZXh0YXJlYScsCiAgICAgICAgICAgICAgICAndHlwZScgICAgID0+ IFBSRUZfSElEREVOLAogICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiA3MCwKICAgICAg ICAgICAgICAgICdkZWZhdWx0JyAgPT4gJ3RoZW1lX2FkdmFuY2VkX3Rvb2xiYXJfbG9jYXRp b24gOiAidG9wIiwKICAgIHRoZW1lX2FkdmFuY2VkX2J1dHRvbnMxIDogImJvbGQsaXRhbGlj LHVuZGVybGluZSxzdHJpa2V0aHJvdWdoLGZvcmVjb2xvcixiYWNrY29sb3IscmVtb3ZlZm9y bWF0LG51bWxpc3QsYnVsbGlzdCxvdXRkZW50LGluZGVudCxqdXN0aWZ5bGVmdCxqdXN0aWZ5 Y2VudGVyLGp1c3RpZnlyaWdodCxqdXN0aWZ5ZnVsbCIsCiAgICB0aGVtZV9hZHZhbmNlZF9i dXR0b25zMiA6ICJsaW5rLHVubGluayxzZXBhcmF0b3IsaWJyb3dzZXIsc2VwYXJhdG9yLHNl YXJjaCxyZXBsYWNlLHNlcGFyYXRvcixjdXQsY29weSxwYXN0ZSxzZXBhcmF0b3IsY29kZSxz ZXBhcmF0b3IsZm9ybWF0c2VsZWN0IiwKICAgIHRoZW1lX2FkdmFuY2VkX2J1dHRvbnMzIDog IiInLAogICAgICAgICAgICAgICAgJ2dyb3VwJyAgICA9PiAnaWVkX3BsdWdpbl9pZl9zZXR0 aW5ncycsCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdpZWRfcGx1Z2luX2ludGVyZmFj ZV9lbGVtcycgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnaHRtbCcgICAgID0+ICdjaGVj a2JveHNldCcsCiAgICAgICAgICAgICAgICAndHlwZScgICAgID0+IFBSRUZfSElEREVOLAog ICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiA4MCwKICAgICAgICAgICAgICAgICdjb250 ZW50JyAgPT4gYXJyYXkoJ2Rpc3RyaWJ1dGlvbicgPT4gJ2llZF9wbHVnaW5faWZfZWxfZGlz dCcsICdzdHlsZScgPT4gJ2llZF9wbHVnaW5faWZfZWxfc3R5bGUnKSwKICAgICAgICAgICAg ICAgICdkZWZhdWx0JyAgPT4gJ3N0eWxlJywKICAgICAgICAgICAgICAgICdncm91cCcgICAg PT4gJ2llZF9wbHVnaW5faWZfc2V0dGluZ3MnLAogICAgICAgICAgICApLAogICAgICAgICAg ICAnaWVkX3BsdWdpbl9saWZlY3ljbGVfb3B0aW9ucycgPT4gYXJyYXkoCiAgICAgICAgICAg ICAgICAnaHRtbCcgICAgID0+ICdjaGVja2JveHNldCcsCiAgICAgICAgICAgICAgICAndHlw ZScgICAgID0+IFBSRUZfSElEREVOLAogICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiA5 MCwKICAgICAgICAgICAgICAgICdjb250ZW50JyAgPT4gYXJyYXkoJ2luc3RhbGxlZCcgPT4g J2llZF9wbHVnaW5fbGJsX2xjX2luc3RhbGwnLCAnZW5hYmxlZCcgPT4gJ2llZF9wbHVnaW5f bGJsX2xjX2VuYWJsZScsICdkaXNhYmxlZCcgPT4gJ2llZF9wbHVnaW5fbGJsX2xjX2Rpc2Fi bGUnLCAnZGVsZXRlZCcgPT4gJ2llZF9wbHVnaW5fbGJsX2xjX2RlbGV0ZScpLAogICAgICAg ICAgICAgICAgJ2RlZmF1bHQnICA9PiAnJywKICAgICAgICAgICAgICAgICdncm91cCcgICAg PT4gJ2llZF9wbHVnaW5fcHJlZnMnLAogICAgICAgICAgICApLAogICAgICAgICAgICAnaWVk X3BsdWdpbl9hdXRvX2VuYWJsZScgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnaHRtbCcg ICAgID0+ICdyYWRpb3NldCcsCiAgICAgICAgICAgICAgICAndHlwZScgICAgID0+IFBSRUZf SElEREVOLAogICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiAxMDAsCiAgICAgICAgICAg ICAgICAnY29udGVudCcgID0+IGFycmF5KCcwJyA9PiBnVHh0KCdubycpLCAnMScgPT4gZ1R4 dCgneWVzJyksICcyJyA9PiBnVHh0KCdpZWRfcGx1Z2luX3NhbWUnKSksCiAgICAgICAgICAg ICAgICAnZGVmYXVsdCcgID0+ICcyJywKICAgICAgICAgICAgICAgICdncm91cCcgICAgPT4g J2llZF9wbHVnaW5fcHJlZnMnLAogICAgICAgICAgICApLAogICAgICAgICAgICAnaWVkX3Bs dWdpbl9zeW50YXhfY2hlY2snID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ2h0bWwnICAg ICA9PiAneWVzbm9yYWRpbycsCiAgICAgICAgICAgICAgICAndHlwZScgICAgID0+IFBSRUZf SElEREVOLAogICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiAxMTAsCiAgICAgICAgICAg ICAgICAnZGVmYXVsdCcgID0+ICcxJywKICAgICAgICAgICAgICAgICdncm91cCcgICAgPT4g J2llZF9wbHVnaW5fcHJlZnMnLAogICAgICAgICAgICApLAogICAgICAgICAgICAnaWVkX3Bs dWdpbl9sYW5nX2Nob29zZScgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnaHRtbCcgICAg ID0+ICdpZWRfcGx1Z2luX2xhbmdfb3B0aW9ucycsCiAgICAgICAgICAgICAgICAndHlwZScg ICAgID0+IFBSRUZfSElEREVOLAogICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiAxMjAs CiAgICAgICAgICAgICAgICAnZGVmYXVsdCcgID0+ICdpbnN0YWxsZWQnLAogICAgICAgICAg ICAgICAgJ2dyb3VwJyAgICA9PiAnaWVkX3BsdWdpbl9wcmVmcycsCiAgICAgICAgICAgICks CiAgICAgICAgICAgICdpZWRfcGx1Z2luX2xhbmdfZGVmYXVsdCcgPT4gYXJyYXkoCiAgICAg ICAgICAgICAgICAnaHRtbCcgICAgID0+ICdpZWRfcGx1Z2luX2xhbmdfZGVmYXVsdCcsCiAg ICAgICAgICAgICAgICAndHlwZScgICAgID0+IFBSRUZfSElEREVOLAogICAgICAgICAgICAg ICAgJ3Bvc2l0aW9uJyA9PiAxMzAsCiAgICAgICAgICAgICAgICAnZGVmYXVsdCcgID0+ICcn LAogICAgICAgICAgICAgICAgJ2dyb3VwJyAgICA9PiAnaWVkX3BsdWdpbl9wcmVmcycsCiAg ICAgICAgICAgICksCiAgICAgICAgICAgICdpZWRfcGx1Z2luX291dHB1dF9vcmRlcicgPT4g YXJyYXkoCiAgICAgICAgICAgICAgICAnaHRtbCcgICAgID0+ICdyYWRpb3NldCcsCiAgICAg ICAgICAgICAgICAndHlwZScgICAgID0+IFBSRUZfSElEREVOLAogICAgICAgICAgICAgICAg J3Bvc2l0aW9uJyA9PiAxNDAsCiAgICAgICAgICAgICAgICAnY29udGVudCcgID0+IGFycmF5 KCcwJyA9PiBnVHh0KCdpZWRfcGx1Z2luX2xibF9vcF9jb2RlX2ZpcnN0JyksICcxJyA9PiBn VHh0KCdpZWRfcGx1Z2luX2xibF9vcF9oZWxwX2ZpcnN0JykpLAogICAgICAgICAgICAgICAg J2RlZmF1bHQnICA9PiAnMCcsCiAgICAgICAgICAgICAgICAnZ3JvdXAnICAgID0+ICdpZWRf cGx1Z2luX3ByZWZzJywKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ2llZF9wbHVnaW5f b3V0cHV0X3NmaWxlJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICdodG1sJyAgICAgPT4g J3RleHRfaW5wdXQnLAogICAgICAgICAgICAgICAgJ3R5cGUnICAgICA9PiBQUkVGX0hJRERF TiwKICAgICAgICAgICAgICAgICdwb3NpdGlvbicgPT4gMTUwLAogICAgICAgICAgICAgICAg J2RlZmF1bHQnICA9PiAne25hbWV9X3Z7dmVyc2lvbn0udHh0JywKICAgICAgICAgICAgICAg ICdncm91cCcgICAgPT4gJ2llZF9wbHVnaW5fcHJlZnMnLAogICAgICAgICAgICApLAogICAg ICAgICAgICAnaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVjJyA9PiBhcnJheSgKICAgICAgICAg ICAgICAgICdodG1sJyAgICAgPT4gJ3RleHRfaW5wdXQnLAogICAgICAgICAgICAgICAgJ3R5 cGUnICAgICA9PiBQUkVGX0hJRERFTiwKICAgICAgICAgICAgICAgICdwb3NpdGlvbicgPT4g MTYwLAogICAgICAgICAgICAgICAgJ2RlZmF1bHQnICA9PiAne25hbWV9X3Z7dmVyc2lvbn1f emlwLnR4dCcsCiAgICAgICAgICAgICAgICAnZ3JvdXAnICAgID0+ICdpZWRfcGx1Z2luX3By ZWZzJywKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ2llZF9wbHVnaW5fb3V0cHV0X3Nm aWxlcCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnaHRtbCcgICAgID0+ICd0ZXh0X2lu cHV0JywKICAgICAgICAgICAgICAgICd0eXBlJyAgICAgPT4gUFJFRl9ISURERU4sCiAgICAg ICAgICAgICAgICAncG9zaXRpb24nID0+IDE3MCwKICAgICAgICAgICAgICAgICdkZWZhdWx0 JyAgPT4gJ3tuYW1lfV92e3ZlcnNpb259LnBocCcsCiAgICAgICAgICAgICAgICAnZ3JvdXAn ICAgID0+ICdpZWRfcGx1Z2luX3ByZWZzJywKICAgICAgICAgICAgKSwKICAgICAgICAgICAg J2llZF9wbHVnaW5fb3V0cHV0X3NmaWxldCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAn aHRtbCcgICAgID0+ICd0ZXh0X2lucHV0JywKICAgICAgICAgICAgICAgICd0eXBlJyAgICAg PT4gUFJFRl9ISURERU4sCiAgICAgICAgICAgICAgICAncG9zaXRpb24nID0+IDE4MCwKICAg ICAgICAgICAgICAgICdkZWZhdWx0JyAgPT4gJ3tuYW1lfV92e3ZlcnNpb259X3tsYW5nfV90 ZXh0cGFjay50eHQnLAogICAgICAgICAgICAgICAgJ2dyb3VwJyAgICA9PiAnaWVkX3BsdWdp bl9wcmVmcycsCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdpZWRfcGx1Z2luX291dHB1 dF90bXBjYWNoZScgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnaHRtbCcgICAgID0+ICd0 ZXh0X2lucHV0JywKICAgICAgICAgICAgICAgICd0eXBlJyAgICAgPT4gUFJFRl9ISURERU4s CiAgICAgICAgICAgICAgICAncG9zaXRpb24nID0+IDE5MCwKICAgICAgICAgICAgICAgICdk ZWZhdWx0JyAgPT4gJHRlbXBkaXIsCiAgICAgICAgICAgICAgICAnZ3JvdXAnICAgID0+ICdp ZWRfcGx1Z2luX3ByZWZzJywKICAgICAgICAgICAgKSwKICAgICAgICApOwoKICAgICAgICBy ZXR1cm4gJGllZF9wY19wcmVmczsKICAgIH0KfQoKLyoqCiAqIEFkZCBwcmVmcyBjYWxsYmFj a3MgdG8gZ2xvYmFsIHNjb3BlLCBzaW5jZSBjcmVhdGVfcHJlZigpIGNhbid0IHRha2UKICog YXJyYXkvb2JqZWN0IHN5bnRheC4KICoKICogQHNlZSAgaHR0cHM6Ly9mb3J1bS50ZXh0cGF0 dGVybi5pby92aWV3dG9waWMucGhwP3BpZD0yOTgxODgjcDI5ODE4OAogKi8KaWYgKHR4cGlu dGVyZmFjZSA9PT0gJ2FkbWluJykgewogICAgLyoqCiAgICAgKiBMaXN0IG9mIHN1cHBvcnRl ZCBqYXZhc2NyaXB0IHN5bnRheCBoaWdobGlnaHRlciAvIGNvZGUgZWRpdG9ycy4KICAgICAq CiAgICAgKiBOQjogbm8gaTE4biBzaW5jZSB0aGVzZSBhcmUgdGhlIG5hbWVzIG9mIHRoZSBw cm9qZWN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkbmFtZSBQcmVmZXJlbmNl IG5hbWUKICAgICAqIEBwYXJhbSAgc3RyaW5nICR2YWwgIEN1cnJlbnQgcHJlZmVyZW5jZSB2 YWx1ZQogICAgICogQHJldHVybiBzdHJpbmcgICAgICAgSFRNTAogICAgICovCiAgICBmdW5j dGlvbiBpZWRfcGx1Z2luX2NvZGVfZWRpdG9ycygkbmFtZSwgJHZhbCA9ICcnKQogICAgewog ICAgICAgICRlZHNbJ25vbmUnXSA9IGdUeHQoJ25vbmUnKTsKICAgICAgICAkZWRzWydlZGl0 X2FyZWEnXSA9ICdFZGl0QXJlYSc7CiAgICAgICAgJGVkc1snY29kZW1pcnJvciddID0gJ0Nv ZGVNaXJyb3InOwogICAgICAgICRlZHNbJ2NvZGVwcmVzcyddID0gJ0NvZGVQcmVzcyc7Cgog ICAgICAgIHJldHVybiBzZWxlY3RJbnB1dCgkbmFtZSwgJGVkcywgJHZhbCwgZmFsc2UpOwog ICAgfQoKICAgIC8qKgogICAgICogTGlzdCBvZiBzdXBwb3J0ZWQgamF2YXNjcmlwdCBoZWxw IGVkaXRvcnMuCiAgICAgKgogICAgICogTkI6IG5vIGkxOG4gc2luY2UgdGhlc2UgYXJlIHRo ZSBuYW1lcyBvZiB0aGUgcHJvamVjdHMuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcg JG5hbWUgUHJlZmVyZW5jZSBuYW1lCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkdmFsICBDdXJy ZW50IHByZWZlcmVuY2UgdmFsdWUKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgIEhUTUwK ICAgICAqLwogICAgZnVuY3Rpb24gaWVkX3BsdWdpbl9oZWxwX2VkaXRvcnMoJG5hbWUsICR2 YWwgPSAnJykKICAgIHsKICAgICAgICAkZWRzWyd0ZXh0aWxlZSddID0gJ1RleHRpbGUnOwog ICAgICAgICRlZHNbJ3RpbnlfbWNlJ10gPSAnVGlueU1DRSc7CgogICAgICAgIHJldHVybiBz ZWxlY3RJbnB1dCgkbmFtZSwgJGVkcywgJHZhbCwgZmFsc2UpOwogICAgfQoKICAgIC8qKgog ICAgICogTGlzdCBvZiBsYW5ndWFnZSBvcHRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSAg c3RyaW5nICRuYW1lIFByZWZlcmVuY2UgbmFtZQogICAgICogQHBhcmFtICBzdHJpbmcgJHZh bCAgQ3VycmVudCBwcmVmZXJlbmNlIHZhbHVlCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAg ICBIVE1MCiAgICAgKi8KICAgIGZ1bmN0aW9uIGllZF9wbHVnaW5fbGFuZ19vcHRpb25zKCRu YW1lLCAkdmFsID0gJycpCiAgICB7CiAgICAgICAgJGxuZ3NbJ2luc3RhbGxlZCddID0gZ1R4 dCgnaWVkX3BsdWdpbl9sYW5nc19pbnN0YWxsZWQnKTsKICAgICAgICAkbG5nc1snYWxsJ10g PSBnVHh0KCdpZWRfcGx1Z2luX2xhbmdzX2FsbCcpOwoKICAgICAgICByZXR1cm4gc2VsZWN0 SW5wdXQoJG5hbWUsICRsbmdzLCAkdmFsLCBmYWxzZSk7CiAgICB9CgogICAgLyoqCiAgICAg KiBDb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBsYW5ndWFnZXMuCiAgICAgKgogICAgICog QHBhcmFtICBzdHJpbmcgJG5hbWUgUHJlZmVyZW5jZSBuYW1lCiAgICAgKiBAcGFyYW0gIHN0 cmluZyAkdmFsICBDdXJyZW50IHByZWZlcmVuY2UgdmFsdWUKICAgICAqIEByZXR1cm4gc3Ry aW5nICAgICAgIEhUTUwKICAgICAqLwogICAgZnVuY3Rpb24gaWVkX3BsdWdpbl9sYW5nX2Rl ZmF1bHQoJG5hbWUsICR2YWwgPSAnJykKICAgIHsKICAgICAgICAkbGFuZ3MgPSBhcnJheV9t ZXJnZShhcnJheSgnJyA9PiBnVHh0KCdpZWRfcGx1Z2luX2FueScpKSwgaWVkX3BjOjpsYW5n X2xpc3QoJ2FsbCcpKTsKCiAgICAgICAgcmV0dXJuIHNlbGVjdElucHV0KCRuYW1lLCAkbGFu Z3MsICR2YWwsIGZhbHNlKTsKICAgIH0KfQoKLyoqCiAqIFJlYWQgdGV4dHBhY2sgc3RyaW5n cyB3aXRoIHRoZSBnaXZlbiBwcmVmaXggZnJvbSB0aGUgZGF0YWJhc2UuCiAqCiAqIEBwYXJh bSAgc3RyaW5nICRsYW5nICAgTGFuZ3VhZ2Ugb2Ygc3RyaW5ncyB0byBmZXRjaAogKiBAcGFy YW0gIHN0cmluZyAkcHJlZml4IFByZWZpeCB0byBmaW5kCiAqIEByZXR1cm4gYXJyYXkgICAg ICAgICAgUmVjb3JkIHNldCBvZiBtYXRjaGluZyBzdHJpbmdzCiAqLwpmdW5jdGlvbiBpZWRf cGx1Z2luX3RleHRwYWNrX2dyYWIoJGxhbmcsICRwcmVmaXgpCnsKICAgIGlmICgkbGFuZyA9 PT0gJ0lFRF9BTEwnKSB7CiAgICAgICAgJGxhbmdfcXVlcnkgPSAnJzsKICAgIH0gZWxzZSB7 CiAgICAgICAgJGxhbmcgPSAoZW1wdHkoJGxhbmcpKSA/IGdldF9wcmVmKCdsYW5ndWFnZScs ICdlbi1nYicpIDogJGxhbmc7CiAgICAgICAgJGxhbmdzID0gcXVvdGVfbGlzdChkb19saXN0 KCRsYW5nKSk7CiAgICAgICAgJGxhbmdfcXVlcnkgPSAibGFuZyBJTiAoIi5pbXBsb2RlKCcs ICcsICRsYW5ncykuIikgQU5EICI7CiAgICB9CgogICAgcmV0dXJuICgkcHJlZml4KSA/IHNh ZmVfcm93cygnbmFtZSwgZGF0YSwgbGFuZywgZXZlbnQnLCAndHhwX2xhbmcnLCAkbGFuZ19x dWVyeS4ibmFtZSBMSUtFICciLmRvU2xhc2goJHByZWZpeCkuIiUnIE9SREVSIEJZIGV2ZW50 LGxhbmcsbmFtZSIpIDogYXJyYXkoKTsKfSI7czo0OiJ0eXBlIjtzOjE6IjUiO3M6NToib3Jk ZXIiO3M6MToiNSI7czo1OiJmbGFncyI7czoxOiIzIjtzOjQ6ImhlbHAiO3M6Mzg2Njc6Ijxo MT5pZWRfcGx1Z2luX2NvbXBvc2VyPC9oMT4KCjxwPkNyZWF0ZSwgcHVibGlzaCBhbmQgZWRp dCBwbHVnaW5zIGZyb20gd2l0aGluIFRleHRwYXR0ZXJuIDxzcGFuIGNsYXNzPSJjYXBzIj5D TVM8L3NwYW4+LjwvcD4KCjxwPkNyZWF0ZXMgYSBuZXcgcGFnZSB1bmRlciB0aGUgPGk+RXh0 ZW5zaW9uczwvaT4gdGFiIHdoZXJlIHlvdSBjYW4gZWRpdCBhbmQgZXhwb3J0IHBsdWdpbnMg dGhhdCBhcmUgYWxyZWFkeSBpbnN0YWxsZWQgaW4gVGV4dHBhdHRlcm4sIGFzIHdlbGwgYXMg Y3JlYXRlIG9yIHVwbG9hZCBuZXcgcGx1Z2lucyBjcmVhdGVkIGJ5IHRoZSBjb21tdW5pdHku PC9wPgoKPGgyPkZlYXR1cmVzPC9oMj4KCjx1bD4KCTxsaT5DcmVhdGUsIGVkaXQsIHVwbG9h ZCBvciBpbnN0YWxsIHBsdWdpbiBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCB0aGVuIHB1Ymxp c2ggeW91ciB3YXJlcyBpbiB0aGUgc3RhbmRhcmQgVGV4dHBhdHRlcm4gcGx1Z2luIGZvcm1h dC48L2xpPgoJPGxpPkZ1bGwgc3VwcG9ydCBmb3IgdGhlIG9mZmljaWFsIHplbV90cGwucGhw IHBsdWdpbiB0ZW1wbGF0ZSBhbmQgdGhlIG1vZGlmaWVkICYjODIyMDtjb2RlIGZpcnN0JiM4 MjIxOyB2ZXJzaW9uIGJ5IG5ldC1jYXJ2ZXIsIHdoaWNoIGFsc28gaW5jb3Jwb3JhdGVzIGEg JiM4MjE2O3N0eWxlJiM4MjE3OyBzZWdtZW50IGZvciB5b3VyIGhlbHAgdGV4dCAoYWx0aG91 Z2ggaXQgc2hvdWxkIGJlIHJhcmVseSBuZWVkZWQpLjwvbGk+Cgk8bGk+T3B0aW9uYWwgc3lu dGF4IGNoZWNrZXIgdG8gcHJvdGVjdCB0aGUgc2l0ZSAvIGFkbWluIHNpZGUgZnJvbSBiYWQg Y29kZS48L2xpPgoJPGxpPkV4cG9ydCBwbHVnaW5zIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRz LCBhbGxvd2luZyB5b3UgdG8gc3dpdGNoIGJldHdlZW4gZWRpdGluZyBpbiB0aGUgcGx1Z2lu IGNvbXBvc2VyIG9yIHlvdXIgZmF2b3VyaXRlIGVkaXRpbmcgcHJvZ3JhbS4gWW91IGNhbiBl eHBvcnQ6Cgk8dWw+CgkJPGxpPmEgc3RhbmRhcmQgQkFTRTY0LWVuY29kZWQgdGV4dCBmaWxl LjwvbGk+CgkJPGxpPmEgZ3ppcHBlZCB2ZXJzaW9uICh1c2VmdWwgZm9yIGxhcmdlIHBsdWdp bnMpLjwvbGk+CgkJPGxpPmEgcGhwIGZpbGUgaW4gdGhlIHN0YW5kYXJkIHRlbXBsYXRlIGZv cm1hdC48L2xpPgoJCTxsaT5UZXh0cGFja3Mgb24gdGhlaXIgb3duICYjODIxMjsgYW55IGNv bWJpbmF0aW9uIG9mIGxhbmd1YWdlcy48L2xpPgoJPC91bD48L2xpPgoJPGxpPlN1cHBvcnQg Zm9yIGFsbCBwbHVnaW4gdHlwZXM6IExpYnJhcnksIFB1YmxpYywgYW5kIEFkbWluICh3aXRo IG9yIHdpdGhvdXQgPHNwYW4gY2xhc3M9ImNhcHMiPkFKQVg8L3NwYW4+KS48L2xpPgoJPGxp PlNwZWNpZnkgYSByZWNvbW1lbmRlZCBwbHVnaW4gbG9hZCBvcmRlciBpZiB5b3VyIHBsdWdp biBuZWVkcyBzcGVjaWFsIHBvd2Vycy48L2xpPgoJPGxpPkRvY3VtZW50YXRpb24gY2FuIGJl IHdyaXR0ZW4gaW4gVGV4dGlsZSBvciA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4u PC9saT4KCTxsaT5UYWtlIGFkdmFudGFnZSBvZiB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9mb3J1 bS50ZXh0cGF0dGVybi5pby92aWV3dG9waWMucGhwP2lkPTEzMDg5Ij5UaW55TUNFIDxzcGFu IGNsYXNzPSJjYXBzIj5XWVNJV1lHPC9zcGFuPiBlZGl0b3I8L2E+IGZvciB0aGUgaGVscCBz ZWN0aW9uLCBvciBhIHZhcmlldHkgb2YgamF2YXNjcmlwdCBzeW50YXggaGlnaGxpZ2h0ZXJz IC8gZWRpdG9ycyBmb3IgY29kZS4gU2VlIHRoZSA8YSBocmVmPSIjaWVkX3BsdWdpbl9zZXR1 cCI+c2V0dXA8L2E+IHNlY3Rpb24gZm9yIG1vcmUgb24gdGhlIGF2YWlsYWJsZSBlZGl0b3Jz LjwvbGk+Cgk8bGk+QnVpbHQtaW4gVGV4dGlsZSBoZWxwIHZpZXdlciAodGhhbmtzIHRvIG5l dC1jYXJ2ZXImIzgyMTc7cyBQbHVnaW4gSGVscCBWaWV3ZXIpIHRvIGFsbG93IHlvdSB0byBw cmV2aWV3IHlvdXIgSGVscCB0ZXh0IGR1cmluZyBkZXZlbG9wbWVudC48L2xpPgoJPGxpPlNl dCBhIGNvZGUgJiM4MjIwO3Jlc3RvcmUgcG9pbnQmIzgyMjE7IGFuZCByb2xsIGJhY2sgdG8g dGhhdCBwb2ludCBpZiB0aGluZ3MgZ28gc2lkZXdheXMuIEFsc28gdXNlZnVsIGZvciByZXR1 cm5pbmcgcGx1Z2luIHNvdXJjZSBjb2RlIHRvIGl0cyBhcy1pbnN0YWxsZWQgc3RhdGUuPC9s aT4KPC91bD4KCjxoMj5JbnN0YWxsYXRpb24gYW5kIHVuaW5zdGFsbGF0aW9uPC9oMj4KCjxw PjxzdHJvbmc+UmVxdWlyZXMgVGV4dHBhdHRlcm4gNC42LjArPC9zdHJvbmc+PC9wPgoKPHA+ RG93bmxvYWQgdGhlIHBsdWdpbiAodjAuNSBhbmQgYWJvdmUpIGZyb20gPGEgaHJlZj0iaHR0 cDovL3N0ZWZkYXdzb24uY29tL2llZF9wbHVnaW5fY29tcG9zZXIiPnN0ZWZkYXdzb24uY29t PC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byBUZXh0cGF0dGVybiYjODIxNztzIDxlbT5BZG1p bi0mZ3Q7UGx1Z2luczwvZW0+IHBhZ2UsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2lu LjwvcD4KCjxwPlRoZSBkZWZhdWx0IHByZWZlcmVuY2VzIGFyZSBhdXRvbWF0aWNhbGx5IGNy ZWF0ZWQgd2hlbiB5b3UgaW5zdGFsbCB0aGUgcGx1Z2luIG9yIHZpc2l0IHRoZSBzZXR1cCBz Y3JlZW4sIGJ5IGNsaWNraW5nIHRoZSA8c3Ryb25nPlNldHVwPC9zdHJvbmc+IGJ1dHRvbiBp biB0aGUgdG9wIHJpZ2h0IGNvcm5lciBvZiB0aGUgPGVtPkV4dGVuc2lvbnMtJmd0O1BsdWdp biBjb21wb3NlcjwvZW0+IHBhbmVsLiBTZWUgdGhlIDxhIGhyZWY9IiNpZWRfcGx1Z2luX3Nl dHVwIj5zZXR1cCBzZWN0aW9uPC9hPiBmb3IgZGV0YWlscy48L3A+Cgo8cD5UbyByZW1vdmUg dGhlIHBsdWdpbiBjb21wb3NlciAobm9vb28hKSBzaW1wbHkgZGVsZXRlIGl0IGFzIG5vcm1h bCBmcm9tIHRoZSA8ZW0+QWRtaW4tJmd0O1BsdWdpbnM8L2VtPiBwYW5lbC4gQWxsIHRoZSBw cmVmZXJlbmNlcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcmVtb3ZlZCBhcyB3ZWxsLiA8c3Bh biBjbGFzcz0iY2FwcyI+Tk9URTwvc3Bhbj46IGRlbGV0aW5nIHRoZSBwbHVnaW4gZnJvbSB0 aGUgcGx1Z2luIGNvbXBvc2VyIHdpbmRvdyBpdHNlbGYgPHN0cm9uZz53aWxsIG5vdDwvc3Ry b25nPiBkZWxldGUgdGhlIHByZWZlcmVuY2VzIHVubGVzcyB5b3UgaGF2ZSBzZXQgdGhlIHBs dWdpbiB0byByZXNwb25kIHRvICYjODIxNjtkZWxldGUmIzgyMTc7IGxpZmVjeWNsZSBldmVu dHMuPC9wPgoKPHA+QWx0ZXJuYXRpdmVseSwgdGhpcyBwbHVnaW4gY2FuIGJlIGluc3RhbGxl ZCB1c2luZyA8YSBocmVmPSJodHRwczovL2dldGNvbXBvc2VyLm9yZyI+Q29tcG9zZXI8L2E+ OjwvcD4KCjxwcmU+PGNvZGU+JCBjb21wb3NlciByZXF1aXJlIGJsb2tlL2llZF9wbHVnaW5f Y29tcG9zZXI6KjwvY29kZT48L3ByZT4KCjxoMiBpZD0iaWVkX3BsdWdpbl9saXN0Ij5MaXN0 IHBhbmVsPC9oMj4KCjxwPkF0IHRoZSB0b3Agb2YgdGhlIG1haW4gcGFnZSBpcyBhIGNvbGxh cHNpYmxlIGFyZWEgbGFiZWxsZWQgPGNvZGU+SW5zdGFsbGF0aW9uPC9jb2RlPi4gVGhpcyBp cyBkZWFsdCB3aXRoIGluIHRoZSA8YSBocmVmPSIjaWVkX3BsdWdpbl9jcmVhdGUiPkNyZWF0 aW5nIHBsdWdpbnM8L2E+IHNlY3Rpb247IHRoZSByZXN0IG9mIHRoZSBwYWdlIGxpc3RzIGFs bCBpbnN0YWxsZWQgcGx1Z2lucy4gVGhlIGNvbHVtbnMgYXJlOjwvcD4KCjxkbD4KCTxkdD48 c3Ryb25nPlBsdWdpbjwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+Q2xpY2sgdGhlIHBsdWdpbiBuYW1l IHRvIDxhIGhyZWY9IiNpZWRfcGx1Z2luX2VkaXQiPmVkaXQ8L2E+IGl0LiBJZiB0aGUgcGx1 Z2luIGhhcyBwcmVmZXJlbmNlcyBhc3NvY2lhdGVkIHdpdGggaXQsIHlvdSB3aWxsIGFsc28g c2VlIGFuIDxzdHJvbmc+W09wdGlvbnNdPC9zdHJvbmc+IGxpbmsuPC9kZD4KCTxkdD48c3Ry b25nPkF1dGhvcjwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+SWYgYXZhaWxhYmxlLCBjbGljayB0aGUg YXV0aG9yIHRvIHZpc2l0IHRoZWlyIHNpdGUuPC9kZD4KCTxkdD48c3Ryb25nPlZlcnNpb24g KE1vZGlmaWVkKTwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+U2hvd3MgdGhlIGN1cnJlbnQgdmVyc2lv biBudW1iZXIgYW5kIHdoZXRoZXIgdGhlIHBsdWdpbiBoYXMgYmVlbiBtb2RpZmllZCBmcm9t IHdoZW4gaXQgd2FzIGVpdGhlciBjcmVhdGVkIG9yIGluc3RhbGxlZC4gSWYgaXQgaGFzLCB5 b3UgY2FuIGNsaWNrIHRoZSB2ZXJzaW9uIG51bWJlciB0byByZXN0b3JlIHRoZSBwbHVnaW4g Y29kZSB0byBpdHMgaW5zdGFsbGVkIHN0YXRlIG9yIGxhc3QgPGEgaHJlZj0iI2llZF9wbHVn aW5fcmVzdG9yZSI+cmVzdG9yZSBwb2ludDwvYT4uPC9kZD4KCTxkdD48c3Ryb25nPkRlc2Ny aXB0aW9uPC9zdHJvbmc+PC9kdD4KCTxkZD5BIGJyaWVmIG9uZS1saW5lIG92ZXJ2aWV3IG9m IHdoYXQgdGhlIHBsdWdpbiBkb2VzLjwvZGQ+Cgk8ZHQ+PHN0cm9uZz5QdWJsaXNoPC9zdHJv bmc+PC9kdD4KCTxkZD5UaHJlZSBsaW5rcwoJPGRsPgoJCTxkZD48ZW0+UHVibGlzaDwvZW0+ IDogZXhwb3J0cyB0aGUgcGx1Z2luIGFzIGEgLnR4dCBmaWxlIGZvciBkaXN0cmlidXRpb24g dG8gb3RoZXIgVGV4dHBhdHRlcm4gdXNlcnMuPC9kZD4KCQk8ZGQ+PGVtPlppcDwvZW0+IDog ZXhwb3J0cyB0aGUgcGx1Z2luIGFzIGEgY29tcHJlc3NlZCAoZ3ppcHBlZCkgLnR4dCBmaWxl IGZvciBkaXN0cmlidXRpb24uPC9kZD4KCQk8ZGQ+PGVtPkhlbHA8L2VtPiA6IGRpc3BsYXlz IHRoZSAodGV4dGlsZSBwcm9jZXNzZWQpIHBsdWdpbiBkb2N1bWVudGF0aW9uLCBpZiB0aGVy ZSBpcyBhbnkuPC9kZD4KCTwvZGw+PC9kZD4KCTxkZD5BbGwgdGhlc2UgdGFza3MgKGFuZCBt b3JlKSBjYW4gYmUgcGVyZm9ybWVkIGZyb20gdGhlIDxhIGhyZWY9IiNpZWRfcGx1Z2luX2Vk aXQiPmVkaXQgcGFuZWw8L2E+LjwvZGQ+Cgk8ZHQ+PHN0cm9uZz5PcmRlcjwvc3Ryb25nPjwv ZHQ+Cgk8ZGQ+VGhlIHJlY29tbWVuZGVkIHBsdWdpbiBsb2FkIG9yZGVyIGZyb20gMSAobG9h ZGVkIGZpcnN0KSB0byA5IChsb2FkZWQgbGFzdCkuIDUgaXMgZGVmYXVsdC48L2RkPgoJPGRk Pk5vdGUgdGhhdCBpZiB1c2luZyB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSB0aGlzIGZl YXR1cmUgaXMgPGVtPm9ubHkgYXZhaWxhYmxlIGlmIHRoZSA8Y29kZT4kcGx1Z2luWyYjMzk7 b3JkZXImIzM5O108L2NvZGU+IHN0cmluZyBpcyBpbiB0aGUgdGVtcGxhdGUgdG8gYmVnaW4g d2l0aC48L2VtPiBTbyBpZiB5b3VyIGxvYWQgb3JkZXIga2VlcHMgcmV0dXJuaW5nIHRvICYj ODIxNjs1JiM4MjE3OywgZWRpdCB5b3VyIHRlbXBsYXRlIGRpcmVjdGx5IHRvIGFkZCB0aGF0 IHN0cmluZywgb3IgcGFzdGUgeW91ciBwbHVnaW4gaW50byB0aGUgcmVsZXZhbnQgcGFydHMg b2YgdGhlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZXh0cGF0dGVybi90ZXh0cGF0 dGVybi1wbHVnaW4tdGVtcGxhdGUvYmxvYi9tYXN0ZXIvemVtX3BsdWdpbi5waHAiPmVtcHR5 IHBsdWdpbiB0ZW1wbGF0ZTwvYT4gYW5kIHVwbG9hZCBpdC48L2RkPgoJPGR0PjxzdHJvbmc+ QWN0aXZlPC9zdHJvbmc+PC9kdD4KCTxkZD5FbmFibGUgb3IgZGlzYWJsZSBhIHBsdWdpbiBi eSBjbGlja2luZyBlbnRyaWVzIGluIHRoaXMgY29sdW1uICYjODIxMjsgdGhpcyB3aWxsIG9u bHkgdHJpZ2dlciBhbnkgZW5hYmxlZC9kaXNhYmxlZCBsaWZlY3ljbGUgZXZlbnQgaW4geW91 ciBwbHVnaW4gaWYgeW91IGhhdmUgc2V0IHRoZSBwbHVnaW4gdG8gZG8gc28uPC9kZD4KPC9k bD4KCjxwPlVzZSB0aGUgbXVsdGktZWRpdCBjaGVja2JveGVzICh5b3UgY2FuIHNoaWZ0IGNs aWNrIHRoZW0gdG8gc2VsZWN0IG1vcmUgdGhhbiBvbmUgYXQgYSB0aW1lKSB0byBkZWxldGUg cGx1Z2lucyBvciBtYWtlIG1hc3MgY2hhbmdlcy4gRGVsZXRpb24gd2lsbCBvbmx5IHRyaWdn ZXIgdGhlICYjODIxNjtkZWxldGVkJiM4MjE3OyBsaWZlY3ljbGUgZXZlbnQgaWYgeW91IGhh dmUgdG9sZCB0aGUgY29tcG9zZXIgdG8gYWxsb3cgcGx1Z2lucyB0byByZXNwb25kIHRvIGxp ZmVjeWNsZSBldmVudHMuPC9wPgoKPHA+SWYgeW91IGFyZSB1c2luZyB0aGUgcGx1Z2luX2Nh Y2hlX2RpciAoPGVtPkFkbWluLSZndDtBZHZhbmNlZCBQcmVmczwvZW0+KSwgYW55IHBsdWdp bnMgaW4gdGhlIHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdCB1cGxvYWRlZCB0byB0aGlzIGRp cmVjdG9yeSB3aWxsIGJlIGF2YWlsYWJsZSBpbW1lZGlhdGVseSBmb3IgZWRpdGluZyBhbmQg dGVzdGluZy4gWW91IGNhbiBlZGl0IGFuZCBwdWJsaXNoIHRoZSBwbHVnaW5zIGluIHRoZSBz YW1lIG1hbm5lciBhcyB0aGUgcmVndWxhciwgaW5zdGFsbGVkIHBsdWdpbnMgYWJvdmUsIHdp dGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOjwvcD4KCjx1bD4KCTxsaT5UaGVyZSBpcyBu byBjb25jZXB0IG9mICYjODIxNjttb2RpZmllZCYjODIxNzsgb3Igb2YgcmVzdG9yZSBwb2lu dHMgYXMgdGhlIGZpbGVzIGFsd2F5cyByZXByZXNlbnQgdGhlIG1vc3QgdXAtdG8tZGF0ZSB2 ZXJzaW9uLiBVc2UgeW91ciBvd24gZXh0ZXJuYWwgdmVyc2lvbmluZy48L2xpPgoJPGxpPkNh Y2hlZCBwbHVnaW5zIGFyZSAmIzgyMjA7YWx3YXlzIG9uJiM4MjIxOyBhbmQgZG8gbm90IG5l ZWQgdG8gYmUgaW5zdGFsbGVkLiBUbyBkZWFjdGl2YXRlIHRoZSBwbHVnaW4gdGhlIGZpbGUg bXVzdCBiZSByZW1vdmVkIGZyb20gdGhlIHBsdWdpbiBjYWNoZSBkaXJlY3RvcnkuPC9saT4K CTxsaT5JdCBmb2xsb3dzIHRoYXQgdGhlIGxpZmVjeWNsZSBub3RpZmljYXRpb24gZXZlbnRz IChpbnN0YWxsZWQsIGRlbGV0ZWQsIGVuYWJsZWQsIGRpc2FibGVkKSBhcmUgbm90IHRyaWdn ZXJlZCBmcm9tIHBsdWdpbnMgaW4gdGhlIGNhY2hlIGRpcmVjdG9yeS48L2xpPgoJPGxpPlRo ZSByZWNvbW1lbmRlZCBsb2FkIG9yZGVyIGNhbm5vdCBiZSBjaGFuZ2VkIGZyb20gdGhlIGxp c3QgcGFuZWw7IGl0IGNhbiBvbmx5IGJlIGFsdGVyZWQgdmlhIHRoZSA8YSBocmVmPSIjaWVk X3BsdWdpbl9lZGl0Ij5lZGl0IHBhbmVsPC9hPi4gVGhlIHNwZWNpZmllZCBsb2FkIG9yZGVy IGlzIG9ubHkgd3JpdHRlbiB0byB0aGUgZmlsZSB3aGVuIHRoZSBwbHVnaW4gaXMgZXhwb3J0 ZWQuIExvYWQgb3JkZXIgaXMgYWxwaGFiZXRpY2FsIGZvciBhbGwgcGx1Z2lucyBpbiB0aGUg cGx1Z2luX2NhY2hlIGRpcmVjdG9yeS48L2xpPgo8L3VsPgoKPGgyIGlkPSJpZWRfcGx1Z2lu X2NyZWF0ZSI+Q3JlYXRpbmcsIGluc3RhbGxpbmcgYW5kIG5hbWluZyBwbHVnaW5zPC9oMj4K CjxwPlRoZXJlIGFyZSBhIGZldyB3YXlzIG9mIGNyZWF0aW5nIHBsdWdpbnMgZnJvbSB0aGUg Y29tcG9zZXImIzgyMTc7cyBsaXN0IHBhbmVsLiBFeHBhbmQgdGhlICYjODIxNjtJbnN0YWxs YXRpb24mIzgyMTc7IHR3aXN0eSBhdCB0aGUgdG9wIG9mIHRoZSBjb21wb3NlciYjODIxNztz IGxpc3QgcGFuZWwgdG8gc2VlIHRoZW0gYWxsLjwvcD4KCjxwPlRoZSBmaXJzdCBpcyB0byBj cmVhdGUgYSBibGFuaywgZW1wdHkgcGx1Z2luOyB1c2UgdGhlIGZpcnN0IHRleHQgYm94IGZv ciB0aGlzIGFuZCB0aGUgPHN0cm9uZz5DcmVhdGUgbmV3IHBsdWdpbjwvc3Ryb25nPiBidXR0 b24uIFBvaW50cyB0byBub3RlOjwvcD4KCjx1bD4KCTxsaT5JZiB5b3UgdXNlIGEgc3RhbmRh cmQgcGx1Z2luIG5hbWUgKGUuZy4gPGNvZGU+YWJjX215X3BsdWdpbjwvY29kZT4pIGl0IHdp bGwgYmUgY3JlYXRlZCBpbiB0aGUgZGF0YWJhc2UuPC9saT4KCTxsaT5JZiB5b3UgYWRkIDxj b2RlPi5waHA8L2NvZGU+IHRvIHRoZSBwbHVnaW4gbmFtZSwgaXQgd2lsbCBiZSBjcmVhdGVk IGluIHRoZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5IGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0 ZSBmb3JtYXQuPC9saT4KCTxsaT5Bdm9pZCBzcGVjaWZ5aW5nIHRoZSB2ZXJzaW9uIG9mIHRo ZSBwbHVnaW4gaW4gdGhlIG5hbWUgJiM4MjEyOyB5b3Ugc2hvdWxkIHVzZSB0aGUgPGI+UmVu YW1lIGZpbGU8L2I+IG9yIDxiPkV4cG9ydDwvYj4gb3B0aW9ucyBpbiB0aGUgPGEgaHJlZj0i I2llZF9wbHVnaW5fZWRpdCI+ZWRpdCBwYW5lbDwvYT4gdG8gYWx0ZXIgdGhlIGZpbGVuYW1l IGludG8geW91ciBwcmVmZXJyZWQgZmlsZW5hbWUgZm9ybWF0IChzZWUgPGEgaHJlZj0iI2ll ZF9wbHVnaW5fc2V0dXAiPnNldHVwPC9hPikuPC9saT4KPC91bD4KCjxwPlRoZSBzZWNvbmQg bWV0aG9kIG9mIGNyZWF0aW5nIGEgcGx1Z2luIGlzIHRvIHVwbG9hZCBvbmUgdXNpbmcgdGhl IEJyb3dzZS91cGxvYWQgYm94LiBQbGVhc2Ugbm90ZTo8L3A+Cgo8dWw+Cgk8bGk+WW91IGNh biB1cGxvYWQgY29kZSBhcyBlaXRoZXI6Cgk8dWw+CgkJPGxpPmEgc3RhbmRhcmQgcGx1Z2lu IGJhc2U2NCAudHh0IGZpbGUuPC9saT4KCQk8bGk+YSBzdGFuZGFyZCBwbHVnaW4gdGVtcGxh dGUgKGVpdGhlciBjb2RlLWZpcnN0IG9yIGhlbHAtZmlyc3QsIGNvbXBsZXRlIHdpdGggPHNw YW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gYXJlYXMpLjwvbGk+CgkJPGxpPmEgPHNwYW4g Y2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSBjb250YWluaW5nIHJhdyBjb2RlIG9ubHku PC9saT4KCTwvdWw+PC9saT4KCTxsaT5UaGUgcGx1Z2luIHdpbGwgYWx3YXlzIGJlIGluc3Rh bGxlZCBpbiB0aGUgZGF0YWJhc2Ugd2hlbiB1c2luZyB0aGlzIG1ldGhvZCAodXBsb2FkIHRl bXBsYXRlIHBsdWdpbnMgbWFudWFsbHkgdmlhIDxzcGFuIGNsYXNzPSJjYXBzIj5GVFA8L3Nw YW4+IG9yIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCBhIC5waHAgZXh0ZW5zaW9uIGFuZCBwYXN0 ZSB0aGUgY29kZSBpbnRvIGl0IGlmIHlvdSB3YW50IGl0IGluIHRoZSBwbHVnaW4gY2FjaGUp LjwvbGk+Cgk8bGk+SWYgdGhlIHBsdWdpbiBleGlzdHMgaXQgd2lsbCBiZSB1cGRhdGVkIHdp dGggeW91ciBuZXcgaW5mby48L2xpPgoJPGxpPlRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgeW91 IGNhbiB1cGxvYWQgcmF3IDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IHdpdGggPGNv ZGU+Jmx0Oz9waHAgPyZndDs8L2NvZGU+IG1hcmtlcnMuIEV2ZXJ5d2hlcmUgZWxzZSB5b3Ug c2hvdWxkIHVzZSBhIGZ1bGwgdGVtcGxhdGUuPC9saT4KCTxsaT5JZiB5b3UgYWRkIGEgcGx1 Z2luIE5hbWUgaW4gdGhlIGJveCBhYm92ZSB0aGUgdXBsb2FkIHdpZGdldCBiZWZvcmUgY2xp Y2tpbmcgPHN0cm9uZz5VcGxvYWQ8L3N0cm9uZz4sIHlvdXIgcGx1Z2luIHdpbGwgdGFrZSB0 aGF0IG5hbWUuPC9saT4KPC91bD4KCjxwPllvdSBtYXkgYWxzbyBpbnN0YWxsIGEgcGx1Z2lu IGp1c3QgbGlrZSBvbiB0aGUgPGVtPkFkbWluLSZndDtQbHVnaW5zPC9lbT4gcGFuZWwgYnkg Y29weWluZyBhbmQgcGFzdGluZyB0aGUgY29udGVudHMgb2YgYSBzdGFuZGFyZCBwbHVnaW4g LnR4dCBmaWxlIGludG8gdGhlIEluc3RhbGwgdGV4dGFyZWEgYW5kIGhpdHRpbmcgdGhlIDxz dHJvbmc+SW5zdGFsbDwvc3Ryb25nPiBidXR0b24uIE5vdGUgdGhlcmUgYXJlIGEgZmV3IGRp ZmZlcmVuY2VzIGZyb20gdGhlIGNvcmUmIzgyMTc7cyBpbnN0YWxsZXI6PC9wPgoKPHVsPgoJ PGxpPlRoZXJlIGlzIG5vIHByZXZpZXcgc3RlcDsgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQg aW1tZWRpYXRlbHksIHNvIGJlIHN1cmUgeW91IHRydXN0IHRoZSBjb2RlITwvbGk+Cgk8bGk+ WW91IGNhbiBjaG9vc2Ugd2hldGhlciB0aGUgcGx1Z2luIGlzIGFsbG93ZWQgdG8gcnVuIGl0 cyAmIzgyMTY7aW5zdGFsbCYjODIxNzsgbGlmZWN5Y2xlIGV2ZW50IGJ5IHVzaW5nIHRoZSBy YWRpbyBidXR0b25zIHRoYXQgYXBwZWFyLjwvbGk+Cgk8bGk+WW91IGNhbiBlbGVjdCB0byBo YXZlIHRoZSBwbHVnaW4gYXV0by1lbmFibGUgaXRzZWxmIGJ5IHNlbGVjdGluZyB0aGUgYXBw cm9wcmlhdGUgcmFkaW8gYnV0dG9uIGVudHJ5IHByaW9yIHRvIGNsaWNraW5nIDxlbT5JbnN0 YWxsPC9lbT4uPC9saT4KCTxsaT5UaGUgcmFkaW8gYnV0dG9ucyB0YWtlIG9uIHRoZSBkZWZh dWx0IHNldHRpbmdzIGZyb20gdGhlIDxhIGhyZWY9IiNpZWRfcGx1Z2luX3NldHVwIj5zZXR1 cCBwYW5lbDwvYT4uPC9saT4KPC91bD4KCjxwPkJ5IGNvbnZlbnRpb24sIGV2ZXJ5IHBsdWdp biBzaG91bGQgYmUgY3JlYXRlZCB3aXRoIGEgdGhyZWUtbGV0dGVyIHByZWZpeCwgYW4gdW5k ZXJzY29yZSwgdGhlbiB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luLiBZb3UgYXJlIGZyZWUgdG8g Y2hvb3NlIHlvdXIgb3duIHRocmVlLWxldHRlciBwcmVmaXggKHVzdWFsbHkgeW91ciBpbml0 aWFscykgc3ViamVjdCB0byA8YSBocmVmPSJodHRwczovL2RvY3MudGV4dHBhdHRlcm4uaW8v ZGV2ZWxvcG1lbnQvcGx1Z2luLWRldmVsb3Blci1wcmVmaXhlcyI+YXZvaWRpbmcgb25lcyBh bHJlYWR5IHRha2VuIGJ5IG90aGVyIHBsdWdpbiBhdXRob3JzPC9hPiBzbyBwZW9wbGUgY2Fu IGdldCB0byBrbm93IHlvdXIgd29yay4gUGx1cywgaXQgZ3JvdXBzIHlvdXIgcGx1Z2lucyB0 b2dldGhlciBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5z Ij5wbHVnaW4gcmVzcG9zaXRvcnk8L2E+LiBBbGwgZnVuY3Rpb25zLCB2YXJpYWJsZXMgKGlu Y2x1ZGluZyA8c3BhbiBjbGFzcz0iY2FwcyI+RE9NPC9zcGFuPiBub2RlcyksIDxzcGFuIGNs YXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzZXMsIFRleHRwYWNrIHN0cmluZ3MgYW5kIGFu eXRoaW5nIGVsc2UgeW91IGluamVjdCBpbnRvIHRoZSBnbG9iYWwgc2NvcGUgc2hvdWxkIGJl IHByZWZpeGVkIGJ5IDxzdHJvbmc+YXQgbGVhc3Q8L3N0cm9uZz4geW91ciB0aHJlZSBsZXR0 ZXIgY29kZTsgcHJlZmVyYWJseSB0aGUgd2hvbGUgcGx1Z2luIG5hbWUgKG9yIGFicmlkZ2Vk IHZlcnNpb24gdGhlcmVvZikgdG8gYXZvaWQgbmFtZXNwYWNlIGNsYXNoZXMgd2l0aCB5b3Vy IG93biBhbmQgb3RoZXIgcGx1Z2lucy48L3A+Cgo8aDIgaWQ9ImllZF9wbHVnaW5fZWRpdCI+ RWRpdCBwYW5lbDwvaDI+Cgo8cD5UaGlzIHBhbmVsIGlzIHdoZXJlIHlvdSBjcmFmdCB5b3Vy IG1hc3RlcnBpZWNlLiBJdCBpcyBkaXZpZGVkIGludG8gdmFyaW91cyBzZWN0aW9ucyBhbmQg Ym94ZXMuIFRoZSA8ZW0+UGFuZWxzPC9lbT4gYXJlYSBhbGxvd3MgeW91IHRvIHN3aXRjaCBi ZXR3ZWVuIHRoZSB2YXJpb3VzIHBhcnRzIG9mIHRoZSBwbHVnaW4uIEVhY2ggcGx1Z2luIGhh czo8L3A+Cgo8dWw+Cgk8bGk+TWV0YSBjb250ZW50IHN1Y2ggYXMgbmFtZSwgdmVyc2lvbiwg YW5kIGZsYWdzLjwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gY29k ZS48L2xpPgoJPGxpPlRleHRwYWNrIHN0cmluZ3MuPC9saT4KCTxsaT5Eb2N1bWVudGF0aW9u IC8gc3R5bGluZy48L2xpPgo8L3VsPgoKPHA+WW91IGVkaXQgZWFjaCBwYXJ0IHNlcGFyYXRl bHkgdG8gcmVkdWNlIG9uLXNjcmVlbiBjbHV0dGVyLCBhbmQgd2hlbiB5b3Ugc3dpdGNoIHN1 YnBhbmVscyB5b3VyIHNlbGVjdGlvbiBpcyByZW1lbWJlcmVkIHNvIHRoYXQgcGFuZWwgYXBw ZWFycyB3aGVuIGVkaXRpbmcgb3RoZXIgcGx1Z2lucy4gSGl0dGluZyA8c3Ryb25nPlNhdmU8 L3N0cm9uZz4gY29tbWl0cyBjaGFuZ2VzIGZyb20gdGhlIHdob2xlIHBhZ2UgJiM4MjEyOyBp bmNsdWRpbmcgc3VicGFuZWxzIHRoYXQgYXJlbiYjODIxNzt0IGN1cnJlbnRseSB2aXNpYmxl LjwvcD4KCjxoMz5NZXRhIHN1YnBhbmVsPC9oMz4KCjxkbD4KCTxkdD48c3Ryb25nPk5hbWU8 L3N0cm9uZz48L2R0PgoJPGRkPlRoZSBuYW1lIG9mIHlvdXIgcGx1Z2luLCB3aGljaCB5b3Ug Y2FuIGNoYW5nZSBhdCBhbnkgdGltZS4gTm90ZSB0aGF0IGlmIHlvdSBhcmUgZWRpdGluZyBh IGZpbGUgZnJvbSB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSBhbmQgdGhlIDxjb2RlPiRw bHVnaW5bJiMzOTtuYW1lJiMzOTtdPC9jb2RlPiByb3cgaXMgY29tbWVudGVkIG91dCBpbiB0 aGUgZmlsZSwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gY2hhbmdlIHRoZSBwbHVnaW4gbmFt ZTsgaXQgd2lsbCBhbHdheXMgYmUgdGhlIG5hbWUgb2YgdGhlIGZpbGUuPC9kZD4KCTxkdD48 c3Ryb25nPlZlcnNpb248L3N0cm9uZz48L2R0PgoJPGRkPlRoZSBjdXJyZW50IHZlcnNpb24g b2YgeW91ciBwbHVnaW4uIFlvdSBhcmUgZnJlZSB0byBjaG9vc2UgeW91ciBvd24gdmVyc2lv bmluZyBjb252ZW50aW9uLjwvZGQ+Cgk8ZGQ+VG8gdGhlIHJpZ2h0IG9mIHRoZXNlIGJveGVz IHdpbGwgYmUgc29tZSBvcHRpb25hbCBpdGVtcyB0aGF0IGFwcGVhciBkZXBlbmRpbmcgb24g dGhlIGN1cnJlbnQgbW9kZSBvZiBvcGVyYXRpb246Cgk8ZGw+CgkJPGRkPjxzdHJvbmc+UmVz dG9yZSBwb2ludDwvc3Ryb25nPiAoaW4tZGF0YWJhc2UgcGx1Z2lucyBvbmx5KTogc2VsZWN0 aW5nIHRoaXMgY2hlY2tib3ggd2lsbCAodXBvbiBjbGlja2luZyB0aGUgPHN0cm9uZz5TYXZl PC9zdHJvbmc+IGJ1dHRvbikgc3RvcmUgdGhlIGN1cnJlbnQgY29kZSBhcyBhIGJhc2VsaW5l IHRvIHdoaWNoIHlvdSBtYXkgJiM4MjIwO3JvbGwgYmFjayYjODIyMTsgdG8gYXQgYSBsYXRl ciBkYXRlLiBTZWUgPGEgaHJlZj0iI2llZF9wbHVnaW5fcmVzdG9yZSI+cmVzdG9yZSBwb2lu dHM8L2E+LjwvZGQ+CgkJPGRkPjxzdHJvbmc+UmVuYW1lIGZpbGU8L3N0cm9uZz4gKGNhY2hl X2RpciBwbHVnaW5zIG9ubHkpOiBieSBkZWZhdWx0LCB3aGVuIHlvdSBzYXZlIGEgZmlsZSBp biB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSwgaXQgaXMgb3ZlcndyaXR0ZW4gd2l0aCB5 b3VyIGNoYW5nZXMuIE9uY2UgYSBwbHVnaW4gaXMgcmVsZWFzZWQgeW91IHdvdWxkIG5vcm1h bGx5IGtlZXAgYSBjb3B5LCB0YWtlbiBmcm9tIHRoZSBwbHVnaW5fY2FjaGVfZGlyLCBmb3Ig c2FmZWtlZXBpbmcuIElmIHlvdSB0aGVuIHN1YnNlcXVlbnRseSBtb2RpZnkgdGhlIHBsdWdp biBhbmQgaW5jcmVhc2UgdGhlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IHdpc2ggdG8gYWx0 ZXIgdGhlIGZpbGVuYW1lIGFzIHdlbGwuIENoZWNraW5nIHRoaXMgYm94IHdpbGwgKHVwb24g Y2xpY2tpbmcgdGhlIDxzdHJvbmc+U2F2ZTwvc3Ryb25nPiBidXR0b24pIHJlbmFtZSB0aGUg ZmlsZSBpbiB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSB0byByZWZsZWN0IHRoZSBjdXJy ZW50IHZlcnNpb24gbnVtYmVyLiBTZWUgdGhlIDxhIGhyZWY9IiNpZWRfcGx1Z2luX3NldHVw Ij5zZXR1cCBwYW5lbDwvYT4gZm9yIGRldGFpbHMgb24gY3VzdG9taXNpbmcgdGhlIGZpbGVu YW1lIGZvcm1hdC48L2RkPgoJCTxkZD48c3Ryb25nPkVuYWJsZTwvc3Ryb25nPiAoaW4tZGF0 YWJhc2UgcGx1Z2lucyBvbmx5KTogc3dpdGNoIHRoZSBwbHVnaW4gb24gb3Igb2ZmIGFmdGVy IFNhdmUuPC9kZD4KCQk8ZGQ+PHN0cm9uZz4oZmlsZSBuYW1lKTwvc3Ryb25nPiAoY2FjaGVf ZGlyIHBsdWdpbnMgb25seSkgOiB0aGUgY3VycmVudCBmaWxlbmFtZSB5b3UgYXJlIGVkaXRp bmcuPC9kZD4KCTwvZGw+PC9kZD4KCTxkdD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+ PC9kdD4KCTxkZD5WZXJ5IGJyaWVmIG9uZS1saW5lciBkZXNjcmliaW5nIHlvdXIgcGx1Z2lu JiM4MjE3O3MgY29yZSBmdW5jdGlvbiAvIHJlYXNvbiBmb3IgZXhpc3RlbmNlLiAyNTUgY2hh cmFjdGVycyBtYXhpbXVtLjwvZGQ+Cgk8ZHQ+PHN0cm9uZz5BdXRob3I8L3N0cm9uZz4gOjwv ZHQ+Cgk8ZGQ+WW91ITwvZGQ+Cgk8ZHQ+PHN0cm9uZz5XZWJzaXRlPC9zdHJvbmc+PC9kdD4K CTxkZD5Zb3VyIGhvbWUgcGFnZSBvciBwbHVnaW4gcGFnZS4gV2lsbCBiZSBoeXBlcmxpbmtl ZCB0byB5b3VyIEF1dGhvciBuYW1lIGluIHRoZSA8YSBocmVmPSIjaWVkX3BsdWdpbl9saXN0 Ij5saXN0IHBhbmVsPC9hPi48L2RkPgoJPGR0PjxzdHJvbmc+UGx1Z2luIHR5cGU8L3N0cm9u Zz48L2R0PgoJPGRkPkNob29zZSBvbmUgb2YgdGhlIHR5cGVzIHRoYXQgYmVzdCBmaXRzIHRo ZSBpbnRlbmRlZCB1c2Ugb2YgeW91ciBwbHVnaW4uIElmIHlvdSBjaG9vc2UgJiM4MjE2O1B1 YmxpYyYjODIxNzsgYW5kIHRyeSB0byBhY2Nlc3MgdGhlIGFkbWluIHNpZGUgaW4geW91ciBj b2RlLCBhIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgd2hlbiB0aGUgcGx1Z2luIGlzIHNhdmVk IHNvIHlvdSBjYW4gY2hvb3NlIGEgbW9yZSBhcHByb3ByaWF0ZSB0eXBlLjwvZGQ+Cgk8ZHQ+ PHN0cm9uZz5GbGFnczwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+Q2hvb3NlIHdoaWNoIHBsdWdpbiBm bGFncyBhcmUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwbHVnaW46Cgk8ZGw+CgkJPGRk PjxzdHJvbmc+SGFzIHByZWZzPC9zdHJvbmc+IDogY2hlY2sgdGhpcyB0byBpbmRpY2F0ZSB5 b3VyIHBsdWdpbiByZXNwb25kcyB0byB0aGUgPGVtPnBsdWdpbl9wcmVmcy55b3VyX3BsdWdp bl9uYW1lPC9lbT4gZXZlbnQuPC9kZD4KCQk8ZGQ+PHN0cm9uZz5FdmVudCBub3RpZnk8L3N0 cm9uZz4gOiBjaGVjayB0aGlzIHRvIGluZGljYXRlIHlvdXIgcGx1Z2luIHJlc3BvbmRzIHRv IHRoZSA8ZW0+cGx1Z2luX2xpZmVjeWNsZS55b3VyX3BsdWdpbl9uYW1lPC9lbT4gZXZlbnQv c3RlcHMuPC9kZD4KCTwvZGw+PC9kZD4KCTxkdD48c3Ryb25nPkxvYWQgb3JkZXI8L3N0cm9u Zz48L2R0PgoJPGRkPkNob29zZSB0aGUgcmVjb21tZW5kZWQgb3JkZXIgaW4gd2hpY2ggeW91 IHRoaW5rIHlvdXIgcGx1Z2luIHNob3VsZCBiZSBsb2FkZWQgYnkgdXNlcnMuIE1vc3Qgb2Yg dGhlIHRpbWUsIHRoZSBkZWZhdWx0IG9mICYjODIxNjs1JiM4MjE3OyBpcyBmaW5lLCBidXQg Zm9yIHNwZWNpYWwgY2FzZXMgd2hlcmUgeW91ciBwbHVnaW4gaGFzIHRvIHNldCB1cCBhbiBl bnZpcm9ubWVudCBvciBoYXMgdG8gd2FpdCBmb3Igb3RoZXIgcGx1Z2lucyB0byBsb2FkIGZp cnN0LCB5b3UgbWlnaHQgcmVxdWlyZSBvbmUgb2YgdGhlIG51bWJlcnMgZWl0aGVyIHNpZGUu IEJlIGF3YXJlIHRoYXQgdGhpcyBpcyBhIDxlbT5yZWNvbW1lbmRhdGlvbjwvZW0+IGFuZCBp cyBvdmVycmlkYWJsZSBieSB0aGUgc2l0ZSBhZG1pbmlzdHJhdG9yLiBJZiB0aGUgcGx1Z2lu IGlzIGFscmVhZHkgZGVwbG95ZWQgb24gYSBzaXRlLCB0aGUgbG9hZCBvcmRlciB0aGF0IGlz IGFscmVhZHkgc2V0IHdpbGwgYmUgdXNlZCByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9m IHRoaXMgdmFsdWU7IG9ubHkgbmV3IGluc3RhbGxhdGlvbnMgd2lsbCBiZSBzZXQgdG8gdGhp cyB2YWx1ZSBieSBkZWZhdWx0LjwvZGQ+CjwvZGw+Cgo8aDM+UGx1Z2luIGNvZGU8L2gzPgoK PHA+WW91ciBwbHVnaW4gY29kZSBnb2VzIGhlcmUuIFdyaXRlIHlvdXIgbWFzdGVycGllY2Ug YW5kIGVpdGhlciBjbGljayB0aGUgbWFpbiA8c3Ryb25nPlNhdmU8L3N0cm9uZz4gYnV0dG9u ICh3aGljaCBzYXZlcyBldmVyeXRoaW5nOiBjb2RlLCBoZWxwLCBtZXRhIGRhdGEsIGV0Yykg b3IgaWYgeW91IGFyZSBzaW1wbHkgdXBkYXRpbmcganVzdCB0aGUgY29kZSBwb3J0aW9uLCB1 c2UgdGhlIDxzdHJvbmc+U2F2ZSBjb2RlPC9zdHJvbmc+IGJ1dHRvbiBhdCB0aGUgdG9wLXJp Z2h0IG9mIHRoZSBzdWJwYW5lbCBmb3IgcmFwaWQgYmFja2dyb3VuZCBzYXZpbmcuIER1cmlu ZyB0aGlzIHNhdmUgcHJvY2VzcywgdGhlIHRleHRhcmVhIGRpbXMgdG8gc2hvdyBpdCBpcyB3 b3JraW5nLCB0aG91Z2ggeW91IGNhbiBzdGlsbCBjb250aW51ZSB0byB0eXBlIGlmIHlvdSB3 aXNoLiBXaGVuIHRoZSB0ZXh0YXJlYSByZXR1cm5zIHRvIGZ1bGwgdmlzaWJpbGl0eSwgaXQg bWVhbnMgdGhlIHNhdmUgcHJvY2VzcyBpcyBjb21wbGV0ZS4gWW91ciBjb2RlIGlzIChvcHRp b25hbGx5KSBydW4gdGhyb3VnaCBhIHJ1ZGltZW50YXJ5IHN5bnRheCBjaGVja2VyIHdoZW4g dXNpbmcgdGhlIDxzdHJvbmc+U2F2ZSBDb2RlPC9zdHJvbmc+IGJ1dHRvbiBhbmQgYW55IGVy cm9yIGlzIGhpZ2hsaWdodGVkLiA8c3BhbiBjbGFzcz0id2FybmluZyI+SWYgYSBzeW50YXgg ZXJyb3IgaXMgZGV0ZWN0ZWQsIHlvdXIgcGx1Z2luIGlzIG5vdCBzYXZlZDwvc3Bhbj4uPC9w PgoKPHA+UGx1Z2lucyBhcmUgbGltaXRlZCB0byAxNk1iIG9mIGNvZGUgc28gdGhlcmUgaXMg YWxzbyBhIGNoYXJhY3RlciBjb3VudGRvd24ganVzdCBiZWxvdyB0aGUgZWRpdCBib3guIElm IHlvdSBzdGFydCBhcHByb2FjaGluZyB0aGUgbGltaXQoISksIGl0IG1pZ2h0IGJlIHdvcnRo IGNvbnNpZGVyaW5nIHNwbGl0dGluZyB5b3VyIHBsdWdpbiBpbnRvIGEgZmV3IHBhcnRzIG9y IHdvcmtpbmcgZm9yIE1pY3JvJG9mdCwgd2hlcmUgY29kZSBibG9hdCBpcyBhY2NlcHRhYmxl LjwvcD4KCjxwPkluIEZpcmVmb3gsIENocm9tZSBhbmQgSUUxMCsgeW91IGNhbiB1c2UgdGhl IDxlbT5KdW1wIHRvIGxpbmU6PC9lbT4gdGV4dGJveC4gRW50ZXIgYSBsaW5lIG51bWJlciBh bmQgcHJlc3MgRW50ZXIgdG8ganVtcCB0byB0aGF0IGxpbmUgaW4gdGhlIGNvZGUuIEluIG90 aGVyIGJyb3dzZXJzLCB5bW12LjwvcD4KCjxoMz5UZXh0cGFjayBzdHJpbmdzPC9oMz4KCjxw PkJlZm9yZSBUZXh0cGF0dGVybiA0LjMuMCwgYW55IHRpbWUgeW91IGRpc3BsYXllZCBhIHBs dWdpbi1zcGVjaWZpYyBzdHJpbmcgdG8gdGhlIHVzZXIgaXQgbWFkZSBzZW5zZSB0byB3cml0 ZSB5b3VyIG93biA8Y29kZT5nVHh0KCk8L2NvZGU+IGZ1bmN0aW9uIHdoaWNoIHBhY2thZ2Vk IHVwIHRoZSBzdHJpbmdzIGludG8gb25lIGFyZWEgb2YgeW91ciBwbHVnaW4uIFdoaWxlIGNv bnZlbmllbnQsIHRoaXMgbWVhbnQgdGhhdCBhbnlvbmUgd2hvIHdhbnRlZCB0byB1c2UgeW91 ciBwbHVnaW4gaW4gYW5vdGhlciBsYW51Z2FnZSBoYWQgdG8gZWRpdCB0aGUgcGx1Z2luIGNv ZGUgYW5kIHJld3JpdGUgeW91ciBzdHJpbmdzIGludG8gdGhlIHRhcmdldCBsYW5ndWFnZSwg d2hpY2ggY2F1c2VkIHVwZ3JhZGUgaGFzc2xlcy48L3A+Cgo8cD5UaGlzIGlzIG5vIGxvbmdl ciBhbiBpc3N1ZSwgYXMgVGV4dHBhdHRlcm4gbm93IGhhcyBUZXh0cGFja3M6IHJlZGlzdHJp YnV0YWJsZSB0ZXh0IGZpbGVzIHRoYXQgY29udGFpbiBsYW5ndWFnZSBzdHJpbmdzIGZvciBk aXJlY3QgaW5zZXJ0aW9uIGludG8gdGhlIGRhdGFiYXNlLjwvcD4KCjxwIGNsYXNzPSJ3YXJu aW5nIj5BIHdvcmQgb2YgY2F1dGlvbjogdGhlIFRleHRwYWNrIGFyZWEgd29ya3MgYSBsaXR0 bGUgZGlmZmVyZW50bHkgdG8gdGhlIHJlc3Qgb2YgdGhlIGVkaXQgcGFuZWw6IG1vc3QgY2hh bmdlcyBoYXBwZW4gbGl2ZSBhcyB5b3UgdHlwZS48L3A+Cgo8cD5CZWZvcmUgeW91IGJlZ2lu IHlvdSBuZWVkIHRvIGRlZmluZSBhIHRleHRwYWNrIHByZWZpeCBmb3IgdGhlIHBsdWdpbi4g VGhpcyBpcyB1c3VhbGx5IHlvdXIgdGhyZWUgbGV0dGVyIHBsdWdpbiBwcmVmaXggcGx1cyBz b21lIHVuaXF1ZSBpZGVudGlmaWVyIHdpdGggd2hpY2ggYWxsIHN0cmluZ3MgaW4gdXNlIGJ5 IHRoZSBwbHVnaW4gd2lsbCBiZWdpbi4gRm9yIGV4YW1wbGUsIHRoZSBwbHVnaW4gY29tcG9z ZXIgdXNlcyA8Y29kZT5pZWRfcGx1Z2luPC9jb2RlPiAodGhvdWdoIGl0IGNvdWxkIGhhdmUg dXNlZCA8Y29kZT5pZWRfcGNvbXA8L2NvZGU+IG9yIDxjb2RlPmllZF9wYzwvY29kZT4sIGV0 YykuIE5vdGUgdGhhdCB1c2luZyBqdXN0IHlvdXIgdGhyZWUgbGV0dGVyIHByZWZpeCBpcyBw cm9iYWJseSBub3Qgd2lzZSBiZWNhdXNlIHlvdXIgb3duIGZ1dHVyZSBwbHVnaW5zIG1pZ2h0 IHJlcXVpcmUgYSBzaW1pbGFybHktbmFtZWQgcmVwbGFjZW1lbnQgYW5kIHRoZSBzdHJpbmdz IHdvdWxkIGNsYXNoLiBPZiBjb3Vyc2UsIHlvdSBtaWdodCB3YW50IHRvIHRha2UgYWR2YW50 YWdlIG9mIHRoaXMgZmVhdHVyZSE8L3A+Cgo8cD5PbmNlIHlvdSBlbnRlciB0aGUgcHJlZml4 IGFuZCB5b3VyIGN1cnNvciBsZWF2ZXMgdGhlIGJveCwgdGhlIGNvbXBvc2VyIHdpbGwgc3Rv cmUgdGhlIHByZWZpeCBhbmQgc2VhcmNoIHRoZSBwbHVnaW4gY29kZSBpbW1lZGlhdGVseSBm b3IgYW55IHJlZmVyZW5jZXMgdG8gc3VjaCBwcmVmaXhlZCBzdHJpbmdzIGluc2lkZSBhbnkg ZnVuY3Rpb24gY2FsbCB3aXRoIDxjb2RlPmdUeHQ8L2NvZGU+IGluIGl0LiBBbnkgaXQgZG9l cyBmaW5kIHdpbGwgYmUgbGlzdGVkIGFuZCB5b3UgY2FuIGltbWVkaWF0ZWx5IGJlZ2luIGVu dGVyaW5nIHlvdXIgcmVwbGFjZW1lbnQgdGV4dCBpbiB0aGUgY3VycmVudGx5IHNlbGVjdGVk IGxhbmd1YWdlLiBXaGVuZXZlciB0aGUgY3Vyc29yIGxlYXZlcyBhIHRleHQgYm94IGl0cyBj b250ZW50cyBpcyBzYXZlZCBkaXJlY3RseSB0byB0aGUgZGF0YWJhc2UuPC9wPgoKPHA+VGV4 dHBhY2sgc3RyaW5ncyBjYW4gYmUgdXNlZCBvbiB0aGUgQWRtaW4gc2lkZSwgdGhlIFB1Ymxp YyBzaXRlLCBvciBib3RoLiBDaG9vc2UgdGhlIG1vc3QgYXBwcm9wcmlhdGUgbG9jYXRpb24g ZnJvbSB0aGUgZHJvcGRvd24gYWdhaW5zdCBlYWNoIHN0cmluZy48L3A+Cgo8cD5JZiB5b3Ug Y3JlYXRlIG9yIHJlbmFtZSBhIGdUeHQgc3RyaW5nIGluIHRoZSBjb2RlLCB3aGVuIHlvdXIg Y3Vyc29yIGxlYXZlcyB0aGUgdGV4dGFyZWEgdGhlIG5ldyBzdHJpbmcocykgd2lsbCBiZSBj cmVhdGVkIGZvciB5b3UgaW4gdGhlIHRleHRwYWNrIGFyZWEgYXQgdGhlIHRvcCBvZiB0aGUg bGlzdC4gTm90ZSBob3dldmVyIHRoZXkgYXJlIG5vdCB3cml0dGVuIHRvIHRoZSBkYXRhYmFz ZSB1bnRpbCB5b3Ugc3VwcGx5IGEgcmVwbGFjZW1lbnQgc3RyaW5nLjwvcD4KCjxwPkR1cmlu ZyB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZy9yZW5hbWluZyByZXBsYWNlbWVudCBzdHJpbmdz LCBpZiBpdCBvcnBoYW5zIGFub3RoZXIgc3RyaW5nIHRoZW4gdGhlIG9ycGhhbiB3aWxsIGJl IGhpZ2hsaWdodGVkIGFuZCBhbiBbeF0gYnV0dG9uIHdpbGwgYXBwZWFyIG5leHQgdG8gaXQu IElmIHlvdSB3aXNoIHRvIGNvcHkgdGhlIG9sZCBjb250ZW50IG91dCBvZiB0aGUgYm94IGFu ZCBwYXN0ZSBpdCBpbnRvIHlvdXIgcmVuYW1lZCBzdHJpbmcsIG5vdyBpcyB0aGUgdGltZSB0 byBkbyBzby4gT25jZSB5b3UmIzgyMTc7cmUgc3VyZSB5b3Ugbm8gbG9uZ2VyIG5lZWQgdGhl IHN0cmluZywgaGl0IHRoZSBbeF0gYnV0dG9uIHRvIGltbWVkaWF0ZWx5IGRlbGV0ZSBpdCBm cm9tIHRoZSBkYXRhYmFzZS4gSXQgd2lsbCBiZSByZW1vdmVkIGZyb20gPHN0cm9uZz5hbGw8 L3N0cm9uZz4gbGFuZ3VhZ2VzLjwvcD4KCjxwPlBsZWFzZSBub3RlOjwvcD4KCjx1bD4KCTxs aT5pZiB5b3UgcHJvZ3JhbW1hdGljYWxseSByZWZlciB0byBzdHJpbmdzIChlLmcuIGJ5IGNv bmNhdGVuYXRpbmcgc3RyaW5nIHBhcnRzIHRvZ2V0aGVyIHRvIGZvcm0gdGhlIGdUeHQgc3Ry aW5nIG5hbWUsIG9yIGl0ZXJhdGluZyBvdmVyIGEgbG9vcCBhbmQgdXNpbmcgdmFyaWFibGUg c3Vic3RpdHV0aW9uKSB0aGVuIHRoZXkgd2lsbCA8ZW0+bm90PC9lbT4gYmUgYXV0b21hdGlj YWxseSBiZSBkZXRlY3RlZC4gWW91IHdpbGwgaGF2ZSB0byB1c2UgdGhlICYjODIxNjsrJiM4 MjE3OyBidXR0b24gdG8gYWRkIHN1Y2ggc3RyaW5ncyBtYW51YWxseS48L2xpPgoJPGxpPmFu eSBwcm9ncmFtbWF0aWNhbGx5LWRlcml2ZWQgVGV4dHBhY2sgc3RyaW5ncywgb3Igb25lcyBu b3QgaW5zaWRlIGEgZ1R4dCgpIGZ1bmN0aW9uIHdpbGwgc2hvdyB1cCB3aXRoIGFuIFt4XSBi dXR0b24uIFlvdSBzaG91bGQgb2YgY291cnNlIG5vdCBkZWxldGUgdGhlc2Ugc3RyaW5ncyE8 L2xpPgoJPGxpPmFmdGVyIHlvdSBkbyBhIGZ1bGwgc2F2ZSAoaS5lLiBub3QganVzdCBhIDxz dHJvbmc+U2F2ZSBDb2RlPC9zdHJvbmc+KSBhbGwgc3RyaW5ncyB0aGF0IGFyZSBkZWZpbmVk IGZvciB0aGUgcGx1Z2luIHdpbGwgYmUgZGlzcGxheWVkLiBBbnkgZGVyaXZlZCBzdHJpbmdz IHdpbGwgc3RpbGwgYmUgaGlnaGxpZ2h0ZWQgYXMgcG90ZW50aWFsIG9ycGhhbnMuPC9saT4K CTxsaT5zd2l0Y2hpbmcgbGFuZ3VhZ2UgZnJvbSB0aGUgc2VsZWN0IGxpc3Qgd2lsbCBpbW1l ZGlhdGVseSBsb2FkIHN0cmluZ3MgZm9yIHRoYXQgbGFuZ3VhZ2UuPC9saT4KCTxsaT5jbGlj a2luZyA8c3Ryb25nPkxvYWQ8L3N0cm9uZz4gZG9lcyB0aGUgc2FtZSB0YXNrIGFzIHN3aXRj aGluZyBsYW5ndWFnZSBhbmQgaXMgdGhlcmUgaW4gY2FzZSB5b3Ugb25seSBoYXZlIG9uZSBs YW5ndWFnZSBpbnN0YWxsZWQgb3Igd2lzaCB0byByZWZyZXNoIHRoZSBzdHJpbmdzIGluIHRo ZSBjdXJyZW50IGxhbmd1YWdlLjwvbGk+CjwvdWw+Cgo8aDQ+SW1wb3J0aW5nIHN0cmluZ3Mg ZnJvbSB0aGUgY3VycmVudCBwbHVnaW48L2g0PgoKPHA+VGhlIHN1Y2Nlc3Mgb2YgdGhlIGF1 dG9tYXRpYyBmaW5kIGZhY2lsaXR5IHJlbGllcyBvbiB0d28gdGhpbmdzOjwvcD4KCjx1bD4K CTxsaT50aGF0IHRoZSBzdHJpbmdzIGFyZSBhbGwgcHJlZml4ZWQuPC9saT4KCTxsaT55b3Vy IHBsdWdpbiYjODIxNztzIFR5cGUgaXMgb25lIG9mIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+ QUpBWDwvc3Bhbj4gdHlwZXMgKDQgb3IgNSkuPC9saT4KPC91bD4KCjxwPklmIHlvdSYjODIx NztyZSBjb252ZXJ0aW5nIGFuIG9sZCBwbHVnaW4gdG8gdGhlIFRleHRwYWNrIG1ldGhvZG9s b2d5IHRoZW4geW91IG1heSBoYXZlIGh1bmRyZWRzIG9mIHN0cmluZ3MgdGhhdCB3b3VsZCBi ZSBhIGJpbmQgdG8gY29weSBvbmUgYnkgb25lLiBUaGUgY29tcG9zZXIgY2FuIHRyeSB0byBo ZWxwIHlvdSBvdXQsIGJ1dCBpdCBvbmx5IHdvcmtzIGlmIHlvdSBoYXZlIGEgZnVuY3Rpb24g b3IgbWV0aG9kIGluIHlvdXIgcGx1Z2luIHdoZXJlIHRoZSBzdHJpbmdzIGFyZSByZXBsYWNl ZCBhbmQgcmV0dXJuZWQuIElmIHlvdSBkb24mIzgyMTc7dCBoYXZlIHRoYXQsIG5vdyBtaWdo dCBiZSB0aGUgdGltZSB0byBkbyBzbyB0byBzYXZlIHlvdXJzZWxmIHNvbWUgZWZmb3J0ISBJ dCBkb2VzbiYjODIxNzt0IGhhdmUgdG8gYmUgcmVmZXJlbmNlZCBpbiB0aGUgY29kZSwgaXQg anVzdCBoYXMgdG8gZXhpc3QgYW5kIHJldHVybiBhIHN0cmluZyBmb3IgYSBnaXZlbiBuYW1l LjwvcD4KCjxwPk9uY2UgeW91IGhhdmUgdGhhdCBpbiBwbGFjZSwgaGVyZSBhcmUgc29tZSBz dGVwcyB5b3UgY2FuIGdvIHRocm91Z2ggdG8gY29udmVydCB5b3VyIHBsdWdpbiBhbmQgZ3Jh YiBhbGwgdGhlIG5lY2Vzc2FyeSBzdHJpbmdzIGVuIG1hc3NlOjwvcD4KCjxvbD4KCTxsaT5p bnNpZGUgeW91ciBwbHVnaW4mIzgyMTc7cyBnVHh0KCkgZnVuY3Rpb24sIGVuc3VyZSB0aGF0 IGFsbCBrZXlzIGFyZSBwcmVmaXhlZCB3aXRoIHlvdXIgbm9taW5hdGVkIHBsdWdpbiBwcmVm aXguPC9saT4KCTxsaT5nbG9iYWxseSByZXBsYWNlIGFueSByZWZlcmVuY2UgdG8gPGNvZGU+ YWJjX3BsdWdpbl9nVHh0KCYjMzk7PC9jb2RlPiB3aXRoIDxjb2RlPmFiY19wbHVnaW5fZ1R4 dCgmIzM5O2FiY19wcmVmaXhfPC9jb2RlPiwgaWYgbm90IGFscmVhZHkuPC9saT4KCTxsaT5z YXZlIHRoZSBwbHVnaW4gZnJvbSB0aGUgY29tcG9zZXIgd2luZG93LjwvbGk+Cgk8bGk+ZW50 ZXIgdGhlIFRleHRwYWNrIHByZWZpeCBpZiBpdCYjODIxNztzIG5vdCBhbHJlYWR5IHNldC48 L2xpPgoJPGxpPmdpdmUgdGhlIG5hbWUgb2YgeW91ciBnVHh0IGZ1bmN0aW9uLCBlLmcuIDxj b2RlPmllZF9wbHVnaW5fZ1R4dDwvY29kZT4gaW4gdGhlIDxpPkxvYWQgc3RyaW5ncyBmcm9t IGZ1bmN0aW9uPC9pPiBib3guIElmIHlvdXIgPGNvZGU+Z1R4dCgpPC9jb2RlPiBtZXRob2Qg aXMgaW5zaWRlIGEgY2xhc3MsIHNwZWNpZnkgPGNvZGU+Y2xhc3NfbmFtZTo6bWV0aG9kX25h bWU8L2NvZGU+IGluc3RlYWQuPC9saT4KCTxsaT5oaXQgJiM4MjE2O0dvJiM4MjE3Oy48L2xp Pgo8L29sPgoKPHA+SWYgdGhlIGNvbXBvc2VyIGNhbiBleGVjdXRlIHlvdXIgY2hvc2VuIGZ1 bmN0aW9uIHRoZW4gaXQmIzgyMTc7bGwgZG8gc28gYW5kIHJldHVybiB0aGUgc3RyaW5ncyBh cyBkZWZpbmVkIGluc2lkZSB0aGUgZnVuY3Rpb24sIHBvcHVsYXRlIGVhY2ggVGV4dHBhY2sg c3RyaW5nIGFuZCBzYXZlIGl0IGZvciB5b3UgaW4gdGhlIGRhdGFiYXNlIGF1dG9tYXRpY2Fs bHkuIE9uY2UgdGhhdCYjODIxNztzIGRvbmUgYW5kIGFsbCBzdHJpbmdzIGFyZSBwb3B1bGF0 ZWQgeW91IGNhbiB0aGVuOjwvcD4KCjxvbD4KCTxsaT5nbG9iYWxseSByZXBsYWNlIGFueSBj YWxscyB0byA8Y29kZT5hYmNfcGx1Z2luX2dUeHQ8L2NvZGU+IHdpdGggdGhlIGNvcmUgPGNv ZGU+Z1R4dDwvY29kZT4gaW4geW91ciBwbHVnaW4gY29kZS48L2xpPgoJPGxpPmRlbGV0ZSB5 b3VyIGFiY19wbHVnaW5fZ1R4dCBmdW5jdGlvbi48L2xpPgo8L29sPgoKPHA+VGV4dHBhY2sg c3RyaW5ncyBhcmUgYWxzbyB3cml0dGVuIHRvIHRoZSBmaWxlIG9mIGFueSBwbHVnaW4geW91 IGFyZSBlZGl0aW5nIGluIHRoZSBjYWNoZV9kaXIgd2hlbiB5b3UgU2F2ZSB0aGUgcGx1Z2lu LCBhcyBsb25nIGFzIHlvdSBhcmUgdXNpbmcgYSByZWNlbnQgdGVtcGxhdGUgdGhhdCBoYXMg dGhlIDxjb2RlPiRwbHVnaW5bJiMzOTt0ZXh0cGFjayYjMzk7XTwvY29kZT4gc3RyaW5nIGlu IGl0LjwvcD4KCjxwPjxzdHJvbmc+U3dpdGNoaW5nIGxhbmd1YWdlPC9zdHJvbmc+PC9wPgoK PHA+SWYgYXQgYW55IHRpbWUgeW91IHdhbnQgdG8gc2VlIHRoZSBpbnN0YWxsZWQgdGV4dHBh Y2sgc3RyaW5ncyBpbiBvdGhlciBsYW5ndWFnZXMsIHNpbXBseSB1c2UgdGhlIHNlbGVjdCBs aXN0IHRvIGNob29zZSBvbmUuIEFueSBkZWZpbmVkIHN0cmluZ3Mgd2lsbCBiZSBsb2FkZWQg aW50byB0aGUgdGV4dHBhY2sgZmllbGRzLiBZb3UmIzgyMTc7bGwgc2VlIGEgY291bnRlciB3 aGl6emluZyB1cCB0byBzaG93IHlvdSBob3cgZmFyIGl0JiM4MjE3O3MgZ29uZS4gQXMgYSB0 cmFuc2xhdGlvbiBhaWQsIHRoZSBlcXVpdmFsZW50IHN0cmluZyBpbiB5b3VyIG5vbWluYXRl ZCBkZWZhdWx0IGxhbmd1YWdlIChzZWUgPGEgaHJlZj0iI2llZF9wbHVnaW5fc2V0dXAiPnNl dHVwPC9hPikgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgeW91IGhvdmVyIG92ZXIgdGhlIHRleHRw YWNrIGVudHJ5LiBZb3UgY2FuIGNob29zZSB0byB0cmFuc2xhdGUgc3RyaW5ncyB5b3Vyc2Vs ZiBvciB5b3UgY2FuIGRlZmVyIHRyYW5zbGF0aW9uIHRvIG90aGVyIG1lbWJlcnMgb2YgdGhl IGNvbW11bml0eSBhZnRlciB0aGUgcGx1Z2luIGlzIHB1Ymxpc2hlZC4gVGV4dHBhY2tzIGNh biBiZSBsaW5rZWQgdG8geW91ciB0ZXh0cGF0dGVybi5vcmcgcGx1Z2luIHBhZ2UgYnkgY29u dHJpYnV0b3JzIGFuZCBpbnN0YWxsZWQgYXQgYW55IHRpbWUgZnJvbSBUZXh0cGF0dGVybiYj ODIxNztzIDxlbT5BZG1pbi0mZ3Q7TGFuZ3VhZ2VzPC9lbT4gdGFiLjwvcD4KCjxoMz5QbHVn aW4gaGVscDwvaDM+Cgo8cD5Eb2N1bWVudGF0aW9uIGZvciBkZXRhaWxpbmcgdGhlIHBsdWdp biB1c2FnZS4gQ2FuIChwcm9iYWJseSBzaG91bGQhKSBiZSB3cml0dGVuIHVzaW5nIDxhIGhy ZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5jb20vdGV4dGlsZS1zYW5kYm94Ij5UZXh0aWxlPC9h Pi4gVGhlcmUgYXJlIHNvbWUgPGEgaHJlZj0iaHR0cHM6Ly9kb2NzLnRleHRwYXR0ZXJuLmlv L2RldmVsb3BtZW50L3BsdWdpbi11c2VyLWhlbHAtZ3VpZGVsaW5lcyI+ZG9jdW1lbnRhdGlv biBndWlkZWxpbmVzPC9hPiB0aGF0IHNlcnZlIGFzIGEgZ29vZCBzdGFydGluZyBwb2ludC4g Tm90ZSB0aGF0IHRoZSBjaGFyYWN0ZXIgY291bnRkb3duIGhlcmUgaXMgb25seSBhcHByb3hp bWF0ZSBiZWNhdXNlIHdoZW4geW91ciBwbHVnaW4gaXMgc2F2ZWQgYW5kIHRoZSBoZWxwIGlz IGNvbnZlcnRlZCB0byA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4sIGl0IHVzdWFs bHkgdGFrZXMgdXAgbW9yZSBzcGFjZSB0aGFuIFRleHRpbGU7IHBsZWFzZSBjaGVjayB0aGF0 IHlvdXIgaGVscCBmaWxlIHJlbmRlcnMgY29ycmVjdGx5IHdoZW4geW91ciBwbHVnaW4gaXMg ZXhwb3J0ZWQuPC9wPgoKPHA+VGhlIDxlbT5TdHlsZTwvZW0+IGJveCBpcyBmb3IgYW55IDxz cGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IHN0eWxlIHJ1bGVzIHlvdSB3aXNoIHRvIGFw cGx5IHRvIHlvdXIgZG9jdW1lbnRhdGlvbiwgYWx0aG91Z2ggeW91IHNob3VsZCBub3QgbmVl ZCB0aGlzIHdpdGggbW9kZXJuIGFkbWluIHRoZW1lcy4gWW91IGFyZSBlbmNvdXJhZ2VkIHRv IHJldXNlIHRoZSBhZG1pbiYjODIxNztzIGNvcmUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwv c3Bhbj4gcnVsZXMgYXMgb2Z0ZW4gYXMgcG9zc2libGUsIGJ1dCBpZiB0aGVyZSBpc24mIzgy MTc7dCBvbmUgdGhhdCBzdWl0cywgaXQmIzgyMTc7cyBiZXN0IHRvIHRhcmdldCB5b3VyIGRv Y3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IGJ5IHN1cnJvdW5kaW5nIHRoZSBlbnRpcmUgUGx1 Z2luIEhlbHAgc2VjdGlvbiB3aXRoIHNvbWV0aGluZyBsaWtlOiA8Y29kZT4mbHQ7ZGl2IGlk PSZxdW90O2FiY19oZWxwJnF1b3Q7Jmd0O2gxLiBEb2NzIGdvIGhlcmUuLi4mbHQ7L2RpdiZn dDs8L2NvZGU+LjwvcD4KCjxwPk5vdGUgdGhhdCBib3RoIHRoZSBQbHVnaW4gSGVscCBhbmQg U3R5bGUgYXJlIGdvdmVybmVkIGJ5IGEgc2l6ZSBsaW1pdC4gU2luY2UgdGhleSBhcmUgYm90 aCBzdG9yZWQgaW4gdGhlIHNhbWUgNjRLQiBmaWVsZCwgdGhlIHNpemUgaXMgc2hhcmVkIGJl dHdlZW4gdGhlbS4gU3R5bGVzIGFyZSA8ZW0+bm90PC9lbT4gcGFzc2VkIHRocm91Z2ggdGhl IFRleHRpbGUgcHJvY2Vzc29yIGFuZCB5b3UgZG9uJiM4MjE3O3QgbmVlZCB0byBhZGQgdGhl IDxjb2RlPiZsdDtzdHlsZSZndDs8L2NvZGU+IHRhZ3M7IHRoZSBjb21wb3NlciB3aWxsIGRv IHRoYXQgZm9yIHlvdSAoYnV0IHNlZSB0aGUgPGEgaHJlZj0iI2llZF9wbHVnaW5fbm90ZXMi Pm5vdGVzPC9hPikuPC9wPgoKPHA+Q2xpY2sgdGhlIDxzdHJvbmc+W0RvY3NdPC9zdHJvbmc+ IGxpbmsgYWxvbmdzaWRlIHRoZSBQbHVnaW4gaGVscCBoZWFkaW5nIHRvIHNob3cgdGhlIGRv Y3VtZW50YXRpb24gYXMgdXNlcnMgd2lsbCBzZWUgaXQgKGkuZS4gVGV4dGlsZSBwcm9jZXNz ZWQgaW50byA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4pLiBBbnkgaGVscCB0ZXh0 IG92ZXIgNjRLQiBpbiBsZW5ndGggaXMgdHJ1bmNhdGVkIHNvIHlvdSBjYW4gdmVyaWZ5IHRo YXQgYWxsIHlvdXIgZG9jdW1lbnRhdGlvbiBmaXRzIGludG8gdGhlIHVzZXJzJiM4MjE3OyBk ZXN0aW5hdGlvbiBkYXRhYmFzZS48L3A+CgoKPGgzPkRpc3RyaWJ1dGlvbjwvaDM+Cgo8cD5P bmNlIHlvdSBoYXZlIHNhdmVkIHlvdXIgcGx1Z2luLCB0aGVyZSBpcyBhIHNlY3Rpb24gdGhh dCBhbGxvd3MgeW91IHRvIGV4cG9ydCB5b3VyIHBsdWdpbiBpbiBhIHZhcmlldHkgb2YgZm9y bWF0cy4gQSBsYW5ndWFnZSBzZWxlY3QgYm94IGdvdmVybnMgaG93IFRleHRwYWNrcyBhcmUg ZGVhbHQgd2l0aC4gSWYgeW91IGNob29zZSB0aGUgZmlyc3QgKGVtcHR5KSBpdGVtIHRoZW4g bm8gVGV4dHBhY2sgaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIGV4cG9ydGVkIGZp bGUuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB3aGVuIHlvdSBzYXZlIFRleHRwYWNrcyBkaXJl Y3RseTogdGhlIGZpcnN0IGl0ZW0gaXMgYSBzaG9ydGN1dCBmb3IgJiM4MjE2O2FsbCBsYW5n dWFnZXMmIzgyMTc7IHRvIHNhdmUgeW91IGhhdmluZyB0byBzZWxlY3QgdGhlbSBhbGwuPC9w PgoKPHVsPgoJPGxpPjxzdHJvbmc+UGx1Z2luIGNvZGUgZm9yIGRpc3RyaWJ1dGlvbjwvc3Ry b25nPiA6IGlzIGEgZGlyZWN0IGNvcHkgJiM4MjE2O24mIzgyMTc7IHBhc3RlIGFyZWEgdGhh dCBjb250YWlucyB5b3VyIGVudGlyZSBwbHVnaW4gKyBkb2NzLiBZb3UgY2FuIHRha2UgdGhp cyBlbnRpcmUgYXJlYSBhbmQgcGFzdGUgaXQgaW50byB0aGUgJiM4MjE2O0luc3RhbGwgcGx1 Z2luJiM4MjE3OyBib3guIFNpbmNlIHRoaXMgYWRkcyB0byB0aGUgdGltZSBpdCB0YWtlcyB0 byBkbyBhIGZ1bGwgc2F2ZSBvZiB0aGUgcGx1Z2luLCB0aGlzIHBvcnRpb24gaXMgb3B0aW9u YWwgYW5kIGNhbiBiZSBlbmFibGVkIGZyb20gdGhlIDxhIGhyZWY9IiNpZWRfcGx1Z2luX3Nl dHVwIj5zZXR1cCBwYW5lbDwvYT4uPC9saT4KCTxsaT48c3Ryb25nPkV4cG9ydCBhcyBhYmNf bXlwbHVnaW4udHh0PC9zdHJvbmc+IDogY29udmVydHMgdGhlIHBsdWdpbiBoZWxwIHRvIDxz cGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBhbmQgc2F2ZXMgdGhlIHBsdWdpbiB0byB5 b3VyIGNvbXB1dGVyIGFzIGEgcmVkaXN0cmlidXRhYmxlIHRleHQgZmlsZSBmb3Igb3RoZXIg VGV4dHBhdHRlcm4gdXNlcnMgdG8gaW5zdGFsbC4gSWYgeW91IGhhdmUgY2hvc2VuIGFueSBU ZXh0cGFjayBsYW5ndWFnZXMgZnJvbSB0aGUgYWRqYWNlbnQgc2VsZWN0IGxpc3QsIHRoZXkg d2lsbCBiZSBidW5kbGVkIHdpdGggeW91ciBwbHVnaW4gYW5kIHRodXMgaW5zdGFsbGVkIGF1 dG9tYXRpY2FsbHkgaWYgdGhlIGxhbmd1YWdlIG1hdGNoZXMgdGhlIG9uZSBpbiB1c2UgYnkg dGhlIGFkbWluaXN0cmF0b3Igd2hvIGluc3RhbGxzIHRoZSBwbHVnaW4uPC9saT4KCTxsaT48 c3Ryb25nPkV4cG9ydCBhcyBhYmNfbXlwbHVnaW4udHh0IChjb21wcmVzc2VkKTwvc3Ryb25n PiA6IGNvbnZlcnRzIHRoZSBwbHVnaW4gaGVscCB0byA8c3BhbiBjbGFzcz0iY2FwcyI+SFRN TDwvc3Bhbj4gYW5kIHNhdmVzIHRoZSBwbHVnaW4gYXMgYSByZWRpc3RyaWJ1dGFibGUsIGd6 aXBwZWQgdGV4dCBmaWxlIGZvciBvdGhlciBUZXh0cGF0dGVybiB1c2VycyB0byBpbnN0YWxs LiBVc2VmdWwgZm9yIGxhcmdlIHBsdWdpbnMgb3IgdG8gb2ZmZXIgYW4gYWx0ZXJuYXRpdmUg Zm9yIHBlb3BsZSB3aG8gaGF2ZSBzdHJpbmdlbnQgc2l6ZSBsaW1pdHMgaW1wb3NlZCBieSB0 aGVpciBob3N0LiBUZXh0cGFjayBzdHJpbmdzIGFyZSBidW5kbGVkIHRvbyBpZiB5b3UgaGF2 ZSBjaG9zZW4gYXQgbGVhc3Qgb25lIGxhbmd1YWdlIGZyb20gdGhlIHNlbGVjdCBsaXN0Ljwv bGk+Cgk8bGk+PHN0cm9uZz5FeHBvcnQgYXMgYWJjX215cGx1Z2luLnBocDwvc3Ryb25nPiA6 IHNhdmVzIHRoZSBwbHVnaW4gaW4gYSBUZXh0cGF0dGVybiBzdGFuZGFyZCB0ZW1wbGF0ZSBm b3JtYXQuIFVzZWZ1bCBmb3Iga2VlcGluZyB0aGUgcGx1Z2luIGZvciB5b3Vyc2VsZiAmIzgy MTI7IGNvbXBsZXRlIHdpdGggVGV4dGlsZWQgaGVscCBtYXJrdXAgJiM4MjEyOyBzbyBpdCBj YW4gYmUgbGF0ZXIgZWRpdGVkIGFuZCByZS1pc3N1ZWQgLyB1cGRhdGVkIG9yIHNoYXJlZCB3 aXRoIG90aGVyIGRldmVsb3BlcnMgd2hvIGhhdmUgdGhlIHBsdWdpbiBjb21wb3NlciBvciB6 ZW1fdHBsLnBocCBjb21waWxlci4gVGV4dHBhY2sgc3RyaW5ncyBhcmUgYnVuZGxlZCBhcyBw YXJ0IG9mIHRoZSB0ZW1wbGF0ZSBpZiB5b3UgY2hvb3NlLjwvbGk+Cgk8bGk+PHN0cm9uZz5F eHBvcnQgVGV4dHBhY2socyk8L3N0cm9uZz4gOiBjaG9vc2Ugb25lIG9yIG1vcmUgbGFuZ3Vh Z2VzIGZyb20gdGhlIHNlbGVjdCBsaXN0IHRvIGdhdGhlciBhbGwgeW91ciBwbHVnaW4mIzgy MTc7cyBUZXh0cGFjayBzdHJpbmdzIGFuZCBkb3dubG9hZCB0aGVtIGFzIGEgcmVkaXN0cmli dXRhYmxlIHRleHQgZmlsZSBmb3Igb3RoZXIgdGV4dHBhdHRlcm4gdXNlcnMgdG8gaW5zdGFs bCBvciBtb2RpZnkuIFlvdSAob3IgYW55b25lIGVsc2UpIHdpbGwgKG9uZSBkYXkpIGJlIGFi bGUgdG8gdXBsb2FkIGxpbmtzIHRvIFRleHRwYWNrcyBvbiB0ZXh0cGF0dGVybi5vcmcgc28g dGhleSBhcmUgYXZhaWxhYmxlIGZyb20gYSBjZW50cmFsIGxvY2F0aW9uLjwvbGk+CjwvdWw+ Cgo8cD5Ob3RlIHRoYXQgd2hlbiBleHBvcnRpbmcgYXMgYSBzdGFuZGFyZCBwbHVnaW4sIHRo ZSBUZXh0aWxlIHByb2Nlc3NvciBhdHRlbXB0cyB0byBkZWNpZGUgaWYgeW91IGhhdmUgdXNl ZCBUZXh0aWxlIG9yIG5vdDsgaXQgc2ltcGx5IGxvb2tzIGZvciBhIHRleHRpbGVkIGhlYWRl ciAoPGNvZGU+aDEuPC9jb2RlPiB0aHJvdWdoIDxjb2RlPmg2LjwvY29kZT4pLiBSdW5uaW5n IHB1cmUgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRocm91Z2ggVGV4dGlsZSBt YXkgb2NjYXNpb25hbGx5IGNhdXNlIGVuY29kaW5nIGlzc3VlcyBkZXBlbmRpbmcgb24gdGhl IG9yaWdpbmFsIGNoYXJhY3RlciBzZXQgdXNlZCwgc28gaXQgaXMgYWx3YXlzIGJlc3QgdG8g dHJ5IGFuZCBzdGljayB0byBUZXh0aWxlIGFzIHRoZSBkb2N1bWVudGF0aW9uIHN5c3RlbS48 L3A+Cgo8aDIgaWQ9ImllZF9wbHVnaW5fcmVzdG9yZSI+UmVzdG9yZSBwb2ludHM8L2gyPgoK PHA+V2hlbiBhIHBsdWdpbiBpcyBpbnN0YWxsZWQsIGEgY29weSBpcyBrZXB0IGluIHRoZSBk YXRhYmFzZS4gSWYgdGhlIHBsdWdpbiBjb2RlIChub3QgaGVscCB0ZXh0KSBpcyBzdWJzZXF1 ZW50bHkgZWRpdGVkLCB0aGUgcGx1Z2luIGlzIGNvbnNpZGVyZWQgJiM4MjIwO21vZGlmaWVk JiM4MjIxOzsgaW5kaWNhdGVkIGluIHRoZSBwbHVnaW4gY29tcG9zZXImIzgyMTc7cyA8YSBo cmVmPSIjaWVkX3BsdWdpbl9saXN0Ij5saXN0IHBhbmVsPC9hPi4gU29tZXRpbWVzIHlvdSBt YXkgd2lzaCB0byByZXZlcnQgYW55IGNoYW5nZXMgYmFjayB0byB0aGUgYXMtaW5zdGFsbGVk IHN0YXRlLjwvcD4KCjxwPkFueSB0aW1lIGEgcGx1Z2luIGlzIG1hcmtlZCBhcyAmIzgyMTY7 bW9kaWZpZWQmIzgyMTc7LCB0aGUgdmVyc2lvbiBudW1iZXIgYmVjb21lcyBjbGlja2FibGUg ZnJvbSB0aGUgPGEgaHJlZj0iI2llZF9wbHVnaW5fbGlzdCI+bGlzdCBwYW5lbDwvYT4uIENs aWNraW5nIGl0IChhbmQgY29uZmlybWluZyB5b3UgYXJlIHN1cmUpIHdpbGwgd2lwZSBvdXQg YW55IGNoYW5nZXMgeW91IG1hZGUgYW5kIHJldHVybiB0aGUgcGx1Z2luIHRvIGl0cyBpbnN0 YWxsZWQgc3RhdGUuPC9wPgoKPHA+RHVyaW5nIHRoZSBlZGl0aW5nIHByb2Nlc3Mgb2YgeW91 ciBvd24gcGx1Z2lucywgaXQgbWF5IGJlIHRoYXQgYXQgY2VydGFpbiB0aW1lcyB5b3Ugd2lz aCB0byBwdXQgYSBzdGFrZSBpbiB0aGUgZ3JvdW5kIGFuZCBzYXkgJiM4MjIwO3RoaXMgaXMg bXkgY3VycmVudCBiYXNlbGluZSB0aGF0IEkgbWlnaHQgd2FudCB0byByZXR1cm4gdG8gbGF0 ZXImIzgyMjE7LiBQZXJoYXBzIHlvdSBhcmUgYWJvdXQgdG8gbWFrZSBzb21lIG1ham9yIGVk aXRzIG9yIHRyeSBzb21ldGhpbmcgZXhwZXJpbWVudGFsIGFuZCB3YW50IGFuIGVhc3kgZmFs bGJhY2sgbWVjaGFuaXNtLiBUaGF0JiM4MjE3O3Mgd2hlcmUgdGhlICYjODIyMDtSZXN0b3Jl IHBvaW50JiM4MjIxOyBjaGVja2JveCBjb21lcyBpbi48L3A+Cgo8cD5CeSBjaGVja2luZyB0 aGUgYm94IHdoZW4geW91IGZ1bGx5IHNhdmUgeW91ciBwbHVnaW4sIHRoZSBjdXJyZW50IGNv ZGUgd2lsbCBiZWNvbWUgeW91ciBuZXcgcm9sbGJhY2sgcG9pbnQgYW5kIHRoZSBwbHVnaW4g d2lsbCBubyBsb25nZXIgYmUgbWFya2VkICYjODIyMDttb2RpZmllZCYjODIyMTsuIEFueSBj aGFuZ2VzIG1hZGUgYmVmb3JlaGFuZCB3aWxsIG5vdCBiZSByZWNvdmVyYWJsZSBzbyB5b3Ug d2lsbCBoYXZlIHRvIHJlbHkgb24geW91ciBvd24gYmFja3VwcyBpZiB5b3Ugd2lzaCB0byBn byBiYWNrIGZ1cnRoZXIuIEFueSBlZGl0cyB5b3UgbWFrZSBhZnRlciBjcmVhdGluZyBhIHJl c3RvcmUgcG9pbnQgY2FuIGJlIHVuZG9uZSBieSB2aXNpdGluZyB0aGUgPGEgaHJlZj0iI2ll ZF9wbHVnaW5fbGlzdCI+bGlzdCBwYW5lbDwvYT4gYW5kIGNsaWNraW5nIHRoZSB2ZXJzaW9u IG51bWJlciBuZXh0IHRvIHlvdXIgcGx1Z2luLiBDdXJyZW50bHksIG9ubHkgb25lIHJvbGxi YWNrIHBvaW50IGNhbiBiZSBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLiBOb3RlIHRoYXQgdGhl ICYjODIyMDtSZXN0b3JlIHBvaW50JiM4MjIxOyBjaGVja2JveCBpcyBpZ25vcmVkIGR1cmlu ZyBzYXZpbmcgb2YgbWV0YSBkYXRhIG9ubHksIHNpbmNlIHlvdSBhcmUgbm90IHNhdmluZyBh bnkgY29kZS48L3A+Cgo8aDIgaWQ9ImllZF9wbHVnaW5fc2V0dXAiPlNldHVwIHBhbmVsPC9o Mj4KCjxwPkNsaWNraW5nIFNldHVwIGZyb20gdGhlIG1haW4gPGEgaHJlZj0iI2llZF9wbHVn aW5fbGlzdCI+bGlzdCBwYW5lbDwvYT4gYWxsb3dzIGFjY2VzcyB0byB0aGUgcGx1Z2luIHNl dHRpbmdzLjwvcD4KCjxkbD4KCTxkdD48c3Ryb25nPlBsdWdpbiBlZGl0b3I8L3N0cm9uZz48 L2R0PgoJPGRkPllvdSBtYXkgY2hvb3NlIHRvIGVkaXQgdGhlIGNvZGUgdXNpbmcgYSAzcmQg cGFydHkgc3ludGF4IGhpZ2hsaWdodGVyLiBDdXJyZW50IHN1cHBvcnQgaXMgZm9yIEVkaXRB cmVhLCBDb2RlTWlycm9yIGFuZCBDb2RlUHJlc3MuPC9kZD4KCTxkZD5DaG9vc2UgdGhlIHN5 c3RlbSBoZXJlLCBhbmQgc3BlY2lmeSB0aGUgPGFjcm9ueW0gdGl0bGU9InMiPjxzcGFuIGNs YXNzPSJjYXBzIj5VUkw8L3NwYW4+PC9hY3JvbnltPiBvZiB0aGUgc2NyaXB0cyBhbmQgc3R5 bGVzaGVldHMgaW4gdGhlIGJveCBiZW5lYXRoLiBJZiB5b3VyIGNob3NlbiBlZGl0b3IgcmVx dWlyZXMgbW9yZSB0aGFuIG9uZSBmaWxlIHRvIGJlIGxvYWRlZCB0aGVuIGxpc3QgdGhlbSBh bGwsIHNlcGFyYXRlZCBieSBjb21tYXMuIElmIGFueSBvZiB0aGUgZmlsZXMgYXJlIHN0eWxl c2hlZXRzLCBwcmVmaXggdGhlIG5hbWUgd2l0aCA8Y29kZT5jc3M6PC9jb2RlPiBzbyB0aGUg cGx1Z2luIGtub3dzIHRvIGluc2VydCBhIDxjb2RlPiZsdDtsaW5rIHJlbD0mcXVvdDtzdHls ZXNoZWV0JnF1b3Q7IC4uLiZndDs8L2NvZGU+IGluc3RlYWQgb2YgYSA8Y29kZT4mbHQ7c2Ny aXB0Jmd0OzwvY29kZT4gdGFnLjwvZGQ+Cgk8ZGQ+SWYgeW91IHdhbnQgdG8gc3VwcGx5IGFu eSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlIGVkaXRvciwgdHlwZSB0aGVtIGluIHRo ZSA8c3Ryb25nPlBsdWdpbiBlZGl0b3IgY29uZmlndXJhdGlvbiBvcHRpb25zPC9zdHJvbmc+ IHRleHRhcmVhLiBXcml0ZSB0aGVtIGFzIG5hbWU6dmFsdWUgcGFpcnMgc2VwYXJhdGVkIGJ5 IGNvbW1hLCBleGFjdGx5IGFzIHlvdSB3b3VsZCBpZiBpbml0aWFsaXNhaW5nIHRoZSBzY3Jp cHQgYWNjb3JkaW5nIHRvIHRoZWlyIGRvY3VtZW50YXRpb24uPC9kZD4KCTxkdD48c3Ryb25n PlBsdWdpbiBlZGl0b3Igd2lkdGg8L3N0cm9uZz48L2R0PgoJPGRkPlRoZSBzaXplIG9mIHRo ZSB0ZXh0YXJlYXMgb24gdGhlIDxhIGhyZWY9IiNpZWRfcGx1Z2luX2VkaXQiPmVkaXQgcGFu ZWw8L2E+LiBTZXQgdG8gc3VpdCB5b3VyIHNjcmVlbiByZXNvbHV0aW9uLiBJbmNsdWRlIHRo ZSB1bml0cyAocHgsIGVtLCAlLCBldGMpIGlmIHlvdSB3aXNoOyBpdCYjODIxNztsbCBkZWZh dWx0IHRvIHBpeGVscyBpZiB5b3Ugb21pdCB0aGVtLjwvZGQ+Cgk8ZHQ+PHN0cm9uZz5IZWxw IGVkaXRvcjwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+WW91IG1heSBjaG9vc2UgdG8gZWRpdCB0aGUg aGVscCBtYW51YWxseSB2aWEgVGV4dGlsZSBvciB1c2UgVGlueU1DRSBmb3IgYSBtb3JlIDxz cGFuIGNsYXNzPSJjYXBzIj5XWVNJV1lHPC9zcGFuPiBleHBlcmllbmNlLjwvZGQ+Cgk8ZGQ+ SW4gYSBzaW1pbGFyIG1hbm5lciB0byB0aGUgcGx1Z2luIGNvZGUgZWRpdG9yIHlvdSBuZWVk IHRvIHRlbGwgdGhlIGNvbXBvc2VyIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PiB0byB0aGUgamF2YXNjcmlwdCBmaWxlLiBZb3UgY2FuIGFsc28gc3VwcGx5IGNvbmZpZ3Vy YXRpb24gb3B0aW9ucy4gVGhlIGRlZmF1bHRzIHNob3VsZCBnaXZlIHlvdSBhIGhlYWQgc3Rh cnQgb24gaG93IHRvIHVzZSB0aGVtOiBjb25zdWx0IHRoZSBUaW55TUNFIGRvY3VtZW50YXRp b24gZm9yIG1vcmUuPC9kZD4KCTxkdD48c3Ryb25nPk9wdGlvbmFsIGludGVyZmFjZSBlbGVt ZW50czwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+Q2hvb3NlIHdoaWNoIHBhcnRzIG9mIHRoZSA8YSBo cmVmPSIjaWVkX3BsdWdpbl9lZGl0Ij5lZGl0IHBhbmVsPC9hPiB5b3Ugd2FudCB0byBiZSB2 aXNpYmxlIGluIHRoZSBpbnRlcmZhY2UuPC9kZD4KCTxkdD48c3Ryb25nPlBlcmZvcm0gbGlm ZWN5Y2xlIGFjdGlvbnMgb248L3N0cm9uZz48L2R0PgoJPGRkPldoZW4gcGx1Z2lucyBhcmUg aW5zdGFsbGVkLCBlbmFibGVkLCBkaXNhYmxlZCBvciBkZWxldGVkLCBwbHVnaW5zIGNhbiBy dW4gY29kZSB0byBwZXJmb3JtIGluc3RhbGxhdGlvbiBvciBjbGVhbnVwIGFjdGlvbnMuIENo b29zZSB3aGljaCBvbmVzIHlvdSB3aXNoIHRvIHBlcm1pdCB3aGVuIGluc3RhbGxpbmcsIGVu YWJsaW5nL2Rpc2FibGluZyBvciBkZWxldGluZyBwbHVnaW5zIGZyb20gdGhlIGNvbXBvc2Vy JiM4MjE3O3MgPGEgaHJlZj0iI2llZF9wbHVnaW5fbGlzdCI+bGlzdCBwYW5lbDwvYT4uPC9k ZD4KCTxkZD5UaGUgdmFsdWUgb2YgdGhlICYjODIxNjtpbnN0YWxsJiM4MjE3OyBjaGVja2Jv eCBjaG9zZW4gaGVyZSBiZWNvbWVzIHRoZSBkZWZhdWx0IG9wdGlvbiBpbiB0aGUgPGVtPlBl cmZvcm0gcG9zdC1pbnN0YWxsIGFjdGlvbnM8L2VtPiByYWRpbyBidXR0b24gaW4gdGhlIDxl bT5JbnN0YWxsYXRpb248L2VtPiBzdWJwYW5lbC48L2RkPgoJPGR0PjxzdHJvbmc+QXV0by1l bmFibGUgcGx1Z2lucyBvbiBpbnN0YWxsPC9zdHJvbmc+PC9kdD4KCTxkZD5XaGV0aGVyIHRv IGFsbG93IHBsdWdpbnMgdG8gYXV0b21hdGljYWxseSBzd2l0Y2ggb24gYWZ0ZXIgaW5zdGFs bGF0aW9uLCBvciB0byByZXRhaW4gdGhlaXIgcHJldmlvdXMgc3RhdHVzLjwvZGQ+Cgk8ZGQ+ VGhlIHNldHRpbmcgY2hvc2VuIGhlcmUgYmVjb21lcyB0aGUgZGVmYXVsdCByYWRpbyBidXR0 b24gc2VsZWN0aW9uIHVuZGVyIHRoZSA8ZW0+SW5zdGFsbDwvZW0+IHRleHRhcmVhIG9uIHRo ZSA8YSBocmVmPSIjaWVkX3BsdWdpbl9saXN0Ij5saXN0IHBhbmVsPC9hPi48L2RkPgoJPGR0 PjxzdHJvbmc+U3ludGF4IGNoZWNrIG9uIGNvZGUgc2F2ZTwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+ V2hldGhlciB0byBydW4gdGhlIGNvZGUgdGhyb3VnaCB0aGUgc3ludGF4IGNoZWNrZXIgb3Ig bm90IHdoZW4geW91IHVzZSB0aGUgPHN0cm9uZz5TYXZlIENvZGU8L3N0cm9uZz4gYnV0dG9u LiBIaWdobHkgcmVjb21tZW5kZWQgdG8gc2F2ZSB5b3VyIGFkbWluIHNpZGUgZnJvbSBicmVh a2FnZSBkdXJpbmcgZGV2ZWxvcG1lbnQuPC9kZD4KCTxkdD48c3Ryb25nPlRleHRwYWNrIGxh bmd1YWdlIGxpc3Q8L3N0cm9uZz48L2R0PgoJPGRkPldoZXRoZXIgdG8gb25seSBhbGxvdyBl ZGl0aW5nIG9mIHN0cmluZ3MgZnJvbSB0aGUgY3VycmVudGx5IGluc3RhbGxlZCBsYW5ndWFn ZXMsIG9yIGFsbCBhdmFpbGFibGUgVGV4dHBhdHRlcm4gbGFuZ3VhZ2VzLjwvZGQ+Cgk8ZHQ+ PHN0cm9uZz5EZWZhdWx0IFRleHRwYWNrIGxhbmd1YWdlPC9zdHJvbmc+PC9kdD4KCTxkZD5U aGUgcHJpbWFyeSBsYW5ndWFnZSBmb3IgeW91ciBwbHVnaW4gc3RyaW5ncyAoZGVmYXVsdCA9 IGFueSkuIElmIHlvdSBjaG9vc2UgYSBsYW5ndWFnZSB0aGF0IGlzIG5vdCBpbnN0YWxsZWQg KGFuZCB5b3UmIzgyMTc7cmUgbGltaXRpbmcgdGhlIGxhbmd1YWdlIGxpc3QgdG8gb25seSB0 aG9zZSBpbnN0YWxsZWQpIHRoZSBkZWZhdWx0IGxhbmd1YWdlIHdpbGwgcmV2ZXJ0IHRvIHlv dXIgY3VycmVudCBhZG1pbi1zaWRlIGxhbmd1YWdlLjwvZGQ+Cgk8ZGQ+Tm90ZSB0aGF0IGlm IHlvdSBzZXQgYSBsYW5ndWFnZSBoZXJlLCB3aGVuIHlvdSBleHBvcnQgVGV4dHBhY2tzIG9y IGJ1aWxkIHBsdWdpbnMsIHRoYXQgd2lsbCBiZSB0aGUgbGFuZ3VhZ2UgZXhwZWN0ZWQgdG8g YmUgaW5zdGFsbGVkIGluIGEgdXNlciYjODIxNztzIFRleHRwYXR0ZXJuLiBJZiB5b3UgbGVh dmUgaXQgYXQgJiM4MjE2O2FueSYjODIxNzssIHRoZSBsYW5ndWFnZSBtYXJrZXIgaXMgb21p dHRlZCBmcm9tIHRoZSBUZXh0cGFjayBhbmQgdGh1cyB0aGUgc3RyaW5ncyBidW5kbGVkIHdp dGggdGhlIHBsdWdpbiAod2hpY2ggbWF5IGJlIGluIEVuZ2xpc2gpIHdpbGwgaW5zdGFsbCBp bnRvIHdoaWNoZXZlciBsYW5ndWFnZSBpcyB0aGUgdXNlciYjODIxNztzIGRlZmF1bHQgKHdo aWNoIG1heSBiZSBzb21ldGhpbmcgb3RoZXIgdGhhbiBFbmdsaXNoKS4gQnkgZm9yY2luZyB0 aGUgZGVmYXVsdCBsYW5ndWFnZSwgeW91IGZvcmNlIHRoZSBsYW5ndWFnZSBtYXJrZXIgaW4g dGhlIHBsdWdpbi4gVGh1cyBpZiB5b3VyIHVzZXJzIGRvbiYjODIxNzt0IGhhdmUgdGhhdCBs YW5ndWFnZSBpbnN0YWxsZWQgKGUuZy4gc29tZW9uZSBvbmx5IGhhcyBubC1ubCBpbnN0YWxs ZWQgYW5kIG5vdCBFbmdsaXNoKSBhbmQgdGhleSBpbnN0YWxsIHlvdXIgcGx1Z2luLCBpdCB3 aWxsIGxvb2sgYXQgdGhlIGluc3RhbGxlZCBsYW5ndWFnZSAobmwtbmwpLCBjb21wYXJlIGl0 IHRvIHRoZSBvbmUgaW4gdGhlIHBsdWdpbiAoZW4tZ2IpLCBmaW5kIGl0IGRvZXNuJiM4MjE3 O3QgbWF0Y2ggYW5kIHdpbGwgc2tpcCB0aGUgVGV4dHBhY2sgaW5zdGFsbGF0aW9uLiBUaGlz IHdpbGwgbGVhdmUgdGhlIHVzZXImIzgyMTc7cyBpbnRlcmZhY2Ugd2l0aCBsb3RzIG9mIHVn bHkgPGNvZGU+YWJjX3BsdWdpbl9zb21lX2l0ZW08L2NvZGU+IHN0cmluZ3MgaW5zdGVhZCBv ZiB0aGUgYWN0dWFsIHRyYW5zbGF0ZWQgY29udGVudC48L2RkPgoJPGRkPlRoaXMgY291bGQg YmUgaGFuZHkgaWYgeW91IGFyZSBkaXN0cmlidXRpbmcgVGV4dHBhY2tzIHNlcGFyYXRlbHkg YW5kIGhhdmUgYSBnb29kIHN0b2NrIG9mIHRoZW0sIG9yIGhhdmUgbG9hZHMgb2YgVGV4dHBh Y2tzIGJ1bmRsZWQgd2l0aCB0aGUgcGx1Z2luLCBidXQgZm9yIDk1JSBvZiBjYXNlcyBpdCBp cyBiZXN0IHRvIGxlYXZlIHRoZSBkZWZhdWx0IHRleHRwYWNrIGxhbmd1YWdlIGF0IDxjb2Rl PkFueTwvY29kZT4gc28gdXNlcnMgb2YgeW91ciBwbHVnaW4gYXJlIGd1YXJhbnRlZWQgdG8g Z2V0IHNvbWUgdHJhbnNsYXRlZCBzdHJpbmdzLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBpbiB0 aGVpciAmIzgyMTY7bG9jYWwmIzgyMTc7IGxhbmd1YWdlLiBUaGV5IGNhbiB0aGVuIGF0IGxl YXN0IHRyYW5zbGF0ZSB0aGVtIGFuZCBtYWtlIHRoZSBUZXh0cGFjayBhdmFpbGFibGUgdG8g b3RoZXIgdXNlcnMuPC9kZD4KCTxkdD48c3Ryb25nPjxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8 L3NwYW4+IGV4cG9ydCBvcmRlcjwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+V2hlbiBzYXZpbmcgeW91 ciBwbHVnaW4gaW4gdGhlIHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdCwgdGhpcyBnb3Zlcm5z IHdoZXRoZXIgeW91IHByZWZlciB0aGUgY29kZSBibG9jayB0byBiZSBhdCB0aGUgdG9wIG9m IHRoZSBmaWxlIGFuZCB0aGUgaGVscCBibG9jayBiZWxvdywgb3IgdmljZSB2ZXJzYS48L2Rk PgoJPGR0PjxzdHJvbmc+RXhwb3J0IHBsdWdpbiBmaWxlbmFtZSBmb3JtYXQ8L3N0cm9uZz48 L2R0PgoJPGR0PjxzdHJvbmc+RXhwb3J0IGNvbXByZXNzZWQgZmlsZW5hbWUgZm9ybWF0PC9z dHJvbmc+PC9kdD4KCTxkdD48c3Ryb25nPkV4cG9ydCB0ZW1wbGF0ZSBmaWxlbmFtZSBmb3Jt YXQ8L3N0cm9uZz48L2R0PgoJPGR0PjxzdHJvbmc+VGV4dHBhY2sgZmlsZW5hbWUgZm9ybWF0 PC9zdHJvbmc+PC9kdD4KCTxkZD5UaGVzZSBkZWZpbmUgdGhlIGZvcm1hdCBvZiB0aGUgZmls ZW5hbWVzIHdoZW4geW91IGV4cG9ydCBwbHVnaW5zL1RleHRwYWNrcy4gVGhlIGZpcnN0IGlz IGZvciB3aGVuIHlvdSBleHBvcnQgc3RhbmRhcmQgPHNwYW4gY2xhc3M9ImNhcHMiPkJBU0U8 L3NwYW4+LTY0IHBsdWdpbnM7IHRoZSBzZWNvbmQgaXMgZm9yIGNvbXByZXNzZWQgcGx1Z2lu czsgdGhlIHRoaXJkIGlzIGZvciBleHBvcnRpbmcgYSBzdGFuZGFyZCA8c3BhbiBjbGFzcz0i Y2FwcyI+UEhQPC9zcGFuPiB0ZW1wbGF0ZSwgYW5kIGZpbmFsbHkgZm9yIGV4cG9ydGluZyBU ZXh0cGFja3MuPC9kZD4KCTxkZD5XaGVyZXZlciB5b3UgdHlwZSA8Y29kZT57bmFtZX08L2Nv ZGU+LCB0aGUgcGx1Z2luIG5hbWUgd2lsbCBhcHBlYXIuIFNpbWlsYXJseSwgPGNvZGU+e3Zl cnNpb259PC9jb2RlPiB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGN1cnJlbnQgcGx1Z2lu IHZlcnNpb24gbnVtYmVyLiBBbmQgPGNvZGU+e2xhbmd9PC9jb2RlPiB3aWxsIGJlIHJlcGxh Y2VkIHdpdGggZWl0aGVyIDEpIHRoZSBjaG9zZW4gbGFuZ3VhZ2UgY29kZSwgbGlrZSBlbi1n YjsgMikgJiM4MjE2O2FsbCYjODIxNzsgaWYgeW91IGNob3NlIHRvIGV4cG9ydCBhbGwgdGV4 dHBhY2tzIGFzIG9uZSBmaWxlOyAzKSBhbiBhYmJyZXZpYXRlZCBsaXN0IG9mIGNvdW50cmll cyB0byB3aGljaCB0aGUgbGFuZ3VhZ2VzIGluIHRoZSBwYWNrIGFwcGx5IGlmIHlvdSBjaG9v c2UgdG8gZXhwb3J0IG1vcmUgdGhhbiBvbmUsIGUuZy4gPGNvZGU+ZW4rZmkrbmwrZnIrZGU8 L2NvZGU+LjwvZGQ+Cgk8ZGQ+WW91IGNhbiB0eXBlIGFueXRoaW5nIHlvdSBsaWtlIGluIHRo ZXNlIGJveGVzLCBidXQgaXQmIzgyMTc7cyBtb3JlIHVzZWZ1bCB0byBpbmNsdWRlIHRoZSBy ZXBsYWNlbWVudCBzdHJpbmdzIHNvbWV3aGVyZSBpbiBlYWNoIGJveCBzbyB5b3UgZG9uJiM4 MjE3O3QgZ2V0IG5hbWUgLyB2ZXJzaW9uIGNsYXNoZXMuIEZvciBleGFtcGxlLCBpZiB5b3Ug ZG9uJiM4MjE3O3QgbGlrZSB0aGUgZmFjdCB0aGF0IHppcHBlZCBwbHVnaW5zIGFyZSBleHBv cnRlZCBhcyA8Y29kZT5wZnhfbXlfcGx1Z2luX3YwLjFfemlwLnR4dDwvY29kZT4sIHlvdSBj YW4gY2hhbmdlIGl0LiBQZXJoYXBzIHlvdSBtYXkgcHJlZmVyIDxjb2RlPnBmeF9teV9wbHVn aW4tY29tcHJlc3NlZC0wLjEudHh0PC9jb2RlPi4gSW4gd2hpY2ggY2FzZSwgc2V0IHRoZSAy bmQgYm94IHRvIDxjb2RlPntuYW1lfS1jb21wcmVzc2VkLXt2ZXJzaW9ufS50eHQ8L2NvZGU+ LjwvZGQ+Cgk8ZGQ+Tm90ZSB0aGUgZXh0ZW5zaW9uIHNob3VsZCB1c3VhbGx5IGJlIHNwZWNp ZmllZCBzbyB5b3VyIHN5c3RlbS9icm93c2VyIGtub3dzIHRoZSBmaWxlJiM4MjE3O3MgdHlw ZSB3aGVuIGl0IGlzIGV4cG9ydGVkLCBidXQgaXQmIzgyMTc7cyBub3QgbWFuZGF0b3J5IGFz IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+TUlNRTwvc3Bhbj4gdHlwZSBpcyBnaXZlbiwgc28g KGdvb2QpIGJyb3dzZXJzIHNob3VsZCByZWFkIHRoYXQuPC9kZD4KCTxkdD48c3Ryb25nPkNh Y2hlIFRleHRpbGVkIGhlbHAgcGF0aDwvc3Ryb25nPjwvZHQ+Cgk8ZGQ+SWYgeW91IHdpc2gg dG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaGVscCBjYWNoZWluZywgcHV0IHRoZSBwYXRoIHRvIGEg dGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiB0aGUgYm94LiBFbXB0eSB0aGUgYm94IGlmIHlvdSBw cmVmZXIgc2F2ZXMgYW5kIGV4cG9ydHMgdG8gYmUgc2xvd2VyITwvZGQ+Cgk8ZGQ+RGVmYXVs dHMgdG8gVGV4dHBhdHRlcm4mIzgyMTc7cyB0ZW1wb3JhcnkgZGlyZWN0b3J5LjwvZGQ+Cjwv ZGw+Cgo8aDIgaWQ9ImllZF9wbHVnaW5fbm90ZXMiPk5vdGVzIC8ga25vd24gaXNzdWVzPC9o Mj4KCjxvbD4KCTxsaT5XaGVuIGEgcGx1Z2luIGlzIHNhdmVkIHRvIHRoZSBwbHVnaW5fY2Fj aGVfZGlyLCBpZiB5b3UgaGF2ZSBub3QgcHV0IDxjb2RlPiZsdDtzdHlsZSZndDs8L2NvZGU+ IG1hcmtlcnMgaW4geW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBibG9jayB0 aGV5IHdpbGwgYmUgYWRkZWQgZm9yIHlvdSBpbiB0aGUgdGV4dCBhcmVhIGJ1dCA8ZW0+bm90 PC9lbT4gc2F2ZWQgaW4gdGhlIGFjdHVhbCB0ZW1wbGF0ZSB1bnRpbCB5b3Ugc2F2ZSBpdCBh Z2FpbiAoZXhwb3J0aW5nIGFzIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmls ZSBpcyB1bmFmZmVjdGVkKS4gU28gaWYgeW91IGFyZSBpbiB0aGUgaGFiaXQgb2YgbWFudWFs bHkgZG93bmxvYWRpbmcgdGhlIGZpbGUgZnJvbSB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5G VFA8L3NwYW4+IGNsaWVudCBpbW1lZGlhdGVseSBhZnRlciBhIHNhdmUsIGp1c3Qgc2F2ZSB0 aGUgcGx1Z2luIGFnYWluIHRvIGJlIHN1cmUuPC9saT4KCTxsaT5Mb2FkaW5nIFRleHRwYWNr IHN0cmluZ3MgZnJvbSBhIGdUeHQgZnVuY3Rpb24gd29uJiM4MjE3O3Qgd29yayB1bmxlc3Mg eW91IChwZXJoYXBzIHRlbXBvcmFyaWx5KSBzd2l0Y2ggeW91ciBwbHVnaW4gdG8gb25lIG9m IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+QUpBWDwvc3Bhbj4gdHlwZXMuPC9saT4KPC9vbD4K CjxoMj5Xcml0aW5nIGEgcGx1Z2luPC9oMj4KCjxwPllvdSBzaG91bGQgYmUgYXdhcmUgb2Yg dGhlIDxhIGhyZWY9Imh0dHBzOi8vZm9ydW0udGV4dHBhdHRlcm4uaW8vdmlld3RvcGljLnBo cD9pZD05ODgxIj5QbHVnaW4gQXV0aG9yIFJlc291cmNlczwvYT4gdG9waWMgb24gdGhlIFRl eHRwYXR0ZXJuIFN1cHBvcnQgRm9ydW0sIGFuZCB5b3UgbWlnaHQgYWxzbyB3YW50IHRvIGhh dmUgYSBsb29rIGF0IHRoZSB0dXRvcmlhbHMgYW5kIGd1aWRlcyBmb3IgPGEgaHJlZj0iaHR0 cHM6Ly9kb2NzLnRleHRwYXR0ZXJuLmlvL2RldmVsb3BtZW50LyI+UGx1Z2luIGRldmVsb3Bt ZW50PC9hPiBpbiB0aGUgVGV4dHBhdHRlcm4gZG9jdW1lbnRhdGlvbi48L3A+Cgo8cD5IYXBw eSBwbHVnaW4gYXV0aG9yaW5nIDotKTwvcD4KCjxoMj5BdXRob3JzPC9oMj4KCjxwPk9yaWdp bmFsIHBsdWdpbjogWXVyYSBMaW5ueWs8YnIgLz4KTW9kaWZpY2F0aW9ucyAodjAuNSspOiA8 YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29u PC9hPjxiciAvPgpBIHRvdWNoIG9mIGNsYXNzOiBTdGV2ZSBEaWNraW5zb248YnIgLz4KUGx1 cyBoZWxwIGZyb20gYSBwbGV0aG9yYSBvZiBmb3J1bSBjb250cmlidXRvcnMgdG9vIG51bWVy b3VzIHRvIG1lbnRpb24uIFlvdSBrbm93IHdobyB5b3UgYXJlLCB0aGFuayB5b3UgOy0pPC9w PiI7czozOiJtZDUiO3M6MzI6Ijc1NmY4YTE5ZTBmYWQwYzI4MmI0NGMxY2NkYjA1YjZmIjtz Ojg6InRleHRwYWNrIjtzOjEwMDk1OiIjQGllZF9wbHVnaW4KaWVkX3BsdWdpbl9hbnkgPT4g QW55CmllZF9wbHVnaW5fYXV0b19lbmFibGUgPT4gQXV0by1lbmFibGUgcGx1Z2lucyBvbiBp bnN0YWxsCmllZF9wbHVnaW5fY2FjaGVwbHVnc19sZWdlbmQgPT4gUGx1Z2lucyBpbiBjYWNo ZSBkaXJlY3RvcnkKaWVkX3BsdWdpbl9jYWNoZV9ub3Rfc2V0ID0+IEFkdmFuY2VkIHByZWYg InBsdWdpbiBjYWNoZSBkaXJlY3RvcnkiIG5vdCBkZWZpbmVkCmllZF9wbHVnaW5fY2hlY2tf dHlwZSA9PiBDaGVjayB5b3VyIHBsdWdpbiB0eXBlIQppZWRfcGx1Z2luX2Nob29zZV9maWxl ID0+IFBsZWFzZSBjaG9vc2UgYSBmaWxlIGZpcnN0CmllZF9wbHVnaW5fY29kZV9kaXN0ID0+ IFBsdWdpbiBjb2RlIGZvciBkaXN0cmlidXRpb24KaWVkX3BsdWdpbl9jb2RlX2xlZ2VuZCA9 PiBQbHVnaW4gY29kZQppZWRfcGx1Z2luX2NvZGVfc2F2ZSA9PiBTYXZlIGNvZGUKaWVkX3Bs dWdpbl9jb2RlX3NhdmVkID0+IENvZGUgc2F2ZWQKaWVkX3BsdWdpbl9jb2RlX3NhdmVkX2Zh aWwgPT4gQ29kZSBzYXZpbmcgZmFpbGVkCmllZF9wbHVnaW5fY29tcG9zZXIgPT4gUGx1Z2lu IGNvbXBvc2VyCmllZF9wbHVnaW5fY29tcHJlc3MgPT4gWmlwCmllZF9wbHVnaW5fY3BhbmVs X2xlZ2VuZCA9PiBJbnN0YWxsYXRpb24KaWVkX3BsdWdpbl9jcmVhdGVfbmV3ID0+IENyZWF0 ZSBuZXcgcGx1Z2luCmllZF9wbHVnaW5fZGJwbHVnc19sZWdlbmQgPT4gUGx1Z2lucyBpbiBk YXRhYmFzZQppZWRfcGx1Z2luX2RvY3MgPT4gRG9jcwppZWRfcGx1Z2luX2RvY3NfbGVnZW5k ID0+IFBsdWdpbiBoZWxwCmllZF9wbHVnaW5fZWRpdCA9PiBFZGl0OiB7bmFtZX0gdnt2ZXJz aW9ufQppZWRfcGx1Z2luX2VkaXRpbmcgPT4gRWRpdGluZyB7bmFtZX0gaW4gUGx1Z2luIENv bXBvc2VyCmllZF9wbHVnaW5fZWRpdG9yID0+IFBsdWdpbiBlZGl0b3IKaWVkX3BsdWdpbl9l ZGl0b3Jfb3B0aW9ucyA9PiBQbHVnaW4gZWRpdG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucwpp ZWRfcGx1Z2luX2VkaXRvcl9wYXRoID0+IFBsdWdpbiBlZGl0b3IgVVJMCmllZF9wbHVnaW5f ZWRpdG9yX3dpZHRoID0+IFBsdWdpbiBlZGl0b3Igd2lkdGgKaWVkX3BsdWdpbl9lZGl0X25l dyA9PiBFZGl0IHlvdXIgbmV3IHBsdWdpbgppZWRfcGx1Z2luX2VuYWJsZSA9PiBFbmFibGVk CmllZF9wbHVnaW5fZXhwb3J0ID0+IEV4cG9ydCBhcyB7bmFtZX0KaWVkX3BsdWdpbl9leHBv cnRfdGV4dHBhY2sgPT4gRXhwb3J0IHRleHRwYWNrKHMpCmllZF9wbHVnaW5fZXhwb3J0X3pp cCA9PiBFeHBvcnQgYXMge25hbWV9IChjb21wcmVzc2VkKQppZWRfcGx1Z2luX2ZsYWdzID0+ IEZsYWdzCmllZF9wbHVnaW5fZmxhZ19oYXNfcHJlZnMgPT4gSGFzIHByZWZzCmllZF9wbHVn aW5fZmxhZ19saWZlY3ljbGVfbm90aWZ5ID0+IEV2ZW50IG5vdGlmeQppZWRfcGx1Z2luX2Zu X25vdF9leGlzdCA9PiAodGhlIGZ1bmN0aW9uIGlzIHByb2JhYmx5IGphdmFzY3JpcHQgb3Ig bWFuZ2xlZCBQSFApCmllZF9wbHVnaW5faGVscF9lZGl0b3IgPT4gSGVscCBlZGl0b3IKaWVk X3BsdWdpbl9oZWxwX2VkaXRvcl9vcHRpb25zID0+IEhlbHAgZWRpdG9yIGNvbmZpZ3VyYXRp b24gb3B0aW9ucwppZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGggPT4gSGVscCBlZGl0b3Ig VVJMCmllZF9wbHVnaW5faGVscF9ub3RfYXZhaWxhYmxlID0+IFBsdWdpbiBoZWxwIG5vdCBh dmFpbGFibGUKaWVkX3BsdWdpbl9pZl9lbF9kaXN0ID0+IENvZGUgZm9yIGRpc3RyaWJ1dGlv bgppZWRfcGx1Z2luX2lmX2VsX3N0eWxlID0+IEhlbHAgc3R5bGUgYmxvY2sKaWVkX3BsdWdp bl9pZl9zZXR0aW5ncyA9PiBJbnRlcmZhY2Ugc2V0dGluZ3MKaWVkX3BsdWdpbl9pbnN0YWxs X3RleHRwYWNrID0+IEluc3RhbGwgZmlsZSdzIFRleHRwYWNrCmllZF9wbHVnaW5faW5zdGFs bF90eHQgPT4gSW5zdGFsbCBmcm9tIC50eHQgZmlsZQppZWRfcGx1Z2luX2ludGVyZmFjZV9l bGVtcyA9PiBPcHRpb25hbCBpbnRlcmZhY2UgZWxlbWVudHMKaWVkX3BsdWdpbl9qdW1wX3Rv X2xpbmUgPT4gSnVtcCB0byBsaW5lOgppZWRfcGx1Z2luX2xhbmdzX2FsbCA9PiBBbGwgYXZh aWxhYmxlCmllZF9wbHVnaW5fbGFuZ3NfaW5zdGFsbGVkID0+IE9ubHkgaW5zdGFsbGVkCmll ZF9wbHVnaW5fbGFuZ19jaG9vc2UgPT4gVGV4dHBhY2sgbGFuZ3VhZ2UgbGlzdAppZWRfcGx1 Z2luX2xhbmdfZGVmYXVsdCA9PiBEZWZhdWx0IHRleHRwYWNrIGxhbmd1YWdlCmllZF9wbHVn aW5fbGJsX2xjX2RlbGV0ZSA9PiBEZWxldGUKaWVkX3BsdWdpbl9sYmxfbGNfZGlzYWJsZSA9 PiBEaXNhYmxlCmllZF9wbHVnaW5fbGJsX2xjX2Rpc2RlbCA9PiBEaXNhYmxlK0RlbGV0ZQpp ZWRfcGx1Z2luX2xibF9sY19lbmFibGUgPT4gRW5hYmxlCmllZF9wbHVnaW5fbGJsX2xjX2lu c3RhYmxlID0+IEluc3RhbGwrRW5hYmxlCmllZF9wbHVnaW5fbGJsX2xjX2luc3RhbGwgPT4g SW5zdGFsbAppZWRfcGx1Z2luX2xibF9vcF9jb2RlX2ZpcnN0ID0+IENvZGUgZmlyc3QKaWVk X3BsdWdpbl9sYmxfb3BfaGVscF9maXJzdCA9PiBIZWxwIGZpcnN0CmllZF9wbHVnaW5fbGJs X3NldHVwID0+IFBsdWdpbiBjb21wb3NlciBzZXR1cAppZWRfcGx1Z2luX2xjX2ZpcmVkID0+ IExpZmVjeWNsZSBldmVudCB7ZXZlbnR9IGZpcmVkIGZvciB7bmFtZX0KaWVkX3BsdWdpbl9s aWZlY3ljbGUgPT4gRmlyZSBsaWZlY3ljbGUgZXZlbnQKaWVkX3BsdWdpbl9saWZlY3ljbGVf b3B0aW9ucyA9PiBQZXJmb3JtIGxpZmVjeWNsZSBhY3Rpb25zIG9uCmllZF9wbHVnaW5fbGlz dCA9PiBQbHVnaW4gbGlzdAppZWRfcGx1Z2luX2xvYWQgPT4gTG9hZAppZWRfcGx1Z2luX2xv YWRfb3JkZXIgPT4gTG9hZCBvcmRlcgppZWRfcGx1Z2luX2xvYWRfb3JkZXJfaGVscCA9PiAo MT1maXJzdCA+IDU9bm9ybWFsID4gOT1sYXN0KQppZWRfcGx1Z2luX21ldGFfbGVnZW5kID0+ IE1ldGEgaW5mb3JtYXRpb24KaWVkX3BsdWdpbl9tZXRhX3NhdmUgPT4gU2F2ZSBtZXRhCmll ZF9wbHVnaW5fbWV0YV9zYXZlZCA9PiBNZXRhIGluZm8gc2F2ZWQKaWVkX3BsdWdpbl9tZXRh X3NhdmVkX2ZhaWwgPT4gTWV0YSBpbmZvIG5vdCBzYXZlZAppZWRfcGx1Z2luX21zZ3BvcF9s YmwgPT4gcGhwZG9jIGJsb2NrCmllZF9wbHVnaW5fbmFtZV9maXJzdCA9PiBQbGVhc2UgbmFt ZSB0aGUgcGx1Z2luIGJlZm9yZSBjcmVhdGluZyBpdAppZWRfcGx1Z2luX291dHB1dF9vcmRl ciA9PiBQSFAgZXhwb3J0IG9yZGVyCmllZF9wbHVnaW5fb3V0cHV0X3NmaWxlID0+IEV4cG9y dCBwbHVnaW4gZmlsZW5hbWUgZm9ybWF0CmllZF9wbHVnaW5fb3V0cHV0X3NmaWxlYyA9PiBF eHBvcnQgY29tcHJlc3NlZCBmaWxlbmFtZSBmb3JtYXQKaWVkX3BsdWdpbl9vdXRwdXRfc2Zp bGVwID0+IFBsdWdpbiB0ZW1wbGF0ZSBmaWxlbmFtZSBmb3JtYXQKaWVkX3BsdWdpbl9vdXRw dXRfc2ZpbGV0ID0+IFRleHRwYWNrIGZpbGVuYW1lIGZvcm1hdAppZWRfcGx1Z2luX291dHB1 dF90bXBjYWNoZSA9PiBDYWNoZSBUZXh0aWxlZCBoZWxwIHBhdGgKaWVkX3BsdWdpbl9wYWNr X2xlZ2VuZCA9PiBUZXh0cGFjayBzdHJpbmdzCmllZF9wbHVnaW5fcGhwX2RvYyA9PiBNYWtl IHBocGRvYwppZWRfcGx1Z2luX3ByZWZzID0+IFByZWZlcmVuY2VzCmllZF9wbHVnaW5fcHJl ZnNfZGVsZXRlZCA9PiBQcmVmZXJlbmNlcyBkZWxldGVkCmllZF9wbHVnaW5fcmVuYW1lZCA9 PiAocmVuYW1lZCkKaWVkX3BsdWdpbl9yZW5hbWVfZmFpbGVkID0+IChyZW5hbWUgZmFpbGVk KQppZWRfcGx1Z2luX3JlbmFtZV9maWxlID0+IFJlbmFtZSBmaWxlCmllZF9wbHVnaW5fcmVz dG9yZWQgPT4gUGx1Z2luIHtuYW1lfSByZXN0b3JlZC4KaWVkX3BsdWdpbl9yZXN0b3JlX2hl bHAgPT4gUm9sbCBiYWNrIHRoZSBwbHVnaW4gY29kZSB0byB0aGUgbW9zdCByZWNlbnQgcmVz dG9yZSBwb2ludAppZWRfcGx1Z2luX3Jlc3RvcmVfcG9pbnQgPT4gUmVzdG9yZSBwb2ludApp ZWRfcGx1Z2luX3Jlc3RvcmVfdmVyaWZ5ID0+IEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBy b2xsYmFjayB0aGUge25hbWV9IHNvdXJjZSBjb2RlIHRvIGl0cyBsYXN0IHJlc3RvcmUgcG9p bnQ/CmllZF9wbHVnaW5fcnVuX2luc3RhbGwgPT4gUGVyZm9ybSBwb3N0LWluc3RhbGwgYWN0 aW9ucwppZWRfcGx1Z2luX3NhbWUgPT4gU2FtZQppZWRfcGx1Z2luX3NhdmVfYXMgPT4gU2F2 ZSBhcyB7bmFtZX0KaWVkX3BsdWdpbl9zZXR1cCA9PiBTZXR1cAppZWRfcGx1Z2luX3N5bnRh eF9jaGVjayA9PiBTeW50YXggY2hlY2sgb24gY29kZSBzYXZlCmllZF9wbHVnaW5fc3ludGF4 X2VyciA9PiBTeW50YXggZXJyb3IKaWVkX3BsdWdpbl90b2dnbGUgPT4gVG9nZ2xlCmllZF9w bHVnaW5fdHBfcG9wdWxhdGUgPT4gTG9hZCBzdHJpbmdzIGZyb20gZnVuY3Rpb24KaWVkX3Bs dWdpbl90cF9wcmVmaXggPT4gVGV4dHBhY2sgcHJlZml4CmllZF9wbHVnaW5fdHlwZSA9PiBQ bHVnaW4gdHlwZQppZWRfcGx1Z2luX3R5cGVfMCA9PiBQdWJsaWMKaWVkX3BsdWdpbl90eXBl XzEgPT4gQWRtaW4gKyBQdWJsaWMKaWVkX3BsdWdpbl90eXBlXzIgPT4gTGlicmFyeQppZWRf cGx1Z2luX3R5cGVfMyA9PiBBZG1pbiBvbmx5CmllZF9wbHVnaW5fdHlwZV80ID0+IEFkbWlu ICgrQUpBWCkKaWVkX3BsdWdpbl90eXBlXzUgPT4gQWRtaW4gKyBQdWJsaWMgKCtBSkFYKQpp ZWRfcGx1Z2luX3VwZGF0ZWQgPT4gUGx1Z2luIHtuYW1lfSB1cGRhdGVkCmllZF9wbHVnaW5f dXBsb2FkZWQgPT4gUGx1Z2luIHtuYW1lfSB1cGxvYWRlZAppZWRfcGx1Z2luX3VwbG9hZF9w aHAgPT4gVXBsb2FkIHBsdWdpbgppZWRfcGx1Z2luX3V0aWxzX2xlZ2VuZCA9PiBEaXN0cmli dXRpb24KaWVkX3BsdWdpbl91dGlsc19sZWdlbmRfZXh0cmEgPT4gT25seSBmb3IgdXNlIGFm dGVyIHNhdmluZwppZWRfcGx1Z2luX3ZpZXdfaGVscCA9PiBIZWxwOiB7bmFtZX0KI0BpZWRf cGx1Z2luCiNAbGFuZ3VhZ2UgZnIKaWVkX3BsdWdpbl9hbnkgPT4gVG91cwppZWRfcGx1Z2lu X2F1dG9fZW5hYmxlID0+IEFjdGl2ZXIgbGVzIHBsdWdpbnMgZMOocyBsZXVyIGluc3RhbGxh dGlvbgppZWRfcGx1Z2luX2NhY2hlcGx1Z3NfbGVnZW5kID0+IExlcyBQbHVnaW5zIHNvbnQg Y2hhcmfDqXMgZGVwdWlzIGxlIGNhY2hlCmllZF9wbHVnaW5fY2FjaGVfbm90X3NldCA9PiBM ZSBwYXJhbcOodHJlICJjaGVtaW4gZHUgY2FjaGUgZGVzIHBsdWdpbnMiIGRlcyBwcsOpZsOp cmVuY2VzIGF2YW5jw6llcyBuJ2VzdCBwYXMgcmVuc2VpZ27DqQppZWRfcGx1Z2luX2NoZWNr X3R5cGUgPT4gUmVuc2VpZ25leiBsZSB0eXBlIGRlIHZvdHJlIHBsdWdpbiAhCmllZF9wbHVn aW5fY2hvb3NlX2ZpbGUgPT4gVmV1aWxsZXogY2hvaXNpciBkJ2Fib3JkIHVuIGZpY2hpZXIK aWVkX3BsdWdpbl9jb2RlX2Rpc3QgPT4gQ29kZSBkZSBkaXN0cmlidXRpb24gZHUgcGx1Z2lu CmllZF9wbHVnaW5fY29kZV9sZWdlbmQgPT4gQ29kZSBzb3VyY2UgZHUgcGx1Z2luCmllZF9w bHVnaW5fY29kZV9zYXZlID0+IFNhdXZlZ2FyZGVyIGxlIGNvZGUKaWVkX3BsdWdpbl9jb2Rl X3NhdmVkID0+IENvZGUgc2F1dmVnYXJkw6kKaWVkX3BsdWdpbl9jb2RlX3NhdmVkX2ZhaWwg PT4gw4ljaGVjIGRlIHNhdXZlZ2FyZGUgZHUgY29kZQppZWRfcGx1Z2luX2NvbXBvc2VyID0+ IFBsdWdpbiBjb21wb3NlcgppZWRfcGx1Z2luX2NvbXByZXNzID0+IFppcAppZWRfcGx1Z2lu X2NwYW5lbF9sZWdlbmQgPT4gSW5zdGFsbGF0aW9uCmllZF9wbHVnaW5fY3JlYXRlX25ldyA9 PiBDcsOpZXIgdW4gbm91dmVhdSBwbHVnaW4KaWVkX3BsdWdpbl9kYnBsdWdzX2xlZ2VuZCA9 PiBQbHVnaW5zIGRpc3BvbmlibGVzCmllZF9wbHVnaW5fZG9jcyA9PiBEb2NzCmllZF9wbHVn aW5fZG9jc19sZWdlbmQgPT4gQWlkZSBkdSBwbHVnaW4KaWVkX3BsdWdpbl9lZGl0ID0+IMOJ ZGl0ZXIgOiB7bmFtZX0gdnt2ZXJzaW9ufQppZWRfcGx1Z2luX2VkaXRpbmcgPT4gw4lkaXRp b24gZGUge25hbWV9IGRlcHVpcyBQbHVnaW4gQ29tcG9zZXIKaWVkX3BsdWdpbl9lZGl0b3Ig PT4gw4lkaXRldXIgZGUgcGx1Z2lucwppZWRfcGx1Z2luX2VkaXRvcl9vcHRpb25zID0+IE9w dGlvbnMgZGUgY29uZmlndXJhdGlvbiBkZSBsJ8OpZGl0ZXVyIGRlIHBsdWdpbnMKaWVkX3Bs dWdpbl9lZGl0b3JfcGF0aCA9PiBVUkwgZGUgbCfDqWRpdGV1ciBkZSBwbHVnaW5zCmllZF9w bHVnaW5fZWRpdG9yX3dpZHRoID0+IFRhaWxsZSAobGFyZ2V1cikgZGUgbCfDqWRpdGV1ciBk ZSBwbHVnaW4KaWVkX3BsdWdpbl9lZGl0X25ldyA9PiDDiWRpdGVyIHZvdHJlIG5vdXZlYXUg cGx1Z2luCmllZF9wbHVnaW5fZW5hYmxlID0+IEFjdGl2w6kKaWVkX3BsdWdpbl9leHBvcnQg PT4gRXhwb3J0ZXIgc291cyB7bmFtZX0KaWVkX3BsdWdpbl9leHBvcnRfdGV4dHBhY2sgPT4g RXhwb3J0ZXIgbGUocykgdGV4dHBhY2socykKaWVkX3BsdWdpbl9leHBvcnRfemlwID0+IEV4 cG9ydGVyIHNvdXMge25hbWV9IChjb21wcmVzc8OpKQppZWRfcGx1Z2luX2ZsYWdzID0+IEZs YWdzCmllZF9wbHVnaW5fZmxhZ19oYXNfcHJlZnMgPT4gQSBsZXMgcHLDqWZzCmllZF9wbHVn aW5fZmxhZ19saWZlY3ljbGVfbm90aWZ5ID0+IE5vdGlmaWNhdGlvbiBkJ8OpdsOpbmVtZW50 CmllZF9wbHVnaW5fZm5fbm90X2V4aXN0ID0+IChsYSBmb25jdGlvbiBlc3QgcHJvYmFibGVt ZW50IGVuIGphdmFzY3JpcHQgb3UgY29udGllbnQgZHUgUEhQIGNvcnJvbXB1KQppZWRfcGx1 Z2luX2hlbHBfZWRpdG9yID0+IMOJZGl0ZXVyIGRlIGwnYWlkZQppZWRfcGx1Z2luX2hlbHBf ZWRpdG9yX29wdGlvbnMgPT4gQ29uZmlndXJhdGlvbiBwb3VyIGwnw6lkaXRldXIgZGUgbCdh aWRlCmllZF9wbHVnaW5faGVscF9lZGl0b3JfcGF0aCA9PiBVUkwgcG91ciBsJ8OpZGl0ZXVy IGRlIGwnYWlkZQppZWRfcGx1Z2luX2hlbHBfbm90X2F2YWlsYWJsZSA9PiBBaWRlIGR1IHBs dWdpbiBub24gZGlzcG9uaWJsZQppZWRfcGx1Z2luX2lmX2VsX2Rpc3QgPT4gQ29kZSBkZSBk aXN0cmlidXRpb24KaWVkX3BsdWdpbl9pZl9lbF9zdHlsZSA9PiBCbG9jIENTUyBwb3VyIGwn YWlkZQppZWRfcGx1Z2luX2lmX3NldHRpbmdzID0+IFBhcmFtw6h0cmVzIGRlIGwnaW50ZXJm YWNlCmllZF9wbHVnaW5faW5zdGFsbF90eHQgPT4gSW5zdGFsbGVyIGRlcHVpcyB1biBmaWNo aWVyIC50eHQKaWVkX3BsdWdpbl9pbnRlcmZhY2VfZWxlbXMgPT4gw4lsw6ltZW50cyBvcHRp b25lbHMgZGUgbCdpbnRlcmZhY2UKaWVkX3BsdWdpbl9qdW1wX3RvX2xpbmUgPT4gQWxsZXIg w6AgbGEgbGlnbmUgOgppZWRfcGx1Z2luX2xhbmdzX2FsbCA9PiBUb3V0ZXMgZGlzcG9uaWJs ZXMKaWVkX3BsdWdpbl9sYW5nc19pbnN0YWxsZWQgPT4gU2V1bGVtZW50IGluc3RhbGzDqWVz CmllZF9wbHVnaW5fbGFuZ19jaG9vc2UgPT4gTGlzdGUgZGVzIHRyYWR1Y3Rpb25zIChUZXh0 cGFjaykKaWVkX3BsdWdpbl9sYW5nX2RlZmF1bHQgPT4gTGFuZ3VlIHBhciBkw6lmYXV0IChU ZXh0cGFjaykKaWVkX3BsdWdpbl9sYmxfbGNfZGVsZXRlID0+IFN1cHByaW1lcgppZWRfcGx1 Z2luX2xibF9sY19kaXNhYmxlID0+IETDqXNhY3RpdmVyCmllZF9wbHVnaW5fbGJsX2xjX2Vu YWJsZSA9PiBBY3RpdmVyCmllZF9wbHVnaW5fbGJsX2xjX2luc3RhbGwgPT4gSW5zdGFsbGVy CmllZF9wbHVnaW5fbGJsX29wX2NvZGVfZmlyc3QgPT4gQ29kZSBhdSBkw6lidXQKaWVkX3Bs dWdpbl9sYmxfb3BfaGVscF9maXJzdCA9PiBBaWRlIGF1IGTDqWJ1dAppZWRfcGx1Z2luX2xi bF9zZXR1cCA9PiBDb25maWd1cmF0aW9uIGRlIFBsdWdpbiBjb21wb3NlcgppZWRfcGx1Z2lu X2xpZmVjeWNsZV9vcHRpb25zID0+IFLDqWFsaXNlciBsZXMgYWN0aW9ucyAibGlmZWN5Y2xl IiBzdXIKaWVkX3BsdWdpbl9sb2FkID0+IENoYXJnZXIKaWVkX3BsdWdpbl9sb2FkX29yZGVy ID0+IE9yZHJlIGRlIGNoYXJnZW1lbnQKaWVkX3BsdWdpbl9sb2FkX29yZGVyX2hlbHAgPT4g KDE9cHJlbWllciA+IDU9bm9ybWFsID4gOT1kZXJuaWVyKQppZWRfcGx1Z2luX21ldGFfbGVn ZW5kID0+IE1ldGEgaW5mb3JtYXRpb24KaWVkX3BsdWdpbl9tc2dwb3BfbGJsID0+IEJsb2Mg cGhwZG9jCmllZF9wbHVnaW5fbmFtZV9maXJzdCA9PiBWZXVpbGxleiBub21tZXIgbGUgcGx1 Z2luIGF2YW50IGRlIHBvdXZvaXIgbGUgY3LDqWVyCmllZF9wbHVnaW5fb3V0cHV0X29yZGVy ID0+IE9yZGUgZCdleHBvcnRhdGlvbiBkdSBzb3VyY2UgUEhQCmllZF9wbHVnaW5fb3V0cHV0 X3NmaWxlID0+IE5vbXMgZCdleHBvcnRhdGlvbiBkZXMgZmljaGllcnMgcGx1Z2luCmllZF9w bHVnaW5fb3V0cHV0X3NmaWxlYyA9PiBOb21zIGRlcyBmaWNoaWVycyBjb21wcmVzc8Opcwpp ZWRfcGx1Z2luX291dHB1dF9zZmlsZXAgPT4gTm9tcyBkZXMgZmljaGllcnMgUGx1Z2luCmll ZF9wbHVnaW5fb3V0cHV0X3NmaWxldCA9PiBOb21zIGRlcyBmaWNoaWVycyBUZXh0cGFjawpp ZWRfcGx1Z2luX291dHB1dF90bXBjYWNoZSA9PiBDaGVtaW4gZHUgY2FjaGUgZGUgbCdhaWRl IHNvdXMgVGV4dGlsZQppZWRfcGx1Z2luX3BhY2tfbGVnZW5kID0+IENoYcOubmVzIGR1IFRl eHRwYWNrCmllZF9wbHVnaW5fcGhwX2RvYyA9PiBDcsOpZXIgdW4gcGhwZG9jCmllZF9wbHVn aW5fcHJlZnMgPT4gUHLDqWbDqXJlbmNlcwppZWRfcGx1Z2luX3ByZWZzX2RlbGV0ZWQgPT4g UHLDqWbDqXJlbmNlcyBzdXBwcmltw6llcwppZWRfcGx1Z2luX3JlbmFtZWQgPT4gKHJlbm9t w6kpCmllZF9wbHVnaW5fcmVuYW1lX2ZhaWxlZCA9PiAow6ljaGVjIGRlIHJlbm9tYWdlKQpp ZWRfcGx1Z2luX3JlbmFtZV9maWxlID0+IFJlbm9tZXIgbGUgZmljaGllcgppZWRfcGx1Z2lu X3Jlc3RvcmVkID0+IFBsdWdpbiB7bmFtZX0gcmVzdGF1csOpLgppZWRfcGx1Z2luX3Jlc3Rv cmVfaGVscCA9PiBSZXN0aXR1ZXIgbGUgY29kZSBkdSBwbHVnaW4gw6AgcGFydGlyIGRlIHNv biBkZXJuaWVyIHBvaW50IGRlIHJlc3RhdXJhdGlvbgppZWRfcGx1Z2luX3Jlc3RvcmVfcG9p bnQgPT4gUG9pbnQgZGUgcmVzdGF1cmF0aW9uCmllZF9wbHVnaW5fcmVzdG9yZV92ZXJpZnkg PT4gw4p0ZXMtdm91cyBzw7tyIGRlIHZvdWxvaXIgcmVzdGl0dWVyIGxlIGNvZGUgc291cmNl IGRlIHtuYW1lfSDDoCBwYXJ0aXIgZGUgc29uIGRlcm5pZXIgcG9pbnQgZGUgcmVzdGF1cmF0 aW9uID8KaWVkX3BsdWdpbl9ydW5faW5zdGFsbCA9PiBFZmZlY3R1ZXIgbGVzIGFjdGlvbnMg ZGUgcG9zdC1pbnN0YWxsYXRpb24KaWVkX3BsdWdpbl9zYW1lID0+IE5vbQppZWRfcGx1Z2lu X3NhdmVfYXMgPT4gU2F1dmVyIHNvdXMge25hbWV9CmllZF9wbHVnaW5fc2V0dXAgPT4gQ29u ZmlndXJhdGlvbgppZWRfcGx1Z2luX3N5bnRheF9jaGVjayA9PiBWw6lyaWZpZXIgbGEgc3lu dGF4ZSBkdSBjb2RlIGF2YW50IHNhdXZlZ2FyZGUKaWVkX3BsdWdpbl9zeW50YXhfZXJyID0+ IEVycmV1ciBkZSBzeW50YXhlCmllZF9wbHVnaW5fdHBfcG9wdWxhdGUgPT4gRXNzYXllciBk ZSBjaGFyZ2VyIGxlcyBjaGHDrm5lcyBkZXB1aXMgbGEgZm9uY3Rpb24KaWVkX3BsdWdpbl90 cF9wcmVmaXggPT4gUHLDqWZpeGUgZHUgVGV4dHBhY2sKaWVkX3BsdWdpbl90eXBlID0+IFR5 cGUgZGUgcGx1Z2luCmllZF9wbHVnaW5fdHlwZV8wID0+IFB1YmxpYwppZWRfcGx1Z2luX3R5 cGVfMSA9PiBBZG1pbiArIFB1YmxpYwppZWRfcGx1Z2luX3R5cGVfMiA9PiBMaWJyYXJpZQpp ZWRfcGx1Z2luX3R5cGVfMyA9PiBBZG1pbiBzZXVsCmllZF9wbHVnaW5fdHlwZV80ID0+IEFk bWluICgrQUpBWCkKaWVkX3BsdWdpbl90eXBlXzUgPT4gQWRtaW4gKyBQdWJsaWMgKCtBSkFY KQppZWRfcGx1Z2luX3VwZGF0ZWQgPT4gUGx1Z2luIHtuYW1lfSBtaXMgw6Agam91cgppZWRf cGx1Z2luX3VwbG9hZGVkID0+IFBsdWdpbiB7bmFtZX0gdMOpbMOpY2hhcmfDqQppZWRfcGx1 Z2luX3VwbG9hZF9waHAgPT4gVMOpbMOpY2hhcmdlciB1biBwbHVnaW4KaWVkX3BsdWdpbl91 dGlsc19sZWdlbmQgPT4gRGlzdHJpYnV0aW9uCmllZF9wbHVnaW5fdXRpbHNfbGVnZW5kX2V4 dHJhID0+IEVmZmVjdGlmIGFwcsOocyBzYXV2ZWdhcmRlCmllZF9wbHVnaW5fdmlld19oZWxw ID0+IEFpZGUgZGUgOiB7bmFtZX0iO30=