PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPHRpdGxlPlBlciB0ZXN0IGNhc2UgZml4dHVyZTwvdGl0bGU+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vc3R5bGUvc3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCI+CjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgdGl0bGU9IkJvb3N0IFRlc3QgTGlicmFyeSI+CjxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL2ZpeHR1cmUuaHRtbCIgdGl0bGU9IkZpeHR1cmVzIG9yIGxldCBtZSByZXBlYXQgbXlzZWxmIj4KPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJtb2RlbC5odG1sIiB0aXRsZT0iR2VuZXJpYyBmaXh0dXJlIG1vZGVsIj4KPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ0ZXN0LXN1aXRlLXNoYXJlZC5odG1sIiB0aXRsZT0iVGVzdCBzdWl0ZSBsZXZlbCBmaXh0dXJlIj4KPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdDEuMiIgc3JjPSIuLi8uLi8uLi8uLi9qcy9ib29zdC10ZXN0LmpzIj48L3NjcmlwdD4KPC9oZWFkPgo8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgo8dGQgd2lkdGg9IjEwJSI+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbCI+PGltZyBhbHQ9IkhvbWUiIHdpZHRoPSIyMjkiIGhlaWdodD0iNjEiIGJvcmRlcj0iMCIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Rlc3QvZG9jYm9vay9pbWcvYm9vc3QudGVzdC5sb2dvLnBuZyI+PC9hPjwvdGQ+Cjx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiPiAmZ3Q7IDxhIGhyZWY9Ii4uLy4uLy4uL3V0Zi5odG1sIj5UaGUgVW5pdCBUZXN0IEZyYW1ld29yazwvYT4gJmd0OyA8YSBocmVmPSIuLi8uLi91c2VyLWd1aWRlLmh0bWwiPlVzZXIncyBndWlkZTwvYT48YSBocmVmPSIuLi8uLi90ZXN0aW5nLXRvb2xzLmh0bWwiPgogICAgICAmZ3Q7CiAgICAgIDwvYT48YSBocmVmPSIuLi9maXh0dXJlLmh0bWwiPkZpeHR1cmVzPC9hPjxhIGhyZWY9Ii4uL3Rlc3Qtb3V0cHV0Lmh0bWwiPgogICAgICAmZ3Q7CiAgICAgIDwvYT48Yj5QZXIgdGVzdCBjYXNlPC9iPgo8L3RkPgo8dGQ+PGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+CjxhIGhyZWY9Im1vZGVsLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGhyZWY9InRlc3Qtc3VpdGUtc2hhcmVkLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgo8L2Rpdj48L3RkPgo8L3RyPjwvdGFibGU+Cjxocj4KPGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPgo8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDUgY2xhc3M9InRpdGxlIj4KPGEgbmFtZT0idXRmLnVzZXItZ3VpZGUuZml4dHVyZS5wZXItdGVzdC1jYXNlIj48L2E+UGVyIHRlc3QgY2FzZSBmaXh0dXJlPC9oNT48L2Rpdj48L2Rpdj48L2Rpdj4KPHAgY2xhc3M9ImZpcnN0LWxpbmUtaW5kZW50ZWQiPgogICBUbyBhdXRvbWF0ZSB0aGUgdGFzayBvZiBhc3NpZ25pbmcgYSBmaXh0dXJlIGZvciB0aGUgdGVzdCBjYXNlLCBmb3IgdGVzdCBjYXNlIGNyZWF0aW9uIHVzZSB0aGUgbWFjcm8KICAgQk9PU1RfRklYVFVSRV9URVNUX0NBU0UgaW4gcGxhY2Ugb2YgdGhlIG1hY3JvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL3Rlc3Qtb3JnYW5pemF0aW9uL2F1dG8tbnVsbGFyeS10ZXN0LWNhc2UuaHRtbCNCT09TVF9BVVRPX1RFU1RfQ0FTRSI+Qk9PU1RfQVVUT19URVNUX0NBU0U8L2E+PC9jb2RlPjoKICA8L3A+CjxwcmUgY2xhc3M9ImlubGluZS1zeW5vcHNpcyI+CjxhIG5hbWU9IkJPT1NUX0ZJWFRVUkVfVEVTVF9DQVNFIj48L2E+Qk9PU1RfRklYVFVSRV9URVNUX0NBU0UoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dGVzdF9jYXNlX25hbWU8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmZpeHVyZV9uYW1lPC9lbT48L3NwYW4+KTwvcHJlPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgIFRoZSBvbmx5IGRpZmZlcmVuY2UgZnJvbSB0aGUgbWFjcm8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vdGVzdC1vcmdhbml6YXRpb24vYXV0by1udWxsYXJ5LXRlc3QtY2FzZS5odG1sI0JPT1NUX0FVVE9fVEVTVF9DQVNFIj5CT09TVF9BVVRPX1RFU1RfQ0FTRTwvYT48L2NvZGU+IGlzIHRoZSBwcmVzZW5jZSBvZiBhbiBleHRyYSBhcmd1bWVudCAKICAgLSBmaXh0dXJlIG5hbWUuIFVubGlrZSB0aGUgcHVyZSBDKysgc29sdXRpb24geW91IGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgcHVibGljIGFuZCBwcm90ZWN0ZWQgbWVtYmVycyBvZiB0aGUKICAgZml4dHVyZSwgdGhvdWdoIHlvdSBzdGlsbCBuZWVkIHRvIHJlZmVyIHRvIHRoZSBmaXh0dXJlIG5hbWUgaW4gZXZlcnkgdGVzdCBjYXNlLgogIDwvcD4KPGRpdiBjbGFzcz0ibm90ZSI+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iTm90ZSI+Cjx0cj4KPHRkIHJvd3NwYW49IjIiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUiPjxpbWcgYWx0PSJbTm90ZV0iIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL25vdGUucG5nIj48L3RkPgo8dGggYWxpZ249ImxlZnQiPk5vdGU8L3RoPgo8L3RyPgo8dHI+PHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PHA+CiAgICBZb3UgY2FuJ3QgYWNjZXNzIHByaXZhdGUgbWVtYmVycyBvZiBmaXh0dXJlLCBidXQgdGhlbiB3aHkgd291bGQgeW91IG1ha2UgYW55dGhpbmcgcHJpdmF0ZT8KICAgPC9wPjwvdGQ+PC90cj4KPC90YWJsZT48L2Rpdj4KPGRpdiBjbGFzcz0iZXhhbXBsZSI+CjxhIG5hbWU9InV0Zi51c2VyLWd1aWRlLmZpeHR1cmUucGVyLXRlc3QtY2FzZS5leGFtcGxlMTgiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgMjMuoFBlciB0ZXN0IGNhc2UgZml4dHVyZTwvYj48L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgICBJbiB0aGlzIGV4YW1wbGUgb25seSB0ZXN0X2Nhc2UxIGFuZCB0ZXN0X2Nhc2UyIGhhdmUgZml4dHVyZSBGIGFzc2lnbmVkLiBJbiB0aGUgbmV4dCBzZWN0aW9uIHlvdSBnb2luZyB0byBzZWUKICAgIHdoYXQgY2FuIGJlIGRvbmUgaWYgYWxsIHRlc3QgY2FzZXMgaW4gYSB0ZXN0IHN1aXRlIHJlcXVpcmUgdGhlIHNhbWUgZml4dHVyZS4KICAgPC9wPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBCT09TVF9URVNUX01PRFVMRSBleGFtcGxlCiNpbmNsdWRlICZsdDtib29zdC90ZXN0L2luY2x1ZGVkL3VuaXRfdGVzdC5ocHAmZ3Q7CgpzdHJ1Y3QgRiB7CiAgICBGKCkgOiBpKCAwICkgeyBCT09TVF9URVNUX01FU1NBR0UoICJzZXR1cCBmaXh0dXJlIiApOyB9CiAgICB+RigpICAgICAgICAgeyBCT09TVF9URVNUX01FU1NBR0UoICJ0ZWFyZG93biBmaXh0dXJlIiApOyB9CgogICAgaW50IGk7Cn07CgpCT09TVF9GSVhUVVJFX1RFU1RfQ0FTRSggdGVzdF9jYXNlMSwgRiApCnsKICAgIEJPT1NUX0NIRUNLKCBpID09IDEgKTsKICAgICsraTsKfQoKQk9PU1RfRklYVFVSRV9URVNUX0NBU0UoIHRlc3RfY2FzZTIsIEYgKQp7CiAgICBCT09TVF9DSEVDS19FUVVBTCggaSwgMSApOwp9CgpCT09TVF9BVVRPX1RFU1RfQ0FTRSggdGVzdF9jYXNlMyApCnsKICAgIEJPT1NUX0NIRUNLKCB0cnVlICk7Cn0KPC9wcmU+Cjx0YWJsZSBjbGFzcz0ic2ltcGxlbGlzdCIgYm9yZGVyPSIwIiBzdW1tYXJ5PSJTaW1wbGUgbGlzdCI+PHRyPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uL3NyYy9leGFtcGxlcy9leGFtcGxlMTguY3BwIiB0YXJnZXQ9Il90b3AiPlNvdXJjZSBjb2RlPC9hPjwvY29kZT48L3RkPgo8dGQ+IHwgPC90ZD4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIjIiB0YXJnZXQ9Il90b3AiIGlkPSJpZDY1Mjc0MiIgb25jbGljaz0idG9nZ2xlX2VsZW1lbnQoICdleGFtcGxlMTgtb3V0cHV0JywgJ2lkNjUyNzQyJywgJ1Nob3cgb3V0cHV0JywgJ0hpZGUgb3V0cHV0JyApOyByZXR1cm4gZmFsc2U7Ij5TaG93IG91dHB1dDwvYT48L2NvZGU+PC90ZD4KPC90cj48L3RhYmxlPgo8cHJlIGNsYXNzPSJleGFtcGxlLW91dHB1dCIgaWQ9ImV4YW1wbGUxOC1vdXRwdXQiPiZndDsgZXhhbXBsZSAtLWxvZ19sZXZlbD1tZXNzYWdlClJ1bm5pbmcgMyB0ZXN0IGNhc2VzLi4uCnNldHVwIGZpeHR1cmUKdGVzdC5jcHAoMTMpOiBlcnJvciBpbiAidGVzdF9jYXNlMSI6IGNoZWNrIGkgPT0gMSBmYWlsZWQKdGVhcmRvd24gZml4dHVyZQpzZXR1cCBmaXh0dXJlCnRlc3QuY3BwKDE5KTogZXJyb3IgaW4gInRlc3RfY2FzZTIiOiBjaGVjayBpID09IDEgZmFpbGVkIFswICE9IDFdCnRlYXJkb3duIGZpeHR1cmUKCioqKiAyIGZhaWx1cmVzIGRldGVjdGVkIGluIHRlc3Qgc3VpdGUgImV4YW1wbGUiPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KPC9kaXY+Cjx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KPHRkIGFsaWduPSJsZWZ0Ij48L3RkPgo8dGQgYWxpZ249InJpZ2h0Ij48ZGl2IGNsYXNzPSJjb3B5cmlnaHQtZm9vdGVyIj5Db3B5cmlnaHQgqSAyMDAxLTIwMDcgR2VubmFkaXkgUm96ZW50YWw8L2Rpdj48L3RkPgo8L3RyPjwvdGFibGU+Cjxocj4KPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+CjxhIGFjY2Vzc2tleT0icCIgaHJlZj0ibW9kZWwuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9maXh0dXJlLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9InRlc3Qtc3VpdGUtc2hhcmVkLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgo8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==