PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPHRpdGxlPlRlc3QgbG9nIG91dHB1dDwvdGl0bGU+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vc3R5bGUvc3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCI+CjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgdGl0bGU9IkJvb3N0IFRlc3QgTGlicmFyeSI+CjxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL3Rlc3Qtb3V0cHV0Lmh0bWwiIHRpdGxlPSJUZXN0IE91dHB1dCBvciBsZXQncyBzZWUgd2hhdCB5b3UgZ290IGZvciB5b3VyIG1vbmV5Ij4KPGxpbmsgcmVsPSJwcmV2IiBocmVmPSIuLi90ZXN0LW91dHB1dC5odG1sIiB0aXRsZT0iVGVzdCBPdXRwdXQgb3IgbGV0J3Mgc2VlIHdoYXQgeW91IGdvdCBmb3IgeW91ciBtb25leSI+CjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQk9PU1RfVEVTVF9NRVNTQUdFLmh0bWwiIHRpdGxlPSJCT09TVF9URVNUX01FU1NBR0UiPgo8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0MS4yIiBzcmM9Ii4uLy4uLy4uLy4uL2pzL2Jvb3N0LXRlc3QuanMiPjwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KPHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cjx0ZCB3aWR0aD0iMTAlIj48YSBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sIj48aW1nIGFsdD0iSG9tZSIgd2lkdGg9IjIyOSIgaGVpZ2h0PSI2MSIgYm9yZGVyPSIwIiBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdGVzdC9kb2Nib29rL2ltZy9ib29zdC50ZXN0LmxvZ28ucG5nIj48L2E+PC90ZD4KPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCI+ICZndDsgPGEgaHJlZj0iLi4vLi4vLi4vdXRmLmh0bWwiPlRoZSBVbml0IFRlc3QgRnJhbWV3b3JrPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLy4uL3VzZXItZ3VpZGUuaHRtbCI+VXNlcidzIGd1aWRlPC9hPjxhIGhyZWY9Ii4uLy4uL3Rlc3RpbmctdG9vbHMuaHRtbCI+CiAgICAgICZndDsKICAgICAgPC9hPjxhIGhyZWY9Ii4uL3Rlc3Qtb3V0cHV0Lmh0bWwiPlRlc3QgT3V0cHV0IDwvYT48YSBocmVmPSIuLi9ydW50aW1lLWNvbmZpZy5odG1sIj4KICAgICAgJmd0OwogICAgICA8L2E+PGI+VGVzdCBsb2c8L2I+PGEgaHJlZj0icmVzdWx0cy1yZXBvcnQuaHRtbCI+CiAgICAgICZndDsKICAgICAgPC9hPgo8L3RkPgo8dGQ+PGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+CjxhIGhyZWY9Ii4uL3Rlc3Qtb3V0cHV0Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGhyZWY9IkJPT1NUX1RFU1RfTUVTU0FHRS5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KPC9kaXY+PC90ZD4KPC90cj48L3RhYmxlPgo8aHI+CjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj4KPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg1IGNsYXNzPSJ0aXRsZSI+CjxhIG5hbWU9InV0Zi51c2VyLWd1aWRlLnRlc3Qtb3V0cHV0LmxvZyI+PC9hPlRlc3QgbG9nIG91dHB1dDwvaDU+PC9kaXY+PC9kaXY+PC9kaXY+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgVGhlIHRlc3QgbG9nIGlzIHByb2R1Y2VkIGR1cmluZyB0aGUgdGVzdCBleGVjdXRpb24uIEFsbCBlbnRyaWVzIGluIHRoZSB0ZXN0IGxvZyBhcmUgYXNzaWduZWQgYSBwYXJ0aWN1bGFyIGxvZwogICBsZXZlbC4gT25seSB0aGUgZW50cmllcyB3aXRoIGxldmVsIHRoYXQgZXhjZWVkcyB0aGUgPGVtIGNsYXNzPSJmaXJzdHRlcm0iPmFjdGl2ZSBsb2cgbGV2ZWwgdGhyZXNob2xkPC9lbT4gYWN0dWFsbHkKICAgYXBwZWFyIGluIHRoZSB0ZXN0IGxvZyBvdXRwdXQuIExvZyBsZXZlbHMgYXJlIGFycmFuZ2VkIGJ5IHRoZSAiaW1wb3J0YW5jZSIgb2YgdGhlIGxvZyBlbnRyaWVzLiBIZXJlIGlzCiAgIHRoZSBsaXN0IG9mIGFsbCBsZXZlbHMgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyAiaW1wb3J0YW5jZSI6CiAgPC9wPgo8ZGl2IHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iZGlzYyI+CjxsaT4KPHA+U3VjY2VzcyBpbmZvcm1hdGlvbiBtZXNzYWdlczwvcD4KPHA+CiAgICAgVGhpcyBjYXRlZ29yeSBpbmNsdWRlcyBtZXNzYWdlcyB0aGF0IHByb3ZpZGUgaW5mb3JtYXRpb24gb24gc3VjY2Vzc2Z1bGx5IHBhc3NlZCBhc3NlcnRpb25zCiAgICA8L3A+CjwvbGk+CjxsaT4KPHA+VGVzdCB0cmVlIHRyYXZlcnNhbCBub3RpZmljYXRpb25zPC9wPgo8cD4KICAgICBUaGlzIGNhdGVnb3J5IGluY2x1ZGVzIG1lc3NhZ2VzIHRoYXQgYXJlIHByb2R1Y2VkIGJ5IHRoZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+VVRGPC9hY3JvbnltPiBjb3JlIGFuZCBpbmRpY2F0ZSB3aGljaCB0ZXN0IHN1aXRlcy9jYXNlcyBhcmUKICAgICBjdXJyZW50bHkgYmVpbmcgZXhlY3V0ZWQgb3Igc2tpcHBlZAogICAgPC9wPgo8L2xpPgo8bGk+CjxwPkdlbmVyYWwgaW5mb3JtYXRpb24gbWVzc2FnZXM8L3A+CjxwPgogICAgIFRoaXMgY2F0ZWdvcnkgaW5jbHVkZXMgZ2VuZXJhbCBpbmZvcm1hdGlvbiBtYXNzYWdlcyBwcm9kdWNlZCBpbiBtb3N0IGNhc2VzIGJ5IGEgdGVzdCBtb2R1bGUgYXV0aG9yIHVzaW5nIHRoZQogICAgIG1hY3JvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkJPT1NUX1RFU1RfTUVTU0FHRS5odG1sI0JPT1NUX1RFU1RfTUVTU0FHRSI+Qk9PU1RfVEVTVF9NRVNTQUdFPC9hPjwvY29kZT4uCiAgICA8L3A+CjwvbGk+CjxsaT4KPHA+V2FybmluZyBtZXNzYWdlczwvcD4KPHA+CiAgICAgVGhpcyBjYXRlZ29yeSBpbmNsdWRlcyBtZXNzYWdlcyBwcm9kdWNlZCBieSBmYWlsZWQgd2FybmluZyBsZXZlbCBhc3NlcnRpb25zLgogICAgPC9wPgo8L2xpPgo8bGk+CjxwPk5vbiBmYXRhbCBlcnJvciBtZXNzYWdlczwvcD4KPHA+CiAgICAgVGhpcyBjYXRlZ29yeSBpbmNsdWRlcyBtZXNzYWdlcyBwcm9kdWNlZCBieSBmYWlsZWQgY2hlY2sgbGV2ZWwgYXNzZXJ0aW9ucwogICAgPC9wPgo8L2xpPgo8bGk+CjxwPlVuY2F1Z2h0IEMrKyBleGNlcHRpb25zIG5vdGlmaWNhdGlvbnM8L3A+CjxwPgogICAgIFRoaXMgY2F0ZWdvcnkgaW5jbHVkZXMgbWVzc2FnZXMgdGhhdCBhcmUgcHJvZHVjZWQgYnkgdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5VVEY8L2Fjcm9ueW0+IGFuZCBwcm92aWRlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBDKysKICAgICBleGNlcHRpb25zIHVuY2F1Z2h0IGJ5IHRoZSB0ZXN0IGNhc2UgYm9keS4KICAgIDwvcD4KPC9saT4KPGxpPgo8cD5Ob24tZmF0YWwgc3lzdGVtIGVycm9yPC9wPgo8cD4KICAgICBUaGlzIGNhdGVnb3J5IGluY2x1ZGVzIG1lc3NhZ2VzIHRoYXQgYXJlIHByb2R1Y2VkIGJ5IHRoZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+VVRGPC9hY3JvbnltPiBpdHNlbGYgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGNhdWdodAogICAgIG5vbi1mYXRhbCBzeXN0ZW0gZXJyb3IuIEZvciBleGFtcGxlIGl0IGluY2x1ZGVzIG1lc3NhZ2VzIHByb2R1Y2VkIGluIHRoZSBjYXNlIG9mIHRlc3QgY2FzZSB0aW1lb3V0IG9yIGlmCiAgICAgZmxvYXRpbmcgIHBvaW50IHZhbHVlcyBjYWxjdWxhdGlvbiBlcnJvcnMgYXJlIGNhdWdodC4KICAgIDwvcD4KPC9saT4KPGxpPgo8cD5GYXRhbCBzeXN0ZW0gZXJyb3I8L3A+CjxwPgogICAgIFRoaXMgY2F0ZWdvcnkgaW5jbHVkZXMgbWVzc2FnZXMgcHJvZHVjZWQgYnkgZmFpbGVkIHJlcXVpcmUgbGV2ZWwgYXNzZXJ0aW9ucyBhbmQgYnkgdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5VVEY8L2Fjcm9ueW0+IGl0c2VsZiBpbiBjYXNlIG9mCiAgICAgYWJub3JtYWwgdGVzdCBjYXNlIHRlcm1pbmF0aW9uLgogICAgPC9wPgo8L2xpPgo8L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJub3RlIj48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJOb3RlIj4KPHRyPgo8dGQgcm93c3Bhbj0iMiIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSI+PGltZyBhbHQ9IltOb3RlXSIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbm90ZS5wbmciPjwvdGQ+Cjx0aCBhbGlnbj0ibGVmdCI+Tm90ZTwvdGg+CjwvdHI+Cjx0cj48dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48cD4KICAgIFRoZSBhY3RpdmUgbG9nIGxldmVsIHdvcmtzIG5hbWVseSBhcyB0aHJlc2hvbGQsIG5vdCBhcyBzZWxlY3Rvci4gRm9yIHRoZSBnaXZlbiBhY3RpdmUgbG9nIGxldmVsIHRocmVzaG9sZCwgYWxsCiAgICB0ZXN0IGxvZyBlbnRyaWVzIHdpdGggImltcG9ydGFuY2UiIGhpZ2hlciB0aGFuIHRocmVzaG9sZCBhcmUgZW5hYmxlZCBhbmQgYWxsIHRlc3QgbG9nIGVudHJpZXMgd2l0aAogICAgImltcG9ydGFuY2UiIGJlbG93IHRocmVzaG9sZCBhcmUgZGlzYWJsZWQuCiAgIDwvcD48L3RkPjwvdHI+CjwvdGFibGU+PC9kaXY+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgSW4gYWRkaXRpb24gdG8gdGhlIGxldmVscyBkZXNjcmliZWQgYWJvdmUgdGhlIHRlc3QgbG9nIGRlZmluZXMgdHdvIHNwZWNpYWwgbG9nIGxldmVscy4gVGhlIGN1cnJlbnQgbG9nIGxldmVsIGNhbgogICBiZSBzZXQgdG86CiAgPC9wPgo8ZGl2IHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iZGlzYyI+CjxsaT4KPHA+QWxsIG1lc3NhZ2VzPC9wPgo8cD4KICAgICBJZiBhY3RpdmUgbG9nIGxldmVsIHRocmVzaG9sZCBpcyBzZXQgdG8gdGhpcyB2YWx1ZSwgYWxsIHRlc3QgbG9nIGVudHJpZXMgYXBwZWFyIGluIHRoZSBvdXRwdXQuIEluIHByYWN0aWNlCiAgICAgdGhpcyBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgdGhlIGFjdGl2ZSBsb2cgbGV2ZWwgdGhyZXNob2xkIHRvICJzdWNjZXNzIGluZm9ybWF0aW9uIG1lc3NhZ2VzIgogICAgPC9wPgo8L2xpPgo8bGk+CjxwPk5vdGhpbmc8L3A+CjxwPgogICAgIElmIHRoZSBhY3RpdmUgbG9nIGxldmVsIHRocmVzaG9sZCBpcyBzZXQgdG8gdGhpcyB2YWx1ZSwgbm9uZSBvZiB0ZXN0IGxvZyBlbnRyaWVzIGFwcGVhciBpbiB0aGUgb3V0cHV0LiBUaGlzIGxvZyBsZXZlbAogICAgIGlzIHVzZWQgdG8gZXhlY3V0ZSBhICJzaWxlbnQiIHRlc3QgdGhhdCBkb2Vzbid0IHByb2R1Y2UgYW55IHRlc3QgbG9nIGFuZCBvbmx5IGdlbmVyYXRlcyBhIHJlc3VsdCBjb2RlIGluZGljYXRpbmcgd2hldGhlciB0ZXN0IGZhaWxlZCBvciBwYXNzZWQuCiAgICA8L3A+CjwvbGk+CjwvdWw+PC9kaXY+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgQnkgZGVmYXVsdCB0aGUgYWN0aXZlIGxvZyBsZXZlbCB0aHJlc2hvbGQgaXMgc2V0IHRvICJub24gZmF0YWwgZXJyb3IgbWVzc2FnZXMiIGFuZCB0aGUgdGVzdCBsb2cgb3V0cHV0CiAgIGlzIGdlbmVyYXRlZCBpbiB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybWF0LiBUaGUgYWN0aXZlIGxvZyBsZXZlbCB0aHJlc2hvbGQgYW5kIHRoZSBvdXRwdXQgZm9ybWF0IGNhbiBiZSBjb25maWd1cmVkCiAgIGF0IHJ1bnRpbWUgZHVyaW5nIGEgdGVzdCBtb2R1bGUgaW52b2NhdGlvbiBhbmQgYXQgY29tcGlsZSB0aW1lIGZyb20gd2l0aGluIGEgdGVzdCBtb2R1bGUgdXNpbmcgdGhlIHRlc3QgbG9nCiAgIHB1YmxpYyBpbnRlcmZhY2VzLiBGb3IgZXhhbXBsZSwgZm9yIGF1dG9tYXRlZCB0ZXN0IG1vZHVsZSBvdXRwdXQgcHJvY2Vzc2luZyBpdCBtaWdodCBiZSBtb3JlIGNvbnZlbmllbnQgdG8gdXNlCiAgIHRoZSBYTUwgYmFzZWQgZm9ybWF0LgogIDwvcD4KPHAgY2xhc3M9ImZpcnN0LWxpbmUtaW5kZW50ZWQiPgogICBJbiBtb3N0IGNhc2VzIFRoZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+VVRGPC9hY3JvbnltPiBjYW4ndCBwcm92aWRlIGFuIGV4YWN0IGxvY2F0aW9uLCB3aGVyZSBzeXN0ZW0gZXJyb3Igb2NjdXJzIG9yIHVuY2F1Z2h0IEMrKyBleGNlcHRpb24KICAgaXMgdGhyb3duIGZyb20uIFRvIGJlIGFibGUgdG8gcGlucG9pbnQgaXQgYXMgY2xvc2UgYXMgcG9zc2libGUgdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5VVEY8L2Fjcm9ueW0+IGtlZXBzIHRyYWNrIG9mIGNoZWNrcG9pbnRzIC0gdGhlCiAgIGxvY2F0aW9uIGEgdGVzdCBtb2R1bGUgcGFzc2VkIHRocm91Z2guIEEgdGVzdCBjYXNlIGVudHJhbmNlIGFuZCBleGl0IHBvaW50cywgYSB0ZXN0IHRvb2wgaW52b2NhdGlvbiBwb2ludCB0aGUKICAgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPlVURjwvYWNyb255bT4gdHJhY2tzIGF1dG9tYXRpY2FsbHkuIEFueSBvdGhlciBjaGVja3BvaW50cyBzaG91bGQgYmUgZW50ZXJlZCBieSB5b3UgbWFudWFsbHkuIFRoZSB0ZXN0IGxvZyBwcm92aWRlcyB0d28KICAgbWFjcm9zIGZvciB0aGlzIHB1cnBvc2U6IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkJPT1NUX1RFU1RfQ0hFQ0tQT0lOVC5odG1sI0JPT1NUX1RFU1RfQ0hFQ0tQT0lOVCI+Qk9PU1RfVEVTVF9DSEVDS1BPSU5UPC9hPjwvY29kZT4gLSB0byBzcGVjaWZ5IGEgIm5hbWVkIiBjaGVja3BvaW50IAogICBhbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iQk9PU1RfVEVTVF9QQVNTUE9JTlQuaHRtbCNCT09TVF9URVNUX1BBU1NQT0lOVCI+Qk9PU1RfVEVTVF9QQVNTUE9JTlQ8L2E+PC9jb2RlPiAtIHRvIHNwZWNpZnkgYW4gInVubmFtZWQiIGNoZWNrcG9pbnQuCiAgPC9wPgo8ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNiBjbGFzcz0idGl0bGUiPgo8YSBuYW1lPSJ1dGYudXNlci1ndWlkZS50ZXN0LW91dHB1dC5sb2cudGVzdGluZy10b29sLWFyZ3MiPjwvYT5Mb2dnaW5nIHRvb2wgYXJndW1lbnRzPC9oNj48L2Rpdj48L2Rpdj48L2Rpdj4KPHAgY2xhc3M9ImZpcnN0LWxpbmUtaW5kZW50ZWQiPgogICAgTW9zdCBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uLy4uL3Rlc3RpbmctdG9vbHMuaHRtbCIgdGl0bGU9IlRoZSBVVEYgdGVzdGluZyB0b29scyBvciB0ZXN0ZXIncyB0b29sYm94IGZvciBhbGwgb2NjYXNpb25zIj50ZXN0aW5nIHRvb2xzPC9hPiBwcmludCB2YWx1ZXMgb2YgdGhlaXIgYXJndW1lbnRzIHRvIHRoZSBvdXRwdXQKICAgIHN0cmVhbSBpbiBzb21lIGZvcm0gb2YgbG9nIHN0YXRlbWVudC4gSWYgYXJndW1lbnRzIHR5cGUgZG9lcyBub3Qgc3VwcG9ydCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm9wZXJhdG9yJmx0OyZsdDsoc3RkOjpvc3RyZWFtJmFtcDssCiAgICBBcmd1bWVudFR5cGUgY29uc3QmYW1wOyk8L2NvZGU+IGludGVyZmFjZSB5b3Ugd2lsbCBnZXQgYSBjb21waWxhdGlvbiBlcnJvci4gWW91IGNhbiBlaXRoZXIgaW1wbGVtZW50IGFib3ZlCiAgICBpbnRlcmZhY2Ugb3IgcHJvaGliaXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi8uLi90ZXN0aW5nLXRvb2xzLmh0bWwiIHRpdGxlPSJUaGUgVVRGIHRlc3RpbmcgdG9vbHMgb3IgdGVzdGVyJ3MgdG9vbGJveCBmb3IgYWxsIG9jY2FzaW9ucyI+dGVzdGluZyB0b29sczwvYT4gZnJvbSBsb2dnaW5nIGFyZ3VtZW50IHZhbHVlcyBmb3IKICAgIHNwZWNpZmllZCB0eXBlLiBUbyBkbyBzbyB1c2UgZm9sbG93aW5nIHN0YXRlbWVudCBvbiBmaWxlIGxldmVsIGJlZm9yZSBmaXJzdCB0ZXN0IGNhc2UgdGhhdCBpbmNsdWRlcyBzdGF0ZW1lbnQKICAgIGZhaWxpbmcgdG8gY29tcGlsZToKICAgPC9wPgo8cHJlIGNsYXNzPSJpbmxpbmUtc3lub3BzaXMiPgo8YSBuYW1lPSJCT09TVF9URVNUX0RPTlRfUFJJTlRfTE9HX1ZBTFVFIj48L2E+Qk9PU1RfVEVTVF9ET05UX1BSSU5UX0xPR19WQUxVRSg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5Bcmd1bWVudFR5cGU8L2VtPjwvc3Bhbj4pPC9wcmU+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPgo8YSBuYW1lPSJ1dGYudXNlci1ndWlkZS50ZXN0LW91dHB1dC5sb2cudGVzdGluZy10b29sLWFyZ3MuZXhhbXBsZTMyIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxloDI2LqBCT09TVF9URVNUX0RPTlRfUFJJTlRfTE9HX1ZBTFVFIHVzYWdlPC9iPjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+CjxwPgogICAgIFRyeSB0byBjb21tZW50IG91dCBCT09TVF9URVNUX0RPTlRfUFJJTlRfTE9HX1ZBTFVFIHN0YXRlbWVudCBhbmQgeW91IGVuZCB1cCB3aXRoIGNvbXBpbGUgdGltZSBlcnJvci4KICAgIDwvcD4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgQk9PU1RfVEVTVF9NT0RVTEUgZXhhbXBsZQojaW5jbHVkZSAmbHQ7Ym9vc3QvdGVzdC9pbmNsdWRlZC91bml0X3Rlc3QuaHBwJmd0OwojaW5jbHVkZSAmbHQ7dXRpbGl0eSZndDsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgp0eXBlZGVmIHN0ZDo6cGFpciZsdDtpbnQsZmxvYXQmZ3Q7IHBhaXJfdHlwZTsKCkJPT1NUX1RFU1RfRE9OVF9QUklOVF9MT0dfVkFMVUUoIHBhaXJfdHlwZSApOwoKQk9PU1RfQVVUT19URVNUX0NBU0UoIHRlc3RfbGlzdCApCnsKICAgIHBhaXJfdHlwZSBwMSggMiwgNS41ICk7CiAgICBwYWlyX3R5cGUgcDIoIDIsIDUuNTAxICk7CgogICAgQk9PU1RfQ0hFQ0tfRVFVQUwoIHAxLCBwMiApOwp9CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwo8L3ByZT4KPHRhYmxlIGNsYXNzPSJzaW1wbGVsaXN0IiBib3JkZXI9IjAiIHN1bW1hcnk9IlNpbXBsZSBsaXN0Ij48dHI+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vc3JjL2V4YW1wbGVzL2V4YW1wbGUzMi5jcHAiIHRhcmdldD0iX3RvcCI+U291cmNlIGNvZGU8L2E+PC9jb2RlPjwvdGQ+Cjx0ZD4gfCA8L3RkPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9IiMiIHRhcmdldD0iX3RvcCIgaWQ9ImlkNjUzODI1IiBvbmNsaWNrPSJ0b2dnbGVfZWxlbWVudCggJ2V4YW1wbGUzMi1vdXRwdXQnLCAnaWQ2NTM4MjUnLCAnU2hvdyBvdXRwdXQnLCAnSGlkZSBvdXRwdXQnICk7IHJldHVybiBmYWxzZTsiPlNob3cgb3V0cHV0PC9hPjwvY29kZT48L3RkPgo8L3RyPjwvdGFibGU+CjxwcmUgY2xhc3M9ImV4YW1wbGUtb3V0cHV0IiBpZD0iZXhhbXBsZTMyLW91dHB1dCI+UnVubmluZyAxIHRlc3QgY2FzZS4uLgp0ZXN0LmNwcCgxNik6IGVycm9yIGluICJ0ZXN0X2xpc3QiOiBjaGVjayBwMSA9PSBwMiBmYWlsZWQgWyAhPSBdCgoqKiogMSBmYWlsdXJlIGRldGVjdGVkIGluIHRlc3Qgc3VpdGUgImV4YW1wbGUiCjwvcHJlPgo8L2Rpdj4KPC9kaXY+CjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNiBjbGFzcz0idGl0bGUiPgo8YSBuYW1lPSJ1dGYudXNlci1ndWlkZS50ZXN0LW91dHB1dC5sb2cucnVudGltZS1jb25maWciPjwvYT5SdW50aW1lIGNvbmZpZ3VyYXRpb248L2g2PjwvZGl2PjwvZGl2PjwvZGl2Pgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICBUaGUgYWN0aXZlIGxvZyBsZXZlbCB0aHJlc2hvbGQgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgcnVudGltZSB1c2luZyB0aGUgcGFyYW1ldGVyCiAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vcnVudGltZS1jb25maWcvcmVmZXJlbmNlLmh0bWwiIHRpdGxlPSJSdW50aW1lIHBhcmFtZXRlcnMgcmVmZXJlbmNlIj5sb2dfbGV2ZWw8L2E+LiBUaGUgdGVzdCBsb2cgb3V0cHV0IGZvcm1hdCBjYW4gYmUKICAgIHNlbGVjdGVkIHVzaW5nIGVpdGhlciBwYXJhbWV0ZXIgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL3J1bnRpbWUtY29uZmlnL3JlZmVyZW5jZS5odG1sIiB0aXRsZT0iUnVudGltZSBwYXJhbWV0ZXJzIHJlZmVyZW5jZSI+bG9nX2Zvcm1hdDwvYT4gb3IgdGhlCiAgICBwYXJhbWV0ZXIgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL3J1bnRpbWUtY29uZmlnL3JlZmVyZW5jZS5odG1sIiB0aXRsZT0iUnVudGltZSBwYXJhbWV0ZXJzIHJlZmVyZW5jZSI+b3V0cHV0X2Zvcm1hdDwvYT4uCiAgIDwvcD4KPC9kaXY+CjwvZGl2Pgo8dGFibGUgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIHdpZHRoPSIxMDAlIj48dHI+Cjx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+Q29weXJpZ2h0IKkgMjAwMS0yMDA3IEdlbm5hZGl5IFJvemVudGFsPC9kaXY+PC90ZD4KPC90cj48L3RhYmxlPgo8aHI+CjxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgo8YSBhY2Nlc3NrZXk9InAiIGhyZWY9Ii4uL3Rlc3Qtb3V0cHV0Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vdGVzdC1vdXRwdXQuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy91cC5wbmciIGFsdD0iVXAiPjwvYT48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iQk9PU1RfVEVTVF9NRVNTQUdFLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgo8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==