PGh0bWw+CjxoZWFkPgoJPHRpdGxlPkJPT1NUX1BQX0VOVU1fUEFSQU1TX1dJVEhfQV9ERUZBVUxUPC90aXRsZT4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlcy5jc3MiPgo8L2hlYWQ+Cjxib2R5PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6ICAwcHg7Ij4KCQlUaGUgPGI+Qk9PU1RfUFBfRU5VTV9QQVJBTVNfV0lUSF9BX0RFRkFVTFQ8L2I+IG1hY3JvIGdlbmVyYXRlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBhcmFtZXRlcnMgd2l0aCBhIGRlZmF1bHQgYXJndW1lbnQuCgk8L2Rpdj4KCTxoND5Vc2FnZTwvaDQ+CgkJPGRpdiBjbGFzcz0iY29kZSI+CgkJCTxiPkJPT1NUX1BQX0VOVU1fUEFSQU1TX1dJVEhfQV9ERUZBVUxUPC9iPig8aT5jb3VudDwvaT4sIDxpPnBhcmFtPC9pPiwgPGk+ZGVmPC9pPikKCQk8L2Rpdj4KCTxoND5Bcmd1bWVudHM8L2g0PgoJCTxkbD4KCQkJPGR0PmNvdW50PC9kdD4KCQkJPGRkPgoJCQkJVGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRvIGdlbmVyYXRlLiZuYnNwOwoJCQkJVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gPGk+MDwvaT4gdG8gPGI+Qk9PU1RfUFBfTElNSVRfUkVQRUFUPC9iPi4KCQkJPC9kZD4KCQkJPGR0PnBhcmFtPC9kdD4KCQkJPGRkPgoJCQkJVGhlIHRleHQgb2YgdGhlIHBhcmFtZXRlci4mbmJzcDsKCQkJCTxiPkJPT1NUX1BQX0VOVU1fUEFSQU1TX1dJVEhfQV9ERUZBVUxUPC9iPiBjb25jYXRlbmF0ZXMgbnVtYmVycyByYW5naW5nIGZyb20gPGk+MDwvaT4gdG8gPGk+Y291bnQ8L2k+IC0gPGk+MTwvaT4KCQkJCXRvIGdlbmVyYXRlIHBhcmFtZXRlcnMuCgkJCTwvZGQ+CgkJCTxkdD5kZWY8L2R0PgoJCQk8ZGQ+CgkJCQlUaGUgZGVmYXVsdCB2YWx1ZSB0aGF0IHRyYWlscyBlYWNoIHBhcmFtZXRlci4KCQkJPC9kZD4KCQk8L2RsPgoJPGg0PlJlbWFya3M8L2g0PgoJCTxkaXY+CgkJCVRoaXMgbWFjcm8gZXhwYW5kcyB0byB0aGUgY29tbWEtc2VwYXJhdGVkIHNlcXVlbmNlOgoJCQk8ZGl2PgoJCQkJPGk+cGFyYW08L2k+ICMjIDxpPjA8L2k+ID0gPGk+ZGVmPC9pPiwgPGk+cGFyYW08L2k+ICMjIDxpPjE8L2k+ID0gPGk+ZGVmPC9pPiwgLi4uIDxpPnBhcmFtPC9pPiAjIyA8aT5jb3VudDwvaT4gLSA8aT4xPC9pPiA9IDxpPmRlZjwvaT4KCQkJPC9kaXY+CgkJPC9kaXY+CgkJPGRpdj4KCQkJUHJldmlvdXNseSwgdGhpcyBtYWNybyBjb3VsZCBub3QgYmUgdXNlZCByZWN1cnNpdmVseSBpbnNpZGUgPGI+Qk9PU1RfUFBfUkVQRUFUPC9iPi4mbmJzcDsKCQkJVGhpcyBsaW1pdGF0aW9uIG5vIGxvbmdlciBleGlzdHMsIGFzIHRoZSBsaWJyYXJ5IGNhbiBhdXRvbWF0aWNhbGx5IGRldGVjdCB0aGUgbmV4dCBhdmFpbGFibGUgcmVwZXRpdGlvbiBkZXB0aC4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlUaGlzIG1hY3JvIGlzIGRlcHJlY2F0ZWQuJm5ic3A7CgkJCUl0IG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiZuYnNwOwoJCQlVc2UgPGI+Qk9PU1RfUFBfRU5VTV9CSU5BUllfUEFSQU1TPC9iPiB3aXRoIDxiPkJPT1NUX1BQX0lOVEVSQ0VQVDwvYj4gaW5zdGVhZDoKCQkJPGRpdj4KCQkJCTxiPkJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNUzwvYj4oPGk+Y291bnQ8L2k+LCA8aT5wYXJhbTwvaT4sID0gPGk+ZGVmPC9pPiA8Yj5CT09TVF9QUF9JTlRFUkNFUFQ8L2I+KQoJCQk8L2Rpdj4KCQk8L2Rpdj4KCTxoND5TZWUgQWxzbzwvaDQ+CgkJPHVsPgoJCQk8bGk+PGEgaHJlZj0iZW51bV9iaW5hcnlfcGFyYW1zLmh0bWwiPkJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNUzwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0iaW50ZXJjZXB0Lmh0bWwiPkJPT1NUX1BQX0lOVEVSQ0VQVDwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0ibGltaXRfcmVwZWF0Lmh0bWwiPkJPT1NUX1BQX0xJTUlUX1JFUEVBVDwvYT48L2xpPgoJCTwvdWw+Cgk8aDQ+UmVxdWlyZW1lbnRzPC9oND4KCQk8ZGl2PgoJCQk8Yj5IZWFkZXI6PC9iPiAmbmJzcDs8YSBocmVmPSIuLi9oZWFkZXJzL3JlcGV0aXRpb24vZXB3YWQuaHRtbCI+Jmx0O2Jvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL2VudW1fcGFyYW1zX3dpdGhfYV9kZWZhdWx0LmhwcCZndDs8L2E+CgkJPC9kaXY+Cgk8aDQ+U2FtcGxlIENvZGU8L2g0Pgo8ZGl2PjxwcmU+CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL3JlcGV0aXRpb24vZXB3YWQuaHRtbCI+Ym9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZW51bV9wYXJhbXNfd2l0aF9hX2RlZmF1bHQuaHBwPC9hPiZndDsKCjxhIGhyZWY9ImVudW1fcGFyYW1zX3dpdGhfYV9kZWZhdWx0Lmh0bWwiPkJPT1NUX1BQX0VOVU1fUEFSQU1TX1dJVEhfQV9ERUZBVUxUPC9hPigzLCBjbGFzcyBULCBpbnQpCiAgIC8vIGV4cGFuZHMgdG8gVDAgPSBpbnQsIFQxID0gaW50LCBUMiA9IGludAoKPGEgaHJlZj0iZW51bV9iaW5hcnlfcGFyYW1zLmh0bWwiPkJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNUzwvYT4oMywgY2xhc3MgVCwgPSBpbnQgPGEgaHJlZj0iaW50ZXJjZXB0Lmh0bWwiPkJPT1NUX1BQX0lOVEVSQ0VQVDwvYT4pCiAgIC8vIGV4cGFuZHMgdG8gVDAgPSBpbnQsIFQxID0gaW50LCBUMiA9IGludAo8L3ByZT48L2Rpdj4KCTxociBzaXplPSIxIj4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwcHg7Ij4KCQk8aT6pIENvcHlyaWdodCA8YSBocmVmPSJodHRwOi8vd3d3LmhvdXNlbWFycXVlLmNvbSIgdGFyZ2V0PSJfdG9wIj5Ib3VzZW1hcnF1ZSBPeTwvYT4gMjAwMjwvaT4KCQk8L2JyPjxpPqkgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyPC9pPgoJPC9kaXY+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPHA+PHNtYWxsPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQoJCWFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgoJCWNvcHkgYXQgPGEgaHJlZj0KCQkiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9zbWFsbD48L3A+Cgk8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==