PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CjxodG1sPgogICA8aGVhZD4KICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PQogICAgICAidGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+CiAgICAgIDx0aXRsZT4KICAgICAgICAgQWJzdHJhY3QgV2luZG93aW5nIFRvb2xraXQKICAgICAgPC90aXRsZT4KICAgICAgPGxpbmsgaHJlZj0iLi4vaGFybW9ueS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgogICA8L2hlYWQ+CiAgIDxib2R5PgogICAgICA8aDEgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CiAgICAgICAgIDxhIG5hbWU9InRvcCI+PC9hPkFic3RyYWN0IFdpbmRvdyBUb29sa2l0IEZyYW1ld29yawogICAgICA8L2gxPgogICAgICA8cCBjbGFzcz0iVE9DSGVhZGluZyI+CiAgICAgICAgIDxhIGhyZWY9IiNSZXZpc2lvbl9IaXN0b3J5Ij5SZXZpc2lvbiBIaXN0b3J5PC9hPgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJUT0NIZWFkaW5nIj4KICAgICAgICAgPGEgaHJlZj0iI0Rpc2NsYWltZXJfYW5kX0xlZ2FsX0luZm9ybWF0aW9uIj5EaXNjbGFpbWVyIGFuZAogICAgICAgICBMZWdhbCBJbmZvcm1hdGlvbjwvYT4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0iVE9DSGVhZGluZyI+CiAgICAgICAgIDxhIGhyZWY9IiNBYm91dF9UaGlzX0RvY3VtZW50Ij5BYm91dCB0aGlzIERvY3VtZW50PC9hPgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJUT0MiPgogICAgICAgICA8YSBocmVmPSIjUHVycG9zZSI+UHVycG9zZTwvYT4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0iVE9DIj4KICAgICAgICAgPGEgaHJlZj0iI0ludGVuZGVkX0F1ZGllbmNlIj5JbnRlbmRlZCBBdWRpZW5jZTwvYT4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0iVE9DIj4KICAgICAgICAgPGEgaHJlZj0iI0RvY3VtZW50YXRpb25fQ29udmVudGlvbnMiPkRvY3VtZW50YXRpb24KICAgICAgICAgQ29udmVudGlvbnM8L2E+CiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9IlRPQ0hlYWRpbmciPgogICAgICAgICA8YSBocmVmPSIjSW50cm9kdWN0aW9uIHRvIEFXVCI+SW50cm9kdWN0aW9uIHRvIEFXVDwvYT4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0iVE9DSGVhZGluZyI+CiAgICAgICAgIDxhIGhyZWY9IiNBV1REUkwiPkFXVCBpbiBEUkw8L2E+CiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9IlRPQyI+CiAgICAgICAgIDxhIGhyZWY9IiNFdmVudF9IYW5kbGluZyI+RXZlbnQgSGFuZGxpbmc8L2E+CiAgICAgIDwvcD4KICAgICAgPGJsb2NrcXVvdGU+CiAgICAgICAgIDxwIGNsYXNzPSJUT0MiPgogICAgICAgICAgICA8YSBocmVmPSIjRXZlbnRUeXBlRGVmaW5pdGlvbiI+TmF0aXZlIGFuZCBBV1QgRXZlbnRzPC9hPgogICAgICAgICA8L3A+CiAgICAgICAgIDxwIGNsYXNzPSJUT0MiPgogICAgICAgICAgICA8YSBocmVmPSIjRURUIj5FdmVudCBEaXNwYXRjaCBUaHJlYWQ8L2E+CiAgICAgICAgIDwvcD4KICAgICAgICAgPHAgY2xhc3M9IlRPQyI+CiAgICAgICAgICAgIDxhIGhyZWY9IiNFdmVudFByaW9yaXR5Ij5OYXRpdmUgYW5kIEFXVCBFdmVudHMKICAgICAgICAgICAgUHJpb3JpdHk8L2E+CiAgICAgICAgIDwvcD4KICAgICAgICAgPHAgY2xhc3M9IlRPQyI+CiAgICAgICAgICAgIDxhIGhyZWY9IiNOYXRpdmVFdmVudHMiPk5hdGl2ZSBFdmVudHMgSGFuZGxpbmc8L2E+CiAgICAgICAgIDwvcD4KICAgICAgICAgPHAgY2xhc3M9IlRPQyI+CiAgICAgICAgICAgIDxhIGhyZWY9CiAgICAgICAgICAgICIjTmF0aXZlX2FuZF9BV1RfRXZlbnRfSGFuZGxlcnNfQ29vcGVyYXRpb24iPk5hdGl2ZSBhbmQKICAgICAgICAgICAgQVdUIEV2ZW50IEhhbmRsZXJzIENvb3BlcmF0aW9uPC9hPgogICAgICAgICA8L3A+CiAgICAgIDwvYmxvY2txdW90ZT4KICAgICAgPHAgY2xhc3M9IlRPQyI+CiAgICAgICAgIDxhIGhyZWY9IiNGb2N1c19TdWJzeXN0ZW0iPkZvY3VzIFN1YnN5c3RlbTwvYT4KICAgICAgPC9wPgogICAgICA8YmxvY2txdW90ZT4KICAgICAgICAgPHAgY2xhc3M9IlRPQyI+CiAgICAgICAgICAgIDxhIGhyZWY9IiNGb2N1c19EaXNwYXRjaGVyIj5Gb2N1cyBEaXNwYXRjaGVyPC9hPgogICAgICAgICA8L3A+CiAgICAgICAgIDxwIGNsYXNzPSJUT0MiPgogICAgICAgICAgICA8YSBocmVmPSIjQVdUX2hpZ2hlcl9sZXZlbCI+QVdUIExldmVsPC9hPgogICAgICAgICA8L3A+CiAgICAgICAgIDxwIGNsYXNzPSJUT0MiPgogICAgICAgICAgICA8YSBocmVmPSIjRFJMX0ZvY3VzX0ltcGxlbWVudGF0aW9uX1NwZWNpZmljcyI+RFJMIEZvY3VzCiAgICAgICAgICAgIEltcGxlbWVudGF0aW9uIFNwZWNpZmljczwvYT4KICAgICAgICAgPC9wPgogICAgICA8L2Jsb2NrcXVvdGU+CiAgICAgIDxwIGNsYXNzPSJUT0MiPgogICAgICAgICA8YSBocmVmPSIjVmlzdWFsX1RoZW1lc19pbl9BV1QiPlZpc3VhbCBUaGVtZXMgaW4gQVdUPC9hPgogICAgICA8L3A+CiAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICA8cCBjbGFzcz0iVE9DIj4KICAgICAgICAgICAgPGEgaHJlZj0iI0RlZmF1bHRfdGhlbWUiPkRlZmF1bHQgVGhlbWU8L2E+CiAgICAgICAgIDwvcD4KICAgICAgICAgPHAgY2xhc3M9IlRPQyI+CiAgICAgICAgICAgIDxhIGhyZWY9IiNEZWxpdmVyZWRfdGhlbWVzIj5EZXJpdmVkIFRoZW1lczwvYT4KICAgICAgICAgPC9wPgogICAgICAgICA8cCBjbGFzcz0iVE9DIj4KICAgICAgICAgICAgPGEgaHJlZj0iI0ltcGxlbWVudGF0aW9uX2RldGFpbHMiPkltcGxlbWVudGF0aW9uCiAgICAgICAgICAgIFNwZWNpZmljczwvYT4KICAgICAgICAgPC9wPgogICAgICAgICA8cCBjbGFzcz0iVE9DIj4KICAgICAgICAgICAgPGEgaHJlZj0KICAgICAgICAgICAgIiNVc2luZ19TdGF0ZV9JbnRlcmZhY2VzX2luX2FfU3RhbmRhcmRfQ29tcG9uZW50Ij5Vc2luZwogICAgICAgICAgICBTdGF0ZSBJbnRlcmZhY2VzIGluIGEgU3RhbmRhcmQgQ29tcG9uZW50PC9hPgogICAgICAgICA8L3A+CiAgICAgICAgIDxwIGNsYXNzPSJUT0MiPgogICAgICAgICAgICA8YSBocmVmPSIjV2luZG93cyB0aGVtZSI+V2luZG93cyogVGhlbWU8L2E+CiAgICAgICAgIDwvcD4KICAgICAgPC9ibG9ja3F1b3RlPgogICAgICA8cCBjbGFzcz0iVE9DIj4KICAgICAgICAgPGEgaHJlZj0iI011bHRpLVRocmVhZGluZ19zdXBwb3J0Ij5NdWx0aS10aHJlYWRpbmcKICAgICAgICAgU3VwcG9ydDwvYT4KICAgICAgPC9wPgogICAgICA8YmxvY2txdW90ZT4KICAgICAgICAgPHAgY2xhc3M9IlRPQyI+CiAgICAgICAgICAgIDxhIGhyZWY9IiNXaHlTeW5jaHJvbml6ZSI+V2h5IFN5bmNocm9uaXplPC9hPgogICAgICAgICA8L3A+CiAgICAgICAgIDxwIGNsYXNzPSJUT0MiPgogICAgICAgICAgICA8YSBocmVmPSIjSG93dG9TeW5jIj5Ib3cgdG8gU3luY2hyb25pemU8L2E+CiAgICAgICAgIDwvcD4KICAgICAgICAgPHAgY2xhc3M9IlRPQyI+CiAgICAgICAgICAgIDxhIGhyZWY9IiNXaGVudG9TeW5jIj5XaGVuIHRvIFN5bmNocm9uaXplPC9hPgogICAgICAgICA8L3A+CiAgICAgICAgIDxwIGNsYXNzPSJUT0MiPgogICAgICAgICAgICA8YSBocmVmPSIjU3luY2hyb25pemVyIj5TeW5jaHJvbml6ZXI8L2E+CiAgICAgICAgIDwvcD4KICAgICAgPC9ibG9ja3F1b3RlPgogICAgICA8cCBjbGFzcz0iVE9DSGVhZGluZyI+CiAgICAgICAgIDxhIGhyZWY9IiNSZWZlcmVuY2VzIj5SZWZlcmVuY2VzPC9hPgogICAgICA8L3A+CiAgICAgIDxoMT4KICAgICAgICAgPGEgbmFtZT0iUmV2aXNpb25fSGlzdG9yeSI+PC9hPlJldmlzaW9uIEhpc3RvcnkKICAgICAgPC9oMT4KICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlSGVhZGluZyI+CiAgICAgICAgICAgICAgIFZlcnNpb24KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUhlYWRpbmciPgogICAgICAgICAgICAgICBWZXJzaW9uIEluZm9ybWF0aW9uCiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVIZWFkaW5nIj4KICAgICAgICAgICAgICAgRGF0ZQogICAgICAgICAgICA8L3RkPgogICAgICAgICA8L3RyPgogICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4KICAgICAgICAgICAgICAgSW5pdGlhbCB2ZXJzaW9uCiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4KICAgICAgICAgICAgICAgTmFkeWEgTW9yb3pvdmEsIFBhdmVsIERvbGdvdjogZG9jdW1lbnQgY3JlYXRlZC4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPgogICAgICAgICAgICAgICBNYXkgMTAsIDIwMDYKICAgICAgICAgICAgPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KICAgICAgPGgxPgogICAgICAgICA8YSBuYW1lPSJEaXNjbGFpbWVyX2FuZF9MZWdhbF9JbmZvcm1hdGlvbiI+PC9hPkRpc2NsYWltZXIKICAgICAgICAgYW5kIExlZ2FsIEluZm9ybWF0aW9uCiAgICAgIDwvaDE+CiAgICAgIDxwPgogICAgICAgICBDb3B5cmlnaHQgMjAwNS0yMDA2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBvciBpdHMKICAgICAgICAgbGljZW5zb3JzLCBhcyBhcHBsaWNhYmxlLgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICAgICAgICAgTGljZW5zZSk7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICAgICAgICAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IDxhCiAgICAgICAgIGhyZWY9CiAgICAgICAgICJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+LgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgICAgICAgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCiAgICAgICAgIEFTIElTIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwKICAgICAgICAgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMKICAgICAgICAgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKICAgICAgICAgTGljZW5zZS4KICAgICAgPC9wPgogICAgICA8aDE+CiAgICAgICAgIDxhIG5hbWU9IkFib3V0X1RoaXNfRG9jdW1lbnQiPjwvYT5BYm91dCBUaGlzIERvY3VtZW50CiAgICAgIDwvaDE+CiAgICAgIDxoMj4KICAgICAgICAgPGEgbmFtZT0iUHVycG9zZSI+PC9hPlB1cnBvc2UKICAgICAgPC9oMj4KICAgICAgPHA+CiAgICAgICAgIFRoaXMgZG9jdW1lbnQgaW50cm9kdWNlcyB0aGUgQVdUIChBYnN0cmFjdCBXaW5kb3cgVG9vbGtpdCkKICAgICAgICAgZnJhbWV3b3JrIGRlbGl2ZXJlZCBhcyBwYXJ0IG9mIHRoZSBEUkwgKER5bmFtaWMgUnVuLXRpbWUKICAgICAgICAgTGF5ZXIpIGluaXRpYXRpdmUuIFRoaXMgZG9jdW1lbnQgZm9jdXNlcyBvbiB0aGUKICAgICAgICAgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBjdXJyZW50IEFXVCBpbXBsZW1lbnRhdGlvbi4KICAgICAgPC9wPgogICAgICA8aDI+CiAgICAgICAgIDxhIG5hbWU9IkludGVuZGVkX0F1ZGllbmNlIj48L2E+SW50ZW5kZWQgQXVkaWVuY2UKICAgICAgPC9oMj4KICAgICAgPHA+CiAgICAgICAgIFRoZSB0YXJnZXQgYXVkaWVuY2UgZm9yIHRoZSBkb2N1bWVudCBpbmNsdWRlcyBhIHdpZGUKICAgICAgICAgY29tbXVuaXR5IG9mIGVuZ2luZWVycyBpbnRlcmVzdGVkIGluIGZ1cnRoZXIgd29yayB3aXRoIEFXVAogICAgICAgICB0byBjb250cmlidXRlIHRvIGl0cyBkZXZlbG9wbWVudC4gVGhlIGRvY3VtZW50IGFzc3VtZXMgdGhhdAogICAgICAgICByZWFkZXJzIGFyZSBmYW1pbGlhciB3aXRoIEFXVCBhbmQgdGhlIEphdmE8YSBocmVmPSIjKiI+KjwvYT4KICAgICAgICAgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCiAgICAgIDwvcD4KICAgICAgPGgyPgogICAgICAgICA8YSBuYW1lPSJEb2N1bWVudGF0aW9uX0NvbnZlbnRpb25zIj48L2E+RG9jdW1lbnRhdGlvbgogICAgICAgICBDb252ZW50aW9ucwogICAgICA8L2gyPgogICAgICA8cD4KICAgICAgICAgVGhpcyBkb2N1bWVudCB1c2VzIHRoZSA8YSBocmVmPSJjb252ZW50aW9ucy5odG0iIHRhcmdldD0gCiAgICAgICAgICJfYmxhbmsiPnVuaWZpZWQgY29udmVudGlvbnM8L2E+IGZvciB0aGUgRFJMIGRvY3VtZW50YXRpb24KICAgICAgICAga2l0LgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPgogICAgICAgICA8YSBocmVmPSIjdG9wIj5CYWNrIHRvIFRvcDwvYT4KICAgICAgPC9wPgogICAgICA8aDE+CiAgICAgICAgIDxhIG5hbWU9IkludHJvZHVjdGlvbiB0byBBV1QiPjwvYT5JbnRyb2R1Y3Rpb24gdG8gQVdUCiAgICAgIDwvaDE+CiAgICAgIDxwPgogICAgICAgICBBcyBpbmRpY2F0ZWQgaW4gdGhlIHNwZWNpZmljYXRpb24gWzxhIGhyZWY9CiAgICAgICAgICIjQVdUU3BlYyI+MTwvYT5dLCB0aGUgQWJzdHJhY3QgV2luZG93IFRvb2xraXQgKEFXVCkgaXMgYQogICAgICAgICBwYXJ0IG9mIHRoZSBKYXZhPGEgaHJlZj0iIyoiPio8L2E+IEZvdW5kYXRpb24gQ2xhc3NlcyAoSkZDKS4KICAgICAgICAgQVdUIHByb3ZpZGVzIGJhc2ljIGZhY2lsaXRpZXMgdG8gZGV2ZWxvcCBncmFwaGljYWwgdXNlcgogICAgICAgICBpbnRlcmZhY2VzIChHVUkpIGFuZCB0byBkcmF3IHNpbXBsZSBncmFwaGljcyBmb3IKICAgICAgICAgcGxhdGZvcm0taW5kZXBlbmRlbnQgYXBwbGV0cyBhbmQgYXBwbGljYXRpb25zLgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICBJbiBBV1QsIEdVSSBjb25zaXN0cyBvZiA8ZW0+Y29tcG9uZW50czwvZW0+LCBzdWNoIGFzCiAgICAgICAgIGJ1dHRvbnMsIG1lbnVzLCBhbmQgdG9wLWxldmVsIHdpbmRvd3MuIE9uZSBvZiB0aGUgbWFpbiBBV1QKICAgICAgICAgZmVhdHVyZXMgaXMgdGhhdCBhbGwgaXRzIGJ1aWx0LWluIGNvbXBvbmVudHMgYXJlCiAgICAgICAgIGhlYXZ5LXdlaWdodCwgdGhhdCBpcywgZXZlcnkgSmF2YTxhIGhyZWY9IiMqIj4qPC9hPgogICAgICAgICBjb21wb25lbnQgaGFzIGEgbmF0aXZlIEdVSSBvYmplY3QgYmVoaW5kIGl0LiBUaGUgU3dpbmcKICAgICAgICAgbGlicmFyeSBbPGEgaHJlZj0iI1N3aW5nUmVmIj4yPC9hPl0gaXMgYnVpbHQgb24gdGhlIGJhc2lzIG9mCiAgICAgICAgIEFXVCBhbmQgdXNlcyBsaWdodC13ZWlnaHQgY29tcG9uZW50cywgd2hpY2ggZG8gbm90IGhhdmUgdGhlCiAgICAgICAgIDE6MSBtYXBwaW5nIHdpdGggbmF0aXZlIHJlc291cmNlcy4KICAgICAgPC9wPgogICAgICA8aDE+CiAgICAgICAgIDxhIG5hbWU9IkFXVERSTCI+PC9hPkFXVCBpbiBEUkwKICAgICAgPC9oMT4KICAgICAgPHA+CiAgICAgICAgIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIG1ham9yIGRlc2lnbiBmZWF0dXJlcyBhbmQgaW50ZXJuYWwKICAgICAgICAgc3BlY2lmaWNzIG9mIHRoZSBEUkwgQVdUIGltcGxlbWVudGF0aW9uLiBGdXJ0aGVyIGluIHRoaXMKICAgICAgICAgZG9jdW1lbnQsIEFXVCBkZW5vdGVzIHRoZSBEUkwgaW1wbGVtZW50YXRpb24gZm9yCiAgICAgICAgIGNvbnZlbmllbmNlLjxicj4KICAgICAgICAgIFRvIHN1bW1hcml6ZSwgRFJMIEFXVCBoYXMgdGhlIGZvbGxvd2luZyBrZXkgZmVhdHVyZXM6CiAgICAgIDwvcD4KICAgICAgPHVsPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIDxhIGhyZWY9IiNFdmVudF9IYW5kbGluZyI+RXZlbnQgaGFuZGxpbmc8L2E+IG1lY2hhbmlzbQogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIDxhIGhyZWY9IiNGb2N1c19TdWJzeXN0ZW0iPkZvY3VzIGRpc3BhdGNoaW5nPC9hPiBmbG93CiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgQVdUIGNvbXBvbmVudHMnIGFwcGVhcmFuY2UgaGFuZGxpbmcgaW4gY3VzdG9tIDxhIGhyZWY9IAogICAgICAgICAgICAiI1Zpc3VhbF9UaGVtZXNfaW5fQVdUIj52aXN1YWwgdGhlbWVzPC9hPgogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIFN1cHBvcnQgZm9yIDxhIGhyZWY9CiAgICAgICAgICAgICIjTXVsdGktVGhyZWFkaW5nX3N1cHBvcnQiPm11bHRpLXRocmVhZGluZzwvYT4KICAgICAgICAgPC9saT4KICAgICAgPC91bD4KICAgICAgPHAgY2xhc3M9ImJhY2t0b3RvcCI+CiAgICAgICAgIDxhIGhyZWY9IiN0b3AiPkJhY2sgdG8gVG9wPC9hPgogICAgICA8L3A+CiAgICAgIDxoMj4KICAgICAgICAgPGEgbmFtZT0iRXZlbnRfSGFuZGxpbmciPjwvYT5FdmVudCBIYW5kbGluZwogICAgICA8L2gyPgogICAgICA8cD4KICAgICAgICAgQVdUIGhlbHBzIGFwcGxpY2F0aW9ucyByZWFjdCB0byB1c2VyJ3MgYWN0aW9ucyBhbmQgdHJhY2VzCiAgICAgICAgIHRoZSBzeXN0ZW0gc3RhdGUgYW5kIHRoZSBBV1QgaW50ZXJuYWwgc3RhdGUgYnkgbWVhbnMgb2YKICAgICAgICAgZXZlbnRzLiBTdWJzZXF1ZW50IHNlY3Rpb25zIGRlc2NyaWJlIHRoZSBBV1QgZXZlbnQgaGFuZGxpbmcKICAgICAgICAgaW1wbGVtZW50YXRpb24gaW4gRFJMIHdpdGggZm9jdXMgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4KICAgICAgICAgQVdUIGFuZCB0aGUgPGVtPm5hdGl2ZSBzeXN0ZW08L2VtPiwgc3BlY2lmaWNhbGx5LCB0aGUgR1VJCiAgICAgICAgIHN1YnN5c3RlbSBvZiBPUy4gRm9yIGluZm9ybWF0aW9uIG9uIGFwcGxpY2F0aW9uIGV2ZW50cwogICAgICAgICBoYW5kbGluZywgY29uc3VsdCB0aGUgQVdUIHNwZWNpZmljYXRpb24gWzxhIGhyZWY9CiAgICAgICAgICIjQVdUU3BlYyI+MTwvYT5dLgogICAgICA8L3A+CiAgICAgIDxoMz4KICAgICAgICAgPGEgbmFtZT0iRXZlbnRUeXBlRGVmaW5pdGlvbiI+PC9hPk5hdGl2ZSBhbmQgQVdUIEV2ZW50cwogICAgICA8L2gzPgogICAgICA8cD4KICAgICAgICAgVGhlIERSTCBBV1QgZnJhbWV3b3JrIGRlYWxzIHdpdGggdGhlIGZvbGxvd2luZyB0eXBlcyBvZgogICAgICAgICBldmVudHM6CiAgICAgIDwvcD4KICAgICAgPHVsPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIDxpPk5hdGl2ZSBldmVudHM8L2k+IGdlbmVyYXRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbToKICAgICAgICAgICAgWEV2ZW50cyBvbiBMaW51eDxhIGhyZWY9IiMqIj4qPC9hPiBhbmQgV2luZG93cyBtZXNzYWdlcwogICAgICAgICAgICAoTVNHKSBvbiBXaW5kb3dzPGEgaHJlZj0iIyoiPio8L2E+LgogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIDxpPkFXVCBldmVudHM8L2k+IGdlbmVyYXRlZCBhbmQgaGFuZGxlZCBieSB0aGUgQVdUCiAgICAgICAgICAgIGZyYW1ld29yay4gQWxsIEFXVCBldmVudHMgYXJlIHN1YmNsYXNzZXMgb2YgdGhlCiAgICAgICAgICAgIDxjb2RlPkFXVEV2ZW50PC9jb2RlPiBjbGFzcyBhbmQgYXJlIHN0b3JlZCBpbiB0aGUgQVdUCiAgICAgICAgICAgIGV2ZW50IHF1ZXVlIHJlcHJlc2VudGVkIGJ5IHRoZaA8Y29kZT5FdmVudFF1ZXVlPC9jb2RlPgogICAgICAgICAgICBjbGFzcy4KICAgICAgICAgPC9saT4KICAgICAgPC91bD4KICAgICAgPGgzPgogICAgICAgICA8YSBuYW1lPSJFRFQiPjwvYT5FdmVudCBEaXNwYXRjaCBUaHJlYWQKICAgICAgPC9oMz4KICAgICAgPHA+CiAgICAgICAgIEFXVCBoYXMgdGhlIDxpPmV2ZW50IGRpc3BhdGNoIHRocmVhZDwvaT4gKEVEVCkgYXQgaXRzIGJhc2lzLAogICAgICAgICByZXByZXNlbnRlZCBieSB0aGUKICAgICAgICAgY2xhc3OgPGNvZGU+amF2YS5hd3QuRXZlbnREaXNwYXRjaFRocmVhZDwvY29kZT4uIFRoaXMgdGhyZWFkCiAgICAgICAgIGhhbmRsZXMgYWxsIGdlbmVyYXRlZCB0eXBlcyBvZiBldmVudHMgYnkgZ29pbmcgb3ZlciB0aGUgbG9vcAogICAgICAgICBzaG93biBpbiBGaWd1cmUgMS4gRURUIHN0YXJ0cyBvbiBBV1QgVG9vbGtpdCBjcmVhdGlvbiBhbmQKICAgICAgICAgc3RvcHMgb24gYXBwbGljYXRpb24gdGVybWluYXRpb24uCiAgICAgIDwvcD4KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CiAgICAgICAgIDxpbWcgYWx0PSJBV1QgYW5kIG5hdGl2ZSBldmVudCBoYW5kbGluZyBvcmRlciIgc3JjPSAKICAgICAgICAgImltYWdlcy9FdmVudEZsb3cuZ2lmIj4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+CiAgICAgICAgIEZpZ3VyZSAxOiBOYXRpdmUgYW5kIEFXVCBFdmVudHMgSGFuZGxpbmcKICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgSW4gbW9yZSBkZXRhaWwsIEVEVCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIDxlbT5ldmVudAogICAgICAgICBsb29wPC9lbT46CiAgICAgIDwvcD4KICAgICAgPG9sPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIFdhaXQgZm9yIGFuZCBnZXQgdGhlIG5hdGl2ZSBldmVudCBmcm9tIG9wZXJhdGluZyBzeXN0ZW0uCiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgRGVjb2RlIHRoZSBuYXRpdmUgZXZlbnQgaW50byBhbiBBV1QgZXZlbnQuCiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgRGlzcGF0Y2ggdGhlIEFXVCBldmVudDogZmluZCB0aGUgdGFyZ2V0IEFXVCBjb21wb25lbnQgZm9yCiAgICAgICAgICAgIHRoaXMgZXZlbnQgYW5kIHBhc3MgaXQgdG8gdGhpcyBjb21wb25lbnQgdGhyb3VnaAogICAgICAgICAgICB0aGWgPGNvZGU+amF2YS5hd3QuRGlzcGF0Y2hlcjwvY29kZT4gY2xhc3MuCiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgUHVzaCB0aGUgQVdUIGV2ZW50IHRvIHRoZSBldmVudCBxdWV1ZSByZXByZXNlbnRlZCBieQogICAgICAgICAgICB0aGWgPGNvZGU+amF2YS5hd3QuRXZlbnRRdWV1ZTwvY29kZT4gY2xhc3MuCiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgUG9wIGFsbCBBV1QgZXZlbnRzIGZyb20gdGhlIGV2ZW50IHF1ZXVlLgogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIFBhc3MgdGhlIGdpdmVuIEFXVCBldmVudHMgdG8gdGhlIGFwcHJvcHJpYXRlIEFXVAogICAgICAgICAgICBjb21wb25lbnQgYnkgdXNpbmcKICAgICAgICAgICAgdGhloDxjb2RlPmphdmEuYXd0LkNvbXBvbmVudC5wcm9jZXNzWFlaRXZlbnQoKTwvY29kZT4KICAgICAgICAgICAgbWV0aG9kcy4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpPgogICAgICAgICAgICBDYWxsIHRoZSBhcHByb3ByaWF0ZSBBV1QgY29tcG9uZW50JnJzcXVvO3MgZXZlbnQKICAgICAgICAgICAgbGlzdGVuZXJzIG9mIHRoZSZuYnNwOzxjb2RlPkV2ZW50TGlzdGVuZXI8L2NvZGU+IGludGVyZmFjZS4KICAgICAgICAgICAgQXBwbGljYXRpb25zIHNob3VsZCBpbXBsZW1lbnQgYXBwcm9wcmlhdGUgbGlzdGVuZXJzJwogICAgICAgICAgICBpbnRlcmZhY2VzIHRvIHJlYWN0IHRvIHNwZWNpZmljIGV2ZW50cy4KICAgICAgICAgPC9saT4KICAgICAgPC9vbD4KICAgICAgPGgzPgogICAgICAgICA8YSBuYW1lPSJFdmVudFByaW9yaXR5Ij48L2E+TmF0aXZlIGFuZCBBV1QgRXZlbnRzIFByaW9yaXR5CiAgICAgIDwvaDM+CiAgICAgIDx1bD4KICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3Ryb25nPkFXVCBldmVudHMgaGF2ZSBhIGhpZ2hlciBsb2dpY2FsIHByaW9yaXR5IHRoYW4KICAgICAgICAgICAgbmF0aXZlIGV2ZW50cy48L3N0cm9uZz48YnI+CiAgICAgICAgICAgICBFRFQgZG9lcyBub3Qgd2FpdCBmb3IgYSBuZXcgbmF0aXZlIGV2ZW50IG9yIGZldGNoIGEKICAgICAgICAgICAgcmVhZHkgbmF0aXZlIGV2ZW50IHVubGVzcyBhbGwgZXhpc3RpbmcgQVdUIGV2ZW50cyBoYXZlCiAgICAgICAgICAgIGJlZW4gaGFuZGxlZC4KICAgICAgICAgPC9saT4KICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzdHJvbmc+QWZ0ZXIgaGFuZGxpbmcgYWxsIEFXVCBhbmQgbmF0aXZlIGV2ZW50cywgRURUCiAgICAgICAgICAgIHdhaXRzIGZvciBhIG5ldyBuYXRpdmUgZXZlbnQuPC9zdHJvbmc+PGJyPgogICAgICAgICAgICBJZiBhIG5vbi1FRFQgdGhyZWFkIGdlbmVyYXRlcyBhbiBBV1QgZXZlbnQgd2hlbiBFRFQgaXMKICAgICAgICAgICB3YWl0aW5nIGZvciBhIG5hdGl2ZSBldmVudCwgYSBuZXcgbmF0aXZlIGV2ZW50IGlzCiAgICAgICAgICAgcmVxdWlyZWQgdG8gd2FrZSBFRFQgYW5kIG1ha2UgaXQgaGFuZGxlIHRoZSBBV1QgZXZlbnQuCiAgICAgICAgICAgRXZlcnkgdGltZSBhIG5vbi1FRFQgdGhyZWFkIGFkZHMgYW4gZXZlbnQgdG8gdGhlIHF1ZXVlLAogICAgICAgICAgIHRoZSBtZXRob2SgPGNvZGU+YXdha2UoKTwvY29kZT4gb2YKICAgICAgICAgICAgdGhloDxjb2RlPk5hdGl2ZUV2ZW50UXVldWU8L2NvZGU+IGludGVyZmFjZSBpcyBjYWxsZWQuCgkJCVRoaXMgbWV0aG9kIHByb2R1Y2VzIGEgbmF0aXZlIGF1eGlsaWFyeSBldmVudCBzbyB0aGF0ICBFRFQgYmVjb21lcyByZWFkeSB0byBoYW5kbGUgQVdUIGV2ZW50cy4gRURUIAoJCQl0cmVhdHMgdGhpcyBhdXhpbGlhcnkgZXZlbnQgYXMgPGEgaHJlZj0iI05hdGl2ZV9FdmVudF9jbGFzc2lmaWNhdGlvbiI+aW52aXNpYmxlPC9hPi4KICAgICAgICAgPC9saT4KICAgICAgPC91bD4KICAgICAgPHAgY2xhc3M9ImJhY2t0b3RvcCI+CiAgICAgICAgIDxhIGhyZWY9IiN0b3AiPkJhY2sgdG8gVG9wPC9hPgogICAgICA8L3A+CiAgICAgIDxoMz4KICAgICAgICAgPGEgbmFtZT0iTmF0aXZlRXZlbnRzIj48L2E+TmF0aXZlIEV2ZW50cyBIYW5kbGluZwogICAgICA8L2gzPgogICAgICA8cD4KICAgICAgICAgVGhpcyBzZWN0aW9uIGRlZmluZXMgbmF0aXZlIGV2ZW50cyB0eXBlcyBhbmQgdGhlIHdheSBBV1QKICAgICAgICAgaGFuZGxlcyB0aGVzZSBldmVudHMgYmFzZWQgb24gdGhlaXIgdHlwZS4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0iY2xhc3MiPgogICAgICAgICA8YSBuYW1lPSJOYXRpdmVfRXZlbnRfY2xhc3NpZmljYXRpb24iPjwvYT5OYXRpdmUgRXZlbnRzCiAgICAgICAgIENsYXNzaWZpY2F0aW9uCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIEZpZ3VyZSAzIGJlbG93IGRlbW9uc3RyYXRlcyBob3cgbmF0aXZlIGV2ZW50cyBjYW4gYmUKICAgICAgICAgY2xhc3NpZmllZCBieSB0aGVpciByb2xlIGluIHRoZSBBV1QgZnJhbWV3b3JrLgogICAgICA8L3A+CiAgICAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgogICAgICAgICA8aW1nIGFsdD0iTmF0aXZlIGV2ZW50czogNCBzdWJ0eXBlcyIgc3JjPSAKICAgICAgICAgImltYWdlcy9OYXRpdmVFdmVudENMLmdpZiI+CiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9InNwZWNpYWwiPgogICAgICAgICBGaWd1cmUgMzogTmF0aXZlIEV2ZW50cyBDbGFzc2lmaWNhdGlvbgogICAgICA8L3A+CiAgICAgIDx1bD4KICAgICAgICAgPGxpPgogICAgICAgICAgICA8aT5TdGF0ZSBldmVudHM8L2k+IHNpZ25pZnkgdGhhdCBhIG5hdGl2ZSBvYmplY3QKICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0byBhbiBBV1Qgb2JqZWN0IGhhcyBjaGFuZ2VkIGl0cyBzdGF0ZS4gRm9yCiAgICAgICAgICAgIGV4YW1wbGUsIHdoZW4gdGhlIHVzZXIgbWluaW1pemVzIHRoZSB3aW5kb3csIHRoZSB3aW5kb3cKICAgICAgICAgICAgc3RhdGUgY2hhbmdlIG5hdGl2ZSBldmVudCBpcyBnZW5lcmF0ZWQuCiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgPGk+RXZlbnRzLXNpZ25hbHM8L2k+IGluZGljYXRlIGEgc3BvcmFkaWMgb2NjdXJyZW5jZSBpbgogICAgICAgICAgICB0aGUgT1MsIHVzdWFsbHksIGNhdXNlZCBieSB1c2VyJ3MgYWN0aW9ucy4gRm9yIGluc3RhbmNlLAogICAgICAgICAgICB0aGUgZXZlbnQgY2F1c2VkIGJ5IGEgbW91c2Ugd2hlZWwgcm90YXRpb24gaXMgc2lnbmFsCiAgICAgICAgICAgIGluZm9ybWF0aW9uLgogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIDxpPkludmlzaWJsZSBldmVudHM8L2k+IGRvIG5vdCBjYXVzZSBBV1QgZXZlbnQgZ2VuZXJhdGlvbgogICAgICAgICAgICBhbmQgYXJlIHVzZWQgb25seSB0byB1cGRhdGUgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlLgogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIDxpPlVudXNlZCBldmVudHM8L2k+IGFyZSBjb25jZXJuZWQgdG8gc3BlY2lmaWMgT1MKICAgICAgICAgICAgZmVhdHVyZXMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSBBV1QsIHNvIHRoZXNlIGV2ZW50cwogICAgICAgICAgICBhcmUgaWdub3JlZC4KICAgICAgICAgPC9saT4KICAgICAgPC91bD4KICAgICAgPHAgY2xhc3M9ImNsYXNzIj4KICAgICAgICAgQWJzdHJhY3RpbmcgdGhlIE5hdGl2ZSBQbGF0Zm9ybQogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICBOYXRpdmUgZXZlbnRzIGhhbmRsaW5nIGdvZXMgaW4gdHdvIHN0YWdlczogdGhlIGZpcnN0IHN0YWdlCiAgICAgICAgIGRlcGVuZHMgb24gdGhlIG5hdGl2ZSBwbGF0Zm9ybSwgYW5kIHRoZSBzZWNvbmQgc3RhZ2UgaXMgdGhlCiAgICAgICAgIHNhbWUgb24gYWxsIHN1cHBvcnRlZCBwbGF0Zm9ybXMuIFBsYXRmb3JtLWRlcGVuZGVudAogICAgICAgICBmdW5jdGlvbmFsaXR5IGNvbXByaXNlcyB0aGUgPGVtPldpbmRvdyBUb29sa2l0PC9lbT4sIFdUSywgaW4KICAgICAgICAgdGhloDxjb2RlPm9yZy5hcGFjaGUuaGFybW9ueS5hd3Qud3RrPC9jb2RlPiBwYWNrYWdlLiBUaGUKICAgICAgICAgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBsZXZlbHMgY29vcGVyYXRlCiAgICAgICAgIHZpYSB0aHJlZSBtYWluIGludGVyZmFjZXMgb2YgdGhpcwogICAgICAgICBwYWNrYWdlOqA8Y29kZT5OYXRpdmVFdmVudExpc3RlbmVyPC9jb2RlPiygPGNvZGU+TmF0aXZlRXZlbnQ8L2NvZGU+LAogICAgICAgICBhbmSgPGNvZGU+TmF0aXZlRXZlbnRRdWV1ZTwvY29kZT4sIGFzIHNob3duIGluIEZpZ3VyZSAyLgogICAgICAgICBDbGFzc2VzIGltcGxlbWVudGluZyB0aGWgPGNvZGU+TmF0aXZlRXZlbnQ8L2NvZGU+CiAgICAgICAgIGFuZKA8Y29kZT5OYXRpdmVFdmVudFF1ZXVlPC9jb2RlPiBpbnRlcmZhY2VzIGFyZQogICAgICAgICBwbGF0Zm9ybS1zcGVjaWZpYy4gRm9yIGV4YW1wbGUsIHRoZaA8Y29kZT5OYXRpdmVFdmVudDwvY29kZT4KICAgICAgICAgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IHRoZQogICAgICAgICBjbGFzc2VzoDxjb2RlPkxpbnV4RXZlbnQ8L2NvZGU+IGFuZKA8Y29kZT5XaW5FdmVudDwvY29kZT4KICAgICAgICAgZm9yIHRoZSBMaW51eDxhIGhyZWY9IiMqIj4qPC9hPiBhbmQgV2luZG93czxhIGhyZWY9CiAgICAgICAgICIjKiI+KjwvYT4gc3lzdGVtcyByZXNwZWN0aXZlbHkuCiAgICAgIDwvcD4KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CiAgICAgICAgIDxpbWcgYWx0PQogICAgICAgICAiSW50ZXJmYWNlcyBkZXBlbmRpbmcgYW5kIG5vdCBkZXBlbmRpbmcgb24gdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0iCiAgICAgICAgICBzcmM9ImltYWdlcy9JbXBsZW1lbnRhdGlvbkRldGFpbHMuZ2lmIj4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+CiAgICAgICAgIEZpZ3VyZSAyOiBJbnRlcmZhY2VzIGZvciBBYnN0cmFjdGluZyB0aGUgTmF0aXZlIFBsYXRmb3JtCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIKAKICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgQ2xhc3NlcyBvZiB0aGWgPGNvZGU+TmF0aXZlRXZlbnQ8L2NvZGU+IGludGVyZmFjZSBjb252ZXJ0CiAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IG5hdGl2ZSBldmVudHMgdG8gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudAogICAgICAgICBmb3JtYXQuIFRoZaA8Y29kZT5OYXRpdmVFdmVudFF1ZXVlPC9jb2RlPiBpbnRlcmZhY2UgZmV0Y2hlcwogICAgICAgICBuYXRpdmUgZXZlbnRzLCBhbmQgdGhloDxjb2RlPk5hdGl2ZUV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICAgIGludGVyZmFjZSBvZiB0aGUgSmF2YTxhIGhyZWY9IiMqIj4qPC9hPiBFRFQgdGhyZWFkIGhhbmRsZXMKICAgICAgICAgbmF0aXZlIGV2ZW50cy4gSW4gdGhlIERSTCBBV1QgaW1wbGVtZW50YXRpb24sIG5hdGl2ZSBhbmQgQVdUCiAgICAgICAgIGV2ZW50cyBhcmUgaGFuZGxlZCBieSB0aGUgc2luZ2xlIEVEVCB0aHJlYWQuIFNlZSB0aGUgPGEKICAgICAgICAgaHJlZj0iI011bHRpLVRocmVhZGluZ19zdXBwb3J0Ij5NdWx0aS10aHJlYWRpbmcgU3VwcG9ydDwvYT4KICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4KICAgICAgICAgPGEgaHJlZj0iI3RvcCI+QmFjayB0byBUb3A8L2E+CiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9ImNsYXNzIj4KICAgICAgICAgPGEgbmFtZT0iTmF0aXZlX0V2ZW50X0Rpc3BhdGNoaW5nIj48L2E+TmF0aXZlIEV2ZW50CiAgICAgICAgIERpc3BhdGNoaW5nCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIFRoZSBtZXRob2SgPGNvZGU+b25FdmVudCgpPC9jb2RlPiBpbiB0aGUKICAgICAgICAgcGxhdGZvcm0tZGVwZW5kZW50oDxjb2RlPk5hdGl2ZUV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICAgIGludGVyZmFjZSBwcm9jZXNzZXMgbmF0aXZlIGV2ZW50cy4gUGxhdGZvcm0tZGVwZW5kZW50CiAgICAgICAgIGNsYXNzZXMgaW1wbGVtZW50aW5noDxjb2RlPk5hdGl2ZUV2ZW50UXVldWU8L2NvZGU+IGNhbGwgdGhpcwogICAgICAgICBtZXRob2QgdG8gaGFuZGxlIGEgcmVsZXZhbnQgbmF0aXZlIGV2ZW50LCBzZWUgRmlndXJlIDQuCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIEFXVCBoYW5kbGVzIHJlbGV2YW50IG5hdGl2ZSBldmVudHMgYnkgZm9sbG93aW5nIHRoZXNlIHN0ZXBzOgogICAgICA8L3A+CiAgICAgIDxvbD4KICAgICAgICAgPGxpPgogICAgICAgICAgICBUaGUgcGxhdGZvcm0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YKICAgICAgICAgICAgdGhloDxjb2RlPk5hdGl2ZUV2ZW50PC9jb2RlPiBpbnRlcmZhY2UgdHJhbnNsYXRlcyB0aGUKICAgICAgICAgICAgZXZlbnQgdG8gYSB1bmlmaWVkIGZvcm1hdCBkZXNjcmliZWQgYnkgdGhlCiAgICAgICAgICAgIGludGVyZmFjZaA8Y29kZT5OYXRpdmVFdmVudDwvY29kZT4uCiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgVGhlIHBsYXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9uCiAgICAgICAgICAgIG9moDxjb2RlPk5hdGl2ZUV2ZW50UXVldWU8L2NvZGU+IGNhbGxzIHRoZSBFRFQKICAgICAgICAgICAgbWV0aG9koDxjb2RlPm9uRXZlbnQoKTwvY29kZT4gYW5kIHBhc3NlcyB0aGUgZGVjb2RlZAogICAgICAgICAgICBldmVudCBhcyBhIHBhcmFtZXRlci4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpPgogICAgICAgICAgICBFRFQgcGFzc2VzIHRoZSBldmVudCB0byB0aGWgPGNvZGU+amF2YS5hd3QuRGlzcGF0Y2hlcgogICAgICAgICAgICBjbGFzczwvY29kZT4gaWRlbnRpZnlpbmcgdGhlIHR5cGUgb2YgZXZlbnQuCiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSBldmVudCB0eXBlLCB0aGUgZGlzcGF0Y2hlciBjYW4gaGFuZGxlCiAgICAgICAgICAgIHRoZSBldmVudCBvciB0cmFuc21pdCBpdCB0byBhIHNwZWNpZmljIHN1Yi1kaXNwYXRjaGVyLgogICAgICAgICAgICBGb3IgZXhhbXBsZSygPGNvZGU+amF2YS5hd3QuTW91c2VEaXNwYXRjaGVyPC9jb2RlPiB3b3JrcwogICAgICAgICAgICB3aXRoIG1vdXNlCiAgICAgICAgICAgIGV2ZW50cyygPGNvZGU+amF2YS5hd3QuRGlzcGF0Y2hlci5LZXlEaXNwYXRjaGVyPC9jb2RlPgogICAgICAgICAgICBwcm9jZXNzZXMga2V5Ym9hcmQgZXZlbnRzLgogICAgICAgICA8L2xpPgogICAgICA8L29sPgogICAgICA8cD4KICAgICAgICAgVGhlIHJlc3VsdCBvZiBuYXRpdmUgZXZlbnQgZGlzcGF0Y2hpbmcgZGVwZW5kcyBvbiB0aGUgZXZlbnQKICAgICAgICAgdHlwZTogc3RhdGUgZXZlbnQsIHNpZ25hbCBvciBpbnZpc2libGUuIFNpZ25hbCBuYXRpdmUgZXZlbnRzCiAgICAgICAgIGFyZSB0cmFuc2xhdGVkIHRvIEFXVCBldmVudHMgZXhwbGljaXRseSAoRmlndXJlIDQsIHNlY29uZAogICAgICAgICBjb2x1bW4pLiBGb3Igc3RhdGUgYW5kIGludmlzaWJsZSBldmVudHMsIHRoZSBBV1QgZnJhbWV3b3JrCiAgICAgICAgIHVwZGF0ZXMgdGhlIHN0YXRlIG9mIHRoZSBBV1Qgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAgICAgICAgIG5hdGl2ZSBvYmplY3QgdGhhdCBzZW50IHRoZSBldmVudC4gRm9yIHN0YXRlIGV2ZW50cywgdGhpcwogICAgICAgICBpbXBsaWNpdGx5IGdlbmVyYXRlcyBhbiBBV1QgZXZlbnQgc2lnbmFsaW5nIGFuIEFXVCBvYmplY3QKICAgICAgICAgc3RhdGUgY2hhbmdlIChGaWd1cmUgNCwgdGhpcmQgY29sdW1uKS4gRm9yIGludmlzaWJsZSBldmVudHMsCiAgICAgICAgIHRoZSBBV1Qgb2JqZWN0IHN0YXRlIGdldHMgdXBkYXRlZCBzaWxlbnRseSAoRmlndXJlIDQsIGZvdXJ0aAogICAgICAgICBjb2x1bW4pLgogICAgICA8L3A+CiAgICAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgogICAgICAgICA8aW1nIGFsdD0iTmF0aXZlIGV2ZW50cyBoYW5kbGluZyBieSB0aGUgNCBzdWJ0eXBlcyIgc3JjPSAKICAgICAgICAgImltYWdlcy9OYXRpdmVFdmVudC5naWYiPgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJzcGVjaWFsIj4KICAgICAgICAgRmlndXJlIDQ6IE5hdGl2ZSBFdmVudHMgSGFuZGxpbmcgYnkgVHlwZQogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPgogICAgICAgICA8YSBocmVmPSIjdG9wIj5CYWNrIHRvIFRvcDwvYT4KICAgICAgPC9wPgogICAgICA8aDM+CiAgICAgICAgIDxhIG5hbWU9Ik5hdGl2ZV9hbmRfQVdUX0V2ZW50X0hhbmRsZXJzX0Nvb3BlcmF0aW9uIj48L2E+CiAgICAgICAgIE5hdGl2ZSBhbmQgQVdUIEV2ZW50IEhhbmRsZXJzIENvb3BlcmF0aW9uCiAgICAgIDwvaDM+CiAgICAgIDxwPgogICAgICAgICBOYXRpdmUgZXZlbnRzIG9mdGVuIHJlc3VsdCBpbiBuZXcgQVdUIGV2ZW50cyB0aGF0IG5lZWQgdG8gYmUKICAgICAgICAgaGFuZGxlZC4gVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB3aGVuIGFuZCBob3cgQVdUIGV2ZW50CiAgICAgICAgIGhhbmRsZXJzIGFyZSBjYWxsZWQgZm9yIHRoaXMgcHVycG9zZS4KICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgVGhlIFdpbmRvd3M8YSBocmVmPSIjKiI+KjwvYT4gT1MgZ2VuZXJhdGVzIHN5bmNocm9ub3VzIGFuZAogICAgICAgICBhc3luY2hyb25vdXMgbmF0aXZlIGV2ZW50cywgc28gdGhhdCBBV1QgbXVzdCBiZSByZWFkeSB0bwogICAgICAgICBoYW5kbGUgbmVzdGVkIGNhbGxzIHRvIHRoZSBldmVudCBoYW5kbGVyLiBJbiB0aGlzIGNhc2UsIEFXVAogICAgICAgICBtYWtlcyBhbiBhZGRpdGlvbmFsIGVmZm9ydCB0byBoYW5kbGUgQVdUIGV2ZW50cyBvbmUgYnkgb25lLgogICAgICAgICBEUkwgQVdUIHVzZXMgdGhloDxjb2RlPldpbmRvd1Byb2M8L2NvZGU+IGV2ZW50IGhhbmRsZXIKICAgICAgICAgaW5zaWRlIFdUSyBmb3IgaW50ZXJhY3Rpb24gd2l0aCBXaW5kb3dzPGEgaHJlZj0iIyoiPio8L2E+LgogICAgICAgICBUaGUgT1MgY2FsbHMgdGhpcyBoYW5kbGVyIGZvciBoYW5kbGluZyBhbnkgbmF0aXZlIGV2ZW50IGluCiAgICAgICAgIEFXVC4KICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgVGhlIExpbnV4PGEgaHJlZj0iIyoiPio8L2E+IGV2ZW50IGhhbmRsaW5nIG1lY2hhbmlzbSBpcwogICAgICAgICBkaWZmZXJlbnQgd2l0aCBpdHMgb3duIG1ldGhvZCBmb3IgaGFuZGxpbmcgbmF0aXZlIGV2ZW50cy4gSW4KICAgICAgICAgdGhpcyBPUywgYWxsIG5hdGl2ZSBldmVudHMgYXJlIGFzeW5jaHJvbm91cyBhbmQgbm8gbmVzdGluZwogICAgICAgICBoYXBwZW5zLgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJjbGFzcyI+CiAgICAgICAgIEhhbmRsaW5nIGEgc2luZ2xlIGV2ZW50CiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIEZpZ3VyZSA1IGlzIGFuIGV4YW1wbGUgb2YgbW91c2UgY2xpY2sgZXZlbnQgaGFuZGxpbmcgaW4gQVdULgogICAgICAgICBJbiB0aGUgZ2l2ZW4gY2FzZSwgdGhlIEFXVCBsaXN0ZW5lciBkb2VzIG5vdCBjby1vcGVyYXRlIHdpdGgKICAgICAgICAgdGhlIHVuZGVybHlpbmcgbmF0aXZlIHN5c3RlbSwgYW5kLCBjb25zZXF1ZW50bHksIG5vIG90aGVyCiAgICAgICAgIG5hdGl2ZSBldmVudHMgYXJlIHByb2R1Y2VkIGR1cmluZyB0aGUgbGlzdGVuZXIncyBvcGVyYXRpb24uCiAgICAgICAgIFRoZSBleGFtcGxlIGRlbW9uc3RyYXRlcyBoYW5kbGluZyBhbiBldmVudCBvbiBXaW5kb3dzKi4KICAgICAgPC9wPgogICAgICA8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4KICAgICAgICAgPGltZyBhbHQ9Ik5hdGl2ZSBldmVudHMgaGFuZGxpbmcgYnkgdGhlIDQgc3VidHlwZXMiIHNyYz0gCiAgICAgICAgICJpbWFnZXMvRXZlbnRIYW5nbGluZ0luQVdULmdpZiI+CiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9InNwZWNpYWwiPgogICAgICAgICBGaWd1cmUgNTogTW91c2UgQ2xpY2sgRXZlbnQgSGFuZGxpbmcKICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgTnVtYmVycyBpbiB0aGUgZmlndXJlIGFib3ZlIGNvcnJlc3BvbmQgdG8gdGhlIGZvbGxvd2luZwogICAgICAgICBzdGVwcyBpbiB0aGUgZXZlbnQgaGFuZGxpbmcgZmxvdzoKICAgICAgPC9wPgogICAgICA8b2w+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgVGhlIE9TIGNhbGxzoDxjb2RlPldpbmRvd1Byb2M8L2NvZGU+IHRvIGhhbmRsZSB0aGUgbmF0aXZlCiAgICAgICAgICAgIGV2ZW50LiBUaGUgdHlwZSBvZiBldmVudCBpcyBkZXRlcm1pbmVkLCBpbmZvcm1hdGlvbiBhYm91dAogICAgICAgICAgICB0aGlzIGV2ZW50IGlzIGdhdGhlcmVkIGFuZCBwYXNzZWQgdG8KICAgICAgICAgICAgdGhloDxjb2RlPm9uRXZlbnQoKTwvY29kZT4gbWV0aG9kCiAgICAgICAgICAgIG9moDxjb2RlPk5hdGl2ZUV2ZW50TGlzdGVuZXI8L2NvZGU+LgogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIFRoZaA8Y29kZT5qYXZhLmF3dC5EaXNwYXRjaGVyPC9jb2RlPiBjbGFzcyBmaW5kcyB0aGUKICAgICAgICAgICAgYXBwcm9wcmlhdGUgdGFyZ2V0IGZvciB0aGlzIGV2ZW50IGFuZCBwb3N0cyBhbiBBV1QgZXZlbnQKICAgICAgICAgICAgdG8gdGhlIEFXVCBldmVudCBxdWV1ZS4gSW4gdGhpcyBleGFtcGxlLCBpdAogICAgICAgICAgICBpc6A8Y29kZT5Nb3VzZUV2ZW50PC9jb2RlPi4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpPgogICAgICAgICAgICBUaGUgbWV0aG9koDxjb2RlPm9uRXZlbnROZXN0aW5nRW5kKCk8L2NvZGU+IGlzIGNhbGxlZCB0bwogICAgICAgICAgICBoYW5kbGUgYWxsIGFjY3VtdWxhdGVkIEFXVAogICAgICAgICAgICBldmVudHMuoDxjb2RlPk1vdXNlRXZlbnQ8L2NvZGU+IGlzIGZldGNoZWQgZnJvbSB0aGUgZXZlbnQKICAgICAgICAgICAgcXVldWUgYW5kIGZpbmFsbHkgZGlzcGF0Y2hlZC4gTGlzdGVuZXJzIG9mIHRoZSBldmVudCdzCiAgICAgICAgICAgIHRhcmdldCBhcmUgY2FsbGVkIGF0IHRoaXMgcG9pbnQuCiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgoDxjb2RlPldpbmRvd1Byb2M8L2NvZGU+IHJldHVybnMuCiAgICAgICAgIDwvbGk+CiAgICAgIDwvb2w+CiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPgogICAgICAgICA8YSBocmVmPSIjdG9wIj5CYWNrIHRvIFRvcDwvYT4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0iY2xhc3MiPgogICAgICAgICBIYW5kbGluZyBuZXN0ZWQgZXZlbnRzCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIEZpZ3VyZSA2IGlzIGFuIGV4YW1wbGUgb2YgbW91c2UgY2xpY2sgZXZlbnQgaGFuZGxpbmcgd2l0aAogICAgICAgICB0aGUgZXZlbnQgbGlzdGVuZXIgcmVxdWVzdHMga2V5Ym9hcmQgZm9jdXMgb24gdGhlIGNsaWNrZWQKICAgICAgICAgY29tcG9uZW50LgogICAgICA8L3A+CiAgICAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgogICAgICAgICA8aW1nIGFsdD0iTmVzdGVkIEV2ZW50IGhhbmRsaW5nIiBzcmM9IAogICAgICAgICAiaW1hZ2VzL0V2ZW50SGFuZGxpbmcuZ2lmIj4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+CiAgICAgICAgIEZpZ3VyZSA2OiBNb3VzZSBDbGljayBFdmVudCBIYW5kbGluZyB3aXRoIGEgTmVzdGVkIEV2ZW50CiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIE51bWJlcnMgaW4gdGhlIGZpZ3VyZSBhYm92ZSBjb3JyZXNwb25kIHRvIHRoZSBmb2xsb3dpbmcKICAgICAgICAgc3RlcHMgaW4gdGhlIGV2ZW50IGhhbmRsaW5nIGZsb3c6CiAgICAgIDwvcD4KICAgICAgPG9sPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIFRoZSBPUyBjYWxsc6A8Y29kZT5XaW5kb3dQcm9jPC9jb2RlPiwgdGhlIG5hdGl2ZSBldmVudCBpcwogICAgICAgICAgICB0cmFuc2Zvcm1lZCBpbnRvIGFuIEFXVCBldmVudCBhbmQgc3RvcmVkIGluIHRoZSBldmVudAogICAgICAgICAgICBxdWV1ZS4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpPgogICAgICAgICAgICBUaGUgZXZlbnQgbGlzdGVuZXIgY2FsbHOgPGNvZGU+cmVxdWVzdEZvY3VzKCk8L2NvZGU+LAogICAgICAgICAgICB3aGljaCBpbmRpcmVjdGx5IHJlc3VsdHMgaW4gYSBuYXRpdmUgQVBJIGNhbGwuCiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgVGhlIE9TIGNhbGxzoDxjb2RlPldpbmRvd1Byb2M8L2NvZGU+IHRvIHJlcG9ydCB0aGUgZm9jdXMKICAgICAgICAgICAgY2hhbmdlIGV2ZW50LiBCZWNhdXNlIHRoZSBwcmV2aW91cyBjYWxsCiAgICAgICAgICAgIHRvoDxjb2RlPldpbmRvd1Byb2M8L2NvZGU+IGlzIG5vdCBjb21wbGV0ZSB5ZXQsIHRoZSBuZXcKICAgICAgICAgICAgY2FsbCBpcyByZWNvZ25pemVkIGFzIG5lc3RlZC4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpPgogICAgICAgICAgICBUaGUgZGlzcGF0Y2hlciBhZGRzIGFub3RoZXIgQVdUCiAgICAgICAgICAgIGV2ZW50LKA8Y29kZT5Gb2N1c0V2ZW50PC9jb2RlPiwgdG8gdGhlIGV2ZW50IHF1ZXVlLgogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIKA8Y29kZT5XaW5kb3dQcm9jPC9jb2RlPiByZXR1cm5zIHdpdGhvdXQgaGFuZGxpbmcgQVdUCiAgICAgICAgICAgIGV2ZW50cyBiZWNhdXNlIGl0IGlzIGEgbmVzdGVkIG5hdGl2ZSBldmVudCBoYW5kbGVyLgogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIFRoZSBtZXRob2SgPGNvZGU+b25FdmVudE5lc3RpbmdFbmQoKTwvY29kZT4gaXMgc3RpbGwKICAgICAgICAgICAgd29ya2luZyBpbiB0aGUgZmlyc3QtbGV2ZWygPGNvZGU+V2luZG93UHJvYzwvY29kZT4KICAgICAgICAgICAgaGFuZGxlci4gVGhpcyBtZXRob2QgZmV0Y2hlcyBhbmQgZGlzcGF0Y2hlcwogICAgICAgICAgICB0aGWgPGNvZGU+Rm9jdXNFdmVudDwvY29kZT4gYWRkZWQgYXQgc3RlcCA0LgogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIFdoZW4gdGhlIEFXVCBldmVudCBxdWV1ZSBpcwogICAgICAgICAgICBlbXB0eSygPGNvZGU+V2luZG93UHJvYzwvY29kZT4gcmV0dXJucy4KICAgICAgICAgPC9saT4KICAgICAgPC9vbD4KICAgICAgPHA+CiAgICAgICAgIFRoaXMgdGVjaG5pcXVlIGd1YXJhbnRlZXMgdGhhdCBBV1QgZXZlbnQgaGFuZGxlcnMgYXJlIGNhbGxlZAogICAgICAgICBzZXF1ZW50aWFsbHkuIFRoZSBuZXN0ZWQgbmF0aXZlIGV2ZW50IGhhbmRsZXIgZG9lcyBub3QKICAgICAgICAgYXR0ZW1wdCB0byBoYW5kbGUgcGVuZGluZyBBV1QgZXZlbnRzLiBJbnN0ZWFkLCB0aGVzZSBldmVudHMKICAgICAgICAgYXJlIGNvbGxlY3RlZCBpbiB0aGUgZXZlbnQgcXVldWUgdG8gYmUgaGFuZGxlZCBsYXRlci4gVGhlCiAgICAgICAgIGZpcnN0LWxldmVsIG5hdGl2ZSBldmVudCBoYW5kbGVyIGRpc3BhdGNoZXMgYWxsIHRoZSBBV1QKICAgICAgICAgZXZlbnRzIHdhaXRpbmcgaW4gdGhlIHF1ZXVlLgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPgogICAgICAgICA8YSBocmVmPSIjdG9wIj5CYWNrIHRvIFRvcDwvYT4KICAgICAgPC9wPgogICAgICA8aDI+CiAgICAgICAgIDxhIG5hbWU9IkZvY3VzX1N1YnN5c3RlbSI+PC9hPkZvY3VzIFN1YnN5c3RlbQogICAgICA8L2gyPgogICAgICA8cD4KICAgICAgICAgVGhlIEFXVCBmb2N1cyBzdWJzeXN0ZW0gaXMgYSBzZXQgb2YgY2xhc3NlcyBmb3IgbWFuYWdpbmcKICAgICAgICAga2V5Ym9hcmQgaW5wdXQgZm9jdXMgcmVzcG9uc2libGUgZm9yOgogICAgICA8L3A+CiAgICAgIDx1bD4KICAgICAgICAgPGxpPgogICAgICAgICAgICBJbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSB3aW5kb3cgc3lzdGVtLAogICAgICAgICAgICBzdWNoIGFzoDxjb2RlPldpbjMyPC9jb2RlPiBvcqA8Y29kZT5YMTE8L2NvZGU+LCBieSB3YXkgb2YKICAgICAgICAgICAgaGFuZGxpbmcgbmF0aXZlIGZvY3VzIGV2ZW50cyBhbmQgbWFraW5nIG5hdGl2ZSBmb2N1cwogICAgICAgICAgICByZXF1ZXN0cwogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIFN5bmNocm9uaXppbmcgdGhlIGZvY3VzIHN0YXRlIHdpdGggdGhlIG5hdGl2ZSBmb2N1cyBzdGF0ZQogICAgICAgICA8L2xpPgogICAgICA8L3VsPgogICAgICA8cD4KICAgICAgICAgSW4gdGhlIERSTCBpbXBsZW1lbnRhdGlvbiwgdGhlIGZvY3VzIHN1YnN5c3RlbSBmdW5jdGlvbmFsaXR5CiAgICAgICAgIGlzIGRpc3RyaWJ1dGVkIGFtb25nIHNldmVyYWwgaW50ZXJuYWwgbGF5ZXJzOgogICAgICA8L3A+CiAgICAgIDx1bD4KICAgICAgICAgPGxpPgogICAgICAgICAgICA8Yj5XaW5kb3cgVG9vbGtpdDwvYj4gKFdUSykgaXMgYSBwbGF0Zm9ybS1kZXBlbmRlbnQKICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhlIGFic3RyYWN0IHdpbmRvdyB0b29sa2l0LiBXVEsKICAgICAgICAgICAgZGlyZWN0bHkgaW50ZXJhY3RzIHdpdGggdGhlIG5hdGl2ZSB3aW5kb3cgc3lzdGVtIHZpYQogICAgICAgICAgICBuYXRpdmUgbGlicmFyeSBjYWxscy4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpPgogICAgICAgICAgICA8Yj48YSBocmVmPSIjRm9jdXNfRGlzcGF0Y2hlciI+Rm9jdXMgRGlzcGF0Y2hlcjwvYT48L2I+CiAgICAgICAgICAgIGlzIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgbGV2ZWwgb2YgdGhlIGZvY3VzIHN1YnN5c3RlbQogICAgICAgICAgICBjbG9zZWx5IGFzeW5jaHJvbm91c2x5IGludGVyYWN0aW5nIHdpdGggdGhlIHdpbmRvdwogICAgICAgICAgICB0b29sa2l0IHRvIHJlc3BvbmQgdG8gbmF0aXZlIGZvY3VzIGV2ZW50cyBhbmQgcHJvdmlkZQogICAgICAgICAgICB0aGlzIGluZm9ybWF0aW9uIHRvIHRoZSBBV1QgdXBwZXIgbGV2ZWwuCiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgPGI+PGEgaHJlZj0iI0FXVF9oaWdoZXJfbGV2ZWwiPkFXVCBsZXZlbDwvYT48L2I+IGlzIHRoZQogICAgICAgICAgICBtYWpvciBwYXJ0IG9mIHRoZSBmb2N1cyBzdWJzeXN0ZW0gd29ya2luZyBzeW5jaHJvbm91c2x5CiAgICAgICAgICAgIHdpdGggdGhlIHVzZXIgYXBwbGljYXRpb24gYnkgZ2VuZXJhdGluZyBhbmQgcG9zdGluZyBBV1QKICAgICAgICAgICAgZXZlbnRzIHRvIHRoZSBldmVudCBxdWV1ZS4KICAgICAgICAgPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+CiAgICAgICAgIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHVzZXIgY29kZSBhbmQgdGhlc2UgbGV2ZWxzIG9mIHRoZQogICAgICAgICBmb2N1cyBzdWJzeXN0ZW0gaXMgc2hvd24gb24gRmlndXJlIDcgYmVsb3cuCiAgICAgIDwvcD4KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CiAgICAgICAgIDxpbWcgYWx0PSJEZXRhaWxlZCBldmVudCBoYW5kbGluZyBzY2hlbWEiIHNyYz0gCiAgICAgICAgICJpbWFnZXMvRm9jdXNGcmFtZXdvcmsuZ2lmIj4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+CiAgICAgICAgIEZpZ3VyZSA3LiBGb2N1cyBFdmVudCBEYXRhIEZsb3cKICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgVGhlIGZvbGxvd2luZyBjb2RlIGVudGl0aWVzIHBlcmZvcm0gdGhlIG1ham9yIGZvY3VzCiAgICAgICAgIHN1YnN5c3RlbSB0YXNrczoKICAgICAgPC9wPgogICAgICA8dWw+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgVGhloDxjb2RlPmphdmEuYXd0LkZvY3VzRGlzcGF0Y2hlcjwvY29kZT4gY2xhc3MgaGFuZGxlcwogICAgICAgICAgICBmb2N1cyBldmVudHMgcmVjZWl2ZWQgZnJvbSB0aGUgd2luZG93IHRvb2xraXQgbGV2ZWwuCiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgUGFja2FnZS1wcml2YXRlIG1ldGhvZHMgb2YKICAgICAgICAgICAgdGhloDxjb2RlPktleWJvYXJkRm9jdXNNYW5hZ2VyPC9jb2RlPiBjbGFzcyBtYW5hZ2UgZm9jdXMKICAgICAgICAgICAgb24gdGhlIGhpZ2hlciBBV1QgbGV2ZWwuCiAgICAgICAgIDwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPgogICAgICAgICBTdWJzZXF1ZW50IHNlY3Rpb25zIGRlc2NyaWJlIHRoZSBsZXZlbHMgb2YgZm9jdXMgbWFuYWdlbWVudAogICAgICAgICBpbiBtb3JlIGRldGFpbCBhbmQgZ2l2ZSBzcGVjaWZpY3Mgb2YgdGhlIERSTCBpbXBsZW1lbnRhdGlvbgogICAgICAgICBjb21wYXJlZCB0byB0aGUgZm9jdXMgc3BlY2lmaWNhdGlvbiBbPGEgaHJlZj0KICAgICAgICAgIiNGb2N1c1JlZiI+MzwvYT5dLgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPgogICAgICAgICA8YSBocmVmPSIjdG9wIj5CYWNrIHRvIFRvcDwvYT4KICAgICAgPC9wPgogICAgICA8aDM+CiAgICAgICAgIDxhIG5hbWU9IkZvY3VzX0Rpc3BhdGNoZXIiPjwvYT5Gb2N1cyBEaXNwYXRjaGVyCiAgICAgIDwvaDM+CiAgICAgIDxwPgogICAgICAgICBUaGUgZm9jdXMgZGlzcGF0Y2hlciByZXNwb25kcyB0byBuYXRpdmUgZm9jdXMgZXZlbnRzIGFuZCwKICAgICAgICAgZm9yIHRob3NlIHJlbGV2YW50IHRvIEFXVCwgc2VuZHMgYW4gaW50ZXJuYWwgZm9jdXMgY2hhbmdlCiAgICAgICAgIGV2ZW50IHRvIHRoZSBoaWdoZXIgQVdUIGxldmVsLiBUaGUgZGlzcGF0Y2hlciBza2lwcwogICAgICAgICByZWR1bmRhbnQgbmF0aXZlIGV2ZW50cyBhbmQgaGFuZGxlcyBldmVudCBwcm94eWluZyBzdXBwb3J0ZWQKICAgICAgICAgb24gY2VydGFpbiBuYXRpdmUgcGxhdGZvcm1zLiBUaGUgZm9jdXMgZGlzcGF0Y2hlciBpbiBEUkwgaXMKICAgICAgICAgY2hhcmFjdGVyaXplZCBieSB0aGUgZmVhdHVyZXMgbGlzdGVkIGJlbG93LgogICAgICA8L3A+CiAgICAgIDxkbD4KICAgICAgICAgPGR0PgogICAgICAgICAgICBQbGF0Zm9ybSBpbmRlcGVuZGVuY2UKICAgICAgICAgPC9kdD4KICAgICAgICAgPGRkPgogICAgICAgICAgICBUaGlzIGNvbXBvbmVudCBpcyBwbGF0Zm9ybS1pbmRlcGVuZGVudCBhbmQgaGFuZGxlcyBuYXRpdmUKICAgICAgICAgICAgZXZlbnRzIGluIGEgdW5pZmllZCB3YXkuIEZvciBleGFtcGxlLCB3aGVuIHNldCB0byBza2lwIGEKICAgICAgICAgICAgZmFsc2UgZXZlbnQsIHRoZSBmb2N1cyBkaXNwYXRjaGVyIGRvZXMgbm90IGNoYW5nZSBpdHMKICAgICAgICAgICAgYmVoYXZpb3Igb24gcGxhdGZvcm1zIHdoZXJlIHRoaXMgdHlwZSBvZiBldmVudCBuZXZlcgogICAgICAgICAgICBvY2N1cnMuCiAgICAgICAgIDwvZGQ+CiAgICAgICAgIDxkdD4KICAgICAgICAgICAgSW50ZXJuYWwgb3BlcmF0aW9uIG9ubHk6IG5vIGludGVyYWN0aW9uIHdpdGggdXNlciBjb2RlCiAgICAgICAgIDwvZHQ+CiAgICAgICAgIDxkZD4KICAgICAgICAgICAgVGhlIGRpc3BhdGNoZXIgZG9lcyBub3QgZ2VuZXJhdGUgQVdUIGV2ZW50cyBhbmQgbmV2ZXIKICAgICAgICAgICAgY2FsbHMgY2xpZW50IGNvZGUgZGlyZWN0bHksIHN5bmNocm9ub3VzbHkuIEluc3RlYWQsIFdUSwogICAgICAgICAgICBwYXNzZXMgZXZlbnQgaW5mb3JtYXRpb24gdG8gdGhlIHVwcGVyIEFXVCBsZXZlbCwgd2hpY2gKICAgICAgICAgICAgaW5jbHVkZXMgdGhlIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmb2N1cyBpcyBsb3N0IG9yCiAgICAgICAgICAgIGdhaW5lZCwgdGhlIHNvdXJjZSBhbmQgb3Bwb3NpdGUgY29tcG9uZW50cywgYW5kIHRoZQogICAgICAgICAgICBmb2N1c2VkIHdpbmRvdy4KICAgICAgICAgPC9kZD4KICAgICAgICAgPGR0PgogICAgICAgICAgICBGb2N1cyBQcm94eWluZwogICAgICAgICA8L2R0PgogICAgICAgICA8ZGQ+CiAgICAgICAgICAgIFdoZW4gdGhlIGZvY3VzIGlzIG9uIGFuIGluYWN0aXZlIHdpbmRvdywgZm9jdXMgcHJveGllcwogICAgICAgICAgICBhcmUgdXNlZC4gQSA8aT5mb2N1cyBwcm94eTwvaT4gaXMgYSBjaGlsZCBvZiBhbiBhY3RpdmUKICAgICAgICAgICAgd2luZG93IHRoYXQgaGFzIHRoZSBuYXRpdmUgZm9jdXMsIHdoZXJlYXMgZm9jdXMgYW5kIGtleQogICAgICAgICAgICBldmVudHMgYXJlIHJlZGlyZWN0ZWQgdG8gdGhlIEphdmE8YSBocmVmPSIjKiI+KjwvYT4KICAgICAgICAgICAgZm9jdXNlZCB3aW5kb3cuIFRoaXMgd2F5LCB0aGUgbmF0aXZlIGRlY29yYXRpb25zCiAgICAgICAgICAgIGluZGljYXRpbmcgdGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgd2luZG93IGFyZSBvbiB0aGUKICAgICAgICAgICAgYWN0aXZlIHdpbmRvdy4gQXQgdGhlIHNhbWUgdGltZSwga2V5Ym9hcmQgaW5wdXQgYW5kIGZvY3VzCiAgICAgICAgICAgIEFXVCBldmVudHMgZ28gdG8gdGhlIGZvY3VzZWQgd2luZG93LCB3aGVyZWFzIHRoZSBuYXRpdmUKICAgICAgICAgICAgZm9jdXNlZCB3aW5kb3cgaXMgdGhlIGZvY3VzIHByb3h5LiBUaGUgZm9jdXMgZGlzcGF0Y2hlcgogICAgICAgICAgICB0cmFuc2ZlcnMgdGhlIG5hdGl2ZSBmb2N1cyB0byB0aGUgZm9jdXMgcHJveHkgYW5kIGJhY2sKICAgICAgICAgICAgd2hlbiBuZWNlc3NhcnkuIEV2ZW50cyBhcmUgcmVkaXJlY3RlZCBieSB0aGUgPGEgaHJlZj0KICAgICAgICAgICAgIiNLRk0iPmtleWJvYXJkIGZvY3VzIG1hbmFnZXI8L2E+LiAKICAgICAgICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CiAgICAgICAgICAgICAgIDxpbWcgYWx0PSJFdmVudHMgYW5kIE91dHB1dCBpbiBFdmVudCBQcm94eWluZyIgc3JjPSAKICAgICAgICAgICAgICAgImltYWdlcy9Gb2N1c1Byb3h5aW5nLmdpZiI+CiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHAgY2xhc3M9InNwZWNpYWwiPgogICAgICAgICAgICAgICBGaWd1cmUgOC4gRm9jdXMgUHJveHkKICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgSWYgdGhlIGFjdGl2ZSB3aW5kb3cgaXMgdGhlIGZvY3VzZWQgd2luZG93LCBubwogICAgICAgICAgICAgICBwcm94eWluZyBvY2N1cnMuIEluIHRoaXMgY2FzZSwgdGhlIG5lYXJlc3QgaGVhdnl3ZWlnaHQKICAgICAgICAgICAgICAgYW5jZXN0b3Igb2YgdGhlIGZvY3VzIG93bmVyIG9yIHRoZSBmb2N1cyBvd25lciBuYXRpdmUKICAgICAgICAgICAgICAgd2luZG93IGl0c2VsZiAoaWYgZm9jdXMgb3duZXIgaXMgYSBoZWF2eS13ZWlnaHQKICAgICAgICAgICAgICAgY29tcG9uZW50KSBoYXMgbmF0aXZlIGZvY3VzLgogICAgICAgICAgICA8L3A+CiAgICAgICAgIDwvZGQ+CiAgICAgIDwvZGw+CiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPgogICAgICAgICA8YSBocmVmPSIjdG9wIj5CYWNrIHRvIFRvcDwvYT4KICAgICAgPC9wPgogICAgICA8aDM+CiAgICAgICAgIDxhIG5hbWU9IkFXVF9oaWdoZXJfbGV2ZWwiPjwvYT5BV1QgTGV2ZWwKICAgICAgPC9oMz4KICAgICAgPHA+CiAgICAgICAgIFRoZSBoaWdoZXIgbGV2ZWwgb2YgdGhlIGZvY3VzIHN1YnN5c3RlbSBnZW5lcmF0ZXMgYW5kIHBvc3RzCiAgICAgICAgIGFsbCBuZWNlc3NhcnkgQVdUIGV2ZW50cyB0byB0aGUgZXZlbnQgcXVldWUuIFRoaXMgbGV2ZWwKICAgICAgICAga2VlcHMgdHJhY2sgb2YgdGhlIGZvbGxvd2luZyBmb2N1cyBzdGF0ZXM6CiAgICAgIDwvcD4KICAgICAgPHVsPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIFRoZSBmb2N1cyBzdGF0ZSB2aXNpYmxlIHRvIHRoZSB1c2VyIGFuZCB1cGRhdGVkIGFmdGVyIHRoZQogICAgICAgICAgICBBV1QgZXZlbnQgaXMgZGlzcGF0Y2hlZCBieSB0aGUga2V5Ym9hcmQgZm9jdXMgbWFuYWdlciwKICAgICAgICAgICAgWzxhIGhyZWY9IiNGb2N1c1JlZiI+MzwvYT5dLgogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIFRoZSBsb3ctbGV2ZWwgV1RLIGZvY3VzIHN0YXRlIHJlcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nCiAgICAgICAgICAgIFdUSyBsZXZlbCBhbmQgdXBkYXRlZCBpbW1lZGlhdGVseSBvbiBnZXR0aW5nIGEgbmF0aXZlCiAgICAgICAgICAgIGV2ZW50LgogICAgICAgICA8L2xpPgogICAgICA8L3VsPgogICAgICA8cD4KICAgICAgICAgVGhlIEFXVCBsZXZlbCBvZiB0aGUgZm9jdXMgc3Vic3lzdGVtIGhhbmRsZXMgZm9jdXMgcmVxdWVzdHMKICAgICAgICAgc3luY2hyb25vdXNseSBvbiBldmVyeSBzdWNjZXNzZnVsIGZvY3VzIGNoYW5nZSByZXF1ZXN0LiBXaGVuCiAgICAgICAgIHRoZSBtZXRob2SgPGNvZGU+cmVxdWVzdEZvY3VzKCk8L2NvZGU+IGlzIGNhbGxlZCwgdGhlCiAgICAgICAgIGtleWJvYXJkIGZvY3VzIG1hbmFnZXIgcG9zdHMgYWxsIG5lY2Vzc2FyeSBBV1QgZXZlbnRzIGluIHRoZQogICAgICAgICByZXF1aXJlZCBvcmRlciBpcnJlc3BlY3RpdmUgb2YgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUKICAgICAgICAgbmF0aXZlIGZvY3VzIHJlcXVlc3QuIEluIG90aGVyIHdvcmRzLCB0aGUgQVdUIHN1YnN5c3RlbSBkb2VzCiAgICAgICAgIG5vdCB3YWl0IHVudGlsIHRoZSBuYXRpdmUgZm9jdXMgcmVxdWVzdCBnZXRzIGNvbmZpcm1lZCBhbmQKICAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgbmF0aXZlIGV2ZW50cyBhcmUgcmVjZWl2ZWQuCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIEFmdGVyIHJlY2VpdmluZyBhIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBuYXRpdmUgc3lzdGVtLCBXVEsKICAgICAgICAgcmVxdWVzdHMgdGhlIEFXVCBsZXZlbCB0byB1cGRhdGUgdGhlIGZvY3VzIHN0YXRlIHZpYSBhbgogICAgICAgICBpbnRlcm5hbCByZXF1ZXN0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIG5hdGl2ZSBzeXN0ZW0gcmVwb3J0cwogICAgICAgICBhbiB1bnN1Y2Nlc3NmdWwgZm9jdXMgY2hhbmdlLCBhIGNvbXBvbmVudCBtaWdodCBsb3NlIGZvY3VzLgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJub3RlIj4KICAgICAgICAgTm90ZQogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJub3RldGV4dCI+CiAgICAgICAgIE9ubHkgY2VydGFpbiBuYXRpdmUgZm9jdXMtcmVsYXRlZCBldmVudHMgY2F1c2UgYSBKYXZhPGEKICAgICAgICAgaHJlZj0iIyoiPio8L2E+IGZvY3VzIHN0YXRlIHVwZGF0ZS4gRm9yIGV4YW1wbGU6CiAgICAgIDwvcD4KICAgICAgPHVsPgogICAgICAgICA8bGkgY2xhc3M9Im5vdGV0ZXh0Ij4KICAgICAgICAgICAgV2hlbiBhIHRvcC1sZXZlbCBuYXRpdmUgd2luZG93IGdhaW5zIGZvY3VzLCB0aGUgZm9jdXMKICAgICAgICAgICAgZ29lcyB0byBhIGNoaWxkIG9mIHRoaXMgd2luZG93IG9yIHRoZaA8Y29kZT5XaW5kb3c8L2NvZGU+CiAgICAgICAgICAgIGNvbXBvbmVudCBpdHNlbGYsIGluIGNhc2Ugbm8gY2hpbGQgZWxlbWVudHMgYXJlCiAgICAgICAgICAgIGF2YWlsYWJsZS4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpIGNsYXNzPSJub3RldGV4dCI+CiAgICAgICAgICAgIFdoZW4gYSB3aW5kb3cgaW4gYW5vdGhlciBhcHBsaWNhdGlvbiBnYWlucyBmb2N1cywgdGhlCiAgICAgICAgICAgIGZvY3VzIGRpc3BhdGNoZXIgY2FsbHMgdGhloDxjb2RlPnNldEZvY3VzKGZhbHNlKTwvY29kZT4KICAgICAgICAgICAgbWV0aG9kIG9uIHRoZSBmb2N1cyBvd25lciB0byBjbGVhciB0aGUgZm9jdXMgb3duZXIgdmFsdWUuCiAgICAgICAgIDwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPgogICAgICAgICA8YSBocmVmPSIjdG9wIj5CYWNrIHRvIFRvcDwvYT4KICAgICAgPC9wPgogICAgICA8aDM+CiAgICAgICAgIDxhIG5hbWU9IkRSTF9Gb2N1c19JbXBsZW1lbnRhdGlvbl9TcGVjaWZpY3MiPjwvYT5EUkwgRm9jdXMKICAgICAgICAgSW1wbGVtZW50YXRpb24gU3BlY2lmaWNzCiAgICAgIDwvaDM+CiAgICAgIDxwPgogICAgICAgICBCZWxvdywgdGhlIHNwZWNpZmljIGZlYXR1cmVzIG9mIERSTCBpbXBsZW1lbnRhdGlvbiBhcmUKICAgICAgICAgbGlzdGVkIGNvbXBhcmVkIHRvIHRoZSBmb2N1cyBzcGVjaWZpY2F0aW9uIGdyb3VwZWQgYnkgdGhlaXIKICAgICAgICAgZnVuY3Rpb24uCiAgICAgIDwvcD4KICAgICAgPGRsPgogICAgICAgICA8ZHQ+CiAgICAgICAgICAgIDxhIG5hbWU9IktGTSI+PC9hPlJlcGxhY2luZyB0aGUKICAgICAgICAgICAgRGVmYXVsdEtleWJvYXJkRm9jdXNNYW5hZ2VyIGNsYXNzCiAgICAgICAgIDwvZHQ+CiAgICAgICAgIDxkZD4KICAgICAgICAgICAgVGhlIGtleWJvYXJkIGZvY3VzIG1hbmFnZXIgaGFuZGxlcyBhbGwgZXZlbnRzIGluIHRoZQogICAgICAgICAgICByZXF1aXJlZCBvcmRlciBhbmQgbmV2ZXIgc3ludGhlc2l6ZXMgd2luZG93IGFjdGl2YXRpb24KICAgICAgICAgICAgZXZlbnRzLiBJbnN0ZWFkLCB0aGUgZm9jdXMgbWFuYWdlciBza2lwcyB0aGUgZXZlbnRzIHRoYXQKICAgICAgICAgICAgZG8gbm90IGNvcnJlc3BvbmQgdG8gdGhlIGN1cnJlbnQgZm9jdXMgc3RhdGUuIFN1Y2ggZXZlbnRzCiAgICAgICAgICAgIGNhbiBiZSBnZW5lcmF0ZWQgYnkgdGhlIHByaXZhdGUgQVBJIG9mIHRoaXMgY2xhc3MgaW4KICAgICAgICAgICAgcmVzcG9uc2UgdG8gbmF0aXZlIGV2ZW50cy4gRm9yIGV4YW1wbGUsIHRoZSBrZXlib2FyZAogICAgICAgICAgICBmb2N1cyBtYW5hZ2VyIGlnbm9yZXMgZXZlbnRzIHNlbnQgdG8gdGhlIHdpbmRvdyB0aGF0IGhhcwogICAgICAgICAgICBmYWlsZWQgdG8gYmVjb21lIHRoZSBmb2N1c2VkIHdpbmRvdyBiZWNhdXNlIHRoZQogICAgICAgICAgICBjb3JyZXNwb25kaW5nIEFXVCBldmVudCB3YXMgZGlzcGF0Y2hlZCBhbmQgdmV0b2VkLjxicj4KICAgICAgICAgICAgIFdoZW4gaGFuZGxpbmcgdGhloDxjb2RlPldJTkRPV19HQUlORURfRk9DVVM8L2NvZGU+CiAgICAgICAgICAgIGV2ZW50LCBwcml2YXRlIG1ldGhvZHMgaW4gdGhlIGtleWJvYXJkIGZvY3VzIG1hbmFnZXIgc2V0CiAgICAgICAgICAgIGZvY3VzIG9uIHRoZSBhcHByb3ByaWF0ZSBjaGlsZCBjb21wb25lbnQgb2YgdGhlIHdpbmRvdy4KICAgICAgICAgPC9kZD4KICAgICAgICAgPGR0PgogICAgICAgICAgICA8YSBuYW1lPSJQcm9ncmFtbWF0aWMgVHJhdmVyc2FsIj48L2E+IFByb2dyYW1tYXRpYwogICAgICAgICAgICBUcmF2ZXJzYWwKICAgICAgICAgPC9kdD4KICAgICAgICAgPGRkPgogICAgICAgICAgICBEaXNhYmxpbmcgYW55IGFuY2VzdG9yIG9mIHRoZSBmb2N1cyBvd25lciwgYm90aAogICAgICAgICAgICBsaWdodC13ZWlnaHQgYW5kIGhlYXZ5LXdlaWdodCwgYXV0b21hdGljYWxseSBpbml0aWF0ZXMgYQogICAgICAgICAgICBmb2N1cyB0cmF2ZXJzYWwuCiAgICAgICAgIDwvZGQ+CiAgICAgIDwvZGw+CiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPgogICAgICAgICA8YSBocmVmPSIjdG9wIj5CYWNrIHRvIFRvcDwvYT4KICAgICAgPC9wPgogICAgICA8aDI+CiAgICAgICAgIDxhIG5hbWU9IlZpc3VhbF9UaGVtZXNfaW5fQVdUIj48L2E+IFZpc3VhbCBUaGVtZXMgaW4gQVdUCiAgICAgIDwvaDI+CiAgICAgIDxwPgogICAgICAgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgbWVjaGFuaXNtIG9mIGRyYXdpbmcgc3RhbmRhcmQKICAgICAgICAgQVdUIGNvbXBvbmVudHMgd2l0aCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBKYXZhPGEgaHJlZj0KICAgICAgICAgIiMqIj4qPC9hPiBtZWFucyBvciBwbGF0Zm9ybS1zcGVjaWZpYyBuYXRpdmUgQVBJIG9yIHVzaW5nCiAgICAgICAgIGJvdGggYXBwcm9hY2hlcy4KICAgICAgPC9wPgogICAgICA8aDM+CiAgICAgICAgIDxhIG5hbWU9IkRlZmF1bHRfdGhlbWUiPjwvYT5EZWZhdWx0IHRoZW1lCiAgICAgIDwvaDM+CiAgICAgIDxwPgogICAgICAgICBZb3UgY2FuIHBhaW50IHN0YW5kYXJkIGNvbXBvbmVudHMgaW4gbWFueSB3YXlzLCBpbmNsdWRpbmcKICAgICAgICAgZHJhd2luZyB0aGUgY29tcG9uZW50IHBhcnRzICh0ZXh0LCBiYWNrZ3JvdW5kLCBzaGFkb3dzIGFuZAogICAgICAgICBhbGwgb3RoZXIgZWxlbWVudHMpIGJ5IHRoZSBtZWFucyBvZgogICAgICAgICBjbGFzc6A8Y29kZT5qYXZhLmF3dC5HcmFwaGljczwvY29kZT4uIE5vdGUgdGhhdCB0aGUKICAgICAgICAgZnJhbWV3b3JrIG11c3Qgbm90IHBhaW50IHN0YW5kYXJkIGNvbXBvbmVudHMgYnkgdGhlCiAgICAgICAgIG1ldGhvZKA8Y29kZT5qYXZhLmF3dC5Db21wb25lbnQucGFpbnQoKTwvY29kZT4gYmVjYXVzZSBpdAogICAgICAgICBjb3VsZCBiZSBvdmVycmlkZGVuLiBJbnN0ZWFkLCB3aGVuIHByb2Nlc3NpbmcgYSBwYWludGluZwogICAgICAgICBldmVudCwgdGhlIGZyYW1ld29yayBjYWxscyB0aGUgcGFja2FnZS1wcml2YXRlCiAgICAgICAgIG1ldGhvZKA8Y29kZT5qYXZhLmF3dC5Db21wb25lbnQucHJlcGFpbnQoKTwvY29kZT4ganVzdAogICAgICAgICBiZWZvcmUgY2FsbGluZyB0aGUgbWV0aG9koDxjb2RlPnBhaW50KCk8L2NvZGU+LgogICAgICAgICBUaGWgPGNvZGU+cHJlcGFpbnQoKTwvY29kZT4gbWV0aG9kIGRvZXMgdGhlIGFjdHVhbCBwYWludGluZwogICAgICAgICBmb3IgYWxsIHN0YW5kYXJkIGNvbXBvbmVudHMgYnkgZGVsZWdhdGluZyB0aGUgcGFpbnRpbmcgdGFzawogICAgICAgICB0byB0aGUgdGhlbWUuIFRoaXMgYXBwcm9hY2ggbWlnaHQgbm90IHNlZW0gb3B0aW1hbCwgYnV0IGl0CiAgICAgICAgIHdvcmtzIG9uIGFsbCBzdXBwb3J0ZWQgcGxhdGZvcm1zIHdpdGhvdXQgYW55IGNoYW5nZXMuCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIFRoZaA8Y29kZT5vcmcuYXBhY2hlLmhhcm1vbnkuYXd0LlRoZW1lPC9jb2RlPiBjbGFzcwogICAgICAgICBpbXBsZW1lbnRzIHRoZSBkZWZhdWx0IHRoZW1lLiBNZXRob2RzIG9mIHRoaXMgY2xhc3MgZG8gdGhlCiAgICAgICAgIGZvbGxvd2luZzoKICAgICAgPC9wPgogICAgICA8dWw+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgUGFpbnQgc3RhbmRhcmQgY29tcG9uZW50cywgZm9yIGV4YW1wbGUsIHRoZQogICAgICAgICAgICBtZXRob2SgPGNvZGU+ZHJhd0J1dHRvbigpPC9jb2RlPi4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpPgogICAgICAgICAgICBDYWxjdWxhdGUgdGhlIG9wdGltYWwgY29tcG9uZW50IHNpemUgZm9yIGVhY2ggdHlwZSBvZgogICAgICAgICAgICBjb21wb25lbnQsIGZvciBleGFtcGxlLCBieSB1c2luZyB0aGUKICAgICAgICAgICAgbWV0aG9koDxjb2RlPmNhbGN1bGF0ZUJ1dHRvbigpPC9jb2RlPi4KICAgICAgICAgPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+CiAgICAgICAgIFRoZSBkZWZhdWx0IHRoZW1lIGNsYXNzIGlzIHBsYXRmb3JtLWluZGVwZW5kZW50LAogICAgICAgICBub24tYWJzdHJhY3QgYW5kIGZ1bGx5IGZ1bmN0aW9uYWwsIGFuZCBpdCB1c3VhbGx5IHdvcmtzIHdoZW4KICAgICAgICAgdGhlIG5hdGl2ZSB0aGVtZSBpcyBkaXNhYmxlZCBvciBub3QgYXZhaWxhYmxlLCBvciB3aGVuIHRoZQogICAgICAgICBuYXRpdmUgdGhlbWUgcmUtdXNlcyBmdW5jdGlvbmFsaXR5IG9mIHRoZSBzdGFuZGFyZCB0aGVtZS4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4KICAgICAgICAgPGEgaHJlZj0iI3RvcCI+QmFjayB0byBUb3A8L2E+CiAgICAgIDwvcD4KICAgICAgPGgzPgogICAgICAgICA8YSBuYW1lPSJEZWxpdmVyZWRfdGhlbWVzIj48L2E+IERlcml2ZWQgdGhlbWVzCiAgICAgIDwvaDM+CiAgICAgIDxwPgogICAgICAgICBZb3UgY2FuIGNyZWF0ZSBhIGN1c3RvbSB0aGVtZSB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGRlZmF1bHQKICAgICAgICAgdGhlbWUgYW5kIGNvbnRhaW5zIHNwZWNpZmljIGZlYXR1cmVzLiBUaGUgY3VycmVudAogICAgICAgICBpbXBsZW1lbnRhdGlvbiBjb250YWlucyB0aGWgPGNvZGU+V2luVGhlbWU8L2NvZGU+IGNsYXNzIHRoYXQKICAgICAgICAgZXh0ZW5kcyB0aGUgZGVmYXVsdCB0aGVtZSBhcyBzaG93biBpbiBGaWd1cmUgOS4KICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgVG8gdXNlIHRoZSBuYXRpdmUgQVBJIGluIHlvdXIgdGhlbWUsIGV4dGVuZCB0aGUgZGVmYXVsdAogICAgICAgICB0aGVtZSBvdmVycmlkaW5nIGl0cyBwYWludGluZyBtZXRob2RzLiBJbiB0aGUgZGVyaXZlZCB0aGVtZSwKICAgICAgICAgeW91IGNhbiB1c2UgdGhlIGFkZGl0aW9uYWwgZmVhdHVyZXMgb2Ygc3BlY2lmaWMKICAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhloDxjb2RlPkdyYXBoaWNzPC9jb2RlPiBjbGFzcywgYW5kCiAgICAgICAgIGV4cGxpY2l0bHkgY2FsbCBuYXRpdmUgQVBJIGZ1bmN0aW9ucyB2aWEgd3JhcHBlcnMsCiAgICAgICAgIHNlZaA8Y29kZT5vcmcuYXBhY2hlLmhhcm1vbnkubWlzYzwvY29kZT4gcGFja2FnZSBmb3IKICAgICAgICAgZGV0YWlscy4gRmlndXJlIDkgYmVsb3cgZGVtb25zdHJhdGVzIHRoZW1lLXJlbGF0ZWQgY2xhc3NlcwogICAgICAgICBoaWVyYXJjaHkgd2l0aCBtZXRob2RzIHJlbGF0ZWQgdG8gdGhloDxjb2RlPkJ1dHRvbjwvY29kZT4KICAgICAgICAgY29tcG9uZW50IGFzIGFuIGV4YW1wbGUuIEEgYmxvY2sgb2YgY29kZSBmb3IgZXh0ZW5kaW5nCiAgICAgICAgIHRoZaA8Y29kZT5kcmF3QnV0dG9uKCk8L2NvZGU+IG1ldGhvZCBpcyBzaG93biBpbiA8YSBocmVmPSAKICAgICAgICAgIiNFeGFtcGxlQnV0dG9uIj5FeGFtcGxlIDE8L2E+IGJlbG93LgogICAgICA8L3A+CiAgICAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgogICAgICAgICA8aW1nIGFsdD0KICAgICAgICAgIk9TIHNwZWNpZmljIHRoZW1lcyBhcyBzdWJjbGFzc2VzIHRvIHRoZSBtYWpvciB0aGVtZSIgc3JjPSAKICAgICAgICAgImltYWdlcy9UaGVtZXNIaWVyYWNoeS5naWYiPgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJzcGVjaWFsIj4KICAgICAgICAgRmlndXJlIDk6IEhpZXJhcmNoeSBvZiBUaGVtZSBDbGFzc2VzCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIKAKICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgQWZ0ZXIgY3JlYXRpbmcgYSBkZXJpdmVkIHRoZW1lLCB0dXJuIGl0IG9uIGJ5IHVzaW5nIHRoZQogICAgICAgICBwcm9wZXJ0eaA8Y29kZT5hd3QudGhlbWU8L2NvZGU+LiBUaGlzIHByb3BlcnR5IGNvbnRhaW5zIHRoZQogICAgICAgICBuYW1lIG9mIGEgc3ViY2xhc3Mgb2YgZGVmYXVsdCB0aGVtZSBjbGFzcyB1c2VkIGFzIHRoZSB0aGVtZQogICAgICAgICBieSBhbGwgY29tcG9uZW50cy4gSWYgdGhlIHByb3BlcnR5IHBvaW50cyB0byBhIG5vbi1leGlzdGVudAogICAgICAgICBjbGFzcyBvciBpZiB0aGUgcmVxdWlyZWQgbmF0aXZlIGxpYnJhcnkgaXMgbWlzc2luZywgb3IgYW55CiAgICAgICAgIG90aGVyIGVycm9yIG9jY3VycywgdGhlIGRlZmF1bHQgdGhlbWUgaXMgdXNlZC4gSWYgdGhlCiAgICAgICAgIHByb3BlcnR5IGlzIG5vdCBzZXQsIHRoZSBuYXRpdmUgdGhlbWUgb2YgdGhlIGN1cnJlbnQgT1MgaXMKICAgICAgICAgdXNlZCBpZiBpdCBleGlzdHMuIElmIG5vIE9TIHRoZW1lIGV4aXN0cywgdGhlIGRlZmF1bHQgdGhlbWUKICAgICAgICAgaXMgdXNlZC4KICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgVG8gZm9yY2UgdGhlIGRlZmF1bHQgdGhlbWUsIHNldCB0aGUgY29tbWFuZC1saW5lCiAgICAgICAgIG9wdGlvbqA8Y29kZT4tRGF3dC50aGVtZT0wPC9jb2RlPi4gQXMgbG9uZyBhcyB6ZXJvIGlzIGFuCiAgICAgICAgIGludmFsaWQgY2xhc3MgbmFtZSwgdGhpcyBkb2VzIHRoZSBqb2IuCiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9ImJhY2t0b3RvcCI+CiAgICAgICAgIDxhIGhyZWY9IiN0b3AiPkJhY2sgdG8gVG9wPC9hPgogICAgICA8L3A+CiAgICAgIDxoMz4KICAgICAgICAgPGEgbmFtZT0iSW1wbGVtZW50YXRpb25fZGV0YWlscyI+PC9hPkltcGxlbWVudGF0aW9uIGRldGFpbHMKICAgICAgPC9oMz4KICAgICAgPHA+CiAgICAgICAgIFBhaW50aW5nIHN0YW5kYXJkIGNvbXBvbmVudHMgcmVxdWlyZXMgYWNjZXNzIHRvIHRoZWlyCiAgICAgICAgIGludGVybmFsIHN0YXRlLCBzdWNoIGFzIHRoZSBwcmVzc2VkIHN0YXRlLCB0aGUgZm9jdXNlZAogICAgICAgICBzdGF0ZSwgdGhlIGJhY2tncm91bmQgY29sb3IsIGFuZCB0aGUgY29udGFpbmVkIHRleHQuIEJlY2F1c2UKICAgICAgICAgbm90IGFsbCB0aGVzZSBhdHRyaWJ1dGVzIGFyZSB2aXNpYmxlIHRocm91Z2ggdGhlIHB1YmxpYyBBUEksCiAgICAgICAgIHRoZSBEUkwgQVdUIG1vZHVsZSBwcm92aWRlcyBhIHNldCBvZiBpbnRlcmZhY2VzIHRvIGFsbG93IHRoZQogICAgICAgICB0aGVtZSB0byBhY2Nlc3MgcHJpdmF0ZSBhbmQgcHVibGljIGRhdGEuIFRoZQogICAgICAgICBwYWNrYWdloDxjb2RlPm9yZy5hcGFjaGUuaGFybW9ueS5hd3Quc3RhdGU8L2NvZGU+IGNvbnRhaW5zCiAgICAgICAgIHRoZXNlIGludGVyZmFjZXMsIHN1Y2gKICAgICAgICAgYXMsoDxjb2RlPlRleHRTdGF0ZTwvY29kZT4soDxjb2RlPkNoZWNrYm94U3RhdGU8L2NvZGU+LAogICAgICAgICBhbmSgPGNvZGU+QnV0dG9uU3RhdGU8L2NvZGU+LiBFYWNoIHN0YW5kYXJkIGNvbXBvbmVudCBjbGFzcwogICAgICAgICBoYXMgYW4gaW5uZXIgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBhcHByb3ByaWF0ZSBpbnRlcmZhY2UKICAgICAgICAgYW5kIGhhcyB0aGUgc3RhdGUgZmllbGQgb2YgdGhhdCBjbGFzcyBkZWNsYXJlZC4KICAgICAgICAgVGhloDxjb2RlPmphdmEuYXd0LkNvbXBvbmVudDwvY29kZT4gY2xhc3Mgc3RvcmVzIGFsbAogICAgICAgICBmdW5jdGlvbmFsaXR5IGNvbW1vbiBmb3IgYWxsIHR5cGVzIG9mIHN0YW5kYXJkIGNvbXBvbmVudHMuCiAgICAgICAgIFNwZWNpZmljYWxseSwgdGhloDxjb2RlPmphdmEuYXd0LkNvbXBvbmVudDwvY29kZT4gY2xhc3MgaGFzCiAgICAgICAgIGFuIGlubmVyIGNsYXNzoDxjb2RlPkNvbXBvbmVudFN0YXRlPC9jb2RlPiB0aGF0IGltcGxlbWVudHMKICAgICAgICAgdGhloDxjb2RlPm9yZy5hcGFjaGUuaGFybW9ueS5hd3Quc3RhdGUuU3RhdGU8L2NvZGU+CiAgICAgICAgIGludGVyZmFjZS4gVGhpcyBpbm5lciBjbGFzcyBlbmFibGVzIGltcGxlbWVudGluZyB0aGUgc3RhdGUKICAgICAgICAgb2YgYSBzcGVjaWZpYyBjb21wb25lbnQgYnkgb3ZlcnJpZGluZyBvbmx5IGEgZmV3IG1ldGhvZHMuCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIFN0YW5kYXJkIGNvbXBvbmVudHMgZGVsZWdhdGUgdGhlIHBhaW50aW5nIGFuZCBzaXplCiAgICAgICAgIGNhbGN1bGF0aW9uIHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlIHRoZW1lIGFuZCBwYXNzIHRoZWlyCiAgICAgICAgIHN0YXRlIGZpZWxkIHZhbHVlIGFzIGEgcGFyYW1ldGVyIHRvIGV2ZXJ5IG1ldGhvZCBvZiB0aGUKICAgICAgICAgdGhlbWUuCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIFBsYXRmb3JtLXNwZWNpZmljIGFuZCBjb21wb25lbnQtc3BlY2lmaWMgY29kZSBpcwogICAgICAgICBjb25jZW50cmF0ZWQgaW4gc2VwYXJhdGUgaGVscGVyIGNsYXNzZXMsIHN1Y2gKICAgICAgICAgYXOgPGNvZGU+RGVmYXVsdEJ1dHRvbjwvY29kZT4sIHRoZSBoZWxwZXIgdG8gdGhlIGRlZmF1bHQKICAgICAgICAgdGhlbWUsIGFuZKA8Y29kZT5XaW5DaGVja2JveDwvY29kZT4sIHRoZSBoZWxwZXIgdG8gdGhlCiAgICAgICAgIFdpbmRvd3M8YSBocmVmPSIjKiI+KjwvYT4gdGhlbWUuIFRoZSB0aGVtZSBjbGFzcyBjb250YWlucwogICAgICAgICBvbmx5IHNpbXBsZSBtZXRob2RzLgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJjbGFzcyI+CiAgICAgICAgIDxhIG5hbWU9IkV4YW1wbGVCdXR0b24iPjwvYT5FeGFtcGxlIDEKICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgVGhpcyBpcyBhbiBleGFtcGxlIHdpdGggdGhloDxjb2RlPkJ1dHRvbjwvY29kZT4gY29tcG9uZW50LgogICAgICA8L3A+CjxwcmU+CnB1YmxpYyB2b2lkIGRyYXdCdXR0b24oR3JhcGhpY3MgZywgQnV0dG9uU3RhdGUgcykgeyAKICAgIGRyYXdCdXR0b25CYWNrZ3JvdW5kKGcsIHMpOyAKICAgIGRyYXdCdXR0b25UZXh0KGcsIHMpOyAKfSAKcHJvdGVjdGVkIHZvaWQgZHJhd0J1dHRvbkJhY2tncm91bmQoR3JhcGhpY3MgZywgQnV0dG9uU3RhdGUgcykgeyAKICAgIERlZmF1bHRCdXR0b24uZHJhd0JhY2tncm91bmQoZywgcyk7IAp9IApwcm90ZWN0ZWQgdm9pZCBkcmF3QnV0dG9uVGV4dChHcmFwaGljcyBnLCBCdXR0b25TdGF0ZSBzKSB7IAogICAgRGVmYXVsdEJ1dHRvbi5kcmF3VGV4dChnLCBzKTsgCn0KPC9wcmU+CiAgICAgIDxwPgogICAgICAgICBXaGVuIGRlc2lnbmluZyBhIGN1c3RvbSB0aGVtZSwgeW91IG1heSBuZWVkIHRvIG92ZXJyaWRlIHNvbWUKICAgICAgICAgb2YgdGhlc2UgcHJvdGVjdGVkIG1ldGhvZHMuCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIEZpZ3VyZSAxMCBzaG93cyBhbiBleGFtcGxlIG9mIGNvbXBvbmVudCBjbGFzc2VzIHJlbGF0aW9uLAogICAgICAgICBpbm5lciBzdGF0ZXMgYW5kIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkgb2YgY29tcG9uZW50CiAgICAgICAgIHN0YXRlIGludGVyZmFjZXMuClRoZSBmaWd1cmUgY29udGFpbnMgc2hvcnQgbmFtZXMgZm9yIGNvbnZlbmllbmNlLCBmb3IgZXhhbXBsZSwgCiZuYnNwOzxjb2RlPkNvbXBvbmVudDwvY29kZT4gYWN0dWFsbHkgbWVhbnMgJm5ic3A7PGNvZGU+amF2YS5hd3QuQ29tcG9uZW50PC9jb2RlPi4gPC9wPgogICAgICA8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4KICAgICAgICAgPGltZyBhbHQ9CiAgICAgICAgICJNZXRob2RzIGFuZCBjbGFzc2VzIHJlbGF0ZWQgdG8gc3RhdGUgY2hhbmdlIG9wZXJhdGlvbnMiCiAgICAgICAgIHNyYz0iaW1hZ2VzL1RoZW1lc1N0YXRlcy5naWYiPgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJzcGVjaWFsIj4KICAgICAgICAgRmlndXJlIDEwOiBJbmhlcml0YW5jZSBhbmQgQ29tcG9zaXRpb24gZm9yIENvbXBvbmVudHMnIFN0YXRlCiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9ImJhY2t0b3RvcCI+CiAgICAgICAgIDxhIGhyZWY9IiN0b3AiPkJhY2sgdG8gVG9wPC9hPgogICAgICA8L3A+CiAgICAgIDxoMz4KICAgICAgICAgPGEgbmFtZT0KICAgICAgICAgIlVzaW5nX1N0YXRlX0ludGVyZmFjZXNfaW5fYV9TdGFuZGFyZF9Db21wb25lbnQiPjwvYT5Vc2luZwogICAgICAgICBTdGF0ZSBJbnRlcmZhY2VzIGluIGEgU3RhbmRhcmQgQ29tcG9uZW50CiAgICAgIDwvaDM+CiAgICAgIDxwPgogICAgICAgICBUaGlzIHNlY3Rpb24gaWxsdXN0cmF0ZXMgaG93IHRoZSBzdGF0ZSBpbnRlcmZhY2VzIGFyZSB1c2VkCiAgICAgICAgIGluIHRoZaA8Y29kZT5CdXR0b248L2NvZGU+IGNvbXBvbmVudC4gSW4gRFJMIEFXVCwgYWxsCiAgICAgICAgIHN0YW5kYXJkIGNvbXBvbmVudHMgZm9sbG93IHRoZSBzYW1lIG1vZGVsLgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICBUaGlzIGlzIGEgcGFydCBvZiB0aGWgPGNvZGU+amF2YS5hd3QuQnV0dG9uPC9jb2RlPiBjb2RlIHRoYXQKICAgICAgICAgaWxsdXN0cmF0ZXMgaG93IHRvIHVzZSB2aXN1YWwgdGhlbWVzIGluIHN0YW5kYXJkIGNvbXBvbmVudHMuCiAgICAgIDwvcD4KPHByZT4KY2xhc3MgU3RhdGUgZXh0ZW5kcyBDb21wb25lbnQuQ29tcG9uZW50U3RhdGUgaW1wbGVtZW50cyBCdXR0b25TdGF0ZSB7ICZoZWxsaXA7IH0gCmZpbmFsIHRyYW5zaWVudCBTdGF0ZSBzdGF0ZSA9IG5ldyBTdGF0ZSgpOyAKICAgIAp2b2lkIHByZXBhaW50KEdyYXBoaWNzIGcpIHsgCiAgICB0b29sa2l0LnRoZW1lLmRyYXdCdXR0b24oZywgc3RhdGUpOyAKfQo8L3ByZT4KICAgICAgPHA+CiAgICAgICAgIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhloDxjb2RlPnByZXBhaW50KCk8L2NvZGU+IG1ldGhvZCwKICAgICAgICAgd2hpY2ggcGFpbnRzIHN0YW5kYXJkIGNvbXBvbmVudHMuIFRoZSBwYWludGluZyBpdHNlbGYgaXMKICAgICAgICAgZG9uZSBieSB0aGUgdGhlbWUgY2xhc3MsIGFuZCBhbGwgdGhlIGluZm9ybWF0aW9uIGl0IHJlcXVpcmVzCiAgICAgICAgIGlzIGNvbnRhaW5lZCBpbiB0aGUgc3RhdGUgdmFyaWFibGUuCiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9ImJhY2t0b3RvcCI+CiAgICAgICAgIDxhIGhyZWY9IiN0b3AiPkJhY2sgdG8gVG9wPC9hPgogICAgICA8L3A+CiAgICAgIDxoMz4KICAgICAgICAgPGEgbmFtZT0iV2luZG93cyB0aGVtZSI+PC9hPldpbmRvd3M8YSBocmVmPSIjKiI+KjwvYT4gdGhlbWUKICAgICAgPC9oMz4KICAgICAgPHA+CiAgICAgICAgIEluIERSTCwgdGhlIFdpbmRvd3M8YSBocmVmPSIjKiI+KjwvYT4gdGhlbWUgaXMgaW1wbGVtZW50ZWQKICAgICAgICAgYnkgdGhlCiAgICAgICAgIGNsYXNzoDxjb2RlPm9yZy5hcGFjaGUuaGFybW9ueS5hd3QudGhlbWUud2luZG93cy5XaW5UaGVtZTwvY29kZT4sCiAgICAgICAgIHdoaWNoIGluaGVyaXRzIGZyb20gdGhlCiAgICAgICAgIGNsYXNzoDxjb2RlPm9yZy5hcGFjaGUuaGFybW9ueS5hd3QuVGhlbWU8L2NvZGU+LgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICBUaGWgPGNvZGU+V2luVGhlbWU8L2NvZGU+IGNsYXNzIHBhaW50cyBjb21wb25lbnRzIHVzaW5nIHRoZQogICAgICAgICBXaW5kb3dzPGEgaHJlZj0iIyoiPio8L2E+IEFQSQogICAgICAgICBmdW5jdGlvbqA8Y29kZT5EcmF3RnJhbWVDb250cm9sKCk8L2NvZGU+IGluIHRoZSBjbGFzc2ljIG1vZGUKICAgICAgICAgYW5koDxjb2RlPkRyYXdUaGVtZUJhY2tncm91bmQoKTwvY29kZT4gaW4gdGhlIFhQIG1vZGUsIGFuZAogICAgICAgICBiYXNpYyBXaW5kb3dzPGEgaHJlZj0iIyoiPio8L2E+IEFQSSBwYWludGluZyBmdW5jdGlvbnMuCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBhbHNvIGluY2x1ZGVzIHNldmVyYWwgaGVscGVyIGNsYXNzZXM6CiAgICAgIDwvcD4KICAgICAgPHVsPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIFRoZQogICAgICAgICAgICBjbGFzc6A8Y29kZT5vcmcuYXBhY2hlLmhhcm1vbnkuYXd0LmdsLldpblRoZW1lR3JhcGhpY3M8L2NvZGU+CiAgICAgICAgICAgIGhhcyBhIHNldCBvZiBuYXRpdmUgbWV0aG9kcyB0aGF0IGNhbGwgdGhlIFdpbmRvd3M8YSBocmVmPSAKICAgICAgICAgICAgIiMqIj4qPC9hPiBBUEkuIFRoaXMgY2xhc3MgaXMgdGlnaHRseSBjb3VwbGVkCiAgICAgICAgICAgIHdpdGigPGNvZGU+b3JnLmFwYWNoZS5oYXJtb255LmF3dC5nbC5XaW5HRElQR3JhcGhpY3MyRDwvY29kZT4sCiAgICAgICAgICAgIHdoaWNoIGlzIGFuIGltcGxlbWVudGF0aW9uCiAgICAgICAgICAgIG9moDxjb2RlPmphdmEuYXd0LkdyYXBoaWNzPC9jb2RlPi4KICAgICAgICAgICAgVGhloDxjb2RlPldpblRoZW1lR3JhcGhpY3M8L2NvZGU+IGNsYXNzCiAgICAgICAgICAgIHF1ZXJpZXOgPGNvZGU+V2luR0RJUEdyYXBoaWNzMkQ8L2NvZGU+IGZvciB0aGUgY3VycmVudAogICAgICAgICAgICBjbGlwLCB0cmFuc2xhdGlvbiBhbmQgZGV2aWNlIGNvbnRleHQuCiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgVGhlCiAgICAgICAgICAgIGNsYXNzoDxjb2RlPm9yZy5hcGFjaGUuaGFybW9ueS5hd3Qud3RrLndpbmRvd3MuV2luRXZlbnRRdWV1ZS5UaGVtZU1hcDwvY29kZT4KICAgICAgICAgICAgdGhhdCBoYW5kbGVzIHRoZW1lLXJlbGF0ZWQgbmF0aXZlIGV2ZW50cyBhbmQgb3BlbnMgYW5kCiAgICAgICAgICAgIGNsb3NlcyBoYW5kbGVzIG9mIG5hdGl2ZSB0aGVtZSBkYXRhIHdoZW4gbmVlZGVkLgogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIFRoZSBzZXQgb2YgaGVscGVyCiAgICAgICAgICAgIGNsYXNzZXOgPGNvZGU+b3JnLmFwYWNoZS5oYXJtb255LmF3dC53dGsudGhlbWUud2luZG93czwvY29kZT4KICAgICAgICAgICAgcmVzcG9uc2libGUgZm9yIHNwZWNpZmljIHR5cGVzIG9mIGNvbXBvbmVudHMsIGZvcgogICAgICAgICAgICBleGFtcGxlLKA8Y29kZT5vcmcuYXBhY2hlLmhhcm1vbnkuYXd0Lnd0ay50aGVtZS53aW5kb3dzLldpbkJ1dHRvbjwvY29kZT4uCiAgICAgICAgIDwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwIGNsYXNzPSJub3RlIj4KICAgICAgICAgTm90ZQogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJub3RldGV4dCI+CiAgICAgICAgIElmIHRoZSBXaW5kb3dzPGEgaHJlZj0iIyoiPio8L2E+IHRoZW1lIGRvZXMgbm90IHN1cHBvcnQgdGhlCiAgICAgICAgIGNvbWJpbmF0aW9uIG9mIGNvbXBvbmVudHMgYXR0cmlidXRlcywgaXQgZGVsZWdhdGVzIHBhaW50aW5nCiAgICAgICAgIHRvIHRoZSBkZWZhdWx0IHRoZW1lIGJ5IGNhbGxpbmcgdGhlIHN1cGVyIGNsYXNzLiBGb3IKICAgICAgICAgZXhhbXBsZSwgdGhlIGRlZmF1bHQgdGhlbWUgY2FuIGJlIHVzZWQgd2hlbiB0aGUgYmFja2dyb3VuZAogICAgICAgICBjb2xvciBvZiBhIHB1c2ggYnV0dG9uIGRpZmZlcnMgZnJvbSB0aGUgdGhlbWUgc2V0dGluZy4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4KICAgICAgICAgPGEgaHJlZj0iI3RvcCI+QmFjayB0byBUb3A8L2E+CiAgICAgIDwvcD4KICAgICAgPGgyPgogICAgICAgICA8YSBuYW1lPSJNdWx0aS1UaHJlYWRpbmdfc3VwcG9ydCI+PC9hPk11bHRpLVRocmVhZGluZwogICAgICAgICBzdXBwb3J0CiAgICAgIDwvaDI+CiAgICAgIDxwPgogICAgICAgICBDb21wbHlpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gWzxhIGhyZWY9IiNBV1RTcGVjIj4xPC9hPl0sCiAgICAgICAgIERSTCBBV1QgY2FuIHdvcmsgd2l0aGluIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gVGhpcwogICAgICAgICBpbXBsZW1lbnRhdGlvbiBlbnN1cmVzIGNvbnNpc3RlbmN5IG9mIEFXVCBmcmFtZXdvcmsgZGF0YQogICAgICAgICB3aGVuIGFjY2Vzc2VkIGJ5IG11bHRpcGxlIHRocmVhZHMuIEZvciB0aGF0LCBBV1QKICAgICAgICAgc3luY2hyb25pemVzIGl0cyBrZXkgY2xhc3Nlcy4KICAgICAgPC9wPgogICAgICA8aDM+CiAgICAgICAgIDxhIG5hbWU9IldoeVN5bmNocm9uaXplIj48L2E+V2h5IHN5bmNocm9uaXplCiAgICAgIDwvaDM+CiAgICAgIDxwPgogICAgICAgICBUaGUgbWFpbiBwdXJwb3NlIG9mIHN5bmNocm9uaXphdGlvbiBpcyBrZWVwaW5nIHRoZSBjb21wb25lbnQKICAgICAgICAgaGllcmFyY2h5IGNvbnNpc3RlbnQgd2hlbiBjb21wb25lbnQgcHJvcGVydGllcyBhcmUgcXVlcmllZAogICAgICAgICBhbmQvb3IgbW9kaWZpZWQsIHNvIHRoYXQgaXQgcG90ZW50aWFsbHkgYWZmZWN0cyBvdGhlcgogICAgICAgICBjb21wb25lbnRzLiBUaGlzIGluY2x1ZGVzIHRoZSBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwcywKICAgICAgICAgdGhlIGNoaWxkIGNvbXBvbmVudCBvcmRlciwgaW5oZXJpdGVkIHByb3BlcnRpZXMsIHN1Y2ggYXMgdGhlCiAgICAgICAgIGZvbnQgYW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLCB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gcmVsYXRlZAogICAgICAgICBwcm9wZXJ0aWVzLCBhcyB3ZWxsIGFzIHZpc2liaWxpdHksIGZvY3VzYWJsZSBzdGF0ZSBhbmQgb3RoZXIKICAgICAgICAgY29uZGl0aW9ucyByZWxldmFudCBmb3IgbWVzc2FnZSBoYW5kbGluZy4gQ29uY3VycmVudAogICAgICAgICBtb2RpZmljYXRpb25zIG9mIHRoZXNlIHByb3BlcnRpZXMgY2FuIG1ha2UgdGhlIEFXVCBmcmFtZXdvcmsKICAgICAgICAgc3RhdGUgaW5jb25zaXN0ZW50LgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICBGb3IgZXhhbXBsZSwgaWYgYSB0aHJlYWQgYWRkcyBhIGNvbXBvbmVudCB0byBhIGxpc3Qgb2YgY2hpbGQKICAgICAgICAgY29tcG9uZW50cyBmb3IgYSBjb250YWluZXIgd2l0aG91dCB1cGRhdGluZyB0aGlzCiAgICAgICAgIGNvbXBvbmVudCZyc3F1bztzIGZpZWxkoDxjb2RlPnBhcmVudDwvY29kZT4sIGFub3RoZXIgdGhyZWFkCiAgICAgICAgIHdvcmtpbmcgd2l0aCB0aGUgc2FtZSBjb21wb25lbnQgZ2V0cyB0aGUgd3JvbmcgdmFsdWUgb2YKICAgICAgICAgdGhloDxjb2RlPnBhcmVudDwvY29kZT4gZmllbGQuIE1vcmVvdmVyLCB0aGUgc2Vjb25kIHRocmVhZAogICAgICAgICBtYXkgcmVtb3ZlIHRoaXMgY29tcG9uZW50IGZyb20gdGhlIGNvbnRhaW5lciBjaGlsZHJlbiBsaXN0LAogICAgICAgICB3aGljaCBtYWtlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGZpcnN0IHRocmVhZCB1bnByZWRpY3RhYmxlLgogICAgICAgICBTeW5jaHJvbml6YXRpb24gaGVscHMgYXZvaWQgc3VjaCBwcm9ibGVtcy4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4KICAgICAgICAgPGEgaHJlZj0iI3RvcCI+QmFjayB0byBUb3A8L2E+CiAgICAgIDwvcD4KICAgICAgPGgzPgogICAgICAgICA8YSBuYW1lPSJIb3d0b1N5bmMiPjwvYT5Ib3cgdG8gc3luY2hyb25pemUKICAgICAgPC9oMz4KICAgICAgPHA+CiAgICAgICAgIFdoZW4gYSBtZXRob2Qgb3IgYSBibG9jayBvZiBjb2RlIGRlYWxzIHdpdGggdGhlIGRhdGEgdGhhdAogICAgICAgICBtdXN0IG5vdCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHksIGEgc3luY2hyb25pemVkIHNlY3Rpb24gaXMKICAgICAgICAgdXNlZC4gVGhlIERSTCBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgc3BlY2lhbCBtb25pdG9yIDxlbT5BV1QKICAgICAgICAgbG9jazwvZW0+IG1vcmUgcG93ZXJmdWwgdGhhbiBidWlsdC1pbiBKYXZhPGEgaHJlZj0iIyoiPio8L2E+CiAgICAgICAgIHN5bmNocm9uaXplZCBibG9ja3MgYW5kIG1ldGhvZHMuIFRoZSBBV1QgbG9jayBpcyBzaW1pbGFyIHRvCiAgICAgICAgIHRoZSBzeW5jaHJvbml6YXRpb24gdG9vbHMgcHJvdmlkZWQgYnkKICAgICAgICAgdGhloDxjb2RlPmphdmEudXRpbC5jb25jdXJyZW50PC9jb2RlPiBwYWNrYWdlLiBUaGUKICAgICAgICAgc3luY2hyb25pemVkIHNlY3Rpb24gdXNpbmcgdGhlIEFXVCBsb2NrIGhhcyBpdHMgb3duCiAgICAgICAgIHNwZWNpZmljcywgYXMgZGVtb25zdHJhdGVkIGJ5IHRoZSBleGFtcGxlIGJlbG93LgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJjbGFzcyI+CiAgICAgICAgIEV4YW1wbGUgMgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICBUaGlzIGV4YW1wbGUgcHJvdmlkZXMgYW4gZXhjZXJwdCBvZiBjb2RlIGZyb20KICAgICAgICAgdGhloDxjb2RlPkNvbXBvbmVudDwvY29kZT4gY2xhc3MgZGVtb25zdHJhdGluZyBhIHR5cGljYWwKICAgICAgICAgc3luY2hyb25pemVkIHNlY3Rpb24gaW4gdGhlIEFXVCBjb2RlLiBUaGUKICAgICAgICAgbWV0aG9kc6A8Y29kZT5sb2NrQVdUKCk8L2NvZGU+IGFuZKA8Y29kZT51bmxvY2tBV1QoKTwvY29kZT4KICAgICAgICAgYXJlIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGUgY29kZSBiZXR3ZWVuCiAgICAgICAgIHRoZW0gaXMgc3luY2hyb25pemVkIGJ5IHRoZSBBV1QgbG9jay4KICAgICAgPC9wPgo8cHJlPgpmaW5hbCB0cmFuc2llbnQgVG9vbGtpdCB0b29sa2l0ID0gVG9vbGtpdC5nZXREZWZhdWx0VG9vbGtpdCgpOwomaGVsbGlwOwpwdWJsaWMgQ29sb3IgZ2V0QmFja2dyb3VuZCgpIHsKICAgIHRvb2xraXQubG9ja0FXVCgpOwogICAgdHJ5IHsKICAgICAgICBpZiAoKGJhY2tDb2xvciA9PSBudWxsKSAmJiAocGFyZW50ICE9IG51bGwpKSB7CiAgICAgICAgICAgIHJldHVybiBwYXJlbnQuZ2V0QmFja2dyb3VuZCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYmFja0NvbG9yOwogICAgfSBmaW5hbGx5IHsKICAgICAgICB0b29sa2l0LnVubG9ja0FXVCgpOwogICAgfQp9CjwvcHJlPgogICAgICA8cD4KICAgICAgICAgRnJvbSB0aGUgc3ludGFjdGljYWwgc3RhbmRwb2ludCwgdGhpcyBpcyBhIHRyeS1maW5hbGx5CiAgICAgICAgIHN0cnVjdHVyZSwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0CiAgICAgICAgIHRoZaA8Y29kZT51bmxvY2tBV1QoKTwvY29kZT4gbWV0aG9kIGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIKICAgICAgICAgZG9pbmcgdGhlIHVzZWZ1bCB3b3JrIGluIHRoZSBib2R5IG9mIHRyeSBibG9jay4gTG9naWNhbGx5LAogICAgICAgICBpdCBpcyB1c2VkIGFzIGFuIG9yZGluYXJ5IHN5bmNocm9uaXplZCBibG9jaywgZXhjZXB0IHdoZW4KICAgICAgICAgdXNpbmcgQVdUIGxvY2sgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eS4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4KICAgICAgICAgPGEgaHJlZj0iI3RvcCI+QmFjayB0byBUb3A8L2E+CiAgICAgIDwvcD4KICAgICAgPGgzPgogICAgICAgICA8YSBuYW1lPSJXaGVudG9TeW5jIj48L2E+V2hlbiB0byBzeW5jaHJvbml6ZQogICAgICA8L2gzPgogICAgICA8cD4KICAgICAgICAgQVdUIHN5bmNocm9uaXphdGlvbiBjb3ZlcnMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogICAgICA8L3A+CiAgICAgIDx1bD4KICAgICAgICAgPGxpPgogICAgICAgICAgICBDb21wb25lbnRzLCBzdWNoCiAgICAgICAgICAgIGFzoDxjb2RlPkNvbXBvbmVudDwvY29kZT4soDxjb2RlPkJ1dHRvbjwvY29kZT4sCiAgICAgICAgICAgIGFuZKA8Y29kZT5GcmFtZTwvY29kZT4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpPgogICAgICAgICAgICBMYXlvdXQgbWFuYWdlcnMsIHN1Y2ggYXOgPGNvZGU+Rmxvd0xheW91dDwvY29kZT4KICAgICAgICAgICAgYW5koDxjb2RlPkdyaWRCYWdMYXlvdXQ8L2NvZGU+CiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgQXV4aWxpYXJ5LCBzdWNoIGFzoDxjb2RlPlRvb2xraXQ8L2NvZGU+CiAgICAgICAgICAgIGFuZKA8Y29kZT5LZXlib2FyZEZvY3VzTWFuYWdlcjwvY29kZT4KICAgICAgICAgPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+CiAgICAgICAgIFRoZSB0b3RhbCBudW1iZXIgb2Ygc3luY2hyb25pemVkIGNsYXNzZXMgbmVhcnMgNDAuCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIFNpbXBsZSBkYXRhIHN0cnVjdHVyZXMsIGZvciBleGFtcGxlLKA8Y29kZT5SZWN0YW5nbGU8L2NvZGU+CiAgICAgICAgIG9yoDxjb2RlPlBvaW50PC9jb2RlPiwgYXJlIG5vdCBwcm90ZWN0ZWQgZnJvbSBjb25jdXJyZW50CiAgICAgICAgIG1vZGlmaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9ImNsYXNzIj4KICAgICAgICAgR2VuZXJhbCBydWxlcyBvbiBob3cgdG8gdXNlIHN5bmNocm9uaXplZCBzZWN0aW9ucwogICAgICA8L3A+CiAgICAgIDx1bD4KICAgICAgICAgPGxpPgogICAgICAgICAgICBPbmx5IHB1YmxpYyBhbmQgcHJvdGVjdGVkIG1ldGhvZHMgb2YgdGhlIHB1YmxpYyBBUEkgbXVzdAogICAgICAgICAgICBiZSBzeW5jaHJvbml6ZWQgYnkgdGhlIEFXVCBsb2NrLiBQYWNrYWdlLXByaXZhdGUgbWV0aG9kcwogICAgICAgICAgICBhbmQgcHJpdmF0ZSBtZXRob2QgYXJlIG5vdCwgd2l0aCBvbmx5IGEgZmV3IDxhIGhyZWY9IAogICAgICAgICAgICAiI1N5bmNFeGNlcHRpb25zIj5leGNlcHRpb25zPC9hPi4gRm9yIGFuIGV4YW1wbGUsIHNlZQogICAgICAgICAgICB0aGWgPGNvZGU+amF2YS5hd3QuVG9vbGtpdDwvY29kZT4gY2xhc3MuCiAgICAgICAgIDwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICAgQSBzeW5jaHJvbml6ZWQgc2VjdGlvbiBvZiBjb2RlIG11c3Qgbm90IGNhbGwgdXNlciBjb2RlLAogICAgICAgICAgICBzdWNoIGFzIGV2ZW50IGxpc3RlbmVycyBvciBmcmVxdWVudGx5IG92ZXJyaWRkZW4gbWV0aG9kcy4KICAgICAgICAgPC9saT4KICAgICAgPC91bD4KICAgICAgPHAgY2xhc3M9ImNsYXNzIj4KICAgICAgICAgPGEgbmFtZT0iU3luY0V4Y2VwdGlvbnMiPjwvYT5FeGNlcHRpb25zCiAgICAgIDwvcD4KICAgICAgPHVsPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIExheW91dCBtYW5hZ2VycyBhcmUgYWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBBV1QgbG9jay4KICAgICAgICAgPC9saT4KICAgICAgICAgPGxpPgogICAgICAgICAgICBDZXJ0YWluIG1ldGhvZHMgbWlnaHQgZ2V0IG92ZXJyaWRkZW4gYnkgdXNlciBjb2RlLCBidXQKICAgICAgICAgICAgYXJlIGNhbGxlZCB1bmRlciB0aGUgQVdUIGxvY2ssIGZvciBleGFtcGxlLCB0aGUKICAgICAgICAgICAgbWV0aG9koDxjb2RlPmFkZE5vdGlmeSgpPC9jb2RlPiBpbgogICAgICAgICAgICB0aGWgPGNvZGU+Q29tcG9uZW50PC9jb2RlPiBhbmSgPGNvZGU+Q29udGFpbmVyPC9jb2RlPgogICAgICAgICAgICBjbGFzc2VzLgogICAgICAgICA8L2xpPgogICAgICAgICA8bGk+CiAgICAgICAgICAgIFBsYXRmb3JtLXNwZWNpZmljIGNvZGUgb2YKICAgICAgICAgICAgdGhloDxjb2RlPm9yZy5hcGFjaGUuaGFybW9ueS5hd3Qud3RrPC9jb2RlPiBwYWNrYWdlIG11c3QKICAgICAgICAgICAgbm90IHVzZSB0aGUgQVdUIGxvY2sgZXhwbGljaXRseS4KICAgICAgICAgPC9saT4KICAgICAgPC91bD4KICAgICAgPHAgY2xhc3M9Im5vdGUiPgogICAgICAgICBOb3RlCiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9Im5vdGV0ZXh0Ij4KICAgICAgICAgSW4gcGxhdGZvcm0tc3BlY2lmaWMgZXZlbnQgaGFuZGxpbmcgY29kZSwgdGhlIGV2ZW50IGxpc3RlbmVyCiAgICAgICAgIHVzZXMgdGhpcyBsb2NrIGJ5IGNhbGxpbmcKICAgICAgICAgbWV0aG9kc6A8Y29kZT5vbkV2ZW50QmVnaW4oKTwvY29kZT4KICAgICAgICAgYW5koDxjb2RlPm9uRXZlbnRFbmQoKTwvY29kZT4uIFRoZXNlIG1ldGhvZHMKICAgICAgICAgY2FsbKA8Y29kZT5sb2NrQVdUKCk8L2NvZGU+IGFuZKA8Y29kZT51bmxvY2tBV1QoKTwvY29kZT4KICAgICAgICAgcmVzcGVjdGl2ZWx5LiBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRoYXQgdGhlIGRpc3BhdGNoZXIgY2FuCiAgICAgICAgIGZpbmQgdGhlIGV2ZW50IHRhcmdldCBhbmQgdGhhdCB0aGUgZGF0YSBpcyBub3QgbW9kaWZpZWQgYnkKICAgICAgICAgYW5vdGhlciB0aHJlYWQuCiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9ImJhY2t0b3RvcCI+CiAgICAgICAgIDxhIGhyZWY9IiN0b3AiPkJhY2sgdG8gVG9wPC9hPgogICAgICA8L3A+CiAgICAgIDxoMz4KICAgICAgICAgPGEgbmFtZT0iU3luY2hyb25pemVyIj48L2E+U3luY2hyb25pemVyCiAgICAgIDwvaDM+CiAgICAgIDxwPgogICAgICAgICBUaGWgPGNvZGU+b3JnLmFwYWNoZS5oYXJtb255LmF3dC53dGsuU3luY2hyb25pemVyPC9jb2RlPgogICAgICAgICBjbGFzcyBpbXBsZW1lbnRzIHRoZSBBV1QgbG9jay4gVGhloDxjb2RlPlRvb2xraXQ8L2NvZGU+CiAgICAgICAgIGNsYXNzIGhvbGRzIHRoZSByZWZlcmVuY2UgdG8gdGhlIHN5bmNocm9uaXplciBpbnN0YW5jZS4gSW4gYQogICAgICAgICBzdGFuZGFsb25lIGFwcGxpY2F0aW9uLKA8Y29kZT5Ub29sa2l0PC9jb2RlPgogICAgICAgICBhbmSgPGNvZGU+U3luY2hyb25pemVyPC9jb2RlPiBhcmUgc2luZ2xldG9uIGNsYXNzZXMuIEluIHRoZQogICAgICAgICBtdWx0aS1jb250ZXh0IG1vZGUsIEFXVCBwcm92aWRlcwogICAgICAgICBpbmRlcGVuZGVudKA8Y29kZT5Ub29sa2l0PC9jb2RlPgogICAgICAgICBhbmSgPGNvZGU+U3luY2hyb25pemVyPC9jb2RlPiBpbnN0YW5jZXMgcGVyIGVhY2ggY29udGV4dC4KICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgRmlndXJlIDExIHNob3dzIHRoZSBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXAgb2Ygc3luY2hyb25pemVyCiAgICAgICAgIGNsYXNzZXMuIFRoZSBMaW51eDxhIGhyZWY9IiMqIj4qPC9hPiBhbmQgV2luZG93czxhIGhyZWY9CiAgICAgICAgICIjKiI+KjwvYT4gb3BlcmF0aW5nIHN5c3RlbXMgaGF2ZSB0aGVpciBvd24gY2xhc3Nlcy4KICAgICAgPC9wPgogICAgICA8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4KICAgICAgICAgPGltZyBhbHQ9CiAgICAgICAgICJXaW5kb3dzIGFuZCBMaW51eCBzeW5jaHJvbml6ZXJzIGFyZSBzdWJjbGFzc2VzIG9mIFN5bmNocm9uaXplciIKICAgICAgICAgIHNyYz0iaW1hZ2VzL3RocmVhZHNNYWpvckNsYXNzZXMuZ2lmIj4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+CiAgICAgICAgIEZpZ3VyZSAxMTogU3luY2hyb25pemVyIENsYXNzZXMKICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgVGhlIGJhc2UgY2xhc3OgPGNvZGU+U3luY2hyb25pemVyPC9jb2RlPiByZXByZXNlbnRzIGEgbXV0ZXgKICAgICAgICAgd2l0aCBhIGhpZ2gtcHJpb3JpdHkgPGEgaHJlZj0iI0V2ZW50X0hhbmRsaW5nIj5ldmVudAogICAgICAgICBkaXNwYXRjaCB0aHJlYWQ8L2E+LiBBbGwgdXNlciB0aHJlYWRzIGFyZSBzZXJ2ZWQgaW4gdGhlIEZJRk8KICAgICAgICAgKGZpcnN0IGluIGZpcnN0IG91dCkgb3JkZXIsIHdoZXJlYXMgRURUIGhhcyBoaWdoZXIgcHJpb3JpdHkKICAgICAgICAgYW5kIGlzIHNlcnZlZCBpbiB0aGUgTElGTyAobGFzdCBpbiBmaXJzdCBvdXQpIG9yZGVyLgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPgogICAgICAgICA8YSBocmVmPSIjdG9wIj5CYWNrIHRvIFRvcDwvYT4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0iY2xhc3MiPgogICAgICAgICBTeW5jaHJvbml6ZXIgZm9yIExpbnV4PGEgaHJlZj0iIyoiPio8L2E+CiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIEFXVCB1c2VzIHRoZSBYbGliIGxpYnJhcnkgdG8gYWNjZXNzIG5hdGl2ZSB3aW5kb3cgcmVzb3VyY2VzCiAgICAgICAgIG9uIExpbnV4PGEgaHJlZj0iIyoiPio8L2E+LiBUaGUgWGxpYiBsaWJyYXJ5IGlzIHRocmVhZC1zYWZlCiAgICAgICAgIGFuZCBhbGwgdXNlciBhbmQgRURUIHRocmVhZHMgY2FuIGZyZWVseSBhY2Nlc3MgdGhlIG5hdGl2ZQogICAgICAgICBzeXN0ZW0gdGhyb3VnaCB0aGUgQVdUIGludGVyZmFjZSwgYXMgc2hvd24gaW4gRmlndXJlIDEyLiBBcwogICAgICAgICBhIHJlc3VsdCwgdGhlCiAgICAgICAgIGNsYXNzoDxjb2RlPm9yZy5hcGFjaGUuaGFybW9ueS5hd3Qud3RrLmxpbnV4LkxpbnV4U3luY2hyb25pemVyPC9jb2RlPgogICAgICAgICBjb250YWlucyBubyBleHRlbnNpb25zCiAgICAgICAgIHRvoDxjb2RlPmphdmEuYXd0LlN5bmNocm9uaXplcjwvY29kZT4uCiAgICAgIDwvcD4KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CiAgICAgICAgIDxpbWcgYWx0PQogICAgICAgICAidXNlciB0aHJlYWRzIGFjY2VzcyBuYXRpdmUgcmVzb3VyY2VzIGluZGVwZW5kZW50bHkgb2YgdGhlIEVEVCB0aHJlYWQiCiAgICAgICAgICBzcmM9ImltYWdlcy9UaHJlYWRFRFQxLmdpZiI+CiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9InNwZWNpYWwiPgogICAgICAgICBGaWd1cmUgMTI6IEFjY2VzcyB0byB0aGUgTmF0aXZlIFN5c3RlbSBvbiBMaW51eDxhIGhyZWY9CiAgICAgICAgICIjKiI+KjwvYT4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4KICAgICAgICAgPGEgaHJlZj0iI3RvcCI+QmFjayB0byBUb3A8L2E+CiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9ImNsYXNzIj4KICAgICAgICAgU3luY2hyb25pemVyIGZvciBXaW5kb3dzPGEgaHJlZj0iIyoiPio8L2E+CiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIFN5bmNocm9uaXphdGlvbiBvbiBXaW5kb3dzPGEgaHJlZj0iIyoiPio8L2E+IGlzIGRpZmZlcmVudAogICAgICAgICBkdWUgdG8gV2luZG93czxhIGhyZWY9IiMqIj4qPC9hPiBsaWJyYXJpZXMgc3BlY2lmaWNzLgogICAgICAgICBGaXJzdGx5LCBjaGFuZ2luZyB0aGUgc3RhdGUgb2YgYSBuYXRpdmUgd2luZG93IHVzdWFsbHkKICAgICAgICAgcHJvZHVjZXMgYSBzeW5jaHJvbm91cyBldmVudCB0aGF0IHJlcG9ydHMgdGhpcyBjaGFuZ2UuCiAgICAgICAgIFNlY29uZGx5LCBvbmx5IHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIGEgd2luZG93IHJlY2VpdmVzCiAgICAgICAgIG5hdGl2ZSBldmVudHMgcmVsYXRlZCB0byB0aGF0IHdpbmRvdy4KICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgSW4gRFJMIEFXVCwgdGhlIDxhIGhyZWY9IiNFdmVudF9IYW5kbGluZyI+ZXZlbnQgZGlzcGF0Y2gKICAgICAgICAgdGhyZWFkPC9hPiBoYW5kbGVzIGFsbCBuYXRpdmUgZXZlbnRzIGFuZCwgY29uc2VxdWVudGx5LCBpcwogICAgICAgICB0aGUgb25seSB0aHJlYWQgdGhhdCBjYW4gY3JlYXRlIHdpbmRvd3MuIEVEVCBhbHNvIGNoYW5nZXMKICAgICAgICAgdGhlIHdpbmRvdyZyc3F1bztzIHN0YXRlIHRvIHNpbXBsaWZ5IHRoZSBuYXRpdmUgZXZlbnRzCiAgICAgICAgIGhhbmRsaW5nIHNjaGVtZS4gTm9uLUVEVCB0aHJlYWRzIGNhbiBjcmVhdGUgYW5kIG1hbmlwdWxhdGUKICAgICAgICAgbmF0aXZlIHdpbmRvd3MgYnkgZ2l2aW5nIHRhc2tzIHRvIEVEVC4gVXNlciBhbmQgRURUCiAgICAgIHRocmVhZHMgY29vcGVyYXRpb24gaXMgc2hvd24gaW4gRmlndXJlIDEzLiA8L3A+CiAgICAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgogICAgICAgICA8aW1nIGFsdD0KICAgICAgICAgInVzZXIgdGhyZWFkcyBhY2Nlc3MgbmF0aXZlIHJlc291cmNlcyB2aWEgb2YgdGhlIEVEVCB0aHJlYWQiCiAgICAgICAgIHNyYz0iaW1hZ2VzL1RocmVhZEVEVDIuZ2lmIj4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+CiAgICAgICAgIEZpZ3VyZSAxMzogQWNjZXNzIHRvIHRoZSBOYXRpdmUgU3lzdGVtIG9uIFdpbmRvd3M8YSBocmVmPQogICAgICAgICAiIyoiPio8L2E+IHdpdGggRURUCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIFRoZaA8Y29kZT5vcmcuYXBhY2hlLmhhcm1vbnkuYXd0Lnd0ay53aW5kb3dzLldpblN5bmNocm9uaXplcjwvY29kZT4KICAgICAgICAgY2xhc3MsIHRoZSBleHRlbnNpb24gb2agPGNvZGU+U3luY2hyb25pemVyPC9jb2RlPiwKICAgICAgICAgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNloDxjb2RlPk5hdGl2ZVNlcnZlcjwvY29kZT4sIHdoaWNoCiAgICAgICAgIGVuYWJsZXMgdXNlciB0aHJlYWRzIHRvIHF1ZXJ5IEVEVCBmb3IgYWNjZXNzIHRvIG5hdGl2ZQogICAgICAgICByZXNvdXJjZXMuCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIEhvd2V2ZXIsIGRlbGVnYXRpbmcgYWNjZXNzIHRvIG5hdGl2ZSByZXNvdXJjZXMgdG8gRURUCiAgICAgICAgIHJlcXVpcmVzIGEgbW9yZSBjb21wbGljYXRlZCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtLiBVc2luZwogICAgICAgICB0aGWgPGNvZGU+U3luY2hyb25pemVyPC9jb2RlPiBsb2dpYyBhcyBpcyByZXN1bHRzIGluIGEKICAgICAgICAgcG90ZW50aWFsIGRlYWRsb2NrIHdoaWxlIGhhbmRsaW5nIG5hdGl2ZSBXaW5kb3dzPGEgaHJlZj0KICAgICAgICAgIiMqIj4qPC9hPiBldmVudHMuIEZpZ3VyZSAxNCBzaG93cyB0aGUgc2NlbmFyaW8gb2YgdGhlCiAgICAgICAgIGRlYWRsb2NrLgogICAgICA8L3A+CiAgICAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgogICAgICAgICA8aW1nIGFsdD0idGhyZWFkIGV4ZWN1dGlvbiBmbG93cyB3aXRoIGRlYWRsb2NrIGlsbHVzdHJhdGVkIgogICAgICAgICBzcmM9ImltYWdlcy9UaHJlYWREZWFkbG9jay5naWYiPgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJzcGVjaWFsIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4KICAgICAgICAgRmlndXJlIDE0OiBEZWFkbG9jayB3aXRoIHRoZSB1c2VyIHRocmVhZCBhbmQgRURUCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIDxlbT50MTwvZW0+OiBUaGUgdXNlciB0aHJlYWQgc3RhcnRzLgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICA8ZW0+dDI8L2VtPjogRURUIHN0YXJ0cy4KICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgPGVtPnQzPC9lbT46IFRoZSB1c2VyIHRocmVhZCBvYnRhaW5zIHRoZSBBV1QgbG9jay4KICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgPGVtPnQ0PC9lbT46IEVEVCB0cmllcyB0byBvYnRhaW4gdGhlIEFXVCBsb2NrIGFuZCBnZXRzCiAgICAgICAgIGJsb2NrZWQuCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIDxlbT50NTwvZW0+OiBUaGUgdXNlciB0aHJlYWQgcmVxdWVzdHMgYSBzZXJ2aWNlIGZyb20gRURUIHZpYQogICAgICAgICB0aGWgPGNvZGU+TmF0aXZlU2VydmVyPC9jb2RlPiBpbnRlcmZhY2UgYW5kIGdldHMgYmxvY2tlZAogICAgICAgICBmb3JldmVyIGJlY2F1c2UgRURUIGlzIGJsb2NrZWQgdG9vLgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICBUaGWgPGNvZGU+V2luU3luY2hyb25pemVyPC9jb2RlPiBjbGFzcyByZXNvbHZlcyB0aGUgZGVhZGxvY2sKICAgICAgICAgaXNzdWUgYnkgY29tYmluaW5nIHRoZSBzeW5jaHJvbml6ZXImcnNxdW87cyBwcm90b2NvbCBhbmQgdGhlCiAgICAgICAgIG5hdGl2ZSBzZXJ2ZXIgcHJvdG9jb2wuIEZvciB0aGF0LCBFRFQgc3dpdGNoZXMgYmV0d2VlbiBoYW5kbGluZyBldmVudHMgYW5kIHByb3ZpZGluZyBhY2Nlc3MgdG8gbmF0aXZlIHJlc291cmNlcyBmb3Igb3RoZXIgcnVubmluZyB0aHJlYWRzLCBhcyBzaG93biBpbiBGaWd1cmUgMTUuCiAgICAgIDwvcD4KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CiAgICAgICAgIDxpbWcgYWx0PSJFRFQgbW9kZXMiIHNyYz0iaW1hZ2VzL1RocmVhZEFXVExvY2suZ2lmIj4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+CiAgICAgIEZpZ3VyZSAxNS4gRURUIE9wZXJhdGlvbiA8L3A+CiAgICAgIDxwPgogICAgICAgICBUaGlzIGFsZ29yaXRobSAgZW5hYmxlcyBkZXRlY3RpbmcgYQogICAgICAgICBwb3RlbnRpYWwgZGVhZGxvY2sgYW5kIHJlc29sdmluZyBpdC4gV2hlbiBFRFQgaXMgcmVxdWVzdGVkCiAgICAgICAgIHRvIHByb3ZpZGUgYWNjZXNzIHRvIG5hdGl2ZSByZXNvdXJjZXMgd2hpbGUgaXQgaXMgd2FpdGluZyB0byBvYnRhaW4gdGhlIEFXVAogICAgICAgICBsb2NrLCBFRFQgYXdha2VzLCBzZXJ2ZXMgdGhlIHJlcXVlc3QgYW5kIHJlc3VtZXMgd2FpdGluZy4KICAgICAgICAgU2VydmluZyB0aGUgbmF0aXZlIHJlc291cmNlIHJlcXVlc3QgaXMgdHJhbnNwYXJlbnQgZm9yIHRoZQogICAgICAgICBldmVudC1oYW5kbGluZyBzaWRlIG9mIEVEVCBiZWNhdXNlIHRoaXMgb3BlcmF0aW9uIGlzCiAgICAgICAgIHBlcmZvcm1lZCB3aGlsZSBFRFQgaXMgaW5zaWRlIG9moDxjb2RlPmxvY2tBV1QoKTwvY29kZT4KICAgICAgICAgbWV0aG9kLiBUaGUgZGVhZGxvY2sgaXMgcmVzb2x2ZWQsIGFzIHNob3duIGluIEZpZ3VyZSAxNi4KICAgICAgPC9wPgogICAgICA8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4KICAgICAgICAgPGltZyBhbHQ9IlRocmVhZCBleGVjdXRpb24gZmxvdyB3aXRoIG5vIGRlYWRsb2NrIiBzcmM9IAogICAgICAgICAiaW1hZ2VzL1RocmVhZE5vRGVhZGxvY2suZ2lmIj4KICAgICAgPC9wPgogICAgICA8cCBjbGFzcz0ic3BlY2lhbCIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CiAgICAgICAgIEZpZ3VyZSAxNjogRGVhZGxvY2sgUmVzb2x1dGlvbiBieSBXaW5TeW5jaHJvbml6ZXIKICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgPGVtPnQxPC9lbT46IFRoZSB1c2VyIHRocmVhZCBzdGFydHMuCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIDxlbT50MjwvZW0+OiBFRFQgc3RhcnRzLgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICA8ZW0+dDM8L2VtPjogVGhlIHVzZXIgdGhyZWFkIG9idGFpbnMgdGhlIEFXVCBsb2NrLgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICA8ZW0+dDQ8L2VtPjogRURUIHRyaWVzIHRvIG9idGFpbiB0aGUgQVdUIGxvY2sgYW5kIGdldHMKICAgICAgICAgYmxvY2tlZC4KICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgPGVtPnQ1PC9lbT46IFRoZSB1c2VyIHRocmVhZCByZXF1ZXN0cyBFRFQgc2VydmljZSBhbmQgYWxzbwogICAgICAgICBnZXRzIGJsb2NrZWQuIEVEVCBzdGFydHMgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdC4KICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgPGVtPnQ2PC9lbT46IEVEVCBmaW5pc2hlcyBwcm9jZXNzaW5nIHJlcXVlc3QuIFRoZSB1c2VyCiAgICAgICAgIHRocmVhZCByZXN1bWVzLgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICA8ZW0+dDc8L2VtPjogVGhlIHVzZXIgdGhyZWFkIHJlbGVhc2VzIHRoZSBBV1QgbG9jaywgRURUCiAgICAgICAgIG9idGFpbnMgaXQuCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIDxlbT50ODwvZW0+OiBUaGUgdXNlciB0aHJlYWQgbWF5IGNvbnRpbnVlIGl0cyB3b3JrIG9yIGV4aXQuCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIDxlbT50OTwvZW0+OiBFRFQgcmVsZWFzZXMgdGhlIEFXVCBsb2NrLgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICA8ZW0+dDEwPC9lbT46IEVEVCBjb250aW51ZXMgb3BlcmF0aW9uLgogICAgICA8L3A+CiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPgogICAgICAgICA8YSBocmVmPSIjdG9wIj5CYWNrIHRvIFRvcDwvYT4KICAgICAgPC9wPgogICAgICA8aDI+CiAgICAgICAgIDxhIG5hbWU9IlJlZmVyZW5jZXMiPjwvYT4gUmVmZXJlbmNlcwogICAgICA8L2gyPgogICAgICA8cD4KICAgICAgICAgWzxhIG5hbWU9IkFXVFNwZWMiPjwvYT4xXSBBV1Qgc3BlYywgPGEgaHJlZj0gCiAgICAgICAgICJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS41LjAvZG9jcy9ndWlkZS9hd3QvaW5kZXguaHRtbCIKICAgICAgICAgdGFyZ2V0PQogICAgICAgICAiX2JsYW5rIj5odHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS41LjAvZG9jcy9ndWlkZS9hd3QvaW5kZXguaHRtbDwvYT4KICAgICAgPC9wPgogICAgICA8cD4KICAgICAgICAgWzxhIG5hbWU9IlN3aW5nUmVmIj48L2E+Ml0gU3dpbmcgTGlicmFyeSBEZXNjcmlwdGlvbiwgPGEKICAgICAgICAgaHJlZj0gCiAgICAgICAgICJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS41LjAvZG9jcy9ndWlkZS9zd2luZy9pbmRleC5odG1sIgogICAgICAgICB0YXJnZXQ9CiAgICAgICAgICJfYmxhbmsiPmh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjUuMC9kb2NzL2d1aWRlL3N3aW5nL2luZGV4Lmh0bWw8L2E+CiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICAgIFs8YSBuYW1lPSJGb2N1c1JlZiI+PC9hPjNdIEFXVCBGb2N1cyBTdWJzeXN0ZW0KICAgICAgICAgc3BlY2lmaWNhdGlvbiwgPGEgaHJlZj0gCiAgICAgICAgICJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS41LjAvZG9jcy9hcGkvamF2YS9hd3QvZG9jLWZpbGVzL0ZvY3VzU3BlYy5odG1sIgogICAgICAgICAgdGFyZ2V0PQogICAgICAgICAiX2JsYW5rIj5odHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS41LjAvZG9jcy9hcGkvamF2YS9hd3QvZG9jLWZpbGVzL0ZvY3VzU3BlYy5odG1sPC9hPgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICCgCiAgICAgIDwvcD4KICAgICAgPHAgY2xhc3M9ImJhY2t0b3RvcCI+CiAgICAgICAgIDxhIGhyZWY9IiN0b3AiPkJhY2sgdG8gVG9wPC9hPgogICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgICA8YSBuYW1lPSIqIj4qPC9hPiBPdGhlciBicmFuZHMgYW5kIG5hbWVzIGFyZSB0aGUgcHJvcGVydHkgb2YKICAgICAgICAgdGhlaXIgcmVzcGVjdGl2ZSBvd25lcnMuCiAgICAgIDwvcD4KICAgPC9ib2R5Pgo8L2h0bWw+Cgo=