ZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZSBiL2RvYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2FhYmRjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL01ha2VmaWxlCkBAIC0wLDAgKzEsMjAgQEAKK1BBUEVSID0gYTQKK01LSE9XVE8gPSBweXRob24gdG9vbHMvbWtob3d0byAtLSQoUEFQRVIpCisKK2RlZmF1bHQ6IGh0bWwKKworYWxsOiBwcyBodG1sIHRleHQgZHZpCisKK2R2aSBwcyB0ZXh0OiBweU9wZW5TU0wudGV4CisJJChNS0hPV1RPKSAtLSRAICReCisKK2h0bWw6IHB5T3BlblNTTC50ZXgKKwkkKE1LSE9XVE8pIC0taHRtbCAtLWljb25zZXJ2ZXIgLiAkXgorCS1ybSAtcmYgaHRtbAorCW12IHB5T3BlblNTTCBodG1sCisKK2NsZWFuOgorCXJtIC1yZiBodG1sIHB5T3BlblNTTC5kdmkgcHlPcGVuU1NMLnBzIHB5T3BlblNTTC50eHQgXAorCSAgICBweU9wZW5TU0wubDJoIHB5T3BlblNTTC5ob3cKKworLlBIT05ZOiBkZWZhdWx0IGFsbCBodG1sIGR2aSBwcyB0ZXh0IGNsZWFuCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9hYm91dC5odG1sIGIvZG9jL2h0bWwvYWJvdXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGE1NWNlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvYWJvdXQuaHRtbApAQCAtMCwwICsxLDEwMyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+QWJvdXQgdGhpcyBkb2N1bWVudCAuLi48L3RpdGxlPgorPE1FVEEgTkFNRT0iZGVzY3JpcHRpb24iIENPTlRFTlQ9IkFib3V0IHRoaXMgZG9jdW1lbnQgLi4uIj4KKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJweU9wZW5TU0wiPgorPE1FVEEgTkFNRT0icmVzb3VyY2UtdHlwZSIgQ09OVEVOVD0iZG9jdW1lbnQiPgorPE1FVEEgTkFNRT0iZGlzdHJpYnV0aW9uIiBDT05URU5UPSJnbG9iYWwiPgorPGxpbmsgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSJweU9wZW5TU0wuY3NzIj4KKzxMSU5LIFJFTD0icHJldmlvdXMiIGhyZWY9ImludGVybmFscy5odG1sIj4KKzxMSU5LIFJFTD0idXAiIEhSRUY9InB5T3BlblNTTC5odG1sIj4KKzwvaGVhZD4KKzxib2R5PgorPERJViBDTEFTUz0ibmF2aWdhdGlvbiI+Cis8dGFibGUgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMiI+Cis8dHI+Cis8dGQ+PEEgaHJlZj0ic29ja2V0LW1ldGhvZHMuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIEhSRUY9InB5T3BlblNTTC5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJzb2NrZXQtbWV0aG9kcy5odG1sIj40LjMgQWNlc3NpbmcgU29ja2V0IE1ldGhvZHM8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIEhSRUY9InB5T3BlblNTTC5odG1sIj5QeXRob24gT3BlblNTTCBNYW51YWw8L0E+Cis8YnI+PGhyPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKworPEgxPjxBIE5BTUU9IlNFQ1RJT04wMDA2MDAwMDAwMDAwMDAwMDAwMDAiPgorQWJvdXQgdGhpcyBkb2N1bWVudCAuLi48L0E+Cis8L0gxPjxzdHJvbmc+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC9zdHJvbmc+Cis8cD4gVGhpcyBkb2N1bWVudCB3YXMgZ2VuZXJhdGVkIHVzaW5nIHRoZSA8YQorICAgIGhyZWY9Imh0dHA6Ly9zYWZ0c2Fjay5mcy51bmktYmF5cmV1dGguZGUvfmxhdGV4Mmh0LyI+CisgICAgPHN0cm9uZz5MYVRlWDwvc3Ryb25nPjI8dHQ+SFRNTDwvdHQ+PC9hPiB0cmFuc2xhdG9yLgorPC9wPgorCis8cD4gPGEKKyAgICBocmVmPSJodHRwOi8vc2FmdHNhY2suZnMudW5pLWJheXJldXRoLmRlL35sYXRleDJodC8iPgorICAgIDxzdHJvbmc+TGFUZVg8L3N0cm9uZz4yPHR0PkhUTUw8L3R0PjwvYT4gaXMgQ29weXJpZ2h0ICZjb3B5OworICAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCA8YQorICAgIGhyZWY9Imh0dHA6Ly9jYmwubGVlZHMuYWMudWsvbmlrb3MvcGVyc29uYWwuaHRtbCI+Tmlrb3MKKyAgICBEcmFrb3M8L2E+LCBDb21wdXRlciBCYXNlZCBMZWFybmluZyBVbml0LCBVbml2ZXJzaXR5IG9mCisgIExlZWRzLCBhbmQgQ29weXJpZ2h0ICZjb3B5OyAxOTk3LCAxOTk4LCA8YQorICAgIGhyZWY9Imh0dHA6Ly93d3cubWF0aHMubXEuZWR1LmF1L35yb3NzLyI+Um9zcworICAgIE1vb3JlPC9hPiwgTWF0aGVtYXRpY3MgRGVwYXJ0bWVudCwgTWFjcXVhcmllIFVuaXZlcnNpdHksCisgIFN5ZG5leS4KKzwvcD4KKworPHA+IFRoZSBhcHBsaWNhdGlvbiBvZiA8YQorICAgIGhyZWY9Imh0dHA6Ly9zYWZ0c2Fjay5mcy51bmktYmF5cmV1dGguZGUvfmxhdGV4Mmh0LyI+CisgICAgPHN0cm9uZz5MYVRlWDwvc3Ryb25nPjI8dHQ+SFRNTDwvdHQ+PC9hPiB0byB0aGUgUHl0aG9uCisgIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gaGVhdmlseSB0YWlsb3JlZCBieSBGcmVkIEwuIERyYWtlLAorICBKci4gIE9yaWdpbmFsIG5hdmlnYXRpb24gaWNvbnMgd2VyZSBjb250cmlidXRlZCBieSBDaHJpc3RvcGhlcgorICBQZXRyaWxsaS4KKzwvcD4KKworPERJViBDTEFTUz0ibmF2aWdhdGlvbiI+Cis8cD48aHI+Cis8dGFibGUgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMiI+Cis8dHI+Cis8dGQ+PEEgaHJlZj0ic29ja2V0LW1ldGhvZHMuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIEhSRUY9InB5T3BlblNTTC5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJzb2NrZXQtbWV0aG9kcy5odG1sIj40LjMgQWNlc3NpbmcgU29ja2V0IE1ldGhvZHM8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIEhSRUY9InB5T3BlblNTTC5odG1sIj5QeXRob24gT3BlblNTTCBNYW51YWw8L0E+Cis8aHI+Cis8c3BhbiBjbGFzcz0icmVsZWFzZS1pbmZvIj5SZWxlYXNlIDAuNi48L3NwYW4+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9ibGFuay5naWYgYi9kb2MvaHRtbC9ibGFuay5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUzMWY0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2JsYW5rLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9idWlsZGluZy11bml4Lmh0bWwgYi9kb2MvaHRtbC9idWlsZGluZy11bml4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1NWM1NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2J1aWxkaW5nLXVuaXguaHRtbApAQCAtMCwwICsxLDEyNSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+Mi4xIEJ1aWxkaW5nIHRoZSBNb2R1bGUgb24gYSBVbml4IFN5c3RlbSA8L3RpdGxlPgorPE1FVEEgTkFNRT0iZGVzY3JpcHRpb24iIENPTlRFTlQ9IjIuMSBCdWlsZGluZyB0aGUgTW9kdWxlIG9uIGEgVW5peCBTeXN0ZW0gIj4KKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJweU9wZW5TU0wiPgorPE1FVEEgTkFNRT0icmVzb3VyY2UtdHlwZSIgQ09OVEVOVD0iZG9jdW1lbnQiPgorPE1FVEEgTkFNRT0iZGlzdHJpYnV0aW9uIiBDT05URU5UPSJnbG9iYWwiPgorPGxpbmsgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSJweU9wZW5TU0wuY3NzIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0iYnVpbGRpbmctd2luZG93cy5odG1sIj4KKzxMSU5LIFJFTD0icHJldmlvdXMiIGhyZWY9ImJ1aWxkaW5nLmh0bWwiPgorPExJTksgUkVMPSJ1cCIgaHJlZj0iYnVpbGRpbmcuaHRtbCI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9ImJ1aWxkaW5nLXdpbmRvd3MuaHRtbCI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9ImJ1aWxkaW5nLmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJidWlsZGluZy5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJidWlsZGluZy13aW5kb3dzLmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJidWlsZGluZy5odG1sIj4yIEJ1aWxkaW5nIGFuZCBJbnN0YWxsaW5nPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJidWlsZGluZy5odG1sIj4yIEJ1aWxkaW5nIGFuZCBJbnN0YWxsaW5nPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImJ1aWxkaW5nLXdpbmRvd3MuaHRtbCI+Mi4yIEJ1aWxkaW5nIHRoZSBNb2R1bGU8L0E+Cis8YnI+PGhyPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKworPEgyPjxBIE5BTUU9IlNFQ1RJT04wMDAzMTAwMDAwMDAwMDAwMDAwMDAiPiZuYnNwOzwvQT4KKzxCUj4KKzIuMSBCdWlsZGluZyB0aGUgTW9kdWxlIG9uIGEgVW5peCBTeXN0ZW0gCis8L0gyPgorCis8UD4KK3B5T3BlblNTTCB1c2VzIGRpc3R1dGlscywgc28gdGhlcmUgcmVhbGx5IHNob3VsZG4ndCBiZSBhbnkgcHJvYmxlbXMuIFRvIGJ1aWxkCit0aGUgbGlicmFyeToKKzxkbD48ZGQ+PHByZSBjbGFzcz0idmVyYmF0aW0iPgorcHl0aG9uIHNldHVwLnB5IGJ1aWxkCis8L3ByZT48L2RsPgorCis8UD4KK0lmIHlvdXIgT3BlblNTTCBoZWFkZXIgZmlsZXMgYXJlbid0IGluIDxjb2RlPi91c3IvaW5jbHVkZTwvY29kZT4sIHlvdSBtYXkgbmVlZCB0bworc3VwcGx5IHRoZSA8Y29kZT4tSTwvY29kZT4gZmxhZyB0byBsZXQgdGhlIHNldHVwIHNjcmlwdCBrbm93IHdoZXJlIHRvIGxvb2suIFRoZSBzYW1lCitnb2VzIGZvciB0aGUgbGlicmFyaWVzIG9mIGNvdXJzZSwgdXNlIHRoZSA8Y29kZT4tTDwvY29kZT4gZmxhZy4gTm90ZSB0aGF0Cis8Y29kZT5idWlsZDwvY29kZT4gd29uJ3QgYWNjZXB0IHRoZXNlIGZsYWdzLCBzbyB5b3UgaGF2ZSB0byBydW4gZmlyc3QKKzxjb2RlPmJ1aWxkX2V4dDwvY29kZT4gYW5kIHRoZW4gPGNvZGU+YnVpbGQ8L2NvZGU+ISBFeGFtcGxlOgorPGRsPjxkZD48cHJlIGNsYXNzPSJ2ZXJiYXRpbSI+CitweXRob24gc2V0dXAucHkgYnVpbGRfZXh0IC1JL3Vzci9sb2NhbC9zc2wvaW5jbHVkZSAtTC91c3IvbG9jYWwvc3NsL2xpYgorcHl0aG9uIHNldHVwLnB5IGJ1aWxkCis8L3ByZT48L2RsPgorCis8UD4KK05vdyB5b3Ugc2hvdWxkIGhhdmUgYSBkaXJlY3RvcnkgY2FsbGVkIDxjb2RlPk9wZW5TU0w8L2NvZGU+IHRoYXQgY29udGFpbnMgZS5nLgorPGNvZGU+U1NMLnNvPC9jb2RlPiBhbmQgPGNvZGU+X19pbml0X18ucHk8L2NvZGU+IHNvbWV3aGVyZSBpbiB0aGUgYnVpbGQgZGljcmVjdG9yeSwKK3NvIGp1c3Q6Cis8ZGw+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4KK3B5dGhvbiBzZXR1cC5weSBpbnN0YWxsCis8L3ByZT48L2RsPgorCis8UD4KK0lmIHlvdSwgZm9yIHNvbWUgYXJjYW5lIHJlYXNvbiwgZG9uJ3Qgd2FudCB0aGUgbW9kdWxlIHRvIGFwcGVhciBpbiB0aGUKKzxjb2RlPnNpdGUtcGFja2FnZXM8L2NvZGU+IGRpcmVjdG9yeSwgdXNlIHRoZSA8Y29kZT4tLXByZWZpeDwvY29kZT4gb3B0aW9uLgorCis8UD4KK1lvdSBjYW4sIG9mIGNvdXJzZSwgZG8KKzxkbD48ZGQ+PHByZSBjbGFzcz0idmVyYmF0aW0iPgorcHl0aG9uIHNldHVwLnB5IC0taGVscAorPC9wcmU+PC9kbD4KKworPFA+Cit0byBmaW5kIG91dCBtb3JlIGFib3V0IGhvdyB0byB1c2UgdGhlIHNjcmlwdC4KKworPFA+CisKKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHA+PGhyPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9ImJ1aWxkaW5nLmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJidWlsZGluZy5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJidWlsZGluZy13aW5kb3dzLmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJidWlsZGluZy5odG1sIj4yIEJ1aWxkaW5nIGFuZCBJbnN0YWxsaW5nPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJidWlsZGluZy5odG1sIj4yIEJ1aWxkaW5nIGFuZCBJbnN0YWxsaW5nPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImJ1aWxkaW5nLXdpbmRvd3MuaHRtbCI+Mi4yIEJ1aWxkaW5nIHRoZSBNb2R1bGU8L0E+Cis8aHI+Cis8c3BhbiBjbGFzcz0icmVsZWFzZS1pbmZvIj5SZWxlYXNlIDAuNi48L3NwYW4+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9idWlsZGluZy13aW5kb3dzLmh0bWwgYi9kb2MvaHRtbC9idWlsZGluZy13aW5kb3dzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4ZjgyNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2J1aWxkaW5nLXdpbmRvd3MuaHRtbApAQCAtMCwwICsxLDExNyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+Mi4yIEJ1aWxkaW5nIHRoZSBNb2R1bGUgb24gYSBXaW5kb3dzIFN5c3RlbSA8L3RpdGxlPgorPE1FVEEgTkFNRT0iZGVzY3JpcHRpb24iIENPTlRFTlQ9IjIuMiBCdWlsZGluZyB0aGUgTW9kdWxlIG9uIGEgV2luZG93cyBTeXN0ZW0gIj4KKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJweU9wZW5TU0wiPgorPE1FVEEgTkFNRT0icmVzb3VyY2UtdHlwZSIgQ09OVEVOVD0iZG9jdW1lbnQiPgorPE1FVEEgTkFNRT0iZGlzdHJpYnV0aW9uIiBDT05URU5UPSJnbG9iYWwiPgorPGxpbmsgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSJweU9wZW5TU0wuY3NzIj4KKzxMSU5LIFJFTD0icHJldmlvdXMiIGhyZWY9ImJ1aWxkaW5nLXVuaXguaHRtbCI+Cis8TElOSyBSRUw9InVwIiBocmVmPSJidWlsZGluZy5odG1sIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0ib3BlbnNzbC5odG1sIj4KKzwvaGVhZD4KKzxib2R5PgorPERJViBDTEFTUz0ibmF2aWdhdGlvbiI+Cis8dGFibGUgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMiI+Cis8dHI+Cis8dGQ+PEEgaHJlZj0iYnVpbGRpbmctdW5peC5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0iYnVpbGRpbmcuaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iYnVpbGRpbmctdW5peC5odG1sIj4yLjEgQnVpbGRpbmcgdGhlIE1vZHVsZTwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iYnVpbGRpbmcuaHRtbCI+MiBCdWlsZGluZyBhbmQgSW5zdGFsbGluZzwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLmh0bWwiPjMgT3BlblNTTCAgPC9BPgorPGJyPjxocj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzxIMj48QSBOQU1FPSJTRUNUSU9OMDAwMzIwMDAwMDAwMDAwMDAwMDAwIj4mbmJzcDs8L0E+Cis8QlI+CisyLjIgQnVpbGRpbmcgdGhlIE1vZHVsZSBvbiBhIFdpbmRvd3MgU3lzdGVtIAorPC9IMj4KKworPFA+CitCaWcgdGhhbmtzIHRvIEl0YW1hciBTaHR1bGwtVHJhdXJpbmcgYW5kIE9sZWcgT3Jsb3YgZm9yIHRoZWlyIGhlbHAgd2l0aAorV2luZG93cyBidWlsZCBpbnN0cnVjdGlvbnMuICBTYW1lIGFzIGZvciBVbml4IHN5c3RlbXMsIHdlIGhhdmUgdG8gc2VwYXJhdGUKK3RoZSA8Y29kZT5idWlsZF9leHQ8L2NvZGU+IGFuZCB0aGUgPGNvZGU+YnVpbGQ8L2NvZGU+LgorCis8UD4KK0J1aWxkaW5nIHRoZSBsaWJyYXJ5OgorCis8UD4KKzxkbD48ZGQ+PHByZSBjbGFzcz0idmVyYmF0aW0iPgorc2V0dXAucHkgYnVpbGRfZXh0IC1JIC4uLlxvcGVuc3NsXGluYzMyIC1MIC4uLlxvcGVuc3NsXG91dDMyZGxsCitzZXR1cC5weSBidWlsZAorPC9wcmU+PC9kbD4KKworPFA+CitXaGVyZSA8Y29kZT4uLi5cb3BlbnNzbDwvY29kZT4gaXMgb2YgY291cnNlIHRoZSBsb2NhdGlvbiBvZiB5b3VyIE9wZW5TU0wgaW5zdGFsbGF0aW9uLgorCis8UD4KK0luc3RhbGxhdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgVW5peCBzeXN0ZW1zOgorPGRsPjxkZD48cHJlIGNsYXNzPSJ2ZXJiYXRpbSI+CitzZXR1cC5weSBpbnN0YWxsCis8L3ByZT48L2RsPgorCis8UD4KK0FuZCBzaW1pbGFyaWx5LCB5b3UgY2FuIGRvCis8ZGw+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4KK3NldHVwLnB5IC0taGVscAorPC9wcmU+PC9kbD4KKworPFA+Cit0byBnZXQgbW9yZSBpbmZvcm1hdGlvbi4KKworPFA+CisKKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHA+PGhyPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9ImJ1aWxkaW5nLXVuaXguaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9ImJ1aWxkaW5nLmh0bWwiPjxpbWcgc3JjPSJ1cC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iVXAgT25lIExldmVsIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImJ1aWxkaW5nLXVuaXguaHRtbCI+Mi4xIEJ1aWxkaW5nIHRoZSBNb2R1bGU8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImJ1aWxkaW5nLmh0bWwiPjIgQnVpbGRpbmcgYW5kIEluc3RhbGxpbmc8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC5odG1sIj4zIE9wZW5TU0wgIDwvQT4KKzxocj4KKzxzcGFuIGNsYXNzPSJyZWxlYXNlLWluZm8iPlJlbGVhc2UgMC42Ljwvc3Bhbj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2J1aWxkaW5nLmh0bWwgYi9kb2MvaHRtbC9idWlsZGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MDgxN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9idWlsZGluZy5odG1sCkBAIC0wLDAgKzEsMTA1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT4yIEJ1aWxkaW5nIGFuZCBJbnN0YWxsaW5nIDwvdGl0bGU+Cis8TUVUQSBOQU1FPSJkZXNjcmlwdGlvbiIgQ09OVEVOVD0iMiBCdWlsZGluZyBhbmQgSW5zdGFsbGluZyAiPgorPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9InB5T3BlblNTTCI+Cis8TUVUQSBOQU1FPSJyZXNvdXJjZS10eXBlIiBDT05URU5UPSJkb2N1bWVudCI+Cis8TUVUQSBOQU1FPSJkaXN0cmlidXRpb24iIENPTlRFTlQ9Imdsb2JhbCI+Cis8bGluayByZWw9IlNUWUxFU0hFRVQiIGhyZWY9InB5T3BlblNTTC5jc3MiPgorPExJTksgUkVMPSJuZXh0IiBocmVmPSJvcGVuc3NsLmh0bWwiPgorPExJTksgUkVMPSJwcmV2aW91cyIgaHJlZj0iaW50cm8uaHRtbCI+Cis8TElOSyBSRUw9InVwIiBIUkVGPSJweU9wZW5TU0wuaHRtbCI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9ImJ1aWxkaW5nLXVuaXguaHRtbCI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9ImludHJvLmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBIUkVGPSJweU9wZW5TU0wuaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0iYnVpbGRpbmctdW5peC5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iaW50cm8uaHRtbCI+MSBJbnRyb2R1Y3Rpb248L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIEhSRUY9InB5T3BlblNTTC5odG1sIj5QeXRob24gT3BlblNTTCBNYW51YWw8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iYnVpbGRpbmctdW5peC5odG1sIj4yLjEgQnVpbGRpbmcgdGhlIE1vZHVsZTwvQT4KKzxicj48aHI+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorPEgxPjxBIE5BTUU9IlNFQ1RJT04wMDAzMDAwMDAwMDAwMDAwMDAwMDAiPiZuYnNwOzwvQT4KKzxCUj4KKzIgQnVpbGRpbmcgYW5kIEluc3RhbGxpbmcgCis8L0gxPgorCis8UD4KK1RoZXNlIGluc3RydWN0aW9ucyBjYW4gYWxzbyBiZSBmb3VuZCBpbiB0aGUgZmlsZSA8Y29kZT5JTlNUQUxMPC9jb2RlPi4KKworPFA+CitJIGhhdmUgdGVzdGVkIHRoaXMgb24gRGViaWFuIExpbnV4IHN5c3RlbXMgKHdvb2R5IGFuZCBzaWQpLCBTb2xhcmlzIDIuNiBhbmQKKzIuNy4gT3RoZXJzIGhhdmUgc3VjY2Vzc2Z1bGx5IGNvbXBpbGVkIGl0IG9uIFdpbmRvd3MgYW5kIE5ULgorCis8UD4KKworPHA+PGhyPgorCis8IS0tVGFibGUgb2YgQ2hpbGQtTGlua3MtLT4KKzxBIE5BTUU9IkNISUxEX0xJTktTIj48U1RST05HPlN1YnNlY3Rpb25zPC9TVFJPTkc+PC9BPgorCis8VUwgQ0xBU1M9IkNoaWxkTGlua3MiPgorPExJPjxBIE5BTUU9InRleDJodG1sNzkiCisgIGhyZWY9ImJ1aWxkaW5nLXVuaXguaHRtbCI+Mi4xIEJ1aWxkaW5nIHRoZSBNb2R1bGUgb24gYSBVbml4IFN5c3RlbSA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWw4MCIKKyAgaHJlZj0iYnVpbGRpbmctd2luZG93cy5odG1sIj4yLjIgQnVpbGRpbmcgdGhlIE1vZHVsZSBvbiBhIFdpbmRvd3MgU3lzdGVtIDwvQT4KKzwvVUw+Cis8IS0tRW5kIG9mIFRhYmxlIG9mIENoaWxkLUxpbmtzLS0+CisKKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHA+PGhyPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9ImludHJvLmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBIUkVGPSJweU9wZW5TU0wuaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0iYnVpbGRpbmctdW5peC5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iaW50cm8uaHRtbCI+MSBJbnRyb2R1Y3Rpb248L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIEhSRUY9InB5T3BlblNTTC5odG1sIj5QeXRob24gT3BlblNTTCBNYW51YWw8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iYnVpbGRpbmctdW5peC5odG1sIj4yLjEgQnVpbGRpbmcgdGhlIE1vZHVsZTwvQT4KKzxocj4KKzxzcGFuIGNsYXNzPSJyZWxlYXNlLWluZm8iPlJlbGVhc2UgMC42Ljwvc3Bhbj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2NhbGxiYWNrcy5odG1sIGIvZG9jL2h0bWwvY2FsbGJhY2tzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzYmQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2NhbGxiYWNrcy5odG1sCkBAIC0wLDAgKzEsMTI3IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT40LjIgQ2FsbGJhY2tzIDwvdGl0bGU+Cis8TUVUQSBOQU1FPSJkZXNjcmlwdGlvbiIgQ09OVEVOVD0iNC4yIENhbGxiYWNrcyAiPgorPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9InB5T3BlblNTTCI+Cis8TUVUQSBOQU1FPSJyZXNvdXJjZS10eXBlIiBDT05URU5UPSJkb2N1bWVudCI+Cis8TUVUQSBOQU1FPSJkaXN0cmlidXRpb24iIENPTlRFTlQ9Imdsb2JhbCI+Cis8bGluayByZWw9IlNUWUxFU0hFRVQiIGhyZWY9InB5T3BlblNTTC5jc3MiPgorPExJTksgUkVMPSJuZXh0IiBocmVmPSJzb2NrZXQtbWV0aG9kcy5odG1sIj4KKzxMSU5LIFJFTD0icHJldmlvdXMiIGhyZWY9ImV4Y2VwdGlvbnMuaHRtbCI+Cis8TElOSyBSRUw9InVwIiBocmVmPSJpbnRlcm5hbHMuaHRtbCI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9InNvY2tldC1tZXRob2RzLmh0bWwiPgorPC9oZWFkPgorPGJvZHk+Cis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJleGNlcHRpb25zLmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJpbnRlcm5hbHMuaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ic29ja2V0LW1ldGhvZHMuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImV4Y2VwdGlvbnMuaHRtbCI+NC4xIEV4Y2VwdGlvbnM8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImludGVybmFscy5odG1sIj40IEludGVybmFsczwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJzb2NrZXQtbWV0aG9kcy5odG1sIj40LjMgQWNlc3NpbmcgU29ja2V0IE1ldGhvZHM8L0E+Cis8YnI+PGhyPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKworPEgyPjxBIE5BTUU9IlNFQ1RJT04wMDA1MjAwMDAwMDAwMDAwMDAwMDAiPiZuYnNwOzwvQT4KKzxCUj4KKzQuMiBDYWxsYmFja3MgCis8L0gyPgorPFA+Cis8RU0+PEVNPjxFTT5UaGVyZSBhcmUgYSBudW1iZXIgb2YgcHJvYmxlbXMgd2l0aCBjYWxsYmFja3MuIEZpcnN0IG9mIGFsbCwgT3BlblNTTCBpcyB3cml0dGVuCithcyBhIEMgbGlicmFyeSwgaXQncyBub3QgbWVhbnQgdG8gaGF2ZSBQeXRob24gY2FsbGJhY2tzLCBzbyBhIHdheSBhcm91bmQgdGhhdAoraXMgbmVlZGVkLiBBbm90aGVyIHByb2JsZW0gaXMgdGhyZWFkIHN1cHBvcnQuIEEgbG90IG9mIHRoZSBPcGVuU1NMIEkvTworZnVuY3Rpb25zIGNhbiBibG9jayBpZiB0aGUgc29ja2V0IGlzIGluIGJsb2NraW5nIG1vZGUsIGFuZCB0aGVuIHlvdSB3YW50IG90aGVyCitQeXRob24gdGhyZWFkcyB0byBiZSBhYmxlIHRvIGRvIG90aGVyIHRoaW5ncy4gVGhlIHJlYWwgdHJvdWJsZSBpcyBpZiB5b3UndmUKK3JlbGVhc2VkIHRoZSB0aHJlYWQgbG9jayB0byBkbyBhIHBvdGVudGlhbGx5IGJsb2NraW5nIG9wZXJhdGlvbiwgYW5kIHRoZQorb3BlcmF0aW9uIGNhbGxzIGEgY2FsbGJhY2suIFRoZW4gd2UgbXVzdCB0YWtlIHRoZSB0aHJlYWQgbG9jayBiYWNrPEEgTkFNRT0idGV4Mmh0bWw2IgorICBIUkVGPSIjZm9vdDkxNiI+PFNVUD41PC9TVVA+PC9BPi4KKzwvRU0+PC9FTT48L0VNPgorPFA+Cis8RU0+PEVNPjxFTT5UaGVyZSBhcmUgdHdvIHNvbHV0aW9ucyB0byB0aGUgZmlyc3QgcHJvYmxlbSwgYm90aCBvZiB3aGljaCBhcmUgbmVjZXNzYXJ5LiBUaGUKK2ZpcnN0IHNvbHV0aW9uIHRvIHVzZSBpcyBpZiB0aGUgQyBjYWxsYmFjayBhbGxvd3MgJyd1c2VyZGF0YScnIHRvIGJlIHBhc3NlZCB0bworaXQgKGFuIGFyYml0cmFyeSBwb2ludGVyIG5vcm1hbGx5KS4gVGhpcyBpcyBncmVhdCEgV2UgY2FuIHNldCBvdXIgUHl0aG9uCitmdW5jdGlvbiBvYmplY3QgYXMgdGhlIHJlYWwgdXNlcmRhdGEgYW5kIGVtdWxhdGUgdXNlcmRhdGEgZm9yIHRoZSBQeXRob24KK2Z1bmN0aW9uIGluIGFub3RoZXIgd2F5LiBUaGUgb3RoZXIgc29sdXRpb24gY2FuIGJlIHVzZWQgaWYgYW4gb2JqZWN0IHdpdGggYW4KKycnYXBwX2RhdGEnJyBzeXN0ZW0gYWx3YXlzIGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suIEZvciBleGFtcGxlLCB0aGUgU1NMCitvYmplY3QgaW4gT3BlblNTTCBoYXMgYXBwX2RhdGEgZnVuY3Rpb25zIGFuZCBpbiBlLmcuIHRoZSB2ZXJpZmljYXRpb24KK2NhbGxiYWNrcywgeW91IGNhbiByZXRyaWV2ZSB0aGUgcmVsYXRlZCBTU0wgb2JqZWN0LiBXaGF0IHdlIGRvIGlzIHRvIHNldCBvdXIKK3dyYXBwZXIgPHR0IGNsYXNzPSJjbGFzcyI+Q29ubmVjdGlvbjwvdHQ+IG9iamVjdCBhcyBhcHBfZGF0YSBmb3IgdGhlIFNTTCBvYmplY3QsIGFuZCB3ZSBjYW4KK2Vhc2lseSBmaW5kIHRoZSBQeXRob24gY2FsbGJhY2suCis8L0VNPjwvRU0+PC9FTT4KKzxQPgorPEVNPjxFTT48RU0+VGhlIG90aGVyIHByb2JsZW0gaXMgYWxzbyBwYXJ0aWFsbHkgc29sdmVkIGJ5IGFwcF9kYXRhLiBTaW5jZSB3ZSdyZSBhc3NvY2lhdGluZworb3VyIHdyYXBwZXIgb2JqZWN0cyB3aXRoIHRoZSAnJ3JlYWwnJyBvYmplY3RzLCB3ZSBjYW4gZWFzaWx5IGFjY2VzcyBkYXRhIGZyb20KK3RoZSA8dHQgY2xhc3M9ImNsYXNzIj5Db25uZWN0aW9uPC90dD4gb2JqZWN0LiBUaGUgc29sdXRpb24gdGhlbiBpcyB0byBzaW1wbHkgaW5jbHVkZSBhCis8dHQgY2xhc3M9ImN0eXBlIj5QeVRocmVhZFN0YXRlPC90dD4gdmFyaWFibGUgaW4gdGhlIDx0dCBjbGFzcz0iY2xhc3MiPkNvbm5lY3Rpb248L3R0PiBkZWNsYXJhdGlvbiwgYW5kIHdyaXRlCittYWNyb3Mgc2ltaWxhciB0byA8dHQgY2xhc3M9ImNmdW5jdGlvbiI+UHlfQkVHSU5fQUxMT1dfVEhSRUFEUzwvdHQ+IGFuZAorPHR0IGNsYXNzPSJjZnVuY3Rpb24iPlB5X0VORF9BTExPV19USFJFQURTPC90dD4gdGhhdCBhbGxvd3Mgc3BlY2lmeWluZyBvZiB0aGUKKzx0dCBjbGFzcz0iY3R5cGUiPlB5VGhyZWFkU3RhdGU8L3R0PiB2YXJpYWJsZSB0byB1c2UuIE5vdyB3ZSBjYW4gc2ltcGx5ICcnYmVnaW4gYWxsb3cKK3RocmVhZHMnJyBiZWZvcmUgYSBwb3RlbnRpYWxseSBibG9ja2luZyBvcGVyYXRpb24sIGFuZCAnJ2VuZCBhbGxvdyB0aHJlYWRzJycKK2JlZm9yZSBjYWxsaW5nIGEgY2FsbGJhY2suCis8L0VNPjwvRU0+PC9FTT4KKzxQPgorPEJSPjxIUj48SDQ+Rm9vdG5vdGVzPC9IND4KKzxETD4KKzxEVD48QSBOQU1FPSJmb290OTE2Ij4uLi4gYmFjazwvQT48QQorIGhyZWY9ImNhbGxiYWNrcy5odG1sI3RleDJodG1sNiI+PFNVUD41PC9TVVA+PC9BPjwvRFQ+Cis8REQ+SSdtCitub3Qgc3VyZSB3aHkgdGhpcyBpcyBuZWNlc3NhcnksIGJ1dCBvdGhlcndpc2UgSSBnZXQgYSBzZWdtZW50YXRpb24gdmlvbGF0aW9uIG9uCis8dHQgY2xhc3M9ImNmdW5jdGlvbiI+UHlFdmFsX0NhbGxPYmplY3Q8L3R0PgorCis8L0REPgorPC9ETD4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHA+PGhyPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9ImV4Y2VwdGlvbnMuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9ImludGVybmFscy5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJzb2NrZXQtbWV0aG9kcy5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iZXhjZXB0aW9ucy5odG1sIj40LjEgRXhjZXB0aW9uczwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPjQgSW50ZXJuYWxzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9InNvY2tldC1tZXRob2RzLmh0bWwiPjQuMyBBY2Vzc2luZyBTb2NrZXQgTWV0aG9kczwvQT4KKzxocj4KKzxzcGFuIGNsYXNzPSJyZWxlYXNlLWluZm8iPlJlbGVhc2UgMC42Ljwvc3Bhbj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2NvbnRlbnRzLmdpZiBiL2RvYy9odG1sL2NvbnRlbnRzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDI5OWM0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvY29udGVudHMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2NvbnRlbnRzLmh0bWwgYi9kb2MvaHRtbC9jb250ZW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjllNDkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9jb250ZW50cy5odG1sCkBAIC0wLDAgKzEsMTE0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5Db250ZW50czwvdGl0bGU+Cis8TUVUQSBOQU1FPSJkZXNjcmlwdGlvbiIgQ09OVEVOVD0iQ29udGVudHMiPgorPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9InB5T3BlblNTTCI+Cis8TUVUQSBOQU1FPSJyZXNvdXJjZS10eXBlIiBDT05URU5UPSJkb2N1bWVudCI+Cis8TUVUQSBOQU1FPSJkaXN0cmlidXRpb24iIENPTlRFTlQ9Imdsb2JhbCI+Cis8bGluayByZWw9IlNUWUxFU0hFRVQiIGhyZWY9InB5T3BlblNTTC5jc3MiPgorPExJTksgUkVMPSJuZXh0IiBocmVmPSJpbnRyby5odG1sIj4KKzxMSU5LIFJFTD0icHJldmlvdXMiIEhSRUY9InB5T3BlblNTTC5odG1sIj4KKzxMSU5LIFJFTD0idXAiIEhSRUY9InB5T3BlblNTTC5odG1sIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0iaW50cm8uaHRtbCI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIEhSRUY9InB5T3BlblNTTC5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgSFJFRj0icHlPcGVuU1NMLmh0bWwiPjxpbWcgc3JjPSJ1cC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iVXAgT25lIExldmVsIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9ImludHJvLmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgSFJFRj0icHlPcGVuU1NMLmh0bWwiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgSFJFRj0icHlPcGVuU1NMLmh0bWwiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJpbnRyby5odG1sIj4xIEludHJvZHVjdGlvbjwvQT4KKzxicj48aHI+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorPEJSPgorPEJSPjxIMj48QSBOQU1FPSJTRUNUSU9OMDAwMTAwMDAwMDAwMDAwMDAwMDAwIj4KK0NvbnRlbnRzPC9BPgorPC9IMj4KKzwhLS1UYWJsZSBvZiBDb250ZW50cy0tPgorCis8VUwgQ0xBU1M9IlRvZkMiPgorPExJPjxBIE5BTUU9InRleDJodG1sNDUiCisgIGhyZWY9ImludHJvLmh0bWwiPjEgSW50cm9kdWN0aW9uIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDQ2IgorICBocmVmPSJidWlsZGluZy5odG1sIj4yIEJ1aWxkaW5nIGFuZCBJbnN0YWxsaW5nIDwvQT4KKzxVTD4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDQ3IgorICBocmVmPSJidWlsZGluZy11bml4Lmh0bWwiPjIuMSBCdWlsZGluZyB0aGUgTW9kdWxlIG9uIGEgVW5peCBTeXN0ZW0gPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sNDgiCisgIGhyZWY9ImJ1aWxkaW5nLXdpbmRvd3MuaHRtbCI+Mi4yIEJ1aWxkaW5nIHRoZSBNb2R1bGUgb24gYSBXaW5kb3dzIFN5c3RlbSA8L0E+Cis8L1VMPgorPEJSPgorPExJPjxBIE5BTUU9InRleDJodG1sNDkiCisgIGhyZWY9Im9wZW5zc2wuaHRtbCI+MyBPcGVuU1NMIC0tIFB5dGhvbiBpbnRlcmZhY2UgdG8gT3BlblNTTCA8L0E+Cis8VUw+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWw1MCIKKyAgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+My4xIGNyeXB0byAtLSBHZW5lcmljIGNyeXB0b2dyYXBoaWMgbW9kdWxlIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDUxIgorICBocmVmPSJvcGVuc3NsLXJhbmQuaHRtbCI+My4yIHJhbmQgLS0gQW4gaW50ZXJmYWNlIHRvIHRoZSBPcGVuU1NMIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWw1MiIKKyAgaHJlZj0ib3BlbnNzbC1zc2wuaHRtbCI+My4zIFNTTCAtLSBBbiBpbnRlcmZhY2UgdG8gdGhlIFNTTC1zcGVjaWZpYyBwYXJ0cyBvZiBPcGVuU1NMIDwvQT4KKzwvVUw+Cis8QlI+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWw1MyIKKyAgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPjQgSW50ZXJuYWxzIDwvQT4KKzxVTD4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDU0IgorICBocmVmPSJleGNlcHRpb25zLmh0bWwiPjQuMSBFeGNlcHRpb25zIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDU1IgorICBocmVmPSJjYWxsYmFja3MuaHRtbCI+NC4yIENhbGxiYWNrcyA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWw1NiIKKyAgaHJlZj0ic29ja2V0LW1ldGhvZHMuaHRtbCI+NC4zIEFjZXNzaW5nIFNvY2tldCBNZXRob2RzIDwvQT4KKzwvVUw+PC9VTD4KKzwhLS1FbmQgb2YgVGFibGUgb2YgQ29udGVudHMtLT4KKzxQPgorCis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzxwPjxocj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBIUkVGPSJweU9wZW5TU0wuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIEhSRUY9InB5T3BlblNTTC5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJpbnRyby5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIEhSRUY9InB5T3BlblNTTC5odG1sIj5QeXRob24gT3BlblNTTCBNYW51YWw8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIEhSRUY9InB5T3BlblNTTC5odG1sIj5QeXRob24gT3BlblNTTCBNYW51YWw8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iaW50cm8uaHRtbCI+MSBJbnRyb2R1Y3Rpb248L0E+Cis8aHI+Cis8c3BhbiBjbGFzcz0icmVsZWFzZS1pbmZvIj5SZWxlYXNlIDAuNi48L3NwYW4+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9leGNlcHRpb25zLmh0bWwgYi9kb2MvaHRtbC9leGNlcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM4MzQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2V4Y2VwdGlvbnMuaHRtbApAQCAtMCwwICsxLDk2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT40LjEgRXhjZXB0aW9ucyA8L3RpdGxlPgorPE1FVEEgTkFNRT0iZGVzY3JpcHRpb24iIENPTlRFTlQ9IjQuMSBFeGNlcHRpb25zICI+Cis8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0icHlPcGVuU1NMIj4KKzxNRVRBIE5BTUU9InJlc291cmNlLXR5cGUiIENPTlRFTlQ9ImRvY3VtZW50Ij4KKzxNRVRBIE5BTUU9ImRpc3RyaWJ1dGlvbiIgQ09OVEVOVD0iZ2xvYmFsIj4KKzxsaW5rIHJlbD0iU1RZTEVTSEVFVCIgaHJlZj0icHlPcGVuU1NMLmNzcyI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9ImNhbGxiYWNrcy5odG1sIj4KKzxMSU5LIFJFTD0icHJldmlvdXMiIGhyZWY9ImludGVybmFscy5odG1sIj4KKzxMSU5LIFJFTD0idXAiIGhyZWY9ImludGVybmFscy5odG1sIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0iY2FsbGJhY2tzLmh0bWwiPgorPC9oZWFkPgorPGJvZHk+Cis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJpbnRlcm5hbHMuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9ImludGVybmFscy5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJjYWxsYmFja3MuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImludGVybmFscy5odG1sIj40IEludGVybmFsczwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPjQgSW50ZXJuYWxzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImNhbGxiYWNrcy5odG1sIj40LjIgQ2FsbGJhY2tzPC9BPgorPGJyPjxocj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzxIMj48QSBOQU1FPSJTRUNUSU9OMDAwNTEwMDAwMDAwMDAwMDAwMDAwIj4mbmJzcDs8L0E+Cis8QlI+Cis0LjEgRXhjZXB0aW9ucyAKKzwvSDI+Cis8UD4KKzxFTT48RU0+PEVNPldlIHJlYWxpemVkIGVhcmx5IHRoYXQgbW9zdCBvZiB0aGUgZXhjZXB0aW9ucyB3b3VsZCBiZSByYWlzZWQgYnkgdGhlIEkvTworZnVuY3Rpb25zIG9mIE9wZW5TU0wsIHNvIGl0IGZlbHQgbmF0dXJhbCB0byBtaW1pYyBPcGVuU1NMJ3MgZXJyb3IgY29kZSBzeXN0ZW0sCit0cmFuc2xhdGluZyB0aGVtIGludG8gUHl0aG9uIGV4Y2VwdGlvbnMuIFRoaXMgbmF0dXJhbGx5IGdpdmVzIHVzIHRoZSBleGNlcHRpb25zCis8dHQgY2xhc3M9ImV4Y2VwdGlvbiI+U1NMLlplcm9SZXR1cm5FcnJvcjwvdHQ+LCA8dHQgY2xhc3M9ImV4Y2VwdGlvbiI+U1NMLldhbnRSZWFkRXJyb3I8L3R0PiwKKzx0dCBjbGFzcz0iZXhjZXB0aW9uIj5TU0wuV2FudFdyaXRlRXJyb3I8L3R0PiwgPHR0IGNsYXNzPSJleGNlcHRpb24iPlNTTC5XYW50WDUwOUxvb2t1cEVycm9yPC90dD4gYW5kCis8dHQgY2xhc3M9ImV4Y2VwdGlvbiI+U1NMLlN5c0NhbGxFcnJvcjwvdHQ+LgorPC9FTT48L0VNPjwvRU0+Cis8UD4KKzxFTT48RU0+PEVNPkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMsIHNlZSBzZWN0aW9uIDxBIGhyZWY9Im9wZW5zc2wtc3NsLmh0bWwjb3BlbnNzbC1zc2wiPjMuMzwvQT4uCis8L0VNPjwvRU0+PC9FTT4KKzxQPgorCis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzxwPjxocj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJpbnRlcm5hbHMuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9ImludGVybmFscy5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJjYWxsYmFja3MuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImludGVybmFscy5odG1sIj40IEludGVybmFsczwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPjQgSW50ZXJuYWxzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImNhbGxiYWNrcy5odG1sIj40LjIgQ2FsbGJhY2tzPC9BPgorPGhyPgorPHNwYW4gY2xhc3M9InJlbGVhc2UtaW5mbyI+UmVsZWFzZSAwLjYuPC9zcGFuPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKworPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvaW5kZXguZ2lmIGIvZG9jL2h0bWwvaW5kZXguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZWVjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9pbmRleC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvaW5kZXguaHRtbCBiL2RvYy9odG1sL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjMjBlZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwxNjcgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGl0bGU+Cis8TUVUQSBOQU1FPSJkZXNjcmlwdGlvbiIgQ09OVEVOVD0iUHl0aG9uIE9wZW5TU0wgTWFudWFsIj4KKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJweU9wZW5TU0wiPgorPE1FVEEgTkFNRT0icmVzb3VyY2UtdHlwZSIgQ09OVEVOVD0iZG9jdW1lbnQiPgorPE1FVEEgTkFNRT0iZGlzdHJpYnV0aW9uIiBDT05URU5UPSJnbG9iYWwiPgorPGxpbmsgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSJweU9wZW5TU0wuY3NzIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0iY29udGVudHMuaHRtbCI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iY29udGVudHMuaHRtbCI+Q29udGVudHM8L0E+Cis8YnI+PGhyPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKzxQPgorCis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorPGNlbnRlcj4KKzxoMT5QeXRob24gT3BlblNTTCBNYW51YWw8L2gxPgorPHA+PGI+PGZvbnQgc2l6ZT0nKzInPk1hcnRpbiBTavZncmVuPC9mb250PjwvYj48L3A+Cis8cD48c3BhbiBjbGFzcz0iZW1haWwiPm1hcnRpbkBzdHJha3QuY29tPC9zcGFuPjwvcD4KKzxwPgorPC9jZW50ZXI+Cis8L2Rpdj4KKworPFA+CisKKzxIMz5BYnN0cmFjdDo8L0gzPgorPERJViBDTEFTUz0iQUJTVFJBQ1QiPgorCitUaGlzIG1vZHVsZSBpcyBhIHJhdGhlciB0aGluIHdyYXBwZXIgYXJvdW5kIChhIHN1YnNldCBvZikgdGhlIE9wZW5TU0wgbGlicmFyeS4KK1dpdGggdGhpbiB3cmFwcGVyIEkgbWVhbiB0aGF0IGEgbG90IG9mIHRoZSBvYmplY3QgbWV0aG9kcyBkbyBub3RoaW5nIG1vcmUgdGhhbgorY2FsbGluZyBhIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gaW4gdGhlIE9wZW5TU0wgbGlicmFyeS4KKzwvRElWPgorPFA+CisKKzxQPgorCis8cD48aHI+CisKKzwhLS1UYWJsZSBvZiBDaGlsZC1MaW5rcy0tPgorCisKKzxVTCBDTEFTUz0iQ2hpbGRMaW5rcyI+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwxMCIKKyAgaHJlZj0iY29udGVudHMuaHRtbCI+Q29udGVudHM8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwxMSIKKyAgaHJlZj0iaW50cm8uaHRtbCI+MSBJbnRyb2R1Y3Rpb24gPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMTIiCisgIGhyZWY9ImJ1aWxkaW5nLmh0bWwiPjIgQnVpbGRpbmcgYW5kIEluc3RhbGxpbmcgPC9BPgorPFVMPgorPExJPjxBIE5BTUU9InRleDJodG1sMTMiCisgIGhyZWY9ImJ1aWxkaW5nLXVuaXguaHRtbCI+Mi4xIEJ1aWxkaW5nIHRoZSBNb2R1bGUgb24gYSBVbml4IFN5c3RlbSA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwxNCIKKyAgaHJlZj0iYnVpbGRpbmctd2luZG93cy5odG1sIj4yLjIgQnVpbGRpbmcgdGhlIE1vZHVsZSBvbiBhIFdpbmRvd3MgU3lzdGVtIDwvQT4KKzwvVUw+Cis8QlI+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwxNSIKKyAgaHJlZj0ib3BlbnNzbC5odG1sIj4zIDx0dCBjbGFzcz0ibW9kdWxlIj5PcGVuU1NMPC90dD4gLS0gUHl0aG9uIGludGVyZmFjZSB0byBPcGVuU1NMIDwvQT4KKzxVTD4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDE2IgorICBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4zLjEgPHR0IGNsYXNzPSJtb2R1bGUiPmNyeXB0bzwvdHQ+IC0tIEdlbmVyaWMgY3J5cHRvZ3JhcGhpYyBtb2R1bGUgPC9BPgorPFVMPgorPExJPjxBIE5BTUU9InRleDJodG1sMTciCisgIGhyZWY9Im9wZW5zc2wteDUwOS5odG1sIj4zLjEuMSBYNTA5IG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMTgiCisgIGhyZWY9Im9wZW5zc2wteDUwOW5hbWUuaHRtbCI+My4xLjIgWDUwOU5hbWUgb2JqZWN0cyA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwxOSIKKyAgaHJlZj0ib3BlbnNzbC14NTA5cmVxLmh0bWwiPjMuMS4zIFg1MDlSZXEgb2JqZWN0cyA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwyMCIKKyAgaHJlZj0ib3BlbnNzbC14NTA5c3RvcmUuaHRtbCI+My4xLjQgWDUwOVN0b3JlIG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMjEiCisgIGhyZWY9Im9wZW5zc2wtcGtleS5odG1sIj4zLjEuNSBQS2V5IG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMjIiCisgIGhyZWY9Im9wZW5zc2wtcGtjczcuaHRtbCI+My4xLjYgUEtDUzcgb2JqZWN0cyA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwyMyIKKyAgaHJlZj0ib3BlbnNzbC1wa2NzMTIuaHRtbCI+My4xLjcgUEtDUzEyIG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMjQiCisgIGhyZWY9Im9wZW5zc2wtNTA5ZXh0Lmh0bWwiPjMuMS44IFg1MDlFeHRlbnNpb24gb2JqZWN0cyA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwyNSIKKyAgaHJlZj0ib3BlbnNzbC1uZXRzY2FwZS1zcGtpLmh0bWwiPjMuMS45IE5ldHNjYXBlU1BLSSBvYmplY3RzIDwvQT4KKzwvVUw+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwyNiIKKyAgaHJlZj0ib3BlbnNzbC1yYW5kLmh0bWwiPjMuMiA8dHQgY2xhc3M9Im1vZHVsZSI+cmFuZDwvdHQ+IC0tIEFuIGludGVyZmFjZSB0byB0aGUgT3BlblNTTCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMjciCisgIGhyZWY9Im9wZW5zc2wtc3NsLmh0bWwiPjMuMyA8dHQgY2xhc3M9Im1vZHVsZSI+U1NMPC90dD4gLS0gQW4gaW50ZXJmYWNlIHRvIHRoZSBTU0wtc3BlY2lmaWMgcGFydHMgb2YgT3BlblNTTCA8L0E+Cis8VUw+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwyOCIKKyAgaHJlZj0ib3BlbnNzbC1jb250ZXh0Lmh0bWwiPjMuMy4xIENvbnRleHQgb2JqZWN0cyA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwyOSIKKyAgaHJlZj0ib3BlbnNzbC1jb25uZWN0aW9uLmh0bWwiPjMuMy4yIENvbm5lY3Rpb24gb2JqZWN0cyA8L0E+Cis8L1VMPgorPC9VTD4KKzxCUj4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDMwIgorICBocmVmPSJpbnRlcm5hbHMuaHRtbCI+NCBJbnRlcm5hbHMgPC9BPgorPFVMPgorPExJPjxBIE5BTUU9InRleDJodG1sMzEiCisgIGhyZWY9ImV4Y2VwdGlvbnMuaHRtbCI+NC4xIEV4Y2VwdGlvbnMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMzIiCisgIGhyZWY9ImNhbGxiYWNrcy5odG1sIj40LjIgQ2FsbGJhY2tzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDMzIgorICBocmVmPSJzb2NrZXQtbWV0aG9kcy5odG1sIj40LjMgQWNlc3NpbmcgU29ja2V0IE1ldGhvZHMgPC9BPgorPC9VTD4KKzxCUj4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDM0IgorICBocmVmPSJhYm91dC5odG1sIj5BYm91dCB0aGlzIGRvY3VtZW50IC4uLjwvQT4KKzwvVUw+Cis8IS0tRW5kIG9mIFRhYmxlIG9mIENoaWxkLUxpbmtzLS0+CisKKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHA+PGhyPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iY29udGVudHMuaHRtbCI+Q29udGVudHM8L0E+Cis8aHI+Cis8c3BhbiBjbGFzcz0icmVsZWFzZS1pbmZvIj5SZWxlYXNlIDAuNi48L3NwYW4+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9pbnRlcm5hbHMuaHRtbCBiL2RvYy9odG1sL2ludGVybmFscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlY2ZiNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9pbnRlcm5hbHMuaHRtbApAQCAtMCwwICsxLDEwMyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+NCBJbnRlcm5hbHMgPC90aXRsZT4KKzxNRVRBIE5BTUU9ImRlc2NyaXB0aW9uIiBDT05URU5UPSI0IEludGVybmFscyAiPgorPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9InB5T3BlblNTTCI+Cis8TUVUQSBOQU1FPSJyZXNvdXJjZS10eXBlIiBDT05URU5UPSJkb2N1bWVudCI+Cis8TUVUQSBOQU1FPSJkaXN0cmlidXRpb24iIENPTlRFTlQ9Imdsb2JhbCI+Cis8bGluayByZWw9IlNUWUxFU0hFRVQiIGhyZWY9InB5T3BlblNTTC5jc3MiPgorPExJTksgUkVMPSJuZXh0IiBocmVmPSJhYm91dC5odG1sIj4KKzxMSU5LIFJFTD0icHJldmlvdXMiIGhyZWY9Im9wZW5zc2wuaHRtbCI+Cis8TElOSyBSRUw9InVwIiBIUkVGPSJweU9wZW5TU0wuaHRtbCI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9ImV4Y2VwdGlvbnMuaHRtbCI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtY29ubmVjdGlvbi5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgSFJFRj0icHlPcGVuU1NMLmh0bWwiPjxpbWcgc3JjPSJ1cC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iVXAgT25lIExldmVsIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9ImV4Y2VwdGlvbnMuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtY29ubmVjdGlvbi5odG1sIj4zLjMuMiBDb25uZWN0aW9uIG9iamVjdHM8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIEhSRUY9InB5T3BlblNTTC5odG1sIj5QeXRob24gT3BlblNTTCBNYW51YWw8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iZXhjZXB0aW9ucy5odG1sIj40LjEgRXhjZXB0aW9uczwvQT4KKzxicj48aHI+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorPEgxPjxBIE5BTUU9IlNFQ1RJT04wMDA1MDAwMDAwMDAwMDAwMDAwMDAiPiZuYnNwOzwvQT4KKzxCUj4KKzQgSW50ZXJuYWxzIAorPC9IMT4KKzxQPgorPEVNPjxFTT48RU0+V2UgcmFuIGludG8gdGhyZWUgbWFpbiBwcm9ibGVtcyBkZXZlbG9waW5nIHRoaXM6IEV4Y2VwdGlvbnMsIGNhbGxiYWNrcyBhbmQKK2FjY2Vzc2luZyBzb2NrZXQgbWV0aG9kcy4gVGhpcyBpcyB3aGF0IHRoaXMgY2hhcHRlciBpcyBhYm91dC4KKzwvRU0+PC9FTT48L0VNPgorPFA+CisKKzxwPjxocj4KKworPCEtLVRhYmxlIG9mIENoaWxkLUxpbmtzLS0+Cis8QSBOQU1FPSJDSElMRF9MSU5LUyI+PFNUUk9ORz5TdWJzZWN0aW9uczwvU1RST05HPjwvQT4KKworPFVMIENMQVNTPSJDaGlsZExpbmtzIj4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDI5NiIKKyAgaHJlZj0iZXhjZXB0aW9ucy5odG1sIj40LjEgRXhjZXB0aW9ucyA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwyOTciCisgIGhyZWY9ImNhbGxiYWNrcy5odG1sIj40LjIgQ2FsbGJhY2tzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDI5OCIKKyAgaHJlZj0ic29ja2V0LW1ldGhvZHMuaHRtbCI+NC4zIEFjZXNzaW5nIFNvY2tldCBNZXRob2RzIDwvQT4KKzwvVUw+Cis8IS0tRW5kIG9mIFRhYmxlIG9mIENoaWxkLUxpbmtzLS0+CisKKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHA+PGhyPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtY29ubmVjdGlvbi5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgSFJFRj0icHlPcGVuU1NMLmh0bWwiPjxpbWcgc3JjPSJ1cC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iVXAgT25lIExldmVsIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9ImV4Y2VwdGlvbnMuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtY29ubmVjdGlvbi5odG1sIj4zLjMuMiBDb25uZWN0aW9uIG9iamVjdHM8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIEhSRUY9InB5T3BlblNTTC5odG1sIj5QeXRob24gT3BlblNTTCBNYW51YWw8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iZXhjZXB0aW9ucy5odG1sIj40LjEgRXhjZXB0aW9uczwvQT4KKzxocj4KKzxzcGFuIGNsYXNzPSJyZWxlYXNlLWluZm8iPlJlbGVhc2UgMC42Ljwvc3Bhbj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2ludHJvLmh0bWwgYi9kb2MvaHRtbC9pbnRyby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjM3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9pbnRyby5odG1sCkBAIC0wLDAgKzEsMTE4IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT4xIEludHJvZHVjdGlvbiA8L3RpdGxlPgorPE1FVEEgTkFNRT0iZGVzY3JpcHRpb24iIENPTlRFTlQ9IjEgSW50cm9kdWN0aW9uICI+Cis8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0icHlPcGVuU1NMIj4KKzxNRVRBIE5BTUU9InJlc291cmNlLXR5cGUiIENPTlRFTlQ9ImRvY3VtZW50Ij4KKzxNRVRBIE5BTUU9ImRpc3RyaWJ1dGlvbiIgQ09OVEVOVD0iZ2xvYmFsIj4KKzxsaW5rIHJlbD0iU1RZTEVTSEVFVCIgaHJlZj0icHlPcGVuU1NMLmNzcyI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9ImJ1aWxkaW5nLmh0bWwiPgorPExJTksgUkVMPSJwcmV2aW91cyIgaHJlZj0iY29udGVudHMuaHRtbCI+Cis8TElOSyBSRUw9InVwIiBIUkVGPSJweU9wZW5TU0wuaHRtbCI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9ImJ1aWxkaW5nLmh0bWwiPgorPC9oZWFkPgorPGJvZHk+Cis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgSFJFRj0icHlPcGVuU1NMLmh0bWwiPjxpbWcgc3JjPSJ1cC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iVXAgT25lIExldmVsIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9ImJ1aWxkaW5nLmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJjb250ZW50cy5odG1sIj5Db250ZW50czwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgSFJFRj0icHlPcGVuU1NMLmh0bWwiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJidWlsZGluZy5odG1sIj4yIEJ1aWxkaW5nIGFuZCBJbnN0YWxsaW5nPC9BPgorPGJyPjxocj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzxIMT48QSBOQU1FPSJTRUNUSU9OMDAwMjAwMDAwMDAwMDAwMDAwMDAwIj4mbmJzcDs8L0E+Cis8QlI+CisxIEludHJvZHVjdGlvbiAKKzwvSDE+CisKKzxQPgorVGhlIHJlYXNvbiB0aGlzIG1vZHVsZSBleGlzdHMgYXQgYWxsIGlzIHRoYXQgdGhlIFNTTCBzdXBwb3J0IGluIHRoZSBzb2NrZXQKK21vZHVsZSBpbiB0aGUgUHl0aG9uIDIuMSBkaXN0cmlidXRpb24gKHdoaWNoIGlzIHdoYXQgd2UgdXNlZCwgb2YgY291cnNlIEkKK2Nhbm5vdCBzcGVhayBmb3IgbGF0ZXIgdmVyc2lvbnMpIGlzIHNldmVyZWx5IGxpbWl0ZWQuCisKKzxQPgorV2hlbiBhc2tpbmcgYWJvdXQgU1NMIG9uIHRoZSBjb21wLmxhbmcucHl0aG9uIG5ld3Nncm91cCAob3Igb24KK3B5dGhvbi1saXN0QHB5dGhvbi5vcmcpIHBlb3BsZSB1c3VhbGx5IHBvaW50ZWQgeW91IHRvIHRoZSBNMkNyeXB0byBwYWNrYWdlLgorVGhlIE0yQ3J5cHRvLlNTTCBtb2R1bGUgZG9lcyBpbXBsZW1lbnQgYSBsb3Qgb2YgT3BlblNTTCdzIGZ1bmN0aW9uYWxpdHkgYnV0Cit1bmZvcnR1bmF0ZWx5IGl0cyBlcnJvciBoYW5kbGluZyBzeXN0ZW0gZG9lcyBub3Qgc2VlbSB0byBiZSBmaW5pc2hlZCwKK2VzcGVjaWFsbHkgZm9yIG5vbi1ibG9ja2luZyBJL08uICBJIHRoaW5rIHRoYXQgbXVjaCBvZiB0aGUgcmVhc29uIGZvciB0aGlzCitpcyB0aGF0IE0yQ3J5cHRvPEEgTkFNRT0idGV4Mmh0bWwxIgorICBIUkVGPSIjZm9vdDg3NiI+PFNVUD4xPC9TVVA+PC9BPiBpcworZGV2ZWxvcGVkIHVzaW5nIFNXSUc8QSBOQU1FPSJ0ZXgyaHRtbDIiCisgIEhSRUY9IiNmb290ODc3Ij48U1VQPjI8L1NVUD48L0E+LiAgVGhpcworbWFrZXMgaXQgYXdrd2FyZCB0byBjcmVhdGUgZnVuY3Rpb25zIHRoYXQgZS5nLiBjYW4gcmV0dXJuIGJvdGggYW4gaW50ZWdlciBhbmQKK05VTEwgc2luY2UgKGFzIGZhciBhcyBJIGtub3cpIHlvdSBiYXNpY2FsbHkgd3JpdGUgQyBmdW5jdGlvbnMgYW5kIFNXSUcgbWFrZXMKK3dyYXBwZXIgZnVuY3Rpb25zIHRoYXQgcGFyc2VzIHRoZSBQeXRob24gYXJndW1lbnQgbGlzdCBhbmQgY2FsbHMgeW91ciBDCitmdW5jdGlvbiwgYW5kIGZpbmFsbHkgdHJhbnNmb3JtcyB5b3VyIHJldHVybiB2YWx1ZSB0byBhIFB5dGhvbiBvYmplY3QuCisKKzxQPgorPEJSPjxIUj48SDQ+Rm9vdG5vdGVzPC9IND4KKzxETD4KKzxEVD48QSBOQU1FPSJmb290ODc2Ij4uLi4gTTJDcnlwdG88L0E+PEEKKyBocmVmPSJpbnRyby5odG1sI3RleDJodG1sMSI+PFNVUD4xPC9TVVA+PC9BPjwvRFQ+Cis8REQ+U2VlIDxhIGNsYXNzPSJ1cmwiIGhyZWY9Imh0dHA6Ly93d3cucG9zdDEuY29tL2hvbWUvbmdwcy9tMi8iPmh0dHA6Ly93d3cucG9zdDEuY29tL2hvbWUvbmdwcy9tMi88L2E+CisKKzwvREQ+Cis8RFQ+PEEgTkFNRT0iZm9vdDg3NyI+Li4uIFNXSUc8L0E+PEEKKyBocmVmPSJpbnRyby5odG1sI3RleDJodG1sMiI+PFNVUD4yPC9TVVA+PC9BPjwvRFQ+Cis8REQ+U2VlIDxhIGNsYXNzPSJ1cmwiIGhyZWY9Imh0dHA6Ly9zd2lnLnNvdXJjZWZvcmdlLm5ldC8iPmh0dHA6Ly9zd2lnLnNvdXJjZWZvcmdlLm5ldC88L2E+CisKKzwvREQ+Cis8L0RMPgorPERJViBDTEFTUz0ibmF2aWdhdGlvbiI+Cis8cD48aHI+Cis8dGFibGUgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMiI+Cis8dHI+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIEhSRUY9InB5T3BlblNTTC5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJidWlsZGluZy5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iY29udGVudHMuaHRtbCI+Q29udGVudHM8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIEhSRUY9InB5T3BlblNTTC5odG1sIj5QeXRob24gT3BlblNTTCBNYW51YWw8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iYnVpbGRpbmcuaHRtbCI+MiBCdWlsZGluZyBhbmQgSW5zdGFsbGluZzwvQT4KKzxocj4KKzxzcGFuIGNsYXNzPSJyZWxlYXNlLWluZm8iPlJlbGVhc2UgMC42Ljwvc3Bhbj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL21vZHVsZXMuZ2lmIGIvZG9jL2h0bWwvbW9kdWxlcy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4NjBiNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL21vZHVsZXMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL25leHQuZ2lmIGIvZG9jL2h0bWwvbmV4dC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRjYWZmOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL25leHQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL29wZW5zc2wtNTA5ZXh0Lmh0bWwgYi9kb2MvaHRtbC9vcGVuc3NsLTUwOWV4dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YThhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9vcGVuc3NsLTUwOWV4dC5odG1sCkBAIC0wLDAgKzEsOTMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPjMuMS44IFg1MDlFeHRlbnNpb24gb2JqZWN0cyA8L3RpdGxlPgorPE1FVEEgTkFNRT0iZGVzY3JpcHRpb24iIENPTlRFTlQ9IjMuMS44IFg1MDlFeHRlbnNpb24gb2JqZWN0cyAiPgorPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9InB5T3BlblNTTCI+Cis8TUVUQSBOQU1FPSJyZXNvdXJjZS10eXBlIiBDT05URU5UPSJkb2N1bWVudCI+Cis8TUVUQSBOQU1FPSJkaXN0cmlidXRpb24iIENPTlRFTlQ9Imdsb2JhbCI+Cis8bGluayByZWw9IlNUWUxFU0hFRVQiIGhyZWY9InB5T3BlblNTTC5jc3MiPgorPExJTksgUkVMPSJuZXh0IiBocmVmPSJvcGVuc3NsLW5ldHNjYXBlLXNwa2kuaHRtbCI+Cis8TElOSyBSRUw9InByZXZpb3VzIiBocmVmPSJvcGVuc3NsLXBrY3MxMi5odG1sIj4KKzxMSU5LIFJFTD0idXAiIGhyZWY9Im9wZW5zc2wtY3J5cHRvLmh0bWwiPgorPExJTksgUkVMPSJuZXh0IiBocmVmPSJvcGVuc3NsLW5ldHNjYXBlLXNwa2kuaHRtbCI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtcGtjczEyLmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLW5ldHNjYXBlLXNwa2kuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtcGtjczEyLmh0bWwiPjMuMS43IFBLQ1MxMiBvYmplY3RzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4zLjEgY3J5cHRvICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1uZXRzY2FwZS1zcGtpLmh0bWwiPjMuMS45IE5ldHNjYXBlU1BLSSBvYmplY3RzPC9BPgorPGJyPjxocj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzxIMz48QSBOQU1FPSJTRUNUSU9OMDAwNDE4MDAwMDAwMDAwMDAwMDAwIj4mbmJzcDs8L0E+Cis8QlI+CiszLjEuOCBYNTA5RXh0ZW5zaW9uIG9iamVjdHMgCis8L0gzPgorPFA+Cis8RU0+PEVNPjxFTT5YNTA5RXh0ZW5zaW9uIG9iamVjdHMgY3VycmVudGx5IG9ubHkgaGF2ZSBvbmUgbWV0aG9kOgorPC9FTT48L0VNPjwvRU0+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTc1Jz48dHQgY2xhc3M9J21ldGhvZCc+Z2V0X2NyaXRpY2FsPC90dD48L2E+PC9iPigpCis8ZGQ+CitSZXR1cm4gdGhlIGNyaXRpY2FsIGZpZWxkIG9mIHRoZSBleHRlbnNpb24gb2JqZWN0LgorPC9kbD4KKzxQPgorCis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzxwPjxocj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXBrY3MxMi5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1uZXRzY2FwZS1zcGtpLmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXBrY3MxMi5odG1sIj4zLjEuNyBQS0NTMTIgb2JqZWN0czwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+My4xIGNyeXB0byAgPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtbmV0c2NhcGUtc3BraS5odG1sIj4zLjEuOSBOZXRzY2FwZVNQS0kgb2JqZWN0czwvQT4KKzxocj4KKzxzcGFuIGNsYXNzPSJyZWxlYXNlLWluZm8iPlJlbGVhc2UgMC42Ljwvc3Bhbj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL29wZW5zc2wtY29ubmVjdGlvbi5odG1sIGIvZG9jL2h0bWwvb3BlbnNzbC1jb25uZWN0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc3NTkxOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL29wZW5zc2wtY29ubmVjdGlvbi5odG1sCkBAIC0wLDAgKzEsMjY0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT4zLjMuMiBDb25uZWN0aW9uIG9iamVjdHMgPC90aXRsZT4KKzxNRVRBIE5BTUU9ImRlc2NyaXB0aW9uIiBDT05URU5UPSIzLjMuMiBDb25uZWN0aW9uIG9iamVjdHMgIj4KKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJweU9wZW5TU0wiPgorPE1FVEEgTkFNRT0icmVzb3VyY2UtdHlwZSIgQ09OVEVOVD0iZG9jdW1lbnQiPgorPE1FVEEgTkFNRT0iZGlzdHJpYnV0aW9uIiBDT05URU5UPSJnbG9iYWwiPgorPGxpbmsgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSJweU9wZW5TU0wuY3NzIj4KKzxMSU5LIFJFTD0icHJldmlvdXMiIGhyZWY9Im9wZW5zc2wtY29udGV4dC5odG1sIj4KKzxMSU5LIFJFTD0idXAiIGhyZWY9Im9wZW5zc2wtc3NsLmh0bWwiPgorPExJTksgUkVMPSJuZXh0IiBocmVmPSJpbnRlcm5hbHMuaHRtbCI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtY29udGV4dC5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1zc2wuaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLWNvbnRleHQuaHRtbCI+My4zLjEgQ29udGV4dCBvYmplY3RzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXNzbC5odG1sIj4zLjMgU1NMICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPjQgSW50ZXJuYWxzPC9BPgorPGJyPjxocj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzxIMz48QSBOQU1FPSJTRUNUSU9OMDAwNDMyMDAwMDAwMDAwMDAwMDAwIj4mbmJzcDs8L0E+Cis8QlI+CiszLjMuMiBDb25uZWN0aW9uIG9iamVjdHMgCis8L0gzPgorPFA+Cis8RU0+PEVNPjxFTT5Db25uZWN0aW9uIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6Cis8L0VNPjwvRU0+PC9FTT4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTM3Jz48dHQgY2xhc3M9J21ldGhvZCc+YWNjZXB0PC90dD48L2E+PC9iPigpCis8ZGQ+CitDYWxsIHRoZSA8dHQgY2xhc3M9Im1ldGhvZCI+YWNjZXB0PC90dD4gbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBhbmQgc2V0IHVwIFNTTCBvbiB0aGUKK3JldHVybmVkIHNvY2tldCwgdXNpbmcgdGhlIENvbnRleHQgb2JqZWN0IHN1cHBsaWVkIHRvIHRoaXMgQ29ubmVjdGlvbiBvYmplY3QgYXQKK2NyZWF0aW9uLiBSZXR1cm5zIGEgcGFpciA8Y29kZT4oPHZhcj5jb25uPC92YXI+LCA8dmFyPmFkZHJlc3M8L3Zhcj4pPC9jb2RlPi4gd2hlcmUgPHZhcj5jb25uPC92YXI+CitpcyB0aGUgbmV3IENvbm5lY3Rpb24gb2JqZWN0IGNyZWF0ZWQsIGFuZCA8dmFyPmFkZHJlc3M8L3Zhcj4gaXMgYXMgcmV0dXJuZWQgYnkgdGhlCitzb2NrZXQncyA8dHQgY2xhc3M9Im1ldGhvZCI+YWNjZXB0PC90dD4uCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xMzgnPjx0dCBjbGFzcz0nbWV0aG9kJz5iaW5kPC90dD48L2E+PC9iPig8dmFyPmFkZHJlc3M8L3Zhcj4pCis8ZGQ+CitDYWxsIHRoZSA8dHQgY2xhc3M9Im1ldGhvZCI+YmluZDwvdHQ+IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xMzknPjx0dCBjbGFzcz0nbWV0aG9kJz5jbG9zZTwvdHQ+PC9hPjwvYj4oKQorPGRkPgorQ2FsbCB0aGUgPHR0IGNsYXNzPSJtZXRob2QiPmNsb3NlPC90dD4gbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4gTm90ZTogSWYgeW91IHdhbnQKK2NvcnJlY3QgU1NMIGNsb3N1cmUsIHlvdSBuZWVkIHRvIGNhbGwgdGhlIDx0dCBjbGFzcz0ibWV0aG9kIj5zaHV0ZG93bjwvdHQ+IG1ldGhvZCBmaXJzdC4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTE0MCc+PHR0IGNsYXNzPSdtZXRob2QnPmNvbm5lY3Q8L3R0PjwvYT48L2I+KDx2YXI+YWRkcmVzczwvdmFyPikKKzxkZD4KK0NhbGwgdGhlIDx0dCBjbGFzcz0ibWV0aG9kIj5jb25uZWN0PC90dD4gbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBhbmQgc2V0IHVwIFNTTCBvbiB0aGUKK3NvY2tldCwgdXNpbmcgdGhlIENvbnRleHQgb2JqZWN0IHN1cHBsaWVkIHRvIHRoaXMgQ29ubmVjdGlvbiBvYmplY3QgYXQKK2NyZWF0aW9uLgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTQxJz48dHQgY2xhc3M9J21ldGhvZCc+Y29ubmVjdF9leDwvdHQ+PC9hPjwvYj4oPHZhcj5hZGRyZXNzPC92YXI+KQorPGRkPgorQ2FsbCB0aGUgPHR0IGNsYXNzPSJtZXRob2QiPmNvbm5lY3RfZXg8L3R0PiBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0IGFuZCBzZXQgdXAgU1NMIG9uCit0aGUgc29ja2V0LCB1c2luZyB0aGUgQ29udGV4dCBvYmplY3Qgc3VwcGxpZWQgdG8gdGhpcyBDb25uZWN0aW9uIG9iamVjdCBhdAorY3JlYXRpb24uIE5vdGUgdGhhdCBpZiB0aGUgPHR0IGNsYXNzPSJtZXRob2QiPmNvbm5lY3RfZXg8L3R0PiBtZXRob2Qgb2YgdGhlIHNvY2tldCBkb2Vzbid0CityZXR1cm4gMCwgU1NMIHdvbid0IGJlIGluaXRpYWxpemVkLgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTQyJz48dHQgY2xhc3M9J21ldGhvZCc+ZG9faGFuZHNoYWtlPC90dD48L2E+PC9iPigpCis8ZGQ+CitQZXJmb3JtIGFuIFNTTCBoYW5kc2hha2UgKHVzdWFsbHkgY2FsbGVkIGFmdGVyIDx0dCBjbGFzcz0ibWV0aG9kIj5yZW5lZ290aWF0ZTwvdHQ+IG9yIG9uZSBvZgorPHR0IGNsYXNzPSJtZXRob2QiPnNldF9hY2NlcHRfc3RhdGU8L3R0PiBvciA8dHQgY2xhc3M9Im1ldGhvZCI+c2V0X2FjY2VwdF9zdGF0ZTwvdHQ+KS4gVGhpcyBjYW4gcmFpc2UgdGhlCitzYW1lIGV4Y2VwdGlvbnMgYXMgPHR0IGNsYXNzPSJtZXRob2QiPnNlbmQ8L3R0PiBhbmQgPHR0IGNsYXNzPSJtZXRob2QiPnJlY3Y8L3R0Pi4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTE0Myc+PHR0IGNsYXNzPSdtZXRob2QnPmZpbGVubzwvdHQ+PC9hPjwvYj4oKQorPGRkPgorUmV0cmlldmUgdGhlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgZm9yIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTE0NCc+PHR0IGNsYXNzPSdtZXRob2QnPmxpc3RlbjwvdHQ+PC9hPjwvYj4oPHZhcj5iYWNrbG9nPC92YXI+KQorPGRkPgorQ2FsbCB0aGUgPHR0IGNsYXNzPSJtZXRob2QiPmxpc3RlbjwvdHQ+IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xNDUnPjx0dCBjbGFzcz0nbWV0aG9kJz5nZXRfYXBwX2RhdGE8L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JldHJpZXZlIGFwcGxpY2F0aW9uIGRhdGEgYXMgc2V0IGJ5IDx0dCBjbGFzcz0ibWV0aG9kIj5zZXRfYXBwX2RhdGE8L3R0Pi4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTE0Nic+PHR0IGNsYXNzPSdtZXRob2QnPmdldF9jaXBoZXJfbGlzdDwvdHQ+PC9hPjwvYj4oKQorPGRkPgorUmV0cmlldmUgdGhlIGxpc3Qgb2YgY2lwaGVycyB1c2VkIGJ5IHRoZSBDb25uZWN0aW9uIG9iamVjdC4gV0FSTklORzogVGhpcyBBUEkKK2hhcyBjaGFuZ2VkLiBJdCB1c2VkIHRvIHRha2UgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIGFuZCBqdXN0IHJldHVybiBhIHN0cmluZywKK2J1dCBub3QgaXQgcmV0dXJucyB0aGUgZW50aXJlIGxpc3QgaW4gb25lIGdvLgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTQ3Jz48dHQgY2xhc3M9J21ldGhvZCc+Z2V0X2NvbnRleHQ8L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JldHJpZXZlIHRoZSBDb250ZXh0IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBDb25uZWN0aW9uLgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTQ4Jz48dHQgY2xhc3M9J21ldGhvZCc+Z2V0X3BlZXJfY2VydGlmaWNhdGU8L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JldHJpZXZlIHRoZSBvdGhlciBzaWRlJ3MgY2VydGlmaWNhdGUgKGlmIGFueSkKKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTE0OSc+PHR0IGNsYXNzPSdtZXRob2QnPmdldHBlZXJuYW1lPC90dD48L2E+PC9iPigpCis8ZGQ+CitDYWxsIHRoZSA8dHQgY2xhc3M9Im1ldGhvZCI+Z2V0cGVlcm5hbWU8L3R0PiBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0LgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTUwJz48dHQgY2xhc3M9J21ldGhvZCc+Z2V0c29ja25hbWU8L3R0PjwvYT48L2I+KCkKKzxkZD4KK0NhbGwgdGhlIDx0dCBjbGFzcz0ibWV0aG9kIj5nZXRzb2NrbmFtZTwvdHQ+IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xNTEnPjx0dCBjbGFzcz0nbWV0aG9kJz5nZXRzb2Nrb3B0PC90dD48L2E+PC9iPig8dmFyPmxldmVsLCBvcHRuYW1lPC92YXI+PGJpZz5bPC9iaWc+PHZhcj4sIGJ1ZmxlbjwvdmFyPjxiaWc+XTwvYmlnPikKKzxkZD4KK0NhbGwgdGhlIDx0dCBjbGFzcz0ibWV0aG9kIj5nZXRzb2Nrb3B0PC90dD4gbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTE1Mic+PHR0IGNsYXNzPSdtZXRob2QnPnBlbmRpbmc8L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JldHJpZXZlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlYWQgZnJvbSB0aGUgU1NMIGJ1ZmZlci4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTE1Myc+PHR0IGNsYXNzPSdtZXRob2QnPnJlY3Y8L3R0PjwvYT48L2I+KDx2YXI+YnVmc2l6ZTwvdmFyPikKKzxkZD4KK1JlY2VpdmUgZGF0YSBmcm9tIHRoZSBDb25uZWN0aW9uLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUKK2RhdGEgcmVjZWl2ZWQuIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHRvIGJlIHJlY2VpdmVkIGF0IG9uY2UsIGlzIHNwZWNpZmllZAorYnkgPHZhcj5idWZzaXplPC92YXI+LgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTU0Jz48dHQgY2xhc3M9J21ldGhvZCc+cmVuZWdvdGlhdGU8L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JlbmVnb3RpYXRlIHRoZSBTU0wgc2Vzc2lvbi4gQ2FsbCB0aGlzIGlmIHlvdSB3aXNoIHRvIGNoYW5nZSBjaXBoZXIgc3VpdGVzIG9yCithbnl0aGluZyBsaWtlIHRoYXQuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xNTUnPjx0dCBjbGFzcz0nbWV0aG9kJz5zZW5kPC90dD48L2E+PC9iPig8dmFyPnN0cmluZzwvdmFyPikKKzxkZD4KK1NlbmQgdGhlIDx2YXI+c3RyaW5nPC92YXI+IGRhdGEgdG8gdGhlIENvbm5lY3Rpb24uCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xNTYnPjx0dCBjbGFzcz0nbWV0aG9kJz5zZW5kYWxsPC90dD48L2E+PC9iPig8dmFyPnN0cmluZzwvdmFyPikKKzxkZD4KK1NlbmQgYWxsIG9mIHRoZSA8dmFyPnN0cmluZzwvdmFyPiBkYXRhIHRvIHRoZSBDb25uZWN0aW9uLiBUaGlzIGNhbGxzIDx0dCBjbGFzcz0ibWV0aG9kIj5zZW5kPC90dD4KK3JlcGVhdGVkbHkgdW50aWwgYWxsIGRhdGEgaXMgc2VudC4gSWYgYW4gZXJyb3Igb2NjdXJzLCBpdCdzIGltcG9zc2libGUgdG8gdGVsbAoraG93IG11Y2ggZGF0YSBoYXMgYmVlbiBzZW50LgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTU3Jz48dHQgY2xhc3M9J21ldGhvZCc+c2V0X2FjY2VwdF9zdGF0ZTwvdHQ+PC9hPjwvYj4oKQorPGRkPgorU2V0IHRoZSBjb25uZWN0aW9uIHRvIHdvcmsgaW4gc2VydmVyIG1vZGUuIFRoZSBoYW5kc2hha2Ugd2lsbCBiZSBoYW5kbGVkCithdXRvbWF0aWNhbGx5IGJ5IHJlYWQvd3JpdGUuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xNTgnPjx0dCBjbGFzcz0nbWV0aG9kJz5zZXRfYXBwX2RhdGE8L3R0PjwvYT48L2I+KDx2YXI+ZGF0YTwvdmFyPikKKzxkZD4KK0Fzc29jaWF0ZSA8dmFyPmRhdGE8L3Zhcj4gd2l0aCB0aGlzIENvbm5lY3Rpb24gb2JqZWN0LiA8dmFyPmRhdGE8L3Zhcj4gY2FuIGJlIHJldHJpZXZlZAorbGF0ZXIgdXNpbmcgdGhlIDx0dCBjbGFzcz0ibWV0aG9kIj5nZXRfYXBwX2RhdGE8L3R0PiBtZXRob2QuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xNTknPjx0dCBjbGFzcz0nbWV0aG9kJz5zZXRfY29ubmVjdF9zdGF0ZTwvdHQ+PC9hPjwvYj4oKQorPGRkPgorU2V0IHRoZSBjb25uZWN0aW9uIHRvIHdvcmsgaW4gY2xpZW50IG1vZGUuIFRoZSBoYW5kc2hha2Ugd2lsbCBiZSBoYW5kbGVkCithdXRvbWF0aWNhbGx5IGJ5IHJlYWQvd3JpdGUuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xNjAnPjx0dCBjbGFzcz0nbWV0aG9kJz5zZXRibG9ja2luZzwvdHQ+PC9hPjwvYj4oPHZhcj5mbGFnPC92YXI+KQorPGRkPgorQ2FsbCB0aGUgPHR0IGNsYXNzPSJtZXRob2QiPnNldGJsb2NraW5nPC90dD4gbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTE2MSc+PHR0IGNsYXNzPSdtZXRob2QnPnNldHNvY2tvcHQ8L3R0PjwvYT48L2I+KDx2YXI+bGV2ZWwsIG9wdG5hbWUsIHZhbHVlPC92YXI+KQorPGRkPgorQ2FsbCB0aGUgPHR0IGNsYXNzPSJtZXRob2QiPnNldHNvY2tvcHQ8L3R0PiBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0LgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTYyJz48dHQgY2xhc3M9J21ldGhvZCc+c2h1dGRvd248L3R0PjwvYT48L2I+KCkKKzxkZD4KK1NlbmQgdGhlIHNodXRkb3duIG1lc3NhZ2UgdG8gdGhlIENvbm5lY3Rpb24uIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2h1dGRvd24KK21lc3NhZ2UgZXhjaGFuZ2UgaXMgY29tcGxldGVkIGFuZCBmYWxzZSBvdGhlcndpc2UgKGluIHdoaWNoIGNhc2UgeW91IGNhbGwKKzx0dCBjbGFzcz0ibWV0aG9kIj5yZWN2KCk8L3R0PiBvciA8dHQgY2xhc3M9Im1ldGhvZCI+c2VuZCgpPC90dD4gd2hlbiB0aGUgY29ubmVjdGlvbiBiZWNvbWVzCityZWFkYWJsZS93cml0ZWFibGUuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xNjMnPjx0dCBjbGFzcz0nbWV0aG9kJz5zb2NrX3NodXRkb3duPC90dD48L2E+PC9iPig8dmFyPmhvdzwvdmFyPikKKzxkZD4KK0NhbGwgdGhlIDx0dCBjbGFzcz0ibWV0aG9kIj5zaHV0ZG93bjwvdHQ+IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xNjQnPjx0dCBjbGFzcz0nbWV0aG9kJz5zdGF0ZV9zdHJpbmc8L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JldHJpZXZlIGEgdmVyYm9zZSBzdHJpbmcgZGV0YWlsaW5nIHRoZSBzdGF0ZSBvZiB0aGUgQ29ubmVjdGlvbi4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTE2NSc+PHR0IGNsYXNzPSdtZXRob2QnPndhbnRfcmVhZDwvdHQ+PC9hPjwvYj4oKQorPGRkPgorQ2hlY2tzIGlmIG1vcmUgZGF0YSBoYXMgdG8gYmUgcmVhZCBmcm9tIHRoZSB0cmFuc3BvcnQgbGF5ZXIgdG8gY29tcGxldGUgYW4KK29wZXJhdGlvbi4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTE2Nic+PHR0IGNsYXNzPSdtZXRob2QnPndhbnRfd3JpdGU8L3R0PjwvYT48L2I+KCkKKzxkZD4KK0NoZWNrcyBpZiB0aGVyZSBpcyBkYXRhIHRvIHdyaXRlIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgdG8gY29tcGxldGUgYW4KK29wZXJhdGlvbi4KKzwvZGw+Cis8UD4KKworPERJViBDTEFTUz0ibmF2aWdhdGlvbiI+Cis8cD48aHI+Cis8dGFibGUgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMiI+Cis8dHI+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1jb250ZXh0Lmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXNzbC5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJpbnRlcm5hbHMuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtY29udGV4dC5odG1sIj4zLjMuMSBDb250ZXh0IG9iamVjdHM8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtc3NsLmh0bWwiPjMuMyBTU0wgIDwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJpbnRlcm5hbHMuaHRtbCI+NCBJbnRlcm5hbHM8L0E+Cis8aHI+Cis8c3BhbiBjbGFzcz0icmVsZWFzZS1pbmZvIj5SZWxlYXNlIDAuNi48L3NwYW4+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9vcGVuc3NsLWNvbnRleHQuaHRtbCBiL2RvYy9odG1sL29wZW5zc2wtY29udGV4dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZDlhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9vcGVuc3NsLWNvbnRleHQuaHRtbApAQCAtMCwwICsxLDI1NSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+My4zLjEgQ29udGV4dCBvYmplY3RzIDwvdGl0bGU+Cis8TUVUQSBOQU1FPSJkZXNjcmlwdGlvbiIgQ09OVEVOVD0iMy4zLjEgQ29udGV4dCBvYmplY3RzICI+Cis8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0icHlPcGVuU1NMIj4KKzxNRVRBIE5BTUU9InJlc291cmNlLXR5cGUiIENPTlRFTlQ9ImRvY3VtZW50Ij4KKzxNRVRBIE5BTUU9ImRpc3RyaWJ1dGlvbiIgQ09OVEVOVD0iZ2xvYmFsIj4KKzxsaW5rIHJlbD0iU1RZTEVTSEVFVCIgaHJlZj0icHlPcGVuU1NMLmNzcyI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9Im9wZW5zc2wtY29ubmVjdGlvbi5odG1sIj4KKzxMSU5LIFJFTD0icHJldmlvdXMiIGhyZWY9Im9wZW5zc2wtc3NsLmh0bWwiPgorPExJTksgUkVMPSJ1cCIgaHJlZj0ib3BlbnNzbC1zc2wuaHRtbCI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9Im9wZW5zc2wtY29ubmVjdGlvbi5odG1sIj4KKzwvaGVhZD4KKzxib2R5PgorPERJViBDTEFTUz0ibmF2aWdhdGlvbiI+Cis8dGFibGUgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMiI+Cis8dHI+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1zc2wuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtc3NsLmh0bWwiPjxpbWcgc3JjPSJ1cC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iVXAgT25lIExldmVsIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtY29ubmVjdGlvbi5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1zc2wuaHRtbCI+My4zIFNTTCAgPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXNzbC5odG1sIj4zLjMgU1NMICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1jb25uZWN0aW9uLmh0bWwiPjMuMy4yIENvbm5lY3Rpb24gb2JqZWN0czwvQT4KKzxicj48aHI+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8SDM+PEEgTkFNRT0iU0VDVElPTjAwMDQzMTAwMDAwMDAwMDAwMDAwMCI+Jm5ic3A7PC9BPgorPEJSPgorMy4zLjEgQ29udGV4dCBvYmplY3RzIAorPC9IMz4KKzxQPgorPEVNPjxFTT48RU0+Q29udGV4dCBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorPC9FTT48L0VNPjwvRU0+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTExNCc+PHR0IGNsYXNzPSdtZXRob2QnPmNoZWNrX3ByaXZhdGVrZXk8L3R0PjwvYT48L2I+KCkKKzxkZD4KK0NoZWNrIGlmIHRoZSBwcml2YXRlIGtleSAobG9hZGVkIHdpdGggPHR0IGNsYXNzPSJtZXRob2QiPnVzZV9wcml2YXRla2V5PGJpZz5bPC9iaWc+X2ZpbGU8YmlnPl08L2JpZz48L3R0PikKK21hdGNoZXMgdGhlIGNlcnRpZmljYXRlIChsb2FkZWQgd2l0aCA8dHQgY2xhc3M9Im1ldGhvZCI+dXNlX2NlcnRpZmljYXRlPGJpZz5bPC9iaWc+X2ZpbGU8YmlnPl08L2JpZz48L3R0PikuCitSZXR1cm5zIHRydWUgaWYgdGhleSBtYXRjaCwgZmFsc2Ugb3RoZXJ3aXNlLgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTE1Jz48dHQgY2xhc3M9J21ldGhvZCc+Z2V0X2FwcF9kYXRhPC90dD48L2E+PC9iPigpCis8ZGQ+CitSZXRyaWV2ZSBhcHBsaWNhdGlvbiBkYXRhIGFzIHNldCBieSA8dHQgY2xhc3M9Im1ldGhvZCI+c2V0X2FwcF9kYXRhPC90dD4uCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xMTYnPjx0dCBjbGFzcz0nbWV0aG9kJz5nZXRfY2VydF9zdG9yZTwvdHQ+PC9hPjwvYj4oKQorPGRkPgorUmV0cmlldmUgdGhlIGNlcnRpZmljYXRlIHN0b3JlIChhIFg1MDlTdG9yZSBvYmplY3QpIHRoYXQgdGhlIGNvbnRleHQgdXNlcy4KK1RoaXMgY2FuIGJlIHVzZWQgdG8gYWRkICJ0cnVzdGVkIiBjZXJ0aWZpY2F0ZXMgd2l0aG91dCB1c2luZyB0aGUuCis8dHQgY2xhc3M9Im1ldGhvZCI+bG9hZF92ZXJpZnlfbG9jYXRpb25zKCk8L3R0PiBtZXRob2QuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xMTcnPjx0dCBjbGFzcz0nbWV0aG9kJz5nZXRfdGltZW91dDwvdHQ+PC9hPjwvYj4oKQorPGRkPgorUmV0cmlldmUgc2Vzc2lvbiB0aW1lb3V0LCBhcyBzZXQgYnkgPHR0IGNsYXNzPSJtZXRob2QiPnNldF90aW1lb3V0PC90dD4uIFRoZSBkZWZhdWx0IGlzIDMwMAorc2Vjb25kcy4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTExOCc+PHR0IGNsYXNzPSdtZXRob2QnPmdldF92ZXJpZnlfZGVwdGg8L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JldHJpZXZlIHRoZSBDb250ZXh0IG9iamVjdCdzIHZlcmlmeSBkZXB0aCwgYXMgc2V0IGJ5Cis8dHQgY2xhc3M9Im1ldGhvZCI+c2V0X3ZlcmlmeV9kZXB0aDwvdHQ+LgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTE5Jz48dHQgY2xhc3M9J21ldGhvZCc+Z2V0X3ZlcmlmeV9tb2RlPC90dD48L2E+PC9iPigpCis8ZGQ+CitSZXRyaWV2ZSB0aGUgQ29udGV4dCBvYmplY3QncyB2ZXJpZnkgbW9kZSwgYXMgc2V0IGJ5IDx0dCBjbGFzcz0ibWV0aG9kIj5zZXRfdmVyaWZ5X21vZGU8L3R0Pi4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTEyMCc+PHR0IGNsYXNzPSdtZXRob2QnPmxvYWRfY2xpZW50X2NhPC90dD48L2E+PC9iPig8dmFyPnBlbWZpbGU8L3Zhcj4pCis8ZGQ+CitSZWFkIGEgZmlsZSB3aXRoIFBFTS1mb3JtYXR0ZWQgY2VydGlmaWNhdGVzIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBjbGllbnQKK3doZW4gcmVxdWVzdGluZyBhIGNsaWVudCBjZXJ0aWZpY2F0ZS4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTEyMSc+PHR0IGNsYXNzPSdtZXRob2QnPmxvYWRfdmVyaWZ5X2xvY2F0aW9uczwvdHQ+PC9hPjwvYj4oPHZhcj5wZW1maWxlPC92YXI+KQorPGRkPgorU3BlY2lmeSB3aGVyZSBDQSBjZXJ0aWZpY2F0ZXMgZm9yIHZlcmlmaWNhdGlvbiBwdXJwb3NlcyBhcmUgbG9jYXRlZC4gVGhlc2UgYXJlCit0cnVzdGVkIGNlcnRpZmljYXRlcy4gTm90ZSB0aGF0IHRoZSBjZXJ0aWZpY2F0ZXMgaGF2ZSB0byBiZSBpbiBQRU0gZm9ybWF0LgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTIyJz48dHQgY2xhc3M9J21ldGhvZCc+bG9hZF90bXBfZGg8L3R0PjwvYT48L2I+KDx2YXI+ZGhmaWxlPC92YXI+KQorPGRkPgorTG9hZCBwYXJhbWV0ZXJzIGZvciBFcGhlbWVyYWwgRGlmZmllLUhlbGxtYW4gZnJvbSA8dmFyPmRoZmlsZTwvdmFyPi4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTEyMyc+PHR0IGNsYXNzPSdtZXRob2QnPnNldF9hcHBfZGF0YTwvdHQ+PC9hPjwvYj4oPHZhcj5kYXRhPC92YXI+KQorPGRkPgorQXNzb2NpYXRlIDx2YXI+ZGF0YTwvdmFyPiB3aXRoIHRoaXMgQ29udGV4dCBvYmplY3QuIDx2YXI+ZGF0YTwvdmFyPiBjYW4gYmUgcmV0cmlldmVkCitsYXRlciB1c2luZyB0aGUgPHR0IGNsYXNzPSJtZXRob2QiPmdldF9hcHBfZGF0YTwvdHQ+IG1ldGhvZC4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTEyNCc+PHR0IGNsYXNzPSdtZXRob2QnPnNldF9jaXBoZXJfbGlzdDwvdHQ+PC9hPjwvYj4oPHZhcj5jaXBoZXJzPC92YXI+KQorPGRkPgorU2V0IHRoZSBsaXN0IG9mIGNpcGhlcnMgdG8gYmUgdXNlZCBpbiB0aGlzIGNvbnRleHQuIFNlZSB0aGUgT3BlblNTTCBtYW51YWwgZm9yCittb3JlIGluZm9ybWF0aW9uIChlLmcuIGNpcGhlcnMoMSkpCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xMjUnPjx0dCBjbGFzcz0nbWV0aG9kJz5zZXRfaW5mb19jYWxsYmFjazwvdHQ+PC9hPjwvYj4oPHZhcj5jYWxsYmFjazwvdmFyPikKKzxkZD4KK1NldCB0aGUgaW5mb3JtYXRpb24gY2FsbGJhY2sgdG8gPHZhcj5jYWxsYmFjazwvdmFyPi4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZAorZnJvbSB0aW1lIHRvIHRpbWUgZHVyaW5nIFNTTCBoYW5kc2hha2VzLgorPC9FTT48L0VNPjwvRU0+Cis8UD4KKzxFTT48RU0+PEVNPjx2YXI+Y2FsbGJhY2s8L3Zhcj4gc2hvdWxkIHRha2UgdGhyZWUgYXJndW1lbnRzOiBhIENvbm5lY3Rpb24gb2JqZWN0IGFuZCB0d28KK2ludGVnZXJzLiBUaGUgZmlyc3QgaW50ZWdlciBzcGVjaWZpZXMgd2hlcmUgaW4gdGhlIFNTTCBoYW5kc2hha2UgdGhlIGZ1bmN0aW9uCit3YXMgY2FsbGVkLCBhbmQgdGhlIG90aGVyIHRoZSByZXR1cm4gY29kZSBmcm9tIGEgKHBvc3NpYmx5IGZhaWxlZCkgaW50ZXJuYWwKK2Z1bmN0aW9uIGNhbGwuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xMjYnPjx0dCBjbGFzcz0nbWV0aG9kJz5zZXRfb3B0aW9uczwvdHQ+PC9hPjwvYj4oPHZhcj5vcHRpb25zPC92YXI+KQorPGRkPgorQWRkIFNTTCBvcHRpb25zLiBPcHRpb25zIHlvdSBoYXZlIHNldCBiZWZvcmUgYXJlIG5vdCBjbGVhcmVkIQorPC9FTT48L0VNPjwvRU0+Cis8UD4KKzxFTT48RU0+PEVNPlRoaXMgbWV0aG9kIHNob3VsZCBiZSB1c2VkIHdpdGggdGhlIDx0dCBjbGFzcz0iY29uc3RhbnQiPk9QXyo8L3R0PiBjb25zdGFudHMuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xMjcnPjx0dCBjbGFzcz0nbWV0aG9kJz5zZXRfcGFzc3dkX2NiPC90dD48L2E+PC9iPig8dmFyPmNhbGxiYWNrPC92YXI+PGJpZz5bPC9iaWc+PHZhcj4sIHVzZXJkYXRhPC92YXI+PGJpZz5dPC9iaWc+KQorPGRkPgorU2V0IHRoZSBwYXNzcGhyYXNlIGNhbGxiYWNrIHRvIDx2YXI+Y2FsbGJhY2s8L3Zhcj4uIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQKK3doZW4gYSBwcml2YXRlIGtleSB3aXRoIGEgcGFzc3BocmFzZSBpcyBsb2FkZWQuCis8L0VNPjwvRU0+PC9FTT4KKzxQPgorPEVNPjxFTT48RU0+PHZhcj5jYWxsYmFjazwvdmFyPiBzaG91bGQgdGFrZSBhIGJvb2xlYW4gYXJndW1lbnQgPHZhcj5yZXBlYXQ8L3Zhcj4gYW5kIGFuIGFyYml0cmFyeQorYXJndW1lbnQgPHZhcj5kYXRhPC92YXI+IGFuZCByZXR1cm4gdGhlIHBhc3NwaHJhc2UgZW50ZXJlZCBieSB0aGUgdXNlci4gSWYKKzx2YXI+cmVwZWF0PC92YXI+IGlzIHRydWUgdGhlbiA8dmFyPmNhbGxiYWNrPC92YXI+IHNob3VsZCBhc2sgZm9yIHRoZSBwYXNzcGhyYXNlIHR3aWNlCithbmQgbWFrZSBzdXJlIHRoYXQgdGhlIHR3byBlbnRyaWVzIGFyZSBlcXVhbC4gVGhlIDx2YXI+ZGF0YTwvdmFyPiBhcmd1bWVudCBpcyB0aGUKKzx2YXI+dXNlcmRhdGE8L3Zhcj4gdmFyaWFibGUgcGFzc2VkIHRvIHRoZSA8dHQgY2xhc3M9Im1ldGhvZCI+c2V0X3Bhc3N3ZF9jYjwvdHQ+IG1ldGhvZC4gSWYgYW4KK2Vycm9yIG9jY3VycywgPHZhcj5jYWxsYmFjazwvdmFyPiBzaG91bGQgcmV0dXJuIGEgZmFsc2UgdmFsdWUgKGUuZy4gYW4gZW1wdHkKK3N0cmluZykuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xMjgnPjx0dCBjbGFzcz0nbWV0aG9kJz5zZXRfc2Vzc2lvbl9pZDwvdHQ+PC9hPjwvYj4oPHZhcj5uYW1lPC92YXI+KQorPGRkPgorU2V0IHRoZSBjb250ZXh0IDx2YXI+bmFtZTwvdmFyPiB3aXRoaW4gd2hpY2ggYSBzZXNzaW9uIGNhbiBiZSByZXVzZWQgZm9yIHRoaXMKK0NvbnRleHQgb2JqZWN0LiBUaGlzIGlzIG5lZWRlZCB3aGVuIGRvaW5nIHNlc3Npb24gcmVzdW1wdGlvbiwgYmVjYXVzZSB0aGVyZSBpcworbm8gd2F5IGZvciBhIHN0b3JlZCBzZXNzaW9uIHRvIGtub3cgd2hpY2ggQ29udGV4dCBvYmplY3QgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLgorPHZhcj5uYW1lPC92YXI+IG1heSBiZSBhbnkgYmluYXJ5IGRhdGEuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xMjknPjx0dCBjbGFzcz0nbWV0aG9kJz5zZXRfdGltZW91dDwvdHQ+PC9hPjwvYj4oPHZhcj50aW1lb3V0PC92YXI+KQorPGRkPgorU2V0IHRoZSB0aW1lb3V0IGZvciBuZXdseSBjcmVhdGVkIHNlc3Npb25zIGZvciB0aGlzIENvbnRleHQgb2JqZWN0IHRvCis8dmFyPnRpbWVvdXQ8L3Zhcj4uIDx2YXI+dGltZW91dDwvdmFyPiBtdXN0IGJlIGdpdmVuIGluICh3aG9sZSkgc2Vjb25kcy4gVGhlIGRlZmF1bHQKK3ZhbHVlIGlzIDMwMCBzZWNvbmRzLiBTZWUgdGhlIE9wZW5TU0wgbWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uIChlLmcuCitTU0xfQ1RYX3NldF90aW1lb3V0KDMpKS4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTEzMCc+PHR0IGNsYXNzPSdtZXRob2QnPnNldF92ZXJpZnk8L3R0PjwvYT48L2I+KDx2YXI+bW9kZSwgY2FsbGJhY2s8L3Zhcj4pCis8ZGQ+CitTZXQgdGhlIHZlcmlmaWNhdGlvbiBmbGFncyBmb3IgdGhpcyBDb250ZXh0IG9iamVjdCB0byA8dmFyPm1vZGU8L3Zhcj4gYW5kIHNwZWNpZnkKK3RoYXQgPHZhcj5jYWxsYmFjazwvdmFyPiBzaG91bGQgYmUgdXNlZCBmb3IgdmVyaWZpY2F0aW9uIGNhbGxiYWNrcy4gPHZhcj5tb2RlPC92YXI+CitzaG91bGQgYmUgb25lIG9mIDx0dCBjbGFzcz0iY29uc3RhbnQiPlZFUklGWV9OT05FPC90dD4gYW5kIDx0dCBjbGFzcz0iY29uc3RhbnQiPlZFUklGWV9QRUVSPC90dD4uIElmCis8dHQgY2xhc3M9ImNvbnN0YW50Ij5WRVJJRllfUEVFUjwvdHQ+IGlzIHVzZWQsIDx2YXI+bW9kZTwvdmFyPiBjYW4gYmUgT1I6ZWQgd2l0aAorPHR0IGNsYXNzPSJjb25zdGFudCI+VkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUPC90dD4gYW5kIDx0dCBjbGFzcz0iY29uc3RhbnQiPlZFUklGWV9DTElFTlRfT05DRTwvdHQ+IHRvCitmdXJ0aGVyIGNvbnRyb2wgdGhlIGJlaGF2aW91ci4KKzwvRU0+PC9FTT48L0VNPgorPFA+Cis8RU0+PEVNPjxFTT48dmFyPmNhbGxiYWNrPC92YXI+IHNob3VsZCB0YWtlIGZpdmUgYXJndW1lbnRzOiBBIENvbm5lY3Rpb24gb2JqZWN0LCBhbiBYNTA5IG9iamVjdCwKK2FuZCB0aHJlZSBpbnRlZ2VyIHZhcmlhYmxlcywgd2hpY2ggYXJlIGluIHR1cm4gcG90ZW50aWFsIGVycm9yIG51bWJlciwgZXJyb3IKK2RlcHRoIGFuZCByZXR1cm4gY29kZS4gPHZhcj5jYWxsYmFjazwvdmFyPiBzaG91bGQgcmV0dXJuIHRydWUgaWYgdmVyaWZpY2F0aW9uIHBhc3NlcworYW5kIGZhbHNlIG90aGVyd2lzZS4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTEzMSc+PHR0IGNsYXNzPSdtZXRob2QnPnNldF92ZXJpZnlfZGVwdGg8L3R0PjwvYT48L2I+KDx2YXI+ZGVwdGg8L3Zhcj4pCis8ZGQ+CitTZXQgdGhlIG1heGltdW0gZGVwdGggZm9yIHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiB2ZXJpZmljYXRpb24gdGhhdCBzaGFsbCBiZQorYWxsb3dlZCBmb3IgdGhpcyBDb250ZXh0IG9iamVjdC4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTEzMic+PHR0IGNsYXNzPSdtZXRob2QnPnVzZV9jZXJ0aWZpY2F0ZTwvdHQ+PC9hPjwvYj4oPHZhcj5jZXJ0PC92YXI+KQorPGRkPgorVXNlIHRoZSBjZXJ0aWZpY2F0ZSA8dmFyPmNlcnQ8L3Zhcj4gd2hpY2ggaGFzIHRvIGJlIGEgWDUwOSBvYmplY3QuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xMzMnPjx0dCBjbGFzcz0nbWV0aG9kJz51c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZTwvdHQ+PC9hPjwvYj4oPHZhcj5maWxlPC92YXI+KQorPGRkPgorTG9hZCBhIGNlcnRpZmljYXRlIGNoYWluIGZyb20gPHZhcj5maWxlPC92YXI+IHdoaWNoIG11c3QgYmUgUEVNIGVuY29kZWQuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xMzQnPjx0dCBjbGFzcz0nbWV0aG9kJz51c2VfcHJpdmF0ZWtleTwvdHQ+PC9hPjwvYj4oPHZhcj5wa2V5PC92YXI+KQorPGRkPgorVXNlIHRoZSBwcml2YXRlIGtleSA8dmFyPnBrZXk8L3Zhcj4gd2hpY2ggaGFzIHRvIGJlIGEgUEtleSBvYmplY3QuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xMzUnPjx0dCBjbGFzcz0nbWV0aG9kJz51c2VfY2VydGlmaWNhdGVfZmlsZTwvdHQ+PC9hPjwvYj4oPHZhcj5maWxlPC92YXI+PGJpZz5bPC9iaWc+PHZhcj4sIGZvcm1hdDwvdmFyPjxiaWc+XTwvYmlnPikKKzxkZD4KK0xvYWQgdGhlIGZpcnN0IGNlcnRpZmljYXRlIGZvdW5kIGluIDx2YXI+ZmlsZTwvdmFyPi4gVGhlIGNlcnRpZmljYXRlIG11c3QgYmUgaW4gdGhlCitmb3JtYXQgc3BlY2lmaWVkIGJ5IDx2YXI+Zm9ybWF0PC92YXI+LCB3aGljaCBpcyBlaXRoZXIgPHR0IGNsYXNzPSJjb25zdGFudCI+RklMRVRZUEVfUEVNPC90dD4gb3IKKzx0dCBjbGFzcz0iY29uc3RhbnQiPkZJTEVUWVBFX0FTTjE8L3R0Pi4gVGhlIGRlZmF1bHQgaXMgPHR0IGNsYXNzPSJjb25zdGFudCI+RklMRVRZUEVfUEVNPC90dD4uCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xMzYnPjx0dCBjbGFzcz0nbWV0aG9kJz51c2VfcHJpdmF0ZWtleV9maWxlPC90dD48L2E+PC9iPig8dmFyPmZpbGU8L3Zhcj48YmlnPls8L2JpZz48dmFyPiwgZm9ybWF0PC92YXI+PGJpZz5dPC9iaWc+KQorPGRkPgorTG9hZCB0aGUgZmlyc3QgcHJpdmF0ZSBrZXkgZm91bmQgaW4gPHZhcj5maWxlPC92YXI+LiBUaGUgcHJpdmF0ZSBrZXkgbXVzdCBiZSBpbiB0aGUKK2Zvcm1hdCBzcGVjaWZpZWQgYnkgPHZhcj5mb3JtYXQ8L3Zhcj4sIHdoaWNoIGlzIGVpdGhlciA8dHQgY2xhc3M9ImNvbnN0YW50Ij5GSUxFVFlQRV9QRU08L3R0PiBvcgorPHR0IGNsYXNzPSJjb25zdGFudCI+RklMRVRZUEVfQVNOMTwvdHQ+LiBUaGUgZGVmYXVsdCBpcyA8dHQgY2xhc3M9ImNvbnN0YW50Ij5GSUxFVFlQRV9QRU08L3R0Pi4KKzwvZGw+Cis8UD4KKworPERJViBDTEFTUz0ibmF2aWdhdGlvbiI+Cis8cD48aHI+Cis8dGFibGUgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMiI+Cis8dHI+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1zc2wuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtc3NsLmh0bWwiPjxpbWcgc3JjPSJ1cC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iVXAgT25lIExldmVsIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtY29ubmVjdGlvbi5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1zc2wuaHRtbCI+My4zIFNTTCAgPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXNzbC5odG1sIj4zLjMgU1NMICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1jb25uZWN0aW9uLmh0bWwiPjMuMy4yIENvbm5lY3Rpb24gb2JqZWN0czwvQT4KKzxocj4KKzxzcGFuIGNsYXNzPSJyZWxlYXNlLWluZm8iPlJlbGVhc2UgMC42Ljwvc3Bhbj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL29wZW5zc2wtY3J5cHRvLmh0bWwgYi9kb2MvaHRtbC9vcGVuc3NsLWNyeXB0by5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOGUwYjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9vcGVuc3NsLWNyeXB0by5odG1sCkBAIC0wLDAgKzEsMjkyIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT4zLjEgY3J5cHRvIC0tIEdlbmVyaWMgY3J5cHRvZ3JhcGhpYyBtb2R1bGUgPC90aXRsZT4KKzxNRVRBIE5BTUU9ImRlc2NyaXB0aW9uIiBDT05URU5UPSIzLjEgY3J5cHRvIC0tIEdlbmVyaWMgY3J5cHRvZ3JhcGhpYyBtb2R1bGUgIj4KKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJweU9wZW5TU0wiPgorPE1FVEEgTkFNRT0icmVzb3VyY2UtdHlwZSIgQ09OVEVOVD0iZG9jdW1lbnQiPgorPE1FVEEgTkFNRT0iZGlzdHJpYnV0aW9uIiBDT05URU5UPSJnbG9iYWwiPgorPGxpbmsgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSJweU9wZW5TU0wuY3NzIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0ib3BlbnNzbC1yYW5kLmh0bWwiPgorPExJTksgUkVMPSJwcmV2aW91cyIgaHJlZj0ib3BlbnNzbC5odG1sIj4KKzxMSU5LIFJFTD0idXAiIGhyZWY9Im9wZW5zc2wuaHRtbCI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9Im9wZW5zc2wteDUwOS5odG1sIj4KKzwvaGVhZD4KKzxib2R5PgorPERJViBDTEFTUz0ibmF2aWdhdGlvbiI+Cis8dGFibGUgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMiI+Cis8dHI+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXg1MDkuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wuaHRtbCI+MyBPcGVuU1NMICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wuaHRtbCI+MyBPcGVuU1NMICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC14NTA5Lmh0bWwiPjMuMS4xIFg1MDkgb2JqZWN0czwvQT4KKzxicj48aHI+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorPEgyPjxBIE5BTUU9IlNFQ1RJT04wMDA0MTAwMDAwMDAwMDAwMDAwMDAiPiZuYnNwOzwvQT4KKzxCUj4KKzMuMSA8dHQgY2xhc3M9Im1vZHVsZSI+Y3J5cHRvPC90dD4gLS0gR2VuZXJpYyBjcnlwdG9ncmFwaGljIG1vZHVsZSAKKzwvSDI+CisKKzxQPgorCisKKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNic+PHR0Plg1MDlUeXBlPC90dD48L2E+PC9iPgorPGRkPgorQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBYNTA5IG9iamVjdCB0eXBlLgorPC9kbD4KKworPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC03Jz48dHQgY2xhc3M9J2Z1bmN0aW9uJz5YNTA5PC90dD48L2E+PC9iPigpCis8ZGQ+CitGYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhbiBYNTA5IG9iamVjdC4KKzwvZGw+CisKKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtOCc+PHR0Plg1MDlOYW1lVHlwZTwvdHQ+PC9hPjwvYj4KKzxkZD4KK0EgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgWDUwOU5hbWUgb2JqZWN0IHR5cGUuCis8L2RsPgorCis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTknPjx0dCBjbGFzcz0nZnVuY3Rpb24nPlg1MDlOYW1lPC90dD48L2E+PC9iPig8dmFyPng1MDluYW1lPC92YXI+KQorPGRkPgorRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBjb3B5IG9mIDx2YXI+eDUwOW5hbWU8L3Zhcj4uCis8L2RsPgorCis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTEwJz48dHQ+WDUwOVJlcVR5cGU8L3R0PjwvYT48L2I+Cis8ZGQ+CitBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFg1MDlSZXEgb2JqZWN0IHR5cGUuCis8L2RsPgorCis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTExJz48dHQgY2xhc3M9J2Z1bmN0aW9uJz5YNTA5UmVxPC90dD48L2E+PC9iPigpCis8ZGQ+CitGYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhbiBYNTA5UmVxIG9iamVjdC4KKzwvZGw+CisKKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTInPjx0dD5YNTA5U3RvcmVUeXBlPC90dD48L2E+PC9iPgorPGRkPgorQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBYNTA5U3RvcmUgb2JqZWN0IHR5cGUuCis8L2RsPgorCis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTEzJz48dHQ+UEtleVR5cGU8L3R0PjwvYT48L2I+Cis8ZGQ+CitBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFBLZXkgb2JqZWN0IHR5cGUuCis8L2RsPgorCis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTE0Jz48dHQgY2xhc3M9J2Z1bmN0aW9uJz5QS2V5PC90dD48L2E+PC9iPigpCis8ZGQ+CitGYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFBLZXkgb2JqZWN0LgorPC9kbD4KKworPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xNSc+PHR0PlBLQ1M3VHlwZTwvdHQ+PC9hPjwvYj4KKzxkZD4KK0EgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgUEtDUzcgb2JqZWN0IHR5cGUuCis8L2RsPgorCis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTE2Jz48dHQ+UEtDUzEyVHlwZTwvdHQ+PC9hPjwvYj4KKzxkZD4KK0EgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgUEtDUzEyIG9iamVjdCB0eXBlLgorPC9kbD4KKworPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xNyc+PHR0Plg1MDlFeHRlbnNpb25UeXBlPC90dD48L2E+PC9iPgorPGRkPgorQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBYNTA5RXh0ZW5zaW9uIG9iamVjdCB0eXBlLgorPC9kbD4KKworPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0xOCc+PHR0IGNsYXNzPSdmdW5jdGlvbic+WDUwOUV4dGVuc2lvbjwvdHQ+PC9hPjwvYj4oPHZhcj50eXBlbmFtZSwgY3JpdGljYWwsIHZhbHVlPC92YXI+KQorPGRkPgorRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBYNTA5RXh0ZW5zaW9uIG9iamVjdC4KKzwvZGw+CisKKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMTknPjx0dD5OZXRzY2FwZVNQS0lUeXBlPC90dD48L2E+PC9iPgorPGRkPgorQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBOZXRzY2FwZVNQS0kgb2JqZWN0IHR5cGUuCis8L2RsPgorCis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTIwJz48dHQgY2xhc3M9J2Z1bmN0aW9uJz5OZXRzY2FwZVNQS0k8L3R0PjwvYT48L2I+KDxiaWc+WzwvYmlnPjx2YXI+ZW5jPC92YXI+PGJpZz5dPC9iaWc+KQorPGRkPgorRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBOZXRzY2FwZVNQS0kgb2JqZWN0LiBJZiB0aGUgPHZhcj5lbmM8L3Zhcj4gYXJndW1lbnQKK2lzIHByZXNlbnQsIGl0IHNob3VsZCBiZSBhIGJhc2U2NC1lbmNvZGVkIHN0cmluZyByZXByZXNlbnRpbmcgYSBOZXRzY2FwZVNQS0kKK29iamVjdCwgYXMgcmV0dXJuZWQgYnkgdGhlIDx0dCBjbGFzcz0ibWV0aG9kIj5iNjRfZW5jb2RlPC90dD4gbWV0aG9kLgorPC9kbD4KKworPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0yMSc+PHR0PkZJTEVUWVBFX1BFTTwvdHQ+PC9hPjwvYj4KKzxkZD4KKzxkdD48Yj48YSBuYW1lPSdsMmgtMzInPjx0dD5GSUxFVFlQRV9BU04xPC90dD48L2E+PC9iPjxkZD4KK0ZpbGUgdHlwZSBjb25zdGFudHMuCis8L2RsPgorCis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTIyJz48dHQ+VFlQRV9SU0E8L3R0PjwvYT48L2I+Cis8ZGQ+Cis8ZHQ+PGI+PGEgbmFtZT0nbDJoLTMzJz48dHQ+VFlQRV9EU0E8L3R0PjwvYT48L2I+PGRkPgorS2V5IHR5cGUgY29uc3RhbnRzLgorPC9kbD4KKworPFA+Cis8ZGw+PGR0PjxiPmV4Y2VwdGlvbiA8YSBuYW1lPSdsMmgtMjMnPjx0dCBjbGFzcz0nZXhjZXB0aW9uJz5FcnJvcjwvdHQ+PC9hPjwvYj4KKzxkZD4KK0dlbmVyaWMgZXhjZXB0aW9uIHVzZWQgaW4gdGhlIDx0dCBjbGFzcz0ibW9kdWxlIj5jcnlwdG88L3R0PiBtb2R1bGUuCis8L2RsPgorCis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTI0Jz48dHQgY2xhc3M9J2Z1bmN0aW9uJz5kdW1wX2NlcnRpZmljYXRlPC90dD48L2E+PC9iPig8dmFyPnR5cGUsIGNlcnQ8L3Zhcj4pCis8ZGQ+CitEdW1wIHRoZSBjZXJ0aWZpY2F0ZSA8dmFyPmNlcnQ8L3Zhcj4gaW50byBhIGJ1ZmZlciBzdHJpbmcgZW5jb2RlZCB3aXRoIHRoZSB0eXBlCis8dmFyPnR5cGU8L3Zhcj4uCis8L2RsPgorCis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTI1Jz48dHQgY2xhc3M9J2Z1bmN0aW9uJz5kdW1wX2NlcnRpZmljYXRlX3JlcXVlc3Q8L3R0PjwvYT48L2I+KDx2YXI+dHlwZSwgcmVxPC92YXI+KQorPGRkPgorRHVtcCB0aGUgY2VydGlmaWNhdGUgcmVxdWVzdCA8dmFyPnJlcTwvdmFyPiBpbnRvIGEgYnVmZmVyIHN0cmluZyBlbmNvZGVkIHdpdGggdGhlCit0eXBlIDx2YXI+dHlwZTwvdmFyPi4KKzwvZGw+CisKKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMjYnPjx0dCBjbGFzcz0nZnVuY3Rpb24nPmR1bXBfcHJpdmF0ZWtleTwvdHQ+PC9hPjwvYj4oPHZhcj50eXBlLCBwa2V5PC92YXI+PGJpZz5bPC9iaWc+PHZhcj4sIGNpcGhlciwgcGFzc3BocmFzZTwvdmFyPjxiaWc+XTwvYmlnPikKKzxkZD4KK0R1bXAgdGhlIHByaXZhdGUga2V5IDx2YXI+cGtleTwvdmFyPiBpbnRvIGEgYnVmZmVyIHN0cmluZyBlbmNvZGVkIHdpdGggdGhlIHR5cGUKKzx2YXI+dHlwZTwvdmFyPiwgb3B0aW9uYWxseSAoaWYgPHZhcj50eXBlPC92YXI+IGlzIDx0dCBjbGFzcz0iY29uc3RhbnQiPkZJTEVUWVBFX1BFTTwvdHQ+KSBlbmNyeXB0aW5nIGl0Cit1c2luZyA8dmFyPmNpcGhlcjwvdmFyPiBhbmQgPHZhcj5wYXNzcGhyYXNlPC92YXI+LgorCis8UD4KKzx2YXI+cGFzc3BocmFzZTwvdmFyPiBtdXN0IGJlIGVpdGhlciBhIHN0cmluZyBvciBhIGNhbGxiYWNrIGZvciBwcm92aWRpbmcgdGhlCitwYXNzIHBocmFzZS4KKzwvZGw+CisKKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMjcnPjx0dCBjbGFzcz0nZnVuY3Rpb24nPmxvYWRfY2VydGlmaWNhdGU8L3R0PjwvYT48L2I+KDx2YXI+dHlwZSwgYnVmZmVyPC92YXI+KQorPGRkPgorTG9hZCBhIGNlcnRpZmljYXRlIChYNTA5KSBmcm9tIHRoZSBzdHJpbmcgPHZhcj5idWZmZXI8L3Zhcj4gZW5jb2RlZCB3aXRoIHRoZQordHlwZSA8dmFyPnR5cGU8L3Zhcj4uCis8L2RsPgorCis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTI4Jz48dHQgY2xhc3M9J2Z1bmN0aW9uJz5sb2FkX2NlcnRpZmljYXRlX3JlcXVlc3Q8L3R0PjwvYT48L2I+KDx2YXI+dHlwZSwgYnVmZmVyPC92YXI+KQorPGRkPgorTG9hZCBhIGNlcnRpZmljYXRlIHJlcXVlc3QgKFg1MDlSZXEpIGZyb20gdGhlIHN0cmluZyA8dmFyPmJ1ZmZlcjwvdmFyPiBlbmNvZGVkIHdpdGgKK3RoZSB0eXBlIDx2YXI+dHlwZTwvdmFyPi4KKzwvZGw+CisKKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMjknPjx0dCBjbGFzcz0nZnVuY3Rpb24nPmxvYWRfcHJpdmF0ZWtleTwvdHQ+PC9hPjwvYj4oPHZhcj50eXBlLCBidWZmZXI8L3Zhcj48YmlnPls8L2JpZz48dmFyPiwgcGFzc3BocmFzZTwvdmFyPjxiaWc+XTwvYmlnPikKKzxkZD4KK0xvYWQgYSBwcml2YXRlIGtleSAoUEtleSkgZnJvbSB0aGUgc3RyaW5nIDx2YXI+YnVmZmVyPC92YXI+IGVuY29kZWQgd2l0aAordGhlIHR5cGUgPHZhcj50eXBlPC92YXI+IChtdXN0IGJlIG9uZSBvZiA8dHQgY2xhc3M9ImNvbnN0YW50Ij5GSUxFVFlQRV9QRU08L3R0PiBhbmQKKzx0dCBjbGFzcz0iY29uc3RhbnQiPkZJTEVUWVBFX0FTTjE8L3R0PikuCisKKzxQPgorPHZhcj5wYXNzcGhyYXNlPC92YXI+IG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2sgZm9yIHByb3ZpZGluZyB0aGUKK3Bhc3MgcGhyYXNlLgorPC9kbD4KKworPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0zMCc+PHR0IGNsYXNzPSdmdW5jdGlvbic+bG9hZF9wa2NzN19kYXRhPC90dD48L2E+PC9iPig8dmFyPnR5cGUsIGJ1ZmZlcjwvdmFyPikKKzxkZD4KK0xvYWQgcGtjczcgZGF0YSBmcm9tIHRoZSBzdHJpbmcgPHZhcj5idWZmZXI8L3Zhcj4gZW5jb2RlZCB3aXRoIHRoZSB0eXBlIDx2YXI+dHlwZTwvdmFyPi4KKzwvZGw+CisKKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMzEnPjx0dCBjbGFzcz0nZnVuY3Rpb24nPmxvYWRfcGtjczEyPC90dD48L2E+PC9iPig8dmFyPmJ1ZmZlcjwvdmFyPjxiaWc+WzwvYmlnPjx2YXI+LCBwYXNzcGhyYXNlPC92YXI+PGJpZz5dPC9iaWc+KQorPGRkPgorTG9hZCBwa2NzMTIgZGF0YSBmcm9tIHRoZSBzdHJpbmcgPHZhcj5idWZmZXI8L3Zhcj4uIElmIHRoZSBwa2NzMTIgc3RydWN0dXJlIGlzCitlbmNyeXB0ZWQsIGEgPHZhcj5wYXNzcGhyYXNlPC92YXI+IG11c3QgYmUgaW5jbHVkZWQuCis8L2RsPgorCis8UD4KKworPHA+PGhyPgorCis8IS0tVGFibGUgb2YgQ2hpbGQtTGlua3MtLT4KKzxBIE5BTUU9IkNISUxEX0xJTktTIj48U1RST05HPlN1YnNlY3Rpb25zPC9TVFJPTkc+PC9BPgorCis8VUwgQ0xBU1M9IkNoaWxkTGlua3MiPgorPExJPjxBIE5BTUU9InRleDJodG1sMTM3IgorICBocmVmPSJvcGVuc3NsLXg1MDkuaHRtbCI+My4xLjEgWDUwOSBvYmplY3RzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDEzOCIKKyAgaHJlZj0ib3BlbnNzbC14NTA5bmFtZS5odG1sIj4zLjEuMiBYNTA5TmFtZSBvYmplY3RzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDEzOSIKKyAgaHJlZj0ib3BlbnNzbC14NTA5cmVxLmh0bWwiPjMuMS4zIFg1MDlSZXEgb2JqZWN0cyA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwxNDAiCisgIGhyZWY9Im9wZW5zc2wteDUwOXN0b3JlLmh0bWwiPjMuMS40IFg1MDlTdG9yZSBvYmplY3RzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDE0MSIKKyAgaHJlZj0ib3BlbnNzbC1wa2V5Lmh0bWwiPjMuMS41IFBLZXkgb2JqZWN0cyA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwxNDIiCisgIGhyZWY9Im9wZW5zc2wtcGtjczcuaHRtbCI+My4xLjYgUEtDUzcgb2JqZWN0cyA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwxNDMiCisgIGhyZWY9Im9wZW5zc2wtcGtjczEyLmh0bWwiPjMuMS43IFBLQ1MxMiBvYmplY3RzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDE0NCIKKyAgaHJlZj0ib3BlbnNzbC01MDlleHQuaHRtbCI+My4xLjggWDUwOUV4dGVuc2lvbiBvYmplY3RzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDE0NSIKKyAgaHJlZj0ib3BlbnNzbC1uZXRzY2FwZS1zcGtpLmh0bWwiPjMuMS45IE5ldHNjYXBlU1BLSSBvYmplY3RzIDwvQT4KKzwvVUw+Cis8IS0tRW5kIG9mIFRhYmxlIG9mIENoaWxkLUxpbmtzLS0+CisKKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHA+PGhyPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wuaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC14NTA5Lmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLmh0bWwiPjMgT3BlblNTTCAgPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLmh0bWwiPjMgT3BlblNTTCAgPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wteDUwOS5odG1sIj4zLjEuMSBYNTA5IG9iamVjdHM8L0E+Cis8aHI+Cis8c3BhbiBjbGFzcz0icmVsZWFzZS1pbmZvIj5SZWxlYXNlIDAuNi48L3NwYW4+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9vcGVuc3NsLW5ldHNjYXBlLXNwa2kuaHRtbCBiL2RvYy9odG1sL29wZW5zc2wtbmV0c2NhcGUtc3BraS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMDhlMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9vcGVuc3NsLW5ldHNjYXBlLXNwa2kuaHRtbApAQCAtMCwwICsxLDExMiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+My4xLjkgTmV0c2NhcGVTUEtJIG9iamVjdHMgPC90aXRsZT4KKzxNRVRBIE5BTUU9ImRlc2NyaXB0aW9uIiBDT05URU5UPSIzLjEuOSBOZXRzY2FwZVNQS0kgb2JqZWN0cyAiPgorPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9InB5T3BlblNTTCI+Cis8TUVUQSBOQU1FPSJyZXNvdXJjZS10eXBlIiBDT05URU5UPSJkb2N1bWVudCI+Cis8TUVUQSBOQU1FPSJkaXN0cmlidXRpb24iIENPTlRFTlQ9Imdsb2JhbCI+Cis8bGluayByZWw9IlNUWUxFU0hFRVQiIGhyZWY9InB5T3BlblNTTC5jc3MiPgorPExJTksgUkVMPSJwcmV2aW91cyIgaHJlZj0ib3BlbnNzbC01MDlleHQuaHRtbCI+Cis8TElOSyBSRUw9InVwIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0ib3BlbnNzbC1yYW5kLmh0bWwiPgorPC9oZWFkPgorPGJvZHk+Cis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLTUwOWV4dC5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1yYW5kLmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLTUwOWV4dC5odG1sIj4zLjEuOCBYNTA5RXh0ZW5zaW9uIG9iamVjdHM8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtY3J5cHRvLmh0bWwiPjMuMSBjcnlwdG8gIDwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXJhbmQuaHRtbCI+My4yIHJhbmQgIDwvQT4KKzxicj48aHI+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8SDM+PEEgTkFNRT0iU0VDVElPTjAwMDQxOTAwMDAwMDAwMDAwMDAwMCI+Jm5ic3A7PC9BPgorPEJSPgorMy4xLjkgTmV0c2NhcGVTUEtJIG9iamVjdHMgCis8L0gzPgorPFA+Cis8RU0+PEVNPjxFTT5OZXRzY2FwZVNQS0kgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKzwvRU0+PC9FTT48L0VNPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC03Nic+PHR0IGNsYXNzPSdtZXRob2QnPmI2NF9lbmNvZGU8L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JldHVybiBhIGJhc2U2NC1lbmNvZGVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0LgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNzcnPjx0dCBjbGFzcz0nbWV0aG9kJz5nZXRfcHVia2V5PC90dD48L2E+PC9iPigpCis8ZGQ+CitSZXR1cm4gdGhlIHB1YmxpYyBrZXkgb2Ygb2JqZWN0LgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNzgnPjx0dCBjbGFzcz0nbWV0aG9kJz5zZXRfcHVia2V5PC90dD48L2E+PC9iPig8dmFyPmtleTwvdmFyPikKKzxkZD4KK1NldCB0aGUgcHVibGljIGtleSBvZiB0aGUgb2JqZWN0IHRvIDx2YXI+a2V5PC92YXI+LgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNzknPjx0dCBjbGFzcz0nbWV0aG9kJz5zaWduPC90dD48L2E+PC9iPig8dmFyPmtleSwgZGlnZXN0X25hbWU8L3Zhcj4pCis8ZGQ+CitTaWduIHRoZSBOZXRzY2FwZVNQS0kgb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiA8dmFyPmtleTwvdmFyPiBhbmQgPHZhcj5kaWdlc3RfbmFtZTwvdmFyPi4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTgwJz48dHQgY2xhc3M9J21ldGhvZCc+dmVyaWZ5PC90dD48L2E+PC9iPig8dmFyPmtleTwvdmFyPikKKzxkZD4KK1ZlcmlmeSB0aGUgTmV0c2NhcGVTUEtJIG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4gPHZhcj5rZXk8L3Zhcj4uCis8L2RsPgorPFA+CisKKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHA+PGhyPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtNTA5ZXh0Lmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXJhbmQuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtNTA5ZXh0Lmh0bWwiPjMuMS44IFg1MDlFeHRlbnNpb24gb2JqZWN0czwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+My4xIGNyeXB0byAgPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtcmFuZC5odG1sIj4zLjIgcmFuZCAgPC9BPgorPGhyPgorPHNwYW4gY2xhc3M9InJlbGVhc2UtaW5mbyI+UmVsZWFzZSAwLjYuPC9zcGFuPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKworPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvb3BlbnNzbC1wa2NzMTIuaHRtbCBiL2RvYy9odG1sL29wZW5zc2wtcGtjczEyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4MTY1OQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL29wZW5zc2wtcGtjczEyLmh0bWwKQEAgLTAsMCArMSwxMDQgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPjMuMS43IFBLQ1MxMiBvYmplY3RzIDwvdGl0bGU+Cis8TUVUQSBOQU1FPSJkZXNjcmlwdGlvbiIgQ09OVEVOVD0iMy4xLjcgUEtDUzEyIG9iamVjdHMgIj4KKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJweU9wZW5TU0wiPgorPE1FVEEgTkFNRT0icmVzb3VyY2UtdHlwZSIgQ09OVEVOVD0iZG9jdW1lbnQiPgorPE1FVEEgTkFNRT0iZGlzdHJpYnV0aW9uIiBDT05URU5UPSJnbG9iYWwiPgorPGxpbmsgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSJweU9wZW5TU0wuY3NzIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0ib3BlbnNzbC01MDlleHQuaHRtbCI+Cis8TElOSyBSRUw9InByZXZpb3VzIiBocmVmPSJvcGVuc3NsLXBrY3M3Lmh0bWwiPgorPExJTksgUkVMPSJ1cCIgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9Im9wZW5zc2wtNTA5ZXh0Lmh0bWwiPgorPC9oZWFkPgorPGJvZHk+Cis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXBrY3M3Lmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLTUwOWV4dC5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1wa2NzNy5odG1sIj4zLjEuNiBQS0NTNyBvYmplY3RzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4zLjEgY3J5cHRvICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC01MDlleHQuaHRtbCI+My4xLjggWDUwOUV4dGVuc2lvbiBvYmplY3RzPC9BPgorPGJyPjxocj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzxIMz48QSBOQU1FPSJTRUNUSU9OMDAwNDE3MDAwMDAwMDAwMDAwMDAwIj4mbmJzcDs8L0E+Cis8QlI+CiszLjEuNyBQS0NTMTIgb2JqZWN0cyAKKzwvSDM+Cis8UD4KKzxFTT48RU0+PEVNPlBLQ1MxMiBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorPC9FTT48L0VNPjwvRU0+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTcyJz48dHQgY2xhc3M9J21ldGhvZCc+Z2V0X2NlcnRpZmljYXRlPC90dD48L2E+PC9iPigpCis8ZGQ+CitSZXR1cm4gY2VydGlmaWNhdGUgcG9ydGlvbiBvZiB0aGUgUEtDUzEyIHN0cnVjdHVyZS4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTczJz48dHQgY2xhc3M9J21ldGhvZCc+Z2V0X3ByaXZhdGVrZXk8L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JldHVybiBwcml2YXRlIGtleSBwb3J0aW9uIG9mIHRoZSBQS0NTMTIgc3RydWN0dXJlCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC03NCc+PHR0IGNsYXNzPSdtZXRob2QnPmdldF9jYV9jZXJ0aWZpY2F0ZXM8L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JldHVybiBDQSBjZXJ0aWZpY2F0ZXMgd2l0aGluIHRoZSBQS0NTMTIgb2JqZWN0IGFzIGEgdHVwbGUuIFJldHVybnMKK05vbmUgaWYgbm8gQ0EgY2VydGlmaWNhdGVzIGFyZSBwcmVzZW50LgorPC9kbD4KKzxQPgorCis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzxwPjxocj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXBrY3M3Lmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLTUwOWV4dC5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1wa2NzNy5odG1sIj4zLjEuNiBQS0NTNyBvYmplY3RzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4zLjEgY3J5cHRvICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC01MDlleHQuaHRtbCI+My4xLjggWDUwOUV4dGVuc2lvbiBvYmplY3RzPC9BPgorPGhyPgorPHNwYW4gY2xhc3M9InJlbGVhc2UtaW5mbyI+UmVsZWFzZSAwLjYuPC9zcGFuPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKworPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvb3BlbnNzbC1wa2NzNy5odG1sIGIvZG9jL2h0bWwvb3BlbnNzbC1wa2NzNy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNWJmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9vcGVuc3NsLXBrY3M3Lmh0bWwKQEAgLTAsMCArMSwxMTMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPjMuMS42IFBLQ1M3IG9iamVjdHMgPC90aXRsZT4KKzxNRVRBIE5BTUU9ImRlc2NyaXB0aW9uIiBDT05URU5UPSIzLjEuNiBQS0NTNyBvYmplY3RzICI+Cis8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0icHlPcGVuU1NMIj4KKzxNRVRBIE5BTUU9InJlc291cmNlLXR5cGUiIENPTlRFTlQ9ImRvY3VtZW50Ij4KKzxNRVRBIE5BTUU9ImRpc3RyaWJ1dGlvbiIgQ09OVEVOVD0iZ2xvYmFsIj4KKzxsaW5rIHJlbD0iU1RZTEVTSEVFVCIgaHJlZj0icHlPcGVuU1NMLmNzcyI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9Im9wZW5zc2wtcGtjczEyLmh0bWwiPgorPExJTksgUkVMPSJwcmV2aW91cyIgaHJlZj0ib3BlbnNzbC1wa2V5Lmh0bWwiPgorPExJTksgUkVMPSJ1cCIgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9Im9wZW5zc2wtcGtjczEyLmh0bWwiPgorPC9oZWFkPgorPGJvZHk+Cis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXBrZXkuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtY3J5cHRvLmh0bWwiPjxpbWcgc3JjPSJ1cC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iVXAgT25lIExldmVsIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtcGtjczEyLmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXBrZXkuaHRtbCI+My4xLjUgUEtleSBvYmplY3RzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4zLjEgY3J5cHRvICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1wa2NzMTIuaHRtbCI+My4xLjcgUEtDUzEyIG9iamVjdHM8L0E+Cis8YnI+PGhyPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKworPEgzPjxBIE5BTUU9IlNFQ1RJT04wMDA0MTYwMDAwMDAwMDAwMDAwMDAiPiZuYnNwOzwvQT4KKzxCUj4KKzMuMS42IFBLQ1M3IG9iamVjdHMgCis8L0gzPgorPFA+Cis8RU0+PEVNPjxFTT5QS0NTNyBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorPC9FTT48L0VNPjwvRU0+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTY3Jz48dHQgY2xhc3M9J21ldGhvZCc+dHlwZV9pc19zaWduZWQ8L3R0PjwvYT48L2I+KCkKKzxkZD4KK0ZJWE1FCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC02OCc+PHR0IGNsYXNzPSdtZXRob2QnPnR5cGVfaXNfZW52ZWxvcGVkPC90dD48L2E+PC9iPigpCis8ZGQ+CitGSVhNRQorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNjknPjx0dCBjbGFzcz0nbWV0aG9kJz50eXBlX2lzX3NpZ25lZEFuZEVudmVsb3BlZDwvdHQ+PC9hPjwvYj4oKQorPGRkPgorRklYTUUKKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTcwJz48dHQgY2xhc3M9J21ldGhvZCc+dHlwZV9pc19kYXRhPC90dD48L2E+PC9iPigpCis8ZGQ+CitGSVhNRQorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNzEnPjx0dCBjbGFzcz0nbWV0aG9kJz5nZXRfdHlwZV9uYW1lPC90dD48L2E+PC9iPigpCis8ZGQ+CitHZXQgdGhlIHR5cGUgbmFtZSBvZiB0aGUgUEtDUzcuCis8L2RsPgorPFA+CisKKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHA+PGhyPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtcGtleS5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1wa2NzMTIuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtcGtleS5odG1sIj4zLjEuNSBQS2V5IG9iamVjdHM8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtY3J5cHRvLmh0bWwiPjMuMSBjcnlwdG8gIDwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXBrY3MxMi5odG1sIj4zLjEuNyBQS0NTMTIgb2JqZWN0czwvQT4KKzxocj4KKzxzcGFuIGNsYXNzPSJyZWxlYXNlLWluZm8iPlJlbGVhc2UgMC42Ljwvc3Bhbj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL29wZW5zc2wtcGtleS5odG1sIGIvZG9jL2h0bWwvb3BlbnNzbC1wa2V5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZjYTllMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL29wZW5zc2wtcGtleS5odG1sCkBAIC0wLDAgKzEsMTA0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT4zLjEuNSBQS2V5IG9iamVjdHMgPC90aXRsZT4KKzxNRVRBIE5BTUU9ImRlc2NyaXB0aW9uIiBDT05URU5UPSIzLjEuNSBQS2V5IG9iamVjdHMgIj4KKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJweU9wZW5TU0wiPgorPE1FVEEgTkFNRT0icmVzb3VyY2UtdHlwZSIgQ09OVEVOVD0iZG9jdW1lbnQiPgorPE1FVEEgTkFNRT0iZGlzdHJpYnV0aW9uIiBDT05URU5UPSJnbG9iYWwiPgorPGxpbmsgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSJweU9wZW5TU0wuY3NzIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0ib3BlbnNzbC1wa2NzNy5odG1sIj4KKzxMSU5LIFJFTD0icHJldmlvdXMiIGhyZWY9Im9wZW5zc2wteDUwOXN0b3JlLmh0bWwiPgorPExJTksgUkVMPSJ1cCIgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9Im9wZW5zc2wtcGtjczcuaHRtbCI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wteDUwOXN0b3JlLmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXBrY3M3Lmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXg1MDlzdG9yZS5odG1sIj4zLjEuNCBYNTA5U3RvcmUgb2JqZWN0czwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+My4xIGNyeXB0byAgPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtcGtjczcuaHRtbCI+My4xLjYgUEtDUzcgb2JqZWN0czwvQT4KKzxicj48aHI+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8SDM+PEEgTkFNRT0iU0VDVElPTjAwMDQxNTAwMDAwMDAwMDAwMDAwMCI+Jm5ic3A7PC9BPgorPEJSPgorMy4xLjUgUEtleSBvYmplY3RzIAorPC9IMz4KKzxQPgorPEVNPjxFTT48RU0+VGhlIFBLZXkgb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6Cis8L0VNPjwvRU0+PC9FTT4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNjQnPjx0dCBjbGFzcz0nbWV0aG9kJz5iaXRzPC90dD48L2E+PC9iPigpCis8ZGQ+CitSZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIG9mIHRoZSBrZXkuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC02NSc+PHR0IGNsYXNzPSdtZXRob2QnPmdlbmVyYXRlX2tleTwvdHQ+PC9hPjwvYj4oPHZhcj50eXBlLCBiaXRzPC92YXI+KQorPGRkPgorR2VuZXJhdGUgYSBwdWJsaWMvcHJpdmF0ZSBrZXkgcGFpciBvZiB0aGUgdHlwZSA8dmFyPnR5cGU8L3Zhcj4gKG9uZSBvZgorPHR0IGNsYXNzPSJjb25zdGFudCI+VFlQRV9SU0E8L3R0PiBhbmQgPHR0IGNsYXNzPSJjb25zdGFudCI+VFlQRV9EU0E8L3R0Pikgd2l0aCB0aGUgc2l6ZSA8dmFyPmJpdHM8L3Zhcj4uCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC02Nic+PHR0IGNsYXNzPSdtZXRob2QnPnR5cGU8L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JldHVybiB0aGUgdHlwZSBvZiB0aGUga2V5LgorPC9kbD4KKzxQPgorCis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzxwPjxocj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXg1MDlzdG9yZS5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1wa2NzNy5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC14NTA5c3RvcmUuaHRtbCI+My4xLjQgWDUwOVN0b3JlIG9iamVjdHM8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtY3J5cHRvLmh0bWwiPjMuMSBjcnlwdG8gIDwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXBrY3M3Lmh0bWwiPjMuMS42IFBLQ1M3IG9iamVjdHM8L0E+Cis8aHI+Cis8c3BhbiBjbGFzcz0icmVsZWFzZS1pbmZvIj5SZWxlYXNlIDAuNi48L3NwYW4+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9vcGVuc3NsLXJhbmQuaHRtbCBiL2RvYy9odG1sL29wZW5zc2wtcmFuZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMGY2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9vcGVuc3NsLXJhbmQuaHRtbApAQCAtMCwwICsxLDE0NSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+My4yIHJhbmQgLS0gQW4gaW50ZXJmYWNlIHRvIHRoZSBPcGVuU1NMIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciA8L3RpdGxlPgorPE1FVEEgTkFNRT0iZGVzY3JpcHRpb24iIENPTlRFTlQ9IjMuMiByYW5kIC0tIEFuIGludGVyZmFjZSB0byB0aGUgT3BlblNTTCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgIj4KKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJweU9wZW5TU0wiPgorPE1FVEEgTkFNRT0icmVzb3VyY2UtdHlwZSIgQ09OVEVOVD0iZG9jdW1lbnQiPgorPE1FVEEgTkFNRT0iZGlzdHJpYnV0aW9uIiBDT05URU5UPSJnbG9iYWwiPgorPGxpbmsgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSJweU9wZW5TU0wuY3NzIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0ib3BlbnNzbC1zc2wuaHRtbCI+Cis8TElOSyBSRUw9InByZXZpb3VzIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4KKzxMSU5LIFJFTD0idXAiIGhyZWY9Im9wZW5zc2wuaHRtbCI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9Im9wZW5zc2wtc3NsLmh0bWwiPgorPC9oZWFkPgorPGJvZHk+Cis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLW5ldHNjYXBlLXNwa2kuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wuaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1zc2wuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtbmV0c2NhcGUtc3BraS5odG1sIj4zLjEuOSBOZXRzY2FwZVNQS0kgb2JqZWN0czwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC5odG1sIj4zIE9wZW5TU0wgIDwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXNzbC5odG1sIj4zLjMgU1NMICA8L0E+Cis8YnI+PGhyPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKworPEgyPjxBIE5BTUU9IlNFQ1RJT04wMDA0MjAwMDAwMDAwMDAwMDAwMDAiPiZuYnNwOzwvQT4KKzxCUj4KKzMuMiA8dHQgY2xhc3M9Im1vZHVsZSI+cmFuZDwvdHQ+IC0tIEFuIGludGVyZmFjZSB0byB0aGUgT3BlblNTTCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgCis8L0gyPgorPFA+Cis8RU0+PEVNPjxFTT4KKzwvRU0+PC9FTT48L0VNPgorPFA+Cis8RU0+PEVNPjxFTT5UaGlzIG1vZHVsZSBoYW5kbGVzIHRoZSBPcGVuU1NMIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAoUFJORykgYW5kCitkZWNsYXJlcyB0aGUgZm9sbG93aW5nOgorPC9FTT48L0VNPjwvRU0+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTgyJz48dHQgY2xhc3M9J2Z1bmN0aW9uJz5hZGQ8L3R0PjwvYT48L2I+KDx2YXI+c3RyaW5nLCBlbnRyb3B5PC92YXI+KQorPGRkPgorTWl4IGJ5dGVzIGZyb20gPHZhcj5zdHJpbmc8L3Zhcj4gaW50byB0aGUgUFJORyBzdGF0ZS4gVGhlIDx2YXI+ZW50cm9weTwvdmFyPiBhcmd1bWVudCBpcworKHRoZSBsb3dlciBib3VuZCBvZikgYW4gZXN0aW1hdGUgb2YgaG93IG11Y2ggcmFuZG9tbmVzcyBpcyBjb250YWluZWQgaW4KKzx2YXI+c3RyaW5nPC92YXI+LCBtZWFzdXJlZCBpbiBieXRlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBlLmcuIDxhIGNsYXNzPSJyZmMiIG5hbWU9InJmY3JlZi0xNzg1IgoraHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTc1MC50eHQiPlJGQyAxNzUwPC9hPi4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTgzJz48dHQgY2xhc3M9J2Z1bmN0aW9uJz5lZ2Q8L3R0PjwvYT48L2I+KDx2YXI+cGF0aDwvdmFyPjxiaWc+WzwvYmlnPjx2YXI+LCBieXRlczwvdmFyPjxiaWc+XTwvYmlnPikKKzxkZD4KK1F1ZXJ5IHRoZSBFbnRyb3B5IEdhdGhlcmluZyBEYWVtb248QSBOQU1FPSJ0ZXgyaHRtbDMiCisgIEhSRUY9IiNmb290ODk4Ij48U1VQPjM8L1NVUD48L0E+IG9uIHNvY2tldCA8dmFyPnBhdGg8L3Zhcj4gZm9yIDx2YXI+Ynl0ZXM8L3Zhcj4KK2J5dGVzIG9mIHJhbmRvbSBkYXRhIGFuZCBhbmQgdXNlcyA8dHQgY2xhc3M9ImZ1bmN0aW9uIj5hZGQ8L3R0PiB0byBzZWVkIHRoZSBQUk5HLiBUaGUgZGVmYXVsdAordmFsdWUgb2YgPHZhcj5ieXRlczwvdmFyPiBpcyAyNTUuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC04NCc+PHR0IGNsYXNzPSdmdW5jdGlvbic+bG9hZF9maWxlPC90dD48L2E+PC9iPig8dmFyPnBhdGg8L3Zhcj48YmlnPls8L2JpZz48dmFyPiwgYnl0ZXM8L3Zhcj48YmlnPl08L2JpZz4pCis8ZGQ+CitSZWFkIDx2YXI+Ynl0ZXM8L3Zhcj4gYnl0ZXMgKG9yIGFsbCBvZiBpdCwgaWYgPHZhcj5ieXRlczwvdmFyPiBpcyBuZWdhdGl2ZSkgb2YgZGF0YSBmcm9tCit0aGUgZmlsZSA8dmFyPnBhdGg8L3Zhcj4gdG8gc2VlZCB0aGUgUFJORy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgPHZhcj5ieXRlczwvdmFyPiBpcyAtMS4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTg1Jz48dHQgY2xhc3M9J2Z1bmN0aW9uJz5zY3JlZW48L3R0PjwvYT48L2I+KCkKKzxkZD4KK0FkZCB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgc2NyZWVuIHRvIHRoZSBQUk5HIHN0YXRlLgorQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtODYnPjx0dCBjbGFzcz0nZnVuY3Rpb24nPnNlZWQ8L3R0PjwvYT48L2I+KDx2YXI+c3RyaW5nPC92YXI+KQorPGRkPgorVGhpcyBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgPHR0IGNsYXNzPSJmdW5jdGlvbiI+YWRkPC90dD4gd2l0aCA8dmFyPmVudHJvcHk8L3Zhcj4gYXMgdGhlIGxlbmd0aAorb2YgdGhlIHN0cmluZy4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTg3Jz48dHQgY2xhc3M9J2Z1bmN0aW9uJz5zdGF0dXM8L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JldHVybnMgdHJ1ZSBpZiB0aGUgUFJORyBoYXMgYmVlbiBzZWVkZWQgd2l0aCBlbm91Z2ggZGF0YSwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTg4Jz48dHQgY2xhc3M9J2Z1bmN0aW9uJz53cml0ZV9maWxlPC90dD48L2E+PC9iPig8dmFyPnBhdGg8L3Zhcj4pCis8ZGQ+CitXcml0ZSBhIG51bWJlciBvZiByYW5kb20gYnl0ZXMgKGN1cnJlbnRseSAxMDI0KSB0byB0aGUgZmlsZSA8dmFyPnBhdGg8L3Zhcj4uIFRoaXMKK2ZpbGUgY2FuIHRoZW4gYmUgdXNlZCB3aXRoIDx0dCBjbGFzcz0iZnVuY3Rpb24iPmxvYWRfZmlsZTwvdHQ+IHRvIHNlZWQgdGhlIFBSTkcgYWdhaW4uCis8L2RsPgorPFA+Cis8QlI+PEhSPjxIND5Gb290bm90ZXM8L0g0PgorPERMPgorPERUPjxBIE5BTUU9ImZvb3Q4OTgiPi4uLiBEYWVtb248L0E+PEEKKyBocmVmPSJvcGVuc3NsLXJhbmQuaHRtbCN0ZXgyaHRtbDMiPjxTVVA+MzwvU1VQPjwvQT48L0RUPgorPEREPlNlZQorPGEgY2xhc3M9InVybCIgaHJlZj0iaHR0cDovL3d3dy5sb3RoYXIuY29tL3RlY2gvY3J5cHRvLyI+aHR0cDovL3d3dy5sb3RoYXIuY29tL3RlY2gvY3J5cHRvLzwvYT4KKworPC9ERD4KKzwvREw+Cis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzxwPjxocj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLW5ldHNjYXBlLXNwa2kuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wuaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1zc2wuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtbmV0c2NhcGUtc3BraS5odG1sIj4zLjEuOSBOZXRzY2FwZVNQS0kgb2JqZWN0czwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC5odG1sIj4zIE9wZW5TU0wgIDwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXNzbC5odG1sIj4zLjMgU1NMICA8L0E+Cis8aHI+Cis8c3BhbiBjbGFzcz0icmVsZWFzZS1pbmZvIj5SZWxlYXNlIDAuNi48L3NwYW4+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9vcGVuc3NsLXNzbC5odG1sIGIvZG9jL2h0bWwvb3BlbnNzbC1zc2wuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWVlMDAwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvb3BlbnNzbC1zc2wuaHRtbApAQCAtMCwwICsxLDIzMCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+My4zIFNTTCAtLSBBbiBpbnRlcmZhY2UgdG8gdGhlIFNTTC1zcGVjaWZpYyBwYXJ0cyBvZiBPcGVuU1NMIDwvdGl0bGU+Cis8TUVUQSBOQU1FPSJkZXNjcmlwdGlvbiIgQ09OVEVOVD0iMy4zIFNTTCAtLSBBbiBpbnRlcmZhY2UgdG8gdGhlIFNTTC1zcGVjaWZpYyBwYXJ0cyBvZiBPcGVuU1NMICI+Cis8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0icHlPcGVuU1NMIj4KKzxNRVRBIE5BTUU9InJlc291cmNlLXR5cGUiIENPTlRFTlQ9ImRvY3VtZW50Ij4KKzxNRVRBIE5BTUU9ImRpc3RyaWJ1dGlvbiIgQ09OVEVOVD0iZ2xvYmFsIj4KKzxsaW5rIHJlbD0iU1RZTEVTSEVFVCIgaHJlZj0icHlPcGVuU1NMLmNzcyI+Cis8TElOSyBSRUw9InByZXZpb3VzIiBocmVmPSJvcGVuc3NsLXJhbmQuaHRtbCI+Cis8TElOSyBSRUw9InVwIiBocmVmPSJvcGVuc3NsLmh0bWwiPgorPExJTksgUkVMPSJuZXh0IiBocmVmPSJvcGVuc3NsLWNvbnRleHQuaHRtbCI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtcmFuZC5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLWNvbnRleHQuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtcmFuZC5odG1sIj4zLjIgcmFuZCAgPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLmh0bWwiPjMgT3BlblNTTCAgPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtY29udGV4dC5odG1sIj4zLjMuMSBDb250ZXh0IG9iamVjdHM8L0E+Cis8YnI+PGhyPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKzxIMj48QSBOQU1FPSJTRUNUSU9OMDAwNDMwMDAwMDAwMDAwMDAwMDAwIj4mbmJzcDs8L0E+Cis8QlI+CiszLjMgPHR0IGNsYXNzPSJtb2R1bGUiPlNTTDwvdHQ+IC0tIEFuIGludGVyZmFjZSB0byB0aGUgU1NMLXNwZWNpZmljIHBhcnRzIG9mIE9wZW5TU0wgCis8L0gyPgorPFA+Cis8RU0+PEVNPjxFTT4KKzwvRU0+PC9FTT48L0VNPgorPFA+Cis8RU0+PEVNPjxFTT5UaGlzIG1vZHVsZSBoYW5kbGVzIHRoaW5ncyBzcGVjaWZpYyB0byBTU0wuIFRoZXJlIGFyZSB0d28gb2JqZWN0cyBkZWZpbmVkOgorQ29udGV4dCwgQ29ubmVjdGlvbi4KKzwvRU0+PC9FTT48L0VNPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC05MCc+PHR0PlNTTHYyX01FVEhPRDwvdHQ+PC9hPjwvYj4KKzxkZD4KKzxkdD48Yj48YSBuYW1lPSdsMmgtMTA0Jz48dHQ+U1NMdjNfTUVUSE9EPC90dD48L2E+PC9iPjxkZD4KKzxkdD48Yj48YSBuYW1lPSdsMmgtMTA1Jz48dHQ+U1NMdjIzX01FVEhPRDwvdHQ+PC9hPjwvYj48ZGQ+Cis8ZHQ+PGI+PGEgbmFtZT0nbDJoLTEwNic+PHR0PlRMU3YxX01FVEhPRDwvdHQ+PC9hPjwvYj48ZGQ+CitUaGVzZSBjb25zdGFudHMgcmVwcmVzZW50IHRoZSBkaWZmZXJlbnQgU1NMIG1ldGhvZHMgdG8gdXNlIHdoZW4gY3JlYXRpbmcgYQorY29udGV4dCBvYmplY3QuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC05MSc+PHR0PlZFUklGWV9OT05FPC90dD48L2E+PC9iPgorPGRkPgorPGR0PjxiPjxhIG5hbWU9J2wyaC0xMDcnPjx0dD5WRVJJRllfUEVFUjwvdHQ+PC9hPjwvYj48ZGQ+Cis8ZHQ+PGI+PGEgbmFtZT0nbDJoLTEwOCc+PHR0PlZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVDwvdHQ+PC9hPjwvYj48ZGQ+CitUaGVzZSBjb25zdGFudHMgcmVwcmVzZW50IHRoZSB2ZXJpZmljYXRpb24gbW9kZSB1c2VkIGJ5IHRoZSBDb250ZXh0CitvYmplY3QncyA8dHQgY2xhc3M9Im1ldGhvZCI+c2V0X3ZlcmlmeTwvdHQ+IG1ldGhvZC4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTkyJz48dHQ+RklMRVRZUEVfUEVNPC90dD48L2E+PC9iPgorPGRkPgorPGR0PjxiPjxhIG5hbWU9J2wyaC0xMDknPjx0dD5GSUxFVFlQRV9BU04xPC90dD48L2E+PC9iPjxkZD4KK0ZpbGUgdHlwZSBjb25zdGFudHMgdXNlZCB3aXRoIHRoZSA8dHQgY2xhc3M9Im1ldGhvZCI+dXNlX2NlcnRpZmljYXRlX2ZpbGU8L3R0PiBhbmQKKzx0dCBjbGFzcz0ibWV0aG9kIj51c2VfcHJpdmF0ZWtleV9maWxlPC90dD4gbWV0aG9kcyBvZiBDb250ZXh0IG9iamVjdHMuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC05Myc+PHR0Pk9QX1NJTkdMRV9ESF9VU0U8L3R0PjwvYT48L2I+Cis8ZGQ+Cis8ZHQ+PGI+PGEgbmFtZT0nbDJoLTExMCc+PHR0Pk9QX0VQSEVNRVJBTF9SU0E8L3R0PjwvYT48L2I+PGRkPgorPGR0PjxiPjxhIG5hbWU9J2wyaC0xMTEnPjx0dD5PUF9OT19TU0x2MjwvdHQ+PC9hPjwvYj48ZGQ+Cis8ZHQ+PGI+PGEgbmFtZT0nbDJoLTExMic+PHR0Pk9QX05PX1NTTHYzPC90dD48L2E+PC9iPjxkZD4KKzxkdD48Yj48YSBuYW1lPSdsMmgtMTEzJz48dHQ+T1BfTk9fVExTdjE8L3R0PjwvYT48L2I+PGRkPgorQ29uc3RhbnRzIHVzZWQgd2l0aCA8dHQgY2xhc3M9Im1ldGhvZCI+c2V0X29wdGlvbnM8L3R0PiBvZiBDb250ZXh0IG9iamVjdHMuCis8dHQgY2xhc3M9ImNvbnN0YW50Ij5PUF9TSU5HTEVfREhfVVNFPC90dD4gbWVhbnMgdG8gYWx3YXlzIGNyZWF0ZSBhIG5ldyBrZXkgd2hlbiB1c2luZyBlcGhlbWVyYWwKK0RpZmZpZS1IZWxsbWFuLiA8dHQgY2xhc3M9ImNvbnN0YW50Ij5PUF9FUEhFTUVSQUxfUlNBPC90dD4gbWVhbnMgdG8gYWx3YXlzIHVzZSBlcGhlbWVyYWwgUlNBIGtleXMKK3doZW4gZG9pbmcgUlNBIG9wZXJhdGlvbnMuIDx0dCBjbGFzcz0iY29uc3RhbnQiPk9QX05PX1NTTHYyPC90dD4sIDx0dCBjbGFzcz0iY29uc3RhbnQiPk9QX05PX1NTTHYzPC90dD4gYW5kCis8dHQgY2xhc3M9ImNvbnN0YW50Ij5PUF9OT19UTFN2MTwvdHQ+IG1lYW5zIHRvIGRpc2FibGUgdGhvc2Ugc3BlY2lmaWMgcHJvdG9jb2xzLiBUaGlzIGlzCitpbnRlcmVzdGluZyBpZiB5b3UncmUgdXNpbmcgZS5nLiA8dHQgY2xhc3M9ImNvbnN0YW50Ij5TU0x2MjNfTUVUSE9EPC90dD4gdG8gZ2V0IGFuIFNTTHYyLWNvbXBhdGlibGUKK2hhbmRzaGFrZSwgYnV0IGRvbid0IHdhbnQgdG8gdXNlIFNTTHYyLgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtOTQnPjx0dD5Db250ZXh0VHlwZTwvdHQ+PC9hPjwvYj4KKzxkZD4KK0EgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgQ29udGV4dCBvYmplY3QgdHlwZS4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTk1Jz48dHQgY2xhc3M9J2Z1bmN0aW9uJz5Db250ZXh0PC90dD48L2E+PC9iPig8dmFyPm1ldGhvZDwvdmFyPikKKzxkZD4KK0ZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IENvbnRleHQgb2JqZWN0IGdpdmVuIGFuIFNTTCBtZXRob2QuIFRoZQorbWV0aG9kIHNob3VsZCBiZSA8dHQgY2xhc3M9ImNvbnN0YW50Ij5TU0x2Ml9NRVRIT0Q8L3R0PiwgPHR0IGNsYXNzPSJjb25zdGFudCI+U1NMdjNfTUVUSE9EPC90dD4sCis8dHQgY2xhc3M9ImNvbnN0YW50Ij5TU0x2MjNfTUVUSE9EPC90dD4gb3IgPHR0IGNsYXNzPSJjb25zdGFudCI+VExTdjFfTUVUSE9EPC90dD4uCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC05Nic+PHR0PkNvbm5lY3Rpb25UeXBlPC90dD48L2E+PC9iPgorPGRkPgorQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBDb25uZWN0aW9uIG9iamVjdCB0eXBlLgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtOTcnPjx0dCBjbGFzcz0nZnVuY3Rpb24nPkNvbm5lY3Rpb248L3R0PjwvYT48L2I+KDx2YXI+Y29udGV4dCwgc29ja2V0PC92YXI+KQorPGRkPgorRmFjdG9yeSBmdWNuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IENvbm5lY3Rpb24gb2JqZWN0IGdpdmVuIGFuIFNTTCBjb250ZXh0IGFuZAorYSBzb2NrZXQgPEEgTkFNRT0idGV4Mmh0bWw1IgorICBIUkVGPSIjZm9vdDkwMSI+PFNVUD40PC9TVVA+PC9BPiBvYmplY3QuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPmV4Y2VwdGlvbiA8YSBuYW1lPSdsMmgtOTgnPjx0dCBjbGFzcz0nZXhjZXB0aW9uJz5FcnJvcjwvdHQ+PC9hPjwvYj4KKzxkZD4KK1RoaXMgZXhjZXB0aW9uIGlzIHVzZWQgYXMgYSBiYXNlIGNsYXNzIGZvciB0aGUgb3RoZXIgU1NMLXJlbGF0ZWQKK2V4Y2VwdGlvbnMsIGJ1dCBtYXkgYWxzbyBiZSByYWlzZWQgZGlyZWN0bHkuCis8L0VNPjwvRU0+PC9FTT4KKzxQPgorPEVNPjxFTT48RU0+V2hlbmV2ZXIgdGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIGRpcmVjdGx5LCBpdCBoYXMgYSBsaXN0IG9mIGVycm9yIG1lc3NhZ2VzCitmcm9tIHRoZSBPcGVuU1NMIGVycm9yIHF1ZXVlLCB3aGVyZSBlYWNoIGl0ZW0gaXMgYSB0dXBsZSA8Y29kZT4oPHZhcj5saWI8L3Zhcj4sCis8dmFyPmZ1bmN0aW9uPC92YXI+LCA8dmFyPnJlYXNvbjwvdmFyPik8L2NvZGU+LiBIZXJlIDx2YXI+bGliPC92YXI+LCA8dmFyPmZ1bmN0aW9uPC92YXI+IGFuZCA8dmFyPnJlYXNvbjwvdmFyPgorYXJlIGFsbCBzdHJpbmdzLCBkZXNjcmliaW5nIHdoZXJlIGFuZCB3aGF0IHRoZSBwcm9ibGVtIGlzLiBTZWUgPHNwYW4gY2xhc3M9J21hbnBhZ2UnPjxpPmVycjwvaT4oMyk8L3NwYW4+Citmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+ZXhjZXB0aW9uIDxhIG5hbWU9J2wyaC05OSc+PHR0IGNsYXNzPSdleGNlcHRpb24nPlplcm9SZXR1cm5FcnJvcjwvdHQ+PC9hPjwvYj4KKzxkZD4KK1RoaXMgZXhjZXB0aW9uIG1hdGNoZXMgdGhlIGVycm9yIHJldHVybiBjb2RlIDxjb2RlPlNTTF9FUlJPUl9aRVJPX1JFVFVSTjwvY29kZT4sIGFuZAoraXMgcmFpc2VkIHdoZW4gdGhlIFNTTCBDb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZC4gSW4gU1NMIDMuMCBhbmQgVExTIDEuMCwgdGhpcworb25seSBvY2N1cnMgaWYgYSBjbG9zdXJlIGFsZXJ0IGhhcyBvY2N1cnJlZCBpbiB0aGUgcHJvdG9jb2wsIGkuZS4gdGhlCitjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZCBjbGVhbmx5LiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseQorbWVhbiB0aGF0IHRoZSB0cmFuc3BvcnQgbGF5ZXIgKGUuZy4gYSBzb2NrZXQpIGhhcyBiZWVuIGNsb3NlZC4KKzwvRU0+PC9FTT48L0VNPgorPFA+Cis8RU0+PEVNPjxFTT5JdCBtYXkgc2VlbSBhIGxpdHRsZSBzdHJhbmdlIHRoYXQgdGhpcyBpcyBhbiBleGNlcHRpb24sIGJ1dCBpdCBkb2VzIG1hdGNoIGFuCis8Y29kZT5TU0xfRVJST1I8L2NvZGU+IGNvZGUsIGFuZCBpcyB2ZXJ5IGNvbnZlbmllbnQuCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPmV4Y2VwdGlvbiA8YSBuYW1lPSdsMmgtMTAwJz48dHQgY2xhc3M9J2V4Y2VwdGlvbic+V2FudFJlYWRFcnJvcjwvdHQ+PC9hPjwvYj4KKzxkZD4KK1RoZSBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZTsgdGhlIHNhbWUgSS9PIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGFnYWluCitsYXRlciwgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMuIEFueSBJL08gbWV0aG9kIGNhbiBsZWFkIHRvIHRoaXMgc2luY2UgbmV3CitoYW5kc2hha2VzIGNhbiBvY2N1ciBhdCBhbnkgdGltZS4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+ZXhjZXB0aW9uIDxhIG5hbWU9J2wyaC0xMDEnPjx0dCBjbGFzcz0nZXhjZXB0aW9uJz5XYW50V3JpdGVFcnJvcjwvdHQ+PC9hPjwvYj4KKzxkZD4KK1NlZSA8dHQgY2xhc3M9ImV4Y2VwdGlvbiI+V2FudFJlYWRFcnJvcjwvdHQ+LgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj5leGNlcHRpb24gPGEgbmFtZT0nbDJoLTEwMic+PHR0IGNsYXNzPSdleGNlcHRpb24nPldhbnRYNTA5TG9va3VwRXJyb3I8L3R0PjwvYT48L2I+Cis8ZGQ+CitUaGUgb3BlcmF0aW9uIGRpZCBub3QgY29tcGxldGUgYmVjYXVzZSBhbiBhcHBsaWNhdGlvbiBjYWxsYmFjayBoYXMgYXNrZWQgdG8gYmUKK2NhbGxlZCBhZ2Fpbi4gVGhlIEkvTyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBhZ2FpbiBsYXRlciwgd2l0aCB0aGUgc2FtZQorYXJndW1lbnRzLiBOb3RlOiBUaGlzIHdvbid0IG9jY3VyIGluIHRoaXMgdmVyc2lvbiwgYXMgdGhlcmUgYXJlIG5vIHN1Y2gKK2NhbGxiYWNrcyBpbiB0aGlzIHZlcnNpb24uCis8L2RsPgorPFA+Cis8ZGw+PGR0PjxiPmV4Y2VwdGlvbiA8YSBuYW1lPSdsMmgtMTAzJz48dHQgY2xhc3M9J2V4Y2VwdGlvbic+U3lzQ2FsbEVycm9yPC90dD48L2E+PC9iPgorPGRkPgorVGhlIDx0dCBjbGFzcz0iZXhjZXB0aW9uIj5TeXNDYWxsRXJyb3I8L3R0PiBvY2N1cnMgd2hlbiB0aGVyZSdzIGFuIEkvTyBlcnJvciBhbmQgT3BlblNTTCdzCitlcnJvciBxdWV1ZSBkb2VzIG5vdCBjb250YWluIGFueSBpbmZvcm1hdGlvbi4gVGhpcyBjYW4gbWVhbiB0d28gdGhpbmdzOiBBbgorZXJyb3IgaW4gdGhlIHRyYW5zcG9ydCBwcm90b2NvbCwgb3IgYW4gZW5kIG9mIGZpbGUgdGhhdCB2aW9sYXRlcyB0aGUgcHJvdG9jb2wuCitUaGUgcGFyYW1ldGVyIHRvIHRoZSBleGNlcHRpb24gaXMgYWx3YXlzIGEgcGFpciA8Y29kZT4oPHZhcj5lcnJudW08L3Zhcj4sCis8dmFyPmVycnN0cjwvdmFyPik8L2NvZGU+LgorPC9kbD4KKzxQPgorPEJSPjxIUj48SDQ+Rm9vdG5vdGVzPC9IND4KKzxETD4KKzxEVD48QSBOQU1FPSJmb290OTAxIj4uLi4gc29ja2V0PC9BPjxBCisgaHJlZj0ib3BlbnNzbC1zc2wuaHRtbCN0ZXgyaHRtbDUiPjxTVVA+NDwvU1VQPjwvQT48L0RUPgorPEREPkFjdHVhbGx5LCBhbGwgdGhhdCBpcyByZXF1aXJlZCBpcyBhbiBvYmplY3QgdGhhdAorPGk+YmVoYXZlczwvaT4gbGlrZSBhIHNvY2tldCwgeW91IGNvdWxkIGV2ZW4gdXNlIGZpbGVzLCBldmVuIHRob3VnaCBpdCdkIGJlCit0cmlja3kgdG8gZ2V0IHRoZSBoYW5kc2hha2VzIHJpZ2h0IQorCis8L0REPgorPC9ETD4KKzxwPjxocj4KKworPCEtLVRhYmxlIG9mIENoaWxkLUxpbmtzLS0+Cis8QSBOQU1FPSJDSElMRF9MSU5LUyI+PFNUUk9ORz5TdWJzZWN0aW9uczwvU1RST05HPjwvQT4KKworPFVMIENMQVNTPSJDaGlsZExpbmtzIj4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDI2MyIKKyAgaHJlZj0ib3BlbnNzbC1jb250ZXh0Lmh0bWwiPjMuMy4xIENvbnRleHQgb2JqZWN0cyA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwyNjQiCisgIGhyZWY9Im9wZW5zc2wtY29ubmVjdGlvbi5odG1sIj4zLjMuMiBDb25uZWN0aW9uIG9iamVjdHMgPC9BPgorPC9VTD4KKzwhLS1FbmQgb2YgVGFibGUgb2YgQ2hpbGQtTGlua3MtLT4KKworPERJViBDTEFTUz0ibmF2aWdhdGlvbiI+Cis8cD48aHI+Cis8dGFibGUgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMiI+Cis8dHI+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1yYW5kLmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLmh0bWwiPjxpbWcgc3JjPSJ1cC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iVXAgT25lIExldmVsIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtY29udGV4dC5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1yYW5kLmh0bWwiPjMuMiByYW5kICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wuaHRtbCI+MyBPcGVuU1NMICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1jb250ZXh0Lmh0bWwiPjMuMy4xIENvbnRleHQgb2JqZWN0czwvQT4KKzxocj4KKzxzcGFuIGNsYXNzPSJyZWxlYXNlLWluZm8iPlJlbGVhc2UgMC42Ljwvc3Bhbj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL29wZW5zc2wteDUwOS5odG1sIGIvZG9jL2h0bWwvb3BlbnNzbC14NTA5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiMTA3OQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL29wZW5zc2wteDUwOS5odG1sCkBAIC0wLDAgKzEsMTY0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT4zLjEuMSBYNTA5IG9iamVjdHMgPC90aXRsZT4KKzxNRVRBIE5BTUU9ImRlc2NyaXB0aW9uIiBDT05URU5UPSIzLjEuMSBYNTA5IG9iamVjdHMgIj4KKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJweU9wZW5TU0wiPgorPE1FVEEgTkFNRT0icmVzb3VyY2UtdHlwZSIgQ09OVEVOVD0iZG9jdW1lbnQiPgorPE1FVEEgTkFNRT0iZGlzdHJpYnV0aW9uIiBDT05URU5UPSJnbG9iYWwiPgorPGxpbmsgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSJweU9wZW5TU0wuY3NzIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0ib3BlbnNzbC14NTA5bmFtZS5odG1sIj4KKzxMSU5LIFJFTD0icHJldmlvdXMiIGhyZWY9Im9wZW5zc2wtY3J5cHRvLmh0bWwiPgorPExJTksgUkVMPSJ1cCIgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9Im9wZW5zc2wteDUwOW5hbWUuaHRtbCI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtY3J5cHRvLmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXg1MDluYW1lLmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4zLjEgY3J5cHRvICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtY3J5cHRvLmh0bWwiPjMuMSBjcnlwdG8gIDwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXg1MDluYW1lLmh0bWwiPjMuMS4yIFg1MDlOYW1lIG9iamVjdHM8L0E+Cis8YnI+PGhyPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKworPEgzPjxBIE5BTUU9IlNFQ1RJT04wMDA0MTEwMDAwMDAwMDAwMDAwMDAiPiZuYnNwOzwvQT4KKzxCUj4KKzMuMS4xIFg1MDkgb2JqZWN0cyAKKzwvSDM+CisKKzxQPgorWDUwOSBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorCis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTM0Jz48dHQgY2xhc3M9J21ldGhvZCc+Z2V0X2lzc3VlcjwvdHQ+PC9hPjwvYj4oKQorPGRkPgorUmV0dXJuIGEgPEVNPmJvcnJvd2VkIHJlZmVyZW5jZSB0byBhIFg1MDlOYW1lIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGlzc3Vlcgorb2YgdGhlIGNlcnRpZmljYXRlLiAgV2hlbiB0aGUgY29ycmVzcG9uZGluZyBYNTA5IG9yIFg1MDlSZXEgb2JqZWN0IGlzCitkZXN0cm95ZWQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgaW52YWxpZCEKKzwvZGw+Cis8L0VNPgorPFA+PGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMzUnPjx0dCBjbGFzcz0nbWV0aG9kJz5nZXRfcHVia2V5PC90dD48L2E+PC9iPigpCis8ZGQ+CitSZXR1cm4gYSBQS2V5IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHB1YmxpYyBrZXkgb2YgdGhlIGNlcnRpZmljYXRlLgorPC9kbD4KKzxQPjxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTM2Jz48dHQgY2xhc3M9J21ldGhvZCc+Z2V0X3NlcmlhbF9udW1iZXI8L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JldHVybiB0aGUgY2VydGlmaWNhdGUgc2VyaWFsIG51bWJlci4KKzwvZGw+Cis8UD48ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0zNyc+PHR0IGNsYXNzPSdtZXRob2QnPmdldF9zdWJqZWN0PC90dD48L2E+PC9iPigpCis8ZGQ+CitSZXR1cm4gYSA8RU0+Ym9ycm93ZWQgcmVmZXJlbmNlIHRvIGEgWDUwOU5hbWUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc3ViamVjdAorb2YgdGhlIGNlcnRpZmljYXRlLiAgV2hlbiB0aGUgY29ycmVzcG9uZGluZyBYNTA5IG9yIFg1MDlSZXEgb2JqZWN0IGlzCitkZXN0cm95ZWQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgaW52YWxpZCEKKzwvZGw+PC9FTT4KKzxQPjxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTM4Jz48dHQgY2xhc3M9J21ldGhvZCc+Z2V0X3ZlcnNpb248L3R0PjwvYT48L2I+KCkKKzxkZD4KK1JldHVybiB0aGUgY2VydGlmaWNhdGUgdmVyc2lvbi4KKzwvZGw+Cis8UD48ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC0zOSc+PHR0IGNsYXNzPSdtZXRob2QnPmdtdGltZV9hZGpfbm90QmVmb3JlPC90dD48L2E+PC9iPig8dmFyPnRpbWU8L3Zhcj4pCis8ZGQ+CitBZGp1c3QgdGhlIHRpbWVzdGFtcCAoaW4gR01UKSB3aGVuIHRoZSBjZXJ0aWZpY2F0ZSBzdGFydHMgYmVpbmcgdmFsaWQuCis8L2RsPgorPFA+PGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNDAnPjx0dCBjbGFzcz0nbWV0aG9kJz5nbXRpbWVfYWRqX25vdEFmdGVyPC90dD48L2E+PC9iPig8dmFyPnRpbWU8L3Zhcj4pCis8ZGQ+CitBZGp1c3QgdGhlIHRpbWVzdGFtcCAoaW4gR01UKSB3aGVuIHRoZSBjZXJ0aWZpY2F0ZSBzdG9wcyBiZWluZyB2YWxpZC4KKzwvZGw+Cis8UD48ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC00MSc+PHR0IGNsYXNzPSdtZXRob2QnPmhhc19leHBpcmVkPC90dD48L2E+PC9iPigpCis8ZGQ+CitDaGVja3MgdGhlIGNlcnRpZmljYXRlJ3MgdGltZSBzdGFtcCBhZ2FpbnN0IGN1cnJlbnQgdGltZS4gUmV0dXJucyB0cnVlIGlmIHRoZQorY2VydGlmaWNhdGUgaGFzIGV4cGlyZWQgYW5kIGZhbHNlIG90aGVyd2lzZS4KKzwvZGw+Cis8UD48ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC00Mic+PHR0IGNsYXNzPSdtZXRob2QnPnNldF9pc3N1ZXI8L3R0PjwvYT48L2I+KDx2YXI+aXNzdWVyPC92YXI+KQorPGRkPgorU2V0IHRoZSBpc3N1ZXIgb2YgdGhlIGNlcnRpZmljYXRlIHRvIDx2YXI+aXNzdWVyPC92YXI+LgorPC9kbD4KKzxQPjxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTQzJz48dHQgY2xhc3M9J21ldGhvZCc+c2V0X3B1YmtleTwvdHQ+PC9hPjwvYj4oPHZhcj5wa2V5PC92YXI+KQorPGRkPgorU2V0IHRoZSBwdWJsaWMga2V5IG9mIHRoZSBjZXJ0aWZpY2F0ZSB0byA8dmFyPnBrZXk8L3Zhcj4uCis8L2RsPgorPFA+PGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNDQnPjx0dCBjbGFzcz0nbWV0aG9kJz5zZXRfc2VyaWFsX251bWJlcjwvdHQ+PC9hPjwvYj4oPHZhcj5zZXJpYWxubzwvdmFyPikKKzxkZD4KK1NldCB0aGUgc2VyaWFsIG51bWJlciBvZiB0aGUgY2VydGlmaWNhdGUgdG8gPHZhcj5zZXJpYWxubzwvdmFyPi4KKzwvZGw+Cis8UD48ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC00NSc+PHR0IGNsYXNzPSdtZXRob2QnPnNldF9zdWJqZWN0PC90dD48L2E+PC9iPig8dmFyPnN1YmplY3Q8L3Zhcj4pCis8ZGQ+CitTZXQgdGhlIHN1YmplY3Qgb2YgdGhlIGNlcnRpZmljYXRlIHRvIDx2YXI+c3ViamVjdDwvdmFyPi4KKzwvZGw+Cis8UD48ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC00Nic+PHR0IGNsYXNzPSdtZXRob2QnPnNldF92ZXJzaW9uPC90dD48L2E+PC9iPig8dmFyPnZlcnNpb248L3Zhcj4pCis8ZGQ+CitTZXQgdGhlIGNlcnRpZmljYXRlIHZlcnNpb24gdG8gPHZhcj52ZXJzaW9uPC92YXI+LgorPC9kbD4KKzxQPjxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTQ3Jz48dHQgY2xhc3M9J21ldGhvZCc+c2lnbjwvdHQ+PC9hPjwvYj4oPHZhcj5wa2V5LCBkaWdlc3Q8L3Zhcj4pCis8ZGQ+CitTaWduIHRoZSBjZXJ0aWZpY2F0ZSwgdXNpbmcgdGhlIGtleSA8dmFyPnBrZXk8L3Zhcj4gYW5kIHRoZSBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0KK2lkZW50aWZpZWQgYnkgdGhlIHN0cmluZyA8dmFyPmRpZ2VzdDwvdmFyPi4KKzwvZGw+Cis8UD48ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC00OCc+PHR0IGNsYXNzPSdtZXRob2QnPnN1YmplY3RfbmFtZV9oYXNoPC90dD48L2E+PC9iPigpCis8ZGQ+CitSZXR1cm4gdGhlIGhhc2ggb2YgdGhlIGNlcnRpZmljYXRlIHN1YmplY3QuCis8L2RsPgorPFA+PGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNDknPjx0dCBjbGFzcz0nbWV0aG9kJz5kaWdlc3Q8L3R0PjwvYT48L2I+KDx2YXI+ZGlnZXN0X25hbWU8L3Zhcj4pCis8ZGQ+CitSZXR1cm4gYSBkaWdlc3Qgb2YgdGhlIGNlcnRpZmljYXRlLCB1c2luZyB0aGUgPHZhcj5kaWdlc3RfbmFtZTwvdmFyPiBtZXRob2QuCis8L2RsPgorPFA+PGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNTAnPjx0dCBjbGFzcz0nbWV0aG9kJz5hZGRfZXh0ZW5zaW9uczwvdHQ+PC9hPjwvYj4oPHZhcj5leHRlbnNpb25zPC92YXI+KQorPGRkPgorQWRkIHRoZSBleHRlbnNpb25zIGluIHRoZSBzZXF1ZW5jZSA8dmFyPmV4dGVuc2lvbnM8L3Zhcj4gdG8gdGhlIGNlcnRpZmljYXRlLgorPC9kbD4KKzxQPgorPERJViBDTEFTUz0ibmF2aWdhdGlvbiI+Cis8cD48aHI+Cis8dGFibGUgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMiI+Cis8dHI+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtY3J5cHRvLmh0bWwiPjxpbWcgc3JjPSJ1cC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iVXAgT25lIExldmVsIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wteDUwOW5hbWUuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wtY3J5cHRvLmh0bWwiPjMuMSBjcnlwdG8gIDwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+My4xIGNyeXB0byAgPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wteDUwOW5hbWUuaHRtbCI+My4xLjIgWDUwOU5hbWUgb2JqZWN0czwvQT4KKzxocj4KKzxzcGFuIGNsYXNzPSJyZWxlYXNlLWluZm8iPlJlbGVhc2UgMC42Ljwvc3Bhbj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL29wZW5zc2wteDUwOW5hbWUuaHRtbCBiL2RvYy9odG1sL29wZW5zc2wteDUwOW5hbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODUxZTRjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvb3BlbnNzbC14NTA5bmFtZS5odG1sCkBAIC0wLDAgKzEsMTIxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT4zLjEuMiBYNTA5TmFtZSBvYmplY3RzIDwvdGl0bGU+Cis8TUVUQSBOQU1FPSJkZXNjcmlwdGlvbiIgQ09OVEVOVD0iMy4xLjIgWDUwOU5hbWUgb2JqZWN0cyAiPgorPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9InB5T3BlblNTTCI+Cis8TUVUQSBOQU1FPSJyZXNvdXJjZS10eXBlIiBDT05URU5UPSJkb2N1bWVudCI+Cis8TUVUQSBOQU1FPSJkaXN0cmlidXRpb24iIENPTlRFTlQ9Imdsb2JhbCI+Cis8bGluayByZWw9IlNUWUxFU0hFRVQiIGhyZWY9InB5T3BlblNTTC5jc3MiPgorPExJTksgUkVMPSJuZXh0IiBocmVmPSJvcGVuc3NsLXg1MDlyZXEuaHRtbCI+Cis8TElOSyBSRUw9InByZXZpb3VzIiBocmVmPSJvcGVuc3NsLXg1MDkuaHRtbCI+Cis8TElOSyBSRUw9InVwIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0ib3BlbnNzbC14NTA5cmVxLmh0bWwiPgorPC9oZWFkPgorPGJvZHk+Cis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXg1MDkuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wtY3J5cHRvLmh0bWwiPjxpbWcgc3JjPSJ1cC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iVXAgT25lIExldmVsIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wteDUwOXJlcS5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC14NTA5Lmh0bWwiPjMuMS4xIFg1MDkgb2JqZWN0czwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+My4xIGNyeXB0byAgPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9Im9wZW5zc2wteDUwOXJlcS5odG1sIj4zLjEuMyBYNTA5UmVxIG9iamVjdHM8L0E+Cis8YnI+PGhyPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKworPEgzPjxBIE5BTUU9IlNFQ1RJT04wMDA0MTIwMDAwMDAwMDAwMDAwMDAiPiZuYnNwOzwvQT4KKzxCUj4KKzMuMS4yIFg1MDlOYW1lIG9iamVjdHMgCis8L0gzPgorPFA+Cis8RU0+PEVNPlg1MDlOYW1lIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lbWJlcnM6Cis8L0VNPjwvRU0+Cis8UD48ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC01MSc+PHR0IGNsYXNzPSdtZW1iZXInPmNvdW50cnlOYW1lPC90dD48L2E+PC9iPgorPGRkPgorVGhlIGNvdW50cnkgb2YgdGhlIGVudGl0eS4gPGNvZGU+QzwvY29kZT4gbWF5IGJlIHVzZWQgYXMgYW4gYWxpYXMgZm9yCis8Y29kZT5jb3VudHJ5TmFtZTwvY29kZT4uCis8L2RsPgorPFA+PGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNTInPjx0dCBjbGFzcz0nbWVtYmVyJz5zdGF0ZU9yUHJvdmluY2VOYW1lPC90dD48L2E+PC9iPgorPGRkPgorVGhlIHN0YXRlIG9yIHByb3ZpbmNlIG9mIHRoZSBlbnRpdHkuIDxjb2RlPlNUPC9jb2RlPiBtYXkgYmUgdXNlZCBhcyBhbiBhbGlhcyBmb3IKKzxjb2RlPnN0YXRlT3JQcm92aW5jZU5hbWU8L2NvZGU+tworPC9kbD4KKzxQPjxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTUzJz48dHQgY2xhc3M9J21lbWJlcic+bG9jYWxpdHlOYW1lPC90dD48L2E+PC9iPgorPGRkPgorVGhlIGxvY2FsaXR5IG9mIHRoZSBlbnRpdHkuIDxjb2RlPkw8L2NvZGU+IG1heSBiZSB1c2VkIGFzIGFuIGFsaWFzIGZvcgorPGNvZGU+bG9jYWxpdHlOYW1lPC9jb2RlPi4KKzwvZGw+Cis8UD48ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC01NCc+PHR0IGNsYXNzPSdtZW1iZXInPm9yZ2FuaXphdGlvbk5hbWU8L3R0PjwvYT48L2I+Cis8ZGQ+CitUaGUgb3JnYW5pemF0aW9uIG5hbWUgb2YgdGhlIGVudGl0eS4gPGNvZGU+TzwvY29kZT4gbWF5IGJlIHVzZWQgYXMgYW4gYWxpYXMgZm9yCis8Y29kZT5vcmdhbml6YXRpb25OYW1lPC9jb2RlPi4KKzwvZGw+Cis8UD48ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC01NSc+PHR0IGNsYXNzPSdtZW1iZXInPm9yZ2FuaXphdGlvbmFsVW5pdE5hbWU8L3R0PjwvYT48L2I+Cis8ZGQ+CitUaGUgb3JnYW5pemF0aW9uYWwgdW5pdCBvZiB0aGUgZW50aXR5LiA8Y29kZT5PVTwvY29kZT4gbWF5IGJlIHVzZWQgYXMgYW4gYWxpYXMgZm9yCis8Y29kZT5vcmdhbml6YXRpb25hbFVuaXROYW1lPC9jb2RlPi4KKzwvZGw+Cis8UD48ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC01Nic+PHR0IGNsYXNzPSdtZW1iZXInPmNvbW1vbk5hbWU8L3R0PjwvYT48L2I+Cis8ZGQ+CitUaGUgY29tbW9uIG5hbWUgb2YgdGhlIGVudGl0eS4gPGNvZGU+Q048L2NvZGU+IG1heSBiZSB1c2VkIGFzIGFuIGFsaWFzIGZvcgorPGNvZGU+Y29tbW9uTmFtZTwvY29kZT4uCis8L2RsPgorPFA+PGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNTcnPjx0dCBjbGFzcz0nbWVtYmVyJz5lbWFpbEFkZHJlc3M8L3R0PjwvYT48L2I+Cis8ZGQ+CitUaGUgZS1tYWlsIGFkZHJlc3Mgb2YgdGhlIGVudGl0eS4KKzwvZGw+Cis8UD4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHA+PGhyPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wteDUwOS5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC14NTA5cmVxLmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXg1MDkuaHRtbCI+My4xLjEgWDUwOSBvYmplY3RzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4zLjEgY3J5cHRvICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC14NTA5cmVxLmh0bWwiPjMuMS4zIFg1MDlSZXEgb2JqZWN0czwvQT4KKzxocj4KKzxzcGFuIGNsYXNzPSJyZWxlYXNlLWluZm8iPlJlbGVhc2UgMC42Ljwvc3Bhbj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL29wZW5zc2wteDUwOXJlcS5odG1sIGIvZG9jL2h0bWwvb3BlbnNzbC14NTA5cmVxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY1YzI0NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL29wZW5zc2wteDUwOXJlcS5odG1sCkBAIC0wLDAgKzEsMTE0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT4zLjEuMyBYNTA5UmVxIG9iamVjdHMgPC90aXRsZT4KKzxNRVRBIE5BTUU9ImRlc2NyaXB0aW9uIiBDT05URU5UPSIzLjEuMyBYNTA5UmVxIG9iamVjdHMgIj4KKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJweU9wZW5TU0wiPgorPE1FVEEgTkFNRT0icmVzb3VyY2UtdHlwZSIgQ09OVEVOVD0iZG9jdW1lbnQiPgorPE1FVEEgTkFNRT0iZGlzdHJpYnV0aW9uIiBDT05URU5UPSJnbG9iYWwiPgorPGxpbmsgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSJweU9wZW5TU0wuY3NzIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0ib3BlbnNzbC14NTA5c3RvcmUuaHRtbCI+Cis8TElOSyBSRUw9InByZXZpb3VzIiBocmVmPSJvcGVuc3NsLXg1MDluYW1lLmh0bWwiPgorPExJTksgUkVMPSJ1cCIgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9Im9wZW5zc2wteDUwOXN0b3JlLmh0bWwiPgorPC9oZWFkPgorPGJvZHk+Cis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXg1MDluYW1lLmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXg1MDlzdG9yZS5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC14NTA5bmFtZS5odG1sIj4zLjEuMiBYNTA5TmFtZSBvYmplY3RzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4zLjEgY3J5cHRvICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC14NTA5c3RvcmUuaHRtbCI+My4xLjQgWDUwOVN0b3JlIG9iamVjdHM8L0E+Cis8YnI+PGhyPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKworPEgzPjxBIE5BTUU9IlNFQ1RJT04wMDA0MTMwMDAwMDAwMDAwMDAwMDAiPiZuYnNwOzwvQT4KKzxCUj4KKzMuMS4zIFg1MDlSZXEgb2JqZWN0cyAKKzwvSDM+Cis8UD4KKzxFTT48RU0+WDUwOVJlcSBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorPC9FTT48L0VNPgorPFA+PGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNTgnPjx0dCBjbGFzcz0nbWV0aG9kJz5nZXRfcHVia2V5PC90dD48L2E+PC9iPigpCis8ZGQ+CitSZXR1cm4gYSBQS2V5IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHB1YmxpYyBrZXkgb2YgdGhlIGNlcnRpZmljYXRlIHJlcXVlc3QuCis8L2RsPgorPFA+PGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNTknPjx0dCBjbGFzcz0nbWV0aG9kJz5nZXRfc3ViamVjdDwvdHQ+PC9hPjwvYj4oKQorPGRkPgorUmV0dXJuIGEgPEVNPmJvcnJvd2VkIHJlZmVyZW5jZSB0byBhIFg1MDlOYW1lIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHN1YmplY3QKK29mIHRoZSBjZXJ0aWZpY2F0ZS4gIFdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgWDUwOSBvciBYNTA5UmVxIG9iamVjdCBpcworZGVzdHJveWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIGludmFsaWQhCis8L2RsPjwvRU0+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTYwJz48dHQgY2xhc3M9J21ldGhvZCc+c2V0X3B1YmtleTwvdHQ+PC9hPjwvYj4oPHZhcj5wa2V5PC92YXI+KQorPGRkPgorU2V0IHRoZSBwdWJsaWMga2V5IG9mIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IHRvIDx2YXI+cGtleTwvdmFyPi4KKzwvZGw+Cis8UD4KKzxkbD48ZHQ+PGI+PGEgbmFtZT0nbDJoLTYxJz48dHQgY2xhc3M9J21ldGhvZCc+c2lnbjwvdHQ+PC9hPjwvYj4oPHZhcj5wa2V5LCBkaWdlc3Q8L3Zhcj4pCis8ZGQ+CitTaWduIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0LCB1c2luZyB0aGUga2V5IDx2YXI+cGtleTwvdmFyPiBhbmQgdGhlIG1lc3NhZ2UgZGlnZXN0CithbGdvcml0aG0gaWRlbnRpZmllZCBieSB0aGUgc3RyaW5nIDx2YXI+ZGlnZXN0PC92YXI+LgorPC9kbD4KKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtNjInPjx0dCBjbGFzcz0nbWV0aG9kJz52ZXJpZnk8L3R0PjwvYT48L2I+KDx2YXI+cGtleTwvdmFyPikKKzxkZD4KK1ZlcmlmeSBhIGNlcnRpZmljYXRlIHJlcXVlc3QgdXNpbmcgdGhlIHB1YmxpYyBrZXkgPHZhcj5wa2V5PC92YXI+LgorPC9kbD4KKzxQPgorCis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzxwPjxocj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXg1MDluYW1lLmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLXg1MDlzdG9yZS5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC14NTA5bmFtZS5odG1sIj4zLjEuMiBYNTA5TmFtZSBvYmplY3RzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4zLjEgY3J5cHRvICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC14NTA5c3RvcmUuaHRtbCI+My4xLjQgWDUwOVN0b3JlIG9iamVjdHM8L0E+Cis8aHI+Cis8c3BhbiBjbGFzcz0icmVsZWFzZS1pbmZvIj5SZWxlYXNlIDAuNi48L3NwYW4+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9vcGVuc3NsLXg1MDlzdG9yZS5odG1sIGIvZG9jL2h0bWwvb3BlbnNzbC14NTA5c3RvcmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDY4ZWNhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvb3BlbnNzbC14NTA5c3RvcmUuaHRtbApAQCAtMCwwICsxLDkzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT4zLjEuNCBYNTA5U3RvcmUgb2JqZWN0cyA8L3RpdGxlPgorPE1FVEEgTkFNRT0iZGVzY3JpcHRpb24iIENPTlRFTlQ9IjMuMS40IFg1MDlTdG9yZSBvYmplY3RzICI+Cis8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0icHlPcGVuU1NMIj4KKzxNRVRBIE5BTUU9InJlc291cmNlLXR5cGUiIENPTlRFTlQ9ImRvY3VtZW50Ij4KKzxNRVRBIE5BTUU9ImRpc3RyaWJ1dGlvbiIgQ09OVEVOVD0iZ2xvYmFsIj4KKzxsaW5rIHJlbD0iU1RZTEVTSEVFVCIgaHJlZj0icHlPcGVuU1NMLmNzcyI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9Im9wZW5zc2wtcGtleS5odG1sIj4KKzxMSU5LIFJFTD0icHJldmlvdXMiIGhyZWY9Im9wZW5zc2wteDUwOXJlcS5odG1sIj4KKzxMSU5LIFJFTD0idXAiIGhyZWY9Im9wZW5zc2wtY3J5cHRvLmh0bWwiPgorPExJTksgUkVMPSJuZXh0IiBocmVmPSJvcGVuc3NsLXBrZXkuaHRtbCI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wteDUwOXJlcS5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1wa2V5Lmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXg1MDlyZXEuaHRtbCI+My4xLjMgWDUwOVJlcSBvYmplY3RzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4zLjEgY3J5cHRvICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1wa2V5Lmh0bWwiPjMuMS41IFBLZXkgb2JqZWN0czwvQT4KKzxicj48aHI+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8SDM+PEEgTkFNRT0iU0VDVElPTjAwMDQxNDAwMDAwMDAwMDAwMDAwMCI+Jm5ic3A7PC9BPgorPEJSPgorMy4xLjQgWDUwOVN0b3JlIG9iamVjdHMgCis8L0gzPgorPFA+Cis8RU0+PEVNPjxFTT5UaGUgWDUwOVN0b3JlIG9iamVjdCBoYXMgY3VycmVudGx5IGp1c3Qgb25lIG1ldGhvZDoKKzwvRU0+PC9FTT48L0VNPgorPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC02Myc+PHR0IGNsYXNzPSdtZXRob2QnPmFkZF9jZXJ0PC90dD48L2E+PC9iPig8dmFyPmNlcnQ8L3Zhcj4pCis8ZGQ+CitBZGQgdGhlIGNlcnRpZmljYXRlIDx2YXI+Y2VydDwvdmFyPiB0byB0aGUgY2VydGlmaWNhdGUgc3RvcmUuCis8L2RsPgorPFA+CisKKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHA+PGhyPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9Im9wZW5zc2wteDUwOXJlcS5odG1sIj48aW1nIHNyYz0icHJldmlvdXMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlByZXZpb3VzIFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0ib3BlbnNzbC1wa2V5Lmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5QcmV2aW91czo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLXg1MDlyZXEuaHRtbCI+My4xLjMgWDUwOVJlcSBvYmplY3RzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4zLjEgY3J5cHRvICA8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0ib3BlbnNzbC1wa2V5Lmh0bWwiPjMuMS41IFBLZXkgb2JqZWN0czwvQT4KKzxocj4KKzxzcGFuIGNsYXNzPSJyZWxlYXNlLWluZm8iPlJlbGVhc2UgMC42Ljwvc3Bhbj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL29wZW5zc2wuaHRtbCBiL2RvYy9odG1sL29wZW5zc2wuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTBmMDY4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvb3BlbnNzbC5odG1sCkBAIC0wLDAgKzEsMTUxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT4zIE9wZW5TU0wgLS0gUHl0aG9uIGludGVyZmFjZSB0byBPcGVuU1NMIDwvdGl0bGU+Cis8TUVUQSBOQU1FPSJkZXNjcmlwdGlvbiIgQ09OVEVOVD0iMyBPcGVuU1NMIC0tIFB5dGhvbiBpbnRlcmZhY2UgdG8gT3BlblNTTCAiPgorPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9InB5T3BlblNTTCI+Cis8TUVUQSBOQU1FPSJyZXNvdXJjZS10eXBlIiBDT05URU5UPSJkb2N1bWVudCI+Cis8TUVUQSBOQU1FPSJkaXN0cmlidXRpb24iIENPTlRFTlQ9Imdsb2JhbCI+Cis8bGluayByZWw9IlNUWUxFU0hFRVQiIGhyZWY9InB5T3BlblNTTC5jc3MiPgorPExJTksgUkVMPSJuZXh0IiBocmVmPSJpbnRlcm5hbHMuaHRtbCI+Cis8TElOSyBSRUw9InByZXZpb3VzIiBocmVmPSJidWlsZGluZy5odG1sIj4KKzxMSU5LIFJFTD0idXAiIEhSRUY9InB5T3BlblNTTC5odG1sIj4KKzxMSU5LIFJFTD0ibmV4dCIgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9ImJ1aWxkaW5nLXdpbmRvd3MuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIEhSRUY9InB5T3BlblNTTC5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iYnVpbGRpbmctd2luZG93cy5odG1sIj4yLjIgQnVpbGRpbmcgdGhlIE1vZHVsZTwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgSFJFRj0icHlPcGVuU1NMLmh0bWwiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4zLjEgY3J5cHRvICA8L0E+Cis8YnI+PGhyPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKzxIMT48QSBOQU1FPSJTRUNUSU9OMDAwNDAwMDAwMDAwMDAwMDAwMDAwIj4mbmJzcDs8L0E+Cis8QlI+CiszIDx0dCBjbGFzcz0ibW9kdWxlIj5PcGVuU1NMPC90dD4gLS0gUHl0aG9uIGludGVyZmFjZSB0byBPcGVuU1NMIAorPC9IMT4KKworPFA+CisKKworPFA+CitUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBoaWdoLWxldmVsIGludGVyZmFjZSB0byB0aGUgZnVuY3Rpb25zIGluIHRoZQorT3BlblNTTCBsaWJyYXJ5LiBUaGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIGRlZmluZWQ6CisKKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMic+PHR0PmNyeXB0bzwvdHQ+PC9hPjwvYj4KKzxkZD4KK0dlbmVyaWMgY3J5cHRvZ3JhcGhpYyBtb2R1bGUuIE5vdGUgdGhhdCBpZiBhbnl0aGluZyBpcyBpbmNvbXBsZXRlLCB0aGlzIG1vZHVsZSBpcyEKKzwvZGw+CisKKzxQPgorPGRsPjxkdD48Yj48YSBuYW1lPSdsMmgtMyc+PHR0PnJhbmQ8L3R0PjwvYT48L2I+Cis8ZGQ+CitBbiBpbnRlcmZhY2UgdG8gdGhlIE9wZW5TU0wgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorPC9kbD4KKworPFA+Cis8ZGw+PGR0PjxiPjxhIG5hbWU9J2wyaC00Jz48dHQ+U1NMPC90dD48L2E+PC9iPgorPGRkPgorQW4gaW50ZXJmYWNlIHRvIHRoZSBTU0wtc3BlY2lmaWMgcGFydHMgb2YgT3BlblNTTC4KKzwvZGw+CisKKzxQPgorCis8cD48aHI+CisKKzwhLS1UYWJsZSBvZiBDaGlsZC1MaW5rcy0tPgorPEEgTkFNRT0iQ0hJTERfTElOS1MiPjxTVFJPTkc+U3Vic2VjdGlvbnM8L1NUUk9ORz48L0E+CisKKzxVTCBDTEFTUz0iQ2hpbGRMaW5rcyI+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwxMTIiCisgIGhyZWY9Im9wZW5zc2wtY3J5cHRvLmh0bWwiPjMuMSA8dHQgY2xhc3M9Im1vZHVsZSI+Y3J5cHRvPC90dD4gLS0gR2VuZXJpYyBjcnlwdG9ncmFwaGljIG1vZHVsZSA8L0E+Cis8VUw+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwxMTMiCisgIGhyZWY9Im9wZW5zc2wteDUwOS5odG1sIj4zLjEuMSBYNTA5IG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMTE0IgorICBocmVmPSJvcGVuc3NsLXg1MDluYW1lLmh0bWwiPjMuMS4yIFg1MDlOYW1lIG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMTE1IgorICBocmVmPSJvcGVuc3NsLXg1MDlyZXEuaHRtbCI+My4xLjMgWDUwOVJlcSBvYmplY3RzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDExNiIKKyAgaHJlZj0ib3BlbnNzbC14NTA5c3RvcmUuaHRtbCI+My4xLjQgWDUwOVN0b3JlIG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMTE3IgorICBocmVmPSJvcGVuc3NsLXBrZXkuaHRtbCI+My4xLjUgUEtleSBvYmplY3RzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDExOCIKKyAgaHJlZj0ib3BlbnNzbC1wa2NzNy5odG1sIj4zLjEuNiBQS0NTNyBvYmplY3RzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDExOSIKKyAgaHJlZj0ib3BlbnNzbC1wa2NzMTIuaHRtbCI+My4xLjcgUEtDUzEyIG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMTIwIgorICBocmVmPSJvcGVuc3NsLTUwOWV4dC5odG1sIj4zLjEuOCBYNTA5RXh0ZW5zaW9uIG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMTIxIgorICBocmVmPSJvcGVuc3NsLW5ldHNjYXBlLXNwa2kuaHRtbCI+My4xLjkgTmV0c2NhcGVTUEtJIG9iamVjdHMgPC9BPgorPC9VTD4KKzxCUj4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDEyMiIKKyAgaHJlZj0ib3BlbnNzbC1yYW5kLmh0bWwiPjMuMiA8dHQgY2xhc3M9Im1vZHVsZSI+cmFuZDwvdHQ+IC0tIEFuIGludGVyZmFjZSB0byB0aGUgT3BlblNTTCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMTIzIgorICBocmVmPSJvcGVuc3NsLXNzbC5odG1sIj4zLjMgPHR0IGNsYXNzPSJtb2R1bGUiPlNTTDwvdHQ+IC0tIEFuIGludGVyZmFjZSB0byB0aGUgU1NMLXNwZWNpZmljIHBhcnRzIG9mIE9wZW5TU0wgPC9BPgorPFVMPgorPExJPjxBIE5BTUU9InRleDJodG1sMTI0IgorICBocmVmPSJvcGVuc3NsLWNvbnRleHQuaHRtbCI+My4zLjEgQ29udGV4dCBvYmplY3RzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDEyNSIKKyAgaHJlZj0ib3BlbnNzbC1jb25uZWN0aW9uLmh0bWwiPjMuMy4yIENvbm5lY3Rpb24gb2JqZWN0cyA8L0E+Cis8L1VMPjwvVUw+Cis8IS0tRW5kIG9mIFRhYmxlIG9mIENoaWxkLUxpbmtzLS0+CisKKzxESVYgQ0xBU1M9Im5hdmlnYXRpb24iPgorPHA+PGhyPgorPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxBIGhyZWY9ImJ1aWxkaW5nLXdpbmRvd3MuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIEhSRUY9InB5T3BlblNTTC5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iYnVpbGRpbmctd2luZG93cy5odG1sIj4yLjIgQnVpbGRpbmcgdGhlIE1vZHVsZTwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+VXA6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgSFJFRj0icHlPcGVuU1NMLmh0bWwiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJvcGVuc3NsLWNyeXB0by5odG1sIj4zLjEgY3J5cHRvICA8L0E+Cis8aHI+Cis8c3BhbiBjbGFzcz0icmVsZWFzZS1pbmZvIj5SZWxlYXNlIDAuNi48L3NwYW4+Cis8L0RJVj4KKzwhLS1FbmQgb2YgTmF2aWdhdGlvbiBQYW5lbC0tPgorCis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9wcmV2aW91cy5naWYgYi9kb2MvaHRtbC9wcmV2aW91cy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxZGExNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3ByZXZpb3VzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9weU9wZW5TU0wuY3NzIGIvZG9jL2h0bWwvcHlPcGVuU1NMLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjdjZjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvcHlPcGVuU1NMLmNzcwpAQCAtMCwwICsxLDg4IEBACisvKgorICogVGhlIGZpcnN0IHBhcnQgb2YgdGhpcyBpcyB0aGUgc3RhbmRhcmQgQ1NTIGdlbmVyYXRlZCBieSBMYVRlWDJIVE1MLAorICogd2l0aCB0aGUgImVtcHR5IiBkZWNsYXJhdGlvbnMgcmVtb3ZlZC4KKyAqLworCisvKiBDZW50dXJ5IFNjaG9vbGJvb2sgZm9udCBpcyB2ZXJ5IHNpbWlsYXIgdG8gQ29tcHV0ZXIgTW9kZXJuIE1hdGg6IGNtbWkgKi8KKy5tYXRoICAgICAgICAgICAgICAgICAgIHsgZm9udC1mYW1pbHk6ICJDZW50dXJ5IFNjaG9vbGJvb2siLCBzZXJpZjsgfQorLm1hdGggaSAgICAgICAgICAgICAgICAgeyBmb250LWZhbWlseTogIkNlbnR1cnkgU2Nob29sYm9vayIsIHNlcmlmOworICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZCB9CisuYm9sZG1hdGggICAgICAgICAgICAgICB7IGZvbnQtZmFtaWx5OiAiQ2VudHVyeSBTY2hvb2xib29rIiwgc2VyaWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkIH0KKworLyogSW1wbGVtZW50IGJvdGggZml4ZWQtc2l6ZSBhbmQgcmVsYXRpdmUgc2l6ZXM6ICovCitzbWFsbC54dGlueSAgICAgICAgICAgICB7IGZvbnQtc2l6ZSA6IHh4LXNtYWxsIH0KK3NtYWxsLnRpbnkgICAgICAgICAgICAgIHsgZm9udC1zaXplIDogeC1zbWFsbCB9CitzbWFsbC5zY3JpcHRzaXplICAgICAgICB7IGZvbnQtc2l6ZSA6IHNtYWxsZXIgfQorc21hbGwuZm9vdG5vdGVzaXplICAgICAgeyBmb250LXNpemUgOiBzbWFsbCB9CitiaWcueGxhcmdlICAgICAgICAgICAgICB7IGZvbnQtc2l6ZSA6IGxhcmdlIH0KK2JpZy54eGxhcmdlICAgICAgICAgICAgIHsgZm9udC1zaXplIDogeC1sYXJnZSB9CitiaWcuaHVnZSAgICAgICAgICAgICAgICB7IGZvbnQtc2l6ZSA6IGxhcmdlciB9CitiaWcueGh1Z2UgICAgICAgICAgICAgICB7IGZvbnQtc2l6ZSA6IHh4LWxhcmdlIH0KKworLyoKKyAqIERvY3VtZW50LXNwZWNpZmljIHN0eWxlcyBjb21lIG5leHQ7CisgKiB0aGVzZSBhcmUgYWRkZWQgZm9yIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbi4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHNpemUgc3BlY2lmaWNhdGlvbnMgZm9yIHRoZSBIKiBlbGVtZW50cyBhcmUgYmVjYXVzZQorICogTmV0c2NhcGUgb24gU29sYXJpcyBvdGhlcndpc2UgZG9lc24ndCBnZXQgaXQgcmlnaHQ7IHRoZXkgYWxsIGVuZCB1cAorICogdGhlIG5vcm1hbCB0ZXh0IHNpemUuCisgKi8KKworYm9keSAgICAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzAwMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsgfQorCithOmFjdGl2ZSAgICAgICAgICAgICAgICB7IGNvbG9yOiAjZmYwMDAwOyB9CithOnZpc2l0ZWQgICAgICAgICAgICAgICB7IGNvbG9yOiAjNTUxYThiOyB9CithOmxpbmsgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDAwMGJiOyB9CisKK2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYgIHsgZm9udC1mYW1pbHk6IGF2YW50Z2FyZGUsIHNhbnMtc2VyaWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkIH0KK2gxICAgICAgICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAxODAlIH0KK2gyICAgICAgICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAxNTAlIH0KK2gzLCBoNCAgICAgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAxMjAlIH0KK2NvZGUsIHR0ICAgICAgICAgICAgICAgIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSB9Cit2YXIgICAgICAgICAgICAgICAgICAgICB7IGZvbnQtZmFtaWx5OiB0aW1lcywgc2VyaWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbCB9CisKKy5uYXZpZ2F0aW9uIHRkICAgICAgICAgIHsgYmFja2dyb3VuZC1jb2xvcjogIzk5Y2NmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBhdmFudGdhcmRlLCBzYW5zLXNlcmlmOworICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDExMCUgfQorCisucmVsZWFzZS1pbmZvICAgICAgICAgICB7IGZvbnQtc3R5bGU6IGl0YWxpYzsgfQorCisudGl0bGVncmFwaGljICAgICAgICAgICB7IHZlcnRpY2FsLWFsaWduOiB0b3A7IH0KKworLnZlcmJhdGltICAgICAgICAgICAgICAgeyBjb2xvcjogIzAwMDA4YiB9CisKKy5lbWFpbCAgICAgICAgICAgICAgICAgIHsgZm9udC1mYW1pbHk6IGF2YW50Z2FyZGUsIHNhbnMtc2VyaWYgfQorLm1pbWV0eXBlICAgICAgICAgICAgICAgeyBmb250LWZhbWlseTogYXZhbnRnYXJkZSwgc2Fucy1zZXJpZiB9CisubmV3c2dyb3VwICAgICAgICAgICAgICB7IGZvbnQtZmFtaWx5OiBhdmFudGdhcmRlLCBzYW5zLXNlcmlmIH0KKy51cmwgICAgICAgICAgICAgICAgICAgIHsgZm9udC1mYW1pbHk6IGF2YW50Z2FyZGUsIHNhbnMtc2VyaWYgfQorLmZpbGUgICAgICAgICAgICAgICAgICAgeyBmb250LWZhbWlseTogYXZhbnRnYXJkZSwgc2Fucy1zZXJpZiB9CisKKy50YWJsZWhlYWRlciAgICAgICAgICAgIHsgYmFja2dyb3VuZC1jb2xvcjogIzk5Y2NmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IGF2YW50Z2FyZGUsIHNhbnMtc2VyaWY7IH0KKworLnJlZmNvdW50LWluZm8gICAgICAgICAgeyBmb250LXN0eWxlOiBpdGFsaWMgfQorLnJlZmNvdW50LWluZm8gLnZhbHVlICAgeyBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMwMDY2MDAgfQorCisvKgorICogU29tZSBkZWNvcmF0aW9uIGZvciB0aGUgIlNlZSBhbHNvOiIgYmxvY2tzLCBpbiBwYXJ0IGluc3BpcmVkIGJ5IHNvbWUgb2YKKyAqIHRoZSBzdHlsaW5nIG9uIExhcnMgTWFyaXVzIEdhcnNob2wncyBYU0EgcGFnZXMuCisgKiAoVGhlIGJsdWUgaW4gdGhlIG5hdmlnYXRpb24gYmFycyBpcyAjOTlDQ0ZGLikKKyAqLworLnNlZWFsc28gICAgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmYWYwOworICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IHRoaW4gc29saWQgYmxhY2s7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRwdCB9CisKKy5zZWVhbHNvIC5oZWFkaW5nICAgICAgIHsgZm9udC1zaXplOiAxMTAlIH0KKworLyoKKyAqIENsYXNzICdhdmFpbGFiaWxpdHknIGlzIHVzZWQgZm9yIG1vZHVsZSBhdmFpbGFiaWxpdHkgc3RhdGVtZW50cyBhdAorICogdGhlIHRvcCBvZiBtb2R1bGVzLgorICovCisuYXZhaWxhYmlsaXR5IC5wbGF0Zm9ybSB7IGZvbnQtd2VpZ2h0OiBib2xkIH0KZGlmZiAtLWdpdCBhL2RvYy9odG1sL3B5T3BlblNTTC5ob3cgYi9kb2MvaHRtbC9weU9wZW5TU0wuaG93Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYTE4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9weU9wZW5TU0wuaG93CkBAIC0wLDAgKzEgQEAKKysrKyBwZXJsIC9ob21lL21hcnRpbi9wcm9qZWN0cy9weU9wZW5TU0wvcHlPcGVuU1NMLTAuNi9kb2MvdG9vbHMvbm9kZTJsYWJlbC5wbCAqLmh0bWwKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3B5T3BlblNTTC5odG1sIGIvZG9jL2h0bWwvcHlPcGVuU1NMLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjMjBlZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3B5T3BlblNTTC5odG1sCkBAIC0wLDAgKzEsMTY3IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5QeXRob24gT3BlblNTTCBNYW51YWw8L3RpdGxlPgorPE1FVEEgTkFNRT0iZGVzY3JpcHRpb24iIENPTlRFTlQ9IlB5dGhvbiBPcGVuU1NMIE1hbnVhbCI+Cis8TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0icHlPcGVuU1NMIj4KKzxNRVRBIE5BTUU9InJlc291cmNlLXR5cGUiIENPTlRFTlQ9ImRvY3VtZW50Ij4KKzxNRVRBIE5BTUU9ImRpc3RyaWJ1dGlvbiIgQ09OVEVOVD0iZ2xvYmFsIj4KKzxsaW5rIHJlbD0iU1RZTEVTSEVFVCIgaHJlZj0icHlPcGVuU1NMLmNzcyI+Cis8TElOSyBSRUw9Im5leHQiIGhyZWY9ImNvbnRlbnRzLmh0bWwiPgorPC9oZWFkPgorPGJvZHk+Cis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImNvbnRlbnRzLmh0bWwiPkNvbnRlbnRzPC9BPgorPGJyPjxocj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+Cis8UD4KKworPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKzxjZW50ZXI+Cis8aDE+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC9oMT4KKzxwPjxiPjxmb250IHNpemU9JysyJz5NYXJ0aW4gU2r2Z3JlbjwvZm9udD48L2I+PC9wPgorPHA+PHNwYW4gY2xhc3M9ImVtYWlsIj5tYXJ0aW5Ac3RyYWt0LmNvbTwvc3Bhbj48L3A+Cis8cD4KKzwvY2VudGVyPgorPC9kaXY+CisKKzxQPgorCis8SDM+QWJzdHJhY3Q6PC9IMz4KKzxESVYgQ0xBU1M9IkFCU1RSQUNUIj4KKworVGhpcyBtb2R1bGUgaXMgYSByYXRoZXIgdGhpbiB3cmFwcGVyIGFyb3VuZCAoYSBzdWJzZXQgb2YpIHRoZSBPcGVuU1NMIGxpYnJhcnkuCitXaXRoIHRoaW4gd3JhcHBlciBJIG1lYW4gdGhhdCBhIGxvdCBvZiB0aGUgb2JqZWN0IG1ldGhvZHMgZG8gbm90aGluZyBtb3JlIHRoYW4KK2NhbGxpbmcgYSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGluIHRoZSBPcGVuU1NMIGxpYnJhcnkuCis8L0RJVj4KKzxQPgorCis8UD4KKworPHA+PGhyPgorCis8IS0tVGFibGUgb2YgQ2hpbGQtTGlua3MtLT4KKworCis8VUwgQ0xBU1M9IkNoaWxkTGlua3MiPgorPExJPjxBIE5BTUU9InRleDJodG1sMTAiCisgIGhyZWY9ImNvbnRlbnRzLmh0bWwiPkNvbnRlbnRzPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMTEiCisgIGhyZWY9ImludHJvLmh0bWwiPjEgSW50cm9kdWN0aW9uIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDEyIgorICBocmVmPSJidWlsZGluZy5odG1sIj4yIEJ1aWxkaW5nIGFuZCBJbnN0YWxsaW5nIDwvQT4KKzxVTD4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDEzIgorICBocmVmPSJidWlsZGluZy11bml4Lmh0bWwiPjIuMSBCdWlsZGluZyB0aGUgTW9kdWxlIG9uIGEgVW5peCBTeXN0ZW0gPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMTQiCisgIGhyZWY9ImJ1aWxkaW5nLXdpbmRvd3MuaHRtbCI+Mi4yIEJ1aWxkaW5nIHRoZSBNb2R1bGUgb24gYSBXaW5kb3dzIFN5c3RlbSA8L0E+Cis8L1VMPgorPEJSPgorPExJPjxBIE5BTUU9InRleDJodG1sMTUiCisgIGhyZWY9Im9wZW5zc2wuaHRtbCI+MyA8dHQgY2xhc3M9Im1vZHVsZSI+T3BlblNTTDwvdHQ+IC0tIFB5dGhvbiBpbnRlcmZhY2UgdG8gT3BlblNTTCA8L0E+Cis8VUw+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwxNiIKKyAgaHJlZj0ib3BlbnNzbC1jcnlwdG8uaHRtbCI+My4xIDx0dCBjbGFzcz0ibW9kdWxlIj5jcnlwdG88L3R0PiAtLSBHZW5lcmljIGNyeXB0b2dyYXBoaWMgbW9kdWxlIDwvQT4KKzxVTD4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDE3IgorICBocmVmPSJvcGVuc3NsLXg1MDkuaHRtbCI+My4xLjEgWDUwOSBvYmplY3RzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDE4IgorICBocmVmPSJvcGVuc3NsLXg1MDluYW1lLmh0bWwiPjMuMS4yIFg1MDlOYW1lIG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMTkiCisgIGhyZWY9Im9wZW5zc2wteDUwOXJlcS5odG1sIj4zLjEuMyBYNTA5UmVxIG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMjAiCisgIGhyZWY9Im9wZW5zc2wteDUwOXN0b3JlLmh0bWwiPjMuMS40IFg1MDlTdG9yZSBvYmplY3RzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDIxIgorICBocmVmPSJvcGVuc3NsLXBrZXkuaHRtbCI+My4xLjUgUEtleSBvYmplY3RzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDIyIgorICBocmVmPSJvcGVuc3NsLXBrY3M3Lmh0bWwiPjMuMS42IFBLQ1M3IG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMjMiCisgIGhyZWY9Im9wZW5zc2wtcGtjczEyLmh0bWwiPjMuMS43IFBLQ1MxMiBvYmplY3RzIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDI0IgorICBocmVmPSJvcGVuc3NsLTUwOWV4dC5odG1sIj4zLjEuOCBYNTA5RXh0ZW5zaW9uIG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMjUiCisgIGhyZWY9Im9wZW5zc2wtbmV0c2NhcGUtc3BraS5odG1sIj4zLjEuOSBOZXRzY2FwZVNQS0kgb2JqZWN0cyA8L0E+Cis8L1VMPgorPExJPjxBIE5BTUU9InRleDJodG1sMjYiCisgIGhyZWY9Im9wZW5zc2wtcmFuZC5odG1sIj4zLjIgPHR0IGNsYXNzPSJtb2R1bGUiPnJhbmQ8L3R0PiAtLSBBbiBpbnRlcmZhY2UgdG8gdGhlIE9wZW5TU0wgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDI3IgorICBocmVmPSJvcGVuc3NsLXNzbC5odG1sIj4zLjMgPHR0IGNsYXNzPSJtb2R1bGUiPlNTTDwvdHQ+IC0tIEFuIGludGVyZmFjZSB0byB0aGUgU1NMLXNwZWNpZmljIHBhcnRzIG9mIE9wZW5TU0wgPC9BPgorPFVMPgorPExJPjxBIE5BTUU9InRleDJodG1sMjgiCisgIGhyZWY9Im9wZW5zc2wtY29udGV4dC5odG1sIj4zLjMuMSBDb250ZXh0IG9iamVjdHMgPC9BPgorPExJPjxBIE5BTUU9InRleDJodG1sMjkiCisgIGhyZWY9Im9wZW5zc2wtY29ubmVjdGlvbi5odG1sIj4zLjMuMiBDb25uZWN0aW9uIG9iamVjdHMgPC9BPgorPC9VTD4KKzwvVUw+Cis8QlI+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwzMCIKKyAgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPjQgSW50ZXJuYWxzIDwvQT4KKzxVTD4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDMxIgorICBocmVmPSJleGNlcHRpb25zLmh0bWwiPjQuMSBFeGNlcHRpb25zIDwvQT4KKzxMST48QSBOQU1FPSJ0ZXgyaHRtbDMyIgorICBocmVmPSJjYWxsYmFja3MuaHRtbCI+NC4yIENhbGxiYWNrcyA8L0E+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwzMyIKKyAgaHJlZj0ic29ja2V0LW1ldGhvZHMuaHRtbCI+NC4zIEFjZXNzaW5nIFNvY2tldCBNZXRob2RzIDwvQT4KKzwvVUw+Cis8QlI+Cis8TEk+PEEgTkFNRT0idGV4Mmh0bWwzNCIKKyAgaHJlZj0iYWJvdXQuaHRtbCI+QWJvdXQgdGhpcyBkb2N1bWVudCAuLi48L0E+Cis8L1VMPgorPCEtLUVuZCBvZiBUYWJsZSBvZiBDaGlsZC1MaW5rcy0tPgorCis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzxwPjxocj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJuZXh0LmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJOZXh0IFBhZ2UiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPlB5dGhvbiBPcGVuU1NMIE1hbnVhbDwvdGQ+Cis8dGQ+PEEgaHJlZj0iY29udGVudHMuaHRtbCI+PGltZyBzcmM9ImNvbnRlbnRzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJDb250ZW50cyIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5OZXh0OjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImNvbnRlbnRzLmh0bWwiPkNvbnRlbnRzPC9BPgorPGhyPgorPHNwYW4gY2xhc3M9InJlbGVhc2UtaW5mbyI+UmVsZWFzZSAwLjYuPC9zcGFuPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKworPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc29ja2V0LW1ldGhvZHMuaHRtbCBiL2RvYy9odG1sL3NvY2tldC1tZXRob2RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5NThmMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NvY2tldC1tZXRob2RzLmh0bWwKQEAgLTAsMCArMSwxMTggQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPjQuMyBBY2Vzc2luZyBTb2NrZXQgTWV0aG9kcyA8L3RpdGxlPgorPE1FVEEgTkFNRT0iZGVzY3JpcHRpb24iIENPTlRFTlQ9IjQuMyBBY2Vzc2luZyBTb2NrZXQgTWV0aG9kcyAiPgorPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9InB5T3BlblNTTCI+Cis8TUVUQSBOQU1FPSJyZXNvdXJjZS10eXBlIiBDT05URU5UPSJkb2N1bWVudCI+Cis8TUVUQSBOQU1FPSJkaXN0cmlidXRpb24iIENPTlRFTlQ9Imdsb2JhbCI+Cis8bGluayByZWw9IlNUWUxFU0hFRVQiIGhyZWY9InB5T3BlblNTTC5jc3MiPgorPExJTksgUkVMPSJwcmV2aW91cyIgaHJlZj0iY2FsbGJhY2tzLmh0bWwiPgorPExJTksgUkVMPSJ1cCIgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPgorPExJTksgUkVMPSJuZXh0IiBocmVmPSJhYm91dC5odG1sIj4KKzwvaGVhZD4KKzxib2R5PgorPERJViBDTEFTUz0ibmF2aWdhdGlvbiI+Cis8dGFibGUgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMiI+Cis8dHI+Cis8dGQ+PEEgaHJlZj0iY2FsbGJhY2tzLmh0bWwiPjxpbWcgc3JjPSJwcmV2aW91cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iUHJldmlvdXMgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJpbnRlcm5hbHMuaHRtbCI+PGltZyBzcmM9InVwLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJVcCBPbmUgTGV2ZWwiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PEEgaHJlZj0iYWJvdXQuaHRtbCI+PGltZyBzcmM9Im5leHQuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9Ik5leHQgUGFnZSIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSI+UHl0aG9uIE9wZW5TU0wgTWFudWFsPC90ZD4KKzx0ZD48QSBocmVmPSJjb250ZW50cy5odG1sIj48aW1nIHNyYz0iY29udGVudHMuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IkNvbnRlbnRzIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzx0ZD48aW1nIHNyYz0iYmxhbmsuZ2lmIgorICBib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iIiB3aWR0aD0iMzIiPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlByZXZpb3VzOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImNhbGxiYWNrcy5odG1sIj40LjIgQ2FsbGJhY2tzPC9BPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJpbnRlcm5hbHMuaHRtbCI+NCBJbnRlcm5hbHM8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPk5leHQ6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iYWJvdXQuaHRtbCI+QWJvdXQgdGhpcyBkb2N1bWVudCAuLi48L0E+Cis8YnI+PGhyPgorPC9ESVY+Cis8IS0tRW5kIG9mIE5hdmlnYXRpb24gUGFuZWwtLT4KKworPEgyPjxBIE5BTUU9IlNFQ1RJT04wMDA1MzAwMDAwMDAwMDAwMDAwMDAiPiZuYnNwOzwvQT4KKzxCUj4KKzQuMyBBY2Vzc2luZyBTb2NrZXQgTWV0aG9kcyAKKzwvSDI+Cis8UD4KKzxFTT48RU0+PEVNPldlIHF1aWNrbHkgc2F3IHRoZSBiZW5lZml0IG9mIHdyYXBwaW5nIHNvY2tldCBtZXRob2RzIGluIHRoZQorPHR0IGNsYXNzPSJjbGFzcyI+U1NMLkNvbm5lY3Rpb248L3R0PiBjbGFzcywgZm9yIGFuIGVhc3kgdHJhbnNpdGlvbiBpbnRvIHVzaW5nIFNTTC4gVGhlCitwcm9ibGVtIGhlcmUgaXMgdGhhdCB0aGUgPHR0IGNsYXNzPSJtb2R1bGUiPnNvY2tldDwvdHQ+IG1vZHVsZSBsYWNrcyBhIEMgQVBJLCBhbmQgYWxsIHRoZQorbWV0aG9kcyBhcmUgZGVjbGFyZWQgc3RhdGljLiBPbmUgYXBwcm9hY2ggd291bGQgYmUgdG8gaGF2ZSA8dHQgY2xhc3M9Im1vZHVsZSI+T3BlblNTTDwvdHQ+IGFzCithIHN1Ym1vZHVsZSB0byB0aGUgPHR0IGNsYXNzPSJtb2R1bGUiPnNvY2tldDwvdHQ+IG1vZHVsZSwgcGxhY2luZyBhbGwgdGhlIGNvZGUgaW4KKzxzcGFuIGNsYXNzPSJmaWxlIj5zb2NrZXRtb2R1bGUuYzwvc3Bhbj4sIGJ1dCB0aGlzIGlzIG9idmlvdXNseSBub3QgYSBnb29kIHNvbHV0aW9uLCBzaW5jZSB5b3UKK21pZ2h0IG5vdCB3YW50IHRvIGltcG9ydCB0b25uZXMgb2YgZXh0cmEgc3R1ZmYgeW91J3JlIG5vdCBnb2luZyB0byB1c2Ugd2hlbgoraW1wb3J0aW5nIHRoZSA8dHQgY2xhc3M9Im1vZHVsZSI+c29ja2V0PC90dD4gbW9kdWxlLiBUaGUgb3RoZXIgYXBwcm9hY2ggaXMgdG8gc29tZWhvdyBnZXQgYQorcG9pbnRlciB0byB0aGUgbWV0aG9kIHRvIGJlIGNhbGxlZCwgZWl0aGVyIHRoZSBDIGZ1bmN0aW9uLCBvciBhIGNhbGxhYmxlIFB5dGhvbgorb2JqZWN0LiBUaGlzIGlzIG5vdCByZWFsbHkgYSBnb29kIHNvbHV0aW9uIGVpdGhlciwgc2luY2UgdGhlcmUncyBhIGxvdCBvZgorbG9va3VwcyBpbnZvbHZlZC4KKzwvRU0+PC9FTT48L0VNPgorPFA+Cis8RU0+PEVNPjxFTT5UaGUgd2F5IGl0IHdvcmtzIGlzIHRoYXQgeW91IGhhdmUgdG8gc3VwcGx5IGEgYGA8dHQgY2xhc3M9ImNsYXNzIj5zb2NrZXQ8L3R0Pi1saWtlJycgdHJhbnNwb3J0CitvYmplY3QgdG8gdGhlIDx0dCBjbGFzcz0iY2xhc3MiPlNTTC5Db25uZWN0aW9uPC90dD4uIFRoZSBvbmx5IHJlcXVpcmVtZW50IG9mIHRoaXMgb2JqZWN0IGlzCit0aGF0IGl0IGhhcyBhIDx0dCBjbGFzcz0ibWV0aG9kIj5maWxlbm8oKTwvdHQ+IG1ldGhvZCB0aGF0IHJldHVybnMgYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCdzCit2YWxpZCBhdCB0aGUgQyBsZXZlbCAoaS5lLiB5b3UgY2FuIHVzZSB0aGUgc3lzdGVtIGNhbGxzIHJlYWQgYW5kIHdyaXRlKS4gSWYgeW91Cit3YW50IHRvIHVzZSB0aGUgPHR0IGNsYXNzPSJtZXRob2QiPmNvbm5lY3QoKTwvdHQ+IG9yIDx0dCBjbGFzcz0ibWV0aG9kIj5hY2NlcHQoKTwvdHQ+IG1ldGhvZHMgb2YgdGhlCis8dHQgY2xhc3M9ImNsYXNzIj5TU0wuQ29ubmVjdGlvbjwvdHQ+IG9iamVjdCwgdGhlIHRyYW5zcG9ydCBvYmplY3QgaGFzIHRvIHN1cHBseSBzdWNoCittZXRob2RzIHRvby4gQXBhcnQgZnJvbSB0aGVtLCBhbnkgbWV0aG9kIGxvb2t1cHMgaW4gdGhlIDx0dCBjbGFzcz0iY2xhc3MiPlNTTC5Db25uZWN0aW9uPC90dD4KK29iamVjdCB0aGF0IGZhaWwgYXJlIHBhc3NlZCBvbiB0byB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgb2JqZWN0LgorPC9FTT48L0VNPjwvRU0+Cis8UD4KKzxFTT48RU0+PEVNPkZ1dHVyZSBjaGFuZ2VzIG1pZ2h0IGJlIHRvIGFsbG93IFB5dGhvbi1sZXZlbCB0cmFuc3BvcnQgb2JqZWN0cywgdGhhdCBpbnN0ZWFkCitvZiBoYXZpbmcgPHR0IGNsYXNzPSJtZXRob2QiPmZpbGVubygpPC90dD4gbWV0aG9kcywgaGF2ZSA8dHQgY2xhc3M9Im1ldGhvZCI+cmVhZCgpPC90dD4gYW5kIDx0dCBjbGFzcz0ibWV0aG9kIj53cml0ZSgpPC90dD4KK21ldGhvZHMsIHNvIG1vcmUgYWR2YW5jZWQgZmVhdHVyZXMgb2YgUHl0aG9uIGNhbiBiZSB1c2VkLiBUaGlzIHdvdWxkIHByb2JhYmx5CitlbnRhaWwgc29tZSBzb3J0IG9mIE9wZW5TU0wgYGBCSU9zJycsIGJ1dCBjb252ZXJ0aW5nIFB5dGhvbiBzdHJpbmdzIGJhY2sgYW5kCitmb3J0aCBpcyBleHBlbnNpdmUsIHNvIHRoaXMgc2hvdWxkbid0IGJlIHVzZWQgdW5sZXNzIG5lY2Vzc2FyeS4gT3RoZXIgbmljZQordGhpbmdzIHdvdWxkIGJlIHRvIGJlIGFibGUgdG8gcGFzcyBpbiBkaWZmZXJlbnQgdHJhbnNwb3J0IG9iamVjdHMgZm9yIHJlYWRpbmcKK2FuZCB3cml0aW5nLCBidXQgdGhlbiB0aGUgPHR0IGNsYXNzPSJtZXRob2QiPmZpbGVubygpPC90dD4gbWV0aG9kIG9mIDx0dCBjbGFzcz0iY2xhc3MiPlNTTC5Db25uZWN0aW9uPC90dD4KK2JlY29tZXMgdmlydHVhbGx5IHVzZWxlc3MuIEFsc28sIHNob3VsZCB0aGUgbWV0aG9kIHJlc29sdXRpb24gYmUgdXNlZCBvbiB0aGUKK3JlYWQtdHJhbnNwb3J0IG9yIHRoZSB3cml0ZS10cmFuc3BvcnQ/Cis8L0VNPjwvRU0+PC9FTT4KKzxQPgorCis8RElWIENMQVNTPSJuYXZpZ2F0aW9uIj4KKzxwPjxocj4KKzx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIyIj4KKzx0cj4KKzx0ZD48QSBocmVmPSJjYWxsYmFja3MuaHRtbCI+PGltZyBzcmM9InByZXZpb3VzLmdpZiIKK2JvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSJQcmV2aW91cyBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkPjxBIGhyZWY9ImludGVybmFscy5odG1sIj48aW1nIHNyYz0idXAuZ2lmIgorYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IlVwIE9uZSBMZXZlbCIgd2lkdGg9IjMyIj48L0E+PC90ZD4KKzx0ZD48QSBocmVmPSJhYm91dC5odG1sIj48aW1nIHNyYz0ibmV4dC5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iTmV4dCBQYWdlIiB3aWR0aD0iMzIiPjwvQT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj5QeXRob24gT3BlblNTTCBNYW51YWw8L3RkPgorPHRkPjxBIGhyZWY9ImNvbnRlbnRzLmh0bWwiPjxpbWcgc3JjPSJjb250ZW50cy5naWYiCitib3JkZXI9IjAiIGhlaWdodD0iMzIiCisgIGFsdD0iQ29udGVudHMiIHdpZHRoPSIzMiI+PC9BPjwvdGQ+Cis8dGQ+PGltZyBzcmM9ImJsYW5rLmdpZiIKKyAgYm9yZGVyPSIwIiBoZWlnaHQ9IjMyIgorICBhbHQ9IiIgd2lkdGg9IjMyIj48L3RkPgorPHRkPjxpbWcgc3JjPSJibGFuay5naWYiCisgIGJvcmRlcj0iMCIgaGVpZ2h0PSIzMiIKKyAgYWx0PSIiIHdpZHRoPSIzMiI+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+UHJldmlvdXM6PC9iPiA8YSBjbGFzcz0ic2VjdHJlZiIgaHJlZj0iY2FsbGJhY2tzLmh0bWwiPjQuMiBDYWxsYmFja3M8L0E+Cis8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4gPGEgY2xhc3M9InNlY3RyZWYiIGhyZWY9ImludGVybmFscy5odG1sIj40IEludGVybmFsczwvQT4KKzxiIGNsYXNzPSJuYXZsYWJlbCI+TmV4dDo8L2I+IDxhIGNsYXNzPSJzZWN0cmVmIiBocmVmPSJhYm91dC5odG1sIj5BYm91dCB0aGlzIGRvY3VtZW50IC4uLjwvQT4KKzxocj4KKzxzcGFuIGNsYXNzPSJyZWxlYXNlLWluZm8iPlJlbGVhc2UgMC42Ljwvc3Bhbj4KKzwvRElWPgorPCEtLUVuZCBvZiBOYXZpZ2F0aW9uIFBhbmVsLS0+CisKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL3VwLmdpZiBiL2RvYy9odG1sL3VwLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWQzZTEzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvdXAuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9weU9wZW5TU0wucHMgYi9kb2MvcHlPcGVuU1NMLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YjE5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvcHlPcGVuU1NMLnBzCkBAIC0wLDAgKzEsMjU5OCBAQAorJSFQUy1BZG9iZS0yLjAKKyUlQ3JlYXRvcjogZHZpcHMoaykgNS45MmIgQ29weXJpZ2h0IDIwMDIgUmFkaWNhbCBFeWUgU29mdHdhcmUKKyUlVGl0bGU6IHB5T3BlblNTTC5kdmkKKyUlUGFnZXM6IDE0CislJVBhZ2VPcmRlcjogQXNjZW5kCislJUJvdW5kaW5nQm94OiAwIDAgNTk2IDg0MgorJSVFbmRDb21tZW50cworJURWSVBTV2ViUGFnZTogKHd3dy5yYWRpY2FsZXllLmNvbSkKKyVEVklQU0NvbW1hbmRMaW5lOiBkdmlwcyAtTjAgLW8gcHlPcGVuU1NMLnBzIHB5T3BlblNTTAorJURWSVBTUGFyYW1ldGVyczogZHBpPTYwMCwgY29tcHJlc3NlZAorJURWSVBTU291cmNlOiAgVGVYIG91dHB1dCAyMDA1LjAzLjE0OjExNTgKKyUlQmVnaW5Qcm9jU2V0OiB0ZXhjLnBybworJSEKKy9UZVhEaWN0IDMwMCBkaWN0IGRlZiBUZVhEaWN0IGJlZ2luL057ZGVmfWRlZi9Ce2JpbmQgZGVmfU4vU3tleGNofU4vWHtTCitOfUIvQXtkdXB9Qi9UUnt0cmFuc2xhdGV9Ti9pc2xzIGZhbHNlIE4vdnNpemUgMTEgNzIgbXVsIE4vaHNpemUgOC41IDcyCittdWwgTi9sYW5kcGx1czkwe2ZhbHNlfWRlZi9AcmlnaW57aXNsc3tbMCBsYW5kcGx1czkwezEgLTF9ey0xIDF9aWZlbHNlIDAKKzAgMF1jb25jYXR9aWYgNzIgUmVzb2x1dGlvbiBkaXYgNzIgVlJlc29sdXRpb24gZGl2IG5lZyBzY2FsZSBpc2xzeworbGFuZHBsdXM5MHtWUmVzb2x1dGlvbiA3MiBkaXYgdnNpemUgbXVsIDAgZXhjaH17UmVzb2x1dGlvbiAtNzIgZGl2IGhzaXplCittdWwgMH1pZmVsc2UgVFJ9aWYgUmVzb2x1dGlvbiBWUmVzb2x1dGlvbiB2c2l6ZSAtNzIgZGl2IDEgYWRkIG11bCBUUlsKK21hdHJpeCBjdXJyZW50bWF0cml4e0EgQSByb3VuZCBzdWIgYWJzIDAuMDAwMDEgbHR7cm91bmR9aWZ9Zm9yYWxsIHJvdW5kCitleGNoIHJvdW5kIGV4Y2hdc2V0bWF0cml4fU4vQGxhbmRzY2FwZXsvaXNscyB0cnVlIE59Qi9AbWFudWFsZmVlZHsKK3N0YXR1c2RpY3QvbWFudWFsZmVlZCB0cnVlIHB1dH1CL0Bjb3BpZXN7LyNjb3BpZXMgWH1CL0ZNYXRbMSAwIDAgLTEgMCAwXQorTi9GQkJbMCAwIDAgMF1OL25uIDAgTi9JRW4gMCBOL2N0ciAwIE4vZGYtdGFpbHsvbm4gOCBkaWN0IE4gbm4gYmVnaW4KKy9Gb250VHlwZSAzIE4vRm9udE1hdHJpeCBmbnRyeCBOL0ZvbnRCQm94IEZCQiBOIHN0cmluZy9iYXNlIFggYXJyYXkKKy9CaXRNYXBzIFgvQnVpbGRDaGFye0NoYXJCdWlsZGVyfU4vRW5jb2RpbmcgSUVuIE4gZW5kIEF7L2ZvbyBzZXRmb250fTIKK2FycmF5IGNvcHkgY3Z4IE4gbG9hZCAwIG5uIHB1dC9jdHIgMCBOW31CL3NmIDAgTi9kZnsvc2YgMSBOL2ZudHJ4IEZNYXQgTgorZGYtdGFpbH1CL2Rmc3tkaXYvc2YgWC9mbnRyeFtzZiAwIDAgc2YgbmVnIDAgMF1OIGRmLXRhaWx9Qi9Fe3BvcCBubiBBCitkZWZpbmVmb250IHNldGZvbnR9Qi9Dd3tDZCBBIGxlbmd0aCA1IHN1YiBnZXR9Qi9DaHtDZCBBIGxlbmd0aCA0IHN1YiBnZXQKK31CL0N4ezEyOCBDZCBBIGxlbmd0aCAzIHN1YiBnZXQgc3VifUIvQ3l7Q2QgQSBsZW5ndGggMiBzdWIgZ2V0IDEyNyBzdWJ9CitCL0NkeHtDZCBBIGxlbmd0aCAxIHN1YiBnZXR9Qi9DaXtDZCBBIHR5cGUvc3RyaW5ndHlwZSBuZXtjdHIgZ2V0L2N0ciBjdHIKKzEgYWRkIE59aWZ9Qi9pZCAwIE4vcncgMCBOL3JjIDAgTi9ncCAwIE4vY3AgMCBOL0cgMCBOL0NoYXJCdWlsZGVye3NhdmUgMworMSByb2xsIFMgQS9iYXNlIGdldCAyIGluZGV4IGdldCBTL0JpdE1hcHMgZ2V0IFMgZ2V0L0NkIFggcG9wL2N0ciAwIE4gQ2R4CiswIEN4IEN5IENoIHN1YiBDeCBDdyBhZGQgQ3kgc2V0Y2FjaGVkZXZpY2UgQ3cgQ2ggdHJ1ZVsxIDAgMCAtMSAtLjEgQ3gKK3N1YiBDeSAuMSBzdWJdL2lkIENpIE4vcncgQ3cgNyBhZGQgOCBpZGl2IHN0cmluZyBOL3JjIDAgTi9ncCAwIE4vY3AgMCBOeworcmMgMCBuZXtyYyAxIHN1Yi9yYyBYIHJ3fXtHfWlmZWxzZX1pbWFnZW1hc2sgcmVzdG9yZX1CL0d7e2lkIGdwIGdldC9ncAorZ3AgMSBhZGQgTiBBIDE4IG1vZCBTIDE4IGlkaXYgcGwgUyBnZXQgZXhlY31sb29wfUIvYWR2e2NwIGFkZC9jcCBYfUIKKy9jaGd7cncgY3AgaWQgZ3AgNCBpbmRleCBnZXRpbnRlcnZhbCBwdXRpbnRlcnZhbCBBIGdwIGFkZC9ncCBYIGFkdn1CL25keworL2NwIDAgTiBydyBleGl0fUIvbHNoe3J3IGNwIDIgY29weSBnZXQgQSAwIGVxe3BvcCAxfXtBIDI1NSBlcXtwb3AgMjU0fXsKK0EgQSBhZGQgMjU1IGFuZCBTIDEgYW5kIG9yfWlmZWxzZX1pZmVsc2UgcHV0IDEgYWR2fUIvcnNoe3J3IGNwIDIgY29weQorZ2V0IEEgMCBlcXtwb3AgMTI4fXtBIDI1NSBlcXtwb3AgMTI3fXtBIDIgaWRpdiBTIDEyOCBhbmQgb3J9aWZlbHNlfQoraWZlbHNlIHB1dCAxIGFkdn1CL2NscntydyBjcCAyIGluZGV4IHN0cmluZyBwdXRpbnRlcnZhbCBhZHZ9Qi9zZXR7cncgY3AKK2ZpbGxzdHIgMCA0IGluZGV4IGdldGludGVydmFsIHB1dGludGVydmFsIGFkdn1CL2ZpbGxzdHIgMTggc3RyaW5nIDAgMSAxNworezIgY29weSAyNTUgcHV0IHBvcH1mb3IgTi9wbFt7YWR2IDEgY2hnfXthZHYgMSBjaGcgbmR9ezEgYWRkIGNoZ317MSBhZGQKK2NoZyBuZH17YWR2IGxzaH17YWR2IGxzaCBuZH17YWR2IHJzaH17YWR2IHJzaCBuZH17MSBhZGQgYWR2fXsvcmMgWCBuZH17CisxIGFkZCBzZXR9ezEgYWRkIGNscn17YWR2IDIgY2hnfXthZHYgMiBjaGcgbmR9e3BvcCBuZH1dQXtiaW5kIHBvcH0KK2ZvcmFsbCBOL0R7L2NjIFggQSB0eXBlL3N0cmluZ3R5cGUgbmV7XX1pZiBubi9iYXNlIGdldCBjYyBjdHIgcHV0IG5uCisvQml0TWFwcyBnZXQgUyBjdHIgUyBzZiAxIG5le0EgQSBsZW5ndGggMSBzdWIgQSAyIGluZGV4IFMgZ2V0IHNmIGRpdiBwdXQKK31pZiBwdXQvY3RyIGN0ciAxIGFkZCBOfUIvSXtjYyAxIGFkZCBEfUIvYm9we3VzZXJkaWN0L2JvcC1ob29rIGtub3dueworYm9wLWhvb2t9aWYvU0kgc2F2ZSBOIEByaWdpbiAwIDAgbW92ZXRvL1YgbWF0cml4IGN1cnJlbnRtYXRyaXggQSAxIGdldCBBCittdWwgZXhjaCAwIGdldCBBIG11bCBhZGQgLjk5IGx0ey9RVn17L1JWfWlmZWxzZSBsb2FkIGRlZiBwb3AgcG9wfU4vZW9weworU0kgcmVzdG9yZSB1c2VyZGljdC9lb3AtaG9vayBrbm93bntlb3AtaG9va31pZiBzaG93cGFnZX1OL0BzdGFydHsKK3VzZXJkaWN0L3N0YXJ0LWhvb2sga25vd257c3RhcnQtaG9va31pZiBwb3AvVlJlc29sdXRpb24gWC9SZXNvbHV0aW9uIFgKKzEwMDAgZGl2L0RWSW1hZyBYL0lFbiAyNTYgYXJyYXkgTiAyIHN0cmluZyAwIDEgMjU1e0lFbiBTIEEgMzYwIGFkZCAzNiA0CitpbmRleCBjdnJzIGN2biBwdXR9Zm9yIHBvcCA2NTc4MS43NiBkaXYvdnNpemUgWCA2NTc4MS43NiBkaXYvaHNpemUgWH1OCisvcHtzaG93fU4vUk1hdFsxIDAgMCAtMSAwIDBdTi9CRG90IDI2MCBzdHJpbmcgTi9SeCAwIE4vUnkgMCBOL1Z7fUIvUlYvdnsKKy9SeSBYL1J4IFggVn1CIHN0YXR1c2RpY3QgYmVnaW4vcHJvZHVjdCB3aGVyZXtwb3AgZmFsc2VbKERpc3BsYXkpKE5lWFQpCisoTGFzZXJXcml0ZXIgMTYvNjAwKV17QSBsZW5ndGggcHJvZHVjdCBsZW5ndGggbGV7QSBsZW5ndGggcHJvZHVjdCBleGNoIDAKK2V4Y2ggZ2V0aW50ZXJ2YWwgZXF7cG9wIHRydWUgZXhpdH1pZn17cG9wfWlmZWxzZX1mb3JhbGx9e2ZhbHNlfWlmZWxzZQorZW5ke3tnc2F2ZSBUUiAtLjEgLjEgVFIgMSAxIHNjYWxlIFJ4IFJ5IGZhbHNlIFJNYXR7QkRvdH1pbWFnZW1hc2sKK2dyZXN0b3JlfX17e2dzYXZlIFRSIC0uMSAuMSBUUiBSeCBSeSBzY2FsZSAxIDEgZmFsc2UgUk1hdHtCRG90fQoraW1hZ2VtYXNrIGdyZXN0b3JlfX1pZmVsc2UgQi9RVntnc2F2ZSBuZXdwYXRoIHRyYW5zZm9ybSByb3VuZCBleGNoIHJvdW5kCitleGNoIGl0cmFuc2Zvcm0gbW92ZXRvIFJ4IDAgcmxpbmV0byAwIFJ5IG5lZyBybGluZXRvIFJ4IG5lZyAwIHJsaW5ldG8KK2ZpbGwgZ3Jlc3RvcmV9Qi9he21vdmV0b31CL2RlbHRhIDAgTi90YWlse0EvZGVsdGEgWCAwIHJtb3ZldG99Qi9Ne1MgcAorZGVsdGEgYWRkIHRhaWx9Qi9ie1MgcCB0YWlsfUIvY3stNCBNfUIvZHstMyBNfUIvZXstMiBNfUIvZnstMSBNfUIvZ3swIE19CitCL2h7MSBNfUIvaXsyIE19Qi9qezMgTX1CL2t7NCBNfUIvd3swIHJtb3ZldG99Qi9se3AgLTQgd31CL217cCAtMyB3fUIvbnsKK3AgLTIgd31CL297cCAtMSB3fUIvcXtwIDEgd31CL3J7cCAyIHd9Qi9ze3AgMyB3fUIvdHtwIDQgd31CL3h7MCBTCitybW92ZXRvfUIveXszIDIgcm9sbCBwIGF9Qi9ib3N7L1NTIHNhdmUgTn1CL2Vvc3tTUyByZXN0b3JlfUIgZW5kCisKKyUlRW5kUHJvY1NldAorVGVYRGljdCBiZWdpbiAzOTE1ODI4MCA1NTM4MDk5NiAxMDAwIDYwMCA2MDAgKHB5T3BlblNTTC5kdmkpCitAc3RhcnQKKyVEVklQU0JpdG1hcEZvbnQ6IEZhIGVjdHQwODAwIDggMTQKKy9GYSAxNCAxMjIgZGY8OTAzODBGRTBFMDkwMzgzRkY5RjBFQkZGRkQ0ODEzRkY1QTM4MDdGQzNGMzgwRkYwMEYzODFGQzAwNworQTIzODNGODAwMzEzMDA0ODEzMDExMjdFQTIwMDdDRUIwMEUwMDBGQzE0MDBBMjVBQTk3RUEyMTI3QzAwN0UxNEUwRUMwMUYwCisxMjdGN0VFQjgwMDNFQTFGQzBFQzA3RTAzODBGRjAwRjM5MDdGQzFGQzA2Q0I1MTI4MDZDMTQwMDZDNUJFQjNGRjhFQjBGRTAKKzFDMkI3REE5MjM+NjcgRDxCNjEyRjAxNUY4QTQzODBGODAwMEE1MTU3MDE1MDBBMjE0MzgxNDdDQTNFQkZGRkNBNUVCODA3QworQTMxNDM4OTFDN0ZDQTMxNTFDMTUzRUE2QjYxMkZFQTQxNUZDMUYyOTdFQTgyMz42OSBEPDM4MDNGRkYwMDAwRjEzRkM0ODdGCis0ODdGQTIzOTdGODA3RjgwMzg3RTAwMUYwMDdDMTMwRkEyMDBGQzE0QzA0ODEzMDdCM0E0NkMxMzBGQTIwMDdDMTQ4MEEyMDAKKzdFMTMxRjM4N0Y4MDdGNkNCNTEyMDBBMjZDNUI2QzVCMDAwMzEzRjAxQTJCN0NBOTIzPjc5CitEPEI1MTJGMDE0RkU4MDE1ODAxNUMwMzkwRjgwMUZFMEVDMDdGMDE0MDMxNDAxMTVGODE0MDBBNTE0MDExNUYwMTQwMzE0MDcKK0VDMUZFMDkwQjUxMkMwMTU4MDE1MDA1QzE0RjAwMTgwQzdGQ0FCRUFGRkY4N0ZBMzVCMUQyOTdFQTgyMz5JPDAwN0ZCNTEyCis4MEI2MTJDMEE0NkMxNDgwMUEwNjdDN0UyMz45NSBEPDM4MDNGRjgwMDAwRjEzRTA0ODEzRjg0ODdGODBFQjgwRkZFQzNGODAKKzM4MUYwMDFGQzdGQzE0MEYxNEZGMTM3RjAwMDNCNUZDMTIwRjVBMzg3RkYwMEYxMzAwMTJGQ0EyNUExNDFGN0U2QzEzM0YzOAorN0Y4MUZGOTBCNTEyRkM2QzE0RkU3RTAwMDcxM0M3MzkwMUZFMDFGQzFGMUQ3RDlDMjM+OTcKK0Q8QjQ3RTdGQTQxMjA3QTdFQkMxRkNFQkM3RkYwMURGMTNDMDkwQjUxMkUwMTVGMDkwMzhGRTBGRjhFQkY4MDM5MDM4RjAwMQorRkNFQkUwMDBBMjQ5MTM3RUEyMTUzRUE1MTU3RTdGMTVGQzdGMTQwMTkwMzhGODAzRjg5MDM4RkUwRkYwOTBCNUZDMTVFMDAxCitERjEzODAwMUNGMTMwMDM4MDM4M0Y4MUYyOTdGQTgyMz5JPEVCM0ZGMEVCRkZGQzAwMDMxM0ZGNUE1QTM4MUZFMDdGRUEzRgorODAzODdGMDAzRTAwN0U5MEM3RkNBMjVBQTI1QUE1N0VBMjAwN0UxMzA3MDA3RkVCMEY4MDE0MUZFQTNGQzAzOTFGRjA3RjAwCis2Q0I1RkM2QzVCNkM1QkM2MTNGMEVCM0ZDMDE5MUQ3QjlDMjM+STxFQjNGQzBFQkZGRjgwMDAzN0Y0ODEzRkY0ODE0ODAzOAorMUZGMDdGMzkzRjgwMUZDMEVCMDAwRjAwN0UxMzA3MTVFMDVBQjZGQ0E0MTVDMDAwRjhDOEZDN0VBMjAwN0VFQjAxQzAwMDdGCitFQjAzRTAzODNGODAwNzEzRTAzOTFGRjgxRkMwNkNCNUZDNkMxNDgwMDAwMUVCRkUwMDZDNkM1QUVCMUZFMDFCMUQ3RDlDMjMKKz4xMDEgRDwxNEUwRUIwM0Y4QTVFQjAwRTAxNDAwQTYzODAzRkZGMDQ4MTNGOEEzN0VDN0ZDQjNBQjEzMDExMjM4Mzg3QzAzCitGMDEyRkVFQjBGRTBCNUZDMTRDMDZDMTMwMDZDNUFFQTBGRjgxNTM5N0RBOTIzPjEwNiBEPEVBN0ZGRUI1RkNBMzdFRUEwMAorMUZCM0FEMDA3RkI1MTJDMEI2MTJFMEEzNkMxNEMwMUIyOTdDQTgyMz4xMDggRDwxMzcwMTNGOEE3MDA3RkI1MTI4MEI2MTIKK0MwQTM2QzE0ODBEODAwRjhDN0ZDQUNFQzAxQzBFQzAzRTBBM0VCRkMwNzE0MEY5MDM4RkUxRkMwRUI3RkZGMTU4MDkwMzgzRgorRkUwMEVCMEZGQ0VCMDdGMDFCMjU3RUE0MjM+MTE2IEQ8MzlGRkYwM0ZGQ0E1MzkwRjgwMDdDMDAwMDcxNDgwQTJFQkMwMEYKKzAwMDMxNDAwQTI2RDVBMDAwMTEzMUVBMkVCRjAzRTAwMDAxMzNDQTJFQkY4N0NFQjc4NzhBMkVCN0NGOEVCM0NGMEEyMTMzRgorNkQ1QUEzNkQ1QTZENUExRTFEN0U5QzIzPjExOCBEPDM5RkZGMDNGRkNBNTM5MDc4MDA3QzAxNTgwMTNDMDAwMDMxMzBGMTUKKzAwRUEwMUUwNUNFQkYwMUUxMjAwQTI2RDVBMTM3OEEyNkQ1QUEzRUIxRTcwMTRGMDEzMEVFQjBGRTBBMjEzMDc1Q0EzNUNBMgorMTMwRjkxQzdGQ0EyRUEzRTFGRUE3RjFFMTMzRUVBN0NGQzEyN0Y1QjZDNUE2QzVBRUEwRjgwMUUyQzdFOUMyMz4xMjEKK0QgRQorJUVuZERWSVBTQml0bWFwRm9udAorJURWSVBTQml0bWFwRm9udDogRmIgZWN0aTA4MDAgOCA2CisvRmIgNiAxMTkgZGY8RUIwN0MwRUIxRkYwOTAzODdDMzlDMEVCRjgxRkVBMDFGMDM4MDNFMDBGRUEwN0MwMTIwRkQ4MUY4MAorMTM4MEEyRUEzRjAwMTQxRjQ4MTQwMDEyN0VBMjVDMDBGRTEzM0U1QUEyRUM3RTE4RUM3QzM4NUFBMjE0RkNEODc4MDExMzc4CiszOTdDMDNGODcwQTIzOTNDMEY3OEUwMzgxRTFFM0QzOTBGRjgxRkMwMzkwM0UwMEYwMDFEMUY3OTlEMjQ+OTcKK0Q8MTNGODEyMUZBMjEyMDFBMjVCQTIxMjAzQTI1QkEyMTIwN0EyNUJBMjEyMEZFQkM3QzBFQjlGRjBFQkY4NzgzODFGRjAzQworRUJFMDNFRUJDMDFFRUI4MDFGRUEzRjAwQTIxMjNFQTIwMDdFMTMzRkEyMTI3Q0EyMTQ3RjAwRkMxMzdFNUFBMjE0RkNBMjE0CitGODEzMDExNEYwRUIwM0UwRUE3ODA3MTRDMDM4M0MwRjgwMzgxRTNFMDBFQTBGRjhFQTAzRTAxODJGNzhBRDIxPkk8RUIwMworRjhFQjBGRkVFQjNFMEZFQkY4MDczOTAxRjAwMzgwRUEwM0UwRUEwN0MwMDAwRjEzMDdEODFGODAxMzAwNUMzODNGMDAxRTVDCiszODdGMDNGOEVCRkZFMDQ5QzdGQzAwN0VDOEZDMTJGRTVBQTQxMjdDRUMwMTgwRUMwM0MwRUMwNzgwNkNFQjBGMDAxNDFFNkMKKzEzN0MzODBGODNGMDM4MDNGRkMwQzY0OEM3RkMxQTFGNzk5RDIxPjEwMSBEPDEzMUZFQTAzRkZBMkVBMDAzRkEyMTMzRUEyCisxMzdFQTIxMzdDQTIxM0ZDQTI1QkEyMTIwMTE0N0U5MDM4RjNGRjgwOTAzOEY3ODdDMDM5MDNGRTAzRTAxM0ZDMTNGOEEyRUEKKzA3RjAxM0UwQTIxM0MwMDAwRjEzMDcxNUMwMTM4MEEyMDAxRjEzMEYxNTgwMTMwMDE0MUY0ODE0MDYxNTBFMDAzRTEzM0YxNAorM0UwMDdFMTQxRUVDN0UxQzAwN0MxMzdDRUMzQzM4MTJGQzE1NzA0OEVCMUZFMDAwNzBFQjA3ODAxRjJGN0JBRDI0PjEwNAorRDxFQjBGQzBFQjdGRjBFQkYwM0MzODAxRTAxQzM4MDNDMDFFRUEwNzgwMTQzRUEyMDAwRjEzM0MxNDE4RUJDMDAwMTNGODEzCitGRjZDMTNDMDZDMTNFMDZDMTNGMEVBMDA3RjEzMDcxMzAzMTMwMUVBNzgwMDEyRkNBMjEzMDEwMEY4MTNFMDEyRTBFQjAzQzAKKzM4RjAwNzgwMzg3ODFGMDBFQTFGRkNFQTA3RjAxNzFGN0E5RDFEPjExNSBEPDM5MDNDMDAxQzAzOTBGRjAwM0UwMzkxRTc4CiswN0YwRUExQzdDMTIzODAwNzgxMzAzMDA3MDEzMDExM0ZDRDhGMEY4MTNFMDEyRTAwMEUxMTMwMDM4QzFGMDAxMDAwMTE0QzAKKzEyMDMxM0UwMTQwMzAwMDcxNDgwMTNDMEEyRUMwNzAwMTIwRjEzODAxNDBFQTI1QzEyMDc2RDVBMDAwMzVCNkQ1QUM2QjQ1QQorMDEzRkM3RkMxQzFGN0E5RDIxPjExOCBEIEUKKyVFbmREVklQU0JpdG1hcEZvbnQKKyVEVklQU0JpdG1hcEZvbnQ6IEZjIGVjcm0xNDQwIDE0LjQgMgorL0ZjIDIgOTQgZGY8QjUxMkMwQTI0OEM3RkNCM0IzQjNCM0IzQjNBOEI1MTJDMEEyMTI3ODc1RDkyMD45MQorRDxCNTEyQzBBMkVBMDAxRkIzQjNCM0IzQjNCM0E4QjVGQ0EyMTI3ODdFRDkyMD45MyBEIEUKKyVFbmREVklQU0JpdG1hcEZvbnQKKyVEVklQU0JpdG1hcEZvbnQ6IEZkIGVjdGkxMDAwIDEwIDQwCisvRmQgNDAgMTIzIGRmPDA0RkZFQjAzRjAwMzAzOTAzOEUwMEZGQzkyM0EwRkMwRjAxRjFFOTIzQTNGMDA3ODNFMEY5MjNBN0UKKzAxRjg3QzNGREI3QzAzRUJGQzdGMDNGQzE0RjhEQTAxRjgxM0Y5MDVGMTEzN0VEQzAxRTExMzNDOTEzQjAzRjAwMDAzRjAwMAorQTMxNDA3NEIxMzA3NjBBMzE0MEY0QjEzMEY2MEEzMDEwRkI4MTJDMEEzOTAzQzAwMUY4MDAwMUY4MDAwQTMwMjNGMTQzRjkyCitDNzkwQzdGQ0E0NEE1QzAyN0UxNDdFQTQwMkZFMTRGRTRBNUNBNDEzMDE0QTEzMDE1RkEzMTMwMzRBMTMwMzVGQTMxMzA3NEEKKzQ5NUFBNDQ5NDg0OTVBQTQ0OTQ4NDk1QUEzMDAxQ0Q5MDM4MDkwQzhGQzAwN0U5MDM4MEZDMDNGMDEzRTE0M0UwMEZFMDExRgorNUIxMzNDMDE3QzVDM0FGODc4MEYwMUUwRDg3OEYwRUIwN0MwMjczRkUwMDNGRkM5RkMzOTBGODAwMEZDNDA0QzgyQkEzMz4KKzI3IEQ8RUUzRkZDNEJCNTEyODA5MjM5MDdFMDA3QzA5MjM5MUY4MDAxRTBEQjNGMDAxM0YwMDM3RTEzMDM0QjEzMDdBMjRBCis1QTE4RTA0QTQ4RUIwMzgwOTRDN0ZDQTMxNDA3NURBNDE0MEY1REEzMDEwRkI3RkNBMjVGOTAzQTAwMUY4MDAwN0VBMjE3RkUKKzAyM0Y1QzkyQzdGQ0EyMTYwMTVGNUMxNDdFMTYwMzVGQTIxNEZFNEExMzA3NUZBMzAxMDExNDBGNUY0QUVDQzFDMEEyMTYxRgorMTc4MzAxMDMxNjgwNUNBMkVGODcwMDEzMDc0QTVDRUUwRjhFRUUwNzlFRUUwM0ZDMDEwRkVDMDBGMDRBOTFDN0ZDQTM1QzEzCisxRkEyMDAxQzkwQ0FGQzEyN0U1QkVBRkUzRTEzM0MxMzdDRUFGODc4RUE3OEYwRUEzRkUwRUEwRjgwMzQ0QzgyQkEyRj5JPAorRUU3RkUwOTIzOTAzRkZGQzdFOTIzODBGQzAzRTkyMzgxRjAwMEYwMzNFRUIzRkZFNEIxMzdGMDNGQzE0RkM1RDE0MDExNzNECis0QTQ4RUIwMUY4QTIxNzAzQTI0QTQ4MTRGMEEyMTcwN0EyMDIwRjE1RTA1RDE3MEZBMjE4QzAwMTBGQjdGQ0EzOTAzQjAwMUYKKzgwMDAxRjgwQTIxNzNGMTQzRjkyQzcxMzAwQTI1RkEyNEExNDdFMTQ3RTE3RkVBMjVGMTRGRTRBMTMwMUEyNUZBMjAxMDExNAorMDM1Q0VGRjA3MEEyMTYwNzAxMDMxNkYwNEFFQ0UwRTBBM0VGRTFDMDEzMDc0QTE0QzM5MzM4MDNFMzgwRUUwMUU3OTMzODAwCitGRjAwNDk0ODE0M0M5NEM3RkNBMzQ5NUFBMzAwMUM5MENBRkMxMjdFMTMzRTEyRkUxMzNDMTM3Q0VBRjg3OEVBNzhGMEVBM0YKK0UwRUEwRjgwMzc0QzgyQkEzMT5JPDE0RjBFQjAzRkNBMjEzMDdBM0VCMEZGOEEzMTRGMEEzRUIxRkUwQTMxNEMwQTNFQjNGCis4MEEzMTQwMEEzMTM3RUEzMTM3Q0EzNUJBMzVCQTM0ODVBQTQ1QjEyMDNBMkM4RkNBODEyMEVFQTNGODAxMjdGMTJGRkEzOTAKK0M3RkMxMjdFMTIzQzE2M0M3N0JCMTk+MzMgRDxFQTAzQzBFQTA3RjAxMjBGMTIxRjEzRjhBMzEzRjBFQTA3QjBFQTAwMzAxMworNzAxMzYwQTIxM0UwMTNDMDEyMDFFQTAzODAxMzAwNUExMjBFNUE1QTVBNUE1QTBEMTk3QTg4MTk+NDQKK0Q8MTIwRUVBM0Y4MDEyN0YxMkZGQTMxMzAwMTI3RTEyM0MwOTA5Nzc4ODE5PjQ2IEQ8RUMwM0Y4RUMxRkZFRUM3QzFGOTEzOAorRjAwRjgwOTAzOTAzRTAwN0MwOTAzODA3QzAwM0Q5MEY4MDEzRTAxNDAwNUIwMTNFMTRGMEEyNUIxM0ZDQTI0ODVBQTIwMDAzCisxNDA3QTI1QjAwMDcxNUUwQTI0OTEzMEYxMjBGQTM0ODQ4RUIxRkMwQTQ0ODQ4RUIzRjgwQTQ0OEM3RUE3RjAwQTMxNTdFMDAKKzdFMTRGRUEyMDBGRTVDMTQwMTVENUE0QTVBQTI1RDE0MDcwMDdDNUM0QTVBQTI0QUM3RkM2QzEzM0U1QzZDNUIzODBGODNFMAorMzgwN0ZGODBDNjQ4QzhGQzI0Mzk3N0I2MkE+NDggRDwwMTAzMTQzODQ5NkMxM0Y4OTEzOEYwMDdGMDkxQjUxMkUwMTY4MDQ5CisxNDAwNUQxNUY4MTVDMEQ5MUUxQ0M3RkMwMTFDQzhGQ0EzMTMzQzEzMzhBMzEzNzgxMzcwQTIxNDdGOTAzOEYxRkZDMDkwMzgKK0U3ODNFMDkwMzhGRTAxRjA5MDM4RjgwMEY4NDg1QTQ5N0Y0OTEzN0M1QkM4MTI3RUEzMTVGRUE0MTQwMTVEMTIxRTEyN0YxNAorMDM0ODVDQTI0ODQ5NUExMkY4MDBFMDVDMTQwRjRBNUE1RDZDNDlDN0ZDMTQ3RTAwNzg1QjM4N0MwMUY4MzgzRTA3RjAzODFGCitGRkMwNkM5MEM4RkNFQTAzRjgyNTM5NzdCNjJBPjUzIEQ8RUMwM0Y4RUMwRkZFOTEzODNGRkY4MDkxMzhGRTBGQzA5MDM5MDEKK0Y4MDdFMDkwMzgwM0YwMDNEOTA3RTAxM0YwOTAzODBGQzAwMUVCMUY4MEVCM0YwMDQ5MTRGODEzN0UxM0ZFQTI0ODVBMTUwMworQTIxMjAzNUIxNkYwMTUwNzEyMDc1QjE1MEZBMjE2RTAxNTFGNkM1QTE1M0Y2REVCN0ZDMDEyMDExNUZGNkM2QzVBOTAzOTc4CiswM0JGODA5MDM4M0MwRjNGRUIxRkZDOTAzOTA3RjA3RjAwOTBDN0ZDMTU3RTE1RkU1RDE0MDE1RDRBNUFBMjAwM0U0OTVBMDAKKzdGNDk1QTVEMTQxRjAwRkU0OUM3RkM0ODEzN0UwMDcwNUIzODc4MDNGMDM4N0MwRkUwMzgzRkZGODA2QzQ4QzhGQ0VBMDNGOAorMjUzOTc4QjYyQT41NyBEPDkwMjYwM0ZGRjg5MUI1MTJFMEEyODFEOTAwMDc5MjM4MDdGODAwNkY2RTVBNjEwMjBGNUU4MURBCiswRTdGNURBMjAyMUU2RDEzMDcwMzNGOTJDN0ZDMTQxQzgyREEzQzFGNUM3MDEzMEVFQzM4MEZBMjAyNzg2RDEzMUUwMzA3MTQKKzFDMTQ3MDgyREFGMDAzMTQzQzcwMTMzODE0RTAxNTAxMDEwMTZFMTM3ODAzMDAxNDcwNUM4MjAxMDM2RTEzRjA2MDRBMTQ4MAorMTYzRjAxMDcxNUMxMDQxRjVCOTFDN0ZDMTdFMTQ5RUMwRkUzNjAwMTBFMTVGMzE2MDcwMTFFMTVGRjk1QzhGQzAxMUM4MEEyCiswMTNDODA1RjEzMzgxNjAwMTM3ODVGMDFGODE1N0NFQTAzRkMyNjdGRkZFMDE0M0NCNTE1MzhBMjQzMzk3Q0I4M0U+NzgKK0Q8MDEwM0I2MTJGMDE3RkVFRkZGODA5MDNCMDAwN0Y4MDAzRkMwNEJFQjBGRjAxNzA3MDIwRkVDMDNGOEVGMDFGQzVEQTIwMgorMUYxNUZFQTI1REEyMTQzRkVGMDNGQzVEQTIwMjdGRUMwN0Y4MThGMDkyQzcxMjBGMThFMDRBRUMxRkMwRUYzRjAwNEExNEZFCitFRTAxRjgwMTAxRUMwRkUwOTFCNjEyODAwNEZDQzdGQzkxMzhGQzAwM0YwMTAzRUMwRjgwODM0QTZEN0U4MzAxMDcxNDAzQTIKKzVDODMwMTBGMTQwNzVGNUNBMjAxMUYxNDBGQTI1Q0EyMTMzRjE2MUY0QUVDRTAwN0EyMDE3RjE2MEYxODBFOTFDN0ZDNDkwMgorMEYxMzFDMDA3RjAxRkUxNTNDQjU5MTM4MDdGMDc4MDQwMzEzRjBDQUVBRkZFMEVGM0Y4MDM4M0I3Q0I4M0Q+ODIKK0Q8QjVEOEY4MEZCNTkwMzgxRkZGRjA2MTAyRjAxOEUwRDgwN0ZFQzdEODdGRTA5MDM4MDNGRTAwRDgwM0Y4REEzRjgwNkQ1QQorRjEwMEYwQTI0RjVBNjIxOTAzNjIxOTA3MDQ3RjkyQzdGQzE5MEUxNkZGNEI1REEyREIwM0JGNUM3RjAwMDFEQTA3M0Y1Q0EyCiswMzBFNUQ4M0RCMUMxRjQ5NUExODAzMDMzODVENEVDOEZDMTU3MDAzRjAxNDBFMTVFMERBMDFDMDVDQTJEQTAzODA1Q0EyREEKKzA3MDA1Q0EyMDIwRTVEMTdDMTRBNURFRkMzODA1QzAyNzgwMkM3QzlGQzE0NzA0QTE0Q0UxM0ZFNkM2QzQ4MTREQ0EyNEExNAorRjhBMjkxQzc1QjE2MEY0OTVENUY1QjVGNUI0OTkyQ0FGQ0EyNDkxNDBFNEMzQjZGQjg1Mz44NworRDw0OUI1RDhGMDA3QjVGQ0EzRDkwMDA3OTBDNzEzRTBEQTAzRkNFQzdGMDAxODdDMDIwMTE1Nzg2RjVDNEQ1QTAyMDA1RDZGCis0OTVBNERDN0ZDNkY1QkVFODAxRTVGMDMzRjVCRUVDMDcwNUY5MjM4MUZDMUMwMTZFM0VFRTc4MERCMEZFRkM4RkMxNkZFNkYKKzVBNUVBMjE1MDM4MkEyMTUwNzgyMTUwRjE1MUNFRDNDRkY1RDRCN0VEQTAxRTA3RkVEQzAzRkRBMDM4MDdGRUMwNzAwMDIwRQorMTMxRjAyMUU4MDVDNEExMzBGMDI3MDgwNUM0OTQ4MTMwNzQ5NDg4MDEzMDc0OUM3MTIwMzAxMUU4MTEzM0UwMUZFODFEODA3CitGRjE0MDdCNTAwRTA5MDM4N0ZGRkZDOTNCNUZDNjA0MDM5N0NCODNFPkk8QjgxMkZDMTdGRUEyMTdGQzJGMDQ3QzcwNDA+Cis5NSBEPDE0RjhFQjA3RkU5MDM4MUY4NzFDOTAzODNFMDNGRTEzN0NFQkY4MDExMjAxNDg0ODZDNUE0ODVBMTIwRkVCQzAwMQorMDAxRjVDQTJFQTNGODAxNDAzMDA3RjVDMTMwMEEyMTQwNzQ4NUM1QUEyMTQwRjVENDhFQ0MxQzBBMjE0MUYxNTgzMTY4MDE0CiszRjE1ODcwMDdDMDE3RjEzMDBFQ0ZGMDc2QzQ4NUI5MDM4MDM4RjhFMzkxRjBGMDc5RTM5MDdGRTAzRkMzOTAxRjAwMEYwMjIKKzI2NzdBNDJBPjk3IEQ8MTMzRkVBMUZGRkEzQzY3RTEzN0VBMzEzRkU1QkEzMTIwMTVCQTMxMjAzNUJBMzEyMDdFQkUwRjhFQgorRTdGRTkwMzhFRjBGODAzOTBGRkMwN0MwMTNGODkwMzhGMDAzRTAxM0UwRDgxRkMwMTNGMEEyMTM4MEEyMTIzRjEzMDBBMjE0CiswNzVBMTI3RUEyMTQwRjEyRkU0ODE0RTBBMjE0MUYxNUMwNUFFQzNGODBBMjE1MDA1QzE0N0U1QzM4NzgwMUY4MDA3QzVCMzgKKzNDMDNFMDM4M0UwN0MwMzgxRTFGODBEODBGRkVDN0ZDRUEwMUYwMUMzQjc3QjkyNj5JPDE0N0Y5MDM4MDNGRkMwOTAzODBGCitDMUUwOTAzODFGMDA3MDAxN0UxMzc4NDkxMzM4MzkwMUY4MDFGODM4MDNGMDAzMTIwNzEzRTAxMjBGRDgxRkMwMTNGMDkxQzcKK0ZDNDg1QUEyMTI3RjkwQzhGQ0EzNUE1QUE0NUFBMzE1MzAxNTM4MTU3ODAwN0MxNEYwMDA3RUVCMDFFMDAwM0VFQjAzQzBFQworMEY4MDZDRUIzRTAwMzgwRjgxRjgzODAzRkZFMEM2OTBDN0ZDMUQyNjc3QTQyNj5JPEVEMDFGODE1RkZBMzE1MDMxNkYwQTIKKzE1MDdBMjE2RTBBMjE1MEZBMjE2QzBBMjE1MUZBMjE2ODBBMjE1M0ZBMjAyRjgxMzAwRUIwN0ZFOTAzODFGODc3RjkwMzgzRQorMDNGRjAxN0M1QkVCRjgwMTEyMDEzODAzRjAwMDQ4NDg1QjEyMEZFQkMwMDExMjFGNURFQTNGODAxNDAzMTI3RjAxMDA1QkEyCisxNDA3NUE0ODVDQTIxNDBGQTI0OEVDQzFDMEEyMTQxRjE1QzNFRDgzODAxNDNGMTU4NzAwN0MwMTdGMTMwMEVDRkYwNzZDNDgKKzVCOTAzODAzOEY4RTM5MUYwRjA3OUUzOTA3RkUwM0ZDMzkwMUYwMDBGMDI1M0I3N0I5MkE+STwxNDdGOTAzODAzRkZDMDkwCiszODBGQzFFMDkwMzgzRjAwRjAwMTdFMTM3ODVCNDg1QTQ4NUE0ODVBMTIwRjQ5MTNGODAwMUYxNEYwMzgzRjgwMDFFQzA3RTAKK0VDMUY4MDM5N0Y4MUZGMDBFQkZGRjgxNDgwOTBDOEZDNUE1QUE1NUFBMjE1MzAwMDdDMTQzODE1NzgwMDdFMTRGMDAwM0VFQgorMDFFMEVDMDNDMDZDRUIwRjgwNkNFQjNFMDAzODA3ODFGODM4MDNGRkUwQzY5MEM3RkMxRDI2NzdBNDI2Pkk8RUQwN0MwRUQKKzFGRjBFRDNFMzhFRDdDM0NFREY4RkMxNUY5MTQwMTE1RjEwMjAzMTNGOEVERjBGMDE2MDAxNDA3NURBNDE0MEY1REE0MTQxRgorNUQwMTBGQjUxMkMwNUIxNjgwOTAzOTAwM0Y4MDAwOTJDN0ZDQTQ1QzE0N0VBNDE0RkU1Q0E0MTMwMTVDQTQxMzAzNUNBNDEzCiswNzVDQTQxMzBGNUNBMzEzMUY1Q0EzOTFDOEZDNUIxMjFDRUE3RTNFQTJFQUZFM0MxMzdDMTM3OEVBRjhGMDEyNzhFQTNGQzAKK0VBMEY4MDI2NEM4MkJBMTk+STxFQzA3QzBFQzNGRjA5MTM4RkMzOEUwOTAzOTAxRjAxRkYwRUIwM0UwOTAzODA3QzAwRkVCCiswRjgwMDExRjEzMDdEOTNGMDAxM0UwNUIwMTdFMTMwRjEzRkU0OTE0QzAxMjAxMTUxRjEyMDM0OTE0ODBBMjE1M0YxMjA3NDkKKzE0MDBBMjVEQTI0OTEzN0VBMjE1RkVBMjVEMDAwMzEzMDExNDAzMTQwNzZDNkM0ODVBMDAwMDEzMUZFQjc4N0JFQjNGRjM5MAorMzgwRkMzRjBFQjAwMDMxNDA3QTI1REEyMTQwRjVEMTIxQzAwN0UxMzFGNUQwMEZFNDlDN0ZDMTQ3RTVDMzg3ODAxRjgzODdDCiswN0UwMzgxRkZGODBEODAzRkVDOEZDMjQzNjdDQTQyNj5JPEVCMDNGMEVBMDFGRkEzRUEwMDA3NUNBMzEzMEY1Q0EzMTMxRgorNUNBMzEzM0Y5MUM4RkNBMzVCOTAzODdFMDdGMEVDMUZGQ0VDNzgzRTkwMzhGRkUwMUYwMkMwMTM4MEVDODAwRjE0MDA0ODVBCisxNkMwNUI0OUVCMUY4MDEyMDM1QkEyMTUzRjAwMDcxNTAwNUJBMjVEMDAwRjE0N0U1QjE1RkU1RDEyMUZEOTgwMDExMzFDMTUKK0Y4MTYzQzAwM0YwMTAzMTMzODAxMDAxM0YwQTIxNjcwNDgxNEUwMDA3RTE1RjAxNkUwRURFMUMwMDBGRTkwMzgwMUUzODA0OAorOTAzODAwRkYwMDAwMzgxNDNDMjYzQjdCQjkyQT5JPEVCMDFDMEVCMDdFMDE0RjAxMzBGMTRFMDEzMDdFQjAzODA5MEM3RkMKK0FCMTNGMEVBMDNGQ0VBMDcxRUVBMEUxRjEyMUNBMjEyMzg1QjEyNzBBMjVCRUFGMDdFMTJFMDEzRkVDNjVBQTIxMjAxNUIxMgorMDNBMjVCMTIwNzVCQTIwMDBGMTNFMDEzQzAxM0MxMDAxRjEzQzAxMzgxQTJFQjgzODAxMzAzRUIwNzAwQTIxMzBFNkM1QUVBCiswN0Y4RUEwMUUwMTQzODc5QjYxOT5JPDE1MEUxNTNGMTU3RkEzMTU3RTE1MUMxNTAwQUJFQzFGODBFQzdGQzBFQ0YxRjBFQgorMDFDMDkwMzgwMzgwRjgxMzA3MTQwMTEzMEYxMzBFMTMxRUVCMUMwMzEzM0MwMTM4MTNGMEEyRUIwMDA3QTIxNUUwQTIxNDBGCitBMjE1QzBBMjE0MUZBMjE1ODBBMjE0M0ZBMjE1MDBBMjVDQTIxNDdFQTIxNEZFQTI1Q0EyMTMwMUEyNUNBMjEzMDM1QzEyMUMKKzM4N0UwN0UwQTIzOEZFMEZDMDVDNDlDN0ZDRUFGODNFRUE3ODdDRUEzRkYwRUEwRkMwMjA0ODgzQjYxOT5JPEVCMDNGMEVBCiswMUZGQTNFQTAwMDc1Q0EzMTMwRjVDQTMxMzFGNUNBMzEzM0Y5MUM4RkNBMzVCMDE3RUVCMEY4MEVEM0ZFMDE1RjA5MDM5RkUKKzAxQzFGMDkwMzhGQzAzODdFQzA3MDcxNDBFMDAwMTAxMUMxM0UwRUJGODM4OTEzODMwMDM4MDAyNzBDN0ZDMDAwMzVCRUJGMQorQzBFQkYzODAwMUZGQzhGQ0VBMDdGQzdGRUJGRkMwRUJFN0Y4MzgwRkUxRkNFQkMwN0UxNDdGODAwMDFGODA5MDM5ODAxRjgxCitDMEEyMTU4MzAwM0YwMTNGMTM4MDAxMDAxMzAzQTIxNTA3NDgxNTAwMDA3RTEzM0VFQzFFMEUxNTFFMDBGRTZENUE0OEVCMDcKK0Y4MDAzOEVCMDFFMDI0M0I3QkI5MjY+STxFQjBGQzBFQTA3RkZBM0VBMDAxRjE0ODBBMjEzM0ZBMjE0MDBBMjVCQTIxMzdFCitBMjEzRkVBMjVCQTIxMjAxQTI1QkEyMTIwM0EyNUJBMjEyMDdBMjVCQTIxMjBGQTI1QkEyMTIxRkEyNUJBMjEyM0ZBMjkwQzcKK0ZDQTI1QUEyRUE3RTBFQTIxMkZFMTMxRUVBRkMxQ0EyMTMzQzEzMzgxMkY4MTM3OEVBNzg3MEVBN0NFMDEyMUZFQTBGODAxMgorM0I3OUI5MTU+STxEODAxRTAwMUZFRUIwN0YwM0MwN0Y4MDNGRjgwMUZGQzNDMEUzQzBGMDdDMDc4M0UzQzFFM0UzQzAzRTEKK0UwMUYyNjFDMUY3OEQ5RjNDMDEzODAzQzM4M0ZGMDAxRjc4MDBGMDJFMDE0MDAwMDc4MDFDMDEzRkUwMDcwMThDMDAyODA1QgorNEE0ODQ4RUIxRjgwRUFGMDdGRDhFMDdFNUNBMjAwMDAwMjA3MTQzRjAxRkUxNzAwNDk1Q0EyMDMwRjVDMDAwMTE3N0U0OTVDCisxOEZFMDMxRjVDMTIwMzQ5REE4MDAxMTMxQzE4RjgwMzNGMTUzQzAwMDcwNDAzMTMzODQ5MDIwMDEzRjBBMjRCMTU3MDAwMEYKKzE3RTA0OTAxN0UxNUYwMTlFMDAzRkVFQ0UxQzAwMDFGRUUwMUUzNDk0OTkwMzgwMEZGMDAwMDA3QzcwMDM4MTQzQzNFMjY3OQorQTQ0ND5JPEQ4MDFFMDEzRkUzQTA3RjgwM0ZGODAzQTBFM0MwRjA3QzAzQTFFM0UzQzAzRTAyNjFDMUY3ODdGMzkzODNGRjAKKzAxMTRFMDAwNzgxM0MwMDA3MDgxMTQ4MDRBNDg1QUVBRjA3RkVBRTA3RUEyMDAwMDE0MDcwMUZFNUM1QkEyMTUwRjAwMDE1RAorNUIxNTFGNUUxMjAzNDk5MDM4M0Y4MzgwMTYwMzE2MDcwMDA3MDI3RjEzMDA0OTEzN0VBMjE2MEUwMDBGMTQ3QzQ5MTQxRTE2CisxQzVFMDAxRkVDM0M3ODQ5RUIxRkUwMDAwN0M3RUEwNzgwMjkyNjc5QTQyRj5JPDE0N0Y5MDM4MDNGRkMwOTAzODBGQzFGMAorOTAzODFGMDBGODAxN0UxMzdDNUI0ODQ4MTM3RTQ4NDgxMzNFMDAwNzE0M0Y1QjEyMEY0ODVBQTI0ODVBMTU3RjEyN0Y5MEM3CitGQ0EyMTVGRjVBNDgxNEZFQTIxNDAxMTVGQzVBRUMwM0Y4QTJFQzA3RjAxNUUwMTQwRjAwN0MxNEMwMDA3RUVCMUY4MDAwM0UKK0VCM0YwMDE0N0U2QzEzRjgzODBGODNGMDM4MDNGRkMwQzY0OEM3RkMyMDI2NzdBNDJBPkk8OTAzOTA3ODAwN0MwOTAzOTFGCitFMDNGRjA5MDM5M0NGMDc4N0M5MDM5MzhGOEUwM0U5MDM4Nzg3RkMwMDE3MDQ5N0VFQ0ZGMDBEOUYwRkUxNDgwMTNFMDVDRUEKKzAxRTExM0MxNUNBMkQ4MDAwMzE0M0ZBMjVDQTIwMTA3MTQ3RkEyNEExNDAwQTIwMTBGNUM1RTVDNEI1QTEzMUY1RUVDODAwMworNUUwMTNGNDk1QTZFNDg1QTVFNkU0OEM3RkMwMTdGMTMzRUVDNzBGQzkwMzg3RTNGRjBFQzBGODAwMUZFQzlGQ0EyNUJBMjEyCiswMUEyNUJBMjEyMDNBMjVCMTIwN0I1MTJDMEEzMjkzNTgwQTQyQT5JPEVDRjgwMzkwMzgwN0ZFMDc5MDM4MUY4NzFGOTAzOAorM0UwM0JGMDE3QzEzRkVFQkY4MDExMjAxMzgwM0YwMDA0ODQ4MTNGQzEyMEY1QjAwMUYxMzAxMTVGOEVBM0Y4MEEyMDA3RjEzCiswMzAxMDAxM0YwQTM0ODEzMDc0ODE0RTBBMzE0MEY0ODE0QzBBMzE0MUYxNTgwMTQzRkEyMDA3QzEzN0ZFQ0ZGMDA2QzVBRUIKKzAzQkYzODFGMEY3RjM4MDdGRTdFRUEwMUYwQzdGQzE0RkU1Q0EzMTMwMTVDQTMxMzAzNUMxMzA3NDhCNTEyQzBBMzIwMzU3NworQTQyNj5JPDM5MDNDMDAzRjAzOTBGRjAxRkZDMzkxRTc4M0MwRjM4MUM3QzcwM0EzQzNFRTAzRjgwMzgzODNGQzBFQjdGODAKKzAwNzgxNTAwMDA3MDEzMDAxNTFDRDhGMDdFOTBDN0ZDRUFFMEZFNUJBMjEyMDAxMjAxNUJBMzEyMDM1QkEzMTIwNzVCQTMxMgorMEY1QkEzMTIxRjVCQTMxMjNGOTBDOUZDMTIwRTIxMjY3OUE0MjM+STwxNEZFOTAzODA3RkY4MDkwMzgwRjgzQzA5MDM4M0UKKzAwRTA0OTEzRjAwMTc4MTM3MDAxRjgxM0YwMDAwMTEzMDMxM0YwQTIxNUUwMDAwM0VCMDFDMDZEQzdGQzdGRUJGRkMwNkMxMworRjgxNEZFNkM3RjZEMTM4MDdGMDEwRjEzQzAxMzAwMTQzRjE0MUYxNDBGMTIzRTEyN0UwMEZFMTQ4MEEzNDhFQjFGMDAxMkUwCis2QzEzM0UwMDcwNUI2QzVCMzgxRTAzRTA2Q0I0NUFEODAxRkVDN0ZDMUMyNjdBQTQyMj5JPEVCMDM4MEVCMDdDMDEzMEZBNAorMTMxRjE0ODBBMzEzM0YxNDAwQTM1QjEzN0UwMDdGQjVGQ0EyQjZGQzM4MDBGQzAwQTMxMjAxNUJBMzEyMDM1QkEzMTIwNzVCCitBMzEyMEY1QkEzMTIxRkVCODAxQ0EyMTQzQzAwM0YxMzM4RUIwMDc4MTQ3MDE0RjAxNEUwRUIwMUMwRUEzRTAzMzgxRjA3ODAKKzM4MEYwRjAwRUEwN0ZDRUEwMUYwMTgzNTc5QjMxQz5JPDEzRjhEODAzRkVFQjAxQzBEODA3OEZFQjAzRTAzOTBFMEY4MDA3CisxMjFFMTIxQzAwMzgxNDBGMTMxRjAwNzgxNUMwMTI3MDAxM0YxMzFGMDBGMDEzMDAwMEUwMTU4MDVCRDgwMDdFMTMzRkEyMDEKK0ZFMTQwMDVCNUQxMjAxNDkxMzdFQTIxNUZFMTIwMzQ5RUJGQzBFQTIwMjAxMTMxRTE2MUMxNUY4MTNFMDE2M0NEOUYwMDMxMworMzgxNDA3MDAwMUVDRjA3MDkxMzgxRUY4RjAzQTAwRjgzQzc4RTA5MDM5M0ZGMDNGQzA5MDM5MEZDMDBGMDAyNzI2NzlBNDJECis+STwwMUYwMTMwRUQ4MDNGQzEzM0ZEODA3MUVFQjdGODBFQTBFMUYxMjFDMTIzQzAwMzgxNDNGNDkxMzFGMDA3MDE0MEZBMgorNUJEOEYwN0UxNDAwMDBFMDgwMTNGRUM2NDg1QjE1MEUxMjAxNUIxNTFFMDAwMzE0MUM1QkEyMTUzQzAwMDcxNDM4NUI1REEzCis1REEyNEE1QTE0MDMwMDAzNUM2RDQ4QzdGQzAwMDExMzBFMzgwMEY4M0NFQjdGRjhFQjBGQzAyMTI2NzlBNDI2Pkk8MDFGMAorMTUwN0Q4MDNGQzkwMzkwMzgwMUY4MEQ4MDcxRTkwMzkwN0MwM0ZDMEQ4MEUxRjEzMEYxMjFDMTIzQzAwMzgwMjFGMTMxRjQ5CitFQzgwMEYwMDcwMTYwN0EyNDkxMzNGRDhGMDdFMTY4MDAwRTBFRDAwMDMxM0ZFQzY0ODQ5MTMwNzE4MDAwMDAxMTQ3RTVCMDMKK0ZFNUIwMDAzMTYwRTQ5NUJBMjE3MUUwMDA3MDEwMTE0MUMwMUUwNUIxNzNDMTczOEEyMTc3ODE3NzAwMjAzMTRGMDVGMDAwMworMDEwNzEzMDE2RDQ4NkM0ODVBMDAwMTkwMzkxRTdDMDc4MDI4MDBGQzNDM0UwRkM3RkM5MDM5M0ZGODFGRkU5MDM5MEZFMDAzCitGMDMyMjY3OUE0Mzc+STw5MDM5MDdFMDA3QzA5MDM5MUZGODFGRjg5MDM5Nzg3QzM4M0M5MDM4RjAzRTcwM0EwMUUwMUVFMAorRkUzODAzQzAxRjAxODAxM0MwRDgwNzAwMTRGQzQ4MTQ4MDAwMEUxNTcwMDIzRjEzMDAwMDFFOTFDN0ZDMTIxQ0EyQzc1QUEyCisxNDdFQTIxNEZFQTI1Q0EyMTMwMUEyNEExMzcwQTIwMTAzMTRGMDE2RTAwMDFDNUIwMDdFMTQwMTAxMDcxNEMwMDBGRUVDMDMKKzgwMDEwRjEzMDcwMTBFRUIwRjAwMzk3ODFDRjgxRTkwMzgzODdDM0MzOTNGRjAzRkYwMzkwN0MwMEZDMDI3MjY3Q0E0Mjc+CitJPDEzRjBEODAzRkNFQjAxQzBEODA3MUVFQjAzRTBEODBFMUYxMzA3MTIxQzEyM0MwMDM4MTQwRjQ5MTRDMDEyNzBBMjQ5MTMKKzFGRDhGMDdFMTQ4MDEyRTAxM0ZFQzY0ODEzM0YxNjAwMTIwMTVCNUQwMDAzMTQ3RTVCQTIxNUZFMDAwNzVDNUJBMjE0MDE1RAorQTMxNDAzNUQxNDA3MDAwMzEzMEZFQkYwMUYzOTAxRjg3RkUwMzgwMDdGRjdFQjFGQzdFQjAwMEY1REEyMTQxRjAwM0Y1QzQ4CisxMzNGOTJDN0ZDMTQ3RTE0N0MwMDdFMTNGQzM4NzAwMUY4RUIwM0UwNkM0ODVBMzgzQzFGODBEODBGRkVDOEZDRUEwM0YwMjMKKzM2NzlBNDI4Pkk8OTAzOTAzQzAwMzgwOTAzODBGRjAwN0Q5MUZGODEzMDA0OTZDNUEwMTdGMTMwRTkwMzhGRkZFMUU5MDM4CitGODNGRkMzOTAxRjAwN0Y4NDlDNjVBNDk1QjE0MDFDNzQ4NUE0QTVBNEFDN0ZDMTQxRTVDNUM1QzQ5NUE0OTVBNDk1QTQ5QzgKK0ZDMTMxRTVCNDkxMzFDNUI0ODQ4MTMzQzQ4NDgxMzM4NDkxMzc4MDAwNzE0RjgzOTBGRjgwMUYwMzkxRkZGMDdFMDM4M0UxRgorRkZEODNDMEY1QjAwNzg1Q0Q4NzAwNzkwQzdGQzM4RjAwM0ZDMzhFMDAwRjAyMTI2N0JBNDIyPkkKK0UKKyVFbmREVklQU0JpdG1hcEZvbnQKKyVEVklQU0JpdG1hcEZvbnQ6IEZlIGVjdHQxMjAwIDEyIDExCisvRmUgMTEgMTIyIGRmPDM4N0ZGRkY4QjU3RTgwQTI1QzZDNUJEODAxRkNDOUZDQjNCM0EzRUUwM0UwRUUwN0YwQTkwMDdGQjcKK0ZDQjhGQ0E0NkMxNkUwMkMzRDdEQkMzMz43NiBEPEQ5MDdGRTEzNzg5MDM5M0ZGRkMwN0M5MEI1RUFGMEZDNDgxNEZDMDAwNworMTRGRjVBRUJGQzAzMzkxRkYwMDA3RjQ4NDgxMzNGMDE4MDEzMUYwMDdGMTQwRjkwQzcxMjA3NDgxNDAzNUFBMjE1MDFBNDZDCitFQzAwRjg2QzE1MDA3RjdGNkM3RTdGRUExRkZFMzgwRkZGRTA2QzEzRkY2QzE0RjA2QzE0RkM2QzZDMTNGRjAxMUYxNDgwMDEKKzAzMTRDMEQ5MDAzRjEzRTAwMjAzMTNGMDkxMzgwMDNGRjhFRDBGRkMxNTA3RUQwM0ZFMTUwMTE1MDAxNkZGQTIwMDdDMTU3RgorMTJGRUE1NkMxNUZGMTZGRTdGRUQwMUZDNkQxMzAzMDFGMEVCMDdGODAxRkMxMzBGOTAzOUZGODA3RkYwOTFCNTEyRTAxNkMwCiswMEZDMTU4MDAxM0ZFQkZFMDBEOEY4MEY1QkQ4NzgwMDEzRTAyODNGN0JCRDMzPjgzIEQ8RUIxRkZDOTBCNTdFMDAwMzE0RTAKKzQ4ODA0ODE0RkM0ODgwOTAzOEYwMDdGRkVCRTAwMTZFN0YxNTNGNkM0ODgwNkM0ODEzMUZDODdGMTUwRkE1RUMwRkZGNDlCNQorRkMxMzFGMTM3RjQ4QjZGQzAwMDcxNDBGNDgxM0MwMzgxRkZDMDBFQTNGRjBFQTdGQzA1QjQ4QzdGQzVBQTU2QzE0MUY3RTZECisxMzdGRDgzRkUwNDk3RUQ5RjgwN0VCRkZGMDZDQjcxMkY4N0U2QzE0RjM2QzE0QzFDNjkxMzgwMDNGRjBEOTFGRjA5MEM3RkMKKzJEMkU3QkFDMzM+OTcgRDxFQ0ZGRjAwMTA3MTNGRTAxMUZFQkZGODA0OTE0QzA0OTE0RTA0OEI2MTJGMDQ4RUJDMDFGOTAzOAorRkUwMDBGNDg1QTQ4NUE0ODQ4RUIwN0UwNDlFQjAzQzA0ODQ4OTBDN0ZDNUJBMjEyN0Y5MEM5RkNBMjVBNUFBOTdFN0VBMjdGCiswMDNGRUMwMUYwNkRFQjAzRjg2QzdFNkQxMzA3NkM2QzE0RjA2QzZDMTMwRjAxRkZFQjFGRTA2Q0VCRTA3RjZDOTBCNTEyQzAKKzZDMTU4MDAxM0YxNDAwNkQxM0ZDMDEwNzVCMDEwMDEzQzAyNTJFNzlBQzMzPjk5IEQ8RUQ3RkY4NEI3RTVDQTI4MDE1N0YxNQorMDFBQkVCMDFGRjAxMDcxM0MxMDExRjEzRjEwMTdGMTNGOTkwQjZGQzVBNDgxMzgxMzkwN0ZFMDAzRkQ4MEZGODEzMUY0OTEzCiswRjQ4NDgxMzA3NDkxMzAzMTIzRjQ5MTMwMTEyN0Y5MEM3RkNBMjVBNUFBOTdFN0UxNTAzN0YxMjNGNkQxMzA3QTI2QzZDMTMKKzBGNkQxMzFGNkM2QzEzM0Y2QzZDMTM3RjI2MDNGRjgxQjUxMkYwOTFCNjEyRjhDNjAyRkQxM0ZDNkQxM0Y5NkQwMUUxMTNGOAorMDEwRjAxODAxM0YwRDkwMUZFQzhGQzJFM0U3REJDMzM+STw0QUI0RkMyNjNGRkMwNzEzQzAyNjdGRkUxRjEzRjAwMEZGMDEKKzdGN0Y5MUI1RkM2Q0I2N0U2Q0VDMDdGRUM2RUJGODAxRUNGMDAwNEE3RjRBN0Y1Q0EyOTFDN0ZDQTM1QkIzQTQzQjNGRkZGOAorMEZGRkZDNDg2RDQ4MTNGRUI1NkM0ODEzRkZBMjZDNDk2QzEzRkU2QzQ5NkMxM0ZDMzAyQzdGQUIzMz4xMTAKK0Q8RUIwMUZFOTAzODBGRkZDMDAxM0YxM0YwNDk3RjkwQjU3RTQ4ODA0OEVCMDNGRjI2MDdGQzAwMTM4MDQ4NDhFQjdGQzA0OQorMTMzRjQ4NDhFQjFGRTA0OTEzMEY0ODQ4RUIwN0YwQTIwMDdGMTVGODkwQzcxMjAzQTMwMEZFRUMwMUZDQUE2QzE0MDM2QzE1CitGOEEyNkQxMzA3MDAzRjE1RjA2RDEzMEZBMjZDNkNFQjFGRTA2RDEzM0Y2QzZDRUI3RkMwNkM2Q0VCRkY4MDI2MDNGRjAzMTMKKzAwNkNFQkZGRkU2QzVDNkQ1QjZENUIwMTBGMTNDMEQ5MDFGRUM3RkMyNjJFN0FBQzMzPkk8RUMwMUZFM0EzRkZDMEZGRkMwCis0ODZDNDgxM0YwMDBGRjAxN0Y3RjkxQjUxMkZFNkNCN0ZDNkNFQkZFMDdDNkQ5RjgwMDEzODAwMkUwRUI3RkMwNEFFQjNGRTAKKzRBMTMxRkVFMEZGMDkxQzdGQzE2MDc0OTE1RjgxNjAzQTIxN0ZDMTYwMUE5MTYwMzE3RjhBMjZEMTQwNzE3RjA2RTEzMEYxNworRTA2RTEzMUZFRTNGQzA2RTEzN0Y5MTM5RjgwMUZGODBEQUZFMDcxMzAwOTFCNTVBNDk1QzZFNUI2RTEzRTAwMjBGMTM4MERBCiswM0ZFQzdGQzkxQzlGQ0FGMzgzRkZGRjg0ODdGQjU3RUEyNkM1QjZDNUIyRTQyN0ZBQjMzPkk8RUQwM0ZFM0I3RkZGODAxRgorRkY4MEI1RDhDMDdGMTNFMDAyQzFCNUZDMDJDMzE0RjAxNEM3NkM5MDM4Q0ZGRTBGMzkwMDFGREZGMDkxMzlGRkMwMDdFMDkyCiszODgwMDNDMDkyQzhGQzVDNUM1Q0EyNUNBMjVDQTM1Q0IyMDA3RkI1MTJGRUI3RkNBNDZDNUMyQzJDN0RBQjMzPjExNAorRDxFQjAzQzA0OTdFMTMwRkFBMDAzRkI2MTJGQzQ4ODFCN0ZDQTM2QzVEMjYwMDBGRTBDOEZDQjNBMzE2MUZFRTNGODBBNTE2Cis3RjZFMTQwMDAxMDc1QzZFNUE5MTM4RkUwN0ZFNkRCNTVBNkQ1QzZENUM2RTVCMDIxRjEzODBEQTA3RkNDN0ZDMjkzODdFQjYKKzMzPjExNiBEPDNCN0ZGRjgwMUZGRkUwQjU2QzQ4MTNGMDZFNDgxM0Y4QTI0QTZDMTNGMDZDNDk2QzEzRTBEODAzRjhDN0VBCitGQzAwMDAwMTE0MDE1RTdGMDAwMDE0MDM2RDVDMTM3RUEyMDE3RjQ5NUE3RkEyNkU0ODVBMTMxRkEyNkQ2QzQ4NUFBMjE0RTAKKzAxMDc0OUM3RkNBMjE0RjAxMzAzMTU3RUVCMDFGOEEyMTU3QzAxMDAxM0ZDMTRGQzVEMTQ3QzE0N0RFQzNGRjBBMzZFNUFBMworNkU1QUEyMTQxRjVEQTIxNDNGOTJDOEZDQTMxNDdFQTIxNEZFMDAzRjVCMTMwMTM4N0Y4MUY4MTM4M0VCODdGMDEzOUZFQkZGCitFMDZDNUI1QzZDOTBDOUZDRUEwRkZDRUEwM0YwMkQ0MjdEQUEzMz4xMjEgRCBFCislRW5kRFZJUFNCaXRtYXBGb250CislRFZJUFNCaXRtYXBGb250OiBGZiBlY3R0MTQ0MCAxNC40IDYKKy9GZiA2IDExMyBkZjwwMDdGQjVGQ0I2N0U4MUEzNUQ2QzkxQzlGQ0M2NDhDQUZDQjNCM0FCRUYwN0MwRUYwRkUwQUIwMDdGCitCOEZDQjlGQ0E1NkMxN0MwMzM0OTdCQzgzRD43NiBEPDAxMDNCNTEyQzAwMTNGMTRGQzkwQjdGQzAwMDMxNkMwNDgxNkUwNDgKKzE2RjA0ODE2Rjg5MUM3RkMwMUY4MTQxRjQ4NDhFQzBGRkMwMUMwMTQwM0EyNDg0OEVDMDFGRUEzOTBDOUZDQTU0ODE2RkY0OAorMTY3RkIzQUU2QzE2RkZBMjZDMTZGRUE1NkQxNDAxQTM2QzZDRUMwM0ZDNkQxNDA3NkQxNDBGRDgxRkZDRUMzRkY4OTAzOUZGCis4MDAxRkY5MUI2RkM2QzE2RjA2QzE2RTA2QzE2QzBDNjE2MDAwMTNGMTRGQzAxMDMxNEMwMzA0QjdBQzkzRD43OQorRDxEQUZGRTAxM0YwMDEwNzAxRkMxM0Y4MDExRkVCRkY4MTAxN0YxNEUxNDhCNjEyRjE0ODE1RkI0ODE1RkY0OEVCODAzRjkwCiszOEZDMDAwN0Q4MUZGMDEzMDE0ODQ4N0Y0OTE0M0Y0ODVBMTYxRjkwQzgxMjBGNUE0ODE1MDdBMzE2MDNBMzdFNkNFRDAxRjAKKzkzQzdGQzdGNkM3RTdGNkM3RTEzRkM2Q0I0RkM2QzEzRjA2QzEzRkY2QzE0Rjg2QzZDRUJGRjgwNkQxNEUwMDEwRjE0RjgwMQorMDExNEZFRDkwMDFGN0YwMjAxMTQ4MERBMDAxRjEzQzAwMzAxMTNFMDkyMzgwMDNGRjBFRTFGRjgxNjA3RUUwM0ZDQTJFRTAxCitGRTE2MDBBMjE3RkYwMDdDMTY3RjEyRkVBNTdFMTdGRjE3RkU3RjE2MDE2REVDMDNGQzZEMTQwNzAxRjhFQzBGRjg2RDE0MUYKK0Q5RkY4MEVCN0ZGMDkxMzlGODAxRkZFMDkxQjYxMkMwNDgxNjgwNDg2QzE1MDAwMTFGNUMwMTA3MTRGODQ4QzYxNEUwMDA3OAorMDEwRjkwQzdGQzMwNEI3QUM5M0Q+ODMgRDxFQzFGRjg5MUI1N0UwMTAzMTRFMDAxMEYxNEY4NDk4MDQ5ODA0OTgwOTAyNkZGCitGODBGMTM4MDQ4RDlDMDAxMTNDMDQ4OTBDN0VBN0ZFMEQ4MDdGQzE0MUY0ODQ4RUMwRkYwNUI0ODQ4RUMwN0Y4MTYwMzQ4NUEKKzQ5MTVGQzE2MDExMjdGOTBDOEZDMTdGRTQ4MTUwMDVBQjhGQ0E2MTdGQzQ4Q0FGQzdFN0VBMzdGMTIzRjdGNkM2QzE1N0MxNworRkU2QzdFN0Y2QzZDMTQwMTZDQjRFQzAzRkM2RTEzMDc2QzAxRjBFQjFGRjg2QzAxRkVFQkZGRjA2REI2MTJFMDZEMTVDMDAxCiswRjE1ODA2RDE1MDAwMTAxMTRGQzZENkMxM0UwMDIwNzkwQzdGQzJGMzY3OUI0M0Q+MTAxCitEPEVEM0ZFMDNBN0ZGRTAxRkZGQ0I1MDAwNzdGMDIxRjZEN0U1QzRBODA5MUI2N0U2Q0VDQzA3RjNCMDA3RkZFMDAxRkYwNEEKKzEzMEY0QTEzMDc0QTgwNUM0QTEzMDNBMjVDQTM5MUM3RkNCM0E5MDA3RkI1NDhCNTEyRjhCNjAwODMxNEZDMTU4N0EzMTU4MworNkMwMjAxMTRGODM2MzQ3REIzM0Q+MTEwIEQ8RUQxRkYwRDg3RkZFRUJGRkZDQjUwMDAzMTNGRjAyMEYxNEMwMDIzRjgwNEEKKzgwOTFCNjdFNkM5MTM4QzA3RkZDQzY2QzkwMzgwMDBGRkUwMkZDMTMwNzRBRUIwMUZGNEE3RjRBMTU4MDRBMTQ3RjRBRUMzRgorQzBBMkVGMUZFMDkxQzhGQzE3MEZBMjE4RjBBMjE3MDdBOTE3MEZBMjE4RTA4MDE3MUYxOEMwNkUxNDNGQTI2RUVDN0Y4MDE3CitGRjZFNDkxMzAwNkU1QjZFNDk1QTZFRUIxRkZDOTEzOUZGQzBGRkY4OTJCNUZDNkUxNEUwNkU1QzAyMEY1QzZFNDlDN0ZDMDIKKzAxMTNGODkxMzgwMDNGRTA5MkM5RkNCMzAwN0ZCNUZDQjY3RUE1NkM5MUM5RkMzNDRGN0RCMzNEPjExMgorRCBFCislRW5kRFZJUFNCaXRtYXBGb250CislRFZJUFNCaXRtYXBGb250OiBGZyBlY3NzMTAwMCAxMCA1MworL0ZnIDUzIDEyMiBkZjxCRDEyQzBBNTUyMDU4MDk4NTM+MjIgRDw5MDM5MDFGODA3RjBFQjA3RkUxMzBGMTMxRjEzM0ZFQjdGCiswRUVCN0UwMjAxRkVDOEZDNUJBMjEyMDFBRUI1MzhGRTA3RjBBNTM4MDFGQzAwQjNBRTI0M0Q3RkJDMkM+MjgKK0Q8QjUxMkZDQTUxNjA1N0Y5NDFDPjQ1IEQ8MTJGRUE3MDcwNzc4ODYxNz5JPEVCMDNGOEVCMUZGRjAxN0YxM0MwOTBCNTdFCis0ODgwMzkwM0ZFMEZGODM5MDdGODAzRkM0ODQ4NkM3RUVCRTAwMDQ4NDgxMzdGNDk3RjAwM0YxNTgwQTI5MEM3MTIxRjQ4MTUKK0MwQTMwMDdFMTQwRkEzMDBGRTE1RTBCMzAwN0ZFQzFGQzBBNTZDNkNFQjNGODBBMzZDNkNFQjdGMDBBMjZDNkMxM0ZFRUJGMAorMDE2QzZDNDg1QTM5MDNGRTBGRjg2Q0I1NUE2QzVDNkQ1QjAxMUY5MEM3RkNFQjAzRjgyMzNBN0RCNzJBPjQ4CitEPDE0QzAxMzAxMTMwNzEzMUYxM0ZGQjVGQ0E0MTMxRjEyMDBCM0IzQTUwMDdGQjUxMkYwQTUxQzM4NzlCNzJBPkk8RUIwRgorRjhFQjdGRkY0OEI1MTJDMDQ4ODA0ODgwNDg4MDM5MUZGMDFGRkM5MDM4QzAwN0ZFMzkzRjAwMDFGRjAwM0U3RjAwN0UxNTgwCiswMDdDMTQ3RjAwRkMxNDNGNUEwMDc4MTVDMDEyMzgwMDMwMTQxRjEyMTBDOEZDQTIxNTNGQTIxNjgwQTIxNTdGMTYwMDE1RkUKK0EyNEE1QTRBNUE0QTVBNEE1QTRBNUE0QTVBNEFDN0ZDMTRGRTQ5NUE0OTVBNDk1QUVCMEZDMDQ5NUE0OUM4RkMxMzdFNUI0OAorNUE0ODVBNDg1QTQ4NUE0ODVBNDhDOUZDNDhCNjEyQzBBNjIyMzg3REI3MkE+STxFQjA3RjhFQjNGRkY5MEI1MTJDMDQ4ODAKKzQ4ODAwMDBGODA5MDM4RkMwRkZDMzkxRkUwMDNGRTM4M0ZDMDAxNkNDN0ZDMDAwRTgwQTIwMDA0ODBDOEZDQTI1REEyNUQxNAorMDE1RDE0MDM0QTVBNEE1QUVDN0ZFMDkwMzgxRkZGQzA1RDRBQzdGQzZFN0UxNUUwOTAzODAwMEZGOEVDMDNGQ0VDMDBGRTE1Cis3RjE2ODAxNTNGMTZDMEEyRUQxRkUwQTcwMDQwMTQzRjAwNjAxNUMwMTI3MDAwRjhFQzdGODA3RUI0RUNGRjAwMzg3RkMwMDMKKzM5M0ZGODBGRkU2Q0I1NUE2QzVDMDAwMzVDNkMxNEMwNkM2QzkwQzdGQ0VCMDdGQzIzM0E3REI3MkE+STxFQzA3RjgxNDBGCitBMjE0MUIxNDNCQTIxNDdCMTQ3MzE0RjMxMzAxQTJFQjAzRTNBMkVCMDdDMzEzMEZBMkVCMUY4M0EyRUIzRjAzMTM3RjEzN0UKKzEzRkUxM0ZDRUEwMUY4MTIwMzEzRjAxMjA3MTNFMDEyMEZFQTFGQzAxMzgwMTIzRjEzMDA1QTEyRkVCNzEyRjhBNUM3MzgwMworRjgwMEFFMjUzNjdFQjUyQT5JPDAwMUZCNTEyRkVBNjAxQzBDOEZDQURFQkMxRkNFQkNGRkYwMURGMTNDMDkwQjU3RTgxOTAKKzM4RkUwN0Y4OTAzOEY4MDNGQzQ5NkM3RTQ5NkM3RTVCNDk3RkM4MTM4MEEyMTUzRjE2QzBBOUVEN0Y4MDEyMTAxMjM4RURGRgorMDAwMDdDNUJCNDQ5NUE2QzZDNDg1QTM5M0ZGMDFGRjg2Q0I1NUE2QzVDNkM1QzZDNUNDNjQ5QzdGQ0VCMUZGMDIyMzg3REI1CisyQT5JPEVDM0ZFMDkwMzgwMUZGRjgwMTA3MTNGRTVCMTMzRjVCOTAzOEZGRTAxRTQ4RUIwMDA2NDk5MEM3RkNFQTAzRjg0OAorNUFBMjQ4NUE0ODVBQTI1QjEyM0ZBMjM4N0YwMDdGOTAzODAzRkZDMDAxMEYxM0YwMDEzRjdGRDg3RTdGN0YzOUZFRkUwN0ZFCiszOEZGRjgwMTkwMzhFMDAwRkY0OTdGRUQzRjgwNUJFRDFGQzA5MEM3RkNBMkVEMEZFMDVBQTQ3RTEyN0UxMjdGQTQ2Q0VDMUYKK0MwN0ZBMjAwMUZFQzNGODA3RjZDNkNFQjdGMDA1RDM5MDdGODAxRkU5MDM4RkUwN0ZDNkNCNTVBNkM1QzZDNUMwMTNGNUI2RAorOTBDN0ZDRUIwM0ZDMjMzQTdEQjcyQT5JPEI3MTJFMEE2QzgxMjA3RUQwRkMwRUQxRjgwRUQzRjAwMTU3RTE1RkU1RDRBNUEKKzE0MDM0QTVBQTI0QTVBNEE1QUEyNEE1QUEyNEFDN0ZDQTIxNEZFQTIxMzAxNUMxMzAzNUMxMzA3QTI1QzEzMEZBMzVDMTMxRgorQTM1QzEzM0ZBNTVDMTM3RkE4MjMzNzdEQjUyQT5JPEVCMDNGOEVCMUZGRjAxN0YxM0MwOTBCNTdFMDAwMzE0RjhBMjM5MDcKK0ZDMDdGQzM5MEZGMDAxRkVFQkUwMDA0ODQ4MTM3RjQ5N0YwMDNGMTU4MDkwQzcxMjFGQTY2QzZDRUIzRjAwQTI2QzZDMTM3RQorQTI2QzZDNUIzOTAzRjgwM0Y4QzZCNTEyRTA2RDVCRDkwRkZFQzdGQzQ5N0U5MEI1MTJFMDQ4RUIxRkYwMzkwN0Y4MDNGQzM5CiswRkUwMDBGRTQ4NDgxMzdGNDg0OEVCM0Y4MDkwQzcxMjFGNDgxNUMwQTIwMEZFRUMwRkUwQTgwMDdGRUMxRkMwQTI2RDEzM0YKKzAwM0YxNTgwNkQxMzdGM0ExRkYwMDFGRjAwMzkwRkZDMDdGRTZDQjU1QTZDNUM2QzVDNkM1QzAxM0YxMzgwRDkwN0ZDQzdGQworMjMzQTdEQjcyQT5JPEVCMDNGQ0VCMUZGRjAxN0YxM0MwOTBCNTdFNDg4MDQ4ODAzOTA3RkMwN0ZDMzgwRkYwMDE0ODQ4NkMKKzdFNDkxMzdFNDg0ODEzN0Y4MTQ4QzcxMzgwQTIxNTFGMDBGRTE1QzBBMzE1MEZBMjE2RTBBNTE1MUYxMjdGQTIxNTNGNkM3RQorMTU3RjZDN0U2RDEzRkYzODBGRjAwMzkwMzhGQzBGRUY2Q0I1RUFDRkMwNkMxNDlGNkNFQkZFMUYzODAwN0ZGOEVCMUZDMDkwCitDNzEzODAxNTNGQTJFRDdGMDBBMjE1RkVBMjRBNUE0QTVBMDAwNjEzMDcwMDA3RUIxRkYwMzkwRkMwN0ZFMDkwQjU1QTQ4NUMKKzZDOTFDN0ZDNkMxM0ZDMDAwMTVCMzgwMDNGQzAyMzNBN0RCNzJBPkk8RUMwN0Y4QTI0QTdFQTI0QTdFQTIxNTdFRUMzRjdGCisxNDNFQTI5MTM4N0UzRjgwQTIxNDdDMDJGQzdGMTUxRkEyRDkwMUY4N0YxNTBGMDEwMzgwMTRGMEEyMDEwNzZEN0UxNEUwQTIKKzAxMEY2RDdFMTRDMEEyMDExRjZEN0UxNDgwMDEzRjgwODE5MUM3RkM0OTgxMTY3RjEzN0UwMUZFNkU3RTkwQjdGQ0EyNDg4MgorQTNEODAzRjhDN0VBMEZGMDVCMDAwNzgyMTYwNzVCMDAwRjgyMTYwMzVCMDAxRjgyMTYwMTVCMDAzRjZGN0VBMjQ4QzkxMzgwCisxNzdGMTI3RTAwRkUxN0MwMzIzQTdFQjkzNz42NSBEPEI2N0UxNUY4MTVGRTZGN0U4MkQ5MDAwMTEzRjA5MTM4MDAzRkY4MTUKKzBGNkY3RTZGN0UxNTAxMTUwMDgyODJBNDVFNUUxNTAxNEI1QTE1MDc0QjVBRUQzRkYwRURGRkMwOTBCNjVBNEJDN0ZDMTVGOAorMTVGRjE2QzBEOTAwMDMxM0YwOTEzODAwM0ZGOEVEMDdGQzZGN0VFRDAwRkZFRTdGODBFRTNGQzBBMjE2MUYxN0UwMTYwRkE0CisxNjFGMTdDMDE2M0ZBMkVFN0Y4MEVEMDFGRjRCMTMwMEVEMEZGRUVEN0ZGQzkwQjY1QTE2RTAxNjgwNEJDN0ZDMTVFMDJCM0EKKzc5QjkzNz5JPDkxMzgwM0ZGODAwMjFGMTNGODkxQjZGQzQ5MTVDMDEzMDc1QjQ5NDhDNjEzODBEOTdGRjAxMzBGRDlGRkMwCisxMzAzNEExMzAxNDg5MEM5RkM0ODVBNDg1QTVCMTIwRjVCNDg1QUEyNDg1QUEzNDg1QUE0NDhDQUZDQUM2QzdFQTQ2QzdFQTMKKzZDN0VBMjZDN0U3RjEyMDc3RjZDN0U2QzZDMTUyMDZDNkQxNEUwNkUxMzAxRDk3RkYwMTMwRkQ5MUZGRTEzN0Y2REI2RkM2RAorMTVDMDAxMDExNTAwNkQ1QzAyMUYxM0YwMDIwMzEzODAyQjNFN0JCQjM1Pkk8QjcxMkYwQTY5MEM5RkNCMzkwQjYxMkMwQTUKKzkwQzlGQ0IzQTM5MEI2MTJGQ0E3MjYzQTc4QjkzMj42OSBEPDkxMzgwM0ZGODAwMjNGMTNGODkxQjUxMkZFMDEwM0VDRkZDMAorNDkxNUUwNUI5MDM4M0ZGRTAwRDk3RkYwRUIxRkMwRDlGRkMwMTMwNzRBMTMwMTQ4OTBDODEyNDA0ODQ4MTUwMDQ4NUE1QjEyCiswRjVCNDg1QUEyNDg1QUEzNDg1QUE0NDhDQUZDQTk5MjM4M0ZGRkYwQTM2QzdFQTJFRDAwMDdBMjZDN0VBMzZDN0VBMjZDN0UKKzdGMTIwNzdGNkM3RTZDN0U2QzdGODBFQjdGRjBEOTNGRkUxMzdGMDEwRkI2RkM3RjZEMTVDMDAxMDAxNTAwMDIzRjEzRjgwMgorMDMxMzgwMkMzRTdCQkIzNz43MSBEPDEyRkZCM0IzQjNBNDA4M0E3OUI5MTc+NzMgRDwwMEZFRUQxRkYwRUUzRkUwRUU3RkMwCitFRUZGODA0QjEzMDA0QjVBNEI1QTRCNUE0QjVBNEI1QTVFNEI1QTRCQzdGQzRBNUE0QTVBNEE1QTE0MEY0QTVBNEE1QTRBNUEKKzRBNUE0OTkwQzhGQzQ5NUExMzA3NDk3RUEyNDk3RjQ5N0ZFQjdGOUY5MDM4RkYxRkUwNkM0ODZDN0UxNDA3MDFGQzdGNDk2QworN0VFQkYwMDEwMUUwN0Y0OTZDN0U0OTdGOTBDNzdGNDg2RTdFMTUxRjgyNkY3RTE1MDc4MjZGN0UxNTAxODI2RjdFODIxNzgwCitFRTNGQzAxNjFGMTdFMEVFMEZGMDE2MDcxN0Y4RUUwM0ZDMkUzQTc4QjkzQT43NSBEPEI0RkNCM0IzQjA5MEI2MTJDMEE2MjIKKzNBNzlCOTJEPkk8RDhGRkMwRUQwN0ZGQTM2RDVEQTI2RDVEMDBGRTE3N0ZBMjZEMTUzRjAxNzgxNTNFQTIwMTdDMTU3RUEyCis2RDE1RkNBMzAxM0YxNDAxNkQxNUY4QTI2RTEzMDMwMTBGMTVGMDZFMTMwN0EyMDEwNzE1RTA2RTEzMEZBMjAxMDMxNUMwNkUKKzEzMUZBMjAxMDExNTgwNkUxMzNGQTIwMTAwMTUwMDZFNUIwMjdDMTM3RTAyN0UxM0ZFQTIwMjNFNUJFQzNGMDFBMjAyMUY1QgorMTU4M0EyMDIwRjVCMTVDNzAyMDc1QkEzOTEzODAzRUZDMEEyMTVGRjZFNUJBMjZFOTBDN0ZDQTM5MkM4RkNBMjM4M0E3OEI5Cis0OT5JPEQ4RkZFMEVDMUZDMEEyN0ZBMjdGQTI0ODdFQTIxMzdFQTIxMzdGN0Y4MDEzMUZBMjZEN0VBMjgwMTMwNzgwMTMwMworODAxMzAxODAxMzAwODBBMjE0N0ZBMkVDM0Y4MEEyRUMxRkMwQTIxNDBGMTVFMDE0MDcxNUYwMTQwMzE1RjgxNDAxMTVGQzE0CiswMEEyMTU3RUEyMTU3RjE1M0YxNjlGMTUxRkEyRUQwRkRGQTJFRDA3RkZBMjgxQTI4MUEyMkEzQTc4QjkzQj5JPEVDMDdGOAorOTEzODdGRkY4MDQ5QjUxMkUwNDk4MDAxMEYxNEZDOTAzOTFGRkMwRkZFOTAzOTNGRTAwMUZGOTAzQTdGODAwMDdGODA0OUM3Cis2QzdFNDg0ODZFN0U0ODQ4NkU3RTQ5MTQwNzAwMDc4MjQ4NDg2RTdFNDkxNDAxMDAxRjgyNDkxNDAwQTIwMDNGODI0OTgxMDAKKzdGMTc4MEEzOTBDOTEyM0ZBMjQ4MTdDMEFDNkM2Q0VEN0Y4MEE1NkM2Q0VERkYwMEEyNkQ1QzAwMUY1RUEyNkM2QzRBNUFBMgorNkM2QzRBNUE2QzZDNEE1QTZEMTQxRjAwMDE1RTZDNkM0QTVBRDk3RkMwRUJGRjgwNkQ2QzQ4OTBDN0ZDOTAzOTFGRkMwRkZFCis2REI1NUE2RDVDMDEwMTE0RTA2RDZDMTM4MERBMDdGOEM4RkMzMjNFN0JCQjNEPkk8QjYxMkMwMTVGODE1RkY4MjE2RTA5MAorQzc3RkVEMUZGOEVEMDdGQzE1MDM2RjdFMTUwMDgyODIxNzgwQTIxNjNGQTQxNjdGQTIxNzAwNUU1RTE1MDE0QjVBMTUwN0VECisxRkY4RURGRkYwOTBCNjVBMTY4MDkzQzdGQzE1RjgxNUMwOTBDQUZDQjNBNjI5M0E3OUI5MzU+STxCNjdFMTVGODE1RkU2RgorN0U4MjkwQzc3RkVEMUZGMDZGN0VFRDAzRkMxNTAxODIxNTAwODJBMjgyQTM1RUEyNUUxNTAxNUUxNTAzRUQwRkY4NEI1QUVECitGRkUwOTBCNjVBNUU0QkM3RkMxNUY4MTVFMDkwMzgwMDBGRjAxNDA3ODExNDAzODExNDAxODE2RTdFODE4MjE1M0Y4MjZGN0UKK0EyNkY3RUEyNkY3RTE1MDM4MjZGN0VBMjZGN0VBMkVFN0Y4MEVFM0ZDMEEyRUUxRkUwMkIzQTc4QjkzNj44MgorRDxFQjAzRkYwMTFGMTNGMDAxN0YxM0ZFNDhCNjEyODA0ODE1QzA1QTQ4NDhDNkZDRDgxRkYwRUIxRjgwNDg0ODEzMDcwMTgwCisxMzAzMDA3RjE0MDA5MEM5RkNBMjEyRkVBNjdFN0U3RjdGRUEzRkYwMTNGQzM4MUZGRkMwNkMxM0ZDNkNFQkZGODA2QzE0RTAKKzZDMTRGODZDODAwMTNGN0YwMTA3N0ZEOTAwN0YxMzgwMDIwNzEzQzAwMjAwMTNFMDE1N0ZFRDFGRjAxNTBGQTJFRDA3RjhBMgorMTUwM0E2RUQwN0YwMTI0MDEyNjAwMDc4RUMwRkUwMDA3QzE0MUZCNEVDM0ZDMDAxQzBFQkZGODBFQkZDMDM2Q0I2MTIwMDAwCisxRjVDNkMxNEY4MDAwMTVDNkM2QzEzQzBEOTA3RkVDN0ZDMjUzRTdDQkIyRT5JPDAwRkVEQjdGQzBFQzBGRTAwMDdGMUFDMAorMDRGRjE1MUY4M0EyNkM2QzE5ODBEQjAxRkIxNTNGODMxNkYzNkM2Q0YwN0YwMDkyMzgwM0YxRjhBMjZDNkMxODdFREIwN0UxCisxNUZFODMxNkUwNkM2QzYwREIwRkMwMTQwMTgzMTc3RTZDNkM2MERCMUY4MDE0MDMxNzdGNkM2QzZGNUMxOTA3REIzRjAwMTMKKzgwMTcxRjZDNkM2MDAzN0UxNTBGMThDMDAxN0UwMzBGNUMxMzdGNEIxNTFGMThFMDZEMDMwNzVDMTQ4MDRCMTUzRjAyODExNQorRjAwMTFGMDMwMzkxQzdGQ0EyREFDMUYwNUREOTBGQzM5MTM4MDFGODdFQTI1RDE0RTMwMTA3MDMwMDVCMDJFNzE1RkM1REEyCiswMTAzRUU3Q0Y4MDJGNzE1N0Q1REQ5MDFGRkVEM0ZGMEEyOTJDOEZDQTI2RDcwNUFBMjRCM0E3RkI5NEU+ODcKK0Q8RDgzRkUwMTVGRjZENEE1QTAwMUYxNTAzNkM2QzVENkM2QzRBNUExNjBGNkM2QzVENkM2QzRBNUE2QzE1M0Y2RTVDNkQ2QworNDk1QTZENkM0OUM3RkMwMTFGNUIwMkYwNUI2RDZDNDg1QTAxMDcxMzA3MDJGQzVCNkQ2QzQ4NUEwMTAxMTMxRkQ5MDBGRjVCCitFREJGQzA2RUI0NUE4MDZFOTBDOEZDNUQxNDBGNkU1QTZFNUE0QTdFNEE3RTRBN0VBMjRBN0Y5MTM4N0ZCRkMwMTUzRjRBNkMKKzdFNDk0ODZDN0U0QTZDN0UxMzAzNDk0ODZDN0U0OTQ4NkM3RTgyNDk0ODdFNDk0ODZEN0U4MzQ5NDg2RDdFNDlDNzEyMUY0OAorODI0OTZFN0U0ODQ4NkU3RTEyMDc0OTZFN0U0ODQ4NkU3RTAwMUY2RjEzODA1QjQ4NDhFRDdGQzAwMDdGRUUzRkUwNDg0ODE2CitGMDM0M0E3RkI5Mzc+STxFQjFGRjBFQkZGRkMwMDAzMTNGRjAwMEYxNDgwNDgxNEMwOTAzOEUwMUZFMDkwMzgwMDBGRjAwMAorMUMxMzA3MDAxOEVCMDNGODEyMTBDN0ZDRUMwMUZDQTcxNDNGRUIwRkZGOTBCNUZDMTIwMzEyMEYzODFGRkUwMUVBM0ZFMEVBCis3RjgwMTMwMDEyRkVBNDE0MDM3RTM4N0Y4MDBGRUJFMDNGNkNCNUZDN0U2QzEzRjk2QzEzRTFEODAxRkVDN0ZDMUUyODdEQTYKKzI4Pjk3IEQ8MTJGRUIzQTRFQjAxRkNFQjBGRkYwMTNGMTNDMDkwQjU3RUI2N0U5MDM4RjAzRkY4RUJDMDA3NDk2QzdFRUIwMAorMDE0ODZEN0VBMjE1N0ZBM0VEM0Y4MEFBRUQ3RjAwQTM1RDVEMTQwMTZDNUNFQjgwMDM5MDM4QzAwRkY4OTAzOEYwM0ZGMDkwCitCNTVBNDg1QzZENUJEOTFGRkVDN0ZDMzgwMDA3RjgyMTNEN0FCQjJCPkk8RUIwM0ZFOTAzODFGRkZDMDAxN0YxM0UwOTBCNQorMTJGODQ4MTRGQzM4MDNGQzAzMzkwN0Y4MDA3Q0Q4MEZFMDEzMzg0ODQ4MTMwODE1MDA0ODVBQTI0OEM4RkNBMzEyN0UxMkZFCitBOTEyN0ZBMzZDN0VBMjZEMTMwMjAwMUYxNDA2NkM2QzEzMUU2QzZDMTM3RTkwMzhGQzAzRkU2Q0I1RkNDNjE0RkM2RDEzRjAKKzAxMUYxM0MwOTAzODA3RkMwMDFGMjg3REE2MjU+STxFRDNGODBCM0E0RUIwRkUwRUIzRkZDOTBCNUZDNDgxNEJGNDgxNEZGCiszODA3RkUwNzM4MEZGODAxMzgxRkUwMDA0OTEzN0YwMDNGMTQzRjVCMTI3RjkwQzdGQ0EzMTJGRUFBMTI3RkEzNkM3RTE1N0YKKzZDN0U2RDEzRkYzODBGRjAwMzM4MDdGRTA3NkNCNTEyQkY2QzE0M0Y2QzEzRkVFQjdGRjhEOTBGRTBDN0ZDMjEzRDdEQkIyQgorPkk8RUIwN0Y4RUIxRkZFOTAzODdGRkY4MDQ4QjUxMkMwNDgxNEUwMzkwN0ZDMEZGMDM5MEZGMDAzRjhFQkUwMDEzOTFGQzAKKzAwRkM0OTEzN0MwMDNGMTQ3RTkwQzcxMjNFNUExMjdFMTUxRjEyRkVCN0ZDQTUwMEZDQzhGQ0EyN0VBMjEyN0VBMjEyN0Y3RQorN0Y2QzdFNkQxMzAyNkM2QzEzMEU2QzZDMTMzRTM5MDNGRTAxRkU2Q0I1RkM2QzE0RkM2RDEzRjAwMTFGMTNDMDkwMzgwM0ZFCiswMDIwMjg3RUE2MjU+STwxNEZGMDEwMzEzQzAxMzBGNUI1QkVCN0Y4MTkwMzhGRTAwNDA0OTEzMDAxMjAxNUJBMjEyMDNBRAorQjUxMkZDQTVEODAzRjhDN0ZDQjNBRTFBM0Q3RkJDMTk+STw5MDM5MDdFMDAxRjg5MDM4M0ZGQzFGOTAzOTdGRkVGRkZDNDgKK0I2RkM1QTkwMzlGODFGRjgwMDM5MDdGMDBGRTA0ODQ4NkM3RUVCQzAwM0EyNDg0ODZDN0VBNzZDNkM0ODVBQTJFQkUwMDc2QworNkM0ODVBNkM2QzQ4NUE0OEI1RkM1RDQ4NDlDN0ZDRUIzRkZDMzgxRjA3RTA5MEM5RkNBMzdGN0Y2Q0I1MTJDMDE1RjgxNUZFCis2Q0VDRkY4MDE2QzA0ODE1RTA1QTNBM0Y4MDAwN0ZGMDQ4QzcxMjBGMDA3RUVDMDNGODQ4MTQwMUE0NkMxNDAzMDA3RTE1RjAKK0Q4N0Y4MDEzMEY2QzZDRUIxRkUwM0ExRkZDMDFGRkMwNkNCNjEyODA2QzE1MDAwMDAxMTRGQzZDNkMxM0YwMDEwNzkwQzdGQworMjYzODdFQTUyQT5JPDEyRkVCM0E0RUIwMUZDOTAzODBGRkY4MDQ5MTNDMDAxN0YxM0UwOTBCNTEyRjAzOUZGRjgxRkY4RUIKK0UwMDdFQkMwMDMwMTgwMTNGQzE0MDExMzAwQTM1QUIzQTcxRTNDN0FCQjJCPkk8MTJGRkE4MTIwMEFDMTI3RkIzQjMwODM5Cis3QkI4MTQ+STxFQjBGRjBBODkwQzdGQ0FDRUIwN0YwQjNCM0FBMzg0MDBGRTBFQTYwMUYzOEZDN0ZDMEI1RkMxNDgwNkMxMworMDBFQTFGRkVFQTAzRjgxNDRBODVCODE2Pkk8MTJGRUIzQjNCM0E2MDczQzdBQkIxND4xMDgKK0Q8RDkwMUZDRUIwM0Y4M0JGRTBGRkY4MDFGRkY0OTZENDgxMzgwMDE3RjZEQjUxMkMwOTBCNTAwRjExNEUwM0NGRkY4MUZGQgorRjAzRkYwRDlFMDA3RUJDMDBGOTAzQUMwMDNGRjgwMDcwMTgwMDIwMDEzRjg2RTE0MDMwMTAwNUJBMzQ4NUNCM0E3MzUyNjdBCitBNTQyPkk8RUIwMUZDMzlGRTBGRkY4MDQ5MTNDMDAxN0YxM0UwOTBCNTEyRjAzOUZGRjgxRkY4RUJFMDA3RUJDMDAzMDE4MAorMTNGQzE0MDExMzAwQTM1QUIzQTcxRTI2N0FBNTJCPkk8RUIwM0ZFOTAzODBGRkY4MDAxM0YxM0UwOTBCNTEyRjg0ODgwMzkKKzAzRkUwM0ZFMzkwN0Y4MDBGRjQ4NDhFQjdGODA0OTEzM0Y0ODQ4RUIxRkMwNDg0OEVCMEZFMEEyOTBDNzEyMDc0ODE1RjBBMgorMDA3RTE0MDMwMEZFMTVGOEE5MDA3RkVDMDdGMEEzNkM2Q0VCMEZFMEEyNkM2Q0VCMUZDMDZEMTMzRjZDNkNFQjdGODA2QzZDCitFQkZGMDAzOTAzRkUwM0ZFNkNCNTVBNkM1QzZENUIwMTFGMTNDMEQ5MDNGRUM3RkMyNTI4N0VBNjJBPkk8RUIwMUZDMzhGRQorMEZGRjAxM0YxM0MwOTBCNTdFQjY3RTkwMzhGMDNGRjhFQkMwMEY5MDM4ODAwM0ZDMTMwMDQ4NkQ3RTE0MDA4MTgxQTIxNjgwCisxNTNGQTlFRDdGMDBBMzVENUQxNDAxNkM0OTVBRUI4MDA3NkQ0ODVBOTAzOEYwM0ZGMDkwQjU1QTQ4NUM2RDVCRDkxRkZFQzcKK0ZDRUIwN0Y4OTBDOUZDQUYyMTM2N0FBNTJCPkk8OTAzOTA3RjAzRjgwRUIzRkZDRUJGRkZFNDhFQkZGQkY0ODE0RkYzODA3CitGRTA3MzgwRkY4MDE0ODQ4N0U1QjQ4NDgxMzdGNUIwMDdGMTQzRjkwQzdGQ0EzMTJGRUE5N0U3RUEyN0YxMjNGNkQxMzdGNkMKKzdFMTVGRjM4MEZGODAxMzgwN0ZFMDc5MEI2RkM2QzE0M0ZDNjEzRkVFQjdGRjhFQjFGRTA5MEM3RkNBRjIxMzY3REE1MkI+CitJPDE0RjBFQUZDMDcxMzBGMTMzRjEzN0YxM0ZGMDBGRDEzMDAxM0ZDRUFGRkYwNUI1QkEyNUI5MEM3RkNBMzVBQjNBNDE0MjYKKzdBQTUxQz5JPEVCN0ZFMDM4MDFGRkZDMDAwN0VCRkY4MDQ4MTRDMDVBMzgzRkMwM0Y5MDM4MDAwNzgwMTQwMTAwN0U5MEM3CitGQ0E0MTI3RkEyNkM3RTEzRjBFQkZGODA2QzEzRjA2QzEzRkM2QzdGNkM3RkM2MTQ4MDEzMUYwMTAwMTNDMDE0M0ZFQzBGRTAKK0EyMTQwN0EzMTI0MDEyNjAwMDc4RUIwRkMwMDBGRTEzMUYzOUZGQzA3RjgwOTBCNUZDNkMxNDAwMDAxRjVCMDAwMzEzRjgzOAorMDA3RkMwMUIyODdFQTYyMD5JPEVBMDFGQ0FBQjZGQ0E1RDgwMUZDQzdGQ0IzQTc2RDEzODAxNDAxMzkwMEZGMDdDMDE0RkYKK0EyNkQxMzAwRUIzRkZDRUIxRkUwMUEzMDdGQUUxRT5JPDAwRkVFQjAxRkNCM0FBMTQwM0EyMTQwNzZDMTMxRjM4N0Y4MDdGCis5MEI1RkM2QzEzRjkxNEYxMDAwRjEzQzFEODAzRkNDN0ZDMUUyNjdBQTQyQj5JPDAwRkVEOTAxRkVFQjAxRkMwMDdGMTdGOAorMDIwMzE0MDNBMjAxODAxM0RGMDAzRkVFMDdGMDE0MDdFRDlGODBEODFGQzAxNkUwMDIwRjE0MEYxNThGRDgwRkUwMDJDMDEzCitDMDAzMEYxMzFGMTQxRkVEMDdFMEQ4MDdGMDE2ODAwMjFFMTQzRjE0M0UwMDAzREEwM0YwMTMwMDEzRjgwMjNDNUMwMDAxMDEKKzdDMTQ3RUVEMDFGODEzRkMwMjc4MTRGRTAwMDBEOUY4MDA1QkEyNEExM0ZDMDE3QzVEMTY3RDEzN0U1QzAxM0VFQzNERjAwMQorM0YxNDNGNUMwMTFGNUQxNjFGMzYyNTdGQTQzOT4xMTkgRDxEODdGODBFQjBGRTAwMDNGRUMxRkMwNkM2QzEzM0Y2REVCN0YKKzgwNkM2QzE0MDAwMDA3MTRGRTZDNkM0ODVBMzgwMUZDMDMwMUZFNUI2QzZDNDg1QTZENDg1QTkwMzgzRjlGQzBFQjFGREY2RAorQjQ1QTkyQzdGQzZENUE2RDVBMTMwMUEyNDk3RTEzMDc0OTdFRUNERjgwOTAzODFGOUZDMDkwMzgzRjBGRTA0OTZDN0VFQkZFCiswMzAxRkM3RjAwMDE2RDdFNDg0ODZDN0U0ODQ4MTM3RjEyMEY0OUVCM0Y4MDQ4NDhFQjFGQzA0ODQ4MTRFMDAwN0ZFQzBGRjAKKzQ4QzdFQTA3RjgyNTI1ODBBNDI2Pkk8QjRFQzBGRTA2Q0VDMUZDMEEyNkM3RUVEM0Y4MDdGMDAxRkVDN0YwMEEyNkM3RTE1CitGRTdGMDAwNzVDMTQwMUVBMDNGODVERUJGQzAzMTIwMTVEMzgwMEZFMDc1RDEzN0UxNDBGMDE3RjVCMTMzRkEyOTAzODFGOUYKKzgwQTI5MkM3RkMxMzBGQTJFQjA3OUUxNERFQTJFQjAzRkNBMjZENUFBMzVDMTMwMzVDQTIxMzA3NUMxMzBGQTI0OTVBMTIyMAorRDgzODNGQzhGQ0VBM0ZGRUEyNUI1QkVBMEZFMDIzMzY3RkE0MjY+SSBFCislRW5kRFZJUFNCaXRtYXBGb250CislRFZJUFNCaXRtYXBGb250OiBGaCBlY3JtMDgwMCA4IDI5CisvRmggMjkgMTIyIGRmPDE0RkYwMTA3MTNFMDkwMzgxRjgwRjA5MDM4M0UwMDM4NDkxMzdDNDkxM0ZDNDg1QTEyMDM0OTEzNzgKKzE1MzA5MkM3RkNBNzE1N0NCNjEyRkNBMjM4MDNFMDAwMTU3Q0IzQTU0ODZDMTNGRTNBN0ZGRjBGRkZFMEEyMjMyRjdGQUUyNworPjI4IEQ8MTIzQzEyN0UxMkZGQTcxMjdFQTkxMjNDQUExMjE4QTQxMjAwQTcxMjNDMTI3RTEyRkZBNDEyN0UxMjNDMDgyRjdBCitBRTE0PjMzIEQ8MTIzQzEyN0VCNEZDQTIxMzgwQTIxMjdGMTIzRDEyMDFBMzEyMDMxMzAwQTI1QTEyMDYxMjBFNUE1QTVBMTIKKzYwMDkxNTdBQUQxND4zOSBEPDEyM0MxMjdFQjRGQ0EyMTM4MEEyMTI3RjEyM0QxMjAxQTMxMjAzMTMwMEEyNUExMjA2MTIwRQorNUE1QTVBMTI2MDA5MTU3QTg3MTQ+NDQgRDw0QTdFNEE3RUEzNEE3RUEyNEE3RUEzRUMxQkY4MTQxOUEyRUMzMEZDQTJFQzcwCitGRUVDNjA3RUEyNEE3RUEzNDk0ODZDN0VBMjAxMDM4MEVDMDAwRkEyMDEwNjZEN0VBMzQ5NkQ3RUEyMDExRkI1N0VBMjkwMzgKKzE4MDAwMTQ5NkQ3RUEzNDkxNDdFQTIwMUUwMTQ3RjQ5ODBBMjAwMDFFRDFGODAxMjAzMDAwNzE2QzBEODBGRjBFQzNGRTBEOAorRkZGQzAxMDNCNUZDQTIzMDJGN0VBRTM1PjY1IEQ8QjUxMkYwQTIzODAzRkMwMDZDNUFCM0IzQTM0ODdFQjUxMkYwQTIxNDJECis3RUFDMTk+NzMgRDw5MDM4M0Y4MDMwMzkwMUZGRjA3MDM4MDdDMDdDMzkwRjAwMEVGMDAwMUUxMzA3NDgxMzAzNDgxMzAxMTQKKzAwMTI3MDAwRjAxNDcwQTMxNTMwN0VBMjZDMTQwMDEyN0UxMjdGRUEzRkUwMTNGRTM4MUZGRkUwNkMxM0ZDNkMxM0ZGMDAwMQorMTQ4MEQ4MDAzRjEzRTAxMzAzOTAzODAwM0ZGMEVDMDdGODE0MDExNDAwMTVGQzE1N0MxMkMwMTUzQ0EzN0VBMjE1Nzg3RTZDCisxNDcwNkMxNEYwNkNFQjAxRTAzOUY3ODAwM0MwMzlFM0YwMEYwMDM4RTA3RkZFMzhDMDBGRjAxRTJGN0NBRDI3PjgzCitEPDEzRkYwMDA3MTNDMDM4MEYwMUYwMzgxQzAwRjgwMDNGMTM3QzgwQTIxNDNGMDAxRTdGQzdGQ0E0RUIwN0ZGMTM3RjM4MDEKK0ZFMUZFQTA3RjBFQTFGQzBFQTNGODBFQTdGMDAxMjdFMDBGRTE0MDY1QUEzMTQzRjdFMDA3RTEzN0YwMDdGRUJFRjhDMzkxRgorODNDN0ZDMzkwRkZGMDNGODM5MDFGQzAxRTAxRjIwN0Q5RTIzPjk3IEQ8RUEwN0MwMTJGRkEyMTIwRjEyMDdBQzE0RkU5MDM4CitDN0ZGODA5MDM4Q0YwM0UwOTAzOERDMDFGMDkwMzhGODAwN0M0OTEzN0U0OTEzM0U0OTdGMTY4MEEyMTUwRjE2QzBBOUVEMUYKKzgwQTIxNjAwNUQ2RDEzM0U2RDVCMDFCMDVCOTAzOEJDMDFGMDkwMzgwRTA3RTAzOTA2MDdGRjgwMjYwMDAxRkNDN0ZDMjIyRgorN0VBRDI3Pkk8RUIxRkUwRUI3RkZDMzgwMUYwMUUzODAzRTAwNzM5MDdDMDFGODBFQTBGODBFQTFGMDA1QTAwM0VFQjBGMDAKKzAwN0U5MEM3RkNBMjEyN0MxMkZDQTkxMjdFQTIxNUMwN0U2QzEzMDEwMTgwMTM4MDM4MEZDMDAzMzkwN0UwMDcwMDM4MDFGMAorM0UzODAwN0ZGOEVCMUZDMDFBMjA3RTlFMUY+STwxNUY4MTQxRkEyMTQwMTE0MDBBQ0VCMEZFMEVCN0ZGODM4MDFGODFFMzgKKzAzRTAwNzM4MDdDMDAzMzgwRjgwMDFFQTFGMDA0ODEzMDAxMjNFMTI3RUEyNUFBOTEyN0MxMjdFQTIwMDNFMTMwMTdFRUI4MAorMDMwMDBGMTMwNzM5MDNFMDBFRkMzQTAxRjAzQ0ZGQzAzODAwN0ZGMDkwMzkxRkMwRjgwMDIyMkY3RUFEMjc+STxFQjFGODAKK0VCRkZGMDM4MDNFMDc4MzgwN0MwM0UzODBGODAxRTM4MUYwMDFGRUMwRjgwMTIzRTAwN0UxMzA3MTVDMDEyN0MxMkZDQTNCNgorRkNBMjAwRkNDOEZDQTUxMjdFQTIwMDNFMTRDMDEyM0Y2QzEzMDEzOTBGODAwMzgwMDFDMDEzMDAzODAzRTAwRjM4MDFGMDNDCiszODAwN0ZGOEVCMUZDMDFBMjA3RTlFMUY+STwwMTNGMTNGODkwMzhGRkMzRkUzOTAzRTFGRjFFMzgwNzgwN0MwMDBGMTQwQworMzkxRjAwM0UwMEEyMDAzRTdGQTc2QzEzM0VBMjZDNkM1QTAwMDcxMzc4MzgwRkUxRjAzODBDRkZDMEQ4MUMzRkM3RkM5MEM4CitGQ0EzMTIxRTEyMUYzODBGRkZGODE0RkY2QzE0QzA0ODE0RjAzOTFFMDAwN0Y4NDgxMzAwNDgxNDdDMTJGODQ4MTQzQ0E0NkMKKzE0N0MwMDdDMTRGODZDRUIwMUYwNkNFQjAzRTAzOTA3RTAxRjgwMzkwMUZGRkUwMDM4MDAzRkYwMUYyRDdFOUQyMz4xMDMKK0Q8RUEwN0MwMTJGRkEyMTIwRjEyMDdBQzE0RkU5MDM4QzNGRjgwOTAzOEM3MDNFMDkwMzhERTAxRjAxM0Y4NDk2QzdFQTI1QgorQTI1QkIyNDg2QzQ4N0UzQUZGRkUxRkZGQzBBMjIyMkU3RUFEMjc+STxFQTA3ODBFQTBGQzBFQTFGRTBBNEVBMEZDMEVBMDcKKzgwQzdGQ0E4RUEwN0MwMTJGRkEyMTIwRjEyMDdCM0E1RUEwRkUwRUFGRkZDQTIwRTJFN0VBRDE0Pkk8MTMwRkVCMUY4MEVCCiszRkMwQTRFQjFGODBFQjBGMDA5MEM3RkNBOEVCMDdDMDEzRkZBMjEzMEYxMzA3QjNBRDEyMzAxMjc4MzhGQzBGODBBMjE0MDAKKzQ4NUFFQTc4M0VFQTNGRjhFQTA3RTAxMjNDODNBRDE2Pkk8RUEwN0MwMTJGRkEyMTIwRjEyMDdBREVDMUZGRUEyRUMwRkYwCitFQzA3QzA1RDAyMEVDN0ZDNUM1QzVDNUNFQkMzQzAxM0M3RUJDRkUwRUJERkYwMTNGOUVCRjBGODQ5N0VFQkMwN0UxNDNFODAKKzgxNkU3RTE0MDc2RTdFODE2RTdFNDg2QzQ4N0UzQUZGRkUwN0ZGODBBMjIxMkU3RUFEMjU+STxFQTA3QzAxMkZGQTIxMjBGCisxMjA3QjNCM0EzRUEwRkUwRUFGRkZFQTIwRjJFN0VBRDE0Pkk8MjYwN0MwN0ZFQjA3RjAzQkZGQzNGRkMwM0ZGQzkwM0FDNworODNGMDc4M0YzQzBGQ0UwMUY4RTAxRjgwM0IwN0RDMDBGOUMwMEYwMUY4RDlGRjgwMTNDMDQ5OTAzODdGMDAwNzQ5MTM3RUEyCis0OTEzN0NCMjQ4NkMwMUZFRUIwRkUwM0NGRkZFMEZGRkUwRkZGRUEyMzcxRTdFOUQzQz5JPDM4MDdDMEZFMzlGRkMzRkY4MAorOTAzOEM3MDNFMDM5MEZERTAxRjBFQTA3Rjg0OTZDN0VBMjVCQTI1QkIyNDg2QzQ4N0UzQUZGRkUxRkZGQzBBMjIyMUU3RTlECisyNz5JPEVCMUZFMEVCN0ZGODM4MDFGMDNFMzgwM0MwMEYzOTA3ODAwNzgwMzkwRjAwMDNDMDQ4MTRFMDAwM0VFQjAxRjBBMgorNDhFQjAwRjhBMzAwRkMxNEZDQTkwMDdDMTRGOEEyNkNFQjAxRjBBMjZDRUIwM0UwQTIzOTBGODAwN0MwMzkwN0MwMEY4MDM5CiswMUYwM0UwMDM4MDA3RkY4RUIxRkUwMUUyMDdFOUUyMz5JPDkwMzgwRkUwMTg5MDM4N0ZGODM4MzgwMUY4MUMzOTAzRTAwRQorNzgzODA3QzAwNzM5MEY4MDAzRjgwMDFGMTMwMUVBM0YwMEEyMDA3RTEzMDBBMjEyRkU1QUE4MTI3RUEzNkMxMzAxN0VFQjgwCiswMzM4MEZDMDA3MzgwM0UwMEUzODAxRjAzQzM4MDA3RkYwRUIxRkMwOTBDN0ZDQTk0QTdFOTEzODFGRkZDMEEyMjIyQjdFOUQKKzI1PjExMyBEPDM4MDc4MUYwMzhGRjg3RkNFQjlFN0VFQTBGOThFQTA3QjgxM0IwRUJGMDNDRUJFMDAwQTM1QkIxNDg3RUI1CitGQ0EyMTcxRTdFOUQxQj5JPDM4MDFGRTE4MzgwN0ZGQjgzODFFMDFGOEVBM0MwMDQ4MTM3ODQ4MTMzOEEyMTQxOEEyN0U3RQorQjQxMzAwRUE3RkYwNkNCNEZDNkMxM0MwNkMxM0YwMDAwMTEzRjgzODAwMUZGQzEzMDEzOEMwMDA3RTE0M0VBMjZDMTMxRUEyCis3RUEyNkMxMzNDQTI2QzEzNzgzOEZGMDFGMDM4RTNGRkMwMDBDMDEzMDAxNzIwN0U5RTFDPkk8MTM2MEE0MTNFMEEzMTIwMQorMTIwM0EyMTIwNzEyMUZCNTEyRjBBMjM4MDNFMDAwQUYxNDE4QTcxNDM4MzgwMUYwMzAxNDcwMzgwMEY4NjBFQjNGRTBFQjBGCis4MDE1MkE3RkE4MUI+STxEODA3QzAxM0Y4MDBGRjEzMUZBMjAwMEYxMzAxMDAwNzEzMDBCMjE0MDFBMzE0MDMzODAzRTAwNworRUMwRUZDM0EwMUY4MUNGRkMwMzgwMDdGRjg5MDM5MUZFMEY4MDAyMjFGN0U5RDI3Pkk8M0FGRkZDMDFGRkMwQTIzQTBGRTAKKzAwN0UwMDAwMDcxNDdDMTUzODAwMDMxNDMwMTU3MDZDNkMxMzYwQTI2QzZDNUJBMzkwMzg3QzAxODBBMjZENDhDN0ZDQTJFQgorM0YwN0VCMUYwNkEyRUIwRjhDQTIxNERDRUIwN0Q4QTJFQjAzRjBBMzZENUFBMjZENUEyMjFFN0Y5QzI1Pkk8M0JGRkZDM0YKK0ZFMDdGRkEyM0IwRkUwMDNGMDAxRjgwMUMwOTAzOEUwMDBGMDAwMDcwMTAxMTRFMDgxMjYwM0UwMDMxNEMwQTI5MTM4MDdGOAorMDEyNzAxRjAwNjc4MTM4MEEyOTAzOUY4MEU3QzAzMDAwMEQ5MEMzQzEzMDBBMjkwMzk3QzE4MUUwNkEyMTUxRjZENDg2QzVBCitBMjE2OEM5MDM5MUY2MDA3OThBMjE2RDg5MDM5MEZDMDAzRjBBMzZENDg2QzVBQTM2REM3NUEzMDFFN0Y5QzMzPkk8M0FGRgorRkMwMUZGQzBBMjNBMEZFMDAwN0UwMDAwMDcxNDdDMTUzODAwMDMxNDMwNkQxMzcwMDAwMTE0NjBBMjZDNkM1QkEyRUJGQzAxCiswMTdDNUJFQjdFMDMwMTNFOTBDN0ZDQTJFQjFGMDZBMjE0OEVFQjBGOENBMkVCMDdEOEEyRUIwM0YwQTM2RDVBQTI2RDVBQTIKKzQ5NUFBMjEzMDM5MUM4RkMxMjc4RUFGQzA2QTI1QjEzMUNFQTc4MzhFQTcwNzBFQTNGRTBFQTBGODAyMjJCN0Y5QzI1PgorMTIxIEQgRQorJUVuZERWSVBTQml0bWFwRm9udAorJURWSVBTQml0bWFwRm9udDogRmkgZWNybTA2MDAgNiA1CisvRmkgNSA1NCBkZjwxM0UwMTIwMTEyMDcxMkZGMTJGOTEyMDFCM0E3NDg3RUI1MTJDMEEyMTIyMTdBQTAxRT40OQorRDxFQTAxRkMzODA3RkY4MDM4MUMwRkMwMzgzMDAzRTAzODYwMDFGMEVCMDBGODEyRjg2QzEzRkNBMjE0N0MxMjc4MDAzMDEzCitGQ0M3RkMxNEY4QTJFQjAxRjBFQjAzRTAxNEMwRUIwNzgwRUIwRjAwMTMxRTEzMzg1QjVCMzgwMUMwMENFQTAzODAzODA2MDAKKzE4NUE1QTM4M0ZGRkY4NUFCNTEyRjBBMjE2MjE3Q0EwMUU+STwxM0ZGMDAwMzEzQzAzODBGMDNFMDM4MUMwMEYwMTRGODAwCiszRTEzRkMxNDdDQTIwMDFFMTNGQzEyMENDNzEyRjhBMkVCMDFGMEVCMDNFMEVCMEZDMDM4MDFGRjAwQTIzODAwMDNFMEVCMDAKK0YwMTQ3ODE0N0MxNDNFMTQzRjEyMzAxMjc4MTJGQ0EyMTQzRTQ4MTM3RTAwNjAxMzdDMDAzODEzRjgzODFFMDNGMDM4MEZGRgorQzAwMDAxMTMwMDE4MjI3REEwMUU+STwxNEUwMTMwMUEyMTMwMzEzMDdBMjEzMEQxMzFEMTMzOTEzMzExMzYxMTNFMTEzQzEKK0VBMDE4MTEyMDNFQTA3MDExMjA2MTIwQzEyMUMxMjE4MTIzMDEyNzAxMkUwQjZGQ0EyMzgwMDAxRTBBNkVCMDNGMEVCM0ZGRgorQTIxODIyN0RBMTFFPkk8MDAxMDEzMzAzODFFMDFGMDM4MUZGRkUwMTRDMDE0ODBFQkZFMDBFQTFCRjAwMDE4QzdGQ0E1MTMKK0ZFMzgxQkZGODAzODFGMDNDMDM4MUMwMUUwMzgxODAwRjAxNEY4QzcxMjc4QTIxNDdDQTIxMjMwMTI3ODEyRjhBMjE0Nzg0OAorMTNGODAwNjAxM0YwMzg3MDAxRTAxMjM4MzgxRTA3ODAzODA3RkYwMEVBMDFGODE2MjI3Q0EwMUU+SQorRQorJUVuZERWSVBTQml0bWFwRm9udAorJURWSVBTQml0bWFwRm9udDogRmogZWN0dDA5MDAgOSAyNgorL0ZqIDI2IDEyMiBkZjwwMDdGQjUxMjgwQjYxMkMwQTM2QzE0ODAxQTA1N0E5MjI3PjQ1IEQ8MTIxRUVBN0Y4MEEyRUFGRkMwCitBNEVBN0Y4MEEyRUExRTAwMEEwQTcyODkyNz5JPDE1MzgxNTdDQTIxNUZDMTVGODE0MDExNUYwMTQwMzE1RTAxNDA3MTVDMAorQTIxNDBGMTU4MDE0MUYxNTAwNUMxNDNFMTQ3RTE0N0MxNEZDNUMxMzAxNUMxMzAzNUMxMzA3NUMxMzBGNUNBMjEzMUY5MUM3CitGQzVCMTMzRTEzN0UxMzdDMTNGQzVCMTIwMTVCMTIwMzVCMTIwNzVCMTIwRjVCQTIxMjFGOTBDOEZDNUExMjNFMTI3RTEyN0MKKzEyRkM1QUEyMTI3MDFFM0E3Q0IzMjc+STxFQjNGRTAzODAxRkZGODQ4MTNGRTAwMEZFQkZGODA0ODE0QzAzOTNGRTA3RkUwCitFQjgwMEYzOTdGMDAwN0YwMDA3RUVCMDNGODAwRkUxMzAxNUE2QzE0RkMxNDAwQTMxMjdDQzhGQ0EyMTQwMTE1RjhBMjE0MDMKKzE1RjAxNDA3RUMwRkUwRUMxRkMwMTQzRkVDN0Y4MEVDRkYwMDQ5NUE0OTVBNDk1QTQ5NUE0OTVBNDk1QTQ5NUEwMUZFQzdGQworNDg1QUQ4MDdGODEzNzg0ODQ4MTNGQzQ4NUE0ODVBNDhCNUZDQjZGQ0EzNkMxNEY4MUUyRjdDQUUyNz41MAorRDxFQjFGRjhFQkZGRkUwMDAzRUJGRjgwMDAwRjE0QzAxNUUwMzkxRkYwMUZGMDM5M0ZDMDA3RjhFQjgwMDExNUZDMTQwMEEyCis2Q0M3RkMxMjA0QzhGQzE0MDExNUY4MTQwM0VDMDdGMDE0MEZFQzNGRTA5MDM4MUZGRkMwNDkxMzgwQTIxNUUwNkQxM0YwOTAKKzM4MDAxRkY4RUMwM0ZDMTQwMUVDMDBGRTE1N0UxNTdGMTUzRkEyMTIzODEyN0MxMkZFQTIxNTdGNDgxNDdFNkMxNEZFMDA3RgorRUIwMUZDRUI4MDAzMzkzRkYwMUZGODZDQjUxMkYwNkMxNEUwMDAwMzE0ODBDNkVCRkUwMEVCMUZGODIwMzA3REFFMjc+STwKKzAwN0ZCNTEyRTBCNjEyRjBBMzZDMTRFMDM5MDAxRjgwMDBCM0IyMDA3RkI1MTJFMEI2MTJGMEEzNkMxNEUwMUMyRTdCQUQyNworPjczIEQ8Mzg3RkZGQzA4MEI1RkM3RTVDRDgwM0YwQzhGQ0IzQUFFRDA3ODBFRDBGQzBBNzAwN0ZCNkZDQTJCN0ZDN0UxNjgwCisyMjJFN0ZBRDI3Pjc2IEQ8MTI3MDEyRjhBMjdFMTI3QzEyN0UxMjNFMTIzRjdFN0YxMjBGQTI3RjEyMDc3RjEyMDM3RjEyMDEKKzdGMTIwMDdGMTM3QzEzN0UxMzNFMTMzRjdGODAxMzBGQTI4MDEzMDc4MDEzMDM4MDEzMDE4MDEzMDA4MDE0N0MxNDdFMTQzRQorMTQzRjgwMTU4MDE0MEYxNUMwMTQwN0EyMTVFMDE0MDMxNUYwMTQwMTE1RjgxNDAwMTVGQzE1N0NBMjE1MzgxRTNBN0NCMzI3Cis+OTIgRDwwMDdGQjUxMkY4QjYxMkZDQTQ2QzE0RjgxRTA2N0M3RTI3Pjk1IEQ8MzgwMUZGRTAwMDA3MTNGODQ4MTNGRTQ4NkQKKzdFODFFQkMwN0ZFQzBGRTAzODBGODAwN0Q4MDIwMDdGQzcxMjAzQTJFQjA3RkYxMzdGMDAwM0I1RkMxMjBGNUEzODNGRkMwMworRUE3RkUwMTMwMDEyRkU1QUE0NkMxMzA3MDA3RjEzMEZFQkMwN0Y2Q0I2MTJDMDZDMTVFMDdFMDAwMzEzRjgzQTAwN0ZDMDNGCitDMDIzMjA3RDlGMjc+OTcgRDxFQTdGRTA0ODdFQTMxMjdGMTIwM0E5RUM3RjgwOTAzOEYxRkZFMDAxRjcxM0Y4OTBCNTdFODEKK0VDQzBGRjkxMzgwMDdGODAwMUZDRUIxRkMwNDkxMzBGMTZFMDQ5MTMwN0EyMTZGMDE1MDNBNjE1MDc2RDE0RTBBMjE1MEY2RAorRUIxRkMwNkQxMzNGNkRFQjdGODA5MTM4QzFGRjAwRUNGRkZFNUQwMUY3NUIwMUYzMTNFMDI2MDFFMDdGQzdGQzI0MkU4MEFECisyNz5JPEVCMEZGRjAxN0YxM0MwNDhCNTEyRTA0ODE0RjA1QTM4MEZGODA3RUExRkUwMzkzRkMwMDNFMDkwMzg4MDAwODA0OAorQzhGQzEyN0VBMjEyRkU1QUE2N0UxMjdFQTIwMDdGMTRGMDM5M0Y4MDAxRjgxM0MwMzgxRkUwMDMzOTBGRjgwRkYwNkNCNUZDCis2QzE0RTA2QzE0QzA2QzZDMTMwMEVCMEZGODFEMjA3QjlGMjc+STxFQzFGRjg0QTdFQTMxNDFGMTQwMEE5RUIwRkYwRUI3RgorRkM0OEI1RkM1QTVBMzgwRkY4MUYzODFGRTAwNzM4M0ZDMDAzRUI4MDAxRUE3RjAwMDA3RTEzMDBBMjEyRkU1QUE2N0UwMDdFCisxMzAxQTIwMDdGMTMwMzdFRUI4MDA3MzgxRkUwMEYzODBGRjAzRjZDQjYxMkUwNkMxNUYwNkM1QjM4MDA3RkY4OTAzOTFGRTAKKzdGRTAyNDJFN0VBRDI3Pkk8RUIwRkY4RUIzRkZFOTBCNTEyODAwMDAzMTRDMDQ4MTRFMDM5MEZGQzBGRjAzOTFGRTAwM0Y4CitFQkMwMDFEODNGODAxM0ZDNDhDN0ZDMTI3RTE1N0UxMkZFQjYxMkZFQTQxNUZDMDBGQ0M4RkM3RTEyN0UxMjdGNkMxNDNDNkQKKzEzN0U2QzdFMDFGMDEzRkUzOTBGRkMwN0ZDNkNCNUZDMDAwMTE0Rjg2QzE0RjAwMTNGMTNDMDkwMzgwN0ZFMDAxRjIwN0Q5RgorMjc+STxFQTdGRTA0ODdFQTMxMjdGMTIwM0E5RUMzRkMwOTAzOEYxRkZGMDAxRjc3RjkwQjU3RTgxMTRFMEVDMDA3RjQ5N0YKKzVCNUJBMjVCQjAzQTdGRkY4M0ZGRjhCNTAwQzcxM0ZDQTM2QzAxODMxM0Y4MjYyRTgwQUQyNz4xMDQKK0Q8MTMwRjQ5N0U0OTdFQTQ2RDVBNkRDN0ZDOTBDOEZDQTczODNGRkY4MDQ4N0ZBMzdFRUEwMDBGQjNBNDAwN0ZCNTEyRjBCNgorRkMxNUY4MTVGMDdFMUQyRjdCQUUyNz5JPDM4N0ZGRjgwQjU3RUEzN0VFQTAwMEZCM0IyMDA3RkI1MTJGOEI2MTJGQ0EzNkMKKzE0RjgxRTJFN0NBRDI3PjEwOCBEPDM5N0ZFMDNGQzAzOUZGRjFGRkYwMDFGNzdGOTBCNTdFNkM4MDAwMDMxM0UwRUMwMDdGCis0OTdGNUI1QkEyNUJCMDNBN0ZGRjgzRkZGOEI1MDBDNzEzRkNBMzZDMDE4MzEzRjgyNjIwODA5RjI3PjExMAorRDxFQjFGRTBFQjdGRjgzODAxRkZGRTQ4N0Y0ODE0ODAzOTBGRjAzRkMwMzkxRkMwMEZFMDM5M0Y4MDA3RjBFQjAwMDM0ODE0CitGODAwN0UxMzAxQTI0OEVCMDBGQ0E3NkMxMzAxMDA3RTE0RjhBMjAwN0YxMzAzMzkzRjgwMDdGMEEyMzkxRkUwMUZFMDM5MEYKK0YwM0ZDMDZDQjUxMjgwNkMxNDAwNkM1QjM4MDA3RkY4RUIxRkUwMUUyMDdDOUYyNz5JPDM5N0ZFMDdGODAzOUZGRjFGRkUwCiswMUY3MTNGODkwQjU3RTZDODAwMDAzRUJDMEZGOTEzODAwN0Y4MDAxRkNFQjFGQzA0OTEzMEYxNkUwNDkxMzA3QTIxNkYwMTUKKzAzQTYxNTA3NkQxNEUwQTIxNTBGNkRFQjFGQzA2RDEzM0Y2REVCN0Y4MDkxMzhDMUZGMDBFQ0ZGRkU1RDAxRjc1QjAxRjMxMworRTBEOUYwN0ZDN0ZDOTFDOEZDQUMzODdGRkY4MEI1N0VBMzZDNUIyNDMxODA5RjI3Pkk8Mzk3RkZDMDNGQzM5RkZGRTBGRkYKKzAyM0YxMzgwNEExM0MwMDA3RjkwQjVGQzM5MDA3RkZFMUYxNEY4OTEzOEYwMEY4MDkxMzhFMDAyMDA0QUM3RkM1Q0EyOTFDOAorRkNBMjEzN0VBRDAwN0ZCNTdFQjY3RUEzNkM1QzIyMjA3RTlGMjc+MTE0IEQ8OTAzOEZGRjM4MDAwMDdFQkZGQzAxMjFGNUEKKzVBRUI4MDNGMzhGQzAwMEY1QUEyRUMwNzgwNkM5MEM3RkNFQTdGODAxM0ZDMzgzRkZGRjA2QzEzRkMwMDA3MTNGRjAwMDExNAorODBEODAwMEYxM0MwOTAzODAwM0ZFMDE0MDcwMDc4RUIwM0YwMDBGQzEzMDFBMjdFMTQwMzZDRUIwN0UwRUJFMDFGOTBCNTEyCitDMDE1ODAxNTAwMDBGQjEzRkMzODcwN0ZGMDFDMjA3QjlGMjc+STwxMzNDMTM3RUE4MDA3RkI1MTJGMEI2MTJGOEEzNkMxNAorRjBEODAwN0VDN0ZDQUUxNTE4MTU3RUE0MTVGRTZEMTNGQzE0ODNFQ0ZGRjg2RDEzRjA2RDEzRTAwMTAzMTNDMDAxMDAxMzAwCisxRjI5N0VBODI3Pkk8Mzk3RkUwMDdGRTQ4NkM0ODdFQTMwMDdGN0YwMDAzRUIwMDNGQjI1REEyNEE1QUVCRkMwNzZDQjYxMgorRjg2QzE1RkNBMjAxM0YxM0JGOTAzOTBGRkMxRkY4MjYyMDgwOUYyNz5JPDM5M0ZGQzFGRkY0ODZDNUExNjgwMTYwMDZDNDgKKzdFMzkwMUY4MDdFMDZDNkM0ODVBNEE1QTAxN0U5MEM3RkM2RDVBRUIxRjdFNUM2RDVBMTMwNzZENUE1QzgwNDk3RTEzMEY0OQorN0UxNDNFRUIzRTNGRUI3RTFGOTAzODdDMEY4MDAxRjg3RjAwMDE2RDdFMzgwM0YwMDMzQTdGRkUxRkZGODBBMkI1NDgxM0MwCis2QzQ4NkMxMzgwQTIyMjIwN0U5RjI3PjEyMCBEPDNBN0ZGQzBGRkY4MDQ4NkM0ODEzQzBBMzZDNDg2QzEzODAzQTA3RTAwMAorRjgwMDAwMDMxMzAxNUQxM0YwMDAwMTEzMDMwMUY4NUIxMjAwQTI2RDQ4NUExMzdDQTI5MDM4N0UwRjgwMTMzRUEyMDExRjkwCitDN0ZDNUNBMjEzMEYxNDlFMTRCRTEzMDcxNEZDMTMwM0EyNUMxMzAxQTI1Q0EyMTMwMzVDQTIxMzA3NUMxMjA4RUEzRTBGMDAKKzdGNUIxMzFGRDg3RTdGQzhGQ0VBN0ZGRTZDNUE1QjZDNUFFQTA3QzAyMjMxN0U5RjI3PkkKK0UKKyVFbmREVklQU0JpdG1hcEZvbnQKKyVEVklQU0JpdG1hcEZvbnQ6IEZrIGVjc3MxMjAwIDEyIDQxCisvRmsgNDEgMTIyIGRmPEJGMTI4MEE2NjEwNjgwOUQ2Mj4yMiBEPDAyN0ZFQjNGQzA5MDM4MDFGRkMwNUIxMzBGQTI1QkVCM0YKK0MxRUM4MDQwNDlDOUZDQTIxM0ZFQTMxMjAxQjFCNjM4QzAzRkMwQTZEODAxRkVDN0ZDQjNCM0EyMkE0QTdFQzkzND4yOAorRDxCNjEyQzBBNjFBMDY3Rjk4MjE+NDUgRDwxMkZGQTgwODA4Nzc4NzFCPkk8MTQxODE0NzgxNEY4MTMwMzEzMEYxMzdGQjUKK0ZDQTQxM0Y3MTM4N0VBMDAwN0IzQjNBRDAwN0ZCNjEyODBBNjIxNDM3OEMyMzE+NDkgRDxFQjAzRkU5MDM4MUZGRkUwMDE3RgorMTNGODkwQjU3RTQ4MTRGRjQ4MTU4MDI2MDdGQzA3MTNDMDM4MEZGMDAwRDgxRkMwRUIzRkUwNDlFQjFGRjAwMDNGMTQwRjkwCitDNzEzRjg0ODE0MDcwMDdFRUMwM0ZDQTIxMkZFNDhFQzAxRkUxMjdDMTIzQzEyMzgxMjE4MTIwOEM4RkNBNEVEMDNGQ0EzRUQKKzA3RjhBMkVEMEZGMDE2RTAxNTFGRUQzRkMwMTY4MEVEN0YwMDVENEE1QTRBNUE0QTVBNEE1QTRBNUE0QTVBNEFDN0ZDMTRGRQorNDk1QTQ5NUE0OTVBNDk1QTQ5NUE1QzQ5QzhGQzEzN0U1QjQ4NUE0ODVBNDg1QTQ4NUE0ODVBNDhDOUZDNDhCNjEyRkVBNjI3Cis0MzdDQzIzMT5JPDQ5QjRGQzAxMEYxM0UwMDEzRjEzRjg5MEI1MTJGRTQ4ODAwMDA3MTU4MDQ4MDEwMTEzQzAzQTFGRjgwMAorN0ZFMEQ4M0ZFMDEzMUY0OTE0RjA0OEM3MTIwRjEyM0VFRDA3RjgxMjFDMTIxODEyMDhDOEZDQTNFRDBGRjBBM0VEMUZFMEEyCitFRDNGQzAxNTdGRURGRjgwMDIwMzEzMDBFQzFGRkU5MDM4MEZGRkZDNUQxNUUwODExNUZDMTVGRkQ5MDAwMTEzODA5MTM4MDAKKzdGQzBFRDFGRTBFRDBGRjAxNkY4RUQwN0ZDQTJFRDAzRkVBM0VEMDFGRkE4MDA0MEVDMDNGRTEyNjBBMjAwRjBFQzA3RkM3RQorMDBGRUVDMEZGODEyN0ZEODNGQzBFQjFGRjBEODFGRjBFQjdGRTAzOTBGRkUwMUZGNkNCNjEyODA2QzE1MDA2QzVDNkM2QzEzCitGODAxMUYxM0UwMDEwMTkwQzdGQzI4NDU3Q0MyMzE+STxFREZGODA1QzVDQTJFQzA3N0ZBMjE0MEZBMjE0MUUxNDNFQTIxNAorN0UxNDdDMTRGQ0EyRUIwMUY4MTMwMzE0RjAxMzA3QTJFQjBGRTBBMkVCMUZDMDEzM0YxNDgwMTM3RjE0MDA1QjVCMTIwMTVCCisxMjAzNDg1QUEyNDg1QTVCMTIxRjVCMTIzRjQ4NUFBMjQ4QzdGQzkwQjcxMkMwQTZDODM4N0Y4MDAwQjEyQTQxN0RDMDMxPgorSTxFREZGODA0QTdGQTM0QTdGQTM5MTM4MDdGN0YwQTIxNUU3MDIwRjdGMTVFM0EyOTEzODFGQzNGQzE1QzEwMjNGN0YxNTgxCitBMjkxMzg3RjgwRkY1REEyNEE2RDdFNUNBMjAxMDE2RTdFNUNBMjAxMDM2RTdFNUNBMjAxMDc2RTdFNUNBMjAxMEY2RTdFNUMKKzAxMUY4MTE2MDM1QzAxM0Y4MTE2MDE1QzAxN0Y4MTgyOTFCN0ZDOTBCODdFQTM0ODgzQTIwMUZDQzgxMjNGMDAwMzcwN0VBMgorNDg0ODgyMTcwRjVCMDAwRjgzMTcwNzVCMDAxRjgzMTcwMzVCMDAzRjgzMTcwMTVCMDA3RjcwN0VBMjkwQ0FGQzQ4RUY3RjgwCitBMjM5NDU3REM0NDA+NjUgRDxCNjEyRjhFREZGODAxNkUwMTZGODE2RkU4MjkwQzcwMDNGMTNDMDAzMDc3RjAzMDA3RjE2M0YKKzcwN0UxNjBGNzA3RTE2MDM4MzE2MDFBNTE2MDM1RjE2MDc1RjE2MEY0QzVBRUU3RkUwNEM1QTAzMDc1QjAzM0Y5MEM3RkM5MAorQjYxMkZDMTZGMDE2QzA4MjE2RkMxNkZGOTBDNzAwM0YxM0MwMDMwMzdGOTIzODAwN0ZGMEVFMUZGODcwN0U3MDdFNzA3RTgyCis3MDEzODAxNzdGMThDMEEyMTczRkE0MTc3RkEyMTg4MDE3RkY1RTRDMTMwMDRDNUExNjBGRUUzRkZDRUVGRkY4MDMwRjVCOTAKK0I3NUExNzgwOTRDN0ZDMTZGQzE2RTA0QkM4RkMzMjQ1NzdDNDQxPkk8RUQzRkZFMDIwM0I1MTJGMDAyMEYxNEZFMDIzRkVDCitGRjgwOTFCN0ZDNUI0OUQ5RTAwNzEzMDAwMTBGOTBDN0ZDRDkxRkZDMTQxRjQ5NDgxNDA3RDk3RkUwODA0QTkxQzdGQzQ5NUEKKzQ4OTBDQUZDNUE1QjQ4NUFBMjQ4NUFBMjQ4NUFBMjQ4NUFBMzQ4NUFBNTQ4NUFBRDZDN0VBNTZDN0VBMzZDN0VBMjZDN0VBMgorNkM3RUEyNkM3RTdGN0U2QzZEMTU4MDZENkMxNDAxNkUxNDAzRDkzRkY4MTQwRjZENkNFQzFGQzA2REI0MTQ3RjAxMDM5MDM4CitFMDAzRkY2RDkwQjYxMjgwNkRFREZFMDAwMjNGNUMwMjBGMTRGMDAyMDMxNEMwOTEyNjAwM0ZGQ0M3RkMzMjQ5N0FDNjNFPgorSTxCODEyRTBBNjkwQ0FGQ0IzQTY5MEI3RkNBNjkwQ0FGQ0IzQTg5MEI3MTJGMEE3MkM0NTc3QzQzQT42OQorRDxFRDNGRkM0QUI1MTJFMDAyMEYxNEY4MDIzRjE0RkY5MUI3MTJDMDQ5MTZFMDQ5RUJFMDA3NDk5MEM3MTI3RkQ5MUZGQ0VDCisxRkMwNDk0ODE0MDc0QTE0MDNEOTdGQzAxNDAxNDk0ODE0MDA0ODE3MDA0ODkwQ0FGQzVCNDg1QUEyNDg1QUEyNDg1QUEyNDgKKzVBQTM0ODVBQTU0ODVBQUE0QkI1MTJGMEEzNkM3RUEzOTJDNzEyMEZBMjZDN0VBMzZDN0VBMjZDN0VBMjZDN0VBMjZDN0U3RgorNkM3RjdFNkQ3RUVCM0ZGMDgwNkQ3RUQ5MDdGRjE0M0Y2RDkwMzhFMDA3RkY2RDkwQjZGQzZEMTZFMDAyM0YxNTAwMDIwRjE0CitGQzAyMDExNEUwOTEyNjAwM0ZGQ0M3RkMzNDQ5N0FDNjQxPjcxIEQ8QjRGQ0IzQjNCM0E5OTBCNjEyRkVBNjI3NDU3N0M0MzUKKz43NiBEPEQ4RkZFMDkzMzgwM0ZGQzA2RDVFQTM2RDVFQTMwMTdDRUUxRkJGQTIwMTdFMTYzRkEyMDEzRTE3M0YwMTNGMTY3RgorQTI2RDE2N0U2RTE1RkVBMjZFMTQwMTAxMEYxNkZDQTI2RTE0MDMwMTA3MTZGOEEyNkUxNDA3MDEwMzE2RjBBMjZFMTQwRjAxCiswMTE2RTA2RTE0MUZBMjAxMDAxNkMwNkUxNDNGQTIwMjdFMTU4MDAyN0YxNDdGQTI2RTE1MDA2RjVCMDIxRjVDRURDMDAxQTIKKzAyMEY1Q0VERTAwM0EyMDIwNzVDRURGMDA3QTIwMjAzNUNFREY4MEYwMjAxNUNBMkVERkMxRjAyMDA1Q0EyRURGRTNGMDM3RQorNUJBMkVEN0Y3RjAzM0Y5MEM3RkNBMkVEMUZGRUEzNkY1QUEzNkY1QTkyQzlGQ0EyNDI0NTc3QzQ1NT5JPEVEM0ZFMDkxMzgKKzAzRkZGRTAyMUZFQkZGQzA0QTgwOTFCNjEyRjgwMTAzMTVGRTQ5OTAzOEMwMUZGRjQ5RDkwMDA3N0ZEOTFGRkMwMTAxN0ZEOQorM0ZGMDZENkM3RTQ5NDg2RTdFNDk0ODZFN0U0QTE0MEY0ODkwQzg2QzdFNDg0ODZGN0U0OTE1MDEwMDA3ODM0ODQ4NkYxMzgwCitBMjQ5MTY3RjAwMUYxOEMwNDkxNjNGMDAzRjE4RTBBMjQ5MTYxRjAwN0YxOEYwQTQ0OTE2MEYwMEZGMThGOEFDNkQxNjFGMDAKKzdGMThGMEE0NkQxNjNGMDAzRjE4RTBBMzZDNkNFRTdGQzBBMjZEMTZGRjAwMEYxODgwNkQ1RDAwMDcxODAwNkQ1RDZDNkM0QgorNUE2QzVGNkUxNDBGNkM2RDRBNUE2RDZDNEE1QUQ5M0ZGOEVDRkZFMDZENkM0OTVCNkRCNDAxMDc1QjZERDlFMDNGOTBDN0ZDCis2RDkwQjU1QTAxMDAxNUY4NkU1QzAyMUYxNEMwMDIwMzQ5QzhGQzkxMzgwMDdGRjAzRDQ5N0JDNjQ4Pjc5CitEPEVDM0ZGODAxMDNCNTdFMDEwRjE0RTAwMTNGMTRGODQ5MTRGRTkwQjdGQzQ4RUJDMDBGMzkwM0ZFMDAwMUQ4MDdGOEVCMDAKKzdFNDg0ODE0M0U0OTE0MUU0ODQ4MTQwNjEyM0Y0OTkxQzdGQ0EyNDhDQUZDQTY3RkEyN0YxMjNGN0Y3RkVBMUZGQzZDQjRGQworMTRFMDZDMTNGQzZDRUJGRkMwNkMxNEZDNkMxNEZGNkQxNEMwNkQ4MDAxMEYxNEY4MDEwMzgwRDkwMDNGN0YxNDAzOTEzODAwCis3RkZGMDMwNzEzODAwMzAxMTNDMDgxMTY3RkVFM0ZFMDE2MUZBMkVFMEZGMEEyMTYwN0E3RUUwRkUwMTI2MDEyNzAwMDc4RUQKKzFGQzAwMDdDMTUzRjAwN0UxNjgwQjQ2Q0VDRkYwMDAxRTA1QjAxRkNFQjA3RkUzQTdGRkY4MDFGRkMwMDFGOTBCNTVBMDAwNworNUQwMDAxMTVDMDZDNkM1QzAxMEYwMUZDQzdGQzAxMDAxM0UwMkM0OTdDQzYzNj44MyBEPEI0RUQwMUZFQjNCM0FGNkM2Q0VDCiswM0ZDQTQ2QzZDRUMwN0Y4QTI2QzZDRUMwRkYwQTI2QzZDRUMxRkUwNkQxNDNGNkM2Q0VDN0ZDMDZDNkNFQ0ZGODAyNzAxRkYKKzgwMDMxMzAwNkM5MDM4RjAxRkZFNkRCNTVBNkQ1QzAxMEYxNEUwNkQ1QzAxMDE5MUM3RkM5MDM4MDAxRkYwMkY0Nzc3QzQ0MgorPjg1IEQ8QjQ2QzkxMjYwMUZGQzBFRDdGODAwMDdGRjNGRjAwQTI1RTZDNkM3MDVEMUIwMUEyRUUwN0Y3NkM2QzcwNUQwNUU3CisxNTAzMTYwRjZERURFM0Y4MDAwRjUwNUFBMkVFMUZDMzZDNkM3MDVEMDVDMTE1MEZBMkVFM0Y4MTZDNkM3MDVEMDU4MDE1MUYKK0EyRUU3RjAwNkM2QzcwNEE1QTg0NUU2QzZDNEE2RTVDMUI3RjE4M0YxNTAxRDk3RjgwNDk2RTkxQzdGQzA2MUY1Q0EyNEI1QQorRDkzRkMwNzA1QjA2MEYxMzAxQTIwMTFGNDk0ODVFMDJFMDE2RjAwNjA3MTMwM0EyMDEwRjQ5NDg1RTAyRjAxNkY4MDYwMzEzCiswN0EyMDEwNzQ5NDg1RTAyRjhFRDAxRkMxQTBGMDEwMzRBNUUxNTNGRjAwMEZFMDJGQzE3MUYwMTAxOTFDODVDQTI0QjE1N0UKKzAyRkUxNjdGMDEwMDAxN0U0QzVBMTkzRkEyREE3RTdDOTRDOEZDMDNGQzE2QkYxOTFGMDI3RjE3RkY2RTQ4NUVBMjE5MEZBMgorNkU0ODVFMTkwNzU5NDU3RkM0NUM+ODcgRDxFQjA3RkU5MDM4N0ZGRkMwMDAwM0I1N0UwMDBGMTRGODQ4ODA4MTkwMzhGODAzCitGRkVCODAwMTAwMUVDNzEzODAwMDE4MTQ3RjAwMTBFQzNGQzBDOEZDMTZFMDE1MUZBOEVDN0ZGRjAxMEZCNUZDMTMzRjQ4QjYKK0ZDNUEwMDBGRUJFMDFGMzgxRkZFMDBFQTNGRjBFQTdGQzA1QjQ4QzdGQzVBQTQxNTNGN0U2QzZDMTM3RjkwMzhDMDAxRkZFQgorRjAwRjZDQjZGQzdFMTVERjZDMTQxRjAwMDMxM0Y4QzYwMTgwQzdGQzIzMkY3Q0FEMkY+OTcKK0Q8QjRGQ0IzQUFFQzNGQzA5MDM4MDNGRkYwMDEwRjdGMDEzRjEzRkU0OTdGOTBCNkZDRDlGRTA3MTM4MEQ5RjAwMDEzQzA0OQorMTM3RjQ5RUIxRkUwNDkxNEYwOTBDNzEyMEYxNTA3MTZGODE1MDNBMzE2RkMxNTAxQUFFRDAzRjhBMzE1MDcxNkYwMTUwRkEyCis2REVCMUZFMDZEMTMzRjZERUI3RkMwOTAzOUYwMDFGRjgwRUJGQzA3OTBCNjEyMDA2RDVCNkQ1QjZEMTNGMDAxMDcxM0MwQzcKKzkwQzdGQzI2NEE3OUM4MzI+STxFQ0ZGQzAwMTA3MTNGQzAxMUYxM0ZGNDkxNEMwOTBCNjEyRTA1QTQ4RUIwMDNGMDFGQ0VCCiswN0MwNDg0ODEzMDE0ODQ4MTMwMDQ4NDgxNDAwNUIxMjNGNUJBMjQ4QzlGQ0E0MTJGRUFBMTI3RkEzN0YxMjNGQTI2QzZDMTQKKzIwNkQxNDYwNkM2Q0VCMDFFMDZEMTMwMzZDNkMxMzBGNkNCNDEzN0Y2QzkwQjVGQzZDMTVDMDZEMTQwMDAxMUY1QjAxMDcxMworRjAwMTAwMTM4MDIzMkY3Q0FEMkI+STxFRDAzRkNCM0FBRUIwN0Y4OTAzODFGRkY4MzAxN0YxM0UzOTBCNTEyRjM0ODE0RkYKKzVBNDgxMzgwMzkwRkZFMDAzRjAxRjgxMzBGNDg0ODEzMDc1QjQ4NDgxMzAzQTI0ODVBQTI5MEM3RkNBMjVBNUFBQTdFN0VBMworN0YxMjNGNkQxMzA3NkM3RTE1MEZEODBGRjgxMzFGNkQxMzdGMzkwN0ZGODFGRjZDOTBCNUZDNkMxNEZCNkMxNEUzNkQxM0MzCiswMTFGMTMwM0Q5MDdGOEM3RkMyNjRBN0NDODMyPkk8RUIwMUZFOTAzODA3RkZDMDAxMUYxM0YwMDE3RjdGOTBCNTdFNDg4MAorNDhFQjAzRkYzOTA3RkMwMDdGNDg0OEVCM0Y4MDQ5MTMxRjQ4NDhFQjBGQzA1QjQ4NDhFQjA3RTBBMjQ4QzcxMjAzQTIxMjdFCitFRDAxRjBCN0ZDQTYwMEZDQzlGQ0EyN0VBMzEyN0VBMjEyN0Y3RTdGQTI2QzdFNkQxNDEwNkM2QzE0NzA2QzZDRUIwMUYwRDgKKzAzRkUxMzA3OTAzOEZGODAzRjZDOTBCNUZDNkMxNUUwMDEzRjE0ODA2REVCRkUwMDAxMDcxM0Y4MDEwMDEzQzAyNDJGN0RBRAorMkI+STxFQzFGRjBFQzdGRkVFQjAxRkY1QjVCNUI5MDM4MUZGMDFFOTAzODNGQzAwMkVDODAwMDQ5QzdGQ0EyMTNGRUEzMTIKKzAxQjBCNjEyODBBNkQ4MDFGRUM3RkNCM0IzQTIxRjRBN0VDOTFFPkk8RDkwM0ZDRUIwRkUwRDkwRkZGMTNGRjAxM0YxM0M3Cis0OTkwQjUxMkYwOTBCN0ZDNUEyNjAzRkUwN0VCODAwMDI3MDdGODAxRkVDN0ZDRUJGMDAwNDg0ODEzN0Y0OTdGQTI0ODQ4NkQKKzdFQTg2QzZDNDlDN0ZDQTI2RDVCNkM2QzEzRkVFQkY4MDEzOTAzRkUwN0ZDNDhCNTVBNUQ0ODVDMDFCRjVCRDgxRjhGOTBDOAorRkNFQjgzRkM5MENBRkM3RkEzN0Y3RjkwQjUxMkY4NkNFQ0ZGODAxNkUwNkMxNUY4NkM4MTQ4ODEwMDFGODFBMjI3M0ZDMDAwCiswRjEzODA0ODQ4MTMwMDkwQzgxMjdGNDhFRDNGQzA0ODE1MUZBNTAwN0ZFRDNGODA2RDE0N0Y2QzZDRUNGRjAwMDFGODEzMDcKKzZDQjRFQjNGRkU2QzkwQjU1QTZDNUQwMDAxMTVFMDZDNkMxNDgwMDExRjQ5QzdGQzAxMDExM0UwMkM0MjdEQUMzMT5JPEI0CitGQ0IzQUFFQzdGQzA5MDM4MDFGRkY4MDEwNzdGMDExRjdGNDk3RjQ5MTQ4MEVCRkUwM0Q5RjgwMDEzQzA0OTEzN0Y0OTEzM0YKKzQ5MTRFMDE1MUY1QkEzOTBDN0ZDQjNBQzIzNDk3OUM4MzI+STxFQUZGODBBOUM3RkNCMEVBN0Y4MEIzQjNBODA5NDU3QUM0CisxNz5JPEI0RkNCM0FCRUQ3RkUwRURGRkMwNEExMzgwNEExMzAwNEE1QTRBNUE0QTVBNUQ0QTVBNEE1QTRBNUE0OTkwQzdGQworNDk1QTEzMDc0OTVBNDk1QTQ5NUExMzdGMTNGRjgwODBBMkVCRkRGRUVCRjlGRjEzRjA0OTZDN0UwMUMwN0YxNDNGMDE4MDdGCis0OTZDN0UxNDBGODExNDA3NkU3RTgxMTQwMTZFN0UxNjgwMTU3RkVEM0ZDMDE2RTAxNTFGRUQwRkYwMTZGODI1NDk3OUM4MkYKKz4xMDcgRDwxMkZGQjNCM0IzQjMwODQ5NzlDODE3Pkk8REE3RkMwRUIwRkY4MjdGRjAxRkZGOEVCM0ZGRjAxMDc2RDkwQjUxMgorODAwMTFGRDlGRTAzMTRDMDQ5NkQ0ODE0RTA0OTAyOEYxNEYwRDlGRTAzOTAzODlGQzA3RkQ5RjgwMDkwMzlGRjAwMUZGODQ5Cis2RDQ4MTMwRjQ5NkQ0ODEzMDc0OTRBMTRGQzAzMUYxNDAzNDk1Q0EzOTBDNzVCQjNBQzNFMkQ3OUFDNEQ+STxFQzdGQzAzOQorRkYwMUZGRjgwMTA3N0YwMTFGN0Y0OTdGNDkxNDgwRUJGRTAzRDlGODAwMTNDMDQ5MTM3RjQ5MTMzRjQ5MTRFMDE1MUY1QkEzCis5MEM3RkNCM0FDMjMyRDc5QUMzMj5JPEVDN0Y4MDkwMzgwM0ZGRjAwMTBGMTNGQzAxM0YxM0ZGNDk4MDkwQjY3RTQ4OTAzOAorODA3RkUwM0EwM0ZFMDAxRkYwRDgwN0Y4RUIwN0Y4NDg0ODZEN0U0OTEzMDE0ODQ4NkQ3RUEyNDg0ODE0N0ZBMjQ4QzhFQTNGCis4MEEzMDA3RTE1MUYwMEZFMTZDMEE5NkMxNTNGNkMxNjgwQTM2RDE0N0YwMDNGMTYwMDZENUMwMDFGNUQ2RDEzMDE2QzZDNDkKKzVBNkM2QzQ5NUEwMUZFMTMxRjNBMDNGRjgwN0ZGMDZDOTBCNTVBNkM1RDAxM0Y5MUM3RkM2RDVCMDEwMzEzRjA5MDM4MDA3RgorODAyQTJGN0RBRDMxPkk8RUMzRkMwMzlGRjAzRkZGMDAxMEY3RjAxM0YxM0ZFNDk3RjkwQjZGQ0Q5RkUwNzEzODBEOUYwMDAKKzEzQzA0OTEzN0Y0OUVCM0ZFMDQ5RUIxRkYwOTBDNzEyMEZBMkVEMDdGOEEyMTUwM0EyMTZGQzE1MDFBQUVEMDNGOEEzMTUwNworMTZGMDE1MEYxNTFGNkQxNEUwNkQxMzNGNkRFQkZGQzA2RDQ4MTM4MEVCRkMwRjkwQjYxMjAwNkQ1QjZENUI2RDEzRjAwMTA3CisxM0MwMDEwMDkwQzdGQzkxQzhGQ0IyMjY0MDc5QUMzMj5JPDE0MUYwMEZFMTNGRjEzMDM1QjEzMUY1QjVCRUJGRkYwMTQ4MAorMzhGRkZFMDA1QjVCNUI1QjVCQTI1QkEzOTBDN0ZDQjNBODE4MkQ3OUFDMjE+MTE0IEQ8RUIzRkY4NDhCNUZDNDgxNEMwMDAKKzBGMTRGMDQ4MTRGODVBRUJFMDBGMzk3RjgwMDFGMDkwQzcxMjcwMDBGRTE0MzAxNTAwQTU3RTdGRUE3RkUwMTNGQzM4M0ZGRgorRTA2QzEzRkMxNEZGMDAwNzE0ODA2QzE0RTA2QzE0RjA2QzdFMDEwNzEzRjg5MDM4MDAzRkZDMTQwNzE0MDNFQzAxRkVBMjE0CiswMEE0MTI0MDAwNzBFQjAxRkMxMjc4MDA3RTEzMDMzOUZGRTAxRkY4OTBCNTEyRjBBMjZDMTRFMDAwMUYxNDgwMDAwM0VCRkUKKzAwMzgwMDNGRjAxRjJGN0RBRDI1Pkk8RUEwMUZFQURCNjEyRjBBNkQ4MDFGRUM3RkNCM0FCN0YxNTA4MTUzODZDRUI4MUY4CitFQ0ZGRkM3RkEyNkQxM0YwNkQxMzgwOTAzODBGRjgwMDFFM0E3RUI4MjM+STxCNEVDMUZFMEIzQUUxNTNGQTIxNTdGQTI2RAorMTNGRjE0MDMzODdGRTAwRjkwQjZGQzZDMTRERjE1MUY2QzEzRkMwMDA3MTNGMDAwMDE5MEM4RkMyMzJENzlBQjMyPkk8QjQKKzZDRDkxRkUwRUIwMUZFMDA3RjZGRUIwM0ZDQTIxNTNGNkM2QzZFRUIwN0Y4MTUzRDE1N0Q2QzZDMTdGMERCN0NGQzEzMEZBMgorMTVGQzZDNkM2RUVCMUZFMDE1RjgxNDAxRDgwN0Y4MDI3RTE0QzAwNDdGMTMzRjE1RjAxNDAzRDgwM0ZDNkUxNDgwRUY4MDdGCisxNUUwMDAwMTAxMDcxNjAwMDFGRTE0MUY3MTVBMTVDMDAwMDAwMTBGNUQwMUZGMTQwRjE3RTEwMTdGMDE4MDVDQTIwMjFGMTMKKzA3RDkzRjlGRUNGM0Y4MTUwMDE2MDNBMkQ5MUY5RTVEMTRCRTE2MDEwMTBGNUUwMkZDMTRGRjgyQTI2RDQ4NURBMjNGMkM3RgorQUI0Mj4xMTkgRDxEODdGQzBFQzdGQzA2QzZDRUNGRjgwMDAxRjE2MDA2RDVCNkM2QzQ5NUE2QzZDNDk1QTZDNkM1QzAwMDEKKzRBNUE2QzZDMTMxRjZFNDg1QUQ5N0ZDMDVCNkQ2QzQ4NUEwMTFGNDlDN0ZDRUIwRkYxOTAzODA3RkJGRUVDRkZGQzZENUI2RAorNUI3RjZFNUE1RDZFNUE0QTdFNEE3RTgxNDk3RjkwMzgwM0ZCRkNFQjA3Rjk5MDM4MEZGMEZFNEE3RTAxMUY2RDdFNDk0ODZDCis3RTQ5NDg2QzdFRUJGRjAwNkY3RTQ4NDg2RDdFNDg0ODgwMDAwNzZFN0U0ODQ4MTMwMTQ5NkQ3RTQ4NDgxNTgwMDAzRkVEN0YKK0MwNDg0OEVDM0ZFMDQ4NDhFQzFGRjAyQzJDODBBQjJEPkk8QjQxNUZGQTI3RjAwN0ZFQzAxRkU3RjEyM0ZFRDAzRkM3RjAwCisxRkVDMDdGODdGMTIwRkVEMEZGMDdGMTIwNzZERUIxRkUwMTIwMzE2QzA2QzZDMTMzRkEyMTY4MDZDNkMxMzdGQTI2RDE0MDAKKzZFNUE1RDEzM0YxNEMxMDExRjVCQTJFQ0UxRjhFQjBGRTNBMjAxMDc1QjE0RjNBMjkwMzgwM0Y3RTBBMjAxMDE1QkEyRUIwMAorRkY1REEyMTQ3RjkyQzdGQ0EyMTQ3RTE0RkVBMjVDMTMwMUEyNUMxMzAzNUMxMzA3NUNFQTQwMEYzODc4MUZDMEVBN0ZGRjVDCis5MUM4RkM1QjVCRUEwRkYwMjg0MDdFQUIyRD5JIEUKKyVFbmREVklQU0JpdG1hcEZvbnQKKyVEVklQU0JpdG1hcEZvbnQ6IEZsIGVjcm0wNzAwIDcgNQorL0ZsIDUgNTQgZGY8MTMzODEzNzhFQTAxRjgxMjFGMTJGRTEyRTAxMjAwQjNBQjQ4N0VCNTEyRjhBMjE1MjY3QkE1MjE+NDkKK0Q8MTNGRjAwMDMxM0UwMzgwRTAzRjAzODE4MDBGODQ4MTM3QzQ4MTM3RTAwNzg3RjEyRkM2Q0VCMUY4MEE0MTI3Q0M3RkMxNQorMDA1QzE0M0UxNDdFMTQ3QzVDNDk1QTQ5NUE1QzQ5NUEwMTBFQzdGQzVCNUI5MDM4NzAwMTgwMTNFMEVBMDE4MDM5MDMwMDAzCiswMDEyMDY1QTAwMUZCNUZDNUE0ODVCQjVGQ0EyMTkyNjdEQTUyMT5JPDEzRkYwMDAzMTNFMDM4MEYwMUY4MzgxQzAwN0MwMAorMzAxMzdFMDAzQzEzM0UwMDdFMTMzRkE0MTIzQ0M3MTIzRTE0N0UxNDdDNUM0OTVBRUIwN0UwMzgwMUZGODA5MUM3RkMzODAwCiswMUUwNkQ3RTE0N0M4MDE0M0Y4MDE1ODBBMjEyMzgxMjdDMTJGRUEyMTUwMDQ4NUIwMDc4MTMzRTAwNzA1QjZDNUIzODFGMDEKK0YwMzgwN0ZGQzBDNjkwQzdGQzE5Mjc3REE1MjE+STwxNDM4QTIxNDc4MTRGODEzMDFBMjEzMDMxMzA3MTMwNjEzMEMxMzFDCisxMzE4MTMzMDEzNzAxMzYwMTNDMDEyMDExMzgwRUEwMzAwNUExMjBFMTIwQzEyMUM1QTEyMzA1QTEyRTBCNjEyRTBBMkM3RUEKK0Y4MDBBNzQ5N0U5MDM4M0ZGRkUwQTIxQjI3N0VBNjIxPkk8MDAxODEzMEMwMDFGMTM3Q0VCRkZGODVDNUMxNDgwRDgxOUZDCitDN0ZDMDAxOEM4RkNBNzEzN0YzODE5RkZFMDM4MUY4MUYwMzgxRTAwNzgwMDFDN0YwMDE4MTMzRUM3RkM4MEEyMTU4MEEyMTIKKzMwMTI3QzEyRkNBMzE1MDAxMkYwMDA2MDEzM0UxMjcwMDAzMDVCMDAxQzVCMzgwRjAzRTAzODAzRkZDMEM2NDhDN0ZDMTkyNworN0RBNTIxPkkgRQorJUVuZERWSVBTQml0bWFwRm9udAorJURWSVBTQml0bWFwRm9udDogRm0gZWN0dDEwMDAgMTAgNjgKKy9GbSA2OCAxMjMgZGY8MTQzODE0RkMxMzAxMTMwM0VCMDdGOEVCMEZGMEVCMUZDMEVCM0Y4MEVCN0YwMDEzRkU0ODVBNDg1QQorNUIxMjA3NUIxMjBGNUI0ODVBQTIxMjNGOTBDN0ZDQTI1QTEyN0VBMzEyRkU1QUFDN0UxMjdFQTMxMjdGN0VBMjdGMTIxRkEyCis2QzdFN0YxMjA3N0YxMjAzN0Y2QzdFNkM3RTEzN0ZFQjNGODBFQjFGQzBFQjBGRjBFQjA3RjhFQjAzRkMxMzAxMTMwMDE0MzgKKzE2NDI3MkI5MkM+NDAgRDwxMjcwMTJGQzdFN0U2QzdFNkM3RUVBMEZFMDZDN0U2QzdFNkM3RTZDN0UxMzdGN0YxNDgwMTMxRgorMTRDMDEzMEZFQjA3RTBBMjE0RjAxMzAzQTIxNEY4MTMwMUEzMTRGQzEzMDBBQzEzMDExNEY4QTMxMzAzMTRGMEEyMTMwNzE0CitFMEEyRUIwRkMwMTMxRjE0ODAxMzNGMTQwMDVCMTNGRTQ4NUE0ODVBNDg1QTQ4NUFFQTNGQzA0ODVBNDhDN0ZDNUE1QTEyNzAKKzE2NDI3OUI5MkM+STxFQjAzODA0OTdFQTYwMDIwMTQwODAwRjgxNDNFMDBGRTE0RkUwMEZGMTNDMUVCQzdDN0VCRTdDRjAwCiszRkI1MTJGODAwMEYxNEUwMDAwMzE0ODA2QzE0MDAzODAwN0ZGQ0EyNDhCNUZDNDgxNDgwMDAwRjE0RTAwMDNGMTRGODM5RkYKK0U3Q0ZGRUVCQzdDN0VCMDdDMTAwRkUxM0MwMDBGODE0M0UwMDIwMTQwODAwMDAxNDAwQTY2RDVBMUYyNDdBQUEyQz5JPEVBCiswRjgwRUExRkUwRUEzRkYwRUE3RkY4QTIxM0ZDQTMxMjNGMTIxRjEyMEYxMjAwMTNGOEEyMTIwMUVBMDNGMDEyMDdFQTFGRTAKK0VBN0ZDMEVBRkY4MDEzMDAxMkZDMTI3MDBFMTc3MThBMkM+NDQgRDwwMDdGQjUxMkYwQjYxMkY4QTM2QzE0RjAxRDA1Nzk5NAorMkM+STwxMjFGRUEzRjgwRUE3RkMwRUFGRkUwQTVFQTdGQzBFQTNGODBFQTFGMDAwQjBCNzA4QTJDPkk8MTUwN0VEMEY4MEEyCisxNTFGMTYwMDVEMTUzRTE1N0UxNTdDQTIxNUZDNUQxNDAxNUQxNDAzNUQxNDA3NUQxNDBGNUQxNDFGOTJDN0ZDNUMxNDNFQTIKKzE0N0UxNDdDMTRGQzVDMTMwMTVDMTMwMzVDMTMwNzVDMTMwRjVDMTMxRjkxQzhGQzVCMTMzRUEyMTM3RTEzN0MxM0ZDNUIxMgorMDE1QjEyMDM1QjEyMDc1QjEyMEY1QjEyMUY5MEM5RkNBMjVBMTIzRTEyN0UxMjdDMTJGQzVBQTIxMjcwMjE0MTdCQjkyQz4KK0k8RUIwM0Y4RUIwRkZFOTAzODNGRkY4MDQ5N0Y5MEI1N0UzOTAxRkUwRkYwMzkwM0Y4MDNGODQ4NDg2QzdFRUJFMDAwNDg0OAorMTM3RUEyNDg0ODdGQTI0OEM3RUExRjgwQTIwMDNFMTQwRjAwN0UxNUMwQTMwMDdDMTQwNzAwRkMxNUUwQUM2QzE0MEYwMDdFCisxNUMwQTQ2Q0VDMUY4MEEzNkM2Q0VCM0YwMEEyNkM2QzEzN0U2RDEzRkUwMDA3NUNFQkYwMDE2QzZDNDg1QTM5MDFGRTBGRjAKKzZDQjU1QTZENUI2RDVCRDkwRkZFQzdGQ0VCMDNGODIzMzU3Q0IzMkM+STwxMzA3NDk3RUEyMTMxRkEyMTMzRjEzN0YxM0ZGCis1QTEyMDcxMjdGQjVGQzEzREYxMzlGRUE3QzFGMTIwMEIzQUUwMDdGQjUxMkUwQjYxMkYwQTM2QzE0RTAxQzM0NzdCMzJDPgorSTxFQjBGRjg5MDM4N0ZGRjgwNDhCNTEyRTAwMDA3ODA0ODE0RkMzOTFGRjgwRkZFMzkzRkUwMDFGRjkwMzg4MDAwN0Y0OEM3CitFQTNGODAwMDdFMTQxRjAwRkUxNUMwMTUwRjZDMTVFMDE1MDdBMzEyN0UxMjNDQzhGQ0EyMTUwRjE2QzAxNTFGMTY4MDE1M0YKKzE2MDA1RDE1RkU0QTVBMTQwMzRBNUE0QTVBNEE1QTRBNUFFQ0ZGODA0OTQ4QzdGQzQ5NUE0OTVBNDk1QUVCM0ZFMEVCN0Y4MAorNDlDOEZDNDg1QTQ4NDhFQjAzQzA0ODQ4RUIwN0UwRUExRkUwNDg1QTQ4QjZGQ0I3RkNBMzZDMTVDMDIzMzQ3Q0IzMkM+STwKK0VCMEZGQzkwMzg3RkZGODA0OEI1MTJFMDAwMDcxNEY4NDg4MDM5MUZGODA3RkVFQkMwMDA0ODQ4MTM3RjZEN0YxNjgwMTUxRgorQTI2QzVBNkNDN0ZDQzhGQzE1M0YxNjAwNUQxNUZFMTQwMTRBNUFFQzFGRjg5MDM4MUZGRkYwNDk1QkEyMTVGODZEN0Y5MDM4CiswMDA3RkVFQzAwRkY4MUVEM0Y4MEVEMUZDMDE1MEZBMjE2RTAxNTA3QTIxMjNDMTI3RUI0RkMxNTBGMTZDMEEyNDgxNDFGMDAKKzdGRUMzRjgwNkRFQjdGMDA2QzZDNUIzOTFGRjgwN0ZFNkNCNTVBNkM1QzZDMTRFMEM2NkMxMzgwRDkwRkZDQzdGQzIzMzU3QworQjMyQz5JPEVDMDdGMDRBN0UxNDFGMTQzRkEyMTQ3RUEyMTRGQ0VCMDFGOEEyRUIwM0YwRUIwN0UwQTJFQjBGQzBFQjFGODAKK0EyRUIzRjAwMTM3RUEyNUI0ODVBQTI0ODVBNUIxMjA3NDg1QUEyNDg1QTQ4QzdGQ0EyMTI3RTVBQjcxMkZDMTZGRUEzNkMxNQorRkNDOEVBRjgwMEFBOTEzODdGRkZGMDkxQjUxMkY4QTM2RTEzRjAyNzM0N0VCMzJDPkk8MDAwRkI1MTJGRTQ4ODBBMzVEMDEKKzgwQzhGQ0FERUI4M0ZFOTAzODlGRkY4MDkwQjUxMkUwMTVGODgxOTAzOEZFMDNGRTkwMzhGMDAwRkYwMUMwN0Y0OUVCM0Y4MAorOTBDNzEyMUY2QzE1QzBDODEyMEZBMkVEMDdFMEE0MTIzQzEyN0VCNEZDMTUwRjE2QzBBMjQ4MTQxRjAwN0VFQzNGODAwMDdGCitFQzdGMDA2QzZDNUI2RDQ4NUEzOTFGRjgwRkZDNkNCNTVBNkM1QzAwMDExNEMwNkM2QzkwQzdGQ0VCMEZGODIzMzQ3Q0IyMkMKKz5JPEVDM0ZDMDkwMzgwMUZGRjgwMTA3N0YwMTFGN0Y0OTdGOTAzODdGRTA3RjkwMzlGRjAwM0Y4MDQ4NDgxMzdGRUEwM0Y4Cis0ODVBNUIwMDBGRUMzRjAwNDg0ODEzMUU0OTkwQzdGQzEyM0Y5MEM5RkNBMjVBMTI3RUVCMDNGRTkwMzgxRkZGODBEOEZDN0YKKzEzRTAwMEZEQjU3RUI2N0U5MDM4RkUwN0ZDOTAzOEYwMDFGRTkwMzhDMDAwN0Y0OUVCM0Y4MDkwQzcxMjFGMTZDMDQ4MTQwRgorMTZFMDE1MDdBMzEyN0VBNDdFMTUwRjZEMTRDMDAwMUYxNDFGNkQxNDgwMDAwRjE0M0Y2REVCN0YwMDM5MDdGODAxRkUzOTAzCitGRTA3RkM2Q0I1NUE2QzVDNkQ1QjAxMUYxMzgwRDkwN0ZDQzdGQzIzMzU3Q0IzMkM+STwxMjc4QjcxMkMwMTZFMEEzMTZDMAorMDBGQ0M3RUEzRjgwRUQ3RjAwMTVGRTAwNzg1Q0M3MTIwMTRBNUE0QTVBNUQxNDBGNUQ0QTVBMTQzRjkyQzdGQzVDMTQ3RTE0CitGRTVDMTMwMTVDQTI0OTVBQTIxMzA3NUNBMzQ5NUFBNDQ5NUFBNTEzM0Y5MUM4RkNBQTEzMUUyMzM1N0NCMzJDPkk8RUIwNworRkNFQjNGRkY5MEI1MTJDMDQ4ODA0ODgwMzkwN0ZDMDdGODM5MEZGMDAxRkM0ODQ4NkM3RUQ4M0Y4MDEzN0UxNTdGNDhDNzdFCiswMDdFRUMxRjgwMTJGRTVBRUQwRkMwQTQxNkUwQTM3RTEyN0UwMDdGMTQxRjdFNkQxMzNGNkM2QzEzN0YzOTBGRjAwMUZGMzgKKzA3RkMwRjZDQjZGQzZDMTRGNzZDMTRDNzAxM0YxMzBGRDkwRkY4MTNDMDkwQzdGQ0EyMTUxRjE2ODAxNTNGMTYwMDAwMEY1QworNDg2QzEzN0U0ODZDMTNGRTRBNUE0QTVBMTQwNzkwMzg4MDFGRjAzOTFGRTA3RkUwOTBCNTVBNkM5MUM3RkM2QzVCMDAwMTEzCitGODM4MDA3RkMwMjMzNTdDQjMyQz41NyBEPDE0RkU0OTdFQTQ0OTdGQTIxNEVGQTIxMzA3ODFBMjE0QzdBMjAxMEY3RkEzMTQKK0MzOTAzODFGODNGMEE1OTAzODNGMDFGOEE0OTAzODdFMDBGQ0E1NDkxMzdFOTBCNTEyRkVBMzQ4ODBBMjkwMzhGODAwM0ZBMworNDg0OEVCMUY4MEE0MDAwNzE1QzA0OTEzMEZEODdGRkVFQkZGRkM2RDVBQjUxNEZFNkMxNUZDNDk3RTI3MzQ3RUIzMkM+NjUKK0Q8MDA3RkI1MTJFMDE1RjhCNjEyRkU2QzgwMTZDMDM5MDNGMDAwM0ZFRDBGRTBFRDA3RjAxNTAzQTJFRDAxRjhBNkVEMDNGMAorQTIxNTA3RUQwRkUwRUQxRkMwRURGRjgwOTBCNjEyMDA1RDVEMTVGRjE2QzA5MDM5RjAwMDFGRTBFRDA3RjBFRDAzRjgxNTAxCitFRDAwRkNBMjE2RkUxNjdFQTYxNkZFMTZGQzE1MDFFRDAzRjgxNTBGRUQzRkYwMDA3RkI2MTJFMDE2QzBCNzEyODA2Q0VDRkUKKzAwMTVGMDI3MzM3RkIyMkM+STwwMkZGMTM3MDAxMDdFQkUwRjg0OTEzRjkwMTNGMTNGRDQ5MTNGRkVCRkY4MTM5MDFGRTAwCis3RjQ4NDgxMzFGRDgwN0YwMTMwRjE1MDc0ODVBNDkxMzAzNDg1QTE1MDE0OEM3RkNBMjVBMDA3RUVDMDBGMDE2MDBBMjEyRkUKKzVBQUI3RTEyN0VBMzAwN0YxNUYwNkNFQzAxRjhBMjZDN0VBMjZDNkMxMzAzNkQxNEYwNkM2QzEzMDcxNkUwRDgwM0ZDMTMxRgorNkM2Q0VCM0ZDMDNBMDBGRjgxRkY4MDZEQjUxMjAwNkQ1QjAxMEY1QjZEMTNGMDAxMDAxMzgwMjUzNTdEQjMyQz5JPDAwN0YKK0I1RkNCNjEyQzAxNUYwODE2QzgwMzkwN0UwMDNGRUVDMDBGRkVEN0Y4MDE1M0ZFRDFGQzBFRDBGRTBBMjE1MDcxNkYwMTUwMworMTZGODE1MDFBNEVEMDBGQ0FDRUQwMUY4QTMxNTAzMTZGMEEyMTUwNzE2RTAxNTBGRUQxRkMwMTUzRkVEN0Y4MEVERkYwMEVDCiswM0ZFMDA3RkI1NUFCNjVBNUQxNUMwNkM5MUM3RkMyNjMzN0VCMjJDPkk8MDA3RkI2MTJGMEI3MTJGOEEzN0UzOTAzRjAwMAorMDFBN0VEMDBGMDE2MDBBNEVDMDFFMDRBN0VBNDkwQjVGQ0E1RUJGMDAzQTQ2RTVBOTFDOEZDQTUxNjNDMTY3RUE4MDA3RkI2CisxMkZFQjdGQ0EzNkMxNUZDMjczMzdFQjIyQz5JPDAwN0ZCNjEyRjhCNzEyRkNBMzdFRDgwM0YwQzdGQ0E3MTY3ODE2MDBBNQorMTVGMDRBN0VBNDkwQjVGQ0E1RUJGMDAxQTQ2RTVBOTJDN0ZDQUQzODdGRkZFMEI1RkM4MDVDN0UyNjMzN0VCMjJDPkk8OTAKKzM5MDFGQzAzODA5MDM5MEZGRjg3QzA0OTEzRUYwMTdGMTNGRjkwQjZGQzQ4MTMwNzM4MDNGQzAxNDk3RTQ4NDgxMzdGNDg0OAorMTMzRjQ5MTMxRjEyMUY1QjAwM0YxNDBGOTBDN0ZDQTIxMjdFRUQwNzgwOTJDN0ZDQTIxMkZFNUFBODkxMzgwM0ZGRjg0QTEzCitGQ0EyN0UwMDdFNkQxM0Y4OTEzODAwMEZDMEEzNkMxNDFGQTI3RjEyMUY2RDEzM0YxMjBGNkQxMzdGNkM3RTZDNkMxM0ZGNkQKKzVBMzgwMUZGMDc2QzkwQjVGQzZEMTNFRjAxMUYxM0NGNkRFQjA3ODBEOTAxRkNDN0ZDMjYzNTdEQjMyQz5JPEQ4N0ZGRUVCCitGRkZDQjU0ODEzRkVBMzZDNDg2QzEzRkNEODA3RTBFQjBGQzBCMTkwQjZGQ0E1OTAzOEUwMDAwRkIzRDg3RkZFRUJGRkZDQjUKKzQ4MTNGRUEzNkM0ODZDMTNGQzI3MzM3RUIyMkM+STwwMDdGQjUxMkY4QjYxMkZDQTM2QzE0RjgzOTAwMEZDMDAwQjNCM0E1CiswMDdGQjUxMkY4QjYxMkZDQTM2QzE0RjgxRTMzNzlCMjJDPkk8RDg3RkZDRUI3RkY4NDg2Q0VCRkZGQ0EzNkM0OEVCN0ZGOAorRDgwN0MwRUIxRjgwMTUzRkVEN0YwMDE1N0U1RDRBNUExNDAzNEE1QTVENEE1QTRBNUExNDNGNEFDN0ZDMTQ3RTVDRUJDMUY4CisxM0MzRUJDN0ZDQTJFQkNGRkVFQkRGQkVFQkZGQkYxNDFGMDFGRTdGNDk2QzdFMTNGODZFN0VFQkYwMDMwMUUwN0ZFQkMwMDEKKzgxNkU3RUEyMTU3RTE1M0UxNTNGODExNjgwRUQwRkMwQTJFRDA3RTBEODdGRkNFQjFGRkM0ODZDRUIzRkZFQTM2QzQ4RUIxRgorRkMyNzMzN0VCMjJDPjc1IEQ8Mzg3RkZGRTBCNTdFQTM2QzVCRDgwM0YwQzhGQ0IzQUUxNkYwRUQwMUY4QTgwMDdGQjZGQ0I3CitGQ0EzNkMxNUYwMjUzMzdEQjIyQz5JPEQ4N0ZFMEVCMEZGQzQ4NkNFQjFGRkVBMjZEMTMzRjAwN0YxNUZDMDAwRjE1RTAwMQorQkMxMzdCQTQwMTlFMTNGM0EzRUI5RjAxQTIwMThGMTNFM0EyMTQ4M0EyMDE4NzEzQzMxNEM3QTIwMTgzMTM4M0EyMTRFRkEyCiswMTgxMTMwM0EyMTRGRkVCODBGRUEzMTQ3QzE0MzgxNDAwQUNEODdGRjBFQjFGRkM0ODZDRUIzRkZFQTM2QzQ4RUIxRkZDMjcKKzMzN0VCMjJDPkk8RDg3RkYwRUI3RkZDNDg2Q0VCRkZGRUEyN0YwMDdGRUM3RkZDRDgwN0ZFRUIwN0MwMTNERUEyMTNERjEzCitDRkEyMTQ4MDEzQzcxNEMwQTIxM0MzMTRFMEEyMTNDMTE0RjBBMjEzQzAxNEY4QTIxNDdDQTMxNDNFQTIxNDFFMTQxRkEyMTQKKzBGMTU4N0EyMTQwNzE1QzdBMjE0MDMxNUU3MTQwMUEyMTVGNzE0MDBBMjE1RkZEODdGRkMxMzdGNDg3RTE1M0ZBMjZDNDhFQgorMUY4MDI3MzM3RUIyMkM+STxFQjdGRkYwMDAzQjUxMkUwMDAwRjE0Rjg0ODgwNDg4MEVCRTAwM0VCODAwMDQ4QzcxMjdGQTIKKzAwN0U4MEEzMDBGRTE1ODA0ODE0MUZCM0E4NkMxNDNGQTIwMDdFMTUwMEEzMDA3RjVDQTI2QzZDMTNGRUVCRjAwNzkwQjVGQworNkM1QzZDNUMwMDAzMTRFMEM2NkM5MEM3RkMyMTM1N0JCMzJDPkk8MDA3RkI1MTJDMEI2MTJGODgxMTVGRjZDMTU4MDI2MDMKK0YwMDAxM0MwMTUzRkVEMEZFMEVEMDdGMEEyMTUwMzE2RjgxNTAxQTYxNTAzMTZGMDE1MDdBMkVEMEZFMEVEM0ZDMDE1RkY5MAorQjYxMjgwMTYwMDE1RkM1RDE1QzAwMUYwQzhGQ0IwMzg3RkZGODBCNTdFQTM2QzVCMjUzMzdFQjIyQz5JPDM4N0ZGRkZDQjYKKzdFMTVFMDE1Rjg2QzgwMzkwN0UwMDdGRTE0MDFFQzAwN0Y2RjdFMTUxRkEyNkY3RUE2NEI1QUEyMTUzRjRCQzdGQ0VDMDFGRQorMTQwNzkwQjU1QTVEMTVFMDgxODE5MDM4RTAwN0ZDRUMwMUZFMTQwMDE1N0Y4MUE4MTYwRkVFMUY4MEE1RDg3RkZFRUIxRkJGCitCNUVDRkYwMDgxNUU2QzQ4NkQ1QUM4RUEwMUYwMjkzNDdFQjIyQz44MiBEPDkwMzgxRkY4MDc5MEI1RUEwRjgwNDgxNENGMDAKKzA3MTRGRjVBMzgxRkYwMUYzODNGQzAwMzQ5N0U0OEM3RkMwMDdFMTQ3RjAwRkUxNDNGNUExNTFGQTQ2Q0VDMEYwMDAwN0U5MQorQzdGQzEyN0Y3RkVBM0ZFMEVBMUZGQ0VCRkZDMDZDMTNGQzAwMDNFQkZGQzA2QzE0RjA2QzZDN0YwMTA3N0Y5MDM4MDA3RkZFCitFQzA3RkYwMjAwMTM4MDE1M0ZFRDFGQzBBMkVEMEZFMEEyMDA3ODE0MDcxMkZDQTU2Q0VDMEZDMEEyNkNFQzFGODA2RDEzM0YKKzAxRTBFQjdGMDA5MDM4RkUwMUZGOTBCNTVBNUQwMEY5MTRGMEQ4RjgzRjEzQzBEODcwMDc5MEM3RkMyMzM1N0NCMzJDPkk8CiswMDdGQjYxMkZDQjcxMkZFQTQzQUZDMDA3RTAwN0VBNzAwNzgxNTNDQzcxNDAwQjNBRjkwMzgzRkZGRkNBMjQ5N0Y2RDVCQTIKKzI3MzM3RUIyMkM+STwzQjdGRkY4MDNGRkZDMEI1NkM0ODEzRTBBMzZDNDk2QzEzQzAzQjAzRjAwMDAxRjgwMEIzQUY2RDEzCiswMzAwMDE1REEyNkQxMzA3MDAwMDVENkQxMzBGMDE3RjQ5NUE2RDZDNDg1QUVDRTBGRjZEQjVDN0ZDNkQ1QjAxMDMxM0Y4NkQKKzVCOTAzODAwM0Y4MDJCMzQ4MEIyMkM+STxEODdGRkNFQjdGRkM0ODZDRUJGRkZFQTM2QzQ4RUI3RkZDRDgwRkMwRUIwN0UwCis2RDEzMEYwMDA3MTVDMEEzNkQxMzFGMDAwMzE1ODBBMzZEMTMzRjAwMDExNTAwQTM2RDVCMDAwMDE0N0VBNDAxN0U1QkE0NkQKKzQ4NUFBNDkwMzgxRjgzRjBBNDAxMEY1QjE0QzdBMzAxMDc1QkEyMTRFRkEyMDEwMzVCQTIxNEZGQTI2RDkwQzdGQ0E0NkQ1QQorMjczNDdFQjIyQz5JPEQ4N0ZGMEVCMDdGRjQ4NkM0OTEzODBBMzZDNDg2RDEzMDAwMDFGQzgxMjdDQTQ2QzZDNUNBNzZDNkMKKzQ5NUFBNDE0M0UxNDdGQTMzQTAzRTBGRjgzRTBBMjE0RjdBMjAxRTExM0MzQTMwMDAxMDFFMzVCQTIwMUYxMTNDNzAxRjMxMworRTdBMzE0QzFBMjAwMDA1REEyMDFGNzEzRjcxNDgwQTMwMUZGMTNGRjAxN0Y5MUM3RkM0QTdFQTQwMTNFMTMzRTI5MzQ3RkIyCisyQz5JPDNBM0ZGRjAzRkZFMDQ4NDkxM0YwMTQ4NzE0MDc2QzZEMTNFMDNBMDFGODAwRkUwMDdGMDAwMDQ5NUExM0ZFMDE3RQorNUJFQjdGMDMwMTNGNUIxNDg3MDExRjVCMTRDRjAxMEY1QjE0RkY2RDVCQTI2RDkwQzdGQ0EyNkQ1QUEyNkQ1QUEyNDk3RUEyCis0OTdFQTI0OTdGODFFQjBGQ0Y4MUVCMUZDN0VDODdGMEVCM0Y4M0VDMDNGOEVCN0YwMTAxN0U3RkVCRkUwMDQ5N0YwMDAxMTQKKzdFNDkxMzdGMDAwMzgwNDkxNDgwMTUxRkQ4N0ZGRUVCRkZGQzZENUFCNTE0RkU2QzE1RkM0OTdFMjczMzdFQjIyQz5JPEQ4Cis3RkZDRUI3RkZDNDg2Q0VCRkZGRUEzNkM0OEVCN0ZGQ0Q4MDdGMEVCMEZDMDE1MUYwMDAzMTU4MDZEMTMzRjEyMDE2REVCN0YKKzAwMTIwMDZEMTM3RTAxN0UxM0ZFMDE3RjVCRUIzRjAxRUM4MUY4MTMxRkVDODNGMEVCMEZDMzE0Qzc5MDM4MDdFN0UwQTIwMQorMDM1QjE0RUY2REI0NUFBMjkyQzdGQzdGNUMxNDdFQjA5MDM4MDdGRkUwNDk3RkEzNkQ1QjI3MzM3RUIyMkM+STwwMDNGQjYKKzEyQzA0ODE1RTBBNDAwN0VDN0VBMUZDMEVEM0Y4MEEyRUQ3RjAwMTU3RTE1RkU0QTVBMDAzQzVDQzcxMjAzNEE1QUEyNEE1QQorNEE1QUEyNEE1QTRBQzdGQ0EyMTRGRTQ5NUFBMjQ5NUE0OTVBQTI0OTVBNDk1QUEyNDk1QTQ5QzhGQ0EyMTNGRTQ4NUFBMjQ4Cis0OEVCMDNDMDQ5RUIwN0UwMTIwNzQ4NUE1QjEyMUY0ODVBQTI0OEM3RkNCN0ZDQTQ2QzE1QzAyMzMzN0NCMjJDPkk8MTI3MAorMTJGOEEyN0UxMjdDMTI3RTEyM0UxMjNGN0VBMjdGMTIwRjdGMTIwNzdGMTIwMzdGMTIwMTdGMTIwMDdGMTM3QzEzN0UxMzNFCitBMjEzM0Y3RjgwMTMwRjgwMTMwNzgwMTMwMzgwMTMwMTgwMTMwMDgwMTQ3QzE0N0UxNDNFQTIxNDNGODA4MTE0MEY4MTE0MDcKKzgxMTQwMzgxMTQwMTgxMTQwMDgxMTU3Q0EyMTU3RTE1M0UxNTNGODExNjgwMTUwRkEyRUQwNzAwMjE0MTdCQjkyQz45MgorRDwwMDdGQjZGQ0I3MTI4MEE0NkMxNTAwMjEwNjdCN0QyQz45NSBEPDM4MDFGRkYwMDAwNzEzRkUwMDFGNkQ3RTE1RTA0ODgwCis5MDM4QzAxRkY4MTQwN0VDMDFGQzM4MUY4MDAwMDAwNkM3N0VDODEyN0VBM0VDRkZGRTEzMUY5MEI1RkMxMjAzMTIwRjQ4RUIKKzgwN0UzODNGRjgwMEVBN0ZDMDkwQzdGQzEyRkU1QUE0N0UwMDdGMTRGRUVCODAwMzM4M0ZFMDFGNkNCNjEyRkM2QzE1RkU2QworMTRCRjAwMDFFQkZFMUYzQTAwM0ZGMDA3RkMyNzI0N0NBMzJDPjk3IEQ8RUE3RkYwNDg3RUEzMTI3RjEyMDFBQUVDMUZFMEVDCitGRkY4MDFGQjEzRkU5MEI2RkMxNjgwOTEzOEYwN0ZDMDkxMzg4MDFGRTA5MTM4MDAwN0YwNDlFQjAzRjg1QkVEMDFGQzQ5MTMKKzAwQTIxNkZFMTY3RUE4MTZGRTZEMTRGQ0EyRUQwMUY4NkQxMzAzNkRFQjA3RjAxNTBGOTEzODgwMUZFMDkxMzhFMDdGQzA5MQorQjUxMjgwMTYwMDAxRkI1QjAxRjgxM0Y4MzkwMEYwM0ZDMDI3MzM3RkIyMkM+STw5MDM4MDNGRkUwMDExRjEzRjgwMTdGMTMKK0ZFNDhCNUZDNDg4MDQ4NDhDNkZDRUEwRkYwNDg1QTQ5MTM3RTQ4NDgxMzE4OTBDOUZDNUExMjdFQTI1QUE4MTI3RUEyMTI3RgorNkMxNDBGNkRFQjFGODA2QzdFNkQxMzNGNkM2Q0VCN0YwMDM5MDdGRTAzRkY2Q0I1NUE2QzVDNkM2QzVCMDExRjEzRTAwMTAzCis5MEM3RkMyMTI0N0FBMzJDPkk8RUMwRkZFNEE3RUEzODBFQzAwM0ZBQUVCMDdGOEVCM0ZGRTkwQjUxMkJGNDgxNEZGNUEzOAorMDdGQzBGMzgwRkYwMDM0ODQ4N0U0OTdFNDg0ODdGOTBDN0ZDMDA3RTgwQTIxMkZFNUFBODdFMDA3RTVDQTIwMDdGNUM2QzdFCis1QzZDNkM1QTM4MEZGMDA3MzgwN0ZDMUY2Q0I2MTJGQzZDRUNCRkZFNkMxNDNGRUIzRkZDOTAzOTBGRjAxRkZDMjczMzdEQjIKKzJDPkk8RUIwM0ZFOTAzODFGRkZDMDAxN0YxM0YwNDhCNTdFNDg4MDM5MDdGRTAzRkUzOTBGRjgwMEZGRDgxRkUwRUIzRjgwCis1QjQ4NDhFQjFGQzA5MEM3MTIwRjVBMDA3RTE1RTAxNTA3NUFCN0ZDQTQxNkMwMDBGQ0M5RkM3RTEyN0VBMjEyN0Y2Q0VDMDMKK0MwNkRFQjA3RTA2QzdFRDgwRkYwMTMwRjZDNkNFQjNGQzAwMUZGMTNGRjAwMDE5MEI1MTI4MDZDMTUwMDAxM0YxM0ZDMDEwRgorMTNGMDAxMDExMzgwMjMyNDdDQTMyQz5JPEVDMEZGOEVDM0ZGRTkxQjVGQzQ5MTQ4MDVCOTAzODA3RkM3RjE0RjA5MDM5MEYKK0UwM0YwMDE0QzA5MkM3RkNBNjAwN0ZCNTEyRkVCN0ZDQTM2QzVDMjYwMDBGQzBDN0ZDQjNBODAwM0ZCNTEyRjA0ODgwQTM2QworNUMyMTMzN0RCMjJDPkk8RUQwM0Y4OTAzOTA3RjgwRkZDOTAzOTFGRkUzRkZFMDE3RkI2RkM0OEI3RkM0OEVDRkU3RjkwMzgKK0ZDMEZGODI2MDdGMDAzMTMzRTNBMEZFMDAxRkMxQ0Q5QzAwMDEzMDAwMDFGODA0OTEzN0VBNjZEMTNGRTAwMEY1Q0VCRTAwMQorNkM2QzQ4NUEzOTAzRkMwRkYwNDhCNUZDNUQ0ODE0ODBEOTlGRkVDN0ZDRUI4N0Y4MDE4MEM4RkNBMzdGNkM3RTkwQjUxMkYwCis2QzE0RkU0OEVDRkY4MDQ4MTVFMDQ4MTVGMDNBM0ZDMDAwMUZGODQ4QzdFQTAzRkMwMDdFMTQwMDAwN0MxNTdDMDBGQzE1N0UKKzQ4MTUzRUE0NkMxNTdFMDA3RTE1RkNEODdGODAxMzAzRDgzRkUwRUIwRkY4RDgxRkZDRUI3RkYwNkNCNjEyRTAwMDAzMTU4MAorNkMxNTAwRDgwMDNGMTNGODAxMDcxM0MwMjgzODdFQTQyQz5JPEVBN0ZGMDQ4N0VBMzEyN0YxMjAxQUFFQzFGRTBFQzdGRkMKKzkwMzhGOUZGRkUwMUZCN0Y5MEI2RkM5MTM4RjAzRjgwRUNDMDFGMDI4MDdGRUMwMDBGNUI1QkEyNUJCMzI2N0ZGRkUwQjVGQworQjUwMEYxMTQ4MEEzNkMwMUUwMTQwMDI5MzM3RkIyMkM+STwxMzA3RUIxRkMwQTI0OTdFQTM2RDVBQTIwMTA3QzdGQzkwQzgKK0ZDQTczODdGRkZDMDgwQjVGQzdFQTJFQTAwMDdCM0E4MDA3RkI1MTJGQ0I2MTJGRUEzNkMxNEZDMUYzNDc5QjMyQz5JPDE0CiswRUVDM0Y4MEEyRUM3RkMwQTNFQzNGODBBMkVDMEUwMDkxQzdGQ0E3NDhCNTEyODA0ODE0QzBBMzdFQzcxMjBGQjNCM0EyMTQKKzFGMDAzQzE0ODAwMDdFMTMzRkI0MTQwMDVDRUIwMUZFRUJGRkZDNkM1QjVDMDAxRjVCMDAwNzkwQzdGQzFBNDY3Q0IzMkM+CitJPEVBN0ZFMDQ4N0VBMzEyN0YxMjAxQUE5MTM4MUZGRkYwNEExM0Y4QTM2RTEzRjA5MTM4MDBGRTAwNEE1QTRBNUE0QTVBNEEKKzVBNEE1QTRBNUE0QUM3RkMxNEZFRUJGMUZDMTNGM0VCRjdGRTkwQjVGQ0EyRUM5RjgwRUMwRkMwMDFGRTdGRUJGQzA3NDk2QworN0U0OTZDN0U4MTE0MDAxNTdFODExNjgwMTUxRjNBN0ZGRkMwRkZGQ0I1MDBFMTEzRkVBMzZDMDFDMDEzRkMyNzMzN0VCMjJDCis+STwzODdGRkZFMEI1N0VBMzdFRUEwMDAzQjNCM0E1MDA3RkI2MTI4MEI3MTJDMEEzNkMxNTgwMjIzMzdCQjIyQz5JPDNBN0YKKzgzRjAwN0UwOTAzOUNGRkMxRkY4M0FGRkRGRkUzRkZDRDg3RkZGMTNGRjkxQjU3RTNBMDdGRTFGRkMzRTAxRkNFQkY4M0Y0OQorNkM0ODdFMDFGMDEzRTAwMUUwMTNDMEEzMDFDMDEzODBCMzNCN0ZGQzNGRjg3RkYwMDI3RjEzRkZEOEZGRkU2RDEzRjhEODdGCitGQzQ5MTNGMDAyM0YxMzdGMkQyNDgxQTMyQz5JPDM5N0ZGMDFGRTAzOUZGRjg3RkZDOTAzOEY5RkZGRTAxRkI3RjZDQjZGQworMDAwMTkwMzhGMDNGODBFQ0MwMUYwMjgwN0ZFQzAwMEY1QjVCQTI1QkIzMjY3RkZGRTBCNUZDQjUwMEYxMTQ4MEEzNkMwMUUwCisxNDAwMjkyNDdGQTMyQz5JPEVCMDdGQ0VCMUZGRjAxN0YxM0MwNDhCNTEyRjA0ODgwMzkwN0ZDMDdGQzM5MEZGMDAxRkU0OAorNDg2QzdFMDE4MDEzM0YwMDNGMTU4MDkwQzcxMjFGMDA3RUVDMEZDMEEzNDhFQzA3RTBBNzZDMTQwRjAwN0UxNUMwQTIwMDdGCisxNDFGNkMxNTgwNkQxMzNGNkM2Q0VCN0YwMDZENUI2QzZDNDg1QTM5MDdGQzA3RkM2Q0I1NUE2QzVDNkM2QzEzQzAwMTFGOTAKK0M3RkNFQjA3RkMyMzI0N0NBMzJDPkk8Mzk3RkYwMUZFMDM5RkZGOEZGRjgwMUZCMTNGRTkwQjZGQzZDMTU4MDAwMDE5MDM4CitGMDdGQzA5MTM4ODAxRkUwOTEzODAwMDdGMDQ5RUIwM0Y4NUJFRDAxRkM0OTEzMDBBMjE2RkUxNjdFQTgxNkZFNkQxNEZDQTIKK0VEMDFGODZEMTMwMzZERUIwN0YwMTUwRjkxMzg4MDFGRTA5MTM4RTA3RkMwOTFCNTEyODAxNjAwMDFGQjVCMDFGODEzRjhFQworM0ZDMDkxQzhGQ0FEMzg3RkZGRTBCNTdFQTM2QzVCMjczNjdGQTMyQz5JPDkwMzkwM0ZDMDc4MDkwMzkxRkZGMEZDMDAxN0YKKzEzQ0Y0OEI1MTJFRjQ4MTRGRjM4MDdGRTA3MzgwRkYwMDE0ODQ4N0U0OTEzN0Y0ODQ4MTMzRjkwQzdGQzQ4MTQxRjEyN0UxNQorMEY1QUE4N0UwMDdFMTQxRkEyNkMxNDNGN0Y2QzZDMTM3RjZEMTNGRjM4MEZGMDAzMzgwN0ZDMEY2Q0I2RkM2QzE0RUY2QzZDCisxMzhGNkQxMzBGRUIwN0Y4OTBDN0ZDQUQwMjAzQjVGQzRBMTQ4MEEzNkUxNDAwMjkzNjdEQTMyQz5JPEQ4N0ZGRUVCM0ZDMAorQjUzODAxRkZGMDAyMDcxM0Y4MDIxRjEzRkM2QzVCMzkwMDNGN0ZFMUVDRkYwMTkxMzhGQzAwRjg0QTEzNzA0QTEzMDA1Q0EyCis1QzVDQTM5MUM4RkNBRjAwN0ZCNTEyRTBCNjdFQTM2QzVDMjYyNDdFQTMyQz5JPDkwMzg3RkY4NzAwMDAzQjUxMkY4MTIwRgorNUE1QTM4N0ZDMDBGMzg3RTAwMDM0ODEzMDE1QUEzNkNFQjAwRjAwMDdGMTQwMDEzRjAzODNGRkZDMDZDMTNGRTZDRUJGRjgwCiswMDAzMTRFMEM2NkMxM0Y4MDEwMTEzRkNFQjAwMDdFQzAwRkUwMDc4MTQ3RjAwRkMxNDNGMTUxRjdFQTI2QzE0M0Y2RDEzM0UKKzZEMTNGRTkwMzhGMDA3RkM5MEI1RkMxNUY4MTVFMDAwRjgxNDgwMzk3MDFGRkMwMDIwMjQ3QUEzMkM+STwxMzFFMTMzRkE5CiswMDdGQjZGQ0I3MTI4MEEzNkMxNTAwRDgwMDNGQzhGQ0IxRUQwM0MwRUQwN0UwQTVFQzgwMEYwMTFGRUIxRkMwRUNFMDdGNkQKK0I1MTI4MDE2MDAwMTAzNUI2RDEzRjg5MDM4MDAzRkUwMjMyRTdFQUQyQz5JPDNBN0ZGMDAzRkY4MDQ4NkM0ODdGQTMwMDdGCis3RjAwMDFFQjAwMEZCM0EzMTUxRkEyMTUzRjZEMTM3RjM5MDBGRTAzRkY5MEI3RkM2RDE1ODA3RjZEMTNDRjkwMjYwM0ZFMDcKKzEzMDAyOTI0N0ZBMzJDPkk8M0E3RkZGMDFGRkZDQjUxNEZFMTQ4MzE0MDE2QzE1RkMzQTAzRTAwMDBGODBBMjZEMTMxRjAwCiswMTE1MDBBMjZENUIwMDAwMTQzRUEyNkQxMzdFMDE3QzEzN0NBMjAxN0UxM0ZDMDEzRTVCQTJFQjNGMDEwMTFGNUJBMjE0ODMKKzAxMEY1QkEyMTRDNzAxMDc1QkEyMTRFRjAxMDM1QkEyMTRGRjZEOTBDN0ZDQTI2RDVBMTQ3QzI3MjQ3RUEzMkM+STxEODdGCitGRkVCN0ZGRjZFQjVGQ0I1MTU4MDZDMTYwMDRBN0VEODA3QzBFQjAxRjBBNjZDNkM0OTVBQTMxNDNFMTQ3RkEyRDgwMUYwNDkKKzVBRUNGRjg3QTIxNEY3QTIwMUYxMTNDNzAwMDA1RDkwMzhGOUUzQ0ZBMjAxRkIxM0VGQTNEOTdCQzE5MEM3RkMwMTdGMTNGRgorQTIxNDgwQTIwMTNGNUI5MDM4MUYwMDdDMjkyNDdGQTMyQz5JPDNBM0ZGRjAzRkZGMDQ4MDE4NzEzRjhBMzZDMDEwMzEzRjAKKzNBMDBGQzAwN0UwMDVEOTAzODdFMDFGODAxM0Y1QkVCMUY4M0VDODdFMDkwMzgwRkNGQzA5MDM4MDdFRjgwRUIwM0ZGNkQ5MAorQzdGQzVDNkQ1QTE0N0MxNEZFMTMwMTgwOTAzODAzRUY4MDkwMzgwN0NGQzBFQjBGQzdFQzgzRTA5MDM4MUYwMUYwMDEzRjdGCitFQjdFMDAwMTdDMTM3QzQ5MTM3RTAwMDE4MDNBN0ZGRjAxRkZGQzE0ODNCNTE0RkU2QzE1RkMxNDAxMjcyNDdFQTMyQz5JPAorM0E3RkZGMDFGRkZDQjUwMDgxMTNGRTE0ODMxNDgxNkMwMTAxMTNGQzNBMDNFMDAwMEY4MDZDN0UxNTFGNkQxNDAwMTIwMDVECis2RDEzM0UxMzdDMDE3RTEzN0UwMTNFMTM3Q0EyMDEzRjEzRkM2RDVCQTJFQjBGODE1REEyRUIwN0MxRUNDM0UwQTJFQjAzRTMKK0VDRTdDMDEzMDExNEY3NURFQjAwRkZBMjkyQzdGQzgwQTIxNDNFQTIxNDdFMTQ3Q0EyMTRGQzVDQTJFQTBDMDEwMDNGNUJFQQorN0Y4M0VCODdFMEVBN0UwRjQ5NUEzODdGRkY4MDZDOTBDOEZDNkM1QTZDNUFFQTA3RTAyNzM2N0VBMzJDPkk8MDAzRkI2MTIKK0UwNDgxNUYwQTQwMDdFQzdFQTFGRTBFRDNGQzBFRDdGODBFREZGMDA0QTVBMDAzQzQ5NUFDNzQ4NUE0QTVBNEE1QTRBNUE0QQorNUE0QUM3RkNFQjAxRkM0OTVBRUIwRkYwNDk1QTQ5NUE0OTVBNDlDOEZDNDg0OEVCMDFFMDQ4NDhFQjAzRjA0ODVBNDg1QTQ4Cis1QTQ4NUE0ODVBQjdGQ0E0NkMxNUUwMjQyNDdEQTMyQz5JIEUKKyVFbmREVklQU0JpdG1hcEZvbnQKKyVEVklQU0JpdG1hcEZvbnQ6IEZuIGVjYngxMDAwIDEwIDI5CisvRm4gMjkgMTIyIGRmPEJFMTJGQ0EzNUUwMzgwOTc1Rj4yMiBEPDE0MUUxNDNFMTRGRTEzMDcxMzdGQjVGQ0EzMTM4RkVBMDAKKzBGQjNCM0E1MDA3RkI2MTI4MEE0MjEzNjc5QjUzMD40OSBEPEVCMEZGRTkwMzg3RkZGQzA0OEI1MTJGMDAwMDcxNEZDMzkwRgorRTAzRkZGMjYxRjgwMEYxMzgwMjYzRjAwMDMxM0MwRDg3RjgwMTRFMEVCRTAwMTAwRkY2RDEzRjA3RkEyRUQ3RkY4QTQ2QzVBCis2QzVBMDAwNkM3RkNDOEZDRURGRkYwQTIxNkUwNUMxNkMwNEExMzgwMTYwMDRBNUE0QTVBRUMxRkYwNUQ0QTVBNEFDN0ZDMTQKK0ZFNDk1QUQ5MDNGMDEzNzg0OTVBNDk1QTQ5NUE0OUM3MTJGODAxN0MxNEYwNUI0OTEzMDE0OEI2RkM1QTVBNUE1QTVBNDgxNQorRTBCN0ZDQTQyNTM2N0JCNTMwPkk8RUIwM0ZGMDExRjEzRjAwMTdGMTNGQzM5MDFGQzA3RkYyNjAzRjAwMzEzODA0ODQ4NkMKKzEzQzA0OTZDMTNFMEVBMEZGODZEMTRGMDQ4N0VBNjZDNDgxNEUwNkM1QTZDNDg1QUM3MTRDMDRBMTM4MDE2MDA0QTVBNEE1QQorRUMzRkYwOTAzODBGRkZDMDVEMTVGMDkwMzgwMDA3RkU5MTM4MDFGRjgwNkUxM0MwMTZFMEVEN0ZGMDE2RjhFRDNGRkNBMjE2CitGRUVBMUZDMDQ4N0U0ODdFNDg3RUE0MTZGQ0EyNDkxMzdGMDA3RjE1RjgwMUMwRUJGRkYwNkM1QTZDNkM0ODEzRTAyNjBGRkMKKzA3MTM4MDZDQjYxMjAwMDAwMTE0RkM2QzZDMTNGMDAxMDc5MEM3RkMyNzM3N0NCNTMwPkk8RUQwN0MwMTUwRkEyMTUxRjE1CiszRjE1N0YxNUZGNUNBMjVDNUM1QzVDMTQzRTE0M0M1QzVDMTMwMTQ5NUE1QzQ5NUE0OTVBNUIxMzNFNUIxMzc4NUI0ODVBMTIKKzAzNDg1QTVCNDhDN0ZDMTIxRTVBMTI3QzVBQjgxMjgwQTRDNzAwMDFFQkMwMDBBQTAxMDNCNjEyODBBNDI5MzY3REI1MzA+CitJPEI4MTJDMDE3RkMxN0ZGMThDMDI4MDA3RkYwMDAwMzdGMDQwMDdGNzE3RTcxN0UxNzFGODRBMjcxN0VBNzRENUFBMjYwMTcKKzNGNEQ1QTRENUE0QzEzQzAwNDBGNUI5MUI2MDBGQ0M3RkNBMkVGRkY4MDAyRjBDNzEzRjBFRjNGRjg3MTdFNzE3RTcxN0UxOQorODA3MTEzQzBBMzE5RTBBNzE5QzBBMjVGNEQxMzgwMTkwMDVGRUY3RkZFNEM0ODVBQjkxMkYwMThDMDk1QzdGQzE3RjAzQjM5Cis3REI4NDQ+NjYgRDxCNjEyRkNBNDM5MDA3RkY4MDBCM0IzQURCNjEyRkNBNDFFMzk3REI4MjQ+NzMKK0Q8QjdGQ0E0MjYwMDdGRjhDOUZDQjNBQ0VGMDc4MEE1MTcwRjE4MDBBMzVGQTI1RkEyNUY1RjVFNUVFRTBGRkUxNjdGQjhGQworQTQzMTM5N0RCODM5Pjc2IEQ8RURGRkY4MDIwRkVCRkY4MDAyN0YxNEYwOTAzQTAxRkZDMDFGRkMwMTA3OTAzODAwMDdGRkQ5CisxRkZDMDEwMTEzQzBEOTNGRjA2RDZDN0U0OTQ4NkU3RTQ5NDg2RTdFNDg0OTZFN0U0ODgzNDg5MEM4NkM3RUEyNDg0ODZGMTMKKzgwQTI0ODQ4NkYxM0MwQTIwMDNGMThFMEEzNDg0ODZGMTNGMEE0MDBGRjE4RjhBQzAwN0YxOEYwNkQ1REEzMDAzRjE4RTBBMgorNkQ1RDAwMUYxOEMwQTI2QzZDNEIxMzgwNkMxODAwNkU1QzZDNkQ0QTVBNkM1RjZDNkQ0QTVBNkQ2QzRBNUFEOTNGRkM0OTQ4Cis1QTZEQjQwMTA3NUIwMTA3RDlDMDFGOTBDN0ZDMDEwMTkwQjUxMkZDNkQ2QzE0RjAwMjBGMTQ4MDAyMDAwMUY4QzhGQzNEM0IKKzdCQjk0OD43OSBEPEI4RkMxN0YwMTdGRUVGRkY4MDI4MDA3RkY4MDAwRjEzQzAwNDAxMTNFMDcwMTNGMEVGN0ZGOEVGM0ZGQworQTJFRjFGRkVBMjE4RkZBODE4RkVBMkVGM0ZGQ0EyRUY3RkY4RUZGRkYwNEMxM0UwMDQwRjEzQzA5MUI3MTIwMDE3RkMxN0UwCiswMkY4QzlGQ0IzQTRCNjEyRkNBNDM4Mzk3REI4NDE+STxEOTA3RkYxMzBFMDEzRkVCRTAxRTkwQjVFQUY4M0UwMDAzRUNGRQorN0UzQTA3RkMwMUZGRkUzOTBGRjAwMDFGNDg0ODEzMEY0ODQ4MTMwMzQ5MTMwMTAwN0YxNDAwOTBDOEZDMTY3RTVBMTYzRUEyCis3RjE2MUU3RjdGNkQ5MUM3RkMxM0ZDMzg3RkZGRTAxNEZFRUNGRkYwNkMxNEZFNkY3RTZDODE2QzE1RjA2QzgxNkM4MUM2ODEKKzEzM0YwMTBGODAxMzAxRDkwMDBGMTQ4MEVDMDA3RjAzMEYxM0MwMTUwMzgxODEwMEYwMTU3RkEzMTYzRkEyN0UxNzgwN0UxNgorN0Y2QzE2MDA3RTZEMTRGRTAxRTA0OTVBMDFGODEzMDM5MDM5RkY4MDFGRjgwMEZDOTBCNTEyRTBEOEY4M0Y1Q0Q4RjAwNzQ5CitDN0ZDMzlFMDAwN0ZGMDJBM0I3QkI5MzU+ODMgRDxFQjNGRkUwMDAzQjUxMkUwMDAwRjE0RjgzOTFGRjAwRkZFMDAzRkVCMDMKK0ZGNkQ2QzdGNkU3RkEyNkY3RUEyNkM1QTZDNUFFQTAzODBDOEZDQTJFQzNGRkYwMTBGQjVGQzEzN0YzOTAxRkZGODdGMDAwNworMTM4MDM4MEZGRTAwRUEzRkY4NUI0ODVBMTJGRjVCQTQxNUZGNkQ1QTEyN0YyNjNGRjAwNzEzRjgzQjFGRkMxRkJGRkZDMDM5CiswRkZGRkUxRjAwMDNFQkY4MEYzOTAwM0ZFMDAzMkEyNTdEQTQyRT45NyBEPDkwMzgwMUZGQzAwMTBGMTNGQzAxN0YxM0ZGRDkKK0ZGODAxMzgwMjYwM0ZFMDAxM0MwNDg0ODVBRUEwRkY4MTIxRjEzRjAxMjNGNkUxMzgwNDg0OEVCN0YwMDE1MUM5MkM3RkMxMgorRkZBOTEyN0ZBMjdGMTIzRkVEMDFFMDZDN0UxNTAzNkM2Q0VCMDdDMDZDNkMxNDgwNkM2QzEzMUZDNjkwMzhDMDdFMDA2REI0Cis1QTAxMEYxM0YwMDEwMTEzODAyMzI1N0RBNDJBPjk5IEQ8RUU3RjgwRUQ3RkZGQTQxNTAzODFBRjkwMzgwMUZGODEwMTBGMTMKK0YxMDEzRjEzRkQ5MDM4RkZDMDdGMDAwM0VCMDAxRkQ4MDdGQzEzMDcwMDBGODA0ODQ4N0Y1QjEyM0ZBMjQ4NUFBMzEyRkZBQQorMTI3RkEyN0YxMjNGQTI2QzZDNUIwMDBGNUM2QzZDNUI2QzZDNDkxM0MwMjcwMUZGODBGRDEzRkUzOTAwN0ZGRkY5MDExRjEzCitFMTAxMDExMzAxMkYzQTdEQjkzNT5JPDkwMzgwM0ZGODAwMTFGMTNGMDAxN0YxM0ZDMzkwMUZGODNGRTNBMDNGRTAwN0Y4MAorNDg0ODEzM0Y0ODQ4MTRDMDAwMUZFQzFGRTA1QjAwM0ZFQzBGRjBBMjQ4NUExNkY4MTUwNzEyRkZBMjkwQjZGQ0EzMDFFMEM4CitGQ0E0MTI3RkEzNkM3RTE2NzgxMjFGNkM2QzE0Rjg2RDE0RjAwMDA3MTQwM0Q4MDFGRkVCMEZFMDZDOTAzOEMwN0ZDMDZEQjUKKzEyMDAwMTBGMTNGQzAxMDExM0UwMjUyNTdEQTQyQz5JPEVDMUZGMDkwMzgwMUZGRkMwMTA3MTNGRjkwMzkxRkY4N0Y4MDkwCiszODNGRTBGRkQ5RkZDMTEzQzBBMjQ4MTM4MUEyNDgxMzAxNkUxMzgwQTJFRDNFMDA5MkM3RkNBOEI2RkNBNDAwMDM5MEM4RkMKK0IzQUJCNTEyRkVBNDIyM0E3REI5MUQ+STwxNjFGRDkwN0ZFRUJGRkMwOTAzODdGRkZFMzQ4QjZFQUVGRTAyNjA3RkUwNzEzCis4RjI2MEZGODAxMTMxRjQ4NDg2QzEzOEYwMDNGMTVDRjQ5OTAzODdGQzdDMEVFQzAwMDAwN0Y4MUE2MDAzRjVEQTI2RDEzRkYKKzAwMUY1RDZDNkM0ODkwQzdGQzM5MDdGRTA3RkU0OEI1MTJGODZEMTNFMDI2MUUwN0ZFQzhGQzkwQ0FGQ0EyMTIzRTEyM0Y3RgorNkM3RTkwQjUxMkY4RURGRjgwMTZFMDZDMTVGODZDODE2QzgxNUEwMDFGODEzOTNGQzAwMDBGNDhDODEzODA0ODE1N0Y1QTE2CiszRkEzNkMxNTdGNkMxNjAwNkQ1QzZDNkM0OTVBRDgxRkYwRUIwN0ZDRDgwN0ZFRUIzRkYwMDAwMUI2MTJDMDZDNkM5MUM3RkMKKzAxMDcxM0YwMkIzNzdEQTUzMD5JPDEzRkZCNUZDQTQxMjA3N0VBRkVEN0ZDMDkxMzgwM0ZGRjgwMjBGMTNGRTkxMzgxRjAzCitGRkRBM0MwMTEzODAxNDc4NEE3RTRBMTRDMDVDQTI1Q0EyOTFDN0ZDQjNBM0I1RDhGQzNGMTNGRkE0MzAzQTdEQjkzNT5JPAorRUEwMUYwRUEwN0ZDNDg3RUEyNDg3RUE1NkM1QUEyNkM1QUVBMDFGMEM4RkNBOTEzRkYxMjdGQTQxMjA3N0VCM0E5QjUxMkY4CitBNDE1M0I3REJBMUI+STwxM0ZGQjVGQ0E0MTIwNzdFQjNCM0FDQjUxMkZDQTQxNjNBN0RCOTFCPjEwOAorRDwwMUZFRUI3RkMwMDBGRjkwMzgwM0ZGRjgwMjBGMTNGRTkxMzgxRjAzRkZEQTNDMDExMzgwMDAwNzEzNzgwMDAzNDk3RTZECis0ODE0QzA1Q0EyNUNBMjkxQzdGQ0IzQTNCNUQ4RkMzRjEzRkZBNDMwMjU3REE0MzU+MTEwCitEPDkwMzgwMUZGQzAwMTBGMTNGODAxN0YxM0ZGRDlGRjgwN0YzQTAzRkUwMDNGRTA0ODQ4NkQ3RTQ4NDg2RDdFNDg0ODZEN0UKK0EyMDAzRjgxNDkxMzAzMDA3RjgxQTMwMEZGMTY4MEE5MDA3RjE2MDBBMzAwM0Y1RDZEMTMwNzAwMUY1REEyNkM2QzQ5NUE2QworNkM0OTVBNkM2QzQ5NUE2QzZDNkNCNDVBNkM2Q0I1QzdGQzAxMUYxM0ZDMDEwMTEzQzAyOTI1N0RBNDMwPkk8OTAzOUZGMDEKK0ZGODBCNTAwMEYxM0YwMDIzRjEzRkM5MTM4RkUwN0ZGREFGMDAxMTM4MDAwMDM0OTZDMTNDMDAyODBFQjdGRTA5MUM3MTNGMAorRUUzRkY4QTJFRTFGRkNBM0VFMEZGRUFBMTdGQzE2MUZBMjE3RjgxNjNGMTdGMDZFMTM3RjZFMTRFMDZFRUJGRkMwREFGMDAzCisxMzgwOTEzOUZDMDdGRTAwOTEzODNGRkZGODAyMEYxM0UwMDIwMzkwQzdGQzkxQzlGQ0FDQjUxMkZDQTQyRjM1N0VBNDM1PgorSTw5MDM4RkUwM0YwMDBGRkVCMEZGRUVDM0ZGRjkxMzg3QzdGODA5MTM4RjhGRkMwMDAwNzVCNkM2QzVBNUNBMjkxMzg4MDdGCis4MEVEM0YwMDE1MEM5MkM3RkM5MUM4RkNCM0EyQjUxMkZFQTQyMjI1N0VBNDI3PjExNCBEPDkwMzgzRkYwMzgzOTAzRkZGRQorRjgwMDBGMTNGRjM4MUZDMDBGMzgzRjAwMDMwMDdFMTMwMTAwN0MxMzAwMTJGQzE1Nzg3RTdFNkQxMzAwMTNGQ0VCRkZFMDZDCisxM0ZDRUNGRjgwNkMxNEMwNkMxNEYwNkMxNEY4MTIwM0M2MTRGQzEzMUY5MDM4MDA3RkZFMTQwNzAwRjAxMzAxMTQwMDdFMTUKKzdFN0UxNTdDNkMxNEZDNkMxNEY4RUI4MDAxOTAzOEYwMDdGMDkwQjUxMkMwMDBGODE0MDAzOEUwMUZGODFGMjU3REE0MjY+CitJPDEzMEZBNTVCQTQ1QkEyNUI1QkEyNUExMjA3MDAxRkVCRkZFMEI2RkNBMzAwMDM5MEM3RkNCMjE1NzhBODE1Rjg2Q0VCODAKK0YwMTQ4MTZDRUJDM0UwOTAzODNGRkZDMDZEMTM4MDkwMzgwM0ZFMDAxRDM1N0VCNDI1Pkk8MDFGRkVDM0ZDMEI1RUIzRkZGCitBNDAwMDcxNDAxNkM4MEIzQTM1REEyNURBMjZDNUM2RTQ4MTNFMDZDRDlDMDNFMTNGRjkwMzg3RkZGRkMwMTFGMTNGMDAxMDMKKzEzODAzMDI1N0RBNDM1Pkk8QjUzOUYwMUZGRkYwQTQwMDAzOTAzOTgwMDNGODAwNkMwMUMwMTNFMDZDMTQwN0Q5N0ZFMDVCCis2RDZDNDg1QTZFNDhDN0ZDOTAzODFGRkMzRTAxMEY1QjkwMzgwN0ZFRkM2RDZDNUE1RDZENUI2RDVCNkU3RTZFN0U4MTRBN0UKK0EyNEE3RTkwMzgwMUYzRkZEOTAzRTM3RkQ5MDdDMTdGRUIwRkMwNDk0ODZDN0U0QTZDN0UwMTNFODA0OTZEN0U0OTEzMEYwMAorMDE2RTdFQjU5MDM4M0ZGRkY4QTQyRDI1N0VBNDMyPjEyMCBEPEI1MzlGMDAxRkZGOEE0MDAwMzkwQzdFQTFGMDAxNjFFNkUKKzEzM0U2QzE1M0M2RTEzN0M2QzE1Nzg2RTEzRjgwMTdGNUNFQ0YwMDEwMTNGNUMxNEY4MDExRjQ5NUFBMkVDRkMwNzAxMEY1QworRUNGRTBGMDEwNzkxQzdGQzZFNUE2RDEzMUUxNUJFNkQxM0JDMTVGQzZENUJBMzZFNUFBMjZFNUFBMjZFNUFBMjZFNUFBMjkyCitDOEZDQTI1QzE0MUUwMDNGMTMzRTM4N0Y4MDNDMzhGRkMwN0MxNDc4MTRGOEVCQzFGMEVCQzNFMDZDNDg1QTM4N0QxRjgwRDgKKzNGRkZDOUZDRUExRkZDRUEwN0YwMkQzNTdFQTQzMj5JIEUKKyVFbmREVklQU0JpdG1hcEZvbnQKKyVEVklQU0JpdG1hcEZvbnQ6IEZvIGVjcm0wOTAwIDkgMzAKKy9GbyAzMCAxMjIgZGY8MTRDMDEzMDFFQjAzODBFQjBGMDAxMzBFNUIxMzNDNUI1QkEyNDg1QTQ4NUFBMjEyMDc1QjEyMEY5MAorQzdGQzVBQTIxMjFFMTIzRUEzMTIzQzEyN0NBNTVBQjAxMjdDQTUxMjNDMTIzRUEzMTIxRTEyMUZBMjdFN0YxMjA3N0YxMjAzCitBMjZDN0U2QzdFQTIxMzc4N0YxMzFDN0YxMzBGRUIwMzgwRUIwMUMwMTMwMDEyNEE3OUI3MUU+NDAKK0Q8MTJDMDdFMTI3MDEyM0MxMjFDN0UxMjBGNkM3RTZDN0VBMjZDN0U2QzdFQTI3RjEzNzgxMzdDMTMzQzEzM0VBMjEzMUUxMworMUZBMzdGMTQ4MEE1RUIwN0MwQjBFQjBGODBBNTE0MDA1QkEzMTMxRTEzM0VBMjEzM0MxMzdDMTM3ODEzRjg1QkEyNDg1QTQ4Cis1QUEyNDg1QTQ4QzdGQzEyMEU1QTEyM0MxMjcwNUE1QTEyNEE3Q0I3MUU+STwxMjNDMTI3RTEyRkZBNDEyN0UxMjNDMDgwOAorN0E4NzE1PjQ2IEQ8QjUxMkZFQTMwMDAxMTMwMDZDNUFCM0IzQTc0ODdFQjUxMkZFQTMxNzMzN0VCMjFDPjczCitEPEI1MTJGRUEzRDgwM0ZFQzlGQzZDNUFCM0E5RUUwMTgwQTQxNjAzMTcwMEE0NUVBMjVFNUU1RTVFMTZGRTAwMDMxNDA3QjcKK0ZDQTMyOTMzN0RCMjMwPjc2IEQ8RUMwN0ZDOTEzODdGRkZDMDkwMzkwMUZDMDdGMDkwMzkwN0UwMDBGQ0Q5MEY4MDEzM0UwMQorM0ZDNzZDN0UwMTdFNkU3RTQ5NkU3RTQ4NDg2RTdFNDg0ODZFN0VBMjQ4NDg2RTdFMDAwRjgyNDkxNTdFMDAxRjE2N0ZBMjQ4Cis0OEVEM0Y4MEEyMDA3RjE3QzBBMjkwQzkxMjFGQTI0ODE3RTBBQjZDMTdDMDZEMTUzRkEzMDAzRjE3ODA2RDE1N0ZBMjAwMUYKKzE3MDA2RDVEMDAwRjVFNkM2QzRBNUFBMjZDNkM0QTVBMDAwMTVFNkM2QzRBNUEwMTdFNEE1QTZENEE1QUQ5MUZDMDAxN0ZDNworRkNEOTA3RTAxM0ZDOTAzOTAxRkMwN0YwOTAzOTAwN0ZGRkMwREEwN0ZDQzhGQzMzMzc3Q0I0M0M+NzkKK0Q8OTAzODFGRTAwMzkwMzg3RkZDMDc0OEI1RkMzOTA3RjAxRkNGMzkwRjgwMDNGRjQ4QzdGQzAwM0U4MDgxNDg4MEEyMDA3OAorODAwMEY4ODBBNDZDODBBMjdFOTJDN0ZDMTI3RjEzQzBFQTNGRjAxM0ZGNkMxM0YwNkMxM0ZGNkMxNEMwNkMxNEYwQzY4MDAxCiszRjdGMDEwMzdGOTAzODAwM0ZGRjE0MDMwMjAwMTM4MDE1N0YxNTNGRUQxRkMwMTUwRjEyQzBBMjE1MDdBMzdFQTI2Q0VDMEYKKzgwQTI2QzE1MDA2QzVDNkMxNDNFNkMxNDdFMDFDMDVCMzlGMUZDMDNGODAwRTBCNTEyRTAwMTFGMTM4MDI2QzAwM0ZFQzdGQworMjIzNzdDQjQyQj44MyBEPDAwN0ZCNzEyRkVBMzkwMzk4MDA3RjAwMUQ4N0MwMEVDMDAzRTAwNzgxNjFFMDA3MDE2MEVBMjAwCis2MDE2MDYwMEUwMTYwN0EzNDgxNjAzQTZDNzE1MDBCM0FCNEE3RTAxMUZCNTEyRkNBMzMwMzM3REIyMzc+STxCNUQ4RjAwNworQjUzOTgwMEZGRkYwQTMwMDAzOTBDNzI3M0ZGMDAwMDExMzAwRDgwMUZDNkU0OEVCMDA3QzFBMzg2RDE0MEYwMDAwMTkzMDgzCis2RDAyMDcxNTcwNkQxODYwQTI2RTQ5NkMxNEUwMDEzRjYwQTI2RUQ5MTlGQzEzMDEwMTFGNjBBMjZFRDkzMEZFMTMwMzAxMEYKKzk1QzdGQ0EyNkVEOTYwN0Y1QjAxMDcxNzA2QTI2RTkwMzlDMDNGODAwRTAxMDMxNzBDQTI5MTNCRkMwMTgwMUZDMDFDMDEwMQorMTcxOEEyOTEzQkZFMDMwMDBGRTAzODAxMDAxNzMwQTJEQUZGMDZFQjA3RjAwMjdGNUVBMjAzOENFQjAzRjgwMjNGNUVBMjAzCitEOEVCMDFGQzAyMUZFREZEODBBMjAzRjBFQjAwRkYwMjBGOTNDOEZDQTI0QjgwMDIwNzE1N0VBMjRCMTQzRTAyMDMxNTNDQTIKKzRCMTQxQzAyMDExNTE4NEMzNTdGQjI0Rj44NyBEPEVCN0Y4MDM4MDNGRkYwMzgwRjgwRkMzODFDMDAzRTAwM0YxMzNGNkQ2QworN0U2RTdFQTI2RTdFRUExRjAwQzdGQ0E0RUIwMUZGMTMxRkVCRkY4NzM4MDNGQzA3RUEwRkYwRUExRkMwRUEzRjgwMTI3RjEzCiswMDQ4MTVDMDVBQTMxNDBGQTI2QzEzMUY2QzEzM0IzQTNGODA3MUYxODAzOTFGQzFFMUZGMjYwN0ZGQzAxMzAwMzkwMEZFMDAKKzNDMjIyMzdEQTEyNj45NyBEPEVBMDNGMDEyRkZBMzEyMDcxMjAzQUVFQzNGODBFQ0ZGRTA5MDM4RjNDMEY4OTAzOEY3MDA3RQorMDFGRTdGNDlFQjFGODA0OUVCMEZDMDVCRUQwN0UwMTZGMEEyMTUwMzE2RjhBQTE2RjAxNTA3MTZFMEEyRUQwRkMwN0Y2REVCCisxRjgwMDFFQ0VCM0YwMDAxQ0YxMzdDOTAzODgzODFGODkwMzgwMUZGRTBDNzZDQzdGQzI1MzU3RUIzMkI+STxFQjA3RjhFQgorM0ZGRjkwMzhGQzA3QzAzOTAxRjAwMEUwMzkwM0UwMDNGMDM4MDdDMDA3MTIwRkVBMUY4MDEyM0Y5MDM4MDAwM0UwNDg5MEM3CitGQ0EyMTI3RTEyRkVBQTEyN0ZBMjZDMTQxODdGMDAxRjE0Mzg2RDEzMzAwMDBGMTQ3MDZDNkMxM0UwMzkwM0YwMDFDMDM5MDAKK0ZDMEY4MDkwMzgzRkZFMDBFQjA3RjAxRDIzN0VBMTIyPkk8MTUzRkVDMEZGRkEzRUMwMDdGODFBRUVCMDdGMEVCM0ZGQ0VCCitGQzBGMzkwMUYwMDNCRjM5MDdFMDAxRkY0ODQ4N0U0ODQ4N0Y4MTQ4QzdGQ0EyNUExMjdFMTJGRUFBMTI3RTEyN0ZBMjdFNkMKKzZDNUJBMjZDNkM1QjZDNkM0ODEzODAzQTAzRjAwN0JGRkMzOTAwRjgxRTNGRUIzRkZDRDkwRkUwMTMwMDI2MzU3REIzMkI+CitJPEVCMEZFMEVCN0ZGQ0VCRjgzRjM5MDNGMDBGODBEODA3RTAxM0MwMzkwRkMwMDdFMDM4MUY4MDAzMTVGMEVBM0YwMDE0MDEKKzQ4MTRGODEyN0VBMjEyRkVBMkI2RkNBMjQ4QzhGQ0E1MTI3RTEyN0ZBMjZDMTQxOEEyNkM2QzEzMzgwMDBGMTQzMDZEMTM3MAorNkM2QzEzRTAzOTAxRjAwM0MwMzkwMEZDMEYwMEVCM0ZGRUVCMDdGMDFEMjM3RUExMjI+STxFQjAxRkNFQjA3RkY5MDM4MUYKKzA3ODA5MDM4M0UwRkMwRUI3QzFGMTNGQ0VBMDFGOEEyMDAwM0VCMDcwMDQ5QzdGQ0FDQjUxMkYwQTNEODAzRjBDN0ZDQjNBNworNDg3RTM4N0ZGRkUwQTMxQTM1N0ZCNDE3Pkk8MTUxRjkwMzkxRkMwN0Y4MDkwMzlGRkY4RTNDMDM5MDFGMDdGQzczOTA3RTAKKzNGMDMzQTBGQzAxRjgzODA5MDM5ODAwRjgwMDAwMDFGODBFQjAwMDc0ODgwQTY2QzVDRUI4MDBGMDAwRjVDRUJDMDFGNkM2QworNDhDN0ZDRUJGMDdDMzgwRUZGRjgzODBDMUZDMDAwMUNDOUZDQTMxMjFFQTIxMjFGMzgwRkZGRkVFQ0ZGQzA2QzE0RjA2QzE0CitGQzQ4ODAzODFGMDAwMTAwM0VFQjAwN0Y0ODgwRUQxRjgwNDgxNDBGQTU2QzE0MUYwMDdDMTUwMDZDMTQzRTZDNUMzOTBGQzAKKzAxRjgzOTAzRjAwN0UwQzZCNTEyODBEOTFGRkNDN0ZDMjIzMzdFQTEyNj5JPEVBMDNGMDEyRkZBMzEyMDcxMjAzQUVFQzFGCitDMEVDN0ZGMDkwMzhGMUUwRkM5MDM4RjM4MDdDOTAzOEY3MDA3RTEzRkU0OTdGQTI1QkEyNUJCMzQ4NkNFQjdGODBCNTM4QzcKK0ZGRkNBMzI2MzQ3RUIzMkI+STxFQTA3ODBFQTBGQzBFQTFGRTBBNEVBMEZDMEVBMDc4MEM3RkNBQUVBMDdFMDEyRkZBMzEyCiswRjEyMDdCM0E2RUEwRkYwQjVGQ0EzMTAzMzdFQjIxNT5JPEVCMDNDMEVCMDdFMEVCMEZGMEE0RUIwN0UwRUIwM0MwOTBDNworRkNBQUVCMDNGMDEzRkZBMzEzMDcxMzAzQjNCMDEyMzgxMjdDMDBGRTEzRTAxMzA3MTRDMDEzMEYwMDdDMTM4MDM4MzgxRjAwCitFQTFGRkNFQTA3RjAxNDQzODRCMjE3Pkk8RUEwN0UwMTJGRkEzMTIwRjEyMDdCM0IzQTdFQTBGRjBCNUZDQTMxMDM0N0VCMworMTU+MTA4IEQ8MjcwM0YwMUZFMDEzRkYwMEZGOTAyNjdGRjgwMzEzQzA5MDNCRjFFMDdDMEYwM0UwOTAzQkYzODAzRTFDMDEKK0YwMjgwN0Y3MDAzRjM4N0ZEODAzRkUxNDcwNDk2RDQ4NkM3RUEyNDk1Q0EyNDk1Q0IzNDg2QzQ5NkM0ODdFQjUzQkM3RkZGRQorM0ZGRkYwQTMzQzIxN0VBMDQxPkk8MzkwM0YwMUZDMDAwRkZFQjdGRjA5MDM4RjFFMEZDOTAzOEYzODA3QzM5MDdGNzAwN0UKK0VBMDNGRTQ5N0ZBMjVCQTI1QkIzNDg2Q0VCN0Y4MEI1MzhDN0ZGRkNBMzI2MjE3RUEwMkI+STxFQjA3RjBFQjNGRkU5MDM4CitGQzFGODAzOTAxRjAwN0MwMzkwM0MwMDFFMDAwMDc4MDQ4NDg2QzdFNDhDNzEyN0NBMjQ4MTQ3RTAwM0UxNDNFMDA3RTE0M0YKK0EzMDBGRTE1ODBBODAwN0UxNTAwQTM2QzE0N0VBMjZDMTQ3QzZEMTNGQzZDNkM0ODVBMDAwNzVDMzkwM0YwMDdFMDM5MDBGQworMUY4MEQ5M0ZGRUM3RkNFQjA3RjAyMTIzN0VBMTI2Pkk8MzkwM0YwM0Y4MDAwRkZFQkZGRTA5MDM4RjNDMEY4OTAzOEY3MDAKKzdFRDgwN0ZFN0Y2QzQ4RUIxRjgwNDkxNEMwNDkxMzBGMTZFMEVEMDdGMEEzRUQwM0Y4QTkxNTA3MTZGMEEyMTZFMDE1MEYxNgorQzA2RDEzMUY2REVCM0Y4MDE2MDAwMUZGMTNGQzkwMzhGMzgxRjg5MDM4RjFGRkUwRDlGMDdGQzdGQzkxQzhGQ0FBNDg3RUI1CisxMkMwQTMyNTMwN0VBMDJCPkk8MzgwM0UwN0MzOEZGRTFGRjkwMzhFMzhGODA5MDM4RTcxRkMwRUEwN0VFRUEwM0VDQTI5MAorMzhGQzBGODA0OUM3RkNBMzVCQjI0ODdFQjUxMkUwQTMxQTIxN0ZBMDFFPjExNCBEPEVCRkYwNjAwMDcxM0NFMzgxRjAwRkUKKzAwM0MxMzNFNDgxMzFFMTQwRTVBMTQwNkEyN0VBMjAwRkU5MEM3RkM2QzdFRUE3RkZDMzgzRkZGQzAxNEYwMDAwRjdGNkM3RgorQzY3RkVCMEZGRjEzMDBFQzNGODAwMEMwMTMxRjE0MEY2QzEzMDdBMzdFMTUwMDZDNUI2QzEzMEU2QzVCMzhGNzgwNzgzOEUxCitGRkUwMzhDMDdGODAxOTIzN0VBMTFFPkk8MTMzMEE1MTM3MEEzMTNGMEEyMTIwMUEyMTIwMzEyMDczODFGRkZGRUI1RkNBMgorMzgwM0YwMDBBRjE0MDNBODE0MDczODAxRjgwNkEyMzgwMEZDMEVFQjdFMUNFQjFGRjhFQjA3RTAxODJGN0ZBRDFFPkk8RDgKKzAzRjAxMzNGMDBGRkVCMEZGRkEzMDAwN0VCMDA3RjAwMDM4MEIzNURBMzVEMTIwMTZENDgxMzgwMDAwMDkwMzgwM0JGRkM5MAorMzg3RTA3M0ZFQjFGRkVEOTA3RjgxMzAwMjYyMjdFQTAyQj5JPEI1M0ExRkZGODFGRkYwQTMzQzA3RjgwMUZDMDAzRjgwMDEKK0YwNDlFQjFFMDAwMDAzMDEwMDE0MUM4MTZDNkMwMTdDMTMxOEEyNkQwMTdFMTMzODAwMDAwMkZFMTMzMEEyOTAyNjdFMDFGRgorNUIxNTlGMTY4MDkwMjYzRjAzMEY1QkEyMTZDMDkwM0ExRjg2MDdDMTgwQTIwMkM2MTNFMzkwMjYwRkNDMDM5MEM3RkNBMkQ5CiswN0ZDMTNGNkVDRjgwMTE2RkU2RDQ4NkM1QUEzNkQ0ODEzNzhBMzZENDgxMzMwMzQyMTdGOUYzNz4xMTkKK0Q8M0E3RkZGODA3RkY4QTMzQTA3RjgwMDFGQzAwMDAzRUMwRjgwMDAwMUVDMDcwMDE1MDY2QzZDNUJBMjZEMTMxQzAxN0UxMworMThBMjZENUJBMkVDODA3MDAxMUYxMzYwRUNDMEUwMDEwRjVCQTI5MDM4MDdFMTgwQTIxNEYzMDEwMzkwQzdGQzE0RkJFQjAxCitGRUEyNkQ1QUEzMTQ3OEEyMTQzMEEyNUNBMjE0RTA1Q0EyNDk1QTEyNzhEOEZDMDNDOEZDQTIxMzA2MTMwRUVBNzAxQ0VBNzgKKzM4RUExRkYwRUEwRkMwMjUzMDdGOUYyOT4xMjEgRCBFCislRW5kRFZJUFNCaXRtYXBGb250CislRFZJUFNCaXRtYXBGb250OiBGcCBlY2J4MDkwMCA5IDcKKy9GcCA3IDExNyBkZjxFRDFGODBBMjRCN0VBMjRCN0VBMzRCN0VBMjRBN0ZBMzRBN0ZBMjRBN0YxNUNGQTIwMjBGN0YxNTg3CiswMjFGODAxNTAzMDIzRjgwRUMzRTAxQTIwMjdFODBFQzdDMDAwMkZDODA0QTEzN0ZBMjAxMDE4MTRBMTMzRjAxMDM4MTRBMTMKKzFGQTI0OUI2N0VBMjQ5ODFBMjkwMjcxRjgwMDAwNzdGOTFDNzdFQTI0OTgyMDEzRTgwMDE3RTgyMDE3QzgwQTIwMUZDODI0OQorMTU3RkI1MDBGMDAxM0ZCNTEyRjBBNDNDMzQ3REIzNDM+NjUgRDxFQjdGRkUwMDAzQjUxMkUwNDgxNEY4MzkwRkYwMEZGQzM5CisxRkY4MDNGRjgwNkUxMzgwMTZDMDE1N0Y2QzVBNkM1QUVBMDE4MEM4RkNFQzdGRkYwMTBGQjVGQzkwQjZGQzAwMDNFQkYwN0YKKzAwMEYxMzAwRUExRkY4NDg1QTQ4NUE0ODVBNUJBMzE1RkY3RjAwN0Y1QjZENDgxM0UwM0EzRkY4MEZCRkZGMDAwRkI1MTIxRgorMDAwM0VCRkMwRjM5MDA3RkUwMDcyODIxN0VBMDJCPjk3IEQ8RUEwMUZDMTJGRkE0MTIwRjEyMDdBREVDMEZGOEVDN0ZGRjAxCitGREI1MTJDMDkwMzlGRkYwMUZGMDkxMzg4MDBGRjg0QTZDN0U0OTZEN0U0OTZEN0VBMjE3ODA4MUEyMTdDMEE5MTc4MEEyNUQKKzE3MDBBMjZENDk1QTZENDk1QTZFNDg1QTkwMzlGN0UwM0ZGMDAxRTFCNTEyQzBEOUMwN0Y5MEM3RkM5MDM4ODAxRkYwMkEzNAorN0RCMzMxPkk8OTAzODA3RkY4MDAxM0YxM0YwOTBCNTEyRkMzOTAzRkUwMUZFNDg0ODQ4N0VFQTBGRjhFQTFGRjBFQTNGRTAKK0EyMDA3RjZENUE0OTZDNUExNTMwMDBGRjkxQzdGQ0E5MTI3RjdGQTIwMDNGRUMwNzgwN0Y2QzZDMTMwRjAwMEZFQzFGMDBEOAorMDdGRTEzM0UzOTAzRkY4MEZDQzZFQkZGRjgwMTNGMTNFMDAxMDc5MEM3RkMyMTIxN0RBMDI3Pkk8MzkwMUY4MUY4MDAwRkYKK0VCN0ZGMEVDRkZGODkwMzhGOUUzRkM5MDM4RkJDN0ZFMzgwRkZGODc2QzEzMDdBMjEzRkVFQzAzRkNFQzAxRjhFQzAwNjA0OQorMTMwMEIxQjUxMkYwQTQxRjIxN0VBMDI0PjExNCBEPDkwMzhGRkUxQzAwMDA3MTNGRjVBMzgzRjgwM0YzODdFMDAwRjE0MDcKKzVBMTQwMzdFQTI2QzZDQzdGQzEzRkNFQkZGRTA2QzEzRkM4MDZDRUJGRjgwMDAwRjE0QzA2QzE0RTBDNkZDMDEwRjEzRjBFQgorMDA3RjE0MEYwMEYwMTMwNzE0MDM3RUEyNkMxNEUwNkMxMzA3NkNFQjBGQzA5MDM4QzAxRjgwOTBCNTEyMDAwMEY5MTNGQzM4CitFMDNGRTAxQzIxN0RBMDIzPkk8MTMzQ0E1MTM3Q0EzMTNGQ0EyMTIwMUEyMTIwMzEyMDcwMDFGQjUxMjgwQjZGQ0EzRDgwNworRkNDN0ZDQjBFQzAzQzBBNzkwMzhGRTA3ODAxMjAzMzkwMUZGMEYwMDZDMTNGRUVCM0ZGQ0VCMEZGMDFBMkY3RUFFMjI+SQorRQorJUVuZERWSVBTQml0bWFwRm9udAorJURWSVBTQml0bWFwRm9udDogRnEgZWNzczA5MDAgOSAyNgorL0ZxIDI2IDEyMiBkZjwxMkZFQTcwNzA3Nzk4NjE1PjQ2IEQ8MTU3MDE1RjhBMjE0MDExNUYwQTIxNDAzMTVFMEEyMTQwNzE1CitDMEEyMTQwRjE1ODBBMjE0MUYxNTAwQTI1QzE0M0VBMjE0N0UxNDdDQTIxNEZDNUNBMjEzMDE1Q0EyMTMwMzVDQTIxMzA3NUMKK0EyMTMwRjVDMTMxRjkxQzdGQ0EyNUIxMzNFQTIxMzdFMTM3Q0EyMTNGQzVCQTIxMjAxNUJBMjEyMDM1QkEyMTIwNzVCQTIxMgorMEY1QkEyMTIxRjkwQzhGQ0EyNUExMjNFQTIxMjdFMTI3Q0EyMTJGQzVBQTIxMjcwMUQ0QjdDQjcyNj5JPDEzMDM1QjEzMUYKKzEzN0ZFQTA3RkZCNUZDQTMxM0JGRUFGODNGMTIwMEIzQjIwMDdGQjUxMjgwQTUxOTMzN0FCMjI2PjQ5CitEPEVCM0ZFMEVCRkZGODAwMDMxM0ZFNDg3RjQ4MTQ4MDM5MUZDMDdGQzA5MDM4ODAxRkUwMzkzRjAwMEZGMDAwM0UxMzA3NDgKK0VCMDNGOEEyNDgxMzAxMTVGQzEyNzgxMjMwMTQwMDEyMTBDOEZDMTQwMUEyMTVGOEEyMTQwMzE1RjAxNDA3MTVFMEVDMEZDMAorMTQxRjE1ODBFQzNGMDAxNDdFNUM0OTVBNDk1QTQ5NUFFQjBGODA0OUM3RkMxMzNFNUI1QjQ4NUE0ODVBNDg1QTQ4NUE0OEM4CitGQzEyM0UwMDdGQjUxMkZDQTUxRTMzN0RCMjI2Pkk8MTJGRUE3MTIwMEIzMTJGRUE3MDcyMTc5QTAxNT41OAorRDxFQzA3RjhFQzdGRkY0OUI1MTJDMDAxMDc4MDQ5ODA5MDM5MUZGODBGRjg5MDM5N0ZDMDAzRkM5MDM4RkY4MDAwNDg0OEM3Cis3RTQ5MTQ3RTQ4NDhFQjdFN0YzQTA3RjAwMUZGQkYyNjBGRTAwNzEzRkY0OTQ4MTQ4MDAwMUY1QjkwMzg4MDNGQzMwMDNGNDkKK0M2RkNEOTAwN0UxMzdGNEFFQjNGQzAxMjdFNDk0ODEzMUZBMjEyRkU0ODQ4NDgxMzBGQUE2QzZDNkNFQjFGODAxMjdFQTI2RAorNkNFQjNGMDA3RTAyN0UxMzdFRDk4MDdGMTNGRTAwMUY5MDM4M0ZDM0ZDNkQ2Q0I0NUEwMDBGNkQ1QjZENkM1QjI2MDdGMDAxCisxMzgwMjcwM0Y4MDA3RUM3RkM2QzZDOTBDOEZDN0Y2QzZDNkNFQjBGQzA2RDZDRUIzRjgwOTAzQTFGRjgwM0ZGMDA2REI1NUEKKzZEMTRGODAxMDE1QzZENkMxMzgwREEwN0ZDQzdGQzJBMzg3Q0I2MzM+NjQgRDxFQjNGQzAzODAzRkZGMDAwMEYxM0ZDNDg3RgorODA5MDM4QzA3RjgwMzgxRTAwMUYwMDE4MTRDMDAwMTAxMzBGQzcxM0UwMTQwN0E2RUIwM0ZGMTMzRjQ4QjVGQzEyMDcwMDFGCisxM0M3MzgzRkYwMDdFQTdGODBFQTdFMDA1QUEzMTQwRjdFMDA3RjEzM0ZFQkMwRkY5MEI1RkM3RTZDMTNFNzZDMTM4N0Q4MDMKK0ZDQzdGQzFCMjQ3REEyMjU+OTcgRDxFQjBGRjhFQjNGRkY5MEI1MTJFMDQ4MTRGMDVBMzgwN0Y4MDczOTBGRTAwMUUwMzkxRgorQzAwMDYwNDkxMzAwNDhDOEZDQTIxMjdFQTM1QUE5MTI3RUEzNkMxNDEwNkQxMzMwMDAxRjE0RjAzODBGRTAwMUVCRjgwRjZDCitCNUZDNkMxNEUwQzYxNDgwOTAzODdGRkUwMEVCMEZGMDFDMjQ3REEyMjI+OTkgRDwxNUZDQjNBMkVCM0Y4MEVCRkZGMDAwMDMKKzEzRkM0ODEzRkU0ODEzRkZFQkY4MUYzODFGRTAwNzM4M0ZDMDAxMTM4MDQ4QzdGQzEyN0VBMzVBQTkxMjdFQTMwMDdGMTMwMQorRUEzRjgwMTQwMzM4MUZFMDA3MzgwRkY4MUY5MEI1RkM2QzEzRkM2QzEzRjhDNjEzRTA5MDM4M0Y4MDAwMUUzNzdEQjUyOD4KK0k8RUIxRkMwRUI3RkY4NDg0ODdFNDg3RjQ4N0YzOTBGRjA3RjgwMzgxRkMwMUY5MDM4ODAwN0MwRUEzRjAwRUMwM0UwMDA3RQorMTMwMUEyMTI3QzAwRkNFQjAwRjBCNkZDQTUwMEY4QzhGQ0EyN0VBMjEyN0MxMjdFQTI3RTZEMTMxMDZDNkMxMzcwMzkwRkUwCiswMUYwRUJGODBGNkNCNUZDNkMxNEUwQzYxNDgwOTAzODdGRkUwMEVCMEZGMDFDMjQ3REEyMjI+STxFQjAxRkNFQjA3RkYxMworMUY1QjVCRUJGRTA3RUJGQzAxMzgwMUY4MDA1QkEyMTIwM0FDQjUxMkYwQTUzODAzRjAwMEIzQUExODM3N0ZCNjE3Pkk8OTAKKzM5MUZDMDBGODA5MDM4N0ZGMEZGOTBCNjEyQzA1QTVBMjYwN0YwN0ZDN0ZDMzkwRkMwMUY4MEVCODAwRkEyNDg0ODZDN0VBNworNkM2QzQ4NUFBMkVCQzAxRjI2MDdGMDdGQzdGQ0VCRkZGRTQ4NUI1QzQ4NkM1QUVCMUZDMDkwQzlGQ0EzN0YzODBGRkZGRUVDCitGRkUwNkM4MDQ4MTRGQzQ4ODA1QTM5N0Y4MDAzRkYwMDdFQzc3RTAwRkVFQzNGODA0ODE0MUZBNDZDMTQzRjAwN0ZFQzdGMDAKKzZENUIzOTNGRjAwN0ZFNkNCNTVBNkM1QzAwMDMxNEUwQzYxNDgwRDkxRkZDQzdGQzIyMzM3RUExMjY+STwxMkZDQjNBMkVCCiswN0YwRUIzRkZFNDk3RTkwQjUxMjgwQjZGQzkwMzhFMDdGQzBFQjgwMUY5MDM4MDAwRkUwQTI0ODEzMDdBMzVBQjNBNDFCMzYKKzdBQjUyOD5JPDEyRkVBNzEyMDBBQzEyN0VCM0FGMDczNDdCQjMxMz5JPDEyRkNCM0EzRUMwRkYwRUMxRkUwRUMzRkMwRUM3RgorODBFQ0ZGMDA0OTVBNDk1QTQ5NUE0OTVBNDk1QTQ5NUE0OTVBNDlDN0ZDMTJGREI1N0VBMjgwRUJFN0UwMTNDN0VCODNGMEVCCiswMUY4MDBGRTdGRUFGQzAwMTQ3RTgwMTU4MDE0MUZFQzBGQzBFQzA3RTBBMkVDMDNGMEVDMDFGODE1RkMxRTM2N0FCNTI2PgorMTA3IEQ8MTJGQ0IzQjNCMjA2MzY3QUI1MTM+STxEOTA3RjBFQjNGODAzQkZDM0ZGRTAxRkZGMDQ5NkM0ODEzRjg5MEI1MDAKKzg3MTNGQ0I2MTI5RjkwM0FFMDdGREYwM0ZFOTAzOTgwMUZGQzAwNDk2QzQ4MTM3RkEyNDg2RDQ4MTMzRkEzNDg1Q0IzQTQzMAorMjI3QUExM0Q+STxFQjA3RjAzOEZDM0ZGRTQ5N0U5MEI1MTI4MEI2RkM5MDM4RTA3RkMwRUI4MDFGOTAzODAwMEZFMEEyNDgKKzEzMDdBMzVBQjNBNDFCMjI3QUExMjg+STxFQjA3RjBFQjNGRkU5MEI1N0U0ODgwNDg4MDM5MDdGODBGRjAzOTBGRTAwM0Y4Cis0ODQ4NkM3RUVCODAwMDQ4QzcxMjdFQTIwMDdFODBBMjAwN0M4MDAwRkMxNTgwQTg2QzE0M0YwMDdFMTUwMEEyMDA3RjVDNkMKKzE0N0U2RDEzRkU2QzZDNDg1QTZDNkM0ODVBRUJGODBGNkNCNTVBMDAwMTE0QzA2QzVDRDkzRkZFQzdGQ0VCMDdGMDIxMjQ3RQorQTIyNj5JPEVCMDNGODM4RkMxRkZFRUI3RkZGMDBGREI1MTI4MEI2MTJDMDkwMzhFMDdGRTBFQjgwMUY5MDM4MDAwRkYwNDgKKzEzMDc0OEVCMDNGOEEyMTQwMTE1RkMxNDAwQTgxNDAxMTVGOEEyMTQwMzE1RjA2QzEzMDc2Q0VCMEZFMEVCODAxRjkwMzhFMAorN0ZDMDkwQjUxMjgwMDBGRDE0MDAwMEZDNUJFQjNGRkNFQjA3RTA5MEM4RkNBRTFFMzE3QUExMjg+STxFQjAzQzBFQUY4MUYKKzEzM0YxM0ZGMTJGOTEyRkJFQkZDMDBFQUZGRjAxM0MwNUI5MEM3RkNBMjVBQTM1QUIzMTIyMjdBQTExQT4xMTQKK0Q8RUJGRjgwMDAwNzEzRjA0ODEzRkM0ODdGNUFFQTdGMDAwMDdFMTMxQzQ4MTMwQzkxQzdGQ0E0N0VFQTdGODAxM0Y4NkNCNAorN0U2QzEzRTA2QzEzRjgwMDAzN0ZDNjdGRUIwRkZGMTMwMEVDM0Y4MEEyMTQxRkEzMTI0MDAwNjAxMzNGMDA3ODE0MDBCNDEzCitGRkVCRkZGRTVDNkM1QjAwMEY1QjAwMDExMzgwMTkyNDdFQTIxRD5JPEVBMDNGMEFBQjUxMkZFQTUzODAzRjAwMEIzQTM3RgorMTQwMjM4MDFGQzFFOTBCNUZDQTI3RUVCN0ZGQ0VCM0ZDMDE4MkM3RkFBMUM+STwwMEZDRUIwN0UwQjNBNzE0MEYxNDFGNkMKKzEzM0Y2QzEzRkY2Q0I1RkMxNEY3NkMxM0U3NkMxMzA3RDgwN0Y4QzdGQzFCMjI3QUEwMjg+STwwMEZDRDkwN0YwRUIxRjgwCis3RTAwN0UwMTBGRUMzRjAwODExNTc4NkMwMTFGMTQzRTE3N0VFQzFFN0MyNjFGODAzRTE0N0MwMzNDMTNGQzE1M0UwMDBGMDEKKzNDNUNEOUMwN0MxMzAxMTUxRTE1MUYyNjA3RTA3ODVDMDJGODEzMDNFRDBGODMwMDAzNUVFQkYwRjAwMUYxMTQ4NzAwMDE5MQorMzgwN0M3QzAxNEUwQTIwMUZCRUIwM0NGMDAwMDVFMDJDMDEzRUYxNTAxMDE3QjkyQzdGQ0Q5N0Y4MDEzRkZBMjAxM0Y2RDVBCis5MUM3RkMzMTIxN0ZBMDM0PjExOSBEPDAwRkUxNDNGMDA3RTE0N0VBMjdFMTVGQzdGMDAxRkVCMDFGODEzQzAxMjBGRUMwMworRjBFQTA3RTAxNUUwRUJGMDA3MTIwMzE1QzAzODAxRjgwRjE1ODAxMjAwRUJGQzFGMTUwMDEzN0NFQjdFM0UxMzNFQTJFQjFGCiszQzE0N0NFQjBGNzhBMzZENUFBMjZENUFBMzVDMTMwNzVDQTIxMzBGOTFDN0ZDNUIxMzFFRUEyMDNFRUEzODdDRUEzRkZDNUIKK0EyNUJFQTBGQzAyMDMxN0ZBMDIzPjEyMSBEIEUKKyVFbmREVklQU0JpdG1hcEZvbnQKKyVEVklQU0JpdG1hcEZvbnQ6IEZyIGVjcm0xMDAwIDEwIDgzCisvRnIgODMgMTg0IGRmPDQ4NkMxMzYwMDAwMzE0RTAzOTA3MDAwMUMwMDAwRUVCMDM4MDQ4RUIwNzAwMDAxODEzMDYwMDM4MTMKKzBFMDAzMDEzMEMwMDcwMTMxQzAwNjAxMzE4QTIwMEUwMTMzODQ4MTMzMEE0MDBDRUVCMzM4MDM5RkY4MDNGRTAwMUMwMTNGMAorQTMwMDdGMTMxRkEyMzkzRjgwMEZFMDM5MEUwMDAzODAxQzE5ODFCOTFDPjE2IEQ8MDAxQzEzMDcwMDdGRUIxRkMwMzlGRjgwCiszRkUwQTIwMUMwMTNGMEEzMDA3RjEzMUYwMDFDRUIwNzMwMDAwMDEzMDBBNDAwMDExNDcwNDkxMzYwQTIwMDAzMTRFMDkwQzcKKzEyQzA0ODEzMDEwMDA2MTQ4MDAwMEUxMzAzNDhFQjA3MDA0ODEzMEU0ODVCMDA2MDEzMTgxQzE5ODBCOTFDPkk8QkQxMkMwCitBMjUyMDI4MDk2NTM+MjIgRDxEQTBGRjgxM0ZDOTEzOTdGRkYwN0ZGOTAzQjAxRjgwN0RGODNDMDkwM0EwN0UwMDFGRjBGOTAKKzNCMUY4MDA3RkUxRkUwOTAzOTNGMDAwRkZDMTM3RTE2Rjg1QjkzMzhGMDA3ODA0ODQ4MDEwNzkwQzdGQzE1MDNBQ0I4MTJGOAorQTMyODAxRjgwMDAzRjBDN0ZDQjNBQjQ4NkM0OTdFMjY3RkZGRTBCNTEyRjBBMzMzM0I3RkJBMzA+MjcKK0Q8RUMwRkY4RUM3RkZFOTAzOTAxRjgwNzgwOTAzOTA3RTAwMUMwOTAzOTFGODAwMEUwOTAzODNGMDAwNzAxN0U0OTdFQTI1QgorQTI0ODVBNkY1QUVEMDE4MDkyQzhGQ0E5RUQwM0YwQjdGQ0EzMzkwMUY4MDAwRjE1MDNCM0FBNDg2QzQ5N0UyNjdGRkZFMEI1CisxMkMwQTMyQTNCN0ZCQTJFPkk8RUMwRkZDOTEzODdGRkY3MDkwMzkwMUY4MDNGMDkwMzgwN0UwMDc5MDM4MUY4MDBGRUIzRgorMDAxMzdFQTI1QjE1MDc0ODQ4MTMwM0FEQjdGQ0EzMzkwMUY4MDAwM0IzQUI0ODZDNDk3RTI2N0ZGRkUwQjUxMkMwQTMyQTNCCis3RkJBMkU+STxEQTBGRjBFQjFGRjBEQTdGRkVFQkZGRkM5MDNCMDFGODBGODNGMDBGOTAzQzA3RTAwMUNGQzAwMzgwOTAzQworMUY4MDAwRkYwMDAxQzA5MDI3M0YwMDA3RkUxMzBGMDE3RTQ5NDg0OTdFQTI0OTVDQTI0ODQ4NUMwMzA3NkU1QTAzMDMwMjAzCitDN0ZDOTVDOEZDQTlGMDA3RTBCQUZDQTMzQzAxRjgwMDAzRjAwMDFGMTgwN0IzQUE0ODZDNDk2QzQ5N0UyNjdGRkZFMEI1MDAKK0MxQjUxMjgwQTM0MTNCN0ZCQTQ1Pkk8MTIxQzEyN0ZFQUZGODBBOEVBN0YwMEFCMTIzRUFCMTIxQ0FCQzdGQ0E4MTIxQzEyCis3RkVBRkY4MEE1RUE3RjAwMTIxQzA5M0M3OUJCMTc+MzMgRDwwMDdDMTM3QzAwRkUxM0ZFRUFGRjAxQTNFQUZFMDBBNzAwN0UKKzEzRkMwMDdDMTM3Q0E4MDAzQzEzNzgwMDM4MTMzOEE3MDAxODEzMzAxNzFFNzdCQTJBPkk8MTIxQzEyN0ZFQUZGODBBMjEzCitDMEEzMTI3RjEyMUMxMjAwQTQxMjAxMTM4MEEyMTIwMzEzMDA1QTEyMDYxMjBFNUE1QTVBMTI2MDBBMTk3OUI5MTc+MzkKK0Q8MTQ2MDE0RTBFQjAxQzBFQjAzODBFQjA3MDAxMzBFMTMxRTVCNUJBMjVCNDg1QUEyNDg1QUEyMTIwNzVCMTIwRjkwQzdGQworQTI1QTEyMUVBMjEyM0VBMzVBQTY1QUIyMTI3Q0E2N0VBMzEyMUVBMjEyMUY3RUEyN0YxMjA3N0YxMjAzQTI2QzdFQTI2QzdFCisxMzc4QTI3RjdGMTMwRTdGRUIwMzgwRUIwMUMwRUIwMEUwMTQ2MDEzNTI3OEJEMjA+STwxMkMwN0UxMjcwN0U3RTdFMTIwRgorNkM3RTZDN0VBMjZDN0U2QzdFQTIxMzc4QTIxMzdDMTMzQzEzM0UxMzFFQTIxMzFGN0ZBMjE0ODBBM0VCMDdDMEE2RUIwM0UwCitCMkVCMDdDMEE2RUIwRjgwQTMxNDAwQTI1QjEzMUVBMjEzM0UxMzNDMTM3QzEzNzhBMjVCQTI0ODVBNDg1QUEyNDg1QTQ4QzcKK0ZDMTIwRTVBNUE1QTVBNUExMzUyN0NCRDIwPkk8MTIxQzEyN0ZFQUZGODBBMjEzQzBBMzEyN0YxMjFDMTIwMEE0MTIwMTEzCis4MEEyMTIwMzEzMDA1QTEyMDYxMjBFNUE1QTVBMTI2MDBBMTk3OTg4MTc+NDQgRDxCNTEyRkNBNTE2MDU3Rjk0MUM+STwxMgorMUMxMjdGRUFGRjgwQTVFQTdGMDAxMjFDMDkwOTc5ODgxNz5JPDE1MDZBMjE1MEUxNTBDQTIxNTFDMTUxODE1MzgxNTMwQTIKKzE1NzAxNTYwQTIxNUUwMTVDMEEyMTQwMTE1ODBBMjE0MDMxNTAwNUMxNDA2QTIxNDBFMTQwQ0EyMTQxQzE0MThBMjE0MzgxNAorMzBBMjE0NzAxNDYwMTRFMDVDQTIxMzAxNUNBMjEzMDM5MUM3RkNBMjVCMTMwNkEyMTMwRTEzMEMxMzFDMTMxOEEyMTMzODEzCiszMEEyMTM3MDEzNjBBMjEzRTA1QkEyMTIwMTVCMTIwMzkwQzhGQ0EyNUExMjA2QTIxMjBFMTIwQ0EyMTIxQzEyMThBMjEyMzgKKzEyMzAxMjcwMTI2MEEyMTJFMDVBQTIxRjUzN0JCRDJBPkk8RUIwM0Y4RUIxRkZGOTAzODdFMEZDMDkwMzhGODAzRTAzOTAxCitFMDAwRjA0ODQ4MTM3ODAwMDcxNDdDNDg0ODdGQTI0OEM3N0VBMjQ4MTU4MEEzMDA3RUVDMEZDMEE1MDBGRTE1RTBCMzAwN0UKKzE1QzBBNDAwN0YxNDFGNkMxNTgwQTM2QzE1MDBBMjZDNkMxMzNFQTI2QzZDNUI2QzZDNUJFQkYwMDEzOTAwRjgwM0UwOTAzOAorN0UwRkMwRDkxRkZGQzdGQ0VCMDNGODIzMzk3REI2MkE+STxFQjAxQzAxMzAzMTMwNzEzMUYxM0ZGQjVGQ0EyMTMxRjEyMDAKK0IzQjNBNzQ5N0UwMDdGQjUxMkYwQTMxQzM3NzlCNjJBPkk8RUIwRkYwRUI3RkZFNDhCNTdFMzkwM0UwM0ZFMDM5MEYwMDBGCitGMDAwMUU2RDdFMDAxQzZEN0U0ODZEN0U1QTZFN0UxMjYwMTJGRTZDRUM3RjgwN0ZBNTZDQzdGQzEyMUNDOEZDRURGRjAwQTIKKzVEMTQwMTVEMTQwMzVENEE1QTRBNUE1RDRBNUE0QUM3RkMxNDdFNUM0OTVBMTRFMDQ5NUE0OTVBNDlDOEZDMDExRUVCMDE4MAorNUI1QjQ5MTMwMzQ4NDgxNDAwNDg1QTQ4NUE5MEM3NUE0OEI2RkM1QTVBNDg1Q0I2RkNBMzIxMzc3Q0I2MkE+STxFQjA3RjgKK0VCM0ZGRjkwQjUxMkMwMzkwMUY4MEZGMDM5MDNDMDA3Rjg0ODQ4NkM3RTM5MEUwMDAxRkVFQTBGODAzOTFGRTAwMEZGN0ZBNQorNkM1QTZDNUFDNzQ4NUFBMjVEMTQwMzVENEE1QTVERUMwRjgwMDI3RkM3RkNFQjFGRkNFQ0ZGODA5MDM4MDAwRkUwNkU3RUVDCiswMUZDODE2RTdFRUQ3RjgwQTIxNkMwQTIxNTNGMTZFMEEyMTIxRUVBN0Y4MEEyNDg3RUEzMTZDMDE1N0Y0OTE0ODAwMDdFQzcKK0ZDMDA3MEVDRkYwMDZDNDk1QTEyMUUzOTBGODAwM0Y4MzkwN0YwMEZGMDAwMDFCNTEyQzA2QzZDOTBDN0ZDRUIwRkY4MjMzOQorN0RCNjJBPkk8MTUzOEEyMTU3ODE1RjhBMjE0MDExNDAzMTQwN0EyMTQwRjE0MUYxNDFCMTQzMzE0NzMxNDYzMTRDMzEzMDEKKzE0ODNFQjAzMDMxMzA3MTMwNjEzMEMxMzFDMTMxODEzMzAxMzcwMTM2MDEzQzAxMjAxRUEwMzgwMTMwMDVBMTIwRTEyMEM1QQorMTIzODEyMzA1QTEyRTBCNzEyRjhBM0M3MzgwM0Y4MDBBQTRBN0UwMTAzQjUxMkY4QTMyNTM4N0VCNzJBPkk8MDAwNjE0MEMKK0Q4MDc4MDEzM0M5MDM4RjAwM0Y4OTBCNUZDNUQ1RDE1ODA5MkM3RkMxNEZDMzgwNjdGRTA5MEM5RkNBQUVCMDdGOEVCMUZGRQorOTAzODc4MEY4MDkwMzhFMDA3RTAzOTA3QzAwM0YwNDk2QzdFMTMwMDAwMDY2RDdFODFDOEZDODE4MUEyMTY4MEE0MTIxQzEyCis3RjVBN0ZBMzkwQzcxMzAwNUQxMkZDMDA2MDVDMTI3MDRBNUE2QzVDNkMxMzAzMDAxRTQ5NUE2QzZDNDg1QTM5MDdFMDNGODAKKzAwMDFCNUM3RkMzODAwN0ZGQ0VCMUZFMDIxMzk3Q0I2MkE+STxFQzNGQzA5MDM4MDFGRkYwMDEwNzEzRkM5MDM4MEZFMDNFCis5MDM4M0Y4MDA3OTAzODdFMDAxRjQ5RUIzRjgwNDg0ODEzN0Y0ODVBMTIwNzVCMDAwRkVDM0YwMDQ5MTMxRTAwMUY5MUM3RkMKKzVCMTIzRkEzMTI3RjkwQzlGQ0VCMDFGQzkwMzgwN0ZGODAzOUZGMUUwN0UwOTAzODM4MDFGMDQ5NkM3RTAxNjA3RjAxRTAxMworN0U0OTdGMTY4MDVCRUQxRkMwQTM5MEM3MTNFMEE1N0VBNDdGMTIzRjE2QzBBMjAwMUZFQzNGODA3RjAwMEYxNTAwNkQ1QjAwCiswNzE0RkU2QzZDNUI2QzZDNDg1QTM5MDBGRTA3RjA5MDM4N0ZGRkMwMDExRjkwQzdGQ0VCMDNGQzIzMzk3REI2MkE+STwxMgorMzAxMjM4MTIzRTAwM0ZCNjEyRTBBMzE2QzA1QTE2ODAxNjAwMDA3MEM3MTIwNjAwNjAxNDBFNUQ1RDAwRTAxNDMwNDgxNDcwCis1RDVEQzcxMjAxNEE1QTRBQzdGQzE0MDYxNDBFNUNBMjVDMTQ3ODE0NzAxNEYwNUMxMzAxQTIxMzAzNUMxMzA3QTIxMzBGQTMKKzEzMUY1Q0EyMTMzRkE1MTM3RkE5NkRDOEZDMTMxRTIzM0E3QkI3MkE+STxFQjAzRjhFQjFGRkYwMTdGMTNDMDkwMzhGQzA3CitGMDM5MDFFMDAxRjgzOTAzQzAwMDdDNDg0ODEzM0M5MEM3MTIzRTQ4MTQxRTAwMEUxNDFGMDAxRTgwQTMxMjFGQTI2RDVCNkQKKzEzMUU3RkQ4MEZGODVCNkQxMzdDMDFGRjEzNzg2QzZENUE2Q0VCRTNFMEVDRjc4MEM2MDFGRkM3RkM2RDVBNkQ2QzdFMDEwRgorMTNFMDAxM0Y3RjAxRjk3RjM5MDFFMDdGRkU0ODQ4NkM3RTM4MEY4MDBGNDg0ODZDMTM4MDAwMUUwMTAxMTNDMDQ4N0YwMDdDCisxNDNGMDA3OEVDMUZFMDE1MEYwMEY4MTQwNzQ4MTQwM0EyMTUwMUEzNkMxNUMwQTIwMDc4MTQwMzAwN0MxNTgwNkMxNDA3NkMKK0VDMEYwMDZDNkMxMzFFRDgwN0UwMTM3QzM5MDNGODAzRjBDNkI1NUEwMTNGMTM4MEQ5MDdGQ0M3RkMyMzM5N0RCNjJBPkk8CitFQjAzRjhFQjFGRkYwMTdGMTNDMDM5MDFGQzA3RTA0ODQ4NkM3RTM5MDdFMDAxRjgwMDBGNkQ3RTQ4NDgxMzdFNUIwMDNGODAKK0EyNDhDNzEzODBBMjVBRUQxRkMwQTUxNkUwQTU2QzE0M0ZBMzZDN0UxNTdGMTIxRjZDNkMxM0ZGNkM2QzEzREYwMDAzMTMwMQorMzkwMUYwMDM5RjM5MDBGQzBGMUZEOTNGRkMxM0MwRUIwN0YwOTBDN0ZDQTIxNTNGMTY4MEEyMTYwMDVEMTIwRjQ4NkMxMzdFCis0ODZDNUJBMjRBNUE0QTVBNDk0ODVBMzgxRjAwMEYwMDFDRUIxRjgwMjYwRjgwN0ZDN0ZDMzgwN0ZGRkUwMDAxMTNGODM4MDAKKzNGQzAyMzM5N0RCNjJBPkk8MTIxQzEyN0ZFQUZGODBBNUVBN0YwMDEyMUNDN0ZDQjIxMjFDMTI3RkVBRkY4MEE1RUE3RjAwCisxMjFDMDkyNDc5QTMxNz5JPDEyMUMxMjdGRUFGRjgwQTVFQTdGMDAxMjFDQzdGQ0IyMTIxQzEyN0ZFQUZGODBBMjEzQzBBMworMTI3RjEyMUMxMjAwQTQxMjAxMTM4MEEyMTIwMzEzMDA1QTEyMDYxMjBFNUE1QTVBMTI2MDBBMzQ3OUEzMTc+STxFQjNGRTAKKzM4MDFGRkZFMzkwN0MwM0Y4MDM5MEUwMDBGQzAwMDNDRUIwN0YwMDAzMDEzMDMwMDcwMTRGODAwN0MxMzAxMDBGRTE0RkM3RQorQTQxMjdFMDAzQ0VCMDNGOEM3RkNFQzA3RjBBMkVDMEZFMEVDMUY4MEVDM0YwMDE0N0UxNDdDNUM0OTVBNUM0OTVBNUNBMjQ5CitDN0ZDQTMxMzA2QUE5MEM4RkNBODEzMEVFQjNGODA0OTdFQTU2RDVBMDEwRUM3RkMxRTNCN0NCQTI3PjYzCitEPEVDMDNGRjAyMUYxM0UwOTEzOEZDMDBGQ0Q5MDFFMDEzMUVEOTA3ODBFQjA3ODAwMTFFQzdFQTAxRTAwMTM4RUMwMDcwNDkKKzgxNDk4MTQ4NDg4MTQ4NDg4MTkwQzk3RTQ4RDkwMUZDMTQ4MDAwMEVEOTA3RkZFQjAxQzAwMDBDOTAzOTFGMDNDMDAwMDAxQworOTAyNjdFMDBFMDEzRTAwMDE4NDkwMTcwMTM2MDI2MzgwMUY4NkQxMzcwMDAzMDQ5NkQxMzMwMDEwM0VDMEZFMDI2NzAwN0UwCiswMTA3MTMzODAwNjAxNzE4NDk1QUEyMDBFMDE3MUM0ODQ4NDgxNTBDQUE2QzZDN0UxMjYwQTI2RDZDMTUxQzAwNzAxNzE4MjYKKzMwMDNGMDEzMEYwMTAxMTQxRjAwMzg2RDAxM0YxMzM4MjYxODAwRkMwMTc3MTMzMDAwMUMwMTdFOTAzOEUzRjA3MDAwMEM5MAorMjYxRjAzQzExM0UwMDAwRTkwM0EwN0ZGMDBGRkMwNkNEOTAxRkNFQjNGMDA2QzkwQ0FGQzdGNkM3RTZDN0UxMzcwNkQxNjdDCiswMTFFRUQwM0ZDRDkwNzgwRUMxRkYwRDkwMUUwRUNGRjgwRDkwMEZDOTAzODNGRkMwMDAyMUZCNTEyODAwMjAzMDFFMEM3RkMKKzM2M0M3QkJBNDE+STwxNTM4QTMxNTdDQTMxNUZFQTM0QTdFQTM0QTZDN0VBMjAyMDc3RkVDMDYzRkEyMDIwRTdGRUMwQzFGCitBMjAyMUM3RkVDMTgwRkEyMDIzODdGRUMzMDA3QTIwMjcwN0ZFQzYwMDNBMjAyQzA3RjE1MDFBMkQ5MDE4MDdGODFBMjQ5QzcKKzdGMTY3RkEyMDEwNjgxMDEwN0I2RkNBMjQ5ODEwMTBDQzcxMjFGQTI0OTZFN0VBMzQ5NkU3RUEzNDk2RTdFQTIxM0UwNzA3RQorMTIwMTQ4NkM4MUQ4MEZGQzAyMDcxMzgwQjU2QzkwQjUxMkZFQTMzNzNDN0RCQjNFPkk8QjcxMkUwMTZGQzE2RkYwMDAxOTAKKzM5ODAwMDdGQzA2QzkwQzdFQTFGRTA3MDdFNzA3RTcwN0VBMjcwN0VBMjgzQTc1RjE2MDM1RjRDNUE0QzVBNEM1QTRDNUFFRQorRkY4MDkxQjUwMEZDQzdGQ0EyOTFDN0VBN0Y4MEVFMUZFMEVFMDdGMDcwN0U3MDdFODM3MDdFQTIxODgwMTc3RjE4QzBBNzE4Cis4MDE3RkZBMjRDMTMwMDVGMTYwMzRDNUFFRTFGRjg0ODZERUI3RkYwQjgxMkMwOTRDN0ZDMTZGODMyMzk3REI4M0I+STw5MQorM0EwMUZGODAwMTgwMDIwRkVCRTAwMzAyN0YxM0Y4OTAzQTAxRkY4MDdFMDc5MDNBMDNGQzAwMEYwRkQ5MEZGMEVCMDM5RjQ5Cis0OEVCMDFERkQ5M0Y4MEVCMDBGRjQ5QzgxMjdGMDFGRTE1M0YxMjAxNDg0ODE1MUY0ODQ4MTUwRkEyNDg0ODE1MDdBMjQ4NUEKKzE3MDMxMjNGNUIwMDdGMTYwMUEzNUIwMEZGOTNDN0ZDQUQxMjdGNkRFRDAxODBBMzEyM0Y3RjAwMUYxNjAzMTgwMDZDN0U1RgorNkM3RTE3MDY2QzZDMTUwRTZDNkM1RDAwMDAxNjE4MDE3RjE1Mzg2RDZDNUNEOTFGRTA1QzZENkNFQjAzQzBEOTAzRkNFQjBGCis4MDkwMjcwMUZGODAzRkM3RkM5MDM5MDA3RkZGRkMwMjBGMTNGMDAyMDExMzgwMzEzRDdCQkEzQz5JPEI3MTJDMDE2RjgxNgorRkUwMDAxOTAzOTgwMDFGRjgwNkM5MEM3RUEzRkUwRUUwRkYwRUUwM0Y4NzA3RTcwN0UxNzdGQTJFRjNGODAxOEMwMTcxRjE4CitFMDE3MEYxOEYwQTNFRjA3RjhBNDE4RkNBQzE4RjhBNEVGMEZGMEEyMThFMEEyMTcxRjE4QzBFRjNGODBBMkVGN0YwMDE3RkUKKzRDNUE0QzVBRUUwRkYwRUUzRkUwNDg2REVCRkY4MEI4QzdGQzE2RjgxNkMwMzYzOTdEQjgzRj5JPEI4MTJGRUEzMDAwMTkwCiszODgwMDAwNzZDOTBDOEZDMTczRjgzODM4M0EzODNBMzE4ODAxNzAxMTZDMEEzOTRDN0ZDQTMxNTAxQTIxNTAzMTUwRjkxQjUKK0ZDQTNFQzAwMEYxNTAzMTUwMUEyMTUwMEEyMTg2MEEzMThFMDkzQzcxMkMwQTQxNzAxQTNFRjAzODBBMjE3MDdBMjE3MEYxNworM0YxNzdGNDg2RDkwMzgwN0ZGMDBCOUZDQTMzMzM5N0VCODM4Pkk8QjgxMkY4QTMwMDAxOTAzODgwMDAxRjZDOTBDNzEyMDEKK0VFMDBGQzE3N0MxNzNDMTcxQ0EyMTcwQ0E0MTcwRTE3MDZBMkVEMDE4MEEyMTcwMEE0MTUwM0EyMTUwNzE1MUY5MUI1RkNBMworRUMwMDFGMTUwNzE1MDNBMjE1MDFBNjkyQzhGQ0FENDgxM0MwQjYxMkMwQTMyRjM5N0RCODM2Pkk8REJGRjgwMTNDMDAyMEYKK0VCRjAwMTAyM0YxM0ZDOTEzOUZGODAzRjAzOTAzQTAzRkMwMDA3ODdEOTBGRjBFQjAzQ0Y0OTQ4RUIwMEVGNDk0ODE0N0Y0OQorNDgxNDNGNDlDODEyMUY0ODVBNDg0ODE1MEY0ODQ4MTUwN0EyNDg0ODE1MDNBMjQ4NUExNzAxMTIzRjVCMDA3RjE2MDBBNDQ4Cis0ODE2MDBBQjkzQjZGQ0EyNkM3RTkzMzgwMDdGRTBFRjNGQzBBMjEyM0Y3RjEyMUZBMjZDN0VBMjZDN0VBMjZDN0U2QzdFNkMKKzZDMTU3RjZEN0U2RDZDMTRGRjZENkMxNEVGRDkwRkY4RUIwM0M3RDkwM0ZFRUIwNzgzOTAzQTAwRkZDMDNGMDE5MTM5M0ZGRgorRkMwMDAyMEYwMUYwMTMwMDAyMDAxMzgwMzgzRDdDQkE0MT5JPEI2NDhCNTEyRkVBMzAwMDE5MDI2ODAwMDAzMTMwMDZDOTAKK0M3NkM1QUIzQTQ5MUI2RkNBMzkxQzcxMjAxQjNBNjQ4NkQ0OTdFQjY0OEI1MTJGRUEzMzczOTdEQjgzRT5JPEI2MTJDMEEzCitDNkVCQzAwMDZENUFCM0IzQUQ0OTdFQjYxMkMwQTMxQTM5N0VCODFFPkk8QjY0OUI1RkNBMzAwMDEwMTgwOTAzODAwN0ZGMAorNkM5MEM4RUEzRjgwMDUzRUM3RkMxNzNDMTczODVGNUY0QzVBNEM1QTRDQzhGQzE2MEU1RTVFNUU1RTRCNUFFRDA3ODAwMzBFCitDOUZDNUQxNTNFMTU3RTE1RkY1QzRBN0Y0QTZDN0UxNDBFNEE2QzdFNEE2QzdFMTQ3MDRBNkM3RTRBNkM3RTE0ODA0QTZDN0UKKzZGN0VBMjZGN0Y3MDdFQTI3MDdFNzA3RUEyNzA3RUEyNzA3RTcwN0VBMjcwN0U3MDdGODQ4NDQ4NkQ0OTdGQjYwMTFGRUJGRgorODBBMzM5Mzk3REI4NDE+NzUgRDxCNjEyRTBBMzAwMDEwMUMwQzhGQzZDOTBDOUZDQjNBRDE3MThBNTE3MzgxNzMwQTMxNzcwCitBMzE3RjBBMjE2MDExNjAzMTYwRkVFMUZFMDQ4NkQxM0ZGQjhGQ0EzMkQzOTdEQjgzND5JPEI1OTMzODA3RkZGODZFNURBMgorMDAwMUYwRkMwMDI2MDBERkMwRUQxQkY4QTJEOUNGRTAxNTMzQTNEOUM3RjAxNTYzQTNEOUMzRjgxNUMzQTJEOUMxRkNFQzAxCis4M0EzRDlDMEZFRUMwMzAzQTIwMjdGMTQwNkEzNkU2QzEzMENBMzZFNkMxMzE4QTI2RTZDMTMzMEEzNkU2QzEzNjBBMjZFNkMKKzEzQzBBMzkxMzkwMUZDMDE4MEEzOTEzOTAwRkUwMzAwQTJFRDdGMDZBM0VEM0Y4Q0EyRUQxRkQ4QTNFRDBGRjBBMzQ4NkM2RAorNUE0ODdFRDgwRkZDNkQ0ODQ5N0VCNTAwQzAwMjAzQjUxMkY4QTJFRDAxODA0NTM5N0RCODRDPkk8QjU5MTM4MDdGRkZFODAKKzgwQzY5MjM4MDA3RkUwNkVFQzFGODBEOURGRjBFQzBGMDAxNzA2RUJDRkY4RUJDN0ZDQTJFQkMzRkVFQkMxRkZBMjAxQzA3RgorNkU3RUEyNkU3RTZFN0U4MTE0MEY2RTdFODExNDAzNkU3RTE2ODA4MEVEN0ZDMDE2RTAxNTNGRUQxRkYwRUQwRkY4QTJFRDA3CitGQ0VEMDNGRUEyRUQwMUZGNkYxMzg2QTJFRTdGQzZFRTNGRTZBMkVFMUZGNkVFMEZGRUEyMTYwNzE2MDNBMjE2MDExNjAwQTIKKzE3N0U0ODZDMTUzRTQ4N0VEODBGRkMxNTFFQjUwMEMwMTQwRUEyMTcwNjM3Mzk3REI4M0U+STxFQzAzRkYwMjFGMTNFMDkxCiszOEZFMDFGQzkwMzkwMUY4MDA3RUQ5MDdFMEVCMUY4MDQ5NDg2RDdFRDkzRjgwRUIwN0YwNDlDNzZDN0UwMUZFNkU3RTQ4NDgKKzZFN0U0OTE1N0UwMDAzMTY3RjQ4NDhFRDNGODBBMjQ4NDhFRDFGQzBBMjAwMUYxN0UwNDkxNTBGMDAzRjE3RjBBMzAwN0YxNworRjg0OTE1MDdBMzAwRkYxN0ZDQUMwMDdGMTdGODZEMTUwRkEzMDAzRjE3RjBBMjZDNkNFRDFGRTBBMzZDNkNFRDNGQzAwMDA3CisxNzgwNkQxNTdGMDAwMzE3MDA2QzZDMTVGRUEyNkM2QzRBNUEwMTdGNEE1QTZENkM0OTVBNkQ2QzQ5NUFEOTA3RTBFQjFGODAKK0Q5MDNGODAxN0ZDN0ZDOTAzOTAwRkUwMUZDOTEzODFGRkZFMDAyMDM5MEM4RkMzNjNEN0JCQTQxPkk8QjcxMkMwMTZGQzE2CitGRjAwMDFEOTgwMDAxM0MwNkM5MEM3RUExRkUwNzA3RUVFMDNGODgzNzA3RUEyNzA3RUEyMTg4MEE3MTgwMEEyNEM1QUEyNEMKKzVBNUZFRTBGRjA0QzVBRUVGRjgwOTFCNTQ4QzdGQzE2RjA5MUNBRkNCM0E1NDg3RkI2RkNBMzMxMzk3RUI4Mzg+STxFQzAzCitGRjAyMUYxM0UwOTEzOEZFMDFGQzkwMzkwMUY4MDA3RUQ5MDdFMEVCMUY4MDQ5NDg2RDdFRDkzRjgwRUIwN0YwNDlDNzZDN0UKKzAxRkU2RTdFNDg0ODZFN0VBMjQ4NDgxNTdGMDAwNzE3ODA0OTE1M0YwMDBGMTdDMDQ5MTUxRjAwMUYxN0UwQTI0ODQ4RUQwRgorRjBBMzAwN0YxN0Y4QTI0OTE1MDdBMjAwRkYxN0ZDQUMwMDdGMTdGOEEyNkQxNTBGQTIwMDNGMTdGMEEyNkM2Q0VEMUZFMEEzCis2QzZDRUQzRkMwMDAwNzAyN0MxNDgwNEFCNEZDM0MwM0Y4MDM4MzgwN0YwMDNCMDFGQzA3MDFDMEZFRUMwRTAwMjYwMEZFMEMKK0VCRTFGQzAxN0ZFQzYzRjhEOTNGOENFQjc3RjBEOTFGQ0NFQjNGRTBEOTA3RUUxNDgwNkRCNDQ5QzdGQzAxMDBEOTgxRkMxMworMENFQzFGRkYwMjAzMTMxQzkxQzcwMDFFMTMxQzE2MUYxODNDRUY4MDdDRUZDMEY4RUUwRkZGQTMxOEYwODIxOEUwNzAxM0MwCis3MDEzODA5MzM4MDA3RTAwMzY0QjdCQkE0MT5JPEI2MTJGRUVERkZFMDE2RjgwMDAxOTAzODgwMDdGRTZDOTBDNzZDN0VFRQorM0ZDMDcwN0U3MDdFNzA3RUEyNzA3RUEyODNBNjVGQTI0QzVBQTI0QzVBNEM1QUVFM0Y4MDA0RkZDOEZDRUQwN0ZDOTFCNTEyCitFMDVFOTEzODAwMEZGMEVEMDNGOEVEMDBGRTgyNzA3RTcwN0VBMjE2MUY4M0E1ODNBNkYwMDE4MEEyMTdGODE2MEYxODAzNDgKKzZEMDEwNzE0MDBCNjZENkM1QTA0MDExMzA2OTMzODAwRkUwRUNBRUEzRkZDRUYwN0YwMzkzQjdEQjgzRD5JPEQ5MEZGODEzCitDMDkwMzgzRkZFMDE5MEI1MTI4MTM5MDNGODA3RTMzOTA3RTAwMEY3NDg0ODEzN0Y0ODQ4MTMzRjQ4QzcxMjFGMDAzRTE0MEYKKzAwN0UxNDA3QTIwMDdDMTQwMzEyRkMxNTAxQTM2QzE0MDBBMzdFNkQxNDAwNkM3RTdGMTNGODZDQjQ3RTZDMTNGOEVDRkY4MAorNkMxNEUwNkMxNEY4NkMxNEZFQzY4MDAxM0YxNDgwMDEwNzE0QzBFQjAwN0YwMjA3MTNFMEVDMDA3RkVEM0ZGMDE1MUYxNTBGCitFRDA3RjhBMjAwQzAxNDAzQTIxNTAxQTM3RUEyMTZGMDdFMTUwMzZDMTVFMDZDMTQwNzZDMTVDMDZDMTQwRjZERUIxRjgwRDgKK0ZCRjBFQjNGMDBEOEYwRkUxM0ZFMzlFMDNGRkZGODAxMEYxM0UwRDhDMDAxOTBDN0ZDMjUzRDdDQkEyRT5JPDAwM0ZCODEyCitFMEEzRDlDMDAzRUIwMDFGMjczRTAwMDFGRTEzMDM0OEVFMDFGMDAwNzgxNjAwMDA3MDE3NzBBMzAwNjAxNzMwQTQwMEUwMTcKKzM4NDgxNzE4QTRDNzE2MDBCM0IwOTEzODA3RkY4MDAxMUZCNjEyRTBBMzM1Mzk3REI4M0M+STxCNjkwMzgwN0ZGRkVBMzAwCiswMTAxODA5MDM4MDA3RkUwNkM5MEM4RUExRjgwRUYwRjAwMTcwNkIzQjIxNzBFNkQxNTBDODAxNzFDMTMzRjE3MTg2RDZDMTQKKzM4NUY2RDZDMTRGMDZENkM1QzZENkM0OTVBNkQ2Q0VCMDc4MDZENkM0OUM3RkM5MTM4N0Y4MDdFOTEzODFGRkZGODAyMDcxMworRTA5MTM4MDA3RjgwMzczQjdEQjgzRT5JPEI1MDBGQzkxMzg3RkZGODBBMzAwMDMwMTgwOTEzODBGRkMwMDZDOTBDOEVBMDcKK0UwNzE1QTZDNzA1QTZFMTQwMzAxN0Y5M0M3RkNBMjgwMDEzRjE1MDZBMjZFMTQwRTAxMUYxNTBDODAwMTBGNURBMjgwMDEwNworNURBMjZFMTQ3MDAxMDMxNTYwQTI2RDZDNUNBMjgwNkQ0QTVBQTJFRDgwMDMwMjdGOTFDOEZDQTI5MTM4M0ZDMDA2QTIxNUUwCiswMjFGNUJBMkVERjAxQzAyMEYxMzE4QTI2RTZDNUFBMjE1RkMwMjAzNUJBMkVERkVFMDAyMDE1QkEyNkU2QzVBQTM2RkM5RkMKK0EzMTUzRUEyMTUxQ0EzMzkzQjdFQjgzRT5JPEI1RDhGQzA3QjVEOEYwMDFCNUZDQTMwMDA3OTAyNzgwMDAxRkZFQzdFQTFGCitGODZDNDhDN0Q4MEZGOEVDMDdFMDAwMDEwMzA3RUQwM0MwMUI4MDdGNkM2RjZDMTUwMEEyNkU1RjAxN0Y2RTZDMTQwNkEyODAKKzAxM0Y0QTZDNUNBMjgwMDExRjRBNkQ1QkVFMDY3RkEyNkQ2QzAxMEU2RDVCRUUwQzNGQTI2RDZDMDExQzZENUJFRTE4MUZBMgorNkQ2QzZGNUJFRTMwMEZBMjZENkM2RjQ4NUFFRTYwMDdBMjZENkM0Q0M3RkM5MzM4QzAwM0ZDQTIwMzgwNUQ5MTNCN0Y4MTgwCiswMUZFMDZBMjAzQzExNTBFREEzRkMzQzdFQUZGMENBMjAzRTMxNTFDREExRkU2RUM3Rjk4QTIxNUY2REEwRkZDRUMzRkYwQTMKKzAyMDc1RTRCMTQxRkEyMDIwMzVFNEIxNDBGQTIwMjAxNUU0QjE0MDdBMjAyMDA5M0M4RkM0QjgwNTAzQjdFQjg1NT5JPDAwCis3RkI1OTAzODNGRkZGQ0EzQzYwMUY4MDEwNzEzODBEOTdGRTBEOTAzRkNDN0ZDMDEzRkVDMDFGMDZENkM1QzVGNkQ2QzVDNkQKKzZDMTMwMzRDQzhGQzZENkMxMzA2MTYwRTZENkM1QjZERUI4MDE4MTYzODkxMzg3RkMwMzA2RTZDNUExNkUwNkU2QzVBOTEzOAorMEZGMTgwMTVGQjZFQjRDOUZDNUQxNDAzNkU3RUEyNkU3RjZGN0VBMjRCN0UxNURGOTEzODAxOUZGMDkxMzgwMzhGRjgxNTBGCis5MTM4MDYwN0ZDOTEzODBFMDNGRTE0MEM0QTZDN0VFQzM4MDAwMjMwODA0QTZEN0UxNEUwNEE2RDdFNDk0ODZEN0UxMzAzOTEKK0M3NkM3RTAxMDY2RTdFMTMwRTAxMEM2RTdFMDExQzE0MDEwMTNDODEwMUZFODIyNjA3RkY4MDAxMDcxM0UwQjUwMEUwMDEzRgorRUJGRjgwQTMzOTM5N0VCODNFPkk8QjUwMEZFOTEzODNGRkZFMEEzMDAwMzAxRTA5MTM4MDdGRTAwQzY0OUVDMDNGMDAxN0YKKzZGNUE2MDZENkM1RDZENkMxNDAzOTVDN0ZDNkQ2QzE0MDZBMjZENkM1QzZENkMxNDFDMTcxODZENkMxNDM4MTczMDZENkQ1QgorNkU2QzEzRTA1RjkxMzgzRkUwMDE1RjkxMzgxRkYwMDNEQTBGRjg5MEM4RkMxNjA2OTEzODA3RkMwRTE2MEM5MTM4MDNGRTFDCis5MTM4MDFGRjE4NUU2RTEzQjAxNkUwMTU3RjZGNUFCM0EyNEI3RTAyM0ZCNTEyQzBBMzNCMzk3RkI4M0U+STwwMDdGQjgxMgorODBCOTEyQzBBMjZDMTc4MDMyMDQ3OTcwNDE+OTUgRDxFQTAxODAxMjAzRUEwNzAwMTIwRTVBMTIxODEyMzgxMjMwMTI3MDEyCis2MEEyMTJFMDVBQTQxMkNFRUFGRjgwMTNDMEEzMTI3RkEyRUEzRjgwRUEwRTAwMEExOTdBQjkxNz5JPEVCMUZFMEVCRkZGQworMzgwM0UwM0YzOTA3MDAwRjgwMzkwRjgwMDdFMDQ4NkM2QzdFMTNFMDZFN0VBMjZFN0U2QzVBNkM1QUM4RkNBNDE0N0ZFQjA3CitGRkVCM0ZFMEVCRkUwMEVBMDNGOEVBMEZGMEVBMUZDMDEyM0Y0ODVBOTBDN0ZDMTYwQzEyRkVBMzE0MDFBMjZDMTMwMzZDRUIKKzA3N0M5MDM5ODAwNjNFMTgzODNGQzAxRTNBMEZFMDc4MUZGMDNBMDNGRkYwMEZFMDNBMDA3RjgwMDdDMDI2Mjc3REE1MkE+CitJPEVBMDNGMDEyRkZBMzEyMEYxMjAzQjBFQzFGRTBFQzdGRjg5MDM4RjFFMDNFOTAzOUYzODAxRjgwOTAzOUY3MDAwRkMwMDEKK0ZFRUIwN0UwNDlFQjAzRjA0OUVCMDFGODVCRUQwMEZDQTIxNkZFQTIxNjdFMTY3RkFBMTY3RTE2RkVBMjE2RkMxNTAxNkQxNAorRjhFRDAzRjA3RjAxRUVFQjA3RTAwMUM2RUIwRkMwOTAzOUM3ODAxRjAwOTAzODgxRTA3RTkwMzgwMEZGRjhDN0VBMUZDMDI4CiszQjdFQjkyRT5JPEVCMDNGQzkwMzgxRkZGODA5MDM4N0UwM0UwMzkwMUY4MDA3MDQ4NDgxM0Y4MzkwN0UwMDFGQzM4MEZDMAorMDNBMkVBMUY4MDEyM0Y5MDM4MDAwMUY4NDhFQjAwRjAxNTAwQTIxMjdFMTJGRUFBMTI3RTEyN0ZBMjZDMTQwNjdGMDAxRjE0CiswRTZEMTMwQzAwMEYxNDFDNkM2QzEzMzg2QzZDMTM3MDZDNkMxM0UwMzkwMDdDMDdDMDkwMzgxRkZGMDBFQjA3RjgxRjI3N0QKK0E1MjU+STxFRDBGQzBFQzAzRkZBM0VDMDAzRjE1MEZCMEVCMDNGOEVCMUZGRjkwMzg3RTA3OEY5MDM4RjgwMUVGMzkwM0YwCiswMDdGNDg0ODEzM0Y0ODQ4MTMxRkEyNDg0ODEzMEYxMjNGOTBDN0ZDNUFBMjEyN0UxMkZFQUExMjdFMTI3RkEyN0VBMjZDNkMKKzEzMUZBMjZDNkMxMzNGNkM2QzEzN0Y2QzZDRUJFRkYwM0EwMUY4MDFDRkZGMzkwMDdDMDc4RjkwMzgxRkZFMEZEOTA3RjgxMworQzAyODNCN0RCOTJFPkk8RUIwN0Y4RUIxRkZGOTAzODdDMEZDMDM5MDFGODAzRTAzOTAzRjAwMUYwRDgwN0UwMTNGODM4MEYKK0MwMDA0ODQ4MTM3Q0EyNDhDNzEyN0UxNTNFNUExNTNGMTI3RTEyRkVBM0I3RkNBMjQ4QzhGQ0E1MTI3RUEyMTI3RkEyNkMxNAorMDM3RjAwMUYxNDA3NkM2QzEzMDYwMDA3MTQwRTZEMTMxQ0Q4MDFGMDEzMzg2QzZDMTM3MDkwMzg3RTAzRTA5MDM4MUZGRjgwCis5MDM4MDNGQzAwMjAyNzdFQTUyNT5JPDE0N0U5MDM4MDNGRjgwOTAzODBGQzFFMEVCMUY4NzkwMzgzRjBGRjAxMzdFQTIxMworRkNBMjM5MDFGODAzQzA5MUM3RkNBREI1MTJGQ0EzRDgwMUY4QzdGQ0IzQUI0ODdFMzg3RkZGRjhBMzFDM0I3RkJBMTk+STwKK0VEMDNGMDkwMzkwRkYwMEZGODkwMzkzRkZDM0MzQzkwMzlGODFGNzA3QzM5MDFGMDBGRTAzOTAzRTAwN0MwM0EwN0MwMDNFMAorMTAwMDBGRUNGMDAwQTI0ODQ4NkM3RUE4NkM2QzQ4NUFBMjAwMDc1QzZDNkM0ODVBNkQ0ODVBNkQ0OEM3RkMzODA3M0ZGQzM4CiswNjBGRjAwMDBFQzlGQ0E0MTIwRkEyMTNDMDZDQjUxMkMwMTVGODZDMTRGRTZDRUNGRjgwNDgxNUMwM0EwRjgwMDA3RkUwNDgKK0M3RUEwRkYwMDAzRTE0MDM0ODE0MDExNkY4NDgxNDAwQTU2QzE0MDEwMDdDMTVGMDZDRUMwM0UwMDAzRjE0MDdEODBGODBFQgorMEY4MEQ4MDdFMEVCM0YwMDM5MDFGQzAxRkMzOTAwN0ZGRkYwMDEwNzkwQzdGQzI2Mzg3RUE1MkE+STxFQTAzRjAxMkZGQTMKKzEyMEYxMjAzQjBFQzBGRjBFQzNGRkNFQ0YwM0Y5MDM5RjFDMDFGODA5MDM5RjM4MDBGQzBFQkY3MDAxM0ZFNDk2RDdFQTI1QgorQTM1QkIzQTM0ODZDNDk3RUI1MDBDMUI1MTI4MEEzMjkzQTdFQjkyRT5JPEVBMDM4MEVBMEZFMDQ4N0VBNTZDNUFFQTAzODAKK0M4RkNBQUVBMDNGMDEyRkZBMzEyMDcxMjAzQjNBQTQ4N0VCNTEyQzBBMzEyMzg3RUI3MTc+STxFQjAxQzBFQjA3RjBFQjBGCitGOEE1RUIwN0YwRUIwMUMwOTBDN0ZDQUFFQjAxRjgxM0ZGQTMxMzA3MTMwMUIzQjNBMjEyM0MxMjdFMDBGRjEzRjAxMzAzQTIKKzE0RTAzOEZFMDdDMDEyN0MzODNDMEYwMEVBMEZGRUVBMDNGODE1NDk4NEI3MTk+STxFQTAzRjAxMkZGQTMxMjBGMTIwM0IxCis5MTM4MDFGRkZDQTM5MTM4MDA3RkMwMTYwMDE1N0MxNTcwNUQ0QTVBNEE1QTRBQzdGQzE0MUUxNDM4MTQ3ODE0RkMxM0YxRUIKK0YzRkVFQkY3M0YwMUZFN0ZFQkY4MUY0OTZDN0U4MTE0MDc2RTdFNkU3RTgxMTQwMDE1N0UxNTdGODExNjgwRUQxRkMwNDg2QworRUIzRkYwQjUwMEMwQjVGQ0EzMjgzQTdFQjkyQz5JPEVBMDNGMDEyRkZBMzEyMEYxMjAzQjNCM0FENDg3RUI1MTJDMEEzMTIKKzNBN0VCOTE3Pkk8MjcwM0YwMEZGMEVCMUZFMDAwRkZEOTNGRkNFQjdGRjg5MTNBRjAzRjAxRTA3RTkwM0JGMUMwMUY4MzgwCiszRjNEMEZGMzgwMEZDNzAwMUY4MDI2MDNGNzAwMTNDRTAxRkUxNERDNDlEOTA3RjhFQjBGQzBBMjQ5NUNBMzQ5NUNCM0EzNDgKKzZDNDk2Q0VCMUZFMEI1MDBDMUI1MDA4M0I1RkNBMzQwMjU3RUE0NDU+STwzOTAzRjAwRkYwMDBGRkVCM0ZGQ0VDRjAzRjkwCiszOUYxQzAxRjgwM0EwRkYzODAwRkMwMzgwM0Y3MDAxM0ZFNDk2RDdFQTI1QkEzNUJCM0EzNDg2QzQ5N0VCNTAwQzFCNTEyODAKK0EzMjkyNTdFQTQyRT5JPEVCMDNGRTkwMzgwRkZGODA5MDM4M0UwM0UwOTAzOEY4MDBGODQ4NDgxMzdDNDg0ODdGNDg0ODdGCis0ODQ4RUIwRjgwMDAxRjE1QzA5MEM3MTIwNzQ4MTVFMEEyMDA3RUVDMDNGMEE0MDBGRTE1RjhBOTAwN0UxNUYwQTIwMDdGMTQKKzA3NkMxNUUwQTI2QzZDRUIwRkMwMDAwRjE1ODA2RDEzMUY2QzZDRUIzRjAwNkM2QzEzN0VDNjZDMTNGODkwMzg3RTAzRjA5MAorMzgxRkZGQzBEOTAzRkVDN0ZDMjUyNzdFQTUyQT5JPDM5MDNGMDFGRTAwMEZGRUI3RkY4OTAzOEYxRTA3RTkwMzlGMzgwMUYKKzgwM0EwN0Y3MDAwRkMwRDgwM0ZFRUIwN0UwNDlFQjAzRjA0OTE0Rjg0OTEzMDExNkZDMTUwMDE2RkVBMzE2N0ZBQTE2RkVBMworRUQwMUZDQTI2REVCMDNGODE2RjA2RDEzMDc2REVCMEZFMDAxRjYxNEMwOTAzOUY3ODAzRjAwOTAzOEYxRTA3RTkwMzhGMEZGCitGOEVDMUZDMDkxQzhGQ0FCNDg3RUI1MTJDMEEzMjgzNTdFQTQyRT5JPEQ5MDNGODEzQzA5MDM4MUZGRTAxOTAzODdFMDc4MQorOTAzOEZDMDFDMzM5MDNGMDAwRTMwMDA3MTQ3NzQ4NDgxMzM3NDkxMzNGMDAxRjE0MUY0ODVBMTUwRjQ4QzdGQ0EzMTJGRUFBCisxMjdGQTM3RTZEMTMxRjEyMUY2RDEzM0YxMjBGNkM2QzEzN0Y2QzZDMTNFRjM5MDFGODAxQ0YzOTAwN0UwNzhGOTAzODFGRkUKKzBGRUIwN0Y4OTBDN0ZDQUJFRDFGRTAwMjAzQjVGQ0EzMjgzNTdEQTQyQz5JPDM4MDdFMDFGMDBGRkVCN0ZDMDkwMzhFMUUzCitFMDkwMzhFMzg3RjAzODBGRTcwN0VBMDNFNjEzRUU5MDM4RUMwM0UwOTAzOEZDMDA4MDQ5MTMwMEE0NUJCM0EyNDg3RUI1MTIKK0YwQTMxQzI1N0VBNDIxPkk8RUJGRjAzMDAwMzEzRTczODBGODBGRjM4MUUwMDNGNDg3RjQ4N0YwMDcwN0YxMkYwQTI4MDdFCitBMjdFQjQ5MEM3RkNFQTdGRTAxM0ZGNkMxM0UwNkMxM0Y4NkM3RjAwMDM3RkM2N0YwMTA3MTM4MEVCMDA3RjE0MUYwMEMwRUIKKzBGQzAxNDA3QTI2QzEzMDNBMzdFMTU4MDZDMTMwNzdFRUMwRjAwQjQxMzFFMzhGM0MwN0MzOEUxRkZGMDM4QzAzRjgwMUEyNworN0RBNTIxPkk8MTMxOEE1MTMzOEEzMTM3OEEzMTNGODEyMDExMjAzMTIwNzAwMUZCNUZDQjZGQ0EyRDgwMUY4QzdGQ0IyMTUKK0MwQTkzODAwRkMwMTE1ODBFQjdDMDMwMTdFMTMwMDZENUFFQjBGRkVFQjAxRjgxQTM0N0ZCMjIwPkk8RDgwM0YwRUIwN0UwCiswMEZGRUIwMUZGQTMwMDBGRUIwMDFGMDAwMzE0MDdCM0E0MTUwRkEzMTUxRjEyMDE2RDEzM0YwMDAwRUM3N0Y4NkQ5MDM4RTcKK0ZGODA5MDM4M0YwM0M3OTAzODFGRkY4NzkwM0EwM0ZDMDdFMDAwMjkyNjdFQTQyRT5JPEI1Mzg4MDNGRkVBMzNBMEZGODAwCiswRkYwNkM0OEVCMDdFMDAwMDNFQzAzQzA2RDE0ODAwMDAxMTUwMEEyNkM2QzEzMDZBMjZEMTMwRTAxN0UxMzBDQTI2RDVCQTIKK0VDODAzODAxMUYxMzMwQTI2RDZDNUFBMjE0RTAwMTA3NUJBMjkwMzgwM0YxODBBM0Q5MDFGQkM3RkNBMjE0RkY2RDVBQTIxNAorN0NBMzE0MzhBMjI3MjU3RUEzMkM+STxCNTNBMUZGRkUwM0ZGRUEzMjYwRkY4MDA5MDM4MDAwRkY4NkM0ODAxN0VFQjAzRTAKKzE4QzAwMDAzMDIzRUVCMDE4MEEyNkM2QzAxM0ZFQjAzMDBBMzZDNkNFQzgwMDYxNTZGQTIwMTdFOTAzOEVGQzAwQzE1QzcxNworMUNEOTNGMDFFQkUwMTgxNTgzMDI4MUVCRjAzOEQ5MUY4MzE0MzAxNTAxMDJDM0VCRjg3MDkwMjYwRkM2MDAxMzYwQTJEOTA3CitFNjZENUEwMkVDMTM3Q0EyRDkwM0ZDRUI3RjgwNEExMzNGQTIwMTAxOTJDN0ZDNEE3RkEyMDEwMDE0MUU0QTEzMEUwMjYwMTMKKzBDMzcyNTdFQTMzQz5JPEI1Mzg4MDdGRkZBMzNBMDNGRTAwM0ZGMDAwMDFFQzFGODAwMDAwOTJDN0ZDMDE3RTEzMUM2RDEzCisxODZENkM1QUVDQzA3MDAxMEY1QjZENkM1QUVDRjE4MEVCMDNGQjZEQjRDOEZDNkQ1QUEyMTQ3RjgwNEE3RTgxMTRDRjkwMzgKKzAxQzdFMDkwMzgwMzgzRjA5MDM4MDcwM0Y4RUIwNjAxNDk2QzdFMDExQzEzN0U0OTEzN0YwMTc4N0Y0OTZEN0U0ODZDODAwMAorMEZFQzNGRjBEOEZGRkU5MEI1MTI4MEEzMjkyNDdGQTMyQz5JPEI1Mzg4MDNGRkVBMzNBMEZGODAwMEZGMDZDNDhFQjA3QzAKKzAwMDNFQzAzODA2QzdFMTYwMDdGMDAwMDE0MDZBMjAxN0U1QkEyMTM3RjZENUJBMjZENkM1QUEyRUNDMDcwMDEwRjEzNjBBMgorNkQ2QzVBQTIxNEYxMDEwMzVCQTJEOTAxRkJDN0ZDQTIxNEZGNkQ1QUEyMTQ3Q0EzMTQzOEEyMTQzMEEyMTQ3MDE0NjBBMjVDCitBMkVBN0MwMTAwRkU1QjEzMDM5MUM4RkMxMzA2RUFGQzBFRUE3MDFDNkM1QUVBMUZGMEVBMEZDMDI3MzU3RUEzMkM+STwwMAorM0ZCNTEyRkNBMkVCODAwM0Q4M0UwMDEzRjgwMDNDRUIwN0YwMDAzOEVCMEZFMDEyMzAwMDcwRUIxRkMwRUMzRjgwMDA2MDEzCis3RjE1MDAxNEZFNDk1QUEyQzY0ODVBNDk1QUEyNDk1QTQ5NUE0OTVBQTI5MDM4N0YwMDA2MTNGRUEyNDg1QTQ4NUEwMDA3MTQKKzBFNUI0ODQ4MTMwQzQ4NDgxMzFDQTI0ODQ4MTMzQzQ4QzcxMjdDNDhFQjAzRkM5MEI1RkNBMjFGMjQ3RUEzMjU+STwxNDNFCitFQ0ZGODA5MDM4MDE4MEMwOTAzODAzMDA2MDAxMDY3RkE1NkQ1QjZENkM1QTZEQjQ1QTAyM0VDOEZDOTFDOUZDQTVEODAzRjAKK0VCMDdFMDAwRkZFQjAxRkZBMzAwMEZFQjAwMUYwMDAzMTQwN0IzQTQxNTBGQTMxNTFGMTIwMTZEMTMzRjAwMDBFQzc3Rjg2RAorOTAzOEU3RkY4MDkwMzgzRjAzQzc5MDM4MUZGRjg3OTAzQTAzRkMwN0UwMDAyOTM4N0VCNjJFPjE4MworRCBFCislRW5kRFZJUFNCaXRtYXBGb250CislRFZJUFNCaXRtYXBGb250OiBGcyBlY3NzMTQ0MCAxNC40IDMyCisvRnMgMzIgMjQ3IGRmPEMxMTI4MEE2NzEwNjgwQTI3Mj4yMiBEPDE0MDYxNDBFMTQzRTE0N0VFQjAxRkUxMzA3MTMzRkVBMDcKK0ZGQjVGQ0EzMTNGOTEzQzFFQUY4MDExMjAwQjNCM0IzQTYwMDdGQjYxMkY4QTYyNTUwNzZDRjM5PjQ5CitEPEVDN0ZFMDkwMzgwN0ZGRkMwMTFGMTNGRjQ5MTRDMDQ5MTRGMDkwQjY3RTQ4ODE0ODAxMDA3RkQ4MDdGOEVCMUZGRjQ4NDgKKzEzMDcwMUMwMDEwMTEzODAwMDFGNkUxM0MwNDkxNDdGNDhDOEVBM0ZFMEEyMDA3RUVEMUZGMDE2MEYxMjdDMTJGQzQ4RUQwNworRjgxMjc4QTIxMjMwQTIxMjEwQzlGQ0E0MTdGMDE2MEZBM0VFMUZFMEEyMTdDMDE2M0YxNzgwMTY3RkVFRkYwMDVFMTUwMTRCCis1QTRCNUE1RTRCNUE0QjVBNEI1QTE1N0Y0QkM3RkM0QTVBNEE1QUVDMDdGMDRBNUE0QTVBNEE1QTRBQzhGQzE0RkU0OTVBNDkKKzVBNDk1QTQ5NUE0OTVBNDk1QTkxQzlGQzEzN0U1QjQ4NUE0ODVBNDg1QTQ4NUE0ODVBNDhDQUZDNDhCNzEyRjhBNzJENTA3QgorQ0YzOT5JPEVDM0ZGMDkwMzgwMUZGRkUwMTBGNkQ3RTAxM0YxNEUwNDk4MDkwQjY3RTAwMDM4MTQ4OTAzOEMwMUZGRTNBMEYKK0ZFMDAwN0ZGMDFGODAxMDExMzgwNDg0ODdGRDgzRkMwRUM3RkMwNDkxNDNGNDhDOEZDMDAzRTE2RTAxNjFGMTIxQzEyMTgxMgorMDhDOUZDQTMxNjNGMTdDMEEyMTY3RjE3ODAxNkZGMTcwMDVENEI1QTRCNUE0QjVBRUQ3RkYwOTEzODBGRkZFMDAxMDNCNTVBCis1RTRCQzdGQ0EyRURGRkMwMTZGMDkwQzdFQTNGRjhFRDA3RkNFRDAxRkU2RjdFRUU3RjgwRUUzRkMwMTdFMDE2MUYxN0YwMTYKKzBGMTdGOEEyMTYwNzE3RkNBODEyNDAwMDYwRUQwRkY4QTIxMjcwMDBGOEVEMUZGMEEyNkMxNTNGMDA3RjE2RTA2RDE0N0Y2QworNkNFQ0ZGQzBEODFGRjA0OTEzODBEODBGRkUwMTA3MTMwMDNBMDdGRkMwM0ZGRTZDOTBCNUZDNkMxNUY4NkM1RDAxM0Y1QzAxCiswRjE0ODAwMTAzNDlDN0ZDOTAzODAwM0ZGMDJFNTI3QkNGMzk+STxFRDA3RkMxNTBGQTIxNTFGQTIxNTNEMTU3REEyMTVGOQorQTJFQzAxRjExNDAzQTJFQzA3RTFBMkVDMEZDMUEyRUMxRjgxMTQzRjE1MDExNDdGMTQ3RTE0RkVFQjAxRkNBMkVCMDNGOEEyCitFQjA3RjBBMkVCMEZFMDEzMUYxNEMwRUIzRjgwQTJFQjdGMDA1QjVCMTIwMTVCMTIwMzVCNDg1QTEyMEY1QjEyMUY1QjQ4NUEKKzEyN0Y5MEM3RkM1QTkwQjgxMkMwQTZDOEQ4MDFGQ0M3RkNCM0E0MzI0RTdEQ0QzOT5JPEI3N0UxNkY4MTZGRjE3QzAxN0YwCisxN0ZDOTAyNjgwMDAwMzdGOTIzODAwM0ZGRjA0MDcxM0MwMTYwMTcwN0ZFRjNGRjA3MTdFMTcwRjcxN0VBMjE3MDM4NDE3MDEKK0E2NEQ1QUEyMTcwNzYwMTcwRjRENUE0RDVBRUZGRkMwNEM1QjA0MDc5MEM3RkNFRTFGRkU5MjM4MDFGRkY4OTBCNzVBMTdDMAorNENDOEZDQTJFRUZGQzAxN0Y4OTAyNjgwMDAwRjEzRkU5MjM4MDAzRkZGMDQwNzEzQzAwNDAxN0Y3MDZDN0VFRjFGRjg3MTdFCis3MTdFMTcwMzcxN0VBMjcxMTM4MDE4N0ZBMjE5QzBBMjE4M0ZBNDE4N0ZBMjE5ODAxOEZGQTI0RDEzMDA1RjRENUE0RDVBMTcKKzNGNEQ1QTRDNDg1QTA0MEY1QjkzQjU1QTkwQjhDN0ZDNUYxN0Y4MTdFMDk0QzhGQzE2RjAzQTUyNzVEMTRDPjY2CitEPDkyMzgwM0ZGRjAwMzFGRUJGRjgwOTJCNjEyRjAwMjAzMTVGRTAyMEZFREZGODAxNDNGNUM5MTI3RkZGRTAwMUYxMzAwNDkKKzAxRjAxMzAxNDkwMUMwRUIwMDNGNDk5MEM4MTIwRjQ5NDgxNTAzRDkxRkY4OTJDN0ZDNDk1QTQ5NUE0OTVBQTI0ODVCNDg5MAorQ0JGQzVCMTIwNzVCMTIwRjVCMTIxRjVCQTIxMjNGNUJBMzQ4NUFBNTQ4NUFBRTZDN0VBNTZDN0VBMzdGMTIxRkEyN0YxMjBGCis3RjEyMDc3RjEyMDM3RjZDN0Y2QzdGQTI2RDdFNkQ2QzE2ODA2RDZDMTUwM0Q5MEZGRTE1MDc2RDZDMTUxRjZEMDFDMEVDM0YKK0MwNkQwMUYwRUIwMUZGNkQwMUZFMTMxRjZFQjcxMjgwNkVFREZFMDAwMjBGNUQwMjAzMTVGMDAyMDAxNUMwMDMxRjkxQzdGQworMDMwMzEzRjAzQTU2NzhEMzQ5Pkk8RUFGRjgwQjNCM0IzQjNBQTA5NTI3NUQxMjA+NzMgRDxCNDdFQjNCM0IzQjNBMzkwQjcKKzEyRjhBNzJENTI3NUQxM0U+NzYgRDxEOEZGRTBGMEZGRTBBMzZENUZBMjZENUZBMjAwRkUxOUVGNkQxNzA3QTIwMTdFRUYwRgorQ0ZBMzZERUYxRjhGQTM2RDZDRUUzRjBGQTI2RTE2N0YwMTBGMTc3RUEyNkUxNkZFMDEwNzE3RkNBMjZFMTUwMTAxMDMxN0Y4Cis2RTE1MDNBMjAxMDExN0YwNkUxNTA3QTIwMTAwMTdFMDZFMTUwRjAyN0UxNkMwMDI3RjE1MUZBMjZFMTY4MDZGMTQzRkEyMDIKKzFGMTYwMDZGNUNBMjZFNkMxNEZFQTIwMjA3NUQ2RjEzMDFBMjAyMDM1RDZGMTMwM0EyNkU2QzQ5NUFBMjAyMDA1RDZGMTMwRgorQTIwMzdFNUMwMzdGMTMxRkEyNkY1Q0VFODAzRjAzMUY5MUM3RkNBMjcwNUEwMzBGMTM3RUVFRTBGRUEyMDMwNzVCMTZGMTAzCiswMzVCQTM5MjM4MDFGQkYwQTI2RkI0NUFBMzcwNUFBMzcwNUE5M0M5RkNBMjRCNTI3NEQxNjQ+STw5MjM4MDNGRjgwMDMzRgorMTNGODkyQjUxMkZFMDIwMzZFN0UwMjBGMTVFMDAyM0YxNUY4NEE0OEM2N0ZEQUZGRjBFQjFGRkUwMTAzMDFDMDkwMzgwN0ZGCis4MDQ5OTBDNzAwMDE3RkQ5MEZGQzZFNkM3RTQ5NDg2RjdFNEExNTFGNDk0ODZGN0U0OTQ4NkY3RTQ5NDg2RjdFOTFDOTEyMDEKKzQ4ODQ0ODQ4NzAxMzgwNDkxNzdGMDAwNzE5QzA0OTE3M0YwMDBGMTlFMDQ5MTcxRjAwMUYxOUYwQTI0OTE3MEYwMDNGMTlGOAorQTI0OTE3MDdBMjAwN0YxOUZDQTM0OTE3MDNBMjAwRkYxOUZFQUQ2RDE3MDcwMDdGMTlGQ0E1NkQxNzBGMDAzRjE5RjhBMjZECisxNzFGMDAxRjE5RjBBMjZEMTczRjAwMEYxOUUwNkQxNzdGMDAwNzE5QzA2RDE3RkYwMDAzMTk4MDZENUU2QzE5MDA2RTVENkMKKzZENEI1QTZENkM0QjVBNkQ2QzRCNUE2RTE1M0Y2RDZDNEI1QTZENkM0QjVBNkQ2QzRBNUI2RDAxQzAwMTA3NUI2RDAxRjAwMQorMUY5MEM3RkM5MDI2MDA3RkZFRUJGRkZDNkVCNjVBMDIwRjE1RTA2RTVEMDIwMDRBQzhGQzAzM0YxM0Y4MDMwMzEzODA0NzU2Cis3QUQzNTQ+NzkgRDxCNzEyQzAxNkZDMTZGRjE3QzAxN0YwODM5MDI2ODAwMDAxMTNGRTkyMzgwMDFGRkYwNDA3MTM4MDA0MDEKKzEzQzA3MDEzRTAxNzNGRUYxRkYwQTJFRjBGRjgxNzA3MThGQzE3MDNBMjE4RkVBMjE3MDFBNTE3MDNBMjE4RkNBMjE3MDcxOAorRjgxNzBGRUYxRkYwQTJFRjNGRTAxN0ZGNEMxM0MwMDQwNzEzODAwNDFGMTMwMDRCQjQ1QTkwQjcxMkY4NUYxN0MwOTRDN0ZDCisxNkZDMTZDMDAxODBDQUZDQjNCMTM3NTI3NUQxNDk+STw5MTM4MDdGRjgwMDI3RjEzRjg0OUI2RkMwMTA3MTVDMDAxMUYxNQorRjA0OTE1RkM0OTgxOTAzOEZGRjgwMDQ4MDFDMDEzMEY0ODkwQzdFQTAzRkM0ODQ4MTQwMEQ4MEZGODE1M0MxNzFDNDg0ODE1CiswQzQ5OTJDN0ZDNDg1QUEzNDg1QUE3N0ZBMjEyM0Y3RjdGNkM3RTdGNkM3RTdGNkMxM0MwNkMxM0ZDNkNFQkZGODAxNUY4NkMKKzZDRUJGRjgwNkQxNEYwNkQxNEZDMDEwNzE0RkY2RDgxRDkwMDdGODAwMjBGODAwMjAwODAwMzBGN0YwMzAxN0Y5MjM4MDAzRgorRkUxNjBGNzA3RTcwMTM4MDgyODJFRjdGQzBBMjE3M0YxOEUwQTIxNzFGQThFRjNGQzBBMzAwNjBFRTdGODAwMDcwMTZGRjAwCis3ODE3MDAwMDdFNUREODdGODA0QTVBNDg2QzRBNUEwMUY4MTQxRjAxRkZFQzdGRjg2QzkwMzlGMDAzRkZGMDAwMUY5MEI2NUEKKzAwMDc1RTZDOTNDN0ZDQzY2QzVDMDExRjE0RjgwMTAxMTRFMDkwMjYwMDFGRkVDOEZDMzM1NjdCRDMzRj44MworRDw5MDM4MDNGRjgwMDExRjEzRTA5MEI1MTJGODAwMDM4MDAwMEYxNEZGNDgxNTgwRDlGQzAwMTNDMDAxRTAxMzdGMDE4MEVCCiszRkUwMDAxRUM3RUExRkYwMDAxODE0MEYxMjEwQzhFQTA3RjhBM0VEMDNGQ0FBRUMwM0ZGOTFCNUZDMTMwNzEzM0Y5MEI2RkMKKzQ4MTQ4MzAwMDdFQkUwMDMzODBGRkUwMEVBMUZGOEVBM0ZFMDVCNDg1QTkwQzdGQzEyRkVBNTE1MDc2QzE0MEY2QzdFNkQxMworM0Y2RDEzN0YzOTNGRkMwM0ZGOTBCNkZDNkMxNEZCNkMxNEUzNkMxNDgzNkNFQkZDMDNDNjAxQzBDN0ZDMjYzNzdBQjUzNz4KKzk3IEQ8RUMxRkZDOTFCNTEyQzAwMTAzMTRGMDAxMEYxNEZDNDkxNEZGNDkxNTgwOTAzODdGRjAwMzkwMzlGRjgwMDA3RjQ4Cis0OEM3RUExRjAwNDg0ODE0MDc0ODQ4ODA0OTkxQzdGQzQ4NUExMjFGNUIxMjNGNUJBMjQ4Q0FGQ0E0MTJGRUFCN0U3RUEzN0YKKzEyM0ZBMjZDN0U3RjAwMEYxNjQwNkQxNUMwNkM2QzE0MDM2QzZDMTQwNzZEMTQxRjZDNkM2QzEzRkY2Q0VCRTAwNzZEQjYxMgorODAwMTFGRUNGRTAwNkQ1QzAxMDMxNEYwMDEwMDE0ODBEQTFGRjhDN0ZDMkEzNzdCQjUzMz45OQorRDxFRTFGRTBCM0FFRUM3RjgwOTAzODAzRkZGMDAxMEYxM0ZDNDkxM0ZGMDE3RjE0OUY5MEI2MTJERjQ4OTAzOEYwMEZGRjQ4CitFQjgwMDM0QTdFRDgwN0ZDN0Y0ODQ4MTQ3RjQ5MTQzRjQ4NDgxNDFGQTI0ODVBNUJBMjEyN0Y5MEM4RkNBMzEyRkVBQzEyN0YKK0E0NkM3RUEyN0YwMDFGMTUzRjdGNkM2QzE0N0Y2RDE0RkY2QzZDNUI2RDVCNkM2QzZDNUE2QzkwMzhFMDNGREY2QzkwQjUxMgorOUY2RDE0MUY2RDEzRkUwMTBGMTNGODZEMTNFMDAxMDA5MEM4RkMyQjU2N0JENDNCPkk8RUM3RkMwOTAzODAxRkZGODAxMDcKKzEzRkUwMTFGN0Y0OTgwNDk4MDkwMzlGRkMwN0ZFMDQ4OTAzODAwMEZGMEQ4MDNGQzZEN0U0ODQ4MTMwMzQ5NkQ3RTQ4NDgxMworMDAwMDFGMTU3RTVCNDkxNDNFMDAzRjE1M0Y5MEM4N0U1QUEyMTI3RUVFMEY4MEEyQjhGQ0E2MDBGQ0NBRkNBMzdFQTIxMjdFCitBMzEyN0Y3RTdGQTI2QzdFQTI2QzdFNkQxNTgwNkM2QzE0MDM2QzZDMTQwNzZEMTQxRjZDNkM2QzEzRkY2Q0VCRjAwRjZEQjYKKzEyMDA2RDE0RkMwMTBGNUMwMTAzMTRFMDAxMDA5MUM3RkNFQzFGRjAyOTM3N0JCNTMzPkk8OTEzODAxRkZDMDAyMEYxM0Y4Cis1QzE0N0Y5MUI1RkM1QjQ5MTMwMEQ5MDdGQzEzMDgwMkYwMTMwMDQ5NUE0OTVBQTI0OTVBQTQxMzdGQjJCNjEyRkNBNjI2MDAKKzdGODBDN0ZDQjNCM0FBMjU1NjdFRDUyMz5JPERBM0ZDMEVCMUZDMDkxMzlGRkYwMDFGRjAxMDNFQkZDMEYwMTBGRDlGRjdGCisxM0UwNDk5MUI1RkM1QjkwMjY3RkUwN0ZFQkYwMDA5MTI2MDAwRkY4QzdGQzAxRkU2RDVBNDg0ODZEN0U0OTEzMDEwMDAzODEKKzQ5MTMwMEEyMDAwNzgxNDkxNDdFQTg2RDE0RkUwMDAzNURBMjZEMTMwMTAwMDE1RDZEMTMwMzZDNkM0OTVBMDE3RjQ5NUE5MAorMzhGRkUwN0Y0ODkwQjU1QTVFNDg5MkM4RkMwMUUzMTNGQzAxRTAxM0YwMDAwN0VCM0ZDMDkxQ0FGQ0E1N0YxMjAzMTNGQzkwCitCNjEyQzA2QzE1RkU2QzZGN0UxN0UwNDgxNkY4MDAwNzgyNDg4MkQ4MUZGOEM3MTI3RjAxRTBFQzA3RkY0ODQ4MDIwMTEzODAKKzQ4NDhFQzAwN0Y5MEM5MTIzRjE4QzAwMEZFMTYxRkE2MDA3RkVFM0Y4MDZEMTU3RjZEMTVGRjZDNkM0QTEzMDBEODFGRjhFQworMDdGRUQ4MEZGRUVDMUZGQzNCMDdGRkUwMDFGRkY4NkM5MEI2NUFDNjE2QzA2RDVEMDExRjRBQzdGQzAxMDMxNEYwOTAyNjAwCisxRkZFQzhGQzMzNEU3REI0Mzk+STxCNEZDQjNBRUVDMEZGOEVDN0ZGRjQ5QjUxMkMwMDEwNzE0RTA0OTE0RjA0OTE0Rjg5MAorMzgzRjgwN0Y5MDM5N0UwMDFGRkM0OTEzMDc0OUVCMDNGRTVCNDkxMzAxMTZGRjQ5N0ZBMjVCQTQ5MEM4RkNCM0IwMjg1NTc3CitENDNCPkk8RUFGRjgwQTlDN0ZDQjJFQTdGODBCM0IzQjAwOTRGNzhDRTFCPkk8RUMzRkUwQTk5MUM3RkNCMkVDMUZFMEIzQjMKK0IzQUFFQzNGQzBBMjAwNDAxMzdGMDA3MEVCRkY4MEVBNzgwMUQ4RkY4RjEzMDBFQkZGRkVBMjZDNUIwMDFGNUIwMDA3MTNFMAorMzgwMDdGODAxQjY3ODdDRTFFPkk8MTJGRkIzQjNCM0IzQUQwODU1NzdENDFCPjEwOCBEPEVDMEZGOEI0RUI3RkZGNDlCNTEyCitDMDAxMDcxNEUwNDkxNEYwNDkxNEY4OTAzODNGODA3RjkwMzk3RTAwMUZGQzQ5MTMwNzQ5RUIwM0ZFNUI0OTEzMDExNkZGNDkKKzdGQTI1QkE0OTBDOEZDQjNCMDI4MzU3N0I0M0I+MTEwIEQ8RUMwRkYwOTFCNUZDMDEwMzE0QzAwMTBGMTRGMDQ5ODA0OTgwCis5MDM5N0ZGMDBGRkU5MDM5RkY4MDAxRkY0ODkwQzcxMzgwRDgwM0ZDRUMzRkMwNDg0OEVDMUZFMDQ5MTQwRjQ4NDhFQzA3RjAKK0EyNDg0OEVDMDNGODQ5MTQwMTAwM0YxNkZDQTI0OEM5MTJGRUEzMDA3RTE2N0UwMEZFMTY3RkFCNkMxNkZGNkMxNkZFQTM2RAorMTQwMTAwM0YxNkZDNkQxNDAzMDAxRjE2Rjg2RDE0MDc2QzZDRUMwRkYwQTI2QzZDRUMxRkUwNkM2Q0VDM0ZDMDAxRkYxNEZGCis2Q0Q5QzAwMzEzODA2Q0Q5RjAwRjEzMDA2REI1NUEwMTFGMTRGODZENUMwMTAzMTRDMDAxMDA5MUM3RkNFQzFGRjgzMDM3N0MKK0I1Mzk+STxFQzFGRjBCNEVCRkZGQzAxMDMxM0ZGMDEwRjgwNDk4MDAxN0Y4MDQ5QzY3RjAxRkNFQjNGRjgwMUYwRUIwRkZDCis0OTEzMDc0OTZEN0U0OTZEN0U4MTkwQzhGQ0VFN0Y4MEEyRUUzRkMwQTIxNjFGQTMxN0UwMTYwRkFBMTYxRjE3QzBBMzE2M0YKKzE3ODAxNjdGQTJFRUZGMDA2RDVCNUU2RDEzMDM2REVCMEZGQzZENDk1QTZERUI3RkYwOTAzOUZFMDFGRkUwMDE3RkI1NUE2RAorNUM2RDkxQzdGQzAxMDc1QjAxMDExM0Y4OTAzODAwM0ZDMDkxQzlGQ0IzQTQyQjRDNzZCNDNCPkk8RUMwM0UwMDBGRTEzMUYKKzE0N0ZFQjAxRkY1QjEzMEY1QjkwMzgzRkZDMDAxNEUwRUI3RjgwNDlDN0ZDNkM1QTVCNUI1QjVCQTI1QkEyNUJBNDkwQzhGQworQjNBQzFCMzU3N0I0Mjc+MTE0IEQ8OTAzODA3RkY4MDAxM0YxM0Y4OTBCNkZDNDgxNUMwMDAwNzE1RTA1QUVCRkMwMEQ4MUYKK0UwRUIwRkMwNDg0ODEzMDM0OTEzMDAxNjAwNDhDOUZDQTY3RkEyNkM3RTEzRjBFQTFGRkNFQkZGQzA2QzEzRkU2Q0VCRkZDMAorNkMxNEYwNkMxNEZDNkM2QzdGNkQ3RjAxMDcxNDgwRDkwMDdGMTNDMDAyMDMxM0UwRUMwMDdGRUQxRkYwMTUwRkVEMDdGOEEyCisxNTAzQTYwMDQwRUMwN0YwMTI3MDAwNzgxNDBGMDA3RTE1RTBEOEZGQzAxMzNGOTAzOUZDMDFGRkMwOTBCNjEyODA2QzE1MDAKKzAwMUY1QzAwMDM1Q0M2NkMxM0YwMDEwNzkwQzdGQzI1Mzc3REI1MkM+STxFQjdGODBBRkI3MTI4MEE2MjYwMDdGODBDN0ZDCitCM0IzNkUxMzQwRUQwMUMwOTAzODNGRTAwMzkxMzhGMDFGRTA5MUI1RkM3RjZEMTQ4MEVERkUwMDAxMDMxM0YwNkQ5MEM3RkMKKzIzNDQ3RUMyMjk+STxCNDE1RkZCM0IzQTI1REEyNURBMjVENkQ1QjAwN0Y1QzZEMTM3RjkwMzhGODAzRkU2Q0I1NUE1RDZDCisxNEUwNkMxNDgwMDAwMzQ5NUFDNjAxRTAxMzAwMjgzNTc3QjMzQj5JPDAwRkUxNkZFN0U2Q0VEMDFGQ0EyN0YwMDNGRUQwMworRjg3RjAwMUYxNTA3MTdGMDZDN0VFRTBGRTA3RjEyMDc2REVDMUZDMDEyMDNFRTNGODA3RjEyMDE2REVDN0YwMDEyMDAxNkZFCisxMzdGQTI2RTQ4NUExMzNGNUU5MDM4MUZDMDAzQTIwMTBGNUNFQ0UwMDc1RUVCMDdGMDE1MEYwMTAzNUMxNEY4NEI1QTEzMDEKKzE0RkMwMTAwNDlDN0ZDQTIxNDdFMTU3RUEyRUMzRTdDMTQzRjE0MUY1RDE0MEY1REEyMTQwNzVEQTI1RDE0MEZBMjVEMTQxRgorOTJDOEZDNUNBMjE0M0UxNDdFMTQ3QzE0RkNBMjQ5NUFBMjM4MzAwM0YwRUEzRTA3MzgzRkZGRTA1Q0EyNUM5MUM5RkNFQTA3CitGQzJGNEM3RUIzMzQ+MTIxIEQ8OTAzOTdGQzAwM0ZFQTk5MENBRkNBQ0VDMEZGMDkxQjVGQzAxMDMxNEMwMDEwRjE0RjA0OQorODA0OTgwOTAzOTdGRjAwRkZFOTAzOUZGODAwMUZGNDg5MEM3MTM4MEQ4MDNGQ0VDM0ZDMDQ4NDhFQzFGRTA0OTE0MEY0ODQ4CitFQzA3RjBBMjQ4NDhFQzAzRjg0OTE0MDEwMDNGMTZGQ0EyNDhDOTEyRkVBMzAwN0UxNjdFMDBGRTE2N0ZBQjZDMTZGRjZDMTYKK0ZFQTM2RDE0MDEwMDNGMTZGQzZEMTQwMzAwMUYxNkY4NkQxNDA3NkM2Q0VDMEZGMEEyNkM2Q0VDMUZFMDZDNkNFQzNGQzAwMQorRkYxNEZGNkNEOUMwMDMxMzgwNkNEOUYwMEYxMzAwNkRCNTVBMDExRjE0Rjg2RDVDMDEwMzE0QzAwMTAwOTFDN0ZDRUMxRkY4CiszMDRDN0NDQTM5PjI0NiBEIEUKKyVFbmREVklQU0JpdG1hcEZvbnQKKyVEVklQU0JpdG1hcEZvbnQ6IEZ0IGVjc2kxMjAwIDEyIDgKKy9GdCA4IDExNiBkZjxFQTNGQzBFQTdGODBBNUVBRkYwMEEyMEEwODc3ODcxQj40NiBEPEVEN0Y4MDkxMzgwM0ZGRjAwMjBGCisxM0ZDMDIzRjdGNEE3RjkxQjYxMjgwMDEwMzEzODE5MDNBMDdGQzAwN0ZDMDRBMTMzRkQ5MEZFMEVCMUZFMDQ5NDgxMzBGNDkKKzVBQTI0OUM3RUEwN0YwMTM3RTEzRkU1QjEyMDE1QjEyMDNBMjQ4NUFBMzQ4NUExN0UwQTI0OTE0MEYxMjFGQTQ0ODQ4RUMxRgorQzBBNDQ4QzhFQTNGODBBNUVFN0YwMDEyRkVBMjE2RkVBMzRCNUFBMzRCNUFBMjRCNUFBMjRCNUFBMjZDNEE1QTZDNEE1QTE1Cis3RjZENDlDN0ZDNkM2QzQ4NUE5MDM4RTAwN0ZDOTAzOEY4MUZGODZDQjU1QTZDNUM2QzVDNkM5MUM4RkNDNjEzRkNFQjFGRTAKKzJDNDU3N0MyMzE+NDggRDxFRDAzRkU5MjM4MUZGRkMwMDM3RjEzRjA0QUI1MTJFMDE0MDc1QzkxMzgzRkZDMDM5MTM5N0ZFMAorMDA2MERBRkY4MDEzMDA0OTkwQzhGQ0VCMDNGQzQ5NUE0OTVBNUMxMzFGNDk1QTQ5NUE5MUM5RkM1QjVCMTIwMTQ5MTMwODAwCiswMzkwMzgwM0ZGODBEOUY4MUYxM0UwMDAwNzAxN0Y3RjQ5QjU3RUVBMEZGMzAxRjc4MDkwMzhFRkUwMEYzQTFGRkY4MDAzRkUKK0VDMDAwMTQ5ODA0ODQ4N0Y1QjVCNUIwMDdGRUQ3RjgwNUJBMjQ5MTUwMDVFQTM0OEM4RkNBMzRCNUFBMzVFMTUwM0EyNEI1QQorQTI0QjVBN0U0QjVBNkQ0OTVBNEI1QTAwM0YxNEZGNkQ0ODkwQzdGQzZDNkM0ODVBOTAzOEY4MUZGQzZDQjUxMkYwNkM1QzZDCis1QzZDOTFDOEZDNkMxM0ZDRUIxRkUwMkM0NTc3QzIzMT41NCBEPDQ5QjYxMkYwNDkxNUZFRUZGRkMwMThGMDg0NDk4MjAyRjgKK0M3NkM3RUVGMEZGRjA1MDMxMzgwMTcwMDQ5NDhFRDdGQzBBMkYwM0ZFMEEzNDk0ODE1MUZBMzE4M0YxOUMwNDk1QTE4N0YxOQorODAxOEZGNDk0ODRBMTMwMDRENUExNzA3NEQ1QUVGM0ZGODQ5QzhCNDVBMDQwRjEzQzA5MUI3NUE0REM3RkMxN0Y4NDgxNkUwCis5NEM4RkMxNkZDOTAzOEZFMDAwMTQ4NDg4MEEyMTUwMDgyODI0ODQ4ODFBMjE2M0Y4M0EyNDg0ODE0MUY4M0EyNzA3RUEyNDgKKzVBNzA3RUEyMTYwMzQ4NDg4MUEyMTYwMTgzQTI0ODQ4NkU3RUEzNzE3RUEyNDhDOUZDNzE3RTNCNDU3N0M0M0Y+ODIKK0Q8RUMwRkZDOTFCNTEyODAwMTAzMTRDMDAxMUYxNEYwNDkxNEY4QTI5MDM5N0ZFMDBGRkM5MTM4MDAwM0ZFMTM3ODAxNjAxMworMDE5MEM3RkMxNkZGODFBM0VEMDFGRUE1RUQwM0ZDRUMwRkZGNDlCNUZDMTMwRjEzM0Y5MEI2MTJGODAwMDNFQkZDMDc0ODEzCis4MDM4MEZGQzAwRUExRkYwRDgzRkMwRUIwRkYwNUI0OEM3RkNBMjAwRkVFQzFGRTBBMjE1M0Y3RTE1RkZEOTgwMDMxM0MwMzgKKzdGRjAxRjkwQjZGQ0EyNkMxNDNGNkM5MDM4RkM3RjgwNkMxM0UwRDgwM0ZFQzhGQzI4MkY3QUFEMkY+OTcKK0Q8RUMwN0Y4RUMzRkZFOTFCNTEyODAwMTAzMTRDMDQ5MTRFMDQ5MTRGMDkwMzgzRkY4MUY5MDM5N0ZDMDA3Rjg5MDM4RkY4MAorMDM5MDM4RkUwMDAxNDg1QTQ4NDhFQjAwRkM0ODVBQTI0ODVBNDkxNDdDMTIxRjVCNDhCNjEyRkMxNkY4QTI1QUEzMDA3RUM5CitGQzEyRkVBODEyN0ZBMzZEMTQ0MDZDNkNFQjAxQzA2RDEzMDc2QzZDRUIzRjgwMzkwRkZDMDFGRjkwQjZGQzZDMTUwMDZDMTQKK0ZDQzYxNEYwMDEzRjEzODBEOTBGRkNDN0ZDMjYyRjc5QUQyQj4xMDEgRDxFQjAxRkVBNUVCMDNGQ0E0RUIwN0Y4QTVFQjBGCitGMEE1RUIxRkUwQTVFQjNGQzBBNEVCN0Y4MEE1RUJGRjAwQTU0ODVBQTQ0ODVBQTU0ODVBQTU0ODVBQTU0ODVBQTQ0ODVBQTUKKzQ4NUFBNTQ4QzdGQ0EyMTc0OTc5QzgxNz4xMDggRDxFQzFGRjg5MUI1RkMwMTAzMTRDMDAxMEYxNEYwNDkxNEY4NDkxNEYwCis5MDM4N0ZDMDFGOTAzOEZGMDAwMzQ5RUIwMEUwNDg0ODE0NjAxNjAwNDg1QUE0N0ZBMjdGRUJGRkUwNkMxM0ZFRUNGRkMwNkMKKzE0RjA2RDdGNkQ3RjZEN0YwMTA3N0YxMzAwMDIwNzEzODAxNDAxRUMwMDdGQTIxNTNGQTNFRDdGMDBBMjEyMjAwMDMwMTRGRQorMDA3QzEzMDEwMDdGNDk1QTkwMzhFMDFGRjhCNjVBNUQ2QzVDMDAxRjVDMDAwNzQ5QzdGQzM4MDA3RkUwMjUyRjdDQUQyNT4KKzExNSBEIEUKKyVFbmREVklQU0JpdG1hcEZvbnQKKyVEVklQU0JpdG1hcEZvbnQ6IEZ1IGVjc3MyNDg4IDI0Ljg4IDE1CisvRnUgMTUgMTIyIGRmWzxFQUZGRTBCM0IzQjNCM0IzQjNCM0E0OTBCQjEyODBBQT43MyAxNDAKKzEwOCAyNjcgMTAyIDc2IERbPEQ4RkZGRTlBMzgxRkZGQzA2RDY1QTM2RTY0QTM2RTk5QjVGQ0EyNkU2M0EyMDFERjY1NkUxQgorMDMwMUNGNjVBMjZFMUIwN0EyRDlDN0ZDNTE1QUEzRDlDM0ZFNTE1QUEzRDlDMUZGNTE1QUEzMDFDMDZENTA1QUEyNkYxQUZGCiswMjdGNjRBMjZGNjEwMjNGNjRBMjZGNjEwMjFGNjM2RjE5MDcwMjBGNjNBMjZGMTkwRjAyMDc2M0EyNkYxOTFGMDIwMzYzNkYKKzE5M0ZBMjZFNjM3MDE4N0ZBMjZFNjM3MDE4RkYwMzdGNjJBMjcwNUYwMzNGOTdDN0ZDNzA1RkEyMDMxRjYxNzAxNzA3QTIwMworMEY2MTcwMTcwRkEyNkY2QzRENUFBMjAzMDM2MTcwMTczRkEyNkY2MTcxMTY3RkEyNkY2MTcxMTZGRjA0N0Y2MDcxNURBMjA0CiszRjk1QzhGQzcxNURBMjA0MUY1RjcxMTUwN0EyMDQwRjVGNzExNTBGMDQwNzVGNzExNTFGQTIwNDAzNUY3MTE1M0ZBMjcwNUYKKzcyMTQ3RkEyNzA1RjcyMTRGRjA1N0Y1RTcyNUJBMjA1M0Y5M0M5RkM3MjVCQTIwNTFGNUQ3MjEzMDcwNTBGNURBMjcyMTMwRgorMDUwNzVEQTI3MjEzMUYwNTAzNUQ3MjEzM0Y3MTVEQTJGMTgwN0Y3MTVEQTJGMUMwRkYwNjdGNUNBMjE5RTEwNjNGOTFDQUZDCitBMjk1MzgxRkYzRkVBMzA2MEY1QjE5RkZBMjcyNUJBMjcyNUJBMzcyNUJBMzcyNUI5NkNDRkNBMz4xMjIKKzE0MCAxMDcgMjY3IDE2NSBJWzw5NTM4MEZGRkMwNERCNTEyRkUwNTBGRUNGRkMwMDU3RjE1Rjg0Q0I3MTJGRTA0MDc3MDdFCiswNDFGMTdFMDA0N0YxN0Y4NEJCOTEyRkU0QjkxMjZGODAwN0Y3RjRCMDI4MDAxMDc4MDAzMUYwMUZDQzgxNEUwNEIwMUUwMDMKKzFGN0Y0QjAxODAwMzA3N0Y0QjQ4QzkwMDAxN0Y0QTQ5NzA3RjRBMDFGMEVGM0ZGRjRBNDk3MTdGNEE0OTcxN0Y0QTkwQ0IwMAorMDM3RjRBNDg3MjdGNEE0ODcyN0Y0QTQ4NzM3RTRCMTkzRjQ5NDk3MzdFNDk4ODRCODU0OTQ5NzM3RjQ5OTBDRDZDN0ZBMjQ5Cis0ODc0N0Y0OTQ4NzQ3RkEyNDk0ODc1N0VBMjQ5NDg3NTdFNEExQjFGNDg4QUEyNEExQjBGNDg4QTRBODc0ODFGODA5MUNGN0UKK0EyNDgxRkMwNDk4OEEyMDAxRjFGRTBBMjQ5ODhBMjAwM0YxRkYwQTI0OTFEN0ZBMzAwN0YxRkY4QTQ0OTFEM0ZBMzAwRkYxRgorRkNCMDZEMUQ3RkEzMDA3RjFGRjhBNTZEMURGRkEyMDAzRjFGRjBBMzZENjQwMDFGMUZFMEEyNkQ2NEEyNkMxRkMwQTI2RTYzCis2QzFGODA2RTYzQTI2QzFGMDA2RTYzQTI2QzZENTE1QUEyNkM2RDUxNUFBMjZENkM1MTVBQTI2RDZDNTA1QkEyNkQ2QzUwNUIKKzZENkQ0RjVCQTI2RDZENEY1QjZGNjE2RDZENEY5MEM3RkM2RDZENEY1QTZENjQ2RjE5RkY2RTZDNEU1QjZFNkM0RTVCNkU2RAorNEQ1QjZFMDFFMDA1MUY1QjZFNkQ0RDVCNkU2RDREOTBDOEZDNkUwMUZFNEM0ODVBNkU2RDRDNUI2RjAxQzAwMzBGNUI2RjAxCitGMDAzM0Y1QjZGMDFGQzkyQjU1QTAzMDdEOUZGODAwMTA3MTQ4MDZGMDJGODAxN0Y5MUM5RkM2RjkxQjc1QTZGNkMxN0Y4MDQKKzFGMTdFMDA0MDcxNzgwMDQwMTRDQ0FGQzcwNkMxNUY4MDUwRjE1QzAwNTAxNEFDQkZDREQwMDBGMTNDMD4xMTgKKzE0NiAxMTggMjcwIDEzOSA3OSBEWzxCOTEyRTAxOEZGMTlFMDE5RkMxOUZGMUFDMDFBRjAxQUZDODYwMUUwQzk2RTdFMDYwNworODAwNjAwODAwNzNGN0YwNzBGN0YwNzAzN0YwNzAwN0Y3NDdFODYwODBGMTM4MDc0MTNDMDc0MTNFMEEyNzQxM0YwODYxQ0Y4CisxQjdGRjMzRkZDQTIxQjFGMUNGRUEyMUIwRkEzMUNGRkEyODdBNzYzQTIxQ0ZFQTMxQjFGQTIxQ0ZDMUIzRkEyRjM3RkY4MUIKK0ZGMUNGMDYyNTAxM0UwQTI1MDEzQzA1MDEzODAwODNGMTMwMDYyNTA1QTA3MDM1QjA3MEY1QjA3M0Y1Qjk2QjU1QTA2MDc1QworOTVCNjVBOTBCQTQ4QzdGQzYyMUFGMDFBQzA5N0M4RkMxOUZDMTlFMDk2QzlGQzE4RTAwMUUwQ0VGQ0IzQjNCM0E3Pjg4CisxNDAgMTA3IDI2NyAxMjAgSVs8OTMzODA3RkZGODkzQjYxMkUwMDMwNzE1RkUwMzNGRURGRkMwOTJCODEyRjAwMjAzMTdGQworMDIwRjE3RkY0QTE4QzAwMjdGMThGMDkxQkExMkZDNDk5MTI2RkMwMDA3ODA0OTAyQzBFQjAwM0Y0OTQ5QzgxMjAzNDkwMUYwCiswMzAwNUI0OTQ5MTYxRjQ5MDE4MDE2MDc0OTQ4Q0ExMjAzNEExNzAwNDk0ODE4M0M0ODQ5MTgxODRBOTVDN0ZDNDg1QkEyNDgKKzVCOTFDRUZDNUE1QkEyNDg1QUE0NDg1QUE5N0ZBMjEyMUZBMjdGQTI2QzdFQTI4MDZDN0ZBMjZDN0Y4MDZDN0YxNEZFNkM3RgorNkQ3RjZEMTNFMDE1Rjg2RDEzRkU2REVCRkZFMDZEMTRGQzZERUNGRkMwNkQxNUZDNkQ2Q0VDRkY4MDZFMTVGODZFRURGRjgwCiswMjA3MTZGMDAyMDExNkZDNkU2QzE1RkYwMzFGMTZDMDAzMDM4MkRCMDA3RjE1RjgwNDA3ODFEQzAwN0Y4MDA1MDc2RTdFMDUKKzAwODEwNjBGODAwNjAxODBGMDAwM0YwNzBGN0Y3MzdGMDcwMTdGNzM3Rjg2MDgxRjEzODBBMjc0MTNDMDg2NzQxM0UwODYxQworRjA4NkEyRjM3RkY4QTMxQjNGQTIxQ0ZDMUIxRkFCRjMzRkY4QTRGMzdGRjBBMjFCRkYxQ0UwNjJBMjAwMzA0RjEzQzAxMjc4CiswMDdDNEYxMzgwMDA3RjYxMDFDMDRFMTMwMDZENEU1QTAxRjgxODdGRDhGRkZFNEU1QTZENkMwNDAzNUIwMkYwNEM1QjZDMDEKK0ZFMDQxRjVCMDAxRkQ5RkZDMDAzN0Y1QjZDMDJGQzAyMDNCNTVBMDAwM0RBRkZGMDAxM0Y5MUM3RkNDNjkyQjc1QTZENjAwMQorMUYxOEYwMDEwMzYwMDEwMDE4ODAwMjNGNENDOEZDMDIwNzE2RjhEQTAwN0YxNUUwMDMwNzRBQzlGQ0RCMDAxRjEzRTA+ODYKKzE0NiAxMjAgMjcwIDEwNSA4MyBEPEVEN0ZGRTAyMUZCNTEyRTA5MUI2MTJGODAxMDcxNUZFMDEzRjgxOTBCODEyQzAwMDAzCis4MzAwMEY4MzQ4ODNEQjAwMDM3RjAyRTA5MDM4MDA3RkZFOTFDODZDN0VEODBGRjgwMzBGMTM4MDAxRTA4MTAxODA2RjEzQzAKKzAwMEVDOUZDMDAwODcwMTNFMENCRkMxOUYwMTg3RkEyRjAzRkY4QTRGMDFGRkNBRkVGM0ZGRjA0M0ZCNUZDMDMwRkI2RkMxNQorN0YwMjA3QjdGQzE0MUY5MUI4RkMxMzAzMDEwRjkxMzhGQzAwMUY0OTkxQzdGQzQ5MTNGMDkwQjUxMjgwNDgwMUZDQzhGQzQ4CisxM0YwNDgxM0MwNDg5MEM5RkM1QjQ4NUE0ODVBNUI0ODVBNUJBMjEyRkY1QkE0MTgzRkEzNkQxNjdGMThGRjZDN0U1RjZENUQKKzZEMTUwRkQ4M0ZGRTVENkQ2QzE0N0Y2QzAxRTAwMTAzQjVGQzAyRkUwMTNGMTNERjZDOTBCNzEyOUY2Q0VFRkUxRjE3RkM2QworMTZGMDZDMTZDMDZDRURGRTAwMDEzRjE0RjA2RDkxQzdGQzAxMDMwMUMwOTFDN0ZDM0U1QTc1RDg1Qj45NworRDw5MjM4MDNGRjgwMDMzRjEzRjg5MkI1MTJGRTAyMDM2RTdFMDIwRjE1RTAwMjNGMTVGODRBODE5MUI3N0U0OTgyNDk0OUM2Cis4MDQ5MDFFMDAxMUY3RjQ5MDE4MDAxMDM3RjQ5OTBDNzdFRDkzRkZDNkU2QzdFNDk0ODZGN0U0QTE1MUY0OTQ4NkY3RTQ4NDkKKzE1MDc0QTZGN0U0ODkwQzlGQzQ5MTYwMTAwMDc3MTdFNUIwMDBGODQ0OTE4ODAxMjFGNDkxNzNGQTI0ODQ4MThDMDE5MUZBMgorNUIxMjdGQTI0OUVGMEZFMEEyOTBCQUZDQkJGQ0E3OTBDREZDQTU3RkEzMTI3RkEzN0ZBMzEyM0Y3RkEyNkM3RUEzNkM3RTdGCisxMjA3N0YxMjAzN0Y2QzZEMTcyMDZFMTc2MDZDNkRFRTAxRTA2RDZDMTYwMzZFMTYwRjZENkNFRTFGRjA2RDZDMTY3RjZENkMKKzZDRUMwMUZGNkQwMUUwMTQwRjAzRjgwMjdGMTNFMDAxMDE5MDI2RkY4MDBGQjUxMkMwNkQ5MUI3MTIwMDZFNUU2RTE2RjgwMgorMEYxNkUwNkU1RTAyMDE0QkM3RkM2RTZDMTRGODAzMEYxNDgwMDMwMDAxRjBDOEZDNDQ1QTc3RDg1ND4xMDEKK0RbPEVBRkZFMEIzQjNCM0E0RUVGRkYwMDMwRjEzRkYwMzdGMTRFMDRBQjYxMkY4NEE4MTAyMEYxNUZGNEExNjgwNEExNkMwCis5MUI4MTJFMDAxRTFFQkYwMDMwMUUzOTAyNjgwMDAzRjEzRjA0QUM3MDAwNzEzRjhEOUU3Rjg4MEQ5RUZGMDE0MDBEOUZGRTAKK0VEN0ZGQzVDNEFFRDNGRkUxODFGOTFDOUZDNDkxNjBGQTI0OTE3RkZBMjg0NUJBMzVCQTQ1QkIzQjNCM0EzPjY0CisxNDYgMTEyIDI3MyA5NyAxMDQgRFs8RUFGRkUwQjNCM0IzQjNCM0IzQjNCM0EyPjExIDE0NgorMTEyIDI3MyA0NCAxMDggRDxFRUZGRjBEOEZGRTAwMTBGMTNGRjAzN0YxNEUwNEFCNjEyRjg0QTgxMDIwRjE1RkY0QTE2ODAKKzRBMTZDMDkxQjgxMkUwMDFFMUVCRjAwMzAxRTM5MDI2ODAwMDNGMTNGMDRBQzcwMDA3MTNGOEQ5RTdGODgwRDlFRkYwMTQwMAorRDlGRkUwRUQ3RkZDNUM0QUVEM0ZGRTE4MUY5MUM5RkM0OTE2MEZBMjQ5MTdGRkEyODQ1QkEzNUJBNDVCQjNCM0IzQTM0MDU4Cis3MEQ3NjE+MTEwIEQ8RUU3RkYwMDMwN0I1RkMwMzNGMTRFMDkyQjYxMkY4MDIwMzE1RkUwMjBGNkY3RTRBODIwMjdGMTZGMAorOTFCODdFNDlEQTgwMEY3RjQ5OTAyNkZDMDAwMTdGNDkwMUUwOTAzODAwM0ZGRjQ5MDE4MDAyMEY3RjQ5NDhDODAwMDM3RjQ5Cis0ODZGN0Y0QTgxNDk0ODcwN0U0OTQ4NzA3RTRBMTYxRjQ4NDk3MDdFNDg5MENBNkM3RTQ5MTcwMzAwMDc4NTQ5ODMwMDBGMUEKKzgwNDk4M0EyNDg0OEYwN0ZDMEEyNDg0OEYwM0ZFMEEzNDkxODFGMDA3RjFBRjBBNDQ5MTgwRjAwRkYxQUY4QUQ2RDE4MUZBMgorMDA3RjFBRjBBMzZEMTgzRkEyMDAzRjFBRTBBMjZEMTg3RkEyNkM2Q0YwRkZDMEEyNkM2QzREMTM4MEEyNkQ1RjAwMDcxQTAwCis2RDVGNkM2RDRDNUE2QzYxNkUxNjFGNkM2RDRDNUE2RDZDNEM1QTZFMTZGRjZENkM0QjVCNkRCNDAzMDc1QjZEMDFDMDAyMUYKKzVCNkQ2RDRBOTBDN0ZDNkQwMUZDNDlCNDVBNkQ5MDI2RkY4MDBGNUI2RDkxQjY1QTZFNUU2RTVFMDIwRjE2ODAwMjAzNEJDOAorRkMwMjAwMTVGODAzM0YxNEUwMDMwNzkxQzlGQzkyMzgwMDdGRjA0RDVBNzhEODVFPkk8RUUzRkY4RDhGRkUwMDEwN0I1RkMKKzAzM0YxNEMwOTJCNjEyRjAwMjAzODEwMjBGODEwMjNGMTVGRjRBODI5MUI4N0UwMUUzRUJGMDAzMDFFNzkwMjY4MDAwN0Y3RgorRDlFRkZFQzcwMDBGN0ZEOUZGRjg2RTdGMDJFMDAyMDE3RjRBODA0QTZGN0U5MUM5MTIxRjQ5ODM0OTgyNDk3MDEzODA4NDQ5CisxOEMwODQ0OTcwMTNFMEEyMTk3RjFBRjAxOTNGQTNGMTFGRjhBMzE5MEZBMzFBRkNBMjE5MDdBRDE5MEYxQUY4QTQxOTFGQTIKKzFBRjAxOTNGQTIxOTdGMUFFMDE5RkYxQUMwNkQ1RUEyNkQ0QzEzODA2MDZENEMxMzAwQTI2RDRDNUE2RDE2M0Y2RTRCNUE2RQorNEE0ODVBNkU0QTVCNkUxNDBGRDlFRkZDMDIzRjVCRDlFN0ZGOTFCNTVBMDFFM0Q5RTAwRjVDMDFFMTkwQjdDN0ZDMDFFMDVFCiswMjNGNUQ2RTVEMDIwNzE1RTA2RTE1ODAwMjAwOTJDOEZDMDMxRjEzRjgwMzAxMTNDMDkyQ0JGQ0IzQjNBMzQ2ODA3MEQ3NjEKKz5JPEVDN0ZGMEIzQTdCQUZDQTlDN0Q4N0ZGMEM5RkNCM0IzQjNBNjgxQTMwMjNGMTY4MDZGMTQwMUYwMDdDMDZGMTQxRjE4Cis3RjkxM0ExRkZGODAwMUZGRENDMDFGMTNFMDZFOTBCNkZDQTI2RTE2ODBGMEZFMDA2RTE1Rjg2RTE1RTA2RTkyQzdGQzAzM0YKKzEzRjBEQjBGRkVDOEZDM0I3MTdERUY0ND4xMTYgRDxEOEZGRTBFRTA3RkZCM0IzQjNBODYwQTM2MEEyNjBBMjYwNkQ5M0I1CitGQzVGMDA3RjVFNkQ1RDVGNkRFRDNGRjc2Q0I0RURGRkU3MDJDMDAxMDMxM0M3NkMwMUY4MDEzRjEzODc5MUI3MTIwNzZDMTYKK0ZFNkMxNkY4MTdFMDZDMTY4MEM2RURGRTAwNkQxNEYwMDExRjE0ODAwMTAxMDFGMEM5RkM0MDU4NzBENjYxPkk8RDhGRkMwCitGMDAzRkY3RjAwN0ZGMTA3RkU3RjAwM0YxOTBGNkQxOUZDQTIwMDFGRjExRkY4N0YwMDBGMTkzRjZEMTlGMDEyMDc2REYwN0YKK0UwQTI2QzE5RkY2RTE4QzA3RTZFNEMxMzgwN0U2RTVFMUIwMDEzN0Y2RTRDNUExMzNGNkUxNjBGMDExRjYwODA0RjVBMTMwRgorNkUxNjNGMDEwNzYwODA2RDRENUE4MUEyNkQ0RDVBODE2RDRDNUI4MTE0N0Y0RTkwQzdGQzgxMDIzRjVENkY1RDE0MUY2RjRBCis1QTE0MEZBMjZGNEE1QTE0MDc2RjRBNUE4MEEyNkU2RDQ5NUFBMjcwNUM2RTE1RkZBMjZGNkM0ODVCQTJEQjNGRjA5MUM4RkMKKzVGMTUxRjA0Rjg1QjE3MDdEQjBGRkM1QkEyMDMwNzEzMEYwNEZFNUIxNTAzNEQ1QTE2RkY4MTRENUE2RjEzQkY2MEVFN0ZGRgorQTI2MDgyOTVDOUZDODJBMjcwNUFBMjVGMTYwN0EyNEM1QUEyNUYxNjFGQTI0QzVBQTI1RjE2N0ZBMjRDNUFBMjk0Q0FGQzVECitBMjRCNUFBMjVFMTUwN0EyNEI1QUEyNEI1QUEyNEI1QUEyNEI1QUEyNEI1QTAwMUM1QjI2MUZFMDA3OTBDQkZDOTBCNkZDNUQKKzVENUQ3RTE1RTA1RDAwMDM1QzI2MDAwRkZDQ0NGQzUwODA3REQ2NTc+MTIxIEQgRQorJUVuZERWSVBTQml0bWFwRm9udAorZW5kCislJUVuZFByb2xvZworJSVCZWdpblNldHVwCislJUZlYXR1cmU6ICpSZXNvbHV0aW9uIDYwMGRwaQorVGVYRGljdCBiZWdpbgorJSVQYXBlclNpemU6IEE0CisgZW5kCislJUVuZFNldHVwCislJVBhZ2U6IDEgMQorVGVYRGljdCBiZWdpbiAxIDAgYm9wIDAgODMgMzkwMSA5IHYgMTg5MCAzNTEgYSBGdShQeXRob24pNjQKK2IoT3ApNSBiKGVuU1NMKTY0IGIoTWFudWFsKTM0NDMgNTIwIHkgRnQoUmVsZWFzZSkzMyBiKDAuNikzMTg5Cis4NzQgeSBGcyhNYSltKHJ0aW4payhTalwzNjZncmVuKTMyODYgMTIyOSB5IEZyKDE0dGgpMjgKK2IoTWFyYyluKGgpZSgyMDA1KTMzMDEgMTM3NSB5IEZxKG1hKW4ocnRpbkBzdHJha3QuY29tKTE3ODEKKzE1OTcgeSBGcChBYnN0cmFjdCkyMDggMTc0MSB5IEZvKFRoaXMpMzIgYihtbylyKGR1bGUpZihpcyloKGEpZyhyYXRoZXIpCitnKHRoaW4pZih3cmFwcClyKGVyKWgoYXJvdW5kKWcoXChhKWcoc3Vic2V0KWYob2YpNiBiKFwpKTMyCitiKHRoZSlnKE9wKXIoZW5TU0wpZShsaWJyYXJ5KS02IGIoLik1MiBiKFdpdGgpMzIgYih0aGluKWYod3JhcHApcihlcikKKzIwOCAxODMzIHkoSSlkKG1lYW4paCh0aGF0KWYoYSlpKGxvdClmKG9mKWgodGhlKWYob2IpdChqZWN0KWgobWV0aG8pcgorKGRzKWUoZG8paChub3RoaW5nKWcobW9yZSlnKHRoYW4pZyhjYWxsaW5nKWgoYSlnKGNvcnJlc3ApcihvbmRpbmcpZworKGZ1bmN0aW9uKWYoaW4pZyh0aGUpMjA4IDE5MjQgeShPcClyKGVuU1NMKTI0IGIobGlicmFyeSktNgorYiguKTAgMjE5OCB5IEZzKENvbnRlbnRzKTAgMjM4MSB5IEZuKDEpNzcgYihJbiltKHRybylzKGR1Y3Rpb24pMzIwMQorYigyKTAgMjU2NCB5KDIpNzcgYihCdWlsZGluZykzMCBiKGFuZClpKEluc3RhbGxpbmcpMjc2NQorYigyKTEyNSAyNjYzIHkgRnIoMi4xKTgzIGIoQnVpbGRpbmcpMjggYih0aGUpZyhNbylyKGR1bGUpZyhvbilmKGEpZworKFVuaXgpaChTeXN0ZW0pODcgYiguKTQxIGIoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZgorKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLikKKzEzNCBiKDIpMTI1IDI3NjMgeSgyLjIpODMgYihCdWlsZGluZykyOCBiKHRoZSlnKE1vKXIoZHVsZSlnKG9uKWYoYSlnCisoV2luZG8pbih3cylnKFN5c3RlbSk1OSBiKC4pNDEgYiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKQoraCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLikxMzQKK2IoMykwIDI5NDYgeSBGbigzKTc3IGIgRm0oT3BlblNTTCkyOCBiIEZuKFwwMjYpMzMgYihQeXRob24pZihpbiltCisodGVyZmFjZSloKHRvKWUoT3ApcyhlblNTTCkyMDMwIGIoMykxMjUgMzA0NSB5IEZyKDMuMSk4MworYiBGbShjcnlwdG8pMjYgYiBGcihcMDI2KWgoR2VuZXJpYylnKGNyeXB0b2dyYXBoaWMpZihtbylyKGR1bGUpNzkKK2IoLik0MiBiKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4pCitoKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLikxMzQgYigzKTMxNQorMzE0NSB5KFg1MDkpMjcgYihvYik1IGIoamVjdHMpNzMgYiguKTQyIGIoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloCisoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKQoraCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmCisoLiloKC4pMTM0IGIoNSkzMTUgMzI0NCB5KFg1MDlOYW1lKTI3IGIob2IpNSBiKGplY3RzKTU3CitiKC4pNDEgYiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKQorZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWYoLiloCisoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pMTM0IGIoNikzMTUgMzM0NCB5KFg1MDlSZXEpMjcKK2Iob2IpNSBiKGplY3RzKTYwIGIoLik0MiBiKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZiguKWgKKyguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pCitmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pMTM0CitiKDYpMzE1IDM0NDQgeShYNTA5U3RvcmUpMjYgYihvYik1IGIoamVjdHMpNzggYiguKTQxCitiKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgKKyguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pCitmKC4paCguKWYoLiloKC4pZiguKWgoLikxMzQgYig2KTMxNSAzNTQzIHkoUEtleSkyOCBiKG9iKTUKK2IoamVjdHMpNTggYiguKTQyIGIoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWYoLiloCisoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKQorZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKTEzNAorYig3KTMxNSAzNjQzIHkoUEspbihDUzcpMjcgYihvYik1IGIoamVjdHMpNTkgYiguKTQxIGIoLiloKC4pZiguKWgoLilnCisoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKQoraCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmCisoLiloKC4pZiguKWgoLikxMzQgYig3KTMxNSAzNzQzIHkoUEspbihDUzEyKTI3IGIob2IpNQorYihqZWN0cyk4MSBiKC4pNDIgYiguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYKKyguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pCitmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKTEzNCBiKDcpMzE1CiszODQyIHkoWDUwOUV4dGVuc2lvbikyNyBiKG9iKTUgYihqZWN0cykxMDIgYiguKTQxIGIoLiloKC4pZiguKWgoLilmKC4paAorKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLikKK2YoLiloKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKTEzNAorYig3KTMxNSAzOTQyIHkoTmV0c2NhcClyKGVTUEtJKTI4IGIob2IpNSBiKGplY3RzKTU4IGIoLik0MgorYiguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmCisoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKQorZiguKWgoLilmKC4paCguKTEzNCBiKDcpMTI1IDQwNDEgeSgzLjIpODMgYiBGbShyYW5kKTI2CitiIEZyKFwwMjYpaShBbilnKGluKW4odGVyZmFjZSlmKHRvKWcodGhlKWgoT3ApcihlblNTTClnKHBzZXVkbylmCisocmFuZG9tKWcobiluKHVtKW4oYilyKGVyKWcoZ2VuZXJhdG9yKTUwIGIoLik0MSBiKC4paCguKWYoLiloKC4pZyguKWYKKyguKWgoLilmKC4paCguKWYoLiloKC4pMTM0IGIoOCkxMjUgNDE0MSB5KDMuMyk4MyBiIEZtKFNTTCkyNworYiBGcihcMDI2KWcoQW4paShpbiluKHRlcmZhY2UpZCh0bylpKHRoZSlnKFNTTC1zcClyKGVjaVwwMzRjKWYocGFydHMpZworKG9mKWgoT3ApcihlblNTTCk2NCBiKC4pNDIgYiguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWYoLikKK2goLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pMTM0IGIoOCkzMTUgNDI0MSB5KENvbiluKHRleHQpMjgKK2Iob2IpNSBiKGplY3RzKTk4IGIoLik0MiBiKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZiguKWgKKyguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pCitmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pOTMKK2IoMTApMzE1IDQzNDAgeShDb25uZWN0aW9uKTI3IGIob2IpNSBiKGplY3RzKTEwOCBiKC4pNDIKK2IoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZworKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLikKK2goLilmKC4paCguKWYoLiloKC4pOTMgYigxMSkwIDQ1MjMgeSBGbig0KTc3IGIoSW4pbSh0ZXJuYWxzKTMzMTAKK2IoMTMpMTI1IDQ2MjMgeSBGcig0LjEpODMgYihFeGNlcHRpb25zKWkoLik0MSBiKC4paCguKWYoLiloKC4pZiguKWgoLilnCisoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKQoraCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmCisoLiloKC4pZiguKWgoLik5MyBiKDEzKTEyNSA0NzIyIHkoNC4yKTgzIGIoQ2FsbGJhYyluKGtzKTY4CitiKC4pNDIgYiguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilmKC4paCguKQorZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilnKC4pZiguKWgoLilmCisoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLik5MworYigxMykxMjUgNDgyMiB5KDQuMyk4MyBiKEEpbihjZXNzaW5nKTI3IGIoU28pcihjKW4oayluKGV0KWcoTWV0aG8pcihkcykKKzgyIGIoLik0MiBiKC4pZiguKWgoLilmKC4paCguKWYoLiloKC4pZyguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmCisoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKWYoLiloKC4pZiguKWgoLilmKC4paCguKWcoLilmKC4paCguKQorZiguKWgoLilmKC4paCguKTkzIGIoMTQpcCAwIDQ5NjkgViBlb3AgZW5kCislJVBhZ2U6IDIgMgorVGVYRGljdCBiZWdpbiAyIDEgYm9wIDAgODUgYSBGcygxKTExNCBiKEludHJvKXMoZHVjdGlvbikwCiszMTQgeSBGcihUaGUpNDEgYihyZWFzb24pZih0aGlzKWkobW8pcihkdWxlKWcoZXhpc3RzKWYoYXQpZyhhbGwpZyhpcylnCisodGhhdCloKHRoZSlnKFNTTClmKHN1cHApcihvcnQpZyhpbiloKHRoZSlnKHNvKXIoYyluKGspbihldCllKG1vKXIKKyhkdWxlKWkoaW4pZih0aGUpaChQeXRob24pZygyLjEpMCA0MTQgeShkaXN0cmlidXRpb24pMjgKK2IoXCh3aGljKW4oaClmKGlzKWgod2hhdClmKHcpbihlKWgodXNlZCwpZihvZiloKGNvdXJzZSllKEkpaShjYW5ub3QpZgorKHNwKXIoZWFrKWcoZm9yKWcobGF0ZXIpZyh2KW4oZXJzaW9uc1wpKWYoaXMpaChzZXYpbihlcmVseSlmKGxpbWl0ZWQuKTAKKzU2MSB5KFdoZW4pZyhhc2tpbmcpZShhYilyKG91dClpKFNTTClmKG9uKWcodGhlKWgoY29tcC5sYW5nLnApbih5dGhvbillCisobmV3c2dyb3VwKWcoXChvciloKG9uKWcocCluKHl0aG9uLWxpc3RAcCluKHl0aG9uLm9yZ1wpKWUocClyKGVvcGxlKWoKKyh1c3VhbGx5KTAgNjYwIHkocClyKG9pbiluKHRlZCkzNyBiKHkpbihvdSlmKHRvKWcodGhlKWgoTTJDcnlwdG8pZihwYWMpCituKGspLTUgYihhZ2UuKTYyIGIoVGhlKTM3IGIoTTJDcnlwdG8uU1NMKWUobW8pcihkdWxlKWkoZG8pcihlcylnCisoaW1wbGVtZW4pbih0KWcoYSlmKGxvdCloKG9mKWYoT3ApcihlblNTTCdzKTAgNzYwIHkoZnVuY3Rpb25hbGl0KW4oeSljCisoYnV0KWcodW5mb3J0dW5hdGVseSlmKGl0cyloKGVycm9yKWQoaGFuZGxpbmcpaihzeXN0ZW0pZihkbylyKGVzKWcobm90KQoraChzZWVtKWYodG8paChiKXIoZSlnKFwwMzRuaXNoZWQsKWgoZXNwKXIoZWNpYWxseSllKGZvcilnKG5vbi0pMAorODYwIHkoYmxvKXIoYyluKGtpbmcpZihJL08uKWcoSSlnKHRoaW5rKWkodGhhdClmKG0pbih1YyluKGgpZihvZiloKHRoZSkKK2cocmVhc29uKWUoZm9yKWgodGhpcyloKGlzKWcodGhhdClnKE0yQ3J5cHRvKTI2NTkgODMwCit5IEZsKDEpMjcyNSA4NjAgeSBGcihpcylnKGRldiluKGVsb3ApcihlZClmKHVzaW5nKWgoU1dJRykzNjQ3Cis4MzAgeSBGbCgyKTM2ODQgODYwIHkgRnIoLilnKFRoaXMpMCA5NTkgeShtYWspbihlcykyMgorYihpdClpKGEpbih3a3cpbihhcmQpZCh0bylqKGNyZWF0ZSllKGZ1bmN0aW9ucylpKHRoYXQpZihlLmcuKTM1CitiKGNhbikyMyBiKHJldHVybilnKGIpcihvdGgpaChhbilmKGluKW4odGVnZXIpZyhhbmQpZyhOVUxMKWcoc2luY2UpaAorKFwoYXMpZihmYXIpZihhcyloKEkpaChrbm8pbih3XCkpMCAxMDU5IHkoeSluKG91KTMwIGIoYmFzaWNhbGx5KWcKKyh3cml0ZSlnKEMpaChmdW5jdGlvbnMpZyhhbmQpZyhTV0lHKWcobWFrKW4oZXMpZih3cmFwcClyKGVyKWYKKyhmdW5jdGlvbnMpaSh0aGF0KWgocGFyc2VzKWQodGhlKWkoUHl0aG9uKWcoYXJndW1lbiluKHQpZihsaXN0KTAKKzExNTkgeShhbmQpZChjYWxscylnKHkpbihvdXIpZyhDKWcoZnVuY3Rpb24sKWgoYW5kKWcoXDAzNG5hbGx5KWYKKyh0cmFuc2Zvcm1zKWYoeSluKG91cilnKHJldHVybilpKHYpLTUgYihhbHVlKTI3IGIodG8pZyhhKWgoUHl0aG9uKWcob2IpCis1IGIoamVjdC4pMCAxNDgwIHkgRnMoMikxMTQgYihCdWlsZGluZykzOCBiKGFuZClmKEluc3RhbGxpbmcpMAorMTcwOSB5IEZyKFRoZXNlKTI3IGIoaW5zdHJ1Y3Rpb25zKWcoY2FuKWcoYWxzbylnKGIpcihlKWgoZm91bmQpZyhpbilnCisodGhlKWcoXDAzNGxlKWYgRm0oSU5TVEFMTClwIEZyKC4pMCAxODU2IHkoSSlqKGhhKW4odiluKGUpZih0ZXN0ZWQpaAorKHRoaXMpaChvbilmKERlYmlhbilnKExpbiluKHV4KWcoc3lzdGVtcylmKFwodyluKG8pcihvKXIoZHkpaChhbmQpZworKHNpZFwpLCloKFNvbGFyaXMpZSgyLjYpZyhhbmQpaCgyLjcuKTQzIGIoT3RoZXJzKTMwIGIoaGEpbih2KW4oZSlmCisoc3VjY2Vzc2Z1bGx5KTAgMTk1NiB5KGNvbXBpbGVkKWUoaXQpaChvbilnKFdpbmRvKW4od3MpZihhbmQpZyhOVC4pMAorMjIzNSB5IEZrKDIuMSk5NyBiKEJ1aWxkaW5nKTMyIGIodGhlKWgoTW8pcyhkdWxlKWYob24pZyhhKWgoVW5peClmCisoU3lzdGVtKTAgMjQzNiB5IEZyKHApbih5T3ApcihlblNTTCkyNyBiKHVzZXMpaChkaXN0dXRpbHMsKWcoc28pZgorKHRoZXJlKWcocmVhbGx5KWYoc2hvdWxkbid0KWkoYilyKGUpZyhhbiluKHkpZihwcm9ibGVtcy4pMzYKK2IoVCktNyBiKG8pMjcgYihidWlsZCloKHRoZSlnKGxpYnJhcnk6KTIzNiAyNjc0IHkgRmoocHl0aG9uKTQxCitiKHNldHVwLnB5KWcoYnVpbGQpMCAyOTYyIHkgRnIoSWYpMzAgYih5KW4ob3VyKWYoT3ApcihlblNTTCloKGhlYWRlcilmCisoXDAzNGxlcyloKGFyZW4ndClmKGluKWggRm0oL3Vzci9pbmNsdWRlKXAgRnIoLCljKHkpbihvdSlqKG1hKW4oeSlnCisobmVlZCloKHRvKWcoc3VwcGx5KWcodGhlKWcgRm0oLUkpZiBGcihcMDM1YWcpaCh0bylmKGxldClpKHRoZSlmKHNldHVwKQorMCAzMDYxIHkoc2NyaXB0KTI1IGIoa25vKW4odylnKHdoZXJlKWYodG8paShsbylyKG9rLikzNQorYihUaGUpMjUgYihzYW1lKWcoZ28pcihlcylnKGZvcilmKHRoZSlpKGxpYnJhcmllcyllKG9mKWgoY291cnNlLClnKHVzZSkKK2codGhlKWggRm0oLUwpZiBGcihcMDM1YWcuKTM1IGIoTm90ZSkyNSBiKHRoYXQpaCBGbShidWlsZClkCitGcih3KW4ob24ndCkwIDMxNjEgeShhY2NlcHQpayh0aGVzZSloKFwwMzVhZ3MsKWUoc28paCh5KW4ob3UpZyhoYSluKHYpbgorKGUpZih0bylpKHJ1bilmKFwwMzRyc3QpaCBGbShidWlsZF9leHQpMjMgYiBGcihhbmQpMjgKK2IodGhlbilnIEZtKGJ1aWxkKXAgRnIoISkzNSBiKEV4YW1wbGU6KTIzNiAzMzk5IHkgRmoocHl0aG9uKTQxCitiKHNldHVwLnB5KWcoYnVpbGRfZXh0KWcoLUkvdXNyL2xvY2FsL3NzbC9pbmNsdWRlKWoKKygtTC91c3IvbG9jYWwvc3NsL2xpYikyMzYgMzQ5MCB5KHB5dGhvbilkKHNldHVwLnB5KWcoYnVpbGQpMAorMzc3NyB5IEZyKE5vKW4odykyNyBiKHkpbihvdSlmKHNob3VsZCloKGhhKW4odiluKGUpZihhKWgoZGlyZWN0b3J5KWYKKyhjYWxsZWQpaCBGbShPcGVuU1NMKWQgRnIodGhhdClrKGNvbiluKHRhaW5zKWUoZS5nLikzNgorYiBGbShTU0wuc28pMjUgYiBGcihhbmQpaSBGbShfX2luaXRfXy5weSljIEZyKHNvbWV3aGVyZSlqKGluKTAKKzM4NzcgeSh0aGUpaShidWlsZClnKGRpY3JlY3RvcnkpLTcgYigsKTI2IGIoc28paChqdXN0OikyMzYKKzQxMTUgeSBGaihweXRob24pNDEgYihzZXR1cC5weSlnKGluc3RhbGwpMCA0NDAyIHkgRnIoSWYpMzIKK2IoeSluKG91LClmKGZvcilnKHNvbWUpZihhcmNhbmUpZyhyZWFzb24sKWcoZG9uJ3QpaSh3KW4oYW4pbih0KWUodGhlKWkKKyhtbylyKGR1bGUpZih0bylnKGFwcClyKGVhcilmKGluKWkodGhlKWYgRm0oc2l0ZS1wYWNrYWdlcykyNgorYiBGcihkaXJlY3RvcnkpLTcgYigsKTMxIGIodXNlKWcodGhlKTAgNDUwMiB5IEZtKC0tcHJlZml4KTI0CitiIEZyKG9wdGlvbi4pMCA0NjQ5IHkoWSktNyBiKG91KTI4IGIoY2FuLClmKG9mKWcoY291cnNlLClnKGRvKTIzNgorNDg4NyB5IEZqKHB5dGhvbik0MSBiKHNldHVwLnB5KWcoLS1oZWxwKTAgNTE3NCB5IEZyKHRvKTI3CitiKFwwMzRuZCloKG91dClnKG1vcmUpZihhYilyKG91dClnKGhvKW4odylnKHRvKWgodXNlKWYodGhlKWgoc2NyaXB0LilwCiswIDUyNDMgMTU2MCA0IHYgOTIgNTI5NyBhIEZpKDEpMTI3IDUzMjEgeSBGaChTZWUpYyBGcShodHRwOi8vd3d3LnApcgorKG9zdDEuY29tL2hvbWUvbmdwcy9tMi8pOTIgNTM3NyB5IEZpKDIpMTI3IDU0MDAgeSBGaChTZWUpZworRnEoaHR0cDovL3N3aWcuc291cmNlZm8pbihyZ2UubmV0LylwIDAgNTU0OSAzOTAxIDQgdgorMCA1NjQ5IGEgRmcoMikyOTI4IGIoMik4MyBiKEJ1aWxkaW5nKTI3IGIoYW5kKWcoSW5zdGFsbGluZylwCitlb3AgZW5kCislJVBhZ2U6IDMgMworVGVYRGljdCBiZWdpbiAzIDIgYm9wIDAgODMgYSBGaygyLjIpOTcgYihCdWlsZGluZykzMgorYih0aGUpaChNbylzKGR1bGUpZihvbilnKGEpaChXaW5kbyltKHdzKWYoU3lzdGVtKTAgMjgzCit5IEZyKEJpZykyNiBiKHRoYW5rcylnKHRvKWgoSXRhbWFyKWUoU2gpbih0dWxsLVQpLTcgYihyYXVyaW5nKTI1CitiKGFuZClpKE9sZWcpZShPcmxvKW4odilnKGZvciloKHRoZWlyKWcoaGVscCloKHdpdGgpZyhXaW5kbyluKHdzKWYKKyhidWlsZCloKGluc3RydWN0aW9ucy4pMzYgYihTYW1lKTAgMzgzIHkoYXMpMjcgYihmb3IpZyhVbml4KWgoc3lzdGVtcywpCitmKHcpbihlKWcoaGEpbih2KW4oZSlmKHRvKWkoc2VwYXJhdGUpZSh0aGUpaSBGbShidWlsZF9leHQpYworRnIoYW5kKWoodGhlKWggRm0oYnVpbGQpcCBGciguKTAgNTMwIHkoQnVpbGRpbmcpZih0aGUpaChsaWJyYXJ5OikyMzYKKzc2OCB5IEZqKHNldHVwLnB5KTQxIGIoYnVpbGRfZXh0KWcoLUkpZiguLi5cXG9wZW5zc2xcXGluYzMyKWooLUwpZAorKC4uLlxcb3BlbnNzbFxcb3V0MzJkbGwpMjM2IDg2MCB5KHNldHVwLnB5KWgoYnVpbGQpMAorMTE0NyB5IEZyKFdoZXJlKTI3IGIgRm0oLi4uXFxvcGVuc3NsKWMgRnIoaXMpMjggYihvZilmKGNvdXJzZSlnKHRoZSloCisobG8pcihjYXRpb24pZShvZilpKHkpbihvdXIpZShPcClyKGVuU1NMKWkoaW5zdGFsbGF0aW9uLikwCisxMjk0IHkoSW5zdGFsbGF0aW9uKWYoaXMpZyh0aGUpaChzYW1lKWYoYXMpZyhmb3IpZyhVbml4KWgoc3lzdGVtczopMjM2CisxNTMyIHkgRmooc2V0dXAucHkpNDEgYihpbnN0YWxsKTAgMTgxOSB5IEZyKEFuZCkyOCBiKHNpbWlsYXJpbHkpLTcKK2IoLCkyNyBiKHkpbihvdSlnKGNhbilnKGRvKTIzNiAyMDU3IHkgRmooc2V0dXAucHkpNDEKK2IoLS1oZWxwKTAgMjM0NCB5IEZyKHRvKTI3IGIoZ2V0KWgobW9yZSlmKGluZm9ybWF0aW9uLikwCisyNjY2IHkgRnMoMykxMTQgYiBGZihPcGVuU1NMKTM2IGIgRnMoXDAyNiloKFB5dGhvbiloKGludGVyZmFjZSlmKHRvKWgKKyhPcClzKGVuU1NMKTAgMjg5NSB5IEZyKFRoaXMpMjUgYihwYWMpbihrKS01IGIoYWdlKTI0CitiKHBybyluKHZpZGVzKWcoYSloKGhpZ2gtbGV2KW4oZWwpZyhpbiluKHRlcmZhY2UpZih0bylpKHRoZSlnCisoZnVuY3Rpb25zKWYoaW4paCh0aGUpZyhPcClyKGVuU1NMKWYobGlicmFyeSktNyBiKC4pMzUKK2IoVGhlKTI2IGIoZm9sbG8pbih3aW5nKWUobW8pcihkdWxlcykwIDI5OTUgeShhcmUpaihkZVwwMzRuZWQ6KTAKKzMxNDIgeSBGbShjcnlwdG8pMjA4IDMyNDEgeSBGcihHZW5lcmljKWcoY3J5cHRvZ3JhcGhpYyllKG1vKXIoZHVsZS4pMzcKK2IoTm90ZSkyOCBiKHRoYXQpZyhpZilnKGFuKW4oeXRoaW5nKWYoaXMpZyhpbmNvbXBsZXRlLCloKHRoaXMpZyhtbylyCisoZHVsZSlmKGlzISkwIDMzODggeSBGbShyYW5kKTIwOCAzNDg4IHkgRnIoQW4paChpbiluKHRlcmZhY2UpZSh0bylpCisodGhlKWcoT3ApcihlblNTTClnKHBzZXVkbylmKHJhbmRvbSlmKG4pbih1bSluKGIpcihlcilpKGdlbmVyYXRvci4pMAorMzYzNSB5IEZtKFNTTCkyMDggMzczNCB5IEZyKEFuKWcoaW4pbih0ZXJmYWNlKWUodG8paSh0aGUpZyhTU0wtc3ApcgorKGVjaVwwMzRjKWYocGFydHMpZyhvZiloKE9wKXIoZW5TU0wuKTAgNDAxNCB5IEZrKDMuMSk5NworYiBGZShjcnlwdG8pMzQgYiBGayhcMDI2KWUoR2VuZXJpYylpKGNyeXB0b2dyYXBoaWMpZShtbylzKGR1bGUpMAorNDIxNCB5IEZtKFg1MDlUeXBlKTIwOCA0MzE0IHkgRnIoQSkyNyBiKFB5dGhvbiloKHQpbih5cClyKGUpZyhvYik1CitiKGplY3QpMjggYihyZXByZXNlbiluKHRpbmcpZCh0aGUpaihYNTA5KWYob2IpNSBiKGplY3QpMjcKK2IodCluKHlwKXIoZS4pMCA0NDYxIHkgRm0oWDUwOVwoXCkpMjA4IDQ1NjEgeSBGcihGKS03CitiKGFjdG9yeSkyNiBiKGZ1bmN0aW9uKWkodGhhdClnKGNyZWF0ZXMpZShhbilpKFg1MDkpZShvYik1CitiKGplY3QuKTAgNDcwNyB5IEZtKFg1MDlOYW1lVHlwZSkyMDggNDgwNyB5IEZyKEEpMjcgYihQeXRob24paCh0KW4oeXApcgorKGUpZyhvYik1IGIoamVjdCkyOCBiKHJlcHJlc2VuKW4odGluZylkKHRoZSlqKFg1MDlOYW1lKWYob2IpNQorYihqZWN0KTI3IGIodCluKHlwKXIoZS4pMCA0OTU0IHkgRm0oWDUwOU5hbWVcKClwIEZkKHg1MDluYW1lKTYKK2IgRm0oXCkpMjA4IDUwNTQgeSBGcihGKS03IGIoYWN0b3J5KTI2IGIoZnVuY3Rpb24paSh0aGF0KWcoY3JlYXRlcyllKGEpCitoKGNvcCluKHkpZyhvZikzNCBiIEZkKHg1MDluYW1lKTYgYiBGciguKTAgNTIwMCB5IEZtKFg1MDlSZXFUeXBlKTIwOAorNTMwMCB5IEZyKEEpMjcgYihQeXRob24paCh0KW4oeXApcihlKWcob2IpNSBiKGplY3QpMjgKK2IocmVwcmVzZW4pbih0aW5nKWQodGhlKWooWDUwOVJlcSlmKG9iKTUgYihqZWN0KTI3IGIodCluKHlwKXIoZS4pcAorMCA1NTQ5IDM5MDEgNCB2IDAgNTY0OSBhIEZnKDIuMik4MiBiKEJ1aWxkaW5nKTI3IGIodGhlKWcoTW8pcihkdWxlKWcKKyhvbilnKGEpZyhXaW5kbyluKHdzKWcoU3lzdGVtKTIxNjQgYigzKXAgZW9wIGVuZAorJSVQYWdlOiA0IDQKK1RlWERpY3QgYmVnaW4gNCAzIGJvcCAwIDgzIGEgRm0oWDUwOVJlcVwoXCkpMjA4IDE4MyB5CitGcihGKS03IGIoYWN0b3J5KTI2IGIoZnVuY3Rpb24paSh0aGF0KWcoY3JlYXRlcyllKGFuKWkoWDUwOVJlcSllKG9iKTUKK2IoamVjdC4pMCAzMzAgeSBGbShYNTA5U3RvcmVUeXBlKTIwOCA0MjkgeSBGcihBKTI3IGIoUHl0aG9uKWgodCluKHlwKXIKKyhlKWcob2IpNSBiKGplY3QpMjggYihyZXByZXNlbiluKHRpbmcpZCh0aGUpaihYNTA5U3RvcmUpZShvYik1CitiKGplY3QpMjcgYih0KW4oeXApcihlLikwIDU3NiB5IEZtKFBLZXlUeXBlKTIwOCA2NzYgeQorRnIoQSlnKFB5dGhvbiloKHQpbih5cClyKGUpZyhvYik1IGIoamVjdCkyOCBiKHJlcHJlc2VuKW4odGluZylkKHRoZSlqCisoUEtleSlnKG9iKTUgYihqZWN0KTI3IGIodCluKHlwKXIoZS4pMCA4MjMgeSBGbShQS2V5XChcKSkyMDgKKzkyMiB5IEZyKEYpLTcgYihhY3RvcnkpMjYgYihmdW5jdGlvbilpKHRoYXQpZyhjcmVhdGVzKWUoYSloKFBLZXkpaChvYik1CitiKGplY3QuKTAgMTA2OSB5IEZtKFBLQ1M3VHlwZSkyMDggMTE2OSB5IEZyKEEpMjcgYihQeXRob24paCh0KW4oeXApcihlKQorZyhvYik1IGIoamVjdCkyOCBiKHJlcHJlc2VuKW4odGluZylkKHRoZSlqKFBLKW4oQ1M3KWYob2IpNQorYihqZWN0KTI4IGIodCluKHlwKXIoZS4pMCAxMzE2IHkgRm0oUEtDUzEyVHlwZSkyMDggMTQxNQoreSBGcihBKWYoUHl0aG9uKWgodCluKHlwKXIoZSlnKG9iKTUgYihqZWN0KTI4IGIocmVwcmVzZW4pbih0aW5nKWQodGhlKWoKKyhQSyluKENTMTIpZihvYik1IGIoamVjdCkyNyBiKHQpbih5cClyKGUuKTAgMTU2MiB5IEZtKFg1MDlFeHRlbnNpb25UeXApCitvKGUpMjA4IDE2NjIgeSBGcihBKWcoUHl0aG9uKWgodCluKHlwKXIoZSlnKG9iKTUgYihqZWN0KTI4CitiKHJlcHJlc2VuKW4odGluZylkKHRoZSlqKFg1MDlFeHRlbnNpb24pZihvYik1IGIoamVjdCkyNworYih0KW4oeXApcihlLikwIDE4MDggeSBGbShYNTA5RXh0ZW5zaW9uXCgpcCBGZCh0eXApbChlbmFtZSwpZShjcml0aWMpbAorKGFsLCkzMSBiKHZhbHVlKTYgYiBGbShcKSkyMDggMTkwOCB5IEZyKEYpLTcgYihhY3RvcnkpMjYKK2IoZnVuY3Rpb24paSh0aGF0KWcoY3JlYXRlcyllKGEpaChYNTA5RXh0ZW5zaW9uKWcob2IpNQorYihqZWN0LikwIDIwNTUgeSBGbShOZXRzY2FwZVNQS0lUeXBlKTIwOCAyMTU1IHkgRnIoQSkyNworYihQeXRob24paCh0KW4oeXApcihlKWcob2IpNSBiKGplY3QpMjggYihyZXByZXNlbiluKHRpbmcpZCh0aGUpagorKE5ldHNjYXApcihlU1BLSSlnKG9iKTUgYihqZWN0KTI3IGIodCluKHlwKXIoZS4pMCAyMzE2Cit5IEZtKE5ldHNjYXBlU1BLSVwoKXAgRmMoWylwIEZkKGVuYykxMSBiIEZjKF0pcCBGbShcKSkyMDgKKzI0MTUgeSBGcihGKS03IGIoYWN0b3J5KTI5IGIoZnVuY3Rpb24paSh0aGF0KWcoY3JlYXRlcyllKGEpaChOZXRzY2FwKXIKKyhlU1BLSSlnKG9iKTUgYihqZWN0Lik0NSBiKElmKTMxIGIodGhlKWcgRmQoZW5jKWsgRnIoYXJndW1lbiluKHQpMzAKK2IoaXMpZyhwcmVzZW4pbih0LCloKGl0KWYoc2hvdWxkKWgoYilyKGUpZihhKTIwOCAyNTE1Cit5KGJhc2U2NC1lbmNvKXIoZGVkKTI1IGIoc3RyaW5nKWkocmVwcmVzZW4pbih0aW5nKWYoYSloKE5ldHNjYXApcgorKGVTUEtJKWgob2IpNSBiKGplY3QsKTI3IGIoYXMpZyhyZXR1cm5lZClnKGIpbih5KWcodGhlKWgKK0ZtKGI2NF9lbmNvZGUpYyBGcihtZXRobylyKGQuKTAgMjY2MiB5IEZtKEZJTEVUWVBFX1BFTSkwCisyNzYyIHkoRklMRVRZUEVfQVNOMSkyMDggMjg2MSB5IEZyKEZpbGUpaih0KW4oeXApcihlKWgoY29uc3RhbiluKHRzLikwCiszMDA4IHkgRm0oVFlQRV9SU0EpMCAzMTA4IHkoVFlQRV9EU0EpMjA4IDMyMDcgeSBGcihLZXkpZSh0KW4oeXApcihlKWkKKyhjb25zdGFuKW4odHMuKTAgMzM1NCB5IEZuKGV4Y2VwdGlvbilrIEZtKEVycm9yKTIwOCAzNDU0Cit5IEZyKEdlbmVyaWMpMjcgYihleGNlcHRpb24pZyh1c2VkKWcoaW4paCh0aGUpZyBGbShjcnlwdG8pZAorRnIobW8pcihkdWxlLikwIDM2MDEgeSBGbShkdW1wX2NlcnRpZmljYXRlKW8oXCgpcCBGZCh0KW8oeXApbChlLClnKGMpbAorKGVydCk4IGIgRm0oXCkpMjA4IDM3MDAgeSBGcihEdW1wKTI4IGIodGhlKWcoY2VydGlcMDM0Y2F0ZSlmCitGZChjKWwoZXJ0KTM1IGIgRnIoaW4pbih0bykyNyBiKGEpaChidVwwMzNlcilmKHN0cmluZylnKGVuY28pcihkZWQpaAorKHdpdGgpZyh0aGUpZyh0KW4oeXApcihlKWYgRmQodHlwKWwoZSk2IGIgRnIoLikwIDM4NDcKK3kgRm0oZHVtcF9jZXJ0aWZpY2F0ZSlvKF9yKW8oZXF1KW8oZXMpbyh0XCgpbyBGZCh0eXApbChlLCkyNQorYihyKWwoZSlsKHEpNyBiIEZtKFwpKTIwOCAzOTQ3IHkgRnIoRHVtcCkyOCBiKHRoZSlnKGNlcnRpXDAzNGNhdGUpZgorKHJlcXVlc3QpZyBGZChyKWwoZSlsKHEpMzUgYiBGcihpbiluKHRvKTI3IGIoYSlnKGJ1XDAzM2VyKWgoc3RyaW5nKWYKKyhlbmNvKXIoZGVkKWcod2l0aCloKHRoZSlnKHQpbih5cClyKGUpZyBGZCh0eXApbChlKTYKK2IgRnIoLikwIDQxMDggeSBGbShkdW1wX3ByaXZhdGVrZXlcKClvIEZkKHR5cClsKGUsKTI1CitiKHBrZXkpNyBiIEZjKFspcCBGZCgsKTMxIGIoY2lwaGVyLCloKHApbChhc3NwaHIpbChhc2UpMTkKK2IgRmMoXSlwIEZtKFwpKTIwOCA0MjA4IHkgRnIoRHVtcCkzOSBiKHRoZSlmKHByaXYpLTUKK2IoYXRlKTM4IGIoayluKGV5KWggRmQocGtleSk0NiBiIEZyKGluKW4odG8pMzggYihhKWcoYnVcMDMzZXIpZyhzdHJpbmcpCitnKGVuY28pcihkZWQpZyh3aXRoKWcodGhlKWgodCluKHlwKXIoZSlmIEZkKHR5cClsKGUpNgorYiBGcigsKTQyIGIob3B0aW9uYWxseSkzNyBiKFwoaWYpNDUgYiBGZCh0eXApbChlKWcgRnIoaXMpMjA4Cis0MzA3IHkgRm0oRklMRVRZUEVfUEVNKXAgRnIoXCkpMjIgYihlbmNyeXB0aW5nKTI3IGIoaXQpaCh1c2luZyloCitGZChjaXBoZXIpMzggYiBGcihhbmQpMjcgYiBGZChwKWwoYXNzcGhyKWwoYXNlKTYgYiBGciguKTIwOAorNDQ0MCB5IEZkKHApbChhc3NwaHIpbChhc2UpMzUgYiBGcihtKW4odXN0KTI4IGIoYilyKGUpZyhlaXRoZXIpZihhKWcKKyhzdHJpbmcpZyhvcilnKGEpZyhjYWxsYmFjKW4oaylmKGZvciloKHBybyluKHZpZGluZylmKHRoZSlpKHBhc3MpZgorKHBocmFzZS4pMCA0NTg3IHkgRm0obG9hZF9jZXJ0aWZpY2F0ZSlvKFwoKXAgRmQodClvKHlwKWwoZSwpZShidVwwMzNlcikKKzkgYiBGbShcKSkyMDggNDY4NyB5IEZyKExvYWQpMjYgYihhKWgoY2VydGlcMDM0Y2F0ZSlnKFwoWDUwOVwpKWcoZnJvbSloCisodGhlKWYoc3RyaW5nKWggRmQoYnVcMDMzZXIpMzcgYiBGcihlbmNvKXIoZGVkKTI3IGIod2l0aCloKHRoZSlnKHQpbgorKHlwKXIoZSlnIEZkKHR5cClsKGUpNiBiIEZyKC4pMCA0ODM0IHkgRm0obG9hZF9jZXJ0aWZpY2F0ZSlvKF9yKW8oZXF1KW8KKyhlcylvKHRcKClvIEZkKHR5cClsKGUsKTI1IGIoYnVcMDMzZXIpOSBiIEZtKFwpKTIwOCA0OTMzCit5IEZyKExvYWQpMjYgYihhKWgoY2VydGlcMDM0Y2F0ZSlnKHJlcXVlc3QpZyhcKFg1MDlSZXFcKSlnKGZyb20pZyh0aGUpaAorKHN0cmluZylnIEZkKGJ1XDAzM2VyKTM3IGIgRnIoZW5jbylyKGRlZCkyNyBiKHdpdGgpaCh0aGUpZyh0KW4oeXApcihlKWcKK0ZkKHR5cClsKGUpNiBiIEZyKC4pMCA1MDk5IHkgRm0obG9hZF9wcml2YXRla2V5XCgpbyBGZCh0eXApbChlLCkyNQorYihidVwwMzNlcik5IGIgRmMoWylwIEZkKCwpMjkgYihwKWwoYXNzcGhyKWwoYXNlKTIwIGIKK0ZjKF0pcCBGbShcKSkyMDggNTE5OSB5IEZyKExvYWQpNDMgYihhKWgocHJpdiktNSBiKGF0ZSk0NAorYihrKW4oZXkpZihcKFBLZXlcKSlpKGZyb20pZih0aGUpaChzdHJpbmcpZyBGZChidVwwMzNlcik1MworYiBGcihlbmNvKXIoZGVkKTQ0IGIod2l0aCloKHRoZSlmKHQpbih5cClyKGUpaCBGZCh0eXApbChlKTUxCitiIEZyKFwobSluKHVzdCk0NSBiKGIpcihlKWYob25lKWcob2YpMjA4IDUyOTggeSBGbShGSUxFVFlQRV9QRU0pMjIKK2IgRnIoYW5kKTI4IGIgRm0oRklMRVRZUEVfQVNOMSlwIEZyKFwpLilwIDAgNTU0OSAzOTAxCis0IHYgMCA1NjQ5IGEgRmcoNCkyMjM5IGIoMyk4MyBiIEZtKE9wZW5TU0wpMjQgYiBGZyhcMDI2KWsoUHl0aG9uKWYKKyhpbnRlcmZhY2UpaCh0bylmKE9wKXIoZW5TU0wpcCBlb3AgZW5kCislJVBhZ2U6IDUgNQorVGVYRGljdCBiZWdpbiA1IDQgYm9wIDIwOCA4MyBhIEZkKHApbChhc3NwaHIpbChhc2UpMzUKK2IgRnIobSluKHVzdCkyOCBiKGIpcihlKWcoZWl0aGVyKWYoYSlnKHN0cmluZylnKG9yKWcoYSlnKGNhbGxiYWMpbihrKWYKKyhmb3IpaChwcm8pbih2aWRpbmcpZih0aGUpaShwYXNzKWYocGhyYXNlLikwIDIzMCB5IEZtCisobG9hZF9wa2NzN19kYXRhXCgpbyBGZCh0eXApbChlLCllKGJ1XDAzM2VyKTkgYiBGbShcKSkyMDgKKzMzMCB5IEZyKExvYWQpMjYgYihwayluKGNzNyloKGRhdGEpZyhmcm9tKWcodGhlKWgoc3RyaW5nKWcKK0ZkKGJ1XDAzM2VyKTM2IGIgRnIoZW5jbylyKGRlZCkyOCBiKHdpdGgpZyh0aGUpZyh0KW4oeXApcihlKWcKK0ZkKHR5cClsKGUpNiBiIEZyKC4pMCA0OTEgeSBGbShsb2FkX3BrY3MxMlwoKXAgRmQoYnVcMDMzZXIpagorRmMoWylwIEZkKCwpMjQgYihwKWwoYXNzcGhyKWwoYXNlKWMgRmMoXSlwIEZtKFwpKTIwOAorNTkwIHkgRnIoTG9hZCkzMCBiKHBrKW4oY3MxMilmKGRhdGEpaChmcm9tKWgodGhlKWcoc3RyaW5nKWcKK0ZkKGJ1XDAzM2VyKTkgYiBGciguKTQ3IGIoSWYpMzEgYih0aGUpaChwayluKGNzMTIpZChzdHJ1Y3R1cmUpaChpcyloCisoZW5jcnlwdGVkLClnKGEpZyBGZChwKWwoYXNzcGhyKWwoYXNlKTM5IGIgRnIobSluKHVzdCkzMQorYihiKXIoZSkyMDggNjkwIHkoaW5jbHVkZWQuKTAgOTUzIHkgRmcoWDUwOSljKG9iamVjdHMpMAorMTE1NCB5IEZyKFg1MDkpZihvYik1IGIoamVjdHMpMjcgYihoYSluKHYpbihlKWcodGhlKWgoZm9sbG8pbih3aW5nKWUKKyhtZXRobylyKGRzOikwIDEzMDAgeSBGbShnZXRfaXNzdWVyXChcKSkyMDggMTQwMCB5IEZyKFJldHVybilmKGEpZworRmQoYilsKG9ycilsKG93ZSlsKGQpaihyKWwoZWZlcilsKGVuYylsKGUpZyh0bylmKGEpaChYNTA5TmFtZSloKG9iamUpbAorKGN0KWYocilsKGVwcilsKGVzZW50aW5nKWYodGhlKWgoaXNzdWVyKWYob2YpaSh0aGUpZShjKWwoZXJ0aVwwMzRjKWwKKyhhdGUuKTM4IGIoV2hlbikyOCBiKHRoZSkyMDggMTUwMCB5KGMpbChvcnIpbChlc3ApbChvbmRpbmcpaShYNTA5KWgob3IpCitmKFg1MDlSKWwoZSlsKHEpZyhvYmplKWwoY3QpaChpcylmKGRlc3RyKWwob3llKWwoZCwpaCh0aGlzKWYob2JqZSlsKGN0KQoraCh3aWwpdChsKWYoYilsKGUpZyhpbnZhbGlkISkwIDE2NDYgeSBGbShnZXRfcHVia2V5XChcKSkyMDgKKzE3NDYgeSBGcihSZXR1cm4pZChhKWcoUEtleSloKG9iKTUgYihqZWN0KTI3IGIocmVwcmVzZW4pbih0aW5nKWYodGhlKWkKKyhwdWJsaWMpZyhrKW4oZXkpZihvZilnKHRoZSloKGNlcnRpXDAzNGNhdGUuKTAgMTg5MyB5CitGbShnZXRfc2VyaWFsX251bWJlKW8oclwoKW8oXCkpMjA4IDE5OTMgeSBGcihSZXR1cm4pZih0aGUpaAorKGNlcnRpXDAzNGNhdGUpZihzZXJpYWwpZyhuKW4odW0pbihiKXIoZXIuKTAgMjEzOSB5IEZtKGdldF9zdWJqZWN0XChcKSkKKzIwOCAyMjM5IHkgRnIoUmV0dXJuKTMyIGIoYSlnIEZkKGIpbChvcnIpbChvd2UpbChkKWsocilsKGVmZXIpbChlbmMpbAorKGUpZSh0byloKGEpZihYNTA5TmFtZSlpKG9iamUpbChjdClmKHIpbChlcHIpbChlc2VudGluZylmKHRoZSloKHN1YmplKWwKKyhjdClmKG9mKWgodGhlKWYoYylsKGVydGlcMDM0YylsKGF0ZS4pNTMgYihXaGVuKTIwOCAyMzM5Cit5KHRoZSkyOSBiKGMpbChvcnIpbChlc3ApbChvbmRpbmcpaShYNTA5KWcob3IpZihYNTA5UilsKGUpbChxKWcob2JqZSlsCisoY3QpaChpcylmKGRlc3RyKWwob3llKWwoZCwpaCh0aGlzKWYob2JqZSlsKGN0KWcod2lsKXQobCloKGIpbChlKWYKKyhpbnZhbGlkISkwIDI0ODYgeSBGbShnZXRfdmVyc2lvblwoXCkpMjA4IDI1ODUgeSBGcihSZXR1cm4pZCh0aGUpaAorKGNlcnRpXDAzNGNhdGUpZih2KW4oZXJzaW9uLikwIDI3MzIgeSBGbShnbXRpbWVfYWRqX25vdEJlKW8oZm8pbyhyZVwoKW8KK0ZkKHRpbWUpNiBiIEZtKFwpKTIwOCAyODMyIHkgRnIoQSluKGRqdXN0KTI4IGIodGhlKWcodGltZXN0YW1wKWcoXChpbilnCisoR01UXCkpZyh3aGVuKWcodGhlKWYoY2VydGlcMDM0Y2F0ZSlnKHN0YXJ0cylnKGIpcihlaW5nKWgodiktNQorYihhbGlkLikwIDI5NzkgeSBGbShnbXRpbWVfYWRqX25vdEFmKW8odGUpbyhyXCgpcCBGZCh0KW8oaW1lKTYKK2IgRm0oXCkpMjA4IDMwNzggeSBGcihBKW4oZGp1c3QpMjggYih0aGUpZyh0aW1lc3RhbXApZyhcKGluKWcoR01UXCkpZworKHdoZW4pZyh0aGUpZihjZXJ0aVwwMzRjYXRlKWcoc3RvcHMpZyhiKXIoZWluZyloKHYpLTUKK2IoYWxpZC4pMCAzMjI1IHkgRm0oaGFzX2V4cGlyZWRcKFwpKTIwOCAzMzI1IHkgRnIoQ2hlYyluKGtzKTMyCitiKHRoZSloKGNlcnRpXDAzNGNhdGUncylmKHRpbWUpaShzdGFtcClmKGFnYWluc3QpZihjdXJyZW4pbih0KWcodGltZS4pCis1NCBiKFJldHVybnMpMzMgYih0cnVlKWcoaWYpZyh0aGUpaChjZXJ0aVwwMzRjYXRlKWUoaGFzKWgoZXhwaXJlZCkyMDgKKzM0MjQgeShhbmQpMjcgYihmYWxzZSlnKG90aGVyd2lzZS4pMCAzNTcxIHkgRm0oc2V0X2lzc3VlclwoKXAKK0ZkKGlzc3Vlcik5IGIgRm0oXCkpMjA4IDM2NzEgeSBGcihTZXQpMjggYih0aGUpZihpc3N1ZXIpZyhvZiloKHRoZSlnCisoY2VydGlcMDM0Y2F0ZSlmKHRvKWcgRmQoaXNzdWVyKTkgYiBGciguKTAgMzgxOCB5IEZtKHNldF9wdWJrZXlcKClwCitGZChwa2V5KWUgRm0oXCkpMjA4IDM5MTcgeSBGcihTZXQpMjggYih0aGUpZihwdWJsaWMpaChrKW4oZXkpZihvZiloCisodGhlKWcoY2VydGlcMDM0Y2F0ZSlmKHRvKWcgRmQocGtleSk3IGIgRnIoLikwIDQwNjQgeQorRm0oc2V0X3NlcmlhbF9udW1iZSlvKHJcKClvIEZkKHNlcmlhbG5vKWUgRm0oXCkpMjA4IDQxNjQKK3kgRnIoU2V0KTI4IGIodGhlKWYoc2VyaWFsKWcobiluKHVtKW4oYilyKGVyKWcob2YpaCh0aGUpZworKGNlcnRpXDAzNGNhdGUpZih0bylnIEZkKHNlcmlhbG5vKTUgYiBGciguKTAgNDMxMSB5IEZtKHNldF9zdWJqZWN0XCgpcAorRmQoc3ViamUpbChjdClqIEZtKFwpKTIwOCA0NDEwIHkgRnIoU2V0KTI4IGIodGhlKWYoc3ViKTUKK2IoamVjdCkyOCBiKG9mKWcodGhlKWcoY2VydGlcMDM0Y2F0ZSlmKHRvKWcgRmQoc3ViamUpbChjdCk4CitiIEZyKC4pMCA0NTU3IHkgRm0oc2V0X3ZlcnNpb25cKClwIEZkKHZlcnNpb24pZSBGbShcKSkyMDgKKzQ2NTcgeSBGcihTZXQpMjggYih0aGUpZihjZXJ0aVwwMzRjYXRlKWcodiluKGVyc2lvbilmKHRvKWkKK0ZkKHZlcnNpb24pNiBiIEZyKC4pMCA0ODA0IHkgRm0oc2lnblwoKXAgRmQocGtleSwpMjkKK2IoZGlnZXN0KTggYiBGbShcKSkyMDggNDkwMyB5IEZyKFNpZ24pMjIgYih0aGUpaChjZXJ0aVwwMzRjYXRlLClmCisodXNpbmcpZyh0aGUpaChrKW4oZXkpZyBGZChwa2V5KTMxIGIgRnIoYW5kKTIyIGIodGhlKWgobWVzc2FnZSllCisoZGlnZXN0KWgoYWxnb3JpdGhtKWYoaWRlbiluKHRpXDAzNGVkKWkoYiluKHkpZih0aGUpaChzdHJpbmcpZgorRmQoZGlnZXN0KTggYiBGciguKTAgNTA1MCB5IEZtKHN1YmplY3RfbmFtZV9oYXMpbyhoXCgpbyhcKSkyMDgKKzUxNTAgeSBGcihSZXR1cm4pMjcgYih0aGUpaChoYXNoKWYob2YpaCh0aGUpZyhjZXJ0aVwwMzRjYXRlKWYoc3ViKTUKK2IoamVjdC4pMCA1Mjk3IHkgRm0oZGlnZXN0XCgpcCBGZChkaWdlc3RfbmFtZSloIEZtKFwpKTIwOAorNTM5NiB5IEZyKFJldHVybikyNyBiKGEpZyhkaWdlc3QpaChvZilmKHRoZSloKGNlcnRpXDAzNGNhdGUsKWYodXNpbmcpZworKHRoZSloIEZkKGRpZ2VzdF9uYW1lKTM1IGIgRnIobWV0aG8pcihkLilwIDAgNTU0OSAzOTAxCis0IHYgMCA1NjQ5IGEgRmcoMy4xKTgyIGIgRm0oY3J5cHRvKTI1IGIgRmcoXDAyNilqKEdlbmVyaWMpZworKGNyeXB0b2dyYXBoaWMpZShtbylyKGR1bGUpMjIzNCBiKDUpcCBlb3AgZW5kCislJVBhZ2U6IDYgNgorVGVYRGljdCBiZWdpbiA2IDUgYm9wIDAgODMgYSBGbShhZGRfZXh0ZW5zaW9uc1woKXAgRmQoZXgpbyh0ZW5zaW9ucyk3CitiIEZtKFwpKTIwOCAxODMgeSBGcihBKW4oZGQpMjcgYih0aGUpaChleHRlbnNpb25zKWYoaW4paCh0aGUpZworKHNlcXVlbmNlKWYgRmQoZXh0ZW5zaW9ucykzNCBiIEZyKHRvKTI3IGIodGhlKWgoY2VydGlcMDM0Y2F0ZS4pMAorNDQ2IHkgRmcoWDUwOU5hbWUpZShvYmplY3RzKTAgNjQ2IHkgRnIoWDUwOU5hbWUpZyhvYik1CitiKGplY3RzKTI3IGIoaGEpbih2KW4oZSlnKHRoZSloKGZvbGxvKW4od2luZyllKG1lbSluKGIpcihlcnM6KTAKKzc5MyB5IEZtKGNvdW50cnlOYW1lKTIwOCA4OTMgeSBGcihUaGUpaChjb3VuKW4odHJ5KWcob2YpZyh0aGUpaChlbiluCisodGl0KW4oeSktNyBiKC4pMzcgYiBGbShDKTI3IGIgRnIobWEpbih5KWcoYilyKGUpaCh1c2VkKWcoYXMpZihhbilnCisoYWxpYXMpZihmb3IpaCBGbShjb3VudHJ5TmFtZSlwIEZyKC4pMCAxMDQwIHkgRm0oc3RhdGVPclByb3ZpbmNlTilvKGFtKQorbyhlKTIwOCAxMTM5IHkgRnIoVGhlKWcoc3RhdGUpaChvcillKHBybyluKHZpbmNlKWcob2YpaSh0aGUpZyhlbiluKHRpdCkKK24oeSktNyBiKC4pMzcgYiBGbShTVCkyNyBiIEZyKG1hKW4oeSlmKGIpcihlKWkodXNlZClnKGFzKWYoYW4pZyhhbGlhcylnCisoZm9yKWcgRm0oc3RhdGVPclByb3ZpbmNlKW8oTmEpbyhtZSlwIEZyKFwyNjcpMCAxMjg2Cit5IEZtKGxvY2FsaXR5TmFtZSkyMDggMTM4NiB5IEZyKFRoZSlnKGxvKXIoY2FsaXQpbih5KWcob2YpaCh0aGUpZihlbiluCisodGl0KW4oeSktNyBiKC4pMzcgYiBGbShMKTI4IGIgRnIobWEpbih5KWUoYilyKGUpaSh1c2VkKWcoYXMpZihhbilnCisoYWxpYXMpZyhmb3IpZyBGbShsb2NhbGl0eU5hbWUpcCBGciguKTAgMTUzMiB5IEZtKG9yZ2FuaXphdGlvbk5hbWUpMjA4CisxNjMyIHkgRnIoVGhlKWcob3JnYW5pemF0aW9uKWUobmFtZSlqKG9mKWYodGhlKWgoZW4pbih0aXQpbih5KS03CitiKC4pMzcgYiBGbShPKTI3IGIgRnIobWEpbih5KWcoYilyKGUpaCh1c2VkKWcoYXMpZShhbilpKGFsaWFzKWUoZm9yKWgKK0ZtKG9yZ2FuaXphdGlvbk5hbWUpcCBGciguKTAgMTc3OSB5IEZtKG9yZ2FuaXphdGlvbmFsVW4pbyhpdClvKE5hbSlvKGUpCisyMDggMTg3OSB5IEZyKFRoZSlnKG9yZ2FuaXphdGlvbmFsKWUodW5pdClqKG9mKWcodGhlKWcoZW4pbih0aXQpbih5KS03CitiKC4pMzYgYiBGbShPVSkyNyBiIEZyKG1hKW4oeSlnKGIpcihlKWgodXNlZClnKGFzKWYoYW4pZyhhbGlhcylmKGZvciloCitGbShvcmdhbml6YXRpb25hbFVuaSlvKHROKW8oYW0pbyhlKXAgRnIoLikwIDIwMjUgeSBGbShjb21tb25OYW1lKTIwOAorMjEyNSB5IEZyKFRoZSlnKGNvbW1vbilnKG5hbWUpaChvZilmKHRoZSloKGVuKW4odGl0KW4oeSktNworYiguKTM3IGIgRm0oQ04pMjcgYiBGcihtYSluKHkpZihiKXIoZSlpKHVzZWQpZyhhcylmKGFuKWcoYWxpYXMpZyhmb3IpZworRm0oY29tbW9uTmFtZSlwIEZyKC4pMCAyMjcyIHkgRm0oZW1haWxBZGRyZXNzKTIwOCAyMzcyCit5IEZyKFRoZSlnKGUtbWFpbClnKGFkZHJlc3MpZihvZilpKHRoZSlnKGVuKW4odGl0KW4oeSktNworYiguKTAgMjYzNSB5IEZnKFg1MDlSZXEpMjYgYihvYmplY3RzKTAgMjgzNSB5IEZyKFg1MDlSZXEpZyhvYik1CitiKGplY3RzKTI3IGIoaGEpbih2KW4oZSlnKHRoZSloKGZvbGxvKW4od2luZyllKG1ldGhvKXIoZHM6KTAKKzI5ODIgeSBGbShnZXRfcHVia2V5XChcKSkyMDggMzA4MiB5IEZyKFJldHVybiloKGEpZyhQS2V5KWgob2IpNQorYihqZWN0KTI3IGIocmVwcmVzZW4pbih0aW5nKWYodGhlKWkocHVibGljKWcoayluKGV5KWYob2YpZyh0aGUpaAorKGNlcnRpXDAzNGNhdGUpZihyZXF1ZXN0LikwIDMyMjggeSBGbShnZXRfc3ViamVjdFwoXCkpMjA4CiszMzI4IHkgRnIoUmV0dXJuKTMyIGIoYSlnIEZkKGIpbChvcnIpbChvd2UpbChkKWsocilsKGVmZXIpbChlbmMpbChlKWUKKyh0byloKGEpZihYNTA5TmFtZSlpKG9iamUpbChjdClmKHIpbChlcHIpbChlc2VudGluZylmKHRoZSloKHN1YmplKWwoY3QpCitmKG9mKWgodGhlKWYoYylsKGVydGlcMDM0YylsKGF0ZS4pNTMgYihXaGVuKTIwOCAzNDI4Cit5KHRoZSkyOSBiKGMpbChvcnIpbChlc3ApbChvbmRpbmcpaShYNTA5KWcob3IpZihYNTA5UilsKGUpbChxKWcob2JqZSlsCisoY3QpaChpcylmKGRlc3RyKWwob3llKWwoZCwpaCh0aGlzKWYob2JqZSlsKGN0KWcod2lsKXQobCloKGIpbChlKWYKKyhpbnZhbGlkISkwIDM1NzUgeSBGbShzZXRfcHVia2V5XCgpcCBGZChwa2V5KTcgYiBGbShcKSkyMDgKKzM2NzQgeSBGcihTZXQpMjggYih0aGUpZihwdWJsaWMpaChrKW4oZXkpZihvZiloKHRoZSlnKGNlcnRpXDAzNGNhdGUpZgorKHJlcXVlc3QpZyh0bylnIEZkKHBrZXkpNyBiIEZyKC4pMCAzODIxIHkgRm0oc2lnblwoKXAKK0ZkKHBrZXksKTI5IGIoZGlnZXN0KTggYiBGbShcKSkyMDggMzkyMSB5IEZyKFNpZ24pMzYKK2IodGhlKWcoY2VydGlcMDM0Y2F0ZSlnKHJlcXVlc3QsKWgodXNpbmcpZih0aGUpZyhrKW4oZXkpaAorRmQocGtleSk0NSBiIEZyKGFuZCkzNiBiKHRoZSlnKG1lc3NhZ2UpZihkaWdlc3QpZyhhbGdvcml0aG0pZyhpZGVuKW4KKyh0aVwwMzRlZClpKGIpbih5KWYodGhlKTIwOCA0MDIwIHkoc3RyaW5nKTI4IGIgRmQoZGlnZXN0KTgKK2IgRnIoLikwIDQxNjcgeSBGbSh2ZXJpZnlcKClwIEZkKHBrZXkpZiBGbShcKSkyMDggNDI2NworeSBGcihWKS03IGIoZXJpZnkpMjcgYihhKWcoY2VydGlcMDM0Y2F0ZSlnKHJlcXVlc3QpZyh1c2luZylnKHRoZSloCisocHVibGljKWcoayluKGV5KWcgRmQocGtleSk3IGIgRnIoLikwIDQ1MzAgeSBGZyhYNTA5U3RvKW4ocmUpMjYKK2Iob2JqZWN0cykwIDQ3MzAgeSBGcihUaGUpaShYNTA5U3RvcmUpZChvYik1IGIoamVjdCkyOAorYihoYXMpZihjdXJyZW4pbih0bHkpZihqdXN0KWkob25lKWcobWV0aG8pcihkOikwIDQ4NzcKK3kgRm0oYWRkX2NlcnRcKClwIEZkKGMpbChlcnQpOCBiIEZtKFwpKTIwOCA0OTc3IHkgRnIoQSluKGRkKTI3CitiKHRoZSloKGNlcnRpXDAzNGNhdGUpZiBGZChjKWwoZXJ0KTM2IGIgRnIodG8pMjcgYih0aGUpaChjZXJ0aVwwMzRjYXRlKQorZihzdG9yZS4pcCAwIDU1NDkgMzkwMSA0IHYgMCA1NjQ5IGEgRmcoNikyMjM5IGIoMyk4MworYiBGbShPcGVuU1NMKTI0IGIgRmcoXDAyNilrKFB5dGhvbilmKGludGVyZmFjZSloKHRvKWYoT3ApcihlblNTTClwCitlb3AgZW5kCislJVBhZ2U6IDcgNworVGVYRGljdCBiZWdpbiA3IDYgYm9wIDAgODMgYSBGZyhQS2V5KTI3IGIob2JqZWN0cykwIDI4MworeSBGcihUaGUpaChQS2V5KWYob2IpNSBiKGplY3QpMjcgYihoYXMpZyh0aGUpaChmb2xsbyluKHdpbmcpZihtZXRobylyCisoZHM6KTAgNDMwIHkgRm0oYml0c1woXCkpMjA4IDUzMCB5IEZyKFJldHVybilnKHRoZSloKG4pbih1bSluKGIpcihlcilmCisob2YpaChiaXRzKWcob2YpZih0aGUpaChrKW4oZXkpLTcgYiguKTAgNjc3IHkgRm0oZ2VuZXJhdGVfa2V5XCgpcAorRmQodHlwKWwoZSwpMjUgYihiaXRzKTcgYiBGbShcKSkyMDggNzc2IHkgRnIoR2VuZXJhdGUpMjIKK2IoYSloKHB1YmxpYy9wcml2KS01IGIoYXRlKTIzIGIoayluKGV5KWYocGFpciloKG9mKWcodGhlKWgodCluKHlwKXIoZSlmCitGZCh0eXApbChlKTMwIGIgRnIoXChvbmUpMjMgYihvZikzMCBiIEZtKFRZUEVfUlNBKTE5CitiIEZyKGFuZCkyNCBiIEZtKFRZUEVfRFNBKXAgRnIoXCkpYyh3aXRoKWoodGhlKWgoc2l6ZSlmCitGZChiaXRzKTcgYiBGciguKTAgOTIzIHkgRm0odHlwZVwoXCkpMjA4IDEwMjMgeSBGcihSZXR1cm4pMjcKK2IodGhlKWgodCluKHlwKXIoZSlnKG9mKWYodGhlKWgoayluKGV5KS03IGIoLikwIDEyODYKK3kgRmcoUEspbihDUzcpMjcgYihvYmplY3RzKTAgMTQ4NiB5IEZyKFBLKW4oQ1M3KWcob2IpNQorYihqZWN0cykyNyBiKGhhKW4odiluKGUpZih0aGUpaShmb2xsbyluKHdpbmcpZihtZXRobylyKGRzOikwCisxNjMzIHkgRm0odHlwZV9pc19zaWduZWRcKFwpKTIwOCAxNzMzIHkgRnIoRklYTUUpMCAxODgwCit5IEZtKHR5cGVfaXNfZW52ZWxvcGUpbyhkXCgpbyhcKSkyMDggMTk3OSB5IEZyKEZJWE1FKTAKKzIxMjYgeSBGbSh0eXBlX2lzX3NpZ25lZEFuKW8oZEUpbyhudmUpbyhsbylvKHBlKW8oZFwoXCkpMjA4CisyMjI2IHkgRnIoRklYTUUpMCAyMzczIHkgRm0odHlwZV9pc19kYXRhXChcKSkyMDggMjQ3MgoreSBGcihGSVhNRSkwIDI2MTkgeSBGbShnZXRfdHlwZV9uYW1lXChcKSkyMDggMjcxOSB5IEZyKEdldCloKHRoZSlmKHQpbgorKHlwKXIoZSloKG5hbWUpZyhvZilmKHRoZSloKFBLKW4oQ1M3LikwIDI5ODIgeSBGZyhQSyluKENTMTIpZShvYmplY3RzKTAKKzMxODIgeSBGcihQSyluKENTMTIpZyhvYik1IGIoamVjdHMpMjggYihoYSluKHYpbihlKWUodGhlKWkoZm9sbG8pbgorKHdpbmcpZShtZXRobylyKGRzOikwIDMzMjkgeSBGbShnZXRfY2VydGlmaWNhdGVcKClvKFwpKTIwOAorMzQyOSB5IEZyKFJldHVybiloKGNlcnRpXDAzNGNhdGUpZyhwKXIob3J0aW9uKWcob2YpaCh0aGUpZyhQSyluKENTMTIpZQorKHN0cnVjdHVyZS4pMCAzNTc2IHkgRm0oZ2V0X3ByaXZhdGVrZXlcKFwpKTIwOCAzNjc1IHkKK0ZyKFJldHVybiloKHByaXYpLTUgYihhdGUpMjcgYihrKW4oZXkpZyhwKXIob3J0aW9uKWcob2YpaCh0aGUpZyhQSyluCisoQ1MxMillKHN0cnVjdHVyZSkwIDM4MjIgeSBGbShnZXRfY2FfY2VydGlmaWNhKW8odGUpbyhzXChcKSkyMDgKKzM5MjIgeSBGcihSZXR1cm4payhDQSlnKGNlcnRpXDAzNGNhdGVzKWYod2l0aGluKWkodGhlKWYoUEspbihDUzEyKWYob2IpCis1IGIoamVjdCkzMCBiKGFzKWYoYSlnKHR1cGxlLik0NSBiKFJldHVybnMpMzAgYihOb25lKWcoaWYpZyhubylnKENBKWcKKyhjZXJ0aVwwMzRjYXRlcylmKGFyZSkyMDggNDAyMiB5KHByZXNlbiluKHQuKTAgNDI4NSB5CitGZyhYNTA5RXh0ZW5zaW9uKWMob2JqZWN0cykwIDQ0ODUgeSBGcihYNTA5RXh0ZW5zaW9uKWgob2IpNQorYihqZWN0cykyNyBiKGN1cnJlbiluKHRseSlnKG9ubHkpZyhoYSluKHYpbihlKWYob25lKWkobWV0aG8pcihkOikwCis0NjMyIHkgRm0oZ2V0X2NyaXRpY2FsXChcKSkyMDggNDczMiB5IEZyKFJldHVybilmKHRoZSloKGNyaXRpY2FsKWYKKyhcMDM0ZWxkKWgob2YpZih0aGUpaChleHRlbnNpb24pZihvYik1IGIoamVjdC4pMCA0OTk1Cit5IEZnKE5ldHNjYXApcihlU1BLSSkyNyBiKG9iamVjdHMpMCA1MTk1IHkgRnIoTmV0c2NhcClyKGVTUEtJKWgob2IpNQorYihqZWN0cykyNyBiKGhhKW4odiluKGUpZih0aGUpaShmb2xsbyluKHdpbmcpZShtZXRobylyKGRzOilwCiswIDU1NDkgMzkwMSA0IHYgMCA1NjQ5IGEgRmcoMy4xKTgyIGIgRm0oY3J5cHRvKTI1IGIgRmcoXDAyNilqKEdlbmVyaWMpZworKGNyeXB0b2dyYXBoaWMpZShtbylyKGR1bGUpMjIzNCBiKDcpcCBlb3AgZW5kCislJVBhZ2U6IDggOAorVGVYRGljdCBiZWdpbiA4IDcgYm9wIDAgODMgYSBGbShiNjRfZW5jb2RlXChcKSkyMDggMTgzCit5IEZyKFJldHVybikyNyBiKGEpZyhiYXNlNjQtZW5jbylyKGRlZClmKHN0cmluZyloKHJlcHJlc2VuKW4odGF0aW9uKWUKKyhvZilqKHRoZSlnKG9iKTUgYihqZWN0LikwIDMzMCB5IEZtKGdldF9wdWJrZXlcKFwpKTIwOAorNDI5IHkgRnIoUmV0dXJuKTI3IGIodGhlKWgocHVibGljKWcoayluKGV5KWYob2YpaChvYik1CitiKGplY3QuKTAgNTc2IHkgRm0oc2V0X3B1YmtleVwoKXAgRmQoa2V5KWkgRm0oXCkpMjA4Cis2NzYgeSBGcihTZXQpMjggYih0aGUpZihwdWJsaWMpaChrKW4oZXkpZihvZiloKHRoZSlnKG9iKTUKK2IoamVjdCkyNyBiKHRvKWggRmQoa2V5KTcgYiBGciguKTAgODIzIHkgRm0oc2lnblwoKXAKK0ZkKGtleSwpMjkgYihkaWdlc3RfbmFtZSk2IGIgRm0oXCkpMjA4IDkyMiB5IEZyKFNpZ24pMjcKK2IodGhlKWgoTmV0c2NhcClyKGVTUEtJKWcob2IpNSBiKGplY3QpMjcgYih1c2luZylnKHRoZSloKGdpdiluKGVuKWYKK0ZkKGtleSkzNSBiIEZyKGFuZCkyOCBiIEZkKGRpZ2VzdF9uYW1lKTYgYiBGciguKTAgMTA2OQoreSBGbSh2ZXJpZnlcKClwIEZkKGtleSloIEZtKFwpKTIwOCAxMTY5IHkgRnIoViktNyBiKGVyaWZ5KTI3CitiKHRoZSloKE5ldHNjYXApcihlU1BLSSlnKG9iKTUgYihqZWN0KTI3IGIodXNpbmcpZyh0aGUpaChnaXYpbihlbilmCitGZChrZXkpNyBiIEZyKC4pMCAxNDQ4IHkgRmsoMy4yKTk3IGIgRmUocmFuZCkzNCBiIEZrKFwwMjYpZShBbiloCisoaW50ZXJmYWNlKWcodG8pZyh0aGUpZyhPcClzKGVuU1NMKWYocHNldWRvKWgocmFuZG9tKWcobnVtYilzKGVyKWcKKyhnZW5lcmF0byltKHIpMCAxNjQ5IHkgRnIoVGhpcykyOCBiKG1vKXIoZHVsZSlmKGhhbmRsZXMpaCh0aGUpZihPcClyCisoZW5TU0wpaChwc2V1ZG8pZihyYW5kb20pZyhuKW4odW0pbihiKXIoZXIpZyhnZW5lcmF0b3IpZihcKFBSTkdcKSlqCisoYW5kKWUoZGVjbGFyZXMpZih0aGUpaShmb2xsbyluKHdpbmc6KTAgMTc5NiB5IEZtKGFkZFwoKXAKK0ZkKHN0cmluZywpZyhlbnRyKWwob3B5KTcgYiBGbShcKSkyMDggMTg5NSB5IEZyKE1peCkyMgorYihiKW4oeXRlcylnKGZyb20pZyBGZChzdHJpbmcpMzAgYiBGcihpbiluKHRvKTIyIGIodGhlKWgoUFJORyloKHN0YXRlLikKKzM1IGIoVGhlKTIyIGIgRmQoZW50cilsKG9weSkzMCBiIEZyKGFyZ3VtZW4pbih0KTIyIGIoaXMpZyhcKHRoZSloKGxvKW4KKyh3KW4oZXIpZShiKXIob3VuZClpKG9mKTYgYihcKSkyMyBiKGFuKWYoZXN0aW1hdGUpMjA4CisxOTk1IHkob2YpZihobyluKHcpZyhtKW4odWMpbihoKWgocmFuZG9tbmVzcyllKGlzKWgoY29uKW4odGFpbmVkKWcoaW4paAorRmQoc3RyaW5nKTcgYiBGcigsKTIzIGIobWVhc3VyZWQpZShpbiloKGIpbih5dGVzLikzNAorYihGKS03IGIob3IpMjEgYihtb3JlKWcoaW5mb3JtYXRpb24sKWgoc2VlKWcoZS5nLikzNAorYihSRiluKEMpMjA4IDIwOTQgeSgxNzUwLikwIDIyNDEgeSBGbShlZ2RcKClwIEZkKHApbChhdGgpNgorYiBGYyhbKXAgRmQoLCkyOSBiKGJ5dGVzKTE5IGIgRmMoXSlwIEZtKFwpKTIwOCAyMzQxIHkKK0ZyKFF1ZXJ5KTI5IGIodGhlKWooRW4pbih0cm9wKW4oeSllKEdhdGhlcmluZylnKERhZW1vbikxNjI5CisyMzExIHkgRmwoMykxNjk3IDIzNDEgeSBGcihvbiloKHNvKXIoYyluKGspbihldClmIEZkKHApbChhdGgpMzgKK2IgRnIoZm9yKTMwIGIgRmQoYnl0ZXMpMzggYiBGcihiKW4oeXRlcykzMSBiKG9mKWcocmFuZG9tKWYoZGF0YSlnKGFuZCloCisoYW5kKWcodXNlcykyMDggMjQ0MSB5IEZtKGFkZCkyNiBiIEZyKHRvKWgoc2VlZCloKHRoZSlnKFBSTkcuKWcoVGhlKWcKKyhkZWZhdWx0KWcodiktNSBiKGFsdWUpMjcgYihvZikzNCBiIEZkKGJ5dGVzKWggRnIoaXMpMjcKK2IoMjU1LikwIDI2MDIgeSBGbShsb2FkX2ZpbGVcKClwIEZkKHApbChhdGgpNiBiIEZjKFspcAorRmQoLCkyNiBiKGJ5dGVzKTE5IGIgRmMoXSlwIEZtKFwpKTIwOCAyNzAxIHkgRnIoUmVhZCkyOQorYiBGZChieXRlcykzOCBiIEZyKGIpbih5dGVzKTMwIGIoXChvcilmKGFsbCloKG9mKWcoaXQsKWkoaWYpMzcKK2IgRmQoYnl0ZXMpZyBGcihpcykzMSBiKG5lZ2F0aXYpbihlXCkpZShvZiloKGRhdGEpZyhmcm9tKWcodGhlKWcKKyhcMDM0bGUpaCBGZChwKWwoYXRoKTM3IGIgRnIodG8pMzAgYihzZWVkKWcodGhlKWgoUFJORy4pZyhUaGUpMjA4CisyODAxIHkoZGVmYXVsdClkKHYpLTUgYihhbHVlKTI3IGIob2YpMzQgYiBGZChieXRlcyloCitGcihpcykyNyBiKC0xLikwIDI5NDggeSBGbShzY3JlZW5cKFwpKTIwOCAzMDQ4IHkgRnIoQSluKGRkKWcodGhlKWgKKyhjdXJyZW4pbih0KWYoY29uKW4odGVuKW4odHMpZyhvZilnKHRoZSloKHNjcmVlbilmKHRvKWcodGhlKWgoUFJORyloCisoc3RhdGUuKTM3IGIoQSktOSBiKHYpayhhaWxhYmlsaXQpbih5OikzNiBiKFdpbmRvKW4od3MuKTAKKzMxOTQgeSBGbShzZWVkXCgpcCBGZChzdHJpbmcpNyBiIEZtKFwpKTIwOCAzMjk0IHkgRnIoVGhpcykyNworYihpcyloKGVxdWl2KS01IGIoYWxlbiluKHQpMjcgYih0bylnKGNhbGxpbmcpaCBGbShhZGQpZgorRnIod2l0aCloIEZkKGVudHIpbChvcHkpMzUgYiBGcihhcykyNyBiKHRoZSloKGxlbmd0aClmKG9mKWgodGhlKWcKKyhzdHJpbmcuKTAgMzQ0MSB5IEZtKHN0YXR1c1woXCkpMjA4IDM1NDEgeSBGcihSZXR1cm5zKWYodHJ1ZSlnKGlmKWkKKyh0aGUpZShQUk5HKWkoaGFzKWUoYilyKGVlbiloKHNlZWRlZClmKHdpdGgpaChlbm91Z2gpZihkYXRhLClnKGFuZCloCisoZmFsc2UpZihvdGhlcndpc2UuKTAgMzY4NyB5IEZtKHdyaXRlX2ZpbGVcKClwIEZkKHApbChhdGgpNgorYiBGbShcKSkyMDggMzc4NyB5IEZyKFcpLTcgYihyaXRlKTM0IGIoYSlnKG4pbih1bSluKGIpcihlcilnKG9mKWgKKyhyYW5kb20pZShiKW4oeXRlcyloKFwoY3VycmVuKW4odGx5KWcoMTAyNFwpKWYodG8paCh0aGUpaChcMDM0bGUpZgorRmQocClsKGF0aCk2IGIgRnIoLik1OSBiKFRoaXMpMzQgYihcMDM0bGUpaChjYW4pZih0aGVuKWcoYilyKGUpaCh1c2VkKWcKKyh3aXRoKTIwOCAzODg3IHkgRm0obG9hZF9maWxlKTIzIGIgRnIodG8pMjggYihzZWVkKWYodGhlKWgoUFJORyloCisoYWdhaW4uKTAgNDE2NiB5IEZrKDMuMyk5NyBiIEZlKFNTTCkzMyBiIEZrKFwwMjYpZihBbiloKGludGVyZmFjZSloKHRvKQorZSh0aGUpaChTU0wtc3ApcyhlY2lcMDM0YyloKHBhKW0ocnRzKWYob2YpZihPcClzKGVuU1NMKTAKKzQzNjcgeSBGcihUaGlzKWMobW8pcihkdWxlKWYoaGFuZGxlcyloKHRoaW5ncylmKHNwKXIoZWNpXDAzNGMpaCh0bylmCisoU1NMLiloKFRoZXJlKWYoYXJlKWYodCluKHcpbihvKWgob2IpNSBiKGplY3RzKTI3IGIoZGVcMDM0bmVkOikzOAorYihDb24pbih0ZXh0LCkyNyBiKENvbm5lY3Rpb24uKTAgNDUxNCB5IEZtKFNTTHYyX01FVEhPRCkwCis0NjEzIHkoU1NMdjNfTUVUSE9EKTAgNDcxMyB5KFNTTHYyM19NRVRIT0QpMCA0ODEzIHkoVExTdjFfTUVUSE9EKTIwOAorNDkxMiB5IEZyKFRoZXNlKWcoY29uc3RhbiluKHRzKWYocmVwcmVzZW4pbih0KWgodGhlKWgoZGlcMDMzZXJlbiluKHQpZgorKFNTTCloKG1ldGhvKXIoZHMpZyh0bylmKHVzZSloKHdoZW4pZihjcmVhdGluZylnKGEpZyhjb24pbih0ZXh0KWcob2IpNQorYihqZWN0LikwIDUwNTkgeSBGbShWRVJJRllfTk9ORSkwIDUxNTkgeShWRVJJRllfUEVFUilwCiswIDUyMjAgMTU2MCA0IHYgOTIgNTI3NCBhIEZpKDMpMTI3IDUyOTcgeSBGaChTZWUpMjQgYgorRnEoaHR0cDovL3d3dy5sb3RoYSluKHIuY29tL3RlY2gvY3J5cHRvLylwIDAgNTU0OSAzOTAxCis0IHYgMCA1NjQ5IGEgRmcoOCkyMjM5IGIoMyk4MyBiIEZtKE9wZW5TU0wpMjQgYiBGZyhcMDI2KWsoUHl0aG9uKWYKKyhpbnRlcmZhY2UpaCh0bylmKE9wKXIoZW5TU0wpcCBlb3AgZW5kCislJVBhZ2U6IDkgOQorVGVYRGljdCBiZWdpbiA5IDggYm9wIDAgODMgYSBGbShWRVJJRllfRkFJTF9JRl9OKW8oT18pbyhQRUUpbyhSXylvKENFKW8KKyhSVCkyMDggMTgzIHkgRnIoVGhlc2UpMjcgYihjb25zdGFuKW4odHMpZihyZXByZXNlbiluKHQpaCh0aGUpaCh2KW4KKyhlcmlcMDM0Y2F0aW9uKWUobW8pcihkZSloKHVzZWQpaChiKW4oeSlmKHRoZSloKENvbiluKHRleHQpZihvYik1CitiKGplY3QncykyNyBiIEZtKHNldF92ZXJpZnkpZCBGcihtZXRobylyKGQuKTAgMzMwIHkgRm0oRklMRVRZUEVfUEVNKTAKKzQyOSB5KEZJTEVUWVBFX0FTTjEpMjA4IDUyOSB5IEZyKEZpbGUpNDEgYih0KW4oeXApcihlKWcoY29uc3RhbiluKHRzKWYKKyh1c2VkKWgod2l0aClnKHRoZSloIEZtKHVzZV9jZXJ0aWZpY2F0ZSlvKF9mKW8oaWxlKTM0CitiIEZyKGFuZCk0MSBiIEZtKHVzZV9wcml2YXRla2V5X2YpbyhpbClvKGUpMzUgYiBGcihtZXRobylyKGRzKTQxCitiKG9mKTIwOCA2MjggeShDb24pbih0ZXh0KTI3IGIob2IpNSBiKGplY3RzLikwIDc3NSB5CitGbShPUF9TSU5HTEVfREhfVVNFKTAgODc1IHkoT1BfRVBIRU1FUkFMX1JTQSkwIDk3NSB5KE9QX05PX1NTTHYyKTAKKzEwNzQgeShPUF9OT19TU0x2MykwIDExNzQgeShPUF9OT19UTFN2MSkyMDggMTI3MyB5IEZyKENvbnN0YW4pbih0cykzMAorYih1c2VkKWkod2l0aClnIEZtKHNldF9vcHRpb25zKTI2IGIgRnIob2YpMzIgYihDb24pbih0ZXh0KWYob2IpNQorYihqZWN0cy4pNDggYiBGbShPUF9TSU5HTEVfREhfVVNFKTI1IGIgRnIobWVhbnMpMzEgYih0bylnKGFsdyluKGEpbih5cykKK2YoY3JlYXRlKWcoYSkyMDggMTM3MyB5KG5ldykxOSBiKGspbihleSlmKHdoZW4paCh1c2luZylnKGVwaGVtZXJhbClmCisoRGlcMDM2ZS1IZWxsbWFuLikzNCBiIEZtKE9QX0VQSEVNRVJBTF9SU0EpMTMgYiBGcihtZWFucykxOAorYih0byloKGFsdyluKGEpbih5cyllKHVzZSlpKGVwaGVtZXJhbClnKFJTQSkyMDggMTQ3MworeShrKW4oZXlzKWYod2hlbiloKGRvaW5nKWYoUlNBKWkob3ApcihlcmF0aW9ucy4pMzMgYgorRm0oT1BfTk9fU1NMdjIpcCBGcigsKTE2IGIgRm0oT1BfTk9fU1NMdjMpZiBGcihhbmQpaworRm0oT1BfTk9fVExTdjEpMTQgYiBGcihtZWFucykxOSBiKHRvKWcoZGlzYWJsZSlmKHRob3NlKTIwOAorMTU3MiB5KHNwKXIoZWNpXDAzNGMpMjkgYihwcm90bylyKGNvbHMuKTM5IGIoVGhpcykyOQorYihpcylnKGluKW4odGVyZXN0aW5nKWcoaWYpZyh5KW4ob3UncmUpZih1c2luZylnKGUuZy4pNDEKK2IgRm0oU1NMdjIzX01FVEhPRCkyNCBiIEZyKHRvKTI5IGIoZ2V0KWcoYW4pZihTU0x2Mi1jb21wYXRpYmxlKTIwOAorMTY3MiB5KGhhbmRzaGFrKW4oZSwpZShidXQpaShkb24ndClnKHcpbihhbiluKHQpZih0bylnKHVzZSloKFNTTHYyLikwCisxODE5IHkgRm0oQ29udGV4dFR5cGUpMjA4IDE5MTggeSBGcihBKWYoUHl0aG9uKWgodCluKHlwKXIoZSlnKG9iKTUKK2IoamVjdCkyOCBiKHJlcHJlc2VuKW4odGluZylkKHRoZSlqKENvbiluKHRleHQpZyhvYik1CitiKGplY3QpMjcgYih0KW4oeXApcihlLikwIDIwNjUgeSBGbShDb250ZXh0XCgpcCBGZChtZXRobylsKGQpOQorYiBGbShcKSkyMDggMjE2NSB5IEZyKEYpLTcgYihhY3RvcnkpMzQgYihmdW5jdGlvbilpKHRoYXQpZyhjcmVhdGVzKWYoYSkKK2cobmV3KWgoQ29uKW4odGV4dClmKG9iKTUgYihqZWN0KTM2IGIoZ2l2KW4oZW4pZShhbilpKFNTTClnKG1ldGhvKXIoZC4pCis2MSBiKFRoZSkzNiBiKG1ldGhvKXIoZClnKHNob3VsZClnKGIpcihlKTIwOCAyMjY1IHkgRm0oU1NMdjJfTUVUSE9EKXAKK0ZyKCwpMjIgYiBGbShTU0x2M19NRVRIT0QpcCBGcigsKWggRm0oU1NMdjIzX01FVEhPRClmCitGcihvcikyNyBiIEZtKFRMU3YxX01FVEhPRClwIEZyKC4pMCAyNDExIHkgRm0oQ29ubmVjdGlvblR5cGUpMjA4CisyNTExIHkgRnIoQSlnKFB5dGhvbiloKHQpbih5cClyKGUpZyhvYik1IGIoamVjdCkyOCBiKHJlcHJlc2VuKW4odGluZylkCisodGhlKWooQ29ubmVjdGlvbilmKG9iKTUgYihqZWN0KTI4IGIodCluKHlwKXIoZS4pMCAyNjU4Cit5IEZtKENvbm5lY3Rpb25cKClwIEZkKGMpbChvbnRleHQsKWMoc28pbChja2V0KTggYiBGbShcKSkyMDgKKzI3NTggeSBGcihGKS03IGIoYWN0b3J5KTI2IGIoZnVjbmN0aW9uKWkodGhhdClnKGNyZWF0ZXMpZShhKWgobmV3KWgKKyhDb25uZWN0aW9uKWYob2IpNSBiKGplY3QpMjcgYihnaXYpbihlbilnKGFuKWcoU1NMKWgoY29uKW4odGV4dClmKGFuZCloCisoYSlmKHNvKXIoYyluKGspbihldCkzNTM4IDI3MjcgeSBGbCg0KTM2MDMgMjc1OCB5IEZyKG9iKTUKK2IoamVjdC4pMCAyOTA0IHkgRm4oZXhjZXB0aW9uKTMyIGIgRm0oRXJyb3IpMjA4IDMwMDQKK3kgRnIoVGhpcylpKGV4Y2VwdGlvbilnKGlzKWgodXNlZClmKGFzKWcoYSloKGJhc2UpZShjbGFzcyloKGZvcilnKHRoZSloCisob3RoZXIpZihTU0wtcmVsYXRlZClnKGV4Y2VwdGlvbnMsKWkoYnV0KWYobWEpbih5KWYoYWxzbylmKGIpcihlKWkKKyhyYWlzZWQpMjA4IDMxMDQgeShkaXJlY3RseSktNyBiKC4pMjA4IDMyMzYgeShXaGVuZXYpbihlcikzNgorYih0aGlzKWgoZXhjZXB0aW9uKWcoaXMpZyhyYWlzZWQpZihkaXJlY3RseSktNyBiKCwpNDAKK2IoaXQpZChoYXMpZyhhKWYobGlzdClpKG9mKWYoZXJyb3IpZShtZXNzYWdlcyloKGZyb20pZyh0aGUpaShPcClyCisoZW5TU0wpZihlcnJvcikyMDggMzMzNiB5KHF1ZXVlLClrKHdoZXJlKWQoZWFjKW4oaClmKGl0ZW0paShpcylnKGEpZgorKHR1cGxlKWggRm0oXCgpcCBGZChsaWIpNSBiIEZtKCwpNDQgYiBGZChmdW5jdGlvbik2IGIKK0ZtKCwpNDMgYiBGZChyKWwoZSlsKGFzb24pNiBiIEZtKFwpKXAgRnIoLik3MCBiKEhlcmUpMzgKK2IgRmQobGliKTUgYiBGcigsKTQzIGIgRmQoZnVuY3Rpb24paCBGcihhbmQpMzkgYiBGZChyKWwoZSlsKGFzb24pNDUKK2IgRnIoYXJlKTM3IGIoYWxsKTIwOCAzNDM2IHkoc3RyaW5ncywpMjYgYihkZXNjcmliaW5nKWgod2hlcmUpZyhhbmQpZworKHdoYXQpaCh0aGUpZyhwcm9ibGVtKWYoaXMuKTM2IGIoU2VlKTI4IGIgRmQoZXJyKXAgRnIoXCgzXCkpZyhmb3IpZgorKG1vcmUpZyhpbmZvcm1hdGlvbi4pMCAzNTgzIHkgRm4oZXhjZXB0aW9uKTMyIGIgRm0oWmVyb1JldHVybkVycm9yKTIwOAorMzY4MiB5IEZyKFRoaXMpZyhleGNlcHRpb24pZyhtYXRjKW4oaGVzKWcodGhlKWgoZXJyb3IpZChyZXR1cm4paShjbylyCisoZGUpaCBGbShTU0xfRVJST1JfWkVST18pbyhSRSlvKFRVUilvKE4pcCBGcigsKTI2IGIoYW5kKTMzCitiKGlzKWYocmFpc2VkKWYod2hlbilpKHRoZSlnKFNTTCkyMDggMzc4MiB5KENvbm5lY3Rpb24pYyhoYXMpZyhiKXIoZWVuKQoraChjbG9zZWQuKTQzIGIoSW4pMjkgYihTU0wpaCgzLjApZihhbmQpaChUTFMpZygxLjAsKWYodGhpcyloKG9ubHkpZihvKXIKKyhjY3VycylnKGlmKWgoYSlnKGNsb3N1cmUpZShhbGVydCloKGhhcylnKG8pcihjY3VycmVkKTIwOAorMzg4MSB5KGluKWcodGhlKWcocHJvdG8pcihjb2wsKWYoaS5lLik0MSBiKHRoZSkyOSBiKGNvbm5lY3Rpb24pZihoYXMpZworKGIpcihlZW4paShjbG9zZWQpZShjbGVhbmx5KS03IGIoLik0MCBiKE5vdGUpMjkgYih0aGF0KWcodGhpcylnKGRvKXIKKyhlcylmKG5vdCloKG5lY2Vzc2FyaWx5KWUobWVhbikyMDggMzk4MSB5KHRoYXQpZyh0aGUpaCh0cmFuc3ApcihvcnQpZgorKGxhKW4oeSluKGVyKWYoXChlLmcuKTM2IGIoYSkyOCBiKHNvKXIoYyluKGspbihldFwpKWUoaGFzKWgoYilyKGVlbiloCisoY2xvc2VkLikyMDggNDExNCB5KEl0KWsobWEpbih5KWYoc2VlbSloKGEpZihsaXR0bGUpaShzdHJhbmdlKWUodGhhdCloCisodGhpcylnKGlzKWcoYW4pZyhleGNlcHRpb24sKWcoYnV0KWgoaXQpZihkbylyKGVzKWcobWF0YyluKGgpZyhhbilmCitGbShTU0xfRVJST1IpZSBGcihjbylyKGRlLClqKGFuZClnKGlzKTIwOCA0MjE0IHkodiluKGVyeSkyNgorYihjb24pbih2KW4oZW5pZW4pbih0LikwIDQzNjAgeSBGbihleGNlcHRpb24pMzIgYiBGbShXYW50UmVhZEVycm9yKTIwOAorNDQ2MCB5IEZyKFRoZSlpKG9wKXIoZXJhdGlvbillKGRpZClqKG5vdClmKGNvbXBsZXRlOylqKHRoZSlkKHNhbWUpZworKEkvTylmKG1ldGhvKXIoZCloKHNob3VsZClnKGIpcihlKWcoY2FsbGVkKWcoYWdhaW4pZihsYXRlciwpaSh3aXRoKWYKKyh0aGUpaChzYW1lKTIwOCA0NTYwIHkoYXJndW1lbiluKHRzLilnKEFuKW4oeSkyOCBiKEkvTyllKG1ldGhvKXIoZClpCisoY2FuKWYobGVhZCloKHRvKWYodGhpcyloKHNpbmNlKWYobmV3KWgoaGFuZHNoYWspbihlcyllKGNhbiloKG8pcihjY3VyKQorZyhhdClnKGFuKW4oeSlnKHRpbWUuKTAgNDcwNyB5IEZuKGV4Y2VwdGlvbikzMiBiIEZtKFdhbnRXcml0ZUVycm9yKTIwOAorNDgwNiB5IEZyKFNlZSkyNyBiIEZtKFdhbnRSZWFkRXJyb3IpcCBGciguKTAgNDk1MyB5IEZuKGV4Y2VwdGlvbikzMgorYiBGbShXYW50WDUwOUxvb2t1cEUpbyhycilvKG9yKTIwOCA1MDUzIHkgRnIoVGhlKTI0IGIob3ApcihlcmF0aW9uKWcKKyhkaWQpaChub3QpZyhjb21wbGV0ZSlmKGIpcihlY2F1c2UpZyhhbiloKGFwcGxpY2F0aW9uKWYoY2FsbGJhYyluKGspZgorKGhhcyloKGFzayluKGVkKWcodG8pZyhiKXIoZSloKGNhbGxlZClnKGFnYWluLikzNCBiKFRoZSkyNQorYihJL08pMjA4IDUxNTIgeShtZXRobylyKGQpZihzaG91bGQpaChiKXIoZSlmKGNhbGxlZClnKGFnYWluKWcobGF0ZXIsKWcKKyh3aXRoKWgodGhlKWcoc2FtZSllKGFyZ3VtZW4pbih0cy4pMzUgYihOb3RlOilnKFRoaXMpMjQKK2IodyluKG9uJ3QpaChvKXIoY2N1cillKGluKWkodGhpcylnKHYpbihlcnNpb24sKXAgMCA1MjIyCisxNTYwIDQgdiA5MiA1Mjc1IGEgRmkoNCkxMjcgNTI5OSB5IEZoKEEpbihjdHVhbGx5KS02CitiKCwpMjUgYihhbGwpZSh0aGF0KWooaXMpZChyZXF1aXJlZClqKGlzKWUoYW4pZyhvYil0KGplY3QpaCh0aGF0KWgKK0ZiKGIpbChlaGF2ZXMpZSBGaChsaWspbihlKWcoYSloKHNvKXIoYyluKGspbihldCwpZyh5KW4ob3UpZyhjb3VsZClnCisoZXYpbihlbilnKHVzZSlmKFwwMzRsZXMsKWcoZXYpbihlbilpKHRob3VnaClmKGl0J2QpZihiKXIoZSloKHRyaWMpbgorKGt5KWcodG8pMCA1Mzc3IHkoZ2V0KWcodGhlKWYoaGFuZHNoYWspbihlcyloKHJpZ2gpbih0ISlwCiswIDU1NDkgMzkwMSA0IHYgMCA1NjQ5IGEgRmcoMy4zKTgyIGIgRm0oU1NMKTI2IGIgRmcoXDAyNilpKEFuKWcKKyhpbnRlcmZhY2UpZyh0bylmKHRoZSlnKFNTTC1zcClyKGVjaVwwMzRjKWgocGEpbihydHMpZihvZiloKE9wKXIoZW5TU0wpCisxNjUyIGIoOSlwIGVvcCBlbmQKKyUlUGFnZTogMTAgMTAKK1RlWERpY3QgYmVnaW4gMTAgOSBib3AgMjA4IDgzIGEgRnIoYXMpMjYgYih0aGVyZSlpKGFyZSllKG5vKWkoc3VjKW4oaClmCisoY2FsbGJhYyluKGtzKWYoaW4paSh0aGlzKWYodiluKGVyc2lvbi4pMCAyMzAgeSBGbihleGNlcHRpb24pMzIKK2IgRm0oU3lzQ2FsbEVycm9yKTIwOCAzMzAgeSBGcihUaGUpMjUgYiBGbShTeXNDYWxsRXJyb3IpMjAKK2IgRnIobylyKGNjdXJzKWsod2hlbilpKHRoZXJlJ3MpZShhbiloKEkvTylnKGVycm9yKWUoYW5kKWkoT3ApcgorKGVuU1NMJ3MpZyhlcnJvcillKHF1ZXVlKWkoZG8pcihlcylnKG5vdClnKGNvbiluKHRhaW4pZyhhbiluKHkpMjA4Cis0MjkgeShpbmZvcm1hdGlvbi4pNTkgYihUaGlzKTM2IGIoY2FuKWYobWVhbilnKHQpbih3KW4obylnKHRoaW5nczopNTIKK2IoQW4pMzYgYihlcnJvcilkKGluKWoodGhlKWcodHJhbnNwKXIob3J0KWUocHJvdG8pcihjb2wsKWkob3IpZihhbilnCisoZW5kKWgob2YpZihcMDM0bGUpaCh0aGF0KTIwOCA1MjkgeSh2aW9sYXRlcykyNiBiKHRoZSlpKHByb3RvKXIoY29sLikzNgorYihUaGUpMjcgYihwYXJhbWV0ZXIpZih0bylpKHRoZSlnKGV4Y2VwdGlvbilmKGlzKWcoYWx3KW4oYSluKHlzKWYoYSloCisocGFpcilnIEZtKFwoKXAgRmQoZXJybnVtKTYgYiBGbSgsKTQyIGIgRmQoZXJyc3RyKTkgYgorRm0oXCkpcCBGciguKTAgNzkyIHkgRmcoQ29udGV4dCkyNyBiKG9iamVjdHMpMCA5OTIgeQorRnIoQ29uKW4odGV4dClnKG9iKTUgYihqZWN0cykyNyBiKGhhKW4odiluKGUpZyh0aGUpaChmb2xsbyluKHdpbmcpZQorKG1ldGhvKXIoZHM6KTAgMTEzOSB5IEZtKGNoZWNrX3ByaXZhdGVrZXkpbyhcKFwpKTIwOAorMTI1NSB5IEZyKENoZWMpbihrKWsoaWYpaSh0aGUpZyhwcml2KS01IGIoYXRlKTMxIGIoayluKGV5KWYoXChsb2FkZWQpaAorKHdpdGgpaCBGbSh1c2VfcHJpdmF0ZWtleSlwIEZjKFspcCBGbShfKW8oZmkpbyhsZSkxMQorYiBGYyhdKXAgRnIoXCkpMjYgYihtYXRjKW4oaGVzKWsodGhlKWkoY2VydGlcMDM0Y2F0ZSlmKFwobG9hZGVkKWcod2l0aCkKKzIwOCAxMzgzIHkgRm0odXNlX2NlcnRpZmljYXRlKW8gRmMoWylwIEZtKF8pbyhmaWwpbyhlKTExCitiIEZjKF0pcCBGcihcKS4pMzEgYihSZXR1cm5zKWQodHJ1ZSlmKGlmKWgodGhleSlnKG1hdGMpbihoLClmKGZhbHNlKWgKKyhvdGhlcndpc2UuKTAgMTUzMCB5IEZtKGdldF9hcHBfZGF0YVwoXCkpMjA4IDE2MzAgeSBGcihSZXRyaWV2KW4oZSllCisoYXBwbGljYXRpb24paChkYXRhKWcoYXMpZyhzZXQpaChiKW4oeSlnIEZtKHNldF9hcHBfZGF0YSlwCitGciguKTAgMTc3NiB5IEZtKGdldF9jZXJ0X3N0b3JlXChcKSkyMDggMTg3NiB5IEZyKFJldHJpZXYpbihlKTM0CitiKHRoZSlpKGNlcnRpXDAzNGNhdGUpZihzdG9yZSlmKFwoYSloKFg1MDlTdG9yZSlmKG9iKTUKK2IoamVjdFwpKTM1IGIodGhhdCloKHRoZSlmKGNvbiluKHRleHQpZyh1c2VzLik2MCBiKFRoaXMpMzUKK2IoY2FuKWcoYilyKGUpaCh1c2VkKWYodG8pZyhhZGQpMjA4IDE5NzYgeSgidHJ1c3RlZCIpMjYKK2IoY2VydGlcMDM0Y2F0ZXMpaCh3aXRob3V0KWgodXNpbmcpZih0aGUuKTM3IGIgRm0obG9hZF92ZXJpZnlfbG9jYSlvCisodGlvKW8obnMpbyhcKFwpKTIxIGIgRnIobWV0aG8pcihkLikwIDIxMjMgeSBGbShnZXRfdGltZW91dFwoXCkpMjA4CisyMjIyIHkgRnIoUmV0cmlldiluKGUpMjYgYihzZXNzaW9uKWgodGltZW91dCwpaChhcylmKHNldClnKGIpbih5KWkKK0ZtKHNldF90aW1lb3V0KXAgRnIoLilqKFRoZSljKGRlZmF1bHQpZyhpcylmKDMwMClmKHNlY29uZHMuKTAKKzIzNjkgeSBGbShnZXRfdmVyaWZ5X2RlcHRoKW8oXChcKSkyMDggMjQ2OSB5IEZyKFJldHJpZXYpbihlKWcodGhlKWkKKyhDb24pbih0ZXh0KWYob2IpNSBiKGplY3QncykyOCBiKHYpbihlcmlmeSllKGRlcHRoLClqKGFzKWQoc2V0KWkoYiluKHkpCitnIEZtKHNldF92ZXJpZnlfZGVwdGgpcCBGciguKTAgMjYxNiB5IEZtKGdldF92ZXJpZnlfbW9kZVwoKW8oXCkpMjA4CisyNzE1IHkgRnIoUmV0cmlldiluKGUpZSh0aGUpaShDb24pbih0ZXh0KWYob2IpNSBiKGplY3QncykyOAorYih2KW4oZXJpZnkpZShtbylyKGRlLClpKGFzKWYoc2V0KWgoYiluKHkpZyBGbShzZXRfdmVyaWZ5X21vZGUpcAorRnIoLikwIDI4NjIgeSBGbShsb2FkX2NsaWVudF9jYVwoKXAgRmQocClsKGVtXDAzNGxlKTYKK2IgRm0oXCkpMjA4IDI5NjIgeSBGcihSZWFkKTMzIGIoYSlnKFwwMzRsZSloKHdpdGgpZyhQRU0tZm9ybWF0dGVkKWcKKyhjZXJ0aVwwMzRjYXRlcylmKHRoYXQpaCh3aWxsKWcoYilyKGUpZyhzZW4pbih0KWYodG8paCh0aGUpZyhjbGllbiluKHQpCitmKHdoZW4paChyZXF1ZXN0aW5nKWYoYSlnKGNsaWVuKW4odCkyMDggMzA2MSB5KGNlcnRpXDAzNGNhdGUuKTAKKzMyMDggeSBGbShsb2FkX3ZlcmlmeV9sb2NhKW8odGkpbyhvbnMpbyhcKClwIEZkKHApbChlbVwwMzRsZSk2CitiIEZtKFwpKTIwOCAzMzA4IHkgRnIoU3ApcihlY2lmeSkyNCBiKHdoZXJlKWYoQ0EpZyhjZXJ0aVwwMzRjYXRlcylnCisoZm9yKWcodiluKGVyaVwwMzRjYXRpb24pZihwdXJwKXIob3NlcyloKGFyZSlmKGxvKXIoY2F0ZWQuKTM1CitiKFRoZXNlKTIzIGIoYXJlKWcodHJ1c3RlZClnKGNlcnRpXDAzNGNhdGVzLikzNSBiKE5vdGUpMjA4CiszNDA3IHkodGhhdCkyNyBiKHRoZSloKGNlcnRpXDAzNGNhdGVzKWYoaGEpbih2KW4oZSlmKHRvKWkoYilyKGUpZyhpbilnCisoUEVNKWcoZm9ybWF0LikwIDM1NTQgeSBGbShsb2FkX3RtcF9kaFwoKXAgRmQoZGhcMDM0bGUpNgorYiBGbShcKSkyMDggMzY1NCB5IEZyKExvYWQpMjYgYihwYXJhbWV0ZXJzKWcoZm9yKWgoRXBoZW1lcmFsKWcKKyhEaVwwMzZlLUhlbGxtYW4paChmcm9tKWcgRmQoZGhcMDM0bGUpNiBiIEZyKC4pMCAzODAxCit5IEZtKHNldF9hcHBfZGF0YVwoKXAgRmQoZGF0YSlnIEZtKFwpKTIwOCAzOTAwIHkgRnIoQXNzbylyKGNpYXRlKTI1CitiIEZkKGRhdGEpMzMgYiBGcih3aXRoKTI3IGIodGhpcylmKENvbiluKHRleHQpZihvYik1CitiKGplY3QuKTM2IGIgRmQoZGF0YSllIEZyKGNhbikyNSBiKGIpcihlKWkocmV0cmlldiluKGVkKWQobGF0ZXIpaQorKHVzaW5nKWYodGhlKWkgRm0oZ2V0X2FwcF9kYXRhKTIxIGIgRnIobWV0aG8pcihkLikwIDQwNDcKK3kgRm0oc2V0X2NpcGhlcl9saXN0XCgpbyBGZChjaXBoZXJzKTcgYiBGbShcKSkyMDggNDE0NworeSBGcihTZXQpMjggYih0aGUpZyhsaXN0KWgob2YpZihjaXBoZXJzKWYodG8paChiKXIoZSlnKHVzZWQpZyhpbilnCisodGhpcyloKGNvbiluKHRleHQuKTM3IGIoU2VlKTI4IGIodGhlKWgoT3ApcihlblNTTClmKG1hbiluKHVhbClmKGZvciloCisobW9yZSlmKGluZm9ybWF0aW9uKWcoXChlLmcuKTIwOCA0MjQ3IHkoY2lwaGVyc1woMVwpXCkpMAorNDM5MyB5IEZtKHNldF9pbmZvX2NhbGxiYWMpbyhrXCgpbyBGZChjKWwoYWwpdChsYilsKGFjayk5CitiIEZtKFwpKTIwOCA0NDkzIHkgRnIoU2V0KTMzIGIodGhlKWYoaW5mb3JtYXRpb24pZyhjYWxsYmFjKW4oaylmKHRvKWkKK0ZkKGMpbChhbCl0KGxiKWwoYWNrKTkgYiBGciguKTU0IGIoVGhpcykzMiBiKGZ1bmN0aW9uKWgod2lsbClnKGIpcihlKWcKKyhjYWxsZWQpZihmcm9tKWcodGltZSloKHRvKWcodGltZSlnKGR1cmluZylmKFNTTCkyMDgKKzQ1OTMgeShoYW5kc2hhayluKGVzLikyMDggNDcyNiB5IEZkKGMpbChhbCl0KGxiKWwoYWNrKWoKK0ZyKHNob3VsZCkyNCBiKHRhayluKGUpZyh0aHJlZSlnKGFyZ3VtZW4pbih0czopMzQgYihhKTI1CitiKENvbm5lY3Rpb24pZihvYik1IGIoamVjdCkyNCBiKGFuZClnKHQpbih3KW4obylnKGluKW4odGVnZXJzLikzNQorYihUaGUpMjQgYihcMDM0cnN0KWgoaW4pbih0ZWdlcillKHNwKXIoZWNpXDAzNGVzKTIwOAorNDgyNSB5KHdoZXJlKTI5IGIoaW4paSh0aGUpZyhTU0wpZyhoYW5kc2hhayluKGUpZSh0aGUpaShmdW5jdGlvbilnKHcpbgorKGFzKWUoY2FsbGVkLClpKGFuZClmKHRoZSloKG90aGVyKWYodGhlKWgocmV0dXJuKWYoY28pcihkZSlnKGZyb20pZyhhKWcKKyhcKHApcihvc3NpYmx5KTIwOCA0OTI1IHkoZmFpbGVkXCkpZChpbiluKHRlcm5hbClnKGZ1bmN0aW9uKWgoY2FsbC4pMAorNTA3MiB5IEZtKHNldF9vcHRpb25zXCgpcCBGZChvcHRpb25zKTcgYiBGbShcKSkyMDggNTE3MQoreSBGcihBKW4oZGQpMjcgYihTU0wpaChvcHRpb25zLikzNiBiKE9wdGlvbnMpMjcgYih5KW4ob3UpZyhoYSluKHYpbihlKWcKKyhzZXQpZyhiKXIoZWZvcmUpZyhhcmUpZyhub3QpaChjbGVhcmVkISkyMDggNTMwNCB5KFRoaXMpZihtZXRobylyKGQpaAorKHNob3VsZClmKGIpcihlKWgodXNlZClnKHdpdGgpZyh0aGUpZyBGbShPUF8qKWUgRnIoY29uc3RhbiluKHRzLilwCiswIDU1NDkgMzkwMSA0IHYgMCA1NjQ5IGEgRmcoMTApMjE5NyBiKDMpODMgYiBGbShPcGVuU1NMKTI0CitiIEZnKFwwMjYpayhQeXRob24pZihpbnRlcmZhY2UpaCh0bylmKE9wKXIoZW5TU0wpcCBlb3AKK2VuZAorJSVQYWdlOiAxMSAxMQorVGVYRGljdCBiZWdpbiAxMSAxMCBib3AgMCA5MCBhIEZtKHNldF9wYXNzd2RfY2JcKClwIEZkKGMpbChhbCl0KGxiKWwKKyhhY2spOSBiIEZjKFspcCBGZCgsKTI1IGIodXNlcilsKGRhdGEpMTkgYiBGYyhdKXAgRm0oXCkpMjA4CisxODkgeSBGcihTZXQpNDIgYih0aGUpZyhwYXNzcGhyYXNlKWYoY2FsbGJhYyluKGspZih0bylpCitGZChjKWwoYWwpdChsYilsKGFjayk5IGIgRnIoLik4MiBiKFRoaXMpNDIgYihmdW5jdGlvbiloKHdpbGwpZihiKXIoZSlnCisoY2FsbGVkKWcod2hlbilnKGEpZyhwcml2KS01IGIoYXRlKTQyIGIoayluKGV5KWYod2l0aCloKGEpMjA4CisyODkgeShwYXNzcGhyYXNlKTI1IGIoaXMpaihsb2FkZWQuKTIwOCA0MjIgeSBGZChjKWwoYWwpdChsYilsKGFjayk1NAorYiBGcihzaG91bGQpNDMgYih0YWspbihlKWYoYSloKGIpcihvKXIob2xlYW4pZyhhcmd1bWVuKW4odClmCitGZChyKWwoZXApbChlKWwoYXQpNTEgYiBGcihhbmQpNDMgYihhbilnKGFyYml0cmFyeSllKGFyZ3VtZW4pbih0KWgKK0ZkKGRhdGEpNTEgYiBGcihhbmQpNDMgYihyZXR1cm4pZyh0aGUpMjA4IDUyMSB5KHBhc3NwaHJhc2UpMzMKK2IoZW4pbih0ZXJlZClpKGIpbih5KWYodGhlKWkodXNlci4pNTkgYihJZik0MiBiIEZkKHIpbChlcClsKGUpbChhdCloCitGcihpcykzNiBiKHRydWUpZih0aGVuKWcgRmQoYylsKGFsKXQobGIpbChhY2spNDYgYiBGcihzaG91bGQpMzUKK2IoYXNrKWcoZm9yKWYodGhlKWkocGFzc3BocmFzZSlkKHQpbih3aWNlKTIwOCA2MjEgeShhbmQpZChtYWspbihlKWcKKyhzdXJlKWcodGhhdCloKHRoZSlnKHQpbih3KW4obylmKGVuKW4odHJpZXMpZyhhcmUpZyhlcXVhbC4pNDYKK2IoVGhlKTMxIGIgRmQoZGF0YSkzOCBiIEZyKGFyZ3VtZW4pbih0KTI5IGIoaXMpaSh0aGUpZworRmQodXNlcilsKGRhdGEpMzggYiBGcih2KS01IGIoYXJpYWJsZSkyOSBiKHBhc3NlZCloKHRvKTIwOAorNzIxIHkodGhlKWogRm0oc2V0X3Bhc3N3ZF9jYikyNyBiIEZyKG1ldGhvKXIoZC4pNTQgYihJZikzMworYihhbilnKGVycm9yKWUobylyKGNjdXJzLClqIEZkKGMpbChhbCl0KGxiKWwoYWNrKTQzIGIKK0ZyKHNob3VsZCkzMyBiKHJldHVybilmKGEpaChmYWxzZSlnKHYpLTUgYihhbHVlKTMyIGIoXChlLmcuKTUzCitiKGFuKTMzIGIoZW1wdCluKHkpMjA4IDgyMCB5KHN0cmluZ1wpLikwIDk2NyB5IEZtKHNldF9zZXNzaW9uX2lkXCgpcAorRmQobilvKGFtZSk2IGIgRm0oXCkpMjA4IDEwNjcgeSBGcihTZXQpMzMgYih0aGUpaChjb24pbih0ZXh0KWYKK0ZkKG5hbWUpMzkgYiBGcih3aXRoaW4pMzQgYih3aGljKW4oaClmKGEpZyhzZXNzaW9uKWYoY2FuKWgoYilyKGUpaAorKHJldXNlZCllKGZvciloKHRoaXMpZyhDb24pbih0ZXh0KWcob2IpNSBiKGplY3QuKTU0IGIoVGhpcykzMworYihpcylnKG5lZWRlZCkyMDggMTE2NiB5KHdoZW4pZShkb2luZylnKHNlc3Npb24pZyhyZXN1bXB0aW9uLCloKGIpcgorKGVjYXVzZSlnKHRoZXJlKWYoaXMpaChubylmKHcpbihhKW4oeSlnKGZvcilnKGEpZyhzdG9yZWQpZyhzZXNzaW9uKWYKKyh0bylpKGtubyluKHcpZih3aGljKW4oaClnKENvbiluKHRleHQpMjA4IDEyNjYgeShvYik1CitiKGplY3QpMjcgYihpdCloKGlzKWYoYXNzbylyKGNpYXRlZClnKHdpdGguKTM3IGIgRmQobmFtZSlkCitGcihtYSluKHkpMjcgYihiKXIoZSloKGFuKW4oeSllKGJpbmFyeSloKGRhdGEuKTAgMTQxMworeSBGbShzZXRfdGltZW91dFwoKXAgRmQodGltZSlsKG91dCk4IGIgRm0oXCkpMjA4IDE1MTIKK3kgRnIoU2V0KTI5IGIodGhlKWcodGltZW91dCloKGZvcillKG5ld2x5KWgoY3JlYXRlZClmKHNlc3Npb25zKWcoZm9yKWgKKyh0aGlzKWcoQ29uKW4odGV4dClnKG9iKTUgYihqZWN0KTI4IGIodG8paCBGZCh0aW1lKWwob3V0KTgKK2IgRnIoLik0MSBiIEZkKHRpbWUpbChvdXQpMzYgYiBGcihtKW4odXN0KTI5IGIoYilyKGUpaChnaXYpbihlbikyMDgKKzE2MTIgeShpbilmKFwod2hvbGVcKSlmKHNlY29uZHMuKTQwIGIoVGhlKTI5IGIoZGVmYXVsdClnKHYpLTUKK2IoYWx1ZSkyOCBiKGlzKWgoMzAwKWUoc2Vjb25kcy4pNDAgYihTZWUpMjkgYih0aGUpZyhPcClyKGVuU1NMKWcobWFuKW4KKyh1YWwpZihmb3IpZyhtb3JlKWcoaW5mb3JtYXRpb24pMjA4IDE3MTIgeShcKGUuZy4pMzYKK2IoU1NMX0NUWF9zZXRfdGltZW91dFwoM1wpXCkuKTAgMTg1OSB5IEZtKHNldF92ZXJpZnlcKClwCitGZChtbylsKGRlLCkyNiBiKGMpbChhbCl0KGxiKWwoYWNrKTkgYiBGbShcKSkyMDggMTk1OAoreSBGcihTZXQpMjggYih0aGUpaCh2KW4oZXJpXDAzNGNhdGlvbillKFwwMzVhZ3MpZyhmb3IpaCh0aGlzKWgoQ29uKW4KKyh0ZXh0KWYob2IpNSBiKGplY3QpMjggYih0bylnIEZkKG1vKWwoZGUpMzYgYiBGcihhbmQpMjgKK2Ioc3ApcihlY2lmeSloKHRoYXQpZiBGZChjKWwoYWwpdChsYilsKGFjaykzOSBiIEZyKHNob3VsZCkyOAorYihiKXIoZSloKHVzZWQpZyhmb3IpMjA4IDIwNTggeSh2KW4oZXJpXDAzNGNhdGlvbikyMworYihjYWxsYmFjKW4oa3MuKTM0IGIgRmQobW8pbChkZSllIEZyKHNob3VsZCkyNSBiKGIpcihlKWcob25lKWcob2YpMzEKK2IgRm0oVkVSSUZZX05PTkUpMjAgYiBGcihhbmQpMjUgYiBGbShWRVJJRllfUEVFUilwIEZyKC4pMjAKK2IoSWYpMzIgYiBGbShWRVJJRllfUEVFUikyMCBiIEZyKGlzKTI1IGIodXNlZCwpMjA4IDIxNTcKK3kgRmQobW8pbChkZSlrIEZyKGNhbikyMiBiKGIpcihlKWgoT1I6ZWQpZih3aXRoKWggRm0oVkVSSUZZX0ZBSUxfSUZfKW8KKyhOT18pbyhQRSlvKEVSKW8oX0NFKW8oUlQpMTYgYiBGcihhbmQpMjIgYiBGbShWRVJJRllfQ0xJRU5UX09OKW8oQ0UpMTYKK2IgRnIodG8pMjIgYihmdXJ0aGVyKWcoY29uKW4odHJvbCkyMDggMjI1NyB5KHRoZSkyOCBiKGIpcihlaGEpbih2aW91ci4pCisyMDggMjM5MCB5IEZkKGMpbChhbCl0KGxiKWwoYWNrKTM0IGIgRnIoc2hvdWxkKTI0IGIodGFrKW4oZSlnKFwwMzR2KW4KKyhlKWYoYXJndW1lbiluKHRzOikzNCBiKEEpMjQgYihDb25uZWN0aW9uKWcob2IpNSBiKGplY3QsKTI0CitiKGFuKWcoWDUwOSlmKG9iKTUgYihqZWN0LCkyNSBiKGFuZCllKHRocmVlKWgoaW4pbih0ZWdlcilmKHYpLTUKK2IoYXJpYWJsZXMsKTIwOCAyNDg5IHkod2hpYyluKGgpMjggYihhcmUpZyhpbiloKHR1cm4pZyhwKXIob3RlbiluKHRpYWwpCitnKGVycm9yKWUobiluKHVtKW4oYilyKGVyLClpKGVycm9yKWUoZGVwdGgpaShhbmQpZyhyZXR1cm4pZyhjbylyKGRlLik0MAorYiBGZChjKWwoYWwpdChsYilsKGFjaylnIEZyKHNob3VsZCkyOCBiKHJldHVybiloKHRydWUpZyhpZikyMDgKKzI1ODkgeSh2KW4oZXJpXDAzNGNhdGlvbilkKHBhc3NlcylnKGFuZCloKGZhbHNlKWgob3RoZXJ3aXNlLikwCisyNzM2IHkgRm0oc2V0X3ZlcmlmeV9kZXB0aClvKFwoKXAgRmQoZGVwdGgpNiBiIEZtKFwpKTIwOAorMjgzNiB5IEZyKFNldCkzNiBiKHRoZSlnKG1heGltKW4odW0pZihkZXB0aCloKGZvcilnKHRoZSlnCisoY2VydGlcMDM0Y2F0ZSlmKGMpbihoYWluKWcodiluKGVyaVwwMzRjYXRpb24pZih0aGF0KWkoc2hhbGwpZihiKXIoZSloCisoYWxsbyluKHcpbihlZCllKGZvcilpKHRoaXMpZihDb24pbih0ZXh0KTIwOCAyOTM1IHkob2IpNQorYihqZWN0LikwIDMwODIgeSBGbSh1c2VfY2VydGlmaWNhdGVcKClvIEZkKGMpbChlcnQpagorRm0oXCkpMjA4IDMxODIgeSBGcihVc2UpMjcgYih0aGUpaChjZXJ0aVwwMzRjYXRlKWYgRmQoYylsKGVydCkzNQorYiBGcih3aGljKW4oaCkyOCBiKGhhcylmKHRvKWcoYilyKGUpaChhKWYoWDUwOSlnKG9iKTUKK2IoamVjdC4pMCAzMzI5IHkgRm0odXNlX2NlcnRpZmljYXRlXylvKGNoKW8oYWluKW8oX2YpbyhpbClvKGVcKClwCitGZChcMDM0KW8obGUpaCBGbShcKSkyMDggMzQyOCB5IEZyKExvYWQpMjYgYihhKWgoY2VydGlcMDM0Y2F0ZSlnKGMpbgorKGhhaW4pZyhmcm9tKWggRmQoXDAzNGxlKTM0IGIgRnIod2hpYyluKGgpMjcgYihtKW4odXN0KWgoYilyKGUpZyhQRU0pZworKGVuY28pcihkZWQuKTAgMzU3NSB5IEZtKHVzZV9wcml2YXRla2V5XCgpcCBGZChwa2V5KTcKK2IgRm0oXCkpMjA4IDM2NzUgeSBGcihVc2UpMjcgYih0aGUpaChwcml2KS01IGIoYXRlKTI3CitiKGspbihleSloIEZkKHBrZXkpMzYgYiBGcih3aGljKW4oaCkyOCBiKGhhcylmKHRvKWcoYilyKGUpaChhKWYoUEtleSloCisob2IpNSBiKGplY3QuKTAgMzgzNiB5IEZtKHVzZV9jZXJ0aWZpY2F0ZV8pbyhmaSlvKGxlXCgpbworRmQoXDAzNGxlKWggRmMoWylwIEZkKCwpMjQgYihmb3JtYXQpZCBGYyhdKXAgRm0oXCkpMjA4CiszOTM2IHkgRnIoTG9hZClpKHRoZSloKFwwMzRyc3QpZyhjZXJ0aVwwMzRjYXRlKWYoZm91bmQpaChpbiloCitGZChcMDM0bGUpNiBiIEZyKC4pMzYgYihUaGUpMjQgYihjZXJ0aVwwMzRjYXRlKWYobSluKHVzdCloKGIpcihlKWgoaW4pZgorKHRoZSlnKGZvcm1hdClnKHNwKXIoZWNpXDAzNGVkKWcoYiluKHkpaCBGZChmb3JtYXQpOAorYiBGcigsKTI1IGIod2hpYyluKGgpMjA4IDQwMzUgeShpcylpKGVpdGhlcilnIEZtKEZJTEVUWVBFX1BFTSljCitGcihvcilrIEZtKEZJTEVUWVBFX0FTTjEpcCBGciguKWsoVGhlKWQoZGVmYXVsdClnKGlzKWYKK0ZtKEZJTEVUWVBFX1BFTSlwIEZyKC4pMCA0MTgyIHkgRm0odXNlX3ByaXZhdGVrZXlfZilvKGlsKW8oZVwoKXAKK0ZkKFwwMzQpbyhsZSk2IGIgRmMoWylwIEZkKCwpMjUgYihmb3JtYXQpMjAgYiBGYyhdKXAKK0ZtKFwpKTIwOCA0MjgyIHkgRnIoTG9hZCkzMSBiKHRoZSloKFwwMzRyc3QpZyhwcml2KS01CitiKGF0ZSkzMSBiKGspbihleSlnKGZvdW5kKWkoaW4pZiBGZChcMDM0bGUpNiBiIEZyKC4pNTAKK2IoVGhlKTMyIGIocHJpdiktNSBiKGF0ZSkzMiBiKGspbihleSlmKG0pbih1c3QpaChiKXIoZSlnKGluKWgodGhlKWYKKyhmb3JtYXQpZihzcClyKGVjaVwwMzRlZClpKGIpbih5KWYgRmQoZm9ybWF0KTggYiBGcigsKTIwOAorNDM4MSB5KHdoaWMpbihoKTI3IGIoaXMpZyhlaXRoZXIpaCBGbShGSUxFVFlQRV9QRU0pMjIKK2IgRnIob3IpMjcgYiBGbShGSUxFVFlQRV9BU04xKXAgRnIoLikzMiBiKFRoZSkyNyBiKGRlZmF1bHQpaChpcylnCitGbShGSUxFVFlQRV9QRU0pcCBGciguKTAgNDY0NCB5IEZnKENvbm5lY3Rpb24pZShvYmplY3RzKTAKKzQ4NDUgeSBGcihDb25uZWN0aW9uKWgob2IpNSBiKGplY3RzKTI3IGIoaGEpbih2KW4oZSlmKHRoZSlpKGZvbGxvKW4KKyh3aW5nKWYobWV0aG8pcihkczopMCA0OTkyIHkgRm0oYWNjZXB0XChcKSkyMDggNTA5MSB5CitGcihDYWxsKTMzIGIodGhlKWcgRm0oYWNjZXB0KWUgRnIobWV0aG8pcihkKWoob2YpZih0aGUpaCh1bmRlcmx5aW5nKWYKKyhzbylyKGMpbihrKW4oZXQpZihhbmQpaChzZXQpaCh1cClnKFNTTClmKG9uKWcodGhlKWgocmV0dXJuZWQpZihzbylyKGMpCituKGspbihldCwpaCh1c2luZylmKHRoZSkyMDggNTE5MSB5KENvbiluKHRleHQpMjIgYihvYik1CitiKGplY3QpMjIgYihzdXBwbGllZCloKHRvKWYodGhpcyloKENvbm5lY3Rpb24pZihvYik1CitiKGplY3QpMjIgYihhdCloKGNyZWF0aW9uLikzNCBiKFJldHVybnMpMjIgYihhKWcocGFpcilnCitGbShcKClwIEZkKGMpbChvbm4pNiBiIEZtKCwpNDMgYiBGZChhZGRyKWwoZXNzKTcgYiBGbShcKSlwCitGciguKTM2IGIod2hlcmUpMjA4IDUyOTEgeSBGZChjKWwob25uKWQgRnIoaXMpMjggYih0aGUpZyhuZXcpZgorKENvbm5lY3Rpb24pZyhvYik1IGIoamVjdCkyOCBiKGNyZWF0ZWQsKWUoYW5kKWkgRmQoYWRkcilsKGVzcykzNQorYiBGcihpcykyOCBiKGFzKWYocmV0dXJuZWQpZyhiKW4oeSlnKHRoZSloKHNvKXIoYyluKGspbihldCdzKWUKK0ZtKGFjY2VwdClwIEZyKC4pcCAwIDU1NDkgMzkwMSA0IHYgMCA1NjQ5IGEgRmcoMy4zKTgyCitiIEZtKFNTTCkyNiBiIEZnKFwwMjYpaShBbilnKGludGVyZmFjZSlnKHRvKWYodGhlKWcoU1NMLXNwKXIoZWNpXDAzNGMpaAorKHBhKW4ocnRzKWYob2YpaChPcClyKGVuU1NMKTE2MTEgYigxMSlwIGVvcCBlbmQKKyUlUGFnZTogMTIgMTIKK1RlWERpY3QgYmVnaW4gMTIgMTEgYm9wIDAgODMgYSBGbShiaW5kXCgpcCBGZChhZGRyKWwoZXNzKTcKK2IgRm0oXCkpMjA4IDE4MyB5IEZyKENhbGwpMjcgYih0aGUpaCBGbShiaW5kKWUgRnIobWV0aG8pcihkKWkob2YpZih0aGUpCitoKHVuZGVybHlpbmcpZihzbylyKGMpbihrKW4oZXQuKTAgMzMwIHkgRm0oY2xvc2VcKFwpKTIwOAorNDI5IHkgRnIoQ2FsbClpKHRoZSloIEZtKGNsb3NlKWUgRnIobWV0aG8pcihkKWkob2YpZyh0aGUpZyh1bmRlcmx5aW5nKWYKKyhzbylyKGMpbihrKW4oZXQuKTQzIGIoTm90ZTopZShJZikzMSBiKHkpbihvdSllKHcpbihhbiluKHQpZyhjb3JyZWN0KWYKKyhTU0wpaShjbG9zdXJlLClmKHkpbihvdSlnKG5lZWQpaCh0bykyMDggNTI5IHkoY2FsbClkKHRoZSloCitGbShzaHV0ZG93biljIEZyKG1ldGhvKXIoZClrKFwwMzRyc3QuKTAgNjc2IHkgRm0oY29ubmVjdFwoKXAKK0ZkKGFkZHIpbChlc3MpNyBiIEZtKFwpKTIwOCA3NzUgeSBGcihDYWxsKTMxIGIodGhlKWgKK0ZtKGNvbm5lY3QpZSBGcihtZXRobylyKGQpaShvZilnKHRoZSlnKHVuZGVybHlpbmcpZyhzbylyKGMpbihrKW4oZXQpZQorKGFuZClpKHNldClnKHVwKWcoU1NMKWgob24pZSh0aGUpaShzbylyKGMpbihrKW4oZXQsKWYodXNpbmcpZih0aGUpaAorKENvbiluKHRleHQpMjA4IDg3NSB5KG9iKTUgYihqZWN0KTI3IGIoc3VwcGxpZWQpaCh0bylmKHRoaXMpaAorKENvbm5lY3Rpb24pZihvYik1IGIoamVjdCkyNyBiKGF0KWgoY3JlYXRpb24uKTAgMTAyMgoreSBGbShjb25uZWN0X2V4XCgpcCBGZChhZGRyKWwoZXNzKTcgYiBGbShcKSkyMDggMTEyMQoreSBGcihDYWxsKTI0IGIodGhlKWcgRm0oY29ubmVjdF9leCljIEZyKG1ldGhvKXIoZCkyNQorYihvZilmKHRoZSloKHVuZGVybHlpbmcpZihzbylyKGMpbihrKW4oZXQpZihhbmQpaChzZXQpZyh1cCloKFNTTClmKG9uKWcKKyh0aGUpaChzbylyKGMpbihrKW4oZXQsKWYodXNpbmcpZyh0aGUpZyhDb24pbih0ZXh0KTIwOAorMTIyMSB5KG9iKTUgYihqZWN0KTM1IGIoc3VwcGxpZWQpZyh0byloKHRoaXMpZihDb25uZWN0aW9uKWcob2IpNQorYihqZWN0KTM2IGIoYXQpZihjcmVhdGlvbi4pNTkgYihOb3RlKTM2IGIodGhhdClmKGlmKWgodGhlKWcKK0ZtKGNvbm5lY3RfZXgpMzEgYiBGcihtZXRobylyKGQpMzYgYihvZilnKHRoZSkyMDggMTMyMQoreShzbylyKGMpbihrKW4oZXQpMjYgYihkbylyKGVzbid0KWkocmV0dXJuKWYoMCwpZyhTU0wpaCh3KW4ob24ndClmKGIpcgorKGUpaChpbml0aWFsaXplZC4pMCAxNDY4IHkgRm0oZG9faGFuZHNoYWtlXChcKSkyMDggMTU2NworeSBGcihQKW4oZXJmb3JtKTQ5IGIoYW4paChTU0wpZyhoYW5kc2hhayluKGUpZihcKHVzdWFsbHkpaChjYWxsZWQpZworKGFmdGVyKWYgRm0ocmVuZWdvdGlhdGUpZCBGcihvcilqKG9uZSloKG9mKTU3IGIgRm0oc2V0X2FjY2VwdF9zdGF0KW8oZSkKKzQ0IGIgRnIob3IpMjA4IDE2NjcgeSBGbShzZXRfYWNjZXB0X3N0YXQpbyhlKXAgRnIoXCkuKTMxCitiKFRoaXMpZChjYW4pZihyYWlzZSlmKHRoZSlpKHNhbWUpZihleGNlcHRpb25zKWcoYXMpZworRm0oc2VuZClmIEZyKGFuZCloIEZtKHJlY3YpcCBGciguKTAgMTgxNCB5IEZtKGZpbGVub1woXCkpMjA4CisxOTEzIHkgRnIoUmV0cmlldiluKGUpZih0aGUpaShcMDM0bGUpZyhkZXNjcmlwdG9yKWUobiluKHVtKW4oYilyKGVyKWkKKyhmb3IpZih0aGUpaCh1bmRlcmx5aW5nKWUoc28pcihjKW4oayluKGV0LikwIDIwNjAgeSBGbShsaXN0ZW5cKClwCitGZChiKWwoYWNrbG8pbChnKTcgYiBGbShcKSkyMDggMjE2MCB5IEZyKENhbGwpMjcgYih0aGUpaAorRm0obGlzdGVuKWQgRnIobWV0aG8pcihkKWoob2YpZih0aGUpaCh1bmRlcmx5aW5nKWYoc28pcihjKW4oayluKGV0LikwCisyMzA3IHkgRm0oZ2V0X2FwcF9kYXRhXChcKSkyMDggMjQwNiB5IEZyKFJldHJpZXYpbihlKWYoYXBwbGljYXRpb24paAorKGRhdGEpZyhhcylnKHNldCloKGIpbih5KWcgRm0oc2V0X2FwcF9kYXRhKXAgRnIoLikwIDI1NTMKK3kgRm0oZ2V0X2NpcGhlcl9saXN0XCgpbyhcKSkyMDggMjY1MyB5IEZyKFJldHJpZXYpbihlKTIzCitiKHRoZSloKGxpc3QpZyhvZilnKGNpcGhlcnMpZyh1c2VkKWcoYiluKHkpZih0aGUpaShDb25uZWN0aW9uKWUob2IpNQorYihqZWN0LikzNiBiKFcpLTkgYihBUk5JTkc6KTI1IGIoVGhpcylmKEFQSSloKGhhcyllKGMpbihoYW5nZWQuKTM1CitiKEl0KTI0IGIodXNlZCkyMDggMjc1MiB5KHRvKWoodGFrKW4oZSlnKGFuKWcob3B0aW9uYWwpZyhwYXJhbWV0ZXIpZgorKGFuZCloKGp1c3QpaChyZXR1cm4pZyhhKWYoc3RyaW5nLClnKGJ1dCloKG5vdClmKGl0KWgocmV0dXJucylmKHRoZSloCisoZW4pbih0aXJlKWYobGlzdCloKGluKWcob25lKWYoZ28uKTAgMjg5OSB5IEZtKGdldF9jb250ZXh0XChcKSkyMDgKKzI5OTkgeSBGcihSZXRyaWV2KW4oZSlmKHRoZSlpKENvbiluKHRleHQpZihvYik1IGIoamVjdCkyOAorYihhc3NvKXIoY2lhdGVkKWUod2l0aClpKHRoaXMpZyhDb25uZWN0aW9uLikwIDMxNDYgeQorRm0oZ2V0X3BlZXJfY2VydGlmaSlvKGNhKW8odGVcKClvKFwpKTIwOCAzMjQ1IHkgRnIoUmV0cmlldiluKGUpZSh0aGUpaQorKG90aGVyKWYoc2lkZSdzKWcoY2VydGlcMDM0Y2F0ZSlnKFwoaWYpaShhbiluKHlcKSkwIDMzOTIKK3kgRm0oZ2V0cGVlcm5hbWVcKFwpKTIwOCAzNDkyIHkgRnIoQ2FsbCllKHRoZSloIEZtKGdldHBlZXJuYW1lKTIzCitiIEZyKG1ldGhvKXIoZCkyOCBiKG9mKWYodGhlKWgodW5kZXJseWluZylmKHNvKXIoYyluKGspbihldC4pMAorMzYzOSB5IEZtKGdldHNvY2tuYW1lXChcKSkyMDggMzczOCB5IEZyKENhbGwpZyh0aGUpaAorRm0oZ2V0c29ja25hbWUpMjMgYiBGcihtZXRobylyKGQpMjggYihvZilmKHRoZSloKHVuZGVybHlpbmcpZihzbylyKGMpbgorKGspbihldC4pMCAzOTAyIHkgRm0oZ2V0c29ja29wdFwoKXAgRmQobGV2ZWwsKWYob3B0bmFtZSk2CitiIEZjKFspcCBGZCgsKTMxIGIoYnVcMDM1ZW4pMTggYiBGYyhdKXAgRm0oXCkpMjA4IDQwMDIKK3kgRnIoQ2FsbCkyNyBiKHRoZSloIEZtKGdldHNvY2tvcHQpMjMgYiBGcihtZXRobylyKGQpMjgKK2Iob2YpZyh0aGUpZyh1bmRlcmx5aW5nKWYoc28pcihjKW4oayluKGV0LikwIDQxNDggeSBGbShwZW5kaW5nXChcKSkyMDgKKzQyNDggeSBGcihSZXRyaWV2KW4oZSlmKHRoZSlpKG4pbih1bSluKGIpcihlcilnKG9mKWYoYiluKHl0ZXMpZyh0aGF0KWgKKyhjYW4pZihiKXIoZSloKHNhZmVseSlmKHJlYWQpZyhmcm9tKWcodGhlKWgoU1NMKWcoYnVcMDMzZXIuKTAKKzQzOTUgeSBGbShyZWN2XCgpcCBGZChidWZzaXplKTYgYiBGbShcKSkyMDggNDQ5NSB5IEZyKFJlY2VpdiluKGUpMzAKK2IoZGF0YSloKGZyb20pZyh0aGUpaChDb25uZWN0aW9uLik0NyBiKFRoZSkzMSBiKHJldHVybilnKHYpLTUKK2IoYWx1ZSkzMSBiKGlzKWgoYSllKHN0cmluZyloKHJlcHJlc2VuKW4odGluZylmKHRoZSloKGRhdGEpZyhyZWNlaXYpbgorKGVkLik0NyBiKFRoZSkyMDggNDU5NCB5KG1heGltKW4odW0pMjcgYihhbW91biluKHQpZyhvZilnKGRhdGEpaCh0bylmCisoYilyKGUpaChyZWNlaXYpbihlZCllKGF0KWkob25jZSwpZihpcylnKHNwKXIoZWNpXDAzNGVkKWgoYiluKHkpaAorRmQoYnVmc2l6ZSk2IGIgRnIoLikwIDQ3NDEgeSBGbShyZW5lZ290aWF0ZVwoXCkpMjA4IDQ4NDEKK3kgRnIoUmVuZWdvdGlhdGUpMjYgYih0aGUpaShTU0wpZyhzZXNzaW9uLikzNiBiKENhbGwpMjcKK2IodGhpcyloKGlmKWcoeSluKG91KWYod2lzaClnKHRvKWgoYyluKGhhbmdlKWUoY2lwaGVyKWgoc3VpdGVzKWgob3IpZQorKGFuKW4oeXRoaW5nKWgobGlrKW4oZSlnKHRoYXQuKTAgNDk4OCB5IEZtKHNlbmRcKClwIEZkKHN0cmluZyk3CitiIEZtKFwpKTIwOCA1MDg3IHkgRnIoU2VuZCkyNyBiKHRoZSloIEZkKHN0cmluZykzNSBiCitGcihkYXRhKTI3IGIodG8paCh0aGUpZyhDb25uZWN0aW9uLikwIDUyMzQgeSBGbShzZW5kYWxsXCgpcAorRmQoc3RyaW5nKTcgYiBGbShcKSkyMDggNTMzNCB5IEZyKFNlbmQpMzAgYihhbGwpZihvZiloKHRoZSlnCitGZChzdHJpbmcpMzcgYiBGcihkYXRhKTI5IGIodG8pZyh0aGUpaChDb25uZWN0aW9uLik0MworYihUaGlzKTMwIGIoY2FsbHMpZiBGbShzZW5kKWYgRnIocmVwKXIoZWF0ZWRseSloKHVuKW4odGlsKWgoYWxsKWYoZGF0YSkKK2goaXMpZihzZW4pbih0Lik0MyBiKElmKTMwIGIoYW4pcCAwIDU1NDkgMzkwMSA0IHYgMCA1NjQ5CithIEZnKDEyKTIxOTcgYigzKTgzIGIgRm0oT3BlblNTTCkyNCBiIEZnKFwwMjYpayhQeXRob24pZihpbnRlcmZhY2UpaAorKHRvKWYoT3ApcihlblNTTClwIGVvcCBlbmQKKyUlUGFnZTogMTMgMTMKK1RlWERpY3QgYmVnaW4gMTMgMTIgYm9wIDIwOCA4MyBhIEZyKGVycm9yKTI1IGIobylyKGNjdXJzLClpKGl0J3MpaChpbXApCityKG9zc2libGUpZih0bylnKHRlbGwpaChobyluKHcpZihtKW4odWMpbihoKWgoZGF0YSlmKGhhcylnKGIpcihlZW4paAorKHNlbiluKHQuKTAgMjMwIHkgRm0oc2V0X2FjY2VwdF9zdGF0ZSlvKFwoXCkpMjA4IDMzMAoreSBGcihTZXQpMjAgYih0aGUpZyhjb25uZWN0aW9uKWYodG8paCh3KW4ob3JrKWUoaW4paShzZXJ2KW4oZXIpZShtbylyCisoZGUuKTM0IGIoVGhlKTIwIGIoaGFuZHNoYWspbihlKWYod2lsbCloKGIpcihlKWcoaGFuZGxlZClnCisoYXV0b21hdGljYWxseSllKGIpbih5KWkocmVhZC93cml0ZS4pMCA0NzYgeSBGbShzZXRfYXBwX2RhdGFcKClwCitGZChkYXRhKTYgYiBGbShcKSkyMDggNTc2IHkgRnIoQXNzbylyKGNpYXRlKTM5IGIgRmQoZGF0YSk0NworYiBGcih3aXRoKTQwIGIodGhpcylnKENvbm5lY3Rpb24pZyhvYik1IGIoamVjdC4pNzMgYgorRmQoZGF0YSk0NyBiIEZyKGNhbikzOSBiKGIpcihlKWkocmV0cmlldiluKGVkKWQobGF0ZXIpaCh1c2luZyloKHRoZSlnCitGbShnZXRfYXBwX2RhdGEpMjA4IDY3NiB5IEZyKG1ldGhvKXIoZC4pMCA4MjMgeSBGbShzZXRfY29ubmVjdF9zdGF0KW8KKyhlXCgpbyhcKSkyMDggOTIyIHkgRnIoU2V0KTIxIGIodGhlKWcoY29ubmVjdGlvbilnKHRvKWcodyluKG9yayllKGluKWkKKyhjbGllbiluKHQpZyhtbylyKGRlLikzNSBiKFRoZSkyMSBiKGhhbmRzaGFrKW4oZSlmKHdpbGwpaChiKXIoZSlnCisoaGFuZGxlZClnKGF1dG9tYXRpY2FsbHkpZihiKW4oeSloKHJlYWQvd3JpdGUuKTAgMTA2OQoreSBGbShzZXRibG9ja2luZ1woKXAgRmQoXDAzNWFnKTcgYiBGbShcKSkyMDggMTE2OSB5IEZyKENhbGwpMjcKK2IodGhlKWggRm0oc2V0YmxvY2tpbmcpMjMgYiBGcihtZXRobylyKGQpMjggYihvZilmKHRoZSloKHVuZGVybHlpbmcpZgorKHNvKXIoYyluKGspbihldC4pMCAxMzE2IHkgRm0oc2V0c29ja29wdFwoKXAgRmQobGV2ZWwsKWYob3B0bmFtZSwpMzEKK2IodmFsdWUpNiBiIEZtKFwpKTIwOCAxNDE1IHkgRnIoQ2FsbCkyNyBiKHRoZSloIEZtKHNldHNvY2tvcHQpMjMKK2IgRnIobWV0aG8pcihkKTI4IGIob2YpZyh0aGUpZyh1bmRlcmx5aW5nKWYoc28pcihjKW4oayluKGV0LikwCisxNTYyIHkgRm0oc2h1dGRvd25cKFwpKTIwOCAxNjYyIHkgRnIoU2VuZCkzNSBiKHRoZSloKHNoKW4odXRkbyluKHduKWYKKyhtZXNzYWdlKWYodG8paCh0aGUpaChDb25uZWN0aW9uLik2MCBiKFJldHVybnMpMzUgYih0cnVlKWcoaWYpaCh0aGUpZworKHNoKW4odXRkbyluKHduKWUobWVzc2FnZSlnKGV4YyluKGhhbmdlKWcoaXMpMjA4IDE3NjEKK3koY29tcGxldGVkKTI1IGIoYW5kKWcoZmFsc2UpaChvdGhlcndpc2UpZShcKGluKWkod2hpYyluKGgpZyhjYXNlKWUoeSluCisob3UpaChjYWxsKWcgRm0ocmVjdlwoXCkpZSBGcihvcilpIEZtKHNlbmRcKFwpKWUgRnIod2hlbilqKHRoZSlnCisoY29ubmVjdGlvbilmKGIpcihlY29tZXMpMjA4IDE4NjEgeShyZWFkYWJsZS93cml0ZWFibGUuKTAKKzIwMDggeSBGbShzb2NrX3NodXRkb3duXCgpcCBGZChob3cpOSBiIEZtKFwpKTIwOCAyMTA3Cit5IEZyKENhbGwpMjcgYih0aGUpaCBGbShzaHV0ZG93biljIEZyKG1ldGhvKXIoZClrKG9mKWcodGhlKWcKKyh1bmRlcmx5aW5nKWUoc28pcihjKW4oayluKGV0LikwIDIyNTQgeSBGbShzdGF0ZV9zdHJpbmdcKFwpKTIwOAorMjM1NCB5IEZyKFJldHJpZXYpbihlKWcoYSlpKHYpbihlcmIpcihvc2UpZShzdHJpbmcpZyhkZXRhaWxpbmcpaSh0aGUpZworKHN0YXRlKWYob2YpaCh0aGUpZihDb25uZWN0aW9uLikwIDI1MDEgeSBGbSh3YW50X3JlYWRcKFwpKTIwOAorMjYwMCB5IEZyKENoZWMpbihrcylmKGlmKWkobW9yZSlmKGRhdGEpZyhoYXMpZyh0byloKGIpcihlKWcocmVhZCllCisoZnJvbSlpKHRoZSlmKHRyYW5zcClyKG9ydClnKGxhKW4oeSluKGVyKWYodG8paChjb21wbGV0ZSloKGFuKWYob3ApcgorKGVyYXRpb24uKTAgMjc0NyB5IEZtKHdhbnRfd3JpdGVcKFwpKTIwOCAyODQ3IHkgRnIoQ2hlYyluKGtzKWYoaWYpaQorKHRoZXJlKWcoaXMpZihkYXRhKWcodG8paCh3cml0ZSlmKHRvKWcodGhlKWgodHJhbnNwKXIob3J0KWYobGEpbih5KW4KKyhlcilmKHRvKWgoY29tcGxldGUpaChhbilmKG9wKXIoZXJhdGlvbi4pMCAzMTY5IHkgRnMoNCkxMTQKK2IoSW50ZXJuYWxzKTAgMzM5OCB5IEZyKFcpLTcgYihlKTI1IGIocmFuKWcoaW4pbih0bylmKHRocmVlKWgobWFpbilnCisocHJvYmxlbXMpZihkZXYpbihlbG9waW5nKWcodGhpczopMzYgYihFeGNlcHRpb25zLCkyNQorYihjYWxsYmFjKW4oa3MpZihhbmQpaChhY2Nlc3NpbmcpZShzbylyKGMpbihrKW4oZXQpaChtZXRobylyKGRzLikzNgorYihUaGlzKTAgMzQ5NyB5KGlzKTI3IGIod2hhdCloKHRoaXMpZyhjKW4oaGFwdGVyKWUoaXMpaShhYilyKG91dC4pMAorMzc3NyB5IEZrKDQuMSk5NyBiKEV4Y2VwdGlvbnMpMCAzOTc3IHkgRnIoVyktNyBiKGUpNTIKK2IocmVhbGl6ZWQpZihlYXJseSlnKHRoYXQpaChtb3N0KWcob2YpZyh0aGUpZyhleGNlcHRpb25zKWYodyluKG91bGQpaAorKGIpcihlKWcocmFpc2VkKWYoYiluKHkpaCh0aGUpZyhJL08pZihmdW5jdGlvbnMpaChvZilnKE9wKXIoZW5TU0wsKTAKKzQwNzcgeShzbylkKGl0KWkoZmVsdClmKG5hdHVyYWwpZih0byloKG1pbWljKWcoT3ApcihlblNTTCdzKWcoZXJyb3IpZQorKGNvKXIoZGUpaShzeXN0ZW0sKTU1IGIodHJhbnNsYXRpbmcpNDggYih0aGVtKWooaW4pbih0byllKFB5dGhvbilpCisoZXhjZXB0aW9ucy4pMCA0MTc3IHkoVGhpcykzMCBiKG5hdHVyYWxseSllKGdpdiluKGVzKWgodXMpaCh0aGUpZworKGV4Y2VwdGlvbnMpZiBGbShTU0wuWmVyb1JldHVybkVyKW8ocm8pbyhyKXAgRnIoLCkyNAorYiBGbShTU0wuV2FudFJlYWRFcnJvcilvIEZyKCwpaCBGbShTU0wuV2FudFdyaXRlRXIpbyhybylvKHIpcAorRnIoLCkwIDQyNzYgeSBGbShTU0wuV2FudFg1MDlMb29rKW8odXApbyhFcnIpbyhvciljIEZyKGFuZCkyNworYiBGbShTU0wuU3lzQ2FsbEVycm9yKXAgRnIoLikwIDQ0MjMgeShGKS03IGIob3IpMjcgYihtb3JlKWcKKyhpbmZvcm1hdGlvbilnKGFiKXIob3V0KWcodGhpcywpaChzZWUpZihzZWN0aW9uKWcoMy4zLikwCis0NzAzIHkgRmsoNC4yKTk3IGIoQ2FsbGJhY2tzKTAgNDkwMyB5IEZyKFRoZXJlKTM0IGIoYXJlKWYoYSloKG4pbih1bSluCisoYilyKGVyKWcob2YpaChwcm9ibGVtcyllKHdpdGgpaShjYWxsYmFjKW4oa3MuKTU2IGIoRmlyc3QpMzQKK2Iob2YpZyhhbGwsKWkoT3ApcihlblNTTClmKGlzKWYod3JpdHRlbiloKGFzKWUoYSloKEMpaChsaWJyYXJ5KS03CitiKCwpMzQgYihpdCdzKWgobm90KTAgNTAwMyB5KG1lYW4pbih0KTI2IGIodG8pZyhoYSluKHYpbihlKWUoUHl0aG9uKWoKKyhjYWxsYmFjKW4oa3MsKWQoc28paShhKWYodyluKGEpbih5KWcoYXJvdW5kKWcodGhhdCloKGlzKWcobmVlZGVkLikzNgorYihBbm90aGVyKTI2IGIocHJvYmxlbSlmKGlzKWgodGhyZWFkKWcoc3VwcClyKG9ydC4pMzYKK2IoQSkyNiBiKGxvdCkwIDUxMDMgeShvZiloKHRoZSlnKE9wKXIoZW5TU0wpZyhJL08pZShmdW5jdGlvbnMpaShjYW4pZworKGJsbylyKGMpbihrKWYoaWYpaCh0aGUpZyhzbylyKGMpbihrKW4oZXQpZihpcylnKGluKWgoYmxvKXIoYyluKGtpbmcpZgorKG1vKXIoZGUsKWgoYW5kKWcodGhlbilnKHkpbihvdSlmKHcpbihhbiluKHQpZyhvdGhlcilnKFB5dGhvbikwCis1MjAyIHkodGhyZWFkcyljKHRvKWcoYilyKGUpaChhYmxlKWYodG8pZyhkbylnKG90aGVyKWcodGhpbmdzLikzNQorYihUaGUpMjIgYihyZWFsKWcodHJvdWJsZSlnKGlzKWcoaWYpaCh5KW4ob3UndiluKGUpZShyZWxlYXNlZClnKHRoZSloCisodGhyZWFkKWcobG8pcihjKW4oaylnKHRvKWcoZG8pZyhhKWcocClyKG90ZW4pbih0aWFsbHkpcAorMCA1NTQ5IDM5MDEgNCB2IDM4MTcgNTY0OSBhIEZnKDEzKXAgZW9wIGVuZAorJSVQYWdlOiAxNCAxNAorVGVYRGljdCBiZWdpbiAxNCAxMyBib3AgMCA4MyBhIEZyKGJsbylyKGMpbihraW5nKTI3IGIob3ApcihlcmF0aW9uLClmCisoYW5kKWkodGhlKWcob3ApcihlcmF0aW9uKWUoY2FsbHMpaChhKWcoY2FsbGJhYyluKGsuKTM1CitiKFRoZW4pMjggYih3KW4oZSlmKG0pbih1c3QpaCh0YWspbihlKWYodGhlKWgodGhyZWFkKWYobG8pcihjKW4oaylnCisoYmFjKW4oaykzNDc1IDUzIHkgRmwoNSkzNTExIDgzIHkgRnIoLikwIDIzMCB5KFRoZXJlKWQoYXJlKWYodCluKHcpbihvKQorZyhzb2x1dGlvbnMpaCh0bylnKHRoZSloKFwwMzRyc3QpZihwcm9ibGVtLClnKGIpcihvdGgpaChvZilmKHdoaWMpbihoKWcKKyhhcmUpZihuZWNlc3NhcnkpLTcgYiguKTM0IGIoVGhlKTI1IGIoXDAzNHJzdClmKHNvbHV0aW9uKWYodG8paCh1c2UpaAorKGlzKWYoaWYpZyh0aGUpaChDKTAgMzMwIHkoY2FsbGJhYyluKGspaShhbGxvKW4od3MpZihcMDIxdXNlcmRhdGFcMDIxKQorMzMgYih0bykyOCBiKGIpcihlKWgocGFzc2VkKWUodG8paChpdClnKFwoYW4pZyhhcmJpdHJhcnkpZShwKXIob2luKW4KKyh0ZXIpaShub3JtYWxseVwpLikzNyBiKFRoaXMpMjggYihpcylnKGdyZWF0ISkzNyBiKFcpLTcKK2IoZSkyOCBiKGNhbilnKHNldClnKG91cikwIDQyOSB5KFB5dGhvbilpKGZ1bmN0aW9uKWcob2IpNQorYihqZWN0KTI5IGIoYXMpZih0aGUpaShyZWFsKWYodXNlcmRhdGEpZihhbmQpaChlbSluKHVsYXRlKWcodXNlcmRhdGEpZgorKGZvciloKHRoZSloKFB5dGhvbilmKGZ1bmN0aW9uKWgoaW4pZyhhbm90aGVyKWUodyluKGEpbih5KS03CitiKC4pMCA1MjkgeShUaGUpMjQgYihvdGhlcilnKHNvbHV0aW9uKWcoY2FuKWcoYilyKGUpaCh1c2VkKWcoaWYpZyhhbilmCisob2IpNSBiKGplY3QpMjQgYih3aXRoKWgoYW4pZihcMDIxYXBwX2RhdGFcMDIxKTI5IGIoc3lzdGVtKWMoYWx3KW4oYSluCisoeXMpZChpcylqKHBhc3NlZCllKHRvKWgodGhlKWgoY2FsbGJhYyluKGsuKTM1IGIoRiktNworYihvcikwIDYyOCB5KGV4YW1wbGUsKTI2IGIodGhlKWgoU1NMKWYob2IpNSBiKGplY3QpMjYKK2IoaW4paChPcClyKGVuU1NMKWYoaGFzKWcoYXBwX2RhdGEpZihmdW5jdGlvbnMpaShhbmQpZihpbiloKGUuZy4pMzYKK2IodGhlKTI2IGIodiluKGVyaVwwMzRjYXRpb24pZihjYWxsYmFjKW4oa3MsKWcoeSluKG91KWcoY2FuKTAKKzcyOCB5KHJldHJpZXYpbihlKWkodGhlKWkocmVsYXRlZClmKFNTTCloKG9iKTUgYihqZWN0LikzOQorYihXaGF0KTI5IGIodyluKGUpZyhkbylmKGlzKWcodG8paChzZXQpZihvdXIpZyh3cmFwcClyKGVyKWcKK0ZtKENvbm5lY3Rpb24pYyBGcihvYik1IGIoamVjdCkyOCBiKGFzKWcoYXBwX2RhdGEpZyhmb3IpZyh0aGUpMAorODI4IHkoU1NMKWcob2IpNSBiKGplY3QsKTI3IGIoYW5kKWgodyluKGUpZihjYW4pZyhlYXNpbHkpZyhcMDM0bmQpaAorKHRoZSlnKFB5dGhvbilnKGNhbGxiYWMpbihrLikwIDk3NSB5KFRoZSk0MiBiKG90aGVyKWcocHJvYmxlbSlnKGlzKWcKKyhhbHNvKWYocGFydGlhbGx5KWgoc29sdiluKGVkKWYoYiluKHkpaChhcHBfZGF0YS4pODAKK2IoU2luY2UpNDMgYih3KW4oZSdyZSllKGFzc28pcihjaWF0aW5nKWcob3VyKWcod3JhcHApcihlciloKG9iKTUKK2IoamVjdHMpMCAxMDc0IHkod2l0aCk0NCBiKHRoZSlmKFwwMjFyZWFsXDAyMSk0OSBiKG9iKTUKK2IoamVjdHMsKTQ2IGIodyluKGUpZChjYW4pZyhlYXNpbHkpZihhY2Nlc3MpZyhkYXRhKWcoZnJvbSloKHRoZSloCitGbShDb25uZWN0aW9uKTM5IGIgRnIob2IpNSBiKGplY3QuKTgzIGIoVGhlKTQzIGIoc29sdXRpb24pZyh0aGVuKWcoaXMpMAorMTE3NCB5KHRvKTM1IGIoc2ltcGx5KWgoaW5jbHVkZSlnKGEpZiBGbShQeVRocmVhZFN0YXRlKWMKK0ZyKHYpLTUgYihhcmlhYmxlKTM0IGIoaW4paSh0aGUpZyBGbShDb25uZWN0aW9uKTMxIGIKK0ZyKGRlY2xhcmF0aW9uLCkzNyBiKGFuZCllKHdyaXRlKWcobWFjcm9zKWYoc2ltaWxhciloKHRvKTAKKzEyNzMgeSBGbShQeV9CRUdJTl9BTExPV19UKW8oSFIpbyhFQUQpbyhTKTI2IGIgRnIoYW5kKTMzCitiIEZtKFB5X0VORF9BTExPV19USClvKFJFQSlvKERTKTI2IGIgRnIodGhhdCkzMyBiKGFsbG8pbih3cyllKHNwKXIKKyhlY2lmeWluZyloKG9mKWgodGhlKWcgRm0oUHlUaHJlYWRTdGF0ZSkyNyBiIEZyKHYpLTUKK2IoYXJpLSkwIDEzNzMgeShhYmxlKTIzIGIodG8pZyh1c2UuKTM1IGIoTm8pbih3KTIzIGIodyluKGUpZyhjYW4pZworKHNpbXBseSlnKFwwMjFiKXIoZWdpbilnKGFsbG8pbih3KWYodGhyZWFkc1wwMjEpMjkgYihiKXIoZWZvcmUpMjMKK2IoYSlnKHApcihvdGVuKW4odGlhbGx5KWcoYmxvKXIoYyluKGtpbmcpZihvcClyKGVyYXRpb24sKWgoYW5kKWcKKyhcMDIxZW5kKWcoYWxsbyluKHcpMCAxNDczIHkodGhyZWFkc1wwMjEpMzMgYihiKXIoZWZvcmUpMjgKK2IoY2FsbGluZyllKGEpaShjYWxsYmFjKW4oay4pMCAxNzUyIHkgRmsoNC4zKTk3IGIoQSltKGNlc3NpbmcpMzUKK2IoU28pcyhjayltKGV0KWUoTWV0aG8pcyhkcykwIDE5NTMgeSBGcihXKS03IGIoZSkyNyBiKHF1aWMpbihrbHkpZShzYSluCisodyloKHRoZSlnKGIpcihlbmVcMDM0dCloKG9mKWcod3JhcHBpbmcpZShzbylyKGMpbihrKW4oZXQpZyhtZXRobylyKGRzKQoraChpbiloKHRoZSlnIEZtKFNTTC5Db25uZWN0aW9uKTIwIGIgRnIoY2xhc3MsKTI2IGIoZm9yKWcoYW4pZyhlYXN5KWYKKyh0cmFuc2l0aW9uKTAgMjA1MiB5KGluKW4odG8pZSh1c2luZylmKFNTTC4paChUaGUpZyhwcm9ibGVtKWYoaGVyZSloCisoaXMpZih0aGF0KWgodGhlKWggRm0oc29ja2V0KWMgRnIobW8pcihkdWxlKWoobGFjKW4oa3MpZihhKWcoQyloKEFQSSwpaAorKGFuZCllKGFsbCloKHRoZSlnKG1ldGhvKXIoZHMpZyhhcmUpZihkZWNsYXJlZCkwIDIxNTIKK3koc3RhdGljLikzNiBiKE9uZSkyNyBiKGFwcHJvYWMpbihoKWQodyluKG91bGQpaShiKXIoZSloKHRvKWYoaGEpbih2KW4KKyhlKWcgRm0oT3BlblNTTClkIEZyKGFzKWooYSlnKHN1Ym1vKXIoZHVsZSloKHRvKWYodGhlKWgKK0ZtKHNvY2tldClkIEZyKG1vKXIoZHVsZSwpaihwbGFjaW5nKWYoYWxsKWcodGhlKWgoY28pcihkZSkwCisyMjUyIHkoaW4paihgKXAgRnEoc28pcihjayluKGV0bW8pcihkdWxlLmMpcCBGcignLCloKGJ1dClmKHRoaXMpZyhpcylnCisob2Ipbih2aW91c2x5KWUobm90KWkoYSlmKGdvKXIobylyKGQpZyhzb2x1dGlvbiwpaChzaW5jZSlnKHkpbihvdSlmCisobWlnaCluKHQpZyhub3QpaCh3KW4oYW4pbih0KWYodG8paChpbXApcihvcnQpZyh0b25uZXMpZihvZikwCisyMzUxIHkoZXh0cmEpZihzdHVcMDMzKWgoeSluKG91J3JlKWUobm90KWkoZ29pbmcpZSh0bylpKHVzZSlmKHdoZW4paAorKGltcClyKG9ydGluZylmKHRoZSlpIEZtKHNvY2tldCljIEZyKG1vKXIoZHVsZS4pNDAgYihUaGUpMjkKK2Iob3RoZXIpZihhcHByb2FjKW4oaCllKGlzKWoodG8pZihzb21laG8pbih3KTAgMjQ1MSB5KGdldCkzMworYihhKWcocClyKG9pbiluKHRlcilnKHRvKWgodGhlKWYobWV0aG8pcihkKWgodG8pZyhiKXIoZSlmKGNhbGxlZCwpaQorKGVpdGhlcillKHRoZSloKEMpZyhmdW5jdGlvbiwpaChvcillKGEpZyhjYWxsYWJsZSlmKFB5dGhvbilpKG9iKTUKK2IoamVjdC4pNTQgYihUaGlzKTM0IGIoaXMpZihub3QpMCAyNTUxIHkocmVhbGx5KTI2IGIoYSlpKGdvKXIobylyKGQpZgorKHNvbHV0aW9uKWcoZWl0aGVyLClnKHNpbmNlKWcodGhlcmUncyloKGEpZihsb3QpZyhvZiloKGxvKXIob2t1cHMpZihpbikKK24odiluKG9sdiluKGVkLikwIDI2OTcgeShUaGUpaCh3KW4oYSluKHkpZihpdCloKHcpbihvcmtzKWUoaXMpaSh0aGF0KWgKKyh5KW4ob3UpZShoYSluKHYpbihlKWcodG8pZyhzdXBwbHkpaChhKWcoXDAyMCk3IGIgRm0oc29ja2V0KXAKK0ZyKC1saWspbihlXDAyMSkzMSBiKHRyYW5zcClyKG9ydCljKG9iKTUgYihqZWN0KTI4IGIodG8pZih0aGUpaQorRm0oU1NMLkNvbm5lY3Rpb24pcCBGciguKWooVGhlKTAgMjc5NyB5KG9ubHkpMjQgYihyZXF1aXJlbWVuKW4odClmKG9mKWkKKyh0aGlzKWYob2IpNSBiKGplY3QpMjQgYihpcyloKHRoYXQpZihpdCloKGhhcylmKGEpZyBGbShmaWxlbm9cKFwpKWQKK0ZyKG1ldGhvKXIoZClrKHRoYXQpZihyZXR1cm5zKWcoYSlnKFwwMzRsZSlnKGRlc2NyaXB0b3IpZih0aGF0J3MpaSh2KS01CitiKGFsaWQpMjQgYihhdCkwIDI4OTcgeSh0aGUpZyhDKWcobGV2KW4oZWwpZihcKGkuZS4pMzYKK2IoeSluKG91KTIzIGIoY2FuKWgodXNlKWYodGhlKWkoc3lzdGVtKWUoY2FsbHMpZyhyZWFkKWcoYW5kKWgod3JpdGVcKS4pCiszNSBiKElmKTI1IGIoeSluKG91KWUodyluKGFuKW4odClnKHRvKWgodXNlKWYodGhlKWggRm0oY29ubmVjdFwoXCkpYworRnIob3IpaiBGbShhY2NlcHRcKFwpKTAgMjk5NiB5IEZyKG1ldGhvKXIoZHMpMjkgYihvZiloKHRoZSlmCitGbShTU0wuQ29ubmVjdGlvbikyNCBiIEZyKG9iKTUgYihqZWN0LCkyOSBiKHRoZSloKHRyYW5zcClyKG9ydCllKG9iKTUKK2IoamVjdCkyOSBiKGhhcylmKHRvKWgoc3VwcGx5KWgoc3VjKW4oaClmKG1ldGhvKXIoZHMpZyh0bylyKG8uKTQxCitiKEFwYXJ0KTI5IGIoZnJvbSkwIDMwOTYgeSh0aGVtLCljKGFuKW4oeSllKG1ldGhvKXIoZCloKGxvKXIob2t1cHMpZgorKGluKWgodGhlKWYgRm0oU1NMLkNvbm5lY3Rpb24pMTggYiBGcihvYik1IGIoamVjdCkyNAorYih0aGF0KWYoZmFpbCloKGFyZSlmKHBhc3NlZClmKG9uKWkodG8pZih0aGUpaCh1bmRlcmx5aW5nKWYodHJhbnNwKXIKKyhvcnQpMCAzMTk2IHkob2IpNSBiKGplY3QuKTAgMzM0MiB5KEYpLTcgYih1dHVyZSkyNSBiKGMpbihoYW5nZXMpZgorKG1pZ2gpbih0KWgoYilyKGUpZyh0bylnKGFsbG8pbih3KWYoUHl0aG9uLWxldiluKGVsKWcodHJhbnNwKXIob3J0KWcKKyhvYik1IGIoamVjdHMsKTI1IGIodGhhdClnKGluc3RlYWQpZyhvZilnKGhhKW4odmluZylnCitGbShmaWxlbm9cKFwpKWQgRnIobWV0aG8pcihkcywpMCAzNDQyIHkoaGEpbih2KW4oZSloCitGbShyZWFkXChcKSlnIEZyKGFuZCloIEZtKHdyaXRlXChcKSllIEZyKG1ldGhvKXIoZHMsKWsoc28pZShtb3JlKWYoYWR2KQorLTUgYihhbmNlZCkyNCBiKGZlYXR1cmVzKWgob2YpZihQeXRob24paChjYW4pZyhiKXIoZSlnKHVzZWQuKTM1CitiKFRoaXMpMjUgYih3KW4ob3VsZClmKHByb2JhYmx5KTAgMzU0MiB5KGVuKW4odGFpbCkzNgorYihzb21lKWcoc29ydClnKG9mKWcoT3ApcihlblNTTCloKFwwMjBCSU9zXDAyMSwpZyhidXQpZyhjb24pbih2KW4KKyhlcnRpbmcpZShQeXRob24paShzdHJpbmdzKWUoYmFjKW4oayloKGFuZClnKGZvcnRoKWcoaXMpaChleHApcihlbnNpdiluCisoZSwpaChzbyllKHRoaXMpMCAzNjQxIHkoc2hvdWxkbid0KWYoYilyKGUpaCh1c2VkKWYodW5sZXNzKWcobmVjZXNzYXJ5KQorLTcgYiguKTU3IGIoT3RoZXIpMzUgYihuaWNlKWcodGhpbmdzKWcodyluKG91bGQpZyhiKXIoZSlnKHRvKWcoYilyKGUpaAorKGFibGUpZSh0byloKHBhc3MpZyhpbilnKGRpXDAzM2VyZW4pbih0KWcodHJhbnNwKXIob3J0KTAKKzM3NDEgeShvYik1IGIoamVjdHMpNDEgYihmb3IpZyhyZWFkaW5nKWYoYW5kKWgod3JpdGluZywpaihidXQpZSh0aGVuKWcKKyh0aGUpZyBGbShmaWxlbm9cKFwpKWMgRnIobWV0aG8pcihkKWsob2YpNDcgYiBGbShTU0wuQ29ubmVjdGlvbikzNgorYiBGcihiKXIoZWNvbWVzKTQxIGIodmlydHVhbGx5KTAgMzg0MSB5KHVzZWxlc3MuKTM2IGIoQWxzbywpMjcKK2Ioc2hvdWxkKWgodGhlKWcobWV0aG8pcihkKWcocmVzb2x1dGlvbillKGIpcihlKWkodXNlZClnKG9uKWYodGhlKWgKKyhyZWFkLXRyYW5zcClyKG9ydClkKG9yKWkodGhlKWgod3JpdGUtdHJhbnNwKXIob3J0PylwCiswIDUzMjMgMTU2MCA0IHYgOTIgNTM3NiBhIEZpKDUpMTI3IDU0MDAgeSBGaChJJ20pMjIgYihub3QpaihzdXJlKWYod2gpbgorKHkpZyh0aGlzKWcoaXMpZihuZWNlc3NhcnkpLTYgYigsKTI1IGIoYnV0KWYob3RoZXJ3aXNlKWgoSSlmKGdldCloKGEpZQorKHNlZ21lbiluKHRhdGlvbilpKHZpb2xhdGlvbilmKG9uKWcgRmEoUHlFdmFsX0NhbGxPYmplY3QpcAorMCA1NTQ5IDM5MDEgNCB2IDAgNTY0OSBhIEZnKDE0KTMzNjggYig0KTgzIGIoSW50ZXJuYWxzKXAKK2VvcCBlbmQKKyUlVHJhaWxlcgorCit1c2VyZGljdCAvZW5kLWhvb2sga25vd257ZW5kLWhvb2t9aWYKKyUlRU9GCmRpZmYgLS1naXQgYS9kb2MvcHlPcGVuU1NMLnRleCBiL2RvYy9weU9wZW5TU0wudGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMzk4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvcHlPcGVuU1NMLnRleApAQCAtMCwwICsxLDEwNTYgQEAKK1xkb2N1bWVudGNsYXNze2hvd3RvfQorCitcdGl0bGV7UHl0aG9uIE9wZW5TU0wgTWFudWFsfQorCitccmVsZWFzZXswLjZ9CisKK1xhdXRob3J7TWFydGluIFNq9mdyZW59CitcYXV0aG9yYWRkcmVzc3tcZW1haWx7bWFydGluQHN0cmFrdC5jb219fQorCitcdXNlcGFja2FnZVtlbmdsaXNoXXtiYWJlbH0KK1x1c2VwYWNrYWdlW1QxXXtmb250ZW5jfQorCitcYmVnaW57ZG9jdW1lbnR9CisKK1xtYWtldGl0bGUKKworXGJlZ2lue2Fic3RyYWN0fQorXG5vaW5kZW50CitUaGlzIG1vZHVsZSBpcyBhIHJhdGhlciB0aGluIHdyYXBwZXIgYXJvdW5kIChhIHN1YnNldCBvZikgdGhlIE9wZW5TU0wgbGlicmFyeS4KK1dpdGggdGhpbiB3cmFwcGVyIEkgbWVhbiB0aGF0IGEgbG90IG9mIHRoZSBvYmplY3QgbWV0aG9kcyBkbyBub3RoaW5nIG1vcmUgdGhhbgorY2FsbGluZyBhIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gaW4gdGhlIE9wZW5TU0wgbGlicmFyeS4KK1xlbmR7YWJzdHJhY3R9CisKK1x0YWJsZW9mY29udGVudHMKKworCitcc2VjdGlvbntJbnRyb2R1Y3Rpb24gXGxhYmVse2ludHJvfX0KKworVGhlIHJlYXNvbiB0aGlzIG1vZHVsZSBleGlzdHMgYXQgYWxsIGlzIHRoYXQgdGhlIFNTTCBzdXBwb3J0IGluIHRoZSBzb2NrZXQKK21vZHVsZSBpbiB0aGUgUHl0aG9uIDIuMSBkaXN0cmlidXRpb24gKHdoaWNoIGlzIHdoYXQgd2UgdXNlZCwgb2YgY291cnNlIEkKK2Nhbm5vdCBzcGVhayBmb3IgbGF0ZXIgdmVyc2lvbnMpIGlzIHNldmVyZWx5IGxpbWl0ZWQuCisKK1doZW4gYXNraW5nIGFib3V0IFNTTCBvbiB0aGUgY29tcC5sYW5nLnB5dGhvbiBuZXdzZ3JvdXAgKG9yIG9uCitweXRob24tbGlzdEBweXRob24ub3JnKSBwZW9wbGUgdXN1YWxseSBwb2ludGVkIHlvdSB0byB0aGUgTTJDcnlwdG8gcGFja2FnZS4KK1RoZSBNMkNyeXB0by5TU0wgbW9kdWxlIGRvZXMgaW1wbGVtZW50IGEgbG90IG9mIE9wZW5TU0wncyBmdW5jdGlvbmFsaXR5IGJ1dAordW5mb3J0dW5hdGVseSBpdHMgZXJyb3IgaGFuZGxpbmcgc3lzdGVtIGRvZXMgbm90IHNlZW0gdG8gYmUgZmluaXNoZWQsCitlc3BlY2lhbGx5IGZvciBub24tYmxvY2tpbmcgSS9PLiAgSSB0aGluayB0aGF0IG11Y2ggb2YgdGhlIHJlYXNvbiBmb3IgdGhpcworaXMgdGhhdCBNMkNyeXB0b1xmb290bm90ZXtTZWUgXHVybHtodHRwOi8vd3d3LnBvc3QxLmNvbS9ob21lL25ncHMvbTIvfX0gaXMKK2RldmVsb3BlZCB1c2luZyBTV0lHXGZvb3Rub3Rle1NlZSBcdXJse2h0dHA6Ly9zd2lnLnNvdXJjZWZvcmdlLm5ldC99fS4gIFRoaXMKK21ha2VzIGl0IGF3a3dhcmQgdG8gY3JlYXRlIGZ1bmN0aW9ucyB0aGF0IGUuZy4gY2FuIHJldHVybiBib3RoIGFuIGludGVnZXIgYW5kCitOVUxMIHNpbmNlIChhcyBmYXIgYXMgSSBrbm93KSB5b3UgYmFzaWNhbGx5IHdyaXRlIEMgZnVuY3Rpb25zIGFuZCBTV0lHIG1ha2VzCit3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0IHBhcnNlcyB0aGUgUHl0aG9uIGFyZ3VtZW50IGxpc3QgYW5kIGNhbGxzIHlvdXIgQworZnVuY3Rpb24sIGFuZCBmaW5hbGx5IHRyYW5zZm9ybXMgeW91ciByZXR1cm4gdmFsdWUgdG8gYSBQeXRob24gb2JqZWN0LgorCisKK1xzZWN0aW9ue0J1aWxkaW5nIGFuZCBJbnN0YWxsaW5nIFxsYWJlbHtidWlsZGluZ319CisKK1RoZXNlIGluc3RydWN0aW9ucyBjYW4gYWxzbyBiZSBmb3VuZCBpbiB0aGUgZmlsZSBcdmVyYnxJTlNUQUxMfC4KKworSSBoYXZlIHRlc3RlZCB0aGlzIG9uIERlYmlhbiBMaW51eCBzeXN0ZW1zICh3b29keSBhbmQgc2lkKSwgU29sYXJpcyAyLjYgYW5kCisyLjcuIE90aGVycyBoYXZlIHN1Y2Nlc3NmdWxseSBjb21waWxlZCBpdCBvbiBXaW5kb3dzIGFuZCBOVC4KKworXHN1YnNlY3Rpb257QnVpbGRpbmcgdGhlIE1vZHVsZSBvbiBhIFVuaXggU3lzdGVtIFxsYWJlbHtidWlsZGluZy11bml4fX0KKworcHlPcGVuU1NMIHVzZXMgZGlzdHV0aWxzLCBzbyB0aGVyZSByZWFsbHkgc2hvdWxkbid0IGJlIGFueSBwcm9ibGVtcy4gVG8gYnVpbGQKK3RoZSBsaWJyYXJ5OgorXGJlZ2lue3ZlcmJhdGltfQorcHl0aG9uIHNldHVwLnB5IGJ1aWxkCitcZW5ke3ZlcmJhdGltfQorCitJZiB5b3VyIE9wZW5TU0wgaGVhZGVyIGZpbGVzIGFyZW4ndCBpbiBcdmVyYnwvdXNyL2luY2x1ZGV8LCB5b3UgbWF5IG5lZWQgdG8KK3N1cHBseSB0aGUgXHZlcmJ8LUl8IGZsYWcgdG8gbGV0IHRoZSBzZXR1cCBzY3JpcHQga25vdyB3aGVyZSB0byBsb29rLiBUaGUgc2FtZQorZ29lcyBmb3IgdGhlIGxpYnJhcmllcyBvZiBjb3Vyc2UsIHVzZSB0aGUgXHZlcmJ8LUx8IGZsYWcuIE5vdGUgdGhhdAorXHZlcmJ8YnVpbGR8IHdvbid0IGFjY2VwdCB0aGVzZSBmbGFncywgc28geW91IGhhdmUgdG8gcnVuIGZpcnN0CitcdmVyYnxidWlsZF9leHR8IGFuZCB0aGVuIFx2ZXJifGJ1aWxkfCEgRXhhbXBsZToKK1xiZWdpbnt2ZXJiYXRpbX0KK3B5dGhvbiBzZXR1cC5weSBidWlsZF9leHQgLUkvdXNyL2xvY2FsL3NzbC9pbmNsdWRlIC1ML3Vzci9sb2NhbC9zc2wvbGliCitweXRob24gc2V0dXAucHkgYnVpbGQKK1xlbmR7dmVyYmF0aW19CisKK05vdyB5b3Ugc2hvdWxkIGhhdmUgYSBkaXJlY3RvcnkgY2FsbGVkIFx2ZXJifE9wZW5TU0x8IHRoYXQgY29udGFpbnMgZS5nLgorXHZlcmJ8U1NMLnNvfCBhbmQgXHZlcmJ8X19pbml0X18ucHl8IHNvbWV3aGVyZSBpbiB0aGUgYnVpbGQgZGljcmVjdG9yeSwKK3NvIGp1c3Q6CitcYmVnaW57dmVyYmF0aW19CitweXRob24gc2V0dXAucHkgaW5zdGFsbAorXGVuZHt2ZXJiYXRpbX0KKworSWYgeW91LCBmb3Igc29tZSBhcmNhbmUgcmVhc29uLCBkb24ndCB3YW50IHRoZSBtb2R1bGUgdG8gYXBwZWFyIGluIHRoZQorXHZlcmJ8c2l0ZS1wYWNrYWdlc3wgZGlyZWN0b3J5LCB1c2UgdGhlIFx2ZXJifC0tcHJlZml4fCBvcHRpb24uCisKK1lvdSBjYW4sIG9mIGNvdXJzZSwgZG8KK1xiZWdpbnt2ZXJiYXRpbX0KK3B5dGhvbiBzZXR1cC5weSAtLWhlbHAKK1xlbmR7dmVyYmF0aW19CisKK3RvIGZpbmQgb3V0IG1vcmUgYWJvdXQgaG93IHRvIHVzZSB0aGUgc2NyaXB0LgorCitcc3Vic2VjdGlvbntCdWlsZGluZyB0aGUgTW9kdWxlIG9uIGEgV2luZG93cyBTeXN0ZW0gXGxhYmVse2J1aWxkaW5nLXdpbmRvd3N9fQorCitCaWcgdGhhbmtzIHRvIEl0YW1hciBTaHR1bGwtVHJhdXJpbmcgYW5kIE9sZWcgT3Jsb3YgZm9yIHRoZWlyIGhlbHAgd2l0aAorV2luZG93cyBidWlsZCBpbnN0cnVjdGlvbnMuICBTYW1lIGFzIGZvciBVbml4IHN5c3RlbXMsIHdlIGhhdmUgdG8gc2VwYXJhdGUKK3RoZSBcdmVyYnxidWlsZF9leHR8IGFuZCB0aGUgXHZlcmJ8YnVpbGR8LgorCitCdWlsZGluZyB0aGUgbGlicmFyeToKKworXGJlZ2lue3ZlcmJhdGltfQorc2V0dXAucHkgYnVpbGRfZXh0IC1JIC4uLlxvcGVuc3NsXGluYzMyIC1MIC4uLlxvcGVuc3NsXG91dDMyZGxsCitzZXR1cC5weSBidWlsZAorXGVuZHt2ZXJiYXRpbX0KKworV2hlcmUgXHZlcmJ8Li4uXG9wZW5zc2x8IGlzIG9mIGNvdXJzZSB0aGUgbG9jYXRpb24gb2YgeW91ciBPcGVuU1NMIGluc3RhbGxhdGlvbi4KKworSW5zdGFsbGF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciBVbml4IHN5c3RlbXM6CitcYmVnaW57dmVyYmF0aW19CitzZXR1cC5weSBpbnN0YWxsCitcZW5ke3ZlcmJhdGltfQorCitBbmQgc2ltaWxhcmlseSwgeW91IGNhbiBkbworXGJlZ2lue3ZlcmJhdGltfQorc2V0dXAucHkgLS1oZWxwCitcZW5ke3ZlcmJhdGltfQorCit0byBnZXQgbW9yZSBpbmZvcm1hdGlvbi4KKworCitcc2VjdGlvbntcbW9kdWxle09wZW5TU0x9IC0tLSBQeXRob24gaW50ZXJmYWNlIHRvIE9wZW5TU0wgXGxhYmVse29wZW5zc2x9fQorCitcZGVjbGFyZW1vZHVsZXtleHRlbnNpb259e09wZW5TU0x9CitcbW9kdWxlc3lub3BzaXN7UHl0aG9uIGludGVyZmFjZSB0byBPcGVuU1NMfQorCitUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBoaWdoLWxldmVsIGludGVyZmFjZSB0byB0aGUgZnVuY3Rpb25zIGluIHRoZQorT3BlblNTTCBsaWJyYXJ5LiBUaGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIGRlZmluZWQ6CisKK1xiZWdpbntkYXRhZGVzY317Y3J5cHRvfQorR2VuZXJpYyBjcnlwdG9ncmFwaGljIG1vZHVsZS4gTm90ZSB0aGF0IGlmIGFueXRoaW5nIGlzIGluY29tcGxldGUsIHRoaXMgbW9kdWxlIGlzIQorXGVuZHtkYXRhZGVzY30KKworXGJlZ2lue2RhdGFkZXNjfXtyYW5kfQorQW4gaW50ZXJmYWNlIHRvIHRoZSBPcGVuU1NMIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KK1xlbmR7ZGF0YWRlc2N9CisKK1xiZWdpbntkYXRhZGVzY317U1NMfQorQW4gaW50ZXJmYWNlIHRvIHRoZSBTU0wtc3BlY2lmaWMgcGFydHMgb2YgT3BlblNTTC4KK1xlbmR7ZGF0YWRlc2N9CisKKworJSAlICUgY3J5cHRvIG1vZHVsZU9wZW5TU0wKKworXHN1YnNlY3Rpb257XG1vZHVsZXtjcnlwdG99IC0tLSBHZW5lcmljIGNyeXB0b2dyYXBoaWMgbW9kdWxlIFxsYWJlbHtvcGVuc3NsLWNyeXB0b319CisKK1xkZWNsYXJlbW9kdWxle2V4dGVuc2lvbn17Y3J5cHRvfQorXG1vZHVsZXN5bm9wc2lze0dlbmVyaWMgY3J5cHRvZ3JhcGhpYyBtb2R1bGV9CisKK1xiZWdpbntkYXRhZGVzY317WDUwOVR5cGV9CitBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFg1MDkgb2JqZWN0IHR5cGUuCitcZW5ke2RhdGFkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e1g1MDl9e30KK0ZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGFuIFg1MDkgb2JqZWN0LgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2RhdGFkZXNjfXtYNTA5TmFtZVR5cGV9CitBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFg1MDlOYW1lIG9iamVjdCB0eXBlLgorXGVuZHtkYXRhZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtYNTA5TmFtZX17eDUwOW5hbWV9CitGYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGNvcHkgb2YgXHZhcnt4NTA5bmFtZX0uCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZGF0YWRlc2N9e1g1MDlSZXFUeXBlfQorQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBYNTA5UmVxIG9iamVjdCB0eXBlLgorXGVuZHtkYXRhZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtYNTA5UmVxfXt9CitGYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhbiBYNTA5UmVxIG9iamVjdC4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntkYXRhZGVzY317WDUwOVN0b3JlVHlwZX0KK0EgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgWDUwOVN0b3JlIG9iamVjdCB0eXBlLgorXGVuZHtkYXRhZGVzY30KKworXGJlZ2lue2RhdGFkZXNjfXtQS2V5VHlwZX0KK0EgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgUEtleSBvYmplY3QgdHlwZS4KK1xlbmR7ZGF0YWRlc2N9CisKK1xiZWdpbntmdW5jZGVzY317UEtleX17fQorRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBQS2V5IG9iamVjdC4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntkYXRhZGVzY317UEtDUzdUeXBlfQorQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBQS0NTNyBvYmplY3QgdHlwZS4KK1xlbmR7ZGF0YWRlc2N9CisKK1xiZWdpbntkYXRhZGVzY317UEtDUzEyVHlwZX0KK0EgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgUEtDUzEyIG9iamVjdCB0eXBlLgorXGVuZHtkYXRhZGVzY30KKworXGJlZ2lue2RhdGFkZXNjfXtYNTA5RXh0ZW5zaW9uVHlwZX0KK0EgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgWDUwOUV4dGVuc2lvbiBvYmplY3QgdHlwZS4KK1xlbmR7ZGF0YWRlc2N9CisKK1xiZWdpbntmdW5jZGVzY317WDUwOUV4dGVuc2lvbn17dHlwZW5hbWUsIGNyaXRpY2FsLCB2YWx1ZX0KK0ZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgWDUwOUV4dGVuc2lvbiBvYmplY3QuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZGF0YWRlc2N9e05ldHNjYXBlU1BLSVR5cGV9CitBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIE5ldHNjYXBlU1BLSSBvYmplY3QgdHlwZS4KK1xlbmR7ZGF0YWRlc2N9CisKK1xiZWdpbntmdW5jZGVzY317TmV0c2NhcGVTUEtJfXtcb3B0aW9uYWx7ZW5jfX0KK0ZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgTmV0c2NhcGVTUEtJIG9iamVjdC4gSWYgdGhlIFx2YXJ7ZW5jfSBhcmd1bWVudAoraXMgcHJlc2VudCwgaXQgc2hvdWxkIGJlIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nIHJlcHJlc2VudGluZyBhIE5ldHNjYXBlU1BLSQorb2JqZWN0LCBhcyByZXR1cm5lZCBieSB0aGUgXG1ldGhvZHtiNjRfZW5jb2RlfSBtZXRob2QuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZGF0YWRlc2N9e0ZJTEVUWVBFX1BFTX0KK1xkYXRhbGluZXtGSUxFVFlQRV9BU04xfQorRmlsZSB0eXBlIGNvbnN0YW50cy4KK1xlbmR7ZGF0YWRlc2N9CisKK1xiZWdpbntkYXRhZGVzY317VFlQRV9SU0F9CitcZGF0YWxpbmV7VFlQRV9EU0F9CitLZXkgdHlwZSBjb25zdGFudHMuCitcZW5ke2RhdGFkZXNjfQorCitcYmVnaW57ZXhjZGVzY317RXJyb3J9CitHZW5lcmljIGV4Y2VwdGlvbiB1c2VkIGluIHRoZSBcbW9kdWxle2NyeXB0b30gbW9kdWxlLgorXGVuZHtleGNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e2R1bXBfY2VydGlmaWNhdGV9e3R5cGUsIGNlcnR9CitEdW1wIHRoZSBjZXJ0aWZpY2F0ZSBcdmFye2NlcnR9IGludG8gYSBidWZmZXIgc3RyaW5nIGVuY29kZWQgd2l0aCB0aGUgdHlwZQorXHZhcnt0eXBlfS4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317ZHVtcF9jZXJ0aWZpY2F0ZV9yZXF1ZXN0fXt0eXBlLCByZXF9CitEdW1wIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IFx2YXJ7cmVxfSBpbnRvIGEgYnVmZmVyIHN0cmluZyBlbmNvZGVkIHdpdGggdGhlCit0eXBlIFx2YXJ7dHlwZX0uCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e2R1bXBfcHJpdmF0ZWtleX17dHlwZSwgcGtleVxvcHRpb25hbHssIGNpcGhlciwgcGFzc3BocmFzZX19CitEdW1wIHRoZSBwcml2YXRlIGtleSBcdmFye3BrZXl9IGludG8gYSBidWZmZXIgc3RyaW5nIGVuY29kZWQgd2l0aCB0aGUgdHlwZQorXHZhcnt0eXBlfSwgb3B0aW9uYWxseSAoaWYgXHZhcnt0eXBlfSBpcyBcY29uc3RhbnR7RklMRVRZUEVfUEVNfSkgZW5jcnlwdGluZyBpdAordXNpbmcgXHZhcntjaXBoZXJ9IGFuZCBcdmFye3Bhc3NwaHJhc2V9LgorCitcdmFye3Bhc3NwaHJhc2V9IG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2sgZm9yIHByb3ZpZGluZyB0aGUKK3Bhc3MgcGhyYXNlLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtsb2FkX2NlcnRpZmljYXRlfXt0eXBlLCBidWZmZXJ9CitMb2FkIGEgY2VydGlmaWNhdGUgKFg1MDkpIGZyb20gdGhlIHN0cmluZyBcdmFye2J1ZmZlcn0gZW5jb2RlZCB3aXRoIHRoZQordHlwZSBcdmFye3R5cGV9LgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtsb2FkX2NlcnRpZmljYXRlX3JlcXVlc3R9e3R5cGUsIGJ1ZmZlcn0KK0xvYWQgYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IChYNTA5UmVxKSBmcm9tIHRoZSBzdHJpbmcgXHZhcntidWZmZXJ9IGVuY29kZWQgd2l0aAordGhlIHR5cGUgXHZhcnt0eXBlfS4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317bG9hZF9wcml2YXRla2V5fXt0eXBlLCBidWZmZXJcb3B0aW9uYWx7LCBwYXNzcGhyYXNlfX0KK0xvYWQgYSBwcml2YXRlIGtleSAoUEtleSkgZnJvbSB0aGUgc3RyaW5nIFx2YXJ7YnVmZmVyfSBlbmNvZGVkIHdpdGgKK3RoZSB0eXBlIFx2YXJ7dHlwZX0gKG11c3QgYmUgb25lIG9mIFxjb25zdGFudHtGSUxFVFlQRV9QRU19IGFuZAorXGNvbnN0YW50e0ZJTEVUWVBFX0FTTjF9KS4KKworXHZhcntwYXNzcGhyYXNlfSBtdXN0IGJlIGVpdGhlciBhIHN0cmluZyBvciBhIGNhbGxiYWNrIGZvciBwcm92aWRpbmcgdGhlCitwYXNzIHBocmFzZS4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317bG9hZF9wa2NzN19kYXRhfXt0eXBlLCBidWZmZXJ9CitMb2FkIHBrY3M3IGRhdGEgZnJvbSB0aGUgc3RyaW5nIFx2YXJ7YnVmZmVyfSBlbmNvZGVkIHdpdGggdGhlIHR5cGUgXHZhcnt0eXBlfS4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317bG9hZF9wa2NzMTJ9e2J1ZmZlclxvcHRpb25hbHssIHBhc3NwaHJhc2V9fQorTG9hZCBwa2NzMTIgZGF0YSBmcm9tIHRoZSBzdHJpbmcgXHZhcntidWZmZXJ9LiBJZiB0aGUgcGtjczEyIHN0cnVjdHVyZSBpcworZW5jcnlwdGVkLCBhIFx2YXJ7cGFzc3BocmFzZX0gbXVzdCBiZSBpbmNsdWRlZC4KK1xlbmR7ZnVuY2Rlc2N9CisKKworXHN1YnN1YnNlY3Rpb257WDUwOSBvYmplY3RzIFxsYWJlbHtvcGVuc3NsLXg1MDl9fQorCitYNTA5IG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisKK1xiZWdpbnttZXRob2RkZXNjfVtYNTA5XXtnZXRfaXNzdWVyfXt9CitSZXR1cm4gYSBcZW17Ym9ycm93ZWQgcmVmZXJlbmNlfSB0byBhIFg1MDlOYW1lIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGlzc3Vlcgorb2YgdGhlIGNlcnRpZmljYXRlLiAgV2hlbiB0aGUgY29ycmVzcG9uZGluZyBYNTA5IG9yIFg1MDlSZXEgb2JqZWN0IGlzCitkZXN0cm95ZWQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgaW52YWxpZCEKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde2dldF9wdWJrZXl9e30KK1JldHVybiBhIFBLZXkgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcHVibGljIGtleSBvZiB0aGUgY2VydGlmaWNhdGUuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtYNTA5XXtnZXRfc2VyaWFsX251bWJlcn17fQorUmV0dXJuIHRoZSBjZXJ0aWZpY2F0ZSBzZXJpYWwgbnVtYmVyLgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bWDUwOV17Z2V0X3N1YmplY3R9e30KK1JldHVybiBhIFxlbXtib3Jyb3dlZCByZWZlcmVuY2V9IHRvIGEgWDUwOU5hbWUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc3ViamVjdAorb2YgdGhlIGNlcnRpZmljYXRlLiAgV2hlbiB0aGUgY29ycmVzcG9uZGluZyBYNTA5IG9yIFg1MDlSZXEgb2JqZWN0IGlzCitkZXN0cm95ZWQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgaW52YWxpZCEKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde2dldF92ZXJzaW9ufXt9CitSZXR1cm4gdGhlIGNlcnRpZmljYXRlIHZlcnNpb24uCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtYNTA5XXtnbXRpbWVfYWRqX25vdEJlZm9yZX17dGltZX0KK0FkanVzdCB0aGUgdGltZXN0YW1wIChpbiBHTVQpIHdoZW4gdGhlIGNlcnRpZmljYXRlIHN0YXJ0cyBiZWluZyB2YWxpZC4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde2dtdGltZV9hZGpfbm90QWZ0ZXJ9e3RpbWV9CitBZGp1c3QgdGhlIHRpbWVzdGFtcCAoaW4gR01UKSB3aGVuIHRoZSBjZXJ0aWZpY2F0ZSBzdG9wcyBiZWluZyB2YWxpZC4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde2hhc19leHBpcmVkfXt9CitDaGVja3MgdGhlIGNlcnRpZmljYXRlJ3MgdGltZSBzdGFtcCBhZ2FpbnN0IGN1cnJlbnQgdGltZS4gUmV0dXJucyB0cnVlIGlmIHRoZQorY2VydGlmaWNhdGUgaGFzIGV4cGlyZWQgYW5kIGZhbHNlIG90aGVyd2lzZS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde3NldF9pc3N1ZXJ9e2lzc3Vlcn0KK1NldCB0aGUgaXNzdWVyIG9mIHRoZSBjZXJ0aWZpY2F0ZSB0byBcdmFye2lzc3Vlcn0uCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtYNTA5XXtzZXRfcHVia2V5fXtwa2V5fQorU2V0IHRoZSBwdWJsaWMga2V5IG9mIHRoZSBjZXJ0aWZpY2F0ZSB0byBcdmFye3BrZXl9LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bWDUwOV17c2V0X3NlcmlhbF9udW1iZXJ9e3NlcmlhbG5vfQorU2V0IHRoZSBzZXJpYWwgbnVtYmVyIG9mIHRoZSBjZXJ0aWZpY2F0ZSB0byBcdmFye3NlcmlhbG5vfS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde3NldF9zdWJqZWN0fXtzdWJqZWN0fQorU2V0IHRoZSBzdWJqZWN0IG9mIHRoZSBjZXJ0aWZpY2F0ZSB0byBcdmFye3N1YmplY3R9LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bWDUwOV17c2V0X3ZlcnNpb259e3ZlcnNpb259CitTZXQgdGhlIGNlcnRpZmljYXRlIHZlcnNpb24gdG8gXHZhcnt2ZXJzaW9ufS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlde3NpZ259e3BrZXksIGRpZ2VzdH0KK1NpZ24gdGhlIGNlcnRpZmljYXRlLCB1c2luZyB0aGUga2V5IFx2YXJ7cGtleX0gYW5kIHRoZSBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0KK2lkZW50aWZpZWQgYnkgdGhlIHN0cmluZyBcdmFye2RpZ2VzdH0uCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtYNTA5XXtzdWJqZWN0X25hbWVfaGFzaH17fQorUmV0dXJuIHRoZSBoYXNoIG9mIHRoZSBjZXJ0aWZpY2F0ZSBzdWJqZWN0LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bWDUwOV17ZGlnZXN0fXtkaWdlc3RfbmFtZX0KK1JldHVybiBhIGRpZ2VzdCBvZiB0aGUgY2VydGlmaWNhdGUsIHVzaW5nIHRoZSBcdmFye2RpZ2VzdF9uYW1lfSBtZXRob2QuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtYNTA5XXthZGRfZXh0ZW5zaW9uc317ZXh0ZW5zaW9uc30KK0FkZCB0aGUgZXh0ZW5zaW9ucyBpbiB0aGUgc2VxdWVuY2UgXHZhcntleHRlbnNpb25zfSB0byB0aGUgY2VydGlmaWNhdGUuCitcZW5ke21ldGhvZGRlc2N9CisKK1xzdWJzdWJzZWN0aW9ue1g1MDlOYW1lIG9iamVjdHMgXGxhYmVse29wZW5zc2wteDUwOW5hbWV9fQorCitYNTA5TmFtZSBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgorCitcYmVnaW57bWVtYmVyZGVzY31bWDUwOU5hbWVde2NvdW50cnlOYW1lfQorVGhlIGNvdW50cnkgb2YgdGhlIGVudGl0eS4gXGNvZGV7Q30gbWF5IGJlIHVzZWQgYXMgYW4gYWxpYXMgZm9yCitcY29kZXtjb3VudHJ5TmFtZX0uCitcZW5ke21lbWJlcmRlc2N9CisKK1xiZWdpbnttZW1iZXJkZXNjfVtYNTA5TmFtZV17c3RhdGVPclByb3ZpbmNlTmFtZX0KK1RoZSBzdGF0ZSBvciBwcm92aW5jZSBvZiB0aGUgZW50aXR5LiBcY29kZXtTVH0gbWF5IGJlIHVzZWQgYXMgYW4gYWxpYXMgZm9yCitcY29kZXtzdGF0ZU9yUHJvdmluY2VOYW1lfbcKK1xlbmR7bWVtYmVyZGVzY30KKworXGJlZ2lue21lbWJlcmRlc2N9W1g1MDlOYW1lXXtsb2NhbGl0eU5hbWV9CitUaGUgbG9jYWxpdHkgb2YgdGhlIGVudGl0eS4gXGNvZGV7TH0gbWF5IGJlIHVzZWQgYXMgYW4gYWxpYXMgZm9yCitcY29kZXtsb2NhbGl0eU5hbWV9LgorXGVuZHttZW1iZXJkZXNjfQorCitcYmVnaW57bWVtYmVyZGVzY31bWDUwOU5hbWVde29yZ2FuaXphdGlvbk5hbWV9CitUaGUgb3JnYW5pemF0aW9uIG5hbWUgb2YgdGhlIGVudGl0eS4gXGNvZGV7T30gbWF5IGJlIHVzZWQgYXMgYW4gYWxpYXMgZm9yCitcY29kZXtvcmdhbml6YXRpb25OYW1lfS4KK1xlbmR7bWVtYmVyZGVzY30KKworXGJlZ2lue21lbWJlcmRlc2N9W1g1MDlOYW1lXXtvcmdhbml6YXRpb25hbFVuaXROYW1lfQorVGhlIG9yZ2FuaXphdGlvbmFsIHVuaXQgb2YgdGhlIGVudGl0eS4gXGNvZGV7T1V9IG1heSBiZSB1c2VkIGFzIGFuIGFsaWFzIGZvcgorXGNvZGV7b3JnYW5pemF0aW9uYWxVbml0TmFtZX0uCitcZW5ke21lbWJlcmRlc2N9CisKK1xiZWdpbnttZW1iZXJkZXNjfVtYNTA5TmFtZV17Y29tbW9uTmFtZX0KK1RoZSBjb21tb24gbmFtZSBvZiB0aGUgZW50aXR5LiBcY29kZXtDTn0gbWF5IGJlIHVzZWQgYXMgYW4gYWxpYXMgZm9yCitcY29kZXtjb21tb25OYW1lfS4KK1xlbmR7bWVtYmVyZGVzY30KKworXGJlZ2lue21lbWJlcmRlc2N9W1g1MDlOYW1lXXtlbWFpbEFkZHJlc3N9CitUaGUgZS1tYWlsIGFkZHJlc3Mgb2YgdGhlIGVudGl0eS4KK1xlbmR7bWVtYmVyZGVzY30KKworXHN1YnN1YnNlY3Rpb257WDUwOVJlcSBvYmplY3RzIFxsYWJlbHtvcGVuc3NsLXg1MDlyZXF9fQorCitYNTA5UmVxIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisKK1xiZWdpbnttZXRob2RkZXNjfVtYNTA5UmVxXXtnZXRfcHVia2V5fXt9CitSZXR1cm4gYSBQS2V5IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHB1YmxpYyBrZXkgb2YgdGhlIGNlcnRpZmljYXRlIHJlcXVlc3QuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtYNTA5UmVxXXtnZXRfc3ViamVjdH17fQorUmV0dXJuIGEgXGVte2JvcnJvd2VkIHJlZmVyZW5jZX0gdG8gYSBYNTA5TmFtZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzdWJqZWN0CitvZiB0aGUgY2VydGlmaWNhdGUuICBXaGVuIHRoZSBjb3JyZXNwb25kaW5nIFg1MDkgb3IgWDUwOVJlcSBvYmplY3QgaXMKK2Rlc3Ryb3llZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSBpbnZhbGlkIQorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bWDUwOVJlcV17c2V0X3B1YmtleX17cGtleX0KK1NldCB0aGUgcHVibGljIGtleSBvZiB0aGUgY2VydGlmaWNhdGUgcmVxdWVzdCB0byBcdmFye3BrZXl9LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bWDUwOVJlcV17c2lnbn17cGtleSwgZGlnZXN0fQorU2lnbiB0aGUgY2VydGlmaWNhdGUgcmVxdWVzdCwgdXNpbmcgdGhlIGtleSBcdmFye3BrZXl9IGFuZCB0aGUgbWVzc2FnZSBkaWdlc3QKK2FsZ29yaXRobSBpZGVudGlmaWVkIGJ5IHRoZSBzdHJpbmcgXHZhcntkaWdlc3R9LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bWDUwOVJlcV17dmVyaWZ5fXtwa2V5fQorVmVyaWZ5IGEgY2VydGlmaWNhdGUgcmVxdWVzdCB1c2luZyB0aGUgcHVibGljIGtleSBcdmFye3BrZXl9LgorXGVuZHttZXRob2RkZXNjfQorCitcc3Vic3Vic2VjdGlvbntYNTA5U3RvcmUgb2JqZWN0cyBcbGFiZWx7b3BlbnNzbC14NTA5c3RvcmV9fQorCitUaGUgWDUwOVN0b3JlIG9iamVjdCBoYXMgY3VycmVudGx5IGp1c3Qgb25lIG1ldGhvZDoKKworXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlTdG9yZV17YWRkX2NlcnR9e2NlcnR9CitBZGQgdGhlIGNlcnRpZmljYXRlIFx2YXJ7Y2VydH0gdG8gdGhlIGNlcnRpZmljYXRlIHN0b3JlLgorXGVuZHttZXRob2RkZXNjfQorCitcc3Vic3Vic2VjdGlvbntQS2V5IG9iamVjdHMgXGxhYmVse29wZW5zc2wtcGtleX19CisKK1RoZSBQS2V5IG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorCitcYmVnaW57bWV0aG9kZGVzY31bUEtleV17Yml0c317fQorUmV0dXJuIHRoZSBudW1iZXIgb2YgYml0cyBvZiB0aGUga2V5LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bUEtleV17Z2VuZXJhdGVfa2V5fXt0eXBlLCBiaXRzfQorR2VuZXJhdGUgYSBwdWJsaWMvcHJpdmF0ZSBrZXkgcGFpciBvZiB0aGUgdHlwZSBcdmFye3R5cGV9IChvbmUgb2YKK1xjb25zdGFudHtUWVBFX1JTQX0gYW5kIFxjb25zdGFudHtUWVBFX0RTQX0pIHdpdGggdGhlIHNpemUgXHZhcntiaXRzfS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W1BLZXlde3R5cGV9e30KK1JldHVybiB0aGUgdHlwZSBvZiB0aGUga2V5LgorXGVuZHttZXRob2RkZXNjfQorCitcc3Vic3Vic2VjdGlvbntQS0NTNyBvYmplY3RzIFxsYWJlbHtvcGVuc3NsLXBrY3M3fX0KKworUEtDUzcgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKworXGJlZ2lue21ldGhvZGRlc2N9W1BLQ1M3XXt0eXBlX2lzX3NpZ25lZH17fQorRklYTUUKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W1BLQ1M3XXt0eXBlX2lzX2VudmVsb3BlZH17fQorRklYTUUKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W1BLQ1M3XXt0eXBlX2lzX3NpZ25lZEFuZEVudmVsb3BlZH17fQorRklYTUUKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W1BLQ1M3XXt0eXBlX2lzX2RhdGF9e30KK0ZJWE1FCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtQS0NTN117Z2V0X3R5cGVfbmFtZX17fQorR2V0IHRoZSB0eXBlIG5hbWUgb2YgdGhlIFBLQ1M3LgorXGVuZHttZXRob2RkZXNjfQorCitcc3Vic3Vic2VjdGlvbntQS0NTMTIgb2JqZWN0cyBcbGFiZWx7b3BlbnNzbC1wa2NzMTJ9fQorCitQS0NTMTIgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKworXGJlZ2lue21ldGhvZGRlc2N9W1BLQ1MxMl17Z2V0X2NlcnRpZmljYXRlfXt9CitSZXR1cm4gY2VydGlmaWNhdGUgcG9ydGlvbiBvZiB0aGUgUEtDUzEyIHN0cnVjdHVyZS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W1BLQ1MxMl17Z2V0X3ByaXZhdGVrZXl9e30KK1JldHVybiBwcml2YXRlIGtleSBwb3J0aW9uIG9mIHRoZSBQS0NTMTIgc3RydWN0dXJlCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtQS0NTMTJde2dldF9jYV9jZXJ0aWZpY2F0ZXN9e30KK1JldHVybiBDQSBjZXJ0aWZpY2F0ZXMgd2l0aGluIHRoZSBQS0NTMTIgb2JqZWN0IGFzIGEgdHVwbGUuIFJldHVybnMKK05vbmUgaWYgbm8gQ0EgY2VydGlmaWNhdGVzIGFyZSBwcmVzZW50LgorXGVuZHttZXRob2RkZXNjfQorCitcc3Vic3Vic2VjdGlvbntYNTA5RXh0ZW5zaW9uIG9iamVjdHMgXGxhYmVse29wZW5zc2wtNTA5ZXh0fX0KKworWDUwOUV4dGVuc2lvbiBvYmplY3RzIGN1cnJlbnRseSBvbmx5IGhhdmUgb25lIG1ldGhvZDoKKworXGJlZ2lue21ldGhvZGRlc2N9W1g1MDlFeHRlbnNpb25de2dldF9jcml0aWNhbH17fQorUmV0dXJuIHRoZSBjcml0aWNhbCBmaWVsZCBvZiB0aGUgZXh0ZW5zaW9uIG9iamVjdC4KK1xlbmR7bWV0aG9kZGVzY30KKworXHN1YnN1YnNlY3Rpb257TmV0c2NhcGVTUEtJIG9iamVjdHMgXGxhYmVse29wZW5zc2wtbmV0c2NhcGUtc3BraX19CisKK05ldHNjYXBlU1BLSSBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorCitcYmVnaW57bWV0aG9kZGVzY31bTmV0c2NhcGVTUEtJXXtiNjRfZW5jb2RlfXt9CitSZXR1cm4gYSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdC4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W05ldHNjYXBlU1BLSV17Z2V0X3B1YmtleX17fQorUmV0dXJuIHRoZSBwdWJsaWMga2V5IG9mIG9iamVjdC4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W05ldHNjYXBlU1BLSV17c2V0X3B1YmtleX17a2V5fQorU2V0IHRoZSBwdWJsaWMga2V5IG9mIHRoZSBvYmplY3QgdG8gXHZhcntrZXl9LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bTmV0c2NhcGVTUEtJXXtzaWdufXtrZXksIGRpZ2VzdF9uYW1lfQorU2lnbiB0aGUgTmV0c2NhcGVTUEtJIG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4gXHZhcntrZXl9IGFuZCBcdmFye2RpZ2VzdF9uYW1lfS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W05ldHNjYXBlU1BLSV17dmVyaWZ5fXtrZXl9CitWZXJpZnkgdGhlIE5ldHNjYXBlU1BLSSBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIFx2YXJ7a2V5fS4KK1xlbmR7bWV0aG9kZGVzY30KKworCislICUgJSByYW5kIG1vZHVsZQorCitcc3Vic2VjdGlvbntcbW9kdWxle3JhbmR9IC0tLSBBbiBpbnRlcmZhY2UgdG8gdGhlIE9wZW5TU0wgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIFxsYWJlbHtvcGVuc3NsLXJhbmR9fQorCitcZGVjbGFyZW1vZHVsZXtleHRlbnNpb259e3JhbmR9CitcbW9kdWxlc3lub3BzaXN7QW4gaW50ZXJmYWNlIHRvIHRoZSBPcGVuU1NMIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvcn0KKworVGhpcyBtb2R1bGUgaGFuZGxlcyB0aGUgT3BlblNTTCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKFBSTkcpIGFuZAorZGVjbGFyZXMgdGhlIGZvbGxvd2luZzoKKworXGJlZ2lue2Z1bmNkZXNjfXthZGR9e3N0cmluZywgZW50cm9weX0KK01peCBieXRlcyBmcm9tIFx2YXJ7c3RyaW5nfSBpbnRvIHRoZSBQUk5HIHN0YXRlLiBUaGUgXHZhcntlbnRyb3B5fSBhcmd1bWVudCBpcworKHRoZSBsb3dlciBib3VuZCBvZikgYW4gZXN0aW1hdGUgb2YgaG93IG11Y2ggcmFuZG9tbmVzcyBpcyBjb250YWluZWQgaW4KK1x2YXJ7c3RyaW5nfSwgbWVhc3VyZWQgaW4gYnl0ZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgZS5nLiBccmZjezE3NTB9LgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtlZ2R9e3BhdGhcb3B0aW9uYWx7LCBieXRlc319CitRdWVyeSB0aGUgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uXGZvb3Rub3Rle1NlZQorXHVybHtodHRwOi8vd3d3LmxvdGhhci5jb20vdGVjaC9jcnlwdG8vfX0gb24gc29ja2V0IFx2YXJ7cGF0aH0gZm9yIFx2YXJ7Ynl0ZXN9CitieXRlcyBvZiByYW5kb20gZGF0YSBhbmQgYW5kIHVzZXMgXGZ1bmN0aW9ue2FkZH0gdG8gc2VlZCB0aGUgUFJORy4gVGhlIGRlZmF1bHQKK3ZhbHVlIG9mIFx2YXJ7Ynl0ZXN9IGlzIDI1NS4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317bG9hZF9maWxlfXtwYXRoXG9wdGlvbmFseywgYnl0ZXN9fQorUmVhZCBcdmFye2J5dGVzfSBieXRlcyAob3IgYWxsIG9mIGl0LCBpZiBcdmFye2J5dGVzfSBpcyBuZWdhdGl2ZSkgb2YgZGF0YSBmcm9tCit0aGUgZmlsZSBcdmFye3BhdGh9IHRvIHNlZWQgdGhlIFBSTkcuIFRoZSBkZWZhdWx0IHZhbHVlIG9mIFx2YXJ7Ynl0ZXN9IGlzIC0xLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtzY3JlZW59e30KK0FkZCB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgc2NyZWVuIHRvIHRoZSBQUk5HIHN0YXRlLgorQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtzZWVkfXtzdHJpbmd9CitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBcZnVuY3Rpb257YWRkfSB3aXRoIFx2YXJ7ZW50cm9weX0gYXMgdGhlIGxlbmd0aAorb2YgdGhlIHN0cmluZy4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317c3RhdHVzfXt9CitSZXR1cm5zIHRydWUgaWYgdGhlIFBSTkcgaGFzIGJlZW4gc2VlZGVkIHdpdGggZW5vdWdoIGRhdGEsIGFuZCBmYWxzZSBvdGhlcndpc2UuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e3dyaXRlX2ZpbGV9e3BhdGh9CitXcml0ZSBhIG51bWJlciBvZiByYW5kb20gYnl0ZXMgKGN1cnJlbnRseSAxMDI0KSB0byB0aGUgZmlsZSBcdmFye3BhdGh9LiBUaGlzCitmaWxlIGNhbiB0aGVuIGJlIHVzZWQgd2l0aCBcZnVuY3Rpb257bG9hZF9maWxlfSB0byBzZWVkIHRoZSBQUk5HIGFnYWluLgorXGVuZHtmdW5jZGVzY30KKworCisKKyUgJSAlIFNTTCBtb2R1bGUKKworXHN1YnNlY3Rpb257XG1vZHVsZXtTU0x9IC0tLSBBbiBpbnRlcmZhY2UgdG8gdGhlIFNTTC1zcGVjaWZpYyBwYXJ0cyBvZiBPcGVuU1NMIFxsYWJlbHtvcGVuc3NsLXNzbH19CisKK1xkZWNsYXJlbW9kdWxle2V4dGVuc2lvbn17U1NMfQorXG1vZHVsZXN5bm9wc2lze0FuIGludGVyZmFjZSB0byB0aGUgU1NMLXNwZWNpZmljIHBhcnRzIG9mIE9wZW5TU0x9CisKK1RoaXMgbW9kdWxlIGhhbmRsZXMgdGhpbmdzIHNwZWNpZmljIHRvIFNTTC4gVGhlcmUgYXJlIHR3byBvYmplY3RzIGRlZmluZWQ6CitDb250ZXh0LCBDb25uZWN0aW9uLgorCitcYmVnaW57ZGF0YWRlc2N9e1NTTHYyX01FVEhPRH0KK1xkYXRhbGluZXtTU0x2M19NRVRIT0R9CitcZGF0YWxpbmV7U1NMdjIzX01FVEhPRH0KK1xkYXRhbGluZXtUTFN2MV9NRVRIT0R9CitUaGVzZSBjb25zdGFudHMgcmVwcmVzZW50IHRoZSBkaWZmZXJlbnQgU1NMIG1ldGhvZHMgdG8gdXNlIHdoZW4gY3JlYXRpbmcgYQorY29udGV4dCBvYmplY3QuCitcZW5ke2RhdGFkZXNjfQorCitcYmVnaW57ZGF0YWRlc2N9e1ZFUklGWV9OT05FfQorXGRhdGFsaW5le1ZFUklGWV9QRUVSfQorXGRhdGFsaW5le1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVH0KK1RoZXNlIGNvbnN0YW50cyByZXByZXNlbnQgdGhlIHZlcmlmaWNhdGlvbiBtb2RlIHVzZWQgYnkgdGhlIENvbnRleHQKK29iamVjdCdzIFxtZXRob2R7c2V0X3ZlcmlmeX0gbWV0aG9kLgorXGVuZHtkYXRhZGVzY30KKworXGJlZ2lue2RhdGFkZXNjfXtGSUxFVFlQRV9QRU19CitcZGF0YWxpbmV7RklMRVRZUEVfQVNOMX0KK0ZpbGUgdHlwZSBjb25zdGFudHMgdXNlZCB3aXRoIHRoZSBcbWV0aG9ke3VzZV9jZXJ0aWZpY2F0ZV9maWxlfSBhbmQKK1xtZXRob2R7dXNlX3ByaXZhdGVrZXlfZmlsZX0gbWV0aG9kcyBvZiBDb250ZXh0IG9iamVjdHMuCitcZW5ke2RhdGFkZXNjfQorCitcYmVnaW57ZGF0YWRlc2N9e09QX1NJTkdMRV9ESF9VU0V9CitcZGF0YWxpbmV7T1BfRVBIRU1FUkFMX1JTQX0KK1xkYXRhbGluZXtPUF9OT19TU0x2Mn0KK1xkYXRhbGluZXtPUF9OT19TU0x2M30KK1xkYXRhbGluZXtPUF9OT19UTFN2MX0KK0NvbnN0YW50cyB1c2VkIHdpdGggXG1ldGhvZHtzZXRfb3B0aW9uc30gb2YgQ29udGV4dCBvYmplY3RzLgorXGNvbnN0YW50e09QX1NJTkdMRV9ESF9VU0V9IG1lYW5zIHRvIGFsd2F5cyBjcmVhdGUgYSBuZXcga2V5IHdoZW4gdXNpbmcgZXBoZW1lcmFsCitEaWZmaWUtSGVsbG1hbi4gXGNvbnN0YW50e09QX0VQSEVNRVJBTF9SU0F9IG1lYW5zIHRvIGFsd2F5cyB1c2UgZXBoZW1lcmFsIFJTQSBrZXlzCit3aGVuIGRvaW5nIFJTQSBvcGVyYXRpb25zLiBcY29uc3RhbnR7T1BfTk9fU1NMdjJ9LCBcY29uc3RhbnR7T1BfTk9fU1NMdjN9IGFuZAorXGNvbnN0YW50e09QX05PX1RMU3YxfSBtZWFucyB0byBkaXNhYmxlIHRob3NlIHNwZWNpZmljIHByb3RvY29scy4gVGhpcyBpcworaW50ZXJlc3RpbmcgaWYgeW91J3JlIHVzaW5nIGUuZy4gXGNvbnN0YW50e1NTTHYyM19NRVRIT0R9IHRvIGdldCBhbiBTU0x2Mi1jb21wYXRpYmxlCitoYW5kc2hha2UsIGJ1dCBkb24ndCB3YW50IHRvIHVzZSBTU0x2Mi4KK1xlbmR7ZGF0YWRlc2N9CisKK1xiZWdpbntkYXRhZGVzY317Q29udGV4dFR5cGV9CitBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIENvbnRleHQgb2JqZWN0IHR5cGUuCitcZW5ke2RhdGFkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e0NvbnRleHR9e21ldGhvZH0KK0ZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IENvbnRleHQgb2JqZWN0IGdpdmVuIGFuIFNTTCBtZXRob2QuIFRoZQorbWV0aG9kIHNob3VsZCBiZSBcY29uc3RhbnR7U1NMdjJfTUVUSE9EfSwgXGNvbnN0YW50e1NTTHYzX01FVEhPRH0sCitcY29uc3RhbnR7U1NMdjIzX01FVEhPRH0gb3IgXGNvbnN0YW50e1RMU3YxX01FVEhPRH0uCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZGF0YWRlc2N9e0Nvbm5lY3Rpb25UeXBlfQorQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBDb25uZWN0aW9uIG9iamVjdCB0eXBlLgorXGVuZHtkYXRhZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtDb25uZWN0aW9ufXtjb250ZXh0LCBzb2NrZXR9CitGYWN0b3J5IGZ1Y25jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQ29ubmVjdGlvbiBvYmplY3QgZ2l2ZW4gYW4gU1NMIGNvbnRleHQgYW5kCithIHNvY2tldCBcZm9vdG5vdGV7QWN0dWFsbHksIGFsbCB0aGF0IGlzIHJlcXVpcmVkIGlzIGFuIG9iamVjdCB0aGF0CitcZW1waHtiZWhhdmVzfSBsaWtlIGEgc29ja2V0LCB5b3UgY291bGQgZXZlbiB1c2UgZmlsZXMsIGV2ZW4gdGhvdWdoIGl0J2QgYmUKK3RyaWNreSB0byBnZXQgdGhlIGhhbmRzaGFrZXMgcmlnaHQhfSBvYmplY3QuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZXhjZGVzY317RXJyb3J9CitUaGlzIGV4Y2VwdGlvbiBpcyB1c2VkIGFzIGEgYmFzZSBjbGFzcyBmb3IgdGhlIG90aGVyIFNTTC1yZWxhdGVkCitleGNlcHRpb25zLCBidXQgbWF5IGFsc28gYmUgcmFpc2VkIGRpcmVjdGx5LgorCitXaGVuZXZlciB0aGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgZGlyZWN0bHksIGl0IGhhcyBhIGxpc3Qgb2YgZXJyb3IgbWVzc2FnZXMKK2Zyb20gdGhlIE9wZW5TU0wgZXJyb3IgcXVldWUsIHdoZXJlIGVhY2ggaXRlbSBpcyBhIHR1cGxlIFxjb2RleyhcdmFye2xpYn0sCitcdmFye2Z1bmN0aW9ufSwgXHZhcntyZWFzb259KX0uIEhlcmUgXHZhcntsaWJ9LCBcdmFye2Z1bmN0aW9ufSBhbmQgXHZhcntyZWFzb259CithcmUgYWxsIHN0cmluZ3MsIGRlc2NyaWJpbmcgd2hlcmUgYW5kIHdoYXQgdGhlIHByb2JsZW0gaXMuIFNlZSBcbWFucGFnZXtlcnJ9ezN9Citmb3IgbW9yZSBpbmZvcm1hdGlvbi4KK1xlbmR7ZXhjZGVzY30KKworXGJlZ2lue2V4Y2Rlc2N9e1plcm9SZXR1cm5FcnJvcn0KK1RoaXMgZXhjZXB0aW9uIG1hdGNoZXMgdGhlIGVycm9yIHJldHVybiBjb2RlIFxjb2Rle1NTTF9FUlJPUl9aRVJPX1JFVFVSTn0sIGFuZAoraXMgcmFpc2VkIHdoZW4gdGhlIFNTTCBDb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZC4gSW4gU1NMIDMuMCBhbmQgVExTIDEuMCwgdGhpcworb25seSBvY2N1cnMgaWYgYSBjbG9zdXJlIGFsZXJ0IGhhcyBvY2N1cnJlZCBpbiB0aGUgcHJvdG9jb2wsIGkuZS4gdGhlCitjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZCBjbGVhbmx5LiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseQorbWVhbiB0aGF0IHRoZSB0cmFuc3BvcnQgbGF5ZXIgKGUuZy4gYSBzb2NrZXQpIGhhcyBiZWVuIGNsb3NlZC4KKworSXQgbWF5IHNlZW0gYSBsaXR0bGUgc3RyYW5nZSB0aGF0IHRoaXMgaXMgYW4gZXhjZXB0aW9uLCBidXQgaXQgZG9lcyBtYXRjaCBhbgorXGNvZGV7U1NMX0VSUk9SfSBjb2RlLCBhbmQgaXMgdmVyeSBjb252ZW5pZW50LgorXGVuZHtleGNkZXNjfQorCitcYmVnaW57ZXhjZGVzY317V2FudFJlYWRFcnJvcn0KK1RoZSBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZTsgdGhlIHNhbWUgSS9PIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGFnYWluCitsYXRlciwgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMuIEFueSBJL08gbWV0aG9kIGNhbiBsZWFkIHRvIHRoaXMgc2luY2UgbmV3CitoYW5kc2hha2VzIGNhbiBvY2N1ciBhdCBhbnkgdGltZS4KK1xlbmR7ZXhjZGVzY30KKworXGJlZ2lue2V4Y2Rlc2N9e1dhbnRXcml0ZUVycm9yfQorU2VlIFxleGNlcHRpb257V2FudFJlYWRFcnJvcn0uCitcZW5ke2V4Y2Rlc2N9CisKK1xiZWdpbntleGNkZXNjfXtXYW50WDUwOUxvb2t1cEVycm9yfQorVGhlIG9wZXJhdGlvbiBkaWQgbm90IGNvbXBsZXRlIGJlY2F1c2UgYW4gYXBwbGljYXRpb24gY2FsbGJhY2sgaGFzIGFza2VkIHRvIGJlCitjYWxsZWQgYWdhaW4uIFRoZSBJL08gbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgYWdhaW4gbGF0ZXIsIHdpdGggdGhlIHNhbWUKK2FyZ3VtZW50cy4gTm90ZTogVGhpcyB3b24ndCBvY2N1ciBpbiB0aGlzIHZlcnNpb24sIGFzIHRoZXJlIGFyZSBubyBzdWNoCitjYWxsYmFja3MgaW4gdGhpcyB2ZXJzaW9uLgorXGVuZHtleGNkZXNjfQorCitcYmVnaW57ZXhjZGVzY317U3lzQ2FsbEVycm9yfQorVGhlIFxleGNlcHRpb257U3lzQ2FsbEVycm9yfSBvY2N1cnMgd2hlbiB0aGVyZSdzIGFuIEkvTyBlcnJvciBhbmQgT3BlblNTTCdzCitlcnJvciBxdWV1ZSBkb2VzIG5vdCBjb250YWluIGFueSBpbmZvcm1hdGlvbi4gVGhpcyBjYW4gbWVhbiB0d28gdGhpbmdzOiBBbgorZXJyb3IgaW4gdGhlIHRyYW5zcG9ydCBwcm90b2NvbCwgb3IgYW4gZW5kIG9mIGZpbGUgdGhhdCB2aW9sYXRlcyB0aGUgcHJvdG9jb2wuCitUaGUgcGFyYW1ldGVyIHRvIHRoZSBleGNlcHRpb24gaXMgYWx3YXlzIGEgcGFpciBcY29kZXsoXHZhcntlcnJudW19LAorXHZhcntlcnJzdHJ9KX0uCitcZW5ke2V4Y2Rlc2N9CisKKworXHN1YnN1YnNlY3Rpb257Q29udGV4dCBvYmplY3RzIFxsYWJlbHtvcGVuc3NsLWNvbnRleHR9fQorCitDb250ZXh0IG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXtjaGVja19wcml2YXRla2V5fXt9CitDaGVjayBpZiB0aGUgcHJpdmF0ZSBrZXkgKGxvYWRlZCB3aXRoIFxtZXRob2R7dXNlX3ByaXZhdGVrZXlcb3B0aW9uYWx7X2ZpbGV9fSkKK21hdGNoZXMgdGhlIGNlcnRpZmljYXRlIChsb2FkZWQgd2l0aCBcbWV0aG9ke3VzZV9jZXJ0aWZpY2F0ZVxvcHRpb25hbHtfZmlsZX19KS4KK1JldHVybnMgdHJ1ZSBpZiB0aGV5IG1hdGNoLCBmYWxzZSBvdGhlcndpc2UuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXtnZXRfYXBwX2RhdGF9e30KK1JldHJpZXZlIGFwcGxpY2F0aW9uIGRhdGEgYXMgc2V0IGJ5IFxtZXRob2R7c2V0X2FwcF9kYXRhfS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde2dldF9jZXJ0X3N0b3JlfXt9CitSZXRyaWV2ZSB0aGUgY2VydGlmaWNhdGUgc3RvcmUgKGEgWDUwOVN0b3JlIG9iamVjdCkgdGhhdCB0aGUgY29udGV4dCB1c2VzLgorVGhpcyBjYW4gYmUgdXNlZCB0byBhZGQgInRydXN0ZWQiIGNlcnRpZmljYXRlcyB3aXRob3V0IHVzaW5nIHRoZS4KK1xtZXRob2R7bG9hZF92ZXJpZnlfbG9jYXRpb25zKCl9IG1ldGhvZC4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde2dldF90aW1lb3V0fXt9CitSZXRyaWV2ZSBzZXNzaW9uIHRpbWVvdXQsIGFzIHNldCBieSBcbWV0aG9ke3NldF90aW1lb3V0fS4gVGhlIGRlZmF1bHQgaXMgMzAwCitzZWNvbmRzLgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17Z2V0X3ZlcmlmeV9kZXB0aH17fQorUmV0cmlldmUgdGhlIENvbnRleHQgb2JqZWN0J3MgdmVyaWZ5IGRlcHRoLCBhcyBzZXQgYnkKK1xtZXRob2R7c2V0X3ZlcmlmeV9kZXB0aH0uCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXtnZXRfdmVyaWZ5X21vZGV9e30KK1JldHJpZXZlIHRoZSBDb250ZXh0IG9iamVjdCdzIHZlcmlmeSBtb2RlLCBhcyBzZXQgYnkgXG1ldGhvZHtzZXRfdmVyaWZ5X21vZGV9LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17bG9hZF9jbGllbnRfY2F9e3BlbWZpbGV9CitSZWFkIGEgZmlsZSB3aXRoIFBFTS1mb3JtYXR0ZWQgY2VydGlmaWNhdGVzIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBjbGllbnQKK3doZW4gcmVxdWVzdGluZyBhIGNsaWVudCBjZXJ0aWZpY2F0ZS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde2xvYWRfdmVyaWZ5X2xvY2F0aW9uc317cGVtZmlsZX0KK1NwZWNpZnkgd2hlcmUgQ0EgY2VydGlmaWNhdGVzIGZvciB2ZXJpZmljYXRpb24gcHVycG9zZXMgYXJlIGxvY2F0ZWQuIFRoZXNlIGFyZQordHJ1c3RlZCBjZXJ0aWZpY2F0ZXMuIE5vdGUgdGhhdCB0aGUgY2VydGlmaWNhdGVzIGhhdmUgdG8gYmUgaW4gUEVNIGZvcm1hdC4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde2xvYWRfdG1wX2RofXtkaGZpbGV9CitMb2FkIHBhcmFtZXRlcnMgZm9yIEVwaGVtZXJhbCBEaWZmaWUtSGVsbG1hbiBmcm9tIFx2YXJ7ZGhmaWxlfS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde3NldF9hcHBfZGF0YX17ZGF0YX0KK0Fzc29jaWF0ZSBcdmFye2RhdGF9IHdpdGggdGhpcyBDb250ZXh0IG9iamVjdC4gXHZhcntkYXRhfSBjYW4gYmUgcmV0cmlldmVkCitsYXRlciB1c2luZyB0aGUgXG1ldGhvZHtnZXRfYXBwX2RhdGF9IG1ldGhvZC4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde3NldF9jaXBoZXJfbGlzdH17Y2lwaGVyc30KK1NldCB0aGUgbGlzdCBvZiBjaXBoZXJzIHRvIGJlIHVzZWQgaW4gdGhpcyBjb250ZXh0LiBTZWUgdGhlIE9wZW5TU0wgbWFudWFsIGZvcgorbW9yZSBpbmZvcm1hdGlvbiAoZS5nLiBjaXBoZXJzKDEpKQorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17c2V0X2luZm9fY2FsbGJhY2t9e2NhbGxiYWNrfQorU2V0IHRoZSBpbmZvcm1hdGlvbiBjYWxsYmFjayB0byBcdmFye2NhbGxiYWNrfS4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZAorZnJvbSB0aW1lIHRvIHRpbWUgZHVyaW5nIFNTTCBoYW5kc2hha2VzLgorCitcdmFye2NhbGxiYWNrfSBzaG91bGQgdGFrZSB0aHJlZSBhcmd1bWVudHM6IGEgQ29ubmVjdGlvbiBvYmplY3QgYW5kIHR3bworaW50ZWdlcnMuIFRoZSBmaXJzdCBpbnRlZ2VyIHNwZWNpZmllcyB3aGVyZSBpbiB0aGUgU1NMIGhhbmRzaGFrZSB0aGUgZnVuY3Rpb24KK3dhcyBjYWxsZWQsIGFuZCB0aGUgb3RoZXIgdGhlIHJldHVybiBjb2RlIGZyb20gYSAocG9zc2libHkgZmFpbGVkKSBpbnRlcm5hbAorZnVuY3Rpb24gY2FsbC4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde3NldF9vcHRpb25zfXtvcHRpb25zfQorQWRkIFNTTCBvcHRpb25zLiBPcHRpb25zIHlvdSBoYXZlIHNldCBiZWZvcmUgYXJlIG5vdCBjbGVhcmVkIQorCitUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCB3aXRoIHRoZSBcY29uc3RhbnR7T1BfKn0gY29uc3RhbnRzLgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17c2V0X3Bhc3N3ZF9jYn17Y2FsbGJhY2tcb3B0aW9uYWx7LCB1c2VyZGF0YX19CitTZXQgdGhlIHBhc3NwaHJhc2UgY2FsbGJhY2sgdG8gXHZhcntjYWxsYmFja30uIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQKK3doZW4gYSBwcml2YXRlIGtleSB3aXRoIGEgcGFzc3BocmFzZSBpcyBsb2FkZWQuCisKK1x2YXJ7Y2FsbGJhY2t9IHNob3VsZCB0YWtlIGEgYm9vbGVhbiBhcmd1bWVudCBcdmFye3JlcGVhdH0gYW5kIGFuIGFyYml0cmFyeQorYXJndW1lbnQgXHZhcntkYXRhfSBhbmQgcmV0dXJuIHRoZSBwYXNzcGhyYXNlIGVudGVyZWQgYnkgdGhlIHVzZXIuIElmCitcdmFye3JlcGVhdH0gaXMgdHJ1ZSB0aGVuIFx2YXJ7Y2FsbGJhY2t9IHNob3VsZCBhc2sgZm9yIHRoZSBwYXNzcGhyYXNlIHR3aWNlCithbmQgbWFrZSBzdXJlIHRoYXQgdGhlIHR3byBlbnRyaWVzIGFyZSBlcXVhbC4gVGhlIFx2YXJ7ZGF0YX0gYXJndW1lbnQgaXMgdGhlCitcdmFye3VzZXJkYXRhfSB2YXJpYWJsZSBwYXNzZWQgdG8gdGhlIFxtZXRob2R7c2V0X3Bhc3N3ZF9jYn0gbWV0aG9kLiBJZiBhbgorZXJyb3Igb2NjdXJzLCBcdmFye2NhbGxiYWNrfSBzaG91bGQgcmV0dXJuIGEgZmFsc2UgdmFsdWUgKGUuZy4gYW4gZW1wdHkKK3N0cmluZykuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXtzZXRfc2Vzc2lvbl9pZH17bmFtZX0KK1NldCB0aGUgY29udGV4dCBcdmFye25hbWV9IHdpdGhpbiB3aGljaCBhIHNlc3Npb24gY2FuIGJlIHJldXNlZCBmb3IgdGhpcworQ29udGV4dCBvYmplY3QuIFRoaXMgaXMgbmVlZGVkIHdoZW4gZG9pbmcgc2Vzc2lvbiByZXN1bXB0aW9uLCBiZWNhdXNlIHRoZXJlIGlzCitubyB3YXkgZm9yIGEgc3RvcmVkIHNlc3Npb24gdG8ga25vdyB3aGljaCBDb250ZXh0IG9iamVjdCBpdCBpcyBhc3NvY2lhdGVkIHdpdGguCitcdmFye25hbWV9IG1heSBiZSBhbnkgYmluYXJ5IGRhdGEuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXtzZXRfdGltZW91dH17dGltZW91dH0KK1NldCB0aGUgdGltZW91dCBmb3IgbmV3bHkgY3JlYXRlZCBzZXNzaW9ucyBmb3IgdGhpcyBDb250ZXh0IG9iamVjdCB0bworXHZhcnt0aW1lb3V0fS4gXHZhcnt0aW1lb3V0fSBtdXN0IGJlIGdpdmVuIGluICh3aG9sZSkgc2Vjb25kcy4gVGhlIGRlZmF1bHQKK3ZhbHVlIGlzIDMwMCBzZWNvbmRzLiBTZWUgdGhlIE9wZW5TU0wgbWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uIChlLmcuCitTU0xfQ1RYX3NldF90aW1lb3V0KDMpKS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde3NldF92ZXJpZnl9e21vZGUsIGNhbGxiYWNrfQorU2V0IHRoZSB2ZXJpZmljYXRpb24gZmxhZ3MgZm9yIHRoaXMgQ29udGV4dCBvYmplY3QgdG8gXHZhcnttb2RlfSBhbmQgc3BlY2lmeQordGhhdCBcdmFye2NhbGxiYWNrfSBzaG91bGQgYmUgdXNlZCBmb3IgdmVyaWZpY2F0aW9uIGNhbGxiYWNrcy4gXHZhcnttb2RlfQorc2hvdWxkIGJlIG9uZSBvZiBcY29uc3RhbnR7VkVSSUZZX05PTkV9IGFuZCBcY29uc3RhbnR7VkVSSUZZX1BFRVJ9LiBJZgorXGNvbnN0YW50e1ZFUklGWV9QRUVSfSBpcyB1c2VkLCBcdmFye21vZGV9IGNhbiBiZSBPUjplZCB3aXRoCitcY29uc3RhbnR7VkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUfSBhbmQgXGNvbnN0YW50e1ZFUklGWV9DTElFTlRfT05DRX0gdG8KK2Z1cnRoZXIgY29udHJvbCB0aGUgYmVoYXZpb3VyLgorCitcdmFye2NhbGxiYWNrfSBzaG91bGQgdGFrZSBmaXZlIGFyZ3VtZW50czogQSBDb25uZWN0aW9uIG9iamVjdCwgYW4gWDUwOSBvYmplY3QsCithbmQgdGhyZWUgaW50ZWdlciB2YXJpYWJsZXMsIHdoaWNoIGFyZSBpbiB0dXJuIHBvdGVudGlhbCBlcnJvciBudW1iZXIsIGVycm9yCitkZXB0aCBhbmQgcmV0dXJuIGNvZGUuIFx2YXJ7Y2FsbGJhY2t9IHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB2ZXJpZmljYXRpb24gcGFzc2VzCithbmQgZmFsc2Ugb3RoZXJ3aXNlLgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17c2V0X3ZlcmlmeV9kZXB0aH17ZGVwdGh9CitTZXQgdGhlIG1heGltdW0gZGVwdGggZm9yIHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiB2ZXJpZmljYXRpb24gdGhhdCBzaGFsbCBiZQorYWxsb3dlZCBmb3IgdGhpcyBDb250ZXh0IG9iamVjdC4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde3VzZV9jZXJ0aWZpY2F0ZX17Y2VydH0KK1VzZSB0aGUgY2VydGlmaWNhdGUgXHZhcntjZXJ0fSB3aGljaCBoYXMgdG8gYmUgYSBYNTA5IG9iamVjdC4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0NvbnRleHRde3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlfXtmaWxlfQorTG9hZCBhIGNlcnRpZmljYXRlIGNoYWluIGZyb20gXHZhcntmaWxlfSB3aGljaCBtdXN0IGJlIFBFTSBlbmNvZGVkLgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29udGV4dF17dXNlX3ByaXZhdGVrZXl9e3BrZXl9CitVc2UgdGhlIHByaXZhdGUga2V5IFx2YXJ7cGtleX0gd2hpY2ggaGFzIHRvIGJlIGEgUEtleSBvYmplY3QuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXt1c2VfY2VydGlmaWNhdGVfZmlsZX17ZmlsZVxvcHRpb25hbHssIGZvcm1hdH19CitMb2FkIHRoZSBmaXJzdCBjZXJ0aWZpY2F0ZSBmb3VuZCBpbiBcdmFye2ZpbGV9LiBUaGUgY2VydGlmaWNhdGUgbXVzdCBiZSBpbiB0aGUKK2Zvcm1hdCBzcGVjaWZpZWQgYnkgXHZhcntmb3JtYXR9LCB3aGljaCBpcyBlaXRoZXIgXGNvbnN0YW50e0ZJTEVUWVBFX1BFTX0gb3IKK1xjb25zdGFudHtGSUxFVFlQRV9BU04xfS4gVGhlIGRlZmF1bHQgaXMgXGNvbnN0YW50e0ZJTEVUWVBFX1BFTX0uCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb250ZXh0XXt1c2VfcHJpdmF0ZWtleV9maWxlfXtmaWxlXG9wdGlvbmFseywgZm9ybWF0fX0KK0xvYWQgdGhlIGZpcnN0IHByaXZhdGUga2V5IGZvdW5kIGluIFx2YXJ7ZmlsZX0uIFRoZSBwcml2YXRlIGtleSBtdXN0IGJlIGluIHRoZQorZm9ybWF0IHNwZWNpZmllZCBieSBcdmFye2Zvcm1hdH0sIHdoaWNoIGlzIGVpdGhlciBcY29uc3RhbnR7RklMRVRZUEVfUEVNfSBvcgorXGNvbnN0YW50e0ZJTEVUWVBFX0FTTjF9LiBUaGUgZGVmYXVsdCBpcyBcY29uc3RhbnR7RklMRVRZUEVfUEVNfS4KK1xlbmR7bWV0aG9kZGVzY30KKworCitcc3Vic3Vic2VjdGlvbntDb25uZWN0aW9uIG9iamVjdHMgXGxhYmVse29wZW5zc2wtY29ubmVjdGlvbn19CisKK0Nvbm5lY3Rpb24gb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKworXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de2FjY2VwdH17fQorQ2FsbCB0aGUgXG1ldGhvZHthY2NlcHR9IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQgYW5kIHNldCB1cCBTU0wgb24gdGhlCityZXR1cm5lZCBzb2NrZXQsIHVzaW5nIHRoZSBDb250ZXh0IG9iamVjdCBzdXBwbGllZCB0byB0aGlzIENvbm5lY3Rpb24gb2JqZWN0IGF0CitjcmVhdGlvbi4gUmV0dXJucyBhIHBhaXIgXGNvZGV7KFx2YXJ7Y29ubn0sIFx2YXJ7YWRkcmVzc30pfS4gd2hlcmUgXHZhcntjb25ufQoraXMgdGhlIG5ldyBDb25uZWN0aW9uIG9iamVjdCBjcmVhdGVkLCBhbmQgXHZhcnthZGRyZXNzfSBpcyBhcyByZXR1cm5lZCBieSB0aGUKK3NvY2tldCdzIFxtZXRob2R7YWNjZXB0fS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de2JpbmR9e2FkZHJlc3N9CitDYWxsIHRoZSBcbWV0aG9ke2JpbmR9IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtjbG9zZX17fQorQ2FsbCB0aGUgXG1ldGhvZHtjbG9zZX0gbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4gTm90ZTogSWYgeW91IHdhbnQKK2NvcnJlY3QgU1NMIGNsb3N1cmUsIHlvdSBuZWVkIHRvIGNhbGwgdGhlIFxtZXRob2R7c2h1dGRvd259IG1ldGhvZCBmaXJzdC4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de2Nvbm5lY3R9e2FkZHJlc3N9CitDYWxsIHRoZSBcbWV0aG9ke2Nvbm5lY3R9IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQgYW5kIHNldCB1cCBTU0wgb24gdGhlCitzb2NrZXQsIHVzaW5nIHRoZSBDb250ZXh0IG9iamVjdCBzdXBwbGllZCB0byB0aGlzIENvbm5lY3Rpb24gb2JqZWN0IGF0CitjcmVhdGlvbi4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de2Nvbm5lY3RfZXh9e2FkZHJlc3N9CitDYWxsIHRoZSBcbWV0aG9ke2Nvbm5lY3RfZXh9IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQgYW5kIHNldCB1cCBTU0wgb24KK3RoZSBzb2NrZXQsIHVzaW5nIHRoZSBDb250ZXh0IG9iamVjdCBzdXBwbGllZCB0byB0aGlzIENvbm5lY3Rpb24gb2JqZWN0IGF0CitjcmVhdGlvbi4gTm90ZSB0aGF0IGlmIHRoZSBcbWV0aG9ke2Nvbm5lY3RfZXh9IG1ldGhvZCBvZiB0aGUgc29ja2V0IGRvZXNuJ3QKK3JldHVybiAwLCBTU0wgd29uJ3QgYmUgaW5pdGlhbGl6ZWQuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtkb19oYW5kc2hha2V9e30KK1BlcmZvcm0gYW4gU1NMIGhhbmRzaGFrZSAodXN1YWxseSBjYWxsZWQgYWZ0ZXIgXG1ldGhvZHtyZW5lZ290aWF0ZX0gb3Igb25lIG9mCitcbWV0aG9ke3NldF9hY2NlcHRfc3RhdGV9IG9yIFxtZXRob2R7c2V0X2FjY2VwdF9zdGF0ZX0pLiBUaGlzIGNhbiByYWlzZSB0aGUKK3NhbWUgZXhjZXB0aW9ucyBhcyBcbWV0aG9ke3NlbmR9IGFuZCBcbWV0aG9ke3JlY3Z9LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17ZmlsZW5vfXt9CitSZXRyaWV2ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG51bWJlciBmb3IgdGhlIHVuZGVybHlpbmcgc29ja2V0LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17bGlzdGVufXtiYWNrbG9nfQorQ2FsbCB0aGUgXG1ldGhvZHtsaXN0ZW59IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtnZXRfYXBwX2RhdGF9e30KK1JldHJpZXZlIGFwcGxpY2F0aW9uIGRhdGEgYXMgc2V0IGJ5IFxtZXRob2R7c2V0X2FwcF9kYXRhfS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de2dldF9jaXBoZXJfbGlzdH17fQorUmV0cmlldmUgdGhlIGxpc3Qgb2YgY2lwaGVycyB1c2VkIGJ5IHRoZSBDb25uZWN0aW9uIG9iamVjdC4gV0FSTklORzogVGhpcyBBUEkKK2hhcyBjaGFuZ2VkLiBJdCB1c2VkIHRvIHRha2UgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIGFuZCBqdXN0IHJldHVybiBhIHN0cmluZywKK2J1dCBub3QgaXQgcmV0dXJucyB0aGUgZW50aXJlIGxpc3QgaW4gb25lIGdvLgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17Z2V0X2NvbnRleHR9e30KK1JldHJpZXZlIHRoZSBDb250ZXh0IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBDb25uZWN0aW9uLgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17Z2V0X3BlZXJfY2VydGlmaWNhdGV9e30KK1JldHJpZXZlIHRoZSBvdGhlciBzaWRlJ3MgY2VydGlmaWNhdGUgKGlmIGFueSkKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de2dldHBlZXJuYW1lfXt9CitDYWxsIHRoZSBcbWV0aG9ke2dldHBlZXJuYW1lfSBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17Z2V0c29ja25hbWV9e30KK0NhbGwgdGhlIFxtZXRob2R7Z2V0c29ja25hbWV9IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtnZXRzb2Nrb3B0fXtsZXZlbCwgb3B0bmFtZVxvcHRpb25hbHssIGJ1Zmxlbn19CitDYWxsIHRoZSBcbWV0aG9ke2dldHNvY2tvcHR9IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtwZW5kaW5nfXt9CitSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIHNhZmVseSByZWFkIGZyb20gdGhlIFNTTCBidWZmZXIuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtyZWN2fXtidWZzaXplfQorUmVjZWl2ZSBkYXRhIGZyb20gdGhlIENvbm5lY3Rpb24uIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZQorZGF0YSByZWNlaXZlZC4gVGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQgYXQgb25jZSwgaXMgc3BlY2lmaWVkCitieSBcdmFye2J1ZnNpemV9LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17cmVuZWdvdGlhdGV9e30KK1JlbmVnb3RpYXRlIHRoZSBTU0wgc2Vzc2lvbi4gQ2FsbCB0aGlzIGlmIHlvdSB3aXNoIHRvIGNoYW5nZSBjaXBoZXIgc3VpdGVzIG9yCithbnl0aGluZyBsaWtlIHRoYXQuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtzZW5kfXtzdHJpbmd9CitTZW5kIHRoZSBcdmFye3N0cmluZ30gZGF0YSB0byB0aGUgQ29ubmVjdGlvbi4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de3NlbmRhbGx9e3N0cmluZ30KK1NlbmQgYWxsIG9mIHRoZSBcdmFye3N0cmluZ30gZGF0YSB0byB0aGUgQ29ubmVjdGlvbi4gVGhpcyBjYWxscyBcbWV0aG9ke3NlbmR9CityZXBlYXRlZGx5IHVudGlsIGFsbCBkYXRhIGlzIHNlbnQuIElmIGFuIGVycm9yIG9jY3VycywgaXQncyBpbXBvc3NpYmxlIHRvIHRlbGwKK2hvdyBtdWNoIGRhdGEgaGFzIGJlZW4gc2VudC4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9W0Nvbm5lY3Rpb25de3NldF9hY2NlcHRfc3RhdGV9e30KK1NldCB0aGUgY29ubmVjdGlvbiB0byB3b3JrIGluIHNlcnZlciBtb2RlLiBUaGUgaGFuZHNoYWtlIHdpbGwgYmUgaGFuZGxlZAorYXV0b21hdGljYWxseSBieSByZWFkL3dyaXRlLgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17c2V0X2FwcF9kYXRhfXtkYXRhfQorQXNzb2NpYXRlIFx2YXJ7ZGF0YX0gd2l0aCB0aGlzIENvbm5lY3Rpb24gb2JqZWN0LiBcdmFye2RhdGF9IGNhbiBiZSByZXRyaWV2ZWQKK2xhdGVyIHVzaW5nIHRoZSBcbWV0aG9ke2dldF9hcHBfZGF0YX0gbWV0aG9kLgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17c2V0X2Nvbm5lY3Rfc3RhdGV9e30KK1NldCB0aGUgY29ubmVjdGlvbiB0byB3b3JrIGluIGNsaWVudCBtb2RlLiBUaGUgaGFuZHNoYWtlIHdpbGwgYmUgaGFuZGxlZAorYXV0b21hdGljYWxseSBieSByZWFkL3dyaXRlLgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17c2V0YmxvY2tpbmd9e2ZsYWd9CitDYWxsIHRoZSBcbWV0aG9ke3NldGJsb2NraW5nfSBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17c2V0c29ja29wdH17bGV2ZWwsIG9wdG5hbWUsIHZhbHVlfQorQ2FsbCB0aGUgXG1ldGhvZHtzZXRzb2Nrb3B0fSBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17c2h1dGRvd259e30KK1NlbmQgdGhlIHNodXRkb3duIG1lc3NhZ2UgdG8gdGhlIENvbm5lY3Rpb24uIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2h1dGRvd24KK21lc3NhZ2UgZXhjaGFuZ2UgaXMgY29tcGxldGVkIGFuZCBmYWxzZSBvdGhlcndpc2UgKGluIHdoaWNoIGNhc2UgeW91IGNhbGwKK1xtZXRob2R7cmVjdigpfSBvciBcbWV0aG9ke3NlbmQoKX0gd2hlbiB0aGUgY29ubmVjdGlvbiBiZWNvbWVzCityZWFkYWJsZS93cml0ZWFibGUuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXtzb2NrX3NodXRkb3dufXtob3d9CitDYWxsIHRoZSBcbWV0aG9ke3NodXRkb3dufSBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY31bQ29ubmVjdGlvbl17c3RhdGVfc3RyaW5nfXt9CitSZXRyaWV2ZSBhIHZlcmJvc2Ugc3RyaW5nIGRldGFpbGluZyB0aGUgc3RhdGUgb2YgdGhlIENvbm5lY3Rpb24uCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXt3YW50X3JlYWR9e30KK0NoZWNrcyBpZiBtb3JlIGRhdGEgaGFzIHRvIGJlIHJlYWQgZnJvbSB0aGUgdHJhbnNwb3J0IGxheWVyIHRvIGNvbXBsZXRlIGFuCitvcGVyYXRpb24uCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtDb25uZWN0aW9uXXt3YW50X3dyaXRlfXt9CitDaGVja3MgaWYgdGhlcmUgaXMgZGF0YSB0byB3cml0ZSB0byB0aGUgdHJhbnNwb3J0IGxheWVyIHRvIGNvbXBsZXRlIGFuCitvcGVyYXRpb24uCitcZW5ke21ldGhvZGRlc2N9CisKKworCitcc2VjdGlvbntJbnRlcm5hbHMgXGxhYmVse2ludGVybmFsc319CisKK1dlIHJhbiBpbnRvIHRocmVlIG1haW4gcHJvYmxlbXMgZGV2ZWxvcGluZyB0aGlzOiBFeGNlcHRpb25zLCBjYWxsYmFja3MgYW5kCithY2Nlc3Npbmcgc29ja2V0IG1ldGhvZHMuIFRoaXMgaXMgd2hhdCB0aGlzIGNoYXB0ZXIgaXMgYWJvdXQuCisKK1xzdWJzZWN0aW9ue0V4Y2VwdGlvbnMgXGxhYmVse2V4Y2VwdGlvbnN9fQorCitXZSByZWFsaXplZCBlYXJseSB0aGF0IG1vc3Qgb2YgdGhlIGV4Y2VwdGlvbnMgd291bGQgYmUgcmFpc2VkIGJ5IHRoZSBJL08KK2Z1bmN0aW9ucyBvZiBPcGVuU1NMLCBzbyBpdCBmZWx0IG5hdHVyYWwgdG8gbWltaWMgT3BlblNTTCdzIGVycm9yIGNvZGUgc3lzdGVtLAordHJhbnNsYXRpbmcgdGhlbSBpbnRvIFB5dGhvbiBleGNlcHRpb25zLiBUaGlzIG5hdHVyYWxseSBnaXZlcyB1cyB0aGUgZXhjZXB0aW9ucworXGV4Y2VwdGlvbntTU0wuWmVyb1JldHVybkVycm9yfSwgXGV4Y2VwdGlvbntTU0wuV2FudFJlYWRFcnJvcn0sCitcZXhjZXB0aW9ue1NTTC5XYW50V3JpdGVFcnJvcn0sIFxleGNlcHRpb257U1NMLldhbnRYNTA5TG9va3VwRXJyb3J9IGFuZAorXGV4Y2VwdGlvbntTU0wuU3lzQ2FsbEVycm9yfS4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcywgc2VlIHNlY3Rpb24gXHJlZntvcGVuc3NsLXNzbH0uCisKKworXHN1YnNlY3Rpb257Q2FsbGJhY2tzIFxsYWJlbHtjYWxsYmFja3N9fQorCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgcHJvYmxlbXMgd2l0aCBjYWxsYmFja3MuIEZpcnN0IG9mIGFsbCwgT3BlblNTTCBpcyB3cml0dGVuCithcyBhIEMgbGlicmFyeSwgaXQncyBub3QgbWVhbnQgdG8gaGF2ZSBQeXRob24gY2FsbGJhY2tzLCBzbyBhIHdheSBhcm91bmQgdGhhdAoraXMgbmVlZGVkLiBBbm90aGVyIHByb2JsZW0gaXMgdGhyZWFkIHN1cHBvcnQuIEEgbG90IG9mIHRoZSBPcGVuU1NMIEkvTworZnVuY3Rpb25zIGNhbiBibG9jayBpZiB0aGUgc29ja2V0IGlzIGluIGJsb2NraW5nIG1vZGUsIGFuZCB0aGVuIHlvdSB3YW50IG90aGVyCitQeXRob24gdGhyZWFkcyB0byBiZSBhYmxlIHRvIGRvIG90aGVyIHRoaW5ncy4gVGhlIHJlYWwgdHJvdWJsZSBpcyBpZiB5b3UndmUKK3JlbGVhc2VkIHRoZSB0aHJlYWQgbG9jayB0byBkbyBhIHBvdGVudGlhbGx5IGJsb2NraW5nIG9wZXJhdGlvbiwgYW5kIHRoZQorb3BlcmF0aW9uIGNhbGxzIGEgY2FsbGJhY2suIFRoZW4gd2UgbXVzdCB0YWtlIHRoZSB0aHJlYWQgbG9jayBiYWNrXGZvb3Rub3Rle0knbQorbm90IHN1cmUgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LCBidXQgb3RoZXJ3aXNlIEkgZ2V0IGEgc2VnbWVudGF0aW9uIHZpb2xhdGlvbiBvbgorXGNmdW5jdGlvbntQeUV2YWxfQ2FsbE9iamVjdH19LgorCitUaGVyZSBhcmUgdHdvIHNvbHV0aW9ucyB0byB0aGUgZmlyc3QgcHJvYmxlbSwgYm90aCBvZiB3aGljaCBhcmUgbmVjZXNzYXJ5LiBUaGUKK2ZpcnN0IHNvbHV0aW9uIHRvIHVzZSBpcyBpZiB0aGUgQyBjYWxsYmFjayBhbGxvd3MgJyd1c2VyZGF0YScnIHRvIGJlIHBhc3NlZCB0bworaXQgKGFuIGFyYml0cmFyeSBwb2ludGVyIG5vcm1hbGx5KS4gVGhpcyBpcyBncmVhdCEgV2UgY2FuIHNldCBvdXIgUHl0aG9uCitmdW5jdGlvbiBvYmplY3QgYXMgdGhlIHJlYWwgdXNlcmRhdGEgYW5kIGVtdWxhdGUgdXNlcmRhdGEgZm9yIHRoZSBQeXRob24KK2Z1bmN0aW9uIGluIGFub3RoZXIgd2F5LiBUaGUgb3RoZXIgc29sdXRpb24gY2FuIGJlIHVzZWQgaWYgYW4gb2JqZWN0IHdpdGggYW4KKycnYXBwX2RhdGEnJyBzeXN0ZW0gYWx3YXlzIGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suIEZvciBleGFtcGxlLCB0aGUgU1NMCitvYmplY3QgaW4gT3BlblNTTCBoYXMgYXBwX2RhdGEgZnVuY3Rpb25zIGFuZCBpbiBlLmcuIHRoZSB2ZXJpZmljYXRpb24KK2NhbGxiYWNrcywgeW91IGNhbiByZXRyaWV2ZSB0aGUgcmVsYXRlZCBTU0wgb2JqZWN0LiBXaGF0IHdlIGRvIGlzIHRvIHNldCBvdXIKK3dyYXBwZXIgXGNsYXNze0Nvbm5lY3Rpb259IG9iamVjdCBhcyBhcHBfZGF0YSBmb3IgdGhlIFNTTCBvYmplY3QsIGFuZCB3ZSBjYW4KK2Vhc2lseSBmaW5kIHRoZSBQeXRob24gY2FsbGJhY2suCisKK1RoZSBvdGhlciBwcm9ibGVtIGlzIGFsc28gcGFydGlhbGx5IHNvbHZlZCBieSBhcHBfZGF0YS4gU2luY2Ugd2UncmUgYXNzb2NpYXRpbmcKK291ciB3cmFwcGVyIG9iamVjdHMgd2l0aCB0aGUgJydyZWFsJycgb2JqZWN0cywgd2UgY2FuIGVhc2lseSBhY2Nlc3MgZGF0YSBmcm9tCit0aGUgXGNsYXNze0Nvbm5lY3Rpb259IG9iamVjdC4gVGhlIHNvbHV0aW9uIHRoZW4gaXMgdG8gc2ltcGx5IGluY2x1ZGUgYQorXGN0eXBle1B5VGhyZWFkU3RhdGV9IHZhcmlhYmxlIGluIHRoZSBcY2xhc3N7Q29ubmVjdGlvbn0gZGVjbGFyYXRpb24sIGFuZCB3cml0ZQorbWFjcm9zIHNpbWlsYXIgdG8gXGNmdW5jdGlvbntQeV9CRUdJTl9BTExPV19USFJFQURTfSBhbmQKK1xjZnVuY3Rpb257UHlfRU5EX0FMTE9XX1RIUkVBRFN9IHRoYXQgYWxsb3dzIHNwZWNpZnlpbmcgb2YgdGhlCitcY3R5cGV7UHlUaHJlYWRTdGF0ZX0gdmFyaWFibGUgdG8gdXNlLiBOb3cgd2UgY2FuIHNpbXBseSAnJ2JlZ2luIGFsbG93Cit0aHJlYWRzJycgYmVmb3JlIGEgcG90ZW50aWFsbHkgYmxvY2tpbmcgb3BlcmF0aW9uLCBhbmQgJydlbmQgYWxsb3cgdGhyZWFkcycnCitiZWZvcmUgY2FsbGluZyBhIGNhbGxiYWNrLgorCisKK1xzdWJzZWN0aW9ue0FjZXNzaW5nIFNvY2tldCBNZXRob2RzIFxsYWJlbHtzb2NrZXQtbWV0aG9kc319CisKK1dlIHF1aWNrbHkgc2F3IHRoZSBiZW5lZml0IG9mIHdyYXBwaW5nIHNvY2tldCBtZXRob2RzIGluIHRoZQorXGNsYXNze1NTTC5Db25uZWN0aW9ufSBjbGFzcywgZm9yIGFuIGVhc3kgdHJhbnNpdGlvbiBpbnRvIHVzaW5nIFNTTC4gVGhlCitwcm9ibGVtIGhlcmUgaXMgdGhhdCB0aGUgXG1vZHVsZXtzb2NrZXR9IG1vZHVsZSBsYWNrcyBhIEMgQVBJLCBhbmQgYWxsIHRoZQorbWV0aG9kcyBhcmUgZGVjbGFyZWQgc3RhdGljLiBPbmUgYXBwcm9hY2ggd291bGQgYmUgdG8gaGF2ZSBcbW9kdWxle09wZW5TU0x9IGFzCithIHN1Ym1vZHVsZSB0byB0aGUgXG1vZHVsZXtzb2NrZXR9IG1vZHVsZSwgcGxhY2luZyBhbGwgdGhlIGNvZGUgaW4KK1xmaWxle3NvY2tldG1vZHVsZS5jfSwgYnV0IHRoaXMgaXMgb2J2aW91c2x5IG5vdCBhIGdvb2Qgc29sdXRpb24sIHNpbmNlIHlvdQorbWlnaHQgbm90IHdhbnQgdG8gaW1wb3J0IHRvbm5lcyBvZiBleHRyYSBzdHVmZiB5b3UncmUgbm90IGdvaW5nIHRvIHVzZSB3aGVuCitpbXBvcnRpbmcgdGhlIFxtb2R1bGV7c29ja2V0fSBtb2R1bGUuIFRoZSBvdGhlciBhcHByb2FjaCBpcyB0byBzb21laG93IGdldCBhCitwb2ludGVyIHRvIHRoZSBtZXRob2QgdG8gYmUgY2FsbGVkLCBlaXRoZXIgdGhlIEMgZnVuY3Rpb24sIG9yIGEgY2FsbGFibGUgUHl0aG9uCitvYmplY3QuIFRoaXMgaXMgbm90IHJlYWxseSBhIGdvb2Qgc29sdXRpb24gZWl0aGVyLCBzaW5jZSB0aGVyZSdzIGEgbG90IG9mCitsb29rdXBzIGludm9sdmVkLgorCitUaGUgd2F5IGl0IHdvcmtzIGlzIHRoYXQgeW91IGhhdmUgdG8gc3VwcGx5IGEgYGBcY2xhc3N7c29ja2V0fS1saWtlJycgdHJhbnNwb3J0CitvYmplY3QgdG8gdGhlIFxjbGFzc3tTU0wuQ29ubmVjdGlvbn0uIFRoZSBvbmx5IHJlcXVpcmVtZW50IG9mIHRoaXMgb2JqZWN0IGlzCit0aGF0IGl0IGhhcyBhIFxtZXRob2R7ZmlsZW5vKCl9IG1ldGhvZCB0aGF0IHJldHVybnMgYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCdzCit2YWxpZCBhdCB0aGUgQyBsZXZlbCAoaS5lLiB5b3UgY2FuIHVzZSB0aGUgc3lzdGVtIGNhbGxzIHJlYWQgYW5kIHdyaXRlKS4gSWYgeW91Cit3YW50IHRvIHVzZSB0aGUgXG1ldGhvZHtjb25uZWN0KCl9IG9yIFxtZXRob2R7YWNjZXB0KCl9IG1ldGhvZHMgb2YgdGhlCitcY2xhc3N7U1NMLkNvbm5lY3Rpb259IG9iamVjdCwgdGhlIHRyYW5zcG9ydCBvYmplY3QgaGFzIHRvIHN1cHBseSBzdWNoCittZXRob2RzIHRvby4gQXBhcnQgZnJvbSB0aGVtLCBhbnkgbWV0aG9kIGxvb2t1cHMgaW4gdGhlIFxjbGFzc3tTU0wuQ29ubmVjdGlvbn0KK29iamVjdCB0aGF0IGZhaWwgYXJlIHBhc3NlZCBvbiB0byB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgb2JqZWN0LgorCitGdXR1cmUgY2hhbmdlcyBtaWdodCBiZSB0byBhbGxvdyBQeXRob24tbGV2ZWwgdHJhbnNwb3J0IG9iamVjdHMsIHRoYXQgaW5zdGVhZAorb2YgaGF2aW5nIFxtZXRob2R7ZmlsZW5vKCl9IG1ldGhvZHMsIGhhdmUgXG1ldGhvZHtyZWFkKCl9IGFuZCBcbWV0aG9ke3dyaXRlKCl9CittZXRob2RzLCBzbyBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzIG9mIFB5dGhvbiBjYW4gYmUgdXNlZC4gVGhpcyB3b3VsZCBwcm9iYWJseQorZW50YWlsIHNvbWUgc29ydCBvZiBPcGVuU1NMIGBgQklPcycnLCBidXQgY29udmVydGluZyBQeXRob24gc3RyaW5ncyBiYWNrIGFuZAorZm9ydGggaXMgZXhwZW5zaXZlLCBzbyB0aGlzIHNob3VsZG4ndCBiZSB1c2VkIHVubGVzcyBuZWNlc3NhcnkuIE90aGVyIG5pY2UKK3RoaW5ncyB3b3VsZCBiZSB0byBiZSBhYmxlIHRvIHBhc3MgaW4gZGlmZmVyZW50IHRyYW5zcG9ydCBvYmplY3RzIGZvciByZWFkaW5nCithbmQgd3JpdGluZywgYnV0IHRoZW4gdGhlIFxtZXRob2R7ZmlsZW5vKCl9IG1ldGhvZCBvZiBcY2xhc3N7U1NMLkNvbm5lY3Rpb259CitiZWNvbWVzIHZpcnR1YWxseSB1c2VsZXNzLiBBbHNvLCBzaG91bGQgdGhlIG1ldGhvZCByZXNvbHV0aW9uIGJlIHVzZWQgb24gdGhlCityZWFkLXRyYW5zcG9ydCBvciB0aGUgd3JpdGUtdHJhbnNwb3J0PworCisKK1xlbmR7ZG9jdW1lbnR9CmRpZmYgLS1naXQgYS9kb2MvcHlPcGVuU1NMLnR4dCBiL2RvYy9weU9wZW5TU0wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDBmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvcHlPcGVuU1NMLnR4dApAQCAtMCwwICsxLDk3MCBAQAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeXRob24gT3BlblNTTCBNYW51YWwKKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIE9wZW5TU0wgTWFudWFsCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJ0aW4gU2r2Z3JlbgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcnRpbkBzdHJha3QuY29tCisKKyAgQWJzdHJhY3Q6CisKKyAgIFRoaXMgbW9kdWxlIGlzIGEgcmF0aGVyIHRoaW4gd3JhcHBlciBhcm91bmQgKGEgc3Vic2V0IG9mKSB0aGUgT3BlblNTTAorICAgbGlicmFyeS4gV2l0aCB0aGluIHdyYXBwZXIgSSBtZWFuIHRoYXQgYSBsb3Qgb2YgdGhlIG9iamVjdCBtZXRob2RzIGRvCisgICBub3RoaW5nIG1vcmUgdGhhbiBjYWxsaW5nIGEgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBpbiB0aGUgT3BlblNTTAorICAgbGlicmFyeS4KKworQ29udGVudHMKKworICAgICAqIDEgSW50cm9kdWN0aW9uIAorICAgICAqIDIgQnVpbGRpbmcgYW5kIEluc3RhbGxpbmcgCisgICAgICAgICAgKyAyLjEgQnVpbGRpbmcgdGhlIE1vZHVsZSBvbiBhIFVuaXggU3lzdGVtIAorICAgICAgICAgICsgMi4yIEJ1aWxkaW5nIHRoZSBNb2R1bGUgb24gYSBXaW5kb3dzIFN5c3RlbSAKKyAgICAgKiAzIE9wZW5TU0wgLS0gUHl0aG9uIGludGVyZmFjZSB0byBPcGVuU1NMIAorICAgICAgICAgICsgMy4xIGNyeXB0byAtLSBHZW5lcmljIGNyeXB0b2dyYXBoaWMgbW9kdWxlIAorICAgICAgICAgICsgMy4yIHJhbmQgLS0gQW4gaW50ZXJmYWNlIHRvIHRoZSBPcGVuU1NMIHBzZXVkbyByYW5kb20gbnVtYmVyCisgICAgICAgICAgICBnZW5lcmF0b3IgCisgICAgICAgICAgKyAzLjMgU1NMIC0tIEFuIGludGVyZmFjZSB0byB0aGUgU1NMLXNwZWNpZmljIHBhcnRzIG9mIE9wZW5TU0wgCisgICAgICogNCBJbnRlcm5hbHMgCisgICAgICAgICAgKyA0LjEgRXhjZXB0aW9ucyAKKyAgICAgICAgICArIDQuMiBDYWxsYmFja3MgCisgICAgICAgICAgKyA0LjMgQWNlc3NpbmcgU29ja2V0IE1ldGhvZHMgCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIEludHJvZHVjdGlvbgorCisgICBUaGUgcmVhc29uIHRoaXMgbW9kdWxlIGV4aXN0cyBhdCBhbGwgaXMgdGhhdCB0aGUgU1NMIHN1cHBvcnQgaW4gdGhlCisgICBzb2NrZXQgbW9kdWxlIGluIHRoZSBQeXRob24gMi4xIGRpc3RyaWJ1dGlvbiAod2hpY2ggaXMgd2hhdCB3ZSB1c2VkLAorICAgb2YgY291cnNlIEkgY2Fubm90IHNwZWFrIGZvciBsYXRlciB2ZXJzaW9ucykgaXMgc2V2ZXJlbHkgbGltaXRlZC4KKworICAgV2hlbiBhc2tpbmcgYWJvdXQgU1NMIG9uIHRoZSBjb21wLmxhbmcucHl0aG9uIG5ld3Nncm91cCAob3Igb24KKyAgIHB5dGhvbi1saXN0QHB5dGhvbi5vcmcpIHBlb3BsZSB1c3VhbGx5IHBvaW50ZWQgeW91IHRvIHRoZSBNMkNyeXB0bworICAgcGFja2FnZS4gVGhlIE0yQ3J5cHRvLlNTTCBtb2R1bGUgZG9lcyBpbXBsZW1lbnQgYSBsb3Qgb2YgT3BlblNTTCdzCisgICBmdW5jdGlvbmFsaXR5IGJ1dCB1bmZvcnR1bmF0ZWx5IGl0cyBlcnJvciBoYW5kbGluZyBzeXN0ZW0gZG9lcyBub3QKKyAgIHNlZW0gdG8gYmUgZmluaXNoZWQsIGVzcGVjaWFsbHkgZm9yIG5vbi1ibG9ja2luZyBJL08uIEkgdGhpbmsgdGhhdAorICAgbXVjaCBvZiB0aGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgTTJDcnlwdG9eMSBpcyBkZXZlbG9wZWQgdXNpbmcKKyAgIFNXSUdeMi4gVGhpcyBtYWtlcyBpdCBhd2t3YXJkIHRvIGNyZWF0ZSBmdW5jdGlvbnMgdGhhdCBlLmcuIGNhbiByZXR1cm4KKyAgIGJvdGggYW4gaW50ZWdlciBhbmQgTlVMTCBzaW5jZSAoYXMgZmFyIGFzIEkga25vdykgeW91IGJhc2ljYWxseSB3cml0ZQorICAgQyBmdW5jdGlvbnMgYW5kIFNXSUcgbWFrZXMgd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBwYXJzZXMgdGhlIFB5dGhvbgorICAgYXJndW1lbnQgbGlzdCBhbmQgY2FsbHMgeW91ciBDIGZ1bmN0aW9uLCBhbmQgZmluYWxseSB0cmFuc2Zvcm1zIHlvdXIKKyAgIHJldHVybiB2YWx1ZSB0byBhIFB5dGhvbiBvYmplY3QuCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgMiBCdWlsZGluZyBhbmQgSW5zdGFsbGluZworCisgICBUaGVzZSBpbnN0cnVjdGlvbnMgY2FuIGFsc28gYmUgZm91bmQgaW4gdGhlIGZpbGUgSU5TVEFMTC4KKworICAgSSBoYXZlIHRlc3RlZCB0aGlzIG9uIERlYmlhbiBMaW51eCBzeXN0ZW1zICh3b29keSBhbmQgc2lkKSwgU29sYXJpcworICAgMi42IGFuZCAyLjcuIE90aGVycyBoYXZlIHN1Y2Nlc3NmdWxseSBjb21waWxlZCBpdCBvbiBXaW5kb3dzIGFuZCBOVC4KKworCisyLjEgQnVpbGRpbmcgdGhlIE1vZHVsZSBvbiBhIFVuaXggU3lzdGVtCisKKyAgIHB5T3BlblNTTCB1c2VzIGRpc3R1dGlscywgc28gdGhlcmUgcmVhbGx5IHNob3VsZG4ndCBiZSBhbnkgcHJvYmxlbXMuCisgICBUbyBidWlsZCB0aGUgbGlicmFyeToKKworcHl0aG9uIHNldHVwLnB5IGJ1aWxkCisKKyAgIElmIHlvdXIgT3BlblNTTCBoZWFkZXIgZmlsZXMgYXJlbid0IGluIC91c3IvaW5jbHVkZSwgeW91IG1heSBuZWVkIHRvCisgICBzdXBwbHkgdGhlIC1JIGZsYWcgdG8gbGV0IHRoZSBzZXR1cCBzY3JpcHQga25vdyB3aGVyZSB0byBsb29rLiBUaGUKKyAgIHNhbWUgZ29lcyBmb3IgdGhlIGxpYnJhcmllcyBvZiBjb3Vyc2UsIHVzZSB0aGUgLUwgZmxhZy4gTm90ZSB0aGF0CisgICBidWlsZCB3b24ndCBhY2NlcHQgdGhlc2UgZmxhZ3MsIHNvIHlvdSBoYXZlIHRvIHJ1biBmaXJzdCBidWlsZF9leHQgYW5kCisgICB0aGVuIGJ1aWxkISBFeGFtcGxlOgorCitweXRob24gc2V0dXAucHkgYnVpbGRfZXh0IC1JL3Vzci9sb2NhbC9zc2wvaW5jbHVkZSAtTC91c3IvbG9jYWwvc3NsL2xpYgorcHl0aG9uIHNldHVwLnB5IGJ1aWxkCisKKyAgIE5vdyB5b3Ugc2hvdWxkIGhhdmUgYSBkaXJlY3RvcnkgY2FsbGVkIE9wZW5TU0wgdGhhdCBjb250YWlucyBlLmcuCisgICBTU0wuc28gYW5kIF9faW5pdF9fLnB5IHNvbWV3aGVyZSBpbiB0aGUgYnVpbGQgZGljcmVjdG9yeSwgc28ganVzdDoKKworcHl0aG9uIHNldHVwLnB5IGluc3RhbGwKKworICAgSWYgeW91LCBmb3Igc29tZSBhcmNhbmUgcmVhc29uLCBkb24ndCB3YW50IHRoZSBtb2R1bGUgdG8gYXBwZWFyIGluIHRoZQorICAgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnksIHVzZSB0aGUgLS1wcmVmaXggb3B0aW9uLgorCisgICBZb3UgY2FuLCBvZiBjb3Vyc2UsIGRvCisKK3B5dGhvbiBzZXR1cC5weSAtLWhlbHAKKworICAgdG8gZmluZCBvdXQgbW9yZSBhYm91dCBob3cgdG8gdXNlIHRoZSBzY3JpcHQuCisKKworMi4yIEJ1aWxkaW5nIHRoZSBNb2R1bGUgb24gYSBXaW5kb3dzIFN5c3RlbQorCisgICBCaWcgdGhhbmtzIHRvIEl0YW1hciBTaHR1bGwtVHJhdXJpbmcgYW5kIE9sZWcgT3Jsb3YgZm9yIHRoZWlyIGhlbHAKKyAgIHdpdGggV2luZG93cyBidWlsZCBpbnN0cnVjdGlvbnMuIFNhbWUgYXMgZm9yIFVuaXggc3lzdGVtcywgd2UgaGF2ZSB0bworICAgc2VwYXJhdGUgdGhlIGJ1aWxkX2V4dCBhbmQgdGhlIGJ1aWxkLgorCisgICBCdWlsZGluZyB0aGUgbGlicmFyeToKKworc2V0dXAucHkgYnVpbGRfZXh0IC1JIC4uLlxvcGVuc3NsXGluYzMyIC1MIC4uLlxvcGVuc3NsXG91dDMyZGxsCitzZXR1cC5weSBidWlsZAorCisgICBXaGVyZSAuLi5cb3BlbnNzbCBpcyBvZiBjb3Vyc2UgdGhlIGxvY2F0aW9uIG9mIHlvdXIgT3BlblNTTAorICAgaW5zdGFsbGF0aW9uLgorCisgICBJbnN0YWxsYXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIFVuaXggc3lzdGVtczoKKworc2V0dXAucHkgaW5zdGFsbAorCisgICBBbmQgc2ltaWxhcmlseSwgeW91IGNhbiBkbworCitzZXR1cC5weSAtLWhlbHAKKworICAgdG8gZ2V0IG1vcmUgaW5mb3JtYXRpb24uCisKKworICAgICAgICAgICAgICAgICAgIDMgT3BlblNTTCAtLSBQeXRob24gaW50ZXJmYWNlIHRvIE9wZW5TU0wKKworICAgVGhpcyBwYWNrYWdlIHByb3ZpZGVzIGEgaGlnaC1sZXZlbCBpbnRlcmZhY2UgdG8gdGhlIGZ1bmN0aW9ucyBpbiB0aGUKKyAgIE9wZW5TU0wgbGlicmFyeS4gVGhlIGZvbGxvd2luZyBtb2R1bGVzIGFyZSBkZWZpbmVkOgorCisgICBjcnlwdG8KKyAgICAgICAgICBHZW5lcmljIGNyeXB0b2dyYXBoaWMgbW9kdWxlLiBOb3RlIHRoYXQgaWYgYW55dGhpbmcgaXMKKyAgICAgICAgICBpbmNvbXBsZXRlLCB0aGlzIG1vZHVsZSBpcyEKKworICAgcmFuZAorICAgICAgICAgIEFuIGludGVyZmFjZSB0byB0aGUgT3BlblNTTCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisKKyAgIFNTTAorICAgICAgICAgIEFuIGludGVyZmFjZSB0byB0aGUgU1NMLXNwZWNpZmljIHBhcnRzIG9mIE9wZW5TU0wuCisKKworMy4xIGNyeXB0byAtLSBHZW5lcmljIGNyeXB0b2dyYXBoaWMgbW9kdWxlCisKKyAgIFg1MDlUeXBlCisgICAgICAgICAgQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBYNTA5IG9iamVjdCB0eXBlLgorCisgICBYNTA5KCkKKyAgICAgICAgICBGYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhbiBYNTA5IG9iamVjdC4KKworICAgWDUwOU5hbWVUeXBlCisgICAgICAgICAgQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBYNTA5TmFtZSBvYmplY3QgdHlwZS4KKworICAgWDUwOU5hbWUoeDUwOW5hbWUpCisgICAgICAgICAgRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBjb3B5IG9mIHg1MDluYW1lLgorCisgICBYNTA5UmVxVHlwZQorICAgICAgICAgIEEgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgWDUwOVJlcSBvYmplY3QgdHlwZS4KKworICAgWDUwOVJlcSgpCisgICAgICAgICAgRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYW4gWDUwOVJlcSBvYmplY3QuCisKKyAgIFg1MDlTdG9yZVR5cGUKKyAgICAgICAgICBBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFg1MDlTdG9yZSBvYmplY3QgdHlwZS4KKworICAgUEtleVR5cGUKKyAgICAgICAgICBBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFBLZXkgb2JqZWN0IHR5cGUuCisKKyAgIFBLZXkoKQorICAgICAgICAgIEZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgUEtleSBvYmplY3QuCisKKyAgIFBLQ1M3VHlwZQorICAgICAgICAgIEEgUHl0aG9uIHR5cGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgUEtDUzcgb2JqZWN0IHR5cGUuCisKKyAgIFBLQ1MxMlR5cGUKKyAgICAgICAgICBBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFBLQ1MxMiBvYmplY3QgdHlwZS4KKworICAgWDUwOUV4dGVuc2lvblR5cGUKKyAgICAgICAgICBBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFg1MDlFeHRlbnNpb24gb2JqZWN0CisgICAgICAgICAgdHlwZS4KKworICAgWDUwOUV4dGVuc2lvbih0eXBlbmFtZSwgY3JpdGljYWwsIHZhbHVlKQorICAgICAgICAgIEZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgWDUwOUV4dGVuc2lvbiBvYmplY3QuCisKKyAgIE5ldHNjYXBlU1BLSVR5cGUKKyAgICAgICAgICBBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIE5ldHNjYXBlU1BLSSBvYmplY3QgdHlwZS4KKworICAgTmV0c2NhcGVTUEtJKFtlbmNdKQorICAgICAgICAgIEZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgTmV0c2NhcGVTUEtJIG9iamVjdC4gSWYgdGhlIGVuYworICAgICAgICAgIGFyZ3VtZW50IGlzIHByZXNlbnQsIGl0IHNob3VsZCBiZSBhIGJhc2U2NC1lbmNvZGVkIHN0cmluZworICAgICAgICAgIHJlcHJlc2VudGluZyBhIE5ldHNjYXBlU1BLSSBvYmplY3QsIGFzIHJldHVybmVkIGJ5IHRoZQorICAgICAgICAgIGI2NF9lbmNvZGUgbWV0aG9kLgorCisgICBGSUxFVFlQRV9QRU0KKworICAgRklMRVRZUEVfQVNOMQorICAgICAgICAgIEZpbGUgdHlwZSBjb25zdGFudHMuCisKKyAgIFRZUEVfUlNBCisKKyAgIFRZUEVfRFNBCisgICAgICAgICAgS2V5IHR5cGUgY29uc3RhbnRzLgorCisgICBleGNlcHRpb24gRXJyb3IKKyAgICAgICAgICBHZW5lcmljIGV4Y2VwdGlvbiB1c2VkIGluIHRoZSBjcnlwdG8gbW9kdWxlLgorCisgICBkdW1wX2NlcnRpZmljYXRlKHR5cGUsIGNlcnQpCisgICAgICAgICAgRHVtcCB0aGUgY2VydGlmaWNhdGUgY2VydCBpbnRvIGEgYnVmZmVyIHN0cmluZyBlbmNvZGVkIHdpdGggdGhlCisgICAgICAgICAgdHlwZSB0eXBlLgorCisgICBkdW1wX2NlcnRpZmljYXRlX3JlcXVlc3QodHlwZSwgcmVxKQorICAgICAgICAgIER1bXAgdGhlIGNlcnRpZmljYXRlIHJlcXVlc3QgcmVxIGludG8gYSBidWZmZXIgc3RyaW5nIGVuY29kZWQKKyAgICAgICAgICB3aXRoIHRoZSB0eXBlIHR5cGUuCisKKyAgIGR1bXBfcHJpdmF0ZWtleSh0eXBlLCBwa2V5WywgY2lwaGVyLCBwYXNzcGhyYXNlXSkKKyAgICAgICAgICBEdW1wIHRoZSBwcml2YXRlIGtleSBwa2V5IGludG8gYSBidWZmZXIgc3RyaW5nIGVuY29kZWQgd2l0aCB0aGUKKyAgICAgICAgICB0eXBlIHR5cGUsIG9wdGlvbmFsbHkgKGlmIHR5cGUgaXMgRklMRVRZUEVfUEVNKSBlbmNyeXB0aW5nIGl0CisgICAgICAgICAgdXNpbmcgY2lwaGVyIGFuZCBwYXNzcGhyYXNlLgorCisgICAgICAgICAgcGFzc3BocmFzZSBtdXN0IGJlIGVpdGhlciBhIHN0cmluZyBvciBhIGNhbGxiYWNrIGZvciBwcm92aWRpbmcKKyAgICAgICAgICB0aGUgcGFzcyBwaHJhc2UuCisKKyAgIGxvYWRfY2VydGlmaWNhdGUodHlwZSwgYnVmZmVyKQorICAgICAgICAgIExvYWQgYSBjZXJ0aWZpY2F0ZSAoWDUwOSkgZnJvbSB0aGUgc3RyaW5nIGJ1ZmZlciBlbmNvZGVkIHdpdGgKKyAgICAgICAgICB0aGUgdHlwZSB0eXBlLgorCisgICBsb2FkX2NlcnRpZmljYXRlX3JlcXVlc3QodHlwZSwgYnVmZmVyKQorICAgICAgICAgIExvYWQgYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IChYNTA5UmVxKSBmcm9tIHRoZSBzdHJpbmcgYnVmZmVyCisgICAgICAgICAgZW5jb2RlZCB3aXRoIHRoZSB0eXBlIHR5cGUuCisKKyAgIGxvYWRfcHJpdmF0ZWtleSh0eXBlLCBidWZmZXJbLCBwYXNzcGhyYXNlXSkKKyAgICAgICAgICBMb2FkIGEgcHJpdmF0ZSBrZXkgKFBLZXkpIGZyb20gdGhlIHN0cmluZyBidWZmZXIgZW5jb2RlZCB3aXRoCisgICAgICAgICAgdGhlIHR5cGUgdHlwZSAobXVzdCBiZSBvbmUgb2YgRklMRVRZUEVfUEVNIGFuZCBGSUxFVFlQRV9BU04xKS4KKworICAgICAgICAgIHBhc3NwaHJhc2UgbXVzdCBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYSBjYWxsYmFjayBmb3IgcHJvdmlkaW5nCisgICAgICAgICAgdGhlIHBhc3MgcGhyYXNlLgorCisgICBsb2FkX3BrY3M3X2RhdGEodHlwZSwgYnVmZmVyKQorICAgICAgICAgIExvYWQgcGtjczcgZGF0YSBmcm9tIHRoZSBzdHJpbmcgYnVmZmVyIGVuY29kZWQgd2l0aCB0aGUgdHlwZQorICAgICAgICAgIHR5cGUuCisKKyAgIGxvYWRfcGtjczEyKGJ1ZmZlclssIHBhc3NwaHJhc2VdKQorICAgICAgICAgIExvYWQgcGtjczEyIGRhdGEgZnJvbSB0aGUgc3RyaW5nIGJ1ZmZlci4gSWYgdGhlIHBrY3MxMgorICAgICAgICAgIHN0cnVjdHVyZSBpcyBlbmNyeXB0ZWQsIGEgcGFzc3BocmFzZSBtdXN0IGJlIGluY2x1ZGVkLgorCisKKyAgMy4xLjEgWDUwOSBvYmplY3RzCisKKyAgIFg1MDkgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKworICAgZ2V0X2lzc3VlcigpCisgICAgICAgICAgUmV0dXJuIGEgYm9ycm93ZWQgcmVmZXJlbmNlIHRvIGEgWDUwOU5hbWUgb2JqZWN0IHJlcHJlc2VudGluZworICAgICAgICAgIHRoZSBpc3N1ZXIgb2YgdGhlIGNlcnRpZmljYXRlLiBXaGVuIHRoZSBjb3JyZXNwb25kaW5nIFg1MDkgb3IKKyAgICAgICAgICBYNTA5UmVxIG9iamVjdCBpcyBkZXN0cm95ZWQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgaW52YWxpZCEgCisKKyAgIGdldF9wdWJrZXkoKQorICAgICAgICAgIFJldHVybiBhIFBLZXkgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcHVibGljIGtleSBvZiB0aGUKKyAgICAgICAgICBjZXJ0aWZpY2F0ZS4KKworICAgZ2V0X3NlcmlhbF9udW1iZXIoKQorICAgICAgICAgIFJldHVybiB0aGUgY2VydGlmaWNhdGUgc2VyaWFsIG51bWJlci4KKworICAgZ2V0X3N1YmplY3QoKQorICAgICAgICAgIFJldHVybiBhIGJvcnJvd2VkIHJlZmVyZW5jZSB0byBhIFg1MDlOYW1lIG9iamVjdCByZXByZXNlbnRpbmcKKyAgICAgICAgICB0aGUgc3ViamVjdCBvZiB0aGUgY2VydGlmaWNhdGUuIFdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgWDUwOSBvcgorICAgICAgICAgIFg1MDlSZXEgb2JqZWN0IGlzIGRlc3Ryb3llZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSBpbnZhbGlkISAKKworICAgZ2V0X3ZlcnNpb24oKQorICAgICAgICAgIFJldHVybiB0aGUgY2VydGlmaWNhdGUgdmVyc2lvbi4KKworICAgZ210aW1lX2Fkal9ub3RCZWZvcmUodGltZSkKKyAgICAgICAgICBBZGp1c3QgdGhlIHRpbWVzdGFtcCAoaW4gR01UKSB3aGVuIHRoZSBjZXJ0aWZpY2F0ZSBzdGFydHMgYmVpbmcKKyAgICAgICAgICB2YWxpZC4KKworICAgZ210aW1lX2Fkal9ub3RBZnRlcih0aW1lKQorICAgICAgICAgIEFkanVzdCB0aGUgdGltZXN0YW1wIChpbiBHTVQpIHdoZW4gdGhlIGNlcnRpZmljYXRlIHN0b3BzIGJlaW5nCisgICAgICAgICAgdmFsaWQuCisKKyAgIGhhc19leHBpcmVkKCkKKyAgICAgICAgICBDaGVja3MgdGhlIGNlcnRpZmljYXRlJ3MgdGltZSBzdGFtcCBhZ2FpbnN0IGN1cnJlbnQgdGltZS4KKyAgICAgICAgICBSZXR1cm5zIHRydWUgaWYgdGhlIGNlcnRpZmljYXRlIGhhcyBleHBpcmVkIGFuZCBmYWxzZQorICAgICAgICAgIG90aGVyd2lzZS4KKworICAgc2V0X2lzc3Vlcihpc3N1ZXIpCisgICAgICAgICAgU2V0IHRoZSBpc3N1ZXIgb2YgdGhlIGNlcnRpZmljYXRlIHRvIGlzc3Vlci4KKworICAgc2V0X3B1YmtleShwa2V5KQorICAgICAgICAgIFNldCB0aGUgcHVibGljIGtleSBvZiB0aGUgY2VydGlmaWNhdGUgdG8gcGtleS4KKworICAgc2V0X3NlcmlhbF9udW1iZXIoc2VyaWFsbm8pCisgICAgICAgICAgU2V0IHRoZSBzZXJpYWwgbnVtYmVyIG9mIHRoZSBjZXJ0aWZpY2F0ZSB0byBzZXJpYWxuby4KKworICAgc2V0X3N1YmplY3Qoc3ViamVjdCkKKyAgICAgICAgICBTZXQgdGhlIHN1YmplY3Qgb2YgdGhlIGNlcnRpZmljYXRlIHRvIHN1YmplY3QuCisKKyAgIHNldF92ZXJzaW9uKHZlcnNpb24pCisgICAgICAgICAgU2V0IHRoZSBjZXJ0aWZpY2F0ZSB2ZXJzaW9uIHRvIHZlcnNpb24uCisKKyAgIHNpZ24ocGtleSwgZGlnZXN0KQorICAgICAgICAgIFNpZ24gdGhlIGNlcnRpZmljYXRlLCB1c2luZyB0aGUga2V5IHBrZXkgYW5kIHRoZSBtZXNzYWdlIGRpZ2VzdAorICAgICAgICAgIGFsZ29yaXRobSBpZGVudGlmaWVkIGJ5IHRoZSBzdHJpbmcgZGlnZXN0LgorCisgICBzdWJqZWN0X25hbWVfaGFzaCgpCisgICAgICAgICAgUmV0dXJuIHRoZSBoYXNoIG9mIHRoZSBjZXJ0aWZpY2F0ZSBzdWJqZWN0LgorCisgICBkaWdlc3QoZGlnZXN0X25hbWUpCisgICAgICAgICAgUmV0dXJuIGEgZGlnZXN0IG9mIHRoZSBjZXJ0aWZpY2F0ZSwgdXNpbmcgdGhlIGRpZ2VzdF9uYW1lCisgICAgICAgICAgbWV0aG9kLgorCisgICBhZGRfZXh0ZW5zaW9ucyhleHRlbnNpb25zKQorICAgICAgICAgIEFkZCB0aGUgZXh0ZW5zaW9ucyBpbiB0aGUgc2VxdWVuY2UgZXh0ZW5zaW9ucyB0byB0aGUKKyAgICAgICAgICBjZXJ0aWZpY2F0ZS4KKworCisgIDMuMS4yIFg1MDlOYW1lIG9iamVjdHMKKworICAgWDUwOU5hbWUgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVtYmVyczogCisKKyAgIGNvdW50cnlOYW1lCisgICAgICAgICAgVGhlIGNvdW50cnkgb2YgdGhlIGVudGl0eS4gQyBtYXkgYmUgdXNlZCBhcyBhbiBhbGlhcyBmb3IKKyAgICAgICAgICBjb3VudHJ5TmFtZS4KKworICAgc3RhdGVPclByb3ZpbmNlTmFtZQorICAgICAgICAgIFRoZSBzdGF0ZSBvciBwcm92aW5jZSBvZiB0aGUgZW50aXR5LiBTVCBtYXkgYmUgdXNlZCBhcyBhbiBhbGlhcworICAgICAgICAgIGZvciBzdGF0ZU9yUHJvdmluY2VOYW1ltworCisgICBsb2NhbGl0eU5hbWUKKyAgICAgICAgICBUaGUgbG9jYWxpdHkgb2YgdGhlIGVudGl0eS4gTCBtYXkgYmUgdXNlZCBhcyBhbiBhbGlhcyBmb3IKKyAgICAgICAgICBsb2NhbGl0eU5hbWUuCisKKyAgIG9yZ2FuaXphdGlvbk5hbWUKKyAgICAgICAgICBUaGUgb3JnYW5pemF0aW9uIG5hbWUgb2YgdGhlIGVudGl0eS4gTyBtYXkgYmUgdXNlZCBhcyBhbiBhbGlhcworICAgICAgICAgIGZvciBvcmdhbml6YXRpb25OYW1lLgorCisgICBvcmdhbml6YXRpb25hbFVuaXROYW1lCisgICAgICAgICAgVGhlIG9yZ2FuaXphdGlvbmFsIHVuaXQgb2YgdGhlIGVudGl0eS4gT1UgbWF5IGJlIHVzZWQgYXMgYW4KKyAgICAgICAgICBhbGlhcyBmb3Igb3JnYW5pemF0aW9uYWxVbml0TmFtZS4KKworICAgY29tbW9uTmFtZQorICAgICAgICAgIFRoZSBjb21tb24gbmFtZSBvZiB0aGUgZW50aXR5LiBDTiBtYXkgYmUgdXNlZCBhcyBhbiBhbGlhcyBmb3IKKyAgICAgICAgICBjb21tb25OYW1lLgorCisgICBlbWFpbEFkZHJlc3MKKyAgICAgICAgICBUaGUgZS1tYWlsIGFkZHJlc3Mgb2YgdGhlIGVudGl0eS4KKworCisgIDMuMS4zIFg1MDlSZXEgb2JqZWN0cworCisgICBYNTA5UmVxIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6IAorCisgICBnZXRfcHVia2V5KCkKKyAgICAgICAgICBSZXR1cm4gYSBQS2V5IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHB1YmxpYyBrZXkgb2YgdGhlCisgICAgICAgICAgY2VydGlmaWNhdGUgcmVxdWVzdC4KKworICAgZ2V0X3N1YmplY3QoKQorICAgICAgICAgIFJldHVybiBhIGJvcnJvd2VkIHJlZmVyZW5jZSB0byBhIFg1MDlOYW1lIG9iamVjdCByZXByZXNlbnRpbmcKKyAgICAgICAgICB0aGUgc3ViamVjdCBvZiB0aGUgY2VydGlmaWNhdGUuIFdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgWDUwOSBvcgorICAgICAgICAgIFg1MDlSZXEgb2JqZWN0IGlzIGRlc3Ryb3llZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSBpbnZhbGlkISAKKworICAgc2V0X3B1YmtleShwa2V5KQorICAgICAgICAgIFNldCB0aGUgcHVibGljIGtleSBvZiB0aGUgY2VydGlmaWNhdGUgcmVxdWVzdCB0byBwa2V5LgorCisgICBzaWduKHBrZXksIGRpZ2VzdCkKKyAgICAgICAgICBTaWduIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0LCB1c2luZyB0aGUga2V5IHBrZXkgYW5kIHRoZQorICAgICAgICAgIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobSBpZGVudGlmaWVkIGJ5IHRoZSBzdHJpbmcgZGlnZXN0LgorCisgICB2ZXJpZnkocGtleSkKKyAgICAgICAgICBWZXJpZnkgYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IHVzaW5nIHRoZSBwdWJsaWMga2V5IHBrZXkuCisKKworICAzLjEuNCBYNTA5U3RvcmUgb2JqZWN0cworCisgICBUaGUgWDUwOVN0b3JlIG9iamVjdCBoYXMgY3VycmVudGx5IGp1c3Qgb25lIG1ldGhvZDogCisKKyAgIGFkZF9jZXJ0KGNlcnQpCisgICAgICAgICAgQWRkIHRoZSBjZXJ0aWZpY2F0ZSBjZXJ0IHRvIHRoZSBjZXJ0aWZpY2F0ZSBzdG9yZS4KKworCisgIDMuMS41IFBLZXkgb2JqZWN0cworCisgICBUaGUgUEtleSBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczogCisKKyAgIGJpdHMoKQorICAgICAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGJpdHMgb2YgdGhlIGtleS4KKworICAgZ2VuZXJhdGVfa2V5KHR5cGUsIGJpdHMpCisgICAgICAgICAgR2VuZXJhdGUgYSBwdWJsaWMvcHJpdmF0ZSBrZXkgcGFpciBvZiB0aGUgdHlwZSB0eXBlIChvbmUgb2YKKyAgICAgICAgICBUWVBFX1JTQSBhbmQgVFlQRV9EU0EpIHdpdGggdGhlIHNpemUgYml0cy4KKworICAgdHlwZSgpCisgICAgICAgICAgUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBrZXkuCisKKworICAzLjEuNiBQS0NTNyBvYmplY3RzCisKKyAgIFBLQ1M3IG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6IAorCisgICB0eXBlX2lzX3NpZ25lZCgpCisgICAgICAgICAgRklYTUUKKworICAgdHlwZV9pc19lbnZlbG9wZWQoKQorICAgICAgICAgIEZJWE1FCisKKyAgIHR5cGVfaXNfc2lnbmVkQW5kRW52ZWxvcGVkKCkKKyAgICAgICAgICBGSVhNRQorCisgICB0eXBlX2lzX2RhdGEoKQorICAgICAgICAgIEZJWE1FCisKKyAgIGdldF90eXBlX25hbWUoKQorICAgICAgICAgIEdldCB0aGUgdHlwZSBuYW1lIG9mIHRoZSBQS0NTNy4KKworCisgIDMuMS43IFBLQ1MxMiBvYmplY3RzCisKKyAgIFBLQ1MxMiBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOiAKKworICAgZ2V0X2NlcnRpZmljYXRlKCkKKyAgICAgICAgICBSZXR1cm4gY2VydGlmaWNhdGUgcG9ydGlvbiBvZiB0aGUgUEtDUzEyIHN0cnVjdHVyZS4KKworICAgZ2V0X3ByaXZhdGVrZXkoKQorICAgICAgICAgIFJldHVybiBwcml2YXRlIGtleSBwb3J0aW9uIG9mIHRoZSBQS0NTMTIgc3RydWN0dXJlCisKKyAgIGdldF9jYV9jZXJ0aWZpY2F0ZXMoKQorICAgICAgICAgIFJldHVybiBDQSBjZXJ0aWZpY2F0ZXMgd2l0aGluIHRoZSBQS0NTMTIgb2JqZWN0IGFzIGEgdHVwbGUuCisgICAgICAgICAgUmV0dXJucyBOb25lIGlmIG5vIENBIGNlcnRpZmljYXRlcyBhcmUgcHJlc2VudC4KKworCisgIDMuMS44IFg1MDlFeHRlbnNpb24gb2JqZWN0cworCisgICBYNTA5RXh0ZW5zaW9uIG9iamVjdHMgY3VycmVudGx5IG9ubHkgaGF2ZSBvbmUgbWV0aG9kOiAKKworICAgZ2V0X2NyaXRpY2FsKCkKKyAgICAgICAgICBSZXR1cm4gdGhlIGNyaXRpY2FsIGZpZWxkIG9mIHRoZSBleHRlbnNpb24gb2JqZWN0LgorCisKKyAgMy4xLjkgTmV0c2NhcGVTUEtJIG9iamVjdHMKKworICAgTmV0c2NhcGVTUEtJIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6IAorCisgICBiNjRfZW5jb2RlKCkKKyAgICAgICAgICBSZXR1cm4gYSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdC4KKworICAgZ2V0X3B1YmtleSgpCisgICAgICAgICAgUmV0dXJuIHRoZSBwdWJsaWMga2V5IG9mIG9iamVjdC4KKworICAgc2V0X3B1YmtleShrZXkpCisgICAgICAgICAgU2V0IHRoZSBwdWJsaWMga2V5IG9mIHRoZSBvYmplY3QgdG8ga2V5LgorCisgICBzaWduKGtleSwgZGlnZXN0X25hbWUpCisgICAgICAgICAgU2lnbiB0aGUgTmV0c2NhcGVTUEtJIG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4ga2V5IGFuZAorICAgICAgICAgIGRpZ2VzdF9uYW1lLgorCisgICB2ZXJpZnkoa2V5KQorICAgICAgICAgIFZlcmlmeSB0aGUgTmV0c2NhcGVTUEtJIG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4ga2V5LgorCisKKzMuMiByYW5kIC0tIEFuIGludGVyZmFjZSB0byB0aGUgT3BlblNTTCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKworICAgVGhpcyBtb2R1bGUgaGFuZGxlcyB0aGUgT3BlblNTTCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKFBSTkcpCisgICBhbmQgZGVjbGFyZXMgdGhlIGZvbGxvd2luZzogCisKKyAgIGFkZChzdHJpbmcsIGVudHJvcHkpCisgICAgICAgICAgTWl4IGJ5dGVzIGZyb20gc3RyaW5nIGludG8gdGhlIFBSTkcgc3RhdGUuIFRoZSBlbnRyb3B5IGFyZ3VtZW50CisgICAgICAgICAgaXMgKHRoZSBsb3dlciBib3VuZCBvZikgYW4gZXN0aW1hdGUgb2YgaG93IG11Y2ggcmFuZG9tbmVzcyBpcworICAgICAgICAgIGNvbnRhaW5lZCBpbiBzdHJpbmcsIG1lYXN1cmVkIGluIGJ5dGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKKyAgICAgICAgICBzZWUgZS5nLiBSRkMgMTc1MC4KKworICAgZWdkKHBhdGhbLCBieXRlc10pCisgICAgICAgICAgUXVlcnkgdGhlIEVudHJvcHkgR2F0aGVyaW5nIERhZW1vbl4zIG9uIHNvY2tldCBwYXRoIGZvciBieXRlcworICAgICAgICAgIGJ5dGVzIG9mIHJhbmRvbSBkYXRhIGFuZCBhbmQgdXNlcyBhZGQgdG8gc2VlZCB0aGUgUFJORy4gVGhlCisgICAgICAgICAgZGVmYXVsdCB2YWx1ZSBvZiBieXRlcyBpcyAyNTUuCisKKyAgIGxvYWRfZmlsZShwYXRoWywgYnl0ZXNdKQorICAgICAgICAgIFJlYWQgYnl0ZXMgYnl0ZXMgKG9yIGFsbCBvZiBpdCwgaWYgYnl0ZXMgaXMgbmVnYXRpdmUpIG9mIGRhdGEKKyAgICAgICAgICBmcm9tIHRoZSBmaWxlIHBhdGggdG8gc2VlZCB0aGUgUFJORy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgYnl0ZXMKKyAgICAgICAgICBpcyAtMS4KKworICAgc2NyZWVuKCkKKyAgICAgICAgICBBZGQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHNjcmVlbiB0byB0aGUgUFJORyBzdGF0ZS4KKyAgICAgICAgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKyAgIHNlZWQoc3RyaW5nKQorICAgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGFkZCB3aXRoIGVudHJvcHkgYXMgdGhlIGxlbmd0aCBvZgorICAgICAgICAgIHRoZSBzdHJpbmcuCisKKyAgIHN0YXR1cygpCisgICAgICAgICAgUmV0dXJucyB0cnVlIGlmIHRoZSBQUk5HIGhhcyBiZWVuIHNlZWRlZCB3aXRoIGVub3VnaCBkYXRhLCBhbmQKKyAgICAgICAgICBmYWxzZSBvdGhlcndpc2UuCisKKyAgIHdyaXRlX2ZpbGUocGF0aCkKKyAgICAgICAgICBXcml0ZSBhIG51bWJlciBvZiByYW5kb20gYnl0ZXMgKGN1cnJlbnRseSAxMDI0KSB0byB0aGUgZmlsZQorICAgICAgICAgIHBhdGguIFRoaXMgZmlsZSBjYW4gdGhlbiBiZSB1c2VkIHdpdGggbG9hZF9maWxlIHRvIHNlZWQgdGhlCisgICAgICAgICAgUFJORyBhZ2Fpbi4KKworCiszLjMgU1NMIC0tIEFuIGludGVyZmFjZSB0byB0aGUgU1NMLXNwZWNpZmljIHBhcnRzIG9mIE9wZW5TU0wKKworICAgVGhpcyBtb2R1bGUgaGFuZGxlcyB0aGluZ3Mgc3BlY2lmaWMgdG8gU1NMLiBUaGVyZSBhcmUgdHdvIG9iamVjdHMKKyAgIGRlZmluZWQ6IENvbnRleHQsIENvbm5lY3Rpb24uIAorCisgICBTU0x2Ml9NRVRIT0QKKworICAgU1NMdjNfTUVUSE9ECisKKyAgIFNTTHYyM19NRVRIT0QKKworICAgVExTdjFfTUVUSE9ECisgICAgICAgICAgVGhlc2UgY29uc3RhbnRzIHJlcHJlc2VudCB0aGUgZGlmZmVyZW50IFNTTCBtZXRob2RzIHRvIHVzZSB3aGVuCisgICAgICAgICAgY3JlYXRpbmcgYSBjb250ZXh0IG9iamVjdC4KKworICAgVkVSSUZZX05PTkUKKworICAgVkVSSUZZX1BFRVIKKworICAgVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUCisgICAgICAgICAgVGhlc2UgY29uc3RhbnRzIHJlcHJlc2VudCB0aGUgdmVyaWZpY2F0aW9uIG1vZGUgdXNlZCBieSB0aGUKKyAgICAgICAgICBDb250ZXh0IG9iamVjdCdzIHNldF92ZXJpZnkgbWV0aG9kLgorCisgICBGSUxFVFlQRV9QRU0KKworICAgRklMRVRZUEVfQVNOMQorICAgICAgICAgIEZpbGUgdHlwZSBjb25zdGFudHMgdXNlZCB3aXRoIHRoZSB1c2VfY2VydGlmaWNhdGVfZmlsZSBhbmQKKyAgICAgICAgICB1c2VfcHJpdmF0ZWtleV9maWxlIG1ldGhvZHMgb2YgQ29udGV4dCBvYmplY3RzLgorCisgICBPUF9TSU5HTEVfREhfVVNFCisKKyAgIE9QX0VQSEVNRVJBTF9SU0EKKworICAgT1BfTk9fU1NMdjIKKworICAgT1BfTk9fU1NMdjMKKworICAgT1BfTk9fVExTdjEKKyAgICAgICAgICBDb25zdGFudHMgdXNlZCB3aXRoIHNldF9vcHRpb25zIG9mIENvbnRleHQgb2JqZWN0cy4KKyAgICAgICAgICBPUF9TSU5HTEVfREhfVVNFIG1lYW5zIHRvIGFsd2F5cyBjcmVhdGUgYSBuZXcga2V5IHdoZW4gdXNpbmcKKyAgICAgICAgICBlcGhlbWVyYWwgRGlmZmllLUhlbGxtYW4uIE9QX0VQSEVNRVJBTF9SU0EgbWVhbnMgdG8gYWx3YXlzIHVzZQorICAgICAgICAgIGVwaGVtZXJhbCBSU0Ega2V5cyB3aGVuIGRvaW5nIFJTQSBvcGVyYXRpb25zLiBPUF9OT19TU0x2MiwKKyAgICAgICAgICBPUF9OT19TU0x2MyBhbmQgT1BfTk9fVExTdjEgbWVhbnMgdG8gZGlzYWJsZSB0aG9zZSBzcGVjaWZpYworICAgICAgICAgIHByb3RvY29scy4gVGhpcyBpcyBpbnRlcmVzdGluZyBpZiB5b3UncmUgdXNpbmcgZS5nLgorICAgICAgICAgIFNTTHYyM19NRVRIT0QgdG8gZ2V0IGFuIFNTTHYyLWNvbXBhdGlibGUgaGFuZHNoYWtlLCBidXQgZG9uJ3QKKyAgICAgICAgICB3YW50IHRvIHVzZSBTU0x2Mi4KKworICAgQ29udGV4dFR5cGUKKyAgICAgICAgICBBIFB5dGhvbiB0eXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIENvbnRleHQgb2JqZWN0IHR5cGUuCisKKyAgIENvbnRleHQobWV0aG9kKQorICAgICAgICAgIEZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IENvbnRleHQgb2JqZWN0IGdpdmVuIGFuIFNTTAorICAgICAgICAgIG1ldGhvZC4gVGhlIG1ldGhvZCBzaG91bGQgYmUgU1NMdjJfTUVUSE9ELCBTU0x2M19NRVRIT0QsCisgICAgICAgICAgU1NMdjIzX01FVEhPRCBvciBUTFN2MV9NRVRIT0QuCisKKyAgIENvbm5lY3Rpb25UeXBlCisgICAgICAgICAgQSBQeXRob24gdHlwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBDb25uZWN0aW9uIG9iamVjdCB0eXBlLgorCisgICBDb25uZWN0aW9uKGNvbnRleHQsIHNvY2tldCkKKyAgICAgICAgICBGYWN0b3J5IGZ1Y25jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgQ29ubmVjdGlvbiBvYmplY3QgZ2l2ZW4gYW4KKyAgICAgICAgICBTU0wgY29udGV4dCBhbmQgYSBzb2NrZXQgXjQgb2JqZWN0LgorCisgICBleGNlcHRpb24gRXJyb3IKKyAgICAgICAgICBUaGlzIGV4Y2VwdGlvbiBpcyB1c2VkIGFzIGEgYmFzZSBjbGFzcyBmb3IgdGhlIG90aGVyCisgICAgICAgICAgU1NMLXJlbGF0ZWQgZXhjZXB0aW9ucywgYnV0IG1heSBhbHNvIGJlIHJhaXNlZCBkaXJlY3RseS4KKworICAgICAgICAgIFdoZW5ldmVyIHRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCBkaXJlY3RseSwgaXQgaGFzIGEgbGlzdCBvZgorICAgICAgICAgIGVycm9yIG1lc3NhZ2VzIGZyb20gdGhlIE9wZW5TU0wgZXJyb3IgcXVldWUsIHdoZXJlIGVhY2ggaXRlbSBpcworICAgICAgICAgIGEgdHVwbGUgKGxpYiwgZnVuY3Rpb24sIHJlYXNvbikuIEhlcmUgbGliLCBmdW5jdGlvbiBhbmQgcmVhc29uCisgICAgICAgICAgYXJlIGFsbCBzdHJpbmdzLCBkZXNjcmliaW5nIHdoZXJlIGFuZCB3aGF0IHRoZSBwcm9ibGVtIGlzLiBTZWUKKyAgICAgICAgICBlcnIoMykgZm9yIG1vcmUgaW5mb3JtYXRpb24uIAorCisgICBleGNlcHRpb24gWmVyb1JldHVybkVycm9yCisgICAgICAgICAgVGhpcyBleGNlcHRpb24gbWF0Y2hlcyB0aGUgZXJyb3IgcmV0dXJuIGNvZGUKKyAgICAgICAgICBTU0xfRVJST1JfWkVST19SRVRVUk4sIGFuZCBpcyByYWlzZWQgd2hlbiB0aGUgU1NMIENvbm5lY3Rpb24KKyAgICAgICAgICBoYXMgYmVlbiBjbG9zZWQuIEluIFNTTCAzLjAgYW5kIFRMUyAxLjAsIHRoaXMgb25seSBvY2N1cnMgaWYgYQorICAgICAgICAgIGNsb3N1cmUgYWxlcnQgaGFzIG9jY3VycmVkIGluIHRoZSBwcm90b2NvbCwgaS5lLiB0aGUgY29ubmVjdGlvbgorICAgICAgICAgIGhhcyBiZWVuIGNsb3NlZCBjbGVhbmx5LiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseQorICAgICAgICAgIG1lYW4gdGhhdCB0aGUgdHJhbnNwb3J0IGxheWVyIChlLmcuIGEgc29ja2V0KSBoYXMgYmVlbiBjbG9zZWQuCisKKyAgICAgICAgICBJdCBtYXkgc2VlbSBhIGxpdHRsZSBzdHJhbmdlIHRoYXQgdGhpcyBpcyBhbiBleGNlcHRpb24sIGJ1dCBpdAorICAgICAgICAgIGRvZXMgbWF0Y2ggYW4gU1NMX0VSUk9SIGNvZGUsIGFuZCBpcyB2ZXJ5IGNvbnZlbmllbnQuIAorCisgICBleGNlcHRpb24gV2FudFJlYWRFcnJvcgorICAgICAgICAgIFRoZSBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZTsgdGhlIHNhbWUgSS9PIG1ldGhvZCBzaG91bGQgYmUKKyAgICAgICAgICBjYWxsZWQgYWdhaW4gbGF0ZXIsIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzLiBBbnkgSS9PIG1ldGhvZCBjYW4KKyAgICAgICAgICBsZWFkIHRvIHRoaXMgc2luY2UgbmV3IGhhbmRzaGFrZXMgY2FuIG9jY3VyIGF0IGFueSB0aW1lLgorCisgICBleGNlcHRpb24gV2FudFdyaXRlRXJyb3IKKyAgICAgICAgICBTZWUgV2FudFJlYWRFcnJvci4KKworICAgZXhjZXB0aW9uIFdhbnRYNTA5TG9va3VwRXJyb3IKKyAgICAgICAgICBUaGUgb3BlcmF0aW9uIGRpZCBub3QgY29tcGxldGUgYmVjYXVzZSBhbiBhcHBsaWNhdGlvbiBjYWxsYmFjaworICAgICAgICAgIGhhcyBhc2tlZCB0byBiZSBjYWxsZWQgYWdhaW4uIFRoZSBJL08gbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQKKyAgICAgICAgICBhZ2FpbiBsYXRlciwgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMuIE5vdGU6IFRoaXMgd29uJ3Qgb2NjdXIgaW4KKyAgICAgICAgICB0aGlzIHZlcnNpb24sIGFzIHRoZXJlIGFyZSBubyBzdWNoIGNhbGxiYWNrcyBpbiB0aGlzIHZlcnNpb24uCisKKyAgIGV4Y2VwdGlvbiBTeXNDYWxsRXJyb3IKKyAgICAgICAgICBUaGUgU3lzQ2FsbEVycm9yIG9jY3VycyB3aGVuIHRoZXJlJ3MgYW4gSS9PIGVycm9yIGFuZCBPcGVuU1NMJ3MKKyAgICAgICAgICBlcnJvciBxdWV1ZSBkb2VzIG5vdCBjb250YWluIGFueSBpbmZvcm1hdGlvbi4gVGhpcyBjYW4gbWVhbiB0d28KKyAgICAgICAgICB0aGluZ3M6IEFuIGVycm9yIGluIHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wsIG9yIGFuIGVuZCBvZiBmaWxlCisgICAgICAgICAgdGhhdCB2aW9sYXRlcyB0aGUgcHJvdG9jb2wuIFRoZSBwYXJhbWV0ZXIgdG8gdGhlIGV4Y2VwdGlvbiBpcworICAgICAgICAgIGFsd2F5cyBhIHBhaXIgKGVycm51bSwgZXJyc3RyKS4KKworCisgIDMuMy4xIENvbnRleHQgb2JqZWN0cworCisgICBDb250ZXh0IG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6IAorCisgICBjaGVja19wcml2YXRla2V5KCkKKyAgICAgICAgICBDaGVjayBpZiB0aGUgcHJpdmF0ZSBrZXkgKGxvYWRlZCB3aXRoIHVzZV9wcml2YXRla2V5W19maWxlXSkKKyAgICAgICAgICBtYXRjaGVzIHRoZSBjZXJ0aWZpY2F0ZSAobG9hZGVkIHdpdGggdXNlX2NlcnRpZmljYXRlW19maWxlXSkuCisgICAgICAgICAgUmV0dXJucyB0cnVlIGlmIHRoZXkgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZS4KKworICAgZ2V0X2FwcF9kYXRhKCkKKyAgICAgICAgICBSZXRyaWV2ZSBhcHBsaWNhdGlvbiBkYXRhIGFzIHNldCBieSBzZXRfYXBwX2RhdGEuCisKKyAgIGdldF9jZXJ0X3N0b3JlKCkKKyAgICAgICAgICBSZXRyaWV2ZSB0aGUgY2VydGlmaWNhdGUgc3RvcmUgKGEgWDUwOVN0b3JlIG9iamVjdCkgdGhhdCB0aGUKKyAgICAgICAgICBjb250ZXh0IHVzZXMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkICJ0cnVzdGVkIiBjZXJ0aWZpY2F0ZXMKKyAgICAgICAgICB3aXRob3V0IHVzaW5nIHRoZS4gbG9hZF92ZXJpZnlfbG9jYXRpb25zKCkgbWV0aG9kLgorCisgICBnZXRfdGltZW91dCgpCisgICAgICAgICAgUmV0cmlldmUgc2Vzc2lvbiB0aW1lb3V0LCBhcyBzZXQgYnkgc2V0X3RpbWVvdXQuIFRoZSBkZWZhdWx0IGlzCisgICAgICAgICAgMzAwIHNlY29uZHMuCisKKyAgIGdldF92ZXJpZnlfZGVwdGgoKQorICAgICAgICAgIFJldHJpZXZlIHRoZSBDb250ZXh0IG9iamVjdCdzIHZlcmlmeSBkZXB0aCwgYXMgc2V0IGJ5CisgICAgICAgICAgc2V0X3ZlcmlmeV9kZXB0aC4KKworICAgZ2V0X3ZlcmlmeV9tb2RlKCkKKyAgICAgICAgICBSZXRyaWV2ZSB0aGUgQ29udGV4dCBvYmplY3QncyB2ZXJpZnkgbW9kZSwgYXMgc2V0IGJ5CisgICAgICAgICAgc2V0X3ZlcmlmeV9tb2RlLgorCisgICBsb2FkX2NsaWVudF9jYShwZW1maWxlKQorICAgICAgICAgIFJlYWQgYSBmaWxlIHdpdGggUEVNLWZvcm1hdHRlZCBjZXJ0aWZpY2F0ZXMgdGhhdCB3aWxsIGJlIHNlbnQKKyAgICAgICAgICB0byB0aGUgY2xpZW50IHdoZW4gcmVxdWVzdGluZyBhIGNsaWVudCBjZXJ0aWZpY2F0ZS4KKworICAgbG9hZF92ZXJpZnlfbG9jYXRpb25zKHBlbWZpbGUpCisgICAgICAgICAgU3BlY2lmeSB3aGVyZSBDQSBjZXJ0aWZpY2F0ZXMgZm9yIHZlcmlmaWNhdGlvbiBwdXJwb3NlcyBhcmUKKyAgICAgICAgICBsb2NhdGVkLiBUaGVzZSBhcmUgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMuIE5vdGUgdGhhdCB0aGUKKyAgICAgICAgICBjZXJ0aWZpY2F0ZXMgaGF2ZSB0byBiZSBpbiBQRU0gZm9ybWF0LgorCisgICBsb2FkX3RtcF9kaChkaGZpbGUpCisgICAgICAgICAgTG9hZCBwYXJhbWV0ZXJzIGZvciBFcGhlbWVyYWwgRGlmZmllLUhlbGxtYW4gZnJvbSBkaGZpbGUuCisKKyAgIHNldF9hcHBfZGF0YShkYXRhKQorICAgICAgICAgIEFzc29jaWF0ZSBkYXRhIHdpdGggdGhpcyBDb250ZXh0IG9iamVjdC4gZGF0YSBjYW4gYmUgcmV0cmlldmVkCisgICAgICAgICAgbGF0ZXIgdXNpbmcgdGhlIGdldF9hcHBfZGF0YSBtZXRob2QuCisKKyAgIHNldF9jaXBoZXJfbGlzdChjaXBoZXJzKQorICAgICAgICAgIFNldCB0aGUgbGlzdCBvZiBjaXBoZXJzIHRvIGJlIHVzZWQgaW4gdGhpcyBjb250ZXh0LiBTZWUgdGhlCisgICAgICAgICAgT3BlblNTTCBtYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24gKGUuZy4gY2lwaGVycygxKSkKKworICAgc2V0X2luZm9fY2FsbGJhY2soY2FsbGJhY2spCisgICAgICAgICAgU2V0IHRoZSBpbmZvcm1hdGlvbiBjYWxsYmFjayB0byBjYWxsYmFjay4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlCisgICAgICAgICAgY2FsbGVkIGZyb20gdGltZSB0byB0aW1lIGR1cmluZyBTU0wgaGFuZHNoYWtlcy4KKworICAgICAgICAgIGNhbGxiYWNrIHNob3VsZCB0YWtlIHRocmVlIGFyZ3VtZW50czogYSBDb25uZWN0aW9uIG9iamVjdCBhbmQKKyAgICAgICAgICB0d28gaW50ZWdlcnMuIFRoZSBmaXJzdCBpbnRlZ2VyIHNwZWNpZmllcyB3aGVyZSBpbiB0aGUgU1NMCisgICAgICAgICAgaGFuZHNoYWtlIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkLCBhbmQgdGhlIG90aGVyIHRoZSByZXR1cm4KKyAgICAgICAgICBjb2RlIGZyb20gYSAocG9zc2libHkgZmFpbGVkKSBpbnRlcm5hbCBmdW5jdGlvbiBjYWxsLiAKKworICAgc2V0X29wdGlvbnMob3B0aW9ucykKKyAgICAgICAgICBBZGQgU1NMIG9wdGlvbnMuIE9wdGlvbnMgeW91IGhhdmUgc2V0IGJlZm9yZSBhcmUgbm90IGNsZWFyZWQhCisKKyAgICAgICAgICBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCB3aXRoIHRoZSBPUF8qIGNvbnN0YW50cy4gCisKKyAgIHNldF9wYXNzd2RfY2IoY2FsbGJhY2tbLCB1c2VyZGF0YV0pCisgICAgICAgICAgU2V0IHRoZSBwYXNzcGhyYXNlIGNhbGxiYWNrIHRvIGNhbGxiYWNrLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUKKyAgICAgICAgICBjYWxsZWQgd2hlbiBhIHByaXZhdGUga2V5IHdpdGggYSBwYXNzcGhyYXNlIGlzIGxvYWRlZC4KKworICAgICAgICAgIGNhbGxiYWNrIHNob3VsZCB0YWtlIGEgYm9vbGVhbiBhcmd1bWVudCByZXBlYXQgYW5kIGFuIGFyYml0cmFyeQorICAgICAgICAgIGFyZ3VtZW50IGRhdGEgYW5kIHJldHVybiB0aGUgcGFzc3BocmFzZSBlbnRlcmVkIGJ5IHRoZSB1c2VyLiBJZgorICAgICAgICAgIHJlcGVhdCBpcyB0cnVlIHRoZW4gY2FsbGJhY2sgc2hvdWxkIGFzayBmb3IgdGhlIHBhc3NwaHJhc2UKKyAgICAgICAgICB0d2ljZSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIHR3byBlbnRyaWVzIGFyZSBlcXVhbC4gVGhlIGRhdGEKKyAgICAgICAgICBhcmd1bWVudCBpcyB0aGUgdXNlcmRhdGEgdmFyaWFibGUgcGFzc2VkIHRvIHRoZSBzZXRfcGFzc3dkX2NiCisgICAgICAgICAgbWV0aG9kLiBJZiBhbiBlcnJvciBvY2N1cnMsIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gYSBmYWxzZQorICAgICAgICAgIHZhbHVlIChlLmcuIGFuIGVtcHR5IHN0cmluZykuIAorCisgICBzZXRfc2Vzc2lvbl9pZChuYW1lKQorICAgICAgICAgIFNldCB0aGUgY29udGV4dCBuYW1lIHdpdGhpbiB3aGljaCBhIHNlc3Npb24gY2FuIGJlIHJldXNlZCBmb3IKKyAgICAgICAgICB0aGlzIENvbnRleHQgb2JqZWN0LiBUaGlzIGlzIG5lZWRlZCB3aGVuIGRvaW5nIHNlc3Npb24KKyAgICAgICAgICByZXN1bXB0aW9uLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSBmb3IgYSBzdG9yZWQgc2Vzc2lvbiB0bworICAgICAgICAgIGtub3cgd2hpY2ggQ29udGV4dCBvYmplY3QgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLiBuYW1lIG1heSBiZQorICAgICAgICAgIGFueSBiaW5hcnkgZGF0YS4KKworICAgc2V0X3RpbWVvdXQodGltZW91dCkKKyAgICAgICAgICBTZXQgdGhlIHRpbWVvdXQgZm9yIG5ld2x5IGNyZWF0ZWQgc2Vzc2lvbnMgZm9yIHRoaXMgQ29udGV4dAorICAgICAgICAgIG9iamVjdCB0byB0aW1lb3V0LiB0aW1lb3V0IG11c3QgYmUgZ2l2ZW4gaW4gKHdob2xlKSBzZWNvbmRzLgorICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDMwMCBzZWNvbmRzLiBTZWUgdGhlIE9wZW5TU0wgbWFudWFsIGZvcgorICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24gKGUuZy4gU1NMX0NUWF9zZXRfdGltZW91dCgzKSkuCisKKyAgIHNldF92ZXJpZnkobW9kZSwgY2FsbGJhY2spCisgICAgICAgICAgU2V0IHRoZSB2ZXJpZmljYXRpb24gZmxhZ3MgZm9yIHRoaXMgQ29udGV4dCBvYmplY3QgdG8gbW9kZSBhbmQKKyAgICAgICAgICBzcGVjaWZ5IHRoYXQgY2FsbGJhY2sgc2hvdWxkIGJlIHVzZWQgZm9yIHZlcmlmaWNhdGlvbgorICAgICAgICAgIGNhbGxiYWNrcy4gbW9kZSBzaG91bGQgYmUgb25lIG9mIFZFUklGWV9OT05FIGFuZCBWRVJJRllfUEVFUi4KKyAgICAgICAgICBJZiBWRVJJRllfUEVFUiBpcyB1c2VkLCBtb2RlIGNhbiBiZSBPUjplZCB3aXRoCisgICAgICAgICAgVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUIGFuZCBWRVJJRllfQ0xJRU5UX09OQ0UgdG8gZnVydGhlcgorICAgICAgICAgIGNvbnRyb2wgdGhlIGJlaGF2aW91ci4KKworICAgICAgICAgIGNhbGxiYWNrIHNob3VsZCB0YWtlIGZpdmUgYXJndW1lbnRzOiBBIENvbm5lY3Rpb24gb2JqZWN0LCBhbgorICAgICAgICAgIFg1MDkgb2JqZWN0LCBhbmQgdGhyZWUgaW50ZWdlciB2YXJpYWJsZXMsIHdoaWNoIGFyZSBpbiB0dXJuCisgICAgICAgICAgcG90ZW50aWFsIGVycm9yIG51bWJlciwgZXJyb3IgZGVwdGggYW5kIHJldHVybiBjb2RlLiBjYWxsYmFjaworICAgICAgICAgIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB2ZXJpZmljYXRpb24gcGFzc2VzIGFuZCBmYWxzZSBvdGhlcndpc2UuIAorCisgICBzZXRfdmVyaWZ5X2RlcHRoKGRlcHRoKQorICAgICAgICAgIFNldCB0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIGNlcnRpZmljYXRlIGNoYWluIHZlcmlmaWNhdGlvbgorICAgICAgICAgIHRoYXQgc2hhbGwgYmUgYWxsb3dlZCBmb3IgdGhpcyBDb250ZXh0IG9iamVjdC4KKworICAgdXNlX2NlcnRpZmljYXRlKGNlcnQpCisgICAgICAgICAgVXNlIHRoZSBjZXJ0aWZpY2F0ZSBjZXJ0IHdoaWNoIGhhcyB0byBiZSBhIFg1MDkgb2JqZWN0LgorCisgICB1c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZShmaWxlKQorICAgICAgICAgIExvYWQgYSBjZXJ0aWZpY2F0ZSBjaGFpbiBmcm9tIGZpbGUgd2hpY2ggbXVzdCBiZSBQRU0gZW5jb2RlZC4KKworICAgdXNlX3ByaXZhdGVrZXkocGtleSkKKyAgICAgICAgICBVc2UgdGhlIHByaXZhdGUga2V5IHBrZXkgd2hpY2ggaGFzIHRvIGJlIGEgUEtleSBvYmplY3QuCisKKyAgIHVzZV9jZXJ0aWZpY2F0ZV9maWxlKGZpbGVbLCBmb3JtYXRdKQorICAgICAgICAgIExvYWQgdGhlIGZpcnN0IGNlcnRpZmljYXRlIGZvdW5kIGluIGZpbGUuIFRoZSBjZXJ0aWZpY2F0ZSBtdXN0CisgICAgICAgICAgYmUgaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgYnkgZm9ybWF0LCB3aGljaCBpcyBlaXRoZXIKKyAgICAgICAgICBGSUxFVFlQRV9QRU0gb3IgRklMRVRZUEVfQVNOMS4gVGhlIGRlZmF1bHQgaXMgRklMRVRZUEVfUEVNLgorCisgICB1c2VfcHJpdmF0ZWtleV9maWxlKGZpbGVbLCBmb3JtYXRdKQorICAgICAgICAgIExvYWQgdGhlIGZpcnN0IHByaXZhdGUga2V5IGZvdW5kIGluIGZpbGUuIFRoZSBwcml2YXRlIGtleSBtdXN0CisgICAgICAgICAgYmUgaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgYnkgZm9ybWF0LCB3aGljaCBpcyBlaXRoZXIKKyAgICAgICAgICBGSUxFVFlQRV9QRU0gb3IgRklMRVRZUEVfQVNOMS4gVGhlIGRlZmF1bHQgaXMgRklMRVRZUEVfUEVNLgorCisKKyAgMy4zLjIgQ29ubmVjdGlvbiBvYmplY3RzCisKKyAgIENvbm5lY3Rpb24gb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczogCisKKyAgIGFjY2VwdCgpCisgICAgICAgICAgQ2FsbCB0aGUgYWNjZXB0IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQgYW5kIHNldCB1cCBTU0wKKyAgICAgICAgICBvbiB0aGUgcmV0dXJuZWQgc29ja2V0LCB1c2luZyB0aGUgQ29udGV4dCBvYmplY3Qgc3VwcGxpZWQgdG8KKyAgICAgICAgICB0aGlzIENvbm5lY3Rpb24gb2JqZWN0IGF0IGNyZWF0aW9uLiBSZXR1cm5zIGEgcGFpciAoY29ubiwKKyAgICAgICAgICBhZGRyZXNzKS4gd2hlcmUgY29ubiBpcyB0aGUgbmV3IENvbm5lY3Rpb24gb2JqZWN0IGNyZWF0ZWQsIGFuZAorICAgICAgICAgIGFkZHJlc3MgaXMgYXMgcmV0dXJuZWQgYnkgdGhlIHNvY2tldCdzIGFjY2VwdC4KKworICAgYmluZChhZGRyZXNzKQorICAgICAgICAgIENhbGwgdGhlIGJpbmQgbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KKworICAgY2xvc2UoKQorICAgICAgICAgIENhbGwgdGhlIGNsb3NlIG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuIE5vdGU6IElmIHlvdQorICAgICAgICAgIHdhbnQgY29ycmVjdCBTU0wgY2xvc3VyZSwgeW91IG5lZWQgdG8gY2FsbCB0aGUgc2h1dGRvd24gbWV0aG9kCisgICAgICAgICAgZmlyc3QuCisKKyAgIGNvbm5lY3QoYWRkcmVzcykKKyAgICAgICAgICBDYWxsIHRoZSBjb25uZWN0IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQgYW5kIHNldCB1cCBTU0wKKyAgICAgICAgICBvbiB0aGUgc29ja2V0LCB1c2luZyB0aGUgQ29udGV4dCBvYmplY3Qgc3VwcGxpZWQgdG8gdGhpcworICAgICAgICAgIENvbm5lY3Rpb24gb2JqZWN0IGF0IGNyZWF0aW9uLgorCisgICBjb25uZWN0X2V4KGFkZHJlc3MpCisgICAgICAgICAgQ2FsbCB0aGUgY29ubmVjdF9leCBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0IGFuZCBzZXQgdXAKKyAgICAgICAgICBTU0wgb24gdGhlIHNvY2tldCwgdXNpbmcgdGhlIENvbnRleHQgb2JqZWN0IHN1cHBsaWVkIHRvIHRoaXMKKyAgICAgICAgICBDb25uZWN0aW9uIG9iamVjdCBhdCBjcmVhdGlvbi4gTm90ZSB0aGF0IGlmIHRoZSBjb25uZWN0X2V4CisgICAgICAgICAgbWV0aG9kIG9mIHRoZSBzb2NrZXQgZG9lc24ndCByZXR1cm4gMCwgU1NMIHdvbid0IGJlCisgICAgICAgICAgaW5pdGlhbGl6ZWQuCisKKyAgIGRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgUGVyZm9ybSBhbiBTU0wgaGFuZHNoYWtlICh1c3VhbGx5IGNhbGxlZCBhZnRlciByZW5lZ290aWF0ZSBvcgorICAgICAgICAgIG9uZSBvZiBzZXRfYWNjZXB0X3N0YXRlIG9yIHNldF9hY2NlcHRfc3RhdGUpLiBUaGlzIGNhbiByYWlzZQorICAgICAgICAgIHRoZSBzYW1lIGV4Y2VwdGlvbnMgYXMgc2VuZCBhbmQgcmVjdi4KKworICAgZmlsZW5vKCkKKyAgICAgICAgICBSZXRyaWV2ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG51bWJlciBmb3IgdGhlIHVuZGVybHlpbmcgc29ja2V0LgorCisgICBsaXN0ZW4oYmFja2xvZykKKyAgICAgICAgICBDYWxsIHRoZSBsaXN0ZW4gbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KKworICAgZ2V0X2FwcF9kYXRhKCkKKyAgICAgICAgICBSZXRyaWV2ZSBhcHBsaWNhdGlvbiBkYXRhIGFzIHNldCBieSBzZXRfYXBwX2RhdGEuCisKKyAgIGdldF9jaXBoZXJfbGlzdCgpCisgICAgICAgICAgUmV0cmlldmUgdGhlIGxpc3Qgb2YgY2lwaGVycyB1c2VkIGJ5IHRoZSBDb25uZWN0aW9uIG9iamVjdC4KKyAgICAgICAgICBXQVJOSU5HOiBUaGlzIEFQSSBoYXMgY2hhbmdlZC4gSXQgdXNlZCB0byB0YWtlIGFuIG9wdGlvbmFsCisgICAgICAgICAgcGFyYW1ldGVyIGFuZCBqdXN0IHJldHVybiBhIHN0cmluZywgYnV0IG5vdCBpdCByZXR1cm5zIHRoZQorICAgICAgICAgIGVudGlyZSBsaXN0IGluIG9uZSBnby4KKworICAgZ2V0X2NvbnRleHQoKQorICAgICAgICAgIFJldHJpZXZlIHRoZSBDb250ZXh0IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBDb25uZWN0aW9uLgorCisgICBnZXRfcGVlcl9jZXJ0aWZpY2F0ZSgpCisgICAgICAgICAgUmV0cmlldmUgdGhlIG90aGVyIHNpZGUncyBjZXJ0aWZpY2F0ZSAoaWYgYW55KQorCisgICBnZXRwZWVybmFtZSgpCisgICAgICAgICAgQ2FsbCB0aGUgZ2V0cGVlcm5hbWUgbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KKworICAgZ2V0c29ja25hbWUoKQorICAgICAgICAgIENhbGwgdGhlIGdldHNvY2tuYW1lIG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuCisKKyAgIGdldHNvY2tvcHQobGV2ZWwsIG9wdG5hbWVbLCBidWZsZW5dKQorICAgICAgICAgIENhbGwgdGhlIGdldHNvY2tvcHQgbWV0aG9kIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KKworICAgcGVuZGluZygpCisgICAgICAgICAgUmV0cmlldmUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSBzYWZlbHkgcmVhZCBmcm9tIHRoZQorICAgICAgICAgIFNTTCBidWZmZXIuCisKKyAgIHJlY3YoYnVmc2l6ZSkKKyAgICAgICAgICBSZWNlaXZlIGRhdGEgZnJvbSB0aGUgQ29ubmVjdGlvbi4gVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cmluZworICAgICAgICAgIHJlcHJlc2VudGluZyB0aGUgZGF0YSByZWNlaXZlZC4gVGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8KKyAgICAgICAgICBiZSByZWNlaXZlZCBhdCBvbmNlLCBpcyBzcGVjaWZpZWQgYnkgYnVmc2l6ZS4KKworICAgcmVuZWdvdGlhdGUoKQorICAgICAgICAgIFJlbmVnb3RpYXRlIHRoZSBTU0wgc2Vzc2lvbi4gQ2FsbCB0aGlzIGlmIHlvdSB3aXNoIHRvIGNoYW5nZQorICAgICAgICAgIGNpcGhlciBzdWl0ZXMgb3IgYW55dGhpbmcgbGlrZSB0aGF0LgorCisgICBzZW5kKHN0cmluZykKKyAgICAgICAgICBTZW5kIHRoZSBzdHJpbmcgZGF0YSB0byB0aGUgQ29ubmVjdGlvbi4KKworICAgc2VuZGFsbChzdHJpbmcpCisgICAgICAgICAgU2VuZCBhbGwgb2YgdGhlIHN0cmluZyBkYXRhIHRvIHRoZSBDb25uZWN0aW9uLiBUaGlzIGNhbGxzIHNlbmQKKyAgICAgICAgICByZXBlYXRlZGx5IHVudGlsIGFsbCBkYXRhIGlzIHNlbnQuIElmIGFuIGVycm9yIG9jY3VycywgaXQncworICAgICAgICAgIGltcG9zc2libGUgdG8gdGVsbCBob3cgbXVjaCBkYXRhIGhhcyBiZWVuIHNlbnQuCisKKyAgIHNldF9hY2NlcHRfc3RhdGUoKQorICAgICAgICAgIFNldCB0aGUgY29ubmVjdGlvbiB0byB3b3JrIGluIHNlcnZlciBtb2RlLiBUaGUgaGFuZHNoYWtlIHdpbGwKKyAgICAgICAgICBiZSBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgcmVhZC93cml0ZS4KKworICAgc2V0X2FwcF9kYXRhKGRhdGEpCisgICAgICAgICAgQXNzb2NpYXRlIGRhdGEgd2l0aCB0aGlzIENvbm5lY3Rpb24gb2JqZWN0LiBkYXRhIGNhbiBiZQorICAgICAgICAgIHJldHJpZXZlZCBsYXRlciB1c2luZyB0aGUgZ2V0X2FwcF9kYXRhIG1ldGhvZC4KKworICAgc2V0X2Nvbm5lY3Rfc3RhdGUoKQorICAgICAgICAgIFNldCB0aGUgY29ubmVjdGlvbiB0byB3b3JrIGluIGNsaWVudCBtb2RlLiBUaGUgaGFuZHNoYWtlIHdpbGwKKyAgICAgICAgICBiZSBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgcmVhZC93cml0ZS4KKworICAgc2V0YmxvY2tpbmcoZmxhZykKKyAgICAgICAgICBDYWxsIHRoZSBzZXRibG9ja2luZyBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0LgorCisgICBzZXRzb2Nrb3B0KGxldmVsLCBvcHRuYW1lLCB2YWx1ZSkKKyAgICAgICAgICBDYWxsIHRoZSBzZXRzb2Nrb3B0IG1ldGhvZCBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQuCisKKyAgIHNodXRkb3duKCkKKyAgICAgICAgICBTZW5kIHRoZSBzaHV0ZG93biBtZXNzYWdlIHRvIHRoZSBDb25uZWN0aW9uLiBSZXR1cm5zIHRydWUgaWYKKyAgICAgICAgICB0aGUgc2h1dGRvd24gbWVzc2FnZSBleGNoYW5nZSBpcyBjb21wbGV0ZWQgYW5kIGZhbHNlIG90aGVyd2lzZQorICAgICAgICAgIChpbiB3aGljaCBjYXNlIHlvdSBjYWxsIHJlY3YoKSBvciBzZW5kKCkgd2hlbiB0aGUgY29ubmVjdGlvbgorICAgICAgICAgIGJlY29tZXMgcmVhZGFibGUvd3JpdGVhYmxlLgorCisgICBzb2NrX3NodXRkb3duKGhvdykKKyAgICAgICAgICBDYWxsIHRoZSBzaHV0ZG93biBtZXRob2Qgb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0LgorCisgICBzdGF0ZV9zdHJpbmcoKQorICAgICAgICAgIFJldHJpZXZlIGEgdmVyYm9zZSBzdHJpbmcgZGV0YWlsaW5nIHRoZSBzdGF0ZSBvZiB0aGUKKyAgICAgICAgICBDb25uZWN0aW9uLgorCisgICB3YW50X3JlYWQoKQorICAgICAgICAgIENoZWNrcyBpZiBtb3JlIGRhdGEgaGFzIHRvIGJlIHJlYWQgZnJvbSB0aGUgdHJhbnNwb3J0IGxheWVyIHRvCisgICAgICAgICAgY29tcGxldGUgYW4gb3BlcmF0aW9uLgorCisgICB3YW50X3dyaXRlKCkKKyAgICAgICAgICBDaGVja3MgaWYgdGhlcmUgaXMgZGF0YSB0byB3cml0ZSB0byB0aGUgdHJhbnNwb3J0IGxheWVyIHRvCisgICAgICAgICAgY29tcGxldGUgYW4gb3BlcmF0aW9uLgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IEludGVybmFscworCisgICBXZSByYW4gaW50byB0aHJlZSBtYWluIHByb2JsZW1zIGRldmVsb3BpbmcgdGhpczogRXhjZXB0aW9ucywgY2FsbGJhY2tzCisgICBhbmQgYWNjZXNzaW5nIHNvY2tldCBtZXRob2RzLiBUaGlzIGlzIHdoYXQgdGhpcyBjaGFwdGVyIGlzIGFib3V0LiAKKworCis0LjEgRXhjZXB0aW9ucworCisgICBXZSByZWFsaXplZCBlYXJseSB0aGF0IG1vc3Qgb2YgdGhlIGV4Y2VwdGlvbnMgd291bGQgYmUgcmFpc2VkIGJ5IHRoZQorICAgSS9PIGZ1bmN0aW9ucyBvZiBPcGVuU1NMLCBzbyBpdCBmZWx0IG5hdHVyYWwgdG8gbWltaWMgT3BlblNTTCdzIGVycm9yCisgICBjb2RlIHN5c3RlbSwgdHJhbnNsYXRpbmcgdGhlbSBpbnRvIFB5dGhvbiBleGNlcHRpb25zLiBUaGlzIG5hdHVyYWxseQorICAgZ2l2ZXMgdXMgdGhlIGV4Y2VwdGlvbnMgU1NMLlplcm9SZXR1cm5FcnJvciwgU1NMLldhbnRSZWFkRXJyb3IsCisgICBTU0wuV2FudFdyaXRlRXJyb3IsIFNTTC5XYW50WDUwOUxvb2t1cEVycm9yIGFuZCBTU0wuU3lzQ2FsbEVycm9yLiAKKworICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcywgc2VlIHNlY3Rpb24gMy4zLiAKKworCis0LjIgQ2FsbGJhY2tzCisKKyAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBwcm9ibGVtcyB3aXRoIGNhbGxiYWNrcy4gRmlyc3Qgb2YgYWxsLCBPcGVuU1NMCisgICBpcyB3cml0dGVuIGFzIGEgQyBsaWJyYXJ5LCBpdCdzIG5vdCBtZWFudCB0byBoYXZlIFB5dGhvbiBjYWxsYmFja3MsIHNvCisgICBhIHdheSBhcm91bmQgdGhhdCBpcyBuZWVkZWQuIEFub3RoZXIgcHJvYmxlbSBpcyB0aHJlYWQgc3VwcG9ydC4gQSBsb3QKKyAgIG9mIHRoZSBPcGVuU1NMIEkvTyBmdW5jdGlvbnMgY2FuIGJsb2NrIGlmIHRoZSBzb2NrZXQgaXMgaW4gYmxvY2tpbmcKKyAgIG1vZGUsIGFuZCB0aGVuIHlvdSB3YW50IG90aGVyIFB5dGhvbiB0aHJlYWRzIHRvIGJlIGFibGUgdG8gZG8gb3RoZXIKKyAgIHRoaW5ncy4gVGhlIHJlYWwgdHJvdWJsZSBpcyBpZiB5b3UndmUgcmVsZWFzZWQgdGhlIHRocmVhZCBsb2NrIHRvIGRvIGEKKyAgIHBvdGVudGlhbGx5IGJsb2NraW5nIG9wZXJhdGlvbiwgYW5kIHRoZSBvcGVyYXRpb24gY2FsbHMgYSBjYWxsYmFjay4KKyAgIFRoZW4gd2UgbXVzdCB0YWtlIHRoZSB0aHJlYWQgbG9jayBiYWNrXjUuIAorCisgICBUaGVyZSBhcmUgdHdvIHNvbHV0aW9ucyB0byB0aGUgZmlyc3QgcHJvYmxlbSwgYm90aCBvZiB3aGljaCBhcmUKKyAgIG5lY2Vzc2FyeS4gVGhlIGZpcnN0IHNvbHV0aW9uIHRvIHVzZSBpcyBpZiB0aGUgQyBjYWxsYmFjayBhbGxvd3MKKyAgICcndXNlcmRhdGEnJyB0byBiZSBwYXNzZWQgdG8gaXQgKGFuIGFyYml0cmFyeSBwb2ludGVyIG5vcm1hbGx5KS4gVGhpcworICAgaXMgZ3JlYXQhIFdlIGNhbiBzZXQgb3VyIFB5dGhvbiBmdW5jdGlvbiBvYmplY3QgYXMgdGhlIHJlYWwgdXNlcmRhdGEKKyAgIGFuZCBlbXVsYXRlIHVzZXJkYXRhIGZvciB0aGUgUHl0aG9uIGZ1bmN0aW9uIGluIGFub3RoZXIgd2F5LiBUaGUgb3RoZXIKKyAgIHNvbHV0aW9uIGNhbiBiZSB1c2VkIGlmIGFuIG9iamVjdCB3aXRoIGFuICcnYXBwX2RhdGEnJyBzeXN0ZW0gYWx3YXlzCisgICBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLiBGb3IgZXhhbXBsZSwgdGhlIFNTTCBvYmplY3QgaW4gT3BlblNTTCBoYXMKKyAgIGFwcF9kYXRhIGZ1bmN0aW9ucyBhbmQgaW4gZS5nLiB0aGUgdmVyaWZpY2F0aW9uIGNhbGxiYWNrcywgeW91IGNhbgorICAgcmV0cmlldmUgdGhlIHJlbGF0ZWQgU1NMIG9iamVjdC4gV2hhdCB3ZSBkbyBpcyB0byBzZXQgb3VyIHdyYXBwZXIKKyAgIENvbm5lY3Rpb24gb2JqZWN0IGFzIGFwcF9kYXRhIGZvciB0aGUgU1NMIG9iamVjdCwgYW5kIHdlIGNhbiBlYXNpbHkKKyAgIGZpbmQgdGhlIFB5dGhvbiBjYWxsYmFjay4gCisKKyAgIFRoZSBvdGhlciBwcm9ibGVtIGlzIGFsc28gcGFydGlhbGx5IHNvbHZlZCBieSBhcHBfZGF0YS4gU2luY2Ugd2UncmUKKyAgIGFzc29jaWF0aW5nIG91ciB3cmFwcGVyIG9iamVjdHMgd2l0aCB0aGUgJydyZWFsJycgb2JqZWN0cywgd2UgY2FuCisgICBlYXNpbHkgYWNjZXNzIGRhdGEgZnJvbSB0aGUgQ29ubmVjdGlvbiBvYmplY3QuIFRoZSBzb2x1dGlvbiB0aGVuIGlzIHRvCisgICBzaW1wbHkgaW5jbHVkZSBhIFB5VGhyZWFkU3RhdGUgdmFyaWFibGUgaW4gdGhlIENvbm5lY3Rpb24gZGVjbGFyYXRpb24sCisgICBhbmQgd3JpdGUgbWFjcm9zIHNpbWlsYXIgdG8gUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBhbmQKKyAgIFB5X0VORF9BTExPV19USFJFQURTIHRoYXQgYWxsb3dzIHNwZWNpZnlpbmcgb2YgdGhlIFB5VGhyZWFkU3RhdGUKKyAgIHZhcmlhYmxlIHRvIHVzZS4gTm93IHdlIGNhbiBzaW1wbHkgJydiZWdpbiBhbGxvdyB0aHJlYWRzJycgYmVmb3JlIGEKKyAgIHBvdGVudGlhbGx5IGJsb2NraW5nIG9wZXJhdGlvbiwgYW5kICcnZW5kIGFsbG93IHRocmVhZHMnJyBiZWZvcmUKKyAgIGNhbGxpbmcgYSBjYWxsYmFjay4gCisKKworNC4zIEFjZXNzaW5nIFNvY2tldCBNZXRob2RzCisKKyAgIFdlIHF1aWNrbHkgc2F3IHRoZSBiZW5lZml0IG9mIHdyYXBwaW5nIHNvY2tldCBtZXRob2RzIGluIHRoZQorICAgU1NMLkNvbm5lY3Rpb24gY2xhc3MsIGZvciBhbiBlYXN5IHRyYW5zaXRpb24gaW50byB1c2luZyBTU0wuIFRoZQorICAgcHJvYmxlbSBoZXJlIGlzIHRoYXQgdGhlIHNvY2tldCBtb2R1bGUgbGFja3MgYSBDIEFQSSwgYW5kIGFsbCB0aGUKKyAgIG1ldGhvZHMgYXJlIGRlY2xhcmVkIHN0YXRpYy4gT25lIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGhhdmUgT3BlblNTTCBhcworICAgYSBzdWJtb2R1bGUgdG8gdGhlIHNvY2tldCBtb2R1bGUsIHBsYWNpbmcgYWxsIHRoZSBjb2RlIGluCisgICBzb2NrZXRtb2R1bGUuYywgYnV0IHRoaXMgaXMgb2J2aW91c2x5IG5vdCBhIGdvb2Qgc29sdXRpb24sIHNpbmNlIHlvdQorICAgbWlnaHQgbm90IHdhbnQgdG8gaW1wb3J0IHRvbm5lcyBvZiBleHRyYSBzdHVmZiB5b3UncmUgbm90IGdvaW5nIHRvIHVzZQorICAgd2hlbiBpbXBvcnRpbmcgdGhlIHNvY2tldCBtb2R1bGUuIFRoZSBvdGhlciBhcHByb2FjaCBpcyB0byBzb21laG93IGdldAorICAgYSBwb2ludGVyIHRvIHRoZSBtZXRob2QgdG8gYmUgY2FsbGVkLCBlaXRoZXIgdGhlIEMgZnVuY3Rpb24sIG9yIGEKKyAgIGNhbGxhYmxlIFB5dGhvbiBvYmplY3QuIFRoaXMgaXMgbm90IHJlYWxseSBhIGdvb2Qgc29sdXRpb24gZWl0aGVyLAorICAgc2luY2UgdGhlcmUncyBhIGxvdCBvZiBsb29rdXBzIGludm9sdmVkLiAKKworICAgVGhlIHdheSBpdCB3b3JrcyBpcyB0aGF0IHlvdSBoYXZlIHRvIHN1cHBseSBhIGBgc29ja2V0LWxpa2UnJworICAgdHJhbnNwb3J0IG9iamVjdCB0byB0aGUgU1NMLkNvbm5lY3Rpb24uIFRoZSBvbmx5IHJlcXVpcmVtZW50IG9mIHRoaXMKKyAgIG9iamVjdCBpcyB0aGF0IGl0IGhhcyBhIGZpbGVubygpIG1ldGhvZCB0aGF0IHJldHVybnMgYSBmaWxlIGRlc2NyaXB0b3IKKyAgIHRoYXQncyB2YWxpZCBhdCB0aGUgQyBsZXZlbCAoaS5lLiB5b3UgY2FuIHVzZSB0aGUgc3lzdGVtIGNhbGxzIHJlYWQKKyAgIGFuZCB3cml0ZSkuIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgY29ubmVjdCgpIG9yIGFjY2VwdCgpIG1ldGhvZHMgb2YKKyAgIHRoZSBTU0wuQ29ubmVjdGlvbiBvYmplY3QsIHRoZSB0cmFuc3BvcnQgb2JqZWN0IGhhcyB0byBzdXBwbHkgc3VjaAorICAgbWV0aG9kcyB0b28uIEFwYXJ0IGZyb20gdGhlbSwgYW55IG1ldGhvZCBsb29rdXBzIGluIHRoZSBTU0wuQ29ubmVjdGlvbgorICAgb2JqZWN0IHRoYXQgZmFpbCBhcmUgcGFzc2VkIG9uIHRvIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBvYmplY3QuIAorCisgICBGdXR1cmUgY2hhbmdlcyBtaWdodCBiZSB0byBhbGxvdyBQeXRob24tbGV2ZWwgdHJhbnNwb3J0IG9iamVjdHMsIHRoYXQKKyAgIGluc3RlYWQgb2YgaGF2aW5nIGZpbGVubygpIG1ldGhvZHMsIGhhdmUgcmVhZCgpIGFuZCB3cml0ZSgpIG1ldGhvZHMsCisgICBzbyBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzIG9mIFB5dGhvbiBjYW4gYmUgdXNlZC4gVGhpcyB3b3VsZCBwcm9iYWJseQorICAgZW50YWlsIHNvbWUgc29ydCBvZiBPcGVuU1NMIGBgQklPcycnLCBidXQgY29udmVydGluZyBQeXRob24gc3RyaW5ncworICAgYmFjayBhbmQgZm9ydGggaXMgZXhwZW5zaXZlLCBzbyB0aGlzIHNob3VsZG4ndCBiZSB1c2VkIHVubGVzcworICAgbmVjZXNzYXJ5LiBPdGhlciBuaWNlIHRoaW5ncyB3b3VsZCBiZSB0byBiZSBhYmxlIHRvIHBhc3MgaW4gZGlmZmVyZW50CisgICB0cmFuc3BvcnQgb2JqZWN0cyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZywgYnV0IHRoZW4gdGhlIGZpbGVubygpCisgICBtZXRob2Qgb2YgU1NMLkNvbm5lY3Rpb24gYmVjb21lcyB2aXJ0dWFsbHkgdXNlbGVzcy4gQWxzbywgc2hvdWxkIHRoZQorICAgbWV0aG9kIHJlc29sdXRpb24gYmUgdXNlZCBvbiB0aGUgcmVhZC10cmFuc3BvcnQgb3IgdGhlCisgICB3cml0ZS10cmFuc3BvcnQ/IAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJvdXQgdGhpcyBkb2N1bWVudCAuLi4KKworICAgUHl0aG9uIE9wZW5TU0wgTWFudWFsCisKKyAgIFRoaXMgZG9jdW1lbnQgd2FzIGdlbmVyYXRlZCB1c2luZyB0aGUgTGFUZVgySFRNTCB0cmFuc2xhdG9yLgorCisgICBMYVRlWDJIVE1MIGlzIENvcHlyaWdodCCpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIE5pa29zIERyYWtvcywKKyAgIENvbXB1dGVyIEJhc2VkIExlYXJuaW5nIFVuaXQsIFVuaXZlcnNpdHkgb2YgTGVlZHMsIGFuZCBDb3B5cmlnaHQgqQorICAgMTk5NywgMTk5OCwgUm9zcyBNb29yZSwgTWF0aGVtYXRpY3MgRGVwYXJ0bWVudCwgTWFjcXVhcmllIFVuaXZlcnNpdHksCisgICBTeWRuZXkuCisKKyAgIFRoZSBhcHBsaWNhdGlvbiBvZiBMYVRlWDJIVE1MIHRvIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbiBoYXMgYmVlbgorICAgaGVhdmlseSB0YWlsb3JlZCBieSBGcmVkIEwuIERyYWtlLCBKci4gT3JpZ2luYWwgbmF2aWdhdGlvbiBpY29ucyB3ZXJlCisgICBjb250cmlidXRlZCBieSBDaHJpc3RvcGhlciBQZXRyaWxsaS4KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAgIEZvb3Rub3RlcworCisgICAuLi4gTTJDcnlwdG9eMQorICAgICAgICAgIFNlZSBodHRwOi8vd3d3LnBvc3QxLmNvbS9ob21lL25ncHMvbTIvCisKKyAgIC4uLiBTV0lHXjIKKyAgICAgICAgICBTZWUgaHR0cDovL3N3aWcuc291cmNlZm9yZ2UubmV0LworCisgICAuLi4gRGFlbW9uXjMKKyAgICAgICAgICBTZWUgaHR0cDovL3d3dy5sb3RoYXIuY29tL3RlY2gvY3J5cHRvLworCisgICAuLi4gc29ja2V0XjQKKyAgICAgICAgICBBY3R1YWxseSwgYWxsIHRoYXQgaXMgcmVxdWlyZWQgaXMgYW4gb2JqZWN0IHRoYXQgYmVoYXZlcyBsaWtlIGEKKyAgICAgICAgICBzb2NrZXQsIHlvdSBjb3VsZCBldmVuIHVzZSBmaWxlcywgZXZlbiB0aG91Z2ggaXQnZCBiZSB0cmlja3kgdG8KKyAgICAgICAgICBnZXQgdGhlIGhhbmRzaGFrZXMgcmlnaHQhCisKKyAgIC4uLiBiYWNrXjUKKyAgICAgICAgICBJJ20gbm90IHN1cmUgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LCBidXQgb3RoZXJ3aXNlIEkgZ2V0IGEKKyAgICAgICAgICBzZWdtZW50YXRpb24gdmlvbGF0aW9uIG9uIFB5RXZhbF9DYWxsT2JqZWN0CisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBPcGVuU1NMIE1hbnVhbAorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisgICBSZWxlYXNlIDAuNi4KZGlmZiAtLWdpdCBhL2RvYy90b29scy9hbm5vLWFwaS5weSBiL2RvYy90b29scy9hbm5vLWFwaS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZDM1NWQyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL2Fubm8tYXBpLnB5CkBAIC0wLDAgKzEsNzEgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyIiIkFkZCByZWZlcmVuY2UgY291bnQgYW5ub3RhdGlvbnMgdG8gdGhlIFB5dGhvbi9DIEFQSSBSZWZlcmVuY2UuIiIiCitfX3ZlcnNpb25fXyA9ICckUmV2aXNpb246IDEuMS4xLjEgJCcKKworaW1wb3J0IGdldG9wdAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2ltcG9ydCByZWZjb3VudHMKKworCitQUkVGSVhfMSA9IHIiXGJlZ2lue2NmdW5jZGVzY317UHlPYmplY3QqfXsiCitQUkVGSVhfMiA9IHIiXGJlZ2lue2NmdW5jZGVzY317UHlWYXJPYmplY3QqfXsiCisKKworZGVmIG1haW4oKToKKyAgICByY2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHJlZmNvdW50cy5fX2ZpbGVfXyksIG9zLnBhcmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImFwaSIsICJyZWZjb3VudHMuZGF0IikKKyAgICBvdXRmaWxlID0gIi0iCisgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAibzpyOiIsIFsib3V0cHV0PSIsICJyZWZjb3VudHM9Il0pCisgICAgZm9yIG9wdCwgYXJnIGluIG9wdHM6CisgICAgICAgIGlmIG9wdCBpbiAoIi1vIiwgIi0tb3V0cHV0Iik6CisgICAgICAgICAgICBvdXRmaWxlID0gYXJnCisgICAgICAgIGVsaWYgb3B0IGluICgiLXIiLCAiLS1yZWZjb3VudHMiKToKKyAgICAgICAgICAgIHJjZmlsZSA9IGFyZworICAgIHJjZGljdCA9IHJlZmNvdW50cy5sb2FkKHJjZmlsZSkKKyAgICBpZiBvdXRmaWxlID09ICItIjoKKyAgICAgICAgb3V0cHV0ID0gc3lzLnN0ZG91dAorICAgIGVsc2U6CisgICAgICAgIG91dHB1dCA9IG9wZW4ob3V0ZmlsZSwgInciKQorICAgIGlmIG5vdCBhcmdzOgorICAgICAgICBhcmdzID0gWyItIl0KKyAgICBmb3IgaW5maWxlIGluIGFyZ3M6CisgICAgICAgIGlmIGluZmlsZSA9PSAiLSI6CisgICAgICAgICAgICBpbnB1dCA9IHN5cy5zdGRpbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5wdXQgPSBvcGVuKGluZmlsZSkKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGxpbmUgPSBpbnB1dC5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcHJlZml4ID0gTm9uZQorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKFBSRUZJWF8xKToKKyAgICAgICAgICAgICAgICBwcmVmaXggPSBQUkVGSVhfMQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoUFJFRklYXzIpOgorICAgICAgICAgICAgICAgIHByZWZpeCA9IFBSRUZJWF8yCisgICAgICAgICAgICBpZiBwcmVmaXg6CisgICAgICAgICAgICAgICAgcyA9IGxpbmVbbGVuKHByZWZpeCk6XS5zcGxpdCgnfScsIDEpWzBdCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpbmZvID0gcmNkaWN0W3NdCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJObyByZWZjb3VudCBkYXRhIGZvciAlc1xuIiAlIHMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5mby5yZXN1bHRfdHlwZSBpbiAoIlB5T2JqZWN0KiIsICJQeVZhck9iamVjdCoiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluZm8ucmVzdWx0X3JlZnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9ICJBbHdheXMgXE5VTEx7fSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBpbmZvLnJlc3VsdF9yZWZzIGFuZCAiTmV3IiBvciAiQm9ycm93ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSByYyArICIgcmVmZXJlbmNlIgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IChyIlxiZWdpbntjZnVuY2Rlc2N9WyVzXXslc317IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChyYywgaW5mby5yZXN1bHRfdHlwZSkpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBsaW5lW2xlbihwcmVmaXgpOl0KKyAgICAgICAgICAgIG91dHB1dC53cml0ZShsaW5lKQorICAgICAgICBpZiBpbmZpbGUgIT0gIi0iOgorICAgICAgICAgICAgaW5wdXQuY2xvc2UoKQorICAgIGlmIG91dGZpbGUgIT0gIi0iOgorICAgICAgICBvdXRwdXQuY2xvc2UoKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvYnVpbGRpbmRleC5weSBiL2RvYy90b29scy9idWlsZGluZGV4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVhNDFjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvYnVpbGRpbmRleC5weQpAQCAtMCwwICsxLDM1MyBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCitfX3ZlcnNpb25fXyA9ICckUmV2aXNpb246IDEuMS4xLjEgJCcKKworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCBzeXMKKworCitjbGFzcyBOb2RlOgorICAgIF9fcm1qdW5rID0gcmUuY29tcGlsZSgiPCNcZCsjPiIpCisKKyAgICBjb250aW51YXRpb24gPSAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGluaywgc3RyLCBzZXFubyk6CisgICAgICAgIHNlbGYubGlua3MgPSBbbGlua10KKyAgICAgICAgc2VsZi5zZXFubyA9IHNlcW5vCisgICAgICAgICMgcmVtb3ZlIDwjXGQrIz4gbGVmdCBpbiBieSBtb3ZpbmcgdGhlIGRhdGEgb3V0IG9mIExhVGVYMkhUTUwKKyAgICAgICAgc3RyID0gc2VsZi5fX3JtanVuay5zdWIoJycsIHN0cikKKyAgICAgICAgIyBidWlsZCB1cCB0aGUgdGV4dAorICAgICAgICBzZWxmLnRleHQgPSBzcGxpdF9lbnRyeV90ZXh0KHN0cikKKyAgICAgICAgc2VsZi5rZXkgPSBzcGxpdF9lbnRyeV9rZXkoc3RyKQorCisgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJDb21wYXJpc29uIG9wZXJhdG9yIGluY2x1ZGVzIHNlcXVlbmNlIG51bWJlciwgZm9yIHVzZSB3aXRoCisgICAgICAgIGxpc3Quc29ydCgpLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5jbXBfZW50cnkob3RoZXIpIG9yIGNtcChzZWxmLnNlcW5vLCBvdGhlci5zZXFubykKKworICAgIGRlZiBjbXBfZW50cnkoc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJDb21wYXJpc29uICdvcGVyYXRvcicgdGhhdCBpZ25vcmVzIHNlcXVlbmNlIG51bWJlci4iIiIKKyAgICAgICAgYyA9IDAKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWluKGxlbihzZWxmLmtleSksIGxlbihvdGhlci5rZXkpKSk6CisgICAgICAgICAgICBjID0gKGNtcF9wYXJ0KHNlbGYua2V5W2ldLCBvdGhlci5rZXlbaV0pCisgICAgICAgICAgICAgICAgIG9yIGNtcF9wYXJ0KHNlbGYudGV4dFtpXSwgb3RoZXIudGV4dFtpXSkpCisgICAgICAgICAgICBpZiBjOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBjIG9yIGNtcChzZWxmLmtleSwgb3RoZXIua2V5KSBvciBjbXAoc2VsZi50ZXh0LCBvdGhlci50ZXh0KQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxOb2RlIGZvciAlcyAoJXMpPiIgJSAoc3RyaW5nLmpvaW4oc2VsZi50ZXh0LCAnIScpLCBzZWxmLnNlcW5vKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzdHJpbmcuam9pbihzZWxmLmtleSwgJyEnKQorCisgICAgZGVmIGR1bXAoc2VsZik6CisgICAgICAgIHJldHVybiAiJXNcMSVzIyMjJXNcbiIgXAorICAgICAgICAgICAgICAgJSAoc3RyaW5nLmpvaW4oc2VsZi5saW5rcywgIlwxIiksCisgICAgICAgICAgICAgICAgICBzdHJpbmcuam9pbihzZWxmLnRleHQsICchJyksCisgICAgICAgICAgICAgICAgICBzZWxmLnNlcW5vKQorCisKK2RlZiBjbXBfcGFydChzMSwgczIpOgorICAgIHJlc3VsdCA9IGNtcChzMSwgczIpCisgICAgaWYgcmVzdWx0ID09IDA6CisgICAgICAgIHJldHVybiAwCisgICAgbDEgPSBzdHJpbmcubG93ZXIoczEpCisgICAgbDIgPSBzdHJpbmcubG93ZXIoczIpCisgICAgbWlubGVuID0gbWluKGxlbihzMSksIGxlbihzMikpCisgICAgaWYgbGVuKHMxKSA8IGxlbihzMikgYW5kIGwxID09IGwyWzpsZW4oczEpXToKKyAgICAgICAgcmVzdWx0ID0gLTEKKyAgICBlbGlmIGxlbihzMikgPCBsZW4oczEpIGFuZCBsMiA9PSBsMVs6bGVuKHMyKV06CisgICAgICAgIHJlc3VsdCA9IDEKKyAgICBlbHNlOgorICAgICAgICByZXN1bHQgPSBjbXAobDEsIGwyKSBvciBjbXAoczEsIHMyKQorICAgIHJldHVybiByZXN1bHQKKworCitkZWYgc3BsaXRfZW50cnkoc3RyLCB3aGljaCk6CisgICAgc3R1ZmYgPSBbXQorICAgIHBhcnRzID0gc3RyaW5nLnNwbGl0KHN0ciwgJyEnKQorICAgIHBhcnRzID0gbWFwKHN0cmluZy5zcGxpdCwgcGFydHMsIFsnQCddICogbGVuKHBhcnRzKSkKKyAgICBmb3IgZW50cnkgaW4gcGFydHM6CisgICAgICAgIGlmIGxlbihlbnRyeSkgIT0gMToKKyAgICAgICAgICAgIGtleSA9IGVudHJ5W3doaWNoXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAga2V5ID0gZW50cnlbMF0KKyAgICAgICAgc3R1ZmYuYXBwZW5kKGtleSkKKyAgICByZXR1cm4gc3R1ZmYKKworCitfcm10dCA9IHJlLmNvbXBpbGUociIiIiguKik8dHQoPzogY2xhc3M9WyciXVthLXowLTldK1siJ10pPz4oLiopPC90dD4oLiopJCIiIiwKKyAgICAgICAgICAgICAgICAgICByZS5JR05PUkVDQVNFKQorX3JtcGFyZW5zID0gcmUuY29tcGlsZShyIlwoXCkiKQorCitkZWYgc3BsaXRfZW50cnlfa2V5KHN0cik6CisgICAgcGFydHMgPSBzcGxpdF9lbnRyeShzdHIsIDEpCisgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHBhcnRzKSk6CisgICAgICAgIG0gPSBfcm10dC5tYXRjaChwYXJ0c1tpXSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHBhcnRzW2ldID0gc3RyaW5nLmpvaW4obS5ncm91cCgxLCAyLCAzKSwgJycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJ0c1tpXSA9IHN0cmluZy5sb3dlcihwYXJ0c1tpXSkKKyAgICAgICAgIyByZW1vdmUgJygpJyBmcm9tIHRoZSBrZXk6CisgICAgICAgIHBhcnRzW2ldID0gX3JtcGFyZW5zLnN1YignJywgcGFydHNbaV0pCisgICAgcmV0dXJuIG1hcCh0cmltX2lnbm9yZWRfbGV0dGVycywgcGFydHMpCisKKworZGVmIHNwbGl0X2VudHJ5X3RleHQoc3RyKToKKyAgICBpZiAnPCcgaW4gc3RyOgorICAgICAgICBtID0gX3JtdHQubWF0Y2goc3RyKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgc3RyID0gc3RyaW5nLmpvaW4obS5ncm91cCgxLCAyLCAzKSwgJycpCisgICAgcmV0dXJuIHNwbGl0X2VudHJ5KHN0ciwgMSkKKworCitkZWYgbG9hZChmcCk6CisgICAgbm9kZXMgPSBbXQorICAgIHJ4ID0gcmUuY29tcGlsZSgiKC4qKVwxKC4qKSMjIyguKikkIikKKyAgICB3aGlsZSAxOgorICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIG0gPSByeC5tYXRjaChsaW5lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgbGluaywgc3RyLCBzZXFubyA9IG0uZ3JvdXAoMSwgMiwgMykKKyAgICAgICAgICAgIG5vZGVzLmFwcGVuZChOb2RlKGxpbmssIHN0ciwgc2Vxbm8pKQorICAgIHJldHVybiBub2RlcworCisKK2RlZiB0cmltX2lnbm9yZWRfbGV0dGVycyhzKToKKyAgICAjIGlnbm9yZSAkIHRvIGtlZXAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggdGhlCisgICAgIyBsZWFkaW5nIGxldHRlciBmcm9tIHRoZSBuYW1lCisgICAgcyA9IHN0cmluZy5sb3dlcihzKQorICAgIGlmIHNbMF0gPT0gIiQiOgorICAgICAgICByZXR1cm4gc1sxOl0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcworCitkZWYgZ2V0X2ZpcnN0X2xldHRlcihzKToKKyAgICByZXR1cm4gc3RyaW5nLmxvd2VyKHRyaW1faWdub3JlZF9sZXR0ZXJzKHMpWzBdKQorCisKK2RlZiBzcGxpdF9sZXR0ZXJzKG5vZGVzKToKKyAgICBsZXR0ZXJfZ3JvdXBzID0gW10KKyAgICBpZiBub2RlczoKKyAgICAgICAgZ3JvdXAgPSBbXQorICAgICAgICBhcHBlbmQgPSBncm91cC5hcHBlbmQKKyAgICAgICAgbGV0dGVyID0gZ2V0X2ZpcnN0X2xldHRlcihub2Rlc1swXS50ZXh0WzBdKQorICAgICAgICBsZXR0ZXJfZ3JvdXBzLmFwcGVuZCgobGV0dGVyLCBncm91cCkpCisgICAgICAgIGZvciBub2RlIGluIG5vZGVzOgorICAgICAgICAgICAgbmxldHRlciA9IGdldF9maXJzdF9sZXR0ZXIobm9kZS50ZXh0WzBdKQorICAgICAgICAgICAgaWYgbGV0dGVyICE9IG5sZXR0ZXI6CisgICAgICAgICAgICAgICAgbGV0dGVyID0gbmxldHRlcgorICAgICAgICAgICAgICAgIGdyb3VwID0gW10KKyAgICAgICAgICAgICAgICBsZXR0ZXJfZ3JvdXBzLmFwcGVuZCgobGV0dGVyLCBncm91cCkpCisgICAgICAgICAgICAgICAgYXBwZW5kID0gZ3JvdXAuYXBwZW5kCisgICAgICAgICAgICBhcHBlbmQobm9kZSkKKyAgICByZXR1cm4gbGV0dGVyX2dyb3VwcworCisKKyMgbmVlZCBhIGZ1bmN0aW9uIHRvIHNlcGFyYXRlIHRoZSBub2RlcyBpbnRvIGNvbHVtbnMuLi4KK2RlZiBzcGxpdF9jb2x1bW5zKG5vZGVzLCBjb2x1bW5zPTEpOgorICAgIGlmIGNvbHVtbnMgPD0gMToKKyAgICAgICAgcmV0dXJuIFtub2Rlc10KKyAgICAjIFRoaXMgaXMgYSByb3VnaCBoZWlnaHQ7IHdlIG1heSBoYXZlIHRvIGluY3JlYXNlIHRvIGF2b2lkIGJyZWFrcyBiZWZvcmUKKyAgICAjIGEgc3ViaXRlbS4KKyAgICBjb2xoZWlnaHQgPSBsZW4obm9kZXMpIC8gY29sdW1ucworICAgIG51bWxvbmcgPSBsZW4obm9kZXMpICUgY29sdW1ucworICAgIGlmIG51bWxvbmc6CisgICAgICAgIGNvbGhlaWdodCA9IGNvbGhlaWdodCArIDEKKyAgICBlbHNlOgorICAgICAgICBudW1sb25nID0gY29sdW1ucworICAgIGNvbHMgPSBbXQorICAgIGZvciBpIGluIHJhbmdlKG51bWxvbmcpOgorICAgICAgICBzdGFydCA9IGkgKiBjb2xoZWlnaHQKKyAgICAgICAgZW5kID0gc3RhcnQgKyBjb2xoZWlnaHQKKyAgICAgICAgY29scy5hcHBlbmQobm9kZXNbc3RhcnQ6ZW5kXSkKKyAgICBkZWwgbm9kZXNbOmVuZF0KKyAgICBjb2xoZWlnaHQgPSBjb2xoZWlnaHQgLSAxCisgICAgdHJ5OgorICAgICAgICBudW1zaG9ydCA9IGxlbihub2RlcykgLyBjb2xoZWlnaHQKKyAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgIGNvbHMgPSBjb2xzICsgKGNvbHVtbnMgLSBsZW4oY29scykpICogW1tdXQorICAgIGVsc2U6CisgICAgICAgIGZvciBpIGluIHJhbmdlKG51bXNob3J0KToKKyAgICAgICAgICAgIHN0YXJ0ID0gaSAqIGNvbGhlaWdodAorICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBjb2xoZWlnaHQKKyAgICAgICAgICAgIGNvbHMuYXBwZW5kKG5vZGVzW3N0YXJ0OmVuZF0pCisgICAgIworICAgICMgSWYgaXRlbXMgY29udGludWUgYWNyb3NzIGNvbHVtbnMsIG1ha2Ugc3VyZSB0aGV5IGFyZSBtYXJrZWQKKyAgICAjIGFzIGNvbnRpbnVhdGlvbnMgc28gdGhlIHVzZXIga25vd3MgdG8gbG9vayBhdCB0aGUgcHJldmlvdXMgY29sdW1uLgorICAgICMKKyAgICBmb3IgaSBpbiByYW5nZShsZW4oY29scykgLSAxKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJldiA9IGNvbHNbaV1bLTFdCisgICAgICAgICAgICBuZXh0ID0gY29sc1tpICsgMV1bMF0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gY29scworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbiA9IG1pbihsZW4ocHJldi5rZXkpLCBsZW4obmV4dC5rZXkpKQorICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2Uobik6CisgICAgICAgICAgICAgICAgaWYgcHJldi5rZXlbal0gIT0gbmV4dC5rZXlbal06CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgbmV4dC5jb250aW51YXRpb24gPSBqICsgMQorICAgIHJldHVybiBjb2xzCisKKworRExfTEVWRUxfSU5ERU5UID0gIiAgIgorCitkZWYgZm9ybWF0X2NvbHVtbihub2Rlcyk6CisgICAgc3RyaW5ncyA9IFsiPGRsIGNvbXBhY3Q+Il0KKyAgICBhcHBlbmQgPSBzdHJpbmdzLmFwcGVuZAorICAgIGxldmVsID0gMAorICAgIHByZXZpb3VzID0gW10KKyAgICBmb3Igbm9kZSBpbiBub2RlczoKKyAgICAgICAgY3VycmVudCA9IG5vZGUudGV4dAorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWluKGxlbihjdXJyZW50KSwgbGVuKHByZXZpb3VzKSkpOgorICAgICAgICAgICAgaWYgcHJldmlvdXNbaV0gIT0gY3VycmVudFtpXToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgY291bnQgPSBpICsgMQorICAgICAgICBpZiBjb3VudCA+IGxldmVsOgorICAgICAgICAgICAgYXBwZW5kKCI8ZGwgY29tcGFjdD4iICogKGNvdW50IC0gbGV2ZWwpICsgIlxuIikKKyAgICAgICAgICAgIGxldmVsID0gY291bnQKKyAgICAgICAgZWxpZiBsZXZlbCA+IGNvdW50OgorICAgICAgICAgICAgYXBwZW5kKCJcbiIpCisgICAgICAgICAgICBhcHBlbmQobGV2ZWwgKiBETF9MRVZFTF9JTkRFTlQpCisgICAgICAgICAgICBhcHBlbmQoIjwvZGw+IiAqIChsZXZlbCAtIGNvdW50KSkKKyAgICAgICAgICAgIGxldmVsID0gY291bnQKKyAgICAgICAgIyBlbHNlOiBsZXZlbCA9PSBjb3VudAorICAgICAgICBmb3IgaSBpbiByYW5nZShjb3VudCwgbGVuKGN1cnJlbnQpIC0gMSk6CisgICAgICAgICAgICB0ZXJtID0gbm9kZS50ZXh0W2ldCisgICAgICAgICAgICBsZXZlbCA9IGxldmVsICsgMQorICAgICAgICAgICAgaWYgbm9kZS5jb250aW51YXRpb24gPiBpOgorICAgICAgICAgICAgICAgIGV4dHJhID0gIiAoY29udGludWVkKSIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXh0cmEgPSAiIgorICAgICAgICAgICAgYXBwZW5kKCJcbjxkdD4lcyVzXG48ZGQ+XG4lczxkbCBjb21wYWN0PiIKKyAgICAgICAgICAgICAgICAgICAlICh0ZXJtLCBleHRyYSwgbGV2ZWwgKiBETF9MRVZFTF9JTkRFTlQpKQorICAgICAgICBhcHBlbmQoIlxuJXM8ZHQ+JXMlczwvYT4iCisgICAgICAgICAgICAgICAlIChsZXZlbCAqIERMX0xFVkVMX0lOREVOVCwgbm9kZS5saW5rc1swXSwgbm9kZS50ZXh0Wy0xXSkpCisgICAgICAgIGZvciBsaW5rIGluIG5vZGUubGlua3NbMTpdOgorICAgICAgICAgICAgYXBwZW5kKCIsXG4lcyAgICAlc1tMaW5rXTwvYT4iICUgKGxldmVsICogRExfTEVWRUxfSU5ERU5ULCBsaW5rKSkKKyAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50CisgICAgYXBwZW5kKCJcbiIpCisgICAgYXBwZW5kKCI8L2RsPiIgKiAobGV2ZWwgKyAxKSkKKyAgICByZXR1cm4gc3RyaW5nLmpvaW4oc3RyaW5ncywgJycpCisKKworZGVmIGZvcm1hdF9ub2Rlcyhub2RlcywgY29sdW1ucz0xKToKKyAgICBzdHJpbmdzID0gW10KKyAgICBhcHBlbmQgPSBzdHJpbmdzLmFwcGVuZAorICAgIGlmIGNvbHVtbnMgPiAxOgorICAgICAgICBjb2xub3MgPSByYW5nZShjb2x1bW5zKQorICAgICAgICBjb2xoZWlnaHQgPSBsZW4obm9kZXMpIC8gY29sdW1ucworICAgICAgICBpZiBsZW4obm9kZXMpICUgY29sdW1uczoKKyAgICAgICAgICAgIGNvbGhlaWdodCA9IGNvbGhlaWdodCArIDEKKyAgICAgICAgY29sd2lkdGggPSAxMDAgLyBjb2x1bW5zCisgICAgICAgIGFwcGVuZCgnPHRhYmxlIHdpZHRoPSIxMDAlIj48dHIgdmFsaWduPSJ0b3AiPicpCisgICAgICAgIGZvciBjb2wgaW4gc3BsaXRfY29sdW1ucyhub2RlcywgY29sdW1ucyk6CisgICAgICAgICAgICBhcHBlbmQoJzx0ZCB3aWR0aD0iJWQlJSI+XG4nICUgY29sd2lkdGgpCisgICAgICAgICAgICBhcHBlbmQoZm9ybWF0X2NvbHVtbihjb2wpKQorICAgICAgICAgICAgYXBwZW5kKCJcbjwvdGQ+IikKKyAgICAgICAgYXBwZW5kKCJcbjwvdHI+PC90YWJsZT4iKQorICAgIGVsc2U6CisgICAgICAgIGFwcGVuZChmb3JtYXRfY29sdW1uKG5vZGVzKSkKKyAgICBhcHBlbmQoIlxuPHA+XG4iKQorICAgIHJldHVybiBzdHJpbmcuam9pbihzdHJpbmdzLCAnJykKKworCitkZWYgZm9ybWF0X2xldHRlcihsZXR0ZXIpOgorICAgIGlmIGxldHRlciA9PSAnLic6CisgICAgICAgIGxldHRlcm5hbWUgPSAiLiAoZG90KSIKKyAgICBlbGlmIGxldHRlciA9PSAnXyc6CisgICAgICAgIGxldHRlcm5hbWUgPSAiXyAodW5kZXJzY29yZSkiCisgICAgZWxzZToKKyAgICAgICAgbGV0dGVybmFtZSA9IHN0cmluZy51cHBlcihsZXR0ZXIpCisgICAgcmV0dXJuICJcbjxocj5cbjxoMj48YSBuYW1lPVwibGV0dGVyLSVzXCI+JXM8L2E+PC9oMj5cblxuIiBcCisgICAgICAgICAgICUgKGxldHRlciwgbGV0dGVybmFtZSkKKworCitkZWYgZm9ybWF0X2h0bWxfbGV0dGVycyhub2RlcywgY29sdW1ucz0xKToKKyAgICBsZXR0ZXJfZ3JvdXBzID0gc3BsaXRfbGV0dGVycyhub2RlcykKKyAgICBpdGVtcyA9IFtdCisgICAgZm9yIGxldHRlciwgbm9kZXMgaW4gbGV0dGVyX2dyb3VwczoKKyAgICAgICAgcyA9ICI8Yj48YSBocmVmPVwiI2xldHRlci0lc1wiPiVzPC9hPjwvYj4iICUgKGxldHRlciwgbGV0dGVyKQorICAgICAgICBpdGVtcy5hcHBlbmQocykKKyAgICBzID0gWyI8aHI+PGNlbnRlcj5cbiVzPC9jZW50ZXI+XG4iICUgc3RyaW5nLmpvaW4oaXRlbXMsICIgfFxuIildCisgICAgZm9yIGxldHRlciwgbm9kZXMgaW4gbGV0dGVyX2dyb3VwczoKKyAgICAgICAgcy5hcHBlbmQoZm9ybWF0X2xldHRlcihsZXR0ZXIpKQorICAgICAgICBzLmFwcGVuZChmb3JtYXRfbm9kZXMobm9kZXMsIGNvbHVtbnMpKQorICAgIHJldHVybiBzdHJpbmcuam9pbihzLCAnJykKKworZGVmIGZvcm1hdF9odG1sKG5vZGVzLCBjb2x1bW5zKToKKyAgICByZXR1cm4gZm9ybWF0X25vZGVzKG5vZGVzLCBjb2x1bW5zKQorCisKK2RlZiBjb2xsYXBzZShub2Rlcyk6CisgICAgIiIiQ29sbGFwc2Ugc2VxdWVuY2VzIG9mIG5vZGVzIHdpdGggbWF0Y2hpbmcga2V5cyBpbnRvIGEgc2luZ2xlIG5vZGUuCisgICAgRGVzdHJ1Y3RpdmUuIiIiCisgICAgaWYgbGVuKG5vZGVzKSA8IDI6CisgICAgICAgIHJldHVybgorICAgIHByZXYgPSBub2Rlc1swXQorICAgIGkgPSAxCisgICAgd2hpbGUgaSA8IGxlbihub2Rlcyk6CisgICAgICAgIG5vZGUgPSBub2Rlc1tpXQorICAgICAgICBpZiBub3Qgbm9kZS5jbXBfZW50cnkocHJldik6CisgICAgICAgICAgICBwcmV2LmxpbmtzLmFwcGVuZChub2RlLmxpbmtzWzBdKQorICAgICAgICAgICAgZGVsIG5vZGVzW2ldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgIHByZXYgPSBub2RlCisKKworZGVmIGR1bXAobm9kZXMsIGZwKToKKyAgICBmb3Igbm9kZSBpbiBub2RlczoKKyAgICAgICAgZnAud3JpdGUobm9kZS5kdW1wKCkpCisKKworZGVmIHByb2Nlc3Nfbm9kZXMobm9kZXMsIGNvbHVtbnMsIGxldHRlcnMpOgorICAgIG5vZGVzLnNvcnQoKQorICAgIGNvbGxhcHNlKG5vZGVzKQorICAgIGlmIGxldHRlcnM6CisgICAgICAgIHJldHVybiBmb3JtYXRfaHRtbF9sZXR0ZXJzKG5vZGVzLCBjb2x1bW5zKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmb3JtYXRfaHRtbChub2RlcywgY29sdW1ucykKKworCitkZWYgbWFpbigpOgorICAgIGltcG9ydCBnZXRvcHQKKyAgICBpZm4gPSAiLSIKKyAgICBvZm4gPSAiLSIKKyAgICBjb2x1bW5zID0gMQorICAgIGxldHRlcnMgPSAwCisgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiYzpsbzoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiY29sdW1ucz0iLCAibGV0dGVycyIsICJvdXRwdXQ9Il0pCisgICAgZm9yIG9wdCwgdmFsIGluIG9wdHM6CisgICAgICAgIGlmIG9wdCBpbiAoIi1vIiwgIi0tb3V0cHV0Iik6CisgICAgICAgICAgICBvZm4gPSB2YWwKKyAgICAgICAgZWxpZiBvcHQgaW4gKCItYyIsICItLWNvbHVtbnMiKToKKyAgICAgICAgICAgIGNvbHVtbnMgPSBzdHJpbmcuYXRvaSh2YWwpCisgICAgICAgIGVsaWYgb3B0IGluICgiLWwiLCAiLS1sZXR0ZXJzIik6CisgICAgICAgICAgICBsZXR0ZXJzID0gMQorICAgIGlmIG5vdCBhcmdzOgorICAgICAgICBhcmdzID0gW2lmbl0KKyAgICBub2RlcyA9IFtdCisgICAgZm9yIGZuIGluIGFyZ3M6CisgICAgICAgIG5vZGVzID0gbm9kZXMgKyBsb2FkKG9wZW4oZm4pKQorICAgIG51bV9ub2RlcyA9IGxlbihub2RlcykKKyAgICBodG1sID0gcHJvY2Vzc19ub2Rlcyhub2RlcywgY29sdW1ucywgbGV0dGVycykKKyAgICBwcm9ncmFtID0gb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKKyAgICBpZiBvZm4gPT0gIi0iOgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGh0bWwpCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlxuJXM6ICVkIGluZGV4IG5vZGVzIiAlIChwcm9ncmFtLCBudW1fbm9kZXMpKQorICAgIGVsc2U6CisgICAgICAgIG9wZW4ob2ZuLCAidyIpLndyaXRlKGh0bWwpCisgICAgICAgIHByaW50CisgICAgICAgIHByaW50ICIlczogJWQgaW5kZXggbm9kZXMiICUgKHByb2dyYW0sIG51bV9ub2RlcykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL2NoZWNrYXJncy5wbSBiL2RvYy90b29scy9jaGVja2FyZ3MucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1MmY2OQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9jaGVja2FyZ3MucG0KQEAgLTAsMCArMSwxMTIgQEAKKyMhL3Vucy9iaW4vcGVybAorCitwYWNrYWdlIGNoZWNrYXJnczsKK3JlcXVpcmUgNS4wMDQ7CQkJIyB1c2VzICJmb3IgbXkgJHZhciIKK3JlcXVpcmUgRXhwb3J0ZXI7CitASVNBID0gcXcoRXhwb3J0ZXIpOworQEVYUE9SVCA9IHF3KGNoZWNrX2FyZ3MgY2hlY2tfYXJnc19yYW5nZSBjaGVja19hcmdzX2F0X2xlYXN0KTsKK3VzZSBzdHJpY3Q7Cit1c2UgQ2FycDsKKworPWhlYWQxIE5BTUUKKworY2hlY2thcmdzIC0tIFByb3ZpZGUgcnVkaW1lbnRhcnkgYXJndW1lbnQgY2hlY2tpbmcgZm9yIHBlcmw1IGZ1bmN0aW9ucworCis9aGVhZDEgU1lOT1BTSVMKKworICBjaGVja19hcmdzKGNBcmdzRXhwZWN0ZWQsIEBfKQorICBjaGVja19hcmdzX3JhbmdlKGNBcmdzTWluLCBjQXJnc01heCwgQF8pCisgIGNoZWNrX2FyZ3NfYXRfbGVhc3QoY0FyZ3NNaW4sIEBfKQord2hlcmUgIkBfIiBzaG91bGQgYmUgc3VwcGxpZWQgbGl0ZXJhbGx5LgorCis9aGVhZDEgREVTQ1JJUFRJT04KKworQXMgdGhlIGZpcnN0IGxpbmUgb2YgdXNlci13cml0dGVuIHN1YnJvdXRpbmUgZm9vLCBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICBteSAoJGFyZzEsICRhcmcyKSA9IGNoZWNrX2FyZ3MoMiwgQF8pOworICBteSAoJGFyZzEsIEByZXN0KSA9IGNoZWNrX2FyZ3NfcmFuZ2UoMSwgNCwgQF8pOworICBteSAoJGFyZzEsIEByZXN0KSA9IGNoZWNrX2FyZ3NfYXRfbGVhc3QoMSwgQF8pOworICBteSBAYXJncyA9IGNoZWNrX2FyZ3NfYXRfbGVhc3QoMCwgQF8pOworCitUaGVzZSBmdW5jdGlvbnMgbWF5IGFsc28gYmUgY2FsbGVkIGZvciBzaWRlIGVmZmVjdCAocHV0IGEgY2FsbCB0byBvbmUKK29mIHRoZSBmdW5jdGlvbnMgbmVhciB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdWJyb3V0aW5lKSwgYnV0IHVzaW5nIHRoZQorYXJndW1lbnQgY2hlY2tlcnMgdG8gc2V0IHRoZSBhcmd1bWVudCBsaXN0IGlzIHRoZSByZWNvbW1lbmRlZCB1c2FnZS4KKworVGhlIG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHRoZWlyIGRlZmluZWRuZXNzIGFyZSBjaGVja2VkOyBpZiB0aGUgd3JvbmcKK251bWJlciBhcmUgcmVjZWl2ZWQsIHRoZSBwcm9ncmFtIGV4aXRzIHdpdGggYW4gZXJyb3IgbWVzc2FnZS4KKworPWhlYWQxIEFVVEhPUgorCitNaWNoYWVsIEQuIEVybnN0IDxGPG1lcm5zdEBjcy53YXNoaW5ndG9uLmVkdT4+CisKKz1jdXQKKworIyMgTmVlZCB0byBjaGVjayB0aGF0IHVzZSBvZiBjYWxsZXIoMSkgcmVhbGx5IGdpdmVzIGRlc2lyZWQgcmVzdWx0cy4KKyMjIE5lZWQgdG8gZ2l2ZSBpbnB1dCBjaHVuayBpbmZvcm1hdGlvbi4KKyMjIElzIHRoaXMgb2J2aWF0ZWQgYnkgUGVybCA1LjAwMydzIGRlY2xhcmF0aW9ucz8gIE5vdCBlbnRpcmVseSwgSSB0aGluay4KKworc3ViIGNoZWNrX2FyZ3MgKCAkQCApCit7CisgIG15ICgkbnVtX2Zvcm1hbHMsIEBhcmdzKSA9IEBfOworICBteSAoJHBhY2ssICRmaWxlX2FyZywgJGxpbmVfYXJnLCAkc3VibmFtZSwgJGhhc2FyZ3MsICR3YW50YXJyKSA9IGNhbGxlcigxKTsKKyAgaWYgKEBfIDwgMSkgeyBjcm9hayAiY2hlY2tfYXJncyBuZWVkcyBhdCBsZWFzdCA3IGFyZ3MsIGdvdCAiLCBzY2FsYXIoQF8pLCAiOiBAX1xuICI7IH0KKyAgaWYgKCghd2FudGFycmF5KSAmJiAoJG51bV9mb3JtYWxzICE9IDApKQorICAgIHsgY3JvYWsgImNoZWNrX2FyZ3MgY2FsbGVkIGluIHNjYWxhciBjb250ZXh0IjsgfQorICAjIENhbid0IHVzZSBjcm9hayBiZWxvdyBoZXJlOiBpdCB3b3VsZCBvbmx5IGdvIG91dCB0byBjYWxsZXIsIG5vdCBpdHMgY2FsbGVyCisgIG15ICRudW1fYWN0dWFscyA9IEBhcmdzOworICBpZiAoJG51bV9hY3R1YWxzICE9ICRudW1fZm9ybWFscykKKyAgICB7IGRpZSAiJGZpbGVfYXJnOiRsaW5lX2FyZzogZnVuY3Rpb24gJHN1Ym5hbWUgZXhwZWN0ZWQgJG51bV9mb3JtYWxzIGFyZ3VtZW50IiwKKyAgICAgICgoJG51bV9mb3JtYWxzID09IDEpID8gIiIgOiAicyIpLAorICAgICAgIiwgZ290ICRudW1fYWN0dWFscyIsCisgICAgICAoKCRudW1fYWN0dWFscyA9PSAwKSA/ICIiIDogIjogQGFyZ3MiKSwKKyAgICAgICJcbiI7IH0KKyAgZm9yIG15ICRpbmRleCAoMC4uJCNhcmdzKQorICAgIHsgaWYgKCFkZWZpbmVkKCRhcmdzWyRpbmRleF0pKQorCXsgZGllICIkZmlsZV9hcmc6JGxpbmVfYXJnOiBmdW5jdGlvbiAkc3VibmFtZSB1bmRlZmluZWQgYXJndW1lbnQgIiwgJGluZGV4KzEsICI6IEBhcmdzWzAuLiRpbmRleC0xXVxuIjsgfSB9CisgIHJldHVybiBAYXJnczsKK30KKworc3ViIGNoZWNrX2FyZ3NfcmFuZ2UgKCAkJEAgKQoreworICBteSAoJG1pbl9mb3JtYWxzLCAkbWF4X2Zvcm1hbHMsIEBhcmdzKSA9IEBfOworICBteSAoJHBhY2ssICRmaWxlX2FyZywgJGxpbmVfYXJnLCAkc3VibmFtZSwgJGhhc2FyZ3MsICR3YW50YXJyKSA9IGNhbGxlcigxKTsKKyAgaWYgKEBfIDwgMikgeyBjcm9hayAiY2hlY2tfYXJnc19yYW5nZSBuZWVkcyBhdCBsZWFzdCA4IGFyZ3MsIGdvdCAiLCBzY2FsYXIoQF8pLCAiOiBAXyI7IH0KKyAgaWYgKCghd2FudGFycmF5KSAmJiAoJG1heF9mb3JtYWxzICE9IDApICYmICgkbWluX2Zvcm1hbHMgIT0wKSApCisgICAgeyBjcm9hayAiY2hlY2tfYXJnc19yYW5nZSBjYWxsZWQgaW4gc2NhbGFyIGNvbnRleHQiOyB9CisgICMgQ2FuJ3QgdXNlIGNyb2FrIGJlbG93IGhlcmU6IGl0IHdvdWxkIG9ubHkgZ28gb3V0IHRvIGNhbGxlciwgbm90IGl0cyBjYWxsZXIKKyAgbXkgJG51bV9hY3R1YWxzID0gQGFyZ3M7CisgIGlmICgoJG51bV9hY3R1YWxzIDwgJG1pbl9mb3JtYWxzKSB8fCAoJG51bV9hY3R1YWxzID4gJG1heF9mb3JtYWxzKSkKKyAgICB7IGRpZSAiJGZpbGVfYXJnOiRsaW5lX2FyZzogZnVuY3Rpb24gJHN1Ym5hbWUgZXhwZWN0ZWQgJG1pbl9mb3JtYWxzLSRtYXhfZm9ybWFscyBhcmd1bWVudHMsIGdvdCAkbnVtX2FjdHVhbHMiLAorICAgICAgKCRudW1fYWN0dWFscyA9PSAwKSA/ICIiIDogIjogQGFyZ3MiLCAiXG4iOyB9CisgIGZvciBteSAkaW5kZXggKDAuLiQjYXJncykKKyAgICB7IGlmICghZGVmaW5lZCgkYXJnc1skaW5kZXhdKSkKKwl7IGRpZSAiJGZpbGVfYXJnOiRsaW5lX2FyZzogZnVuY3Rpb24gJHN1Ym5hbWUgdW5kZWZpbmVkIGFyZ3VtZW50ICIsICRpbmRleCsxLCAiOiBAYXJnc1swLi4kaW5kZXgtMV1cbiI7IH0gfQorICByZXR1cm4gQGFyZ3M7Cit9CisKK3N1YiBjaGVja19hcmdzX2F0X2xlYXN0ICggJEAgKQoreworICBteSAoJG1pbl9mb3JtYWxzLCBAYXJncykgPSBAXzsKKyAgbXkgKCRwYWNrLCAkZmlsZV9hcmcsICRsaW5lX2FyZywgJHN1Ym5hbWUsICRoYXNhcmdzLCAkd2FudGFycikgPSBjYWxsZXIoMSk7CisgICMgRG9uJ3QgZG8gdGhpcywgYmVjYXVzZSB3ZSB3YW50IGV2ZXJ5IHN1YiB0byBzdGFydCB3aXRoIGEgY2FsbCB0byBjaGVja19hcmdzKgorICAjIGlmICgkbWluX2Zvcm1hbHMgPT0gMCkKKyAgIyAgIHsgZGllICJJc24ndCBpdCBwb2ludGxlc3MgdG8gY2hlY2sgZm9yIGF0IGxlYXN0IHplcm8gYXJncyB0byAkc3VibmFtZT9cbiI7IH0KKyAgaWYgKHNjYWxhcihAXykgPCAxKQorICAgIHsgY3JvYWsgImNoZWNrX2FyZ3NfYXRfbGVhc3QgbmVlZHMgYXQgbGVhc3QgMSBhcmcsIGdvdCAiLCBzY2FsYXIoQF8pLCAiOiBAXyI7IH0KKyAgaWYgKCghd2FudGFycmF5KSAmJiAoJG1pbl9mb3JtYWxzICE9IDApKQorICAgIHsgY3JvYWsgImNoZWNrX2FyZ3NfYXRfbGVhc3QgY2FsbGVkIGluIHNjYWxhciBjb250ZXh0IjsgfQorICAjIENhbid0IHVzZSBjcm9hayBiZWxvdyBoZXJlOiBpdCB3b3VsZCBvbmx5IGdvIG91dCB0byBjYWxsZXIsIG5vdCBpdHMgY2FsbGVyCisgIG15ICRudW1fYWN0dWFscyA9IEBhcmdzOworICBpZiAoJG51bV9hY3R1YWxzIDwgJG1pbl9mb3JtYWxzKQorICAgIHsgZGllICIkZmlsZV9hcmc6JGxpbmVfYXJnOiBmdW5jdGlvbiAkc3VibmFtZSBleHBlY3RlZCBhdCBsZWFzdCAkbWluX2Zvcm1hbHMgYXJndW1lbnQiLAorICAgICAgKCRtaW5fZm9ybWFscyA9PSAxKSA/ICIiIDogInMiLAorICAgICAgIiwgZ290ICRudW1fYWN0dWFscyIsCisgICAgICAoJG51bV9hY3R1YWxzID09IDApID8gIiIgOiAiOiBAYXJncyIsICJcbiI7IH0KKyAgZm9yIG15ICRpbmRleCAoMC4uJCNhcmdzKQorICAgIHsgaWYgKCFkZWZpbmVkKCRhcmdzWyRpbmRleF0pKQorCXsgd2FybiAiJGZpbGVfYXJnOiRsaW5lX2FyZzogZnVuY3Rpb24gJHN1Ym5hbWUgdW5kZWZpbmVkIGFyZ3VtZW50ICIsICRpbmRleCsxLCAiOiBAYXJnc1swLi4kaW5kZXgtMV1cbiI7IGxhc3Q7IH0gfQorICByZXR1cm4gQGFyZ3M7Cit9CisKKzE7CQkJCSMgc3VjY2Vzc2Z1bCBpbXBvcnQKK19fRU5EX18KZGlmZiAtLWdpdCBhL2RvYy90b29scy9ja2xhdGV4IGIvZG9jL3Rvb2xzL2NrbGF0ZXgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzk2ZTkxNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9ja2xhdGV4CkBAIC0wLDAgKzEsMjYgQEAKKyMhIC9iaW4vc2gKKyMgIC0qLSBrc2ggLSotCisKKyMgVGhpcyBzY3JpcHQgKmhlbHBzKiBsb2NhdGUgbGluZXMgb2Ygbm9ybWFsIGNvbnRlbnQgdGhhdCBlbmQgaW4gJ30nOworIyB0aGlzIGlzIHVzZWZ1bCBzaW5jZSBMYVRlWDJIVE1MIChhdCBsZWFzdCB0aGUgb2xkIHZlcnNpb24gdGhhdCB3ZQorIyB1c2UpIGJyZWFrcyBvbiBtYW55IGxpbmVzIHRoYXQgZW5kIHRoYXQgd2F5LgorIworIyBVc2FnZTogY2tsYXRleCBmaWxlcy4uLiB8IGxlc3MKKyMKKyMgKlJlYWQqIHRoZSBvdXRwdXQgbG9va2luZyBmb3Igc3VzcGljaW91cyBsaW5lcyEKKworZ3JlcCAtbiAiW14gCV19XCQiICRAIHwgXAorIGdyZXAgLXYgJ1xcYmVnaW57JyB8IFwKKyBncmVwIC12ICdcXGVuZHsnIHwgXAorIGdyZXAgLXYgJ1xcaW5wdXR7JyB8IFwKKyBncmVwIC12ICdcXGRvY3VtZW50Y2xhc3N7JyB8IFwKKyBncmVwIC12ICdcXHRpdGxleycgfCBcCisgZ3JlcCAtdiAnXFxjaGFwdGVyeycgfCBcCisgZ3JlcCAtdiAnXFxjaGFwdGVyXCp7JyB8IFwKKyBncmVwIC12ICdcXHNlY3Rpb257JyB8IFwKKyBncmVwIC12ICdcXHN1YnNlY3Rpb257JyB8IFwKKyBncmVwIC12ICdcXHN1YnN1YnNlY3Rpb257JyB8IFwKKyBncmVwIC12ICdcXHNlY3Rpb25hdXRob3J7JyB8IFwKKyBncmVwIC12ICdcXG1vZHVsZWF1dGhvcnsnCisKK2V4aXQgJD8KZGlmZiAtLWdpdCBhL2RvYy90b29scy9jdXN0bGliLnB5IGIvZG9jL3Rvb2xzL2N1c3RsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk1ODQ1MQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9jdXN0bGliLnB5CkBAIC0wLDAgKzEsNzMgQEAKKyMgR2VuZXJhdGUgY3VzdGxpYi50ZXgsIHdoaWNoIGlzIGEgc2l0ZS1zcGVjaWZpYyBsaWJyYXJ5IGRvY3VtZW50LgorCisjIFBoYXNlIEk6IGxpc3QgYWxsIHRoZSB0aGluZ3MgdGhhdCBjYW4gYmUgaW1wb3J0ZWQKKworaW1wb3J0IGdsb2IsIG9zLCBzeXMsIHN0cmluZworbW9kdWxlcz17fQorCitmb3IgbW9kbmFtZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgbW9kdWxlc1ttb2RuYW1lXT1tb2RuYW1lCisgICAgCitmb3IgZGlyIGluIHN5cy5wYXRoOgorICAgICMgTG9vayBmb3IgKi5weSBmaWxlcworICAgIGZpbGVsaXN0PWdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oZGlyLCAnKi5weScpKQorICAgIGZvciBmaWxlIGluIGZpbGVsaXN0OiAKKyAgICAgICAgcGF0aCwgZmlsZSA9IG9zLnBhdGguc3BsaXQoZmlsZSkKKyAgICAgICAgYmFzZSwgZXh0PW9zLnBhdGguc3BsaXRleHQoZmlsZSkKKyAgICAgICAgbW9kdWxlc1tzdHJpbmcubG93ZXIoYmFzZSldPWJhc2UKKworICAgICMgTG9vayBmb3Igc2hhcmVkIGxpYnJhcnkgZmlsZXMKKyAgICBmaWxlbGlzdD0oZ2xvYi5nbG9iKG9zLnBhdGguam9pbihkaXIsICcqLnNvJykpICsgCisgICAgICAgICAgICAgIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oZGlyLCAnKi5zbCcpKSArCisgICAgICAgICAgICAgIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oZGlyLCAnKi5vJykpICkKKyAgICBmb3IgZmlsZSBpbiBmaWxlbGlzdDogCisgICAgICAgIHBhdGgsIGZpbGUgPSBvcy5wYXRoLnNwbGl0KGZpbGUpCisgICAgICAgIGJhc2UsIGV4dD1vcy5wYXRoLnNwbGl0ZXh0KGZpbGUpCisgICAgICAgIGlmIGJhc2VbLTY6XT09J21vZHVsZSc6IGJhc2U9YmFzZVs6LTZdCisgICAgICAgIG1vZHVsZXNbc3RyaW5nLmxvd2VyKGJhc2UpXT1iYXNlCisKKyMgTWlub3Igb2RkaXR5OiB0aGUgdHlwZXMgbW9kdWxlIGlzIGRvY3VtZW50ZWQgaW4gbGlidHlwZXMyLnRleAoraWYgbW9kdWxlcy5oYXNfa2V5KCd0eXBlcycpOgorICAgIGRlbCBtb2R1bGVzWyd0eXBlcyddIDsgbW9kdWxlc1sndHlwZXMyJ109Tm9uZQorCisjIFBoYXNlIElJOiBmaW5kIGFsbCBkb2N1bWVudGF0aW9uIGZpbGVzIChsaWIqLnRleCkKKyMgICAgICAgICAgIGFuZCBlbGltaW5hdGUgbW9kdWxlcyB0aGF0IGRvbid0IGhhdmUgb25lLgorCitkb2NzPXt9CitmaWxlbGlzdD1nbG9iLmdsb2IoJ2xpYioudGV4JykKK2ZvciBmaWxlIGluIGZpbGVsaXN0OgorICAgIG1vZG5hbWU9ZmlsZVszOi00XQorICAgIGRvY3NbbW9kbmFtZV09bW9kbmFtZQorCittbGlzdD1tb2R1bGVzLmtleXMoKQorbWxpc3Q9ZmlsdGVyKGxhbWJkYSB4LCBkb2NzPWRvY3M6IGRvY3MuaGFzX2tleSh4KSwgbWxpc3QpCittbGlzdC5zb3J0KCkKK21saXN0PW1hcChsYW1iZGEgeCwgZG9jcz1kb2NzOiBkb2NzW3hdLCBtbGlzdCkKKworbW9kdWxlcz1tbGlzdAorCisjIFBoYXNlIElJSTogd3JpdGUgY3VzdGxpYi50ZXgKKworIyBXcml0ZSB0aGUgYm9pbGVycGxhdGUKKyMgWFhYIHNob3VsZCBiZSBmYW5jaWVkIHVwLiAgCitwcmludCAiIiJcZG9jdW1lbnRzdHlsZVt0d29zaWRlLDExcHQsbXlmb3JtYXRde3JlcG9ydH0KK1xcdGl0bGV7UHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlfQorXFxpbnB1dHtib2lsZXJwbGF0ZX0KK1xcbWFrZWluZGV4ICAgICAgICAgICAgICAgICAgICAgJSB0ZWxsIFxcaW5kZXggdG8gYWN0dWFsbHkgd3JpdGUgdGhlIC5pZHggZmlsZQorXFxiZWdpbntkb2N1bWVudH0KK1xccGFnZW51bWJlcmluZ3tyb21hbn0KK1xcbWFrZXRpdGxlCitcXGlucHV0e2NvcHlyaWdodH0KK1xcYmVnaW57YWJzdHJhY3R9CitcXG5vaW5kZW50IFRoaXMgaXMgYSBjdXN0b21pemVkIHZlcnNpb24gb2YgdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZS4KK1xcZW5ke2Fic3RyYWN0fQorXFxwYWdlYnJlYWsKK3tcXHBhcnNraXAgPSAwbW0gXFx0YWJsZW9mY29udGVudHN9CitcXHBhZ2VicmVha1xccGFnZW51bWJlcmluZ3thcmFiaWN9IiIiCisgICAgCitmb3IgbW9kbmFtZSBpbiBtbGlzdDogCisgICAgcHJpbnQgIlxcaW5wdXR7bGliJXN9IiAlIChtb2RuYW1lLCkKKyAgICAKKyMgV3JpdGUgdGhlIGVuZAorcHJpbnQgIiIiXFxpbnB1dHtjdXN0bGliLmluZH0gICAgICAgICAgICAgICAgICAgJSBJbmRleAorXFxlbmR7ZG9jdW1lbnR9IiIiCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvY3ZzaW5mby5weSBiL2RvYy90b29scy9jdnNpbmZvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YTMyYzIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvY3ZzaW5mby5weQpAQCAtMCwwICsxLDgxIEBACisiIiJVdGlsaXR5IGNsYXNzIGFuZCBmdW5jdGlvbiB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIENWUyByZXBvc2l0b3J5CitiYXNlZCBvbiBjaGVja2VkLW91dCBmaWxlcy4KKyIiIgorCitpbXBvcnQgb3MKKworCitkZWYgZ2V0X3JlcG9zaXRvcnlfbGlzdChwYXRocyk6CisgICAgZCA9IHt9CisgICAgZm9yIG5hbWUgaW4gcGF0aHM6CisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG5hbWUpOgorICAgICAgICAgICAgZGlyID0gb3MucGF0aC5kaXJuYW1lKG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaXIgPSBuYW1lCisgICAgICAgIHJvb3RmaWxlID0gb3MucGF0aC5qb2luKG5hbWUsICJDVlMiLCAiUm9vdCIpCisgICAgICAgIHJvb3QgPSBvcGVuKHJvb3RmaWxlKS5yZWFkbGluZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgbm90IGQuaGFzX2tleShyb290KToKKyAgICAgICAgICAgIGRbcm9vdF0gPSBSZXBvc2l0b3J5SW5mbyhkaXIpLCBbbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRbcm9vdF1bMV0uYXBwZW5kKG5hbWUpCisgICAgcmV0dXJuIGQudmFsdWVzKCkKKworCitjbGFzcyBSZXBvc2l0b3J5SW5mbzoKKyAgICAiIiJSZWNvcmQgaG9sZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVwb3NpdG9yeSB3ZSB3YW50IHRvIHRhbGsgdG8uIiIiCisgICAgY3Zzcm9vdF9wYXRoID0gTm9uZQorICAgIGJyYW5jaCA9IE5vbmUKKworICAgICMgdHlwZSBpcyAnJywgJzpleHQnLCBvciAnOnBzZXJ2ZXI6JworICAgIHR5cGUgPSAiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpcj1Ob25lKToKKyAgICAgICAgaWYgZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBkaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBkaXIgPSBvcy5wYXRoLmpvaW4oZGlyLCAiQ1ZTIikKKyAgICAgICAgcm9vdCA9IG9wZW4ob3MucGF0aC5qb2luKGRpciwgIlJvb3QiKSkucmVhZGxpbmUoKS5zdHJpcCgpCisgICAgICAgIGlmIHJvb3Quc3RhcnRzd2l0aCgiOnBzZXJ2ZXI6Iik6CisgICAgICAgICAgICBzZWxmLnR5cGUgPSAiOnBzZXJ2ZXI6IgorICAgICAgICAgICAgcm9vdCA9IHJvb3RbbGVuKCI6cHNlcnZlcjoiKTpdCisgICAgICAgIGVsaWYgIjoiIGluIHJvb3Q6CisgICAgICAgICAgICBpZiByb290LnN0YXJ0c3dpdGgoIjpleHQ6Iik6CisgICAgICAgICAgICAgICAgcm9vdCA9IHJvb3RbbGVuKCI6ZXh0OiIpOl0KKyAgICAgICAgICAgIHNlbGYudHlwZSA9ICI6ZXh0OiIKKyAgICAgICAgc2VsZi5yZXBvc2l0b3J5ID0gcm9vdAorICAgICAgICBpZiAiOiIgaW4gcm9vdDoKKyAgICAgICAgICAgIGhvc3QsIHBhdGggPSByb290LnNwbGl0KCI6IiwgMSkKKyAgICAgICAgICAgIHNlbGYuY3Zzcm9vdF9wYXRoID0gcGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jdnNyb290X3BhdGggPSByb290CisgICAgICAgIGZuID0gb3MucGF0aC5qb2luKGRpciwgIlRhZyIpCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgICAgIHNlbGYuYnJhbmNoID0gb3BlbihmbikucmVhZGxpbmUoKS5zdHJpcCgpWzE6XQorCisgICAgZGVmIGdldF9jdnNyb290KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50eXBlICsgc2VsZi5yZXBvc2l0b3J5CisKKyAgICBfcmVwb3NpdG9yeV9kaXJfY2FjaGUgPSB7fQorCisgICAgZGVmIGdldF9yZXBvc2l0b3J5X2ZpbGUoc2VsZiwgcGF0aCk6CisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5hYnNwYXRoKHBhdGgpCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICBkaXIgPSBwYXRoCisgICAgICAgICAgICBqb2luID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGlyID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisgICAgICAgICAgICBqb2luID0gMQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXBvZGlyID0gc2VsZi5fcmVwb3NpdG9yeV9kaXJfY2FjaGVbZGlyXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXBvZm4gPSBvcy5wYXRoLmpvaW4oZGlyLCAiQ1ZTIiwgIlJlcG9zaXRvcnkiKQorICAgICAgICAgICAgcmVwb2RpciA9IG9wZW4ocmVwb2ZuKS5yZWFkbGluZSgpLnN0cmlwKCkKKyAgICAgICAgICAgIHJlcG9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5jdnNyb290X3BhdGgsIHJlcG9kaXIpCisgICAgICAgICAgICBzZWxmLl9yZXBvc2l0b3J5X2Rpcl9jYWNoZVtkaXJdID0gcmVwb2RpcgorICAgICAgICBpZiBqb2luOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocmVwb2Rpciwgb3MucGF0aC5iYXNlbmFtZShwYXRoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZuID0gcmVwb2RpcgorICAgICAgICByZXR1cm4gZm5bbGVuKHNlbGYuY3Zzcm9vdF9wYXRoKSsxOl0KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8UmVwb3NpdG9yeUluZm8gZm9yICVzPiIgJSBgc2VsZi5nZXRfY3Zzcm9vdCgpYApkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL2ZpbmRhY2tzIGIvZG9jL3Rvb2xzL2ZpbmRhY2tzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxM2IwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvZmluZGFja3MKQEAgLTAsMCArMSwxNjEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIiIiU2NyaXB0IHRvIGxvY2F0ZSBlbWFpbCBhZGRyZXNzZXMgaW4gdGhlIENWUyBsb2dzLiIiIgorX192ZXJzaW9uX18gPSAnJFJldmlzaW9uOiAxLjEuMS4xICQnCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgVXNlckRpY3QKKworaW1wb3J0IGN2c2luZm8KKworCitjbGFzcyBBY2tub3dsZWRnZW1lbnRzKFVzZXJEaWN0LlVzZXJEaWN0KToKKyAgICBkZWYgYWRkKHNlbGYsIGVtYWlsLCBuYW1lLCBwYXRoKToKKyAgICAgICAgZCA9IHNlbGYuZGF0YQorICAgICAgICBkLnNldGRlZmF1bHQoZW1haWwsIHt9KVtwYXRoXSA9IG5hbWUKKworCitkZWYgb3Blbl9jdnNfbG9nKGluZm8sIHBhdGhzPU5vbmUpOgorICAgIGN2c3Jvb3QgPSBpbmZvLmdldF9jdnNyb290KCkKKyAgICBjbWQgPSAiY3ZzIC1xIC1kJXMgbG9nICIgJSBjdnNyb290CisgICAgaWYgcGF0aHM6CisgICAgICAgIGNtZCArPSAiICIuam9pbihwYXRocykKKyAgICByZXR1cm4gb3MucG9wZW4oY21kLCAiciIpCisKKworZW1haWxfcnggPSByZS5jb21waWxlKCI8KFthLXpdWy1hLXowLTkuX10qQFstYS16MC05Ll0rKT4iLCByZS5JR05PUkVDQVNFKQorCitkZWYgZmluZF9hY2tzKGYsIGFja3MpOgorICAgIHByZXYgPSAnJworICAgIGZpbGVuYW1lID0gTm9uZQorICAgIE1BR0lDX1dPUkRTID0gKCd2YW4nLCAndm9uJykKKyAgICB3aGlsZSAxOgorICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJXb3JraW5nIGZpbGU6ICIpOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBsaW5lLnNwbGl0KE5vbmUsIDIpWzJdLnN0cmlwKCkKKyAgICAgICAgICAgIHByZXYgPSBsaW5lCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBtID0gZW1haWxfcnguc2VhcmNoKGxpbmUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICB3b3JkcyA9IHByZXYuc3BsaXQoKSArIGxpbmVbOm0uc3RhcnQoKV0uc3BsaXQoKQorICAgICAgICAgICAgTCA9IFtdCisgICAgICAgICAgICB3aGlsZSB3b3JkcyBcCisgICAgICAgICAgICAgICAgICBhbmQgKHdvcmRzWy0xXVswXS5pc3VwcGVyKCkgb3Igd29yZHNbLTFdIGluIE1BR0lDX1dPUkRTKToKKyAgICAgICAgICAgICAgICBMLmluc2VydCgwLCB3b3Jkcy5wb3AoKSkKKyAgICAgICAgICAgIG5hbWUgPSAiICIuam9pbihMKQorICAgICAgICAgICAgZW1haWwgPSBtLmdyb3VwKDEpLmxvd2VyKCkKKyAgICAgICAgICAgIGFja3MuYWRkKGVtYWlsLCBuYW1lLCBmaWxlbmFtZSkKKyAgICAgICAgcHJldiA9IGxpbmUKKworCitkZWYgbG9hZF9jdnNfbG9nX2Fja3MoYWNrcywgYXJncyk6CisgICAgcmVwb2xpc3QgPSBjdnNpbmZvLmdldF9yZXBvc2l0b3J5X2xpc3QoYXJncyBvciBbIiJdKQorICAgIGZvciBpbmZvLCBwYXRocyBpbiByZXBvbGlzdDoKKyAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiUmVwb3NpdG9yeToiLCBpbmZvLmdldF9jdnNyb290KCkKKyAgICAgICAgZiA9IG9wZW5fY3ZzX2xvZyhpbmZvLCBwYXRocykKKyAgICAgICAgZmluZF9hY2tzKGYsIGFja3MpCisgICAgICAgIGYuY2xvc2UoKQorCisKK2RlZiBsb2FkX3RleF9zb3VyY2VfYWNrcyhhY2tzLCBhcmdzKToKKyAgICBmb3IgcGF0aCBpbiBhcmdzOgorICAgICAgICBwYXRoID0gcGF0aCBvciBvcy5jdXJkaXIKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6CisgICAgICAgICAgICByZWFkX2Fja3NfZnJvbV90ZXhfZmlsZShhY2tzLCBwYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhZF9hY2tzX2Zyb21fdGV4X2RpcihhY2tzLCBwYXRoKQorCisKK2RlZiByZWFkX2Fja3NfZnJvbV90ZXhfZmlsZShhY2tzLCBwYXRoKToKKyAgICBmID0gb3BlbihwYXRoKQorICAgIHdoaWxlIDE6CisgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgociJcc2VjdGlvbmF1dGhvcnsiKToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lW2xlbihyIlxzZWN0aW9uYXV0aG9yIik6XQorICAgICAgICAgICAgbmFtZSwgbGluZSA9IGV4dHJhY3RfdGV4X2dyb3VwKGxpbmUpCisgICAgICAgICAgICBlbWFpbCwgbGluZSA9IGV4dHJhY3RfdGV4X2dyb3VwKGxpbmUpCisgICAgICAgICAgICBhY2tzLmFkZChlbWFpbCwgbmFtZSwgcGF0aCkKKworCitkZWYgcmVhZF9hY2tzX2Zyb21fdGV4X2RpcihhY2tzLCBwYXRoKToKKyAgICBzdGFjayA9IFtwYXRoXQorICAgIHdoaWxlIHN0YWNrOgorICAgICAgICBwID0gc3RhY2sucG9wKCkKKyAgICAgICAgZm9yIG4gaW4gb3MubGlzdGRpcihwKToKKyAgICAgICAgICAgIG4gPSBvcy5wYXRoLmpvaW4ocCwgbikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIobik6CisgICAgICAgICAgICAgICAgc3RhY2suaW5zZXJ0KDAsIG4pCisgICAgICAgICAgICBlbGlmIG9zLnBhdGgubm9ybXBhdGgobikuZW5kc3dpdGgoIi50ZXgiKToKKyAgICAgICAgICAgICAgICByZWFkX2Fja3NfZnJvbV90ZXhfZmlsZShhY2tzLCBuKQorCisKK2RlZiBleHRyYWN0X3RleF9ncm91cChzKToKKyAgICBjID0gMAorICAgIGZvciBpIGluIHJhbmdlKGxlbihzKSk6CisgICAgICAgIGlmIHNbaV0gPT0gJ3snOgorICAgICAgICAgICAgYyArPSAxCisgICAgICAgIGVsaWYgc1tpXSA9PSAnfSc6CisgICAgICAgICAgICBjIC09IDEKKyAgICAgICAgICAgIGlmIGMgPT0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc1sxOmldLCBzW2krMTpdCisKKworZGVmIHByaW50X2Fja3MoYWNrcyk6CisgICAgZmlyc3QgPSAxCisgICAgZm9yIGVtYWlsLCBEIGluIGFja3MuaXRlbXMoKToKKyAgICAgICAgaWYgZmlyc3Q6CisgICAgICAgICAgICBmaXJzdCA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50CisgICAgICAgIEwgPSBELml0ZW1zKCkKKyAgICAgICAgTC5zb3J0KCkKKyAgICAgICAgcHJlZm5hbWUgPSBMWzBdWzFdCisgICAgICAgIGZvciBmaWxlLCBuYW1lIGluIExbMTpdOgorICAgICAgICAgICAgaWYgbmFtZSAhPSBwcmVmbmFtZToKKyAgICAgICAgICAgICAgICBwcmVmbmFtZSA9ICIiCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgcHJlZm5hbWU6CisgICAgICAgICAgICBwcmludCBwcmVmbmFtZSwgIjwlcz46IiAlIGVtYWlsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCBlbWFpbCArICI6IgorICAgICAgICBmb3IgZmlsZSwgbmFtZSBpbiBMOgorICAgICAgICAgICAgaWYgbmFtZSA9PSBwcmVmbmFtZToKKyAgICAgICAgICAgICAgICBwcmludCAiICAgICIgKyBmaWxlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICIgICAgJXMgKGFzICVzKSIgJSAoZmlsZSwgbmFtZSkKKworCitkZWYgcHJpbnRfYWNrX25hbWVzKGFja3MpOgorICAgIG5hbWVzID0gW10KKyAgICBmb3IgZW1haWwsIEQgaW4gYWNrcy5pdGVtcygpOgorICAgICAgICBMID0gRC5pdGVtcygpCisgICAgICAgIEwuc29ydCgpCisgICAgICAgIHByZWZuYW1lID0gTFswXVsxXQorICAgICAgICBmb3IgZmlsZSwgbmFtZSBpbiBMWzE6XToKKyAgICAgICAgICAgIHByZWZuYW1lID0gcHJlZm5hbWUgb3IgbmFtZQorICAgICAgICBuYW1lcy5hcHBlbmQocHJlZm5hbWUgb3IgZW1haWwpCisgICAgZGVmIGYoczEsIHMyKToKKyAgICAgICAgczEgPSBzMS5sb3dlcigpCisgICAgICAgIHMyID0gczIubG93ZXIoKQorICAgICAgICByZXR1cm4gY21wKChzMS5zcGxpdCgpWy0xXSwgczEpLAorICAgICAgICAgICAgICAgICAgIChzMi5zcGxpdCgpWy0xXSwgczIpKQorICAgIG5hbWVzLnNvcnQoZikKKyAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgcHJpbnQgbmFtZQorCisKK2RlZiBtYWluKCk6CisgICAgYXJncyA9IHN5cy5hcmd2WzE6XQorICAgIGFja3MgPSBBY2tub3dsZWRnZW1lbnRzKCkKKyAgICBsb2FkX2N2c19sb2dfYWNrcyhhY2tzLCBhcmdzKQorICAgIGxvYWRfdGV4X3NvdXJjZV9hY2tzKGFja3MsIGFyZ3MpCisgICAgcHJpbnRfYWNrX25hbWVzKGFja3MpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2RvYy90b29scy9maW5kbW9kcmVmcyBiL2RvYy90b29scy9maW5kbW9kcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YzVmOTNmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL2ZpbmRtb2RyZWZzCkBAIC0wLDAgKzEsNjMgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyMgIC0qLSBQeXRob24gLSotCisKK2ltcG9ydCBmaWxlaW5wdXQKK2ltcG9ydCBnZXRvcHQKK2ltcG9ydCBnbG9iCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworCisKK2RlY2xhcmVfcnggPSByZS5jb21waWxlKAorICAgIHIiXFxkZWNsYXJlbW9kdWxlKD86XFtbYS16QS1aMC05XSpcXSopP3tbYS16QS1aXzAtOV0rfXsoW2EtekEtWl8wLTldKyl9IikKKworbW9kdWxlX3J4ID0gcmUuY29tcGlsZShyIlxcbW9kdWxleyhbYS16QS1aXzAtOV0rKX0iKQorCitkZWYgbWFpbigpOgorICAgIHRyeToKKyAgICAgICAganVzdF9saXN0ID0gMAorICAgICAgICBwcmludF9saW5lbm8gPSAwCisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgImxuIiwgWyJsaXN0IiwgIm51bWJlciJdKQorICAgICAgICBmb3Igb3B0LCBhcmcgaW4gb3B0czoKKyAgICAgICAgICAgIGlmIG9wdCBpbiAoIi1sIiwgIi0tbGlzdCIpOgorICAgICAgICAgICAgICAgIGp1c3RfbGlzdCA9IDEKKyAgICAgICAgICAgIGVsaWYgb3B0IGluICgiLW4iLCAiLS1udW1iZXIiKToKKyAgICAgICAgICAgICAgICBwcmludF9saW5lbm8gPSAxCisgICAgICAgIGZpbGVzID0gYXJncworICAgICAgICBpZiBub3QgZmlsZXM6CisgICAgICAgICAgICBmaWxlcyA9IGdsb2IuZ2xvYigiKi50ZXgiKQorICAgICAgICAgICAgZmlsZXMuc29ydCgpCisgICAgICAgIG1vZHVsZW5hbWUgPSBOb25lCisgICAgICAgIGZvciBsaW5lIGluIGZpbGVpbnB1dC5pbnB1dChmaWxlcyk6CisgICAgICAgICAgICBpZiBsaW5lWzo5XSA9PSByIlxzZWN0aW9ueyI6CisgICAgICAgICAgICAgICAgbW9kdWxlbmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbGluZVs6MTZdID09IHIiXG1vZHVsZXN5bm9wc3lzeyI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG0gPSBkZWNsYXJlX3J4Lm1hdGNoKGxpbmUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIG1vZHVsZW5hbWUgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBtb2R1bGVuYW1lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBtID0gbW9kdWxlX3J4LnNlYXJjaChsaW5lKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBuYW1lID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgIGlmIG5hbWUgIT0gbW9kdWxlbmFtZToKKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlaW5wdXQuZmlsZW5hbWUoKQorICAgICAgICAgICAgICAgICAgICBpZiBqdXN0X2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBmaWxlbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZWlucHV0Lm5leHRmaWxlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZW5hbWUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGVsaWYgcHJpbnRfbGluZW5vOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVzKCVkKTolcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZmlsZW5hbWUsIGZpbGVpbnB1dC5maWxlbGluZW5vKCksIGxpbmVbOi0xXSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIlczolcyIgJSAoZmlsZW5hbWUsIGxpbmVbOi0xXSkKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHN5cy5leGl0KDEpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2RvYy90b29scy9maXhfaGFjayBiL2RvYy90b29scy9maXhfaGFjawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZGFkMTExCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL2ZpeF9oYWNrCkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCitzZWQgLWUgJ3Mve1xccHR0WyAJXSpcXGNoYXJbIAldKiciJyInMTM3fS9fL2cnIDwiJDEiID4gIkAkMSIgJiYgbXYgIkAkMSIgJDEKZGlmZiAtLWdpdCBhL2RvYy90b29scy9maXhfbGliYXV4LnNlZCBiL2RvYy90b29scy9maXhfbGliYXV4LnNlZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYjMzY2M1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL2ZpeF9saWJhdXguc2VkCkBAIC0wLDAgKzEsMyBAQAorIyEgL2Jpbi9zZWQgLWYKK3Mve1xcdHQgIFxcaGFja3Njb3JlICB7fVxcaGFja3Njb3JlICB7fS9cXHNlY3Rjb2Rle19fLworcy9cXGhhY2tzY29yZSAge31cXGhhY2tzY29yZSAge30vX18vCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvZml4aW5mby5lbCBiL2RvYy90b29scy9maXhpbmZvLmVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2N2E3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvZml4aW5mby5lbApAQCAtMCwwICsxLDE1IEBACisoZGVmdW4gZml4LXB5dGhvbi10ZXhpbmZvICgpCisgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgIChyZXBsYWNlLXJlZ2V4cCAiXFwoQHNldGZpbGVuYW1lIFxcKVxcKFstYS16XSpcXCkkIgorCQkgICJcXDFweXRob24tXFwyLmluZm8iKQorICAocmVwbGFjZS1zdHJpbmcgIkBub2RlIEZyb250IE1hdHRlclxuQGNoYXB0ZXIgQWJzdHJhY3RcbiIKKwkJICAiQG5vZGUgQWJzdHJhY3RcbkBzZWN0aW9uIEFic3RyYWN0XG4iKQorICAobWFyay13aG9sZS1idWZmZXIpCisgICh0ZXhpbmZvLW1hc3Rlci1tZW51ICd1cGRhdGUtYWxsLW5vZGVzKQorICAoc2F2ZS1idWZmZXIpCisgICkJOzsgZml4LXB5dGhvbi10ZXhpbmZvCisKKzs7IG5vdyByZWFsbHkgZG8gaXQ6CisoZmluZC1maWxlIChjYXIgY29tbWFuZC1saW5lLWFyZ3MtbGVmdCkpCisoZml4LXB5dGhvbi10ZXhpbmZvKQorKGtpbGwtZW1hY3MpCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvZ2V0cGFnZWNvdW50cyBiL2RvYy90b29scy9nZXRwYWdlY291bnRzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3OWNlZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvZ2V0cGFnZWNvdW50cwpAQCAtMCwwICsxLDg4IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjICAtKi0gUHl0aG9uIC0qLQorCisiIiJHZW5lcmF0ZSBhIHBhZ2UgY291bnQgcmVwb3J0IG9mIHRoZSBQb3N0U2NyaXB0IHZlcnNpb24gb2YgdGhlIG1hbnVhbHMuIiIiCisKK19fdmVyc2lvbl9fID0gJyRSZXZpc2lvbjogMS4xLjEuMSAkJworCisKK2NsYXNzIFBhZ2VDb3VudGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5kb2NsaXN0ID0gW10KKyAgICAgICAgc2VsZi50b3RhbCA9IDAKKyAgICAgICAgc2VsZi50aXRsZV93aWR0aCA9IDAKKworICAgIGRlZiBhZGRfZG9jdW1lbnQoc2VsZiwgcHJlZml4LCB0aXRsZSk6CisgICAgICAgIGNvdW50ID0gY291bnRfcGFnZXMocHJlZml4ICsgIi5wcyIpCisgICAgICAgIHNlbGYuZG9jbGlzdC5hcHBlbmQoKHRpdGxlLCBwcmVmaXgsIGNvdW50KSkKKyAgICAgICAgc2VsZi50aXRsZV93aWR0aCA9IG1heChzZWxmLnRpdGxlX3dpZHRoLCBsZW4odGl0bGUpKQorICAgICAgICBzZWxmLnRvdGFsID0gc2VsZi50b3RhbCArIGNvdW50CisKKyAgICBkZWYgZHVtcChzZWxmKToKKyAgICAgICAgZm10ID0gIiUlLSVkcyAgKCUlcy5wcywgJSVkIHBhZ2VzKSIgJSBzZWxmLnRpdGxlX3dpZHRoCisgICAgICAgIGZvciBpdGVtIGluIHNlbGYuZG9jbGlzdDoKKyAgICAgICAgICAgIHByaW50IGZtdCAlIGl0ZW0KKyAgICAgICAgcHJpbnQKKyAgICAgICAgcHJpbnQgIiAgVG90YWwgcGFnZSBjb3VudDogICVkIiAlIHNlbGYudG90YWwKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIGZvciBwcmVmaXgsIHRpdGxlIGluIFsKKyAgICAgICAgICAgICgiYXBpIiwgIlB5dGhvbi9DIEFQSSIpLAorICAgICAgICAgICAgKCJleHQiLCAiRXh0ZW5kaW5nIGFuZCBFbWJlZGRpbmcgdGhlIFB5dGhvbiBJbnRlcnByZXRlciIpLAorICAgICAgICAgICAgKCJsaWIiLCAiUHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlIiksCisgICAgICAgICAgICAoIm1hYyIsICJNYWNpbnRvc2ggTW9kdWxlIFJlZmVyZW5jZSIpLAorICAgICAgICAgICAgKCJyZWYiLCAiUHl0aG9uIFJlZmVyZW5jZSBNYW51YWwiKSwKKyAgICAgICAgICAgICgidHV0IiwgIlB5dGhvbiBUdXRvcmlhbCIpLAorICAgICAgICAgICAgKCJkb2MiLCAiRG9jdW1lbnRpbmcgUHl0aG9uIiksCisgICAgICAgICAgICAoImluc3QiLCAiSW5zdGFsbGluZyBQeXRob24gTW9kdWxlcyIpLAorICAgICAgICAgICAgKCJkaXN0IiwgIkRpc3RyaWJ1dGluZyBQeXRob24gTW9kdWxlcyIpLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHNlbGYuYWRkX2RvY3VtZW50KHByZWZpeCwgdGl0bGUpCisgICAgICAgIHByaW50IHNlbGYuUFJFRklYCisgICAgICAgIHNlbGYuZHVtcCgpCisgICAgICAgIHByaW50IHNlbGYuU1VGRklYCisKKyAgICBQUkVGSVggPSAiIiJcCitUaGlzIGlzIHRoZSBQb3N0U2NyaXB0IHZlcnNpb24gb2YgdGhlIHN0YW5kYXJkIFB5dGhvbiBkb2N1bWVudGF0aW9uLgorSWYgeW91IHBsYW4gdG8gcHJpbnQgdGhpcywgYmUgYXdhcmUgdGhhdCBzb21lIG9mIHRoZSBkb2N1bWVudHMgYXJlCitsb25nLiAgSXQgaXMgZm9ybWF0dGVkIGZvciBwcmludGluZyBvbiB0d28tc2lkZWQgcGFwZXI7IGlmIHlvdSBkbyBwbGFuCit0byBwcmludCB0aGlzLCAqcGxlYXNlKiBwcmludCB0d28tc2lkZWQgaWYgeW91IGhhdmUgYSBwcmludGVyIGNhcGFibGUKK29mIGl0ISAgVG8gbG9jYXRlIHB1Ymxpc2hlZCBjb3BpZXMgb2YgdGhlIGxhcmdlciBtYW51YWxzLCBvciBvdGhlcgorUHl0aG9uIHJlZmVyZW5jZSBtYXRlcmlhbCwgY29uc3VsdCB0aGUgUFNBIE9ubGluZSBCb29rc3RvcmUgYXQ6CisKKyAgICAgICAgICAgICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNhL2Jvb2tzdG9yZS8KKworVGhlIGZvbGxvd2luZyBtYW51YWxzIGFyZSBpbmNsdWRlZDoKKyIiIgorICAgIFNVRkZJWCA9ICIiIlwKKworCitJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLCBjb21tZW50cywgb3Igc3VnZ2VzdGlvbnMgcmVnYXJkaW5nIHRoZXNlCitkb2N1bWVudHMsIHBsZWFzZSBzZW5kIHRoZW0gdmlhIGVtYWlsIHRvIHB5dGhvbi1kb2NzQHB5dGhvbi5vcmcuCisKK0lmIHlvdSB3b3VsZCBsaWtlIHRvIHN1cHBvcnQgdGhlIGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBvZgorZG9jdW1lbnRhdGlvbiBmb3IgUHl0aG9uLCBwbGVhc2UgY29uc2lkZXIgam9pbmluZyB0aGUgUHl0aG9uIFNvZnR3YXJlCitBY3Rpdml0eSAoUFNBOyBzZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzYS8pLCBvciB1cmdpbmcgeW91cgorb3JnYW5pemF0aW9uIHRvIGpvaW4gdGhlIFBTQSBvciB0aGUgUHl0aG9uIENvbnNvcnRpdW0gKHNlZQoraHR0cDovL3d3dy5weXRob24ub3JnL2NvbnNvcnRpdW0vKS4KKyIiIgorCitkZWYgY291bnRfcGFnZXMoZmlsZW5hbWUpOgorICAgIGZwID0gb3BlbihmaWxlbmFtZSkKKyAgICBjb3VudCA9IDAKKyAgICB3aGlsZSAxOgorICAgICAgICBsaW5lcyA9IGZwLnJlYWRsaW5lcygxMDI0KjQwKQorICAgICAgICBpZiBub3QgbGluZXM6CisgICAgICAgICAgICBicmVhaworICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIGlmIGxpbmVbOjddID09ICIlJVBhZ2U6IjoKKyAgICAgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQorICAgIGZwLmNsb3NlKCkKKyAgICByZXR1cm4gY291bnQKKworCitkZWYgbWFpbigpOgorICAgIFBhZ2VDb3VudGVyKCkucnVuKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2RvYy90b29scy9odG1sL2Fib3V0LmRhdCBiL2RvYy90b29scy9odG1sL2Fib3V0LmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmY4YjU1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL2h0bWwvYWJvdXQuZGF0CkBAIC0wLDAgKzEsMjQgQEAKKzxwPiBUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQgdXNpbmcgdGhlIDxhCisgICAgaHJlZj0iaHR0cDovL3NhZnRzYWNrLmZzLnVuaS1iYXlyZXV0aC5kZS87U1BNdGlsZGU7bGF0ZXgyaHQvIj4KKyAgICA8c3Ryb25nPkxhVGVYPC9zdHJvbmc+Mjx0dD5IVE1MPC90dD48L2E+IHRyYW5zbGF0b3IuCis8L3A+CisKKzxwPiA8YQorICAgIGhyZWY9Imh0dHA6Ly9zYWZ0c2Fjay5mcy51bmktYmF5cmV1dGguZGUvO1NQTXRpbGRlO2xhdGV4Mmh0LyI+CisgICAgPHN0cm9uZz5MYVRlWDwvc3Ryb25nPjI8dHQ+SFRNTDwvdHQ+PC9hPiBpcyBDb3B5cmlnaHQgJmNvcHk7CisgIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDxhCisgICAgaHJlZj0iaHR0cDovL2NibC5sZWVkcy5hYy51ay9uaWtvcy9wZXJzb25hbC5odG1sIj5OaWtvcworICAgIERyYWtvczwvYT4sIENvbXB1dGVyIEJhc2VkIExlYXJuaW5nIFVuaXQsIFVuaXZlcnNpdHkgb2YKKyAgTGVlZHMsIGFuZCBDb3B5cmlnaHQgJmNvcHk7IDE5OTcsIDE5OTgsIDxhCisgICAgaHJlZj0iaHR0cDovL3d3dy5tYXRocy5tcS5lZHUuYXUvO1NQTXRpbGRlO3Jvc3MvIj5Sb3NzCisgICAgTW9vcmU8L2E+LCBNYXRoZW1hdGljcyBEZXBhcnRtZW50LCBNYWNxdWFyaWUgVW5pdmVyc2l0eSwKKyAgU3lkbmV5LgorPC9wPgorCis8cD4gVGhlIGFwcGxpY2F0aW9uIG9mIDxhCisgICAgaHJlZj0iaHR0cDovL3NhZnRzYWNrLmZzLnVuaS1iYXlyZXV0aC5kZS87U1BNdGlsZGU7bGF0ZXgyaHQvIj4KKyAgICA8c3Ryb25nPkxhVGVYPC9zdHJvbmc+Mjx0dD5IVE1MPC90dD48L2E+IHRvIHRoZSBQeXRob24KKyAgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiBoZWF2aWx5IHRhaWxvcmVkIGJ5IEZyZWQgTC4gRHJha2UsCisgIEpyLiAgT3JpZ2luYWwgbmF2aWdhdGlvbiBpY29ucyB3ZXJlIGNvbnRyaWJ1dGVkIGJ5IENocmlzdG9waGVyCisgIFBldHJpbGxpLgorPC9wPgpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL2h0bWwvYWJvdXQuaHRtbCBiL2RvYy90b29scy9odG1sL2Fib3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIwM2ZhZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9odG1sL2Fib3V0Lmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8dGl0bGU+QWJvdXQgdGhlIFB5dGhvbiBEb2N1bWVudGF0aW9uPC90aXRsZT4KKyAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIKKyAgICAgIGNvbnRlbnQ9Ik92ZXJ2aWV3IGluZm9ybWF0aW9uIGFib3V0IHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbiI+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CisgICAgPGxpbmsgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSJsaWIvbGliLmNzcyI+CisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICAgPGRpdiBjbGFzcz0ibmF2aWdhdGlvbiI+CisgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMiI+CisgICAgICAgICAgPHRyPgorICAgICAgICAgICAgPHRkPjxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBhbGlnbj0iYm90dG9tIiBib3JkZXI9IjAiIGFsdD0iIgorICAgICAgICAgICAgICAgIHNyYz0iaWNvbnMvYmxhbmsuZ2lmIj48L3RkPgorICAgICAgICAgICAgPHRkPjxhIGhyZWY9Ii4vIgorICAgICAgICAgICAgICAgIHRpdGxlPSJQeXRob24gRG9jdW1lbnRhdGlvbiBJbmRleCI+PGltZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiCisgICAgICAgICAgICAgICAgICBhbGlnbj0iYm90dG9tIiBib3JkZXI9IjAiIGFsdD0idXAiCisgICAgICAgICAgICAgICAgICBzcmM9Imljb25zL3VwLmdpZiI+PC9hPjwvdGQ+CisgICAgICAgICAgICA8dGQ+PGltZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIGFsaWduPSJib3R0b20iIGJvcmRlcj0iMCIgYWx0PSIiCisgICAgICAgICAgICAgICAgc3JjPSJpY29ucy9ibGFuay5naWYiPjwvdGQ+CisgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiPkFib3V0IHRoZSBQeXRob24gRG9jdW1lbnRhdGlvbjwvdGQ+CisgICAgICAgICAgICA8dGQ+PGltZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIGFsaWduPSJib3R0b20iIGJvcmRlcj0iMCIgYWx0PSIiCisgICAgICAgICAgICAgICAgc3JjPSJpY29ucy9ibGFuay5naWYiPjwvdGQ+CisgICAgICAgICAgICA8dGQ+PGltZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIGFsaWduPSJib3R0b20iIGJvcmRlcj0iMCIgYWx0PSIiCisgICAgICAgICAgICAgICAgc3JjPSJpY29ucy9ibGFuay5naWYiPjwvdGQ+CisgICAgICAgICAgICA8dGQ+PGltZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIGFsaWduPSJib3R0b20iIGJvcmRlcj0iMCIgYWx0PSIiCisgICAgICAgICAgICAgICAgc3JjPSJpY29ucy9ibGFuay5naWYiPjwvdGQ+CisgICAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8YiBjbGFzcz0ibmF2bGFiZWwiPlVwOjwvYj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzZWN0cmVmIj4KKyAgICAgICAgPGEgaHJlZj0iLi8iIHRpdGxlPSJQeXRob24gRG9jdW1lbnRhdGlvbiBJbmRleCI+CisgICAgICAgICAgUHl0aG9uIERvY3VtZW50YXRpb24gSW5kZXg8L0E+PC9zcGFuPgorICAgICAgPGJyPgorICAgIDwvZGl2PgorICAgIDxocj4KKworICAgIDxoMj5BYm91dCB0aGUgUHl0aG9uIERvY3VtZW50YXRpb248L2gyPgorCisgICAgPHA+VGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgR3VpZG8gdmFuCisgICAgICBSb3NzdW0sIGJ1dCBoYXMgaW5jcmVhc2luZ2x5IGJlY29tZSBhIGNvbW11bml0eSBlZmZvcnQgb3ZlciB0aGUKKyAgICAgIHBhc3Qgc2V2ZXJhbCB5ZWFycy4gIFRoaXMgZ3Jvd2luZyBjb2xsZWN0aW9uIG9mIGRvY3VtZW50cyBpcworICAgICAgYXZhaWxhYmxlIGluIHNldmVyYWwgZm9ybWF0cywgaW5jbHVkaW5nIHR5cGVzZXQgdmVyc2lvbnMgaW4gUERGCisgICAgICBhbmQgUG9zdFNjcmlwdCBmb3IgcHJpbnRpbmcsIGZyb20gdGhlIDxhCisgICAgICAgIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy8iPlB5dGhvbiBXZWIgc2l0ZTwvYT4uCisKKyAgICA8cD5BIDxhIGhyZWY9ImFja3MuaHRtbCI+bGlzdCBvZiBjb250cmlidXRvcnM8L2E+IGlzIGF2YWlsYWJsZS4KKworICAgIDxoMj5Db21tZW50cyBhbmQgUXVlc3Rpb25zPC9oMj4KKworICAgIDxwPiBHZW5lcmFsIGNvbW1lbnRzIGFuZCBxdWVzdGlvbnMgcmVnYXJkaW5nIHRoaXMgZG9jdW1lbnQgc2hvdWxkCisgICAgICBiZSBzZW50IGJ5IGVtYWlsIHRvIDxhIGhyZWY9Im1haWx0bzpweXRob24tZG9jc0BweXRob24ub3JnIgorICAgICAgICA+cHl0aG9uLWRvY3NAcHl0aG9uLm9yZzwvYT4uICBJZiB5b3UgZmluZCBzcGVjaWZpYyBlcnJvcnMgaW4KKyAgICAgIHRoaXMgZG9jdW1lbnQsIHBsZWFzZSByZXBvcnQgdGhlIGJ1ZyBhdCB0aGUgPGEKKyAgICAgICAgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9idWdzLz9ncm91cF9pZD01NDcwIj5QeXRob24gQnVnCisgICAgICAgIFRyYWNrZXI8L2E+IGF0IDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvIj5Tb3VyY2VGb3JnZTwvYT4uCisgICAgPC9wPgorCisgICAgPHA+IFF1ZXN0aW9ucyByZWdhcmRpbmcgaG93IHRvIHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gdGhpcworICAgICAgZG9jdW1lbnQgc2hvdWxkIGJlIHNlbnQgdG8gdGhlIFB5dGhvbiBuZXdzIGdyb3VwLCA8YQorICAgICAgICBocmVmPSJuZXdzOmNvbXAubGFuZy5weXRob24iPmNvbXAubGFuZy5weXRob248L2E+LCBvciB0aGUgPGEKKyAgICAgICAgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vcHl0aG9uLWxpc3QiCisgICAgICAgID5QeXRob24gbWFpbGluZyBsaXN0PC9hPiAod2hpY2ggaXMgZ2F0ZWQgdG8gdGhlIG5ld3Nncm91cCBhbmQKKyAgICAgIGNhcnJpZXMgdGhlIHNhbWUgY29udGVudCkuCisgICAgPC9wPgorCisgICAgPHA+IEZvciBhbnkgb2YgdGhlc2UgY2hhbm5lbHMsIHBsZWFzZSBiZSBzdXJlIG5vdCB0byBzZW5kIEhUTUwgZW1haWwuCisgICAgICBUaGFua3MuCisgICAgPC9wPgorCisgICAgPGhyPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy9ibGFuay5naWYgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy9ibGFuay5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUzMWY0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9odG1sL2ljb25zL2JsYW5rLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy9ibGFuay5wbmcgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy9ibGFuay5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFmNTYzOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9odG1sL2ljb25zL2JsYW5rLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy9jb250ZW50cy5naWYgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy9jb250ZW50cy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQyOTljNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9odG1sL2ljb25zL2NvbnRlbnRzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy9jb250ZW50cy5wbmcgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy9jb250ZW50cy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyOWJlMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9odG1sL2ljb25zL2NvbnRlbnRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy9pbmRleC5naWYgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy9pbmRleC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlZWNmYgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9odG1sL2ljb25zL2luZGV4LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy9pbmRleC5wbmcgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy9pbmRleC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5MThhZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9odG1sL2ljb25zL2luZGV4LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy9tb2R1bGVzLmdpZiBiL2RvYy90b29scy9odG1sL2ljb25zL21vZHVsZXMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ODYwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy9tb2R1bGVzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy9tb2R1bGVzLnBuZyBiL2RvYy90b29scy9odG1sL2ljb25zL21vZHVsZXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYThiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy9tb2R1bGVzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy9uZXh0LmdpZiBiL2RvYy90b29scy9odG1sL2ljb25zL25leHQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkY2FmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy9uZXh0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy9uZXh0LnBuZyBiL2RvYy90b29scy9odG1sL2ljb25zL25leHQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZTVlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy9uZXh0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy9wcmV2aW91cy5naWYgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy9wcmV2aW91cy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxZGExNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9odG1sL2ljb25zL3ByZXZpb3VzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy9wcmV2aW91cy5wbmcgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy9wcmV2aW91cy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3ZGVmNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9odG1sL2ljb25zL3ByZXZpb3VzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy91cC5naWYgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy91cC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkM2UxMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9odG1sL2ljb25zL3VwLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pY29ucy91cC5wbmcgYi9kb2MvdG9vbHMvaHRtbC9pY29ucy91cC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkwZTAyOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9odG1sL2ljb25zL3VwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaHRtbC9pbmRleC5odG1sLmluIGIvZG9jL3Rvb2xzL2h0bWwvaW5kZXguaHRtbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmIyOGNjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL2h0bWwvaW5kZXguaHRtbC5pbgpAQCAtMCwwICsxLDExNyBAQAorPGh0bWw+CisgIDxoZWFkPgorICAgIDx0aXRsZT5QeXRob24gQFJFTEVBU0VAIERvY3VtZW50YXRpb24gLSBAREFURUA8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0iU1RZTEVTSEVFVCIgaHJlZj0ibGliL2xpYi5jc3MiIHR5cGU9InRleHQvY3NzIj4KKyAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIKKyAgICAgICAgICBjb250ZW50PSJUb3AtbGV2ZWwgaW5kZXggdG8gdGhlIHN0YW5kYXJkIGRvY3VtZW50YXRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgUHl0aG9uIEBSRUxFQVNFQC4iPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgICBhLnRpdGxlIHsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMTEwJTsgfQorICAgICAgdWwgeyBtYXJnaW4tbGVmdDogMWVtOyBwYWRkaW5nOiAwcHQ7IGJvcmRlcjogMHB0OyB9CisgICAgPC9zdHlsZT4KKyAgPC9oZWFkPgorICA8Ym9keT4KKwk8ZGl2IGNsYXNzPSJuYXZpZ2F0aW9uIj4KKwk8dGFibGUgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMiI+CisJPHRyPgorCSAgPHRkPjxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBhbGlnbj0iYm90dG9tIiBib3JkZXI9IjAiIGFsdD0iIgorCSAgICAgIHNyYz0iaWNvbnMvYmxhbmsuZ2lmIj48L3RkPgorCSAgPHRkPjxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBhbGlnbj0iYm90dG9tIiBib3JkZXI9IjAiIGFsdD0iIgorCSAgICAgIHNyYz0iaWNvbnMvYmxhbmsuZ2lmIj48L3RkPgorCSAgPHRkPjxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBhbGlnbj0iYm90dG9tIiBib3JkZXI9IjAiIGFsdD0iIgorCSAgICAgIHNyYz0iaWNvbnMvYmxhbmsuZ2lmIj48L3RkPgorCSAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj4KKwkgICAgPGIgY2xhc3M9InRpdGxlIj5QeXRob24gRG9jdW1lbnRhdGlvbjwvYj48L3RkPgorCSAgPHRkPjxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBhbGlnbj0iYm90dG9tIiBib3JkZXI9IjAiIGFsdD0iIgorCSAgICAgIHNyYz0iaWNvbnMvYmxhbmsuZ2lmIj48L3RkPgorCSAgPHRkPjxhIGhyZWY9Im1vZGluZGV4Lmh0bWwiPjxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIgorCQlhbGlnbj0iYm90dG9tIiBib3JkZXI9IjAiIGFsdD0iTW9kdWxlIEluZGV4IgorCQlzcmM9Imljb25zL21vZHVsZXMuZ2lmIj48L2E+PC90ZD4KKwkgIDx0ZD48aW1nIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgYWxpZ249ImJvdHRvbSIgYm9yZGVyPSIwIiBhbHQ9IiIKKwkgICAgICBzcmM9Imljb25zL2JsYW5rLmdpZiI+PC9BPjwvdGQ+CisJPC90cj4KKwk8L3RhYmxlPgorICAgICAgICA8aHI+CisJPC9kaXY+CisgICAgPGRpdiBhbGlnbj0iY2VudGVyIiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgIDxoMT5QeXRob24gRG9jdW1lbnRhdGlvbjwvaDE+CisKKyAgICAgIDxwPgorCTxzdHJvbmc+UmVsZWFzZSBAUkVMRUFTRUA8L3N0cm9uZz4KKwk8YnI+CisJPHN0cm9uZz5AREFURUA8L3N0cm9uZz4KKyAgICAgIDwvcD4KKyAgICA8L2Rpdj4KKworICAgIDx0YWJsZSBhbGlnbj0iY2VudGVyIj4KKyAgICAgIDx0Ym9keT4KKyAgICAgIDx0cj48dGQ+CisJICA8dWw+CisJICAgIDxsaT4gPGEgaHJlZj0idHV0L3R1dC5odG1sIiBjbGFzcz0idGl0bGUiPlR1dG9yaWFsPC9hPgorCSAgICAgIDxicj4oc3RhcnQgaGVyZSkKKworCSAgICA8bGk+IDxhIGhyZWY9Im1vZGluZGV4Lmh0bWwiIGNsYXNzPSJ0aXRsZSI+R2xvYmFsIE1vZHVsZSBJbmRleDwvYT4KKwkgICAgICA8YnI+KGZvciBxdWljayBhY2Nlc3MgdG8gYWxsIGRvY3VtZW50YXRpb24pCisKKwkgICAgPGxpPiA8YSBocmVmPSJsaWIvbGliLmh0bWwiIGNsYXNzPSJ0aXRsZSI+TGlicmFyeSBSZWZlcmVuY2U8L2E+CisJICAgICAgPGJyPihrZWVwIHRoaXMgdW5kZXIgeW91ciBwaWxsb3cpCisKKwkgICAgPGxpPiA8YSBocmVmPSJtYWMvbWFjLmh0bWwiIGNsYXNzPSJ0aXRsZSI+TWFjaW50b3NoIE1vZHVsZQorCQlSZWZlcmVuY2U8L2E+CisJICAgICAgPGJyPih0aGlzIHRvbywgaWYgeW91IHVzZSBhIE1hY2ludG9zaCkKKworCSAgICA8bGk+IDxhIGhyZWY9Imluc3QvaW5zdC5odG1sIiBjbGFzcz0idGl0bGUiPkluc3RhbGxpbmcKKwkJUHl0aG9uIE1vZHVsZXM8L2E+CisJICAgICAgPGJyPihmb3IgYWRtaW5pc3RyYXRvcnMpCisJICA8L3VsPgorCSAgPC90ZD4KKwkgIDx0ZD4KKwkgIDx1bD4KKwkgICAgPGxpPiA8YSBocmVmPSJyZWYvcmVmLmh0bWwiIGNsYXNzPSJ0aXRsZSI+TGFuZ3VhZ2UgUmVmZXJlbmNlPC9hPgorCSAgICAgIDxicj4oZm9yIGxhbmd1YWdlIGxhd3llcnMpCisKKwkgICAgPGxpPiA8YSBocmVmPSJleHQvZXh0Lmh0bWwiIGNsYXNzPSJ0aXRsZSI+RXh0ZW5kaW5nIGFuZAorCQlFbWJlZGRpbmc8L2E+CisJICAgICAgPGJyPih0dXRvcmlhbCBmb3IgQy9DKysgcHJvZ3JhbW1lcnMpCisKKwkgICAgPGxpPiA8YSBocmVmPSJhcGkvYXBpLmh0bWwiIGNsYXNzPSJ0aXRsZSI+UHl0aG9uL0MgQVBJPC9hPgorCSAgICAgIDxicj4ocmVmZXJlbmNlIGZvciBDL0MrKyBwcm9ncmFtbWVycykKKworCSAgICA8bGk+IDxhIGhyZWY9ImRvYy9kb2MuaHRtbCIgY2xhc3M9InRpdGxlIj5Eb2N1bWVudGluZyBQeXRob248L2E+CisJICAgICAgPGJyPihpbmZvcm1hdGlvbiBmb3IgZG9jdW1lbnRhdGlvbiBhdXRob3JzKQorCisJICAgIDxsaT4gPGEgaHJlZj0iZGlzdC9kaXN0Lmh0bWwiIGNsYXNzPSJ0aXRsZSI+RGlzdHJpYnV0aW5nCisJCVB5dGhvbiBNb2R1bGVzPC9hPgorCSAgICAgIDxicj4oZm9yIGRldmVsb3BlcnMgYW5kIHBhY2thZ2VycykKKwkgIDwvdWw+CisJICA8L3RkPgorCTwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgPHVsPgorICAgICAgICAgICAgPGxpPiA8YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jLyIgY2xhc3M9InRpdGxlIgorICAgICAgICAgICAgICAgID5Eb2N1bWVudGF0aW9uIENlbnRyYWw8L2E+CisgICAgICAgICAgICAgIDxicj4oZm9yIGV2ZXJ5b25lKQorICAgICAgICAgIDwvdWw+CisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgPHVsPgorICAgICAgICAgICAgPGxpPiA8YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL2hvd3RvLyIgY2xhc3M9InRpdGxlIgorICAgICAgICAgICAgICAgID5QeXRob24gSG93LVRvIEd1aWRlczwvYT4KKyAgICAgICAgICAgICAgPGJyPihzcGVjaWFsIHRvcGljcykKKyAgICAgICAgICA8L3VsPgorICAgICAgICAgIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3Rib2R5PgorICAgIDwvdGFibGU+CisgICAgPHA+CisKKyAgICA8YWRkcmVzcz4KKyAgICAgIDxocj4KKyAgICAgIFNlZSA8aT48YSBocmVmPSJhYm91dC5odG1sIj5BYm91dCB0aGUgUHl0aG9uIERvY3VtZW50YXRpb248L2E+PC9pPgorICAgICAgZm9yIGluZm9ybWF0aW9uIG9uIHN1Z2dlc3RpbmcgY2hhbmdlcy4KKyAgICA8L2FkZHJlc3M+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvYy90b29scy9odG1sL3N0ZGFib3V0LmRhdCBiL2RvYy90b29scy9odG1sL3N0ZGFib3V0LmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWIyNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL2h0bWwvc3RkYWJvdXQuZGF0CkBAIC0wLDAgKzEsNDggQEAKKzxwPiBUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQgdXNpbmcgdGhlIDxhCisgICAgaHJlZj0iaHR0cDovL3NhZnRzYWNrLmZzLnVuaS1iYXlyZXV0aC5kZS87U1BNdGlsZGU7bGF0ZXgyaHQvIj4KKyAgICA8c3Ryb25nPkxhVGVYPC9zdHJvbmc+Mjx0dD5IVE1MPC90dD48L2E+IHRyYW5zbGF0b3IuCis8L3A+CisKKzxwPiA8YQorICAgIGhyZWY9Imh0dHA6Ly9zYWZ0c2Fjay5mcy51bmktYmF5cmV1dGguZGUvO1NQTXRpbGRlO2xhdGV4Mmh0LyI+CisgICAgPHN0cm9uZz5MYVRlWDwvc3Ryb25nPjI8dHQ+SFRNTDwvdHQ+PC9hPiBpcyBDb3B5cmlnaHQgJmNvcHk7CisgIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDxhCisgICAgaHJlZj0iaHR0cDovL2NibC5sZWVkcy5hYy51ay9uaWtvcy9wZXJzb25hbC5odG1sIj5OaWtvcworICAgIERyYWtvczwvYT4sIENvbXB1dGVyIEJhc2VkIExlYXJuaW5nIFVuaXQsIFVuaXZlcnNpdHkgb2YKKyAgTGVlZHMsIGFuZCBDb3B5cmlnaHQgJmNvcHk7IDE5OTcsIDE5OTgsIDxhCisgICAgaHJlZj0iaHR0cDovL3d3dy5tYXRocy5tcS5lZHUuYXUvO1NQTXRpbGRlO3Jvc3MvIj5Sb3NzCisgICAgTW9vcmU8L2E+LCBNYXRoZW1hdGljcyBEZXBhcnRtZW50LCBNYWNxdWFyaWUgVW5pdmVyc2l0eSwKKyAgU3lkbmV5LgorPC9wPgorCis8cD4gVGhlIGFwcGxpY2F0aW9uIG9mIDxhCisgICAgaHJlZj0iaHR0cDovL3NhZnRzYWNrLmZzLnVuaS1iYXlyZXV0aC5kZS87U1BNdGlsZGU7bGF0ZXgyaHQvIj4KKyAgICA8c3Ryb25nPkxhVGVYPC9zdHJvbmc+Mjx0dD5IVE1MPC90dD48L2E+IHRvIHRoZSBQeXRob24KKyAgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiBoZWF2aWx5IHRhaWxvcmVkIGJ5IEZyZWQgTC4gRHJha2UsCisgIEpyLiAgT3JpZ2luYWwgbmF2aWdhdGlvbiBpY29ucyB3ZXJlIGNvbnRyaWJ1dGVkIGJ5IENocmlzdG9waGVyCisgIFBldHJpbGxpLgorPC9wPgorCis8aHI+CisKKzxoMj5Db21tZW50cyBhbmQgUXVlc3Rpb25zPC9oMj4KKworPHA+IEdlbmVyYWwgY29tbWVudHMgYW5kIHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhpcyBkb2N1bWVudCBzaG91bGQKKyAgYmUgc2VudCBieSBlbWFpbCB0byA8YSBocmVmPSJtYWlsdG86cHl0aG9uLWRvY3NAcHl0aG9uLm9yZyIKKyAgICA+cHl0aG9uLWRvY3NAcHl0aG9uLm9yZzwvYT4uICBJZiB5b3UgZmluZCBzcGVjaWZpYyBlcnJvcnMgaW4KKyAgdGhpcyBkb2N1bWVudCwgcGxlYXNlIHJlcG9ydCB0aGUgYnVnIGF0IHRoZSA8YQorICAgIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvYnVncy8/Z3JvdXBfaWQ9NTQ3MCI+UHl0aG9uIEJ1ZworICAgIFRyYWNrZXI8L2E+IGF0IDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvIj5Tb3VyY2VGb3JnZTwvYT4uCis8L3A+CisKKzxwPiBRdWVzdGlvbnMgcmVnYXJkaW5nIGhvdyB0byB1c2UgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMKKyAgZG9jdW1lbnQgc2hvdWxkIGJlIHNlbnQgdG8gdGhlIFB5dGhvbiBuZXdzIGdyb3VwLCA8YQorICAgIGhyZWY9Im5ld3M6Y29tcC5sYW5nLnB5dGhvbiI+Y29tcC5sYW5nLnB5dGhvbjwvYT4sIG9yIHRoZSA8YQorICAgIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3B5dGhvbi1saXN0IgorICAgID5QeXRob24gbWFpbGluZyBsaXN0PC9hPiAod2hpY2ggaXMgZ2F0ZWQgdG8gdGhlIG5ld3Nncm91cCBhbmQKKyAgY2FycmllcyB0aGUgc2FtZSBjb250ZW50KS4KKzwvcD4KKworPHA+IEZvciBhbnkgb2YgdGhlc2UgY2hhbm5lbHMsIHBsZWFzZSBiZSBzdXJlIG5vdCB0byBzZW5kIEhUTUwgZW1haWwuCisgIFRoYW5rcy4KKzwvcD4KZGlmZiAtLWdpdCBhL2RvYy90b29scy9odG1sL3N0eWxlLmNzcyBiL2RvYy90b29scy9odG1sL3N0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjdjZjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL2h0bWwvc3R5bGUuY3NzCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBUaGUgZmlyc3QgcGFydCBvZiB0aGlzIGlzIHRoZSBzdGFuZGFyZCBDU1MgZ2VuZXJhdGVkIGJ5IExhVGVYMkhUTUwsCisgKiB3aXRoIHRoZSAiZW1wdHkiIGRlY2xhcmF0aW9ucyByZW1vdmVkLgorICovCisKKy8qIENlbnR1cnkgU2Nob29sYm9vayBmb250IGlzIHZlcnkgc2ltaWxhciB0byBDb21wdXRlciBNb2Rlcm4gTWF0aDogY21taSAqLworLm1hdGggICAgICAgICAgICAgICAgICAgeyBmb250LWZhbWlseTogIkNlbnR1cnkgU2Nob29sYm9vayIsIHNlcmlmOyB9CisubWF0aCBpICAgICAgICAgICAgICAgICB7IGZvbnQtZmFtaWx5OiAiQ2VudHVyeSBTY2hvb2xib29rIiwgc2VyaWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkIH0KKy5ib2xkbWF0aCAgICAgICAgICAgICAgIHsgZm9udC1mYW1pbHk6ICJDZW50dXJ5IFNjaG9vbGJvb2siLCBzZXJpZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQgfQorCisvKiBJbXBsZW1lbnQgYm90aCBmaXhlZC1zaXplIGFuZCByZWxhdGl2ZSBzaXplczogKi8KK3NtYWxsLnh0aW55ICAgICAgICAgICAgIHsgZm9udC1zaXplIDogeHgtc21hbGwgfQorc21hbGwudGlueSAgICAgICAgICAgICAgeyBmb250LXNpemUgOiB4LXNtYWxsIH0KK3NtYWxsLnNjcmlwdHNpemUgICAgICAgIHsgZm9udC1zaXplIDogc21hbGxlciB9CitzbWFsbC5mb290bm90ZXNpemUgICAgICB7IGZvbnQtc2l6ZSA6IHNtYWxsIH0KK2JpZy54bGFyZ2UgICAgICAgICAgICAgIHsgZm9udC1zaXplIDogbGFyZ2UgfQorYmlnLnh4bGFyZ2UgICAgICAgICAgICAgeyBmb250LXNpemUgOiB4LWxhcmdlIH0KK2JpZy5odWdlICAgICAgICAgICAgICAgIHsgZm9udC1zaXplIDogbGFyZ2VyIH0KK2JpZy54aHVnZSAgICAgICAgICAgICAgIHsgZm9udC1zaXplIDogeHgtbGFyZ2UgfQorCisvKgorICogRG9jdW1lbnQtc3BlY2lmaWMgc3R5bGVzIGNvbWUgbmV4dDsKKyAqIHRoZXNlIGFyZSBhZGRlZCBmb3IgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgc2l6ZSBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIEgqIGVsZW1lbnRzIGFyZSBiZWNhdXNlCisgKiBOZXRzY2FwZSBvbiBTb2xhcmlzIG90aGVyd2lzZSBkb2Vzbid0IGdldCBpdCByaWdodDsgdGhleSBhbGwgZW5kIHVwCisgKiB0aGUgbm9ybWFsIHRleHQgc2l6ZS4KKyAqLworCitib2R5ICAgICAgICAgICAgICAgICAgICB7IGNvbG9yOiAjMDAwMDAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOyB9CisKK2E6YWN0aXZlICAgICAgICAgICAgICAgIHsgY29sb3I6ICNmZjAwMDA7IH0KK2E6dmlzaXRlZCAgICAgICAgICAgICAgIHsgY29sb3I6ICM1NTFhOGI7IH0KK2E6bGluayAgICAgICAgICAgICAgICAgIHsgY29sb3I6ICMwMDAwYmI7IH0KKworaDEsIGgyLCBoMywgaDQsIGg1LCBoNiAgeyBmb250LWZhbWlseTogYXZhbnRnYXJkZSwgc2Fucy1zZXJpZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQgfQoraDEgICAgICAgICAgICAgICAgICAgICAgeyBmb250LXNpemU6IDE4MCUgfQoraDIgICAgICAgICAgICAgICAgICAgICAgeyBmb250LXNpemU6IDE1MCUgfQoraDMsIGg0ICAgICAgICAgICAgICAgICAgeyBmb250LXNpemU6IDEyMCUgfQorY29kZSwgdHQgICAgICAgICAgICAgICAgeyBmb250LWZhbWlseTogbW9ub3NwYWNlIH0KK3ZhciAgICAgICAgICAgICAgICAgICAgIHsgZm9udC1mYW1pbHk6IHRpbWVzLCBzZXJpZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOworICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsIH0KKworLm5hdmlnYXRpb24gdGQgICAgICAgICAgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjOTljY2ZmOworICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IGF2YW50Z2FyZGUsIHNhbnMtc2VyaWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTEwJSB9CisKKy5yZWxlYXNlLWluZm8gICAgICAgICAgIHsgZm9udC1zdHlsZTogaXRhbGljOyB9CisKKy50aXRsZWdyYXBoaWMgICAgICAgICAgIHsgdmVydGljYWwtYWxpZ246IHRvcDsgfQorCisudmVyYmF0aW0gICAgICAgICAgICAgICB7IGNvbG9yOiAjMDAwMDhiIH0KKworLmVtYWlsICAgICAgICAgICAgICAgICAgeyBmb250LWZhbWlseTogYXZhbnRnYXJkZSwgc2Fucy1zZXJpZiB9CisubWltZXR5cGUgICAgICAgICAgICAgICB7IGZvbnQtZmFtaWx5OiBhdmFudGdhcmRlLCBzYW5zLXNlcmlmIH0KKy5uZXdzZ3JvdXAgICAgICAgICAgICAgIHsgZm9udC1mYW1pbHk6IGF2YW50Z2FyZGUsIHNhbnMtc2VyaWYgfQorLnVybCAgICAgICAgICAgICAgICAgICAgeyBmb250LWZhbWlseTogYXZhbnRnYXJkZSwgc2Fucy1zZXJpZiB9CisuZmlsZSAgICAgICAgICAgICAgICAgICB7IGZvbnQtZmFtaWx5OiBhdmFudGdhcmRlLCBzYW5zLXNlcmlmIH0KKworLnRhYmxlaGVhZGVyICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjOTljY2ZmOworICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogYXZhbnRnYXJkZSwgc2Fucy1zZXJpZjsgfQorCisucmVmY291bnQtaW5mbyAgICAgICAgICB7IGZvbnQtc3R5bGU6IGl0YWxpYyB9CisucmVmY291bnQtaW5mbyAudmFsdWUgICB7IGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzAwNjYwMCB9CisKKy8qCisgKiBTb21lIGRlY29yYXRpb24gZm9yIHRoZSAiU2VlIGFsc286IiBibG9ja3MsIGluIHBhcnQgaW5zcGlyZWQgYnkgc29tZSBvZgorICogdGhlIHN0eWxpbmcgb24gTGFycyBNYXJpdXMgR2Fyc2hvbCdzIFhTQSBwYWdlcy4KKyAqIChUaGUgYmx1ZSBpbiB0aGUgbmF2aWdhdGlvbiBiYXJzIGlzICM5OUNDRkYuKQorICovCisuc2VlYWxzbyAgICAgICAgICAgICAgICB7IGJhY2tncm91bmQtY29sb3I6ICNmZmZhZjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogdGhpbiBzb2xpZCBibGFjazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogNHB0IH0KKworLnNlZWFsc28gLmhlYWRpbmcgICAgICAgeyBmb250LXNpemU6IDExMCUgfQorCisvKgorICogQ2xhc3MgJ2F2YWlsYWJpbGl0eScgaXMgdXNlZCBmb3IgbW9kdWxlIGF2YWlsYWJpbGl0eSBzdGF0ZW1lbnRzIGF0CisgKiB0aGUgdG9wIG9mIG1vZHVsZXMuCisgKi8KKy5hdmFpbGFiaWxpdHkgLnBsYXRmb3JtIHsgZm9udC13ZWlnaHQ6IGJvbGQgfQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL2h0bWwydGV4aS5wbCBiL2RvYy90b29scy9odG1sMnRleGkucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmUwNTBiMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9odG1sMnRleGkucGwKQEAgLTAsMCArMSwxNzUwIEBACisjISAvdXNyL2Jpbi9lbnYgcGVybAorIyBodG1sMnRleGkucGwgLS0gQ29udmVydCBIVE1MIGRvY3VtZW50YXRpb24gdG8gVGV4aW5mbyBmb3JtYXQKKyMgTWljaGFlbCBFcm5zdCA8bWVybnN0QGNzLndhc2hpbmd0b24uZWR1PgorIyBUaW1lLXN0YW1wOiA8MTk5OS0wMS0xMiAyMTozNDoyNyBtZXJuc3Q+CisKKyMgVGhpcyBwcm9ncmFtIGNvbnZlcnRzIEhUTUwgZG9jdW1lbnRhdGlvbiB0cmVlcyBpbnRvIFRleGluZm8gZm9ybWF0LgorIyBHaXZlbiB0aGUgbmFtZSBvZiBhIG1haW4gKG9yIGNvbnRlbnRzKSBIVE1MIGZpbGUsIGl0IHByb2Nlc3NlcyB0aGF0IGZpbGUsCisjIGFuZCBvdGhlciBmaWxlcyAodHJhbnNpdGl2ZWx5KSByZWZlcmVuY2VkIGJ5IGl0LCBpbnRvIGEgVGV4aW5mbyBmaWxlCisjICh3aG9zZSBuYW1lIGlzIGNob3NlbiBmcm9tIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lIG9mIHRoZSBhcmd1bWVudCkuCisjIEZvciBpbnN0YW5jZToKKyMgICBodG1sMnRleGkucGwgYXBpL2luZGV4Lmh0bWwKKyMgcHJvZHVjZXMgZmlsZSAiYXBpLnRleGkiLgorCisjIFRleGluZm8gZm9ybWF0IGNhbiBiZSBlYXNpbHkgY29udmVydGVkIHRvIEluZm8gZm9ybWF0IChmb3IgYnJvd3NpbmcgaW4KKyMgRW1hY3Mgb3IgdGhlIHN0YW5kYWxvbmUgSW5mbyBicm93c2VyKSwgdG8gYSBwcmludGVkIG1hbnVhbCwgb3IgdG8gSFRNTC4KKyMgVGh1cywgaHRtbDJ0ZXhpLnBsIHBlcm1pdHMgY29udmVyc2lvbiBvZiBIVE1MIGZpbGVzIHRvIEluZm8gZm9ybWF0LCBhbmQKKyMgc2Vjb25kYXJpbHkgZW5hYmxlcyBwcm9kdWNpbmcgcHJpbnRlZCB2ZXJzaW9ucyBvZiBXZWIgcGFnZSBoaWVyYXJjaGllcy4KKworIyBVbmxpa2UgSFRNTCwgSW5mbyBmb3JtYXQgaXMgc2VhcmNoYWJsZS4gIFNpbmNlIEluZm8gaXMgaW50ZWdyYXRlZCBpbnRvCisjIEVtYWNzLCBvbmUgY2FuIHJlYWQgZG9jdW1lbnRhdGlvbiB3aXRob3V0IHN0YXJ0aW5nIGEgc2VwYXJhdGUgV2ViCisjIGJyb3dzZXIuICBBZGRpdGlvbmFsbHksIEluZm8gYnJvd3NlcnMgKGluY2x1ZGluZyBFbWFjcykgY29udGFpbgorIyBjb252ZW5pZW50IGZlYXR1cmVzIG1pc3NpbmcgZnJvbSBXZWIgYnJvd3NlcnMsIHN1Y2ggYXMgZWFzeSBpbmRleCBsb29rdXAKKyMgYW5kIG1vdXNlLWZyZWUgYnJvd3NpbmcuCisKKyMgTGltaXRhdGlvbnM6CisjIGh0bWwydGV4aS5wbCBpcyBjdXJyZW50bHkgdHVuZWQgdG8gbGF0ZXgyaHRtbCBvdXRwdXQgKGFuZCBpdCBjb3JyZWN0cworIyBzZXZlcmFsIGxhdGV4Mmh0bWwgYnVncyksIGJ1dCBzaG91bGQgYmUgZXh0ZW5zaWJsZSB0byBhcmJpdHJhcnkgSFRNTAorIyBkb2N1bWVudHMuICBJdCB3aWxsIGJlIG1vc3QgdXNlZnVsIGZvciBIVE1MIHdpdGggYSBoaWVyYXJjaGljYWwgc3RydWN0dXJlCisjIGFuZCBhbiBpbmRleCwgYW5kIGl0IHJlY29nbml6ZXMgdGhvc2UgZmVhdHVyZXMgYXMgY3JlYXRlZCBieSBsYXRleDJodG1sCisjIChhbmQgcG9zc2libHkgYnkgc29tZSBvdGhlciB0b29scykuICBUaGUgSFRNTCB0cmVlIHRvIGJlIHRyYXZlcnNlZCBtdXN0CisjIGJlIG9uIGxvY2FsIGRpc2ssIHJhdGhlciB0aGFuIGJlaW5nIGFjY2Vzc2VkIHZpYSBIVFRQLgorIyBUaGlzIHNjcmlwdCByZXF1aXJlcyB0aGUgdXNlIG9mICJjaGVja2FyZ3MucG0iLiAgVG8gZWxpbWluYXRlIHRoYXQKKyMgZGVwZW5kZW5jZSwgcmVwbGFjZSBjYWxscyB0byBjaGVja19hcmdzKiBieSBAXyAod2hpY2ggaXMgYWx3YXlzIHRoZSBsYXN0CisjIGFyZ3VtZW50IHRvIHRob3NlIGZ1bmN0aW9ucykuCisjIEFsc28gc2VlIHRoZSAidG8gZG8iIHNlY3Rpb24sIGJlbG93LgorIyBDb21tZW50cywgc3VnZ2VzdGlvbnMsIGJ1ZyBmaXhlcywgYW5kIGVuaGFuY2VtZW50cyBhcmUgd2VsY29tZS4KKworIyBUcm91Ymxlc2hvb3Rpbmc6CisjIE1hbGZvcm1lZCBIVE1MIGNhbiBjYXVzZSB0aGlzIHByb2dyYW0gdG8gYWJvcnQsIHNvCisjIHlvdSBzaG91bGQgY2hlY2sgeW91ciBIVE1MIGZpbGVzIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBsZWdhbC4KKworCisjIyMKKyMjIyBUeXBpY2FsIHVzYWdlIGZvciB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb246CisjIyMKKworIyAoQWN0dWFsbHksIG1vc3Qgb2YgdGhpcyBpcyBpbiBhIE1ha2VmaWxlIGluc3RlYWQuKQorIyBUaGUgcmVzdWx0aW5nIEluZm8gZm9ybWF0IFB5dGhvbiBkb2N1bWVudGF0aW9uIGlzIGN1cnJlbnRseSBhdmFpbGFibGUgYXQKKyMgZnRwOi8vZnRwLmNzLndhc2hpbmd0b24uZWR1L2hvbWVzL21lcm5zdC9weXRob24taW5mby50YXIuZ3oKKworIyBGaXggdXAgSFRNTCBwcm9ibGVtcywgZWcgPERUPjxETCBDT01QQUNUPjxERD4gc2hvdWxkIGJlIDxEVD48REwgQ09NUEFDVD48REQ+LgorCisjIGh0bWwydGV4aS5wbCAvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvaW5kZXguaHRtbAorIyBodG1sMnRleGkucGwgL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvZXh0L2luZGV4Lmh0bWwKKyMgaHRtbDJ0ZXhpLnBsIC9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2xpYi9pbmRleC5odG1sCisjIGh0bWwydGV4aS5wbCAvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9tYWMvaW5kZXguaHRtbAorIyBodG1sMnRleGkucGwgL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvcmVmL2luZGV4Lmh0bWwKKyMgaHRtbDJ0ZXhpLnBsIC9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL3R1dC9pbmRleC5odG1sCisKKyMgRWRpdCB0aGUgZ2VuZXJhdGVkIC50ZXhpIGZpbGVzOgorIyAgICogY2hhbmdlIEBzZXRmaWxlbmFtZSB0byBwcmVmaXggInB5dGhvbi0iCisjICAgKiBmaXggdXAgYW55IHNlY3Rpb25pbmcsIHN1Y2ggYXMgZm9yIEFic3RyYWN0CisjICAgKiBtYWtlIFRleGluZm8gbWVudXMKKyMgICAqIHBlcmhhcHMgcmVtb3ZlIHRoZSBAZGV0YWlsbWVudSAuLi4gQGVuZCBkZXRhaWxtZW51CisjIEluIEVtYWNzLCB0byBkbyBhbGwgdGhpczoKKyMgICAocHJvZ24gKGdvdG8tY2hhciAocG9pbnQtbWluKSkgKHJlcGxhY2UtcmVnZXhwICJcXChAc2V0ZmlsZW5hbWUgXFwpXFwoWy1hLXpdKlxcKSQiICJcXDFweXRob24tXFwyLmluZm8iKSAocmVwbGFjZS1zdHJpbmcgIkBub2RlIEZyb250IE1hdHRlclxuQGNoYXB0ZXIgQWJzdHJhY3RcbiIgIkBub2RlIEFic3RyYWN0XG5Ac2VjdGlvbiBBYnN0cmFjdFxuIikgKHByb2duIChtYXJrLXdob2xlLWJ1ZmZlcikgKHRleGluZm8tbWFzdGVyLW1lbnUgJ3VwZGF0ZS1hbGwtbm9kZXMpKSAoc2F2ZS1idWZmZXIpKQorCisjIG1ha2VpbmZvIGFwaS50ZXhpCisjIG1ha2VpbmZvIGV4dC50ZXhpCisjIG1ha2VpbmZvIGxpYi50ZXhpCisjIG1ha2VpbmZvIG1hYy50ZXhpCisjIG1ha2VpbmZvIHJlZi50ZXhpCisjIG1ha2VpbmZvIHR1dC50ZXhpCisKKworIyMjCisjIyMgU3RydWN0dXJlIG9mIHRoZSBjb2RlCisjIyMKKworIyBUbyBiZSB3cml0dGVuLi4uCisKKworIyMjCisjIyMgRGVzaWduIGRlY2lzaW9ucworIyMjCisKKyMgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBsYW5ndWFnZXMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgCisjIFRoZSBnb2FsIGlzIEluZm8gZmlsZXM7IEkgY3JlYXRlIFRleGluZm8sIHNvIEkgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dAorIyB0aGUgZmluZXIgZGV0YWlscyBvZiBJbmZvIGZpbGUgY3JlYXRpb24uICAoSSdtIG5vdCBldmVuIHN1cmUgb2YgaXRzIGV4YWN0CisjIGZvcm1hdC4pCisjIAorIyBXaHkgbm90IHN0YXJ0IGZyb20gTGFUZVggcmF0aGVyIHRoYW4gSFRNTD8KKyMgSSBjb3VsZCBoYWNrIGxhdGV4Mmh0bWwgaXRzZWxmIHRvIHByb2R1Y2UgVGV4aW5mbyBpbnN0ZWFkLCBvciBmaXggdXAKKyMgcGFydHBhcnNlLnB5ICh3aGljaCBhbHJlYWR5IHRyYW5zbGF0ZXMgTGFUZVggdG8gVGVpbmZvKS4KKyMgIFByb3M6CisjICAgKiBoYXMgaGlnaC1sZXZlbCBpbmZvcm1hdGlvbiBzdWNoIGFzIGluZGV4IGVudHJpZXMsIG9yaWdpbmFsIGZvcm1hdHRpbmcKKyMgIENvbnM6CisjICAgKiB0aG9zZSBwcm9ncmFtcyBhcmUgY29tcGxpY2F0ZWQgdG8gcmVhZCBhbmQgdW5kZXJzdGFuZAorIyAgICogdGhvc2UgcHJvZ3JhbXMgdHJ5IHRvIGhhbmRsZSBhcmJpdHJhcnkgTGFUZVggaW5wdXQsIHRyYWNrIGNhdGNvZGVzLAorIyAgICAgYW5kIG1vcmU6ICBJIGRvbid0IHdhbnQgdG8gZ28gdG8gdGhhdCBlZmZvcnQuICBIVE1MIGlzbid0IGFzIHBvd2VyZnVsCisjICAgICBhcyBMYVRlWCwgc28gdGhlcmUgYXJlIGZld2VyIHN1YnRsZXRpZXMuCisjICAgKiB0aGUgcmVzdWx0IHdvdWxkbid0IHdvcmsgZm9yIGFyYml0cmFyeSBIVE1MIGRvY3VtZW50czsgaXQgd291bGQgYmUKKyMgICAgIG5pY2UgdG8gZXZlbnR1YWxseSBleHRlbmQgdGhpcyBwcm9ncmFtIHRvIEhUTUwgcHJvZHVjZWQgZnJvbSBEb2Nib29rLAorIyAgICAgRnJhbWUsIGFuZCBtb3JlLgorCisjIFBhcnNpbmcKKyMgLS0tLS0tLQorIyAKKyMgSSBkb24ndCB3YW50IHRvIHZpZXcgdGhlIHRleHQgYXMgYSBsaW5lYXIgc3RyZWFtOyBJJ2QgcmF0aGVyIHBhcnNlIHRoZQorIyB3aG9sZSB0aGluZyBhbmQgdGhlbiBkbyBwYXR0ZXJuIG1hdGNoaW5nIG92ZXIgdGhlIHBhcnNlZCByZXByZXNlbnRhdGlvbiAodG8KKyMgZmluZCBpZGlvbXMgc3VjaCBhcyBpbmRpY2VzLCBsaXN0cyBvZiBjaGlsZCBub2RlcywgZXRjLikuCisjICAqIFBlcmwgcHJvdmlkZXMgSFRNTDo6VHJlZUJ1aWxkZXIsIHdoaWNoIGRvZXMganVzdCB3aGF0IEkgd2FudC4KKyMgICAgICogbGlid3d3LXBlcmw6IGh0dHA6Ly93d3cubGlucHJvLm5vL2x3cC8KKyMgICAgICogVHJlZUJ1aWxkZXI6IEhUTUwtVHJlZS0wLjUxLnRhci5negorIyAgKiBQeXRob24gUGFyc2VycywgRm9ybWF0dGVycywgYW5kIFdyaXRlcnMgZG9uJ3QgcmVhbGx5IHByb3ZpZGUgdGhlIHJpZ2h0CisjICAgIGludGVyZmFjZSAoYW5kIHRoZSB2ZXJzaW9uIGluIEdyYWlsIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbm90aGVyCisjICAgIGRpc3RyaWJ1dGVkIHZlcnNpb24sIHNvIEknbSBjb25mdXNlZCBhYm91dCB3aGljaCB0byBiZSB1c2luZykuICBJIGNvdWxkCisjICAgIHdyaXRlIHNvbWV0aGluZyBpbiBQeXRob24gdGhhdCBjcmVhdGVzIGEgcGFyc2UgdHJlZSwgYnV0IHdoeSBib3RoZXI/CisKKyMgT3RoZXIgaW1wbGVtZW50YXRpb24gbGFuZ3VhZ2UgaXNzdWVzOgorIyAgKiBQeXRob24gbGFja3MgdmFyaWFibGUgZGVjbGFyYXRpb25zLCByZWFzb25hYmxlIHNjb3BpbmcsIGFuZCBzdGF0aWMKKyMgICAgY2hlY2tpbmcgdG9vbHMuICBJJ3ZlIHdyaXR0ZW4gc29tZSBvZiB0aGUgbGF0dGVyIGZvciBteXNlbGYgdGhhdCBtYWtlCisjICAgIG15IFBlcmwgcHJvZ3JhbW1pbmcgYSBsb3Qgc2FmZXIgdGhhbiBteSBQeXRob24gcHJvZ3JhbW1pbmcgd2lsbCBiZSB1bnRpbAorIyAgICBJIGhhdmUgYSBzaW1pbGFyIHN1aXRlIGZvciB0aGF0IGxhbmd1YWdlLgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIFRvIGRvCisjIyMKKworIyBTZWN0aW9uIG5hbWVzOgorIyAgIEZpeCB0aGUgcHJvYmxlbSB3aXRoIG11bHRpcGxlIHNlY3Rpb25zIGluIGEgc2luZ2xlIGZpbGUgKGVnLCBBYnN0cmFjdCBpbgorIyAgICAgRnJvbnQgTWF0dGVyIHNlY3Rpb24pLgorIyAgIERlYWwgd2l0aCBjcm9zcy1yZWZlcmVuY2VzLCBhcyBpbiAvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9yZWYvdHlwZXMuaHRtbDozMTAKKyMgSW5kZXg6CisjICAgUGVyaGFwcyBkb3VibGUtY2hlY2sgdGhhdCBldmVyeSB0YWcgbWVudGlvbmVkIGluIHRoZSBpbmRleCBpcyBmb3VuZAorIyAgICAgaW4gdGhlIHRleHQuCisjIFB5dGhvbjogIGVtYWlsIHRvIHB5dGhvbi1kb2NzQHB5dGhvbi5vcmcsIHRvIGdldCB0aGVpciBmZWVkYmFjay4KKyMgICBDb21wYXJlIHRvIGV4aXN0aW5nIGxpYi8gSW5mbyBtYW51YWwKKyMgICBXcml0ZSB0aGUgaG9va3MgaW50byBpbmZvLWxvb2s7IHJlcGxhY2UgcHlsaWJsb29rdXAxLTEudGFyLmd6LgorIyAgIFBvc3RwYXNzIHRvIHJlbW92ZSBleHRyYSBxdW90YXRpb24gbWFya3MgYXJvdW5kIHR5cG9ncmFwaHkgYWxyZWFkeSBpbgorIyAgICAgYSBkaWZmZXJlbnQgZm9udCAodG8gYXZvaWQgZG91YmxlIGRlbGltaXRlcnMgYXMgaW4gImBjb2RlJyIpOyBvcgorIyAgICAgcGVyaGFwcyBjb25zaWRlciB1c2luZyBvbmx5IGZvbnQtYmFzZWQgbWFya3VwIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0CisjICAgICB0aGUgZXh0cmEgKmJvbGQqIGFuZCBgY29kZScgbWFya3VwIGluIEluZm8uCisKKyMjIFBlcmhhcHMgZG9uJ3QgcmVseSBvbiBhdXRvbWF0aWMgbWVhbnMgZm9yIGFkZGluZyB1cCwgbmV4dCwgcHJldjsgSSBoYXZlCisjIyBhbGwgdGhhdCBpbmZvIGF2YWlsYWJsZSB0byBtZSBhbHJlYWR5LCBzbyBpdCdzIG5vdCBzbyBtdWNoIHRyb3VibGUgdG8KKyMjIGFkZCBpdC4gIChSaWdodD8pICBCdXQgaXQgaXMgKnNvKiBlYXN5IHRvIHVzZSBFbWFjcyBpbnN0ZWFkLi4uCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgU3RyaWN0dXJlcworIyMjCisKKyMgbWFuIEhUTUw6OlRyZWVCdWlsZGVyCisjIG1hbiBIVE1MOjpQYXJzZXIKKyMgbWFuIEhUTUw6OkVsZW1lbnQKKworIyByZXF1aXJlIEhUTUw6OlBhcnNlcldDb21tZW50OworcmVxdWlyZSBIVE1MOjpQYXJzZXI7CityZXF1aXJlIEhUTUw6OlRyZWVCdWlsZGVyOworcmVxdWlyZSBIVE1MOjpFbGVtZW50OworCit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3VzZSBzdHJpY3Q7CisjIHVzZSBDYXJwOworCit1c2UgY2hlY2thcmdzOworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIFZhcmlhYmxlcworIyMjCisKK215IEBzZWN0aW9uX3N0YWNrID0gKCk7CQkjIGVsZW1lbnRzIGFyZSBjaGFwdGVyL3NlY3Rpb24vc3Vic2VjIG5vZGV0aXRsZXMgKEkgdGhpbmspCitteSAkY3VycmVudF9yZWZfdGRmOwkJIyBmb3IgdGhlIGZpbGUgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZDsKKwkJCQkjICB1c2VkIGluIGVycm9yIG1lc3NhZ2VzCitteSAkaHRtbF9kaXJlY3Rvcnk7CitteSAlZm9vdG5vdGVzOworCisjIEZpcnN0IGVsZW1lbnQgc2hvdWxkIG5vdCBiZSB1c2VkLgorbXkgQHNlY3Rpb25tYXJrZXIgPSAoIm1hbnVhbCIsICJjaGFwdGVyIiwgInNlY3Rpb24iLCAic3Vic2VjdGlvbiIsICJzdWJzdWJzZWN0aW9uIik7CisKK215ICVpbmxpbmVfbWFya3VwID0gKCJiIiA9PiAic3Ryb25nIiwKKwkJICAgICAiY29kZSIgPT4gImNvZGUiLAorCQkgICAgICJpIiA9PiAiZW1waCIsCisJCSAgICAgImtiZCIgPT4gImtiZCIsCisJCSAgICAgInNhbXAiID0+ICJzYW1wIiwKKwkJICAgICAic3Ryb25nIiA9PiAic3Ryb25nIiwKKwkJICAgICAidHQiID0+ICJjb2RlIiwKKwkJICAgICAidmFyIiA9PiAidmFyIik7CisKK215IEBkZWZlcnJlZF9pbmRleF9lbnRyaWVzID0gKCk7CisKK215IEBpbmRleF90aXRsZXMgPSAoKTsJCSMgbGlzdCBvZiAoZmlsZW5hbWUsIHR5cGUpIGxpc3RzCitteSAlaW5kZXhfaW5mbyA9ICgiSW5kZXgiID0+IFsiXEBibGluZGV4IiwgImJsIl0sCisJCSAgIkNvbmNlcHQgSW5kZXgiID0+IFsiXEBjaW5kZXgiLCAiY3AiXSwKKwkJICAiTW9kdWxlIEluZGV4IiA9PiBbIlxAbWRpbmRleCIsICJtZCJdKTsKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBNYWluL2NvbnRlbnRzIHBhZ2UKKyMjIworCisjIFByb2Nlc3MgZmlyc3QtbGV2ZWwgcGFnZSBvbiBpdHMgb3duLCBvciBqdXN0IGEgY29udGVudHMgcGFnZT8gIFdlbGwsIEkgZG8KKyMgd2FudCB0aGUgdGl0bGUsIGF1dGhvciwgZXRjLiwgYW5kIHRoZSBmcm9udCBtYXR0ZXIuLi4gIEZvciBub3csIGp1c3QgYWRkCisjIHRoYXQgYnkgaGFuZCBhdCB0aGUgZW5kLgorCisKKyMgZGF0YSBzdHJ1Y3R1cmUgcG9zc2liaWxpdGllczoKKyMgICogdHJlZS1saWtlIChuZWVkIHNvbWUga2luZCBvZiBzdGFjayB3aGVuIHByb2Nlc3NpbmcgKG9yIHBhcmVudCBwb2ludGVycykpCisjICAqIGxpc3Qgb2YgbmFtZSBhbmQgZGVwdGg7IHJlbWVtYmVyIG9sZCBhbmQgbmV3IGRlcHRocy4KKworIyBFYWNoIGVsZW1lbnQgaXMgYSByZWZlcmVuY2UgdG8gYSBsaXN0IG9mIChub2RldGl0bGUsIGRlcHRoLCBmaWxlbmFtZSkuCitteSBAY29udGVudHNfbGlzdCA9ICgpOworCisjIFRoZSBwcm9ibGVtIHdpdGggZG9pbmcgZml4dXBzIG9uIHRoZSBmbHkgaXMgdGhhdCBzb21lIHNlY3Rpb25zIG1heSBoYXZlCisjIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgKGFuZCBubyBsb25nZXIgYXZhaWxhYmxlKSBieSB0aGUgdGltZSB3ZSBub3RpY2UKKyMgb3RoZXJzIHdpdGggdGhlIHNhbWUgbmFtZS4gIEl0J3MgcHJvYmFibHkgYmV0dGVyIHRvIGZ1bGx5IGNvbnN0cnVjdCB0aGUKKyMgY29udGVudHMgbGlzdCAocmVhZGluZyBpbiBhbGwgZmlsZXMgb2YgaW50ZXJlc3QpIHVwZnJvbnQ7IHRoYXQgd2lsbCBhbHNvCisjIGxldCBtZSBkbyBhIGJldHRlciBqb2Igd2l0aCBjcm9zcy1yZWZlcmVuY2VzLCBiZWNhdXNlIGFnYWluLCBhbGwgZmlsZXMKKyMgd2lsbCBhbHJlYWR5IGJlIHJlYWQgaW4uCitteSAlY29udGVudHNfaGFzaCA9ICgpOworbXkgJWNvbnRlbnRzX2ZpeHVwcyA9ICgpOworCitteSBAY3VycmVudF9jb250ZW50c19saXN0ID0gKCk7CisKKyMgTWVyZ2UgQGN1cnJlbnRfY29udGVudHNfbGlzdCBpbnRvIEBjb250ZW50c19saXN0LAorIyBhbmQgc2V0IEBjdXJyZW50X2NvbnRlbnRzX2xpc3QgdG8gYmUgZW1wdHkuCitzdWIgbWVyZ2VfY29udGVudHNfbGlzdHMgKCApCit7IGNoZWNrX2FyZ3MoMCwgQF8pOworCisgICMgVGhyZWUgcG9zc2liaWxpdGllczoKKyAgIyAgKiBAY29udGVudHNfbGlzdCBpcyBlbXB0eTogcmVwbGFjZSBpdCBieSBAY3VycmVudF9jb250ZW50c19saXN0LgorICAjICAqIHByZWZpeGVzIG9mIHRoZSB0d28gbGlzdHMgYXJlIGlkZW50aWNhbDogZG8gbm90aGluZworICAjICAqIEBjdXJyZW50X2NvbnRlbnRzX2xpc3QgaXMgYWxsIGF0IGxvd2VyIGxldmVsIHRoYW4gJGNvbnRlbnRzX2xpc3RbMF07CisgICMgICAgcHJlZml4IEBjb250ZW50c19saXN0IGJ5IEBjdXJyZW50X2NvbnRlbnRzX2xpc3QKKworICBpZiAoc2NhbGFyKEBjdXJyZW50X2NvbnRlbnRzX2xpc3QpID09IDApCisgICAgeyBkaWUgImVtcHR5IGN1cnJlbnRfY29udGVudHNfbGlzdCI7IH0KKworICAjICAgaWYgKHNjYWxhcihAY29udGVudHNfbGlzdCkgPT0gMCkKKyAgIyAgICAgeyBAY29udGVudHNfbGlzdCA9IEBjdXJyZW50X2NvbnRlbnRzX2xpc3Q7CisgICMgICAgICAgQGN1cnJlbnRfY29udGVudHNfbGlzdCA9ICgpOworICAjICAgICAgIHJldHVybjsgfQorCisgICMgICBpZiAoKCQgeyRjb250ZW50c19saXN0WzBdfVsxXSkgPCAoJCB7JGN1cnJlbnRfY29udGVudHNfbGlzdFswXX1bMV0pKQorICAjICAgICB7IHVuc2hpZnQgQGNvbnRlbnRzX2xpc3QsIEBjdXJyZW50X2NvbnRlbnRzX2xpc3Q7CisgICMgICAgICAgQGN1cnJlbnRfY29udGVudHNfbGlzdCA9ICgpOworICAjICAgICAgIHJldHVybjsgfQorCisgIGZvciAobXkgJGk9MDsgJGk8c2NhbGFyKEBjdXJyZW50X2NvbnRlbnRzX2xpc3QpOyAkaSsrKQorICAgIHsgbXkgJHJlZl9jX3RkZiA9ICRjdXJyZW50X2NvbnRlbnRzX2xpc3RbJGldOworICAgICAgaWYgKCRpID49IHNjYWxhcihAY29udGVudHNfbGlzdCkpCisJeyBwdXNoIEBjb250ZW50c19saXN0LCAkcmVmX2NfdGRmOworCSAgbXkgJHRpdGxlID0gJCB7JHJlZl9jX3RkZn1bMF07CisJICBpZiAoZGVmaW5lZCAkY29udGVudHNfaGFzaHskdGl0bGV9KQorCSAgICB7ICRjb250ZW50c19maXh1cHN7JHRpdGxlfSA9IDE7IH0KKwkgIGVsc2UKKwkgICAgeyAkY29udGVudHNfaGFzaHskdGl0bGV9ID0gMTsgfQorCSAgbmV4dDsgfQorICAgICAgbXkgJHJlZl90ZGYgPSAkY29udGVudHNfbGlzdFskaV07CisgICAgICBteSAoJHRpdGxlLCAkZGVwdGgsICRmaWxlKSA9IEB7JHJlZl90ZGZ9OworICAgICAgbXkgKCRjX3RpdGxlLCAkY19kZXB0aCwgJGNfZmlsZSkgPSBAeyRyZWZfY190ZGZ9OworCisgICAgICBpZiAoKCR0aXRsZSBuZSAkY190aXRsZSkKKwkgICYmICgkZGVwdGggPCAkY19kZXB0aCkKKwkgICYmICgkZmlsZSBuZSAkY19maWxlKSkKKwl7IHNwbGljZSBAY29udGVudHNfbGlzdCwgJGksIDAsICRyZWZfY190ZGY7CisJICBpZiAoZGVmaW5lZCAkY29udGVudHNfaGFzaHskY190aXRsZX0pCisJICAgIHsgJGNvbnRlbnRzX2ZpeHVwc3skY190aXRsZX0gPSAxOyB9CisJICBlbHNlCisJICAgIHsgJGNvbnRlbnRzX2hhc2h7JGNfdGl0bGV9ID0gMTsgfQorCSAgbmV4dDsgfQorCisgICAgICBpZiAoKCR0aXRsZSBuZSAkY190aXRsZSkKKwkgIHx8ICgkZGVwdGggIT0gJGNfZGVwdGgpCisJICB8fCAoJGZpbGUgbmUgJGNfZmlsZSkpCisJeyBkaWUgKCJ3aGlsZSBwcm9jZXNzaW5nICQgeyRjdXJyZW50X3JlZl90ZGZ9WzJdIGF0IGRlcHRoICQgeyRjdXJyZW50X3JlZl90ZGZ9WzFdLCBtaXNtYXRjaCBhdCBpbmRleCAkaToiLAorCSAgICAgICAiXG4gIG1haW46ICA8PDwkdGl0bGU+Pj4gJGRlcHRoICRmaWxlIiwKKwkgICAgICAgIlxuICBjdXJyOiAgPDw8JGNfdGl0bGU+Pj4gJGNfZGVwdGggJGNfZmlsZSIpOyB9CisgICAgfQorICBAY3VycmVudF9jb250ZW50c19saXN0ID0gKCk7Cit9CisKKworCisjIFNldCBAY3VycmVudF9jb250ZW50c19saXN0IHRvIGEgbGlzdCBvZiAodGl0bGUsIGhyZWYsIHNlY3Rpb25sZXZlbCk7CisjICB0aGVuIG1lcmdlIHRoYXQgbGlzdCBpbnRvIEBjb250ZW50c19saXN0LgorIyBNYXliZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHNvIHByb2R1Y2UgYSBtYXAKKyMgIGZyb20gdGl0bGUgKG9yIGhyZWYpIHRvIHNlY3Rpb25sZXZlbCAoZWcgImNoYXB0ZXIiPykuCitzdWIgcHJvY2Vzc19jaGlsZF9saW5rcyAoICQgKQoreyBteSAoJGhlKSA9IGNoZWNrX2FyZ3MoMSwgQF8pOworCisgICMgJGhlLT5kdW1wKCk7CisgIGlmIChzY2FsYXIoQGN1cnJlbnRfY29udGVudHNfbGlzdCkgIT0gMCkKKyAgICB7IGRpZSAiY3VycmVudF9jb250ZW50c19saXN0IG5vbmVtcHR5OiBAY3VycmVudF9jb250ZW50c19saXN0IjsgfQorICAkaGUtPnRyYXZlcnNlKFwmaW5jcmVtZW50X2N1cnJlbnRfY29udGVudHNfbGlzdCwgJ2lnbm9yZSB0ZXh0Jyk7CisKKyAgIyBOb3JtYWxpemUgdGhlIGRlcHRoczsgZm9yIGluc3RhbmNlLCBjb252ZXJ0IDEsMyw1IGludG8gMCwxLDIuCisgIG15ICVkZXB0aHMgPSAoKTsKKyAgZm9yIG15ICRyZWZfdGRmIChAY3VycmVudF9jb250ZW50c19saXN0KQorICAgIHsgJGRlcHRoc3skIHskcmVmX3RkZn1bMV19ID0gMTsgfQorICBteSBAc29ydGVkX2RlcHRocyA9IHNvcnQga2V5cyAlZGVwdGhzOworICBteSAkY3VycmVudF9kZXB0aCA9IHNjYWxhcihAc2VjdGlvbl9zdGFjayktMTsKKyAgbXkgJGN1cnJlbnRfZGVwdGhfMiA9ICQgeyRjdXJyZW50X3JlZl90ZGZ9WzFdOworICBpZiAoJGN1cnJlbnRfZGVwdGggIT0gJGN1cnJlbnRfZGVwdGhfMikKKyAgICB7IGRpZSAibWlzbWF0Y2ggaW4gY3VycmVudCBkZXB0aHM6ICRjdXJyZW50X2RlcHRoICRjdXJyZW50X2RlcHRoXzI7ICIsIGpvaW4oIiwgIiwgQHNlY3Rpb25fc3RhY2spOyB9CisgIGZvciAobXkgJGk9MDsgJGk8c2NhbGFyKEBzb3J0ZWRfZGVwdGhzKTsgJGkrKykKKyAgICB7ICRkZXB0aHN7JHNvcnRlZF9kZXB0aHNbJGldfSA9ICRpICsgJGN1cnJlbnRfZGVwdGgrMTsgfQorICBmb3IgbXkgJHJlZl90ZGYgKEBjdXJyZW50X2NvbnRlbnRzX2xpc3QpCisgICAgeyAkIHskcmVmX3RkZn1bMV0gPSAkZGVwdGhzeyQgeyRyZWZfdGRmfVsxXX07IH0KKworICAjIEVsaW1pbmF0ZSB1bmludGVyZXN0aW5nIHNlY3Rpb25zLiAgSGFyZC1jb2RlZCBoYWNrIGZvciBub3cuCisgIGlmICgkIHskY3VycmVudF9jb250ZW50c19saXN0Wy0xXX1bMF0gZXEgIkFib3V0IHRoaXMgZG9jdW1lbnQgLi4uIikKKyAgICB7IHBvcCBAY3VycmVudF9jb250ZW50c19saXN0OyB9CisgIGlmICgoc2NhbGFyKEBjdXJyZW50X2NvbnRlbnRzX2xpc3QpID4gMSkKKyAgICAgICYmICgkIHskY3VycmVudF9jb250ZW50c19saXN0WzFdfVswXSBlcSAiQ29udGVudHMiKSkKKyAgICB7IG15ICRyZWZfZmlyc3RfdGRmID0gc2hpZnQgQGN1cnJlbnRfY29udGVudHNfbGlzdDsKKyAgICAgICRjdXJyZW50X2NvbnRlbnRzX2xpc3RbMF0gPSAkcmVmX2ZpcnN0X3RkZjsgfQorCisgIGZvciAobXkgJGk9MDsgJGk8c2NhbGFyKEBjdXJyZW50X2NvbnRlbnRzX2xpc3QpOyAkaSsrKQorICAgIHsgbXkgJHJlZl90ZGYgPSAkY3VycmVudF9jb250ZW50c19saXN0WyRpXTsKKyAgICAgIG15ICR0aXRsZSA9ICQgeyRyZWZfdGRmfVswXTsKKyAgICAgIGlmIChleGlzdHMgJGluZGV4X2luZm97JHRpdGxlfSkKKwl7IG15ICRpbmRleF9maWxlID0gJCB7JHJlZl90ZGZ9WzJdOworCSAgbXkgKCRpbmRleGluZ19jb21tYW5kLCAkc3VmZml4KSA9IEB7JGluZGV4X2luZm97JHRpdGxlfX07CisJICBwcm9jZXNzX2luZGV4X2ZpbGUoJGluZGV4X2ZpbGUsICRpbmRleGluZ19jb21tYW5kKTsKKwkgIHByaW50IFRFWEkgIlxuXEBkZWZpbmRleCAkc3VmZml4XG4iOworCSAgcHVzaCBAaW5kZXhfdGl0bGVzLCAkdGl0bGU7CisJICBzcGxpY2UgQGN1cnJlbnRfY29udGVudHNfbGlzdCwgJGksIDE7CisJICAkaS0tOyB9CisgICAgICBlbHNpZiAoJHRpdGxlID1+IC9cYkluZGV4JC8pCisJeyBwcmludCBTVERFUlIgIldhcm5pbmc6IFwiJHRpdGxlXCIgbWlnaHQgYmUgYW4gaW5kZXg7IGlmIHNvLCBlZGl0IFwlaW5kZXhfaW5mby5cbiI7IH0gfQorCisgIG1lcmdlX2NvbnRlbnRzX2xpc3RzKCk7CisKKyAgIyBwcmludF9jb250ZW50c19saXN0KCk7CisgICMgcHJpbnRfaW5kZXhfaW5mbygpOworfQorCisKK3N1YiBpbmNyZW1lbnRfY3VycmVudF9jb250ZW50c19saXN0ICggJCQkICkKK3sgbXkgKCRoZSwgJHN0YXJ0ZmxhZywgJGRlcHRoKSA9IGNoZWNrX2FyZ3MoMywgQF8pOworICBpZiAoISRzdGFydGZsYWcpCisgICAgeyByZXR1cm47IH0KKworICBpZiAoJGhlLT50YWcgZXEgImxpIikKKyAgICB7IG15IEBsaV9jb250ZW50ID0gQHskaGUtPmNvbnRlbnR9OworICAgICAgaWYgKCRsaV9jb250ZW50WzBdLT50YWcgbmUgImEiKQorCXsgZGllICJmaXJzdCBlbGVtZW50IG9mIDxMST4gc2hvdWxkIGJlIDxBPiI7IH0KKyAgICAgIG15ICgkbmFtZSwgJGhyZWYsIEBjb250ZW50KSA9IGFuY2hvcl9pbmZvKCRsaV9jb250ZW50WzBdKTsKKyAgICAgICMgdW51c2VkICRuYW1lCisgICAgICBteSAkdGl0bGUgPSBqb2luKCIiLCBjb2xsZWN0X3RleHRzKCRsaV9jb250ZW50WzBdKSk7CisgICAgICAkdGl0bGUgPSB0ZXhpX3JlbW92ZV9wdW5jdHVhdGlvbigkdGl0bGUpOworICAgICAgIyBUaGUgcHJvYmxlbSB3aXRoIHRoZXNlIGlzIHRoYXQgdGhleSBhcmUgZm9ybWF0dGVkIGRpZmZlcmVudGx5IGluCisgICAgICAjIEBtZW51IGFuZCBAbm9kZSEKKyAgICAgICR0aXRsZSA9fiBzL2BgL1wiL2c7CisgICAgICAkdGl0bGUgPX4gcy8nJy9cIi9nOworICAgICAgJHRpdGxlID1+IHMvIC0tIC8gL2c7CisgICAgICBwdXNoIEBjdXJyZW50X2NvbnRlbnRzX2xpc3QsIFsgJHRpdGxlLCAkZGVwdGgsICRocmVmIF07IH0KKyAgcmV0dXJuIDE7Cit9CisKKyMgU2ltcGxlIHZlcnNpb24gZm9yIHNlY3Rpb24gdGl0bGVzCitzdWIgaHRtbF90b190ZXhpICggJCApCit7IG15ICgkaGUpID0gY2hlY2tfYXJncygxLCBAXyk7CisgIGlmICghcmVmICRoZSkKKyAgICB7IHJldHVybiAkaGU7IH0KKworICBteSAkdGFnID0gJGhlLT50YWc7CisgIGlmIChleGlzdHMgJGlubGluZV9tYXJrdXB7JHRhZ30pCisgICAgeyBteSAkcmVzdWx0ID0gIlxAJGlubGluZV9tYXJrdXB7JHRhZ31ceyI7CisgICAgICBmb3IgbXkgJGVsdCAoQHskaGUtPmNvbnRlbnR9KQorCXsgJHJlc3VsdCAuPSBodG1sX3RvX3RleGkoJGVsdCk7IH0KKyAgICAgICRyZXN1bHQgLj0gIlx9IjsKKyAgICAgIHJldHVybiAkcmVzdWx0OyB9CisgIGVsc2UKKyAgICB7ICRoZS0+ZHVtcCgpOworICAgICAgZGllICJodG1sX3RvX3RleGkgY29uZnVzZWQgYnkgPCR0YWc+IjsgfQorfQorCisKKworc3ViIHByaW50X2NvbnRlbnRzX2xpc3QgKCkKK3sgY2hlY2tfYXJncygwLCBAXyk7CisgIHByaW50IFNUREVSUiAiQ29udGVudHMgbGlzdDpcbiI7CisgIGZvciBteSAkcmVmX3RkZiAoQGNvbnRlbnRzX2xpc3QpCisgICAgeyBteSAoJHRpdGxlLCAkZGVwdGgsICRmaWxlKSA9IEB7JHJlZl90ZGZ9OworICAgICAgcHJpbnQgU1RERVJSICIkdGl0bGUgJGRlcHRoICRmaWxlXG4iOyB9Cit9CisKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBJbmRleAorIyMjCisKK215ICRsMmhfYnJva2VuX2xpbmtfbmFtZSA9ICJsMmgtIjsKKworCisjIG1hcCBmcm9tIGZpbGUgdG8gKG1hcCBmcm9tIGFuY2hvciBuYW1lIHRvIChsaXN0IG9mIGluZGV4IHRleHRzKSkKKyMgKFRoZSBsaXN0IGlzIG5lZWRlZCB3aGVuIGEgc2luZ2xlIExhVGVYIGNvbW1hbmQgbGlrZSBcZW52dmFyCisjIGV4cGFuZHMgdG8gbXVsdGlwbGUgXGluZGV4IGNvbW1hbmRzLikKK215ICVmaWxlX2luZGV4X2VudHJpZXMgPSAoKTsKK215ICV0aGlzX2luZGV4X2VudHJpZXM7CQkjIG1hcCBmcm9tIGFuY2hvciBuYW1lIHRvIChsaXN0IG9mIGluZGV4IHRleHRzKQorCitteSAlZmlsZV9pbmRleF9lbnRyaWVzX2Jyb2tlbiA9ICgpOyAjIG1hcCBmcm9tIGZpbGUgdG8gKGxpc3Qgb2YgaW5kZXggdGV4dHMpCitteSBAdGhpc19pbmRleF9lbnRyaWVzX2Jyb2tlbjsKKworbXkgJGluZGV4X3ByZWZpeCA9ICIiOworbXkgQGluZGV4X3ByZWZpeGVzID0gKCk7CisKK215ICR0aGlzX2luZGV4aW5nX2NvbW1hbmQ7CisKK3N1YiBwcmludF9pbmRleF9pbmZvICgpCit7IGNoZWNrX2FyZ3MoMCwgQF8pOworICBteSAoJGtleSwgJHZhbCk7CisgIGZvciBteSAkZmlsZSAoc29ydCBrZXlzICVmaWxlX2luZGV4X2VudHJpZXMpCisgICAgeyBteSAlaW5kZXhfZW50cmllcyA9ICV7JGZpbGVfaW5kZXhfZW50cmllc3skZmlsZX19OworICAgICAgcHJpbnQgU1RERVJSICJmaWxlOiAkZmlsZVxuIjsKKyAgICAgIGZvciBteSAkYW5hbWUgKHNvcnQga2V5cyAlaW5kZXhfZW50cmllcykKKwl7IG15IEBlbnRyaWVzID0gQHskaW5kZXhfZW50cmllc3skYW5hbWV9fTsKKwkgIGlmIChzY2FsYXIoQGVudHJpZXMpID09IDEpCisJICAgIHsgcHJpbnQgU1RERVJSICIgICRhbmFtZSA6ICRlbnRyaWVzWzBdXG4iOyB9CisJICBlbHNlCisJICAgIHsgcHJpbnQgU1RERVJSICIgICRhbmFtZSA6ICIsIGpvaW4oIlxuICAgICAiIC4gKCIgIiB4IGxlbmd0aCgkYW5hbWUpKSwgQGVudHJpZXMpLCAiXG4iOyB9IH0gfQorICBmb3IgbXkgJGZpbGUgKHNvcnQga2V5cyAlZmlsZV9pbmRleF9lbnRyaWVzX2Jyb2tlbikKKyAgICB7IG15IEBlbnRyaWVzID0gQHskZmlsZV9pbmRleF9lbnRyaWVzX2Jyb2tlbnskZmlsZX19OworICAgICAgcHJpbnQgU1RERVJSICJmaWxlOiAkZmlsZVxuIjsKKyAgICAgIGZvciBteSAkZW50cnkgKEBlbnRyaWVzKQorCXsgcHJpbnQgU1RERVJSICIgICRlbnRyeVxuIjsgfQorICAgIH0KK30KKworCitzdWIgcHJvY2Vzc19pbmRleF9maWxlICggJCQgKQoreyBteSAoJGZpbGUsICRpbmRleGluZ19jb21tYW5kKSA9IGNoZWNrX2FyZ3MoMiwgQF8pOworICAjIHByaW50ICJwcm9jZXNzX2luZGV4X2ZpbGUgJGZpbGUgJGluZGV4aW5nX2NvbW1hbmRcbiI7CisKKyAgbXkgJGhlID0gZmlsZV90b190cmVlKCRodG1sX2RpcmVjdG9yeSAuICRmaWxlKTsKKyAgIyAkaGUtPmR1bXAoKTsKKworICAkdGhpc19pbmRleGluZ19jb21tYW5kID0gJGluZGV4aW5nX2NvbW1hbmQ7CisgICRoZS0+dHJhdmVyc2UoXCZwcm9jZXNzX2lmX2luZGV4X2RsX2NvbXBhY3QsICdpZ25vcmUgdGV4dCcpOworICB1bmRlZiAkdGhpc19pbmRleGluZ19jb21tYW5kOworICAjIHByaW50ICJwcm9jZXNzX2luZGV4X2ZpbGUgZG9uZVxuIjsKK30KKworCitzdWIgcHJvY2Vzc19pZl9pbmRleF9kbF9jb21wYWN0ICggJCQkICkKK3sgbXkgKCRoZSwgJHN0YXJ0ZmxhZykgPSAoY2hlY2tfYXJncygzLCBAXykpWzAsMV07ICMgIGlnbm9yZSBkZXB0aCBhcmd1bWVudAorICBpZiAoISRzdGFydGZsYWcpCisgICAgeyByZXR1cm47IH0KKworICBpZiAoKCRoZS0+dGFnKCkgZXEgImRsIikgJiYgKGRlZmluZWQgJGhlLT5hdHRyKCdjb21wYWN0JykpKQorICAgIHsgcHJvY2Vzc19pbmRleF9kbF9jb21wYWN0KCRoZSk7CisgICAgICByZXR1cm4gMDsgfQorICBlbHNlCisgICAgeyByZXR1cm4gMTsgfQorfQorCisKKyMgVGhlIGVsZW1lbnRzIG9mIGEgPERMIENPTVBBQ1Q+IGxpc3QgZnJvbSBhIExhVGVYMkhUTUwgaW5kZXg6CisjICAqIGEgc2luZ2xlIHNwYWNlOiB0ZXh0IHRvIGJlIGlnbm9yZWQKKyMgICogPERUPiBlbGVtZW50cyB3aXRoIGFuIG9wdGlvbmFsIDxERD4gZWxlbWVudCBmb2xsb3dpbmcgZWFjaCBvbmUKKyMgICAgVHdvIHR5cGVzIG9mIDxEVD4gZWxlbWVudHM6CisjICAgICAqIEZvbGxvd2VkIGJ5IGEgPEREPiBlbGVtZW50OiAgdGhlIDxEVD4gY29udGFpbnMgYSBzaW5nbGUKKyMgICAgICAgc3RyaW5nLCBhbmQgdGhlIDxERD4gY29udGFpbnMgYSB3aGl0ZXNwYWNlIHN0cmluZyB0byBiZSBpZ25vcmVkLCBhCisjICAgICAgIDxETCBDT01QQUNUPiB0byBiZSByZWN1cnNpdmVseSBwcm9jZXNzZWQgKHdpdGggdGhlIDxEVD4gc3RyaW5nIGFzIGEKKyMgICAgICAgcHJlZml4KSwgYW5kIGEgd2hpdGVzcGFjZSBzdHJpbmcgdG8gYmUgaWdub3JlZC4KKyMgICAgICogTm90IGZvbGxvd2VkIGJ5IGEgPEREPiBlbGVtZW50OiAgY29udGFpbnMgYSBsaXN0IG9mIGFuY2hvcnMKKyMgICAgICAgYW5kIHRleHRzIChpZ25vcmUgdGhlIHRleHRzLCB3aGljaCBhcmUgb25seSB3aGl0ZXNwYWNlIGFuZCBjb21tYXMpLgorIyAgICAgICBPcHRpb25hbGx5IGNvbnRhaW5zIGEgPERMIENPTVBBQ1Q+IHRvIGJlIHJlY3Vyc2l2ZWx5IHByb2Nlc3NlZCAod2l0aAorIyAgICAgICB0aGUgPERUPiBzdHJpbmcgYXMgYSBwcmVmaXgpCitzdWIgcHJvY2Vzc19pbmRleF9kbF9jb21wYWN0ICggJCApCit7IG15ICgkaCkgPSBjaGVja19hcmdzKDEsIEBfKTsKKyAgbXkgQGNvbnRlbnQgPSBAeyRoLT5jb250ZW50KCl9OworICBmb3IgKG15ICRpID0gMDsgJGkgPCBzY2FsYXIoQGNvbnRlbnQpOyAkaSsrKQorICAgIHsgbXkgJHRoaXNfaGUgPSAkY29udGVudFskaV07CisgICAgICBpZiAoJHRoaXNfaGUtPnRhZyBuZSAiZHQiKQorCXsgJHRoaXNfaGUtPmR1bXAoKTsKKwkgIGRpZSAiRXhwZWN0ZWQgPERUPiB0YWc6ICIgLiAkdGhpc19oZS0+dGFnOyB9CisgICAgICBpZiAoKCRpIDwgc2NhbGFyKEBjb250ZW50KSAtIDEpICYmICgkY29udGVudFskaSsxXS0+dGFnIGVxICJkZCIpKQorCXsgcHJvY2Vzc19pbmRleF9kdF9hbmRfZGQoJHRoaXNfaGUsICRjb250ZW50WyRpKzFdKTsKKwkgICRpKys7CX0KKyAgICAgIGVsc2UKKwl7IHByb2Nlc3NfaW5kZXhfbG9uZV9kdCgkdGhpc19oZSk7IH0gfSB9CisKKworCisjIEFyZ3VtZW50IGlzIGEgPERUPiBlbGVtZW50LiAgSWYgaXQgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBhbmNob3IsIHRoZW4KKyMgdGhlIHRleHRzIG9mIGFsbCBzdWJzZXF1ZW50IG9uZXMgYXJlICJbTGlua10iLiAgRXhhbXBsZToKKyMgICAgICAgPERUPgorIyAgICAgICAgIDxBIEhSRUY9ImVtYmVkZGluZy5odG1sI2wyaC0yMDEiPgorIyAgICAgICAgICAgIiRQQVRIIgorIyAgICAgICAgICIsICIKKyMgICAgICAgICA8QSBIUkVGPSJlbWJlZGRpbmcuaHRtbCNsMmgtMjA1Ij4KKyMgICAgICAgICAgICJbTGlua10iCisjIE9wdGlvbmFsbHkgY29udGFpbnMgYSA8REwgQ09NUEFDVD4gYXMgd2VsbC4gIEV4YW1wbGU6CisjIDxEVD4KKyMgICA8QSBIUkVGPSJ0eXBlcy5odG1sI2wyaC02MTYiPgorIyAgICAgImF0dHJpYnV0ZSIKKyMgICA8REwgQ09NUEFDVD4KKyMgICAgIDxEVD4KKyMgICAgICAgPEEgSFJFRj0iYXNzaWdubWVudC5odG1sI2wyaC0zMDc0Ij4KKyMgICAgICAgICAiYXNzaWdubWVudCIKKyMgICAgICAgIiwgIgorIyAgICAgICA8QSBIUkVGPSJhc3NpZ25tZW50Lmh0bWwjbDJoLTMwOTkiPgorIyAgICAgICAgICJbTGlua10iCisjICAgICA8RFQ+CisjICAgICAgIDxBIEhSRUY9InR5cGVzLmh0bWwjbDJoLSI+CisjICAgICAgICAgImFzc2lnbm1lbnQsIGNsYXNzIgorCitzdWIgcHJvY2Vzc19pbmRleF9sb25lX2R0ICggJCApCit7IG15ICgkZHQpID0gY2hlY2tfYXJncygxLCBAXyk7CisgIG15IEBkdGNvbnRlbnQgPSBAeyRkdC0+Y29udGVudCgpfTsKKyAgbXkgJGFjb250ZW50OworICBteSAkYWNvbnRlbnRfc3VmZml4OworICBmb3IgbXkgJGEgKEBkdGNvbnRlbnQpCisgICAgeyBpZiAoJGEgZXEgIiwgIikKKwl7IG5leHQ7IH0KKyAgICAgIGlmICghcmVmICRhKQorCXsgJGR0LT5kdW1wOworCSAgZGllICJVbmV4cGVjdGVkIDxEVD4gc3RyaW5nIGVsZW1lbnQ6ICRhIjsgfQorCisgICAgICBpZiAoJGEtPnRhZyBlcSAiZGwiKQorCXsgcHVzaCBAaW5kZXhfcHJlZml4ZXMsICRpbmRleF9wcmVmaXg7CisJICBpZiAoIWRlZmluZWQgJGFjb250ZW50X3N1ZmZpeCkKKwkgICAgeyBkaWUgImFjb250ZW50X3N1ZmZpeCBub3QgeWV0IGRlZmluZWQiOyB9CisJICAkaW5kZXhfcHJlZml4IC49ICRhY29udGVudF9zdWZmaXggLiAiLCAiOworCSAgcHJvY2Vzc19pbmRleF9kbF9jb21wYWN0KCRhKTsKKwkgICRpbmRleF9wcmVmaXggPSBwb3AoQGluZGV4X3ByZWZpeGVzKTsKKwkgIHJldHVybjsgfQorCisgICAgICBpZiAoJGEtPnRhZyBuZSAiYSIpCisJeyAkZHQtPmR1bXA7CisJICAkYS0+ZHVtcDsKKwkgIGRpZSAiRXhwZWN0ZWQgYW5jaG9yIGluIGxvbmUgPERUPiI7IH0KKworICAgICAgbXkgKCRhbmFtZSwgJGFocmVmLCBAYWNvbnRlbnQpID0gYW5jaG9yX2luZm8oJGEpOworICAgICAgIyB1bnVzZWQgJGFuYW1lCisgICAgICBpZiAoc2NhbGFyKEBhY29udGVudCkgIT0gMSkKKwl7IGRpZSAiRXhwZWN0ZWQganVzdCBvbmUgY29udGVudCBvZiA8QT4gaW4gPERUPjogQGFjb250ZW50IjsgfQorICAgICAgaWYgKHJlZiAkYWNvbnRlbnRbMF0pCisJeyAkYWNvbnRlbnRbMF0tPmR1bXA7CisJICBkaWUgIkV4cGVjdGVkIHN0cmluZyBjb250ZW50IG9mIDxBPiBpbiA8RFQ+OiAkYWNvbnRlbnRbMF0iOyB9CisgICAgICBpZiAoIWRlZmluZWQoJGFjb250ZW50KSkKKwl7ICRhY29udGVudCA9ICRpbmRleF9wcmVmaXggLiAkYWNvbnRlbnRbMF07CisJICAkYWNvbnRlbnRfc3VmZml4ID0gJGFjb250ZW50WzBdOyB9CisgICAgICBlbHNpZiAoKCRhY29udGVudFswXSBuZSAiW0xpbmtdIikgJiYgKCRhY29udGVudCBuZSAoJGluZGV4X3ByZWZpeCAuICRhY29udGVudFswXSkpKQorCXsgZGllICJEaWZmZXJpbmcgY29udGVudDogPDw8JGFjb250ZW50Pj4+LCA8PDwkYWNvbnRlbnRbMF0+Pj4iOyB9CisKKyAgICAgIGlmICghZGVmaW5lZCAkYWhyZWYpCisJeyAkZHQtPmR1bXA7CisJICBkaWUgIm5vIEhSRUYgaW4gbmFjaG9yIGluIDxEVD4iOyB9CisgICAgICBteSAoJGFocmVmX2ZpbGUsICRhaHJlZl9uYW1lKSA9IHNwbGl0KC9cIy8sICRhaHJlZik7CisgICAgICBpZiAoIWRlZmluZWQgJGFocmVmX25hbWUpCisJeyAjIFJlZmVyZW5jZSB0byBlbnRpcmUgZmlsZQorCSAgJGFocmVmX25hbWUgPSAiIjsgfQorCisgICAgICBpZiAoJGFocmVmX25hbWUgZXEgJGwyaF9icm9rZW5fbGlua19uYW1lKQorCXsgaWYgKCFleGlzdHMgJGZpbGVfaW5kZXhfZW50cmllc19icm9rZW57JGFocmVmX2ZpbGV9KQorCSAgICB7ICRmaWxlX2luZGV4X2VudHJpZXNfYnJva2VueyRhaHJlZl9maWxlfSA9IFtdOyB9CisJICBwdXNoIEB7JGZpbGVfaW5kZXhfZW50cmllc19icm9rZW57JGFocmVmX2ZpbGV9fSwgIiR0aGlzX2luZGV4aW5nX2NvbW1hbmQgJGFjb250ZW50IjsKKwkgIG5leHQ7IH0KKworICAgICAgaWYgKCFleGlzdHMgJGZpbGVfaW5kZXhfZW50cmllc3skYWhyZWZfZmlsZX0pCisJeyAkZmlsZV9pbmRleF9lbnRyaWVzeyRhaHJlZl9maWxlfSA9IHt9OyB9CisgICAgICAjIERvbid0IGRvIHRoaXMhICBJdCBhcHBlYXJzIHRvIG1ha2UgYSBjb3B5LCB3aGljaCBpcyBub3QgZGVzaXJlZC4KKyAgICAgICMgbXkgJWluZGV4X2VudHJpZXMgPSAleyRmaWxlX2luZGV4X2VudHJpZXN7JGFocmVmX2ZpbGV9fTsKKyAgICAgIGlmICghZXhpc3RzICQgeyRmaWxlX2luZGV4X2VudHJpZXN7JGFocmVmX2ZpbGV9fXskYWhyZWZfbmFtZX0pCisJeyAkIHskZmlsZV9pbmRleF9lbnRyaWVzeyRhaHJlZl9maWxlfX17JGFocmVmX25hbWV9ID0gW107IH0KKyAgICAgICMgCXsgbXkgJG9sZGNvbnRlbnQgPSAkIHskZmlsZV9pbmRleF9lbnRyaWVzeyRhaHJlZl9maWxlfX17JGFocmVmX25hbWV9OworICAgICAgIyAJICBpZiAoJGFjb250ZW50IGVxICRvbGRjb250ZW50KQorICAgICAgIyAJICAgIHsgZGllICJNdWx0aXBsZSBpZGVudGljYWwgaW5kZXggZW50cmllcz8iOyB9CisgICAgICAjIAkgIGRpZSAiVHJ5aW5nIHRvIGFkZCAkYWNvbnRlbnQsIGJ1dCBhbHJlYWR5IGhhdmUgaW5kZXggZW50cnkgcG9pbnRpbmcgYXQgJGFocmVmX2ZpbGVcIyRhaHJlZl9uYW1lOiAkeyRmaWxlX2luZGV4X2VudHJpZXN7JGFocmVmX2ZpbGV9fXskYWhyZWZfbmFtZX0iOyB9CisKKyAgICAgIHB1c2ggQHskIHskZmlsZV9pbmRleF9lbnRyaWVzeyRhaHJlZl9maWxlfX17JGFocmVmX25hbWV9fSwgIiR0aGlzX2luZGV4aW5nX2NvbW1hbmQgJGFjb250ZW50IjsKKyAgICAgICMgcHJpbnQgU1RERVJSICJrZXlzOiAiLCBrZXlzICV7JGZpbGVfaW5kZXhfZW50cmllc3skYWhyZWZfZmlsZX19LCAiXG4iOworICAgIH0KK30KKworc3ViIHByb2Nlc3NfaW5kZXhfZHRfYW5kX2RkICggJCQgKQoreyBteSAoJGR0LCAkZGQpID0gY2hlY2tfYXJncygyLCBAXyk7CisgIG15ICRkdGNvbnRlbnQ7CisgIHsgbXkgQGR0Y29udGVudCA9IEB7JGR0LT5jb250ZW50KCl9OworICAgIGlmICgoc2NhbGFyKEBkdGNvbnRlbnQpICE9IDEpIHx8IChyZWYgJGR0Y29udGVudFswXSkpCisgICAgICB7ICRkZC0+ZHVtcDsKKwkkZHQtPmR1bXA7CisJZGllICJFeHBlY3RlZCBzaW5nbGUgc3RyaW5nIChhY3R1YWwgc2l6ZSA9ICIgLiBzY2FsYXIoQGR0Y29udGVudCkgLiAiKSBpbiBjb250ZW50IG9mIDxEVD46IEBkdGNvbnRlbnQiOyB9CisgICAgJGR0Y29udGVudCA9ICRkdGNvbnRlbnRbMF07CisgICAgJGR0Y29udGVudCA9fiBzLyArJC8vOyB9CisgIG15ICRkZGNvbnRlbnQ7CisgIHsgbXkgQGRkY29udGVudCA9IEB7JGRkLT5jb250ZW50KCl9OworICAgIGlmIChzY2FsYXIoQGRkY29udGVudCkgIT0gMSkKKyAgICAgIHsgZGllICJFeHBlY3RlZCBzaW5nbGUgPEREPiBjb250ZW50LCBnb3QgIiwgc2NhbGFyKEBkZGNvbnRlbnQpLCAiIGVsZW1lbnRzOlxuIiwgam9pbigiXG4iLCBAZGRjb250ZW50KSwgIlxuICI7IH0KKyAgICAkZGRjb250ZW50ID0gJGRkY29udGVudFswXTsgfQorICBpZiAoJGRkY29udGVudC0+dGFnIG5lICJkbCIpCisgICAgeyBkaWUgIkV4cGVjdGVkIDxETD4gYXMgY29udGVudCBvZiA8REQ+LCBidXQgc2F3OiAkZGRjb250ZW50IjsgfQorCisgIHB1c2ggQGluZGV4X3ByZWZpeGVzLCAkaW5kZXhfcHJlZml4OworICAkaW5kZXhfcHJlZml4IC49ICRkdGNvbnRlbnQgLiAiLCAiOworICBwcm9jZXNzX2luZGV4X2RsX2NvbXBhY3QoJGRkY29udGVudCk7CisgICRpbmRleF9wcmVmaXggPSBwb3AoQGluZGV4X3ByZWZpeGVzKTsKK30KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBPcmRpbmFyeSBzZWN0aW9ucworIyMjCisKK3N1YiBwcm9jZXNzX3NlY3Rpb25fZmlsZSAoICQkJCApCit7IG15ICgkZmlsZSwgJGRlcHRoLCAkbm9kZXRpdGxlKSA9IGNoZWNrX2FyZ3MoMywgQF8pOworICBteSAkaGUgPSBmaWxlX3RvX3RyZWUoKCRmaWxlID1+IC9eXC8vKSA/ICRmaWxlIDogJGh0bWxfZGlyZWN0b3J5IC4gJGZpbGUpOworCisgICMgcHJpbnQgU1RERVJSICJwcm9jZXNzX3NlY3Rpb25fZmlsZTogJGZpbGUgJGRlcHRoICRub2RldGl0bGVcbiI7CisKKyAgIyBFcXVpdmFsZW50bHk6CisgICMgICB3aGlsZSAoJGRlcHRoID49IHNjYWxhcihAc2VjdGlvbl9zdGFjaykpIHsgcG9wKEBzZWN0aW9uX3N0YWNrKTsgfQorICBAc2VjdGlvbl9zdGFjayA9IEBzZWN0aW9uX3N0YWNrWzAuLiRkZXB0aC0xXTsKKworICAjIE5vdCBhIGdyZWF0IG5vZGVuYW1lIGZpeHVwIHNjaGVtZTsgbmVlZCBhIG1vcmUgZ2xvYmFsIHZpZXcKKyAgaWYgKChkZWZpbmVkICRjb250ZW50c19maXh1cHN7JG5vZGV0aXRsZX0pCisgICAgICAmJiAoc2NhbGFyKEBzZWN0aW9uX3N0YWNrKSA+IDApKQorICAgIHsgbXkgJHVwX3RpdGxlID0gJHNlY3Rpb25fc3RhY2tbJCNzZWN0aW9uX3N0YWNrXTsKKyAgICAgICMgaGFjayBmb3IgUHl0aG9uIFN0YW5kYXJkIExpYnJhcnkKKyAgICAgICR1cF90aXRsZSA9fiBzL14oQnVpbHQtaW58U3RhbmRhcmQpIE1vZHVsZSAvL2c7CisgICAgICBteSAoJHVwX2ZpcnN0X3dvcmQpID0gc3BsaXQoLyAvLCAkdXBfdGl0bGUpOworICAgICAgJG5vZGV0aXRsZSA9ICIkdXBfZmlyc3Rfd29yZCAkbm9kZXRpdGxlIjsKKyAgICB9CisKKyAgcHVzaCBAc2VjdGlvbl9zdGFjaywgJG5vZGV0aXRsZTsKKyAgIyBwcmludCBTVERFUlIgIm5ldyBzZWN0aW9uX3N0YWNrOiAiLCBqb2luKCIsICIsIEBzZWN0aW9uX3N0YWNrKSwgIlxuIjsKKworICAkaGUtPnRyYXZlcnNlKFwmcHJvY2Vzc19pZl9jaGlsZF9saW5rcywgJ2lnbm9yZSB0ZXh0Jyk7CisgICVmb290bm90ZXMgPSAoKTsKKyAgIyAkaGUtPmR1bXA7CisgICRoZS0+dHJhdmVyc2UoXCZwcm9jZXNzX2lmX2Zvb3Rub3RlcywgJ2lnbm9yZSB0ZXh0Jyk7CisKKyAgIyAkaGUtPmR1bXA7CisKKyAgaWYgKGV4aXN0cyAkZmlsZV9pbmRleF9lbnRyaWVzeyRmaWxlfSkKKyAgICB7ICV0aGlzX2luZGV4X2VudHJpZXMgPSAleyRmaWxlX2luZGV4X2VudHJpZXN7JGZpbGV9fTsKKyAgICAgICMgcHJpbnQgU1RERVJSICJ0aGlzX2luZGV4X2VudHJpZXM6XG4gIiwgam9pbigiXG4gIiwga2V5cyAldGhpc19pbmRleF9lbnRyaWVzKSwgIlxuIjsKKyAgICB9CisgIGVsc2UKKyAgICB7ICMgcHJpbnQgU1RERVJSICJXYXJuaW5nOiBubyBpbmRleCBlbnRyaWVzIGZvciBmaWxlICRmaWxlXG4iOworICAgICAgJXRoaXNfaW5kZXhfZW50cmllcyA9ICgpOyB9CisKKyAgaWYgKGV4aXN0cyAkZmlsZV9pbmRleF9lbnRyaWVzX2Jyb2tlbnskZmlsZX0pCisgICAgeyBAdGhpc19pbmRleF9lbnRyaWVzX2Jyb2tlbiA9IEB7JGZpbGVfaW5kZXhfZW50cmllc19icm9rZW57JGZpbGV9fTsgfQorICBlbHNlCisgICAgeyAjIHByaW50IFNUREVSUiAiV2FybmluZzogbm8gaW5kZXggZW50cmllcyBmb3IgZmlsZSAkZmlsZVxuIjsKKyAgICAgIEB0aGlzX2luZGV4X2VudHJpZXNfYnJva2VuID0gKCk7IH0KKworCisgIGlmICgkaGUtPnRhZygpIG5lICJodG1sIikKKyAgICB7IGRpZSAiRXhwZWN0ZWQgPEhUTUw+IGF0IHRvcCBsZXZlbCI7IH0KKyAgbXkgQGNvbnRlbnQgPSBAeyRoZS0+Y29udGVudCgpfTsKKyAgaWYgKCghcmVmICRjb250ZW50WzBdKSBvciAoJGNvbnRlbnRbMF0tPnRhZyBuZSAiaGVhZCIpKQorICAgIHsgJGhlLT5kdW1wOworICAgICAgZGllICI8SEVBRD4gbm90IGZpcnN0IGVsZW1lbnQgb2YgPEhUTUw+IjsgfQorICBpZiAoKCFyZWYgJGNvbnRlbnRbMV0pIG9yICgkY29udGVudFsxXS0+dGFnIG5lICJib2R5IikpCisgICAgeyAkaGUtPmR1bXA7CisgICAgICBkaWUgIjxCT0RZPiBub3Qgc2Vjb25kIGVsZW1lbnQgb2YgPEhUTUw+IjsgfQorCisgICRjb250ZW50WzFdLT50cmF2ZXJzZShcJm91dHB1dF9ib2R5KTsKK30KKworIyBzdGFjayBvZiB0aGluZ3Mgd2UncmUgaW5zaWRlIHRoYXQgYXJlIHByZXZlbnRpbmcgaW5kZXhpbmcgZnJvbSBvY2N1cnJpbmcgbm93LgorIyBUaGVzZSBhcmUgImgxIiwgImgyIiwgImgzIiwgImg0IiwgImg1IiwgImg2IiwgImR0IiAoYW5kIHBvc3NpYmx5IG90aGVycz8pCitteSBAaW5kZXhfZGVmZXJyZXJzID0gKCk7CisKK3N1YiBwdXNoX29yX3BvcF9pbmRleF9kZWZlcnJlcnMgKCAkJCApCit7IG15ICgkdGFnLCAkc3RhcnRmbGFnKSA9IGNoZWNrX2FyZ3MoMiwgQF8pOworICBpZiAoJHN0YXJ0ZmxhZykKKyAgICB7IHB1c2ggQGluZGV4X2RlZmVycmVycywgJHRhZzsgfQorICBlbHNlCisgICAgeyBteSAkb2xkX2RlZmVycmVyID0gcG9wIEBpbmRleF9kZWZlcnJlcnM7CisgICAgICBpZiAoJHRhZyBuZSAkb2xkX2RlZmVycmVyKQorCXsgZGllICJFeHBlY3RlZCAkdGFnIGF0IHRvcCBvZiBpbmRleF9kZWZlcnJlcnMgYnV0IHNhdyAkb2xkX2RlZmVycmVyOyByZW1haW5kZXIgPSAiLCBqb2luKCIgIiwgQGluZGV4X2RlZmVycmVycyk7IH0KKyAgICAgIGRvX2RlZmVycmVkX2luZGV4X2VudHJpZXMoKTsgfQorfQorCisKK3N1YiBsYWJlbF9hZGRfaW5kZXhfZW50cmllcyAoICQ7JCApCit7IG15ICgkbGFiZWwsICRoZSkgPSBjaGVja19hcmdzX3JhbmdlKDEsIDIsIEBfKTsKKyAgIyBwcmludCAoKGV4aXN0cyAkdGhpc19pbmRleF9lbnRyaWVzeyRsYWJlbH0pID8gIioiIDogIiAiKSwgIiBsYWJlbF9hZGRfaW5kZXhfZW50cmllcyAkbGFiZWxcbiI7CisgICMgJGhlIGlzIHRoZSBhbmNob3IgZWxlbWVudAorICBpZiAoZXhpc3RzICR0aGlzX2luZGV4X2VudHJpZXN7JGxhYmVsfSkKKyAgICB7IHB1c2ggQGRlZmVycmVkX2luZGV4X2VudHJpZXMsIEB7JHRoaXNfaW5kZXhfZW50cmllc3skbGFiZWx9fTsKKyAgICAgIHJldHVybjsgfQorCisgIGlmICgkbGFiZWwgZXEgJGwyaF9icm9rZW5fbGlua19uYW1lKQorICAgIHsgIyBUcnkgdG8gZmluZCBzb21lIHRleHQgdG8gdXNlIGluIGd1ZXNzaW5nIHdoaWNoIGxpbmtzIHNob3VsZCBwb2ludCBoZXJlCisgICAgICAjIEkgc2hvdWxkIHByb2JhYmx5IG9ubHkgbG9vayBhdCB0aGUgcHJldmlvdXMgZWxlbWVudCwgb3IgaWYgdGhhdCBpcworICAgICAgIyBhbGwgcHVuY3R1YXRpb24sIHRoZSBvbmUgYmVmb3JlIGl0OyBjb2xsZWN0aW5nIGFsbCB0aGUgcHJldmlvdXMgdGV4dHMKKyAgICAgICMgaXMgYSBiaXQgb2Ygb3ZlcmtpbGwuCisgICAgICBteSBAYW5jaG9yX3RleHRzID0gY29sbGVjdF90ZXh0cygkaGUpOworICAgICAgbXkgQHByZXZpb3VzX3RleHRzID0gY29sbGVjdF90ZXh0cygkaGUtPnBhcmVudCwgJGhlKTsKKyAgICAgICMgNCBlbGVtZW50cyBpcyBhcmJpdHJhcnk7IG91Z2h0IHRvIGZpbHRlciBvdXQgcHVuY3R1YXRpb24gYW5kIHNtYWxsIHdvcmRzCisgICAgICAjIGZpcnN0LCB0aGVuIHBlcmhhcHMga2VlcCBmZXdlci4gIFBlcmhhcHMgYWxzbyBmaWx0ZXIgb3V0IGZvcm1hdHRpbmcgc28KKyAgICAgICMgdGhhdCB3ZSBjYW4gc2VlIGEgbGFyZ2VyIGNodW5rIG9mIHRleHQ/ICAoUHJvYmFibHkgbm90LikKKyAgICAgICMgQWxzbyBwZXJoYXBzIHNob3VsZCBkbyBmdXJ0aGVyIGNodW5raW5nIGludG8gd29yZHMsIGluIGNhc2UgdGhlCisgICAgICAjIGluZGV4IHRlcm0gaXNuJ3QgYSBjaHVuayBvZiBpdHMgb3duIChlZywgd2FzIGluIDx0dD4uLi48L3R0Pi4KKyAgICAgIG15IEBjYW5kaWRhdGVfdGV4dHMgPSAoQGFuY2hvcl90ZXh0cywgKHJldmVyc2UoQHByZXZpb3VzX3RleHRzKSlbMC4ubWluKDMsJCNwcmV2aW91c190ZXh0cyldKTsKKworICAgICAgbXkgJGd1ZXNzZWQgPSAwOworICAgICAgZm9yIG15ICR0ZXh0IChAY2FuZGlkYXRlX3RleHRzKQorCXsgIyBteSAkb3JpZ190ZXh0ID0gJHRleHQ7CisJICBpZiAoJHRleHQgPX4gL15bXCJcYFwnKCkuPyEgXSokLykKKwkgICAgeyBuZXh0OyB9CisJICBpZiAobGVuZ3RoKCR0ZXh0KSA8PSAyKQorCSAgICB7IG5leHQ7IH0KKwkgICMgaGFjayBmb3IgUHl0aG9uIG1hbnVhbDsgbWF5YmUgZGVmZXIgdW50aWwgZmFpbHVyZSBmaXJzdCB0aW1lIGFyb3VuZD8KKwkgICR0ZXh0ID1+IHMvXnN5c1wuLy9nOworCSAgZm9yIG15ICRpdGVybSAoQHRoaXNfaW5kZXhfZW50cmllc19icm9rZW4pCisJICAgIHsgIyBJIGNvdWxkIHRlc3QgZm9yIHplcm86ICBMYVRlWDJIVE1MJ3MgZmFpbHVyZXMgaW4gdGhlIFB5dGhvbgorCSAgICAgICMgZG9jdW1lbnRhdGlvbiBhcmUgb25seSBmb3IgaXRlbXMgb2YgdGhlIGZvcm0gIi4uLiAoYnVpbHQtaW4uLi4pIgorCSAgICAgIGlmIChpbmRleCgkaXRlcm0sICR0ZXh0KSAhPSAtMSkKKwkJeyBwdXNoIEBkZWZlcnJlZF9pbmRleF9lbnRyaWVzLCAkaXRlcm07CisJCSAgIyBwcmludCBTVERFUlIgIkd1ZXNzaW5nIGluZGV4IHRlcm0gYCRpdGVybScgZm9yIHRleHQgYCRvcmlnX3RleHQnXG4iOworCQkgICRndWVzc2VkID0gMTsKKwkJfSB9IH0KKyAgICAgIGlmICghJGd1ZXNzZWQpCisJeyAjIHByaW50IFNUREVSUiAiTm8gZ3Vlc3MgaW4gYCIsIGpvaW4oIic7IGAiLCBAdGhpc19pbmRleF9lbnRyaWVzX2Jyb2tlbiksICInIGZvciB0ZXh0czpcbiBgIiwgam9pbigiJ1xuIGAiLCBAY2FuZGlkYXRlX3RleHRzKSwgIidcbiI7CisJfQorICAgIH0KK30KKworCisjIE5lZWQgdG8gYWRkIGNhbGxzIHRvIHRoaXMgYXQgdmFyaW91cyBwbGFjZXMuCisjIFBlcmhhcHMgYWRkIEhUTUw6OkVsZW1lbnQgYXJndW1lbnQgYW5kIGRvIHRoZSBjaGVjayBmb3IgYXBwcm9wcmlhdGVuZXNzCisjIGhlcmUgKGllLCBubyBhY3Rpb24gaWYgaW5zaWRlIDxIMT4sIGV0Yy4pLgorc3ViIGRvX2RlZmVycmVkX2luZGV4X2VudHJpZXMgKCkKK3sgY2hlY2tfYXJncygwLCBAXyk7CisgIGlmICgoc2NhbGFyKEBkZWZlcnJlZF9pbmRleF9lbnRyaWVzKSA+IDApCisgICAgICAmJiAoc2NhbGFyKEBpbmRleF9kZWZlcnJlcnMpID09IDApKQorICAgIHsgcHJpbnQgVEVYSSAiXG4iLCBqb2luKCJcbiIsIEBkZWZlcnJlZF9pbmRleF9lbnRyaWVzKSwgIlxuIjsKKyAgICAgIEBkZWZlcnJlZF9pbmRleF9lbnRyaWVzID0gKCk7IH0KK30KKworbXkgJHRhYmxlX2NvbHVtbnM7CQkjIHVuZGVmaW5lZCBpZiBub3QgaW4gYSB0YWJsZQorbXkgJHRhYmxlX2ZpcnN0X2NvbHVtbjsJCSMgYm9vbGVhbgorCitzdWIgb3V0cHV0X2JvZHkgKCAkJCQgKQoreyBteSAoJGhlLCAkc3RhcnRmbGFnKSA9IChjaGVja19hcmdzKDMsIEBfKSlbMCwxXTsgIyAgaWdub3JlIGRlcHRoIGFyZ3VtZW50CisKKyAgaWYgKCFyZWYgJGhlKQorICAgIHsgbXkgJHNwYWNlX2luZGV4ID0gaW5kZXgoJGhlLCAiICIpOworICAgICAgaWYgKCRzcGFjZV9pbmRleCAhPSAtMSkKKwl7ICMgV2h5IGRvZXMKKwkgICMgICBwcmludCBURVhJIHRleGlfcXVvdGUoc3Vic3RyKCRoZSwgMCwgJHNwYWNlX2luZGV4KzEpKTsKKwkgICMgZ2l2ZTogIENhbid0IGxvY2F0ZSBvYmplY3QgbWV0aG9kICJURVhJIiB2aWEgcGFja2FnZSAidGV4aV9xdW90ZSIKKwkgICMgKEJlY2F1c2UgdGhlIGRlZmluaXRpb24gdGV4aV9xdW90ZSBoYXNuJ3QgYmVlbiBzZWVuIHlldC4pCisJICBwcmludCBURVhJICZ0ZXhpX3F1b3RlKHN1YnN0cigkaGUsIDAsICRzcGFjZV9pbmRleCsxKSk7CisJICBkb19kZWZlcnJlZF9pbmRleF9lbnRyaWVzKCk7CisJICBwcmludCBURVhJICZ0ZXhpX3F1b3RlKHN1YnN0cigkaGUsICRzcGFjZV9pbmRleCsxKSk7IH0KKyAgICAgIGVsc2UKKwl7IHByaW50IFRFWEkgJnRleGlfcXVvdGUoJGhlKTsgfQorICAgICAgcmV0dXJuOyB9CisKKyAgbXkgJHRhZyA9ICRoZS0+dGFnKCk7CisKKyAgIyBPcmRpbmFyeSB0ZXh0IG1hcmt1cCBmaXJzdAorICBpZiAoZXhpc3RzICRpbmxpbmVfbWFya3VweyR0YWd9KQorICAgIHsgaWYgKCRzdGFydGZsYWcpCisJeyBwcmludCBURVhJICJcQCRpbmxpbmVfbWFya3VweyR0YWd9XHsiOyB9CisgICAgICBlbHNlCisJeyBwcmludCBURVhJICJcfSI7IH0gfQorICBlbHNpZiAoJHRhZyBlcSAiYSIpCisgICAgeyBteSAoJG5hbWUsICRocmVmLCBAY29udGVudCkgPSBhbmNob3JfaW5mbygkaGUpOworICAgICAgaWYgKCEkaHJlZikKKwl7ICMgVGhpcyBhbmNob3IgaXMgb25seSBoZXJlIGZvciBpbmRleGluZy9jcm9zcyByZWZlcmVuY2luZyBwdXJwb3Nlcy4KKwkgIGlmICgkc3RhcnRmbGFnKQorCSAgICB7IGxhYmVsX2FkZF9pbmRleF9lbnRyaWVzKCRuYW1lLCAkaGUpOyB9CisJfQorICAgICAgZWxzaWYgKCRocmVmID1+ICJeKGZ0cHxodHRwfG5ld3MpOiIpCisJeyBpZiAoJHN0YXJ0ZmxhZykKKwkgICAgeyAjIFNob3VsZCBhdm9pZCBzZWNvbmQgYXJndW1lbnQgaWYgaXQncyBpZGVudGljYWwgdG8gdGhlIFVSTC4KKwkgICAgICBwcmludCBURVhJICJcQHVyZWZceyRocmVmLCAiOyB9CisJICBlbHNlCisJICAgIHsgcHJpbnQgVEVYSSAiXH0iOyB9CisJfQorICAgICAgZWxzaWYgKCRocmVmID1+IC9eXCMoZm9vdFswLTldKykkLykKKwl7ICMgRm9vdG5vdGUKKwkgIGlmICgkc3RhcnRmbGFnKQorCSAgICB7ICMgQ291bGQgZG91YmxlLWNoZWNrIG5hbWUgYW5kIGNvbnRlbnQsIGJ1dCBJJ20gbm90CisJICAgICAgIyBjdXJyZW50bHkgc3RvcmluZyB0aGF0IGluZm9ybWF0aW9uLgorCSAgICAgIHByaW50IFRFWEkgIlxAZm9vdG5vdGVceyI7CisJICAgICAgJGZvb3Rub3Rlc3skMX0tPnRyYXZlcnNlKFwmb3V0cHV0X2JvZHkpOworCSAgICAgIHByaW50IFRFWEkgIlx9IjsKKwkgICAgICByZXR1cm4gMDsgfSB9CisgICAgICBlbHNlCisJeyBpZiAoJHN0YXJ0ZmxhZykKKwkgICAgeyAjIGNyb3NzLXJlZmVyZW5jZXMgYXJlIG5vdCBhY3RpdmUgSW5mbyBsaW5rcywgYnV0IG5vIHRleHQgaXMgbG9zdAorCSAgICAgIHByaW50IFNUREVSUiAiQ2FuJ3QgZGVhbCB3aXRoIGludGVybmFsIEhSRUYgYW5jaG9ycyB5ZXQ6XG4iOworCSAgICAgICRoZS0+ZHVtcDsgfQorCX0KKyAgICB9CisgIGVsc2lmICgkdGFnIGVxICJiciIpCisgICAgeyBwcmludCBURVhJICJcQFxuIjsgfQorICBlbHNpZiAoJHRhZyBlcSAiYm9keSIpCisgICAgeyB9CisgIGVsc2lmICgkdGFnIGVxICJjZW50ZXIiKQorICAgIHsgaWYgKGhhc19zaW5nbGVfY29udGVudF9zdHJpbmcoJGhlKQorCSAgJiYgKCQgeyRoZS0+Y29udGVudH1bMF0gPX4gL14gKiQvKSkKKwl7IHJldHVybiAwOyB9CisgICAgICBpZiAoJHN0YXJ0ZmxhZykKKwl7IHByaW50IFRFWEkgIlxuXEBjZW50ZXJcbiI7IH0KKyAgICAgIGVsc2UKKwl7IHByaW50IFRFWEkgIlxuXEBlbmQgY2VudGVyXG4iOyB9CisgICAgfQorICBlbHNpZiAoJHRhZyBlcSAiZGl2IikKKyAgICB7IG15ICRhbGlnbiA9ICRoZS0+YXR0cignYWxpZ24nKTsKKyAgICAgIGlmIChkZWZpbmVkKCRhbGlnbikgJiYgKCRhbGlnbiBlcSAiY2VudGVyIikpCisJeyBpZiAoaGFzX3NpbmdsZV9jb250ZW50X3N0cmluZygkaGUpCisJICAgICAgJiYgKCQgeyRoZS0+Y29udGVudH1bMF0gPX4gL14gKiQvKSkKKwkgICAgeyByZXR1cm4gMDsgfQorCSAgaWYgKCRzdGFydGZsYWcpCisJICAgIHsgcHJpbnQgVEVYSSAiXG5cQGNlbnRlclxuIjsgfQorCSAgZWxzZQorCSAgICB7IHByaW50IFRFWEkgIlxuXEBlbmQgY2VudGVyXG4iOyB9IH0KKyAgICB9CisgIGVsc2lmICgkdGFnIGVxICJkbCIpCisgICAgeyAjIFJlY29nbml6ZSAiPGRsPjxkZD48cHJlPiAuLi4gPC9wcmU+PC9kbD4iIHBhcmFkaWdtIGZvciAiQGV4YW1wbGUiCisgICAgICBpZiAoaGFzX3NpbmdsZV9jb250ZW50X3dpdGhfdGFnKCRoZSwgImRkIikpCisJeyBteSAkaGVfZGQgPSAkIHskaGUtPmNvbnRlbnR9WzBdOworCSAgaWYgKGhhc19zaW5nbGVfY29udGVudF93aXRoX3RhZygkaGVfZGQsICJwcmUiKSkKKwkgICAgeyBteSAkaGVfcHJlID0gJCB7JGhlX2RkLT5jb250ZW50fVswXTsKKwkgICAgICBwcmludF9wcmUoJGhlX3ByZSk7CisJICAgICAgcmV0dXJuIDA7IH0gfQorICAgICAgaWYgKCRzdGFydGZsYWcpCisJeyAjIENvdWxkIGV4YW1pbmUgdGhlIGVsZW1lbnRzLCB0byBiZSBjbGV2ZXJlciBhYm91dCBmb3JtYXR0aW5nLgorCSAgIyAoQWxzbyB0byB1c2UgZnRhYmxlLCB2dGFibGUuLi4pCisJICBwcmludCBURVhJICJcblxAdGFibGUgXEBhc2lzXG4iOyB9CisgICAgICBlbHNlCisJeyBwcmludCBURVhJICJcblxAZW5kIHRhYmxlXG4iOyB9CisgICAgfQorICBlbHNpZiAoJHRhZyBlcSAiZHQiKQorICAgIHsgcHVzaF9vcl9wb3BfaW5kZXhfZGVmZXJyZXJzKCR0YWcsICRzdGFydGZsYWcpOworICAgICAgaWYgKCRzdGFydGZsYWcpCisJeyBwcmludCBURVhJICJcblxAaXRlbSAiOyB9CisgICAgICBlbHNlCisJeyB9IH0KKyAgZWxzaWYgKCR0YWcgZXEgImRkIikKKyAgICB7IGlmICgkc3RhcnRmbGFnKQorCXsgcHJpbnQgVEVYSSAiXG4iOyB9CisgICAgICBlbHNlCisJeyB9CisgICAgICBpZiAoc2NhbGFyKEBpbmRleF9kZWZlcnJlcnMpICE9IDApCisJeyAkaGUtPmR1bXA7CisJICBkaWUgIlVuZXhwZWN0ZWQgPCR0YWc+IHdoaWxlIGluc2lkZTogKCIgLiBqb2luKCIgIiwgQGluZGV4X2RlZmVycmVycykgLiAiKTsgYmFkIEhUTUw/IjsgfQorICAgICAgZG9fZGVmZXJyZWRfaW5kZXhfZW50cmllcygpOworICAgIH0KKyAgZWxzaWYgKCR0YWcgPX4gL14oZm9udHxiaWd8c21hbGwpJC8pCisgICAgeyAjIERvIG5vdGhpbmcgZm9yIG5vdy4KKyAgICB9CisgIGVsc2lmICgkdGFnID1+IC9eaFsxLTZdJC8pCisgICAgeyAjIFdlIGRvbid0IG5lZWQgdGhpcyBiZWNhdXNlIHdlIG5ldmVyIHJlY3Vyc2l2ZWx5IGVudGVyIHRoZSBoZWFkaW5nIGNvbnRlbnQuCisgICAgICAjIHB1c2hfb3JfcG9wX2luZGV4X2RlZmVycmVycygkdGFnLCAkc3RhcnRmbGFnKTsKKyAgICAgIG15ICRzZWNuYW1lID0gIiI7CisgICAgICBteSBAc2VjbGFiZWxzID0gKCk7CisgICAgICBmb3IgbXkgJGVsdCAoQHskaGUtPmNvbnRlbnR9KQorCXsgaWYgKCFyZWYgJGVsdCkKKwkgICAgeyAkc2VjbmFtZSAuPSAkZWx0OyB9CisJICBlbHNpZiAoJGVsdC0+dGFnIGVxICJiciIpCisJICAgIHsgfQorCSAgZWxzaWYgKCRlbHQtPnRhZyBlcSAiYSIpCisJICAgIHsgbXkgKCRuYW1lLCAkaHJlZiwgQGFjb250ZW50KSA9IGFuY2hvcl9pbmZvKCRlbHQpOworICAgICAgICAgICAgICBpZiAoJGhyZWYpCisgICAgICAgICAgICAgICAgeyAkaGUtPmR1bXA7CisgICAgICAgICAgICAgICAgICAkZWx0LT5kdW1wOworICAgICAgICAgICAgICAgICAgZGllICJOb25zaW1wbGUgYW5jaG9yIGluIDwkdGFnPiI7IH0KKwkgICAgICBpZiAoIWRlZmluZWQgJG5hbWUpCisJCXsgZGllICJObyBOQU1FIGZvciBhbmNob3IgaW4gJHRhZyI7IH0KKwkgICAgICBwdXNoIEBzZWNsYWJlbHMsICRuYW1lOworCSAgICAgIGZvciBteSAkc3ViZWx0IChAYWNvbnRlbnQpCisJCXsgJHNlY25hbWUgLj0gaHRtbF90b190ZXhpKCRzdWJlbHQpOyB9IH0KKwkgIGVsc2UKKwkgICAgeyAkc2VjbmFtZSAuPSBodG1sX3RvX3RleGkoJGVsdCk7IH0gfQorICAgICAgaWYgKCRzZWNuYW1lIGVxICIiKQorCXsgZGllICJObyBzZWN0aW9uIG5hbWUgaW4gPCR0YWc+IjsgfQorICAgICAgaWYgKHNjYWxhcihAc2VjdGlvbl9zdGFjaykgPT0gMSkKKwl7IGlmICgkc2VjdGlvbl9zdGFja1stMV0gbmUgIlRvcCIpCisJICAgIHsgZGllICJOb3QgdG9wPyAkc2VjdGlvbl9zdGFja1stMV0iOyB9CisJICBwcmludCBURVhJICJcQHNldHRpdGxlICRzZWNuYW1lXG4iOworCSAgcHJpbnQgVEVYSSAiXEBjICUqKmVuZCBvZiBoZWFkZXJcbiI7CisJICBwcmludCBURVhJICJcbiI7CisJICBwcmludCBURVhJICJcQG5vZGUgVG9wXG4iOworCSAgcHJpbnQgVEVYSSAiXG4iOyB9CisgICAgICBlbHNlCisJeyBwcmludCBURVhJICJcblxAbm9kZSAkc2VjdGlvbl9zdGFja1stMV1cbiI7CisJICBwcmludCBURVhJICJcQCRzZWN0aW9ubWFya2VyW3NjYWxhcihAc2VjdGlvbl9zdGFjayktMV0gIiwgdGV4aV9yZW1vdmVfcHVuY3R1YXRpb24oJHNlY25hbWUpLCAiXG4iOyB9CisgICAgICBmb3IgbXkgJHNlY2xhYmVsIChAc2VjbGFiZWxzKQorCXsgbGFiZWxfYWRkX2luZGV4X2VudHJpZXMoJHNlY2xhYmVsKTsgfQorICAgICAgIyBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBvbmNlIHBlciBmaWxlLgorICAgICAgbGFiZWxfYWRkX2luZGV4X2VudHJpZXMoIiIpOworICAgICAgaWYgKHNjYWxhcihAaW5kZXhfZGVmZXJyZXJzKSAhPSAwKQorCXsgJGhlLT5kdW1wOworCSAgZGllICJVbmV4cGVjdGVkIDwkdGFnPiB3aGlsZSBpbnNpZGU6ICgiIC4gam9pbigiICIsIEBpbmRleF9kZWZlcnJlcnMpIC4gIik7IGJhZCBIVE1MPyI7IH0KKyAgICAgIGRvX2RlZmVycmVkX2luZGV4X2VudHJpZXMoKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgZWxzaWYgKCR0YWcgZXEgImhyIikKKyAgICB7IH0KKyAgZWxzaWYgKCR0YWcgZXEgImlnbm9yZSIpCisgICAgeyAjIEhhY2sgZm9yIGlnbm9yZWQgZWxlbWVudHMKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgZWxzaWYgKCR0YWcgZXEgImxpIikKKyAgICB7IGlmICgkc3RhcnRmbGFnKQorCXsgcHJpbnQgVEVYSSAiXG5cblxAaXRlbVxuIjsKKwkgIGRvX2RlZmVycmVkX2luZGV4X2VudHJpZXMoKTsgfSB9CisgIGVsc2lmICgkdGFnIGVxICJvbCIpCisgICAgeyBpZiAoJHN0YXJ0ZmxhZykKKwl7IHByaW50IFRFWEkgIlxuXEBlbnVtZXJhdGUgXEBidWxsZXRcbiI7IH0KKyAgICAgIGVsc2UKKwl7IHByaW50IFRFWEkgIlxuXEBlbmQgZW51bWVyYXRlXG4iOyB9IH0KKyAgZWxzaWYgKCR0YWcgZXEgInAiKQorICAgIHsgaWYgKCRzdGFydGZsYWcpCisJeyBwcmludCBURVhJICJcblxuIjsgfQorICAgICAgaWYgKHNjYWxhcihAaW5kZXhfZGVmZXJyZXJzKSAhPSAwKQorCXsgJGhlLT5kdW1wOworCSAgZGllICJVbmV4cGVjdGVkIDwkdGFnPiB3aGlsZSBpbnNpZGU6ICgiIC4gam9pbigiICIsIEBpbmRleF9kZWZlcnJlcnMpIC4gIik7IGJhZCBIVE1MPyI7IH0KKyAgICAgIGRvX2RlZmVycmVkX2luZGV4X2VudHJpZXMoKTsgfQorICBlbHNpZiAoJHRhZyBlcSAicHJlIikKKyAgICB7IHByaW50X3ByZSgkaGUpOworICAgICAgcmV0dXJuIDA7IH0KKyAgZWxzaWYgKCR0YWcgZXEgInRhYmxlIikKKyAgICB7ICMgQ291bGQgYWxzbyBpbmRpY2F0ZSBjb21tb24gZm9ybWF0dGluZyBmb3IgZmlyc3QgY29sdW1uLCBvcgorICAgICAgIyBkZXRlcm1pbmUgcmVsYXRpdmUgd2lkdGhzIGZvciBjb2x1bW5zIChvciBkZXRlcm1pbmUgYSBwcm90b3R5cGUgcm93KQorICAgICAgaWYgKCRzdGFydGZsYWcpCisJeyBpZiAoZGVmaW5lZCAkdGFibGVfY29sdW1ucykKKwkgICAgeyAkaGUtPmR1bXA7CisJICAgICAgZGllICJDYW4ndCBkZWFsIHdpdGggdGFibGUgbmVzdGVkIGluc2lkZSAkdGFibGVfY29sdW1ucy1jb2x1bW4gdGFibGUiOyB9CisJICAkdGFibGVfY29sdW1ucyA9IHRhYmxlX2NvbHVtbnMoJGhlKTsKKwkgIGlmICgkdGFibGVfY29sdW1ucyA8IDIpCisJICAgIHsgJGhlLT5kdW1wOworCSAgICAgIGRpZSAiQ29sdW1uIHdpdGggJHRhYmxlX2NvbHVtbnMgY29sdW1ucz8iOyB9CisJICBlbHNpZiAoJHRhYmxlX2NvbHVtbnMgPT0gMikKKwkgICAgeyBwcmludCBURVhJICJcblxAdGFibGUgXEBhc2lzXG4iOyB9CisJICBlbHNlCisJICAgIHsgcHJpbnQgVEVYSSAiXG5cQG11bHRpdGFibGUgXEBjb2x1bW5mcmFjdGlvbnMiOworCSAgICAgIGZvciAobXkgJGk9MDsgJGk8JHRhYmxlX2NvbHVtbnM7ICRpKyspCisJCXsgcHJpbnQgVEVYSSAiICIsIDEuMC8kdGFibGVfY29sdW1uczsgfQorCSAgICAgIHByaW50IFRFWEkgIlxuIjsgfSB9CisgICAgICBlbHNlCisJeyBpZiAoJHRhYmxlX2NvbHVtbnMgPT0gMikKKwkgICAgeyBwcmludCBURVhJICJcblxAZW5kIHRhYmxlXG4iOyB9CisJICBlbHNlCisJICAgIHsgcHJpbnQgVEVYSSAiXG5cQGVuZCBtdWx0aXRhYmxlXG4iOyB9CisJICB1bmRlZiAkdGFibGVfY29sdW1uczsgfSB9CisgIGVsc2lmICgoJHRhZyBlcSAidGQiKSB8fCAoJHRhZyBlcSAidGgiKSkKKyAgICB7IGlmICgkc3RhcnRmbGFnKQorCXsgaWYgKCR0YWJsZV9maXJzdF9jb2x1bW4pCisJICAgIHsgcHJpbnQgVEVYSSAiXG5cQGl0ZW0gIjsKKwkgICAgICAkdGFibGVfZmlyc3RfY29sdW1uID0gMDsgfQorCSAgZWxzaWYgKCR0YWJsZV9jb2x1bW5zID4gMikKKwkgICAgeyBwcmludCBURVhJICJcblxAdGFiICI7IH0gfQorICAgICAgZWxzZQorCXsgcHJpbnQgVEVYSSAiXG4iOyB9IH0KKyAgZWxzaWYgKCR0YWcgZXEgInRyIikKKyAgICB7IGlmICgkc3RhcnRmbGFnKQorCXsgJHRhYmxlX2ZpcnN0X2NvbHVtbiA9IDE7IH0gfQorICBlbHNpZiAoJHRhZyBlcSAidWwiKQorICAgIHsgaWYgKCRzdGFydGZsYWcpCisJeyBwcmludCBURVhJICJcblxAaXRlbWl6ZSBcQGJ1bGxldFxuIjsgfQorICAgICAgZWxzZQorCXsgcHJpbnQgVEVYSSAiXG5cQGVuZCBpdGVtaXplXG4iOyB9IH0KKyAgZWxzZQorICAgIHsgIyBJIHVzZWQgdG8gaGF2ZSBhIG5ld2xpbmUgYmVmb3JlICJvdXRwdXRfYm9keSIgaGVyZS4KKyAgICAgIHByaW50IFNUREVSUiAib3V0cHV0X2JvZHk6IGlnbm9yaW5nIDwkdGFnPiB0YWdcbiI7CisgICAgICAkaGUtPmR1bXA7CisgICAgICByZXR1cm4gMDsgfQorCisgIHJldHVybiAxOworfQorCitzdWIgcHJpbnRfcHJlICggJCApCit7IG15ICgkaGVfcHJlKSA9IGNoZWNrX2FyZ3MoMSwgQF8pOworICBpZiAoIWhhc19zaW5nbGVfY29udGVudF9zdHJpbmcoJGhlX3ByZSkpCisgICAgeyBkaWUgIk11bHRpcGxlIG9yIG5vbi1zdHJpbmcgY29udGVudCBmb3IgPFBSRT46ICIsIEB7JGhlX3ByZS0+Y29udGVudH07IH0KKyAgbXkgJHByZV9jb250ZW50ID0gJCB7JGhlX3ByZS0+Y29udGVudH1bMF07CisgIHByaW50IFRFWEkgIlxuXEBleGFtcGxlIjsKKyAgcHJpbnQgVEVYSSAmdGV4aV9xdW90ZSgkcHJlX2NvbnRlbnQpOworICBwcmludCBURVhJICJcQGVuZCBleGFtcGxlXG4iOworfQorCitzdWIgdGFibGVfY29sdW1ucyAoICQgKQoreyBteSAoJHRhYmxlKSA9IGNoZWNrX2FyZ3MoMSwgQF8pOworICBteSAkcmVzdWx0ID0gMDsKKyAgZm9yIG15ICRyb3cgKEB7JHRhYmxlLT5jb250ZW50fSkKKyAgICB7IGlmICgkcm93LT50YWcgbmUgInRyIikKKwl7ICR0YWJsZS0+ZHVtcDsKKwkgICRyb3ctPmR1bXA7CisJICBkaWUgIkV4cGVjdGVkIDxUUj4gYXMgdGFibGUgcm93LiI7IH0KKyAgICAgICRyZXN1bHQgPSBtYXgoJHJlc3VsdCwgc2NhbGFyKEB7JHJvdy0+Y29udGVudH0pKTsgfQorICByZXR1cm4gJHJlc3VsdDsKK30KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBVdGlsaXRpZXMKKyMjIworCitzdWIgbWluICggJCQgKQoreyBteSAoJHgsICR5KSA9IGNoZWNrX2FyZ3MoMiwgQF8pOworICByZXR1cm4gKCR4IDwgJHkpID8gJHggOiAkeTsKK30KKworc3ViIG1heCAoICQkICkKK3sgbXkgKCR4LCAkeSkgPSBjaGVja19hcmdzKDIsIEBfKTsKKyAgcmV0dXJuICgkeCA+ICR5KSA/ICR4IDogJHk7Cit9CisKK3N1YiBmaWxlX3RvX3RyZWUgKCAkICkKK3sgbXkgKCRmaWxlKSA9IGNoZWNrX2FyZ3MoMSwgQF8pOworCisgIG15ICR0cmVlID0gbmV3IEhUTUw6OlRyZWVCdWlsZGVyOworICAkdHJlZS0+aWdub3JlX3Vua25vd24oMSk7CisgICMgJHRyZWUtPndhcm4oMSk7CisgICR0cmVlLT5wYXJzZV9maWxlKCRmaWxlKTsKKyAgY2xlYW51cF9wYXJzZV90cmVlKCR0cmVlKTsKKyAgcmV0dXJuICR0cmVlCit9CisKKworc3ViIGhhc19zaW5nbGVfY29udGVudCAoICQgKQoreyBteSAoJGhlKSA9IGNoZWNrX2FyZ3MoMSwgQF8pOworICBpZiAoIXJlZiAkaGUpCisgICAgeyAjIHJldHVybiAwOworICAgICAgZGllICJOb24tcmVmZXJlbmNlIGFyZ3VtZW50OiAkaGUiOyB9CisgIG15ICRyZWZfY29udGVudCA9ICRoZS0+Y29udGVudDsKKyAgaWYgKCFkZWZpbmVkICRyZWZfY29udGVudCkKKyAgICB7IHJldHVybiAwOyB9CisgIG15IEBjb250ZW50ID0gQHskcmVmX2NvbnRlbnR9OworICBpZiAoc2NhbGFyKEBjb250ZW50KSAhPSAxKQorICAgIHsgcmV0dXJuIDA7IH0KKyAgcmV0dXJuIDE7Cit9CisKKworIyBSZXR1cm4gdHJ1ZSBpZiB0aGUgY29udGVudCBvZiB0aGUgZWxlbWVudCBjb250YWlucyBvbmx5IG9uZSBlbGVtZW50IGl0c2VsZiwKKyMgYW5kIHRoYXQgaW5uZXIgZWxlbWVudCBoYXMgdGhlIHNwZWNpZmllZCB0YWcuCitzdWIgaGFzX3NpbmdsZV9jb250ZW50X3dpdGhfdGFnICggJCQgKQoreyBteSAoJGhlLCAkdGFnKSA9IGNoZWNrX2FyZ3MoMiwgQF8pOworICBpZiAoIWhhc19zaW5nbGVfY29udGVudCgkaGUpKQorICAgIHsgcmV0dXJuIDA7IH0KKyAgbXkgJGNvbnRlbnQgPSAkIHskaGUtPmNvbnRlbnR9WzBdOworICBpZiAoIXJlZiAkY29udGVudCkKKyAgICB7IHJldHVybiAwOyB9CisgIG15ICRjb250ZW50X3RhZyA9ICRjb250ZW50LT50YWc7CisgIGlmICghZGVmaW5lZCAkY29udGVudF90YWcpCisgICAgeyByZXR1cm4gMDsgfQorICByZXR1cm4gJGNvbnRlbnRfdGFnIGVxICR0YWc7Cit9CisKK3N1YiBoYXNfc2luZ2xlX2NvbnRlbnRfc3RyaW5nICggJCApCit7IG15ICgkaGUpID0gY2hlY2tfYXJncygxLCBAXyk7CisgIGlmICghaGFzX3NpbmdsZV9jb250ZW50KCRoZSkpCisgICAgeyByZXR1cm4gMDsgfQorICBteSAkY29udGVudCA9ICQgeyRoZS0+Y29udGVudH1bMF07CisgIGlmIChyZWYgJGNvbnRlbnQpCisgICAgeyByZXR1cm4gMDsgfQorICByZXR1cm4gMTsKK30KKworCisjIFJldHVybiBuYW1lLCBocmVmLCBjb250ZW50LiAgRmlyc3QgdHdvIG1heSBiZSB1bmRlZmluZWQ7IHRoaXJkIGlzIGFuIGFycmF5LgorIyBJIGRvbid0IHNlZSBob3cgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBtb3JlIGF0dHJpYnV0ZXMuCitzdWIgYW5jaG9yX2luZm8gKCAkICkKK3sgbXkgKCRoZSkgPSBjaGVja19hcmdzKDEsIEBfKTsKKyAgaWYgKCRoZS0+dGFnIG5lICJhIikKKyAgICB7ICRoZS0+ZHVtcDsKKyAgICAgIGRpZSAicGFzc2VkIG5vbi1hbmNob3IgdG8gYW5jaG9yX2luZm8iOyB9CisgIG15ICRuYW1lID0gJGhlLT5hdHRyKCduYW1lJyk7CisgIG15ICRocmVmID0gJGhlLT5hdHRyKCdocmVmJyk7CisgIG15IEBjb250ZW50ID0gKCk7CisgIHsgbXkgJHJlZl9jb250ZW50ID0gJGhlLT5jb250ZW50OworICAgIGlmIChkZWZpbmVkICRyZWZfY29udGVudCkKKyAgICAgIHsgQGNvbnRlbnQgPSBAeyRyZWZfY29udGVudH07IH0gfQorICByZXR1cm4gKCRuYW1lLCAkaHJlZiwgQGNvbnRlbnQpOworfQorCisKK3N1YiB0ZXhpX3F1b3RlICggJCApCit7IG15ICgkdGV4dCkgPSBjaGVja19hcmdzKDEsIEBfKTsKKyAgJHRleHQgPX4gcy8oW1xAXHtcfV0pL1xAJDEvZzsKKyAgJHRleHQgPX4gcy8gLS0gLyAtLS0gL2c7CisgIHJldHVybiAkdGV4dDsKK30KKworIyBFbGltaW5hdGUgYmFkIHB1bmN0dWF0aW9uICh0aGF0IGNvbmZ1c2VzIE1ha2VpbmZvIG9yIEluZm8pIGZvciBzZWN0aW9uIHRpdGxlcy4KK3N1YiB0ZXhpX3JlbW92ZV9wdW5jdHVhdGlvbiAoICQgKQoreyBteSAoJHRleHQpID0gY2hlY2tfYXJncygxLCBAXyk7CisKKyAgJHRleHQgPX4gcy9eICsvL2c7CisgICR0ZXh0ID1+IHMvWyA6XSskLy9nOworICAkdGV4dCA9fiBzL15bMS05XVswLTkuXSogKy8vZzsKKyAgJHRleHQgPX4gcy8sLy9nOworICAjIEJvdGggZW1iZWRkZWQgY29sb25zIGFuZCAiIC0tICIgY29uZnVzZSBtYWtlaW5mby4gIChQZXJoYXBzICIgLS0gIgorICAjIGdldHMgY29udmVydGVkIGludG8gIiAtICIsIGp1c3QgYXMgIi0tLSIgd291bGQgYmUgY29udmVydGVkIGludG8gIiAtLSAiLAorICAjIHNvIHRoZSBuYW1lcyBlbmQgdXAgZGlmZmVyaW5nLikKKyAgIyAkdGV4dCA9fiBzLzovIC0tIC9nOworICAkdGV4dCA9fiBzLzovL2c7CisgIHJldHVybiAkdGV4dDsKK30KKworCisjIyBEbyBub3QgdXNlIHRoaXMgaW5zaWRlIGB0cmF2ZXJzZSc6ICBpdCB0aHJvd3Mgb2ZmIHRoZSB0cmF2ZXJzYWwuICBVc2UKKyMjIGh0bWxfcmVwbGFjZV9ieV9pZ25vcmUgb3IgaHRtbF9yZXBsYWNlX2J5X21ldGEgaW5zdGVhZC4KKyMgUmV0dXJucyAxIGlmIHN1Y2Nlc3MsIDAgaWYgZmFpbHVyZS4KK3N1YiBodG1sX3JlbW92ZSAoICQ7JCApCit7IG15ICgkaGUsICRwYXJlbnQpID0gY2hlY2tfYXJnc19yYW5nZSgxLCAyLCBAXyk7CisgIGlmICghZGVmaW5lZCAkcGFyZW50KQorICAgIHsgJHBhcmVudCA9ICRoZS0+cGFyZW50OyB9CisgIG15ICRyZWZfcGNvbnRlbnQgPSAkcGFyZW50LT5jb250ZW50OworICBteSBAcGNvbnRlbnQgPSBAeyRyZWZfcGNvbnRlbnR9OworICBmb3IgKG15ICRpPTA7ICRpPHNjYWxhcihAcGNvbnRlbnQpOyAkaSsrKQorICAgIHsgaWYgKCRwY29udGVudFskaV0gZXEgJGhlKQorCXsgc3BsaWNlIEB7JHJlZl9wY29udGVudH0sICRpLCAxOworCSAgJGhlLT5wYXJlbnQodW5kZWYpOworCSAgcmV0dXJuIDE7IH0gfQorICBkaWUgIkRpZG4ndCBmaW5kICRoZSBpbiAkcGFyZW50IjsKK30KKworCitzdWIgaHRtbF9yZXBsYWNlICggJCQ7JCApCit7IG15ICgkb3JpZywgJG5ldywgJHBhcmVudCkgPSBjaGVja19hcmdzX3JhbmdlKDIsIDMsIEBfKTsKKyAgaWYgKCFkZWZpbmVkICRwYXJlbnQpCisgICAgeyAkcGFyZW50ID0gJG9yaWctPnBhcmVudDsgfQorICBteSAkcmVmX3Bjb250ZW50ID0gJHBhcmVudC0+Y29udGVudDsKKyAgbXkgQHBjb250ZW50ID0gQHskcmVmX3Bjb250ZW50fTsKKyAgZm9yIChteSAkaT0wOyAkaTxzY2FsYXIoQHBjb250ZW50KTsgJGkrKykKKyAgICB7IGlmICgkcGNvbnRlbnRbJGldIGVxICRvcmlnKQorCXsgJCB7JHJlZl9wY29udGVudH1bJGldID0gJG5ldzsKKwkgICRuZXctPnBhcmVudCgkcGFyZW50KTsKKwkgICRvcmlnLT5wYXJlbnQodW5kZWYpOworCSAgcmV0dXJuIDE7IH0gfQorICBkaWUgIkRpZG4ndCBmaW5kICRvcmlnIGluICRwYXJlbnQiOworfQorCitzdWIgaHRtbF9yZXBsYWNlX2J5X21ldGEgKCAkOyQgKQoreyBteSAoJG9yaWcsICRwYXJlbnQpID0gY2hlY2tfYXJnc19yYW5nZSgxLCAyLCBAXyk7CisgIG15ICRtZXRhID0gbmV3IEhUTUw6OkVsZW1lbnQgIm1ldGEiOworICBpZiAoIWRlZmluZWQgJHBhcmVudCkKKyAgICB7ICRwYXJlbnQgPSAkb3JpZy0+cGFyZW50OyB9CisgIHJldHVybiBodG1sX3JlcGxhY2UoJG9yaWcsICRtZXRhLCAkcGFyZW50KTsKK30KKworc3ViIGh0bWxfcmVwbGFjZV9ieV9pZ25vcmUgKCAkOyQgKQoreyBteSAoJG9yaWcsICRwYXJlbnQpID0gY2hlY2tfYXJnc19yYW5nZSgxLCAyLCBAXyk7CisgIG15ICRpZ25vcmUgPSBuZXcgSFRNTDo6RWxlbWVudCAiaWdub3JlIjsKKyAgaWYgKCFkZWZpbmVkICRwYXJlbnQpCisgICAgeyAkcGFyZW50ID0gJG9yaWctPnBhcmVudDsgfQorICByZXR1cm4gaHRtbF9yZXBsYWNlKCRvcmlnLCAkaWdub3JlLCAkcGFyZW50KTsKK30KKworCisKKyMjIworIyMjIENvbGxlY3QgdGV4dCBlbGVtZW50cworIyMjCisKK215IEBjb2xsZWN0ZWRfdGV4dHM7CitteSAkY29sbGVjdF90ZXh0c19zdG9wcG9pbnQ7CitteSAkZG9uZV9jb2xsZWN0aW5nOworCitzdWIgY29sbGVjdF90ZXh0cyAoICQ7JCApCit7IG15ICgkcm9vdCwgJHN0b3ApID0gY2hlY2tfYXJnc19yYW5nZSgxLCAyLCBAXyk7CisgICMgcHJpbnQgU1RERVJSICJjb2xsZWN0X3RleHRzOiAkcm9vdCAkc3RvcFxuIjsKKyAgJGNvbGxlY3RfdGV4dHNfc3RvcHBvaW50ID0gJHN0b3A7CisgICRkb25lX2NvbGxlY3RpbmcgPSAwOworICBAY29sbGVjdGVkX3RleHRzID0gKCk7CisgICRyb290LT50cmF2ZXJzZShcJmNvbGxlY3RfaWZfdGV4dCk7ICMgcHJvY2VzcyB0ZXh0cworICAjIHByaW50IFNUREVSUiAiY29sbGVjdF90ZXh0cyA9PiAiLCBqb2luKCI7OzsiLCBAY29sbGVjdGVkX3RleHRzKSwgIlxuIjsKKyAgcmV0dXJuIEBjb2xsZWN0ZWRfdGV4dHM7Cit9CisKK3N1YiBjb2xsZWN0X2lmX3RleHQgKCAkJCQgKQoreyBteSAkaGUgPSAoY2hlY2tfYXJncygzLCBAXykpWzBdOyAjICBpZ25vcmUgZGVwdGggYW5kIHN0YXJ0ZmxhZyBhcmd1bWVudHMKKyAgaWYgKCRkb25lX2NvbGxlY3RpbmcpCisgICAgeyByZXR1cm4gMDsgfQorICBpZiAoIWRlZmluZWQgJGhlKQorICAgIHsgcmV0dXJuIDA7IH0KKyAgaWYgKCFyZWYgJGhlKQorICAgIHsgcHVzaCBAY29sbGVjdGVkX3RleHRzLCAkaGU7CisgICAgICByZXR1cm4gMDsgfQorICBpZiAoKGRlZmluZWQgJGNvbGxlY3RfdGV4dHNfc3RvcHBvaW50KSAmJiAoJGhlIGVxICRjb2xsZWN0X3RleHRzX3N0b3Bwb2ludCkpCisgICAgeyAkZG9uZV9jb2xsZWN0aW5nID0gMTsKKyAgICAgIHJldHVybiAwOyB9CisgIHJldHVybiAxOworfQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIENsZWFuIHVwIHBhcnNlIHRyZWUKKyMjIworCitzdWIgY2xlYW51cF9wYXJzZV90cmVlICggJCApCit7IG15ICgkaGUpID0gY2hlY2tfYXJncygxLCBAXyk7CisgICRoZS0+dHJhdmVyc2UoXCZkZWxldGVfaWZfbmF2aWdhdGlvbiwgJ2lnbm9yZSB0ZXh0Jyk7CisgICRoZS0+dHJhdmVyc2UoXCZkZWxldGVfZXh0cmFfc3BhY2VzLCAnaWdub3JlIHRleHQnKTsKKyAgJGhlLT50cmF2ZXJzZShcJm1lcmdlX2RsLCAnaWdub3JlIHRleHQnKTsKKyAgJGhlLT50cmF2ZXJzZShcJnJlb3JkZXJfZHRfYW5kX2RsLCAnaWdub3JlIHRleHQnKTsKKyAgcmV0dXJuICRoZTsKK30KKworCisjIyBTaW1wbGVyIHZlcnNpb24gdGhhdCBkZWxldGVzIGNvbnRlbnRzIGJ1dCBub3QgdGhlIGVsZW1lbnQgaXRzZWxmLgorIyBzdWIgZGVsZXRlX2lmX25hdmlnYXRpb24gKCAkJCQgKQorIyB7IG15ICRoZSA9IChjaGVja19hcmdzKDMsIEBfKSlbMF07ICMgaWdub3JlIHN0YXJ0ZmxhZyBhbmQgZGVwdGgKKyMgICBpZiAoKCRoZS0+dGFnKCkgZXEgImRpdiIpICYmICgkaGUtPmF0dHIoJ2NsYXNzJykgZXEgJ25hdmlnYXRpb24nKSkKKyMgICAgIHsgJGhlLT5kZWxldGUoKTsKKyMgICAgICAgcmV0dXJuIDA7IH0KKyMgICBlbHNlCisjICAgICB7IHJldHVybiAxOyB9CisjIH0KKworc3ViIGRlbGV0ZV9pZl9uYXZpZ2F0aW9uICggJCQkICkKK3sgbXkgKCRoZSwgJHN0YXJ0ZmxhZykgPSAoY2hlY2tfYXJncygzLCBAXykpWzAsMV07ICMgIGlnbm9yZSBkZXB0aCBhcmd1bWVudAorICBpZiAoISRzdGFydGZsYWcpCisgICAgeyByZXR1cm47IH0KKworICBpZiAoKCRoZS0+dGFnKCkgZXEgImRpdiIpICYmIChkZWZpbmVkICRoZS0+YXR0cignY2xhc3MnKSkgJiYgKCRoZS0+YXR0cignY2xhc3MnKSBlcSAnbmF2aWdhdGlvbicpKQorICAgIHsgbXkgJHJlZl9wY29udGVudCA9ICRoZS0+cGFyZW50KCktPmNvbnRlbnQoKTsKKyAgICAgICMgRG9uJ3QgdHJ5IHRvIG1vZGlmeSBAcGNvbnRlbnQsIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSBDT1BZLgorICAgICAgIyBteSBAcGNvbnRlbnQgPSBAeyRyZWZfcGNvbnRlbnR9OworICAgICAgZm9yIChteSAkaSA9IDA7ICRpPHNjYWxhcihAeyRyZWZfcGNvbnRlbnR9KTsgJGkrKykKKwl7IGlmICgkeyRyZWZfcGNvbnRlbnR9WyRpXSBlcSAkaGUpCisJICAgIHsgc3BsaWNlKEB7JHJlZl9wY29udGVudH0sICRpLCAxKTsKKwkgICAgICBsYXN0OyB9IH0KKyAgICAgICRoZS0+ZGVsZXRlKCk7CisgICAgICByZXR1cm4gMDsgfQorICBlbHNlCisgICAgeyByZXR1cm4gMTsgfQorfQorCitzdWIgZGVsZXRlX2V4dHJhX3NwYWNlcyAoICQkJCApCit7IG15ICgkaGUsICRzdGFydGZsYWcpID0gKGNoZWNrX2FyZ3MoMywgQF8pKVswLDFdOyAjICBpZ25vcmUgZGVwdGggYXJndW1lbnQKKyAgaWYgKCEkc3RhcnRmbGFnKQorICAgIHsgcmV0dXJuOyB9CisKKyAgbXkgJHRhZyA9ICRoZS0+dGFnOworICBpZiAoJHRhZyA9fiAvXihoZWFkfGh0bWx8dGFibGV8dHJ8dWwpJC8pCisgICAgeyBkZWxldGVfY2hpbGRfc3BhY2VzKCRoZSk7IH0KKyAgZGVsZXRlX3RyYWlsaW5nX3NwYWNlcygkaGUpOworICByZXR1cm4gMTsKK30KKworCitzdWIgZGVsZXRlX2NoaWxkX3NwYWNlcyAoICQgKQoreyBteSAoJGhlKSA9IGNoZWNrX2FyZ3MoMSwgQF8pOworICBteSAkcmVmX2NvbnRlbnQgPSAkaGUtPmNvbnRlbnQoKTsKKyAgZm9yIChteSAkaSA9IDA7ICRpPHNjYWxhcihAeyRyZWZfY29udGVudH0pOyAkaSsrKQorICAgIHsgaWYgKCQgeyRyZWZfY29udGVudH1bJGldID1+IC9eICokLykKKwl7IHNwbGljZShAeyRyZWZfY29udGVudH0sICRpLCAxKTsKKwkgICRpLS07IH0gfQorfQorCitzdWIgZGVsZXRlX3RyYWlsaW5nX3NwYWNlcyAoICQgKQoreyBteSAoJGhlKSA9IGNoZWNrX2FyZ3MoMSwgQF8pOworICBteSAkcmVmX2NvbnRlbnQgPSAkaGUtPmNvbnRlbnQoKTsKKyAgaWYgKCEgZGVmaW5lZCAkcmVmX2NvbnRlbnQpCisgICAgeyByZXR1cm47IH0KKyAgIyBDb3VsZCBhbHNvIGNoZWNrIGZvciBwcmV2aW91cyBlbGVtZW50ID0gL15oWzEtNl0kLy4KKyAgZm9yIChteSAkaSA9IDA7ICRpPHNjYWxhcihAeyRyZWZfY29udGVudH0pLTE7ICRpKyspCisgICAgeyBpZiAoJCB7JHJlZl9jb250ZW50fVskaV0gPX4gL14gKiQvKQorCXsgbXkgJG5leHRfZWx0ID0gJCB7JHJlZl9jb250ZW50fVskaSsxXTsKKwkgIGlmICgocmVmICRuZXh0X2VsdCkgJiYgKCRuZXh0X2VsdC0+dGFnID1+IC9eKGJyfGRkfGRsfGR0fGhyfHB8dWwpJC8pKQorCSAgICB7IHNwbGljZShAeyRyZWZfY29udGVudH0sICRpLCAxKTsKKwkgICAgICAkaS0tOyB9IH0gfQorICBpZiAoJGhlLT50YWcgPX4gL14oZGR8ZHR8XmhbMS02XXxsaXxwKSQvKQorICAgIHsgbXkgJGxhc3RfZWx0ID0gJCB7JHJlZl9jb250ZW50fVskI3skcmVmX2NvbnRlbnR9XTsKKyAgICAgIGlmICgoZGVmaW5lZCAkbGFzdF9lbHQpICYmICgkbGFzdF9lbHQgPX4gL14gKiQvKSkKKwl7IHBvcCBAeyRyZWZfY29udGVudH07IH0gfQorfQorCisKKyMgTGFUZVgySFRNTCBzb21ldGltZXMgY3JlYXRlcworIyAgIDxEVD50ZXh0CisjICAgPERMIENPTVBBQ1Q+PEREPnRleHQKKyMgd2hpY2ggc2hvdWxkIGFjdHVhbGx5IGJlOgorIyAgIDxETCBDT01QQUNUPgorIyAgIDxEVD50ZXh0CisjICAgPEREPnRleHQKKyMgU2luY2UgYSA8REw+IGdldHMgYWRkZWQsIHRoaXMgZW5kcyB1cCBsb29raW5nIGxpa2UKKyMgPFA+CisjICAgPERMPgorIyAgICAgPERUPgorIyAgICAgICB0ZXh0MS4uLgorIyAgICAgICA8REwgQ09NUEFDVD4KKyMgICAgICAgICA8REQ+CisjICAgICAgICAgICB0ZXh0Mi4uLgorIyAgICAgICAgIGR0X29yX2RkMS4uLgorIyAgICAgZHRfb3JfZGQyLi4uCisjIHdoaWNoIHNob3VsZCBiZWNvbWUKKyMgPFA+CisjICAgPERMIENPTVBBQ1Q+CisjICAgICA8RFQ+CisjICAgICAgIHRleHQxLi4uCisjICAgICA8REQ+CisjICAgICAgIHRleHQyLi4uCisjICAgICBkdF9vcl9kZDEuLi4KKyMgICAgIGR0X29yX2RkMi4uLgorCitzdWIgcmVvcmRlcl9kdF9hbmRfZGwgKCAkJCQgKQoreyBteSAoJGhlLCAkc3RhcnRmbGFnKSA9IChjaGVja19hcmdzKDMsIEBfKSlbMCwxXTsgIyAgaWdub3JlIGRlcHRoIGFyZ3VtZW50CisgIGlmICghJHN0YXJ0ZmxhZykKKyAgICB7IHJldHVybjsgfQorCisgIGlmICgkaGUtPnRhZygpIGVxICJwIikKKyAgICB7IG15ICRyZWZfcGNvbnRlbnQgPSAkaGUtPmNvbnRlbnQoKTsKKyAgICAgIGlmIChkZWZpbmVkICRyZWZfcGNvbnRlbnQpCisJeyBteSBAcGNvbnRlbnQgPSBAeyRyZWZfcGNvbnRlbnR9OworCSAgIyBwcmludCAicmVvcmRlcl9kdF9hbmRfZGwgZm91bmQgYSA8cD5cbiI7ICRoZS0+ZHVtcCgpOworCSAgaWYgKChzY2FsYXIoQHBjb250ZW50KSA+PSAxKQorCSAgICAgICYmIChyZWYgJHBjb250ZW50WzBdKSAmJiAoJHBjb250ZW50WzBdLT50YWcoKSBlcSAiZGwiKQorCSAgICAgICYmICRwY29udGVudFswXS0+aW1wbGljaXQoKSkKKwkgICAgeyBteSAkcmVmX2RsY29udGVudCA9ICRwY29udGVudFswXS0+Y29udGVudCgpOworCSAgICAgICMgcHJpbnQgInJlb3JkZXJfZHRfYW5kX2RsIGZvdW5kIGEgPHA+IGFuZCBpbXBsaWNpdCA8ZGw+XG4iOworCSAgICAgIGlmIChkZWZpbmVkICRyZWZfZGxjb250ZW50KQorCQl7IG15IEBkbGNvbnRlbnQgPSBAeyRyZWZfZGxjb250ZW50fTsKKwkJICBpZiAoKHNjYWxhcihAZGxjb250ZW50KSA+PSAxKQorCQkgICAgICAmJiAocmVmICRkbGNvbnRlbnRbMF0pICYmICgkZGxjb250ZW50WzBdLT50YWcoKSBlcSAiZHQiKSkKKwkJICAgIHsgbXkgJHJlZl9kdGNvbnRlbnQgPSAkZGxjb250ZW50WzBdLT5jb250ZW50KCk7CisJCSAgICAgICMgcHJpbnQgInJlb3JkZXJfZHRfYW5kX2RsIGZvdW5kIGEgPHA+LCBpbXBsaWNpdCA8ZGw+LCBhbmQgPGR0PlxuIjsKKwkJICAgICAgaWYgKGRlZmluZWQgJHJlZl9kdGNvbnRlbnQpCisJCQl7IG15IEBkdGNvbnRlbnQgPSBAeyRyZWZfZHRjb250ZW50fTsKKwkJCSAgaWYgKChzY2FsYXIoQGR0Y29udGVudCkgPiAwKQorCQkJICAgICAgJiYgKHJlZiAkZHRjb250ZW50WyQjZHRjb250ZW50XSkKKwkJCSAgICAgICYmICgkZHRjb250ZW50WyQjZHRjb250ZW50XS0+dGFnKCkgZXEgImRsIikpCisJCQkgICAgeyBteSAkcmVmX2RsMmNvbnRlbnQgPSAkZHRjb250ZW50WyQjZHRjb250ZW50XS0+Y29udGVudCgpOworCQkJICAgICAgIyBwcmludCAicmVvcmRlcl9kdF9hbmRfZGwgZm91bmQgYSA8cD4sIGltcGxpY2l0IDxkbD4sIDxkdD4sIGFuZCA8ZGw+XG4iOworCQkJICAgICAgaWYgKGRlZmluZWQgJHJlZl9kbDJjb250ZW50KQorCQkJCXsgbXkgQGRsMmNvbnRlbnQgPSBAeyRyZWZfZGwyY29udGVudH07CisJCQkJICBpZiAoKHNjYWxhcihAZGwyY29udGVudCkgPiAwKQorCQkJCSAgICAgICYmIChyZWYgKCRkbDJjb250ZW50WzBdKSkKKwkJCQkgICAgICAmJiAoJGRsMmNvbnRlbnRbMF0tPnRhZygpIGVxICJkZCIpKQorCQkJICAgIHsKKwkJCSAgICAgICMgcHJpbnQgInJlb3JkZXJfZHRfYW5kX2RsIGZvdW5kIGEgPHA+LCBpbXBsaWNpdCA8ZGw+LCA8ZHQ+LCA8ZGw+LCBhbmQgPGRkPlxuIjsKKwkJCSAgICAgICMgcHJpbnQgU1RERVJSICJDSEFOR0lOR1xuIjsgJGhlLT5kdW1wKCk7CisJCQkgICAgICBodG1sX3JlcGxhY2VfYnlfaWdub3JlKCRkdGNvbnRlbnRbJCNkdGNvbnRlbnRdKTsKKwkJCSAgICAgIHNwbGljZShAeyRyZWZfZGxjb250ZW50fSwgMSwgMCwgQGRsMmNvbnRlbnQpOworCQkJICAgICAgIyBwcmludCBTVERFUlIgIkNIQU5HRUQgVE86XG4iOyAkaGUtPmR1bXAoKTsKKwkJCSAgICAgIHJldHVybiAwOyAjIGRvbid0IHRyYXZlcnNlIGNoaWxkcmVuCisJCQkgICAgfSB9IH0gfSB9IH0gfSB9IH0KKyAgcmV0dXJuIDE7Cit9CisKKworIyBJZiB3ZSBmaW5kIGEgcGFyYWdyYXBoIHRoYXQgbG9va3MgbGlrZQorIyA8UD4KKyMgICA8SFI+CisjICAgPFVMPgorIyB0aGVuIGFjY3VtdWxhdGUgaXRzIGxpbmtzIGludG8gYSBjb250ZW50c19saXN0IGFuZCBkZWxldGUgdGhlIHBhcmFncmFwaC4KK3N1YiBwcm9jZXNzX2lmX2NoaWxkX2xpbmtzICggJCQkICkKK3sgbXkgKCRoZSwgJHN0YXJ0ZmxhZykgPSAoY2hlY2tfYXJncygzLCBAXykpWzAsMV07ICMgIGlnbm9yZSBkZXB0aCBhcmd1bWVudAorICBpZiAoISRzdGFydGZsYWcpCisgICAgeyByZXR1cm47IH0KKworICBpZiAoJGhlLT50YWcoKSBlcSAicCIpCisgICAgeyBteSAkcmVmX2NvbnRlbnQgPSAkaGUtPmNvbnRlbnQoKTsKKyAgICAgIGlmIChkZWZpbmVkICRyZWZfY29udGVudCkKKwl7IG15IEBjb250ZW50ID0gQHskcmVmX2NvbnRlbnR9OworCSAgaWYgKChzY2FsYXIoQGNvbnRlbnQpID09IDIpCisJICAgICAgJiYgKHJlZiAkY29udGVudFswXSkgJiYgJGNvbnRlbnRbMF0tPnRhZygpIGVxICJociIKKwkgICAgICAmJiAocmVmICRjb250ZW50WzFdKSAmJiAkY29udGVudFsxXS0+dGFnKCkgZXEgInVsIikKKwkgICAgeyBwcm9jZXNzX2NoaWxkX2xpbmtzKCRoZSk7CisJICAgICAgJGhlLT5kZWxldGUoKTsKKwkgICAgICByZXR1cm4gMDsgfSB9IH0KKyAgcmV0dXJuIDE7Cit9CisKKworIyBJZiB3ZSBmaW5kCisjICAgICA8SDQ+CisjICAgICAgICJGb290bm90ZXMiCisjICAgICA8REw+CisjICAgICAgIDxEVD4KKyMgICAgICAgICA8QSBOQU1FPSJmb290NTYwIj4KKyMgICAgICAgICAgICIuLi5ib3Jyb3ciCisjICAgICAgICAgPEEgSFJFRj0icmVmY291bnRzSW5QeXRob24uaHRtbCN0ZXgyaHRtbDIiIE5BTUU9ImZvb3Q1NjAiPgorIyAgICAgICAgICAgIjEuMiIKKyMgICAgICAgPEREPgorIyAgICAgICAgICJUaGUgbWV0YXBob3Igb2YgYGBib3Jyb3dpbmcnJyBhIHJlZmVyZW5jZSBpcyBub3QgY29tcGxldGVseSBjb3JyZWN0OiB0aGUgb3duZXIgc3RpbGwgaGFzIGEgY29weSBvZiB0aGUgcmVmZXJlbmNlLiAiCisjICAgICAgIC4uLgorIyB0aGVuIHJlY29yZCB0aGUgZm9vdG5vdGUgaW5mb3JtYXRpb24gYW5kIGRlbGV0ZSB0aGUgc2VjdGlvbiBhbmQgbGlzdC4KKworbXkgJHByb2Nlc3NfaWZfZm9vdG5vdGVzX2V4cGVjdF9kbF9uZXh0ID0gMDsKKworc3ViIHByb2Nlc3NfaWZfZm9vdG5vdGVzICggJCQkICkKK3sgbXkgKCRoZSwgJHN0YXJ0ZmxhZykgPSAoY2hlY2tfYXJncygzLCBAXykpWzAsMV07ICMgIGlnbm9yZSBkZXB0aCBhcmd1bWVudAorICBpZiAoISRzdGFydGZsYWcpCisgICAgeyByZXR1cm47IH0KKworICBpZiAoKCRoZS0+dGFnKCkgZXEgImg0IikKKyAgICAgICYmIGhhc19zaW5nbGVfY29udGVudF9zdHJpbmcoJGhlKQorICAgICAgJiYgKCQgeyRoZS0+Y29udGVudH1bMF0gZXEgIkZvb3Rub3RlcyIpKQorICAgIHsgaHRtbF9yZXBsYWNlX2J5X2lnbm9yZSgkaGUpOworICAgICAgJHByb2Nlc3NfaWZfZm9vdG5vdGVzX2V4cGVjdF9kbF9uZXh0ID0gMTsKKyAgICAgIHJldHVybiAwOyB9CisKKyAgaWYgKCRwcm9jZXNzX2lmX2Zvb3Rub3Rlc19leHBlY3RfZGxfbmV4dCAmJiAoJGhlLT50YWcoKSBlcSAiZGwiKSkKKyAgICB7IG15ICRyZWZfY29udGVudCA9ICRoZS0+Y29udGVudCgpOworICAgICAgaWYgKGRlZmluZWQgJHJlZl9jb250ZW50KQorCXsgJHByb2Nlc3NfaWZfZm9vdG5vdGVzX2V4cGVjdF9kbF9uZXh0ID0gMDsKKwkgIG15IEBjb250ZW50ID0gQHskcmVmX2NvbnRlbnR9OworCSAgZm9yIChteSAkaT0wOyAkaTwkI2NvbnRlbnQ7ICRpKz0yKQorCSAgICB7IG15ICRoZV9kdCA9ICRjb250ZW50WyRpXTsKKwkgICAgICBteSAkaGVfZGQgPSAkY29udGVudFskaSsxXTsKKwkgICAgICBpZiAoKCRoZV9kdC0+dGFnIG5lICJkdCIpIHx8ICgkaGVfZGQtPnRhZyBuZSAiZGQiKSkKKwkJeyAkaGUtPmR1bXA7CisJCSAgZGllICJleHBlY3RlZCA8RFQ+IGFuZCA8REQ+IGF0IHBvc2l0aW9ucyAkaSBhbmQgIiwgJGkrMTsgfQorCSAgICAgIG15IEBkdF9jb250ZW50ID0gQHskaGVfZHQtPmNvbnRlbnQoKX07CisJICAgICAgaWYgKChzY2FsYXIoQGR0X2NvbnRlbnQpICE9IDIpCisJCSAgfHwgKCRkdF9jb250ZW50WzBdLT50YWcgbmUgImEiKQorCQkgIHx8ICgkZHRfY29udGVudFsxXS0+dGFnIG5lICJhIikpCisJCXsgJGhlX2R0LT5kdW1wOworCQkgIGRpZSAiRXhwZWN0ZWQgMiBhbmNob3JzIGFzIGNvbnRlbnQgb2YgPERUPiI7IH0KKwkgICAgICBteSAoJGR0MV9uYW1lLCAkZHQxX2hyZWYsICRkdDFfY29udGVudCkgPSBhbmNob3JfaW5mbygkZHRfY29udGVudFswXSk7CisJICAgICAgbXkgKCRkdDJfbmFtZSwgJGR0Ml9ocmVmLCAkZHQyX2NvbnRlbnQpID0gYW5jaG9yX2luZm8oJGR0X2NvbnRlbnRbMF0pOworCSAgICAgICMgdW51c2VkOiAkZHQxX2hyZWYsICRkdDFfY29udGVudCwgJGR0Ml9ocmVmLCAkZHQyX2NvbnRlbnQKKwkgICAgICBpZiAoJGR0MV9uYW1lIG5lICRkdDJfbmFtZSkKKwkJeyAkaGVfZHQtPmR1bXA7CisJCSAgZGllICJFeHBlY3RlZCBpZGVudGljYWwgbmFtZXMgZm9yIGFuY2hvcnMiOyB9CisJICAgICAgaHRtbF9yZXBsYWNlX2J5X2lnbm9yZSgkaGVfZGQpOworCSAgICAgICRoZV9kZC0+dGFnKCJkaXYiKTsgIyBoYXMgbm8gZWZmZWN0CisJICAgICAgJGZvb3Rub3Rlc3skZHQxX25hbWV9ID0gJGhlX2RkOyB9CisJICBodG1sX3JlcGxhY2VfYnlfaWdub3JlKCRoZSk7CisJICByZXR1cm4gMDsgfSB9CisKKyAgaWYgKCRwcm9jZXNzX2lmX2Zvb3Rub3Rlc19leHBlY3RfZGxfbmV4dCkKKyAgICB7ICRoZS0+ZHVtcDsKKyAgICAgIGRpZSAiRXhwZWN0ZWQgPERMPiBmb3IgZm9vdG5vdGVzIG5leHQiOyB9CisKKyAgcmV0dXJuIDE7Cit9CisKKworCisjIyBNZXJnZSB0d28gYWRqYWNlbnQgcGFyYWdyYXBocyBjb250YWluaW5nIDxETD4gaXRlbXMsIHN1Y2ggYXM6CisjICAgICA8UD4KKyMgICAgICAgPERMPgorIyAgICAgICAgIDxEVD4KKyMgICAgICAgICAgIC4uLgorIyAgICAgICAgIDxERD4KKyMgICAgICAgICAgIC4uLgorIyAgICAgPFA+CisjICAgICAgIDxETD4KKyMgICAgICAgICA8RFQ+CisjICAgICAgICAgICAuLi4KKyMgICAgICAgICA8REQ+CisjICAgICAgICAgICAuLi4KKworc3ViIG1lcmdlX2RsICggJCQkICkKK3sgbXkgKCRoZSwgJHN0YXJ0ZmxhZykgPSAoY2hlY2tfYXJncygzLCBAXykpWzAsMV07ICMgIGlnbm9yZSBkZXB0aCBhcmd1bWVudAorICBpZiAoISRzdGFydGZsYWcpCisgICAgeyByZXR1cm47IH0KKworICBteSAkcmVmX2NvbnRlbnQgPSAkaGUtPmNvbnRlbnQ7CisgIGlmICghZGVmaW5lZCAkcmVmX2NvbnRlbnQpCisgICAgeyByZXR1cm47IH0KKyAgbXkgJGkgPSAwOworICB3aGlsZSAoJGkgPCBzY2FsYXIoQHskcmVmX2NvbnRlbnR9KS0xKQorICAgIHsgbXkgJHAxID0gJCB7JHJlZl9jb250ZW50fVskaV07CisgICAgICBpZiAoKHJlZiAkcDEpICYmICgkcDEtPnRhZyBlcSAicCIpCisJICAmJiBoYXNfc2luZ2xlX2NvbnRlbnRfd2l0aF90YWcoJHAxLCAiZGwiKSkKKwl7IG15ICRkbDEgPSAkIHskcDEtPmNvbnRlbnR9WzBdOworCSAgIyBJbiB0aGlzIGxvb3AsIHJocywgbm90IGxocywgb2YgPCBjb21wYXJpc29uIGNoYW5nZXMsCisJICAjIGJlY2F1c2Ugd2UgYXJlIHJlbW92aW5nIGVsZW1lbnRzIGZyb20gdGhlIGNvbnRlbnQgb2YgJGhlLgorCSAgd2hpbGUgKCRpIDwgc2NhbGFyKEB7JHJlZl9jb250ZW50fSktMSkKKwkgICAgeyBteSAkcDIgPSAkIHskcmVmX2NvbnRlbnR9WyRpKzFdOworCSAgICAgIGlmICghKChyZWYgJHAyKSAmJiAoJHAyLT50YWcgZXEgInAiKQorCQkgICAgJiYgaGFzX3NpbmdsZV9jb250ZW50X3dpdGhfdGFnKCRwMiwgImRsIikpKQorCQl7IGxhc3Q7IH0KKwkgICAgICAjIE1lcmdlIHRoZXNlIHR3byBlbGVtZW50cy4KKwkgICAgICBzcGxpY2UoQHskcmVmX2NvbnRlbnR9LCAkaSsxLCAxKTsgIyByZW1vdmUgJHAyCisJICAgICAgbXkgJGRsMiA9ICQgeyRwMi0+Y29udGVudH1bMF07CisJICAgICAgJGRsMS0+cHVzaF9jb250ZW50KEB7JGRsMi0+Y29udGVudH0pOyAjIHB1dCAkZGwyJ3MgY29udGVudCBpbiAkZGwxCisJICAgIH0KKwkgICMgZXh0cmEgaW5jcmVtZW50IGJlY2F1c2UgbmV4dCBlbGVtZW50IGlzbid0IGEgY2FuZGlkYXRlIGZvciAkcDEKKwkgICRpKys7IH0KKyAgICAgICRpKys7IH0KKyAgcmV0dXJuIDE7Cit9CisKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBUZXN0aW5nCisjIyMKKworc3ViIHRlc3QgKCAkJCApCit7IG15ICgkYWN0aW9uLCAkZmlsZSkgPSBjaGVja19hcmdzKDIsIEBfKTsKKworICAjIEdlbmVyYWwgdGVzdGluZworICBpZiAoKCRhY3Rpb24gZXEgInZpZXciKSB8fCAoJGFjdGlvbiBlcSAiIikpCisgICAgeyAjICMgJGZpbGUgPSAiL2hvbWVzL2d3cy9tZXJuc3Qvd3d3L2xpbmtzLmh0bWwiOworICAgICAgIyAjICRmaWxlID0gIi9ob21lcy9nd3MvbWVybnN0L3d3dy9pbmRleC5odG1sIjsKKyAgICAgICMgIyAkZmlsZSA9ICIvaG9tZXMvZmlzaC9tZXJuc3QvamF2YS9ndWQvZG9jL21hbnVhbC5odG1sIjsKKyAgICAgICMgIyAkZmlsZSA9ICIvcHJvamVjdHMvY2VjaWwvY2VjaWwvZG9jL21hbnVhbHMvc3RkbGliLW1hbi9zdGRsaWIvc3RkbGliLmh0bWwiOworICAgICAgIyAjICRmaWxlID0gIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2luZGV4Lmh0bWwiOworICAgICAgIyAkZmlsZSA9ICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvY29tcGxleE9iamVjdHMuaHRtbCI7CisgICAgICBteSAkdHJlZSA9IGZpbGVfdG9fdHJlZSgkZmlsZSk7CisKKyAgICAgICMjIFRlc3RpbmcKKyAgICAgICMgcHJpbnQgU1RERVJSICR0cmVlLT5hc19IVE1MOworICAgICAgJHRyZWUtPmR1bXAoKTsKKworICAgICAgIyBwcmludCBTVERFUlIgJHRyZWUtPnRhZygpLCAiXG4iOworICAgICAgIyBwcmludCBTVERFUlIgQHskdHJlZS0+Y29udGVudCgpfSwgIlxuIjsKKyAgICAgICMgCisgICAgICAjIGZvciAoQHsgJHRyZWUtPmV4dHJhY3RfbGlua3MocXcoYSBpbWcpKSB9KSB7CisgICAgICAjICAgbXkgKCRsaW5rLCAkbGlua2VsZW0pID0gQCRfOworICAgICAgIyAgIHByaW50IFNUREVSUiAiJGxpbmsgIiwgJGxpbmtlbGVtLT5hc19IVE1MOworICAgICAgIyAgIH0KKyAgICAgICMgCisgICAgICAjIHByaW50IFNUREVSUiBAeyR0cmVlLT5leHRyYWN0X2xpbmtzKCl9LCAiXG4iOworCisgICAgICAjIG15IEB0b3BfbGV2ZWxfZWx0cyA9IEB7JHRyZWUtPmNvbnRlbnQoKX07CisKKyAgICAgICMgaWYgc2NhbGFyKEB7JHRyZWUtPmNvbnRlbnQoKX0pCisgICAgICByZXR1cm47CisgICAgfQorCisgIGVsc2lmICgkYWN0aW9uIGVxICJyYXciKQorICAgIHsgbXkgJHRyZWUgPSBuZXcgSFRNTDo6VHJlZUJ1aWxkZXI7CisgICAgICAkdHJlZS0+aWdub3JlX3Vua25vd24oMSk7CisgICAgICAjICR0cmVlLT53YXJuKDEpOworICAgICAgJHRyZWUtPnBhcnNlX2ZpbGUoJGZpbGUpOworCisgICAgICAkdHJlZS0+ZHVtcCgpOworCisgICAgICAjIGNsZWFudXBfcGFyc2VfdHJlZSgkdHJlZSk7CisgICAgICAjICR0cmVlLT5kdW1wKCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICMgVGVzdCBkZWFsaW5nIHdpdGggYSBzZWN0aW9uLgorICBlbHNpZiAoJGFjdGlvbiBlcSAic2VjdGlvbiIpCisgICAgeyAjIG15ICRmaWxlOworICAgICAgIyAkZmlsZSA9ICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvaW50cm8uaHRtbCI7CisgICAgICAjICRmaWxlID0gIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9pbmNsdWRlcy5odG1sIjsKKyAgICAgICMgJGZpbGUgPSAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL2NvbXBsZXhPYmplY3RzLmh0bWwiOworICAgICAgcHJvY2Vzc19zZWN0aW9uX2ZpbGUoJGZpbGUsIDAsICJUaXRsZSIpOworICAgIH0KKworICAjIFRlc3QgZGVhbGluZyB3aXRoIG1hbnkgc2VjdGlvbnMKKyAgZWxzaWYgKDApCisgICAgeyBteSBAZmlsZXMgPSAoIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9hYm91dC5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9hYnN0cmFjdC5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9hcGkuaHRtbCIsCisJCSAgICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvY09iamVjdHMuaHRtbCIsCisJCSAgICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvY29tcGxleE9iamVjdHMuaHRtbCIsCisJCSAgICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvY29uY3JldGUuaHRtbCIsCisJCSAgICMgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9jb250ZW50cy5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9jb3VudGluZ1JlZnMuaHRtbCIsCisJCSAgICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvZGVidWdnaW5nLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL2RpY3RPYmplY3RzLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL2VtYmVkZGluZy5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9leGNlcHRpb25IYW5kbGluZy5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9leGNlcHRpb25zLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL2ZpbGVPYmplY3RzLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL2Zsb2F0T2JqZWN0cy5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9mcm9udC5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9mdW5kYW1lbnRhbC5odG1sIiwKKwkJICAgIyAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL2dlbmluZGV4Lmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL2ltcG9ydGluZy5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9pbmNsdWRlcy5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9pbmRleC5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9pbml0aWFsaXphdGlvbi5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9pbnRPYmplY3RzLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL2ludHJvLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL2xpc3RPYmplY3RzLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL2xvbmdPYmplY3RzLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL21hcE9iamVjdHMuaHRtbCIsCisJCSAgICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvbWFwcGluZy5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9uZXdUeXBlcy5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9ub2RlMjQuaHRtbCIsCisJCSAgICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvbm9uZU9iamVjdC5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9udW1iZXIuaHRtbCIsCisJCSAgICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvbnVtZXJpY09iamVjdHMuaHRtbCIsCisJCSAgICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvb2JqZWN0Lmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL29iamVjdHMuaHRtbCIsCisJCSAgICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvb3MuaHRtbCIsCisJCSAgICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvb3RoZXJPYmplY3RzLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL3Byb2Nlc3NDb250cm9sLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL3JlZmNvdW50RGV0YWlscy5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9yZWZjb3VudHMuaHRtbCIsCisJCSAgICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvc2VxdWVuY2UuaHRtbCIsCisJCSAgICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvc2VxdWVuY2VPYmplY3RzLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL3N0YW5kYXJkRXhjZXB0aW9ucy5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS9zdHJpbmdPYmplY3RzLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL3RocmVhZHMuaHRtbCIsCisJCSAgICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvdHVwbGVPYmplY3RzLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL3R5cGVPYmplY3RzLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL3R5cGVzLmh0bWwiLAorCQkgICAiL2hvbWVzL2Zpc2gvbWVybnN0L3RtcC9weXRob24tZG9jL2h0bWwvYXBpL3V0aWxpdGllcy5odG1sIiwKKwkJICAgIi9ob21lcy9maXNoL21lcm5zdC90bXAvcHl0aG9uLWRvYy9odG1sL2FwaS92ZXJ5aGlnaC5odG1sIik7CisgICAgICBmb3IgbXkgJGZpbGUgKEBmaWxlcykKKwl7IHByaW50IFNUREVSUiAiXG4iLCAiPSIgeCA3NSwgIlxuIiwgIiRmaWxlOlxuIjsKKwkgIHByb2Nlc3Nfc2VjdGlvbl9maWxlKCRmaWxlLCAwLCAiVGl0bGUiKTsKKwl9CisgICAgfQorCisgICMgVGVzdCBkZWFsaW5nIHdpdGggaW5kZXguCisgIGVsc2lmICgkYWN0aW9uIGVxICJpbmRleCIpCisgICAgeyAjIG15ICRmaWxlOworICAgICAgIyAkZmlsZSA9ICIvaG9tZXMvZmlzaC9tZXJuc3QvdG1wL3B5dGhvbi1kb2MvaHRtbC9hcGkvZ2VuaW5kZXguaHRtbCI7CisKKyAgICAgIHByb2Nlc3NfaW5kZXhfZmlsZSgkZmlsZSwgIlxAY2luZGV4Iik7CisgICAgICBwcmludF9pbmRleF9pbmZvKCk7CisgICAgfQorCisgIGVsc2UKKyAgICB7IGRpZSAiVW5yZWNvZ25pemVkIGFjdGlvbiBgJGFjdGlvbiciOyB9Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgTWFpbiBsb29wCisjIyMKKworc3ViIHByb2Nlc3NfY29udGVudHNfZmlsZSAoICQgKQoreyBteSAoJGZpbGUpID0gY2hlY2tfYXJncygxLCBAXyk7CisKKyAgIyBjb3VsZCBhbHNvIHVzZSBGaWxlOjpCYXNlbmFtZQorICBteSAkaW5mb19maWxlID0gJGZpbGU7CisgICRpbmZvX2ZpbGUgPX4gcy8oXC8/aW5kZXgpP1wuaHRtbCQvLzsKKyAgaWYgKCRpbmZvX2ZpbGUgZXEgIiIpCisgICAgeyBjaG9tcCgkaW5mb19maWxlID0gYHB3ZGApOyB9CisgICRpbmZvX2ZpbGUgPX4gcy9eLipcLy8vOwkjIG5vdCB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHJlbW92ZSBkaXJzCisKKyAgJGh0bWxfZGlyZWN0b3J5ID0gJGZpbGU7CisgICRodG1sX2RpcmVjdG9yeSA9fiBzLyhcL3xeKVteXC9dKyQvJDEvOworCisgIG15ICR0ZXhpX2ZpbGUgPSAiJGluZm9fZmlsZS50ZXhpIjsKKyAgb3BlbihURVhJLCAiPiR0ZXhpX2ZpbGUiKTsKKworICBwcmludCBURVhJICJcXGlucHV0IHRleGluZm8gICBcQGMgLSotdGV4aW5mby0qLVxuIjsKKyAgcHJpbnQgVEVYSSAiXEBjICUqKnN0YXJ0IG9mIGhlYWRlclxuIjsKKyAgcHJpbnQgVEVYSSAiXEBzZXRmaWxlbmFtZSAkaW5mb19maWxlXG4iOworCisgICMgMi4gU3VtbWFyeSBEZXNjcmlwdGlvbiBhbmQgQ29weXJpZ2h0CisgICMgICAgICBUaGUgIlN1bW1hcnkgRGVzY3JpcHRpb24gYW5kIENvcHlyaWdodCIgc2VnbWVudCBkZXNjcmliZXMgdGhlCisgICMgICAgICBkb2N1bWVudCBhbmQgY29udGFpbnMgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIGNvcHlpbmcgcGVybWlzc2lvbnMKKyAgIyAgICAgIGZvciB0aGUgSW5mbyBmaWxlLiAgVGhlIHNlZ21lbnQgbXVzdCBiZSBlbmNsb3NlZCBiZXR3ZWVuIGBAaWZpbmZvJworICAjICAgICAgYW5kIGBAZW5kIGlmaW5mbycgY29tbWFuZHMgc28gdGhhdCB0aGUgZm9ybWF0dGVycyBwbGFjZSBpdCBvbmx5IGluCisgICMgICAgICB0aGUgSW5mbyBmaWxlLgorICAjIAorICAjIFRoZSBzdW1tYXJ5IGRlc2NyaXB0aW9uIGFuZCBjb3B5cmlnaHQgc2VnbWVudCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlCisgICMgcHJpbnRlZCBkb2N1bWVudC4KKyAgIyAKKyAgIyAgICAgIEBpZmluZm8KKyAgIyAgICAgIFRoaXMgaXMgYSBzaG9ydCBleGFtcGxlIG9mIGEgY29tcGxldGUgVGV4aW5mbyBmaWxlLgorICAjICAgICAgCisgICMgICAgICBDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDE5OTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICMgICAgICBAZW5kIGlmaW5mbworCisKKyAgIyAzLiBUaXRsZSBhbmQgQ29weXJpZ2h0CisgICMgICAgICBUaGUgIlRpdGxlIGFuZCBDb3B5cmlnaHQiIHNlZ21lbnQgY29udGFpbnMgdGhlIHRpdGxlIGFuZCBjb3B5cmlnaHQKKyAgIyAgICAgIHBhZ2VzIGFuZCBjb3B5aW5nIHBlcm1pc3Npb25zIGZvciB0aGUgcHJpbnRlZCBtYW51YWwuICBUaGUgc2VnbWVudAorICAjICAgICAgbXVzdCBiZSBlbmNsb3NlZCBiZXR3ZWVuIGBAdGl0bGVwYWdlJyBhbmQgYEBlbmQgdGl0bGVwYWdlJworICAjICAgICAgY29tbWFuZHMuICBUaGUgdGl0bGUgYW5kIGNvcHlyaWdodCBwYWdlIGFwcGVhciBvbmx5IGluIHRoZSBwcmludGVkCisgICMgICAgICBtYW51YWwuCisgICMgCisgICMgVGhlIHRpdGxlcGFnZSBzZWdtZW50IGRvZXMgbm90IGFwcGVhciBpbiB0aGUgSW5mbyBmaWxlLgorICAjIAorICAjICAgICAgQHRpdGxlcGFnZQorICAjICAgICAgQHNwIDEwCisgICMgICAgICBAY29tbWVudCBUaGUgdGl0bGUgaXMgcHJpbnRlZCBpbiBhIGxhcmdlIGZvbnQuCisgICMgICAgICBAY2VudGVyIEB0aXRsZWZvbnR7U2FtcGxlIFRpdGxlfQorICAjICAgICAgCisgICMgICAgICBAYyBUaGUgZm9sbG93aW5nIHR3byBjb21tYW5kcyBzdGFydCB0aGUgY29weXJpZ2h0IHBhZ2UuCisgICMgICAgICBAcGFnZQorICAjICAgICAgQHZza2lwIDBwdCBwbHVzIDFmaWxsbAorICAjICAgICAgQ29weXJpZ2h0IEBjb3B5cmlnaHR7fSAxOTkwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAjICAgICAgQGVuZCB0aXRsZXBhZ2UKKworCisgICMgNC4gYFRvcCcgTm9kZSBhbmQgTWFzdGVyIE1lbnUKKyAgIyAgICAgIFRoZSAiTWFzdGVyIE1lbnUiIGNvbnRhaW5zIGEgY29tcGxldGUgbWVudSBvZiBhbGwgdGhlIG5vZGVzIGluIHRoZQorICAjICAgICAgd2hvbGUgSW5mbyBmaWxlLiAgSXQgYXBwZWFycyBvbmx5IGluIHRoZSBJbmZvIGZpbGUsIGluIHRoZSBgVG9wJworICAjICAgICAgbm9kZS4KKyAgIyAKKyAgIyBUaGUgYFRvcCcgbm9kZSBjb250YWlucyB0aGUgbWFzdGVyIG1lbnUgZm9yIHRoZSBJbmZvIGZpbGUuICBTaW5jZSBhCisgICMgcHJpbnRlZCBtYW51YWwgdXNlcyBhIHRhYmxlIG9mIGNvbnRlbnRzIHJhdGhlciB0aGFuIGEgbWVudSwgdGhlIG1hc3RlcgorICAjIG1lbnUgYXBwZWFycyBvbmx5IGluIHRoZSBJbmZvIGZpbGUuCisgICMgCisgICMgICAgICBAbm9kZSAgICBUb3AsICAgICAgIEZpcnN0IENoYXB0ZXIsICwgICAgICAgICAoZGlyKQorICAjICAgICAgQGNvbW1lbnQgbm9kZS1uYW1lLCBuZXh0LCAgICAgICAgICBwcmV2aW91cywgdXAKKyAgIyAKKyAgIyAgICAgIEBtZW51CisgICMgICAgICAqIEZpcnN0IENoYXB0ZXI6OiAgICBUaGUgZmlyc3QgY2hhcHRlciBpcyB0aGUKKyAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgY2hhcHRlciBpbiB0aGlzIHNhbXBsZS4KKyAgIyAgICAgICogQ29uY2VwdCBJbmRleDo6ICAgIFRoaXMgaW5kZXggaGFzIHR3byBlbnRyaWVzLgorICAjICAgICAgQGVuZCBtZW51CisKKworCisgICRjdXJyZW50X3JlZl90ZGYgPSBbICJUb3AiLCAwLCAkQVJHVlswXSBdOworICBwcm9jZXNzX3NlY3Rpb25fZmlsZSgkZmlsZSwgMCwgIlRvcCIpOworICB3aGlsZSAoc2NhbGFyKEBjb250ZW50c19saXN0KSkKKyAgeyAkY3VycmVudF9yZWZfdGRmID0gc2hpZnQgQGNvbnRlbnRzX2xpc3Q7CisgICAgcHJvY2Vzc19zZWN0aW9uX2ZpbGUoJCB7JGN1cnJlbnRfcmVmX3RkZn1bMl0sICQgeyRjdXJyZW50X3JlZl90ZGZ9WzFdLCAkIHskY3VycmVudF9yZWZfdGRmfVswXSk7CisgIH0KKworICBwcmludCBURVhJICJcbiI7CisgIGZvciBteSAkaW5kZXh0aXRsZSAoQGluZGV4X3RpdGxlcykKKyAgICB7IHByaW50IFRFWEkgIlxAbm9kZSAkaW5kZXh0aXRsZVxuIjsKKyAgICAgIHByaW50IFRFWEkgIlxAdW5udW1iZXJlZCAkaW5kZXh0aXRsZVxuIjsKKyAgICAgIHByaW50IFRFWEkgIlxAcHJpbnRpbmRleCAkIHskaW5kZXhfaW5mb3skaW5kZXh0aXRsZX19WzFdXG4iOworICAgICAgcHJpbnQgVEVYSSAiXG4iOyB9CisKKyAgcHJpbnQgVEVYSSAiXEBjb250ZW50c1xuIjsKKyAgcHJpbnQgVEVYSSAiXEBieWVcbiI7CisgIGNsb3NlKFRFWEkpOworfQorCisjIFRoaXMgbmVlZHMgdG8gYmUgbGFzdCBzbyBnbG9iYWwgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zIGFyZSByZWFjaGVkLgorCitpZiAoc2NhbGFyKEBBUkdWKSA9PSAwKQoreyBkaWUgIk5vIGFyZ3VtZW50cyBzdXBwbGllZCB0byBodG1sMnRleGkucGwiOyB9CisKK2lmICgkQVJHVlswXSBlcSAiLXRlc3QiKQoreyBteSBAdGVzdF9hcmdzID0gQEFSR1ZbMS4uJCNBUkdWXTsKKyAgaWYgKHNjYWxhcihAdGVzdF9hcmdzKSA9PSAwKQorICAgIHsgdGVzdCgiIiwgImluZGV4Lmh0bWwiKTsgfQorICBlbHNpZiAoc2NhbGFyKEB0ZXN0X2FyZ3MpID09IDEpCisgICAgeyB0ZXN0KCIiLCAkdGVzdF9hcmdzWzBdKTsgfQorICBlbHNpZiAoc2NhbGFyKEB0ZXN0X2FyZ3MpID09IDIpCisgICAgeyB0ZXN0KCR0ZXN0X2FyZ3NbMF0sICR0ZXN0X2FyZ3NbMV0pOyB9CisgIGVsc2UKKyAgICB7IGRpZSAiVG9vIG1hbnkgdGVzdCBhcmd1bWVudHMgcGFzc2VkIHRvIGh0bWwydGV4aTogIiwgam9pbigiICIsIEBBUkdWKTsgfQorICBleGl0KCk7Cit9CisKK2lmIChzY2FsYXIoQEFSR1YpICE9IDEpCit7IGRpZSAiUGFzcyBvbmUgYXJndW1lbnQsIHRoZSBtYWluL2NvbnRlbnRzIHBhZ2UiOyB9CisKK3Byb2Nlc3NfY29udGVudHNfZmlsZSgkQVJHVlswXSk7CisKKyMgZW5kIG9mIGh0bWwydGV4aS5wbApkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL2luZGZpeC5weSBiL2RvYy90b29scy9pbmRmaXgucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzhmOTViYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9pbmRmaXgucHkKQEAgLTAsMCArMSwxMDEgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworIiIiQ29tYmluZSBzaW1pbGFyIGluZGV4IGVudHJpZXMgaW50byBhbiBlbnRyeSBhbmQgc3ViZW50cmllcy4KKworRm9yIGV4YW1wbGU6CisKKyAgICBcaXRlbSB7Zm9vYmFyfSAoaW4gbW9kdWxlIGZsb3R6KSwgMjMKKyAgICBcaXRlbSB7Zm9vYmFyfSAoaW4gbW9kdWxlIHdoYWNraXQpLCA0MzIzCisKK2JlY29tZXMKKworICAgIFxpdGVtIHtmb29iYXJ9CisgICAgICBcc3ViaXRlbSBpbiBtb2R1bGUgZmxvdHosIDIzCisgICAgICBcc3ViaXRlbSBpbiBtb2R1bGUgd2hhY2tpdCwgNDMyMworCitOb3RlIHRoYXQgYW4gaXRlbSB3aGljaCBtYXRjaGVzIHRoZSBmb3JtYXQgb2YgYSBjb2xsYXBzYWJsZSBpdGVtIGJ1dCB3aGljaAoraXNuJ3QgcGFydCBvZiBhIGdyb3VwIG9mIHNpbWlsYXIgaXRlbXMgaXMgbm90IG1vZGlmaWVkLgorIiIiCitfX3ZlcnNpb25fXyA9ICckUmV2aXNpb246IDEuMS4xLjEgJCcKKworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBzeXMKKworCitkZWYgY21wX2VudHJpZXMoZTEsIGUyLCBsb3dlcj1zdHJpbmcubG93ZXIpOgorICAgIHJldHVybiBjbXAobG93ZXIoZTFbMV0pLCBsb3dlcihlMlsxXSkpIG9yIGNtcChlMSwgZTIpCisKKworZGVmIGR1bXBfZW50cmllcyh3cml0ZSwgZW50cmllcyk6CisgICAgaWYgbGVuKGVudHJpZXMpID09IDE6CisgICAgICAgIHdyaXRlKCIgIFxcaXRlbSAlcyAoJXMpJXNcbiIgJSBlbnRyaWVzWzBdKQorICAgICAgICByZXR1cm4KKyAgICB3cml0ZSgiICBcaXRlbSAlc1xuIiAlIGVudHJpZXNbMF1bMF0pCisgICAgIyBub3cgc29ydCB0aGVzZSBpbiBhIGNhc2UgaW5zZW5zaXRpdmUgbWFubmVyOgorICAgIGlmIGxlbihlbnRyaWVzKSA+IDA6CisgICAgICAgIGVudHJpZXMuc29ydChjbXBfZW50cmllcykKKyAgICBmb3IgeHh4LCBzdWJpdGVtLCBwYWdlcyBpbiBlbnRyaWVzOgorICAgICAgICB3cml0ZSgiICAgIFxzdWJpdGVtICVzJXNcbiIgJSAoc3ViaXRlbSwgcGFnZXMpKQorCisKK2JyZWFrYWJsZV9yZSA9IHJlLmNvbXBpbGUoCisgICAgciIgIFxcaXRlbSAoLiopIFsoXSguKilbKV0oKD86KD86LCBcZCspfCg/OiwgXFxbYS16XSpce1xkK1x9KSkrKSIpCisKKworZGVmIHByb2Nlc3MoaWZuLCBvZm49Tm9uZSk6CisgICAgaWYgaWZuID09ICItIjoKKyAgICAgICAgaWZwID0gc3lzLnN0ZGluCisgICAgZWxzZToKKyAgICAgICAgaWZwID0gb3BlbihpZm4pCisgICAgaWYgb2ZuIGlzIE5vbmU6CisgICAgICAgIG9mbiA9IGlmbgorICAgIG9mcCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICBlbnRyaWVzID0gW10KKyAgICBtYXRjaCA9IGJyZWFrYWJsZV9yZS5tYXRjaAorICAgIHdyaXRlID0gb2ZwLndyaXRlCisgICAgd2hpbGUgMToKKyAgICAgICAgbGluZSA9IGlmcC5yZWFkbGluZSgpCisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgbSA9IG1hdGNoKGxpbmUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBlbnRyeSA9IG0uZ3JvdXAoMSwgMiwgMykKKyAgICAgICAgICAgIGlmIGVudHJpZXMgYW5kIGVudHJpZXNbLTFdWzBdICE9IGVudHJ5WzBdOgorICAgICAgICAgICAgICAgIGR1bXBfZW50cmllcyh3cml0ZSwgZW50cmllcykKKyAgICAgICAgICAgICAgICBlbnRyaWVzID0gW10KKyAgICAgICAgICAgIGVudHJpZXMuYXBwZW5kKGVudHJ5KQorICAgICAgICBlbGlmIGVudHJpZXM6CisgICAgICAgICAgICBkdW1wX2VudHJpZXMod3JpdGUsIGVudHJpZXMpCisgICAgICAgICAgICBlbnRyaWVzID0gW10KKyAgICAgICAgICAgIHdyaXRlKGxpbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3cml0ZShsaW5lKQorICAgIGRlbCB3cml0ZQorICAgIGRlbCBtYXRjaAorICAgIGlmcC5jbG9zZSgpCisgICAgZGF0YSA9IG9mcC5nZXR2YWx1ZSgpCisgICAgb2ZwLmNsb3NlKCkKKyAgICBpZiBvZm4gPT0gIi0iOgorICAgICAgICBvZnAgPSBzeXMuc3Rkb3V0CisgICAgZWxzZToKKyAgICAgICAgb2ZwID0gb3BlbihvZm4sICJ3IikKKyAgICBvZnAud3JpdGUoZGF0YSkKKyAgICBvZnAuY2xvc2UoKQorCisKK2RlZiBtYWluKCk6CisgICAgaW1wb3J0IGdldG9wdAorICAgIG91dGZpbGUgPSBOb25lCisgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAibzoiKQorICAgIGZvciBvcHQsIHZhbCBpbiBvcHRzOgorICAgICAgICBpZiBvcHQgaW4gKCItbyIsICItLW91dHB1dCIpOgorICAgICAgICAgICAgb3V0ZmlsZSA9IHZhbAorICAgIGZpbGVuYW1lID0gYXJnc1swXQorICAgIG91dGZpbGUgPSBvdXRmaWxlIG9yIGZpbGVuYW1lCisgICAgcHJvY2VzcyhmaWxlbmFtZSwgb3V0ZmlsZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL2luZm8vTWFrZWZpbGUgYi9kb2MvdG9vbHMvaW5mby9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGQ2MDU3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL2luZm8vTWFrZWZpbGUKQEAgLTAsMCArMSw3MyBAQAorIyBHZW5lcmF0ZSB0aGUgUHl0aG9uICJpbmZvIiBkb2N1bWVudGF0aW9uLgorCitUT1BESVI9Li4KK1RPT0xTRElSPSQoVE9QRElSKS90b29scworSFRNTERJUj0kKFRPUERJUikvaHRtbAorCitNS0lORk89JChUT09MU0RJUikvbWtpbmZvCitTQ1JJUFRTPSQoVE9PTFNESVIpL2h0bWwydGV4aS5wbCAkKFRPT0xTRElSKS9jaGVja2FyZ3MucG0gJChUT09MU0RJUikvbWtpbmZvIFwKKwkkKFRPT0xTRElSKS9maXhpbmZvLmVsCisKK2FsbDoJcHl0aG9uLWFwaS5pbmZvIHB5dGhvbi1leHQuaW5mbyBweXRob24tbGliLmluZm8gXAorCXB5dGhvbi1yZWYuaW5mbyBweXRob24tdHV0LmluZm8gXAorCXB5dGhvbi1kaXN0LmluZm8gcHl0aG9uLWluc3QuaW5mbworCisKK3B5dGhvbi1hcGkuaW5mbzoJJChIVE1MRElSKS9hcGkvYXBpLmh0bWwgJChTQ1JJUFRTKQorCSQoTUtJTkZPKSAkPAorCitweXRob24tZXh0LmluZm86CSQoSFRNTERJUikvZXh0L2V4dC5odG1sICQoU0NSSVBUUykKKwkkKE1LSU5GTykgJDwKKworcHl0aG9uLWxpYi5pbmZvOgkkKEhUTUxESVIpL2xpYi9saWIuaHRtbCAkKFNDUklQVFMpCisJJChNS0lORk8pICQ8CisKKyMgTm90IGJ1aWx0IGJ5IGRlZmF1bHQ7IHRoZSBjb252ZXJzaW9uIGRvZXNuJ3QgcmVhbGx5IGhhbmRsZSBpdCB3ZWxsLgorcHl0aG9uLW1hYy5pbmZvOgkkKEhUTUxESVIpL21hYy9tYWMuaHRtbCAkKFNDUklQVFMpCisJJChNS0lORk8pICQ8CisKK3B5dGhvbi1yZWYuaW5mbzoJJChIVE1MRElSKS9yZWYvcmVmLmh0bWwgJChTQ1JJUFRTKQorCSQoTUtJTkZPKSAkPAorCitweXRob24tdHV0LmluZm86CSQoSFRNTERJUikvdHV0L3R1dC5odG1sICQoU0NSSVBUUykKKwkkKE1LSU5GTykgJDwKKworcHl0aG9uLWRpc3QuaW5mbzoJJChIVE1MRElSKS9kaXN0L2Rpc3QuaHRtbCAkKFNDUklQVFMpCisJJChNS0lORk8pICQ8CisKK3B5dGhvbi1pbnN0LmluZm86CSQoSFRNTERJUikvaW5zdC9pbnN0Lmh0bWwgJChTQ1JJUFRTKQorCSQoTUtJTkZPKSAkPAorCitjbGVhbjoKKwlybSAtZiAqLnRleGl+ICoudGV4aQorCitjbG9iYmVyOiBjbGVhbgorCXJtIC1mICoudGV4aSBweXRob24tKi5pbmZvIHB5dGhvbi0qLmluZm8tWzAtOV0qCisKKworIyBUaGlzIG1ha2VzIHN1cmUgd2UgY2FuIGJ1aWxkIGluZm8gZmlsZXMgZnJvbSBhICJjbGVhbiIgdHJlZSwKKyMgaW4gY2FzZSB3ZSBoYXZlbid0IGFscmVhZHkgYnVpbHQgdGhlIEhUTUw6CisKKyQoSFRNTERJUikvYXBpL2FwaS5odG1sOgorCShjZCAkKEhUTUxESVIpOyAkKE1BS0UpIGFwaSkKKworJChIVE1MRElSKS9leHQvZXh0Lmh0bWw6CisJKGNkICQoSFRNTERJUik7ICQoTUFLRSkgZXh0KQorCiskKEhUTUxESVIpL2xpYi9saWIuaHRtbDoKKwkoY2QgJChIVE1MRElSKTsgJChNQUtFKSBsaWIpCisKKyQoSFRNTERJUikvbWFjL21hYy5odG1sOgorCShjZCAkKEhUTUxESVIpOyAkKE1BS0UpIG1hYykKKworJChIVE1MRElSKS9yZWYvcmVmLmh0bWw6CisJKGNkICQoSFRNTERJUik7ICQoTUFLRSkgcmVmKQorCiskKEhUTUxESVIpL3R1dC90dXQuaHRtbDoKKwkoY2QgJChIVE1MRElSKTsgJChNQUtFKSB0dXQpCisKKyQoSFRNTERJUikvZGlzdC9kaXN0Lmh0bWw6CisJKGNkICQoSFRNTERJUik7ICQoTUFLRSkgZGlzdCkKKworJChIVE1MRElSKS9pbnN0L2luc3QuaHRtbDoKKwkoY2QgJChIVE1MRElSKTsgJChNQUtFKSBpbnN0KQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL2luZm8vUkVBRE1FIGIvZG9jL3Rvb2xzL2luZm8vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNDlhOTkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvaW5mby9SRUFETUUKQEAgLTAsMCArMSwyMSBAQAorVGhpcyBhcmNoaXZlIGNvbnRhaW5zIHRoZSBzdGFuZGFyZCBQeXRob24gZG9jdW1lbnRhdGlvbiBpbiBHTlUgaW5mbworZm9ybWF0LiAgRml2ZSBtYW51YWxzIGFyZSBpbmNsdWRlZDoKKworICAgIHB5dGhvbi1yZWYuaW5mbyoJUHl0aG9uIFJlZmVyZW5jZSBNYW51YWwKKyAgICBweXRob24tbWFjLmluZm8qCVB5dGhvbiBNYWNpbnRvc2ggTW9kdWxlcworICAgIHB5dGhvbi1saWIuaW5mbyoJUHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlCisgICAgcHl0aG9uLWV4dC5pbmZvKglFeHRlbmRpbmcgYW5kIEVtYmVkZGluZyB0aGUgUHl0aG9uIEludGVycHJldGVyCisgICAgcHl0aG9uLWFwaS5pbmZvKglQeXRob24vQyBBUEkgUmVmZXJlbmNlCisgICAgcHl0aG9uLXR1dC5pbmZvKglQeXRob24gVHV0b3JpYWwKKworVGhlIGZpbGUgcHl0aG9uLmRpciBpcyBhIGZyYWdtZW50IG9mIGEgImRpciIgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIHRvCitpbmNvcnBvcmF0ZSB0aGVzZSBkb2N1bWVudHMgaW50byBhbiBleGlzdGluZyBHTlUgaW5mbyBpbnN0YWxsYXRpb246CitpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBpbnRvIHRoZSAiZGlyIiBvciAibG9jYWxkaXIiIGZpbGUgYXQKK2FuIGFwcHJvcHJpYXRlIHBvaW50IGFuZCBjb3B5IHRoZSBweXRob24tKi5pbmZvKiBmaWxlcyB0byB0aGUgc2FtZQorZGlyZWN0b3J5LgorCitUaGFua3MgZ28gdG8gTWlsYW4gWmFtYXphbCA8cGRtQGZyZWVzb2Z0LmN6PiBmb3IgcHJvdmlkaW5nIHRoaXMKK2NvbnZlcnNpb24gdG8gdGhlIGluZm8gZm9ybWF0LgorCitRdWVzdGlvbnMgYW5kIGNvbW1lbnRzIG9uIHRoZXNlIGRvY3VtZW50cyBzaG91bGQgYmUgZGlyZWN0ZWQgdG8KK3B5dGhvbi1kb2NzQHB5dGhvbi5vcmcuCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvaW5mby9weXRob24uZGlyIGIvZG9jL3Rvb2xzL2luZm8vcHl0aG9uLmRpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGUzZTNhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL2luZm8vcHl0aG9uLmRpcgpAQCAtMCwwICsxLDkgQEAKKworUHl0aG9uIFN0YW5kYXJkIERvY3VtZW50YXRpb24KKworKiBQeXRob24gTGlicmFyeTogKHB5dGhvbi1saWIpLgkJUHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlCisqIFB5dGhvbiBNYWMgTW9kdWxlczogKHB5dGhvbi1tYWMpLglQeXRob24gTWFjaW50b3NoIE1vZHVsZXMKKyogUHl0aG9uIFJlZmVyZW5jZTogKHB5dGhvbi1yZWYpLglQeXRob24gUmVmZXJlbmNlIE1hbnVhbAorKiBQeXRob24gQVBJOiAocHl0aG9uLWFwaSkuCQlQeXRob24vQyBBUEkgUmVmZXJlbmNlIE1hbnVhbAorKiBQeXRob24gRXh0ZW5kaW5nOiAocHl0aG9uLWV4dCkuCUV4dGVuZGluZyAmIEVtYmVkZGluZyBQeXRob24KKyogUHl0aG9uIFR1dG9yaWFsOiAocHl0aG9uLXR1dCkuCVB5dGhvbiBUdXRvcmlhbApkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL2tleXdvcmRzLnB5IGIvZG9jL3Rvb2xzL2tleXdvcmRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTM1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMva2V5d29yZHMucHkKQEAgLTAsMCArMSwyMCBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFRoaXMgUHl0aG9uIHByb2dyYW0gc29ydHMgYW5kIHJlZm9ybWF0cyB0aGUgdGFibGUgb2Yga2V5d29yZHMgaW4gcmVmMi50ZXgKKworaW1wb3J0IHN0cmluZworbCA9IFtdCit0cnk6CisJd2hpbGUgMToKKwkJbCA9IGwgKyBzdHJpbmcuc3BsaXQocmF3X2lucHV0KCkpCitleGNlcHQgRU9GRXJyb3I6CisJcGFzcworbC5zb3J0KCkKK2ZvciB4IGluIGxbOl06CisJd2hpbGUgbC5jb3VudCh4KSA+IDE6IGwucmVtb3ZlKHgpCituY29scyA9IDUKK25yb3dzID0gKGxlbihsKStuY29scy0xKS9uY29scworZm9yIGkgaW4gcmFuZ2UobnJvd3MpOgorCWZvciBqIGluIHJhbmdlKGksIGxlbihsKSwgbnJvd3MpOgorCQlwcmludCBzdHJpbmcubGp1c3QobFtqXSwgMTApLAorCXByaW50CmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvbGlzdG1vZHVsZXMgYi9kb2MvdG9vbHMvbGlzdG1vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2FjOTBhOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9saXN0bW9kdWxlcwpAQCAtMCwwICsxLDE4MyBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyAgLSotIFB5dGhvbiAtKi0KKyMKKyMgIFRoaXMgc2NyaXB0IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IHVuZG9jdW1lbnRlZCBtb2R1bGVzIGluIHRoZSBQeXRob24KKyMgIHN0YW5kYXJkIGxpYnJhcnkuICBVc2UgaXQgbGlrZSB0aGlzOgorIworIyAgLi4uL0RvYy90b29scy9saXN0bW9kdWxlcyAtLWlnbm9yZS1mcm9tIC4uLi9Eb2MvcGFwZXItPHBhcGVyPi9tb2RsaWIuaWR4CisKKyIiIiUocHJvZ3JhbSlzIC0gbGlzdCBtb2R1bGVzIGluIHRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeQorCistYSwgLS1hbm5vdGF0ZQkgIEFubm90YXRlIHRoZSBtb2R1bGUgbmFtZXMgd2l0aCB0aGUgc3ViZGlyZWN0b3J5IHRoZXkKKyAgICAgICAgICAgICAgICAgIGxpdmUgaW4KKy1jLCAtLWNhdGVnb3JpemUgIEdyb3VwIHRoZSBtb2R1bGVzIGJ5IHN1YmRpcmVjdG9yeQorLWkgPGZpbGU+LAorCistLWlnbm9yZS1mcm9tIDxmaWxlPglJZ25vcmUgdGhlIG1vZHVsZXMgbGlzdGVkIGluIDxmaWxlPi4gIDxmaWxlPiBtYXkKKyAgICAgICAgICAgICAgICAgIGNvbnRhaW4gYSBsaXN0IG9mIG1vZHVsZSBuYW1lcyBvciBhIG1vZHVsZSBpbmRleCBmaWxlCisgICAgICAgICAgICAgICAgICBhcyBwcm9kdWNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uCisgICAgICAgICAgICAgICAgICAoLmlkeCBvciAuaHRtbCBmbGF2b3IpLgorCitJZiBuZWl0aGVyIC1hIG5vciAtYyBhcmUgZ2l2ZW4sIHRoZSBtb2R1bGVzIGFyZSBsaXN0ZWQgaW4gYWxwaGFiZXRpY2FsCitvcmRlci4KKworTm90ZSB0aGF0IC1hIGFuZCAtYyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorCitMaW1pdGF0aW9uOiBNb2R1bGVzIGxvYWRhYmxlIGFzIHNoYXJlZCBvYmplY3RzIG1heSBub3QgYmUgbGlzdGVkLAordGhvdWdoIHRoaXMgc2NyaXB0IGF0dGVtcHRzIHRvIGxvY2F0ZSBzdWNoIG1vZHVsZXMuCisKKyIiIgorCitfX3ZlcnNpb25fXyA9ICckUmV2aXNpb246IDEuMS4xLjEgJCcKKworaW1wb3J0IGdldG9wdAoraW1wb3J0IGdsb2IKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgc3lzCisKKworUkVNT1ZFX0RJUlMgPSBbImRvcy04eDMiLCAiZW5jb2RpbmdzIiwgImRpc3R1dGlscyIsCisgICAgICAgICAgICAgICAibGliLW9sZCIsICJsaWItc3Rkd2luIiwgInRlc3QiXQorCisKK2RlZiBtYWluKCk6CisgICAgYXJncyA9IHN5cy5hcmd2WzE6XQorICAgIGFubm90YXRlID0gMAorICAgIGJ1aWx0aW4gPSAwCisgICAgY2F0ZWdvcml6ZSA9IDAKKyAgICBpZ25vcmVfZGljdCA9IHt9CisgICAgaWdub3JlID0gaWdub3JlX2RpY3QuaGFzX2tleQorICAgIHRyeToKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoCisgICAgICAgICAgICBhcmdzLCAiYWJjaGk6IiwKKyAgICAgICAgICAgIFsiYW5ub3RhdGUiLCAiYnVpbHQtaW4iLCAiY2F0ZWdvcml6ZSIsICJoZWxwIiwgImlnbm9yZS1mcm9tPSJdKQorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICAgICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIKKyAgICAgICAgcHJpbnQgbXNnCisgICAgICAgIHByaW50CisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoMikKKyAgICBmb3Igb3B0LCBhcmcgaW4gb3B0czoKKyAgICAgICAgaWYgb3B0IGluICgiLWEiLCAiLS1hbm5vdGF0ZSIpOgorICAgICAgICAgICAgYW5ub3RhdGUgPSAxCisgICAgICAgIGVsaWYgb3B0IGluICgiLWIiLCAiLS1idWlsdC1pbiIpOgorICAgICAgICAgICAgYnVpbHRpbiA9IDEKKyAgICAgICAgZWxpZiBvcHQgaW4gKCItYyIsICItLWNhdGVnb3JpemUiKToKKyAgICAgICAgICAgIGNhdGVnb3JpemUgPSAxCisgICAgICAgIGVsaWYgb3B0IGluICgiLWgiLCAiLS1oZWxwIik6CisgICAgICAgICAgICB1c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgpCisgICAgICAgIGVsaWYgb3B0IGluICgiLWkiLCAiLS1pZ25vcmUtZnJvbSIpOgorICAgICAgICAgICAgZGF0YSA9IG9wZW4oYXJnKS5yZWFkKCkKKyAgICAgICAgICAgIGlmIGRhdGFbOjFdID09ICJcXCI6CisgICAgICAgICAgICAgICAgaWdub3JlX2Zyb21faWR4KGRhdGEsIGlnbm9yZV9kaWN0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZ25vcmVfZnJvbV9tb2R1bGVsaXN0KGRhdGEsIGlnbm9yZV9kaWN0KQorICAgIGlmIGFyZ3Mgb3IgKGFubm90YXRlIGFuZCBjYXRlZ29yaXplKToKKyAgICAgICAgdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCgyKQorICAgICMKKyAgICAjIFBvcHVsYXRlIHRoZSBkYXRhYmFzZToKKyAgICAjCisgICAgc3JjZGlyID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oCisgICAgICAgIG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSksIG9zLnBhcmRpciwgb3MucGFyZGlyKSkKKyAgICBvcy5jaGRpcihzcmNkaXIpCisgICAgbW9kdWxlc19ieV9uYW1lID0ge30KKyAgICBtb2R1bGVzX2J5X2RpciA9IHt9CisgICAgaWYgYnVpbHRpbjoKKyAgICAgICAgbCA9IFtdCisgICAgICAgIG1vZHVsZXNfYnlfZGlyWyI8YnVpbHRpbj4iXSA9IGwKKyAgICAgICAgZm9yIG5hbWUgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgorICAgICAgICAgICAgaWYgbm90IGlnbm9yZShuYW1lKToKKyAgICAgICAgICAgICAgICBtb2R1bGVzX2J5X25hbWVbbmFtZV0gPSAiPGJ1aWx0LWluPiIKKyAgICAgICAgICAgICAgICBsLmFwcGVuZChuYW1lKQorICAgIHJ4ID0gcmUuY29tcGlsZSgiTGliL3BsYXQtW2EtekEtWjAtOV0qLyIpCisgICAgZnAgPSBvcy5wb3BlbigiZmluZCBMaWIgLW5hbWUgXCoucHkgLXByaW50IiwgInIiKQorICAgIHdoaWxlIDE6CisgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgbSA9IHJ4Lm1hdGNoKGxpbmUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBsaW5lID0gIkxpYi9wbGF0LSovIiArIGxpbmVbbS5lbmQoKTpdCisgICAgICAgIGxpbmUgPSBsaW5lWzQ6LTRdICAgICAgICAgICAgICAgICMgc3RyaXAgb2ZmICdMaWIvJyBhbmQgJy5weVxuJworICAgICAgICBkaXIsIG5hbWUgPSBvcy5wYXRoLnNwbGl0KGxpbmUpCisgICAgICAgIGRpciA9IGRpciBvciAiPHN0YW5kYXJkPiIKKyAgICAgICAgaWYgaWdub3JlKG5hbWUpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgZGlyIG5vdCBpbiBSRU1PVkVfRElSUzoKKyAgICAgICAgICAgIG1vZHVsZXNfYnlfbmFtZVtuYW1lXSA9IGRpcgorICAgICAgICAgICAgbCA9IG1vZHVsZXNfYnlfZGlyLmdldChkaXIsIFtdKQorICAgICAgICAgICAgbW9kdWxlc19ieV9kaXJbZGlyXSA9IGwKKyAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIGw6CisgICAgICAgICAgICAgICAgbC5hcHBlbmQobmFtZSkKKyAgICAjIGxvYWQgdXAgZXh0ZW5zaW9uIG1vZHVsZXM6CisgICAgcHdkID0gb3MuZ2V0Y3dkKCkKKyAgICB0cnk6CisgICAgICAgIG9zLmNoZGlyKCJNb2R1bGVzIikKKyAgICAgICAgZGlyID0gIjxleHRlbnNpb24+IgorICAgICAgICBmb3IgbGluZSBpbiBnbG9iLmdsb2IoIiptb2R1bGUuYyIpOgorICAgICAgICAgICAgbmFtZSA9IGxpbmVbOi04XQorICAgICAgICAgICAgaWYgaWdub3JlKG5hbWUpIG9yIG1vZHVsZXNfYnlfbmFtZS5oYXNfa2V5KG5hbWUpIG9yIG5hbWUgPT0gInh4IjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbW9kdWxlc19ieV9uYW1lW25hbWVdID0gZGlyCisgICAgICAgICAgICBsID0gbW9kdWxlc19ieV9kaXIuZ2V0KGRpciwgW10pCisgICAgICAgICAgICBtb2R1bGVzX2J5X2RpcltkaXJdID0gbAorICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gbDoKKyAgICAgICAgICAgICAgICBsLmFwcGVuZChuYW1lKQorICAgIGZpbmFsbHk6CisgICAgICAgIG9zLmNoZGlyKHB3ZCkKKyAgICAjCisgICAgIyBEdW1wIHRoZSByZXN1bHRzOgorICAgICMKKyAgICBpZiBhbm5vdGF0ZToKKyAgICAgICAgbW9kdWxlcyA9IG1vZHVsZXNfYnlfbmFtZS5pdGVtcygpCisgICAgICAgIG1vZHVsZXMuc29ydCgpCisgICAgICAgIHdpZHRoID0gbWF4KG1hcChsZW4sIG1vZHVsZXNfYnlfbmFtZS5rZXlzKCkpKQorICAgICAgICBmb3JtYXQgPSAiJSUtJWRzICAlJXMiICUgd2lkdGgKKyAgICAgICAgZm9yIG5hbWUsIGRpciBpbiBtb2R1bGVzOgorICAgICAgICAgICAgaWYgZGlyIGFuZCBkaXJbMF0gIT0gIjwiOgorICAgICAgICAgICAgICAgIHByaW50IGZvcm1hdCAlIChuYW1lLCBkaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50IG5hbWUKKyAgICBlbGlmIGNhdGVnb3JpemU6CisgICAgICAgIG1vZHVsZXMgPSBtb2R1bGVzX2J5X2Rpci5pdGVtcygpCisgICAgICAgIG1vZHVsZXMuc29ydCgpCisgICAgICAgIHdpZHRoID0gbWF4KG1hcChsZW4sIG1vZHVsZXNfYnlfZGlyLmtleXMoKSkpCisgICAgICAgIGZvcm1hdCA9ICIlJS0lZHMgICUlcyIgJSB3aWR0aAorICAgICAgICBmb3IgZGlyLCBuYW1lcyBpbiBtb2R1bGVzOgorICAgICAgICAgICAgbmFtZXMuc29ydCgpCisgICAgICAgICAgICBwcmludCBmb3JtYXQgJSAoZGlyLCBuYW1lc1swXSkKKyAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzWzE6XToKKyAgICAgICAgICAgICAgICBwcmludCBmb3JtYXQgJSAoJycsIG5hbWUpCisgICAgICAgICAgICBwcmludAorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZXMgPSBtb2R1bGVzX2J5X25hbWUua2V5cygpCisgICAgICAgIG1vZHVsZXMuc29ydCgpCisgICAgICAgIHByaW50IHN0cmluZy5qb2luKG1vZHVsZXMsICJcbiIpCisKKworZGVmIGlnbm9yZV9mcm9tX21vZHVsZWxpc3QoZGF0YSwgaWdub3JlX2RpY3QpOgorICAgIGZvciBuYW1lIGluIHN0cmluZy5zcGxpdChkYXRhKToKKyAgICAgICAgaWdub3JlX2RpY3RbbmFtZV0gPSBuYW1lCisKK2RlZiBpZ25vcmVfZnJvbV9pZHgoZGF0YSwgaWdub3JlX2RpY3QpOgorICAgIGRhdGEgPSBzdHJpbmcucmVwbGFjZShkYXRhLCByIlxoYWNrc2NvcmUgIHt9IiwgIl8iKQorICAgIHJ4ID0gcmUuY29tcGlsZShyIlxcaW5kZXhlbnRyeVxzKnsoW15AXSopQCIpCisgICAgZm9yIGxpbmUgaW4gc3RyaW5nLnNwbGl0KGRhdGEsICJcbiIpOgorICAgICAgICBtID0gcngubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIG5hbWUgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICBpZ25vcmVfZGljdFtuYW1lXSA9IG5hbWUKKworCitkZWYgdXNhZ2UoKToKKyAgICB2YXJzID0ge30KKyAgICB2YXJzWyJwcm9ncmFtIl0gPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorICAgIHByaW50IF9fZG9jX18gJSB2YXJzCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2RvYy90b29scy9ta2Fja3NodG1sIGIvZG9jL3Rvb2xzL21rYWNrc2h0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTE3YjMwMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9ta2Fja3NodG1sCkBAIC0wLDAgKzEsNjUgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyMgIC0qLSBQeXRob24gLSotCisKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCBzdXBwb3J0CitpbXBvcnQgc3lzCisKKworZGVmIGNvbGxlY3QoZnApOgorICAgIG5hbWVzID0gW10KKyAgICB3aGlsZSAxOgorICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGxpbmUgPSBzdHJpbmcuc3RyaXAobGluZSkKKyAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgIG5hbWVzLmFwcGVuZChsaW5lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZXMgPSBbXQorICAgIHJldHVybiBuYW1lcworCisKK2RlZiBtYWluKCk6CisgICAgb3B0aW9ucyA9IHN1cHBvcnQuT3B0aW9ucygpCisgICAgb3B0aW9ucy5jb2x1bW5zID0gNAorICAgIG9wdGlvbnMudmFyaWFibGVzWyJ0aXRsZSJdID0gIkFja25vd2xlZGdlbWVudHMiCisgICAgb3B0aW9ucy5wYXJzZShzeXMuYXJndlsxOl0pCisgICAgbmFtZXMgPSBjb2xsZWN0KHN5cy5zdGRpbikKKyAgICBwZXJjb2wgPSAobGVuKG5hbWVzKSArIG9wdGlvbnMuY29sdW1ucyAtIDEpIC8gb3B0aW9ucy5jb2x1bW5zCisgICAgY29sbnVtcyA9IFtdCisgICAgZm9yIGkgaW4gcmFuZ2Uob3B0aW9ucy5jb2x1bW5zKToKKyAgICAgICAgY29sbnVtcy5hcHBlbmQocGVyY29sKmkpCisgICAgZnAgPSBvcHRpb25zLmdldF9vdXRwdXRfZmlsZSgpCisgICAgZnAud3JpdGUoc3RyaW5nLnJzdHJpcChvcHRpb25zLmdldF9oZWFkZXIoKSkgKyAiXG4iKQorICAgIGZwLndyaXRlKFRIQU5LUyArICJcbiIpCisgICAgZnAud3JpdGUoJzx0YWJsZSB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+XG4nKQorICAgIGZvciBpIGluIHJhbmdlKHBlcmNvbCk6CisgICAgICAgIGZwLndyaXRlKCIgIDx0cj5cbiIpCisgICAgICAgIGZvciBqIGluIGNvbG51bXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoIiAgICA8dGQ+JXM8L3RkPlxuIiAlIG5hbWVzW2kgKyBqXSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZnAud3JpdGUoIiAgPC90cj5cbiIpCisgICAgZnAud3JpdGUoIjwvdGFibGU+XG4iKQorICAgIGZwLndyaXRlKHN0cmluZy5yc3RyaXAob3B0aW9ucy5nZXRfZm9vdGVyKCkpICsgIlxuIikKKyAgICBmcC5jbG9zZSgpCisKK1RIQU5LUyA9ICcnJ1wKKworPHA+VGhlc2UgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgaW4gc29tZSB3YXkgdG8gdGhlIFB5dGhvbgorZG9jdW1lbnRhdGlvbi4gIFRoaXMgbGlzdCBpcyBwcm9iYWJseSBub3QgY29tcGxldGUgLS0gaWYgeW91IGZlZWwgdGhhdAoreW91IG9yIGFueW9uZSBlbHNlIHNob3VsZCBiZSBvbiB0aGlzIGxpc3QsIHBsZWFzZSBsZXQgdXMga25vdyAoc2VuZAorZW1haWwgdG8gPGEKK2hyZWY9Im1haWx0bzpweXRob24tZG9jc0BweXRob24ub3JnIj5weXRob24tZG9jc0BweXRob24ub3JnPC9hPiksIGFuZAord2Ugd2lsbCBiZSBnbGFkIHRvIGNvcnJlY3QgdGhlIHByb2JsZW0uPC9wPgorCis8cD5JdCBpcyBvbmx5IHdpdGggdGhlIGlucHV0IGFuZCBjb250cmlidXRpb25zIG9mIHRoZSBQeXRob24gY29tbXVuaXR5Cit0aGF0IFB5dGhvbiBoYXMgc3VjaCB3b25kZXJmdWwgZG9jdW1lbnRhdGlvbiAtLSA8Yj5UaGFuayBZb3UhPC9iPjwvcD4KKworJycnCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2RvYy90b29scy9ta2hvd3RvIGIvZG9jL3Rvb2xzL21raG93dG8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmVlYjA5MwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9ta2hvd3RvCkBAIC0wLDAgKzEsNTk3IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjICAtKi0gUHl0aG9uIC0qLQorIiIidXNhZ2U6ICUocHJvZ3JhbSlzIFtvcHRpb25zLi4uXSBmaWxlIC4uLgorCitPcHRpb25zIHNwZWNpZnlpbmcgZm9ybWF0cyB0byBidWlsZDoKKyAgICAtLWh0bWwJCUh5cGVyVGV4dCBNYXJrdXAgTGFuZ3VhZ2UgKGRlZmF1bHQpCisgICAgLS1wZGYJCVBvcnRhYmxlIERvY3VtZW50IEZvcm1hdAorICAgIC0tcHMJCVBvc3RTY3JpcHQKKyAgICAtLWR2aQkJJ0RlVmljZSBJbmRlcGVudGVudCcgZm9ybWF0IGZyb20gVGVYCisgICAgLS10ZXh0CQlBU0NJSSB0ZXh0IChyZXF1aXJlcyBseW54KQorCisgICAgTW9yZSB0aGFuIG9uZSBvdXRwdXQgZm9ybWF0IG1heSBiZSBzcGVjaWZpZWQsIG9yIC0tYWxsLgorCitIVE1MIG9wdGlvbnM6CisgICAgLS1hZGRyZXNzLCAtYQlTcGVjaWZ5IGFuIGFkZHJlc3MgZm9yIHBhZ2UgZm9vdGVycy4KKyAgICAtLWxpbmsJCVNwZWNpZnkgdGhlIG51bWJlciBvZiBsZXZlbHMgdG8gaW5jbHVkZSBvbiBlYWNoIHBhZ2UuCisgICAgLS1zcGxpdCwgLXMJCVNwZWNpZnkgYSBzZWN0aW9uIGxldmVsIGZvciBwYWdlIHNwbGl0dGluZywgZGVmYXVsdDogJShtYXhfc3BsaXRfZGVwdGgpcy4KKyAgICAtLWljb25zZXJ2ZXIsIC1pCVNwZWNpZnkgbG9jYXRpb24gb2YgaWNvbnMgKGRlZmF1bHQ6IC4uLykuCisgICAgLS1pbWFnZS10eXBlCVNwZWNpZnkgdGhlIGltYWdlIHR5cGUgdG8gdXNlIGluIEhUTUwgb3V0cHV0OworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBnaWYgKGRlZmF1bHQpLCBwbmcuCisgICAgLS1udW1lcmljICAgICAgICAgICBEb24ndCByZW5hbWUgdGhlIEhUTUwgZmlsZXM7IGp1c3Qga2VlcCBub2RlIy5odG1sIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVuYW1lcy4KKyAgICAtLXN0eWxlICAgICAgICAgICAgIFNwZWNpZnkgdGhlIENTUyBmaWxlIHRvIHVzZSBmb3IgdGhlIG91dHB1dCAoZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBub3QgYSBVUkwpLgorICAgIC0tdXAtbGluayAgICAgICAgICAgVVJMIHRvIGEgcGFyZW50IGRvY3VtZW50LgorICAgIC0tdXAtdGl0bGUgICAgICAgICAgVGl0bGUgb2YgYSBwYXJlbnQgZG9jdW1lbnQuCisKK090aGVyIG9wdGlvbnM6CisgICAgLS1hNAkJRm9ybWF0IGZvciBBNCBwYXBlci4KKyAgICAtLWxldHRlcgkJRm9ybWF0IGZvciBVUyBsZXR0ZXIgcGFwZXIgKHRoZSBkZWZhdWx0KS4KKyAgICAtLWhlbHAsIC1ICQlTaG93IHRoaXMgdGV4dC4KKyAgICAtLWxvZ2dpbmcsIC1sCUxvZyBzdGRvdXQgYW5kIHN0ZGVyciB0byBhIGZpbGUgKCouaG93KS4KKyAgICAtLWRlYnVnZ2luZywgLUQJRWNobyBjb21tYW5kcyBhcyB0aGV5IGFyZSBleGVjdXRlZC4KKyAgICAtLWtlZXAsIC1rCQlLZWVwIHRlbXBvcmFyeSBmaWxlcyBhcm91bmQuCisgICAgLS1xdWlldCwgLXEJCURvIG5vdCBwcmludCBjb21tYW5kIG91dHB1dCB0byBzdGRvdXQuCisJCQkoc3RkZXJyIGlzIGFsc28gbG9zdCwgIHNvcnJ5OyBzZWUgKi5ob3cgZm9yIGVycm9ycykKKyIiIgorCitpbXBvcnQgZ2V0b3B0CitpbXBvcnQgZ2xvYgoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQorCisKK01ZRElSID0gb3MucGF0aC5hYnNwYXRoKHN5cy5wYXRoWzBdKQorCitJU1RGSUxFID0gb3MucGF0aC5qb2luKE1ZRElSLCAidGV4aW5wdXRzIiwgInB5dGhvbi5pc3QiKQorTk9ERTJMQUJFTF9TQ1JJUFQgPSBvcy5wYXRoLmpvaW4oTVlESVIsICJub2RlMmxhYmVsLnBsIikKK0wySF9JTklUX0ZJTEUgPSBvcy5wYXRoLmpvaW4oTVlESVIsICJwZXJsIiwgImwyaGluaXQucGVybCIpCisKK0JJQlRFWF9CSU5BUlkgPSAiYmlidGV4IgorRFZJUFNfQklOQVJZID0gImR2aXBzIgorTEFURVhfQklOQVJZID0gImxhdGV4IgorTEFURVgySFRNTF9CSU5BUlkgPSAibGF0ZXgyaHRtbCIKK0xZTlhfQklOQVJZID0gImx5bngiCitNQUtFSU5ERVhfQklOQVJZID0gIm1ha2VpbmRleCIKK1BERkxBVEVYX0JJTkFSWSA9ICJwZGZsYXRleCIKK1BFUkxfQklOQVJZID0gInBlcmwiCitQWVRIT05fQklOQVJZID0gInB5dGhvbiIKKworCitkZWYgdXNhZ2Uob3B0aW9ucyk6CisgICAgcHJpbnQgX19kb2NfXyAlIG9wdGlvbnMKKworZGVmIGVycm9yKG9wdGlvbnMsIG1lc3NhZ2UsIGVycj0yKToKKyAgICBzeXMuc3Rkb3V0ID0gc3lzLnN0ZGVycgorICAgIHByaW50IG1lc3NhZ2UKKyAgICBwcmludAorICAgIHVzYWdlKG9wdGlvbnMpCisgICAgc3lzLmV4aXQoMikKKworCitjbGFzcyBPcHRpb25zOgorICAgIHByb2dyYW0gPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorICAgICMKKyAgICBhZGRyZXNzID0gJycKKyAgICBidWlsZGRpciA9IE5vbmUKKyAgICBkZWJ1Z2dpbmcgPSAwCisgICAgZGlzY2FyZF90ZW1wcyA9IDEKKyAgICBoYXZlX3RlbXBzID0gMAorICAgIGljb25fc2VydmVyID0gTm9uZQorICAgIGltYWdlX3R5cGUgPSAiZ2lmIgorICAgIGxvZ2dpbmcgPSAwCisgICAgbWF4X2xpbmtfZGVwdGggPSAzCisgICAgbWF4X3NwbGl0X2RlcHRoID0gNgorICAgIHBhcGVyID0gImxldHRlciIKKyAgICBxdWlldCA9IDAKKyAgICBydW5zID0gMAorICAgIG51bWVyaWMgPSAwCisgICAgZ2xvYmFsX21vZHVsZV9pbmRleCA9IE5vbmUKKyAgICBzdHlsZV9maWxlID0gb3MucGF0aC5qb2luKE1ZRElSLCAiaHRtbCIsICJzdHlsZS5jc3MiKQorICAgIGFib3V0X2ZpbGUgPSBvcy5wYXRoLmpvaW4oTVlESVIsICJodG1sIiwgImFib3V0LmRhdCIpCisgICAgdXBfbGluayA9IE5vbmUKKyAgICB1cF90aXRsZSA9IE5vbmUKKyAgICAjCisgICAgREVGQVVMVF9GT1JNQVRTID0gKCJodG1sIiwpCisgICAgQUxMX0ZPUk1BVFMgPSAoImR2aSIsICJodG1sIiwgInBkZiIsICJwcyIsICJ0ZXh0IikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5mb3JtYXRzID0gW10KKyAgICAgICAgc2VsZi5sMmhfaW5pdF9maWxlcyA9IFtdCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgIyBUaGlzIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSB1c2FnZSBtZXNzYWdlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBrZXkpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yLCBrZXkKKworICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzKToKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoYXJncywgIkhpOmE6czpsRGtxcjoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImFsbCIsICJwb3N0c2NyaXB0IiwgImhlbHAiLCAiaWNvbnNlcnZlcj0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZHJlc3M9IiwgImE0IiwgImxldHRlciIsICJsMmgtaW5pdD0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbms9IiwgInNwbGl0PSIsICJsb2dnaW5nIiwgImRlYnVnZ2luZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2VlcCIsICJxdWlldCIsICJydW5zPSIsICJpbWFnZS10eXBlPSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJvdXQ9IiwgIm51bWVyaWMiLCAic3R5bGU9IiwgInBhcGVyPSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXAtbGluaz0iLCAidXAtdGl0bGU9IiwgImRpcj0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdsb2JhbC1tb2R1bGUtaW5kZXg9Il0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBsaXN0KHNlbGYuQUxMX0ZPUk1BVFMpKQorICAgICAgICBmb3Igb3B0LCBhcmcgaW4gb3B0czoKKyAgICAgICAgICAgIGlmIG9wdCA9PSAiLS1hbGwiOgorICAgICAgICAgICAgICAgIHNlbGYuZm9ybWF0cyA9IGxpc3Qoc2VsZi5BTExfRk9STUFUUykKKyAgICAgICAgICAgIGVsaWYgb3B0IGluICgiLUgiLCAiLS1oZWxwIik6CisgICAgICAgICAgICAgICAgdXNhZ2Uoc2VsZikKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgpCisgICAgICAgICAgICBlbGlmIG9wdCA9PSAiLS1pY29uc2VydmVyIjoKKyAgICAgICAgICAgICAgICBzZWxmLmljb25fc2VydmVyID0gYXJnCisgICAgICAgICAgICBlbGlmIG9wdCBpbiAoIi1hIiwgIi0tYWRkcmVzcyIpOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkcmVzcyA9IGFyZworICAgICAgICAgICAgZWxpZiBvcHQgPT0gIi0tYTQiOgorICAgICAgICAgICAgICAgIHNlbGYucGFwZXIgPSAiYTQiCisgICAgICAgICAgICBlbGlmIG9wdCA9PSAiLS1sZXR0ZXIiOgorICAgICAgICAgICAgICAgIHNlbGYucGFwZXIgPSAibGV0dGVyIgorICAgICAgICAgICAgZWxpZiBvcHQgPT0gIi0tbGluayI6CisgICAgICAgICAgICAgICAgc2VsZi5tYXhfbGlua19kZXB0aCA9IGludChhcmcpCisgICAgICAgICAgICBlbGlmIG9wdCBpbiAoIi1zIiwgIi0tc3BsaXQiKToKKyAgICAgICAgICAgICAgICBzZWxmLm1heF9zcGxpdF9kZXB0aCA9IGludChhcmcpCisgICAgICAgICAgICBlbGlmIG9wdCBpbiAoIi1sIiwgIi0tbG9nZ2luZyIpOgorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2luZyA9IHNlbGYubG9nZ2luZyArIDEKKyAgICAgICAgICAgIGVsaWYgb3B0IGluICgiLUQiLCAiLS1kZWJ1Z2dpbmciKToKKyAgICAgICAgICAgICAgICBzZWxmLmRlYnVnZ2luZyA9IHNlbGYuZGVidWdnaW5nICsgMQorICAgICAgICAgICAgZWxpZiBvcHQgaW4gKCItayIsICItLWtlZXAiKToKKyAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmRfdGVtcHMgPSAwCisgICAgICAgICAgICBlbGlmIG9wdCBpbiAoIi1xIiwgIi0tcXVpZXQiKToKKyAgICAgICAgICAgICAgICBzZWxmLnF1aWV0ID0gMQorICAgICAgICAgICAgZWxpZiBvcHQgaW4gKCItciIsICItLXJ1bnMiKToKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bnMgPSBpbnQoYXJnKQorICAgICAgICAgICAgZWxpZiBvcHQgPT0gIi0taW1hZ2UtdHlwZSI6CisgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV90eXBlID0gYXJnCisgICAgICAgICAgICBlbGlmIG9wdCA9PSAiLS1hYm91dCI6CisgICAgICAgICAgICAgICAgIyBhbHdheXMgbWFrZSB0aGlzIGFic29sdXRlOgorICAgICAgICAgICAgICAgIHNlbGYuYWJvdXRfZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aChhcmcpKQorICAgICAgICAgICAgZWxpZiBvcHQgPT0gIi0tbnVtZXJpYyI6CisgICAgICAgICAgICAgICAgc2VsZi5udW1lcmljID0gMQorICAgICAgICAgICAgZWxpZiBvcHQgPT0gIi0tc3R5bGUiOgorICAgICAgICAgICAgICAgIHNlbGYuc3R5bGVfZmlsZSA9IG9zLnBhdGguYWJzcGF0aChhcmcpCisgICAgICAgICAgICBlbGlmIG9wdCA9PSAiLS1sMmgtaW5pdCI6CisgICAgICAgICAgICAgICAgc2VsZi5sMmhfaW5pdF9maWxlcy5hcHBlbmQob3MucGF0aC5hYnNwYXRoKGFyZykpCisgICAgICAgICAgICBlbGlmIG9wdCA9PSAiLS11cC1saW5rIjoKKyAgICAgICAgICAgICAgICBzZWxmLnVwX2xpbmsgPSBhcmcKKyAgICAgICAgICAgIGVsaWYgb3B0ID09ICItLXVwLXRpdGxlIjoKKyAgICAgICAgICAgICAgICBzZWxmLnVwX3RpdGxlID0gYXJnCisgICAgICAgICAgICBlbGlmIG9wdCA9PSAiLS1nbG9iYWwtbW9kdWxlLWluZGV4IjoKKyAgICAgICAgICAgICAgICBzZWxmLmdsb2JhbF9tb2R1bGVfaW5kZXggPSBhcmcKKyAgICAgICAgICAgIGVsaWYgb3B0ID09ICItLWRpciI6CisgICAgICAgICAgICAgICAgc2VsZi5idWlsZGRpciA9IGFyZworICAgICAgICAgICAgZWxpZiBvcHQgPT0gIi0tcGFwZXIiOgorICAgICAgICAgICAgICAgIHNlbGYucGFwZXIgPSBhcmcKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgRm9ybWF0IHNwZWNpZmllcnM6CisgICAgICAgICAgICAjCisgICAgICAgICAgICBlbGlmIG9wdFsyOl0gaW4gc2VsZi5BTExfRk9STUFUUzoKKyAgICAgICAgICAgICAgICBzZWxmLmFkZF9mb3JtYXQob3B0WzI6XSkKKyAgICAgICAgICAgIGVsaWYgb3B0ID09ICItLXBvc3RzY3JpcHQiOgorICAgICAgICAgICAgICAgICMgc3lub255bSBmb3IgLS1wcworICAgICAgICAgICAgICAgIHNlbGYuYWRkX2Zvcm1hdCgicHMiKQorICAgICAgICBzZWxmLmluaXRpYWxpemUoKQorICAgICAgICAjCisgICAgICAgICMgcmV0dXJuIHRoZSBhcmdzIHRvIGFsbG93IHRoZSBjYWxsZXIgYWNjZXNzOgorICAgICAgICAjCisgICAgICAgIHJldHVybiBhcmdzCisKKyAgICBkZWYgYWRkX2Zvcm1hdChzZWxmLCBmb3JtYXQpOgorICAgICAgICAiIiJBZGQgYSBmb3JtYXQgdG8gdGhlIGZvcm1hdHMgbGlzdCBpZiBub3QgcHJlc2VudC4iIiIKKyAgICAgICAgaWYgbm90IGZvcm1hdCBpbiBzZWxmLmZvcm1hdHM6CisgICAgICAgICAgICBzZWxmLmZvcm1hdHMuYXBwZW5kKGZvcm1hdCkKKworICAgIGRlZiBpbml0aWFsaXplKHNlbGYpOgorICAgICAgICAiIiJDb21wbGV0ZSBpbml0aWFsaXphdGlvbi4gIFRoaXMgaXMgbmVlZGVkIGlmIHBhcnNlKCkgaXNuJ3QgdXNlZC4iIiIKKyAgICAgICAgIyBhZGQgdGhlIGRlZmF1bHQgZm9ybWF0IGlmIG5vIGZvcm1hdHMgd2VyZSBzcGVjaWZpZWQ6CisgICAgICAgIGlmIG5vdCBzZWxmLmZvcm1hdHM6CisgICAgICAgICAgICBzZWxmLmZvcm1hdHMgPSBzZWxmLkRFRkFVTFRfRk9STUFUUworICAgICAgICAjIGRldGVybWluZSB0aGUgYmFzZSBzZXQgb2YgdGV4aW5wdXRzIGRpcmVjdG9yaWVzOgorICAgICAgICB0ZXhpbnB1dHMgPSBzdHJpbmcuc3BsaXQob3MuZW52aXJvbi5nZXQoIlRFWElOUFVUUyIsICIiKSwgb3MucGF0aHNlcCkKKyAgICAgICAgaWYgbm90IHRleGlucHV0czoKKyAgICAgICAgICAgIHRleGlucHV0cyA9IFsnJ10KKyAgICAgICAgc2VsZi5iYXNlX3RleGlucHV0cyA9IFsKKyAgICAgICAgICAgIG9zLnBhdGguam9pbihNWURJUiwgInBhcGVyLSIgKyBzZWxmLnBhcGVyKSwKKyAgICAgICAgICAgIG9zLnBhdGguam9pbihNWURJUiwgInRleGlucHV0cyIpLAorICAgICAgICAgICAgXSArIHRleGlucHV0cworCisKK2NsYXNzIEpvYjoKKyAgICBsYXRleF9ydW5zID0gMAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHBhdGgpOgorICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuZG9jdHlwZSA9IGdldF9kb2N0eXBlKHBhdGgpCisgICAgICAgIHNlbGYuZmlsZWRpciwgc2VsZi5kb2MgPSBzcGxpdF9wYXRobmFtZShwYXRoKQorICAgICAgICBzZWxmLmxvZ19maWxlbmFtZSA9IHNlbGYuZG9jICsgIi5ob3ciCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYubG9nX2ZpbGVuYW1lKToKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLmxvZ19maWxlbmFtZSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5kb2MgKyAiLmwyaCIpOgorICAgICAgICAgICAgc2VsZi5sMmhfYXV4X2luaXRfZmlsZSA9IHRlbXBmaWxlLm1rdGVtcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmwyaF9hdXhfaW5pdF9maWxlID0gc2VsZi5kb2MgKyAiLmwyaCIKKyAgICAgICAgc2VsZi53cml0ZV9sMmhfYXV4X2luaXRfZmlsZSgpCisKKyAgICBkZWYgYnVpbGQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0dXBfdGV4aW5wdXRzKCkKKyAgICAgICAgZm9ybWF0cyA9IHNlbGYub3B0aW9ucy5mb3JtYXRzCisgICAgICAgIGlmICJkdmkiIGluIGZvcm1hdHMgb3IgInBzIiBpbiBmb3JtYXRzOgorICAgICAgICAgICAgc2VsZi5idWlsZF9kdmkoKQorICAgICAgICBpZiAicGRmIiBpbiBmb3JtYXRzOgorICAgICAgICAgICAgc2VsZi5idWlsZF9wZGYoKQorICAgICAgICBpZiAicHMiIGluIGZvcm1hdHM6CisgICAgICAgICAgICBzZWxmLmJ1aWxkX3BzKCkKKyAgICAgICAgaWYgImh0bWwiIGluIGZvcm1hdHM6CisgICAgICAgICAgICBzZWxmLnJlcXVpcmVfdGVtcHMoKQorICAgICAgICAgICAgc2VsZi5idWlsZF9odG1sKHNlbGYub3B0aW9ucy5idWlsZGRpciBvciBzZWxmLmRvYykKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9ucy5pY29uX3NlcnZlciA9PSAiLiI6CisgICAgICAgICAgICAgICAgcGF0dGVybiA9IG9zLnBhdGguam9pbihNWURJUiwgImh0bWwiLCAiaWNvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiouIiArIHNlbGYub3B0aW9ucy5pbWFnZV90eXBlKQorICAgICAgICAgICAgICAgIGltZ3MgPSBnbG9iLmdsb2IocGF0dGVybikKKyAgICAgICAgICAgICAgICBpZiBub3QgaW1nczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53YXJuaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgc3VwcG9ydCBpbWFnZXMgb2YgdHlwZSAlcy4iCisgICAgICAgICAgICAgICAgICAgICAgICAlIGBzZWxmLm9wdGlvbnMuaW1hZ2VfdHlwZWApCisgICAgICAgICAgICAgICAgZm9yIGZuIGluIGltZ3M6CisgICAgICAgICAgICAgICAgICAgIG5ld19mbiA9IG9zLnBhdGguam9pbihzZWxmLmRvYywgb3MucGF0aC5iYXNlbmFtZShmbikpCisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShmbiwgbmV3X2ZuKQorICAgICAgICBpZiAidGV4dCIgaW4gZm9ybWF0czoKKyAgICAgICAgICAgIHNlbGYucmVxdWlyZV90ZW1wcygpCisgICAgICAgICAgICB0ZW1wZGlyID0gc2VsZi5kb2MKKyAgICAgICAgICAgIG5lZWRfaHRtbCA9ICJodG1sIiBub3QgaW4gZm9ybWF0cworICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25zLm1heF9zcGxpdF9kZXB0aCAhPSAxOgorICAgICAgICAgICAgICAgIGZwID0gb3BlbihzZWxmLmwyaF9hdXhfaW5pdF9maWxlLCAiYSIpCisgICAgICAgICAgICAgICAgZnAud3JpdGUoIiMgcmUtaGFjayB0aGlzIGZpbGUgZm9yIC0tdGV4dDpcbiIpCisgICAgICAgICAgICAgICAgbDJob3B0aW9uKGZwLCAiTUFYX1NQTElUX0RFUFRIIiwgIjEiKQorICAgICAgICAgICAgICAgIGZwLndyaXRlKCIxO1xuIikKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICAgICAgdGVtcGRpciA9IHNlbGYuZG9jICsgIi10ZW1wLWh0bWwiCisgICAgICAgICAgICAgICAgbmVlZF9odG1sID0gMQorICAgICAgICAgICAgaWYgbmVlZF9odG1sOgorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRfaHRtbCh0ZW1wZGlyLCBtYXhfc3BsaXRfZGVwdGg9MSkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfdGV4dCh0ZW1wZGlyKQorICAgICAgICBpZiBzZWxmLm9wdGlvbnMuZGlzY2FyZF90ZW1wczoKKyAgICAgICAgICAgIHNlbGYuY2xlYW51cCgpCisKKyAgICBkZWYgc2V0dXBfdGV4aW5wdXRzKHNlbGYpOgorICAgICAgICB0ZXhpbnB1dHMgPSBbc2VsZi5maWxlZGlyXSArIGxpc3Qoc2VsZi5vcHRpb25zLmJhc2VfdGV4aW5wdXRzKQorICAgICAgICBvcy5lbnZpcm9uWyJURVhJTlBVVFMiXSA9IHN0cmluZy5qb2luKFsnLiddK3RleGlucHV0cywgb3MucGF0aHNlcCkKKyAgICAgICAgc2VsZi5tZXNzYWdlKCJURVhJTlBVVFM9IiArIG9zLmVudmlyb25bIlRFWElOUFVUUyJdKQorCisgICAgZGVmIGJ1aWxkX2F1eChzZWxmLCBiaW5hcnk9Tm9uZSk6CisgICAgICAgIGlmIGJpbmFyeSBpcyBOb25lOgorICAgICAgICAgICAgYmluYXJ5ID0gTEFURVhfQklOQVJZCisgICAgICAgIG5ld19pbmRleCggICAiJXMuaW5kIiAlIHNlbGYuZG9jLCAiZ2VuaW5kZXgiKQorICAgICAgICBuZXdfaW5kZXgoIm1vZCVzLmluZCIgJSBzZWxmLmRvYywgIm1vZGluZGV4IikKKyAgICAgICAgc2VsZi5ydW4oIiVzICVzIiAlIChiaW5hcnksIHNlbGYuZG9jKSkKKyAgICAgICAgc2VsZi51c2VfYmlidGV4ID0gY2hlY2tfZm9yX2JpYnRleChzZWxmLmRvYyArICIuYXV4IikKKyAgICAgICAgc2VsZi5sYXRleF9ydW5zID0gMQorCisgICAgZGVmIGJ1aWxkX2R2aShzZWxmKToKKyAgICAgICAgc2VsZi51c2VfbGF0ZXgoTEFURVhfQklOQVJZKQorCisgICAgZGVmIGJ1aWxkX3BkZihzZWxmKToKKyAgICAgICAgc2VsZi51c2VfbGF0ZXgoUERGTEFURVhfQklOQVJZKQorCisgICAgZGVmIHVzZV9sYXRleChzZWxmLCBiaW5hcnkpOgorICAgICAgICBzZWxmLnJlcXVpcmVfdGVtcHMoYmluYXJ5PWJpbmFyeSkKKyAgICAgICAgaWYgc2VsZi5sYXRleF9ydW5zIDwgMjoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKCJtb2Qlcy5pZHgiICUgc2VsZi5kb2MpOgorICAgICAgICAgICAgICAgIHNlbGYucnVuKCIlcyBtb2Qlcy5pZHgiICUgKE1BS0VJTkRFWF9CSU5BUlksIHNlbGYuZG9jKSkKKyAgICAgICAgICAgIHVzZV9pbmRmaXggPSAwCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzZWxmLmRvYyArICIuaWR4Iik6CisgICAgICAgICAgICAgICAgdXNlX2luZGZpeCA9IDEKKyAgICAgICAgICAgICAgICAjIGNhbGwgdG8gRG9jL3Rvb2xzL2ZpeF9oYWNrIG9taXR0ZWQ7IGRvZXNuJ3QgYXBwZWFyIG5lY2Vzc2FyeQorICAgICAgICAgICAgICAgIHNlbGYucnVuKCIlcyAlcy5pZHgiICUgKE1BS0VJTkRFWF9CSU5BUlksIHNlbGYuZG9jKSkKKyAgICAgICAgICAgICAgICBpbXBvcnQgaW5kZml4CisgICAgICAgICAgICAgICAgaW5kZml4LnByb2Nlc3Moc2VsZi5kb2MgKyAiLmluZCIpCisgICAgICAgICAgICBpZiBzZWxmLnVzZV9iaWJ0ZXg6CisgICAgICAgICAgICAgICAgc2VsZi5ydW4oIiVzICVzIiAlIChCSUJURVhfQklOQVJZLCBzZWxmLmRvYykpCisgICAgICAgICAgICBzZWxmLnByb2Nlc3Nfc3lub3BzaXNfZmlsZXMoKQorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBsZXQgdGhlIGRvY3R5cGUtc3BlY2lmaWMgaGFuZGxlciBkbyBzb21lIGludGVybWVkaWF0ZSB3b3JrOgorICAgICAgICAgICAgIworICAgICAgICAgICAgc2VsZi5ydW4oIiVzICVzIiAlIChiaW5hcnksIHNlbGYuZG9jKSkKKyAgICAgICAgICAgIHNlbGYubGF0ZXhfcnVucyA9IHNlbGYubGF0ZXhfcnVucyArIDEKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKCJtb2Qlcy5pZHgiICUgc2VsZi5kb2MpOgorICAgICAgICAgICAgICAgIHNlbGYucnVuKCIlcyAtcyAlcyBtb2Qlcy5pZHgiCisgICAgICAgICAgICAgICAgICAgICAgICAgJSAoTUFLRUlOREVYX0JJTkFSWSwgSVNURklMRSwgc2VsZi5kb2MpKQorICAgICAgICAgICAgaWYgdXNlX2luZGZpeDoKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bigiJXMgLXMgJXMgJXMuaWR4IgorICAgICAgICAgICAgICAgICAgICAgICAgICUgKE1BS0VJTkRFWF9CSU5BUlksIElTVEZJTEUsIHNlbGYuZG9jKSkKKyAgICAgICAgICAgICAgICBpbmRmaXgucHJvY2VzcyhzZWxmLmRvYyArICIuaW5kIikKKyAgICAgICAgICAgIHNlbGYucHJvY2Vzc19zeW5vcHNpc19maWxlcygpCisgICAgICAgICMKKyAgICAgICAgIyBhbmQgbm93IGZpbmlzaCBpdCBvZmY6CisgICAgICAgICMKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2VsZi5kb2MgKyAiLnRvYyIpIGFuZCBiaW5hcnkgPT0gUERGTEFURVhfQklOQVJZOgorICAgICAgICAgICAgaW1wb3J0IHRvYzJia20KKyAgICAgICAgICAgIGlmIHNlbGYuZG9jdHlwZSA9PSAibWFudWFsIjoKKyAgICAgICAgICAgICAgICBiaWdwYXJ0ID0gImNoYXB0ZXIiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJpZ3BhcnQgPSAic2VjdGlvbiIKKyAgICAgICAgICAgIHRvYzJia20ucHJvY2VzcyhzZWxmLmRvYyArICIudG9jIiwgc2VsZi5kb2MgKyAiLmJrbSIsIGJpZ3BhcnQpCisgICAgICAgIGlmIHNlbGYudXNlX2JpYnRleDoKKyAgICAgICAgICAgIHNlbGYucnVuKCIlcyAlcyIgJSAoQklCVEVYX0JJTkFSWSwgc2VsZi5kb2MpKQorICAgICAgICBzZWxmLnJ1bigiJXMgJXMiICUgKGJpbmFyeSwgc2VsZi5kb2MpKQorICAgICAgICBzZWxmLmxhdGV4X3J1bnMgPSBzZWxmLmxhdGV4X3J1bnMgKyAxCisKKyAgICBkZWYgcHJvY2Vzc19zeW5vcHNpc19maWxlcyhzZWxmKToKKyAgICAgICAgc3lub3BzaXNfZmlsZXMgPSBnbG9iLmdsb2Ioc2VsZi5kb2MgKyAiKi5zeW4iKQorICAgICAgICBmb3IgcGF0aCBpbiBzeW5vcHNpc19maWxlczoKKyAgICAgICAgICAgIHVuaXFpZnlfbW9kdWxlX3RhYmxlKHBhdGgpCisKKyAgICBkZWYgYnVpbGRfcHMoc2VsZik6CisgICAgICAgIHNlbGYucnVuKCIlcyAtTjAgLW8gJXMucHMgJXMiICUgKERWSVBTX0JJTkFSWSwgc2VsZi5kb2MsIHNlbGYuZG9jKSkKKworICAgIGRlZiBidWlsZF9odG1sKHNlbGYsIGJ1aWxkZGlyPU5vbmUsIG1heF9zcGxpdF9kZXB0aD1Ob25lKToKKyAgICAgICAgaWYgYnVpbGRkaXIgaXMgTm9uZToKKyAgICAgICAgICAgIGJ1aWxkZGlyID0gc2VsZi5kb2MKKyAgICAgICAgaWYgbWF4X3NwbGl0X2RlcHRoIGlzIE5vbmU6CisgICAgICAgICAgICBtYXhfc3BsaXRfZGVwdGggPSBzZWxmLm9wdGlvbnMubWF4X3NwbGl0X2RlcHRoCisgICAgICAgIHRleGZpbGUgPSBOb25lCisgICAgICAgIGZvciBwIGluIHN0cmluZy5zcGxpdChvcy5lbnZpcm9uWyJURVhJTlBVVFMiXSwgb3MucGF0aHNlcCk6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihwLCBzZWxmLmRvYyArICIudGV4IikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgICAgICAgICB0ZXhmaWxlID0gZm4KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgdGV4ZmlsZToKKyAgICAgICAgICAgIHNlbGYud2FybmluZygiQ291bGQgbm90IGxvY2F0ZSAlcy50ZXg7IGFib3J0aW5nLiIgJSBzZWxmLmRvYykKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICMgcmVtb3ZlIGxlYWRpbmcgLi8gKG9yIGVxdWl2Lik7IG1pZ2h0IGF2b2lkIHByb2JsZW1zIHcvIGR2aXBzCisgICAgICAgIGlmIHRleGZpbGVbOjJdID09IG9zLmN1cmRpciArIG9zLnNlcDoKKyAgICAgICAgICAgIHRleGZpbGUgPSB0ZXhmaWxlWzI6XQorICAgICAgICAjIGJ1aWxkIHRoZSBjb21tYW5kIGxpbmUgYW5kIHJ1biBMYVRlWDJIVE1MOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihidWlsZGRpcik6CisgICAgICAgICAgICBvcy5ta2RpcihidWlsZGRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBmbmFtZSBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiKi5odG1sIikpOgorICAgICAgICAgICAgICAgIG9zLnVubGluayhmbmFtZSkKKyAgICAgICAgYXJncyA9IFtMQVRFWDJIVE1MX0JJTkFSWSwKKyAgICAgICAgICAgICAgICAiLWluaXRfZmlsZSIsIHNlbGYubDJoX2F1eF9pbml0X2ZpbGUsCisgICAgICAgICAgICAgICAgIi1kaXIiLCBidWlsZGRpciwKKyAgICAgICAgICAgICAgICB0ZXhmaWxlCisgICAgICAgICAgICAgICAgXQorICAgICAgICBzZWxmLnJ1bihzdHJpbmcuam9pbihhcmdzKSkgICAgICMgWFhYIG5lZWQgcXVvdGluZyEKKyAgICAgICAgIyAuLi4gcG9zdHByb2Nlc3MKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYub3B0aW9ucy5zdHlsZV9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGJ1aWxkZGlyLCBzZWxmLmRvYyArICIuY3NzIikpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsIHNlbGYuZG9jICsgIi5odG1sIiksCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJpbmRleC5odG1sIikpCisgICAgICAgIGlmIG1heF9zcGxpdF9kZXB0aCAhPSAxOgorICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25zLm51bWVyaWM6CisgICAgICAgICAgICAgICAgbGFiZWxfZmlsZSA9IG9zLnBhdGguam9pbihidWlsZGRpciwgImxhYmVscy5wbCIpCisgICAgICAgICAgICAgICAgZnAgPSBvcGVuKGxhYmVsX2ZpbGUpCisgICAgICAgICAgICAgICAgYWJvdXRfbm9kZSA9IE5vbmUKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSAiID0gcS9hYm91dC87XG4iCisgICAgICAgICAgICAgICAgeCA9IGxlbih0YXJnZXQpCisgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBsaW5lWy14Ol0gPT0gdGFyZ2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSByZS5zZWFyY2gociJcfChub2RlXGQrXC5bYS16XSspXHwiLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgYWJvdXRfbm9kZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsIGFib3V0X25vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihidWlsZGRpciwgImFib3V0Lmh0bWwiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHB3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcihidWlsZGRpcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5ydW4oIiVzICVzICouaHRtbCIgJSAoUEVSTF9CSU5BUlksIE5PREUyTEFCRUxfU0NSSVBUKSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcihwd2QpCisKKyAgICBkZWYgYnVpbGRfdGV4dChzZWxmLCB0ZW1wZGlyPU5vbmUpOgorICAgICAgICBpZiB0ZW1wZGlyIGlzIE5vbmU6CisgICAgICAgICAgICB0ZW1wZGlyID0gc2VsZi5kb2MKKyAgICAgICAgaW5kZXhmaWxlID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICJpbmRleC5odG1sIikKKyAgICAgICAgc2VsZi5ydW4oIiVzIC1ub2xpc3QgLWR1bXAgJXMgPiVzLnR4dCIKKyAgICAgICAgICAgICAgICAgJSAoTFlOWF9CSU5BUlksIGluZGV4ZmlsZSwgc2VsZi5kb2MpKQorCisgICAgZGVmIHJlcXVpcmVfdGVtcHMoc2VsZiwgYmluYXJ5PU5vbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi5sYXRleF9ydW5zOgorICAgICAgICAgICAgc2VsZi5idWlsZF9hdXgoYmluYXJ5PWJpbmFyeSkKKworICAgIGRlZiB3cml0ZV9sMmhfYXV4X2luaXRfZmlsZShzZWxmKToKKyAgICAgICAgb3B0aW9ucyA9IHNlbGYub3B0aW9ucworICAgICAgICBmcCA9IG9wZW4oc2VsZi5sMmhfYXV4X2luaXRfZmlsZSwgInciKQorICAgICAgICBkID0gc3RyaW5nX3RvX3Blcmwob3MucGF0aC5kaXJuYW1lKEwySF9JTklUX0ZJTEUpKQorICAgICAgICBmcC53cml0ZSgicGFja2FnZSBtYWluO1xuIgorICAgICAgICAgICAgICAgICAicHVzaCAoQElOQywgJyVzJyk7XG4iCisgICAgICAgICAgICAgICAgICIkbXlkaXIgPSAnJXMnO1xuIgorICAgICAgICAgICAgICAgICAlIChkLCBkKSkKKyAgICAgICAgZnAud3JpdGUob3BlbihMMkhfSU5JVF9GSUxFKS5yZWFkKCkpCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBvcHRpb25zLmwyaF9pbml0X2ZpbGVzOgorICAgICAgICAgICAgZnAud3JpdGUoIlxuIyBpbml0aWFsaXphdGlvbiBjb2RlIGluY29ycG9yYXRlZCBmcm9tOlxuIyAiKQorICAgICAgICAgICAgZnAud3JpdGUoZmlsZW5hbWUpCisgICAgICAgICAgICBmcC53cml0ZSgiXG4iKQorICAgICAgICAgICAgZnAud3JpdGUob3BlbihmaWxlbmFtZSkucmVhZCgpKQorICAgICAgICBmcC53cml0ZSgiXG4iCisgICAgICAgICAgICAgICAgICIjIGF1eGlsbGFyeSBpbml0IGZpbGUgZm9yIGxhdGV4Mmh0bWxcbiIKKyAgICAgICAgICAgICAgICAgIiMgZ2VuZXJhdGVkIGJ5IG1raG93dG9cbiIKKyAgICAgICAgICAgICAgICAgIiROT19BVVRPX0xJTksgPSAxO1xuIgorICAgICAgICAgICAgICAgICApCisgICAgICAgIGwyaG9wdGlvbihmcCwgIkFCT1VUX0ZJTEUiLCBvcHRpb25zLmFib3V0X2ZpbGUpCisgICAgICAgIGwyaG9wdGlvbihmcCwgIklDT05TRVJWRVIiLCBvcHRpb25zLmljb25fc2VydmVyKQorICAgICAgICBsMmhvcHRpb24oZnAsICJJTUFHRV9UWVBFIiwgb3B0aW9ucy5pbWFnZV90eXBlKQorICAgICAgICBsMmhvcHRpb24oZnAsICJBRERSRVNTIiwgb3B0aW9ucy5hZGRyZXNzKQorICAgICAgICBsMmhvcHRpb24oZnAsICJNQVhfTElOS19ERVBUSCIsIG9wdGlvbnMubWF4X2xpbmtfZGVwdGgpCisgICAgICAgIGwyaG9wdGlvbihmcCwgIk1BWF9TUExJVF9ERVBUSCIsIG9wdGlvbnMubWF4X3NwbGl0X2RlcHRoKQorICAgICAgICBsMmhvcHRpb24oZnAsICJFWFRFUk5BTF9VUF9MSU5LIiwgb3B0aW9ucy51cF9saW5rKQorICAgICAgICBsMmhvcHRpb24oZnAsICJFWFRFUk5BTF9VUF9USVRMRSIsIG9wdGlvbnMudXBfdGl0bGUpCisgICAgICAgIGwyaG9wdGlvbihmcCwgIkdMT0JBTF9NT0RVTEVfSU5ERVgiLCBvcHRpb25zLmdsb2JhbF9tb2R1bGVfaW5kZXgpCisgICAgICAgIGZwLndyaXRlKCIxO1xuIikKKyAgICAgICAgZnAuY2xvc2UoKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHNlbGYuX19oYXZlX3RlbXBzID0gMAorICAgICAgICBmb3IgcGF0dGVybiBpbiAoIiVzLmF1eCIsICIlcy5sb2ciLCAiJXMub3V0IiwgIiVzLnRvYyIsICIlcy5ia20iLAorICAgICAgICAgICAgICAgICAgICAgICAgIiVzLmlkeCIsICIlcy5pbGciLCAiJXMuaW5kIiwgIiVzLnBsYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMuYmJsIiwgIiVzLmJsZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAibW9kJXMuaWR4IiwgIm1vZCVzLmluZCIsICJtb2Qlcy5pbGciLAorICAgICAgICAgICAgICAgICAgICAgICAgKToKKyAgICAgICAgICAgIHNhZmVfdW5saW5rKHBhdHRlcm4gJSBzZWxmLmRvYykKKyAgICAgICAgbWFwKHNhZmVfdW5saW5rLCBnbG9iLmdsb2Ioc2VsZi5kb2MgKyAiKi5zeW4iKSkKKyAgICAgICAgZm9yIHNwZWMgaW4gKCJJTUcqIiwgIioucGwiLCAiV0FSTklOR1MiLCAiaW5kZXguZGF0IiwgIm1vZGluZGV4LmRhdCIpOgorICAgICAgICAgICAgcGF0dGVybiA9IG9zLnBhdGguam9pbihzZWxmLmRvYywgc3BlYykKKyAgICAgICAgICAgIG1hcChzYWZlX3VubGluaywgZ2xvYi5nbG9iKHBhdHRlcm4pKQorICAgICAgICBpZiAiZHZpIiBub3QgaW4gc2VsZi5vcHRpb25zLmZvcm1hdHM6CisgICAgICAgICAgICBzYWZlX3VubGluayhzZWxmLmRvYyArICIuZHZpIikKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzZWxmLmRvYyArICItdGVtcC1odG1sIik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZG9jICsgIi10ZW1wLWh0bWwiLCBpZ25vcmVfZXJyb3JzPTEpCisgICAgICAgIGlmIG5vdCBzZWxmLm9wdGlvbnMubG9nZ2luZzoKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLmxvZ19maWxlbmFtZSkKKyAgICAgICAgaWYgbm90IHNlbGYub3B0aW9ucy5kZWJ1Z2dpbmc6CisgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5sMmhfYXV4X2luaXRfZmlsZSkKKworICAgIGRlZiBydW4oc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHNlbGYubWVzc2FnZShjb21tYW5kKQorICAgICAgICByYyA9IG9zLnN5c3RlbSgiKCVzKSA8L2Rldi9udWxsID4+JXMgMj4mMSIKKyAgICAgICAgICAgICAgICAgICAgICAgJSAoY29tbWFuZCwgc2VsZi5sb2dfZmlsZW5hbWUpKQorICAgICAgICBpZiByYzoKKyAgICAgICAgICAgIHNlbGYud2FybmluZygKKyAgICAgICAgICAgICAgICAiU2Vzc2lvbiB0cmFuc2NyaXB0IGFuZCBlcnJvciBtZXNzYWdlcyBhcmUgaW4gJXMuIgorICAgICAgICAgICAgICAgICUgc2VsZi5sb2dfZmlsZW5hbWUpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJUaGUgcmVsZXZhbnQgbGluZXMgZnJvbSB0aGUgdHJhbnNjcmlwdCBhcmU6XG4iKQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLSIgKiA3MiArICJcbiIpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlbGluZXMoZ2V0X3J1bl90cmFuc2NyaXB0KHNlbGYubG9nX2ZpbGVuYW1lKSkKKyAgICAgICAgICAgIHN5cy5leGl0KHJjKQorCisgICAgZGVmIG1lc3NhZ2Uoc2VsZiwgbXNnKToKKyAgICAgICAgbXNnID0gIisrKyAiICsgbXNnCisgICAgICAgIGlmIG5vdCBzZWxmLm9wdGlvbnMucXVpZXQ6CisgICAgICAgICAgICBwcmludCBtc2cKKyAgICAgICAgc2VsZi5sb2cobXNnICsgIlxuIikKKworICAgIGRlZiB3YXJuaW5nKHNlbGYsIG1zZyk6CisgICAgICAgIG1zZyA9ICIqKiogJXNcbiIgJSBtc2cKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZShtc2cpCisgICAgICAgIHNlbGYubG9nKG1zZykKKworICAgIGRlZiBsb2coc2VsZiwgbXNnKToKKyAgICAgICAgZnAgPSBvcGVuKHNlbGYubG9nX2ZpbGVuYW1lLCAiYSIpCisgICAgICAgIGZwLndyaXRlKG1zZykKKyAgICAgICAgZnAuY2xvc2UoKQorCisKK2RlZiBnZXRfcnVuX3RyYW5zY3JpcHQoZmlsZW5hbWUpOgorICAgICIiIlJldHVybiBsaW5lcyBmcm9tIHRoZSB0cmFuc2NyaXB0IGZpbGUgZm9yIHRoZSBtb3N0IHJlY2VudCBydW4oKSBjYWxsLiIiIgorICAgIGZwID0gb3BlbihmaWxlbmFtZSkKKyAgICBsaW5lcyA9IGZwLnJlYWRsaW5lcygpCisgICAgZnAuY2xvc2UoKQorICAgIGxpbmVzLnJldmVyc2UoKQorICAgIEwgPSBbXQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBMLmFwcGVuZChsaW5lKQorICAgICAgICBpZiBsaW5lWzo0XSA9PSAiKysrICI6CisgICAgICAgICAgICBicmVhaworICAgIEwucmV2ZXJzZSgpCisgICAgcmV0dXJuIEwKKworCitkZWYgc2FmZV91bmxpbmsocGF0aCk6CisgICAgIiIiVW5saW5rIGEgZmlsZSB3aXRob3V0IHJhaXNpbmcgYW4gZXJyb3IgaWYgaXQgZG9lc24ndCBleGlzdC4iIiIKKyAgICB0cnk6CisgICAgICAgIG9zLnVubGluayhwYXRoKQorICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgcGFzcworCisKK2RlZiBzcGxpdF9wYXRobmFtZShwYXRoKToKKyAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIHBhdGgpKQorICAgIGRpcm5hbWUsIGJhc2VuYW1lID0gb3MucGF0aC5zcGxpdChwYXRoKQorICAgIGlmIGJhc2VuYW1lWy00Ol0gPT0gIi50ZXgiOgorICAgICAgICBiYXNlbmFtZSA9IGJhc2VuYW1lWzotNF0KKyAgICByZXR1cm4gZGlybmFtZSwgYmFzZW5hbWUKKworCitfZG9jdHlwZV9yeCA9IHJlLmNvbXBpbGUociJcXGRvY3VtZW50Y2xhc3MoPzpcW1teXV0qXF0pP3soW2EtekEtWl0qKX0iKQorZGVmIGdldF9kb2N0eXBlKHBhdGgpOgorICAgIGZwID0gb3BlbihwYXRoKQorICAgIGRvY3R5cGUgPSBOb25lCisgICAgd2hpbGUgMToKKyAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICBicmVhaworICAgICAgICBtID0gX2RvY3R5cGVfcngubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIGRvY3R5cGUgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICBicmVhaworICAgIGZwLmNsb3NlKCkKKyAgICByZXR1cm4gZG9jdHlwZQorCisKK2RlZiBtYWluKCk6CisgICAgb3B0aW9ucyA9IE9wdGlvbnMoKQorICAgIHRyeToKKyAgICAgICAgYXJncyA9IG9wdGlvbnMucGFyc2Uoc3lzLmFyZ3ZbMTpdKQorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICAgICAgZXJyb3Iob3B0aW9ucywgbXNnKQorICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAjIGF0dGVtcHQgdG8gbG9jYXRlIHNpbmdsZSAudGV4IGZpbGUgaW4gY3VycmVudCBkaXJlY3Rvcnk6CisgICAgICAgIGFyZ3MgPSBnbG9iLmdsb2IoIioudGV4IikKKyAgICAgICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICBlcnJvcihvcHRpb25zLCAiTm8gZmlsZSB0byBwcm9jZXNzLiIpCisgICAgICAgIGlmIGxlbihhcmdzKSA+IDE6CisgICAgICAgICAgICBlcnJvcihvcHRpb25zLCAiQ291bGQgbm90IGRlZHVjZSB3aGljaCBmaWxlcyBzaG91bGQgYmUgcHJvY2Vzc2VkLiIpCisgICAgIworICAgICMgcGFyYW1ldGVycyBhcmUgcHJvY2Vzc2VkLCBsZXQncyBnbyEKKyAgICAjCisgICAgZm9yIHBhdGggaW4gYXJnczoKKyAgICAgICAgSm9iKG9wdGlvbnMsIHBhdGgpLmJ1aWxkKCkKKworCitkZWYgbDJob3B0aW9uKGZwLCBvcHRpb24sIHZhbHVlKToKKyAgICBpZiB2YWx1ZToKKyAgICAgICAgZnAud3JpdGUoJyQlcyA9ICIlcyI7XG4nICUgKG9wdGlvbiwgc3RyaW5nX3RvX3Blcmwoc3RyKHZhbHVlKSkpKQorCisKK190b19wZXJsID0ge30KK2ZvciBjIGluIG1hcChjaHIsIHJhbmdlKDEsIDI1NikpOgorICAgIF90b19wZXJsW2NdID0gYworX3RvX3BlcmxbIkAiXSA9ICJcXEAiCitfdG9fcGVybFsiJCJdID0gIlxcJCIKK190b19wZXJsWyciJ10gPSAnXFwiJworCitkZWYgc3RyaW5nX3RvX3Blcmwocyk6CisgICAgcmV0dXJuIHN0cmluZy5qb2luKG1hcChfdG9fcGVybC5nZXQsIHMpLCAnJykKKworCitkZWYgY2hlY2tfZm9yX2JpYnRleChmaWxlbmFtZSk6CisgICAgZnAgPSBvcGVuKGZpbGVuYW1lKQorICAgIHBvcyA9IHN0cmluZy5maW5kKGZwLnJlYWQoKSwgciJcYmliZGF0YXsiKQorICAgIGZwLmNsb3NlKCkKKyAgICByZXR1cm4gcG9zID49IDAKKworZGVmIHVuaXFpZnlfbW9kdWxlX3RhYmxlKGZpbGVuYW1lKToKKyAgICBsaW5lcyA9IG9wZW4oZmlsZW5hbWUpLnJlYWRsaW5lcygpCisgICAgaWYgbGVuKGxpbmVzKSA+IDE6CisgICAgICAgIGlmIGxpbmVzWy0xXSA9PSBsaW5lc1stMl06CisgICAgICAgICAgICBkZWwgbGluZXNbLTFdCisgICAgb3BlbihmaWxlbmFtZSwgInciKS53cml0ZWxpbmVzKGxpbmVzKQorCisKK2RlZiBuZXdfaW5kZXgoZmlsZW5hbWUsIGxhYmVsPSJnZW5pbmRleCIpOgorICAgIGZwID0gb3BlbihmaWxlbmFtZSwgInciKQorICAgIGZwLndyaXRlKHIiIiJcCitcYmVnaW57dGhlaW5kZXh9CitcbGFiZWx7JXN9CitcZW5ke3RoZWluZGV4fQorIiIiICUgbGFiZWwpCisgICAgZnAuY2xvc2UoKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvbWtpbmZvIGIvZG9jL3Rvb2xzL21raW5mbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZGJhMWRiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL21raW5mbwpAQCAtMCwwICsxLDQ4IEBACisjISAvYmluL3NoCisjICAtKi0gS3NoIC0qLQorCisjICBTY3JpcHQgdG8gZHJpdmUgdGhlIEhUTUwtaW5mbyBjb252ZXJzaW9uIHByb2Nlc3MuCisjICBQYXNzIGluIGEgc2luZ2xlIHBhcmFtZXRlcjogdGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBIVE1MIGZpbGUKKyMgIGdlbmVyYXRlZCBieSBMYVRlWDJIVE1MLgorIworIyAgV3JpdHRlbiBieSBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgorCitQRVJMPSR7UEVSTDotcGVybH0KK0VNQUNTPSR7RU1BQ1M6LWVtYWNzfQorTUFLRUlORk89JHtNQUtFSU5GTzotbWFrZWluZm99CisKKworIyBOb3JtYWxpemUgZmlsZSBuYW1lIHNpbmNlIHNvbWV0aGluZyBjYWxsZWQgYnkgaHRtbDJ0ZXhpLnBsIHNlZW1zIHRvCisjIHNjcmV3IHVwIHdpdGggcmVsYXRpdmUgcGF0aCBuYW1lcy4KK0ZJTEVOQU1FPSIkMSIKK0RPQ0RJUj1gZGlybmFtZSAiJEZJTEVOQU1FImAKK0RPQ0ZJTEU9YGJhc2VuYW1lICIkRklMRU5BTUUiYAorRE9DTkFNRT1gYmFzZW5hbWUgIiRGSUxFTkFNRSIgLmh0bWxgCisKKyMgTm93IGJ1aWxkIHRoZSByZWFsIGRpcmVjdG9yeSBuYW1lcywgYW5kIGxvY2F0ZSBvdXIgc3VwcG9ydCBzdHVmZjoKK1dPUktESVI9YHB3ZGAKK2NkIGBkaXJuYW1lICQwYAorVE9PTFNESVI9YHB3ZGAKK2NkICRET0NESVIKK0RPQ0RJUj1gcHdkYAorY2QgJFdPUktESVIKKworCitydW4oKSB7CisgICAgIyBzaG93IHdoYXQgd2UncmUgZG9pbmcsIGxpa2UgbWFrZSBkb2VzOgorICAgIGVjaG8gIiQqIgorICAgICQqIHx8IGV4aXQgJD8KK30KKworCisjIGdlbmVyYXRlIHRoZSBUZXhpbmZvIGZpbGU6CisKK3J1biAkUEVSTCAtSSRUT09MU0RJUiAkVE9PTFNESVIvaHRtbDJ0ZXhpLnBsICRET0NESVIvJERPQ0ZJTEUKK3J1biAkRU1BQ1MgLWJhdGNoIC1sICRUT09MU0RJUi9maXhpbmZvLmVsICRET0NOQU1FLnRleGkKK3JtIC1mICRET0NOQU1FLnRleGl+CisKKworIyBnZW5lcmF0ZSB0aGUgLmluZm8gZmlsZXM6CisKK3J1biAkTUFLRUlORk8gLS1mb290bm90ZS1zdHlsZSBlbmQgLS1maWxsLWNvbHVtbiA3MiBcCisJICAgICAgLS1wYXJhZ3JhcGgtaW5kZW50IDAgJERPQ05BTUUudGV4aQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL21rbW9kaW5kZXggYi9kb2MvdG9vbHMvbWttb2RpbmRleApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZjJkYTBlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL21rbW9kaW5kZXgKQEAgLTAsMCArMSwxMzYgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyMgIC0qLSBQeXRob24gLSotCisKKyIiInVzYWdlOiAlKHByb2dyYW0pcyBbb3B0aW9uc10gZmlsZS4uLgorCitTdXBwb3J0ZWQgb3B0aW9uczoKKworICAgIC0tYWRkcmVzcyBhZGRyCisgICAgLWEgYWRkciAgICAgICAgIFNldCB0aGUgYWRkcmVzcyB0ZXh0IHRvIGluY2x1ZGUgYXQgdGhlIGVuZCBvZiB0aGUgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgICAgIEhUTUw7IHRoaXMgc2hvdWxkIGJlIHVzZWQgZm9yIGNvbnRhY3QgaW5mb3JtYXRpb24uCisgICAgLS1jb2x1bW5zIGNvbHMKKyAgICAtYyBjb2xzICAgICAgICAgU2V0IHRoZSBudW1iZXIgb2YgY29sdW1ucyBlYWNoIGluZGV4IHNlY3Rpb24gc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZCBpbi4gIFRoZSBkZWZhdWx0IGlzIDEuCisgICAgLS1oZWxwCisgICAgLWggICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UuCisgICAgLS1sZXR0ZXJzCisgICAgLWwgICAgICAgICAgICAgIFNwbGl0IHRoZSBvdXRwdXQgaW50byBzZWN0aW9ucyBieSBsZXR0ZXIuCisgICAgLS1vdXRwdXQgZmlsZQorICAgIC1vIGZpbGUgICAgICAgICBXcml0ZSBvdXRwdXQgdG8gJ2ZpbGUnIGluc3RlYWQgb2Ygc3RhbmRhcmQgb3V0LgorICAgIC0taWNvbnNlcnZlciBpcyBVc2UgJ2lzJyBhcyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgaWNvbnMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uIGJhci4gIFRoZSBkZWZhdWx0IGlzICdpY29ucycuCisgICAgLS10aXRsZSBzdHIgICAgIFNldCB0aGUgcGFnZSB0aXRsZSB0byAnc3RyJy4gIFRoZSBkZWZhdWx0IGlzICdHbG9iYWwKKyAgICAgICAgICAgICAgICAgICAgTW9kdWxlIEluZGV4Jy4KKyAgICAtLXVwbGluayB1cmwgICAgU2V0IHRoZSB1cHdhcmQgbGluayBVUkwuICBUaGUgZGVmYXVsdCBpcyAnLi8nLgorICAgIC0tdXB0aXRsZSBzdHIgICBTZXQgdGhlIHVwd2FyZCBsaW5rIHRpdGxlLiAgVGhlIGRlZmF1bHQgaXMgJ1B5dGhvbgorICAgICAgICAgICAgICAgICAgICBEb2N1bWVudGF0aW9uIEluZGV4Jy4KKyIiIgoraW1wb3J0IGJ1aWxkaW5kZXgKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHN5cworCisKK2NsYXNzIEluZGV4T3B0aW9ucyhzdXBwb3J0Lk9wdGlvbnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwcG9ydC5PcHRpb25zLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuYWRkX2FyZ3MoImwiLCBbImxldHRlcnMiXSkKKyAgICAgICAgc2VsZi5sZXR0ZXJzID0gMAorCisgICAgZGVmIGhhbmRsZV9vcHRpb24oc2VsZiwgb3B0LCB2YWwpOgorICAgICAgICBpZiBvcHQgaW4gKCItbCIsICItLWxldHRlcnMiKToKKyAgICAgICAgICAgIHNlbGYubGV0dGVycyA9IDEKKworICAgIGRlZiB1c2FnZShzZWxmKToKKyAgICAgICAgcHJvZ3JhbSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCisgICAgICAgIHByaW50IF9fZG9jX18gJSB7InByb2dyYW0iOiBwcm9ncmFtfQorCisKK2NsYXNzIE5vZGUoYnVpbGRpbmRleC5Ob2RlKToKKyAgICBhbm5vdGF0aW9uID0gIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5rLCBzdHIsIHNlcW5vKToKKyAgICAgICAgcGFydHMgPSBzdHJpbmcuc3BsaXQoc3RyLCBOb25lLCAxKQorICAgICAgICBpZiBwYXJ0c1swXVstNTpdID09ICI8L3R0PiI6CisgICAgICAgICAgICBzZWxmLm1vZG5hbWUgPSBwYXJ0c1swXVs6LTVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1vZG5hbWUgPSBwYXJ0c1swXQorICAgICAgICBpZiBsZW4ocGFydHMpID09IDI6CisgICAgICAgICAgICBzZWxmLmFubm90YXRpb24gPSBwYXJ0c1sxXQorICAgICAgICBidWlsZGluZGV4Lk5vZGUuX19pbml0X18oc2VsZiwgbGluaywgc2VsZi5tb2RuYW1lLCBzZXFubykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzx0dCBjbGFzcz0ibW9kdWxlIj4lczwvdHQ+ICVzJyBcCisgICAgICAgICAgICAgICAlIChzZWxmLm1vZG5hbWUsIHNlbGYuYW5ub3RhdGlvbikKKworX3J4ID0gcmUuY29tcGlsZSgKKyAgICAiPGR0PjxhIGhyZWY9Jyhtb2R1bGUtLipcLmh0bWwpI2wyaC1cZCsnPjx0dCBjbGFzcz0nbW9kdWxlJz4iCisgICAgIihbYS16QS1aX11bYS16QS1aMC05Xy5dKjwvdHQ+KFxzKjxlbT4iCisgICAgIlwoPHNwYW4gY2xhc3M9J3BsYXRmb3JtJz4uKjwvc3Bhbj5cKTwvZW0+KT8pPC9hPiIpCisKK2RlZiBtYWluKCk6CisgICAgb3B0aW9ucyA9IEluZGV4T3B0aW9ucygpCisgICAgb3B0aW9ucy52YXJpYWJsZXNbInRpdGxlIl0gPSAiR2xvYmFsIE1vZHVsZSBJbmRleCIKKyAgICBvcHRpb25zLnBhcnNlKHN5cy5hcmd2WzE6XSkKKyAgICBhcmdzID0gb3B0aW9ucy5hcmdzCisgICAgaWYgbm90IGFyZ3M6CisgICAgICAgIGFyZ3MgPSBbIi0iXQorICAgICMKKyAgICAjIENvbGxlY3QgdGhlIGlucHV0IGRhdGE6CisgICAgIworICAgIG5vZGVzID0gW10KKyAgICBzZXFubyA9IDAKKyAgICBoYXNfcGxhdF9mbGFnID0gMAorICAgIGZvciBpZm4gaW4gYXJnczoKKyAgICAgICAgaWYgaWZuID09ICItIjoKKyAgICAgICAgICAgIGlmcCA9IHN5cy5zdGRpbgorICAgICAgICAgICAgZGlybmFtZSA9ICcnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZnAgPSBvcGVuKGlmbikKKyAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoaWZuKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgbGluZSA9IGlmcC5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbSA9IF9yeC5tYXRjaChsaW5lKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAjIFRoaXMgbGluZSBzcGVjaWZpZXMgYSBtb2R1bGUhCisgICAgICAgICAgICAgICAgYmFzZW5hbWUsIG1vZG5hbWUgPSBtLmdyb3VwKDEsIDIpCisgICAgICAgICAgICAgICAgaGFzX3BsYXRfZmxhZyA9IGhhc19wbGF0X2ZsYWcgb3IgbS5ncm91cCgzKQorICAgICAgICAgICAgICAgIGxpbmtmaWxlID0gb3MucGF0aC5qb2luKGRpcm5hbWUsIGJhc2VuYW1lKQorICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChOb2RlKCc8YSBocmVmPSIlcyI+JyAlIGxpbmtmaWxlLCBtb2RuYW1lLCBzZXFubykpCisgICAgICAgICAgICAgICAgc2Vxbm8gPSBzZXFubyArIDEKKyAgICAgICAgaWZwLmNsb3NlKCkKKyAgICAjCisgICAgIyBHZW5lcmF0ZSBhbGwgb3V0cHV0OgorICAgICMKKyAgICBudW1fbm9kZXMgPSBsZW4obm9kZXMpCisgICAgIyBIZXJlJ3MgdGhlIEhUTUwgZ2VuZXJhdGlvbjoKKyAgICBwYXJ0cyA9IFtvcHRpb25zLmdldF9oZWFkZXIoKSwKKyAgICAgICAgICAgICBidWlsZGluZGV4LnByb2Nlc3Nfbm9kZXMobm9kZXMsIG9wdGlvbnMuY29sdW1ucywgb3B0aW9ucy5sZXR0ZXJzKSwKKyAgICAgICAgICAgICBvcHRpb25zLmdldF9mb290ZXIoKSwKKyAgICAgICAgICAgICBdCisgICAgaWYgaGFzX3BsYXRfZmxhZzoKKyAgICAgICAgcGFydHMuaW5zZXJ0KDEsIFBMQVRfRElTQ1VTUykKKyAgICBodG1sID0gc3RyaW5nLmpvaW4ocGFydHMsICcnKQorICAgIHByb2dyYW0gPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorICAgIGZwID0gb3B0aW9ucy5nZXRfb3V0cHV0X2ZpbGUoKQorICAgIGZwLndyaXRlKHN0cmluZy5yc3RyaXAoaHRtbCkgKyAiXG4iKQorICAgIGlmIG9wdGlvbnMub3V0cHV0ZmlsZSA9PSAiLSI6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzOiAlZCBpbmRleCBub2Rlc1xuIiAlIChwcm9ncmFtLCBudW1fbm9kZXMpKQorICAgIGVsc2U6CisgICAgICAgIHByaW50CisgICAgICAgIHByaW50ICIlczogJWQgaW5kZXggbm9kZXMiICUgKHByb2dyYW0sIG51bV9ub2RlcykKKworCitQTEFUX0RJU0NVU1MgPSAiIiIKKzxwPiBTb21lIG1vZHVsZSBuYW1lcyBhcmUgZm9sbG93ZWQgYnkgYW4gYW5ub3RhdGlvbiBpbmRpY2F0aW5nIHdoYXQKK3BsYXRmb3JtIHRoZXkgYXJlIGF2YWlsYWJsZSBvbi48L3A+CisKKyIiIgorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvbWtzb3VyY2Vwa2cgYi9kb2MvdG9vbHMvbWtzb3VyY2Vwa2cKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzNlYTg2MwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9ta3NvdXJjZXBrZwpAQCAtMCwwICsxLDE2MyBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyAgLSotIFB5dGhvbiAtKi0KKworIiIiJShwcm9ncmFtKXMgLSBzY3JpcHQgdG8gY3JlYXRlIHRoZSBsYXRleCBzb3VyY2UgZGlzdHJpYnV0aW9uCisKK3VzYWdlOgorICAgICAlKHByb2dyYW0pcyBbLXR8LS10b29sc10gcmVsZWFzZSBbdGFnXQorCit3aXRoIC10fC0tdG9vbHM6ICBkb2Vzbid0IGluY2x1ZGUgdGhlIGRvY3VtZW50cywgb25seSB0aGUgZnJhbWV3b3JrCisKK3dpdGhvdXQgW3RhZ106ICBnZW5lcmF0ZSBmcm9tIHRoZSBjdXJyZW50IHZlcnNpb24gdGhhdCdzIGNoZWNrZWQgaW4KKyAgICAgCSAgICgqTk9UKiB3aGF0J3MgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5ISkKKword2l0aCBbdGFnXTogIGdlbmVyYXRlIGZyb20gdGhlIG5hbWVkIHRhZworIiIiCisjKiBzaG91bGQgYmUgbW9kaWZpZWQgdG8gZ2V0IHRoZSBQeXRob24gdmVyc2lvbiBudW1iZXIgYXV0b21hdGljYWxseQorIyAgZnJvbSB0aGUgTWFrZWZpbGUgb3Igc29tZXBsYWNlLgorCitpbXBvcnQgZ2V0b3B0CitpbXBvcnQgZ2xvYgoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQorCitpbXBvcnQgY3ZzaW5mbworCisKK3F1aWV0ID0gMAorcnggPSByZS5jb21waWxlKHIiOmV4dDooPzpbYS16QS1aMC05XSspQGN2c1wuKFthLXpBLVowLTldKykuc291cmNlZm9yZ2UubmV0OiIKKyAgICAgICAgICAgICAgICByIi9jdnNyb290L1wxIikKKworCitkZWYgbWFpbigpOgorICAgICBnbG9iYWwgcXVpZXQKKyAgICAgdHJ5OgorICAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgImFiZ3R6cSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJhbGwiLCAiYnppcDIiLCAiZ3ppcCIsICJ0b29scyIsICJ6aXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicXVpZXQiXSkKKyAgICAgZXhjZXB0IGdldG9wdC5lcnJvciwgZToKKyAgICAgICAgICB1c2FnZSh3YXJuaW5nPXN0cihlKSkKKyAgICAgICAgICBzeXMuZXhpdCgyKQorICAgICBpZiBsZW4oYXJncykgbm90IGluICgxLCAyKToKKyAgICAgICAgICB1c2FnZSh3YXJuaW5nPSJ3cm9uZyBudW1iZXIgb2YgcGFyYW1ldGVycyIpCisgICAgICAgICAgc3lzLmV4aXQoMikKKyAgICAgdG9vbHMgPSAwCisgICAgIGZvcm1hdHMgPSB7fQorICAgICBmb3Igb3B0LCBhcmcgaW4gb3B0czoKKyAgICAgICAgICBpZiBvcHQgaW4gKCItdCIsICItLXRvb2xzIik6CisgICAgICAgICAgICAgICB0b29scyA9IDEKKyAgICAgICAgICBlbGlmIG9wdCBpbiAoIi1xIiwgIi0tcXVpZXQiKToKKyAgICAgICAgICAgICAgIHF1aWV0ID0gcXVpZXQgKyAxCisgICAgICAgICAgZWxpZiBvcHQgaW4gKCItYiIsICItLWJ6aXAyIik6CisgICAgICAgICAgICAgICBmb3JtYXRzWyJiemlwMiJdID0gMQorICAgICAgICAgIGVsaWYgb3B0IGluICgiLWciLCAiLS1nemlwIik6CisgICAgICAgICAgICAgICBmb3JtYXRzWyJnemlwIl0gPSAxCisgICAgICAgICAgZWxpZiBvcHQgaW4gKCIteiIsICItLXppcCIpOgorICAgICAgICAgICAgICAgZm9ybWF0c1siemlwIl0gPSAxCisgICAgICAgICAgZWxpZiBvcHQgaW4gKCItYSIsICItLWFsbCIpOgorICAgICAgICAgICAgICAgZm9ybWF0c1siYnppcDIiXSA9IDEKKyAgICAgICAgICAgICAgIGZvcm1hdHNbImd6aXAiXSA9IDEKKyAgICAgICAgICAgICAgIGZvcm1hdHNbInppcCJdID0gMQorICAgICBpZiBmb3JtYXRzOgorICAgICAgICAgICMgbWFrZSBvcmRlciBodW1hbi1wcmVkaWN0YWJsZQorICAgICAgICAgIGZvcm1hdHMgPSBmb3JtYXRzLmtleXMoKQorICAgICAgICAgIGZvcm1hdHMuc29ydCgpCisgICAgIGVsc2U6CisgICAgICAgICAgZm9ybWF0cyA9IFsiZ3ppcCJdCisgICAgIHJlbGVhc2UgPSBhcmdzWzBdCisgICAgIGN2c3RhZyA9IE5vbmUKKyAgICAgaWYgbGVuKGFyZ3MpID4gMToKKyAgICAgICAgICBjdnN0YWcgPSBhcmdzWzFdCisgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta3RlbXAoKQorICAgICBvcy5ta2Rpcih0ZW1wZGlyKQorICAgICBwa2dkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgIlB5dGhvbi0iICsgcmVsZWFzZSkKKyAgICAgb3MubWtkaXIocGtnZGlyKQorICAgICBwd2QgPSBvcy5nZXRjd2QoKQorICAgICBteWRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pKQorICAgICBpbmZvID0gY3ZzaW5mby5SZXBvc2l0b3J5SW5mbyhteWRpcikKKyAgICAgY3Zzcm9vdCA9IGluZm8uZ2V0X2N2c3Jvb3QoKQorICAgICBtID0gcngubWF0Y2goY3Zzcm9vdCkKKyAgICAgaWYgbToKKyAgICAgICAgICAjIElmIHRoaXMgaXMgYW4gYXV0aGVudGljYXRlZCBTb3VyY2VGb3JnZSByZXBvc2l0b3J5LCBjb252ZXJ0IHRvCisgICAgICAgICAgIyBhbm9ueW1vdXMgdXNhZ2UgZm9yIHRoZSBleHBvcnQvY2hlY2tvdXQsIHNpbmNlIHRoYXQgYXZvaWRzIHRoZQorICAgICAgICAgICMgU1NIIG92ZXJoZWFkLgorICAgICAgICAgIGdyb3VwID0gbS5ncm91cCgxKQorICAgICAgICAgIGN2c3Jvb3QgPSAiOnBzZXJ2ZXI6YW5vbnltb3VzQGN2cy4lcy5zb3VyY2Vmb3JnZS5uZXQ6L2N2c3Jvb3QvJXMiIFwKKyAgICAgICAgICAgICAgICAgICAgJSAoZ3JvdXAsIGdyb3VwKQorICAgICAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBTb3VyY2VGb3JnZS9DVlMgZG9lc24ndCBzZWVtIHRvIGNhcmUgdGhhdCB3ZQorICAgICAgICAgICMgbWlnaHQgbm90IGhhdmUgZG9uZSBhICJjdnMgbG9naW4iIHRvIHRoZSBhbm9ueW1vdXMgc2VydmVyLgorICAgICAgICAgICMgVGhhdCBhdm9pZHMgYSBsb3Qgb2YgcGFpbmZ1bCBndW5rIGhlcmUuCisgICAgIG9zLmNoZGlyKHBrZ2RpcikKKyAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgIHByaW50ICItLS0gY3VycmVudCBkaXJlY3RvcnkgaXM6IiwgcGtnZGlyCisgICAgIGlmIGN2c3RhZzoKKyAgICAgICAgICBydW4oImN2cyAtZCVzIGV4cG9ydCAtciAlcyAtZCBEb2MgcHl0aG9uL2Rpc3Qvc3JjL0RvYyIKKyAgICAgICAgICAgICAgJSAoY3Zzcm9vdCwgY3ZzdGFnKSkKKyAgICAgZWxzZToKKyAgICAgICAgICBydW4oImN2cyAtUSAtZCVzIGNoZWNrb3V0IC1kIERvYyBweXRob24vZGlzdC9zcmMvRG9jIiAlIGN2c3Jvb3QpCisgICAgICAgICAgIyByZW1vdmUgQ1ZTIGRpcmVjdG9yaWVzCisgICAgICAgICAgZm9yIHAgaW4gKCcqL0NWUycsICcqLyovQ1ZTJywgJyovKi8qL0NWUycpOgorICAgICAgICAgICAgICAgbWFwKHNodXRpbC5ybXRyZWUsIGdsb2IuZ2xvYihwKSkKKyAgICAgICAgICBmb3IgZiBpbiAoJy5jdnNpZ25vcmUnLCAnKi8uY3ZzaWdub3JlJyk6CisgICAgICAgICAgICAgICBtYXAob3MudW5saW5rLCBnbG9iLmdsb2IoZikpCisgICAgIExJQ0VOU0UgPSBvcy5wYXRoLm5vcm1wYXRoKAorICAgICAgICAgIG9zLnBhdGguam9pbihteWRpciwgb3MucGFyZGlyLCBvcy5wYXJkaXIsICJMSUNFTlNFIikpCisgICAgIHNodXRpbC5jb3B5ZmlsZShMSUNFTlNFLCAiRG9jL0xJQ0VOU0UiKQorICAgICBpZiB0b29sczoKKyAgICAgICAgICBhcmNoaXZlID0gImRvY3Rvb2xzLSIgKyByZWxlYXNlCisgICAgICAgICAgIyB3ZSBkb24ndCB3YW50IHRoZSBhY3R1YWwgZG9jdW1lbnRzIGluIHRoaXMgY2FzZToKKyAgICAgICAgICBmb3IgZCBpbiAoImFwaSIsICJkaXN0IiwgImRvYyIsICJleHQiLCAiaW5zdCIsCisgICAgICAgICAgICAgICAgICAgICJsaWIiLCAibWFjIiwgInJlZiIsICJ0dXQiKToKKyAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKG9zLnBhdGguam9pbihwa2dkaXIsICJEb2MiKSwgZCkpCisgICAgIGVsc2U6CisgICAgICAgICAgYXJjaGl2ZSA9ICJsYXRleC0iICsgcmVsZWFzZQorCisgICAgICMgWFhYIHNob3VsZCBhbHNvIHJlbW92ZSB0aGUgLmN2c2lnbm9yZSBmaWxlcyBhdCB0aGlzIHBvaW50CisKKyAgICAgb3MuY2hkaXIodGVtcGRpcikKKyAgICAgYXJjaGl2ZSA9IG9zLnBhdGguam9pbihwd2QsIGFyY2hpdmUpCisgICAgIGZvciBmb3JtYXQgaW4gZm9ybWF0czoKKyAgICAgICAgICBpZiBmb3JtYXQgPT0gImJ6aXAyIjoKKyAgICAgICAgICAgICAgIHJ1bigidGFyIGNmIC0gUHl0aG9uLSVzIHwgYnppcDIgLTkgPiVzLnRhci5iejIiCisgICAgICAgICAgICAgICAgICAgJSAocmVsZWFzZSwgYXJjaGl2ZSkpCisgICAgICAgICAgZWxpZiBmb3JtYXQgPT0gImd6aXAiOgorICAgICAgICAgICAgICAgcnVuKCJ0YXIgY2YgLSBQeXRob24tJXMgfCBnemlwIC05ID4lcy50Z3oiCisgICAgICAgICAgICAgICAgICAgJSAocmVsZWFzZSwgYXJjaGl2ZSkpCisgICAgICAgICAgZWxpZiBmb3JtYXQgPT0gInppcCI6CisgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhhcmNoaXZlICsgIi56aXAiKToKKyAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGFyY2hpdmUgKyAiLnppcCIpCisgICAgICAgICAgICAgICBydW4oInppcCAtcSAtcjkgJXMuemlwIFB5dGhvbi0lcyIKKyAgICAgICAgICAgICAgICAgICAlIChhcmNoaXZlLCByZWxlYXNlKSkKKworICAgICAjIGNsZWFuIHVwIHRoZSB3b3JrIGFyZWE6CisgICAgIG9zLmNoZGlyKHB3ZCkKKyAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorCisKK2RlZiBydW4oY21kKToKKyAgICAgaWYgcXVpZXQgPCAyOgorICAgICAgICAgIHByaW50ICIrKysiLCBjbWQKKyAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgY21kID0gIiVzID4vZGV2L251bGwiICUgY21kCisgICAgIHJjID0gb3Muc3lzdGVtKGNtZCkKKyAgICAgaWYgcmM6CisgICAgICAgICAgc3lzLmV4aXQocmMpCisKKworZGVmIHVzYWdlKHdhcm5pbmc9Tm9uZSk6CisgICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIKKyAgICAgcHJvZ3JhbSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCisgICAgIHRyeToKKyAgICAgICAgICBpZiB3YXJuaW5nOgorICAgICAgICAgICAgICAgcHJpbnQgIiVzOiAlc1xuIiAlIChwcm9ncmFtLCB3YXJuaW5nKQorICAgICAgICAgIHByaW50IF9fZG9jX18gJSB7InByb2dyYW0iOiBwcm9ncmFtfQorICAgICBmaW5hbGx5OgorICAgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2RvYy90b29scy9ub2RlMmxhYmVsLnBsIGIvZG9jL3Rvb2xzL25vZGUybGFiZWwucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjNlNmJkOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9ub2RlMmxhYmVsLnBsCkBAIC0wLDAgKzEsNTUgQEAKKyMhIC91c3IvYmluL2VudiBwZXJsCisKK3VzZSBFbmdsaXNoOworJElOUExBQ0VfRURJVCA9ICcnOworCisjIHJlYWQgdGhlIGxhYmVscywgdGhlbiByZXZlcnNlIHRoZSBtYXBwaW5ncworcmVxdWlyZSAibGFiZWxzLnBsIjsKKworJW5vZGVzID0gKCk7CitteSAka2V5OworIyBzb3J0IHNvIHRoYXQgd2UgZ2V0IGEgY29uc2lzdGVudCBhc3NpZ25tZW50IGZvciBub2RlcyB3aXRoIG11bHRpcGxlIGxhYmVscyAKK2ZvcmVhY2ggJGxhYmVsIChzb3J0IGtleXMgJWV4dGVybmFsX2xhYmVscykgeworICAka2V5ID0gJGV4dGVybmFsX2xhYmVsc3skbGFiZWx9OworICAka2V5ID1+IHN8Xi98fDsKKyAgJG5vZGVzeyRrZXl9ID0gJGxhYmVsOworfQorCisjIFRoaXMgYWRkcyB0aGUgImludGVybmFsIiBsYWJlbHMgYWRkZWQgZm9yIGluZGV4aW5nLiAgVGhlc2UgbGFiZWxzIHdpbGwgbm90CisjIGJlIHVzZWQgZm9yIGZpbGUgbmFtZXMuCityZXF1aXJlICJpbnRlcm5hbHMucGwiOworZm9yZWFjaCAkbGFiZWwgKGtleXMgJWludGVybmFsX2xhYmVscykgeworICAka2V5ID0gJGludGVybmFsX2xhYmVsc3skbGFiZWx9OworICAka2V5ID1+IHN8Xi98fDsKKyAgaWYgKGRlZmluZWQoJG5vZGVzeyRrZXl9KSkgeworICAgICRub2Rlc3skbGFiZWx9ID0gJG5vZGVzeyRrZXl9OworICB9Cit9CisKKyMgY29sbGVjdCBsYWJlbHMgdGhhdCBoYXZlIGJlZW4gdXNlZAorJW5ld25hbWVzID0gKCk7CisKK3doaWxlICg8PikgeworICAjIGRvbid0IHdhbnQgdG8gZG8gb25lIHMvLy8gcGVyIGxpbmUgcGVyIG5vZGUKKyAgIyBzbyBsb29rIGZvciBsaW5lcyB3aXRoIGhyZWZzLCB0aGVuIGRvIHMvLy8gb24gbm9kZXMgcHJlc2VudAorICBpZiAoLyhIUkVGfGhyZWYpPVtcIlwnXShbXlwjXCJcJ10qKWh0bWxbXCNcIlwnXS8pIHsKKyAgICBAcGFydHMgPSBzcGxpdCgvKEhSRUZ8aHJlZilcPVtcIlwnXS8pOworICAgIHNoaWZ0IEBwYXJ0czsKKyAgICBmb3IgJG5vZGUgKEBwYXJ0cykgeworICAgICAgJG5vZGUgPX4gcy9bXCNcIlwnXS4qJC8vZzsKKyAgICAgIGNob3AoJG5vZGUpOworICAgICAgaWYgKGRlZmluZWQoJG5vZGVzeyRub2RlfSkpIHsKKwkkbGFiZWwgPSAkbm9kZXN7JG5vZGV9OworCWlmIChzLyhIUkVGfGhyZWYpPShbXCJcJ10pJG5vZGUoW1wjXCJcJ10pL2hyZWY9JDIkbGFiZWwuaHRtbCQzL2cpIHsKKwkgIHMvKEhSRUZ8aHJlZik9KFtcIlwnXSkkbGFiZWwuaHRtbC9ocmVmPSQyJGxhYmVsLmh0bWwvZzsKKwkgICRuZXduYW1lc3skbm9kZX0gPSAiJGxhYmVsLmh0bWwiOworCX0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcHJpbnQ7Cit9CisKK2ZvcmVhY2ggJG9sZG5hbWUgKGtleXMgJW5ld25hbWVzKSB7CisgIHJlbmFtZSgkb2xkbmFtZSwgJG5ld25hbWVzeyRvbGRuYW1lfSk7Cit9CmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvcGFwZXItYTQvcHlwYXBlci5zdHkgYi9kb2MvdG9vbHMvcGFwZXItYTQvcHlwYXBlci5zdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiMjJmOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9wYXBlci1hNC9weXBhcGVyLnN0eQpAQCAtMCwwICsxLDUgQEAKKyUKKyUgIENoYW5nZSB0aGlzIHRvIHNheSBhNHBhcGVyIGluc3RlYWQgb2YgbGV0dGVycGFwZXIgaWYgeW91IHdhbnQgQTQuCislCitcbmV3Y29tbWFuZHtccHlAcGFwZXJ9e2E0cGFwZXJ9CitcbmV3Y29tbWFuZHtccHlAcHRzaXplfXsxMHB0fQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3BlcmwvU3lub3BzaXNUYWJsZS5wbSBiL2RvYy90b29scy9wZXJsL1N5bm9wc2lzVGFibGUucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwM2RkMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9wZXJsL1N5bm9wc2lzVGFibGUucG0KQEAgLTAsMCArMSw4OSBAQAorcGFja2FnZSBTeW5vcHNpc1RhYmxlOworCitzdWIgbmV3eworICAgIHJldHVybiBibGVzcyB7bmFtZXM9PicnLCBpbmZvPT57fSwgZmlsZT0+Jyd9OworfQorCitzdWIgZGVjbGFyZXsKKyAgICBteSgkc2VsZiwkbmFtZSwka2V5LCR0eXBlKSA9IEBfOworICAgIGlmICgkc2VsZi0+e25hbWVzfSkgeworCSRzZWxmLT57bmFtZXN9IC49ICIsJG5hbWUiOworICAgIH0KKyAgICBlbHNlIHsKKwkkc2VsZi0+e25hbWVzfSAuPSAiJG5hbWUiOworICAgIH0KKyAgICAkc2VsZi0+e2luZm99eyRuYW1lfSA9ICIka2V5LCR0eXBlLCI7Cit9CisKKyMgVGhlICdmaWxlJyBhdHRyaWJ1dGUgaXMgdXNlZCB0byBzdG9yZSB0aGUgZmlsZW5hbWUgb2YgdGhlIG5vZGUgaW4gd2hpY2gKKyMgdGhlIHRhYmxlIHdpbGwgYmUgcHJlc2VudGVkOyB0aGlzIGFzc3VtZXMgdGhhdCBlYWNoIHRhYmxlIHdpbGwgYmUgcHJlc2VudGVkCisjIG9ubHkgb25jZSwgd2hpY2ggd29ya3MgZm9yIHRoZSBjdXJyZW50IHVzZSBvZiB0aGlzIG9iamVjdC4KKworc3ViIHNldF9maWxleworICAgIG15KCRzZWxmLCAkZmlsZW5hbWUpID0gQF87CisgICAgJHNlbGYtPntmaWxlfSA9ICIkZmlsZW5hbWUiOworfQorCitzdWIgZ2V0X2ZpbGV7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICByZXR1cm4gJHNlbGYtPntmaWxlfTsKK30KKworc3ViIHNldF9zeW5vcHNpc3sKKyAgICBteSgkc2VsZiwkbmFtZSwkc3lub3BzaXMpID0gQF87CisgICAgbXkoJGtleSwkdHlwZSwkdW51c2VkKSA9IHNwbGl0ICcsJywgJHNlbGYtPntpbmZvfXskbmFtZX0sIDM7CisgICAgJHNlbGYtPntpbmZvfXskbmFtZX0gPSAiJGtleSwkdHlwZSwkc3lub3BzaXMiOworfQorCitzdWIgZ2V0eworICAgIG15KCRzZWxmLCRuYW1lKSA9IEBfOworICAgIHJldHVybiBzcGxpdCAvLC8sICRzZWxmLT57aW5mb317JG5hbWV9LCAzOworfQorCitzdWIgc2hvd3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRuYW1lOworICAgIHByaW50ICJuYW1lczogIiwgJHNlbGYtPntuYW1lc30sICJcblxuIjsKKyAgICBmb3JlYWNoICRuYW1lIChzcGxpdCAvLC8sICRzZWxmLT57bmFtZXN9KSB7CisJbXkoJGtleSwkdHlwZSwkc3lub3BzaXMpID0gJHNlbGYtPmdldCgkbmFtZSk7CisJcHJpbnQgIiRuYW1lKCRrZXkpIGlzICR0eXBlOiAkc3lub3BzaXNcbiI7CisgICAgfQorfQorCitzdWIgdG9odG1seworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJGRhdGEgPSAiPHRhYmxlIGNsYXNzPSdzeW5vcHNpc3RhYmxlJz5cbiI7CisgICAgbXkgJG5hbWU7CisgICAgZm9yZWFjaCAkbmFtZSAoc3BsaXQgLywvLCAkc2VsZi0+e25hbWVzfSkgeworCW15KCRrZXksJHR5cGUsJHN5bm9wc2lzKSA9ICRzZWxmLT5nZXQoJG5hbWUpOworCW15ICRsaW5rID0gIjxhIGhyZWY9J21vZHVsZS0ka2V5Lmh0bWwnPiI7CisJJGRhdGEgLj0gKCcgIDx0cj4nCisJCSAgLiAiPHRkPjxiPjx0dCBjbGFzcz0nbW9kdWxlJz4kbGluayRuYW1lPC9hPjwvdHQ+PC9iPjwvdGQ+XG4iCisJCSAgLiAiICAgICAgPHRkIGNsYXNzPSdzeW5vcHNpcyc+JHN5bm9wc2lzPC90ZD48L3RyPlxuIik7CisgICAgfQorICAgICRkYXRhIC49ICI8L3RhYmxlPlxuIjsKKyAgICAkZGF0YTsKK30KKworCitwYWNrYWdlIHRlc3RTeW5vcHNpc1RhYmxlOworCitzdWIgdGVzdHsKKyAgICAjIHRoaXMgbGl0dGxlIHRlc3QgaXMgbW9zdGx5IHRvIGRlYnVnIHRoZSBzdHVmZiBhYm92ZSwgc2luY2UgdGhpcyBpcworICAgICMgbXkgZmlyc3QgUGVybCAib2JqZWN0Ii4KKyAgICBteSAkc3QgPSBTeW5vcHNpc1RhYmxlLT5uZXcoKTsKKyAgICAkc3QtPmRlY2xhcmUoInNhbXBsZSIsICJzYW1wbGUiLCAic3RhbmRhcmQiKTsKKyAgICAkc3QtPnNldF9zeW5vcHNpcygic2FtcGxlIiwgIlRoaXMgaXMgYSBsaXR0bGUgc3lub3BzaXMuLi4uIik7CisgICAgJHN0LT5kZWNsYXJlKCJjb3B5X3JlZyIsICJjb3B5cmVnIiwgInN0YW5kYXJkIik7CisgICAgJHN0LT5zZXRfc3lub3BzaXMoImNvcHlfcmVnIiwgInBpY2tsZSBzdXBwb3J0IHN0dWZmIik7CisgICAgJHN0LT5zaG93KCk7CisKKyAgICBwcmludCAiXG5cbiI7CisKKyAgICBteSAkc3QyID0gU3lub3BzaXNUYWJsZS0+bmV3KCk7CisgICAgJHN0Mi0+ZGVjbGFyZSgic3QybW9kdWxlIiwgInN0Mm1vZHVsZSIsICJidWlsdC1pbiIpOworICAgICRzdDItPnNldF9zeW5vcHNpcygic3QybW9kdWxlIiwgInNpbGx5IGxpdHRsZSBzeW5vcHNpcyIpOworICAgICRzdDItPnNob3coKTsKK30KKworMTsJIyBUaGlzIG11c3QgYmUgdGhlIGxhc3QgbGluZSAtLSBQZXJsIGlzIGJvZ3VzIQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3BlcmwvZGlzdHV0aWxzLnBlcmwgYi9kb2MvdG9vbHMvcGVybC9kaXN0dXRpbHMucGVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjUyNGJiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL3BlcmwvZGlzdHV0aWxzLnBlcmwKQEAgLTAsMCArMSwyMSBAQAorIyBMYVRlWDJIVE1MIHN1cHBvcnQgZm9yIGRpc3R1dGlscy5zdHkuCisKK3BhY2thZ2UgbWFpbjsKKworc3ViIGRvX2NtZF9jb21tYW5kIHsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPGNvZGU+JywgJzwvY29kZT4nKTsKK30KKworc3ViIGRvX2NtZF9vcHRpb24geworICAgIHJldHVybiB1c2Vfd3JhcHBlcnMoQF9bMF0sICc8Zm9udCBmYWNlPSJzYW5zLXNlcmlmIj4nLCAnPC9mb250PicpOworfQorCitzdWIgZG9fY21kX2ZpbGV2YXIgeworICAgIHJldHVybiB1c2Vfd3JhcHBlcnMoQF9bMF0sICc8Zm9udCBmYWNlPSJzYW5zLXNlcmlmIj48L2k+JywgJzwvaT48L2ZvbnQ+Jyk7Cit9CisKK3N1YiBkb19jbWRfWFhYIHsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPGI+KiogJywgJyAqKjwvYj4nKTsKK30KKworMTsKZGlmZiAtLWdpdCBhL2RvYy90b29scy9wZXJsL2hvd3RvLnBlcmwgYi9kb2MvdG9vbHMvcGVybC9ob3d0by5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzkxZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvcGVybC9ob3d0by5wZXJsCkBAIC0wLDAgKzEsMTIgQEAKKyMgLSotIHBlcmwgLSotCisjCisjIFRoaXMgaW1wbGVtZW50cyB0aGUgUHl0aG9uIGhvd3RvIGNsYXNzLiAgQWxsIGl0IHJlYWxseSBuZWVkcyB0byBkbyBpdAorIyBsb2FkIHRoZSAicHl0aG9uIiBzdHlsZS4KKworcGFja2FnZSBtYWluOworCitkb19yZXF1aXJlX3BhY2thZ2UoImFydGljbGUiKTsKK2RvX3JlcXVpcmVfcGFja2FnZSgiYWxsdHQiKTsKK2RvX3JlcXVpcmVfcGFja2FnZSgicHl0aG9uIik7CisKKzE7CQkJCSMgc2hlZXNoLi4uLgpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3BlcmwvbDJoaW5pdC5wZXJsIGIvZG9jL3Rvb2xzL3BlcmwvbDJoaW5pdC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzIwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvcGVybC9sMmhpbml0LnBlcmwKQEAgLTAsMCArMSw1OTQgQEAKKyMgTGFUZVgySFRNTCBzdXBwb3J0IGJhc2UgZm9yIHVzZSB3aXRoIFB5dGhvbiBkb2N1bWVudGF0aW9uLgorCitwYWNrYWdlIG1haW47CisKK3VzZSBMMmhvczsKKworJEhUTUxfVkVSU0lPTiA9IDQuMDsKKworJE1BWF9MSU5LX0RFUFRIID0gMjsKKyRBRERSRVNTID0gJyc7CisKKyROT19GT09UTk9ERSA9IDE7CiskTlVNQkVSRURfRk9PVE5PVEVTID0gMTsKKworIyBQeXRob24gZG9jdW1lbnRhdGlvbiB1c2VzIHNlY3Rpb24gbnVtYmVycyB0byBzdXBwb3J0IHJlZmVyZW5jZXMgdG8gbWF0Y2gKKyMgaW4gdGhlIHByaW50ZWQgYW5kIG9ubGluZSB2ZXJzaW9ucy4KKyMKKyRTSE9XX1NFQ1RJT05fTlVNQkVSUyA9IDE7CisKKyRJQ09OU0VSVkVSID0gJy4uL2ljb25zJzsKKyRJTUFHRV9UWVBFID0gJ2dpZic7CisKKyMgQ29udHJvbCB3aGVyZSB0aGUgbmF2aWdhdGlvbiBiYXJzIHNob3VsZCBzaG93IHVwOgorJFRPUF9OQVZJR0FUSU9OID0gMTsKKyRCT1RUT01fTkFWSUdBVElPTiA9IDE7CiskQVVUT19OQVZJR0FUSU9OID0gMDsKKworJEJPRFlURVhUID0gJyc7CiskQ0hJTERMSU5FID0gIlxuPHA+PGhyPlxuIjsKKyRWRVJCT1NJVFkgPSAwOworCisjIGRlZmF1bHQgIyBvZiBjb2x1bW5zIGZvciB0aGUgaW5kZXhlcworJElOREVYX0NPTFVNTlMgPSAyOworJE1PRFVMRV9JTkRFWF9DT0xVTU5TID0gNDsKKworCisjIEEgbGl0dGxlIHBhaW5mdWwsIGJ1dCBsZXRzIHVzIGNsZWFuIHVwIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IGEgbGl0dGxlLAorIyBhbmQgbm90IGJlIHRpZWQgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IChhcyBmYXIgYXMgSSBjYW4gdGVsbCkuICBUZXN0aW5nCisjIGFuIGV4aXN0aW5nIGRlZmluaXRpb24gb2YgJG15ZGlyIGlzIG5lZWRlZCBzaW5jZSBpdCBjYW5ub3QgYmUgY29tcHV0ZWQgd2hlbgorIyBydW4gdW5kZXIgbWtob3d0byB3aXRoIHJlY2VudCB2ZXJzaW9ucyBvZiBMYVRlWDJIVE1MLCBzaW5jZSB0aGlzIGZpbGUgaXMKKyMgbm90IHJlYWQgZGlyZWN0bHkgYnkgTGFUZVgySFRNTCBhbnkgbW9yZS4gIG1raG93dG8gaXMgcmVxdWlyZWQgdG8gcHJlcGVuZAorIyB0aGUgcmVxdWlyZWQgZGVmaW5pdGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBhY3R1YWwgaW5wdXQgZmlsZS4KKyMKK2lmICghZGVmaW5lZCAkbXlkaXIpIHsKKyAgICB1c2UgQ3dkOworICAgIHVzZSBGaWxlOjpCYXNlbmFtZTsKKyAgICAoJG15bmFtZSwgJG15ZGlyLCAkbXlleHQpID0gZmlsZXBhcnNlKF9fRklMRV9fLCAnXC4uKicpOworICAgIGNob3AgJG15ZGlyOwkJCSMgcmVtb3ZlIHRyYWlsaW5nICcvJworICAgICRteWRpciA9IGdldGN3ZCgpIC4gIiRkZCRteWRpciIKKyAgICAgICAgdW5sZXNzICRteWRpciA9fiBzfF4vfC98OworfQorJExBVEVYMkhUTUxTVFlMRVMgPSAiJG15ZGlyJGVudmtleSRMQVRFWDJIVE1MU1RZTEVTIjsKK3B1c2ggKEBJTkMsICRteWRpcik7CisKKygkbXlyb290bmFtZSwgJG15cm9vdGRpciwgJG15ZXh0KSA9IGZpbGVwYXJzZSgkbXlkaXIsICdcLi4qJyk7CitjaG9wICRteXJvb3RkaXI7CisKKworIyBIYWNraXNoIHdheSB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHBhcGVyLSovIGRpcmVjdG9yeSBpbnRvICRURVhJTlBVVFM7CisjIHBhc3MgaW4gdGhlIHBhcGVyIHNpemUgKGE0IG9yIGxldHRlcikgYXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBBUEVSCisjIHRvIGFkZCB0aGUgcmlnaHQgZGlyZWN0b3J5LiAgSWYgbm90IGdpdmVuLCB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMKKyMgYWRkZWQgaW5zdGVhZCBmb3IgdXNlIHdpdGggSE9XVE8gcHJvY2Vzc2luZy4KKyMKK2lmIChkZWZpbmVkICRFTlZ7J1BBUEVSJ30pIHsKKyAgICAkbXl0ZXhpbnB1dHMgPSAiJG15cm9vdGRpciR7ZGR9cGFwZXItJEVOVnsnUEFQRVInfSRlbnZrZXkiOworfQorZWxzZSB7CisgICAgJG15dGV4aW5wdXRzID0gZ2V0Y3dkKCkgLiAkZW52a2V5OworfQorJG15dGV4aW5wdXRzIC49ICIkbXlyb290ZGlyJHtkZH10ZXhpbnB1dHMiOworCisKKyMgQ2hhbmdlIHRoaXMgdmFyaWFibGUgdG8gY2hhbmdlIHRoZSB0ZXh0IGFkZGVkIGluICJBYm91dCB0aGlzIGRvY3VtZW50Li4uIjsKKyMgdGhpcyBzaG91bGQgYmUgYW4gYWJzb2x1dGUgcGF0aG5hbWUgdG8gZ2V0IGl0IHJpZ2h0LgorIworJEFCT1VUX0ZJTEUgPSAiJG15cm9vdGRpciR7ZGR9aHRtbCR7ZGR9c3RkYWJvdXQuZGF0IjsKKworCitzdWIgY3VzdG9tX2RyaXZlcl9ob29rIHsKKyAgICAjCisgICAgIyBUaGlzIGFkZHMgdGhlIGRpcmVjdG9yeSBvZiB0aGUgbWFpbiBpbnB1dCBmaWxlIHRvICRURVhJTlBVVFM7IGl0CisgICAgIyBzZWVtcyB0byBiZSBzdWZmaWNpZW50bHkgZ2VuZXJhbCB0aGF0IGl0IHNob3VsZCBiZSBmaW5lIGZvciBIT1dUTworICAgICMgcHJvY2Vzc2luZy4KKyAgICAjCisgICAgbXkgJGZpbGUgPSBAX1swXTsKKyAgICBteSgkam9ibmFtZSwgJGRpciwgJGV4dCkgPSBmaWxlcGFyc2UoJGZpbGUsICdcLi4qJyk7CisgICAgJGRpciA9IEwyaG9zLT5NYWtlX2RpcmVjdG9yeV9hYnNvbHV0ZSgkZGlyKTsKKyAgICAkZGlyID1+IHMvJGRkJC8vOworICAgICRURVhJTlBVVFMgPSAiJGRpciRlbnZrZXkkbXl0ZXhpbnB1dHMiOworICAgIHByaW50ICJcbkFkZGluZyAkZGlyIHRvIFwkVEVYSU5QVVRTXG4iOworfQorCisKKyRDVVNUT01fQlVUVE9OUyA9ICcnOworCitzdWIgbWFrZV9uYXZfc2VjdHJlZiB7CisgICAgbXkoJGxhYmVsLCR0aXRsZSkgPSBAXzsKKyAgICBpZiAoJHRpdGxlKSB7CisgICAgICAgIGlmICgkdGl0bGUgPX4gL1w8W2FBXSAvKSB7CisgICAgICAgICAgICAkdGl0bGUgPX4gcy9cPFthQV0gLzxhIGNsYXNzPSJzZWN0cmVmIiAvOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgJHRpdGxlID0gIjxzcGFuIGNsYXNzPVwic2VjdHJlZlwiPiR0aXRsZTwvc3Bhbj4iOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiPGIgY2xhc3M9XCJuYXZsYWJlbFwiPiRsYWJlbDo8L2I+ICR0aXRsZVxuIjsKKyAgICB9CisgICAgcmV0dXJuICcnOworfQorCitAbXlfaWNvbl90YWdzID0gKCk7CiskbXlfaWNvbl90YWdzeyduZXh0J30gPSAnTmV4dCBQYWdlJzsKKyRteV9pY29uX3RhZ3N7J25leHRfcGFnZSd9ID0gJ05leHQgUGFnZSc7CiskbXlfaWNvbl90YWdzeydwcmV2aW91cyd9ID0gJ1ByZXZpb3VzIFBhZ2UnOworJG15X2ljb25fdGFnc3sncHJldmlvdXNfcGFnZSd9ID0gJ1ByZXZpb3VzIFBhZ2UnOworJG15X2ljb25fdGFnc3sndXAnfSA9ICdVcCBPbmUgTGV2ZWwnOworJG15X2ljb25fdGFnc3snY29udGVudHMnfSA9ICdDb250ZW50cyc7CiskbXlfaWNvbl90YWdzeydpbmRleCd9ID0gJ0luZGV4JzsKKyRteV9pY29uX3RhZ3N7J21vZHVsZXMnfSA9ICdNb2R1bGUgSW5kZXgnOworCitAbXlfaWNvbl9uYW1lcyA9ICgpOworJG15X2ljb25fbmFtZXN7J3ByZXZpb3VzX3BhZ2UnfSA9ICdwcmV2aW91cyc7CiskbXlfaWNvbl9uYW1lc3snbmV4dF9wYWdlJ30gPSAnbmV4dCc7CisKK3N1YiBnZXRfbXlfaWNvbiB7CisgICAgbXkgJG5hbWUgPSBAX1swXTsKKyAgICBteSAkdGV4dCA9ICRteV9pY29uX3RhZ3N7JG5hbWV9OworICAgIGlmICgkbXlfaWNvbl9uYW1lc3skbmFtZX0pIHsKKyAgICAgICAgJG5hbWUgPSAkbXlfaWNvbl9uYW1lc3skbmFtZX07CisgICAgfQorICAgIGlmICgkdGV4dCBlcSAnJykgeworICAgICAgICAkbmFtZSA9ICdibGFuayc7CisgICAgfQorICAgIG15ICRpY29uc2VydmVyID0gKCRJQ09OU0VSVkVSIGVxICcuJykgPyAnJyA6ICIkSUNPTlNFUlZFUi8iOworICAgIHJldHVybiAiPGltZyBzcmM9XCIkaWNvbnNlcnZlciRuYW1lLiRJTUFHRV9UWVBFXCJcbiAgYm9yZGVyPVwiMFwiIgorICAgICAgICAgICAuICIgaGVpZ2h0PVwiMzJcIlxuICBhbHQ9XCIkdGV4dFwiIHdpZHRoPVwiMzJcIj4iOworfQorCitzdWIgdXNlX215X2ljb24geworICAgIG15ICRzID0gQF9bMF07CisgICAgaWYgKCRzID1+IC9cPHRleDJodG1sXyhbYS16X10rKV92aXNpYmxlX21hcmtcPi8pIHsKKyAgICAgICAgbXkgJHIgPSBnZXRfbXlfaWNvbigkMSk7CisgICAgICAgICRzID1+IHMvXDx0ZXgyaHRtbF9bYS16X10rX3Zpc2libGVfbWFya1w+LyRyLzsKKyAgICB9CisgICAgcmV0dXJuICRzOworfQorCitzdWIgbWFrZV9uYXZfcGFuZWwgeworICAgIG15ICRzOworICAgIG15ICRCTEFOS19JQ09OID0gZ2V0X215X2ljb24oJ2JsYW5rJyk7CisgICAgJE5FWFQgPSAkTkVYVF9USVRMRSA/IHVzZV9teV9pY29uKCIkTkVYVCIpIDogJEJMQU5LX0lDT047CisgICAgJFVQID0gJFVQX1RJVExFID8gdXNlX215X2ljb24oIiRVUCIpIDogJEJMQU5LX0lDT047CisgICAgJFBSRVZJT1VTID0gJFBSRVZJT1VTX1RJVExFID8gdXNlX215X2ljb24oIiRQUkVWSU9VUyIpIDogJEJMQU5LX0lDT047CisgICAgJENPTlRFTlRTID0gdXNlX215X2ljb24oIiRDT05URU5UUyIpOworICAgICRJTkRFWCA9ICRJTkRFWCA/IHVzZV9teV9pY29uKCIkSU5ERVgiKSA6ICRCTEFOS19JQ09OOworICAgIGlmICghJENVU1RPTV9CVVRUT05TKSB7CisgICAgICAgICRDVVNUT01fQlVUVE9OUyA9ICRCTEFOS19JQ09OOworICAgIH0KKyAgICAkcyA9ICgnPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPicKKyAgICAgICAgICAuICJcbjx0cj4iCisgICAgICAgICAgIyBsZWZ0LWhhbmQgc2lkZQorICAgICAgICAgIC4gIlxuPHRkPiRQUkVWSU9VUzwvdGQ+IgorICAgICAgICAgIC4gIlxuPHRkPiRVUDwvdGQ+IgorICAgICAgICAgIC4gIlxuPHRkPiRORVhUPC90ZD4iCisgICAgICAgICAgIyB0aXRsZSBib3gKKyAgICAgICAgICAuICJcbjx0ZCBhbGlnbj1cImNlbnRlclwiIHdpZHRoPVwiMTAwJVwiPiR0X3RpdGxlPC90ZD4iCisgICAgICAgICAgIyByaWdodC1oYW5kIHNpZGUKKyAgICAgICAgICAuICJcbjx0ZD4kQ09OVEVOVFM8L3RkPiIKKyAgICAgICAgICAuICJcbjx0ZD4kQ1VTVE9NX0JVVFRPTlM8L3RkPiIgIyBtb2R1bGUgaW5kZXgKKyAgICAgICAgICAuICJcbjx0ZD4kSU5ERVg8L3RkPiIKKyAgICAgICAgICAuICJcbjwvdHI+PC90YWJsZT5cbiIKKyAgICAgICAgICAjIHRleHR1YWwgbmF2aWdhdGlvbgorICAgICAgICAgIC4gbWFrZV9uYXZfc2VjdHJlZigiUHJldmlvdXMiLCAkUFJFVklPVVNfVElUTEUpCisgICAgICAgICAgLiBtYWtlX25hdl9zZWN0cmVmKCJVcCIsICRVUF9USVRMRSkKKyAgICAgICAgICAuIG1ha2VfbmF2X3NlY3RyZWYoIk5leHQiLCAkTkVYVF9USVRMRSkKKyAgICAgICAgICApOworICAgICMgcmVtb3ZlIHRoZXNlOyB0aGV5IGFyZSB1bm5lY2Vzc2FyeSBhbmQgY2F1c2UgZXJyb3JzIGZyb20gdmFsaWRhdGlvbgorICAgICRzID1+IHMvIE5BTUU9InRleDJodG1sXGQrIlxuICovIC9nOworICAgIHJldHVybiAkczsKK30KKworc3ViIGdldF92ZXJzaW9uX3RleHQgeworICAgIGlmICgkUEFDS0FHRV9WRVJTSU9OIG5lICcnICYmICR0X2RhdGUpIHsKKyAgICAgICAgcmV0dXJuICgiPHNwYW4gY2xhc3M9XCJyZWxlYXNlLWluZm9cIj4iCisgICAgICAgICAgICAgICAgLiAiUmVsZWFzZSAkUEFDS0FHRV9WRVJTSU9OLCIKKyAgICAgICAgICAgICAgICAuICIgZG9jdW1lbnRhdGlvbiB1cGRhdGVkIG9uICR0X2RhdGUuPC9zcGFuPiIpOworICAgIH0KKyAgICBpZiAoJFBBQ0tBR0VfVkVSU0lPTiBuZSAnJykgeworICAgICAgICByZXR1cm4gKCI8c3BhbiBjbGFzcz1cInJlbGVhc2UtaW5mb1wiPiIKKyAgICAgICAgICAgICAgICAuICJSZWxlYXNlICRQQUNLQUdFX1ZFUlNJT04uPC9zcGFuPiIpOworICAgIH0KKyAgICBpZiAoJHRfZGF0ZSkgeworICAgICAgICByZXR1cm4gKCI8c3BhbiBjbGFzcz1cInJlbGVhc2UtaW5mb1wiPkRvY3VtZW50YXRpb24gcmVsZWFzZWQgb24gIgorICAgICAgICAgICAgICAgIC4gIiR0X2RhdGUuPC9zcGFuPiIpOworICAgIH0KKyAgICByZXR1cm4gJyc7Cit9CisKKworc3ViIHRvcF9uYXZpZ2F0aW9uX3BhbmVsIHsKKyAgICByZXR1cm4gIlxuIgorICAgICAgICAgICAuIG1ha2VfbmF2X3BhbmVsKCkKKyAgICAgICAgICAgLiAiPGJyPjxocj5cbiI7Cit9CisKK3N1YiBib3RfbmF2aWdhdGlvbl9wYW5lbCB7CisgICAgcmV0dXJuICJcbjxwPjxocj5cbiIKKyAgICAgICAgICAgLiBtYWtlX25hdl9wYW5lbCgpCisgICAgICAgICAgIC4gIjxocj5cbiIKKyAgICAgICAgICAgLiBnZXRfdmVyc2lvbl90ZXh0KCkKKyAgICAgICAgICAgLiAiXG4iOworfQorCitzdWIgYWRkX2xpbmsgeworICAgICMgUmV0dXJucyBhIHBhaXIgKGljb25pYyBsaW5rLCB0ZXh0dWFsIGxpbmspCisgICAgbXkoJGljb24sICRjdXJyZW50X2ZpbGUsIEBsaW5rKSA9IEBfOworICAgIG15KCRkdW1teSwgJGZpbGUsICR0aXRsZSkgPSBzcGxpdCgkZGVsaW0sCisJCQkJICAgICAgJHNlY3Rpb25faW5mb3tqb2luKCcgJyxAbGluayl9KTsKKyAgICBpZiAoJGljb24gPX4gL1w8dGV4Mmh0bWxfKFtfYS16XSspX3Zpc2libGVfbWFya1w+LykgeworICAgICAgICBteSAkciA9IGdldF9teV9pY29uKCQxKTsKKyAgICAgICAgJGljb24gPX4gcy9cPHRleDJodG1sX1tfYS16XStfdmlzaWJsZV9tYXJrXD4vJHIvOworICAgIH0KKyAgICBpZiAoJHRpdGxlICYmICgkZmlsZSBuZSAkY3VycmVudF9maWxlKSkgeworICAgICAgICAkdGl0bGUgPSBwdXJpZnkoJHRpdGxlKTsKKwkkdGl0bGUgPSBnZXRfZmlyc3Rfd29yZHMoJHRpdGxlLCAkV09SRFNfSU5fTkFWSUdBVElPTl9QQU5FTF9USVRMRVMpOworCXJldHVybiAobWFrZV9ocmVmKCRmaWxlLCAkaWNvbiksIG1ha2VfaHJlZigkZmlsZSwgIiR0aXRsZSIpKQorCX0KKyAgICBlbHNpZiAoJGljb24gZXEgZ2V0X215X2ljb24oJ3VwJykgJiYgJEVYVEVSTkFMX1VQX0xJTkspIHsKKyAJcmV0dXJuIChtYWtlX2hyZWYoJEVYVEVSTkFMX1VQX0xJTkssICRpY29uKSwKKwkJbWFrZV9ocmVmKCRFWFRFUk5BTF9VUF9MSU5LLCAiJEVYVEVSTkFMX1VQX1RJVExFIikpCisJfQorICAgIGVsc2lmICgkaWNvbiBlcSBnZXRfbXlfaWNvbigncHJldmlvdXMnKQorCSAgICYmICRFWFRFUk5BTF9QUkVWX0xJTksgJiYgJEVYVEVSTkFMX1BSRVZfVElUTEUpIHsKKwlyZXR1cm4gKG1ha2VfaHJlZigkRVhURVJOQUxfUFJFVl9MSU5LLCAkaWNvbiksCisJCW1ha2VfaHJlZigkRVhURVJOQUxfUFJFVl9MSU5LLCAiJEVYVEVSTkFMX1BSRVZfVElUTEUiKSkKKwl9CisgICAgZWxzaWYgKCRpY29uIGVxIGdldF9teV9pY29uKCduZXh0JykKKwkgICAmJiAkRVhURVJOQUxfRE9XTl9MSU5LICYmICRFWFRFUk5BTF9ET1dOX1RJVExFKSB7CisJcmV0dXJuIChtYWtlX2hyZWYoJEVYVEVSTkFMX0RPV05fTElOSywgJGljb24pLAorCQltYWtlX2hyZWYoJEVYVEVSTkFMX0RPV05fTElOSywgIiRFWFRFUk5BTF9ET1dOX1RJVExFIikpCisJfQorICAgIHJldHVybiAoJmluYWN0aXZlX2ltZygkaWNvbiksICIiKTsKK30KKworc3ViIGFkZF9zcGVjaWFsX2xpbmsgeworICAgIG15KCRpY29uLCAkZmlsZSwgJGN1cnJlbnRfZmlsZSkgPSBAXzsKKyAgICBpZiAoJGljb24gPX4gL1w8dGV4Mmh0bWxfKFtfYS16XSspX3Zpc2libGVfbWFya1w+LykgeworICAgICAgICBteSAkciA9IGdldF9teV9pY29uKCQxKTsKKyAgICAgICAgJGljb24gPX4gcy9cPHRleDJodG1sX1tfYS16XStfdmlzaWJsZV9tYXJrXD4vJHIvOworICAgIH0KKyAgICByZXR1cm4gKCgkZmlsZSAmJiAoJGZpbGUgbmUgJGN1cnJlbnRfZmlsZSkpCisgICAgICAgICAgICA/IG1ha2VfaHJlZigkZmlsZSwgJGljb24pCisgICAgICAgICAgICA6IHVuZGVmKQorfQorCisjIFRoZSBpbWdfdGFnKCkgZnVuY3Rpb24gc2VlbXMgb25seSB0byBiZSBjYWxsZWQgd2l0aCB0aGUgcGFyYW1ldGVyCisjICdhbmNob3JfaW52aXNpYmxlX21hcmsnLCB3aGljaCB3ZSB3YW50IHRvIHR1cm4gaW50byAnJy4gIFNpbmNlCisjIHJlcGxhY2VfaWNvbl9tYXJrcygpIGlzIHRoZSBvbmx5IGludGVyZXN0aW5nIGNhbGxlciwgYW5kIGFsbCBpdCByZWFsbHkKKyMgZG9lcyBpcyBjYWxsIGltZ190YWcoKSwgd2UgY2FuIGp1c3QgZGVmaW5lIHRoZSBob29rIGFsdGVybmF0aXZlIHRvIGJlCisjIGEgbm8tb3AgaW5zdGVhZC4KKyMKK3N1YiByZXBsYWNlX2ljb25zX2hvb2sge30KKworc3ViIGRvX2NtZF9hcmFiaWMgeworICAgICMgZ2V0IHJpZCBvZiB0aGF0IG5hc3R5IDxTUEFOIENMQVNTPSJhcmFiaWMiPi4uLjwvU1BBTj4KKyAgICBteSgkY3RyLCAkdmFsLCAkaWQsICR0ZXh0KSA9ICZyZWFkX2NvdW50ZXJfdmFsdWUoQF9bMF0pOworICAgIHJldHVybiAoJHZhbCA/IGZhcmFiaWMoJHZhbCkgOiAiMCIpIC4gJHRleHQ7Cit9CisKKworc3ViIGdlbl9pbmRleF9pZCB7CisgICAgIyB0aGlzIGlzIHVzZWQgdG8gZW5zdXJlIGNvbW1vbiBpbmRleCBrZXkgZ2VuZXJhdGlvbiBhbmQgYSBzdGFibGUgc29ydAorICAgIG15KCRzdHIsJGV4dHJhKSA9IEBfOworICAgIHNwcmludGYoJyVzIyMjJXMlMDEwZCcsICRzdHIsICRleHRyYSwgKyskZ2xvYmFseydtYXhfaWQnfSk7Cit9CisKK3N1YiBpbnNlcnRfaW5kZXggeworICAgIG15KCRtYXJrLCRkYXRhZmlsZSwkY29sdW1ucywkbGV0dGVycywkcHJlZml4KSA9IEBfOworICAgIG15ICRwcm9nID0gIiRteXJvb3RkaXIvdG9vbHMvYnVpbGRpbmRleC5weSI7CisgICAgbXkgJGluZGV4OworICAgIGlmICgkbGV0dGVycykgeworCSRpbmRleCA9IGAkcHJvZyAtLWNvbHVtbnMgJGNvbHVtbnMgLS1sZXR0ZXJzICRkYXRhZmlsZWA7CisgICAgfQorICAgIGVsc2UgeworCSRpbmRleCA9IGAkcHJvZyAtLWNvbHVtbnMgJGNvbHVtbnMgJGRhdGFmaWxlYDsKKyAgICB9CisgICAgaWYgKCFzLyRtYXJrLyRwcmVmaXgkaW5kZXgvKSB7CisgICAgICAgIHByaW50ICJcbkNvdWxkIG5vdCBsb2NhdGUgaW5kZXggbWFyazogJG1hcmsiOworICAgIH0KK30KKworc3ViIGFkZF9pZHggeworICAgIHByaW50ICJcbkJ1aWxkaW5nIEhUTUwgZm9yIHRoZSBpbmRleCAuLi4iOworICAgIGNsb3NlKElEWEZJTEUpOworICAgIGluc2VydF9pbmRleCgkaWR4X21hcmssICdpbmRleC5kYXQnLCAkSU5ERVhfQ09MVU1OUywgMSwgJycpOworfQorCisKKyRpZHhfbW9kdWxlX21hcmsgPSAnPHRleDJodG1sX2lkeF9tb2R1bGVfbWFyaz4nOworJGlkeF9tb2R1bGVfdGl0bGUgPSAnTW9kdWxlIEluZGV4JzsKKworc3ViIGFkZF9tb2R1bGVfaWR4IHsKKyAgICBwcmludCAiXG5CdWlsZGluZyBIVE1MIGZvciB0aGUgbW9kdWxlIGluZGV4IC4uLiI7CisgICAgbXkgJGtleTsKKyAgICBteSAkZmlyc3QgPSAxOworICAgIG15ICRwcmV2cGxhdCA9ICcnOworICAgIG15ICRhbGx0aGVzYW1lID0gMTsKKyAgICBteSAkcHJlZml4ID0gJyc7CisgICAgZm9yZWFjaCAka2V5IChrZXlzICVNb2R1bGVzKSB7CisJJGtleSA9fiBzLzx0dD4oW2EtekEtWjAtOS5fXSopPFwvdHQ+L1wxLzsKKwlteSAkcGxhdCA9ICIkTW9kdWxlUGxhdGZvcm1zeyRrZXl9IjsKKwkkcGxhdCA9ICcnCisJICBpZiAoJHBsYXQgZXEgJElHTk9SRV9QTEFURk9STV9BTk5PVEFUSU9OKTsKKwlpZiAoISRmaXJzdCkgeworCSAgICAkYWxsdGhlc2FtZSA9IDAKKwkgICAgICBpZiAoJHByZXZwbGF0IG5lICRwbGF0KTsKKwl9CisJZWxzZSB7ICRmaXJzdCA9IDA7IH0KKwkkcHJldnBsYXQgPSAkcGxhdDsKKyAgICB9CisgICAgb3BlbihNT0RJRFhGSUxFLCAnPm1vZGluZGV4LmRhdCcpIHx8IGRpZSAiXG4kIVxuIjsKKyAgICBmb3JlYWNoICRrZXkgKGtleXMgJU1vZHVsZXMpIHsKKwkjIGR1bXAgdGhlIGxpbmUgaW4gdGhlIGRhdGEgZmlsZTsganVzdCB1c2UgYSBkdW1teSBzZXFubyBmaWVsZAorCW15ICRua2V5ID0gJDE7CisJbXkgJG1vZGl0ZW0gPSAiJE1vZHVsZXN7JGtleX0iOworCW15ICRwbGF0ID0gJyc7CisJJGtleSA9fiBzLzx0dD4oW2EtekEtWjAtOS5fXSopPFwvdHQ+L1wxLzsKKwlpZiAoJE1vZHVsZVBsYXRmb3Jtc3ska2V5fSAmJiAhJGFsbHRoZXNhbWUpIHsKKwkgICAgJHBsYXQgPSAoIiA8ZW0+KDxzcGFuIGNsYXNzPSdwbGF0Zm9ybSc+JE1vZHVsZVBsYXRmb3Jtc3ska2V5fSIKKwkJICAgICAuICc8L3NwYW4+KTwvZW0+Jyk7CisJfQorCXByaW50IE1PRElEWEZJTEUgJG1vZGl0ZW0gLiAkSURYRklMRV9GSUVMRF9TRVAKKyAgICAgICAgICAgICAgLiAiPHR0IGNsYXNzPSdtb2R1bGUnPiRrZXk8L3R0PiRwbGF0IyMjXG4iOworICAgIH0KKyAgICBjbG9zZShNT0RJRFhGSUxFKTsKKworICAgIGlmICgkR0xPQkFMX01PRFVMRV9JTkRFWCkgeworICAgICAgICAkcHJlZml4ID0gPDxNT0RVTEVfSU5ERVhfUFJFRklYOworCis8cD4gVGhpcyBpbmRleCBvbmx5IGxpc3RzIG1vZHVsZXMgZG9jdW1lbnRlZCBpbiB0aGlzIG1hbnVhbC4KKyAgVGhlIDxlbSBjbGFzcz0iY2l0ZXRpdGxlIj48YSBocmVmPSIkR0xPQkFMX01PRFVMRV9JTkRFWCI+R2xvYmFsIE1vZHVsZQorICAgICBJbmRleDwvYT48L2VtPiBsaXN0cyBhbGwgbW9kdWxlcyB0aGF0IGFyZSBkb2N1bWVudGVkIGluIHRoaXMgc2V0CisgIG9mIG1hbnVhbHMuPC9wPgorTU9EVUxFX0lOREVYX1BSRUZJWAorICAgIH0KKyAgICBpZiAoISRhbGx0aGVzYW1lKSB7CisJJHByZWZpeCAuPSA8PFBMQVRfRElTQ1VTUzsKKworPHA+IFNvbWUgbW9kdWxlIG5hbWVzIGFyZSBmb2xsb3dlZCBieSBhbiBhbm5vdGF0aW9uIGluZGljYXRpbmcgd2hhdAorcGxhdGZvcm0gdGhleSBhcmUgYXZhaWxhYmxlIG9uLjwvcD4KKworUExBVF9ESVNDVVNTCisgICAgfQorICAgIGluc2VydF9pbmRleCgkaWR4X21vZHVsZV9tYXJrLCAnbW9kaW5kZXguZGF0JywgJE1PRFVMRV9JTkRFWF9DT0xVTU5TLCAwLAorCQkgJHByZWZpeCk7Cit9CisKKyMgcmVwbGFjZSBib3RoIGluZGV4ZXMgYXMgbmVlZGVkOgorc3ViIGFkZF9pZHhfaG9vayB7CisgICAgYWRkX2lkeCgpIGlmICgvJGlkeF9tYXJrLyk7CisgICAgcHJvY2Vzc19weXRob25fc3RhdGUoKTsKKyAgICBpZiAoJE1PRFVMRV9JTkRFWF9GSUxFKSB7CisgICAgICAgIGxvY2FsICgkXyk7CisgICAgICAgIG9wZW4oTVlGSUxFLCAiPCRNT0RVTEVfSU5ERVhfRklMRSIpOworICAgICAgICBzeXNyZWFkKE1ZRklMRSwgJF8sIDEwMjQqMTAyNCk7CisgICAgICAgIGNsb3NlKE1ZRklMRSk7CisgICAgICAgIGFkZF9tb2R1bGVfaWR4KCk7CisgICAgICAgIG9wZW4oTVlGSUxFLCI+JE1PRFVMRV9JTkRFWF9GSUxFIik7CisgICAgICAgIHByaW50IE1ZRklMRSAkXzsKKyAgICAgICAgY2xvc2UoTVlGSUxFKTsKKyAgICB9Cit9CisKKworIyBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgc3R1ZmYsIGFkZCBsYWJlbCB0byBhbGxvdyBuYW1lZCBub2RlIGZpbGVzIGFuZAorIyBzdXBwb3J0IHN1cHByZXNzaW9uIG9mIHRoZSBwYWdlIGNvbXBsZXRlIChmb3IgSFRNTCBIZWxwIHVzZSkuCitzdWIgZG9fY21kX3RhYmxlb2Zjb250ZW50cyB7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgJFRJVExFID0gJHRvY190aXRsZTsKKyAgICAkdG9jZmlsZSA9ICRDVVJSRU5UX0ZJTEU7CisgICAgbXkoJGNsb3N1cmVzLCRyZW9wZW5zKSA9IHByZXNlcnZlX29wZW5fdGFncygpOworICAgIGFuY2hvcl9sYWJlbCgnY29udGVudHMnLCAkQ1VSUkVOVF9GSUxFLCAkXyk7CSMgdGhpcyBpcyBhZGRlZAorICAgIGpvaW4oJycsICI8QlI+XG5cXHRhYmxlb2ZjaGlsZGxpbmtzW29mZl0iLCAkY2xvc3VyZXMKKwkgLCBtYWtlX3NlY3Rpb25faGVhZGluZygkdG9jX3RpdGxlLCAnSDInKSwgJHRvY19tYXJrCisJICwgJHJlb3BlbnMsICRfKTsKK30KKyMgSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIHN0dWZmLCBhZGQgbGFiZWwgdG8gYWxsb3cgbmFtZWQgbm9kZSBmaWxlcy4KK3N1YiBkb19jbWRfbGlzdG9mZmlndXJlcyB7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgJFRJVExFID0gJGxvZl90aXRsZTsKKyAgICAkbG9mZmlsZSA9ICRDVVJSRU5UX0ZJTEU7CisgICAgbXkoJGNsb3N1cmVzLCRyZW9wZW5zKSA9IHByZXNlcnZlX29wZW5fdGFncygpOworICAgIGFuY2hvcl9sYWJlbCgnbG9mJywgJENVUlJFTlRfRklMRSwgJF8pOwkJIyB0aGlzIGlzIGFkZGVkCisgICAgam9pbignJywgIjxCUj5cbiIsICRjbG9zdXJlcworCSAsIG1ha2Vfc2VjdGlvbl9oZWFkaW5nKCRsb2ZfdGl0bGUsICdIMicpLCAkbG9mX21hcmsKKwkgLCAkcmVvcGVucywgJF8pOworfQorIyBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgc3R1ZmYsIGFkZCBsYWJlbCB0byBhbGxvdyBuYW1lZCBub2RlIGZpbGVzLgorc3ViIGRvX2NtZF9saXN0b2Z0YWJsZXMgeworICAgIGxvY2FsKCRfKSA9IEBfOworICAgICRUSVRMRSA9ICRsb3RfdGl0bGU7CisgICAgJGxvdGZpbGUgPSAkQ1VSUkVOVF9GSUxFOworICAgIG15KCRjbG9zdXJlcywkcmVvcGVucykgPSBwcmVzZXJ2ZV9vcGVuX3RhZ3MoKTsKKyAgICBhbmNob3JfbGFiZWwoJ2xvdCcsICRDVVJSRU5UX0ZJTEUsICRfKTsJCSMgdGhpcyBpcyBhZGRlZAorICAgIGpvaW4oJycsICI8QlI+XG4iLCAkY2xvc3VyZXMKKwkgLCBtYWtlX3NlY3Rpb25faGVhZGluZygkbG90X3RpdGxlLCAnSDInKSwgJGxvdF9tYXJrCisJICwgJHJlb3BlbnMsICRfKTsKK30KKyMgSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIHN0dWZmLCBhZGQgbGFiZWwgdG8gYWxsb3cgbmFtZWQgbm9kZSBmaWxlcy4KK3N1YiBkb19jbWRfdGV4dG9odG1saW5mb3BhZ2UgeworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIGlmICgkSU5GTykgewkJCQkJIyAKKwlhbmNob3JfbGFiZWwoImFib3V0IiwkQ1VSUkVOVF9GSUxFLCRfKTsJCSMgdGhpcyBpcyBhZGRlZAorICAgIH0JCQkJCQkJIworICAgIG15ICR0aGVfdmVyc2lvbiA9ICcnOwkJCQkjIGFuZCB0aGUgcmVzdCBpcworICAgIGlmICgkdF9kYXRlKSB7CQkJCQkjIG1vc3RseSBvdXJzCisJJHRoZV92ZXJzaW9uID0gIixcbiR0X2RhdGUiOworCWlmICgkUEFDS0FHRV9WRVJTSU9OKSB7CisJICAgICR0aGVfdmVyc2lvbiAuPSAiLCBSZWxlYXNlICRQQUNLQUdFX1ZFUlNJT04iOworCX0KKyAgICB9CisgICAgJF8gPSAoKCRJTkZPID09IDEpCisgICAgICAgICAgPyBqb2luKCcnLAorICAgICAgICAgICAgICAgICAkY2xvc2VfYWxsLAorICAgICAgICAgICAgICAgICAiPHN0cm9uZz4kdF90aXRsZTwvc3Ryb25nPiR0aGVfdmVyc2lvblxuIiwKKyAgICAgICAgICAgICAgICAgYGNhdCAkQUJPVVRfRklMRWAsCisgICAgICAgICAgICAgICAgICRvcGVuX2FsbCwgJF8pCisgICAgICAgICAgOiBqb2luKCcnLCAkY2xvc2VfYWxsLCAkSU5GTywiXG4iLCAkb3Blbl9hbGwsICRfKSk7CisgICAgJF87Cit9CisKKyMgJGlkeF9tYXJrIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgcmVhbCBpbmRleCBhdCB0aGUgZW5kCitzdWIgZG9fY21kX3RleHRvaHRtbGluZGV4IHsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICAkVElUTEUgPSAkaWR4X3RpdGxlOworICAgICRpZHhmaWxlID0gJENVUlJFTlRfRklMRTsKKyAgICBpZiAoJWluZGV4X2xhYmVscykgeyBtYWtlX2luZGV4X2xhYmVscygpOyB9CisgICAgaWYgKCgkU0hPUlRfSU5ERVgpICYmICglaW5kZXhfc2VnbWVudCkpIHsgbWFrZV9wcmVpbmRleCgpOyB9CisgICAgZWxzZSB7ICRwcmVpbmRleCA9ICcnOyB9CisgICAgbXkgJGhlYWRpbmcgPSBtYWtlX3NlY3Rpb25faGVhZGluZygkaWR4X3RpdGxlLCAnaDInKSAuICRpZHhfbWFyazsKKyAgICBteSgkcHJlLCRwb3N0KSA9IG1pbmltaXplX29wZW5fdGFncygkaGVhZGluZyk7CisgICAgYW5jaG9yX2xhYmVsKCdnZW5pbmRleCcsJENVUlJFTlRfRklMRSwkXyk7CQkjIHRoaXMgaXMgYWRkZWQKKyAgICByZXR1cm4gIjxicj5cbiIgLiAkcHJlIC4gJF87Cit9CisKKyRNT0RVTEVfSU5ERVhfRklMRSA9ICcnOworCisjICRpZHhfbW9kdWxlX21hcmsgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSByZWFsIGluZGV4IGF0IHRoZSBlbmQKK3N1YiBkb19jbWRfdGV4dG9odG1sbW9kdWxlaW5kZXggeworICAgIGxvY2FsKCRfKSA9IEBfOworICAgICRUSVRMRSA9ICRpZHhfbW9kdWxlX3RpdGxlOworICAgIGFuY2hvcl9sYWJlbCgnbW9kaW5kZXgnLCAkQ1VSUkVOVF9GSUxFLCAkXyk7CisgICAgJE1PRFVMRV9JTkRFWF9GSUxFID0gIiRDVVJSRU5UX0ZJTEUiOworICAgICRfID0gKCc8cD4nIC4gbWFrZV9zZWN0aW9uX2hlYWRpbmcoJGlkeF9tb2R1bGVfdGl0bGUsICdoMicpCisgICAgICAgICAgLiAkaWR4X21vZHVsZV9tYXJrIC4gJF8pOworICAgIHJldHVybiAkXzsKK30KKworIyBUaGUgYmlibGlvZ3JhcGh5IGFuZCB0aGUgaW5kZXggc2hvdWxkIGJlIHRyZWF0ZWQgYXMgc2VwYXJhdGUKKyMgc2VjdGlvbnMgaW4gdGhlaXIgb3duIEhUTUwgZmlsZXMuIFRoZSBcYmlibGlvZ3JhcGh5e30gY29tbWFuZCBhY3RzCisjIGFzIGEgc2VjdGlvbmluZyBjb21tYW5kIHRoYXQgaGFzIHRoZSBkZXNpcmVkIGVmZmVjdC4gQnV0IHdoZW4gdGhlCisjIGJpYmxpb2dyYXBoeSBpcyBjb25zdHJ1Y3RlZCBtYW51YWxseSB1c2luZyB0aGUgdGhlYmlibGlvZ3JhcGh5CisjIGVudmlyb25tZW50LCBvciB3aGVuIHVzaW5nIHRoZSB0aGVpbmRleCBlbnZpcm9ubWVudCBpdCBpcyBub3QKKyMgcG9zc2libGUgdG8gdXNlIHRoZSBub3JtYWwgc2VjdGlvbmluZyBtZWNoYW5pc20uIFRoaXMgc3Vicm91dGluZQorIyBpbnNlcnRzIGEgXGJpYmxpb2dyYXBoeXt9IG9yIGEgZHVtbXkgXHRleHRvaHRtbGluZGV4IGNvbW1hbmQganVzdAorIyBiZWZvcmUgdGhlIGFwcHJvcHJpYXRlIGVudmlyb25tZW50cyB0byBmb3JjZSBzZWN0aW9uaW5nLgorCisjIFhYWAlUaGlzICphc3N1bWVzKiB0aGF0IGlmIHRoZXJlIGFyZSB0d28ge3RoZWluZGV4fSBlbnZpcm9ubWVudHMsCisjCXRoZSBmaXJzdCBpcyB0aGUgbW9kdWxlIGluZGV4IGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBzdGFuZGFyZAorIwlpbmRleC4gIFRoaXMgaXMgc3VmZmljaWVudCBmb3IgdGhlIGN1cnJlbnQgUHl0aG9uIGRvY3VtZW50YXRpb24sCisjCWJ1dCB0aGF0J3MgYWJvdXQgaXQuCisKK3N1YiBhZGRfYmJsX2FuZF9pZHhfZHVtbXlfY29tbWFuZHMgeworICAgIG15ICRpZCA9ICRnbG9iYWx7J21heF9pZCd9OworCisgICAgcy8oW1xcXWJlZ2luXHMqJE9cZCskQ1xzKnRoZWJpYmxpb2dyYXBoeSkvJGJibF9jbnQrKzsgJDEvZWc7CisgICAgcy8oW1xcXWJlZ2luXHMqJE9cZCskQ1xzKnRoZWJpYmxpb2dyYXBoeSkvJGlkKys7ICJcXGJpYmxpb2dyYXBoeSRPJGlkJEMkTyRpZCRDICQxIi9nZW87CisgICAgbXkoQHBhcnRzKSA9IHNwbGl0KC9cXGJlZ2luXHMqJE9cZCskQ1xzKnRoZWluZGV4Lyk7CisgICAgaWYgKHNjYWxhcihAcGFydHMpID09IDMpIHsKKyAgICAgICAgIyBCZSBjYXJlZnVsIHRvIHJlLXdyaXRlIHRoZSBzdHJpbmcgaW4gcGxhY2UsIHNpbmNlICRfIGlzICpub3QqCisgICAgICAgICMgcmV0dXJuZWQgZXhwbGljaXR5OyAgKioqIG5hc3R5IHNpZGUtZWZmZWN0IGRlcGVuZGVuY3khICoqKgorICAgICAgICBwcmludCAiXG5hZGRfYmJsX2FuZF9pZHhfZHVtbXlfY29tbWFuZHMgPT0+IGFkZGluZyBtb2R1bGUgaW5kZXgiOworICAgICAgICBteSAkcnggPSAiKFtcXFxcXWJlZ2luXFxzKiRPXFxkKyRDXFxzKnRoZWluZGV4W1xcc1xcU10qKSIKKyAgICAgICAgICAuICIoW1xcXFxdYmVnaW5cXHMqJE9cXGQrJENcXHMqdGhlaW5kZXgpIjsKKyAgICAgICAgcy8kcngvXFx0ZXh0b2h0bWxtb2R1bGVpbmRleCBcMSBcXHRleHRvaHRtbGluZGV4IFwyL287CisgICAgICAgICMgQWRkIGEgYnV0dG9uIHRvIHRoZSBuYXZpZ2F0aW9uIGFyZWFzOgorICAgICAgICAkQ1VTVE9NX0JVVFRPTlMgLj0gKCc8YSBocmVmPSJtb2RpbmRleC5odG1sIiB0aXRsZT0iTW9kdWxlIEluZGV4Ij4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiBnZXRfbXlfaWNvbignbW9kdWxlcycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnPC9hPicpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgJENVU1RPTV9CVVRUT05TIC49IGdldF9teV9pY29uKCdibGFuaycpOworICAgICAgICAkZ2xvYmFseydtYXhfaWQnfSA9ICRpZDsgIyBub3Qgc3VyZSB3aHkuLi4uCisgICAgICAgIHMvKFtcXF1iZWdpblxzKiRPXGQrJENccyp0aGVpbmRleCkvXFx0ZXh0b2h0bWxpbmRleCAkMS9vOworCSAgICBzL1tcXF1wcmludGluZGV4L1xcdGV4dG9odG1saW5kZXggL287CisJfQorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgbGliX2FkZF9iYmxfYW5kX2lkeF9kdW1teV9jb21tYW5kcygpCisgICAgICAgIGlmIGRlZmluZWQoJmxpYl9hZGRfYmJsX2FuZF9pZHhfZHVtbXlfY29tbWFuZHMpOworfQorCisjIFRoZSBiaWJsaW9ncmFwaGljIHJlZmVyZW5jZXMsIHRoZSBhcHBlbmRpY2VzLCB0aGUgbGlzdHMgb2YgZmlndXJlcworIyBhbmQgdGFibGVzIGV0Yy4gbXVzdCBhcHBlYXIgaW4gdGhlIGNvbnRlbnRzIHRhYmxlIGF0IHRoZSBzYW1lIGxldmVsCisjIGFzIHRoZSBvdXRlcm1vc3Qgc2VjdGlvbmluZyBjb21tYW5kLiBUaGlzIHN1YnJvdXRpbmUgZmluZHMgd2hhdCBpcworIyB0aGUgb3V0ZXJtb3N0IGxldmVsIGFuZCBzZXRzIHRoZSBhYm92ZSB0byB0aGUgc2FtZSBsZXZlbDsKKworc3ViIHNldF9kZXB0aF9sZXZlbHMgeworICAgICMgU2V0cyAkb3V0ZXJtb3N0X2xldmVsCisgICAgbXkgJGxldmVsOworICAgICNSUk06ICBkbyBub3QgYWx0ZXIgdXNlci1zZXQgdmFsdWUgZm9yICAkTUFYX1NQTElUX0RFUFRICisgICAgZm9yZWFjaCAkbGV2ZWwgKCJwYXJ0IiwgImNoYXB0ZXIiLCAic2VjdGlvbiIsICJzdWJzZWN0aW9uIiwKKwkJICAgICJzdWJzdWJzZWN0aW9uIiwgInBhcmFncmFwaCIpIHsKKwlsYXN0IGlmICgoJG91dGVybW9zdF9sZXZlbCkgPSAvXFwoJGxldmVsKSRkZWxpbWl0ZXJfcngvKTsKKyAgICB9CisgICAgJGxldmVsID0gKCRvdXRlcm1vc3RfbGV2ZWwgPyAkc2VjdGlvbl9jb21tYW5kc3skb3V0ZXJtb3N0X2xldmVsfSA6CisJICAgICAgZG8geyRvdXRlcm1vc3RfbGV2ZWwgPSAnc2VjdGlvbic7IDM7fSk7CisKKyAgICAjUlJNOiAgYnV0IGNhbGN1bGF0ZSB2YWx1ZSBmb3IgJE1BWF9TUExJVF9ERVBUSCB3aGVuIGEgJFJFTF9ERVBUSCB3YXMgZ2l2ZW4KKyAgICBpZiAoJFJFTF9ERVBUSCAmJiAkTUFYX1NQTElUX0RFUFRIKSB7IAorCSRNQVhfU1BMSVRfREVQVEggPSAkbGV2ZWwgKyAkTUFYX1NQTElUX0RFUFRIOworICAgIH0gZWxzaWYgKCEoJE1BWF9TUExJVF9ERVBUSCkpIHsgJE1BWF9TUExJVF9ERVBUSCA9IDEgfTsKKworICAgICV1bm51bWJlcmVkX3NlY3Rpb25fY29tbWFuZHMgPSAoJ3RhYmxlb2Zjb250ZW50cycgPT4gJGxldmVsLAorCQkJCSAgICAnbGlzdG9mZmlndXJlcycgPT4gJGxldmVsLAorCQkJCSAgICAnbGlzdG9mdGFibGVzJyA9PiAkbGV2ZWwsCisJCQkJICAgICdiaWJsaW9ncmFwaHknID0+ICRsZXZlbCwKKwkJCQkgICAgJ3RleHRvaHRtbGluZGV4JyA9PiAkbGV2ZWwsCisJCQkJICAgICd0ZXh0b2h0bWxtb2R1bGVpbmRleCcgPT4gJGxldmVsKTsKKyAgICAkc2VjdGlvbl9oZWFkaW5nc3sndGV4dG9odG1sbW9kdWxlaW5kZXgnfSA9ICdoMSc7CisKKyAgICAlc2VjdGlvbl9jb21tYW5kcyA9ICgldW5udW1iZXJlZF9zZWN0aW9uX2NvbW1hbmRzLAorCQkJICVzZWN0aW9uX2NvbW1hbmRzKTsKKworICAgIG1ha2Vfc2VjdGlvbnNfcngoKTsKK30KKworCisjIFRoaXMgY2hhbmdlcyB0aGUgbWFya3VwIHVzZWQgZm9yIHt2ZXJiYXRpbX0gZW52aXJvbm1lbnRzLCBhbmQgaXMgdGhlCisjIGJlc3Qgd2F5IEkndmUgZm91bmQgdGhhdCBlbnN1cmVzIHRoZSA8ZGw+IGdvZXMgb24gdGhlIG91dHNpZGUgb2YgdGhlCisjIDxwcmU+Li4uPC9wcmU+LgorIworIyBOb3RlIHRoYXQgdGhpcyAqbXVzdCogYmUgZG9uZSBpbiB0aGUgaW5pdCBmaWxlLCBub3QgdGhlIHB5dGhvbi5wZXJsCisjIHN0eWxlIHN1cHBvcnQgZmlsZS4gIFRoZSAlZGVjbGFyYXRpb25zIG11c3QgYmUgc2V0IGJlZm9yZQorIyBpbml0aWFsaXplKCkgaXMgY2FsbGVkIGluIHRoZSBtYWluIExhVGVYMkhUTUwgc2NyaXB0ICh3aGljaCBoYXBwZW5zCisjIGJlZm9yZSBzdHlsZSBmaWxlcyBhcmUgbG9hZGVkKS4KKyMKKyVkZWNsYXJhdGlvbnMgPSAoJ3ByZWZvcm0nID0+ICc8ZGw+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj48L3ByZT48L2RsPicsCisJCSAlZGVjbGFyYXRpb25zKTsKKworCisjIFRoaXMgaXMgYWRkZWQgdG8gZ2V0IHJpZCBvZiB0aGUgbG9uZyBjb21tZW50IHRoYXQgZm9sbG93cyB0aGUKKyMgZG9jdHlwZSBkZWNsYXJhdGlvbjsgTVNJRTUgb24gTlQ0IFNQNCBiYXJmcyBvbiBpdCBhbmQgZHJvcHMgdGhlCisjIGNvbnRlbnQgb2YgdGhlIHBhZ2UuCitzdWIgbWFrZV9oZWFkX2FuZF9ib2R5IHsKKyAgICBteSgkdGl0bGUsICRib2R5KSA9IEBfOworICAgICRib2R5ID0gIiAkYm9keSIgdW5sZXNzICgkYm9keSBlcSAnJyk7CisgICAgbXkgJERURGNvbW1lbnQgPSAnJzsKKyAgICBteSgkdmVyc2lvbiwgJGlzb2xhbmd1YWdlKSA9ICgkSFRNTF9WRVJTSU9OLCAnRU4nKTsKKyAgICBteSAlaXNvbGFuZ3VhZ2VzID0gKCAgJ2VuZ2xpc2gnLCAgJ0VOJyAgICwgJ1VTZW5nbGlzaCcsICdFTi5VUycKKyAgICAgICAgICAgICAgICAgICAgICAgICwgJ29yaWdpbmFsJywgJ0VOJyAgICwgJ2dlcm1hbicgICAsICdERScKKyAgICAgICAgICAgICAgICAgICAgICAgICwgJ2F1c3RyaWFuJywgJ0RFLkFUJywgJ2ZyZW5jaCcgICAsICdGUicKKyAgICAgICAgICAgICAgICAgICAgICAgICwgJ3NwYW5pc2gnLCAgJ0VTJyk7CisgICAgJGlzb2xhbmd1YWdlID0gJGlzb2xhbmd1YWdlc3skZGVmYXVsdF9sYW5ndWFnZX07CisgICAgJGlzb2xhbmd1YWdlID0gJ0VOJyB1bmxlc3MgJGlzb2xhbmd1YWdlOworICAgICR0aXRsZSA9ICZwdXJpZnkoJHRpdGxlLDEpOworICAgIGV2YWwoIlwkdGl0bGUgPSAiLiAkZGVmYXVsdF90aXRsZSApIHVubGVzcyAoJHRpdGxlKTsKKworICAgICMgYWxsb3cgdXNlci1tb2RpZmljYXRpb24gb2YgdGhlIDxUSVRMRT4gdGFnOyB0aGFua3MgRGFuIFlvdW5nCisgICAgaWYgKGRlZmluZWQgJmN1c3RvbV9USVRMRV9ob29rKSB7CisJJHRpdGxlID0gJmN1c3RvbV9USVRMRV9ob29rKCR0aXRsZSwgJHRvY19zZWNfdGl0bGUpOworICAgIH0KKworICAgIGlmICgkRE9DVFlQRSA9fiAvXC9cL1tcd1wuXStccyokLykgeyAjIGxhbmd1YWdlIHNwZWMgaW5jbHVkZWQKKwkkRFREY29tbWVudCA9ICI8IURPQ1RZUEUgaHRtbCBQVUJMSUMgXCIkRE9DVFlQRVwiPlxuIjsKKyAgICB9IGVsc2UgeworCSREVERjb21tZW50ID0gIjwhRE9DVFlQRSBodG1sIFBVQkxJQyBcIiRET0NUWVBFLy8iCisJICAgIC4gKCRJU09fTEFOR1VBR0UgPyAkSVNPX0xBTkdVQUdFIDogJGlzb2xhbmd1YWdlKSAuICJcIj5cbiI7CisgICAgfQorCisgICAgJFNUWUxFU0hFRVQgPSAkRklMRS4iLmNzcyIgdW5sZXNzICRTVFlMRVNIRUVUOworICAgIGlmICghJGNoYXJzZXQgJiYgJENIQVJTRVQpIHsgJGNoYXJzZXQgPSAkQ0hBUlNFVDsgJGNoYXJzZXQgPX4gcy9fL1wtL2dvOyB9CisKKyAgICBqb2luKCcnLCAoJERPQ1RZUEUgPyAkRFREY29tbWVudCA6ICcnICkKKwksIjxodG1sPlxuPGhlYWQ+XG48dGl0bGU+IiwgJHRpdGxlLCAiPC90aXRsZT5cbiIKKwksICZtZXRhX2luZm9ybWF0aW9uKCR0aXRsZSkKKwksICgkQ0hBUlNFVCAmJiAkSFRNTF9WRVJTSU9OIGdlICIyLjEiID8KKyAgICAgICAgICAgIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PSRjaGFyc2V0XCI+XG4iCisgICAgICAgICAgIDogIiIgKQorCSwgKCRCQVNFID8gIjxiYXNlIGhyZWY9XCIkQkFTRVwiPlxuIiA6ICIiICkKKwksICI8bGluayByZWw9XCJTVFlMRVNIRUVUXCIgaHJlZj1cIiRTVFlMRVNIRUVUXCI+IgorCSwgJG1vcmVfbGlua3NfbWFyaworCSwgIlxuPC9oZWFkPlxuPGJvZHkkYm9keT4iKTsKK30KKworMTsJIyBUaGlzIG11c3QgYmUgdGhlIGxhc3QgbGluZQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3BlcmwvbHR4bWFya3VwLnBlcmwgYi9kb2MvdG9vbHMvcGVybC9sdHhtYXJrdXAucGVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTBlNzliCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL3BlcmwvbHR4bWFya3VwLnBlcmwKQEAgLTAsMCArMSw2NyBAQAorIyBMYVRlWDJIVE1MIHN1cHBvcnQgZm9yIHRoZSBsdHhtYXJrdXAgcGFja2FnZS4gIERvZXNuJ3QgZG8gaW5kZXhpbmcuCisKK3BhY2thZ2UgbWFpbjsKKworCitzdWIgbHR4X25leHRfYXJndW1lbnR7CisgICAgbXkgJHBhcmFtOworICAgICRwYXJhbSA9IG1pc3NpbmdfYnJhY2VzKCkKKyAgICAgIHVubGVzcyAoKHMvJG5leHRfcGFpcl9wcl9yeC8kcGFyYW09JDI7JycvZW8pCisJICAgICAgfHwocy8kbmV4dF9wYWlyX3J4LyRwYXJhbT0kMjsnJy9lbykpOworICAgIHJldHVybiAkcGFyYW07Cit9CisKKworc3ViIGRvX2NtZF9tYWNyb3sKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAkbWFjcm8gPSBsdHhfbmV4dF9hcmd1bWVudCgpOworICAgIHJldHVybiAiPHR0IGNsYXNzPSdtYWNybyc+JiM5MjskbWFjcm88L3R0PiIgLiAkXzsKK30KKworc3ViIGRvX2NtZF9lbnZ7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJGVudiA9IGx0eF9uZXh0X2FyZ3VtZW50KCk7CisgICAgcmV0dXJuICI8dHQgY2xhc3M9J2Vudmlyb25tZW50Jz4mIzkyOyRlbnY8L3R0PiIgLiAkXzsKK30KKworc3ViIGx0eF9wcm9jZXNzX3BhcmFtc3sKKyAgICAjIEhhbmRsZSBwcm9jZXNzaW5nIG9mIFxwIGFuZCBcb3AgZm9yIHBhcmFtZXRlciBzcGVjaWZpY2F0aW9ucyBmb3IKKyAgICAjIGVudmRlc2MgYW5kIG1hY3JvZGVzYy4gIEl0J3MgZG9uZSB0aGlzIHdheSB0byBhdm9pZCBkZWZpbmluZyBkb19jbWRfcCgpCisgICAgIyBhbmQgZG9fY21kX29wKCkgZnVuY3Rpb25zLCB3aGljaCB3b3VsZCBiZSBpbnRlcnByZXRlZCBvdXRzaWRlIHRoZSBjb250ZXh0CisgICAgIyBpbiB3aGljaCB0aGVzZSBjb21tYW5kcyBhcmUgbGVnYWwsIGFuZCBjYXVzZSBMYVRlWDJIVE1MIHRvIHRoaW5rIHRoZXkncmUKKyAgICAjIGRlZmluZWQuICBUaGlzIHdheSwgb3RoZXIgdXNlcyBvZiBccCBhbmQgXG9wIGFyZSBwcm9wZXJseSBmbGFnZ2VkIGFzCisgICAgIyB1bmtub3duIG1hY3Jvcy4KKyAgICBteSAkcyA9IEBfWzBdOworICAgICRzID1+IHMlXFxvcDw8KFxkKyk+PiguKyk8PFwxPj4lPHR0Pls8L3R0Pjx2YXI+JDI8L3Zhcj48dHQ+XTwvdHQ+JTsKKyAgICB3aGlsZSAoJHMgPX4gL1xccDw8KFxkKyk+PiguKyk8PFwxPj4vKSB7CisJJHMgPX4gcyVcXHA8PChcZCspPj4oLispPDxcMT4+JTx0dD57PC90dD48dmFyPiQyPC92YXI+PHR0Pn08L3R0PiU7CisgICAgfQorICAgIHJldHVybiAkczsKK30KKworc3ViIGRvX2Vudl9tYWNyb2Rlc2N7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJG1hY3JvID0gbHR4X25leHRfYXJndW1lbnQoKTsKKyAgICBteSAkcGFyYW1zID0gbHR4X3Byb2Nlc3NfcGFyYW1zKGx0eF9uZXh0X2FyZ3VtZW50KCkpOworICAgIHJldHVybiAiXG48ZGwgY2xhc3M9J21hY3JvZGVzYyc+IgorICAgICAgICAgLiAiXG48ZHQ+PGI+PHR0IGNsYXNzPSdtYWNybyc+JiM5MjskbWFjcm88L3R0PjwvYj4iCisgICAgICAgICAuICJcbiAgICAkcGFyYW1zIgorCSAuICJcbjxkZD4iCisJIC4gJF8KKwkgLiAiPC9kbD4iOworfQorCitzdWIgZG9fZW52X2VudmRlc2N7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJGVudiA9IGx0eF9uZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJHBhcmFtcyA9IGx0eF9wcm9jZXNzX3BhcmFtcyhsdHhfbmV4dF9hcmd1bWVudCgpKTsKKyAgICByZXR1cm4gIlxuPGRsIGNsYXNzPSdlbnZkZXNjJz4iCisgICAgICAgICAuICJcbjxkdD48dHQ+JiM5MjtiZWdpbns8YiBjbGFzcz0nZW52aXJvbm1lbnQnPiRlbnY8L2I+fTwvdHQ+IgorICAgICAgICAgLiAiXG4gICAgJHBhcmFtcyIKKyAgICAgICAgIC4gIlxuPGJyIC8+PHR0PiYjOTI7ZW5kezxiIGNsYXNzPSdlbnZpcm9ubWVudCc+JGVudjwvYj59PC90dD4iCisJIC4gIlxuPGRkPiIKKwkgLiAkXworCSAuICI8L2RsPiI7Cit9CisKKzE7CQkJCSMgTXVzdCBlbmQgd2l0aCB0aGlzLCBiZWNhdXNlIFBlcmwgaXMgYm9ndXMuCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvcGVybC9tYW51YWwucGVybCBiL2RvYy90b29scy9wZXJsL21hbnVhbC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNjViMzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvcGVybC9tYW51YWwucGVybApAQCAtMCwwICsxLDE1IEBACisjIC0qLSBwZXJsIC0qLQorIworIyBUaGlzIGltcGxlbWVudHMgdGhlIFB5dGhvbiBtYW51YWwgY2xhc3MuICBBbGwgaXQgcmVhbGx5IG5lZWRzIHRvIGRvIGl0CisjIGxvYWQgdGhlICJweXRob24iIHN0eWxlLiAgVGhlIHN0eWxlIGNvZGUgaXMgbm90IG1vdmVkIGludG8gdGhlIGNsYXNzIGNvZGUKKyMgYXQgdGhpcyB0aW1lLCBzaW5jZSB3ZSBleHBlY3QgYWRkaXRpb25hbCBkb2N1bWVudCBjbGFzcyB0byBiZSBkZXZlbG9wZWQKKyMgZm9yIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbiBpbiB0aGUgZnV0dXJlLiAgQXBwcm9wcmlhdGUgcmVsb2NhdGlvbnMgd2lsbAorIyBiZSBtYWRlIGF0IHRoYXQgdGltZS4KKworcGFja2FnZSBtYWluOworCitkb19yZXF1aXJlX3BhY2thZ2UoInJlcG9ydCIpOworZG9fcmVxdWlyZV9wYWNrYWdlKCJhbGx0dCIpOworZG9fcmVxdWlyZV9wYWNrYWdlKCJweXRob24iKTsKKworMTsJCQkJIyBzaGVlc2guLi4uCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvcGVybC9weXRob24ucGVybCBiL2RvYy90b29scy9wZXJsL3B5dGhvbi5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNjE1Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvcGVybC9weXRob24ucGVybApAQCAtMCwwICsxLDE2NTEgQEAKKyMgcHl0aG9uLnBlcmwgYnkgRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4JCS0qLSBwZXJsIC0qLQorIworIyBIZWF2aWx5IGJhc2VkIG9uIEd1aWRvIHZhbiBSb3NzdW0ncyBteWZvcm1hdC5wZXJsIChub3cgb2Jzb2xldGUpLgorIworIyBFeHRlbnNpb24gdG8gTGFUZVgySFRNTCBmb3IgZG9jdW1lbnRzIHVzaW5nIG15Zm9ybWF0LnN0eS4KKyMgU3Vicm91dGluZXMgb2YgdGhlIGZvcm0gZG9fY21kXzxuYW1lPiBoZXJlIGRlZmluZSB0cmFuc2xhdGlvbnMKKyMgZm9yIExhVGVYIGNvbW1hbmRzIFw8bmFtZT4gZGVmaW5lZCBpbiB0aGUgY29ycmVzcG9uZGluZyAuc3R5IGZpbGUuCisKK3BhY2thZ2UgbWFpbjsKKwordXNlIEZpbGU6OkJhc2VuYW1lOworCisKK3N1YiBuZXh0X2FyZ3VtZW50eworICAgIG15ICRwYXJhbTsKKyAgICAkcGFyYW0gPSBtaXNzaW5nX2JyYWNlcygpCisgICAgICB1bmxlc3MgKChzLyRuZXh0X3BhaXJfcHJfcngvJHBhcmFtPSQyOycnL2VvKQorCSAgICAgIHx8KHMvJG5leHRfcGFpcl9yeC8kcGFyYW09JDI7JycvZW8pKTsKKyAgICByZXR1cm4gJHBhcmFtOworfQorCitzdWIgbmV4dF9vcHRpb25hbF9hcmd1bWVudHsKKyAgICBteSgkcGFyYW0sJHJ4KSA9ICgnJywgIl5cXHMqKFxcWyhbXl1dKilcXF0pPyIpOworICAgIHMvJHJ4LyRwYXJhbT0kMjsnJy9lbzsKKyAgICByZXR1cm4gJHBhcmFtOworfQorCitzdWIgbWFrZV9pY29uX2ZpbGVuYW1lKCQpeworICAgIG15KCRteW5hbWUsICRteWRpciwgJG15ZXh0KSA9IGZpbGVwYXJzZShAX1swXSwgJ1wuLionKTsKKyAgICBjaG9wICRteWRpcjsKKyAgICBpZiAoJG15ZGlyIGVxICcuJykgeworICAgICAgICAkbXlkaXIgPSAkSUNPTlNFUlZFUjsKKyAgICB9CisgICAgJG15ZXh0ID0gIi4kSU1BR0VfVFlQRSIKKyAgICAgIHVubGVzcyAkbXlleHQ7CisgICAgcmV0dXJuICIkbXlkaXIkZGQkbXluYW1lJG15ZXh0IjsKK30KKworc3ViIGdldF9saW5rX2ljb24oJCl7CisgICAgbXkgJHVybCA9IEBfWzBdOworICAgIGlmICgkT0ZGX1NJVEVfTElOS19JQ09OICYmICgkdXJsID1+IC9eWy1hLXpBLVowLTkuXSs6LykpIHsKKyAgICAgICAgIyBhYnNvbHV0ZSBVUkw7IGFzc3VtZSBpdCBwb2ludHMgb2ZmLXNpdGUKKyAgICAgICAgbXkgJGljb24gPSBtYWtlX2ljb25fZmlsZW5hbWUoJE9GRl9TSVRFX0xJTktfSUNPTik7CisgICAgICAgIHJldHVybiAoIiA8aW1nIHNyYz0nJGljb24nXG4iCisgICAgICAgICAgICAgICAgLiAiICBib3JkZXI9JzAnIGNsYXNzPSdvZmZzaXRlbGluayciCisgICAgICAgICAgICAgICAgLiAoJE9GRl9TSVRFX0xJTktfSUNPTl9IRUlHSFQKKyAgICAgICAgICAgICAgICAgICA/ICIgaGVpZ2h0PSckT0ZGX1NJVEVfTElOS19JQ09OX0hFSUdIVCciCisgICAgICAgICAgICAgICAgICAgOiAnJykKKyAgICAgICAgICAgICAgICAuICgkT0ZGX1NJVEVfTElOS19JQ09OX1dJRFRICisgICAgICAgICAgICAgICAgICAgPyAiIHdpZHRoPSckT0ZGX1NJVEVfTElOS19JQ09OX1dJRFRIJyIKKyAgICAgICAgICAgICAgICAgICA6ICcnKQorICAgICAgICAgICAgICAgIC4gIiBhbHQ9J1tvZmYtc2l0ZSBsaW5rXSdcbiIKKyAgICAgICAgICAgICAgICAuICIgID4iKTsKKyAgICB9CisgICAgcmV0dXJuICcnOworfQorCisjIFRoaXMgaXMgYSBmYWlybHkgc2ltcGxlIGhhY2s7IGl0IHN1cHBvcnRzIFxsZXQgd2hlbiBpdCBpcyB1c2VkIHRvIGNyZWF0ZQorIyAob3IgcmVkZWZpbmUpIGEgbWFjcm8gdG8gZXhhY3RseSBiZSBzb21lIG90aGVyIG1hY3JvOiBcbGV0XG5ld25hbWU9XG9sZG5hbWUuCisjIE1hbnkgcG9zc2libGUgdXNlcyBvZiBcbGV0IGFyZW4ndCBzdXBwb3J0ZWQgb3IgYXJlbid0IHN1cHBvcnRlZCBjb3JyZWN0bHkuCisjCitzdWIgZG9fY21kX2xldHsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAkbWF0Y2hlZCA9IDA7CisgICAgcy9bXFxdKFthLXpBLVpdKylccyooPVxzKik/W1xcXShbYS16QS1aXSopLyRtYXRjaGVkPTE7ICcnL2U7CisgICAgaWYgKCRtYXRjaGVkKSB7CisJbXkoJG5ldywgJG9sZCkgPSAoJDEsICQzKTsKKwlldmFsICJzdWIgZG9fY21kXyRuZXcgeyBkb19jbWRfJG9sZCIgLiAnKEBfKTsgfSc7CisJcHJpbnQgIlxuZGVmaW5pbmcgaGFuZGxlciBmb3IgXFwkbmV3IHVzaW5nIFxcJG9sZFxuIjsKKyAgICB9CisgICAgZWxzZSB7CisJcy9bXFxdKFthLXpBLVpdKylccyooPVxzKik/KFteXFxdKS8kbWF0Y2hlZD0xOyAnJy9lczsKKwlpZiAoJG1hdGNoZWQpIHsKKwkgICAgbXkoJG5ldywgJGNoYXIpID0gKCQxLCAkMyk7CisJICAgIGV2YWwgInN1YiBkb19jbWRfJG5ldyB7IFwiXFwkY2hhclwiIC4gXEBfWzBdOyB9IjsKKwkgICAgcHJpbnQgIlxuZGVmaW5pbmcgaGFuZGxlciBmb3IgXFwkbmV3IHRvIGluc2VydCAnJGNoYXInXG4iOworCX0KKwllbHNlIHsKKwkgICAgd3JpdGVfd2FybmluZ3MoIkNvdWxkIG5vdCBpbnRlcnByZXQgXFxsZXQgY29uc3RydWN0Li4uIik7CisJfQorICAgIH0KKyAgICByZXR1cm4gJF87Cit9CisKKworIyB0aGUgb2xkZXIgdmVyc2lvbiBvZiBMYVRlWDJIVE1MIHdlIHVzZSBkb2Vzbid0IHN1cHBvcnQgdGhpcywgYnV0IHdlIHVzZSBpdDoKKworc3ViIGRvX2NtZF90ZXh0YXNjaWl0aWxkZXsgJ34nIC4gQF9bMF07IH0KKworCisjIHdvcmRzIHR5cGVzZXQgaW4gYSBzcGVjaWFsIHdheSAobm90IGluIEhUTUwgdGhvdWdoKQorCitzdWIgZG9fY21kX0FCQ3sgJ0FCQycgLiBAX1swXTsgfQorc3ViIGRvX2NtZF9VTklYeyAnVW5peCcuIEBfWzBdOyB9CitzdWIgZG9fY21kX0FTQ0lJeyAnQVNDSUknIC4gQF9bMF07IH0KK3N1YiBkb19jbWRfUE9TSVh7ICdQT1NJWCcgLiBAX1swXTsgfQorc3ViIGRvX2NtZF9DeyAnQycgLiBAX1swXTsgfQorc3ViIGRvX2NtZF9DcHB7ICdDKysnIC4gQF9bMF07IH0KK3N1YiBkb19jbWRfRU9GeyAnRU9GJyAuIEBfWzBdOyB9CitzdWIgZG9fY21kX05VTEx7ICc8dHQgY2xhc3M9ImNvbnN0YW50Ij5OVUxMPC90dD4nIC4gQF9bMF07IH0KKworc3ViIGRvX2NtZF9leyAnJiM5MjsnIC4gQF9bMF07IH0KKworJERFVkVMT1BFUl9BRERSRVNTID0gJyc7CiskU0hPUlRfVkVSU0lPTiA9ICcnOworJFBBQ0tBR0VfVkVSU0lPTiA9ICcnOworCitzdWIgZG9fY21kX3ZlcnNpb257ICRQQUNLQUdFX1ZFUlNJT04gLiBAX1swXTsgfQorc3ViIGRvX2NtZF9zaG9ydHZlcnNpb257ICRTSE9SVF9WRVJTSU9OIC4gQF9bMF07IH0KK3N1YiBkb19jbWRfcmVsZWFzZXsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICAkUEFDS0FHRV9WRVJTSU9OID0gbmV4dF9hcmd1bWVudCgpOworICAgIHJldHVybiAkXzsKK30KKworc3ViIGRvX2NtZF9zZXRzaG9ydHZlcnNpb257CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgJFNIT1JUX1ZFUlNJT04gPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgcmV0dXJuICRfOworfQorCitzdWIgZG9fY21kX2F1dGhvcmFkZHJlc3N7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgJERFVkVMT1BFUl9BRERSRVNTID0gbmV4dF9hcmd1bWVudCgpOworICAgIHJldHVybiAkXzsKK30KKworI3N1YiBkb19jbWRfZGV2ZWxvcGVyeyBkb19jbWRfYXV0aG9yKEBfWzBdKTsgfQorI3N1YiBkb19jbWRfZGV2ZWxvcGVyc3sgZG9fY21kX2F1dGhvcihAX1swXSk7IH0KKyNzdWIgZG9fY21kX2RldmVsb3BlcnNhZGRyZXNzeyBkb19jbWRfYXV0aG9yYWRkcmVzcyhAX1swXSk7IH0KKworc3ViIGRvX2NtZF9oYWNrc2NvcmV7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbmV4dF9hcmd1bWVudCgpOworICAgIHJldHVybiAnXycgLiAkXzsKK30KKworc3ViIHVzZV93cmFwcGVyc3sKKyAgICBsb2NhbCgkXywkYmVmb3JlLCRhZnRlcikgPSBAXzsKKyAgICBteSAkc3R1ZmYgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgcmV0dXJuICRiZWZvcmUgLiAkc3R1ZmYgLiAkYWZ0ZXIgLiAkXzsKK30KKworJElOX0RFU0NfSEFORExFUiA9IDA7CitzdWIgZG9fY21kX29wdGlvbmFseworICAgIGlmICgkSU5fREVTQ19IQU5ETEVSKSB7CisgICAgICAgIHJldHVybiB1c2Vfd3JhcHBlcnMoQF9bMF0sICI8L3Zhcj48YmlnPlxbPC9iaWc+PHZhcj4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8L3Zhcj48YmlnPlxdPC9iaWc+PHZhcj4iKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiB1c2Vfd3JhcHBlcnMoQF9bMF0sICI8YmlnPlxbPC9iaWc+IiwgIjxiaWc+XF08L2JpZz4iKTsKKyAgICB9Cit9CisKKyMgTG9naWNhbCBmb3JtYXR0aW5nIChzb21lIGJhc2VkIG9uIHRleGluZm8pLCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8KKyMgbWluaW1hbGlzdCBIVE1MLiAgVGhlICJtaW5pbWFsaXN0IiBpcyBwcmltYXJpbHkgdG8gcmVkdWNlIHRoZSBzaXplIG9mCisjIG91dHB1dCBmaWxlcyBmb3IgdXNlcnMgdGhhdCByZWFkIHRoZW0gb3ZlciB0aGUgbmV0d29yayByYXRoZXIgdGhhbgorIyBmcm9tIGxvY2FsIHJlcG9zaXRvcmllcy4KKworIyBcZmlsZSBhbmQgXHNhbXAgYXJlIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlIHNpbmNlIHRoZXkgc2NyZXcgdXAgZm9udGxvY2suCisKK3N1YiBkb19jbWRfcHl0eXBleyByZXR1cm4gQF9bMF07IH0KK3N1YiBkb19jbWRfbWFrZXZhcnsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPHNwYW4gY2xhc3M9Im1ha2V2YXIiPicsICc8L3NwYW4+Jyk7IH0KK3N1YiBkb19jbWRfY29kZXsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPGNvZGU+JywgJzwvY29kZT4nKTsgfQorc3ViIGRvX2NtZF9tb2R1bGV7CisgICAgcmV0dXJuIHVzZV93cmFwcGVycyhAX1swXSwgJzx0dCBjbGFzcz0ibW9kdWxlIj4nLCAnPC90dD4nKTsgfQorc3ViIGRvX2NtZF9rZXl3b3JkeworICAgIHJldHVybiB1c2Vfd3JhcHBlcnMoQF9bMF0sICc8dHQgY2xhc3M9ImtleXdvcmQiPicsICc8L3R0PicpOyB9CitzdWIgZG9fY21kX2V4Y2VwdGlvbnsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPHR0IGNsYXNzPSJleGNlcHRpb24iPicsICc8L3R0PicpOyB9CitzdWIgZG9fY21kX2NsYXNzeworICAgIHJldHVybiB1c2Vfd3JhcHBlcnMoQF9bMF0sICc8dHQgY2xhc3M9ImNsYXNzIj4nLCAnPC90dD4nKTsgfQorc3ViIGRvX2NtZF9mdW5jdGlvbnsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPHR0IGNsYXNzPSJmdW5jdGlvbiI+JywgJzwvdHQ+Jyk7IH0KK3N1YiBkb19jbWRfY29uc3RhbnR7CisgICAgcmV0dXJuIHVzZV93cmFwcGVycyhAX1swXSwgJzx0dCBjbGFzcz0iY29uc3RhbnQiPicsICc8L3R0PicpOyB9CitzdWIgZG9fY21kX21lbWJlcnsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPHR0IGNsYXNzPSJtZW1iZXIiPicsICc8L3R0PicpOyB9CitzdWIgZG9fY21kX21ldGhvZHsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPHR0IGNsYXNzPSJtZXRob2QiPicsICc8L3R0PicpOyB9CitzdWIgZG9fY21kX2NmdW5jdGlvbnsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPHR0IGNsYXNzPSJjZnVuY3Rpb24iPicsICc8L3R0PicpOyB9CitzdWIgZG9fY21kX2NkYXRheworICAgIHJldHVybiB1c2Vfd3JhcHBlcnMoQF9bMF0sICc8dHQgY2xhc3M9ImNkYXRhIj4nLCAnPC90dD4nKTsgfQorc3ViIGRvX2NtZF9jdHlwZXsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPHR0IGNsYXNzPSJjdHlwZSI+JywgJzwvdHQ+Jyk7IH0KK3N1YiBkb19jbWRfcmVnZXhweworICAgIHJldHVybiB1c2Vfd3JhcHBlcnMoQF9bMF0sICc8dHQgY2xhc3M9InJlZ2V4cCI+JywgJzwvdHQ+Jyk7IH0KK3N1YiBkb19jbWRfY2hhcmFjdGVyeworICAgIHJldHVybiB1c2Vfd3JhcHBlcnMoQF9bMF0sICciPHR0IGNsYXNzPSJjaGFyYWN0ZXIiPicsICc8L3R0PiInKTsgfQorc3ViIGRvX2NtZF9wcm9ncmFteworICAgIHJldHVybiB1c2Vfd3JhcHBlcnMoQF9bMF0sICc8YiBjbGFzcz0icHJvZ3JhbSI+JywgJzwvYj4nKTsgfQorc3ViIGRvX2NtZF9wcm9ncmFtb3B0eworICAgIHJldHVybiB1c2Vfd3JhcHBlcnMoQF9bMF0sICc8YiBjbGFzcz0icHJvZ3JhbW9wdCI+JywgJzwvYj4nKTsgfQorc3ViIGRvX2NtZF9sb25ncHJvZ3JhbW9wdHsKKyAgICAjIG5vdGUgdGhhdCB0aGUgLS0tIHdpbGwgYmUgbGF0ZXIgY29udmVydGVkIHRvIC0tIGJ5IExhVGVYMkhUTUwKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPGIgY2xhc3M9InByb2dyYW1vcHQiPi0tLScsICc8L2I+Jyk7IH0KK3N1YiBkb19jbWRfZW1haWx7CisgICAgcmV0dXJuIHVzZV93cmFwcGVycyhAX1swXSwgJzxzcGFuIGNsYXNzPSJlbWFpbCI+JywgJzwvc3Bhbj4nKTsgfQorc3ViIGRvX2NtZF9taW1ldHlwZXsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPHNwYW4gY2xhc3M9Im1pbWV0eXBlIj4nLCAnPC9zcGFuPicpOyB9CitzdWIgZG9fY21kX3ZhcnsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAiPHZhcj4iLCAiPC92YXI+Iik7IH0KK3N1YiBkb19jbWRfZGZueworICAgIHJldHVybiB1c2Vfd3JhcHBlcnMoQF9bMF0sICc8aSBjbGFzcz0iZGZuIj4nLCAnPC9pPicpOyB9CitzdWIgZG9fY21kX2VtcGh7CisgICAgcmV0dXJuIHVzZV93cmFwcGVycyhAX1swXSwgJzxpPicsICc8L2k+Jyk7IH0KK3N1YiBkb19jbWRfZmlsZXsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPHNwYW4gY2xhc3M9ImZpbGUiPicsICc8L3NwYW4+Jyk7IH0KK3N1YiBkb19jbWRfZmlsZW5xeworICAgIHJldHVybiBkb19jbWRfZmlsZShAX1swXSk7IH0KK3N1YiBkb19jbWRfc2FtcHsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnIjx0dCBjbGFzcz0ic2FtcCI+JywgJzwvdHQ+IicpOyB9CitzdWIgZG9fY21kX2tiZHsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPGtiZD4nLCAnPC9rYmQ+Jyk7IH0KK3N1YiBkb19jbWRfc3Ryb25neworICAgIHJldHVybiB1c2Vfd3JhcHBlcnMoQF9bMF0sICc8Yj4nLCAnPC9iPicpOyB9CitzdWIgZG9fY21kX3RleHRiZnsKKyAgICByZXR1cm4gdXNlX3dyYXBwZXJzKEBfWzBdLCAnPGI+JywgJzwvYj4nKTsgfQorc3ViIGRvX2NtZF90ZXh0aXR7CisgICAgcmV0dXJuIHVzZV93cmFwcGVycyhAX1swXSwgJzxpPicsICc8L2k+Jyk7IH0KKworc3ViIGRvX2NtZF9tb3JlYXJnc3sKKyAgICByZXR1cm4gJy4uLicgLiBAX1swXTsgfQorc3ViIGRvX2NtZF91bnNwZWNpZmllZHsKKyAgICByZXR1cm4gJy4uLicgLiBAX1swXTsgfQorCisKK3N1YiBkb19jbWRfcmVmbW9kdWxleworICAgICMgSW5zZXJ0IHRoZSByaWdodCBtYWdpYyB0byBqdW1wIHRvIHRoZSBtb2R1bGUgZGVmaW5pdGlvbi4KKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAka2V5ID0gbmV4dF9vcHRpb25hbF9hcmd1bWVudCgpOworICAgIG15ICRtb2R1bGUgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgJGtleSA9ICRtb2R1bGUKKyAgICAgICAgdW5sZXNzICRrZXk7CisgICAgcmV0dXJuICI8dHQgY2xhc3M9J21vZHVsZSc+PGEgaHJlZj0nbW9kdWxlLSRrZXkuaHRtbCc+JG1vZHVsZTwvYT48L3R0PiIKKyAgICAgIC4gJF87Cit9CisKK3N1YiBkb19jbWRfbmV3c2dyb3VweworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICRuZXdzZ3JvdXAgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJGljb24gPSBnZXRfbGlua19pY29uKCJuZXdzOiRuZXdzZ3JvdXAiKTsKKyAgICBteSAkc3R1ZmYgPSAiPGEgY2xhc3M9J25ld3Nncm91cCcgaHJlZj0nbmV3czokbmV3c2dyb3VwJz4iCisgICAgICAuICIkbmV3c2dyb3VwJGljb248L2E+IjsKKyAgICByZXR1cm4gJHN0dWZmIC4gJF87Cit9CisKK3N1YiBkb19jbWRfZW52dmFyeworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICRlbnZ2YXIgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkoJG5hbWUsJGFuYW1lLCRhaHJlZikgPSBuZXdfbGlua19pbmZvKCk7CisgICAgIyBUaGUgPHR0PiBoZXJlIGlzIHJlYWxseSB0byBrZWVwIGJ1aWxkaW5kZXgucHkgZnJvbSBtYWtpbmcKKyAgICAjIHRoZSB2YXJpYWJsZSBuYW1lIGNhc2UtaW5zZW5zaXRpdmUuCisgICAgYWRkX2luZGV4X2VudHJ5KCJlbnZpcm9ubWVudCB2YXJpYWJsZXMhJGVudnZhckA8dHQ+JGVudnZhcjwvdHQ+IiwKKwkJICAgICRhaHJlZik7CisgICAgYWRkX2luZGV4X2VudHJ5KCIkZW52dmFyIChlbnZpcm9ubWVudCB2YXJpYWJsZSkiLCAkYWhyZWYpOworICAgICRhbmFtZSA9fiBzLzxhLzxhIGNsYXNzPSJlbnZ2YXIiLzsKKyAgICByZXR1cm4gIiRhbmFtZSRlbnZ2YXI8L2E+IiAuICRfOworfQorCitzdWIgZG9fY21kX3VybHsKKyAgICAjIHVzZSB0aGUgVVJMIGFzIGJvdGggdGV4dCBhbmQgaHlwZXJsaW5rCisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJHVybCA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkaWNvbiA9IGdldF9saW5rX2ljb24oJHVybCk7CisgICAgJHVybCA9fiBzL34vJiMxMjY7L2c7CisgICAgcmV0dXJuICI8YSBjbGFzcz1cInVybFwiIGhyZWY9XCIkdXJsXCI+JHVybCRpY29uPC9hPiIgLiAkXzsKK30KKworc3ViIGRvX2NtZF9tYW5wYWdleworICAgICMgdHdvIHBhcmFtZXRlcnM6ICBcbWFucGFnZXtuYW1lfXtzZWN0aW9ufQorICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICRwYWdlID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRzZWN0aW9uID0gbmV4dF9hcmd1bWVudCgpOworICAgIHJldHVybiAiPHNwYW4gY2xhc3M9J21hbnBhZ2UnPjxpPiRwYWdlPC9pPigkc2VjdGlvbik8L3NwYW4+IiAuICRfOworfQorCiskUEVQX0ZPUk1BVCA9ICJodHRwOi8vcHl0aG9uLnNvdXJjZWZvcmdlLm5ldC9wZXBzL3BlcC1YWFhYLmh0bWwiOworJFJGQ19GT1JNQVQgPSAiaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjWFhYWC50eHQiOworCitzdWIgZ2V0X3JmY191cmwoJCQpeworICAgIG15KCRyZmNudW0sICRmb3JtYXQpID0gQF87CisgICAgJHJmY251bSA9IHNwcmludGYoIiUwNGQiLCAkcmZjbnVtKTsKKyAgICAkZm9ybWF0ID0gIiRmb3JtYXQiOworICAgICRmb3JtYXQgPX4gcy9YWFhYLyRyZmNudW0vOworICAgIHJldHVybiAkZm9ybWF0OworfQorCitzdWIgZG9fY21kX3BlcHsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAkcmZjbnVtYmVyID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRpZCA9ICJyZmNyZWYtIiAuICsrJGdsb2JhbHsnbWF4X2lkJ307CisgICAgbXkgJGhyZWYgPSBnZXRfcmZjX3VybCgkcmZjbnVtYmVyLCAkUEVQX0ZPUk1BVCk7CisgICAgbXkgJGljb24gPSBnZXRfbGlua19pY29uKCRocmVmKTsKKyAgICAjIFNhdmUgdGhlIHJlZmVyZW5jZQorICAgIG15ICRuc3RyID0gZ2VuX2luZGV4X2lkKCJQeXRob24gRW5oYW5jZW1lbnQgUHJvcG9zYWxzIVBFUCAkcmZjbnVtYmVyIiwgJycpOworICAgICRpbmRleHskbnN0cn0gLj0gbWFrZV9oYWxmX2hyZWYoIiRDVVJSRU5UX0ZJTEUjJGlkIik7CisgICAgcmV0dXJuICgiPGEgY2xhc3M9XCJyZmNcIiBuYW1lPVwiJGlkXCJcbmhyZWY9XCIkaHJlZlwiPlBFUCAkcmZjbnVtYmVyIgorICAgICAgICAgICAgLiAiJGljb248L2E+IiAuICRfKTsKK30KKworc3ViIGRvX2NtZF9yZmN7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJHJmY251bWJlciA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkaWQgPSAicmZjcmVmLSIgLiArKyRnbG9iYWx7J21heF9pZCd9OworICAgIG15ICRocmVmID0gZ2V0X3JmY191cmwoJHJmY251bWJlciwgJFJGQ19GT1JNQVQpOworICAgIG15ICRpY29uID0gZ2V0X2xpbmtfaWNvbigkaHJlZik7CisgICAgIyBTYXZlIHRoZSByZWZlcmVuY2UKKyAgICBteSAkbnN0ciA9IGdlbl9pbmRleF9pZCgiUkZDIVJGQyAkcmZjbnVtYmVyIiwgJycpOworICAgICRpbmRleHskbnN0cn0gLj0gbWFrZV9oYWxmX2hyZWYoIiRDVVJSRU5UX0ZJTEUjJGlkIik7CisgICAgcmV0dXJuICgiPGEgY2xhc3M9XCJyZmNcIiBuYW1lPVwiJGlkXCJcbmhyZWY9XCIkaHJlZlwiPlJGQyAkcmZjbnVtYmVyIgorICAgICAgICAgICAgLiAiJGljb248L2E+IiAuICRfKTsKK30KKworc3ViIGRvX2NtZF9jaXRldGl0bGV7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJHVybCA9IG5leHRfb3B0aW9uYWxfYXJndW1lbnQoKTsKKyAgICBteSAkdGl0bGUgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJGljb24gPSBnZXRfbGlua19pY29uKCR1cmwpOworICAgIG15ICRyZXBsID0gJyc7CisgICAgaWYgKCR1cmwpIHsKKyAgICAgICAgJHJlcGwgPSAoIjxlbSBjbGFzcz0nY2l0ZXRpdGxlJz48YVxuIgorICAgICAgICAgICAgICAgICAuICIgaHJlZj0nJHVybCdcbiIKKyAgICAgICAgICAgICAgICAgLiAiIHRpdGxlPSckdGl0bGUnXG4iCisgICAgICAgICAgICAgICAgIC4gIiA+JHRpdGxlJGljb248L2E+PC9lbT4iKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgICRyZXBsID0gIjxlbSBjbGFzcz0nY2l0ZXRpdGxlJ1xuID4kdGl0bGU8L2VtPiI7CisgICAgfQorICAgIHJldHVybiAkcmVwbCAuICRfOworfQorCitzdWIgZG9fY21kX2RlcHJlY2F0ZWR7CisgICAgIyB0d28gcGFyYW1ldGVyczogIFxkZXByZWNhdGVke3ZlcnNpb259e3doYXR0b2RvfQorICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICRyZWxlYXNlID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRyZWFzb24gPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgcmV0dXJuICgnPGRpdiBjbGFzcz0idmVyc2lvbm5vdGUiPicKKyAgICAgICAgICAgIC4gIjxiPkRlcHJlY2F0ZWQgc2luY2UgcmVsZWFzZSAkcmVsZWFzZS48L2I+IgorICAgICAgICAgICAgLiAiXG4kcmVhc29uPC9kaXY+PHA+IgorICAgICAgICAgICAgLiAkXyk7Cit9CisKK3N1YiBkb19jbWRfdmVyc2lvbmFkZGVkeworICAgICMgb25lIHBhcmFtZXRlcjogIFx2ZXJzaW9uYWRkZWR7dmVyc2lvbn0KKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAkcmVsZWFzZSA9IG5leHRfYXJndW1lbnQoKTsKKyAgICByZXR1cm4gKCJcbjxzcGFuIGNsYXNzPSd2ZXJzaW9ubm90ZSc+TmV3IGluIHZlcnNpb24gJHJlbGVhc2UuPC9zcGFuPlxuIgorICAgICAgICAgICAgLiAkXyk7Cit9CisKK3N1YiBkb19jbWRfdmVyc2lvbmNoYW5nZWR7CisgICAgIyBvbmUgcGFyYW1ldGVyOiAgXHZlcnNpb25jaGFuZ2Vke3ZlcnNpb259CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJGV4cGxhbmF0aW9uID0gbmV4dF9vcHRpb25hbF9hcmd1bWVudCgpOworICAgIG15ICRyZWxlYXNlID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICR0ZXh0ID0gIkNoYW5nZWQgaW4gdmVyc2lvbiAkcmVsZWFzZS4iOworICAgIGlmICgkZXhwbGFuYXRpb24pIHsKKyAgICAgICAgJHRleHQgPSAiQ2hhbmdlZCBpbiB2ZXJzaW9uICRyZWxlYXNlOlxuJGV4cGxhbmF0aW9uLiI7CisgICAgfQorICAgIHJldHVybiAiXG48c3BhbiBjbGFzcz0ndmVyc2lvbm5vdGUnPiR0ZXh0PC9zcGFuPlxuIiAuICRfOworfQorCisjCisjIFRoZXNlIGZ1bmN0aW9uIGhhbmRsZSBwbGF0Zm9ybSBkZXBlbmRlbmN5IHRyYWNraW5nLgorIworc3ViIGRvX2NtZF9wbGF0Zm9ybXsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAkcGxhdGZvcm0gPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgJE1vZHVsZVBsYXRmb3Jtc3siPHR0IGNsYXNzPSdtb2R1bGUnPiRUSElTX01PRFVMRTwvdHQ+In0gPSAkcGxhdGZvcm07CisgICAgJHBsYXRmb3JtID0gIk1hY2ludG9zaCIKKyAgICAgIGlmICRwbGF0Zm9ybSBlcSAnTWFjJzsKKyAgICByZXR1cm4gIlxuPHAgY2xhc3M9J2F2YWlsYWJpbGl0eSc+QXZhaWxhYmlsaXR5OiA8c3BhbiIKKyAgICAgIC4gIlxuIGNsYXNzPSdwbGF0Zm9ybSc+JHBsYXRmb3JtPC9zcGFuPi48L3A+XG4iIC4gJF87Cit9CisKKyRJR05PUkVfUExBVEZPUk1fQU5OT1RBVElPTiA9ICcnOworc3ViIGRvX2NtZF9pZ25vcmVQbGF0Zm9ybUFubm90YXRpb257CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgJElHTk9SRV9QTEFURk9STV9BTk5PVEFUSU9OID0gbmV4dF9hcmd1bWVudCgpOworICAgIHJldHVybiAkXzsKK30KKworCisjIGluZGV4IGNvbW1hbmRzCisKKyRJTkRFWF9TVUJJVEVNID0gIiI7CisKK3N1YiBnZXRfaW5kZXhzdWJpdGVteworICAgIHJldHVybiAkSU5ERVhfU1VCSVRFTSA/ICIgJElOREVYX1NVQklURU0iIDogJyc7Cit9CisKK3N1YiBkb19jbWRfc2V0aW5kZXhzdWJpdGVteworICAgIGxvY2FsKCRfKSA9IEBfOworICAgICRJTkRFWF9TVUJJVEVNID0gbmV4dF9hcmd1bWVudCgpOworICAgIHJldHVybiAkXzsKK30KKworc3ViIGRvX2NtZF93aXRoc3ViaXRlbXsKKyAgICAjIFdlIGNhbid0IHJlYWxseSBkbyB0aGUgcmlnaHQgdGhpbmcsIGJlY2F1c2UgTGFUZVgySFRNTCBkb2Vzbid0CisgICAgIyBkbyB0aGluZ3MgaW4gdGhlIHJpZ2h0IG9yZGVyLCBidXQgd2UgbmVlZCB0byBhdCBsZWFzdCBzdHJpcCB0aGlzIHN0dWZmCisgICAgIyBvdXQsIGFuZCBsZWF2ZSBhbnl0aGluZyB0aGF0IHRoZSBzZWNvbmQgYXJndW1lbnQgZXhwYW5kZWQgb3V0IHRvLgorICAgICMKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAkb2xkc3ViaXRlbSA9ICRJTkRFWF9TVUJJVEVNOworICAgICRJTkRFWF9TVUJJVEVNID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRzdHVmZiA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkYnJfaWQgPSArKyRnbG9iYWxzeydtYXhfaWQnfTsKKyAgICBteSAkbWFya2VyID0gIiRPJGJyX2lkJEMiOworICAgIHJldHVybgorICAgICAgJHN0dWZmCisgICAgICAuICJcXHNldGluZGV4c3ViaXRlbSRtYXJrZXIkb2xkc3ViaXRlbSRtYXJrZXIiCisgICAgICAuICRfOworfQorCisjIFRoaXMgaXMgdGhlIHByb2xvZ3VlIG1hY3JvIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHN0YXJ0IHdyaXRpbmcgdGhlCisjIG1vZFxqb2JuYW1lLmlkeCBmaWxlOyB3ZSBjYW4ganVzdCBpZ25vcmUgaXQuICAoRGVmaW5pbmcgdGhpcyBzdXBwcmVzc2VzCisjIGEgd2FybmluZyB0aGF0IFxtYWtlbW9kaW5kZXggaXMgdW5rbm93bi4pCisjCitzdWIgZG9fY21kX21ha2Vtb2RpbmRleHsgcmV0dXJuIEBfWzBdOyB9CisKKyMgV2UncmUgaW4gdGhlIGRvY3VtZW50IHN1YmRpcmVjdG9yeSB3aGVuIHRoaXMgaGFwcGVucyEKKyMKK29wZW4oSURYRklMRSwgJz5pbmRleC5kYXQnKSB8fCBkaWUgIlxuJCFcbiI7CitvcGVuKElOVExBQkVMUywgJz5pbnRsYWJlbHMucGwnKSB8fCBkaWUgIlxuJCFcbiI7CitwcmludCBJTlRMQUJFTFMgIiVpbnRlcm5hbF9sYWJlbHMgPSAoKTtcbiI7CitwcmludCBJTlRMQUJFTFMgIjE7CQkjIGhhY2sgaW4gY2FzZSB0aGVyZSBhcmUgbm8gZW50cmllc1xuXG4iOworCisjIFVzaW5nIFwwIGZvciB0aGlzIGlzIGJhZCBiZWNhdXNlIHdlIGNhbid0IHVzZSBjb21tb24gdG9vbHMgdG8gd29yayB3aXRoIHRoZQorIyByZXN1bHRpbmcgZmlsZXMuICBUaGluZ3MgbGlrZSBncmVwIGNhbiBiZSB1c2VmdWwgd2l0aCB0aGlzIHN0dWZmIQorIworJElEWEZJTEVfRklFTERfU0VQID0gIlwxIjsKKworc3ViIHdyaXRlX2lkeGZpbGV7CisgICAgbXkgKCRhaHJlZiwgJHN0cikgPSBAXzsKKyAgICBwcmludCBJRFhGSUxFICRhaHJlZiwgJElEWEZJTEVfRklFTERfU0VQLCAkc3RyLCAiXG4iOworfQorCisKK3N1YiBnZW5fbGlua3sKKyAgICBteSgkbm9kZSwkdGFyZ2V0KSA9IEBfOworICAgIHByaW50IElOVExBQkVMUyAiXCRpbnRlcm5hbF9sYWJlbHN7XCIkdGFyZ2V0XCJ9ID0gXCIkVVJMLyRub2RlXCI7XG4iOworICAgIHJldHVybiAiPGEgaHJlZj0nJG5vZGUjJHRhcmdldCc+IjsKK30KKworc3ViIGFkZF9pbmRleF9lbnRyeXsKKyAgICAjIGFkZCBhbiBlbnRyeSB0byB0aGUgaW5kZXggc3RydWN0dXJlczsgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUKKyAgICBteSgkc3RyLCRhaHJlZikgPSBAXzsKKyAgICAkc3RyID0gZ2VuX2luZGV4X2lkKCRzdHIsICcnKTsKKyAgICAkaW5kZXh7JHN0cn0gLj0gJGFocmVmOworICAgIHdyaXRlX2lkeGZpbGUoJGFocmVmLCAkc3RyKTsKK30KKworc3ViIG5ld19saW5rX2luZm97CisgICAgbXkgJG5hbWUgPSAibDJoLSIgLiArKyRnbG9iYWxzeydtYXhfaWQnfTsKKyAgICBteSAkYW5hbWUgPSAiPGEgbmFtZT0nJG5hbWUnPiI7CisgICAgbXkgJGFocmVmID0gZ2VuX2xpbmsoJENVUlJFTlRfRklMRSwgJG5hbWUpOworICAgIHJldHVybiAoJG5hbWUsICRhbmFtZSwgJGFocmVmKTsKK30KKworJEluZGV4TWFjcm9QYXR0ZXJuID0gJyc7CitzdWIgZGVmaW5lX2luZGV4aW5nX21hY3JveworICAgIG15ICRjb3VudCA9IEBfOworICAgIG15ICRpID0gMDsKKyAgICBmb3IgKDsgJGkgPCAkY291bnQ7ICsrJGkpIHsKKwlteSAkbmFtZSA9IEBfWyRpXTsKKwlteSAkY21kID0gImlkeF9jbWRfJG5hbWUiOworCWRpZSAiXG5ObyBmdW5jdGlvbiAkY21kKCkgZGVmaW5lZCFcbiIKKwkgIGlmICghZGVmaW5lZCAmJGNtZCk7CisJZXZhbCAoInN1YiBkb19jbWRfJG5hbWUgeyByZXR1cm4gcHJvY2Vzc19pbmRleF9tYWNyb3MoIgorCSAgICAgIC4gIlxAX1swXSwgJyRuYW1lJyk7IH0iKTsKKwlpZiAobGVuZ3RoKCRJbmRleE1hY3JvUGF0dGVybikgPT0gMCkgeworCSAgICAkSW5kZXhNYWNyb1BhdHRlcm4gPSAiJG5hbWUiOworCX0KKwllbHNlIHsKKwkgICAgJEluZGV4TWFjcm9QYXR0ZXJuIC49ICJ8JG5hbWUiOworCX0KKyAgICB9Cit9CisKKyRERUJVR19JTkRFWElORyA9IDA7CitzdWIgcHJvY2Vzc19pbmRleF9tYWNyb3N7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJGNtZG5hbWUgPSBAX1sxXTsJIyBUaGlzIGlzIHdoYXQgdHJpZ2dlcmVkIHVzIGluIHRoZSBmaXJzdCBwbGFjZTsKKwkJCQkjIHdlIGtub3cgaXQncyByZWFsLCBzbyBqdXN0IHByb2Nlc3MgaXQuCisgICAgbXkoJG5hbWUsJGFuYW1lLCRhaHJlZikgPSBuZXdfbGlua19pbmZvKCk7CisgICAgbXkgJGNtZCA9ICJpZHhfY21kXyRjbWRuYW1lIjsKKyAgICBwcmludCAiXG5JbmRleGluZzogXFwkY21kbmFtZSIKKyAgICAgIGlmICRERUJVR19JTkRFWElORzsKKyAgICAmJGNtZCgkYWhyZWYpOwkJIyBtb2RpZmllcyAkXyBhbmQgYWRkcyBpbmRleCBlbnRyaWVzCisgICAgd2hpbGUgKC9eW1xzXG5dKlxcKCRJbmRleE1hY3JvUGF0dGVybik8LykgeworCSRjbWRuYW1lID0gIiQxIjsKKwlwcmludCAiIFxcJGNtZG5hbWUiCisJICBpZiAkREVCVUdfSU5ERVhJTkc7CisJJGNtZCA9ICJpZHhfY21kXyRjbWRuYW1lIjsKKwlpZiAoIWRlZmluZWQgJiRjbWQpIHsKKwkgICAgbGFzdDsKKwl9CisJZWxzZSB7CisJICAgIHMvXltcc1xuXSpcXCRjbWRuYW1lLy87CisJICAgICYkY21kKCRhaHJlZik7CisJfQorICAgIH0KKyAgICBpZiAoL15bIFx0XHJcbl0vKSB7CisgICAgICAgICRfID0gc3Vic3RyKCRfLCAxKTsKKyAgICB9CisgICAgcmV0dXJuICIkYW5hbWUkYW5jaG9yX2ludmlzaWJsZV9tYXJrPC9hPiIgLiAkXzsKK30KKworZGVmaW5lX2luZGV4aW5nX21hY3JvKCdpbmRleCcpOworc3ViIGlkeF9jbWRfaW5kZXh7CisgICAgbXkgJHN0ciA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBhZGRfaW5kZXhfZW50cnkoIiRzdHIiLCBAX1swXSk7Cit9CisKK2RlZmluZV9pbmRleGluZ19tYWNybygna3dpbmRleCcpOworc3ViIGlkeF9jbWRfa3dpbmRleHsKKyAgICBteSAkc3RyID0gbmV4dF9hcmd1bWVudCgpOworICAgIGFkZF9pbmRleF9lbnRyeSgiPHR0PiRzdHI8L3R0PiFrZXl3b3JkIiwgQF9bMF0pOworICAgIGFkZF9pbmRleF9lbnRyeSgia2V5d29yZCE8dHQ+JHN0cjwvdHQ+IiwgQF9bMF0pOworfQorCitkZWZpbmVfaW5kZXhpbmdfbWFjcm8oJ2luZGV4aWknKTsKK3N1YiBpZHhfY21kX2luZGV4aWl7CisgICAgbXkgJHN0cjEgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJHN0cjIgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgYWRkX2luZGV4X2VudHJ5KCIkc3RyMSEkc3RyMiIsIEBfWzBdKTsKKyAgICBhZGRfaW5kZXhfZW50cnkoIiRzdHIyISRzdHIxIiwgQF9bMF0pOworfQorCitkZWZpbmVfaW5kZXhpbmdfbWFjcm8oJ2luZGV4aWlpJyk7CitzdWIgaWR4X2NtZF9pbmRleGlpaXsKKyAgICBteSAkc3RyMSA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkc3RyMiA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkc3RyMyA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBhZGRfaW5kZXhfZW50cnkoIiRzdHIxISRzdHIyICRzdHIzIiwgQF9bMF0pOworICAgIGFkZF9pbmRleF9lbnRyeSgiJHN0cjIhJHN0cjMsICRzdHIxIiwgQF9bMF0pOworICAgIGFkZF9pbmRleF9lbnRyeSgiJHN0cjMhJHN0cjEgJHN0cjIiLCBAX1swXSk7Cit9CisKK2RlZmluZV9pbmRleGluZ19tYWNybygnaW5kZXhpdicpOworc3ViIGlkeF9jbWRfaW5kZXhpdnsKKyAgICBteSAkc3RyMSA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkc3RyMiA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkc3RyMyA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkc3RyNCA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBhZGRfaW5kZXhfZW50cnkoIiRzdHIxISRzdHIyICRzdHIzICRzdHI0IiwgQF9bMF0pOworICAgIGFkZF9pbmRleF9lbnRyeSgiJHN0cjIhJHN0cjMgJHN0cjQsICRzdHIxIiwgQF9bMF0pOworICAgIGFkZF9pbmRleF9lbnRyeSgiJHN0cjMhJHN0cjQsICRzdHIxICRzdHIyIiwgQF9bMF0pOworICAgIGFkZF9pbmRleF9lbnRyeSgiJHN0cjQhJCRzdHIxICRzdHIyICRzdHIzIiwgQF9bMF0pOworfQorCitkZWZpbmVfaW5kZXhpbmdfbWFjcm8oJ3R0aW5kZXgnKTsKK3N1YiBpZHhfY21kX3R0aW5kZXh7CisgICAgbXkgJHN0ciA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkZW50cnkgPSAkc3RyIC4gZ2V0X2luZGV4c3ViaXRlbSgpOworICAgIGFkZF9pbmRleF9lbnRyeSgkZW50cnksIEBfWzBdKTsKK30KKworc3ViIG15X3R5cGVkX2luZGV4X2hlbHBlcnsKKyAgICBteSgkd29yZCwkYWhyZWYpID0gQF87CisgICAgbXkgJHN0ciA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBhZGRfaW5kZXhfZW50cnkoIiRzdHIgJHdvcmQiLCAkYWhyZWYpOworICAgIGFkZF9pbmRleF9lbnRyeSgiJHdvcmQhJHN0ciIsICRhaHJlZik7Cit9CisKK2RlZmluZV9pbmRleGluZ19tYWNybygnc3RpbmRleCcsICdvcGluZGV4JywgJ2V4aW5kZXgnLCAnb2JpbmRleCcpOworc3ViIGlkeF9jbWRfc3RpbmRleHsgbXlfdHlwZWRfaW5kZXhfaGVscGVyKCdzdGF0ZW1lbnQnLCBAX1swXSk7IH0KK3N1YiBpZHhfY21kX29waW5kZXh7IG15X3R5cGVkX2luZGV4X2hlbHBlcignb3BlcmF0b3InLCBAX1swXSk7IH0KK3N1YiBpZHhfY21kX2V4aW5kZXh7IG15X3R5cGVkX2luZGV4X2hlbHBlcignZXhjZXB0aW9uJywgQF9bMF0pOyB9CitzdWIgaWR4X2NtZF9vYmluZGV4eyBteV90eXBlZF9pbmRleF9oZWxwZXIoJ29iamVjdCcsIEBfWzBdKTsgfQorCitkZWZpbmVfaW5kZXhpbmdfbWFjcm8oJ2JpZnVuY2luZGV4Jyk7CitzdWIgaWR4X2NtZF9iaWZ1bmNpbmRleHsKKyAgICBteSAkc3RyID0gbmV4dF9hcmd1bWVudCgpOworICAgIGFkZF9pbmRleF9lbnRyeSgiPHR0IGNsYXNzPSdmdW5jdGlvbic+JHN0cigpPC90dD4gKGJ1aWx0LWluIGZ1bmN0aW9uKSIsCisgICAgICAgICAgICAgICAgICAgIEBfWzBdKTsKK30KKworCitzdWIgbWFrZV9tb2RfaW5kZXhfZW50cnl7CisgICAgbXkoJHN0ciwkZGVmaW5lKSA9IEBfOworICAgIG15KCRuYW1lLCRhbmFtZSwkYWhyZWYpID0gbmV3X2xpbmtfaW5mbygpOworICAgICMgZXF1aXZhbGVudCBvZiBhZGRfaW5kZXhfZW50cnkoKSB1c2luZyAkZGVmaW5lIGluc3RlYWQgb2YgJycKKyAgICAkYWhyZWYgPX4gcy9cI1stX2EtekEtWjAtOV0qXCIvXCIvCisgICAgICBpZiAoJGRlZmluZSBlcSAnREVGJyk7CisgICAgJHN0ciA9IGdlbl9pbmRleF9pZCgkc3RyLCAkZGVmaW5lKTsKKyAgICAkaW5kZXh7JHN0cn0gLj0gJGFocmVmOworICAgIHdyaXRlX2lkeGZpbGUoJGFocmVmLCAkc3RyKTsKKworICAgIGlmICgkZGVmaW5lIGVxICdERUYnKSB7CisJIyBhZGQgdG8gdGhlIG1vZHVsZSBpbmRleAorICAgICAgICAkc3RyID1+IC8oPHR0Lio8XC90dD4pLzsKKyAgICAgICAgbXkgJG5zdHIgPSAkMTsKKwkkTW9kdWxlc3skbnN0cn0gLj0gJGFocmVmOworICAgIH0KKyAgICByZXR1cm4gIiRhbmFtZSRhbmNob3JfaW52aXNpYmxlX21hcmsyPC9hPiI7Cit9CisKKworJFRISVNfTU9EVUxFID0gJyc7CiskVEhJU19DTEFTUyA9ICcnOworCitzdWIgZGVmaW5lX21vZHVsZXsKKyAgICBteSgkd29yZCwkbmFtZSkgPSBAXzsKKyAgICBteSAkc2VjdGlvbl90YWcgPSBqb2luKCcnLCBAY3Vycl9zZWNfaWQpOworICAgIGlmICgkd29yZCBuZSAiYnVpbHQtaW4iICYmICR3b3JkIG5lICJleHRlbnNpb24iCisJJiYgJHdvcmQgbmUgInN0YW5kYXJkIiAmJiAkd29yZCBuZSAiIikgeworCXdyaXRlX3dhcm5pbmdzKCJCYWQgbW9kdWxlIHR5cGUgJyR3b3JkJyIKKwkJICAgICAgIC4gIiBmb3IgXFxkZWNsYXJlbW9kdWxlIChtb2R1bGUgJG5hbWUpIik7CisJJHdvcmQgPSAiIjsKKyAgICB9CisgICAgJHdvcmQgPSAiJHdvcmQgIiBpZiAkd29yZDsKKyAgICAkVEhJU19NT0RVTEUgPSAiJG5hbWUiOworICAgICRJTkRFWF9TVUJJVEVNID0gIihpbiBtb2R1bGUgJG5hbWUpIjsKKyAgICBwcmludCAiWyRuYW1lXSI7CisgICAgcmV0dXJuIG1ha2VfbW9kX2luZGV4X2VudHJ5KAorICAgICAgICAiPHR0IGNsYXNzPSdtb2R1bGUnPiRuYW1lPC90dD4gKCR7d29yZH1tb2R1bGUpIiwgJ0RFRicpOworfQorCitzdWIgbXlfbW9kdWxlX2luZGV4X2hlbHBlcnsKKyAgICBsb2NhbCgkd29yZCwgJF8pID0gQF87CisgICAgbXkgJG5hbWUgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgcmV0dXJuIGRlZmluZV9tb2R1bGUoJHdvcmQsICRuYW1lKSAuICRfOworfQorCitzdWIgZG9fY21kX21vZGluZGV4eyByZXR1cm4gbXlfbW9kdWxlX2luZGV4X2hlbHBlcignJywgQF8pOyB9CitzdWIgZG9fY21kX2JpbW9kaW5kZXh7IHJldHVybiBteV9tb2R1bGVfaW5kZXhfaGVscGVyKCdidWlsdC1pbicsIEBfKTsgfQorc3ViIGRvX2NtZF9leG1vZGluZGV4eyByZXR1cm4gbXlfbW9kdWxlX2luZGV4X2hlbHBlcignZXh0ZW5zaW9uJywgQF8pOyB9CitzdWIgZG9fY21kX3N0bW9kaW5kZXh7IHJldHVybiBteV9tb2R1bGVfaW5kZXhfaGVscGVyKCdzdGFuZGFyZCcsIEBfKTsgfQorCitzdWIgcmVmX21vZHVsZV9pbmRleF9oZWxwZXJ7CisgICAgbXkoJHdvcmQsICRhaHJlZikgPSBAXzsKKyAgICBteSAkc3RyID0gbmV4dF9hcmd1bWVudCgpOworICAgICR3b3JkID0gIiR3b3JkICIgaWYgJHdvcmQ7CisgICAgJHN0ciA9ICI8dHQgY2xhc3M9J21vZHVsZSc+JHN0cjwvdHQ+ICgke3dvcmR9bW9kdWxlKSI7CisgICAgIyBjYW4ndCB1c2UgYWRkX2luZGV4X2VudHJ5KCkgc2luY2UgdGhlIDJuZCBhcmcgdG8gZ2VuX2luZGV4X2lkKCkgaXMgdXNlZDsKKyAgICAjIGp1c3QgaW5saW5lIGl0IGFsbCBoZXJlCisgICAgJHN0ciA9IGdlbl9pbmRleF9pZCgkc3RyLCAnUkVGJyk7CisgICAgJGluZGV4eyRzdHJ9IC49ICRhaHJlZjsKKyAgICB3cml0ZV9pZHhmaWxlKCRhaHJlZiwgJHN0cik7Cit9CisKKyMgdGhlc2Ugc2hvdWxkIGJlIGFkanVzdGVkIGEgYml0Li4uLgorZGVmaW5lX2luZGV4aW5nX21hY3JvKCdyZWZtb2RpbmRleCcsICdyZWZiaW1vZGluZGV4JywKKwkJICAgICAgJ3JlZmV4bW9kaW5kZXgnLCAncmVmc3Rtb2RpbmRleCcpOworc3ViIGlkeF9jbWRfcmVmbW9kaW5kZXh7IHJldHVybiByZWZfbW9kdWxlX2luZGV4X2hlbHBlcignJywgQF8pOyB9CitzdWIgaWR4X2NtZF9yZWZiaW1vZGluZGV4eyByZXR1cm4gcmVmX21vZHVsZV9pbmRleF9oZWxwZXIoJ2J1aWx0LWluJywgQF8pOyB9CitzdWIgaWR4X2NtZF9yZWZleG1vZGluZGV4eyByZXR1cm4gcmVmX21vZHVsZV9pbmRleF9oZWxwZXIoJ2V4dGVuc2lvbicsIEBfKTsgfQorc3ViIGlkeF9jbWRfcmVmc3Rtb2RpbmRleHsgcmV0dXJuIHJlZl9tb2R1bGVfaW5kZXhfaGVscGVyKCdzdGFuZGFyZCcsIEBfKTsgfQorCitzdWIgZG9fY21kX25vZGVuYW1leyByZXR1cm4gZG9fY21kX2xhYmVsKEBfKTsgfQorCitzdWIgaW5pdF9teWZvcm1hdHsKKyAgICAkYW5jaG9yX2ludmlzaWJsZV9tYXJrID0gJyZuYnNwOyc7CisgICAgJGFuY2hvcl9pbnZpc2libGVfbWFyazIgPSAnJzsKKyAgICAkYW5jaG9yX21hcmsgPSAnJzsKKyAgICAkaWNvbnN7J2FuY2hvcl9tYXJrJ30gPSAnJzsKK30KK2luaXRfbXlmb3JtYXQoKTsKKworIyBDcmVhdGUgYW4gaW5kZXggZW50cnksIGJ1dCBpbmNsdWRlIHRoZSBzdHJpbmcgaW4gdGhlIHRhcmdldCBhbmNob3IKKyMgaW5zdGVhZCBvZiB0aGUgZHVtbXkgZmlsbGVyLgorIworc3ViIG1ha2Vfc3RyX2luZGV4X2VudHJ5eworICAgIG15KCRzdHIpID0gQF87CisgICAgbXkoJG5hbWUsJGFuYW1lLCRhaHJlZikgPSBuZXdfbGlua19pbmZvKCk7CisgICAgYWRkX2luZGV4X2VudHJ5KCRzdHIsICRhaHJlZik7CisgICAgcmV0dXJuICIkYW5hbWUkc3RyPC9hPiI7Cit9CisKKyRSRUZDT1VOVFNfTE9BREVEID0gMDsKKworc3ViIGxvYWRfcmVmY291bnRzeworICAgICRSRUZDT1VOVFNfTE9BREVEID0gMTsKKworICAgIG15ICRteW5hbWUsICRteWRpciwgJG15ZXh0OworICAgICgkbXluYW1lLCAkbXlkaXIsICRteWV4dCkgPSBmaWxlcGFyc2UoX19GSUxFX18sICdcLi4qJyk7CisgICAgY2hvcCAkbXlkaXI7CQkJIyByZW1vdmUgdHJhaWxpbmcgJy8nCisgICAgKCRteW5hbWUsICRteWRpciwgJG15ZXh0KSA9IGZpbGVwYXJzZSgkbXlkaXIsICdcLi4qJyk7CisgICAgY2hvcCAkbXlkaXI7CQkJIyByZW1vdmUgdHJhaWxpbmcgJy8nCisgICAgJG15ZGlyID0gZ2V0Y3dkKCkgLiAiJGRkJG15ZGlyIgorICAgICAgdW5sZXNzICRteWRpciA9fiBzfF4vfC98OworICAgIGxvY2FsICRfOworICAgIG15ICRmaWxlbmFtZSA9ICIkbXlkaXIke2RkfWFwaSR7ZGR9cmVmY291bnRzLmRhdCI7CisgICAgb3BlbihSRUZDT1VOVF9GSUxFLCAiPCRmaWxlbmFtZSIpIHx8IGRpZSAiXG4kIVxuIjsKKyAgICBwcmludCAiW2xvYWRpbmcgQVBJIHJlZmNvdW50IGRhdGFdIjsKKyAgICB3aGlsZSAoPFJFRkNPVU5UX0ZJTEU+KSB7CisgICAgICAgIGlmICgvKFthLXpBLVowLTlfXSspOlB5T2JqZWN0XCo6KFthLXpBLVowLTlfXSopOigwfFstK10xfG51bGwpOiguKikkLykgeworICAgICAgICAgICAgbXkoJGZ1bmMsICRwYXJhbSwgJGNvdW50LCAkY29tbWVudCkgPSAoJDEsICQyLCAkMywgJDQpOworICAgICAgICAgICAgI3ByaW50ICJcbiRmdW5jKCRwYXJhbSkgLS0+ICRjb3VudCI7CisgICAgICAgICAgICAkUkVGQ09VTlRTeyIkZnVuYzokcGFyYW0ifSA9ICRjb3VudDsKKyAgICAgICAgfQorICAgIH0KK30KKworc3ViIGdldF9yZWZjb3VudHsKKyAgICBteSAoJGZ1bmMsICRwYXJhbSkgPSBAXzsKKyAgICBsb2FkX3JlZmNvdW50cygpCisgICAgICAgIHVubGVzcyAkUkVGQ09VTlRTX0xPQURFRDsKKyAgICByZXR1cm4gJFJFRkNPVU5UU3siJGZ1bmM6JHBhcmFtIn07Cit9CisKK3N1YiBkb19lbnZfY2Z1bmNkZXNjeworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICRyZXR1cm5fdHlwZSA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkZnVuY3Rpb25fbmFtZSA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkYXJnX2xpc3QgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJGlkeCA9IG1ha2Vfc3RyX2luZGV4X2VudHJ5KAorICAgICAgICAiPHR0IGNsYXNzPSdjZnVuY3Rpb24nPiRmdW5jdGlvbl9uYW1lKCk8L3R0PiIgLiBnZXRfaW5kZXhzdWJpdGVtKCkpOworICAgICRpZHggPX4gcy8gXCguKlwpLy87CisgICAgJGlkeCA9fiBzL1woXCkvLzsJCSMgPz8/PyAtIHdoeSBib3RoIG9mIHRoZXNlPworICAgIG15ICRyZXN1bHRfcmMgPSBnZXRfcmVmY291bnQoJGZ1bmN0aW9uX25hbWUsICcnKTsKKyAgICBteSAkcmNpbmZvID0gJyc7CisgICAgaWYgKCRyZXN1bHRfcmMgZXEgJysxJykgeworICAgICAgICAkcmNpbmZvID0gJ05ldyByZWZlcmVuY2UnOworICAgIH0KKyAgICBlbHNpZiAoJHJlc3VsdF9yYyBlcSAnMCcpIHsKKyAgICAgICAgJHJjaW5mbyA9ICdCb3Jyb3dlZCByZWZlcmVuY2UnOworICAgIH0KKyAgICBlbHNpZiAoJHJlc3VsdF9yYyBlcSAnbnVsbCcpIHsKKyAgICAgICAgJHJjaW5mbyA9ICdBbHdheXMgPHR0IGNsYXNzPSJjb25zdGFudCI+TlVMTDwvdHQ+JzsKKyAgICB9CisgICAgaWYgKCRyY2luZm8gbmUgJycpIHsKKyAgICAgICAgJHJjaW5mbyA9ICggICJcbjxkaXYgY2xhc3M9XCJyZWZjb3VudC1pbmZvXCI+IgorICAgICAgICAgICAgICAgICAgIC4gIlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+UmV0dXJuIHZhbHVlOjwvc3Bhbj4iCisgICAgICAgICAgICAgICAgICAgLiAiXG4gIDxzcGFuIGNsYXNzPVwidmFsdWVcIj4kcmNpbmZvLjwvc3Bhbj4iCisgICAgICAgICAgICAgICAgICAgLiAiXG48L2Rpdj4iKTsKKyAgICB9CisgICAgcmV0dXJuICI8ZGw+PGR0PiRyZXR1cm5fdHlwZSA8Yj4kaWR4PC9iPig8dmFyPiRhcmdfbGlzdDwvdmFyPilcbjxkZD4iCisgICAgICAgICAgIC4gJHJjaW5mbworICAgICAgICAgICAuICRfCisgICAgICAgICAgIC4gJzwvZGw+JzsKK30KKworc3ViIGRvX2Vudl9jc2ltcGxlbWFjcm9kZXNjeworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICRuYW1lID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRpZHggPSBtYWtlX3N0cl9pbmRleF9lbnRyeSgiPHR0IGNsYXNzPSdtYWNybyc+JG5hbWU8L3R0PiIpOworICAgIHJldHVybiAiPGRsPjxkdD48Yj4kaWR4PC9iPlxuPGRkPiIKKyAgICAgICAgICAgLiAkXworICAgICAgICAgICAuICc8L2RsPicKK30KKworc3ViIGRvX2Vudl9jdHlwZWRlc2N7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJGluZGV4X25hbWUgPSBuZXh0X29wdGlvbmFsX2FyZ3VtZW50KCk7CisgICAgbXkgJHR5cGVfbmFtZSA9IG5leHRfYXJndW1lbnQoKTsKKyAgICAkaW5kZXhfbmFtZSA9ICR0eXBlX25hbWUKKyAgICAgIHVubGVzcyAkaW5kZXhfbmFtZTsKKyAgICBteSgkbmFtZSwkYW5hbWUsJGFocmVmKSA9IG5ld19saW5rX2luZm8oKTsKKyAgICBhZGRfaW5kZXhfZW50cnkoIjx0dCBjbGFzcz0nY3R5cGUnPiRpbmRleF9uYW1lPC90dD4gKEMgdHlwZSkiLCAkYWhyZWYpOworICAgIHJldHVybiAiPGRsPjxkdD48Yj48dHQgY2xhc3M9J2N0eXBlJz4kYW5hbWUkdHlwZV9uYW1lPC9hPjwvdHQ+PC9iPlxuPGRkPiIKKyAgICAgICAgICAgLiAkXworICAgICAgICAgICAuICc8L2RsPicKK30KKworc3ViIGRvX2Vudl9jdmFyZGVzY3sKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAkdmFyX3R5cGUgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJHZhcl9uYW1lID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRpZHggPSBtYWtlX3N0cl9pbmRleF9lbnRyeSgiPHR0IGNsYXNzPSdjZGF0YSc+JHZhcl9uYW1lPC90dD4iCisJCQkJICAgLiBnZXRfaW5kZXhzdWJpdGVtKCkpOworICAgICRpZHggPX4gcy8gXCguKlwpLy87CisgICAgcmV0dXJuICI8ZGw+PGR0PiR2YXJfdHlwZSA8Yj4kaWR4PC9iPlxuIgorICAgICAgICAgICAuICc8ZGQ+JworICAgICAgICAgICAuICRfCisgICAgICAgICAgIC4gJzwvZGw+JzsKK30KKworc3ViIGNvbnZlcnRfYXJncygkKXsKKyAgICBsb2NhbCgkSU5fREVTQ19IQU5ETEVSKSA9IDE7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgcmV0dXJuIHRyYW5zbGF0ZV9jb21tYW5kcygkXyk7Cit9CisKK3N1YiBkb19lbnZfZnVuY2Rlc2N7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJGZ1bmN0aW9uX25hbWUgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJGFyZ19saXN0ID0gY29udmVydF9hcmdzKG5leHRfYXJndW1lbnQoKSk7CisgICAgbXkgJGlkeCA9IG1ha2Vfc3RyX2luZGV4X2VudHJ5KCI8dHQgY2xhc3M9J2Z1bmN0aW9uJz4kZnVuY3Rpb25fbmFtZSgpPC90dD4iCisJCQkJICAgLiBnZXRfaW5kZXhzdWJpdGVtKCkpOworICAgICRpZHggPX4gcy8gXCguKlwpLy87CisgICAgJGlkeCA9fiBzL1woXCk8XC90dD4vPFwvdHQ+LzsKKyAgICByZXR1cm4gIjxkbD48ZHQ+PGI+JGlkeDwvYj4oPHZhcj4kYXJnX2xpc3Q8L3Zhcj4pXG48ZGQ+IiAuICRfIC4gJzwvZGw+JzsKK30KKworc3ViIGRvX2Vudl9mdW5jZGVzY25peworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICRmdW5jdGlvbl9uYW1lID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRhcmdfbGlzdCA9IGNvbnZlcnRfYXJncyhuZXh0X2FyZ3VtZW50KCkpOworICAgIHJldHVybiAiPGRsPjxkdD48Yj48dHQgY2xhc3M9J2Z1bmN0aW9uJz4kZnVuY3Rpb25fbmFtZTwvdHQ+PC9iPiIKKyAgICAgIC4gIig8dmFyPiRhcmdfbGlzdDwvdmFyPilcbiIKKyAgICAgIC4gJzxkZD4nCisgICAgICAuICRfCisgICAgICAuICc8L2RsPic7Cit9CisKK3N1YiBkb19jbWRfZnVuY2xpbmV7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJGZ1bmN0aW9uX25hbWUgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJGFyZ19saXN0ID0gY29udmVydF9hcmdzKG5leHRfYXJndW1lbnQoKSk7CisgICAgbXkgJHByZWZpeCA9ICI8dHQgY2xhc3M9J2Z1bmN0aW9uJz4kZnVuY3Rpb25fbmFtZSgpPC90dD4iOworICAgIG15ICRpZHggPSBtYWtlX3N0cl9pbmRleF9lbnRyeSgkcHJlZml4IC4gZ2V0X2luZGV4c3ViaXRlbSgpKTsKKyAgICAkcHJlZml4ID1+IHMvXChcKS8vOworCisgICAgcmV0dXJuICI8ZHQ+PGI+JHByZWZpeDwvYj4oPHZhcj4kYXJnX2xpc3Q8L3Zhcj4pXG48ZGQ+IiAuICRfOworfQorCitzdWIgZG9fY21kX2Z1bmNsaW5lbml7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJGZ1bmN0aW9uX25hbWUgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJGFyZ19saXN0ID0gY29udmVydF9hcmdzKG5leHRfYXJndW1lbnQoKSk7CisgICAgbXkgJHByZWZpeCA9ICI8dHQgY2xhc3M9J2Z1bmN0aW9uJz4kZnVuY3Rpb25fbmFtZTwvdHQ+IjsKKworICAgIHJldHVybiAiPGR0PjxiPiRwcmVmaXg8L2I+KDx2YXI+JGFyZ19saXN0PC92YXI+KVxuPGRkPiIgLiAkXzsKK30KKworIyBDaGFuZ2UgdGhpcyBmbGFnIHRvIGluZGV4IHRoZSBvcGNvZGUgZW50cmllcy4gIEkgZG9uJ3QgdGhpbmsgaXQncyB2ZXJ5CisjIHVzZWZ1bCB0byBpbmRleCB0aGVtLCBzaW5jZSB0aGV5J3JlIG9ubHkgcHJlc2VudGVkIHRvIGRlc2NyaWJlIHRoZSBkaXMKKyMgbW9kdWxlLgorIworJElOREVYX09QQ09ERVMgPSAwOworCitzdWIgZG9fZW52X29wY29kZWRlc2N7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJG9wY29kZV9uYW1lID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRhcmdfbGlzdCA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkaWR4OworICAgIGlmICgkSU5ERVhfT1BDT0RFUykgeworCSRpZHggPSBtYWtlX3N0cl9pbmRleF9lbnRyeSgiPHR0IGNsYXNzPSdvcGNvZGUnPiRvcGNvZGVfbmFtZTwvdHQ+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiIChieXRlIGNvZGUgaW5zdHJ1Y3Rpb24pIik7CisJJGlkeCA9fiBzLyBcKGJ5dGUgY29kZSBpbnN0cnVjdGlvblwpLy87CisgICAgfQorICAgIGVsc2UgeworCSRpZHggPSAiPHR0IGNsYXNzPSdvcGNvZGUnPiRvcGNvZGVfbmFtZTwvdHQ+IjsKKyAgICB9CisgICAgbXkgJHN0dWZmID0gIjxkbD48ZHQ+PGI+JGlkeDwvYj4iOworICAgIGlmICgkYXJnX2xpc3QpIHsKKwkkc3R1ZmYgLj0gIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzx2YXI+JGFyZ19saXN0PC92YXI+IjsKKyAgICB9CisgICAgcmV0dXJuICRzdHVmZiAuICJcbjxkZD4iIC4gJF8gLiAnPC9kbD4nOworfQorCitzdWIgZG9fZW52X2RhdGFkZXNjeworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICRkYXRhbmFtZSA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkaWR4ID0gbWFrZV9zdHJfaW5kZXhfZW50cnkoIjx0dD4kZGF0YW5hbWU8L3R0PiIgLiBnZXRfaW5kZXhzdWJpdGVtKCkpOworICAgICRpZHggPX4gcy8gXCguKlwpLy87CisgICAgcmV0dXJuICI8ZGw+PGR0PjxiPiRpZHg8L2I+XG48ZGQ+IgorICAgICAgICAgICAuICRfCisJICAgLiAnPC9kbD4nOworfQorCitzdWIgZG9fZW52X2RhdGFkZXNjbml7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJGlkeCA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBpZiAoISAkU1RSSU5HX0lOREVYX1RUKSB7CisJJGlkeCA9ICI8dHQ+JGlkeDwvdHQ+IjsKKyAgICB9CisgICAgcmV0dXJuICI8ZGw+PGR0PjxiPiRpZHg8L2I+XG48ZGQ+IiAuICRfIC4gJzwvZGw+JzsKK30KKworc3ViIGRvX2NtZF9kYXRhbGluZXsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAkZGF0YV9uYW1lID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRpZHggPSBtYWtlX3N0cl9pbmRleF9lbnRyeSgiPHR0PiRkYXRhX25hbWU8L3R0PiIgLiBnZXRfaW5kZXhzdWJpdGVtKCkpOworICAgICRpZHggPX4gcy8gXCguKlwpLy87CisgICAgcmV0dXJuICI8ZHQ+PGI+JGlkeDwvYj48ZGQ+IiAuICRfOworfQorCitzdWIgZG9fY21kX2RhdGFsaW5lbml7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJGRhdGFfbmFtZSA9IG5leHRfYXJndW1lbnQoKTsKKyAgICByZXR1cm4gIjxkdD48Yj48dHQ+JGRhdGFfbmFtZTwvdHQ+PC9iPjxkZD4iIC4gJF87Cit9CisKK3N1YiBkb19lbnZfZXhjZGVzY3sKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAkZXhjbmFtZSA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkaWR4ID0gbWFrZV9zdHJfaW5kZXhfZW50cnkoIjx0dCBjbGFzcz0nZXhjZXB0aW9uJz4kZXhjbmFtZTwvdHQ+Iik7CisgICAgcmV0dXJuICI8ZGw+PGR0PjxiPmV4Y2VwdGlvbiAkaWR4PC9iPlxuPGRkPiIgLiAkXyAuICc8L2RsPicKK30KKworc3ViIGRvX2Vudl9mdWxsbGluZWl0ZW1zeyByZXR1cm4gZG9fZW52X2l0ZW1pemUoQF8pOyB9CisKKworc3ViIGhhbmRsZV9jbGFzc2xpa2VfZGVzY3JpcHRvcnsKKyAgICBsb2NhbCgkXywgJHdoYXQpID0gQF87CisgICAgJFRISVNfQ0xBU1MgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJGFyZ19saXN0ID0gY29udmVydF9hcmdzKG5leHRfYXJndW1lbnQoKSk7CisgICAgJGlkeCA9IG1ha2Vfc3RyX2luZGV4X2VudHJ5KAorCQkiPHR0IGNsYXNzPSckd2hhdCc+JFRISVNfQ0xBU1M8L3R0PiAoJHdoYXQgaW4gJFRISVNfTU9EVUxFKSIgKTsKKyAgICAkaWR4ID1+IHMvIFwoLipcKS8vOworICAgIHJldHVybiAoIjxkbD48ZHQ+PGI+JHdoYXQgJGlkeDwvYj4oPHZhcj4kYXJnX2xpc3Q8L3Zhcj4pXG48ZGQ+IgorICAgICAgICAgICAgLiAkXworICAgICAgICAgICAgLiAnPC9kbD4nKTsKK30KKworc3ViIGRvX2Vudl9jbGFzc2Rlc2N7CisgICAgcmV0dXJuIGhhbmRsZV9jbGFzc2xpa2VfZGVzY3JpcHRvcihAX1swXSwgImNsYXNzIik7Cit9CisKK3N1YiBkb19lbnZfZXhjY2xhc3NkZXNjeworICAgIHJldHVybiBoYW5kbGVfY2xhc3NsaWtlX2Rlc2NyaXB0b3IoQF9bMF0sICJleGNlcHRpb24iKTsKK30KKworCitzdWIgZG9fZW52X21ldGhvZGRlc2N7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJGNsYXNzX25hbWUgPSBuZXh0X29wdGlvbmFsX2FyZ3VtZW50KCk7CisgICAgJGNsYXNzX25hbWUgPSAkVEhJU19DTEFTUworICAgICAgICB1bmxlc3MgJGNsYXNzX25hbWU7CisgICAgbXkgJG1ldGhvZCA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkYXJnX2xpc3QgPSBjb252ZXJ0X2FyZ3MobmV4dF9hcmd1bWVudCgpKTsKKyAgICBteSAkZXh0cmEgPSAnJzsKKyAgICBpZiAoJGNsYXNzX25hbWUpIHsKKwkkZXh0cmEgPSAiICgkY2xhc3NfbmFtZSBtZXRob2QpIjsKKyAgICB9CisgICAgbXkgJGlkeCA9IG1ha2Vfc3RyX2luZGV4X2VudHJ5KCI8dHQgY2xhc3M9J21ldGhvZCc+JG1ldGhvZCgpPC90dD4kZXh0cmEiKTsKKyAgICAkaWR4ID1+IHMvIFwoLipcKS8vOworICAgICRpZHggPX4gcy9cKFwpLy87CisgICAgcmV0dXJuICI8ZGw+PGR0PjxiPiRpZHg8L2I+KDx2YXI+JGFyZ19saXN0PC92YXI+KVxuPGRkPiIgLiAkXyAuICc8L2RsPic7Cit9CisKKworc3ViIGRvX2NtZF9tZXRob2RsaW5leworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICRjbGFzc19uYW1lID0gbmV4dF9vcHRpb25hbF9hcmd1bWVudCgpOworICAgICRjbGFzc19uYW1lID0gJFRISVNfQ0xBU1MKKyAgICAgICAgdW5sZXNzICRjbGFzc19uYW1lOworICAgIG15ICRtZXRob2QgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJGFyZ19saXN0ID0gY29udmVydF9hcmdzKG5leHRfYXJndW1lbnQoKSk7CisgICAgbXkgJGV4dHJhID0gJyc7CisgICAgaWYgKCRjbGFzc19uYW1lKSB7CisJJGV4dHJhID0gIiAoJGNsYXNzX25hbWUgbWV0aG9kKSI7CisgICAgfQorICAgIG15ICRpZHggPSBtYWtlX3N0cl9pbmRleF9lbnRyeSgiPHR0IGNsYXNzPSdtZXRob2QnPiRtZXRob2QoKTwvdHQ+JGV4dHJhIik7CisgICAgJGlkeCA9fiBzLyBcKC4qXCkvLzsKKyAgICAkaWR4ID1+IHMvXChcKS8vOworICAgIHJldHVybiAiPGR0PjxiPiRpZHg8L2I+KDx2YXI+JGFyZ19saXN0PC92YXI+KVxuPGRkPiIKKyAgICAgICAgICAgLiAkXzsKK30KKworCitzdWIgZG9fY21kX21ldGhvZGxpbmVuaXsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBuZXh0X29wdGlvbmFsX2FyZ3VtZW50KCk7CisgICAgbXkgJG1ldGhvZCA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkYXJnX2xpc3QgPSBjb252ZXJ0X2FyZ3MobmV4dF9hcmd1bWVudCgpKTsKKyAgICByZXR1cm4gIjxkdD48Yj4kbWV0aG9kPC9iPig8dmFyPiRhcmdfbGlzdDwvdmFyPilcbjxkZD4iCisgICAgICAgICAgIC4gJF87Cit9CisKK3N1YiBkb19lbnZfbWV0aG9kZGVzY25peworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG5leHRfb3B0aW9uYWxfYXJndW1lbnQoKTsKKyAgICBteSAkbWV0aG9kID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRhcmdfbGlzdCA9IGNvbnZlcnRfYXJncyhuZXh0X2FyZ3VtZW50KCkpOworICAgIHJldHVybiAiPGRsPjxkdD48Yj4kbWV0aG9kPC9iPig8dmFyPiRhcmdfbGlzdDwvdmFyPilcbjxkZD4iCisgICAgICAgICAgIC4gJF8KKwkgICAuICc8L2RsPic7Cit9CisKKworc3ViIGRvX2Vudl9tZW1iZXJkZXNjeworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICRjbGFzcyA9IG5leHRfb3B0aW9uYWxfYXJndW1lbnQoKTsKKyAgICBteSAkbWVtYmVyID0gbmV4dF9hcmd1bWVudCgpOworICAgICRjbGFzcyA9ICRUSElTX0NMQVNTCisgICAgICAgIHVubGVzcyAkY2xhc3M7CisgICAgbXkgJGV4dHJhID0gJyc7CisgICAgJGV4dHJhID0gIiAoJGNsYXNzIGF0dHJpYnV0ZSkiCisgICAgICAgIGlmICgkY2xhc3MgbmUgJycpOworICAgIG15ICRpZHggPSBtYWtlX3N0cl9pbmRleF9lbnRyeSgiPHR0IGNsYXNzPSdtZW1iZXInPiRtZW1iZXI8L3R0PiRleHRyYSIpOworICAgICRpZHggPX4gcy8gXCguKlwpLy87CisgICAgJGlkeCA9fiBzL1woXCkvLzsKKyAgICByZXR1cm4gIjxkbD48ZHQ+PGI+JGlkeDwvYj5cbjxkZD4iIC4gJF8gLiAnPC9kbD4nOworfQorCisKK3N1YiBkb19jbWRfbWVtYmVybGluZXsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAkY2xhc3MgPSBuZXh0X29wdGlvbmFsX2FyZ3VtZW50KCk7CisgICAgbXkgJG1lbWJlciA9IG5leHRfYXJndW1lbnQoKTsKKyAgICAkY2xhc3MgPSAkVEhJU19DTEFTUworICAgICAgICB1bmxlc3MgJGNsYXNzOworICAgIG15ICRleHRyYSA9ICcnOworICAgICRleHRyYSA9ICIgKCRjbGFzcyBhdHRyaWJ1dGUpIgorICAgICAgICBpZiAoJGNsYXNzIG5lICcnKTsKKyAgICBteSAkaWR4ID0gbWFrZV9zdHJfaW5kZXhfZW50cnkoIjx0dCBjbGFzcz0nbWVtYmVyJz4kbWVtYmVyPC90dD4kZXh0cmEiKTsKKyAgICAkaWR4ID1+IHMvIFwoLipcKS8vOworICAgICRpZHggPX4gcy9cKFwpLy87CisgICAgcmV0dXJuICI8ZHQ+PGI+JGlkeDwvYj48ZGQ+IiAuICRfOworfQorCitzdWIgZG9fZW52X21lbWJlcmRlc2NuaXsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBuZXh0X29wdGlvbmFsX2FyZ3VtZW50KCk7CisgICAgbXkgJG1lbWJlciA9IG5leHRfYXJndW1lbnQoKTsKKyAgICByZXR1cm4gIjxkbD48ZHQ+PGI+PHR0IGNsYXNzPSdtZW1iZXInPiRtZW1iZXI8L3R0PjwvYj5cbjxkZD4iCisgICAgICAgICAgIC4gJF8KKyAgICAgICAgICAgLiAnPC9kbD4nOworfQorCisKK3N1YiBkb19jbWRfbWVtYmVybGluZW5peworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG5leHRfb3B0aW9uYWxfYXJndW1lbnQoKTsKKyAgICBteSAkbWVtYmVyID0gbmV4dF9hcmd1bWVudCgpOworICAgIHJldHVybiAiPGR0PjxiPjx0dCBjbGFzcz0nbWVtYmVyJz4kbWVtYmVyPC90dD48L2I+PGRkPiIgLiAkXzsKK30KKworQGNvbF9hbGlnbnMgPSAoJzx0ZD4nLCAnPHRkPicsICc8dGQ+JywgJzx0ZD4nKTsKKworc3ViIGZpeF9mb250eworICAgICMgZG8gYSBsaXR0bGUgbWFnaWMgb24gYSBmb250IG5hbWUgdG8gZ2V0IHRoZSByaWdodCBiZWhhdmlvciBpbiB0aGUgZmlyc3QKKyAgICAjIGNvbHVtbiBvZiB0aGUgb3V0cHV0IHRhYmxlCisgICAgbXkgJGZvbnQgPSBAX1swXTsKKyAgICBpZiAoJGZvbnQgZXEgJ3RleHRybScpIHsKKwkkZm9udCA9ICcnOworICAgIH0KKyAgICBlbHNpZiAoJGZvbnQgZXEgJ2ZpbGUnIHx8ICRmb250IGVxICdmaWxlbnEnKSB7CisJJGZvbnQgPSAndHQgY2xhc3M9ImZpbGUiJzsKKyAgICB9CisgICAgZWxzaWYgKCRmb250IGVxICdtZW1iZXInKSB7CisgICAgICAgICRmb250ID0gJ3R0IGNsYXNzPSJtZW1iZXIiJzsKKyAgICB9CisgICAgZWxzaWYgKCRmb250IGVxICdjbGFzcycpIHsKKyAgICAgICAgJGZvbnQgPSAndHQgY2xhc3M9ImNsYXNzIic7CisgICAgfQorICAgIGVsc2lmICgkZm9udCBlcSAnY29uc3RhbnQnKSB7CisgICAgICAgICRmb250ID0gJ3R0IGNsYXNzPSJjb25zdGFudCInOworICAgIH0KKyAgICBlbHNpZiAoJGZvbnQgZXEgJ2tiZCcpIHsKKyAgICAgICAgJGZvbnQgPSAna2JkJzsKKyAgICB9CisgICAgZWxzaWYgKCRmb250IGVxICdwcm9ncmFtb3B0JykgeworICAgICAgICAkZm9udCA9ICdiJzsKKyAgICB9CisgICAgZWxzaWYgKCRmb250IGVxICdleGNlcHRpb24nKSB7CisgICAgICAgICRmb250ID0gJ3R0IGNsYXNzPSJleGNlcHRpb24iJzsKKyAgICB9CisgICAgcmV0dXJuICRmb250OworfQorCitzdWIgZmlndXJlX2NvbHVtbl9hbGlnbm1lbnR7CisgICAgbXkgJGEgPSBAX1swXTsKKyAgICBteSAkbWFyayA9IHN1YnN0cigkYSwgMCwgMSk7CisgICAgbXkgJHIgPSAnJzsKKyAgICBpZiAoJG1hcmsgZXEgJ2MnKQorICAgICAgeyAkciA9ICcgYWxpZ249ImNlbnRlciInOyB9CisgICAgZWxzaWYgKCRtYXJrIGVxICdyJykKKyAgICAgIHsgJHIgPSAnIGFsaWduPSJyaWdodCInOyB9CisgICAgZWxzaWYgKCRtYXJrIGVxICdsJykKKyAgICAgIHsgJHIgPSAnIGFsaWduPSJsZWZ0Iic7IH0KKyAgICBlbHNpZiAoJG1hcmsgZXEgJ3AnKQorICAgICAgeyAkciA9ICcgYWxpZ249ImxlZnQiJzsgfQorICAgIHJldHVybiAkcjsKK30KKworc3ViIHNldHVwX2NvbHVtbl9hbGlnbm1lbnRzeworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15KCRzMSwkczIsJHMzLCRzNCkgPSBzcGxpdCgvW3xdLywkXyk7CisgICAgbXkgJGExID0gZmlndXJlX2NvbHVtbl9hbGlnbm1lbnQoJHMxKTsKKyAgICBteSAkYTIgPSBmaWd1cmVfY29sdW1uX2FsaWdubWVudCgkczIpOworICAgIG15ICRhMyA9IGZpZ3VyZV9jb2x1bW5fYWxpZ25tZW50KCRzMyk7CisgICAgbXkgJGE0ID0gZmlndXJlX2NvbHVtbl9hbGlnbm1lbnQoJHM0KTsKKyAgICAkY29sX2FsaWduc1swXSA9ICI8dGQkYTEgdmFsaWduPVwiYmFzZWxpbmVcIj4iOworICAgICRjb2xfYWxpZ25zWzFdID0gIjx0ZCRhMj4iOworICAgICRjb2xfYWxpZ25zWzJdID0gIjx0ZCRhMz4iOworICAgICRjb2xfYWxpZ25zWzNdID0gIjx0ZCRhND4iOworICAgICMgcmV0dXJuIHRoZSBhbGlnbmVkIGhlYWRlciBzdGFydCB0YWdzCisgICAgcmV0dXJuICgiPHRoJGExPiIsICI8dGgkYTI+IiwgIjx0aCRhMz4iLCAiPHRoJGE0PiIpOworfQorCitzdWIgZ2V0X3RhYmxlX2NvbDFfZm9udHN7CisgICAgbXkgJGZvbnQgPSAkZ2xvYmFsc3snbGluZWlmb250J307CisgICAgbXkgKCRzZm9udCwkZWZvbnQpID0gKCcnLCAnJyk7CisgICAgaWYgKCRmb250KSB7CisgICAgICAgICRzZm9udCA9ICI8JGZvbnQ+IjsKKyAgICAgICAgJGVmb250ID0gIjwvJGZvbnQ+IjsKKyAgICAgICAgJGVmb250ID1+IHMvIC4qPi8+LzsKKyAgICB9CisgICAgcmV0dXJuICgkc2ZvbnQsICRlZm9udCk7Cit9CisKK3N1YiBkb19lbnZfdGFibGVpaXsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSgkdGgxLCR0aDIsJHRoMywkdGg0KSA9IHNldHVwX2NvbHVtbl9hbGlnbm1lbnRzKG5leHRfYXJndW1lbnQoKSk7CisgICAgbXkgJGZvbnQgPSBmaXhfZm9udChuZXh0X2FyZ3VtZW50KCkpOworICAgIG15ICRoMSA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkaDIgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgcy9bXHNcbl0rLy87CisgICAgJGdsb2JhbHN7J2xpbmVpZm9udCd9ID0gJGZvbnQ7CisgICAgbXkgJGExID0gJGNvbF9hbGlnbnNbMF07CisgICAgbXkgJGEyID0gJGNvbF9hbGlnbnNbMV07CisgICAgcy9cXGxpbmVpaTwvXFxsaW5laWlbJGExfCRhMl08L2c7CisgICAgcmV0dXJuICc8dGFibGUgYm9yZGVyIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIj4nCisJICAgLiAiXG4gIDx0aGVhZD4iCisJICAgLiAiXG4gICAgPHRyIGNsYXNzPVwidGFibGVoZWFkZXJcIj4iCisJICAgLiAiXG4gICAgICAkdGgxPGI+JGgxPC9iPlwmbmJzcDs8L3RoPiIKKwkgICAuICJcbiAgICAgICR0aDI8Yj4kaDI8L2I+XCZuYnNwOzwvdGg+IgorCSAgIC4gIlxuICAgICAgPC90cj4iCisJICAgLiAiXG4gICAgPC90aGVhZD4iCisJICAgLiAiXG4gIDx0Ym9keSB2YWxpZ249J2Jhc2VsaW5lJz4iCisJICAgLiAkXworCSAgIC4gIlxuICAgIDwvdGJvZHk+IgorCSAgIC4gIlxuPC90YWJsZT4iOworfQorCitzdWIgZG9fZW52X2xvbmd0YWJsZWlpeworICAgIHJldHVybiBkb19lbnZfdGFibGVpaShAXyk7Cit9CisKK3N1YiBkb19jbWRfbGluZWlpeworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICRhbGlnbnMgPSBuZXh0X29wdGlvbmFsX2FyZ3VtZW50KCk7CisgICAgbXkgJGMxID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRjMiA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBzL1tcc1xuXSsvLzsKKyAgICBteSgkc2ZvbnQsJGVmb250KSA9IGdldF90YWJsZV9jb2wxX2ZvbnRzKCk7CisgICAgJGMyID0gJyZuYnNwOycgaWYgKCRjMiBlcSAnJyk7CisgICAgbXkoJGMxYWxpZ24sJGMyYWxpZ24pID0gc3BsaXQoJ1x8JywgJGFsaWducyk7CisgICAgbXkgJHBhZGRpbmcgPSAnJzsKKyAgICBpZiAoJGMxYWxpZ24gPX4gL2FsaWduPSJyaWdodCIvIHx8ICRjMSBlcSAnJykgeworICAgICAgICAkcGFkZGluZyA9ICcmbmJzcDsnOworICAgIH0KKyAgICByZXR1cm4gIlxuICAgIDx0cj4kYzFhbGlnbiRzZm9udCRjMSRlZm9udCRwYWRkaW5nPC90ZD5cbiIKKyAgICAgICAgICAgLiAiICAgICAgICAkYzJhbGlnbiRjMjwvdGQ+IgorCSAgIC4gJF87Cit9CisKK3N1YiBkb19lbnZfdGFibGVpaWl7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkoJHRoMSwkdGgyLCR0aDMsJHRoNCkgPSBzZXR1cF9jb2x1bW5fYWxpZ25tZW50cyhuZXh0X2FyZ3VtZW50KCkpOworICAgIG15ICRmb250ID0gZml4X2ZvbnQobmV4dF9hcmd1bWVudCgpKTsKKyAgICBteSAkaDEgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJGgyID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRoMyA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBzL1tcc1xuXSsvLzsKKyAgICAkZ2xvYmFsc3snbGluZWlmb250J30gPSAkZm9udDsKKyAgICBteSAkYTEgPSAkY29sX2FsaWduc1swXTsKKyAgICBteSAkYTIgPSAkY29sX2FsaWduc1sxXTsKKyAgICBteSAkYTMgPSAkY29sX2FsaWduc1syXTsKKyAgICBzL1xcbGluZWlpaTwvXFxsaW5laWlpWyRhMXwkYTJ8JGEzXTwvZzsKKyAgICByZXR1cm4gJzx0YWJsZSBib3JkZXIgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiPicKKwkgICAuICJcbiAgPHRoZWFkPiIKKwkgICAuICJcbiAgICA8dHIgY2xhc3M9XCJ0YWJsZWhlYWRlclwiPiIKKwkgICAuICJcbiAgICAgICR0aDE8Yj4kaDE8L2I+XCZuYnNwOzwvdGg+IgorCSAgIC4gIlxuICAgICAgJHRoMjxiPiRoMjwvYj5cJm5ic3A7PC90aD4iCisJICAgLiAiXG4gICAgICAkdGgzPGI+JGgzPC9iPlwmbmJzcDs8L3RoPiIKKwkgICAuICJcbiAgICAgIDwvdHI+IgorCSAgIC4gIlxuICAgIDwvdGhlYWQ+IgorCSAgIC4gIlxuICA8dGJvZHkgdmFsaWduPSdiYXNlbGluZSc+IgorCSAgIC4gJF8KKwkgICAuICJcbiAgICA8L3Rib2R5PiIKKwkgICAuICJcbjwvdGFibGU+IjsKK30KKworc3ViIGRvX2Vudl9sb25ndGFibGVpaWl7CisgICAgcmV0dXJuIGRvX2Vudl90YWJsZWlpaShAXyk7Cit9CisKK3N1YiBkb19jbWRfbGluZWlpaXsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAkYWxpZ25zID0gbmV4dF9vcHRpb25hbF9hcmd1bWVudCgpOworICAgIG15ICRjMSA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkYzIgPSBuZXh0X2FyZ3VtZW50KCk7IAorICAgIG15ICRjMyA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBzL1tcc1xuXSsvLzsKKyAgICBteSgkc2ZvbnQsJGVmb250KSA9IGdldF90YWJsZV9jb2wxX2ZvbnRzKCk7CisgICAgJGMzID0gJyZuYnNwOycgaWYgKCRjMyBlcSAnJyk7CisgICAgbXkoJGMxYWxpZ24sJGMyYWxpZ24sJGMzYWxpZ24pID0gc3BsaXQoJ1x8JywgJGFsaWducyk7CisgICAgbXkgJHBhZGRpbmcgPSAnJzsKKyAgICBpZiAoJGMxYWxpZ24gPX4gL2FsaWduPSJyaWdodCIvIHx8ICRjMSBlcSAnJykgeworICAgICAgICAkcGFkZGluZyA9ICcmbmJzcDsnOworICAgIH0KKyAgICByZXR1cm4gIlxuICAgIDx0cj4kYzFhbGlnbiRzZm9udCRjMSRlZm9udCRwYWRkaW5nPC90ZD5cbiIKKyAgICAgICAgICAgLiAiICAgICAgICAkYzJhbGlnbiRjMjwvdGQ+XG4iCisJICAgLiAiICAgICAgICAkYzNhbGlnbiRjMzwvdGQ+IgorCSAgIC4gJF87Cit9CisKK3N1YiBkb19lbnZfdGFibGVpdnsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSgkdGgxLCR0aDIsJHRoMywkdGg0KSA9IHNldHVwX2NvbHVtbl9hbGlnbm1lbnRzKG5leHRfYXJndW1lbnQoKSk7CisgICAgbXkgJGZvbnQgPSBmaXhfZm9udChuZXh0X2FyZ3VtZW50KCkpOworICAgIG15ICRoMSA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkaDIgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJGgzID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRoNCA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBzL1tcc1xuXSsvLzsKKyAgICAkZ2xvYmFsc3snbGluZWlmb250J30gPSAkZm9udDsKKyAgICBteSAkYTEgPSAkY29sX2FsaWduc1swXTsKKyAgICBteSAkYTIgPSAkY29sX2FsaWduc1sxXTsKKyAgICBteSAkYTMgPSAkY29sX2FsaWduc1syXTsKKyAgICBteSAkYTQgPSAkY29sX2FsaWduc1szXTsKKyAgICBzL1xcbGluZWl2PC9cXGxpbmVpdlskYTF8JGEyfCRhM3wkYTRdPC9nOworICAgIHJldHVybiAnPHRhYmxlIGJvcmRlciBhbGlnbj0iY2VudGVyIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI+JworCSAgIC4gIlxuICA8dGhlYWQ+IgorCSAgIC4gIlxuICAgIDx0ciBjbGFzcz1cInRhYmxlaGVhZGVyXCI+IgorCSAgIC4gIlxuICAgICAgJHRoMTxiPiRoMTwvYj5cJm5ic3A7PC90aD4iCisJICAgLiAiXG4gICAgICAkdGgyPGI+JGgyPC9iPlwmbmJzcDs8L3RoPiIKKwkgICAuICJcbiAgICAgICR0aDM8Yj4kaDM8L2I+XCZuYnNwOzwvdGg+IgorCSAgIC4gIlxuICAgICAgJHRoNDxiPiRoNDwvYj5cJm5ic3A7PC90aD4iCisJICAgLiAiXG4gICAgICA8L3RyPiIKKwkgICAuICJcbiAgICA8L3RoZWFkPiIKKwkgICAuICJcbiAgPHRib2R5IHZhbGlnbj0nYmFzZWxpbmUnPiIKKwkgICAuICRfCisJICAgLiAiXG4gICAgPC90Ym9keT4iCisJICAgLiAiXG48L3RhYmxlPiI7Cit9CisKK3N1YiBkb19lbnZfbG9uZ3RhYmxlaXZ7CisgICAgcmV0dXJuIGRvX2Vudl90YWJsZWl2KEBfKTsKK30KKworc3ViIGRvX2NtZF9saW5laXZ7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJGFsaWducyA9IG5leHRfb3B0aW9uYWxfYXJndW1lbnQoKTsKKyAgICBteSAkYzEgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJGMyID0gbmV4dF9hcmd1bWVudCgpOyAKKyAgICBteSAkYzMgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJGM0ID0gbmV4dF9hcmd1bWVudCgpOworICAgIHMvW1xzXG5dKy8vOworICAgIG15KCRzZm9udCwkZWZvbnQpID0gZ2V0X3RhYmxlX2NvbDFfZm9udHMoKTsKKyAgICAkYzQgPSAnJm5ic3A7JyBpZiAoJGM0IGVxICcnKTsKKyAgICBteSgkYzFhbGlnbiwkYzJhbGlnbiwkYzNhbGlnbiwkYzRhbGlnbikgPSBzcGxpdCgnXHwnLCAkYWxpZ25zKTsKKyAgICBteSAkcGFkZGluZyA9ICcnOworICAgIGlmICgkYzFhbGlnbiA9fiAvYWxpZ249InJpZ2h0Ii8gfHwgJGMxIGVxICcnKSB7CisgICAgICAgICRwYWRkaW5nID0gJyZuYnNwOyc7CisgICAgfQorICAgIHJldHVybiAiXG4gICAgPHRyPiRjMWFsaWduJHNmb250JGMxJGVmb250JHBhZGRpbmc8L3RkPlxuIgorICAgICAgICAgICAuICIgICAgICAgICRjMmFsaWduJGMyPC90ZD5cbiIKKwkgICAuICIgICAgICAgICRjM2FsaWduJGMzPC90ZD5cbiIKKwkgICAuICIgICAgICAgICRjNGFsaWduJGM0PC90ZD4iCisJICAgLiAkXzsKK30KKworCisjIFRoZXNlIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHRpdGxlIHBhZ2UgYXBwZWFyYW5jZTsKKyMgdGhleSBuZWVkIGEgbGl0dGxlIGJpdCBvZiBkb2N1bWVudGF0aW9uLgorIworIyBJZiAkVElUTEVfUEFHRV9HUkFQSElDIGlzIHNldCwgaXQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIGEgZmlsZSBpbiB0aGUKKyMgJElDT05TRVJWRVIgZGlyZWN0b3J5LCBvciBpbmNsdWRlIHBhdGggaW5mb3JtYXRpb24gKG90aGVyIHRoYW4gIi4vIikuICBUaGUKKyMgZGVmYXVsdCBpbWFnZSB0eXBlIHdpbGwgYmUgYXNzdW1lZCBpZiBhbiBleHRlbnNpb24gaXMgbm90IHByb3ZpZGVkLgorIworIyBJZiBzcGVjaWZpZWQsIHRoZSAidGl0bGUgcGFnZSIgd2lsbCBjb250YWluIHR3byBjb2x1bXM6IG9uZSBjb250YWluaW5nIHRoZQorIyB0aXRsZS9hdXRob3IvZXRjLiwgYW5kIHRoZSBvdGhlciBjb250YWluaW5nIHRoZSBncmFwaGljLiAgVXNlIHRoZSBvdGhlcgorIyBmb3VyIHZhcmlhYmxlcyBsaXN0ZWQgaGVyZSB0byBjb250cm9sIHNwZWNpZmljIGRldGFpbHMgb2YgdGhlIGxheW91dDsgYWxsCisjIGFyZSBvcHRpb25hbC4KKyMKKyMgJFRJVExFX1BBR0VfR1JBUEhJQyA9ICJteS1jb21wYW55LWxvZ28iOworIyAkVElUTEVfUEFHRV9HUkFQSElDX0NPTFdJRFRIID0gIjMwJSI7CisjICRUSVRMRV9QQUdFX0dSQVBISUNfV0lEVEggPSAxNTA7CisjICRUSVRMRV9QQUdFX0dSQVBISUNfSEVJR0hUID0gMTUwOworIyAkVElUTEVfUEFHRV9HUkFQSElDX09OX1JJR0hUID0gMDsKKworc3ViIG1ha2VfbXlfdGl0bGVwYWdlKCkgeworICAgIG15ICR0aGVfdGl0bGUgPSAiIjsKKyAgICBpZiAoJHRfdGl0bGUpIHsKKwkkdGhlX3RpdGxlIC49ICJcbjxoMT4kdF90aXRsZTwvaDE+IjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHdyaXRlX3dhcm5pbmdzKCJcblRoaXMgZG9jdW1lbnQgaGFzIG5vIHRpdGxlLiIpOworICAgIH0KKyAgICBpZiAoJHRfYXV0aG9yKSB7CisJaWYgKCR0X2F1dGhvclVSTCkgeworCSAgICBteSAkaHJlZiA9IHRyYW5zbGF0ZV9jb21tYW5kcygkdF9hdXRob3JVUkwpOworCSAgICAkaHJlZiA9IG1ha2VfbmFtZWRfaHJlZignYXV0aG9yJywgJGhyZWYsCisJCQkJICAgICI8Yj48Zm9udCBzaXplPScrMic+JHRfYXV0aG9yPC9mb250PjwvYj4iKTsKKwkgICAgJHRoZV90aXRsZSAuPSAiXG48cD4kaHJlZjwvcD4iOworCX0KKyAgICAgICAgZWxzZSB7CisJICAgICR0aGVfdGl0bGUgLj0gKCJcbjxwPjxiPjxmb250IHNpemU9JysyJz4kdF9hdXRob3I8L2ZvbnQ+PC9iPjwvcD4iKTsKKwl9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB3cml0ZV93YXJuaW5ncygiXG5UaGVyZSBpcyBubyBhdXRob3IgZm9yIHRoaXMgZG9jdW1lbnQuIik7CisgICAgfQorICAgIGlmICgkdF9pbnN0aXR1dGUpIHsKKyAgICAgICAgJHRoZV90aXRsZSAuPSAiXG48cD4kdF9pbnN0aXR1dGU8L3A+IjsKKyAgICB9CisgICAgaWYgKCRERVZFTE9QRVJfQUREUkVTUykgeworICAgICAgICAkdGhlX3RpdGxlIC49ICJcbjxwPiRERVZFTE9QRVJfQUREUkVTUzwvcD4iOworICAgIH0KKyAgICBpZiAoJHRfYWZmaWwpIHsKKwkkdGhlX3RpdGxlIC49ICJcbjxwPjxpPiR0X2FmZmlsPC9pPjwvcD4iOworICAgIH0KKyAgICBpZiAoJHRfZGF0ZSkgeworCSR0aGVfdGl0bGUgLj0gIlxuPHA+IjsKKwlpZiAoJFBBQ0tBR0VfVkVSU0lPTikgeworCSAgICAkdGhlX3RpdGxlIC49ICI8c3Ryb25nPlJlbGVhc2UgJFBBQ0tBR0VfVkVSU0lPTjwvc3Ryb25nPjxicj5cbiI7CisgICAgICAgIH0KKwkkdGhlX3RpdGxlIC49ICI8c3Ryb25nPiR0X2RhdGU8L3N0cm9uZz48L3A+IgorICAgIH0KKyAgICBpZiAoJHRfYWRkcmVzcykgeworCSR0aGVfdGl0bGUgLj0gIlxuPHA+JHRfYWRkcmVzczwvcD4iOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgJHRoZV90aXRsZSAuPSAiXG48cD4iOworICAgIH0KKyAgICBpZiAoJHRfZW1haWwpIHsKKwkkdGhlX3RpdGxlIC49ICJcbjxwPiR0X2VtYWlsPC9wPiI7CisgICAgfQorICAgIHJldHVybiAkdGhlX3RpdGxlOworfQorCitzdWIgbWFrZV9teV90aXRsZWdyYXBoaWMoKSB7CisgICAgbXkgJGZpbGVuYW1lID0gbWFrZV9pY29uX2ZpbGVuYW1lKCRUSVRMRV9QQUdFX0dSQVBISUMpOworICAgIG15ICRncmFwaGljID0gIjx0ZCBjbGFzcz1cInRpdGxlZ3JhcGhpY1wiIjsKKyAgICAkZ3JhcGhpYyAuPSAiIHdpZHRoPVwiJFRJVExFX1BBR0VfR1JBUEhJQ19DT0xXSURUSFwiIgorICAgICAgaWYgKCRUSVRMRV9QQUdFX0dSQVBISUNfQ09MV0lEVEgpOworICAgICRncmFwaGljIC49ICI+PGltZyI7CisgICAgJGdyYXBoaWMgLj0gIiB3aWR0aD1cIiRUSVRMRV9QQUdFX0dSQVBISUNfV0lEVEhcIiIKKyAgICAgIGlmICgkVElUTEVfUEFHRV9HUkFQSElDX1dJRFRIKTsKKyAgICAkZ3JhcGhpYyAuPSAiIGhlaWdodD1cIiRUSVRMRV9QQUdFX0dSQVBISUNfSEVJR0hUXCIiCisgICAgICBpZiAoJFRJVExFX1BBR0VfR1JBUEhJQ19IRUlHSFQpOworICAgICRncmFwaGljIC49ICJcbiAgc3JjPVwiJGZpbGVuYW1lXCI+PC90ZD5cbiI7CisgICAgcmV0dXJuICRncmFwaGljOworfQorCitzdWIgZG9fY21kX21ha2V0aXRsZSB7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbXkgJHRoZV90aXRsZSA9ICJcbjxkaXYgY2xhc3M9XCJ0aXRsZXBhZ2VcIj4iOworICAgIGlmICgkVElUTEVfUEFHRV9HUkFQSElDKSB7CisgICAgICAgIGlmICgkVElUTEVfUEFHRV9HUkFQSElDX09OX1JJR0hUKSB7CisgICAgICAgICAgICAkdGhlX3RpdGxlIC49ICgiXG48dGFibGUgYm9yZGVyPVwiMFwiIHdpZHRoPVwiMTAwJVwiPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIjx0ciBhbGlnbj1cInJpZ2h0XCI+XG48dGQ+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLiBtYWtlX215X3RpdGxlcGFnZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAuICI8L3RkPlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLiBtYWtlX215X3RpdGxlZ3JhcGhpYygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAuICI8L3RyPlxuPC90YWJsZT4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICR0aGVfdGl0bGUgLj0gKCJcbjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCI+PHRyPlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLiBtYWtlX215X3RpdGxlZ3JhcGhpYygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAuICI8dGQ+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLiBtYWtlX215X3RpdGxlcGFnZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAuICI8L3RkPjwvdHI+XG48L3RhYmxlPiIpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAkdGhlX3RpdGxlIC49ICgiXG48Y2VudGVyPiIKKyAgICAgICAgICAgICAgICAgICAgICAgLiBtYWtlX215X3RpdGxlcGFnZSgpCisgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuPC9jZW50ZXI+Iik7CisgICAgfQorICAgICR0aGVfdGl0bGUgLj0gIlxuPC9kaXY+IjsKKyAgICByZXR1cm4gJHRoZV90aXRsZSAuICRfOworICAgICR0aGVfdGl0bGUgLj0gIlxuPC9jZW50ZXI+PC9kaXY+IjsKKyAgICByZXR1cm4gJHRoZV90aXRsZSAuICRfIDsKK30KKworCisjCisjICBNb2R1bGUgc3lub3BzaXMgc3VwcG9ydAorIworCityZXF1aXJlIFN5bm9wc2lzVGFibGU7CisKK3N1YiBnZXRfY2hhcHRlcl9pZCgpeworICAgIG15ICRpZCA9IGRvX2NtZF90aGVjaGFwdGVyKCcnKTsKKyAgICAkaWQgPX4gcy88U1BBTiBDTEFTUz0iYXJhYmljIj4oXGQrKTxcL1NQQU4+L1wxLzsKKyAgICAkaWQgPX4gcy9cLi8vOworICAgIHJldHVybiAkaWQ7Cit9CisKKyMgJ2NoYXB0ZXInID0+ICdTeW5vcHNpc1RhYmxlIGluc3RhbmNlJworJU1vZHVsZVN5bm9wc2VzID0gKCk7CisKK3N1YiBnZXRfc3lub3BzaXNfdGFibGUoJCl7CisgICAgbXkoJGNoYXApID0gQF87CisgICAgbXkgJGtleTsKKyAgICBmb3JlYWNoICRrZXkgKGtleXMgJU1vZHVsZVN5bm9wc2VzKSB7CisJaWYgKCRrZXkgZXEgJGNoYXApIHsKKwkgICAgcmV0dXJuICRNb2R1bGVTeW5vcHNlc3skY2hhcH07CisJfQorICAgIH0KKyAgICBteSAkc3QgPSBTeW5vcHNpc1RhYmxlLT5uZXcoKTsKKyAgICAkTW9kdWxlU3lub3BzZXN7JGNoYXB9ID0gJHN0OworICAgIHJldHVybiAkc3Q7Cit9CisKK3N1YiBkb19jbWRfbW9kdWxlYXV0aG9yeworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG5leHRfYXJndW1lbnQoKTsKKyAgICBuZXh0X2FyZ3VtZW50KCk7CisgICAgcmV0dXJuICRfOworfQorCitzdWIgZG9fY21kX3NlY3Rpb25hdXRob3J7CisgICAgbG9jYWwoJF8pID0gQF87CisgICAgbmV4dF9hcmd1bWVudCgpOworICAgIG5leHRfYXJndW1lbnQoKTsKKyAgICByZXR1cm4gJF87Cit9CisKK3N1YiBkb19jbWRfZGVjbGFyZW1vZHVsZXsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAka2V5ID0gbmV4dF9vcHRpb25hbF9hcmd1bWVudCgpOworICAgIG15ICR0eXBlID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRuYW1lID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICRzdCA9IGdldF9zeW5vcHNpc190YWJsZShnZXRfY2hhcHRlcl9pZCgpKTsKKyAgICAjCisgICAgJGtleSA9ICRuYW1lIHVubGVzcyAka2V5OworICAgICR0eXBlID0gJ2J1aWx0LWluJyBpZiAkdHlwZSBlcSAnYnVpbHRpbic7CisgICAgJHN0LT5kZWNsYXJlKCRuYW1lLCAka2V5LCAkdHlwZSk7CisgICAgZGVmaW5lX21vZHVsZSgkdHlwZSwgJG5hbWUpOworICAgIHJldHVybiBhbmNob3JfbGFiZWwoIm1vZHVsZS0ka2V5IiwkQ1VSUkVOVF9GSUxFLCRfKQorfQorCitzdWIgZG9fY21kX21vZHVsZXN5bm9wc2lzeworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICRzdCA9IGdldF9zeW5vcHNpc190YWJsZShnZXRfY2hhcHRlcl9pZCgpKTsKKyAgICAkc3QtPnNldF9zeW5vcHNpcygkVEhJU19NT0RVTEUsIHRyYW5zbGF0ZV9jb21tYW5kcyhuZXh0X2FyZ3VtZW50KCkpKTsKKyAgICByZXR1cm4gJF87Cit9CisKK3N1YiBkb19jbWRfbG9jYWxtb2R1bGV0YWJsZXsKKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAkY2hhcCA9IGdldF9jaGFwdGVyX2lkKCk7CisgICAgbXkgJHN0ID0gZ2V0X3N5bm9wc2lzX3RhYmxlKCRjaGFwKTsKKyAgICAkc3QtPnNldF9maWxlKCIkQ1VSUkVOVF9GSUxFIik7CisgICAgcmV0dXJuICI8dGV4Mmh0bWwtbG9jYWxtb2R1bGV0YWJsZT48JGNoYXA+XFx0YWJsZW9mY2hpbGRsaW5rc1tvZmZdIiAuICRfOworfQorCitzdWIgcHJvY2Vzc19hbGxfbG9jYWxtb2R1bGV0YWJsZXN7CisgICAgbXkgJGtleTsKKyAgICBteSAkc3QsICRmaWxlOworICAgIGZvcmVhY2ggJGtleSAoa2V5cyAlTW9kdWxlU3lub3BzZXMpIHsKKyAgICAgICAgJHN0ID0gJE1vZHVsZVN5bm9wc2VzeyRrZXl9OworICAgICAgICAkZmlsZSA9ICRzdC0+Z2V0X2ZpbGUoKTsKKyAgICAgICAgaWYgKCRmaWxlKSB7CisgICAgICAgICAgICBwcm9jZXNzX2xvY2FsbW9kdWxldGFibGVzX2luX2ZpbGUoJGZpbGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcHJpbnQgIlxuc3lub3BzaXMgdGFibGUgJGtleSBoYXMgbm8gZmlsZSBhc3NvY2lhdGlvbiI7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N1YiBwcm9jZXNzX2xvY2FsbW9kdWxldGFibGVzX2luX2ZpbGV7CisgICAgbXkgJGZpbGUgPSBAX1swXTsKKyAgICBvcGVuKE1ZRklMRSwgIjwkZmlsZSIpOworICAgIGxvY2FsKCRfKTsKKyAgICBzeXNyZWFkKE1ZRklMRSwgJF8sIDEwMjQqMTAyNCk7CisgICAgY2xvc2UoTVlGSUxFKTsKKyAgICAjIG5lZWQgdG8gZ2V0IGNvbnRlbnRzIG9mIGZpbGUgaW4gJF8KKyAgICB3aGlsZSAoLzx0ZXgyaHRtbC1sb2NhbG1vZHVsZXRhYmxlPjwoXGQrKT4vKSB7CisJbXkgJG1hdGNoID0gJCY7CisJbXkgJGNoYXAgPSAkMTsKKwlteSAkc3QgPSBnZXRfc3lub3BzaXNfdGFibGUoJGNoYXApOworCW15ICRkYXRhID0gJHN0LT50b2h0bWwoKTsKKwlzLyRtYXRjaC8kZGF0YS87CisgICAgfQorICAgIG9wZW4oTVlGSUxFLCI+JGZpbGUiKTsKKyAgICBwcmludCBNWUZJTEUgJF87CisgICAgY2xvc2UoTVlGSUxFKTsKK30KK3N1YiBwcm9jZXNzX3B5dGhvbl9zdGF0ZXsKKyAgICBwcm9jZXNzX2FsbF9sb2NhbG1vZHVsZXRhYmxlcygpOworfQorCisKKyMKKyMgICJTZWUgYWxzbzoiIC0tIHJlZmVyZW5jZXMgcGxhY2VkIGF0IHRoZSBlbmQgb2YgYSBcc2VjdGlvbgorIworCitzdWIgZG9fZW52X3NlZWFsc297CisgICAgcmV0dXJuICI8ZGl2IGNsYXNzPSdzZWVhbHNvJz5cbiAgIgorICAgICAgLiAiPHAgY2xhc3M9J2hlYWRpbmcnPjxiPlNlZSBBbHNvOjwvYj48L3A+XG4iCisgICAgICAuIEBfWzBdCisgICAgICAuICc8L2Rpdj4nOworfQorCitzdWIgZG9fY21kX3NlZW1vZHVsZXsKKyAgICAjIEluc2VydCB0aGUgcmlnaHQgbWFnaWMgdG8ganVtcCB0byB0aGUgbW9kdWxlIGRlZmluaXRpb24uICBUaGlzIHNob3VsZAorICAgICMgd29yayBtb3N0IG9mIHRoZSB0aW1lLCBhdCBsZWFzdCBmb3IgcmVwZWF0IGJ1aWxkcy4uLi4KKyAgICBsb2NhbCgkXykgPSBAXzsKKyAgICBteSAka2V5ID0gbmV4dF9vcHRpb25hbF9hcmd1bWVudCgpOworICAgIG15ICRtb2R1bGUgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJHRleHQgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJHBlcmlvZCA9ICcuJzsKKyAgICAka2V5ID0gJG1vZHVsZQorICAgICAgICB1bmxlc3MgJGtleTsKKyAgICBpZiAoJHRleHQgPX4gL1wuJC8pIHsKKwkkcGVyaW9kID0gJyc7CisgICAgfQorICAgIHJldHVybiAnPGRsIGNvbXBhY3QgY2xhc3M9InNlZW1vZHVsZSI+JworICAgICAgLiAiXG4gICAgPGR0Pk1vZHVsZSA8Yj48dHQgY2xhc3M9J21vZHVsZSc+PGEgaHJlZj0nbW9kdWxlLSRrZXkuaHRtbCc+IgorICAgICAgLiAiJG1vZHVsZTwvYT48L3R0Pjo8L2I+IgorICAgICAgLiAiXG4gICAgPGRkPiR0ZXh0JHBlcmlvZFxuICA8L2RsPiIKKyAgICAgIC4gJF87Cit9CisKK3N1YiBzdHJpcF9odG1sX21hcmt1cCgkKXsKKyAgICBteSAkc3RyID0gQF9bMF07CisgICAgbXkgJHMgPSAiJHN0ciI7CisgICAgJHMgPX4gcy88W2EtekEtWjAtOV0rKFxzK1thLXpBLVowLTldKyhccyo9XHMqKFwnW15cJ10qXCd8XCJbXlwiXSpcInxbYS16QS1aMC05XSspKT8pKlxzKj4vL2c7CisgICAgJHMgPX4gcy88XC9bYS16QS1aMC05XSs+Ly9nOworICAgIHJldHVybiAkczsKK30KKworc3ViIGhhbmRsZV9yZmNsaWtlX3JlZmVyZW5jZXsKKyAgICBsb2NhbCgkXywgJHdoYXQsICRmb3JtYXQpID0gQF87CisgICAgbXkgJHJmY251bSA9IG5leHRfYXJndW1lbnQoKTsKKyAgICBteSAkdGl0bGUgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJHRleHQgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJHVybCA9IGdldF9yZmNfdXJsKCRyZmNudW0sICRmb3JtYXQpOworICAgIG15ICRpY29uID0gZ2V0X2xpbmtfaWNvbigkdXJsKTsKKyAgICBteSAkYXR0cnRpdGxlID0gc3RyaXBfaHRtbF9tYXJrdXAoJHRpdGxlKTsKKyAgICByZXR1cm4gJzxkbCBjb21wYWN0IGNsYXNzPSJzZWVyZmMiPicKKyAgICAgIC4gIlxuICAgIDxkdD48YSBocmVmPVwiJHVybFwiIgorICAgICAgLiAiXG4gICAgICAgIHRpdGxlPVwiJGF0dHJ0aXRsZVwiIgorICAgICAgLiAiXG4gICAgICAgID4kd2hhdCAkcmZjbnVtLCA8ZW0+JHRpdGxlPC9lbT4kaWNvbjwvYT4iCisgICAgICAuICJcbiAgICA8ZGQ+JHRleHRcbiAgPC9kbD4iCisgICAgICAuICRfOworfQorCitzdWIgZG9fY21kX3NlZXBlcHsKKyAgICByZXR1cm4gaGFuZGxlX3JmY2xpa2VfcmVmZXJlbmNlKEBfWzBdLCAiUEVQIiwgJFBFUF9GT1JNQVQpOworfQorCitzdWIgZG9fY21kX3NlZXJmY3sKKyAgICByZXR1cm4gaGFuZGxlX3JmY2xpa2VfcmVmZXJlbmNlKEBfWzBdLCAiUkZDIiwgJFJGQ19GT1JNQVQpOworfQorCitzdWIgZG9fY21kX3NlZXRpdGxleworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICR1cmwgPSBuZXh0X29wdGlvbmFsX2FyZ3VtZW50KCk7CisgICAgbXkgJHRpdGxlID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15ICR0ZXh0ID0gbmV4dF9hcmd1bWVudCgpOworICAgIGlmICgkdXJsKSB7CisgICAgICAgIG15ICRpY29uID0gZ2V0X2xpbmtfaWNvbigkdXJsKTsKKyAgICAgICAgcmV0dXJuICc8ZGwgY29tcGFjdCBjbGFzcz0ic2VldGl0bGUiPicKKyAgICAgICAgICAuICJcbiAgICA8ZHQ+PGVtIGNsYXNzPVwiY2l0ZXRpdGxlXCI+PGEgaHJlZj1cIiR1cmxcIiIKKyAgICAgICAgICAuICJcbiAgICAgICAgPiR0aXRsZSRpY29uPC9hPjwvZW0+IgorICAgICAgICAgIC4gIlxuICAgIDxkZD4kdGV4dFxuICA8L2RsPiIKKyAgICAgICAgICAuICRfOworICAgIH0KKyAgICByZXR1cm4gJzxkbCBjb21wYWN0IGNsYXNzPSJzZWV0aXRsZSI+JworICAgICAgLiAiXG4gICAgPGR0PjxlbSBjbGFzcz1cImNpdGV0aXRsZVwiIgorICAgICAgLiAiXG4gICAgICAgID4kdGl0bGU8L2VtPiIKKyAgICAgIC4gIlxuICAgIDxkZD4kdGV4dFxuICA8L2RsPiIKKyAgICAgIC4gJF87Cit9CisKK3N1YiBkb19jbWRfc2VldXJseworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICR1cmwgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJHRleHQgPSBuZXh0X2FyZ3VtZW50KCk7CisgICAgbXkgJGljb24gPSBnZXRfbGlua19pY29uKCR1cmwpOworICAgIHJldHVybiAnPGRsIGNvbXBhY3QgY2xhc3M9InNlZXVybCI+JworICAgICAgLiAiXG4gICAgPGR0PjxhIGhyZWY9XCIkdXJsXCIiCisgICAgICAuICJcbiAgICAgICAgY2xhc3M9XCJ1cmxcIj4kdXJsJGljb248L2E+IgorICAgICAgLiAiXG4gICAgPGRkPiR0ZXh0XG4gIDwvZGw+IgorICAgICAgLiAkXzsKK30KKworc3ViIGRvX2NtZF9zZWV0ZXh0eworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICRjb250ZW50ID0gbmV4dF9hcmd1bWVudCgpOworICAgIHJldHVybiAnPGRpdiBjbGFzcz0ic2VldGV4dCI+PHA+JyAuICRjb250ZW50IC4gJzwvZGl2PicgLiAkXzsKK30KKworCisjCisjICBEZWZpbml0aW9uIGxpc3Qgc3VwcG9ydC4KKyMKKworc3ViIGRvX2Vudl9kZWZpbml0aW9uc3sKKyAgICByZXR1cm4gIjxkbCBjbGFzcz0nZGVmaW5pdGlvbnMnPiIgLiBAX1swXSAuICI8L2RsPlxuIjsKK30KKworc3ViIGRvX2NtZF90ZXJteworICAgIGxvY2FsKCRfKSA9IEBfOworICAgIG15ICR0ZXJtID0gbmV4dF9hcmd1bWVudCgpOworICAgIG15KCRuYW1lLCRhbmFtZSwkYWhyZWYpID0gbmV3X2xpbmtfaW5mbygpOworICAgICMgY291bGQgZWFzaWx5IGFkZCBhbiBpbmRleCBlbnRyeSBoZXJlLi4uCisgICAgcmV0dXJuICI8ZHQ+PGI+JGFuYW1lIiAuICR0ZXJtIC4gIjwvYT48L2I+XG48ZGQ+IiAuICRfOworfQorCisKKyMgSSBkb24ndCByZWNhbGwgZXhhY3RseSB3aHkgdGhpcyB3YXMgbmVlZGVkLCBidXQgaXQgd2FzIHZlcnkgbXVjaCBuZWVkZWQuCisjIFdlJ2xsIHNlZSBpZiBhbnl0aGluZyBicmVha3Mgd2hlbiBJIG1vdmUgdGhlICJjb2RlIiBsaW5lIG91dCAtLSBzb21lCisjIHRoaW5ncyBicm9rZSB3aXRoIGl0IGluLgorCisjY29kZSAjIHt9Citwcm9jZXNzX2NvbW1hbmRzX3dyYXBfZGVmZXJyZWQoPDxfUkFXX0FSR19ERUZFUlJFRF9DTURTXyk7CitkZWNsYXJlbW9kdWxlICMgW10gIyB7fSAjIHt9CittZW1iZXJsaW5lICMgW10gIyB7fQorbWV0aG9kbGluZSAjIFtdICMge30gIyB7fQorbW9kdWxlc3lub3BzaXMgIyB7fQorcGxhdGZvcm0gIyB7fQorc2FtcCAjIHt9CitzZXRpbmRleHN1Yml0ZW0gIyB7fQord2l0aHN1Yml0ZW0gIyB7fSAjIHt9CitfUkFXX0FSR19ERUZFUlJFRF9DTURTXworCisKKyRhbGx0dF9zdGFydCA9ICc8ZGw+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4nOworJGFsbHR0X2VuZCA9ICc8L3ByZT48L2RsPic7CisKK3N1YiBkb19lbnZfYWxsdHQgeworICAgIGxvY2FsICgkXykgPSBAXzsKKyAgICBsb2NhbCgkY2xvc3VyZXMsJHJlb3BlbnMsQG9wZW5fYmxvY2tfdGFncyk7CisKKyAgICAjIGdldCB0aGUgdGFnLXN0cmluZ3MgZm9yIGFsbCBvcGVuIHRhZ3MKKyAgICBsb2NhbChAa2VlcF9vcGVuX3RhZ3MpID0gQCRvcGVuX3RhZ3NfUjsKKyAgICAoJGNsb3N1cmVzLCRyZW9wZW5zKSA9ICZwcmVzZXJ2ZV9vcGVuX3RhZ3MoKSBpZiAoQCRvcGVuX3RhZ3NfUik7CisKKyAgICAjIGdldCB0aGUgdGFncyBmb3IgdGV4dC1sZXZlbCB0YWdzIG9ubHkKKyAgICAkb3Blbl90YWdzX1IgPSBbIEBrZWVwX29wZW5fdGFncyBdOworICAgIGxvY2FsKCRsb2NhbF9jbG9zdXJlcywgJGxvY2FsX3Jlb3BlbnMpOworICAgICgkbG9jYWxfY2xvc3VyZXMsICRsb2NhbF9yZW9wZW5zLEBvcGVuX2Jsb2NrX3RhZ3MpCisgICAgICA9ICZwcmVzZXJ2ZV9vcGVuX2Jsb2NrX3RhZ3MKKwlpZiAoQCRvcGVuX3RhZ3NfUik7CisKKyAgICAkb3Blbl90YWdzX1IgPSBbIEBvcGVuX2Jsb2NrX3RhZ3MgXTsKKworICAgIGRvIHsKKwlsb2NhbCgkb3Blbl90YWdzX1IpID0gWyBAb3Blbl9ibG9ja190YWdzIF07CisJbG9jYWwoQHNhdmVfb3Blbl90YWdzKSA9ICgpOworCisJbG9jYWwoJGNudCkgPSArKyRnbG9iYWx7J21heF9pZCd9OworCSRfID0gam9pbignJywiJE8kY250JENcXHR0JE8iLCArKyRnbG9iYWx7J21heF9pZCd9LCAkQworCQksICRfICwgJE8sICRnbG9iYWx7J21heF9pZCd9LCAiJEMkTyRjbnQkQyIpOworCisJJF8gPSAmdHJhbnNsYXRlX2Vudmlyb25tZW50cygkXyk7CisJJF8gPSAmdHJhbnNsYXRlX2NvbW1hbmRzKCRfKSBpZiAoL1xcLyk7CisKKwkjIHByZXNlcnZlIHNwYWNlLXJ1bnMsIHVzaW5nICZuYnNwOworCXdoaWxlIChzLyhcUykgKCArKS8kMSQyO1NQTW5ic3A7L2cpe307CisJcy8oPEJSPikgLyQxO1NQTW5ic3A7L2c7CisKKwkkXyA9IGpvaW4oJycsICRjbG9zdXJlcywgJGFsbHR0X3N0YXJ0LCAkbG9jYWxfcmVvcGVucworCQksICRfCisJCSwgJmJhbGFuY2VfdGFncygpICMsICRsb2NhbF9jbG9zdXJlcworCQksICRhbGx0dF9lbmQsICRyZW9wZW5zKTsKKwl1bmRlZiAkb3Blbl90YWdzX1I7IHVuZGVmIEBzYXZlX29wZW5fdGFnczsKKyAgICB9OworICAgICRvcGVuX3RhZ3NfUiA9IFsgQGtlZXBfb3Blbl90YWdzIF07CisgICAgJF87Cit9CisKKworMTsJCQkJIyBUaGlzIG11c3QgYmUgdGhlIGxhc3QgbGluZQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3B1c2gtZG9jcy5zaCBiL2RvYy90b29scy9wdXNoLWRvY3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzIyN2JjZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9wdXNoLWRvY3Muc2gKQEAgLTAsMCArMSw0MiBAQAorIyEgL2Jpbi9zaAorCisjICBTY3JpcHQgdG8gcHVzaCBkb2NzIGZyb20gbXkgZGV2ZWxvcG1lbnQgYXJlYSB0byBTb3VyY2VGb3JnZSwgd2hlcmUgdGhlCisjICB1cGRhdGUtZG9jcy5zaCBzY3JpcHQgdW5wYWNrcyB0aGVtIGludG8gdGhlaXIgZmluYWwgZGVzdGluYXRpb24uCisKK1RBUkdFVD1weXRob24uc291cmNlZm9yZ2UubmV0Oi9ob21lL3VzZXJzL2ZkcmFrZS90bXAKKworQUREUkVTU0VTPSdweXRob24tZGV2QHB5dGhvbi5vcmcgZG9jLXNpZ0BweXRob24ub3JnIHB5dGhvbi1saXN0QHB5dGhvbi5vcmcnCisKK0VYUExBTkFUSU9OPScnCisKK2lmIFsgIiQxIiA9ICctbScgXSA7IHRoZW4KKyAgICBFWFBMQU5BVElPTj0iJDIiCisgICAgc2hpZnQgMgorZWxpZiBbICIkMSIgXSA7IHRoZW4KKyAgICBFWFBMQU5BVElPTj0iYGNhdCAkMWAiCisgICAgc2hpZnQgMQorZmkKKworU1RBUlQ9ImBwd2RgIgorTVlESVI9ImBkaXJuYW1lICQwYCIKK2NkICIkTVlESVIiCitNWURJUj0iYHB3ZGAiCisKK2NkIC4uCisKKyMgbm93IGluIC4uLi9Eb2MvCittYWtlIC0tbm8tcHJpbnQtZGlyZWN0b3J5IHx8IGV4aXQgJD8KK21ha2UgLS1uby1wcmludC1kaXJlY3RvcnkgYnppcGh0bWwgfHwgZXhpdCAkPworUkVMRUFTRT1gZ3JlcCAnXlJFTEVBU0U9JyBNYWtlZmlsZSB8IHNlZCAnc3xSRUxFQVNFPXx8J2AKK1BBQ0tBR0U9Imh0bWwtJFJFTEVBU0UudGFyLmJ6MiIKK3NjcCAiJFBBQ0tBR0UiIHRvb2xzL3VwZGF0ZS1kb2NzLnNoICRUQVJHRVQvIHx8IGV4aXQgJD8KK3NzaCBweXRob24uc291cmNlZm9yZ2UubmV0IHRtcC91cGRhdGUtZG9jcy5zaCAkUEFDS0FHRSAnJiYnIHJtIHRtcC91cGRhdGUtZG9jcy5zaCB8fCBleGl0ICQ/CisKK01haWwgLXMgJ1tkZXZlbG9wbWVudCBkb2MgdXBkYXRlc10nICRBRERSRVNTRVMgPDxFT0YKK1RoZSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQ6CisKKwlodHRwOi8vcHl0aG9uLnNvdXJjZWZvcmdlLm5ldC9kZXZlbC1kb2NzLworCiskRVhQTEFOQVRJT04KK0VPRgorZXhpdCAkPwpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3JlZmNvdW50cy5weSBiL2RvYy90b29scy9yZWZjb3VudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjOTAwNwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9yZWZjb3VudHMucHkKQEAgLTAsMCArMSw5NyBAQAorIiIiU3VwcG9ydCBmdW5jdGlvbnMgZm9yIGxvYWRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBkYXRhIGZpbGUuIiIiCitfX3ZlcnNpb25fXyA9ICckUmV2aXNpb246IDEuMS4xLjEgJCcKKworaW1wb3J0IG9zCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgc3lzCisKKworIyBEZXRlcm1pbmUgdGhlIGV4cGVjdGVkIGxvY2F0aW9uIG9mIHRoZSByZWZlcmVuY2UgY291bnQgZmlsZToKK3RyeToKKyAgICBwID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBwID0gc3lzLnBhdGhbMF0KK3AgPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgcCwgb3MucGFyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcGkiLCAicmVmY291bnRzLmRhdCIpKQorREVGQVVMVF9QQVRIID0gcAorZGVsIHAKKworCitkZWYgbG9hZChwYXRoPURFRkFVTFRfUEFUSCk6CisgICAgcmV0dXJuIGxvYWRmaWxlKG9wZW4ocGF0aCkpCisKKworZGVmIGxvYWRmaWxlKGZwKToKKyAgICBkID0ge30KKyAgICB3aGlsZSAxOgorICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGxpbmUgPSBzdHJpbmcuc3RyaXAobGluZSkKKyAgICAgICAgaWYgbGluZVs6MV0gaW4gKCIiLCAiIyIpOgorICAgICAgICAgICAgIyBibGFuayBsaW5lcyBhbmQgY29tbWVudHMKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHBhcnRzID0gc3RyaW5nLnNwbGl0KGxpbmUsICI6IiwgNCkKKyAgICAgICAgZnVuY3Rpb24sIHR5cGUsIGFyZywgcmVmY291bnQsIGNvbW1lbnQgPSBwYXJ0cworICAgICAgICBpZiByZWZjb3VudCA9PSAibnVsbCI6CisgICAgICAgICAgICByZWZjb3VudCA9IE5vbmUKKyAgICAgICAgZWxpZiByZWZjb3VudDoKKyAgICAgICAgICAgIHJlZmNvdW50ID0gaW50KHJlZmNvdW50KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVmY291bnQgPSBOb25lCisgICAgICAgICMKKyAgICAgICAgIyBHZXQgdGhlIGVudHJ5LCBjcmVhdGluZyBpdCBpZiBuZWVkZWQ6CisgICAgICAgICMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW50cnkgPSBkW2Z1bmN0aW9uXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBlbnRyeSA9IGRbZnVuY3Rpb25dID0gRW50cnkoZnVuY3Rpb24pCisgICAgICAgICMKKyAgICAgICAgIyBVcGRhdGUgdGhlIGVudHJ5IHdpdGggdGhlIG5ldyBwYXJhbWV0ZXIgb3IgdGhlIHJlc3VsdCBpbmZvcm1hdGlvbi4KKyAgICAgICAgIworICAgICAgICBpZiBhcmc6CisgICAgICAgICAgICBlbnRyeS5hcmdzLmFwcGVuZCgoYXJnLCB0eXBlLCByZWZjb3VudCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnRyeS5yZXN1bHRfdHlwZSA9IHR5cGUKKyAgICAgICAgICAgIGVudHJ5LnJlc3VsdF9yZWZzID0gcmVmY291bnQKKyAgICByZXR1cm4gZAorCisKK2NsYXNzIEVudHJ5OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmFyZ3MgPSBbXQorICAgICAgICBzZWxmLnJlc3VsdF90eXBlID0gJycKKyAgICAgICAgc2VsZi5yZXN1bHRfcmVmcyA9IE5vbmUKKworCitkZWYgZHVtcChkKToKKyAgICAiIiJEdW1wIHRoZSBkYXRhIGluIHRoZSAnY2Fub25pY2FsJyBmb3JtYXQsIHdpdGggZnVuY3Rpb25zIGluCisgICAgc29ydGVkIG9yZGVyLiIiIgorICAgIGl0ZW1zID0gZC5pdGVtcygpCisgICAgaXRlbXMuc29ydCgpCisgICAgZmlyc3QgPSAxCisgICAgZm9yIGssIGVudHJ5IGluIGl0ZW1zOgorICAgICAgICBpZiBmaXJzdDoKKyAgICAgICAgICAgIGZpcnN0ID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgcyA9IGVudHJ5Lm5hbWUgKyAiOiVzOiVzOiVzOiIKKyAgICAgICAgaWYgZW50cnkucmVzdWx0X3JlZnMgaXMgTm9uZToKKyAgICAgICAgICAgIHIgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgciA9IGVudHJ5LnJlc3VsdF9yZWZzCisgICAgICAgIHByaW50IHMgJSAoZW50cnkucmVzdWx0X3R5cGUsICIiLCByKQorICAgICAgICBmb3IgdCwgbiwgciBpbiBlbnRyeS5hcmdzOgorICAgICAgICAgICAgaWYgciBpcyBOb25lOgorICAgICAgICAgICAgICAgIHIgPSAiIgorICAgICAgICAgICAgcHJpbnQgcyAlICh0LCBuLCByKQorCisKK2RlZiBtYWluKCk6CisgICAgZCA9IGxvYWQoKQorICAgIGR1bXAoZCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3NnbWxjb252L01ha2VmaWxlIGIvZG9jL3Rvb2xzL3NnbWxjb252L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYTg0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvc2dtbGNvbnYvTWFrZWZpbGUKQEAgLTAsMCArMSw2NyBAQAorIyBTaW1wbGUgbWFrZWZpbGUgdG8gY29udHJvbCBYTUwgZ2VuZXJhdGlvbiBmb3IgdGhlIGVudGlyZSBkb2N1bWVudCB0cmVlLgorIyBUaGlzIHNob3VsZCBiZSB1c2VkIGZyb20gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkgKERvYy8pLCBub3QgdGhlIGRpcmVjdG9yeQorIyB0aGF0IGFjdHVhbGx5IGNvbnRhaW5zIHRoaXMgZmlsZToKKyMKKyMgICQgcHdkCisjICAuLi4vRG9jCisjICAkIG1ha2UgLWYgdG9vbHMvc2dtbGNvbnYvTWFrZWZpbGUKKworVE9QRElSPS4KK1RPT0xTRElSPXRvb2xzCisKK1NHTUxSVUxFUz0uLi8kKFRPT0xTRElSKS9zZ21sY29udi9tYWtlLnJ1bGVzCisjIFRoZSAnaW5zdCcgZGlyZWN0b3J5IGJyZWFrcyB0aGUgY29udmVyc2lvbiwgc28gc2tpcCBpdCBmb3Igbm93LgorU1VCRElSUz1hcGkgZGlzdCBleHQgbGliIG1hYyByZWYgdHV0CitTVUJNQUtFPSQoTUFLRSkgLWYgJChTR01MUlVMRVMpIFRPT0xTRElSPS4uLyQoVE9PTFNESVIpCisKK2FsbDoJeG1sCisKKy5QSE9OWTogZXNpcyB4bWwKKy5QSE9OWTogJChTVUJESVJTKQorCit4bWw6CisJZm9yIERJUiBpbiAkKFNVQkRJUlMpIDsgZG8gXAorCSAgICAoY2QgJCRESVI7ICQoU1VCTUFLRSkgeG1sKSB8fCBleGl0ICQkPyA7IGRvbmUKKworZXNpczoKKwlmb3IgRElSIGluICQoU1VCRElSUykgOyBkbyBcCisJICAgIChjZCAkJERJUjsgJChTVUJNQUtFKSBlc2lzKSB8fCBleGl0ICQkPyA7IGRvbmUKKworZXNpczE6CisJZm9yIERJUiBpbiAkKFNVQkRJUlMpIDsgZG8gXAorCSAgICAoY2QgJCRESVI7ICQoU1VCTUFLRSkgZXNpczEpIHx8IGV4aXQgJCQ/IDsgZG9uZQorCit0YXJiYWxsOiAgeG1sCisJdGFyIGNmIC0gdG9vbHMvc2dtbGNvbnYgKi8qLnhtbCB8IGd6aXAgLTkgPnhtbC0xLjUuMmIyLnRnegorCithcGk6CisJY2QgYXBpOyAkKFNVQk1BS0UpCisKK2Rpc3Q6CisJY2QgZGlzdDsgJChTVUJNQUtFKQorCitleHQ6CisJY2QgZXh0OyAkKFNVQk1BS0UpCisKK2luc3Q6CisJY2QgaW5zdDsgJChTVUJNQUtFKQorCitsaWI6CisJY2QgbGliOyAkKFNVQk1BS0UpCisKK21hYzoKKwljZCBtYWM7ICQoU1VCTUFLRSkKKworcmVmOgorCWNkIHJlZjsgJChTVUJNQUtFKQorCit0dXQ6CisJY2QgdHV0OyAkKFNVQk1BS0UpCisKK2NsZWFuOgorCWZvciBESVIgaW4gJChTVUJESVJTKSA7IGRvIFwKKwkgICAgKGNkICQkRElSOyAkKFNVQk1BS0UpIGNsZWFuKSA7IGRvbmUKKworY2xvYmJlcjoKKwlmb3IgRElSIGluICQoU1VCRElSUykgOyBkbyBcCisJICAgIChjZCAkJERJUjsgJChTVUJNQUtFKSBjbG9iYmVyKSA7IGRvbmUKZGlmZiAtLWdpdCBhL2RvYy90b29scy9zZ21sY29udi9SRUFETUUgYi9kb2MvdG9vbHMvc2dtbGNvbnYvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NDYyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvc2dtbGNvbnYvUkVBRE1FCkBAIC0wLDAgKzEsNTggQEAKK1RoZXNlIHNjcmlwdHMgYW5kIE1ha2VmaWxlIGZyYWdtZW50IGFyZSB1c2VkIHRvIGNvbnZlcnQgdGhlIFB5dGhvbgorZG9jdW1lbnRhdGlvbiBpbiBMYVRlWCBmb3JtYXQgdG8gWE1MLgorCitUaGlzIG1hdGVyaWFsIGlzIHByZWxpbWluYXJ5IGFuZCBpbmNvbXBsZXRlLiAgUHl0aG9uIDIuMCBpcyByZXF1aXJlZC4KKworVG8gY29udmVydCBhbGwgZG9jdW1lbnRzIHRvIFhNTDoKKworCWNkIERvYy8KKwltYWtlIC1mIHRvb2xzL3NnbWxjb252L01ha2VmaWxlCisKK1RvIGNvbnZlcnQgb25lIGRvY3VtZW50IHRvIFhNTDoKKworCWNkIERvYy88ZG9jdW1lbnQtZGlyPgorCW1ha2UgLWYgLi4vdG9vbHMvc2dtbGNvbnYvbWFrZS5ydWxlcyBUT09MU0RJUj0uLi90b29scworCitQbGVhc2Ugc2VuZCBjb21tZW50cyBhbmQgYnVnIHJlcG9ydHMgdG8gcHl0aG9uLWRvY3NAcHl0aG9uLm9yZy4KKworCitXaGF0IGRvIHRoZSB0b29scyBkbz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsYXRleDJlc2lzLnB5CisgICAgUmVhZHMgaW4gYSBjb252ZXJzaW9uIHNwZWNpZmljYXRpb24gd3JpdHRlbiBpbiBYTUwKKyAgICAoY29udmVyc2lvbi54bWwpLCByZWFkcyBhIExhVGVYIGRvY3VtZW50IGZyYWdtZW50LCBhbmQgaW50ZXJwcmV0cworICAgIHRoZSBtYXJrdXAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uLiAgVGhlIG91dHB1dCBpcyBhIHN0cmVhbQorICAgIG9mIEVTSVMgZXZlbnRzIGxpa2UgdGhvc2UgY3JlYXRlZCBieSB0aGUgbnNnbWxzIFNHTUwgcGFyc2VyLCBidXQKKyAgICBpcyAqbm90KiBndWFyYW50ZWVkIHRvIHJlcHJlc2VudCBhIHNpbmdsZSB0cmVlISAgVGhpcyBpcyBkb25lIHRvCisgICAgYWxsb3cgY29udmVyc2lvbiBwZXIgZW50aXR5IHJhdGhlciB0aGFuIHBlciBkb2N1bWVudC4gIFNpbmNlIG1hbnkKKyAgICBvZiB0aGUgTGFUZVggZmlsZXMgZm9yIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbiBjb250YWluIHR3bworICAgIHNlY3Rpb25zIG9uIGNsb3NlbHkgcmVsYXRlZCBtb2R1bGVzLCBpdCBpcyBpbXBvcnRhbnQgdG8gYWxsb3cgYm90aAorICAgIG9mIHRoZSByZXN1bHRpbmcgPHNlY3Rpb24+IGVsZW1lbnRzIHRvIGV4aXN0IGluIHRoZSBzYW1lIG91dHB1dAorICAgIHN0cmVhbS4gIEFkZGl0aW9uYWxseSwgc2luY2UgY29tbWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gRVNJUywKKyAgICBjb21tZW50cyBhcmUgY29udmVydGVkIHRvIDxDT01NRU5UPiBlbGVtZW50cywgd2hpY2ggbWlnaHQgZXhpc3QgYXQKKyAgICB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgdG9wLWxldmVsIGNvbnRlbnQgZWxlbWVudHMuCisKKyAgICBUaGUgb3V0cHV0IG9mIGxhdGV4MmVzaXMucHkgZ2V0cyBzYXZlZCBhcyA8ZmlsZW5hbWU+LmVzaXMxLgorCitkb2NmaXhlci5weQorICAgIFRoaXMgaXMgdGhlIHJlYWxseSBwYWluZnVsIHBhcnQgb2YgdGhlIGNvbnZlcnNpb24uICBXZWxsLCBpdCdzIHRoZSAKKyAgICBzZWNvbmQgcmVhbGx5IHBhaW5mdWwgcGFydCwgYnV0IG1vcmUgb2YgdGhlIHBhaW4gaXMgc3BlY2lmaWMgdG8KKyAgICB0aGUgc3RydWN0dXJlIG9mIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbiBhbmQgZGVzaXJlZCBvdXRwdXQKKyAgICByYXRoZXIgdGhhbiB0byB0aGUgcGFyc2luZyBvZiBMYVRlWCBtYXJrdXAuCisKKyAgICBUaGlzIHNjcmlwdCBsb2FkcyB0aGUgRVNJUyBkYXRhIGNyZWF0ZWQgYnkgbGF0ZXgyZXNpcy5weSBpbnRvIGEKKyAgICBET00gZG9jdW1lbnQgKmZyYWdtZW50KiAocmVtZW1iZXIsIHRoZSBsYXRleDJlc2lzLnB5IG91dHB1dCBtYXkKKyAgICBub3QgYmUgd2VsbC1mb3JtZWQpLiAgT25jZSBsb2FkZWQsIGl0IHdhbGtzIG92ZXIgdGhlIHRyZWUgbWFueQorICAgIHRpbWVzIGxvb2tpbmcgZm9yIGEgdmFyaWV0eSBvZiBwb3NzaWJsZSBzcGVjaWZpYworICAgIG1pY3JvLWNvbnZlcnNpb25zLiAgTW9zdCBvZiB0aGUgY29kZSBpcyBub3QgaW4gYW55IHdheSAiZ2VuZXJhbCIuCisgICAgQWZ0ZXIgcHJvY2Vzc2luZyB0aGUgZnJhZ21lbnQsIGEgbmV3IEVTSVMgZGF0YSBzdHJlYW0gaXMgd3JpdHRlbgorICAgIG91dC4gIExpa2UgdGhlIGlucHV0LCBpdCBtYXkgbm90IHJlcHJlc2VudCBhIHdlbGwtZm9ybWVkCisgICAgZG9jdW1lbnQsIGJ1dCBkb2VzIHJlcHJlc2VudCBhIHBhcnNlZCBlbnRpdHkuCisKKyAgICBUaGUgb3V0cHV0IG9mIGRvY2ZpeGVyLnB5IGlzIHdoYXQgZ2V0cyBzYXZlZCBpbiA8ZmlsZW5hbWU+LmVzaXMuCisKK2VzaXMyc2dtbC5weQorICAgIFJlYWRzIGFuIEVTSVMgc3RyZWFtIGFuZCBjb252ZXJ0IHRvIFNHTUwgb3IgWE1MLiAgVGhpcyBhbHNvCisgICAgY29udmVydHMgPENPTU1FTlQ+IGVsZW1lbnRzIHRvIHJlYWwgY29tbWVudHMuICBUaGlzIHdvcmtzIHF1aWNrbHkKKyAgICBiZWNhdXNlIHRoZXJlJ3Mgbm90IG11Y2ggdG8gYWN0dWFsbHkgZG8uCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvc2dtbGNvbnYvY29udmVyc2lvbi54bWwgYi9kb2MvdG9vbHMvc2dtbGNvbnYvY29udmVyc2lvbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1OWJhZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9zZ21sY29udi9jb252ZXJzaW9uLnhtbApAQCAtMCwwICsxLDc1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PgorPGNvbnZlcnNpb24+CisgIDwhLS0gTWlzY2VsbGFuZW91cy4gLS0+CisgIDxtYWNybyBuYW1lPSJkZWNsYXJlbW9kdWxlIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiBvcHRpb25hbD0ieWVzIi8+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0eXBlIi8+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9Im1vZHVsZXN5bm9wc2lzIj4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InBsYXRmb3JtIj4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9ImRlcHJlY2F0ZWQiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIvPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0ibGFiZWwiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiLz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0ibm9kZW5hbWUiIG91dHB1dG5hbWU9ImxhYmVsIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9ImlkIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9ImxvY2FsbW9kdWxldGFibGUiLz4KKyAgPG1hY3JvIG5hbWU9Im1hbnBhZ2UiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIvPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ic2VjdGlvbiIvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJtb2R1bGUiPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0ibW9kdWxlYXV0aG9yIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiLz4KKyAgICA8YXR0cmlidXRlIG5hbWU9ImVtYWlsIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9ImNpdGV0aXRsZSI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJocmVmIiBvcHRpb25hbD0ieWVzIi8+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJyZmMiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibnVtIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InNlY3Rpb25hdXRob3IiIG91dHB1dG5hbWU9ImF1dGhvciI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIi8+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJlbWFpbCIvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJhdXRob3IiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJhdXRob3JhZGRyZXNzIj4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InNob3J0dmVyc2lvbiIvPgorICA8bWFjcm8gbmFtZT0idmVyc2lvbmFkZGVkIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9InZlcnNpb24iLz4KKyAgICA8L21hY3JvPgorICA8IS0tIFRoaXMgaXMgYnJva2VuOiAgd2UgbmVlZCB0byByZS1vcmRlciB0aGUgb3B0aW9uYWwgYW5kIHJlcXVpcmVkCisgICAgICAgcGFyYW1ldGVycywgbWFraW5nIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgdGhlIGNvbnRlbnQgZm9yIHRoZQorICAgICAgIGVsZW1lbnQuICBUaGUgcHJvY2Vzc29yIGlzIG5vdCBwb3dlcmZ1bCBlbm91Z2ggdG8gaGFuZGxlIHRoaXMuCisgICAgLS0+CisgIDxtYWNybyBuYW1lPSJ2ZXJzaW9uY2hhbmdlZCI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJob3ciIG9wdGlvbmFsPSJ5ZXMiLz4KKyAgICA8YXR0cmlidXRlIG5hbWU9InZlcnNpb24iLz4KKyAgICA8L21hY3JvPgorCisgIDwhLS0gTW9kdWxlIHJlZmVyZW5jaW5nLiAtLT4KKyAgPG1hY3JvIG5hbWU9InJlZm1vZHVsZSIgb3V0cHV0bmFtZT0ibW9kdWxlIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9IiIgb3B0aW9uYWw9InllcyIvPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGluayI+eWVzPC9hdHRyaWJ1dGU+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisKKyAgPCEtLSBJbmZvcm1hdGlvbiB1bml0cy4gLS0+CisgIDwhLS0gQyB0aGluZ3MuIC0tPgorICA8ZW52aXJvbm1lbnQgbmFtZT0iY2Z1bmNkZXNjIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9InR5cGUiLz4KKyAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiLz4KKyAgICA8Y2hpbGQgbmFtZT0iYXJncyIvPgorICAgIDwvZW52aXJvbm1lbnQ+CisgIDxlbnZpcm9ubWVudCBuYW1lPSJjdHlwZWRlc2MiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0idGFnIiBvcHRpb25hbD0ieWVzIi8+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIi8+CisgICAgPC9lbnZpcm9ubWVudD4KKyAgPGVudmlyb25tZW50IG5hbWU9ImN2YXJkZXNjIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9InR5cGUiLz4KKyAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiLz4KKyAgICA8L2Vudmlyb25tZW50PgorCisgIDwhLS0gUHl0aG9uIHRoaW5ncy4gLS0+CisgIDxtYWNybyBuYW1lPSJvcHRpb25hbCI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJ1bnNwZWNpZmllZCIvPgorICA8bWFjcm8gbmFtZT0ibW9yZWFyZ3MiLz4KKyAgPGVudmlyb25tZW50IG5hbWU9ImNsYXNzZGVzYyI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIi8+CisgICAgPGNoaWxkIG5hbWU9ImFyZ3MiLz4KKyAgICA8L2Vudmlyb25tZW50PgorICA8ZW52aXJvbm1lbnQgbmFtZT0iZGF0YWRlc2MiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIvPgorICAgIDwvZW52aXJvbm1lbnQ+CisgIDxtYWNybyBuYW1lPSJkYXRhbGluZSI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIi8+CisgICAgPC9tYWNybz4KKyAgPGVudmlyb25tZW50IG5hbWU9ImV4Y2Rlc2MiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIvPgorICAgIDwvZW52aXJvbm1lbnQ+CisKKyAgPGVudmlyb25tZW50IG5hbWU9ImZ1bmNkZXNjIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiLz4KKyAgICA8Y2hpbGQgbmFtZT0iYXJncyIvPgorICAgIDwvZW52aXJvbm1lbnQ+CisgIDxtYWNybyBuYW1lPSJmdW5jbGluZSI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIi8+CisgICAgPGNoaWxkIG5hbWU9ImFyZ3MiLz4KKyAgICA8L21hY3JvPgorICA8ZW52aXJvbm1lbnQgbmFtZT0iZnVuY2Rlc2NuaSIgb3V0cHV0bmFtZT0iZnVuY2Rlc2MiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0iaW5kZXgiPm5vPC9hdHRyaWJ1dGU+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIi8+CisgICAgPGNoaWxkIG5hbWU9ImFyZ3MiLz4KKyAgICA8L2Vudmlyb25tZW50PgorICA8bWFjcm8gbmFtZT0iZnVuY2xpbmVuaSIgb3V0cHV0bmFtZT0iZnVuY2xpbmUiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0iaW5kZXgiPm5vPC9hdHRyaWJ1dGU+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIi8+CisgICAgPGNoaWxkIG5hbWU9ImFyZ3MiLz4KKyAgICA8L21hY3JvPgorCisgIDxlbnZpcm9ubWVudCBuYW1lPSJtZW1iZXJkZXNjIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiBvcHRpb25hbD0ieWVzIi8+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIi8+CisgICAgPC9lbnZpcm9ubWVudD4KKyAgPGVudmlyb25tZW50IG5hbWU9Im1lbWJlcmRlc2NuaSIgb3V0cHV0bmFtZT0ibWVtYmVyZGVzYyI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJpbmRleCI+bm88L2F0dHJpYnV0ZT4KKyAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiBvcHRpb25hbD0ieWVzIi8+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIi8+CisgICAgPC9lbnZpcm9ubWVudD4KKworICA8ZW52aXJvbm1lbnQgbmFtZT0ibWV0aG9kZGVzYyI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgb3B0aW9uYWw9InllcyIvPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIvPgorICAgIDxjaGlsZCBuYW1lPSJhcmdzIi8+CisgICAgPC9lbnZpcm9ubWVudD4KKyAgPG1hY3JvIG5hbWU9Im1ldGhvZGxpbmUiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIG9wdGlvbmFsPSJ5ZXMiLz4KKyAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiLz4KKyAgICA8Y2hpbGQgbmFtZT0iYXJncyIvPgorICAgIDwvbWFjcm8+CisgIDxlbnZpcm9ubWVudCBuYW1lPSJtZXRob2RkZXNjbmkiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0iaW5kZXgiPm5vPC9hdHRyaWJ1dGU+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgb3B0aW9uYWw9InllcyIvPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIvPgorICAgIDxjaGlsZCBuYW1lPSJhcmdzIi8+CisgICAgPC9lbnZpcm9ubWVudD4KKyAgPG1hY3JvIG5hbWU9Im1ldGhvZGxpbmVuaSIgb3V0cHV0bmFtZT0ibWV0aG9kbGluZSI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJpbmRleCI+bm88L2F0dHJpYnV0ZT4KKyAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiBvcHRpb25hbD0ieWVzIi8+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIi8+CisgICAgPGNoaWxkIG5hbWU9ImFyZ3MiLz4KKyAgICA8L21hY3JvPgorCisgIDxlbnZpcm9ubWVudCBuYW1lPSJvcGNvZGVkZXNjIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiLz4KKyAgICA8YXR0cmlidXRlIG5hbWU9InZhciIvPgorICAgIDwvZW52aXJvbm1lbnQ+CisKKyAgPCEtLSAiU2VlIGFsc286IiBzZWN0aW9ucy4gLS0+CisgIDxtYWNybyBuYW1lPSJzZWVtb2R1bGUiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0icmVmIiBvcHRpb25hbD0ieWVzIi8+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIi8+CisgICAgPGNoaWxkIG5hbWU9ImRlc2NyaXB0aW9uIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InNlZXBlcCI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJudW1iZXIiLz4KKyAgICA8Y2hpbGQgbmFtZT0idGl0bGUiLz4KKyAgICA8Y2hpbGQgbmFtZT0iZGVzY3JpcHRpb24iLz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0ic2VlcmZjIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9Im51bWJlciIvPgorICAgIDxjaGlsZCBuYW1lPSJ0aXRsZSIvPgorICAgIDxjaGlsZCBuYW1lPSJkZXNjcmlwdGlvbiIvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJzZWV0ZXh0Ij4KKyAgICA8Y2hpbGQgbmFtZT0iZGVzY3JpcHRpb24iLz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0ic2VldGl0bGUiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0iaHJlZiIgb3B0aW9uYWw9InllcyIvPgorICAgIDxjaGlsZCBuYW1lPSJ0aXRsZSIvPgorICAgIDxjaGlsZCBuYW1lPSJkZXNjcmlwdGlvbiIvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJzZWV1cmwiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0iaHJlZiIvPgorICAgIDxjaGlsZCBuYW1lPSJkZXNjcmlwdGlvbiIvPgorICAgIDwvbWFjcm8+CisKKyAgPCEtLSBJbmRleC1nZW5lcmF0aW5nIG1hcmt1cC4gLS0+CisgIDxtYWNybyBuYW1lPSJpbmRleCIgb3V0cHV0bmFtZT0iaW5kZXh0ZXJtIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9InRlcm0xIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9ImluZGV4aWkiIG91dHB1dG5hbWU9ImluZGV4dGVybSI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0ZXJtMSIvPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0idGVybTIiLz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iaW5kZXhpaWkiIG91dHB1dG5hbWU9ImluZGV4dGVybSI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0ZXJtMSIvPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0idGVybTIiLz4KKyAgICA8YXR0cmlidXRlIG5hbWU9InRlcm0zIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9ImluZGV4aXYiIG91dHB1dG5hbWU9ImluZGV4dGVybSI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0ZXJtMSIvPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0idGVybTIiLz4KKyAgICA8YXR0cmlidXRlIG5hbWU9InRlcm0zIi8+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0ZXJtNCIvPgorICAgIDwvbWFjcm8+CisKKyAgPG1hY3JvIG5hbWU9InR0aW5kZXgiIG91dHB1dG5hbWU9ImluZGV4dGVybSI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJzdHlsZSI+dHQ8L2F0dHJpYnV0ZT4KKyAgICA8YXR0cmlidXRlIG5hbWU9InRlcm0xIi8+CisgICAgPC9tYWNybz4KKworICA8bWFjcm8gbmFtZT0icmVmbW9kaW5kZXgiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibW9kdWxlIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InN0bW9kaW5kZXgiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibW9kdWxlIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InJlZmJpbW9kaW5kZXgiIG91dHB1dG5hbWU9InJlZm1vZGluZGV4Ij4KKyAgICA8YXR0cmlidXRlIG5hbWU9Im1vZHVsZSIvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJyZWZleG1vZGluZGV4IiBvdXRwdXRuYW1lPSJyZWZtb2RpbmRleCI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJtb2R1bGUiLz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0icmVmc3Rtb2RpbmRleCIgb3V0cHV0bmFtZT0icmVmbW9kaW5kZXgiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibW9kdWxlIi8+CisgICAgPC9tYWNybz4KKworICA8bWFjcm8gbmFtZT0iYmlmdW5jaW5kZXgiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJleGluZGV4Ij4KKyAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiLz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0ib2JpbmRleCI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9Imt3aW5kZXgiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJvcGluZGV4Ij4KKyAgICA8YXR0cmlidXRlIG5hbWU9InR5cGUiLz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0ic3RpbmRleCI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0eXBlIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9IndpdGhzdWJpdGVtIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9InRleHQiLz4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InNldGluZGV4c3ViaXRlbSI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0ZXh0Ii8+CisgICAgPC9tYWNybz4KKworICA8IS0tIEVudGl0eSBtYW5hZ2VtZW50LiAtLT4KKyAgPG1hY3JvIG5hbWU9ImluY2x1ZGUiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ic291cmNlIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9ImlucHV0Ij4KKyAgICA8YXR0cmlidXRlIG5hbWU9InNvdXJjZSIvPgorICAgIDwvbWFjcm8+CisKKyAgPCEtLSBMYXJnZS1zY2FsZSBkb2N1bWVudCBzdHJ1Y3R1cmUuIC0tPgorICA8bWFjcm8gbmFtZT0iZG9jdW1lbnRjbGFzcyI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzc25hbWUiLz4KKyAgICA8L21hY3JvPgorCisgIDxtYWNybyBuYW1lPSJ1c2VwYWNrYWdlIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9Im9wdGlvbnMiIG9wdGlvbmFsPSJ5ZXMiLz4KKyAgICA8YXR0cmlidXRlIG5hbWU9InBrZyIvPgorICAgIDwvbWFjcm8+CisKKyAgPGVudmlyb25tZW50IG5hbWU9ImRvY3VtZW50IgorICAgICAgICAgICAgICAgZW5kY2xvc2VzPSJjaGFwdGVyIGNoYXB0ZXIqIHNlY3Rpb24gc2VjdGlvbioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2VjdGlvbiBzdWJzZWN0aW9uKgorICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdWJzZWN0aW9uIHN1YnN1YnNlY3Rpb24qCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaCBwYXJhZ3JhcGgqIHN1YnBhcmFncmFwaCBzdWJwYXJhZ3JhcGgqIi8+CisKKyAgPG1hY3JvIG5hbWU9ImNoYXB0ZXIiCisgICAgICAgICBjbG9zZXM9ImNoYXB0ZXIgY2hhcHRlciogc2VjdGlvbiBzZWN0aW9uKiBzdWJzZWN0aW9uIHN1YnNlY3Rpb24qCisgICAgICAgICAgICAgICAgIHN1YnN1YnNlY3Rpb24gc3Vic3Vic2VjdGlvbioKKyAgICAgICAgICAgICAgICAgcGFyYWdyYXBoIHBhcmFncmFwaCogc3VicGFyYWdyYXBoIHN1YnBhcmFncmFwaCoiPgorICAgIDx0ZXh0PgorPC90ZXh0PgorICAgIDxjaGlsZCBuYW1lPSJ0aXRsZSIvPgorICAgIDxjb250ZW50IGltcGxpZWQ9InllcyIvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJjaGFwdGVyKiIgb3V0cHV0bmFtZT0iY2hhcHRlciIKKyAgICAgICAgIGNsb3Nlcz0iY2hhcHRlciBjaGFwdGVyKiBzZWN0aW9uIHNlY3Rpb24qIHN1YnNlY3Rpb24gc3Vic2VjdGlvbioKKyAgICAgICAgICAgICAgICAgc3Vic3Vic2VjdGlvbiBzdWJzdWJzZWN0aW9uKgorICAgICAgICAgICAgICAgICBwYXJhZ3JhcGggcGFyYWdyYXBoKiBzdWJwYXJhZ3JhcGggc3VicGFyYWdyYXBoKiI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJudW1iZXJlZCI+bm88L2F0dHJpYnV0ZT4KKyAgICA8dGV4dD4KKzwvdGV4dD4KKyAgICA8Y2hpbGQgbmFtZT0idGl0bGUiLz4KKyAgICA8Y29udGVudCBpbXBsaWVkPSJ5ZXMiLz4KKyAgICA8L21hY3JvPgorCisgIDxtYWNybyBuYW1lPSJzZWN0aW9uIgorICAgICAgICAgY2xvc2VzPSJzZWN0aW9uIHNlY3Rpb24qIHN1YnNlY3Rpb24gc3Vic2VjdGlvbioKKyAgICAgICAgICAgICAgICAgc3Vic3Vic2VjdGlvbiBzdWJzdWJzZWN0aW9uKgorICAgICAgICAgICAgICAgICBwYXJhZ3JhcGggcGFyYWdyYXBoKiBzdWJwYXJhZ3JhcGggc3VicGFyYWdyYXBoKiI+CisgICAgPHRleHQ+Cis8L3RleHQ+CisgICAgPGNoaWxkIG5hbWU9InRpdGxlIi8+CisgICAgPGNvbnRlbnQgaW1wbGllZD0ieWVzIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InNlY3Rpb24qIiBvdXRwdXRuYW1lPSJzZWN0aW9uIgorICAgICAgICAgY2xvc2VzPSJzZWN0aW9uIHNlY3Rpb24qIHN1YnNlY3Rpb24gc3Vic2VjdGlvbioKKyAgICAgICAgICAgICAgICAgc3Vic3Vic2VjdGlvbiBzdWJzdWJzZWN0aW9uKgorICAgICAgICAgICAgICAgICBwYXJhZ3JhcGggcGFyYWdyYXBoKiBzdWJwYXJhZ3JhcGggc3VicGFyYWdyYXBoKiI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJudW1iZXJlZCI+bm88L2F0dHJpYnV0ZT4KKyAgICA8dGV4dD4KKzwvdGV4dD4KKyAgICA8Y2hpbGQgbmFtZT0idGl0bGUiLz4KKyAgICA8Y29udGVudCBpbXBsaWVkPSJ5ZXMiLz4KKyAgICA8L21hY3JvPgorCisgIDxtYWNybyBuYW1lPSJzdWJzZWN0aW9uIgorICAgICAgICAgY2xvc2VzPSJzdWJzZWN0aW9uIHN1YnNlY3Rpb24qIHN1YnN1YnNlY3Rpb24gc3Vic3Vic2VjdGlvbioKKyAgICAgICAgICAgICAgICAgcGFyYWdyYXBoIHBhcmFncmFwaCogc3VicGFyYWdyYXBoIHN1YnBhcmFncmFwaCoiPgorICAgIDx0ZXh0PgorPC90ZXh0PgorICAgIDxjaGlsZCBuYW1lPSJ0aXRsZSIvPgorICAgIDxjb250ZW50IGltcGxpZWQ9InllcyIvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJzdWJzZWN0aW9uKiIgb3V0cHV0bmFtZT0ic3Vic2VjdGlvbiIKKyAgICAgICAgIGNsb3Nlcz0ic3Vic2VjdGlvbiBzdWJzZWN0aW9uKiBzdWJzdWJzZWN0aW9uIHN1YnN1YnNlY3Rpb24qCisgICAgICAgICAgICAgICAgIHBhcmFncmFwaCBwYXJhZ3JhcGgqIHN1YnBhcmFncmFwaCBzdWJwYXJhZ3JhcGgqIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9Im51bWJlcmVkIj5ubzwvYXR0cmlidXRlPgorICAgIDx0ZXh0PgorPC90ZXh0PgorICAgIDxjaGlsZCBuYW1lPSJ0aXRsZSIvPgorICAgIDxjb250ZW50IGltcGxpZWQ9InllcyIvPgorICAgIDwvbWFjcm8+CisKKyAgPG1hY3JvIG5hbWU9InN1YnN1YnNlY3Rpb24iCisgICAgICAgICBjbG9zZXM9InN1YnN1YnNlY3Rpb24gc3Vic3Vic2VjdGlvbioKKyAgICAgICAgICAgICAgICAgcGFyYWdyYXBoIHBhcmFncmFwaCogc3VicGFyYWdyYXBoIHN1YnBhcmFncmFwaCoiPgorICAgIDx0ZXh0PgorPC90ZXh0PgorICAgIDxjaGlsZCBuYW1lPSJ0aXRsZSIvPgorICAgIDxjb250ZW50IGltcGxpZWQ9InllcyIvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJzdWJzdWJzZWN0aW9uKiIgb3V0cHV0bmFtZT0ic3Vic3Vic2VjdGlvbiIKKyAgICAgICAgIGNsb3Nlcz0ic3Vic3Vic2VjdGlvbiBzdWJzdWJzZWN0aW9uKgorICAgICAgICAgICAgICAgICBwYXJhZ3JhcGggcGFyYWdyYXBoKiBzdWJwYXJhZ3JhcGggc3VicGFyYWdyYXBoKiI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJudW1iZXJlZCI+bm88L2F0dHJpYnV0ZT4KKyAgICA8dGV4dD4KKzwvdGV4dD4KKyAgICA8Y2hpbGQgbmFtZT0idGl0bGUiLz4KKyAgICA8Y29udGVudCBpbXBsaWVkPSJ5ZXMiLz4KKyAgICA8L21hY3JvPgorCisgIDxtYWNybyBuYW1lPSJwYXJhZ3JhcGgiCisgICAgICAgICBjbG9zZXM9InBhcmFncmFwaCBwYXJhZ3JhcGgqIHN1YnBhcmFncmFwaCBzdWJwYXJhZ3JhcGgqIj4KKyAgICA8dGV4dD4KKzwvdGV4dD4KKyAgICA8Y2hpbGQgbmFtZT0idGl0bGUiLz4KKyAgICA8Y29udGVudCBpbXBsaWVkPSJ5ZXMiLz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0icGFyYWdyYXBoKiIgb3V0cHV0bmFtZT0icGFyYWdyYXBoIgorICAgICAgICAgY2xvc2VzPSJwYXJhZ3JhcGggcGFyYWdyYXBoKiBzdWJwYXJhZ3JhcGggc3VicGFyYWdyYXBoKiI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJudW1iZXJlZCI+bm88L2F0dHJpYnV0ZT4KKyAgICA8dGV4dD4KKzwvdGV4dD4KKyAgICA8Y2hpbGQgbmFtZT0idGl0bGUiLz4KKyAgICA8Y29udGVudCBpbXBsaWVkPSJ5ZXMiLz4KKyAgICA8L21hY3JvPgorCisgIDxtYWNybyBuYW1lPSJzdWJwYXJhZ3JhcGgiCisgICAgICAgICBjbG9zZXM9InN1YnBhcmFncmFwaCBzdWJwYXJhZ3JhcGgqIj4KKyAgICA8dGV4dD4KKzwvdGV4dD4KKyAgICA8Y2hpbGQgbmFtZT0idGl0bGUiLz4KKyAgICA8Y29udGVudCBpbXBsaWVkPSJ5ZXMiLz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0ic3VicGFyYWdyYXBoKiIgb3V0cHV0bmFtZT0ic3VicGFyYWdyYXBoIgorICAgICAgICAgY2xvc2VzPSJzdWJwYXJhZ3JhcGggc3VicGFyYWdyYXBoKiI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJudW1iZXJlZCI+bm88L2F0dHJpYnV0ZT4KKyAgICA8dGV4dD4KKzwvdGV4dD4KKyAgICA8Y2hpbGQgbmFtZT0idGl0bGUiLz4KKyAgICA8Y29udGVudCBpbXBsaWVkPSJ5ZXMiLz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0idGl0bGUiPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorCisgIDxtYWNybyBuYW1lPSJhcHBlbmRpeCIgb3V0cHV0bmFtZT0iYmFjay1tYXR0ZXIiCisgICAgICAgICBjbG9zZXM9ImNoYXB0ZXIgY2hhcHRlciogc2VjdGlvbiBzdWJzZWN0aW9uIHN1YnN1YnNlY3Rpb24KKyAgICAgICAgICAgICAgICAgcGFyYWdyYXBoIHN1YnBhcmFncmFwaCIvPgorCisgIDxlbnZpcm9ubWVudCBuYW1lPSJsaXN0IgorICAgICAgICAgICAgICAgZW5kY2xvc2VzPSJpdGVtIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9ImJ1bGxldCIvPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0iaW5pdCIvPgorICAgIDwvZW52aXJvbm1lbnQ+CisgIDxtYWNybyBuYW1lPSJpdGVtIiBjbG9zZXM9Iml0ZW0iPgorICAgIDxjaGlsZCBuYW1lPSJsZWFkZXIiIG9wdGlvbmFsPSJ5ZXMiLz4KKyAgICA8Y29udGVudCBpbXBsaWVkPSJ5ZXMiLz4KKyAgICA8L21hY3JvPgorCisgIDxtYWNybyBuYW1lPSJyZWYiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0icmVmIi8+CisgICAgPC9tYWNybz4KKworICA8ZW52aXJvbm1lbnQgbmFtZT0iZGVzY3JpcHRpb24iIG91dHB1dG5hbWU9ImRlc2NyaXB0aW9ubGlzdCIKKyAgICAgICAgICAgICAgIGVuZGNsb3Nlcz0iaXRlbSIvPgorCisgIDxlbnZpcm9ubWVudCBuYW1lPSJlbnVtZXJhdGUiIG91dHB1dG5hbWU9ImVudW1lcmF0aW9uIgorICAgICAgICAgICAgICAgZW5kY2xvc2VzPSJpdGVtIi8+CisKKyAgPGVudmlyb25tZW50IG5hbWU9ImZ1bGxsaW5laXRlbXMiCisgICAgICAgICAgICAgICBlbmRjbG9zZXM9Iml0ZW0iLz4KKworICA8ZW52aXJvbm1lbnQgbmFtZT0iaXRlbWl6ZSIKKyAgICAgICAgICAgICAgIGVuZGNsb3Nlcz0iaXRlbSIvPgorCisgIDxlbnZpcm9ubWVudCBuYW1lPSJkZWZpbml0aW9ucyIgb3V0cHV0bmFtZT0iZGVmaW5pdGlvbmxpc3QiCisgICAgICAgICAgICAgICBlbmNsb3Nlcz0idGVybSIvPgorICA8bWFjcm8gbmFtZT0idGVybSIgY2xvc2VzPSJkZWZpbml0aW9uIj4KKyAgICA8IS0tIG5vdCByZWFsbHkgb3B0aW9uYWwsIGJ1dCB1c2VzIHRoZSBbXSBzeW50YXggLS0+CisgICAgPGNoaWxkIG5hbWU9InRlcm0iIG9wdGlvbmFsPSJ5ZXMiLz4KKyAgICA8Y2hpbGQgbmFtZT0iZGVmaW5pdGlvbiIgaW1wbGllZD0ieWVzIi8+CisgICAgPC9tYWNybz4KKworICA8ZW52aXJvbm1lbnQgbmFtZT0iYWxsdHQiIG91dHB1dG5hbWU9InZlcmJhdGltIi8+CisgIDxlbnZpcm9ubWVudCBuYW1lPSJjb21tZW50IiB2ZXJiYXRpbT0ieWVzIi8+CisgIDxlbnZpcm9ubWVudCBuYW1lPSJ2ZXJiYXRpbSIgdmVyYmF0aW09InllcyIvPgorICA8ZW52aXJvbm1lbnQgbmFtZT0idmVyYmF0aW0qIiB2ZXJiYXRpbT0ieWVzIj4KKyAgICA8IS0tIG5vdCB1c2VkIGFueXdoZXJlLCBidXQgaXQncyBhIHN0YW5kYXJkIExhVGVYaXNtIC0tPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ic3BhY2VzIj52aXNpYmxlPC9hdHRyaWJ1dGU+CisgICAgPC9lbnZpcm9ubWVudD4KKworICA8IS0tIFRhYmxlIG1hcmt1cC4gLS0+CisgIDxtYWNybyBuYW1lPSJobGluZSIvPgorICA8ZW52aXJvbm1lbnQgbmFtZT0idGFibGVpaSIgb3V0cHV0bmFtZT0idGFibGUiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0iY29scyI+MjwvYXR0cmlidXRlPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0iY29sc3BlYyIvPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ic3R5bGUiLz4KKyAgICA8Y2hpbGQgbmFtZT0iZW50cnkiLz4KKyAgICA8dGV4dD4KKyAgICAgICAgIDwvdGV4dD4KKyAgICA8Y2hpbGQgbmFtZT0iZW50cnkiLz4KKyAgICA8L2Vudmlyb25tZW50PgorICA8ZW52aXJvbm1lbnQgbmFtZT0ibG9uZ3RhYmxlaWkiIG91dHB1dG5hbWU9InRhYmxlIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9ImNvbHMiPjI8L2F0dHJpYnV0ZT4KKyAgICA8YXR0cmlidXRlIG5hbWU9ImNvbHNwZWMiLz4KKyAgICA8YXR0cmlidXRlIG5hbWU9InN0eWxlIi8+CisgICAgPGNoaWxkIG5hbWU9ImVudHJ5Ii8+CisgICAgPHRleHQ+CisgICAgICAgICA8L3RleHQ+CisgICAgPGNoaWxkIG5hbWU9ImVudHJ5Ii8+CisgICAgPC9lbnZpcm9ubWVudD4KKyAgPG1hY3JvIG5hbWU9ImxpbmVpaSIgb3V0cHV0bmFtZT0icm93Ij4KKyAgICA8Y2hpbGQgbmFtZT0iZW50cnkiLz4KKyAgICA8dGV4dD4KKyAgICAgICAgIDwvdGV4dD4KKyAgICA8Y2hpbGQgbmFtZT0iZW50cnkiLz4KKyAgICA8L21hY3JvPgorCisgIDxlbnZpcm9ubWVudCBuYW1lPSJ0YWJsZWlpaSIgb3V0cHV0bmFtZT0idGFibGUiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0iY29scyI+MzwvYXR0cmlidXRlPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0iY29sc3BlYyIvPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ic3R5bGUiLz4KKyAgICA8Y2hpbGQgbmFtZT0iZW50cnkiLz4KKyAgICA8dGV4dD4KKyAgICAgICAgIDwvdGV4dD4KKyAgICA8Y2hpbGQgbmFtZT0iZW50cnkiLz4KKyAgICA8dGV4dD4KKyAgICAgICAgIDwvdGV4dD4KKyAgICA8Y2hpbGQgbmFtZT0iZW50cnkiLz4KKyAgICA8L2Vudmlyb25tZW50PgorICA8ZW52aXJvbm1lbnQgbmFtZT0ibG9uZ3RhYmxlaWlpIiBvdXRwdXRuYW1lPSJ0YWJsZSI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb2xzIj4zPC9hdHRyaWJ1dGU+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb2xzcGVjIi8+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJzdHlsZSIvPgorICAgIDxjaGlsZCBuYW1lPSJlbnRyeSIvPgorICAgIDx0ZXh0PgorICAgICAgICAgPC90ZXh0PgorICAgIDxjaGlsZCBuYW1lPSJlbnRyeSIvPgorICAgIDx0ZXh0PgorICAgICAgICAgPC90ZXh0PgorICAgIDxjaGlsZCBuYW1lPSJlbnRyeSIvPgorICAgIDwvZW52aXJvbm1lbnQ+CisgIDxtYWNybyBuYW1lPSJsaW5laWlpIiBvdXRwdXRuYW1lPSJyb3ciPgorICAgIDxjaGlsZCBuYW1lPSJlbnRyeSIvPgorICAgIDx0ZXh0PgorICAgICAgICAgPC90ZXh0PgorICAgIDxjaGlsZCBuYW1lPSJlbnRyeSIvPgorICAgIDx0ZXh0PgorICAgICAgICAgPC90ZXh0PgorICAgIDxjaGlsZCBuYW1lPSJlbnRyeSIvPgorICAgIDwvbWFjcm8+CisKKyAgPGVudmlyb25tZW50IG5hbWU9InRhYmxlaXYiIG91dHB1dG5hbWU9InRhYmxlIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9ImNvbHMiPjQ8L2F0dHJpYnV0ZT4KKyAgICA8YXR0cmlidXRlIG5hbWU9ImNvbHNwZWMiLz4KKyAgICA8YXR0cmlidXRlIG5hbWU9InN0eWxlIi8+CisgICAgPGNoaWxkIG5hbWU9ImVudHJ5Ii8+CisgICAgPHRleHQ+CisgICAgICAgICA8L3RleHQ+CisgICAgPGNoaWxkIG5hbWU9ImVudHJ5Ii8+CisgICAgPHRleHQ+CisgICAgICAgICA8L3RleHQ+CisgICAgPGNoaWxkIG5hbWU9ImVudHJ5Ii8+CisgICAgPHRleHQ+CisgICAgICAgICA8L3RleHQ+CisgICAgPGNoaWxkIG5hbWU9ImVudHJ5Ii8+CisgICAgPC9lbnZpcm9ubWVudD4KKyAgPGVudmlyb25tZW50IG5hbWU9Imxvbmd0YWJsZWl2IiBvdXRwdXRuYW1lPSJ0YWJsZSI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb2xzIj40PC9hdHRyaWJ1dGU+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb2xzcGVjIi8+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJzdHlsZSIvPgorICAgIDxjaGlsZCBuYW1lPSJlbnRyeSIvPgorICAgIDx0ZXh0PgorICAgICAgICAgPC90ZXh0PgorICAgIDxjaGlsZCBuYW1lPSJlbnRyeSIvPgorICAgIDx0ZXh0PgorICAgICAgICAgPC90ZXh0PgorICAgIDxjaGlsZCBuYW1lPSJlbnRyeSIvPgorICAgIDx0ZXh0PgorICAgICAgICAgPC90ZXh0PgorICAgIDxjaGlsZCBuYW1lPSJlbnRyeSIvPgorICAgIDwvZW52aXJvbm1lbnQ+CisgIDxtYWNybyBuYW1lPSJsaW5laXYiIG91dHB1dG5hbWU9InJvdyI+CisgICAgPGNoaWxkIG5hbWU9ImVudHJ5Ii8+CisgICAgPHRleHQ+CisgICAgICAgICA8L3RleHQ+CisgICAgPGNoaWxkIG5hbWU9ImVudHJ5Ii8+CisgICAgPHRleHQ+CisgICAgICAgICA8L3RleHQ+CisgICAgPGNoaWxkIG5hbWU9ImVudHJ5Ii8+CisgICAgPHRleHQ+CisgICAgICAgICA8L3RleHQ+CisgICAgPGNoaWxkIG5hbWU9ImVudHJ5Ii8+CisgICAgPC9tYWNybz4KKworICA8IS0tIFRoZXNlIGFyZSBoYW5kbGVkIGF0IGEgbGF0ZXIgdHJhbnNsYXRpb24gc3RhZ2UsIGF0IGxlYXN0IGZvciBub3cuIC0tPgorICA8bWFjcm8gbmFtZT0iQ3BwIiBvdXRwdXRuYW1lPSIiPgorICAgIDx0ZXh0PkMrKzwvdGV4dD4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iZ2VxIiBvdXRwdXRuYW1lPSIiPgorICAgIDxlbnRpdHlyZWYgbmFtZT0iZ2VxIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9IkxhVGVYIiBvdXRwdXRuYW1lPSIiPgorICAgIDx0ZXh0PkxhVGVYPC90ZXh0PgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJsZG90cyIgb3V0cHV0bmFtZT0iIj4KKyAgICA8dGV4dD4uLi48L3RleHQ+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9ImxlcSIgb3V0cHV0bmFtZT0iIj4KKyAgICA8ZW50aXR5cmVmIG5hbWU9ImxlcSIvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJUZVgiIG91dHB1dG5hbWU9IiI+CisgICAgPHRleHQ+VGVYPC90ZXh0PgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJ2ZXJzaW9uIi8+CisKKyAgPCEtLSBEaXN0dXRpbHMgdGhpbmdzLiAtLT4KKyAgPG1hY3JvIG5hbWU9ImNvbW1hbmQiPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0ib3B0aW9uIj4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9ImZpbGV2YXIiIG91dHB1dG5hbWU9InZhciI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJYWFgiIG91dHB1dG5hbWU9ImVkaXRvcmlhbC1jb21tZW50Ij4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKworICA8IS0tIE1pc2MuIC0tPgorICA8bWFjcm8gbmFtZT0iZW1waCI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJzdHJvbmciPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0idGV4dHJtIj4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InRleHR0dCI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJjb2RlIj4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9ImV4Y2VwdGlvbiI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJrZXl3b3JkIj4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InNhbXAiPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iY2xhc3MiPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iY2RhdGEiPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iY2Z1bmN0aW9uIj4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9ImN0eXBlIj4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InB5dHlwZSI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJjaGFyYWN0ZXIiPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iY29uc3RhbnQiPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iZW52dmFyIiBvdXRwdXRuYW1lPSJlbnZhciI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJmaWxlIiBvdXRwdXRuYW1lPSJmaWxlbmFtZSI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJmaWxlbnEiIG91dHB1dG5hbWU9ImZpbGVuYW1lIj4KKyAgICA8YXR0cmlidXRlIG5hbWU9InF1b3RlIj5ubzwvYXR0cmlidXRlPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iZnVuY3Rpb24iPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0ia2JkIj4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9Im1ha2V2YXIiPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0ibWV0aG9kIj4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9Im1lbWJlciI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJtaW1ldHlwZSI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJuZXdzZ3JvdXAiPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0icHJvZ3JhbSIgb3V0cHV0bmFtZT0iY29tbWFuZCI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJwcm9ncmFtb3B0IiBvdXRwdXRuYW1lPSJvcHRpb24iPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0ibG9uZ3Byb2dyYW1vcHQiIG91dHB1dG5hbWU9ImxvbmdvcHRpb24iPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0icmVnZXhwIj4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InZhciI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJlbWFpbCI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJ1cmwiPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iZm9vdG5vdGUiPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iZGZuIiBvdXRwdXRuYW1lPSJkZWZpbmVkdGVybSI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisKKyAgPG1hY3JvIG5hbWU9Im1ib3giPgorICAgIDxjb250ZW50Lz4KKyAgICA8L21hY3JvPgorCisgIDwhLS0gbWluaW1hbCBtYXRoIHN0dWZmIHRvIGdldCBieSAtLT4KKyAgPG1hY3JvIG5hbWU9InBpIi8+CisgIDxtYWNybyBuYW1lPSJzcXJ0Ij4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9ImZyYWMiIG91dHB1dG5hbWU9ImZyYWN0aW9uIj4KKyAgICA8Y2hpbGQgbmFtZT0ibnVtZXJhdG9yIi8+CisgICAgPGNoaWxkIG5hbWU9ImRlbm9taW5hdG9yIi8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InN1bSI+CisgICAgPGNvbnRlbnQvPgorICAgIDwvbWFjcm8+CisKKyAgPCEtLSBDb252ZXJzaW9ucyB0byB0ZXh0OyBwZXJoYXBzIGNvdWxkIGJlIGRpZmZlcmVudD8gIFRoZXJlJ3MgLS0+CisgIDwhLS0gbm8gd2F5IGZvciBhIHN0eWxlIHNoZWV0IHRvIHdvcmsgd2l0aCB0aGVzZSB0aGlzIHdheS4JIC0tPgorICA8bWFjcm8gbmFtZT0iQUJDIiBvdXRwdXRuYW1lPSIiPgorICAgIDx0ZXh0PkFCQzwvdGV4dD4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iQVNDSUkiIG91dHB1dG5hbWU9IiI+CisgICAgPHRleHQ+QVNDSUk8L3RleHQ+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9IkMiIG91dHB1dG5hbWU9IiI+CisgICAgPHRleHQ+QzwvdGV4dD4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iRU9GIiBvdXRwdXRuYW1lPSIiPgorICAgIDx0ZXh0PkVPRjwvdGV4dD4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iZSIgb3V0cHV0bmFtZT0iIj4KKyAgICA8dGV4dD5cPC90ZXh0PgorICAgIDwvbWFjcm8+CisgIDxtYWNybyBuYW1lPSJOVUxMIiBvdXRwdXRuYW1lPSJjb25zdGFudCI+CisgICAgPHRleHQ+TlVMTDwvdGV4dD4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0iUE9TSVgiIG91dHB1dG5hbWU9IiI+CisgICAgPHRleHQ+UE9TSVg8L3RleHQ+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9IlVOSVgiIG91dHB1dG5hbWU9IiI+CisgICAgPHRleHQ+VW5peDwvdGV4dD4KKyAgICA8L21hY3JvPgorICA8bWFjcm8gbmFtZT0idGV4dGFzY2lpdGlsZGUiIG91dHB1dG5hbWU9IiI+CisgICAgPHRleHQ+fjwvdGV4dD4KKyAgICA8L21hY3JvPgorCisgIDwhLS0gVGhlc2Ugd2lsbCBlbmQgdXAgZGlzYXBwZWFyaW5nIGFzIHdlbGwhIC0tPgorICA8bWFjcm8gbmFtZT0iY2F0Y29kZSIgb3V0cHV0bmFtZT0iIi8+CisgIDxtYWNybyBuYW1lPSJmaSIgb3V0cHV0bmFtZT0iIi8+CisgIDxtYWNybyBuYW1lPSJpZmh0bWwiIG91dHB1dG5hbWU9IiIvPgorICA8bWFjcm8gbmFtZT0iaW5kZXhuYW1lIiBvdXRwdXRuYW1lPSIiLz4KKyAgPG1hY3JvIG5hbWU9ImxhYmVsd2lkdGgiIG91dHB1dG5hbWU9IiIvPgorICA8bWFjcm8gbmFtZT0ibGFyZ2UiIG91dHB1dG5hbWU9IiIvPgorICA8bWFjcm8gbmFtZT0ibGVmdG1hcmdpbiIgb3V0cHV0bmFtZT0iIi8+CisgIDxtYWNybyBuYW1lPSJtYWtlaW5kZXgiIG91dHB1dG5hbWU9IiIvPgorICA8bWFjcm8gbmFtZT0ibWFrZW1vZGluZGV4IiBvdXRwdXRuYW1lPSIiLz4KKyAgPG1hY3JvIG5hbWU9Im1ha2V0aXRsZSIgb3V0cHV0bmFtZT0iIi8+CisgIDxtYWNybyBuYW1lPSJub2luZGVudCIgb3V0cHV0bmFtZT0iIi8+CisgIDxtYWNybyBuYW1lPSJwcm90ZWN0IiBvdXRwdXRuYW1lPSIiLz4KKyAgPG1hY3JvIG5hbWU9InJlbmV3Y29tbWFuZCI+CisgICAgPGF0dHJpYnV0ZSBuYW1lPSJtYWNybyIvPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFyZ3MiIG9wdGlvbmFsPSJ5ZXMiLz4KKyAgICA8Y29udGVudC8+CisgICAgPC9tYWNybz4KKyAgPG1hY3JvIG5hbWU9InRhYmxlb2Zjb250ZW50cyIgb3V0cHV0bmFtZT0iIi8+CisgIDxtYWNybyBuYW1lPSJ2c3BhY2UiPgorICAgIDxhdHRyaWJ1dGUgbmFtZT0ic2l6ZSIvPgorICAgIDwvbWFjcm8+Cis8L2NvbnZlcnNpb24+CmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvc2dtbGNvbnYvZG9jZml4ZXIucHkgYi9kb2MvdG9vbHMvc2dtbGNvbnYvZG9jZml4ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDYzMjc2YgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy9zZ21sY29udi9kb2NmaXhlci5weQpAQCAtMCwwICsxLDEwMzMgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworIiIiUGVyZm9ybSBtYXNzaXZlIHRyYW5zZm9ybWF0aW9ucyBvbiBhIGRvY3VtZW50IHRyZWUgY3JlYXRlZCBmcm9tIHRoZSBMYVRlWAorb2YgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBhbmQgZHVtcCB0aGUgRVNJUyBkYXRhIGZvciB0aGUgdHJhbnNmb3JtZWQgdHJlZS4KKyIiIgorCisKK2ltcG9ydCBlcnJubworaW1wb3J0IGVzaXN0b29scworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgeG1sLmRvbQoraW1wb3J0IHhtbC5kb20ubWluaWRvbQorCitFTEVNRU5UID0geG1sLmRvbS5Ob2RlLkVMRU1FTlRfTk9ERQorRU5USVRZX1JFRkVSRU5DRSA9IHhtbC5kb20uTm9kZS5FTlRJVFlfUkVGRVJFTkNFX05PREUKK1RFWFQgPSB4bWwuZG9tLk5vZGUuVEVYVF9OT0RFCisKKworY2xhc3MgQ29udmVyc2lvbkVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2V3cml0ZSA9IHN5cy5zdGRlcnIud3JpdGUKK3RyeToKKyAgICAjIFdlIGNhbiBvbmx5IGRvIHRoaXMgdHJpY2sgb24gVW5peCAoaWYgdHB1dCBpcyBvbiAkUEFUSCkhCisgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJwb3NpeCIgb3Igbm90IHN5cy5zdGRlcnIuaXNhdHR5KCk6CisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgaW1wb3J0IGNvbW1hbmRzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgYndyaXRlID0gZXdyaXRlCitlbHNlOgorICAgIGRlZiBid3JpdGUocywgQk9MRE9OPWNvbW1hbmRzLmdldG91dHB1dCgidHB1dCBib2xkIiksCisgICAgICAgICAgICAgICBCT0xET0ZGPWNvbW1hbmRzLmdldG91dHB1dCgidHB1dCBzZ3IwIikpOgorICAgICAgICBld3JpdGUoIiVzJXMlcyIgJSAoQk9MRE9OLCBzLCBCT0xET0ZGKSkKKworCitQQVJBX0VMRU1FTlQgPSAicGFyYSIKKworREVCVUdfUEFSQV9GSVhFUiA9IDAKKworaWYgREVCVUdfUEFSQV9GSVhFUjoKKyAgICBkZWYgcGFyYV9tc2cocyk6CisgICAgICAgIGV3cml0ZSgiKioqICVzXG4iICUgcykKK2Vsc2U6CisgICAgZGVmIHBhcmFfbXNnKHMpOgorICAgICAgICBwYXNzCisKKworZGVmIGdldF9maXJzdF9lbGVtZW50KGRvYywgZ2kpOgorICAgIGZvciBuIGluIGRvYy5jaGlsZE5vZGVzOgorICAgICAgICBpZiBuLm5vZGVOYW1lID09IGdpOgorICAgICAgICAgICAgcmV0dXJuIG4KKworZGVmIGV4dHJhY3RfZmlyc3RfZWxlbWVudChkb2MsIGdpKToKKyAgICBub2RlID0gZ2V0X2ZpcnN0X2VsZW1lbnQoZG9jLCBnaSkKKyAgICBpZiBub2RlIGlzIG5vdCBOb25lOgorICAgICAgICBkb2MucmVtb3ZlQ2hpbGQobm9kZSkKKyAgICByZXR1cm4gbm9kZQorCisKK2RlZiBnZXRfZG9jdW1lbnRFbGVtZW50KG5vZGUpOgorICAgIHJlc3VsdCA9IE5vbmUKKyAgICBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZE5vZGVzOgorICAgICAgICBpZiBjaGlsZC5ub2RlVHlwZSA9PSBFTEVNRU5UOgorICAgICAgICAgICAgcmVzdWx0ID0gY2hpbGQKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIHNldF90YWdOYW1lKGVsZW0sIGdpKToKKyAgICBlbGVtLm5vZGVOYW1lID0gZWxlbS50YWdOYW1lID0gZ2kKKworCitkZWYgZmluZF9hbGxfZWxlbWVudHMoZG9jLCBnaSk6CisgICAgbm9kZXMgPSBbXQorICAgIGlmIGRvYy5ub2RlTmFtZSA9PSBnaToKKyAgICAgICAgbm9kZXMuYXBwZW5kKGRvYykKKyAgICBmb3IgY2hpbGQgaW4gZG9jLmNoaWxkTm9kZXM6CisgICAgICAgIGlmIGNoaWxkLm5vZGVUeXBlID09IEVMRU1FTlQ6CisgICAgICAgICAgICBpZiBjaGlsZC50YWdOYW1lID09IGdpOgorICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjaGlsZCkKKyAgICAgICAgICAgIGZvciBub2RlIGluIGNoaWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKGdpKToKKyAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobm9kZSkKKyAgICByZXR1cm4gbm9kZXMKKworZGVmIGZpbmRfYWxsX2NoaWxkX2VsZW1lbnRzKGRvYywgZ2kpOgorICAgIG5vZGVzID0gW10KKyAgICBmb3IgY2hpbGQgaW4gZG9jLmNoaWxkTm9kZXM6CisgICAgICAgIGlmIGNoaWxkLm5vZGVOYW1lID09IGdpOgorICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGNoaWxkKQorICAgIHJldHVybiBub2RlcworCisKK2RlZiBmaW5kX2FsbF9lbGVtZW50c19mcm9tX3NldChkb2MsIGdpX3NldCk6CisgICAgcmV0dXJuIF9fZmluZF9hbGxfZWxlbWVudHNfZnJvbV9zZXQoZG9jLCBnaV9zZXQsIFtdKQorCitkZWYgX19maW5kX2FsbF9lbGVtZW50c19mcm9tX3NldChkb2MsIGdpX3NldCwgbm9kZXMpOgorICAgIGlmIGRvYy5ub2RlTmFtZSBpbiBnaV9zZXQ6CisgICAgICAgIG5vZGVzLmFwcGVuZChkb2MpCisgICAgZm9yIGNoaWxkIGluIGRvYy5jaGlsZE5vZGVzOgorICAgICAgICBpZiBjaGlsZC5ub2RlVHlwZSA9PSBFTEVNRU5UOgorICAgICAgICAgICAgX19maW5kX2FsbF9lbGVtZW50c19mcm9tX3NldChjaGlsZCwgZ2lfc2V0LCBub2RlcykKKyAgICByZXR1cm4gbm9kZXMKKworCitkZWYgc2ltcGxpZnkoZG9jLCBmcmFnbWVudCk6CisgICAgIyBUcnkgdG8gcmF0aW9uYWxpemUgdGhlIGRvY3VtZW50IGEgYml0LCBzaW5jZSB0aGVzZSB0aGluZ3MgYXJlIHNpbXBseQorICAgICMgbm90IHZhbGlkIFNHTUwvWE1MIGRvY3VtZW50cyBhcyB0aGV5IHN0YW5kLCBhbmQgbmVlZCBhIGxpdHRsZSB3b3JrLgorICAgIGRvY3VtZW50Y2xhc3MgPSAiZG9jdW1lbnQiCisgICAgaW5wdXRzID0gW10KKyAgICBub2RlID0gZXh0cmFjdF9maXJzdF9lbGVtZW50KGZyYWdtZW50LCAiZG9jdW1lbnRjbGFzcyIpCisgICAgaWYgbm9kZSBpcyBub3QgTm9uZToKKyAgICAgICAgZG9jdW1lbnRjbGFzcyA9IG5vZGUuZ2V0QXR0cmlidXRlKCJjbGFzc25hbWUiKQorICAgIG5vZGUgPSBleHRyYWN0X2ZpcnN0X2VsZW1lbnQoZnJhZ21lbnQsICJ0aXRsZSIpCisgICAgaWYgbm9kZSBpcyBub3QgTm9uZToKKyAgICAgICAgaW5wdXRzLmFwcGVuZChub2RlKQorICAgICMgdXBkYXRlIHRoZSBuYW1lIG9mIHRoZSByb290IGVsZW1lbnQKKyAgICBub2RlID0gZ2V0X2ZpcnN0X2VsZW1lbnQoZnJhZ21lbnQsICJkb2N1bWVudCIpCisgICAgaWYgbm9kZSBpcyBub3QgTm9uZToKKyAgICAgICAgc2V0X3RhZ05hbWUobm9kZSwgZG9jdW1lbnRjbGFzcykKKyAgICB3aGlsZSAxOgorICAgICAgICBub2RlID0gZXh0cmFjdF9maXJzdF9lbGVtZW50KGZyYWdtZW50LCAiaW5wdXQiKQorICAgICAgICBpZiBub2RlIGlzIE5vbmU6CisgICAgICAgICAgICBicmVhaworICAgICAgICBpbnB1dHMuYXBwZW5kKG5vZGUpCisgICAgaWYgaW5wdXRzOgorICAgICAgICBkb2NlbGVtID0gZ2V0X2RvY3VtZW50RWxlbWVudChmcmFnbWVudCkKKyAgICAgICAgaW5wdXRzLnJldmVyc2UoKQorICAgICAgICBmb3Igbm9kZSBpbiBpbnB1dHM6CisgICAgICAgICAgICB0ZXh0ID0gZG9jLmNyZWF0ZVRleHROb2RlKCJcbiIpCisgICAgICAgICAgICBkb2NlbGVtLmluc2VydEJlZm9yZSh0ZXh0LCBkb2NlbGVtLmZpcnN0Q2hpbGQpCisgICAgICAgICAgICBkb2NlbGVtLmluc2VydEJlZm9yZShub2RlLCB0ZXh0KQorICAgICAgICBkb2NlbGVtLmluc2VydEJlZm9yZShkb2MuY3JlYXRlVGV4dE5vZGUoIlxuIiksIGRvY2VsZW0uZmlyc3RDaGlsZCkKKyAgICB3aGlsZSBmcmFnbWVudC5maXJzdENoaWxkIGFuZCBmcmFnbWVudC5maXJzdENoaWxkLm5vZGVUeXBlID09IFRFWFQ6CisgICAgICAgIGZyYWdtZW50LnJlbW92ZUNoaWxkKGZyYWdtZW50LmZpcnN0Q2hpbGQpCisKKworZGVmIGNsZWFudXBfcm9vdF90ZXh0KGRvYyk6CisgICAgZGlzY2FyZHMgPSBbXQorICAgIHNraXAgPSAwCisgICAgZm9yIG4gaW4gZG9jLmNoaWxkTm9kZXM6CisgICAgICAgIHByZXZza2lwID0gc2tpcAorICAgICAgICBza2lwID0gMAorICAgICAgICBpZiBuLm5vZGVUeXBlID09IFRFWFQgYW5kIG5vdCBwcmV2c2tpcDoKKyAgICAgICAgICAgIGRpc2NhcmRzLmFwcGVuZChuKQorICAgICAgICBlbGlmIG4ubm9kZU5hbWUgPT0gIkNPTU1FTlQiOgorICAgICAgICAgICAgc2tpcCA9IDEKKyAgICBmb3Igbm9kZSBpbiBkaXNjYXJkczoKKyAgICAgICAgZG9jLnJlbW92ZUNoaWxkKG5vZGUpCisKKworREVTQ1JJUFRPUl9FTEVNRU5UUyA9ICgKKyAgICAiY2Z1bmNkZXNjIiwgImN2YXJkZXNjIiwgImN0eXBlZGVzYyIsCisgICAgImNsYXNzZGVzYyIsICJtZW1iZXJkZXNjIiwgIm1lbWJlcmRlc2NuaSIsICJtZXRob2RkZXNjIiwgIm1ldGhvZGRlc2NuaSIsCisgICAgImV4Y2Rlc2MiLCAiZnVuY2Rlc2MiLCAiZnVuY2Rlc2NuaSIsICJvcGNvZGVkZXNjIiwKKyAgICAiZGF0YWRlc2MiLCAiZGF0YWRlc2NuaSIsCisgICAgKQorCitkZWYgZml4dXBfZGVzY3JpcHRvcnMoZG9jLCBmcmFnbWVudCk6CisgICAgc2VjdGlvbnMgPSBmaW5kX2FsbF9lbGVtZW50cyhmcmFnbWVudCwgInNlY3Rpb24iKQorICAgIGZvciBzZWN0aW9uIGluIHNlY3Rpb25zOgorICAgICAgICBmaW5kX2FuZF9maXhfZGVzY3JpcHRvcnMoZG9jLCBzZWN0aW9uKQorCisKK2RlZiBmaW5kX2FuZF9maXhfZGVzY3JpcHRvcnMoZG9jLCBjb250YWluZXIpOgorICAgIGNoaWxkcmVuID0gY29udGFpbmVyLmNoaWxkTm9kZXMKKyAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgIGlmIGNoaWxkLm5vZGVUeXBlID09IEVMRU1FTlQ6CisgICAgICAgICAgICB0YWdOYW1lID0gY2hpbGQudGFnTmFtZQorICAgICAgICAgICAgaWYgdGFnTmFtZSBpbiBERVNDUklQVE9SX0VMRU1FTlRTOgorICAgICAgICAgICAgICAgIHJld3JpdGVfZGVzY3JpcHRvcihkb2MsIGNoaWxkKQorICAgICAgICAgICAgZWxpZiB0YWdOYW1lID09ICJzdWJzZWN0aW9uIjoKKyAgICAgICAgICAgICAgICBmaW5kX2FuZF9maXhfZGVzY3JpcHRvcnMoZG9jLCBjaGlsZCkKKworCitkZWYgcmV3cml0ZV9kZXNjcmlwdG9yKGRvYywgZGVzY3JpcHRvcik6CisgICAgIworICAgICMgRG8gdGhlc2UgdGhpbmdzOgorICAgICMgICAxLiBBZGQgYW4gImluZGV4PSdubyciIGF0dHJpYnV0ZSB0byB0aGUgZWxlbWVudCBpZiB0aGUgdGFnTmFtZQorICAgICMgICAgICBlbmRzIGluICduaScsIHJlbW92aW5nIHRoZSAnbmknIGZyb20gdGhlIG5hbWUuCisgICAgIyAgIDIuIENyZWF0ZSBhIDxzaWduYXR1cmU+IGZyb20gdGhlIG5hbWUgYXR0cmlidXRlCisgICAgIyAgIDJhLkNyZWF0ZSBhbiA8YXJncz4gaWYgaXQgYXBwZWFycyB0byBiZSBhdmFpbGFibGUuCisgICAgIyAgIDMuIENyZWF0ZSBhZGRpdGlvbmFsIDxzaWduYXR1cmU+cyBmcm9tIDwqbGluZXssbml9PiBlbGVtZW50cywKKyAgICAjICAgICAgaWYgZm91bmQuCisgICAgIyAgIDQuIElmIGEgPHZlcnNpb25hZGRlZD4gaXMgZm91bmQsIG1vdmUgaXQgdG8gYW4gYXR0cmlidXRlIG9uIHRoZQorICAgICMgICAgICBkZXNjcmlwdG9yLgorICAgICMgICA1LiBNb3ZlIHJlbWFpbmluZyBjaGlsZCBub2RlcyB0byBhIDxkZXNjcmlwdGlvbj4gZWxlbWVudC4KKyAgICAjICAgNi4gUHV0IGl0IGJhY2sgdG9nZXRoZXIuCisgICAgIworICAgICMgMS4KKyAgICBkZXNjbmFtZSA9IGRlc2NyaXB0b3IudGFnTmFtZQorICAgIGluZGV4ID0gMQorICAgIGlmIGRlc2NuYW1lWy0yOl0gPT0gIm5pIjoKKyAgICAgICAgZGVzY25hbWUgPSBkZXNjbmFtZVs6LTJdCisgICAgICAgIGRlc2NyaXB0b3Iuc2V0QXR0cmlidXRlKCJpbmRleCIsICJubyIpCisgICAgICAgIHNldF90YWdOYW1lKGRlc2NyaXB0b3IsIGRlc2NuYW1lKQorICAgICAgICBpbmRleCA9IDAKKyAgICBkZXNjdHlwZSA9IGRlc2NuYW1lWzotNF0gIyByZW1vdmUgJ2Rlc2MnCisgICAgbGluZW5hbWUgPSBkZXNjdHlwZSArICJsaW5lIgorICAgIGlmIG5vdCBpbmRleDoKKyAgICAgICAgbGluZW5hbWUgPSBsaW5lbmFtZSArICJuaSIKKyAgICAjIDIuCisgICAgc2lnbmF0dXJlID0gZG9jLmNyZWF0ZUVsZW1lbnQoInNpZ25hdHVyZSIpCisgICAgbmFtZSA9IGRvYy5jcmVhdGVFbGVtZW50KCJuYW1lIikKKyAgICBzaWduYXR1cmUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJcbiAgICAiKSkKKyAgICBzaWduYXR1cmUuYXBwZW5kQ2hpbGQobmFtZSkKKyAgICBuYW1lLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShkZXNjcmlwdG9yLmdldEF0dHJpYnV0ZSgibmFtZSIpKSkKKyAgICBkZXNjcmlwdG9yLnJlbW92ZUF0dHJpYnV0ZSgibmFtZSIpCisgICAgIyAyYS4KKyAgICBpZiBkZXNjcmlwdG9yLmhhc0F0dHJpYnV0ZSgidmFyIik6CisgICAgICAgIGlmIGRlc2NuYW1lICE9ICJvcGNvZGVkZXNjIjoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgXAorICAgICAgICAgICAgICAgICAgImdvdCAndmFyJyBhdHRyaWJ1dGUgb24gZGVzY3JpcHRvciBvdGhlciB0aGFuIG9wY29kZWRlc2MiCisgICAgICAgIHZhcmlhYmxlID0gZGVzY3JpcHRvci5nZXRBdHRyaWJ1dGUoInZhciIpCisgICAgICAgIGlmIHZhcmlhYmxlOgorICAgICAgICAgICAgYXJncyA9IGRvYy5jcmVhdGVFbGVtZW50KCJhcmdzIikKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKHZhcmlhYmxlKSkKKyAgICAgICAgICAgIHNpZ25hdHVyZS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIlxuICAgICIpKQorICAgICAgICAgICAgc2lnbmF0dXJlLmFwcGVuZENoaWxkKGFyZ3MpCisgICAgICAgIGRlc2NyaXB0b3IucmVtb3ZlQXR0cmlidXRlKCJ2YXIiKQorICAgIG5ld2NoaWxkcmVuID0gW3NpZ25hdHVyZV0KKyAgICBjaGlsZHJlbiA9IGRlc2NyaXB0b3IuY2hpbGROb2RlcworICAgIHBvcyA9IHNraXBfbGVhZGluZ19ub2RlcyhjaGlsZHJlbikKKyAgICBpZiBwb3MgPCBsZW4oY2hpbGRyZW4pOgorICAgICAgICBjaGlsZCA9IGNoaWxkcmVuW3Bvc10KKyAgICAgICAgaWYgY2hpbGQubm9kZU5hbWUgPT0gImFyZ3MiOgorICAgICAgICAgICAgIyBtb3ZlIDxhcmdzPiB0byA8c2lnbmF0dXJlPiwgb3IgcmVtb3ZlIGlmIGVtcHR5OgorICAgICAgICAgICAgY2hpbGQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjaGlsZCkKKyAgICAgICAgICAgIGlmIGxlbihjaGlsZC5jaGlsZE5vZGVzKToKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJcbiAgICAiKSkKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUuYXBwZW5kQ2hpbGQoY2hpbGQpCisgICAgc2lnbmF0dXJlLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG4gICIpKQorICAgICMgMywgNC4KKyAgICBwb3MgPSBza2lwX2xlYWRpbmdfbm9kZXMoY2hpbGRyZW4sIHBvcykKKyAgICB3aGlsZSBwb3MgPCBsZW4oY2hpbGRyZW4pIFwKKyAgICAgICAgICBhbmQgY2hpbGRyZW5bcG9zXS5ub2RlTmFtZSBpbiAobGluZW5hbWUsICJ2ZXJzaW9uYWRkZWQiKToKKyAgICAgICAgaWYgY2hpbGRyZW5bcG9zXS50YWdOYW1lID09IGxpbmVuYW1lOgorICAgICAgICAgICAgIyB0aGlzIGlzIHJlYWxseSBhIHN1cHBsZW1lbnRhbCBzaWduYXR1cmUsIGNyZWF0ZSA8c2lnbmF0dXJlPgorICAgICAgICAgICAgb2xkY2hpbGQgPSBjaGlsZHJlbltwb3NdLmNsb25lTm9kZSgxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNpZyA9IG1ldGhvZGxpbmVfdG9fc2lnbmF0dXJlKGRvYywgY2hpbGRyZW5bcG9zXSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwcmludCBvbGRjaGlsZC50b3htbCgpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIG5ld2NoaWxkcmVuLmFwcGVuZChzaWcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIDx2ZXJzaW9uYWRkZWQgYWRkZWQ9Li4uPgorICAgICAgICAgICAgZGVzY3JpcHRvci5zZXRBdHRyaWJ1dGUoCisgICAgICAgICAgICAgICAgImFkZGVkIiwgY2hpbGRyZW5bcG9zXS5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSkKKyAgICAgICAgcG9zID0gc2tpcF9sZWFkaW5nX25vZGVzKGNoaWxkcmVuLCBwb3MgKyAxKQorICAgICMgNS4KKyAgICBkZXNjcmlwdGlvbiA9IGRvYy5jcmVhdGVFbGVtZW50KCJkZXNjcmlwdGlvbiIpCisgICAgZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJcbiIpKQorICAgIG5ld2NoaWxkcmVuLmFwcGVuZChkZXNjcmlwdGlvbikKKyAgICBtb3ZlX2NoaWxkcmVuKGRlc2NyaXB0b3IsIGRlc2NyaXB0aW9uLCBwb3MpCisgICAgbGFzdCA9IGRlc2NyaXB0aW9uLmNoaWxkTm9kZXNbLTFdCisgICAgaWYgbGFzdC5ub2RlVHlwZSA9PSBURVhUOgorICAgICAgICBsYXN0LmRhdGEgPSBzdHJpbmcucnN0cmlwKGxhc3QuZGF0YSkgKyAiXG4gICIKKyAgICAjIDYuCisgICAgIyBzaG91bGQgaGF2ZSBub3RoaW5nIGJ1dCB3aGl0ZXNwYWNlIGFuZCBzaWduYXR1cmUgbGluZXMgaW4gPGRlc2NyaXB0b3I+OworICAgICMgZGlzY2FyZCB0aGVtCisgICAgd2hpbGUgZGVzY3JpcHRvci5jaGlsZE5vZGVzOgorICAgICAgICBkZXNjcmlwdG9yLnJlbW92ZUNoaWxkKGRlc2NyaXB0b3IuY2hpbGROb2Rlc1swXSkKKyAgICBmb3Igbm9kZSBpbiBuZXdjaGlsZHJlbjoKKyAgICAgICAgZGVzY3JpcHRvci5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIlxuICAiKSkKKyAgICAgICAgZGVzY3JpcHRvci5hcHBlbmRDaGlsZChub2RlKQorICAgIGRlc2NyaXB0b3IuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJcbiIpKQorCisKK2RlZiBtZXRob2RsaW5lX3RvX3NpZ25hdHVyZShkb2MsIG1ldGhvZGxpbmUpOgorICAgIHNpZ25hdHVyZSA9IGRvYy5jcmVhdGVFbGVtZW50KCJzaWduYXR1cmUiKQorICAgIHNpZ25hdHVyZS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIlxuICAgICIpKQorICAgIG5hbWUgPSBkb2MuY3JlYXRlRWxlbWVudCgibmFtZSIpCisgICAgbmFtZS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUobWV0aG9kbGluZS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSkpCisgICAgbWV0aG9kbGluZS5yZW1vdmVBdHRyaWJ1dGUoIm5hbWUiKQorICAgIHNpZ25hdHVyZS5hcHBlbmRDaGlsZChuYW1lKQorICAgIGlmIGxlbihtZXRob2RsaW5lLmNoaWxkTm9kZXMpOgorICAgICAgICBhcmdzID0gZG9jLmNyZWF0ZUVsZW1lbnQoImFyZ3MiKQorICAgICAgICBzaWduYXR1cmUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJcbiAgICAiKSkKKyAgICAgICAgc2lnbmF0dXJlLmFwcGVuZENoaWxkKGFyZ3MpCisgICAgICAgIG1vdmVfY2hpbGRyZW4obWV0aG9kbGluZSwgYXJncykKKyAgICBzaWduYXR1cmUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJcbiAgIikpCisgICAgcmV0dXJuIHNpZ25hdHVyZQorCisKK2RlZiBtb3ZlX2NoaWxkcmVuKG9yaWdpbiwgZGVzdCwgc3RhcnQ9MCk6CisgICAgY2hpbGRyZW4gPSBvcmlnaW4uY2hpbGROb2RlcworICAgIHdoaWxlIHN0YXJ0IDwgbGVuKGNoaWxkcmVuKToKKyAgICAgICAgbm9kZSA9IGNoaWxkcmVuW3N0YXJ0XQorICAgICAgICBvcmlnaW4ucmVtb3ZlQ2hpbGQobm9kZSkKKyAgICAgICAgZGVzdC5hcHBlbmRDaGlsZChub2RlKQorCisKK2RlZiBoYW5kbGVfYXBwZW5kaXgoZG9jLCBmcmFnbWVudCk6CisgICAgIyBtdXN0IGJlIGNhbGxlZCBhZnRlciBzaW1wbGZ5KCkgaWYgZG9jdW1lbnQgaXMgbXVsdGktcm9vdGVkIHRvIGJlZ2luIHdpdGgKKyAgICBkb2NlbGVtID0gZ2V0X2RvY3VtZW50RWxlbWVudChmcmFnbWVudCkKKyAgICB0b3BsZXZlbCA9IGRvY2VsZW0udGFnTmFtZSA9PSAibWFudWFsIiBhbmQgImNoYXB0ZXIiIG9yICJzZWN0aW9uIgorICAgIGFwcGVuZGljZXMgPSAwCisgICAgbm9kZXMgPSBbXQorICAgIGZvciBub2RlIGluIGRvY2VsZW0uY2hpbGROb2RlczoKKyAgICAgICAgaWYgYXBwZW5kaWNlczoKKyAgICAgICAgICAgIG5vZGVzLmFwcGVuZChub2RlKQorICAgICAgICBlbGlmIG5vZGUubm9kZVR5cGUgPT0gRUxFTUVOVDoKKyAgICAgICAgICAgIGFwcG5vZGVzID0gbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYXBwZW5kaXgiKQorICAgICAgICAgICAgaWYgYXBwbm9kZXM6CisgICAgICAgICAgICAgICAgYXBwZW5kaWNlcyA9IDEKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBhcHBub2Rlc1swXS5wYXJlbnROb2RlCisgICAgICAgICAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGFwcG5vZGVzWzBdKQorICAgICAgICAgICAgICAgIHBhcmVudC5ub3JtYWxpemUoKQorICAgIGlmIG5vZGVzOgorICAgICAgICBtYXAoZG9jZWxlbS5yZW1vdmVDaGlsZCwgbm9kZXMpCisgICAgICAgIGRvY2VsZW0uYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJcblxuXG4iKSkKKyAgICAgICAgYmFjayA9IGRvYy5jcmVhdGVFbGVtZW50KCJiYWNrLW1hdHRlciIpCisgICAgICAgIGRvY2VsZW0uYXBwZW5kQ2hpbGQoYmFjaykKKyAgICAgICAgYmFjay5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIlxuIikpCisgICAgICAgIHdoaWxlIG5vZGVzIGFuZCBub2Rlc1swXS5ub2RlVHlwZSA9PSBURVhUIFwKKyAgICAgICAgICAgICAgYW5kIG5vdCBzdHJpbmcuc3RyaXAobm9kZXNbMF0uZGF0YSk6CisgICAgICAgICAgICBkZWwgbm9kZXNbMF0KKyAgICAgICAgbWFwKGJhY2suYXBwZW5kQ2hpbGQsIG5vZGVzKQorICAgICAgICBkb2NlbGVtLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG4iKSkKKworCitkZWYgaGFuZGxlX2xhYmVscyhkb2MsIGZyYWdtZW50KToKKyAgICBmb3IgbGFiZWwgaW4gZmluZF9hbGxfZWxlbWVudHMoZnJhZ21lbnQsICJsYWJlbCIpOgorICAgICAgICBpZCA9IGxhYmVsLmdldEF0dHJpYnV0ZSgiaWQiKQorICAgICAgICBpZiBub3QgaWQ6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBwYXJlbnQgPSBsYWJlbC5wYXJlbnROb2RlCisgICAgICAgIHBhcmVudFRhZ05hbWUgPSBwYXJlbnQudGFnTmFtZQorICAgICAgICBpZiBwYXJlbnRUYWdOYW1lID09ICJ0aXRsZSI6CisgICAgICAgICAgICBwYXJlbnQucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoImlkIiwgaWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJlbnQuc2V0QXR0cmlidXRlKCJpZCIsIGlkKQorICAgICAgICAjIG5vdywgcmVtb3ZlIDxsYWJlbCBpZD0iLi4uIi8+IGZyb20gcGFyZW50OgorICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQobGFiZWwpCisgICAgICAgIGlmIHBhcmVudFRhZ05hbWUgPT0gInRpdGxlIjoKKyAgICAgICAgICAgIHBhcmVudC5ub3JtYWxpemUoKQorICAgICAgICAgICAgY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGROb2RlcworICAgICAgICAgICAgaWYgY2hpbGRyZW5bLTFdLm5vZGVUeXBlID09IFRFWFQ6CisgICAgICAgICAgICAgICAgY2hpbGRyZW5bLTFdLmRhdGEgPSBzdHJpbmcucnN0cmlwKGNoaWxkcmVuWy0xXS5kYXRhKQorCisKK2RlZiBmaXh1cF90cmFpbGluZ193aGl0ZXNwYWNlKGRvYywgd3NtYXApOgorICAgIHF1ZXVlID0gW2RvY10KKyAgICB3aGlsZSBxdWV1ZToKKyAgICAgICAgbm9kZSA9IHF1ZXVlWzBdCisgICAgICAgIGRlbCBxdWV1ZVswXQorICAgICAgICBpZiB3c21hcC5oYXNfa2V5KG5vZGUubm9kZU5hbWUpOgorICAgICAgICAgICAgd3MgPSB3c21hcFtub2RlLnRhZ05hbWVdCisgICAgICAgICAgICBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcworICAgICAgICAgICAgY2hpbGRyZW4ucmV2ZXJzZSgpCisgICAgICAgICAgICBpZiBjaGlsZHJlblswXS5ub2RlVHlwZSA9PSBURVhUOgorICAgICAgICAgICAgICAgIGRhdGEgPSBzdHJpbmcucnN0cmlwKGNoaWxkcmVuWzBdLmRhdGEpICsgd3MKKyAgICAgICAgICAgICAgICBjaGlsZHJlblswXS5kYXRhID0gZGF0YQorICAgICAgICAgICAgY2hpbGRyZW4ucmV2ZXJzZSgpCisgICAgICAgICAgICAjIGhhY2sgdG8gZ2V0IHRoZSB0aXRsZSBpbiBwbGFjZToKKyAgICAgICAgICAgIGlmIG5vZGUudGFnTmFtZSA9PSAidGl0bGUiIFwKKyAgICAgICAgICAgICAgIGFuZCBub2RlLnBhcmVudE5vZGUuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PSBFTEVNRU5UOgorICAgICAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZG9jLmNyZWF0ZVRleHQoIlxuICAiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5maXJzdENoaWxkKQorICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZE5vZGVzOgorICAgICAgICAgICAgaWYgY2hpbGQubm9kZVR5cGUgPT0gRUxFTUVOVDoKKyAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQoY2hpbGQpCisKKworZGVmIG5vcm1hbGl6ZShkb2MpOgorICAgIGZvciBub2RlIGluIGRvYy5jaGlsZE5vZGVzOgorICAgICAgICBpZiBub2RlLm5vZGVUeXBlID09IEVMRU1FTlQ6CisgICAgICAgICAgICBub2RlLm5vcm1hbGl6ZSgpCisKKworZGVmIGNsZWFudXBfdHJhaWxpbmdfcGFyZW5zKGRvYywgZWxlbWVudF9uYW1lcyk6CisgICAgZCA9IHt9CisgICAgZm9yIGdpIGluIGVsZW1lbnRfbmFtZXM6CisgICAgICAgIGRbZ2ldID0gZ2kKKyAgICByZXdyaXRlX2VsZW1lbnQgPSBkLmhhc19rZXkKKyAgICBxdWV1ZSA9IFtdCisgICAgZm9yIG5vZGUgaW4gZG9jLmNoaWxkTm9kZXM6CisgICAgICAgIGlmIG5vZGUubm9kZVR5cGUgPT0gRUxFTUVOVDoKKyAgICAgICAgICAgIHF1ZXVlLmFwcGVuZChub2RlKQorICAgIHdoaWxlIHF1ZXVlOgorICAgICAgICBub2RlID0gcXVldWVbMF0KKyAgICAgICAgZGVsIHF1ZXVlWzBdCisgICAgICAgIGlmIHJld3JpdGVfZWxlbWVudChub2RlLnRhZ05hbWUpOgorICAgICAgICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkTm9kZXMKKyAgICAgICAgICAgIGlmIGxlbihjaGlsZHJlbikgPT0gMSBcCisgICAgICAgICAgICAgICBhbmQgY2hpbGRyZW5bMF0ubm9kZVR5cGUgPT0gVEVYVDoKKyAgICAgICAgICAgICAgICBkYXRhID0gY2hpbGRyZW5bMF0uZGF0YQorICAgICAgICAgICAgICAgIGlmIGRhdGFbLTI6XSA9PSAiKCkiOgorICAgICAgICAgICAgICAgICAgICBjaGlsZHJlblswXS5kYXRhID0gZGF0YVs6LTJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZE5vZGVzOgorICAgICAgICAgICAgICAgIGlmIGNoaWxkLm5vZGVUeXBlID09IEVMRU1FTlQ6CisgICAgICAgICAgICAgICAgICAgIHF1ZXVlLmFwcGVuZChjaGlsZCkKKworCitkZWYgY29udGVudHNfbWF0Y2gobGVmdCwgcmlnaHQpOgorICAgIGxlZnRfY2hpbGRyZW4gPSBsZWZ0LmNoaWxkTm9kZXMKKyAgICByaWdodF9jaGlsZHJlbiA9IHJpZ2h0LmNoaWxkTm9kZXMKKyAgICBpZiBsZW4obGVmdF9jaGlsZHJlbikgIT0gbGVuKHJpZ2h0X2NoaWxkcmVuKToKKyAgICAgICAgcmV0dXJuIDAKKyAgICBmb3IgbCwgciBpbiBtYXAoTm9uZSwgbGVmdF9jaGlsZHJlbiwgcmlnaHRfY2hpbGRyZW4pOgorICAgICAgICBub2RlVHlwZSA9IGwubm9kZVR5cGUKKyAgICAgICAgaWYgbm9kZVR5cGUgIT0gci5ub2RlVHlwZToKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGlmIG5vZGVUeXBlID09IEVMRU1FTlQ6CisgICAgICAgICAgICBpZiBsLnRhZ05hbWUgIT0gci50YWdOYW1lOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICAjIHNob3VsZCBjaGVjayBhdHRyaWJ1dGVzLCBidXQgdGhhdCdzIG5vdCBhIHByb2JsZW0gaGVyZQorICAgICAgICAgICAgaWYgbm90IGNvbnRlbnRzX21hdGNoKGwsIHIpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsaWYgbm9kZVR5cGUgPT0gVEVYVDoKKyAgICAgICAgICAgIGlmIGwuZGF0YSAhPSByLmRhdGE6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgbm90IHF1aXRlIHJpZ2h0LCBidXQgZ29vZCBlbm91Z2gKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgcmV0dXJuIDEKKworCitkZWYgY3JlYXRlX21vZHVsZV9pbmZvKGRvYywgc2VjdGlvbik6CisgICAgIyBIZWF2eS4KKyAgICBub2RlID0gZXh0cmFjdF9maXJzdF9lbGVtZW50KHNlY3Rpb24sICJtb2R1bGVzeW5vcHNpcyIpCisgICAgaWYgbm9kZSBpcyBOb25lOgorICAgICAgICByZXR1cm4KKyAgICBzZXRfdGFnTmFtZShub2RlLCAic3lub3BzaXMiKQorICAgIGxhc3RjaGlsZCA9IG5vZGUuY2hpbGROb2Rlc1stMV0KKyAgICBpZiBsYXN0Y2hpbGQubm9kZVR5cGUgPT0gVEVYVCBcCisgICAgICAgYW5kIGxhc3RjaGlsZC5kYXRhWy0xOl0gPT0gIi4iOgorICAgICAgICBsYXN0Y2hpbGQuZGF0YSA9IGxhc3RjaGlsZC5kYXRhWzotMV0KKyAgICBtb2RhdXRob3IgPSBleHRyYWN0X2ZpcnN0X2VsZW1lbnQoc2VjdGlvbiwgIm1vZHVsZWF1dGhvciIpCisgICAgaWYgbW9kYXV0aG9yOgorICAgICAgICBzZXRfdGFnTmFtZShtb2RhdXRob3IsICJhdXRob3IiKQorICAgICAgICBtb2RhdXRob3IuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKAorICAgICAgICAgICAgbW9kYXV0aG9yLmdldEF0dHJpYnV0ZSgibmFtZSIpKSkKKyAgICAgICAgbW9kYXV0aG9yLnJlbW92ZUF0dHJpYnV0ZSgibmFtZSIpCisgICAgcGxhdGZvcm0gPSBleHRyYWN0X2ZpcnN0X2VsZW1lbnQoc2VjdGlvbiwgInBsYXRmb3JtIikKKyAgICBpZiBzZWN0aW9uLnRhZ05hbWUgPT0gInNlY3Rpb24iOgorICAgICAgICBtb2RpbmZvX3BvcyA9IDIKKyAgICAgICAgbW9kaW5mbyA9IGRvYy5jcmVhdGVFbGVtZW50KCJtb2R1bGVpbmZvIikKKyAgICAgICAgbW9kZGVjbCA9IGV4dHJhY3RfZmlyc3RfZWxlbWVudChzZWN0aW9uLCAiZGVjbGFyZW1vZHVsZSIpCisgICAgICAgIG5hbWUgPSBOb25lCisgICAgICAgIGlmIG1vZGRlY2w6CisgICAgICAgICAgICBtb2RpbmZvLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG4gICAgIikpCisgICAgICAgICAgICBuYW1lID0gbW9kZGVjbC5hdHRyaWJ1dGVzWyJuYW1lIl0udmFsdWUKKyAgICAgICAgICAgIG5hbWVub2RlID0gZG9jLmNyZWF0ZUVsZW1lbnQoIm5hbWUiKQorICAgICAgICAgICAgbmFtZW5vZGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKG5hbWUpKQorICAgICAgICAgICAgbW9kaW5mby5hcHBlbmRDaGlsZChuYW1lbm9kZSkKKyAgICAgICAgICAgIHR5cGUgPSBtb2RkZWNsLmF0dHJpYnV0ZXMuZ2V0KCJ0eXBlIikKKyAgICAgICAgICAgIGlmIHR5cGU6CisgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUudmFsdWUKKyAgICAgICAgICAgICAgICBtb2RpbmZvLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG4gICAgIikpCisgICAgICAgICAgICAgICAgdHlwZW5vZGUgPSBkb2MuY3JlYXRlRWxlbWVudCgidHlwZSIpCisgICAgICAgICAgICAgICAgdHlwZW5vZGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKHR5cGUpKQorICAgICAgICAgICAgICAgIG1vZGluZm8uYXBwZW5kQ2hpbGQodHlwZW5vZGUpCisgICAgICAgIHZlcnNpb25hZGRlZCA9IGV4dHJhY3RfZmlyc3RfZWxlbWVudChzZWN0aW9uLCAidmVyc2lvbmFkZGVkIikKKyAgICAgICAgaWYgdmVyc2lvbmFkZGVkOgorICAgICAgICAgICAgbW9kaW5mby5zZXRBdHRyaWJ1dGUoImFkZGVkIiwgdmVyc2lvbmFkZGVkLmdldEF0dHJpYnV0ZSgidmVyc2lvbiIpKQorICAgICAgICB0aXRsZSA9IGdldF9maXJzdF9lbGVtZW50KHNlY3Rpb24sICJ0aXRsZSIpCisgICAgICAgIGlmIHRpdGxlOgorICAgICAgICAgICAgY2hpbGRyZW4gPSB0aXRsZS5jaGlsZE5vZGVzCisgICAgICAgICAgICBpZiBsZW4oY2hpbGRyZW4pID49IDIgXAorICAgICAgICAgICAgICAgYW5kIGNoaWxkcmVuWzBdLm5vZGVOYW1lID09ICJtb2R1bGUiIFwKKyAgICAgICAgICAgICAgIGFuZCBjaGlsZHJlblswXS5jaGlsZE5vZGVzWzBdLmRhdGEgPT0gbmFtZToKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgaXQ7IG1vcnBoIHRoZSA8dGl0bGU+IGludG8gPHNob3J0LXN5bm9wc2lzPgorICAgICAgICAgICAgICAgIGZpcnN0X2RhdGEgPSBjaGlsZHJlblsxXQorICAgICAgICAgICAgICAgIGlmIGZpcnN0X2RhdGEuZGF0YVs6NF0gPT0gIiAtLS0iOgorICAgICAgICAgICAgICAgICAgICBmaXJzdF9kYXRhLmRhdGEgPSBzdHJpbmcubHN0cmlwKGZpcnN0X2RhdGEuZGF0YVs0Ol0pCisgICAgICAgICAgICAgICAgc2V0X3RhZ05hbWUodGl0bGUsICJzaG9ydC1zeW5vcHNpcyIpCisgICAgICAgICAgICAgICAgaWYgY2hpbGRyZW5bLTFdLm5vZGVUeXBlID09IFRFWFQgXAorICAgICAgICAgICAgICAgICAgIGFuZCBjaGlsZHJlblstMV0uZGF0YVstMTpdID09ICIuIjoKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5bLTFdLmRhdGEgPSBjaGlsZHJlblstMV0uZGF0YVs6LTFdCisgICAgICAgICAgICAgICAgc2VjdGlvbi5yZW1vdmVDaGlsZCh0aXRsZSkKKyAgICAgICAgICAgICAgICBzZWN0aW9uLnJlbW92ZUNoaWxkKHNlY3Rpb24uY2hpbGROb2Rlc1swXSkKKyAgICAgICAgICAgICAgICB0aXRsZS5yZW1vdmVDaGlsZChjaGlsZHJlblswXSkKKyAgICAgICAgICAgICAgICBtb2RpbmZvX3BvcyA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXdyaXRlKCJtb2R1bGUgbmFtZSBpbiB0aXRsZSBkb2Vzbid0IG1hdGNoIgorICAgICAgICAgICAgICAgICAgICAgICAiIDxkZWNsYXJlbW9kdWxlLz47IG5vIDxzaG9ydC1zeW5vcHNpcy8+XG4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXdyaXRlKCJVbmV4cGVjdGVkIGNvbmRpdGlvbjogPHNlY3Rpb24vPiB3aXRob3V0IDx0aXRsZS8+XG4iKQorICAgICAgICBtb2RpbmZvLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG4gICAgIikpCisgICAgICAgIG1vZGluZm8uYXBwZW5kQ2hpbGQobm9kZSkKKyAgICAgICAgaWYgdGl0bGUgYW5kIG5vdCBjb250ZW50c19tYXRjaCh0aXRsZSwgbm9kZSk6CisgICAgICAgICAgICAjIFRoZSBzaG9ydCBzeW5vcHNpcyBpcyBhY3R1YWxseSBkaWZmZXJlbnQsCisgICAgICAgICAgICAjIGFuZCBuZWVkcyB0byBiZSBzdG9yZWQ6CisgICAgICAgICAgICBtb2RpbmZvLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG4gICAgIikpCisgICAgICAgICAgICBtb2RpbmZvLmFwcGVuZENoaWxkKHRpdGxlKQorICAgICAgICBpZiBtb2RhdXRob3I6CisgICAgICAgICAgICBtb2RpbmZvLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG4gICAgIikpCisgICAgICAgICAgICBtb2RpbmZvLmFwcGVuZENoaWxkKG1vZGF1dGhvcikKKyAgICAgICAgaWYgcGxhdGZvcm06CisgICAgICAgICAgICBtb2RpbmZvLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG4gICAgIikpCisgICAgICAgICAgICBtb2RpbmZvLmFwcGVuZENoaWxkKHBsYXRmb3JtKQorICAgICAgICBtb2RpbmZvLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG4gICIpKQorICAgICAgICBzZWN0aW9uLmluc2VydEJlZm9yZShtb2RpbmZvLCBzZWN0aW9uLmNoaWxkTm9kZXNbbW9kaW5mb19wb3NdKQorICAgICAgICBzZWN0aW9uLmluc2VydEJlZm9yZShkb2MuY3JlYXRlVGV4dE5vZGUoIlxuICAiKSwgbW9kaW5mbykKKyAgICAgICAgIworICAgICAgICAjIFRoZSByZXN0IG9mIHRoaXMgcmVtb3ZlcyBleHRyYSBuZXdsaW5lcyBmcm9tIHdoZXJlIHdlIGN1dCBvdXQKKyAgICAgICAgIyBhIGxvdCBvZiBlbGVtZW50cy4gIEEgbG90IG9mIGNvZGUgZm9yIG1pbmltYWwgdmFsdWUsIGJ1dCBrZWVwcworICAgICAgICAjIGtlZXBzIHRoZSBnZW5lcmF0ZWQgKk1MIGZyb20gYmVpbmcgdG9vIGZ1bm55IGxvb2tpbmcuCisgICAgICAgICMKKyAgICAgICAgc2VjdGlvbi5ub3JtYWxpemUoKQorICAgICAgICBjaGlsZHJlbiA9IHNlY3Rpb24uY2hpbGROb2RlcworICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oY2hpbGRyZW4pKToKKyAgICAgICAgICAgIG5vZGUgPSBjaGlsZHJlbltpXQorICAgICAgICAgICAgaWYgbm9kZS5ub2RlTmFtZSA9PSAibW9kdWxlaW5mbyI6CisgICAgICAgICAgICAgICAgbmV4dG5vZGUgPSBjaGlsZHJlbltpKzFdCisgICAgICAgICAgICAgICAgaWYgbmV4dG5vZGUubm9kZVR5cGUgPT0gVEVYVDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG5leHRub2RlLmRhdGEKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHN0cmluZy5sc3RyaXAoZGF0YSkpIDwgKGxlbihkYXRhKSAtIDQpOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dG5vZGUuZGF0YSA9ICJcblxuXG4iICsgc3RyaW5nLmxzdHJpcChkYXRhKQorCisKK2RlZiBjbGVhbnVwX3N5bm9wc2VzKGRvYywgZnJhZ21lbnQpOgorICAgIGZvciBub2RlIGluIGZpbmRfYWxsX2VsZW1lbnRzKGZyYWdtZW50LCAic2VjdGlvbiIpOgorICAgICAgICBjcmVhdGVfbW9kdWxlX2luZm8oZG9jLCBub2RlKQorCisKK2RlZiBmaXh1cF90YWJsZV9zdHJ1Y3R1cmVzKGRvYywgZnJhZ21lbnQpOgorICAgIGZvciB0YWJsZSBpbiBmaW5kX2FsbF9lbGVtZW50cyhmcmFnbWVudCwgInRhYmxlIik6CisgICAgICAgIGZpeHVwX3RhYmxlKGRvYywgdGFibGUpCisKKworZGVmIGZpeHVwX3RhYmxlKGRvYywgdGFibGUpOgorICAgICMgY3JlYXRlIHRoZSB0YWJsZSBoZWFkCisgICAgdGhlYWQgPSBkb2MuY3JlYXRlRWxlbWVudCgidGhlYWQiKQorICAgIHJvdyA9IGRvYy5jcmVhdGVFbGVtZW50KCJyb3ciKQorICAgIG1vdmVfZWxlbWVudHNfYnlfbmFtZShkb2MsIHRhYmxlLCByb3csICJlbnRyeSIpCisgICAgdGhlYWQuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJcbiAgICAiKSkKKyAgICB0aGVhZC5hcHBlbmRDaGlsZChyb3cpCisgICAgdGhlYWQuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJcbiAgICAiKSkKKyAgICAjIGNyZWF0ZSB0aGUgdGFibGUgYm9keQorICAgIHRib2R5ID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRib2R5IikKKyAgICBwcmV2X3JvdyA9IE5vbmUKKyAgICBsYXN0X3dhc19obGluZSA9IDAKKyAgICBjaGlsZHJlbiA9IHRhYmxlLmNoaWxkTm9kZXMKKyAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgIGlmIGNoaWxkLm5vZGVUeXBlID09IEVMRU1FTlQ6CisgICAgICAgICAgICB0YWdOYW1lID0gY2hpbGQudGFnTmFtZQorICAgICAgICAgICAgaWYgdGFnTmFtZSA9PSAiaGxpbmUiIGFuZCBwcmV2X3JvdyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBwcmV2X3Jvdy5zZXRBdHRyaWJ1dGUoInJvd3NlcCIsICIxIikKKyAgICAgICAgICAgIGVsaWYgdGFnTmFtZSA9PSAicm93IjoKKyAgICAgICAgICAgICAgICBwcmV2X3JvdyA9IGNoaWxkCisgICAgIyBzYXZlIHRoZSByb3dzOgorICAgIHRib2R5LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG4gICAgIikpCisgICAgbW92ZV9lbGVtZW50c19ieV9uYW1lKGRvYywgdGFibGUsIHRib2R5LCAicm93Iiwgc2VwPSJcbiAgICAiKQorICAgICMgYW5kIHRvc3MgdGhlIHJlc3Q6CisgICAgd2hpbGUgY2hpbGRyZW46CisgICAgICAgIGNoaWxkID0gY2hpbGRyZW5bMF0KKyAgICAgICAgbm9kZVR5cGUgPSBjaGlsZC5ub2RlVHlwZQorICAgICAgICBpZiBub2RlVHlwZSA9PSBURVhUOgorICAgICAgICAgICAgaWYgc3RyaW5nLnN0cmlwKGNoaWxkLmRhdGEpOgorICAgICAgICAgICAgICAgIHJhaXNlIENvbnZlcnNpb25FcnJvcigidW5leHBlY3RlZCBmcmVlIGRhdGEgaW4gPCVzPjogJXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHRhYmxlLnRhZ05hbWUsIGNoaWxkLmRhdGEpKQorICAgICAgICAgICAgdGFibGUucmVtb3ZlQ2hpbGQoY2hpbGQpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBub2RlVHlwZSA9PSBFTEVNRU5UOgorICAgICAgICAgICAgaWYgY2hpbGQudGFnTmFtZSAhPSAiaGxpbmUiOgorICAgICAgICAgICAgICAgIHJhaXNlIENvbnZlcnNpb25FcnJvcigKKyAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgPCVzPiBpbiB0YWJsZSIgJSBjaGlsZC50YWdOYW1lKQorICAgICAgICAgICAgdGFibGUucmVtb3ZlQ2hpbGQoY2hpbGQpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICByYWlzZSBDb252ZXJzaW9uRXJyb3IoCisgICAgICAgICAgICAidW5leHBlY3RlZCAlcyBub2RlIGluIHRhYmxlIiAlIGNoaWxkLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAjIG5vdGhpbmcgbGVmdCBpbiB0aGUgPHRhYmxlPjsgYWRkIHRoZSA8dGhlYWQ+IGFuZCA8dGJvZHk+CisgICAgdGdyb3VwID0gZG9jLmNyZWF0ZUVsZW1lbnQoInRncm91cCIpCisgICAgdGdyb3VwLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG4gICIpKQorICAgIHRncm91cC5hcHBlbmRDaGlsZCh0aGVhZCkKKyAgICB0Z3JvdXAuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJcbiAgIikpCisgICAgdGdyb3VwLmFwcGVuZENoaWxkKHRib2R5KQorICAgIHRncm91cC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIlxuICAiKSkKKyAgICB0YWJsZS5hcHBlbmRDaGlsZCh0Z3JvdXApCisgICAgIyBub3cgbWFrZSB0aGUgPGVudHJ5PnMgbG9vayBuaWNlOgorICAgIGZvciByb3cgaW4gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInJvdyIpOgorICAgICAgICBmaXh1cF9yb3coZG9jLCByb3cpCisKKworZGVmIGZpeHVwX3Jvdyhkb2MsIHJvdyk6CisgICAgZW50cmllcyA9IFtdCisgICAgbWFwKGVudHJpZXMuYXBwZW5kLCByb3cuY2hpbGROb2Rlc1sxOl0pCisgICAgZm9yIGVudHJ5IGluIGVudHJpZXM6CisgICAgICAgIHJvdy5pbnNlcnRCZWZvcmUoZG9jLmNyZWF0ZVRleHROb2RlKCJcbiAgICAgICAgICIpLCBlbnRyeSkKKyMgICAgcm93LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG4gICAgICAiKSkKKworCitkZWYgbW92ZV9lbGVtZW50c19ieV9uYW1lKGRvYywgc291cmNlLCBkZXN0LCBuYW1lLCBzZXA9Tm9uZSk6CisgICAgbm9kZXMgPSBbXQorICAgIGZvciBjaGlsZCBpbiBzb3VyY2UuY2hpbGROb2RlczoKKyAgICAgICAgaWYgY2hpbGQubm9kZU5hbWUgPT0gbmFtZToKKyAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjaGlsZCkKKyAgICBmb3Igbm9kZSBpbiBub2RlczoKKyAgICAgICAgc291cmNlLnJlbW92ZUNoaWxkKG5vZGUpCisgICAgICAgIGRlc3QuYXBwZW5kQ2hpbGQobm9kZSkKKyAgICAgICAgaWYgc2VwOgorICAgICAgICAgICAgZGVzdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoc2VwKSkKKworCitSRUNVUlNFX0lOVE9fUEFSQV9DT05UQUlORVJTID0gKAorICAgICJjaGFwdGVyIiwgImFic3RyYWN0IiwgImVudW1lcmF0ZSIsCisgICAgInNlY3Rpb24iLCAic3Vic2VjdGlvbiIsICJzdWJzdWJzZWN0aW9uIiwKKyAgICAicGFyYWdyYXBoIiwgInN1YnBhcmFncmFwaCIsICJiYWNrLW1hdHRlciIsCisgICAgImhvd3RvIiwgIm1hbnVhbCIsCisgICAgIml0ZW0iLCAiaXRlbWl6ZSIsICJmdWxsbGluZWl0ZW1zIiwgImVudW1lcmF0aW9uIiwgImRlc2NyaXB0aW9ubGlzdCIsCisgICAgImRlZmluaXRpb25saXN0IiwgImRlZmluaXRpb24iLAorICAgICkKKworUEFSQV9MRVZFTF9FTEVNRU5UUyA9ICgKKyAgICAibW9kdWxlaW5mbyIsICJ0aXRsZSIsICJ2ZXJiYXRpbSIsICJlbnVtZXJhdGUiLCAiaXRlbSIsCisgICAgImludGVycHJldGVyLXNlc3Npb24iLCAiYmFjay1tYXR0ZXIiLCAiaW50ZXJhY3RpdmUtc2Vzc2lvbiIsCisgICAgIm9wY29kZWRlc2MiLCAiY2xhc3NkZXNjIiwgImRhdGFkZXNjIiwKKyAgICAiZnVuY2Rlc2MiLCAibWV0aG9kZGVzYyIsICJleGNkZXNjIiwgIm1lbWJlcmRlc2MiLCAibWVtYmRlcmRlc2NuaSIsCisgICAgImZ1bmNkZXNjbmkiLCAibWV0aG9kZGVzY25pIiwgImV4Y2Rlc2NuaSIsCisgICAgInRhYmxlaWkiLCAidGFibGVpaWkiLCAidGFibGVpdiIsICJsb2NhbG1vZHVsZXRhYmxlIiwKKyAgICAic2VjdGlvbmF1dGhvciIsICJzZWVhbHNvIiwgIml0ZW1pemUiLAorICAgICMgaW5jbHVkZSA8cGFyYT4sIHNvIHdlIGNhbiBqdXN0IGRvIGl0IGFnYWluIHRvIGdldCBzdWJzZXF1ZW50IHBhcmFzOgorICAgIFBBUkFfRUxFTUVOVCwKKyAgICApCisKK1BBUkFfTEVWRUxfUFJFQ0VFREVSUyA9ICgKKyAgICAic2V0aW5kZXhzdWJpdGVtIiwgImF1dGhvciIsCisgICAgInN0aW5kZXgiLCAib2JpbmRleCIsICJDT01NRU5UIiwgImxhYmVsIiwgImlucHV0IiwgInRpdGxlIiwKKyAgICAidmVyc2lvbmFkZGVkIiwgInZlcnNpb25jaGFuZ2VkIiwgImRlY2xhcmVtb2R1bGUiLCAibW9kdWxlc3lub3BzaXMiLAorICAgICJtb2R1bGVhdXRob3IiLCAiaW5kZXh0ZXJtIiwgImxlYWRlciIsCisgICAgKQorCisKK2RlZiBmaXh1cF9wYXJhcyhkb2MsIGZyYWdtZW50KToKKyAgICBmb3IgY2hpbGQgaW4gZnJhZ21lbnQuY2hpbGROb2RlczoKKyAgICAgICAgaWYgY2hpbGQubm9kZU5hbWUgaW4gUkVDVVJTRV9JTlRPX1BBUkFfQ09OVEFJTkVSUzoKKyAgICAgICAgICAgIGZpeHVwX3BhcmFzX2hlbHBlcihkb2MsIGNoaWxkKQorICAgIGRlc2NyaXB0aW9ucyA9IGZpbmRfYWxsX2VsZW1lbnRzKGZyYWdtZW50LCAiZGVzY3JpcHRpb24iKQorICAgIGZvciBkZXNjcmlwdGlvbiBpbiBkZXNjcmlwdGlvbnM6CisgICAgICAgIGZpeHVwX3BhcmFzX2hlbHBlcihkb2MsIGRlc2NyaXB0aW9uKQorCisKK2RlZiBmaXh1cF9wYXJhc19oZWxwZXIoZG9jLCBjb250YWluZXIsIGRlcHRoPTApOgorICAgICMgZG9jdW1lbnQgaXMgYWxyZWFkeSBub3JtYWxpemVkCisgICAgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGROb2RlcworICAgIHN0YXJ0ID0gc2tpcF9sZWFkaW5nX25vZGVzKGNoaWxkcmVuKQorICAgIHdoaWxlIGxlbihjaGlsZHJlbikgPiBzdGFydDoKKyAgICAgICAgaWYgY2hpbGRyZW5bc3RhcnRdLm5vZGVOYW1lIGluIFJFQ1VSU0VfSU5UT19QQVJBX0NPTlRBSU5FUlM6CisgICAgICAgICAgICAjIFNvbWV0aGluZyB0byByZWN1cnNlIGludG86CisgICAgICAgICAgICBmaXh1cF9wYXJhc19oZWxwZXIoZG9jLCBjaGlsZHJlbltzdGFydF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFBhcmFncmFwaCBtYXRlcmlhbDoKKyAgICAgICAgICAgIGJ1aWxkX3BhcmEoZG9jLCBjb250YWluZXIsIHN0YXJ0LCBsZW4oY2hpbGRyZW4pKQorICAgICAgICAgICAgaWYgREVCVUdfUEFSQV9GSVhFUiBhbmQgZGVwdGggPT0gMTA6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgc3RhcnQgPSBza2lwX2xlYWRpbmdfbm9kZXMoY2hpbGRyZW4sIHN0YXJ0ICsgMSkKKworCitkZWYgYnVpbGRfcGFyYShkb2MsIHBhcmVudCwgc3RhcnQsIGkpOgorICAgIGNoaWxkcmVuID0gcGFyZW50LmNoaWxkTm9kZXMKKyAgICBhZnRlciA9IHN0YXJ0ICsgMQorICAgIGhhdmVfbGFzdCA9IDAKKyAgICBCUkVBS19FTEVNRU5UUyA9IFBBUkFfTEVWRUxfRUxFTUVOVFMgKyBSRUNVUlNFX0lOVE9fUEFSQV9DT05UQUlORVJTCisgICAgIyBDb2xsZWN0IGFsbCBjaGlsZHJlbiB1bnRpbCBcblxuKyBpcyBmb3VuZCBpbiBhIHRleHQgbm9kZSBvciBhCisgICAgIyBtZW1iZXIgb2YgQlJFQUtfRUxFTUVOVFMgaXMgZm91bmQuCisgICAgZm9yIGogaW4gcmFuZ2Uoc3RhcnQsIGkpOgorICAgICAgICBhZnRlciA9IGogKyAxCisgICAgICAgIGNoaWxkID0gY2hpbGRyZW5bal0KKyAgICAgICAgbm9kZVR5cGUgPSBjaGlsZC5ub2RlVHlwZQorICAgICAgICBpZiBub2RlVHlwZSA9PSBFTEVNRU5UOgorICAgICAgICAgICAgaWYgY2hpbGQudGFnTmFtZSBpbiBCUkVBS19FTEVNRU5UUzoKKyAgICAgICAgICAgICAgICBhZnRlciA9IGoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbGlmIG5vZGVUeXBlID09IFRFWFQ6CisgICAgICAgICAgICBwb3MgPSBzdHJpbmcuZmluZChjaGlsZC5kYXRhLCAiXG5cbiIpCisgICAgICAgICAgICBpZiBwb3MgPT0gMDoKKyAgICAgICAgICAgICAgICBhZnRlciA9IGoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcG9zID49IDE6CisgICAgICAgICAgICAgICAgY2hpbGQuc3BsaXRUZXh0KHBvcykKKyAgICAgICAgICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIGhhdmVfbGFzdCA9IDEKKyAgICBpZiAoc3RhcnQgKyAxKSA+IGFmdGVyOgorICAgICAgICByYWlzZSBDb252ZXJzaW9uRXJyb3IoCisgICAgICAgICAgICAiYnVpbGRfcGFyYSgpIGNvdWxkIG5vdCBpZGVudGlmeSBjb250ZW50IHRvIHR1cm4gaW50byBhIHBhcmFncmFwaCIpCisgICAgaWYgY2hpbGRyZW5bYWZ0ZXIgLSAxXS5ub2RlVHlwZSA9PSBURVhUOgorICAgICAgICAjIHdlIG1heSBuZWVkIHRvIHNwbGl0IG9mZiB0cmFpbGluZyB3aGl0ZSBzcGFjZToKKyAgICAgICAgY2hpbGQgPSBjaGlsZHJlblthZnRlciAtIDFdCisgICAgICAgIGRhdGEgPSBjaGlsZC5kYXRhCisgICAgICAgIGlmIHN0cmluZy5yc3RyaXAoZGF0YSkgIT0gZGF0YToKKyAgICAgICAgICAgIGhhdmVfbGFzdCA9IDAKKyAgICAgICAgICAgIGNoaWxkLnNwbGl0VGV4dChsZW4oc3RyaW5nLnJzdHJpcChkYXRhKSkpCisgICAgcGFyYSA9IGRvYy5jcmVhdGVFbGVtZW50KFBBUkFfRUxFTUVOVCkKKyAgICBwcmV2ID0gTm9uZQorICAgIGluZGV4ZXMgPSByYW5nZShzdGFydCwgYWZ0ZXIpCisgICAgaW5kZXhlcy5yZXZlcnNlKCkKKyAgICBmb3IgaiBpbiBpbmRleGVzOgorICAgICAgICBub2RlID0gcGFyZW50LmNoaWxkTm9kZXNbal0KKyAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKG5vZGUpCisgICAgICAgIHBhcmEuaW5zZXJ0QmVmb3JlKG5vZGUsIHByZXYpCisgICAgICAgIHByZXYgPSBub2RlCisgICAgaWYgaGF2ZV9sYXN0OgorICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQocGFyYSkKKyAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG5cbiIpKQorICAgICAgICByZXR1cm4gbGVuKHBhcmVudC5jaGlsZE5vZGVzKQorICAgIGVsc2U6CisgICAgICAgIG5leHRub2RlID0gcGFyZW50LmNoaWxkTm9kZXNbc3RhcnRdCisgICAgICAgIGlmIG5leHRub2RlLm5vZGVUeXBlID09IFRFWFQ6CisgICAgICAgICAgICBpZiBuZXh0bm9kZS5kYXRhIGFuZCBuZXh0bm9kZS5kYXRhWzBdICE9ICJcbiI6CisgICAgICAgICAgICAgICAgbmV4dG5vZGUuZGF0YSA9ICJcbiIgKyBuZXh0bm9kZS5kYXRhCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXdub2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKCJcbiIpCisgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld25vZGUsIG5leHRub2RlKQorICAgICAgICAgICAgbmV4dG5vZGUgPSBuZXdub2RlCisgICAgICAgICAgICBzdGFydCA9IHN0YXJ0ICsgMQorICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHBhcmEsIG5leHRub2RlKQorICAgICAgICByZXR1cm4gc3RhcnQgKyAxCisKKworZGVmIHNraXBfbGVhZGluZ19ub2RlcyhjaGlsZHJlbiwgc3RhcnQ9MCk6CisgICAgIiIiUmV0dXJuIGluZGV4IGludG8gY2hpbGRyZW4gb2YgYSBub2RlIGF0IHdoaWNoIHBhcmFncmFwaCBidWlsZGluZyBzaG91bGQKKyAgICBiZWdpbiBvciBhIHJlY3Vyc2l2ZSBjYWxsIHRvIGZpeHVwX3BhcmFzX2hlbHBlcigpIHNob3VsZCBiZSBtYWRlIChmb3IKKyAgICBzdWJzZWN0aW9ucywgZXRjLikuCisKKyAgICBXaGVuIHRoZSByZXR1cm4gdmFsdWUgPj0gbGVuKGNoaWxkcmVuKSwgd2UndmUgYnVpbHQgYWxsIHRoZSBwYXJhcyB3ZSBjYW4KKyAgICBmcm9tIHRoaXMgbGlzdCBvZiBjaGlsZHJlbi4KKyAgICAiIiIKKyAgICBpID0gbGVuKGNoaWxkcmVuKQorICAgIHdoaWxlIGkgPiBzdGFydDoKKyAgICAgICAgIyBza2lwIG92ZXIgbGVhZGluZyBjb21tZW50cyBhbmQgd2hpdGVzcGFjZToKKyAgICAgICAgY2hpbGQgPSBjaGlsZHJlbltzdGFydF0KKyAgICAgICAgbm9kZVR5cGUgPSBjaGlsZC5ub2RlVHlwZQorICAgICAgICBpZiBub2RlVHlwZSA9PSBURVhUOgorICAgICAgICAgICAgZGF0YSA9IGNoaWxkLmRhdGEKKyAgICAgICAgICAgIHNob3J0ZW5lZCA9IHN0cmluZy5sc3RyaXAoZGF0YSkKKyAgICAgICAgICAgIGlmIHNob3J0ZW5lZDoKKyAgICAgICAgICAgICAgICBpZiBkYXRhICE9IHNob3J0ZW5lZDoKKyAgICAgICAgICAgICAgICAgICAgIyBicmVhayBpbnRvIHR3byBub2Rlczogd2hpdGVzcGFjZSBhbmQgbm9uLXdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3BsaXRUZXh0KGxlbihkYXRhKSAtIGxlbihzaG9ydGVuZWQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQgKyAxCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0CisgICAgICAgICAgICAjIGFsbCB3aGl0ZXNwYWNlLCBqdXN0IHNraXAKKyAgICAgICAgZWxpZiBub2RlVHlwZSA9PSBFTEVNRU5UOgorICAgICAgICAgICAgdGFnTmFtZSA9IGNoaWxkLnRhZ05hbWUKKyAgICAgICAgICAgIGlmIHRhZ05hbWUgaW4gUkVDVVJTRV9JTlRPX1BBUkFfQ09OVEFJTkVSUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQKKyAgICAgICAgICAgIGlmIHRhZ05hbWUgbm90IGluIFBBUkFfTEVWRUxfRUxFTUVOVFMgKyBQQVJBX0xFVkVMX1BSRUNFRURFUlM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0CisgICAgICAgIHN0YXJ0ID0gc3RhcnQgKyAxCisgICAgcmV0dXJuIHN0YXJ0CisKKworZGVmIGZpeHVwX3JmY19yZWZlcmVuY2VzKGRvYywgZnJhZ21lbnQpOgorICAgIGZvciByZmNub2RlIGluIGZpbmRfYWxsX2VsZW1lbnRzKGZyYWdtZW50LCAicmZjIik6CisgICAgICAgIHJmY25vZGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKAorICAgICAgICAgICAgIlJGQyAiICsgcmZjbm9kZS5nZXRBdHRyaWJ1dGUoIm51bSIpKSkKKworCitkZWYgZml4dXBfc2lnbmF0dXJlcyhkb2MsIGZyYWdtZW50KToKKyAgICBmb3IgY2hpbGQgaW4gZnJhZ21lbnQuY2hpbGROb2RlczoKKyAgICAgICAgaWYgY2hpbGQubm9kZVR5cGUgPT0gRUxFTUVOVDoKKyAgICAgICAgICAgIGFyZ3MgPSBjaGlsZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYXJncyIpCisgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgICAgICAgICAgZml4dXBfYXJncyhkb2MsIGFyZykKKyAgICAgICAgICAgICAgICBhcmcubm9ybWFsaXplKCkKKyAgICAgICAgICAgIGFyZ3MgPSBjaGlsZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY29uc3RydWN0b3ItYXJncyIpCisgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgICAgICAgICAgZml4dXBfYXJncyhkb2MsIGFyZykKKyAgICAgICAgICAgICAgICBhcmcubm9ybWFsaXplKCkKKworCitkZWYgZml4dXBfYXJncyhkb2MsIGFyZ2xpc3QpOgorICAgIGZvciBjaGlsZCBpbiBhcmdsaXN0LmNoaWxkTm9kZXM6CisgICAgICAgIGlmIGNoaWxkLm5vZGVOYW1lID09ICJvcHRpb25hbCI6CisgICAgICAgICAgICAjIGZvdW5kIGl0OyBmaXggYW5kIHJldHVybgorICAgICAgICAgICAgYXJnbGlzdC5pbnNlcnRCZWZvcmUoZG9jLmNyZWF0ZVRleHROb2RlKCJbIiksIGNoaWxkKQorICAgICAgICAgICAgb3B0a2lkcyA9IGNoaWxkLmNoaWxkTm9kZXMKKyAgICAgICAgICAgIHdoaWxlIG9wdGtpZHM6CisgICAgICAgICAgICAgICAgayA9IG9wdGtpZHNbMF0KKyAgICAgICAgICAgICAgICBjaGlsZC5yZW1vdmVDaGlsZChrKQorICAgICAgICAgICAgICAgIGFyZ2xpc3QuaW5zZXJ0QmVmb3JlKGssIGNoaWxkKQorICAgICAgICAgICAgYXJnbGlzdC5pbnNlcnRCZWZvcmUoZG9jLmNyZWF0ZVRleHROb2RlKCJdIiksIGNoaWxkKQorICAgICAgICAgICAgYXJnbGlzdC5yZW1vdmVDaGlsZChjaGlsZCkKKyAgICAgICAgICAgIHJldHVybiBmaXh1cF9hcmdzKGRvYywgYXJnbGlzdCkKKworCitkZWYgZml4dXBfc2VjdGlvbmF1dGhvcnMoZG9jLCBmcmFnbWVudCk6CisgICAgZm9yIHNlY3RhdXRoIGluIGZpbmRfYWxsX2VsZW1lbnRzKGZyYWdtZW50LCAic2VjdGlvbmF1dGhvciIpOgorICAgICAgICBzZWN0aW9uID0gc2VjdGF1dGgucGFyZW50Tm9kZQorICAgICAgICBzZWN0aW9uLnJlbW92ZUNoaWxkKHNlY3RhdXRoKQorICAgICAgICBzZXRfdGFnTmFtZShzZWN0YXV0aCwgImF1dGhvciIpCisgICAgICAgIHNlY3RhdXRoLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgKKyAgICAgICAgICAgIHNlY3RhdXRoLmdldEF0dHJpYnV0ZSgibmFtZSIpKSkKKyAgICAgICAgc2VjdGF1dGgucmVtb3ZlQXR0cmlidXRlKCJuYW1lIikKKyAgICAgICAgYWZ0ZXIgPSBzZWN0aW9uLmNoaWxkTm9kZXNbMl0KKyAgICAgICAgdGl0bGUgPSBzZWN0aW9uLmNoaWxkTm9kZXNbMV0KKyAgICAgICAgaWYgdGl0bGUubm9kZU5hbWUgIT0gInRpdGxlIjoKKyAgICAgICAgICAgIGFmdGVyID0gc2VjdGlvbi5jaGlsZE5vZGVzWzBdCisgICAgICAgIHNlY3Rpb24uaW5zZXJ0QmVmb3JlKGRvYy5jcmVhdGVUZXh0Tm9kZSgiXG4gICIpLCBhZnRlcikKKyAgICAgICAgc2VjdGlvbi5pbnNlcnRCZWZvcmUoc2VjdGF1dGgsIGFmdGVyKQorCisKK2RlZiBmaXh1cF92ZXJiYXRpbXMoZG9jKToKKyAgICBmb3IgdmVyYmF0aW0gaW4gZmluZF9hbGxfZWxlbWVudHMoZG9jLCAidmVyYmF0aW0iKToKKyAgICAgICAgY2hpbGQgPSB2ZXJiYXRpbS5jaGlsZE5vZGVzWzBdCisgICAgICAgIGlmIGNoaWxkLm5vZGVUeXBlID09IFRFWFQgXAorICAgICAgICAgICBhbmQgc3RyaW5nLmxzdHJpcChjaGlsZC5kYXRhKVs6M10gPT0gIj4+PiI6CisgICAgICAgICAgICBzZXRfdGFnTmFtZSh2ZXJiYXRpbSwgImludGVyYWN0aXZlLXNlc3Npb24iKQorCisKK2RlZiBhZGRfbm9kZV9pZHMoZnJhZ21lbnQsIGNvdW50ZXI9MCk6CisgICAgZnJhZ21lbnQubm9kZV9pZCA9IGNvdW50ZXIKKyAgICBmb3Igbm9kZSBpbiBmcmFnbWVudC5jaGlsZE5vZGVzOgorICAgICAgICBjb3VudGVyID0gY291bnRlciArIDEKKyAgICAgICAgaWYgbm9kZS5ub2RlVHlwZSA9PSBFTEVNRU5UOgorICAgICAgICAgICAgY291bnRlciA9IGFkZF9ub2RlX2lkcyhub2RlLCBjb3VudGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbm9kZS5ub2RlX2lkID0gY291bnRlcgorICAgIHJldHVybiBjb3VudGVyICsgMQorCisKK1JFRk1PRElOREVYX0VMRU1FTlRTID0gKCdyZWZtb2RpbmRleCcsICdyZWZiaW1vZGluZGV4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICdyZWZleG1vZGluZGV4JywgJ3JlZnN0bW9kaW5kZXgnKQorCitkZWYgZml4dXBfcmVmbW9kaW5kZXhlcyhmcmFnbWVudCk6CisgICAgIyBMb2NhdGUgPHJlZiptb2RpbmRleD4uLi48Lz4gY28tbG9jYXRlZCB3aXRoIDxtb2R1bGU+Li4uPC8+LCBhbmQKKyAgICAjIHJlbW92ZSB0aGUgPHJlZiptb2RpbmRleD4sIHJlcGxhY2luZyBpdCB3aXRoIGluZGV4PWluZGV4IG9uIHRoZQorICAgICMgPG1vZHVsZT4gZWxlbWVudC4KKyAgICBub2RlcyA9IGZpbmRfYWxsX2VsZW1lbnRzX2Zyb21fc2V0KGZyYWdtZW50LCBSRUZNT0RJTkRFWF9FTEVNRU5UUykKKyAgICBkID0ge30KKyAgICBmb3Igbm9kZSBpbiBub2RlczoKKyAgICAgICAgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlCisgICAgICAgIGRbcGFyZW50Lm5vZGVfaWRdID0gcGFyZW50CisgICAgZGVsIG5vZGVzCisgICAgbWFwKGZpeHVwX3JlZm1vZGluZGV4ZXNfY2h1bmssIGQudmFsdWVzKCkpCisKKworZGVmIGZpeHVwX3JlZm1vZGluZGV4ZXNfY2h1bmsoY29udGFpbmVyKToKKyAgICAjIG5vZGUgaXMgcHJvYmFibHkgYSA8cGFyYT47IGxldCdzIHNlZSBob3cgb2Z0ZW4gaXQgaXNuJ3Q6CisgICAgaWYgY29udGFpbmVyLnRhZ05hbWUgIT0gUEFSQV9FTEVNRU5UOgorICAgICAgICBid3JpdGUoIi0tLSBmaXh1cF9yZWZtb2RpbmRleGVzX2NodW5rKCVzKVxuIiAlIGNvbnRhaW5lcikKKyAgICBtb2R1bGVfZW50cmllcyA9IGZpbmRfYWxsX2VsZW1lbnRzKGNvbnRhaW5lciwgIm1vZHVsZSIpCisgICAgaWYgbm90IG1vZHVsZV9lbnRyaWVzOgorICAgICAgICByZXR1cm4KKyAgICBpbmRleF9lbnRyaWVzID0gZmluZF9hbGxfZWxlbWVudHNfZnJvbV9zZXQoY29udGFpbmVyLCBSRUZNT0RJTkRFWF9FTEVNRU5UUykKKyAgICByZW1vdmVzID0gW10KKyAgICBmb3IgZW50cnkgaW4gaW5kZXhfZW50cmllczoKKyAgICAgICAgY2hpbGRyZW4gPSBlbnRyeS5jaGlsZE5vZGVzCisgICAgICAgIGlmIGxlbihjaGlsZHJlbikgIT0gMDoKKyAgICAgICAgICAgIGJ3cml0ZSgiLS0tIHVuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoaWxkcmVuIGZvciAlcyBub2RlOlxuIgorICAgICAgICAgICAgICAgICAgICUgZW50cnkudGFnTmFtZSkKKyAgICAgICAgICAgIGV3cml0ZShlbnRyeS50b3htbCgpICsgIlxuIikKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZvdW5kID0gMAorICAgICAgICBtb2R1bGVfbmFtZSA9IGVudHJ5LmdldEF0dHJpYnV0ZSgibW9kdWxlIikKKyAgICAgICAgZm9yIG5vZGUgaW4gbW9kdWxlX2VudHJpZXM6CisgICAgICAgICAgICBpZiBsZW4obm9kZS5jaGlsZE5vZGVzKSAhPSAxOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0aGlzX25hbWUgPSBub2RlLmNoaWxkTm9kZXNbMF0uZGF0YQorICAgICAgICAgICAgaWYgdGhpc19uYW1lID09IG1vZHVsZV9uYW1lOgorICAgICAgICAgICAgICAgIGZvdW5kID0gMQorICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJpbmRleCIsICJ5ZXMiKQorICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgIHJlbW92ZXMuYXBwZW5kKGVudHJ5KQorICAgIGZvciBub2RlIGluIHJlbW92ZXM6CisgICAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChub2RlKQorCisKK2RlZiBmaXh1cF9iaWZ1bmNpbmRleGVzKGZyYWdtZW50KToKKyAgICBub2RlcyA9IGZpbmRfYWxsX2VsZW1lbnRzKGZyYWdtZW50LCAnYmlmdW5jaW5kZXgnKQorICAgIGQgPSB7fQorICAgICMgbWFrZSBzdXJlIHRoYXQgZWFjaCBwYXJlbnQgaXMgb25seSBwcm9jZXNzZWQgb25jZToKKyAgICBmb3Igbm9kZSBpbiBub2RlczoKKyAgICAgICAgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlCisgICAgICAgIGRbcGFyZW50Lm5vZGVfaWRdID0gcGFyZW50CisgICAgZGVsIG5vZGVzCisgICAgbWFwKGZpeHVwX2JpZnVuY2luZGV4ZXNfY2h1bmssIGQudmFsdWVzKCkpCisKKworZGVmIGZpeHVwX2JpZnVuY2luZGV4ZXNfY2h1bmsoY29udGFpbmVyKToKKyAgICByZW1vdmVzID0gW10KKyAgICBlbnRyaWVzID0gZmluZF9hbGxfY2hpbGRfZWxlbWVudHMoY29udGFpbmVyLCAiYmlmdW5jaW5kZXgiKQorICAgIGZ1bmN0aW9uX2VudHJpZXMgPSBmaW5kX2FsbF9jaGlsZF9lbGVtZW50cyhjb250YWluZXIsICJmdW5jdGlvbiIpCisgICAgZm9yIGVudHJ5IGluIGVudHJpZXM6CisgICAgICAgIGZ1bmN0aW9uX25hbWUgPSBlbnRyeS5nZXRBdHRyaWJ1dGUoIm5hbWUiKQorICAgICAgICBmb3VuZCA9IDAKKyAgICAgICAgZm9yIGZ1bmNfZW50cnkgaW4gZnVuY3Rpb25fZW50cmllczoKKyAgICAgICAgICAgIHQyID0gZnVuY19lbnRyeS5jaGlsZE5vZGVzWzBdLmRhdGEKKyAgICAgICAgICAgIGlmIHQyWy0yOl0gIT0gIigpIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdDIgPSB0Mls6LTJdCisgICAgICAgICAgICBpZiB0MiA9PSBmdW5jdGlvbl9uYW1lOgorICAgICAgICAgICAgICAgIGZ1bmNfZW50cnkuc2V0QXR0cmlidXRlKCJpbmRleCIsICJ5ZXMiKQorICAgICAgICAgICAgICAgIGZ1bmNfZW50cnkuc2V0QXR0cmlidXRlKCJtb2R1bGUiLCAiX19idWlsdGluX18iKQorICAgICAgICAgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAxCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZXMuYXBwZW5kKGVudHJ5KQorICAgIGZvciBlbnRyeSBpbiByZW1vdmVzOgorICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoZW50cnkpCisKKworZGVmIGpvaW5fYWRqYWNlbnRfZWxlbWVudHMoY29udGFpbmVyLCBnaSk6CisgICAgcXVldWUgPSBbY29udGFpbmVyXQorICAgIHdoaWxlIHF1ZXVlOgorICAgICAgICBwYXJlbnQgPSBxdWV1ZS5wb3AoKQorICAgICAgICBpID0gMAorICAgICAgICBjaGlsZHJlbiA9IHBhcmVudC5jaGlsZE5vZGVzCisgICAgICAgIG5jaGlsZHJlbiA9IGxlbihjaGlsZHJlbikKKyAgICAgICAgd2hpbGUgaSA8IChuY2hpbGRyZW4gLSAxKToKKyAgICAgICAgICAgIGNoaWxkID0gY2hpbGRyZW5baV0KKyAgICAgICAgICAgIGlmIGNoaWxkLm5vZGVOYW1lID09IGdpOgorICAgICAgICAgICAgICAgIGlmIGNoaWxkcmVuW2krMV0ubm9kZU5hbWUgPT0gZ2k6CisgICAgICAgICAgICAgICAgICAgIGV3cml0ZSgiLS0tIG1lcmdpbmcgdHdvIDwlcy8+IGVsZW1lbnRzXG4iICUgZ2kpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGRyZW5baV0KKyAgICAgICAgICAgICAgICAgICAgbmV4dGNoaWxkID0gY2hpbGRyZW5baSsxXQorICAgICAgICAgICAgICAgICAgICBuZXh0Y2hpbGRyZW4gPSBuZXh0Y2hpbGQuY2hpbGROb2RlcworICAgICAgICAgICAgICAgICAgICB3aGlsZSBsZW4obmV4dGNoaWxkcmVuKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBuZXh0Y2hpbGRyZW5bMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRjaGlsZC5yZW1vdmVDaGlsZChub2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuYXBwZW5kQ2hpbGQobm9kZSkKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKG5leHRjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGNoaWxkLm5vZGVUeXBlID09IEVMRU1FTlQ6CisgICAgICAgICAgICAgICAgcXVldWUuYXBwZW5kKGNoaWxkKQorICAgICAgICAgICAgaSA9IGkgKyAxCisKKworX3Rva2VuX3J4ID0gcmUuY29tcGlsZShyIlthLXpBLVpdW2EtekEtWjAtOS4tXSokIikKKworZGVmIHdyaXRlX2VzaXMoZG9jLCBvZnAsIGtub3duZW1wdHkpOgorICAgIGZvciBub2RlIGluIGRvYy5jaGlsZE5vZGVzOgorICAgICAgICBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGUKKyAgICAgICAgaWYgbm9kZVR5cGUgPT0gRUxFTUVOVDoKKyAgICAgICAgICAgIGdpID0gbm9kZS50YWdOYW1lCisgICAgICAgICAgICBpZiBrbm93bmVtcHR5KGdpKToKKyAgICAgICAgICAgICAgICBpZiBub2RlLmhhc0NoaWxkTm9kZXMoKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVjbGFyZWQtZW1wdHkgbm9kZSA8JXM+IGhhcyBjaGlsZHJlbiIgJSBnaQorICAgICAgICAgICAgICAgIG9mcC53cml0ZSgiZVxuIikKKyAgICAgICAgICAgIGZvciBrLCB2YWx1ZSBpbiBub2RlLmF0dHJpYnV0ZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBfdG9rZW5fcngubWF0Y2godmFsdWUpOgorICAgICAgICAgICAgICAgICAgICBkdHlwZSA9ICJUT0tFTiIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkdHlwZSA9ICJDREFUQSIKKyAgICAgICAgICAgICAgICBvZnAud3JpdGUoIkElcyAlcyAlc1xuIiAlIChrLCBkdHlwZSwgZXNpc3Rvb2xzLmVuY29kZSh2YWx1ZSkpKQorICAgICAgICAgICAgb2ZwLndyaXRlKCIoJXNcbiIgJSBnaSkKKyAgICAgICAgICAgIHdyaXRlX2VzaXMobm9kZSwgb2ZwLCBrbm93bmVtcHR5KQorICAgICAgICAgICAgb2ZwLndyaXRlKCIpJXNcbiIgJSBnaSkKKyAgICAgICAgZWxpZiBub2RlVHlwZSA9PSBURVhUOgorICAgICAgICAgICAgb2ZwLndyaXRlKCItJXNcbiIgJSBlc2lzdG9vbHMuZW5jb2RlKG5vZGUuZGF0YSkpCisgICAgICAgIGVsaWYgbm9kZVR5cGUgPT0gRU5USVRZX1JFRkVSRU5DRToKKyAgICAgICAgICAgIG9mcC53cml0ZSgiJiVzXG4iICUgbm9kZS5ub2RlTmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgInVuc3VwcG9ydGVkIG5vZGUgdHlwZTogJXMiICUgbm9kZVR5cGUKKworCitkZWYgY29udmVydChpZnAsIG9mcCk6CisgICAgZXZlbnRzID0gZXNpc3Rvb2xzLnBhcnNlKGlmcCkKKyAgICB0b2t0eXBlLCBkb2MgPSBldmVudHMuZ2V0RXZlbnQoKQorICAgIGZyYWdtZW50ID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQorICAgIGV2ZW50cy5leHBhbmROb2RlKGZyYWdtZW50KQorCisgICAgbm9ybWFsaXplKGZyYWdtZW50KQorICAgIHNpbXBsaWZ5KGRvYywgZnJhZ21lbnQpCisgICAgaGFuZGxlX2xhYmVscyhkb2MsIGZyYWdtZW50KQorICAgIGhhbmRsZV9hcHBlbmRpeChkb2MsIGZyYWdtZW50KQorICAgIGZpeHVwX3RyYWlsaW5nX3doaXRlc3BhY2UoZG9jLCB7CisgICAgICAgICJhYnN0cmFjdCI6ICJcbiIsCisgICAgICAgICJ0aXRsZSI6ICIiLAorICAgICAgICAiY2hhcHRlciI6ICJcblxuIiwKKyAgICAgICAgInNlY3Rpb24iOiAiXG5cbiIsCisgICAgICAgICJzdWJzZWN0aW9uIjogIlxuXG4iLAorICAgICAgICAic3Vic3Vic2VjdGlvbiI6ICJcblxuIiwKKyAgICAgICAgInBhcmFncmFwaCI6ICJcblxuIiwKKyAgICAgICAgInN1YnBhcmFncmFwaCI6ICJcblxuIiwKKyAgICAgICAgfSkKKyAgICBjbGVhbnVwX3Jvb3RfdGV4dChkb2MpCisgICAgY2xlYW51cF90cmFpbGluZ19wYXJlbnMoZnJhZ21lbnQsIFsiZnVuY3Rpb24iLCAibWV0aG9kIiwgImNmdW5jdGlvbiJdKQorICAgIGNsZWFudXBfc3lub3BzZXMoZG9jLCBmcmFnbWVudCkKKyAgICBmaXh1cF9kZXNjcmlwdG9ycyhkb2MsIGZyYWdtZW50KQorICAgIGZpeHVwX3ZlcmJhdGltcyhmcmFnbWVudCkKKyAgICBub3JtYWxpemUoZnJhZ21lbnQpCisgICAgZml4dXBfcGFyYXMoZG9jLCBmcmFnbWVudCkKKyAgICBmaXh1cF9zZWN0aW9uYXV0aG9ycyhkb2MsIGZyYWdtZW50KQorICAgIGZpeHVwX3RhYmxlX3N0cnVjdHVyZXMoZG9jLCBmcmFnbWVudCkKKyAgICBmaXh1cF9yZmNfcmVmZXJlbmNlcyhkb2MsIGZyYWdtZW50KQorICAgIGZpeHVwX3NpZ25hdHVyZXMoZG9jLCBmcmFnbWVudCkKKyAgICBhZGRfbm9kZV9pZHMoZnJhZ21lbnQpCisgICAgZml4dXBfcmVmbW9kaW5kZXhlcyhmcmFnbWVudCkKKyAgICBmaXh1cF9iaWZ1bmNpbmRleGVzKGZyYWdtZW50KQorICAgICMgVGFrZSBjYXJlIG9mIHVnbHkgaGFja3MgaW4gdGhlIExhVGVYIG1hcmt1cCB0byBhdm9pZCBMYVRlWCBhbmQKKyAgICAjIExhVGVYMkhUTUwgc2NyZXdpbmcgd2l0aCBHTlUtc3R5bGUgbG9uZyBvcHRpb25zICh0aGUgJy0tJyBwcm9ibGVtKS4KKyAgICBqb2luX2FkamFjZW50X2VsZW1lbnRzKGZyYWdtZW50LCAib3B0aW9uIikKKyAgICAjCisgICAgZCA9IHt9CisgICAgZm9yIGdpIGluIGV2ZW50cy5wYXJzZXIuZ2V0X2VtcHRpZXMoKToKKyAgICAgICAgZFtnaV0gPSBnaQorICAgIGlmIGQuaGFzX2tleSgiYXV0aG9yIik6CisgICAgICAgIGRlbCBkWyJhdXRob3IiXQorICAgIGlmIGQuaGFzX2tleSgicmZjIik6CisgICAgICAgIGRlbCBkWyJyZmMiXQorICAgIGtub3duZW1wdHkgPSBkLmhhc19rZXkKKyAgICAjCisgICAgdHJ5OgorICAgICAgICB3cml0ZV9lc2lzKGZyYWdtZW50LCBvZnAsIGtub3duZW1wdHkpCisgICAgZXhjZXB0IElPRXJyb3IsIChlcnIsIG1zZyk6CisgICAgICAgICMgSWdub3JlIEVQSVBFOyBpdCBqdXN0IG1lYW5zIHRoYXQgd2hvZXZlciB3ZSdyZSB3cml0aW5nIHRvIHN0b3BwZWQKKyAgICAgICAgIyByZWFkaW5nLiAgVGhlIHJlc3Qgb2YgdGhlIG91dHB1dCB3b3VsZCBiZSBpZ25vcmVkLiAgQWxsIG90aGVyIGVycm9ycworICAgICAgICAjIHNob3VsZCBzdGlsbCBiZSByZXBvcnRlZCwKKyAgICAgICAgaWYgZXJyICE9IGVycm5vLkVQSVBFOgorICAgICAgICAgICAgcmFpc2UKKworCitkZWYgbWFpbigpOgorICAgIGlmIGxlbihzeXMuYXJndikgPT0gMToKKyAgICAgICAgaWZwID0gc3lzLnN0ZGluCisgICAgICAgIG9mcCA9IHN5cy5zdGRvdXQKKyAgICBlbGlmIGxlbihzeXMuYXJndikgPT0gMjoKKyAgICAgICAgaWZwID0gb3BlbihzeXMuYXJndlsxXSkKKyAgICAgICAgb2ZwID0gc3lzLnN0ZG91dAorICAgIGVsaWYgbGVuKHN5cy5hcmd2KSA9PSAzOgorICAgICAgICBpZnAgPSBvcGVuKHN5cy5hcmd2WzFdKQorICAgICAgICBpbXBvcnQgU3RyaW5nSU8KKyAgICAgICAgb2ZwID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgIGVsc2U6CisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoMikKKyAgICBjb252ZXJ0KGlmcCwgb2ZwKQorICAgIGlmIGxlbihzeXMuYXJndikgPT0gMzoKKyAgICAgICAgZnAgPSBvcGVuKHN5cy5hcmd2WzJdLCAidyIpCisgICAgICAgIGZwLndyaXRlKG9mcC5nZXR2YWx1ZSgpKQorICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIG9mcC5jbG9zZSgpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2RvYy90b29scy9zZ21sY29udi9lc2lzMnNnbWwucHkgYi9kb2MvdG9vbHMvc2dtbGNvbnYvZXNpczJzZ21sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdiZGE5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvc2dtbGNvbnYvZXNpczJzZ21sLnB5CkBAIC0wLDAgKzEsMjYzIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyIiIkNvbnZlcnQgRVNJUyBldmVudHMgdG8gU0dNTCBvciBYTUwgbWFya3VwLgorCitUaGlzIGlzIGxpbWl0ZWQsIGJ1dCBzZWVtcyBzdWZmaWNpZW50IGZvciB0aGUgRVNJUyBnZW5lcmF0ZWQgYnkgdGhlCitsYXRleDJlc2lzLnB5IHNjcmlwdCB3aGVuIHJ1biBvdmVyIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbi4KKyIiIgorCisjIFRoaXMgc2hvdWxkIGhhdmUgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlICpJTlBVVCogd2FzCisjIGdlbmVyYXRlZCBmcm9tIGFuIFNHTUwgb3IgYW4gWE1MIGFwcGxpY2F0aW9uLgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBlc2lzdG9vbHMKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCisKK2Zyb20geG1sLnNheC5zYXh1dGlscyBpbXBvcnQgZXNjYXBlCisKKworQVVUT0NMT1NFID0gKCkKKworRU1QVElFU19GSUxFTkFNRSA9ICIuLi9zZ21sL2VtcHRpZXMuZGF0IgorTElTVF9FTVBUSUVTID0gMAorCisKK19lbGVtX21hcCA9IHt9CitfYXR0cl9tYXAgPSB7fQorX3Rva2VuX21hcCA9IHt9CisKK19ub3JtYWxpemVfY2FzZSA9IHN0cgorCitkZWYgbWFwX2dpKHNnbWxnaSwgbWFwKToKKyAgICB1bmNhc2VkID0gX25vcm1hbGl6ZV9jYXNlKHNnbWxnaSkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBtYXBbdW5jYXNlZF0KKyAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgbWFwW3VuY2FzZWRdID0gc2dtbGdpCisgICAgICAgIHJldHVybiBzZ21sZ2kKKworZGVmIG51bGxfbWFwX2dpKHNnbWxnaSwgbWFwKToKKyAgICByZXR1cm4gc2dtbGdpCisKKworZGVmIGZvcm1hdF9hdHRycyhhdHRycywgeG1sPTApOgorICAgIGF0dHJzID0gYXR0cnMuaXRlbXMoKQorICAgIGF0dHJzLnNvcnQoKQorICAgIHBhcnRzID0gW10KKyAgICBhcHBlbmQgPSBwYXJ0cy5hcHBlbmQKKyAgICBmb3IgbmFtZSwgdmFsdWUgaW4gYXR0cnM6CisgICAgICAgIGlmIHhtbDoKKyAgICAgICAgICAgIGFwcGVuZCgnJXM9IiVzIicgJSAobmFtZSwgZXNjYXBlKHZhbHVlKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHRoaXMgaXMgYSBsaXR0bGUgYm9ndXMsIGJ1dCBzaG91bGQgZG8gZm9yIG5vdworICAgICAgICAgICAgaWYgbmFtZSA9PSB2YWx1ZSBhbmQgaXNubXRva2VuKHZhbHVlKToKKyAgICAgICAgICAgICAgICBhcHBlbmQodmFsdWUpCisgICAgICAgICAgICBlbGlmIGlzdG9rZW4odmFsdWUpOgorICAgICAgICAgICAgICAgIGlmIHZhbHVlID09ICJubyIgKyBuYW1lOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQodmFsdWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKCIlcz0lcyIgJSAobmFtZSwgdmFsdWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhcHBlbmQoJyVzPSIlcyInICUgKG5hbWUsIGVzY2FwZSh2YWx1ZSkpKQorICAgIGlmIHBhcnRzOgorICAgICAgICBwYXJ0cy5pbnNlcnQoMCwgJycpCisgICAgcmV0dXJuIHN0cmluZy5qb2luKHBhcnRzKQorCisKK19ubXRva2VuX3J4ID0gcmUuY29tcGlsZSgiW2Etel1bLS5fYS16MC05XSokIiwgcmUuSUdOT1JFQ0FTRSkKK2RlZiBpc25tdG9rZW4ocyk6CisgICAgcmV0dXJuIF9ubXRva2VuX3J4Lm1hdGNoKHMpIGlzIG5vdCBOb25lCisKK190b2tlbl9yeCA9IHJlLmNvbXBpbGUoIlthLXowLTldWy0uX2EtejAtOV0qJCIsIHJlLklHTk9SRUNBU0UpCitkZWYgaXN0b2tlbihzKToKKyAgICByZXR1cm4gX3Rva2VuX3J4Lm1hdGNoKHMpIGlzIG5vdCBOb25lCisKKworZGVmIGNvbnZlcnQoaWZwLCBvZnAsIHhtbD0wLCBhdXRvY2xvc2U9KCksIHZlcmJhdGltcz0oKSk6CisgICAgaWYgeG1sOgorICAgICAgICBhdXRvY2xvc2UgPSAoKQorICAgIGF0dHJzID0ge30KKyAgICBsYXN0b3BlbmVkID0gTm9uZQorICAgIGtub3duZW1wdGllcyA9IFtdCisgICAga25vd25lbXB0eSA9IDAKKyAgICBsYXN0ZW1wdHkgPSAwCisgICAgaW52ZXJiYXRpbSA9IDAKKyAgICB3aGlsZSAxOgorICAgICAgICBsaW5lID0gaWZwLnJlYWRsaW5lKCkKKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICBicmVhaworCisgICAgICAgIHR5cGUgPSBsaW5lWzBdCisgICAgICAgIGRhdGEgPSBsaW5lWzE6XQorICAgICAgICBpZiBkYXRhIGFuZCBkYXRhWy0xXSA9PSAiXG4iOgorICAgICAgICAgICAgZGF0YSA9IGRhdGFbOi0xXQorICAgICAgICBpZiB0eXBlID09ICItIjoKKyAgICAgICAgICAgIGRhdGEgPSBlc2lzdG9vbHMuZGVjb2RlKGRhdGEpCisgICAgICAgICAgICBkYXRhID0gZXNjYXBlKGRhdGEpCisgICAgICAgICAgICBpZiBub3QgaW52ZXJiYXRpbToKKyAgICAgICAgICAgICAgICBkYXRhID0gc3RyaW5nLnJlcGxhY2UoZGF0YSwgIi0tLSIsICImbWRhc2g7IikKKyAgICAgICAgICAgIG9mcC53cml0ZShkYXRhKQorICAgICAgICAgICAgaWYgIlxuIiBpbiBkYXRhOgorICAgICAgICAgICAgICAgIGxhc3RvcGVuZWQgPSBOb25lCisgICAgICAgICAgICBrbm93bmVtcHR5ID0gMAorICAgICAgICAgICAgbGFzdGVtcHR5ID0gMAorICAgICAgICBlbGlmIHR5cGUgPT0gIigiOgorICAgICAgICAgICAgaWYgZGF0YSA9PSAiQ09NTUVOVCI6CisgICAgICAgICAgICAgICAgb2ZwLndyaXRlKCI8IS0tIikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZGF0YSA9IG1hcF9naShkYXRhLCBfZWxlbV9tYXApCisgICAgICAgICAgICBpZiBrbm93bmVtcHR5IGFuZCB4bWw6CisgICAgICAgICAgICAgICAgb2ZwLndyaXRlKCI8JXMlcy8+IiAlIChkYXRhLCBmb3JtYXRfYXR0cnMoYXR0cnMsIHhtbCkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvZnAud3JpdGUoIjwlcyVzPiIgJSAoZGF0YSwgZm9ybWF0X2F0dHJzKGF0dHJzLCB4bWwpKSkKKyAgICAgICAgICAgIGlmIGtub3duZW1wdHkgYW5kIGRhdGEgbm90IGluIGtub3duZW1wdGllczoKKyAgICAgICAgICAgICAgICAjIGFjY3VtdWxhdGUga25vd2xlZGdlIQorICAgICAgICAgICAgICAgIGtub3duZW1wdGllcy5hcHBlbmQoZGF0YSkKKyAgICAgICAgICAgIGF0dHJzID0ge30KKyAgICAgICAgICAgIGxhc3RvcGVuZWQgPSBkYXRhCisgICAgICAgICAgICBsYXN0ZW1wdHkgPSBrbm93bmVtcHR5CisgICAgICAgICAgICBrbm93bmVtcHR5ID0gMAorICAgICAgICAgICAgaW52ZXJiYXRpbSA9IGRhdGEgaW4gdmVyYmF0aW1zCisgICAgICAgIGVsaWYgdHlwZSA9PSAiKSI6CisgICAgICAgICAgICBpZiBkYXRhID09ICJDT01NRU5UIjoKKyAgICAgICAgICAgICAgICBvZnAud3JpdGUoIi0tPiIpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGRhdGEgPSBtYXBfZ2koZGF0YSwgX2VsZW1fbWFwKQorICAgICAgICAgICAgaWYgeG1sOgorICAgICAgICAgICAgICAgIGlmIG5vdCBsYXN0ZW1wdHk6CisgICAgICAgICAgICAgICAgICAgIG9mcC53cml0ZSgiPC8lcz4iICUgZGF0YSkKKyAgICAgICAgICAgIGVsaWYgZGF0YSBub3QgaW4ga25vd25lbXB0aWVzOgorICAgICAgICAgICAgICAgIGlmIGRhdGEgaW4gYXV0b2Nsb3NlOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxpZiBsYXN0b3BlbmVkID09IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIG9mcC53cml0ZSgiPC8+IikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvZnAud3JpdGUoIjwvJXM+IiAlIGRhdGEpCisgICAgICAgICAgICBsYXN0b3BlbmVkID0gTm9uZQorICAgICAgICAgICAgbGFzdGVtcHR5ID0gMAorICAgICAgICAgICAgaW52ZXJiYXRpbSA9IDAKKyAgICAgICAgZWxpZiB0eXBlID09ICJBIjoKKyAgICAgICAgICAgIG5hbWUsIHR5cGUsIHZhbHVlID0gc3RyaW5nLnNwbGl0KGRhdGEsICIgIiwgMikKKyAgICAgICAgICAgIG5hbWUgPSBtYXBfZ2kobmFtZSwgX2F0dHJfbWFwKQorICAgICAgICAgICAgYXR0cnNbbmFtZV0gPSBlc2lzdG9vbHMuZGVjb2RlKHZhbHVlKQorICAgICAgICBlbGlmIHR5cGUgPT0gImUiOgorICAgICAgICAgICAga25vd25lbXB0eSA9IDEKKyAgICAgICAgZWxpZiB0eXBlID09ICImIjoKKyAgICAgICAgICAgIG9mcC53cml0ZSgiJiVzOyIgJSBkYXRhKQorICAgICAgICAgICAga25vd25lbXB0eSA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgInVucmVjb2duaXplZCBFU0lTIGV2ZW50IHR5cGU6ICclcyciICUgdHlwZQorCisgICAgaWYgTElTVF9FTVBUSUVTOgorICAgICAgICBkdW1wX2VtcHR5X2VsZW1lbnRfbmFtZXMoa25vd25lbXB0aWVzKQorCisKK2RlZiBkdW1wX2VtcHR5X2VsZW1lbnRfbmFtZXMoa25vd25lbXB0aWVzKToKKyAgICBkID0ge30KKyAgICBmb3IgZ2kgaW4ga25vd25lbXB0aWVzOgorICAgICAgICBkW2dpXSA9IGdpCisgICAga25vd25lbXB0aWVzLmFwcGVuZCgiIikKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShFTVBUSUVTX0ZJTEVOQU1FKToKKyAgICAgICAgZnAgPSBvcGVuKEVNUFRJRVNfRklMRU5BTUUpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGdpID0gc3RyaW5nLnN0cmlwKGxpbmUpCisgICAgICAgICAgICBpZiBnaToKKyAgICAgICAgICAgICAgICBkW2dpXSA9IGdpCisgICAgZnAgPSBvcGVuKEVNUFRJRVNfRklMRU5BTUUsICJ3IikKKyAgICBnaWxpc3QgPSBkLmtleXMoKQorICAgIGdpbGlzdC5zb3J0KCkKKyAgICBmcC53cml0ZShzdHJpbmcuam9pbihnaWxpc3QsICJcbiIpKQorICAgIGZwLndyaXRlKCJcbiIpCisgICAgZnAuY2xvc2UoKQorCisKK2RlZiB1cGRhdGVfZ2lfbWFwKG1hcCwgbmFtZXMsIGZyb21zZ21sPTEpOgorICAgIGZvciBuYW1lIGluIHN0cmluZy5zcGxpdChuYW1lcywgIiwiKToKKyAgICAgICAgaWYgZnJvbXNnbWw6CisgICAgICAgICAgICB1bmNhc2VkID0gc3RyaW5nLmxvd2VyKG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1bmNhc2VkID0gbmFtZQorICAgICAgICBtYXBbdW5jYXNlZF0gPSBuYW1lCisKKworZGVmIG1haW4oKToKKyAgICBpbXBvcnQgZ2V0b3B0CisgICAgaW1wb3J0IHN5cworICAgICMKKyAgICBhdXRvY2xvc2UgPSBBVVRPQ0xPU0UKKyAgICB4bWwgPSAxCisgICAgeG1sZGVjbCA9IDAKKyAgICBlbGVtX25hbWVzID0gJycKKyAgICBhdHRyX25hbWVzID0gJycKKyAgICB2YWx1ZV9uYW1lcyA9ICcnCisgICAgdmVyYmF0aW1zID0gKCd2ZXJiYXRpbScsICdpbnRlcmFjdGl2ZS1zZXNzaW9uJykKKyAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJhZGVzeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJhdXRvY2xvc2U9IiwgImRlY2xhcmUiLCAic2dtbCIsICJ4bWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudHMtbWFwPSIsICJhdHRyaWJ1dGVzLW1hcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZXMtbWFwPSJdKQorICAgIGZvciBvcHQsIGFyZyBpbiBvcHRzOgorICAgICAgICBpZiBvcHQgaW4gKCItZCIsICItLWRlY2xhcmUiKToKKyAgICAgICAgICAgIHhtbGRlY2wgPSAxCisgICAgICAgIGVsaWYgb3B0ID09ICItZSI6CisgICAgICAgICAgICBnbG9iYWwgTElTVF9FTVBUSUVTCisgICAgICAgICAgICBMSVNUX0VNUFRJRVMgPSAxCisgICAgICAgIGVsaWYgb3B0IGluICgiLXMiLCAiLS1zZ21sIik6CisgICAgICAgICAgICB4bWwgPSAwCisgICAgICAgIGVsaWYgb3B0IGluICgiLXgiLCAiLS14bWwiKToKKyAgICAgICAgICAgIHhtbCA9IDEKKyAgICAgICAgZWxpZiBvcHQgaW4gKCItYSIsICItLWF1dG9jbG9zZSIpOgorICAgICAgICAgICAgYXV0b2Nsb3NlID0gc3RyaW5nLnNwbGl0KGFyZywgIiwiKQorICAgICAgICBlbGlmIG9wdCA9PSAiLS1lbGVtZW50cy1tYXAiOgorICAgICAgICAgICAgZWxlbV9uYW1lcyA9ICgiJXMsJXMiICUgKGVsZW1fbmFtZXMsIGFyZykpWzE6XQorICAgICAgICBlbGlmIG9wdCA9PSAiLS1hdHRyaWJ1dGVzLW1hcCI6CisgICAgICAgICAgICBhdHRyX25hbWVzID0gKCIlcywlcyIgJSAoYXR0cl9uYW1lcywgYXJnKSlbMTpdCisgICAgICAgIGVsaWYgb3B0ID09ICItLXZhbHVlcy1tYXAiOgorICAgICAgICAgICAgdmFsdWVfbmFtZXMgPSAoIiVzLCVzIiAlICh2YWx1ZV9uYW1lcywgYXJnKSlbMTpdCisgICAgIworICAgICMgb3BlbiBpbnB1dCBzdHJlYW1zOgorICAgICMKKyAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgaWZwID0gc3lzLnN0ZGluCisgICAgICAgIG9mcCA9IHN5cy5zdGRvdXQKKyAgICBlbGlmIGxlbihhcmdzKSA9PSAxOgorICAgICAgICBpZnAgPSBvcGVuKGFyZ3NbMF0pCisgICAgICAgIG9mcCA9IHN5cy5zdGRvdXQKKyAgICBlbGlmIGxlbihhcmdzKSA9PSAyOgorICAgICAgICBpZnAgPSBvcGVuKGFyZ3NbMF0pCisgICAgICAgIG9mcCA9IG9wZW4oYXJnc1sxXSwgInciKQorICAgIGVsc2U6CisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoMikKKyAgICAjCisgICAgIyBzZXR1cCB0aGUgbmFtZSBtYXBzOgorICAgICMKKyAgICBpZiBlbGVtX25hbWVzIG9yIGF0dHJfbmFtZXMgb3IgdmFsdWVfbmFtZXM6CisgICAgICAgICMgYXNzdW1lIHRoZSBvcmlnaW4gd2FzIFNHTUw7IGlnbm9yZSBjYXNlIG9mIHRoZSBuYW1lcyBmcm9tIHRoZSBFU0lTCisgICAgICAgICMgc3RyZWFtIGJ1dCBzZXQgdXAgY29udmVyc2lvbiB0YWJsZXMgdG8gZ2V0IHRoZSBjYXNlIHJpZ2h0IG9uIG91dHB1dAorICAgICAgICBnbG9iYWwgX25vcm1hbGl6ZV9jYXNlCisgICAgICAgIF9ub3JtYWxpemVfY2FzZSA9IHN0cmluZy5sb3dlcgorICAgICAgICB1cGRhdGVfZ2lfbWFwKF9lbGVtX21hcCwgc3RyaW5nLnNwbGl0KGVsZW1fbmFtZXMsICIsIikpCisgICAgICAgIHVwZGF0ZV9naV9tYXAoX2F0dHJfbWFwLCBzdHJpbmcuc3BsaXQoYXR0cl9uYW1lcywgIiwiKSkKKyAgICAgICAgdXBkYXRlX2dpX21hcChfdmFsdWVzX21hcCwgc3RyaW5nLnNwbGl0KHZhbHVlX25hbWVzLCAiLCIpKQorICAgIGVsc2U6CisgICAgICAgIGdsb2JhbCBtYXBfZ2kKKyAgICAgICAgbWFwX2dpID0gbnVsbF9tYXBfZ2kKKyAgICAjCisgICAgIyBydW4gdGhlIGNvbnZlcnNpb246CisgICAgIworICAgIHRyeToKKyAgICAgICAgaWYgeG1sIGFuZCB4bWxkZWNsOgorICAgICAgICAgICAgb3BmLndyaXRlKCc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJpc284ODU5LTEiPz5cbicpCisgICAgICAgIGNvbnZlcnQoaWZwLCBvZnAsIHhtbD14bWwsIGF1dG9jbG9zZT1hdXRvY2xvc2UsIHZlcmJhdGltcz12ZXJiYXRpbXMpCisgICAgZXhjZXB0IElPRXJyb3IsIChlcnIsIG1zZyk6CisgICAgICAgIGlmIGVyciAhPSBlcnJuby5FUElQRToKKyAgICAgICAgICAgIHJhaXNlCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2RvYy90b29scy9zZ21sY29udi9lc2lzdG9vbHMucHkgYi9kb2MvdG9vbHMvc2dtbGNvbnYvZXNpc3Rvb2xzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5M2FmNzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvc2dtbGNvbnYvZXNpc3Rvb2xzLnB5CkBAIC0wLDAgKzEsMzA5IEBACisiIiJNaXNjZWxsYW5lb3VzIHV0aWxpdHkgZnVuY3Rpb25zIHVzZWZ1bCBmb3IgZGVhbGluZyB3aXRoIEVTSVMgc3RyZWFtcy4iIiIKKworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCisKK2ltcG9ydCB4bWwuZG9tLnB1bGxkb20KKworaW1wb3J0IHhtbC5zYXgKK2ltcG9ydCB4bWwuc2F4LmhhbmRsZXIKK2ltcG9ydCB4bWwuc2F4LnhtbHJlYWRlcgorCisKK19kYXRhX21hdGNoID0gcmUuY29tcGlsZShyIlteXFxdW15cXF0qIikubWF0Y2gKKworZGVmIGRlY29kZShzKToKKyAgICByID0gJycKKyAgICB3aGlsZSBzOgorICAgICAgICBtID0gX2RhdGFfbWF0Y2gocykKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHIgPSByICsgbS5ncm91cCgpCisgICAgICAgICAgICBzID0gc1ttLmVuZCgpOl0KKyAgICAgICAgZWxpZiBzWzFdID09ICJcXCI6CisgICAgICAgICAgICByID0gciArICJcXCIKKyAgICAgICAgICAgIHMgPSBzWzI6XQorICAgICAgICBlbGlmIHNbMV0gPT0gIm4iOgorICAgICAgICAgICAgciA9IHIgKyAiXG4iCisgICAgICAgICAgICBzID0gc1syOl0KKyAgICAgICAgZWxpZiBzWzFdID09ICIlIjoKKyAgICAgICAgICAgIHMgPSBzWzI6XQorICAgICAgICAgICAgbiwgcyA9IHMuc3BsaXQoIjsiLCAxKQorICAgICAgICAgICAgciA9IHIgKyB1bmljaHIoaW50KG4pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgImNhbid0IGhhbmRsZSAiICsgYHNgCisgICAgcmV0dXJuIHIKKworCitfY2hhcm1hcCA9IHt9Citmb3IgYyBpbiBtYXAoY2hyLCByYW5nZSgyNTYpKToKKyAgICBfY2hhcm1hcFtjXSA9IGMKK19jaGFybWFwWyJcbiJdID0gciJcbiIKK19jaGFybWFwWyJcXCJdID0gciJcXCIKK2RlbCBjCisKK19udWxsX2pvaW4gPSAnJy5qb2luCitkZWYgZW5jb2RlKHMpOgorICAgIHJldHVybiBfbnVsbF9qb2luKG1hcChfY2hhcm1hcC5nZXQsIHMpKQorCisKK2NsYXNzIEVTSVNSZWFkZXIoeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyKToKKyAgICAiIiJTQVggUmVhZGVyIHdoaWNoIHJlYWRzIGZyb20gYW4gRVNJUyBzdHJlYW0uCisKKyAgICBObyB2ZXJpZmljYXRpb24gb2YgdGhlIGRvY3VtZW50IHN0cnVjdHVyZSBpcyBwZXJmb3JtZWQgYnkgdGhlCisgICAgcmVhZGVyOyBhIGdlbmVyYWwgdmVyaWZpZXIgY291bGQgYmUgdXNlZCBhcyB0aGUgdGFyZ2V0CisgICAgQ29udGVudEhhbmRsZXIgaW5zdGFuY2UuCisKKyAgICAiIiIKKyAgICBfZGVjbF9oYW5kbGVyID0gTm9uZQorICAgIF9sZXhpY2FsX2hhbmRsZXIgPSBOb25lCisKKyAgICBfcHVibGljX2lkID0gTm9uZQorICAgIF9zeXN0ZW1faWQgPSBOb25lCisKKyAgICBfYnVmZmVyID0gIiIKKyAgICBfaXNfZW1wdHkgPSAwCisgICAgX2xpbmVubyA9IDAKKyAgICBfc3RhcnRlZCA9IDAKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZW50SGFuZGxlcj1Ob25lLCBlcnJvckhhbmRsZXI9Tm9uZSk6CisgICAgICAgIHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9hdHRycyA9IHt9CisgICAgICAgIHNlbGYuX2F0dHJpYnV0ZXMgPSBBdHRyaWJ1dGVzKHNlbGYuX2F0dHJzKQorICAgICAgICBzZWxmLl9sb2NhdG9yID0gTG9jYXRvcigpCisgICAgICAgIHNlbGYuX2VtcHRpZXMgPSB7fQorICAgICAgICBpZiBjb250ZW50SGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYuc2V0Q29udGVudEhhbmRsZXIoY29udGVudEhhbmRsZXIpCisgICAgICAgIGlmIGVycm9ySGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYuc2V0RXJyb3JIYW5kbGVyKGVycm9ySGFuZGxlcikKKworICAgIGRlZiBnZXRfZW1wdGllcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2VtcHRpZXMua2V5cygpCisKKyAgICAjCisgICAgIyAgWE1MUmVhZGVyIGludGVyZmFjZQorICAgICMKKworICAgIGRlZiBwYXJzZShzZWxmLCBzb3VyY2UpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgc2VsZi5fbG9jYXRvci5fcHVibGljX2lkID0gc291cmNlLmdldFB1YmxpY0lkKCkKKyAgICAgICAgc2VsZi5fbG9jYXRvci5fc3lzdGVtX2lkID0gc291cmNlLmdldFN5c3RlbUlkKCkKKyAgICAgICAgZnAgPSBzb3VyY2UuZ2V0Qnl0ZVN0cmVhbSgpCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLmdldENvbnRlbnRIYW5kbGVyKCkKKyAgICAgICAgaWYgaGFuZGxlcjoKKyAgICAgICAgICAgIGhhbmRsZXIuc3RhcnREb2N1bWVudCgpCisgICAgICAgIGxpbmVubyA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRva2VuLCBkYXRhID0gc2VsZi5fZ2V0X3Rva2VuKGZwKQorICAgICAgICAgICAgaWYgdG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbGluZW5vID0gbGluZW5vICsgMQorICAgICAgICAgICAgc2VsZi5fbG9jYXRvci5fbGluZW5vID0gbGluZW5vCisgICAgICAgICAgICBzZWxmLl9oYW5kbGVfdG9rZW4odG9rZW4sIGRhdGEpCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLmdldENvbnRlbnRIYW5kbGVyKCkKKyAgICAgICAgaWYgaGFuZGxlcjoKKyAgICAgICAgICAgIGhhbmRsZXIuc3RhcnREb2N1bWVudCgpCisKKyAgICBkZWYgZmVlZChzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3N0YXJ0ZWQ6CisgICAgICAgICAgICBoYW5kbGVyID0gc2VsZi5nZXRDb250ZW50SGFuZGxlcigpCisgICAgICAgICAgICBpZiBoYW5kbGVyOgorICAgICAgICAgICAgICAgIGhhbmRsZXIuc3RhcnREb2N1bWVudCgpCisgICAgICAgICAgICBzZWxmLl9zdGFydGVkID0gMQorICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyICsgZGF0YQorICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgIGxpbmVzID0gZGF0YS5zcGxpdCgiXG4iKQorICAgICAgICBpZiBsaW5lczoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzWzotMV06CisgICAgICAgICAgICAgICAgc2VsZi5fbGluZW5vID0gc2VsZi5fbGluZW5vICsgMQorICAgICAgICAgICAgICAgIHNlbGYuX2xvY2F0b3IuX2xpbmVubyA9IHNlbGYuX2xpbmVubworICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICBlID0geG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJFU0lTIGlucHV0IGxpbmUgY29udGFpbnMgbm8gdG9rZW4gdHlwZSBtYXJrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIHNlbGYuX2xvY2F0b3IpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0RXJyb3JIYW5kbGVyKCkuZXJyb3IoZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfdG9rZW4obGluZVswXSwgbGluZVsxOl0pCisgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBsaW5lc1stMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9ICIiCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGhhbmRsZXIgPSBzZWxmLmdldENvbnRlbnRIYW5kbGVyKCkKKyAgICAgICAgaWYgaGFuZGxlcjoKKyAgICAgICAgICAgIGhhbmRsZXIuZW5kRG9jdW1lbnQoKQorICAgICAgICBzZWxmLl9idWZmZXIgPSAiIgorCisgICAgZGVmIF9nZXRfdG9rZW4oc2VsZiwgZnApOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIGUgPSBTQVhFeGNlcHRpb24oIkkvTyBlcnJvciByZWFkaW5nIGlucHV0IHN0cmVhbSIsIGUpCisgICAgICAgICAgICBzZWxmLmdldEVycm9ySGFuZGxlcigpLmZhdGFsRXJyb3IoZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCisgICAgICAgIGlmIGxpbmVbLTFdID09ICJcbiI6CisgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgZSA9IHhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkVTSVMgaW5wdXQgbGluZSBjb250YWlucyBubyB0b2tlbiB0eXBlIG1hcmsiLAorICAgICAgICAgICAgICAgIE5vbmUsIHNlbGYuX2xvY2F0b3IpCisgICAgICAgICAgICBzZWxmLmdldEVycm9ySGFuZGxlcigpLmVycm9yKGUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmV0dXJuIGxpbmVbMF0sIGxpbmVbMTpdCisKKyAgICBkZWYgX2hhbmRsZV90b2tlbihzZWxmLCB0b2tlbiwgZGF0YSk6CisgICAgICAgIGhhbmRsZXIgPSBzZWxmLmdldENvbnRlbnRIYW5kbGVyKCkKKyAgICAgICAgaWYgdG9rZW4gPT0gJy0nOgorICAgICAgICAgICAgaWYgZGF0YSBhbmQgaGFuZGxlcjoKKyAgICAgICAgICAgICAgICBoYW5kbGVyLmNoYXJhY3RlcnMoZGVjb2RlKGRhdGEpKQorICAgICAgICBlbGlmIHRva2VuID09ICcpJzoKKyAgICAgICAgICAgIGlmIGhhbmRsZXI6CisgICAgICAgICAgICAgICAgaGFuZGxlci5lbmRFbGVtZW50KGRlY29kZShkYXRhKSkKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAnKCc6CisgICAgICAgICAgICBpZiBzZWxmLl9pc19lbXB0eToKKyAgICAgICAgICAgICAgICBzZWxmLl9lbXB0aWVzW2RhdGFdID0gMQorICAgICAgICAgICAgaWYgaGFuZGxlcjoKKyAgICAgICAgICAgICAgICBoYW5kbGVyLnN0YXJ0RWxlbWVudChkYXRhLCBzZWxmLl9hdHRyaWJ1dGVzKQorICAgICAgICAgICAgc2VsZi5fYXR0cnMuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5faXNfZW1wdHkgPSAwCisgICAgICAgIGVsaWYgdG9rZW4gPT0gJ0EnOgorICAgICAgICAgICAgbmFtZSwgdmFsdWUgPSBkYXRhLnNwbGl0KCcgJywgMSkKKyAgICAgICAgICAgIGlmIHZhbHVlICE9ICJJTVBMSUVEIjoKKyAgICAgICAgICAgICAgICB0eXBlLCB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcgJywgMSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hdHRyc1tuYW1lXSA9IChkZWNvZGUodmFsdWUpLCB0eXBlKQorICAgICAgICBlbGlmIHRva2VuID09ICcmJzoKKyAgICAgICAgICAgICMgZW50aXR5IHJlZmVyZW5jZSBpbiBTQVg/CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsaWYgdG9rZW4gPT0gJz8nOgorICAgICAgICAgICAgaWYgaGFuZGxlcjoKKyAgICAgICAgICAgICAgICBpZiAnICcgaW4gZGF0YToKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBkYXRhID0gc3RyaW5nLnNwbGl0KGRhdGEsIE5vbmUsIDEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBkYXRhID0gZGF0YSwgIiIKKyAgICAgICAgICAgICAgICBoYW5kbGVyLnByb2Nlc3NpbmdJbnN0cnVjdGlvbih0YXJnZXQsIGRlY29kZShkYXRhKSkKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAnTic6CisgICAgICAgICAgICBoYW5kbGVyID0gc2VsZi5nZXREVERIYW5kbGVyKCkKKyAgICAgICAgICAgIGlmIGhhbmRsZXI6CisgICAgICAgICAgICAgICAgaGFuZGxlci5ub3RhdGlvbkRlY2woZGF0YSwgc2VsZi5fcHVibGljX2lkLCBzZWxmLl9zeXN0ZW1faWQpCisgICAgICAgICAgICBzZWxmLl9wdWJsaWNfaWQgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9zeXN0ZW1faWQgPSBOb25lCisgICAgICAgIGVsaWYgdG9rZW4gPT0gJ3AnOgorICAgICAgICAgICAgc2VsZi5fcHVibGljX2lkID0gZGVjb2RlKGRhdGEpCisgICAgICAgIGVsaWYgdG9rZW4gPT0gJ3MnOgorICAgICAgICAgICAgc2VsZi5fc3lzdGVtX2lkID0gZGVjb2RlKGRhdGEpCisgICAgICAgIGVsaWYgdG9rZW4gPT0gJ2UnOgorICAgICAgICAgICAgc2VsZi5faXNfZW1wdHkgPSAxCisgICAgICAgIGVsaWYgdG9rZW4gPT0gJ0MnOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZSA9IFNBWFBhcnNlRXhjZXB0aW9uKCJ1bmtub3duIEVTSVMgdG9rZW4gaW4gZXZlbnQgc3RyZWFtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBzZWxmLl9sb2NhdG9yKQorICAgICAgICAgICAgc2VsZi5nZXRFcnJvckhhbmRsZXIoKS5lcnJvcihlKQorCisgICAgZGVmIHNldENvbnRlbnRIYW5kbGVyKHNlbGYsIGhhbmRsZXIpOgorICAgICAgICBvbGQgPSBzZWxmLmdldENvbnRlbnRIYW5kbGVyKCkKKyAgICAgICAgaWYgb2xkOgorICAgICAgICAgICAgb2xkLnNldERvY3VtZW50TG9jYXRvcihOb25lKQorICAgICAgICBpZiBoYW5kbGVyOgorICAgICAgICAgICAgaGFuZGxlci5zZXREb2N1bWVudExvY2F0b3Ioc2VsZi5fbG9jYXRvcikKKyAgICAgICAgeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKHNlbGYsIGhhbmRsZXIpCisKKyAgICBkZWYgZ2V0UHJvcGVydHkoc2VsZiwgcHJvcGVydHkpOgorICAgICAgICBpZiBwcm9wZXJ0eSA9PSB4bWwuc2F4LmhhbmRsZXIucHJvcGVydHlfbGV4aWNhbF9oYW5kbGVyOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xleGljYWxfaGFuZGxlcgorCisgICAgICAgIGVsaWYgcHJvcGVydHkgPT0geG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X2RlY2xhcmF0aW9uX2hhbmRsZXI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVjbF9oYW5kbGVyCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIHhtbC5zYXguU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbigidW5rbm93biBwcm9wZXJ0eSAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGBwcm9wZXJ0eWApCisKKyAgICBkZWYgc2V0UHJvcGVydHkoc2VsZiwgcHJvcGVydHksIHZhbHVlKToKKyAgICAgICAgaWYgcHJvcGVydHkgPT0geG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X2xleGljYWxfaGFuZGxlcjoKKyAgICAgICAgICAgIGlmIHNlbGYuX2xleGljYWxfaGFuZGxlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9sZXhpY2FsX2hhbmRsZXIuc2V0RG9jdW1lbnRMb2NhdG9yKE5vbmUpCisgICAgICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgICAgICB2YWx1ZS5zZXREb2N1bWVudExvY2F0b3Ioc2VsZi5fbG9jYXRvcikKKyAgICAgICAgICAgIHNlbGYuX2xleGljYWxfaGFuZGxlciA9IHZhbHVlCisKKyAgICAgICAgZWxpZiBwcm9wZXJ0eSA9PSB4bWwuc2F4LmhhbmRsZXIucHJvcGVydHlfZGVjbGFyYXRpb25faGFuZGxlcjoKKyAgICAgICAgICAgIGlmIHNlbGYuX2RlY2xfaGFuZGxlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9kZWNsX2hhbmRsZXIuc2V0RG9jdW1lbnRMb2NhdG9yKE5vbmUpCisgICAgICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgICAgICB2YWx1ZS5zZXREb2N1bWVudExvY2F0b3Ioc2VsZi5fbG9jYXRvcikKKyAgICAgICAgICAgIHNlbGYuX2RlY2xfaGFuZGxlciA9IHZhbHVlCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIHhtbC5zYXguU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbigpCisKKyAgICBkZWYgZ2V0RmVhdHVyZShzZWxmLCBmZWF0dXJlKToKKyAgICAgICAgaWYgZmVhdHVyZSA9PSB4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV9uYW1lc3BhY2VzOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuZ2V0RmVhdHVyZShzZWxmLCBmZWF0dXJlKQorCisgICAgZGVmIHNldEZlYXR1cmUoc2VsZiwgZmVhdHVyZSwgZW5hYmxlZCk6CisgICAgICAgIGlmIGZlYXR1cmUgPT0geG1sLnNheC5oYW5kbGVyLmZlYXR1cmVfbmFtZXNwYWNlczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRGZWF0dXJlKHNlbGYsIGZlYXR1cmUsIGVuYWJsZWQpCisKKworY2xhc3MgQXR0cmlidXRlcyh4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzSW1wbCk6CisgICAgIyBzZWxmLl9hdHRycyBoYXMgdGhlIGZvcm0ge25hbWU6ICh2YWx1ZSwgdHlwZSl9CisKKyAgICBkZWYgZ2V0VHlwZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2F0dHJzW25hbWVdWzFdCisKKyAgICBkZWYgZ2V0VmFsdWUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9hdHRyc1tuYW1lXVswXQorCisgICAgZGVmIGdldFZhbHVlQnlRTmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2F0dHJzW25hbWVdWzBdCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9hdHRyc1tuYW1lXVswXQorCisgICAgZGVmIGdldChzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICBpZiBzZWxmLl9hdHRycy5oYXNfa2V5KG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2F0dHJzW25hbWVdWzBdCisgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgIEwgPSBbXQorICAgICAgICBmb3IgbmFtZSwgKHZhbHVlLCB0eXBlKSBpbiBzZWxmLl9hdHRycy5pdGVtcygpOgorICAgICAgICAgICAgTC5hcHBlbmQoKG5hbWUsIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIEwKKworICAgIGRlZiB2YWx1ZXMoc2VsZik6CisgICAgICAgIEwgPSBbXQorICAgICAgICBmb3IgdmFsdWUsIHR5cGUgaW4gc2VsZi5fYXR0cnMudmFsdWVzKCk6CisgICAgICAgICAgICBMLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIEwKKworCitjbGFzcyBMb2NhdG9yKHhtbC5zYXgueG1scmVhZGVyLkxvY2F0b3IpOgorICAgIF9saW5lbm8gPSAtMQorICAgIF9wdWJsaWNfaWQgPSBOb25lCisgICAgX3N5c3RlbV9pZCA9IE5vbmUKKworICAgIGRlZiBnZXRMaW5lTnVtYmVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGluZW5vCisKKyAgICBkZWYgZ2V0UHVibGljSWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wdWJsaWNfaWQKKworICAgIGRlZiBnZXRTeXN0ZW1JZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N5c3RlbV9pZAorCisKK2RlZiBwYXJzZShzdHJlYW1fb3Jfc3RyaW5nLCBwYXJzZXI9Tm9uZSk6CisgICAgaWYgdHlwZShzdHJlYW1fb3Jfc3RyaW5nKSBpbiBbdHlwZSgiIiksIHR5cGUodSIiKV06CisgICAgICAgIHN0cmVhbSA9IG9wZW4oc3RyZWFtX29yX3N0cmluZykKKyAgICBlbHNlOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1fb3Jfc3RyaW5nCisgICAgaWYgbm90IHBhcnNlcjoKKyAgICAgICAgcGFyc2VyID0gRVNJU1JlYWRlcigpCisgICAgcmV0dXJuIHhtbC5kb20ucHVsbGRvbS5ET01FdmVudFN0cmVhbShzdHJlYW0sIHBhcnNlciwgKDIgKiogMTQpIC0gMjApCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvc2dtbGNvbnYvbGF0ZXgyZXNpcy5weSBiL2RvYy90b29scy9zZ21sY29udi9sYXRleDJlc2lzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc0ZTFkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvc2dtbGNvbnYvbGF0ZXgyZXNpcy5weQpAQCAtMCwwICsxLDU1NSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCisiIiJHZW5lcmF0ZSBFU0lTIGV2ZW50cyBiYXNlZCBvbiBhIExhVGVYIHNvdXJjZSBkb2N1bWVudCBhbmQKK2NvbmZpZ3VyYXRpb24gZGF0YS4KKworVGhlIGNvbnZlcnNpb24gaXMgbm90IHN0cm9uZyBlbm91Z2ggdG8gd29yayB3aXRoIGFyYml0cmFyeSBMYVRlWAorZG9jdW1lbnRzOyBpdCBoYXMgb25seSBiZWVuIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgaGlnaGx5IHN0eWxpemVkCittYXJrdXAgdXNlZCBpbiB0aGUgc3RhbmRhcmQgUHl0aG9uIGRvY3VtZW50YXRpb24uICBBIGxvdCBvZgoraW5mb3JtYXRpb24gYWJvdXQgc3BlY2lmaWMgbWFya3VwIGlzIGVuY29kZWQgaW4gdGhlIGNvbnRyb2wgdGFibGUKK3Bhc3NlZCB0byB0aGUgY29udmVydCgpIGZ1bmN0aW9uOyBjaGFuZ2luZyB0aGlzIHRhYmxlIGNhbiBhbGxvdyB0aGlzCit0b29sIHRvIHN1cHBvcnQgYWRkaXRpb25hbCBMYVRlWCBtYXJrdXBzLgorCitUaGUgZm9ybWF0IG9mIHRoZSB0YWJsZSBpcyBsYXJnZWx5IHVuZG9jdW1lbnRlZDsgc2VlIHRoZSBjb21tZW50ZWQKK2hlYWRlcnMgd2hlcmUgdGhlIHRhYmxlIGlzIHNwZWNpZmllZCBpbiBtYWluKCkuICBUaGVyZSBpcyBubyBwcm92aXNpb24gCit0byBsb2FkIGFuIGFsdGVybmF0ZSB0YWJsZSBmcm9tIGFuIGV4dGVybmFsIGZpbGUuCisiIiIKKworaW1wb3J0IGVycm5vCitpbXBvcnQgZ2V0b3B0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0IHN5cworaW1wb3J0IFVzZXJMaXN0CitpbXBvcnQgeG1sLnNheC5zYXh1dGlscworCitmcm9tIHR5cGVzIGltcG9ydCBMaXN0VHlwZSwgU3RyaW5nVHlwZSwgVHVwbGVUeXBlCisKK3RyeToKKyAgICBmcm9tIHhtbC5wYXJzZXJzLnhtbGxpYiBpbXBvcnQgWE1MUGFyc2VyCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSB4bWxsaWIgaW1wb3J0IFhNTFBhcnNlcgorCisKK2Zyb20gZXNpc3Rvb2xzIGltcG9ydCBlbmNvZGUKKworCitERUJVRyA9IDAKKworCitjbGFzcyBMYVRlWEZvcm1hdEVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIExhVGVYU3RhY2tFcnJvcihMYVRlWEZvcm1hdEVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZm91bmQsIHN0YWNrKToKKyAgICAgICAgbXNnID0gImVudmlyb25tZW50IGNsb3NlIGZvciAlcyBkb2Vzbid0IG1hdGNoO1xuICBzdGFjayA9ICVzIiBcCisgICAgICAgICAgICAgICUgKGZvdW5kLCBzdGFjaykKKyAgICAgICAgc2VsZi5mb3VuZCA9IGZvdW5kCisgICAgICAgIHNlbGYuc3RhY2sgPSBzdGFja1s6XQorICAgICAgICBMYVRlWEZvcm1hdEVycm9yLl9faW5pdF9fKHNlbGYsIG1zZykKKworDAorX2JlZ2luX2Vudl9yeCA9IHJlLmNvbXBpbGUociJbXFxdYmVnaW57KFtefV0qKX0iKQorX2VuZF9lbnZfcnggPSByZS5jb21waWxlKHIiW1xcXWVuZHsoW159XSopfSIpCitfYmVnaW5fbWFjcm9fcnggPSByZS5jb21waWxlKHIiW1xcXShbYS16QS1aXStbKl0/KSA/KHt8XHMqXG4/KSIpCitfY29tbWVudF9yeCA9IHJlLmNvbXBpbGUoIiUrID8oLiopXG5bIFx0XSoiKQorX3RleHRfcnggPSByZS5jb21waWxlKHIiW15dfiVcXHt9XSsiKQorX29wdGlvbmFsX3J4ID0gcmUuY29tcGlsZShyIlxzKltbXShbXl1dKilbXV0iKQorIyBfcGFyYW1ldGVyX3J4IGlzIHRoaXMgY29tcGxpY2F0ZWQgdG8gYWxsb3cgey4uLn0gaW5zaWRlIGEgcGFyYW1ldGVyOworIyB0aGlzIGlzIHVzZWZ1bCB0byBtYXRjaCB0YWJ1bGFyIGxheW91dCBzcGVjaWZpY2F0aW9ucyBsaWtlIHtjfHB7MjRwdH19CitfcGFyYW1ldGVyX3J4ID0gcmUuY29tcGlsZSgiWyBcbl0qeygoW157fX1dfHtbXn1dKn0pKil9IikKK190b2tlbl9yeCA9IHJlLmNvbXBpbGUociJbYS16QS1aXVthLXpBLVowLTkuLV0qJCIpCitfc3RhcnRfZ3JvdXBfcnggPSByZS5jb21waWxlKCJbIFxuXSp7IikKK19zdGFydF9vcHRpb25hbF9yeCA9IHJlLmNvbXBpbGUoIlsgXG5dKltbXSIpCisKKworRVNDQVBFRF9DSEFSUyA9ICIkJSNeIHt9Jn4iCisKKworZGVmIGRiZ21zZyhtc2cpOgorICAgIGlmIERFQlVHOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKG1zZyArICJcbiIpCisKK2RlZiBwdXNoaW5nKG5hbWUsIHBvaW50LCBkZXB0aCk6CisgICAgZGJnbXNnKCJwdXNoaW5nIDwlcz4gYXQgJXMiICUgKG5hbWUsIHBvaW50KSkKKworZGVmIHBvcHBpbmcobmFtZSwgcG9pbnQsIGRlcHRoKToKKyAgICBkYmdtc2coInBvcHBpbmcgPC8lcz4gYXQgJXMiICUgKG5hbWUsIHBvaW50KSkKKworCitjbGFzcyBfU3RhY2soVXNlckxpc3QuVXNlckxpc3QpOgorICAgIGRlZiBhcHBlbmQoc2VsZiwgZW50cnkpOgorICAgICAgICBpZiB0eXBlKGVudHJ5KSBpcyBub3QgU3RyaW5nVHlwZToKKyAgICAgICAgICAgIHJhaXNlIExhVGVYRm9ybWF0RXJyb3IoImNhbm5vdCBwdXNoIG5vbi1zdHJpbmcgb24gc3RhY2s6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBgZW50cnlgKQorICAgICAgICAjZGJnbXNnKCIlczwlcz4iICUgKCIgIipsZW4oc2VsZi5kYXRhKSwgZW50cnkpKQorICAgICAgICBzZWxmLmRhdGEuYXBwZW5kKGVudHJ5KQorCisgICAgZGVmIHBvcChzZWxmLCBpbmRleD0tMSk6CisgICAgICAgIGVudHJ5ID0gc2VsZi5kYXRhW2luZGV4XQorICAgICAgICBkZWwgc2VsZi5kYXRhW2luZGV4XQorICAgICAgICAjZGJnbXNnKCIlczwvJXM+IiAlICgiICIqbGVuKHNlbGYuZGF0YSksIGVudHJ5KSkKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIGVudHJ5ID0gc2VsZi5kYXRhW2luZGV4XQorICAgICAgICBkZWwgc2VsZi5kYXRhW2luZGV4XQorICAgICAgICAjZGJnbXNnKCIlczwvJXM+IiAlICgiICIqbGVuKHNlbGYuZGF0YSksIGVudHJ5KSkKKworCitkZWYgbmV3X3N0YWNrKCk6CisgICAgaWYgREVCVUc6CisgICAgICAgIHJldHVybiBfU3RhY2soKQorICAgIHJldHVybiBbXQorCisMCitjbGFzcyBDb252ZXJzaW9uOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpZnAsIG9mcCwgdGFibGUpOgorICAgICAgICBzZWxmLndyaXRlID0gb2ZwLndyaXRlCisgICAgICAgIHNlbGYub2ZwID0gb2ZwCisgICAgICAgIHNlbGYudGFibGUgPSB0YWJsZQorICAgICAgICBzZWxmLmxpbmUgPSBzdHJpbmcuam9pbihtYXAoc3RyaW5nLnJzdHJpcCwgaWZwLnJlYWRsaW5lcygpKSwgIlxuIikKKyAgICAgICAgc2VsZi5wcmVhbWJsZSA9IDEKKworICAgIGRlZiBjb252ZXJ0KHNlbGYpOgorICAgICAgICBzZWxmLnN1YmNvbnZlcnQoKQorCisgICAgZGVmIHN1YmNvbnZlcnQoc2VsZiwgZW5kY2hhcj1Ob25lLCBkZXB0aD0wKToKKyAgICAgICAgIworICAgICAgICAjIFBhcnNlcyBjb250ZW50LCBpbmNsdWRpbmcgc3ViLXN0cnVjdHVyZXMsIHVudGlsIHRoZSBjaGFyYWN0ZXIKKyAgICAgICAgIyAnZW5kY2hhcicgaXMgZm91bmQgKHdpdGggbm8gb3BlbiBzdHJ1Y3R1cmVzKSwgb3IgdW50aWwgdGhlIGVuZAorICAgICAgICAjIG9mIHRoZSBpbnB1dCBkYXRhIGlzIGVuZGNoYXIgaXMgTm9uZS4KKyAgICAgICAgIworICAgICAgICBzdGFjayA9IG5ld19zdGFjaygpCisgICAgICAgIGxpbmUgPSBzZWxmLmxpbmUKKyAgICAgICAgd2hpbGUgbGluZToKKyAgICAgICAgICAgIGlmIGxpbmVbMF0gPT0gZW5kY2hhciBhbmQgbm90IHN0YWNrOgorICAgICAgICAgICAgICAgIHNlbGYubGluZSA9IGxpbmUKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorICAgICAgICAgICAgbSA9IF9jb21tZW50X3J4Lm1hdGNoKGxpbmUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHRleHQgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiKENPTU1FTlRcbi0gJXMgXG4pQ09NTUVOVFxuLVxcblxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZW5jb2RlKHRleHQpKQorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lW20uZW5kKCk6XQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBtID0gX2JlZ2luX2Vudl9yeC5tYXRjaChsaW5lKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBuYW1lID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgIGVudHJ5ID0gc2VsZi5nZXRfZW52X2VudHJ5KG5hbWUpCisgICAgICAgICAgICAgICAgIyByZS13cml0ZSB0byB1c2UgdGhlIG1hY3JvIGhhbmRsZXIKKyAgICAgICAgICAgICAgICBsaW5lID0gciJcJXMgJXMiICUgKG5hbWUsIGxpbmVbbS5lbmQoKTpdKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBtID0gX2VuZF9lbnZfcngubWF0Y2gobGluZSkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgIyBlbmQgb2YgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICBlbnZuYW1lID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgIGVudHJ5ID0gc2VsZi5nZXRfZW50cnkoZW52bmFtZSkKKyAgICAgICAgICAgICAgICB3aGlsZSBzdGFjayBhbmQgZW52bmFtZSAhPSBzdGFja1stMV0gXAorICAgICAgICAgICAgICAgICAgICAgIGFuZCBzdGFja1stMV0gaW4gZW50cnkuZW5kY2xvc2VzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCIpJXNcbiIgJSBzdGFjay5wb3AoKSkKKyAgICAgICAgICAgICAgICBpZiBzdGFjayBhbmQgZW52bmFtZSA9PSBzdGFja1stMV06CisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIiklc1xuIiAlIGVudHJ5Lm91dHB1dG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGRlbCBzdGFja1stMV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBMYVRlWFN0YWNrRXJyb3IoZW52bmFtZSwgc3RhY2spCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbbS5lbmQoKTpdCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG0gPSBfYmVnaW5fbWFjcm9fcngubWF0Y2gobGluZSkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgIyBzdGFydCBvZiBtYWNybworICAgICAgICAgICAgICAgIG1hY3JvbmFtZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBpZiBtYWNyb25hbWUgPT0gImMiOgorICAgICAgICAgICAgICAgICAgICAjIFVnaCEgIFRoaXMgaXMgYSBjb21iaW5pbmcgY2hhcmFjdGVyLi4uCisgICAgICAgICAgICAgICAgICAgIGVuZHBvcyA9IG0uZW5kKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21iaW5pbmdfY2hhcigiYyIsIGxpbmVbZW5kcG9zXSkKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbZW5kcG9zICsgMTpdCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZW50cnkgPSBzZWxmLmdldF9lbnRyeShtYWNyb25hbWUpCisgICAgICAgICAgICAgICAgaWYgZW50cnkudmVyYmF0aW06CisgICAgICAgICAgICAgICAgICAgICMgbWFnaWMgY2FzZSEKKyAgICAgICAgICAgICAgICAgICAgcG9zID0gc3RyaW5nLmZpbmQobGluZSwgIlxcZW5keyVzfSIgJSBtYWNyb25hbWUpCisgICAgICAgICAgICAgICAgICAgIHRleHQgPSBsaW5lW20uZW5kKDEpOnBvc10KKyAgICAgICAgICAgICAgICAgICAgc3RhY2suYXBwZW5kKGVudHJ5Lm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIiglc1xuIiAlIGVudHJ5Lm91dHB1dG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIi0lc1xuIiAlIGVuY29kZSh0ZXh0KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiKSVzXG4iICUgZW50cnkub3V0cHV0bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbcG9zICsgbGVuKCJcXGVuZHslc30iICUgbWFjcm9uYW1lKTpdCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgd2hpbGUgc3RhY2sgYW5kIHN0YWNrWy0xXSBpbiBlbnRyeS5jbG9zZXM6CisgICAgICAgICAgICAgICAgICAgIHRvcCA9IHN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHRvcGVudHJ5ID0gc2VsZi5nZXRfZW50cnkodG9wKQorICAgICAgICAgICAgICAgICAgICBpZiB0b3BlbnRyeS5vdXRwdXRuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiKSVzXG4tXFxuXG4iICUgdG9wZW50cnkub3V0cHV0bmFtZSkKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgaWYgZW50cnkub3V0cHV0bmFtZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZW50cnkuZW1wdHk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCJlXG4iKQorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICBwYXJhbXMsIG9wdGlvbmFsLCBlbXB0eSwgZW52aXJvbiA9IHNlbGYuc3RhcnRfbWFjcm8obWFjcm9uYW1lKQorICAgICAgICAgICAgICAgICMgcmlwIG9mZiB0aGUgbWFjcm9uYW1lCisgICAgICAgICAgICAgICAgaWYgcGFyYW1zOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVttLmVuZCgxKTpdCisgICAgICAgICAgICAgICAgZWxpZiBlbXB0eToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbbS5lbmQoMSk6XQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lW20uZW5kKCk6XQorICAgICAgICAgICAgICAgIG9wZW5lZCA9IDAKKyAgICAgICAgICAgICAgICBpbXBsaWVkX2NvbnRlbnQgPSAwCisKKyAgICAgICAgICAgICAgICAjIGhhbmRsZSBhdHRyaWJ1dGUgbWFwcGluZ3MgaGVyZToKKyAgICAgICAgICAgICAgICBmb3IgcGVudHJ5IGluIHBhcmFtczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGVudHJ5LnR5cGUgPT0gImF0dHJpYnV0ZSI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwZW50cnkub3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IF9vcHRpb25hbF9yeC5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG0gYW5kIGVudHJ5Lm91dHB1dG5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lW20uZW5kKCk6XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBfYXR0cihwZW50cnksIG0uZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHBlbnRyeS50ZXh0IGFuZCBlbnRyeS5vdXRwdXRuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdmFsdWUgc3VwcGxpZWQgYnkgY29udmVyc2lvbiBzcGVjOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcF9hdHRyKHBlbnRyeSwgcGVudHJ5LnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBfcGFyYW1ldGVyX3J4Lm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIExhVGVYRm9ybWF0RXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgcGFyYW1ldGVyICVzIGZvciAlczogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwZW50cnkubmFtZSwgbWFjcm9uYW1lLCBgbGluZVs6MTAwXWApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVudHJ5Lm91dHB1dG5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcF9hdHRyKHBlbnRyeSwgbS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVttLmVuZCgpOl0KKyAgICAgICAgICAgICAgICAgICAgZWxpZiBwZW50cnkudHlwZSA9PSAiY2hpbGQiOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGVudHJ5Lm9wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBfb3B0aW9uYWxfcngubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVttLmVuZCgpOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW50cnkub3V0cHV0bmFtZSBhbmQgbm90IG9wZW5lZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5lZCA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIiglc1xuIiAlIGVudHJ5Lm91dHB1dG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5hcHBlbmQobWFjcm9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5hcHBlbmQocGVudHJ5Lm5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIiglc1xuIiAlIHBlbnRyeS5uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCItJXNcbiIgJSBlbmNvZGUobS5ncm91cCgxKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIiklc1xuIiAlIHBlbnRyeS5uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnRyeS5vdXRwdXRuYW1lIGFuZCBub3Qgb3BlbmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZWQgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIiglc1xuIiAlIGVudHJ5Lm91dHB1dG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmFwcGVuZChlbnRyeS5uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIiglc1xuIiAlIHBlbnRyeS5uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmFwcGVuZChwZW50cnkubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmUgPSBza2lwX3doaXRlKGxpbmUpWzE6XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLnN1YmNvbnZlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9IiwgbGVuKHN0YWNrKSArIGRlcHRoICsgMSlbMTpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiKSVzXG4iICUgc3RhY2sucG9wKCkpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgcGVudHJ5LnR5cGUgPT0gImNvbnRlbnQiOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGVudHJ5LmltcGxpZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGllZF9jb250ZW50ID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnRyeS5vdXRwdXRuYW1lIGFuZCBub3Qgb3BlbmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZWQgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIiglc1xuIiAlIGVudHJ5Lm91dHB1dG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmFwcGVuZChlbnRyeS5uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBza2lwX3doaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZVswXSAhPSAieyI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIExhVGVYRm9ybWF0RXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlzc2luZyBjb250ZW50IGZvciAiICsgbWFjcm9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZSA9IGxpbmVbMTpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuc3ViY29udmVydCgifSIsIGxlbihzdGFjaykgKyBkZXB0aCArIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZSBhbmQgbGluZVswXSA9PSAifSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzE6XQorICAgICAgICAgICAgICAgICAgICBlbGlmIHBlbnRyeS50eXBlID09ICJ0ZXh0IiBhbmQgcGVudHJ5LnRleHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnRyeS5vdXRwdXRuYW1lIGFuZCBub3Qgb3BlbmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5lZCA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5hcHBlbmQoZW50cnkubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCIoJXNcbiIgJSBlbnRyeS5vdXRwdXRuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgI2RiZ21zZygiLS0tIHRleHQ6ICVzIiAlIGBwZW50cnkudGV4dGApCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCItJXNcbiIgJSBlbmNvZGUocGVudHJ5LnRleHQpKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHBlbnRyeS50eXBlID09ICJlbnRpdHlyZWYiOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiJiVzXG4iICUgcGVudHJ5Lm5hbWUpCisgICAgICAgICAgICAgICAgaWYgZW50cnkub3V0cHV0bmFtZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9wZW5lZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIiglc1xuIiAlIGVudHJ5Lm91dHB1dG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5hcHBlbmQoZW50cnkubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGltcGxpZWRfY29udGVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIiklc1xuIiAlIGVudHJ5Lm91dHB1dG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lWzBdID09IGVuZGNoYXIgYW5kIG5vdCBzdGFjazoKKyAgICAgICAgICAgICAgICBzZWxmLmxpbmUgPSBsaW5lWzE6XQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmxpbmUKKyAgICAgICAgICAgIGlmIGxpbmVbMF0gPT0gIn0iOgorICAgICAgICAgICAgICAgICMgZW5kIG9mIG1hY3JvIG9yIGdyb3VwCisgICAgICAgICAgICAgICAgbWFjcm9uYW1lID0gc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgaWYgbWFjcm9uYW1lOgorICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uID0gc2VsZi50YWJsZVttYWNyb25hbWVdCisgICAgICAgICAgICAgICAgICAgIGlmIGNvbnZlcnNpb24ub3V0cHV0bmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlLCBpdCB3YXMganVzdCBhIGJhcmUgZ3JvdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIiklc1xuIiAlIGNvbnZlcnNpb24ub3V0cHV0bmFtZSkKKyAgICAgICAgICAgICAgICBkZWwgc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbMTpdCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGxpbmVbMF0gPT0gIn4iOgorICAgICAgICAgICAgICAgICMgZG9uJ3Qgd29ycnkgYWJvdXQgdGhlICJ0aWUiIGFzcGVjdCBvZiB0aGlzIGNvbW1hbmQKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZVsxOl0KKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCItIFxuIikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbGluZVswXSA9PSAieyI6CisgICAgICAgICAgICAgICAgc3RhY2suYXBwZW5kKCIiKQorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzE6XQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lWzBdID09ICJcXCIgYW5kIGxpbmVbMV0gaW4gRVNDQVBFRF9DSEFSUzoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCItJXNcbiIgJSBlbmNvZGUobGluZVsxXSkpCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbMjpdCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGxpbmVbOjJdID09IHIiXFwiOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIihCUkVBS1xuKUJSRUFLXG4iKQorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzI6XQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lWzoyXSA9PSByIlxfIjoKKyAgICAgICAgICAgICAgICBsaW5lID0gIl8iICsgbGluZVsyOl0KKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbGluZVs6Ml0gaW4gKHIiXCciLCByJ1wiJyk6CisgICAgICAgICAgICAgICAgIyBjb21iaW5pbmcgY2hhcmFjdGVycy4uLgorICAgICAgICAgICAgICAgIHNlbGYuY29tYmluaW5nX2NoYXIobGluZVsxXSwgbGluZVsyXSkKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZVszOl0KKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbSA9IF90ZXh0X3J4Lm1hdGNoKGxpbmUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHRleHQgPSBlbmNvZGUobS5ncm91cCgpKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIi0lc1xuIiAlIHRleHQpCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbbS5lbmQoKTpdCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgc3BlY2lhbCBjYXNlIGJlY2F1c2Ugb2YgXGl0ZW1bXQorICAgICAgICAgICAgIyBYWFggY2FuIHdlIGF4ZSB0aGlzPz8/CisgICAgICAgICAgICBpZiBsaW5lWzBdID09ICJdIjoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCItXVxuIikKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZVsxOl0KKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBhdm9pZCBpbmZpbml0ZSBsb29wcworICAgICAgICAgICAgZXh0cmEgPSAiIgorICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gMTAwOgorICAgICAgICAgICAgICAgIGV4dHJhID0gIi4uLiIKKyAgICAgICAgICAgIHJhaXNlIExhVGVYRm9ybWF0RXJyb3IoImNvdWxkIG5vdCBpZGVudGlmeSBtYXJrdXA6ICVzJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGBsaW5lWzoxMDBdYCwgZXh0cmEpKQorICAgICAgICB3aGlsZSBzdGFjazoKKyAgICAgICAgICAgIGVudHJ5ID0gc2VsZi5nZXRfZW50cnkoc3RhY2tbLTFdKQorICAgICAgICAgICAgaWYgZW50cnkuY2xvc2VzOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIiklc1xuLSVzXG4iICUgKGVudHJ5Lm91dHB1dG5hbWUsIGVuY29kZSgiXG4iKSkpCisgICAgICAgICAgICAgICAgZGVsIHN0YWNrWy0xXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBzdGFjazoKKyAgICAgICAgICAgIHJhaXNlIExhVGVYRm9ybWF0RXJyb3IoImVsZW1lbnRzIHJlbWFpbiBvbiBzdGFjazogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0cmluZy5qb2luKHN0YWNrLCAiLCAiKSkKKyAgICAgICAgIyBvdGhlcndpc2Ugd2UganVzdCByYW4gb3V0IG9mIGlucHV0IGhlcmUuLi4KKworICAgICMgVGhpcyBpcyBhIHJlYWxseSBsaW1pdGVkIHRhYmxlIG9mIGNvbWJpbmF0aW9ucywgYnV0IGl0IHdpbGwgaGF2ZQorICAgICMgdG8gZG8gZm9yIG5vdy4KKyAgICBfY29tYmluYXRpb25zID0geworICAgICAgICAoImMiLCAiYyIpOiAweDAwRTcsCisgICAgICAgICgiJyIsICJlIik6IDB4MDBFOSwKKyAgICAgICAgKCciJywgIm8iKTogMHgwMEY2LAorICAgICAgICB9CisKKyAgICBkZWYgY29tYmluaW5nX2NoYXIoc2VsZiwgcHJlZml4LCBjaGFyKToKKyAgICAgICAgb3JkaW5hbCA9IHNlbGYuX2NvbWJpbmF0aW9uc1socHJlZml4LCBjaGFyKV0KKyAgICAgICAgc2VsZi53cml0ZSgiLVxcJSUlZDtcbiIgJSBvcmRpbmFsKQorCisgICAgZGVmIHN0YXJ0X21hY3JvKHNlbGYsIG5hbWUpOgorICAgICAgICBjb252ZXJzaW9uID0gc2VsZi5nZXRfZW50cnkobmFtZSkKKyAgICAgICAgcGFyYW1ldGVycyA9IGNvbnZlcnNpb24ucGFyYW1ldGVycworICAgICAgICBvcHRpb25hbCA9IHBhcmFtZXRlcnMgYW5kIHBhcmFtZXRlcnNbMF0ub3B0aW9uYWwKKyAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMsIG9wdGlvbmFsLCBjb252ZXJzaW9uLmVtcHR5LCBjb252ZXJzaW9uLmVudmlyb25tZW50CisKKyAgICBkZWYgZ2V0X2VudHJ5KHNlbGYsIG5hbWUpOgorICAgICAgICBlbnRyeSA9IHNlbGYudGFibGUuZ2V0KG5hbWUpCisgICAgICAgIGlmIGVudHJ5IGlzIE5vbmU6CisgICAgICAgICAgICBkYmdtc2coImdldF9lbnRyeSglcykgZmFpbGluZzsgYnVpbGRpbmcgZGVmYXVsdCBlbnRyeSEiICUgYG5hbWVgKQorICAgICAgICAgICAgIyBub3QgZGVmaW5lZDsgYnVpbGQgYSBkZWZhdWx0IGVudHJ5OgorICAgICAgICAgICAgZW50cnkgPSBUYWJsZUVudHJ5KG5hbWUpCisgICAgICAgICAgICBlbnRyeS5oYXNfY29udGVudCA9IDEKKyAgICAgICAgICAgIGVudHJ5LnBhcmFtZXRlcnMuYXBwZW5kKFBhcmFtZXRlcigiY29udGVudCIpKQorICAgICAgICAgICAgc2VsZi50YWJsZVtuYW1lXSA9IGVudHJ5CisgICAgICAgIHJldHVybiBlbnRyeQorCisgICAgZGVmIGdldF9lbnZfZW50cnkoc2VsZiwgbmFtZSk6CisgICAgICAgIGVudHJ5ID0gc2VsZi50YWJsZS5nZXQobmFtZSkKKyAgICAgICAgaWYgZW50cnkgaXMgTm9uZToKKyAgICAgICAgICAgICMgbm90IGRlZmluZWQ7IGJ1aWxkIGEgZGVmYXVsdCBlbnRyeToKKyAgICAgICAgICAgIGVudHJ5ID0gVGFibGVFbnRyeShuYW1lLCAxKQorICAgICAgICAgICAgZW50cnkuaGFzX2NvbnRlbnQgPSAxCisgICAgICAgICAgICBlbnRyeS5wYXJhbWV0ZXJzLmFwcGVuZChQYXJhbWV0ZXIoImNvbnRlbnQiKSkKKyAgICAgICAgICAgIGVudHJ5LnBhcmFtZXRlcnNbLTFdLmltcGxpZWQgPSAxCisgICAgICAgICAgICBzZWxmLnRhYmxlW25hbWVdID0gZW50cnkKKyAgICAgICAgZWxpZiBub3QgZW50cnkuZW52aXJvbm1lbnQ6CisgICAgICAgICAgICByYWlzZSBMYVRlWEZvcm1hdEVycm9yKAorICAgICAgICAgICAgICAgIG5hbWUgKyAiIGlzIGRlZmluZWQgYXMgYSBtYWNybzsgZXhwZWN0ZWQgZW52aXJvbm1lbnQiKQorICAgICAgICByZXR1cm4gZW50cnkKKworICAgIGRlZiBkdW1wX2F0dHIoc2VsZiwgcGVudHJ5LCB2YWx1ZSk6CisgICAgICAgIGlmIG5vdCAocGVudHJ5Lm5hbWUgYW5kIHZhbHVlKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBfdG9rZW5fcngubWF0Y2godmFsdWUpOgorICAgICAgICAgICAgZHR5cGUgPSAiVE9LRU4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkdHlwZSA9ICJDREFUQSIKKyAgICAgICAgc2VsZi53cml0ZSgiQSVzICVzICVzXG4iICUgKHBlbnRyeS5uYW1lLCBkdHlwZSwgZW5jb2RlKHZhbHVlKSkpCisKKworZGVmIGNvbnZlcnQoaWZwLCBvZnAsIHRhYmxlKToKKyAgICBjID0gQ29udmVyc2lvbihpZnAsIG9mcCwgdGFibGUpCisgICAgdHJ5OgorICAgICAgICBjLmNvbnZlcnQoKQorICAgIGV4Y2VwdCBJT0Vycm9yLCAoZXJyLCBtc2cpOgorICAgICAgICBpZiBlcnIgIT0gZXJybm8uRVBJUEU6CisgICAgICAgICAgICByYWlzZQorCisKK2RlZiBza2lwX3doaXRlKGxpbmUpOgorICAgIHdoaWxlIGxpbmUgYW5kIGxpbmVbMF0gaW4gIiAlXG5cdFxyIjoKKyAgICAgICAgbGluZSA9IHN0cmluZy5sc3RyaXAobGluZVsxOl0pCisgICAgcmV0dXJuIGxpbmUKKworCisKK2NsYXNzIFRhYmxlRW50cnk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGVudmlyb25tZW50PTApOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYub3V0cHV0bmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50CisgICAgICAgIHNlbGYuZW1wdHkgPSBub3QgZW52aXJvbm1lbnQKKyAgICAgICAgc2VsZi5oYXNfY29udGVudCA9IDAKKyAgICAgICAgc2VsZi52ZXJiYXRpbSA9IDAKKyAgICAgICAgc2VsZi5hdXRvX2Nsb3NlID0gMAorICAgICAgICBzZWxmLnBhcmFtZXRlcnMgPSBbXQorICAgICAgICBzZWxmLmNsb3NlcyA9IFtdCisgICAgICAgIHNlbGYuZW5kY2xvc2VzID0gW10KKworY2xhc3MgUGFyYW1ldGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlLCBuYW1lPU5vbmUsIG9wdGlvbmFsPTApOgorICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5vcHRpb25hbCA9IG9wdGlvbmFsCisgICAgICAgIHNlbGYudGV4dCA9ICcnCisgICAgICAgIHNlbGYuaW1wbGllZCA9IDAKKworCitjbGFzcyBUYWJsZVBhcnNlcihYTUxQYXJzZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YWJsZT1Ob25lKToKKyAgICAgICAgaWYgdGFibGUgaXMgTm9uZToKKyAgICAgICAgICAgIHRhYmxlID0ge30KKyAgICAgICAgc2VsZi5fX3RhYmxlID0gdGFibGUKKyAgICAgICAgc2VsZi5fX2N1cnJlbnQgPSBOb25lCisgICAgICAgIHNlbGYuX19idWZmZXIgPSAnJworICAgICAgICBYTUxQYXJzZXIuX19pbml0X18oc2VsZikKKworICAgIGRlZiBnZXRfdGFibGUoc2VsZik6CisgICAgICAgIGZvciBlbnRyeSBpbiBzZWxmLl9fdGFibGUudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBlbnRyeS5lbnZpcm9ubWVudCBhbmQgbm90IGVudHJ5Lmhhc19jb250ZW50OgorICAgICAgICAgICAgICAgIHAgPSBQYXJhbWV0ZXIoImNvbnRlbnQiKQorICAgICAgICAgICAgICAgIHAuaW1wbGllZCA9IDEKKyAgICAgICAgICAgICAgICBlbnRyeS5wYXJhbWV0ZXJzLmFwcGVuZChwKQorICAgICAgICAgICAgICAgIGVudHJ5Lmhhc19jb250ZW50ID0gMQorICAgICAgICByZXR1cm4gc2VsZi5fX3RhYmxlCisKKyAgICBkZWYgc3RhcnRfZW52aXJvbm1lbnQoc2VsZiwgYXR0cnMpOgorICAgICAgICBuYW1lID0gYXR0cnNbIm5hbWUiXQorICAgICAgICBzZWxmLl9fY3VycmVudCA9IFRhYmxlRW50cnkobmFtZSwgZW52aXJvbm1lbnQ9MSkKKyAgICAgICAgc2VsZi5fX2N1cnJlbnQudmVyYmF0aW0gPSBhdHRycy5nZXQoInZlcmJhdGltIikgPT0gInllcyIKKyAgICAgICAgaWYgYXR0cnMuaGFzX2tleSgib3V0cHV0bmFtZSIpOgorICAgICAgICAgICAgc2VsZi5fX2N1cnJlbnQub3V0cHV0bmFtZSA9IGF0dHJzLmdldCgib3V0cHV0bmFtZSIpCisgICAgICAgIHNlbGYuX19jdXJyZW50LmVuZGNsb3NlcyA9IHN0cmluZy5zcGxpdChhdHRycy5nZXQoImVuZGNsb3NlcyIsICIiKSkKKyAgICBkZWYgZW5kX2Vudmlyb25tZW50KHNlbGYpOgorICAgICAgICBzZWxmLmVuZF9tYWNybygpCisKKyAgICBkZWYgc3RhcnRfbWFjcm8oc2VsZiwgYXR0cnMpOgorICAgICAgICBuYW1lID0gYXR0cnNbIm5hbWUiXQorICAgICAgICBzZWxmLl9fY3VycmVudCA9IFRhYmxlRW50cnkobmFtZSkKKyAgICAgICAgc2VsZi5fX2N1cnJlbnQuY2xvc2VzID0gc3RyaW5nLnNwbGl0KGF0dHJzLmdldCgiY2xvc2VzIiwgIiIpKQorICAgICAgICBpZiBhdHRycy5oYXNfa2V5KCJvdXRwdXRuYW1lIik6CisgICAgICAgICAgICBzZWxmLl9fY3VycmVudC5vdXRwdXRuYW1lID0gYXR0cnMuZ2V0KCJvdXRwdXRuYW1lIikKKyAgICBkZWYgZW5kX21hY3JvKHNlbGYpOgorICAgICAgICBzZWxmLl9fdGFibGVbc2VsZi5fX2N1cnJlbnQubmFtZV0gPSBzZWxmLl9fY3VycmVudAorICAgICAgICBzZWxmLl9fY3VycmVudCA9IE5vbmUKKworICAgIGRlZiBzdGFydF9hdHRyaWJ1dGUoc2VsZiwgYXR0cnMpOgorICAgICAgICBuYW1lID0gYXR0cnMuZ2V0KCJuYW1lIikKKyAgICAgICAgb3B0aW9uYWwgPSBhdHRycy5nZXQoIm9wdGlvbmFsIikgPT0gInllcyIKKyAgICAgICAgaWYgbmFtZToKKyAgICAgICAgICAgIHAgPSBQYXJhbWV0ZXIoImF0dHJpYnV0ZSIsIG5hbWUsIG9wdGlvbmFsPW9wdGlvbmFsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcCA9IFBhcmFtZXRlcigiYXR0cmlidXRlIiwgb3B0aW9uYWw9b3B0aW9uYWwpCisgICAgICAgIHNlbGYuX19jdXJyZW50LnBhcmFtZXRlcnMuYXBwZW5kKHApCisgICAgICAgIHNlbGYuX19idWZmZXIgPSAnJworICAgIGRlZiBlbmRfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9fY3VycmVudC5wYXJhbWV0ZXJzWy0xXS50ZXh0ID0gc2VsZi5fX2J1ZmZlcgorCisgICAgZGVmIHN0YXJ0X2VudGl0eXJlZihzZWxmLCBhdHRycyk6CisgICAgICAgIG5hbWUgPSBhdHRyc1sibmFtZSJdCisgICAgICAgIHAgPSBQYXJhbWV0ZXIoImVudGl0eXJlZiIsIG5hbWUpCisgICAgICAgIHNlbGYuX19jdXJyZW50LnBhcmFtZXRlcnMuYXBwZW5kKHApCisKKyAgICBkZWYgc3RhcnRfY2hpbGQoc2VsZiwgYXR0cnMpOgorICAgICAgICBuYW1lID0gYXR0cnNbIm5hbWUiXQorICAgICAgICBwID0gUGFyYW1ldGVyKCJjaGlsZCIsIG5hbWUsIGF0dHJzLmdldCgib3B0aW9uYWwiKSA9PSAieWVzIikKKyAgICAgICAgc2VsZi5fX2N1cnJlbnQucGFyYW1ldGVycy5hcHBlbmQocCkKKyAgICAgICAgc2VsZi5fX2N1cnJlbnQuZW1wdHkgPSAwCisKKyAgICBkZWYgc3RhcnRfY29udGVudChzZWxmLCBhdHRycyk6CisgICAgICAgIHAgPSBQYXJhbWV0ZXIoImNvbnRlbnQiKQorICAgICAgICBwLmltcGxpZWQgPSBhdHRycy5nZXQoImltcGxpZWQiKSA9PSAieWVzIgorICAgICAgICBpZiBzZWxmLl9fY3VycmVudC5lbnZpcm9ubWVudDoKKyAgICAgICAgICAgIHAuaW1wbGllZCA9IDEKKyAgICAgICAgc2VsZi5fX2N1cnJlbnQucGFyYW1ldGVycy5hcHBlbmQocCkKKyAgICAgICAgc2VsZi5fX2N1cnJlbnQuaGFzX2NvbnRlbnQgPSAxCisgICAgICAgIHNlbGYuX19jdXJyZW50LmVtcHR5ID0gMAorCisgICAgZGVmIHN0YXJ0X3RleHQoc2VsZiwgYXR0cnMpOgorICAgICAgICBzZWxmLl9fY3VycmVudC5lbXB0eSA9IDAKKyAgICAgICAgc2VsZi5fX2J1ZmZlciA9ICcnCisgICAgZGVmIGVuZF90ZXh0KHNlbGYpOgorICAgICAgICBwID0gUGFyYW1ldGVyKCJ0ZXh0IikKKyAgICAgICAgcC50ZXh0ID0gc2VsZi5fX2J1ZmZlcgorICAgICAgICBzZWxmLl9fY3VycmVudC5wYXJhbWV0ZXJzLmFwcGVuZChwKQorCisgICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9fYnVmZmVyID0gc2VsZi5fX2J1ZmZlciArIGRhdGEKKworCitkZWYgbG9hZF90YWJsZShmcCwgdGFibGU9Tm9uZSk6CisgICAgcGFyc2VyID0gVGFibGVQYXJzZXIodGFibGU9dGFibGUpCisgICAgcGFyc2VyLmZlZWQoZnAucmVhZCgpKQorICAgIHBhcnNlci5jbG9zZSgpCisgICAgcmV0dXJuIHBhcnNlci5nZXRfdGFibGUoKQorCisKK2RlZiBtYWluKCk6CisgICAgZ2xvYmFsIERFQlVHCisgICAgIworICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgIkQiLCBbImRlYnVnIl0pCisgICAgZm9yIG9wdCwgYXJnIGluIG9wdHM6CisgICAgICAgIGlmIG9wdCBpbiAoIi1EIiwgIi0tZGVidWciKToKKyAgICAgICAgICAgIERFQlVHID0gREVCVUcgKyAxCisgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgIGlmcCA9IHN5cy5zdGRpbgorICAgICAgICBvZnAgPSBzeXMuc3Rkb3V0CisgICAgZWxpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgaWZwID0gb3BlbihhcmdzKQorICAgICAgICBvZnAgPSBzeXMuc3Rkb3V0CisgICAgZWxpZiBsZW4oYXJncykgPT0gMjoKKyAgICAgICAgaWZwID0gb3BlbihhcmdzWzBdKQorICAgICAgICBvZnAgPSBvcGVuKGFyZ3NbMV0sICJ3IikKKyAgICBlbHNlOgorICAgICAgICB1c2FnZSgpCisgICAgICAgIHN5cy5leGl0KDIpCisKKyAgICB0YWJsZSA9IGxvYWRfdGFibGUob3Blbihvcy5wYXRoLmpvaW4oc3lzLnBhdGhbMF0sICdjb252ZXJzaW9uLnhtbCcpKSkKKyAgICBjb252ZXJ0KGlmcCwgb2ZwLCB0YWJsZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3NnbWxjb252L21ha2UucnVsZXMgYi9kb2MvdG9vbHMvc2dtbGNvbnYvbWFrZS5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzU3OWM1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL3NnbWxjb252L21ha2UucnVsZXMKQEAgLTAsMCArMSw0OCBAQAorIyAtKi0gbWFrZWZpbGUgLSotCisjCisjIEV4dHJhIG1hZ2ljIG5lZWRlZCBieSB0aGUgTGFUZVgtPlhNTCBjb252ZXJzaW9uIHByb2Nlc3MuICBUaGlzIHJlcXVpcmVzCisjICQoVE9PTFNESVIpIHRvIGJlIHByb3Blcmx5IGRlZmluZWQuCisKK0RPQ0ZJWEVSPQkkKFRPT0xTRElSKS9zZ21sY29udi9kb2NmaXhlci5weQorRVNJUzJNTD0JJChUT09MU0RJUikvc2dtbGNvbnYvZXNpczJzZ21sLnB5CitMQVRFWDJFU0lTPQkkKFRPT0xTRElSKS9zZ21sY29udi9sYXRleDJlc2lzLnB5CitDT05WRVJTSU9OPQkkKFRPT0xTRElSKS9zZ21sY29udi9jb252ZXJzaW9uLnhtbAorCitFU0lTVEFSR0VUUz0JJChwYXRzdWJzdCAlLnRleCwlLmVzaXMsJCh3aWxkY2FyZCAqLnRleCkpCitFU0lTMVRBUkdFVFM9CSQocGF0c3Vic3QgJS50ZXgsJS5lc2lzMSwkKHdpbGRjYXJkICoudGV4KSkKK1hNTFRBUkdFVFM9CSQocGF0c3Vic3QgJS50ZXgsJS54bWwsJCh3aWxkY2FyZCAqLnRleCkpCisKK0wyRUZMQUdTPQorCithbGw6CXhtbAorCitlc2lzOgkkKEVTSVNUQVJHRVRTKQorZXNpczE6CSQoRVNJUzFUQVJHRVRTKQoreG1sOgkkKFhNTFRBUkdFVFMpCisKK0VTSVNUT09MUz0JJChUT09MU0RJUikvc2dtbGNvbnYvZXNpc3Rvb2xzLnB5CisKKyQoRVNJU1RBUkdFVFMpOiAkKExBVEVYMkVTSVMpICQoRE9DRklYRVIpICQoRVNJU1RPT0xTKSAkKENPTlZFUlNJT04pCiskKEVTSVMxVEFSR0VUUyk6ICQoTEFURVgyRVNJUykgJChDT05WRVJTSU9OKQorIyBUaGlzIHZhcmlhbnQgaXMgZWFzaWVyIHRvIHdvcmsgd2l0aCB3aGlsZSBkZWJ1Z2dpbmcgdGhlIGNvbnZlcnNpb24gc3BlYzoKKyMkKEVTSVNUQVJHRVRTKTogJChMQVRFWDJFU0lTKSAkKERPQ0ZJWEVSKSAkKEVTSVNUT09MUykKKyQoWE1MVEFSR0VUUyk6ICQoRVNJUzJNTCkKKworCisuU1VGRklYRVM6IC5lc2lzIC5lc2lzMSAudGV4IC54bWwKKworLnRleC5lc2lzMToKKwkkKExBVEVYMkVTSVMpICQoTDJFRkxBR1MpICQ8ICRACisKKy5lc2lzMS5lc2lzOgorCSQoRE9DRklYRVIpICQ8ICRACisKKy5lc2lzLnhtbDoKKwkkKEVTSVMyTUwpIC0teG1sICQ8ICRACisKKworY2xlYW46CisJcm0gLWYgKi5lc2lzICouZXNpczEKKworY2xvYmJlcjogY2xlYW4KKwlybSAtZiAqLnhtbApkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3N1cHBvcnQucHkgYi9kb2MvdG9vbHMvc3VwcG9ydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGYwNGEzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL3N1cHBvcnQucHkKQEAgLTAsMCArMSwxNDkgQEAKKyIiIk1pc2NlbGxhbmVvdXMgc3VwcG9ydCBjb2RlIHNoYXJlZCBieSBzb21lIG9mIHRoZSB0b29sIHNjcmlwdHMuCisKK1RoaXMgaW5jbHVkZXMgb3B0aW9uIHBhcnNpbmcgY29kZSwgSFRNTCBmb3JtYXR0aW5nIGNvZGUsIGFuZCBhIGNvdXBsZSBvZgordXNlZnVsIGhlbHBlcnMuCisKKyIiIgorX192ZXJzaW9uX18gPSAnJFJldmlzaW9uOiAxLjEuMS4xICQnCisKKworaW1wb3J0IGdldG9wdAoraW1wb3J0IHN0cmluZworaW1wb3J0IHN5cworCisKK2NsYXNzIE9wdGlvbnM6CisgICAgX19zaG9ydF9hcmdzID0gImE6YzpobzoiCisgICAgX19sb25nX2FyZ3MgPSBbCisgICAgICAgICMgc2NyaXB0IGNvbnRyb2xzCisgICAgICAgICJjb2x1bW5zPSIsICJoZWxwIiwgIm91dHB1dD0iLAorCisgICAgICAgICMgY29udGVudCBjb21wb25lbnRzCisgICAgICAgICJhZGRyZXNzPSIsICJpY29uc2VydmVyPSIsCisgICAgICAgICJ0aXRsZT0iLCAidXBsaW5rPSIsICJ1cHRpdGxlPSJdCisKKyAgICBvdXRwdXRmaWxlID0gIi0iCisgICAgY29sdW1ucyA9IDEKKyAgICBsZXR0ZXJzID0gMAorICAgIHVwbGluayA9ICIuLyIKKyAgICB1cHRpdGxlID0gIlB5dGhvbiBEb2N1bWVudGF0aW9uIEluZGV4IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmFyZ3MgPSBbXQorICAgICAgICBzZWxmLnZhcmlhYmxlcyA9IHsiYWRkcmVzcyI6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiaWNvbnNlcnZlciI6ICJpY29ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpbWd0eXBlIjogImdpZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aXRsZSI6ICJHbG9iYWwgTW9kdWxlIEluZGV4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgZGVmIGFkZF9hcmdzKHNlbGYsIHNob3J0PU5vbmUsIGxvbmc9Tm9uZSk6CisgICAgICAgIGlmIHNob3J0OgorICAgICAgICAgICAgc2VsZi5fX3Nob3J0X2FyZ3MgPSBzZWxmLl9fc2hvcnRfYXJncyArIHNob3J0CisgICAgICAgIGlmIGxvbmc6CisgICAgICAgICAgICBzZWxmLl9fbG9uZ19hcmdzID0gc2VsZi5fX2xvbmdfYXJncyArIGxvbmcKKworICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoYXJncywgc2VsZi5fX3Nob3J0X2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fbG9uZ19hcmdzKQorICAgICAgICBleGNlcHQgZ2V0b3B0LmVycm9yOgorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIKKyAgICAgICAgICAgIHNlbGYudXNhZ2UoKQorICAgICAgICAgICAgc3lzLmV4aXQoMikKKyAgICAgICAgc2VsZi5hcmdzID0gc2VsZi5hcmdzICsgYXJncworICAgICAgICBmb3Igb3B0LCB2YWwgaW4gb3B0czoKKyAgICAgICAgICAgIGlmIG9wdCBpbiAoIi1hIiwgIi0tYWRkcmVzcyIpOgorICAgICAgICAgICAgICAgIHZhbCA9IHN0cmluZy5zdHJpcCh2YWwpCisgICAgICAgICAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgICAgICAgICB2YWwgPSAiPGFkZHJlc3M+XG4lc1xuPC9hZGRyZXNzPlxuIiAlIHZhbAorICAgICAgICAgICAgICAgICAgICBzZWxmLnZhcmlhYmxlc1siYWRkcmVzcyJdID0gdmFsCisgICAgICAgICAgICBlbGlmIG9wdCBpbiAoIi1oIiwgIi0taGVscCIpOgorICAgICAgICAgICAgICAgIHNlbGYudXNhZ2UoKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KCkKKyAgICAgICAgICAgIGVsaWYgb3B0IGluICgiLW8iLCAiLS1vdXRwdXQiKToKKyAgICAgICAgICAgICAgICBzZWxmLm91dHB1dGZpbGUgPSB2YWwKKyAgICAgICAgICAgIGVsaWYgb3B0IGluICgiLWMiLCAiLS1jb2x1bW5zIik6CisgICAgICAgICAgICAgICAgc2VsZi5jb2x1bW5zID0gaW50KHZhbCkKKyAgICAgICAgICAgIGVsaWYgb3B0ID09ICItLXRpdGxlIjoKKyAgICAgICAgICAgICAgICBzZWxmLnZhcmlhYmxlc1sidGl0bGUiXSA9IHZhbC5zdHJpcCgpCisgICAgICAgICAgICBlbGlmIG9wdCA9PSAiLS11cGxpbmsiOgorICAgICAgICAgICAgICAgIHNlbGYudXBsaW5rID0gdmFsLnN0cmlwKCkKKyAgICAgICAgICAgIGVsaWYgb3B0ID09ICItLXVwdGl0bGUiOgorICAgICAgICAgICAgICAgIHNlbGYudXB0aXRsZSA9IHZhbC5zdHJpcCgpCisgICAgICAgICAgICBlbGlmIG9wdCA9PSAiLS1pY29uc2VydmVyIjoKKyAgICAgICAgICAgICAgICBzZWxmLnZhcmlhYmxlc1siaWNvbnNlcnZlciJdID0gdmFsLnN0cmlwKCkgb3IgIi4iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX29wdGlvbihvcHQsIHZhbCkKKyAgICAgICAgaWYgc2VsZi51cGxpbmsgYW5kIHNlbGYudXB0aXRsZToKKyAgICAgICAgICAgIHNlbGYudmFyaWFibGVzWyJ1cGxpbmthbHQiXSA9ICJ1cCIKKyAgICAgICAgICAgIHNlbGYudmFyaWFibGVzWyJ1cGxpbmtpY29uIl0gPSAidXAiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnZhcmlhYmxlc1sidXBsaW5rYWx0Il0gPSAiIgorICAgICAgICAgICAgc2VsZi52YXJpYWJsZXNbInVwbGlua2ljb24iXSA9ICJibGFuayIKKyAgICAgICAgc2VsZi52YXJpYWJsZXNbInVwbGluayJdID0gc2VsZi51cGxpbmsKKyAgICAgICAgc2VsZi52YXJpYWJsZXNbInVwdGl0bGUiXSA9IHNlbGYudXB0aXRsZQorCisgICAgZGVmIGhhbmRsZV9vcHRpb24oc2VsZiwgb3B0LCB2YWwpOgorICAgICAgICByYWlzZSBnZXRvcHQuZXJyb3IoIm9wdGlvbiAlcyBub3QgcmVjb2duaXplZCIgJSBvcHQpCisKKyAgICBkZWYgZ2V0X2hlYWRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIEhFQUQgJSBzZWxmLnZhcmlhYmxlcworCisgICAgZGVmIGdldF9mb290ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBUQUlMICUgc2VsZi52YXJpYWJsZXMKKworICAgIGRlZiBnZXRfb3V0cHV0X2ZpbGUoc2VsZiwgZmlsZW5hbWU9Tm9uZSk6CisgICAgICAgIGlmIGZpbGVuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYub3V0cHV0ZmlsZQorICAgICAgICBpZiBmaWxlbmFtZSA9PSAiLSI6CisgICAgICAgICAgICByZXR1cm4gc3lzLnN0ZG91dAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIG9wZW4oZmlsZW5hbWUsICJ3IikKKworCitOQVZJR0FUSU9OID0gJycnXAorPGRpdiBjbGFzcz0ibmF2aWdhdGlvbiI+Cis8dGFibGUgd2lkdGg9IjEwMCUlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjIiPgorPHRyPgorPHRkPjxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBhbGlnbj0iYm90dG9tIiBib3JkZXI9IjAiIGFsdD0iIgorIHNyYz0iJShpY29uc2VydmVyKXMvYmxhbmsuJShpbWd0eXBlKXMiPjwvdGQ+Cis8dGQ+PGEgaHJlZj0iJSh1cGxpbmspcyIKKyB0aXRsZT0iJSh1cHRpdGxlKXMiPjxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBhbGlnbj0iYm90dG9tIiBib3JkZXI9IjAiCisgYWx0PSIlKHVwbGlua2FsdClzIgorIHNyYz0iJShpY29uc2VydmVyKXMvJSh1cGxpbmtpY29uKXMuJShpbWd0eXBlKXMiPjwvYT48L3RkPgorPHRkPjxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBhbGlnbj0iYm90dG9tIiBib3JkZXI9IjAiIGFsdD0iIgorIHNyYz0iJShpY29uc2VydmVyKXMvYmxhbmsuJShpbWd0eXBlKXMiPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9IjEwMCUlIj4lKHRpdGxlKXM8L3RkPgorPHRkPjxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBhbGlnbj0iYm90dG9tIiBib3JkZXI9IjAiIGFsdD0iIgorIHNyYz0iJShpY29uc2VydmVyKXMvYmxhbmsuJShpbWd0eXBlKXMiPjwvdGQ+Cis8dGQ+PGltZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIGFsaWduPSJib3R0b20iIGJvcmRlcj0iMCIgYWx0PSIiCisgc3JjPSIlKGljb25zZXJ2ZXIpcy9ibGFuay4lKGltZ3R5cGUpcyI+PC90ZD4KKzx0ZD48aW1nIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgYWxpZ249ImJvdHRvbSIgYm9yZGVyPSIwIiBhbHQ9IiIKKyBzcmM9IiUoaWNvbnNlcnZlcilzL2JsYW5rLiUoaW1ndHlwZSlzIj48L3RkPgorPC90cj48L3RhYmxlPgorPGIgY2xhc3M9Im5hdmxhYmVsIj5VcDo8L2I+IDxzcGFuIGNsYXNzPSJzZWN0cmVmIj48YSBocmVmPSIlKHVwbGluaylzIgorIHRpdGxlPSIlKHVwdGl0bGUpcyI+JSh1cHRpdGxlKXM8L0E+PC9zcGFuPgorPGJyPjwvZGl2PgorJycnCisKK0hFQUQgPSAnJydcCis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPiUodGl0bGUpczwvdGl0bGU+CisgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIlKHRpdGxlKXMiPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKyAgPGxpbmsgcmVsPSJTVFlMRVNIRUVUIiBocmVmPSJsaWIvbGliLmNzcyI+Cis8L2hlYWQ+Cis8Ym9keT4KKycnJyArIE5BVklHQVRJT04gKyAnJydcCis8aHI+CisKKzxoMj4lKHRpdGxlKXM8L2gyPgorCisnJycKKworVEFJTCA9ICI8aHI+XG4iICsgTkFWSUdBVElPTiArICcnJ1wKKyUoYWRkcmVzcylzPC9ib2R5PgorPC9odG1sPgorJycnCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvdGVtcGxhdGVzL2hvd3RvLnRleCBiL2RvYy90b29scy90ZW1wbGF0ZXMvaG93dG8udGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYjIxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvdGVtcGxhdGVzL2hvd3RvLnRleApAQCAtMCwwICsxLDEwNSBAQAorXGRvY3VtZW50Y2xhc3N7aG93dG99CisKKyUgIFRoaXMgaXMgYSB0ZW1wbGF0ZSBmb3Igc2hvcnQgb3IgbWVkaXVtLXNpemUgUHl0aG9uLXJlbGF0ZWQgZG9jdW1lbnRzLCAKKyUgbW9zdGx5IG5vdGFibHkgdGhlIHNlcmllcyBvZiBIT1dUT3MsIGJ1dCBpdCBjYW4gYmUgdXNlZCBmb3IgYW55CislIGRvY3VtZW50IHlvdSBsaWtlLiAgIAorCislIFRoZSB0aXRsZSBzaG91bGQgYmUgZGVzY3JpcHRpdmUgZW5vdWdoIGZvciBwZW9wbGUgdG8gYmUgYWJsZSB0byBmaW5kCislIHRoZSByZWxldmFudCBkb2N1bWVudC4gCitcdGl0bGV7U3BhbW1pZnlpbmcgU3Byb2NrZXRzIGluIFB5dGhvbn0KKworJSBJbmNyZW1lbnQgdGhlIHJlbGVhc2UgbnVtYmVyIHdoZW5ldmVyIHNpZ25pZmljYW50IGNoYW5nZXMgYXJlIG1hZGUuCislIFRoZSBhdXRob3IgYW5kL29yIGVkaXRvciBjYW4gZGVmaW5lICdzaWduaWZpY2FudCcgaG93ZXZlciB0aGV5IGxpa2UuCitccmVsZWFzZXswLjAwfQorCislIEF0IG1pbmltdW0sIGdpdmUgeW91ciBuYW1lIGFuZCBhbiBlLW1haWwgYWRkcmVzcy4gIFlvdSBjYW4gaW5jbHVkZSBhCislIHNuYWlsLW1haWwgYWRkcmVzcyBpZiB5b3UgbGlrZS4KK1xhdXRob3J7TWUsICdjYXVzZSBJIHdyb3RlIGl0fQorXGF1dGhvcmFkZHJlc3N7TWUsICdjYXVzZSBJJ20gc2VsZi1lbXBsb3llZC59CisKK1xiZWdpbntkb2N1bWVudH0KK1xtYWtldGl0bGUKKworJSBUaGlzIG1ha2VzIHRoZSBBYnN0cmFjdCBnbyBvbiBhIHNlcGFyYXRlIHBhZ2UgaW4gdGhlIEhUTUwgdmVyc2lvbjsKKyUgaWYgYSBjb3B5cmlnaHQgbm90aWNlIGlzIHVzZWQsIGl0IHNob3VsZCBnbyBpbW1lZGlhdGVseSBhZnRlciB0aGlzLgorJQorXGlmaHRtbAorXGNoYXB0ZXIqe0Zyb250IE1hdHRlclxsYWJlbHtmcm9udH19CitcZmkKKworJSBDb3B5cmlnaHQgc3RhdGVtZW50IHNob3VsZCBnbyBoZXJlLCBpZiBuZWVkZWQuCislIC4uLgorCislIFRoZSBhYnN0cmFjdCBzaG91bGQgYmUgYSBwYXJhZ3JhcGggb3IgdHdvIGxvbmcsIGFuZCBkZXNjcmliZSB0aGUKKyUgc2NvcGUgb2YgdGhlIGRvY3VtZW50LgorXGJlZ2lue2Fic3RyYWN0fQorXG5vaW5kZW50CitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gc3BhbW1pZnkgc3Byb2NrZXRzLiAgSXQgaXMgYSB1c2VmdWwKK2V4YW1wbGUgb2YgYSBQeXRob24gSE9XVE8gZG9jdW1lbnQuICBJdCBpcyBub3QgZGVwZW5kZW50IG9uIGFueQorcGFydGljdWxhciBzcHJvY2tldCBpbXBsZW1lbnRhdGlvbiwgYW5kIGluY2x1ZGVzIGEgUHl0aG9uLWJhc2VkCitpbXBsZW1lbnRhdGlvbiBpbiB0aGUgXG1vZHVsZXtzcHJ1bmtpdH0gbW9kdWxlLgorXGVuZHthYnN0cmFjdH0KKworXHRhYmxlb2Zjb250ZW50cworCitTcGFtbWlmeWluZyBzcHJvY2tldHMgZnJvbSBQeXRob24gaXMgYm90aCBmdW4gYW5kIGVudGVydGFpbmluZy4KK0FwcGx5aW5nIHRoZSB0ZWNobmlxdWVzIGRlc2NyaWJlZCBoZXJlLCB5b3UgY2FuIGFsc28gZmlsbCB5b3VyIGhhcmQKK2Rpc2sgcXVpdGUgZWZmZWN0aXZlbHkuCisKK1xzZWN0aW9ue1doYXQgaXMgU3Byb2NrZXQgU3BhbW1pZmljYXRpb24/fQorCitZb3UgaGF2ZSB0byBhc2s/ICBJdCdzIHRoZSBvbmx5IHRoaW5nIHRvIGRvIHRvIHlvdXIgc3Byb2NrZXRzIQorCisKK1xzZWN0aW9ue1doeSBVc2UgUHl0aG9uP30KKworUHl0aG9uIGlzIGFuIGV4Y2VsbGVudCBsYW5ndWFnZSBmcm9tIHdoaWNoIHRvIHNwYW1taWZ5IHlvdXIgc3Byb2NrZXRzCitzaW5jZSB5b3UgY2FuIGRvIGl0IG9uIGFueSBwbGF0Zm9ybS4KKworCitcc2VjdGlvbntTb2Z0d2FyZSBSZXF1aXJlbWVudHN9CisKK1lvdSBuZWVkIHRvIGhhdmUgdGhlIGZvbGxvd2luZyBzb2Z0d2FyZSBpbnN0YWxsZWQ6CisKKyUgVGhlIHtpdGVtaXplfSBlbnZpcm9ubWVudCB1c2VzIGEgYnVsbGV0IGZvciBlYWNoIFxpdGVtLiAgSWYgeW91IHdhbnQgdGhlIAorJSBcaXRlbSdzIG51bWJlcmVkLCB1c2UgdGhlIHtlbnVtZXJhdGV9IGVudmlyb25tZW50IGluc3RlYWQuCitcYmVnaW57aXRlbWl6ZX0KKyAgXGl0ZW0gIFB5dGhvbiAxLjkuCisgIFxpdGVtICBTb21lIHNwcm9ja2V0IGRlZmluaXRpb24gZmlsZXMuCisgIFxpdGVtICBBdCBsZWFzdCBvbmUgc3Byb2NrZXQgc3lzdGVtIGltcGxlbWVudGF0aW9uLgorXGVuZHtpdGVtaXplfQorCitOb3RlIHRoYXQgdGhlIFxtb2R1bGV7c3BydW5raXR9IGlzIHByb3ZpZGVkIHdpdGggdGhpcyBwYWNrYWdlIGFuZAoraW1wbGVtZW50cyBBY3RpdmVTcHJvY2tldHMgaW4gUHl0aG9uLgorCisKKyUgVGhlIHByZWNlZGluZyBzZWN0aW9ucyB3aWxsIGhhdmUgYmVlbiB3cml0dGVuIGluIGEgZ2VudGxlciwKKyUgaW50cm9kdWN0b3J5IHN0eWxlLiAgWW91IG1heSBhbHNvIHdpc2ggdG8gaW5jbHVkZSBhIHJlZmVyZW5jZQorJSBzZWN0aW9uLCBkb2N1bWVudGluZyBhbGwgdGhlIGZ1bmN0aW9ucy9leGNlcHRpb25zL2NvbnN0YW50cy4KKyUgT2Z0ZW4sIHRoZXNlIHdpbGwgYmUgcGxhY2VkIGluIHNlcGFyYXRlIGZpbGVzIGFuZCBpbnB1dCBsaWtlIHRoaXM6CisKK1xpbnB1dHttb2R1bGV9CisKKworXGFwcGVuZGl4CisKK1xzZWN0aW9ue1RoaXMgaXMgYW4gQXBwZW5kaXh9CisKK1RvIGNyZWF0ZSBhbiBhcHBlbmRpeCBpbiBhIFB5dGhvbiBIT1dUTyBkb2N1bWVudCwgdXNlIG1hcmt1cCBsaWtlCit0aGlzOgorCitcYmVnaW57dmVyYmF0aW19CitcYXBwZW5kaXgKKworXHNlY3Rpb257VGhpcyBpcyBhbiBBcHBlbmRpeH0KKworVG8gY3JlYXRlIGFuIGFwcGVuZGl4IGluIGEgUHl0aG9uIEhPV1RPIGRvY3VtZW50LCAuLi4uCisKKworXHNlY3Rpb257VGhpcyBpcyBhbm90aGVyfQorCitKdXN0IGFkZCBhbm90aGVyIFxzZWN0aW9ue30sIGJ1dCBkb24ndCBzYXkgXGFwcGVuZGl4IGFnYWluLgorXGVuZHt2ZXJiYXRpbX0KKworCitcZW5ke2RvY3VtZW50fQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3RlbXBsYXRlcy9tYW51YWwudGV4IGIvZG9jL3Rvb2xzL3RlbXBsYXRlcy9tYW51YWwudGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YzhlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvdGVtcGxhdGVzL21hbnVhbC50ZXgKQEAgLTAsMCArMSw4MiBAQAorXGRvY3VtZW50Y2xhc3N7bWFudWFsfQorCitcdGl0bGV7QmlnIFB5dGhvbiBNYW51YWx9CisKK1xhdXRob3J7WW91ciBOYW1lIEhlcmV9CisKKyUgUGxlYXNlIGF0IGxlYXN0IGluY2x1ZGUgYSBsb25nLWxpdmVkIGVtYWlsIGFkZHJlc3M7CislIHRoZSByZXN0IGlzIGF0IHlvdXIgZGlzY3JldGlvbi4KK1xhdXRob3JhZGRyZXNzeworCU9yZ2FuaXphdGlvbiBuYW1lLCBpZiBhcHBsaWNhYmxlIFxcCisJU3RyZWV0IGFkZHJlc3MsIGlmIHlvdSB3YW50IHRvIHVzZSBpdCBcXAorCUUtbWFpbDogXGVtYWlse3lvdXItZW1haWxAeW91ci5kb21haW59Cit9CisKK1xkYXRle0FwcmlsIDMwLCAxOTk5fQkJJSB1cGRhdGUgYmVmb3JlIHJlbGVhc2UhCisJCQkJJSBVc2UgYW4gZXhwbGljaXQgZGF0ZSBzbyB0aGF0IHJlZm9ybWF0dGluZworCQkJCSUgZG9lc24ndCBjYXVzZSBhIG5ldyBkYXRlIHRvIGJlIHVzZWQuICBTZXR0aW5nCisJCQkJJSB0aGUgZGF0ZSB0byBcdG9kYXkgY2FuIGJlIHVzZWQgZHVyaW5nIGRyYWZ0CisJCQkJJSBzdGFnZXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gaGFuZGxlIHZlcnNpb25zLgorCitccmVsZWFzZXt4Lnl9CQkJJSByZWxlYXNlIHZlcnNpb247IHRoaXMgaXMgdXNlZCB0byBkZWZpbmUgdGhlCisJCQkJJSBcdmVyc2lvbiBtYWNybworCitcbWFrZWluZGV4CQkJJSB0ZWxsIFxpbmRleCB0byBhY3R1YWxseSB3cml0ZSB0aGUgLmlkeCBmaWxlCitcbWFrZW1vZGluZGV4CQkJJSBJZiB0aGlzIGNvbnRhaW5zIGEgbG90IG9mIG1vZHVsZSBzZWN0aW9ucy4KKworCitcYmVnaW57ZG9jdW1lbnR9CisKK1xtYWtldGl0bGUKKworJSBUaGlzIG1ha2VzIHRoZSBjb250ZW50cyBtb3JlIGFjY2Vzc2libGUgZnJvbSB0aGUgZnJvbnQgcGFnZSBvZiB0aGUgSFRNTC4KK1xpZmh0bWwKK1xjaGFwdGVyKntGcm9udCBNYXR0ZXJcbGFiZWx7ZnJvbnR9fQorXGZpCisKKyVcaW5wdXR7Y29weXJpZ2h0fQorCitcYmVnaW57YWJzdHJhY3R9CisKK1xub2luZGVudAorQmlnIFB5dGhvbiBpcyBhIHNwZWNpYWwgdmVyc2lvbiBvZiBQeXRob24gZm9yIHVzZXJzIHdobyByZXF1aXJlIGxhcmdlciAKK2tleXMgb24gdGhlaXIga2V5Ym9hcmRzLiAgSXQgYWNjb21vZGF0ZXMgdGhlaXIgc3BlY2lhbCBuZWVkcyBieSAuLi4KKworXGVuZHthYnN0cmFjdH0KKworXHRhYmxlb2Zjb250ZW50cworCisKK1xjaGFwdGVyey4uLn0KKworTXkgY2hhcHRlci4KKworCitcYXBwZW5kaXgKK1xjaGFwdGVyey4uLn0KKworTXkgYXBwZW5kaXguCisKK1RoZSBcY29kZXtcZSBhcHBlbmRpeH0gbWFya3VwIG5lZWQgbm90IGJlIHJlcGVhdGVkIGZvciBhZGRpdGlvbmFsCithcHBlbmRpY2VzLgorCisKKyUKKyUgIFRoZSB1Z2x5ICIlYmVnaW57bGF0ZXhvbmx5fSIgcHNldWRvLWVudmlyb25tZW50cyBhcmUgcmVhbGx5IGp1c3QgdG8KKyUgIGtlZXAgTGFUZVgySFRNTCBxdWlldCBkdXJpbmcgdGhlIFxyZW5ld2NvbW1hbmR7fSBtYWNyb3M7IHRoZXkncmUKKyUgIG5vdCByZWFsbHkgdmFsdWFibGUuCislCislICBJZiB5b3UgZG9uJ3Qgd2FudCB0aGUgTW9kdWxlIEluZGV4LCB5b3UgY2FuIHJlbW92ZSBhbGwgb2YgdGhpcyB1cAorJSAgdW50aWwgdGhlIHNlY29uZCBcaW5wdXQgbGluZS4KKyUKKyViZWdpbntsYXRleG9ubHl9CitccmVuZXdjb21tYW5ke1xpbmRleG5hbWV9e01vZHVsZSBJbmRleH0KKyVlbmR7bGF0ZXhvbmx5fQorXGlucHV0e21vZFxqb2JuYW1lLmluZH0JCSUgTW9kdWxlIEluZGV4CisKKyViZWdpbntsYXRleG9ubHl9CitccmVuZXdjb21tYW5ke1xpbmRleG5hbWV9e0luZGV4fQorJWVuZHtsYXRleG9ubHl9CitcaW5wdXR7XGpvYm5hbWUuaW5kfQkJCSUgSW5kZXgKKworXGVuZHtkb2N1bWVudH0KZGlmZiAtLWdpdCBhL2RvYy90b29scy90ZW1wbGF0ZXMvbW9kdWxlLnRleCBiL2RvYy90b29scy90ZW1wbGF0ZXMvbW9kdWxlLnRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Q3NjlkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL3RlbXBsYXRlcy9tb2R1bGUudGV4CkBAIC0wLDAgKzEsMTYzIEBACislIFRlbXBsYXRlIGZvciBhIGxpYnJhcnkgbWFudWFsIHNlY3Rpb24uCislIFBMRUFTRSBSRU1PVkUgVEhFIENPTU1FTlRTIEFGVEVSIFVTSU5HIFRIRSBURU1QTEFURQorCislID09PT0gMC4gPT09PQorJSBDb3B5IHRoaXMgZmlsZSB0byA8bXlkaXI+L2xpYjxteW1vZHVsZT4udGV4LCBhbmQgZWRpdCB0aGF0IGZpbGUKKyUgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMgYmVsb3cuCisKKworJSA9PT09IDEuID09PT0KKyUgVGhlIHNlY3Rpb24gcHJvbG9ndWUuICBHaXZlIHRoZSBzZWN0aW9uIGEgdGl0bGUgYW5kIHByb3ZpZGUgc29tZQorJSBtZXRhLWluZm9ybWF0aW9uLiAgUmVmZXJlbmNlcyB0byB0aGUgbW9kdWxlIHNob3VsZCB1c2UKKyUgXHJlZmJpbW9kaW5kZXgsIFxyZWZzdG1vZGluZGV4LCBccmVmZXhtb2RpbmRleCBvciBccmVmbW9kaW5kZXgsIGFzCislIGFwcHJvcHJpYXRlLgorCitcc2VjdGlvbntcbW9kdWxle3NwYW19IC0tLQorICAgICAgICAgU2hvcnQgZGVzY3JpdGlvbiwgZm9yIHNlY3Rpb24gdGl0bGV9CisKKyUgQ2hvb3NlIG9uZSBvZiB0aGVzZSB0byBzcGVjaWZ5IHRoZSBtb2R1bGUgbW9kdWxlIG5hbWUuICBJZiB0aGVyZSdzCislIGFuIHVuZGVyc2NvcmUgaW4gdGhlIG5hbWUsIHVzZQorJSBcZGVjbGFyZW1vZHVsZVttb2RuYW1lXXsuLi59e21vZF9uYW1lfSBpbnN0ZWFkLgorJQorXGRlY2xhcmVtb2R1bGV7YnVpbHRpbn17c3BhbX0JCSUgc3RhbmRhcmQgbGlicmFyeSwgaW4gQworXGRlY2xhcmVtb2R1bGV7c3RhbmRhcmR9e3NwYW19CQklIHN0YW5kYXJkIGxpYnJhcnksIGluIFB5dGhvbgorXGRlY2xhcmVtb2R1bGV7ZXh0ZW5zaW9ufXtzcGFtfQkJJSBub3Qgc3RhbmRhcmQsIGluIEMKK1xkZWNsYXJlbW9kdWxle317c3BhbX0JCQklIG5vdCBzdGFuZGFyZCwgaW4gUHl0aG9uCisKKyUgUG9ydGFiaWxpdHkgc3RhdGVtZW50OiAgVW5jb21tZW50IGFuZCBmaWxsIGluIHRoZSBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUKKyUgYXZhaWxhYmlsaXR5IG9mIHRoZSBtb2R1bGUuICBUaGUgcGFyYW1ldGVyIGNhbiBiZSBVbml4LCBJUklYLCBTdW5PUywgTWFjLAorJSBXaW5kb3dzLCBvciBsb3RzIG9mIG90aGVyIHN0dWZmLiAgV2hlbiBgYE1hYycnIGlzIHNwZWNpZmllZCwgdGhlIGF2YWlsYWJpbGl0eQorJSBzdGF0ZW1lbnQgd2lsbCBzYXkgYGBNYWNpbnRvc2gnJyBhbmQgdGhlIE1vZHVsZSBJbmRleCBtYXkgc2F5IGBgTWFjJycuCislIFBsZWFzZSB1c2UgYSBuYW1lIHRoYXQgaGFzIGFscmVhZHkgYmVlbiB1c2VkIHdoZW5ldmVyIGFwcGxpY2FibGUuICBJZiB0aGlzCislIGlzIG9taXR0ZWQsIG5vIGF2YWlsYWJpbGl0eSBzdGF0ZW1lbnQgaXMgcHJvZHVjZWQgb3IgaW1wbGllZC4KKyUKKyUgICBccGxhdGZvcm17VU5JWH0KKworJSBUaGVzZSBhcHBseSB0byBhbGwgbW9kdWxlczoKKworXG1vZHVsZWF1dGhvcntuYW1lfXtlbWFpbH0JCSUgQXV0aG9yIG9mIHRoZSBtb2R1bGUgY29kZTsKKwkJCQkJJSBvbWl0IGlmIG5vdCBrbm93bi4KK1xzZWN0aW9uYXV0aG9ye25hbWV9e2VtYWlsfQkJJSBBdXRob3Igb2YgdGhlIGRvY3VtZW50YXRpb24sCisJCQkJCSUgZXZlbiBpZiBub3QgYSBtb2R1bGUgc2VjdGlvbi4KKworCislIExlYXZlIGF0IGxlYXN0IG9uZSBibGFuayBsaW5lIGFmdGVyIHRoaXMsIHRvIHNpbXBsaWZ5IGFkLWhvYyB0b29scworJSB0aGF0IGFyZSBzb21ldGltZXMgdXNlZCB0byBtYXNzYWdlIHRoZXNlIGZpbGVzLgorXG1vZHVsZXN5bm9wc2lze1RoaXMgaXMgYSBvbmUtbGluZSBkZXNjcml0aW9uLCBmb3IgdGhlIGNoYXB0ZXIgaGVhZGVyLn0KKworCislID09PT0gMi4gPT09PQorJSBHaXZlIGEgc2hvcnQgb3ZlcnZpZXcgb2Ygd2hhdCB0aGUgbW9kdWxlIGRvZXMuCislIElmIGl0IGlzIHBsYXRmb3JtIHNwZWNpZmljLCBtZW50aW9uIHRoaXMuCislIE1lbnRpb24gb3RoZXIgaW1wb3J0YW50IHJlc3RyaWN0aW9ucyBvciBnZW5lcmFsIG9wZXJhdGluZyBwcmluY2lwbGVzLgorJSBGb3IgZXhhbXBsZToKKworVGhlIFxtb2R1bGV7c3BhbX0gbW9kdWxlIGRlZmluZXMgb3BlcmF0aW9ucyBmb3IgaGFuZGxpbmcgY2FucyBvZiBTcGFtLgorSXQga25vd3MgdGhlIGZvdXIgZ2VuZXJhbGx5IGF2YWlsYWJsZSBTcGFtIHZhcmlldGllcyBhbmQgdW5kZXJzdGFuZHMKK2JvdGggY2FuIHNpemVzLgorCitCZWNhdXNlIHNwYW1pZmljYXRpb24gcmVxdWlyZXMgXFVOSVh7fSBwcm9jZXNzIG1hbmFnZW1lbnQsIHRoZSBtb2R1bGUKK2lzIG9ubHkgYXZhaWxhYmxlIG9uIGdlbnVpbmUgXFVOSVh7fSBzeXN0ZW1zLgorCisKKyUgPT09PSAzLiA9PT09CislIExpc3QgdGhlIHB1YmxpYyBmdW5jdGlvbnMgZGVmaW5lZCBieSB0aGUgbW9kdWxlLiAgQmVnaW4gd2l0aCBhCislIHN0YW5kYXJkIHBocmFzZS4gIFlvdSBtYXkgYWxzbyBsaXN0IHRoZSBleGNlcHRpb25zIGFuZCBvdGhlciBkYXRhCislIGl0ZW1zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSwgaW5zb2ZhciBhcyB0aGV5IGFyZSBpbXBvcnRhbnQgZm9yIHRoZQorJSB1c2VyLgorCitUaGUgXG1vZHVsZXtzcGFtfSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworJSAtLS0tIDMuMS4gLS0tLQorJSBGb3IgZWFjaCBmdW5jdGlvbiwgdXNlIGEgYGBmdW5jZGVzYycnIGJsb2NrLiAgVGhpcyBoYXMgZXhhY3RseSB0d28KKyUgcGFyYW1ldGVycyAoZWFjaCBwYXJhbWV0ZXJzIGlzIGNvbnRhaW5lZCBpbiBhIHNldCBvZiBjdXJseSBicmFjZXMpOgorJSB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBmdW5jdGlvbiBuYW1lICh0aGlzIGF1dG9tYXRpY2FsbHkKKyUgZ2VuZXJhdGVzIGFuIGluZGV4IGVudHJ5KTsgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIGZ1bmN0aW9uJ3MKKyUgYXJndW1lbnQgbGlzdC4gIElmIHRoZXJlIGFyZSBubyBhcmd1bWVudHMsIHVzZSBhbiBlbXB0eSBwYWlyIG9mCislIGN1cmx5IGJyYWNlcy4gIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIHNlcGFyYXRlIHRoZQorJSBhcmd1bWVudHMgd2l0aCBiYWNrc2xhc2gtY29tbWEuICBPcHRpb25hbCBwYXJ0cyBvZiB0aGUgcGFyYW1ldGVyCislIGxpc3QgYXJlIGNvbnRhaW5lZCBpbiBcb3B0aW9uYWx7Li4ufSAodGhpcyBnZW5lcmF0ZXMgYSBzZXQgb2Ygc3F1YXJlCislIGJyYWNrZXRzIGFyb3VuZCBpdHMgcGFyYW1ldGVyKS4gIEFyZ3VtZW50cyBhcmUgYXV0b21hdGljYWxseSBzZXQgaW4KKyUgaXRhbGljcyBpbiB0aGUgcGFyYW1ldGVyIGxpc3QuICBFYWNoIGFyZ3VtZW50IHNob3VsZCBiZSBtZW50aW9uZWQgYXQKKyUgbGVhc3Qgb25jZSBpbiB0aGUgZGVzY3JpcHRpb247IGVhY2ggdXNhZ2UgKGV2ZW4gaW5zaWRlIFxjb2Rley4uLn0pCislIHNob3VsZCBiZSBlbmNsb3NlZCBpbiBcdmFyey4uLn0uCisKK1xiZWdpbntmdW5jZGVzY317b3Blbn17ZmlsZW5hbWVcb3B0aW9uYWx7LCBtb2RlXG9wdGlvbmFseywgYnVmZmVyc2l6ZX19fQorT3BlbiB0aGUgZmlsZSBcdmFye2ZpbGVuYW1lfSBhcyBhIGNhbiBvZiBTcGFtLiAgVGhlIG9wdGlvbmFsCitcdmFye21vZGV9IGFuZCBcdmFye2J1ZmZlcnNpemV9IGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSByZWFkL3dyaXRlIG1vZGUKKyhcY29kZXsncid9IChkZWZhdWx0KSBvciBcY29kZXsndyd9KSBhbmQgdGhlIGJ1ZmZlciBzaXplIChkZWZhdWx0Ogorc3lzdGVtIGRlcGVuZGVudCkuCitcZW5ke2Z1bmNkZXNjfQorCislIC0tLS0gMy4yLiAtLS0tCislIERhdGEgaXRlbXMgYXJlIGRlc2NyaWJlZCB1c2luZyBhIGBgZGF0YWRlc2MnJyBibG9jay4gIFRoaXMgaGFzIG9ubHkKKyUgb25lIHBhcmFtZXRlcjogdGhlIGl0ZW0ncyBuYW1lLgorCitcYmVnaW57ZGF0YWRlc2N9e2NhbnNpemV9CitUaGUgZGVmYXVsdCBjYW4gc2l6ZSwgaW4gb3VuY2VzLiAgTGVnYWwgdmFsdWVzIGFyZSA3IGFuZCAxMi4gIFRoZQorZGVmYXVsdCB2YXJpZXMgcGVyIHN1cGVybWFya2V0LiAgVGhpcyB2YXJpYWJsZSBzaG91bGQgbm90IGJlIGNoYW5nZWQKK29uY2UgdGhlIFxmdW5jdGlvbntvcGVuKCl9IGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZC4KK1xlbmR7ZGF0YWRlc2N9CisKKyUgLS0tIDMuMy4gLS0tCislIEV4Y2VwdGlvbnMgYXJlIGRlc2NyaWJlZCB1c2luZyBhIGBgZXhjZGVzYycnIGJsb2NrLiAgVGhpcyBoYXMgb25seQorJSBvbmUgcGFyYW1ldGVyOiB0aGUgZXhjZXB0aW9uIG5hbWUuICBFeGNlcHRpb25zIGRlZmluZWQgYXMgY2xhc3NlcyBpbgorJSB0aGUgc291cmNlIGNvZGUgc2hvdWxkIGJlIGRvY3VtZW50ZWQgdXNpbmcgdGhpcyBlbnZpcm9ubWVudCwgYnV0CislIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgbXVzdCBiZSBvbW1pdHRlZC4KKworXGJlZ2lue2V4Y2Rlc2N9e2Vycm9yfQorRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGFuIG9wZXJhdGlvbiBmYWlscyBmb3IgYSBTcGFtIHNwZWNpZmljIHJlYXNvbi4KK1RoZSBleGNlcHRpb24gYXJndW1lbnQgaXMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgcmVhc29uIG9mIHRoZQorZmFpbHVyZS4KK1xlbmR7ZXhjZGVzY30KKworJSAtLS0tIDMuNC4gLS0tLQorJSBPdGhlciBzdGFuZGFyZCBlbnZpcm9ubWVudHM6CislCislICBjbGFzc2Rlc2MJLSBQeXRob24gY2xhc3Nlczsgc2FtZSBhcmd1bWVudHMgYXJlIGZ1bmNkZXNjCislICBtZXRob2RkZXNjCS0gbWV0aG9kcywgbGlrZSBmdW5jZGVzYyBidXQgaGFzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciAKKyUJCSAgdG8gZ2l2ZSB0aGUgdHlwZSBuYW1lOiBcYmVnaW57bWV0aG9kZGVzY31bbXl0eXBlXXtuYW1lfXthcmdzfQorJQkJICBCeSBkZWZhdWx0LCB0aGUgdHlwZSBuYW1lIHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlCislCQkgIGxhc3QgY2xhc3MgZGVmaW5lZCB1c2luZyBjbGFzc2Rlc2MuICBUaGUgdHlwZSBuYW1lCislCQkgIGlzIHJlcXVpcmVkIGlmIHRoZSB0eXBlIGlzIGltcGxlbWVudGVkIGluIEMgKGJlY2F1c2UgCislCQkgIHRoZXJlJ3Mgbm8gY2xhc3NkZXNjKSBvciBpZiB0aGUgY2xhc3MgaXNuJ3QgZGlyZWN0bHkgCislCQkgIGRvY3VtZW50ZWQgKGlmIGl0J3MgcHJpdmF0ZSkuCislICBtZW1iZXJkZXNjCS0gZGF0YSBtZW1iZXJzLCBsaWtlIGRhdGFkZXNjLCBidXQgd2l0aCBhbiBvcHRpb25hbAorJQkJICB0eXBlIG5hbWUgbGlrZSBtZXRob2RkZXNjLgorCisKKyUgPT09PSA0LiA9PT09CislIE5vdyBpcyBwcm9iYWJseSBhIGdvb2QgdGltZSBmb3IgYSBjb21wbGV0ZSBleGFtcGxlLiAgKEFsdGVybmF0aXZlbHksCislIGFuIGV4YW1wbGUgZ2l2aW5nIHRoZSBmbGF2b3Igb2YgdGhlIG1vZHVsZSBtYXkgYmUgZ2l2ZW4gYmVmb3JlIHRoZQorJSBkZXRhaWxlZCBsaXN0IG9mIGZ1bmN0aW9ucy4pCisKK1xzdWJzZWN0aW9ue0V4YW1wbGUgXGxhYmVse3NwYW0tZXhhbXBsZX19CisKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgaG93IHRvIG9wZW4gYSBjYW4gb2Ygc3BhbSB1c2luZyB0aGUKK1xtb2R1bGV7c3BhbX0gbW9kdWxlLgorCitcYmVnaW57dmVyYmF0aW19Cis+Pj4gaW1wb3J0IHNwYW0KKz4+PiBjYW4gPSBzcGFtLm9wZW4oJy9ldGMvcGFzc3dkJykKKz4+PiBjYW4uZW1wdHkoKQorPj4+IGNhbi5jbG9zZSgpCitcZW5ke3ZlcmJhdGltfQorJSBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gdHJhaWxpbmcgIj4+PiAiIHByb21wdCBzaG93bi4KKworJSA9PT09IDUuID09PT0KKyUgSWYgeW91ciBtb2R1bGUgZGVmaW5lcyBuZXcgb2JqZWN0IHR5cGVzIChmb3IgYSBidWlsdC1pbiBtb2R1bGUpIG9yCislIGNsYXNzZXMgKGZvciBhIG1vZHVsZSB3cml0dGVuIGluIFB5dGhvbiksIHlvdSBzaG91bGQgbGlzdCB0aGUKKyUgbWV0aG9kcyBhbmQgaW5zdGFuY2UgdmFyaWFibGVzIChpZiBhbnkpIG9mIGVhY2ggdHlwZSBvciBjbGFzcyBpbiBhCislIHNlcGFyYXRlIHN1YnNlY3Rpb24uCisKK1xzdWJzZWN0aW9ue1NwYW0gT2JqZWN0c30KK1xsYWJlbHtzcGFtLW9iamVjdHN9CislIFRoaXMgbGFiZWwgaXMgZ2VuZXJhbGx5IHVzZWZ1bCBmb3IgcmVmZXJlbmNpbmcgdGhpcyBzZWN0aW9uLCBidXQgaXMKKyUgYWxzbyB1c2VkIHRvIGdpdmUgYSBmaWxlbmFtZSB3aGVuIGdlbmVyYXRpbmcgSFRNTC4KKworU3BhbSBvYmplY3RzLCBhcyByZXR1cm5lZCBieSBcZnVuY3Rpb257b3BlbigpfSBhYm92ZSwgaGF2ZSB0aGUKK2ZvbGxvd2luZyBtZXRob2RzOgorCitcYmVnaW57bWV0aG9kZGVzY31bc3BhbV17ZW1wdHl9e30KK0VtcHR5IHRoZSBjYW4gaW50byB0aGUgdHJhc2guCitcZW5ke21ldGhvZGRlc2N9CmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvdGV4aW5wdXRzL2JvaWxlcnBsYXRlLnRleCBiL2RvYy90b29scy90ZXhpbnB1dHMvYm9pbGVycGxhdGUudGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOTZkYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvdGV4aW5wdXRzL2JvaWxlcnBsYXRlLnRleApAQCAtMCwwICsxLDEwIEBACitcYXV0aG9ye0d1aWRvIHZhbiBSb3NzdW1cXAorCUZyZWQgTC4gRHJha2UsIEpyLiwgZWRpdG9yfQorXGF1dGhvcmFkZHJlc3N7CisJXHN0cm9uZ3tQeXRob25MYWJzfVxcCisJRS1tYWlsOiBcZW1haWx7cHl0aG9uLWRvY3NAcHl0aG9uLm9yZ30KK30KKworXGRhdGV7QXByaWwgMTUsIDIwMDF9CQklIFhYWCB1cGRhdGUgYmVmb3JlIHJlbGVhc2UhCitccmVsZWFzZXsyLjF9CQkJJSBzb2Z0d2FyZSByZWxlYXNlLCBub3QgZG9jdW1lbnRhdGlvbgorXHNldHNob3J0dmVyc2lvbnsyLjF9CQklIG1ham9yLm1pbm9yIG9ubHkgZm9yIHNvZnR3YXJlCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvdGV4aW5wdXRzL2NvcHlyaWdodC50ZXggYi9kb2MvdG9vbHMvdGV4aW5wdXRzL2NvcHlyaWdodC50ZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0NWRjZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy90ZXhpbnB1dHMvY29weXJpZ2h0LnRleApAQCAtMCwwICsxLDEwOCBAQAorXGJlZ2lue3NtYWxsfQorQ29weXJpZ2h0IFxjb3B5cmlnaHR7fSAyMDAxIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworQ29weXJpZ2h0IFxjb3B5cmlnaHR7fSAyMDAwIEJlT3Blbi5jb20uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitDb3B5cmlnaHQgXGNvcHlyaWdodHt9IDE5OTUtMjAwMCBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitDb3B5cmlnaHQgXGNvcHlyaWdodHt9IDE5OTEtMTk5NSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCislJWJlZ2lue2xhdGV4b25seX0KK1x2c2tpcCA0bW0KKyUlZW5ke2xhdGV4b25seX0KKworXGNlbnRlcmxpbmV7XHN0cm9uZ3tCRU9QRU4uQ09NIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBQWVRIT04gMi4wfX0KKworXGNlbnRlcmxpbmV7XHN0cm9uZ3tCRU9QRU4gUFlUSE9OIE9QRU4gU09VUkNFIExJQ0VOU0UgQUdSRUVNRU5UIFZFUlNJT04gMX19CisKK1xiZWdpbntlbnVtZXJhdGV9CisKK1xpdGVtCitUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gQmVPcGVuLmNvbSAoYGBCZU9wZW4nJyksIGhhdmluZyBhbgorb2ZmaWNlIGF0IDE2MCBTYXJhdG9nYSBBdmVudWUsIFNhbnRhIENsYXJhLCBDQSA5NTA1MSwgYW5kIHRoZQorSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKGBgTGljZW5zZWUnJykgYWNjZXNzaW5nIGFuZCBvdGhlcndpc2UKK3VzaW5nIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZAorZG9jdW1lbnRhdGlvbiAoYGB0aGUgU29mdHdhcmUnJykuCisKK1xpdGVtCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEJlT3BlbiBQeXRob24gTGljZW5zZQorQWdyZWVtZW50LCBCZU9wZW4gaGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbi1leGNsdXNpdmUsCityb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0KK2FuZC9vciBkaXNwbGF5IHB1YmxpY2x5LCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsIGRpc3RyaWJ1dGUsIGFuZAorb3RoZXJ3aXNlIHVzZSB0aGUgU29mdHdhcmUgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwKK3Byb3ZpZGVkLCBob3dldmVyLCB0aGF0IHRoZSBCZU9wZW4gUHl0aG9uIExpY2Vuc2UgaXMgcmV0YWluZWQgaW4gdGhlCitTb2Z0d2FyZSwgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS4KKworXGl0ZW0KK0JlT3BlbiBpcyBtYWtpbmcgdGhlIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiBgYEFTIElTJycKK2Jhc2lzLiAgQkVPUEVOIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiAgQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQkVPUEVOIE1BS0VTIE5PIEFORAorRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUworRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworXGl0ZW0KK0JFT1BFTiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBUSEUKK1NPRlRXQVJFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MKK0FTIEEgUkVTVUxUIE9GIFVTSU5HLCBNT0RJRllJTkcgT1IgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQU5ZCitERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKworXGl0ZW0KK1RoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwKK2JyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKK1xpdGVtCitUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBpbnRlcnByZXRlZCBpbiBhbGwKK3Jlc3BlY3RzIGJ5IHRoZSBsYXcgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2x1ZGluZyBjb25mbGljdCBvZgorbGF3IHByb3Zpc2lvbnMuICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvCitjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlCitiZXR3ZWVuIEJlT3BlbiBhbmQgTGljZW5zZWUuICBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50CitwZXJtaXNzaW9uIHRvIHVzZSBCZU9wZW4gdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBpbiBhIHRyYWRlbWFyaworc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkKK3RoaXJkIHBhcnR5LiAgQXMgYW4gZXhjZXB0aW9uLCB0aGUgYGBCZU9wZW4gUHl0aG9uJycgbG9nb3MgYXZhaWxhYmxlCithdCBodHRwOi8vd3d3LnB5dGhvbmxhYnMuY29tL2xvZ29zLmh0bWwgbWF5IGJlIHVzZWQgYWNjb3JkaW5nIHRvIHRoZQorcGVybWlzc2lvbnMgZ3JhbnRlZCBvbiB0aGF0IHdlYiBwYWdlLgorCitcaXRlbQorQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIHNvZnR3YXJlLCBMaWNlbnNlZQorYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudC4KK1xlbmR7ZW51bWVyYXRlfQorCisKK1xjZW50ZXJsaW5le1xzdHJvbmd7Q05SSSBPUEVOIFNPVVJDRSBHUEwtQ09NUEFUSUJMRSBMSUNFTlNFIEFHUkVFTUVOVH19CisKK1B5dGhvbiAxLjYuMSBpcyBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpbgorQ05SSSdzIExpY2Vuc2UgQWdyZWVtZW50LiAgVGhpcyBBZ3JlZW1lbnQgdG9nZXRoZXIgd2l0aCBQeXRob24gMS42LjEgbWF5CitiZSBsb2NhdGVkIG9uIHRoZSBJbnRlcm5ldCB1c2luZyB0aGUgZm9sbG93aW5nIHVuaXF1ZSwgcGVyc2lzdGVudAoraWRlbnRpZmllciAoa25vd24gYXMgYSBoYW5kbGUpOiAxODk1LjIyLzEwMTMuICBUaGlzIEFncmVlbWVudCBtYXkgYWxzbworYmUgb2J0YWluZWQgZnJvbSBhIHByb3h5IHNlcnZlciBvbiB0aGUgSW50ZXJuZXQgdXNpbmcgdGhlIGZvbGxvd2luZworVVJMOiBcdXJse2h0dHA6Ly9oZGwuaGFuZGxlLm5ldC8xODk1LjIyLzEwMTN9LgorCisKK1xjZW50ZXJsaW5le1xzdHJvbmd7Q1dJIFBFUk1JU1NJT05TIFNUQVRFTUVOVCBBTkQgRElTQ0xBSU1FUn19CisKK0NvcHlyaWdodCBcY29weXJpZ2h0e30gMTk5MSAtIDE5OTUsIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bQorQW1zdGVyZGFtLCBUaGUgTmV0aGVybGFuZHMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKK2RvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKK3Byb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKK2JvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgorc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBTdGljaHRpbmcgTWF0aGVtYXRpc2NoCitDZW50cnVtIG9yIENXSSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitTVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPCitUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECitGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQkUgTElBQkxFCitGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KK1xlbmR7c21hbGx9CmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvdGV4aW5wdXRzL2Rpc3R1dGlscy5zdHkgYi9kb2MvdG9vbHMvdGV4aW5wdXRzL2Rpc3R1dGlscy5zdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5ODBjZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy90ZXhpbnB1dHMvZGlzdHV0aWxzLnN0eQpAQCAtMCwwICsxLDMzIEBACislCislIExhVGVYIGNvbW1hbmRzIGFuZCBtYWNyb3MgbmVlZGVkIGZvciB0aGUgdHdvIERpc3R1dGlscyBtYW51YWxzLAorJSBpbnN0LnRleCBhbmQgZGlzdC50ZXguCislCislICRJZDogZGlzdHV0aWxzLnN0eSx2IDEuMS4xLjEgMjAwMS8wNy8xNiAxMTo1MzowMyBtc2pvZ3JlbiBFeHAgJAorJQorCislIE15IGdyaXBlIGxpc3QgYWJvdXQgdGhlIFB5dGhvbiBzdHlsZSBmaWxlczoKKyUgICogSSB3YW50IGl0YWxpY3MgaW4gdmVyYmF0aW0gZW52aXJvbm1lbnRzIGZvciB2YXJpYWJsZQorJSAgICB0ZXh0ICh2ZXJiYXRpbS5zdHk/KQorJSAgKiBJIGhhdGUgZXNjYXBpbmcgdW5kZXJzY29yZXMgKHVybC5zdHkgZml4ZXMgdGhpcykKKworJSAnXGNvbW1hbmQnIGlzIGZvciBEaXN0dXRpbHMgY29tbWFuZHMgd2hpY2gsIGRlcGVuZGluZyBvbiB5b3VyCislIHBlcnNwZWN0aXZlLCBhcmUganVzdCBhcmd1bWVudHMgdG8gdGhlIHNldHVwIHNjcmlwdCwgb3Igc3ViLQorJSBjb21tYW5kcyBvZiB0aGUgc2V0dXAgc2NyaXB0LCBvciB0aGUgY2xhc3NlcyB0aGF0IGltcGxlbWVudAorJSBlYWNoICJjb21tYW5kIi4KK1xuZXdjb21tYW5ke1xjb21tYW5kfVsxXXtcY29kZXsjMX19CisKKyUgJ1xvcHRpb24nIGlzIGZvciBEaXN0dXRpbHMgb3B0aW9ucyAqaW4qIHRoZSBzZXR1cCBzY3JpcHQuICBDb21tYW5kLQorJSBsaW5lIG9wdGlvbnMgKnRvKiB0aGUgc2V0dXAgc2NyaXB0IGFyZSBtYXJrZWQgdXAgaW4gdGhlIHVzdWFsCislIHdheSwgaWUuIHdpdGggJ1xwcm9ncmFtb3B0JyBvciAnXGxvbmdwcm9ncmFtb3B0JworXG5ld2NvbW1hbmR7XG9wdGlvbn1bMV17XHRleHRzZntcc21hbGx7IzF9fX0KKworJSAnXGZpbGV2YXInIGlzIGZvciB2YXJpYWJsZSBjb21wb25lbnRzIG9mIGZpbGUvcGF0aCBuYW1lcyAtLSBlZy4KKyUgd2hlbiB5b3UgcHV0ICdwcmVmaXgnIGluIGEgcGF0aG5hbWUsIHlvdSBtYXJrIGl0IHVwIHdpdGgKKyUgJ1xmaWxldmFyJyBzbyB0aGF0IGl0IHN0aWxsIGxvb2tzIHBhdGhuYW1lLWlzaCwgYnV0IGlzCislIGRpc3Rpbmd1aXNoZWQgZnJvbSB0aGUgbGl0ZXJhbCBwYXJ0IG9mIHRoZSBwYXRoLiAgRnJlZCBzYXlzCislIHRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBqdXN0IGZpbmUgd2l0aCAnXHZhcicsIGJ1dCBJIHZpb2xlbnRseQorJSBkaXNhZ3JlZS4gIFBpc3RvbHMgYXQgZGF3biB3aWxsIHNvcnQgdGhpcyBvbmUgb3V0LgorXG5ld2NvbW1hbmR7XGZpbGV2YXJ9WzFde3tcdGV4dHNse1xmaWxlbnF7IzF9fX19CisKKyUgSnVzdCB3aGlsZSB0aGUgY29kZSBhbmQgZG9jcyBhcmUgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQuCitcbmV3Y29tbWFuZHtcWFhYfVsxXXtcdGV4dGJmeyoqIzEqKn19CmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvdGV4aW5wdXRzL2ZuY3ljaGFwLnN0eSBiL2RvYy90b29scy90ZXhpbnB1dHMvZm5jeWNoYXAuc3R5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZDdiNzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvdGV4aW5wdXRzL2ZuY3ljaGFwLnN0eQpAQCAtMCwwICsxLDQzMyBAQAorJSUlIERlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwgZm5jeWNoYXAuc3R5LAorJSUlIGJ1dCBjaGFuZ2VkIGBgVFdFTFYnJyB0byBgYFRXRUxWRScnLgorCislJSUgQ29weXJpZ2h0ICAgVWxmIEEuIExpbmRncmVuCislJSUgICAgICAgICAgICAgRGVwYXJ0bWVudCBvZiBBcHBsaWVkIEVsZWN0cm9uaWNzCislJSUgICAgICAgICAgICAgQ2hhbG1lcnMgVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5CislJSUgICAgICAgICAgICAgUy00MTIgOTYgR290aGVuYnVyZywgU3dlZGVuCislJSUgICAgICAgICAgICAgRS1tYWlsIGxpbmRncmVuQGFlLmNoYWxtZXJzLnNlCislJSUKKyUlJSBOb3RlICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gbW9kaWZ5IHRoaXMgZmlsZSB1bmRlcgorJSUlICAgICAgICAgICAgIHRoZSBjb25kaXRpb24gdGhhdCBpdCBpcyBzYXZlZCB1c2luZyBhbm90aGVyCislJSUgICAgICAgICAgICAgZmlsZSBhbmQgcGFja2FnZSBuYW1lLgorJSUlCislJSUgUmV2aXNpb24gICAgMS4xCislJSUKKyUlJSAgICAgICAgICAgICBKYW4uIDh0aCBNb2RpZmllZCBwYWNrYWdlIG5hbWUgYmFzZSBkYXRlIG9wdGlvbgorJSUlICAgICAgICAgICAgIEphbi4gMjJ0aCBNb2RpZmllZCBGbU4gYW5kIEZtVGkgZm9yIGVycm9yIGluIGJvb2suY2xzCislJSUgICAgICAgICAgICAgICAgICBcTWFrZVVwcGVyY2FzZXsjfS0+e1xNYWtlVXBwZXJjYXNlI30KKyUlJSAgICAgICAgICAgICBBcHIuIDZ0aCBNb2RpZmllZCBMZW5ueSBvcHRpb24gdG8gcHJldmVudCB1bmRlc2lyZWQgCislJSUgICAgICAgICAgICAgICAgICBza2lwIG9mIGxpbmUuCislJSUgICAgICAgICAgICAgTm92LiA4dGggRml4ZWQgXEBjaGFwYXBwIGZvciBBTVMKKyUlJSAgICAgICAgICAgICBGZWIuIDExdGggRml4ZWQgYXBwZW5kaXggcHJvYmxlbSByZWxhdGVkIHRvIEJqYXJuZQorJSUlIExhc3QgbW9kaWZpZWQgICAgRmViLiAxMXRoIDE5OTgKKworXE5lZWRzVGVYRm9ybWF0e0xhVGVYMmV9WzE5OTUvMTIvMDFdCitcUHJvdmlkZXNQYWNrYWdle2ZuY3ljaGFwfQorICAgICAgICAgICAgIFsxOTk3LzA0LzA2IHYxLjExCisgICAgICAgICAgICAgICAgIExhVGVYIHBhY2thZ2UgKFJldmlzZWQgY2hhcHRlcnMpXQorCislJSUlIERFRklOSVRJT04gT0YgQ2hhcGFwcCB2YXJpYWJsZXMKK1xuZXdjb21tYW5ke1xDTlZ9e1xodWdlXGJmc2VyaWVzfQorXG5ld2NvbW1hbmR7XENoTmFtZVZhcn1bMV17XHJlbmV3Y29tbWFuZHtcQ05WfXsjMX19CisKKworJSUlJSBERUZJTklUSU9OIE9GIFRoZUNoYXB0ZXIgdmFyaWFibGVzCitcbmV3Y29tbWFuZHtcQ05vVn17XGh1Z2VcYmZzZXJpZXN9CitcbmV3Y29tbWFuZHtcQ2hOdW1WYXJ9WzFde1xyZW5ld2NvbW1hbmR7XENOb1Z9eyMxfX0KKworXG5ld2lmXGlmVUNOCitcVUNOZmFsc2UKK1xuZXdpZlxpZkxDTgorXExDTmZhbHNlCitcZGVmXENoTmFtZUxvd2VyQ2FzZXtcTENOdHJ1ZVxVQ05mYWxzZX0KK1xkZWZcQ2hOYW1lVXBwZXJDYXNle1xVQ050cnVlXExDTmZhbHNlfQorXGRlZlxDaE5hbWVBc0lze1xVQ05mYWxzZVxMQ05mYWxzZX0KKworJSUlJSUgRml4IGZvciBBTVNCb29rIDk3MTAwOAorCitcQGlmdW5kZWZpbmVke0BjaGFwYXBwfXtcbGV0XEBjaGFwYXBwXGNoYXB0ZXJuYW1lfXt9CisKKworJSUlJSUgRml4IGZvciBCamFybmUgYW5kIGFwcGVuZGl4IDk4MDIxMQorCitcbmV3aWZcaWZpbmFwcAorXGluYXBwZmFsc2UKK1xyZW5ld2NvbW1hbmRcYXBwZW5kaXh7XHBhcgorICBcc2V0Y291bnRlcntjaGFwdGVyfXswfSUKKyAgXHNldGNvdW50ZXJ7c2VjdGlvbn17MH0lCisgIFxpbmFwcHRydWUlCisgIFxyZW5ld2NvbW1hbmRcQGNoYXBhcHB7XGFwcGVuZGl4bmFtZX0lCisgIFxyZW5ld2NvbW1hbmRcdGhlY2hhcHRlcntcQEFscGhcY0BjaGFwdGVyfX0KKworJSUlJSUKKworXG5ld2NvbW1hbmR7XEZtTn1bMV17JQorXGlmVUNOCisgICB7XE1ha2VVcHBlcmNhc2UjMX1cTENOZmFsc2UKK1xlbHNlCisgICBcaWZMQ04KKyAgICAgIHtcTWFrZUxvd2VyY2FzZSMxfVxVQ05mYWxzZQorICAgXGVsc2UgIzEKKyAgIFxmaQorXGZpfQorCisKKyUlJSUgREVGSU5JVElPTiBPRiBUaXRsZSB2YXJpYWJsZXMKK1xuZXdjb21tYW5ke1xDVFZ9e1xIdWdlXGJmc2VyaWVzfQorXG5ld2NvbW1hbmR7XENoVGl0bGVWYXJ9WzFde1xyZW5ld2NvbW1hbmR7XENUVn17IzF9fQorCislJSUlIERFRklOSVRJT04gT0YgdGhlIGJhc2ljIHJ1bGUgd2lkdGgKK1xuZXdsZW5ndGh7XFJXfQorXHNldGxlbmd0aHtcUld9ezFwdH0KK1xuZXdjb21tYW5ke1xDaFJ1bGVXaWR0aH1bMV17XHNldGxlbmd0aHtcUld9eyMxfX0KKworXG5ld2lmXGlmVUNUCitcVUNUZmFsc2UKK1xuZXdpZlxpZkxDVAorXExDVGZhbHNlCitcZGVmXENoVGl0bGVMb3dlckNhc2V7XExDVHRydWVcVUNUZmFsc2V9CitcZGVmXENoVGl0bGVVcHBlckNhc2V7XFVDVHRydWVcTENUZmFsc2V9CitcZGVmXENoVGl0bGVBc0lze1xVQ1RmYWxzZVxMQ1RmYWxzZX0KK1xuZXdjb21tYW5ke1xGbVRpfVsxXXslCitcaWZVQ1QKKworICAge1xNYWtlVXBwZXJjYXNlIzF9XExDVGZhbHNlCitcZWxzZQorICAgXGlmTENUCisgICAgICB7XE1ha2VMb3dlcmNhc2UjMX1cVUNUZmFsc2UKKyAgIFxlbHNlICMxCisgICBcZmkKK1xmaX0KKworCisKK1xuZXdsZW5ndGh7XG15bGVufQorXG5ld2xlbmd0aHtcbXloaX0KK1xuZXdsZW5ndGh7XHB4fQorXG5ld2xlbmd0aHtccHl9CitcbmV3bGVuZ3Roe1xweXl9CitcbmV3bGVuZ3Roe1xweHh9CisKKworXGRlZlxtZ2hydWxlZmlsbCMxe1xsZWF2ZXZtb2RlXGxlYWRlcnNcaHJ1bGVcQGhlaWdodCAjMVxoZmlsbFxrZXJuXHpAfQorCitcbmV3Y29tbWFuZHtcRE9DSH17JQorICBcQ05WXEZtTntcQGNoYXBhcHB9XHNwYWNlIFxDTm9WXHRoZWNoYXB0ZXIKKyAgXHBhclxub2JyZWFrCisgIFx2c2tpcCAyMFxwQAorICB9CitcbmV3Y29tbWFuZHtcRE9USX1bMV17JQorICAgIFxDVFZcRm1UaXsjMX1ccGFyXG5vYnJlYWsKKyAgICBcdnNraXAgNDBccEAKKyAgICB9CitcbmV3Y29tbWFuZHtcRE9USVN9WzFdeyUKKyAgICBcQ1RWXEZtVGl7IzF9XHBhclxub2JyZWFrCisgICAgXHZza2lwIDQwXHBACisgICAgfQorCislJSUlJSUgU09OTlkgREVGCisKK1xEZWNsYXJlT3B0aW9ue1Nvbm55fXslCisgIFxDaE5hbWVWYXJ7XExhcmdlXHNmfQorICBcQ2hOdW1WYXJ7XEh1Z2V9CisgIFxDaFRpdGxlVmFye1xMYXJnZVxzZn0KKyAgXENoUnVsZVdpZHRoezAuNXB0fQorICBcQ2hOYW1lVXBwZXJDYXNlCisgIFxyZW5ld2NvbW1hbmR7XERPQ0h9eyUKKyAgICBccmFnZ2VkbGVmdAorICAgIFxDTlZcRm1Oe1xAY2hhcGFwcH1cc3BhY2UgXENOb1ZcdGhlY2hhcHRlcgorICAgIFxwYXJcbm9icmVhaworICAgIFx2c2tpcCA0MFxwQH0KKyAgXHJlbmV3Y29tbWFuZHtcRE9USX1bMV17JQorICAgIFxDVFZccmFnZ2VkbGVmdFxtZ2hydWxlZmlsbHtcUld9XHBhclxub2JyZWFrCisgICAgXHZza2lwIDVccEAKKyAgICBcQ1RWXEZtVGl7IzF9XHBhclxub2JyZWFrCisgICAgXG1naHJ1bGVmaWxse1xSV31ccGFyXG5vYnJlYWsKKyAgICBcdnNraXAgNDBccEB9CisgIFxyZW5ld2NvbW1hbmR7XERPVElTfVsxXXslCisgICAgXENUVlxyYWdnZWRsZWZ0XG1naHJ1bGVmaWxse1xSV31ccGFyXG5vYnJlYWsKKyAgICBcdnNraXAgNVxwQAorICAgIFxDVFZcRm1UaXsjMX1ccGFyXG5vYnJlYWsKKyAgICBcbWdocnVsZWZpbGx7XFJXfVxwYXJcbm9icmVhaworICAgIFx2c2tpcCA0MFxwQH0KK30KKworJSUlJSUlIExFTk5ZIERFRgorCitcRGVjbGFyZU9wdGlvbntMZW5ueX17JQorCisgIFxDaE5hbWVWYXJ7XGZvbnRzaXplezE0fXsxNn1cdXNlZm9udHtPVDF9e3Bodn17bX17bn1cc2VsZWN0Zm9udH0KKyAgXENoTnVtVmFye1xmb250c2l6ZXs2MH17NjJ9XHVzZWZvbnR7T1QxfXtwdG19e219e259XHNlbGVjdGZvbnR9CisgIFxDaFRpdGxlVmFye1xIdWdlXGJmc2VyaWVzXHJtfQorICBcQ2hSdWxlV2lkdGh7MXB0fQorICBccmVuZXdjb21tYW5ke1xET0NIfXslCisgICAgXHNldHRvd2lkdGh7XHB4fXtcQ05WXEZtTntcQGNoYXBhcHB9fQorICAgIFxhZGR0b2xlbmd0aHtccHh9ezJwdH0KKyAgICBcc2V0dG9oZWlnaHR7XHB5fXtcQ05WXEZtTntcQGNoYXBhcHB9fQorICAgIFxhZGR0b2xlbmd0aHtccHl9ezFwdH0KKworICAgIFxzZXR0b3dpZHRoe1xteWxlbn17XENOVlxGbU57XEBjaGFwYXBwfVxzcGFjZVxDTm9WXHRoZWNoYXB0ZXJ9CisgICAgXGFkZHRvbGVuZ3Roe1xteWxlbn17MXB0fQorICAgIFxzZXR0b3dpZHRoe1xweHh9e1xDTm9WXHRoZWNoYXB0ZXJ9CisgICAgXGFkZHRvbGVuZ3Roe1xweHh9ey0xcHR9CisKKyAgICBcc2V0dG9oZWlnaHR7XHB5eX17XENOb1ZcdGhlY2hhcHRlcn0KKyAgICBcYWRkdG9sZW5ndGh7XHB5eX17LTJwdH0KKyAgICBcc2V0bGVuZ3Roe1xteWhpfXtccHl5fQorICAgIFxhZGR0b2xlbmd0aHtcbXloaX17LTFccHl9CisgICAgXHBhcgorICAgIFxwYXJib3hbYl17XHRleHR3aWR0aH17JQorICAgIFxydWxlW1xweV17XFJXfXtcbXloaX0lCisgICAgXGhza2lwIC1cUlclCisgICAgXHJ1bGVbXHB5eV17XHB4fXtcUld9JQorICAgIFxoc2tpcCAtXHB4JQorICAgIFxyYWdnZWRyaWdodCUKKyAgICBcQ05WXEZtTntcQGNoYXBhcHB9XHNwYWNlXENOb1ZcdGhlY2hhcHRlciUKKyAgICBcaHNraXAxcHQlCisgICAgXG1naHJ1bGVmaWxse1xSV30lCisgICAgXHJ1bGV7XFJXfXtccHl5fVxwYXJcbm9icmVhayUKKyAgICBcdnNraXAgLVxiYXNlbGluZXNraXAlCisgICAgXHZza2lwIC1ccHl5JQorICAgIFxoc2tpcCBcbXlsZW4lCisgICAgXG1naHJ1bGVmaWxse1xSV31ccGFyXG5vYnJlYWslCisgICAgXHZza2lwIFxweXl9JQorICAgIFx2c2tpcCAyMFxwQH0KKyAKKworICBccmVuZXdjb21tYW5ke1xET1RJfVsxXXslCisgICAgXHJhZ2dlZHJpZ2h0CisgICAgXENUVlxGbVRpeyMxfVxwYXJcbm9icmVhaworICAgIFx2c2tpcCA0MFxwQH0KKworICBccmVuZXdjb21tYW5ke1xET1RJU31bMV17JQorICAgIFxyYWdnZWRyaWdodAorICAgIFxDVFZcRm1UaXsjMX1ccGFyXG5vYnJlYWsKKyAgICBcdnNraXAgNDBccEB9CisgfQorCisKKyUlJSUlJSUgR0xFTk4gREVGCisKKworXERlY2xhcmVPcHRpb257R2xlbm59eyUKKyAgXENoTmFtZVZhcntcYmZzZXJpZXNcTGFyZ2Vcc2Z9CisgIFxDaE51bVZhcntcSHVnZX0KKyAgXENoVGl0bGVWYXJ7XGJmc2VyaWVzXExhcmdlXHJtfQorICBcQ2hSdWxlV2lkdGh7MXB0fQorICBcQ2hOYW1lVXBwZXJDYXNlCisgIFxDaFRpdGxlVXBwZXJDYXNlCisgIFxyZW5ld2NvbW1hbmR7XERPQ0h9eyUKKyAgICBcc2V0dG9oZWlnaHR7XG15aGl9e1xDVFZcRm1UaXtUZXN0fX0KKyAgICBcc2V0bGVuZ3Roe1xweX17XGJhc2VsaW5lc2tpcH0KKyAgICBcYWRkdG9sZW5ndGh7XHB5fXtcUld9CisgICAgXGFkZHRvbGVuZ3Roe1xweX17XG15aGl9CisgICAgXHNldGxlbmd0aHtccHl5fXtccHl9CisgICAgXGFkZHRvbGVuZ3Roe1xweXl9ey0xXFJXfQorICAgICAKKyAgICBccmFnZ2VkcmlnaHQKKyAgICBcQ05WXEZtTntcQGNoYXBhcHB9XHNwYWNlXENOb1ZcdGhlY2hhcHRlcgorICAgIFxoc2tpcCAzcHRcbWdocnVsZWZpbGx7XFJXfVxydWxlWy0xXHB5eV17MlxSV317XHB5fVxwYXJcbm9icmVha30KKworICBccmVuZXdjb21tYW5ke1xET1RJfVsxXXslCisgICAgXGFkZHRvbGVuZ3Roe1xweXl9ey00cHR9CisgICAgXHNldHRvaGVpZ2h0e1xteWhpfXtcQ1RWXEZtVGl7IzF9fQorICAgIFxhZGR0b2xlbmd0aHtcbXloaX17XHB5fQorICAgIFxhZGR0b2xlbmd0aHtcbXloaX17LTFcUld9CisgICAgXHZza2lwIC0xXHB5eQorICAgIFxydWxlezJcUld9e1xteWhpfVxtZ2hydWxlZmlsbHtcUld9XGhza2lwIDJwdAorICAgIFxyYWdnZWRsZWZ0XENUVlxGbVRpeyMxfVxwYXJcbm9icmVhaworICAgIFx2c2tpcCA4MFxwQH0KKworICBccmVuZXdjb21tYW5ke1xET1RJU31bMV17JQorICAgIFxzZXRsZW5ndGh7XHB5fXsxMHB0fQorICAgIFxzZXRsZW5ndGh7XHB5eX17XHB5fQorICAgIFxhZGR0b2xlbmd0aHtccHl5fXtcUld9CisgICAgXHNldGxlbmd0aHtcbXloaX17XGJhc2VsaW5lc2tpcH0KKyAgICBcYWRkdG9sZW5ndGh7XG15aGl9e1xweXl9CisgICAgXG1naHJ1bGVmaWxse1xSV31ccnVsZVstMVxweV17MlxSV317XHB5eX1ccGFyXG5vYnJlYWsKKyUgICAgXGFkZHRvbGVuZ3Roe317fQorXHZza2lwIC0xXGJhc2VsaW5lc2tpcAorICAgIFxydWxlezJcUld9e1xteWhpfVxtZ2hydWxlZmlsbHtcUld9XGhza2lwIDJwdAorICAgIFxyYWdnZWRsZWZ0XENUVlxGbVRpeyMxfVxwYXJcbm9icmVhaworICAgIFx2c2tpcCA2MFxwQH0KKyAgfQorCislJSUlJSUlIENPTk5ZIERFRgorCitcRGVjbGFyZU9wdGlvbntDb25ueX17JQorICBcQ2hOYW1lVXBwZXJDYXNlCisgIFxDaFRpdGxlVXBwZXJDYXNlICAKKyAgXENoTmFtZVZhcntcY2VudGVyaW5nXEh1Z2Vccm1cYmZzZXJpZXN9CisgIFxDaE51bVZhcntcSHVnZX0KKyAgXENoVGl0bGVWYXJ7XGNlbnRlcmluZ1xIdWdlXHJtfQorICBcQ2hSdWxlV2lkdGh7MnB0fQorCisgIFxyZW5ld2NvbW1hbmR7XERPQ0h9eyUKKyAgICBcbWdocnVsZWZpbGx7M1xSV31ccGFyXG5vYnJlYWsKKyAgICBcdnNraXAgLTAuNVxiYXNlbGluZXNraXAKKyAgICBcbWdocnVsZWZpbGx7XFJXfVxwYXJcbm9icmVhaworICAgIFxDTlZcRm1Oe1xAY2hhcGFwcH1cc3BhY2UgXENOb1ZcdGhlY2hhcHRlcgorICAgIFxwYXJcbm9icmVhaworICAgIFx2c2tpcCAtMC41XGJhc2VsaW5lc2tpcAorICAgfQorICBccmVuZXdjb21tYW5ke1xET1RJfVsxXXslCisgICAgXG1naHJ1bGVmaWxse1xSV31ccGFyXG5vYnJlYWsKKyAgICBcQ1RWXEZtVGl7IzF9XHBhclxub2JyZWFrCisgICAgXHZza2lwIDYwXHBACisgICAgfQorICBccmVuZXdjb21tYW5ke1xET1RJU31bMV17JQorICAgIFxtZ2hydWxlZmlsbHtcUld9XHBhclxub2JyZWFrCisgICAgXENUVlxGbVRpeyMxfVxwYXJcbm9icmVhaworICAgIFx2c2tpcCA2MFxwQAorICAgIH0KKyAgfQorCislJSUlJSUlIFJFSk5FIERFRgorCitcRGVjbGFyZU9wdGlvbntSZWpuZX17JQorCisgIFxDaE5hbWVVcHBlckNhc2UKKyAgXENoVGl0bGVVcHBlckNhc2UgIAorICBcQ2hOYW1lVmFye1xjZW50ZXJpbmdcTGFyZ2Vccm19CisgIFxDaE51bVZhcntcSHVnZX0KKyAgXENoVGl0bGVWYXJ7XGNlbnRlcmluZ1xIdWdlXHJtfQorICBcQ2hSdWxlV2lkdGh7MXB0fQorICBccmVuZXdjb21tYW5ke1xET0NIfXslCisgICAgXHNldHRvaGVpZ2h0e1xweX17XENOb1ZcdGhlY2hhcHRlcn0KKyAgICBcYWRkdG9sZW5ndGh7XHB5fXstMXB0fQorICAgIFxDTlZcRm1Oe1xAY2hhcGFwcH1ccGFyXG5vYnJlYWsKKyAgICBcdnNraXAgMjBccEAKKyAgICBcc2V0bGVuZ3Roe1xteWhpfXsyXGJhc2VsaW5lc2tpcH0KKyAgICBcc2V0bGVuZ3Roe1xweH17XG15aGl9CisgICAgXGFkZHRvbGVuZ3Roe1xweH17LTFcUld9CisgICAgXHJ1bGVbLTFccHhde1xSV317XG15aGl9XG1naHJ1bGVmaWxse1xSV31caHNraXAKKyAgICAxMHB0XHJhaXNlYm94ey0wLjVccHl9e1xDTm9WXHRoZWNoYXB0ZXJ9XGhza2lwCisxMHB0XG1naHJ1bGVmaWxse1xSV31ccnVsZVstMVxweF17XFJXfXtcbXloaX1ccGFyXG5vYnJlYWsKKyAgICAgXHZza2lwIC0xXHBACisgICAgfQorICBccmVuZXdjb21tYW5ke1xET1RJfVsxXXslCisgICAgXHNldGxlbmd0aHtcbXlsZW59e1x0ZXh0d2lkdGh9CisgICAgXGFkZHRvbGVuZ3Roe1xteWxlbn17LTJcUld9CisgICAge1x2cnVsZSB3aWR0aFxSV31ccGFyYm94e1xteWxlbn17XENUVlxGbVRpeyMxfX17XHZydWxlCit3aWR0aFxSV31ccGFyXG5vYnJlYWsKKyAgICBcdnNraXAKKy0xcHRccnVsZXtcUld9ezJcYmFzZWxpbmVza2lwfVxtZ2hydWxlZmlsbHtcUld9XHJ1bGV7XFJXfXsyXGJhc2VsaW5lc2tpcH0KKyAgICBcdnNraXAgNjBccEAKKyAgICB9CisgIFxyZW5ld2NvbW1hbmR7XERPVElTfVsxXXslCisgICAgXHNldGxlbmd0aHtccHl9e1xmYm94cnVsZX0KKyAgICBcc2V0bGVuZ3Roe1xmYm94cnVsZX17XFJXfQorICAgIFxzZXRsZW5ndGh7XG15bGVufXtcdGV4dHdpZHRofQorICAgIFxhZGR0b2xlbmd0aHtcbXlsZW59ey0yXFJXfQorICAgIFxmYm94e1xwYXJib3h7XG15bGVufXtcdnNraXAKKzJcYmFzZWxpbmVza2lwXENUVlxGbVRpeyMxfVxwYXJcbm9icmVha1x2c2tpcCBcYmFzZWxpbmVza2lwfX0gCisgICAgXHNldGxlbmd0aHtcZmJveHJ1bGV9e1xweX0KKyAgICBcdnNraXAgNjBccEAKKyAgICB9CisgIH0KKworCislJSUlJSUlIEJKQVJORSBERUYKKworXERlY2xhcmVPcHRpb257Qmphcm5lfXslCisgIFxDaE5hbWVVcHBlckNhc2UKKyAgXENoVGl0bGVVcHBlckNhc2UgIAorICBcQ2hOYW1lVmFye1xyYWdnZWRsZWZ0XG5vcm1hbHNpemVccm19CisgIFxDaE51bVZhcntccmFnZ2VkbGVmdCBcYmZzZXJpZXNcTGFyZ2V9CisgIFxDaFRpdGxlVmFye1xyYWdnZWRsZWZ0IFxMYXJnZVxybX0KKyAgXENoUnVsZVdpZHRoezFwdH0KKworCislJSBOb3RlIHRoZWNoYXB0ZXIgLT4gY0BjaGFwdGVyIGZpeCBhcHBlbmRpeCBidWcKKworICBcbmV3Y291bnRlcntBbHBoYUNudH0KKyAgXG5ld2NvdW50ZXJ7QWxwaGFEZWNDbnR9CisgIFxuZXdjb21tYW5ke1xBbHBoYU5vfXslCisgICAgXGlmY2FzZVxudW1iZXJcdGhlQWxwaGFDbnQKKyAgICAgIFxpZm51bVxjQGNoYXB0ZXI9MAorICAgICAgICBaRVJPXGVsc2V7fVxmaQorICAgIFxvciBPTkVcb3IgVFdPXG9yIFRIUkVFXG9yIEZPVVJcb3IgRklWRQorICAgIFxvciBTSVhcb3IgU0VWRU5cb3IgRUlHSFRcb3IgTklORVxvciBURU4KKyAgICBcb3IgRUxFVkVOXG9yIFRXRUxWRVxvciBUSElSVEVFTlxvciBGT1VSVEVFTlxvciBGSUZURUVOCisgICAgXG9yIFNJWFRFRU5cb3IgU0VWRU5URUVOXG9yIEVJR0hURUVOXG9yIE5JTkVURUVOXGZpCit9CisKKyAgXG5ld2NvbW1hbmR7XEFscGhhRGVjTm99eyUKKyAgICBcc2V0Y291bnRlcntBbHBoYURlY0NudH17MH0KKyAgICBcQHdoaWxlbnVtXG51bWJlclx0aGVBbHBoYUNudD4wXGRvCisgICAgICB7XGFkZHRvY291bnRlcntBbHBoYUNudH17LTEwfQorICAgICAgIFxhZGR0b2NvdW50ZXJ7QWxwaGFEZWNDbnR9ezF9fQorICAgICBcaWZudW1cbnVtYmVyXHRoZUFscGhhQ250PTAKKyAgICAgXGVsc2UKKyAgICAgICBcYWRkdG9jb3VudGVye0FscGhhRGVjQ250fXstMX0KKyAgICAgICBcYWRkdG9jb3VudGVye0FscGhhQ250fXsxMH0KKyAgICAgXGZpCisgICAgIAorICAgICAKKyAgICBcaWZjYXNlXG51bWJlclx0aGVBbHBoYURlY0NudFxvciBURU5cb3IgVFdFTlRZXG9yIFRISVJUWVxvcgorICAgIEZPUlRZXG9yIEZJRlRZXG9yIFNJWFRZXG9yIFNFVkVOVFlcb3IgRUlHSFRZXG9yIE5JTkVUWVxmaQorICAgIH0KKyAgXG5ld2NvbW1hbmR7XFRoZUFscGhhQ2hhcHRlcn17JQorICAgIAorICAgIFxpZmluYXBwIAorICAgICAgXHRoZWNoYXB0ZXIKKyAgICBcZWxzZQorICAgICAgXHNldGNvdW50ZXJ7QWxwaGFDbnR9e1xjQGNoYXB0ZXJ9CisgICAgICBcaWZudW1cY0BjaGFwdGVyPDIwCisgICAgICAgIFxBbHBoYU5vCisgICAgICBcZWxzZQorICAgICAgICBcQWxwaGFEZWNOb1xBbHBoYU5vCisgICAgICBcZmkKKyAgICBcZmkKKyAgICB9ICAKKyAgXHJlbmV3Y29tbWFuZHtcRE9DSH17JQorICAgIFxtZ2hydWxlZmlsbHtcUld9XHBhclxub2JyZWFrCisgICAgXENOVlxGbU57XEBjaGFwYXBwfVxwYXJcbm9icmVhayAKKyAgICBcQ05vVlxUaGVBbHBoYUNoYXB0ZXJccGFyXG5vYnJlYWsKKyAgICBcdnNraXAgLTFcYmFzZWxpbmVza2lwXHZza2lwIDVwdFxtZ2hydWxlZmlsbHtcUld9XHBhclxub2JyZWFrCisgICAgXHZza2lwIDIwXHBACisgICAgfQorICBccmVuZXdjb21tYW5ke1xET1RJfVsxXXslCisgICAgXENUVlxGbVRpeyMxfVxwYXJcbm9icmVhaworICAgIFx2c2tpcCA0MFxwQAorICAgIH0KKyAgXHJlbmV3Y29tbWFuZHtcRE9USVN9WzFdeyUKKyAgICBcQ1RWXEZtVGl7IzF9XHBhclxub2JyZWFrCisgICAgXHZza2lwIDQwXHBACisgICAgfQorfQorCitcRGVjbGFyZU9wdGlvbip7JQorICBcUGFja2FnZVdhcm5pbmd7ZmFuY3ljaGFwdGVyfXt1bmtub3duIHN0eWxlIG9wdGlvbn0KKyAgfQorCitcUHJvY2Vzc09wdGlvbnMqIFxyZWxheAorCitcZGVmXEBtYWtlY2hhcHRlcmhlYWQjMXslCisgIFx2c3BhY2UqezUwXHBAfSUKKyAge1xwYXJpbmRlbnQgXHpAIFxyYWdnZWRyaWdodCBcbm9ybWFsZm9udAorICAgIFxpZm51bSBcY0BzZWNudW1kZXB0aCA+XG1AbmUKKyAgICAgIFxET0NICisgICAgXGZpCisgICAgXGludGVybGluZXBlbmFsdHlcQE0KKyAgICBcRE9USXsjMX0KKyAgfX0KK1xkZWZcQHNjaGFwdGVyIzF7XGlmQHR3b2NvbHVtbgorICAgICAgICAgICAgICAgICAgIFxAdG9wbmV3cGFnZVtcQG1ha2VzY2hhcHRlcmhlYWR7IzF9XSUKKyAgICAgICAgICAgICAgICAgXGVsc2UKKyAgICAgICAgICAgICAgICAgICBcQG1ha2VzY2hhcHRlcmhlYWR7IzF9JQorICAgICAgICAgICAgICAgICAgIFxAYWZ0ZXJoZWFkaW5nCisgICAgICAgICAgICAgICAgIFxmaX0KK1xkZWZcQG1ha2VzY2hhcHRlcmhlYWQjMXslCisgIFx2c3BhY2UqezUwXHBAfSUKKyAge1xwYXJpbmRlbnQgXHpAIFxyYWdnZWRyaWdodAorICAgIFxub3JtYWxmb250CisgICAgXGludGVybGluZXBlbmFsdHlcQE0KKyAgICBcRE9USVN7IzF9CisgICAgXHZza2lwIDQwXHBACisgIH19CisKK1xlbmRpbnB1dAorCisKZGlmZiAtLWdpdCBhL2RvYy90b29scy90ZXhpbnB1dHMvaG93dG8uY2xzIGIvZG9jL3Rvb2xzL3RleGlucHV0cy9ob3d0by5jbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5YjRhZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy90ZXhpbnB1dHMvaG93dG8uY2xzCkBAIC0wLDAgKzEsMTA2IEBACislCislIGhvd3RvLmNscyBmb3IgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uCislCisKK1xOZWVkc1RlWEZvcm1hdHtMYVRlWDJlfVsxOTk1LzEyLzAxXQorXFByb3ZpZGVzQ2xhc3N7aG93dG99CisgICAgICAgICAgICAgWzE5OTgvMDIvMjUgRG9jdW1lbnQgY2xhc3MgKFB5dGhvbiBIT1dUTyldCisKK1xSZXF1aXJlUGFja2FnZXtweXBhcGVyfQorCislIENoYW5nZSB0aGUgb3B0aW9ucyBoZXJlIHRvIGdldCBhIGRpZmZlcmVudCBzZXQgb2YgYmFzaWMgb3B0aW9ucywgIFRoaXMKKyUgaXMgd2hlcmUgdG8gYWRkIHRoaW5ncyBsaWtlICJhNHBhcGVyIiBvciAiMTBwdCIuCislCitcTG9hZENsYXNzW3R3b3NpZGVde2FydGljbGV9CisKK1xzZXRjb3VudGVye3NlY251bWRlcHRofXsxfQorCislIE9wdGlvbmFsIHBhY2thZ2VzOgorJQorJSBJZiBwcm9jZXNzaW5nIG9mIHRoZXNlIGRvY3VtZW50cyBmYWlscyBhdCB5b3VyIFRlWCBpbnN0YWxsYXRpb24sCislIHRoZXNlIG1heSBiZSBjb21tZW50ZWQgb3V0IChpbmRlcGVuZGVudGx5KSB0byBtYWtlIHRoaW5ncyB3b3JrLgorJSBUaGVzZSBhcmUgYm90aCBzdXBwbGllZCB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHRlVGVYCislIGRpc3RyaWJ1dGlvbi4KKyUKKyUgVGhlICJmYW5jeWhkciIgcGFja2FnZSBtYWtlcyBuaWNlciBwYWdlIGZvb3RlcnMgcmVhc29uYWJsZSB0bworJSBpbXBsZW1lbnQsIGFuZCBpcyB1c2VkIHRvIHB1dCB0aGUgY2hhcHRlciBhbmQgc2VjdGlvbiBpbmZvcm1hdGlvbiBpbiAKKyUgdGhlIGZvb3RlcnMuCislCitcUmVxdWlyZVBhY2thZ2V7ZmFuY3loZHJ9XHR5cGVvdXR7VXNpbmcgZmFuY2llciBmb290ZXJzIHRoYW4gdXN1YWwufQorCisKKyUgUmVxdWlyZWQgcGFja2FnZToKKyUKKyUgVGhpcyBnaXZlcyB1cyBhbGwgdGhlIFB5dGhvbi1zcGVjaWZpYyBtYXJrdXAgdGhhdCB3ZSByZWFsbHkgd2FudC4KKyUgVGhpcyBzaG91bGQgY29tZSBsYXN0LiAgRG8gbm90IGNoYW5nZSB0aGlzLgorJQorXFJlcXVpcmVQYWNrYWdle3B5dGhvbn0KKworJSBzdXBwb3J0IGZvciBtb2R1bGUgc3lub3BzaXMgc2VjdGlvbnM6CitcbmV3Y29tbWFuZHtccHlATW9kU3lub3BzaXNGaWxlbmFtZX17XGpvYm5hbWUuc3lufQorCisKKyUgbmVlZCB0byBkbyBvbmUgb2YgdGhlc2UuLi4uCitcbmV3Y29tbWFuZHtccHlAZG9Ib3Jpem9udGFsUnVsZX17XHJ1bGV7XHRleHR3aWR0aH17MXB0fX0KKworCislIENoYW5nZSB0aGUgdGl0bGUgcGFnZSB0byBsb29rIGEgYml0IGJldHRlciwgYW5kIGZpdCBpbiB3aXRoIHRoZQorJSBmbmN5Y2hhcCBgYEJqYXJuZScnIHN0eWxlIGEgYml0IGJldHRlci4KKyUKK1xyZW5ld2NvbW1hbmR7XG1ha2V0aXRsZX17CisgIFxweUBkb0hvcml6b250YWxSdWxlCisgIFxAaWZ1bmRlZmluZWR7cGRmaW5mb317fXt7CisgICAgJSBUaGlzIFxkZWYgaXMgcmVxdWlyZWQgdG8gZGVhbCB3aXRoIG11bHRpLWxpbmUgYXV0aG9yczsgaXQKKyAgICAlIGNoYW5nZXMgXFwgdG8gJywgJyAoY29tbWEtc3BhY2UpLCBtYWtpbmcgaXQgcGFzcyBtdXN0ZXIgZm9yCisgICAgJSBnZW5lcmF0aW5nIGRvY3VtZW50IGluZm8gaW4gdGhlIFBERiBmaWxlLgorICAgIFxkZWZcXHssIH0KKyAgICBccGRmaW5mb3sKKyAgICAgIC9BdXRob3IgKFxAYXV0aG9yKQorICAgICAgL1RpdGxlIChcQHRpdGxlKQorICAgIH0KKyAgfX0KKyAgXGJlZ2lue2ZsdXNocmlnaHR9CisgICAge1xybVxIdWdlXHB5QEhlYWRlckZhbWlseSBcQHRpdGxlfSBccGFyCisgICAge1xlbVxsYXJnZVxweUBIZWFkZXJGYW1pbHkgXHB5QHJlbGVhc2V9IFxwYXIKKyAgICBcdnNwYWNlezI1cHR9CisgICAge1xMYXJnZVxweUBIZWFkZXJGYW1pbHkgXEBhdXRob3J9IFxwYXIKKyAgICBcdnNwYWNlezI1cHR9CisgICAgXEBkYXRlIFxwYXIKKyAgICBccHlAYXV0aG9yYWRkcmVzcyBccGFyCisgIFxlbmR7Zmx1c2hyaWdodH0KKyAgXEB0aGFua3MKKyAgXHNldGNvdW50ZXJ7Zm9vdG5vdGV9ezB9CisgIFxsZXRcdGhhbmtzXHJlbGF4XGxldFxtYWtldGl0bGVccmVsYXgKKyAgXGdkZWZcQHRoYW5rc3t9XGdkZWZcQGF1dGhvcnt9XGdkZWZcQHRpdGxle30KK30KKworCitcbGV0XHB5QE9sZFRhYmxlb2Zjb250ZW50cz1cdGFibGVvZmNvbnRlbnRzCitccmVuZXdjb21tYW5ke1x0YWJsZW9mY29udGVudHN9eworICBcYmVnaW5ncm91cAorICAgIFxwYXJza2lwID0gMG1tCisgICAgXHB5QE9sZFRhYmxlb2Zjb250ZW50cworICBcZW5kZ3JvdXAKKyAgXHB5QGRvSG9yaXpvbnRhbFJ1bGUKKyAgXHZzcGFjZXsxMnB0fQorICBccHlAZG9pbmdAcGFnZUB0YXJnZXRzdHJ1ZQorfSAgCisKKyUgRml4IHRoZSB0aGVpbmRleCBlbnZpcm9ubWVudCB0byBhZGQgYW4gZW50cnkgdG8gdGhlIFRhYmxlIG9mCislIENvbnRlbnRzOyB0aGlzIGlzIG11Y2ggbmljZXIgdGhhbiBqdXN0IGhhdmluZyB0byBqdW1wIHRvIHRoZSBlbmQgb2YKKyUgdGhlIGJvb2sgYW5kIGZsaXAgYXJvdW5kLCBlc3BlY2lhbGx5IHdpdGggbXVsdGlwbGUgaW5kZXhlcy4KKyUKK1xsZXRccHlAT2xkVGhlaW5kZXg9XHRoZWluZGV4CitccmVuZXdjb21tYW5ke1x0aGVpbmRleH17CisgIFxjbGVhcnBhZ2UKKyAgXHB5QE9sZFRoZWluZGV4CisgIFxhZGRjb250ZW50c2xpbmV7dG9jfXtzZWN0aW9ufXtcaW5kZXhuYW1lfQorfQorCitcQGlmdW5kZWZpbmVke2ZhbmN5aGZ9eworICBccGFnZXN0eWxle3BsYWlufX17CisgIFxwYWdlc3R5bGV7bm9ybWFsfX0JCSUgc3RhcnQgdGhpcyB3YXk7IGNoYW5nZSBmb3IKK1xwYWdlbnVtYmVyaW5ne2FyYWJpY30JCSUgVG9DICYgY2hhcHRlcnMKK1xzZXRjb3VudGVye3NlY251bWRlcHRofXsyfQorCitcdGhpc3BhZ2VzdHlsZXtlbXB0eX0KZGlmZiAtLWdpdCBhL2RvYy90b29scy90ZXhpbnB1dHMvbHR4bWFya3VwLnN0eSBiL2RvYy90b29scy90ZXhpbnB1dHMvbHR4bWFya3VwLnN0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDYxZDcwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL3RleGlucHV0cy9sdHhtYXJrdXAuc3R5CkBAIC0wLDAgKzEsNDAgQEAKKyUgQ3JlYXRlZCBieSBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPiwgYXMgcGFydCBvZiB0aGUKKyUgUHl0aG9uIERvY3VtZW50YXRpb24gUHJvamVjdC4KKyUKKyUgRGVmaW5lIHNvbWUgc2ltcGxlIG1hcmt1cCBmb3IgdGhlIExhVGVYIGNvbW1hbmQgZG9jdW1lbnRhdGlvbjoKKworXFByb3ZpZGVzUGFja2FnZXtsdHhtYXJrdXB9CitcUmVxdWlyZVBhY2thZ2V7cHl0aG9ufSAgICAgICUgZnVsbGxpbmVpdGVtcyBlbnZpcm9ubWVudAorCislIFRoZXNlIHR3byBtYWNyb3MgYXJlIHVzZWQgaW4gY29uc3RydWN0aW5nIHRoZSBsYXN0IHBhcmFtZXRlciB0byB0aGUKKyUgZW52ZGVzYyBhbmQgbWFjcm9kZXNjIGVudmlyb25tZW50cy4KKworXG5ld2NvbW1hbmR7XHB5QGx0eEBvcHRwYXJhbX1bMV17e1t9XHZhcnsjMX17XX19CitcbmV3Y29tbWFuZHtccHlAbHR4QHBhcmFtfVsxXXtce1x2YXJ7IzF9XH19CisKK1xuZXdlbnZpcm9ubWVudHtlbnZkZXNjfVsyXXsKKyAgXGJlZ2lue2Z1bGxsaW5laXRlbXN9CisgICAgXGl0ZW1bXGNvZGV7XGUgYmVnaW5ce3tcYmZzZXJpZXMgIzF9XH17JQorICAgICAgXGxldFxvcD1ccHlAbHR4QG9wdHBhcmFtJQorICAgICAgXGxldFxwPVxweUBsdHhAcGFyYW0lCisgICAgICBcbGV0XHVuc3BlY2lmaWVkPVxweUB1bnNwZWNpZmllZCUKKyAgICAgIFxsZXRcbW9yZWFyZ3M9XHB5QG1vcmVhcmdzJQorICAgICAgICAgIzJ9fV0KKyAgICBcaXRlbVtcY29kZXtcZSBlbmRce3tcYmZzZXJpZXMgIzF9XH19XQorICAgIFxpbmRleHsjMSBlbnZpcm9ubWVudEBcaWR4Y29kZXsjMX0gZW52aXJvbm1lbnR9CisgICAgXGluZGV4e2Vudmlyb25tZW50cyEjMUBcaWR4Y29kZXsjMX19Cit9e1xlbmR7ZnVsbGxpbmVpdGVtc319CisKK1xuZXdlbnZpcm9ubWVudHttYWNyb2Rlc2N9WzJdeworICBcYmVnaW57ZnVsbGxpbmVpdGVtc30KKyAgICBcaXRlbVtcY29kZXt7XGVcYmZzZXJpZXMjMX17JQorICAgICAgXGxldFxvcD1ccHlAbHR4QG9wdHBhcmFtJQorICAgICAgXGxldFxwPVxweUBsdHhAcGFyYW0lCisgICAgICBcbGV0XHVuc3BlY2lmaWVkPVxweUB1bnNwZWNpZmllZCUKKyAgICAgIFxsZXRcbW9yZWFyZ3M9XHB5QG1vcmVhcmdzJQorICAgICAgIzJ9fV0KKyAgICBcaW5kZXh7IzFAXGlkeGNvZGV7XGUgIzF9fQorfXtcZW5ke2Z1bGxsaW5laXRlbXN9fQorCitcbmV3Y29tbWFuZHtcZW52fVsxXXtcY29kZXsjMX19CitcbmV3Y29tbWFuZHtcbWFjcm99WzFde1xjb2Rle1xlIzF9fQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3RleGlucHV0cy9tYW51YWwuY2xzIGIvZG9jL3Rvb2xzL3RleGlucHV0cy9tYW51YWwuY2xzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OWNhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvdGV4aW5wdXRzL21hbnVhbC5jbHMKQEAgLTAsMCArMSwxNTIgQEAKKyUKKyUgbWFudWFsLmNscyBmb3IgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uCislCisKK1xOZWVkc1RlWEZvcm1hdHtMYVRlWDJlfVsxOTk1LzEyLzAxXQorXFByb3ZpZGVzQ2xhc3N7bWFudWFsfQorICAgICAgICAgICAgIFsxOTk4LzAzLzAzIERvY3VtZW50IGNsYXNzIChQeXRob24gbWFudWFsKV0KKworXFJlcXVpcmVQYWNrYWdle3B5cGFwZXJ9CisKKyUgQ2hhbmdlIHRoZSBvcHRpb25zIGhlcmUgdG8gZ2V0IGEgZGlmZmVyZW50IHNldCBvZiBiYXNpYyBvcHRpb25zLCBidXQgb25seQorJSBpZiB5b3UgaGF2ZSB0by4gIFBhcGVyIGFuZCBmb250IHNpemUgc2hvdWxkIGJlIGFkanVzdGVkIGluIHB5cGFwZXIuc3R5LgorJQorXExvYWRDbGFzc1tccHlAcGFwZXIsXHB5QHB0c2l6ZSx0d29zaWRlLG9wZW5yaWdodF17cmVwb3J0fQorCitcc2V0Y291bnRlcntzZWNudW1kZXB0aH17Mn0KKworJSBPcHRpb25hbCBwYWNrYWdlczoKKyUKKyUgSWYgcHJvY2Vzc2luZyBvZiB0aGVzZSBkb2N1bWVudHMgZmFpbHMgYXQgeW91ciBUZVggaW5zdGFsbGF0aW9uLAorJSB0aGVzZSBtYXkgYmUgY29tbWVudGVkIG91dCAoaW5kZXBlbmRlbnRseSkgdG8gbWFrZSB0aGluZ3Mgd29yay4KKyUgVGhlc2UgYXJlIGJvdGggc3VwcGxpZWQgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSB0ZVRlWAorJSBkaXN0cmlidXRpb24uCislCislIFRoZSAiZmFuY3loZHIiIHBhY2thZ2UgbWFrZXMgbmljZXIgcGFnZSBmb290ZXJzIHJlYXNvbmFibGUgdG8KKyUgaW1wbGVtZW50LCBhbmQgaXMgdXNlZCB0byBwdXQgdGhlIGNoYXB0ZXIgYW5kIHNlY3Rpb24gaW5mb3JtYXRpb24gaW4gCislIHRoZSBmb290ZXJzLgorJQorXFJlcXVpcmVQYWNrYWdle2ZhbmN5aGRyfVx0eXBlb3V0e1VzaW5nIGZhbmNpZXIgZm9vdGVycyB0aGFuIHVzdWFsLn0KKworCislIFJlcXVpcmVkIHBhY2thZ2VzOgorJQorJSBUaGUgImZuY3ljaGFwIiBwYWNrYWdlIGlzIHVzZWQgdG8gZ2V0IHRoZSBuaWNlIGNoYXB0ZXIgaGVhZGVycy4gIFRoZQorJSAuc3R5IGZpbGUgaXMgZGlzdHJpYnV0ZWQgd2l0aCBQeXRob24sIHNvIHlvdSBzaG91bGQgbm90IG5lZWQgdG8gZGlzYWJsZQorJSBpdC4gIFlvdSdkIGFsc28gZW5kIHVwIHdpdGggYSBtaXhlZCBwYWdlIHN0eWxlOyB1Z2xpZXIgdGhhbiBzdG9jayBMYVRlWCEKKyUKK1xSZXF1aXJlUGFja2FnZVtCamFybmVde2ZuY3ljaGFwfVx0eXBlb3V0e1VzaW5nIGZhbmN5IGNoYXB0ZXIgaGVhZGluZ3MufQorJSBEbyBob3Jpem9udGFsIHJ1bGVzIGl0IHRoaXMgd2F5IHRvIG1hdGNoOgorXG5ld2NvbW1hbmR7XHB5QGRvSG9yaXpvbnRhbFJ1bGV9e1xtZ2hydWxlZmlsbHtcUld9fQorJQorJQorJSBUaGlzIGdpdmVzIHVzIGFsbCB0aGUgUHl0aG9uLXNwZWNpZmljIG1hcmt1cCB0aGF0IHdlIHJlYWxseSB3YW50LgorJSBUaGlzIHNob3VsZCBjb21lIGxhc3QuICBEbyBub3QgY2hhbmdlIHRoaXMuCislCitcUmVxdWlyZVBhY2thZ2V7cHl0aG9ufQorCislIHN1cHBvcnQgZm9yIG1vZHVsZSBzeW5vcHNpcyBzZWN0aW9uczoKK1xuZXdjb21tYW5ke1xweUBNb2RTeW5vcHNpc0ZpbGVuYW1lfXtcam9ibmFtZVx0aGVjaGFwdGVyLnN5bn0KK1xsZXRccHlAT2xkQ2hhcHRlcj1cY2hhcHRlcgorXHJlbmV3Y29tbWFuZHtcY2hhcHRlcn17CisgIFxweUBQcm9jZXNzTW9kU3lub3BzaXMKKyAgXHB5QGNsb3NlTW9kU3lub3BzaXNGaWxlCisgIFxweUBPbGRDaGFwdGVyCit9CisKKworJSBDaGFuZ2UgdGhlIHRpdGxlIHBhZ2UgdG8gbG9vayBhIGJpdCBiZXR0ZXIsIGFuZCBmaXQgaW4gd2l0aCB0aGUKKyUgZm5jeWNoYXAgYGBCamFybmUnJyBzdHlsZSBhIGJpdCBiZXR0ZXIuCislCitccmVuZXdjb21tYW5ke1xtYWtldGl0bGV9eyUKKyAgXGJlZ2lue3RpdGxlcGFnZX0lCisgICAgXGxldFxmb290bm90ZXNpemVcc21hbGwKKyAgICBcbGV0XGZvb3Rub3RlcnVsZVxyZWxheAorICAgIFxweUBkb0hvcml6b250YWxSdWxlJQorICAgIFxAaWZ1bmRlZmluZWR7cGRmaW5mb317fXt7CisgICAgICAlIFRoaXMgXGRlZiBpcyByZXF1aXJlZCB0byBkZWFsIHdpdGggbXVsdGktbGluZSBhdXRob3JzOyBpdAorICAgICAgJSBjaGFuZ2VzIFxcIHRvICcsICcgKGNvbW1hLXNwYWNlKSwgbWFraW5nIGl0IHBhc3MgbXVzdGVyIGZvcgorICAgICAgJSBnZW5lcmF0aW5nIGRvY3VtZW50IGluZm8gaW4gdGhlIFBERiBmaWxlLgorICAgICAgXGRlZlxceywgfQorICAgICAgXHBkZmluZm97CisgICAgICAgIC9BdXRob3IgKFxAYXV0aG9yKQorICAgICAgICAvVGl0bGUgKFxAdGl0bGUpCisgICAgICB9CisgICAgfX0KKyAgICBcYmVnaW57Zmx1c2hyaWdodH0lCisgICAgICB7XHJtXEh1Z2VccHlASGVhZGVyRmFtaWx5IFxAdGl0bGUgXHBhcn0lCisgICAgICB7XGVtXExBUkdFXHB5QEhlYWRlckZhbWlseSBccHlAcmVsZWFzZSBccGFyfQorICAgICAgXHZmaWxsCisgICAgICB7XExBUkdFXHB5QEhlYWRlckZhbWlseSBcQGF1dGhvciBccGFyfQorICAgICAgXHZmaWxsXHZmaWxsCisgICAgICB7XGxhcmdlCisgICAgICAgXEBkYXRlIFxwYXIKKyAgICAgICBcdmZpbGwKKyAgICAgICBccHlAYXV0aG9yYWRkcmVzcyBccGFyCisgICAgICB9JQorICAgIFxlbmR7Zmx1c2hyaWdodH0lXHBhcgorICAgIFxAdGhhbmtzCisgIFxlbmR7dGl0bGVwYWdlfSUKKyAgXHNldGNvdW50ZXJ7Zm9vdG5vdGV9ezB9JQorICBcbGV0XHRoYW5rc1xyZWxheFxsZXRcbWFrZXRpdGxlXHJlbGF4CisgIFxnZGVmXEB0aGFua3N7fVxnZGVmXEBhdXRob3J7fVxnZGVmXEB0aXRsZXt9Cit9CisKKworJSBDYXRjaCB0aGUgZW5kIG9mIHRoZSB7YWJzdHJhY3R9IGVudmlyb25tZW50LCBidXQgaGVyZSBtYWtlIHN1cmUgdGhlCislIGFic3RyYWN0IGlzIGZvbGxvd2VkIGJ5IGEgYmxhbmsgcGFnZSBpZiB0aGUgJ29wZW5yaWdodCcgb3B0aW9uIGlzIHVzZWQuCislCitcbGV0XHB5QE9sZEVuZEFic3RyYWN0PVxlbmRhYnN0cmFjdAorXHJlbmV3Y29tbWFuZHtcZW5kYWJzdHJhY3R9eworICBcaWZAb3BlbnJpZ2h0CisgICAgXGlmb2RkXHZhbHVle3BhZ2V9CisgICAgICBcdHlwZW91dHtBZGRpbmcgYmxhbmsgcGFnZSBhZnRlciB0aGUgYWJzdHJhY3QufQorICAgICAgXHZmaWxccGFnZWJyZWFrCisgICAgXGZpCisgIFxmaQorICBccHlAT2xkRW5kQWJzdHJhY3QKK30KKworJSBUaGlzIHdyYXBzIHRoZSBcdGFibGVvZmNvbnRlbnRzIG1hY3JvIHdpdGggYWxsIHRoZSBtYWdpYyB0byBnZXQgdGhlCislIHNwYWNpbmcgcmlnaHQgYW5kIGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBwYWdlcyBpZiB0aGUgJ29wZW5yaWdodCcKKyUgb3B0aW9uIGhhcyBiZWVuIHVzZWQuICBUaGlzIGVsaW1pbmF0ZXMgYSBmYWlyIGFtb3VudCBvZiBjcnVkIGluIHRoZQorJSBpbmRpdmlkdWFsIGRvY3VtZW50IGZpbGVzLgorJQorXGxldFxweUBPbGRUYWJsZW9mY29udGVudHM9XHRhYmxlb2Zjb250ZW50cworXHJlbmV3Y29tbWFuZHtcdGFibGVvZmNvbnRlbnRzfXslCisgIFxzZXRjb3VudGVye3BhZ2V9ezF9JQorICBccGFnZWJyZWFrJQorICBccGFnZXN0eWxle3BsYWlufSUKKyAgeyUKKyAgICBccGFyc2tpcCA9IDBtbSUKKyAgICBccHlAT2xkVGFibGVvZmNvbnRlbnRzJQorICAgIFxpZkBvcGVucmlnaHQlCisgICAgICBcaWZvZGRcdmFsdWV7cGFnZX0lCisgICAgICAgIFx0eXBlb3V0e0FkZGluZyBibGFuayBwYWdlIGFmdGVyIHRoZSB0YWJsZSBvZiBjb250ZW50cy59JQorICAgICAgICBccGFnZWJyZWFrXGhzcGFjZXswcHR9JQorICAgICAgXGZpJQorICAgIFxmaSUKKyAgICBcY2xlYXJkb3VibGVwYWdlJQorICB9JQorICBccGFnZW51bWJlcmluZ3thcmFiaWN9JQorICBcQGlmdW5kZWZpbmVke2ZhbmN5aGZ9e317XHBhZ2VzdHlsZXtub3JtYWx9fSUKKyAgXHB5QGRvaW5nQHBhZ2VAdGFyZ2V0c3RydWUlCit9CislIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0aGUgd2lkdGggb2YgdGhlIHNlY3Rpb24gIyBhcmVhIHdpZGUgZW5vdWdoIGluIHRoZQorJSBsaWJyYXJ5IHJlZmVyZW5jZS4gIERvaW5nIGl0IGhlcmUga2VlcHMgaXQgdGhlIHNhbWUgZm9yIGFsbCB0aGUgbWFudWFscy4KKyUKK1xyZW5ld2NvbW1hbmQqXGxAc2VjdGlvbntcQGRvdHRlZHRvY2xpbmV7MX17MS41ZW19ezIuNmVtfX0KK1xyZW5ld2NvbW1hbmQqXGxAc3Vic2VjdGlvbntcQGRvdHRlZHRvY2xpbmV7Mn17NC4xZW19ezMuNWVtfX0KK1xzZXRjb3VudGVye3RvY2RlcHRofXsxfQorCisKKyUgRml4IHRoZSB0aGVpbmRleCBlbnZpcm9ubWVudCB0byBhZGQgYW4gZW50cnkgdG8gdGhlIFRhYmxlIG9mCislIENvbnRlbnRzOyB0aGlzIGlzIG11Y2ggbmljZXIgdGhhbiBqdXN0IGhhdmluZyB0byBqdW1wIHRvIHRoZSBlbmQgb2YKKyUgdGhlIGJvb2sgYW5kIGZsaXAgYXJvdW5kLCBlc3BlY2lhbGx5IHdpdGggbXVsdGlwbGUgaW5kZXhlcy4KKyUKK1xsZXRccHlAT2xkVGhlaW5kZXg9XHRoZWluZGV4CitccmVuZXdjb21tYW5ke1x0aGVpbmRleH17CisgIFxjbGVhcmRvdWJsZXBhZ2UKKyAgXHB5QE9sZFRoZWluZGV4CisgIFxhZGRjb250ZW50c2xpbmV7dG9jfXtjaGFwdGVyfXtcaW5kZXhuYW1lfQorfQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3RleGlucHV0cy9weXBhcGVyLnN0eSBiL2RvYy90b29scy90ZXhpbnB1dHMvcHlwYXBlci5zdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk1OTYzNwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy90ZXhpbnB1dHMvcHlwYXBlci5zdHkKQEAgLTAsMCArMSwxOCBAQAorJQorJSAgQ2hhbmdlIHRoaXMgdG8gc2F5IGE0cGFwZXIgaW5zdGVhZCBvZiBsZXR0ZXJwYXBlciBpZiB5b3Ugd2FudCBBNC4gIFRoZXNlCislICBhcmUgdGhlIGxhdGV4IGRlZmF1bHRzLgorJQorXG5ld2NvbW1hbmR7XHB5QHBhcGVyfXtsZXR0ZXJwYXBlcn0KK1xuZXdjb21tYW5ke1xweUBwdHNpemV9ezEwcHR9CisKKyUgIFRoZXNlIHNldCB1cCB0aGUgZm9udHMgZm9yIHRoZSBkb2N1bWVudHMuCislCislICBUaGUgInRpbWVzIiBwYWNrYWdlIG1ha2VzIHRoZSBkZWZhdWx0IGZvbnQgdGhlIFBvc3RTY3JpcHQgVGltZXMKKyUgIGZvbnQsIHdoaWNoIG1ha2VzIGZvciBzbWFsbGVyIFBvc3RTY3JpcHQgYW5kIGEgZm9udCB0aGF0IG1vcmUgcGVvcGxlIAorJSAgbGlrZS4KKyUKKyUgIFRoZSAiYXZhbnQiIHBhY2thZ2UgY2F1c2VzIHRoZSBBdmFudEdhcmRlIGZvbnQgdG8gYmUgdXNlZCBmb3IKKyUgIHNhbnMtc2VyaWYgdGV4dCwgaW5zdGVhZCBvZiB0aGUgdWdsaWVyIEhlbHZldGljYSBzZXQgdXAgYnkgdGhlICJ0aW1lcyIKKyUgIHBhY2thZ2UuCislCitcUmVxdWlyZVBhY2thZ2V7dGltZXN9XHR5cGVvdXR7VXNpbmcgVGltZXMgaW5zdGVhZCBvZiBDb21wdXRlciBNb2Rlcm4ufQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3RleGlucHV0cy9weXRob24uaXN0IGIvZG9jL3Rvb2xzL3RleGlucHV0cy9weXRob24uaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZmEwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvdGV4aW5wdXRzL3B5dGhvbi5pc3QKQEAgLTAsMCArMSwxMSBAQAorbGluZV9tYXggMTAwCitoZWFkaW5nc19mbGFnIDEKK2hlYWRpbmdfcHJlZml4ICIgIFxcYmlnbGV0dGVyICIKKworcHJlYW1ibGUgIlxcYmVnaW57dGhlaW5kZXh9CitcXGRlZlxcYmlnbGV0dGVyIzF7e1xcTGFyZ2VcXHNmZmFtaWx5IzF9XFxub3BhZ2VicmVha1xcdnNwYWNlezFtbX19CisKKyIKKworc3ltaGVhZF9wb3NpdGl2ZSAie1N5bWJvbHN9IgorbnVtaGVhZF9wb3NpdGl2ZSAie051bWJlcnN9IgpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3RleGlucHV0cy9weXRob24uc3R5IGIvZG9jL3Rvb2xzL3RleGlucHV0cy9weXRob24uc3R5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNjFkODcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvdGV4aW5wdXRzL3B5dGhvbi5zdHkKQEAgLTAsMCArMSwxMDgyIEBACislCislIHB5dGhvbi5zdHkgZm9yIHRoZSBQeXRob24gZG9jdW1tZW50YXRpb24gIFt3b3JrcyBvbmx5IHdpdGggd2l0aCBMYXRleDJlXQorJQorCitcTmVlZHNUZVhGb3JtYXR7TGFUZVgyZX1bMTk5NS8xMi8wMV0KK1xQcm92aWRlc1BhY2thZ2V7cHl0aG9ufQorICAgICAgICAgICAgIFsxOTk4LzAxLzExIExhVGVYIHBhY2thZ2UgKFB5dGhvbiBtYXJrdXApXQorCitcUmVxdWlyZVBhY2thZ2V7bG9uZ3RhYmxlfQorCislIFVuY29tbWVudCB0aGVzZSB0d28gbGluZXMgdG8gaWdub3JlIHRoZSBwYXBlciBzaXplIGFuZCBtYWtlIHRoZSBwYWdlIAorJSBzaXplIG1vcmUgbGlrZSBhIHR5cGljYWwgcHVibGlzaGVkIG1hbnVhbC4KKyVccmVuZXdjb21tYW5ke1xwYXBlcmhlaWdodH17OWlufQorJVxyZW5ld2NvbW1hbmR7XHBhcGVyd2lkdGh9ezguNWlufSAgICUgdHlwaWNhbCBzcXVhcmlzaCBtYW51YWwKKyVccmVuZXdjb21tYW5ke1xwYXBlcndpZHRofXs3aW59ICAgICAlIE8nUmVpbGx5IGBgUHJvZ3JhbW1taW5nIFB5dGhvbicnCisKKyUgVGhlc2UgcGFja2FnZXMgY2FuIGJlIHVzZWQgdG8gYWRkIG1hcmdpbmFsIGFubm90YXRpb25zIHdoaWNoIGluZGljYXRlCislIGluZGV4IGVudHJpZXMgYW5kIGxhYmVsczsgdXNlZnVsIGZvciByZXZpZXdpbmcgdGhpcyBtZXNzeSBkb2N1bWVudGF0aW9uIQorJQorJVxSZXF1aXJlUGFja2FnZXtzaG93a2V5c30KKyVcUmVxdWlyZVBhY2thZ2V7c2hvd2lkeH0KKworJSBmb3IgUERGIG91dHB1dCwgdXNlIG1heGltYWwgY29tcHJlc3Npb24gJiBhIGxvdCBvZiBvdGhlciBzdHVmZgorJSAodGVzdCBmb3IgUERGIHJlY29tbWVuZGVkIGJ5IFRhbm1veSBCaGF0dGFjaGFyeWEgPHRhbm1veUBxY2QubGFubC5nb3Y+KQorJQorXG5ld2lmXGlmcHlAZG9pbmdAcGFnZUB0YXJnZXRzCitccHlAZG9pbmdAcGFnZUB0YXJnZXRzZmFsc2UKKworXGlmeFxwZGZvdXRwdXRcdW5kZWZpbmVkXGVsc2VcaWZjYXNlXHBkZm91dHB1dAorXGVsc2UKKyAgXGlucHV0e3BkZmNvbG9yfQorICBcbGV0XHB5QExpbmtDb2xvcj1cTmF2eUJsdWUKKyAgXGxldFxweUBOb3JtYWxDb2xvcj1cQmxhY2sKKyAgXHBkZmNvbXByZXNzbGV2ZWw9OQorICBccGRmcGFnZXdpZHRoPVxwYXBlcndpZHRoICAgICUgcGFnZSB3aWR0aCBvZiBQREYgb3V0cHV0CisgIFxwZGZwYWdlaGVpZ2h0PVxwYXBlcmhlaWdodCAgJSBwYWdlIGhlaWdodCBvZiBQREYgb3V0cHV0CisgICUKKyAgJSBQYWQgdGhlIG51bWJlciB3aXRoICcwJyB0byAzIGRpZ2l0cyB3aWRlIHNvIG5vIHBhZ2UgbmFtZSBpcyBhIHByZWZpeAorICAlIG9mIGFueSBvdGhlci4KKyAgJQorICBcbmV3Y29tbWFuZHtccHlAdGFyZ2V0bm99WzFde1xpZm51bSMxPDEwMCAwXGZpXGlmbnVtIzE8MTAgMFxmaSMxfQorICBcbmV3Y29tbWFuZHtccHlAcGFnZW5vfXtccHlAdGFyZ2V0bm9cdGhlcGFnZX0KKyAgJQorICAlIFRoaXMgZGVmaW5pdGlvbiBhbGxvd3MgdGhlIGVudHJpZXMgaW4gdGhlIHBhZ2UtdmlldyBvZiB0aGUgVG9DIHRvIGJlCisgICUgYWN0aXZlIGxpbmtzLiAgU29tZSB3b3JrLCBzb21lIGRvbid0LgorICAlCisgIFxsZXRccHlAT2xkQ29udGVudHNsaW5lPVxjb250ZW50c2xpbmUKKyAgJQorICAlIE1hY3JvIHRoYXQgdGFrZXMgdHdvIGFyZ3M6IHRoZSBuYW1lIHRvIGxpbmsgdG8gYW5kIHRoZSBjb250ZW50IG9mCisgICUgdGhlIGxpbmsuICBUaGlzIHRha2VzIGNhcmUgb2YgdGhlIFBERiBtYWdpYywgZ2V0dGluZyB0aGUgY29sb3JzCisgICUgdGhlIHNhbWUgZm9yIGVhY2ggbGluaywgYW5kIGF2b2lkcyBoYXZpbmcgbG90cyBvZiBnYXJiYWdlIGFsbCBvdmVyIAorICAlIHRoaXMgc3R5bGUgZmlsZS4KKyAgXG5ld2NvbW1hbmR7XHB5QGxpbmtUb05hbWV9WzJdeyUKKyAgICBccGRmYW5ub3RsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSBnb3RvIG5hbWV7IzF9JQorICAgICAgXHB5QExpbmtDb2xvciMyXHB5QE5vcm1hbENvbG9yJQorICAgIFxwZGZlbmRsaW5rJQorICB9ICAgIAorICAlIENvbXB1dGUgdGhlIHBhZGRlZCBwYWdlIG51bWJlciBzZXBhcmF0ZWx5IHNpbmNlIHdlIGVuZCB1cCB3aXRoIGEgcGFpciBvZgorICAlIFxyZWxheCB0b2tlbnM7IHRoaXMgZ2V0cyB0aGUgcmlnaHQgc3RyaW5nIGNvbXB1dGVkIGFuZCB3b3Jrcy4KKyAgXHJlbmV3Y29tbWFuZHtcY29udGVudHNsaW5lfVszXXslCisgICAgXGRlZlxteUBwYWdlbm97XHB5QHRhcmdldG5veyMzfX0lCisgICAgXHB5QE9sZENvbnRlbnRzbGluZXsjMX17XHB5QGxpbmtUb05hbWV7cGFnZVxteUBwYWdlbm99eyMyfX17IzN9JQorICB9CisgIFxBdEVuZERvY3VtZW50eworICAgIFxJbnB1dElmRmlsZUV4aXN0c3tcam9ibmFtZS5ia219e1xwZGZjYXRhbG9ney9QYWdlTW9kZSAvVXNlT3V0bGluZXN9fXt9CisgIH0KKyAgXG5ld2NvbW1hbmR7XHB5QHRhcmdldH1bMV17JQorICAgIFxpZnB5QGRvaW5nQHBhZ2VAdGFyZ2V0cyUKKyAgICAgIHtccGRmZGVzdCBuYW1leyMxfSB4eXp9JQorICAgIFxmaSUKKyAgfQorICBcbGV0XHB5QE9sZExhYmVsPVxsYWJlbAorICBccmVuZXdjb21tYW5ke1xsYWJlbH1bMV17JQorICAgIFxweUBPbGRMYWJlbHsjMX0lCisgICAgXHB5QHRhcmdldHtsYWJlbC0jMX0lCisgIH0KKyAgJSBUaGlzIHN0dWZmIGFkZHMgYSBwYWdlIyBkZXN0aW5hdGlvbiB0byBldmVyeSBQREYgcGFnZSwgd2hlcmUgIyBpcyB0aHJlZQorICAlIGRpZ2l0cyB3aWRlLCBwYWRkZWQgd2l0aCBsZWFkaW5nIHplcm9zLiAgVGhpcyBkb2Vzbid0IHJlYWxseSBoZWxwIHdpdGgKKyAgJSB0aGUgZnJvbnRtYXR0ZXIsIGJ1dCBkb2VzIGZpbmUgd2l0aCB0aGUgYm9keS4KKyAgJQorICAlIFRoaXMgaXMgKmhlYXZpbHkqIGJhc2VkIG9uIHRoZSBoeXBlcnJlZiBwYWNrYWdlLgorICAlCisgIFxkZWZcQGJlZ2luZHZpeyUKKyAgICBcdW52Ym94IFxAYmVnaW5kdmlib3gKKyAgICBcQGh5cGVyZml4aGVhZAorICB9CisgIFxkZWZcQGh5cGVyZml4aGVhZHslCisgICBcbGV0XEhAb2xkQHRoZWhlYWRcQHRoZWhlYWQKKyAgICAgICBcZ2xvYmFsXGRlZlxAZm9ve1xweUB0YXJnZXR7cGFnZVxweUBwYWdlbm99fSUKKyAgICAgXGV4cGFuZGFmdGVyXGlmeFxleHBhbmRhZnRlclxAZW1wdHlcSEBvbGRAdGhlaGVhZAorICAgICAgIFxkZWZcSEBvbGRAdGhlaGVhZHtcaGZpbH1cZmkKKyAgICBcZGVmXEB0aGVoZWFke1xAZm9vXHJlbGF4XEhAb2xkQHRoZWhlYWR9JQorICB9CitcZmlcZmkKKworJSBJbmNyZWFzZSBwcmludGFibGUgcGFnZSBzaXplIChjb3BpZWQgZnJvbSBmdWxscGFnZS5zdHkpCitcdG9wbWFyZ2luIDBwdAorXGFkdmFuY2UgXHRvcG1hcmdpbiBieSAtXGhlYWRoZWlnaHQKK1xhZHZhbmNlIFx0b3BtYXJnaW4gYnkgLVxoZWFkc2VwCisKKyUgYXR0ZW1wdCB0byB3b3JrIGEgbGl0dGxlIGJldHRlciBmb3IgQTQgdXNlcnMKK1x0ZXh0aGVpZ2h0IFxwYXBlcmhlaWdodAorXGFkdmFuY2VcdGV4dGhlaWdodCBieSAtMmluCisKK1xvZGRzaWRlbWFyZ2luIDBwdAorXGV2ZW5zaWRlbWFyZ2luIDBwdAorJVxldmVuc2lkZW1hcmdpbiAtLjI1aW4gICUgZm9yIGBgbWFudWFsIHNpemUnJyBkb2N1bWVudHMKK1xtYXJnaW5wYXJ3aWR0aCAwLjVpbgorCitcdGV4dHdpZHRoIFxwYXBlcndpZHRoCitcYWR2YW5jZVx0ZXh0d2lkdGggYnkgLTJpbgorCisKKyUgU3R5bGUgcGFyYW1ldGVycyBhbmQgbWFjcm9zIHVzZWQgYnkgbW9zdCBkb2N1bWVudHMgaGVyZQorXHJhZ2dlZGJvdHRvbQorXHNsb3BweQorXHBhcmluZGVudCA9IDBtbQorXHBhcnNraXAgPSAybW0KK1xoYmFkbmVzcyA9IDUwMDAgICAgICAgICAgICAgICAgJSBkb24ndCBwcmludCB0cml2aWFsIGdyaXBlcworCitccGFnZXN0eWxle2VtcHR5fSAgICAgICAgICAgICAgICUgc3RhcnQgdGhpcyB3YXk7IGNoYW5nZSBmb3IKK1xwYWdlbnVtYmVyaW5ne3JvbWFufSAgICAgICAgICAgJSBUb0MgJiBjaGFwdGVycworCislIFVzZSB0aGlzIHRvIHNldCB0aGUgZm9udCBmYW1pbHkgZm9yIGhlYWRlcnMgYW5kIG90aGVyIGRlY29yOgorXG5ld2NvbW1hbmR7XHB5QEhlYWRlckZhbWlseX17XHNmZmFtaWx5fQorCislIFJlZGVmaW5lIHRoZSAnbm9ybWFsJyBoZWFkZXIvZm9vdGVyIHN0eWxlIHdoZW4gdXNpbmcgImZhbmN5aGRyIiBwYWNrYWdlOgorXEBpZnVuZGVmaW5lZHtmYW5jeWhmfXt9eworICAlIFVzZSBccGFnZXN0eWxle25vcm1hbH0gYXMgdGhlIHByaW1hcnkgcGFnZXN0eWxlIGZvciB0ZXh0LgorICBcZmFuY3lwYWdlc3R5bGV7bm9ybWFsfXsKKyAgICBcZmFuY3loZnt9CisgICAgXGZhbmN5Zm9vdFtMRSxST117e1xweUBIZWFkZXJGYW1pbHlcdGhlcGFnZX19CisgICAgXGZhbmN5Zm9vdFtMT117e1xweUBIZWFkZXJGYW1pbHlcbm91cHBlcmNhc2V7XHJpZ2h0bWFya319fQorICAgIFxmYW5jeWZvb3RbUkVde3tccHlASGVhZGVyRmFtaWx5XG5vdXBwZXJjYXNle1xsZWZ0bWFya319fQorICAgIFxyZW5ld2NvbW1hbmR7XGhlYWRydWxld2lkdGh9ezBwdH0KKyAgICBccmVuZXdjb21tYW5ke1xmb290cnVsZXdpZHRofXswLjRwdH0KKyAgfQorICAlIFVwZGF0ZSB0aGUgcGxhaW4gc3R5bGUgc28gd2UgZ2V0IHRoZSBwYWdlIG51bWJlciAmIGZvb3RlciBsaW5lLAorICAlIGJ1dCBub3QgYSBjaGFwdGVyIG9yIHNlY3Rpb24gdGl0bGUuICBUaGlzIGlzIHRvIGtlZXAgdGhlIGZpcnN0CisgICUgcGFnZSBvZiBhIGNoYXB0ZXIgYW5kIHRoZSBibGFuayBwYWdlIGJldHdlZW4gY2hhcHRlcnMgYGNsZWFuLicKKyAgXGZhbmN5cGFnZXN0eWxle3BsYWlufXsKKyAgICBcZmFuY3loZnt9CisgICAgXGZhbmN5Zm9vdFtMRSxST117e1xweUBIZWFkZXJGYW1pbHlcdGhlcGFnZX19CisgICAgXHJlbmV3Y29tbWFuZHtcaGVhZHJ1bGV3aWR0aH17MHB0fQorICAgIFxyZW5ld2NvbW1hbmR7XGZvb3RydWxld2lkdGh9ezAuNHB0fQorICB9CisgICUgUmVkZWZpbmUgXGNsZWFyZG91YmxlcGFnZSBzbyB0aGF0IHRoZSBibGFuayBwYWdlIGJldHdlZW4gY2hhcHRlcnMKKyAgJSBnZXRzIHRoZSBwbGFpbiBzdHlsZSBhbmQgbm90IHRoZSBmYW5jeSBzdHlsZS4gIFRoaXMgaXMgZGVzY3JpYmVkCisgICUgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmYW5jeWhkciBwYWNrYWdlIGJ5IFBpZXQgdm9uIE9vc3RydW0uCisgIFxAaWZ1bmRlZmluZWR7Y2hhcHRlcn17fXsKKyAgICBccmVuZXdjb21tYW5ke1xjbGVhcmRvdWJsZXBhZ2V9eworICAgICAgXGNsZWFycGFnZVxpZkBvcGVucmlnaHQgXGlmb2RkXGNAcGFnZVxlbHNlCisgICAgICBcaGJveHt9CisgICAgICBcdGhpc3BhZ2VzdHlsZXtwbGFpbn0KKyAgICAgIFxuZXdwYWdlCisgICAgICBcaWZAdHdvY29sdW1uXGhib3h7fVxuZXdwYWdlXGZpXGZpXGZpCisgICAgfQorICB9Cit9CisKKyUgVGhpcyBzZXRzIHVwIHRoZSB7dmVyYmF0aW19IGVudmlyb25tZW50IHRvIGJlIGluZGVudGVkIGFuZCBhIG1pbmlwYWdlLAorJSBhbmQgdG8gaGF2ZSBhbGwgdGhlIG90aGVyIG1vc3RseSBuaWNlIHByb3BlcnRpZXMgdGhhdCB3ZSB3YW50IGZvcgorJSBjb2RlIHNhbXBsZXMuCisKK1xsZXRccHlAT2xkVmVyYmF0aW09XHZlcmJhdGltCitcbGV0XHB5QE9sZEVuZFZlcmJhdGltPVxlbmR2ZXJiYXRpbQorXFJlcXVpcmVQYWNrYWdle3ZlcmJhdGltfQorCislIFZhcmlhYmxlIHVzZWQgYnkgYmVnaW4gY29kZSBjb21tYW5kCitcbmV3bGVuZ3Roe1xweUBjb2Rld2lkdGh9CisKK1xyZW5ld2NvbW1hbmR7XHZlcmJhdGltfXslCisgIFxzZXRsZW5ndGh7XHBhcmluZGVudH17MWNtfSUKKyAgJSBDYWxjdWxhdGUgdGhlIHRleHQgd2lkdGggZm9yIHRoZSBtaW5pcGFnZToKKyAgXHNldGxlbmd0aHtccHlAY29kZXdpZHRofXtcbGluZXdpZHRofSUKKyAgXGFkZHRvbGVuZ3Roe1xweUBjb2Rld2lkdGh9ey1ccGFyaW5kZW50fSUKKyAgJQorICBccGFyXGluZGVudCUKKyAgXGJlZ2lue21pbmlwYWdlfVt0XXtccHlAY29kZXdpZHRofSUKKyAgICBcc21hbGwlCisgICAgXHB5QE9sZFZlcmJhdGltJQorfQorXHJlbmV3Y29tbWFuZHtcZW5kdmVyYmF0aW19eyUKKyAgICBccHlAT2xkRW5kVmVyYmF0aW0lCisgIFxlbmR7bWluaXBhZ2V9JQorfQorCislIFRoaXMgZG9lcyBhIHNpbWlsYXIgdGhpbmcgZm9yIHRoZSB7YWxsdHR9IGVudmlyb25tZW50OgorXFJlcXVpcmVQYWNrYWdle2FsbHR0fQorXGxldFxweUBPbGRBbGxUVD1cYWxsdHQKK1xsZXRccHlAT2xkRW5kQWxsVFQ9XGVuZGFsbHR0CisKK1xyZW5ld2NvbW1hbmR7XGFsbHR0fXslCisgIFxzZXRsZW5ndGh7XHBhcmluZGVudH17MWNtfSUKKyAgJSBDYWxjdWxhdGUgdGhlIHRleHQgd2lkdGggZm9yIHRoZSBtaW5pcGFnZToKKyAgXHNldGxlbmd0aHtccHlAY29kZXdpZHRofXtcbGluZXdpZHRofSUKKyAgXGFkZHRvbGVuZ3Roe1xweUBjb2Rld2lkdGh9ey1ccGFyaW5kZW50fSUKKyAgJQorICBccGFyXGluZGVudCUKKyAgXGJlZ2lue21pbmlwYWdlfVt0XXtccHlAY29kZXdpZHRofSUKKyAgICBcc21hbGwlCisgICAgXHB5QE9sZEFsbFRUJQorfQorXHJlbmV3Y29tbWFuZHtcZW5kYWxsdHR9eyUKKyAgICBccHlAT2xkRW5kQWxsVFQlCisgIFxlbmR7bWluaXBhZ2V9JQorfQorCisKK1xuZXdjb21tYW5ke1xweUBtb2R1bGViYWRrZXl9e3stLWp1c3Qtc29tZS1qdW5rLS19fQorCisKKyUlICBMb3RzIG9mIGluZGV4LWVudHJ5IGdlbmVyYXRpb24gc3VwcG9ydC4KKworJSBDb21tYW5kIHRvIHdyYXAgYXJvdW5kIHN0dWZmIHRoYXQgcmVmZXJzIHRvIGZ1bmN0aW9uIC8gbW9kdWxlIC8KKyUgYXR0cmlidXRlIG5hbWVzICBpbiB0aGUgaW5kZXguICBEZWZhdWx0IGJlaGF2aW9yOiBsaWtlIFxjb2Rle30uICBUbworJSBqdXN0IGtlZXAgdGhlIGluZGV4IGVudHJpZXMgaW4gdGhlIHJvbWFuIGZvbnQsIHVuY29tbWVudCB0aGUgc2Vjb25kCislIGRlZmluaXRpb247IGl0IG1hdGNoZXMgTydSZWlsbHkgc3R5bGUgbW9yZS4KKyUKK1xuZXdjb21tYW5ke1xweUBpZHhjb2RlfVsxXXtcdGV4dHR0eyMxfX0KKyVccmVuZXdjb21tYW5ke1xweUBpZHhjb2RlfVsxXXsjMX0KKworJSBDb21tYW5kIHRvIGdlbmVyYXRlIHR3byBpbmRleCBlbnRyaWVzICh1c2luZyBzdWJlbnRyaWVzKQorXG5ld2NvbW1hbmR7XGluZGV4aWl9WzJde1xpbmRleHsjMSEjMn1caW5kZXh7IzIhIzF9fQorCislIEFuZCB0aHJlZSBlbnRyaWVzICh1c2luZyBvbmx5IG9uZSBsZXZlbCBvZiBzdWJlbnRyaWVzKQorXG5ld2NvbW1hbmR7XGluZGV4aWlpfVszXXtcaW5kZXh7IzEhIzIgIzN9XGluZGV4eyMyISMzLCAjMX1caW5kZXh7IzMhIzEgIzJ9fQorCislIEFuZCBmb3VyIChhZ2FpbiwgdXNpbmcgb25seSBvbmUgbGV2ZWwgb2Ygc3ViZW50cmllcykKK1xuZXdjb21tYW5ke1xpbmRleGl2fVs0XXsKK1xpbmRleHsjMSEjMiAjMyAjNH0KK1xpbmRleHsjMiEjMyAjNCwgIzF9CitcaW5kZXh7IzMhIzQsICMxICMyfQorXGluZGV4eyM0ISMxICMyICMzfQorfQorCislIENvbW1hbmQgdG8gZ2VuZXJhdGUgYSByZWZlcmVuY2UgdG8gYSBmdW5jdGlvbiwgc3RhdGVtZW50LCBrZXl3b3JkLAorJSBvcGVyYXRvci4KK1xuZXdjb21tYW5ke1xrd2luZGV4fVsxXXtcaW5kZXhpaXtrZXl3b3JkfXsjMUB7XHB5QGlkeGNvZGV7IzF9fX19CitcbmV3Y29tbWFuZHtcc3RpbmRleH1bMV17XGluZGV4aWl7c3RhdGVtZW50fXsjMUB7XHB5QGlkeGNvZGV7IzF9fX19CitcbmV3Y29tbWFuZHtcb3BpbmRleH1bMV17XGluZGV4aWl7b3BlcmF0b3J9eyMxQHtccHlAaWR4Y29kZXsjMX19fX0KK1xuZXdjb21tYW5ke1xleGluZGV4fVsxXXtcaW5kZXhpaXtleGNlcHRpb259eyMxQHtccHlAaWR4Y29kZXsjMX19fX0KK1xuZXdjb21tYW5ke1xvYmluZGV4fVsxXXtcaW5kZXhpaXtvYmplY3R9eyMxfX0KK1xuZXdjb21tYW5ke1xiaWZ1bmNpbmRleH1bMV17JQorICBcaW5kZXh7IzFAe1xweUBpZHhjb2RleyMxKCl9fSAoYnVpbHQtaW4gZnVuY3Rpb24pfX0KKworJSBBZGQgYW4gaW5kZXggZW50cnkgZm9yIGEgbW9kdWxlCitcbmV3Y29tbWFuZHtccHlAcmVmbW9kdWxlfVsyXXtcaW5kZXh7IzFAe1xweUBpZHhjb2RleyMxfX0gKCMybW9kdWxlKX19CitcbmV3Y29tbWFuZHtccmVmbW9kaW5kZXh9WzFde1xweUByZWZtb2R1bGV7IzF9e319CitcbmV3Y29tbWFuZHtccmVmYmltb2RpbmRleH1bMV17XHB5QHJlZm1vZHVsZXsjMX17YnVpbHQtaW4gfX0KK1xuZXdjb21tYW5ke1xyZWZleG1vZGluZGV4fVsxXXtccHlAcmVmbW9kdWxleyMxfXtleHRlbnNpb24gfX0KK1xuZXdjb21tYW5ke1xyZWZzdG1vZGluZGV4fVsxXXtccHlAcmVmbW9kdWxleyMxfXtzdGFuZGFyZCB9fQorCislIFJlZmVyIHRvIGEgbW9kdWxlJ3MgZG9jdW1lbnRhdGlvbiB1c2luZyBhIGh5cGVybGluayBvZiB0aGUgbW9kdWxlJ3MKKyUgbmFtZSwgYXQgbGVhc3QgaWYgd2UncmUgYnVpbGRpbmcgUERGOgorXEBpZnVuZGVmaW5lZHtwZGZhbm5vdGxpbmt9eyUKKyAgXG5ld2NvbW1hbmR7XHJlZm1vZHVsZX1bMl1bXHB5QG1vZHVsZWJhZGtleV17XG1vZHVsZXsjMn19Cit9eyUKKyAgXG5ld2NvbW1hbmR7XHJlZm1vZHVsZX1bMl1bXHB5QG1vZHVsZWJhZGtleV17JQorICAgIFxpZnhccHlAbW9kdWxlYmFka2V5IzFcZGVmXHB5QG1vZHVsZWtleXsjMn1cZWxzZVxkZWZccHlAbW9kdWxla2V5eyMxfVxmaSUKKyAgICBccHlAbGlua1RvTmFtZXtsYWJlbC1tb2R1bGUtXHB5QG1vZHVsZWtleX17XG1vZHVsZXsjMn19JQorICB9Cit9CisKKyUgc3VwcG9ydCBmb3IgdGhlIG1vZHVsZSBpbmRleAorXG5ld2lmXGlmcHlAVXNlTW9kdWxlSW5kZXgKK1xweUBVc2VNb2R1bGVJbmRleGZhbHNlCisKK1xuZXdjb21tYW5ke1xtYWtlbW9kaW5kZXh9eworICBcbmV3d3JpdGVcbW9kaW5kZXhmaWxlCisgIFxvcGVub3V0XG1vZGluZGV4ZmlsZT1tb2Rcam9ibmFtZS5pZHgKKyAgXHB5QFVzZU1vZHVsZUluZGV4dHJ1ZQorfQorCislIEFkZCB0aGUgZGVmaW5pbmcgZW50cnkgZm9yIGEgbW9kdWxlCitcbmV3Y29tbWFuZHtccHlAbW9kaW5kZXh9WzJdeyUKKyAgXHJlbmV3Y29tbWFuZHtccHlAdGhpc21vZHVsZX17IzF9CisgIFxzZXRpbmRleHN1Yml0ZW17KGluIG1vZHVsZSAjMSl9JQorICBcaW5kZXh7IzFAe1xweUBpZHhjb2RleyMxfX0gKCMybW9kdWxlKXx0ZXh0YmZ9JQorICBcaWZweUBVc2VNb2R1bGVJbmRleCUKKyAgICBcQGlmdW5kZWZpbmVke3B5QG1vZHBsYXRAXHB5QHRoaXNtb2R1bGVrZXl9eworICAgICAgXHdyaXRlXG1vZGluZGV4ZmlsZXtccHJvdGVjdFxpbmRleGVudHJ5eyMxQHtcdGV4dHR0eyMxfX19e1x0aGVwYWdlfX0lCisgICAgfXtcd3JpdGVcbW9kaW5kZXhmaWxle1xwcm90ZWN0XGluZGV4ZW50cnl7IzFAe1x0ZXh0dHR7IzF9ICUKKyAgICAgICAgXGVtcGh7KFxweUBwbGF0Zm9ybW9mW1xweUB0aGlzbW9kdWxla2V5XXt9KX19fXtcdGhlcGFnZX19JQorICAgIH0KKyAgXGZpJQorfQorCislICoqKiBYWFggKioqIFRIRSBORVhUIEZPVVIgTUFDUk9TIEFSRSBOT1cgT0JTT0xFVEUgISEhICoqKgorCislIGJ1aWx0LWluICYgUHl0aG9uIG1vZHVsZXMgaW4gdGhlIG1haW4gZGlzdHJpYnV0aW9uCitcbmV3Y29tbWFuZHtcYmltb2RpbmRleH1bMV17XHB5QG1vZGluZGV4eyMxfXtidWlsdC1pbiB9JQorICBcdHlwZW91dHsqKiogTUFDUk8gYmltb2RpbmRleCBJUyBPQlNPTEVURSAtLSBVU0UgZGVjbGFyZW1vZHVsZSBJTlNURUFEIX19CitcbmV3Y29tbWFuZHtcc3Rtb2RpbmRleH1bMV17XHB5QG1vZGluZGV4eyMxfXtzdGFuZGFyZCB9JQorICBcdHlwZW91dHsqKiogTUFDUk8gc3Rtb2RpbmRleCBJUyBPQlNPTEVURSAtLSBVU0UgZGVjbGFyZW1vZHVsZSBJTlNURUFEIX19CisKKyUgUHl0aG9uICYgZXh0ZW5zaW9uIG1vZHVsZXMgb3V0c2lkZSB0aGUgbWFpbiBkaXN0cmlidXRpb24KK1xuZXdjb21tYW5ke1xtb2RpbmRleH1bMV17XHB5QG1vZGluZGV4eyMxfXt9JQorICBcdHlwZW91dHsqKiogTUFDUk8gbW9kaW5kZXggSVMgT0JTT0xFVEUgLS0gVVNFIGRlY2xhcmVtb2R1bGUgSU5TVEVBRCF9fQorXG5ld2NvbW1hbmR7XGV4bW9kaW5kZXh9WzFde1xweUBtb2RpbmRleHsjMX17ZXh0ZW5zaW9uIH0lCisgIFx0eXBlb3V0eyoqKiBNQUNSTyBleG1vZGluZGV4IElTIE9CU09MRVRFIC0tIFVTRSBkZWNsYXJlbW9kdWxlIElOU1RFQUQhfX0KKworJSBBZGRpdGlvbmFsIHN0cmluZyBmb3IgYW4gaW5kZXggZW50cnkKK1xuZXdpZlxpZnB5QHVzaW5nc3ViaXRlbVxweUB1c2luZ3N1Yml0ZW1mYWxzZQorXG5ld2NvbW1hbmR7XHB5QGluZGV4c3ViaXRlbX17fQorXG5ld2NvbW1hbmR7XHNldGluZGV4c3ViaXRlbX1bMV17XHJlbmV3Y29tbWFuZHtccHlAaW5kZXhzdWJpdGVtfXsgIzF9JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHB5QHVzaW5nc3ViaXRlbXRydWV9CitcbmV3Y29tbWFuZHtcdHRpbmRleH1bMV17JQorICBcaWZweUB1c2luZ3N1Yml0ZW0KKyAgICBcaW5kZXh7IzFAe1xweUBpZHhjb2RleyMxfX1ccHlAaW5kZXhzdWJpdGVtfSUKKyAgXGVsc2UlCisgICAgXGluZGV4eyMxQHtccHlAaWR4Y29kZXsjMX19fSUKKyAgXGZpJQorfQorXG5ld2NvbW1hbmR7XHdpdGhzdWJpdGVtfVsyXXslCisgIFxiZWdpbmdyb3VwJQorICAgIFxkZWZcdHRpbmRleCMjMXtcaW5kZXh7IyMxQHtccHlAaWR4Y29kZXsjIzF9fSAjMX19JQorICAgICMyJQorICBcZW5kZ3JvdXAlCit9CisKKworJSBNb2R1bGUgc3lub3BzaXMgcHJvY2Vzc2luZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJQorXG5ld2NvbW1hbmR7XHB5QHRoaXNjbGFzc317fQorXG5ld2NvbW1hbmR7XHB5QHRoaXNtb2R1bGV9e30KK1xuZXdjb21tYW5ke1xweUB0aGlzbW9kdWxla2V5fXt9CitcbmV3Y29tbWFuZHtccHlAdGhpc21vZHVsZXR5cGV9e30KKworXG5ld2NvbW1hbmR7XHB5QHN0YW5kYXJkSW5kZXhNb2R1bGV9WzFde1xweUBtb2RpbmRleHsjMX17c3RhbmRhcmQgfX0KK1xuZXdjb21tYW5ke1xweUBidWlsdGluSW5kZXhNb2R1bGV9WzFde1xweUBtb2RpbmRleHsjMX17YnVpbHQtaW4gfX0KK1xuZXdjb21tYW5ke1xweUBleHRlbnNpb25JbmRleE1vZHVsZX1bMV17XHB5QG1vZGluZGV4eyMxfXtleHRlbnNpb24gfX0KK1xuZXdjb21tYW5ke1xweUBJbmRleE1vZHVsZX1bMV17XHB5QG1vZGluZGV4eyMxfXt9fQorCitcbmV3aWZcaWZweUBIYXZlTW9kU3lub3BzaXMgICAgICAgXHB5QEhhdmVNb2RTeW5vcHNpc2ZhbHNlCitcbmV3aWZcaWZweUBNb2RTeW5vcHNpc0ZpbGVJc09wZW4gXHB5QE1vZFN5bm9wc2lzRmlsZUlzT3BlbmZhbHNlCitcbmV3aWZcaWZweUBIYXZlTW9kUGxhdGZvcm0gICAgICAgXHB5QEhhdmVNb2RQbGF0Zm9ybWZhbHNlCisKKyUgXGRlY2xhcmVtb2R1bGVba2V5XXt0eXBlfXtuYW1lfQorXG5ld2NvbW1hbmR7XGRlY2xhcmVtb2R1bGV9WzNdW1xweUBtb2R1bGViYWRrZXldeworICBccHlAb3Blbk1vZFN5bm9wc2lzRmlsZQorICBccmVuZXdjb21tYW5ke1xweUB0aGlzbW9kdWxldHlwZX17IzJ9CisgIFxpZnhccHlAbW9kdWxlYmFka2V5IzEKKyAgICBccmVuZXdjb21tYW5ke1xweUB0aGlzbW9kdWxla2V5fXsjM30KKyAgXGVsc2UKKyAgICBccmVuZXdjb21tYW5ke1xweUB0aGlzbW9kdWxla2V5fXsjMX0KKyAgXGZpCisgIFxAaWZ1bmRlZmluZWR7cHlAIzJJbmRleE1vZHVsZX17JQorICAgIFx0eXBlb3V0eyoqKiBNQUNSTyBkZWNsYXJlbW9kdWxlIGNhbGxlZCB3aXRoIHVua25vd24gbW9kdWxlIHR5cGU6IGAjMid9CisgICAgXHB5QEluZGV4TW9kdWxleyMzfSUKKyAgfXslCisgICAgXGNzbmFtZSBweUAjMkluZGV4TW9kdWxlXGVuZGNzbmFtZXsjM30lCisgIH0KKyAgXGxhYmVse21vZHVsZS1ccHlAdGhpc21vZHVsZWtleX0KK30KK1xuZXdpZlxpZnB5QE1vZFBsYXRmb3JtRmlsZUlzT3BlbiBccHlATW9kUGxhdGZvcm1GaWxlSXNPcGVuZmFsc2UKK1xuZXdjb21tYW5ke1xweUBNb2RQbGF0Zm9ybUZpbGVuYW1lfXtcam9ibmFtZS5wbGF9CitcbmV3Y29tbWFuZHtccGxhdGZvcm19WzFdeworICBcaWZweUBNb2RQbGF0Zm9ybUZpbGVJc09wZW5cZWxzZQorICAgIFxuZXd3cml0ZVxweUBNb2RQbGF0Zm9ybUZpbGUKKyAgICBcb3Blbm91dFxweUBNb2RQbGF0Zm9ybUZpbGU9XHB5QE1vZFBsYXRmb3JtRmlsZW5hbWUKKyAgICBccHlATW9kUGxhdGZvcm1GaWxlSXNPcGVudHJ1ZQorICBcZmkKK30KK1xJbnB1dElmRmlsZUV4aXN0c3tcam9ibmFtZS5wbGF9e317fQorXG5ld2NvbW1hbmR7XHB5QHBsYXRmb3Jtb2Z9WzJdW1xweUBtb2R1bGViYWRrZXldeyUKKyAgXGlmeFxweUBtb2R1bGViYWRrZXkjMSBcZGVmXHB5QGtleXsjMn0lCisgIFxlbHNlIFxkZWZccHlAa2V5eyMxfSUKKyAgXGZpJQorICBcY3NuYW1lIHB5QG1vZHBsYXRAXHB5QGtleVxlbmRjc25hbWUlCit9CitcbmV3Y29tbWFuZHtcaWdub3JlUGxhdGZvcm1Bbm5vdGF0aW9ufVsxXXt9CisKKyUgXG1vZHVsZWF1dGhvcntuYW1lfXtlbWFpbH0KK1xuZXdjb21tYW5ke1xtb2R1bGVhdXRob3J9WzJde30KKworJSBcc2VjdGlvbmF1dGhvcntuYW1lfXtlbWFpbH0KK1xuZXdjb21tYW5ke1xzZWN0aW9uYXV0aG9yfVsyXXt9CisKKworXG5ld2NvbW1hbmR7XHB5QGRlZnN5bm9wc2lzfXtNb2R1bGUgaGFzIG5vIHN5bm9wc2lzLn0KK1xuZXdjb21tYW5ke1xweUBtb2R1bGVzeW5vcHNpc317XHB5QGRlZnN5bm9wc2lzfQorXG5ld2NvbW1hbmR7XG1vZHVsZXN5bm9wc2lzfVsxXXsKKyAgXHB5QEhhdmVNb2RTeW5vcHNpc3RydWUKKyAgXHJlbmV3Y29tbWFuZHtccHlAbW9kdWxlc3lub3BzaXN9eyMxfQorfQorCislIGRlZmluZSB0aGUgZmlsZQorXG5ld3dyaXRlXHB5QE1vZFN5bm9wc2lzRmlsZQorCislIGhhY2tlZCBmcm9tIFxhZGR0b2NvbnRlbnRzIGZyb20gbGF0ZXgubHR4OgorXGxvbmdcZGVmXHB5QHdyaXRlTW9kU3lub3BzaXNGaWxlIzF7JQorICBccHJvdGVjdGVkQHdyaXRlXHB5QE1vZFN5bm9wc2lzRmlsZSUKKyAgICAgIHtcbGV0XGxhYmVsXEBnb2JibGUgXGxldFxpbmRleFxAZ29iYmxlIFxsZXRcZ2xvc3NhcnlcQGdvYmJsZX0lCisgICAgICB7XHN0cmluZyMxfSUKK30KK1xuZXdjb21tYW5ke1xweUBjbG9zZU1vZFN5bm9wc2lzRmlsZX17CisgIFxpZnB5QE1vZFN5bm9wc2lzRmlsZUlzT3BlbgorICAgIFxjbG9zZW91dFxweUBNb2RTeW5vcHNpc0ZpbGUKKyAgICBccHlATW9kU3lub3BzaXNGaWxlSXNPcGVuZmFsc2UKKyAgXGZpCit9CitcbmV3Y29tbWFuZHtccHlAb3Blbk1vZFN5bm9wc2lzRmlsZX17CisgIFxpZnB5QE1vZFN5bm9wc2lzRmlsZUlzT3BlblxlbHNlCisgICAgXG9wZW5vdXRccHlATW9kU3lub3BzaXNGaWxlPVxweUBNb2RTeW5vcHNpc0ZpbGVuYW1lCisgICAgXHB5QE1vZFN5bm9wc2lzRmlsZUlzT3BlbnRydWUKKyAgXGZpCit9CisKK1xuZXdjb21tYW5ke1xweUBQcm9jZXNzTW9kU3lub3BzaXN9eworICBcaWZweUBIYXZlTW9kU3lub3BzaXMKKyAgICBccHlAd3JpdGVNb2RTeW5vcHNpc0ZpbGV7XG1vZHVsZXN5bm9wc2lzJQorICAgICAge1xweUB0aGlzbW9kdWxla2V5fXtccHlAdGhpc21vZHVsZX0lCisgICAgICB7XHB5QHRoaXNtb2R1bGV0eXBlfXtccHlAbW9kdWxlc3lub3BzaXN9fSUKKyAgICBccHlASGF2ZU1vZFN5bm9wc2lzZmFsc2UKKyAgXGZpCisgIFxyZW5ld2NvbW1hbmR7XHB5QG1vZHVsZXN5bm9wc2lzfXtccHlAZGVmc3lub3BzaXN9Cit9CitcQXRFbmREb2N1bWVudHtccHlAUHJvY2Vzc01vZFN5bm9wc2lzXHB5QGNsb3NlTW9kU3lub3BzaXNGaWxlfQorCisKK1xsb25nXGRlZlxweUB3cml0ZU1vZFBsYXRmb3JtRmlsZSMxeyUKKyAgXHByb3RlY3RlZEB3cml0ZVxweUBNb2RQbGF0Zm9ybUZpbGUlCisgICAge1xsZXRcbGFiZWxcQGdvYmJsZSBcbGV0XGluZGV4XEBnb2JibGUgXGxldFxnbG9zc2FyeVxAZ29iYmxlfSUKKyAgICB7XHN0cmluZyMxfSUKK30KKworCitcbmV3Y29tbWFuZHtcbG9jYWxtb2R1bGV0YWJsZX17CisgIFxJZkZpbGVFeGlzdHN7XHB5QE1vZFN5bm9wc2lzRmlsZW5hbWV9eworICAgIFxiZWdpbntzeW5vcHNpc3RhYmxlfQorICAgICAgXGlucHV0e1xweUBNb2RTeW5vcHNpc0ZpbGVuYW1lfQorICAgIFxlbmR7c3lub3BzaXN0YWJsZX0KKyAgfXt9Cit9CisKK1xAaWZ1bmRlZmluZWR7cGRmb3V0cHV0fXsKKyAgXG5ld2NvbW1hbmR7XHB5QE1vZFN5bm9wc2lzU3VtbWFyeX1bNF17XGJmY29kZXsjMn0gJiAjNFxcfQorfXsKKyAgXG5ld2NvbW1hbmR7XHB5QE1vZFN5bm9wc2lzU3VtbWFyeX1bNF17JQorICAgIFxweUBsaW5rVG9OYW1le2xhYmVsLW1vZHVsZS0jMX17XGJmY29kZXsjMn19ICYgIzRcXAorICB9Cit9CitcbmV3ZW52aXJvbm1lbnR7c3lub3BzaXN0YWJsZX17CisgICUga2V5LCBuYW1lLCB0eXBlLCBzeW5vcHNpcworICBcbGV0XG1vZHVsZXN5bm9wc2lzPVxweUBNb2RTeW5vcHNpc1N1bW1hcnkKKyAgXGJlZ2lue3RhYnVsYXJ9e2xsfQorfXsKKyAgXGVuZHt0YWJ1bGFyfQorfQorJQorJSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1xuZXdjb21tYW5ke1xweUByZXNldH17CisgIFxweUB1c2luZ3N1Yml0ZW1mYWxzZQorICBccHlAUHJvY2Vzc01vZFN5bm9wc2lzCisgIFxyZW5ld2NvbW1hbmR7XHB5QHRoaXNjbGFzc317fQorICBccmVuZXdjb21tYW5ke1xweUB0aGlzbW9kdWxlfXt9CisgIFxyZW5ld2NvbW1hbmR7XHB5QHRoaXNtb2R1bGVrZXl9e30KKyAgXHJlbmV3Y29tbWFuZHtccHlAdGhpc21vZHVsZXR5cGV9e30KK30KKworJSBBdWdtZW50IHRoZSBzZWN0aW9uaW5nIGNvbW1hbmRzIHVzZWQgdG8gZ2V0IG91ciBvd24gZm9udCBmYW1pbHkgaW4gcGxhY2UsCislIGFuZCByZXNldCBzb21lIGludGVybmFsIGRhdGEgaXRlbXM6CitccmVuZXdjb21tYW5ke1xzZWN0aW9ufXtccHlAcmVzZXQlCisgICAgICAgICAgICAgICAgICAgICAgICBcQHN0YXJ0c2VjdGlvbntzZWN0aW9ufXsxfXtcekB9JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey0zLjVleCBcQHBsdXMgLTFleCBcQG1pbnVzIC0uMmV4fSUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsyLjNleCBcQHBsdXMuMmV4fSUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtccmVzZXRAZm9udFxMYXJnZVxweUBIZWFkZXJGYW1pbHl9fQorXHJlbmV3Y29tbWFuZHtcc3Vic2VjdGlvbn17XEBzdGFydHNlY3Rpb257c3Vic2VjdGlvbn17Mn17XHpAfSUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHstMy4yNWV4XEBwbHVzIC0xZXggXEBtaW51cyAtLjJleH0lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MS41ZXggXEBwbHVzIC4yZXh9JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyZXNldEBmb250XGxhcmdlXHB5QEhlYWRlckZhbWlseX19CitccmVuZXdjb21tYW5ke1xzdWJzdWJzZWN0aW9ufXtcQHN0YXJ0c2VjdGlvbntzdWJzdWJzZWN0aW9ufXszfXtcekB9JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey0zLjI1ZXhcQHBsdXMgLTFleCBcQG1pbnVzIC0uMmV4fSUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsxLjVleCBcQHBsdXMgLjJleH0lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJlc2V0QGZvbnRcbm9ybWFsc2l6ZVxweUBIZWFkZXJGYW1pbHl9fQorXHJlbmV3Y29tbWFuZHtccGFyYWdyYXBofXtcQHN0YXJ0c2VjdGlvbntwYXJhZ3JhcGh9ezR9e1x6QH0lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7My4yNWV4IFxAcGx1czFleCBcQG1pbnVzLjJleH0lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7LTFlbX0lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJlc2V0QGZvbnRcbm9ybWFsc2l6ZVxweUBIZWFkZXJGYW1pbHl9fQorXHJlbmV3Y29tbWFuZHtcc3VicGFyYWdyYXBofXtcQHN0YXJ0c2VjdGlvbntzdWJwYXJhZ3JhcGh9ezV9e1xwYXJpbmRlbnR9JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezMuMjVleCBcQHBsdXMxZXggXEBtaW51cyAuMmV4fSUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHstMWVtfSUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtccmVzZXRAZm9udFxub3JtYWxzaXplXHB5QEhlYWRlckZhbWlseX19CisKKworJSBUaGlzIGdldHMgdGhlIHVuZGVyc2NvcmVzIGNsb3NlciB0byB0aGUgcmlnaHQgd2lkdGg7IHRoZSBvbmx5IGNoYW5nZQorJSBmcm9tIHN0YW5kYXJkIExhVGVYIGlzIHRoZSB3aWR0aCBzcGVjaWZpZWQuCisKK1xEZWNsYXJlVGV4dENvbW1hbmREZWZhdWx0e1x0ZXh0dW5kZXJzY29yZX17JQorICBcbGVhdmV2bW9kZSBca2Vybi4wNmVtXHZib3h7XGhydWxlXEB3aWR0aC41NWVtfX0KKworJSBVbmRlcnNjb3JlIGhhY2sgKG9ubHkgYWN0IGxpa2Ugc3Vic2NyaXB0IG9wZXJhdG9yIGlmIGluIG1hdGggbW9kZSkKKyUKKyUgVGhlIGZvbGxvd2luZyBpcyBkdWUgdG8gTWFyayBXb29kaW5nICh0aGUgb2xkIHZlcnNpb24gZGlkbid0IHdvcmsgd2l0aAorJSBMYXRleCAyZS4KKworXERlY2xhcmVSb2J1c3RDb21tYW5kXGhhY2tzY29yZXslCisgIFxpZm1tb2RlX1xlbHNlXHRleHR1bmRlcnNjb3JlXGZpJQorfQorXGJlZ2luZ3JvdXAKK1xjYXRjb2RlYFxfXGFjdGl2ZQorXGRlZlxuZXh0eyUKKyAgXEF0QmVnaW5Eb2N1bWVudHtcY2F0Y29kZWBcX1xhY3RpdmVcZGVmX3tcaGFja3Njb3Jle319fSUKK30KK1xleHBhbmRhZnRlclxlbmRncm91cFxuZXh0CisKKworJSBOb3cgZm9yIGEgbG90IG9mIHNlbWFudGljYWxseS1sb2FkZWQgZW52aXJvbm1lbnRzIHRoYXQgZG8gYSB0b24gb2YgbWFnaWNhbAorJSB0aGluZ3MgdG8gZ2V0IHRoZSByaWdodCBmb3JtYXR0aW5nIGFuZCBpbmRleCBlbnRyaWVzIGZvciB0aGUgc3R1ZmYgaW4KKyUgUHl0aG9uIG1vZHVsZXMgYW5kIEMgQVBJLgorCisKKyUge2Z1bGxsaW5laXRlbXN9IGlzIHVzZWQgaW4gb25lIHBsYWNlIGluIGxpYnJlZ2V4LnRleCwgYnV0IGlzIHJlYWxseSBmb3IKKyUgaW50ZXJuYWwgdXNlIGluIHRoaXMgZmlsZS4KKyUKK1xuZXdjb21tYW5ke1xweUBpdGVtbmV3bGluZX1bMV17JQorICBcQHRlbXBkaW1hXGxpbmV3aWR0aCUKKyAgXGFkdmFuY2VcQHRlbXBkaW1hIFxsZWZ0bWFyZ2luXG1ha2Vib3hbXEB0ZW1wZGltYV1bbF17IzF9JQorfQorCitcbmV3ZW52aXJvbm1lbnR7ZnVsbGxpbmVpdGVtc317CisgIFxiZWdpbntsaXN0fXt9e1xsYWJlbHdpZHRoIFxsZWZ0bWFyZ2luIFxsYWJlbHNlcCAwcHQKKyAgICAgICAgICAgICAgICAgXHJpZ2h0bWFyZ2luIDBwdCBcdG9wc2VwIC1ccGFyc2tpcCBccGFydG9wc2VwIFxwYXJza2lwCisgICAgICAgICAgICAgICAgIFxpdGVtc2VwIC1ccGFyc2VwCisgICAgICAgICAgICAgICAgIFxsZXRcbWFrZWxhYmVsPVxweUBpdGVtbmV3bGluZX0KK317XGVuZHtsaXN0fX0KKworJSBcb3B0aW9uYWwgaXMgbW9zdGx5IGZvciB1c2UgaW4gdGhlIGFyZ3VtZW50cyBwYXJhbWV0ZXJzIHRvIHRoZSB2YXJpb3VzCislIHsqZGVzY30gZW52aXJvbm1lbnRzIGRlZmluZWQgYmVsb3csIGJ1dCBtYXkgYmUgdXNlZCBlbHNld2hlcmUuICBLbm93biB0bworJSBiZSB1c2VkIGluIHRoZSBkZWJ1Z2dlciBjaGFwdGVyLgorJQorJSBUeXBpY2FsIHVzYWdlOgorJQorJSAgICAgXGJlZ2lue2Z1bmNkZXNjfXtteWZ1bmN9e3JlcXBhcm1cb3B0aW9uYWx7LCBvcHRwYXJtfX0KKyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4gICAgICAgXl5eCislICAgICAgICAgICAgICAgICAgICAgICAgICBObyBzcGFjZSBoZXJlICAgICAgIE5vIHNwYWNlIGhlcmUKKyUKKyUgV2hlbiBhIGZ1bmN0aW9uIGhhcyBtdWx0aXBsZSBvcHRpb25hbCBwYXJhbWV0ZXJzLCBcb3B0aW9uYWwgc2hvdWxkIGJlCislIG5lc3RlZCwgbm90IGNoYWluZWQuICBUaGlzIGlzIHJpZ2h0OgorJQorJSAgICAgXGJlZ2lue2Z1bmNkZXNjfXtteWZ1bmN9e1xvcHRpb25hbHtwYXJtMVxvcHRpb25hbHssIHBhcm0yfX19CislCitcbGV0XHB5QGJhZGtleT1cQHVuZGVmaW5lZAorCitcbmV3Y29tbWFuZHtcb3B0aW9uYWx9WzFdeyUKKyAge1x0ZXh0bm9ybWFse1xMYXJnZVt9fXsjMX1caHNwYWNlezAuNW1tfXtcdGV4dG5vcm1hbHtcTGFyZ2VdfX19CisKKyUgVGhpcyBjYW4gYmUgdXNlZCB3aGVuIGEgZnVuY3Rpb24gb3IgbWV0aG9kIGFjY2VwdHMgYW4gdmFyeWluZyBudW1iZXIgCislIG9mIGFyZ3VtZW50cywgc3VjaCBhcyBieSB1c2luZyB0aGUgKmFyZ3Mgc3ludGF4IGluIHRoZSBwYXJhbWV0ZXIgbGlzdC4KK1xuZXdjb21tYW5ke1xweUBtb3JlYXJnc317Li4ufQorCislIFRoaXMgY2FuIGJlIHVzZWQgd2hlbiB5b3UgZG9uJ3Qgd2FudCB0byBkb2N1bWVudCB0aGUgcGFyYW1ldGVycyB0byBhIAorJSBmdW5jdGlvbiBvciBtZXRob2QsIGJ1dCBzaW1wbHkgc3RhdGUgdGhhdCBpdCdzIGFuIGFsaWFzIGZvcgorJSBzb21ldGhpbmcgZWxzZS4KK1xuZXdjb21tYW5ke1xweUB1bnNwZWNpZmllZH17Li4ufQorCislIEMgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSBcYmVnaW57Y2Z1bmNkZXNjfVtyZWZjb3VudF17dHlwZX17bmFtZX17YXJnbGlzdH0KKyUgTm90ZSB0aGF0IHRoZSBbcmVmY291bnRdIHNsb3Qgc2hvdWxkIG9ubHkgYmUgZmlsbGVkIGluIGJ5CislIHRvb2xzL2Fubm8tYXBpLnB5OyBpdCBwdWxscyB0aGUgdmFsdWUgZnJvbSB0aGUgcmVmY291bnRzIGRhdGFiYXNlLgorXG5ld2Vudmlyb25tZW50e2NmdW5jZGVzY31bNF1bXHB5QGJhZGtleV17CisgIFxiZWdpbntmdWxsbGluZWl0ZW1zfQorICAgIFxpdGVtW1xjb2RleyMyIFxiZmNvZGV7IzN9KFxweUB2YXJ2YXJzeyM0fSl9XGluZGV4eyMzQHtccHlAaWR4Y29kZXsjMygpfX19XQorICAgIFxpZngjMVxAdW5kZWZpbmVkXGVsc2UlCisgICAgICBcZW1waHtSZXR1cm4gdmFsdWU6IFx0ZXh0YmZ7IzF9Ln1cXAorICAgIFxmaQorfXtcZW5ke2Z1bGxsaW5laXRlbXN9fQorCislIEMgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSBcYmVnaW57Y3ZhcmRlc2N9e3R5cGV9e25hbWV9CitcbmV3ZW52aXJvbm1lbnR7Y3ZhcmRlc2N9WzJdeworICBcYmVnaW57ZnVsbGxpbmVpdGVtc30KKyAgICBcaXRlbVtcY29kZXsjMSBcYmZjb2RleyMyfX1caW5kZXh7IzJAe1xweUBpZHhjb2RleyMyfX19XQorfXtcZW5ke2Z1bGxsaW5laXRlbXN9fQorCislIEMgZGF0YSB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSBcYmVnaW57Y3R5cGVkZXNjfVtpbmRleCBuYW1lXXt0eXBlZGVmIG5hbWV9CitcbmV3ZW52aXJvbm1lbnR7Y3R5cGVkZXNjfVsyXVtccHlAYmFka2V5XXsKKyAgXGJlZ2lue2Z1bGxsaW5laXRlbXN9CisgICAgXGl0ZW1bXGJmY29kZXsjMn0lCisgICAgXGlmeCMxXEB1bmRlZmluZWQlCisgICAgICBcaW5kZXh7IzJAe1xweUBpZHhjb2RleyMyfX0gKEMgdHlwZSl9CisgICAgXGVsc2UlCisgICAgICBcaW5kZXh7IzJAe1xweUBpZHhjb2RleyMxfX0gKEMgdHlwZSl9CisgICAgXGZpXQorfXtcZW5ke2Z1bGxsaW5laXRlbXN9fQorCislIEZ1bmt5IG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSBcYmVnaW57Y3NpbXBsZW1hY3JvfXtuYW1lfQorJSAtLSAic2ltcGxlIiBiZWNhdXNlIGl0IGhhcyBubyBhcmdzOyBOT1QgZm9yIGNvbnN0YW50IGRlZmluaXRpb25zIQorXG5ld2Vudmlyb25tZW50e2NzaW1wbGVtYWNyb2Rlc2N9WzFdeworICBcYmVnaW57ZnVsbGxpbmVpdGVtc30KKyAgICBcaXRlbVtcYmZjb2RleyMxfVxpbmRleHsjMUB7XHB5QGlkeGNvZGV7IzF9fSAobWFjcm8pfV0KK317XGVuZHtmdWxsbGluZWl0ZW1zfX0KKworJSBzaW1wbGUgZnVuY3Rpb25zIChub3QgbWV0aG9kcykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUgXGJlZ2lue2Z1bmNkZXNjfXtuYW1lfXthcmdzfQorXG5ld2NvbW1hbmR7XGZ1bmNsaW5lfVsyXXslCisgIFxmdW5jbGluZW5peyMxfXsjMn0lCisgIFxpbmRleHsjMUB7XHB5QGlkeGNvZGV7IzEoKX19IChpbiBtb2R1bGUgXHB5QHRoaXNtb2R1bGUpfX0KK1xuZXdlbnZpcm9ubWVudHtmdW5jZGVzY31bMl17CisgIFxiZWdpbntmdWxsbGluZWl0ZW1zfQorICAgIFxmdW5jbGluZXsjMX17IzJ9Cit9e1xlbmR7ZnVsbGxpbmVpdGVtc319CisKKyUgc2ltaWxhciB0byB7ZnVuY2Rlc2N9LCBidXQgZG9lc24ndCBhZGQgdG8gdGhlIGluZGV4CitcbmV3Y29tbWFuZHtcZnVuY2xpbmVuaX1bMl17XGl0ZW1bXGNvZGV7XGJmY29kZXsjMX0oXHB5QHZhcnZhcnN7IzJ9KX1dfQorXG5ld2Vudmlyb25tZW50e2Z1bmNkZXNjbml9WzJdeworICBcYmVnaW57ZnVsbGxpbmVpdGVtc30KKyAgICBcZnVuY2xpbmVuaXsjMX17IzJ9Cit9e1xlbmR7ZnVsbGxpbmVpdGVtc319CisKKyUgY2xhc3NlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislIFxiZWdpbntjbGFzc2Rlc2N9e25hbWV9e2NvbnN0cnVjdG9yIGFyZ3N9CitcbmV3ZW52aXJvbm1lbnR7Y2xhc3NkZXNjfVsyXXsKKyAgJSBVc2luZyBccmVuZXdjb21tYW5kIGRvZXNuJ3Qgd29yayBmb3IgdGhpcywgZm9yIHVua25vd24gcmVhc29uczoKKyAgXGdsb2JhbFxkZWZccHlAdGhpc2NsYXNzeyMxfQorICBcYmVnaW57ZnVsbGxpbmVpdGVtc30KKyAgICBcaXRlbVtcc3Ryb25ne2NsYXNzIH1cY29kZXtcYmZjb2RleyMxfShccHlAdmFydmFyc3sjMn0pfSUKKyAgICAgIFxpbmRleHsjMUB7XHB5QGlkeGNvZGV7IzF9fSAoY2xhc3MgaW4gXHB5QHRoaXNtb2R1bGUpfV0KK317XGVuZHtmdWxsbGluZWl0ZW1zfX0KKworJSBcYmVnaW57ZXhjY2xhc3NkZXNjfXtuYW1lfXtjb25zdHJ1Y3RvciBhcmdzfQorJSBidXQgaW5kZXhlcyBhcyBhbiBleGNlcHRpb24KK1xuZXdlbnZpcm9ubWVudHtleGNjbGFzc2Rlc2N9WzJdeworICAlIFVzaW5nIFxyZW5ld2NvbW1hbmQgZG9lc24ndCB3b3JrIGZvciB0aGlzLCBmb3IgdW5rbm93biByZWFzb25zOgorICBcZ2xvYmFsXGRlZlxweUB0aGlzY2xhc3N7IzF9CisgIFxiZWdpbntmdWxsbGluZWl0ZW1zfQorICAgIFxpdGVtW1xzdHJvbmd7ZXhjZXB0aW9uIH1cY29kZXtcYmZjb2RleyMxfShccHlAdmFydmFyc3sjMn0pfSUKKyAgICAgIFxpbmRleHsjMUB7XHB5QGlkeGNvZGV7IzF9fSAoZXhjZXB0aW9uIGluIFxweUB0aGlzbW9kdWxlKX1dCit9e1xlbmR7ZnVsbGxpbmVpdGVtc319CisKKworXGxldFxweUBjbGFzc2JhZGtleT1cQHVuZGVmaW5lZAorCislIG9iamVjdCBtZXRob2QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSBcYmVnaW57bWV0aG9kZGVzY31bY2xhc3NuYW1lXXttZXRob2RuYW1lfXthcmdzfQorXG5ld2NvbW1hbmR7XG1ldGhvZGxpbmV9WzNdW1xAdW5kZWZpbmVkXXsKKyAgXG1ldGhvZGxpbmVuaXsjMn17IzN9CisgIFxpZngjMVxAdW5kZWZpbmVkCisgICAgXGluZGV4eyMyQHtccHlAaWR4Y29kZXsjMigpfX0gKFxweUB0aGlzY2xhc3NcIG1ldGhvZCl9CisgIFxlbHNlCisgICAgXGluZGV4eyMyQHtccHlAaWR4Y29kZXsjMigpfX0gKCMxIG1ldGhvZCl9CisgIFxmaQorfQorXG5ld2Vudmlyb25tZW50e21ldGhvZGRlc2N9WzNdW1xAdW5kZWZpbmVkXXsKKyAgXGJlZ2lue2Z1bGxsaW5laXRlbXN9CisgICAgXGlmeCMxXEB1bmRlZmluZWQKKyAgICAgIFxtZXRob2RsaW5leyMyfXsjM30KKyAgICBcZWxzZQorICAgICAgXGRlZlxweUB0aGlzY2xhc3N7IzF9CisgICAgICBcbWV0aG9kbGluZXsjMn17IzN9CisgICAgXGZpCit9e1xlbmR7ZnVsbGxpbmVpdGVtc319CisKKyUgc2ltaWxhciB0byB7bWV0aG9kZGVzY30sIGJ1dCBkb2Vzbid0IGFkZCB0byB0aGUgaW5kZXgKKyUgKG5ldmVyIGFjdHVhbGx5IHVzZXMgdGhlIG9wdGlvbmFsIGFyZ3VtZW50KQorXG5ld2NvbW1hbmR7XG1ldGhvZGxpbmVuaX1bM11bXHB5QGNsYXNzYmFka2V5XXslCisgIFxpdGVtW1xjb2Rle1xiZmNvZGV7IzJ9KFxweUB2YXJ2YXJzeyMzfSl9XX0KK1xuZXdlbnZpcm9ubWVudHttZXRob2RkZXNjbml9WzNdW1xweUBjbGFzc2JhZGtleV17CisgIFxiZWdpbntmdWxsbGluZWl0ZW1zfQorICAgIFxtZXRob2RsaW5lbml7IzJ9eyMzfQorfXtcZW5ke2Z1bGxsaW5laXRlbXN9fQorCislIG9iamVjdCBkYXRhIGF0dHJpYnV0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSBcYmVnaW57bWVtYmVyZGVzY31bY2xhc3NuYW1lXXttZW1iZXJuYW1lfQorXG5ld2NvbW1hbmR7XG1lbWJlcmxpbmV9WzJdW1xweUBjbGFzc2JhZGtleV17JQorICBcaWZ4IzFcQHVuZGVmaW5lZAorICAgIFxtZW1iZXJsaW5lbml7IzJ9CisgICAgXGluZGV4eyMyQHtccHlAaWR4Y29kZXsjMn19IChccHlAdGhpc2NsYXNzXCBhdHRyaWJ1dGUpfQorICBcZWxzZQorICAgIFxtZW1iZXJsaW5lbml7IzJ9CisgICAgXGluZGV4eyMyQHtccHlAaWR4Y29kZXsjMn19ICgjMSBhdHRyaWJ1dGUpfQorICBcZmkKK30KK1xuZXdlbnZpcm9ubWVudHttZW1iZXJkZXNjfVsyXVtccHlAY2xhc3NiYWRrZXldeworICBcYmVnaW57ZnVsbGxpbmVpdGVtc30KKyAgICBcaWZ4IzFcQHVuZGVmaW5lZAorICAgICAgXG1lbWJlcmxpbmV7IzJ9CisgICAgXGVsc2UKKyAgICAgIFxkZWZccHlAdGhpc2NsYXNzeyMxfQorICAgICAgXG1lbWJlcmxpbmV7IzJ9CisgICAgXGZpCit9e1xlbmR7ZnVsbGxpbmVpdGVtc319CisKKyUgc2ltaWxhciB0byB7bWVtYmVyZGVzY30sIGJ1dCBkb2Vzbid0IGFkZCB0byB0aGUgaW5kZXgKKyUgKG5ldmVyIGFjdHVhbGx5IHVzZXMgdGhlIG9wdGlvbmFsIGFyZ3VtZW50KQorXG5ld2NvbW1hbmR7XG1lbWJlcmxpbmVuaX1bMl1bXHB5QGNsYXNzYmFka2V5XXtcaXRlbVtcYmZjb2RleyMyfV19CitcbmV3ZW52aXJvbm1lbnR7bWVtYmVyZGVzY25pfVsyXVtccHlAY2xhc3NiYWRrZXldeworICBcYmVnaW57ZnVsbGxpbmVpdGVtc30KKyAgICBcbWVtYmVybGluZW5peyMyfQorfXtcZW5ke2Z1bGxsaW5laXRlbXN9fQorCislIEZvciBleGNlcHRpb25zOiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSBcYmVnaW57ZXhjZGVzY317bmFtZX0KKyUgIC0tIGZvciBjb25zdHJ1Y3RvciBpbmZvcm1hdGlvbiwgdXNlIGV4Y2NsYXNzZGVzYyBpbnN0ZWFkCitcbmV3ZW52aXJvbm1lbnR7ZXhjZGVzY31bMV17CisgIFxiZWdpbntmdWxsbGluZWl0ZW1zfQorICAgIFxpdGVtW1xzdHJvbmd7ZXhjZXB0aW9uIH1cYmZjb2RleyMxfSUKKyAgICAgICAgICBcaW5kZXh7IzFAe1xweUBpZHhjb2RleyMxfX0gKGV4Y2VwdGlvbiBpbiBccHlAdGhpc21vZHVsZSl9XQorfXtcZW5ke2Z1bGxsaW5laXRlbXN9fQorCislIE1vZHVsZSBkYXRhIG9yIGNvbnN0YW50czogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSBcYmVnaW57ZGF0YWRlc2N9e25hbWV9CitcbmV3Y29tbWFuZHtcZGF0YWxpbmV9WzFdeyUKKyAgXGRhdGFsaW5lbml7IzF9XGluZGV4eyMxQHtccHlAaWR4Y29kZXsjMX19IChkYXRhIGluIFxweUB0aGlzbW9kdWxlKX19CitcbmV3ZW52aXJvbm1lbnR7ZGF0YWRlc2N9WzFdeworICBcYmVnaW57ZnVsbGxpbmVpdGVtc30KKyAgICBcZGF0YWxpbmV7IzF9Cit9e1xlbmR7ZnVsbGxpbmVpdGVtc319CisKKyUgc2ltaWxhciB0byB7ZGF0YWRlc2N9LCBidXQgZG9lc24ndCBhZGQgdG8gdGhlIGluZGV4CitcbmV3Y29tbWFuZHtcZGF0YWxpbmVuaX1bMV17XGl0ZW1bXGJmY29kZXsjMX1dXG5vcGFnZWJyZWFrfQorXG5ld2Vudmlyb25tZW50e2RhdGFkZXNjbml9WzFdeworICBcYmVnaW57ZnVsbGxpbmVpdGVtc30KKyAgICBcZGF0YWxpbmVuaXsjMX0KK317XGVuZHtmdWxsbGluZWl0ZW1zfX0KKworJSBieXRlY29kZSBpbnN0cnVjdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUgXGJlZ2lue29wY29kZWRlc2N9e25hbWV9e3Zhcn0KKyUgLS0ge3Zhcn0gbWF5IGJlIHt9CitcbmV3ZW52aXJvbm1lbnR7b3Bjb2RlZGVzY31bMl17CisgIFxiZWdpbntmdWxsbGluZWl0ZW1zfQorICAgIFxpdGVtW1xiZmNvZGV7IzF9XHF1YWRcdmFyeyMyfV0KK317XGVuZHtmdWxsbGluZWl0ZW1zfX0KKworCitcbmV3Y29tbWFuZHtcbm9kZW5hbWV9WzFde1xsYWJlbHsjMX19CisKKyUgRm9yIHRoZXNlIGNvbW1hbmRzLCB1c2UgXGNvbW1hbmR7fSB0byBnZXQgdGhlIHR5cG9ncmFwaHkgcmlnaHQsIG5vdCAKKyUge1xjb21tYW5kfS4gIFRoaXMgd29ya3MgYmV0dGVyIHdpdGggdGhlIHRleGluZm8gdHJhbnNsYXRpb24uCitcbmV3Y29tbWFuZHtcQUJDfXt7XHNjIGFiY319CitcbmV3Y29tbWFuZHtcVU5JWH17e1xzYyBVbml4fX0KK1xuZXdjb21tYW5ke1xQT1NJWH17UE9TSVh9CitcbmV3Y29tbWFuZHtcQVNDSUl9e3tcc2MgYXNjaWl9fQorXG5ld2NvbW1hbmR7XENwcH17Q1xwcm90ZWN0XHJhaXNlYm94ey4xOGV4fXsrK319CitcbmV3Y29tbWFuZHtcQ317Q30KK1xuZXdjb21tYW5ke1xFT0Z9e3tcc2MgZW9mfX0KK1xuZXdjb21tYW5ke1xOVUxMfXtcY29uc3RhbnR7TlVMTH19CisKKyUgQWxzbyBmb3IgY29uc2lzdGVuY3k6IHNwZWxsIFB5dGhvbiAiUHl0aG9uIiwgbm90ICJweXRob24iIQorCislIGNvZGUgaXMgdGhlIG1vc3QgZGlmZmljdWx0IG9uZS4uLgorXG5ld2NvbW1hbmR7XGNvZGV9WzFde1x0ZXh0cm17XEB2b2JleXNwYWNlc1xAbm9saWdzXGRlZlx7e1xjaGFyYFx7fVxkZWZcfXtcY2hhcmBcfX1cZGVmXH57XGNoYXJgXH59XGRlZlxee1xjaGFyYFxefVxkZWZcZXtcY2hhcmBcXH1cZGVmXCR7XGNoYXJgXCR9XGRlZlwje1xjaGFyYFwjfVxkZWZcJntcY2hhcmBcJn1cZGVmXCV7XGNoYXJgXCV9JQorXHRleHR0dHsjMX19fQorCitcbmV3Y29tbWFuZHtcYmZjb2RlfVsxXXtcY29kZXtcYmZzZXJpZXMjMX19ICUgYm9sZC1mYWNlZCBjb2RlIGZvbnQKK1xuZXdjb21tYW5ke1xrYmR9WzFde1xjb2RleyMxfX0KK1xuZXdjb21tYW5ke1xzYW1wfVsxXXtgXGNvZGV7IzF9J30KKyUgVGhpcyB3ZWlyZCBkZWZpbml0aW9uIG9mIFx2YXJ7fSBhbGxvd3MgaXQgdG8gYWx3YXlzIGFwcGVhciBpbiByb21hbgorJSBpdGFsaWNzLCBhbmQgd29uJ3QgZ2V0IGZ1bmt5IGluIGNvZGUgZnJhZ21lbnRzIHdoZW4gd2UgcGxheSBhcm91bmQKKyUgd2l0aCBmb250cy4gIFRoaXMgYWxzbyB3b3JrcyBkaXJlY3RseSBpbiBtYXRoIG1vZGUuCitcbmV3Y29tbWFuZHtcdmFyfVsxXXslCisgIFxpZm1tb2RlJQorICAgIFxoYm94e1xub3JtYWxzaXplXHRleHRybXtcdGV4dGl0eyMxXC99fX0lCisgIFxlbHNlJQorICAgIFxub3JtYWxzaXplXHRleHRybXtcdGV4dGl0eyMxXC99fSUKKyAgXGZpJQorfQorXHJlbmV3Y29tbWFuZHtcZW1waH1bMV17e1xlbSAjMX19CitcbmV3Y29tbWFuZHtcZGZufVsxXXtcZW1waHsjMX19CitcbmV3Y29tbWFuZHtcc3Ryb25nfVsxXXt7XGJmICMxfX0KKyUgbGV0J3MgZXhwZXJpbWVudCB3aXRoIGEgbmV3IGZvbnQ6CitcbmV3Y29tbWFuZHtcZmlsZX1bMV17YHtcc21hbGxcdGV4dHNmeyMxfX0nfQorXG5ld2NvbW1hbmR7XGZpbGVucX1bMV17e1xzbWFsbFx0ZXh0c2Z7IzF9fX0KKworJSBVc2UgdGhpcyBkZWYvcmVkZWYgYXBwcm9hY2ggZm9yIFx1cmx7fSBzaW5jZSBoeXBlcnJlZiBkZWZpbmVkIHRoaXMgYWxyZWFkeSwKKyUgYnV0IG9ubHkgaWYgd2UgYWN0dWFsbHkgdXNlZCBoeXBlcnJlZjoKK1xAaWZ1bmRlZmluZWR7cGRmYW5ub3RsaW5rfXsKKyAgXG5ld2NvbW1hbmR7XHB5QHVybH1bMV17XG1ib3h7XHNtYWxsXHRleHRzZnsjMX19fQorfXsKKyAgXG5ld2NvbW1hbmR7XHB5QHVybH1bMV17eyUKKyAgICBccGRmYW5ub3RsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSB1c2Vyey9TIC9VUkkgL1VSSSAoIzEpfSUKKyAgICBccHlATGlua0NvbG9yJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yIG9mIHRoZSBsaW5rIHRleHQKKyAgICBcbWJveHtcc21hbGxcdGV4dHNmeyMxfX0lCisgICAgXHB5QE5vcm1hbENvbG9yJSAgICAgICAgICAgICAgICAgICAgVHVybiBpdCBiYWNrIG9mZjsgdGhlc2UgYXJlIGRlY2xhcmF0aXZlCisgICAgXHBkZmVuZGxpbmt9JSAgICAgICAgICAgICAgICAgICAgICAgYW5kIGRvbid0IGFwcGVhciBib3VuZCB0byB0aGUgY3VycmVudAorICB9JSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmcgImJveCIuCit9CitcbGV0XHVybD1ccHlAdXJsCitcbmV3Y29tbWFuZHtcZW1haWx9WzFde3tcc21hbGxcdGV4dHNmeyMxfX19CitcbmV3Y29tbWFuZHtcbmV3c2dyb3VwfVsxXXt7XHNtYWxsXHRleHRzZnsjMX19fQorCitcbmV3Y29tbWFuZHtccHlAdmFydmFyc31bMV17eyUKKyAge1xsZXRcdW5zcGVjaWZpZWQ9XHB5QHVuc3BlY2lmaWVkJQorICAgXGxldFxtb3JlYXJncz1ccHlAbW9yZWFyZ3MlCisgICBcdmFyeyMxfX19fQorCislIEknZCByZWFsbHkgbGlrZSB0byBnZXQgcmlkIG9mIHRoaXMhCitcbmV3aWZcaWZ0ZXhpXHRleGlmYWxzZQorCislIFRoaXMgaXMgdXNlZCB0byBnZXQgbDJoIHRvIHB1dCB0aGUgY29weXJpZ2h0IGFuZCBhYnN0cmFjdCBvbgorJSBhIHNlcGFyYXRlIEhUTUwgcGFnZS4KK1xuZXdpZlxpZmh0bWxcaHRtbGZhbHNlCisKKworJSBUaGVzZSBzaG91bGQgYmUgdXNlZCBmb3IgYWxsIHJlZmVyZW5jZXMgdG8gaWRlbnRpZmllcnMgd2hpY2ggYXJlCislIHVzZWQgdG8gcmVmZXIgdG8gaW5zdGFuY2VzIG9mIHNwZWNpZmljIGxhbmd1YWdlIGNvbnN0cnVjdHMuICBTZWUgdGhlCislIG5hbWVzIGZvciBzcGVjaWZpYyBzZW1hbnRpYyBhc3NpZ25tZW50cy4KKyUKKyUgRm9yIG5vdywgZG9uJ3QgZG8gYW55dGhpbmcgcmVhbGx5IGZhbmN5IHdpdGggdGhlbTsganVzdCB1c2UgdGhlbSBhcworJSBsb2dpY2FsIG1hcmt1cC4gIFRoaXMgbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmUuCislCitcbmV3Y29tbWFuZHtcbW9kdWxlfVsxXXtcdGV4dHR0eyMxfX0KK1xuZXdjb21tYW5ke1xrZXl3b3JkfVsxXXtcdGV4dHR0eyMxfX0KK1xuZXdjb21tYW5ke1xleGNlcHRpb259WzFde1x0ZXh0dHR7IzF9fQorXG5ld2NvbW1hbmR7XGNsYXNzfVsxXXtcdGV4dHR0eyMxfX0KK1xuZXdjb21tYW5ke1xmdW5jdGlvbn1bMV17XHRleHR0dHsjMX19CitcbmV3Y29tbWFuZHtcbWVtYmVyfVsxXXtcdGV4dHR0eyMxfX0KK1xuZXdjb21tYW5ke1xtZXRob2R9WzFde1x0ZXh0dHR7IzF9fQorCitcbmV3Y29tbWFuZHtccHl0eXBlfVsxXXsjMX0gICAgICAgICAgICAgJSBidWlsdC1pbiBQeXRob24gdHlwZQorCitcbmV3Y29tbWFuZHtcY2Z1bmN0aW9ufVsxXXtcdGV4dHR0eyMxfX0KK1xuZXdjb21tYW5ke1xjdHlwZX1bMV17XHRleHR0dHsjMX19ICAgICAlIEMgc3RydWN0IG9yIHR5cGVkZWYgbmFtZQorXG5ld2NvbW1hbmR7XGNkYXRhfVsxXXtcdGV4dHR0eyMxfX0gICAgICUgQyB2YXJpYWJsZSwgdHlwaWNhbGx5IGdsb2JhbAorCitcbmV3Y29tbWFuZHtcbWltZXR5cGV9WzFde3tcc21hbGxcdGV4dHNmeyMxfX19CislIFRoZSBcISBpcyBhICJuZWdhdGl2ZSB0aGluIHNwYWNlIiBpbiBtYXRoIG1vZGUuCitcbmV3Y29tbWFuZHtccmVnZXhwfVsxXXslCisgIHtcdGlueSRee15cbGNlaWx9XCFcISQlCisgICB7XG5vcm1hbHNpemVcY29kZXsjMX19JQorICAgJFwhXHJmbG9vclwhJCUKKyAgfX0KK1xuZXdjb21tYW5ke1xlbnZ2YXJ9WzFdeyUKKyAgIzElCisgIFxpbmRleHsjMUB7IzF9fSUKKyAgXGluZGV4e2Vudmlyb25tZW50IHZhcmlhYmxlcyF7IzF9fSUKK30KK1xuZXdjb21tYW5ke1xtYWtldmFyfVsxXXsjMX0gICAgICAgICAgICAlIHZhcmlhYmxlIGluIGEgTWFrZWZpbGUKK1xuZXdjb21tYW5ke1xjaGFyYWN0ZXJ9WzFde1xzYW1weyMxfX0KKworJSBjb25zdGFudHMgZGVmaW5lZCBpbiBQeXRob24gbW9kdWxlcyBvciBDIGhlYWRlcnMsIG5vdCBsYW5ndWFnZSBjb25zdGFudHM6CitcbmV3Y29tbWFuZHtcY29uc3RhbnR9WzFde1xjb2RleyMxfX0gICAgJSBtYW5pZmVzdCBjb25zdGFudCwgbm90IHN5bnRhY3RpYworCitcbmV3Y29tbWFuZHtcbWFucGFnZX1bMl17e1xlbXBoeyMxfSgjMil9fQorXG5ld2NvbW1hbmR7XHBlcH1bMV17UEVQICMxXGluZGV4e1B5dGhvbiBFbmhhbmNlbWVudCBQcm9wb3NhbHMhUEVQICMxfX0KK1xuZXdjb21tYW5ke1xyZmN9WzFde1JGQyAjMVxpbmRleHtSRkMhUkZDICMxfX0KK1xuZXdjb21tYW5ke1xwcm9ncmFtfVsxXXtcc3Ryb25neyMxfX0KK1xuZXdjb21tYW5ke1xwcm9ncmFtb3B0fVsxXXtcc3Ryb25neyMxfX0KKyUgTm90ZSB0aGF0IFxsb25ncHJvZ3JhbW9wdCBwcm92aWRlcyB0aGUgJy0tJyEKK1xuZXdjb21tYW5ke1xsb25ncHJvZ3JhbW9wdH1bMV17XHN0cm9uZ3ste30tIzF9fQorCislIGNpdGVkIHRpdGxlczogIFxjaXRldGl0bGV7VGl0bGUgb2YgV29ya30KKyUgICAgICAgb25saW5lOiAgXGNpdGV0aXRsZVt1cmwtdG8tcmVzb3VyY2Vde1RpdGxlIG9mIFdvcmt9CitcbmV3Y29tbWFuZHtcY2l0ZXRpdGxlfVsyXVtVUkxde1xlbXBoeyMyfX0KKworCislIERlcHJlY2F0aW9uIHN0dWZmLgorJSBTaG91bGQgYmUgZXh0ZW5kZWQgdG8gYWxsb3cgYW4gaW5kZXggLyBsaXN0IG9mIGRlcHJlY2F0ZWQgc3R1ZmYuICBCdXQKKyUgdGhlcmUncyBhIGxvdCBvZiBzdHVmZiB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgdG8gbWFrZSB0aGF0IGF1dG9tYXRhYmxlLgorJQorJSBGaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIHJlbGVhc2UgbnVtYmVyIHRoYXQgZGVwcmVjYXRlcyB0aGUgZmVhdHVyZSwgdGhlCislIHNlY29uZCBpcyB0aGUgYWN0aW9uIHRoZSBzaG91bGQgYmUgdGFrZW4gYnkgdXNlcnMgb2YgdGhlIGZlYXR1cmUuCislCislIEV4YW1wbGU6CislICBcZGVwcmVjYXRlZHsxLjUuMX17VXNlIFxtZXRob2R7ZnJvYm5pY2F0ZSgpfSBpbnN0ZWFkLn0KKyUKK1xuZXdjb21tYW5ke1xkZXByZWNhdGVkfVsyXXslCisgIFxzdHJvbmd7RGVwcmVjYXRlZCBzaW5jZSByZWxlYXNlICMxLn0gICMyXHBhcn0KKworJSBOZXcgc3R1ZmYuCislIFRoaXMgc2hvdWxkIGJlIHVzZWQgdG8gbWFyayB0aGluZ3Mgd2hpY2ggaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZQorJSBkZXZlbG9wbWVudCB0cmVlIGJ1dCB0aGF0IGFyZW4ndCBpbiB0aGUgcmVsZWFzZSwgYnV0IGFyZSBkb2N1bWVudGVkLgorJSBUaGlzIGFsbG93cyByZWxlYXNlIG9mIGRvY3VtZW50YXRpb24gdGhhdCBhbHJlYWR5IGluY2x1ZGVzIHVwZGF0ZWQKKyUgZGVzY3JpcHRpb25zLiAgUGxhY2UgYXQgZW5kIG9mIGRlc2NyaXB0b3IgZW52aXJvbm1lbnQuCislCislIEV4YW1wbGU6CislICBcdmVyc2lvbmFkZGVkezEuNS4yfQorJSAgXHZlcnNpb25jaGFuZ2VkW3Nob3J0IGV4cGxhbmF0aW9uXXsyLjB9CislCitcbmV3Y29tbWFuZHtcdmVyc2lvbmFkZGVkfVsxXXslCisgIHsgIE5ldyBpbiB2ZXJzaW9uICMxLiAgfX0KK1xuZXdjb21tYW5ke1x2ZXJzaW9uY2hhbmdlZH1bMl1bXHB5QGJhZGtleV17JQorICBcaWZ4IzFcQHVuZGVmaW5lZCUKKyAgICB7ICBDaGFuZ2VkIGluIHZlcnNpb24gIzIuICB9JQorICBcZWxzZSUKKyAgICB7ICBDaGFuZ2VkIGluIHZlcnNpb24gIzI6XCAjMS4gIH0lCisgIFxmaSUKK30KKworCislIFRhYmxlcy4KKyUKK1xuZXdlbnZpcm9ubWVudHt0YWJsZWlpfVs0XXslCisgIFxiZWdpbntjZW50ZXJ9JQorICAgIFxkZWZcbGluZWlpIyMxIyMye1xjc25hbWUjMlxlbmRjc25hbWV7IyMxfSYjIzJcXH0lCisgICAgXGJlZ2lue3RhYnVsYXJ9eyMxfVxzdHJvbmd7IzN9JlxzdHJvbmd7IzR9IFxcKiBcaGxpbmUlCit9eyUKKyAgICBcZW5ke3RhYnVsYXJ9JQorICBcZW5ke2NlbnRlcn0lCit9CisKK1xuZXdlbnZpcm9ubWVudHtsb25ndGFibGVpaX1bNF17JQorICBcYmVnaW57Y2VudGVyfSUKKyAgICBcZGVmXGxpbmVpaSMjMSMjMntcY3NuYW1lIzJcZW5kY3NuYW1leyMjMX0mIyMyXFx9JQorICAgIFxiZWdpbntsb25ndGFibGV9W2NdeyMxfVxzdHJvbmd7IzN9JlxzdHJvbmd7IzR9IFxcKiBcaGxpbmVcZW5kaGVhZCUKK317JQorICAgIFxlbmR7bG9uZ3RhYmxlfSUKKyAgXGVuZHtjZW50ZXJ9JQorfQorCitcbmV3ZW52aXJvbm1lbnR7dGFibGVpaWl9WzVdeyUKKyAgXGJlZ2lue2NlbnRlcn0lCisgICAgXGRlZlxsaW5laWlpIyMxIyMyIyMze1xjc25hbWUjMlxlbmRjc25hbWV7IyMxfSYjIzImIyMzXFx9JQorICAgIFxiZWdpbnt0YWJ1bGFyfXsjMX1cc3Ryb25neyMzfSZcc3Ryb25neyM0fSZcc3Ryb25neyM1fSBcXCUKKyAgICAgIFxobGluZSUKK317JQorICAgIFxlbmR7dGFidWxhcn0lCisgIFxlbmR7Y2VudGVyfSUKK30KKworXG5ld2Vudmlyb25tZW50e2xvbmd0YWJsZWlpaX1bNV17JQorICBcYmVnaW57Y2VudGVyfSUKKyAgICBcZGVmXGxpbmVpaWkjIzEjIzIjIzN7XGNzbmFtZSMyXGVuZGNzbmFtZXsjIzF9JiMjMiYjIzNcXH0lCisgICAgXGJlZ2lue2xvbmd0YWJsZX1bY117IzF9XHN0cm9uZ3sjM30mXHN0cm9uZ3sjNH0mXHN0cm9uZ3sjNX0gXFwlCisgICAgICBcaGxpbmVcZW5kaGVhZCUKK317JQorICAgIFxlbmR7bG9uZ3RhYmxlfSUKKyAgXGVuZHtjZW50ZXJ9JQorfQorCitcbmV3ZW52aXJvbm1lbnR7dGFibGVpdn1bNl17JQorICBcYmVnaW57Y2VudGVyfSUKKyAgICBcZGVmXGxpbmVpdiMjMSMjMiMjMyMjNHtcY3NuYW1lIzJcZW5kY3NuYW1leyMjMX0mIyMyJiMjMyYjIzRcXH0lCisgICAgXGJlZ2lue3RhYnVsYXJ9eyMxfVxzdHJvbmd7IzN9JlxzdHJvbmd7IzR9JlxzdHJvbmd7IzV9JlxzdHJvbmd7IzZ9IFxcJQorICAgICAgXGhsaW5lJQorfXslCisgICAgXGVuZHt0YWJ1bGFyfSUKKyAgXGVuZHtjZW50ZXJ9JQorfQorCitcbmV3ZW52aXJvbm1lbnR7bG9uZ3RhYmxlaXZ9WzZdeyUKKyAgXGJlZ2lue2NlbnRlcn0lCisgICAgXGRlZlxsaW5laXYjIzEjIzIjIzMjIzR7XGNzbmFtZSMyXGVuZGNzbmFtZXsjIzF9JiMjMiYjIzMmIyM0XFx9JQorICAgIFxiZWdpbntsb25ndGFibGV9W2NdeyMxfVxzdHJvbmd7IzN9JlxzdHJvbmd7IzR9JlxzdHJvbmd7IzV9JlxzdHJvbmd7IzZ9JQorICAgICAgXFwlCisgICAgICBcaGxpbmVcZW5kaGVhZCUKK317JQorICAgIFxlbmR7bG9uZ3RhYmxlfSUKKyAgXGVuZHtjZW50ZXJ9JQorfQorCislIENyb3NzLXJlZmVyZW5jaW5nIChBTUssIG5ldyBpbXBsLiBGTEQpCislIFNhbXBsZSB1c2FnZToKKyUgIFxiZWdpbntzZWVhbHNvfQorJSAgICBcc2VlbW9kdWxle3JhbmR9e1VuaWZvcm0gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IufTsgJSBNb2R1bGUgeHJlZgorJSAgICBcc2VldGV4dHtcZW1waHtFbmN5Y2xvcGVkaWEgQnJpdGFubmljYX19LiAgICAgICAgICAgJSBSZWYgdG8gYSBib29rCislIAorJSAgICAlIEEgZnVua3kgY2FzZTogbW9kdWxlIG5hbWUgY29udGFpbnMgJ18nOyBoYXZlIHRvIHN1cHBseSBhbiBvcHRpb25hbCBrZXkKKyUgICAgXHNlZW1vZHVsZVtjb3B5cmVnXXtjb3B5X3JlZ317SW50ZXJmYWNlIGNvbnN0cnVjdG9yIHJlZ2lzdHJhdGlvbiBmb3IKKyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG1vZHVsZXtwaWNrbGV9Ln0KKyUgIFxlbmR7c2VlYWxzb30KKyUKKyUgTm90ZSB0aGF0IHRoZSBsYXN0IHBhcmFtZXRlciBmb3IgXHNlZW1vZHVsZSBhbmQgXHNlZXRleHQgc2hvdWxkIGJlIGNvbXBsZXRlCislIHNlbnRlbmNlcyBhbmQgYmUgdGVybWluYXRlZCB3aXRoIHRoZSBwcm9wZXIgcHVuY3R1YXRpb24uCisKK1xAaWZ1bmRlZmluZWR7cGRmYW5ub3RsaW5rfXslCisgIFxuZXdjb21tYW5ke1xweUBzZWVtb2R1bGV9WzNdW1xweUBtb2R1bGViYWRrZXldeyUKKyAgICBccGFyJQorICAgIFxpZnhccHlAbW9kdWxlYmFka2V5IzFcZGVmXHB5QG1vZHVsZWtleXsjMn1cZWxzZVxkZWZccHlAbW9kdWxla2V5eyMxfVxmaSUKKyAgICBcYmVnaW57ZnVsbGxpbmVpdGVtc30KKyAgICAgIFxpdGVtW01vZHVsZSBcbW9kdWxleyMyfSAoc2VjdGlvbiBccmVme21vZHVsZS1ccHlAbW9kdWxla2V5fSk6XQorICAgICAgIzMKKyAgICBcZW5ke2Z1bGxsaW5laXRlbXN9CisgIH0KK317XG5ld2NvbW1hbmR7XHB5QHNlZW1vZHVsZX1bM11bXHB5QG1vZHVsZWJhZGtleV17JQorICAgIFxwYXIlCisgICAgXGlmeFxweUBtb2R1bGViYWRrZXkjMVxkZWZccHlAbW9kdWxla2V5eyMyfVxlbHNlXGRlZlxweUBtb2R1bGVrZXl7IzF9XGZpJQorICAgIFxiZWdpbntmdWxsbGluZWl0ZW1zfQorICAgICAgXGl0ZW1bXHB5QGxpbmtUb05hbWV7bGFiZWwtbW9kdWxlLVxweUBtb2R1bGVrZXl9e01vZHVsZSBcbW9kdWxleyMyfX0KKyAgICAgICAgICAgIChzZWN0aW9uIFxyZWZ7bW9kdWxlLVxweUBtb2R1bGVrZXl9KTpdCisgICAgICAjMworICAgIFxlbmR7ZnVsbGxpbmVpdGVtc30KKyAgfQorfQorJSBcc2VldGl0bGVbdXJsXXt0aXRsZX17d2h5IGl0J3MgaW50ZXJlc3Rpbmd9CitcbmV3Y29tbWFuZHtccHlAc2VldGl0bGV9WzNdW1xweUBtb2R1bGViYWRrZXldeyUKKyAgXHBhcgorICBcYmVnaW57ZnVsbGxpbmVpdGVtc30KKyAgICBcaXRlbVtcY2l0ZXRpdGxleyMyfV0KKyAgICBcaWZ4XHB5QG1vZHVsZWJhZGtleSMxXGVsc2UKKyAgICAgIFxpdGVtW3tcc21hbGx7KFx1cmx7IzF9KX19XQorICAgIFxmaQorICAgICMzCisgIFxlbmR7ZnVsbGxpbmVpdGVtc30KK30KKyUgXHNlZXBlcHtudW1iZXJ9e3RpdGxlfXt3aHkgaXQncyBpbnRlcmVzdGluZ30KK1xuZXdjb21tYW5ke1xweUBzZWVwZXB9WzNdeyUKKyAgXHBhciUKKyAgXGJlZ2lue2Z1bGxsaW5laXRlbXN9CisgICAgXGl0ZW1bXHBlcHsjMX0sIGBgXGVtcGh7IzJ9JyddCisgICAgIzMKKyAgXGVuZHtmdWxsbGluZWl0ZW1zfQorfQorJSBcc2VlcmZje251bWJlcn17dGl0bGV9e3doeSBpdCdzIGludGVyZXN0aW5nfQorXG5ld2NvbW1hbmR7XHB5QHNlZXJmY31bM117JQorICBccGFyJQorICBcYmVnaW57ZnVsbGxpbmVpdGVtc30KKyAgICBcaXRlbVtccmZjeyMxfSwgYGBcZW1waHsjMn0nJ10KKyAgICAjMworICBcZW5ke2Z1bGxsaW5laXRlbXN9Cit9CislIFxzZWV1cmx7dXJsfXt3aHkgaXQncyBpbnRlcmVzdGluZ30KK1xuZXdjb21tYW5ke1xweUBzZWV1cmx9WzJdeyUKKyAgXHBhciUKKyAgXGJlZ2lue2Z1bGxsaW5laXRlbXN9CisgICAgXGl0ZW1bXHVybHsjMX1dCisgICAgIzIKKyAgXGVuZHtmdWxsbGluZWl0ZW1zfQorfQorXG5ld2Vudmlyb25tZW50e3NlZWFsc299WzBdeworICBccGFyCisgIFxzdHJvbmd7U2VlIEFsc286fVxwYXIKKyAgXGRlZlxzZWV0ZXh0IyMxe1xwYXJ7IyMxfX0KKyAgXGxldFxzZWVtb2R1bGU9XHB5QHNlZW1vZHVsZQorICBcbGV0XHNlZXBlcD1ccHlAc2VlcGVwCisgIFxsZXRcc2VlcmZjPVxweUBzZWVyZmMKKyAgXGxldFxzZWV0aXRsZT1ccHlAc2VldGl0bGUKKyAgXGxldFxzZWV1cmw9XHB5QHNlZXVybAorfXtccGFyfQorCisKKyUgQWxsb3cgdGhlIFB5dGhvbiByZWxlYXNlIG51bWJlciB0byBiZSBzcGVjaWZpZWQgaW5kZXBlbmRlbnRseSBvZiB0aGUKKyUgXGRhdGV7fS4gIFRoaXMgYWxsb3dzIHRoZSBkYXRlIHRvIHJlZmxlY3QgdGhlIGRvY3VtZW50J3MgZGF0ZSBhbmQKKyUgcmVsZWFzZSB0byBzcGVjaWZ5IHRoZSBQeXRob24gcmVsZWFzZSB0aGF0IGlzIGRvY3VtZW50ZWQuCislCitcbmV3Y29tbWFuZHtccHlAcmVsZWFzZX17fQorXG5ld2NvbW1hbmR7XHZlcnNpb259e30KK1xuZXdjb21tYW5ke1xzaG9ydHZlcnNpb259e30KK1xuZXdjb21tYW5ke1xyZWxlYXNlbmFtZX17UmVsZWFzZX0KK1xuZXdjb21tYW5ke1xyZWxlYXNlfVsxXXslCisgIFxyZW5ld2NvbW1hbmR7XHB5QHJlbGVhc2V9e1xyZWxlYXNlbmFtZVxzcGFjZVx2ZXJzaW9ufSUKKyAgXHJlbmV3Y29tbWFuZHtcdmVyc2lvbn17IzF9fQorXG5ld2NvbW1hbmR7XHNldHNob3J0dmVyc2lvbn1bMV17JQorICBccmVuZXdjb21tYW5ke1xzaG9ydHZlcnNpb259eyMxfX0KKworJSBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBhdXRob3IncyBhZGRyZXNzIHNlcGFyYXRlbHkgZnJvbSB0aGUKKyUgYXV0aG9yJ3MgbmFtZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gZm9ybWF0IHRoZW0gZGlmZmVyZW50bHksIHdoaWNoCislIGlzIGEgZ29vZCB0aGluZy4KKyUKK1xuZXdjb21tYW5ke1xweUBhdXRob3JhZGRyZXNzfXt9CitcbmV3Y29tbWFuZHtcYXV0aG9yYWRkcmVzc31bMV17XHJlbmV3Y29tbWFuZHtccHlAYXV0aG9yYWRkcmVzc317IzF9fQorXGxldFxkZXZlbG9wZXJzYWRkcmVzcz1cYXV0aG9yYWRkcmVzcworXGxldFxkZXZlbG9wZXI9XGF1dGhvcgorXGxldFxkZXZlbG9wZXJzPVxhdXRob3IKKworJSBUaGlzIHNldHMgdXAgdGhlIGZhbmN5IGNoYXB0ZXIgaGVhZGluZ3MgdGhhdCBtYWtlIHRoZSBkb2N1bWVudHMgbG9vaworJSBhdCBsZWFzdCBhIGxpdHRsZSBiZXR0ZXIgdGhhbiB0aGUgdXN1YWwgTGFUZVggb3V0cHV0LgorJQorXEBpZnVuZGVmaW5lZHtDaFRpdGxlVmFyfXt9eworICBcQ2hOYW1lVmFye1xyYWdnZWRsZWZ0XG5vcm1hbHNpemVccHlASGVhZGVyRmFtaWx5fQorICBcQ2hOdW1WYXJ7XHJhZ2dlZGxlZnQgXGJmc2VyaWVzXExhcmdlXHB5QEhlYWRlckZhbWlseX0KKyAgXENoVGl0bGVWYXJ7XHJhZ2dlZGxlZnQgXHJtXEh1Z2VccHlASGVhZGVyRmFtaWx5fQorICAlIFRoaXMgY3JlYXRlcyBjaGFwdGVyIGhlYWRzIHdpdGhvdXQgdGhlIGxlYWRpbmcgXHZzcGFjZSp7fToKKyAgXGRlZlxAbWFrZWNoYXB0ZXJoZWFkIzF7JQorICAgIHtccGFyaW5kZW50IFx6QCBccmFnZ2VkcmlnaHQgXG5vcm1hbGZvbnQKKyAgICAgIFxpZm51bSBcY0BzZWNudW1kZXB0aCA+XG1AbmUKKyAgICAgICAgXERPQ0gKKyAgICAgIFxmaQorICAgICAgXGludGVybGluZXBlbmFsdHlcQE0KKyAgICAgIFxET1RJeyMxfQorICAgIH0KKyAgfQorfQorCisKKyUgRGVmaW5pdGlvbiBsaXN0czsgcmVxdWVzdGVkIGJ5IEFNSyBmb3IgSE9XVE8gZG9jdW1lbnRzLiAgUHJvYmFibHkgdXNlZnVsCislIGVsc2V3aGVyZSBhcyB3ZWxsLCBzbyBrZWVwIGluIGluIHRoZSBnZW5lcmFsIHN0eWxlIHN1cHBvcnQuCislCitcbmV3ZW52aXJvbm1lbnR7ZGVmaW5pdGlvbnN9eyUKKyAgXGJlZ2lue2Rlc2NyaXB0aW9ufSUKKyAgXGRlZlx0ZXJtIyMxe1xpdGVtWyMjMV1cbWJveHt9XFwqWzBtbV19Cit9eyUKKyAgXGVuZHtkZXNjcmlwdGlvbn0lCit9CisKKyUgVGVsbCBUZVggYWJvdXQgcGF0aG9sb2dpY2FsIGh5cGhlbmF0aW9uIGNhc2VzOgorXGh5cGhlbmF0aW9ue0Jhc2UtSFRUUC1SZS1xdWVzdC1IYW5kLWxlcn0KZGlmZiAtLWdpdCBhL2RvYy90b29scy90ZXhpbnB1dHMvcmVwb3J0aW5nYnVncy50ZXggYi9kb2MvdG9vbHMvdGV4aW5wdXRzL3JlcG9ydGluZ2J1Z3MudGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNjQ3MGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvdG9vbHMvdGV4aW5wdXRzL3JlcG9ydGluZ2J1Z3MudGV4CkBAIC0wLDAgKzEsNjUgQEAKK1xsYWJlbHtyZXBvcnRpbmctYnVnc30KKworUHl0aG9uIGlzIGEgbWF0dXJlIHByb2dyYW1taW5nIGxhbmd1YWdlIHdoaWNoIGhhcyBlc3RhYmxpc2hlZCBhCityZXB1dGF0aW9uIGZvciBzdGFiaWxpdHkuICBJbiBvcmRlciB0byBtYWludGFpbiB0aGlzIHJlcHV0YXRpb24sIHRoZQorZGV2ZWxvcGVycyB3b3VsZCBsaWtlIHRvIGtub3cgb2YgYW55IGRlZmljaWVuY2llcyB5b3UgZmluZCBpbiBQeXRob24KK29yIGl0cyBkb2N1bWVudGF0aW9uLgorCitBbGwgYnVnIHJlcG9ydHMgc2hvdWxkIGJlIHN1Ym1pdHRlZCB2aWEgdGhlIFB5dGhvbiBCdWcgVHJhY2tlciBvbgorU291cmNlRm9yZ2UgKFx1cmx7aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9idWdzLz9ncm91cF9pZD01NDcwfSkuICBUaGUKK2J1ZyB0cmFja2VyIG9mZmVycyBhIFdlYiBmb3JtIHdoaWNoIGFsbG93cyBwZXJ0aW5lbnQgaW5mb3JtYXRpb24gdG8gYmUKK2VudGVyZWQgYW5kIHN1Ym1pdHRlZCB0byB0aGUgZGV2ZWxvcGVycy4KKworQmVmb3JlIHN1Ym1pdHRpbmcgYSByZXBvcnQsIHBsZWFzZSBsb2cgaW50byBTb3VyY2VGb3JnZSBpZiB5b3UgYXJlIGEKK21lbWJlcjsgdGhpcyB3aWxsIG1ha2UgaXQgcG9zc2libGUgZm9yIHRoZSBkZXZlbG9wZXJzIHRvIGNvbnRhY3QgeW91Citmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpZiBuZWVkZWQuICBJZiB5b3UgYXJlIG5vdCBhIFNvdXJjZUZvcmdlCittZW1iZXIgYnV0IHdvdWxkIG5vdCBtaW5kIHRoZSBkZXZlbG9wZXJzIGNvbnRhY3RpbmcgeW91LCB5b3UgbWF5CitpbmNsdWRlIHlvdXIgZW1haWwgYWRkcmVzcyBpbiB5b3VyIGJ1ZyBkZXNjcmlwdGlvbi4gIEluIHRoaXMgY2FzZSwKK3BsZWFzZSByZWFsaXplIHRoYXQgdGhlIGluZm9ybWF0aW9uIGlzIHB1YmxpY2FsbHkgYXZhaWxhYmxlIGFuZCBjYW5ub3QKK2JlIHByb3RlY3RlZC4KKworVGhlIGZpcnN0IHN0ZXAgaW4gZmlsaW5nIGEgcmVwb3J0IGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBwcm9ibGVtCitoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLiAgVGhlIGFkdmFudGFnZSBpbiBkb2luZyBzbywgYXNpZGUgZnJvbQorc2F2aW5nIHRoZSBkZXZlbG9wZXJzIHRpbWUsIGlzIHRoYXQgeW91IGxlYXJuIHdoYXQgaGFzIGJlZW4gZG9uZSB0bworZml4IGl0OyBpdCBtYXkgYmUgdGhhdCB0aGUgcHJvYmxlbSBoYXMgYWxyZWFkeSBiZWVuIGZpeGVkIGZvciB0aGUgbmV4dAorcmVsZWFzZSwgb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBuZWVkZWQgKGluIHdoaWNoIGNhc2UgeW91IGFyZQord2VsY29tZSB0byBwcm92aWRlIGl0IGlmIHlvdSBjYW4hKS4gIFRvIGRvIHRoaXMsIHNlYXJjaCB0aGUgYnVnCitkYXRhYmFzZSB1c2luZyB0aGUgc2VhcmNoIGJveCBuZWFyIHRoZSBib3R0b20gb2YgdGhlIHBhZ2UuCisKK0lmIHRoZSBwcm9ibGVtIHlvdSdyZSByZXBvcnRpbmcgaXMgbm90IGFscmVhZHkgaW4gdGhlIGJ1ZyB0cmFja2VyLCBnbworYmFjayB0byB0aGUgUHl0aG9uIEJ1ZyBUcmFja2VyCisoXHVybHtodHRwOi8vc291cmNlZm9yZ2UubmV0L2J1Z3MvP2dyb3VwX2lkPTU0NzB9KS4gIFNlbGVjdCB0aGUKK2BgU3VibWl0IGEgQnVnJycgbGluayBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlIHRvIG9wZW4gdGhlIGJ1ZyByZXBvcnRpbmcKK2Zvcm0uCisKK1RoZSBzdWJtaXNzaW9uIGZvcm0gaGFzIGEgbnVtYmVyIG9mIGZpZWxkcy4gIFRoZSBvbmx5IGZpZWxkcyB0aGF0IGFyZQorcmVxdWlyZWQgYXJlIHRoZSBgYFN1bW1hcnknJyBhbmQgYGBEZXRhaWxzJycgZmllbGRzLiAgRm9yIHRoZSBzdW1tYXJ5LAorZW50ZXIgYSBcZW1waHt2ZXJ5fSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvYmxlbTsgbGVzcyB0aGFuIHRlbgord29yZHMgaXMgZ29vZC4gIEluIHRoZSBEZXRhaWxzIGZpZWxkLCBkZXNjcmliZSB0aGUgcHJvYmxlbSBpbiBkZXRhaWwsCitpbmNsdWRpbmcgd2hhdCB5b3UgZXhwZWN0ZWQgdG8gaGFwcGVuIGFuZCB3aGF0IGRpZCBoYXBwZW4uICBCZSBzdXJlIHRvCitpbmNsdWRlIHRoZSB2ZXJzaW9uIG9mIFB5dGhvbiB5b3UgdXNlZCwgd2hldGhlciBhbnkgZXh0ZW5zaW9uIG1vZHVsZXMKK3dlcmUgaW52b2x2ZWQsIGFuZCB3aGF0IGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBwbGF0Zm9ybSB5b3Ugd2VyZSB1c2luZworKGluY2x1ZGluZyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFzIGFwcHJvcHJpYXRlKS4KKworVGhlIG9ubHkgb3RoZXIgZmllbGQgdGhhdCB5b3UgbWF5IHdhbnQgdG8gc2V0IGlzIHRoZSBgYENhdGVnb3J5JycKK2ZpZWxkLCB3aGljaCBhbGxvd3MgeW91IHRvIHBsYWNlIHRoZSBidWcgcmVwb3J0IGludG8gYSBicm9hZCBjYXRlZ29yeQorKHN1Y2ggYXMgYGBEb2N1bWVudGF0aW9uJycgb3IgYGBMaWJyYXJ5JycpLgorCitFYWNoIGJ1ZyByZXBvcnQgd2lsbCBiZSBhc3NpZ25lZCB0byBhIGRldmVsb3BlciB3aG8gd2lsbCBkZXRlcm1pbmUKK3doYXQgbmVlZHMgdG8gYmUgZG9uZSB0byBjb3JyZWN0IHRoZSBwcm9ibGVtLiAgSWYgeW91IGhhdmUgYQorU291cmNlRm9yZ2UgYWNjb3VudCBhbmQgbG9nZ2VkIGluIHRvIHJlcG9ydCB0aGUgcHJvYmxlbSwgeW91IHdpbGwKK3JlY2VpdmUgYW4gdXBkYXRlIGVhY2ggdGltZSBhY3Rpb24gaXMgdGFrZW4gb24gdGhlIGJ1Zy4KKworCitcYmVnaW57c2VlYWxzb30KKyAgXHNlZXRpdGxlW2h0dHA6Ly93d3ctbWljZS5jcy51Y2wuYWMudWsvbXVsdGltZWRpYS9zb2Z0d2FyZS9kb2N1bWVudGF0aW9uL1JlcG9ydGluZ0J1Z3MuaHRtbF17SG93CisgICAgICAgIHRvIFJlcG9ydCBCdWdzIEVmZmVjdGl2ZWx5fXtBcnRpY2xlIHdoaWNoIGdvZXMgaW50byBzb21lCisgICAgICAgIGRldGFpbCBhYm91dCBob3cgdG8gY3JlYXRlIGEgdXNlZnVsIGJ1ZyByZXBvcnQuICBUaGlzCisgICAgICAgIGRlc2NyaWJlcyB3aGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gaXMgdXNlZnVsIGFuZCB3aHkgaXQgaXMKKyAgICAgICAgdXNlZnVsLn0KKworICBcc2VldGl0bGVbaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9xdWFsaXR5L2J1Zy13cml0aW5nLWd1aWRlbGluZXMuaHRtbF17QnVnCisgICAgICAgIFdyaXRpbmcgR3VpZGVsaW5lc317SW5mb3JtYXRpb24gYWJvdXQgd3JpdGluZyBhIGdvb2QgYnVnCisgICAgICAgIHJlcG9ydC4gIFNvbWUgb2YgdGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgTW96aWxsYSBwcm9qZWN0LCBidXQKKyAgICAgICAgZGVzY3JpYmVzIGdlbmVyYWwgZ29vZCBwcmFjdGljZXMufQorXGVuZHtzZWVhbHNvfQpkaWZmIC0tZ2l0IGEvZG9jL3Rvb2xzL3RvYzJia20ucHkgYi9kb2MvdG9vbHMvdG9jMmJrbS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NWM3ZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL3RvYzJia20ucHkKQEAgLTAsMCArMSwxNDMgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworIiIiQ29udmVydCBhIExhVGVYIC50b2MgZmlsZSB0byBzb21lIFBERlRlWCBtYWdpYyB0byBjcmVhdGUgdGhhdCBuZWF0IG91dGxpbmUuCisKK1RoZSBvdXRwdXQgZmlsZSBoYXMgYW4gZXh0ZW5zaW9uIG9mICcuYmttJyBpbnN0ZWFkIG9mICcub3V0Jywgc2luY2UgaHlwZXJyZWYKK2FscmVhZHkgdXNlcyB0aGF0IGV4dGVuc2lvbi4KKyIiIgorCitpbXBvcnQgZ2V0b3B0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0IHN5cworCisKKyMgRW5jaCBpdGVtIGluIGFuIGVudHJ5IGlzIGEgdHVwbGUgb2Y6CisjCisjICAgU2VjdGlvbiAjLCAgVGl0bGUgU3RyaW5nLCAgUGFnZSAjLCAgTGlzdCBvZiBTdWItZW50cmllcworIworIyBUaGUgcmV0dXJuIHZhbHVlIG9mIHBhcnNlX3RvYygpIGlzIHN1Y2ggYSB0dXBsZS4KKworY2xpbmVfcmUgPSByIiIiXgorXFxjb250ZW50c2xpbmVcIFx7KFthLXpdKil9ICAgICAgICAgICAgICMgdHlwZSBvZiBzZWN0aW9uIGluICQxCitceyg/OlxcbnVtYmVybGluZVwgXHsoWzAtOS5BLVpdKyl9KT8gICAgICMgc2VjdGlvbiBudW1iZXIKKyguKil9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRpdGxlIHN0cmluZworXHsoXGQrKX0kIiIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGFnZSBudW1iZXIKKworY2xpbmVfcnggPSByZS5jb21waWxlKGNsaW5lX3JlLCByZS5WRVJCT1NFKQorCitPVVRFUl9UT19JTk5FUiA9IC0xCisKK190cmFuc2l0aW9uX21hcCA9IHsKKyAgICAoJ2NoYXB0ZXInLCAnc2VjdGlvbicpOiBPVVRFUl9UT19JTk5FUiwKKyAgICAoJ3NlY3Rpb24nLCAnc3Vic2VjdGlvbicpOiBPVVRFUl9UT19JTk5FUiwKKyAgICAoJ3N1YnNlY3Rpb24nLCAnc3Vic3Vic2VjdGlvbicpOiBPVVRFUl9UT19JTk5FUiwKKyAgICAoJ3N1YnN1YnNlY3Rpb24nLCAnc3Vic2VjdGlvbicpOiAxLAorICAgICgnc3Vic2VjdGlvbicsICdzZWN0aW9uJyk6IDEsCisgICAgKCdzZWN0aW9uJywgJ2NoYXB0ZXInKTogMSwKKyAgICAoJ3N1YnNlY3Rpb24nLCAnY2hhcHRlcicpOiAyLAorICAgICgnc3Vic3Vic2VjdGlvbicsICdzZWN0aW9uJyk6IDIsCisgICAgKCdzdWJzdWJzZWN0aW9uJywgJ2NoYXB0ZXInKTogMywKKyAgICB9CisKK0lOQ0xVREVEX0xFVkVMUyA9ICgiY2hhcHRlciIsICJzZWN0aW9uIiwgInN1YnNlY3Rpb24iLCAic3Vic3Vic2VjdGlvbiIpCisKKworZGVmIHBhcnNlX3RvYyhmcCwgYmlncGFydD1Ob25lKToKKyAgICB0b2MgPSB0b3AgPSBbXQorICAgIHN0YWNrID0gW3RvY10KKyAgICBsZXZlbCA9IGJpZ3BhcnQgb3IgJ2NoYXB0ZXInCisgICAgbGluZW5vID0gMAorICAgIHdoaWxlIDE6CisgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgbGluZW5vID0gbGluZW5vICsgMQorICAgICAgICBtID0gY2xpbmVfcngubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHN0eXBlLCBzbnVtLCB0aXRsZSwgcGFnZW5vID0gbS5ncm91cCgxLCAyLCAzLCA0KQorICAgICAgICAgICAgdGl0bGUgPSBjbGVhbl90aXRsZSh0aXRsZSkKKyAgICAgICAgICAgIGVudHJ5ID0gKHN0eXBlLCBzbnVtLCB0aXRsZSwgc3RyaW5nLmF0b2kocGFnZW5vKSwgW10pCisgICAgICAgICAgICBpZiBzdHlwZSA9PSBsZXZlbDoKKyAgICAgICAgICAgICAgICB0b2MuYXBwZW5kKGVudHJ5KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBzdHlwZSBub3QgaW4gSU5DTFVERURfTEVWRUxTOgorICAgICAgICAgICAgICAgICAgICAjIHdlIGRvbid0IHdhbnQgcGFyYWdyYXBocyAmIHN1YnBhcmFncmFwaHMKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBfdHJhbnNpdGlvbl9tYXBbKGxldmVsLCBzdHlwZSldCisgICAgICAgICAgICAgICAgaWYgZGlyZWN0aW9uID09IE9VVEVSX1RPX0lOTkVSOgorICAgICAgICAgICAgICAgICAgICB0b2MgPSB0b2NbLTFdWy0xXQorICAgICAgICAgICAgICAgICAgICBzdGFjay5pbnNlcnQoMCwgdG9jKQorICAgICAgICAgICAgICAgICAgICB0b2MuYXBwZW5kKGVudHJ5KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGRpcmVjdGlvbik6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgc3RhY2tbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvYyA9IHN0YWNrWzBdCisgICAgICAgICAgICAgICAgICAgIHRvYy5hcHBlbmQoZW50cnkpCisgICAgICAgICAgICAgICAgbGV2ZWwgPSBzdHlwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgibC4lczogIiArIGxpbmUpCisgICAgcmV0dXJuIHRvcAorCisKK2hhY2tzY29yZV9yeCA9IHJlLmNvbXBpbGUociJcXGhhY2tzY29yZVxzKntbXn1dKn0iKQorcmFpc2Vib3hfcnggPSByZS5jb21waWxlKHIiXFxyYWlzZWJveFxzKntbXn1dKn0iKQordGl0bGVfcnggPSByZS5jb21waWxlKHIiXFwoW2EtekEtWl0pK1xzKyIpCit0aXRsZV90cmFucyA9IHN0cmluZy5tYWtldHJhbnMoIiIsICIiKQorCitkZWYgY2xlYW5fdGl0bGUodGl0bGUpOgorICAgIHRpdGxlID0gcmFpc2Vib3hfcnguc3ViKCIiLCB0aXRsZSkKKyAgICB0aXRsZSA9IGhhY2tzY29yZV9yeC5zdWIociJcXF8iLCB0aXRsZSkKKyAgICBwb3MgPSAwCisgICAgd2hpbGUgMToKKyAgICAgICAgbSA9IHRpdGxlX3J4LnNlYXJjaCh0aXRsZSwgcG9zKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgc3RhcnQgPSBtLnN0YXJ0KCkKKyAgICAgICAgICAgIGlmIHRpdGxlW3N0YXJ0OnN0YXJ0KzE1XSAhPSAiXFx0ZXh0dW5kZXJzY29yZSI6CisgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZVs6c3RhcnRdICsgdGl0bGVbbS5lbmQoKTpdCisgICAgICAgICAgICBwb3MgPSBzdGFydCArIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJyZWFrCisgICAgdGl0bGUgPSBzdHJpbmcudHJhbnNsYXRlKHRpdGxlLCB0aXRsZV90cmFucywgInt9IikKKyAgICByZXR1cm4gdGl0bGUKKworCitkZWYgd3JpdGVfdG9jKHRvYywgZnApOgorICAgIGZvciBlbnRyeSBpbiB0b2M6CisgICAgICAgIHdyaXRlX3RvY19lbnRyeShlbnRyeSwgZnAsIDApCisKK2RlZiB3cml0ZV90b2NfZW50cnkoZW50cnksIGZwLCBsYXllcik6CisgICAgc3R5cGUsIHNudW0sIHRpdGxlLCBwYWdlbm8sIHRvYyA9IGVudHJ5CisgICAgcyA9ICJcXHBkZm91dGxpbmUgZ290byBuYW1le3BhZ2UlMDNkfSIgJSBwYWdlbm8KKyAgICBpZiB0b2M6CisgICAgICAgIHMgPSAiJXMgY291bnQgLSVkIiAlIChzLCBsZW4odG9jKSkKKyAgICBpZiBzbnVtOgorICAgICAgICB0aXRsZSA9ICIlcyAlcyIgJSAoc251bSwgdGl0bGUpCisgICAgcyA9ICIlcyB7JXN9XG4iICUgKHMsIHRpdGxlKQorICAgIGZwLndyaXRlKHMpCisgICAgZm9yIGVudHJ5IGluIHRvYzoKKyAgICAgICAgd3JpdGVfdG9jX2VudHJ5KGVudHJ5LCBmcCwgbGF5ZXIgKyAxKQorCisKK2RlZiBwcm9jZXNzKGlmbiwgb2ZuLCBiaWdwYXJ0PU5vbmUpOgorICAgIHRvYyA9IHBhcnNlX3RvYyhvcGVuKGlmbiksIGJpZ3BhcnQpCisgICAgd3JpdGVfdG9jKHRvYywgb3BlbihvZm4sICJ3IikpCisKKworZGVmIG1haW4oKToKKyAgICBiaWdwYXJ0ID0gTm9uZQorICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgImM6IikKKyAgICBpZiBvcHRzOgorICAgICAgICBiaWdwYXJ0ID0gb3B0c1swXVsxXQorICAgIGlmIG5vdCBhcmdzOgorICAgICAgICB1c2FnZSgpCisgICAgICAgIHN5cy5leGl0KDIpCisgICAgZm9yIGZpbGVuYW1lIGluIGFyZ3M6CisgICAgICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCisgICAgICAgIGV4dCA9IGV4dCBvciAiLnRvYyIKKyAgICAgICAgcHJvY2VzcyhiYXNlICsgZXh0LCBiYXNlICsgIi5ia20iLCBiaWdwYXJ0KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvdXBkYXRlLWRvY3Muc2ggYi9kb2MvdG9vbHMvdXBkYXRlLWRvY3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzk2NTJhYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy90b29scy91cGRhdGUtZG9jcy5zaApAQCAtMCwwICsxLDIxIEBACisjISAvYmluL3NoCisKKyMgU2NyaXB0IHdoaWNoIGluc3RhbGxzIGEgZGV2ZWxvcG1lbnQgc25hcHNob3Qgb2YgdGhlIGRvY3VtZW50YXRpb24KKyMgaW50byB0aGUgIlB5dGhvbiBAIFNvdXJjZUZvcmdlIiB3ZWJzaXRlLgorIworIyBUaGUgcHVzaC1kb2NzLnNoIHNjcmlwdCBwdXNoZXMgdGhpcyB0byB0aGUgU291cmNlRm9yZ2Ugd2hlbiBuZWVkZWQKKyMgYW5kIHJlbW92ZXMgaXQgd2hlbiBkb25lLgorCitpZiBbIC16ICIkSE9NRSIgXSA7IHRoZW4KKyAgICBIT01FPWBncmVwIGZkcmFrZSAvZXRjL3Bhc3N3ZCB8IHNlZCAnc3xeLio6XChbXjpdKlwpOlteOl0qJHxcMXwnYAorICAgIGV4cG9ydCBIT01FCitmaQorCitVUERBVEVTPSIkSE9NRS90bXAvJDEiCisKK2NkIC9ob21lL2dyb3Vwcy9weXRob24vaHRkb2NzIHx8IGV4aXQgJD8KK3JtIC1yZiBkZXZlbC1kb2NzIHx8IGV4aXQgJD8KK21rZGlyIGRldmVsLWRvY3MgfHwgZXhpdCAkPworY2QgZGV2ZWwtZG9jcyB8fCBleGl0ICQ/CisoYnppcDIgLWRjICIkVVBEQVRFUyIgfCB0YXIgeGYgLSkgfHwgZXhpdCAkPworcm0gIiRVUERBVEVTIiB8fCBleGl0ICQ/CmRpZmYgLS1naXQgYS9kb2MvdG9vbHMvd2hpY2hsaWJzIGIvZG9jL3Rvb2xzL3doaWNobGlicwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMGQ0NGVlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3Rvb2xzL3doaWNobGlicwpAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorc2VkIC1uICdzJV5cXGlucHV0e1wobGliW2EtekEtWjAtOV9dKlwpfS4qJS4uL2xpYi9cMS50ZXglcCcgLi4vbGliL2xpYi50ZXgK