PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PHRpdGxlPlJldHJpZXZpbmcgQXR0cmlidXRlczwvdGl0bGU+PG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS42MS4yIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJMaWJ4bWwgVHV0b3JpYWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJMaWJ4bWwgVHV0b3JpYWwiPjxsaW5rIHJlbD0icHJldmlvdXMiIGhyZWY9ImFyMDFzMDcuaHRtbCIgdGl0bGU9IldyaXRpbmcgQXR0cmlidXRlIj48bGluayByZWw9Im5leHQiIGhyZWY9ImFyMDFzMDkuaHRtbCIgdGl0bGU9IkVuY29kaW5nIENvbnZlcnNpb24iPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ibmF2aGVhZGVyIj48dGFibGUgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIj48dHI+PHRoIGNvbHNwYW49IjMiIGFsaWduPSJjZW50ZXIiPlJldHJpZXZpbmcgQXR0cmlidXRlczwvdGg+PC90cj48dHI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJsZWZ0Ij48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImFyMDFzMDcuaHRtbCI+UHJldjwvYT6gPC90ZD48dGggd2lkdGg9IjYwJSIgYWxpZ249ImNlbnRlciI+oDwvdGg+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+oDxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYXIwMXMwOS5odG1sIj5OZXh0PC9hPjwvdGQ+PC90cj48L3RhYmxlPjxocj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0ieG1sdHV0b3JpYWxhdHRyaWJ1dGUiPjwvYT5SZXRyaWV2aW5nIEF0dHJpYnV0ZXM8L2gyPjwvZGl2PjwvZGl2PjxkaXY+PC9kaXY+PC9kaXY+PHA+PGEgY2xhc3M9ImluZGV4dGVybSIgbmFtZT0iaWQyNTg3MjM2Ij48L2E+ClJldHJpZXZpbmcgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBpcyBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cwogICAgZXhhbXBsZSBpbiB3aGljaCB3ZSByZXRyaWV2ZWQgYSBub2RlJ3MgdGV4dCBjb250ZW50cy4gSW4gdGhpcyBjYXNlIHdlJ2xsCiAgICAgIGV4dHJhY3QgdGhlIHZhbHVlIG9mIHRoZSA8c3BhbiBjbGFzcz0iYWNyb255bSI+VVJJPC9zcGFuPiB3ZSBhZGRlZCBpbiB0aGUgcHJldmlvdXMKICAgICAgc2VjdGlvbi4gRnVsbCBjb2RlOiA8YSBocmVmPSJhcGcuaHRtbCIgdGl0bGU9IkcuoENvZGUgZm9yIFJldHJpZXZpbmcgQXR0cmlidXRlIFZhbHVlIEV4YW1wbGUiPkFwcGVuZGl4oEcsIDxpPkNvZGUgZm9yIFJldHJpZXZpbmcgQXR0cmlidXRlIFZhbHVlIEV4YW1wbGU8L2k+PC9hPi48L3A+PHA+CiAgICAgIFRoZSBpbml0aWFsIHN0ZXBzIGZvciB0aGlzIGV4YW1wbGUgYXJlIHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzIG9uZXM6IHBhcnNlCiAgICAgIHRoZSBkb2MsIGZpbmQgdGhlIGVsZW1lbnQgeW91IGFyZSBpbnRlcmVzdGVkIGluLCB0aGVuIGVudGVyIGEgZnVuY3Rpb24gdG8KICAgICAgY2Fycnkgb3V0IHRoZSBzcGVjaWZpYyB0YXNrIHJlcXVpcmVkLiBJbiB0aGlzIGNhc2UsIHdlIGNhbGwKICAgICAgPHR0IGNsYXNzPSJmdW5jdGlvbiI+Z2V0UmVmZXJlbmNlPC90dD46CiAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CnZvaWQKZ2V0UmVmZXJlbmNlICh4bWxEb2NQdHIgZG9jLCB4bWxOb2RlUHRyIGN1cikgewoKCXhtbENoYXIgKnVyaTsKCWN1ciA9IGN1ci0mZ3Q7eG1sQ2hpbGRyZW5Ob2RlOwoJd2hpbGUgKGN1ciAhPSBOVUxMKSB7CgkgICAgaWYgKCgheG1sU3RyY21wKGN1ci0mZ3Q7bmFtZSwgKGNvbnN0IHhtbENoYXIgKikicmVmZXJlbmNlIikpKSB7CgkJICAgPGEgbmFtZT0iZ2V0YXR0cmlidXRldmFsdWUiPjwvYT48aW1nIHNyYz0iaW1hZ2VzL2NhbGxvdXRzLzEucG5nIiBhbHQ9IjEiIGJvcmRlcj0iMCI+IHVyaSA9IHhtbEdldFByb3AoY3VyLCAidXJpIik7CgkJICAgIHByaW50ZigidXJpOiAlc1xuIiwgdXJpKTsKCQkgICAgeG1sRnJlZSh1cmkpOwoJICAgIH0KCSAgICBjdXIgPSBjdXItJmd0O25leHQ7Cgl9CglyZXR1cm47Cn0KICAgICAgPC9wcmU+PHA+CiAgICAKICAgICAgPC9wPjxkaXYgY2xhc3M9ImNhbGxvdXRsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJDYWxsb3V0IGxpc3QiPjx0cj48dGQgd2lkdGg9IjUlIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxhIGhyZWY9IiNnZXRhdHRyaWJ1dGV2YWx1ZSI+PGltZyBzcmM9ImltYWdlcy9jYWxsb3V0cy8xLnBuZyIgYWx0PSIxIiBib3JkZXI9IjAiPjwvYT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48cD4KCSAgICBUaGUga2V5IGZ1bmN0aW9uIGlzIDx0dCBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy9odG1sL2xpYnhtbC10cmVlLmh0bWwjWE1MR0VUUFJPUCIgdGFyZ2V0PSJfdG9wIj54bWxHZXRQcm9wPC9hPjwvdHQ+LCB3aGljaCByZXR1cm5zIGFuCiAgICAgIDx0dCBjbGFzcz0idmFybmFtZSI+eG1sQ2hhcjwvdHQ+IGNvbnRhaW5pbmcgdGhlIGF0dHJpYnV0ZSdzIHZhbHVlLiBJbiB0aGlzIGNhc2UsCgkJCQkJICAgd2UganVzdCBwcmludCBpdCBvdXQuCiAgICAgIDwvcD48ZGl2IGNsYXNzPSJub3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iTm90ZSI+PHRyPjx0ZCByb3dzcGFuPSIyIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjI1Ij48aW1nIGFsdD0iW05vdGVdIiBzcmM9ImltYWdlcy9ub3RlLnBuZyI+PC90ZD48dGggYWxpZ249ImxlZnQiPk5vdGU8L3RoPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjxwPgoJICBJZiB5b3UgYXJlIHVzaW5nIGEgPHNwYW4gY2xhc3M9ImFjcm9ueW0iPkRURDwvc3Bhbj4gdGhhdCBkZWNsYXJlcyBhIGZpeGVkIG9yCgkgIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBhdHRyaWJ1dGUsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXRyaWV2ZSBpdC4KCTwvcD48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj48cD4KCSAgPC9wPjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjxwPgogICAgIAogICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9Im5hdmZvb3RlciI+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBmb290ZXIiPjx0cj48dGQgd2lkdGg9IjQwJSIgYWxpZ249ImxlZnQiPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iYXIwMXMwNy5odG1sIj5QcmV2PC9hPqA8L3RkPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0iY2VudGVyIj48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwiPlVwPC9hPjwvdGQ+PHRkIHdpZHRoPSI0MCUiIGFsaWduPSJyaWdodCI+oDxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYXIwMXMwOS5odG1sIj5OZXh0PC9hPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSI0MCUiIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+V3JpdGluZyBBdHRyaWJ1dGWgPC90ZD48dGQgd2lkdGg9IjIwJSIgYWxpZ249ImNlbnRlciI+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+PHRkIHdpZHRoPSI0MCUiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPqBFbmNvZGluZyBDb252ZXJzaW9uPC90ZD48L3RyPjwvdGFibGU+PC9kaXY+PC9ib2R5PjwvaHRtbD4K