IyEvdXNyL2Jpbi9wZXJsIC13CiMgLSotIGNvZGluZzogaXNvLTg4NTktMSAtKi0KIyAJJElkOiBpc3BlbGxhZmYybXlzcGVsbCx2IDEuMiAyMDEwLzAyLzIzIDEyOjA1OjUxIGNhb2xhbiBFeHAgJAojIAojICAgKEMpIDIwMDItMjAwNSBBZ3VzdGluIE1hcnRpbiBEb21pbmdvIDxhZ3VzdGluLm1hcnRpbkBoaXNwYWxpbnV4LmVzPiAKIyAKIyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwojICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KCgpzdWIgdXNhZ2UgewogICAgcHJpbnQgImlzcGVsbGFmZjJteXNwZWxsOiBBIHByb2dyYW0gdG8gY29udmVydCBpc3BlbGwgYWZmaXggdGFibGVzIHRvIG15c3BlbGwgZm9ybWF0CihDKSAyMDAyLTIwMDUgQWd1c3RpbiBNYXJ0aW4gRG9taW5nbyA8YWd1c3Rpbi5tYXJ0aW5cQGhpc3BhbGludXguZXM+ICAgICAgICAgTGljZW5zZTogR1BMCgpVc2FnZToKCWlzcGVsbGFmZjJteXNwZWxsIFtvcHRpb25zXSA8YWZmaXhmaWxlPgoKICAgICAgT3B0aW9uczoKCS0tYWZmaXhmaWxlPXMgICAgICBBZmZpeCBmaWxlCgktLWJ5bG9jYWxlICAgICAgICAgVXNlIGN1cnJlbnQgbG9jYWxlIHNldHVwIGZvciB1cHBlci9sb3dlcmNhc2UgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb24KCS0tY2hhcnNldD1zICAgICAgICBVc2Ugc3BlY2lmaWVkIGNoYXJzZXQgZm9yIHVwcGVyL2xvd2VyY2FzZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbiAoZGVmYXVsdHMgdG8gbGF0aW4xKQogCS0tZGVidWcgICAgICAgICAgICBQcmludCBkZWJ1Z2dpbmcgaW5mbwogCS0tZXh0cmFmbGFncyAgICAgICBBbGxvdyBzb21lIG5vbiBhbHBoYWJldGljIGZsYWdzCgktLWxvd2VyY2FzZT1zICAgICAgTG93ZXJjYXNlIHN0cmluZwogICAgICAgIC0tbXloZWFkZXI9cyAgICAgICBIZWFkZXIgZmlsZQoJLS1wcmludGNvbW1lbnRzICAgIFByaW50IGNvbW1lbnRlZCBsaW5lcyBpbiBvdXRwdXQgCiAgICAgICAgLS1yZXBsYWNlbWVudHM9cyAgIFJlcGxhY2VtZW50cyBmaWxlIAogICAgICAgIC0tc3BsaXQ9aSAgICAgICAgICBTcGxpdCBmbGFncyB3aXRoIG1vcmUgdGhhdCBpIGVudHJpZXMKCS0tdXBwZXJjYXNlPXMgICAgICBVcHBlcmNhc2Ugc3RyaW5nCgktLXdvcmRsaXN0PXMgICAgICAgU3RpbGwgdW51c2VkCgogIEN1cnJlbnRseSBhbGxvd2VkIHZhbHVlZCBmb3IgY2hhcnNldCBhcmU6IGxhdGluMSwgbGF0aW4yLCBsYXRpbjMKClRoaXMgc2NyaXB0IGRvZXMgbm90IGNyZWF0ZSB0aGUgZGljdCBmaWxlLiBTb21ldGhpbmcgbGlrZQoKKCBlY2hvIGBjYXQgbXlkaWN0LndvcmRzKyB8IHdjIC1sYDsgY2F0IG15ZGljdC53b3JkcysgKSA+IG15ZGljdC5kaWN0CgpzaG91bGQgZG8gdGhlIHdvcmssIHdpdGggbXlkaWN0LndvcmRzKyBiZWluZyB0aGUgaXNwZWxsIG11bmNoZWQgd29yZGxpc3QKCiI7CiAgICBleGl0Owp9CgpzdWIgZGVidWdwcmludCB7CiAgICBpZiAoICRkZWJ1ZyApewoJcHJpbnQgU1RERVJSICJAXyI7CiAgICB9Cn0KCnN1YiBzaGlwb3V0ZmxhZ3sKICAgIG15ICRmbGFnX2VudHJpZXM9c2NhbGFyIEBmbGFnX2FycmF5OwoJCiAgICBpZiAoICRmbGFnX2VudHJpZXMgIT0gMCApewoJaWYgKCAkc3BsaXQgKXsKCSAgICB3aGlsZSAoIEBmbGFnX2FycmF5ICl7CgkJbXkgQGZsYWdfc3ViYXJyYXk9c3BsaWNlKEBmbGFnX2FycmF5LDAsJHNwbGl0KTsKCQlteSAkc3ViZmxhZ19lbnRyaWVzPXNjYWxhciBAZmxhZ19zdWJhcnJheTsKCQlpZiAoIHNjYWxhciBAZmxhZ19hcnJheSApewoJCSAgICBwcmludCAiJG15YWZmaXggJGZsYWduYW1lICRmbGFnY29tYmluZSAkc3ViZmxhZ19lbnRyaWVzIFNcbiI7CgkJfSBlbHNlIHsKCQkgICAgcHJpbnQgIiRteWFmZml4ICRmbGFnbmFtZSAkZmxhZ2NvbWJpbmUgJHN1YmZsYWdfZW50cmllc1xuIjsKCQl9CgkJcHJpbnQgam9pbigiXG4iLEBmbGFnX3N1YmFycmF5KTsKCQlwcmludCAiXG5cbiI7CgkgICAgfQoJfSBlbHNlIHsKCSAgICBwcmludCAiJG15YWZmaXggJGZsYWduYW1lICRmbGFnY29tYmluZSAkZmxhZ19lbnRyaWVzXG4iOwoJICAgIHByaW50IGpvaW4oIlxuIixAZmxhZ19hcnJheSk7CgkgICAgcHJpbnQgIlxuXG4iOwoJfQogICAgfQogICAgQGZsYWdfYXJyYXk9KCk7CiAgICAkZmxhZ25hbWU9Jyc7CiAgICAkZmxhZ2NvbWJpbmU9Jyc7Cn0KCnN1YiBteWxjewogICAgbXkgJGlucHV0c3RyaW5nPXNoaWZ0OwogICAgbXkgJG91dHB1dHN0cmluZzsKCiAgICBpZiAoICRieWxvY2FsZSApewoJeyAKCSAgICB1c2UgbG9jYWxlOwoJICAgICRvdXRwdXRzdHJpbmcgPSAgbGMgJGlucHV0c3RyaW5nOwoJfQogICAgfSBlbHNlIHsKCWlmICggJGNoYXJzZXQgZXEgImxhdGluMCIgKXsKCSAgICAkbG93ZXJjYXNlPSdhLXrg4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f69qLgnOwoJICAgICR1cHBlcmNhc2U9J0EtWsDBwsPExcbHyMnKy8zNzs/Q0dLT1NXW2Nna29zd3rymtCc7Cgl9IGVsc2lmICggJGNoYXJzZXQgZXEgImxhdGluMSIgKXsKCSAgICAkbG93ZXJjYXNlPSdhLXrg4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f4nOwoJICAgICR1cHBlcmNhc2U9J0EtWsDBwsPExcbHyMnKy8zNzs/Q0dLT1NXW2Nna29zd3ic7Cgl9IGVsc2lmICggJGNoYXJzZXQgZXEgImxhdGluMiIgKXsKCSAgICAkbG93ZXJjYXNlPSdhLXqxs7W2ubq7vL6/4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+JzsKCSAgICAkdXBwZXJjYXNlPSdBLVqho6WmqaqrrK6vwMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbY2drb3N3eJzsKCX0gZWxzaWYgKCAkY2hhcnNldCBlcSAibGF0aW4zIiApewoJICAgICRsb3dlcmNhc2U9J2EterG2ubq7vL/g4eLk5ebn6Onq6+zt7u/x8vP09fb3+Pn6+/z9/ic7CgkgICAgJHVwcGVyY2FzZT0nQS1aoaapqqusr8DBwsTFxsfIycrLzM3Oz9HS09TV1tfY2drb3N3eJzsKIwl9IGVsc2lmICggJGNoYXJzZXQgZXEgIm90aGVyX2NoYXJzZXQiICl7CiMJICAgIGRpZSAibGF0aW4yIHN0aWxsIHVuaW1wbGVtZW50ZWQiOwoJfSBlbHNlIHsKCSAgICBpZiAoIG5vdCAkbG93ZXJjYXNlIGFuZCBub3QgJHVwcGVyY2FzZSApewoJCWRpZSAiVW5zdXBwb3J0ZWQgY2hhcnNldCBbJGNoYXJzZXRdCgpFeHBsaWNpdGx5IHVzZSAtLWxvd2VyY2FzZT1zdHJpbmcgYW5kIC0tdXBwZXJjYXNlPXN0cmluZwpvcHRpb25zLiBSZW1lbWJlciB0aGF0IGJvdGggc3RyaW5nIG11c3QgbWF0Y2ggZXhhY3RseSwgYnV0IApjYXNlIGNoYW5nZWQuCiI7CgkgICAgfQoJfQoJJG91dHB1dHN0cmluZz0kaW5wdXRzdHJpbmc7CglldmFsICJcJG91dHB1dHN0cmluZz1+dHIvJHVwcGVyY2FzZS8kbG93ZXJjYXNlLyI7CiAgICB9CiAgICByZXR1cm4gJG91dHB1dHN0cmluZzsKfQoKc3ViIHZhbGlkYXRlX2ZsYWcgKCl7CiAgICBteSAkZmxhZyA9IHNoaWZ0OwogICAgaWYgKCRmbGFnPX5tL1thLXpBLVpdKy8pewoJcmV0dXJuICRmbGFnOwogICAgfSBlbHNpZiAoICRoYXNleHRyYWZsYWdzICl7Cglmb3JlYWNoICgga2V5cyAldGhlZXh0cmFmbGFncyApewoJICAgIGlmICgkZmxhZyA9fiBtL14kXy8pewoJCSRmbGFnID1+IHMvXiRfLy87CgkJcmV0dXJuICRmbGFnOwoJICAgIH0gCgl9CiAgICB9IAogICAgcmV0dXJuICcnOwp9CgpzdWIgcHJvY2Vzc19yZXBsYWNlbWVudHN7CiAgICBteSAkZmlsZSA9IHNoaWZ0OwogICAgbXkgQHJlcGxhY2VzID0gKCk7CiAgICAKICAgIG9wZW4gKFJFUExBQ0UsIjwgJGZpbGUiKSB8fCAKCWRpZSAiRXJyb3I6IENvdWxkIG5vdCBvcGVuIHJlcGxhY2VtZW50cyBmaWxlOiAkZmlsZVxuIjsKICAgIHdoaWxlICg8UkVQTEFDRT4pewoJbmV4dCB1bmxlc3MgbS9eUkVQW1xzXHRdKlxELiovOwoJbmV4dCBpZiBtL15SRVBccytbMC05XSsvOwoJcy9cMDE1XDAxMi8vOwoJcy9cMDE1Ly87CgljaG9tcDsKCXB1c2ggQHJlcGxhY2VzLCAkXzsKICAgIH0KICAgIGNsb3NlIFJFUExBQ0U7CiAgICBteSAkbnVtYmVyID0gc2NhbGFyIEByZXBsYWNlczsKICAgIHByaW50ICJSRVAgJG51bWJlclxuIjsKICAgIGZvcmVhY2ggKCBAcmVwbGFjZXMgKXsKCXByaW50ICRfIC4gIlxuIjsKICAgIH0KfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE5vdyB0aGUgcHJvZ3JhbiBzdGFydCwgYWZ0ZXIgdGhlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp1c2UgR2V0b3B0OjpMb25nOwoKIyBJbml0aWFsaXppbmcgb3B0aW9uIHZhbHVlcwokYWZmaXhmaWxlICAgICA9ICcnOwokYnlsb2NhbGUgICAgICA9ICcnOwokY2hhcnNldCAgICAgICA9ICcnOwokZGVidWcgICAgICAgICA9ICcnOwokbG93ZXJjYXNlICAgICA9ICcnOwokbXloZWFkZXIgICAgICA9ICcnOwokcHJpbnRjb21tZW50cyA9ICcnOwokcmVwbGFjZW1lbnRzICA9ICcnOyAKJHNwbGl0ICAgICAgICAgPSAnJzsKJHVwcGVyY2FzZSAgICAgPSAnJzsKJHdvcmRsaXN0ICAgICAgPSAnJzsKJGhhc2V4dHJhZmxhZ3MgPSAnJzsKQGZsYWdfYXJyYXkgICAgPSAoKTsKJXRoZWV4dHJhZmxhZ3MgPSAoKTsKIyBJbml0aWFsaXppbmcgcm9vdCB2YWx1ZXMKJHJvb3RyZW1vdmUgICAgPSAiMCI7CiRyb290bmFtZSAgICAgID0gJyc7CiRhZGR0b3Jvb3QgICAgID0gJyc7CiRjb21tZW50ICAgICAgID0gJyc7CiMgSW5pdGlhbGl6aW5nIGZsYWcgdmFsdWVzCiRmbGFnbmFtZSAgICAgID0gJyc7CiRmbGFnY29tYmluZSAgID0gJyc7CiRpbmZsYWdzICAgICAgID0gJyc7CgpHZXRPcHRpb25zICgnYWZmaXhmaWxlPXMnICAgPT4gXCRhZmZpeGZpbGUsCgkgICAgJ2J5bG9jYWxlJyAgICAgID0+IFwkYnlsb2NhbGUsCgkgICAgJ2NoYXJzZXQ9cycgICAgID0+IFwkY2hhcnNldCwKCSAgICAnZGVidWcnICAgICAgICAgPT4gXCRkZWJ1ZywKCSAgICAnZXh0cmFmbGFnczpzJyAgPT4gc3ViIHsKCQkkaGFzZXh0cmFmbGFncyA9IDE7CgkJc2hpZnQ7CgkJJHRoZWZsYWcgPSBzaGlmdDsKCQkkdGhlZXh0cmFmbGFnc3skdGhlZmxhZ30rKyBpZiAkdGhlZmxhZ30sCgkgICAgJ2xvd2VyY2FzZT1zJyAgID0+IFwkbG93ZXJjYXNlLAoJICAgICdteWhlYWRlcj1zJyAgICA9PiBcJG15aGVhZGVyLAoJICAgICdwcmludGNvbW1lbnRzJyA9PiBcJHByaW50Y29tbWVudHMsCgkgICAgJ3JlcGxhY2VtZW50cz1zJz0+IFwkcmVwbGFjZW1lbnRzLAoJICAgICdzcGxpdD1pJyAgICAgICA9PiBcJHNwbGl0LAoJICAgICd1cHBlcmNhc2U9cycgICA9PiBcJHVwcGVyY2FzZSwKCSAgICAnd29yZGxpc3Q9cycgICAgPT4gXCR3b3JkbGlzdCkgb3IgdXNhZ2U7CgppZiAoIG5vdCAkYWZmaXhmaWxlICl7CiAgICAkYWZmaXhmaWxlPXNoaWZ0IG9yIHVzYWdlOwp9CgppZiAoICRjaGFyc2V0IGFuZCAoICRsb3dlcmNhc2Ugb3IgJHVwcGVyY2FzZSApKXsKICAgIGRpZSAiRXJyb3I6IGNoYXJzZXQgYW5kIGxvd2VyY2FzZS91cHBlcmNhc2Ugb3B0aW9ucwphcmUgaW5jb21wYXRpYmxlLiBVc2UgZWl0aGVyIGNoYXJzZXQgb3IgbG93ZXJjYXNlL3VwcGVyY2FzZSBvcHRpb25zIHRvIApzcGVjaWZ5IHRoZSBwYXR0ZXJucwoiCn0gZWxzaWYgKCBub3QgJGxvd2VyY2FzZSBhbmQgbm90ICR1cHBlcmNhc2UgYW5kIG5vdCAkY2hhcnNldCApewogICAgJGNoYXJzZXQ9ImxhdGluMSI7Cn0KCmlmICggc2NhbGFyKGtleXMgJXRoZWV4dHJhZmxhZ3MpID09IDAgJiYgJGhhc2V4dHJhZmxhZ3MgKXsKICAgICR0aGVleHRyYWZsYWdzeyJcXFxcIn0rKzsKfQoKZGVidWdwcmludCAiJGFmZml4ZmlsZSAkY2hhcnNldCI7CgpvcGVuIChBRkZJWEZJTEUsIjwgJGFmZml4ZmlsZSIpIHx8IAogICAgZGllICJFcnJvcjogQ291bGQgbm90IG9wZW4gYWZmaXggZmlsZTogJGFmZml4ZmlsZSI7CgppZiAoICRteWhlYWRlciApewogICAgbXkgJG15c3BlbGxfaGVhZGVyPWBjYXQgJG15aGVhZGVyYDsKICAgIHByaW50ICRteXNwZWxsX2hlYWRlciAuICJcbiI7Cn0KCndoaWxlICg8QUZGSVhGSUxFPil7CiAgICBjaG9tcDsKICAgIGlmICgvXlxzKlwjLiovKXsKCWRlYnVncHJpbnQgIklnbm9yaW5nIGxpbmUgJC5cbiI7CglwcmludCAiJF9cbiIgaWYgJHByaW50Y29tbWVudHM7CiAgICB9IGVsc2lmICgvXlxzKiQvKXsKCWRlYnVncHJpbnQgIklnbm9yaW5nIGxpbmUgJC5cbiI7CiAgICB9IGVsc2lmICgvXlxzKnByZWZpeGVzLyl7CglkZWJ1Z3ByaW50ICJQcmVmaXhlcyBzdGFydGluZyBpbiBsaW5lICQuXG4iOwoJJGFmZml4PSJQRlgiOwogICAgfSBlbHNpZiAoL15ccypzdWZmaXhlcy8pewoJZGVidWdwcmludCAiU3VmZml4ZXMgc3RhcnRpbmcgaW4gbGluZSAkLlxuIjsKCSRhZmZpeD0iU0ZYIjsKICAgIH0gZWxzaWYgKC9eW1xzXHRdKmZsYWcuKi8pewoJbmV4dCBpZiBub3QgJGFmZml4OyAgICAgICAgICMgSW4gY2FzZSB3ZSBhcmUgc3RpbGwgaW4gdGhlIHByZWFtYmxlCglzaGlwb3V0ZmxhZyBpZiAkaW5mbGFnczsKCSRpbmZsYWdzPSJ5ZXMiOwoJcy9eW1xzXHRdKmZsYWdbXHNcdF0qLy87CglzL1tcc1x0XSo6LiokLy87CglkZWJ1Z3ByaW50ICJGb3VuZCBmbGFnICRfIGluIGxpbmUgJC5cbiI7CgkKCWlmICgvXCovKXsKCSAgICBzL1tcKlxzXS8vZzsKCSAgICAkZmxhZ2NvbWJpbmU9IlkiOwoJICAgIGRlYnVncHJpbnQgIkZsYWcgcmVuYW1lZCB0byAkXyB3aXRoIGNvbWJpbmU9JGZsYWdjb21iaW5lXG4iOwoJfSBlbHNlIHsKCSAgICAkZmxhZ2NvbWJpbmU9Ik4iOwoJfQoJCglpZiAoICRmbGFnbmFtZSA9ICZ2YWxpZGF0ZV9mbGFnKCRfKSApewoJICAgICRteWFmZml4ICA9ICRhZmZpeDsKCX0gZWxzZSB7CgkgICAgJG15YWZmaXggID0gIlwjICRhZmZpeCI7CgkgICAgJGZsYWduYW1lID0gJF87CgkgICAgcHJpbnQgU1RERVJSICJJZ25vcmluZyBpbnZhbGlkIGZsYWcgJGZsYWduYW1lIGluIGxpbmUgJC5cbiI7Cgl9CiAgICB9IGVsc2lmICggJGFmZml4IGFuZCAkaW5mbGFncyApIHsKCSgkcm9vdG5hbWUsQGNvbW1lbnRzKSAgID0gIHNwbGl0KCcjJywkXyk7CgkkY29tbWVudCAgICAgICAgICAgICAgICA9ICAnIyAnIC4gam9pbignIycsQGNvbW1lbnRzKTsKCQoJJHJvb3RuYW1lICAgICAgICAgICAgICAgPX4gcy9ccyovL2c7Cgkkcm9vdG5hbWUgICAgICAgICAgICAgICA9ICBteWxjICRyb290bmFtZTsKCSgkcm9vdG5hbWUsJGFkZHRvcm9vdCkgID0gIHNwbGl0KCc+Jywkcm9vdG5hbWUpOwoJCglpZiAoICRhZGR0b3Jvb3QgPX4gcy9eXC0vL2cgKXsKCSAgICAoJHJvb3RyZW1vdmUsJGFkZHRvcm9vdCkgID0gc3BsaXQoJywnLCRhZGR0b3Jvb3QpOwoJICAgICRhZGR0b3Jvb3QgICAgICAgICAgICAgICAgPSAiMCIgdW5sZXNzICRhZGR0b3Jvb3Q7CgkgICAgJGFkZHRvcm9vdCAgICAgICAgICAgICAgICA9ICIwIiBpZiAoICRhZGR0b3Jvb3QgZXEgIi0iKTsKCX0gZWxzZSB7CgkgICAgJHJvb3RyZW1vdmUgPSAiMCI7Cgl9CgkkYWRkdG9yb290ID1+IHMvXFxcLS9cLS9nOyAjIHByZWZpeCBBTlRJXC0gdG8gYW50aS0KCglpZiAoICRyb290bmFtZSBlcSAnLicgJiYgJHJvb3RyZW1vdmUgbmUgIjAiICl7CgkgICAgJHJvb3RuYW1lID0gJHJvb3RyZW1vdmU7Cgl9CgkKCWRlYnVncHJpbnQgIiRyb290bmFtZSwgJGFkZHRvcm9vdCwgJHJvb3RyZW1vdmVcbiI7CglpZiAoICRwcmludGNvbW1lbnRzICl7CgkgICAgJGFmZml4X2xpbmU9c3ByaW50ZigiJXMgJXMgICAlLTVzICUtMTFzICUtMjRzICVzIiwKCQkJCSRteWFmZml4LCAkZmxhZ25hbWUsICRyb290cmVtb3ZlLCAKCQkJCSRhZGR0b3Jvb3QsICRyb290bmFtZSwgJGNvbW1lbnQpOwoJfSBlbHNlIHsKCSAgICAkYWZmaXhfbGluZT1zcHJpbnRmKCIlcyAlcyAgICUtNXMgJS0xMXMgJXMiLAoJCQkJJG15YWZmaXgsICRmbGFnbmFtZSwgJHJvb3RyZW1vdmUsIAoJCQkJJGFkZHRvcm9vdCwgJHJvb3RuYW1lKTsKCX0KCSRyb290cmVtb3ZlID0gIjAiOwoJJHJvb3RuYW1lICAgPSAnJzsKCSRhZGR0b3Jvb3QgID0gJyc7CgkkY29tbWVudCAgICA9ICcnOwoJQGNvbW1lbnRzICAgPSAoKTsKCXB1c2ggQGZsYWdfYXJyYXksJGFmZml4X2xpbmU7CglkZWJ1Z3ByaW50ICIkYWZmaXhfbGluZVxuIjsKICAgIH0gZWxzZSB7CgkjCiAgICB9Cn0Kc2hpcG91dGZsYWc7CgpjbG9zZSBBRkZJWEZJTEU7CgppZiAoICRyZXBsYWNlbWVudHMgKXsKICAgICZwcm9jZXNzX3JlcGxhY2VtZW50cygkcmVwbGFjZW1lbnRzKTsKfQoKX19FTkRfXwoKPWhlYWQxIE5BTUUKCkI8aXNwZWxsYWZmMm15c3BlbGw+IC0gQSBwcm9ncmFtIHRvIGNvbnZlcnQgaXNwZWxsIGFmZml4IHRhYmxlcyB0byBteXNwZWxsIGZvcm1hdC4KCj1oZWFkMSBTWU5PUFNJUwoKIGlzcGVsbGFmZjJteXNwZWxsIFtvcHRpb25zXSA8YWZmaXhmaWxlPiAtLW15aGVhZGVyIHlvdXJfaGVhZGVyCgogICBPcHRpb25zOgoKICAgIC0tYWZmaXhmaWxlPXMgICAgICBBZmZpeCBmaWxlCiAgICAtLWJ5bG9jYWxlICAgICAgICAgVXNlIGN1cnJlbnQgbG9jYWxlIHNldHVwIGZvciB1cHBlci9sb3dlcmNhc2UgCiAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbgogICAgLS1jaGFyc2V0PXMgICAgICAgIFVzZSBzcGVjaWZpZWQgY2hhcnNldCBmb3IgdXBwZXIvbG93ZXJjYXNlIAogICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb24gKGRlZmF1bHRzIHRvIGxhdGluMSkKICAgIC0tZGVidWcgICAgICAgICAgICBQcmludCBkZWJ1Z2dpbmcgaW5mbwogICAgLS1leHRyYWZsYWdzPXMgICAgIEFsbG93IHNvbWUgbm9uIGFscGhhYmV0aWMgZmxhZ3MKICAgIC0tbG93ZXJjYXNlPXMgICAgICBMb3dlcmNhc2Ugc3RyaW5nCiAgICAtLW15aGVhZGVyPXMgICAgICAgSGVhZGVyIGZpbGUgCiAgICAtLXByaW50Y29tbWVudHMgICAgUHJpbnQgY29tbWVudGVkIGxpbmVzIGluIG91dHB1dCAKICAgIC0tcmVwbGFjZW1lbnRzPXMgICBSZXBsYWNlbWVudHMgZmlsZSAKICAgIC0tc3BsaXQ9aSAgICAgICAgICBTcGxpdCBmbGFncyB3aXRoIG1vcmUgdGhhdCBpIGVudHJpZXMKICAgIC0tdXBwZXJjYXNlPXMgICAgICBVcHBlcmNhc2Ugc3RyaW5nCgo9aGVhZDEgREVTQ1JJUFRJT04KCkI8aXNwZWxsYWZmMm15c3BlbGw+IGlzIGEgc2NyaXB0IHRoYXQgd2lsbCBjb252ZXJ0IGlzcGVsbCBhZmZpeCB0YWJsZXMgCnRvIG15c3BlbGwgZm9ybWF0IGluIGEgbW9yZSBvciBsZXNzIHN1Y2Nlc3NmdWwgd2F5LiAKClRoaXMgc2NyaXB0IGRvZXMgbm90IGNyZWF0ZSB0aGUgZGljdCBmaWxlLiBTb21ldGhpbmcgbGlrZQoKKCBlY2hvIGBjYXQgbXlkaWN0LndvcmRzKyB8IHdjIC1sYDsgY2F0IG15ZGljdC53b3JkcysgKSA+IG15ZGljdC5kaWN0CgpzaG91bGQgZG8gdGhlIHdvcmssIHdpdGggbXlkaWN0LndvcmRzKyBiZWluZyB0aGUgbXVuY2hlZCB3b3JkbGlzdAoKPWhlYWQxIE9QVElPTlMKCj1vdmVyIDgKCj1pdGVtIEI8LS1hZmZpeGZpbGU9cz4gIAoKQWZmaXggZmlsZS4gWW91IGNhbiBwdXQgaXQgZGlyZWN0bHkgaW4gdGhlIGNvbW1hbmQgbGluZS4KCj1pdGVtIEI8LS1ieWxvY2FsZT4gCgpVc2UgY3VycmVudCBsb2NhbGUgc2V0dXAgZm9yIHVwcGVyL2xvd2VyY2FzZSBjb252ZXJzaW9uLiBNYWtlIHN1cmUgCnRoYXQgdGhlIHNlbGVjdGVkIGxvY2FsZSBtYXRjaCB0aGUgZGljdGlvbmFyeSBvbmUsIG9yIHlvdSBtaWdodCBnZXQgCmludG8gdHJvdWJsZS4KCj1pdGVtIEI8LS1jaGFyc2V0PXM+ICAgICAgICAKClVzZSBzcGVjaWZpZWQgY2hhcnNldCBmb3IgdXBwZXIvbG93ZXJjYXNlIGNvbnZlcnNpb24gKGRlZmF1bHRzIHRvIGxhdGluMSkuIApDdXJyZW50bHkgYWxsb3dlZCB2YWx1ZXMgZm9yIGNoYXJzZXQgYXJlOiBsYXRpbjAsIGxhdGluMSwgbGF0aW4yLCBsYXRpbjMuCgo9aXRlbSBCPC0tZGVidWc+ICAgICAgICAgICAgCgpQcmludCBzb21lIGRlYnVnZ2luZyBpbmZvLgoKPWl0ZW0gQjwtLWV4dHJhZmxhZ3M6cz4gICAgICAgCgpBbGxvd3Mgc29tZSBub24gYWxwaGFiZXRpYyBmbGFncy4gCgpXaGVuIGludm9rZWQgd2l0aCBubyB2YWx1ZSB0aGUgc3VwcG9ydGVkIGZsYWdzIGFyZSBjdXJyZW50bHkgdGhvc2UgCmNvcnJlc3BvbmRpbmcgdG8gY2hhcnMgcmVwcmVzZW50ZWQgd2l0aCB0aGUgZXNjYXBlIGNoYXIgQjxcPiBhcyAKZmlyc3QgY2hhci4gQjxcPiB3aWxsIGJlIHN0cmlwcGVkLgoKV2hlbiBnaXZlbiB3aXRoIHRoZSBmbGFnIHByZWZpeCB3aWxsIGFsbG93IHRoYXQgZmxhZyBhbmQgc3RyaXAgdGhlIApnaXZlbiBwcmVmaXguIEJlIGNhcmVmdWwgd2hlbiBnaXZpbmcgdGhlIHByZWZpeCB0byBwcm9wZXJseSBlc2NhcGUgY2hhcnMsIAplLmcuIHlvdSB3aWxsIG5lZWQgQjwtZSAiXFxcXCI+IG9yIEI8LWUgJ1xcJz4gZm9yIGZsYWdzIGxpa2UgQjxcWz4gdG8gYmUgc3RyaXBwZWQgdG8gCkI8Wz4uIE90aGVyd2lzZSB5b3UgbWlnaHQgZXZlbiBnZXQgZXJyb3JzLiBVc2UgQjwtZSAiXiI+IHRvIGFsbG93IGFsbCAKZmxhZ3MgYW5kIHBhc3MgdGhlbSB1bm1vZGlmaWVkLgoKWW91IHdpbGwgbmVlZCBhIGNhbGwgdG8gLWUgZm9yIGVhY2ggZmxhZyB0eXBlLCBlLmcuLCAKQjwtZSAiXFxcXCIgLWUgIn5cXFxcIj4gKG9yIEI8LWUgJ1xcJyAtZSAnflxcJz4pLiAKCldoZW4gYSBwcmVmaXggaXMgZXhwbGljaXRlbHkgc2V0LCB0aGUgZGVmYXVsdCB2YWx1ZSAoYW55dGhpbmcgc3RhcnRpbmcgYnkgQjxcPikgCmlzIGRpc2FibGVkIGFuZCB5b3UgbmVlZCB0byBlbmFibGUgaXQgZXhwbGljaXRlbHkgYXMgaW4gcHJldmlvdXMgZXhhbXBsZS4KCj1pdGVtIEI8LS1sb3dlcmNhc2U9cz4gICAgICAKCkxvd2VyY2FzZSBzdHJpbmcuIE1hbnVhbGx5IHNldCB0aGUgc3RyaW5nIG9mIGxvd2VyY2FzZSBjaGFycy4gVGhpcyAKcmVxdWlyZXMgQjwtLXVwcGVyY2FzZT4gaGF2aW5nIGV4YWN0bHkgdGhhdCBzdHJpbmcgYnV0IHVwcGVyY2FzZS4KIAo9aXRlbSBCPC0tbXloZWFkZXI9cz4gICAgICAgCgpIZWFkZXIgZmlsZS4gVGhlIG15c3BlbGwgYWZmIGhlYWRlci4gWW91IG5lZWQgdG8gd3JpdGUgaXQgCm1hbnVhbGx5LiBUaGlzIGNhbiBjb250YWluIGV2ZXJ5dGhpbmcgeW91IHdhbnQgdG8gYmUgYmVmb3JlIHRoZSBhZmZpeCB0YWJsZQoKPWl0ZW0gQjwtLXByaW50Y29tbWVudHM+ICAgIAoKUHJpbnQgY29tbWVudGVkIGxpbmVzIGluIG91dHB1dC4KCj1pdGVtIEI8LS1yZXBsYWNlbWVudHM9ZmlsZT4gICAgICAKCkFkZCBhIHByZS1kZWZpbmVkIHJlcGxhY2VtZW50cyB0YWJsZSB0YWtlbiBmcm9tICdmaWxlJyB0byB0aGUgLmFmZiBmaWxlLgpXaWxsIHNraXAgbGluZXMgbm90IGJlZ2lubmluZyB3aXRoIFJFUCwgYW5kIHNldCB0aGUgcmVwbGFjZW1lbnRzIG51bWJlcgphcHByb3ByaWF0ZWx5LgoKPWl0ZW0gQjwtLXNwbGl0PWk+ICAgICAgICAgIAoKU3BsaXQgZmxhZ3Mgd2l0aCBtb3JlIHRoYXQgaSBlbnRyaWVzLiBUaGlzIGNhbiBiZSBvZiBpbnRlcmVzdCBmb3IgZmxhZ3MgCmhhdmluZyBhIGxvdCBvZiBlbnRyaWVzLiBXaWxsIHNwbGl0IHRoZSBmbGFnIGluIGNodW5rcyBjb250YWluaW5nIEI8aT4gCmVudHJpZXMuCgo9aXRlbSBCPC0tdXBwZXJjYXNlPXM+ICAgICAgCgpVcHBlcmNhc2Ugc3RyaW5nLiBNYW51YWxseSBzZXQgdGhlIHNyaW5nIG9mIHVwcGVyY2FzZSBjaGFycy4gVGhpcyAKcmVxdWlyZXMgQjwtLWxvd2VyY2FzZT4gaGF2aW5nIGV4YWN0bHkgdGhhdCBzdHJpbmcgYnV0IGxvd2VyY2FzZS4KCj1iYWNrCgpJZiB5b3VyIGVuY29kaW5nIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZCB5b3UgY2FuIHNlbmQgbWUgYSBmaWxlIHdpdGggCnRoZSB0d28gc3RyaW5ncyBvZiBsb3dlciBhbmQgdXBwZXJjYXNlIGNoYXJzLiBOb3RlIHRoYXQgdGhleSBtdXN0IG1hdGNoIApleGFjdGx5IGJ1dCBjYXNlIGNoYW5nZWQuIEl0IHdpbGwgbG9vayBzb21ldGhpbmcgbGlrZQoKICAkbG93ZXJjYXNlPSdhLXrg4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f4nOwogICR1cHBlcmNhc2U9J0EtWsDBwsPExcbHyMnKy8zNzs/Q0dLT1NXW2Nna29zd3ic7Cgo9aGVhZDEgU0VFIEFMU08KClRoZSBPcGVuT2ZmaWNlLm9yZyBMaW5ndWNvbXBvbmVudCBQcm9qZWN0IGhvbWUgcGFnZQoKTDxodHRwOi8vbGluZ3Vjb21wb25lbnQub3Blbm9mZmljZS5vcmcvaW5kZXguaHRtbD4KCmFuZCB0aGUgZG9jdW1lbnQKCkw8aHR0cDovL2xpbmd1Y29tcG9uZW50Lm9wZW5vZmZpY2Uub3JnL2FmZml4LnJlYWRtZT4KCnRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJhc2ljcyBvZiB0aGUgbXlzcGVsbCBhZmZpeCBmaWxlIGZvcm1hdC4KCllvdSBjYW4gYWxzbyB0YWtlIGEgbG9vayBhdCAKCiAvdXNyL3NoYXJlL2RvYy9saWJteXNwZWxsLWRldi9hZmZpeC5yZWFkbWUuZ3oKIC91c3Ivc2hhcmUvZG9jL2xpYm15c3BlbGwtZGV2L1JFQURNRS5jb21wb3VuZHdvcmRzCiAvdXNyL3NoYXJlL2RvYy9saWJteXNwZWxsLWRldi9SRUFETUUucmVwbGFjZXRhYmxlCgppbiB5b3VyIERlYmlhbiBzeXN0ZW0uCgo9aGVhZDEgQVVUSE9SUwoKQWd1c3RpbiBNYXJ0aW4gPGFndXN0aW4ubWFydGluQGhpc3BhbGludXguZXM+Cgo9Y3V0Cg==