PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PHRpdGxlPkJvb3N0Lk11bHRpQXJyYXkgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+PG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43MS4xIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9ImFydGljbGUiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDEgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJpZDczMDU1NCI+PC9hPkJvb3N0Lk11bHRpQXJyYXkgUmVmZXJlbmNlIE1hbnVhbDwvaDE+PC9kaXY+PGRpdj48ZGl2IGNsYXNzPSJhdXRob3IiPjxoMyBjbGFzcz0iYXV0aG9yIj48c3BhbiBjbGFzcz0iZmlyc3RuYW1lIj5Sb25hbGQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdXJuYW1lIj5HYXJjaWE8L3NwYW4+PC9oMz48ZGl2IGNsYXNzPSJhZmZpbGlhdGlvbiI+PHNwYW4gY2xhc3M9Im9yZ25hbWUiPkluZGlhbmEgVW5pdmVyc2l0eTxicj48L3NwYW4+IDxzcGFuIGNsYXNzPSJvcmdkaXYiPk9wZW4gU3lzdGVtcyBMYWI8YnI+PC9zcGFuPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXY+PHAgY2xhc3M9ImNvcHlyaWdodCI+Q29weXJpZ2h0IKkgMjAwMiBUaGUgVHJ1c3RlZXMgb2YgSW5kaWFuYSBVbml2ZXJzaXR5PC9wPjwvZGl2PjwvZGl2Pjxocj48L2Rpdj48ZGl2IGNsYXNzPSJ0b2MiPjxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD48ZGw+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3N5bm9wc2lzIj5MaWJyYXJ5IFN5bm9wc2lzPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNNdWx0aUFycmF5Ij5NdWx0aUFycmF5IENvbmNlcHQ8L2E+PC9zcGFuPjwvZHQ+PGRkPjxkbD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjaWQ4MzUzMzIiPk5vdGF0aW9uPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNpZDgzNTUwMCI+QXNzb2NpYXRlZCBUeXBlczwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjaWQ4MzYwMTAiPlZhbGlkIGV4cHJlc3Npb25zPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNpZDgzNjgyOCI+Q29tcGxleGl0eSBndWFyYW50ZWVzPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNpZDgzNjg1MiI+SW52YXJpYW50czwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjdmlld190eXBlcyI+QXNzb2NpYXRlZCBUeXBlcyBmb3IgVmlld3M8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2lkODM4MjIyIj5Nb2RlbHM8L2E+PC9zcGFuPjwvZHQ+PC9kbD48L2RkPjxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNhcnJheV90eXBlcyI+QXJyYXkgQ29tcG9uZW50czwvYT48L3NwYW4+PC9kdD48ZGQ+PGRsPjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNtdWx0aV9hcnJheSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPjwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjbXVsdGlfYXJyYXlfcmVmIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXVsdGlfYXJyYXlfcmVmPC9jb2RlPjwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjY29uc3RfbXVsdGlfYXJyYXlfcmVmIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Y29uc3RfbXVsdGlfYXJyYXlfcmVmPC9jb2RlPjwvYT48L3NwYW4+PC9kdD48L2RsPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2F1eGlsaWFyeSI+QXV4aWxpYXJ5IENvbXBvbmVudHM8L2E+PC9zcGFuPjwvZHQ+PGRkPjxkbD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjbXVsdGlfYXJyYXlfdHlwZXMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheV90eXBlczwvY29kZT48L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2V4dGVudF9yYW5nZSI+PGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+ZXh0ZW50X3JhbmdlPC9jb2RlPjwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjZXh0ZW50X2dlbiI+PGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+ZXh0ZW50X2dlbjwvY29kZT48L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2lkODYyODMwIj5HbG9iYWwgT2JqZWN0czwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjZ2VuZXJhdG9ycyI+VmlldyBhbmQgU3ViQXJyYXkgR2VuZXJhdG9yczwvYT48L3NwYW4+PC9kdD48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjbWVtb3J5X2xheW91dCI+TWVtb3J5IExheW91dCBTcGVjaWZpZXJzPC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNyYW5nZV9jaGVja2luZyI+UmFuZ2UgQ2hlY2tpbmc8L2E+PC9zcGFuPjwvZHQ+PC9kbD48L2RkPjwvZGw+PC9kaXY+PHA+Qm9vc3QuTXVsdGlBcnJheSBpcyBjb21wb3NlZCBvZiBzZXZlcmFsIGNvbXBvbmVudHMuClRoZSBNdWx0aUFycmF5IGNvbmNlcHQgZGVmaW5lcyBhIGdlbmVyaWMgaW50ZXJmYWNlIHRvIG11bHRpZGltZW5zaW9uYWwKY29udGFpbmVycy4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPiBpcyBhIGdlbmVyYWwgcHVycG9zZSBjb250YWluZXIgY2xhc3MKdGhhdCBtb2RlbHMgTXVsdGlBcnJheS4gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5X3JlZjwvY29kZT4KYW5kIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdF9tdWx0aV9hcnJheV9yZWY8L2NvZGU+IGFyZSBhZGFwdGVyCmNsYXNzZXMuIFVzaW5nIHRoZW0sIAp5b3UgY2FuIG1hbmlwdWxhdGUgYW55IGJsb2NrIG9mIGNvbnRpZ3VvdXMgZGF0YSBhcyB0aG91Z2ggaXQgd2VyZSBhCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4uCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdF9tdWx0aV9hcnJheV9yZWY8L2NvZGU+IGRpZmZlcnMgZnJvbQo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXVsdGlfYXJyYXlfcmVmPC9jb2RlPiBpbiB0aGF0IGl0cyBlbGVtZW50cyBjYW5ub3QKYmUgbW9kaWZpZWQgdGhyb3VnaCBpdHMgaW50ZXJmYWNlLiBGaW5hbGx5LCBzZXZlcmFsIGF1eGlsaWFyeSBjbGFzc2VzIGFyZSB1c2VkCnRvIGNyZWF0ZSBhbmQgc3BlY2lhbGl6ZSBhcnJheXMgYW5kIHNvbWUgZ2xvYmFsIG9iamVjdHMgYXJlIGRlZmluZWQgYXMKcGFydCBvZiB0aGUgbGlicmFyeSBpbnRlcmZhY2UuPC9wPjxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJzeW5vcHNpcyI+PC9hPkxpYnJhcnkgU3lub3BzaXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPlRvIHVzZSBCb29zdC5NdWx0aUFycmF5LCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBoZWFkZXIgCjxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+Ym9vc3QvbXVsdGlfYXJyYXkuaHBwPC9jb2RlPiBpbiB5b3VyIHNvdXJjZS4gVGhpcyBmaWxlCmJyaW5ncyB0aGUgZm9sbG93aW5nIGRlY2xhcmF0aW9ucyBpbnRvIHNjb3BlOjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Cm5hbWVzcGFjZSBib29zdCB7CiAgCiAgbmFtZXNwYWNlIG11bHRpX2FycmF5X3R5cGVzIHsKICAgIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiBpbmRleDsKICAgIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiBzaXplX3R5cGU7CiAgICB0eXBlZGVmICp1bnNwZWNpZmllZCogZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqIGluZGV4X3JhbmdlOwogICAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqIGV4dGVudF9yYW5nZTsKICAgIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiBpbmRleF9nZW47CiAgICB0eXBlZGVmICp1bnNwZWNpZmllZCogZXh0ZW50X2dlbjsKICB9CgogIHRlbXBsYXRlICZsdDt0eXBlbmFtZSBWYWx1ZVR5cGUsIAogICAgICAgICAgICBzdGQ6OnNpemVfdCBOdW1EaW1zLCAKICAgICAgICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3ImbHQ7VmFsdWVUeXBlJmd0OyAmZ3Q7CiAgY2xhc3MgbXVsdGlfYXJyYXk7CgogIHRlbXBsYXRlICZsdDt0eXBlbmFtZSBWYWx1ZVR5cGUsIAogICAgICAgICAgICBzdGQ6OnNpemVfdCBOdW1EaW1zJmd0OwogIGNsYXNzIG11bHRpX2FycmF5X3JlZjsKCiAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIFZhbHVlVHlwZSwgCiAgICAgICAgICAgIHN0ZDo6c2l6ZV90IE51bURpbXMmZ3Q7IAogIGNsYXNzIGNvbnN0X211bHRpX2FycmF5X3JlZjsKCiAgbXVsdGlfYXJyYXlfdHlwZXM6OmV4dGVudF9nZW4gZXh0ZW50czsKICBtdWx0aV9hcnJheV90eXBlczo6aW5kZXhfZ2VuICBpbmRpY2VzOwoKICB0ZW1wbGF0ZSAmbHQ7dHlwZW5hbWUgQXJyYXksIGludCBOJmd0OyBjbGFzcyBzdWJhcnJheV9nZW47CiAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIEFycmF5LCBpbnQgTiZndDsgY2xhc3MgY29uc3Rfc3ViYXJyYXlfZ2VuOwogIHRlbXBsYXRlICZsdDt0eXBlbmFtZSBBcnJheSwgaW50IE4mZ3Q7IGNsYXNzIGFycmF5X3ZpZXdfZ2VuOwogIHRlbXBsYXRlICZsdDt0eXBlbmFtZSBBcnJheSwgaW50IE4mZ3Q7IGNsYXNzIGNvbnN0X2FycmF5X3ZpZXdfZ2VuOwoKICBjbGFzcyBjX3N0b3JhZ2Vfb3JkZXI7IAogIGNsYXNzIGZvcnRyYW5fc3RvcmFnZV9vcmRlcjsKICB0ZW1wbGF0ZSAmbHQ7c3RkOjpzaXplX3QgTnVtRGltcyZndDsgY2xhc3MgZ2VuZXJhbF9zdG9yYWdlX29yZGVyOwoKfQo8L3ByZT48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iTXVsdGlBcnJheSI+PC9hPk11bHRpQXJyYXkgQ29uY2VwdDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+VGhlIE11bHRpQXJyYXkKY29uY2VwdCBkZWZpbmVzIGFuIGludGVyZmFjZSB0byBoaWVyYXJjaGljYWxseSBuZXN0ZWQKY29udGFpbmVycy4gIEl0IHNwZWNpZmllcyBvcGVyYXRpb25zIGZvciBhY2Nlc3NpbmcgZWxlbWVudHMsCnRyYXZlcnNpbmcgY29udGFpbmVycywgYW5kIGNyZWF0aW5nIHZpZXdzCm9mIGFycmF5IGRhdGEuCk11bHRpQXJyYXkgZGVmaW5lcwphIGZsZXhpYmxlIG1lbW9yeSBtb2RlbCB0aGF0IGFjY29tb2RhdGVzCmEgdmFyaWV0eSBvZiBkYXRhIGxheW91dHMuCjwvcD48cD4KQXQgZWFjaCBsZXZlbCAob3IgZGltZW5zaW9uKSBvZiBhIE11bHRpQXJyYXkncwpjb250YWluZXIgaGllcmFyY2h5IGxpZSBhIHNldCBvZiBvcmRlcmVkIGNvbnRhaW5lcnMsIGVhY2ggb2Ygd2hpY2gKY29udGFpbnMgdGhlIHNhbWUgbnVtYmVyIGFuZCB0eXBlIG9mIHZhbHVlcy4gVGhlIGRlcHRoIG9mIHRoaXMKY29udGFpbmVyIGhpZXJhcmNoeSBpcyB0aGUgTXVsdGlBcnJheSdzIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmRpbWVuc2lvbmFsaXR5PC9lbT48L3NwYW4+LiAKTXVsdGlBcnJheSBpcyByZWN1cnNpdmVseSBkZWZpbmVkOyB0aGUKY29udGFpbmVycyBhdCBlYWNoIGxldmVsIG9mIHRoZSBjb250YWluZXIgaGllcmFyY2h5IG1vZGVsCk11bHRpQXJyYXkgYXMgd2VsbC4gV2hpbGUgZWFjaCBkaW1lbnNpb24gb2YgYSBNdWx0aUFycmF5CmhhcyBpdHMgb3duIHNpemUsIHRoZSBsaXN0IG9mIHNpemVzIGZvciBhbGwgZGltZW5zaW9ucyAKZGVmaW5lcyB0aGUgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+c2hhcGU8L2VtPjwvc3Bhbj4gb2YgdGhlIGVudGlyZSBNdWx0aUFycmF5LgpBdCB0aGUgYmFzZSBvZiB0aGlzIGhpZXJhcmNoeSBsaWUgMS1kaW1lbnNpb25hbApNdWx0aUFycmF5cy4gIFRoZWlyIHZhbHVlcyBhcmUgdGhlIGNvbnRhaW5lZApvYmplY3RzIG9mIGludGVyZXN0IGFuZCBub3QgcGFydCBvZiB0aGUgY29udGFpbmVyIGhpZXJhcmNoeS4gVGhlc2UgYXJlCnRoZSBNdWx0aUFycmF5J3MgZWxlbWVudHMuCjwvcD48cD4KTGlrZSBvdGhlciBjb250YWluZXIgY29uY2VwdHMsIE11bHRpQXJyYXkgZXhwb3J0cwppdGVyYXRvcnMgdG8gdHJhdmVyc2UgaXRzIHZhbHVlcy4gSW4gYWRkaXRpb24sIHZhbHVlcyBjYW4gYmUKYWRkcmVzc2VkIGRpcmVjdGx5IHVzaW5nIHRoZSBmYW1pbGlhciBicmFja2V0IG5vdGF0aW9uLgo8L3A+PHA+Ck11bHRpQXJyYXkgYWxzbyBzcGVjaWZpZXMKcm91dGluZXMgZm9yIGNyZWF0aW5nCnNwZWNpYWxpemVkIHZpZXdzLiBBIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnZpZXc8L2VtPjwvc3Bhbj4gbGV0cyB5b3UgdHJlYXQgYSAKc3Vic2V0IG9mIHRoZSB1bmRlcmx5aW5nCmVsZW1lbnRzIGluIGEgTXVsdGlBcnJheSBhcyB0aG91Z2ggaXQgd2VyZSBhIHNlcGFyYXRlCk11bHRpQXJyYXkuIFNpbmNlIGEgdmlldyByZWZlcnMgdG8gdGhlIHNhbWUgdW5kZXJseWluZyBlbGVtZW50cywKY2hhbmdlcyBtYWRlIHRvIGEgdmlldydzIGVsZW1lbnRzIHdpbGwgYmUgcmVmbGVjdGVkIGluIHRoZSBvcmlnaW5hbApNdWx0aUFycmF5LiBGb3IKZXhhbXBsZSwgZ2l2ZW4gYSAzLWRpbWVuc2lvbmFsICJjdWJlIiBvZiBlbGVtZW50cywgYSAyLWRpbWVuc2lvbmFsCnNsaWNlIGNhbiBiZSB2aWV3ZWQgYXMgaWYgaXQgd2VyZSBhbiBpbmRlcGVuZGVudApNdWx0aUFycmF5LgoKVmlld3MgYXJlIGNyZWF0ZWQgdXNpbmcgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X2dlbjwvY29kZT4gYW5kCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9yYW5nZTwvY29kZT4gb2JqZWN0cy4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X3JhbmdlPC9jb2RlPnMgZGVub3RlIGVsZW1lbnRzIGZyb20gYSBjZXJ0YWluCmRpbWVuc2lvbiB0aGF0IGFyZSB0byBiZSBpbmNsdWRlZCBpbiBhCnZpZXcuIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9nZW48L2NvZGU+IGFnZ3JlZ2F0ZXMgcmFuZ2UgZGF0YSBhbmQgcGVyZm9ybXMKYm9va2tlZXBpbmcgdG8gZGV0ZXJtaW5lIHRoZSB2aWV3IHR5cGUgdG8gYmUgcmV0dXJuZWQuCgpNdWx0aUFycmF5J3MgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9wZXJhdG9yW108L2NvZGU+CiBtdXN0IGJlIHBhc3NlZCB0aGUgcmVzdWx0Cm9mIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OPC9jb2RlPiBjaGFpbmVkIGNhbGxzIHRvIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfZ2VuOjpvcGVyYXRvcltdPC9jb2RlPiwgaS5lLgoKPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbmRpY2VzW2EwXVthMV0uLi5bYU5dOwo8L3ByZT48cD4KCndoZXJlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OPC9jb2RlPiBpcyB0aGUgCk11bHRpQXJyYXkncyBkaW1lbnNpb25hbGl0eSBhbmQKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGljZXM8L2NvZGU+IGFuIG9iamVjdCBvZiB0eXBlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9nZW48L2NvZGU+LgoKVGhlIHZpZXcgdHlwZSBpcyBkZXBlbmRlbnQgdXBvbiB0aGUgbnVtYmVyIG9mIGRlZ2VuZXJhdGUgZGltZW5zaW9ucwpzcGVjaWZpZWQgdG8gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X2dlbjwvY29kZT4uICBBIGRlZ2VuZXJhdGUgZGltZW5zaW9uCm9jY3VycyB3aGVuIGEgc2luZ2xlLWluZGV4IGlzIHNwZWNpZmllZCB0bwo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfZ2VuPC9jb2RlPiBmb3IgYSBjZXJ0YWluIGRpbWVuc2lvbi4gIEZvciBleGFtcGxlLCBpZgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kaWNlczwvY29kZT4gaXMgYW4gb2JqZWN0IG9mIHR5cGUKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X2dlbjwvY29kZT4sIHRoZW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgoKPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbmRpY2VzW2luZGV4X3JhbmdlKDAsNSldWzJdW2luZGV4X3JhbmdlKDAsNCldOwo8L3ByZT48cD4KCmhhcyBhIGRlZ2VuZXJhdGUgc2Vjb25kIGRpbWVuc2lvbi4gIFRoZSB2aWV3IGdlbmVyYXRlZCBmcm9tIHRoZSBhYm92ZQpzcGVjaWZpY2F0aW9uIHdpbGwgaGF2ZSAyIGRpbWVuc2lvbnMgd2l0aCBzaGFwZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+NSB4IDQ8L2NvZGU+LgpJZiB0aGUgIjxjb2RlIGNsYXNzPSJsaXRlcmFsIj4yPC9jb2RlPiIgYWJvdmUgd2VyZSByZXBsYWNlZCB3aXRoCmFub3RoZXIgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X3JhbmdlPC9jb2RlPiBvYmplY3QsIGZvciBleGFtcGxlOgoKPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbmRpY2VzW2luZGV4X3JhbmdlKDAsNSldW2luZGV4X3JhbmdlKDAsMildW2luZGV4X3JhbmdlKDAsNCldOwo8L3ByZT48cD4KCnRoZW4gdGhlIHZpZXcgd291bGQgaGF2ZSAzIGRpbWVuc2lvbnMuPC9wPjxwPgpNdWx0aUFycmF5IGV4cG9ydHMKaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBtZW1vcnkKbGF5b3V0IG9mIGl0cyBjb250YWluZWQgZWxlbWVudHMuIEl0cyBtZW1vcnkgbW9kZWwgZm9yIGVsZW1lbnRzIGlzCmNvbXBsZXRlbHkgZGVmaW5lZCBieSA0IHByb3BlcnRpZXM6IHRoZSBvcmlnaW4sIHNoYXBlLCBpbmRleCBiYXNlcywKYW5kIHN0cmlkZXMuICBUaGUgb3JpZ2luIGlzIHRoZSBhZGRyZXNzIGluIG1lbW9yeSBvZiB0aGUgZWxlbWVudAphY2Nlc3NlZCBhcyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YVswXVswXS4uLlswXTwvY29kZT4sIHdoZXJlCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hPC9jb2RlPiBpcyBhIE11bHRpQXJyYXkuIFRoZSBzaGFwZSBpcyBhIGxpc3Qgb2YgbnVtYmVycwpzcGVjaWZ5aW5nIHRoZSBzaXplIG9mIGNvbnRhaW5lcnMgYXQgZWFjaCBkaW1lbnNpb24uICBGb3IgZXhhbXBsZSwgdGhlCmZpcnN0IGV4dGVudCBpcyB0aGUgc2l6ZSBvZiB0aGUgb3V0ZXJtb3N0IGNvbnRhaW5lciwgdGhlIHNlY29uZCBleHRlbnQKaXMgdGhlIHNpemUgb2YgaXRzIHN1YmNvbnRhaW5lcnMsIGFuZCBzbyBvbi4gVGhlIGluZGV4IGJhc2VzIGFyZSBhCmxpc3Qgb2Ygc2lnbmVkIHZhbHVlcyBzcGVjaWZ5aW5nIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdmFsdWUgaW4gYQpjb250YWluZXIuIEFsbCBjb250YWluZXJzIGF0IHRoZSBzYW1lIGRpbWVuc2lvbiBzaGFyZSB0aGUgc2FtZSBpbmRleApiYXNlLiAgTm90ZSB0aGF0IHNpbmNlIHBvc2l0aXZlIGluZGV4IGJhc2VzIGFyZQpwb3NzaWJsZSwgdGhlIG9yaWdpbiBuZWVkIG5vdCBleGlzdCBpbiBvcmRlciB0byBkZXRlcm1pbmUgdGhlIGxvY2F0aW9uCmluIG1lbW9yeSBvZiB0aGUgTXVsdGlBcnJheSdzIGVsZW1lbnRzLgogIFRoZSBzdHJpZGVzIGRldGVybWluZSBob3cgaW5kZXggdmFsdWVzIGFyZSBtYXBwZWQgdG8gbWVtb3J5IG9mZnNldHMuIApUaGV5IGFjY29tb2RhdGUgYQpudW1iZXIgb2YgcG9zc2libGUgZWxlbWVudCBsYXlvdXRzLiAgRm9yIGV4YW1wbGUsIHRoZSBlbGVtZW50cyBvZiBhIDIKZGltZW5zaW9uYWwgYXJyYXkgY2FuIGJlIHN0b3JlZCBieSByb3cgKGkuZS4sIHRoZSBlbGVtZW50cyBvZiBlYWNoIHJvdwphcmUgc3RvcmVkIGNvbnRpZ3VvdXNseSkgb3IgYnkgY29sdW1uIChpLmUuLCB0aGUgZWxlbWVudHMgb2YgZWFjaApjb2x1bW4gYXJlIHN0b3JlZCBjb250aWd1b3VzbHkpLgo8L3A+PGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJpZDgzNTMzMiI+PC9hPk5vdGF0aW9uPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD5XaGF0IGZvbGxvd3MgYXJlIHRoZSBkZXNjcmlwdGlvbnMgb2Ygc3ltYm9scyB0aGF0IHdpbGwgYmUgdXNlZAp0byBkZXNjcmliZSB0aGUgTXVsdGlBcnJheSBpbnRlcmZhY2UuPC9wPjxkaXYgY2xhc3M9InRhYmxlIj48YSBuYW1lPSJpZDgzNTM0MiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+VGFibGWgMS6gTm90YXRpb248L2I+PC9wPjxkaXYgY2xhc3M9InRhYmxlLWNvbnRlbnRzIj48dGFibGUgc3VtbWFyeT0iTm90YXRpb24iIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0Ym9keT48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5BPC9jb2RlPjwvdGQ+PHRkPkEgdHlwZSB0aGF0IGlzIGEgbW9kZWwgb2YgTXVsdGlBcnJheQo8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YSxiPC9jb2RlPjwvdGQ+PHRkPk9iamVjdHMgb2YgdHlwZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TnVtRGltczwvY29kZT48L3RkPjx0ZD5UaGUgbnVtZXJpYyBkaW1lbnNpb24gcGFyYW1ldGVyIGFzc29jaWF0ZWQgd2l0aAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QTwvY29kZT4uPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRpbXM8L2NvZGU+PC90ZD48dGQ+U29tZSBudW1lcmljIGRpbWVuc2lvbiBwYXJhbWV0ZXIgc3VjaCB0aGF0IAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+MCZsdDtEaW1zJmx0O051bURpbXM8L2NvZGU+Lgo8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kaWNlczwvY29kZT48L3RkPjx0ZD5BbiBvYmplY3QgY3JlYXRlZCBieSBzb21lIG51bWJlciBvZiBjaGFpbmVkIGNhbGxzCnRvIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9nZW46Om9wZXJhdG9yW10oaW5kZXhfcmFuZ2UpPC9jb2RlPi48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfbGlzdDwvY29kZT48L3RkPjx0ZD5BbiBvYmplY3Qgd2hvc2UgdHlwZSBtb2RlbHMKPGEgaHJlZj0iLi4vLi4vdXRpbGl0eS9Db2xsZWN0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+Q29sbGVjdGlvbjwvYT4KPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmlkeDwvY29kZT48L3RkPjx0ZD5BIHNpZ25lZCBpbnRlZ3JhbCB2YWx1ZS48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+dG1wPC9jb2RlPjwvdGQ+PHRkPkFuIG9iamVjdCBvZiB0eXBlCgkgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Ym9vc3Q6OmFycmF5Jmx0O2luZGV4LE51bURpbXMmZ3Q7PC9jb2RlPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJ0YWJsZS1icmVhayI+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJpZDgzNTUwMCI+PC9hPkFzc29jaWF0ZWQgVHlwZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgo8L3A+PGRpdiBjbGFzcz0idGFibGUiPjxhIG5hbWU9ImlkODM1NTA4Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5UYWJsZaAyLqBBc3NvY2lhdGVkIFR5cGVzPC9iPjwvcD48ZGl2IGNsYXNzPSJ0YWJsZS1jb250ZW50cyI+PHRhYmxlIHN1bW1hcnk9IkFzc29jaWF0ZWQgVHlwZXMiIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj52YWx1ZV90eXBlPC9jb2RlPjwvdGQ+PHRkPlRoaXMgaXMgdGhlIHZhbHVlIHR5cGUgb2YgdGhlIGNvbnRhaW5lci4KICBJZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TnVtRGltcyA9PSAxPC9jb2RlPiwgdGhlbiB0aGlzIGlzCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5lbGVtZW50PC9jb2RlPi4gT3RoZXJ3aXNlLCB0aGlzIGlzIHRoZSB2YWx1ZSB0eXBlIG9mIHRoZQppbW1lZGlhdGVseSBuZXN0ZWQgY29udGFpbmVycy4KPC90ZD48L3RyPjx0cj48dGQ+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5yZWZlcmVuY2U8L2NvZGU+CjwvdGQ+PHRkPgpUaGlzIGlzIHRoZSByZWZlcmVuY2UgdHlwZSBvZiB0aGUgY29udGFpbmVkIHZhbHVlLiAKSWYgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk51bURpbXMgPT0gMTwvY29kZT4sIHRoZW4gdGhpcyBpcyAKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmVsZW1lbnQmYW1wOzwvY29kZT4uIE90aGVyd2lzZSwgdGhpcyBpcyB0aGUgc2FtZSB0eXBlIGFzCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj50ZW1wbGF0ZSBzdWJhcnJheSZsdDtOdW1EaW1zLTEmZ3Q7Ojp0eXBlPC9jb2RlPi4KPC90ZD48L3RyPjx0cj48dGQ+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdF9yZWZlcmVuY2U8L2NvZGU+CjwvdGQ+PHRkPgpUaGlzIGlzIHRoZSBjb25zdCByZWZlcmVuY2UgdHlwZSBvZiB0aGUgY29udGFpbmVkIHZhbHVlLgpJZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TnVtRGltcyA9PSAxPC9jb2RlPiwgdGhlbiB0aGlzIGlzICAKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0IGVsZW1lbnQmYW1wOzwvY29kZT4uIE90aGVyd2lzZSwgdGhpcyBpcyB0aGUgc2FtZQp0eXBlIGFzCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj50ZW1wbGF0ZSBjb25zdF9zdWJhcnJheSZsdDtOdW1EaW1zLTEmZ3Q7Ojp0eXBlPC9jb2RlPi4KPC90ZD48L3RyPjx0cj48dGQ+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5zaXplX3R5cGU8L2NvZGU+CjwvdGQ+PHRkPgpUaGlzIGlzIGFuIHVuc2lnbmVkIGludGVncmFsIHR5cGUuICBJdCBpcyBwcmltYXJpbHkgdXNlZCB0byBzcGVjaWZ5IGFycmF5IHNoYXBlLgo8L3RkPjwvdHI+PHRyPjx0ZD4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmRpZmZlcmVuY2VfdHlwZTwvY29kZT4KPC90ZD48dGQ+ClRoaXMgaXMgYSBzaWduZWQgaW50ZWdyYWwgdHlwZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28KaXRlcmF0b3JzLiBJdCBpcyB0aGUgc2FtZSB0eXBlIGFzCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5zdGQ6Oml0ZXJhdG9yX3RyYWl0cyZsdDtpdGVyYXRvciZndDs6OmRpZmZlcmVuY2VfdHlwZTwvY29kZT4uCjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pdGVyYXRvcjwvY29kZT48L3RkPjx0ZD4KVGhpcyBpcyBhbiBpdGVyYXRvciBvdmVyIHRoZSB2YWx1ZXMgb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkE8L2NvZGU+LgpJZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TnVtRGltcyA9PSAxPC9jb2RlPiwgdGhlbiBpdCBtb2RlbHMgCjxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9SYW5kb21BY2Nlc3NJdGVyYXRvci5odG1sIiB0YXJnZXQ9Il90b3AiPgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UmFuZG9tIEFjY2VzcyBJdGVyYXRvcjwvY29kZT48L2E+LiAKT3RoZXJ3aXNlIGl0IG1vZGVscyAKPGEgaHJlZj0iLi9pdGVyYXRvcl9jYXRlZ29yaWVzLmh0bWwjY29uY2VwdF9SYW5kb21BY2Nlc3NUcmF2ZXJzYWxJdGVyYXRvciIgdGFyZ2V0PSJfdG9wIj4KUmFuZG9tIEFjY2VzcyBUcmF2ZXJzYWwgSXRlcmF0b3I8L2E+LAo8YSBocmVmPSIuL2l0ZXJhdG9yX2NhdGVnb3JpZXMuaHRtbCNjb25jZXB0X1JlYWRhYmxlSXRlcmF0b3IiIHRhcmdldD0iX3RvcCI+ClJlYWRhYmxlIEl0ZXJhdG9yPC9hPiwgYW5kCjxhIGhyZWY9Ii4vaXRlcmF0b3JfY2F0ZWdvcmllcy5odG1sI2NvbmNlcHRfV3JpdGFibGVJdGVyYXRvciIgdGFyZ2V0PSJfdG9wIj4KV3JpdGFibGUgSXRlcmF0b3I8L2E+Lgo8L3RkPjwvdHI+PHRyPjx0ZD4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0X2l0ZXJhdG9yPC9jb2RlPgo8L3RkPjx0ZD4KVGhpcyBpcyB0aGUgY29uc3QgaXRlcmF0b3Igb3ZlciB0aGUgdmFsdWVzIG9mIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5BPC9jb2RlPi4KPC90ZD48L3RyPjx0cj48dGQ+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5yZXZlcnNlX2l0ZXJhdG9yPC9jb2RlPgo8L3RkPjx0ZD4KVGhpcyBpcyB0aGUgcmV2ZXJzZWQgaXRlcmF0b3IsIHVzZWQgdG8gaXRlcmF0ZSBiYWNrd2FyZHMgb3ZlciB0aGUgdmFsdWVzIG9mIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QTwvY29kZT4uCjwvdGQ+PC90cj48dHI+PHRkPgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcjwvY29kZT4KPC90ZD48dGQ+ClRoaXMgaXMgdGhlIHJldmVyc2VkIGNvbnN0IGl0ZXJhdG9yLgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QTwvY29kZT4uCjwvdGQ+PC90cj48dHI+PHRkPgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ZWxlbWVudDwvY29kZT4KPC90ZD48dGQ+ClRoaXMgaXMgdGhlIHR5cGUgb2Ygb2JqZWN0cyBzdG9yZWQgYXQgdGhlIGJhc2Ugb2YgdGhlCmhpZXJhcmNoeSBvZiBNdWx0aUFycmF5cy4gSXQgaXMgdGhlIHNhbWUgYXMKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnRlbXBsYXRlIHN1YmFycmF5Jmx0OzEmZ3Q7Ojp2YWx1ZV90eXBlPC9jb2RlPgo8L3RkPjwvdHI+PHRyPjx0ZD4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4PC9jb2RlPgo8L3RkPjx0ZD4KVGhpcyBpcyBhIHNpZ25lZCBpbnRlZ3JhbCB0eXBlIHVzZWQgZm9yIGluZGV4aW5nIGludG8gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkE8L2NvZGU+LiBJdCAKaXMgYWxzbyB1c2VkIHRvIHJlcHJlc2VudCBzdHJpZGVzIGFuZCBpbmRleCBiYXNlcy4KPC90ZD48L3RyPjx0cj48dGQ+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9nZW48L2NvZGU+CjwvdGQ+PHRkPgpUaGlzIHR5cGUgaXMgdXNlZCB0byBjcmVhdGUgYSB0dXBsZSBvZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2U8L2NvZGU+cyAKcGFzc2VkIHRvIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcGVyYXRvcltdPC9jb2RlPiB0byBjcmVhdGUKYW4gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmFycmF5X3ZpZXcmbHQ7RGltcyZndDs6OnR5cGU8L2NvZGU+IG9iamVjdC4KPC90ZD48L3RyPjx0cj48dGQ+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9yYW5nZTwvY29kZT4KPC90ZD48dGQ+ClRoaXMgdHlwZSBzcGVjaWZpZXMgYSByYW5nZSBvZiBpbmRpY2VzIG92ZXIgc29tZSBkaW1lbnNpb24gb2YgYQpNdWx0aUFycmF5LiAgVGhpcyByYW5nZSB3aWxsIGJlIHZpc2libGUgdGhyb3VnaCBhbiAKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmFycmF5X3ZpZXcmbHQ7RGltcyZndDs6OnR5cGU8L2NvZGU+IG9iamVjdC4KPC90ZD48L3RyPjx0cj48dGQ+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj50ZW1wbGF0ZSBzdWJhcnJheSZsdDtEaW1zJmd0Ozo6dHlwZTwvY29kZT4KPC90ZD48dGQ+ClRoaXMgaXMgc3ViYXJyYXkgdHlwZSB3aXRoIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5EaW1zPC9jb2RlPiBkaW1lbnNpb25zLgpJdCBpcyB0aGUgcmVmZXJlbmNlIHR5cGUgb2YgdGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4oTnVtRGltcyAtIERpbXMpPC9jb2RlPgpkaW1lbnNpb24gb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkE8L2NvZGU+IGFuZCBhbHNvIG1vZGVscwpNdWx0aUFycmF5Lgo8L3RkPjwvdHI+PHRyPjx0ZD4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnRlbXBsYXRlIGNvbnN0X3N1YmFycmF5Jmx0O0RpbXMmZ3Q7Ojp0eXBlPC9jb2RlPgo8L3RkPjx0ZD4KVGhpcyBpcyB0aGUgY29uc3Qgc3ViYXJyYXkgdHlwZS4KPC90ZD48L3RyPjx0cj48dGQ+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj50ZW1wbGF0ZSBhcnJheV92aWV3Jmx0O0RpbXMmZ3Q7Ojp0eXBlPC9jb2RlPgo8L3RkPjx0ZD4KVGhpcyBpcyB0aGUgdmlldyB0eXBlIHdpdGggPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRpbXM8L2NvZGU+IGRpbWVuc2lvbnMuICBJdCBpcwpyZXR1cm5lZCBieSBjYWxsaW5nIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcGVyYXRvcltdKDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRpY2VzPC9jb2RlPik8L2NvZGU+LgpJdCBtb2RlbHMgTXVsdGlBcnJheS4KPC90ZD48L3RyPjx0cj48dGQ+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj50ZW1wbGF0ZQpjb25zdF9hcnJheV92aWV3Jmx0O0RpbXMmZ3Q7Ojp0eXBlPC9jb2RlPgo8L3RkPjx0ZD4KVGhpcyBpcyB0aGUgY29uc3QgdmlldyB0eXBlIHdpdGggPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkRpbXM8L2NvZGU+IGRpbWVuc2lvbnMuCjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJ0YWJsZS1icmVhayI+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJpZDgzNjAxMCI+PC9hPlZhbGlkIGV4cHJlc3Npb25zPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJ0YWJsZSI+PGEgbmFtZT0iaWQ4MzYwMTQiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPlRhYmxloDMuoFZhbGlkIEV4cHJlc3Npb25zPC9iPjwvcD48ZGl2IGNsYXNzPSJ0YWJsZS1jb250ZW50cyI+PHRhYmxlIHN1bW1hcnk9IlZhbGlkIEV4cHJlc3Npb25zIiBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPkV4cHJlc3Npb248L3RoPjx0aD5SZXR1cm4gdHlwZTwvdGg+PHRoPlNlbWFudGljczwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5BOjpkaW1lbnNpb25hbGl0eTwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+c2l6ZV90eXBlPC9jb2RlPjwvdGQ+PHRkPlRoaXMgY29tcGlsZS10aW1lIGNvbnN0YW50IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZgpkaW1lbnNpb25zIG9mIHRoZSBhcnJheSAobm90ZSB0aGF0IAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QTo6ZGltZW5zaW9uYWxpdHkgPT0gTnVtRGltczwvY29kZT4pLjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hLnNoYXBlKCk8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0IHNpemVfdHlwZSo8L2NvZGU+PC90ZD48dGQ+ClRoaXMgcmV0dXJucyBhIGxpc3Qgb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk51bURpbXM8L2NvZGU+IGVsZW1lbnRzIHNwZWNpZnlpbmcgdGhlCmV4dGVudCBvZiBlYWNoIGFycmF5IGRpbWVuc2lvbi4KPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmEuc3RyaWRlcygpPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdCBpbmRleCo8L2NvZGU+PC90ZD48dGQ+ClRoaXMgcmV0dXJucyBhIGxpc3Qgb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk51bURpbXM8L2NvZGU+IGVsZW1lbnRzIHNwZWNpZnlpbmcgdGhlCnN0cmlkZSBhc3NvY2lhdGVkIHdpdGggZWFjaCBhcnJheSBkaW1lbnNpb24uIFdoZW4gYWNjZXNzaW5nIHZhbHVlcywKc3RyaWRlcyBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBhbiBlbGVtZW50J3MgbG9jYXRpb24gaW4gbWVtb3J5Lgo8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YS5pbmRleF9iYXNlcygpPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdCBpbmRleCo8L2NvZGU+PC90ZD48dGQ+ClRoaXMgcmV0dXJucyBhIGxpc3Qgb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk51bURpbXM8L2NvZGU+IGVsZW1lbnRzIHNwZWNpZnlpbmcgdGhlCm51bWVyaWMgaW5kZXggb2YgdGhlIGZpcnN0IGVsZW1lbnQgZm9yIGVhY2ggYXJyYXkgZGltZW5zaW9uLgo8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YS5vcmlnaW4oKTwvY29kZT48L3RkPjx0ZD4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmVsZW1lbnQqPC9jb2RlPiBpZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YTwvY29kZT4gaXMgbXV0YWJsZSwKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0IGVsZW1lbnQqPC9jb2RlPiBvdGhlcndpc2UuCjwvdGQ+PHRkPgpUaGlzIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGVsZW1lbnQgYWNjZXNzZWQgYnkgdGhlIGV4cHJlc3Npb24KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmFbMF1bMF0uLi5bMF0uPC9jb2RlPi4gSWYgdGhlIGluZGV4IGJhc2VzIGFyZSBwb3NpdGl2ZSwKdGhpcyBlbGVtZW50IHdvbid0IGV4aXN0LCBidXQgdGhlIGFkZHJlc3MgY2FuIHN0aWxsIGJlIHVzZWQgdG8gbG9jYXRlCmEgdmFsaWQgZWxlbWVudCBnaXZlbiBpdHMgaW5kaWNlcy4KPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmEubnVtX2RpbWVuc2lvbnMoKTwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+c2l6ZV90eXBlPC9jb2RlPjwvdGQ+PHRkPlRoaXMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpbWVuc2lvbnMgb2YgdGhlIGFycmF5Cihub3RlIHRoYXQgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmEubnVtX2RpbWVuc2lvbnMoKSA9PSBOdW1EaW1zPC9jb2RlPikuPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmEubnVtX2VsZW1lbnRzKCk8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPnNpemVfdHlwZTwvY29kZT48L3RkPjx0ZD5UaGlzIHJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBjb250YWluZWQKaW4gdGhlIGFycmF5LiBJdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgY29kZToKPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgpzdGQ6OmFjY3VtdWxhdGUoYS5zaGFwZSgpLGEuc2hhcGUrYS5udW1fZGltZW5zaW9ucygpLAogICAgc2l6ZV90eXBlKDEpLHN0ZDo6bXVsdGlwbGllcyZsdDtzaXplX3R5cGUmZ3Q7KCkpOwo8L3ByZT4KPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmEuc2l6ZSgpPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5zaXplX3R5cGU8L2NvZGU+PC90ZD48dGQ+ClRoaXMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHZhbHVlcyBjb250YWluZWQgaW4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmE8L2NvZGU+LiBJdCBpcyBlcXVpdmFsZW50IHRvIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hLnNoYXBlKClbMF07PC9jb2RlPgo8L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YShpbmRleF9saXN0KTwvY29kZT48L3RkPjx0ZD4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmVsZW1lbnQmYW1wOzwvY29kZT47ICBpZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YTwvY29kZT4gaXMgbXV0YWJsZSwKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0IGVsZW1lbnQmYW1wOzwvY29kZT4gb3RoZXJ3aXNlLgogICAgICAgICAgICA8L3RkPjx0ZD4KVGhpcyBleHByZXNzaW9uIGFjY2Vzc2VzIGEgc3BlY2lmaWMgZWxlbWVudCBvZgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YTwvY29kZT4uPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X2xpc3Q8L2NvZGU+IGlzIHRoZSB1bmlxdWUgc2V0Cm9mIGluZGljZXMgdGhhdCBhZGRyZXNzIHRoZSBlbGVtZW50IHJldHVybmVkLiAgSXQgaXMgCmVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBjb2RlIChkaXNyZWdhcmRpbmcgaW50ZXJtZWRpYXRlIHRlbXBvcmFyaWVzKToKPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgLy8gbXVsdGlwbHkgaW5kaWNlcyBieSBzdHJpZGVzCiAgICBzdGQ6OnRyYW5zZm9ybShpbmRleF9saXN0LmJlZ2luKCksIGluZGV4X2xpc3QuZW5kKCksCiAgICAgIGEuc3RyaWRlcygpLCB0bXAuYmVnaW4oKSwgc3RkOjptdWx0aXBsaWVzJmx0O2luZGV4Jmd0OygpKSwKCiAgICAvLyBhZGQgdGhlIHN1bSBvZiB0aGUgcHJvZHVjdHMgdG8gdGhlIG9yaWdpbgogICAgKnN0ZDo6YWNjdW11bGF0ZSh0bXAuYmVnaW4oKSwgdG1wLmVuZCgpLCBhLm9yaWdpbigpKTsKPC9wcmU+CjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hLmJlZ2luKCk8L2NvZGU+PC90ZD48dGQ+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pdGVyYXRvcjwvY29kZT4gaWYgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmE8L2NvZGU+IGlzIG11dGFibGUsCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdF9pdGVyYXRvcjwvY29kZT4gb3RoZXJ3aXNlLgogICAgICAgICAgICA8L3RkPjx0ZD5UaGlzIHJldHVybnMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGJlZ2lubmluZyBvZgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YTwvY29kZT4uPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmEuZW5kKCk8L2NvZGU+PC90ZD48dGQ+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pdGVyYXRvcjwvY29kZT4gaWYgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmE8L2NvZGU+IGlzIG11dGFibGUsCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdF9pdGVyYXRvcjwvY29kZT4gb3RoZXJ3aXNlLgogICAgICAgICAgICA8L3RkPjx0ZD5UaGlzIHJldHVybnMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YTwvY29kZT4uPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmEucmJlZ2luKCk8L2NvZGU+PC90ZD48dGQ+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5yZXZlcnNlX2l0ZXJhdG9yPC9jb2RlPiBpZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YTwvY29kZT4gaXMgbXV0YWJsZSwgCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdF9yZXZlcnNlX2l0ZXJhdG9yPC9jb2RlPiBvdGhlcndpc2UuCiAgICAgICAgICAgIDwvdGQ+PHRkPlRoaXMgcmV0dXJucyBhIHJldmVyc2UgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlCmJlZ2lubmluZyBvZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YTwvY29kZT4gcmV2ZXJzZWQuCjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hLnJlbmQoKTwvY29kZT48L3RkPjx0ZD4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnJldmVyc2VfaXRlcmF0b3I8L2NvZGU+IGlmIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hPC9jb2RlPiBpcyBtdXRhYmxlLCAKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0X3JldmVyc2VfaXRlcmF0b3I8L2NvZGU+IG90aGVyd2lzZS4KPC90ZD48dGQ+ClRoaXMgcmV0dXJucyBhIHJldmVyc2UgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YTwvY29kZT4KcmV2ZXJzZWQuCjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hW2lkeF08L2NvZGU+PC90ZD48dGQ+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5yZWZlcmVuY2U8L2NvZGU+IGlmIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hPC9jb2RlPiBpcyBtdXRhYmxlLAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Y29uc3RfcmVmZXJlbmNlPC9jb2RlPiBvdGhlcndpc2UuCiAgICAgICAgICAgIDwvdGQ+PHRkPgpUaGlzIHJldHVybnMgYSByZWZlcmVuY2UgdHlwZSB0aGF0IGlzIGJvdW5kIHRvIHRoZSBpbmRleAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aWR4PC9jb2RlPiB2YWx1ZSBvZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YTwvY29kZT4uICBOb3RlIHRoYXQgaWYKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmk8L2NvZGU+IGlzIHRoZSBpbmRleCBiYXNlIGZvciB0aGlzIGRpbWVuc2lvbiwgdGhlIGFib3ZlCmV4cHJlc3Npb24gcmV0dXJucyB0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPihpZHgtaSk8L2NvZGU+dGggZWxlbWVudCAoY291bnRpbmcKZnJvbSB6ZXJvKS4gIFRoZSBleHByZXNzaW9uIGlzIGVxdWl2YWxlbnQgdG8KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiooYS5iZWdpbigpK2lkeC1hLmluZGV4X2Jhc2VzKClbMF0pOzwvY29kZT4uCjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hW2luZGljZXNdPC9jb2RlPjwvdGQ+PHRkPgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YXJyYXlfdmlldyZsdDtEaW1zJmd0Ozo6dHlwZTwvY29kZT4gaWYKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmE8L2NvZGU+IGlzIG11dGFibGUsCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdF9hcnJheV92aWV3Jmx0O0RpbXMmZ3Q7Ojp0eXBlPC9jb2RlPiBvdGhlcndpc2UuCiAgICAgICAgICAgIDwvdGQ+PHRkPgpUaGlzIGV4cHJlc3Npb24gZ2VuZXJhdGVzIGEgdmlldyBvZiB0aGUgYXJyYXkgZGV0ZXJtaW5lZCBieSB0aGUKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X3JhbmdlPC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4PC9jb2RlPiB2YWx1ZXMKIHVzZWQgdG8gY29uc3RydWN0IDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRpY2VzPC9jb2RlPi4KPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmEgPT0gYjwvY29kZT48L3RkPjx0ZD5ib29sPC90ZD48dGQ+VGhpcyBwZXJmb3JtcyBhIGxleGljb2dyYXBoaWNhbCBjb21wYXJpc29uIG9mIHRoZQp2YWx1ZXMgb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmE8L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YjwvY29kZT4uICBUaGUgZWxlbWVudAp0eXBlIG11c3QgbW9kZWwgPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0VxdWFsaXR5Q29tcGFyYWJsZS5odG1sIiB0YXJnZXQ9Il90b3AiPkVxdWFsaXR5Q29tcGFyYWJsZTwvYT4gZm9yIHRoaXMKZXhwcmVzc2lvbiB0byBiZSB2YWxpZC48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YSAmbHQ7IGI8L2NvZGU+PC90ZD48dGQ+Ym9vbDwvdGQ+PHRkPlRoaXMgcGVyZm9ybXMgYSBsZXhpY29ncmFwaGljYWwgY29tcGFyaXNvbiBvZiB0aGUKdmFsdWVzIG9mIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hPC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmI8L2NvZGU+LiAgVGhlIGVsZW1lbnQKdHlwZSBtdXN0IG1vZGVsIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9MZXNzVGhhbkNvbXBhcmFibGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj5MZXNzVGhhbkNvbXBhcmFibGU8L2E+IGZvciB0aGlzCmV4cHJlc3Npb24gdG8gYmUgdmFsaWQuPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmEgJmx0Oz0gYjwvY29kZT48L3RkPjx0ZD5ib29sPC90ZD48dGQ+VGhpcyBwZXJmb3JtcyBhIGxleGljb2dyYXBoaWNhbCBjb21wYXJpc29uIG9mIHRoZQp2YWx1ZXMgb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmE8L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YjwvY29kZT4uICBUaGUgZWxlbWVudAp0eXBlIG11c3QgbW9kZWwgPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0VxdWFsaXR5Q29tcGFyYWJsZS5odG1sIiB0YXJnZXQ9Il90b3AiPkVxdWFsaXR5Q29tcGFyYWJsZTwvYT4gYW5kCjxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9MZXNzVGhhbkNvbXBhcmFibGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj5MZXNzVGhhbkNvbXBhcmFibGU8L2E+IGZvciB0aGlzCmV4cHJlc3Npb24gdG8gYmUgdmFsaWQuPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmEgJmd0OyBiPC9jb2RlPjwvdGQ+PHRkPmJvb2w8L3RkPjx0ZD5UaGlzIHBlcmZvcm1zIGEgbGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmlzb24gb2YgdGhlCnZhbHVlcyBvZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YTwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5iPC9jb2RlPi4gIFRoZSBlbGVtZW50CnR5cGUgbXVzdCBtb2RlbCA8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvRXF1YWxpdHlDb21wYXJhYmxlLmh0bWwiIHRhcmdldD0iX3RvcCI+RXF1YWxpdHlDb21wYXJhYmxlPC9hPiBhbmQgCjxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9MZXNzVGhhbkNvbXBhcmFibGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj5MZXNzVGhhbkNvbXBhcmFibGU8L2E+IGZvciB0aGlzCmV4cHJlc3Npb24gdG8gYmUgdmFsaWQuPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmEgJmd0Oz0gYjwvY29kZT48L3RkPjx0ZD5ib29sPC90ZD48dGQ+VGhpcyBwZXJmb3JtcyBhIGxleGljb2dyYXBoaWNhbCBjb21wYXJpc29uIG9mIHRoZQp2YWx1ZXMgb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmE8L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YjwvY29kZT4uICBUaGUgZWxlbWVudAp0eXBlIG11c3QgbW9kZWwgPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0xlc3NUaGFuQ29tcGFyYWJsZS5odG1sIiB0YXJnZXQ9Il90b3AiPkxlc3NUaGFuQ29tcGFyYWJsZTwvYT4gZm9yIHRoaXMKZXhwcmVzc2lvbiB0byBiZSB2YWxpZC48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjwvZGl2PjxiciBjbGFzcz0idGFibGUtYnJlYWsiPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iaWQ4MzY4MjgiPjwvYT5Db21wbGV4aXR5IGd1YXJhbnRlZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2Pjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5iZWdpbigpPC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmVuZCgpPC9jb2RlPiBleGVjdXRlIGluIGFtb3J0aXplZApjb25zdGFudCB0aW1lLgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+c2l6ZSgpPC9jb2RlPiBleGVjdXRlcyBpbiBhdCBtb3N0IGxpbmVhciB0aW1lIGluIHRoZSAKTXVsdGlBcnJheSdzIHNpemUuIAo8L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImlkODM2ODUyIj48L2E+SW52YXJpYW50czwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0idGFibGUiPjxhIG5hbWU9ImlkODM2ODU4Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5UYWJsZaA0LqBJbnZhcmlhbnRzPC9iPjwvcD48ZGl2IGNsYXNzPSJ0YWJsZS1jb250ZW50cyI+PHRhYmxlIHN1bW1hcnk9IkludmFyaWFudHMiIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0Ym9keT48dHI+PHRkPlZhbGlkIHJhbmdlPC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlthLmJlZ2luKCksYS5lbmQoKSk8L2NvZGU+IGlzIGEgdmFsaWQgcmFuZ2UuCiAgICAgICAgICAgIDwvdGQ+PC90cj48dHI+PHRkPlJhbmdlIHNpemU8L3RkPjx0ZD4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmEuc2l6ZSgpID09IHN0ZDo6ZGlzdGFuY2UoYS5iZWdpbigpLGEuZW5kKCkpOzwvY29kZT4uCjwvdGQ+PC90cj48dHI+PHRkPkNvbXBsZXRlbmVzczwvdGQ+PHRkPgpJdGVyYXRpb24gdGhyb3VnaCB0aGUgcmFuZ2UgCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5bYS5iZWdpbigpLGEuZW5kKCkpPC9jb2RlPiB3aWxsIHRyYXZlcnNlIGFjcm9zcyBldmVyeQo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+dmFsdWVfdHlwZTwvY29kZT4gb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmE8L2NvZGU+Lgo8L3RkPjwvdHI+PHRyPjx0ZD5BY2Nlc3NvciBFcXVpdmFsZW5jZTwvdGQ+PHRkPgpDYWxsaW5nIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hW2ExXVthMl0uLi5bYU5dPC9jb2RlPiB3aGVyZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Tj09TnVtRGltczwvY29kZT4KeWllbGRzIHRoZSBzYW1lIHJlc3VsdCBhcyBjYWxsaW5nIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YShpbmRleF9saXN0KTwvY29kZT4sIHdoZXJlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9saXN0PC9jb2RlPgppcyBhIDxhIGhyZWY9Ii4uLy4uL3V0aWxpdHkvQ29sbGVjdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPkNvbGxlY3Rpb248L2E+IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YTEuLi5hTjwvY29kZT4uCjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJ0YWJsZS1icmVhayI+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJ2aWV3X3R5cGVzIj48L2E+QXNzb2NpYXRlZCBUeXBlcyBmb3IgVmlld3M8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPlRoZSBmb2xsb3dpbmcgTXVsdGlBcnJheSAgYXNzb2NpYXRlZCAKdHlwZXMgZGVmaW5lIHRoZSBpbnRlcmZhY2UgZm9yIGNyZWF0aW5nIHZpZXdzIG9mIGV4aXN0aW5nCk11bHRpQXJyYXlzLiBUaGVpciBpbnRlcmZhY2VzIGFuZCByb2xlcyBpbiB0aGUKY29uY2VwdCBhcmUgZGVzY3JpYmVkIGJlbG93LjwvcD48ZGl2IGNsYXNzPSJzZWN0MyIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImluZGV4X3JhbmdlIj48L2E+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X3JhbmdlPC9jb2RlPjwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X3JhbmdlPC9jb2RlPiBvYmplY3RzIHJlcHJlc2VudCBoYWxmLW9wZW4Kc3RyaWRlZCBpbnRlcnZhbHMuICBUaGV5IGFyZSBhZ2dyZWdhdGVkICh1c2luZyBhbgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfZ2VuPC9jb2RlPiBvYmplY3QpIGFuZCBwYXNzZWQgdG8gCmEgTXVsdGlBcnJheSdzIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcGVyYXRvcltdPC9jb2RlPgp0byBjcmVhdGUgYW4gYXJyYXkgdmlldy4gV2hlbiBjcmVhdGluZyBhIHZpZXcsIAplYWNoIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9yYW5nZTwvY29kZT4gZGVub3RlcyBhIHJhbmdlIG9mCnZhbGlkIGluZGljZXMgYWxvbmcgb25lIGRpbWVuc2lvbiBvZiBhIE11bHRpQXJyYXkuCkVsZW1lbnRzIHRoYXQgYXJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlIHNldCBvZiByYW5nZXMgc3BlY2lmaWVkIHdpbGwgYmUgCmluY2x1ZGVkIGluIHRoZSBjb25zdHJ1Y3RlZCB2aWV3LiBJbiBzb21lIGNhc2VzLCBhbgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2U8L2NvZGU+IGlzIGNyZWF0ZWQgd2l0aG91dCBzcGVjaWZ5aW5nIHN0YXJ0Cm9yIGZpbmlzaCB2YWx1ZXMuICBJbiB0aG9zZSBjYXNlcywgdGhlIG9iamVjdCBpcyBpbnRlcnByZXRlZCB0bwpzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgTXVsdGlBcnJheSBkaW1lbnNpb24KYW5kIGVuZCBhdCBpdHMgZW5kLjwvcD48cD4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X3JhbmdlPC9jb2RlPiBvYmplY3RzIGNhbiBiZSBjb25zdHJ1Y3RlZCBhbmQgbW9kaWZpZWQgCnNldmVyYWwgd2F5cyBpbiBvcmRlciB0byBhbGxvdyBjb252ZW5pZW50IGFuZCBjbGVhciBleHByZXNzaW9uIG9mIGEKcmFuZ2Ugb2YgaW5kaWNlcy4gIFRvIHNwZWNpZnkgcmFuZ2VzLCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2U8L2NvZGU+CnN1cHBvcnRzIGEgc2V0IG9mIGNvbnN0cnVjdG9ycywgbXV0YXRpbmcgbWVtYmVyIGZ1bmN0aW9ucywgYW5kIGEgbm92ZWwgCnNwZWNpZmljYXRpb24gaW52b2x2aW5nIGluZXF1YWxpdHkgb3BlcmF0b3JzLiAgVXNpbmcgaW5lcXVhbGl0eQpvcGVyYXRvcnMsICBhIGhhbGYgb3BlbiByYW5nZSBbNSwxMCkgY2FuIGJlIHNwZWNpZmllZCBhcyBmb2xsb3dzOgo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjUgJmx0Oz0gaW5kZXhfcmFuZ2UoKSAmbHQ7IDEwOzwvcHJlPjxwPiBvcgo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjQgJmx0OyBpbmRleF9yYW5nZSgpICZsdDs9IDk7PC9wcmU+PHA+IGFuZCBzbyBvbi4KClRoZSBmb2xsb3dpbmcgZGVzY3JpYmVzIHRoZQo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2U8L2NvZGU+IGludGVyZmFjZS4KPC9wPjxkaXYgY2xhc3M9InRhYmxlIj48YSBuYW1lPSJpZDgzNzA4NiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+VGFibGWgNS6gTm90YXRpb248L2I+PC9wPjxkaXYgY2xhc3M9InRhYmxlLWNvbnRlbnRzIj48dGFibGUgc3VtbWFyeT0iTm90YXRpb24iIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0Ym9keT48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pPC9jb2RlPjwvdGQ+PHRkPkFuIG9iamVjdCBvZiB0eXBlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9yYW5nZTwvY29kZT4uPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmlkeCxpZHgxLGlkeDIsaWR4MzwvY29kZT48L3RkPjx0ZD5PYmplY3RzIG9mIHR5cGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4PC9jb2RlPi48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjwvZGl2PjxiciBjbGFzcz0idGFibGUtYnJlYWsiPjxkaXYgY2xhc3M9InRhYmxlIj48YSBuYW1lPSJpZDgzNzEzOSI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+VGFibGWgNi6gQXNzb2NpYXRlZCBUeXBlczwvYj48L3A+PGRpdiBjbGFzcz0idGFibGUtY29udGVudHMiPjx0YWJsZSBzdW1tYXJ5PSJBc3NvY2lhdGVkIFR5cGVzIiBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5UeXBlPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXg8L2NvZGU+PC90ZD48dGQ+VGhpcyBpcyBhIHNpZ25lZCBpbnRlZ3JhbCB0eXBlLiBJdCBpcyB1c2VkIHRvCnNwZWNpZnkgdGhlIHN0YXJ0LCBmaW5pc2gsIGFuZCBzdHJpZGUgdmFsdWVzLjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5zaXplX3R5cGU8L2NvZGU+PC90ZD48dGQ+VGhpcyBpcyBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlLiBJdCBpcyB1c2VkIHRvCnJlcG9ydCB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UgYW4gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X3JhbmdlPC9jb2RlPiAKcmVwcmVzZW50cy48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjwvZGl2PjxiciBjbGFzcz0idGFibGUtYnJlYWsiPjxkaXYgY2xhc3M9InRhYmxlIj48YSBuYW1lPSJpZDgzNzIwMiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+VGFibGWgNy6gVmFsaWQgRXhwcmVzc2lvbnM8L2I+PC9wPjxkaXYgY2xhc3M9InRhYmxlLWNvbnRlbnRzIj48dGFibGUgc3VtbWFyeT0iVmFsaWQgRXhwcmVzc2lvbnMiIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48Y29sPjwvY29sZ3JvdXA+PHRoZWFkPjx0cj48dGg+RXhwcmVzc2lvbjwvdGg+PHRoPlJldHVybiB0eXBlPC90aD48dGg+U2VtYW50aWNzPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X3JhbmdlKGlkeDEsaWR4MixpZHgzKTwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2U8L2NvZGU+PC90ZD48dGQ+VGhpcyBjb25zdHJ1Y3RzIGFuIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9yYW5nZTwvY29kZT4KCSAgICByZXByZXNlbnRpbmcgdGhlIGludGVydmFsIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5baWR4MSxpZHgyKTwvY29kZT4KIHdpdGggc3RyaWRlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pZHgzPC9jb2RlPi48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2UoaWR4MSxpZHgyKTwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2U8L2NvZGU+PC90ZD48dGQ+VGhpcyBjb25zdHJ1Y3RzIGFuIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9yYW5nZTwvY29kZT4KCSAgICByZXByZXNlbnRpbmcgdGhlIGludGVydmFsIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5baWR4MSxpZHgyKTwvY29kZT4KIHdpdGggdW5pdCBzdHJpZGUuIEl0IGlzIGVxdWl2YWxlbnQgdG8KCSAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2UoaWR4MSxpZHgyLDEpPC9jb2RlPi48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2UoKTwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2U8L2NvZGU+PC90ZD48dGQ+VGhpcyBjb25zdHJ1Y3QgYW4gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X3JhbmdlPC9jb2RlPgp3aXRoIHVuc3BlY2lmaWVkIHN0YXJ0IGFuZCBmaW5pc2ggdmFsdWVzLjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pLnN0YXJ0KGlkeDEpPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleCZhbXA7PC9jb2RlPjwvdGQ+PHRkPlRoaXMgc2V0cyB0aGUgc3RhcnQgaW5kZXggb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmk8L2NvZGU+IHRvCgkgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmlkeDwvY29kZT4uPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmkuZmluaXNoKGlkeCk8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4JmFtcDs8L2NvZGU+PC90ZD48dGQ+VGhpcyBzZXRzIHRoZSBmaW5pc2ggaW5kZXggb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmk8L2NvZGU+IHRvIAogICAgICAgICAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aWR4PC9jb2RlPi48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aS5zdHJpZGUoaWR4KTwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXgmYW1wOzwvY29kZT48L3RkPjx0ZD5UaGlzIHNldHMgdGhlIHN0cmlkZSBsZW5ndGggb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmk8L2NvZGU+IHRvCiAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pZHg8L2NvZGU+LjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pLnN0YXJ0KCk8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4PC9jb2RlPjwvdGQ+PHRkPlRoaXMgcmV0dXJucyB0aGUgc3RhcnQgaW5kZXggb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmk8L2NvZGU+LjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pLmZpbmlzaCgpPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleDwvY29kZT48L3RkPjx0ZD5UaGlzIHJldHVybnMgdGhlIGZpbmlzaCBpbmRleCBvZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aTwvY29kZT4uPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmkuc3RyaWRlKCk8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4PC9jb2RlPjwvdGQ+PHRkPlRoaXMgcmV0dXJucyB0aGUgc3RyaWRlIGxlbmd0aCBvZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aTwvY29kZT4uPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmkuZ2V0X3N0YXJ0KGlkeCk8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4PC9jb2RlPjwvdGQ+PHRkPklmIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pPC9jb2RlPiBzcGVjaWZpZXMgYSBzdGFydAp2YWx1ZSwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pLnN0YXJ0KCk8L2NvZGU+LiBPdGhlcndpc2UgaXQKcmV0dXJucyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aWR4PC9jb2RlPi48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aS5nZXRfZmluaXNoKGlkeCk8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4PC9jb2RlPjwvdGQ+PHRkPklmIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pPC9jb2RlPiBzcGVjaWZpZXMgYSBmaW5pc2gKdmFsdWUsIHRoaXMgaXMgZXF1aXZhbGVudCB0byA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aS5maW5pc2goKTwvY29kZT4uIE90aGVyd2lzZSBpdApyZXR1cm5zIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pZHg8L2NvZGU+LjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pLnNpemUoaWR4KTwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+c2l6ZV90eXBlPC9jb2RlPjwvdGQ+PHRkPklmIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pPC9jb2RlPiBzcGVjaWZpZXMgYSBib3RoIGZpbmlzaCBhbmQKc3RhcnQgdmFsdWVzLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPihpLmZpbmlzaCgpLWkuc3RhcnQoKSkvaS5zdHJpZGUoKTwvY29kZT4uIE90aGVyd2lzZSBpdApyZXR1cm5zIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pZHg8L2NvZGU+LjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pICZsdDsgaWR4PC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleDwvY29kZT48L3RkPjx0ZD5UaGlzIGlzIGFub3RoZXIgc3ludGF4IGZvciBzcGVjaWZ5aW5nIHRoZSBmaW5pc2gKdmFsdWUuIFRoaXMgbm90YXRpb24gZG9lcyBub3QgaW5jbHVkZSAKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmlkeDwvY29kZT4gaW4gdGhlIHJhbmdlIG9mIHZhbGlkIGluZGljZXMuIEl0IGlzIGVxdWl2YWxlbnQgdG8gCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9yYW5nZShyLnN0YXJ0KCksIGlkeCwgci5zdHJpZGUoKSk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmkgJmx0Oz0gaWR4PC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleDwvY29kZT48L3RkPjx0ZD5UaGlzIGlzIGFub3RoZXIgc3ludGF4IGZvciBzcGVjaWZ5aW5nIHRoZSBmaW5pc2gKdmFsdWUuIFRoaXMgbm90YXRpb24gaW5jbHVkZXMgCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pZHg8L2NvZGU+IGluIHRoZSByYW5nZSBvZiB2YWxpZCBpbmRpY2VzLiBJdCBpcyBlcXVpdmFsZW50IHRvIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2Uoci5zdGFydCgpLCBpZHggKyAxLCByLnN0cmlkZSgpKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aWR4ICZsdDsgaTwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXg8L2NvZGU+PC90ZD48dGQ+VGhpcyBpcyBhbm90aGVyIHN5bnRheCBmb3Igc3BlY2lmeWluZyB0aGUgc3RhcnQKdmFsdWUuIFRoaXMgbm90YXRpb24gZG9lcyBub3QgaW5jbHVkZSAKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmlkeDwvY29kZT4gaW4gdGhlIHJhbmdlIG9mIHZhbGlkIGluZGljZXMuIEl0IGlzIGVxdWl2YWxlbnQgdG8gCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9yYW5nZShpZHggKyAxLCBpLmZpbmlzaCgpLCBpLnN0cmlkZSgpKTwvY29kZT4uPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmlkeCAmbHQ7PSBpPC9jb2RlPjwvdGQ+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleDwvY29kZT48L3RkPjx0ZD5UaGlzIGlzIGFub3RoZXIgc3ludGF4IGZvciBzcGVjaWZ5aW5nIHRoZSBzdGFydAp2YWx1ZS4gVGhpcyBub3RhdGlvbiBpbmNsdWRlcwo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aWR4MTwvY29kZT4gaW4gdGhlIHJhbmdlIG9mIHZhbGlkIGluZGljZXMuIEl0IGlzIGVxdWl2YWxlbnQgdG8gCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9yYW5nZShpZHgsIGkuZmluaXNoKCksIGkuc3RyaWRlKCkpPC9jb2RlPi48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aSArIGlkeDwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXg8L2NvZGU+PC90ZD48dGQ+VGhpcyBleHByZXNzaW9uIHNoaWZ0cyB0aGUgc3RhcnQgYW5kIGZpbmlzaCB2YWx1ZXMKb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmk8L2NvZGU+IHVwIGJ5IDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pZHg8L2NvZGU+LiBJdCBpcyBlcXVpdmFsZW50IHRvIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2Uoci5zdGFydCgpK2lkeDEsIHIuZmluaXNoKCkraWR4LCByLnN0cmlkZSgpKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aSAtIGlkeDwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXg8L2NvZGU+PC90ZD48dGQ+VGhpcyBleHByZXNzaW9uIHNoaWZ0cyB0aGUgc3RhcnQgYW5kIGZpbmlzaCB2YWx1ZXMKb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmk8L2NvZGU+IHVwIGJ5IDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pZHg8L2NvZGU+LiBJdCBpcyBlcXVpdmFsZW50IHRvIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2Uoci5zdGFydCgpLWlkeDEsIHIuZmluaXNoKCktaWR4LCByLnN0cmlkZSgpKTwvY29kZT48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjwvZGl2PjxiciBjbGFzcz0idGFibGUtYnJlYWsiPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iaW5kZXhfZ2VuIj48L2E+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X2dlbjwvY29kZT48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfZ2VuPC9jb2RlPiBhZ2dyZWdhdGVzIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2U8L2NvZGU+IG9iamVjdHMgaW4gb3JkZXIgdG8gc3BlY2lmeSB2aWV3CnBhcmFtZXRlcnMuICBDaGFpbmVkIGNhbGxzIHRvIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcGVyYXRvcltdPC9jb2RlPiBzdG9yZQpyYW5nZSBhbmQgZGltZW5zaW9uIGluZm9ybWF0aW9uIHVzZWQgdG8gCmluc3RhbnRpYXRlIGEgbmV3IHZpZXcgaW50byBhIE11bHRpQXJyYXkuCjwvcD48ZGl2IGNsYXNzPSJ0YWJsZSI+PGEgbmFtZT0iaWQ4Mzc4NjgiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPlRhYmxloDguoE5vdGF0aW9uPC9iPjwvcD48ZGl2IGNsYXNzPSJ0YWJsZS1jb250ZW50cyI+PHRhYmxlIHN1bW1hcnk9Ik5vdGF0aW9uIiBib3JkZXI9IjEiPjxjb2xncm91cD48Y29sPjxjb2w+PC9jb2xncm91cD48dGJvZHk+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RGltcyxSYW5nZXM8L2NvZGU+PC90ZD48dGQ+VW5zaWduZWQgaW50ZWdyYWwgdmFsdWVzLjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj54PC9jb2RlPjwvdGQ+PHRkPkFuIG9iamVjdCBvZiB0eXBlIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+dGVtcGxhdGUgZ2VuX3R5cGUmbHQ7RGltcyxSYW5nZXMmZ3Q7Ojp0eXBlPC9jb2RlPi48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aTwvY29kZT48L3RkPjx0ZD5BbiBvYmplY3Qgb2YgdHlwZSAKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X3JhbmdlPC9jb2RlPi48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aWR4PC9jb2RlPjwvdGQ+PHRkPk9iamVjdHMgb2YgdHlwZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXg8L2NvZGU+LjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJ0YWJsZS1icmVhayI+PGRpdiBjbGFzcz0idGFibGUiPjxhIG5hbWU9ImlkODM3OTU0Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5UYWJsZaA5LqBBc3NvY2lhdGVkIFR5cGVzPC9iPjwvcD48ZGl2IGNsYXNzPSJ0YWJsZS1jb250ZW50cyI+PHRhYmxlIHN1bW1hcnk9IkFzc29jaWF0ZWQgVHlwZXMiIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2w+PGNvbD48L2NvbGdyb3VwPjx0aGVhZD48dHI+PHRoPlR5cGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleDwvY29kZT48L3RkPjx0ZD5UaGlzIGlzIGEgc2lnbmVkIGludGVncmFsIHR5cGUuIEl0IGlzIHVzZWQgdG8Kc3BlY2lmeSBkZWdlbmVyYXRlIGRpbWVuc2lvbnMuPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPnNpemVfdHlwZTwvY29kZT48L3RkPjx0ZD5UaGlzIGlzIGFuIHVuc2lnbmVkIGludGVncmFsIHR5cGUuIEl0IGlzIHVzZWQgdG8KcmVwb3J0IHRoZSBzaXplIG9mIHRoZSByYW5nZSBhbiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfcmFuZ2U8L2NvZGU+IApyZXByZXNlbnRzLjwvdGQ+PC90cj48dHI+PHRkPgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+dGVtcGxhdGUgZ2VuX3R5cGU6OiZsdDtEaW1zLFJhbmdlcyZndDs6OnR5cGU8L2NvZGU+PC90ZD48dGQ+VGhpcyB0eXBlIGdlbmVyYXRvciBuYW1lcyB0aGUgcmVzdWx0IG9mIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RGltczwvY29kZT4gY2hhaW5lZCBjYWxscyB0bwo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfZ2VuOjpvcGVyYXRvcltdPC9jb2RlPi4gIFRoZQo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UmFuZ2VzPC9jb2RlPiBwYXJhbWV0ZXIgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbnVtYmVyIG9mCmRlZ2VuZXJhdGUgcmFuZ2VzIHNwZWNpZmllZCAoaS5lLiBjYWxscyB0bwo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+b3BlcmF0b3JbXShpbmRleCk8L2NvZGU+KS4gTm90ZSB0aGF0ICAKPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+aW5kZXhfZ2VuPC9jb2RlPiBhbmQKPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+Z2VuX3R5cGUmbHQ7MCwwJmd0Ozo6dHlwZTwvY29kZT4gYXJlIHRoZSBzYW1lIHR5cGUuPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48L2Rpdj48YnIgY2xhc3M9InRhYmxlLWJyZWFrIj48ZGl2IGNsYXNzPSJ0YWJsZSI+PGEgbmFtZT0iaWQ4MzgwNjYiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPlRhYmxloDEwLqBWYWxpZCBFeHByZXNzaW9uczwvYj48L3A+PGRpdiBjbGFzcz0idGFibGUtY29udGVudHMiPjx0YWJsZSBzdW1tYXJ5PSJWYWxpZCBFeHByZXNzaW9ucyIgYm9yZGVyPSIxIj48Y29sZ3JvdXA+PGNvbD48Y29sPjxjb2w+PC9jb2xncm91cD48dGhlYWQ+PHRyPjx0aD5FeHByZXNzaW9uPC90aD48dGg+UmV0dXJuIHR5cGU8L3RoPjx0aD5TZW1hbnRpY3M8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kZXhfZ2VuKCk8L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmdlbl90eXBlJmx0OzAsMCZndDs6OnR5cGU8L2NvZGU+PC90ZD48dGQ+VGhpcyBjb25zdHJ1Y3RzIGFuIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRleF9nZW48L2NvZGU+Cm9iamVjdC4gVGhpcyBvYmplY3QgY2FuIHRoZW4gYmUgdXNlZCB0byBnZW5lcmF0ZSB0dXBsZXMgb2YKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X3JhbmdlPC9jb2RlPiB2YWx1ZXMuPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPnhbaV08L2NvZGU+PC90ZD48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmdlbl90eXBlJmx0O0RpbXMrMSxSYW5nZXMrMSZndDs6OnR5cGU8L2NvZGU+CjwvdGQ+PHRkPlJldHVybnMgYSBuZXcgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHByZXZpb3VzCjxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPmluZGV4X3JhbmdlPC9jb2RlPiBvYmplY3RzIGluIGFkZGl0aW9uIHRvCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pLjwvY29kZT4gQ2hhaW5lZCBjYWxscyB0bwo8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm9wZXJhdG9yW108L2NvZGU+IGFyZSB0aGUgbWVhbnMgYnkgd2hpY2gKPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+aW5kZXhfcmFuZ2U8L2NvZGU+IG9iamVjdHMgYXJlIGFnZ3JlZ2F0ZWQuPC90ZD48L3RyPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPnhbaWR4XTwvY29kZT48L3RkPjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Z2VuX3R5cGUmbHQ7RGltcyxSYW5nZXMrMSZndDs6OnR5cGU8L2NvZGU+CjwvdGQ+PHRkPlJldHVybnMgYSBuZXcgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHByZXZpb3VzCjxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPmluZGV4X3JhbmdlPC9jb2RlPiBvYmplY3RzIGluIGFkZGl0aW9uIHRvIGEgZGVnZW5lcmF0ZQpyYW5nZSwgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X3JhbmdlKGlkeCxpZHgpLjwvY29kZT4gTm90ZSB0aGF0IHRoaXMgaXMgTk9UCmVxdWl2YWxlbnQgdG8gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnhbaW5kZXhfcmFuZ2UoaWR4LGlkeCldLjwvY29kZT4sIHdoaWNoIHdpbGwKcmV0dXJuIGFuIG9iamVjdCBvZiB0eXBlCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5nZW5fdHlwZSZsdDtEaW1zKzEsUmFuZ2VzKzEmZ3Q7Ojp0eXBlPC9jb2RlPi4KPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rpdj48L2Rpdj48YnIgY2xhc3M9InRhYmxlLWJyZWFrIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImlkODM4MjIyIj48L2E+TW9kZWxzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJkaXNjIj48bGk+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheV9yZWY8L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0X211bHRpX2FycmF5X3JlZjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+dGVtcGxhdGUgYXJyYXlfdmlldyZsdDtEaW1zJmd0Ozo6dHlwZTwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+dGVtcGxhdGUgY29uc3RfYXJyYXlfdmlldyZsdDtEaW1zJmd0Ozo6dHlwZTwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+dGVtcGxhdGUgc3ViYXJyYXkmbHQ7RGltcyZndDs6OnR5cGU8L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPnRlbXBsYXRlIGNvbnN0X3N1YmFycmF5Jmx0O0RpbXMmZ3Q7Ojp0eXBlPC9jb2RlPjwvbGk+PC91bD48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iYXJyYXlfdHlwZXMiPjwvYT5BcnJheSBDb21wb25lbnRzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD4KQm9vc3QuTXVsdGlBcnJheSBkZWZpbmVzIGFuIGFycmF5IGNsYXNzLAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXVsdGlfYXJyYXk8L2NvZGU+LCBhbmQgdHdvIGFkYXB0ZXIgY2xhc3NlcywKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5X3JlZjwvY29kZT4gYW5kIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Y29uc3RfbXVsdGlfYXJyYXlfcmVmPC9jb2RlPi4gVGhlIHRocmVlIGNsYXNzZXMgbW9kZWwgCk11bHRpQXJyYXkgYW5kIHNvIHRoZXkgc2hhcmUgYSBsb3Qgb2YgZnVuY3Rpb25hbGl0eS4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5X3JlZjwvY29kZT4gZGlmZmVycyBmcm9tCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4gaW4gdGhhdCB0aGUKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPiBtYW5hZ2VzIGl0cyBvd24gbWVtb3J5LCB3aGlsZQo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXVsdGlfYXJyYXlfcmVmPC9jb2RlPiBpcyBwYXNzZWQgYSBibG9jayBvZiBtZW1vcnkgdGhhdCBpdApleHBlY3RzIHRvIGJlIGV4dGVybmFsbHkgbWFuYWdlZC4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0X211bHRpX2FycmF5X3JlZjwvY29kZT4gZGlmZmVycyBmcm9tCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheV9yZWY8L2NvZGU+IGluIHRoYXQgdGhlIHVuZGVybHlpbmcgZWxlbWVudHMgaXQKYWRhcHRzIGNhbm5vdCBiZSBtb2RpZmllZCB0aHJvdWdoIGl0cyBpbnRlcmZhY2UsIHRob3VnaCBzb21lIGFycmF5CnByb3BlcnRpZXMsIGluY2x1ZGluZyB0aGUgYXJyYXkgc2hhcGUgYW5kIGluZGV4IGJhc2VzLCBjYW4gYmUgYWx0ZXJlZC4KRnVuY3Rpb25hbGl0eSB0aGUgY2xhc3NlcyBoYXZlIGluIGNvbW1vbiBpcyBkZXNjcmliZWQKYmVsb3cuCjwvcD48cD48Yj5Ob3RlOiBQcmVjb25kaXRpb25zLCBFZmZlY3RzLCBhbmQgSW1wbGVtZW50YXRpb24uoDwvYj4KVGhyb3VnaG91dCB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLCBzbWFsbCBwaWVjZXMgb2YgQysrIGNvZGUgYXJlCnVzZWQgdG8gc3BlY2lmeSBjb25zdHJhaW50cyBzdWNoIGFzIHByZWNvbmRpdGlvbnMsIGVmZmVjdHMsIGFuZApwb3N0Y29uZGl0aW9ucy4gIFRoZXNlIGRvIG5vdCBuZWNlc3NhcmlseSBkZXNjcmliZSB0aGUgdW5kZXJseWluZwppbXBsZW1lbnRhdGlvbiBvZiBhcnJheSBjb21wb25lbnRzOyByYXRoZXIsIHRoZXkgZGVzY3JpYmUgdGhlIApleHBlY3RlZCBpbnB1dCB0byBhbmQKYmVoYXZpb3Igb2YgdGhlIHNwZWNpZmllZCBvcGVyYXRpb25zLiAgRmFpbHVyZSB0byBtZWV0CnByZWNvbmRpdGlvbnMgcmVzdWx0cyBpbiB1bmRlZmluZWQgYmVoYXZpb3IuIE5vdCBhbGwgZWZmZWN0cwooaS5lLiBjb3B5IGNvbnN0cnVjdG9ycywgZXRjLikgbXVzdCBiZSBtaW1pY2tlZCBleGFjdGx5LiAgVGhlIGNvZGUKc25pcHBldHMgZm9yIGVmZmVjdHMgaW50ZW5kIHRvIGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2YgdGhlIGRlc2NyaWJlZApvcGVyYXRpb24uIAo8L3A+PHA+PGI+UXVlcmllcy6gPC9iPjwvcD48ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkbD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5lbGVtZW50KiBkYXRhKCk7CmNvbnN0IGVsZW1lbnQqIGRhdGEoKSBjb25zdDs8L3ByZT48L3NwYW4+PC9kdD48ZGQ+PHA+VGhpcyByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQpjb250aWd1b3VzIGJsb2NrIHRoYXQgY29udGFpbnMgdGhlIGFycmF5J3MgZGF0YS4gSWYgYWxsIGRpbWVuc2lvbnMgb2YKdGhlIGFycmF5IGFyZSAwLWluZGV4ZWQgYW5kIHN0b3JlZCBpbiBhc2NlbmRpbmcgb3JkZXIsIHRoaXMgaXMgCmVxdWl2YWxlbnQgdG8gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9yaWdpbigpPC9jb2RlPi4gTm90ZSB0aGF0Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdF9tdWx0aV9hcnJheV9yZWY8L2NvZGU+IG9ubHkgcHJvdmlkZXMgdGhlIGNvbnN0CnZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbi4KPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ZWxlbWVudCogb3JpZ2luKCk7CmNvbnN0IGVsZW1lbnQqIG9yaWdpbigpIGNvbnN0OzwvcHJlPjwvc3Bhbj48L2R0PjxkZD48cD5UaGlzIHJldHVybnMgdGhlIG9yaWdpbiBlbGVtZW50IG9mIHRoZQo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXVsdGlfYXJyYXk8L2NvZGU+LiBOb3RlIHRoYXQKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0X211bHRpX2FycmF5X3JlZjwvY29kZT4gb25seSBwcm92aWRlcyB0aGUgY29uc3QKdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uLiAoUmVxdWlyZWQgYnkgTXVsdGlBcnJheSkKPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmNvbnN0IGluZGV4KiBpbmRleF9iYXNlcygpOzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+VGhpcyByZXR1cm5zIHRoZSBpbmRleCBiYXNlcyBmb3IgdGhlCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4uIChSZXF1aXJlZCBieSBNdWx0aUFycmF5KQo8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Y29uc3QgaW5kZXgqIHN0cmlkZXMoKTs8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPlRoaXMgcmV0dXJucyB0aGUgc3RyaWRlcyBmb3IgdGhlCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4uIChSZXF1aXJlZCBieSBNdWx0aUFycmF5KQo8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Y29uc3Qgc2l6ZV90eXBlKiBzaGFwZSgpOzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+VGhpcyByZXR1cm5zIHRoZSBzaGFwZSBvZiB0aGUKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPi4gKFJlcXVpcmVkIGJ5IE11bHRpQXJyYXkpCjwvcD48L2RkPjwvZGw+PC9kaXY+PHA+PGI+Q29tcGFyYXRvcnMuoDwvYj48L3A+PGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZGw+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CmJvb2wgb3BlcmF0b3I9PShjb25zdCAqYXJyYXktdHlwZSomYW1wOyByaHMpOwpib29sIG9wZXJhdG9yIT0oY29uc3QgKmFycmF5LXR5cGUqJmFtcDsgcmhzKTsKYm9vbCBvcGVyYXRvciZsdDsoY29uc3QgKmFycmF5LXR5cGUqJmFtcDsgcmhzKTsKYm9vbCBvcGVyYXRvciZndDsoY29uc3QgKmFycmF5LXR5cGUqJmFtcDsgcmhzKTsKYm9vbCBvcGVyYXRvciZndDs9KGNvbnN0ICphcnJheS10eXBlKiZhbXA7IHJocyk7CmJvb2wgb3BlcmF0b3ImbHQ7PShjb25zdCAqYXJyYXktdHlwZSomYW1wOyByaHMpOzwvcHJlPjwvc3Bhbj48L2R0PjxkZD48cD5FYWNoIGNvbXBhcmF0b3IgZXhlY3V0ZXMgYSBsZXhpY29ncmFwaGljYWwgY29tcGFyZSBvdmVyCnRoZSB2YWx1ZSB0eXBlcyBvZiB0aGUgdHdvIGFycmF5cy4KKFJlcXVpcmVkIGJ5IE11bHRpQXJyYXkpCjwvcD48cD48Yj5QcmVjb25kaXRpb25zLqA8L2I+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmVsZW1lbnQ8L2NvZGU+IG11c3Qgc3VwcG9ydCB0aGUKY29tcGFyYXRvciBjb3JyZXNwb25kaW5nIHRvIHRoYXQgY2FsbGVkIG9uCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4uPC9wPjxwPjxiPkNvbXBsZXhpdHkuoDwvYj5PKDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5udW1fZWxlbWVudHMoKTwvY29kZT4pLjwvcD48L2RkPjwvZGw+PC9kaXY+PHA+PGI+TW9kaWZpZXJzLqA8L2I+PC9wPjxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsPjxkdD48c3BhbiBjbGFzcz0idGVybSI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KCnRlbXBsYXRlICZsdDt0eXBlbmFtZSBTaXplTGlzdCZndDsKdm9pZCByZXNoYXBlKGNvbnN0IFNpemVMaXN0JmFtcDsgc2l6ZXMpCgo8L3ByZT4KPC9zcGFuPjwvZHQ+PGRkPjxwPlRoaXMgY2hhbmdlcyB0aGUgc2hhcGUgb2YgdGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4uICBUaGUKbnVtYmVyIG9mIGVsZW1lbnRzIGFuZCB0aGUgaW5kZXggYmFzZXMgcmVtYWluIHRoZSBzYW1lLCBidXQgdGhlIG51bWJlcgpvZiB2YWx1ZXMgYXQgZWFjaCBsZXZlbCBvZiB0aGUgbmVzdGVkIGNvbnRhaW5lciBoaWVyYXJjaHkgbWF5CmNoYW5nZS48L3A+PHA+PGI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlNpemVMaXN0PC9jb2RlPiBSZXF1aXJlbWVudHMuoDwvYj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+U2l6ZUxpc3Q8L2NvZGU+IG11c3QgbW9kZWwKPGEgaHJlZj0iLi4vLi4vdXRpbGl0eS9Db2xsZWN0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+Q29sbGVjdGlvbjwvYT4uPC9wPjxwPjxiPlByZWNvbmRpdGlvbnMuoDwvYj4KPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4Kc3RkOjphY2N1bXVsYXRlKHNpemVzLmJlZ2luKCksc2l6ZXMuZW5kKCksc2l6ZV90eXBlKDEpLHN0ZDo6bXVsdGlwbGllcyZsdDtzaXplX3R5cGUmZ3Q7KCkpID09IHRoaXMtJmd0O251bV9lbGVtZW50cygpOwpzaXplcy5zaXplKCkgPT0gTnVtRGltczsKPC9wcmU+PHA+PGI+UG9zdGNvbmRpdGlvbnMuoDwvYj4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnN0ZDo6ZXF1YWwoc2l6ZXMuYmVnaW4oKSxzaXplcy5lbmQoKSx0aGlzLSZndDtzaGFwZSkgPT0gdHJ1ZTs8L2NvZGU+CjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KCnRlbXBsYXRlICZsdDt0eXBlbmFtZSBCYXNlTGlzdCZndDsKdm9pZCByZWluZGV4KGNvbnN0IEJhc2VMaXN0JmFtcDsgdmFsdWVzKTsKCjwvcHJlPgo8L3NwYW4+PC9kdD48ZGQ+PHA+VGhpcyBjaGFuZ2VzIHRoZSBpbmRleCBiYXNlcyBvZiB0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPiB0bwpjb3JyZXNwb25kIHRvIHRoZSB0aGUgdmFsdWVzIGluIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj52YWx1ZXM8L2NvZGU+LjwvcD48cD48Yj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QmFzZUxpc3Q8L2NvZGU+IFJlcXVpcmVtZW50cy6gPC9iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5CYXNlTGlzdDwvY29kZT4gbXVzdCBtb2RlbAo8YSBocmVmPSIuLi8uLi91dGlsaXR5L0NvbGxlY3Rpb24uaHRtbCIgdGFyZ2V0PSJfdG9wIj5Db2xsZWN0aW9uPC9hPi48L3A+PHA+PGI+UHJlY29uZGl0aW9ucy6gPC9iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj52YWx1ZXMuc2l6ZSgpID09IE51bURpbXM7PC9jb2RlPjwvcD48cD48Yj5Qb3N0Y29uZGl0aW9ucy6gPC9iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5zdGQ6OmVxdWFsKHZhbHVlcy5iZWdpbigpLHZhbHVlcy5lbmQoKSx0aGlzLSZndDtpbmRleF9iYXNlcygpKTsKPC9jb2RlPjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KCnZvaWQgcmVpbmRleChpbmRleCB2YWx1ZSk7Cgo8L3ByZT4KPC9zcGFuPjwvZHQ+PGRkPjxwPlRoaXMgY2hhbmdlcyB0aGUgaW5kZXggYmFzZXMgb2YgYWxsIGRpbWVuc2lvbnMgb2YgdGhlCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4gdG8gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnZhbHVlPC9jb2RlPi48L3A+PHA+PGI+UG9zdGNvbmRpdGlvbnMuoDwvYj4KPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KCnN0ZDo6Y291bnRfaWYodGhpcy0mZ3Q7aW5kZXhfYmFzZXMoKSx0aGlzLSZndDtpbmRleF9iYXNlcygpK3RoaXMtJmd0O251bV9kaW1lbnNpb25zKCksCiAgICAgICAgICAgICAgc3RkOjpiaW5kXzJuZChzdGQ6OmVxdWFsX3RvJmx0O2luZGV4Jmd0OygpLHZhbHVlKSkgPT0gCiAgICAgICAgICAgICAgdGhpcy0mZ3Q7bnVtX2RpbWVuc2lvbnMoKTsKCjwvcHJlPjxwPgo8L3A+PC9kZD48L2RsPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ibXVsdGlfYXJyYXkiPjwvYT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXVsdGlfYXJyYXk8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPiBpcyBhIG11bHRpLWRpbWVuc2lvbmFsIGNvbnRhaW5lciB0aGF0CnN1cHBvcnRzIHJhbmRvbSBhY2Nlc3MgaXRlcmF0aW9uLiBJdHMgbnVtYmVyIG9mIGRpbWVuc2lvbnMgaXMKZml4ZWQgYXQgY29tcGlsZSB0aW1lLCBidXQgaXRzIHNoYXBlIGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGl0CmNvbnRhaW5zIGFyZSBzcGVjaWZpZWQgZHVyaW5nIGl0cyBjb25zdHJ1Y3Rpb24uIFRoZSBudW1iZXIgb2YgZWxlbWVudHMKd2lsbCByZW1haW4gZml4ZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiBhCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4ncyBsaWZldGltZSwgYnV0IHRoZSBzaGFwZSBvZiB0aGUgY29udGFpbmVyIGNhbgpiZSBjaGFuZ2VkLiBBIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4gbWFuYWdlcyBpdHMgZGF0YSBlbGVtZW50cwp1c2luZyBhIHJlcGxhY2VhYmxlIGFsbG9jYXRvci4KPC9wPjxwPjxiPk1vZGVsIE9mLqA8L2I+CjxhIGhyZWY9IiNNdWx0aUFycmF5IiB0aXRsZT0iTXVsdGlBcnJheSBDb25jZXB0Ij5NdWx0aUFycmF5PC9hPiwKPGEgaHJlZj0iLi4vLi4vLi4vbGlicy91dGlsaXR5L0NvcHlDb25zdHJ1Y3RpYmxlLmh0bWwiIHRhcmdldD0iX3RvcCI+Q29weUNvbnN0cnVjdGlibGU8L2E+LiBEZXBlbmRpbmcgb24gdGhlIGVsZW1lbnQgdHlwZSwgCml0IG1heSBhbHNvIG1vZGVsIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9FcXVhbGl0eUNvbXBhcmFibGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj5FcXVhbGl0eUNvbXBhcmFibGU8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvTGVzc1RoYW5Db21wYXJhYmxlLmh0bWwiIHRhcmdldD0iX3RvcCI+TGVzc1RoYW5Db21wYXJhYmxlPC9hPi4gCjwvcD48cD48Yj5TeW5vcHNpcy6gPC9iPjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CgpuYW1lc3BhY2UgYm9vc3QgewoKdGVtcGxhdGUgJmx0O3R5cGVuYW1lIFZhbHVlVHlwZSwgCiAgICAgICAgICBzdGQ6OnNpemVfdCBOdW1EaW1zLCAKICAgICAgICAgIHR5cGVuYW1lIEFsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yJmx0O1ZhbHVlVHlwZSZndDsgJmd0OwpjbGFzcyBtdWx0aV9hcnJheSB7CnB1YmxpYzoKLy8gdHlwZXM6CiAgdHlwZWRlZiBWYWx1ZVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ7CiAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKICB0eXBlZGVmICp1bnNwZWNpZmllZCogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOwogIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmICp1bnNwZWNpZmllZCogICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmICp1bnNwZWNpZmllZCogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjpzaXplX3R5cGUgICAgICAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgbXVsdGlfYXJyYXlfdHlwZXM6OmluZGV4ICAgICAgICAgICAgICBpbmRleDsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjppbmRleF9nZW4gICAgICAgICAgaW5kZXhfZ2VuOwogIHR5cGVkZWYgbXVsdGlfYXJyYXlfdHlwZXM6OmluZGV4X3JhbmdlICAgICAgICBpbmRleF9yYW5nZTsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjpleHRlbnRfZ2VuICAgICAgICAgZXh0ZW50X2dlbjsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjpleHRlbnRfcmFuZ2UgICAgICAgZXh0ZW50X3JhbmdlOwogIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlX29yZGVyX3R5cGU7CiAgCgogIC8vIHRlbXBsYXRlIHR5cGVkZWZzCiAgdGVtcGxhdGUgJmx0O3N0ZDo6c2l6ZV90IERpbXMmZ3Q7IHN0cnVjdCAgICAgICAgICAgIHN1YmFycmF5OwogIHRlbXBsYXRlICZsdDtzdGQ6OnNpemVfdCBEaW1zJmd0OyBzdHJ1Y3QgICAgICAgICAgICBjb25zdF9zdWJhcnJheTsKICB0ZW1wbGF0ZSAmbHQ7c3RkOjpzaXplX3QgRGltcyZndDsgc3RydWN0ICAgICAgICAgICAgYXJyYXlfdmlldzsKICB0ZW1wbGF0ZSAmbHQ7c3RkOjpzaXplX3QgRGltcyZndDsgc3RydWN0ICAgICAgICAgICAgY29uc3RfYXJyYXlfdmlldzsKICAKCiAgLy8gY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycwoKICBtdWx0aV9hcnJheSgpOwoKICB0ZW1wbGF0ZSAmbHQ7dHlwZW5hbWUgRXh0ZW50TGlzdCZndDsKICBleHBsaWNpdCBtdWx0aV9hcnJheShjb25zdCBFeHRlbnRMaXN0JmFtcDsgc2l6ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RvcmFnZV9vcmRlcl90eXBlJmFtcDsgc3RvcmUgPSBjX3N0b3JhZ2Vfb3JkZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBbGxvY2F0b3ImYW1wOyBhbGxvYyA9IEFsbG9jYXRvcigpKTsKICBleHBsaWNpdCBtdWx0aV9hcnJheShjb25zdCBleHRlbnRzX3R1cGxlJmFtcDsgcmFuZ2VzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2Vfb3JkZXJfdHlwZSZhbXA7IHN0b3JlID0gY19zdG9yYWdlX29yZGVyKCksCgkgICAgICAgICAgICAgICBjb25zdCBBbGxvY2F0b3ImYW1wOyBhbGxvYyA9IEFsbG9jYXRvcigpKTsKICBtdWx0aV9hcnJheShjb25zdCBtdWx0aV9hcnJheSZhbXA7IHgpOwogIG11bHRpX2FycmF5KGNvbnN0IGNvbnN0X211bHRpX2FycmF5X3JlZiZsdDtWYWx1ZVR5cGUsTnVtRGltcyZndDsmYW1wOyB4KTsKICBtdWx0aV9hcnJheShjb25zdCBjb25zdF9zdWJhcnJheSZsdDtOdW1EaW1zJmd0Ozo6dHlwZSZhbXA7IHgpOwogIG11bHRpX2FycmF5KGNvbnN0IGNvbnN0X2FycmF5X3ZpZXcmbHQ7TnVtRGltcyZndDs6OnR5cGUmYW1wOyB4KTsKCiAgbXVsdGlfYXJyYXkoY29uc3QgbXVsdGlfYXJyYXlfcmVmJmx0O1ZhbHVlVHlwZSxOdW1EaW1zJmd0OyZhbXA7IHgpOwogIG11bHRpX2FycmF5KGNvbnN0IHN1YmFycmF5Jmx0O051bURpbXMmZ3Q7Ojp0eXBlJmFtcDsgeCk7CiAgbXVsdGlfYXJyYXkoY29uc3QgYXJyYXlfdmlldyZsdDtOdW1EaW1zJmd0Ozo6dHlwZSZhbXA7IHgpOwoKICB+bXVsdGlfYXJyYXkoKTsKCiAgLy8gbW9kaWZpZXJzCgogIG11bHRpX2FycmF5JmFtcDsgb3BlcmF0b3I9KGNvbnN0IG11bHRpX2FycmF5JmFtcDsgeCk7CiAgdGVtcGxhdGUgJmx0O2NsYXNzIEFycmF5Jmd0OyBtdWx0aV9hcnJheSZhbXA7IG9wZXJhdG9yPShjb25zdCBBcnJheSZhbXA7IHgpOwoKICAvLyBpdGVyYXRvcnM6CiAgaXRlcmF0b3IJCQkJYmVnaW4oKTsKICBpdGVyYXRvcgkJCQllbmQoKTsKICBjb25zdF9pdGVyYXRvcgkJCWJlZ2luKCkgY29uc3Q7CiAgY29uc3RfaXRlcmF0b3IJCQllbmQoKSBjb25zdDsKICByZXZlcnNlX2l0ZXJhdG9yCQkJcmJlZ2luKCk7CiAgcmV2ZXJzZV9pdGVyYXRvcgkJCXJlbmQoKTsKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCQlyYmVnaW4oKSBjb25zdDsKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCQlyZW5kKCkgY29uc3Q7CgogIC8vIGNhcGFjaXR5OgogIHNpemVfdHlwZQkJCQlzaXplKCkgY29uc3Q7CiAgc2l6ZV90eXBlCQkJCW51bV9lbGVtZW50cygpIGNvbnN0OwogIHNpemVfdHlwZQkJCQludW1fZGltZW5zaW9ucygpIGNvbnN0OwogCiAgLy8gZWxlbWVudCBhY2Nlc3M6CiAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIEluZGV4TGlzdCZndDsgCiAgICBlbGVtZW50JmFtcDsJCQlvcGVyYXRvcigpKGNvbnN0IEluZGV4TGlzdCZhbXA7IGluZGljZXMpOwogIHRlbXBsYXRlICZsdDt0eXBlbmFtZSBJbmRleExpc3QmZ3Q7CiAgICBjb25zdCBlbGVtZW50JmFtcDsJCW9wZXJhdG9yKCkoY29uc3QgSW5kZXhMaXN0JmFtcDsgaW5kaWNlcykgY29uc3Q7CiAgcmVmZXJlbmNlCQkJb3BlcmF0b3JbXShpbmRleCBpKTsKICBjb25zdF9yZWZlcmVuY2UJCW9wZXJhdG9yW10oaW5kZXggaSkgY29uc3Q7CiAgYXJyYXlfdmlldyZsdDtEaW1zJmd0Ozo6dHlwZQlvcGVyYXRvcltdKGNvbnN0IGluZGljZXNfdHVwbGUmYW1wOyByKTsKICBjb25zdF9hcnJheV92aWV3Jmx0O0RpbXMmZ3Q7Ojp0eXBlCW9wZXJhdG9yW10oY29uc3QgaW5kaWNlc190dXBsZSZhbXA7IHIpIGNvbnN0OwoKICAvLyBxdWVyaWVzCiAgZWxlbWVudCoJCQlkYXRhKCk7CiAgY29uc3QgZWxlbWVudCoJCWRhdGEoKSBjb25zdDsKICBlbGVtZW50KgkJCW9yaWdpbigpOwogIGNvbnN0IGVsZW1lbnQqCQlvcmlnaW4oKSBjb25zdDsKICBjb25zdCBzaXplX3R5cGUqCQlzaGFwZSgpIGNvbnN0OwogIGNvbnN0IGluZGV4KgkJCXN0cmlkZXMoKSBjb25zdDsKICBjb25zdCBpbmRleCoJCQlpbmRleF9iYXNlcygpIGNvbnN0OwogIGNvbnN0IHN0b3JhZ2Vfb3JkZXJfdHlwZSZhbXA7ICAgICBzdG9yYWdlX29yZGVyKCkgY29uc3Q7CgogIC8vIGNvbXBhcmF0b3JzCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG11bHRpX2FycmF5JmFtcDsgcmhzKTsKICBib29sIG9wZXJhdG9yIT0oY29uc3QgbXVsdGlfYXJyYXkmYW1wOyByaHMpOwogIGJvb2wgb3BlcmF0b3ImbHQ7KGNvbnN0IG11bHRpX2FycmF5JmFtcDsgcmhzKTsKICBib29sIG9wZXJhdG9yJmd0Oyhjb25zdCBtdWx0aV9hcnJheSZhbXA7IHJocyk7CiAgYm9vbCBvcGVyYXRvciZndDs9KGNvbnN0IG11bHRpX2FycmF5JmFtcDsgcmhzKTsKICBib29sIG9wZXJhdG9yJmx0Oz0oY29uc3QgbXVsdGlfYXJyYXkmYW1wOyByaHMpOwoKICAvLyBtb2RpZmllcnM6CiAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIElucHV0SXRlcmF0b3ImZ3Q7CiAgICB2b2lkCQkJYXNzaWduKElucHV0SXRlcmF0b3IgYmVnaW4sIElucHV0SXRlcmF0b3IgZW5kKTsKICB0ZW1wbGF0ZSAmbHQ7dHlwZW5hbWUgU2l6ZUxpc3QmZ3Q7CiAgICB2b2lkCQkJcmVzaGFwZShjb25zdCBTaXplTGlzdCZhbXA7IHNpemVzKQogIHRlbXBsYXRlICZsdDt0eXBlbmFtZSBCYXNlTGlzdCZndDsJdm9pZCByZWluZGV4KGNvbnN0IEJhc2VMaXN0JmFtcDsgdmFsdWVzKTsKICAgIHZvaWQJCQlyZWluZGV4KGluZGV4IHZhbHVlKTsKICB0ZW1wbGF0ZSAmbHQ7dHlwZW5hbWUgRXh0ZW50TGlzdCZndDsKICAgIG11bHRpX2FycmF5JmFtcDsJCXJlc2l6ZShjb25zdCBFeHRlbnRMaXN0JmFtcDsgZXh0ZW50cyk7CiAgbXVsdGlfYXJyYXkmYW1wOyAgICAgICAgICAgICAgICAgIHJlc2l6ZShleHRlbnRzX3R1cGxlJmFtcDsgZXh0ZW50cyk7Cn07Cgo8L3ByZT48cD48Yj5Db25zdHJ1Y3RvcnMuoDwvYj48L3A+PGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZGw+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dGVtcGxhdGUgJmx0O3R5cGVuYW1lIEV4dGVudExpc3QmZ3Q7CmV4cGxpY2l0IG11bHRpX2FycmF5KGNvbnN0IEV4dGVudExpc3QmYW1wOyBzaXplcywKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RvcmFnZV9vcmRlcl90eXBlJmFtcDsgc3RvcmUgPSBjX3N0b3JhZ2Vfb3JkZXIoKSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxsb2NhdG9yJmFtcDsgYWxsb2MgPSBBbGxvY2F0b3IoKSk7CjwvcHJlPjwvc3Bhbj48L2R0PjxkZD48cD4KVGhpcyBjb25zdHJ1Y3RzIGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPiB1c2luZyB0aGUgc3BlY2lmaWVkCnBhcmFtZXRlcnMuICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+c2l6ZXM8L2NvZGU+IHNwZWNpZmllcyB0aGUgc2hhcGUgb2YgdGhlCmNvbnN0cnVjdGVkIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4uICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+c3RvcmU8L2NvZGU+CnNwZWNpZmllcyB0aGUgc3RvcmFnZSBvcmRlciBvciBsYXlvdXQgaW4gbWVtb3J5IG9mIHRoZSBhcnJheQpkaW1lbnNpb25zLiAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmFsbG9jPC9jb2RlPiBpcyB1c2VkIHRvCmFsbG9jYXRlIHRoZSBjb250YWluZWQgZWxlbWVudHMuCjwvcD48cD48Yj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RXh0ZW50TGlzdDwvY29kZT4gUmVxdWlyZW1lbnRzLqA8L2I+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5FeHRlbnRMaXN0PC9jb2RlPiBtdXN0IG1vZGVsIDxhIGhyZWY9Ii4uLy4uL3V0aWxpdHkvQ29sbGVjdGlvbi5odG1sIiB0YXJnZXQ9Il90b3AiPkNvbGxlY3Rpb248L2E+Lgo8L3A+PHA+PGI+UHJlY29uZGl0aW9ucy6gPC9iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5zaXplcy5zaXplKCkgPT0gTnVtRGltczs8L2NvZGU+PC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmV4cGxpY2l0IG11bHRpX2FycmF5KGV4dGVudF9nZW46Omdlbl90eXBlJmx0O051bURpbXMmZ3Q7Ojp0eXBlIHJhbmdlcywKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RvcmFnZV9vcmRlcl90eXBlJmFtcDsgc3RvcmUgPSBjX3N0b3JhZ2Vfb3JkZXIoKSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxsb2NhdG9yJmFtcDsgYWxsb2MgPSBBbGxvY2F0b3IoKSk7CjwvcHJlPjwvc3Bhbj48L2R0PjxkZD48cD4KVGhpcyBjb25zdHJ1Y3RzIGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPiB1c2luZyB0aGUgc3BlY2lmaWVkCiAgICBwYXJhbWV0ZXJzLiAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnJhbmdlczwvY29kZT4gc3BlY2lmaWVzIHRoZSBzaGFwZSBhbmQKaW5kZXggYmFzZXMgb2YgdGhlIGNvbnN0cnVjdGVkIG11bHRpX2FycmF5LiBJdCBpcyB0aGUgcmVzdWx0IG9mIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TnVtRGltczwvY29kZT4gY2hhaW5lZCBjYWxscyB0byAKICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5leHRlbnRfZ2VuOjpvcGVyYXRvcltdPC9jb2RlPi4gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnN0b3JlPC9jb2RlPgpzcGVjaWZpZXMgdGhlIHN0b3JhZ2Ugb3JkZXIgb3IgbGF5b3V0IGluIG1lbW9yeSBvZiB0aGUgYXJyYXkKZGltZW5zaW9ucy4gIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hbGxvYzwvY29kZT4gaXMgdGhlIGFsbG9jYXRvciB1c2VkIHRvCmFsbG9jYXRlIHRoZSBtZW1vcnkgdXNlZCB0byBzdG9yZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXVsdGlfYXJyYXk8L2NvZGU+CmVsZW1lbnRzLgo8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KbXVsdGlfYXJyYXkoY29uc3QgbXVsdGlfYXJyYXkmYW1wOyB4KTsKbXVsdGlfYXJyYXkoY29uc3QgY29uc3RfbXVsdGlfYXJyYXlfcmVmJmx0O1ZhbHVlVHlwZSxOdW1EaW1zJmd0OyZhbXA7IHgpOwptdWx0aV9hcnJheShjb25zdCBjb25zdF9zdWJhcnJheSZsdDtOdW1EaW1zJmd0Ozo6dHlwZSZhbXA7IHgpOwptdWx0aV9hcnJheShjb25zdCBjb25zdF9hcnJheV92aWV3Jmx0O051bURpbXMmZ3Q7Ojp0eXBlJmFtcDsgeCk7Cm11bHRpX2FycmF5KGNvbnN0IG11bHRpX2FycmF5X3JlZiZsdDtWYWx1ZVR5cGUsTnVtRGltcyZndDsmYW1wOyB4KTsKbXVsdGlfYXJyYXkoY29uc3Qgc3ViYXJyYXkmbHQ7TnVtRGltcyZndDs6OnR5cGUmYW1wOyB4KTsKbXVsdGlfYXJyYXkoY29uc3QgYXJyYXlfdmlldyZsdDtOdW1EaW1zJmd0Ozo6dHlwZSZhbXA7IHgpOwo8L3ByZT48L3NwYW4+PC9kdD48ZGQ+PHA+VGhlc2UgY29uc3RydWN0b3JzIGFsbCBjb25zdHJ1Y3RzIGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPiBhbmQgCnBlcmZvcm0gYSBkZWVwIGNvcHkgb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPng8L2NvZGU+LiAKPC9wPjxwPjxiPkNvbXBsZXhpdHkuoDwvYj4gVGhpcyBwZXJmb3JtcyBPKDxjb2RlIGNsYXNzPSJsaXRlcmFsIj54Lm51bV9lbGVtZW50cygpPC9jb2RlPikgY2FsbHMgdG8KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmVsZW1lbnQ8L2NvZGU+J3MgY29weSAKY29uc3RydWN0b3IuCjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgptdWx0aV9hcnJheSgpOwo8L3ByZT48L3NwYW4+PC9kdD48ZGQ+PHA+VGhpcyBjb25zdHJ1Y3RzIGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPiB3aG9zZSBzaGFwZSBpcyAoMCwuLi4sMCkgYW5kIGNvbnRhaW5zIG5vIGVsZW1lbnRzLgo8L3A+PC9kZD48L2RsPjwvZGl2PjxwPjxiPk5vdGUgb24gQ29uc3RydWN0b3JzLqA8L2I+ClRoZSAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPiBjb25zdHJ1Y3Rpb24gZXhwcmVzc2lvbnMsCjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgbXVsdGlfYXJyYXkmbHQ7aW50LDMmZ3Q7IEEoYm9vc3Q6OmV4dGVudHNbNV1bNF1bM10pOwo8L3ByZT48cD4KYW5kCjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgYm9vc3Q6OmFycmF5Jmx0O211bHRpX2FycmF5X2Jhc2U6OmluZGV4LDMmZ3Q7IG15X2V4dGVudHMgPSB7ezUsIDQsIDN9fTsKICAgICBtdWx0aV9hcnJheSZsdDtpbnQsMyZndDsgQShteV9leHRlbnRzKTsKPC9wcmU+PHA+CmFyZSBlcXVpdmFsZW50Lgo8L3A+PHA+PGI+TW9kaWZpZXJzLqA8L2I+PC9wPjxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgptdWx0aV9hcnJheSZhbXA7IG9wZXJhdG9yPShjb25zdCBtdWx0aV9hcnJheSZhbXA7IHgpOwp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgQXJyYXkmZ3Q7IG11bHRpX2FycmF5JmFtcDsgb3BlcmF0b3I9KGNvbnN0IEFycmF5JmFtcDsgeCk7CjwvcHJlPgo8L3NwYW4+PC9kdD48ZGQ+PHA+VGhpcyBwZXJmb3JtcyBhbiBlbGVtZW50LXdpc2UgY29weSBvZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+eDwvY29kZT4KaW50byB0aGUgY3VycmVudCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXVsdGlfYXJyYXk8L2NvZGU+LjwvcD48cD48Yj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QXJyYXk8L2NvZGU+IFJlcXVpcmVtZW50cy6gPC9iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5BcnJheTwvY29kZT4gbXVzdCBtb2RlbCBNdWx0aUFycmF5LiAKPC9wPjxwPjxiPlByZWNvbmRpdGlvbnMuoDwvYj4KPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdGQ6OmVxdWFsKHRoaXMtJmd0O3NoYXBlKCksdGhpcy0mZ3Q7c2hhcGUoKSt0aGlzLSZndDtudW1fZGltZW5zaW9ucygpLAp4LnNoYXBlKCkpOzwvcHJlPjxwPjxiPlBvc3Rjb25kaXRpb25zLqA8L2I+CjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+KCoudGhpcykgPT0geDs8L3ByZT48cD4KPC9wPjxwPjxiPkNvbXBsZXhpdHkuoDwvYj5UaGUgYXNzaWdubWVudCBvcGVyYXRvcnMgcGVyZm9ybSAKTyg8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+eC5udW1fZWxlbWVudHMoKTwvY29kZT4pIGNhbGxzIHRvIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5lbGVtZW50PC9jb2RlPidzIApjb3B5IGNvbnN0cnVjdG9yLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KCnRlbXBsYXRlICZsdDt0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yJmd0Owp2b2lkIGFzc2lnbihJbnB1dEl0ZXJhdG9yIGJlZ2luLCBJbnB1dEl0ZXJhdG9yIGVuZCk7CjwvcHJlPgo8L3NwYW4+PC9kdD48ZGQ+PHA+VGhpcyBjb3BpZXMgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZSAKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPltiZWdpbixlbmQpPC9jb2RlPiBpbnRvIHRoZSBhcnJheS4gIEl0IGlzIGVxdWl2YWxlbnQgdG8gCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5zdGQ6OmNvcHkoYmVnaW4sZW5kLHRoaXMtJmd0O2RhdGEoKSk8L2NvZGU+Lgo8L3A+PHA+PGI+UHJlY29uZGl0aW9ucy6gPC9iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5zdGQ6OmRpc3RhbmNlKGJlZ2luLGVuZCkgPT0gdGhpcy0mZ3Q7bnVtX2VsZW1lbnRzKCk7PC9jb2RlPgo8L3A+PHA+PGI+Q29tcGxleGl0eS6gPC9iPgpUaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmFzc2lnbjwvY29kZT4gbWVtYmVyIGZ1bmN0aW9uIHBlcmZvcm1zCk8oPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnRoaXMtJmd0O251bV9lbGVtZW50cygpPC9jb2RlPikgY2FsbHMgdG8KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlZhbHVlVHlwZTwvY29kZT4ncyBjb3B5IGNvbnN0cnVjdG9yLgo8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+bXVsdGlfYXJyYXkmYW1wOyByZXNpemUoZXh0ZW50X2dlbjo6Z2VuX3R5cGUmbHQ7TnVtRGltcyZndDs6OnR5cGUgZXh0ZW50cyk7CnRlbXBsYXRlICZsdDt0eXBlbmFtZSBFeHRlbnRMaXN0Jmd0OwogIG11bHRpX2FycmF5JmFtcDsgcmVzaXplKGNvbnN0IEV4dGVudExpc3QmYW1wOyBleHRlbnRzKTsKCjwvcHJlPjwvc3Bhbj48L2R0PjxkZD48cD4KVGhpcyBmdW5jdGlvbiByZXNpemVzIGFuIGFycmF5IHRvIHRoZSBzaGFwZSBzcGVjaWZpZWQgYnkKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmV4dGVudHM8L2NvZGU+LCB3aGljaCBpcyBlaXRoZXIgYSBnZW5lcmF0ZWQgbGlzdCBvZgpleHRlbnRzIG9yIGEgbW9kZWwgb2YgdGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5Db2xsZWN0aW9uPC9jb2RlPiBjb25jZXB0LiBUaGUKY29udGVudHMgb2YgdGhlIGFycmF5IGFyZSBwcmVzZXJ2ZWQgd2hlbmV2ZXIgcG9zc2libGU7IGlmIHRoZSBuZXcKYXJyYXkgc2l6ZSBpcyBzbWFsbGVyLCB0aGVuIHNvbWUgZGF0YSB3aWxsIGJlIGxvc3QuIEFueSBuZXcgZWxlbWVudHMKY3JlYXRlZCBieSByZXNpemluZyB0aGUgYXJyYXkgYXJlIGluaXRpYWxpemVkIHdpdGggdGhlCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5lbGVtZW50PC9jb2RlPiBkZWZhdWx0IGNvbnN0cnVjdG9yLgo8L3A+PC9kZD48L2RsPjwvZGl2PjxwPjxiPlF1ZXJpZXMuoDwvYj48L3A+PGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZGw+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CnN0b3JhZ2Vfb3JkZXJfdHlwZSZhbXA7IHN0b3JhZ2Vfb3JkZXIoKSBjb25zdDsKPC9wcmU+Cjwvc3Bhbj48L2R0PjxkZD48cD5UaGlzIHF1ZXJ5IHJldHVybnMgdGhlIHN0b3JhZ2Ugb3JkZXIgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4gaW4gcXVlc3Rpb24uICBJdCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYSBuZXcgYXJyYXkgd2l0aCB0aGUgc2FtZSBzdG9yYWdlIG9yZGVyLjwvcD48L2RkPjwvZGw+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJtdWx0aV9hcnJheV9yZWYiPjwvYT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXVsdGlfYXJyYXlfcmVmPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheV9yZWY8L2NvZGU+IGlzIGEgbXVsdGktZGltZW5zaW9uYWwgY29udGFpbmVyCmFkYXB0b3IuICBJdCBwcm92aWRlcyB0aGUgTXVsdGlBcnJheSBpbnRlcmZhY2Ugb3ZlciBhbnkgY29udGlndW91cwpibG9jayBvZiBlbGVtZW50cy4gIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheV9yZWY8L2NvZGU+IGV4cG9ydHMgdGhlCnNhbWUgaW50ZXJmYWNlIGFzIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4sIHdpdGggdGhlIGV4Y2VwdGlvbgpvZiB0aGUgY29uc3RydWN0b3JzLgo8L3A+PHA+PGI+TW9kZWwgT2YuoDwvYj4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5X3JlZjwvY29kZT4gbW9kZWxzIAo8YSBocmVmPSIjTXVsdGlBcnJheSIgdGl0bGU9Ik11bHRpQXJyYXkgQ29uY2VwdCI+TXVsdGlBcnJheTwvYT4sCjxhIGhyZWY9Ii4uLy4uLy4uL2xpYnMvdXRpbGl0eS9Db3B5Q29uc3RydWN0aWJsZS5odG1sIiB0YXJnZXQ9Il90b3AiPkNvcHlDb25zdHJ1Y3RpYmxlPC9hPi4KYW5kIGRlcGVuZGluZyBvbiB0aGUgZWxlbWVudCB0eXBlLCBpdCBtYXkgYWxzbyBtb2RlbAo8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvRXF1YWxpdHlDb21wYXJhYmxlLmh0bWwiIHRhcmdldD0iX3RvcCI+RXF1YWxpdHlDb21wYXJhYmxlPC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0xlc3NUaGFuQ29tcGFyYWJsZS5odG1sIiB0YXJnZXQ9Il90b3AiPkxlc3NUaGFuQ29tcGFyYWJsZTwvYT4uIApEZXRhaWxlZCBkZXNjcmlwdGlvbnMgYXJlIHByb3ZpZGVkIGhlcmUgb25seSBmb3Igb3BlcmF0aW9ucyB0aGF0IGFyZQpub3QgZGVzY3JpYmVkIGluIHRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXVsdGlfYXJyYXk8L2NvZGU+IHJlZmVyZW5jZS4KPC9wPjxwPjxiPlN5bm9wc2lzLqA8L2I+PC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KCm5hbWVzcGFjZSBib29zdCB7Cgp0ZW1wbGF0ZSAmbHQ7dHlwZW5hbWUgVmFsdWVUeXBlLCAKICAgICAgICAgIHN0ZDo6c2l6ZV90IE51bURpbXMmZ3Q7CmNsYXNzIG11bHRpX2FycmF5X3JlZiB7CnB1YmxpYzoKLy8gdHlwZXM6CiAgdHlwZWRlZiBWYWx1ZVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ7CiAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKICB0eXBlZGVmICp1bnNwZWNpZmllZCogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOwogIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmICp1bnNwZWNpZmllZCogICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmICp1bnNwZWNpZmllZCogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjpzaXplX3R5cGUgICAgICAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgbXVsdGlfYXJyYXlfdHlwZXM6OmluZGV4ICAgICAgICAgICAgICBpbmRleDsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjppbmRleF9nZW4gICAgICAgICAgaW5kZXhfZ2VuOwogIHR5cGVkZWYgbXVsdGlfYXJyYXlfdHlwZXM6OmluZGV4X3JhbmdlICAgICAgICBpbmRleF9yYW5nZTsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjpleHRlbnRfZ2VuICAgICAgICAgZXh0ZW50X2dlbjsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjpleHRlbnRfcmFuZ2UgICAgICAgZXh0ZW50X3JhbmdlOwogIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlX29yZGVyX3R5cGU7CiAgCiAgLy8gdGVtcGxhdGUgdHlwZWRlZnMKICB0ZW1wbGF0ZSAmbHQ7c3RkOjpzaXplX3QgRGltcyZndDsgc3RydWN0ICAgICAgICAgICAgc3ViYXJyYXk7CiAgdGVtcGxhdGUgJmx0O3N0ZDo6c2l6ZV90IERpbXMmZ3Q7IHN0cnVjdCAgICAgICAgICAgIGNvbnN0X3N1YmFycmF5OwogIHRlbXBsYXRlICZsdDtzdGQ6OnNpemVfdCBEaW1zJmd0OyBzdHJ1Y3QgICAgICAgICAgICBhcnJheV92aWV3OwogIHRlbXBsYXRlICZsdDtzdGQ6OnNpemVfdCBEaW1zJmd0OyBzdHJ1Y3QgICAgICAgICAgICBjb25zdF9hcnJheV92aWV3OwogIAoKICAvLyBzdHJ1Y3RvcnMKCiAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIEV4dGVudExpc3QmZ3Q7CiAgZXhwbGljaXQgbXVsdGlfYXJyYXlfcmVmKGVsZW1lbnQqIGRhdGEsIGNvbnN0IEV4dGVudExpc3QmYW1wOyBzaXplcywKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdG9yYWdlX29yZGVyX3R5cGUmYW1wOyBzdG9yZSA9IGNfc3RvcmFnZV9vcmRlcigpKTsKICBleHBsaWNpdCBtdWx0aV9hcnJheV9yZWYoZWxlbWVudCogZGF0YSwgY29uc3QgZXh0ZW50c190dXBsZSZhbXA7IHJhbmdlcywKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdG9yYWdlX29yZGVyX3R5cGUmYW1wOyBzdG9yZSA9IGNfc3RvcmFnZV9vcmRlcigpKTsKICBtdWx0aV9hcnJheV9yZWYoY29uc3QgbXVsdGlfYXJyYXlfcmVmJmFtcDsgeCk7CiAgfm11bHRpX2FycmF5X3JlZigpOwoKICAvLyBtb2RpZmllcnMKCiAgbXVsdGlfYXJyYXlfcmVmJmFtcDsgb3BlcmF0b3I9KGNvbnN0IG11bHRpX2FycmF5X3JlZiZhbXA7IHgpOwogIHRlbXBsYXRlICZsdDtjbGFzcyBBcnJheSZndDsgbXVsdGlfYXJyYXlfcmVmJmFtcDsgb3BlcmF0b3I9KGNvbnN0IEFycmF5JmFtcDsgeCk7CgogIC8vIGl0ZXJhdG9yczoKICBpdGVyYXRvcgkJCQliZWdpbigpOwogIGl0ZXJhdG9yCQkJCWVuZCgpOwogIGNvbnN0X2l0ZXJhdG9yCQkJYmVnaW4oKSBjb25zdDsKICBjb25zdF9pdGVyYXRvcgkJCWVuZCgpIGNvbnN0OwogIHJldmVyc2VfaXRlcmF0b3IJCQlyYmVnaW4oKTsKICByZXZlcnNlX2l0ZXJhdG9yCQkJcmVuZCgpOwogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IJCXJiZWdpbigpIGNvbnN0OwogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IJCXJlbmQoKSBjb25zdDsKCiAgLy8gY2FwYWNpdHk6CiAgc2l6ZV90eXBlCQkJCXNpemUoKSBjb25zdDsKICBzaXplX3R5cGUJCQkJbnVtX2VsZW1lbnRzKCkgY29uc3Q7CiAgc2l6ZV90eXBlCQkJCW51bV9kaW1lbnNpb25zKCkgY29uc3Q7CiAKICAvLyBlbGVtZW50IGFjY2VzczoKICB0ZW1wbGF0ZSAmbHQ7dHlwZW5hbWUgSW5kZXhMaXN0Jmd0OyAKICAgIGVsZW1lbnQmYW1wOwkJCW9wZXJhdG9yKCkoY29uc3QgSW5kZXhMaXN0JmFtcDsgaW5kaWNlcyk7CiAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIEluZGV4TGlzdCZndDsKICAgIGNvbnN0IGVsZW1lbnQmYW1wOwkJb3BlcmF0b3IoKShjb25zdCBJbmRleExpc3QmYW1wOyBpbmRpY2VzKSBjb25zdDsKICByZWZlcmVuY2UJCQlvcGVyYXRvcltdKGluZGV4IGkpOwogIGNvbnN0X3JlZmVyZW5jZQkJb3BlcmF0b3JbXShpbmRleCBpKSBjb25zdDsKICBhcnJheV92aWV3Jmx0O0RpbXMmZ3Q7Ojp0eXBlCW9wZXJhdG9yW10oY29uc3QgaW5kaWNlc190dXBsZSZhbXA7IHIpOwogIGNvbnN0X2FycmF5X3ZpZXcmbHQ7RGltcyZndDs6OnR5cGUJb3BlcmF0b3JbXShjb25zdCBpbmRpY2VzX3R1cGxlJmFtcDsgcikgY29uc3Q7CgogIC8vIHF1ZXJpZXMKICBlbGVtZW50KgkJCWRhdGEoKTsKICBjb25zdCBlbGVtZW50KgkJZGF0YSgpIGNvbnN0OwogIGVsZW1lbnQqCQkJb3JpZ2luKCk7CiAgY29uc3QgZWxlbWVudCoJCW9yaWdpbigpIGNvbnN0OwogIGNvbnN0IHNpemVfdHlwZSoJCXNoYXBlKCkgY29uc3Q7CiAgY29uc3QgaW5kZXgqCQkJc3RyaWRlcygpIGNvbnN0OwogIGNvbnN0IGluZGV4KgkJCWluZGV4X2Jhc2VzKCkgY29uc3Q7CiAgY29uc3Qgc3RvcmFnZV9vcmRlcl90eXBlJmFtcDsgICAgIHN0b3JhZ2Vfb3JkZXIoKSBjb25zdDsKCiAgLy8gY29tcGFyYXRvcnMKICBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGlfYXJyYXlfcmVmJmFtcDsgcmhzKTsKICBib29sIG9wZXJhdG9yIT0oY29uc3QgbXVsdGlfYXJyYXlfcmVmJmFtcDsgcmhzKTsKICBib29sIG9wZXJhdG9yJmx0Oyhjb25zdCBtdWx0aV9hcnJheV9yZWYmYW1wOyByaHMpOwogIGJvb2wgb3BlcmF0b3ImZ3Q7KGNvbnN0IG11bHRpX2FycmF5X3JlZiZhbXA7IHJocyk7CiAgYm9vbCBvcGVyYXRvciZndDs9KGNvbnN0IG11bHRpX2FycmF5X3JlZiZhbXA7IHJocyk7CiAgYm9vbCBvcGVyYXRvciZsdDs9KGNvbnN0IG11bHRpX2FycmF5X3JlZiZhbXA7IHJocyk7CgogIC8vIG1vZGlmaWVyczoKICB0ZW1wbGF0ZSAmbHQ7dHlwZW5hbWUgSW5wdXRJdGVyYXRvciZndDsKICAgIHZvaWQJCQlhc3NpZ24oSW5wdXRJdGVyYXRvciBiZWdpbiwgSW5wdXRJdGVyYXRvciBlbmQpOwogIHRlbXBsYXRlICZsdDt0eXBlbmFtZSBTaXplTGlzdCZndDsKICAgIHZvaWQJCQlyZXNoYXBlKGNvbnN0IFNpemVMaXN0JmFtcDsgc2l6ZXMpCiAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIEJhc2VMaXN0Jmd0Owl2b2lkIHJlaW5kZXgoY29uc3QgQmFzZUxpc3QmYW1wOyB2YWx1ZXMpOwogIHZvaWQJCQkJcmVpbmRleChpbmRleCB2YWx1ZSk7Cn07Cgo8L3ByZT48cD48Yj5Db25zdHJ1Y3RvcnMuoDwvYj48L3A+PGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZGw+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dGVtcGxhdGUgJmx0O3R5cGVuYW1lIEV4dGVudExpc3QmZ3Q7CmV4cGxpY2l0IG11bHRpX2FycmF5X3JlZihlbGVtZW50KiBkYXRhLCAKICAgICAgICAgICAgICAgICAgICAgY29uc3QgRXh0ZW50TGlzdCZhbXA7IHNpemVzLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdG9yYWdlX29yZGVyJmFtcDsgc3RvcmUgPSBjX3N0b3JhZ2Vfb3JkZXIoKSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxsb2NhdG9yJmFtcDsgYWxsb2MgPSBBbGxvY2F0b3IoKSk7CjwvcHJlPjwvc3Bhbj48L2R0PjxkZD48cD4KVGhpcyBjb25zdHJ1Y3RzIGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5X3JlZjwvY29kZT4gdXNpbmcgdGhlIHNwZWNpZmllZApwYXJhbWV0ZXJzLiAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnNpemVzPC9jb2RlPiBzcGVjaWZpZXMgdGhlIHNoYXBlIG9mIHRoZQpjb25zdHJ1Y3RlZCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXVsdGlfYXJyYXlfcmVmPC9jb2RlPi4gIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5zdG9yZTwvY29kZT4Kc3BlY2lmaWVzIHRoZSBzdG9yYWdlIG9yZGVyIG9yIGxheW91dCBpbiBtZW1vcnkgb2YgdGhlIGFycmF5CmRpbWVuc2lvbnMuICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+YWxsb2M8L2NvZGU+IGlzIHVzZWQgdG8KYWxsb2NhdGUgdGhlIGNvbnRhaW5lZCBlbGVtZW50cy4KPC9wPjxwPjxiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5FeHRlbnRMaXN0PC9jb2RlPiBSZXF1aXJlbWVudHMuoDwvYj4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkV4dGVudExpc3Q8L2NvZGU+IG11c3QgbW9kZWwgPGEgaHJlZj0iLi4vLi4vdXRpbGl0eS9Db2xsZWN0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+Q29sbGVjdGlvbjwvYT4uCjwvcD48cD48Yj5QcmVjb25kaXRpb25zLqA8L2I+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPnNpemVzLnNpemUoKSA9PSBOdW1EaW1zOzwvY29kZT48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ZXhwbGljaXQgbXVsdGlfYXJyYXlfcmVmKGVsZW1lbnQqIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgIGV4dGVudF9nZW46Omdlbl90eXBlJmx0O051bURpbXMmZ3Q7Ojp0eXBlIHJhbmdlcywKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RvcmFnZV9vcmRlciZhbXA7IHN0b3JlID0gY19zdG9yYWdlX29yZGVyKCkpOwo8L3ByZT48L3NwYW4+PC9kdD48ZGQ+PHA+ClRoaXMgY29uc3RydWN0cyBhIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheV9yZWY8L2NvZGU+IHVzaW5nIHRoZSBzcGVjaWZpZWQKICAgIHBhcmFtZXRlcnMuICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+cmFuZ2VzPC9jb2RlPiBzcGVjaWZpZXMgdGhlIHNoYXBlIGFuZAppbmRleCBiYXNlcyBvZiB0aGUgY29uc3RydWN0ZWQgbXVsdGlfYXJyYXlfcmVmLiBJdCBpcyB0aGUgcmVzdWx0IG9mIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TnVtRGltczwvY29kZT4gY2hhaW5lZCBjYWxscyB0byAKICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5leHRlbnRfZ2VuOjpvcGVyYXRvcltdPC9jb2RlPi4gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnN0b3JlPC9jb2RlPgpzcGVjaWZpZXMgdGhlIHN0b3JhZ2Ugb3JkZXIgb3IgbGF5b3V0IGluIG1lbW9yeSBvZiB0aGUgYXJyYXkKZGltZW5zaW9ucy4gCjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgptdWx0aV9hcnJheV9yZWYoY29uc3QgbXVsdGlfYXJyYXlfcmVmJmFtcDsgeCk7CjwvcHJlPjwvc3Bhbj48L2R0PjxkZD48cD5UaGlzIGNvbnN0cnVjdHMgYSBzaGFsbG93IGNvcHkgb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPng8L2NvZGU+Lgo8L3A+PHA+PGI+Q29tcGxleGl0eS6gPC9iPiBDb25zdGFudCB0aW1lIChmb3IgY29udHJhc3QsIGNvbXBhcmUgdGhpcyB0bwp0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPiBjbGFzcyBjb3B5IGNvbnN0cnVjdG9yLgo8L3A+PC9kZD48L2RsPjwvZGl2PjxwPjxiPk1vZGlmaWVycy6gPC9iPjwvcD48ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkbD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KbXVsdGlfYXJyYXlfcmVmJmFtcDsgb3BlcmF0b3I9KGNvbnN0IG11bHRpX2FycmF5X3JlZiZhbXA7IHgpOwp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgQXJyYXkmZ3Q7IG11bHRpX2FycmF5X3JlZiZhbXA7IG9wZXJhdG9yPShjb25zdCBBcnJheSZhbXA7IHgpOwo8L3ByZT4KPC9zcGFuPjwvZHQ+PGRkPjxwPlRoaXMgcGVyZm9ybXMgYW4gZWxlbWVudC13aXNlIGNvcHkgb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPng8L2NvZGU+CmludG8gdGhlIGN1cnJlbnQgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5X3JlZjwvY29kZT4uPC9wPjxwPjxiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5BcnJheTwvY29kZT4gUmVxdWlyZW1lbnRzLqA8L2I+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkFycmF5PC9jb2RlPiBtdXN0IG1vZGVsIE11bHRpQXJyYXkuIAo8L3A+PHA+PGI+UHJlY29uZGl0aW9ucy6gPC9iPgo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0ZDo6ZXF1YWwodGhpcy0mZ3Q7c2hhcGUoKSx0aGlzLSZndDtzaGFwZSgpK3RoaXMtJmd0O251bV9kaW1lbnNpb25zKCksCnguc2hhcGUoKSk7PC9wcmU+PHA+PGI+UG9zdGNvbmRpdGlvbnMuoDwvYj4KPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4oKi50aGlzKSA9PSB4OzwvcHJlPjxwPgo8L3A+PHA+PGI+Q29tcGxleGl0eS6gPC9iPlRoZSBhc3NpZ25tZW50IG9wZXJhdG9ycyBwZXJmb3JtIApPKDxjb2RlIGNsYXNzPSJsaXRlcmFsIj54Lm51bV9lbGVtZW50cygpPC9jb2RlPikgY2FsbHMgdG8gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmVsZW1lbnQ8L2NvZGU+J3MgCmNvcHkgY29uc3RydWN0b3IuPC9wPjwvZGQ+PC9kbD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImNvbnN0X211bHRpX2FycmF5X3JlZiI+PC9hPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdF9tdWx0aV9hcnJheV9yZWY8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0X211bHRpX2FycmF5X3JlZjwvY29kZT4gaXMgYSBtdWx0aS1kaW1lbnNpb25hbCBjb250YWluZXIKYWRhcHRvci4gIEl0IHByb3ZpZGVzIHRoZSBNdWx0aUFycmF5IGludGVyZmFjZSBvdmVyIGFueSBjb250aWd1b3VzCmJsb2NrIG9mIGVsZW1lbnRzLiAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0X211bHRpX2FycmF5X3JlZjwvY29kZT4gZXhwb3J0cyB0aGUKc2FtZSBpbnRlcmZhY2UgYXMgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPiwgd2l0aCB0aGUgZXhjZXB0aW9uCm9mIHRoZSBjb25zdHJ1Y3RvcnMuCjwvcD48cD48Yj5Nb2RlbCBPZi6gPC9iPgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Y29uc3RfbXVsdGlfYXJyYXlfcmVmPC9jb2RlPiBtb2RlbHMKPGEgaHJlZj0iI011bHRpQXJyYXkiIHRpdGxlPSJNdWx0aUFycmF5IENvbmNlcHQiPk11bHRpQXJyYXk8L2E+LAo8YSBocmVmPSIuLi8uLi8uLi9saWJzL3V0aWxpdHkvQ29weUNvbnN0cnVjdGlibGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj5Db3B5Q29uc3RydWN0aWJsZTwvYT4uCmFuZCBkZXBlbmRpbmcgb24gdGhlIGVsZW1lbnQgdHlwZSwgaXQgbWF5IGFsc28gbW9kZWwKPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0VxdWFsaXR5Q29tcGFyYWJsZS5odG1sIiB0YXJnZXQ9Il90b3AiPkVxdWFsaXR5Q29tcGFyYWJsZTwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9MZXNzVGhhbkNvbXBhcmFibGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj5MZXNzVGhhbkNvbXBhcmFibGU8L2E+LiAKCkRldGFpbGVkIGRlc2NyaXB0aW9ucyBhcmUgcHJvdmlkZWQgaGVyZSBvbmx5IGZvciBvcGVyYXRpb25zIHRoYXQgYXJlCm5vdCBkZXNjcmliZWQgaW4gdGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4gcmVmZXJlbmNlLgo8L3A+PHA+PGI+U3lub3BzaXMuoDwvYj48L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgoKbmFtZXNwYWNlIGJvb3N0IHsKCnRlbXBsYXRlICZsdDt0eXBlbmFtZSBWYWx1ZVR5cGUsIAogICAgICAgICAgc3RkOjpzaXplX3QgTnVtRGltcywgCiAgICAgICAgICB0eXBlbmFtZSBUUHRyID0gY29uc3QgVComZ3Q7CmNsYXNzIGNvbnN0X211bHRpX2FycmF5X3JlZiB7CnB1YmxpYzoKLy8gdHlwZXM6CiAgdHlwZWRlZiBWYWx1ZVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ7CiAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKICB0eXBlZGVmICp1bnNwZWNpZmllZCogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOwogIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmICp1bnNwZWNpZmllZCogICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmICp1bnNwZWNpZmllZCogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjpzaXplX3R5cGUgICAgICAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgbXVsdGlfYXJyYXlfdHlwZXM6OmluZGV4ICAgICAgICAgICAgICBpbmRleDsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjppbmRleF9nZW4gICAgICAgICAgaW5kZXhfZ2VuOwogIHR5cGVkZWYgbXVsdGlfYXJyYXlfdHlwZXM6OmluZGV4X3JhbmdlICAgICAgICBpbmRleF9yYW5nZTsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjpleHRlbnRfZ2VuICAgICAgICAgZXh0ZW50X2dlbjsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjpleHRlbnRfcmFuZ2UgICAgICAgZXh0ZW50X3JhbmdlOwogIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlX29yZGVyX3R5cGU7CiAgCiAgLy8gdGVtcGxhdGUgdHlwZWRlZnMKICB0ZW1wbGF0ZSAmbHQ7c3RkOjpzaXplX3QgRGltcyZndDsgc3RydWN0ICAgICAgICAgICAgc3ViYXJyYXk7CiAgdGVtcGxhdGUgJmx0O3N0ZDo6c2l6ZV90IERpbXMmZ3Q7IHN0cnVjdCAgICAgICAgICAgIGNvbnN0X3N1YmFycmF5OwogIHRlbXBsYXRlICZsdDtzdGQ6OnNpemVfdCBEaW1zJmd0OyBzdHJ1Y3QgICAgICAgICAgICBhcnJheV92aWV3OwogIHRlbXBsYXRlICZsdDtzdGQ6OnNpemVfdCBEaW1zJmd0OyBzdHJ1Y3QgICAgICAgICAgICBjb25zdF9hcnJheV92aWV3OwogIAoKICAvLyBzdHJ1Y3RvcnMKCiAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIEV4dGVudExpc3QmZ3Q7CiAgZXhwbGljaXQgY29uc3RfbXVsdGlfYXJyYXlfcmVmKFRQdHIgZGF0YSwgY29uc3QgRXh0ZW50TGlzdCZhbXA7IHNpemVzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2Vfb3JkZXJfdHlwZSZhbXA7IHN0b3JlID0gY19zdG9yYWdlX29yZGVyKCkpOwogIGV4cGxpY2l0IGNvbnN0X211bHRpX2FycmF5X3JlZihUUHRyIGRhdGEsIGNvbnN0IGV4dGVudHNfdHVwbGUmYW1wOyByYW5nZXMsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RvcmFnZV9vcmRlcl90eXBlJmFtcDsgc3RvcmUgPSBjX3N0b3JhZ2Vfb3JkZXIoKSk7CiAgY29uc3RfbXVsdGlfYXJyYXlfcmVmKGNvbnN0IGNvbnN0X211bHRpX2FycmF5X3JlZiZhbXA7IHgpOwogIH5jb25zdF9tdWx0aV9hcnJheV9yZWYoKTsKCgoKICAvLyBpdGVyYXRvcnM6CiAgY29uc3RfaXRlcmF0b3IJCQliZWdpbigpIGNvbnN0OwogIGNvbnN0X2l0ZXJhdG9yCQkJZW5kKCkgY29uc3Q7CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgkJcmJlZ2luKCkgY29uc3Q7CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgkJcmVuZCgpIGNvbnN0OwoKICAvLyBjYXBhY2l0eToKICBzaXplX3R5cGUJCQkJc2l6ZSgpIGNvbnN0OwogIHNpemVfdHlwZQkJCQludW1fZWxlbWVudHMoKSBjb25zdDsKICBzaXplX3R5cGUJCQkJbnVtX2RpbWVuc2lvbnMoKSBjb25zdDsKIAogIC8vIGVsZW1lbnQgYWNjZXNzOgogIHRlbXBsYXRlICZsdDt0eXBlbmFtZSBJbmRleExpc3QmZ3Q7CiAgICBjb25zdCBlbGVtZW50JmFtcDsJCW9wZXJhdG9yKCkoY29uc3QgSW5kZXhMaXN0JmFtcDsgaW5kaWNlcykgY29uc3Q7CiAgY29uc3RfcmVmZXJlbmNlCQlvcGVyYXRvcltdKGluZGV4IGkpIGNvbnN0OwogIGNvbnN0X2FycmF5X3ZpZXcmbHQ7RGltcyZndDs6OnR5cGUJb3BlcmF0b3JbXShjb25zdCBpbmRpY2VzX3R1cGxlJmFtcDsgcikgY29uc3Q7CgogIC8vIHF1ZXJpZXMKICBjb25zdCBlbGVtZW50KgkJZGF0YSgpIGNvbnN0OwogIGNvbnN0IGVsZW1lbnQqCQlvcmlnaW4oKSBjb25zdDsKICBjb25zdCBzaXplX3R5cGUqCQlzaGFwZSgpIGNvbnN0OwogIGNvbnN0IGluZGV4KgkJCXN0cmlkZXMoKSBjb25zdDsKICBjb25zdCBpbmRleCoJCQlpbmRleF9iYXNlcygpIGNvbnN0OwogIGNvbnN0IHN0b3JhZ2Vfb3JkZXJfdHlwZSZhbXA7ICAgICBzdG9yYWdlX29yZGVyKCkgY29uc3Q7CgogIC8vIGNvbXBhcmF0b3JzCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X211bHRpX2FycmF5X3JlZiZhbXA7IHJocyk7CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X211bHRpX2FycmF5X3JlZiZhbXA7IHJocyk7CiAgYm9vbCBvcGVyYXRvciZsdDsoY29uc3QgY29uc3RfbXVsdGlfYXJyYXlfcmVmJmFtcDsgcmhzKTsKICBib29sIG9wZXJhdG9yJmd0Oyhjb25zdCBjb25zdF9tdWx0aV9hcnJheV9yZWYmYW1wOyByaHMpOwogIGJvb2wgb3BlcmF0b3ImZ3Q7PShjb25zdCBjb25zdF9tdWx0aV9hcnJheV9yZWYmYW1wOyByaHMpOwogIGJvb2wgb3BlcmF0b3ImbHQ7PShjb25zdCBjb25zdF9tdWx0aV9hcnJheV9yZWYmYW1wOyByaHMpOwoKICAvLyBtb2RpZmllcnM6CiAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIFNpemVMaXN0Jmd0OwogIHZvaWQJCQlyZXNoYXBlKGNvbnN0IFNpemVMaXN0JmFtcDsgc2l6ZXMpCiAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIEJhc2VMaXN0Jmd0Owl2b2lkIHJlaW5kZXgoY29uc3QgQmFzZUxpc3QmYW1wOyB2YWx1ZXMpOwogIHZvaWQJCQkJcmVpbmRleChpbmRleCB2YWx1ZSk7Cn07Cgo8L3ByZT48cD48Yj5Db25zdHJ1Y3RvcnMuoDwvYj48L3A+PGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZGw+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dGVtcGxhdGUgJmx0O3R5cGVuYW1lIEV4dGVudExpc3QmZ3Q7CmV4cGxpY2l0IGNvbnN0X211bHRpX2FycmF5X3JlZihUUHRyIGRhdGEsIAogICAgICAgICAgICAgICAgICAgICBjb25zdCBFeHRlbnRMaXN0JmFtcDsgc2l6ZXMsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2Vfb3JkZXImYW1wOyBzdG9yZSA9IGNfc3RvcmFnZV9vcmRlcigpKTsKPC9wcmU+PC9zcGFuPjwvZHQ+PGRkPjxwPgpUaGlzIGNvbnN0cnVjdHMgYSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Y29uc3RfbXVsdGlfYXJyYXlfcmVmPC9jb2RlPiB1c2luZyB0aGUgc3BlY2lmaWVkCnBhcmFtZXRlcnMuICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+c2l6ZXM8L2NvZGU+IHNwZWNpZmllcyB0aGUgc2hhcGUgb2YgdGhlCmNvbnN0cnVjdGVkIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdF9tdWx0aV9hcnJheV9yZWY8L2NvZGU+LiAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnN0b3JlPC9jb2RlPgpzcGVjaWZpZXMgdGhlIHN0b3JhZ2Ugb3JkZXIgb3IgbGF5b3V0IGluIG1lbW9yeSBvZiB0aGUgYXJyYXkKZGltZW5zaW9ucy4KPC9wPjxwPjxiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5FeHRlbnRMaXN0PC9jb2RlPiBSZXF1aXJlbWVudHMuoDwvYj4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkV4dGVudExpc3Q8L2NvZGU+IG11c3QgbW9kZWwgPGEgaHJlZj0iLi4vLi4vdXRpbGl0eS9Db2xsZWN0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+Q29sbGVjdGlvbjwvYT4uCjwvcD48cD48Yj5QcmVjb25kaXRpb25zLqA8L2I+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPnNpemVzLnNpemUoKSA9PSBOdW1EaW1zOzwvY29kZT48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ZXhwbGljaXQgY29uc3RfbXVsdGlfYXJyYXlfcmVmKFRQdHIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgZXh0ZW50X2dlbjo6Z2VuX3R5cGUmbHQ7TnVtRGltcyZndDs6OnR5cGUgcmFuZ2VzLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdG9yYWdlX29yZGVyJmFtcDsgc3RvcmUgPSBjX3N0b3JhZ2Vfb3JkZXIoKSk7CjwvcHJlPjwvc3Bhbj48L2R0PjxkZD48cD48Yj5FZmZlY3RzLqA8L2I+ClRoaXMgY29uc3RydWN0cyBhIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdF9tdWx0aV9hcnJheV9yZWY8L2NvZGU+IHVzaW5nIHRoZSBzcGVjaWZpZWQKICAgIHBhcmFtZXRlcnMuICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+cmFuZ2VzPC9jb2RlPiBzcGVjaWZpZXMgdGhlIHNoYXBlIGFuZAppbmRleCBiYXNlcyBvZiB0aGUgY29uc3RydWN0ZWQgY29uc3RfbXVsdGlfYXJyYXlfcmVmLiBJdCBpcyB0aGUgcmVzdWx0IG9mIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TnVtRGltczwvY29kZT4gY2hhaW5lZCBjYWxscyB0byAKICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5leHRlbnRfZ2VuOjpvcGVyYXRvcltdPC9jb2RlPi4gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnN0b3JlPC9jb2RlPgpzcGVjaWZpZXMgdGhlIHN0b3JhZ2Ugb3JkZXIgb3IgbGF5b3V0IGluIG1lbW9yeSBvZiB0aGUgYXJyYXkKZGltZW5zaW9ucy4gCjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgpjb25zdF9tdWx0aV9hcnJheV9yZWYoY29uc3QgY29uc3RfbXVsdGlfYXJyYXlfcmVmJmFtcDsgeCk7CjwvcHJlPjwvc3Bhbj48L2R0PjxkZD48cD48Yj5FZmZlY3RzLqA8L2I+VGhpcyBjb25zdHJ1Y3RzIGEgc2hhbGxvdyBjb3B5IG9mIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj54PC9jb2RlPi4KPC9wPjwvZGQ+PC9kbD48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iYXV4aWxpYXJ5Ij48L2E+QXV4aWxpYXJ5IENvbXBvbmVudHM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ibXVsdGlfYXJyYXlfdHlwZXMiPjwvYT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXVsdGlfYXJyYXlfdHlwZXM8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Cm5hbWVzcGFjZSBtdWx0aV9hcnJheV90eXBlcyB7CiAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqIGluZGV4OwogIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiBzaXplX3R5cGU7CiAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmICp1bnNwZWNpZmllZCogaW5kZXhfcmFuZ2U7CiAgdHlwZWRlZiAqdW5zcGVjaWZpZWQqIGV4dGVudF9yYW5nZTsKICB0eXBlZGVmICp1bnNwZWNpZmllZCogaW5kZXhfZ2VuOwogIHR5cGVkZWYgKnVuc3BlY2lmaWVkKiBleHRlbnRfZ2VuOwp9CjwvcHJlPjxwPk5hbWVzcGFjZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bXVsdGlfYXJyYXlfdHlwZXM8L2NvZGU+IGRlZmluZXMgdHlwZXMKYXNzb2NpYXRlZCB3aXRoIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4sCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheV9yZWY8L2NvZGU+LCBhbmQKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0X211bHRpX2FycmF5X3JlZjwvY29kZT4gdGhhdCBhcmUgbm90CmRlcGVuZGVudCB1cG9uIHRlbXBsYXRlIHBhcmFtZXRlcnMuICBUaGVzZSB0eXBlcyBmaW5kIGNvbW1vbiB1c2Ugd2l0aAphbGwgQm9vc3QuTXVsdGlhcnJheSBjb21wb25lbnRzLiAgVGhleSBhcmUgZGVmaW5lZAppbiBhIG5hbWVzcGFjZSBmcm9tIHdoaWNoIHRoZXkgY2FuIGJlIGFjY2Vzc2VkIGNvbnZlbmllbnRseS4KV2l0aCB0aGUgZXhjZXB0aW9uIG9mIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5leHRlbnRfZ2VuPC9jb2RlPiBhbmQgCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5leHRlbnRfcmFuZ2U8L2NvZGU+LCB0aGVzZSB0eXBlcyBmdWxmaWxsIHRoZSByb2xlcyBvZiB0aGUKc2FtZSBuYW1lIHJlcXVpcmVkIGJ5IE11bHRpQXJyYXkgYW5kIGFyZSBkZXNjcmliZWQgaW4gaXRzCmNvbmNlcHQgZGVmaW5pdGlvbi4gIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5leHRlbnRfZ2VuPC9jb2RlPiBhbmQKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmV4dGVudF9yYW5nZTwvY29kZT4gYXJlIGRlc2NyaWJlZCBiZWxvdy4KPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iZXh0ZW50X3JhbmdlIj48L2E+PGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+ZXh0ZW50X3JhbmdlPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+PGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+ZXh0ZW50X3JhbmdlPC9jb2RlPiBvYmplY3RzIGRlZmluZSBoYWxmIG9wZW4KaW50ZXJ2YWxzLiAgVGhleSBwcm92aWRlIHNoYXBlIGFuZCBpbmRleCBiYXNlIGluZm9ybWF0aW9uIHRvCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheTwvY29kZT4sIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheV9yZWY8L2NvZGU+LAogYW5kIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5jb25zdF9tdWx0aV9hcnJheV9yZWY8L2NvZGU+IGNvbnN0cnVjdG9ycy4KPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+ZXh0ZW50X3JhbmdlPC9jb2RlPnMgYXJlIHBhc3NlZCBpbgphZ2dyZWdhdGUgdG8gYW4gYXJyYXkgY29uc3RydWN0b3IgKHNlZQo8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj5leHRlbnRfZ2VuPC9jb2RlPiBmb3IgbW9yZSBkZXRhaWxzKS4KPC9wPjxwPjxiPlN5bm9wc2lzLqA8L2I+PC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KY2xhc3MgZXh0ZW50X3JhbmdlIHsKcHVibGljOgogIHR5cGVkZWYgbXVsdGlfYXJyYXlfdHlwZXM6OmluZGV4ICAgICAgaW5kZXg7CiAgdHlwZWRlZiBtdWx0aV9hcnJheV90eXBlczo6c2l6ZV90eXBlICBzaXplX3R5cGU7CgogIC8vIFN0cnVjdG9ycwogIGV4dGVudF9yYW5nZShpbmRleCBzdGFydCwgaW5kZXggZmluaXNoKTsKICBleHRlbnRfcmFuZ2UoaW5kZXggZmluaXNoKTsKICB+ZXh0ZW50X3JhbmdlKCk7CgogIC8vIFF1ZXJpZXMKICBpbmRleCBzdGFydCgpOwogIGluZGV4IGZpbmlzaCgpOwogIHNpemVfdHlwZSBzaXplKCk7Cn07PC9wcmU+PHA+PGI+TW9kZWwgT2YuoDwvYj5EZWZhdWx0Q29uc3RydWN0aWJsZSxDb3B5Q29uc3RydWN0aWJsZTwvcD48cD48Yj5NZXRob2RzIGFuZCBUeXBlcy6gPC9iPjwvcD48ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkbD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+ZXh0ZW50X3JhbmdlKGluZGV4IHN0YXJ0LCBpbmRleCBmaW5pc2gpPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD4gIFRoaXMgY29uc3RydWN0b3IgZGVmaW5lcyB0aGUgaGFsZiBvcGVuIGludGVydmFsCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5bc3RhcnQsZmluaXNoKTwvY29kZT4uIFRoZSBleHByZXNzaW9uCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5maW5pc2g8L2NvZGU+IG11c3QgYmUgZ3JlYXRlciB0aGFuIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5zdGFydDwvY29kZT4uCjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5leHRlbnRfcmFuZ2UoaW5kZXggZmluaXNoKTwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+VGhpcyBjb25zdHJ1Y3RvciBkZWZpbmVzIHRoZSBoYWxmIG9wZW4gaW50ZXJ2YWwKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPlswLGZpbmlzaCk8L2NvZGU+LiBUaGUgdmFsdWUgb2YgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmZpbmlzaDwvY29kZT4KbXVzdCBiZSBwb3NpdGl2ZS48L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+aW5kZXggc3RhcnQoKTwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBpbmRleCByZXByZXNlbnRlZCBieSB0aGUgcmFuZ2U8L3A+PC9kZD48ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+aW5kZXggZmluaXNoKCk8L2NvZGU+PC9zcGFuPjwvZHQ+PGRkPjxwPlRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdXBwZXIgYm91bmRhcnkgdmFsdWUgb2YgdGhlIGhhbGYtb3BlbgppbnRlcnZhbC4gIE5vdGUgdGhhdCB0aGUgcmFuZ2UgZG9lcyBub3QgaW5jbHVkZSB0aGlzIHZhbHVlLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5zaXplX3R5cGUgc2l6ZSgpPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5UaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIHNwZWNpZmllZCByYW5nZS4gSXQgaXMKZXF1aXZhbGVudCB0byA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ZmluaXNoKCktc3RhcnQoKTwvY29kZT4uPC9wPjwvZGQ+PC9kbD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImV4dGVudF9nZW4iPjwvYT48Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj5leHRlbnRfZ2VuPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+VGhlIDxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPmV4dGVudF9nZW48L2NvZGU+IGNsYXNzIGRlZmluZXMgYW4KaW50ZXJmYWNlIGZvciBhZ2dyZWdhdGluZyBhcnJheSBzaGFwZSBhbmQgaW5kZXhpbmcgaW5mb3JtYXRpb24gdG8gYmUKcGFzc2VkIHRvIGEgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5PC9jb2RlPiwgCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tdWx0aV9hcnJheV9yZWY8L2NvZGU+LCBvciA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Y29uc3RfbXVsdGlfYXJyYXlfcmVmPC9jb2RlPgpjb25zdHJ1Y3Rvci4gSXRzIGludGVyZmFjZSBtaW1pY3MgCiB0aGUgc3ludGF4IHVzZWQgdG8gZGVjbGFyZSBidWlsdC1pbiBhcnJheSB0eXBlcwppbiBDKysuIEZvciBleGFtcGxlLCB3aGlsZSBhIDMtZGltZW5zaW9uYWwgYXJyYXkgb2YgCjxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPmludDwvY29kZT4gdmFsdWVzIGluIEMrKyB3b3VsZCBiZQpkZWNsYXJlZCBhczoKPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgQVszXVs0XVs1XSw8L3ByZT48cD4KYSBzaW1pbGFyIDxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPm11bHRpX2FycmF5PC9jb2RlPiB3b3VsZCBiZSBkZWNsYXJlZDoKPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5tdWx0aV9hcnJheSZsdDtpbnQsMyZndDsgQShleHRlbnRzWzNdWzRdWzVdKS48L3ByZT48cD4KPC9wPjxwPjxiPlN5bm9wc2lzLqA8L2I+PC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KdGVtcGxhdGUgJmx0O3N0ZDo6c2l6ZV90IE51bVJhbmdlcyZndDsKY2xhc3MgKmltcGxlbWVudGF0aW9uX2RlZmluZWQqIHsKcHVibGljOgogIHR5cGVkZWYgbXVsdGlfYXJyYXlfdHlwZXM6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgbXVsdGlfYXJyYXlfdHlwZXM6OnNpemVfdHlwZSBzaXplX3R5cGU7CgogIHRlbXBsYXRlICZsdDtzdGQ6OnNpemVfdCBOdW1SYW5nZXMmZ3Q7IGNsYXNzIGdlbl90eXBlOwoKICBnZW5fdHlwZSZsdDtOdW1SYW5nZXMrMSZndDs6OnR5cGUgIG9wZXJhdG9yW10oY29uc3QgcmFuZ2UmYW1wOyBhX3JhbmdlKSBjb25zdDsKICBnZW5fdHlwZSZsdDtOdW1SYW5nZXMrMSZndDs6OnR5cGUgIG9wZXJhdG9yW10oaW5kZXggaWR4KSBjb25zdDsKfTsKCnR5cGVkZWYgKmltcGxlbWVudGF0aW9uX2RlZmluZWQqJmx0OzAmZ3Q7IGV4dGVudF9nZW47CjwvcHJlPjxwPjxiPk1ldGhvZHMgYW5kIFR5cGVzLqA8L2I+PC9wPjxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj50ZW1wbGF0ZSBnZW5fdHlwZSZsdDtSYW5nZXMmZ3Q7Ojp0eXBlPC9jb2RlPjwvc3Bhbj48L2R0PjxkZD48cD5UaGlzIHR5cGUgZ2VuZXJhdG9yIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgcmVzdWx0IG9mIAo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UmFuZ2VzPC9jb2RlPiBjaGFpbmVkIGNhbGxzIHRvCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5leHRlbnRfZ2VuOjpvcGVyYXRvcltdLjwvY29kZT4gVGhlIHR5cGVzCjxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPmV4dGVudF9nZW48L2NvZGU+IGFuZAo8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj5nZW5fdHlwZSZsdDswJmd0Ozo6dHlwZTwvY29kZT4gYXJlIHRoZSBzYW1lLjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nZW5fdHlwZSZsdDtOdW1SYW5nZXMrMSZndDs6OnR5cGUgIApvcGVyYXRvcltdKGNvbnN0IGV4dGVudF9yYW5nZSZhbXA7IGFfcmFuZ2UpIGNvbnN0OzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+VGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IG9iamVjdCBjb250YWluaW5nIGFsbCBwcmV2aW91cwo8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj5leHRlbnRfcmFuZ2U8L2NvZGU+IG9iamVjdHMgaW4gYWRkaXRpb24gdG8KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmFfcmFuZ2UuPC9jb2RlPiA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj5leHRlbnRfcmFuZ2U8L2NvZGU+Cm9iamVjdHMgYXJlIGFnZ3JlZ2F0ZWQgYnkgY2hhaW5lZCBjYWxscyB0bwo8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm9wZXJhdG9yW108L2NvZGU+LjwvcD48L2RkPjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nZW5fdHlwZSZsdDtOdW1SYW5nZXMrMSZndDs6OnR5cGUKb3BlcmF0b3JbXShpbmRleCBpZHgpIGNvbnN0OzwvY29kZT48L3NwYW4+PC9kdD48ZGQ+PHA+VGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IG9iamVjdCBjb250YWluaW5nIGFsbCBwcmV2aW91cwo8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj5leHRlbnRfcmFuZ2U8L2NvZGU+IG9iamVjdHMgaW4gYWRkaXRpb24gdG8KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmV4dGVudF9yYW5nZSgwLGlkeCkuPC9jb2RlPiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBhcnJheQpjb25zdHJ1Y3RvcnMgYSBzaW1pbGFyIHN5bnRheCB0byB0cmFkaXRpb25hbCBDIG11bHRpZGltZW5zaW9uYWwgYXJyYXkKZGVjbGFyYXRpb24uPC9wPjwvZGQ+PC9kbD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImlkODYyODMwIj48L2E+R2xvYmFsIE9iamVjdHM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPkZvciBzeW50YWN0aWMgY29udmVuaWVuY2UsIEJvb3N0Lk11bHRpQXJyYXkgZGVmaW5lcyB0d28gCmdsb2JhbCBvYmplY3RzIGFzIHBhcnQgb2YgaXRzCmludGVyZmFjZS4gIFRoZXNlIG9iamVjdHMgcGxheSB0aGUgcm9sZSBvZiBvYmplY3QgZ2VuZXJhdG9yczsKZXhwcmVzc2lvbnMgaW52b2x2aW5nIHRoZW0gY3JlYXRlIG90aGVyIG9iamVjdHMgb2YgaW50ZXJlc3QuCjwvcD48cD4gVW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCB0aGUgdHdvIGdsb2JhbCBvYmplY3RzIG1heSBiZQpjb25zaWRlcmVkIGV4Y2Vzc2l2ZSBvdmVyaGVhZC4gIFRoZWlyIGNvbnN0cnVjdGlvbiBjYW4gYmUgcHJldmVudGVkIGJ5CmRlZmluaW5nIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9sCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5CT09TVF9NVUxUSV9BUlJBWV9OT19HRU5FUkFUT1JTPC9jb2RlPiBiZWZvcmUgaW5jbHVkaW5nCjxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+Ym9vc3QvbXVsdGlfYXJyYXkuaHBwLjwvY29kZT48L3A+PGRpdiBjbGFzcz0ic2VjdDMiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJleHRlbnRzIj48L2E+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmV4dGVudHM8L2NvZGU+PC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Cm5hbWVzcGFjZSBib29zdCB7CiAgbXVsdGlfYXJyYXlfYmFzZTo6ZXh0ZW50X2dlbiBleHRlbnRzOwp9CjwvcHJlPjxwPkJvb3N0Lk11bHRpQXJyYXkncyBhcnJheSBjbGFzc2VzIHVzZSB0aGUKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmV4dGVudHM8L2NvZGU+IGdsb2JhbCBvYmplY3QgdG8gc3BlY2lmeSAKYXJyYXkgc2hhcGUgZHVyaW5nIHRoZWlyIGNvbnN0cnVjdGlvbi4gCkZvciBleGFtcGxlLAphIDMgYnkgMyBieSAzIDxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPm11bHRpX2FycmF5PC9jb2RlPiBpcyBjb25zdHJ1Y3RlZCBhcyBmb2xsb3dzOgo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPm11bHRpX2FycmF5Jmx0O2ludCwzJmd0OyBBKGV4dGVudHNbM11bM11bM10pOzwvcHJlPjxwPgpUaGUgc2FtZSBhcnJheSBjb3VsZCBhbHNvIGJlIGNyZWF0ZWQgYnkgZXhwbGljaXRseSBkZWNsYXJpbmcgYW4gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmV4dGVudF9nZW48L2NvZGU+IApvYmplY3QgbG9jYWxseSwsIGJ1dCB0aGUgZ2xvYmFsIG9iamVjdCBtYWtlcyB0aGlzIGRlY2xhcmF0aW9uIHVubmVjZXNzYXJ5LiAgCjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MyIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImluZGljZXMiPjwvYT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aW5kaWNlczwvY29kZT48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KbmFtZXNwYWNlIGJvb3N0IHsKICBtdWx0aV9hcnJheV9iYXNlOjppbmRleF9nZW4gIGluZGljZXM7Cn0KPC9wcmU+PHA+VGhlIE11bHRpQXJyYXkgY29uY2VwdCBzcGVjaWZpZXMgYW4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X2dlbjwvY29kZT4gYXNzb2NpYXRlZCB0eXBlIHRoYXQgaXMgdXNlZCB0bwpjcmVhdGUgdmlld3MuCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pbmRpY2VzPC9jb2RlPiBpcyBhIGdsb2JhbCBvYmplY3QgdGhhdCBzZXJ2ZXMgdGhlIHJvbGUgb2YKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGV4X2dlbjwvY29kZT4gZm9yIGFsbCBhcnJheSBjb21wb25lbnRzIHByb3ZpZGVkIGJ5IHRoaXMKbGlicmFyeSBhbmQgdGhlaXIgYXNzb2NpYXRlZCBzdWJhcnJheXMgYW5kIHZpZXdzLiAKPC9wPjxwPkZvciBleGFtcGxlLCB1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluZGljZXM8L2NvZGU+IG9iamVjdCwKYSB2aWV3IG9mIGFuIGFycmF5IDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5BPC9jb2RlPiBpcyBjb25zdHJ1Y3RlZCBhcyBmb2xsb3dzOgo8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgpBW2luZGljZXNbaW5kZXhfcmFuZ2UoMCw1KV1bMl1baW5kZXhfcmFuZ2UoMiw0KV1dOwo8L3ByZT48cD4KPC9wPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iZ2VuZXJhdG9ycyI+PC9hPlZpZXcgYW5kIFN1YkFycmF5IEdlbmVyYXRvcnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgpCb29zdC5NdWx0aUFycmF5IHByb3ZpZGVzIHRyYWl0cyBjbGFzc2VzLCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+c3ViYXJyYXlfZ2VuPC9jb2RlPiwKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0X3N1YmFycmF5X2dlbjwvY29kZT4sCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hcnJheV92aWV3X2dlbjwvY29kZT4sCmFuZCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Y29uc3RfYXJyYXlfdmlld19nZW48L2NvZGU+LCBmb3IgbmFtaW5nIG9mCmFycmF5IGFzc29jaWF0ZWQgdHlwZXMgd2l0aGluIGZ1bmN0aW9uIHRlbXBsYXRlcy4gIApJbiBnZW5lcmFsIHRoaXMgaXMgbm8gbW9yZSBjb252ZW5pZW50IHRvIHVzZSB0aGFuIHRoZSBuZXN0ZWQgCnR5cGUgZ2VuZXJhdG9ycywgYnV0IHRoZSBsaWJyYXJ5IGF1dGhvciBmb3VuZCB0aGF0IHNvbWUgQysrIGNvbXBpbGVycyBkbyBub3QgCnByb3Blcmx5IGhhbmRsZSB0ZW1wbGF0ZXMgbmVzdGVkIHdpdGhpbiBmdW5jdGlvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdHlwZXMuIApUaGVzZSBnZW5lcmF0b3JzIGNvbnN0aXR1dGUgYSB3b3JrYXJvdW5kIGZvciB0aGlzIGRlZmljaXQuICAKVGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgaWxsdXN0cmF0ZXMKdGhlIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gdGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hcnJheV92aWV3X2dlbjwvY29kZT4KdHJhaXRzIGNsYXNzIGFuZCB0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmFycmF5X3ZpZXc8L2NvZGU+IHR5cGUgYXNzb2NpYXRlZCB0bwphbiBhcnJheToKCjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CnRlbXBsYXRlICZsdDt0eXBlbmFtZSBBcnJheSZndDsKdm9pZCBteV9mdW5jdGlvbigpIHsKICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5Ojp0ZW1wbGF0ZSBhcnJheV92aWV3Jmx0OzMmZ3Q7Ojp0eXBlIHZpZXcxX3Q7CiAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6YXJyYXlfdmlld19nZW4mbHQ7QXJyYXksMyZndDs6OnR5cGUgdmlldzJfdDsKICAvLyAuLi4KfQo8L3ByZT48cD4KCkluIHRoZSBhYm92ZSBleGFtcGxlLCA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+dmlldzFfdDwvY29kZT4gYW5kCjxjb2RlIGNsYXNzPSJsaXRlcmFsIj52aWV3Ml90PC9jb2RlPiBoYXZlIHRoZSBzYW1lIHR5cGUuCjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Im1lbW9yeV9sYXlvdXQiPjwvYT5NZW1vcnkgTGF5b3V0IFNwZWNpZmllcnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgpXaGlsZSBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkgcmVwcmVzZW50cyBhIGhpZXJhcmNoeSBvZiBjb250YWluZXJzIG9mCmVsZW1lbnRzLCBhdCBzb21lIHBvaW50IHRoZSBlbGVtZW50cyBtdXN0IGJlIGxhaWQgb3V0IGluCm1lbW9yeS4gIEFzIGEgcmVzdWx0LCBhIHNpbmdsZSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5IApjYW4gYmUgcmVwcmVzZW50ZWQgaW4gbWVtb3J5IG1vcmUgdGhhbiBvbmUgd2F5Lgo8L3A+PHA+Rm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSB0d28gZGltZW5zaW9uYWwgYXJyYXkgc2hvd24gYmVsb3cgaW4KbWF0cml4IG5vdGF0aW9uOgoKPC9wPjxkaXY+PGltZyBzcmM9Im1hdHJpeC5naWYiPjwvZGl2PjxwPgoKSGVyZSBpcyBob3cgdGhlIGFib3ZlIGFycmF5IGlzIGV4cHJlc3NlZCBpbiBDKys6CjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CmludCBhWzNdWzRdID0geyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEgfTsKPC9wcmU+PHA+ClRoaXMgaXMgYW4gZXhhbXBsZSBvZiByb3ctbWFqb3Igc3RvcmFnZSwgd2hlcmUgZWxlbWVudHMgb2YgZWFjaCByb3cKYXJlIHN0b3JlZCBjb250aWd1b3VzbHkuICAKCldoaWxlIEMrKyB0cmFuc3BhcmVudGx5IGhhbmRsZXMgYWNjZXNzaW5nIGVsZW1lbnRzIG9mIGFuIGFycmF5LCB5b3UKY2FuIGFsc28gbWFuYWdlIHRoZSBhcnJheSBhbmQgaXRzIGluZGV4aW5nIG1hbnVhbGx5LiAgT25lIHdheSB0aGF0IAp0aGlzIG1heSBiZSBleHByZXNzZWQgaW4gbWVtb3J5IGlzIGFzIGZvbGxvd3M6CjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CmludCBhW10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSB9OwppbnQgc1tdID0geyA0LCAxIH07CjwvcHJlPjxwPgoKV2l0aCB0aGUgbGF0dGVyIGRlY2xhcmF0aW9uIG9mIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hPC9jb2RlPiBhbmQgCnN0cmlkZXMgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnM8L2NvZGU+LCBlbGVtZW50IDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hKGksaik8L2NvZGU+Cm9mIHRoZSBhcnJheSBjYW4gYmUKYWNjZXNzZWQgdXNpbmcgdGhlIGV4cHJlc3Npb24gCjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+KmEraSpzWzBdK2oqc1sxXTwvcHJlPjxwPi4KPC9wPjxwPlRoZSBzYW1lIHR3byBkaW1lbnNpb25hbCBhcnJheSBjb3VsZCBiZSBsYWlkIG91dCBieSBjb2x1bW4gYXMgZm9sbG93czoKCjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CmludCBhW10gPSB7IDAsIDQsIDgsIDEsIDUsIDksIDIsIDYsIDEwLCAzLCA3LCAxMSB9OwppbnQgc1tdID0geyAzLCAxIH07CjwvcHJlPjxwPgpOb3RpY2UgdGhhdCB0aGUgc3RyaWRlcyBoZXJlIGFyZSBkaWZmZXJlbnQuIEFzIGEgcmVzdWx0LApUaGUgZXhwcmVzc2lvbiBnaXZlbiBhYm92ZSB0byBhY2Nlc3MgdmFsdWVzIHdpbGwgd29yayB3aXRoIHRoaXMgcGFpcgpvZiBkYXRhIGFuZCBzdHJpZGVzIGFzIHdlbGwuCjwvcD48cD5JbiBhZGRpdGlvbiB0byBkaW1lbnNpb24gb3JkZXIsIGl0IGlzIGFsc28gcG9zc2libGUgdG8Kc3RvcmUgYW55IGRpbWVuc2lvbiBpbiBkZXNjZW5kaW5nIG9yZGVyLiBGb3IgZXhhbXBsZSwgcmV0dXJuaW5nIHRvIHRoZSAKZmlyc3QgZXhhbXBsZSwgdGhlIGZpcnN0IGRpbWVuc2lvbiBvZiB0aGUgZXhhbXBsZSBhcnJheSwgdGhlIApyb3dzLCAgY291bGQgYmUgc3RvcmVkIGluIApyZXZlcnNlLCByZXN1bHRpbmcgaW4gdGhlIGZvbGxvd2luZzoKCjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CmludCBkYXRhW10gPSB7IDgsIDksIDEwLCAxMSwgNCwgNSwgNiwgNywgMCwgMSwgMiwgMyB9OwppbnQgKmEgPSBkYXRhICsgODsKaW50IHNbXSA9IHsgLTQsIDEgfTsKPC9wcmU+PHA+CgpOb3RlIHRoYXQgaW4gdGhpcyBleGFtcGxlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5hPC9jb2RlPiBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0CnRvIHRoZSBvcmlnaW4uIEluIHRoZSBwcmV2aW91cyBleGFtcGxlcywgdGhlCmZpcnN0IGVsZW1lbnQgc3RvcmVkIGluIG1lbW9yeSB3YXMgdGhlIG9yaWdpbjsgaGVyZSB0aGlzIGlzIG5vIGxvbmdlcgp0aGUgY2FzZS4gCjwvcD48cD4KQWx0ZXJuYXRpdmVseSwgdGhlIHNlY29uZCBkaW1lbnNpb24sIG9yIHRoZSBjb2x1bW5zLCBjb3VsZCBiZSByZXZlcnNlZAphbmQgdGhlIHJvd3Mgc3RvcmVkIGluIGFzY2VuZGluZyBvcmRlcjoKCjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CmludCBkYXRhW10gPSB7IDMsIDIsIDEsIDAsICA3LCA2LCA1LCA0LCAxMSwgMTAsIDksIDggfTsKaW50ICphID0gZGF0YSArIDM7CmludCBzW10gPSB7IDQsIC0xIH07CjwvcHJlPjxwPgo8L3A+PHA+CkZpbmFsbHksIGJvdGggZGltZW5zaW9ucyBjb3VsZCBiZSBzdG9yZWQgaW4gZGVzY2VuZGluZyBvcmRlcjoKCjwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CmludCBkYXRhW10gPSB7MTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwfTsKaW50ICphID0gZGF0YSArIDExOwppbnQgc1tdID0geyAtNCwgLTEgfTsKPC9wcmU+PHA+Cjxjb2RlIGNsYXNzPSJsaXRlcmFsIj4KPC9jb2RlPgo8L3A+PHA+CkFsbCBvZiB0aGUgYWJvdmUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LiBUaGUgZXhwcmVzc2lvbgpnaXZlbiBhYm92ZSBmb3IgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmEoaSxqKTwvY29kZT4gd2lsbCB5aWVsZCB0aGUgc2FtZSB2YWx1ZQpyZWdhcmRsZXNzIG9mIHRoZSBtZW1vcnkgbGF5b3V0LgoKQm9vc3QuTXVsdGlBcnJheSBhcnJheXMgY2FuIGJlIGNyZWF0ZWQgd2l0aCBjdXN0b21pemVkIHN0b3JhZ2UKcGFyYW1ldGVycyBhcyBkZXNjcmliZWQgYWJvdmUuIFRodXMsIGV4aXN0aW5nIGRhdGEgY2FuIGJlIGFkYXB0ZWQKKHdpdGggPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm11bHRpX2FycmF5X3JlZjwvY29kZT4gb3IKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNvbnN0X211bHRpX2FycmF5X3JlZjwvY29kZT4pIGFzIHN1aXRlZCB0byB0aGUgYXJyYXkKYWJzdHJhY3Rpb24uICBBIGNvbW1vbiB1c2FnZSBvZiB0aGlzIGZlYXR1cmUgd291bGQgYmUgdG8gd3JhcCBhcnJheXMKdGhhdCBtdXN0IGludGVyb3BlcmF0ZSB3aXRoIEZvcnRyYW4gcm91dGluZXMgc28gdGhleSBjYW4gYmUKbWFuaXB1bGF0ZWQgbmF0dXJhbGx5IGF0IGJvdGggdGhlIEMrKyBhbmQgRm9ydHJhbiBsZXZlbHMuIFRoZQpmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIEJvb3N0Lk11bHRpQXJyYXkgY29tcG9uZW50cyB1c2VkIHRvCnNwZWNpZnkgbWVtb3J5IGxheW91dC4KPC9wPjxkaXYgY2xhc3M9InNlY3QzIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iY19zdG9yYWdlX29yZGVyIj48L2E+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNfc3RvcmFnZV9vcmRlcjwvY29kZT48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KY2xhc3MgY19zdG9yYWdlX29yZGVyIHsKICBjX3N0b3JhZ2Vfb3JkZXIoKTsKfTsKPC9wcmU+PHA+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmNfc3RvcmFnZV9vcmRlcjwvY29kZT4gaXMgdXNlZCB0byBzcGVjaWZ5IHRoYXQgYW4KYXJyYXkgc2hvdWxkIHN0b3JlIGl0cyBlbGVtZW50cyB1c2luZyB0aGUgc2FtZSBsYXlvdXQgYXMgdGhhdCB1c2VkIGJ5CnByaW1pdGl2ZSBDKysgbXVsdGlkaW1lbnNpb25hbCBhcnJheXMsIHRoYXQgaXMsIGZyb20gbGFzdCBkaW1lbnNpb24KdG8gZmlyc3QuIFRoaXMgaXMgdGhlIGRlZmF1bHQgc3RvcmFnZSBvcmRlciBmb3IgdGhlIGFycmF5cyBwcm92aWRlZCBieQp0aGlzIGxpYnJhcnkuPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QzIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iZm9ydHJhbl9zdG9yYWdlX29yZGVyIj48L2E+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmZvcnRyYW5fc3RvcmFnZV9vcmRlcjwvY29kZT48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KY2xhc3MgZm9ydHJhbl9zdG9yYWdlX29yZGVyIHsKICBmb3J0cmFuX3N0b3JhZ2Vfb3JkZXIoKTsKfTsKPC9wcmU+PHA+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmZvcnRyYW5fc3RvcmFnZV9vcmRlcjwvY29kZT4gaXMgdXNlZCB0byBzcGVjaWZ5IHRoYXQKYW4gYXJyYXkgc2hvdWxkIHN0b3JlIGl0cyBlbGVtZW50cyB1c2luZyB0aGUgc2FtZSBtZW1vcnkgbGF5b3V0IGFzIGEKRm9ydHJhbiBtdWx0aWRpbWVuc2lvbmFsIGFycmF5IHdvdWxkLCB0aGF0IGlzLCBmcm9tIGZpcnN0IGRpbWVuc2lvbiB0bwpsYXN0LjwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MyIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9ImdlbmVyYWxfc3RvcmFnZV9vcmRlciI+PC9hPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5nZW5lcmFsX3N0b3JhZ2Vfb3JkZXI8L2NvZGU+PC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CnRlbXBsYXRlICZsdDtzdGQ6OnNpemVfdCBOdW1EaW1zJmd0OyAKY2xhc3MgZ2VuZXJhbF9zdG9yYWdlX29yZGVyIHsKCiAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIE9yZGVyaW5nSXRlciwgdHlwZW5hbWUgQXNjZW5kaW5nSXRlciZndDsKICBnZW5lcmFsX3N0b3JhZ2Vfb3JkZXIoT3JkZXJpbmdJdGVyIG9yZGVyaW5nLCBBc2NlbmRpbmdJdGVyIGFzY2VuZGluZyk7Cn07CjwvcHJlPjxwPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5nZW5lcmFsX3N0b3JhZ2Vfb3JkZXI8L2NvZGU+IGFsbG93cyB0aGUgdXNlciB0bwpzcGVjaWZ5IGFuIGFyYml0cmFyeSBtZW1vcnkgbGF5b3V0IGZvciB0aGUgY29udGVudHMgb2YgYW4gYXJyYXkuICBUaGUKY29uc3RydWN0ZWQgb2JqZWN0IGlzIHBhc3NlZCB0byB0aGUgYXJyYXkgY29uc3RydWN0b3IgaW4gb3JkZXIgdG8Kc3BlY2lmeSBzdG9yYWdlIG9yZGVyLjwvcD48cD4KPGNvZGUgY2xhc3M9ImxpdGVyYWwiPk9yZGVyaW5nSXRlcjwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5Bc2NlbmRpbmdJdGVyPC9jb2RlPgptdXN0IG1vZGVsIHRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SW5wdXRJdGVyYXRvcjwvY29kZT4gY29uY2VwdC4gIEJvdGgKaXRlcmF0b3JzIG11c3QgcmVmZXIgdG8gYSByYW5nZSBvZiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TnVtRGltczwvY29kZT4KZWxlbWVudHMuICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QXNjZW5kaW5nSXRlcjwvY29kZT4gcG9pbnRzIHRvIG9iamVjdHMKY29udmVydGlibGUgdG8gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmJvb2w8L2NvZGU+LiAgQSB2YWx1ZSBvZgo8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+dHJ1ZTwvY29kZT4gbWVhbnMgdGhhdCBhIGRpbWVuc2lvbiBpcyBzdG9yZWQgaW4gYXNjZW5kaW5nCm9yZGVyIHdoaWxlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5mYWxzZTwvY29kZT4gbWVhbnMgdGhhdCBhIGRpbWVuc2lvbiBpcyBzdG9yZWQKaW4gZGVzY2VuZGluZyBvcmRlci4gIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5PcmRlcmluZ0l0ZXI8L2NvZGU+IHNwZWNpZmllcyB0aGUKb3JkZXIgaW4gd2hpY2ggZGltZW5zaW9ucyBhcmUgc3RvcmVkLgo8L3A+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJyYW5nZV9jaGVja2luZyI+PC9hPlJhbmdlIENoZWNraW5nPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KQnkgZGVmYXVsdCwgdGhlIGFycmF5IGFjY2VzcyBtZXRob2RzIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5vcGVyYXRvcigpPC9jb2RlPiBhbmQKPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm9wZXJhdG9yW108L2NvZGU+IHBlcmZvcm0gcmFuZ2UKY2hlY2tpbmcuICBJZiBhIHN1cHBsaWVkIGluZGV4IGlzIG91dCBvZiB0aGUgcmFuZ2UgZGVmaW5lZCBmb3IgYW4KYXJyYXksIGFuIGFzc2VydGlvbiB3aWxsIGFib3J0IHRoZSBwcm9ncmFtLiAgVG8gZGlzYWJsZSByYW5nZQpjaGVja2luZyAoZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgaW4gcHJvZHVjdGlvbiByZWxlYXNlcyksIGRlZmluZQp0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPkJPT1NUX0RJU0FCTEVfQVNTRVJUUzwvY29kZT4gcHJlcHJvY2Vzc29yIG1hY3JvIHByaW9yIHRvCmluY2x1ZGluZyBtdWx0aV9hcnJheS5ocHAgaW4gYW4gYXBwbGljYXRpb24uCjwvcD48L2Rpdj48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgo=