PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PHRpdGxlPkIuMi6gU291cmNlcnkgRysrIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50PC90aXRsZT48bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzLmNzcyIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCI+PGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iU291cmNlcnkgRysrIExpdGUiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImNoYXAtbGljZW5zZS5odG1sIiB0aXRsZT0iQXBwZW5kaXigQi6gU291cmNlcnkgRysrIExpdGUgTGljZW5zZXMiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2hhcC1saWNlbnNlLmh0bWwiIHRpdGxlPSJBcHBlbmRpeKBCLqBTb3VyY2VyeSBHKysgTGl0ZSBMaWNlbnNlcyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhcGJzMDMuaHRtbCIgdGl0bGU9IkIuMy6gQXR0cmlidXRpb24iPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ibmF2aGVhZGVyIj48dGFibGUgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIj48dHI+PHRoIGNvbHNwYW49IjMiIGFsaWduPSJjZW50ZXIiPkIuMi6gU291cmNlcnkgRysrIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50PC90aD48L3RyPjx0cj48dGQgd2lkdGg9IjIwJSIgYWxpZ249ImxlZnQiPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iY2hhcC1saWNlbnNlLmh0bWwiPlByZXY8L2E+oDwvdGQ+PHRoIHdpZHRoPSI2MCUiIGFsaWduPSJjZW50ZXIiPkFwcGVuZGl4oEIuoFNvdXJjZXJ5IEcrKyBMaXRlIExpY2Vuc2VzPC90aD48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJhcGJzMDMuaHRtbCI+TmV4dDwvYT48L3RkPjwvdHI+PC90YWJsZT48aHI+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0ic2VjLWV2YWwtYWdyZWVtZW50Ij48L2E+Qi4yLqA8c3BhbiBjbGFzcz0idHJhZGVtYXJrIj5Tb3VyY2VyeSBHKys8L3NwYW4+JiM4NDgyOyBTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj48bGk+PHA+PGI+UGFydGllcy6gPC9iPgogICAgICAgICAgVGhlIHBhcnRpZXMgdG8gdGhpcyBBZ3JlZW1lbnQgYXJlIHlvdSwgdGhlIGxpY2Vuc2VlCiAgICAgICAgICAoJiM4MjIwOzxzcGFuIGNsYXNzPSJxdW90ZSI+WW91PC9zcGFuPiYjODIyMTsgb3IgJiM4MjIwOzxzcGFuIGNsYXNzPSJxdW90ZSI+TGljZW5zZWU8L3NwYW4+JiM4MjIxOykKICAgICAgICAgIGFuZCBDb2RlU291cmNlcnkuICBJZiBZb3UgYXJlIG5vdCBhY3Rpbmcgb24gYmVoYWxmIG9mIFlvdXJzZWxmIGFzIGFuCiAgICAgICAgICBpbmRpdmlkdWFsLCB0aGVuICYjODIyMDs8c3BhbiBjbGFzcz0icXVvdGUiPllvdTwvc3Bhbj4mIzgyMjE7IG1lYW5zIFlvdXIgY29tcGFueSBvciBvcmdhbml6YXRpb24uCiAgICAgICAgPC9wPjwvbGk+PGxpPjxwPjxiPlRoZSBTb2Z0d2FyZS6gPC9iPgogICAgVGhlIFNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGNvbnNpc3RzIG9mCiAgICBjb21wdXRlciBwcm9ncmFtcyBhbmQgZG9jdW1lbnRhdGlvbiByZWZlcnJlZCB0byBhcyA8c3BhbiBjbGFzcz0idHJhZGVtYXJrIj5Tb3VyY2VyeSBHKys8L3NwYW4+JiM4NDgyOyBMaXRlIEVkaXRpb24KICAgICh0aGUgJiM4MjIwOzxzcGFuIGNsYXNzPSJxdW90ZSI+U29mdHdhcmU8L3NwYW4+JiM4MjIxOykuCiAgPC9wPjwvbGk+PGxpPjxwPjxiPkRlZmluaXRpb25zLqA8L2I+PC9wPjxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj48Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PHRib2R5Pjx0cj48dGQ+My4xLjwvdGQ+PHRkPjxwPjxiPkNvZGVTb3VyY2VyeSBQcm9wcmlldGFyeSBDb21wb25lbnRzLqA8L2I+CgkgIFRoZSBjb21wb25lbnRzIG9mIHRoZSBTb2Z0d2FyZSB0aGF0IGFyZSBvd25lZCBhbmQvb3IgbGljZW5zZWQKCSAgYnkgQ29kZVNvdXJjZXJ5IGFuZCBhcmUgbm90IHN1YmplY3QgdG8gYSAmIzgyMjA7PHNwYW4gY2xhc3M9InF1b3RlIj5mcmVlIHNvZnR3YXJlPC9zcGFuPiYjODIyMTsgb3IKCSAgJiM4MjIwOzxzcGFuIGNsYXNzPSJxdW90ZSI+b3BlbiBzb3VyY2U8L3NwYW4+JiM4MjIxOyBsaWNlbnNlLCBzdWNoIGFzIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuICBUaGUKCSAgQ29kZVNvdXJjZXJ5IFByb3ByaWV0YXJ5IENvbXBvbmVudHMgb2YgdGhlIFNvZnR3YXJlIGluY2x1ZGUsCgkgIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIFNvdXJjZXJ5IEcrKyBJbnN0YWxsZXIsIGFueSBTb3VyY2VyeQoJICBHKysgRWNsaXBzZSBwbHVnLWlucywgdGhlIENvZGVTb3VyY2VyeSBDIExpYnJhcnkgKENTTElCQyksCgkgIGFuZCBhbnkgU291cmNlcnkgRysrIERlYnVnIFNwcml0ZS4gIEZvcgoJICBhIGNvbXBsZXRlIGxpc3QsIHJlZmVyIHRvIHRoZSA8ZW0gY2xhc3M9ImNpdGV0aXRsZSI+R2V0dGluZyBTdGFydGVkCgkgIEd1aWRlPC9lbT4gaW5jbHVkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgoJIDwvcD48L3RkPjwvdHI+PHRyPjx0ZD4zLjIuPC90ZD48dGQ+PHA+PGI+T3BlbiBTb3VyY2UgU29mdHdhcmUgQ29tcG9uZW50cy6gPC9iPgoJICBUaGUgY29tcG9uZW50cyBvZiB0aGUgU29mdHdhcmUgdGhhdCBhcmUgc3ViamVjdCB0bwoJICBhICYjODIyMDs8c3BhbiBjbGFzcz0icXVvdGUiPmZyZWUgc29mdHdhcmU8L3NwYW4+JiM4MjIxOyBvciAmIzgyMjA7PHNwYW4gY2xhc3M9InF1b3RlIj5vcGVuIHNvdXJjZTwvc3Bhbj4mIzgyMjE7CgkgIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KCSA8L3A+PC90ZD48L3RyPjx0cj48dGQ+My4zLjwvdGQ+PHRkPjxwPjxiPlByb3ByaWV0YXJ5IFJpZ2h0cy6gPC9iPgoJICBBbGwgcmlnaHRzIGluIGFuZCB0byBjb3B5cmlnaHRzLCByaWdodHMgdG8gcmVnaXN0ZXIKCSAgY29weXJpZ2h0cywgdHJhZGUgc2VjcmV0cywgaW52ZW50aW9ucywgcGF0ZW50cywgcGF0ZW50CgkgIHJpZ2h0cywgdHJhZGVtYXJrcywgdHJhZGVtYXJrIHJpZ2h0cywgY29uZmlkZW50aWFsIGFuZAoJICBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbiBwcm90ZWN0ZWQgdW5kZXIgY29udHJhY3Qgb3Igb3RoZXJ3aXNlCgkgIHVuZGVyIGxhdywgYW5kIG90aGVyIHNpbWlsYXIgcmlnaHRzIG9yIGludGVyZXN0cyBpbgoJICBpbnRlbGxlY3R1YWwgb3IgaW5kdXN0cmlhbCBwcm9wZXJ0eS4KCSA8L3A+PC90ZD48L3RyPjx0cj48dGQ+My40LjwvdGQ+PHRkPjxwPjxiPlJlZGlzdHJpYnV0YWJsZSBDb21wb25lbnRzLqA8L2I+CiAgICAgICAgICBUaGUgQ29kZVNvdXJjZXJ5IFByb3ByaWV0YXJ5IENvbXBvbmVudHMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUKCSAgaW5jb3Jwb3JhdGVkIG9yIGxpbmtlZCBpbnRvIExpY2Vuc2VlIG9iamVjdCBjb2RlIGRldmVsb3BlZCB3aXRoCgkgIHRoZSBTb2Z0d2FyZS4KCSAgVGhlIFJlZGlzdHJpYnV0YWJsZSBDb21wb25lbnRzIG9mIHRoZSBTb2Z0d2FyZSBpbmNsdWRlLAoJICB3aXRob3V0IGxpbWl0YXRpb24sIENTTElCQyBhbmQgdGhlCgkgIENvZGVTb3VyY2VyeSBDb21tb24gU3RhcnR1cCBDb2RlIFNlcXVlbmNlIChDUzMpLgoJICBGb3IgYSBjb21wbGV0ZSBsaXN0LCByZWZlciB0byB0aGUKCSAgPGVtIGNsYXNzPSJjaXRldGl0bGUiPkdldHRpbmcgU3RhcnRlZCBHdWlkZTwvZW0+CgkgIGluY2x1ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KCSA8L3A+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48L2xpPjxsaT48cD48Yj5MaWNlbnNlIEdyYW50IHRvIFByb3ByaWV0YXJ5IENvbXBvbmVudHMgb2YgdGhlIFNvZnR3YXJlLqA8L2I+CiAgICBZb3UgYXJlIGdyYW50ZWQgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUgbGljZW5zZQogICAgKGEpIHRvIGluc3RhbGwgYW5kIHVzZSB0aGUgQ29kZVNvdXJjZXJ5IFByb3ByaWV0YXJ5IENvbXBvbmVudHMgb2YgdGhlCiAgICBTb2Z0d2FyZSwKICAgIChiKSB0byB0cmFuc21pdCB0aGUgQ29kZVNvdXJjZXJ5IFByb3ByaWV0YXJ5IENvbXBvbmVudHMKICAgIG92ZXIgYW4gaW50ZXJuYWwgY29tcHV0ZXIgbmV0d29yaywKICAgIChjKSB0byBjb3B5IHRoZSBDb2RlU291cmNlcnkgUHJvcHJpZXRhcnkgQ29tcG9uZW50cyBmb3IgWW91ciBpbnRlcm5hbCB1c2UKICAgIG9ubHksIGFuZAogICAgKGQpIHRvIGRpc3RyaWJ1dGUgdGhlIFJlZGlzdHJpYnV0YWJsZSBDb21wb25lbnQocykgaW4gYmluYXJ5IGZvcm0gb25seQogICAgYW5kIG9ubHkgYXMgcGFydCBvZiBMaWNlbnNlZSBvYmplY3QgY29kZSBkZXZlbG9wZWQgd2l0aCB0aGUgU29mdHdhcmUKICAgIHRoYXQgcHJvdmlkZXMgc3Vic3RhbnRpYWxseSBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eSB0aGFuIHRoZQogICAgUmVkaXN0cmlidXRhYmxlIENvbXBvbmVudChzKS4KICA8L3A+PC9saT48bGk+PHA+PGI+UmVzdHJpY3Rpb25zLqA8L2I+CiAgICAgICAgICBZb3UgbWF5IG5vdDogKGkpIGNvcHkgb3IgcGVybWl0IG90aGVycyB0byB1c2UgdGhlCgkgIENvZGVTb3VyY2VyeSBQcm9wcmlldGFyeSBDb21wb25lbnRzIG9mIHRoZSBTb2Z0d2FyZSwgZXhjZXB0CgkgIGFzIGV4cHJlc3NseSBwcm92aWRlZCBhYm92ZTsgKGlpKSBkaXN0cmlidXRlIHRoZQoJICBDb2RlU291cmNlcnkgUHJvcHJpZXRhcnkgQ29tcG9uZW50cyBvZiB0aGUgU29mdHdhcmUgdG8gYW55CgkgIHRoaXJkIHBhcnR5LCBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGFib3ZlOwogICAgICAgICAgb3IgKGlpaSkgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBvcgoJICBkaXNhc3NlbWJsZSB0aGUgQ29kZVNvdXJjZXJ5IFByb3ByaWV0YXJ5IENvbXBvbmVudHMgb2YgdGhlIFNvZnR3YXJlLAoJICBleGNlcHQgdG8gdGhlIGV4dGVudCB0aGlzIHJlc3RyaWN0aW9uIGlzIGV4cHJlc3NseQoJICBwcm9oaWJpdGVkIGJ5IGFwcGxpY2FibGUgbGF3LgogICAgICAgIDwvcD48ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+PGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjx0Ym9keT48dHI+PHRkPjUuMS48L3RkPjx0ZD48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjwvbGk+PGxpPjxwPjxiPiYjODIyMDs8c3BhbiBjbGFzcz0icXVvdGUiPkZyZWUgU29mdHdhcmU8L3NwYW4+JiM4MjIxOyBvciAmIzgyMjA7PHNwYW4gY2xhc3M9InF1b3RlIj5PcGVuIFNvdXJjZTwvc3Bhbj4mIzgyMjE7CiAgICAgIExpY2Vuc2UgdG8gQ2VydGFpbiBDb21wb25lbnRzIG9mIHRoZSBTb2Z0d2FyZS6gPC9iPgogICAgICAgVGhpcyBBZ3JlZW1lbnQgZG9lcyBub3QgbGltaXQgWW91ciByaWdodHMgdW5kZXIsIG9yIGdyYW50IFlvdQogICAgICAgcmlnaHRzIHRoYXQgc3VwZXJzZWRlLCB0aGUgbGljZW5zZSB0ZXJtcyBvZiBhbnkgT3BlbiBTb3VyY2UKICAgICAgIFNvZnR3YXJlIENvbXBvbmVudCBkZWxpdmVyZWQgdG8gWW91IGJ5IENvZGVTb3VyY2VyeS4gIFNvdXJjZXJ5CiAgICAgICBHKysgaW5jbHVkZXMgY29tcG9uZW50cyBwcm92aWRlZCB1bmRlciB2YXJpb3VzIGRpZmZlcmVudAogICAgICAgbGljZW5zZXMuICBUaGUgPGVtIGNsYXNzPSJjaXRldGl0bGUiPkdldHRpbmcgU3RhcnRlZCBHdWlkZTwvZW0+CiAgICAgICBwcm92aWRlcyBhbiBvdmVydmlldyBvZiB3aGljaCBsaWNlbnNlIGFwcGxpZXMgdG8gZGlmZmVyZW50CiAgICAgICBjb21wb25lbnRzLCBhbmQsIGZvciBjb21wb25lbnRzIHN1YmplY3QgdG8gdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsCiAgICAgICBjb250YWlucyBpbmZvcm1hdGlvbiBvbiBob3cgdG8gb2J0YWluIHRoZSBzb3VyY2UgY29kZS4KICAgICAgIERlZmluaXRpdmUgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciBlYWNoCiAgICAgICAmIzgyMjA7PHNwYW4gY2xhc3M9InF1b3RlIj5mcmVlIHNvZnR3YXJlPC9zcGFuPiYjODIyMTsgb3IgJiM4MjIwOzxzcGFuIGNsYXNzPSJxdW90ZSI+b3BlbiBzb3VyY2U8L3NwYW4+JiM4MjIxOwogICAgICAgY29tcG9uZW50IGlzIGF2YWlsYWJsZSBpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGUuCiAgICAgIDwvcD48L2xpPjxsaT48cD48Yj5Db2RlU291cmNlcnkgVHJhZGVtYXJrcy6gPC9iPgogICAgICAgICAgTm90d2l0aHN0YW5kaW5nIGFueSBwcm92aXNpb24gaW4gYSAmIzgyMjA7PHNwYW4gY2xhc3M9InF1b3RlIj5mcmVlIHNvZnR3YXJlPC9zcGFuPiYjODIyMTsgb3IgJiM4MjIwOzxzcGFuIGNsYXNzPSJxdW90ZSI+b3BlbgogICAgICAgICAgc291cmNlPC9zcGFuPiYjODIyMTsgbGljZW5zZSBhZ3JlZW1lbnQgYXBwbGljYWJsZSB0byBhIGNvbXBvbmVudCBvZiB0aGUKICAgICAgICAgIFNvZnR3YXJlIHRoYXQgcGVybWl0cyBZb3UgdG8gZGlzdHJpYnV0ZSBzdWNoIGNvbXBvbmVudCB0byBhCiAgICAgICAgICB0aGlyZCBwYXJ0eSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0sIFlvdSBtYXkgbm90IHVzZSBhbnkKICAgICAgICAgIENvZGVTb3VyY2VyeSB0cmFkZW1hcmssIHdoZXRoZXIgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQsCiAgICAgICAgICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCA8c3BhbiBjbGFzcz0idHJhZGVtYXJrIj5Db2RlU291cmNlcnk8L3NwYW4+JiM4NDgyOywgPHNwYW4gY2xhc3M9InRyYWRlbWFyayI+U291cmNlcnkgRysrPC9zcGFuPiYjODQ4MjssIHRoZSBDb2RlU291cmNlcnkKICAgICAgICAgIGNyeXN0YWwgYmFsbCBsb2dvLCBvciB0aGUgU291cmNlcnkgRysrIHNwbGFzaCBzY3JlZW4sIG9yIGFueQogICAgICAgICAgY29uZnVzaW5nbHkgc2ltaWxhciBtYXJrLCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaAogICAgICAgICAgZGlzdHJpYnV0aW9uLCBhbmQgWW91IG1heSBub3QgcmVjb21waWxlIHRoZSBPcGVuIFNvdXJjZQogICAgICAgICAgU29mdHdhcmUgQ29tcG9uZW50cyB3aXRoIHRoZQogICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS13aXRoLXBrZ3ZlcnNpb248L2NvZGU+IG9yCiAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXdpdGgtYnVndXJsPC9jb2RlPiBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdAogICAgICAgICAgZW1iZWQgQ29kZVNvdXJjZXJ5IHRyYWRlbWFya3MgaW4gdGhlIHJlc3VsdGluZyBiaW5hcnkuIAogICAgICAgIDwvcD48L2xpPjxsaT48cD48Yj5UZXJtIGFuZCBUZXJtaW5hdGlvbi6gPC9iPgogICBUaGlzIEFncmVlbWVudCBzaGFsbCByZW1haW4gaW4gZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIHB1cnN1YW50IHRvCiAgIHRoaXMgcHJvdmlzaW9uLiAgQ29kZVNvdXJjZXJ5IG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgdXBvbgogICBzZXZlbiAoNykgZGF5cyB3cml0dGVuIG5vdGljZSBvZiBhIG1hdGVyaWFsIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudAogICBpZiBzdWNoIGJyZWFjaCBpcyBub3QgY3VyZWQ7IHByb3ZpZGVkIHRoYXQgdGhlIHVuYXV0aG9yaXplZCB1c2UsCiAgIGNvcHlpbmcsIG9yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQ29kZVNvdXJjZXJ5IFByb3ByaWV0YXJ5IENvbXBvbmVudHMKICAgb2YgdGhlIFNvZnR3YXJlIHdpbGwgYmUgZGVlbWVkIGEgbWF0ZXJpYWwgYnJlYWNoIHRoYXQgY2Fubm90IGJlCiAgIGN1cmVkLgogIDwvcD48L2xpPjxsaT48cD48Yj5UcmFuc2ZlcnMuoDwvYj4KICAgICAgICAgIFlvdSBtYXkgbm90IHRyYW5zZmVyIGFueSByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgd2l0aG91dCB0aGUKICAgICAgICAgIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDb2RlU291cmNlcnksIHdoaWNoIGNvbnNlbnQgc2hhbGwgbm90IGJlCiAgICAgICAgICB1bnJlYXNvbmFibHkgd2l0aGhlbGQuICBBIGNvbmRpdGlvbiB0byBhbnkgdHJhbnNmZXIgb3IgYXNzaWdubWVudAogICAgICAgICAgc2hhbGwgYmUgdGhhdCB0aGUgcmVjaXBpZW50IGFncmVlcyB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCiAgICAgICAgICBBbnkgYXR0ZW1wdGVkIHRyYW5zZmVyIG9yIGFzc2lnbm1lbnQgaW4gdmlvbGF0aW9uIG9mIHRoaXMgcHJvdmlzaW9uCiAgICAgICAgICBzaGFsbCBiZSBudWxsIGFuZCB2b2lkLgogICAgICAgIDwvcD48L2xpPjxsaT48cD48Yj5Pd25lcnNoaXAuoDwvYj4KICAgICAgICAgIENvZGVTb3VyY2VyeSBvd25zIGFuZC9vciBoYXMgbGljZW5zZWQgdGhlIENvZGVTb3VyY2VyeQogICAgICAgICAgUHJvcHJpZXRhcnkgQ29tcG9uZW50cyBvZiB0aGUgU29mdHdhcmUgYW5kIGFsbCBpbnRlbGxlY3R1YWwKICAgICAgICAgIHByb3BlcnR5IHJpZ2h0cyBlbWJvZGllZCB0aGVyZWluLCBpbmNsdWRpbmcgY29weXJpZ2h0cyBhbmQKICAgICAgICAgIHZhbHVhYmxlIHRyYWRlIHNlY3JldHMgZW1ib2RpZWQgaW4gaXRzIGRlc2lnbiBhbmQgY29kaW5nCiAgICAgICAgICBtZXRob2RvbG9neS4gIFRoZSBDb2RlU291cmNlcnkgUHJvcHJpZXRhcnkgQ29tcG9uZW50cyBvZiB0aGUKICAgICAgICAgIFNvZnR3YXJlIGFyZSBwcm90ZWN0ZWQgYnkgVW5pdGVkIFN0YXRlcyBjb3B5cmlnaHQgbGF3cyBhbmQKICAgICAgICAgIGludGVybmF0aW9uYWwgdHJlYXR5IHByb3Zpc2lvbnMuICBDb2RlU291cmNlcnkgYWxzbyBvd25zIGFsbAogICAgICAgICAgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHdpdGggcmVzcGVjdCB0byBpdHMgdHJhZGUKICAgICAgICAgIG5hbWVzLCBkb21haW4gbmFtZXMsIHRyYWRlIGRyZXNzLCBsb2dvcywgdHJhZGVtYXJrcywgc2VydmljZQogICAgICAgICAgbWFya3MsIGFuZCBvdGhlciBzaW1pbGFyIHJpZ2h0cyBvciBpbnRlcmVzdHMgaW4gaW50ZWxsZWN0dWFsCiAgICAgICAgICBwcm9wZXJ0eS4gIFRoaXMgQWdyZWVtZW50IHByb3ZpZGVzIFlvdSBvbmx5IGEgbGltaXRlZCB1c2UKICAgICAgICAgIGxpY2Vuc2UsIGFuZCBubyBvd25lcnNoaXAgb2YgYW55IGludGVsbGVjdHVhbCBwcm9wZXJ0eS4KICAgICAgICA8L3A+PC9saT48bGk+PHA+PGI+V2FycmFudHkgRGlzY2xhaW1lcjsgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuoDwvYj4KICAgICAgICAgIENPREVTT1VSQ0VSWSBBTkQgSVRTIExJQ0VOU09SUyBQUk9WSURFIFRIRQogICAgICAgICAgU09GVFdBUkUgJiM4MjIwOzxzcGFuIGNsYXNzPSJxdW90ZSI+QVMtSVM8L3NwYW4+JiM4MjIxOyBBTkQgUFJPVklERUQgV0lUSCBBTEwgRkFVTFRTLgogICAgICAgICAgQ09ERVNPVVJDRVJZIERPRVMgTk9UIE1BS0UgQU5ZIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAgICAgICAgICBJTVBMSUVELiAgQ09ERVNPVVJDRVJZIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgVEhFIElNUExJRUQgV0FSUkFOVElFUwogICAgICAgICAgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCiAgICAgICAgICBQVVJQT1NFLCBTWVNURU0gSU5URUdSQVRJT04sIEFORCBEQVRBIEFDQ1VSQUNZLiAgVEhFUkUgSVMgTk8gV0FSUkFOVFkKICAgICAgICAgIE9SIEdVQVJBTlRFRSBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIFNPRlRXQVJFIFdJTEwgQkUKICAgICAgICAgIFVOSU5URVJSVVBURUQsIEVSUk9SLUZSRUUsIE9SIFZJUlVTLUZSRUUsIE9SIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwKICAgICAgICAgIE1FRVQgQU5ZIFBBUlRJQ1VMQVIgQ1JJVEVSSUEgT0YgUEVSRk9STUFOQ0UsIFFVQUxJVFksIEFDQ1VSQUNZLAogICAgICAgICAgUFVSUE9TRSwgT1IgTkVFRC4gIFlPVSBBU1NVTUUgVEhFIEVOVElSRSBSSVNLIE9GIFNFTEVDVElPTiwKICAgICAgICAgIElOU1RBTExBVElPTiwgQU5EIFVTRSBPRiBUSEUgU09GVFdBUkUuICBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkKICAgICAgICAgIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgQUdSRUVNRU5ULiAgTk8gVVNFIE9GIFRIRQogICAgICAgICAgU09GVFdBUkUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KICAgICAgICA8L3A+PC9saT48bGk+PHA+PGI+TG9jYWwgTGF3LqA8L2I+CiAgICAgICAgICBJZiBpbXBsaWVkIHdhcnJhbnRpZXMgbWF5IG5vdCBiZSBkaXNjbGFpbWVkIHVuZGVyCiAgICAgICAgICBhcHBsaWNhYmxlIGxhdywgdGhlbiBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFSRSBMSU1JVEVEIElOIERVUkFUSU9OCiAgICAgICAgICBUTyBUSEUgUEVSSU9EIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLgogICAgICAgIDwvcD48L2xpPjxsaT48cD48Yj5MaW1pdGF0aW9uIG9mIExpYWJpbGl0eS6gPC9iPgogICAgICAgICAgSU5ERVBFTkRFTlQgT0YgVEhFIEZPUkdPSU5HIFBST1ZJU0lPTlMsIElOIE5PCiAgICAgICAgICBFVkVOVCBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBUT1JULAogICAgICAgICAgQ09OVFJBQ1QsIE9SIFNUUklDVCBQUk9EVUNUUyBMSUFCSUxJVFksIFNIQUxMIENPREVTT1VSQ0VSWSBCRSBMSUFCTEUKICAgICAgICAgIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SCiAgICAgICAgICBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sCiAgICAgICAgICBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBNQUxGVU5DVElPTiwgT1IKICAgICAgICAgIEFOWSBPVEhFUiBLSU5EIE9GIENPTU1FUkNJQUwgREFNQUdFLCBFVkVOIElGIENPREVTT1VSQ0VSWSBIQVMgQkVFTgogICAgICAgICAgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgVEhJUyBMSU1JVEFUSU9OIFNIQUxMCiAgICAgICAgICBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgVE8gVEhFIEVYVEVOVAogICAgICAgICAgUFJPSElCSVRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIElOIE5PIEVWRU5UIFNIQUxMIENPREVTT1VSQ0VSWSdTCiAgICAgICAgICBMSUFCSUxJVFkgRk9SIEFDVFVBTCBEQU1BR0VTIEZPUiBBTlkgQ0FVU0UgV0hBVFNPRVZFUiwgQU5EIFJFR0FSRExFU1MKICAgICAgICAgIE9GIFRIRSBGT1JNIE9GIEFDVElPTiwgRVhDRUVEIFRIRSBBTU9VTlQgUEFJRCBCWSBZT1UgSU4gRkVFUwoJICBVTkRFUiBUSElTIEFHUkVFTUVOVCBEVVJJTkcgVEhFIFBSRVZJT1VTIE9ORSBZRUFSIFBFUklPRC4KICAgICAgICA8L3A+PC9saT48bGk+PHA+PGI+RXhwb3J0IENvbnRyb2xzLqA8L2I+CiAgICAgICAgICBZb3UgYWdyZWUgdG8gY29tcGx5IHdpdGggYWxsIGV4cG9ydCBsYXdzIGFuZAogICAgICAgICAgcmVzdHJpY3Rpb25zIGFuZCByZWd1bGF0aW9ucyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvciBmb3JlaWduIGFnZW5jaWVzCiAgICAgICAgICBvciBhdXRob3JpdGllcywgYW5kIG5vdCB0byBleHBvcnQgb3IgcmUtZXhwb3J0IHRoZSBTb2Z0d2FyZSBvciBhbnkKICAgICAgICAgIGRpcmVjdCBwcm9kdWN0IHRoZXJlb2YgaW4gdmlvbGF0aW9uIG9mIGFueSBzdWNoIHJlc3RyaWN0aW9ucywgbGF3cyBvcgogICAgICAgICAgcmVndWxhdGlvbnMsIG9yIHdpdGhvdXQgYWxsIG5lY2Vzc2FyeSBhcHByb3ZhbHMuICBBcyBhcHBsaWNhYmxlLCBlYWNoCiAgICAgICAgICBwYXJ0eSBzaGFsbCBvYnRhaW4gYW5kIGJlYXIgYWxsIGV4cGVuc2VzIHJlbGF0aW5nIHRvIGFueSBuZWNlc3NhcnkKICAgICAgICAgIGxpY2Vuc2VzIGFuZC9vciBleGVtcHRpb25zIHdpdGggcmVzcGVjdCB0byBpdHMgb3duIGV4cG9ydCBvZiB0aGUKICAgICAgICAgIFNvZnR3YXJlIGZyb20gdGhlIFUuUy4gIE5laXRoZXIgdGhlIFNvZnR3YXJlIG5vciB0aGUgdW5kZXJseWluZwogICAgICAgICAgaW5mb3JtYXRpb24gb3IgdGVjaG5vbG9neSBtYXkgYmUgZWxlY3Ryb25pY2FsbHkgdHJhbnNtaXR0ZWQgb3IKICAgICAgICAgIG90aGVyd2lzZSBleHBvcnRlZCBvciByZS1leHBvcnRlZCAoaSkgaW50byBDdWJhLCBJcmFuLCBJcmFxLCBMaWJ5YSwKICAgICAgICAgIE5vcnRoIEtvcmVhLCBTdWRhbiwgU3lyaWEgb3IgYW55IG90aGVyIGNvdW50cnkgc3ViamVjdCB0byBVLlMuIHRyYWRlCiAgICAgICAgICBzYW5jdGlvbnMgY292ZXJpbmcgdGhlIFNvZnR3YXJlLCB0byBpbmRpdmlkdWFscyBvciBlbnRpdGllcwogICAgICAgICAgY29udHJvbGxlZCBieSBzdWNoIGNvdW50cmllcywgb3IgdG8gbmF0aW9uYWxzIG9yIHJlc2lkZW50cyBvZiBzdWNoCiAgICAgICAgICBjb3VudHJpZXMgb3RoZXIgdGhhbiBuYXRpb25hbHMgd2hvIGFyZSBsYXdmdWxseSBhZG1pdHRlZCBwZXJtYW5lbnQKICAgICAgICAgIHJlc2lkZW50cyBvZiBjb3VudHJpZXMgbm90IHN1YmplY3QgdG8gc3VjaCBzYW5jdGlvbnM7IG9yIChpaSkgdG8KICAgICAgICAgIGFueW9uZSBvbiB0aGUgVS5TLiBUcmVhc3VyeSBEZXBhcnRtZW50J3MgbGlzdCBvZiBTcGVjaWFsbHkgRGVzaWduYXRlZAogICAgICAgICAgTmF0aW9uYWxzIGFuZCBCbG9ja2VkIFBlcnNvbnMgb3IgdGhlIFUuUy4gQ29tbWVyY2UgRGVwYXJ0bWVudCdzIFRhYmxlCiAgICAgICAgICBvZiBEZW5pYWwgT3JkZXJzLiBCeSBkb3dubG9hZGluZyBvciB1c2luZyB0aGUgU29mdHdhcmUsIExpY2Vuc2VlCiAgICAgICAgICBhZ3JlZXMgdG8gdGhlIGZvcmVnb2luZyBhbmQgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCBpdCBjb21wbGllcwogICAgICAgICAgd2l0aCB0aGVzZSBjb25kaXRpb25zLgogICAgICAgIDwvcD48L2xpPjxsaT48cD48Yj5VLlMuIEdvdmVybm1lbnQgRW5kLVVzZXJzLqA8L2I+CiAgICAgICAgICBUaGUgU29mdHdhcmUgaXMgYSAmIzgyMjA7PHNwYW4gY2xhc3M9InF1b3RlIj5jb21tZXJjaWFsIGl0ZW0sPC9zcGFuPiYjODIyMTsKICAgICAgICAgIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZgogICAgICAgICAgJiM4MjIwOzxzcGFuIGNsYXNzPSJxdW90ZSI+Y29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZTwvc3Bhbj4mIzgyMjE7IGFuZCAmIzgyMjA7PHNwYW4gY2xhc3M9InF1b3RlIj5jb21tZXJjaWFsCiAgICAgICAgICBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLDwvc3Bhbj4mIzgyMjE7IGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDgKICAgICAgICAgIEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDgKICAgICAgICAgIEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudAogICAgICAgICAgRW5kIFVzZXJzIGFjcXVpcmUgdGhlIFNvZnR3YXJlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoCiAgICAgICAgICBoZXJlaW4uCiAgICAgICAgPC9wPjwvbGk+PGxpPjxwPjxiPkxpY2Vuc2VlIE91dHNpZGUgVGhlIFUuUy6gPC9iPgogICAgICAgICAgSWYgWW91IGFyZSBsb2NhdGVkIG91dHNpZGUgdGhlIFUuUy4sIHRoZW4gdGhlCiAgICAgICAgICBmb2xsb3dpbmcgcHJvdmlzaW9ucyBzaGFsbCBhcHBseTogKGkpIExlcyBwYXJ0aWVzIGF1eCBwcmVzZW50ZXMKICAgICAgICAgIGNvbmZpcm1lbnQgbGV1ciB2b2xvbnRlIHF1ZSBjZXR0ZSBjb252ZW50aW9uIGRlIG1lbWUgcXVlIHRvdXMgbGVzCiAgICAgICAgICBkb2N1bWVudHMgeSBjb21wcmlzIHRvdXQgYXZpcyBxdWkgc2l5IHJhdHRhY2hlLCBzb2llbnQgcmVkaWdlcyBlbgogICAgICAgICAgbGFuZ3VlIGFuZ2xhaXNlICh0cmFuc2xhdGlvbjogJiM4MjIwOzxzcGFuIGNsYXNzPSJxdW90ZSI+VGhlIHBhcnRpZXMgY29uZmlybSB0aGF0IHRoaXMKICAgICAgICAgIEFncmVlbWVudCBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpcyBhbmQgd2lsbCBiZSBpbiB0aGUgRW5nbGlzaAogICAgICAgICAgbGFuZ3VhZ2UuPC9zcGFuPiYjODIyMTspOyBhbmQgIChpaSkgWW91IGFyZSByZXNwb25zaWJsZSBmb3IgY29tcGx5aW5nIHdpdGgKICAgICAgICAgIGFueSBsb2NhbCBsYXdzIGluIHlvdXIganVyaXNkaWN0aW9uIHdoaWNoIG1pZ2h0IGltcGFjdCB5b3VyIHJpZ2h0IHRvCiAgICAgICAgICBpbXBvcnQsIGV4cG9ydCBvciB1c2UgdGhlIFNvZnR3YXJlLCBhbmQgWW91IHJlcHJlc2VudCB0aGF0IFlvdSBoYXZlCiAgICAgICAgICBjb21wbGllZCB3aXRoIGFueSByZWd1bGF0aW9ucyBvciByZWdpc3RyYXRpb24gcHJvY2VkdXJlcyByZXF1aXJlZCBieQogICAgICAgICAgYXBwbGljYWJsZSBsYXcgdG8gbWFrZSB0aGlzIGxpY2Vuc2UgZW5mb3JjZWFibGUuCiAgICAgICAgPC9wPjwvbGk+PGxpPjxwPjxiPlNldmVyYWJpbGl0eS6gPC9iPgogICAgICAgICAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBkZWNsYXJlZCBpbnZhbGlkIG9yCiAgICAgICAgICB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSBkZWVtZWQgbW9kaWZpZWQgdG8gdGhlIGV4dGVudAogICAgICAgICAgbmVjZXNzYXJ5IGFuZCBwb3NzaWJsZSB0byByZW5kZXIgaXQgdmFsaWQgYW5kIGVuZm9yY2VhYmxlLiAgSW4gYW55CiAgICAgICAgICBldmVudCwgdGhlIHVuZW5mb3JjZWFiaWxpdHkgb3IgaW52YWxpZGl0eSBvZiBhbnkgcHJvdmlzaW9uIHNoYWxsIG5vdAogICAgICAgICAgYWZmZWN0IGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB0aGlzIEFncmVlbWVudAogICAgICAgICAgc2hhbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LCBhbmQgYmUgY29uc3RydWVkIGFuZAogICAgICAgICAgZW5mb3JjZWQsIGFzIGlmIHN1Y2ggcHJvdmlzaW9uIGhhZCBub3QgYmVlbiBpbmNsdWRlZCwgb3IgaGFkIGJlZW4KICAgICAgICAgIG1vZGlmaWVkIGFzIGFib3ZlIHByb3ZpZGVkLCBhcyB0aGUgY2FzZSBtYXkgYmUuCiAgICAgICAgPC9wPjwvbGk+PGxpPjxwPjxiPkFyYml0cmF0aW9uLqA8L2I+CiAgICAgICAgICBFeGNlcHQgZm9yIGFjdGlvbnMgdG8gcHJvdGVjdCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGFuZCB0bwogICAgICAgICAgZW5mb3JjZSBhbiBhcmJpdHJhdG9yJ3MgZGVjaXNpb24gaGVyZXVuZGVyLCBhbGwgZGlzcHV0ZXMsCiAgICAgICAgICBjb250cm92ZXJzaWVzLCBvciBjbGFpbXMgYXJpc2luZyBvdXQgb2Ygb3IgcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQKICAgICAgICAgIG9yIGEgYnJlYWNoIHRoZXJlb2Ygc2hhbGwgYmUgc3VibWl0dGVkIHRvIGFuZCBmaW5hbGx5IHJlc29sdmVkIGJ5CiAgICAgICAgICBhcmJpdHJhdGlvbiB1bmRlciB0aGUgcnVsZXMgb2YgdGhlIEFtZXJpY2FuIEFyYml0cmF0aW9uIEFzc29jaWF0aW9uCiAgICAgICAgICAoJiM4MjIwOzxzcGFuIGNsYXNzPSJxdW90ZSI+QUFBPC9zcGFuPiYjODIyMTspIHRoZW4gaW4gZWZmZWN0LiAgVGhlcmUgc2hhbGwgYmUgb25lIGFyYml0cmF0b3IsCiAgICAgICAgICBhbmQgc3VjaCBhcmJpdHJhdG9yIHNoYWxsIGJlIGNob3NlbiBieSBtdXR1YWwgYWdyZWVtZW50IG9mIHRoZQogICAgICAgICAgcGFydGllcyBpbiBhY2NvcmRhbmNlIHdpdGggQUFBIHJ1bGVzLiAgVGhlIGFyYml0cmF0aW9uIHNoYWxsIHRha2UKICAgICAgICAgIHBsYWNlIGluIEdyYW5pdGUgQmF5LCBDYWxpZm9ybmlhLCBhbmQgbWF5IGJlIGNvbmR1Y3RlZCBieSB0ZWxlcGhvbmUKICAgICAgICAgIG9yIG9ubGluZS4gIFRoZSBhcmJpdHJhdG9yIHNoYWxsIGFwcGx5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZgogICAgICAgICAgQ2FsaWZvcm5pYSwgVVNBIHRvIGFsbCBpc3N1ZXMgaW4gZGlzcHV0ZS4gIFRoZSBjb250cm92ZXJzeSBvciBjbGFpbQogICAgICAgICAgc2hhbGwgYmUgYXJiaXRyYXRlZCBvbiBhbiBpbmRpdmlkdWFsIGJhc2lzLCBhbmQgc2hhbGwgbm90IGJlCiAgICAgICAgICBjb25zb2xpZGF0ZWQgaW4gYW55IGFyYml0cmF0aW9uIHdpdGggYW55IGNsYWltIG9yIGNvbnRyb3ZlcnN5IG9mIGFueQogICAgICAgICAgb3RoZXIgcGFydHkuICBUaGUgZmluZGluZ3Mgb2YgdGhlIGFyYml0cmF0b3Igc2hhbGwgYmUgZmluYWwgYW5kCiAgICAgICAgICBiaW5kaW5nIG9uIHRoZSBwYXJ0aWVzLCBhbmQgbWF5IGJlIGVudGVyZWQgaW4gYW55IGNvdXJ0IG9mIGNvbXBldGVudAogICAgICAgICAganVyaXNkaWN0aW9uIGZvciBlbmZvcmNlbWVudC4gRW5mb3JjZW1lbnRzIG9mIGFueSBhd2FyZCBvciBqdWRnbWVudAogICAgICAgICAgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gdGhlIFJlY29nbml0aW9uCiAgICAgICAgICBhbmQgRW5mb3JjZW1lbnQgb2YgRm9yZWlnbiBBcmJpdHJhbCBBd2FyZHMuICBTaG91bGQgZWl0aGVyIHBhcnR5IGZpbGUKICAgICAgICAgIGFuIGFjdGlvbiBjb250cmFyeSB0byB0aGlzIHByb3Zpc2lvbiwgdGhlIG90aGVyIHBhcnR5IG1heSByZWNvdmVyCiAgICAgICAgICBhdHRvcm5leSdzIGZlZXMgYW5kIGNvc3RzIHVwIHRvICQxMDAwLjAwLgogICAgICAgIDwvcD48L2xpPjxsaT48cD48Yj5KdXJpc2RpY3Rpb24gQW5kIFZlbnVlLqA8L2I+CiAgICAgICAgICBUaGUgY291cnRzIG9mIFBsYWNlciBDb3VudHkgaW4gdGhlIFN0YXRlIG9mCiAgICAgICAgICBDYWxpZm9ybmlhLCBVU0EgYW5kIHRoZSBuZWFyZXN0IFUuUy4gRGlzdHJpY3QgQ291cnQgc2hhbGwgYmUgdGhlCiAgICAgICAgICBleGNsdXNpdmUganVyaXNkaWN0aW9uIGFuZCB2ZW51ZSBmb3IgYWxsIGxlZ2FsIHByb2NlZWRpbmdzIHRoYXQgYXJlCiAgICAgICAgICBub3QgYXJiaXRyYXRlZCB1bmRlciB0aGlzIEFncmVlbWVudC4KICAgICAgICA8L3A+PC9saT48bGk+PHA+PGI+SW5kZXBlbmRlbnQgQ29udHJhY3RvcnMuoDwvYj4KICAgICAgIFRoZSByZWxhdGlvbnNoaXAgb2YgdGhlIHBhcnRpZXMgaXMgdGhhdCBvZiBpbmRlcGVuZGVudAogICAgICAgY29udHJhY3RvciwgYW5kIG5vdGhpbmcgaGVyZWluIHNoYWxsIGJlIGNvbnN0cnVlZCB0byBjcmVhdGUgYQogICAgICAgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUsIGZyYW5jaGlzZSwgZW1wbG95bWVudCwgb3IgYWdlbmN5CiAgICAgICByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgcGFydGllcy4gIExpY2Vuc2VlIHNoYWxsIGhhdmUgbm8KICAgICAgIGF1dGhvcml0eSB0byBlbnRlciBpbnRvIGFncmVlbWVudHMgb2YgYW55IGtpbmQgb24gYmVoYWxmIG9mCiAgICAgICBDb2RlU291cmNlcnkgYW5kIHNoYWxsIG5vdCBoYXZlIHRoZSBwb3dlciBvciBhdXRob3JpdHkgdG8gYmluZAogICAgICAgb3Igb2JsaWdhdGUgQ29kZVNvdXJjZXJ5IGluIGFueSBtYW5uZXIgdG8gYW55IHRoaXJkIHBhcnR5LgogICAgICA8L3A+PC9saT48bGk+PHA+PGI+Rm9yY2UgTWFqZXVyZS6gPC9iPgogICAgICAgTmVpdGhlciBDb2RlU291cmNlcnkgbm9yIExpY2Vuc2VlIHNoYWxsIGJlIGxpYWJsZSBmb3IgZGFtYWdlcwogICAgICAgZm9yIGFueSBkZWxheSBvciBmYWlsdXJlIG9mIGRlbGl2ZXJ5IGFyaXNpbmcgb3V0IG9mIGNhdXNlcwogICAgICAgYmV5b25kIHRoZWlyIHJlYXNvbmFibGUgY29udHJvbCBhbmQgd2l0aG91dCB0aGVpciBmYXVsdCBvcgogICAgICAgbmVnbGlnZW5jZSwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIEFjdHMgb2YgR29kLCBhY3RzIG9mCiAgICAgICBjaXZpbCBvciBtaWxpdGFyeSBhdXRob3JpdHksIGZpcmVzLCByaW90cywgd2FycywgZW1iYXJnb2VzLCBvcgogICAgICAgY29tbXVuaWNhdGlvbnMgZmFpbHVyZS4KICAgICAgPC9wPjwvbGk+PGxpPjxwPjxiPk1pc2NlbGxhbmVvdXMuoDwvYj4KICAgICAgICAgIFRoaXMgQWdyZWVtZW50IGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGFydGllcwogICAgICAgICAgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBvZiB0aGlzIEFncmVlbWVudCBhbmQgbWVyZ2VzIGFsbAogICAgICAgICAgcHJpb3IgY29tbXVuaWNhdGlvbnMsIHJlcHJlc2VudGF0aW9ucywgYW5kIGFncmVlbWVudHMuIFRoaXMgQWdyZWVtZW50CiAgICAgICAgICBtYXkgYmUgbW9kaWZpZWQgb25seSBieSBhIHdyaXR0ZW4gYWdyZWVtZW50IHNpZ25lZCBieSB0aGUgcGFydGllcy4KICAgICAgICAgIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlIGZvcgogICAgICAgICAgYW55IHJlYXNvbiwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50CiAgICAgICAgICBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZAogICAgICAgICAgdW5kZXIgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIFVTQSwgZXhjbHVkaW5nIHJ1bGVzCiAgICAgICAgICByZWdhcmRpbmcgY29uZmxpY3RzIG9mIGxhdy4gIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMKICAgICAgICAgIENvbnZlbnRpb24gb2YgQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzCiAgICAgICAgICBleHByZXNzbHkgZXhjbHVkZWQuICBUaGlzIGxpY2Vuc2UgaXMgd3JpdHRlbiBpbiBFbmdsaXNoLCBhbmQgRW5nbGlzaAogICAgICAgICAgaXMgaXRzIGNvbnRyb2xsaW5nIGxhbmd1YWdlLgogICAgICAgIDwvcD48L2xpPjwvb2w+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ibmF2Zm9vdGVyIj48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGZvb3RlciI+PHRyPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCI+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJjaGFwLWxpY2Vuc2UuaHRtbCI+UHJldjwvYT6gPC90ZD48dGQgd2lkdGg9IjIwJSIgYWxpZ249ImNlbnRlciI+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaGFwLWxpY2Vuc2UuaHRtbCI+VXA8L2E+PC90ZD48dGQgd2lkdGg9IjQwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJhcGJzMDMuaHRtbCI+TmV4dDwvYT48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPkFwcGVuZGl4oEIuoFNvdXJjZXJ5IEcrKyBMaXRlIExpY2Vuc2VzoDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj6gQi4zLqBBdHRyaWJ1dGlvbjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjwvYm9keT48L2h0bWw+Cg==