PCFkb2N0eXBlIGh0bWwgcHVibGljICItLy93M2MvL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvL2VuIj4KPGh0bWw+Cgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cjx0aXRsZT5SZWFkTWUgZm9yIElDVTRKPC90aXRsZT4KPCEtLQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKiAkU291cmNlOiAveHNybC9Oc3ZuL2ljdS9pY3U0ai9yZWFkbWUuaHRtbCx2ICQKKiAkRGF0ZTogMjAwMy8xMi8wNiAwMDoxOTozOCAkCiogJFJldmlzaW9uOiAxLjUyICQKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0tPgo8L2hlYWQ+Cgo8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzgwMDA4MCIgbGFuZz0iRU4tVVMiPgoKICAgIDxoMj5JbnRlcm5hdGlvbmFsIENvbXBvbmVudHMgZm9yIFVuaWNvZGUgZm9yIEphdmE8L2gyPgogICAgPGgzPlJlYWQgTWUgZm9yIElDVTRKIDIuODwvaDM+Cgo8aHIgc2l6ZT0iMiIgd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPgogICAgPHA+PGI+UmVsZWFzZSBEYXRlPC9iPjxicj4KICAgIE5vdmVtYmVyIDNyZCwgMjAwMzwvcD4KCjxwPkZvciB0aGUgbW9zdCByZWNlbnQKICAgICAgcmVsZWFzZSwgc2VlIHRoZSA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovZG93bmxvYWQvaW5kZXguaHRtbCI+CiAgICAgIElDVTRKIGRvd25sb2FkIHNpdGU8L2E+LgogICAgPC9QPgoKPGgzPjx1PkNvbnRlbnRzPC91PjwvaDM+Cgo8dWwgdHlwZT0iZGlzYyI+CiAgPGxpPjxhIGhyZWY9IiNpbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbiB0byBJQ1U0SiAoSW50ZXJuYXRpb25hbCBDb21wb25lbnRzIGZvciBVbmljb2RlIGZvciBKYXZhKTwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjbGljZW5zZSI+TGljZW5zZSBJbmZvcm1hdGlvbjwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjUGxhdGZvcm1EZXBlbmRlbmNpZXMiPlBsYXRmb3JtIERlcGVuZGVuY2llczwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjZG93bmxvYWQiPkhvdyB0byBEb3dubG9hZCBJQ1U0SjwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjV2hhdENvbnRhaW4iPlRoZSBTdHJ1Y3R1cmUgYW5kIENvbnRlbnRzIG9mIElDVTRKPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNBUEkiPldoZXJlIHRvIEdldCBEb2N1bWVudGF0aW9uPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNIb3dUb0luc3RhbGxKYXZhYyI+SG93IHRvIEluc3RhbGwgYW5kIEJ1aWxkPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNIb3dUb01vZHVsYXJpemUiPkhvdyB0byBtb2R1bGFyaXplIElDVTRKPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3UvZG9jcy9lY2xpcHNlX2hvd3RvL2VjbGlwc2VfaG93dG8uaHRtIj5Ib3cgdG8gY29uZmlndXJlIEVjbGlwc2UgZm9yIHdvcmtpbmcgd2l0aCBJQ1U0SjwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjdHJ5aW5nb3V0Ij5UcnlpbmcgT3V0IElDVTRKPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNyZXNvdXJjZXMiPklDVTRKIFJlc291cmNlIEluZm9ybWF0aW9uPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNXaGVyZVRvRmluZE1vcmUiPldoZXJlIHRvIEZpbmQgTW9yZSBJbmZvcm1hdGlvbjwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjU3VibWl0dGluZ0NvbW1lbnRzIj5TdWJtaXR0aW5nIENvbW1lbnRzLCBSZXF1ZXN0aW5nIEZlYXR1cmVzIGFuZCBSZXBvcnRpbmcKICAgIEJ1Z3M8L2E+PC9saT4KPC91bD4KCjxoMz48YSBOQU1FPSJpbnRyb2R1Y3Rpb24iPjwvYT48dT5JbnRyb2R1Y3Rpb24gdG8gSUNVNEogKEludGVybmF0aW9uYWwgQ29tcG9uZW50cyBmb3IgVW5pY29kZSBmb3IgSmF2YSk8L3U+PC9oMz4KCjxwPlRvZGF5J3MgZ2xvYmFsIG1hcmtldCBkZW1hbmRzIHByb2dyYW1zIHRoYXQgc3VwcG9ydCBhIHdpZGUgdmFyaWV0eQogICAgb2YgbGFuZ3VhZ2VzIGFuZCBuYXRpb25hbCBjb252ZW50aW9ucy4mbmJzcDsgQ3VzdG9tZXJzIHByZWZlciBzb2Z0d2FyZQogICAgYW5kIHdlYiBwYWdlcyB0YWlsb3JlZCB0byB0aGVpciBuZWVkcywgc3R1ZGllcyBjb25maXJtIHRoYXQKICAgIHRoaXMgbGVhZHMgdG8gaW5jcmVhc2VkIHNhbGVzLiZuYnNwOyAgSmF2YSBwcm92aWRlcyBhIHN0cm9uZwogICAgZm91bmRhdGlvbiBmb3IgZ2xvYmFsIHByb2dyYW1zLCBhbmQgSUJNIGFuZCB0aGUgSUNVNEogdGVhbSBwbGF5ZWQKICAgIGEga2V5IHJvbGUgaW4gcHJvdmlkaW5nIGdsb2JhbGl6YXRpb24gdGVjaG5vbG9neSB0byBTdW4gZm9yIHVzZSBpbgogICAgSmF2YS4gPC9wPgogICAgPHA+CiAgICBCdXQgSmF2YSBkb2VzIG5vdCB5ZXQgcHJvdmlkZSBhbGwgdGhlIGZlYXR1cmVzIHRoYXQgc29tZSBwcm9kdWN0cyByZXF1aXJlLiZuYnNwOyBJQ1U0SiBpcyBhbiBhZGQtb24gbGlicmFyeSB0aGF0IGV4dGVuZHMgSmF2YSdzIGdsb2JhbGl6YXRpb24gdGVjaG5vbG9neSBieSBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyB0b29sczoKICAgIDx1bD4KICAgIDxsaT4KICAgIFVuaWNvZGUgTm9ybWFsaXphdGlvbiCWIE5GQywgTkZELCBORktELCBORktDCiAgICAgICAgPGJsb2NrcXVvdGU+UHJvZHVjZXMgY2Fub25pY2FsIHRleHQgcmVwcmVzZW50YXRpb25zLCBuZWVkZWQgZm9yIFhNTCBhbmQgdGhlIG5ldC48L2Jsb2NrcXVvdGU+CiAgICA8bGk+CiAgICBJbnRlcm5hdGlvbmFsIENhbGVuZGFycyCWIEFyYWJpYywgQnVkZGhpc3QsIEhlYnJldywgYW5kIEphcGFuZXNlPGJyPgogICAgICAgIDxibG9ja3F1b3RlPlJlcXVpcmVkIGZvciBjb3JyZWN0IHByZXNlbnRhdGlvbiBvZiBkYXRlcyBpbiBzb21lIGNvdW50cmllcy48L2Jsb2NrcXVvdGU+CiAgICA8bGk+CiAgICBOdW1iZXIgRm9ybWF0IEVuaGFuY2VtZW50cyCWIFNjaWVudGlmaWMgTm90YXRpb24sIFNwZWxsZWQtb3V0IE51bWJlcnMKICAgICAgICAgICAgICA8YmxvY2txdW90ZT5FbmhhbmNlcyBzdGFuZGFyZCBKYXZhIG51bWJlciBmb3JtYXR0aW5nLiBUaGUgc3BlbGxlZC1vdXQgZm9ybWF0IGlzIHVzZWQKZm9yIGNoZWNrcyBhbmQgc2ltaWxhciBkb2N1bWVudHMuPC9ibG9ja3F1b3RlPgoKICAgIDxsaT5FbmhhbmNlZCB3b3JkLWJyZWFrIGRldGVjdGlvbiCWIFJ1bGUtYmFzZWQsIHN1cHBvcnRzIFRoYWkKICAgICAgICAgICAgICA8YmxvY2txdW90ZT5SZXF1aXJlZCBmb3IgY29ycmVjdCBzdXBwb3J0IG9mIFRoYWkuPC9ibG9ja3F1b3RlPgoKICAgIDxsaT5Vbmljb2RlIFRleHQgQ29tcHJlc3Npb24gliBTdGFuZGFyZCBjb21wcmVzc2lvbiBvZiBVbmljb2RlIHRleHQKICAgICAgICAgICAgICA8YmxvY2txdW90ZT5TdWl0YWJsZSBmb3IgbGFyZ2UgbnVtYmVycyBvZiBzbWFsbCBmaWVsZHMsIHdoZXJlIExaVyBhbmQgc2ltaWxhciBzY2hlbWVzCmRvIG5vdCBhcHBseS48L2Jsb2NrcXVvdGU+CiAgICA8bGk+Q29sbGF0aW9uIC0gUnVsZS1iYXNlZCwgdXAtdG8tZGF0ZSBVbmljb2RlIENvbGxhdGlvbiBBbGdvcml0aG0gKFVDQSkgc29ydGluZyBvcmRlcgogICAgICAgIDxibG9ja3F1b3RlPkZvciBmYXN0IG11bHRpbGluZ3VhbCBzdHJpbmcgY29tcGFyaXNvbjwvYmxvY2txdW90ZT4KICAgIDwvdWw+CkluIHNvbWUgY2FzZXMsIHRoZSBhYm92ZSBzdXBwb3J0IGhhcyBiZWVuIHJvbGxlZCBpbnRvIGEgbGF0ZXIgcmVsZWFzZSBvZgpKYXZhLiBGb3IgZXhhbXBsZSwgdGhlIFRoYWkgd29yZC1icmVhayBpcyBub3cgaW4gSmF2YSAxLjQuIEhvd2V2ZXIsIGlmIHlvdQphcmUgdXNpbmcgSmF2YSAxLjMsIHlvdSBjYW4gdXNlIHRoZSBJQ1U0SiBwYWNrYWdlIHVudGlsIHlvdSB1cGdyYWRlIHRvIDEuNC4KPC9wPgoKPGgzPjxhIG5hbWU9bGljZW5zZT48L2E+PHU+TGljZW5zZSBJbmZvcm1hdGlvbjwvdT48L2gzPgo8cD4KVGhlIElDVSBwcm9qZWN0cyAoSUNVNEMgYW5kIElDVTRKKSB1c2UgdGhlIFggbGljZW5zZS4mbmJzcDsgVGhlIFggbGljZW5zZSBpcyBhIDxiPm5vbi12aXJhbDwvYj4gYW5kIHJlY29tbWVuZGVkIGZyZWUgc29mdHdhcmUgbGljZW5zZSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgR05VIEdQTCBsaWNlbnNlLiZuYnNwOyBUaGlzIGJlY2FtZSBlZmZlY3RpdmUgd2l0aCByZWxlYXNlIDEuOC4xIG9mIElDVTRDIGFuZCByZWxlYXNlIDEuMy4xIG9mIElDVTRKIGluIG1pZC0yMDAxLiBBbGwgbmV3IElDVSByZWxlYXNlcyB3aWxsIGFkb3B0IHRoZSBYIGxpY2Vuc2U7IHByZXZpb3VzIElDVSByZWxlYXNlcyBjb250aW51ZSB0byB1dGlsaXplIHRoZSBJUEwgKElCTSBQdWJsaWMgTGljZW5zZSkuJm5ic3A7IFVzZXJzIG9mIHByZXZpb3VzIHJlbGVhc2VzIG9mIElDVSB3aG8gd2FudCB0byBhZG9wdCBuZXcgSUNVIHJlbGVhc2VzIHdpbGwgbmVlZCB0byBhY2NlcHQgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBYIGxpY2Vuc2UuCjwvcD4KPHA+ClRoZSBtYWluIGVmZmVjdCBvZiB0aGUgY2hhbmdlIGlzIHRvIHByb3ZpZGUgR1BMIGNvbXBhdGliaWxpdHkuJm5ic3A7IFRoZSBYIGxpY2Vuc2UgaXMgbGlzdGVkIGFzIEdQTCBjb21wYXRpYmxlLCBzZWUgdGhlIGdudSBwYWdlIGF0IDxhIGhyZWY9aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvbGljZW5zZS1saXN0Lmh0bWwjR1BMQ29tcGF0aWJsZUxpY2Vuc2VzPgpodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9saWNlbnNlLWxpc3QuaHRtbCNHUExDb21wYXRpYmxlTGljZW5zZXM8L2E+LiAgVGhpcyBtZWFucyB0aGF0IEdQTCBwcm9qZWN0cyBjYW4gbm93IHVzZSBJQ1UgY29kZSwgaXQgZG9lcyA8Yj5ub3Q8L2I+IG1lYW4gdGhhdCBwcm9qZWN0cyB1c2luZyBJQ1UgYmVjb21lIHN1YmplY3QgdG8gR1BMLgo8L3A+CjxwPgpUaGUgdGV4dCBvZiB0aGUgWCBsaWNlbnNlIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPWh0dHA6Ly93d3cueC5vcmcvdGVybXMuaHRtPmh0dHA6Ly93d3cueC5vcmcvdGVybXMuaHRtPC9hPi4gVGhlIElCTSB2ZXJzaW9uIGNvbnRhaW5zIHRoZSBlc3NlbnRpYWwgdGV4dCBvZiB0aGUgbGljZW5zZSwgb21pdHRpbmcgdGhlIFgtc3BlY2lmaWMgdHJhZGVtYXJrcyBhbmQgY29weXJpZ2h0IG5vdGljZXMuICBUaGUgZnVsbCBjb3B5IG9mIDxhIGhyZWY9bGljZW5zZS5odG1sPklDVSdzIGxpY2Vuc2U8L2E+IGlzIGluY2x1ZGVkIGluIHRoZSBkb3dubG9hZCBwYWNrYWdlLgo8L3A+CjxwPgpGb3IgbW9yZSBkZXRhaWxzIHBsZWFzZSBzZWUgdGhlIDxhIGhyZWY9aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdS9wcmVzcy5odG1sPnByZXNzIGFubm91bmNlbWVudDwvYT4gYW5kIHRoZSA8YSBocmVmPWh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3UvcHJvamVjdF9mYXEuaHRtbCNsaWNlbnNlPlByb2plY3QgRkFRPC9hPi4KPC9wPgoKPGgzPjxhIE5BTUU9IlBsYXRmb3JtRGVwZW5kZW5jaWVzIj48L2E+PHU+UGxhdGZvcm0gRGVwZW5kZW5jaWVzPC91PjwvaDM+CiAgICAgIDxQPgogICAgICBQYXJ0cyBvZiBJQ1U0SiBkZXBlbmQgb24gZnVuY3Rpb25hbGl0eSB0aGF0IGlzIG9ubHkgYXZhaWxhYmxlIGluIEpESyAxLjMKICAgICAgb3IgbGF0ZXIsIGFsdGhvdWdoIHNvbWUgY29tcG9uZW50cyB3b3JrIHVuZGVyIGVhcmxpZXIgSlZNcy4gQWxsCiAgICAgIGNvbXBvbmVudHMgc2hvdWxkIGJlIGNvbXBpbGVkIHVzaW5nIGEgSmF2YTIgY29tcGlsZXIsIGFzIGV2ZW4gY29tcG9uZW50cwogICAgICB0aGF0IHJ1biB1bmRlciBlYXJsaWVyIEpWTXMgY2FuIHJlcXVpcmUgbGFuZ3VhZ2UgZmVhdHVyZXMgdGhhdCBhcmUgb25seQogICAgICBwcmVzZW50IGluIEphdmEyLiBDdXJyZW50bHkgMS4xLnggYW5kIDEuMi54IEpWTXMgYXJlIHVuc3VwcG9ydGVkIGFuZCB1bnRlc3RlZCwgYW5kIHlvdSB1c2UKICAgICAgdGhlIGNvbXBvbmVudHMgb24gdGhlc2UgSlZNcyBhdCB5b3VyIG93biByaXNrLjwvUD4KICAgICAgPHA+CiAgICAgIFRoZSByZWZlcmVuY2UgcGxhdGZvcm1zIHdoaWNoIHdlIHN1cHBvcnQgYW5kIHRlc3QgSUNVNEogb24gYXJlOjx1bD4KPGxpPiBXaW4yMDAwLCBJQk0gSkRLIDEuMy4xPC9saT4KPGxpPiBTb2xhcmlzIDIuNywgU3VuIEpESyAxLjM8L2xpPgo8bGk+IEFJWCA1LjEsIElCTSBKREsgMS4zLjE8L2xpPgo8L3VsPgo8L3A+CjxwPlBsZWFzZSB1c2UgdGhlIG1vc3QgcmVjZW50IHVwZGF0ZXMgb2YgdGhlIHN1cHBvcnRlZCBKREsgdmVyc2lvbnMuPC9wPgoKPHA+QWRkaXRpb25hbGx5LCB3ZSBoYXZlIGJ1aWx0IGFuZCB0ZXN0ZWQgSUNVNEogb24gdGhlIGZvbGxvd2luZyA8Yj51bnN1cHBvcnRlZDwvYj4gcGxhdGZvcm1zOgo8dWw+CjxsaT4gV2luOTgsIFdpbk5ULCBXaW5YUCAvIElCTSBKREsgMS4zLjEsIDEuNC4xLCBTdW4gSkRLIDEuMy4xLCAxLjQsIDEuNC4xPC9saT4KPGxpPiBXaW4yMDAwIC8gSUJNIEpESyAxLjMuMSwgMS40LjEsIFN1biBKREsgMS4zLjEsIDEuNCwgMS40LjE8L2xpPgo8bGk+IFNvbGFyaXMgMi42ICwgU29sYXJpcyAyLjggLyBTdW4gSkRLIDEuMy4xLCAxLjQsIDEuNC4xPC9saT4KPGxpPiBTb2xhcmlzIDIuNyAvIFN1biBKREsgMS4zLjEsIDEuNCwgMS40LjE8L2xpPgo8bGk+IEFJWCA1LjEsIElCTSBKREsgMS4zLjEsIDEuNC4xPC9saT4KPC91bD4KCjxoMz48YSBOQU1FPSJvYnRhaW5pbmciPjwvYT48dT5Ib3cgdG8gRG93bmxvYWQgSUNVNEo8L3U+PC9oMz4KCjxwPlRoZXJlIGFyZSB0d28gd2F5cyB0byBkb3dubG9hZCB0aGUgSUNVNEogcmVsZWFzZXMuCgo8dWwgdHlwZT0iZGlzYyI+CiAgPGxpPjxiPk9mZmljaWFsIFJlbGVhc2UgU25hcHNob3Q6PC9iPjxicj4KCiAgICBJZiB5b3Ugd2FudCB0byB1c2UgSUNVNEogKGFzIG9wcG9zZWQgdG8gZGV2ZWxvcGluZyBpdCksIHlvdXIgYmVzdAogICAgYmV0IGlzIHRvIGRvd25sb2FkIGFuIG9mZmljaWFsLCBwYWNrYWdlZCB2ZXJzaW9uIG9mIHRoZSBJQ1U0SgogICAgc291cmNlIGNvZGUuJm5ic3A7IFRoZXNlIHZlcnNpb25zIGFyZSB0ZXN0ZWQgbW9yZSB0aG9yb3VnaGx5IHRoYW4KICAgIGRheS10by1kYXkgZGV2ZWxvcG1lbnQgYnVpbGRzLCBhbmQgdGhleSBhcmUgcGFja2FnZWQgaW4gemlwIGZpbGVzCiAgICBmb3IgY29udmVuaWVudCBkb3dubG9hZC4mbmJzcDsgVGhlc2UgcGFja2FnZWQgZmlsZXMgY2FuIGJlIGZvdW5kCiAgICBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovZG93bmxvYWQvaW5kZXguaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdTRqL2Rvd25sb2FkL2luZGV4Lmh0bWw8L2E+LiZuYnNwOyBJZiBhIHBhY2thZ2VkIHNuYXBzaG90IGlzIG5hbWVkIDxiPklDVTRKWFhYWFhYLnppcDwvYj4sIHdoZXJlIFhYWFhYWCBpcwogICAgdGhlIHJlbGVhc2UgdmVyc2lvbiBudW1iZXIuJm5ic3A7IFBsZWFzZSB1bnppcCB0aGlzIGZpbGUuJm5ic3A7IEl0CiAgICB3aWxsIHJlY29uc3RydWN0IHRoZSBzb3VyY2UgZGlyZWN0b3J5LiA8L2xpPgo8L3VsPgoKPHVsIHR5cGU9ImRpc2MiPgogIDxsaT48Yj5DVlMgU291cmNlIFJlcG9zaXRvcnk6PC9iPjxicj4KICAgIElmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBkZXZlbG9waW5nIGZlYXR1cmVzLCBwYXRjaGVzLCBvciBidWcgZml4ZXMgZm9yIElDVTRKLCB5b3Ugc2hvdWxkCiAgICBwcm9iYWJseSBiZSB3b3JraW5nIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBJQ1U0SiBzb3VyY2UgY29kZS4gWW91IHdpbGwgbmVlZCB0bwogICAgY2hlY2sgdGhlIGNvZGUgb3V0IG9mIG91ciBDVlMgcmVwb3NpdG9yeSB0byBlbnN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbgogICAgb2YgYWxsIG9mIHRoZSBmaWxlcy4gVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBkbyB0aGlzOiA8YnI+CiAgICA8dWwgdHlwZT0iY2lyY2xlIj4KICAgICAgPGxpPldlYkNWUzo8YnI+CiAgICAgICAgSWYgeW91IHdhbnQgdG8gYnJvd3NlIHRoZSBjb2RlIGFuZCBvbmx5IG1ha2Ugb2NjYXNpb25hbCBkb3dubG9hZHMsIHlvdSBtYXkgd2FudCB0byB1c2UKICAgICAgICBXZWJDVlMuIEl0IHByb3ZpZGVzIGEgY29udmVuaWVudCwgd2ViLWJhc2VkIGludGVyZmFjZSBmb3IgYnJvd3NpbmcgYW5kIGRvd25sb2FkaW5nIHRoZQogICAgICAgIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBJQ1U0SiBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi4gWW91IGNhbiBhbHNvIHZpZXcgZWFjaCBmaWxlJ3MKICAgICAgICByZXZpc2lvbiBoaXN0b3J5LCBkaXNwbGF5IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGluZGl2aWR1YWwgcmV2aXNpb25zLCBkZXRlcm1pbmUgd2hpY2gKICAgICAgICByZXZpc2lvbnMgd2VyZSBwYXJ0IG9mIHdoaWNoIG9mZmljaWFsIHJlbGVhc2UsIGFuZCBzbyBvbi4gPGJyPgogICAgICA8L2xpPgogICAgICA8bGk+V2luQ1ZTOjxicj4KICAgICAgICBJZiB5b3Ugd2lsbCBiZSBkb2luZyBzZXJpb3VzIHdvcmsgb24gSUNVNEosIHlvdSBzaG91bGQgcHJvYmFibHkgaW5zdGFsbCBhIENWUyBjbGllbnQgb24KICAgICAgICB5b3VyIG93biBtYWNoaW5lIHNvIHRoYXQgeW91IGNhbiBkbyBiYXRjaCBvcGVyYXRpb25zIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgV2ViQ1ZTCiAgICAgICAgaW50ZXJmYWNlLiBPbiBXaW5kb3dzLCB3ZSBzdWdnZXN0IHRoZSBXaW5DVlMgY2xpZW50LiBUbyBkb3dubG9hZCBJQ1U0SiB2aWEgV2luQ1ZTOiA8b2w+CiAgICAgICAgICA8bGk+SW5zdGFsbCB0aGUgV2luQ1ZTIGNsaWVudCwgd2hpY2ggeW91IGNhbiBkb3dubG9hZCBmcm9tIHRoZSA8YQogICAgICAgICAgICBocmVmPSJodHRwOi8vd3d3LndpbmN2cy5vcmciPmh0dHA6Ly93d3cud2luY3ZzLm9yZzwvYT4uPC9saT4KICAgICAgICAgIDxsaT5TZWxlY3QgPHN0cm9uZz5QcmVmZXJlbmNlczwvc3Ryb25nPiBmcm9tIHRoZSA8c3Ryb25nPkFkbWluPC9zdHJvbmc+IG1lbnUuPG9sIHR5cGU9ImEiPgogICAgICAgICAgICAgIDxsaT5PbiB0aGUgPHN0cm9uZz5HZW5lcmFsPC9zdHJvbmc+IHRhYiBwYW5lbDogU2V0IHlvdXIgPHN0cm9uZz5DVlNST09UPC9zdHJvbmc+IHRvICZxdW90OzxzdHJvbmc+OnBzZXJ2ZXI6YW5vbmN2c0Bvc3Muc29mdHdhcmUuaWJtLmNvbTovdXNyL2N2cy9pY3U0ajwvc3Ryb25nPiZxdW90Oy48YnI+CiAgICAgICAgICAgICAgICBMZWF2ZSBvdGhlciBvcHRpb25zIG9uIHRoaXMgcGFnZSBhdCB0aGVpciBkZWZhdWx0LjwvbGk+CiAgICAgICAgICAgICAgPGxpPk9uIHRoZSA8c3Ryb25nPlBvcnRzPC9zdHJvbmc+IHRhYiBwYW5lbDogQ2hlY2sgdGhlIDxzdHJvbmc+cHNlcnZlcjwvc3Ryb25nPiBjaGVja2JveCBhbmQKICAgICAgICAgICAgICAgIGVudGVyIHBvcnQgPHN0cm9uZz4yNDAxPC9zdHJvbmc+LjwvbGk+CiAgICAgICAgICAgIDwvb2w+CiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPkNsaWNrIG9uIHRoZSBMb2dpbiBtZW51IGJ1dHRvbiAoPHN0cm9uZz5BZG1pbjwvc3Ryb25nPiBtZW51KS4gRW50ZXIgaW4gICZxdW90OzxzdHJvbmc+YW5vbmN2czwvc3Ryb25nPiZxdW90OyB3aGVuIHJlcXVlc3RlZC48L2xpPgogICAgICAgICAgPGxpPlRvIGV4dHJhY3QgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgSUNVNEosIHNlbGVjdCA8c3Ryb25nPkNoZWNrb3V0IG1vZHVsZTwvc3Ryb25nPgogICAgICAgICAgICBmcm9tIHRoZSA8c3Ryb25nPkNyZWF0ZTwvc3Ryb25nPiBtZW51LiBTcGVjaWZ5ICZxdW90OzxzdHJvbmc+aWN1NGo8L3N0cm9uZz4mcXVvdDsgZm9yIHRoZQogICAgICAgICAgICBtb2R1bGUgbmFtZS4gVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjb3B5IG9mIHRoZSB3b3Jrc3BhY2Ugb24geW91ciBsb2NhbCBoYXJkIGRyaXZlLjwvbGk+CiAgICAgICAgICA8bGk+SW4gdGhlIGZ1dHVyZSwgeW91IGNhbiBkb3dubG9hZCB1cGRhdGVkIGZpbGVzIGZyb20gdGhlIHJlcG9zaXRvcnkgdG8geW91ciBoYXJkIGRyaXZlCiAgICAgICAgICAgIHVzaW5nIHRoZSA8c3Ryb25nPlVwZGF0ZSBzZWxlY3Rpb248L3N0cm9uZz4gaXRlbSBpbiB0aGUgPHN0cm9uZz5Nb2RpZnk8L3N0cm9uZz4gbWVudS48YnI+CiAgICAgICAgICA8L2xpPgogICAgICAgIDwvb2w+CiAgICAgIDwvbGk+CiAgICAgIDxsaT5DVlMgY29tbWFuZCBsaW5lOjxicj4KICAgICAgICBZb3UgY2FuIGFsc28gY2hlY2sgb3V0IHRoZSByZXBvc2l0b3J5IGFub255bW91c2x5IG9uIFVOSVggdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kcywKICAgICAgICBhZnRlciBmaXJzdCBzZXR0aW5nIHlvdXIgQ1ZTUk9PVCB0byBwb2ludCB0byB0aGUgSUNVNEogcmVwb3NpdG9yeTogPHByZT48Y29kZT5leHBvcnQgQ1ZTUk9PVD06cHNlcnZlcjphbm9uY3ZzQG9zcy5zb2Z0d2FyZS5pYm0uY29tOi91c3IvY3ZzL2ljdTRqCmN2cyBsb2dpbiBDVlMgcGFzc3dvcmQ6IGFub25jdnMKY3ZzIGNoZWNrb3V0IGljdTRqCmN2cyBsb2dvdXQ8L2NvZGU+PC9wcmU+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CjwvdWw+Cgo8cD5Gb3IgbW9yZSBkZXRhaWxzIG9uIGhvdyB0byBkb3dubG9hZCBJQ1U0SiBkaXJlY3RseSBmcm9tIHRoZSB3ZWIgc2l0ZSwgcGxlYXNlIGFsc28gc2VlIDxhCmhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb3dubG9hZC9pbmRleC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovZG93bmxvYWQvaW5kZXguaHRtbDwvYT4KPC9wPgoKPGgzPjxhIE5BTUU9IldoYXRDb250YWluIj48L2E+PHU+VGhlIFN0cnVjdHVyZSBhbmQgQ29udGVudHMgb2YgSUNVNEo8L3U+PC9oMz4KCjxwPkJlbG93LCA8Yj4kUm9vdDwvYj4gaXMgdGhlIHBsYWNlbWVudCBvZiB0aGUgaWN1IGRpcmVjdG9yeSBpbiB5b3VyIGZpbGUgc3lzdGVtLCBsaWtlCiZxdW90O2RyaXZlOlwuLi5caWN1NGomcXVvdDsgaW4geW91ciBlbnZpcm9ubWVudC4gJnF1b3Q7ZHJpdmU6XC4uLiZxdW90OyBzdGFuZHMgZm9yIGFueQpkcml2ZSBhbmQgYW55IGRpcmVjdG9yeSBvbiB0aGF0IGRyaXZlIHRoYXQgeW91IGNob3NlIHRvIGluc3RhbGwgaWN1NGogaW50by4gPC9wPgoKPHA+PGI+SW5mb3JtYXRpb24gYW5kIGJ1aWxkIGZpbGVzOjwvYj48L3A+Cgo8dGFibGUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyI+CiAgPHRyPgogICAgPHRkPnJlYWRtZS5odG1sPGJyPgogICAgICAgICh0aGlzIGZpbGUpPC90ZD4KICAgIDx0ZD5BIGRlc2NyaXB0aW9uIG9mIElDVTRKIChJbnRlcm5hdGlvbmFsIENvbXBvbmVudHMgZm9yIFVuaWNvZGUgZm9yIEphdmEpPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5yZWxlYXNlbm90ZXMuaHRtbAogICAgPHRkPkEgZGVzY3JpcHRpb24gb2YgZmVhdHVyZXMgYW5kIGNoYW5nZXMgaW4gdGhpcyBhbmQgcHJpb3IgcmVsZWFzZXMgb2YgSUNVNEo8L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPmxpY2Vuc2UuaHRtbDwvdGQ+CiAgICA8dGQ+VGhlIFggbGljZW5zZSwgdXNlZCBieSBJQ1U0SjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+YnVpbGQuYmF0PC90ZD4KICAgIDx0ZD5BIGNvbnZlbmllbmNlIGJhdCBmaWxlIGZvciBidWlsZGluZyBJQ1U0SiB3aXRoIEFudCBvbiBXaW5kb3dzPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5idWlsZC5zaDwvdGQ+CiAgICA8dGQ+QSBjb252ZW5pZW5jZSBzaCBmaWxlIGZvciBidWlsZGluZyBJQ1U0SiB3aXRoIEFudCBvbiBVbml4PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5idWlsZC54bWw8L3RkPgogICAgPHRkPkFudCBidWlsZCBmaWxlLiBTZWUgPGEgaHJlZj0iI0hvd1RvSW5zdGFsbEphdmFjIj5Ib3cgdG8gSW5zdGFsbCBhbmQgQnVpbGQ8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uPC90ZD4KICA8L3RyPgo8L3RhYmxlPgoKPHA+PGI+VGhlIHNvdXJjZSBkaXJlY3RvcmllcyBtaXJyb3IgdGhlIHBhY2thZ2Ugc3RydWN0dXJlIG9mIHRoZSBjb2RlLjwvYj48YnI+PGZvbnQgY29sb3I9InJlZCI+Q29yZTwvZm9udD4gcGFja2FnZXMgYmVjb21lIHBhcnQgb2YgdGhlIElDVTRKIGphciBmaWxlLjxicj48Zm9udCBjb2xvcj0icmVkIj5BUEk8L2ZvbnQ+IHBhY2thZ2VzIGNvbnRhaW4gY2xhc3NlcyB3aXRoIHN1cHBvcnRlZCBBUEkuIDxicj48Zm9udCBjb2xvcj0icmVkIj5SaWNoVGV4dDwvZm9udD4gY2xhc3NlcyBhcmUgQ29yZSBhbmQgQVBJLCBidXQgY2FuIGJlIHJlbW92ZWQgZnJvbSBpY3U0ai5qYXIsIGFuZCBjYW4gYmUgYnVpbHQgaW50byB0aGVpciBvd24gamFyLjwvcD4KCjx0YWJsZSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBXSURUSD0iNjIzIj4KICA8dHI+CiAgICA8dGQ+JFJvb3Qvc3JjL2NvbS9pYm0vaWN1L2Rldjxicj48Zm9udCBjb2xvcj0icmVkIj5Ob24tQ29yZSwgTm9uLUFQSTwvZm9udD48L3RkPgogICAgPHRkPlBhY2thZ2VzIHVzZWQgZm9yIGludGVybmFsIGRldmVsb3BtZW50OgogICAgPHVsPgogICAgPGxpPkRhdGE6IGRhdGEgdXNlZCBieSB0ZXN0cyBhbmQgaW4gYnVpbGRpbmcgSUNVPC9saT4KICAgIDxsaT5EZW1vczogQ2FsZW5kYXIsIEhvbGlkYXksIEJyZWFrIEl0ZXJhdG9yLCBSdWxlLWJhc2VkIE51bWJlciBGb3JtYXQsIFRyYW5zZm9ybWF0aW9uczxicj4oU2VlIDxhIGhyZWY9IiN0cnlpbmdvdXQiPmJlbG93PC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGVtb3MuKTwvbGk+CiAgICA8bGk+VGVzdHM6IEFQSSBhbmQgY292ZXJhZ2UgdGVzdHMgb2YgYWxsIGZ1bmN0aW9uYWxpdHkuPGJyPkZvciBpbmZvcm1hdGlvbiBhYm91dCBydW5uaW5nIHRoZSB0ZXN0cywgc2VlICRSb290L3NyYy9jb20vaWJtL2ljdS9kZXYvdGVzdC9UZXN0QWxsLmphdmEuPC9saT4KICAgIDxsaT5Ub29sczogdG9vbHMgdXNlZCB0byBidWlsZCBkYXRhIHRhYmxlcywgZXRjLjwvbGk+PC91bD48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPiRSb290L3NyYy9jb20vaWJtL2ljdS9pbXBsPGJyPjxmb250IGNvbG9yPSJyZWQiPkNvcmUsIE5vbi1BUEk8L2ZvbnQ+PC90ZD4KICAgIDx0ZD5UaGVzZSBhcmUgdXRpbGl0eSBjbGFzc2VzIHVzZWQgZnJvbSBkaWZmZXJlbnQgSUNVNEogY29yZSBwYWNrYWdlcy48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPiRSb290L3NyYy9jb20vaWJtL2ljdS9sYW5nPGJyPjxmb250IGNvbG9yPSJyZWQiPkNvcmUsIEFQSTwvZm9udD48L3RkPgogICAgPHRkPkNoYXJhY3RlciBwcm9wZXJ0aWVzIHBhY2thZ2UuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD4kUm9vdC9zcmMvY29tL2libS9pY3UvbWF0aDxicj48Zm9udCBjb2xvcj0icmVkIj5Db3JlLCBBUEk8L2ZvbnQ+PC90ZD4KICAgIDx0ZD5BZGRpdGlvbmFsIG1hdGggY2xhc3Nlcy48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPiRSb290L3NyYy9jb20vaWJtL2ljdS90ZXh0PGJyPjxmb250IGNvbG9yPSJyZWQiPkNvcmUsIEFQSTwvZm9udD48L3RkPgogICAgPHRkPkFkZGl0aW9uYWwgdGV4dCBjbGFzc2VzLiAgVGhlc2UgYWRkIHRvLCBhbmQgaW4gc29tZSBjYXNlcyByZXBsYWNlLCByZWxhdGVkIGNvcmUgSmF2YSBjbGFzc2VzOgogICAgICA8dWw+CiAgICAgIDxsaT5BcmFiaWMgc2hhcGluZwogICAgICA8bGk+QnJlYWsgaXRlcmF0aW9uCiAgICAgIDxsaT5EYXRlIGZvcm1hdHRpbmcKICAgICAgPGxpPk51bWJlciBmb3JtYXR0aW5nCiAgICAgIDxsaT5UcmFuc2xpdGVyYXRpb24KICAgICAgPGxpPk5vcm1hbGl6YXRpb24KICAgICAgPGxpPlN0cmluZyBtYW5pcHVsYXRpb24KICAgICAgPGxpPkNvbGxhdGlvbgogICAgICA8bGk+U3RyaW5nIHNlYXJjaAogICAgICA8bGk+VW5pY29kZSBjb21wcmVzc2lvbgogICAgICA8bGk+VW5pY29kZSBzZXRzCiAgICA8L3VsPgogICAgPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD4kUm9vdC9zcmMvY29tL2libS9pY3UvdXRpbDxicj48Zm9udCBjb2xvcj0icmVkIj5Db3JlLCBBUEk8L2ZvbnQ+PC90ZD4KICAgIDx0ZD5BZGRpdGlvbmFsIHV0aWxpdHkgY2xhc3NlczoKICAgIDx1bD4KICAgIDxsaT5DYWxlbmRhcnMgLSBHcmVnb3JpYW4sIEJ1ZGRoaXN0LCBIZWJyZXcsIElzbGFtaWMsIEphcGFuZXNlCiAgICA8bGk+SG9saWRheTwvbGk+CiAgICA8bGk+VGltZVpvbmU8L2xpPgogICAgPGxpPlZlcnNpb25JbmZvPC9saT4KICAgIDxsaT5JdGVyYXRpb248L2xpPgogICAgPC91bD4KICAgIDwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+JFJvb3Qvc3JjL2NvbS9pYm0vcmljaHRleHQ8YnI+PGZvbnQgY29sb3I9InJlZCI+UmljaFRleHQ8L2ZvbnQ+PC90ZD4KICAgIDx0ZD5TdHlsZWQgdGV4dCBlZGl0aW5nCiAgICBwYWNrYWdlLiBUaGlzIGluY2x1ZGVzIGRlbW9zLCB0ZXN0cywgYW5kIEdVSXMgZm9yIGVkaXRpbmcgYW5kCiAgICBkaXNwbGF5aW5nIHN0eWxlZCB0ZXh0LiAgVGhlIHJpY2h0ZXh0IHBhY2thZ2UgcHJvdmlkZXMgYQogICAgc2Nyb2xsYWJsZSBkaXNwbGF5LCB0eXBpbmcsIGFycm93LWtleSBzdXBwb3J0LCB0YWJzLCBhbGlnbm1lbnQgYW5kCiAgICBqdXN0aWZpY2F0aW9uLCB3b3JkLSBhbmQgc2VudGVuY2Utc2VsZWN0aW9uIChieSBkb3VibGUtY2xpY2tpbmcKICAgIGFuZCB0cmlwbGUtY2xpY2tpbmcsIHJlc3BlY3RpdmVseSksIHRleHQgc3R5bGVzLCBjbGlwYm9hcmQKICAgIG9wZXJhdGlvbnMgKGN1dCwgY29weSBhbmQgcGFzdGUpIGFuZCBhIGxvZyBvZiBjaGFuZ2VzIGZvcgogICAgdW5kby1yZWRvLiAgUmljaHRleHQgdXNlcyBKYXZhJ3MgVGV4dExheW91dCBhbmQgY29tcGxleAogICAgdGV4dCBzdXBwb3J0IChwcm92aWRlZCB0byBTdW4gYnkgdGhlIElDVTRKIHRlYW0pLjwvdGQ+CiAgPC90cj4KPC90YWJsZT4KCjxwPjxiPkJ1aWxkaW5nIElDVTRKIGNyZWF0ZXMgYW5kIHBvcHVsYXRlcyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzOjwvYj4gPC9wPgoKPHRhYmxlIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiPgogIDx0cj4KICAgIDx0ZD4kUm9vdC9jbGFzc2VzPC90ZD4KICAgIDx0ZD5jb250YWlucyBhbGwgY2xhc3MgZmlsZXM8L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPiRSb290L2RvYzwvdGQ+CiAgICA8dGQ+Y29udGFpbnMgSmF2YURvYyBmb3IgYWxsIHBhY2thZ2VzPC90ZD4KICA8L3RyPgo8L3RhYmxlPgoKPHA+PGI+RGF0YSBvcmdhbml6YXRpb246PC9iPiA8L3A+Cgo8cD5JQ1U0SiBkYXRhIGlzIHN0b3JlZCBpbiB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKCjx0YWJsZSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBXSURUSD0iNjIzIj4KICA8dHI+CiAgICA8dGQ+PGNvZGU+Y29tLmlibS5pY3UuaW1wbC5kYXRhPC9jb2RlPjwvdGQ+CiAgICA8dGQ+SG9sZHMgZGF0YSB1c2VkIGJ5IHRoZSBJQ1U0SiBjb3JlIHBhY2thZ2VzICg8Y29kZT5jb20uaWJtLmljdS5sYW5nPC9jb2RlPiwgPGNvZGU+Y29tLmlibS5pY3UudGV4dDwvY29kZT4sIDxjb2RlPmNvbS5pYm0uaWN1LnV0aWw8L2NvZGU+LCA8Y29kZT5jb20uaWJtLmljdS5tYXRoPC9jb2RlPiBhbmQgPGNvZGU+Y29tLmlibS5pY3UudGV4dDwvY29kZT4pLiBJbiBwYXJ0aWN1bGFyLCBhbGwgcmVzb3VyY2UgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGhlcmUuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD48Y29kZT5jb20uaWJtLmljdS5kZXYuZGF0YTwvY29kZT48L3RkPgogICAgPHRkPkhvbGRzIGRhdGEgdGhhdCBpcyBub3QgcGFydCBvZiBJQ1U0SiBjb3JlLCBidXQgcmF0aGVyIHBhcnQgb2YgYSB0ZXN0LCBzYW1wbGUsIG9yIGRlbW8uPC90ZD4KICA8L3RyPgo8L3RhYmxlPgoKPGgzPjx1PjxhIG5hbWU9IkFQSSI+PC9hPldoZXJlIHRvIGdldCBEb2N1bWVudGF0aW9uPC91PjwvaDM+Cgo8cD5UaGUgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdS91c2VyZ3VpZGUvIj5JQ1UgdXNlcidzIGd1aWRlPC9hPiBjb250YWlucyBsb3RzIG9mIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgSUNVLCBpbiBpdHMgQywgQysrLCBhbmQgSmF2YSBpbmNhcm5hdGlvbnMuPC9wPgoKPHA+VGhlIGNvbXBsZXRlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBJQ1U0SiAoamF2YWRvYykgaXMgYXZhaWxhYmxlIG9uIHRoZSBJQ1U0SiB3ZWIgc2l0ZSwgYW5kIGNhbiBiZSBidWlsdCBmcm9tIHRoZSBzb3VyY2VzOgoKPHVsPgogIDxsaT48YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovZG9jL2luZGV4Lmh0bWwiPkluZGV4IHRvIGFsbCBJQ1U0SiBBUEk8L2E+PC9saT4KICA8bGk+SW50ZXJuYXRpb25hbCBDYWxlbmRhcnMgJiMxNTA7IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb2MvY29tL2libS9pY3UvdXRpbC9Jc2xhbWljQ2FsZW5kYXIuaHRtbCI+SXNsYW1pYzwvYT4sCiAgICA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovZG9jL2NvbS9pYm0vaWN1L3V0aWwvQnVkZGhpc3RDYWxlbmRhci5odG1sIj5CdWRkaGlzdDwvYT4sIDxhCiAgICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovZG9jL2NvbS9pYm0vaWN1L3V0aWwvSGVicmV3Q2FsZW5kYXIuaHRtbCI+SGVicmV3PC9hPiwgPGEKICAgIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb2MvY29tL2libS9pY3UvdXRpbC9KYXBhbmVzZUNhbGVuZGFyLmh0bWwiPkphcGFuZXNlPC9hPi48L2xpPgogIDxsaT48YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovZG9jL2NvbS9pYm0vaWN1L3RleHQvTm9ybWFsaXplci5odG1sIj5Vbmljb2RlIE5vcm1hbGl6YXRpb248L2E+ICYjMTUwOwogICAgQ2Fub25pY2FsIHRleHQgcmVwcmVzZW50YXRpb24gZm9yIFczQy48L2xpPgogIDxsaT48YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovZG9jL2NvbS9pYm0vaWN1L3RleHQvTnVtYmVyRm9ybWF0Lmh0bWwiPk51bWJlciBGb3JtYXQgRW5oYW5jZW1lbnRzPC9hPiAmIzE1MDsKICAgIFNjaWVudGlmaWMgTm90YXRpb24sIFNwZWxsZWQgb3V0LjwvbGk+CiAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb2MvY29tL2libS9pY3UvdGV4dC9CcmVha0l0ZXJhdG9yLmh0bWwiPkVuaGFuY2VkIHdvcmQtYnJlYWsgZGV0ZWN0aW9uPC9hPgogICAgJiMxNTA7IFJ1bGUtYmFzZWQsIHN1cHBvcnRzIFRoYWk8L2xpPgo8bGk+PGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2ljdTRqL2RvYy9jb20vaWJtL2ljdS90ZXh0L1RyYW5zbGl0ZXJhdG9yLmh0bWwiPlRyYW5zbGl0ZXJhdGlvbjwvYT4gJiMxNTA7IEEgZ2VuZXJhbCBmcmFtZXdvcmsgZm9yIG9udmVydGluZyB0ZXh0IGZyb20gb25lIGZvcm1hdCB0byBhbm90aGVyLCBlLmcuIEN5cmlsbGljIHRvIExhdGluLCBvciBIZXggdG8gVW5pY29kZS4KICA8bGk+VW5pY29kZSBUZXh0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb2MvY29tL2libS9pY3UvdGV4dC9Vbmljb2RlQ29tcHJlc3Nvci5odG1sIj5Db21wcmVzc2lvbjwvYT4gJmFtcDsKICAgIDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb2MvY29tL2libS9pY3UvdGV4dC9Vbmljb2RlRGVjb21wcmVzc29yLmh0bWwiPkRlY29tcHJlc3Npb248L2E+ICYjMTUwOyAyOjEKICAgIGNvbXByZXNzaW9uIG9uIEVuZ2xpc2ggVW5pY29kZSB0ZXh0LjwvbGk+CiAgPGxpPkNvbGxhdGlvbiAtIDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9kb2MvY29tL2libS9pY3UvdGV4dC9SdWxlQmFzZWRDb2xsYXRvci5odG1sIj5SdWxlLWJhc2VkIHNvcnRpbmc8L2E+LCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovZG9jL2NvbS9pYm0vaWN1L3RleHQvU3RyaW5nU2VhcmNoLmh0bWwiPkVmZmljaWVudCBtdWx0aS1saW5ndWFsIHNlYXJjaGluZzwvYT4gPC9saT4KPC91bD4KCjxoMz48YSBOQU1FPSJIb3dUb0luc3RhbGxKYXZhYyI+PC9hPjx1PkhvdyB0byBJbnN0YWxsIGFuZCBCdWlsZDwvdT48L2gzPgoKPHA+VG8gaW5zdGFsbCBJQ1U0Siwgc2ltcGx5IHBsYWNlIHRoZSBwcmVidWlsdCBqYXIgZmlsZSA8c3Ryb25nPmljdTRqLmphcjwvc3Ryb25nPiBvbiB5b3VyCkphdmEgQ0xBU1NQQVRILiZuYnNwOyBObyBvdGhlciBmaWxlcyBhcmUgbmVlZGVkLjwvcD4KCjxwPlRvIGJ1aWxkIElDVTRKLCB5b3Ugd2lsbCBuZWVkIGEgSmF2YTIgSkRLIGFuZCB0aGUgQW50IGJ1aWxkIHN5c3RlbS4KV2Ugc3Ryb25nbHkgcmVjb21tZW5kIHVzaW5nIHRoZSBBbnQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIElDVTRKOjwvcD4KCjx1bD4KICA8bGk+SXQncyByZWNvbW1lbmRlZCB0byBpbnN0YWxsIGJvdGggdGhlIEpESyBhbmQgQW50IHNvbWV3aGVyZSA8ZW0+b3V0c2lkZTwvZW0+IHRoZSBJQ1U0SgogICAgZGlyZWN0b3J5LiBGb3IgZXhhbXBsZSwgb24gTGludXggeW91IG1pZ2h0IGluc3RhbGwgdGhlc2UKICAgIGluIC91c3IvbG9jYWwuPC9saT4KICA8bGk+SW5zdGFsbCBhIHJlY2VudCBKREssIHZlcnNpb24gMS4zLnggb3IgMS40Lnggd2lsbCB3b3JrLjwvbGk+CiAgPGxpPjxwPk5leHQgaW5zdGFsbCB0aGUgPGEgaHJlZj0iaHR0cDovL2FudC5hcGFjaGUub3JnLyI+PHN0cm9uZz5BbnQ8L3N0cm9uZz48L2E+IGJ1aWxkCiAgICBzeXN0ZW0uIEFudCBpcyBhIHBvcnRhYmxlLCBKYXZhLWJhc2VkIGJ1aWxkIHN5c3RlbSBzaW1pbGFyIHRvIG1ha2UuIElDVTRKIHVzZXMgQW50CiAgICBiZWNhdXNlIGl0IGludHJvZHVjZXMgbm8gb3RoZXIgZGVwZW5kZW5jaWVzLCBpdCdzIHBvcnRhYmxlLCBhbmQgaXQncyBlYXNpZXIgdG8gbWFuYWdlIHRoYW4KICAgIGEgY29sbGVjdGlvbiBvZiBtYWtlZmlsZXMuIFdlIGN1cnJlbnRseSBidWlsZCBJQ1U0SiB1c2luZyBhIHNpbmdsZSBtYWtlZmlsZSBvbiBib3RoCiAgICBXaW5kb3dzIDl4IGFuZCBMaW51eCB1c2luZyBBbnQuICBUaGUgYnVpbGQgc3lzdGVtIHJlcXVpcmVzIEFudCAxLjUgb3IgbGF0ZXIuPC9wPgogICAgPHA+SW5zdGFsbGluZyBBbnQgaXMgc3RyYWlnaHRmb3J3YXJkLiBEb3dubG9hZCBpdCAoc2VlIDxhCiAgICBocmVmPSJodHRwOi8vYW50LmFwYWNoZS5vcmcvYmluZG93bmxvYWQuY2dpIj5odHRwOi8vYW50LmFwYWNoZS5vcmcvYmluZG93bmxvYWQuY2dpPC9hPiksCiAgICBleHRyYWN0IGl0IG9udG8geW91ciBzeXN0ZW0sIHNldCBzb21lIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kIGFkZCBpdHMgYmluIGRpcmVjdG9yeSB0bwogICAgeW91ciBwYXRoLiBGb3IgZXhhbXBsZToKPHByZT4gICAgc2V0IEpBVkFfSE9NRT1DOlxqZGsxLjMuMQogICAgc2V0IEFOVF9IT01FPUM6XGFudAogICAgc2V0IFBBVEg9JVBBVEglOyVBTlRfSE9NRSVcYmluPC9wcmU+PC9wPgogICAgPHA+U2VlIHRoZSBjdXJyZW50IEFudCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLjwvcD4KICA8L2xpPgo8L3VsPgoKPHA+T25jZSB0aGUgSkRLIGFuZCBBbnQgYXJlIGluc3RhbGxlZCwgYnVpbGRpbmcgaXMganVzdCBhIG1hdHRlciBvZgp0eXBpbmcgPHN0cm9uZz5hbnQ8L3N0cm9uZz4gaW4gdGhlIElDVTRKIHJvb3QgZGlyZWN0b3J5LiBUaGlzIGNhdXNlcwp0aGUgQW50IGJ1aWxkIHN5c3RlbSB0byBwZXJmb3JtIGEgYnVpbGQgYXMgc3BlY2lmaWVkIGJ5IHRoZSBmaWxlCjxzdHJvbmc+YnVpbGQueG1sPC9zdHJvbmc+LCBsb2NhdGVkIGluIHRoZSBJQ1U0SiByb290IGRpcmVjdG9yeS4gWW91CmNhbiBnaXZlIEFudCBvcHRpb25zIGxpa2UgLXZlcmJvc2UsIGFuZCB5b3UgY2FuIHNwZWNpZnkgdGFyZ2V0cy4gQW50CndpbGwgb25seSBidWlsZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIGFuZCB3aWxsIHJlc29sdmUgZGVwZW5kZW5jaWVzCnByb3Blcmx5LiAgRm9yIGV4YW1wbGU6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPkY6XGljdTRqJmd0O2FudCB0ZXN0cwpCdWlsZGZpbGU6IGJ1aWxkLnhtbApQcm9qZWN0IGJhc2UgZGlyIHNldCB0bzogRjpcaWN1NGoKRXhlY3V0aW5nIFRhcmdldDogY29yZQpDb21waWxpbmcgNzEgc291cmNlIGZpbGVzIHRvIEY6XGljdTRqXGNsYXNzZXMKRXhlY3V0aW5nIFRhcmdldDogdGVzdHMKQ29tcGlsaW5nIDI0IHNvdXJjZSBmaWxlcyB0byBGOlxpY3U0alxjbGFzc2VzCkNvbXBsZXRlZCBpbiAxOSBzZWNvbmRzPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPlRoZSBmb2xsb3dpbmcgYXJlIHNvbWUgdGFyZ2V0cyB0aGF0IHlvdSBjYW4gZ2l2ZSBhZnRlciA8c3Ryb25nPmFudDwvc3Ryb25nPi4gIEZvciBtb3JlCnRhcmdldHMsIHNlZSB0aGUgYnVpbGQueG1sIGZpbGU6PC9wPgo8ZGl2IGFsaWduPSJsZWZ0Ij4KCjx0YWJsZSBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIwIj4KICA8dHI+CiAgICA8dGQ+YWxsPC90ZD4KICAgIDx0ZD5CdWlsZCBhbGwgdGFyZ2V0cy48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPmNvcmU8L3RkPgogICAgPHRkPkJ1aWxkIHRoZSBtYWluIGNsYXNzIGZpbGVzIGluIHRoZSBzdWJkaXJlY3RvcnkgPHN0cm9uZz5jbGFzc2VzPC9zdHJvbmc+LiBJZiBubyB0YXJnZXQKICAgIGlzIHNwZWNpZmllZCwgY29yZSBpcyBhc3N1bWVkLjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+dGVzdHM8L3RkPgogICAgPHRkPkJ1aWxkIHRoZSB0ZXN0IGNsYXNzIGZpbGVzLjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+ZGVtb3M8L3RkPgogICAgPHRkPkJ1aWxkIHRoZSBkZW1vcy48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPnRvb2xzPC90ZD4KICAgIDx0ZD5CdWlsZCB0aGUgdG9vbHMuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5kb2NzPC90ZD4KICAgIDx0ZD5SdW4gamF2YWRvYyBvdmVyIHRoZSBtYWluIGNsYXNzIGZpbGVzLCBnZW5lcmF0aW5nIGFuIEhUTUwgZG9jdW1lbnRhdGlvbiB0cmVlIGluIHRoZQogICAgc3ViZGlyZWN0b3J5IDxzdHJvbmc+ZG9jPC9zdHJvbmc+LjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+amFyPC90ZD4KICAgIDx0ZD5DcmVhdGUgYSBqYXIgYXJjaGl2ZSA8c3Ryb25nPmljdTRqLmphcjwvc3Ryb25nPiBpbiB0aGUgcm9vdCBJQ1U0SiBkaXJlY3RvcnkgY29udGFpbmluZwogICAgdGhlIG1haW4gY2xhc3MgZmlsZXMuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD56aXA8L3RkPgogICAgPHRkPkNyZWF0ZSBhIHppcCBhcmNoaXZlIG9mIHRoZSBzb3VyY2UsIGRvY3MsIGFuZCBqYXIgZmlsZSBmb3IgZGlzdHJpYnV0aW9uLiBUaGUgemlwIGZpbGUgPHN0cm9uZz5pY3U0allZWVlNTURELnppcDwvc3Ryb25nPgogICAgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBkaXJlY3RvcnkgPGVtPmFib3ZlPC9lbT4gdGhlIHJvb3QgSUNVNEogZGlyZWN0b3J5LCB3aGVyZSBZWVlZTU1ERAogICAgaXMgdG9kYXkncyBkYXRlLiBBbnkgZXhpc3RpbmcgZmlsZSBvZiB0aGF0IG5hbWUgd2lsbCBiZSBvdmVyd3JpdHRlbi48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPnppcHNyYzwvdGQ+CiAgICA8dGQ+TGlrZSB0aGUgPHN0cm9uZz56aXA8L3N0cm9uZz4gdGFyZ2V0LCB3aXRob3V0IHRoZSBkb2NzIGFuZCB0aGUgamFyIGZpbGUuIFRoZSB6aXAgZmlsZSA8c3Ryb25nPmljdTRqc3JjWVlZWU1NREQuemlwPC9zdHJvbmc+CiAgICB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGRpcmVjdG9yeSA8ZW0+YWJvdmU8L2VtPiB0aGUgcm9vdCBJQ1U0SiBkaXJlY3RvcnkuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5yaWNoZWRpdDwvdGQ+CiAgICA8dGQ+QnVpbGQgdGhlIHJpY2hlZGl0IGNvcmUgY2xhc3MgZmlsZXMgYW5kIHRlc3RzLgogIDwvdHI+CiAgPHRyPgogICAgPHRkPnJpY2hlZGl0SmFyPC90ZD4KICAgIDx0ZD5DcmVhdGUgdGhlIHJpY2hlZGl0IGphciBmaWxlICh3aGljaCBjb250YWlucyBvbmx5IHRoZSByaWNoZWRpdCBjb3JlIGNsYXNzIGZpbGVzKS4KICAgIFRoZSBmaWxlIDxzdHJvbmc+cmljaGVkaXQuamFyPC9zdHJvbmc+CiAgICB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIDxzdHJvbmc+Li9yaWNoZWRpdDwvc3Ryb25nPiBzdWJkaXJlY3RvcnkuIEFueSBleGlzdGluZyBmaWxlIG9mCiAgICB0aGF0IG5hbWUgd2lsbCBiZSBvdmVyd3JpdHRlbi48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPnJpY2hlZGl0WmlwPC90ZD4KICAgIDx0ZD5DcmVhdGUgYSB6aXAgYXJjaGl2ZSBvZiB0aGUgcmljaGVkaXQgZG9jcyBhbmQgamFyIGZpbGUgZm9yIGRpc3RyaWJ1dGlvbi4gVGhlIHppcCBmaWxlIDxzdHJvbmc+cmljaGVkaXQuemlwPC9zdHJvbmc+CiAgICB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIDxzdHJvbmc+Li9yaWNoZWRpdDwvc3Ryb25nPiBzdWJkaXJlY3RvcnkuIEFueSBleGlzdGluZyBmaWxlIG9mCiAgICB0aGF0IG5hbWUgd2lsbCBiZSBvdmVyd3JpdHRlbi48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPmNsZWFuPC90ZD4KICAgIDx0ZD5SZW1vdmUgYWxsIGJ1aWx0IHRhcmdldHMsIGxlYXZpbmcgdGhlIHNvdXJjZS48L3RkPgogIDwvdHI+CjwvdGFibGU+CjwvZGl2PgoKPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgdGhlIEFudCBkb2N1bWVudGF0aW9uIGFuZCB0aGUgPHN0cm9uZz5idWlsZC54bWw8L3N0cm9uZz4KZmlsZS48L3A+Cgo8cD5BZnRlciBkb2luZyBhIGJ1aWxkIGl0IGlzIGEgZ29vZCBpZGVhIHRvIHJ1biBhbGwgdGhlIGljdTRqIHRlc3RzIGJ5IHR5cGluZyA8YnI+JnF1b3Q7amF2YQotY2xhc3NwYXRoICRSb290L2NsYXNzZXMgLURVbmljb2RlRGF0YT0kUm9vdC9zcmMvY29tL2libS9pY3UvZGV2L2RhdGEvdW5pY29kZSBjb20uaWJtLmRldi50ZXN0LlRlc3RBbGwmcXVvdDsuPC9wPgoKPHA+KElmIHlvdSBhcmUgYWxsZXJnaWMgdG8gYnVpbGQgc3lzdGVtcywgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gdXNpbmcKQW50IHlvdSBjYW4gYnVpbGQgYnkgcnVubmluZyBqYXZhYyBhbmQgamF2YWRvYyBkaXJlY3RseS4gVGhpcwppcyBub3QgcmVjb21tZW5kZWQuIFlvdSBtYXkgaGF2ZSB0byBtYW51YWxseSBjcmVhdGUgZGVzdGluYXRpb24KZGlyZWN0b3JpZXMuKTwvcD4KCjxoMz48YSBuYW1lPSJIb3dUb01vZHVsYXJpemUiPjwvYT48dT5Ib3cgdG8gbW9kdWxhcml6ZSBJQ1U0SjwvdT48L2gzPgpTb21lIGFwcGxpY2F0aW9ucyBhbmQgZW52aXJvbm1lbnRzIG1heSBub3Qgd2lzaCB0byBzaGlwIGFsbCBvZiBJQ1U0SiBidW5kbGVkIGFzIGEgamFyIGZpbGUgc2luY2UgdGhlIGphciBmaWxlIGlzIGxhcmdlIGFuZCBtYXkgY29udGFpbiBwYXJ0cyBvZiBJQ1U0SiB3aGljaCBhcmUgbm90IHVzZWQuClNvbWUgYXBwbGljYXRpb25zIHVzZSBvbmx5IGEgcGFydGljdWxhciBzZXJ2aWNlIGZyb20gdGhlIHJhbmdlIG9mIHNlcnZpY2VzIHRoYXQgSUNVNEogb2ZmZXJzLCBzbyB3b3VsZCB3YW50IHRvIHNoaXAgb25seSB0aGF0IHNlcnZpY2UgYXMgYSBqYXIgZmlsZS4KU2luY2UgSUNVNEogcmVsZWFzZSAyLjYsIG5ldyBidWlsZCBvcHRpb25zIGFyZSBwcm92aWRlZCB0byBzZWxlY3QgaW5kaXZpZHVhbCBJQ1U0SiBtb2R1bGVzIGZvciBhIG1vcmUgY29tcGFjdCBqYXIgZGlzdHJpYnV0aW9uLgpUaGUgbW9kdWxlcyBhcmUgZGl2aWRlZCBvbiBiYXNpcyBvZiBzZXJ2aWNlIGFuZCBzZXQgb2YgQVBJcyByZXF1aXJlZCBmb3Igc3VwcG9ydGluZyB0aGF0IHNlcnZpY2UsZS5nLiwKdGhlIG5vcm1hbGl6ZXIgbW9kdWxlIHN1cHBvcnRzIGFsbCB0aGUgTm9ybWFsaXplciBBUElzLlRoZSBzZWxmIHRlc3RzIGZvciB0aGVzZSBBUElzIGNhbiBiZSBydW4gdG8gdmVyaWZ5IHRoYXQgdGhlIEFQSXMgd29yay4KRXZlbiB0aG91Z2ggYSBudW1iZXIgb2Ygc3VwcG9ydGluZyBjbGFzc2VzIGFyZSBjb21waWxlZCBjb250YWluaW5nIG90aGVyIEFQSXMsIDxlbT5ubyBndWFyYW50ZWVzPC9lbT4gYXJlIG1hZGUgdGhhdCB0aGVzZSBBUElzIHdpbGwgd29yay4KVGhlIG1vZHVsZXMgYXJlIGludGVyZGVwZW5kZW50IG5vdCBpbmRlcGVuZGVudCxpLmUuLCBzZXBhcmF0ZSBtb2R1bGVzIGFyZSBub3QgYnVpbHQgaW50byBzZXBhcmF0ZSBqYXJzLCBpbnN0ZWFkIG9uZSBvciBtb3JlIG1vZHVsZSB0YXJnZXRzIGFyZSBzcGVjaWZpZWQgaW5vcmRlciB0byBidWlsZCBhIHNtYWxsZXIgamFyLgoKQ3VycmVudGx5IElDVTRKIGNhbiBiZSBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBtb2R1bGVzOgo8YnI+PGJyPgo8dGFibGUgYm9yZGVyPSIxIj4KICAgIDx0cj4KCiAgICAgICAgPHRoPjxiPk1vZHVsZSBOYW1lPC9iPjwvdGg+CgogICAgICAgIDx0aD48Yj5BbnQgVGFyZ2V0czwvYj48L3RoPgoKICAgICAgICA8dGg+PGI+VGVzdCBQYWNrYWdlIFN1cHBvcnRlZDwvYj48L3RoPgoKICAgICAgICA8dGg+PGI+TWFpbiBDbGFzc2VzKiYjeDIwMjA7PC9iPjwvdGg+CgogICAgICAgIDx0aD48Yj5TaXplPC9iPjwvdGg+CgogICAgPC90cj4KCiAgICA8dHI+CgogICAgICAgIDx0ZD5Ob3JtYWxpemVyPC90ZD4KCiAgICAgICAgPHRkPm5vcm1hbGl6ZXIsIG5vcm1hbGl6ZXJUZXN0czwvdGQ+CgogICAgICAgIDx0ZD5jb20uaWJtLmljdS5kZXYudGVzdC5ub3JtYWxpemVyPC90ZD4KCiAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgbGFuZy5VQ2hhcmFjdGVyCiAgICAgICAgICAgIDxicj5sYW5nLlVDaGFyYWN0ZXJDYXRlZ29yeQogICAgICAgICAgICA8YnI+bGFuZy5VQ2hhcmFjdGVyRGlyZWN0aW9uCiAgICAgICAgICAgIDxicj5sYW5nLlVDaGFyYWN0ZXJOYW1lSXRlcmF0b3IKICAgICAgICAgICAgPGJyPmxhbmcuVUNoYXJhY3RlclR5cGVJdGVyYXRvcgogICAgICAgICAgICA8YnI+bGFuZy5VUHJvcGVydHkKICAgICAgICAgICAgPGJyPmxhbmcuVVNjcmlwdAogICAgICAgICAgICA8Yj48YnI+dGV4dC5Ob3JtYWxpemVyPC9iPgogICAgICAgICAgICA8YnI+dGV4dC5SZXBsYWNlYWJsZQogICAgICAgICAgICA8YnI+dGV4dC5SZXBsYWNlYWJsZVN0cmluZwogICAgICAgICAgICA8Yj48YnI+dGV4dC5VQ2hhcmFjdGVySXRlcmF0b3IKICAgICAgICAgICAgPGJyPnRleHQuVUZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvcjwvYj4KICAgICAgICAgICAgPGJyPnRleHQuVW5pY29kZUZpbHRlcgogICAgICAgICAgICA8YnI+dGV4dC5Vbmljb2RlTWF0Y2hlcgogICAgICAgICAgICA8YnI+dGV4dC5Vbmljb2RlU2V0CiAgICAgICAgICAgIDxicj50ZXh0LlVuaWNvZGVTZXRJdGVyYXRvcgogICAgICAgICAgICA8YnI+dGV4dC5VVEYxNgogICAgICAgICAgICA8YnI+dXRpbC5WYWx1ZUl0ZXJhdG9yCiAgICAgICAgICAgIDxicj51dGlsLlZlcnNpb25JbmZvCiAgICAgICAgPC90ZD4KCiAgICAgICAgPHRkPiZuYnNwOzM1NSBLQjwvdGQ+CgogICAgPC90cj4KCiAgICA8dHI+CgogICAgICAgIDx0ZD5Db2xsYXRvcjwvdGQ+CgogICAgICAgIDx0ZD5jb2xsYXRvciwgY29sbGF0b3JUZXN0czwvdGQ+CgogICAgICAgIDx0ZD5jb20uaWJtLmljdS5kZXYudGVzdC5jb2xsYXRvcjwvdGQ+CgogICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIGxhbmcuVUNoYXJhY3RlcgogICAgICAgICAgICA8YnI+bGFuZy5VQ2hhcmFjdGVyQ2F0ZWdvcnkKICAgICAgICAgICAgPGJyPmxhbmcuVUNoYXJhY3RlckRpcmVjdGlvbgogICAgICAgICAgICA8YnI+bGFuZy5VQ2hhcmFjdGVyTmFtZUl0ZXJhdG9yCiAgICAgICAgICAgIDxicj5sYW5nLlVDaGFyYWN0ZXJUeXBlSXRlcmF0b3IKICAgICAgICAgICAgPGJyPmxhbmcuVVByb3BlcnR5CiAgICAgICAgICAgIDxicj5sYW5nLlVTY3JpcHQKICAgICAgICAgICAgPGJyPnRleHQuQnJlYWtEaWN0aW9uYXJ5CiAgICAgICAgICAgIDxicj50ZXh0LkJyZWFrSXRlcmF0b3IKICAgICAgICAgICAgPGJyPnRleHQuQnJlYWtJdGVyYXRvckZhY3RvcnkKICAgICAgICAgICAgPGJyPnRleHQuQ2Fub25pY2FsSXRlcmF0b3IKICAgICAgICAgICAgPGI+PGJyPnRleHQuQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LkNvbGxhdGlvbktleQogICAgICAgICAgICA8YnI+dGV4dC5Db2xsYXRpb25QYXJzZWRSdWxlQnVpbGRlcgogICAgICAgICAgICA8YnI+dGV4dC5Db2xsYXRpb25SdWxlUGFyc2VyCiAgICAgICAgICAgIDxicj50ZXh0LkNvbGxhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LkNvbGxhdG9yUmVhZGVyPC9iPgogICAgICAgICAgICA8YnI+dGV4dC5EaWN0aW9uYXJ5QmFzZWRCcmVha0l0ZXJhdG9yCiAgICAgICAgICAgIDxiPjxicj50ZXh0Lk5vcm1hbGl6ZXI8L2I+CiAgICAgICAgICAgIDxicj50ZXh0LlJlcGxhY2VhYmxlCiAgICAgICAgICAgIDxicj50ZXh0LlJlcGxhY2VhYmxlU3RyaW5nCiAgICAgICAgICAgIDxicj50ZXh0LlJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IKICAgICAgICAgICAgPGI+PGJyPnRleHQuUnVsZUJhc2VkQ29sbGF0b3IKICAgICAgICAgICAgPGJyPnRleHQuU2VhcmNoSXRlcmF0b3IKICAgICAgICAgICAgPGJyPnRleHQuU3RyaW5nU2VhcmNoPC9iPgogICAgICAgICAgICA8Yj48YnI+dGV4dC5VQ2hhcmFjdGVySXRlcmF0b3IKICAgICAgICAgICAgPGJyPnRleHQuVUZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvcjwvYj4KICAgICAgICAgICAgPGJyPnRleHQuVW5pY29kZUZpbHRlcgogICAgICAgICAgICA8YnI+dGV4dC5Vbmljb2RlTWF0Y2hlcgogICAgICAgICAgICA8YnI+dGV4dC5Vbmljb2RlU2V0CiAgICAgICAgICAgIDxicj50ZXh0LlVuaWNvZGVTZXRJdGVyYXRvcgogICAgICAgICAgICA8YnI+dGV4dC5VVEYxNgogICAgICAgICAgICA8YnI+dXRpbC5WYWx1ZUl0ZXJhdG9yCiAgICAgICAgICAgIDxicj51dGlsLlZlcnNpb25JbmZvCiAgICAgICAgPC90ZD4KCiAgICAgICAgPHRkPjEsNzE2IEtCPC90ZD4KCiAgICA8L3RyPgoKICAgIDx0cj4KCiAgICAgICAgPHRkPkNhbGVuZGFyPC90ZD4KCiAgICAgICAgPHRkPmNhbGVuZGFyLCBjYWxlbmRhclRlc3RzPC90ZD4KCiAgICAgICAgPHRkPmNvbS5pYm0uaWN1LmRldi50ZXN0LmNhbGVuZGFyPC90ZD4KCiAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgbGFuZy5VQ2hhcmFjdGVyCiAgICAgICAgICAgIDxicj5sYW5nLlVDaGFyYWN0ZXJDYXRlZ29yeQogICAgICAgICAgICA8YnI+bGFuZy5VQ2hhcmFjdGVyRGlyZWN0aW9uCiAgICAgICAgICAgIDxicj5sYW5nLlVDaGFyYWN0ZXJOYW1lSXRlcmF0b3IKICAgICAgICAgICAgPGJyPmxhbmcuVUNoYXJhY3RlclR5cGVJdGVyYXRvcgogICAgICAgICAgICA8YnI+bGFuZy5VUHJvcGVydHkKICAgICAgICAgICAgPGJyPmxhbmcuVVNjcmlwdAogICAgICAgICAgICA8Yj48YnI+bWF0aC5CaWdEZWNpbWFsPC9iPgogICAgICAgICAgICA8YnI+dGV4dC5CcmVha0l0ZXJhdG9yCiAgICAgICAgICAgIDxiPjxicj50ZXh0LkNoaW5lc2VEYXRlRm9ybWF0CiAgICAgICAgICAgIDxicj50ZXh0LkNoaW5lc2VEYXRlRm9ybWF0U3ltYm9scwogICAgICAgICAgICA8YnI+dGV4dC5EYXRlRm9ybWF0CiAgICAgICAgICAgIDxicj50ZXh0LkRhdGVGb3JtYXRTeW1ib2xzCiAgICAgICAgICAgIDxicj50ZXh0LkRlY2ltYWxGb3JtYXQKICAgICAgICAgICAgPGJyPnRleHQuRGVjaW1hbEZvcm1hdFN5bWJvbHM8L2I+CiAgICAgICAgICAgIDxicj50ZXh0Lk5vcm1hbGl6ZXIKICAgICAgICAgICAgPGJyPnRleHQuTnVtYmVyRm9ybWF0CiAgICAgICAgICAgIDxicj50ZXh0LlJlcGxhY2VhYmxlCiAgICAgICAgICAgIDxicj50ZXh0LlJlcGxhY2VhYmxlU3RyaW5nCiAgICAgICAgICAgIDxiPjxicj50ZXh0LlNpbXBsZURhdGVGb3JtYXQKICAgICAgICAgICAgPGJyPnRleHQuVUNoYXJhY3Rlckl0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LlVGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3I8L2I+CiAgICAgICAgICAgIDxicj50ZXh0LlVuaWNvZGVGaWx0ZXIKICAgICAgICAgICAgPGJyPnRleHQuVW5pY29kZU1hdGNoZXIKICAgICAgICAgICAgPGJyPnRleHQuVW5pY29kZVNldAogICAgICAgICAgICA8YnI+dGV4dC5Vbmljb2RlU2V0SXRlcmF0b3IKICAgICAgICAgICAgPGJyPnRleHQuVVRGMTYKICAgICAgICAgICAgPGI+PGJyPnV0aWwuQnVkZGhpc3RDYWxlbmRhcgogICAgICAgICAgICA8YnI+dXRpbC5DYWxlbmRhcgogICAgICAgICAgICA8YnI+dXRpbC5DYWxlbmRhckFzdHJvbm9tZXIKICAgICAgICAgICAgPGJyPnV0aWwuQ2FsZW5kYXJDYWNoZQogICAgICAgICAgICA8YnI+dXRpbC5DYWxlbmRhckZhY3RvcnkKICAgICAgICAgICAgPGJyPnV0aWwuQ2hpbmVzZUNhbGVuZGFyCiAgICAgICAgICAgIDxicj51dGlsLkN1cnJlbmN5CiAgICAgICAgICAgIDxicj51dGlsLkRhdGVSdWxlCiAgICAgICAgICAgIDxicj51dGlsLkVhc3RlckhvbGlkYXkKICAgICAgICAgICAgPGJyPnV0aWwuRWFzdGVyUnVsZQogICAgICAgICAgICA8YnI+dXRpbC5HcmVnb3JpYW5DYWxlbmRhcgogICAgICAgICAgICA8YnI+dXRpbC5IZWJyZXdDYWxlbmRhcgogICAgICAgICAgICA8YnI+dXRpbC5IZWJyZXdIb2xpZGF5CiAgICAgICAgICAgIDxicj51dGlsLkhvbGlkYXkKICAgICAgICAgICAgPGJyPnV0aWwuSXNsYW1pY0NhbGVuZGFyCiAgICAgICAgICAgIDxicj51dGlsLkphcGFuZXNlQ2FsZW5kYXIKICAgICAgICAgICAgPGJyPnV0aWwuUmFuZ2VEYXRlUnVsZQogICAgICAgICAgICA8YnI+dXRpbC5TaW1wbGVEYXRlUnVsZQogICAgICAgICAgICA8YnI+dXRpbC5TaW1wbGVIb2xpZGF5CiAgICAgICAgICAgIDxicj51dGlsLlNpbXBsZVRpbWVab25lCiAgICAgICAgICAgIDxicj51dGlsLlNpbXBsZVRpbWVab25lQWRhcHRlcgogICAgICAgICAgICA8YnI+dXRpbC5UaW1lWm9uZQogICAgICAgICAgICA8YnI+dXRpbC5UaW1lWm9uZURhdGE8L2I+CiAgICAgICAgICAgIDxicj51dGlsLlZhbHVlSXRlcmF0b3IKICAgICAgICAgICAgPGJyPnV0aWwuVmVyc2lvbkluZm8KICAgICAgICA8L3RkPgoKICAgICAgICA8dGQ+MSwxNjAgS0I8L3RkPgoKCiAgICA8L3RyPgoKICAgIDx0cj4KCiAgICAgICAgPHRkPiZuYnNwO0JyZWFrSXRlcmF0b3I8L3RkPgoKICAgICAgICA8dGQ+YnJlYWtJdGVyYXRvciwgYnJlYWtJdGVyYXRvclRlc3RzPC90ZD4KCiAgICAgICAgPHRkPmNvbS5pYm0uaWN1LmRldi50ZXN0LmJyZWFraXRlcmF0b3I8L3RkPgoKICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICBsYW5nLlVDaGFyYWN0ZXIKICAgICAgICAgICAgPGJyPmxhbmcuVUNoYXJhY3RlckNhdGVnb3J5CiAgICAgICAgICAgIDxicj5sYW5nLlVDaGFyYWN0ZXJEaXJlY3Rpb24KICAgICAgICAgICAgPGJyPmxhbmcuVUNoYXJhY3Rlck5hbWVJdGVyYXRvcgogICAgICAgICAgICA8YnI+bGFuZy5VQ2hhcmFjdGVyVHlwZUl0ZXJhdG9yCiAgICAgICAgICAgIDxicj5sYW5nLlVQcm9wZXJ0eQogICAgICAgICAgICA8YnI+bGFuZy5VU2NyaXB0CiAgICAgICAgICAgIDxiPjxicj50ZXh0LkJyZWFrRGljdGlvbmFyeQogICAgICAgICAgICA8YnI+dGV4dC5CcmVha0l0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LkJyZWFrSXRlcmF0b3JGYWN0b3J5CiAgICAgICAgICAgIDxicj50ZXh0LkRpY3Rpb25hcnlCYXNlZEJyZWFrSXRlcmF0b3I8L2I+CiAgICAgICAgICAgIDxicj50ZXh0Lk5vcm1hbGl6ZXIKICAgICAgICAgICAgPGJyPnRleHQuUmVwbGFjZWFibGUKICAgICAgICAgICAgPGJyPnRleHQuUmVwbGFjZWFibGVTdHJpbmcKICAgICAgICAgICAgPGI+PGJyPnRleHQuUnVsZUJhc2VkQnJlYWtJdGVyYXRvcjwvYj4KICAgICAgICAgICAgPGJyPnRleHQuVUNoYXJhY3Rlckl0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LlVGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3IKICAgICAgICAgICAgPGJyPnRleHQuVW5pY29kZUZpbHRlcgogICAgICAgICAgICA8YnI+dGV4dC5Vbmljb2RlTWF0Y2hlcgogICAgICAgICAgICA8YnI+dGV4dC5Vbmljb2RlU2V0CiAgICAgICAgICAgIDxicj50ZXh0LlVuaWNvZGVTZXRJdGVyYXRvcgogICAgICAgICAgICA8YnI+dGV4dC5VVEYxNgogICAgICAgICAgICA8YnI+dXRpbC5SYW5nZVZhbHVlSXRlcmF0b3IKICAgICAgICAgICAgPGJyPnV0aWwuVmFsdWVJdGVyYXRvcgogICAgICAgICAgICA8YnI+dXRpbC5WZXJzaW9uSW5mbwogICAgICAgIDwvdGQ+CgogICAgICAgIDx0ZD4xLDEwNSBLQjwvdGQ+CgogICAgPC90cj4KCiAgICA8dHI+CgogICAgICAgIDx0ZD5CYXNpYyBQcm9wZXJ0aWVzPC90ZD4KCiAgICAgICAgPHRkPnByb3BlcnRpZXNCYXNpYywgcHJvcGVydGllc1Rlc3RzPC90ZD4KCiAgICAgICAgPHRkPmNvbS5pYm0uaWN1LmRldi50ZXN0Lmxhbmc8L3RkPgoKICAgICAgICA8dGQ+CiAgICAgICAgICA8Yj4gICAgIGxhbmcuVUNoYXJhY3RlcgogICAgICAgICAgICA8YnI+bGFuZy5VQ2hhcmFjdGVyQ2F0ZWdvcnkKICAgICAgICAgICAgPGJyPmxhbmcuVUNoYXJhY3RlckRpcmVjdGlvbgogICAgICAgICAgICA8YnI+bGFuZy5VQ2hhcmFjdGVyTmFtZUl0ZXJhdG9yCiAgICAgICAgICAgIDxicj5sYW5nLlVDaGFyYWN0ZXJUeXBlSXRlcmF0b3IKICAgICAgICAgICAgPGJyPmxhbmcuVVByb3BlcnR5CiAgICAgICAgICAgIDxicj5sYW5nLlVTY3JpcHQKICAgICAgICAgICAgPGJyPmxhbmcuVVNjcmlwdFJ1biA8L2I+CiAgICAgICAgICAgIDxicj50ZXh0LkJyZWFrRGljdGlvbmFyeQogICAgICAgICAgICA8YnI+dGV4dC5CcmVha0l0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LkJyZWFrSXRlcmF0b3JGYWN0b3J5CiAgICAgICAgICAgIDxicj50ZXh0LkRpY3Rpb25hcnlCYXNlZEJyZWFrSXRlcmF0b3IKICAgICAgICAgICAgPGJyPnRleHQuTm9ybWFsaXplcgogICAgICAgICAgICA8YnI+dGV4dC5SZXBsYWNlYWJsZQogICAgICAgICAgICA8YnI+dGV4dC5SZXBsYWNlYWJsZVN0cmluZwogICAgICAgICAgICA8YnI+dGV4dC5SdWxlQmFzZWRCcmVha0l0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LlN5bWJvbFRhYmxlCiAgICAgICAgICAgIDxicj50ZXh0LlVDaGFyYWN0ZXJJdGVyYXRvcgogICAgICAgICAgICA8YnI+dGV4dC5VRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LlVuaWNvZGVGaWx0ZXIKICAgICAgICAgICAgPGJyPnRleHQuVW5pY29kZU1hdGNoZXIKICAgICAgICAgICAgPGJyPnRleHQuVW5pY29kZVNldAogICAgICAgICAgICA8YnI+dGV4dC5Vbmljb2RlU2V0SXRlcmF0b3IKICAgICAgICAgICAgPGI+PGJyPnRleHQuVVRGMTYgPC9iPgogICAgICAgICAgICA8YnI+dXRpbC5Db21wYWN0Qnl0ZUFycmF5CiAgICAgICAgICAgIDxicj51dGlsLlJhbmdlVmFsdWVJdGVyYXRvcgogICAgICAgICAgICA8YnI+dXRpbC5WYWx1ZUl0ZXJhdG9yCiAgICAgICAgICAgIDxicj51dGlsLlZlcnNpb25JbmZvCiAgICAgICAgPC90ZD4KCiAgICAgICAgPHRkPjM1MCBLQjwvdGQ+CgogICAgPC90cj4KCiAgICA8dHI+CgogICAgICAgIDx0ZD5GdWxsIFByb3BlcnRpZXM8L3RkPgoKICAgICAgICA8dGQ+cHJvcGVydGllc0Z1bGwsCiAgICAgICAgPGJyPnByb3BlcnRpZXNUZXN0czwvdGQ+CgogICAgICAgIDx0ZD5jb20uaWJtLmljdS5kZXYudGVzdC5sYW5nPC90ZD4KCiAgICAgICAgPHRkPgogICAgICAgICAgICA8Yj4gICAgbGFuZy5VQ2hhcmFjdGVyCiAgICAgICAgICAgIDxicj5sYW5nLlVDaGFyYWN0ZXJDYXRlZ29yeQogICAgICAgICAgICA8YnI+bGFuZy5VQ2hhcmFjdGVyRGlyZWN0aW9uCiAgICAgICAgICAgIDxicj5sYW5nLlVDaGFyYWN0ZXJOYW1lSXRlcmF0b3IKICAgICAgICAgICAgPGJyPmxhbmcuVUNoYXJhY3RlclR5cGVJdGVyYXRvcgogICAgICAgICAgICA8YnI+bGFuZy5VUHJvcGVydHkKICAgICAgICAgICAgPGJyPmxhbmcuVVNjcmlwdAogICAgICAgICAgICA8YnI+bGFuZy5VU2NyaXB0UnVuPC9iPgogICAgICAgICAgICA8YnI+dGV4dC5CcmVha0RpY3Rpb25hcnkKICAgICAgICAgICAgPGJyPnRleHQuQnJlYWtJdGVyYXRvcgogICAgICAgICAgICA8YnI+dGV4dC5CcmVha0l0ZXJhdG9yRmFjdG9yeQogICAgICAgICAgICA8YnI+dGV4dC5EaWN0aW9uYXJ5QmFzZWRCcmVha0l0ZXJhdG9yCiAgICAgICAgICAgIDxiPjxicj50ZXh0Lk5vcm1hbGl6ZXIKICAgICAgICAgICAgPGJyPnRleHQuUmVwbGFjZWFibGUKICAgICAgICAgICAgPGJyPnRleHQuUmVwbGFjZWFibGVTdHJpbmcgPC9iPgogICAgICAgICAgICA8YnI+dGV4dC5SdWxlQmFzZWRCcmVha0l0ZXJhdG9yCiAgICAgICAgICAgIDxiPjxicj50ZXh0LlVDaGFyYWN0ZXJJdGVyYXRvcgogICAgICAgICAgICA8YnI+dGV4dC5VRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LlVuaWNvZGVGaWx0ZXIKICAgICAgICAgICAgPGJyPnRleHQuVW5pY29kZU1hdGNoZXIKICAgICAgICAgICAgPGJyPnRleHQuVW5pY29kZVNldAogICAgICAgICAgICA8YnI+dGV4dC5Vbmljb2RlU2V0SXRlcmF0b3IKICAgICAgICAgICAgPGJyPnRleHQuVVRGMTYKICAgICAgICAgICAgPGJyPnV0aWwuUmFuZ2VWYWx1ZUl0ZXJhdG9yCiAgICAgICAgICAgIDxicj51dGlsLlZhbHVlSXRlcmF0b3IKICAgICAgICAgICAgPGJyPnV0aWwuVmVyc2lvbkluZm8gPC9iPgogICAgICAgIDwvdGQ+CgogICAgICAgIDx0ZD4mbmJzcDs5ODYgS0I8L3RkPgoKICAgIDwvdHI+CgogICAgPHRyPgoKICAgICAgICA8dGQ+Rm9ybWF0dGluZzwvdGQ+CgogICAgICAgIDx0ZD5mb3JtYXQsIGZvcm1hdFRlc3RzPC90ZD4KCiAgICAgICAgPHRkPmNvbS5pYm0uaWN1LmRldi50ZXN0LmZvcm1hdDwvdGQ+CgogICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIGxhbmcuVUNoYXJhY3RlcgogICAgICAgICAgICA8YnI+bGFuZy5VQ2hhcmFjdGVyQ2F0ZWdvcnkKICAgICAgICAgICAgPGJyPmxhbmcuVUNoYXJhY3RlckRpcmVjdGlvbgogICAgICAgICAgICA8YnI+bGFuZy5VQ2hhcmFjdGVyTmFtZUl0ZXJhdG9yCiAgICAgICAgICAgIDxicj5sYW5nLlVDaGFyYWN0ZXJUeXBlSXRlcmF0b3IKICAgICAgICAgICAgPGJyPmxhbmcuVVByb3BlcnR5CiAgICAgICAgICAgIDxicj5sYW5nLlVTY3JpcHQKICAgICAgICAgICAgPGI+PGJyPm1hdGguQmlnRGVjaW1hbDwvYj4KICAgICAgICAgICAgPGJyPnRleHQuQnJlYWtJdGVyYXRvcgogICAgICAgICAgICA8YnI+dGV4dC5DYW5vbmljYWxJdGVyYXRvcgogICAgICAgICAgICA8YnI+dGV4dC5DaGluZXNlRGF0ZUZvcm1hdAogICAgICAgICAgICA8YnI+dGV4dC5DaGluZXNlRGF0ZUZvcm1hdFN5bWJvbHMKICAgICAgICAgICAgPGJyPnRleHQuQ29sbGF0aW9uRWxlbWVudEl0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LkNvbGxhdGlvbktleQogICAgICAgICAgICA8YnI+dGV4dC5Db2xsYXRpb25QYXJzZWRSdWxlQnVpbGRlcgogICAgICAgICAgICA8YnI+dGV4dC5Db2xsYXRpb25SdWxlUGFyc2VyCiAgICAgICAgICAgIDxicj50ZXh0LkNvbGxhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LkNvbGxhdG9yUmVhZGVyCiAgICAgICAgICAgIDxiPjxicj50ZXh0LkRhdGVGb3JtYXQKICAgICAgICAgICAgPGJyPnRleHQuRGF0ZUZvcm1hdFN5bWJvbHMKICAgICAgICAgICAgPGJyPnRleHQuRGVjaW1hbEZvcm1hdAogICAgICAgICAgICA8YnI+dGV4dC5EZWNpbWFsRm9ybWF0U3ltYm9sczwvYj4KICAgICAgICAgICAgPGJyPnRleHQuTm9ybWFsaXplcgogICAgICAgICAgICA8Yj48YnI+dGV4dC5OdW1iZXJGb3JtYXQ8L2I+CiAgICAgICAgICAgIDxicj50ZXh0LlJlcGxhY2VhYmxlCiAgICAgICAgICAgIDxicj50ZXh0LlJlcGxhY2VhYmxlU3RyaW5nCiAgICAgICAgICAgIDxicj50ZXh0LlJ1bGVCYXNlZENvbGxhdG9yCiAgICAgICAgICAgIDxiPjxicj50ZXh0LlJ1bGVCYXNlZE51bWJlckZvcm1hdAogICAgICAgICAgICA8YnI+dGV4dC5TaW1wbGVEYXRlRm9ybWF0CiAgICAgICAgICAgIDxicj50ZXh0LlVDaGFyYWN0ZXJJdGVyYXRvcgogICAgICAgICAgICA8YnI+dGV4dC5VRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yPC9iPgogICAgICAgICAgICA8YnI+dGV4dC5Vbmljb2RlRmlsdGVyCiAgICAgICAgICAgIDxicj50ZXh0LlVuaWNvZGVNYXRjaGVyCiAgICAgICAgICAgIDxicj50ZXh0LlVuaWNvZGVTZXQKICAgICAgICAgICAgPGJyPnRleHQuVW5pY29kZVNldEl0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LlVURjE2CiAgICAgICAgICAgIDxiPjxicj51dGlsLkNhbGVuZGFyCiAgICAgICAgICAgIDxicj51dGlsLkNhbGVuZGFyQXN0cm9ub21lcgogICAgICAgICAgICA8YnI+dXRpbC5DYWxlbmRhckNhY2hlCiAgICAgICAgICAgIDxicj51dGlsLkNhbGVuZGFyRmFjdG9yeQogICAgICAgICAgICA8YnI+dXRpbC5DaGluZXNlQ2FsZW5kYXIKICAgICAgICAgICAgPGJyPnV0aWwuQ3VycmVuY3kKICAgICAgICAgICAgPGJyPnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIKICAgICAgICAgICAgPGJyPnV0aWwuUmFuZ2VWYWx1ZUl0ZXJhdG9yCiAgICAgICAgICAgIDxicj51dGlsLlNpbXBsZVRpbWVab25lCiAgICAgICAgICAgIDxicj51dGlsLlNpbXBsZVRpbWVab25lQWRhcHRlcgogICAgICAgICAgICA8YnI+dXRpbC5UaW1lWm9uZQogICAgICAgICAgICA8YnI+dXRpbC5UaW1lWm9uZURhdGE8L2I+CiAgICAgICAgICAgIDxicj51dGlsLlZhbHVlSXRlcmF0b3IKICAgICAgICAgICAgPGJyPnV0aWwuVmVyc2lvbkluZm8KICAgICAgICA8L3RkPgogICAgICAgIDx0ZD4xLDc4OCBLQiA8L3RkPgogICAgPC90cj4KCiAgICA8dHI+CgogICAgICAgIDx0ZD5UcmFuc2Zvcm1zPC90ZD4KCiAgICAgICAgPHRkPnRyYW5zbGl0ZXJhdG9yLCB0cmFuc2xpdGVyYXRvclRlc3RzPC90ZD4KCiAgICAgICAgPHRkPmNvbS5pYm0uaWN1LmRldi50ZXN0LnRyYW5zbGl0PC90ZD4KCiAgICAgICAgPHRkPgogICAgICAgICA8Yj4gICAgICAgIGxhbmcuVUNoYXJhY3RlcgogICAgICAgICAgICA8YnI+bGFuZy5VQ2hhcmFjdGVyQ2F0ZWdvcnkKICAgICAgICAgICAgPGJyPmxhbmcuVUNoYXJhY3RlckRpcmVjdGlvbgogICAgICAgICAgICA8YnI+bGFuZy5VQ2hhcmFjdGVyTmFtZUl0ZXJhdG9yCiAgICAgICAgICAgIDxicj5sYW5nLlVDaGFyYWN0ZXJUeXBlSXRlcmF0b3IKICAgICAgICAgICAgPGJyPmxhbmcuVVByb3BlcnR5CiAgICAgICAgICAgIDxicj5sYW5nLlVTY3JpcHQKICAgICAgICAgICAgPGJyPmxhbmcuVVNjcmlwdFJ1bgogICAgICAgICAgICA8YnI+dGV4dC5BbnlUcmFuc2xpdGVyYXRvcgogICAgICAgICAgICA8YnI+dGV4dC5CcmVha0RpY3Rpb25hcnkKICAgICAgICAgICAgPGJyPnRleHQuQnJlYWtJdGVyYXRvcgogICAgICAgICAgICA8YnI+dGV4dC5CcmVha0l0ZXJhdG9yRmFjdG9yeQogICAgICAgICAgICA8YnI+dGV4dC5CcmVha1RyYW5zbGl0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LkRpY3Rpb25hcnlCYXNlZEJyZWFrSXRlcmF0b3IKICAgICAgICAgICAgPGJyPnRleHQuTm9ybWFsaXplcgogICAgICAgICAgICA8YnI+dGV4dC5SZXBsYWNlYWJsZQogICAgICAgICAgICA8YnI+dGV4dC5SZXBsYWNlYWJsZVN0cmluZwogICAgICAgICAgICA8YnI+dGV4dC5SdWxlQmFzZWRCcmVha0l0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LlN0cmluZ1JlcGxhY2VyCiAgICAgICAgICAgIDxicj50ZXh0LlRyYW5zbGl0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LlVDaGFyYWN0ZXJJdGVyYXRvcgogICAgICAgICAgICA8YnI+dGV4dC5VRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LlVuaWNvZGVTZXQKICAgICAgICAgICAgPGJyPnRleHQuVW5pY29kZVNldEl0ZXJhdG9yCiAgICAgICAgICAgIDxicj50ZXh0LlVURjE2CiAgICAgICAgICAgIDxicj51dGlsLlJhbmdlVmFsdWVJdGVyYXRvcgogICAgICAgICAgICA8YnI+dXRpbC5WYWx1ZUl0ZXJhdG9yCiAgICAgICAgICAgIDxicj51dGlsLlZlcnNpb25JbmZvPC9iPgogICAgICAgIDwvdGQ+CgogICAgICAgIDx0ZD4xLDM2NCBLQjwvdGQ+CgogICAgPC90cj4KPC90YWJsZT4KPGI+Cjxmb250IHNpemU9Mj4KKiBjb20uaWJtLmljdS4gc2hvdWxkIGJlIHByZXBlbmRlZCB0byB0aGUgbmFtZXMgbGlzdGVkLgo8YnI+JiN4MjAyMDsgQVBJcyBjb250YWluZWQgYnkgY2xhc3MgbmFtZXMgaW4gYm9sZCBhcmUgZ3VhcmFudGVlZCB0byB3b3JrLgo8L2ZvbnQ+CjwvYj4KPGJyPgo8YnI+CgpCdWlsZGluZyBhbnkgb2YgdGhlc2UgbW9kdWxlcyBpcyBhcyBlYXN5IGFzIHNwZWNpZnlpbmcgYSBidWlsZCB0YXJnZXQgdG8gdGhlIEFudCBidWlsZCBzeXN0ZW0sZS5nOgo8YnI+VG8gYnVpbGQgYSBtb2R1bGUgdGhhdCBjb250YWlucyBvbmx5IHRoZSBOb3JtYWxpemVyIEFQSToKICAgIDxvbD4KICAgICAgICA8bGk+IEJ1aWxkIHRoZSBtb2R1bGUuIDxicj4gPGNvZGU+IGFudCBub3JtYWxpemVyIDwvY29kZT4gPC9saT4KICAgICAgICA8bGk+IEJ1aWxkIHRoZSB0ZXN0cyBmb3IgdGhlIG1vZHVsZS4gPGJyPiA8Y29kZT4gYW50IG5vcm1hbGl6ZXJUZXN0cyA8L2NvZGU+IDwvbGk+CiAgICAgICAgPGJyPjxiPjxmb250IHNpemU9Mj5Ob3RlOjwvZm9udD48L2I+IFlvdSBjb3VsZCBvbWl0IHRoZSBzdGVwIDEgYW5kIHByb2NlZWQgdG8gc3RlcCAyLCBmb3IgYWxsIG1vZHVsZXMgZXhjZXB0IGZ1bGwgY2hhcmFjdGVyIHByb3BlcnRpZXMsIGFuZCBsZXQgdGhlIGRlcGVuZGVjeSBhbmFseXNpcyBjb21waWxlIHRoZSByZXF1aXNpdGUgbW9kdWxlLgogICAgICAgIDxsaT4gUnVuIHRoZSB0ZXN0cyBhbmQgdmVyaWZ5IHRoYXQgdGhlIHNlbGYgdGVzdHMgcGFzcy4gPGJyPiA8Y29kZT4gamF2YSAtY2xhc3NwYXRoICRpY3U0al9yb290L2NsYXNzZXMgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEFsbCAtbm90aHJvdyAtdyA8L2NvZGU+CiAgICAgICAgPGxpPiBCdWlsZCB0aGUgamFyIGNvbnRhaW5pbmcgdGhlIG1vZHVsZS4gPGJyPiA8Y29kZT5hbnQgbW9kdWxlSmFyIDwvY29kZT4KICAgICA8L29sPgoKSWYgbW9yZSB0aGFuIG9uZSBtb2R1bGUgaXMgcmVxdWlyZWQsIHRoZSBtb2R1bGUgYnVpbGQgdGFyZ2V0cyBjYW4gYmUgY29uY2F0ZW5hdGVkLCBlLmc6CiAgICA8b2w+CiAgICAgICAgPGxpPiBCdWlsZCB0aGUgbW9kdWxlcy4gPGJyPiA8Y29kZT4gYW50IG5vcm1hbGl6ZXIgY29sbGF0b3IgPC9jb2RlPiA8L2xpPgogICAgICAgIDxsaT4gQnVpbGQgdGhlIHRlc3RzIGZvciB0aGUgbW9kdWxlLiA8YnI+IDxjb2RlPiBhbnQgbm9ybWFsaXplclRlc3RzIGNvbGxhdG9yVGVzdHMgPC9jb2RlPiA8L2xpPgogICAgICAgIDxsaT4gUnVuIHRoZSB0ZXN0cyBhbmQgdmVyaWZ5IHRoYXQgdGhlIHNlbGYgdGVzdHMgcGFzcy4gPGJyPiA8Y29kZT4gamF2YSAtY2xhc3NwYXRoICRpY3U0al9yb290L2NsYXNzZXMgY29tLmlibS5pY3UuZGV2LnRlc3QuVGVzdEFsbCAtbm90aHJvdyAtdyA8L2NvZGU+CiAgICAgICAgPGxpPiBCdWlsZCB0aGUgamFyIGNvbnRhaW5pbmcgdGhlIG1vZHVsZS4gPGJyPiA8Y29kZT5hbnQgbW9kdWxlSmFyIDwvY29kZT4KICAgICA8L29sPgoKPGg1PiBOb3RlczogPC9oNT4KPHVsPgogICAgPGxpPlJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBJQ1U0SiBpcyBidWlsdCBhcyBhIHdob2xlIG9yIGFzIG1vZHVsZXMsIHRoZSBqYXIgZmlsZSBwcm9kdWNlZCBpcyBuYW1lZCA8ZW0+aWN1NGouamFyPC9lbT4uPC9saT4KICAgIDxsaT5UbyBhc2NlcnRhaW4gaWYgYW4gaWN1NGouamFyIGNvbnRhaW5zIGFsbCBpZiBJQ1Ugb3Igbm90LCBwbGVhc2Ugc2VlIHRoZSBtYW5pZmVzdCBmaWxlIG9mIGphcjwvbGk+CiAgICA8bGk+VGhlIHRhcmdldCBtb2R1bGVKYXIgZG9lcyBub3QgZGVwZW5kIG9uIGFueSBvdGhlciB0YXJnZXQuIEl0IGp1c3QgY3JlYXRlcyBhIGphciBvZiBhbGwgY2xhc3MgZmlsZXMgdW5kZXIKICAgICAgICAkaWN1NGpfcm9vdC9jbGFzc2VzL2NvbS9pYm0vaWN1LywgZXhjbHVkaW5nIHRoZSBjbGFzc3MgZmlsZXMgaW4gJGljdTRqX3Jvb3QvY2xhc3Nlcy9jb20vaWJtL2ljdS9kZXYgZm9sZGVyPC9saT4KICAgIDxsaT5UaGUgbGlzdCBvZiBtb2R1bGUgYnVpbGQgdGFyZ2V0cyBjYW4gYmUgb2J0YWluZWQgYnkgcnVubmluZyB0aGUgY29tbWFuZCA6IDxjb2RlPiBhbnQgLXByb2plY3RoZWxwIDwvY29kZT4gPC9saT4KICAgIDxsaT5UbyB2ZXJpZnkgdGhhdCB0aGUgamFyIGZpbGUgYnVpbHQgdXNpbmcgdGhlIG1vZHVsZSB0YXJnZXQgd29ya3MsIHBsZWFzZSBkZWxldGUgYWxsIGRpcmVjdG9yaWVzIHVuZGVyICRpY3U0al9yb290L2NsYXNzZXMvY29tL2libS9pY3UvLAogICAgICAgIGV4Y2VwdCAkaWN1NGpfcm9vdC9jbGFzc2VzL2NvbS9pYm0vaWN1L2RldiwgYW5kIHJ1biB0aGUgdGVzdHMgYWdhaW5zdCB0aGUgamFyIGZpbGUuCiAgICAgICAgPGJyPjxjb2RlPiBqYXZhIC1jbGFzc3BhdGggJGljdTRqX3Jvb3QvaWN1NGouamFyIGNvbS5pYm0uaWN1LmRldi50ZXN0LlRlc3RBbGwgLW5vdGhyb3cgLXcgPC9jb2RlPgogICAgIDwvbGk+CjwvdWw+Cgo8aDM+PGEgbmFtZT0idHJ5aW5nb3V0Ij48L2E+PHU+VHJ5aW5nIE91dCBJQ1U0SjwvdT48L2gzPgoKPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiB0aGUgZGVtb3MgcHJvdmlkZWQgd2l0aCBJQ1U0SiBhcmUgZm9yIHRoZQptb3N0IHBhcnQgdW5kb2N1bWVudGVkLiAgVGhpcyBsaXN0IGNhbiBzaG93IHlvdSB3aGVyZSB0byBsb29rLCBidXQgeW91J2xsCmhhdmUgdG8gZXhwZXJpbWVudCBhIGJpdC4gIFRoZSBkZW1vcyAod2l0aCB0aGUKZXhjZXB0aW9uIG9mIHJpY2hlZGl0KSBhcmUgPHN0cm9uZz51bnN1cHBvcnRlZDwvc3Ryb25nPiBhbmQgbWF5IGNoYW5nZQpvciBkaXNhcHBlYXIgd2l0aG91dCBub3RpY2UuPC9wPgo8cD5UaGUgaWN1NGouamFyIGZpbGUgY29udGFpbnMgb25seSB0aGUgY29yZSBJQ1U0SiBjbGFzc2VzLCBub3QgdGhlCmRlbW8gY2xhc3Nlcywgc28gdW5sZXNzIHlvdSBidWlsZCBJQ1U0SiB0aGVyZSBpcyBsaXR0bGUgdG8gdHJ5IG91dC4KCjxoND5SaWNoIEVkaXQ8L2g0PgpUbyB0cnkgb3V0IHRoZSA8c3Ryb25nPnJpY2hlZGl0PC9zdHJvbmc+IHBhY2thZ2UsIGZpcnN0IGJ1aWxkIHRoZSByaWNoZWRpdEphciB0YXJnZXQuClRoaXMgaXMgYSAncnVubmFibGUnIGphciBmaWxlLiAgVG8gcnVuIHRoZSByaWNoZWRpdCBkZW1vLCB0eXBlOgo8dHQ+PGJsb2NrcXVvdGU+ICBqYXZhIC1qYXIgJFJvb3QvcmljaGVkaXQvcmljaGVkaXQuamFyPC9ibG9ja3F1b3RlPjwvdHQ+CgpUaGlzIHdpbGwgcHJlc2VudCBhbiBlbXB0eSBlZGl0IHBhbmUgd2l0aCBhbiBhd3QgaW50ZXJmYWNlLjwvcD4KCjxwPldpdGggYSBmdWxsZXIgY29tbWFuZCBsaW5lIHlvdSBjYW4gdHJ5IG91dCBvdGhlciBvcHRpb25zLCBmb3IgZXhhbXBsZToKPHR0PjxibG9ja3F1b3RlPiAgIGphdmEgLWNsYXNzcGF0aCAkUm9vdC9yaWNoZWRpdC9yaWNoZWRpdC5qYXIgY29tLmlibS5yaWNodGV4dC5kZW1vLkVkaXREZW1vIFstc3dpbmddW2ZpbGVdPC9ibG9ja3F1b3RlPjwvdHQ+ClRoaXMgd2lsbCB1c2UgYW4gYXd0IEdVSSwgb3IgYSBzd2luZyBHVUkgaWYKPHR0Pi1zd2luZzwvdHQ+IGlzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgSXQgd2lsbCBvcGVuIGEgdGV4dApmaWxlIGlmIG9uZSBpcyBwcm92aWRlZCwgb3RoZXJ3aXNlIGl0IHdpbGwgb3BlbiBhIGJsYW5rIHBhZ2UuICBDbGljawp0byB0eXBlLjwvcD4KPHA+CllvdSBjYW4gYWRkIHRhYnMgdG8gdGhlIHRhYiBydWxlciBieSBjbGlja2luZyBpbiB0aGUgcnVsZXIgd2hpbGUgaG9sZGluZyBkb3duIHRoZSBjb250cm9sIGtleS4KQ2xpY2tpbmcgb24gYW4gZXhpc3RpbmcgdGFiIGNoYW5nZXMgYmV0d2VlbiBsZWZ0LCByaWdodCwgY2VudGVyLCBhbmQgZGVjaW1hbCB0YWJzLiAgRHJhZ2dpbmcKYSB0YWIgbW92ZXMgaXQsIGRyYWdnaW5nIGl0IG9mZiB0aGUgcnVsZXIgcmVtb3ZlcyBpdC48L3A+CjxwPgpZb3UgY2FuIGV4cGVyaW1lbnQgd2l0aCBjb21wbGV4IHRleHQgYnkgdXNpbmcgdGhlIGtleW1hcCBmdW5jdGlvbnMuClBsZWFzZSBub3RlIHRoYXQgdGhlc2UgYXJlIG1haW5seSBmb3IgZGVtbyBwdXJwb3NlcywgZm9yIHJlYWwgd29yawp3aXRoIEFyYWJpYyBvciBIZWJyZXcgeW91IHdpbGwgd2FudCB0byB1c2UgYW4gaW5wdXQgbWV0aG9kLiAgWW91IHdpbGwKbmVlZCB0byB1c2UgYSBmb250IHRoYXQgc3VwcG9ydHMgQXJhYmljIG9yIEhlYnJldywgJ0x1Y2lkYSBTYW5zJyAocHJvdmlkZWQKd2l0aCBKYXZhKSBzdXBwb3J0cyB0aGVzZSBsYW5ndWFnZXMuPC9wPgoKPGg0Pk90aGVyIGRlbW9zPC9oND4KPHA+VGhlIG90aGVyIGRlbW8gcHJvZ3JhbXMgYXJlIDxzdHJvbmc+bm90IHN1cHBvcnRlZDwvc3Ryb25nPiBhbmQgZXhpc3Qgb25seSB0byBsZXQgeW91CmV4cGVyaW1lbnQgd2l0aCB0aGUgSUNVNEogY2xhc3Nlcy4gIEZpcnN0LCBidWlsZCBJQ1U0SiB1c2luZyA8dHQ+YW50Jm5ic3A7YWxsPC90dD4uICBUaGVuIHRyeQpvbmUgb2YgdGhlIGZvbGxvd2luZzoKPHVsPgo8bGk+PHR0PmphdmEgLWNsYXNzcGF0aCBjbGFzc2VzIGNvbS5pYm0uaWN1LmRldi5kZW1vLmNhbGVuZGFyLkNhbGVuZGFyQXBwPC90dD4KPGxpPjx0dD5qYXZhIC1jbGFzc3BhdGggY2xhc3NlcyBjb20uaWJtLmljdS5kZXYuZGVtby5ob2xpZGF5LkhvbGlkYXlDYWxlbmRhckRlbW88L3R0Pgo8bGk+PHR0PmphdmEgLWNsYXNzcGF0aCBjbGFzc2VzIGNvbS5pYm0uaWN1LmRldi5kZW1vLnJiYmkuVGV4dEJvdW5kRGVtbzwvdHQ+PGJyPihDbGljayBpbiB0aGUgdGV4dCwgdGhlbiB1c2UgPHR0PmN0cmwtTjwvdHQ+IGFuZCA8dHQ+Y3RybC1QPC90dD4gdG8gc2VsZWN0IHRoZSBuZXh0IG9yIHByZXZpb3VzIGJsb2NrIG9mIHRleHQuKQo8bGk+PHR0PmphdmEgLWNsYXNzcGF0aCBjbGFzc2VzIGNvbS5pYm0uaWN1LmRldi5kZW1vLnJibmYuUmJuZkRlbW88L3R0Pgo8bGk+PHR0PmphdmEgLWNsYXNzcGF0aCBjbGFzc2VzIGNvbS5pYm0uaWN1LmRldi5kZW1vLnRyYW5zbGl0LkRlbW88L3R0Pgo8L3VsPgo8L3A+Cgo8YSBuYW1lPSJyZXNvdXJjZXMiPgo8aDM+PHU+SUNVNEogUmVzb3VyY2UgSW5mb3JtYXRpb248L3U+PC9oMz4KPC9hPgpTdGFydGluZyB3aXRoIHJlbGVhc2UgMi4xLCBJQ1U0SiBpbmNsdWRlcyBpdHMgb3duCnJlc291cmNlIGluZm9ybWF0aW9uCndoaWNoIGlzIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgb2YgdGhlIEpESyByZXNvdXJjZSBpbmZvcm1hdGlvbi4gIFRoZQpuZXcgSUNVNEogaW5mb3JtYXRpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgaW5mb3JtYXRpb24gaW4gSUNVNEMgYW5kCnVsdGltYXRlbHkgZGVyaXZlcyBmcm9tIHRoZSBzYW1lIHNvdXJjZS4gIFRoaXMgYWxsb3dzIElDVTRKIDIuMSBhbmQgYWJvdmUKdG8gYmUKYnVpbHQgb24sIGFuZCBydW4gb24sIEpESyAxLjQuCjwvcD4KPHA+CkJ5IGRlZmF1bHQgdGhlIElDVTRKIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBhbGwgb2YgdGhlIG5ldyByZXNvdXJjZQppbmZvcm1hdGlvbi4gIEl0IGlzIGxvY2F0ZWQgaW4gdGhlIHBhY2thZ2UgY29tLmlibS5pY3UuaW1wbC5kYXRhLCBhcyBhCnNldCBvZiBjbGFzcyBmaWxlcyBuYW1lZCAiTG9jYWxlRWxlbWVudHMiIGZvbGxvd2VkIGJ5IHRoZSBuYW1lcyBvZgpsb2NhbGVzIGluIHRoZSBmb3JtIF94eF9ZWV9aWlpaLCB3aGVyZSAneHgnIGlzIHRoZSB0d28tbGV0dGVyIGxhbmd1YWdlCmNvZGUsICdZWScgaXMgdGhlIGNvdW50cnkgY29kZSwgYW5kICdaWicgKHdoaWNoIGNhbiBiZSBhbnkgbGVuZ3RoKSBpcwphIHZhcmlhbnQuICBNYW55IG9mIHRoZXNlIGZpZWxkcyBjYW4gYmUgb21pdHRlZC4gIExvY2FsZSBuYW1pbmcgaXMKZG9jdW1lbnRlZCB0aGUgTG9jYWxlIGNsYXNzLCBqYXZhLnV0aWwuTG9jYWxlLCBhbmQgdGhlIHVzZSBvZiB0aGVzZQpuYW1lcyBpbiBzZWFyY2hpbmcgZm9yIHJlc291cmNlcyBpcyBkb2N1bWVudGVkIGluCmphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZS4KPC9wPgo8cD4KU29tZSBvZiB0aGVzZSBmaWxlcyByZXF1aXJlIHNlcGFyYXRlIGJpbmFyeSBkYXRhLiAgVGhlIG5hbWVzIG9mIHRoZQpiaW5hcnkgZGF0YSBmaWxlcyBzdGFydCB3aXRoICJDb2xsYXRpb25FbGVtZW50cyIsIHRoZW4gdGhlCmNvcnJlc3BvbmRpbmcgTG9jYWxlIHN0cmluZywgYW5kIGVuZCB3aXRoICcucmVzJy4gIEFub3RoZXIgZGF0YSBmaWxlCihvbmx5IG9uZSBhdCB0aGUgbW9tZW50KSBzdGFydHMgd2l0aCB0aGUgbmFtZSAiQnJlYWtEaWN0aW9uYXJ5RGF0YSIsCnRoZSBjb3JyZXNwb25kaW5nIExvY2FsZSBzdHJpbmcsIGFuZCBlbmRzIHdpdGggJy51Y3MnLgo8L3A+CjxwPgpTb21lIG9mIHRoZSBMb2NhbGVFbGVtZW50cyBmaWxlcyBzaGFyZSBkYXRhIHdpdGggb3RoZXIgTG9jYWxlRWxlbWVudHMKZmlsZXMsIGJlY2F1c2Ugc29tZSBMb2NhbGUgbmFtZXMgaGF2ZSBjaGFuZ2VkLiBGb3IgZXhhbXBsZSwgaGVfSUwgdXNlZAp0byBiZSBpd19JTC4gIEluIG9yZGVyIHRvIHN1cHBvcnQgYm90aCBuYW1lcyBidXQgbm90IGR1cGxpY2F0ZSB0aGUKZGF0YSwgb25lIG9mIHRoZSBjbGFzcyBmaWxlcyByZWZlcnMgdG8gdGhlIG90aGVyIGNsYXNzIGZpbGUncyBkYXRhLgo8L3A+CjxwPgpUaGUgbGlzdCBvZiBzdXBwb3J0ZWQgcmVzb3VyY2VzIGlzIGZvdW5kIGluIGEgZmlsZSBjYWxsZWQKTG9jYWxlRWxlbWVudHNfaW5kZXguY2xhc3MuICBUaGlzIGNvbnRhaW5zIHRoZSBuYW1lcyBvZiBhbGwgdGhlCkxvY2FsZUVsZW1lbnRzIHJlc291cmNlcyBhbmQgaXMgdGhlIHNvdXJjZSBvZiB0aGUgaW5mb3JtYXRpb24gcmV0dXJuZWQKYnkgQVBJIHN1Y2ggYXMgQ2FsZW5kYXIuZ2V0QXZhaWxhYmxlTG9jYWxlcy4gKE5vdGU6IGZvciBlYXNlIG9mCmN1c3RvbWl6YXRpb24gdGhpcyBwcm9iYWJseSBzaG91bGQgYmUgYSB0ZXh0IGZpbGUpLgo8L3A+CjxwPgpMb2NhbGVFbGVtZW50cyBmaWxlcyBmb3JtIGEgaGllcmFyY2h5LCB3aXRoIHVwIHRvIGZvdXIgbGV2ZWxzOiBhIHJvb3QsCmxhbmd1YWdlLCByZWdpb24gKGNvdW50cnkpLCBhbmQgdmFyaWFudC4gIFNlYXJjaGVzIGZvciBsb2NhbGUgZGF0YQphdHRlbXB0IHRvIG1hdGNoIGFzIGZhciBkb3duIHRoZSBoaWVyYXJjaHkgYXMgcG9zc2libGUsIGZvciBleGFtcGxlLAonaGVfSUwnIHdpbGwgbWF0Y2ggTG9jYWxlRWxlbWVudHNfaGVfSUwsIGJ1dCAnaGVfVVMnIHdpbGwgbWF0Y2gKTG9jYWxlRWxlbWVudHNfaGUgKHNpbmNlIHRoZXJlIGlzIG5vICdVUycgdmFyaWFudCBmb3IgJ2hlJywgYW5kCid4eF9ZWScgd2lsbCBtYXRjaCBMb2NhbGVFbGVtZW50cyAoc2luY2UgdGhlcmUgaXMgbm8gJ3h4JyBsYW5ndWFnZQpjb2RlIGluIHRoZSBMb2NhbGVFbGVtZW50cyBoaWVyYXJjaHkpLiAgQWdhaW4sIHNlZQpqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCjwvcD4KPHA+CldpdGggdGhpcyBpbiBtaW5kLCB0aGUgd2F5IHRvIHJlbW92ZSBMb2NhbGVEYXRhIGlzIHRvIG1ha2Ugc3VyZSB0bwpyZW1vdmUgYWxsIGRlcGVuZGVuY2llcyBvbiB0aGF0IGRhdGEgYXMgd2VsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UKcmVtb3ZlIExvY2FsZUVsZW1lbnRzX2hlLmNsYXNzLCB5b3UgbmVlZCB0byByZW1vdmUKTG9jYWxlRWxlbWVudHNfaGVfSUwuY2xhc3MsIHNpbmNlIGl0IGlzIGxvd2VyIGluIHRoZSBoaWVyYXJjaHksIGFuZAp5b3UgbXVzdCByZW1vdmUgTG9jYWxlRWxlbWVudHNfaXcuY2xhc3MsIHNpbmNlIGl0IHJlZmVyZW5jZXMKTG9jYWxlRWxlbWVudHNfaGUsIGFuZCBMb2NhbGVFTGVtZW50c19pd19JTC5jbGFzcywgc2luY2UgaXQgZGVwZW5kcyBvbgppdCAoYW5kIGFsc28gcmVmZXJlbmNlcyBMb2NhbGVFbGVtZW50c19oZV9JTCkuICBGb3IgYW5vdGhlciBleGFtcGxlLAppZiB5b3UgcmVtb3ZlIENvbGxhdGlvbkVsZW1lbnRzX3poX19QSU5ZSU4ucmVzLCB5b3UgbXVzdCBhbHNvIHJlbW92ZQpMb2NhbGVFbGVtZW50c196aF9fUElOWUlOLmNsYXNzLCBzaW5jZSBpdCBkZXBlbmRzIG9uIHRoZQpDb2xsYXRpb25FbGVtZW50c196aF9fUElOWUlOLnJlcy4KPC9wPgoKPHA+ClVuZm9ydHVuYXRlbHksIHRoZSBqYXIgdG9vbCBpbiB0aGUgSkRLIHByb3ZpZGVzIG5vIHdheSB0byByZW1vdmUgaXRlbXMKZnJvbSBhIGphciBmaWxlLiAgVGh1cyB5b3UgaGF2ZSB0byBleHRyYWN0IHRoZSByZXNvdXJjZXMsIHJlbW92ZSB0aGUKb25lcyB5b3UgZG9uJ3Qgd2FudCwgYW5kIHRoZW4gY3JlYXRlIGEgbmV3IGphciBmaWxlIHdpdGggdGhlIHJlbWluaW5nCnJlc291cmNlcy4gIFNlZSB0aGUgamFyIHRvb2wgaW5mb3JtYXRpb24gZm9yIGhvdyB0byBkbyB0aGlzLiAgQmVmb3JlCidyZWphcmluZycgdGhlIGZpbGVzLCBiZSBzdXJlIHRvIHRob3JvdWdobHkgdGVzdCB5b3VyIGFwcGxpY2F0aW9uIHdpdGgKdGhlIHJlbWFpbmluZyByZXNvdXJjZXMsIG1ha2luZyBzdXJlIGVhY2ggcmVxdWlyZWQgcmVzb3VyY2UgaXMKcHJlc2VudC4KPC9wPgoKPGgzPkRldmVsb3BpbmcgUmVzb3VyY2VzIHRvIGJlIHVzZWQgd2l0aCBJQ1U0SjwvaDM+CjxwPgpJQ1U0SiAyLjEgYW5kIGFib3ZlIHVzZXMgdGhlIHN0YW5kYXJkIGNsYXNzIGxvb2t1cCBtZWNoYW5pc20uICBUaGlzIG1lYW5zCmFueSBwcHJvcHJpYXRlbHkgbmFtZWQgcmVzb3VyY2Ugb24gdGhlIENMQVNTUEFUSCB3aWxsIGJlIGxvY2F0ZWQsIGluIHRoZQpvcmRlciBsaXN0ZWQgaW4gdGhlIGNsYXNzcGF0aC4KPC9wPgo8cD4KSWYgeW91IGNyZWF0ZSBhIHJlc291cmNlIGZpbGUKY29tLmlibS5pY3UuaW1wbC5kYXRhLkxvY2FsZUVsZW1lbnRzX3h4X1lZLmNsYXNzLCBhbmQgbGlzdCBpdCBvbiB0aGUKQ0xBU1NQQVRIIGJlZm9yZSBpY3U0ai5qYXIsIHlvdXIgcmVzb3VyY2Ugd2lsbCBiZSB1c2VkIGluIHBsYWNlIG9mIGFueQpleGlzdGluZyBMb2NhbGVFbGVtZW50c194eF9ZWSByZXNvdXJjZSBpbiBpY3U0ai4gIFRoaXMgaXMgYSBnb29kIHdheQp0byB0cnkgb3V0IGNoYW5nZXMgdG8gcmVzb3VyY2VzLiAgWW91IGNhbiwgZm9yIGV4YW1wbGUsIGluY2x1ZGUgdGhlCnJlc291cmNlIGluIHlvdXIgYXBwbGljYXRpb24ncyBqYXIgZmlsZSBhbmQgbGlzdCBpdCBhaGVhZCBvZgppY3U0ai5qYXIuCjwvcD4KPHA+CkluIG9yZGVyIHRvIGNyZWF0ZSBuZXcgcmVzb3VyY2VzLCB5b3UgZmlyc3QgbXVzdCB0aG9yb3VnaGx5IHVuZGVyc3RhbmQKdGhlIHZhcmlvdXMgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSByZXNvdXJjZSBmaWxlcywgdGhlaXIgc3ludGF4IGFuZApkZXBlbmRlbmNpZXMuICBZb3UgY2Fubm90IHNpbXBseSAncGF0Y2gnIGV4aXN0aW5nIHJlc291cmNlIGZpbGVzIHdpdGgKYSBzaW5nbGUgY2hhbmdlIGJlY2F1c2UgdGhlIG5ldyBmaWxlIGNvbXBsZXRlbHkgcmVwbGFjZXMgdGhlIG9sZCBmaWxlCmluIHRoZSByZXNvdXJjZSBoaWVyYXJjaHkuICBJbiBnZW5lcmFsLCB0aGUgbmV3IHJlc291cmNlIGZpbGUgc2hvdWxkCmNvbnRhaW4gYWxsIHRoZSBkaWZmZXJlbnQgZGF0YSB0aGF0IHRoZSBvbGQgb25lIGRpZCwgcGx1cyB5b3VyCmNoYW5nZXMuCjwvcD4KPHA+CkFkZGluZyBhIG5ldyAnbGVhZicgcmVzb3VyY2UgaXMgZWFzaWVzdC4gIEVsZW1lbnRzIGRlZmluZWQgaW4gdGhhdApyZXNvdXJjZSB3aWxsIG92ZXJyaWRlIGNvcnJlc3BvbmRpbmcgb25lcyBpbiB0aGUgcmVzb3VyY2VzIGZ1cnRoZXIgdXAKdGhlIGhpZXJhcmNoeS4gIFRodXMgeW91IGNhbiwgZm9yIGV4YW1wbGUsIHRyeSBvdXQgbmV3IGxvY2FsaXplZCBuYW1lcwpvZiBkYXlzIG9mIHRoZSB3ZWVrLCBhcyB0aGV5IGFyZSBhbGwgY29udGFpbmVkIGluIG9uZSBlbGVtZW50LiAgVGhlCnZhcmlhbnQgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIHRlbXBvcmFyaWx5IHRyeSBvdXQgbmV3IHZlcnNpb25zIG9mCmV4aXN0aW5nIHJlc291cmNlIGVsZW1lbnRzICh0aG91Z2ggd2UgZG9uJ3QgcmVjb21tZW5kIHNoaXBwaW5nIHRoaXMKd2F5KS4gIE5vdGUgdGhvdWdoIHRoYXQgc29tZSByZXNvdXJjZXMgaGF2ZSBkZXRhaWxlZCBkZXBlbmRlbmNpZXMgb24KZWFjaCBvdGhlciwgc28gdGhhdCB5b3UgY2Fubm90IHNpbXBseSBhc3N1bWUgdGhhdCBhIG5ldyBlbGVtZW50IHdpdGgKdGhlIHNhbWUgc3RydWN0dXJlIGFuZCBudW1iZXIgb2YgY29udGVudHMgd2lsbCAnanVzdCB3b3JrLicKPC9wPgo8cD4KUGF0Y2hpbmcgYW4gJ2ludGVybmFsJyByZXNvdXJjZSAoc2F5LCBvbmUgY29ycmVzcG9uZGluZyB0byBhbiBleGlzdGluZwpsYW5ndWFnZSByZXNvdXJjZSB0aGF0IGhhcyBjaGlsZHJlbikgcmVxdWlyZXMgY2FyZWZ1bCBhbmFseXNpcyBvZiB0aGUKY29udGVudHMgb2YgdGhlIHJlc291cmNlcy4KPC9wPgoKPHA+CkxvY2FsZUVsZW1lbnRzIHJlc291cmNlIGRhdGEgaW4gSUNVNEogaXMgY2hlY2tlZCBpbiB0byB0aGUKcmVwb3NpdG9yeSBhcyBwcmVjb21waWxlZCBjbGFzcyBmaWxlcy4gIFRoaXMgbWVhbnMgdGhhdCBpbnNwZWN0aW5nIHRoZQpjb250ZW50cyBvZiB0aGVzZSByZXNvdXJjZXMgaXMgZGlmZmljdWx0LiAgVGhleSBhcmUgY29tcGlsZWQgZnJvbSBqYXZhCmZpbGVzIHRoYXQgaW4gdHVybiBhcmUgbWFjaGluZS1nZW5lcmF0ZWQgZnJvbSBJQ1U0QyBiaW5hcnkgZGF0YSwgdXNpbmcKdGhlIGdlbnJiIHRvb2wgaW4gSUNVNEMuICBZb3UgY2FuIHZpZXcgdGhlIGNvbnRlbnRzIG9mIHRoZSBJQ1U0QyB0ZXh0CnJlc291cmNlIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBJQ1U0SiByZXNvdXJjZXMsIGFzCnRoZXkgYXJlIHRoZSBzYW1lLgo8L3A+Cgo8aDM+RGV2ZWxvcGluZyBJQ1U0SiBSZXNvdXJjZXM8L2gzPgo8cD4KQ3VycmVudGx5IG9ubHkgdGhlIExvY2FsZUVsZW1lbnRzIHJlc291cmNlIGRhdGEgaXMgc2hhcmVkLCBvdGhlciBJQ1UKcmVzb3VyY2VzIChjYWxlbmRhciwgdHJhbnNsaXRlcmF0b3IsIGV0Yy4pIGFyZSBzdGlsbCBjaGVja2VkIGluCmRpcmVjdGx5IHRvIElDVTRKIGFzIHNvdXJjZSBmaWxlcy4gIFRoaXMgbWVhbnMgdGhhdCBkZXZlbG9wbWVudCBhbmQKbWFpbnRlbmFuY2Ugb2YgdGhlc2UgcmVzb3VyY2VzIGNvbnRpbnVlcyBhcyBiZWZvcmUsIG9ubHkKTG9jYWxlRWxlbWVudHMgcmVzb3VyY2UgZGF0YSBoYXMgYmVlbiBjaGFuZ2VkIGluIElDVTRKIDIuMS4gIFRoaXMKcHJvYmFibHkgd2lsbCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBvbmNlIHdlIHdvcmsgb3V0IGEgcmVhc29uYWJsZQptZWNoYW5pc20gZm9yIHN0b3JpbmcgYW5kIGdlbmVyYXRpbmcgdGhlIHJlc291cmNlIGRhdGEuCjwvcD4KPHA+Ck9uZSBnb2FsIG9mIHVzaW5nIHRoZSBzYW1lIHJlc291cmNlIGRhdGEgYXMgSUNVNEMgaXMgdG8gYXZvaWQga2VlcGluZwpyZWR1bmRhbnQgY29waWVzIG9mIHRoZSByZXNvdXJjZSBkYXRhLiAgQ3VycmVudGx5IHRoZXJlIGlzIG5vIHNlcGFyYXRlCnJlcG9zaXRvcnkgb2YgdGhlICdtYXN0ZXInIHJlc291cmNlIGRhdGEsIGl0IGlzIGNoZWNrZWQgaW4gdG8gSUNVNEMsCmFuZCB0aGUgdG9vbHMgZm9yIGNvbnZlcnRpbmcgaXQgdG8gLmphdmEgZmlsZXMgYXJlIElDVTRDIHRvb2xzLiAgVGhpcwppcyBpbmNvbnZlbmllbnQgZm9yIHdvcmtpbmcgaW4gSmF2YSwgYnV0IHNpbmNlIG1haW50ZW5hbmNlIG9mIElDVTRKCmFuZCBJQ1U0QyBpcyBzdXBwb3NlZCB0byBnbyBvbiAnaW4gcGFyYWxsZWwsJyBhcyBhIHByYWN0aWNhbCBtYXR0ZXIKcGVvcGxlIHdpbGwgaGF2ZSB0byBiZSBmYW1pbGlhciB3aXRoIGRldmVsb3BtZW50IGluIGJvdGggQyBhbmQgSmF2YSwKYW5kIHdpdGggdGhlIGNvbnZlbnRpb25zIGFuZCBzdHJ1Y3R1cmUgb2YgZWFjaCBwcm9qZWN0LiAgQWRkaXRpb25hbGx5LApzaGFyaW5nIG9mIGRhdGEgbWVhbnMgdGhhdCBtb2RpZmljYXRpb25zIHRvIGRhdGEgaW1tZWRpYXRlbHkgaW1wYWN0CmJvdGggcHJvamVjdHMgKGFzIGl0IHNob3VsZCkgYW5kIHRodXMgYm90aCBwcm9qZWN0cyBuZWVkIHRvIGJlIHRlc3RlZAp3aGVuIHN1Y2ggY2hhbmdlcyBhcmUgbWFkZS4gIFRoZSBidWxrIG9mIHRoZSB0b29scyBhcmUgY3VycmVudGx5IG9uCnRoZSBJQ1U0QyBzaWRlLCBhbmQgd2lsbCBsaWtlbHkgc3RheSB0aGF0IHdheSwgc28gdGhpcyBzZWVtcyBsaWtlIGEKcmVhc29uYWJsZSBpbml0aWFsIGFwcHJvYWNoIHRvIHNoYXJpbmcgdGhlIGRhdGEuCjwvcD4KCjxwPgpXaGlsZSBwcm90b3R5cGluZyBvZiBMb2NhbGVFbGVtZW50cyBkYXRhIGNhbiBvY2N1ciBpbiBlaXRoZXIgSmF2YSBvcgpDLCB0aGUgZmluYWwgdmVyc2lvbiBzaG91bGQgYmUgY2hlY2tlZCBpbiB0byBJQ1U0QyBpbiB0ZXh0IGZvcm1hdC4KR2VucmIgaXMgdGhlbiBydW4gdG8gZ2VuZXJhdGUgdGhlIC5qYXZhIGFuZCAucmVzIGZpbGVzLiAgVGhleSBhcmUgdGhlbgpjb21waWxlZCBhbmQgamFyJ2QgaW50byB0aGUgZmlsZSBJQ1VMb2NhbGVEYXRhLmphci4gIFRoZSByZXN1bHRpbmcgamFyCmZpbGUgaXMgdGhlbiBjaGVja2VkIGluIHRvIElDVTRKIGFzCnNyYy9jb20vaWJtL2ljdS9kZXYvZGF0YS9JQ1VMb2NhbGVEYXRhLmphci4gIChUaGlzIGlzIG5vdCBncmVhdCBidXQgaXQKYWxsb3dzIElDVTRKIHRvIGJlIGRvd25sb2FkZWQgYW5kIGJ1aWx0IGFzIG9uZSBwcm9qZWN0LCBpbnN0ZWFkIG9mCnR3bywgb25lIGZvciBsb2NhbGUgZGF0YSBhbmQgb25lIGZvciBJQ1U0SiBwcm9wZXIuICBHaXZlbiB0aGUgMi40CnNjaGVkdWxlIGl0IHdhc24ndCBwb3NzaWJsZSB0byB3b3JrIG91dCB0aGUgbGFyZ2VyIGRhdGEgc2hhcmluZwpwcm9ibGVtIGluIHRpbWUsIHNvIHdlIHRyaWVkIHRvIGxpbWl0IHRoZSBpbXBhY3QgdG8ganVzdCB3aGF0IHdhcwpuZWVkZWQgdG8gZ2V0IEpESyAxLjQgc3VwcG9ydCB1cCBhbmQgcnVubmluZy4pCjwvcD4KCjxwPgpUaGUgZmlsZXMgaW4gSUNVTG9jYWxlRGF0YS5qYXIgZ2V0IGV4dHJhY3RlZCB0byBjb20vaWJtL2ljdS9pbXBsL2RhdGEgaW4KdGhlIGJ1aWxkIGRpcmVjdG9yeSB3aGVuIHRoZSAnY29yZScgdGFyZ2V0IGlzIGJ1aWx0LiAgVGhlcmVhZnRlciwgYXMKbG9uZyBhcyB0aGUgZmlsZSBMb2NhbGVFbGVtZW50c19pbmRleC5jbGFzcyBmaWxlIGlzIHVudG91Y2hlZCwgdGhleSB3aWxsCm5vdCBiZSBleHRyYWN0ZWQgYWdhaW4uICBCdWlsZGluZyB0aGUgJ3Jlc291cmNlJyB0YXJnZXQgd2lsbCBmb3JjZSB0aGUKcmVzb3VyY2VzIHRvIG9uY2UgYWdhaW4gYmUgZXh0cmFjdGVkLiAgRXh0cmFjdGlvbiB3aWxsCm92ZXJ3cml0ZSBhbnkgY29ycmVzcG9uZGluZyAuY2xhc3MgZmlsZXMgYWxyZWFkeSBpbiB0aGF0IGRpcmVjdG9yeS4KPC9wPgo8aDQ+QnVpbGRpbmcgSUNVNEogUmVzb3VyY2VzIGZyb20gSUNVNEM8L2g0PgogIDxvbD4KICAgIDxsaT4gRG93bmxvYWQgYW5kIGJ1aWxkIElDVSBvbiBhIDxiPkJpZyBFbmRpYW48L2I+IG1hY2hpbmUgPC9saT4KICAgIDxsaT4gRG93bmxvYWQgYW5kIGJ1aWxkIElDVTRKIG9uIHRoZSBzYW1lIG1hY2hpbmU8L2xpPgogICAgPGxpPiBDaGFuZ2UgZGlyZWN0b3J5IHRvICRpY3Vfcm9vdFxzb3VyY2VcdG9vbHNcZ2VucmIgIDwvbGk+CiAgICA8bGk+IExhdW5jaCBnZW5yYmphci5wbCBmcm9tIHRoYXQgZGlyZWN0b3J5IGl0c2VsZiB3aXRoIHRoZSBjb21tYW5kCiAgICAgICAgPGJyPgogICAgICAgICBnZW5yYmphci5wbCAkaWN1X3Jvb3RfZGlyICRpY3U0al9yb290ICZsdDtsZF9wYXRoX3ZhcmlhYmxlX25hbWUmZ3Q7IFsmbHQ7bG9jYWxlJmd0OytdCiAgICAgICAgPGJyPgogICAgICAgIFRvIGNyZWF0ZSBhbGwgdGhlIGxvY2FsZSBkYXRhIGZpbGVzIG9taXQgdGhlIGxvY2FsZSBhcmd1bWVudAogICAgPC9saT4KICA8L29sPgogIEV4ZWN1dGlvbiBvZiBnZW5yYmphci5wbCBzY3JpcHQgd2lsbCBjcmVhdGUgdGhlIHJlcXVpcmVkIHNvdXJjZSAoKi5qYXZhKSBmaWxlcyBhbmQKICBjbGFzcyBmaWxlIGluICRpY3Vfcm9vdFxzb3VyY2VcZGF0YVxsb2NhbGVzXGphdmEuCiAgVGhlIElDVUxvY2FsZURhdGEuamFyIGlzIG1vdmVkIHRvICRpY3U0al9yb290XHNyY1xjb21caWJtXGljdVxpbXBsXGRhdGEgZGlyZWN0b3J5LgoKPGgzPjxhIG5hbWU9IldoZXJlVG9GaW5kTW9yZSI+PC9hPjx1PldoZXJlIHRvIEZpbmQgTW9yZSBJbmZvcm1hdGlvbjwvdT48L2gzPgoKPHA+Rm9yIGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIHRoaXMgY3VycmVudCByZWxlYXNlLCBwbGVhc2UgcmVmZXIgdG8gdGhlIDxhIGhyZWY9InJlbGVhc2Vub3Rlcy5odG1sIj5yZWxlYXNlbm90ZXMuaHRtbDwvYT48L3A+Cgo8cD48YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovPC9hPiBpcyBhCnBvaW50ZXIgdG8gZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgSW50ZXJuYXRpb25hbCBDb21wb25lbnRzIGZvciBVbmljb2RlIGluIEphdmEgPC9wPgoKPHA+PGEgaHJlZj0iaHR0cDovL3d3dy5pYm0uY29tL2RldmVsb3Blci91bmljb2RlIj5odHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyL3VuaWNvZGU8L2E+IGlzIGEgcG9pbnRlciB0bwppbmZvcm1hdGlvbiBvbiBob3cgdG8gbWFrZSBhcHBsaWNhdGlvbnMgZ2xvYmFsLiA8L3A+Cgo8aDM+PGEgTkFNRT0iU3VibWl0dGluZ0NvbW1lbnRzIj48L2E+PHU+U3VibWl0dGluZyBDb21tZW50cywgUmVxdWVzdGluZyBGZWF0dXJlcyBhbmQKUmVwb3J0aW5nIEJ1Z3M8L3U+PC9oMz4KCjxwPllvdXIgY29tbWVudHMgYXJlIGltcG9ydGFudCB0byBtYWtpbmcgSUNVNEogc3VjY2Vzc2Z1bC4mbmJzcDsgV2UgYXJlIGNvbW1pdHRlZAp0byBmaXhpbmcgYW55IGJ1Z3MsIGFuZCB3aWxsIHVzZSB5b3VyIGZlZWRiYWNrIHRvIGhlbHAgcGxhbiBmdXR1cmUgcmVsZWFzZXMuPC9wPgoKPHA+VG8gc3VibWl0IGNvbW1lbnRzLCByZXF1ZXN0IGZlYXR1cmVzIGFuZCByZXBvcnQgYnVncywgY29udGFjdCB1cyB0aHJvdWdoIHRoZSA8YSBocmVmPWh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai9hcmNoaXZlcy9pbmRleC5odG1sPklDVTRKIG1haWxpbmcgbGlzdDwvYT4uPGJyPgpXaGlsZSB3ZSBhcmUgbm90IGFibGUgdG8gcmVzcG9uZCBpbmRpdmlkdWFsbHkgdG8gZWFjaCBjb21tZW50LCB3ZSBkbyByZXZpZXcgYWxsIGNvbW1lbnRzLjwvcD4KPHA+VGhhbmtzIGZvciB5b3VyIGludGVyZXN0IGluIElDVTRKITwvcD4KCjxociBzaXplPSIyIiB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+Cgo8cD48aT48Zm9udCBzaXplPSItMSI+Q29weXJpZ2h0IKkgMjAwMi0yMDAzIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cwpSZXNlcnZlZC48YnI+CjU2MDAgQ290dGxlIFJvYWQsIFNhbiBKb3PpLCBDQSA5NTE5Mwo8L2ZvbnQ+PC9pPjwvcD4KCjwvYm9keT4KPC9odG1sPgo=