PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgc3RhbmRhbG9uZT0ibm8iPz4NCjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4NCjxodG1sPg0KPGhlYWQ+DQo8dGl0bGU+QVNGOiBYYWxhbi1DKysgU2FtcGxlczwvdGl0bGU+DQo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4NCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InJlc291cmNlcy9hcGFjaGUteGFsYW4uY3NzIiAvPg0KPC9oZWFkPg0KPCEtLQ0KICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUNCiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQogKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgICJMaWNlbnNlIik7DQogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCiAqDQogKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQogKg0KICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQogLS0+DQo8Ym9keT4NCjxkaXYgaWQ9InRpdGxlIj4NCjx0YWJsZSBjbGFzcz0iSGRyVGl0bGUiPg0KPHRib2R5Pg0KPHRyPg0KPHRoIHJvd3NwYW49IjIiPg0KPGEgaHJlZj0iLi4vaW5kZXguaHRtbCI+DQo8aW1nIGFsdD0iVHJhZGVtYXJrIExvZ28iIHNyYz0icmVzb3VyY2VzL1hhbGFuQy1Mb2dvLXRtLnBuZyIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI5MCIgLz4NCjwvYT4NCjwvdGg+DQo8dGggdGV4dC1hbGlnbj0iY2VudGVyIiB3aWR0aD0iNzUlIj4NCjxhIGhyZWY9ImluZGV4Lmh0bWwiPlhhbGFuLUMvQysrIFZlcnNpb24gMS4xMTwvYT4NCjwvdGg+DQo8L3RyPg0KPHRyPg0KPHRkIHZhbGlnbj0ibWlkZGxlIj5YYWxhbi1DKysgU2FtcGxlczwvdGQ+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8dGFibGUgY2xhc3M9IkhkckJ1dHRvbnMiIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMSI+DQo8dGJvZHk+DQo8dHI+DQo8dGQ+DQo8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBGb3VuZGF0aW9uPC9hPg0KPC90ZD4NCjx0ZD4NCjxhIGhyZWY9Imh0dHA6Ly94YWxhbi5hcGFjaGUub3JnIj5YYWxhbiBQcm9qZWN0PC9hPg0KPC90ZD4NCjx0ZD4NCjxhIGhyZWY9Imh0dHA6Ly94ZXJjZXMuYXBhY2hlLm9yZyI+WGVyY2VzIFByb2plY3Q8L2E+DQo8L3RkPg0KPHRkPg0KPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIiPldlYiBDb25zb3J0aXVtPC9hPg0KPC90ZD4NCjx0ZD4NCjxhIGhyZWY9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvc3RhbmRhcmRzIj5PYXNpcyBPcGVuPC9hPg0KPC90ZD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPGRpdiBpZD0ibmF2TGVmdCI+DQo8dWw+DQo8bGk+DQo8YSBocmVmPSJyZXNvdXJjZXMuaHRtbCI+UmVzb3VyY2VzPC9hPg0KPGJyIC8+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvYT4NCjwvbGk+PC91bD48aHIgLz48dWw+DQo8bGk+DQo8YSBocmVmPSJpbmRleC5odG1sIj5YYWxhbi1DKysgMS4xMTwvYT4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJ3aGF0c25ldy5odG1sIj5XaGF0J3MgTmV3PC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9ImxpY2Vuc2UuaHRtbCI+TGljZW5zZXM8L2E+DQo8L2xpPjwvdWw+PGhyIC8+PHVsPg0KPGxpPg0KPGEgaHJlZj0ib3ZlcnZpZXcuaHRtbCI+T3ZlcnZpZXc8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0iY2hhcnRlci5odG1sIj5DaGFydGVyPC9hPg0KPC9saT48L3VsPjxociAvPjx1bD4NCjxsaT4NCjxhIGhyZWY9ImRvd25sb2FkLmh0bWwiPkRvd25sb2FkPC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9ImJ1aWxkbGlicy5odG1sIj5CdWlsZCBMaWJyYXJpZXM8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0iaW5zdGFsbC5odG1sIj5JbnN0YWxsYXRpb248L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0iYnVpbGRkb2NzLmh0bWwiPkJ1aWxkIERvY3VtZW50czwvYT4NCjwvbGk+PC91bD48aHIgLz48dWw+DQo8bGk+U2FtcGxlIEFwcHM8YnIgLz4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJjb21tYW5kbGluZS5odG1sIj5Db21tYW5kIExpbmU8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0idXNhZ2VwYXR0ZXJucy5odG1sIj5Vc2FnZSBQYXR0ZXJuczwvYT4NCjwvbGk+PC91bD48aHIgLz48dWw+DQo8bGk+DQo8YSBocmVmPSJwcm9ncmFtbWluZy5odG1sIj5Qcm9ncmFtbWluZzwvYT4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJleHRlbnNpb25zLmh0bWwiPkV4dGVuc2lvbnM8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0iZXh0ZW5zaW9uc2xpYi5odG1sIj5FeHRlbnNpb25zIExpYnJhcnk8L2E+DQo8L2xpPg0KPGxpPg0KPGEgaHJlZj0iYXBpRG9jcy9pbmRleC5odG1sIj5BUEkgUmVmZXJlbmNlPC9hPg0KPC9saT48L3VsPjxociAvPjx1bD4NCjxsaT4NCjxhIGhyZWY9ImZhcS5odG1sIj5YYWxhbi1DIEZBUXM8L2E+DQo8L2xpPjwvdWw+PGhyIC8+PHVsPg0KPGxpPg0KPGEgaHJlZj0id2hhdHNuZXcuaHRtbCNidWdzIj5CdWdzPC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbi1qL3Rlc3QvcnVuLmh0bWwjaG93LXRvLXJ1bi1jIj5UZXN0aW5nPC9hPg0KPC9saT4NCjxsaT4NCjxhIGhyZWY9InNlY3VyZXdlYi5odG1sIj5XZWIgU2VjdXJpdHk8L2E+DQo8L2xpPg0KPC91bD4NCjwvZGl2Pg0KPGRpdiBpZD0iY29udGVudCI+DQo8aDI+WGFsYW4tQysrIFNhbXBsZXM8L2gyPg0KPHVsPg0KICA8bGk+DQo8YSBocmVmPSIjZ2V0c3RhcnRlZCI+U2FtcGxlcyB0byBoZWxwIHlvdSBnZXQgc3RhcnRlZDwvYT4NCjwvbGk+DQogIDxsaT4NCjxhIGhyZWY9IiNyZWJ1aWxkaW5nIj5SZWJ1aWxkaW5nIGEgU2FtcGxlIGFwcGxpY2F0aW9uPC9hPg0KPC9saT4NCiAgPGxpPg0KPGEgaHJlZj0iI2FwYWNoZW1vZHVsZXhzbHQiPkFwYWNoZU1vZHVsZVhTTFQ8L2E+DQo8L2xpPg0KICA8bGk+DQo8YSBocmVmPSIjY29tcGlsZXN0eWxlc2hlZXQiPkNvbXBpbGVTdHlsZXNoZWV0PC9hPg0KPC9saT4NCiAgPGxpPg0KPGEgaHJlZj0iI2RvY3VtZW50YnVpbGRlciI+RG9jdW1lbnRCdWlsZGVyPC9hPg0KPC9saT4NCiAgPGxpPg0KPGEgaHJlZj0iI2V4dGVybmFsZnVuY3Rpb25zIj5FeHRlcm5hbEZ1bmN0aW9uczwvYT4NCjwvbGk+DQogIDxsaT4NCjxhIGhyZWY9IiNwYXJzZWRzb3VyY2V3cmFwcGVycyI+UGFyc2VkU291cmNlV3JhcHBlcnM8L2E+DQo8L2xpPg0KICA8bGk+DQo8YSBocmVmPSIjc2VyaWFsaXplbm9kZXNldCI+U2VyaWFsaXplTm9kZVNldDwvYT4NCjwvbGk+ICAgIA0KICA8bGk+DQo8YSBocmVmPSIjc2ltcGxldHJhbnNmb3JtIj5TaW1wbGVUcmFuc2Zvcm08L2E+DQo8L2xpPg0KICA8bGk+DQo8YSBocmVmPSIjc2ltcGxleHBhdGhhcGkiPlNpbXBsZVhQYXRoQVBJPC9hPg0KPC9saT4NCiAgPGxpPg0KPGEgaHJlZj0iI3NpbXBsZXhwYXRoY2FwaSI+U2ltcGxlWFBhdGhDQVBJPC9hPg0KPC9saT4NCiAgPGxpPg0KPGEgaHJlZj0iI3N0cmVhbXRyYW5zZm9ybSI+U3RyZWFtVHJhbnNmb3JtPC9hPg0KPC9saT4gICAgDQogIDxsaT4NCjxhIGhyZWY9IiN0aHJlYWRzYWZlIj5UaHJlYWRTYWZlPC9hPg0KPC9saT4gIA0KICA8bGk+DQo8YSBocmVmPSIjdHJhY2VsaXN0ZW4iPlRyYWNlTGlzdGVuPC9hPg0KPC9saT4gICAgICAgIA0KICA8bGk+DQo8YSBocmVmPSIjdHJhbnNmb3JtdG94ZXJjZXNkb20iPlRyYW5zZm9ybVRvWGVyY2VzRE9NPC9hPg0KPC9saT4NCiAgPGxpPg0KPGEgaHJlZj0iI3VzZW1lbW9yeW1hbmFnZXIiPlVzZU1lbW9yeU1hbmFnZXI8L2E+DQo8L2xpPg0KICA8bGk+DQo8YSBocmVmPSIjdXNlc3R5bGVzaGVldHBhcmFtIj5Vc2VTdHlsZXNoZWV0UGFyYW08L2E+DQo8L2xpPg0KICA8bGk+DQo8YSBocmVmPSIjeGFsYW50cmFuc2Zvcm0iPlhhbGFuVHJhbnNmb3JtPC9hPg0KPC9saT4NCiAgPGxpPg0KPGEgaHJlZj0iI3hhbGFudHJhbnNmb3JtZXJjYWxsYmFjayI+WGFsYW5UcmFuc2Zvcm1lckNhbGxiYWNrPC9hPg0KPC9saT4NCjwvdWw+DQoNCjxhIG5hbWU9ImdldHN0YXJ0ZWQiPiYjODIwNDs8L2E+DQo8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGgzPlNhbXBsZXMgdG8gaGVscCB5b3UgZ2V0IHN0YXJ0ZWQ8L2gzPg0KPHA+RWFjaCBvZiB0aGUgc3ViZGlyZWN0b3JpZXMgaW4gdGhlIFhhbGFuLUMrKyBzYW1wbGVzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgc291cmNlIGZpbGVzIGZvciBhDQogICBzYW1wbGUgYXBwbGljYXRpb24uIFRoZSBleGVjdXRhYmxlcyBmb3IgdGhlIHNhbXBsZXMgYXJlIGluIHRoZSBidWlsZCBzdWJkaXJlY3RvcnksIHdoaWNoIHNob3VsZCBiZSBvbiB0aGUgc3lzdGVtDQogICBwYXRoLjwvcD4NCjxwPldpdGggbW9zdCBvZiB0aGUgc2FtcGxlcywgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBwcm9jZWR1cmU6PC9wPg0KPG9sPg0KICA8bGk+R28gdG8gdGhlIHNhbXBsZXMgc3ViZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHNhbXBsZSAodXNlIHRoZSBET1Mgc2hlbGwgaWYgeW91IGFyZSBydW5uaW5nIFdpbmRvd3MpPGJyIC8+DQo8YnIgLz4NCjwvbGk+DQogIDxsaT5SdW4gdGhlIHNhbXBsZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUgKGFzIGluZGljYXRlZCBiZWxvdyk8YnIgLz4NCjxiciAvPg0KPC9saT4NCiAgPGxpPkV4YW1pbmUgdGhlIGFwcGxpY2F0aW9uIHNvdXJjZSBmaWxlcy4gWW91IG1heSBhbHNvIHdhbnQgdG8gbW9kaWZ5IHRoZSBzb3VyY2UgZmlsZXMuIFJlbWVtYmVyIHRoYXQgaWYgeW91DQogICAgICBtb2RpZnkgYSAuY3BwIGZpbGUsIHlvdSBtdXN0IHJlYnVpbGQgdGhlIGV4ZWN1dGFibGUgYW5kIHBsYWNlIGl0IG9uIHRoZSBwYXRoIGJlZm9yZSB5b3UgY2FuIHJ1biB0aGUNCiAgICAgIG1vZGlmaWVkIGFwcGxpY2F0aW9uLjwvbGk+DQo8L29sPg0KPHRhYmxlIGNsYXNzPSJub3RlIj4NCjx0cj4NCjx0ZCBjbGFzcz0ibm90ZUltZyI+DQo8aW1nIHNyYz0icmVzb3VyY2VzL25vdGUuZ2lmIiBhbHQ9Im5vdGUiIC8+DQo8L3RkPg0KPHRkIGNsYXNzPSJub3RlVHh0Ij5FYWNoIHNhbXBsZSBhcHBsaWNhdGlvbiBsb29rcyBmb3IgaW5wdXQgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGUgZGlyZWN0b3J5IGZyb20NCiAgICAgIHdoaWNoIHlvdSBydW4gdGhlIGFwcGxpY2F0aW9uLiBUaGUgaW5wdXQgZmlsZXMgYXJlIGluIHRoZSBzYW1wbGVzIHN1YmRpcmVjdG9yeSBhbG9uZyB3aXRoIHRoZSBzYW1wbGUgc291cmNlDQogICAgICBmaWxlcy4gRm9yIHRoZSBVTklYIGJ1aWxkcywgYXBwbGljYXRpb24gZXhlY3V0YWJsZXMgYXJlIGluIHRoZSBiaW4gc3ViZGlyZWN0b3J5LiBGb3IgdGhlIFdpbmRvd3MzMiBidWlsZCwgdGhlDQogICAgICBhcHBsaWNhdGlvbiBleGVjdXRhYmxlIGlzIGluIHRoZSBiaW4gc3ViZGlyZWN0b3J5IChYYWxhbi1DXzFfMTFfMC0mbHQ7bXlfV2luZG93c19kaXN0cmlidXRpb24mZ3Q7XGJpbikuIFRvIHJ1biBhIA0KICAgICAgc2FtcGxlLCBiZSBzdXJlIHRoZSBleGVjdXRhYmxlIGlzIG9uIHRoZSBwYXRoLCBhbmQgcnVuIGl0IGZyb20gdGhlIHNhbXBsZXMgc3ViZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIGlucHV0IA0KICAgICAgZmlsZXMuPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPHRhYmxlIGNsYXNzPSJub3RlIj4NCjx0cj4NCjx0ZCBjbGFzcz0ibm90ZUltZyI+DQo8aW1nIHNyYz0icmVzb3VyY2VzL25vdGUuZ2lmIiBhbHQ9Im5vdGUiIC8+DQo8L3RkPg0KPHRkIGNsYXNzPSJub3RlVHh0Ij5UaGUgbW9zdCBvZiB0aGUgc2FtcGxlcyBhcmUgaW1wbGVtZW50ZWQgd2l0aG91dCBwcm92aWRpbmcgYSBwbHVnZ2FibGUgbWVtb3J5IG1hbmFnZXIuIFRoZSA8YSBocmVmPSIjc2ltcGxldHJhbnNmb3JtIj5TaW1wbGVUcmFuc2Zvcm08L2E+IHNhbXBsZSBpbGx1c3RyYXRlcywgDQogICAgICBpbiBhZGRpdGlvbiB0byBhIHNpbXBsZSB0cmFuc2Zvcm1hdGlvbiwgdGhlIHVzYWdlIG9mIHRoZSBwcm9jZXNzb3Igd2l0aCBtZW1vcnkgbWFuYWdlcjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KDQoNCjxhIG5hbWU9InJlYnVpbGRpbmciPiYjODIwNDs8L2E+DQo8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGgzPlJlYnVpbGRpbmcgYSBTYW1wbGUgYXBwbGljYXRpb248L2gzPg0KPHA+SW5zdHJ1Y3Rpb25zIGZvciByZWJ1aWxkaW5nIHRoZSBzYW1wbGVzIGRpZmZlciBkZXBlbmRpbmcgb24gd2hldGhlciB5b3UgYXJlIHVzaW5nIHRoZSBiaW5hcnkgcGFja2FnZSBvciB0aGUgc291cmNlIA0KcGFja2FnZS4gPC9wPg0KPHA+Rm9yIFdpbmRvd3MgdXNlcnMsIHRoZSBYYWxhbiBWaXN1YWwgQysrIHdvcmtzcGFjZSBjb250YWlucyBwcm9qZWN0IGNvbmZpZ3VyYXRpb25zIGZvciBidWlsZGluZyANCiAgIGVhY2ggb2YgdGhlIHNhbXBsZXMuICBVc2VycyB3aG8gaGF2ZSBkb3dubG9hZGVkIHRoZSBzb3VyY2UgcGFja2FnZSwgY2FuIGZpbmQgdGhlIFhhbGFuSUNVLmRzdyB3b3Jrc3BhY2UNCiAgIGZpbGUgdW5kZXI6PGJyIC8+DQo8YnIgLz6goKCgoDxjb2RlPlhhbGFuLUNfMV8xMV8wLXNyY1xzcmNceGFsYW5jXFByb2plY3RzXFdpbjMyXFZDNjwvY29kZT4NCiAgIDxiciAvPg0KPGJyIC8+ICBhbmQgWGFsYW5JQ1Uuc2xuIHNvbHV0aW9uIGZpbGUgdW5kZXI6PGJyIC8+DQo8YnIgLz4NCiAgIKCgoKCgPGNvZGU+WGFsYW4tQ18xXzExXzAtc3JjXHNyY1x4YWxhbmNcUHJvamVjdHNcV2luMzJcVkM3LjE8L2NvZGU+DQoNCiAgIDxiciAvPg0KPGJyIC8+ICBVc2VycyB3aG8gaGF2ZSBkb3dubG9hZGVkIHRoZSBiaW5hcnkgcGFja2FnZSwgc2hvdWxkIHVzZSB0aGUgU2FtcGxlcy5kc3cgd29ya3NwYWNlIGZpbGUgDQogICBsb2NhdGVkIHVuZGVyOiA8YnIgLz4NCjxiciAvPqCgoKCgDQogICA8Y29kZT5YYWxhbi1DXzFfMTFfMC0mbHQ7bXlfV2luMzJfZGlzdHJpYnV0aW9uJmd0O1xTYW1wbGVzXFByb2plY3RzXFdpbjMyXFZDNjwvY29kZT4NCjxiciAvPg0KPGJyIC8+DQogICBvciB0aGUgU2FtcGxlcy5zbG4gc29sdXRpb24gZmlsZSBmb3IgLk5FVCBWNy4xIHVzZXJzLCBsb2NhdGVkIHVuZGVyOiA8YnIgLz4NCjxiciAvPqCgoKCgDQogICA8Y29kZT5YYWxhbi1DXzFfMTFfMC0mbHQ7bXlfV2luMzJfZGlzdHJpYnV0aW9uJmd0O1xTYW1wbGVzXFByb2plY3RzXFdpbjMyXFZDNy4xPC9jb2RlPg0KPGJyIC8+DQo8YnIgLz4NCjwvcD4NCjxwPlRoZSBNYWtlZmlsZSB0aGF0IGNvbWVzIHdpdGggdGhlIFVOSVggZGlzdHJpYnV0aW9ucyBpbmNsdWRlIHRhcmdldHMgZm9yIHJlYnVpbGRpbmcgb25lIG9yIGFsbCBvZiANCiAgIHRoZSBzYW1wbGUgYXBwbGljYXRpb25zLiAgVG8gcmVidWlsZCBvbmUgb3IgbW9yZSBzYW1wbGUgYXBwbGljYXRpb25zIGZyb20gdGhlIFVOSVggc291cmNlIHBhY2thZ2UsIA0KICAgZ28gdG8gdGhlIFhhbGFuLUNfMV8xMV8wLXNyYyBkaXJlY3RvcnkgYW5kIHJ1bjxiciAvPg0KPGJyIC8+DQogICCgoKCgoDxjb2RlPmdtYWtlIDxiPg0KPGk+VGFyZ2V0PC9pPg0KPC9iPg0KPC9jb2RlPg0KPGJyIC8+DQo8YnIgLz4NCiAgIHdoZXJlIDxiPg0KPGk+VGFyZ2V0PC9pPg0KPC9iPiBpcyA8Y29kZT5TYW1wbGVzPC9jb2RlPiAoYWxsIHRoZSBzYW1wbGVzKSwgPGNvZGU+QXBhY2hlTW9kdWxlWFNMVDwvY29kZT4sIA0KICAgPGNvZGU+Q29tcGlsZVN0eWxlc2hlZXQ8L2NvZGU+LCA8Y29kZT5Eb2N1bWVudEJ1aWxkZXI8L2NvZGU+LCA8Y29kZT5FeHRlcm5hbEZ1bmN0aW9uczwvY29kZT4sIA0KICAgPGNvZGU+UGFyc2VkU291cmNlV3JhcHBlcnM8L2NvZGU+LCA8Y29kZT5TZXJpYWxpemVkTm9kZVNldDwvY29kZT4sIDxjb2RlPlNpbXBsZVRyYW5zZm9ybTwvY29kZT4sICANCiAgIDxjb2RlPlNpbXBsZVhQYXRoQVBJPC9jb2RlPiwgPGNvZGU+U2ltcGxlWFBhdGhDQVBJPC9jb2RlPiwgPGNvZGU+U3RyZWFtVHJhbnNmb3JtPC9jb2RlPiwgDQogICA8Y29kZT5UaHJlYWRTYWZlPC9jb2RlPiwgPGNvZGU+VHJhY2VMaXN0ZW48L2NvZGU+LCA8Y29kZT5UcmFuc2Zvcm1Ub1hlcmNlc0RPTTwvY29kZT4sIA0KICAgPGNvZGU+VXNlU3R5bGVzaGVldFBhcmFtPC9jb2RlPiwgPGNvZGU+WGFsYW5UcmFuc2Zvcm08L2NvZGU+LCBvciANCiAgIDxjb2RlPlhhbGFuVHJhbnNmb3JtZXJDYWxsYmFjazwvY29kZT4uPC9wPg0KPHA+VG8gcmVidWlsZCB0aGUgc2FtcGxlcyBmcm9tIHRoZSBVTklYIGJpbmFyeSBwYWNrYWdlLCBnbyB0byB0aGUgLi4vc2FtcGxlcyBkaXJlY3Rvcnkgb2YgeW91ciBpbnN0YWxsYXRpb24sDQogICBydW4gdGhlIHJ1bkNvbmZpZ3VyZSB1dGlsaXR5IGZvciB5b3VyIHRhcmdldCBwbGF0Zm9ybSwgYW5kIHRoZW4gcnVuIGdtYWtlLiAgRm9yIGV4YW1wbGUsIEFJWCB1c2VycyB3b3VsZCANCiAgIGlzc3VlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDo8YnIgLz4NCjxiciAvPg0KICAgoKCgoKA8Y29kZT4uL3J1bkNvbmZpZ3VyZSAtcCBhaXggLWMgeGxjX3IgLXggeGxDX3I8L2NvZGU+DQo8YnIgLz4NCiAgIKCgoKCgPGNvZGU+Y2Qgc2FtcGxlczwvY29kZT4NCjxiciAvPg0KPGJyIC8+DQogICCgoKCgoDxjb2RlPmdtYWtlIDxiPg0KPGk+VGFyZ2V0PC9pPg0KPC9iPg0KPC9jb2RlPg0KPGJyIC8+DQo8YnIgLz4NCiAgIHdoZXJlIDxiPg0KPGk+VGFyZ2V0PC9pPg0KPC9iPiBjYW4gYmUgU2FtcGxlcyAoZm9yIGJ1aWxkaW5nIGFsbCBzYW1wbGVzKSwgb3IgdGhlIGluZGl2aWR1YWwgc2FtcGxlIG5hbWUgYXMgDQogICBsaXN0ZWQgYWJvdmUuPC9wPg0KPHRhYmxlIGNsYXNzPSJub3RlIj4NCjx0cj4NCjx0ZCBjbGFzcz0ibm90ZUltZyI+DQo8aW1nIHNyYz0icmVzb3VyY2VzL25vdGUuZ2lmIiBhbHQ9Im5vdGUiIC8+DQo8L3RkPg0KPHRkIGNsYXNzPSJub3RlVHh0Ij5Gb3IgaW5mb3JtYXRpb24gb24gYnVpbGRpbmcgQXBhY2hlIE1vZHVsZSwgc2VlIDxhIGhyZWY9InNhbXBsZXMuaHRtbCNhcGFjaGVtb2R1bGV4c2x0Ij5BcGFjaGVNb2R1bGVYU0xUPC9hPg0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KDQoNCjxhIG5hbWU9ImFwYWNoZW1vZHVsZXhzbHQiPiYjODIwNDs8L2E+DQo8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGgzPkFwYWNoZU1vZHVsZVhTTFQ8L2gzPg0KPHRhYmxlIGNsYXNzPSJub3RlIj4NCjx0cj4NCjx0ZCBjbGFzcz0ibm90ZUltZyI+DQo8aW1nIHNyYz0icmVzb3VyY2VzL25vdGUuZ2lmIiBhbHQ9Im5vdGUiIC8+DQo8L3RkPg0KPHRkIGNsYXNzPSJub3RlVHh0Ij5UaGlzIHNhbXBsZSBtdXN0IGJlIGJ1aWx0IHdpdGggdGhlIEFwYWNoZSBXZWIgc2VydmVyLCBhbmQgdGhlIFhhbGFuLUMrKyBkaXN0cmlidXRpb24gZmlsZXMgZG8gbm90IGluY2x1ZGUgYSBiaW5hcnkNCiAgICAgIGZvciBBcGFjaGVNb2R1bGVYU0xULiBBc3N1bWluZyB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIEFwYWNoZSBzZXJ2ZXIgb24geW91ciBwbGF0Zm9ybSwgeW91IGNhbiB1c2UgVmlzdWFsIEMrKyBvbiBXaW5kb3dzIHRvDQogICAgICBidWlsZCBBcGFjaGVNb2R1bGVYU0xULmRsbCwgb3IgdGhlIE1ha2VmaWxlIG9uIFVOSVggdG8gYnVpbGQgeHNsdF9tb2R1bGUgKHdpdGggdGhlIGFwcHJvcHJpYXRlIGxpYnJhcnkgc3VmZml4KS48L3RkPg0KPC90cj4NCjwvdGFibGU+DQogICAgDQo8cD5XaGF0IGl0IGRvZXM6IHJ1bnMgYXMgYW4gQXBhY2hlIG1vZHVsZSBvbiBhbiBBcGFjaGUgV2ViIHNlcnZlcjsgcGVyZm9ybXMgdHJhbnNmb3JtYXRpb25zIGFuZCByZXR1cm5zIHRoZSBvdXRwdXQgdG8gYSBXZWINCiAgIGJyb3dzZXIuIFlvdSBjb25maWd1cmUgQXBhY2hlIHRvIHJlc3BvbmQgdG8gYSBnaXZlbiBVUkwgcmVxdWVzdCBmb3IgYW4gb3V0cHV0IGZpbGUgKGh0bWwgb3IgdHh0IGZpbGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYmVsb3cpDQogICBieSBhcHBseWluZyBhbiB4c2wgc3R5bGVzaGVldCBmaWxlIHRvIGFuIHhtbCBkb2N1bWVudCBmaWxlIChib3RoIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGluIGEgZ2l2ZW4gbG9jYXRpb24pIGFuZCByZXR1cm5pbmcNCiAgIHRoZSB0cmFuc2Zvcm1hdGlvbiBvdXRwdXQgdG8gdGhlIGNsaWVudC48L3A+IA0KPHA+VGhpcyBzYW1wbGUgYWxzbyBpbGx1c3RyYXRlcyB1c2Ugb2YgdGhlIFhhbGFuVHJhbnNmb3JtZXIgY2xhc3MgYW5kIHRoZSBDIEFQSSBkZWZpbmVkIGluIHNyYy9YYWxhblRyYW5zZm9ybWVyL1hhbGFuQ0FQSS5oLiBJdCByZXR1cm5zIA0KICAgdHJhbnNmb3JtYXRpb24gb3V0cHV0IGluIGJsb2NrcyB0byBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCBlbmFibGVzIHRoZSBicm93c2VyIHRvIHN0YXJ0IGRpc3BsYXlpbmcgdGhlIHJlc3VsdCBiZWZvcmUgdGhlIHRyYW5zZm9ybWF0aW9uDQogICBoYXMgYmVlbiBjb21wbGV0ZWQuPC9wPg0KPHRhYmxlIGNsYXNzPSJub3RlIj4NCjx0cj4NCjx0ZCBjbGFzcz0ibm90ZUltZyI+DQo8aW1nIHNyYz0icmVzb3VyY2VzL25vdGUuZ2lmIiBhbHQ9Im5vdGUiIC8+DQo8L3RkPg0KPHRkIGNsYXNzPSJub3RlVHh0Ij5Zb3UgbWF5IG5lZWQgdG8gYWRqdXN0IHRoZSBWaXN1YWwgQysrIG9yIE1ha2VmaWxlIHNldHRpbmdzIHRvIGxvY2F0ZSB0aGUgcmVxdWlyZWQgQXBhY2hlIGhlYWRlciBmaWxlcy4gQXMgc2hpcHBlZCwgdGhlIFZpc3VhbCBDKysgDQogICAgICBwcm9qZWN0IGZpbGUgbG9va3MgaW4gXEFwYWNoZSBHcm91cFxBcGFjaGVcc3JjXGluY2x1ZGUsIGFuZCB0aGUgVU5JWCBNYWtlZmlsZSBsb29rcyBpbiB1c3IvbGliLjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCjxwPlRvIGJ1aWxkIHRoZSBBcGFjaGUgbW9kdWxlLCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiA8YSBocmVmPSJidWlsZGxpYnMuaHRtbCN3aW5ibGRlbnYiPlN0ZXBzIGZvciBkb2luZyBhIFdpbmRvd3MgDQogICBidWlsZDwvYT4gb3IgPGEgaHJlZj0iYnVpbGRsaWJzLmh0bWwjdW5peGJsZGVudiI+U3RlcHMgZm9yIGRvaW5nIGEgVU5JWCBidWlsZDwvYT4uIEZvciBVTklYIHBsYXRmb3JtcywgeW91IGRvIHRoZSBidWlsZCB3aXRoPGJyIC8+IA0KICAgPGNvZGU+Z21ha2UgQXBhY2hlTW9kdWxlWFNMVDwvY29kZT4uPC9wPg0KICANCjxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDQ+U2V0dGluZyB1cCBhbmQgdXNpbmcgQXBhY2hlTW9kdWxlWFNMVDwvaDQ+DQo8cD5UbyB1c2UgQXBhY2hlTW9kdWxlWFNMVCwgZG8gdGhlIGZvbGxvd2luZzo8L3A+DQo8b2w+DQogIDxsaT4oVU5JWCBvbmx5KSBCZSBzdXJlIHRoZSBYYWxhbiBhbmQgWGVyY2VzIGxpYnJhcmllcyBhcmUgb24geW91ciBsaWJyYXJ5IHBhdGggKHlvdSBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGNvcHlpbmcgdGhlbSB0bw0KICAgICAgL3Vzci9saWI7IHNlZSA8YSBocmVmPSJnZXRzdGFydGVkLmh0bWwjcGF0aCI+U2V0dGluZyB1cCB0aGUgcGF0aC9saWJyYXJ5IHBhdGg8L2E+KSwgYW5kIGNvcHkgdGhlIEFwYWNoZSBtb2R1bGUgdG8gDQogICAgICAvdXNyL2xpYi9hcGFjaGUuPGJyIC8+DQo8YnIgLz4NCjwvbGk+DQogIDxsaT5BZGQgTG9hZE1vZHVsZSBhbmQgKFVOSVggb25seSkgQWRkTW9kdWxlIGVudHJpZXMgdG8gdGhlIEFwYWNoZSBjb25maWd1cmF0aW9uIGZpbGU6IGh0dHBkLmNvbmYuPGJyIC8+DQo8YnIgLz4NCiAgICAgIFdpbmRvd3M6IDxjb2RlPkxvYWRNb2R1bGUgeHNsdF9tb2R1bGUgWGFsYW4tQ18xXzExXzAtJmx0O215X1dpbmRvd3NfZGlzdHJpYnV0aW9uJmd0O1xiaW5cQXBhY2hlTW9kdWxlWFNMVC5kbGw8L2NvZGU+DQo8YnIgLz4NCjxiciAvPg0KICAgICAgVU5JWDogPGNvZGU+QWRkTW9kdWxlIG1vZF94c2x0LmM8L2NvZGU+DQo8YnIgLz4NCiAgICAgIKCgoKCgoKCgYW5kPGJyIC8+DQogICAgICCgoKCgoKCgoDxjb2RlPkxvYWRNb2R1bGUgeHNsdF9tb2R1bGUgL3Vzci9saWIvYXBhY2hlL21vZF94c2x0LjxiPg0KPGk+eHg8L2k+DQo8L2I+DQo8L2NvZGU+DQo8YnIgLz4NCjxiciAvPg0KICAgICAgd2hlcmUgPGI+DQo8aT54eDwvaT4NCjwvYj4gaXMgdGhlIGFwcHJvcHJpYXRlIGxpYnJhcnkgc3VmZml4IGZvciB0aGUgVU5JWCBwbGF0Zm9ybSAoInNvIiBvciAiYSIpLjxiciAvPg0KPGJyIC8+DQo8L2xpPg0KICA8bGk+QWRkIGEgJmx0O0xvY2F0aW9uJmd0OyBlbnRyeSB0byBodHRwZC5jb25mIHRoYXQgaW5kaWNhdGVzIHdoZXJlIHhtbC94c2wgZmlsZSBwYWlycyBhcmUgdG8gYmUgZm91bmQsIGFuZCB3aGF0IHRhcmdldCBmaWxlIGV4dGVuc2lvbnMNCiAgICAgIHRvIHJlY29nbml6ZS4gV2Ugc3VnZ2VzdCB0aGUgZm9sbG93aW5nOjxiciAvPg0KPGJyIC8+DQogICAgICA8Y29kZT4mbHQ7TG9jYXRpb24gL3hzbHQmZ3Q7PC9jb2RlPg0KPGJyIC8+DQogICAgICCgoDxjb2RlPkFkZEhhbmRsZXIgbW9kX3hzbHQgLmh0bWw8L2NvZGU+DQo8YnIgLz4NCiAgICAgIKCgPGNvZGU+QWRkSGFuZGxlciBtb2RfeHNsdCAudHh0PC9jb2RlPg0KPGJyIC8+DQogICAgICA8Y29kZT4mbHQ7L0xvY2F0aW9uJmd0OzwvY29kZT4NCjxiciAvPg0KPGJyIC8+DQogICAgICBUaGlzICZsdDtMb2NhdGlvbiZndDsgZWxlbWVudCBpbnN0cnVjdHMgdGhlIG1vZHVsZSB0byByZXNwb25kIHRvIHJlcXVlc3RzIGZvciA8Yj4NCjxpPnh4eDwvaT4NCjwvYj4uaHRtbCBhbmQgPGI+DQo8aT54eHg8L2k+DQo8L2I+LnR4dCBmaWxlcyBpbiB0aGUgDQogICAgICBpbiB0aGUgeHNsdCBzdWJkaXJlY3RvcnkgKHVuZGVyIHRoZSBkb2N1bWVudCByb290OyBzZWUgbmV4dCBpdGVtKSBieSBhcHBseWluZyB0aGUgPGI+DQo8aT54eHg8L2k+DQo8L2I+LnhzbCBzdHlsZXNoZWV0IHRvIDxiPg0KPGk+eHh4PC9pPg0KPC9iPi54bWwgDQogICAgICAoYm90aCBpbiB0aGF0IGRpcmVjdG9yeSkgYW5kIHJldHVybmluZyB0aGUgdHJhbnNmb3JtYXRpb24gcmVzdWx0IHRvIHRoZSBicm93c2VyLjxiciAvPg0KPGJyIC8+DQogICAgICBGb3IgZXhhbXBsZSwgYSByZXF1ZXN0IGZvciBmb28uaHRtbCBpbnN0cnVjdHMgdGhlIG1vZHVsZSB0byBhcHBseSBmb28ueHNsIHRvIGZvby54bWwgYW5kIHJldHVybiB0aGUgcmVzdWx0LjxiciAvPg0KPGJyIC8+DQogICAgICBOb3RlOiBJdCBpcyB1cCB0byB0aGUgc3R5bGVzaGVldCB0byBhcHBseSB0aGUgYXBwcm9wcmlhdGUgeHNsOm91dHB1dCBtZXRob2QgdG8gdGhlIG91dHB1dC4gV2hldGhlciB0aGUgdXNlciBzcGVjaWZpZXMgaHRtbCBvciB0eHQgaXMsIG9mDQogICAgICBpdHNlbGYsIGltbWF0ZXJpYWwuPGJyIC8+DQo8YnIgLz4NCjwvbGk+DQogIDxsaT5QdXQgeG1sL3hzbCBmaWxlIHBhaXJzIGluIHRoZSAmbHQ7TG9jYXRpb24mZ3Q7IHN1YmRpcmVjdG9yeSAoeHNsdCBpbiB0aGUgZXhhbXBsZSkpIHVuZGVyIHRoZSBkb2N1bWVudCByb290IGRpcmVjdG9yeSBzcGVjaWZpZWQgaW4gDQogICAgICBodHRwZC5jb25mIGJ5IHRoZSBEb2N1bWVudFJvb3QgYW5kICZsdDtEaXJlY3RvcnkmZ3Q7IHNldHRpbmdzLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIG1vZGlmeSB0aGVzZSBzZXR0aW5ncyB0byBwb2ludCB0byANCiAgICAgIFhhbGFuLUNfMV8xMV8wLSZsdDtteV9VTklYX2Rpc3RyaWJ1dGlvbiZndDsvc2FtcGxlcy9BcGFjaGVNb2R1bGVYU0xULCB3aGljaCBpbmNsdWRlcyBhbiB4c2x0IHN1YmRpcmVjdG9yeSB3aXRoIHhtbC94c2wgZmlsZSBwYWlycyANCiAgICAgIChmb28ueG1sL3hzbCwgYXBhY2hlbW9kLnhtbC94c2wpLjxiciAvPg0KPGJyIC8+DQo8L2xpPg0KICA8bGk+U3RhcnQgdGhlIEFwYWNoZSBzZXJ2ZXIuPGJyIC8+DQo8YnIgLz4NCjwvbGk+DQogIDxsaT5Gcm9tIGEgV2ViIGJyb3dzZXIsIGNhbGwgdGhlIG1vZHVsZSB3aXRoIGEgVVJMIGFzIGZvbGxvd3M6PGJyIC8+DQogICAgICA8Y29kZT5odHRwOi8vPGI+DQo8aT5zZXJ2ZXJOYW1lPC9pPg0KPC9iPi94c2x0LzxiPg0KPGk+eHh4PC9pPg0KPC9iPi5odG1sPC9jb2RlPg0KPGJyIC8+DQogICAgICB3aGVyZSA8Yj4NCjxpPnNlcnZlck5hbWU8L2k+DQo8L2I+IGlzIHRoZSBBcGFjaGUgc2VydmVyIChzdWNoIGFzIHd3dy5teVNlcnZlci5jb20pIGFuZCA8Yj4NCjxpPnh4eDwvaT4NCjwvYj4gaXMgdGhlIG5hbWUgb2YgYW4geG1sL3hzbCBwYWlyIG9mIGZpbGVzIA0KICAgICAgKHN1Y2ggYXMgZm9vLnhtbCBhbmQgZm9vLnhzbCkgaW4gdGhlIHhzbHQgc3ViZGlyZWN0b3J5IHVuZGVyIHRoZSBEb2N1bWVudFJvb3QgZGlyZWN0b3J5LjxiciAvPg0KPGJyIC8+DQogICAgICBGb3IgZXhhbXBsZSw8YnIgLz4NCiAgICAgIDxjb2RlPmh0dHA6Ly93d3cubXlTZXJ2ZXIuY29tL3hzbHQvYXBhY2hlbW9kLmh0bWw8L2NvZGU+DQo8YnIgLz4NCiAgICAgIGluc3RydWN0cyBBcGFjaGVNb2R1bGVYU0xUIHRvIGFwcGx5IHRoZSBhcGFjaGVtb2QueHNsIHN0eWxlc2hlZXQgdG8gdGhlIGFwYWNoZW1vZC54bWwgWE1MIGRvY3VtZW50IChib3RoIGZpbGVzIGluIHRoZSB4c2x0IGRpcmVjdG9yeSANCiAgICAgIHVuZGVyIHRoZSBBcGFjaGUgRG9jdW1lbnRSb290IGRpcmVjdG9yeSkgYW5kIHJldHVybiB0aGUgdHJhbnNmb3JtYXRpb24gcmVzdWx0IHRvIHRoZSBicm93c2VyLjwvbGk+DQo8L29sPg0KDQoNCiAgDQo8YSBuYW1lPSJjb21waWxlc3R5bGVzaGVldCI+JiM4MjA0OzwvYT4gICAgDQo8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGgzPkNvbXBpbGVTdHlsZXNoZWV0PC9oMz4NCjxwPldoYXQgaXQgZG9lczogVXNlIGEgY29tcGlsZWQgc3R5bGVzaGVldCB0byBwZXJmb3JtIGEgc2VyaWVzIG9mIHRyYW5zZm9ybWF0aW9ucy48L3A+DQo8cD5Zb3UgY2FuIHJ1biBpdCBmcm9tIHRoZSBDb21waWxlU3R5bGVzaGVldCBzdWJkaXJlY3Rvcnkgd2l0aDwvcD4NCjxwPg0KPGNvZGU+Q29tcGlsZVN0eWxlc2hlZXQ8L2NvZGU+DQo8L3A+DQo8cD5TZWUgYWxzbzogPGEgaHJlZj0idXNhZ2VwYXR0ZXJucy5odG1sI2NvbXBpbGVkIj5Db21waWxpbmcgc3R5bGVzaGVldHM8L2E+LjwvcD4NCg0KDQo8YSBuYW1lPSJkb2N1bWVudGJ1aWxkZXIiPiYjODIwNDs8L2E+DQo8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGgzPkRvY3VtZW50QnVpbGRlcjwvaDM+DQo8cD5XaGF0IGl0IGRvZXM6IFVzZSBhIERvY3VtZW50QnVpbGRlciB0byBwcm9ncmFtbWF0aWNhbGx5IGNvbnN0cnVjdCBhbiBYTUwgZG9jdW1lbnQsIGFwcGx5IHRoZSBmb28ueHNsIHN0eWxlc2hlZXQgdG8NCiAgIHRoaXMgZG9jdW1lbnQsIGFuZCB3cml0ZSB0aGUgb3VwdXQgdG8gZm9vLm91dC48L3A+DQo8cD5Zb3UgY2FuIHJ1biBpdCBmcm9tIHRoZSBEb2N1bWVudEJ1aWxkZXIgc3ViZGlyZWN0b3J5IHdpdGg8L3A+DQo8cD4NCjxjb2RlPkRvY3VtZW50QnVpbGRlcjwvY29kZT4NCjwvcD4NCg0KDQo8YSBuYW1lPSJleHRlcm5hbGZ1bmN0aW9ucyI+JiM4MjA0OzwvYT4NCjxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+RXh0ZXJuYWxGdW5jdGlvbnM8L2gzPg0KPHA+V2hhdCBpdCBkb2VzOiBpbXBsZW1lbnQsIGluc3RhbGwsIGFuZCBpbGx1c3RyYXRlIHRoZSB1c2FnZSBvZiB0aHJlZSBleHRlbnNpb24gZnVuY3Rpb25zLiBUaGUgZnVuY3Rpb25zIHJldHVybiBhDQogICBzcXVhcmUgcm9vdCwgYSBjdWJlLCBhbmQgYSBzdHJpbmcgd2l0aCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lLiBUaGUgc2FtcGxlIHN0eWxlc2hlZXQgKGZvby54c2wpIGdldHMgdGhlIGFyZWENCiAgIG9mIGEgY3ViZSBhbmQgdW5pdHMgb2YgbWVhc3VyZW1lbnQgZnJvbSBhbiBYTUwgZG9jdW1lbnQgKGZvby54bWwpLCBjb21wdXRlcyB0aGUgbGVuZ3RoIG9mIGVhY2ggc2lkZQ0KICAgb2YgYSBjdWJlIGFuZCB0aGUgdm9sdW1lIG9mIHRoZSBjdWJlLCBhbmQgZW50ZXJzIHRoZSBkYXRlIGFuZCB0aW1lIG9mIHRoZSB0cmFuc2Zvcm1hdGlvbi4gVGhlIG91dHB1dCBhcHBlYXJzIGluDQogICBmb28ub3V0LjwvcD4NCjxwPlJ1biB0aGlzIHNhbXBsZSBmcm9tIHRoZSBFeHRlcm5hbEZ1bmN0aW9ucyBzdWJkaXJlY3Rvcnkgd2l0aDwvcD4gDQo8cD4NCjxjb2RlPkV4dGVybmFsRnVuY3Rpb25zPC9jb2RlPg0KPC9wPg0KPHA+U2VlIGFsc286IDxhIGhyZWY9ImV4dGVuc2lvbnMuaHRtbCI+RXh0ZW5zaW9uIEZ1bmN0aW9uczwvYT4uPC9wPg0KICANCiAgDQo8YSBuYW1lPSJwYXJzZWRzb3VyY2V3cmFwcGVycyI+JiM4MjA0OzwvYT4NCjxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+UGFyc2VkU291cmNlV3JhcHBlcnM8L2gzPg0KPHA+V2hhdCBpdCBkb2VzOiBwZXJmb3JtcyBhIHRyYW5zZm9ybWF0aW9uIHdpdGggaW5wdXQgaW4gdGhlIGZvcm0gb2YgYSBwcmUtYnVpbHQgWGVyY2VzRE9NIG9yIFhhbGFuU291cmNlVHJlZS48L3A+DQo8cD5SdW4gdGhpcyBzYW1wbGUgZnJvbSB0aGUgUGFyc2VkU291cmNlV3JhcHBlcnMgc3ViZGlyZWN0b3J5IHdpdGg8L3A+DQo8cD4NCjxjb2RlPlBhcnNlZFNvdXJjZVdyYXBwZXJzPC9jb2RlPg0KPC9wPg0KPHA+U2VlIHRyYW5zZm9ybVhlcmNlc0RPTSgpIGFuZCB0cmFuc2Zvcm1YYWxhblNvdXJjZVRyZWUoKSBhcyBjYWxsZWQgYnkgdHJhbnNmb3JtKCkgaW4gUGFyc2VkU291cmNlV3JhcHBlcnMuY3BwLjwvcD4NCg0KDQo8YSBuYW1lPSJzZXJpYWxpemVub2Rlc2V0Ij4mIzgyMDQ7PC9hPg0KPHAgYWxpZ249InJpZ2h0IiBzaXplPSIyIj4NCjxhIGhyZWY9IiNjb250ZW50Ij4odG9wKTwvYT4NCjwvcD4NCjxoMz5TZXJpYWxpemVOb2RlU2V0PC9oMz4NCjxwPldoYXQgaXQgZG9lczogU2VyaWFsaXplIHRoZSBub2RlIHNldCByZXR1cm5lZCBieSB0aGUgYXBwbGljYXRpb24gb2YgYW4gWFBhdGggZXhwcmVzc2lvbiB0byBhbiBYTUwgZG9jdW1lbnQuPC9wPg0KPHA+UnVuIHRoaXMgc2FtcGxlIGZyb20gdGhlIFNlcmlhbGl6ZU5vZGVTZXQgc3ViZGlyZWN0b3J5IHdpdGg8L3A+DQo8cD4NCjxjb2RlPlNlcmlhbGl6ZU5vZGVTZXQgPGI+DQo8aT5YTUxGaWxlPC9pPg0KPC9iPiA8Yj4NCjxpPkNvbnRleHROb2RlPC9pPg0KPC9iPiA8Yj4NCjxpPlhQYXRoRXhwcmVzc2lvbjwvaT4NCjwvYj4NCjwvY29kZT4NCjwvcD4NCjxwPndoZXJlIDxiPg0KPGk+WE1MRmlsZTwvaT4NCjwvYj4gaXMgYW4gWE1MIHNvdXJjZSBmaWxlLCA8Yj4NCjxpPkNvbnRleHROb2RlPC9pPg0KPC9iPiBpcyB0aGUgbG9jYXRpb24gcGF0aCB0byB0aGUgY29udGV4dA0KICAgbm9kZSwgYW5kIDxiPg0KPGk+WFBhdGhFeHByZXNzaW9uPC9pPg0KPC9iPiBpcyBhbiBYUGF0aCBleHByZXNzaW9uIHRvIGFwcGx5IHRvIHRoYXQgY29udGV4dCBub2RlLiBUaGUgU2VyaWFsaXplTm9kZVNldCANCiAgIGRpcmVjdG9yeSBjb250YWlucyB0aGUgc2FtZSBmb28ueG1sIHNhbXBsZSBzb3VyY2UgZmlsZSBhcyB0aGUgcHJlY2VkaW5nIGV4YW1wbGVzLjwvcD4NCiAgICANCg0KPGEgbmFtZT0ic2ltcGxldHJhbnNmb3JtIj4mIzgyMDQ7PC9hPg0KPHAgYWxpZ249InJpZ2h0IiBzaXplPSIyIj4NCjxhIGhyZWY9IiNjb250ZW50Ij4odG9wKTwvYT4NCjwvcD4NCjxoMz5TaW1wbGVUcmFuc2Zvcm08L2gzPg0KPHA+V2hhdCBpdCBkb2VzOiBUaGUgU2ltcGxlVHJhbnNmb3JtIGNsYXNzIHVzZXMgdGhlIGZvby54c2wgc3R5bGVzaGVldCB0byB0cmFuc2Zvcm0gZm9vLnhtbCwgYW5kIHdyaXRlcyB0aGUNCiAgIG91dHB1dCB0byBmb28ub3V0LiAgVGhlIHNvdXJjZSBmb3IgdGhpcyBzYW1wbGUgaGFzIGJlZW4gbW9kaWZpZWQgdG8gZGVtb25zdHJhdGUgdGhlIHVzYWdlIG9mIHRoZSBuZXcgcGx1Z2dhYmxlDQogICBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLjwvcD4NCjxwPllvdSBjYW4gcnVuIGl0IGZyb20gdGhlIFNpbXBsZVRyYW5zZm9ybSBzdWJkaXJlY3Rvcnkgd2l0aDwvcD4NCjxwPg0KPGNvZGU+U2ltcGxlVHJhbnNmb3JtPC9jb2RlPg0KPC9wPg0KPHA+U2VlIGFsc286IDxhIGhyZWY9InVzYWdlcGF0dGVybnMuaHRtbCN4YWxhbnRyYW5zZm9ybWVyIj5CYXNpYyBwcm9jZWR1cmVzIGZvciBwZXJmb3JtaW5nIFhTTA0KICAgdHJhbnNmb3JtYXRpb25zPC9hPi48L3A+DQoNCiAgDQo8YSBuYW1lPSJzaW1wbGV4cGF0aGFwaSI+JiM4MjA0OzwvYT4NCjxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+U2ltcGxlWFBhdGhBUEk8L2gzPg0KPHA+V2hhdCBpdCBkb2VzOiBVc2UgdGhlIFhQYXRoRXZhbHVhdG9yIGludGVyZmFjZSB0byBldmFsdWF0ZSBhbiBYUGF0aCBleHByZXNzaW9uIGZyb20gdGhlIHNwZWNpZmllZCBjb250ZXh0IG5vZGUgb2YgDQogICBhbiBYTUwgZmlsZSBhbmQgZGlzcGxheSB0aGUgbm9kZXNldCByZXR1cm5lZCBieSB0aGUgZXhwcmVzc2lvbi48L3A+DQo8dGFibGUgY2xhc3M9Im5vdGUiPg0KPHRyPg0KPHRkIGNsYXNzPSJub3RlSW1nIj4NCjxpbWcgc3JjPSJyZXNvdXJjZXMvbm90ZS5naWYiIGFsdD0ibm90ZSIgLz4NCjwvdGQ+DQo8dGQgY2xhc3M9Im5vdGVUeHQiPllvdSBjYW4gdXNlIHRoaXMgc2FtcGxlIGFzIGFuIGFpZCB3aGVuIHlvdSB3YW50IHRvIGZpbmQgb3V0IHdoYXQgYSBnaXZlbiBYUGF0aCBleHByZXNzaW9uIHJldHVybnMgZnJvbSBhDQogICAgICBnaXZlbiBjb250ZXh0IG5vZGUgaW4gYW4gWE1MIGZpbGUuPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPHA+UnVuIHRoaXMgc2FtcGxlIGZyb20gdGhlIFNpbXBsZVhQYXRoQVBJIHN1YmRpcmVjdG9yeSB3aXRoPC9wPg0KPHA+DQo8Y29kZT5TaW1wbGVYUGF0aEFQSSA8Yj4NCjxpPlhNTEZpbGU8L2k+DQo8L2I+IDxiPg0KPGk+Q29udGV4dE5vZGU8L2k+DQo8L2I+IDxiPg0KPGk+WFBhdGhFeHByZXNzaW9uPC9pPg0KPC9iPg0KPC9jb2RlPg0KPC9wPg0KPHA+d2hlcmUgPGI+DQo8aT5YTUxGaWxlPC9pPg0KPC9iPiBpcyBhbiBYTUwgc291cmNlIGZpbGUsIDxiPg0KPGk+Q29udGV4dE5vZGU8L2k+DQo8L2I+IGlzIHRoZSBsb2NhdGlvbiBwYXRoIHRvIHRoZSBjb250ZXh0DQogICBub2RlLCBhbmQgPGI+DQo8aT5YUGF0aEV4cHJlc3Npb248L2k+DQo8L2I+IGlzIGFuIFhQYXRoIGV4cHJlc3Npb24gdG8gYXBwbHkgdG8gdGhhdCBjb250ZXh0IG5vZGUuPC9wPiANCjx0YWJsZSBjbGFzcz0ibm90ZSI+DQo8dHI+DQo8dGQgY2xhc3M9Im5vdGVJbWciPg0KPGltZyBzcmM9InJlc291cmNlcy9ub3RlLmdpZiIgYWx0PSJub3RlIiAvPg0KPC90ZD4NCjx0ZCBjbGFzcz0ibm90ZVR4dCI+S2VlcCBpbiBtaW5kIHRoYXQgdGhlIHN0cmluZyB2YWx1ZSByZXR1cm5lZCBieSBhbiBYUGF0aCBleHByZXNzaW9uIGlzIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGZpcnN0IG5vZGUgaW4gdGhlIA0KICAgICAgbm9kZXNldCByZXR1cm5lZCBieSB0aGUgZXhwcmVzc3Npb24uPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPHA+VGhlIFhQYXRoV3JhcHBlciBzdWJkaXJlY3RvcnkgY29udGFpbnMgYW4gWE1MIGZpbGUgbmFtZWQgeG1sLmZvbyAocGFydCBvZiBpdCBhcHBlYXJzIGJlbG93KS48L3A+DQo8YmxvY2txdW90ZSBjbGFzcz0ic291cmNlIj4NCjxwcmU+DQombHQ7P3htbCB2ZXJzaW9uPSIxLjAiPyZndDsNCiZsdDtkb2MmZ3Q7DQogICZsdDtuYW1lIGZpcnN0PSJEYXZpZCIgbGFzdD0iTWFyc3RvbiImZ3Q7TXIuIE1hcnNvbiZsdDsvbmFtZSZndDsNCiAgJmx0O25hbWUgZmlyc3Q9IkRhdmlkIiBsYXN0PSJCZXJ0b25pIiZndDtNci4gQmVydG9uaSZsdDsvbmFtZSZndDsNCiAgLi4uDQogICZsdDtuYW1lIGZpcnN0PSJQYXVsIiBsYXN0PSJEaWNrIiZndDtNci4gRGljayZsdDsvbmFtZSZndDsNCiZsdDsvZG9jJmd0Ow0KPC9wcmU+DQo8L2Jsb2NrcXVvdGU+DQo8cD5Zb3UgY2FuIHRyeSBjb21tYW5kIGxpbmVzIGxpa2U8L3A+DQo8cD4NCjxjb2RlPlNpbXBsZVhQYXRoQVBJIGZvby54bWwgL2RvYyBuYW1lL0BsYXN0PC9jb2RlPg0KPC9wPg0KPHA+YW5kPC9wPg0KPHA+DQo8Y29kZT5TaW1wbGVYUGF0aEFQSSBmb28ueG1sIC8gJy8vbmFtZVtwb3NpdGlvbigpPSI0Il0vQGZpcnN0JzwvY29kZT4NCjwvcD4NCjx0YWJsZSBjbGFzcz0ibm90ZSI+DQo8dHI+DQo8dGQgY2xhc3M9Im5vdGVJbWciPg0KPGltZyBzcmM9InJlc291cmNlcy9ub3RlLmdpZiIgYWx0PSJub3RlIiAvPg0KPC90ZD4NCjx0ZCBjbGFzcz0ibm90ZVR4dCI+SWYgYSBTaW1wbGVYUGF0aEFQSSBhcmd1bWVudCBpbmNsdWRlcyBjaGFyYWN0ZXJzIChzdWNoIGFzICopIHRoYXQgdGhlIHNoZWxsIGludGVycHJldHMgaW5jb3JyZWN0bHksIGVuY2xvc2UgdGhlIGFyZ3VtZW50IA0KICAgICAgaW4gZG91YmxlIHF1b3Rlcy48L3RkPg0KPC90cj4NCjwvdGFibGU+DQo8cD5TZWUgYWxzbzogPGEgaHJlZj0idXNhZ2VwYXR0ZXJucy5odG1sI3hwYXRoIj5Xb3JraW5nIHdpdGggWFBhdGggZXhwcmVzc2lvbnM8L2E+LjwvcD4NCg0KDQo8YSBuYW1lPSJzaW1wbGV4cGF0aGNhcGkiPiYjODIwNDs8L2E+DQo8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGgzPlNpbXBsZVhQYXRoQ0FQSTwvaDM+DQo8cD5XaGF0IGl0IGRvZXM6IFVzZSB0aGUgWFBhdGhFdmFsdWF0b3IgQyBpbnRlcmZhY2UgdG8gZXZhbHVhdGUgYW4gWFBhdGggZXB4ZXJlc3Npb24gYW5kIGRpc3BsYXkgdGhlIHN0cmluZyB2YWx1ZSByZXR1cm5lZCANCiAgIGJ5IHRoZSBlcHhyZXNzaW9uLjwvcD4NCjx0YWJsZSBjbGFzcz0ibm90ZSI+DQo8dHI+DQo8dGQgY2xhc3M9Im5vdGVJbWciPg0KPGltZyBzcmM9InJlc291cmNlcy9ub3RlLmdpZiIgYWx0PSJub3RlIiAvPg0KPC90ZD4NCjx0ZCBjbGFzcz0ibm90ZVR4dCI+S2VlcCBpbiBtaW5kIHRoYXQgdGhlIHN0cmluZyB2YWx1ZSByZXR1cm5lZCBieSBhbiBYUGF0aCBleHByZXNzaW9uIGlzIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGZpcnN0IG5vZGUgaW4gdGhlIG5vZGVzZXQgDQogICAgICByZXR1cm5lZCBieSB0aGUgZXB4cmVzc3Npb24uPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPHA+UnVuIHRoaXMgc2FtcGxlIGZyb20gdGhlIFNpbXBsZVhQYXRoQ0FQSSBzdWJkaXJlY3Rvcnkgd2l0aDwvcD4NCjxwPg0KPGNvZGU+U2ltcGxlWFBhdGhDQVBJIDxiPg0KPGk+WE1MRmlsZTwvaT4NCjwvYj4gPGI+DQo8aT5YUGF0aEV4cHJlc3Npb248L2k+DQo8L2I+DQo8L2NvZGU+DQo8L3A+DQo8cD53aGVyZSA8Yj4NCjxpPlhNTEZpbGU8L2k+DQo8L2I+IGlzIGFuIFhNTCBzb3VyY2UgZmlsZSwgYW5kIDxiPg0KPGk+WFBhdGhFeHByZXNzaW9uPC9pPg0KPC9iPiBpcyBhbiBYUGF0aCBleHByZXNzaW9uIHRvIGFwcGx5IHRvIHRoZSBYTUwgDQogICBzb3VyY2UgZmlsZS4gVGhlIFNpbXBsZVhQYXRoQ0FQSSBzdWJkaXJlY3RvcnkgY29udGFpbnMgYW4gWE1MIGZpbGUgbmFtZWQgeG1sLmZvbyBpZGVudGljYWwgdG8gZm9vLnhtbCBpbiB0aGUgcHJlY2VkaW5nIA0KICAgZXhhbXBsZS48L3A+DQo8cD5Zb3UgY2FuIHRyeSBjb21tYW5kIGxpbmVzIGxpa2U8L3A+DQo8cD4NCjxjb2RlPlNpbXBsZVhQYXRoQ0FQSSBmb28ueG1sIC9kb2MvbmFtZVszXTwvY29kZT4NCjwvcD4NCg0KICANCjxhIG5hbWU9InN0cmVhbXRyYW5zZm9ybSI+JiM4MjA0OzwvYT4NCjxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+U3RyZWFtVHJhbnNmb3JtPC9oMz4NCjxwPldoYXQgaXQgZG9lczogVGhlIFN0cmVhbVRyYW5zZm9ybSBjbGFzcyBwcm9jZXNzZXMgY2hhcmFjdGVyIGlucHV0IHN0cmVhbXMgY29udGFpbmluZyBhIHN0eWxlc2hlZXQgYW5kIGFuIFhNTCBkb2N1bWVudCwgYW5kDQogICB3cml0ZXMgdGhlIHRyYW5zZm9ybWF0aW9uIG91dHB1dCB0byBhIGNoYXJhY3RlciBvdXRwdXQgc3RyZWFtLiBUaGlzIHNhbXBsZSBpbGx1c3RyYXRlcyB0aGUgcHJvY2VzcyBmb3Igd29ya2luZyB3aXRoIHN0eWxlc2hlZXRzIA0KICAgYW5kIGRvY3VtZW50cyB0aGF0IHlvdSBhc3NlbWJsZSBpbiBtZW1vcnkuPC9wPg0KPHA+WW91IGNhbiBydW4gaXQgZnJvbSB0aGUgU2ltcGxlVHJhbnNmb3JtIHN1YmRpcmVjdG9yeSB3aXRoPC9wPg0KPHA+DQo8Y29kZT5TdHJlYW1UcmFuc2Zvcm08L2NvZGU+DQo8L3A+DQoNCiAgDQo8YSBuYW1lPSJ0aHJlYWRzYWZlIj4mIzgyMDQ7PC9hPg0KPHAgYWxpZ249InJpZ2h0IiBzaXplPSIyIj4NCjxhIGhyZWY9IiNjb250ZW50Ij4odG9wKTwvYT4NCjwvcD4NCjxoMz5UaHJlYWRTYWZlPC9oMz4NCjxwPldoYXQgaXQgZG9lczogTXVsdGlwbGUgdGhyZWFkcyB1c2UgYSBzaW5nbGUgY29tcGlsZWQgc3R5bGVzaGVldCAoU3R5bGVzaGVldFJvb3QpIGFuZCBET00gc291cmNlIHRyZWUgKFhhbGFuTm9kZSkgdG8gcGVyZm9ybQ0KICAgdHJhbnNmb3JtYXRpb25zIGNvbmN1cnJlbnRseS4gVGhlIGFwcGxpY2F0aW9uIHRyYWNrcyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHRocmVhZHMgaW4gbWVzc2FnZXMgdG8gdGhlIGNvbnNvbGUsIGFuZCBlYWNoIHRocmVhZA0KICAgd3JpdGVzIGl0cyBvd24gb3V0cHV0IGZpbGUuIEltYWdpbmUgYSBzZXJ2ZXIgYXBwbGljYXRpb24gcmVzcG9uZGluZyB0byBtdWx0aXBsZSBjbGllbnRzIHdobyBoYXBwZW4gdG8gcmVxdWVzdCB0aGUgc2FtZQ0KICAgdHJhbnNmb3JtYXRpb24uPC9wPg0KPHA+WW91IGNhbiBydW4gaXQgZnJvbSB0aGUgVGhyZWFkU2FmZSBzdWJkaXJlY3Rvcnkgd2l0aDwvcD4NCjxwPg0KPGNvZGU+VGhyZWFkU2FmZTwvY29kZT4NCjwvcD4NCjxwPlNlZSBhbHNvOiA8YSBocmVmPSJ1c2FnZXBhdHRlcm5zLmh0bWwjY29tcGlsZWQiPkNvbXBpbGluZyBzdHlsZXNoZWV0czwvYT4uPC9wPiAgDQoNCg0KPGEgbmFtZT0idHJhY2VsaXN0ZW4iPiYjODIwNDs8L2E+DQo8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGgzPlRyYWNlTGlzdGVuPC9oMz4NCjxwPldoYXQgaXQgZG9lczogVHJhY2UgZXZlbnRzIGR1cmluZyBhIHRyYW5zZm9ybWF0aW9uOyB0aGUgdHJhbnNmb3JtYXRpb24gdXNlcyBiaXJkcy54c2wgdG8gdHJhbnNmb3JtIGJpcmRzLnhtbCBhbmQgd3JpdGVzIHRoZQ0KICAgb3V0cHV0IHRvIGJpcmRzLm91dC48L3A+DQo8cD5Zb3UgY2FuIHJ1biBpdCBmcm9tIHRoZSBUcmFjZUxpc3RlbiBzdWJkaXJlY3Rvcnkgd2l0aDwvcD4NCjxwPg0KPGNvZGU+VHJhY2VMaXN0ZW4gPGI+DQo8aT50cmFjZUZsYWdzPC9pPg0KPC9iPg0KPC9jb2RlPg0KPC9wPg0KPHA+d2hlcmUgPGI+DQo8aT50cmFjZUZsYWdzPC9pPg0KPC9iPiBpcyBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nOjwvcD4NCjxwPqCgPGNvZGU+LXR0PC9jb2RlPiAoVHJhY2UgdGhlIHRlbXBsYXRlcyBhcyB0aGV5IGFyZSBiZWluZyBjYWxsZWQpPC9wPg0KPHA+oKA8Y29kZT4tdGc8L2NvZGU+IChUcmFjZSBlYWNoIHJlc3VsdCB0cmVlIGdlbmVyYXRpb24gZXZlbnQpPC9wPg0KPHA+oKA8Y29kZT4tdHM8L2NvZGU+IChUcmFjZSBlYWNoIHNlbGVjdGlvbiBldmVudCk8L3A+DQo8cD6goDxjb2RlPi10dGM8L2NvZGU+IChUcmFjZSB0aGUgdGVtcGxhdGUgY2hpbGRyZW4gYXMgdGhleSBhcmUgYmVpbmcgcHJvY2Vzc2VkKTwvcD4NCjxwPlRoZXNlIGZsYWdzIGFyZSBhbHNvIGF2YWlsYWJsZSBpbiB0aGUgPGEgaHJlZj0iY29tbWFuZGxpbmUuaHRtbCI+Y29tbWFuZC1saW5lIHV0aWxpdHkgKFRlc3RYU0xUKTwvYT4uPC9wPg0KPHA+VGhlIGNvcmUgb2YgdGhpcyBleGFtcGxlIGlzIHRoZSBmb2xsb3dpbmcgZnJhZ21lbnQ6PC9wPg0KPGJsb2NrcXVvdGUgY2xhc3M9InNvdXJjZSI+DQo8cHJlPg0KLy8gU2V0IHVwIGEgZGlhZ25vc3RpYyB3cml0ZXIgdG8gYmUgdXNlZCBieSB0aGUgVHJhY2VMaXN0ZW5lci4uLg0KWGFsYW5TdGRPdXRwdXRTdHJlYW0gIHRoZVN0ZEVycihjZXJyKTsNClhhbGFuT3V0cHV0U3RyZWFtUHJpbnRXcml0ZXIgIGRpYWdub3N0aWNzV3JpdGVyKHRoZVN0ZEVycik7DQovLyBNYWtlIHN1cmUgdGhhdCBlcnJvciByZXBvcnRpbmcsIHdoaWNoIGluY2x1ZGVzIGFueSBUcmFjZUxpc3RlbmVyIA0KLy8gb3V0cHV0IGRvZXMgbm90IHRocm93IGV4Y2VwdGlvbnMgd2hlbiB0cmFuc2NvZGluZywgc2luY2UgdGhhdCBjb3VsZCANCi8vIHJlc3VsdCBpbiBhbiBleGNlcHRpb24gYmVpbmcgdGhyb3duIHdoaWxlIGFub3RoZXIgZXhjZXB0aW9uIGlzIGFjdGl2ZS4NCi8vIEluIHBhcnRpY3VsYXIsIGNoYXJhY3RlcnMgdGhhdCB0aGUgVHJhY2VMaXN0ZW5lciB3cml0ZXMgbWlnaHQgbm90IGJlIA0KLy8gcmVwcmVzZW50YWJsZSBpbiB0aGUgbG9jYWwgY29kZSBwYWdlLg0KdGhlU3RkRXJyLnNldFRocm93VHJhbnNjb2RlRXhjZXB0aW9uKGZhbHNlKTsNCg0KLy8gU2V0IHVwIHRoZSBUcmFjZUxpc3RlbmVyLi4uDQovLyB0cmFjZVRlbXBsYXRlcywgdHJhY2VUZW1wbGF0ZUNoaWxkcmVuLCB0cmFjZUdlbmVyYXRpb25FdmVudCwNCi8vIGFuZCBUcmFjZVNlbGVjdGlvbkV2ZW50IGFyZSBib29sZWFucyBzZXQgYnkgdGhlIGNvbW1hbmQgbGluZS4NClRyYWNlTGlzdGVuZXJEZWZhdWx0IHRoZVRyYWNlTGlzdGVuZXIoDQogICAgICAgIGRpYWdub3N0aWNzV3JpdGVyLA0KICAgICAgICB0cmFjZVRlbXBsYXRlcywNCiAgICAgICAgdHJhY2VUZW1wbGF0ZUNoaWxkcmVuLA0KICAgICAgICB0cmFjZUdlbmVyYXRpb25FdmVudCwNCiAgICAgICAgdHJhY2VTZWxlY3Rpb25FdmVudCk7DQoNCi8vIEFkZCB0aGUgVHJhY2VMaXN0ZW5lciB0byB0aGUgWFNMVCBwcm9jZXNzb3IuLi4NCnRoZVByb2Nlc3Nvci5zZXRUcmFjZVNlbGVjdHModHJhY2VTZWxlY3Rpb25FdmVudCk7DQp0aGVQcm9jZXNzb3IuYWRkVHJhY2VMaXN0ZW5lcigmYW1wO3RoZVRyYWNlTGlzdGVuZXIpOw0KDQovLyBQZXJmb3JtIHRoZSB0cmFuc2Zvcm1hdGlvbg0KLi4uLg0KPC9wcmU+DQo8L2Jsb2NrcXVvdGU+DQogIA0KICAgIA0KPGEgbmFtZT0idHJhbnNmb3JtdG94ZXJjZXNkb20iPiYjODIwNDs8L2E+DQo8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGgzPlRyYW5zZm9ybVRvWGVyY2VzRE9NPC9oMz4NCjxwPldoYXQgaXQgZG9lczogUGVyZm9ybXMgYSBzaW1wbGUgdHJhbnNmb3JtYXRpb24gYnV0IHB1dHMgdGhlIHJlc3VsdCBpbiBhIFhlcmNlcyBET01Eb2N1bWVudDwvcD4NCjxwPlJ1biB0aGlzIHNhbXBsZSBmcm9tIHRoZSBUcmFuc2Zvcm1Ub1hlcmNlc0RPTSBzdWJkaXJlY3Rvcnkgd2l0aDwvcD4NCjxwPg0KPGNvZGU+VHJhbnNmb3JtVG9YZXJjZXNET00gPGI+DQo8aT5YTUxGaWxlPC9pPg0KPC9iPiA8Yj4NCjxpPlhTTEZpbGU8L2k+DQo8L2I+DQo8L2NvZGU+DQo8L3A+DQo8cD53aGVyZSA8Yj4NCjxpPlhNTEZpbGU8L2k+DQo8L2I+IGlzIGEgc291cmNlIFhNTCBmaWxlLCBhbmQgPGI+DQo8aT5YU0xGaWxlPC9pPg0KPC9iPiBpcyB0aGUgWExTVCBpbnB1dCBmaWxlLiAgVGhlIHByb2dyYW0gd2lsbCB1c2UgDQogICA8Yj4NCjxpPlhTTEZpbGU8L2k+DQo8L2I+IHRvIHRyYW5zZm9ybSB0aGUgaW5wdXQgZmlsZSA8Yj4NCjxpPlhNTEZpbGU8L2k+DQo8L2I+IHVzaW5nIFhlcmNlcyBET00gYXMgdGhlIG91dHB1dCBkZXN0aW5hdGlvbi48L3A+CSAgDQo8cD5TZWUgdGhlIEZvcm1hdHRlclRvWGVyY2VzRE9NIHVzYWdlIGluIHRoZSBzYW1wbGUgY29kZS48L3A+DQoNCg0KPGEgbmFtZT0idXNlc3R5bGVzaGVldHBhcmFtIj4mIzgyMDQ7PC9hPiAgICANCjxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+VXNlU3R5bGVzaGVldFBhcmFtPC9oMz4NCg0KPHA+V2hhdCBpdCBkb2VzOiBQZXJmb3JtcyBhIHRyYW5zZm9ybWF0aW9uIHVzaW5nIHRvcC1sZXZlbCBzdHlsZXNoZWV0IHBhcmFtZXRlcnMuICBUaGVyZSBhcmUgdGhyZWUgc3VwcG9ydGVkIHR5cGVzIG9mIHBhcmFtZXRlcnMuICBPbmUgaXMgYSB0ZXh0IHN0cmluZy4gIEEgc2Vjb25kIGlzIGEgbnVtYmVyIG9mIHR5cGUgZG91YmxlLiAgQSBub2Rlc2V0IG9yIHBhcnNlZCBkb2N1bWVudCBjYW4gYWxzbyBiZSB1c2VkLjwvcD4NCg0KPHA+WW91IGNhbiBydW4gaXQgZnJvbSB0aGUgVXNlU3R5bGVzaGVldFBhcmFtIHN1YmRpcmVjdG9yeSB3aXRoPC9wPg0KDQo8cD4NCjxjb2RlPlVzZVN0eWxlc2hlZXRQYXJhbSA8Yj4NCjxpPnhtbGZpbGU8L2k+DQo8L2I+IDxiPg0KPGk+c3R5bGVzaGVldDwvaT4NCjwvYj4gPGI+DQo8aT5vdXRmaWxlPC9pPg0KPC9iPiBbb3B0aW9uc108L2NvZGU+DQo8L3A+DQoNCjxwPndoZXJlIHRoZSBvcHRpb25zIGFyZTo8L3A+DQoNCjxwPg0KPGNvZGU+ICAgIC1zIGtleSAiJ1N0cmluZy1WYWx1ZSciPC9jb2RlPg0KPGJyIC8+DQo8Y29kZT4gICAgLW4ga2V5IE51bWJlcjwvY29kZT4NCjxiciAvPg0KPGNvZGU+ICAgIC1kIGtleSAiRG9jdW1lbnQtVVJMIjwvY29kZT4NCjwvcD4NCg0KPHA+VGhlIGZpbGVzIHVzZWQgYnkgdGhlIHNhbXBsZSBwcm9ncmFtIGFuZCB0aGUgdG9wLWxldmVsIHBhcmFtZXRlciBub2Rlc2V0cyBmb3IgdGhpcyBpbGx1c3RyYXRpb24gYXJlIHRvIGJlIGluIHdvcmtpbmcgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBzYW1wbGUgcHJvZ3JhbSBydW5zLjwvcD4NCg0KPHA+VXNpbmcgdGhlIHNhbXBsZSBwcm9ncmFtOjwvcD4NCg0KPHA+DQo8Y29kZT5Vc2VTdHlsZXNoZWV0UGFyYW0gZm9vLnhtbCBmb28ueHNsdCBmb28ub3V0IFw8YnIgLz4NCiAgICAtcyBzdHJpbmdBICInVGhpcyBpcyBhIHRlc3Qgc3RyaW5nIHZhbHVlJyIgXDxiciAvPg0KICAgIC1uIG51bWJlckEgIDEyMy4wMTIzNDUgXDxiciAvPg0KICAgIC1kIHBhcm1BICJwYXJtQS54bWwiIFw8YnIgLz4NCiAgICAtZCBwYXJtQiAicGFybUIueG1sIjwvY29kZT4NCjwvcD4NCg0KPHA+VGhlIDxiPg0KPGk+cGFybUEueG1sPC9pPg0KPC9iPiBhbmQgPGI+DQo8aT5wYXJtQi54bWw8L2k+DQo8L2I+IGFyZSBwYXJzZWQgYW5kIGNvbnZlcnRlZCB0byBub2Rlc2V0cy4gIFRoZSBzdHlsZXNoZWV0IDxiPg0KPGk+Zm9vLnhzbHQ8L2k+DQo8L2I+IG1lcmdlcyB0aGUgY29udGVudHMgb2YgPGI+DQo8aT5mb28ueG1sPC9pPg0KPC9iPiBhbmQgdGhlIHBhcmFtZXRlcnMgaW50byB0aGUgPGI+DQo8aT5mb28ub3V0PC9pPg0KPC9iPiBmaWxlLjwvcD4NCg0KPHA+VGhlIHNvdXJjZSBzYW1wbGUgaXMgaW1wbGVtZW50ZWQgaW4gQysrLiAgQW5vdGhlciBleGFtcGxlIGlzIGltcGxlbWVudGVkIGluICdDJyB1c2luZyB0aGUgWGFsYW5DQVBJIGxpYnJhcnkgPGI+DQo8aT5UZXN0Q0FQSXBhcm0uYzwvaT4NCjwvYj4uICBUaGUgdXNhZ2UgaW50ZXJmYWNlIGZvciBib3RoIGlzIHRoZSBzYW1lLjwvcD4NCg0KPHA+U2VlIGFsc286IDxhIGhyZWY9InVzYWdlcGF0dGVybnMuaHRtbCNwYXJhbXMiPlNldHRpbmcgc3R5bGVzaGVldCBwYXJhbWV0ZXJzPC9hPi48L3A+DQoNCg0KPGEgbmFtZT0ieGFsYW50cmFuc2Zvcm0iPiYjODIwNDs8L2E+DQo8cCBhbGlnbj0icmlnaHQiIHNpemU9IjIiPg0KPGEgaHJlZj0iI2NvbnRlbnQiPih0b3ApPC9hPg0KPC9wPg0KPGgzPlhhbGFuVHJhbnNmb3JtPC9oMz4NCjxwPldoYXQgaXQgZG9lczogWGFsYW5UcmFuc2Zvcm0gdXNlcyB0aGUgWGFsYW5UcmFuc2Zvcm1lciBjbGFzcyBhbmQgdGhlIGFzc29jaWF0ZWQgQysrIEFQSSB0byBhcHBseSBhbiBYU0wgc3R5bGVzaGVldCANCiAgIGZpbGUgdG8gYW4gWE1MIGRvY3VtZW50IGZpbGUgYW5kIHdyaXRlIHRoZSB0cmFuc2Zvcm1hdGlvbiBvdXRwdXQgdG8gZWl0aGVyIGFuIG91dHB1dCBmaWxlIG9yIHRvIGEgc3RyZWFtLiBYYWxhblRyYW5zZm9ybSANCiAgIHRha2VzIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgZm9yIHRoZSBYTUwgZG9jdW1lbnQgdG8gYmUgdHJhbnNmb3JtZWQsIHRoZSBYU0wgc3R5bGVzaGVldCB0byBhcHBseSwgYW5kIGFuIG9wdGlvbmFsIG91dHB1dCANCiAgIGZpbGUgYXJndW1lbnQuIElmIHlvdSBvbWl0IHRoZSB0aGlyZCBhcmd1bWVudCwgWGFsYW5UcmFuc2Zvcm0gd3JpdGVzIHRoZSB0cmFuc2Zvcm1hdGlvbiBvdXRwdXQgdG8gYSBzdHJlYW0gdGhhdCBpcyBzZW50IHRvIA0KICAgc3RhbmRhcmQgb3V0ICh0aGUgY29uc29sZSkuPC9wPg0KPHA+WW91IGNhbiBydW4gWGFsYW5UcmFuc2Zvcm0gZnJvbSB0aGUgWGFsYW5UcmFuc2Zvcm0gc3ViZGlyZWN0b3J5IHdpdGg8L3A+DQo8cD4NCjxjb2RlPlhhbGFuVHJhbnNmb3JtIGZvby54bWwgZm9vLnhzbCBmb28ub3V0PC9jb2RlPg0KPC9wPg0KPHA+T21pdCB0aGUgdGhpcmQgYXJndW1lbnQgdG8gd3JpdGUgdGhlIHRyYW5zZm9ybWF0aW9uIHJlc3VsdCB0byB0aGUgY29uc29sZS4gU2VlIGFsc286IDxhIGhyZWY9InVzYWdlcGF0dGVybnMuaHRtbCN4YWxhbnRyYW5zZm9ybWVyIj5Vc2luZyB0aGUgWGFsYW5UcmFuc2Zvcm1lciBjbGFzcy48L2E+LjwvcD4NCg0KICANCjxhIG5hbWU9InhhbGFudHJhbnNmb3JtZXJjYWxsYmFjayI+JiM4MjA0OzwvYT4NCjxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8aDM+WGFsYW5UcmFuc2Zvcm1lckNhbGxiYWNrPC9oMz4NCjxwPldoYXQgaXQgZG9lczogUmV0dXJuIHRyYW5zZm9ybWF0aW9uIG91dHB1dCBpbiBibG9ja3MgdG8gYSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggd3JpdGVzIHRoZSBvdXRwdXQgdG8gYSBmaWxlLg0KICAgVGhpcyBzYW1wbGUgaWxsdXN0cmF0ZXMgdGhlIHVzZSBvZiBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGluY3JlbWVudGFsbHkgcHJvY2VzcyBhIHRyYW5zZm9ybWF0aW9uIHJlc3VsdCwgdGhhdCBpcyB0byBiZWdpbg0KICAgd29ya2luZyB3aXRoIHRoZSB0cmFuc2Zvcm1hdGlvbiByZXN1bHQgYmVmb3JlIHRoZSB0cmFuc2Zvcm1hdGlvbiBoYXMgYmVlbiBjb21wbGV0ZWQuIFNlZSA8YSBocmVmPSJ1c2FnZXBhdHRlcm5zLmh0bWwjaW5jcmVtZW50YWwiPlByb2Nlc3Npbmcgb3V0cHV0IGluY3JlbWVudGFsbHk8L2E+LjwvcD4NCjxwPllvdSBjYW4gcnVuIGl0IGZyb20gdGhlIFhhbGFuVHJhbnNmb3JtZXJDYWxsYmFjayBzdWJkaXJlY3Rvcnkgd2l0aDwvcD4NCjxwPg0KPGNvZGU+WGFsYW5UcmFuc2Zvcm1lckNhbGxiYWNrIGZvby54bWwgZm9vLnhzbCBbZm9vLm91dF08L2NvZGU+DQo8L3A+DQo8dGFibGUgY2xhc3M9Im5vdGUiPg0KPHRyPg0KPHRkIGNsYXNzPSJub3RlSW1nIj4NCjxpbWcgc3JjPSJyZXNvdXJjZXMvbm90ZS5naWYiIGFsdD0ibm90ZSIgLz4NCjwvdGQ+DQo8dGQgY2xhc3M9Im5vdGVUeHQiPklmIHlvdSBvbWl0IHRoZSB0aGlyZCBhcmd1bWVudCwgdGhlIHRyYW5zZm9ybWF0aW9uIHJlc3VsdCBpcyB3cml0dGVuIHRvIHRoZSBjb25zb2xlLjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KICANCjxwIGFsaWduPSJyaWdodCIgc2l6ZT0iMiI+DQo8YSBocmVmPSIjY29udGVudCI+KHRvcCk8L2E+DQo8L3A+DQo8L2Rpdj4NCjxkaXYgaWQ9ImZvb3RlciI+Q29weXJpZ2h0IKkgMTk5OS0yMDEyIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjxiciAvPkFwYWNoZSwgWGFsYW4sIGFuZCB0aGUgRmVhdGhlciBsb2dvIGFyZSB0cmFkZW1hcmtzIG9mIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjxkaXYgY2xhc3M9InNtYWxsIj5XZWIgUGFnZSBjcmVhdGVkIG9uIC0gRnJpIDA2LzE1LzIwMTI8L2Rpdj4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K