Back to Templates
SigNoz logo

SigNoz

vv0.97.1

SigNoz is an open-source Datadog or New Relic alternative. Get APM, logs,traces, metrics, exceptions, & alerts in a single tool.

Deploy on Dokploy

Deploy SigNoz on Dokploy

  1. Install Dokploy on your server if you haven't already.
  2. In your Dokploy panel, open a project and click Create Service → Template.
  3. Search for SigNoz and click Create — Dokploy configures domains, environment variables, and volumes for you.

Alternatively, create a Compose service, go to Advanced → Import from Base64, and paste this payload:

base64
ewogICJjb21wb3NlIjogIngtY29tbW9uOiAmY29tbW9uXG4gIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gIGxvZ2dpbmc6XG4gICAgb3B0aW9uczpcbiAgICAgIG1heC1zaXplOiA1MG1cbiAgICAgIG1heC1maWxlOiBcIjNcIlxueC1jbGlja2hvdXNlLWRlZmF1bHRzOiAmY2xpY2tob3VzZS1kZWZhdWx0c1xuICAhIW1lcmdlIDw8OiAqY29tbW9uXG4gIGltYWdlOiBjbGlja2hvdXNlL2NsaWNraG91c2Utc2VydmVyOjI1LjUuNlxuICB0dHk6IHRydWVcbiAgbGFiZWxzOlxuICAgIHNpZ25vei5pby9zY3JhcGU6IFwidHJ1ZVwiXG4gICAgc2lnbm96LmlvL3BvcnQ6IFwiOTM2M1wiXG4gICAgc2lnbm96LmlvL3BhdGg6IFwiL21ldHJpY3NcIlxuICBkZXBlbmRzX29uOlxuICAgIGluaXQtY2xpY2tob3VzZTpcbiAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5XG4gICAgem9va2VlcGVyLTE6XG4gICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICBoZWFsdGhjaGVjazpcbiAgICB0ZXN0OlxuICAgICAgLSBDTURcbiAgICAgIC0gd2dldFxuICAgICAgLSAtLXNwaWRlclxuICAgICAgLSAtcVxuICAgICAgLSAwLjAuMC4wOjgxMjMvcGluZ1xuICAgIGludGVydmFsOiAzMHNcbiAgICB0aW1lb3V0OiA1c1xuICAgIHJldHJpZXM6IDNcbiAgdWxpbWl0czpcbiAgICBucHJvYzogNjU1MzVcbiAgICBub2ZpbGU6XG4gICAgICBzb2Z0OiAyNjIxNDRcbiAgICAgIGhhcmQ6IDI2MjE0NFxuICBlbnZpcm9ubWVudDpcbiAgICAtIENMSUNLSE9VU0VfU0tJUF9VU0VSX1NFVFVQPTFcbngtem9va2VlcGVyLWRlZmF1bHRzOiAmem9va2VlcGVyLWRlZmF1bHRzXG4gICEhbWVyZ2UgPDw6ICpjb21tb25cbiAgaW1hZ2U6IHNpZ25vei96b29rZWVwZXI6My43LjFcbiAgdXNlcjogcm9vdFxuICBsYWJlbHM6XG4gICAgc2lnbm96LmlvL3NjcmFwZTogXCJ0cnVlXCJcbiAgICBzaWdub3ouaW8vcG9ydDogXCI5MTQxXCJcbiAgICBzaWdub3ouaW8vcGF0aDogXCIvbWV0cmljc1wiXG4gIGhlYWx0aGNoZWNrOlxuICAgIHRlc3Q6XG4gICAgICAtIENNRC1TSEVMTFxuICAgICAgLSBjdXJsIC1zIC1tIDIgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2NvbW1hbmRzL3J1b2sgfCBncmVwIGVycm9yIHwgZ3JlcCBudWxsXG4gICAgaW50ZXJ2YWw6IDMwc1xuICAgIHRpbWVvdXQ6IDVzXG4gICAgcmV0cmllczogM1xueC1kYi1kZXBlbmQ6ICZkYi1kZXBlbmRcbiAgISFtZXJnZSA8PDogKmNvbW1vblxuICBkZXBlbmRzX29uOlxuICAgIGNsaWNraG91c2U6XG4gICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIHNjaGVtYS1taWdyYXRvci1zeW5jOlxuICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHlcbnNlcnZpY2VzOlxuICBpbml0LWNsaWNraG91c2U6XG4gICAgISFtZXJnZSA8PDogKmNvbW1vblxuICAgIGltYWdlOiBjbGlja2hvdXNlL2NsaWNraG91c2Utc2VydmVyOjI1LjUuNlxuICAgIGNvbW1hbmQ6XG4gICAgICAtIGJhc2hcbiAgICAgIC0gLWNcbiAgICAgIC0gfFxuICAgICAgICB2ZXJzaW9uPVwidjAuMC4xXCJcbiAgICAgICAgbm9kZV9vcz0kJCh1bmFtZSAtcyB8IHRyICdbOnVwcGVyOl0nICdbOmxvd2VyOl0nKVxuICAgICAgICBub2RlX2FyY2g9JCQodW5hbWUgLW0gfCBzZWQgcy9hYXJjaDY0L2FybTY0LyB8IHNlZCBzL3g4Nl82NC9hbWQ2NC8pXG4gICAgICAgIGVjaG8gXCJGZXRjaGluZyBoaXN0b2dyYW0tYmluYXJ5IGZvciAkJHtub2RlX29zfS8kJHtub2RlX2FyY2h9XCJcbiAgICAgICAgY2QgL3RtcFxuICAgICAgICB3Z2V0IC1PIGhpc3RvZ3JhbS1xdWFudGlsZS50YXIuZ3ogXCJodHRwczovL2dpdGh1Yi5jb20vU2lnTm96L3NpZ25vei9yZWxlYXNlcy9kb3dubG9hZC9oaXN0b2dyYW0tcXVhbnRpbGUlMkYkJHt2ZXJzaW9ufS9oaXN0b2dyYW0tcXVhbnRpbGVfJCR7bm9kZV9vc31fJCR7bm9kZV9hcmNofS50YXIuZ3pcIlxuICAgICAgICB0YXIgLXh2emYgaGlzdG9ncmFtLXF1YW50aWxlLnRhci5nelxuICAgICAgICBtdiBoaXN0b2dyYW0tcXVhbnRpbGUgL3Zhci9saWIvY2xpY2tob3VzZS91c2VyX3NjcmlwdHMvaGlzdG9ncmFtUXVhbnRpbGVcbiAgICByZXN0YXJ0OiBvbi1mYWlsdXJlXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvY2xpY2tob3VzZS91c2VyX3NjcmlwdHM6L3Zhci9saWIvY2xpY2tob3VzZS91c2VyX3NjcmlwdHMvXG4gIHpvb2tlZXBlci0xOlxuICAgICEhbWVyZ2UgPDw6ICp6b29rZWVwZXItZGVmYXVsdHNcbiAgICB2b2x1bWVzOlxuICAgICAgLSB6b29rZWVwZXItMTovYml0bmFtaS96b29rZWVwZXJcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gWk9PX1NFUlZFUl9JRD0xXG4gICAgICAtIEFMTE9XX0FOT05ZTU9VU19MT0dJTj15ZXNcbiAgICAgIC0gWk9PX0FVVE9QVVJHRV9JTlRFUlZBTD0xXG4gICAgICAtIFpPT19FTkFCTEVfUFJPTUVUSEVVU19NRVRSSUNTPXllc1xuICAgICAgLSBaT09fUFJPTUVUSEVVU19NRVRSSUNTX1BPUlRfTlVNQkVSPTkxNDFcbiAgY2xpY2tob3VzZTpcbiAgICAhIW1lcmdlIDw8OiAqY2xpY2tob3VzZS1kZWZhdWx0c1xuICAgIGhvc3RuYW1lOiBjbGlja2hvdXNlXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvY2xpY2tob3VzZS9jb25maWcueG1sOi9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvY29uZmlnLnhtbFxuICAgICAgLSAuLi9maWxlcy9jbGlja2hvdXNlL3VzZXJfc2NyaXB0czovdmFyL2xpYi9jbGlja2hvdXNlL3VzZXJfc2NyaXB0cy9cbiAgICAgIC0gLi4vZmlsZXMvY2xpY2tob3VzZS9jbHVzdGVyLnhtbDovZXRjL2NsaWNraG91c2Utc2VydmVyL2NvbmZpZy5kL2NsdXN0ZXIueG1sXG4gICAgICAtIC4uL2ZpbGVzL2NsaWNraG91c2UvZG9ja2VyX3JlbGF0ZWRfY29uZmlnLnhtbDovZXRjL2NsaWNraG91c2Utc2VydmVyL2NvbmZpZy5kL2RvY2tlcl9yZWxhdGVkX2NvbmZpZy54bWxcbiAgICAgIC0gY2xpY2tob3VzZTovdmFyL2xpYi9jbGlja2hvdXNlL1xuICBzaWdub3o6XG4gICAgISFtZXJnZSA8PDogKmRiLWRlcGVuZFxuICAgIGltYWdlOiBzaWdub3ovc2lnbm96OnYwLjk3LjFcbiAgICBjb21tYW5kOlxuICAgICAgLSAtLWNvbmZpZz0vcm9vdC9jb25maWcvcHJvbWV0aGV1cy55bWxcbiAgICBleHBvc2U6XG4gICAgICAtIFwiODA4MFwiXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvc2lnbm96L3Byb21ldGhldXMueW1sOi9yb290L2NvbmZpZy9wcm9tZXRoZXVzLnltbFxuICAgICAgLSBzcWxpdGU6L3Zhci9saWIvc2lnbm96L1xuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBTSUdOT1pfQUxFUlRNQU5BR0VSX1BST1ZJREVSPXNpZ25velxuICAgICAgLSBTSUdOT1pfVEVMRU1FVFJZU1RPUkVfQ0xJQ0tIT1VTRV9EU049dGNwOi8vY2xpY2tob3VzZTo5MDAwXG4gICAgICAtIFNJR05PWl9TUUxTVE9SRV9TUUxJVEVfUEFUSD0vdmFyL2xpYi9zaWdub3ovc2lnbm96LmRiXG4gICAgICAtIFNUT1JBR0U9Y2xpY2tob3VzZVxuICAgICAgLSBURUxFTUVUUllfRU5BQkxFRD10cnVlXG4gICAgICAtIERFUExPWU1FTlRfVFlQRT1kb2NrZXItc3RhbmRhbG9uZS1hbWRcbiAgICAgIC0gRE9UX01FVFJJQ1NfRU5BQkxFRD10cnVlXG4gICAgICAtIFNJR05PWl9KV1RfU0VDUkVUPSR7U0lHTk9aX0pXVF9TRUNSRVR9XG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OlxuICAgICAgICAtIENNRFxuICAgICAgICAtIHdnZXRcbiAgICAgICAgLSAtLXNwaWRlclxuICAgICAgICAtIC1xXG4gICAgICAgIC0gbG9jYWxob3N0OjgwODAvYXBpL3YxL2hlYWx0aFxuICAgICAgaW50ZXJ2YWw6IDMwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDNcbiAgb3RlbC1jb2xsZWN0b3I6XG4gICAgISFtZXJnZSA8PDogKmRiLWRlcGVuZFxuICAgIGltYWdlOiBzaWdub3ovc2lnbm96LW90ZWwtY29sbGVjdG9yOnYwLjEyOS43XG4gICAgY29tbWFuZDpcbiAgICAgIC0gLS1jb25maWc9L2V0Yy9vdGVsLWNvbGxlY3Rvci1jb25maWcueWFtbFxuICAgIHZvbHVtZXM6XG4gICAgICAtIC4uL2ZpbGVzL2NvbGxlY3Rvci9vdGVsLWNvbGxlY3Rvci1jb25maWcueWFtbDovZXRjL290ZWwtY29sbGVjdG9yLWNvbmZpZy55YW1sXG4gICAgZXhwb3NlOlxuICAgICAgLSBcIjQzMTdcIiAjIE9UTFAgZ1JQQyByZWNlaXZlclxuICAgICAgLSBcIjQzMThcIiAjIE9UTFAgSFRUUCByZWNlaXZlclxuICAgIGRlcGVuZHNfb246XG4gICAgICBzaWdub3o6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gIHNjaGVtYS1taWdyYXRvci1zeW5jOlxuICAgICEhbWVyZ2UgPDw6ICpjb21tb25cbiAgICBpbWFnZTogc2lnbm96L3NpZ25vei1zY2hlbWEtbWlncmF0b3I6djAuMTI5LjdcbiAgICBjb21tYW5kOlxuICAgICAgLSBzeW5jXG4gICAgICAtIC0tZHNuPXRjcDovL2NsaWNraG91c2U6OTAwMFxuICAgICAgLSAtLXVwPVxuICAgIGRlcGVuZHNfb246XG4gICAgICBjbGlja2hvdXNlOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIHJlc3RhcnQ6IG9uLWZhaWx1cmVcbiAgc2NoZW1hLW1pZ3JhdG9yLWFzeW5jOlxuICAgICEhbWVyZ2UgPDw6ICpkYi1kZXBlbmRcbiAgICBpbWFnZTogc2lnbm96L3NpZ25vei1zY2hlbWEtbWlncmF0b3I6djAuMTI5LjdcbiAgICBjb21tYW5kOlxuICAgICAgLSBhc3luY1xuICAgICAgLSAtLWRzbj10Y3A6Ly9jbGlja2hvdXNlOjkwMDBcbiAgICAgIC0gLS11cD1cbiAgICByZXN0YXJ0OiBvbi1mYWlsdXJlXG52b2x1bWVzOlxuICBjbGlja2hvdXNlOlxuICAgIG5hbWU6IHNpZ25vei1jbGlja2hvdXNlXG4gIHNxbGl0ZTpcbiAgICBuYW1lOiBzaWdub3otc3FsaXRlXG4gIHpvb2tlZXBlci0xOlxuICAgIG5hbWU6IHNpZ25vei16b29rZWVwZXItMSIsCiAgImNvbmZpZyI6ICJbdmFyaWFibGVzXVxubWFpbl9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5vdGVsX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbmp3dF9zZWNyZXQgPSBcIiR7cGFzc3dvcmQ6NjR9XCJcblxuW2NvbmZpZ11cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcInNpZ25velwiXG5wb3J0ID0gODA4MFxuaG9zdCA9IFwiJHttYWluX2RvbWFpbn1cIlxucGF0aCA9IFwiL1wiXG5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcIm90ZWwtY29sbGVjdG9yXCJcbnBvcnQgPSA0MzE4XG5ob3N0ID0gXCIke290ZWxfZG9tYWlufVwiXG5wYXRoID0gXCIvXCJcblxuW2NvbmZpZy5lbnZdXG5TSUdOT1pfSldUX1NFQ1JFVCA9IFwiJHtqd3Rfc2VjcmV0fVwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL2NsaWNraG91c2UvY29uZmlnLnhtbFwiXG5jb250ZW50ID0gXCJcIlwiXG48P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuPCEtLVxuICBOT1RFOiBVc2VyIGFuZCBxdWVyeSBsZXZlbCBzZXR0aW5ncyBhcmUgc2V0IHVwIGluIFwidXNlcnMueG1sXCIgZmlsZS5cbiAgSWYgeW91IGhhdmUgYWNjaWRlbnRhbGx5IHNwZWNpZmllZCB1c2VyLWxldmVsIHNldHRpbmdzIGhlcmUsIHNlcnZlciB3b24ndCBzdGFydC5cbiAgWW91IGNhbiBlaXRoZXIgbW92ZSB0aGUgc2V0dGluZ3MgdG8gdGhlIHJpZ2h0IHBsYWNlIGluc2lkZSBcInVzZXJzLnhtbFwiIGZpbGVcbiAgIG9yIGFkZCA8c2tpcF9jaGVja19mb3JfaW5jb3JyZWN0X3NldHRpbmdzPjE8L3NraXBfY2hlY2tfZm9yX2luY29ycmVjdF9zZXR0aW5ncz4gaGVyZS5cbi0tPlxuPGNsaWNraG91c2U+XG4gICAgPGxvZ2dlcj5cbiAgICAgICAgPCEtLSBQb3NzaWJsZSBsZXZlbHMgWzFdOlxuXG4gICAgICAgICAgLSBub25lICh0dXJucyBvZmYgbG9nZ2luZylcbiAgICAgICAgICAtIGZhdGFsXG4gICAgICAgICAgLSBjcml0aWNhbFxuICAgICAgICAgIC0gZXJyb3JcbiAgICAgICAgICAtIHdhcm5pbmdcbiAgICAgICAgICAtIG5vdGljZVxuICAgICAgICAgIC0gaW5mb3JtYXRpb25cbiAgICAgICAgICAtIGRlYnVnXG4gICAgICAgICAgLSB0cmFjZVxuICAgICAgICAgIC0gdGVzdCAobm90IGZvciBwcm9kdWN0aW9uIHVzYWdlKVxuXG4gICAgICAgICAgICBbMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9wb2NvcHJvamVjdC9wb2NvL2Jsb2IvcG9jby0xLjkuNC1yZWxlYXNlL0ZvdW5kYXRpb24vaW5jbHVkZS9Qb2NvL0xvZ2dlci5oI0wxMDUtTDExNFxuICAgICAgICAtLT5cbiAgICAgICAgPGxldmVsPmluZm9ybWF0aW9uPC9sZXZlbD5cbiAgICAgICAgPGZvcm1hdHRpbmc+XG4gICAgICAgICAgICA8dHlwZT5qc29uPC90eXBlPlxuICAgICAgICA8L2Zvcm1hdHRpbmc+XG4gICAgICAgIDxsb2c+L3Zhci9sb2cvY2xpY2tob3VzZS1zZXJ2ZXIvY2xpY2tob3VzZS1zZXJ2ZXIubG9nPC9sb2c+XG4gICAgICAgIDxlcnJvcmxvZz4vdmFyL2xvZy9jbGlja2hvdXNlLXNlcnZlci9jbGlja2hvdXNlLXNlcnZlci5lcnIubG9nPC9lcnJvcmxvZz5cbiAgICAgICAgPCEtLSBSb3RhdGlvbiBwb2xpY3lcbiAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BvY29wcm9qZWN0L3BvY28vYmxvYi9wb2NvLTEuOS40LXJlbGVhc2UvRm91bmRhdGlvbi9pbmNsdWRlL1BvY28vRmlsZUNoYW5uZWwuaCNMNTQtTDg1XG4gICAgICAgICAgLS0+XG4gICAgICAgIDxzaXplPjEwMDBNPC9zaXplPlxuICAgICAgICA8Y291bnQ+MTA8L2NvdW50PlxuICAgICAgICA8IS0tIDxjb25zb2xlPjE8L2NvbnNvbGU+IC0tPiA8IS0tIERlZmF1bHQgYmVoYXZpb3IgaXMgYXV0b2RldGVjdGlvbiAobG9nIHRvIGNvbnNvbGUgaWYgbm90IGRhZW1vbiBtb2RlIGFuZCBpcyB0dHkpIC0tPlxuXG4gICAgICAgIDwhLS0gUGVyIGxldmVsIG92ZXJyaWRlcyAobGVnYWN5KTpcblxuICAgICAgICBGb3IgZXhhbXBsZSB0byBzdXBwcmVzcyBsb2dnaW5nIG9mIHRoZSBDb25maWdSZWxvYWRlciB5b3UgY2FuIHVzZTpcbiAgICAgICAgTk9URTogbGV2ZWxzLmxvZ2dlciBpcyByZXNlcnZlZCwgc2VlIGJlbG93LlxuICAgICAgICAtLT5cbiAgICAgICAgPCEtLVxuICAgICAgICA8bGV2ZWxzPlxuICAgICAgICAgIDxDb25maWdSZWxvYWRlcj5ub25lPC9Db25maWdSZWxvYWRlcj5cbiAgICAgICAgPC9sZXZlbHM+XG4gICAgICAgIC0tPlxuXG4gICAgICAgIDwhLS0gUGVyIGxldmVsIG92ZXJyaWRlczpcblxuICAgICAgICBGb3IgZXhhbXBsZSB0byBzdXBwcmVzcyBsb2dnaW5nIG9mIHRoZSBSQkFDIGZvciBkZWZhdWx0IHVzZXIgeW91IGNhbiB1c2U6XG4gICAgICAgIChCdXQgcGxlYXNlIG5vdGUgdGhhdCB0aGUgbG9nZ2VyIG5hbWUgbWF5YmUgY2hhbmdlZCBmcm9tIHZlcnNpb24gdG8gdmVyc2lvbiwgZXZlbiBhZnRlciBtaW5vciB1cGdyYWRlKVxuICAgICAgICAtLT5cbiAgICAgICAgPCEtLVxuICAgICAgICA8bGV2ZWxzPlxuICAgICAgICAgIDxsb2dnZXI+XG4gICAgICAgICAgICA8bmFtZT5Db250ZXh0QWNjZXNzIChkZWZhdWx0KTwvbmFtZT5cbiAgICAgICAgICAgIDxsZXZlbD5ub25lPC9sZXZlbD5cbiAgICAgICAgICA8L2xvZ2dlcj5cbiAgICAgICAgICA8bG9nZ2VyPlxuICAgICAgICAgICAgPG5hbWU+RGF0YWJhc2VPcmRpbmFyeSAodGVzdCk8L25hbWU+XG4gICAgICAgICAgICA8bGV2ZWw+bm9uZTwvbGV2ZWw+XG4gICAgICAgICAgPC9sb2dnZXI+XG4gICAgICAgIDwvbGV2ZWxzPlxuICAgICAgICAtLT5cbiAgICA8L2xvZ2dlcj5cblxuICAgIDwhLS0gQWRkIGhlYWRlcnMgdG8gcmVzcG9uc2UgaW4gb3B0aW9ucyByZXF1ZXN0LiBPUFRJT05TIG1ldGhvZCBpcyB1c2VkIGluIENPUlMgcHJlZmxpZ2h0IHJlcXVlc3RzLiAtLT5cbiAgICA8IS0tIEl0IGlzIG9mZiBieSBkZWZhdWx0LiBOZXh0IGhlYWRlcnMgYXJlIG9ibGlnYXRlIGZvciBDT1JTLi0tPlxuICAgIDwhLS0gaHR0cF9vcHRpb25zX3Jlc3BvbnNlPlxuICAgICAgICA8aGVhZGVyPlxuICAgICAgICAgICAgPG5hbWU+QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luPC9uYW1lPlxuICAgICAgICAgICAgPHZhbHVlPio8L3ZhbHVlPlxuICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgPGhlYWRlcj5cbiAgICAgICAgICAgIDxuYW1lPkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnM8L25hbWU+XG4gICAgICAgICAgICA8dmFsdWU+b3JpZ2luLCB4LXJlcXVlc3RlZC13aXRoPC92YWx1ZT5cbiAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgIDxoZWFkZXI+XG4gICAgICAgICAgICA8bmFtZT5BY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzPC9uYW1lPlxuICAgICAgICAgICAgPHZhbHVlPlBPU1QsIEdFVCwgT1BUSU9OUzwvdmFsdWU+XG4gICAgICAgIDwvaGVhZGVyPlxuICAgICAgICA8aGVhZGVyPlxuICAgICAgICAgICAgPG5hbWU+QWNjZXNzLUNvbnRyb2wtTWF4LUFnZTwvbmFtZT5cbiAgICAgICAgICAgIDx2YWx1ZT44NjQwMDwvdmFsdWU+XG4gICAgICAgIDwvaGVhZGVyPlxuICAgIDwvaHR0cF9vcHRpb25zX3Jlc3BvbnNlIC0tPlxuXG4gICAgPCEtLSBJdCBpcyB0aGUgbmFtZSB0aGF0IHdpbGwgYmUgc2hvd24gaW4gdGhlIGNsaWNraG91c2UtY2xpZW50LlxuICAgICAgICAgQnkgZGVmYXVsdCwgYW55dGhpbmcgd2l0aCBcInByb2R1Y3Rpb25cIiB3aWxsIGJlIGhpZ2hsaWdodGVkIGluIHJlZCBpbiBxdWVyeSBwcm9tcHQuXG4gICAgLS0+XG4gICAgPCEtLWRpc3BsYXlfbmFtZT5wcm9kdWN0aW9uPC9kaXNwbGF5X25hbWUtLT5cblxuICAgIDwhLS0gUG9ydCBmb3IgSFRUUCBBUEkuIFNlZSBhbHNvICdodHRwc19wb3J0JyBmb3Igc2VjdXJlIGNvbm5lY3Rpb25zLlxuICAgICAgICAgVGhpcyBpbnRlcmZhY2UgaXMgYWxzbyB1c2VkIGJ5IE9EQkMgYW5kIEpEQkMgZHJpdmVycyAoRGF0YUdyaXAsIERiZWF2ZXIsIC4uLilcbiAgICAgICAgIGFuZCBieSBtb3N0IG9mIHdlYiBpbnRlcmZhY2VzIChlbWJlZGRlZCBVSSwgR3JhZmFuYSwgUmVkYXNoLCAuLi4pLlxuICAgICAgLS0+XG4gICAgPGh0dHBfcG9ydD44MTIzPC9odHRwX3BvcnQ+XG5cbiAgICA8IS0tIFBvcnQgZm9yIGludGVyYWN0aW9uIGJ5IG5hdGl2ZSBwcm90b2NvbCB3aXRoOlxuICAgICAgICAgLSBjbGlja2hvdXNlLWNsaWVudCBhbmQgb3RoZXIgbmF0aXZlIENsaWNrSG91c2UgdG9vbHMgKGNsaWNraG91c2UtYmVuY2htYXJrLCBjbGlja2hvdXNlLWNvcGllcik7XG4gICAgICAgICAtIGNsaWNraG91c2Utc2VydmVyIHdpdGggb3RoZXIgY2xpY2tob3VzZS1zZXJ2ZXJzIGZvciBkaXN0cmlidXRlZCBxdWVyeSBwcm9jZXNzaW5nO1xuICAgICAgICAgLSBDbGlja0hvdXNlIGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyBzdXBwb3J0aW5nIG5hdGl2ZSBwcm90b2NvbFxuICAgICAgICAgKHRoaXMgcHJvdG9jb2wgaXMgYWxzbyBpbmZvcm1hbGx5IGNhbGxlZCBhcyBcInRoZSBUQ1AgcHJvdG9jb2xcIik7XG4gICAgICAgICBTZWUgYWxzbyAndGNwX3BvcnRfc2VjdXJlJyBmb3Igc2VjdXJlIGNvbm5lY3Rpb25zLlxuICAgIC0tPlxuICAgIDx0Y3BfcG9ydD45MDAwPC90Y3BfcG9ydD5cblxuICAgIDwhLS0gQ29tcGF0aWJpbGl0eSB3aXRoIE15U1FMIHByb3RvY29sLlxuICAgICAgICAgQ2xpY2tIb3VzZSB3aWxsIHByZXRlbmQgdG8gYmUgTXlTUUwgZm9yIGFwcGxpY2F0aW9ucyBjb25uZWN0aW5nIHRvIHRoaXMgcG9ydC5cbiAgICAtLT5cbiAgICA8bXlzcWxfcG9ydD45MDA0PC9teXNxbF9wb3J0PlxuXG4gICAgPCEtLSBDb21wYXRpYmlsaXR5IHdpdGggUG9zdGdyZVNRTCBwcm90b2NvbC5cbiAgICAgICAgIENsaWNrSG91c2Ugd2lsbCBwcmV0ZW5kIHRvIGJlIFBvc3RncmVTUUwgZm9yIGFwcGxpY2F0aW9ucyBjb25uZWN0aW5nIHRvIHRoaXMgcG9ydC5cbiAgICAtLT5cbiAgICA8cG9zdGdyZXNxbF9wb3J0PjkwMDU8L3Bvc3RncmVzcWxfcG9ydD5cblxuICAgIDwhLS0gSFRUUCBBUEkgd2l0aCBUTFMgKEhUVFBTKS5cbiAgICAgICAgIFlvdSBoYXZlIHRvIGNvbmZpZ3VyZSBjZXJ0aWZpY2F0ZSB0byBlbmFibGUgdGhpcyBpbnRlcmZhY2UuXG4gICAgICAgICBTZWUgdGhlIG9wZW5TU0wgc2VjdGlvbiBiZWxvdy5cbiAgICAtLT5cbiAgICA8IS0tIDxodHRwc19wb3J0Pjg0NDM8L2h0dHBzX3BvcnQ+IC0tPlxuXG4gICAgPCEtLSBOYXRpdmUgaW50ZXJmYWNlIHdpdGggVExTLlxuICAgICAgICAgWW91IGhhdmUgdG8gY29uZmlndXJlIGNlcnRpZmljYXRlIHRvIGVuYWJsZSB0aGlzIGludGVyZmFjZS5cbiAgICAgICAgIFNlZSB0aGUgb3BlblNTTCBzZWN0aW9uIGJlbG93LlxuICAgIC0tPlxuICAgIDwhLS0gPHRjcF9wb3J0X3NlY3VyZT45NDQwPC90Y3BfcG9ydF9zZWN1cmU+IC0tPlxuXG4gICAgPCEtLSBOYXRpdmUgaW50ZXJmYWNlIHdyYXBwZWQgd2l0aCBQUk9YWXYxIHByb3RvY29sXG4gICAgICAgICBQUk9YWXYxIGhlYWRlciBzZW50IGZvciBldmVyeSBjb25uZWN0aW9uLlxuICAgICAgICAgQ2xpY2tIb3VzZSB3aWxsIGV4dHJhY3QgaW5mb3JtYXRpb24gYWJvdXQgcHJveHktZm9yd2FyZGVkIGNsaWVudCBhZGRyZXNzIGZyb20gdGhlIGhlYWRlci5cbiAgICAtLT5cbiAgICA8IS0tIDx0Y3Bfd2l0aF9wcm94eV9wb3J0PjkwMTE8L3RjcF93aXRoX3Byb3h5X3BvcnQ+IC0tPlxuXG4gICAgPCEtLSBQb3J0IGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gcmVwbGljYXMuIFVzZWQgZm9yIGRhdGEgZXhjaGFuZ2UuXG4gICAgICAgICBJdCBwcm92aWRlcyBsb3ctbGV2ZWwgZGF0YSBhY2Nlc3MgYmV0d2VlbiBzZXJ2ZXJzLlxuICAgICAgICAgVGhpcyBwb3J0IHNob3VsZCBub3QgYmUgYWNjZXNzaWJsZSBmcm9tIHVudHJ1c3RlZCBuZXR3b3Jrcy5cbiAgICAgICAgIFNlZSBhbHNvICdpbnRlcnNlcnZlcl9odHRwX2NyZWRlbnRpYWxzJy5cbiAgICAgICAgIERhdGEgdHJhbnNmZXJyZWQgb3ZlciBjb25uZWN0aW9ucyB0byB0aGlzIHBvcnQgc2hvdWxkIG5vdCBnbyB0aHJvdWdoIHVudHJ1c3RlZCBuZXR3b3Jrcy5cbiAgICAgICAgIFNlZSBhbHNvICdpbnRlcnNlcnZlcl9odHRwc19wb3J0Jy5cbiAgICAgIC0tPlxuICAgIDxpbnRlcnNlcnZlcl9odHRwX3BvcnQ+OTAwOTwvaW50ZXJzZXJ2ZXJfaHR0cF9wb3J0PlxuXG4gICAgPCEtLSBQb3J0IGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gcmVwbGljYXMgd2l0aCBUTFMuXG4gICAgICAgICBZb3UgaGF2ZSB0byBjb25maWd1cmUgY2VydGlmaWNhdGUgdG8gZW5hYmxlIHRoaXMgaW50ZXJmYWNlLlxuICAgICAgICAgU2VlIHRoZSBvcGVuU1NMIHNlY3Rpb24gYmVsb3cuXG4gICAgICAgICBTZWUgYWxzbyAnaW50ZXJzZXJ2ZXJfaHR0cF9jcmVkZW50aWFscycuXG4gICAgICAtLT5cbiAgICA8IS0tIDxpbnRlcnNlcnZlcl9odHRwc19wb3J0PjkwMTA8L2ludGVyc2VydmVyX2h0dHBzX3BvcnQ+IC0tPlxuXG4gICAgPCEtLSBIb3N0bmFtZSB0aGF0IGlzIHVzZWQgYnkgb3RoZXIgcmVwbGljYXMgdG8gcmVxdWVzdCB0aGlzIHNlcnZlci5cbiAgICAgICAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZW4gaXQgaXMgZGV0ZXJtaW5lZCBhbmFsb2dvdXMgdG8gJ2hvc3RuYW1lIC1mJyBjb21tYW5kLlxuICAgICAgICAgVGhpcyBzZXR0aW5nIGNvdWxkIGJlIHVzZWQgdG8gc3dpdGNoIHJlcGxpY2F0aW9uIHRvIGFub3RoZXIgbmV0d29yayBpbnRlcmZhY2VcbiAgICAgICAgICh0aGUgc2VydmVyIG1heSBiZSBjb25uZWN0ZWQgdG8gbXVsdGlwbGUgbmV0d29ya3MgdmlhIG11bHRpcGxlIGFkZHJlc3NlcylcbiAgICAgIC0tPlxuXG4gICAgPCEtLVxuICAgIDxpbnRlcnNlcnZlcl9odHRwX2hvc3Q+ZXhhbXBsZS5jbGlja2hvdXNlLmNvbTwvaW50ZXJzZXJ2ZXJfaHR0cF9ob3N0PlxuICAgIC0tPlxuXG4gICAgPCEtLSBZb3UgY2FuIHNwZWNpZnkgY3JlZGVudGlhbHMgZm9yIGF1dGhlbnRoaWNhdGlvbiBiZXR3ZWVuIHJlcGxpY2FzLlxuICAgICAgICAgVGhpcyBpcyByZXF1aXJlZCB3aGVuIGludGVyc2VydmVyX2h0dHBzX3BvcnQgaXMgYWNjZXNzaWJsZSBmcm9tIHVudHJ1c3RlZCBuZXR3b3JrcyxcbiAgICAgICAgIGFuZCBhbHNvIHJlY29tbWVuZGVkIHRvIGF2b2lkIFNTUkYgYXR0YWNrcyBmcm9tIHBvc3NpYmx5IGNvbXByb21pc2VkIHNlcnZpY2VzIGluIHlvdXIgbmV0d29yay5cbiAgICAgIC0tPlxuICAgIDwhLS08aW50ZXJzZXJ2ZXJfaHR0cF9jcmVkZW50aWFscz5cbiAgICAgICAgPHVzZXI+aW50ZXJzZXJ2ZXI8L3VzZXI+XG4gICAgICAgIDxwYXNzd29yZD48L3Bhc3N3b3JkPlxuICAgIDwvaW50ZXJzZXJ2ZXJfaHR0cF9jcmVkZW50aWFscz4tLT5cblxuICAgIDwhLS0gTGlzdGVuIHNwZWNpZmllZCBhZGRyZXNzLlxuICAgICAgICAgVXNlIDo6ICh3aWxkY2FyZCBJUHY2IGFkZHJlc3MpLCBpZiB5b3Ugd2FudCB0byBhY2NlcHQgY29ubmVjdGlvbnMgYm90aCB3aXRoIElQdjQgYW5kIElQdjYgZnJvbSBldmVyeXdoZXJlLlxuICAgICAgICAgTm90ZXM6XG4gICAgICAgICBJZiB5b3Ugb3BlbiBjb25uZWN0aW9ucyBmcm9tIHdpbGRjYXJkIGFkZHJlc3MsIG1ha2Ugc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIG1lYXN1cmVzIGFwcGxpZWQ6XG4gICAgICAgICAtIHNlcnZlciBpcyBwcm90ZWN0ZWQgYnkgZmlyZXdhbGwgYW5kIG5vdCBhY2Nlc3NpYmxlIGZyb20gdW50cnVzdGVkIG5ldHdvcmtzO1xuICAgICAgICAgLSBhbGwgdXNlcnMgYXJlIHJlc3RyaWN0ZWQgdG8gc3Vic2V0IG9mIG5ldHdvcmsgYWRkcmVzc2VzIChzZWUgdXNlcnMueG1sKTtcbiAgICAgICAgIC0gYWxsIHVzZXJzIGhhdmUgc3Ryb25nIHBhc3N3b3Jkcywgb25seSBzZWN1cmUgKFRMUykgaW50ZXJmYWNlcyBhcmUgYWNjZXNzaWJsZSwgb3IgY29ubmVjdGlvbnMgYXJlIG9ubHkgbWFkZSB2aWEgVExTIGludGVyZmFjZXMuXG4gICAgICAgICAtIHVzZXJzIHdpdGhvdXQgcGFzc3dvcmQgaGF2ZSByZWFkb25seSBhY2Nlc3MuXG4gICAgICAgICBTZWUgYWxzbzogaHR0cHM6Ly93d3cuc2hvZGFuLmlvL3NlYXJjaD9xdWVyeT1jbGlja2hvdXNlXG4gICAgICAtLT5cbiAgICA8IS0tIDxsaXN0ZW5faG9zdD46OjwvbGlzdGVuX2hvc3Q+IC0tPlxuXG5cbiAgICA8IS0tIFNhbWUgZm9yIGhvc3RzIHdpdGhvdXQgc3VwcG9ydCBmb3IgSVB2NjogLS0+XG4gICAgPCEtLSA8bGlzdGVuX2hvc3Q+MC4wLjAuMDwvbGlzdGVuX2hvc3Q+IC0tPlxuXG4gICAgPCEtLSBEZWZhdWx0IHZhbHVlcyAtIHRyeSBsaXN0ZW4gbG9jYWxob3N0IG9uIElQdjQgYW5kIElQdjYuIC0tPlxuICAgIDwhLS1cbiAgICA8bGlzdGVuX2hvc3Q+OjoxPC9saXN0ZW5faG9zdD5cbiAgICA8bGlzdGVuX2hvc3Q+MTI3LjAuMC4xPC9saXN0ZW5faG9zdD5cbiAgICAtLT5cblxuICAgIDwhLS0gRG9uJ3QgZXhpdCBpZiBJUHY2IG9yIElQdjQgbmV0d29ya3MgYXJlIHVuYXZhaWxhYmxlIHdoaWxlIHRyeWluZyB0byBsaXN0ZW4uIC0tPlxuICAgIDwhLS0gPGxpc3Rlbl90cnk+MDwvbGlzdGVuX3RyeT4gLS0+XG5cbiAgICA8IS0tIEFsbG93IG11bHRpcGxlIHNlcnZlcnMgdG8gbGlzdGVuIG9uIHRoZSBzYW1lIGFkZHJlc3M6cG9ydC4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuXG4gICAgICAtLT5cbiAgICA8IS0tIDxsaXN0ZW5fcmV1c2VfcG9ydD4wPC9saXN0ZW5fcmV1c2VfcG9ydD4gLS0+XG5cbiAgICA8IS0tIDxsaXN0ZW5fYmFja2xvZz40MDk2PC9saXN0ZW5fYmFja2xvZz4gLS0+XG5cbiAgICA8bWF4X2Nvbm5lY3Rpb25zPjQwOTY8L21heF9jb25uZWN0aW9ucz5cblxuICAgIDwhLS0gRm9yICdDb25uZWN0aW9uOiBrZWVwLWFsaXZlJyBpbiBIVFRQIDEuMSAtLT5cbiAgICA8a2VlcF9hbGl2ZV90aW1lb3V0PjM8L2tlZXBfYWxpdmVfdGltZW91dD5cblxuICAgIDwhLS0gZ1JQQyBwcm90b2NvbCAoc2VlIHNyYy9TZXJ2ZXIvZ3JwY19wcm90b3MvY2xpY2tob3VzZV9ncnBjLnByb3RvIGZvciB0aGUgQVBJKSAtLT5cbiAgICA8IS0tIDxncnBjX3BvcnQ+OTEwMDwvZ3JwY19wb3J0PiAtLT5cbiAgICA8Z3JwYz5cbiAgICAgICAgPGVuYWJsZV9zc2w+ZmFsc2U8L2VuYWJsZV9zc2w+XG5cbiAgICAgICAgPCEtLSBUaGUgZm9sbG93aW5nIHR3byBmaWxlcyBhcmUgdXNlZCBvbmx5IGlmIGVuYWJsZV9zc2w9MSAtLT5cbiAgICAgICAgPHNzbF9jZXJ0X2ZpbGU+L3BhdGgvdG8vc3NsX2NlcnRfZmlsZTwvc3NsX2NlcnRfZmlsZT5cbiAgICAgICAgPHNzbF9rZXlfZmlsZT4vcGF0aC90by9zc2xfa2V5X2ZpbGU8L3NzbF9rZXlfZmlsZT5cblxuICAgICAgICA8IS0tIFdoZXRoZXIgc2VydmVyIHdpbGwgcmVxdWVzdCBjbGllbnQgZm9yIGEgY2VydGlmaWNhdGUgLS0+XG4gICAgICAgIDxzc2xfcmVxdWlyZV9jbGllbnRfYXV0aD5mYWxzZTwvc3NsX3JlcXVpcmVfY2xpZW50X2F1dGg+XG5cbiAgICAgICAgPCEtLSBUaGUgZm9sbG93aW5nIGZpbGUgaXMgdXNlZCBvbmx5IGlmIHNzbF9yZXF1aXJlX2NsaWVudF9hdXRoPTEgLS0+XG4gICAgICAgIDxzc2xfY2FfY2VydF9maWxlPi9wYXRoL3RvL3NzbF9jYV9jZXJ0X2ZpbGU8L3NzbF9jYV9jZXJ0X2ZpbGU+XG5cbiAgICAgICAgPCEtLSBEZWZhdWx0IHRyYW5zcG9ydCBjb21wcmVzc2lvbiB0eXBlIChjYW4gYmUgb3ZlcnJpZGRlbiBieSBjbGllbnQsIHNlZSB0aGUgdHJhbnNwb3J0X2NvbXByZXNzaW9uX3R5cGUgZmllbGQgaW4gUXVlcnlJbmZvKS5cbiAgICAgICAgICAgICBTdXBwb3J0ZWQgYWxnb3JpdGhtczogbm9uZSwgZGVmbGF0ZSwgZ3ppcCwgc3RyZWFtX2d6aXAgLS0+XG4gICAgICAgIDx0cmFuc3BvcnRfY29tcHJlc3Npb25fdHlwZT5ub25lPC90cmFuc3BvcnRfY29tcHJlc3Npb25fdHlwZT5cblxuICAgICAgICA8IS0tIERlZmF1bHQgdHJhbnNwb3J0IGNvbXByZXNzaW9uIGxldmVsLiBTdXBwb3J0ZWQgbGV2ZWxzOiAwLi4zIC0tPlxuICAgICAgICA8dHJhbnNwb3J0X2NvbXByZXNzaW9uX2xldmVsPjA8L3RyYW5zcG9ydF9jb21wcmVzc2lvbl9sZXZlbD5cblxuICAgICAgICA8IS0tIFNlbmQvcmVjZWl2ZSBtZXNzYWdlIHNpemUgbGltaXRzIGluIGJ5dGVzLiAtMSBtZWFucyB1bmxpbWl0ZWQgLS0+XG4gICAgICAgIDxtYXhfc2VuZF9tZXNzYWdlX3NpemU+LTE8L21heF9zZW5kX21lc3NhZ2Vfc2l6ZT5cbiAgICAgICAgPG1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZT4tMTwvbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplPlxuXG4gICAgICAgIDwhLS0gRW5hYmxlIGlmIHlvdSB3YW50IHZlcnkgZGV0YWlsZWQgbG9ncyAtLT5cbiAgICAgICAgPHZlcmJvc2VfbG9ncz5mYWxzZTwvdmVyYm9zZV9sb2dzPlxuICAgIDwvZ3JwYz5cblxuICAgIDwhLS0gVXNlZCB3aXRoIGh0dHBzX3BvcnQgYW5kIHRjcF9wb3J0X3NlY3VyZS4gRnVsbCBzc2wgb3B0aW9ucyBsaXN0OiBodHRwczovL2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS1FeHRyYXMvcG9jby9ibG9iL21hc3Rlci9OZXRTU0xfT3BlblNTTC9pbmNsdWRlL1BvY28vTmV0L1NTTE1hbmFnZXIuaCNMNzEgLS0+XG4gICAgPG9wZW5TU0w+XG4gICAgICAgIDxzZXJ2ZXI+IDwhLS0gVXNlZCBmb3IgaHR0cHMgc2VydmVyIEFORCBzZWN1cmUgdGNwIHBvcnQgLS0+XG4gICAgICAgICAgICA8IS0tIG9wZW5zc2wgcmVxIC1zdWJqIFwiL0NOPWxvY2FsaG9zdFwiIC1uZXcgLW5ld2tleSByc2E6MjA0OCAtZGF5cyAzNjUgLW5vZGVzIC14NTA5IC1rZXlvdXQgL2V0Yy9jbGlja2hvdXNlLXNlcnZlci9zZXJ2ZXIua2V5IC1vdXQgL2V0Yy9jbGlja2hvdXNlLXNlcnZlci9zZXJ2ZXIuY3J0IC0tPlxuICAgICAgICAgICAgPCEtLSA8Y2VydGlmaWNhdGVGaWxlPi9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvc2VydmVyLmNydDwvY2VydGlmaWNhdGVGaWxlPiAtLT5cbiAgICAgICAgICAgIDwhLS0gPHByaXZhdGVLZXlGaWxlPi9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvc2VydmVyLmtleTwvcHJpdmF0ZUtleUZpbGU+IC0tPlxuICAgICAgICAgICAgPCEtLSBkaHBhcmFtcyBhcmUgb3B0aW9uYWwuIFlvdSBjYW4gZGVsZXRlIHRoZSA8ZGhQYXJhbXNGaWxlPiBlbGVtZW50LlxuICAgICAgICAgICAgICAgICBUbyBnZW5lcmF0ZSBkaHBhcmFtcywgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgICAgICAgICAgICAgICAgIG9wZW5zc2wgZGhwYXJhbSAtb3V0IC9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvZGhwYXJhbS5wZW0gNDA5NlxuICAgICAgICAgICAgICAgICBPbmx5IGZpbGUgZm9ybWF0IHdpdGggQkVHSU4gREggUEFSQU1FVEVSUyBpcyBzdXBwb3J0ZWQuXG4gICAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgPCEtLSA8ZGhQYXJhbXNGaWxlPi9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvZGhwYXJhbS5wZW08L2RoUGFyYW1zRmlsZT4tLT5cbiAgICAgICAgICAgIDx2ZXJpZmljYXRpb25Nb2RlPm5vbmU8L3ZlcmlmaWNhdGlvbk1vZGU+XG4gICAgICAgICAgICA8bG9hZERlZmF1bHRDQUZpbGU+dHJ1ZTwvbG9hZERlZmF1bHRDQUZpbGU+XG4gICAgICAgICAgICA8Y2FjaGVTZXNzaW9ucz50cnVlPC9jYWNoZVNlc3Npb25zPlxuICAgICAgICAgICAgPGRpc2FibGVQcm90b2NvbHM+c3NsdjIsc3NsdjM8L2Rpc2FibGVQcm90b2NvbHM+XG4gICAgICAgICAgICA8cHJlZmVyU2VydmVyQ2lwaGVycz50cnVlPC9wcmVmZXJTZXJ2ZXJDaXBoZXJzPlxuICAgICAgICA8L3NlcnZlcj5cblxuICAgICAgICA8Y2xpZW50PiA8IS0tIFVzZWQgZm9yIGNvbm5lY3RpbmcgdG8gaHR0cHMgZGljdGlvbmFyeSBzb3VyY2UgYW5kIHNlY3VyZWQgWm9va2VlcGVyIGNvbW11bmljYXRpb24gLS0+XG4gICAgICAgICAgICA8bG9hZERlZmF1bHRDQUZpbGU+dHJ1ZTwvbG9hZERlZmF1bHRDQUZpbGU+XG4gICAgICAgICAgICA8Y2FjaGVTZXNzaW9ucz50cnVlPC9jYWNoZVNlc3Npb25zPlxuICAgICAgICAgICAgPGRpc2FibGVQcm90b2NvbHM+c3NsdjIsc3NsdjM8L2Rpc2FibGVQcm90b2NvbHM+XG4gICAgICAgICAgICA8cHJlZmVyU2VydmVyQ2lwaGVycz50cnVlPC9wcmVmZXJTZXJ2ZXJDaXBoZXJzPlxuICAgICAgICAgICAgPCEtLSBVc2UgZm9yIHNlbGYtc2lnbmVkOiA8dmVyaWZpY2F0aW9uTW9kZT5ub25lPC92ZXJpZmljYXRpb25Nb2RlPiAtLT5cbiAgICAgICAgICAgIDxpbnZhbGlkQ2VydGlmaWNhdGVIYW5kbGVyPlxuICAgICAgICAgICAgICAgIDwhLS0gVXNlIGZvciBzZWxmLXNpZ25lZDogPG5hbWU+QWNjZXB0Q2VydGlmaWNhdGVIYW5kbGVyPC9uYW1lPiAtLT5cbiAgICAgICAgICAgICAgICA8bmFtZT5SZWplY3RDZXJ0aWZpY2F0ZUhhbmRsZXI8L25hbWU+XG4gICAgICAgICAgICA8L2ludmFsaWRDZXJ0aWZpY2F0ZUhhbmRsZXI+XG4gICAgICAgIDwvY2xpZW50PlxuICAgIDwvb3BlblNTTD5cblxuICAgIDwhLS0gRGVmYXVsdCByb290IHBhZ2Ugb24gaHR0cFtzXSBzZXJ2ZXIuIEZvciBleGFtcGxlIGxvYWQgVUkgZnJvbSBodHRwczovL3RhYml4LmlvLyB3aGVuIG9wZW5pbmcgaHR0cDovL2xvY2FsaG9zdDo4MTIzIC0tPlxuICAgIDwhLS1cbiAgICA8aHR0cF9zZXJ2ZXJfZGVmYXVsdF9yZXNwb25zZT48IVtDREFUQVs8aHRtbCBuZy1hcHA9XCJTTUkyXCI+PGhlYWQ+PGJhc2UgaHJlZj1cImh0dHA6Ly91aS50YWJpeC5pby9cIj48L2hlYWQ+PGJvZHk+PGRpdiB1aS12aWV3PVwiXCIgY2xhc3M9XCJjb250ZW50LXVpXCI+PC9kaXY+PHNjcmlwdCBzcmM9XCJodHRwOi8vbG9hZGVyLnRhYml4LmlvL21hc3Rlci5qc1wiPjwvc2NyaXB0PjwvYm9keT48L2h0bWw+XV0+PC9odHRwX3NlcnZlcl9kZWZhdWx0X3Jlc3BvbnNlPlxuICAgIC0tPlxuXG4gICAgPCEtLSBNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHF1ZXJpZXMuIC0tPlxuICAgIDxtYXhfY29uY3VycmVudF9xdWVyaWVzPjEwMDwvbWF4X2NvbmN1cnJlbnRfcXVlcmllcz5cblxuICAgIDwhLS0gTWF4aW11bSBtZW1vcnkgdXNhZ2UgKHJlc2lkZW50IHNldCBzaXplKSBmb3Igc2VydmVyIHByb2Nlc3MuXG4gICAgICAgICBaZXJvIHZhbHVlIG9yIHVuc2V0IG1lYW5zIGRlZmF1bHQuIERlZmF1bHQgaXMgXCJtYXhfc2VydmVyX21lbW9yeV91c2FnZV90b19yYW1fcmF0aW9cIiBvZiBhdmFpbGFibGUgcGh5c2ljYWwgUkFNLlxuICAgICAgICAgSWYgdGhlIHZhbHVlIGlzIGxhcmdlciB0aGFuIFwibWF4X3NlcnZlcl9tZW1vcnlfdXNhZ2VfdG9fcmFtX3JhdGlvXCIgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIFJBTSwgaXQgd2lsbCBiZSBjdXQgZG93bi5cblxuICAgICAgICAgVGhlIGNvbnN0cmFpbnQgaXMgY2hlY2tlZCBvbiBxdWVyeSBleGVjdXRpb24gdGltZS5cbiAgICAgICAgIElmIGEgcXVlcnkgdHJpZXMgdG8gYWxsb2NhdGUgbWVtb3J5IGFuZCB0aGUgY3VycmVudCBtZW1vcnkgdXNhZ2UgcGx1cyBhbGxvY2F0aW9uIGlzIGdyZWF0ZXJcbiAgICAgICAgICB0aGFuIHNwZWNpZmllZCB0aHJlc2hvbGQsIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi5cblxuICAgICAgICAgSXQgaXMgbm90IHByYWN0aWNhbCB0byBzZXQgdGhpcyBjb25zdHJhaW50IHRvIHNtYWxsIHZhbHVlcyBsaWtlIGp1c3QgYSBmZXcgZ2lnYWJ5dGVzLFxuICAgICAgICAgIGJlY2F1c2UgbWVtb3J5IGFsbG9jYXRvciB3aWxsIGtlZXAgdGhpcyBhbW91bnQgb2YgbWVtb3J5IGluIGNhY2hlcyBhbmQgdGhlIHNlcnZlciB3aWxsIGRlbnkgc2VydmljZSBvZiBxdWVyaWVzLlxuICAgICAgLS0+XG4gICAgPG1heF9zZXJ2ZXJfbWVtb3J5X3VzYWdlPjA8L21heF9zZXJ2ZXJfbWVtb3J5X3VzYWdlPlxuXG4gICAgPCEtLSBNYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIGluIHRoZSBHbG9iYWwgdGhyZWFkIHBvb2wuXG4gICAgVGhpcyB3aWxsIGRlZmF1bHQgdG8gYSBtYXhpbXVtIG9mIDEwMDAwIHRocmVhZHMgaWYgbm90IHNwZWNpZmllZC5cbiAgICBUaGlzIHNldHRpbmcgd2lsbCBiZSB1c2VmdWwgaW4gc2NlbmFyaW9zIHdoZXJlIHRoZXJlIGFyZSBhIGxhcmdlIG51bWJlclxuICAgIG9mIGRpc3RyaWJ1dGVkIHF1ZXJpZXMgdGhhdCBhcmUgcnVubmluZyBjb25jdXJyZW50bHkgYnV0IGFyZSBpZGxpbmcgbW9zdFxuICAgIG9mIHRoZSB0aW1lLCBpbiB3aGljaCBjYXNlIGEgaGlnaGVyIG51bWJlciBvZiB0aHJlYWRzIG1pZ2h0IGJlIHJlcXVpcmVkLlxuICAgIC0tPlxuXG4gICAgPG1heF90aHJlYWRfcG9vbF9zaXplPjEwMDAwPC9tYXhfdGhyZWFkX3Bvb2xfc2l6ZT5cblxuICAgIDwhLS0gTnVtYmVyIG9mIHdvcmtlcnMgdG8gcmVjeWNsZSBjb25uZWN0aW9ucyBpbiBiYWNrZ3JvdW5kIChzZWUgYWxzbyBkcmFpbl90aW1lb3V0KS5cbiAgICAgICAgIElmIHRoZSBwb29sIGlzIGZ1bGwsIGNvbm5lY3Rpb24gd2lsbCBiZSBkcmFpbmVkIHN5bmNocm9ub3VzbHkuIC0tPlxuICAgIDwhLS0gPG1heF90aHJlYWRzX2Zvcl9jb25uZWN0aW9uX2NvbGxlY3Rvcj4xMDwvbWF4X3RocmVhZHNfZm9yX2Nvbm5lY3Rpb25fY29sbGVjdG9yPiAtLT5cblxuICAgIDwhLS0gT24gbWVtb3J5IGNvbnN0cmFpbmVkIGVudmlyb25tZW50cyB5b3UgbWF5IGhhdmUgdG8gc2V0IHRoaXMgdG8gdmFsdWUgbGFyZ2VyIHRoYW4gMS5cbiAgICAgIC0tPlxuICAgIDxtYXhfc2VydmVyX21lbW9yeV91c2FnZV90b19yYW1fcmF0aW8+MC45PC9tYXhfc2VydmVyX21lbW9yeV91c2FnZV90b19yYW1fcmF0aW8+XG5cbiAgICA8IS0tIFNpbXBsZSBzZXJ2ZXItd2lkZSBtZW1vcnkgcHJvZmlsZXIuIENvbGxlY3QgYSBzdGFjayB0cmFjZSBhdCBldmVyeSBwZWFrIGFsbG9jYXRpb24gc3RlcCAoaW4gYnl0ZXMpLlxuICAgICAgICAgRGF0YSB3aWxsIGJlIHN0b3JlZCBpbiBzeXN0ZW0udHJhY2VfbG9nIHRhYmxlIHdpdGggcXVlcnlfaWQgPSBlbXB0eSBzdHJpbmcuXG4gICAgICAgICBaZXJvIG1lYW5zIGRpc2FibGVkLlxuICAgICAgLS0+XG4gICAgPHRvdGFsX21lbW9yeV9wcm9maWxlcl9zdGVwPjQxOTQzMDQ8L3RvdGFsX21lbW9yeV9wcm9maWxlcl9zdGVwPlxuXG4gICAgPCEtLSBDb2xsZWN0IHJhbmRvbSBhbGxvY2F0aW9ucyBhbmQgZGVhbGxvY2F0aW9ucyBhbmQgd3JpdGUgdGhlbSBpbnRvIHN5c3RlbS50cmFjZV9sb2cgd2l0aCAnTWVtb3J5U2FtcGxlJyB0cmFjZV90eXBlLlxuICAgICAgICAgVGhlIHByb2JhYmlsaXR5IGlzIGZvciBldmVyeSBhbGxvYy9mcmVlIHJlZ2FyZGxlc3MgdG8gdGhlIHNpemUgb2YgdGhlIGFsbG9jYXRpb24uXG4gICAgICAgICBOb3RlIHRoYXQgc2FtcGxpbmcgaGFwcGVucyBvbmx5IHdoZW4gdGhlIGFtb3VudCBvZiB1bnRyYWNrZWQgbWVtb3J5IGV4Y2VlZHMgdGhlIHVudHJhY2tlZCBtZW1vcnkgbGltaXQsXG4gICAgICAgICAgd2hpY2ggaXMgNCBNaUIgYnkgZGVmYXVsdCBidXQgY2FuIGJlIGxvd2VyZWQgaWYgJ3RvdGFsX21lbW9yeV9wcm9maWxlcl9zdGVwJyBpcyBsb3dlcmVkLlxuICAgICAgICAgWW91IG1heSB3YW50IHRvIHNldCAndG90YWxfbWVtb3J5X3Byb2ZpbGVyX3N0ZXAnIHRvIDEgZm9yIGV4dHJhIGZpbmUgZ3JhaW5lZCBzYW1wbGluZy5cbiAgICAgIC0tPlxuICAgIDx0b3RhbF9tZW1vcnlfdHJhY2tlcl9zYW1wbGVfcHJvYmFiaWxpdHk+MDwvdG90YWxfbWVtb3J5X3RyYWNrZXJfc2FtcGxlX3Byb2JhYmlsaXR5PlxuXG4gICAgPCEtLSBTZXQgbGltaXQgb24gbnVtYmVyIG9mIG9wZW4gZmlsZXMgKGRlZmF1bHQ6IG1heGltdW0pLiBUaGlzIHNldHRpbmcgbWFrZXMgc2Vuc2Ugb24gTWFjIE9TIFggYmVjYXVzZSBnZXRybGltaXQoKSBmYWlscyB0byByZXRyaWV2ZVxuICAgICAgICAgY29ycmVjdCBtYXhpbXVtIHZhbHVlLiAtLT5cbiAgICA8IS0tIDxtYXhfb3Blbl9maWxlcz4yNjIxNDQ8L21heF9vcGVuX2ZpbGVzPiAtLT5cblxuICAgIDwhLS0gU2l6ZSBvZiBjYWNoZSBvZiB1bmNvbXByZXNzZWQgYmxvY2tzIG9mIGRhdGEsIHVzZWQgaW4gdGFibGVzIG9mIE1lcmdlVHJlZSBmYW1pbHkuXG4gICAgICAgICBJbiBieXRlcy4gQ2FjaGUgaXMgc2luZ2xlIGZvciBzZXJ2ZXIuIE1lbW9yeSBpcyBhbGxvY2F0ZWQgb25seSBvbiBkZW1hbmQuXG4gICAgICAgICBDYWNoZSBpcyB1c2VkIHdoZW4gJ3VzZV91bmNvbXByZXNzZWRfY2FjaGUnIHVzZXIgc2V0dGluZyB0dXJuZWQgb24gKG9mZiBieSBkZWZhdWx0KS5cbiAgICAgICAgIFVuY29tcHJlc3NlZCBjYWNoZSBpcyBhZHZhbnRhZ2VvdXMgb25seSBmb3IgdmVyeSBzaG9ydCBxdWVyaWVzIGFuZCBpbiByYXJlIGNhc2VzLlxuXG4gICAgICAgICBOb3RlOiB1bmNvbXByZXNzZWQgY2FjaGUgY2FuIGJlIHBvaW50bGVzcyBmb3IgbHo0LCBiZWNhdXNlIG1lbW9yeSBiYW5kd2lkdGhcbiAgICAgICAgIGlzIHNsb3dlciB0aGFuIG11bHRpLWNvcmUgZGVjb21wcmVzc2lvbiBvbiBzb21lIHNlcnZlciBjb25maWd1cmF0aW9ucy5cbiAgICAgICAgIEVuYWJsaW5nIGl0IGNhbiBzb21ldGltZXMgcGFyYWRveGljYWxseSBtYWtlIHF1ZXJpZXMgc2xvd2VyLlxuICAgICAgLS0+XG4gICAgPHVuY29tcHJlc3NlZF9jYWNoZV9zaXplPjg1ODk5MzQ1OTI8L3VuY29tcHJlc3NlZF9jYWNoZV9zaXplPlxuXG4gICAgPCEtLSBBcHByb3hpbWF0ZSBzaXplIG9mIG1hcmsgY2FjaGUsIHVzZWQgaW4gdGFibGVzIG9mIE1lcmdlVHJlZSBmYW1pbHkuXG4gICAgICAgICBJbiBieXRlcy4gQ2FjaGUgaXMgc2luZ2xlIGZvciBzZXJ2ZXIuIE1lbW9yeSBpcyBhbGxvY2F0ZWQgb25seSBvbiBkZW1hbmQuXG4gICAgICAgICBZb3Ugc2hvdWxkIG5vdCBsb3dlciB0aGlzIHZhbHVlLlxuICAgICAgLS0+XG4gICAgPG1hcmtfY2FjaGVfc2l6ZT41MzY4NzA5MTIwPC9tYXJrX2NhY2hlX3NpemU+XG5cblxuICAgIDwhLS0gSWYgeW91IGVuYWJsZSB0aGUgYG1pbl9ieXRlc190b191c2VfbW1hcF9pb2Agc2V0dGluZyxcbiAgICAgICAgIHRoZSBkYXRhIGluIE1lcmdlVHJlZSB0YWJsZXMgY2FuIGJlIHJlYWQgd2l0aCBtbWFwIHRvIGF2b2lkIGNvcHlpbmcgZnJvbSBrZXJuZWwgdG8gdXNlcnNwYWNlLlxuICAgICAgICAgSXQgbWFrZXMgc2Vuc2Ugb25seSBmb3IgbGFyZ2UgZmlsZXMgYW5kIGhlbHBzIG9ubHkgaWYgZGF0YSByZXNpZGUgaW4gcGFnZSBjYWNoZS5cbiAgICAgICAgIFRvIGF2b2lkIGZyZXF1ZW50IG9wZW4vbW1hcC9tdW5tYXAvY2xvc2UgY2FsbHMgKHdoaWNoIGFyZSB2ZXJ5IGV4cGVuc2l2ZSBkdWUgdG8gY29uc2VxdWVudCBwYWdlIGZhdWx0cylcbiAgICAgICAgIGFuZCB0byByZXVzZSBtYXBwaW5ncyBmcm9tIHNldmVyYWwgdGhyZWFkcyBhbmQgcXVlcmllcyxcbiAgICAgICAgIHRoZSBjYWNoZSBvZiBtYXBwZWQgZmlsZXMgaXMgbWFpbnRhaW5lZC4gSXRzIHNpemUgaXMgdGhlIG51bWJlciBvZiBtYXBwZWQgcmVnaW9ucyAodXN1YWxseSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIG1hcHBlZCBmaWxlcykuXG4gICAgICAgICBUaGUgYW1vdW50IG9mIGRhdGEgaW4gbWFwcGVkIGZpbGVzIGNhbiBiZSBtb25pdG9yZWRcbiAgICAgICAgIGluIHN5c3RlbS5tZXRyaWNzLCBzeXN0ZW0ubWV0cmljX2xvZyBieSB0aGUgTU1hcHBlZEZpbGVzLCBNTWFwcGVkRmlsZUJ5dGVzIG1ldHJpY3NcbiAgICAgICAgIGFuZCBpbiBzeXN0ZW0uYXN5bmNocm9ub3VzX21ldHJpY3MsIHN5c3RlbS5hc3luY2hyb25vdXNfbWV0cmljc19sb2cgYnkgdGhlIE1NYXBDYWNoZUNlbGxzIG1ldHJpYyxcbiAgICAgICAgIGFuZCBhbHNvIGluIHN5c3RlbS5ldmVudHMsIHN5c3RlbS5wcm9jZXNzZXMsIHN5c3RlbS5xdWVyeV9sb2csIHN5c3RlbS5xdWVyeV90aHJlYWRfbG9nLCBzeXN0ZW0ucXVlcnlfdmlld3NfbG9nIGJ5IHRoZVxuICAgICAgICAgQ3JlYXRlZFJlYWRCdWZmZXJNTWFwLCBDcmVhdGVkUmVhZEJ1ZmZlck1NYXBGYWlsZWQsIE1NYXBwZWRGaWxlQ2FjaGVIaXRzLCBNTWFwcGVkRmlsZUNhY2hlTWlzc2VzIGV2ZW50cy5cbiAgICAgICAgIE5vdGUgdGhhdCB0aGUgYW1vdW50IG9mIGRhdGEgaW4gbWFwcGVkIGZpbGVzIGRvZXMgbm90IGNvbnN1bWUgbWVtb3J5IGRpcmVjdGx5IGFuZCBpcyBub3QgYWNjb3VudGVkXG4gICAgICAgICBpbiBxdWVyeSBvciBzZXJ2ZXIgbWVtb3J5IHVzYWdlIC0gYmVjYXVzZSB0aGlzIG1lbW9yeSBjYW4gYmUgZGlzY2FyZGVkIHNpbWlsYXIgdG8gT1MgcGFnZSBjYWNoZS5cbiAgICAgICAgIFRoZSBjYWNoZSBpcyBkcm9wcGVkICh0aGUgZmlsZXMgYXJlIGNsb3NlZCkgYXV0b21hdGljYWxseSBvbiByZW1vdmFsIG9mIG9sZCBwYXJ0cyBpbiBNZXJnZVRyZWUsXG4gICAgICAgICBhbHNvIGl0IGNhbiBiZSBkcm9wcGVkIG1hbnVhbGx5IGJ5IHRoZSBTWVNURU0gRFJPUCBNTUFQIENBQ0hFIHF1ZXJ5LlxuICAgICAgLS0+XG4gICAgPG1tYXBfY2FjaGVfc2l6ZT4xMDAwPC9tbWFwX2NhY2hlX3NpemU+XG5cbiAgICA8IS0tIENhY2hlIHNpemUgaW4gYnl0ZXMgZm9yIGNvbXBpbGVkIGV4cHJlc3Npb25zLi0tPlxuICAgIDxjb21waWxlZF9leHByZXNzaW9uX2NhY2hlX3NpemU+MTM0MjE3NzI4PC9jb21waWxlZF9leHByZXNzaW9uX2NhY2hlX3NpemU+XG5cbiAgICA8IS0tIENhY2hlIHNpemUgaW4gZWxlbWVudHMgZm9yIGNvbXBpbGVkIGV4cHJlc3Npb25zLi0tPlxuICAgIDxjb21waWxlZF9leHByZXNzaW9uX2NhY2hlX2VsZW1lbnRzX3NpemU+MTAwMDA8L2NvbXBpbGVkX2V4cHJlc3Npb25fY2FjaGVfZWxlbWVudHNfc2l6ZT5cblxuICAgIDwhLS0gUGF0aCB0byBkYXRhIGRpcmVjdG9yeSwgd2l0aCB0cmFpbGluZyBzbGFzaC4gLS0+XG4gICAgPHBhdGg+L3Zhci9saWIvY2xpY2tob3VzZS88L3BhdGg+XG5cbiAgICA8IS0tIFBhdGggdG8gdGVtcG9yYXJ5IGRhdGEgZm9yIHByb2Nlc3NpbmcgaGFyZCBxdWVyaWVzLiAtLT5cbiAgICA8dG1wX3BhdGg+L3Zhci9saWIvY2xpY2tob3VzZS90bXAvPC90bXBfcGF0aD5cblxuICAgIDwhLS0gRGlzYWJsZSBBdXRoVHlwZSBwbGFpbnRleHRfcGFzc3dvcmQgYW5kIG5vX3Bhc3N3b3JkIGZvciBBQ0wuIC0tPlxuICAgIDwhLS0gPGFsbG93X3BsYWludGV4dF9wYXNzd29yZD4wPC9hbGxvd19wbGFpbnRleHRfcGFzc3dvcmQ+IC0tPlxuICAgIDwhLS0gPGFsbG93X25vX3Bhc3N3b3JkPjA8L2FsbG93X25vX3Bhc3N3b3JkPiAtLT5gXG5cbiAgICA8IS0tIFBvbGljeSBmcm9tIHRoZSA8c3RvcmFnZV9jb25maWd1cmF0aW9uPiBmb3IgdGhlIHRlbXBvcmFyeSBmaWxlcy5cbiAgICAgICAgIElmIG5vdCBzZXQgPHRtcF9wYXRoPiBpcyB1c2VkLCBvdGhlcndpc2UgPHRtcF9wYXRoPiBpcyBpZ25vcmVkLlxuXG4gICAgICAgICBOb3RlczpcbiAgICAgICAgIC0gbW92ZV9mYWN0b3IgICAgICAgICAgICAgIGlzIGlnbm9yZWRcbiAgICAgICAgIC0ga2VlcF9mcmVlX3NwYWNlX2J5dGVzICAgIGlzIGlnbm9yZWRcbiAgICAgICAgIC0gbWF4X2RhdGFfcGFydF9zaXplX2J5dGVzIGlzIGlnbm9yZWRcbiAgICAgICAgIC0geW91IG11c3QgaGF2ZSBleGFjdGx5IG9uZSB2b2x1bWUgaW4gdGhhdCBwb2xpY3lcbiAgICAtLT5cbiAgICA8IS0tIDx0bXBfcG9saWN5PnRtcDwvdG1wX3BvbGljeT4gLS0+XG5cbiAgICA8IS0tIERpcmVjdG9yeSB3aXRoIHVzZXIgcHJvdmlkZWQgZmlsZXMgdGhhdCBhcmUgYWNjZXNzaWJsZSBieSAnZmlsZScgdGFibGUgZnVuY3Rpb24uIC0tPlxuICAgIDx1c2VyX2ZpbGVzX3BhdGg+L3Zhci9saWIvY2xpY2tob3VzZS91c2VyX2ZpbGVzLzwvdXNlcl9maWxlc19wYXRoPlxuXG4gICAgPCEtLSBMREFQIHNlcnZlciBkZWZpbml0aW9ucy4gLS0+XG4gICAgPGxkYXBfc2VydmVycz5cbiAgICAgICAgPCEtLSBMaXN0IExEQVAgc2VydmVycyB3aXRoIHRoZWlyIGNvbm5lY3Rpb24gcGFyYW1ldGVycyBoZXJlIHRvIGxhdGVyIDEpIHVzZSB0aGVtIGFzIGF1dGhlbnRpY2F0b3JzIGZvciBkZWRpY2F0ZWQgbG9jYWwgdXNlcnMsXG4gICAgICAgICAgICAgIHdobyBoYXZlICdsZGFwJyBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gc3BlY2lmaWVkIGluc3RlYWQgb2YgJ3Bhc3N3b3JkJywgb3IgdG8gMikgdXNlIHRoZW0gYXMgcmVtb3RlIHVzZXIgZGlyZWN0b3JpZXMuXG4gICAgICAgICAgICAgUGFyYW1ldGVyczpcbiAgICAgICAgICAgICAgICBob3N0IC0gTERBUCBzZXJ2ZXIgaG9zdG5hbWUgb3IgSVAsIHRoaXMgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBhbmQgY2Fubm90IGJlIGVtcHR5LlxuICAgICAgICAgICAgICAgIHBvcnQgLSBMREFQIHNlcnZlciBwb3J0LCBkZWZhdWx0IGlzIDYzNiBpZiBlbmFibGVfdGxzIGlzIHNldCB0byB0cnVlLCAzODkgb3RoZXJ3aXNlLlxuICAgICAgICAgICAgICAgIGJpbmRfZG4gLSB0ZW1wbGF0ZSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgRE4gdG8gYmluZCB0by5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgRE4gd2lsbCBiZSBjb25zdHJ1Y3RlZCBieSByZXBsYWNpbmcgYWxsICd7dXNlcl9uYW1lfScgc3Vic3RyaW5ncyBvZiB0aGUgdGVtcGxhdGUgd2l0aCB0aGUgYWN0dWFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBuYW1lIGR1cmluZyBlYWNoIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHQuXG4gICAgICAgICAgICAgICAgdXNlcl9kbl9kZXRlY3Rpb24gLSBzZWN0aW9uIHdpdGggTERBUCBzZWFyY2ggcGFyYW1ldGVycyBmb3IgZGV0ZWN0aW5nIHRoZSBhY3R1YWwgdXNlciBETiBvZiB0aGUgYm91bmQgdXNlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgbWFpbmx5IHVzZWQgaW4gc2VhcmNoIGZpbHRlcnMgZm9yIGZ1cnRoZXIgcm9sZSBtYXBwaW5nIHdoZW4gdGhlIHNlcnZlciBpcyBBY3RpdmUgRGlyZWN0b3J5LiBUaGVcbiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmcgdXNlciBETiB3aWxsIGJlIHVzZWQgd2hlbiByZXBsYWNpbmcgJ3t1c2VyX2RufScgc3Vic3RyaW5ncyB3aGVyZXZlciB0aGV5IGFyZSBhbGxvd2VkLiBCeSBkZWZhdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgRE4gaXMgc2V0IGVxdWFsIHRvIGJpbmQgRE4sIGJ1dCBvbmNlIHNlYXJjaCBpcyBwZXJmb3JtZWQsIGl0IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRvIHRoZSBhY3R1YWwgZGV0ZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIEROIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICBiYXNlX2RuIC0gdGVtcGxhdGUgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGJhc2UgRE4gZm9yIHRoZSBMREFQIHNlYXJjaC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIEROIHdpbGwgYmUgY29uc3RydWN0ZWQgYnkgcmVwbGFjaW5nIGFsbCAne3VzZXJfbmFtZX0nIGFuZCAne2JpbmRfZG59JyBzdWJzdHJpbmdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSB0ZW1wbGF0ZSB3aXRoIHRoZSBhY3R1YWwgdXNlciBuYW1lIGFuZCBiaW5kIEROIGR1cmluZyB0aGUgTERBUCBzZWFyY2guXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlIC0gc2NvcGUgb2YgdGhlIExEQVAgc2VhcmNoLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdGVkIHZhbHVlcyBhcmU6ICdiYXNlJywgJ29uZV9sZXZlbCcsICdjaGlsZHJlbicsICdzdWJ0cmVlJyAodGhlIGRlZmF1bHQpLlxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hfZmlsdGVyIC0gdGVtcGxhdGUgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHNlYXJjaCBmaWx0ZXIgZm9yIHRoZSBMREFQIHNlYXJjaC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIGZpbHRlciB3aWxsIGJlIGNvbnN0cnVjdGVkIGJ5IHJlcGxhY2luZyBhbGwgJ3t1c2VyX25hbWV9JywgJ3tiaW5kX2RufScsIGFuZCAne2Jhc2VfZG59J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdHJpbmdzIG9mIHRoZSB0ZW1wbGF0ZSB3aXRoIHRoZSBhY3R1YWwgdXNlciBuYW1lLCBiaW5kIEROLCBhbmQgYmFzZSBETiBkdXJpbmcgdGhlIExEQVAgc2VhcmNoLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUsIHRoYXQgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyBtdXN0IGJlIGVzY2FwZWQgcHJvcGVybHkgaW4gWE1MLlxuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb29sZG93biAtIGEgcGVyaW9kIG9mIHRpbWUsIGluIHNlY29uZHMsIGFmdGVyIGEgc3VjY2Vzc2Z1bCBiaW5kIGF0dGVtcHQsIGR1cmluZyB3aGljaCBhIHVzZXIgd2lsbCBiZSBhc3N1bWVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgc3VjY2Vzc2Z1bGx5IGF1dGhlbnRpY2F0ZWQgZm9yIGFsbCBjb25zZWN1dGl2ZSByZXF1ZXN0cyB3aXRob3V0IGNvbnRhY3RpbmcgdGhlIExEQVAgc2VydmVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeSAwICh0aGUgZGVmYXVsdCkgdG8gZGlzYWJsZSBjYWNoaW5nIGFuZCBmb3JjZSBjb250YWN0aW5nIHRoZSBMREFQIHNlcnZlciBmb3IgZWFjaCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuICAgICAgICAgICAgICAgIGVuYWJsZV90bHMgLSBmbGFnIHRvIHRyaWdnZXIgdXNlIG9mIHNlY3VyZSBjb25uZWN0aW9uIHRvIHRoZSBMREFQIHNlcnZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZnkgJ25vJyBmb3IgcGxhaW4gdGV4dCAobGRhcDovLykgcHJvdG9jb2wgKG5vdCByZWNvbW1lbmRlZCkuXG4gICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5ICd5ZXMnIGZvciBMREFQIG92ZXIgU1NML1RMUyAobGRhcHM6Ly8pIHByb3RvY29sIChyZWNvbW1lbmRlZCwgdGhlIGRlZmF1bHQpLlxuICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeSAnc3RhcnR0bHMnIGZvciBsZWdhY3kgU3RhcnRUTFMgcHJvdG9jb2wgKHBsYWluIHRleHQgKGxkYXA6Ly8pIHByb3RvY29sLCB1cGdyYWRlZCB0byBUTFMpLlxuICAgICAgICAgICAgICAgIHRsc19taW5pbXVtX3Byb3RvY29sX3ZlcnNpb24gLSB0aGUgbWluaW11bSBwcm90b2NvbCB2ZXJzaW9uIG9mIFNTTC9UTFMuXG4gICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRlZCB2YWx1ZXMgYXJlOiAnc3NsMicsICdzc2wzJywgJ3RsczEuMCcsICd0bHMxLjEnLCAndGxzMS4yJyAodGhlIGRlZmF1bHQpLlxuICAgICAgICAgICAgICAgIHRsc19yZXF1aXJlX2NlcnQgLSBTU0wvVExTIHBlZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGJlaGF2aW9yLlxuICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0ZWQgdmFsdWVzIGFyZTogJ25ldmVyJywgJ2FsbG93JywgJ3RyeScsICdkZW1hbmQnICh0aGUgZGVmYXVsdCkuXG4gICAgICAgICAgICAgICAgdGxzX2NlcnRfZmlsZSAtIHBhdGggdG8gY2VydGlmaWNhdGUgZmlsZS5cbiAgICAgICAgICAgICAgICB0bHNfa2V5X2ZpbGUgLSBwYXRoIHRvIGNlcnRpZmljYXRlIGtleSBmaWxlLlxuICAgICAgICAgICAgICAgIHRsc19jYV9jZXJ0X2ZpbGUgLSBwYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUuXG4gICAgICAgICAgICAgICAgdGxzX2NhX2NlcnRfZGlyIC0gcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgQ0EgY2VydGlmaWNhdGVzLlxuICAgICAgICAgICAgICAgIHRsc19jaXBoZXJfc3VpdGUgLSBhbGxvd2VkIGNpcGhlciBzdWl0ZSAoaW4gT3BlblNTTCBub3RhdGlvbikuXG4gICAgICAgICAgICAgRXhhbXBsZTpcbiAgICAgICAgICAgICAgICA8bXlfbGRhcF9zZXJ2ZXI+XG4gICAgICAgICAgICAgICAgICAgIDxob3N0PmxvY2FsaG9zdDwvaG9zdD5cbiAgICAgICAgICAgICAgICAgICAgPHBvcnQ+NjM2PC9wb3J0PlxuICAgICAgICAgICAgICAgICAgICA8YmluZF9kbj51aWQ9e3VzZXJfbmFtZX0sb3U9dXNlcnMsZGM9ZXhhbXBsZSxkYz1jb208L2JpbmRfZG4+XG4gICAgICAgICAgICAgICAgICAgIDx2ZXJpZmljYXRpb25fY29vbGRvd24+MzAwPC92ZXJpZmljYXRpb25fY29vbGRvd24+XG4gICAgICAgICAgICAgICAgICAgIDxlbmFibGVfdGxzPnllczwvZW5hYmxlX3Rscz5cbiAgICAgICAgICAgICAgICAgICAgPHRsc19taW5pbXVtX3Byb3RvY29sX3ZlcnNpb24+dGxzMS4yPC90bHNfbWluaW11bV9wcm90b2NvbF92ZXJzaW9uPlxuICAgICAgICAgICAgICAgICAgICA8dGxzX3JlcXVpcmVfY2VydD5kZW1hbmQ8L3Rsc19yZXF1aXJlX2NlcnQ+XG4gICAgICAgICAgICAgICAgICAgIDx0bHNfY2VydF9maWxlPi9wYXRoL3RvL3Rsc19jZXJ0X2ZpbGU8L3Rsc19jZXJ0X2ZpbGU+XG4gICAgICAgICAgICAgICAgICAgIDx0bHNfa2V5X2ZpbGU+L3BhdGgvdG8vdGxzX2tleV9maWxlPC90bHNfa2V5X2ZpbGU+XG4gICAgICAgICAgICAgICAgICAgIDx0bHNfY2FfY2VydF9maWxlPi9wYXRoL3RvL3Rsc19jYV9jZXJ0X2ZpbGU8L3Rsc19jYV9jZXJ0X2ZpbGU+XG4gICAgICAgICAgICAgICAgICAgIDx0bHNfY2FfY2VydF9kaXI+L3BhdGgvdG8vdGxzX2NhX2NlcnRfZGlyPC90bHNfY2FfY2VydF9kaXI+XG4gICAgICAgICAgICAgICAgICAgIDx0bHNfY2lwaGVyX3N1aXRlPkVDREhFLUVDRFNBLUFFUzI1Ni1HQ00tU0hBMzg0OkVDREhFLVJTQS1BRVMyNTYtR0NNLVNIQTM4NDpBRVMyNTYtR0NNLVNIQTM4NDwvdGxzX2NpcGhlcl9zdWl0ZT5cbiAgICAgICAgICAgICAgICA8L215X2xkYXBfc2VydmVyPlxuICAgICAgICAgICAgIEV4YW1wbGUgKHR5cGljYWwgQWN0aXZlIERpcmVjdG9yeSB3aXRoIGNvbmZpZ3VyZWQgdXNlciBETiBkZXRlY3Rpb24gZm9yIGZ1cnRoZXIgcm9sZSBtYXBwaW5nKTpcbiAgICAgICAgICAgICAgICA8bXlfYWRfc2VydmVyPlxuICAgICAgICAgICAgICAgICAgICA8aG9zdD5sb2NhbGhvc3Q8L2hvc3Q+XG4gICAgICAgICAgICAgICAgICAgIDxwb3J0PjM4OTwvcG9ydD5cbiAgICAgICAgICAgICAgICAgICAgPGJpbmRfZG4+RVhBTVBMRVxce3VzZXJfbmFtZX08L2JpbmRfZG4+XG4gICAgICAgICAgICAgICAgICAgIDx1c2VyX2RuX2RldGVjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiYXNlX2RuPkNOPVVzZXJzLERDPWV4YW1wbGUsREM9Y29tPC9iYXNlX2RuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlYXJjaF9maWx0ZXI+KCZhbXA7KG9iamVjdENsYXNzPXVzZXIpKHNBTUFjY291bnROYW1lPXt1c2VyX25hbWV9KSk8L3NlYXJjaF9maWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvdXNlcl9kbl9kZXRlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIDxlbmFibGVfdGxzPm5vPC9lbmFibGVfdGxzPlxuICAgICAgICAgICAgICAgIDwvbXlfYWRfc2VydmVyPlxuICAgICAgICAtLT5cbiAgICA8L2xkYXBfc2VydmVycz5cblxuICAgIDwhLS0gVG8gZW5hYmxlIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQgZm9yIEhUVFAgcmVxdWVzdHMgKEdTUy1TUE5FR08pLCBmb3IgdGhvc2UgdXNlcnMgd2hvIGFyZSBleHBsaWNpdGx5IGNvbmZpZ3VyZWRcbiAgICAgICAgICB0byBhdXRoZW50aWNhdGUgdmlhIEtlcmJlcm9zLCBkZWZpbmUgYSBzaW5nbGUgJ2tlcmJlcm9zJyBzZWN0aW9uIGhlcmUuXG4gICAgICAgICBQYXJhbWV0ZXJzOlxuICAgICAgICAgICAgcHJpbmNpcGFsIC0gY2Fub25pY2FsIHNlcnZpY2UgcHJpbmNpcGFsIG5hbWUsIHRoYXQgd2lsbCBiZSBhY3F1aXJlZCBhbmQgdXNlZCB3aGVuIGFjY2VwdGluZyBzZWN1cml0eSBjb250ZXh0cy5cbiAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwsIGlmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IHByaW5jaXBhbCB3aWxsIGJlIHVzZWQuXG4gICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbm5vdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCAncmVhbG0nIHBhcmFtZXRlci5cbiAgICAgICAgICAgIHJlYWxtIC0gYSByZWFsbSwgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVzdHJpY3QgYXV0aGVudGljYXRpb24gdG8gb25seSB0aG9zZSByZXF1ZXN0cyB3aG9zZSBpbml0aWF0b3IncyByZWFsbSBtYXRjaGVzIGl0LlxuICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCwgaWYgb21pdHRlZCwgbm8gYWRkaXRpb25hbCBmaWx0ZXJpbmcgYnkgcmVhbG0gd2lsbCBiZSBhcHBsaWVkLlxuICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW5ub3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggJ3ByaW5jaXBhbCcgcGFyYW1ldGVyLlxuICAgICAgICAgRXhhbXBsZTpcbiAgICAgICAgICAgIDxrZXJiZXJvcyAvPlxuICAgICAgICAgRXhhbXBsZTpcbiAgICAgICAgICAgIDxrZXJiZXJvcz5cbiAgICAgICAgICAgICAgICA8cHJpbmNpcGFsPkhUVFAvY2xpY2tob3VzZS5leGFtcGxlLmNvbUBFWEFNUExFLkNPTTwvcHJpbmNpcGFsPlxuICAgICAgICAgICAgPC9rZXJiZXJvcz5cbiAgICAgICAgIEV4YW1wbGU6XG4gICAgICAgICAgICA8a2VyYmVyb3M+XG4gICAgICAgICAgICAgICAgPHJlYWxtPkVYQU1QTEUuQ09NPC9yZWFsbT5cbiAgICAgICAgICAgIDwva2VyYmVyb3M+XG4gICAgLS0+XG5cbiAgICA8IS0tIFNvdXJjZXMgdG8gcmVhZCB1c2Vycywgcm9sZXMsIGFjY2VzcyByaWdodHMsIHByb2ZpbGVzIG9mIHNldHRpbmdzLCBxdW90YXMuIC0tPlxuICAgIDx1c2VyX2RpcmVjdG9yaWVzPlxuICAgICAgICA8dXNlcnNfeG1sPlxuICAgICAgICAgICAgPCEtLSBQYXRoIHRvIGNvbmZpZ3VyYXRpb24gZmlsZSB3aXRoIHByZWRlZmluZWQgdXNlcnMuIC0tPlxuICAgICAgICAgICAgPHBhdGg+dXNlcnMueG1sPC9wYXRoPlxuICAgICAgICA8L3VzZXJzX3htbD5cbiAgICAgICAgPGxvY2FsX2RpcmVjdG9yeT5cbiAgICAgICAgICAgIDwhLS0gUGF0aCB0byBmb2xkZXIgd2hlcmUgdXNlcnMgY3JlYXRlZCBieSBTUUwgY29tbWFuZHMgYXJlIHN0b3JlZC4gLS0+XG4gICAgICAgICAgICA8cGF0aD4vdmFyL2xpYi9jbGlja2hvdXNlL2FjY2Vzcy88L3BhdGg+XG4gICAgICAgIDwvbG9jYWxfZGlyZWN0b3J5PlxuXG4gICAgICAgIDwhLS0gVG8gYWRkIGFuIExEQVAgc2VydmVyIGFzIGEgcmVtb3RlIHVzZXIgZGlyZWN0b3J5IG9mIHVzZXJzIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGxvY2FsbHksIGRlZmluZSBhIHNpbmdsZSAnbGRhcCcgc2VjdGlvblxuICAgICAgICAgICAgICB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAgICAgICAgICAgICAgICBzZXJ2ZXIgLSBvbmUgb2YgTERBUCBzZXJ2ZXIgbmFtZXMgZGVmaW5lZCBpbiAnbGRhcF9zZXJ2ZXJzJyBjb25maWcgc2VjdGlvbiBhYm92ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBhbmQgY2Fubm90IGJlIGVtcHR5LlxuICAgICAgICAgICAgICAgIHJvbGVzIC0gc2VjdGlvbiB3aXRoIGEgbGlzdCBvZiBsb2NhbGx5IGRlZmluZWQgcm9sZXMgdGhhdCB3aWxsIGJlIGFzc2lnbmVkIHRvIGVhY2ggdXNlciByZXRyaWV2ZWQgZnJvbSB0aGUgTERBUCBzZXJ2ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICBJZiBubyByb2xlcyBhcmUgc3BlY2lmaWVkIGhlcmUgb3IgYXNzaWduZWQgZHVyaW5nIHJvbGUgbWFwcGluZyAoYmVsb3cpLCB1c2VyIHdpbGwgbm90IGJlIGFibGUgdG8gcGVyZm9ybSBhbnlcbiAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zIGFmdGVyIGF1dGhlbnRpY2F0aW9uLlxuICAgICAgICAgICAgICAgIHJvbGVfbWFwcGluZyAtIHNlY3Rpb24gd2l0aCBMREFQIHNlYXJjaCBwYXJhbWV0ZXJzIGFuZCBtYXBwaW5nIHJ1bGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBhIHVzZXIgYXV0aGVudGljYXRlcywgd2hpbGUgc3RpbGwgYm91bmQgdG8gTERBUCwgYW4gTERBUCBzZWFyY2ggaXMgcGVyZm9ybWVkIHVzaW5nIHNlYXJjaF9maWx0ZXIgYW5kIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyLiBGb3IgZWFjaCBlbnRyeSBmb3VuZCBkdXJpbmcgdGhhdCBzZWFyY2gsIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZSBpc1xuICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZC4gRm9yIGVhY2ggYXR0cmlidXRlIHZhbHVlIHRoYXQgaGFzIHRoZSBzcGVjaWZpZWQgcHJlZml4LCB0aGUgcHJlZml4IGlzIHJlbW92ZWQsIGFuZCB0aGUgcmVzdCBvZiB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBiZWNvbWVzIHRoZSBuYW1lIG9mIGEgbG9jYWwgcm9sZSBkZWZpbmVkIGluIENsaWNrSG91c2UsIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGJlIGNyZWF0ZWQgYmVmb3JlaGFuZCBieVxuICAgICAgICAgICAgICAgICAgICAgICAgIENSRUFURSBST0xFIGNvbW1hbmQuXG4gICAgICAgICAgICAgICAgICAgICAgICBUaGVyZSBjYW4gYmUgbXVsdGlwbGUgJ3JvbGVfbWFwcGluZycgc2VjdGlvbnMgZGVmaW5lZCBpbnNpZGUgdGhlIHNhbWUgJ2xkYXAnIHNlY3Rpb24uIEFsbCBvZiB0aGVtIHdpbGwgYmVcbiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWVkLlxuICAgICAgICAgICAgICAgICAgICBiYXNlX2RuIC0gdGVtcGxhdGUgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGJhc2UgRE4gZm9yIHRoZSBMREFQIHNlYXJjaC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIEROIHdpbGwgYmUgY29uc3RydWN0ZWQgYnkgcmVwbGFjaW5nIGFsbCAne3VzZXJfbmFtZX0nLCAne2JpbmRfZG59JywgYW5kICd7dXNlcl9kbn0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0cmluZ3Mgb2YgdGhlIHRlbXBsYXRlIHdpdGggdGhlIGFjdHVhbCB1c2VyIG5hbWUsIGJpbmQgRE4sIGFuZCB1c2VyIEROIGR1cmluZyBlYWNoIExEQVAgc2VhcmNoLlxuICAgICAgICAgICAgICAgICAgICBzY29wZSAtIHNjb3BlIG9mIHRoZSBMREFQIHNlYXJjaC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRlZCB2YWx1ZXMgYXJlOiAnYmFzZScsICdvbmVfbGV2ZWwnLCAnY2hpbGRyZW4nLCAnc3VidHJlZScgKHRoZSBkZWZhdWx0KS5cbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX2ZpbHRlciAtIHRlbXBsYXRlIHVzZWQgdG8gY29uc3RydWN0IHRoZSBzZWFyY2ggZmlsdGVyIGZvciB0aGUgTERBUCBzZWFyY2guXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdGluZyBmaWx0ZXIgd2lsbCBiZSBjb25zdHJ1Y3RlZCBieSByZXBsYWNpbmcgYWxsICd7dXNlcl9uYW1lfScsICd7YmluZF9kbn0nLCAne3VzZXJfZG59JywgYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7YmFzZV9kbn0nIHN1YnN0cmluZ3Mgb2YgdGhlIHRlbXBsYXRlIHdpdGggdGhlIGFjdHVhbCB1c2VyIG5hbWUsIGJpbmQgRE4sIHVzZXIgRE4sIGFuZCBiYXNlIEROIGR1cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoIExEQVAgc2VhcmNoLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUsIHRoYXQgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyBtdXN0IGJlIGVzY2FwZWQgcHJvcGVybHkgaW4gWE1MLlxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgLSBhdHRyaWJ1dGUgbmFtZSB3aG9zZSB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZCBieSB0aGUgTERBUCBzZWFyY2guICdjbicsIGJ5IGRlZmF1bHQuXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCAtIHByZWZpeCwgdGhhdCB3aWxsIGJlIGV4cGVjdGVkIHRvIGJlIGluIGZyb250IG9mIGVhY2ggc3RyaW5nIGluIHRoZSBvcmlnaW5hbCBsaXN0IG9mIHN0cmluZ3MgcmV0dXJuZWQgYnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIExEQVAgc2VhcmNoLiBQcmVmaXggd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIG9yaWdpbmFsIHN0cmluZ3MgYW5kIHJlc3VsdGluZyBzdHJpbmdzIHdpbGwgYmUgdHJlYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBsb2NhbCByb2xlIG5hbWVzLiBFbXB0eSwgYnkgZGVmYXVsdC5cbiAgICAgICAgICAgICBFeGFtcGxlOlxuICAgICAgICAgICAgICAgIDxsZGFwPlxuICAgICAgICAgICAgICAgICAgICA8c2VydmVyPm15X2xkYXBfc2VydmVyPC9zZXJ2ZXI+XG4gICAgICAgICAgICAgICAgICAgIDxyb2xlcz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxteV9sb2NhbF9yb2xlMSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG15X2xvY2FsX3JvbGUyIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvcm9sZXM+XG4gICAgICAgICAgICAgICAgICAgIDxyb2xlX21hcHBpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YmFzZV9kbj5vdT1ncm91cHMsZGM9ZXhhbXBsZSxkYz1jb208L2Jhc2VfZG4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2NvcGU+c3VidHJlZTwvc2NvcGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VhcmNoX2ZpbHRlcj4oJmFtcDsob2JqZWN0Q2xhc3M9Z3JvdXBPZk5hbWVzKShtZW1iZXI9e2JpbmRfZG59KSk8L3NlYXJjaF9maWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlPmNuPC9hdHRyaWJ1dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlZml4PmNsaWNraG91c2VfPC9wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgIDwvcm9sZV9tYXBwaW5nPlxuICAgICAgICAgICAgICAgIDwvbGRhcD5cbiAgICAgICAgICAgICBFeGFtcGxlICh0eXBpY2FsIEFjdGl2ZSBEaXJlY3Rvcnkgd2l0aCByb2xlIG1hcHBpbmcgdGhhdCByZWxpZXMgb24gdGhlIGRldGVjdGVkIHVzZXIgRE4pOlxuICAgICAgICAgICAgICAgIDxsZGFwPlxuICAgICAgICAgICAgICAgICAgICA8c2VydmVyPm15X2FkX3NlcnZlcjwvc2VydmVyPlxuICAgICAgICAgICAgICAgICAgICA8cm9sZV9tYXBwaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJhc2VfZG4+Q049VXNlcnMsREM9ZXhhbXBsZSxEQz1jb208L2Jhc2VfZG4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlPkNOPC9hdHRyaWJ1dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2NvcGU+c3VidHJlZTwvc2NvcGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VhcmNoX2ZpbHRlcj4oJmFtcDsob2JqZWN0Q2xhc3M9Z3JvdXApKG1lbWJlcj17dXNlcl9kbn0pKTwvc2VhcmNoX2ZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmVmaXg+Y2xpY2tob3VzZV88L3ByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgPC9yb2xlX21hcHBpbmc+XG4gICAgICAgICAgICAgICAgPC9sZGFwPlxuICAgICAgICAtLT5cbiAgICA8L3VzZXJfZGlyZWN0b3JpZXM+XG5cbiAgICA8IS0tIERlZmF1bHQgcHJvZmlsZSBvZiBzZXR0aW5ncy4gLS0+XG4gICAgPGRlZmF1bHRfcHJvZmlsZT5kZWZhdWx0PC9kZWZhdWx0X3Byb2ZpbGU+XG5cbiAgICA8IS0tIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHByZWZpeGVzIGZvciB1c2VyLWRlZmluZWQgc2V0dGluZ3MuIC0tPlxuICAgIDxjdXN0b21fc2V0dGluZ3NfcHJlZml4ZXM+PC9jdXN0b21fc2V0dGluZ3NfcHJlZml4ZXM+XG5cbiAgICA8IS0tIFN5c3RlbSBwcm9maWxlIG9mIHNldHRpbmdzLiBUaGlzIHNldHRpbmdzIGFyZSB1c2VkIGJ5IGludGVybmFsIHByb2Nlc3NlcyAoRGlzdHJpYnV0ZWQgRERMIHdvcmtlciBhbmQgc28gb24pLiAtLT5cbiAgICA8IS0tIDxzeXN0ZW1fcHJvZmlsZT5kZWZhdWx0PC9zeXN0ZW1fcHJvZmlsZT4gLS0+XG5cbiAgICA8IS0tIEJ1ZmZlciBwcm9maWxlIG9mIHNldHRpbmdzLlxuICAgICAgICAgVGhpcyBzZXR0aW5ncyBhcmUgdXNlZCBieSBCdWZmZXIgc3RvcmFnZSB0byBmbHVzaCBkYXRhIHRvIHRoZSB1bmRlcmx5aW5nIHRhYmxlLlxuICAgICAgICAgRGVmYXVsdDogdXNlZCBmcm9tIHN5c3RlbV9wcm9maWxlIGRpcmVjdGl2ZS5cbiAgICAtLT5cbiAgICA8IS0tIDxidWZmZXJfcHJvZmlsZT5kZWZhdWx0PC9idWZmZXJfcHJvZmlsZT4gLS0+XG5cbiAgICA8IS0tIERlZmF1bHQgZGF0YWJhc2UuIC0tPlxuICAgIDxkZWZhdWx0X2RhdGFiYXNlPmRlZmF1bHQ8L2RlZmF1bHRfZGF0YWJhc2U+XG5cbiAgICA8IS0tIFNlcnZlciB0aW1lIHpvbmUgY291bGQgYmUgc2V0IGhlcmUuXG5cbiAgICAgICAgIFRpbWUgem9uZSBpcyB1c2VkIHdoZW4gY29udmVydGluZyBiZXR3ZWVuIFN0cmluZyBhbmQgRGF0ZVRpbWUgdHlwZXMsXG4gICAgICAgICAgd2hlbiBwcmludGluZyBEYXRlVGltZSBpbiB0ZXh0IGZvcm1hdHMgYW5kIHBhcnNpbmcgRGF0ZVRpbWUgZnJvbSB0ZXh0LFxuICAgICAgICAgIGl0IGlzIHVzZWQgaW4gZGF0ZSBhbmQgdGltZSByZWxhdGVkIGZ1bmN0aW9ucywgaWYgc3BlY2lmaWMgdGltZSB6b25lIHdhcyBub3QgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LlxuXG4gICAgICAgICBUaW1lIHpvbmUgaXMgc3BlY2lmaWVkIGFzIGlkZW50aWZpZXIgZnJvbSBJQU5BIHRpbWUgem9uZSBkYXRhYmFzZSwgbGlrZSBVVEMgb3IgQWZyaWNhL0FiaWRqYW4uXG4gICAgICAgICBJZiBub3Qgc3BlY2lmaWVkLCBzeXN0ZW0gdGltZSB6b25lIGF0IHNlcnZlciBzdGFydHVwIGlzIHVzZWQuXG5cbiAgICAgICAgIFBsZWFzZSBub3RlLCB0aGF0IHNlcnZlciBjb3VsZCBkaXNwbGF5IHRpbWUgem9uZSBhbGlhcyBpbnN0ZWFkIG9mIHNwZWNpZmllZCBuYW1lLlxuICAgICAgICAgRXhhbXBsZTogWnVsdSBpcyBhbiBhbGlhcyBmb3IgVVRDLlxuICAgIC0tPlxuICAgIDwhLS0gPHRpbWV6b25lPlVUQzwvdGltZXpvbmU+IC0tPlxuXG4gICAgPCEtLSBZb3UgY2FuIHNwZWNpZnkgdW1hc2sgaGVyZSAoc2VlIFwibWFuIHVtYXNrXCIpLiBTZXJ2ZXIgd2lsbCBhcHBseSBpdCBvbiBzdGFydHVwLlxuICAgICAgICAgTnVtYmVyIGlzIGFsd2F5cyBwYXJzZWQgYXMgb2N0YWwuIERlZmF1bHQgdW1hc2sgaXMgMDI3IChvdGhlciB1c2VycyBjYW5ub3QgcmVhZCBsb2dzLCBkYXRhIGZpbGVzLCBldGM7IGdyb3VwIGNhbiBvbmx5IHJlYWQpLlxuICAgIC0tPlxuICAgIDwhLS0gPHVtYXNrPjAyMjwvdW1hc2s+IC0tPlxuXG4gICAgPCEtLSBQZXJmb3JtIG1sb2NrYWxsIGFmdGVyIHN0YXJ0dXAgdG8gbG93ZXIgZmlyc3QgcXVlcmllcyBsYXRlbmN5XG4gICAgICAgICAgYW5kIHRvIHByZXZlbnQgY2xpY2tob3VzZSBleGVjdXRhYmxlIGZyb20gYmVpbmcgcGFnZWQgb3V0IHVuZGVyIGhpZ2ggSU8gbG9hZC5cbiAgICAgICAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGlzIHJlY29tbWVuZGVkIGJ1dCB3aWxsIGxlYWQgdG8gaW5jcmVhc2VkIHN0YXJ0dXAgdGltZSBmb3IgdXAgdG8gYSBmZXcgc2Vjb25kcy5cbiAgICAtLT5cbiAgICA8bWxvY2tfZXhlY3V0YWJsZT50cnVlPC9tbG9ja19leGVjdXRhYmxlPlxuXG4gICAgPCEtLSBSZWFsbG9jYXRlIG1lbW9yeSBmb3IgbWFjaGluZSBjb2RlIChcInRleHRcIikgdXNpbmcgaHVnZSBwYWdlcy4gSGlnaGx5IGV4cGVyaW1lbnRhbC4gLS0+XG4gICAgPHJlbWFwX2V4ZWN1dGFibGU+ZmFsc2U8L3JlbWFwX2V4ZWN1dGFibGU+XG5cbiAgICA8IVtDREFUQVtcbiAgICAgICAgIFVuY29tbWVudCBiZWxvdyBpbiBvcmRlciB0byB1c2UgSkRCQyB0YWJsZSBlbmdpbmUgYW5kIGZ1bmN0aW9uLlxuXG4gICAgICAgICBUbyBpbnN0YWxsIGFuZCBydW4gSkRCQyBicmlkZ2UgaW4gYmFja2dyb3VuZDpcbiAgICAgICAgICogW0RlYmlhbi9VYnVudHVdXG4gICAgICAgICAgIGV4cG9ydCBNVk5fVVJMPWh0dHBzOi8vcmVwbzEubWF2ZW4ub3JnL21hdmVuMi9ydS95YW5kZXgvY2xpY2tob3VzZS9jbGlja2hvdXNlLWpkYmMtYnJpZGdlXG4gICAgICAgICAgIGV4cG9ydCBQS0dfVkVSPSQoY3VybCAtc0wgJE1WTl9VUkwvbWF2ZW4tbWV0YWRhdGEueG1sIHwgZ3JlcCAnPHJlbGVhc2U+JyB8IHNlZCAtZSAnc3wuKj5cXCguKlxcKTwuKnxcXDF8JylcbiAgICAgICAgICAgd2dldCBodHRwczovL2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWpkYmMtYnJpZGdlL3JlbGVhc2VzL2Rvd25sb2FkL3YkUEtHX1ZFUi9jbGlja2hvdXNlLWpkYmMtYnJpZGdlXyRQS0dfVkVSLTFfYWxsLmRlYlxuICAgICAgICAgICBhcHQgaW5zdGFsbCAtLW5vLWluc3RhbGwtcmVjb21tZW5kcyAtZiAuL2NsaWNraG91c2UtamRiYy1icmlkZ2VfJFBLR19WRVItMV9hbGwuZGViXG4gICAgICAgICAgIGNsaWNraG91c2UtamRiYy1icmlkZ2UgJlxuXG4gICAgICAgICAqIFtDZW50T1MvUkhFTF1cbiAgICAgICAgICAgZXhwb3J0IE1WTl9VUkw9aHR0cHM6Ly9yZXBvMS5tYXZlbi5vcmcvbWF2ZW4yL3J1L3lhbmRleC9jbGlja2hvdXNlL2NsaWNraG91c2UtamRiYy1icmlkZ2VcbiAgICAgICAgICAgZXhwb3J0IFBLR19WRVI9JChjdXJsIC1zTCAkTVZOX1VSTC9tYXZlbi1tZXRhZGF0YS54bWwgfCBncmVwICc8cmVsZWFzZT4nIHwgc2VkIC1lICdzfC4qPlxcKC4qXFwpPC4qfFxcMXwnKVxuICAgICAgICAgICB3Z2V0IGh0dHBzOi8vZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtamRiYy1icmlkZ2UvcmVsZWFzZXMvZG93bmxvYWQvdiRQS0dfVkVSL2NsaWNraG91c2UtamRiYy1icmlkZ2UtJFBLR19WRVItMS5ub2FyY2gucnBtXG4gICAgICAgICAgIHl1bSBsb2NhbGluc3RhbGwgLXkgY2xpY2tob3VzZS1qZGJjLWJyaWRnZS0kUEtHX1ZFUi0xLm5vYXJjaC5ycG1cbiAgICAgICAgICAgY2xpY2tob3VzZS1qZGJjLWJyaWRnZSAmXG5cbiAgICAgICAgIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS9jbGlja2hvdXNlLWpkYmMtYnJpZGdlI3VzYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgIF1dPlxuICAgIDwhLS1cbiAgICA8amRiY19icmlkZ2U+XG4gICAgICAgIDxob3N0PjEyNy4wLjAuMTwvaG9zdD5cbiAgICAgICAgPHBvcnQ+OTAxOTwvcG9ydD5cbiAgICA8L2pkYmNfYnJpZGdlPlxuICAgIC0tPlxuXG4gICAgPCEtLSBUaGUgbGlzdCBvZiBob3N0cyBhbGxvd2VkIHRvIHVzZSBpbiBVUkwtcmVsYXRlZCBzdG9yYWdlIGVuZ2luZXMgYW5kIHRhYmxlIGZ1bmN0aW9ucy5cbiAgICAgICAgSWYgdGhpcyBzZWN0aW9uIGlzIG5vdCBwcmVzZW50IGluIGNvbmZpZ3VyYXRpb24sIGFsbCBob3N0cyBhcmUgYWxsb3dlZC5cbiAgICAtLT5cbiAgICA8IS0tPHJlbW90ZV91cmxfYWxsb3dfaG9zdHM+LS0+XG4gICAgICAgIDwhLS0gSG9zdCBzaG91bGQgYmUgc3BlY2lmaWVkIGV4YWN0bHkgYXMgaW4gVVJMLiBUaGUgbmFtZSBpcyBjaGVja2VkIGJlZm9yZSBETlMgcmVzb2x1dGlvbi5cbiAgICAgICAgICAgIEV4YW1wbGU6IFwiY2xpY2tob3VzZS5jb21cIiwgXCJjbGlja2hvdXNlLmNvbS5cIiBhbmQgXCJ3d3cuY2xpY2tob3VzZS5jb21cIiBhcmUgZGlmZmVyZW50IGhvc3RzLlxuICAgICAgICAgICAgICAgICAgICBJZiBwb3J0IGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIFVSTCwgdGhlIGhvc3Q6cG9ydCBpcyBjaGVja2VkIGFzIGEgd2hvbGUuXG4gICAgICAgICAgICAgICAgICAgIElmIGhvc3Qgc3BlY2lmaWVkIGhlcmUgd2l0aG91dCBwb3J0LCBhbnkgcG9ydCB3aXRoIHRoaXMgaG9zdCBhbGxvd2VkLlxuICAgICAgICAgICAgICAgICAgICBcImNsaWNraG91c2UuY29tXCIgLT4gXCJjbGlja2hvdXNlLmNvbTo0NDNcIiwgXCJjbGlja2hvdXNlLmNvbTo4MFwiIGV0Yy4gaXMgYWxsb3dlZCwgYnV0IFwiY2xpY2tob3VzZS5jb206ODBcIiAtPiBvbmx5IFwiY2xpY2tob3VzZS5jb206ODBcIiBpcyBhbGxvd2VkLlxuICAgICAgICAgICAgSWYgdGhlIGhvc3QgaXMgc3BlY2lmaWVkIGFzIElQIGFkZHJlc3MsIGl0IGlzIGNoZWNrZWQgYXMgc3BlY2lmaWVkIGluIFVSTC4gRXhhbXBsZTogXCJbMmEwMjo2Yjg6YTo6YV1cIi5cbiAgICAgICAgICAgIElmIHRoZXJlIGFyZSByZWRpcmVjdHMgYW5kIHN1cHBvcnQgZm9yIHJlZGlyZWN0cyBpcyBlbmFibGVkLCBldmVyeSByZWRpcmVjdCAodGhlIExvY2F0aW9uIGZpZWxkKSBpcyBjaGVja2VkLlxuICAgICAgICAgICAgSG9zdCBzaG91bGQgYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBob3N0IHhtbCB0YWc6XG4gICAgICAgICAgICAgICAgICAgIDxob3N0PmNsaWNraG91c2UuY29tPC9ob3N0PlxuICAgICAgICAtLT5cblxuICAgICAgICA8IS0tIFJlZ3VsYXIgZXhwcmVzc2lvbiBjYW4gYmUgc3BlY2lmaWVkLiBSRTIgZW5naW5lIGlzIHVzZWQgZm9yIHJlZ2V4cHMuXG4gICAgICAgICAgICBSZWdleHBzIGFyZSBub3QgYWxpZ25lZDogZG9uJ3QgZm9yZ2V0IHRvIGFkZCBeIGFuZCAkLiBBbHNvIGRvbid0IGZvcmdldCB0byBlc2NhcGUgZG90ICguKSBtZXRhY2hhcmFjdGVyXG4gICAgICAgICAgICAoZm9yZ2V0dGluZyB0byBkbyBzbyBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgZXJyb3IpLlxuICAgICAgICAtLT5cbiAgICA8IS0tPC9yZW1vdGVfdXJsX2FsbG93X2hvc3RzPi0tPlxuXG4gICAgPCEtLSBJZiBlbGVtZW50IGhhcyAnaW5jbCcgYXR0cmlidXRlLCB0aGVuIGZvciBpdCdzIHZhbHVlIHdpbGwgYmUgdXNlZCBjb3JyZXNwb25kaW5nIHN1YnN0aXR1dGlvbiBmcm9tIGFub3RoZXIgZmlsZS5cbiAgICAgICAgIEJ5IGRlZmF1bHQsIHBhdGggdG8gZmlsZSB3aXRoIHN1YnN0aXR1dGlvbnMgaXMgL2V0Yy9tZXRyaWthLnhtbC4gSXQgY291bGQgYmUgY2hhbmdlZCBpbiBjb25maWcgaW4gJ2luY2x1ZGVfZnJvbScgZWxlbWVudC5cbiAgICAgICAgIFZhbHVlcyBmb3Igc3Vic3RpdHV0aW9ucyBhcmUgc3BlY2lmaWVkIGluIC9jbGlja2hvdXNlL25hbWVfb2Zfc3Vic3RpdHV0aW9uIGVsZW1lbnRzIGluIHRoYXQgZmlsZS5cbiAgICAgIC0tPlxuXG4gICAgPCEtLSBTdWJzdGl0dXRpb25zIGZvciBwYXJhbWV0ZXJzIG9mIHJlcGxpY2F0ZWQgdGFibGVzLlxuICAgICAgICAgIE9wdGlvbmFsLiBJZiB5b3UgZG9uJ3QgdXNlIHJlcGxpY2F0ZWQgdGFibGVzLCB5b3UgY291bGQgb21pdCB0aGF0LlxuXG4gICAgICAgICBTZWUgaHR0cHM6Ly9jbGlja2hvdXNlLmNvbS9kb2NzL2VuL2VuZ2luZXMvdGFibGUtZW5naW5lcy9tZXJnZXRyZWUtZmFtaWx5L3JlcGxpY2F0aW9uLyNjcmVhdGluZy1yZXBsaWNhdGVkLXRhYmxlc1xuICAgICAgLS0+XG5cbiAgICA8bWFjcm9zPlxuICAgICAgICA8c2hhcmQ+MDE8L3NoYXJkPlxuICAgICAgICA8cmVwbGljYT5leGFtcGxlMDEtMDEtMTwvcmVwbGljYT5cbiAgICA8L21hY3Jvcz5cblxuXG5cbiAgICA8IS0tIFJlbG9hZGluZyBpbnRlcnZhbCBmb3IgZW1iZWRkZWQgZGljdGlvbmFyaWVzLCBpbiBzZWNvbmRzLiBEZWZhdWx0OiAzNjAwLiAtLT5cbiAgICA8YnVpbHRpbl9kaWN0aW9uYXJpZXNfcmVsb2FkX2ludGVydmFsPjM2MDA8L2J1aWx0aW5fZGljdGlvbmFyaWVzX3JlbG9hZF9pbnRlcnZhbD5cblxuXG4gICAgPCEtLSBNYXhpbXVtIHNlc3Npb24gdGltZW91dCwgaW4gc2Vjb25kcy4gRGVmYXVsdDogMzYwMC4gLS0+XG4gICAgPG1heF9zZXNzaW9uX3RpbWVvdXQ+MzYwMDwvbWF4X3Nlc3Npb25fdGltZW91dD5cblxuICAgIDwhLS0gRGVmYXVsdCBzZXNzaW9uIHRpbWVvdXQsIGluIHNlY29uZHMuIERlZmF1bHQ6IDYwLiAtLT5cbiAgICA8ZGVmYXVsdF9zZXNzaW9uX3RpbWVvdXQ+NjA8L2RlZmF1bHRfc2Vzc2lvbl90aW1lb3V0PlxuXG4gICAgPCEtLSBTZW5kaW5nIGRhdGEgdG8gR3JhcGhpdGUgZm9yIG1vbml0b3JpbmcuIFNldmVyYWwgc2VjdGlvbnMgY2FuIGJlIGRlZmluZWQuIC0tPlxuICAgIDwhLS1cbiAgICAgICAgaW50ZXJ2YWwgLSBzZW5kIGV2ZXJ5IFggc2Vjb25kXG4gICAgICAgIHJvb3RfcGF0aCAtIHByZWZpeCBmb3Iga2V5c1xuICAgICAgICBob3N0bmFtZV9pbl9wYXRoIC0gYXBwZW5kIGhvc3RuYW1lIHRvIHJvb3RfcGF0aCAoZGVmYXVsdCA9IHRydWUpXG4gICAgICAgIG1ldHJpY3MgLSBzZW5kIGRhdGEgZnJvbSB0YWJsZSBzeXN0ZW0ubWV0cmljc1xuICAgICAgICBldmVudHMgLSBzZW5kIGRhdGEgZnJvbSB0YWJsZSBzeXN0ZW0uZXZlbnRzXG4gICAgICAgIGFzeW5jaHJvbm91c19tZXRyaWNzIC0gc2VuZCBkYXRhIGZyb20gdGFibGUgc3lzdGVtLmFzeW5jaHJvbm91c19tZXRyaWNzXG4gICAgLS0+XG4gICAgPCEtLVxuICAgIDxncmFwaGl0ZT5cbiAgICAgICAgPGhvc3Q+bG9jYWxob3N0PC9ob3N0PlxuICAgICAgICA8cG9ydD40MjAwMDwvcG9ydD5cbiAgICAgICAgPHRpbWVvdXQ+MC4xPC90aW1lb3V0PlxuICAgICAgICA8aW50ZXJ2YWw+NjA8L2ludGVydmFsPlxuICAgICAgICA8cm9vdF9wYXRoPm9uZV9taW48L3Jvb3RfcGF0aD5cbiAgICAgICAgPGhvc3RuYW1lX2luX3BhdGg+dHJ1ZTwvaG9zdG5hbWVfaW5fcGF0aD5cblxuICAgICAgICA8bWV0cmljcz50cnVlPC9tZXRyaWNzPlxuICAgICAgICA8ZXZlbnRzPnRydWU8L2V2ZW50cz5cbiAgICAgICAgPGV2ZW50c19jdW11bGF0aXZlPmZhbHNlPC9ldmVudHNfY3VtdWxhdGl2ZT5cbiAgICAgICAgPGFzeW5jaHJvbm91c19tZXRyaWNzPnRydWU8L2FzeW5jaHJvbm91c19tZXRyaWNzPlxuICAgIDwvZ3JhcGhpdGU+XG4gICAgPGdyYXBoaXRlPlxuICAgICAgICA8aG9zdD5sb2NhbGhvc3Q8L2hvc3Q+XG4gICAgICAgIDxwb3J0PjQyMDAwPC9wb3J0PlxuICAgICAgICA8dGltZW91dD4wLjE8L3RpbWVvdXQ+XG4gICAgICAgIDxpbnRlcnZhbD4xPC9pbnRlcnZhbD5cbiAgICAgICAgPHJvb3RfcGF0aD5vbmVfc2VjPC9yb290X3BhdGg+XG5cbiAgICAgICAgPG1ldHJpY3M+dHJ1ZTwvbWV0cmljcz5cbiAgICAgICAgPGV2ZW50cz50cnVlPC9ldmVudHM+XG4gICAgICAgIDxldmVudHNfY3VtdWxhdGl2ZT5mYWxzZTwvZXZlbnRzX2N1bXVsYXRpdmU+XG4gICAgICAgIDxhc3luY2hyb25vdXNfbWV0cmljcz5mYWxzZTwvYXN5bmNocm9ub3VzX21ldHJpY3M+XG4gICAgPC9ncmFwaGl0ZT5cbiAgICAtLT5cblxuICAgIDwhLS0gU2VydmUgZW5kcG9pbnQgZm9yIFByb21ldGhldXMgbW9uaXRvcmluZy4gLS0+XG4gICAgPCEtLVxuICAgICAgICBlbmRwb2ludCAtIG1lcnRpY3MgcGF0aCAocmVsYXRpdmUgdG8gcm9vdCwgc3RhdHJpbmcgd2l0aCBcIi9cIilcbiAgICAgICAgcG9ydCAtIHBvcnQgdG8gc2V0dXAgc2VydmVyLiBJZiBub3QgZGVmaW5lZCBvciAwIHRoYW4gaHR0cF9wb3J0IHVzZWRcbiAgICAgICAgbWV0cmljcyAtIHNlbmQgZGF0YSBmcm9tIHRhYmxlIHN5c3RlbS5tZXRyaWNzXG4gICAgICAgIGV2ZW50cyAtIHNlbmQgZGF0YSBmcm9tIHRhYmxlIHN5c3RlbS5ldmVudHNcbiAgICAgICAgYXN5bmNocm9ub3VzX21ldHJpY3MgLSBzZW5kIGRhdGEgZnJvbSB0YWJsZSBzeXN0ZW0uYXN5bmNocm9ub3VzX21ldHJpY3NcbiAgICAgICAgc3RhdHVzX2luZm8gLSBzZW5kIGRhdGEgZnJvbSBkaWZmZXJlbnQgY29tcG9uZW50IGZyb20gQ0gsIGV4OiBEaWN0aW9uYXJpZXMgc3RhdHVzXG4gICAgLS0+XG5cbiAgICA8cHJvbWV0aGV1cz5cbiAgICAgICAgPGVuZHBvaW50Pi9tZXRyaWNzPC9lbmRwb2ludD5cbiAgICAgICAgPHBvcnQ+OTM2MzwvcG9ydD5cblxuICAgICAgICA8bWV0cmljcz50cnVlPC9tZXRyaWNzPlxuICAgICAgICA8ZXZlbnRzPnRydWU8L2V2ZW50cz5cbiAgICAgICAgPGFzeW5jaHJvbm91c19tZXRyaWNzPnRydWU8L2FzeW5jaHJvbm91c19tZXRyaWNzPlxuICAgICAgICA8c3RhdHVzX2luZm8+dHJ1ZTwvc3RhdHVzX2luZm8+XG4gICAgPC9wcm9tZXRoZXVzPlxuXG4gICAgPCEtLSBRdWVyeSBsb2cuIFVzZWQgb25seSBmb3IgcXVlcmllcyB3aXRoIHNldHRpbmcgbG9nX3F1ZXJpZXMgPSAxLiAtLT5cbiAgICA8cXVlcnlfbG9nPlxuICAgICAgICA8IS0tIFdoYXQgdGFibGUgdG8gaW5zZXJ0IGRhdGEuIElmIHRhYmxlIGlzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgICAgICAgICAgIFdoZW4gcXVlcnkgbG9nIHN0cnVjdHVyZSBpcyBjaGFuZ2VkIGFmdGVyIHN5c3RlbSB1cGRhdGUsXG4gICAgICAgICAgICAgIHRoZW4gb2xkIHRhYmxlIHdpbGwgYmUgcmVuYW1lZCBhbmQgbmV3IHRhYmxlIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgICAgICAtLT5cbiAgICAgICAgPGRhdGFiYXNlPnN5c3RlbTwvZGF0YWJhc2U+XG4gICAgICAgIDx0YWJsZT5xdWVyeV9sb2c8L3RhYmxlPlxuICAgICAgICA8IS0tXG4gICAgICAgICAgICBQQVJUSVRJT04gQlkgZXhwcjogaHR0cHM6Ly9jbGlja2hvdXNlLmNvbS9kb2NzL2VuL3RhYmxlX2VuZ2luZXMvbWVyZ2V0cmVlLWZhbWlseS9jdXN0b21fcGFydGl0aW9uaW5nX2tleS9cbiAgICAgICAgICAgIEV4YW1wbGU6XG4gICAgICAgICAgICAgICAgZXZlbnRfZGF0ZVxuICAgICAgICAgICAgICAgIHRvTW9uZGF5KGV2ZW50X2RhdGUpXG4gICAgICAgICAgICAgICAgdG9ZWVlZTU0oZXZlbnRfZGF0ZSlcbiAgICAgICAgICAgICAgICB0b1N0YXJ0T2ZIb3VyKGV2ZW50X3RpbWUpXG4gICAgICAgIC0tPlxuICAgICAgICA8cGFydGl0aW9uX2J5PnRvWVlZWU1NKGV2ZW50X2RhdGUpPC9wYXJ0aXRpb25fYnk+XG4gICAgICAgIDwhLS1cbiAgICAgICAgICAgIFRhYmxlIFRUTCBzcGVjaWZpY2F0aW9uOiBodHRwczovL2NsaWNraG91c2UuY29tL2RvY3MvZW4vZW5naW5lcy90YWJsZS1lbmdpbmVzL21lcmdldHJlZS1mYW1pbHkvbWVyZ2V0cmVlLyNtZXJnZXRyZWUtdGFibGUtdHRsXG4gICAgICAgICAgICBFeGFtcGxlOlxuICAgICAgICAgICAgICAgIGV2ZW50X2RhdGUgKyBJTlRFUlZBTCAxIFdFRUtcbiAgICAgICAgICAgICAgICBldmVudF9kYXRlICsgSU5URVJWQUwgNyBEQVkgREVMRVRFXG4gICAgICAgICAgICAgICAgZXZlbnRfZGF0ZSArIElOVEVSVkFMIDIgV0VFSyBUTyBESVNLICdiYmInXG5cbiAgICAgICAgPHR0bD5ldmVudF9kYXRlICsgSU5URVJWQUwgMzAgREFZIERFTEVURTwvdHRsPlxuICAgICAgICAtLT5cblxuICAgICAgICA8IS0tIEluc3RlYWQgb2YgcGFydGl0aW9uX2J5LCB5b3UgY2FuIHByb3ZpZGUgZnVsbCBlbmdpbmUgZXhwcmVzc2lvbiAoc3RhcnRpbmcgd2l0aCBFTkdJTkUgPSApIHdpdGggcGFyYW1ldGVycyxcbiAgICAgICAgICAgICBFeGFtcGxlOiA8ZW5naW5lPkVOR0lORSA9IE1lcmdlVHJlZSBQQVJUSVRJT04gQlkgdG9ZWVlZTU0oZXZlbnRfZGF0ZSkgT1JERVIgQlkgKGV2ZW50X2RhdGUsIGV2ZW50X3RpbWUpIFNFVFRJTkdTIGluZGV4X2dyYW51bGFyaXR5ID0gMTAyNDwvZW5naW5lPlxuICAgICAgICAgIC0tPlxuXG4gICAgICAgIDwhLS0gSW50ZXJ2YWwgb2YgZmx1c2hpbmcgZGF0YS4gLS0+XG4gICAgICAgIDxmbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+NzUwMDwvZmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPlxuICAgIDwvcXVlcnlfbG9nPlxuXG4gICAgPCEtLSBUcmFjZSBsb2cuIFN0b3JlcyBzdGFjayB0cmFjZXMgY29sbGVjdGVkIGJ5IHF1ZXJ5IHByb2ZpbGVycy5cbiAgICAgICAgIFNlZSBxdWVyeV9wcm9maWxlcl9yZWFsX3RpbWVfcGVyaW9kX25zIGFuZCBxdWVyeV9wcm9maWxlcl9jcHVfdGltZV9wZXJpb2RfbnMgc2V0dGluZ3MuIC0tPlxuICAgIDx0cmFjZV9sb2c+XG4gICAgICAgIDxkYXRhYmFzZT5zeXN0ZW08L2RhdGFiYXNlPlxuICAgICAgICA8dGFibGU+dHJhY2VfbG9nPC90YWJsZT5cblxuICAgICAgICA8cGFydGl0aW9uX2J5PnRvWVlZWU1NKGV2ZW50X2RhdGUpPC9wYXJ0aXRpb25fYnk+XG4gICAgICAgIDxmbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+NzUwMDwvZmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPlxuICAgIDwvdHJhY2VfbG9nPlxuXG4gICAgPCEtLSBRdWVyeSB0aHJlYWQgbG9nLiBIYXMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRocmVhZHMgcGFydGljaXBhdGVkIGluIHF1ZXJ5IGV4ZWN1dGlvbi5cbiAgICAgICAgIFVzZWQgb25seSBmb3IgcXVlcmllcyB3aXRoIHNldHRpbmcgbG9nX3F1ZXJ5X3RocmVhZHMgPSAxLiAtLT5cbiAgICA8cXVlcnlfdGhyZWFkX2xvZz5cbiAgICAgICAgPGRhdGFiYXNlPnN5c3RlbTwvZGF0YWJhc2U+XG4gICAgICAgIDx0YWJsZT5xdWVyeV90aHJlYWRfbG9nPC90YWJsZT5cbiAgICAgICAgPHBhcnRpdGlvbl9ieT50b1lZWVlNTShldmVudF9kYXRlKTwvcGFydGl0aW9uX2J5PlxuICAgICAgICA8Zmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPjc1MDA8L2ZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz5cbiAgICA8L3F1ZXJ5X3RocmVhZF9sb2c+XG5cbiAgICA8IS0tIFF1ZXJ5IHZpZXdzIGxvZy4gSGFzIGluZm9ybWF0aW9uIGFib3V0IGFsbCBkZXBlbmRlbnQgdmlld3MgYXNzb2NpYXRlZCB3aXRoIGEgcXVlcnkuXG4gICAgICAgICBVc2VkIG9ubHkgZm9yIHF1ZXJpZXMgd2l0aCBzZXR0aW5nIGxvZ19xdWVyeV92aWV3cyA9IDEuIC0tPlxuICAgIDxxdWVyeV92aWV3c19sb2c+XG4gICAgICAgIDxkYXRhYmFzZT5zeXN0ZW08L2RhdGFiYXNlPlxuICAgICAgICA8dGFibGU+cXVlcnlfdmlld3NfbG9nPC90YWJsZT5cbiAgICAgICAgPHBhcnRpdGlvbl9ieT50b1lZWVlNTShldmVudF9kYXRlKTwvcGFydGl0aW9uX2J5PlxuICAgICAgICA8Zmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPjc1MDA8L2ZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz5cbiAgICA8L3F1ZXJ5X3ZpZXdzX2xvZz5cblxuICAgIDwhLS0gVW5jb21tZW50IGlmIHVzZSBwYXJ0IGxvZy5cbiAgICAgICAgIFBhcnQgbG9nIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGFsbCBhY3Rpb25zIHdpdGggcGFydHMgaW4gTWVyZ2VUcmVlIHRhYmxlcyAoY3JlYXRpb24sIGRlbGV0aW9uLCBtZXJnZXMsIGRvd25sb2FkcykuLS0+XG4gICAgPHBhcnRfbG9nPlxuICAgICAgICA8ZGF0YWJhc2U+c3lzdGVtPC9kYXRhYmFzZT5cbiAgICAgICAgPHRhYmxlPnBhcnRfbG9nPC90YWJsZT5cbiAgICAgICAgPHBhcnRpdGlvbl9ieT50b1lZWVlNTShldmVudF9kYXRlKTwvcGFydGl0aW9uX2J5PlxuICAgICAgICA8Zmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPjc1MDA8L2ZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz5cbiAgICA8L3BhcnRfbG9nPlxuXG4gICAgPCEtLSBVbmNvbW1lbnQgdG8gd3JpdGUgdGV4dCBsb2cgaW50byB0YWJsZS5cbiAgICAgICAgIFRleHQgbG9nIGNvbnRhaW5zIGFsbCBpbmZvcm1hdGlvbiBmcm9tIHVzdWFsIHNlcnZlciBsb2cgYnV0IHN0b3JlcyBpdCBpbiBzdHJ1Y3R1cmVkIGFuZCBlZmZpY2llbnQgd2F5LlxuICAgICAgICAgVGhlIGxldmVsIG9mIHRoZSBtZXNzYWdlcyB0aGF0IGdvZXMgdG8gdGhlIHRhYmxlIGNhbiBiZSBsaW1pdGVkICg8bGV2ZWw+KSwgaWYgbm90IHNwZWNpZmllZCBhbGwgbWVzc2FnZXMgd2lsbCBnbyB0byB0aGUgdGFibGUuXG4gICAgPHRleHRfbG9nPlxuICAgICAgICA8ZGF0YWJhc2U+c3lzdGVtPC9kYXRhYmFzZT5cbiAgICAgICAgPHRhYmxlPnRleHRfbG9nPC90YWJsZT5cbiAgICAgICAgPGZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz43NTAwPC9mbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+XG4gICAgICAgIDxsZXZlbD48L2xldmVsPlxuICAgIDwvdGV4dF9sb2c+XG4gICAgLS0+XG5cbiAgICA8IS0tIE1ldHJpYyBsb2cgY29udGFpbnMgcm93cyB3aXRoIGN1cnJlbnQgdmFsdWVzIG9mIFByb2ZpbGVFdmVudHMsIEN1cnJlbnRNZXRyaWNzIGNvbGxlY3RlZCB3aXRoIFwiY29sbGVjdF9pbnRlcnZhbF9taWxsaXNlY29uZHNcIiBpbnRlcnZhbC4gLS0+XG4gICAgPG1ldHJpY19sb2c+XG4gICAgICAgIDxkYXRhYmFzZT5zeXN0ZW08L2RhdGFiYXNlPlxuICAgICAgICA8dGFibGU+bWV0cmljX2xvZzwvdGFibGU+XG4gICAgICAgIDxmbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+NzUwMDwvZmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPlxuICAgICAgICA8Y29sbGVjdF9pbnRlcnZhbF9taWxsaXNlY29uZHM+MTAwMDwvY29sbGVjdF9pbnRlcnZhbF9taWxsaXNlY29uZHM+XG4gICAgPC9tZXRyaWNfbG9nPlxuXG4gICAgPCEtLVxuICAgICAgICBBc3luY2hyb25vdXMgbWV0cmljIGxvZyBjb250YWlucyB2YWx1ZXMgb2YgbWV0cmljcyBmcm9tXG4gICAgICAgIHN5c3RlbS5hc3luY2hyb25vdXNfbWV0cmljcy5cbiAgICAtLT5cbiAgICA8YXN5bmNocm9ub3VzX21ldHJpY19sb2c+XG4gICAgICAgIDxkYXRhYmFzZT5zeXN0ZW08L2RhdGFiYXNlPlxuICAgICAgICA8dGFibGU+YXN5bmNocm9ub3VzX21ldHJpY19sb2c8L3RhYmxlPlxuICAgICAgICA8IS0tXG4gICAgICAgICAgICBBc3luY2hyb25vdXMgbWV0cmljcyBhcmUgdXBkYXRlZCBvbmNlIGEgbWludXRlLCBzbyB0aGVyZSBpc1xuICAgICAgICAgICAgbm8gbmVlZCB0byBmbHVzaCBtb3JlIG9mdGVuLlxuICAgICAgICAtLT5cbiAgICAgICAgPGZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz43MDAwPC9mbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+XG4gICAgPC9hc3luY2hyb25vdXNfbWV0cmljX2xvZz5cblxuICAgIDwhLS1cbiAgICAgICAgT3BlblRlbGVtZXRyeSBsb2cgY29udGFpbnMgT3BlblRlbGVtZXRyeSB0cmFjZSBzcGFucy5cbiAgICAtLT5cbiAgICA8b3BlbnRlbGVtZXRyeV9zcGFuX2xvZz5cbiAgICAgICAgPCEtLVxuICAgICAgICAgICAgVGhlIGRlZmF1bHQgdGFibGUgY3JlYXRpb24gY29kZSBpcyBpbnN1ZmZpY2llbnQsIHRoaXMgPGVuZ2luZT4gc3BlY1xuICAgICAgICAgICAgaXMgYSB3b3JrYXJvdW5kLiBUaGVyZSBpcyBubyAnZXZlbnRfdGltZScgZm9yIHRoaXMgbG9nLCBidXQgdHdvIHRpbWVzLFxuICAgICAgICAgICAgc3RhcnQgYW5kIGZpbmlzaC4gSXQgaXMgc29ydGVkIGJ5IGZpbmlzaCB0aW1lLCB0byBhdm9pZCBpbnNlcnRpbmdcbiAgICAgICAgICAgIGRhdGEgdG9vIGZhciBhd2F5IGluIHRoZSBwYXN0IChwcm9iYWJseSB3ZSBjYW4gc29tZXRpbWVzIGluc2VydCBhIHNwYW5cbiAgICAgICAgICAgIHRoYXQgaXMgc2Vjb25kcyBlYXJsaWVyIHRoYW4gdGhlIGxhc3Qgc3BhbiBpbiB0aGUgdGFibGUsIGR1ZSB0byBhIHJhY2VcbiAgICAgICAgICAgIGJldHdlZW4gc2V2ZXJhbCBzcGFucyBpbnNlcnRlZCBpbiBwYXJhbGxlbCkuIFRoaXMgZ2l2ZXMgdGhlIHNwYW5zIGFcbiAgICAgICAgICAgIGdsb2JhbCBvcmRlciB0aGF0IHdlIGNhbiB1c2UgdG8gZS5nLiByZXRyeSBpbnNlcnRpb24gaW50byBzb21lIGV4dGVybmFsXG4gICAgICAgICAgICBzeXN0ZW0uXG4gICAgICAgIC0tPlxuICAgICAgICA8ZW5naW5lPlxuICAgICAgICAgICAgZW5naW5lIE1lcmdlVHJlZVxuICAgICAgICAgICAgcGFydGl0aW9uIGJ5IHRvWVlZWU1NKGZpbmlzaF9kYXRlKVxuICAgICAgICAgICAgb3JkZXIgYnkgKGZpbmlzaF9kYXRlLCBmaW5pc2hfdGltZV91cywgdHJhY2VfaWQpXG4gICAgICAgIDwvZW5naW5lPlxuICAgICAgICA8ZGF0YWJhc2U+c3lzdGVtPC9kYXRhYmFzZT5cbiAgICAgICAgPHRhYmxlPm9wZW50ZWxlbWV0cnlfc3Bhbl9sb2c8L3RhYmxlPlxuICAgICAgICA8Zmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPjc1MDA8L2ZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz5cbiAgICA8L29wZW50ZWxlbWV0cnlfc3Bhbl9sb2c+XG5cblxuICAgIDwhLS0gQ3Jhc2ggbG9nLiBTdG9yZXMgc3RhY2sgdHJhY2VzIGZvciBmYXRhbCBlcnJvcnMuXG4gICAgICAgICBUaGlzIHRhYmxlIGlzIG5vcm1hbGx5IGVtcHR5LiAtLT5cbiAgICA8Y3Jhc2hfbG9nPlxuICAgICAgICA8ZGF0YWJhc2U+c3lzdGVtPC9kYXRhYmFzZT5cbiAgICAgICAgPHRhYmxlPmNyYXNoX2xvZzwvdGFibGU+XG5cbiAgICAgICAgPHBhcnRpdGlvbl9ieSAvPlxuICAgICAgICA8Zmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPjEwMDA8L2ZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz5cbiAgICA8L2NyYXNoX2xvZz5cblxuICAgIDwhLS0gU2Vzc2lvbiBsb2cuIFN0b3JlcyB1c2VyIGxvZyBpbiAoc3VjY2Vzc2Z1bCBvciBub3QpIGFuZCBsb2cgb3V0IGV2ZW50cy5cblxuICAgICAgICBOb3RlOiBzZXNzaW9uIGxvZyBoYXMga25vd24gc2VjdXJpdHkgaXNzdWVzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gcHJvZHVjdGlvbi5cbiAgICAtLT5cbiAgICA8IS0tIDxzZXNzaW9uX2xvZz5cbiAgICAgICAgPGRhdGFiYXNlPnN5c3RlbTwvZGF0YWJhc2U+XG4gICAgICAgIDx0YWJsZT5zZXNzaW9uX2xvZzwvdGFibGU+XG5cbiAgICAgICAgPHBhcnRpdGlvbl9ieT50b1lZWVlNTShldmVudF9kYXRlKTwvcGFydGl0aW9uX2J5PlxuICAgICAgICA8Zmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPjc1MDA8L2ZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz5cbiAgICA8L3Nlc3Npb25fbG9nPiAtLT5cblxuICAgIDwhLS0gUHJvZmlsaW5nIG9uIFByb2Nlc3NvcnMgbGV2ZWwuIC0tPlxuICAgIDxwcm9jZXNzb3JzX3Byb2ZpbGVfbG9nPlxuICAgICAgICA8ZGF0YWJhc2U+c3lzdGVtPC9kYXRhYmFzZT5cbiAgICAgICAgPHRhYmxlPnByb2Nlc3NvcnNfcHJvZmlsZV9sb2c8L3RhYmxlPlxuXG4gICAgICAgIDxwYXJ0aXRpb25fYnk+dG9ZWVlZTU0oZXZlbnRfZGF0ZSk8L3BhcnRpdGlvbl9ieT5cbiAgICAgICAgPGZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz43NTAwPC9mbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+XG4gICAgPC9wcm9jZXNzb3JzX3Byb2ZpbGVfbG9nPlxuXG4gICAgPCEtLSA8dG9wX2xldmVsX2RvbWFpbnNfcGF0aD4vdmFyL2xpYi9jbGlja2hvdXNlL3RvcF9sZXZlbF9kb21haW5zLzwvdG9wX2xldmVsX2RvbWFpbnNfcGF0aD4gLS0+XG4gICAgPCEtLSBDdXN0b20gVExEIGxpc3RzLlxuICAgICAgICAgRm9ybWF0OiA8bmFtZT4vcGF0aC90by9maWxlPC9uYW1lPlxuXG4gICAgICAgICBDaGFuZ2VzIHdpbGwgbm90IGJlIGFwcGxpZWQgdy9vIHNlcnZlciByZXN0YXJ0LlxuICAgICAgICAgUGF0aCB0byB0aGUgbGlzdCBpcyB1bmRlciB0b3BfbGV2ZWxfZG9tYWluc19wYXRoIChzZWUgYWJvdmUpLlxuICAgIC0tPlxuICAgIDx0b3BfbGV2ZWxfZG9tYWluc19saXN0cz5cbiAgICAgICAgPCEtLVxuICAgICAgICA8cHVibGljX3N1ZmZpeF9saXN0Pi9wYXRoL3RvL3B1YmxpY19zdWZmaXhfbGlzdC5kYXQ8L3B1YmxpY19zdWZmaXhfbGlzdD5cbiAgICAgICAgLS0+XG4gICAgPC90b3BfbGV2ZWxfZG9tYWluc19saXN0cz5cblxuICAgIDwhLS0gQ29uZmlndXJhdGlvbiBvZiBleHRlcm5hbCBkaWN0aW9uYXJpZXMuIFNlZTpcbiAgICAgICAgIGh0dHBzOi8vY2xpY2tob3VzZS5jb20vZG9jcy9lbi9zcWwtcmVmZXJlbmNlL2RpY3Rpb25hcmllcy9leHRlcm5hbC1kaWN0aW9uYXJpZXMvZXh0ZXJuYWwtZGljdHNcbiAgICAtLT5cbiAgICA8ZGljdGlvbmFyaWVzX2NvbmZpZz4qX2RpY3Rpb25hcnkueG1sPC9kaWN0aW9uYXJpZXNfY29uZmlnPlxuXG4gICAgPCEtLSBDb25maWd1cmF0aW9uIG9mIHVzZXIgZGVmaW5lZCBleGVjdXRhYmxlIGZ1bmN0aW9ucyAtLT5cbiAgICA8dXNlcl9kZWZpbmVkX2V4ZWN1dGFibGVfZnVuY3Rpb25zX2NvbmZpZz4qZnVuY3Rpb24ueG1sPC91c2VyX2RlZmluZWRfZXhlY3V0YWJsZV9mdW5jdGlvbnNfY29uZmlnPlxuICAgIDx1c2VyX3NjcmlwdHNfcGF0aD4vdmFyL2xpYi9jbGlja2hvdXNlL3VzZXJfc2NyaXB0cy88L3VzZXJfc2NyaXB0c19wYXRoPlxuXG4gICAgPCEtLSBVbmNvbW1lbnQgaWYgeW91IHdhbnQgZGF0YSB0byBiZSBjb21wcmVzc2VkIDMwLTEwMCUgYmV0dGVyLlxuICAgICAgICAgRG9uJ3QgZG8gdGhhdCBpZiB5b3UganVzdCBzdGFydGVkIHVzaW5nIENsaWNrSG91c2UuXG4gICAgICAtLT5cbiAgICA8IS0tXG4gICAgPGNvbXByZXNzaW9uPlxuICAgICAgICA8IS0gLSBTZXQgb2YgdmFyaWFudHMuIENoZWNrZWQgaW4gb3JkZXIuIExhc3QgbWF0Y2hpbmcgY2FzZSB3aW5zLiBJZiBub3RoaW5nIG1hdGNoZXMsIGx6NCB3aWxsIGJlIHVzZWQuIC0gLT5cbiAgICAgICAgPGNhc2U+XG5cbiAgICAgICAgICAgIDwhLSAtIENvbmRpdGlvbnMuIEFsbCBtdXN0IGJlIHNhdGlzZmllZC4gU29tZSBjb25kaXRpb25zIG1heSBiZSBvbWl0dGVkLiAtIC0+XG4gICAgICAgICAgICA8bWluX3BhcnRfc2l6ZT4xMDAwMDAwMDAwMDwvbWluX3BhcnRfc2l6ZT4gICAgICAgIDwhLSAtIE1pbiBwYXJ0IHNpemUgaW4gYnl0ZXMuIC0gLT5cbiAgICAgICAgICAgIDxtaW5fcGFydF9zaXplX3JhdGlvPjAuMDE8L21pbl9wYXJ0X3NpemVfcmF0aW8+ICAgPCEtIC0gTWluIHNpemUgb2YgcGFydCByZWxhdGl2ZSB0byB3aG9sZSB0YWJsZSBzaXplLiAtIC0+XG5cbiAgICAgICAgICAgIDwhLSAtIFdoYXQgY29tcHJlc3Npb24gbWV0aG9kIHRvIHVzZS4gLSAtPlxuICAgICAgICAgICAgPG1ldGhvZD56c3RkPC9tZXRob2Q+XG4gICAgICAgIDwvY2FzZT5cbiAgICA8L2NvbXByZXNzaW9uPlxuICAgIC0tPlxuXG4gICAgPCEtLSBDb25maWd1cmF0aW9uIG9mIGVuY3J5cHRpb24uIFRoZSBzZXJ2ZXIgZXhlY3V0ZXMgYSBjb21tYW5kIHRvXG4gICAgICAgICBvYnRhaW4gYW4gZW5jcnlwdGlvbiBrZXkgYXQgc3RhcnR1cCBpZiBzdWNoIGEgY29tbWFuZCBpc1xuICAgICAgICAgZGVmaW5lZCwgb3IgZW5jcnlwdGlvbiBjb2RlY3Mgd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UuIFRoZVxuICAgICAgICAgY29tbWFuZCBpcyBleGVjdXRlZCB0aHJvdWdoIC9iaW4vc2ggYW5kIGlzIGV4cGVjdGVkIHRvIHdyaXRlXG4gICAgICAgICBhIEJhc2U2NC1lbmNvZGVkIGtleSB0byB0aGUgc3Rkb3V0LiAtLT5cbiAgICA8ZW5jcnlwdGlvbl9jb2RlY3M+XG4gICAgICAgIDwhLS0gYWVzXzEyOF9nY21fc2l2IC0tPlxuICAgICAgICAgICAgPCEtLSBFeGFtcGxlIG9mIGdldHRpbmcgaGV4IGtleSBmcm9tIGVudiAtLT5cbiAgICAgICAgICAgIDwhLS0gdGhlIGNvZGUgc2hvdWxkIHVzZSB0aGlzIGtleSBhbmQgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGl0cyBsZW5ndGggaXMgbm90IDE2IGJ5dGVzIC0tPlxuICAgICAgICAgICAgPCEtLWtleV9oZXggZnJvbV9lbnY9XCIuLi5cIj48L2tleV9oZXggLS0+XG5cbiAgICAgICAgICAgIDwhLS0gRXhhbXBsZSBvZiBtdWx0aXBsZSBoZXgga2V5cy4gVGhleSBjYW4gYmUgaW1wb3J0ZWQgZnJvbSBlbnYgb3IgYmUgd3JpdHRlbiBkb3duIGluIGNvbmZpZy0tPlxuICAgICAgICAgICAgPCEtLSB0aGUgY29kZSBzaG91bGQgdXNlIHRoZXNlIGtleXMgYW5kIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGVpciBsZW5ndGggaXMgbm90IDE2IGJ5dGVzIC0tPlxuICAgICAgICAgICAgPCEtLSBrZXlfaGV4IGlkPVwiMFwiPi4uLjwva2V5X2hleCAtLT5cbiAgICAgICAgICAgIDwhLS0ga2V5X2hleCBpZD1cIjFcIiBmcm9tX2Vudj1cIi4uXCI+PC9rZXlfaGV4IC0tPlxuICAgICAgICAgICAgPCEtLSBrZXlfaGV4IGlkPVwiMlwiPi4uLjwva2V5X2hleCAtLT5cbiAgICAgICAgICAgIDwhLS0gY3VycmVudF9rZXlfaWQ+MjwvY3VycmVudF9rZXlfaWQgLS0+XG5cbiAgICAgICAgICAgIDwhLS0gRXhhbXBsZSBvZiBnZXR0aW5nIGhleCBrZXkgZnJvbSBjb25maWcgLS0+XG4gICAgICAgICAgICA8IS0tIHRoZSBjb2RlIHNob3VsZCB1c2UgdGhpcyBrZXkgYW5kIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBpdHMgbGVuZ3RoIGlzIG5vdCAxNiBieXRlcyAtLT5cbiAgICAgICAgICAgIDwhLS0ga2V5Pi4uLjwva2V5IC0tPlxuXG4gICAgICAgICAgICA8IS0tIGV4YW1wbGUgb2YgYWRkaW5nIG5vbmNlIC0tPlxuICAgICAgICAgICAgPCEtLSBub25jZT4uLi48L25vbmNlIC0tPlxuXG4gICAgICAgIDwhLS0gL2Flc18xMjhfZ2NtX3NpdiAtLT5cbiAgICA8L2VuY3J5cHRpb25fY29kZWNzPlxuXG4gICAgPCEtLSBBbGxvdyB0byBleGVjdXRlIGRpc3RyaWJ1dGVkIERETCBxdWVyaWVzIChDUkVBVEUsIERST1AsIEFMVEVSLCBSRU5BTUUpIG9uIGNsdXN0ZXIuXG4gICAgICAgICBXb3JrcyBvbmx5IGlmIFpvb0tlZXBlciBpcyBlbmFibGVkLiBDb21tZW50IGl0IGlmIHN1Y2ggZnVuY3Rpb25hbGl0eSBpc24ndCByZXF1aXJlZC4gLS0+XG4gICAgPGRpc3RyaWJ1dGVkX2RkbD5cbiAgICAgICAgPCEtLSBQYXRoIGluIFpvb0tlZXBlciB0byBxdWV1ZSB3aXRoIERETCBxdWVyaWVzIC0tPlxuICAgICAgICA8cGF0aD4vY2xpY2tob3VzZS90YXNrX3F1ZXVlL2RkbDwvcGF0aD5cblxuICAgICAgICA8IS0tIFNldHRpbmdzIGZyb20gdGhpcyBwcm9maWxlIHdpbGwgYmUgdXNlZCB0byBleGVjdXRlIERETCBxdWVyaWVzIC0tPlxuICAgICAgICA8IS0tIDxwcm9maWxlPmRlZmF1bHQ8L3Byb2ZpbGU+IC0tPlxuXG4gICAgICAgIDwhLS0gQ29udHJvbHMgaG93IG11Y2ggT04gQ0xVU1RFUiBxdWVyaWVzIGNhbiBiZSBydW4gc2ltdWx0YW5lb3VzbHkuIC0tPlxuICAgICAgICA8IS0tIDxwb29sX3NpemU+MTwvcG9vbF9zaXplPiAtLT5cblxuICAgICAgICA8IS0tXG4gICAgICAgICAgICAgQ2xlYW51cCBzZXR0aW5ncyAoYWN0aXZlIHRhc2tzIHdpbGwgbm90IGJlIHJlbW92ZWQpXG4gICAgICAgIC0tPlxuXG4gICAgICAgIDwhLS0gQ29udHJvbHMgdGFzayBUVEwgKGRlZmF1bHQgMSB3ZWVrKSAtLT5cbiAgICAgICAgPCEtLSA8dGFza19tYXhfbGlmZXRpbWU+NjA0ODAwPC90YXNrX21heF9saWZldGltZT4gLS0+XG5cbiAgICAgICAgPCEtLSBDb250cm9scyBob3cgb2Z0ZW4gY2xlYW51cCBzaG91bGQgYmUgcGVyZm9ybWVkIChpbiBzZWNvbmRzKSAtLT5cbiAgICAgICAgPCEtLSA8Y2xlYW51cF9kZWxheV9wZXJpb2Q+NjA8L2NsZWFudXBfZGVsYXlfcGVyaW9kPiAtLT5cblxuICAgICAgICA8IS0tIENvbnRyb2xzIGhvdyBtYW55IHRhc2tzIGNvdWxkIGJlIGluIHRoZSBxdWV1ZSAtLT5cbiAgICAgICAgPCEtLSA8bWF4X3Rhc2tzX2luX3F1ZXVlPjEwMDA8L21heF90YXNrc19pbl9xdWV1ZT4gLS0+XG4gICAgPC9kaXN0cmlidXRlZF9kZGw+XG5cbiAgICA8IS0tIFNldHRpbmdzIHRvIGZpbmUgdHVuZSBNZXJnZVRyZWUgdGFibGVzLiBTZWUgZG9jdW1lbnRhdGlvbiBpbiBzb3VyY2UgY29kZSwgaW4gTWVyZ2VUcmVlU2V0dGluZ3MuaCAtLT5cbiAgICA8IS0tXG4gICAgPG1lcmdlX3RyZWU+XG4gICAgICAgIDxtYXhfc3VzcGljaW91c19icm9rZW5fcGFydHM+NTwvbWF4X3N1c3BpY2lvdXNfYnJva2VuX3BhcnRzPlxuICAgIDwvbWVyZ2VfdHJlZT5cbiAgICAtLT5cblxuICAgIDwhLS0gUHJvdGVjdGlvbiBmcm9tIGFjY2lkZW50YWwgRFJPUC5cbiAgICAgICAgIElmIHNpemUgb2YgYSBNZXJnZVRyZWUgdGFibGUgaXMgZ3JlYXRlciB0aGFuIG1heF90YWJsZV9zaXplX3RvX2Ryb3AgKGluIGJ5dGVzKSB0aGFuIHRhYmxlIGNvdWxkIG5vdCBiZSBkcm9wcGVkIHdpdGggYW55IERST1AgcXVlcnkuXG4gICAgICAgICBJZiB5b3Ugd2FudCBkbyBkZWxldGUgb25lIHRhYmxlIGFuZCBkb24ndCB3YW50IHRvIGNoYW5nZSBjbGlja2hvdXNlLXNlcnZlciBjb25maWcsIHlvdSBjb3VsZCBjcmVhdGUgc3BlY2lhbCBmaWxlIDxjbGlja2hvdXNlLXBhdGg+L2ZsYWdzL2ZvcmNlX2Ryb3BfdGFibGUgYW5kIG1ha2UgRFJPUCBvbmNlLlxuICAgICAgICAgQnkgZGVmYXVsdCBtYXhfdGFibGVfc2l6ZV90b19kcm9wIGlzIDUwR0I7IG1heF90YWJsZV9zaXplX3RvX2Ryb3A9MCBhbGxvd3MgdG8gRFJPUCBhbnkgdGFibGVzLlxuICAgICAgICAgVGhlIHNhbWUgZm9yIG1heF9wYXJ0aXRpb25fc2l6ZV90b19kcm9wLlxuICAgICAgICAgVW5jb21tZW50IHRvIGRpc2FibGUgcHJvdGVjdGlvbi5cbiAgICAtLT5cbiAgICA8IS0tIDxtYXhfdGFibGVfc2l6ZV90b19kcm9wPjA8L21heF90YWJsZV9zaXplX3RvX2Ryb3A+IC0tPlxuICAgIDwhLS0gPG1heF9wYXJ0aXRpb25fc2l6ZV90b19kcm9wPjA8L21heF9wYXJ0aXRpb25fc2l6ZV90b19kcm9wPiAtLT5cblxuICAgIDwhLS0gRXhhbXBsZSBvZiBwYXJhbWV0ZXJzIGZvciBHcmFwaGl0ZU1lcmdlVHJlZSB0YWJsZSBlbmdpbmUgLS0+XG4gICAgPGdyYXBoaXRlX3JvbGx1cF9leGFtcGxlPlxuICAgICAgICA8cGF0dGVybj5cbiAgICAgICAgICAgIDxyZWdleHA+Y2xpY2tfY29zdDwvcmVnZXhwPlxuICAgICAgICAgICAgPGZ1bmN0aW9uPmFueTwvZnVuY3Rpb24+XG4gICAgICAgICAgICA8cmV0ZW50aW9uPlxuICAgICAgICAgICAgICAgIDxhZ2U+MDwvYWdlPlxuICAgICAgICAgICAgICAgIDxwcmVjaXNpb24+MzYwMDwvcHJlY2lzaW9uPlxuICAgICAgICAgICAgPC9yZXRlbnRpb24+XG4gICAgICAgICAgICA8cmV0ZW50aW9uPlxuICAgICAgICAgICAgICAgIDxhZ2U+ODY0MDA8L2FnZT5cbiAgICAgICAgICAgICAgICA8cHJlY2lzaW9uPjYwPC9wcmVjaXNpb24+XG4gICAgICAgICAgICA8L3JldGVudGlvbj5cbiAgICAgICAgPC9wYXR0ZXJuPlxuICAgICAgICA8ZGVmYXVsdD5cbiAgICAgICAgICAgIDxmdW5jdGlvbj5tYXg8L2Z1bmN0aW9uPlxuICAgICAgICAgICAgPHJldGVudGlvbj5cbiAgICAgICAgICAgICAgICA8YWdlPjA8L2FnZT5cbiAgICAgICAgICAgICAgICA8cHJlY2lzaW9uPjYwPC9wcmVjaXNpb24+XG4gICAgICAgICAgICA8L3JldGVudGlvbj5cbiAgICAgICAgICAgIDxyZXRlbnRpb24+XG4gICAgICAgICAgICAgICAgPGFnZT4zNjAwPC9hZ2U+XG4gICAgICAgICAgICAgICAgPHByZWNpc2lvbj4zMDA8L3ByZWNpc2lvbj5cbiAgICAgICAgICAgIDwvcmV0ZW50aW9uPlxuICAgICAgICAgICAgPHJldGVudGlvbj5cbiAgICAgICAgICAgICAgICA8YWdlPjg2NDAwPC9hZ2U+XG4gICAgICAgICAgICAgICAgPHByZWNpc2lvbj4zNjAwPC9wcmVjaXNpb24+XG4gICAgICAgICAgICA8L3JldGVudGlvbj5cbiAgICAgICAgPC9kZWZhdWx0PlxuICAgIDwvZ3JhcGhpdGVfcm9sbHVwX2V4YW1wbGU+XG5cbiAgICA8IS0tIERpcmVjdG9yeSBpbiA8Y2xpY2tob3VzZS1wYXRoPiBjb250YWluaW5nIHNjaGVtYSBmaWxlcyBmb3IgdmFyaW91cyBpbnB1dCBmb3JtYXRzLlxuICAgICAgICAgVGhlIGRpcmVjdG9yeSB3aWxsIGJlIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgIC0tPlxuICAgIDxmb3JtYXRfc2NoZW1hX3BhdGg+L3Zhci9saWIvY2xpY2tob3VzZS9mb3JtYXRfc2NoZW1hcy88L2Zvcm1hdF9zY2hlbWFfcGF0aD5cblxuICAgIDwhLS0gRGVmYXVsdCBxdWVyeSBtYXNraW5nIHJ1bGVzLCBtYXRjaGluZyBsaW5lcyB3b3VsZCBiZSByZXBsYWNlZCB3aXRoIHNvbWV0aGluZyBlbHNlIGluIHRoZSBsb2dzXG4gICAgICAgIChib3RoIHRleHQgbG9ncyBhbmQgc3lzdGVtLnF1ZXJ5X2xvZykuXG4gICAgICAgIG5hbWUgLSBuYW1lIGZvciB0aGUgcnVsZSAob3B0aW9uYWwpXG4gICAgICAgIHJlZ2V4cCAtIFJFMiBjb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbiAobWFuZGF0b3J5KVxuICAgICAgICByZXBsYWNlIC0gc3Vic3RpdHV0aW9uIHN0cmluZyBmb3Igc2Vuc2l0aXZlIGRhdGEgKG9wdGlvbmFsLCBieSBkZWZhdWx0IC0gc2l4IGFzdGVyaXNrcylcbiAgICAtLT5cbiAgICA8cXVlcnlfbWFza2luZ19ydWxlcz5cbiAgICAgICAgPHJ1bGU+XG4gICAgICAgICAgICA8bmFtZT5oaWRlIGVuY3J5cHQvZGVjcnlwdCBhcmd1bWVudHM8L25hbWU+XG4gICAgICAgICAgICA8cmVnZXhwPigoPzphZXNfKT8oPzplbmNyeXB0fGRlY3J5cHQpKD86X215c3FsKT8pXFxzKlxcKFxccyooPzonKD86XFxcXCd8LikrJ3wuKj8pXFxzKlxcKTwvcmVnZXhwPlxuICAgICAgICAgICAgPCEtLSBvciBtb3JlIHNlY3VyZSwgYnV0IGFsc28gbW9yZSBpbnZhc2l2ZTpcbiAgICAgICAgICAgICAgICAoYWVzX1xcdyspXFxzKlxcKC4qXFwpXG4gICAgICAgICAgICAtLT5cbiAgICAgICAgICAgIDxyZXBsYWNlPlxcMSg/Pz8pPC9yZXBsYWNlPlxuICAgICAgICA8L3J1bGU+XG4gICAgPC9xdWVyeV9tYXNraW5nX3J1bGVzPlxuXG4gICAgPCEtLSBVbmNvbW1lbnQgdG8gdXNlIGN1c3RvbSBodHRwIGhhbmRsZXJzLlxuICAgICAgICBydWxlcyBhcmUgY2hlY2tlZCBmcm9tIHRvcCB0byBib3R0b20sIGZpcnN0IG1hdGNoIHJ1bnMgdGhlIGhhbmRsZXJcbiAgICAgICAgICAgIHVybCAtIHRvIG1hdGNoIHJlcXVlc3QgVVJMLCB5b3UgY2FuIHVzZSAncmVnZXg6JyBwcmVmaXggdG8gdXNlIHJlZ2V4IG1hdGNoKG9wdGlvbmFsKVxuICAgICAgICAgICAgbWV0aG9kcyAtIHRvIG1hdGNoIHJlcXVlc3QgbWV0aG9kLCB5b3UgY2FuIHVzZSBjb21tYXMgdG8gc2VwYXJhdGUgbXVsdGlwbGUgbWV0aG9kIG1hdGNoZXMob3B0aW9uYWwpXG4gICAgICAgICAgICBoZWFkZXJzIC0gdG8gbWF0Y2ggcmVxdWVzdCBoZWFkZXJzLCBtYXRjaCBlYWNoIGNoaWxkIGVsZW1lbnQoY2hpbGQgZWxlbWVudCBuYW1lIGlzIGhlYWRlciBuYW1lKSwgeW91IGNhbiB1c2UgJ3JlZ2V4OicgcHJlZml4IHRvIHVzZSByZWdleCBtYXRjaChvcHRpb25hbClcbiAgICAgICAgaGFuZGxlciBpcyByZXF1ZXN0IGhhbmRsZXJcbiAgICAgICAgICAgIHR5cGUgLSBzdXBwb3J0ZWQgdHlwZXM6IHN0YXRpYywgZHluYW1pY19xdWVyeV9oYW5kbGVyLCBwcmVkZWZpbmVkX3F1ZXJ5X2hhbmRsZXJcbiAgICAgICAgICAgIHF1ZXJ5IC0gdXNlIHdpdGggcHJlZGVmaW5lZF9xdWVyeV9oYW5kbGVyIHR5cGUsIGV4ZWN1dGVzIHF1ZXJ5IHdoZW4gdGhlIGhhbmRsZXIgaXMgY2FsbGVkXG4gICAgICAgICAgICBxdWVyeV9wYXJhbV9uYW1lIC0gdXNlIHdpdGggZHluYW1pY19xdWVyeV9oYW5kbGVyIHR5cGUsIGV4dHJhY3RzIGFuZCBleGVjdXRlcyB0aGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgPHF1ZXJ5X3BhcmFtX25hbWU+IHZhbHVlIGluIEhUVFAgcmVxdWVzdCBwYXJhbXNcbiAgICAgICAgICAgIHN0YXR1cyAtIHVzZSB3aXRoIHN0YXRpYyB0eXBlLCByZXNwb25zZSBzdGF0dXMgY29kZVxuICAgICAgICAgICAgY29udGVudF90eXBlIC0gdXNlIHdpdGggc3RhdGljIHR5cGUsIHJlc3BvbnNlIGNvbnRlbnQtdHlwZVxuICAgICAgICAgICAgcmVzcG9uc2VfY29udGVudCAtIHVzZSB3aXRoIHN0YXRpYyB0eXBlLCBSZXNwb25zZSBjb250ZW50IHNlbnQgdG8gY2xpZW50LCB3aGVuIHVzaW5nIHRoZSBwcmVmaXggJ2ZpbGU6Ly8nIG9yICdjb25maWc6Ly8nLCBmaW5kIHRoZSBjb250ZW50IGZyb20gdGhlIGZpbGUgb3IgY29uZmlndXJhdGlvbiBzZW5kIHRvIGNsaWVudC5cblxuICAgIDxodHRwX2hhbmRsZXJzPlxuICAgICAgICA8cnVsZT5cbiAgICAgICAgICAgIDx1cmw+LzwvdXJsPlxuICAgICAgICAgICAgPG1ldGhvZHM+UE9TVCxHRVQ8L21ldGhvZHM+XG4gICAgICAgICAgICA8aGVhZGVycz48cHJhZ21hPm5vLWNhY2hlPC9wcmFnbWE+PC9oZWFkZXJzPlxuICAgICAgICAgICAgPGhhbmRsZXI+XG4gICAgICAgICAgICAgICAgPHR5cGU+ZHluYW1pY19xdWVyeV9oYW5kbGVyPC90eXBlPlxuICAgICAgICAgICAgICAgIDxxdWVyeV9wYXJhbV9uYW1lPnF1ZXJ5PC9xdWVyeV9wYXJhbV9uYW1lPlxuICAgICAgICAgICAgPC9oYW5kbGVyPlxuICAgICAgICA8L3J1bGU+XG5cbiAgICAgICAgPHJ1bGU+XG4gICAgICAgICAgICA8dXJsPi9wcmVkZWZpbmVkX3F1ZXJ5PC91cmw+XG4gICAgICAgICAgICA8bWV0aG9kcz5QT1NULEdFVDwvbWV0aG9kcz5cbiAgICAgICAgICAgIDxoYW5kbGVyPlxuICAgICAgICAgICAgICAgIDx0eXBlPnByZWRlZmluZWRfcXVlcnlfaGFuZGxlcjwvdHlwZT5cbiAgICAgICAgICAgICAgICA8cXVlcnk+U0VMRUNUICogRlJPTSBzeXN0ZW0uc2V0dGluZ3M8L3F1ZXJ5PlxuICAgICAgICAgICAgPC9oYW5kbGVyPlxuICAgICAgICA8L3J1bGU+XG5cbiAgICAgICAgPHJ1bGU+XG4gICAgICAgICAgICA8aGFuZGxlcj5cbiAgICAgICAgICAgICAgICA8dHlwZT5zdGF0aWM8L3R5cGU+XG4gICAgICAgICAgICAgICAgPHN0YXR1cz4yMDA8L3N0YXR1cz5cbiAgICAgICAgICAgICAgICA8Y29udGVudF90eXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg8L2NvbnRlbnRfdHlwZT5cbiAgICAgICAgICAgICAgICA8cmVzcG9uc2VfY29udGVudD5jb25maWc6Ly9odHRwX3NlcnZlcl9kZWZhdWx0X3Jlc3BvbnNlPC9yZXNwb25zZV9jb250ZW50PlxuICAgICAgICAgICAgPC9oYW5kbGVyPlxuICAgICAgICA8L3J1bGU+XG4gICAgPC9odHRwX2hhbmRsZXJzPlxuICAgIC0tPlxuXG4gICAgPHNlbmRfY3Jhc2hfcmVwb3J0cz5cbiAgICAgICAgPCEtLSBDaGFuZ2luZyA8ZW5hYmxlZD4gdG8gdHJ1ZSBhbGxvd3Mgc2VuZGluZyBjcmFzaCByZXBvcnRzIHRvIC0tPlxuICAgICAgICA8IS0tIHRoZSBDbGlja0hvdXNlIGNvcmUgZGV2ZWxvcGVycyB0ZWFtIHZpYSBTZW50cnkgaHR0cHM6Ly9zZW50cnkuaW8gLS0+XG4gICAgICAgIDwhLS0gRG9pbmcgc28gYXQgbGVhc3QgaW4gcHJlLXByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIGlzIGhpZ2hseSBhcHByZWNpYXRlZCAtLT5cbiAgICAgICAgPGVuYWJsZWQ+ZmFsc2U8L2VuYWJsZWQ+XG4gICAgICAgIDwhLS0gQ2hhbmdlIDxhbm9ueW1pemU+IHRvIHRydWUgaWYgeW91IGRvbid0IGZlZWwgY29tZm9ydGFibGUgYXR0YWNoaW5nIHRoZSBzZXJ2ZXIgaG9zdG5hbWUgdG8gdGhlIGNyYXNoIHJlcG9ydCAtLT5cbiAgICAgICAgPGFub255bWl6ZT5mYWxzZTwvYW5vbnltaXplPlxuICAgICAgICA8IS0tIERlZmF1bHQgZW5kcG9pbnQgc2hvdWxkIGJlIGNoYW5nZWQgdG8gZGlmZmVyZW50IFNlbnRyeSBEU04gb25seSBpZiB5b3UgaGF2ZSAtLT5cbiAgICAgICAgPCEtLSBzb21lIGluLWhvdXNlIGVuZ2luZWVycyBvciBoaXJlZCBjb25zdWx0YW50cyB3aG8ncmUgZ29pbmcgdG8gZGVidWcgQ2xpY2tIb3VzZSBpc3N1ZXMgZm9yIHlvdSAtLT5cbiAgICAgICAgPGVuZHBvaW50Pmh0dHBzOi8vNmYzMzAzNGNmZTY4NGRkN2EzYWI5ODc1ZTU3YjFjOGRAbzM4ODg3MC5pbmdlc3Quc2VudHJ5LmlvLzUyMjYyNzc8L2VuZHBvaW50PlxuICAgIDwvc2VuZF9jcmFzaF9yZXBvcnRzPlxuXG4gICAgPCEtLSBVbmNvbW1lbnQgdG8gZGlzYWJsZSBDbGlja0hvdXNlIGludGVybmFsIEROUyBjYWNoaW5nLiAtLT5cbiAgICA8IS0tIDxkaXNhYmxlX2ludGVybmFsX2Ruc19jYWNoZT4xPC9kaXNhYmxlX2ludGVybmFsX2Ruc19jYWNoZT4gLS0+XG5cbiAgICA8IS0tIFlvdSBjYW4gYWxzbyBjb25maWd1cmUgcm9ja3NkYiBsaWtlIHRoaXM6IC0tPlxuICAgIDwhLS1cbiAgICA8cm9ja3NkYj5cbiAgICAgICAgPG9wdGlvbnM+XG4gICAgICAgICAgICA8bWF4X2JhY2tncm91bmRfam9icz44PC9tYXhfYmFja2dyb3VuZF9qb2JzPlxuICAgICAgICA8L29wdGlvbnM+XG4gICAgICAgIDxjb2x1bW5fZmFtaWx5X29wdGlvbnM+XG4gICAgICAgICAgICA8bnVtX2xldmVscz4yPC9udW1fbGV2ZWxzPlxuICAgICAgICA8L2NvbHVtbl9mYW1pbHlfb3B0aW9ucz5cbiAgICAgICAgPHRhYmxlcz5cbiAgICAgICAgICAgIDx0YWJsZT5cbiAgICAgICAgICAgICAgICA8bmFtZT5UQUJMRTwvbmFtZT5cbiAgICAgICAgICAgICAgICA8b3B0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAgPG1heF9iYWNrZ3JvdW5kX2pvYnM+ODwvbWF4X2JhY2tncm91bmRfam9icz5cbiAgICAgICAgICAgICAgICA8L29wdGlvbnM+XG4gICAgICAgICAgICAgICAgPGNvbHVtbl9mYW1pbHlfb3B0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAgPG51bV9sZXZlbHM+MjwvbnVtX2xldmVscz5cbiAgICAgICAgICAgICAgICA8L2NvbHVtbl9mYW1pbHlfb3B0aW9ucz5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvdGFibGVzPlxuICAgIDwvcm9ja3NkYj5cbiAgICAtLT5cblxuICAgIDwhLS0gVW5jb21tZW50IGlmIGVuYWJsZSBtZXJnZSB0cmVlIG1ldGFkYXRhIGNhY2hlIC0tPlxuICAgIDxtZXJnZV90cmVlX21ldGFkYXRhX2NhY2hlPlxuICAgICAgICA8bHJ1X2NhY2hlX3NpemU+MjY4NDM1NDU2PC9scnVfY2FjaGVfc2l6ZT5cbiAgICAgICAgPGNvbnRpbnVlX2lmX2NvcnJ1cHRlZD50cnVlPC9jb250aW51ZV9pZl9jb3JydXB0ZWQ+XG4gICAgPC9tZXJnZV90cmVlX21ldGFkYXRhX2NhY2hlPlxuPC9jbGlja2hvdXNlPlxuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL2NsaWNraG91c2UvY2x1c3Rlci54bWxcIlxuY29udGVudCA9IFwiXCJcIlxuPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cbjxjbGlja2hvdXNlPlxuICAgIDwhLS0gWm9vS2VlcGVyIGlzIHVzZWQgdG8gc3RvcmUgbWV0YWRhdGEgYWJvdXQgcmVwbGljYXMsIHdoZW4gdXNpbmcgUmVwbGljYXRlZCB0YWJsZXMuXG4gICAgICAgICBPcHRpb25hbC4gSWYgeW91IGRvbid0IHVzZSByZXBsaWNhdGVkIHRhYmxlcywgeW91IGNvdWxkIG9taXQgdGhhdC5cblxuICAgICAgICAgU2VlIGh0dHBzOi8vY2xpY2tob3VzZS5jb20vZG9jcy9lbi9lbmdpbmVzL3RhYmxlLWVuZ2luZXMvbWVyZ2V0cmVlLWZhbWlseS9yZXBsaWNhdGlvbi9cbiAgICAgIC0tPlxuICAgIDx6b29rZWVwZXI+XG4gICAgICAgIDxub2RlIGluZGV4PVwiMVwiPlxuICAgICAgICAgICAgPGhvc3Q+em9va2VlcGVyLTE8L2hvc3Q+XG4gICAgICAgICAgICA8cG9ydD4yMTgxPC9wb3J0PlxuICAgICAgICA8L25vZGU+XG4gICAgICAgIDwhLS0gPG5vZGUgaW5kZXg9XCIyXCI+XG4gICAgICAgICAgICA8aG9zdD56b29rZWVwZXItMjwvaG9zdD5cbiAgICAgICAgICAgIDxwb3J0PjIxODE8L3BvcnQ+XG4gICAgICAgIDwvbm9kZT5cbiAgICAgICAgPG5vZGUgaW5kZXg9XCIzXCI+XG4gICAgICAgICAgICA8aG9zdD56b29rZWVwZXItMzwvaG9zdD5cbiAgICAgICAgICAgIDxwb3J0PjIxODE8L3BvcnQ+XG4gICAgICAgIDwvbm9kZT4gLS0+XG4gICAgPC96b29rZWVwZXI+XG5cbiAgICA8IS0tIENvbmZpZ3VyYXRpb24gb2YgY2x1c3RlcnMgdGhhdCBjb3VsZCBiZSB1c2VkIGluIERpc3RyaWJ1dGVkIHRhYmxlcy5cbiAgICAgICAgIGh0dHBzOi8vY2xpY2tob3VzZS5jb20vZG9jcy9lbi9vcGVyYXRpb25zL3RhYmxlX2VuZ2luZXMvZGlzdHJpYnV0ZWQvXG4gICAgICAtLT5cbiAgICA8cmVtb3RlX3NlcnZlcnM+XG4gICAgICAgIDxjbHVzdGVyPlxuICAgICAgICAgICAgPCEtLSBJbnRlci1zZXJ2ZXIgcGVyLWNsdXN0ZXIgc2VjcmV0IGZvciBEaXN0cmlidXRlZCBxdWVyaWVzXG4gICAgICAgICAgICAgICAgIGRlZmF1bHQ6IG5vIHNlY3JldCAobm8gYXV0aGVudGljYXRpb24gd2lsbCBiZSBwZXJmb3JtZWQpXG5cbiAgICAgICAgICAgICAgICAgSWYgc2V0LCB0aGVuIERpc3RyaWJ1dGVkIHF1ZXJpZXMgd2lsbCBiZSB2YWxpZGF0ZWQgb24gc2hhcmRzLCBzbyBhdCBsZWFzdDpcbiAgICAgICAgICAgICAgICAgLSBzdWNoIGNsdXN0ZXIgc2hvdWxkIGV4aXN0IG9uIHRoZSBzaGFyZCxcbiAgICAgICAgICAgICAgICAgLSBzdWNoIGNsdXN0ZXIgc2hvdWxkIGhhdmUgdGhlIHNhbWUgc2VjcmV0LlxuXG4gICAgICAgICAgICAgICAgIEFuZCBhbHNvIChhbmQgd2hpY2ggaXMgbW9yZSBpbXBvcnRhbnQpLCB0aGUgaW5pdGlhbF91c2VyIHdpbGxcbiAgICAgICAgICAgICAgICAgYmUgdXNlZCBhcyBjdXJyZW50IHVzZXIgZm9yIHRoZSBxdWVyeS5cblxuICAgICAgICAgICAgICAgICBSaWdodCBub3cgdGhlIHByb3RvY29sIGlzIHByZXR0eSBzaW1wbGUgYW5kIGl0IG9ubHkgdGFrZXMgaW50byBhY2NvdW50OlxuICAgICAgICAgICAgICAgICAtIGNsdXN0ZXIgbmFtZVxuICAgICAgICAgICAgICAgICAtIHF1ZXJ5XG5cbiAgICAgICAgICAgICAgICAgQWxzbyBpdCB3aWxsIGJlIG5pY2UgaWYgdGhlIGZvbGxvd2luZyB3aWxsIGJlIGltcGxlbWVudGVkOlxuICAgICAgICAgICAgICAgICAtIHNvdXJjZSBob3N0bmFtZSAoc2VlIGludGVyc2VydmVyX2h0dHBfaG9zdCksIGJ1dCB0aGVuIGl0IHdpbGwgZGVwZW5kcyBmcm9tIEROUyxcbiAgICAgICAgICAgICAgICAgICBpdCBjYW4gdXNlIElQIGFkZHJlc3MgaW5zdGVhZCwgYnV0IHRoZW4gdGhlIHlvdSBuZWVkIHRvIGdldCBjb3JyZWN0IG9uIHRoZSBpbml0aWF0b3Igbm9kZS5cbiAgICAgICAgICAgICAgICAgLSB0YXJnZXQgaG9zdG5hbWUgLyBpcCBhZGRyZXNzIChzYW1lIG5vdGVzIGFzIGZvciBzb3VyY2UgaG9zdG5hbWUpXG4gICAgICAgICAgICAgICAgIC0gdGltZS1iYXNlZCBzZWN1cml0eSB0b2tlbnNcbiAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgPCEtLSA8c2VjcmV0Pjwvc2VjcmV0PiAtLT5cbiAgICAgICAgICAgIDxzaGFyZD5cbiAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbmFsLiBXaGV0aGVyIHRvIHdyaXRlIGRhdGEgdG8ganVzdCBvbmUgb2YgdGhlIHJlcGxpY2FzLiBEZWZhdWx0OiBmYWxzZSAod3JpdGUgZGF0YSB0byBhbGwgcmVwbGljYXMpLiAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIDxpbnRlcm5hbF9yZXBsaWNhdGlvbj5mYWxzZTwvaW50ZXJuYWxfcmVwbGljYXRpb24+IC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9uYWwuIFNoYXJkIHdlaWdodCB3aGVuIHdyaXRpbmcgZGF0YS4gRGVmYXVsdDogMS4gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8d2VpZ2h0PjE8L3dlaWdodD4gLS0+XG4gICAgICAgICAgICAgICAgPHJlcGxpY2E+XG4gICAgICAgICAgICAgICAgICAgIDxob3N0PmNsaWNraG91c2U8L2hvc3Q+XG4gICAgICAgICAgICAgICAgICAgIDxwb3J0PjkwMDA8L3BvcnQ+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9uYWwuIFByaW9yaXR5IG9mIHRoZSByZXBsaWNhIGZvciBsb2FkX2JhbGFuY2luZy4gRGVmYXVsdDogMSAobGVzcyB2YWx1ZSBoYXMgbW9yZSBwcmlvcml0eSkuIC0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxwcmlvcml0eT4xPC9wcmlvcml0eT4gLS0+XG4gICAgICAgICAgICAgICAgPC9yZXBsaWNhPlxuICAgICAgICAgICAgPC9zaGFyZD5cbiAgICAgICAgICAgIDwhLS0gPHNoYXJkPlxuICAgICAgICAgICAgICAgIDxyZXBsaWNhPlxuICAgICAgICAgICAgICAgICAgICA8aG9zdD5jbGlja2hvdXNlLTI8L2hvc3Q+XG4gICAgICAgICAgICAgICAgICAgIDxwb3J0PjkwMDA8L3BvcnQ+XG4gICAgICAgICAgICAgICAgPC9yZXBsaWNhPlxuICAgICAgICAgICAgPC9zaGFyZD5cbiAgICAgICAgICAgIDxzaGFyZD5cbiAgICAgICAgICAgICAgICA8cmVwbGljYT5cbiAgICAgICAgICAgICAgICAgICAgPGhvc3Q+Y2xpY2tob3VzZS0zPC9ob3N0PlxuICAgICAgICAgICAgICAgICAgICA8cG9ydD45MDAwPC9wb3J0PlxuICAgICAgICAgICAgICAgIDwvcmVwbGljYT5cbiAgICAgICAgICAgIDwvc2hhcmQ+IC0tPlxuICAgICAgICA8L2NsdXN0ZXI+XG4gICAgPC9yZW1vdGVfc2VydmVycz5cbjwvY2xpY2tob3VzZT5cblwiXCJcIlxuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi9jbGlja2hvdXNlL2RvY2tlcl9yZWxhdGVkX2NvbmZpZy54bWxcIlxuY29udGVudCA9IFwiXCJcIlxuPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cbjxjbGlja2hvdXNlPlxuICAgIDwhLS0gT3ZlcnJpZGVzIHRoZSBkb2NrZXIgaW1hZ2UncyBkZWZhdWx0IGNvbmZpZy5kL2RvY2tlcl9yZWxhdGVkX2NvbmZpZy54bWwsXG4gICAgICAgICB3aGljaCBsaXN0ZW5zIG9uIHRoZSBJUHY2IHdpbGRjYXJkIGFkZHJlc3MgKFs6Ol0pIGZpcnN0LiBPbiBob3N0cyB3aXRob3V0XG4gICAgICAgICBJUHY2IHN1cHBvcnQgdGhlIGJpbmQgZmFpbHMsIHNvIGxpc3RlbiBvbiBJUHY0IG9ubHkuIC0tPlxuICAgIDxsaXN0ZW5faG9zdD4wLjAuMC4wPC9saXN0ZW5faG9zdD5cbiAgICA8bGlzdGVuX3RyeT4xPC9saXN0ZW5fdHJ5PlxuICAgIDwhLS0gQ29udGFpbmVyIElQcyBjYW4gY2hhbmdlIGFuZCBETlMgcmVjb3JkcyAoem9va2VlcGVyLTEsIGNsaWNraG91c2UpIG1heSBub3RcbiAgICAgICAgIGJlIHJlYWR5IHRoZSBtb21lbnQgQ2xpY2tIb3VzZSBzdGFydHMuIERvIG5vdCBjYWNoZSBETlMgbG9va3VwIGZhaWx1cmVzLiAtLT5cbiAgICA8ZGlzYWJsZV9pbnRlcm5hbF9kbnNfY2FjaGU+MTwvZGlzYWJsZV9pbnRlcm5hbF9kbnNfY2FjaGU+XG48L2NsaWNraG91c2U+XG5cIlwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvc2lnbm96L3Byb21ldGhldXMueW1sXCJcbmNvbnRlbnQgPSBcIlwiXCJcbiMgbXkgZ2xvYmFsIGNvbmZpZ1xuZ2xvYmFsOlxuICBzY3JhcGVfaW50ZXJ2YWw6ICAgICA1cyAjIFNldCB0aGUgc2NyYXBlIGludGVydmFsIHRvIGV2ZXJ5IDE1IHNlY29uZHMuIERlZmF1bHQgaXMgZXZlcnkgMSBtaW51dGUuXG4gIGV2YWx1YXRpb25faW50ZXJ2YWw6IDE1cyAjIEV2YWx1YXRlIHJ1bGVzIGV2ZXJ5IDE1IHNlY29uZHMuIFRoZSBkZWZhdWx0IGlzIGV2ZXJ5IDEgbWludXRlLlxuICAjIHNjcmFwZV90aW1lb3V0IGlzIHNldCB0byB0aGUgZ2xvYmFsIGRlZmF1bHQgKDEwcykuXG5cbiMgQWxlcnRtYW5hZ2VyIGNvbmZpZ3VyYXRpb25cbmFsZXJ0aW5nOlxuICBhbGVydG1hbmFnZXJzOlxuICAtIHN0YXRpY19jb25maWdzOlxuICAgIC0gdGFyZ2V0czpcbiAgICAgIC0gYWxlcnRtYW5hZ2VyOjkwOTNcblxuIyBMb2FkIHJ1bGVzIG9uY2UgYW5kIHBlcmlvZGljYWxseSBldmFsdWF0ZSB0aGVtIGFjY29yZGluZyB0byB0aGUgZ2xvYmFsICdldmFsdWF0aW9uX2ludGVydmFsJy5cbnJ1bGVfZmlsZXM6IFtdXG4gICMgLSBcImZpcnN0X3J1bGVzLnltbFwiXG4gICMgLSBcInNlY29uZF9ydWxlcy55bWxcIlxuICAjIC0gJ2FsZXJ0cy55bWwnXG5cbiMgQSBzY3JhcGUgY29uZmlndXJhdGlvbiBjb250YWluaW5nIGV4YWN0bHkgb25lIGVuZHBvaW50IHRvIHNjcmFwZTpcbiMgSGVyZSBpdCdzIFByb21ldGhldXMgaXRzZWxmLlxuc2NyYXBlX2NvbmZpZ3M6IFtdXG5cbnJlbW90ZV9yZWFkOlxuICAtIHVybDogdGNwOi8vY2xpY2tob3VzZTo5MDAwL3NpZ25vel9tZXRyaWNzXG5cIlwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvY29sbGVjdG9yL290ZWwtY29sbGVjdG9yLWNvbmZpZy55YW1sXCJcbmNvbnRlbnQgPSBcIlwiXCJcbnJlY2VpdmVyczpcbiAgb3RscDpcbiAgICBwcm90b2NvbHM6XG4gICAgICBncnBjOlxuICAgICAgICBlbmRwb2ludDogMC4wLjAuMDo0MzE3XG4gICAgICBodHRwOlxuICAgICAgICBlbmRwb2ludDogMC4wLjAuMDo0MzE4XG5wcm9jZXNzb3JzOlxuICBiYXRjaDpcbmV4cG9ydGVyczpcbiAgY2xpY2tob3VzZXRyYWNlczpcbiAgICBkYXRhc291cmNlOiB0Y3A6Ly9jbGlja2hvdXNlOjkwMDAvc2lnbm96X3RyYWNlc1xuICAgIHVzZV9uZXdfc2NoZW1hOiB0cnVlXG4gIHNpZ25vemNsaWNraG91c2VtZXRyaWNzOlxuICAgIGRzbjogdGNwOi8vY2xpY2tob3VzZTo5MDAwL3NpZ25vel9tZXRyaWNzXG4gICAgdGltZW91dDogMTVzXG4gIGNsaWNraG91c2Vsb2dzZXhwb3J0ZXI6XG4gICAgZHNuOiB0Y3A6Ly9jbGlja2hvdXNlOjkwMDAvc2lnbm96X2xvZ3NcbiAgICB0aW1lb3V0OiAxMHNcbiAgICB1c2VfbmV3X3NjaGVtYTogdHJ1ZVxuICBtZXRhZGF0YWV4cG9ydGVyOlxuICAgIGRzbjogdGNwOi8vY2xpY2tob3VzZTo5MDAwL3NpZ25vel9tZXRhZGF0YVxuICAgIHRpbWVvdXQ6IDEwc1xuc2VydmljZTpcbiAgcGlwZWxpbmVzOlxuICAgIHRyYWNlczpcbiAgICAgIHJlY2VpdmVyczogW290bHBdXG4gICAgICBwcm9jZXNzb3JzOiBbYmF0Y2hdXG4gICAgICBleHBvcnRlcnM6IFtjbGlja2hvdXNldHJhY2VzLCBtZXRhZGF0YWV4cG9ydGVyXVxuICAgIG1ldHJpY3M6XG4gICAgICByZWNlaXZlcnM6IFtvdGxwXVxuICAgICAgcHJvY2Vzc29yczogW2JhdGNoXVxuICAgICAgZXhwb3J0ZXJzOiBbc2lnbm96Y2xpY2tob3VzZW1ldHJpY3MsIG1ldGFkYXRhZXhwb3J0ZXJdXG4gICAgbG9nczpcbiAgICAgIHJlY2VpdmVyczogW290bHBdXG4gICAgICBwcm9jZXNzb3JzOiBbYmF0Y2hdXG4gICAgICBleHBvcnRlcnM6IFtjbGlja2hvdXNlbG9nc2V4cG9ydGVyLCBtZXRhZGF0YWV4cG9ydGVyXVxuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL2NsaWNraG91c2UvdXNlcl9zY3JpcHRzL2VtcHR5LnR4dFwiXG5jb250ZW50ID0gXCJcIiIKfQ==

Configuration

The exact Docker Compose and template configuration this template deploys.

Related Templates

Self-host SigNoz in minutes

Dokploy is a free, open source deployment platform. Deploy SigNoz and 517+ other templates on your own infrastructure with a single click.