PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vYXBwLmNsYXNzLnBocCIpOwlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9uYXYuY2xhc3MucGhwIik7IAlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9tZW51LmNsYXNzLnBocCIpOyAJJEFwcCAJPSBuZXcgQXBwKCk7CSROYXYJPSBuZXcgTmF2KCk7CSRNZW51IAk9IG5ldyBNZW51KCk7CQlpbmNsdWRlKCRBcHAtPmdldFByb2plY3RDb21tb24oKSk7ICAgICMgQWxsIG9uIHRoZSBzYW1lIGxpbmUgdG8gdW5jbHV0dGVyIHRoZSB1c2VyJ3MgZGVza3RvcCcKCQoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkjCgkjIHRlbXBsYXRlLnBocAoJIwoJIyBBdXRob3I6IAkJRGVuaXMgUm95CgkjIERhdGU6CQkJMjAwNS0wNi0xNgoJIwoJIyBEZXNjcmlwdGlvbjogVHlwZSB5b3VyIHBhZ2UgY29tbWVudHMgaGVyZSAtIHRoZXNlIGFyZSBub3Qgc2VudCB0byB0aGUgYnJvd3NlcgoJIwoJIwoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCSRkb2N1bWVudFJvb3QgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddOwoJLy9yZXF1aXJlX29uY2UgKCRkb2N1bWVudFJvb3QgLicvZXVyb3BhL3NjcmlwdHMvcHJvamVjdHNUYWJsZS5waHAnKTsKCS8vcmVxdWlyZV9vbmNlICgkZG9jdW1lbnRSb290IC4gJy9yZXNvdXJjZXMvc2NyaXB0cy9yZXNvdXJjZXNfaHRtbC5waHAnKTsJCglyZXF1aXJlX29uY2UgKCRkb2N1bWVudFJvb3QgLiAnL2V1cm9wYS9zY3JpcHRzL3doYXRzbmV3LnBocCcpOwoJIwoJIyBCZWdpbjogcGFnZS1zcGVjaWZpYyBzZXR0aW5ncy4gIENoYW5nZSB0aGVzZS4gCgkkcGFnZVRpdGxlIAkJPSAiRWNsaXBzZSBFdXJvcGEgUmVsZWFzZSI7CgkkcGFnZUtleXdvcmRzCT0gIkVjbGlwc2UgRXVyb3BhIFNpbXVsdGFuZW91cyBSZWxlYXNlIjsKCSRwYWdlQXV0aG9yCQk9ICJOYXRoYW4gR2VydmFpcyI7CgkKCSMgQWRkIHBhZ2Utc3BlY2lmaWMgTmF2IGJhcnMgaGVyZQoJIyBGb3JtYXQgaXMgTGluayB0ZXh0LCBsaW5rIFVSTCAoY2FuIGJlIGh0dHA6Ly93d3cuc29tZW90aGVyc2l0ZS5jb20vKSwgdGFyZ2V0IChfc2VsZiwgX2JsYW5rKSwgbGV2ZWwgKDEsIDIgb3IgMykKCSMgJE5hdi0+YWRkTmF2U2VwYXJhdG9yKCJNeSBQYWdlIExpbmtzIiwgCSJkb3dubG9hZHMucGhwIik7CgkjICROYXYtPmFkZEN1c3RvbU5hdigiTXkgTGluayIsICJteXBhZ2UucGhwIiwgIl9zZWxmIiwgMSk7CgkjICROYXYtPmFkZEN1c3RvbU5hdigiR29vZ2xlIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCAiX2JsYW5rIiwgMSk7CgoJIyBFbmQ6IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MKCSMKCS8vIFRoaXMgZmlsZSBpcyBsaW5rZWQgdG8gZnJvbSBsb3RzIG9mIGRpZmZlcmVudCBwbGFjZXMuCgkvLyBVc2UgYWJzb2x1dGUgcGF0aHMgdG8gbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGFjdHVhbGx5IHRlc3QKCS8vIHRoYXQgdGhlIGZpbGUgcmVuZGVycyBwcm9wZXJseSAoaS5lLiB0ZXN0aW5nIHVzaW5nKSAiL2luZGV4LnBocCIsCgkvLyBhbmQgIi9ob21lL2luZGV4LnBocCIgYm90aCB3b3JrLgoJIyBQYXN0ZSB5b3VyIEhUTUwgY29udGVudCBiZXR3ZWVuIHRoZSBFT0hUTUwgbWFya2VycyEKCQoJCgkkd2hhdHNuZXcgPSByc3NfdG9fc2lkZWl0ZW1faHRtbCgnL2NvbW11bml0eS9uZXdzLzIwMDVpbnRoZW5ld3NhcmNoaXZlJywgMywgImV1cm9wYSIpOwkKCSRyZXNvdXJjZV9maWx0ZXIgPSAiRXVyb3BhIjsKCS8vJGRpc3BsYXlUYWJzID0gZGlzcGxheVRhYnMoKTsJCQoJLy8kcmVzb3VyY2VzX3RhYmxlID0gJFJlc291cmNlc19IVE1MLT5nZXRfcGlsbGFyX3Jlc291cmNlc190YWJsZSgkcmVzb3VyY2VfZmlsdGVyKTsKCSAKCW9iX3N0YXJ0KCk7Cgk/PgoJPG1hcCBuYW1lPSJkZXZlbG9wZXJCYXJNYXAiPgoJCTxhcmVhIHNoYXBlPSJyZWN0IiBhbHQ9IiIgY29vcmRzPSI1MzcsMCw2NzAsNTgiIGhyZWY9Ii9kb3dubG9hZHMvbW9yZWluZm8vY3VzdG9tLnBocCI+CgkJPGFyZWEgc2hhcGU9InJlY3QiIGFsdD0iIiBjb29yZHM9IjM5NiwwLDUzNyw1OCIgaHJlZj0iL2Rvd25sb2Fkcy9tb3JlaW5mby9yY3AucGhwIj4KCQk8YXJlYSBzaGFwZT0icmVjdCIgYWx0PSIiIGNvb3Jkcz0iMjYzLDAsMzk2LDU4IiBocmVmPSIvZG93bmxvYWRzL21vcmVpbmZvL2MucGhwIj4KCQk8YXJlYSBzaGFwZT0icmVjdCIgYWx0PSIiIGNvb3Jkcz0iMTI1LDAsMjYzLDU4IiBocmVmPSIvZG93bmxvYWRzL21vcmVpbmZvL2plZS5waHAiPgoJCTxhcmVhIHNoYXBlPSJyZWN0IiBhbHQ9IiIgY29vcmRzPSIwLDAsMTI1LDU4IiBocmVmPSIvZG93bmxvYWRzL21vcmVpbmZvL2phdmEucGhwIj4KCTwvbWFwPiAJCgoKCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImxheW91dC5jc3MiIG1lZGlhPSJzY3JlZW4iIC8+Cgk8ZGl2IGlkPSJtaWRjb2x1bW4iPgoJCTxkaXYgaWQ9ImhlYWRlckJHIj4KCQkJPHRhYmxlIGNlbGxzcGFjaW5nPTAgY2xhc3M9ImhlYWRlckJhciByZWxlYXNlIj4KCSAgICAgICAgCTx0cj4KCSAgICAgICAgCQk8dGQgYWxpZ249InJpZ2h0Ij48L3RkPgoJCQkJPC90cj4JCQkJCgkJCTwvdGFibGU+CgkJPC9kaXY+CgkJPHA+CgkJCQlFY2xpcHNlIEV1cm9wYSBpcyB0aGUgYW5udWFsIHJlbGVhc2Ugb2YgRWNsaXBzZSBwcm9qZWN0cy4gIExpa2UgbGFzdCB5ZWFyknMgQ2FsbGlzdG8gcmVsZWFzZSwgdGhlIEV1cm9wYSByZWxlYXNlIGlzIGEgY29vcmRpbmF0ZWQgcmVsZWFzZSBvZiBkaWZmZXJlbnQgRWNsaXBzZSBwcm9qZWN0IHRlYW1zLiAgIFRoaXMgeWVhciwgdGhlIGFubnVhbCByZWxlYXNlIGluY2x1ZGVzIDxhIGhyZWY9InByb2plY3RzLnBocCI+MjEgcHJvamVjdHMuPC9hPiAgIEJ5IHJlbGVhc2luZyB0aGVzZSBwcm9qZWN0cyBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgZ29hbCBpcyB0byBlbGltaW5hdGUgdW5jZXJ0YWludHkgYWJvdXQgdmVyc2lvbiBjb21wYXRpYmlsaXR5IGFuZCBtYWtlIGl0IGVhc2llciB0byBpbmNvcnBvcmF0ZSBtdWx0aXBsZSBwcm9qZWN0cyBpbnRvIHlvdXIgZW52aXJvbm1lbnQuCgkJICAgICAgICA8YnIgLz48YnIgLz4KCQkgICAgICAgICAgICAgIAoJCSAgICAgICAgPGVtPldoaWxlIEV1cm9wYSBpcyBhYm91dCB0aGUgc2ltdWx0YW5lb3VzIHJlbGVhc2Ugb2YgPGEgaHJlZj0icHJvamVjdHMucGhwIj50d2VudHkgb25lIHByb2plY3RzPC9hPiwgaXQgaXMKCQkgICAgICAgIG5vdCBhIHVuaWZpY2F0aW9uIG9mIHRoZSBwcm9qZWN0cyAtIGVhY2ggcHJvamVjdCByZW1haW5zIGEgc2VwYXJhdGUgb3BlbiBzb3VyY2UgcHJvamVjdCBvcGVyYXRpbmcgd2l0aCBpdHMgb3duIHByb2plY3QgbGVhZGVyc2hpcCwgaXRzIG93biBjb21taXR0ZXJzLCBhbmQgaXRzIG93biBwcm9qZWN0IHBsYW4uPC9lbT4KCQkJCTxici8+CgkJCQk8YnIvPgoJCQkJPGRpdiBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iaW1hZ2VzL2RldmVsb3BlckJhci5qcGciIHVzZU1hcD0iI2RldmVsb3BlckJhck1hcCI+PC9kaXY+PGJyLz4KCQkJCTwhLS0gPHNwYW4gY2xhc3M9ImV1cm9wYUxpbmsiPkhlbHAgUHJvbW90ZSBFY2xpcHNlIEV1cm9wYTwvc3Bhbj48YnIvPgoJCQkJVmlzaXQgb3VyIDxhIGhyZWY9ImZyaWVuZHMucGhwIj5GcmllbmRzIG9mIEV1cm9wYTwvYT4gcGFnZSBhbmQgaW5jbHVkZSBvbmUgb2YgdGhlIGltYWdlcyBvbiB5b3VyIHNpdGUuPGJyLz48YnIvPgoJCQkJPHNwYW4gY2xhc3M9ImV1cm9wYUxpbmsiPlRlc3QgRHJpdmUgdGhlIExhdGVzdCBFY2xpcHNlIEV1cm9wYSBSZWxlYXNlIENhbmRpZGF0ZXMgKFJDKTwvc3Bhbj48YnIvPgoJCQkJVGhlIEVjbGlwc2UgRXVyb3BhIHVwZGF0ZSBzaXRlIGNhbiBiZSBmb3VuZCBhdDogaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL2V1cm9wYS9zaXRlLnhtbDxici8+VG8gdXNlIHRoZSB1cGRhdGUgc2l0ZSBjb3B5IHRoZSBVUkwgYWJvdmUgYW5kIHBhc3RlIGl0IGludG8gdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIuPGJyLz48YnIvPgoJCQkJPHNwYW4gY2xhc3M9ImV1cm9wYUxpbmsiPkZvbGxvdyB0aGUgRWNsaXBzZSBFdXJvcGEgRGV2ZWxvcG1lbnQgQ29vcmRpbmF0aW9uPC9zcGFuPjxici8+CgkJCQlDaGVjayBvdXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL2luZGV4LnBocC9FdXJvcGFfU2ltdWx0YW5lb3VzX1JlbGVhc2UiPkVjbGlwc2UgRXVyb3BhIFdpa2kgUGFnZTwvYT4gdG8gY2hlY2sgb3V0IHRoZSBzdGF0dXMgb2YgRXVyb3BhPC9icj48YnIvPiAtLT4KCQk8L3A+CgkKCQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImhvbWVpdGVtIG5vTWFyZ2luTGVmdCI+CiAgICAgICAgPGgzPkxlYXJuIG1vcmU8L2gzPgogICAgICAgIDx1bD4KICAgICAgICAJPGxpPjxhIGhyZWY9ImV1cm9wYXJldmlld3MucGhwIj5FdXJvcGEgUmV2aWV3czwvYT48L2xpPgogICAgICAgIAk8bGk+Q2hlY2sgb3V0IHRoZSBsYXRlc3QgPGEgaHJlZj0iaHR0cDovL2xpdmUuZWNsaXBzZS5vcmcvc2VhcmNoL25vZGUvZXVyb3BhIj5XZWJpbmFyczwvYT4gYXQgPGEgaHJlZj0iaHR0cDovL2xpdmUuZWNsaXBzZS5vcmciPkVjbGlwc2UgTGl2ZTwvYT48L2xpPgogICAgICAgIAk8bGk+SVNWcyBhZG9wdGluZyA8YSBocmVmPSJldXJvcGFlZmZlY3QucGhwIj5FdXJvcGEgcHJvamVjdHM8L2E+PC9saT4gCiAgICAgICAgCTxsaT4gTGlzdGVuIHRvIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2V6b25lLmNvbS9wb2RjYXN0cy5qc3AiIHRhcmdldD0iYmxhbmsiPkVjbGlwc2Vab25lIEV1cm9wYSBQb2RjYXN0czwvYT4KICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgkKCgkJPD89JHdoYXRzbmV3Oz8+CgkJPGJyLz4KCQk8PyAvKjx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0wPgoJCQk8dHI+CgkJCQk8dGQgY29sc3Bhbj0iMiI+CQkJCQoJCQkJCTxkaXYgaWQ9InRlY2huaWNhbFJlc291cmNlcyI+CgkJCQkJCTw/PSRyZXNvdXJjZXNfdGFibGU7Pz4KCQkJCQk8L2Rpdj4KCQkJCTwvdGQ+CgkJCTwvdHI+CgkJCTwvdGFibGU+ICovID8+CQkKCgkJPHA+Jm5ic3A7PC9wPgoKCTwvZGl2PgoKCTxkaXYgaWQ9InJpZ2h0Y29sdW1uIj4KCQk8ZGl2IGNsYXNzPSJzaWRlaXRlbSI+CgkJCTxoNj5SZWxhdGVkIExpbmtzPC9oNj4KCQkJCTx1bD4KCQkJCQk8bGk+PGEgaHJlZj0iZnJpZW5kcy5waHAiPkZyaWVuZHMgb2YgRXVyb3BhPC9hPjwvbGk+CgkJCQkJPGxpPjxhIGhyZWY9InByb2plY3RzLnBocCI+RXVyb3BhIFByb2plY3RzPC9hPjwvbGk+CgkJCQkJPGxpPjxhIGhyZWY9Ii9vcmcvcHJlc3MtcmVsZWFzZS8yMDA3MDYxMmNiX2V1cm9wYXJldmlld3MucGhwIj5Xcml0ZSBhIFJldmlldywgV2luIGFuIEVjbGlwc2UgU2hpcnQ8L2E+PC9saT4KCQkJCTwvdWw+CgkJPC9kaXY+CgkJCgoJPC9kaXY+Cgo8PyAKJGh0bWwgPSBvYl9nZXRfY29udGVudHMoKTsKb2JfZW5kX2NsZWFuKCk7CgoJIyBHZW5lcmF0ZSB0aGUgd2ViIHBhZ2UKCSRBcHAtPmdlbmVyYXRlUGFnZSgkdGhlbWUsICRNZW51LCAkTmF2LCAkcGFnZUF1dGhvciwgJHBhZ2VLZXl3b3JkcywgJHBhZ2VUaXRsZSwgJGh0bWwpOwo/PgoK