PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgDQogImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+DQo8IS0tDQogICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQogICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCiAgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQogICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQogICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQogICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQogICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQoNCiAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCiAgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQogICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCiAgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KICAgdW5kZXIgdGhlIExpY2Vuc2UuDQotLT4NCjxodG1sPg0KPGhlYWQ+DQogPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSIvPg0KIDxtZXRhIG5hbWU9IkF1dGhvciIgY29udGVudD0iTWFsY29sbSBFZGdhciIvPg0KIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBsYW5nPSJlbiIgY29udGVudD0iQXBhY2hlIENsaWNrIEphdmEgd2ViIGFwcGxpY2F0aW9uIGZyYW1ld29yayIvPg0KIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBsYW5nPSJlbiIgY29udGVudD0iQXBhY2hlIENsaWNrLCBDbGljayBGcmFtZXdvcmssIEphdmEsIEpFRSwgSjJFRSwgd2ViIGFwcGxpY2F0aW9uIGZyYW1ld29yaywgb3BlbiBzb3VyY2UiLz4NCiA8dGl0bGU+QXBhY2hlIENsaWNrPC90aXRsZT4NCiA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9oZWxwLmNzcyIvPg0KIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQogIGRkIHsNCiAgICBtYXJnaW4tdG9wOiAwLjVlbTsNCiAgICBtYXJnaW4tbGVmdDogMmVtOw0KICAgIG1hcmdpbi1ib3R0b206IDEuNWVtOw0KICB9DQogIHRhYmxlLnNwb25zb3JzIHRkIHsNCiAgICAgdGV4dC1hbGlnbjogbGVmdDsNCiAgICAgbWFyZ2luLWJvdHRvbTogMWVtOw0KICAgICBtYXJnaW4tdG9wOiAwZW07DQogICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7DQogICAgIHBhZGRpbmc6IDhweDsNCiAgfQ0KICAudGVzdGltb255IHsNCiAgICAgbWFyZ2luLXRvcDogMmVtOw0KICAgICBtYXJnaW4tYm90dG9tOiAxZW07DQogICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgICBmb250LWZhbWlseTogdmVyZGFuYTsNCiAgICAgZm9udC1zaXplOiAxNnB4Ow0KICB9DQogIGJsb2NrcXVvdGUgew0KICAgICAgbWFyZ2luOiAwcHggMTBweCAxNXB4Ow0KICB9DQogPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KICANCjxoMT5DbGljayBPbmxpbmU8L2gxPg0KPHAvPg0KDQo8dWwgc3R5bGU9Im1hcmdpbi10b3A6MC41ZW07Ij4NCiAgIDxsaSBjbGFzcz0iaXRlbSI+PGEgaHJlZj0iI3Jlc291cmNlcyI+T25saW5lIFJlc291cmNlczwvYT48L2xpPg0KICAgPGxpIGNsYXNzPSJpdGVtIj48YSBocmVmPSIjbWFpbGluZy1saXN0cyI+TWFpbGluZyBMaXN0czwvYT48L2xpPg0KICAgPGxpIGNsYXNzPSJpdGVtIj48YSBocmVmPSIjYm9va3MiPkJvb2tzPC9hPjwvbGk+DQogIDwvdWw+DQoNCjxhIG5hbWU9InJlc291cmNlcyIgaHJlZj0iIyI+PC9hPg0KPGgyIHN0eWxlPSJtYXJnaW4tdG9wOjEuNWVtIj5PbmxpbmUgUmVzb3VyY2VzPC9oMj4NCg0KPHRhYmxlIGNsYXNzPSJzcG9uc29ycyI+DQo8dHI+DQogIDx0ZD4NCiAgICA8YSBjbGFzcz0iZXh0ZXJuYWwiIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vY2xpY2suYXBhY2hlLm9yZy8iPkNsaWNrPC9hPg0KICAgIDxwPkNsaWNrIGhvbWUgcGFnZTwvcD4NCiAgPC90ZD4NCiAgPHRkPg0KICAgIDxhIGhyZWY9ImRvd25sb2Fkcy5odG1sIj5Eb3dubG9hZHM8L2E+DQogICAgPHA+Q2xpY2sgZG93bmxvYWRzPC9wPg0KICA8L3RkPg0KICA8dGQ+DQogICAgPGEgY2xhc3M9ImV4dGVybmFsIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5hdm9rYS5jb20vY2xpY2stZXhhbXBsZXMvIj5DbGljayBFeGFtcGxlczwvYT4NCiAgICA8cD5DbGljayBFeGFtcGxlcyBhcHBsaWNhdGlvbjwvcD4NCiAgPC90ZD4NCiAgPC90cj48dHI+DQogIDx0ZD4NCiAgICA8YSBjbGFzcz0iZXh0ZXJuYWwiIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0NMSyI+QnVncyBhbmQgSXNzdWVzPC9hPg0KICAgIDxwPkpJUkEgYnVnIGFuZCBpc3N1ZSB0cmFja2luZzwvcD4NCiAgPC90ZD4NCiAgPHRkPg0KICAgIDxhIGNsYXNzPSJleHRlcm5hbCIgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9DTElDSy8iPldpa2k8L2E+DQogICAgPHA+Q2xpY2sgY29tbXVuaXR5IFdpa2k8L3A+DQogIDwvdGQ+DQogIDx0ZD4NCiAgICA8YSBjbGFzcz0iZXh0ZXJuYWwiIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vYmxvZ3MuYXBhY2hlLm9yZy9jbGljay8iPkNsaWNrIEJsb2c8L2E+DQogICAgPHA+Rm9yIHRoZSBsYXRlc3QgbmV3cyBhbmQgYW5ub3VuY2VtZW50czwvcD4NCiAgPC90ZD4NCiAgPC90cj48dHI+DQogIDx0ZD4NCiAgICA8YSBjbGFzcz0iZXh0ZXJuYWwiIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vcmVwbzEubWF2ZW4ub3JnL21hdmVuMi9vcmcvYXBhY2hlL2NsaWNrLyI+TWF2ZW4gUmVwb3NpdG9yeTwvYT4NCiAgICA8cD5DbGljayBKQVJzIHJlZ2lzdGVyZWQgd2l0aCBNYXZlbiByZXBvc2l0b3J5PC9wPg0KICA8L3RkPg0KICA8dGQ+DQogICAgPGEgY2xhc3M9ImV4dGVybmFsIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXd2Yy9jbGljay8iPkJyb3dzZSBTVk4gUmVwb3NpdG9yeTwvYT4NCiAgICA8cD5Ccm93c2UgU3VidmVyc2lvbiByZXBvc2l0b3J5PC9wPg0KICA8L3RkPg0KICA8dGQ+DQogICAgPGEgY2xhc3M9ImV4dGVybmFsIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL2Zpc2hleWU2LmF0bGFzc2lhbi5jb20vYnJvd3NlL2NsaWNrLyI+RmlzaEV5ZTwvYT4NCiAgICA8cD5GaXNoRXllIFNWTiByZXBvc2l0b3J5IHByb2plY3QgdmlldzwvcD4NCiAgPC90ZD4NCiAgPC90cj48dHI+DQogIDx0ZD4NCiAgICA8YSBuYW1lPSJwb3dlcmVkIiBocmVmPSIjIj48L2E+PGEgY2xhc3M9ImV4dGVybmFsIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0NMSUNLL1Bvd2VyZWQrQnkrQ2xpY2siPlBvd2VyZWQgYnkgQ2xpY2s8L2E+DQogICAgPHA+U2l0ZXMgYW5kIHByb2R1Y3RzIHVzaW5nIENsaWNrPC9wPg0KICA8L3RkPg0KICA8dGQ+DQogICAgPGEgbmFtZT0iYmxvZ3MiIGhyZWY9IiMiPjwvYT48YSBjbGFzcz0iZXh0ZXJuYWwiIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQ0xJQ0svQmxvZ3MiPkJsb2dzPC9hPg0KICAgIDxwPkJsb2dzIGFib3V0IENsaWNrPC9wPg0KICA8L3RkPg0KICA8dGQ+DQogICAgPGEgbmFtZT0idGVzdGltb25pZXMiIGhyZWY9IiMiPjwvYT48YSBjbGFzcz0iZXh0ZXJuYWwiIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQ0xJQ0svVGVzdGltb25pZXMiPlRlc3RpbW9uaWVzPC9hPg0KICAgIDxwPkhlYXIgd2hhdCBwZW9wbGUgaGF2ZSB0byBzYXk8L3A+DQogIDwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KPGEgbmFtZT0ibWFpbGluZy1saXN0cyIgaHJlZj0iIyI+PC9hPg0KPGgyIHN0eWxlPSJtYXJnaW4tdG9wOjEuNWVtOyI+TWFpbGluZyBMaXN0czwvaDI+DQoNCjxhIG5hbWU9InVzZXItbWFpbGluZy1saXN0IiBjbGFzcz0iaGVhZGluZyI+PC9hPg0KPHAgc3R5bGU9Im1hcmdpbi10b3A6MjBweCI+PGI+VXNlcjwvYj48L3A+DQoNCjxwPg0KICBIZXJlIHlvdSBjYW4gYXNrIHF1ZXN0aW9ucyBvbiBob3cgdG8gdXNlIENsaWNrLCBoYXZlIGRpc2N1c3Npb25zIGFyb3VuZA0KICBiZXN0IHByYWN0aWNlcyBhbmQgaW5xdWlyZSBhYm91dCBuZXcgZmVhdHVyZXMgeW91IHdvdWxkIGxpa2UgdG8gc2VlLg0KPHAvPg0KPHVsPg0KICA8bGk+DQogICAgVG8gPGI+c3Vic2NyaWJlPC9iPiBzZW5kIGFuIGVtcHR5IGVtYWlsIHRvIDx0dD51c2VyLXN1YnNjcmliZUBjbGljay5hcGFjaGUub3JnPC90dD4NCiAgPC9saT4NCiAgPGxpPg0KICAgIFRvIDxiPnVuc3Vic2NyaWJlPC9iPiBzZW5kIGFuIGVtcHR5IGVtYWlsIHRvIDx0dD51c2VyLXVuc3Vic2NyaWJlQGNsaWNrLmFwYWNoZS5vcmc8L3R0Pg0KICA8L2xpPg0KICA8bGk+DQogICAgVG8gPGI+cG9zdCBhIG1lc3NhZ2U8L2I+IHVzZSB0aGUgYWRkcmVzczogPHR0PnVzZXJAY2xpY2suYXBhY2hlLm9yZzwvdHQ+DQogIDwvbGk+DQogIDxsaT4NCiAgICBNZXNzYWdlIGFyY2hpdmU6IDxhIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iZXh0ZXJuYWwiIGhyZWY9Imh0dHA6Ly9tYWlsLWFyY2hpdmVzLmFwYWNoZS5vcmcvbW9kX21ib3gvY2xpY2stdXNlci8iPmh0dHA6Ly9tYWlsLWFyY2hpdmVzLmFwYWNoZS5vcmcvbW9kX21ib3gvY2xpY2stdXNlci88L2E+DQogIDwvbGk+DQogIDxsaT4NCiAgICBNYXJrTWFpbCBhcmNoaXZlOiA8YSB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImV4dGVybmFsIiBocmVmPSJodHRwOi8vY2xpY2subWFya21haWwub3JnL3NlYXJjaC8iPmh0dHA6Ly9jbGljay5tYXJrbWFpbC5vcmcvc2VhcmNoLzwvYT4NCiAgPC9saT4NCiAgPGxpPg0KICAgIE5hYmJsZTIgZm9ydW1zOiA8YSB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImV4dGVybmFsIiBocmVmPSJodHRwOi8vbjIubmFiYmxlLmNvbS9jbGljay11c2VyLWYxMTM0OTczLmh0bWwiPmh0dHA6Ly9uMi5uYWJibGUuY29tL2NsaWNrLXVzZXItZjExMzQ5NzMuaHRtbDwvYT4NCiAgPC9saT4NCiAgPGxpPg0KICAgIEdtYW5lIHVzZXIgbmV3c2dyb3VwOiA8YSBjbGFzcz0iZXh0ZXJuYWwiIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vbmV3cy5nbWFuZS5vcmcvZ21hbmUuY29tcC53ZWIuY2xpY2sudXNlciI+aHR0cDovL25ld3MuZ21hbmUub3JnL2dtYW5lLmNvbXAud2ViLmNsaWNrLnVzZXI8L2E+DQogIDwvbGk+DQo8L3VsPg0KDQoNCjxhIG5hbWU9ImRldmVsb3BtZW50LW1haWxpbmctbGlzdCIgY2xhc3M9ImhlYWRpbmciPjwvYT4NCjxwIHN0eWxlPSJtYXJnaW4tdG9wOjIwcHgiPjxiPkRldmVsb3BtZW50PC9iPjwvcD4NCg0KPHA+DQogIFRoaXMgbGlzdCBmb2N1c2VzIG9uIGRldmVsb3BtZW50IGlzc3VlcyBzdWNoIGFzIHRoZSBmdXR1cmUgZGlyZWN0aW9uLCBwcmlvcml0aXphdGlvbg0KICBvZiBpc3N1ZXMsIGRlc2lnbiBpc3N1ZXMgYW5kIHJlbGVhc2Ugc2NoZWR1bGVzLg0KPHAvPg0KPHVsPg0KICA8bGk+DQogICAgVG8gPGI+c3Vic2NyaWJlPC9iPiBzZW5kIGFuIGVtcHR5IGVtYWlsIHRvIDx0dD5kZXYtc3Vic2NyaWJlQGNsaWNrLmFwYWNoZS5vcmc8L3R0Pg0KICA8L2xpPg0KICA8bGk+DQogICAgVG8gPGI+dW5zdWJzY3JpYmU8L2I+IHNlbmQgYW4gZW1wdHkgZW1haWwgdG8gPHR0PmRldi11bnN1YnNjcmliZUBjbGljay5hcGFjaGUub3JnPC90dD4NCiAgPC9saT4NCiAgPGxpPg0KICAgIFRvIDxiPnBvc3QgYSBtZXNzYWdlPC9iPiB1c2UgdGhlIGFkZHJlc3M6IDx0dD5kZXZAY2xpY2suYXBhY2hlLm9yZzwvdHQ+DQogIDwvbGk+DQogIDxsaT4NCiAgICBNZXNzYWdlIGFyY2hpdmU6IDxhIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iZXh0ZXJuYWwiIGhyZWY9Imh0dHA6Ly9tYWlsLWFyY2hpdmVzLmFwYWNoZS5vcmcvbW9kX21ib3gvY2xpY2stZGV2LyI+aHR0cDovL21haWwtYXJjaGl2ZXMuYXBhY2hlLm9yZy9tb2RfbWJveC9jbGljay1kZXYvPC9hPg0KICA8L2xpPg0KICA8bGk+DQogICAgTWFya01haWwgYXJjaGl2ZTogPGEgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJleHRlcm5hbCIgaHJlZj0iaHR0cDovL2NsaWNrLm1hcmttYWlsLm9yZy9zZWFyY2gvIj5odHRwOi8vY2xpY2subWFya21haWwub3JnL3NlYXJjaDwvYT4NCiAgPC9saT4NCiAgPGxpPg0KICAgIE5hYmJsZTIgZm9ydW1zOiA8YSB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImV4dGVybmFsIiBocmVmPSJodHRwOi8vbjIubmFiYmxlLmNvbS9jbGljay1kZXZlbG9wbWVudC1mMTEzNDk3NC5odG1sIj5odHRwOi8vbjIubmFiYmxlLmNvbS9jbGljay1kZXZlbG9wbWVudC1mMTEzNDk3NC5odG1sPC9hPg0KICA8L2xpPg0KICA8bGk+DQogICAgR21hbmUgZGV2ZWxvcGVyIG5ld3Nncm91cDogPGEgY2xhc3M9ImV4dGVybmFsIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL25ld3MuZ21hbmUub3JnL2dtYW5lLmNvbXAud2ViLmNsaWNrLmRldmVsIj5odHRwOi8vbmV3cy5nbWFuZS5vcmcvZ21hbmUuY29tcC53ZWIuY2xpY2suZGV2ZWw8L2E+DQogIDwvbGk+DQo8L3VsPg0KDQo8YSBuYW1lPSJib29rcyIgaHJlZj0iIyI+PC9hPg0KPGgyIHN0eWxlPSJtYXJnaW4tdG9wOjEuNWVtOyI+Qm9va3M8L2gyPg0KDQo8cD4NClRoZSBmb2xsb3dpbmcgYm9vayBpcyBhdmFpbGFibGUgb24gQXBhY2hlIENsaWNrOg0KPC9wPg0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAyZW07Ij4NCg0KICAgIDxkaXYgc3R5bGU9ImZsb2F0OmxlZnQ7Ij4NCiAgICAgICAgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cuZmRhb3VkLmNvbS9jbGlja2Jvb2svIj4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImltYWdlIiBzcmM9Ii4uL2ltYWdlcy9jbGljay1ib29rLmpwZyIgYWx0PSJHZXR0aW5nIHN0YXJ0ZWQgd2l0aCBBcGFjaGUgQ2xpY2siLz4NCiAgICAgICAgPC9hPg0KICAgIDwvZGl2Pg0KDQogICAgPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OiAxNDBweCI+DQogICAgICA8YSBuYW1lPSJnc3dhYyIgaHJlZj0iIyI+PC9hPg0KICAgICAgPGg0PjxhIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG5vbmUiIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LmZkYW91ZC5jb20vY2xpY2tib29rLyI+R2V0dGluZyBTdGFydGVkIFdpdGggQXBhY2hlIENsaWNrPC9hPjwvaDQ+DQogICAgICBUaGlzIGJvb2sgaXMgd3JpdHRlbiBieSBGcmVkZXJpYyBEYW91ZCBhbmQgaXMgdGhlIGZpcnN0IGJvb2sgb24gQXBhY2hlDQogICAgICBDbGljay4gVGhlIGJvb2sgaXMgYXZhaWxhYmxlIGFzIGJvdGggYW4gZS1ib29rIGFuZCBoYXJkIGNvcHkuDQoNCiAgICAgIDxoND5EZXNjcmlwdGlvbjwvaDQ+DQogICAgICBSZWFkeSBmb3IgZWFzeSBjb21wb25lbnQtYmFzZWQgd2ViIGRldmVsb3BtZW50PyBBcGFjaGUgQ2xpY2sgaXMgYSBmcmFtZXdvcmsNCiAgICAgIGRlc2lnbmVkIHdpdGggc2ltcGxpY2l0eSBpbiBtaW5kLiBEZXZlbG9wIHdlYiBhcHBsaWNhdGlvbnMgd2l0aCBKYXZhIGFuZA0KICAgICAgQXBhY2hlIFZlbG9jaXR5IHRlbXBsYXRlcywgY3JlYXRlIHJldXNhYmxlIGNvbnRyb2xzLCB1c2UgdGhlbSB0byBhc3NlbWJsZQ0KICAgICAgeW91ciBwYWdlcywgYW5kIGdpdmUgeW91ciBhcHBsaWNhdGlvbiBhIGNvbnNpc3RlbnQgbG9vayB3aXRoIHJldXNhYmxlIGxheW91dHMuDQogICAgICBUaGlzIGJvb2sgd2lsbCBoZWxwIHlvdSBnZXQgc3RhcnRlZCB3aXRoIHRoaXMgZXhjZWxsZW50IGZyYW1ld29yaywgc3RhcnRpbmcNCiAgICAgIHdpdGggdGhlIGJhc2ljcyBhbmQgbW92aW5nIG9uIHRvIGNyZWF0aW5nIGEgc2FtcGxlIGFwcGxpY2F0aW9uLiBZb3UnbGwgYWxzbw0KICAgICAgbGVhcm4gaG93IHRvIGludGVncmF0ZSBwb3B1bGFyIHRoaXJkLXBhcnR5IGZyYW1ld29ya3Mgc3VjaCBhcyBTcHJpbmcsDQogICAgICBIaWJlcm5hdGUsIEphdmEgUGVyc2lzdGVuY2UgQVBJIChKUEEpLCBhbmQgbW9yZS4NCg0KICAgICAgPGg0PkFib3V0IHRoZSBhdXRob3I8L2g0Pg0KICAgICAgRnJlZGVyaWMgRGFvdWQgaXMgYSBzb2Z0d2FyZSBkZXZlbG9wZXIgd2hvIGhhcyBiZWVuIHVzaW5nIEphdmEgc2luY2UgMTk5Nw0KICAgICAgYW5kIGRldmVsb3Bpbmcgd2ViIGFwcGxpY2F0aW9ucyBzaW5jZSB0aGUgInByZS1KU1AiIGRheXMgb2YganVzdCBTZXJ2bGV0cy4NCiAgICAgICJHZXR0aW5nIFN0YXJ0ZWQgV2l0aCBBcGFjaGUgQ2xpY2siIGlzIGhpcyBzZWNvbmQgYm9vayBvbiBhIHdlYiBmcmFtZXdvcmsuDQogICAgICBIaXMgZmlyc3QgYm9vaywgIlN0cmlwZXMgLi4uYW5kIEphdmEgV2ViIERldmVsb3BtZW50IGlzIEZ1biBBZ2FpbiIsIHJlY2VpdmVkDQogICAgICBtYW55IHJhdmUgcmV2aWV3cy4NCg0KICAgICAgPHAvPg0KDQogICAgICA8dGFibGU+DQogICAgICAgICAgPHRib2R5Pjx0cj48dGg+UHJvZHVjdCBEZXRhaWxzPC90aD48L3RyPg0KICAgICAgICAgICAgICA8dHI+PHRoPlRpdGxlOjwvdGg+PHRkPkdldHRpbmcgU3RhcnRlZCBXaXRoIEFwYWNoZSBDbGljazwvdGQ+PC90cj4NCiAgICAgICAgICAgICAgPHRyPjx0aD5BdXRob3I6PC90aD48dGQ+RnJlZGVyaWMgRGFvdWQ8L3RkPjwvdHI+DQogICAgICAgICAgICAgIDx0cj48dGg+UGFwZXJiYWNrOjwvdGg+PHRkPjE1MCBwYWdlczwvdGQ+PC90cj4NCiAgICAgICAgICAgICAgPHRyPjx0aD5MYW5ndWFnZTo8L3RoPjx0ZD5FbmdsaXNoPC90ZD48L3RyPg0KICAgICAgICAgICAgICA8dHI+PHRoPlB1YmxpY2F0aW9uIERhdGU6PC90aD48dGQ+SmFudWFyeSA0LCAyMDEwPC90ZD48L3RyPg0KICAgICAgICAgICAgICA8dHI+PHRoPkNvcHlyaWdodDo8L3RoPjx0ZD6pMjAxMCBGcmVkZXJpYyBEYW91ZCAoU3RhbmRhcmQgQ29weXJpZ2h0IExpY2Vuc2UpPC90ZD48L3RyPg0KICAgICAgICAgICAgICA8dHI+PHRoPlNpemU6PC90aD48dGQ+NiB4IDkgaW5jaGVzPC90ZD48L3RyPg0KICAgICAgICAgICAgICA8dHI+PHRoPkJpbmRpbmc6PC90aD48dGQ+UGVyZmVjdCBCb3VuZDwvdGQ+PC90cj4NCiAgICAgICAgICAgICAgPHRyPjx0aD5JbnRlcmlvciBDb2xvcjo8L3RoPjx0ZD5CbGFjayBBbmQgV2hpdGU8L3RkPjwvdHI+DQogICAgICAgICAgPC90Ym9keT4NCiAgICAgIDwvdGFibGU+DQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IHN0eWxlPSJjbGVhcjpib3RoOyBtYXJnaW4tYm90dG9tOiAxLjVlbSI+PC9kaXY+DQoNCjwvZGl2Pg0KDQo8YnIvPg0KDQo8L2JvZHk+DQo8L2h0bWw+DQoNCg==