PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPHRpdGxlPlRlc3QgcHJvZ3Jlc3MgZGlzcGxheTwvdGl0bGU+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vc3R5bGUvc3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCI+CjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgdGl0bGU9IkJvb3N0IFRlc3QgTGlicmFyeSI+CjxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL3Rlc3Qtb3V0cHV0Lmh0bWwiIHRpdGxlPSJUZXN0IE91dHB1dCBvciBsZXQncyBzZWUgd2hhdCB5b3UgZ290IGZvciB5b3VyIG1vbmV5Ij4KPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJyZXN1bHRzLXJlcG9ydC5odG1sIiB0aXRsZT0iVGVzdCByZXBvcnQgb3V0cHV0Ij4KPGxpbmsgcmVsPSJuZXh0IiBocmVmPSIuLi9ydW50aW1lLWNvbmZpZy5odG1sIiB0aXRsZT0iUnVudGltZSBjb25maWd1cmF0aW9uIG9yIHdoYXQgYXJlIHRoZSBzdHJpbmdzIEkgY2FuIHB1bGw/Ij4KPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdDEuMiIgc3JjPSIuLi8uLi8uLi8uLi9qcy9ib29zdC10ZXN0LmpzIj48L3NjcmlwdD4KPC9oZWFkPgo8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgo8dGQgd2lkdGg9IjEwJSI+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbCI+PGltZyBhbHQ9IkhvbWUiIHdpZHRoPSIyMjkiIGhlaWdodD0iNjEiIGJvcmRlcj0iMCIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Rlc3QvZG9jYm9vay9pbWcvYm9vc3QudGVzdC5sb2dvLnBuZyI+PC9hPjwvdGQ+Cjx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiPiAmZ3Q7IDxhIGhyZWY9Ii4uLy4uLy4uL3V0Zi5odG1sIj5UaGUgVW5pdCBUZXN0IEZyYW1ld29yazwvYT4gJmd0OyA8YSBocmVmPSIuLi8uLi91c2VyLWd1aWRlLmh0bWwiPlVzZXIncyBndWlkZTwvYT48YSBocmVmPSIuLi8uLi90ZXN0aW5nLXRvb2xzLmh0bWwiPgogICAgICAmZ3Q7CiAgICAgIDwvYT48YSBocmVmPSIuLi90ZXN0LW91dHB1dC5odG1sIj5UZXN0IE91dHB1dCA8L2E+PGEgaHJlZj0iLi4vcnVudGltZS1jb25maWcuaHRtbCI+CiAgICAgICZndDsKICAgICAgPC9hPjxiPlByb2dyZXNzIGRpc3BsYXk8L2I+CjwvdGQ+Cjx0ZD48ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KPGEgaHJlZj0icmVzdWx0cy1yZXBvcnQuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgaHJlZj0iLi4vcnVudGltZS1jb25maWcuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+CjwvZGl2PjwvdGQ+CjwvdHI+PC90YWJsZT4KPGhyPgo8ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNSBjbGFzcz0idGl0bGUiPgo8YSBuYW1lPSJ1dGYudXNlci1ndWlkZS50ZXN0LW91dHB1dC5wcm9ncmVzcyI+PC9hPlRlc3QgcHJvZ3Jlc3MgZGlzcGxheTwvaDU+PC9kaXY+PC9kaXY+PC9kaXY+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgSW4gY2FzZSBpZiB0aGUgdGVzdCBtb2R1bGUgaW52b2x2ZXMgbGVuZ3RoeSBjb21wdXRhdGlvbiBzcGxpdCBhbW9uZyBtdWx0aXBsZSB0ZXN0IGNhc2VzIHlvdSBtYXkgYmUgaW50ZXJlc3RlZCBpbiAKICAgcHJvZ3Jlc3MgbW9uaXRvci4gVGhlIHRlc3QgcnVubmVycyBzdXBwbGllZCB3aXRoIHRoZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+VVRGPC9hY3JvbnltPiBzdXBwb3J0IHNpbXBsZSB0ZXh0IHByb2dyZXNzIGRpc3BsYXksIGltcGxlbWVudGVkIGJhc2VkCiAgIG9uIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Ym9vc3Q6OnByb2dyZXNzX2Rpc3BsYXk8L2NvZGU+PHN1cD5bPGEgbmFtZT0iaWQ2NTU3ODkiIGhyZWY9IiNmdG4uaWQ2NTU3ODkiIGNsYXNzPSJmb290bm90ZSI+NTwvYT5dPC9zdXA+LiBUaGUgcHJvZ3Jlc3MgZGlzcGxheSBvdXRwdXQgCiAgIGlzIGVuYWJsZWQgdXNpbmcgdGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5VVEY8L2Fjcm9ueW0+IHBhcmFtZXRlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vcnVudGltZS1jb25maWcvcmVmZXJlbmNlLmh0bWwjdXRmLnVzZXItZ3VpZGUucnVudGltZS1jb25maWcucGFyYW1ldGVycyI+c2hvd19wcm9ncmVzczwvYT4uCiAgPC9wPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgIFRoZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+VVRGPC9hY3JvbnltPiBoYXMgbm8gYWJpbGl0eSB0byBlc3RpbWF0ZSBob3cgbG9uZyB0aGUgdGVzdCBjYXNlIGV4ZWN1dGlvbiBpcyBnb2luZyB0byB0YWtlIGFuZCB0aGUgbWFudWFsIHRlc3QgCiAgIHByb2dyZXNzIHVwZGF0ZSBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgcG9pbnQuIFRoZSA8YWNyb255bSBjbGFzcz0iYWNyb255bSI+VVRGPC9hY3JvbnltPiB0cmFja3MgdGhlIHByb2dyZXNzIG9uIHRlc3QgY2FzZSBsZXZlbC4gSWYgeW91IHdhbnQgdG8gCiAgIHNlZSBtb3JlIGZyZXF1ZW50IHByb2dyZXNzIHVwZGF0ZSwgeW91IG5lZWQgdG8gc3BsaXQgdGhlIHRlc3QgaW50byBtdWx0aXBsZSB0ZXN0IGNhc2VzLgogIDwvcD4KPHAgY2xhc3M9ImZpcnN0LWxpbmUtaW5kZW50ZWQiPgogICBJbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYm90aCB0ZXN0IGxvZyBhbmQgdGVzdCBwcm9ncmVzcyBvdXRwdXRzIGFyZSBkaXJlY3RlZCBpbnRvIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0uIEFueSB0ZXN0IAogICBsb2cgbWVzc2FnZXMgYXJlIGdvaW5nIHRvIGludGVyZmVyZSB3aXRoIHRlc3QgcHJvZ3Jlc3MgZGlzcGxheS4gVG8gcHJldmVudCB0aGlzIHlvdSBjYW4gZWl0aGVyIHNldCBsb2cgbGV2ZWwgdG8gCiAgIGxvd2VyIGxldmVsIG9yIHJlZGlyZWN0IGVpdGhlciB0ZXN0IGxvZyBvciB0ZXN0IHByb2dyZXNzIG91dHB1dCBpbnRvIGRpZmZlcmVudCBzdHJlYW0gZHVyaW5nIHRlc3QgbW9kdWxlIAogICBpbml0aWFsaXphdGlvbi4gVXNlIGZvbGxvd2luZyBpbnRlcmZhY2UgdG8gcmVkaXJlY3QgdGVzdCBwcm9ncmVzcyBvdXRwdXQ6CiAgPC9wPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ym9vc3Q6OnVuaXRfdGVzdDo6cHJvZ3Jlc3NfbW9uaXRvci5zZXRfc3RyZWFtKCBzdGQ6Om9zdHJlYW0mYW1wOyApPC9wcmU+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPgo8YSBuYW1lPSJ1dGYudXNlci1ndWlkZS50ZXN0LW91dHB1dC5wcm9ncmVzcy5leGFtcGxlNDkiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGWgMzMuoFByb2dyZXNzIHJlcG9ydCBmb3IgdGhlIHRlc3QgbW9kdWxlIHdpdGggbGFyZ2UgYW1vdW50IG9mIHRlc3QgY2FzZXM8L2I+PC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNpbmNsdWRlICZsdDtib29zdC90ZXN0L2luY2x1ZGVkL3VuaXRfdGVzdC5ocHAmZ3Q7CnVzaW5nIG5hbWVzcGFjZSBib29zdDo6dW5pdF90ZXN0OwoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCnZvaWQgZnJlZV90ZXN0X2Z1bmN0aW9uKCkKewogICAgQk9PU1RfQ0hFQ0soIHRydWUgLyogdGVzdCBhc3NlcnRpb24gKi8gKTsKfQoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCnRlc3Rfc3VpdGUqCmluaXRfdW5pdF90ZXN0X3N1aXRlKCBpbnQgYXJnYywgY2hhciogYXJndltdICkgCnsKICAgIGZvciggaW50IGk9MDsgaSAmbHQ7IDEwMDAwOyBpKysgKQogICAgICAgIGZyYW1ld29yazo6bWFzdGVyX3Rlc3Rfc3VpdGUoKS4KICAgICAgICAgICAgYWRkKCBCT09TVF9URVNUX0NBU0UoICZhbXA7ZnJlZV90ZXN0X2Z1bmN0aW9uICkgKTsKCiAgICByZXR1cm4gMDsKfQoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KPC9wcmU+Cjx0YWJsZSBjbGFzcz0ic2ltcGxlbGlzdCIgYm9yZGVyPSIwIiBzdW1tYXJ5PSJTaW1wbGUgbGlzdCI+PHRyPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uL3NyYy9leGFtcGxlcy9leGFtcGxlNDkuY3BwIiB0YXJnZXQ9Il90b3AiPlNvdXJjZSBjb2RlPC9hPjwvY29kZT48L3RkPgo8dGQ+IHwgPC90ZD4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIjIiB0YXJnZXQ9Il90b3AiIGlkPSJpZDY1NTkwNCIgb25jbGljaz0idG9nZ2xlX2VsZW1lbnQoICdleGFtcGxlNDktb3V0cHV0JywgJ2lkNjU1OTA0JywgJ1Nob3cgb3V0cHV0JywgJ0hpZGUgb3V0cHV0JyApOyByZXR1cm4gZmFsc2U7Ij5TaG93IG91dHB1dDwvYT48L2NvZGU+PC90ZD4KPC90cj48L3RhYmxlPgo8cHJlIGNsYXNzPSJleGFtcGxlLW91dHB1dCIgaWQ9ImV4YW1wbGU0OS1vdXRwdXQiPiZndDsgZXhhbXBsZSAtLXNob3dfcHJvZ3Jlc3M9eWVzIC0tbG9nX2xldmVsPW5vdGhpbmcKCjAlICAgMTAgICAyMCAgIDMwICAgNDAgICA1MCAgIDYwICAgNzAgICA4MCAgIDkwICAgMTAwJQp8LS0tLXwtLS0tfC0tLS18LS0tLXwtLS0tfC0tLS18LS0tLXwtLS0tfC0tLS18LS0tLXwKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgoqKiogTm8gZXJyb3JzIGRldGVjdGVkCjwvcHJlPgo8L2Rpdj4KPC9kaXY+CjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+PGRpdiBjbGFzcz0iZm9vdG5vdGVzIj4KPGJyPjxociB3aWR0aD0iMTAwIiBhbGlnbj0ibGVmdCI+CjxkaXYgY2xhc3M9ImZvb3Rub3RlIj48YWNyb255bSBjbGFzcz0iYWNyb255bSI+PHN1cD5bPGEgbmFtZT0iZnRuLmlkNjU1Nzg5IiBocmVmPSIjaWQ2NTU3ODkiIGNsYXNzPSJhY3JvbnltIj41PC9hPl0gPC9zdXA+VVRGPC9hY3JvbnltPjwvZGl2Pgo8L2Rpdj4KPC9kaXY+Cjx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KPHRkIGFsaWduPSJsZWZ0Ij48L3RkPgo8dGQgYWxpZ249InJpZ2h0Ij48ZGl2IGNsYXNzPSJjb3B5cmlnaHQtZm9vdGVyIj5Db3B5cmlnaHQgqSAyMDAxLTIwMDcgR2VubmFkaXkgUm96ZW50YWw8L2Rpdj48L3RkPgo8L3RyPjwvdGFibGU+Cjxocj4KPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+CjxhIGFjY2Vzc2tleT0icCIgaHJlZj0icmVzdWx0cy1yZXBvcnQuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi90ZXN0LW91dHB1dC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9ob21lLnBuZyIgYWx0PSJIb21lIj48L2E+PGEgYWNjZXNza2V5PSJuIiBocmVmPSIuLi9ydW50aW1lLWNvbmZpZy5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=