PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CjxodG1sPjxoZWFkPjxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiPjx0aXRsZT5SZXRyaWV2aW5nIEF0dHJpYnV0ZXM8L3RpdGxlPjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNDgiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkxpYnhtbCBUdXRvcmlhbCI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkxpYnhtbCBUdXRvcmlhbCI+PGxpbmsgcmVsPSJwcmV2aW91cyIgaHJlZj0iYXIwMXMwNi5odG1sIiB0aXRsZT0iV3JpdGluZyBBdHRyaWJ1dGUiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYXBhLmh0bWwiIHRpdGxlPSJBLiBTYW1wbGUgRG9jdW1lbnQiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ibmF2aGVhZGVyIj48dGFibGUgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIj48dHI+PHRoIGNvbHNwYW49IjMiIGFsaWduPSJjZW50ZXIiPlJldHJpZXZpbmcgQXR0cmlidXRlczwvdGg+PC90cj48dHI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJsZWZ0Ij48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImFyMDFzMDYuaHRtbCI+UHJldjwvYT6gPC90ZD48dGggd2lkdGg9IjYwJSIgYWxpZ249ImNlbnRlciI+oDwvdGg+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+oDxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYXBhLmh0bWwiPk5leHQ8L2E+PC90ZD48L3RyPjwvdGFibGU+PGhyPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QxIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJ4bWx0dXRvcmlhbGF0dHJpYnV0ZSI+PC9hPlJldHJpZXZpbmcgQXR0cmlidXRlczwvaDI+PC9kaXY+PC9kaXY+PHA+UmV0cmlldmluZyB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGlzIHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzCiAgICBleGFtcGxlIGluIHdoaWNoIHdlIHJldHJpZXZlZCBhIG5vZGUncyB0ZXh0IGNvbnRlbnRzLiBJbiB0aGlzIGNhc2Ugd2UnbGwKICAgICAgZXh0cmFjdCB0aGUgdmFsdWUgb2YgdGhlIFVSSSB3ZSBhZGRlZCBpbiB0aGUgcHJldmlvdXMKICAgICAgc2VjdGlvbi4gRnVsbCBjb2RlOiA8YSBocmVmPSJhcGUuaHRtbCIgdGl0bGU9IkUuIENvZGUgZm9yIFJldHJpZXZpbmcgQXR0cmlidXRlIFZhbHVlIEV4YW1wbGUiPkFwcGVuZGl4IEU8L2E+LjwvcD48cD4KICAgICAgVGhlIGluaXRpYWwgc3RlcHMgZm9yIHRoaXMgZXhhbXBsZSBhcmUgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgb25lczogcGFyc2UKICAgICAgdGhlIGRvYywgZmluZCB0aGUgZWxlbWVudCB5b3UgYXJlIGludGVyZXN0ZWQgaW4sIHRoZW4gZW50ZXIgYSBmdW5jdGlvbiB0bwogICAgICBjYXJyeSBvdXQgdGhlIHNwZWNpZmljIHRhc2sgcmVxdWlyZWQuIEluIHRoaXMgY2FzZSwgd2UgY2FsbAogICAgICA8dHQ+Z2V0UmVmZXJlbmNlPC90dD46CiAgICAgIDxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4Kdm9pZApnZXRSZWZlcmVuY2UgKHhtbERvY1B0ciBkb2MsIHhtbE5vZGVQdHIgY3VyKSB7CgoJY3VyID0gY3VyLSZndDt4bWxDaGlsZHJlbk5vZGU7Cgl3aGlsZSAoY3VyICE9IE5VTEwpIHsKCSAgICBpZiAoKCF4bWxTdHJjbXAoY3VyLSZndDtuYW1lLCAoY29uc3QgeG1sQ2hhciAqKSZxdW90O3JlZmVyZW5jZSZxdW90OykpKSB7Cgk8YSBuYW1lPSJnZXRhdHRyaWJ1dGV2YWx1ZSI+PC9hPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvMS5wbmciIGFsdD0iMSIgYm9yZGVyPSIwIj4gcHJpbnRmKCZxdW90O3VyaTogJXNcbiZxdW90OywgeG1sR2V0UHJvcChjdXIsICZxdW90O3VyaSZxdW90OykpOwoJCSAgICB9CgkgICAgY3VyID0gY3VyLSZndDtuZXh0OwoJfQogICAgcmV0dXJuOwp9CiAgICAgIDwvcHJlPgogICAgCiAgICAgIDxkaXYgY2xhc3M9ImNhbGxvdXRsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJDYWxsb3V0IGxpc3QiPjx0cj48dGQgd2lkdGg9IjUlIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxhIGhyZWY9IiNnZXRhdHRyaWJ1dGV2YWx1ZSI+PGltZyBzcmM9ImltYWdlcy9jYWxsb3V0cy8xLnBuZyIgYWx0PSIxIiBib3JkZXI9IjAiPjwvYT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48cD4KCSAgICBUaGUga2V5IGZ1bmN0aW9uIGlzIDx0dD48YSBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvaHRtbC9saWJ4bWwtdHJlZS5odG1sI1hNTEdFVFBST1AiIHRhcmdldD0iX3RvcCI+eG1sR2V0UHJvcDwvYT48L3R0Piwgd2hpY2ggcmV0dXJucyBhbgogICAgICA8dHQ+eG1sQ2hhcjwvdHQ+IGNvbnRhaW5pbmcgdGhlIGF0dHJpYnV0ZSdzIHZhbHVlLiBJbiB0aGlzIGNhc2UsCgkJCQkJICAgd2UganVzdCBwcmludCBpdCBvdXQuCiAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij48aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz48cD4KCSAgSWYgeW91IGFyZSB1c2luZyBhIERURCB0aGF0IGRlY2xhcmVzIGEgZml4ZWQgb3IKCSAgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHJpZXZlIGl0LgoJPC9wPjwvZGl2PgoJICA8L3A+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CiAgICAgCiAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ibmF2Zm9vdGVyIj48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGZvb3RlciI+PHRyPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCI+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJhcjAxczA2Lmh0bWwiPlByZXY8L2E+oDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCI+VXA8L2E+PC90ZD48dGQgd2lkdGg9IjQwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJhcGEuaHRtbCI+TmV4dDwvYT48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPldyaXRpbmcgQXR0cmlidXRloDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj6gQS4gU2FtcGxlIERvY3VtZW50PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+PC9ib2R5PjwvaHRtbD4K