Cgo8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KPCEtLQogICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tPgogICAgICAgIDxodG1sIGxhbmc9ImVuIj4KICAgIDwhLS0gR0VORVJBVEVEIEZJTEUsIERPIE5PVCBFRElULCBFRElUIFRIRSBYTUwgRklMRSBJTiB4ZG9jcyBJTlNURUFEISAtLT4KICAgIDxoZWFkPgogICAgICA8TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KICAgICAgICA8dGl0bGU+QXBhY2hlIEFudCAtIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zPC90aXRsZT4KICAgICAgICA8bGluayB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi9wYWdlLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4KICAgICAgICAgIDxtZXRhIG5hbWU9ImF1dGhvciIgY29udGVudD0iU3RlZmFuIEJvZGV3aWciPgogIDxtZXRhIG5hbWU9ImVtYWlsIiBjb250ZW50PSJib2Rld2lnQGFwYWNoZS5vcmciPgogICAgICA8L2hlYWQ+CgogICAgPGJvZHk+CiAgICAgIDxwIGNsYXNzPSJuYXZwYXRoIj4KICAgICAgICA8c2NyaXB0IHNyYz0iLi9icmVhZGNydW1icy5qcyIgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CiAgICAgIDwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImxvZ29iYXIiPgogICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxpbWcgYm9yZGVyPSIwIiBhbHQ9IkFwYWNoZSBBbnQgc2l0ZSIgc3JjPSIuL2ltYWdlcy9ncm91cC1sb2dvLmdpZiI+PC90ZD4KICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj48aW1nIGFsdD0iQXBhY2hlIEFudCBsb2dvIiBib3JkZXI9IjAiIHNyYz0iLi9pbWFnZXMvcHJvamVjdC1sb2dvLmdpZiI+PC90ZD4KICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+CiAgICAgICAgICAgICAgPGZvcm0gdGFyZ2V0PSJfYmxhbmsiIG9uc3VibWl0PSJxLnZhbHVlID0gcXVlcnkudmFsdWUgKyAnIHNpdGU6YW50LmFwYWNoZS5vcmcnIiBhY3Rpb249Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2giIG1ldGhvZD0iZ2V0Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBzdW1tYXJ5PSJzZWFyY2giIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBiZ2NvbG9yPSIjNEM2QzhGIj4KICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj48aW1nIGhlaWdodD0iMTAiIHdpZHRoPSIxIiBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9zcGFjZXIuZ2lmIj48L3RkPgogICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkPjxpbWcgaGVpZ2h0PSIxIiB3aWR0aD0iMSIgYWx0PSIiIHNyYz0iLi9pbWFnZXMvc3BhY2VyLmdpZiI+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgbm93cmFwPSJub3dyYXAiIGNsYXNzPSJzZWFyY2hjYXB0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJxIiB0eXBlPSJoaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHNpemU9IjE1IiBpZD0icXVlcnkiIHR5cGU9InRleHQiPgogICAgICAgICAgICAgICAgICAgICAgPGltZyBoZWlnaHQ9IjEiIHdpZHRoPSI1IiBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9zcGFjZXIuZ2lmIj4KICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJTZWFyY2giIHZhbHVlPSJTZWFyY2giIHR5cGU9InN1Ym1pdCI+CiAgICAgICAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICAgICAgICB0aGUgQXBhY2hlIEFudCBzaXRlCiAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQ+PGltZyBoZWlnaHQ9IjEiIHdpZHRoPSIxIiBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9zcGFjZXIuZ2lmIj48L3RkPgogICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkPjxpbWcgYWx0PSIiIGJvcmRlcj0iMCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjkiIHNyYz0iLi9pbWFnZXMvc2VhcmNoLWxlZnQuZ2lmIj48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZD48aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL3NwYWNlci5naWYiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPjxpbWcgYWx0PSIiIGJvcmRlcj0iMCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjkiIHNyYz0iLi9pbWFnZXMvc2VhcmNoLXJpZ2h0LmdpZiI+PC90ZD4KICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYiI+CiAgICAgICAgICAgICAgPHRhYmxlIHN1bW1hcnk9InRhYiBiYXIiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iOCI+PGltZyBhbHQ9IiIgaGVpZ2h0PSI1IiB3aWR0aD0iOCIgc3JjPSIuL2ltYWdlcy9zcGFjZXIuZ2lmIj48L3RkPjx0ZCB2YWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgc3VtbWFyeT0ic2VsZWN0ZWQgdGFiIiBzdHlsZT0iaGVpZ2h0OiAxLjVlbSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUiIGJnY29sb3I9IiM0QzZDOEYiPjxpbWcgaGVpZ2h0PSI1IiB3aWR0aD0iNSIgYWx0PSIiIHNyYz0iLi9pbWFnZXMvdGFiU2VsLWxlZnQuZ2lmIj48L3RkPjx0ZCB2YWxpZ249Im1pZGRsZSIgYmdjb2xvcj0iIzRDNkM4RiI+PGZvbnQgY29sb3I9IiNmZmZmZmYiIHNpemU9IjIiIGZhY2U9IkFyaWFsLCBIZWx2ZXRpY2EsIFNhbnMtc2VyaWYiPjxiPkhvbWU8L2I+PC9mb250PjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNSIgYmdjb2xvcj0iIzRDNkM4RiI+PGltZyBoZWlnaHQ9IjUiIHdpZHRoPSI1IiBhbHQ9IiIgc3JjPSIuL2ltYWdlcy90YWJTZWwtcmlnaHQuZ2lmIj48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjUiPjxpbWcgYWx0PSIiIGhlaWdodD0iOCIgd2lkdGg9IjgiIHNyYz0iLi9pbWFnZXMvc3BhY2VyLmdpZiI+PC90ZD48dGQgdmFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIHN1bW1hcnk9Im5vbiBzZWxlY3RlZCB0YWIiIHN0eWxlPSJoZWlnaHQ6IDEuNGVtIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1IiBiZ2NvbG9yPSIjQjJDNEUwIj48aW1nIGhlaWdodD0iNSIgd2lkdGg9IjUiIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL3RhYi1sZWZ0LmdpZiI+PC90ZD48dGQgdmFsaWduPSJtaWRkbGUiIGJnY29sb3I9IiNCMkM0RTAiPjxhIGhyZWY9Ii4vcHJvamVjdHMvaW5kZXguaHRtbCI+PGZvbnQgc2l6ZT0iMiIgZmFjZT0iQXJpYWwsIEhlbHZldGljYSwgU2Fucy1zZXJpZiI+UHJvamVjdHM8L2ZvbnQ+PC9hPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNSIgYmdjb2xvcj0iI0IyQzRFMCI+PGltZyBoZWlnaHQ9IjUiIHdpZHRoPSI1IiBhbHQ9IiIgc3JjPSIuL2ltYWdlcy90YWItcmlnaHQuZ2lmIj48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImJsdWViYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIAogIDxkaXYgY2xhc3M9Im1lbnVjb250YWluZXIiPgogICAgPGRpdiBjbGFzcz0ibWVudSI+CiAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGkgY2xhc3M9Im1lbnVoZWFkZXIiPkFwYWNoZSBBbnQKICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi9pbmRleC5odG1sIj5XZWxjb21lPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4vbGljZW5zZS5odG1sIj5MaWNlbnNlPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4vYW50bmV3cy5odG1sIj5OZXdzPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJtZW51aGVhZGVyIj5Eb2N1bWVudGF0aW9uCiAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4vbWFudWFsL2luZGV4Lmh0bWwiPk1hbnVhbDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuL3Byb2plY3RzLmh0bWwiPlJlbGF0ZWQgUHJvamVjdHM8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi9leHRlcm5hbC5odG1sIj5FeHRlcm5hbCBUb29scyBhbmQgVGFza3M8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi9yZXNvdXJjZXMuaHRtbCI+UmVzb3VyY2VzPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWwiPkZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2FudC9Gcm9udFBhZ2UiPldpa2k8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi9wcm9ibGVtcy5odG1sIj5IYXZpbmcgUHJvYmxlbXM/PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJtZW51aGVhZGVyIj5Eb3dubG9hZAogICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vYW50LmFwYWNoZS5vcmcvYmluZG93bmxvYWQuY2dpIj5CaW5hcnkgRGlzdHJpYnV0aW9uczwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vYW50LmFwYWNoZS5vcmcvc3JjZG93bmxvYWQuY2dpIj5Tb3VyY2UgRGlzdHJpYnV0aW9uczwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaSBjbGFzcz0ibWVudWhlYWRlciI+Q29udHJpYnV0aW5nCiAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4vbWFpbC5odG1sIj5NYWlsaW5nIExpc3RzPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4vc3ZuLmh0bWwiPlN1YnZlcnNpb24gUmVwb3NpdG9yaWVzPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4vbmlnaHRsaWVzLmh0bWwiPk5pZ2h0bHkgQnVpbGRzPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4vYnVncy5odG1sIj5CdWcgRGF0YWJhc2U8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGkgY2xhc3M9Im1lbnVoZWFkZXIiPlNwb25zb3JzaGlwCiAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3RoYW5rcy5odG1sIj5UaGFua3M8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vc3BvbnNvcnNoaXAuaHRtbCI+U3BvbnNvcnNoaXA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vY29udHJpYnV0aW5nLmh0bWwiPkRvbmF0aW9uczwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaSBjbGFzcz0ibWVudWhlYWRlciI+UHJvamVjdCBNYW5hZ2VtZW50CiAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4vY29udHJpYnV0b3JzLmh0bWwiPkNvbnRyaWJ1dG9yczwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuL21pc3Npb24uaHRtbCI+QXBhY2hlIEFudCBNaXNzaW9uPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4vYnlsYXdzLmh0bWwiPlByb2plY3QgQnlsYXdzPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4vbGVnYWwuaHRtbCI+TGVnYWw8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgIDwvZGl2PgogICAgPGNlbnRlcj4KICAgIDwhLS0jaW5jbHVkZSB2aXJ0dWFsPSIvYWRzL2J1dHRvbmJhci5odG1sIiAtLT4KICAgIDwvY2VudGVyPgogICAgPGltZyBzdHlsZT0iZmxvYXQ6IGxlZnQiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCIgYm9yZGVyPSIwIiBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9tZW51LWxlZnQuZ2lmIj4KICAgIDxpbWcgc3R5bGU9ImZsb2F0OiByaWdodCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIiBib3JkZXI9IjAiIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL21lbnUtcmlnaHQuZ2lmIj4KICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibGlnaHRibHVlYmFyIj4mbmJzcDs8L2Rpdj4KICA8ZGl2IGNsYXNzPSJtYWluIj4KICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgIDxoMSBjbGFzcz0idGl0bGUiPkZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zPC9oMT4KICAgIAogICAgICAgIDxoMyBjbGFzcz0ic2VjdGlvbiI+UXVlc3Rpb25zPC9oMz4KICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0idG9jIj5BYm91dCB0aGlzIEZBUTwvaDQ+CiAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNsYXRlc3QtdmVyc2lvbiI+CiAgV2hlcmUgZG8gSSBmaW5kIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzCiAgICAgICAgZG9jdW1lbnQ/CiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNhZGRpbmctZmFxcyI+CiAgSG93IGNhbiBJIGNvbnRyaWJ1dGUgdG8gdGhpcyBGQVE/CiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNjcmVhdGluZy1mYXEiPgogIEhvdyBkbyB5b3UgY3JlYXRlIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhpcwogICAgICAgIEZBUT8KICAgICAgPC9hPjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9InRvYyI+R2VuZXJhbDwvaDQ+CiAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiN3aGF0LWlzLWFudCI+CiAgV2hhdCBpcyBBcGFjaGUgQW50PwogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjYW50LW5hbWUiPgogIFdoeSBkbyB5b3UgY2FsbCBpdCBBbnQ/CiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNoaXN0b3J5Ij4KICBUZWxsIHVzIGEgbGl0dGxlIGJpdCBhYm91dCBBbnQncyBoaXN0b3J5LgogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0idG9jIj5JbnN0YWxsYXRpb248L2g0PgogICAgICAgIDx1bD4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjbm8tZ251LXRhciI+CiAgSSBnZXQgY2hlY2tzdW0gZXJyb3JzIHdoZW4gSSB0cnkgdG8gZXh0cmFjdCB0aGUKICAgICAgPGNvZGU+dGFyLmd6PC9jb2RlPiBkaXN0cmlidXRpb24gZmlsZS4gV2h5PwogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjUmVkSGF0X0VTXzMiPgogIEhvdyBkbyB5b3UgZ2V0IGFudC0xLjYueCAob3IgYW55IHZlcnNpb24gbGF0ZXIgdGhhbgogICAgICAxLjUuMikgdG8gd29yayBvbiBvbiBSZWRIYXQgRVMgMz8KICAgICAgPC9hPjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9InRvYyI+SG93IGRvIEkgLi4uPC9oND4KICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI2ltcGxlbWVudC1vcy1zcGVjaWZpYy1jb25maWd1cmF0aW9uIj4KICBIb3cgZG8gSSByZWFsaXplIG9zLS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucz8KICAgICAgPC9hPjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI2FkZGluZy1leHRlcm5hbC10YXNrcyI+CiAgSG93IGRvIEkgYWRkIGFuIGV4dGVybmFsIHRhc2sgdGhhdCBJJ3ZlIHdyaXR0ZW4gdG8gdGhlCiAgICAgIHBhZ2UgIkV4dGVybmFsIFRvb2xzIGFuZCBUYXNrcyI/CiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNjcmVhdGUtZXh0ZW5zaW9ucyI+CiAgSG93IGRvIEkgY3JlYXRlIG5ldyB0YXNrcz8KICAgICAgPC9hPjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI3Bhc3NpbmctY2xpLWFyZ3MiPgogIEhvdyBkbyBJIHBhc3MgcGFyYW1ldGVycyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgdG8gbXkKICAgICAgICBidWlsZCBmaWxlPwogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjamlrZXMtc3dpdGNoZXMiPgogIEhvdyBjYW4gSSB1c2UgSmlrZXMtc3BlY2lmaWMgY29tbWFuZC1saW5lCiAgICAgICAgc3dpdGNoZXM/CiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNzaGVsbC1yZWRpcmVjdC0xIj4KICBIb3cgZG8gSSBpbmNsdWRlIGEgJmx0OyBjaGFyYWN0ZXIgaW4gbXkgY29tbWFuZC1saW5lIGFyZ3VtZW50cz8KICAgICAgPC9hPjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI3NoZWxsLXJlZGlyZWN0LTIiPgogIEhvdyBkbyBJIHJlZGlyZWN0IHN0YW5kYXJkIGlucHV0IG9yIHN0YW5kYXJkIG91dHB1dAogICAgICAgIGluIHRoZSA8Y29kZT4mbHQ7ZXhlYyZndDs8L2NvZGU+IHRhc2s/CiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNiYXRjaC1zaGVsbC1leGVjdXRlIj4KICBIb3cgZG8gSSBleGVjdXRlIGEgYmF0Y2ggZmlsZSBvciBzaGVsbCBzY3JpcHQgZnJvbSBBbnQ/CiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNtdWx0aS1jb25kaXRpb25zIj4KICBJIHdhbnQgdG8gZXhlY3V0ZSBhIHBhcnRpY3VsYXIgdGFyZ2V0IG9ubHkgaWYKICAgICAgICBtdWx0aXBsZSBjb25kaXRpb25zIGFyZSB0cnVlLgogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjZW5jb2RpbmciPgogIEhvdyBjYW4gSSBpbmNsdWRlIG5hdGlvbmFsIGNoYXJhY3RlcnMgbGlrZSBHZXJtYW4KICAgICAgICB1bWxhdXRzIGluIG15IGJ1aWxkIGZpbGU/CiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiN1c2UtemlwLWluc3RlYWQtb2YtamFyIj4KICBIb3cgZG8gSSB1c2UgPGNvZGU+amFyPC9jb2RlPidzIDxjb2RlPk08L2NvZGU+IHN3aXRjaD8KICAgICAgSSBkb24ndCB3YW50IGEgTUFOSUZFU1QuCiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNwcm9wZXJ0eXZhbHVlLWFzLW5hbWUtZm9yLXByb3BlcnR5Ij4KICBIb3cgY2FuIEkgZG8gc29tZXRoaW5nIGxpa2UgPGNvZGU+Jmx0O3Byb3BlcnR5IG5hbWU9InByb3AiCiAgICAgIHZhbHVlPSIkeyR7YW5vdGhlcnByb3B9fSIvJmd0OzwvY29kZT4gKGRvdWJsZSBleHBhbmRpbmcgdGhlIHByb3BlcnR5KT8KICAgICAgPC9hPjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI2RlbGV0ZS1kaXJlY3RvcnktY2hpbGRyZW4tb25seSI+CiAgSG93IGNhbiBJIGRlbGV0ZSBldmVyeXRoaW5nIGJlbmVhdGggYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSwKICAgIHByZXNlcnZpbmcgdGhlIGRpcmVjdG9yeSBpdHNlbGY/CiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJ0b2MiPkl0IGRvZXNuJ3Qgd29yayAoYXMgZXhwZWN0ZWQpPC9oND4KICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI2dlbmVyYWwtYWR2aWNlIj4KICBHZW5lcmFsIEFkdmljZQogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjYWx3YXlzLXJlY29tcGlsZXMiPgogIFdoeSBkb2VzIEFudCBhbHdheXMgcmVjb21waWxlIGFsbCBteSBKYXZhIGZpbGVzPwogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjZGVmYXVsdGV4Y2x1ZGVzIj4KICBJJ3ZlIHVzZWQgYSA8Y29kZT4mbHQ7ZGVsZXRlJmd0OzwvY29kZT4gdGFzayB0bwogICAgICBkZWxldGUgdW53YW50ZWQgU291cmNlU2FmZSBjb250cm9sIGZpbGVzIChDVlMgZmlsZXMsIGVkaXRvcgogICAgICBiYWNrdXAgZmlsZXMsIGV0Yy4pLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcms7IHRoZSBmaWxlcwogICAgICBuZXZlciBnZXQgZGVsZXRlZC4gV2hhdCdzIHdyb25nPwogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjc3RvcC1kZXBlbmRlbmN5Ij4KICBJIGhhdmUgYSB0YXJnZXQgSSB3YW50IHRvIHNraXAgaWYgYSBwcm9wZXJ0eSBpcyBzZXQsCiAgICAgIHNvIEkgaGF2ZSA8Y29kZT51bmxlc3M9InByb3BlcnR5IjwvY29kZT4gYXMgYW4gYXR0cmlidXRlCiAgICAgIG9mIHRoZSB0YXJnZXQsIGJ1dCBhbGwgdGhlIHRhcmdldHMgdGhpcyB0YXJnZXQKICAgICAgZGVwZW5kcyBvbiBhcmUgc3RpbGwgZXhlY3V0ZWQuIFdoeT8KICAgICAgPC9hPjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI2luY2x1ZGUtb3JkZXIiPgogIEluIG15IDxjb2RlPiZsdDtmaWxlc2V0Jmd0OzwvY29kZT4sIEkndmUgcHV0IGluIGFuCiAgICAgIDxjb2RlPiZsdDtleGNsdWRlJmd0OzwvY29kZT4gb2YgYWxsIGZpbGVzIGZvbGxvd2VkIGJ5IGFuCiAgICAgIDxjb2RlPiZsdDtpbmNsdWRlJmd0OzwvY29kZT4gb2YganVzdCB0aGUgZmlsZXMgSSB3YW50LCBidXQgaXQKICAgICAgaXNuJ3QgZ2l2aW5nIG1lIGFueSBmaWxlcyBhdCBhbGwuIFdoYXQncyB3cm9uZz8KICAgICAgCiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNwcm9wZXJ0aWVzLW5vdC10cmltbWVkIj4KICA8Y29kZT5hbnQ8L2NvZGU+IGZhaWxlZCB0byBidWlsZCBteSBwcm9ncmFtIHZpYSBqYXZhYwogICAgICBldmVuIHdoZW4gSSBwdXQgdGhlIG5lZWRlZCBqYXJzIGluIGFuIGV4dGVybmFsCiAgICAgIDxjb2RlPmJ1aWxkLnByb3BlcnRpZXM8L2NvZGU+IGZpbGUgYW5kIHJlZmVyZW5jZSB0aGVtIGJ5CiAgICAgIDxjb2RlPnBhdGhlbGVtZW50PC9jb2RlPiBvciA8Y29kZT5jbGFzc3BhdGggcmVmaWQ8L2NvZGU+LgogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjd2luemlwLWxpZXMiPgogIEFudCBjcmVhdGVzIFdBUiBmaWxlcyB3aXRoIGEgbG93ZXItY2FzZQogICAgICAgIDxjb2RlPndlYi1pbmY8L2NvZGU+IG9yIEpBUiBmaWxlcyB3aXRoIGEgbG93ZXItY2FzZQogICAgICAgIDxjb2RlPm1ldGEtaW5mPC9jb2RlPiBkaXJlY3RvcnkuCiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNOb0NsYXNzRGVmRm91bmRFcnJvciI+CiAgSSBpbnN0YWxsZWQgQW50IDEuNi54IGFuZCBub3cgZ2V0CiAgICAgICAgPGNvZGU+RXhjZXB0aW9uIGluIHRocmVhZCAibWFpbiIgamF2YS5sYW5nLk5vQ2xhc3NEZWZGb3VuZEVycm9yOgogICAgICAgIDwvY29kZT4KICAgICAgCiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNJbnN0YW50aWF0aW9uRXhjZXB0aW9uIj4KICBJIGluc3RhbGxlZCBBbnQgMS42LnggYW5kIG5vdyBnZXQKICAgICAgICA8Y29kZT5qYXZhLmxhbmcuSW5zdGFudGlhdGlvbkV4Y2VwdGlvbjogb3JnLmFwYWNoZS50b29scy5hbnQuTWFpbjwvY29kZT4KICAgICAgCiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNtYW5nbGVkLW1hbmlmZXN0Ij4KICAKICAgICAgICBXaGVuZXZlciBJIHVzZSB0aGUgQW50IGphciBvciBtYW5pZmVzdCByZWxhdGVkIHRhc2tzLCBsb25nIGxpbmVzIGluCiAgICAgICAgbXkgbWFuaWZlc3QgYXJlIHdyYXBwZWQgYXQgNzAgY2hhcmFjdGVycyBhbmQgdGhlIHJlc3VsdGluZyBqYXIgZG9lcwogICAgICAgIG5vdCB3b3JrIGluIG15IGFwcGxpY2F0aW9uIHNlcnZlci4gV2h5IGRvZXMgQW50IGRvIHRoaXM/CiAgICAgIAogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0idG9jIj5BbnQgYW5kIElERXMvRWRpdG9yczwvaDQ+CiAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNpbnRlZ3JhdGlvbiI+CiAgSXMgQW50IHN1cHBvcnRlZCBieSBteSBJREUvRWRpdG9yPwogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjZW1hY3MtbW9kZSI+CiAgV2h5IGRvZXNuJ3QgKFgpRW1hY3MvdmkvTWFjT1MgWCdzIHByb2plY3QgYnVpbGRlcgogICAgICBjb3JyZWN0bHkgcGFyc2UgdGhlIGVycm9yIG1lc3NhZ2VzIGdlbmVyYXRlZCBieSBBbnQ/CiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJ0b2MiPkFkdmFuY2VkIElzc3VlczwvaDQ+CiAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNkdGQiPgogIElzIHRoZXJlIGEgRFREIHRoYXQgSSBjYW4gdXNlIHRvIHZhbGlkYXRlIG15IGJ1aWxkCiAgICAgIGZpbGVzPwogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjeG1sLWVudGl0eS1pbmNsdWRlIj4KICBIb3cgZG8gSSBpbmNsdWRlIGFuIFhNTCBzbmlwcGV0IGluIG15IGJ1aWxkIGZpbGU/CiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNtYWlsLWxvZ2dlciI+CiAgSG93IGRvIEkgc2VuZCBhbiBlbWFpbCB3aXRoIHRoZSByZXN1bHQgb2YgbXkgYnVpbGQKICAgICAgICBwcm9jZXNzPwogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjbGlzdGVuZXItcHJvcGVydGllcyI+CiAgSG93IGRvIEkgZ2V0IGF0IHRoZSBwcm9wZXJ0aWVzIHRoYXQgQW50IHdhcyBydW5uaW5nCiAgICAgIHdpdGggZnJvbSBpbnNpZGUgQnVpbGRMaXN0ZW5lcj8KICAgICAgPC9hPjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9InRvYyI+S25vd24gUHJvYmxlbXM8L2g0PgogICAgICAgIDx1bD4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjMTcwLXJlcXVpcmVzLWp1bml0Ij4KICBBbnQgMS43LjAgZG9lc24ndCBidWlsZCBmcm9tIHNvdXJjZXMgd2l0aG91dAogICAgICAgIEpVbml0CiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNyZW1vdmUtY3IiPgogICZsdDtjaG1vZCZndDsgb3IgJmx0O2V4ZWMmZ3Q7IGRvZXNuJ3Qgd29yayBpbiBBbnQKICAgICAgICAxLjMgb24gVW5peAogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjamF2YWRvYy1jYW5ub3QtZXhlY3V0ZSI+CiAgSmF2YURvYyBmYWlsZWQ6IGphdmEuaW8uSU9FeGNlcHRpb246IGphdmFkb2M6IGNhbm5vdCBleGVjdXRlCiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNkZWxlZ2F0aW5nLWNsYXNzbG9hZGVyIj4KICAmbHQ7c3R5bGUmZ3Q7IG9yICZsdDtqdW5pdCZndDsgaWdub3JlcyBteQogICAgICAmbHQ7Y2xhc3NwYXRoJmd0OwogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjZGVsZWdhdGluZy1jbGFzc2xvYWRlci0xLjUiPgogICZsdDtzdHlsZSZndDsgb3IgJmx0O2p1bml0Jmd0OyBpZ25vcmVzIG15CiAgICAgICZsdDtjbGFzc3BhdGgmZ3Q7IC0gQW50IDEuNS54IHZlcnNpb24KICAgICAgPC9hPjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI2RlbGVnYXRpbmctY2xhc3Nsb2FkZXItMS42Ij4KICAmbHQ7c3R5bGUmZ3Q7IG9yICZsdDtqdW5pdCZndDsgaWdub3JlcyBteQogICAgICAmbHQ7Y2xhc3NwYXRoJmd0OyAtIEFudCAxLjYueCB2ZXJzaW9uCiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiN3aW54cC1qZGsxNC1hbnQxNCI+CiAgV2hlbiBydW5uaW5nIEFudCAxLjQgb24gV2luZG93cyBYUCBhbmQgSkRLIDEuNCwgSSBnZXQKICAgICAgdmFyaW91cyBlcnJvcnMgd2hlbiB0cnlpbmcgdG8gPGNvZGU+Jmx0O2V4ZWMmZ3Q7PC9jb2RlPiwgZm9yawogICAgICA8Y29kZT4mbHQ7amF2YSZndDs8L2NvZGU+IG9yIGFjY2VzcyBlbnZpcm9ubWVudAogICAgICB2YXJpYWJsZXMuCiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiMxLjUtY3lnd2luLXNoIj4KICBUaGUgPGNvZGU+YW50PC9jb2RlPiB3cmFwcGVyIHNjcmlwdCBvZiBBbnQgMS41IGZhaWxzCiAgICAgIGZvciBDeWd3aW4gaWYgPGNvZGU+QU5UX0hPTUU8L2NvZGU+IGlzIHNldCB0byBhIFdpbmRvd3Mgc3R5bGUKICAgICAgcGF0aC4KICAgICAgPC9hPjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iIzEuNS4yLXppcC1icm9rZW4iPgogIDxjb2RlPiZsdDt6aXAmZ3Q7PC9jb2RlPiBpcyBicm9rZW4gaW4gQW50IDEuNS4yLgogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjdW5rbm93bmVsZW1lbnQudGFza2NvbnRhaW5lciI+CiAgCiAgICAgICAgV2h5IGRvIG15IGN1c3RvbSB0YXNrIGNvbnRhaW5lcnMgc2VlIFVua25vd24gRWxlbWVudHMgaW4gQW50IDEuNgogICAgICAgIC0gdGhleSB3b3JrZWQgaW4gQW50IDEuNT8KICAgICAgCiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNqYXZhLmV4Y2VwdGlvbi5zdGFja3RyYWNlIj4KICAKICAgICAgICBUaGUgcHJvZ3JhbSBJIHJ1biB2aWEgJmx0O2phdmEmZ3Q7IHRocm93cyBhbiBleGNlcHRpb24gYnV0IEkKICAgICAgICBjYW4ndCBzZWVtIHRvIGdldCB0aGUgZnVsbCBzdGFjayB0cmFjZS4KICAgICAgCiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNqdW5pdC1uby1ydW50aW1lLXhtbCI+CiAgCiAgICAgICAgVXNpbmcgZm9ybWF0PSJ4bWwiLCAmbHQ7anVuaXQmZ3Q7IGZhaWxzIHdpdGggYQogICAgICAgIDxjb2RlPk5vQ2xhc3NEZWZGb3VuZEVycm9yPC9jb2RlPiBpZiBmb3JrZWQuCiAgICAgIAogICAgICA8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjeGFsYW4tamRrMS41Ij4KICAKICAgICAgICA8Y29kZT4mbHQ7anVuaXRyZXBvcnQmZ3Q7PC9jb2RlPiBkb2Vzbid0IHdvcmsgd2l0aCBKREsgMS41IGJ1dAogICAgICAgIHdvcmtlZCBmaW5lIHdpdGggSkRLIDEuNC4KICAgICAgCiAgICAgIDwvYT48L2xpPgogICAgICAgICAgICA8L3VsPgogICAgCiAgICAgIDxoMyBjbGFzcz0ic2VjdGlvbiI+QW5zd2VyczwvaDM+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9ImxhdGVzdC12ZXJzaW9uIj48L2E+CiAgICAgIFdoZXJlIGRvIEkgZmluZCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcwogICAgICAgIGRvY3VtZW50PwogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD5UaGUgbGF0ZXN0IHZlcnNpb24gY2FuIGFsd2F5cyBiZSBmb3VuZCBhdCBBbnQncyBob21lcGFnZQogICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2FudC5hcGFjaGUub3JnL2ZhcS5odG1sIj5odHRwOi8vYW50LmFwYWNoZS5vcmcvZmFxLmh0bWw8L2E+LjwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0iYWRkaW5nLWZhcXMiPjwvYT4KICAgICAgSG93IGNhbiBJIGNvbnRyaWJ1dGUgdG8gdGhpcyBGQVE/CiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPlRoZSBwYWdlIHlvdSBhcmUgbG9va2luZyBpdCBpcyBnZW5lcmF0ZWQgZnJvbQogICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9hbnQvY29yZS90cnVuay94ZG9jcy9mYXEueG1sIj50aGlzPC9hPgogICAgICAgICAgZG9jdW1lbnQuICBJZiB5b3Ugd2FudCB0byBhZGQgYSBuZXcgcXVlc3Rpb24sIHBsZWFzZSBzdWJtaXQKICAgICAgICAgIGEgcGF0Y2ggYWdhaW5zdCB0aGlzIGRvY3VtZW50IHRvIG9uZSBvZiBBbnQncyBtYWlsaW5nIGxpc3RzOwogICAgICAgICAgaG9wZWZ1bGx5LCB0aGUgc3RydWN0dXJlIGlzIHNlbGYtZXhwbGFuYXRvcnkuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5JZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8gY3JlYXRlIGEgcGF0Y2gsIHNlZSB0aGUgcGF0Y2hlcwogICAgICAgICAgc2VjdGlvbiBvZiA8YSBocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3NpdGUvc291cmNlLmh0bWwiPnRoaXMKICAgICAgICAgIHBhZ2U8L2E+LjwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0iY3JlYXRpbmctZmFxIj48L2E+CiAgICAgIEhvdyBkbyB5b3UgY3JlYXRlIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhpcwogICAgICAgIEZBUT8KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+V2UgdXNlCiAgICAgICAgPGEgaHJlZj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy92ZWxvY2l0eS9hbmFraWEuaHRtbCI+QW5ha2lhPC9hPgogICAgICAgIHRvIHJlbmRlciB0aGUgSFRNTCB2ZXJzaW9uIGZyb20gdGhlIG9yaWdpbmFsIFhNTCBmaWxlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+VGhlIFZlbG9jaXR5IHN0eWxlc2hlZXRzIHVzZWQgdG8gcHJvY2VzcyB0aGUgWE1MIGZpbGVzIGNhbgogICAgICAgIGJlIGZvdW5kIGluIHRoZSA8Y29kZT54ZG9jcy9zdHlsZXNoZWV0czwvY29kZT4gc3ViZGlyZWN0b3J5IG9mCiAgICAgICAgQW50J3MgU1ZOIHJlcG9zaXRvcnkgLSB0aGUgYnVpbGQgZmlsZQogICAgICAgIDxjb2RlPmRvY3MueG1sPC9jb2RlPiBhdCB0aGUgdG9wIGxldmVsIG9mIHRoZSBhbnQgU1ZOCiAgICAgICAgbW9kdWxlICh0cnVuaykgaXMgdXNlZCB0byBkcml2ZSBBbmFraWEuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5UaGlzIGZpbGUgYXNzdW1lcyB0aGF0IHlvdSBoYXZlIHRoZQogICAgICAgIDxjb2RlPmpha2FydGEtc2l0ZTI8L2NvZGU+IENWUyBtb2R1bGUgY2hlY2tlZCBvdXQgYXMgd2VsbCwgYnV0CiAgICAgICAgaWYgeW91IGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb24gZnJvbSBBbmFraWEncyBob21lcGFnZSwgeW91CiAgICAgICAgc2hvdWxkIGdldCBpdCB0byB3b3JrIHdpdGhvdXQgdGhhdC4gIEp1c3QgbWFrZSBzdXJlIGFsbAogICAgICAgIHJlcXVpcmVkIGphcnMgYXJlIGluIHRoZSB0YXNrJ3MgY2xhc3NwYXRoLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0id2hhdC1pcy1hbnQiPjwvYT4KICAgICAgV2hhdCBpcyBBcGFjaGUgQW50PwogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD4gQW50IGlzIGEgSmF2YS1iYXNlZCBidWlsZCB0b29sLiBJbiB0aGVvcnksIGl0IGlzIGtpbmQgb2YKICAgICAgICBsaWtlIE1ha2UsIHdpdGhvdXQgTWFrZSdzIHdyaW5rbGVzIGFuZCB3aXRoIHRoZSBmdWxsCiAgICAgICAgcG9ydGFiaWxpdHkgb2YgcHVyZSBKYXZhIGNvZGUuPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJhbnQtbmFtZSI+PC9hPgogICAgICBXaHkgZG8geW91IGNhbGwgaXQgQW50PwogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD5BY2NvcmRpbmcgdG8gQW50J3Mgb3JpZ2luYWwgYXV0aG9yLCBKYW1lcyBEdW5jYW4KICAgICAgICBEYXZpZHNvbiwgdGhlIG5hbWUgaXMgYW4gYWNyb255bSBmb3IgIkFub3RoZXIgTmVhdAogICAgICAgIFRvb2wiLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+TGF0ZXIgZXhwbGFuYXRpb25zIGdvIGFsb25nIHRoZSBsaW5lcyBvZiAiYW50cwogICAgICAgIGRvIGFuIGV4dHJlbWVseSBnb29kIGpvYiBhdCBidWlsZGluZyB0aGluZ3MiLCBvcgogICAgICAgICJhbnRzIGFyZSB2ZXJ5IHNtYWxsIGFuZCBjYW4gY2FycnkgYSB3ZWlnaHQgZG96ZW5zIG9mIHRpbWVzCiAgICAgICAgdGhlaXIgb3duIiAtIGRlc2NyaWJpbmcgd2hhdCBBbnQgaXMgaW50ZW5kZWQgdG8KICAgICAgICBiZS48L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9Imhpc3RvcnkiPjwvYT4KICAgICAgVGVsbCB1cyBhIGxpdHRsZSBiaXQgYWJvdXQgQW50J3MgaGlzdG9yeS4KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+SW5pdGlhbGx5LCBBbnQgd2FzIHBhcnQgb2YgdGhlIFRvbWNhdCBjb2RlIGJhc2UsIHdoZW4gaXQgd2FzCiAgICAgICAgZG9uYXRlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uIEl0IHdhcwogICAgICAgIGNyZWF0ZWQgYnkgSmFtZXMgRHVuY2FuIERhdmlkc29uLCB3aG8gaXMgYWxzbyB0aGUgb3JpZ2luYWwKICAgICAgICBhdXRob3Igb2YgVG9tY2F0LiBBbnQgd2FzIHRoZXJlIHRvIGJ1aWxkIFRvbWNhdCwgbm90aGluZwogICAgICAgIGVsc2UuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5Tb29uIHRoZXJlYWZ0ZXIsIHNldmVyYWwgb3BlbiBzb3VyY2UgSmF2YSBwcm9qZWN0cyByZWFsaXplZAogICAgICAgIHRoYXQgQW50IGNvdWxkIHNvbHZlIHRoZSBwcm9ibGVtcyB0aGV5IGhhZCB3aXRoIE1ha2VmaWxlcy4KICAgICAgICBTdGFydGluZyB3aXRoIHRoZSBwcm9qZWN0cyBob3N0ZWQgYXQgSmFrYXJ0YSBhbmQgdGhlIG9sZCBKYXZhCiAgICAgICAgQXBhY2hlIHByb2plY3QsIEFudCBzcHJlYWQgbGlrZSBhIHZpcnVzIGFuZCBpcyBub3cgdGhlIGJ1aWxkCiAgICAgICAgdG9vbCBvZiBjaG9pY2UgZm9yIGEgbG90IG9mIHByb2plY3RzLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+SW4gSmFudWFyeSAyMDAwLCBBbnQgd2FzIG1vdmVkIHRvIGEgc2VwYXJhdGUgQ1ZTIG1vZHVsZSBhbmQKICAgICAgICB3YXMgcHJvbW90ZWQgdG8gYSBwcm9qZWN0IG9mIGl0cyBvd24sIGluZGVwZW5kZW50IG9mCiAgICAgICAgVG9tY2F0LCBhbmQgYmVjYW1lIEFwYWNoZSBBbnQuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5UaGUgZmlyc3QgdmVyc2lvbiBvZiBBbnQgdGhhdCB3YXMgZXhwb3NlZCB0byBhIGxhcmdlciBhdWRpZW5jZQogICAgICAgIHdhcyB0aGUgb25lIHRoYXQgc2hpcHBlZCB3aXRoIFRvbWNhdCdzIDMuMSByZWxlYXNlIG9uIDE5IEFwcmlsCiAgICAgICAgMjAwMC4gIFRoaXMgdmVyc2lvbiBoYXMgbGF0ZXIgYmVlbiByZWZlcnJlZCB0byBhcyBBbnQKICAgICAgICAwLjMuMS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRoZSBmaXJzdCBvZmZpY2lhbCByZWxlYXNlIG9mIEFudCBhcyBhIHN0YW5kLWFsb25lIHByb2R1Y3Qgd2FzCiAgICAgICAgQW50IDEuMSwgcmVsZWFzZWQgb24gMTkgSnVseSAyMDAwLiAgVGhlIGNvbXBsZXRlIHJlbGVhc2UKICAgICAgICBoaXN0b3J5OjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJGb3JyZXN0VGFibGUiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iNCI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgPHRoIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICBBbnQgVmVyc2lvbgogICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgUmVsZWFzZSBEYXRlCiAgICAgIDwvdGg+CiAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMS4xCiAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICAxOSBKdWx5IDIwMDAKICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICAxLjIKICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIDI0IE9jdG9iZXIgMjAwMAogICAgICA8L3RkPgogICAgICA8L3RyPgogICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIDEuMwogICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMyBNYXJjaCAyMDAxCiAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMS40CiAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICAzIFNlcHRlbWJlciAyMDAxCiAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMS40LjEKICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIDExIE9jdG9iZXIgMjAwMQogICAgICA8L3RkPgogICAgICA8L3RyPgogICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIDEuNQogICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMTAgSnVseSAyMDAyCiAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMS41LjEKICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIDMgT2N0b2JlciAyMDAyCiAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMS41LjIKICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIDMgTWFyY2ggMjAwMwogICAgICA8L3RkPgogICAgICA8L3RyPgogICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIDEuNS4zCiAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICA5IEFwcmlsIDIwMDMKICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICAxLjUuNAogICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMTIgQXVndXN0IDIwMDMKICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICAxLjYuMAogICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMTggRGVjZW1iZXIgMjAwMwogICAgICA8L3RkPgogICAgICA8L3RyPgogICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIDEuNi4xCiAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICAxMiBGZWJydWFyeSAyMDA0CiAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMS42LjIKICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIDE2IEp1bHkgMjAwNAogICAgICA8L3RkPgogICAgICA8L3RyPgogICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIDEuNi4zCiAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICAyOCBBcHJpbCAyMDA1CiAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMS42LjQKICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIDE5IE1heSAyMDA1CiAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMS42LjUKICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIDIgSnVuZSAyMDA1CiAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMS43LjAKICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIDE5IERlY2VtYmVyIDIwMDYKICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICAxLjcuMQogICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgMjcgSnVuZSAyMDA4CiAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJuby1nbnUtdGFyIj48L2E+CiAgICAgIEkgZ2V0IGNoZWNrc3VtIGVycm9ycyB3aGVuIEkgdHJ5IHRvIGV4dHJhY3QgdGhlCiAgICAgIDxjb2RlPnRhci5nejwvY29kZT4gZGlzdHJpYnV0aW9uIGZpbGUuIFdoeT8KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+QW50J3MgZGlzdHJpYnV0aW9uIGNvbnRhaW5zIGZpbGUgbmFtZXMgdGhhdCBhcmUgbG9uZ2VyCiAgICAgICAgdGhhbiAxMDAgY2hhcmFjdGVycywgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc3RhbmRhcmQKICAgICAgICB0YXIgZmlsZSBmb3JtYXQuIFNldmVyYWwgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZiB0YXIgdXNlCiAgICAgICAgZGlmZmVyZW50IGFuZCBpbmNvbXBhdGlibGUgd2F5cyB0byB3b3JrIGFyb3VuZCB0aGlzCiAgICAgICAgcmVzdHJpY3Rpb24uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5BbnQncyAmbHQ7dGFyJmd0OyB0YXNrIGNhbiBjcmVhdGUgdGFyIGFyY2hpdmVzIHRoYXQgdXNlCiAgICAgICAgdGhlIEdOVSB0YXIgZXh0ZW5zaW9uLCBhbmQgdGhpcyBoYXMgYmVlbiB1c2VkIHdoZW4gcHV0dGluZwogICAgICAgIHRvZ2V0aGVyIHRoZSBkaXN0cmlidXRpb24uIElmIHlvdSBhcmUgdXNpbmcgYSBkaWZmZXJlbnQKICAgICAgICB2ZXJzaW9uIG9mIHRhciAoZm9yIGV4YW1wbGUsIHRoZSBvbmUgc2hpcHBpbmcgd2l0aCBTb2xhcmlzKSwKICAgICAgICB5b3UgY2Fubm90IHVzZSBpdCB0byBleHRyYWN0IHRoZSBhcmNoaXZlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+VGhlIHNvbHV0aW9uIGlzIHRvIGVpdGhlciBpbnN0YWxsIEdOVSB0YXIsIHdoaWNoIGNhbiBiZQogICAgICAgIGZvdW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90YXIvdGFyLmh0bWwiPmhlcmU8L2E+LAogICAgICAgIG9yIHVzZSB0aGUgemlwIGFyY2hpdmUgaW5zdGVhZCAoeW91IGNhbiBleHRyYWN0IGl0IHVzaW5nCiAgICAgICAgPGNvZGU+amFyIHhmPC9jb2RlPikuPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJSZWRIYXRfRVNfMyI+PC9hPgogICAgICBIb3cgZG8geW91IGdldCBhbnQtMS42LnggKG9yIGFueSB2ZXJzaW9uIGxhdGVyIHRoYW4KICAgICAgMS41LjIpIHRvIHdvcmsgb24gb24gUmVkSGF0IEVTIDM/CiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPlJlZGhhdCBFUyAzLjAgY29tZXMgaW5zdGFsbGVkIHdpdGggYW50IDEuNS4yLiBFdmVuIGlmIHlvdQogICAgICAgIGhhdmUgeW91ciBQQVRIIGFuZCBBTlRfSE9NRSB2YXJpYWJsZXMgc2V0IGNvcnJlY3RseSB0byBhIGxhdGVyCiAgICAgICAgdmVyc2lvbiBvZiBhbnQsIHlvdSB3aWxsIGFsd2F5cyBiZSBmb3JjZWQgdG8gdXNlIHRoZQogICAgICAgIHByZWluc3RhbGxlZCB2ZXJzaW9uLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+VG8gdXNlIGEgbGF0ZXIgdmVyc2lvbiBvZiBhbnQgb24gdGhpcyBPUyB5b3UgY291bGQgZG8gdGhlCiAgICAgICAgZm9sbG93aW5nOjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZSI+CiQgYW50IC12ZXJzaW9uCkFwYWNoZSBBbnQgdmVyc2lvbiAxLjUuMi0yMyBjb21waWxlZCBvbiBOb3ZlbWJlciAxMiAyMDAzCiQgc3UgLQojIHJwbSAtZSBhbnQgYW50LWxpYnMKIyBleGl0CiQgaGFzaCAtcgokIGFudCAtdmVyc2lvbgpBcGFjaGUgQW50IHZlcnNpb24gMS42LjIgY29tcGlsZWQgb24gSnVseSAxNiAyMDA0CjwvcHJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJpbXBsZW1lbnQtb3Mtc3BlY2lmaWMtY29uZmlndXJhdGlvbiI+PC9hPgogICAgICBIb3cgZG8gSSByZWFsaXplIG9zLS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucz8KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+VGhlIGNvcmUgaWRlYSBpcyB1c2luZyBwcm9wZXJ0eSBmaWxlcyB3aGljaCBuYW1lIGFjY29yZHMgdG8gdGhlCiAgICAgICAgb3MtbmFtZS4gVGhlbiBzaW1wbHkgdXNlIHRoZSBidWlsZC1pbiBwcm9wZXJ0eSA8dHQ+b3MubmFtZTwvdHQ+LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+Rm9yIGJldHRlciB1c2UgeW91IHNob3VsZCBhbHNvIHByb3ZpZGUgYSBmaWxlIHdpdGggZGVmYXVsIHZhbHVlcy4KICAgICAgICBCdXQgYmUgY2FyZWZ1bCB3aXRoIHRoZSBjb3JyZWN0IG9zLW5hbWVzLiBGb3IgdGVzdCBzaW1wbHkgJmx0O2VjaG8mZ3Q7CiAgICAgICAgdGhlICR7b3MubmFtZX0gb24gYWxsIG1hY2hpbmVzIGFuZCB5b3UgY2FuIGJlIHN1cmUgdG8gdXNlIHRoZSByaWdodAogICAgICAgIGZpbGUgbmFtZXMuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlIj4KICAgICAgICAgICZsdDtwcm9wZXJ0eSBmaWxlPSZxdW90OyR7b3MubmFtZX0ucHJvcGVydGllcyZxdW90Oy8mZ3Q7CiAgICAgICAgICAmbHQ7cHJvcGVydHkgZmlsZT0mcXVvdDtkZWZhdWx0LnByb3BlcnRpZXMmcXVvdDsvJmd0Owo8L3ByZT4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0iYWRkaW5nLWV4dGVybmFsLXRhc2tzIj48L2E+CiAgICAgIEhvdyBkbyBJIGFkZCBhbiBleHRlcm5hbCB0YXNrIHRoYXQgSSd2ZSB3cml0dGVuIHRvIHRoZQogICAgICBwYWdlICJFeHRlcm5hbCBUb29scyBhbmQgVGFza3MiPwogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD5Kb2luIGFuZCBwb3N0IGEgbWVzc2FnZSB0byB0aGUgZGV2IG9yIHVzZXIgbWFpbGluZwogICAgICAgIGxpc3QgKG9uZSBsaXN0IGlzIGVub3VnaCksIGluY2x1ZGluZyB0aGUgZm9sbG93aW5nCiAgICAgICAgaW5mb3JtYXRpb246PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+dGhlIG5hbWUgb2YgdGhlIHRhc2svdG9vbDwvbGk+CiAgICAgICAgICA8bGk+YSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgdGFzay90b29sPC9saT4KICAgICAgICAgIDxsaT5hIENvbXBhdGliaWxpdHk6IGVudHJ5IHN0YXRpbmcgd2l0aCB3aGljaCB2ZXJzaW9uKHMpIG9mCiAgICAgICAgICBBbnQgdGhlIHRvb2wvdGFzayBpcyBjb21wYXRpYmxlIHRvPC9saT4KICAgICAgICAgIDxsaT5hIFVSTDogZW50cnkgbGlua2luZyB0byB0aGUgbWFpbiBwYWdlIG9mIHRoZSB0b29sL3Rhc2s8L2xpPgogICAgICAgICAgPGxpPmEgQ29udGFjdDogZW50cnkgY29udGFpbmluZyB0aGUgZW1haWwgYWRkcmVzcyBvciB0aGUgVVJMCiAgICAgICAgICBvZiBhIHdlYnBhZ2UgZm9yIHRoZSBwZXJzb24gb3IgbGlzdCB0byBjb250YWN0IGZvciBpc3N1ZXMKICAgICAgICAgIHJlbGF0ZWQgdG8gdGhlIHRvb2wvdGFzay4gIDxzdHJvbmc+Tm90ZSB0aGF0IHdlJ2xsIGFkZCBhCiAgICAgICAgICBsaW5rIG9uIHRoZSBwYWdlLCBzbyBhbnkgZW1haWwgYWRkcmVzcyBhZGRlZCB0aGVyZSBpcyBub3QKICAgICAgICAgIG9iZnVzY2F0ZWQgYW5kIGNhbiAoYW5kIHByb2JhYmx5IHdpbGwpIGJlIGFidXNlZCBieSByb2JvdHMKICAgICAgICAgIGhhcnZlc3Rpbmcgd2Vic2l0ZXMgZm9yIGFkZHJlc3NlcyB0byBzcGFtLjwvc3Ryb25nPjwvbGk+CiAgICAgICAgICA8bGk+YSBMaWNlbnNlOiBlbnRyeSBjb250YWluaW5nIHRoZSB0eXBlIG9mIGxpY2Vuc2UgZm9yIHRoZQogICAgICAgICAgdG9vbC90YXNrPC9saT4KICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5UaGUgcHJlZmVycmVkIGZvcm1hdCBmb3IgdGhpcyBpbmZvcm1hdGlvbiBpcyBhIHBhdGNoIHRvIDxhIGhyZWY9Imh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvYW50L2NvcmUvdHJ1bmsveGRvY3MvZXh0ZXJuYWwueG1sIj50aGlzPC9hPgogICAgICAgIGRvY3VtZW50LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+SWYgeW91IGhhdmUgd3JpdHRlbiBzb21ldGhpbmcgYmlnZ2VyIHRoYW4gYSAnc2ltcGxlIHBsdWdpbicgdG8gQW50IGl0CiAgICAgICAgbWF5IGJlIGJldHRlciB0byBhZGQgdGhlIGxpbmsgdG8gPGEgaHJlZj0icHJvamVjdHMuaHRtbCI+cHJvamVjdHMuaHRtbDwvYT4uCiAgICAgICAgVGhlIHByb2NlZHVyZSB0byBhZGQgaXQgaXMgdGhlIHNhbWUuIFRoZSBmaWxlIHRvIHBhdGNoIGlzIDxhIGhyZWY9Imh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvYW50L2NvcmUvdHJ1bmsveGRvY3MvcHJvamVjdHMueG1sIj50aGlzPC9hPgogICAgICAgIGRvY3VtZW50LiBUaGUgc3ludGF4IG9mIHRoYXQgZmlsZSBpcyB0aGUgc2FtZS48L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9ImNyZWF0ZS1leHRlbnNpb25zIj48L2E+CiAgICAgIEhvdyBkbyBJIGNyZWF0ZSBuZXcgdGFza3M/CiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPkFwYXJ0IGZyb20gYSBsb3Qgb2YgaW5mb3JtYXRpb24gb24gdXNpbmcgQW50LCB0aGUKICAgICAgICA8YSBocmVmPSJtYW51YWwvaW5kZXguaHRtbCI+TWFudWFsPC9hPiBhbHNvIGNvbnRhaW5zIGluZm9ybWF0aW9uCiAgICAgICAgb24gaG93IHRvIGV4dGVuZCBBbnQgd2l0aCBuZXcgdGFza3MuIFRoaXMgaW5mb3JtYXRpb24KICAgICAgICBjYW4gYmUgZm91bmQgdW5kZXIgIkRldmVsb3Bpbmcgd2l0aCBBbnQiLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+Q2hhbmNlcyBhcmUgdGhhdCBzb21lb25lIGVsc2UgYWxyZWFkeSBjcmVhdGVkIHRoZSB0YXNrIHlvdQogICAgICAgIHdhbnQgdG8gY3JlYXRlLCBpdCBtYXkgYmUgd2lzZSB0byBzZWUKICAgICAgICA8YSBocmVmPSJleHRlcm5hbC5odG1sIj5FeHRlcm5hbCBUb29scyBhbmQgVGFza3M8L2E+IGFuZAogICAgICAgIDxhIGhyZWY9InByb2plY3RzLmh0bWwiPlJlbGF0ZWQgUHJvamVjdHM8L2E+IGZpcnN0LjwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0icGFzc2luZy1jbGktYXJncyI+PC9hPgogICAgICBIb3cgZG8gSSBwYXNzIHBhcmFtZXRlcnMgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHRvIG15CiAgICAgICAgYnVpbGQgZmlsZT8KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+VXNlIHByb3BlcnRpZXMuIFVzaW5nIDxjb2RlPmFudAogICAgICAgIC1EPGVtPm5hbWU8L2VtPj08ZW0+dmFsdWU8L2VtPjwvY29kZT4gbGV0cyB5b3UgZGVmaW5lIHZhbHVlcyBmb3IKICAgICAgICBwcm9wZXJ0aWVzIG9uIHRoZSBBbnQgY29tbWFuZCBsaW5lLiBUaGVzZSBwcm9wZXJ0aWVzIGNhbiB0aGVuIGJlCiAgICAgICAgdXNlZCB3aXRoaW4geW91ciBidWlsZCBmaWxlIGFzCiAgICAgICAgYW55IG5vcm1hbCBwcm9wZXJ0eTogPGNvZGU+JHs8ZW0+bmFtZTwvZW0+fTwvY29kZT4gd2lsbCBwdXQgaW4KICAgICAgICA8Y29kZT48ZW0+dmFsdWU8L2VtPjwvY29kZT4uPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJqaWtlcy1zd2l0Y2hlcyI+PC9hPgogICAgICBIb3cgY2FuIEkgdXNlIEppa2VzLXNwZWNpZmljIGNvbW1hbmQtbGluZQogICAgICAgIHN3aXRjaGVzPwogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD5BIGNvdXBsZSBvZiBzd2l0Y2hlcyBhcmUgc3VwcG9ydGVkIHZpYSAibWFnaWMiCiAgICAgICAgICBwcm9wZXJ0aWVzOjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJGb3JyZXN0VGFibGUiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iNCI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgPHRoIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICBzd2l0Y2gKICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIHByb3BlcnR5CiAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICBkZWZhdWx0CiAgICAgIDwvdGg+CiAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgK0UKICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIGJ1aWxkLmNvbXBpbGVyLmVtYWNzCiAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICBmYWxzZSA9PSBub3Qgc2V0CiAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgK1AKICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIGJ1aWxkLmNvbXBpbGVyLnBlZGFudGljCiAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICBmYWxzZSA9PSBub3Qgc2V0CiAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgK0YKICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIGJ1aWxkLmNvbXBpbGVyLmZ1bGxkZXBlbmQKICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIGZhbHNlID09IG5vdCBzZXQKICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjEiCiAgICAgIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+CiAgICAgICAgICA8c3Ryb25nPihPbmx5IGZvciBBbnQgJmx0OyAxLjQ7IHJlcGxhY2VkIGJ5IHRoZQogICAgICAgICAgICAgICAgPGNvZGU+PHN0cm9uZz5ub3dhcm48L3N0cm9uZz48L2NvZGU+CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgb2YgdGhlIDxjb2RlPjxzdHJvbmc+Jmx0O2phdmFjJmd0Ozwvc3Ryb25nPjwvY29kZT4KICAgICAgICAgICAgICAgIHRhc2sgYWZ0ZXIgdGhhdC4pPC9zdHJvbmc+PGJyIC8+LW5vd2FybgogICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIxIgogICAgICB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPgogICAgICAgICAgYnVpbGQuY29tcGlsZXIud2FybmluZ3MKICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMSIKICAgICAgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgIHRydWUgPT0gbm90IHNldAogICAgICA8L3RkPgogICAgICA8L3RyPgogICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+V2l0aCBBbnQgJmd0Oz0gMS41LCB5b3UgY2FuIGFsc28gdXNlIG5lc3RlZAogICAgICAgICAgPGNvZGU+Jmx0O2NvbXBpbGVyYXJnJmd0OzwvY29kZT4gZWxlbWVudHMgd2l0aCB0aGUKICAgICAgICAgIDxjb2RlPiZsdDtqYXZhYyZndDs8L2NvZGU+IHRhc2suPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJzaGVsbC1yZWRpcmVjdC0xIj48L2E+CiAgICAgIEhvdyBkbyBJIGluY2x1ZGUgYSAmbHQ7IGNoYXJhY3RlciBpbiBteSBjb21tYW5kLWxpbmUgYXJndW1lbnRzPwogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD5UaGUgc2hvcnQgYW5zd2VyIGlzICJVc2U6IDxjb2RlPiZhbXA7bHQ7PC9jb2RlPiIuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5UaGUgbG9uZyBhbnN3ZXIgaXMgdGhhdCB0aGlzIHByb2JhYmx5IHdvbid0IGRvIHdoYXQgeW91CiAgICAgICAgd2FudCBhbnl3YXkgKHNlZSA8YSBocmVmPSIjc2hlbGwtcmVkaXJlY3QtMiI+dGhlIG5leHQKICAgICAgICBzZWN0aW9uPC9hPikuPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJzaGVsbC1yZWRpcmVjdC0yIj48L2E+CiAgICAgIEhvdyBkbyBJIHJlZGlyZWN0IHN0YW5kYXJkIGlucHV0IG9yIHN0YW5kYXJkIG91dHB1dAogICAgICAgIGluIHRoZSA8Y29kZT4mbHQ7ZXhlYyZndDs8L2NvZGU+IHRhc2s/CiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPlNheSB5b3Ugd2FudCB0byByZWRpcmVjdCB0aGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbSBvZiB0aGUKICAgICAgICA8Y29kZT5tNDwvY29kZT4gY29tbWFuZCB0byB3cml0ZSB0byBhIGZpbGUsIHNvbWV0aGluZwogICAgICAgIGxpa2U6PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlIj4Kc2hlbGwtcHJvbXB0Jmd0OyBtNCBmb28ubTQgJmd0OyBmb28KPC9wcmU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPmFuZCB0cnkgdG8gdHJhbnNsYXRlIGl0IGludG88L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUiPgombHQ7ZXhlYyBleGVjdXRhYmxlPSZxdW90O200JnF1b3Q7Jmd0OwogICZsdDthcmcgdmFsdWU9JnF1b3Q7Zm9vLm00JnF1b3Q7LyZndDsKICAmbHQ7YXJnIHZhbHVlPSZxdW90OyZhbXA7Z3Q7JnF1b3Q7LyZndDsKICAmbHQ7YXJnIHZhbHVlPSZxdW90O2ZvbyZxdW90Oy8mZ3Q7CiZsdDsvZXhlYyZndDsKPC9wcmU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRoaXMgd2lsbCBub3QgZG8gd2hhdCB5b3UgZXhwZWN0LiAgVGhlIG91dHB1dCByZWRpcmVjdGlvbiBpcwogICAgICAgIHBlcmZvcm1lZCBieSB5b3VyIHNoZWxsLCBub3QgdGhlIGNvbW1hbmQgaXRzZWxmLCBzbyB0aGlzCiAgICAgICAgc2hvdWxkIHJlYWQ6PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlIj4KJmx0O2V4ZWMgZXhlY3V0YWJsZT0mcXVvdDsvYmluL3NoJnF1b3Q7Jmd0OwogICZsdDthcmcgdmFsdWU9JnF1b3Q7LWMmcXVvdDsgLyZndDsKICAmbHQ7YXJnIHZhbHVlPSZxdW90O200IGZvby5tNCAmYW1wO2d0OyBmb28mcXVvdDsgLyZndDsKJmx0Oy9leGVjJmd0Owo8L3ByZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+Tm90ZSB0aGF0IHlvdSBtdXN0IHVzZSB0aGUgPGNvZGU+dmFsdWU8L2NvZGU+IGF0dHJpYnV0ZSBvZgogICAgICAgIDxjb2RlPiZsdDthcmcmZ3Q7PC9jb2RlPiBpbiB0aGUgbGFzdCBlbGVtZW50LCBpbiBvcmRlciB0byBoYXZlCiAgICAgICAgdGhlIGNvbW1hbmQgcGFzc2VkIGFzIGEgc2luZ2xlLCBxdW90ZWQgYXJndW1lbnQuIEFsdGVybmF0aXZlbHksCiAgICAgICAgeW91IGNhbiB1c2U6PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlIj4KJmx0O2V4ZWMgZXhlY3V0YWJsZT0mcXVvdDsvYmluL3NoJnF1b3Q7Jmd0OwogICZsdDthcmcgbGluZT0nLWMgJnF1b3Q7bTQgZm9vLm00ICZhbXA7Z3Q7IGZvbyZxdW90OycvJmd0OwombHQ7L2V4ZWMmZ3Q7CjwvcHJlPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5Ob3RlIHRoZSBkb3VibGUtcXVvdGVzIG5lc3RlZCBpbnNpZGUgdGhlIHNpbmdsZS1xdW90ZXMuPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJiYXRjaC1zaGVsbC1leGVjdXRlIj48L2E+CiAgICAgIEhvdyBkbyBJIGV4ZWN1dGUgYSBiYXRjaCBmaWxlIG9yIHNoZWxsIHNjcmlwdCBmcm9tIEFudD8KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+T24gbmF0aXZlIFVuaXggc3lzdGVtcywgeW91IHNob3VsZCBiZSBhYmxlIHRvIHJ1biBzaGVsbCBzY3JpcHRzCiAgICAgICAgICAgZGlyZWN0bHkuIE9uIHN5c3RlbXMgcnVubmluZyBhIFVuaXgtdHlwZSBzaGVsbCAoZm9yIGV4YW1wbGUsIEN5Z3dpbgogICAgICAgICAgIG9uIFdpbmRvd3MpIGV4ZWN1dGUgdGhlIChjb21tYW5kKSBzaGVsbCBpbnN0ZWFkIC0gPGNvZGU+Y21kPC9jb2RlPgogICAgICAgICAgIGZvciBiYXRjaCBmaWxlcywgPGNvZGU+c2g8L2NvZGU+IGZvciBzaGVsbCBzY3JpcHRzIC0gdGhlbiBwYXNzIHRoZQogICAgICAgICAgIGJhdGNoIGZpbGUgb3Igc2hlbGwgc2NyaXB0IChwbHVzIGFueSBhcmd1bWVudHMgdG8gdGhlIHNjcmlwdCkKICAgICAgICAgICBhcyBhIHNpbmdsZSBjb21tYW5kLCB1c2luZyB0aGUgPGNvZGU+L2M8L2NvZGU+IG9yCiAgICAgICAgICAgPGNvZGU+LWM8L2NvZGU+IHN3aXRjaCwgcmVzcGVjdGl2ZWx5LiBTZWUKICAgICAgICAgICA8YSBocmVmPSIjc2hlbGwtcmVkaXJlY3QtMiI+dGhlIGFib3ZlIHNlY3Rpb248L2E+CiAgICAgICAgICAgZm9yIGV4YW1wbGUgPGNvZGU+Jmx0O2V4ZWMmZ3Q7PC9jb2RlPiB0YXNrcwogICAgICAgICAgIGV4ZWN1dGluZyA8Y29kZT5zaDwvY29kZT4uIEZvciBiYXRjaCBmaWxlcywgdXNlIHNvbWV0aGluZyBsaWtlOjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZSI+CiZsdDtleGVjIGRpcj0mcXVvdDsuJnF1b3Q7IGV4ZWN1dGFibGU9JnF1b3Q7Y21kJnF1b3Q7IG9zPSZxdW90O1dpbmRvd3MgTlQmcXVvdDsmZ3Q7CiAgJmx0O2FyZyBsaW5lPSZxdW90Oy9jIHRlc3QuYmF0JnF1b3Q7LyZndDsKJmx0Oy9leGVjJmd0Owo8L3ByZT4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0ibXVsdGktY29uZGl0aW9ucyI+PC9hPgogICAgICBJIHdhbnQgdG8gZXhlY3V0ZSBhIHBhcnRpY3VsYXIgdGFyZ2V0IG9ubHkgaWYKICAgICAgICBtdWx0aXBsZSBjb25kaXRpb25zIGFyZSB0cnVlLgogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD5UaGVyZSBhcmUgYWN0dWFsbHkgc2V2ZXJhbCBhbnN3ZXJzIHRvIHRoaXMgcXVlc3Rpb24uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5JZiB5b3UgaGF2ZSBvbmx5IG9uZSBzZXQgYW5kIG9uZSB1bnNldCBwcm9wZXJ0eSB0byB0ZXN0LAogICAgICAgIHlvdSBjYW4gc3BlY2lmeSBib3RoIGFuIDxjb2RlPmlmPC9jb2RlPiBhbmQgYW4gPGNvZGU+dW5sZXNzPC9jb2RlPgogICAgICAgIGF0dHJpYnV0ZSBmb3IgdGhlIHRhcmdldCwgYW5kIHRoZXkgd2lsbCBhY3QgYXMgaWYgdGhleQogICAgICAgIGFyZSAiYW5kZWQiIHRvZ2V0aGVyLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+SWYgeW91IGFyZSB1c2luZyBhIHZlcnNpb24gb2YgQW50IDEuMyBvciBlYXJsaWVyLCB0aGUKICAgICAgICB3YXkgdG8gd29yayB3aXRoIGFsbCBvdGhlciBjYXNlcyBpcyB0byBjaGFpbiB0YXJnZXRzIHRvZ2V0aGVyCiAgICAgICAgdG8gZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBzdGF0ZSB5b3Ugd2FudCB0byB0ZXN0IGZvci48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRvIHNlZSBob3cgdGhpcyB3b3JrcywgYXNzdW1lIHlvdSBoYXZlIHRocmVlIHByb3BlcnRpZXM6CiAgICAgICAgPGNvZGU+cHJvcDE8L2NvZGU+LCA8Y29kZT5wcm9wMjwvY29kZT4sIGFuZCA8Y29kZT5wcm9wMzwvY29kZT4uCiAgICAgICAgWW91IHdhbnQgdG8gdGVzdCB0aGF0IDxjb2RlPnByb3AxPC9jb2RlPiBhbmQgPGNvZGU+cHJvcDI8L2NvZGU+CiAgICAgICAgYXJlIHNldCwgYW5kIHRoYXQgPGNvZGU+cHJvcDM8L2NvZGU+IGlzIG5vdC4gSWYgdGhlIGNvbmRpdGlvbgogICAgICAgIGhvbGRzIHRydWUgeW91IHdhbnQgdG8gZWNobyAieWVzIi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkhlcmUgaXMgdGhlIGltcGxlbWVudGF0aW9uIGluIEFudCAxLjMgYW5kIGVhcmxpZXI6PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlIj4KJmx0O3RhcmdldCBuYW1lPSZxdW90O2NvbmQmcXVvdDsgZGVwZW5kcz0mcXVvdDtjb25kLWlmJnF1b3Q7LyZndDsKCiZsdDt0YXJnZXQgbmFtZT0mcXVvdDtjb25kLWlmJnF1b3Q7IGlmPSZxdW90O3Byb3AxJnF1b3Q7Jmd0OwogICZsdDthbnRjYWxsIHRhcmdldD0mcXVvdDtjb25kLWlmLTImcXVvdDsvJmd0OwombHQ7L3RhcmdldCZndDsKCiZsdDt0YXJnZXQgbmFtZT0mcXVvdDtjb25kLWlmLTImcXVvdDsgaWY9JnF1b3Q7cHJvcDImcXVvdDsmZ3Q7CiAgJmx0O2FudGNhbGwgdGFyZ2V0PSZxdW90O2NvbmQtaWYtMyZxdW90Oy8mZ3Q7CiZsdDsvdGFyZ2V0Jmd0OwoKJmx0O3RhcmdldCBuYW1lPSZxdW90O2NvbmQtaWYtMyZxdW90OyB1bmxlc3M9JnF1b3Q7cHJvcDMmcXVvdDsmZ3Q7CiAgJmx0O2VjaG8gbWVzc2FnZT0mcXVvdDt5ZXMmcXVvdDsvJmd0OwombHQ7L3RhcmdldCZndDsKPC9wcmU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPk5vdGU6IDxjb2RlPiZsdDthbnRjYWxsJmd0OzwvY29kZT4gdGFza3MgZG8gPGVtPm5vdDwvZW0+IHBhc3MKICAgICAgICBwcm9wZXJ0eSBjaGFuZ2VzIGJhY2sgdXAgdG8gdGhlIGVudmlyb25tZW50IHRoZXkgd2VyZSBjYWxsZWQKICAgICAgICBmcm9tLCBzbyB5b3Ugd291bGRuJ3QgYmUgYWJsZSB0bywgZm9yIGV4YW1wbGUsIHNldCBhCiAgICAgICAgPGNvZGU+cmVzdWx0PC9jb2RlPiBwcm9wZXJ0eSBpbiB0aGUgPGNvZGU+Y29uZC1pZi0zPC9jb2RlPiB0YXJnZXQsCiAgICAgICAgdGhlbiBkbwogICAgICAgIDxjb2RlPiZsdDtlY2hvIG1lc3NhZ2U9InJlc3VsdCBpcyAke3Jlc3VsdH0iLyZndDs8L2NvZGU+CiAgICAgICAgaW4gdGhlIDxjb2RlPmNvbmQ8L2NvZGU+IHRhcmdldC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlN0YXJ0aW5nIHdpdGggQW50IDEuNCwgeW91IGNhbiB1c2UgdGhlCiAgICAgICAgPGNvZGU+Jmx0O2NvbmRpdGlvbiZndDs8L2NvZGU+IHRhc2suPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlIj4KJmx0O3RhcmdldCBuYW1lPSZxdW90O2NvbmQmcXVvdDsgZGVwZW5kcz0mcXVvdDtjb25kLWlmLGNvbmQtZWxzZSZxdW90Oy8mZ3Q7CgombHQ7dGFyZ2V0IG5hbWU9JnF1b3Q7Y2hlY2stY29uZCZxdW90OyZndDsKICAmbHQ7Y29uZGl0aW9uIHByb3BlcnR5PSZxdW90O2NvbmQtaXMtdHJ1ZSZxdW90OyZndDsKICAgICZsdDthbmQmZ3Q7CiAgICAgICZsdDtub3QmZ3Q7CiAgICAgICAgJmx0O2VxdWFscyBhcmcxPSZxdW90OyR7cHJvcDF9JnF1b3Q7IGFyZzI9JnF1b3Q7JCR7cHJvcDF9JnF1b3Q7IC8mZ3Q7CiAgICAgICZsdDsvbm90Jmd0OwogICAgICAmbHQ7bm90Jmd0OwogICAgICAgICZsdDtlcXVhbHMgYXJnMT0mcXVvdDske3Byb3AyfSZxdW90OyBhcmcyPSZxdW90OyQke3Byb3AyfSZxdW90OyAvJmd0OwogICAgICAmbHQ7L25vdCZndDsKICAgICAgJmx0O2VxdWFscyBhcmcxPSZxdW90OyR7cHJvcDN9JnF1b3Q7IGFyZzI9JnF1b3Q7JCR7cHJvcDN9JnF1b3Q7IC8mZ3Q7CiAgICAmbHQ7L2FuZCZndDsKICAmbHQ7L2NvbmRpdGlvbiZndDsKJmx0Oy90YXJnZXQmZ3Q7CgombHQ7dGFyZ2V0IG5hbWU9JnF1b3Q7Y29uZC1pZiZxdW90OyBkZXBlbmRzPSZxdW90O2NoZWNrLWNvbmQmcXVvdDsgaWY9JnF1b3Q7Y29uZC1pcy10cnVlJnF1b3Q7Jmd0OwogICZsdDtlY2hvIG1lc3NhZ2U9JnF1b3Q7eWVzJnF1b3Q7LyZndDsKJmx0Oy90YXJnZXQmZ3Q7CgombHQ7dGFyZ2V0IG5hbWU9JnF1b3Q7Y29uZC1lbHNlJnF1b3Q7IGRlcGVuZHM9JnF1b3Q7Y2hlY2stY29uZCZxdW90OyB1bmxlc3M9JnF1b3Q7Y29uZC1pcy10cnVlJnF1b3Q7Jmd0OwogICZsdDtlY2hvIG1lc3NhZ2U9JnF1b3Q7bm8mcXVvdDsvJmd0OwombHQ7L3RhcmdldCZndDsKPC9wcmU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRoaXMgdmVyc2lvbiB0YWtlcyBhZHZhbnRhZ2Ugb2YgdHdvIHRoaW5nczo8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgIDxsaT5JZiBhIHByb3BlcnR5IDxjb2RlPmE8L2NvZGU+IGhhcyBub3QgYmVlbiBzZXQsCiAgICAgICAgICA8Y29kZT4ke2F9PC9jb2RlPiB3aWxsIGV2YWx1YXRlIHRvIDxjb2RlPiR7YX08L2NvZGU+LjwvbGk+CgogICAgICAgICAgPGxpPlRvIGdldCBhIGxpdGVyYWwgPGNvZGU+JDwvY29kZT4gaW4gQW50LCB5b3UgaGF2ZSB0bwogICAgICAgICAgZXNjYXBlIGl0IHdpdGggYW5vdGhlciA8Y29kZT4kPC9jb2RlPiAtIHRoaXMgd2lsbCBhbHNvIGJyZWFrCiAgICAgICAgICB0aGUgc3BlY2lhbCB0cmVhdG1lbnQgb2YgdGhlIDxjb2RlPiR7PC9jb2RlPiBzZXF1ZW5jZS48L2xpPgogICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkJlY2F1c2UgdGVzdGluZyBmb3IgYSBsaXRlcmFsIDxjb2RlPiR7cHJvcGVydHl9PC9jb2RlPiBzdHJpbmcKICAgICAgICBpc24ndCBhbGwgdGhhdCByZWFkYWJsZSBvciBlYXN5IHRvIHVuZGVyc3RhbmQsCiAgICAgICAgcG9zdC0xLjQuMSBBbnQgaW50cm9kdWNlcyB0aGUgPGNvZGU+Jmx0O2lzc2V0Jmd0OzwvY29kZT4gZWxlbWVudAogICAgICAgIHRvIHRoZSA8Y29kZT4mbHQ7Y29uZGl0aW9uJmd0OzwvY29kZT4gdGFzay48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkhlcmUgaXMgdGhlIHByZXZpb3VzIGV4YW1wbGUgZG9uZSB1c2luZwogICAgICAgIDxjb2RlPiZsdDtpc3NldCZndDs8L2NvZGU+OjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZSI+CiZsdDt0YXJnZXQgbmFtZT0mcXVvdDtjaGVjay1jb25kJnF1b3Q7Jmd0OwogICZsdDtjb25kaXRpb24gcHJvcGVydHk9JnF1b3Q7Y29uZC1pcy10cnVlJnF1b3Q7Jmd0OwogICAgJmx0O2FuZCZndDsKICAgICAgJmx0O2lzc2V0IHByb3BlcnR5PSZxdW90O3Byb3AxJnF1b3Q7LyZndDsKICAgICAgJmx0O2lzc2V0IHByb3BlcnR5PSZxdW90O3Byb3AyJnF1b3Q7LyZndDsKICAgICAgJmx0O25vdCZndDsKICAgICAgICAmbHQ7aXNzZXQgcHJvcGVydHk9JnF1b3Q7cHJvcDMmcXVvdDsvJmd0OwogICAgICAmbHQ7L25vdCZndDsKICAgICZsdDsvYW5kJmd0OwogICZsdDsvY29uZGl0aW9uJmd0OwombHQ7L3RhcmdldCZndDsKPC9wcmU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRoZSBsYXN0IG9wdGlvbiBpcyB0byB1c2UgYSBzY3JpcHRpbmcgbGFuZ3VhZ2UgdG8gc2V0IHRoZQogICAgICAgIHByb3BlcnRpZXMuIFRoaXMgY2FuIGJlIHBhcnRpY3VsYXJseSBoYW5keSB3aGVuIHlvdSBuZWVkIG11Y2gKICAgICAgICBmaW5lciBjb250cm9sIHRoYW4gdGhlIHNpbXBsZSBjb25kaXRpb25zIHNob3duIGhlcmUgYnV0LCBvZgogICAgICAgIGNvdXJzZSwgY29tZXMgd2l0aCB0aGUgb3ZlcmhlYWQgb2YgYWRkaW5nIEpBUiBmaWxlcyB0byBzdXBwb3J0CiAgICAgICAgdGhlIGxhbmd1YWdlLCB0byBzYXkgbm90aGluZyBvZiB0aGUgYWRkZWQgbWFpbnRlbmFuY2UgaW4gcmVxdWlyaW5nCiAgICAgICAgdHdvIGxhbmd1YWdlcyB0byBpbXBsZW1lbnQgYSBzaW5nbGUgc3lzdGVtLiBTZWUgdGhlCiAgICAgICAgPGEgaHJlZj0ibWFudWFsL09wdGlvbmFsVGFza3Mvc2NyaXB0Lmh0bWwiPgogICAgICAgIDxjb2RlPiZsdDtzY3JpcHQmZ3Q7PC9jb2RlPiB0YXNrIGRvY3VtZW50YXRpb248L2E+IGZvciBtb3JlCiAgICAgICAgZGV0YWlscy48L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9ImVuY29kaW5nIj48L2E+CiAgICAgIEhvdyBjYW4gSSBpbmNsdWRlIG5hdGlvbmFsIGNoYXJhY3RlcnMgbGlrZSBHZXJtYW4KICAgICAgICB1bWxhdXRzIGluIG15IGJ1aWxkIGZpbGU/CiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPllvdSBuZWVkIHRvIHRlbGwgdGhlIFhNTCBwYXJzZXIgd2hpY2ggY2hhcmFjdGVyIGVuY29kaW5nCiAgICAgICAgeW91ciBidWlsZCBmaWxlIHVzZXMsIHRoaXMgaXMgZG9uZSBpbnNpZGUgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLXhtbC0yMDAwMTAwNiNzZWMtcHJvbG9nLWR0ZCI+WE1MCiAgICAgICAgZGVjbGFyYXRpb248L2E+LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+QnkgZGVmYXVsdCB0aGUgcGFyc2VyIGFzc3VtZXMgeW91IGFyZSB1c2luZyB0aGUgVVRGLTgKICAgICAgICBlbmNvZGluZyBpbnN0ZWFkIG9mIHlvdXIgcGxhdGZvcm0ncyBkZWZhdWx0LiAgRm9yIG1vc3QgV2VzdGVybgogICAgICAgIEV1cm9wZWFuIGNvdW50cmllcyB5b3Ugc2hvdWxkIHNldCB0aGUgZW5jb2RpbmcgdG8KICAgICAgICA8Y29kZT5JU08tODg1OS0xPC9jb2RlPi4gIFRvIGRvIHNvLCBtYWtlIHRoZSB2ZXJ5IGZpcnN0IGxpbmUKICAgICAgICBvZiB5b3UgYnVpbGQgZmlsZSByZWFkIGxpa2U8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUiPgombHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtJU08tODg1OS0xJnF1b3Q7ID8mZ3Q7CjwvcHJlPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJ1c2UtemlwLWluc3RlYWQtb2YtamFyIj48L2E+CiAgICAgIEhvdyBkbyBJIHVzZSA8Y29kZT5qYXI8L2NvZGU+J3MgPGNvZGU+TTwvY29kZT4gc3dpdGNoPwogICAgICBJIGRvbid0IHdhbnQgYSBNQU5JRkVTVC4KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+QSBKQVIgYXJjaGl2ZSBpcyBhIFpJUCBmaWxlLCBzbyBpZiB5b3UgZG9uJ3Qgd2FudCBhCiAgICAgICAgTUFOSUZFU1QgeW91IGNhbiBzaW1wbHkgdXNlIDxjb2RlPiZsdDt6aXAmZ3Q7PC9jb2RlPi48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPklmIHlvdXIgZmlsZSBuYW1lcyBjb250YWluIG5hdGlvbmFsIGNoYXJhY3RlcnMgeW91IHNob3VsZAogICAgICAgIGtub3cgdGhhdCBTdW4ncyA8Y29kZT5qYXI8L2NvZGU+IHV0aWxpdHkgbGlrZSBBbnQncwogICAgICAgIDxjb2RlPiZsdDtqYXImZ3Q7PC9jb2RlPiB1c2VzIFVURi04IHRvIGVuY29kZSB0aGVpciBuYW1lcyB3aGlsZQogICAgICAgIDxjb2RlPiZsdDt6aXAmZ3Q7PC9jb2RlPiB1c2VzIHlvdXIgcGxhdGZvcm1zIGRlZmF1bHQgZW5jb2RpbmcuCiAgICAgICAgVXNlIHRoZSBlbmNvZGluZyBhdHRyaWJ1dGUgb2YgPGNvZGU+Jmx0O3ppcCZndDs8L2NvZGU+IGlmCiAgICAgICAgbmVjZXNzYXJ5LjwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0icHJvcGVydHl2YWx1ZS1hcy1uYW1lLWZvci1wcm9wZXJ0eSI+PC9hPgogICAgICBIb3cgY2FuIEkgZG8gc29tZXRoaW5nIGxpa2UgPGNvZGU+Jmx0O3Byb3BlcnR5IG5hbWU9InByb3AiCiAgICAgIHZhbHVlPSIkeyR7YW5vdGhlcnByb3B9fSIvJmd0OzwvY29kZT4gKGRvdWJsZSBleHBhbmRpbmcgdGhlIHByb3BlcnR5KT8KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+V2l0aG91dCBhbnkgZXh0ZXJuYWwgaGVscCB5b3UgY2FuIG5vdC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPldpdGggJmx0O3NjcmlwdC8mZ3Q7LCB3aGljaCBuZWVkcyBleHRlcm5hbCBsaWJyYXJpZXMsIHlvdSBjYW4gZG88L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUiPgombHQ7c2NyaXB0IGxhbmd1YWdlPSZxdW90O2phdmFzY3JpcHQmcXVvdDsmZ3Q7CiAgICBwcm9wbmFtZSA9IHByb2plY3QuZ2V0UHJvcGVydHkoJnF1b3Q7YW5vdGhlcnByb3AmcXVvdDspOwogICAgcHJvamVjdC5zZXROZXdQcm9wZXJ0eSgmcXVvdDtwcm9wJnF1b3Q7LCBwcm9wbmFtZSk7CiZsdDsvc2NyaXB0Jmd0Owo8L3ByZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+V2l0aCBBbnRDb250cmliIChleHRlcm5hbCB0YXNrIGxpYnJhcnkpIHlvdSBjYW4gZG8gPGNvZGU+CiAgICAgICAgICZsdDtwcm9wZXJ0eWNvcHkgbmFtZT0icHJvcCIgZnJvbT0iJHthbm90aGVycHJvcH0iLyZndDs8L2NvZGU+LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+V2l0aCBBbnQgMS42IHlvdSBjYW4gc2ltdWxhdGUgdGhlIEFudENvbnRyaWJzICZsdDtwcm9wZXJ0eWNvcHkmZ3Q7CiAgICAgICAgIGFuZCBhdm9pZCB0aGUgbmVlZCBvZiBhbiBleHRlcm5hbCBsaWJyYXJ5OjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZSI+CiZsdDttYWNyb2RlZiBuYW1lPSZxdW90O3Byb3BlcnR5Y29weSZxdW90OyZndDsKICAmbHQ7YXR0cmlidXRlIG5hbWU9JnF1b3Q7bmFtZSZxdW90Oy8mZ3Q7CiAgJmx0O2F0dHJpYnV0ZSBuYW1lPSZxdW90O2Zyb20mcXVvdDsvJmd0OwogICZsdDtzZXF1ZW50aWFsJmd0OwogICAgJmx0O3Byb3BlcnR5IG5hbWU9JnF1b3Q7QHtuYW1lfSZxdW90OyB2YWx1ZT0mcXVvdDske0B7ZnJvbX19JnF1b3Q7LyZndDsKICAmbHQ7L3NlcXVlbnRpYWwmZ3Q7CiZsdDsvbWFjcm9kZWYmZ3Q7CjwvcHJlPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJkZWxldGUtZGlyZWN0b3J5LWNoaWxkcmVuLW9ubHkiPjwvYT4KICAgICAgSG93IGNhbiBJIGRlbGV0ZSBldmVyeXRoaW5nIGJlbmVhdGggYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSwKICAgIHByZXNlcnZpbmcgdGhlIGRpcmVjdG9yeSBpdHNlbGY/CiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPk1vc3QgdXNlcnMgd2hvIGdvIGRvd24gdGhpcyBwYXRoIGhhdmUgbm8gcHJvYmxlbSBmaWd1cmluZyBvdXQgdGhhdAogIDxjb2RlPiZsdDtkZWxldGUgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSIgLyZndDs8L2NvZGU+IHdpbGwgaGVscCB0aGVtLiAgVGhlCiAgc2VlbWluZ2x5IHRyaWNreSBwYXJ0IGlzIHByZXNlcnZpbmcgdGhlIGJhc2UgZGlyZWN0b3J5IGl0c2VsZiwKICB3aGljaCBBbnQgaW5jbHVkZXMgaW4gdGhlIGRpcmVjdG9yeSBzY2FuLiBGb3J0dW5hdGVseSB0aGUgYW5zd2VyIGlzIHNpbXBsZToKPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlIj4KJmx0O2RlbGV0ZSBpbmNsdWRlZW1wdHlkaXJzPSZxdW90O3RydWUmcXVvdDsmZ3Q7CiAgJmx0O2ZpbGVzZXQgZGlyPSZxdW90O2RpcnRva2VlcCZxdW90OyBpbmNsdWRlcz0mcXVvdDsqKi8qJnF1b3Q7IC8mZ3Q7CiZsdDsvZGVsZXRlJmd0Owo8L3ByZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0iZ2VuZXJhbC1hZHZpY2UiPjwvYT4KICAgICAgR2VuZXJhbCBBZHZpY2UKICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+VGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgQW50IGRvZXNuJ3QgYmVoYXZlIGFzCiAgICAgICAgZXhwZWN0ZWQsIG5vdCBhbGwgb2YgdGhlbSBhcmUgZHVlIHRvIEFudCBidWdzLiAgU2VlIG91ciA8YSBocmVmPSJwcm9ibGVtcy5odG1sIj5IYXZpbmcgUHJvYmxlbXM/PC9hPiBwYWdlIGZvciBoaW50cyB0aGF0CiAgICAgICAgbWF5IGhlbHAgcGlubmluZyBkb3duIHRoZSByZWFzb25zIGZvciB5b3VyIHByb2JsZW0uPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJhbHdheXMtcmVjb21waWxlcyI+PC9hPgogICAgICBXaHkgZG9lcyBBbnQgYWx3YXlzIHJlY29tcGlsZSBhbGwgbXkgSmF2YSBmaWxlcz8KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+SW4gb3JkZXIgdG8gZmluZCBvdXQgd2hpY2ggZmlsZXMgc2hvdWxkIGJlIGNvbXBpbGVkLCBBbnQKICAgICAgICBjb21wYXJlcyB0aGUgdGltZXN0YW1wcyBvZiB0aGUgc291cmNlIGZpbGVzIHRvIHRob3NlIG9mIHRoZQogICAgICAgIHJlc3VsdGluZyA8Y29kZT4uY2xhc3M8L2NvZGU+IGZpbGVzLiAgT3BlbmluZyBhbGwgc291cmNlIGZpbGVzCiAgICAgICAgdG8gZmluZCBvdXQgd2hpY2ggcGFja2FnZSB0aGV5IGJlbG9uZyB0byB3b3VsZCBiZSB2ZXJ5CiAgICAgICAgaW5lZmZpY2llbnQuIEluc3RlYWQsIEFudCBleHBlY3RzIHlvdSB0byBwbGFjZSB5b3VyCiAgICAgICAgc291cmNlIGZpbGVzIGluIGEgZGlyZWN0b3J5IGhpZXJhcmNoeSB0aGF0IG1pcnJvcnMgeW91cgogICAgICAgIHBhY2thZ2UgaGllcmFyY2h5IGFuZCB0byBwb2ludCBBbnQgdG8gdGhlIHJvb3Qgb2YgdGhpcwogICAgICAgIGRpcmVjdG9yeSB0cmVlIHdpdGggdGhlIDxjb2RlPnNyY2RpcjwvY29kZT4gYXR0cmlidXRlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+U2F5IHlvdSBoYXZlIDxjb2RlPiZsdDtqYXZhYyBzcmNkaXI9InNyYyIKICAgICAgICBkZXN0ZGlyPSJkZXN0Ii8mZ3Q7PC9jb2RlPi4gIElmIEFudCBmaW5kcyBhIGZpbGUKICAgICAgICA8Y29kZT5zcmMvYS9iL0MuamF2YTwvY29kZT4sIGl0IGV4cGVjdHMgaXQgdG8gYmUgaW4gcGFja2FnZQogICAgICAgIDxjb2RlPmEuYjwvY29kZT4gc28gdGhhdCB0aGUgcmVzdWx0aW5nIDxjb2RlPi5jbGFzczwvY29kZT4KICAgICAgICBmaWxlIGlzIGdvaW5nIHRvIGJlIDxjb2RlPmRlc3QvYS9iL0MuY2xhc3M8L2NvZGU+LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+SWYgeW91ciBzb3VyY2UtdHJlZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGRvZXMgbm90IG1hdGNoIHlvdXIKICAgICAgICBwYWNrYWdlIHN0cnVjdHVyZSwgQW50J3MgaGV1cmlzdGljIHdvbid0IHdvcmssIGFuZAogICAgICAgIGl0IHdpbGwgcmVjb21waWxlIGNsYXNzZXMgdGhhdCBhcmUgdXAtdG8tZGF0ZS4gIEFudCBpcyBub3QgdGhlCiAgICAgICAgb25seSB0b29sIHRoYXQgZXhwZWN0cyBhIHNvdXJjZS10cmVlIGxheW91dCBsaWtlIHRoaXMuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5JZiB5b3UgaGF2ZSBKYXZhIHNvdXJjZSBmaWxlcyB0aGF0IGFyZW4ndCBkZWNsYXJlZCB0bwogICAgICAgIGJlIHBhcnQgb2YgYW55IHBhY2thZ2UsIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSA8Y29kZT4mbHQ7amF2YWMmZ3Q7PC9jb2RlPgogICAgICAgIHRhc2sgdG8gY29tcGlsZSB0aGVzZSBmaWxlcyBjb3JyZWN0bHkgLSBqdXN0IHNldCB0aGUKICAgICAgICA8Y29kZT5zcmNkaXI8L2NvZGU+IGFuZCA8Y29kZT5kZXN0ZGlyPC9jb2RlPiBhdHRyaWJ1dGVzIHRvCiAgICAgICAgdGhlIGFjdHVhbCBkaXJlY3RvcnkgdGhlIHNvdXJjZQogICAgICAgIGZpbGVzIGxpdmUgaW4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGNsYXNzIGZpbGVzIHNob3VsZCBnbyBpbnRvLAogICAgICAgIHJlc3BlY3RpdmVseS48L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9ImRlZmF1bHRleGNsdWRlcyI+PC9hPgogICAgICBJJ3ZlIHVzZWQgYSA8Y29kZT4mbHQ7ZGVsZXRlJmd0OzwvY29kZT4gdGFzayB0bwogICAgICBkZWxldGUgdW53YW50ZWQgU291cmNlU2FmZSBjb250cm9sIGZpbGVzIChDVlMgZmlsZXMsIGVkaXRvcgogICAgICBiYWNrdXAgZmlsZXMsIGV0Yy4pLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcms7IHRoZSBmaWxlcwogICAgICBuZXZlciBnZXQgZGVsZXRlZC4gV2hhdCdzIHdyb25nPwogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD5UaGlzIGlzIHByb2JhYmx5IGhhcHBlbmluZyBiZWNhdXNlLCBieSBkZWZhdWx0LCBBbnQgZXhjbHVkZXMKICAgICAgICBTb3VyY2VTYWZlIGNvbnRyb2wgZmlsZXMgKDxjb2RlPnZzc3Zlci5zY2M8L2NvZGU+KSBhbmQgY2VydGFpbiBvdGhlcgogICAgICAgIGZpbGVzIGZyb20gRmlsZVNldHMuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5IZXJlJ3Mgd2hhdCB5b3UgcHJvYmFibHkgZGlkOjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZSI+CiZsdDtkZWxldGUmZ3Q7CiAgJmx0O2ZpbGVzZXQgZGlyPSZxdW90OyR7YnVpbGQuc3JjfSZxdW90OyBpbmNsdWRlcz0mcXVvdDsqKi92c3N2ZXIuc2NjJnF1b3Q7LyZndDsKJmx0Oy9kZWxldGUmZ3Q7CjwvcHJlPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5Zb3UgbmVlZCB0byBzd2l0Y2ggb2ZmIHRoZSBkZWZhdWx0IGV4Y2x1c2lvbnMsCiAgICAgICAgICAgYW5kIGl0IHdpbGwgd29yazo8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUiPgombHQ7ZGVsZXRlJmd0OwogICZsdDtmaWxlc2V0IGRpcj0mcXVvdDske2J1aWxkLnNyY30mcXVvdDsgaW5jbHVkZXM9JnF1b3Q7KiovdnNzdmVyLnNjYyZxdW90OwogICAgICAgICAgIGRlZmF1bHRleGNsdWRlcz0mcXVvdDtubyZxdW90Oy8mZ3Q7CiZsdDsvZGVsZXRlJmd0Owo8L3ByZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+Rm9yIGEgY29tcGxldGUgbGlzdGluZyBvZiB0aGUgcGF0dGVybnMgdGhhdCBhcmUgZXhjbHVkZWQKICAgICAgICBieSBkZWZhdWx0LCBzZWUgPGEgaHJlZj0ibWFudWFsL2RpcnRhc2tzLmh0bWwjZGVmYXVsdGV4Y2x1ZGVzIj50aGUgdXNlcgogICAgICAgIG1hbnVhbDwvYT4uPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJzdG9wLWRlcGVuZGVuY3kiPjwvYT4KICAgICAgSSBoYXZlIGEgdGFyZ2V0IEkgd2FudCB0byBza2lwIGlmIGEgcHJvcGVydHkgaXMgc2V0LAogICAgICBzbyBJIGhhdmUgPGNvZGU+dW5sZXNzPSJwcm9wZXJ0eSI8L2NvZGU+IGFzIGFuIGF0dHJpYnV0ZQogICAgICBvZiB0aGUgdGFyZ2V0LCBidXQgYWxsIHRoZSB0YXJnZXRzIHRoaXMgdGFyZ2V0CiAgICAgIGRlcGVuZHMgb24gYXJlIHN0aWxsIGV4ZWN1dGVkLiBXaHk/CiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPlRoZSBsaXN0IG9mIGRlcGVuZGVuY2llcyBpcyBnZW5lcmF0ZWQgYnkgQW50IGJlZm9yZSBhbnkgb2YgdGhlCiAgICAgICAgdGFyZ2V0cyBhcmUgcnVuLiBUaGlzIGFsbG93cyBkZXBlbmRlbnQgdGFyZ2V0cywgc3VjaCBhcyBhbgogICAgICAgIDxjb2RlPmluaXQ8L2NvZGU+IHRhcmdldCwgdG8gc2V0IHByb3BlcnRpZXMgdGhhdCBjYW4gY29udHJvbCB0aGUKICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHRoZSB0YXJnZXRzIGhpZ2hlciBpbiB0aGUgZGVwZW5kZW5jeSBncmFwaC4gVGhpcwogICAgICAgICAgICAgIGlzIGEgZ29vZCB0aGluZy48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkhvd2V2ZXIsIHdoZW4geW91ciBkZXBlbmRlbmNpZXMgYnJlYWsgZG93biB0aGUKICAgICAgICBoaWdoZXItbGV2ZWwgdGFzawogICAgICAgIGludG8gc2V2ZXJhbCBzbWFsbGVyIHN0ZXBzLCB0aGlzIGJlaGF2aW91ciBiZWNvbWVzCiAgICAgICAgY291bnRlci1pbnR1aXRpdmUuIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBzb2x1dGlvbnMgYXZhaWxhYmxlOgogICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9sPgogICAgICAgICAgPGxpPlB1dCB0aGUgc2FtZSBjb25kaXRpb24gb24gZWFjaCBvZiB0aGUgZGVwZW5kZW50IHRhcmdldHMuPC9saT4KCiAgICAgICAgICA8bGk+RXhlY3V0ZSB0aGUgc3RlcHMgdXNpbmcgPGNvZGU+Jmx0O2FudGNhbGwmZ3Q7PC9jb2RlPiwKICAgICAgICAgIGluc3RlYWQgb2Ygc3BlY2lmeWluZyB0aGVtIGluc2lkZSB0aGUgPGNvZGU+ZGVwZW5kczwvY29kZT4KICAgICAgICAgIGF0dHJpYnV0ZS48L2xpPgogICAgICAgIDwvb2w+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9ImluY2x1ZGUtb3JkZXIiPjwvYT4KICAgICAgSW4gbXkgPGNvZGU+Jmx0O2ZpbGVzZXQmZ3Q7PC9jb2RlPiwgSSd2ZSBwdXQgaW4gYW4KICAgICAgPGNvZGU+Jmx0O2V4Y2x1ZGUmZ3Q7PC9jb2RlPiBvZiBhbGwgZmlsZXMgZm9sbG93ZWQgYnkgYW4KICAgICAgPGNvZGU+Jmx0O2luY2x1ZGUmZ3Q7PC9jb2RlPiBvZiBqdXN0IHRoZSBmaWxlcyBJIHdhbnQsIGJ1dCBpdAogICAgICBpc24ndCBnaXZpbmcgbWUgYW55IGZpbGVzIGF0IGFsbC4gV2hhdCdzIHdyb25nPwogICAgICAKICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+VGhlIG9yZGVyIG9mIHRoZSA8Y29kZT4mbHQ7aW5jbHVkZSZndDs8L2NvZGU+IGFuZAogICAgICAgIDxjb2RlPiZsdDtleGNsdWRlJmd0OzwvY29kZT4gdGFncyB3aXRoaW4gYSA8Y29kZT4mbHQ7ZmlsZXNldCZndDs8L2NvZGU+CiAgICAgICAgaXMgaWdub3JlZCB3aGVuIHRoZSBGaWxlU2V0IGlzIGNyZWF0ZWQuIEluc3RlYWQsIGFsbCBvZiB0aGUKICAgICAgICA8Y29kZT4mbHQ7aW5jbHVkZSZndDs8L2NvZGU+IGVsZW1lbnRzIGFyZSBwcm9jZXNzZWQgdG9nZXRoZXIsCiAgICAgICAgZm9sbG93ZWQgYnkgYWxsIG9mIHRoZSA8Y29kZT4mbHQ7ZXhjbHVkZSZndDs8L2NvZGU+CiAgICAgICAgZWxlbWVudHMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgPGNvZGU+Jmx0O2V4Y2x1ZGUmZ3Q7PC9jb2RlPgogICAgICAgIGVsZW1lbnRzIG9ubHkgYXBwbHkgdG8gdGhlIGZpbGUgbGlzdCBwcm9kdWNlZCBieSB0aGUKICAgICAgICA8Y29kZT4mbHQ7aW5jbHVkZSZndDs8L2NvZGU+IGVsZW1lbnRzLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+VG8gZ2V0IHRoZSBmaWxlcyB5b3Ugd2FudCwgZm9jdXMgb24ganVzdCB0aGUKICAgICAgICA8Y29kZT4mbHQ7aW5jbHVkZSZndDs8L2NvZGU+IHBhdHRlcm5zIHRoYXQgd291bGQgYmUgbmVjZXNzYXJ5CiAgICAgICAgdG8gZ2V0IHRoZW0uIElmIHlvdSBmaW5kIHlvdSBuZWVkIHRvIHRyaW0gdGhlIGxpc3QgdGhhdCB0aGUKICAgICAgICA8Y29kZT4mbHQ7aW5jbHVkZSZndDs8L2NvZGU+IGVsZW1lbnRzIHByb2R1Y2UsIHRoZW4gdXNlCiAgICAgICAgPGNvZGU+Jmx0O2V4Y2x1ZGUmZ3Q7PC9jb2RlPiBlbGVtZW50cy48L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9InByb3BlcnRpZXMtbm90LXRyaW1tZWQiPjwvYT4KICAgICAgPGNvZGU+YW50PC9jb2RlPiBmYWlsZWQgdG8gYnVpbGQgbXkgcHJvZ3JhbSB2aWEgamF2YWMKICAgICAgZXZlbiB3aGVuIEkgcHV0IHRoZSBuZWVkZWQgamFycyBpbiBhbiBleHRlcm5hbAogICAgICA8Y29kZT5idWlsZC5wcm9wZXJ0aWVzPC9jb2RlPiBmaWxlIGFuZCByZWZlcmVuY2UgdGhlbSBieQogICAgICA8Y29kZT5wYXRoZWxlbWVudDwvY29kZT4gb3IgPGNvZGU+Y2xhc3NwYXRoIHJlZmlkPC9jb2RlPi4KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+V2hlbiA8Y29kZT5hbnQ8L2NvZGU+IGxvYWRzIHByb3BlcnRpZXMgZnJvbSBhbiBleHRlcm5hbAogICAgICAgIGZpbGUgaXQgZG9lc24ndCB0b3VjaCB0aGUgdmFsdWUgb2YgcHJvcGVydGllcywgdHJhaWxpbmcgYmxhbmtzCiAgICAgICAgd2lsbCBub3QgYmUgdHJpbW1lZCBmb3IgZXhhbXBsZS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPklmIHRoZSB2YWx1ZSByZXByZXNlbnRzIGEgZmlsZSBwYXRoLCBsaWtlIGEgamFyIG5lZWRlZCB0bwogICAgICAgIGNvbXBpbGUsIHRoZSB0YXNrIHdoaWNoIHJlcXVpcmVzIHRoZSB2YWx1ZSwgamF2YWMgZm9yIGV4YW1wbGUKICAgICAgICB3b3VsZCBmYWlsIHRvIGNvbXBpbGUgc2luY2UgaXQgY2FuJ3QgZmluZCB0aGUgZmlsZSBkdWUgdG8KICAgICAgICB0cmFpbGluZyBzcGFjZXMuPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJ3aW56aXAtbGllcyI+PC9hPgogICAgICBBbnQgY3JlYXRlcyBXQVIgZmlsZXMgd2l0aCBhIGxvd2VyLWNhc2UKICAgICAgICA8Y29kZT53ZWItaW5mPC9jb2RlPiBvciBKQVIgZmlsZXMgd2l0aCBhIGxvd2VyLWNhc2UKICAgICAgICA8Y29kZT5tZXRhLWluZjwvY29kZT4gZGlyZWN0b3J5LgogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD5ObyBpdCBkb2Vzbid0LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+WW91IG1heSBoYXZlIHNlZW4gdGhlc2UgbG93ZXItY2FzZSBkaXJlY3RvcnkgbmFtZXMgaW4KICAgICAgICBXaW5aSVAsIGJ1dCBXaW5aSVAgaXMgdHJ5aW5nIHRvIGJlIGhlbHBmdWwgKGFuZCBmYWlscykuICBJZgogICAgICAgIFdpblpJUCBlbmNvdW50ZXJzIGEgZmlsZW5hbWUgdGhhdCBpcyBhbGwgdXBwZXItY2FzZSwgaXQKICAgICAgICBhc3N1bWVzIGl0IGhhcyBjb21lIGZyb20gYW4gb2xkIERPUyBib3ggYW5kIGNoYW5nZXMgdGhlIGNhc2UgdG8KICAgICAgICBhbGwgbG93ZXItY2FzZSBmb3IgeW91LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+SWYgeW91IGV4dHJhY3QgKG9yIGp1c3QgY2hlY2spIHRoZSBhcmNoaXZlIHdpdGggamFyLCB5b3UKICAgICAgICB3aWxsIHNlZSB0aGF0IHRoZSBuYW1lcyBoYXZlIHRoZSBjb3JyZWN0IGNhc2UuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5XaXRoIFdpblpJUCAodmVyc2lvbiA4LjEgYXQgbGVhc3QpLCB0aGlzIGNhbiBiZSBjb3JyZWN0ZWQgaW4gdGhlCiAgICAgICAgY29uZmlndXJhdGlvbi4gIEluIHRoZSBPcHRpb25zL0NvbmZpZ3VyYXRpb24gbWVudSwgaW4gdGhlIFZpZXcgdGFiLCBHZW5lcmFsCiAgICAgICAgc2VjdGlvbiwgY2hlY2sgdGhlICJBbGxvdyBhbGwgdXBwZXIgY2FzZSBmaWxlcyBuYW1lcyIgYm94LiAgVGhlIE1FVEEtSU5GIGFuZAogICAgICAgIFdFQi1JTkYgd2lsbCBsb29rIGNvcnJlY3QuPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJOb0NsYXNzRGVmRm91bmRFcnJvciI+PC9hPgogICAgICBJIGluc3RhbGxlZCBBbnQgMS42LnggYW5kIG5vdyBnZXQKICAgICAgICA8Y29kZT5FeGNlcHRpb24gaW4gdGhyZWFkICJtYWluIiBqYXZhLmxhbmcuTm9DbGFzc0RlZkZvdW5kRXJyb3I6CiAgICAgICAgPC9jb2RlPgogICAgICAKICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICBUaGUgY2F1c2Ugb2YgdGhpcyBpcyB0aGF0IHRoZXJlIGlzIGFuIG9sZCB2ZXJzaW9uIG9mIGFudCBzb21ld2hlcmUgaW4gdGhlCiAgICAgICAgICBjbGFzcyBwYXRoIG9yIGNvbmZpZ3VyYXRpb24uCiAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgIEEgdmVyc2lvbiBvZiB0aGlzIHByb2JsZW0gaGFwcGVucyB3aXRoIGphcnMgdGhhdCBhcmUgaW4gdGhlIGNsYXNzcGF0aAogICAgICAgICAgdGhhdCBpbmNsdWRlIGFuIGVtYmVkZGVkIGNvcHkgb2YgYW50IGNsYXNzZXMuCiAgICAgICAgICBBbiBleGFtcGxlIG9mIHRoaXMgaXMgc29tZSBjb3BpZXMgb2Ygd2VibG9naWMuamFyLgogICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgT25lIGNhbiBjaGVjayBpZiB0aGlzIGlzIHRoZSBjYXNlIGJ5IGRvaW5nIChvbiB1bml4L3NoKToKICAgICAgICA8Y29kZT48cHJlPgogICAgICAgIHVuc2V0IENMQVNTUEFUSAogICAgICAgIGFudCAtdmVyc2lvbgogICAgICAgIDwvcHJlPgogICAgICAgIDwvY29kZT4KICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9Ikluc3RhbnRpYXRpb25FeGNlcHRpb24iPjwvYT4KICAgICAgSSBpbnN0YWxsZWQgQW50IDEuNi54IGFuZCBub3cgZ2V0CiAgICAgICAgPGNvZGU+amF2YS5sYW5nLkluc3RhbnRpYXRpb25FeGNlcHRpb246IG9yZy5hcGFjaGUudG9vbHMuYW50Lk1haW48L2NvZGU+CiAgICAgIAogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgIFRoZSBjYXVzZSBvZiB0aGlzIGlzIHRoYXQgdGhlcmUgaXMgYW4gb2xkIHZlcnNpb24gb2YgYW50IHNvbWV3aGVyZSBpbiB0aGUKICAgICAgICAgIGNsYXNzIHBhdGggb3IgY29uZmlndXJhdGlvbi4KICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPgogICAgICAgICAgQSB2ZXJzaW9uIG9mIHRoaXMgcHJvYmxlbSBtYXkgYmUgc2VlbiBvbiBzb21lIGxpbnV4IHN5c3RlbXMuCiAgICAgICAgICBTb21lIGxpbnV4IHN5c3RlbXMgKEZlZG9yYSBDb3JlIDIgZm9yIGV4YW1wbGUpLCBjb21lcyB3aXRoIGEgdmVyc2lvbgogICAgICAgICAgb2YgYW50IHByZS1pbnN0YWxsZWQuIFRoZXJlIGlzIGEgY29uZmlndXJhdGlvbiBmaWxlIGNhbGxlZAogICAgICAgICAgPGNvZGU+L2V0Yy9hbnQuY29uZjwvY29kZT4gd2hpY2ggaWYgcHJlc2VudCwgdGhlIGFudCBzaGVsbAogICAgICAgICAgc2NyaXB0IHdpbGwgJ2RvdCcgaW5jbHVkZS4gT24gRmVkb3JhIENvcmUgMiwgdGhlIC9ldGMvYW50LmNvbmYKICAgICAgICAgIGZpbGUgcmVzZXRzIHRoZSA8Y29kZT5BTlRfSE9NRTwvY29kZT4gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8KICAgICAgICAgIDxjb2RlPi91c3Ivc2hhcmUvYW50PC9jb2RlPi4gVGhpcyBjYXVzZXMgdGhlIHByb2JsZW0gdGhhdAogICAgICAgICAgYW4gb2xkIHZlcnNpb24gb2YgYW50ICgxLjUueCBpbiB0aGlzIGNhdXNlKSB3aWxsIGJlIHVzZWQKICAgICAgICAgIHdpdGggYSBuZXcgdmVyc2lvbiBvZiB0aGUgYW50IHNjcmlwdCBmaWxlLgogICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICBPbmUgY2FuIGNoZWNrIGlmIHRoaXMgaXMgdGhlIGNhc2UgYnkgZG9pbmcKICAgICAgICAgIDxjb2RlPmFudCAtLW5vY29uZmlnIC12ZXJzaW9uPC9jb2RlPi4KICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9Im1hbmdsZWQtbWFuaWZlc3QiPjwvYT4KICAgICAgCiAgICAgICAgV2hlbmV2ZXIgSSB1c2UgdGhlIEFudCBqYXIgb3IgbWFuaWZlc3QgcmVsYXRlZCB0YXNrcywgbG9uZyBsaW5lcyBpbgogICAgICAgIG15IG1hbmlmZXN0IGFyZSB3cmFwcGVkIGF0IDcwIGNoYXJhY3RlcnMgYW5kIHRoZSByZXN1bHRpbmcgamFyIGRvZXMKICAgICAgICBub3Qgd29yayBpbiBteSBhcHBsaWNhdGlvbiBzZXJ2ZXIuIFdoeSBkb2VzIEFudCBkbyB0aGlzPwogICAgICAKICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICBBbnQgaW1wbGVtZW50cyB0aGUgSmF2YQogICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvZ3VpZGUvamFyL2phci5odG1sIj5KYXIKICAgICAgICAgIGZpbGUgc3BlY2lmaWNhdGlvbjwvYT4uIFBsZWFzZSByZWZlciB0byB0aGUgbm90ZXMgc2VjdGlvbiB3aGVyZSBpdAogICAgICAgICAgZGlzY3Vzc2VzIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBsZW5ndGggb2YgYSBsaW5lIGFuZCB0aGUgY29uY2VwdCBvZgogICAgICAgICAgY29udGludWF0aW9uIGNoYXJhY3RlcnMuCiAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgIElmIGEgamFyIGZpbGUgcHJvZHVjZWQgYnkgQW50IGRvZXMgbm90IHdvcmsgaW4geW91ciBhcHBzZXJ2ZXIsIGFuZAogICAgICAgICAgdGhhdCBmYWlsdXJlIGlzIGR1ZSB0byB0aGUgd3JhcHBlZCBtYW5pZmVzdCwgdGhlbiB5b3UgbmVlZAogICAgICAgICAgdG8gY29uc3VsdCB5b3VyIGFwcHNlcnZlciBwcm92aWRlciwgYXMgaXQgaXMgYSBidWcgaW4gdGhlaXIKICAgICAgICAgIGFwcHNlcnZlci4gRmFyIG1vcmUgbGlrZWx5LCBob3dldmVyLCBpcyBhIHByb2JsZW0gaW4geW91cgogICAgICAgICAgc3BlY2lmaWNhdGlvbiBvZiB5b3VyIGNsYXNzcGF0aC4gSXQgaXMgbm90IEFudCdzIHdyYXBwaW5nIG9mIHlvdXIKICAgICAgICAgIGNsYXNzcGF0aCB0aGF0IGlzIHRoZSBwcm9ibGVtLgogICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICBEbyBub3QgcmFpc2UgYSBidWcgYWJvdXQgdGhpcyBpc3N1ZSB1bnRpbCB5b3UgaGF2ZSBjaGVja2VkIHRvIGVuc3VyZQogICAgICAgICAgdGhhdCB0aGUgcHJvYmxlbSBpcyBub3QgZHVlIHRvIHlvdXIgY2xhc3NwYXRoIHNwZWNpZmljYXRpb24uCiAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJpbnRlZ3JhdGlvbiI+PC9hPgogICAgICBJcyBBbnQgc3VwcG9ydGVkIGJ5IG15IElERS9FZGl0b3I/CiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPlNlZSB0aGUgPGEgaHJlZj0iZXh0ZXJuYWwuaHRtbCNJREUgYW5kIEVkaXRvciBJbnRlZ3JhdGlvbiI+c2VjdGlvbgogICAgICAgIG9uIElERSBpbnRlZ3JhdGlvbjwvYT4gb24gb3VyIEV4dGVybmFsIFRvb2xzIGFuZCBUYXNrcyBwYWdlLjwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0iZW1hY3MtbW9kZSI+PC9hPgogICAgICBXaHkgZG9lc24ndCAoWClFbWFjcy92aS9NYWNPUyBYJ3MgcHJvamVjdCBidWlsZGVyCiAgICAgIGNvcnJlY3RseSBwYXJzZSB0aGUgZXJyb3IgbWVzc2FnZXMgZ2VuZXJhdGVkIGJ5IEFudD8KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+QW50IGFkZHMgYSAiYmFubmVyIiB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50CiAgICAgICAgdGFzayBpbiBmcm9udCBvZiBhbGwgbG9nZ2luZyBtZXNzYWdlcyAtIGFuZCB0aGVyZSBhcmUgbm8gYnVpbHQtaW4KICAgICAgICByZWd1bGFyIGV4cHJlc3Npb25zIGluIHlvdXIgZWRpdG9yIHRoYXQgd291bGQgYWNjb3VudCBmb3IKICAgICAgICB0aGlzLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+WW91IGNhbiBkaXNhYmxlIHRoaXMgYmFubmVyIGJ5IGludm9raW5nIEFudCB3aXRoIHRoZQogICAgICAgIDxjb2RlPi1lbWFjczwvY29kZT4gc3dpdGNoLiAgVG8gbWFrZSBBbnQgYXV0b2RldGVjdAogICAgICAgIEVtYWNzJyBjb21waWxlIG1vZGUsIHB1dCB0aGlzIGludG8geW91cgogICAgICAgIDxjb2RlPi5hbnRyYzwvY29kZT4gKGNvbnRyaWJ1dGVkIGJ5IFZpbGxlIFNreXR05CkuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlIj4KIyBEZXRlY3QgKFgpRW1hY3MgY29tcGlsZSBtb2RlCmlmIFsgJnF1b3Q7JEVNQUNTJnF1b3Q7ID0gJnF1b3Q7dCZxdW90OyBdIDsgdGhlbgogIEFOVF9BUkdTPSZxdW90OyRBTlRfQVJHUyAtZW1hY3MmcXVvdDsKICBBTlRfT1BUUz0mcXVvdDskQU5UX09QVFMgLURidWlsZC5jb21waWxlci5lbWFjcz10cnVlJnF1b3Q7CmZpCjwvcHJlPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5BbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFkZCB0aGUgZm9sbG93aW5nIHNuaXBwZXQgdG8geW91cgogICAgICAgIDxjb2RlPi5lbWFjczwvY29kZT4gdG8gbWFrZSBFbWFjcyB1bmRlcnN0YW5kIEFudCdzCiAgICAgICAgb3V0cHV0LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZSI+CihyZXF1aXJlICdjb21waWxlKQooc2V0cSBjb21waWxhdGlvbi1lcnJvci1yZWdleHAtYWxpc3QKICAoYXBwZW5kIChsaXN0CiAgICAgOzsgd29ya3MgZm9yIGppa2VzCiAgICAgJygmcXVvdDteXFxzLSpcXFtbXl1dKlxcXVxccy0qXFwoLitcXCk6XFwoWzAtOV0rXFwpOlxcKFswLTldK1xcKTpbMC05XSs6WzAtOV0rOiZxdW90OyAxIDIgMykKICAgICA7OyB3b3JrcyBmb3IgamF2YWMKICAgICAnKCZxdW90O15cXHMtKlxcW1teXV0qXFxdXFxzLSpcXCguK1xcKTpcXChbMC05XStcXCk6JnF1b3Q7IDEgMikpCiAgY29tcGlsYXRpb24tZXJyb3ItcmVnZXhwLWFsaXN0KSkKPC9wcmU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPllldCBhbm90aGVyIGFsdGVybmF0aXZlIHRoYXQgcHJlc2VydmVzIG1vc3Qgb2YgQW50J3MKICAgICAgICBmb3JtYXR0aW5nIGlzIHRvIHBpcGUgQW50J3Mgb3V0cHV0IHRocm91Z2ggdGhlIGZvbGxvd2luZyBQZXJsCiAgICAgICAgc2NyaXB0IGJ5IERpcmstV2lsbGVtIHZhbiBHdWxpazo8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUiPgojIS91c3IvYmluL3BlcmwKIwojIE1heSAyMDAxIGRpcmt4QGFwYWNoZS5vcmcgLSByZW1vdmUgYW55CiMgW2Zvb10gbGluZXMgZnJvbSB0aGUgb3V0cHV0OyBrZWVwaW5nCiMgc3BhY2luZyBtb3JlIG9yIGxlc3MgdGhlcmUuCiMKJHw9MTsKd2hpbGUoJmx0O1NURElOJmd0OykgewogICAgICAgIGlmIChzL14oXHMrKVxbKFx3KylcXS8vKSB7CiAgICAgICAgICAgICAgICBpZiAoJDIgbmUgJGxhc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJnF1b3Q7JDFcWyQyXF0mcXVvdDs7CiAgICAgICAgICAgICAgICAgICAgICAgICRzID0gJyAnIHggbGVuZ3RoKCQyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICZxdW90OyQxICRzICZxdW90OzsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAkbGFzdCA9ICQyOwogICAgICAgIH07CiAgICAgICAgcHJpbnQ7Cn07CjwvcHJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJkdGQiPjwvYT4KICAgICAgSXMgdGhlcmUgYSBEVEQgdGhhdCBJIGNhbiB1c2UgdG8gdmFsaWRhdGUgbXkgYnVpbGQKICAgICAgZmlsZXM/CiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPkFuIGluY29tcGxldGUgRFREIGNhbiBiZSBjcmVhdGVkIGJ5IHRoZQogICAgICAgICAgPGNvZGU+Jmx0O2FudHN0cnVjdHVyZSZndDs8L2NvZGU+IHRhc2sgLSBidXQgdGhpcyBvbmUKICAgICAgICAgIGhhcyBhIGZldyBwcm9ibGVtczo8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgPGxpPkl0IGRvZXNuJ3Qga25vdyBhYm91dCByZXF1aXJlZCBhdHRyaWJ1dGVzLiAgT25seQogICAgICAgICAgICBtYW51YWwgdHdlYWtpbmcgb2YgdGhpcyBmaWxlIGNhbiBoZWxwIGhlcmUuPC9saT4KCiAgICAgICAgICAgIDxsaT5JdCBpcyBub3QgY29tcGxldGUgLSBpZiB5b3UgYWRkIG5ldyB0YXNrcyB2aWEKICAgICAgICAgICAgPGNvZGU+Jmx0O3Rhc2tkZWYmZ3Q7PC9jb2RlPiBpdCB3b24ndCBrbm93IGFib3V0IGl0LiAgU2VlCiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2R2LmZyL3BhZ2VzL2Nhc2EvaHRtbC9hbnQtZHRkLmVuLmh0bWwiPnRoaXMKICAgICAgICAgICAgcGFnZTwvYT4gYnkgTWljaGVsIENhc2FiaWFuY2EgZm9yIGEgc29sdXRpb24gdG8gdGhpcwogICAgICAgICAgICBwcm9ibGVtLiAgTm90ZSB0aGF0IHRoZSBEVEQgeW91IGNhbiBkb3dubG9hZCBhdCB0aGlzIHBhZ2UKICAgICAgICAgICAgaXMgYmFzZWQgb24gQW50IDAuMy4xLjwvbGk+CgogICAgICAgICAgICA8bGk+SXQgbWF5IGV2ZW4gYmUgYW4gaW52YWxpZCBEVEQuICBBcyBBbnQgYWxsb3dzIHRhc2tzCiAgICAgICAgICAgIHdyaXRlcnMgdG8gZGVmaW5lIGFyYml0cmFyeSBlbGVtZW50cywgbmFtZSBjb2xsaXNpb25zIHdpbGwKICAgICAgICAgICAgaGFwcGVuIHF1aXRlIGZyZXF1ZW50bHkgLSBpZiB5b3VyIHZlcnNpb24gb2YgQW50IGNvbnRhaW5zCiAgICAgICAgICAgIHRoZSBvcHRpb25hbCA8Y29kZT4mbHQ7dGVzdCZndDs8L2NvZGU+IGFuZAogICAgICAgICAgICA8Y29kZT4mbHQ7anVuaXQmZ3Q7PC9jb2RlPiB0YXNrcywgdGhlcmUgYXJlIHR3byBYTUwKICAgICAgICAgICAgZWxlbWVudHMgbmFtZWQgPGNvZGU+dGVzdDwvY29kZT4gKHRoZSB0YXNrIGFuZCB0aGUgbmVzdGVkIGNoaWxkCiAgICAgICAgICAgIGVsZW1lbnQgb2YgPGNvZGU+Jmx0O2p1bml0Jmd0OzwvY29kZT4pIHdpdGggZGlmZmVyZW50IGF0dHJpYnV0ZQogICAgICAgICAgICBsaXN0cy4gIFRoaXMgcHJvYmxlbSBjYW5ub3QgYmUgc29sdmVkOyBEVERzIGRvbid0IGdpdmUgYQogICAgICAgICAgICBzeW50YXggcmljaCBlbm91Z2ggdG8gc3VwcG9ydCB0aGlzLjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJ4bWwtZW50aXR5LWluY2x1ZGUiPjwvYT4KICAgICAgSG93IGRvIEkgaW5jbHVkZSBhbiBYTUwgc25pcHBldCBpbiBteSBidWlsZCBmaWxlPwogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD5Zb3UgY2FuIHVzZSBYTUwncyB3YXkgb2YgaW5jbHVkaW5nIGV4dGVybmFsIGZpbGVzIGFuZCBsZXQKICAgICAgICB0aGUgcGFyc2VyIGRvIHRoZSBqb2IgZm9yIEFudDo8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUiPgombHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90Oz8mZ3Q7CgombHQ7IURPQ1RZUEUgcHJvamVjdCBbCiAgICAgICAmbHQ7IUVOVElUWSBjb21tb24gU1lTVEVNICZxdW90O2NvbW1vbi54bWwmcXVvdDsmZ3Q7Cl0mZ3Q7CgombHQ7cHJvamVjdCBuYW1lPSZxdW90O3Rlc3QmcXVvdDsgZGVmYXVsdD0mcXVvdDt0ZXN0JnF1b3Q7IGJhc2VkaXI9JnF1b3Q7LiZxdW90OyZndDsKCiAgJmx0O3RhcmdldCBuYW1lPSZxdW90O3NldHVwJnF1b3Q7Jmd0OwogICAgLi4uCiAgJmx0Oy90YXJnZXQmZ3Q7CgogICZhbXA7Y29tbW9uOwoKICAuLi4KCiZsdDsvcHJvamVjdCZndDsKPC9wcmU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPndpbGwgbGl0ZXJhbGx5IGluY2x1ZGUgdGhlIGNvbnRlbnRzIG9mIDxjb2RlPmNvbW1vbi54bWw8L2NvZGU+IHdoZXJlCiAgICAgICAgeW91J3ZlIHBsYWNlZCB0aGUgPGNvZGU+JmFtcDtjb21tb247PC9jb2RlPiBlbnRpdHkuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4oVGhlIGZpbGVuYW1lIDxjb2RlPmNvbW1vbi54bWw8L2NvZGU+IGluIHRoaXMgZXhhbXBsZSBpcyByZXNvbHZlZAogICAgICAgIHJlbGF0aXZlIHRvIHRoZSBjb250YWluaW5nIFhNTCBmaWxlIGJ5IHRoZSBYTUwgcGFyc2VyLiBZb3UgbWF5IGFsc28gdXNlCiAgICAgICAgYW4gYWJzb2x1dGUgPGNvZGU+ZmlsZTo8L2NvZGU+IHByb3RvY29sIFVSSS4pPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5JbiBjb21iaW5hdGlvbiB3aXRoIGEgRFRELCB0aGlzIHdvdWxkIGxvb2sgbGlrZSB0aGlzOjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZSI+CiZsdDshRE9DVFlQRSBwcm9qZWN0IFBVQkxJQyAmcXVvdDstLy9BTlQvL0RURCBwcm9qZWN0Ly9FTiZxdW90OyAmcXVvdDthbnQuZHRkJnF1b3Q7IFsKICAgJmx0OyFFTlRJVFkgaW5jbHVkZSBTWVNURU0gJnF1b3Q7aGVhZGVyLnhtbCZxdW90OyZndDsKXSZndDsKPC9wcmU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlN0YXJ0aW5nIHdpdGggQW50IDEuNiwgdGhlcmUgaXMgYSBuZXcKICAgICAgICA8Y29kZT4mbHQ7aW1wb3J0Jmd0OzwvY29kZT4gdGFzayB0aGF0IGNhbiAoYWxzbykgYmUgdXNlZCB0bwogICAgICAgIGluY2x1ZGUgYnVpbGQgZmlsZSBmcmFnbWVudHMuICBVbmxpa2UgdGhlIHNuaXBwZXRzIHVzZWQgd2l0aAogICAgICAgIGVudGl0eSBpbmNsdWRlcywgdGhlIHJlZmVyZW5jZWQgZmlsZXMgaGF2ZSB0byBiZSBjb21wbGV0ZSBBbnQKICAgICAgICBidWlsZCBmaWxlcywgdGhvdWdoLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+VGhlIGV4YW1wbGUgYWJvdmUgd291bGQgYmVjb21lOjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZSI+CiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7PyZndDsKJmx0O3Byb2plY3QgbmFtZT0mcXVvdDt0ZXN0JnF1b3Q7IGRlZmF1bHQ9JnF1b3Q7dGVzdCZxdW90OyBiYXNlZGlyPSZxdW90Oy4mcXVvdDsmZ3Q7CgogICZsdDt0YXJnZXQgbmFtZT0mcXVvdDtzZXR1cCZxdW90OyZndDsKICAgIC4uLgogICZsdDsvdGFyZ2V0Jmd0OwoKICAmbHQ7aW1wb3J0IGZpbGU9JnF1b3Q7Li9jb21tb24ueG1sJnF1b3Q7LyZndDsKCiAgLi4uCgombHQ7L3Byb2plY3QmZ3Q7CjwvcHJlPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5Vbmxpa2UgZW50aXR5IGluY2x1ZGVzLCA8Y29kZT4mbHQ7aW1wb3J0Jmd0OzwvY29kZT4gd2lsbAogICAgICAgIGxldCB5b3UgdXNlIEFudCBwcm9wZXJ0aWVzIGluIHRoZSBmaWxlIG5hbWUuPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmYXEiPgogICAgICA8YSBuYW1lPSJtYWlsLWxvZ2dlciI+PC9hPgogICAgICBIb3cgZG8gSSBzZW5kIGFuIGVtYWlsIHdpdGggdGhlIHJlc3VsdCBvZiBteSBidWlsZAogICAgICAgIHByb2Nlc3M/CiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPklmIHlvdSBhcmUgdXNpbmcgYSBuaWdodGx5IGJ1aWxkIG9mIEFudCAxLjUgYWZ0ZXIKICAgICAgICAyMDAxLTEyLTE0LCB5b3UgY2FuIHVzZSB0aGUgYnVpbHQtaW4gTWFpbExvZ2dlcjo8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUiPgogICAgICAgICBhbnQgLWxvZ2dlciBvcmcuYXBhY2hlLnRvb2xzLmFudC5saXN0ZW5lci5NYWlsTG9nZ2VyCjwvcHJlPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5TZWUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvYW50L2NvcmUvdHJ1bmsvZG9jcy9tYW51YWwvbGlzdGVuZXJzLmh0bWwiPkxpc3RlbmVycwogICAgICAgICZhbXA7IExvZ2dlcnM8L2E+IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMgb24gdGhlIHByb3BlcnRpZXMKICAgICAgICByZXF1aXJlZC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkZvciBvbGRlciB2ZXJzaW9ucyBvZiBBbnQsIHlvdSBjYW4gdXNlIGEgY3VzdG9tCiAgICAgICAgQnVpbGRMaXN0ZW5lciB0aGF0IHNlbmRzIG91dCBhbiBlbWFpbAogICAgICAgIGluIHRoZSBidWlsZEZpbmlzaGVkKCkgbWV0aG9kLiAgV2lsbCBHbG96ZXIKICAgICAgICAmbHQ7d2lsbC5nbG96ZXJAamRhLmNvbSZndDsgaGFzIHdyaXR0ZW4gc3VjaCBhIGxpc3RlbmVyIGJhc2VkCiAgICAgICAgb24gPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9wcm9kdWN0cy9qYXZhbWFpbC8iPkphdmFNYWlsPC9hPi4KICAgICAgICBUaGUgc291cmNlIGlzOjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZSI+CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwuKjsKaW1wb3J0IGphdmF4Lm1haWwuKjsKaW1wb3J0IGphdmF4Lm1haWwuaW50ZXJuZXQuKjsKaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50Lio7CgovKioKICogQSBzaW1wbGUgbGlzdGVuZXIgdGhhdCB3YWl0cyBmb3IgYSBidWlsZCB0byBmaW5pc2ggYW5kIHNlbmRzIGFuIGVtYWlsCiAqIG9mIHRoZSByZXN1bHRzLiAgVGhlIHNldHRpbmdzIGFyZSBzdG9yZWQgaW4gJnF1b3Q7bW9uaXRvci5wcm9wZXJ0aWVzJnF1b3Q7IGFuZAogKiBhcmUgZmFpcmx5IHNlbGYgZXhwbGFuYXRvcnkuCiAqCiAqIEBhdXRob3IgICAgICBXaWxsIEdsb3plcgogKiBAdmVyc2lvbiAgICAgMS4wNWEgMDkvMDYvMjAwMAogKi8KcHVibGljIGNsYXNzIEJ1aWxkTW9uaXRvciBpbXBsZW1lbnRzIEJ1aWxkTGlzdGVuZXIgewogICAgcHJvdGVjdGVkIFByb3BlcnRpZXMgcHJvcHM7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgQnVpbGRNb25pdG9yLgogICAgICovCiAgICBwdWJsaWMgQnVpbGRNb25pdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwogICAgICAgIElucHV0U3RyZWFtIGlzID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCZxdW90O21vbml0b3IucHJvcGVydGllcyZxdW90Oyk7CiAgICAgICAgcHJvcHMubG9hZChpcyk7CiAgICAgICAgaXMuY2xvc2UoKTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBidWlsZFN0YXJ0ZWQoQnVpbGRFdmVudCBlKSB7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmUgdGhlIHN0YXR1cyBvZiB0aGUgYnVpbGQgYW5kIHRoZSBhY3Rpb25zIHRvIGZvbGxvdywgbm93IHRoYXQKICAgICAqIHRoZSBidWlsZCBoYXMgY29tcGxldGVkLgogICAgICoKICAgICAqIEBwYXJhbSAgICAgICBlICAgICAgIEV2ZW50IGRlc2NyaWJpbmcgdGhlIGJ1aWxkIHN0YXR1cy4KICAgICAqLwogICAgcHVibGljIHZvaWQgYnVpbGRGaW5pc2hlZChCdWlsZEV2ZW50IGUpIHsKICAgICAgICBUaHJvd2FibGUgdGggPSBlLmdldEV4Y2VwdGlvbigpOwogICAgICAgIFN0cmluZyBzdGF0dXMgPSAodGggIT0gbnVsbCkgPyAmcXVvdDtmYWlsZWQmcXVvdDsgOiAmcXVvdDtzdWNjZWVkZWQmcXVvdDs7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFN0cmluZyBrZXkgPSAmcXVvdDtidWlsZC4mcXVvdDsgKyBzdGF0dXM7CiAgICAgICAgICAgIGlmIChwcm9wcy5nZXRQcm9wZXJ0eShrZXkgKyAmcXVvdDsubm90aWZ5JnF1b3Q7KS5lcXVhbHNJZ25vcmVDYXNlKCZxdW90O2ZhbHNlJnF1b3Q7KSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgU2Vzc2lvbiBzZXNzaW9uID0gU2Vzc2lvbi5nZXREZWZhdWx0SW5zdGFuY2UocHJvcHMsIG51bGwpOwoKICAgICAgICAgICAgTWltZU1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBNaW1lTWVzc2FnZShzZXNzaW9uKTsKICAgICAgICAgICAgbWVzc2FnZS5hZGRSZWNpcGllbnRzKE1lc3NhZ2UuUmVjaXBpZW50VHlwZS5UTywgcGFyc2VBZGRyZXNzZXMoCiAgICAgICAgICAgICAgICBwcm9wcy5nZXRQcm9wZXJ0eShrZXkgKyAmcXVvdDsuZW1haWwudG8mcXVvdDspKSk7CiAgICAgICAgICAgIG1lc3NhZ2Uuc2V0U3ViamVjdChwcm9wcy5nZXRQcm9wZXJ0eShrZXkgKyAmcXVvdDsuZW1haWwuc3ViamVjdCZxdW90OykpOwoKICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoCiAgICAgICAgICAgICAgICBwcm9wcy5nZXRQcm9wZXJ0eSgmcXVvdDtidWlsZC5sb2cmcXVvdDspKSk7CiAgICAgICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKCiAgICAgICAgICAgIFN0cmluZyBsaW5lID0gYnIucmVhZExpbmUoKTsKICAgICAgICAgICAgd2hpbGUgKGxpbmUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgc3cud3JpdGUobGluZSk7CiAgICAgICAgICAgICAgICBzdy53cml0ZSgmcXVvdDtcbiZxdW90Oyk7CiAgICAgICAgICAgICAgICBsaW5lID0gYnIucmVhZExpbmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBici5jbG9zZSgpOwoKICAgICAgICAgICAgbWVzc2FnZS5zZXRUZXh0KHN3LnRvU3RyaW5nKCksICZxdW90O1VURi04JnF1b3Q7KTsKICAgICAgICAgICAgc3cuY2xvc2UoKTsKCiAgICAgICAgICAgIFRyYW5zcG9ydCB0cmFuc3BvcnQgPSBzZXNzaW9uLmdldFRyYW5zcG9ydCgpOwogICAgICAgICAgICB0cmFuc3BvcnQuY29ubmVjdCgpOwogICAgICAgICAgICB0cmFuc3BvcnQuc2VuZChtZXNzYWdlKTsKICAgICAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCk7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigmcXVvdDtCdWlsZE1vbml0b3IgZmFpbGVkIHRvIHNlbmQgZW1haWwhJnF1b3Q7KTsKICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBpbnRlcm5ldCBlbWFpbCBhZGRyZXNzZXMuCiAgICAgKgogICAgICogQHBhcmFtICAgICAgIHMgICAgICAgVGhlIGxpc3Qgb2YgYWRkcmVzc2VzLgogICAgICogQHJldHVybiAgICAgIEFycmF5IG9mIEFkZHJlc3Nlcy4KICAgICAqLwogICAgcHJvdGVjdGVkIEFkZHJlc3NbXSBwYXJzZUFkZHJlc3NlcyhTdHJpbmcgcykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzLCAmcXVvdDssJnF1b3Q7KTsKICAgICAgICBBZGRyZXNzW10gYWRkcnMgPSBuZXcgQWRkcmVzc1tzdC5jb3VudFRva2VucygpXTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBhZGRycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBhZGRyc1tpXSA9IG5ldyBJbnRlcm5ldEFkZHJlc3Moc3QubmV4dFRva2VuKCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWRkcnM7CiAgICB9CgogICAgcHVibGljIHZvaWQgbWVzc2FnZUxvZ2dlZChCdWlsZEV2ZW50IGUpIHsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCB0YXJnZXRTdGFydGVkKEJ1aWxkRXZlbnQgZSkgewogICAgfQoKICAgIHB1YmxpYyB2b2lkIHRhcmdldEZpbmlzaGVkKEJ1aWxkRXZlbnQgZSkgewogICAgfQoKICAgIHB1YmxpYyB2b2lkIHRhc2tTdGFydGVkKEJ1aWxkRXZlbnQgZSkgewogICAgfQoKICAgIHB1YmxpYyB2b2lkIHRhc2tGaW5pc2hlZChCdWlsZEV2ZW50IGUpIHsKICAgIH0KfQo8L3ByZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+V2l0aCBhIDxjb2RlPm1vbml0b3IucHJvcGVydGllczwvY29kZT4gbGlrZSB0aGlzOjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZSI+CiMgY29uZmlndXJhdGlvbiBmb3IgYnVpbGQgbW9uaXRvcgoKbWFpbC50cmFuc3BvcnQucHJvdG9jb2w9c210cAptYWlsLnNtdHAuaG9zdD0mbHQ7aG9zdCZndDsKbWFpbC5mcm9tPVdpbGwgR2xvemVyICZsdDt3aWxsLmdsb3plckBqZGEuY29tJmd0OwoKYnVpbGQubG9nPWJ1aWxkLmxvZwoKYnVpbGQuZmFpbGVkLm5vdGlmeT10cnVlCmJ1aWxkLmZhaWxlZC5lbWFpbC50bz13aWxsLmdsb3plckBqZGEuY29tCmJ1aWxkLmZhaWxlZC5lbWFpbC5zdWJqZWN0PU5pZ2h0bHkgYnVpbGQgZmFpbGVkIQoKYnVpbGQuc3VjY2VlZGVkLm5vdGlmeT10cnVlCmJ1aWxkLnN1Y2NlZWRlZC5lbWFpbC50bz13aWxsLmdsb3plckBqZGEuY29tCmJ1aWxkLnN1Y2NlZWRlZC5lbWFpbC5zdWJqZWN0PU5pZ2h0bHkgYnVpbGQgc3VjY2VlZGVkIQo8L3ByZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+PGNvZGU+bW9uaXRvci5wcm9wZXJ0aWVzPC9jb2RlPiBzaG91bGQgYmUgcGxhY2VkIHJpZ2h0IG5leHQKICAgICAgICB0byB5b3VyIGNvbXBpbGVkIDxjb2RlPkJ1aWxkTW9uaXRvci5jbGFzczwvY29kZT4uICBUbyB1c2UgaXQsCiAgICAgICAgaW52b2tlIEFudCBsaWtlOjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZSI+CmFudCAtbGlzdGVuZXIgQnVpbGRNb25pdG9yIC1sb2dmaWxlIGJ1aWxkLmxvZwo8L3ByZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFrZSBzdXJlIHRoYXQgPGNvZGU+bWFpbC5qYXI8L2NvZGU+IGZyb20gSmF2YU1haWwgYW5kCiAgICAgICAgPGNvZGU+YWN0aXZhdGlvbi5qYXI8L2NvZGU+IGZyb20gdGhlCiAgICAgICAgPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9wcm9kdWN0cy9qYXZhYmVhbnMvZ2xhc2dvdy9qYWYuaHRtbCI+SmF2YQogICAgICAgIEJlYW5zIEFjdGl2YXRpb24gRnJhbWV3b3JrPC9hPiBhcmUgaW4geW91ciA8Y29kZT5DTEFTU1BBVEg8L2NvZGU+LjwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0ibGlzdGVuZXItcHJvcGVydGllcyI+PC9hPgogICAgICBIb3cgZG8gSSBnZXQgYXQgdGhlIHByb3BlcnRpZXMgdGhhdCBBbnQgd2FzIHJ1bm5pbmcKICAgICAgd2l0aCBmcm9tIGluc2lkZSBCdWlsZExpc3RlbmVyPwogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD5Zb3UgY2FuIGdldCBhdCBhIGhhc2h0YWJsZSB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyB0aGF0IEFudAogICAgICAgIGhhcyBiZWVuIHVzaW5nIHRocm91Z2ggdGhlIEJ1aWxkRXZlbnQgcGFyYW1ldGVyLiBGb3IKICAgICAgICBleGFtcGxlOjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZSI+CnB1YmxpYyB2b2lkIGJ1aWxkRmluaXNoZWQoQnVpbGRFdmVudCBlKSB7CiAgICBIYXNodGFibGUgdGFibGUgPSBlLmdldFByb2plY3QoKS5nZXRQcm9wZXJ0aWVzKCk7CiAgICBTdHJpbmcgYnVpbGRwYXRoID0gKFN0cmluZyl0YWJsZS5nZXQoJnF1b3Q7YnVpbGQucGF0aCZxdW90Oyk7CiAgICAuLi4KfQo8L3ByZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+VGhpcyBpcyBtb3JlIGFjY3VyYXRlIHRoYW4ganVzdCByZWFkaW5nIHRoZSBzYW1lIHByb3BlcnR5CiAgICAgICAgZmlsZXMgdGhhdCB5b3VyIHByb2plY3QgZG9lcywgc2luY2UgaXQgd2lsbCBnaXZlIHRoZSBjb3JyZWN0CiAgICAgICAgcmVzdWx0cyBmb3IgcHJvcGVydGllcyB0aGF0IHdlcmUgc3BlY2lmaWVkIG9uIHRoZSBBbnQgY29tbWFuZCBsaW5lLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0iMTcwLXJlcXVpcmVzLWp1bml0Ij48L2E+CiAgICAgIEFudCAxLjcuMCBkb2Vzbid0IGJ1aWxkIGZyb20gc291cmNlcyB3aXRob3V0CiAgICAgICAgSlVuaXQKICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+V2hlbiBidWlsZGluZyBBbnQgMS43LjAgZnJvbSB0aGUgc291cmNlIHJlbGVhc2Ugd2l0aG91dAogICAgICAgIGp1bml0LmphciB0aGUgYnVpbGQgZmFpbHMgd2l0aCB0aGUgbWVzc2FnZSAiV2UgY2Fubm90IGJ1aWxkCiAgICAgICAgdGhlIHRlc3QgamFyIHVubGVzcyBKVW5pdCBpcyBwcmVzZW50Ii48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPldpdGggQW50IDEuNy4wIHdlJ3ZlIHN0YXJ0ZWQgdG8gYWRkIGFudC10ZXN0dXRpbC5qYXIgYXMKICAgICAgICBwYXJ0IG9mIHRoZSBkaXN0cmlidXRpb24gYW5kIHRoaXMgY2F1c2VzIGEgaGFyZCBkZXBlbmRlbmN5IG9uCiAgICAgICAgSlVuaXQgLSBhdCBsZWFzdCBpbiB2ZXJzaW9uIDEuNy4wLiAgVW5mb3J0dW5hdGVseSB0aGUKICAgICAgICBpbnN0YWxsYXRpb24gZG9jcyBkb24ndCBzYXkgc28uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5UaGVyZSBhcmUgdHdvIHdvcmthcm91bmRzOjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9sPgoKICAgICAgICAgIDxsaT5BZGQganVuaXQuamFyIHRvIHlvdXIgQ0xBU1NQQVRIIHdoZW4gYnVpbGRpbmcgQW50LjwvbGk+CgogICAgICAgICAgPGxpPkNoYW5nZSBBbnQncyBidWlsZGZpbGUgYW5kIHJlbW92ZSB0ZXN0LWphciBmcm9tIHRoZQogICAgICAgICAgZGVwZW5kcyBsaXN0IG9mIHRoZSBkaXN0LWxpdGUgdGFyZ2V0LjwvbGk+CgogICAgICAgIDwvb2w+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9InJlbW92ZS1jciI+PC9hPgogICAgICAmbHQ7Y2htb2QmZ3Q7IG9yICZsdDtleGVjJmd0OyBkb2Vzbid0IHdvcmsgaW4gQW50CiAgICAgICAgMS4zIG9uIFVuaXgKICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+VGhlIDxjb2RlPmFudFJ1bjwvY29kZT4gc2NyaXB0IGluIDxjb2RlPkFOVF9IT01FL2JpbjwvY29kZT4KICAgICAgICBoYXMgRE9TIGluc3RlYWQgb2YgVW5peCBsaW5lIGVuZGluZ3M7IHlvdSBtdXN0IHJlbW92ZSB0aGUKICAgICAgICBjYXJyaWFnZS1yZXR1cm4gY2hhcmFjdGVycyBmcm9tIHRoaXMgZmlsZS4gIFRoaXMgY2FuIGJlIGRvbmUgYnkKICAgICAgICB1c2luZyBBbnQncyA8Y29kZT4mbHQ7Zml4Y3JsZiZndDs8L2NvZGU+IHRhc2sKICAgICAgICBvciBzb21ldGhpbmcgbGlrZTo8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUiPgp0ciAtZCAnXHInICZsdDsgJEFOVF9IT01FL2Jpbi9hbnRSdW4gJmd0OyAvdG1wL2ZvbwptdiAvdG1wL2ZvbyAkQU5UX0hPTUUvYmluL2FudFJ1bgo8L3ByZT4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0iamF2YWRvYy1jYW5ub3QtZXhlY3V0ZSI+PC9hPgogICAgICBKYXZhRG9jIGZhaWxlZDogamF2YS5pby5JT0V4Y2VwdGlvbjogamF2YWRvYzogY2Fubm90IGV4ZWN1dGUKICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+VGhlcmUgaXMgYSBidWcgaW4gdGhlIFNvbGFyaXMgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mCiAgICAgICAgdGhlIEpESyAoc2VlIDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuamF2YS5zdW4uY29tL2RldmVsb3Blci9idWdQYXJhZGUvYnVncy80MjMwMzk5Lmh0bWwiPmh0dHA6Ly9kZXZlbG9wZXIuamF2YS5zdW4uY29tL2RldmVsb3Blci9idWdQYXJhZGUvYnVncy80MjMwMzk5Lmh0bWw8L2E+KS4KICAgICAgICBUaGlzIGFsc28gYXBwZWFycyB0byBiZSB0cnVlIHVuZGVyIExpbnV4LiBNb3ZpbmcgdGhlIEpESyB0bwogICAgICAgIHRoZSBmcm9udCBvZiB0aGUgUEFUSCBmaXhlcyB0aGUgcHJvYmxlbS48L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9ImRlbGVnYXRpbmctY2xhc3Nsb2FkZXIiPjwvYT4KICAgICAgJmx0O3N0eWxlJmd0OyBvciAmbHQ7anVuaXQmZ3Q7IGlnbm9yZXMgbXkKICAgICAgJmx0O2NsYXNzcGF0aCZndDsKICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+U3RhcnRpbmcgd2l0aCBBbnQgMS43LjAsICZsdDtqdW5pdCZndDsgd2lsbCBob25vciB5b3VyCiAgICAgICAgbmVzdGVkICZsdDtjbGFzc3BhdGgmZ3Q7LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+VGhlc2UgdGFza3MgZG9uJ3QgaWdub3JlIHlvdXIgY2xhc3NwYXRoIHNldHRpbmcsIHlvdQogICAgICAgIGFyZSBmYWNpbmcgYSBjb21tb24gcHJvYmxlbSB3aXRoIGRlbGVnYXRpbmcgY2xhc3Nsb2FkZXJzLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+VGhpcyBxdWVzdGlvbiBjb2xsZWN0cyBhIGNvbW1vbiB0eXBlIG9mIHByb2JsZW06IEEgdGFzawogICAgICAgIG5lZWRzIGFuIGV4dGVybmFsIGxpYnJhcnkgYW5kIGl0IGhhcyBhIG5lc3RlZCBjbGFzc3BhdGgKICAgICAgICBlbGVtZW50IHNvIHRoYXQgeW91IGNhbiBwb2ludCBpdCB0byB0aGlzIGV4dGVybmFsIGxpYnJhcnksIGJ1dAogICAgICAgIHRoYXQgZG9lc24ndCB3b3JrIHVubGVzcyB5b3UgcHV0IHRoZSBleHRlcm5hbCBsaWJyYXJ5CiAgICAgICAgaW50byB0aGUgPGNvZGU+Q0xBU1NQQVRIPC9jb2RlPiBvciBwbGFjZSBpdCBpbgogICAgICAgIDxjb2RlPkFOVF9IT01FL2xpYjwvY29kZT4uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5Tb21lIGJhY2tncm91bmQgaXMgbmVjZXNzYXJ5IGJlZm9yZSB3ZSBjYW4gZGlzY3VzcwogICAgICAgIHNvbHV0aW9ucyBmb3IgPGEgaHJlZj0iI2RlbGVnYXRpbmctY2xhc3Nsb2FkZXItMS41Ij5BbnQKICAgICAgICAxLjUueDwvYT4gYW5kIDxhIGhyZWY9IiNkZWxlZ2F0aW5nLWNsYXNzbG9hZGVyLTEuNiI+QW50CiAgICAgICAgMS42Lng8L2E+LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+V2hlbiB5b3Ugc3BlY2lmeSBhIG5lc3RlZCA8Y29kZT4mbHQ7Y2xhc3NwYXRoJmd0OzwvY29kZT4gaW4KICAgICAgICBBbnQsIEFudCBjcmVhdGVzIGEgbmV3IGNsYXNzIGxvYWRlciB0aGF0IHVzZXMgdGhlIHBhdGggeW91CiAgICAgICAgaGF2ZSBzcGVjaWZpZWQuICBJdCB0aGVuIHRyaWVzIHRvIGxvYWQgYWRkaXRpb25hbCBjbGFzc2VzIGZyb20KICAgICAgICB0aGlzIGNsYXNzbG9hZGVyLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+SW4gbW9zdCBjYXNlcyAtIGZvciBleGFtcGxlIHVzaW5nICZsdDtzdHlsZSZndDsgb3IKICAgICAgICAmbHQ7anVuaXQmZ3Q7IC0gQW50IGRvZXNuJ3QgbG9hZCB0aGUgZXh0ZXJuYWwgbGlicmFyeQogICAgICAgIGRpcmVjdGx5LCBpdCBpcyB0aGUgbG9hZGVkIGNsYXNzIHRoYXQgZG9lcyBzby48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkluIHRoZSBjYXNlIG9mIDxjb2RlPiZsdDtqdW5pdCZndDs8L2NvZGU+IGl0IGlzIHRoZSB0YXNrCiAgICAgICAgaW1wbGVtZW50YXRpb24gaXRzZWxmIGFuZCBpbiB0aGUgY2FzZSBvZgogICAgICAgIDxjb2RlPiZsdDtzdHlsZSZndDs8L2NvZGU+IGl0IGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKICAgICAgICA8Y29kZT5vcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5YU0xUTGlhaXNvbjwvY29kZT4KICAgICAgICBjbGFzcy48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxlbT5BcyBvZiBBbnQgMS43PC9lbT4gPGNvZGU+Jmx0O2p1bml0Jmd0OzwvY29kZT4gbm8gbG9uZ2VyCiAgICAgICAgcmVxdWlyZXMgeW91IHRvIGhhdmUgPGNvZGU+anVuaXQuamFyPC9jb2RlPiBpbiBBbnQncyBzdGFydHVwCiAgICAgICAgY2xhc3NwYXRoIGV2ZW4gaWYgPGNvZGU+YW50LWp1bml0LmphcjwvY29kZT4gaXMgcHJlc2VudCB0aGVyZS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkFudCdzIGNsYXNzIGxvYWRlciBpbXBsZW1lbnRhdGlvbiB1c2VzIEphdmEncwogICAgICAgIGRlbGVnYXRpb24gbW9kZWwsIHNlZSA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL3Byb2R1Y3RzL2pkay8xLjIvZG9jcy9hcGkvamF2YS9sYW5nL0NsYXNzTG9hZGVyLmh0bWwiPmh0dHA6Ly9qYXZhLnN1bi5jb20vcHJvZHVjdHMvamRrLzEuMi9kb2NzL2FwaS9qYXZhL2xhbmcvQ2xhc3NMb2FkZXIuaHRtbDwvYT4KICAgICAgICB0aGUgcGFyYWdyYXBoPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8YmxvY2txdW90ZT5UaGUgPGNvZGU+Q2xhc3NMb2FkZXI8L2NvZGU+IGNsYXNzIHVzZXMgYQogICAgICAgIGRlbGVnYXRpb24gbW9kZWwgdG8gc2VhcmNoIGZvciBjbGFzc2VzIGFuZCByZXNvdXJjZXMuIEVhY2gKICAgICAgICBpbnN0YW5jZSBvZiA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4gaGFzIGFuIGFzc29jaWF0ZWQgcGFyZW50CiAgICAgICAgY2xhc3MgbG9hZGVyLiAgV2hlbiBjYWxsZWQgdXBvbiB0byBmaW5kIGEgY2xhc3Mgb3IgcmVzb3VyY2UsIGEKICAgICAgICA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4gaW5zdGFuY2Ugd2lsbCBkZWxlZ2F0ZSB0aGUgc2VhcmNoIGZvcgogICAgICAgIHRoZSBjbGFzcyBvciByZXNvdXJjZSB0byBpdHMgcGFyZW50IGNsYXNzIGxvYWRlciBiZWZvcmUKICAgICAgICBhdHRlbXB0aW5nIHRvIGZpbmQgdGhlIGNsYXNzIG9yIHJlc291cmNlIGl0c2VsZi4gVGhlIHZpcnR1YWwKICAgICAgICBtYWNoaW5lJ3MgYnVpbHQtaW4gY2xhc3MgbG9hZGVyLCBjYWxsZWQgdGhlIGJvb3RzdHJhcAogICAgICAgIGNsYXNzIGxvYWRlciwgZG9lcyBub3QgaXRzZWxmIGhhdmUgYSBwYXJlbnQgYnV0IG1heSBzZXJ2ZSBhcwogICAgICAgIHRoZSBwYXJlbnQgb2YgYSA8Y29kZT5DbGFzc0xvYWRlcjwvY29kZT4KICAgICAgICBpbnN0YW5jZS48L2Jsb2NrcXVvdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRoZSBwb3NzaWJsZSBzb2x1dGlvbnMgZGVwZW5kIG9uIHRoZSB2ZXJzaW9uIG9mIEFudCB5b3UKICAgICAgICB1c2UsIHNlZSB0aGUgbmV4dCBzZWN0aW9ucy48L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9ImRlbGVnYXRpbmctY2xhc3Nsb2FkZXItMS41Ij48L2E+CiAgICAgICZsdDtzdHlsZSZndDsgb3IgJmx0O2p1bml0Jmd0OyBpZ25vcmVzIG15CiAgICAgICZsdDtjbGFzc3BhdGgmZ3Q7IC0gQW50IDEuNS54IHZlcnNpb24KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+UGxlYXNlIHJlYWQgPGEgaHJlZj0iI2RlbGVnYXRpbmctY2xhc3Nsb2FkZXIiPnRoZSBwcmV2aW91cwogICAgICAgIGVudHJ5PC9hPiBiZWZvcmUgeW91IGdvIGFoZWFkLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+Rmlyc3Qgb2YgYWxsIGxldCdzIHN0YXRlIHRoYXQgQW50J3Mgd3JhcHBlciBzY3JpcHQKICAgICAgICAoPGNvZGU+YW50PC9jb2RlPiBvciA8Y29kZT5hbnQuYmF0PC9jb2RlPikgYWRkcyBhbGwKICAgICAgICA8Y29kZT4uamFyPC9jb2RlPiBmaWxlcyBmcm9tIDxjb2RlPkFOVF9IT01FL2xpYjwvY29kZT4gdG8KICAgICAgICA8Y29kZT5DTEFTU1BBVEg8L2NvZGU+LCB0aGVyZWZvcmUgImluCiAgICAgICAgPGNvZGU+Q0xBU1NQQVRIPC9jb2RlPiIgc2hhbGwgbWVhbiAiZWl0aGVyIGluIHlvdXIKICAgICAgICA8Y29kZT5DTEFTU1BBVEg8L2NvZGU+IGVudmlyb25tZW50IHZhcmlhYmxlIG9yCiAgICAgICAgPGNvZGU+QU5UX0hPTUUvbGliPC9jb2RlPiIgZm9yIHRoZSByZXN0IG9mIHRoaXMKICAgICAgICBhbnN3ZXIuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5UaGUgcm9vdCBvZiB0aGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBjbGFzcyB0aGF0IG5lZWRzIHRoZQogICAgICAgIGV4dGVybmFsIGxpYnJhcnkgaXMgb24gdGhlIDxjb2RlPkNMQVNTUEFUSDwvY29kZT4uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5MZXQncyBzZWUgd2hhdCBoYXBwZW5zIHdoZW4geW91IGxvYWQgdGhlICZsdDtqdW5pdCZndDsKICAgICAgICB0YXNrLiAgQW50J3MgY2xhc3MgbG9hZGVyIHdpbGwgY29uc3VsdCB0aGUKICAgICAgICBib290c3RyYXAgY2xhc3MgbG9hZGVyIGZpcnN0LCB3aGljaCB0cmllcyB0byBsb2FkIGNsYXNzZXMgZnJvbQogICAgICAgIDxjb2RlPkNMQVNTUEFUSDwvY29kZT4uICBUaGUgYm9vdHN0cmFwIGNsYXNzIGxvYWRlcgogICAgICAgIGRvZXNuJ3Qga25vdyBhbnl0aGluZyBhYm91dCBBbnQncyBjbGFzcyBsb2FkZXIgb3IKICAgICAgICBldmVuIHRoZSBwYXRoIHlvdSBoYXZlIHNwZWNpZmllZC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPklmIHRoZSBib290c3RyYXAgY2xhc3MgbG9hZGVyIGNhbiBsb2FkIHRoZSBjbGFzcyBBbnQgaGFzCiAgICAgICAgYXNrZWQgaXQgdG8gbG9hZCAod2hpY2ggaXQgY2FuIGlmIDxjb2RlPm9wdGlvbmFsLmphcjwvY29kZT4gaXMKICAgICAgICBwYXJ0IG9mIDxjb2RlPkNMQVNTUEFUSDwvY29kZT4pLCB0aGlzIGNsYXNzIHdpbGwgdHJ5IHRvIGxvYWQKICAgICAgICB0aGUgZXh0ZXJuYWwgbGlicmFyeSBmcm9tIDxjb2RlPkNMQVNTUEFUSDwvY29kZT4gYXMgd2VsbCAtIGl0CiAgICAgICAgZG9lc24ndCBrbm93IGFueXRoaW5nIGVsc2UgLSBhbmQgd2lsbCBub3QgZmluZCBpdCB1bmxlc3MKICAgICAgICB0aGUgbGlicmFyeSBpcyBpbiA8Y29kZT5DTEFTU1BBVEg8L2NvZGU+IGFzIHdlbGwuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5UbyBzb2x2ZSB0aGlzLCB5b3UgaGF2ZSB0d28gbWFqb3Igb3B0aW9uczo8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvbD4KICAgICAgICAgIDxsaT5wdXQgYWxsIGV4dGVybmFsIGxpYnJhcmllcyB5b3UgbmVlZCBpbgogICAgICAgICAgPGNvZGU+Q0xBU1NQQVRIPC9jb2RlPiBhcyB3ZWxsIHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQsCiAgICAgICAgICBvdGhlcndpc2UgeW91IHdvdWxkbid0IGhhdmUgZm91bmQgdGhpcyBGQVEgZW50cnkuPC9saT4KCiAgICAgICAgICA8bGk+cmVtb3ZlIHRoZSBjbGFzcyB0aGF0IGxvYWRzIHRoZSBleHRlcm5hbCBsaWJyYXJ5IGZyb20KICAgICAgICAgIHRoZSA8Y29kZT5DTEFTU1BBVEg8L2NvZGU+LjwvbGk+CiAgICAgICAgPC9vbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+VGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdG8gcmVtb3ZlCiAgICAgICAgPGNvZGU+b3B0aW9uYWwuamFyPC9jb2RlPiBmcm9tIDxjb2RlPkFOVF9IT01FL2xpYjwvY29kZT4uICBJZgogICAgICAgIHlvdSBkbyBzbywgeW91IHdpbGwgaGF2ZSB0byA8Y29kZT4mbHQ7dGFza2RlZiZndDs8L2NvZGU+IGFsbAogICAgICAgIG9wdGlvbmFsIHRhc2tzIGFuZCB1c2UgbmVzdGVkIDxjb2RlPiZsdDtjbGFzc3BhdGgmZ3Q7PC9jb2RlPgogICAgICAgIGVsZW1lbnRzIGluIHRoZSA8Y29kZT4mbHQ7dGFza2RlZiZndDs8L2NvZGU+IHRhc2tzIHRoYXQgcG9pbnQKICAgICAgICB0byB0aGUgbmV3IGxvY2F0aW9uIG9mIDxjb2RlPm9wdGlvbmFsLmphcjwvY29kZT4uICBBbHNvLAogICAgICAgIGRvbid0IGZvcmdldCB0byBhZGQgdGhlIG5ldyBsb2NhdGlvbiBvZgogICAgICAgIDxjb2RlPm9wdGlvbmFsLmphcjwvY29kZT4gdG8gdGhlCiAgICAgICAgPGNvZGU+Jmx0O2NsYXNzcGF0aCZndDs8L2NvZGU+IG9mIHlvdXIKICAgICAgICA8Y29kZT4mbHQ7c3R5bGUmZ3Q7PC9jb2RlPiBvciA8Y29kZT4mbHQ7anVuaXQmZ3Q7PC9jb2RlPgogICAgICAgIHRhc2suPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5JZiB5b3Ugd2FudCB0byBhdm9pZCB0byA8Y29kZT4mbHQ7dGFza2RlZiZndDs8L2NvZGU+IGFsbAogICAgICAgIG9wdGlvbmFsIHRhc2tzIHlvdSBuZWVkLCB0aGUgb25seSBvdGhlciBvcHRpb24gaXMgdG8gcmVtb3ZlCiAgICAgICAgdGhlIGNsYXNzZXMgdGhhdCBzaG91bGQgbm90IGJlIGxvYWRlZCB2aWEgdGhlIGJvb3RzdHJhcCBjbGFzcwogICAgICAgIGxvYWRlciBmcm9tIDxjb2RlPm9wdGlvbmFsLmphcjwvY29kZT4gYW5kIHB1dCB0aGVtIGludG8gYQogICAgICAgIHNlcGFyYXRlIGFyY2hpdmUuIEFkZCB0aGlzIHNlcGFyYXRlIGFyY2hpdmUgdG8gdGhlCiAgICAgICAgPGNvZGU+Jmx0O2NsYXNzcGF0aCZndDs8L2NvZGU+IG9mIHlvdXIKICAgICAgICA8Y29kZT4mbHQ7c3R5bGUmZ3Q7PC9jb2RlPiBvciA8Y29kZT4mbHQ7anVuaXQmZ3Q7PC9jb2RlPiB0YXNrCiAgICAgICAgLSBhbmQgbWFrZSBzdXJlIHRoZSBzZXBhcmF0ZSBhcmNoaXZlIGlzIG5vdCBpbgogICAgICAgIDxjb2RlPkNMQVNTUEFUSDwvY29kZT4uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5JbiB0aGUgY2FzZSBvZiA8Y29kZT4mbHQ7anVuaXQmZ3Q7PC9jb2RlPiB5b3UnZCBoYXZlCiAgICAgICAgdG8gcmVtb3ZlIGFsbCBjbGFzc2VzIHRoYXQgYXJlIGluIHRoZQogICAgICAgIDxjb2RlPm9yZy9hcGFjaGUvdG9vbHMvYW50L3Rhc2tkZWZzL29wdGlvbmFsL2p1bml0PC9jb2RlPgogICAgICAgIGRpcmVjdG9yeSwgaW4gdGhlIDxjb2RlPiZsdDtzdHlsZSZndDs8L2NvZGU+IGNhc2UgaXQgaXMgb25lIG9mCiAgICAgICAgdGhlIDxjb2RlPipMaWFpc29uPC9jb2RlPiBjbGFzc2VzIGluCiAgICAgICAgPGNvZGU+b3JnL2FwYWNoZS90b29scy9hbnQvdGFza2RlZnMvb3B0aW9uYWw8L2NvZGU+LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+SWYgeW91IHVzZSB0aGUgb3B0aW9uIHRvIGJyZWFrIHVwIDxjb2RlPm9wdGlvbmFsLmphcjwvY29kZT4KICAgICAgICBmb3IgPGNvZGU+Jmx0O2p1bml0Jmd0OzwvY29kZT4gb3IgcmVtb3ZlCiAgICAgICAgPGNvZGU+YW50LWp1bml0LmphcjwvY29kZT4sIHlvdSBzdGlsbCBoYXZlIHRvIHVzZSBhCiAgICAgICAgPGNvZGU+Jmx0O3Rhc2tkZWYmZ3Q7PC9jb2RlPiB3aXRoIGEgbmVzdGVkCiAgICAgICAgPGNvZGU+Jmx0O2NsYXNzcGF0aCZndDs8L2NvZGU+IHRvIGRlZmluZSB0aGUganVuaXQgdGFzay48L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9ImRlbGVnYXRpbmctY2xhc3Nsb2FkZXItMS42Ij48L2E+CiAgICAgICZsdDtzdHlsZSZndDsgb3IgJmx0O2p1bml0Jmd0OyBpZ25vcmVzIG15CiAgICAgICZsdDtjbGFzc3BhdGgmZ3Q7IC0gQW50IDEuNi54IHZlcnNpb24KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+UGxlYXNlIHJlYWQgPGEgaHJlZj0iI2RlbGVnYXRpbmctY2xhc3Nsb2FkZXIiPnRoZSBnZW5lcmFsCiAgICAgICAgZW50cnk8L2E+IGJlZm9yZSB5b3UgZ28gYWhlYWQuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5UaGUgd3JhcHBlciBzY3JpcHQgb2YgQW50IDEuNi54IG5vIGxvbmdlciBhZGRzIHRoZSBjb250ZW50cwogICAgICAgIG9mIDxjb2RlPkFOVF9IT01FL2xpYjwvY29kZT4gdG8gPGNvZGU+Q0xBU1NQQVRIPC9jb2RlPiwKICAgICAgICBpbnN0ZWFkIEFudCB3aWxsIGNyZWF0ZSBhIGNsYXNzbG9hZGVyIG9uIHRvcCBvZiB0aGUgYm9vdHN0cmFwCiAgICAgICAgY2xhc3Nsb2FkZXIgLSBsZXQncyBjYWxsIGl0IHRoZSBjb3JlbG9hZGVyIGZvciB0aGUgcmVzdCBvZgogICAgICAgIHRoaXMgYW5zd2VyIC0gd2hpY2ggaG9sZHMgdGhlIGNvbnRlbnRzIG9mCiAgICAgICAgPGNvZGU+QU5UX0hPTUUvbGliPC9jb2RlPi4gIEFudCdzIGNvcmUgYW5kIGl0cyB0YXNrcyB3aWxsIGJlCiAgICAgICAgbG9hZGVkIHRocm91Z2ggdGhpcyBjbGFzc2xvYWRlciBhbmQgbm90IHRoZSBib290c3RyYXAKICAgICAgICBjbGFzc2xvYWRlci48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRoaXMgY2F1c2VzIHNvbWUgc21hbGwgYnV0IG5vdGFibGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBBbnQKICAgICAgICAxLjUueCBhbmQgMS42LnguICBNb3N0IGltcG9ydGFudGx5LCBhIHRoaXJkLXBhcnR5IHRhc2sgdGhhdCBpcwogICAgICAgIHBhcnQgb2YgPGNvZGU+Q0xBU1NQQVRIPC9jb2RlPiB3aWxsIG5vIGxvbmdlciB3b3JrIGluIEFudAogICAgICAgIDEuNi54IHNpbmNlIHRoZSB0YXNrIG5vdyBjYW4ndCBmaW5kIEFudCdzIGNsYXNzZXMuICBJbiBhIHNlbnNlCiAgICAgICAgdGhpcyBpcyB0aGUgc2FtZSBwcm9ibGVtIHRoaXMgZW50cnkgaXMgYWJvdXQsIG9ubHkKICAgICAgICA8Y29kZT5hbnQuamFyPC9jb2RlPiBoYXMgYmVjb21lIHRoZSBleHRlcm5hbCBsaWJyYXJ5IGluCiAgICAgICAgcXVlc3Rpb24gbm93LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+VGhpcyBjb3JlbG9hZGVyIGFsc28gaG9sZHMgdGhlIGNvbnRlbnRzIG9mCiAgICAgICAgPGNvZGU+fi8uYW50L2xpYjwvY29kZT4gYW5kIGFueSBmaWxlIG9yIGRpcmVjdG9yeSB0aGF0IGhhcwogICAgICAgIGJlZW4gc3BlY2lmaWVkIHVzaW5nIEFudCdzIDxjb2RlPi1saWI8L2NvZGU+IGNvbW1hbmQgbGluZQogICAgICAgIGFyZ3VtZW50LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+TGV0J3Mgc2VlIHdoYXQgaGFwcGVucyB3aGVuIHlvdSBsb2FkIHRoZSAmbHQ7anVuaXQmZ3Q7CiAgICAgICAgdGFzay4gIEFudCdzIGNsYXNzIGxvYWRlciB3aWxsIGNvbnN1bHQgdGhlIGJvb3RzdHJhcAogICAgICAgIGNsYXNzIGxvYWRlciBmaXJzdCwgd2hpY2ggdHJpZXMgdG8gbG9hZCBjbGFzc2VzIGZyb20KICAgICAgICA8Y29kZT5DTEFTU1BBVEg8L2NvZGU+LiAgVGhlIGJvb3RzdHJhcCBjbGFzcyBsb2FkZXIKICAgICAgICBkb2Vzbid0IGtub3cgYW55dGhpbmcgYWJvdXQgQW50J3MgY2xhc3MgbG9hZGVyIG9yCiAgICAgICAgZXZlbiB0aGUgcGF0aCB5b3UgaGF2ZSBzcGVjaWZpZWQuICBJZiBpdCBmYWlscyB0byBmaW5kIHRoZQogICAgICAgIGNsYXNzIHVzaW5nIHRoZSBib290c3RyYXAgY2xhc3Nsb2FkZXIgaXQgd2lsbCB0cnkgdGhlCiAgICAgICAgY29yZWxvYWRlciBuZXh0LiAgQWdhaW4sIHRoZSBjb3JlbG9hZGVyIGRvZXNuJ3Qga25vdyBhbnl0aGluZwogICAgICAgIGFib3V0IHlvdXIgcGF0aC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPklmIHRoZSBjb3JlbG9hZGVyIGNhbiBsb2FkIHRoZSBjbGFzcyBBbnQgaGFzIGFza2VkIGl0IHRvCiAgICAgICAgbG9hZCAod2hpY2ggaXQgY2FuIGlmIDxjb2RlPmFudC1qdW5pdC5qYXI8L2NvZGU+IGlzIGluCiAgICAgICAgPGNvZGU+QU5UX0hPTUUvbGliPC9jb2RlPiksIHRoaXMgY2xhc3Mgd2lsbCB0cnkgdG8gbG9hZCB0aGUKICAgICAgICBleHRlcm5hbCBsaWJyYXJ5IGZyb20gY29yZWxvYWRlciBhcyB3ZWxsIC0gaXQgZG9lc24ndAogICAgICAgIGtub3cgYW55dGhpbmcgZWxzZSAtIGFuZCB3aWxsIG5vdCBmaW5kIGl0IHVubGVzcyB0aGUgbGlicmFyeQogICAgICAgIGlzIGluIDxjb2RlPkNMQVNTUEFUSDwvY29kZT4gb3IgdGhlIGNvcmVsb2FkZXIgYXMgd2VsbC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRvIHNvbHZlIHRoaXMsIHlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgbWFqb3Igb3B0aW9uczo8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvbD4KICAgICAgICAgIDxsaT5wdXQgYWxsIGV4dGVybmFsIGxpYnJhcmllcyB5b3UgbmVlZCBpbgogICAgICAgICAgPGNvZGU+Q0xBU1NQQVRIPC9jb2RlPiBhcyB3ZWxsIHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQsCiAgICAgICAgICBvdGhlcndpc2UgeW91IHdvdWxkbid0IGhhdmUgZm91bmQgdGhpcyBGQVEgZW50cnkuPC9saT4KCiAgICAgICAgICA8bGk+cHV0IGFsbCBleHRlcm5hbCBsaWJyYXJpZXMgeW91IG5lZWQgaW4KICAgICAgICAgIDxjb2RlPkFOVF9IT01FL2xpYjwvY29kZT4gb3IgPGNvZGU+LmFudC9saWI8L2NvZGU+LiAgVGhpcwogICAgICAgICAgcHJvYmFibHkgc3RpbGwgaXNuJ3Qgd2hhdCB5b3Ugd2FudCwgYnV0IHlvdSBtaWdodCByZWNvbnNpZGVyCiAgICAgICAgICB0aGUgPGNvZGU+LmFudC9saWI8L2NvZGU+IG9wdGlvbi48L2xpPgoKICAgICAgICAgIDxsaT5BbHdheXMgc3RhcnQgQW50IHdpdGggdGhlIDxjb2RlPi1saWI8L2NvZGU+IGNvbW1hbmQgbGluZQogICAgICAgICAgc3dpdGNoIGFuZCBwb2ludCB0byB5b3VyIGV4dGVybmFsIGxpYnJhcmllcyAob3IgdGhlCiAgICAgICAgICBkaXJlY3RvcmllcyBob2xkaW5nIHRoZW0pLjwvbGk+CgogICAgICAgICAgPGxpPnJlbW92ZSB0aGUgY2xhc3MgdGhhdCBsb2FkcyB0aGUgZXh0ZXJuYWwgbGlicmFyeSBmcm9tCiAgICAgICAgICB0aGUgY29yZWxvYWRlci48L2xpPgogICAgICAgIDwvb2w+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkluIEFudCAxLjYgPGNvZGU+b3B0aW9uYWwuamFyPC9jb2RlPiBoYXMgYmVlbiBzcGxpdCBpbnRvCiAgICAgICAgbXVsdGlwbGUgamFycywgZWFjaCBvbmUgY29udGFpbmluZyBjbGFzc2VzIHdpdGggdGhlIHNhbWUKICAgICAgICBkZXBlbmRlbmNpZXMgb24gZXh0ZXJuYWwgbGlicmFyaWVzLiAgWW91IGNhbiBtb3ZlIHRoZQogICAgICAgICJvZmZlbmRpbmciIGphciBvdXQgb2YgPGNvZGU+QU5UX0hPTUUvbGliPC9jb2RlPi4gIEZvciB0aGUKICAgICAgICA8Y29kZT4mbHQ7anVuaXQmZ3Q7PC9jb2RlPiB0YXNrIGl0IHdvdWxkIGJlCiAgICAgICAgPGNvZGU+YW50LWp1bml0LmphcjwvY29kZT4gYW5kIGZvciA8Y29kZT4mbHQ7c3R5bGUmZ3Q7PC9jb2RlPgogICAgICAgIGl0IHdvdWxkIGJlIDxjb2RlPmFudC10cmF4LmphcjwvY29kZT4KICAgICAgICBvciA8Y29kZT5hbnQteHNscC5qYXI8L2NvZGU+IC0gCiAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSBwcm9jZXNzb3IgeW91IHVzZS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPklmIHlvdSBkbyBzbywgeW91IHdpbGwgaGF2ZSB0byA8Y29kZT4mbHQ7dGFza2RlZiZndDs8L2NvZGU+CiAgICAgICAgYWxsIG9wdGlvbmFsIHRhc2tzIHRoYXQgbmVlZCB0aGUgZXh0ZXJuYWwgbGlicmFyeSBhbmQgdXNlCiAgICAgICAgbmVzdGVkIDxjb2RlPiZsdDtjbGFzc3BhdGgmZ3Q7PC9jb2RlPiBlbGVtZW50cyBpbiB0aGUKICAgICAgICA8Y29kZT4mbHQ7dGFza2RlZiZndDs8L2NvZGU+IHRhc2tzIHRoYXQgcG9pbnQgdG8gdGhlIG5ldwogICAgICAgIGxvY2F0aW9uIG9mIDxjb2RlPmFudC0qLmphcjwvY29kZT4uICBBbHNvLCBkb24ndCBmb3JnZXQKICAgICAgICB0byBhZGQgdGhlIG5ldyBsb2NhdGlvbiBvZiA8Y29kZT5hbnQtKi5qYXI8L2NvZGU+IHRvIHRoZQogICAgICAgIDxjb2RlPiZsdDtjbGFzc3BhdGgmZ3Q7PC9jb2RlPiBvZiB5b3VyCiAgICAgICAgPGNvZGU+Jmx0O3N0eWxlJmd0OzwvY29kZT4gb3IgPGNvZGU+Jmx0O2p1bml0Jmd0OzwvY29kZT4KICAgICAgICB0YXNrLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+Rm9yIGV4YW1wbGU8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUiPgogICAgJmx0O3Rhc2tkZWYgbmFtZT0mcXVvdDtqdW5pdCZxdW90OwogICAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5vcHRpb25hbC5qdW5pdC5KVW5pdFRhc2smcXVvdDsmZ3Q7CiAgICAgICZsdDtjbGFzc3BhdGgmZ3Q7CiAgICAgICAgJmx0O3BhdGhlbGVtZW50IGxvY2F0aW9uPSZxdW90O0hPTUUtT0YvanVuaXQuamFyJnF1b3Q7LyZndDsKICAgICAgICAmbHQ7cGF0aGVsZW1lbnQgbG9jYXRpb249JnF1b3Q7TkVXLUhPTUUtT0YvYW50LWp1bml0LmphciZxdW90Oy8mZ3Q7CiAgICAgICZsdDsvY2xhc3NwYXRoJmd0OwogICAgJmx0Oy90YXNrZGVmJmd0Owo8L3ByZT4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0id2lueHAtamRrMTQtYW50MTQiPjwvYT4KICAgICAgV2hlbiBydW5uaW5nIEFudCAxLjQgb24gV2luZG93cyBYUCBhbmQgSkRLIDEuNCwgSSBnZXQKICAgICAgdmFyaW91cyBlcnJvcnMgd2hlbiB0cnlpbmcgdG8gPGNvZGU+Jmx0O2V4ZWMmZ3Q7PC9jb2RlPiwgZm9yawogICAgICA8Y29kZT4mbHQ7amF2YSZndDs8L2NvZGU+IG9yIGFjY2VzcyBlbnZpcm9ubWVudAogICAgICB2YXJpYWJsZXMuCiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPkFudCAmbHQ7IDEuNSBkb2Vzbid0IHJlY29nbml6ZSBXaW5kb3dzIFhQIGFzIGEgZmxhdm9yCiAgICAgICAgb2YgV2luZG93cyB0aGF0IHJ1bnMgPGNvZGU+Q01ELkVYRTwvY29kZT4gaW5zdGVhZCBvZgogICAgICAgIDxjb2RlPkNPTU1BTkQuQ09NPC9jb2RlPi4gIEpESyAxLjMgd2lsbCB0ZWxsIEFudCB0aGF0IFdpbmRvd3MKICAgICAgICBYUCBpcyBXaW5kb3dzIDIwMDAgc28gdGhlIHByb2JsZW0gZG9lc24ndCBzaG93IHVwCiAgICAgICAgdGhlcmUuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5BcGFydCBmcm9tIHVwZ3JhZGluZyB0byBBbnQgMS41IG9yIGJldHRlciwgc2V0dGluZyB0aGUKICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSA8Y29kZT5BTlRfT1BUUzwvY29kZT4gdG8KICAgICAgICA8Y29kZT4tRG9zLm5hbWU9V2luZG93c19OVDwvY29kZT4gcHJpb3IgdG8gaW52b2tpbmcgQW50IGhhcwogICAgICAgIGJlZW4gY29uZmlybWVkIGFzIGEgd29ya2Fyb3VuZC48L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9IjEuNS1jeWd3aW4tc2giPjwvYT4KICAgICAgVGhlIDxjb2RlPmFudDwvY29kZT4gd3JhcHBlciBzY3JpcHQgb2YgQW50IDEuNSBmYWlscwogICAgICBmb3IgQ3lnd2luIGlmIDxjb2RlPkFOVF9IT01FPC9jb2RlPiBpcyBzZXQgdG8gYSBXaW5kb3dzIHN0eWxlCiAgICAgIHBhdGguCiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPlRoaXMgcHJvYmxlbSBoYXMgYmVlbiByZXBvcnRlZCBvbmx5IGhvdXJzIGFmdGVyIEFudCAxLjUgaGFzCiAgICAgICAgYmVlbiByZWxlYXNlZCwgc2VlIDxhIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTA2NjQiPkJ1ZwogICAgICAgIDEwNjY0PC9hPiBhbmQgYWxsIGl0cyBkdXBsaWNhdGVzLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+QSBmaXhlZCB2ZXJzaW9uIG9mIHRoZSB3cmFwcGVyIHNjcmlwdCBjYW4gYmUgZm91bmQgPGEgaHJlZj0iaHR0cDovL2FudC5hcGFjaGUub3JnL29sZC1yZWxlYXNlcy92MS41L2VycmF0YS8iPmhlcmU8L2E+LgogICAgICAgIFNpbXBseSByZXBsYWNlIHlvdXIgc2NyaXB0IHdpdGggdGhpcyB2ZXJzaW9uLjwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0iMS41LjItemlwLWJyb2tlbiI+PC9hPgogICAgICA8Y29kZT4mbHQ7emlwJmd0OzwvY29kZT4gaXMgYnJva2VuIGluIEFudCAxLjUuMi4KICAgIDwvcD4KICAgICAgICAgICAgICAgICAgPHA+WWVzLCBpdCBpcy48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRoZSBwcm9ibGVtIHJlcG9ydGVkIGJ5IG1vc3QgcGVvcGxlIC0gc2VlIDxhIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTc2NDgiPkJ1ZwogICAgICAgIDE3NjQ4PC9hPiBhbmQgYWxsIGl0cyBkdXBsaWNhdGVzIC0gaXMgdGhhdCBBbnQgY3JlYXRlcwogICAgICAgIGFyY2hpdmVzIHRoYXQgYSBwYXJ0aWFsbHkgdW5yZWFkYWJsZSBieSBXaW5aSVAuICBMdWNraWx5CiAgICAgICAgPGNvZGU+amFyPC9jb2RlPiBkZWFscyB3aXRoIHRoZSBhcmNoaXZlcyBhbmQgc28gdGhlIGdlbmVyYXRlZAogICAgICAgIGphcnMvd2Fycy9lYXJzIHdpbGwgbW9zdCBsaWtlbHkgd29yayBmb3IgeW91IGFueXdheS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRoZXJlIGFyZSBhZGRpdGlvbmFsIHByb2JsZW1zLCBzZWUgYnVncyA8YSBocmVmPSJodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTE3NzgwIj5CdWcKICAgICAgICAxNzc4MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTc4NzEiPkJ1ZwogICAgICAgIDE3ODcxPC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xODQwMyI+QnVnCiAgICAgICAgMTg0MDM8L2E+LiAgQWxsIG9mIHRoZW0gYXJlIHN1cHBvc2VkIHRvIGJlIGZpeGVkIHdpdGggQW50CiAgICAgICAgMS41LjMgKGFuZCBvbmx5IDE4NDAzIHNob3VsZCBleGlzdCBpbiAxLjUuM2JldGExKS48L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9InVua25vd25lbGVtZW50LnRhc2tjb250YWluZXIiPjwvYT4KICAgICAgCiAgICAgICAgV2h5IGRvIG15IGN1c3RvbSB0YXNrIGNvbnRhaW5lcnMgc2VlIFVua25vd24gRWxlbWVudHMgaW4gQW50IDEuNgogICAgICAgIC0gdGhleSB3b3JrZWQgaW4gQW50IDEuNT8KICAgICAgCiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPgogICAgICAgICAgVGhlIG9iamVjdHMgYWRkZWQgaW4gVGFza0NvbnRhaW5lci5hZGRUYXNrKFRhc2sgdGFzaykKICAgICAgICAgIGhhdmUgY2hhbmdlZCBmcm9tICBUYXNrcyB0byBVbmtub3duRWxlbWVudHMuCiAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgIFRoZXJlIHdhcyBhIG51bWJlciBvZiB2YWxpZCByZWFzb25zIGZvciB0aGlzIGNoYW5nZS4gQnV0IHRoZSBiYWNrd2FyZAogICAgICAgICAgY29tcGF0aWJpbGl0eSBwcm9ibGVtcyB3ZXJlIG5vdCBub3RpY2VkIHVudGlsIGFmdGVyIEFudCAxLjYuMCB3YXMKICAgICAgICAgIHJlbGVhc2VkLgogICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICBZb3VyIGNvbnRhaW5lciBjbGFzcyB3aWxsIG5lZWQgdG8gYmUgbW9kaWZpZWQgdG8gY2hlY2sgaWYgdGhlIFRhc2sKICAgICAgICAgIGlzIGFuIFVua25vd25FbGVtZW50IGFuZCBjYWxsIHBlcmZvcm0gb24gaXQgdG8KICAgICAgICAgIGNvbnZlcnQgaXQgdG8gYSBUYXNrIGFuZCB0byBleGVjdXRlIGl0LgogICAgICAgICAgKHNlZSBhcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLlNlcXVlbnRpYWwpCiAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgIElmIHlvdSB3YW50IHRvIGRvIG1vcmUgcHJvY2Vzc2luZyBvbiB0aGUgdGFzaywKICAgICAgICAgIHlvdSBuZWVkIHRvIHVzZSB0aGUgdGVjaG5pcXVlcyBpbiBhcGFjaGUudG9vbHMuYW50LnRhc2tkZWZzLkFudGxpYiNleGVjdXRlKCkKICAgICAgICAgIFRoaXMgZG9lcyBtYWtlIHVzZSBvZiBvbmUgMS42IG1ldGhvZCBjYWxsIChVRSNnZXRSZWFsT2JqZWN0KCkpLAogICAgICAgICAgeW91IG5lZWQgdG8gdXNlIFVFI2dldFRhc2soKSBpbnN0ZWFkIC0gdGhpcyB3aWxsCiAgICAgICAgICByZXR1cm4gbnVsbCBmb3Igbm9uIHRhc2tzICh0eXBlcyBsaWtlIGZpbGVzZXQgaWQ9eCkuCiAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgIFNvLi4gaXRlcmF0ZSBvdmVyIHRoZSB0YXNrcywgaWYgdGhleSBhcmUgVUVzLCBjb252ZXJ0IHRoZW0gdG8KICAgICAgICAgIHRhc2tzLCB1c2luZyBVRSNtYXliZUNvbmZpZ3VyZSBhbmQgVUUjZ2V0VGFzaygpCiAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlIj4KICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSB0YXNrcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKICAgICAgICAgICBUYXNrIHQgPSAoVGFzaykgaS5uZXh0KCk7CiAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBVbmtub3duRWxlbWVudCkgewogICAgICAgICAgICAgICgoVW5rbm93bkVsZW1lbnQpIHQpLm1heWJlQ29uZmlndXJlKCk7CiAgICAgICAgICAgICAgdCA9ICgoVW5rbm93bkVsZW1lbnQpIHQpLmdldFRhc2soKTsKICAgICAgICAgICAgICBpZiAodCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgLy8gLi4uLiBvcmlnaW5hbCBDdXN0b20gY29kZQogICAgICAgIH0KICAgICAgICA8L3ByZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICBUaGlzIGFwcHJvYWNoIHNob3VsZCB3b3JrIGZvciBhbnQxLjUgYW5kIGFudDEuNi4KICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9ImphdmEuZXhjZXB0aW9uLnN0YWNrdHJhY2UiPjwvYT4KICAgICAgCiAgICAgICAgVGhlIHByb2dyYW0gSSBydW4gdmlhICZsdDtqYXZhJmd0OyB0aHJvd3MgYW4gZXhjZXB0aW9uIGJ1dCBJCiAgICAgICAgY2FuJ3Qgc2VlbSB0byBnZXQgdGhlIGZ1bGwgc3RhY2sgdHJhY2UuCiAgICAgIAogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD5UaGlzIGlzIGEga25vdyBidWcgdGhhdCBoYXMgYmVlbiBmaXhlZCBhZnRlciB0aGUgcmVsZWFzZSBvZgogICAgICAgIEFudCAxLjYuMS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkFzIGEgd29ya2Fyb3VuZCwgcnVuIHlvdXIgJmx0O2phdmEmZ3Q7IHRhc2sgd2l0aAogICAgICAgIDxjb2RlPmZvcms9InRydWUiPC9jb2RlPiBhbmQgQW50IHdpbGwgZGlzcGxheSB0aGUgZnVsbAogICAgICAgIHRyYWNlLjwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmFxIj4KICAgICAgPGEgbmFtZT0ianVuaXQtbm8tcnVudGltZS14bWwiPjwvYT4KICAgICAgCiAgICAgICAgVXNpbmcgZm9ybWF0PSJ4bWwiLCAmbHQ7anVuaXQmZ3Q7IGZhaWxzIHdpdGggYQogICAgICAgIDxjb2RlPk5vQ2xhc3NEZWZGb3VuZEVycm9yPC9jb2RlPiBpZiBmb3JrZWQuCiAgICAgIAogICAgPC9wPgogICAgICAgICAgICAgICAgICA8cD5UaGUgWE1MIGZvcm1hdHRlciBuZWVkcyB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvRE9NLyI+RE9NIGNsYXNzZXM8L2E+IHRvIHdvcmsuICBJZiB5b3UKICAgICAgICBhcmUgdXNpbmcgSkRLIDEuNCBvciBsYXRlciB0aGV5IGFyZSBpbmNsdWRlZCB3aXRoIHlvdXIgSmF2YQogICAgICAgIFJ1bnRpbWUgYW5kIHRoaXMgcHJvYmxlbSB3b24ndCBvY2N1ci4gIElmIHlvdSBhcmUgcnVubmluZyBKREsKICAgICAgICAxLjMgb3IgZWFybGllciwgdGhlIERPTSBjbGFzc2VzIGhhdmUgdG8gYmUgb24geW91cgogICAgICAgICZsdDtqdW5pdCZndDsgdGFzaydzICZsdDtjbGFzc3BhdGgmZ3Q7LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+UHJpb3IgdG8gQW50IDEuNi4wIEFudCB3b3VsZCBpbmNsdWRlIHRoZSBET00gY2xhc3NlcyBmcm9tCiAgICAgICAgdGhlIFhNTCBwYXJzZXIgdGhhdCBpcyB1c2VkIGJ5IEFudCBpdHNlbGYgaWYgeW91IHNldCB0aGUKICAgICAgICBpbmNsdWRlQW50UnVudGltZSBhdHRyaWJ1dGUgdG8gdHJ1ZSAodGhlIGRlZmF1bHQpLiAgV2l0aCBBbnQKICAgICAgICAxLjYuMCB0aGlzIGhhcyBiZWVuIGNoYW5nZWQgYXMgdGhpcyBiZWhhdmlvciBtYWRlIGl0CiAgICAgICAgaW1wb3NzaWJsZSB0byB1c2UgYSBkaWZmZXJlbnQgWE1MIHBhcnNlciBpbiB5b3VyIHRlc3RzLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+VGhpcyBtZWFucyB0aGF0IHlvdSBoYXZlIHRvIHRha2UgY2FyZSBvZiB0aGUgRE9NIGNsYXNzZXMKICAgICAgICBleHBsaWNpdGx5IHN0YXJ0aW5nIHdpdGggQW50IDEuNi4wLiAgSWYgeW91IGRvbid0IG5lZWQgdG8gc2V0CiAgICAgICAgdXAgYSBkaWZmZXJlbnQgWE1MIHBhcnNlciBmb3IgeW91ciB0ZXN0cywgdGhlIGVhc2llc3Qgc29sdXRpb24KICAgICAgICBpcyB0byBhZGQ8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUiPgombHQ7cGF0aGVsZW1lbnQgcGF0aD0mcXVvdDske2FudC5ob21lfS9saWIveG1sLWFwaXMuamFyOiR7YW50LmhvbWV9L2xpYi94ZXJjZXNJbXBsLmphciZxdW90Oy8mZ3Q7CjwvcHJlPgogICAgICAgICAgICAgICAgICAgICAgICA8cD50byB5b3VyIHRhc2sncyAmbHQ7Y2xhc3NwYXRoJmd0Oy48L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZhcSI+CiAgICAgIDxhIG5hbWU9InhhbGFuLWpkazEuNSI+PC9hPgogICAgICAKICAgICAgICA8Y29kZT4mbHQ7anVuaXRyZXBvcnQmZ3Q7PC9jb2RlPiBkb2Vzbid0IHdvcmsgd2l0aCBKREsgMS41IGJ1dAogICAgICAgIHdvcmtlZCBmaW5lIHdpdGggSkRLIDEuNC4KICAgICAgCiAgICA8L3A+CiAgICAgICAgICAgICAgICAgIDxwPldoaWxlIEpESyAxLjQueCBjb250YWlucyBhIHZlcnNpb24gb2YgWGFsYW4tSiAyLCBKREsgMS41CiAgICAgICAgKGFuZCBsYXRlcj8pIGhhdmUgPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNS4wL2NvbXBhdGliaWxpdHkuaHRtbCM0OTU5NzgzIj5tb3ZlZAogICAgICAgIHRvIFhTTFRDPC9hPi4gIFNpbmNlIHRoaXMgdGFzayB1c2VzIFhhbGFuJ3MgcmVkaXJlY3QKICAgICAgICBleHRlbnNpb25zIGZvciBpdHMgaW50ZXJuYWwgc3R5bGVzaGVldCwgQW50IHByaW9yIHRvIDEuNi4yIGRpZG4ndCBzdXBwb3J0CiAgICAgICAgWFNMVEMuICBUaGlzIG1lYW5zIHRoYXQgeW91IGhhdmUgdG8gaW5zdGFsbCA8YSBocmVmPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW4tai8iPlhhbGFuLUogMjwvYT4gaW4gb3JkZXIKICAgICAgICB0byB1c2UgdGhpcyB0YXNrIHdpdGggSkRLIDEuNSBpbiBvbGRlciB2ZXJzaW9ucyBvZiBBbnQuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5TdGFydGluZyB3aXRoIEFudCAxLjYuMiA8Y29kZT4mbHQ7anVuaXRyZXBvcnQmZ3Q7PC9jb2RlPgogICAgICAgIHN1cHBvcnRzIEpESyAxLjUuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogIDwvZGl2PgoKICAgICAgICA8cCBjbGFzcz0iY29weXJpZ2h0Ij4KICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPjwhLS0KICAgICAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKCIgLSAiKyJMYXN0IFB1Ymxpc2hlZDogIiArIGRvY3VtZW50Lmxhc3RNb2RpZmllZCk7CiAgICAgICAgICAgICAgLy8gIC0tPgogICAgICAgIDwvc2NyaXB0PgogICAgICA8L3A+CiAgICA8L2JvZHk+CiAgPC9odG1sPgoKCgoKCgoKCgoKCg==