IyEvdXNyL2Jpbi9wZXJsIC13VAojIC0qLSBNb2RlOiBwZXJsOyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCiMKIyBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYwojIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCiMgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCiMgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCiMKIyBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKIyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCiMgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiMgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwojIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBMREFQIHRvIEJ1Z3ppbGxhIFVzZXIgU3luYyBUb29sLgojCiMgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIEFuZHJlYXMgSPZmbGVyLgojIFBvcnRpb25zIGNyZWF0ZWQgYnkgQW5kcmVhcyBI9mZsZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMwojIEFuZHJlYXMgSPZmbGVyLiBBbGwKIyBSaWdodHMgUmVzZXJ2ZWQuCiMKIyBDb250cmlidXRvcihzKTogQW5kcmVhcyBI9mZsZXIgPGFuZHJlYXMuaG9lZmxlckBiZWFyaW5ncG9pbnQuY29tPgojCgp1c2Ugc3RyaWN0OwoKcmVxdWlyZSAiQ0dJLnBsIjsKCnVzZSBsaWIgcXcoLik7Cgp1c2UgTmV0OjpMREFQOwoKbXkgJGNnaSA9IEJ1Z3ppbGxhLT5jZ2k7Cm15ICRkYmggPSBCdWd6aWxsYS0+ZGJoOwoKbXkgJHJlYWRvbmx5ID0gMDsKbXkgJG5vZGlzYWJsZSA9IDA7Cm15ICRub3VwZGF0ZSA9IDA7Cm15ICRub2NyZWF0ZSA9IDA7Cm15ICRxdWlldCAgICA9IDA7CgojIyMKIyBEbyBzb21lIHByZXBhcmF0aW9ucwojIyMKZm9yZWFjaCBteSAkYXJnIChAQVJHVikKewogICBpZigkYXJnIGVxICctcicpIHsKICAgICAgJHJlYWRvbmx5ID0gMTsKICAgfQogICBlbHNpZigkYXJnIGVxICctZCcpIHsKICAgICAgJG5vZGlzYWJsZSA9IDE7CiAgIH0KICAgZWxzaWYoJGFyZyBlcSAnLXUnKSB7CiAgICAgICRub3VwZGF0ZSA9IDE7CiAgIH0KICAgZWxzaWYoJGFyZyBlcSAnLWMnKSB7CiAgICAgICRub2NyZWF0ZSA9IDE7CiAgIH0KICAgZWxzaWYoJGFyZyBlcSAnLXEnKSB7CiAgICAgICRxdWlldCA9IDE7CiAgIH0KICAgZWxzZSB7CiAgICAgICAgIHByaW50ICJMREFQIFN5bmMgU2NyaXB0XG4iOwogICAgICAgICBwcmludCAiU3luY3Jvbml6ZXMgdGhlIHVzZXJzIHRhYmxlIGZyb20gdGhlIExEQVAgc2VydmVyIHdpdGggdGhlIEJ1Z3ppbGxhIHVzZXJzLlxuIjsKICAgICAgICAgcHJpbnQgIlRha2VzIG1haWwtYXR0cmlidXRlIGZyb20gcHJlZmVyZW5jZXMgYW5kIGRlc2NyaXB0aW9uIGZyb20gJ2NuJyBvcixcbiI7CiAgICAgICAgIHByaW50ICJpZiBub3QgYXZhaWxhYmxlLCBmcm9tIHRoZSB1aWQtYXR0cmlidXRlLlxuXG4iOwogICAgICAgICBwcmludCAidXNhZ2U6XG4gc3luY0xEQVAucGwgW29wdGlvbnNdXG5cbiI7CiAgICAgICAgIHByaW50ICJvcHRpb25zOlxuIjsKICAgICAgICAgcHJpbnQgIiAtciBSZWFkb25seSwgZG8gbm90IG1ha2UgY2hhbmdlcyB0byBCdWd6aWxsYSB0YWJsZXNcbiI7CiAgICAgICAgIHByaW50ICIgLWQgTm8gZGlzYWJsZSwgZG9uJ3QgZGlzYWJsZSB1c2Vycywgd2hpY2ggYXJlIG5vdCBpbiBMREFQXG4iOwogICAgICAgICBwcmludCAiIC11IE5vIHVwZGF0ZSwgZG9uJ3QgdXBkYXRlIHVzZXJzLCB3aGljaCBoYXZlIGRpZmZlcmVudCBkZXNjcmlwdGlvbiBpbiBMREFQXG4iOwogICAgICAgICBwcmludCAiIC1jIE5vIGNyZWF0ZSwgZG9uJ3QgY3JlYXRlIHVzZXJzLCB3aGljaCBhcmUgaW4gTERBUCBidXQgbm90IGluIEJ1Z3ppbGxhXG4iOwogICAgICAgICBwcmludCAiIC1xIFF1aWV0IG1vZGUsIGdpdmUgbGVzcyBvdXRwdXRcbiI7CiAgICAgICAgIHByaW50ICJcbiI7CiAgICAgICAgIGV4aXQ7CiAgIH0KfQoKbXkgJWJ1Z3ppbGxhX3VzZXJzOwpteSAlbGRhcF91c2VyczsKCiMjIwojIEdldCBjdXJyZW50IGJ1Z3ppbGxhIHVzZXJzCiMjIwpTZW5kU1FMKCJTRUxFQ1QgbG9naW5fbmFtZSwgcmVhbG5hbWUsIGRpc2FibGVkdGV4dCAiIC4KICAgICAgICAiRlJPTSBwcm9maWxlcyIgKTsKd2hpbGUgKE1vcmVTUUxEYXRhKCkpIHsKICAgIG15ICgkbG9naW5fbmFtZSwgJHJlYWxuYW1lLCAkZGlzYWJsZWR0ZXh0KSAKICAgICAgICA9IEZldGNoU1FMRGF0YSgpOwogICAgICAgIAogICAgIyByZW1vdmUgd2hpdGVzcGFjZXMKICAgICRyZWFsbmFtZSA9fiBzL15ccyt8XHMrJC8vZzsKICAgIAogICAgJGJ1Z3ppbGxhX3VzZXJzeyRsb2dpbl9uYW1lfSA9IHsgcmVhbG5hbWUgICAgICAgICA9PiAkcmVhbG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfbG9naW5fbmFtZSAgID0+ICRsb2dpbl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWR0ZXh0ICAgICA9PiAkZGlzYWJsZWR0ZXh0IH07Cn0KCiMjIwojIEdldCBjdXJyZW50IExEQVAgdXNlcnMKIyMjCm15ICRMREFQc2VydmVyID0gUGFyYW0oIkxEQVBzZXJ2ZXIiKTsKaWYgKCRMREFQc2VydmVyIGVxICIiKSB7CiAgIHByaW50ICJObyBMREFQIHNlcnZlciBkZWZpbmVkIGluIGJ1Z3ppbGxhIHByZWZlcmVuY2VzLlxuIjsKICAgZXhpdDsKfQpteSAkTERBUHBvcnQgPSAiMzg5IjsgICMgZGVmYXVsdCBMREFQIHBvcnQKaWYoJExEQVBzZXJ2ZXIgPX4gLzovKSB7CiAgICAoJExEQVBzZXJ2ZXIsICRMREFQcG9ydCkgPSBzcGxpdCgiOiIsJExEQVBzZXJ2ZXIpOwp9CgpteSAkTERBUGNvbm4gPSBOZXQ6OkxEQVAtPm5ldygkTERBUHNlcnZlciwgcG9ydCA9PiAkTERBUHBvcnQsIHZlcnNpb24gPT4gMyk7CmlmKCEkTERBUGNvbm4pIHsKICAgcHJpbnQgIkNvbm5lY3RpbmcgdG8gTERBUCBzZXJ2ZXIgZmFpbGVkLiBDaGVjayBMREFQc2VydmVyIHNldHRpbmcuXG4iOwogICBleGl0Owp9Cm15ICRtZXNnOwppZiAoUGFyYW0oIkxEQVBiaW5kZG4iKSkgewogICAgbXkgKCRMREFQYmluZGRuLCRMREFQYmluZHBhc3MpID0gc3BsaXQoIjoiLFBhcmFtKCJMREFQYmluZGRuIikpOwogICAgJG1lc2cgPSAkTERBUGNvbm4tPmJpbmQoJExEQVBiaW5kZG4sIHBhc3N3b3JkID0+ICRMREFQYmluZHBhc3MpOwp9CmVsc2UgewogICAgJG1lc2cgPSAkTERBUGNvbm4tPmJpbmQoKTsKfQppZigkbWVzZy0+Y29kZSkgewogICBwcmludCAiQmluZGluZyB0byBMREFQIHNlcnZlciBmYWlsZWQ6ICIgLiAkbWVzZy0+ZXJyb3IgLiAiXG5DaGVjayBMREFQYmluZGRuIHNldHRpbmcuXG4iOwogICBleGl0Owp9CgojIFdlJ3ZlIGdvdCBvdXIgYW5vbnltb3VzIGJpbmQ7ICBsZXQncyBsb29rIHVwIHRoZSB1c2Vycy4KJG1lc2cgPSAkTERBUGNvbm4tPnNlYXJjaCggYmFzZSAgID0+IFBhcmFtKCJMREFQQmFzZUROIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlICA9PiAic3ViIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0+ICcoJignIC4gUGFyYW0oIkxEQVB1aWRhdHRyaWJ1dGUiKSAuICI9KikiIC4gUGFyYW0oIkxEQVBmaWx0ZXIiKSAuICcpJywKICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKCmlmKCEgJG1lc2ctPmNvdW50KSB7CiAgIHByaW50ICJMREFQIGxvb2t1cCBmYWlsdXJlLiBDaGVjayBMREFQQmFzZUROIHNldHRpbmcuXG4iOwogICBleGl0Owp9CiAgIApteSAkdmFsID0gJG1lc2ctPmFzX3N0cnVjdDsKCndoaWxlKCBteSAoJGtleSwgJHZhbHVlKSA9IGVhY2goJSR2YWwpICkgewoKICAgbXkgJGxvZ2luX25hbWUgPSBAJHZhbHVle1BhcmFtKCJMREFQbWFpbGF0dHJpYnV0ZSIpfTsKICAgbXkgJHJlYWxuYW1lICA9IEAkdmFsdWV7ImNuIn07CgogICAjIG5vIG1haWwgZW50ZXJlZD8gZ28gdG8gbmV4dAogICBpZighIGRlZmluZWQgJGxvZ2luX25hbWUpIHsgCiAgICAgIHByaW50ICIka2V5IGhhcyBubyB2YWxpZCBtYWlsIGFkZHJlc3NcbiI7CiAgICAgIG5leHQ7IAogICB9CgogICAjIG5vIGNuIGVudGVyZWQ/IHVzZSB1aWQgaW5zdGVhZAogICBpZighIGRlZmluZWQgJHJlYWxuYW1lKSB7IAogICAgICAkcmVhbG5hbWUgPSBAJHZhbHVle1BhcmFtKCJMREFQdWlkYXR0cmlidXRlIil9OwogICB9CiAgCiAgIG15ICRsb2dpbiA9IHNoaWZ0IEAkbG9naW5fbmFtZTsKICAgbXkgJHJlYWwgPSBzaGlmdCBAJHJlYWxuYW1lOwogICAkbGRhcF91c2Vyc3skbG9naW59ID0geyByZWFsbmFtZSA9PiAkcmVhbCB9Owp9CgpwcmludCAiXG4iIHVubGVzcyAkcXVpZXQ7CgojIyMKIyBTb3J0IHRoZSB1c2VycyBpbnRvIGRpc2FibGUvdXBkYXRlL2NyZWF0ZS1MaXN0cyBhbmQgZGlzcGxheSBldmVyeXRoaW5nCiMjIwpteSAlZGlzYWJsZV91c2VyczsKbXkgJXVwZGF0ZV91c2VyczsKbXkgJWNyZWF0ZV91c2VyczsKCnByaW50ICJCdWd6aWxsYS1Vc2VyczogXG4iIHVubGVzcyAkcXVpZXQ7CndoaWxlKCBteSAoJGtleSwgJHZhbHVlKSA9IGVhY2goJWJ1Z3ppbGxhX3VzZXJzKSApIHsKICBwcmludCAiICIgLiAka2V5IC4gIiAnIiAuIEAkdmFsdWV7J3JlYWxuYW1lJ30gLiAiJyAiIC4gQCR2YWx1ZXsnZGlzYWJsZWR0ZXh0J30gLiJcbiIgdW5sZXNzICRxdWlldD09MTsKICBpZighZXhpc3RzICRsZGFwX3VzZXJzeyRrZXl9KXsKICAgICBpZihAJHZhbHVleydkaXNhYmxlZHRleHQnfSBlcSAnJykgewogICAgICAgJGRpc2FibGVfdXNlcnN7JGtleX0gPSAkdmFsdWU7CiAgICAgfQogIH0KfQoKcHJpbnQgIlxuTERBUC1Vc2VyczogXG4iIHVubGVzcyAkcXVpZXQ7CndoaWxlKCBteSAoJGtleSwgJHZhbHVlKSA9IGVhY2goJWxkYXBfdXNlcnMpICkgewogIHByaW50ICIgIiAuICRrZXkgLiAiICciIC4gQCR2YWx1ZXsncmVhbG5hbWUnfSAuICInXG4iIHVubGVzcyAkcXVpZXQ9PTE7CiAgaWYoIWV4aXN0cyAkYnVnemlsbGFfdXNlcnN7JGtleX0pewogICAgJGNyZWF0ZV91c2Vyc3ska2V5fSA9ICR2YWx1ZTsKICB9CiAgZWxzZSB7IAogICAgbXkgJGJ1Z3ppbGxhX3VzZXJfdmFsdWUgPSAkYnVnemlsbGFfdXNlcnN7JGtleX07CiAgICBpZihAJGJ1Z3ppbGxhX3VzZXJfdmFsdWV7J3JlYWxuYW1lJ30gbmUgQCR2YWx1ZXsncmVhbG5hbWUnfSkgewogICAgICAkdXBkYXRlX3VzZXJzeyRrZXl9ID0gJHZhbHVlOwogICAgfQogIH0KfQoKcHJpbnQgIlxuRGV0ZWN0aW5nIGVtYWlsIGNoYW5nZXM6IFxuIiB1bmxlc3MgJHF1aWV0Owp3aGlsZSggbXkgKCRjcmVhdGVfa2V5LCAkY3JlYXRlX3ZhbHVlKSA9IGVhY2goJWNyZWF0ZV91c2VycykgKSB7CiAgd2hpbGUoIG15ICgkZGlzYWJsZV9rZXksICRkaXNhYmxlX3ZhbHVlKSA9IGVhY2goJWRpc2FibGVfdXNlcnMpICkgewogICAgaWYoQCRjcmVhdGVfdmFsdWV7J3JlYWxuYW1lJ30gZXEgQCRkaXNhYmxlX3ZhbHVleydyZWFsbmFtZSd9KSB7CiAgICAgICBwcmludCAiICIgLiAkZGlzYWJsZV9rZXkgLiAiID0+ICIgLiAkY3JlYXRlX2tleSAuIidcbiIgdW5sZXNzICRxdWlldD09MTsKICAgICAgICR1cGRhdGVfdXNlcnN7JGRpc2FibGVfa2V5fSA9IHsgcmVhbG5hbWUgPT4gQCRjcmVhdGVfdmFsdWV7J3JlYWxuYW1lJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19sb2dpbl9uYW1lID0+ICRjcmVhdGVfa2V5IH07CiAgICAgICBkZWxldGUgJGNyZWF0ZV91c2Vyc3skY3JlYXRlX2tleX07CiAgICAgICBkZWxldGUgJGRpc2FibGVfdXNlcnN7JGRpc2FibGVfa2V5fTsKICAgIH0KICB9Cn0KCmlmKCRxdWlldCA9PSAwKSB7CiAgIHByaW50ICJcblVzZXJzIHRvIGRpc2FibGU6IFxuIjsKICAgd2hpbGUoIG15ICgka2V5LCAkdmFsdWUpID0gZWFjaCglZGlzYWJsZV91c2VycykgKSB7CiAgICAgcHJpbnQgIiAiIC4gJGtleSAuICIgJyIgLiBAJHZhbHVleydyZWFsbmFtZSd9IC4gIidcbiI7CiAgIH0KICAgCiAgIHByaW50ICJcblVzZXJzIHRvIHVwZGF0ZTogXG4iOwogICB3aGlsZSggbXkgKCRrZXksICR2YWx1ZSkgPSBlYWNoKCV1cGRhdGVfdXNlcnMpICkgewogICAgIHByaW50ICIgIiAuICRrZXkgLiAiICciIC4gQCR2YWx1ZXsncmVhbG5hbWUnfSAuICInICI7CiAgICAgaWYoZGVmaW5lZCBAJHZhbHVleyduZXdfbG9naW5fbmFtZSd9KSB7CiAgICAgICBwcmludCAiaGFzIGNoYW5nZWQgZW1haWwgdG8gIiAuIEAkdmFsdWV7J25ld19sb2dpbl9uYW1lJ307CiAgICAgfQogICAgIHByaW50ICJcbiI7CiAgIH0KICAgCiAgIHByaW50ICJcblVzZXJzIHRvIGNyZWF0ZTogXG4iOwogICB3aGlsZSggbXkgKCRrZXksICR2YWx1ZSkgPSBlYWNoKCVjcmVhdGVfdXNlcnMpICkgewogICAgIHByaW50ICIgIiAuICRrZXkgLiAiICciIC4gQCR2YWx1ZXsncmVhbG5hbWUnfSAuICInXG4iOwogICB9CiAgIAogICBwcmludCAiXG5cbiI7Cn0KCgojIyMKIyBub3cgZG8gdGhlIERCLVVwZGF0ZQojIyMKaWYoJHJlYWRvbmx5ID09IDApIHsKICAgcHJpbnQgIlBlcmZvcm1pbmcgREIgdXBkYXRlOlxuUGhhc2UgMTogZGlzYWJsaW5nIG5vdC1leGlzdGluZyB1c2Vycy4uLiAiIHVubGVzcyAkcXVpZXQ7CiAgIGlmKCRub2Rpc2FibGUgPT0gMCkgewogICAgICB3aGlsZSggbXkgKCRrZXksICR2YWx1ZSkgPSBlYWNoKCVkaXNhYmxlX3VzZXJzKSApIHsKICAgICAgICBTZW5kU1FMKCJVUERBVEUgcHJvZmlsZXMgU0VUIGRpc2FibGVkdGV4dCA9ICdhdXRvLWRpc2FibGVkIGJ5IGxkYXAgIiAuCiAgICAgICAgICAgICAgICAic3luYycgV0hFUkUgIiAuICRkYmgtPnNxbF9pc3RyY21wKCdsb2dpbl9uYW1lJywgCiAgICAgICAgICAgICAgICAkZGJoLT5xdW90ZSgka2V5KSkpOwogICAgICB9CiAgICAgIHByaW50ICJkb25lIVxuIiB1bmxlc3MgJHF1aWV0OwogICB9CiAgIGVsc2UgewogICAgICBwcmludCAiZGlzYWJsZWQhXG4iIHVubGVzcyAkcXVpZXQ7CiAgIH0KICAgCiAgIHByaW50ICJQaGFzZSAyOiB1cGRhdGluZyBleGlzdGluZyB1c2Vycy4uLiAiIHVubGVzcyAkcXVpZXQ7CiAgIGlmKCRub3VwZGF0ZSA9PSAwKSB7CiAgICAgIHdoaWxlKCBteSAoJGtleSwgJHZhbHVlKSA9IGVhY2goJXVwZGF0ZV91c2VycykgKSB7CiAgICAgICAgaWYoZGVmaW5lZCBAJHZhbHVleyduZXdfbG9naW5fbmFtZSd9KSB7CiAgICAgICAgICBTZW5kU1FMKCJVUERBVEUgcHJvZmlsZXMgU0VUIGxvZ2luX25hbWUgPSAnIiAuIAogICAgICAgICAgICAgICAgICBAJHZhbHVleyduZXdfbG9naW5fbmFtZSd9IC4gIicgV0hFUkUgIiAuCiAgICAgICAgICAgICAgICAgICRkYmgtPnNxbF9pc3RyY21wKCdsb2dpbl9uYW1lJywgJGRiaC0+cXVvdGUoJGtleSkpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgU2VuZFNRTCgiVVBEQVRFIHByb2ZpbGVzIFNFVCByZWFsbmFtZSA9ICciIC4gQCR2YWx1ZXsncmVhbG5hbWUnfSAuCiAgICAgICAgICAgICAgICAgICAiJyBXSEVSRSAiIC4gJGRiaC0+c3FsX2lzdHJjbXAoJ2xvZ2luX25hbWUnLCAkZGJoLT5xdW90ZSgka2V5KSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBwcmludCAiZG9uZSFcbiIgdW5sZXNzICRxdWlldDsKICAgfQogICBlbHNlIHsKICAgICAgcHJpbnQgImRpc2FibGVkIVxuIiB1bmxlc3MgJHF1aWV0OwogICB9CiAgIAogICBwcmludCAiUGhhc2UgMzogY3JlYXRpbmcgbmV3IHVzZXJzLi4uICIgdW5sZXNzICRxdWlldDsKICAgaWYoJG5vY3JlYXRlID09IDApIHsKICAgICAgd2hpbGUoIG15ICgka2V5LCAkdmFsdWUpID0gZWFjaCglY3JlYXRlX3VzZXJzKSApIHsKICAgICAgICBTZW5kU1FMKCJJTlNFUlQgSU5UTyBwcm9maWxlcyBWQUxVRVMgKCcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyRrZXknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3h4S0ZJeTRXUjY2bUEnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciIC4gQCR2YWx1ZXsncmVhbG5hbWUnfSAuICInLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4Y2x1ZGVTZWxmfm9ufmVtYWlsT3duZXJSZW1vdmVtZX5vbn5lbWFpbE93bmVyQ29tbWVudHN+b25+ZW1haWxPd25lckF0dGFjaG1lbnRzfm9ufmVtYWlsT3duZXJTdGF0dXN+b25+ZW1haWxPd25lclJlc29sdmVkfm9ufmVtYWlsT3duZXJLZXl3b3Jkc35vbn5lbWFpbE93bmVyQ0N+b25+ZW1haWxPd25lck90aGVyfm9ufmVtYWlsT3duZXJVbmNvbmZpcm1lZH5vbn5lbWFpbFJlcG9ydGVyUmVtb3ZlbWV+b25+ZW1haWxSZXBvcnRlckNvbW1lbnRzfm9ufmVtYWlsUmVwb3J0ZXJBdHRhY2htZW50c35vbn5lbWFpbFJlcG9ydGVyU3RhdHVzfm9ufmVtYWlsUmVwb3J0ZXJSZXNvbHZlZH5vbn5lbWFpbFJlcG9ydGVyS2V5d29yZHN+b25+ZW1haWxSZXBvcnRlckNDfm9ufmVtYWlsUmVwb3J0ZXJPdGhlcn5vbn5lbWFpbFJlcG9ydGVyVW5jb25maXJtZWR+b25+ZW1haWxRQWNvbnRhY3RSZW1vdmVtZX5vbn5lbWFpbFFBY29udGFjdENvbW1lbnRzfm9ufmVtYWlsUUFjb250YWN0QXR0YWNobWVudHN+b25+ZW1haWxRQWNvbnRhY3RTdGF0dXN+b25+ZW1haWxRQWNvbnRhY3RSZXNvbHZlZH5vbn5lbWFpbFFBY29udGFjdEtleXdvcmRzfm9ufmVtYWlsUUFjb250YWN0Q0N+b25+ZW1haWxRQWNvbnRhY3RPdGhlcn5vbn5lbWFpbFFBY29udGFjdFVuY29uZmlybWVkfm9ufmVtYWlsQ0NsaXN0UmVtb3ZlbWV+b25+ZW1haWxDQ2xpc3RDb21tZW50c35vbn5lbWFpbENDbGlzdEF0dGFjaG1lbnRzfm9ufmVtYWlsQ0NsaXN0U3RhdHVzfm9ufmVtYWlsQ0NsaXN0UmVzb2x2ZWR+b25+ZW1haWxDQ2xpc3RLZXl3b3Jkc35vbn5lbWFpbENDbGlzdENDfm9ufmVtYWlsQ0NsaXN0T3RoZXJ+b25+ZW1haWxDQ2xpc3RVbmNvbmZpcm1lZH5vbn5lbWFpbFZvdGVyUmVtb3ZlbWV+b25+ZW1haWxWb3RlckNvbW1lbnRzfm9ufmVtYWlsVm90ZXJBdHRhY2htZW50c35vbn5lbWFpbFZvdGVyU3RhdHVzfm9ufmVtYWlsVm90ZXJSZXNvbHZlZH5vbn5lbWFpbFZvdGVyS2V5d29yZHN+b25+ZW1haWxWb3RlckNDfm9ufmVtYWlsVm90ZXJPdGhlcn5vbn5lbWFpbFZvdGVyVW5jb25maXJtZWR+b24nLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2RhdGUoKSkiKTsKICAgICAgfQogICAgICBwcmludCAiZG9uZSFcbiIgdW5sZXNzICRxdWlldDsKICAgfQogICBlbHNlIHsKICAgICAgcHJpbnQgImRpc2FibGVkIVxuIiB1bmxlc3MgJHF1aWV0OwogICB9Cn0KZWxzZQp7CiAgIHByaW50ICJObyBjaGFuZ2VzIHRvIERCIGJlY2F1c2UgcmVhZG9ubHkgbW9kZVxuIiB1bmxlc3MgJHF1aWV0Owp9Cgo=