PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CjwhLS1OZXdQYWdlLS0+CjxIVE1MPgo8SEVBRD4KPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS42LjBfMjQpIG9uIFN1biBBcHIgMDMgMTA6NTc6NTAgSVNUIDIwMTEgLS0+CjxUSVRMRT4KSkRUVXRpbHMKPC9USVRMRT4KCjxNRVRBIE5BTUU9ImRhdGUiIENPTlRFTlQ9IjIwMTEtMDQtMDMiPgoKPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgoKPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpmdW5jdGlvbiB3aW5kb3dUaXRsZSgpCnsKICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2lzLWV4dGVybmFsPXRydWUnKSA9PSAtMSkgewogICAgICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iSkRUVXRpbHMiOwogICAgfQp9CjwvU0NSSVBUPgo8Tk9TQ1JJUFQ+CjwvTk9TQ1JJUFQ+Cgo8L0hFQUQ+Cgo8Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+CjxIUj4KCgo8IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+CjxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgo8QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+CjxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+CjxUUj4KPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgo8QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgogIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSkRUVXRpbHMuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPC9UUj4KPC9UQUJMRT4KPC9URD4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+CjwvRU0+CjwvVEQ+CjwvVFI+Cgo8VFI+CjxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+CiZuYnNwO1BSRVYgQ0xBU1MmbmJzcDsKJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2UvanN0L3dzL2pheHdzL2NvcmUvdXRpbHMvV1NETFV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuamF4d3MuY29yZS51dGlscyI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+CjxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+CiAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKJm5ic3A7PEEgSFJFRj0iSkRUVXRpbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7CiZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICA8IS0tCiAgaWYod2luZG93PT10b3ApIHsKICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7CiAgfQogIC8vLS0+CjwvU0NSSVBUPgo8Tk9TQ1JJUFQ+CiAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KPC9OT1NDUklQVD4KCgo8L0ZPTlQ+PC9URD4KPC9UUj4KPFRSPgo8VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgogIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgo8L1RSPgo8L1RBQkxFPgo8QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgoKPEhSPgo8IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+CjxIMj4KPEZPTlQgU0laRT0iLTEiPgpvcmcuZWNsaXBzZS5qc3Qud3MuamF4d3MuY29yZS51dGlsczwvRk9OVD4KPEJSPgpDbGFzcyBKRFRVdGlsczwvSDI+CjxQUkU+CmphdmEubGFuZy5PYmplY3QKICA8SU1HIFNSQz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2luaGVyaXQuZ2lmIiBBTFQ9ImV4dGVuZGVkIGJ5ICI+PEI+b3JnLmVjbGlwc2UuanN0LndzLmpheHdzLmNvcmUudXRpbHMuSkRUVXRpbHM8L0I+CjwvUFJFPgo8SFI+CjxETD4KPERUPjxQUkU+cHVibGljIGZpbmFsIGNsYXNzIDxCPkpEVFV0aWxzPC9CPjxEVD5leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L0RMPgo8L1BSRT4KCjxQPgpKRFQgVXRpbGl0eSBjbGFzcy4KIDxwPgogPHN0cm9uZz5Qcm92aXNpb25hbCBBUEk6PC9zdHJvbmc+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlcgogZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0CiB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzCiB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCiA8L3A+CjxQPgoKPFA+CjxIUj4KCjxQPgoKPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgoKPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgo8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+CjxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2UvanN0L3dzL2pheHdzL2NvcmUvdXRpbHMvSkRUVXRpbHMuaHRtbCNhZGRUb0NsYXNzcGF0aChvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QsIG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeSkiPmFkZFRvQ2xhc3NwYXRoPC9BPjwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0Jm5ic3A7amF2YVByb2plY3QsCiAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeSZuYnNwO2NsYXNzcGF0aEVudHJ5KTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QWRkIGEgPGNvZGU+SUNsYXNzcGF0aEVudHJ5PC9jb2RlPiB0byBhIDxjb2RlPklKYXZhUHJvamVjdDwvY29kZT48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjZmluZFR5cGUob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0LCBqYXZhLmxhbmcuU3RyaW5nKSI+ZmluZFR5cGU8L0E+PC9CPihvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QmbmJzcDtqYXZhUHJvamVjdCwKICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2Z1bGx5UXVhbGlmaWVkQ2xhc3NOYW1lKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZmlyc3QgdHlwZSBmb3VuZCBmb2xsb3dpbmcgdGhlIGdpdmVuIGphdmEgcHJvamVjdCdzIGNsYXNzcGF0aCB3aXRoIHRoZSBnaXZlbiBmdWxseSBxdWFsaWZpZWQgbmFtZSBvciBudWxsIGlmIG5vbmUgaXMgZm91bmQuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7b3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sI2ZpbmRUeXBlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5maW5kVHlwZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcm9qZWN0TmFtZSwKICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2Z1bGx5UXVhbGlmaWVkQ2xhc3NOYW1lKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZmlyc3QgdHlwZSBmb3VuZCB3aXRoIHRoZSBnaXZlbiBmdWxseSBxdWFsaWZpZWQgbmFtZSBmb2xsb3dpbmcgdGhlIGNsYXNzcGF0aCBvZiB0aGUgamF2YSBwcm9qZWN0IHdpdGgKIHRoZSBnaXZlIHByb2plY3QgbmFtZSBvciBudWxsIGlmIG5vbmUgaXMgZm91bmQuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7b3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2UvanN0L3dzL2pheHdzL2NvcmUvdXRpbHMvSkRUVXRpbHMuaHRtbCNnZXRKYXZhUHJvamVjdChqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0SmF2YVByb2plY3Q8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cHJvamVjdE5hbWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBKYXZhIHByb2plY3QgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gcHJvamVjdCBuYW1lLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnN0YXRpYyZuYnNwO29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjZ2V0SmF2YVByb2plY3RPdXRwdXREaXJlY3RvcnlQYXRoKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdCkiPmdldEphdmFQcm9qZWN0T3V0cHV0RGlyZWN0b3J5UGF0aDwvQT48L0I+KG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdCZuYnNwO2phdmFQcm9qZWN0KTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBpbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0gb2YgdGhlIGRlZmF1bHQgb3V0cHV0IGxvY2F0aW9uIGZvciB0aGUgZ2l2ZW4gamF2YSBwcm9qZWN0LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnN0YXRpYyZuYnNwO29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjZ2V0SmF2YVByb2plY3RPdXRwdXREaXJlY3RvcnlQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5nZXRKYXZhUHJvamVjdE91dHB1dERpcmVjdG9yeVBhdGg8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cHJvamVjdE5hbWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRoIGluIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSBvZiB0aGUgZGVmYXVsdCBvdXRwdXQgbG9jYXRpb24gZm9yIHRoZSBnaXZlbiBqYXZhIHByb2plY3QgbmFtZS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sI2dldEphdmFQcm9qZWN0U291cmNlRGlyZWN0b3J5UGF0aChvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QpIj5nZXRKYXZhUHJvamVjdFNvdXJjZURpcmVjdG9yeVBhdGg8L0E+PC9CPihvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QmbmJzcDtqYXZhUHJvamVjdCk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGZ1bGwsIGFic29sdXRlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHdvcmtzcGFjZSBvZiB0aGUgZmlyc3Qgc291cmNlIGZvbGRlciBmb3VuZCBpbiB0aGUgZ2l2ZW4gamF2YSBwcm9qZWN0LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnN0YXRpYyZuYnNwO29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjZ2V0SmF2YVByb2plY3RTb3VyY2VEaXJlY3RvcnlQYXRoKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlKSI+Z2V0SmF2YVByb2plY3RTb3VyY2VEaXJlY3RvcnlQYXRoPC9BPjwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUmbmJzcDt0eXBlKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZnVsbCwgYWJzb2x1dGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgd29ya3NwYWNlIG9mIHRoZSBzb3VyY2UgZm9sZGVyIHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIHR5cGUuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7b3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2UvanN0L3dzL2pheHdzL2NvcmUvdXRpbHMvSkRUVXRpbHMuaHRtbCNnZXRKYXZhUHJvamVjdFNvdXJjZURpcmVjdG9yeVBhdGgoamF2YS5sYW5nLlN0cmluZykiPmdldEphdmFQcm9qZWN0U291cmNlRGlyZWN0b3J5UGF0aDwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcm9qZWN0TmFtZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGZ1bGwsIGFic29sdXRlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHdvcmtzcGFjZSBvZiB0aGUgZmlyc3Qgc291cmNlIGZvbGRlciBmb3VuZCBpbiB0aGUgamF2YSBwcm9qZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7b3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZFtdPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2UvanN0L3dzL2pheHdzL2NvcmUvdXRpbHMvSkRUVXRpbHMuaHRtbCNnZXRQdWJsaWNNZXRob2RzKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlKSI+Z2V0UHVibGljTWV0aG9kczwvQT48L0I+KG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlJm5ic3A7dHlwZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0lmIHRoZSBnaXZlbiA8Y29kZT5JVHlwZTwvY29kZT4gaXMgYW4gaW50ZXJmYWNlIGFsbCBtZXRob2RzIGRlY2xhcmVkIGluIHRoYXQgaW50ZXJmYWNlIGFyZSByZXR1cm5lZC48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2UvanN0L3dzL2pheHdzL2NvcmUvdXRpbHMvSkRUVXRpbHMuaHRtbCNnZXRUYXJnZXROYW1lc3BhY2VGcm9tUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZykiPmdldFRhcmdldE5hbWVzcGFjZUZyb21QYWNrYWdlTmFtZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwYWNrYWdlTmFtZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSB0YXJnZXQgbmFtZXNwYWNlIHN0cmluZyBmcm9tIHRoZSBnaXZlbiBwYWNrYWdlIG5hbWUgYnkgc3BsaXR0aW5nIHRoZSBkb3QgJy4nIHNlcGFyYXRlZAogcGFja2FnZSBuYW1lLCByZXZlcnNpbmcgdGhlIG9yZGVyIG9mIHRoZSBwYWNrYWdlIG5hbWUgc2VnbWVudHMgZm9sbG93ZWQgYnkgcHJlZml4aW5nIHRoZSBzdHJpbmcgd2l0aAogJ2h0dHA6Ly8nIGFuZCBhcHBlbmRpbmcgYSBmb3J3YXJkIHNsYXNoICcvJyB0byB0aGUgZW5kLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnN0YXRpYyZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sI2lzSmF2YVByb2plY3Qob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj5pc0phdmFQcm9qZWN0PC9BPjwvQj4ob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QmbmJzcDtwcm9qZWN0KTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBwcm9qZWN0IGhhcyB0aGUgamF2YSBuYXR1cmUuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjaXNQdWJsaWNNZXRob2Qob3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCkiPmlzUHVibGljTWV0aG9kPC9BPjwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCZuYnNwO21ldGhvZCk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbWV0aG9kIGlzbid0IGEgbWFpbiBtZXRob2Qgb3IgY29uc3RydWN0b3IgYW5kIGlmIGl0IGhhcyB0aGUgcHVibGljIG1vZGlmaWVyLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnN0YXRpYyZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sI3JlbW92ZUZyb21DbGFzc3BhdGgob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0LCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnkpIj5yZW1vdmVGcm9tQ2xhc3NwYXRoPC9BPjwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0Jm5ic3A7amF2YVByb2plY3QsCiAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5Jm5ic3A7Y2xhc3NwYXRoRW50cnkpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZW1vdmUgYSA8Y29kZT5JQ2xhc3NwYXRoRW50cnk8L2NvZGU+IGZyb20gYSA8Y29kZT5JSmF2YVByb2plY3Q8L2NvZGU+PC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7b3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sI3ZhbGlkYXRlSWRlbnRpZmllcihqYXZhLmxhbmcuU3RyaW5nKSI+dmFsaWRhdGVJZGVudGlmaWVyPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2lkKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VmFsaWRhdGVzIHRoZSBnaXZlbiBKYXZhIGlkZW50aWZpZXIgd2l0aCB0aGUgd29ya3NwYWNlIHNvdXJjZSBhbmQgY29tcGxpYW5jZSBsZXZlbHMuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7b3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sI3ZhbGlkYXRlSmF2YVR5cGVOYW1lKGphdmEubGFuZy5TdHJpbmcpIj52YWxpZGF0ZUphdmFUeXBlTmFtZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VmFsaWRhdGVzIHRoZSBnaXZlbiBKYXZhIHR5cGUgbmFtZSwgZWl0aGVyIHNpbXBsZSBvciBxdWFsaWZpZWQsIHVzaW5nIHRoZSB3b3Jrc3BhY2Ugc291cmNlIGFuZCBjb21wbGlhbmNlIGxldmVscy48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjdmFsaWRhdGVKYXZhVHlwZU5hbWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPnZhbGlkYXRlSmF2YVR5cGVOYW1lPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3Byb2plY3ROYW1lLAogICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1ZhbGlkYXRlcyB0aGUgZ2l2ZW4gSmF2YSB0eXBlIG5hbWUsIGVpdGhlciBzaW1wbGUgb3IgcXVhbGlmaWVkLCB1c2luZyB0aGUgZ2l2ZW4gcHJvamVjdHMgc291cmNlIGFuZCBjb21wbGlhbmNlIGxldmVscy48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjdmFsaWRhdGVQYWNrYWdlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+dmFsaWRhdGVQYWNrYWdlTmFtZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcm9qZWN0TmFtZSwKICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cGFja2FnZU5hbWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtWYWxpZGF0ZSB0aGUgZ2l2ZW4gcGFja2FnZSBuYW1lIHVzaW5nIHRoZSBnaXZlbiBwcm9qZWN0cyBzb3VyY2UgYW5kIGNvbXBsaWFuY2UgbGV2ZWxzLjwvVEQ+CjwvVFI+CjwvVEFCTEU+CiZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+CjxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgo8VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLk9iamVjdDwvQj48L1RIPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREPjxDT0RFPmVxdWFscywgZ2V0Q2xhc3MsIGhhc2hDb2RlLCBub3RpZnksIG5vdGlmeUFsbCwgdG9TdHJpbmcsIHdhaXQsIHdhaXQsIHdhaXQ8L0NPREU+PC9URD4KPC9UUj4KPC9UQUJMRT4KJm5ic3A7CjxQPgoKPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgoKPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+CjxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgo8VEggQUxJR049ImxlZnQiIENPTFNQQU49IjEiPjxGT05UIFNJWkU9IisyIj4KPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9USD4KPC9UUj4KPC9UQUJMRT4KCjxBIE5BTUU9ImFkZFRvQ2xhc3NwYXRoKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdCwgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5KSI+PCEtLSAtLT48L0E+PEgzPgphZGRUb0NsYXNzcGF0aDwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgdm9pZCA8Qj5hZGRUb0NsYXNzcGF0aDwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0Jm5ic3A7amF2YVByb2plY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnkmbmJzcDtjbGFzc3BhdGhFbnRyeSk8L1BSRT4KPERMPgo8REQ+QWRkIGEgPGNvZGU+SUNsYXNzcGF0aEVudHJ5PC9jb2RlPiB0byBhIDxjb2RlPklKYXZhUHJvamVjdDwvY29kZT4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+amF2YVByb2plY3Q8L0NPREU+IC0gdGhlIDxjb2RlPklKYXZhUHJvamVjdDwvY29kZT4gdG8gYWRkIHRoZSBjbGFzc3BhdGggZW50cnkgdG88REQ+PENPREU+Y2xhc3NwYXRoRW50cnk8L0NPREU+IC0gdGhlIDxjb2RlPklDbGFzc3BhdGhFbnRyeTwvY29kZT4gdG8gYWRkPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0icmVtb3ZlRnJvbUNsYXNzcGF0aChvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QsIG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeSkiPjwhLS0gLS0+PC9BPjxIMz4KcmVtb3ZlRnJvbUNsYXNzcGF0aDwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgdm9pZCA8Qj5yZW1vdmVGcm9tQ2xhc3NwYXRoPC9CPihvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QmbmJzcDtqYXZhUHJvamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5Jm5ic3A7Y2xhc3NwYXRoRW50cnkpPC9QUkU+CjxETD4KPEREPlJlbW92ZSBhIDxjb2RlPklDbGFzc3BhdGhFbnRyeTwvY29kZT4gZnJvbSBhIDxjb2RlPklKYXZhUHJvamVjdDwvY29kZT4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+amF2YVByb2plY3Q8L0NPREU+IC0gdGhlIDxjb2RlPklKYXZhUHJvamVjdDwvY29kZT4gdG8gcmVtb3ZlIHRoZSBjbGFzc3BhdGggZW50cnkgZnJvbTxERD48Q09ERT5jbGFzc3BhdGhFbnRyeTwvQ09ERT4gLSB0aGUgPGNvZGU+SUNsYXNzcGF0aEVudHJ5PC9jb2RlPiB0byByZW1vdmU8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRKYXZhUHJvamVjdChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRKYXZhUHJvamVjdDwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0IDxCPmdldEphdmFQcm9qZWN0PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cHJvamVjdE5hbWUpPC9QUkU+CjxETD4KPEREPlJldHVybnMgdGhlIEphdmEgcHJvamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBwcm9qZWN0IG5hbWUuCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnByb2plY3ROYW1lPC9DT0RFPiAtIHRoZSBwcm9qZWN0IG5hbWUKPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgSmF2YSBwcm9qZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHByb2plY3QgbmFtZTwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldEphdmFQcm9qZWN0T3V0cHV0RGlyZWN0b3J5UGF0aChvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QpIj48IS0tIC0tPjwvQT48SDM+CmdldEphdmFQcm9qZWN0T3V0cHV0RGlyZWN0b3J5UGF0aDwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoIDxCPmdldEphdmFQcm9qZWN0T3V0cHV0RGlyZWN0b3J5UGF0aDwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0Jm5ic3A7amF2YVByb2plY3QpPC9QUkU+CjxETD4KPEREPlJldHVybnMgdGhlIGFic29sdXRlIHBhdGggaW4gdGhlIGxvY2FsIGZpbGUgc3lzdGVtIG9mIHRoZSBkZWZhdWx0IG91dHB1dCBsb2NhdGlvbiBmb3IgdGhlIGdpdmVuIGphdmEgcHJvamVjdC4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+amF2YVByb2plY3Q8L0NPREU+IC0gdGhlIGphdmEgcHJvamVjdAo8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBkZWZhdWx0IG91dHB1dCBmb2xkZXIgZm9yIHRoZSBnaXZlbiBqYXZhIHByb2plY3Q8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRKYXZhUHJvamVjdE91dHB1dERpcmVjdG9yeVBhdGgoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0SmF2YVByb2plY3RPdXRwdXREaXJlY3RvcnlQYXRoPC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGggPEI+Z2V0SmF2YVByb2plY3RPdXRwdXREaXJlY3RvcnlQYXRoPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cHJvamVjdE5hbWUpPC9QUkU+CjxETD4KPEREPlJldHVybnMgdGhlIGFic29sdXRlIHBhdGggaW4gdGhlIGxvY2FsIGZpbGUgc3lzdGVtIG9mIHRoZSBkZWZhdWx0IG91dHB1dCBsb2NhdGlvbiBmb3IgdGhlIGdpdmVuIGphdmEgcHJvamVjdCBuYW1lLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wcm9qZWN0TmFtZTwvQ09ERT4gLSB0aGUgbmFtZSBvZiB0aGUgamF2YSBwcm9qZWN0CjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGRlZmF1bHQgb3V0cHV0IGZvbGRlciBmb3IgdGhlIGdpdmVuIGphdmEgcHJvamVjdCBuYW1lPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0SmF2YVByb2plY3RTb3VyY2VEaXJlY3RvcnlQYXRoKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRKYXZhUHJvamVjdFNvdXJjZURpcmVjdG9yeVBhdGg8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aCA8Qj5nZXRKYXZhUHJvamVjdFNvdXJjZURpcmVjdG9yeVBhdGg8L0I+KG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlJm5ic3A7dHlwZSk8L1BSRT4KPERMPgo8REQ+UmV0dXJucyB0aGUgZnVsbCwgYWJzb2x1dGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgd29ya3NwYWNlIG9mIHRoZSBzb3VyY2UgZm9sZGVyIHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIHR5cGUuCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnR5cGU8L0NPREU+IC0gdGhlIDxjb2RlPklUeXBlPC9jb2RlPgo8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBnaXZlbiA8Y29kZT5JVHlwZTwvY29kZT4gc291cmNlIGZvbGRlcjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldEphdmFQcm9qZWN0U291cmNlRGlyZWN0b3J5UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRKYXZhUHJvamVjdFNvdXJjZURpcmVjdG9yeVBhdGg8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aCA8Qj5nZXRKYXZhUHJvamVjdFNvdXJjZURpcmVjdG9yeVBhdGg8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcm9qZWN0TmFtZSk8L1BSRT4KPERMPgo8REQ+UmV0dXJucyB0aGUgZnVsbCwgYWJzb2x1dGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgd29ya3NwYWNlIG9mIHRoZSBmaXJzdCBzb3VyY2UgZm9sZGVyIGZvdW5kIGluIHRoZSBqYXZhIHByb2plY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cHJvamVjdE5hbWU8L0NPREU+IC0gdGhlIG5hbWUgb2YgdGhlIGphdmEgcHJvamVjdAo8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaXJzdCBzb3VyY2UgZm9sZGVyIGZvdW5kIGluIHRoZSBqYXZhIHByb2plY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZS48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRKYXZhUHJvamVjdFNvdXJjZURpcmVjdG9yeVBhdGgob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0KSI+PCEtLSAtLT48L0E+PEgzPgpnZXRKYXZhUHJvamVjdFNvdXJjZURpcmVjdG9yeVBhdGg8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aCA8Qj5nZXRKYXZhUHJvamVjdFNvdXJjZURpcmVjdG9yeVBhdGg8L0I+KG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdCZuYnNwO2phdmFQcm9qZWN0KTwvUFJFPgo8REw+CjxERD5SZXR1cm5zIHRoZSBmdWxsLCBhYnNvbHV0ZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSB3b3Jrc3BhY2Ugb2YgdGhlIGZpcnN0IHNvdXJjZSBmb2xkZXIgZm91bmQgaW4gdGhlIGdpdmVuIGphdmEgcHJvamVjdC4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+amF2YVByb2plY3Q8L0NPREU+IC0gdGhlIDxjb2RlPklKYXZhUHJvamVjdDwvY29kZT4KPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlyc3Qgc291cmNlIGZvbGRlciBmb3VuZCBpbiB0aGUgZ2l2ZW4gamF2YSBwcm9qZWN0LjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldFB1YmxpY01ldGhvZHMob3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUpIj48IS0tIC0tPjwvQT48SDM+CmdldFB1YmxpY01ldGhvZHM8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2RbXSA8Qj5nZXRQdWJsaWNNZXRob2RzPC9CPihvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZSZuYnNwO3R5cGUpPC9QUkU+CjxETD4KPEREPklmIHRoZSBnaXZlbiA8Y29kZT5JVHlwZTwvY29kZT4gaXMgYW4gaW50ZXJmYWNlIGFsbCBtZXRob2RzIGRlY2xhcmVkIGluIHRoYXQgaW50ZXJmYWNlIGFyZSByZXR1cm5lZC4KIDxwPgogQWx0ZXJuYXRpdmVseSBpZiB0aGUgZ2l2ZW4gZ2l2ZW4gPGNvZGU+SVR5cGU8L2NvZGU+IGlzIGEgY2xhc3MsIG9ubHkgbWV0aG9kcyB0aGF0IGFyZSBleHBsaWNpdGx5IG1hcmtlZAogcHVibGljIGFyZSByZXR1cm5lZC4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dHlwZTwvQ09ERT4gLSB0aGUgPGNvZGU+SVR5cGU8L2NvZGU+CjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHB1YmxpYyBtZXRob2RzIGRlY2xhcmVkIGluIHRoaXMgdHlwZTwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldFRhcmdldE5hbWVzcGFjZUZyb21QYWNrYWdlTmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRUYXJnZXROYW1lc3BhY2VGcm9tUGFja2FnZU5hbWU8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgPEI+Z2V0VGFyZ2V0TmFtZXNwYWNlRnJvbVBhY2thZ2VOYW1lPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cGFja2FnZU5hbWUpPC9QUkU+CjxETD4KPEREPkNvbnN0cnVjdHMgYSB0YXJnZXQgbmFtZXNwYWNlIHN0cmluZyBmcm9tIHRoZSBnaXZlbiBwYWNrYWdlIG5hbWUgYnkgc3BsaXR0aW5nIHRoZSBkb3QgJy4nIHNlcGFyYXRlZAogcGFja2FnZSBuYW1lLCByZXZlcnNpbmcgdGhlIG9yZGVyIG9mIHRoZSBwYWNrYWdlIG5hbWUgc2VnbWVudHMgZm9sbG93ZWQgYnkgcHJlZml4aW5nIHRoZSBzdHJpbmcgd2l0aAogJ2h0dHA6Ly8nIGFuZCBhcHBlbmRpbmcgYSBmb3J3YXJkIHNsYXNoICcvJyB0byB0aGUgZW5kLgogPHA+RS5nLiwgdGhlIEphdmEgcGFja2FnZSDSY29tLmV4YW1wbGUud3PTIHdvdWxkIHJldHVybiB0aGUgdGFyZ2V0IG5hbWVzcGFjZSDSaHR0cDovL3dzLmV4YW1wbGUuY29tL9MuPC9wPgogPHA+SWYgdGhlIHBhY2thZ2UgbmFtZSBpcyBudWxsIG9yIGlzIG9mIHplcm8gbGVuZ3RoICAiaHR0cDovL2RlZmF1bHRfcGFja2FnZS8iIGlzIHJldHVybmVkLjwvcD4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cGFja2FnZU5hbWU8L0NPREU+IC0gdGhlIHBhY2thZ2UgbmFtZQo8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBkZXJpdmVkIHRhcmdldCBuYW1lc3BhY2U8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJmaW5kVHlwZShvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CmZpbmRUeXBlPC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZSA8Qj5maW5kVHlwZTwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0Jm5ic3A7amF2YVByb2plY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2Z1bGx5UXVhbGlmaWVkQ2xhc3NOYW1lKTwvUFJFPgo8REw+CjxERD5SZXR1cm5zIHRoZSBmaXJzdCB0eXBlIGZvdW5kIGZvbGxvd2luZyB0aGUgZ2l2ZW4gamF2YSBwcm9qZWN0J3MgY2xhc3NwYXRoIHdpdGggdGhlIGdpdmVuIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9yIG51bGwgaWYgbm9uZSBpcyBmb3VuZC4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+amF2YVByb2plY3Q8L0NPREU+IC0gdGhlIGdpdmVuIDxjb2RlPklKYXZhUHJvamVjdDwvY29kZT48REQ+PENPREU+ZnVsbHlRdWFsaWZpZWRDbGFzc05hbWU8L0NPREU+IC0gdGhlIGdpdmVuIGZ1bGx5IHF1YWxpZmllZCBuYW1lCjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGZpcnN0IHR5cGUgZm91bmQgZm9sbG93aW5nIHRoZSBqYXZhIHByb2plY3QncyBjbGFzc3BhdGggd2l0aCB0aGUgZ2l2ZW4gZnVsbHkgcXVhbGlmaWVkIG5hbWUgb3IgbnVsbCBpZiBub25lIGlzIGZvdW5kPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZmluZFR5cGUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KZmluZFR5cGU8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlIDxCPmZpbmRUeXBlPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cHJvamVjdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2Z1bGx5UXVhbGlmaWVkQ2xhc3NOYW1lKTwvUFJFPgo8REw+CjxERD5SZXR1cm5zIHRoZSBmaXJzdCB0eXBlIGZvdW5kIHdpdGggdGhlIGdpdmVuIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGZvbGxvd2luZyB0aGUgY2xhc3NwYXRoIG9mIHRoZSBqYXZhIHByb2plY3Qgd2l0aAogdGhlIGdpdmUgcHJvamVjdCBuYW1lIG9yIG51bGwgaWYgbm9uZSBpcyBmb3VuZC4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cHJvamVjdE5hbWU8L0NPREU+IC0gdGhlIG5hbWUgb2YgdGhlIGphdmEgcHJvamVjdDxERD48Q09ERT5mdWxseVF1YWxpZmllZENsYXNzTmFtZTwvQ09ERT4gLSB0aGUgZ2l2ZW4gZnVsbHkgcXVhbGlmaWVkIG5hbWUKPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgZmlyc3QgdHlwZSBmb3VuZCBmb2xsb3dpbmcgdGhlIGphdmEgcHJvamVjdCdzIGNsYXNzcGF0aCB3aXRoIHRoZSBnaXZlbiBmdWxseSBxdWFsaWZpZWQgbmFtZSBvciBudWxsIGlmIG5vbmUgaXMgZm91bmQ8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJpc0phdmFQcm9qZWN0KG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0KSI+PCEtLSAtLT48L0E+PEgzPgppc0phdmFQcm9qZWN0PC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyBib29sZWFuIDxCPmlzSmF2YVByb2plY3Q8L0I+KG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Jm5ic3A7cHJvamVjdCk8L1BSRT4KPERMPgo8REQ+UmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBwcm9qZWN0IGhhcyB0aGUgamF2YSBuYXR1cmUuCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnByb2plY3Q8L0NPREU+IC0gdGhlIGdpdmVuIHByb2plY3QKPERUPjxCPlJldHVybnM6PC9CPjxERD48Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcHJvamVjdCBoYXMgdGhlIGphdmEgbmF0dXJlPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iaXNQdWJsaWNNZXRob2Qob3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCkiPjwhLS0gLS0+PC9BPjxIMz4KaXNQdWJsaWNNZXRob2Q8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIGJvb2xlYW4gPEI+aXNQdWJsaWNNZXRob2Q8L0I+KG9yZy5lY2xpcHNlLmpkdC5jb3JlLklNZXRob2QmbmJzcDttZXRob2QpPC9QUkU+CjxETD4KPEREPlJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbWV0aG9kIGlzbid0IGEgbWFpbiBtZXRob2Qgb3IgY29uc3RydWN0b3IgYW5kIGlmIGl0IGhhcyB0aGUgcHVibGljIG1vZGlmaWVyLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5tZXRob2Q8L0NPREU+IC0gdGhlIGdpdmVuIG1ldGhvZAo8RFQ+PEI+UmV0dXJuczo8L0I+PEREPjxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBnaXZlbiBtZXRob2QgaXMgcHVibGljPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0idmFsaWRhdGVKYXZhVHlwZU5hbWUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KdmFsaWRhdGVKYXZhVHlwZU5hbWU8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzIDxCPnZhbGlkYXRlSmF2YVR5cGVOYW1lPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZSk8L1BSRT4KPERMPgo8REQ+VmFsaWRhdGVzIHRoZSBnaXZlbiBKYXZhIHR5cGUgbmFtZSwgZWl0aGVyIHNpbXBsZSBvciBxdWFsaWZpZWQsIHVzaW5nIHRoZSB3b3Jrc3BhY2Ugc291cmNlIGFuZCBjb21wbGlhbmNlIGxldmVscy4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bmFtZTwvQ09ERT4gLSB0aGUgbmFtZSBvZiBhIHR5cGUKPERUPjxCPlJldHVybnM6PC9CPjxERD5hIHN0YXR1cyBvYmplY3Qgd2l0aCBjb2RlIElTdGF0dXMuT0sgaWYgdGhlIGdpdmVuIG5hbWUgaXMgdmFsaWQgYXMgYSBKYXZhIHR5cGUgbmFtZSwgYSBzdGF0dXMgd2l0aAogY29kZSBJU3RhdHVzLldBUk5JTkcgaW5kaWNhdGluZyB3aHkgdGhlIGdpdmVuIG5hbWUgaXMgZGlzY291cmFnZWQsIG90aGVyd2lzZSBhIHN0YXR1cyBvYmplY3QgaW5kaWNhdGluZyB3aGF0IGlzIHdyb25nIHdpdGggdGhlIG5hbWU8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJ2YWxpZGF0ZUphdmFUeXBlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgp2YWxpZGF0ZUphdmFUeXBlTmFtZTwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMgPEI+dmFsaWRhdGVKYXZhVHlwZU5hbWU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcm9qZWN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZSk8L1BSRT4KPERMPgo8REQ+VmFsaWRhdGVzIHRoZSBnaXZlbiBKYXZhIHR5cGUgbmFtZSwgZWl0aGVyIHNpbXBsZSBvciBxdWFsaWZpZWQsIHVzaW5nIHRoZSBnaXZlbiBwcm9qZWN0cyBzb3VyY2UgYW5kIGNvbXBsaWFuY2UgbGV2ZWxzLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wcm9qZWN0TmFtZTwvQ09ERT4gLSB0aGUgbmFtZSBvZiB0aGUgamF2YSBwcm9qZWN0PEREPjxDT0RFPm5hbWU8L0NPREU+IC0gdGhlIG5hbWUgb2YgYSB0eXBlCjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBzdGF0dXMgb2JqZWN0IHdpdGggY29kZSBJU3RhdHVzLk9LIGlmIHRoZSBnaXZlbiBuYW1lIGlzIHZhbGlkIGFzIGEgSmF2YSB0eXBlIG5hbWUsIGEgc3RhdHVzIHdpdGgKIGNvZGUgSVN0YXR1cy5XQVJOSU5HIGluZGljYXRpbmcgd2h5IHRoZSBnaXZlbiBuYW1lIGlzIGRpc2NvdXJhZ2VkLCBvdGhlcndpc2UgYSBzdGF0dXMgb2JqZWN0IGluZGljYXRpbmcgd2hhdCBpcyB3cm9uZyB3aXRoIHRoZSBuYW1lPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0idmFsaWRhdGVQYWNrYWdlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgp2YWxpZGF0ZVBhY2thZ2VOYW1lPC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyA8Qj52YWxpZGF0ZVBhY2thZ2VOYW1lPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cHJvamVjdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cGFja2FnZU5hbWUpPC9QUkU+CjxETD4KPEREPlZhbGlkYXRlIHRoZSBnaXZlbiBwYWNrYWdlIG5hbWUgdXNpbmcgdGhlIGdpdmVuIHByb2plY3RzIHNvdXJjZSBhbmQgY29tcGxpYW5jZSBsZXZlbHMuCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnByb2plY3ROYW1lPC9DT0RFPiAtIHRoZSBuYW1lIG9mIHRoZSBqYXZhIHByb2plY3Q8REQ+PENPREU+cGFja2FnZU5hbWU8L0NPREU+IC0gdGhlIG5hbWUgb2YgYSBwYWNrYWdlCjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBzdGF0dXMgb2JqZWN0IHdpdGggY29kZSBJU3RhdHVzLk9LIGlmIHRoZSBnaXZlbiBuYW1lIGlzIHZhbGlkIGFzIGEgcGFja2FnZSBuYW1lLCBvdGhlcndpc2UgYSBzdGF0dXMKIG9iamVjdCBpbmRpY2F0aW5nIHdoYXQgaXMgd3Jvbmcgd2l0aCB0aGUgbmFtZTwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9InZhbGlkYXRlSWRlbnRpZmllcihqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgp2YWxpZGF0ZUlkZW50aWZpZXI8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzIDxCPnZhbGlkYXRlSWRlbnRpZmllcjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2lkKTwvUFJFPgo8REw+CjxERD5WYWxpZGF0ZXMgdGhlIGdpdmVuIEphdmEgaWRlbnRpZmllciB3aXRoIHRoZSB3b3Jrc3BhY2Ugc291cmNlIGFuZCBjb21wbGlhbmNlIGxldmVscy4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aWQ8L0NPREU+IC0gdGhlIEphdmEgaWRlbnRpZmllcgo8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgc3RhdHVzIG9iamVjdCB3aXRoIGNvZGUgSVN0YXR1cy5PSyBpZiB0aGUgZ2l2ZW4gaWRlbnRpZmllciBpcyBhIHZhbGlkIEphdmEgaWRlbnRpZmllciwgb3RoZXJ3aXNlCiBhIHN0YXR1cyBvYmplY3QgaW5kaWNhdGluZyB3aGF0IGlzIHdyb25nIHdpdGggdGhlIGlkZW50aWZpZXI8L0RMPgo8L0REPgo8L0RMPgo8IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+CjxIUj4KCgo8IS0tID09PT09PT0gU1RBUlQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT0gLS0+CjxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgo8QSBIUkVGPSIjc2tpcC1uYXZiYXJfYm90dG9tIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+CjxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+CjxUUj4KPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgo8QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgogIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSkRUVXRpbHMuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPC9UUj4KPC9UQUJMRT4KPC9URD4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+CjwvRU0+CjwvVEQ+CjwvVFI+Cgo8VFI+CjxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+CiZuYnNwO1BSRVYgQ0xBU1MmbmJzcDsKJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2UvanN0L3dzL2pheHdzL2NvcmUvdXRpbHMvV1NETFV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuamF4d3MuY29yZS51dGlscyI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+CjxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+CiAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKJm5ic3A7PEEgSFJFRj0iSkRUVXRpbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7CiZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICA8IS0tCiAgaWYod2luZG93PT10b3ApIHsKICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7CiAgfQogIC8vLS0+CjwvU0NSSVBUPgo8Tk9TQ1JJUFQ+CiAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KPC9OT1NDUklQVD4KCgo8L0ZPTlQ+PC9URD4KPC9UUj4KPFRSPgo8VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgogIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgo8L1RSPgo8L1RBQkxFPgo8QSBOQU1FPSJza2lwLW5hdmJhcl9ib3R0b20iPjwvQT4KPCEtLSA9PT09PT09PSBFTkQgT0YgQk9UVE9NIE5BVkJBUiA9PT09PT09IC0tPgoKPEhSPgoKPC9CT0RZPgo8L0hUTUw+Cg==