LS0gJElkOiBNQVAtTVMtRGF0YVR5cGVzLmFzbiAyODE0OSAyMDA5LTA0LTI1IDE3OjQ1OjM0WiBldHhyYWIgJAotLSAzR1BQIFRTIDI5LjAwMiBWOC45LjAgKDIwMDktMDQpIAotLSAxNy43LjEJTW9iaWxlIFNlcnZpY2UgZGF0YSB0eXBlcwoKTUFQLU1TLURhdGFUeXBlcyB7CiAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCiAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtTVMtRGF0YVR5cGVzICgxMSkgdmVyc2lvbjExICgxMSl9CgpERUZJTklUSU9OUwoKSU1QTElDSVQgVEFHUwoKOjo9CgpCRUdJTgoKRVhQT1JUUwoKCS0tIGxvY2F0aW9uIHJlZ2lzdHJhdGlvbiB0eXBlcwoJVXBkYXRlTG9jYXRpb25BcmcsCglVcGRhdGVMb2NhdGlvblJlcywKCUNhbmNlbExvY2F0aW9uQXJnLAoJQ2FuY2VsTG9jYXRpb25SZXMsIAoJUHVyZ2VNUy1BcmcsIAoJUHVyZ2VNUy1SZXMsCglTZW5kSWRlbnRpZmljYXRpb25BcmcsCglTZW5kSWRlbnRpZmljYXRpb25SZXMsIAoJVXBkYXRlR3Byc0xvY2F0aW9uQXJnLAoJVXBkYXRlR3Byc0xvY2F0aW9uUmVzLAoJSVNULVN1cHBvcnRJbmRpY2F0b3IsIAoJU3VwcG9ydGVkTENTLUNhcGFiaWxpdHlTZXRzLAoKCS0tIGdwcnMgbG9jYXRpb24gcmVnaXN0cmF0aW9uIHR5cGVzCglHU04tQWRkcmVzcywKCgktLSBoYW5kb3ZlciB0eXBlcwoJRm9yd2FyZEFjY2Vzc1NpZ25hbGxpbmctQXJnLAoJUHJlcGFyZUhPLUFyZywKCVByZXBhcmVITy1SZXMsCglQcmVwYXJlU3Vic2VxdWVudEhPLUFyZywgCglQcmVwYXJlU3Vic2VxdWVudEhPLVJlcywKCVByb2Nlc3NBY2Nlc3NTaWduYWxsaW5nLUFyZywKCVNlbmRFbmRTaWduYWwtQXJnLAoJU2VuZEVuZFNpZ25hbC1SZXMsCgoJLS0gYXV0aGVudGljYXRpb24gbWFuYWdlbWVudCB0eXBlcwoJU2VuZEF1dGhlbnRpY2F0aW9uSW5mb0FyZywKCVNlbmRBdXRoZW50aWNhdGlvbkluZm9SZXMsIAoJQXV0aGVudGljYXRpb25GYWlsdXJlUmVwb3J0QXJnLApBdXRoZW50aWNhdGlvbkZhaWx1cmVSZXBvcnRSZXMsCgoJLS0gc2VjdXJpdHkgbWFuYWdlbWVudCB0eXBlcwoJS2MsIAoJQ2tzbiwKCgktLSBlcXVpcG1lbnQgbWFuYWdlbWVudCB0eXBlcwoJQ2hlY2tJTUVJLUFyZywKCUNoZWNrSU1FSS1SZXMsCgoJLS0gc3Vic2NyaWJlciBtYW5hZ2VtZW50IHR5cGVzCglJbnNlcnRTdWJzY3JpYmVyRGF0YUFyZywKCUluc2VydFN1YnNjcmliZXJEYXRhUmVzLCAKCUxTQUlkZW50aXR5LAoJRGVsZXRlU3Vic2NyaWJlckRhdGFBcmcsCglEZWxldGVTdWJzY3JpYmVyRGF0YVJlcywKCUV4dC1Rb1MtU3Vic2NyaWJlZCwKCUV4dDItUW9TLVN1YnNjcmliZWQsIAoJRXh0My1Rb1MtU3Vic2NyaWJlZCwKCVN1YnNjcmliZXJEYXRhLAoJT0RCLURhdGEsCglTdWJzY3JpYmVyU3RhdHVzLAoJWm9uZUNvZGVMaXN0LAoJbWF4TnVtT2Zab25lQ29kZXMsIAoJTy1DU0ksIApELUNTSSwKCU8tQmNzbUNhbWVsVERQQ3JpdGVyaWFMaXN0LCAKCVQtQkNTTS1DQU1FTC1URFAtQ3JpdGVyaWFMaXN0LAoJU1MtQ1NJLAoJU2VydmljZUtleSwKCURlZmF1bHRDYWxsSGFuZGxpbmcsCglDYW1lbENhcGFiaWxpdHlIYW5kbGluZywKCUJhc2ljU2VydmljZUNyaXRlcmlhLAoJU3VwcG9ydGVkQ2FtZWxQaGFzZXMsCglPZmZlcmVkQ2FtZWw0Q1NJcywKCU9mZmVyZWRDYW1lbDRGdW5jdGlvbmFsaXRpZXMsCgltYXhOdW1PZkNhbWVsVERQRGF0YSwKCUNVRy1JbmRleCwgCglDVUctSW5mbywKCUNVRy1JbnRlcmxvY2ssCglJbnRlckNVRy1SZXN0cmljdGlvbnMsCglJbnRyYUNVRy1PcHRpb25zLAoJTm90aWZpY2F0aW9uVG9NU1VzZXIsIAoJUW9TLVN1YnNjcmliZWQsCklTVC1BbGVydFRpbWVyVmFsdWUsCglULUNTSSwKCVQtQmNzbVRyaWdnZXJEZXRlY3Rpb25Qb2ludCwKQVBOLApBZGRpdGlvbmFsSW5mbywKCgktLSBmYXVsdCByZWNvdmVyeSB0eXBlcwoJUmVzZXRBcmcsCglSZXN0b3JlRGF0YUFyZywKCVJlc3RvcmVEYXRhUmVzLAoKLS0gcHJvdmlkZSBzdWJzY3JpYmVyIGluZm8gdHlwZXMgCkdlb2dyYXBoaWNhbEluZm9ybWF0aW9uLCAKTVMtQ2xhc3NtYXJrMiwKR1BSU01TQ2xhc3MsCgoJLS0gc3Vic2NyaWJlciBpbmZvcm1hdGlvbiBlbnF1aXJ5IHR5cGVzCglQcm92aWRlU3Vic2NyaWJlckluZm9BcmcsCglQcm92aWRlU3Vic2NyaWJlckluZm9SZXMsCglTdWJzY3JpYmVySW5mbywKCUxvY2F0aW9uSW5mb3JtYXRpb24sCglMb2NhdGlvbkluZm9ybWF0aW9uR1BSUywKCVJBSWRlbnRpdHksCglTdWJzY3JpYmVyU3RhdGUsCglHUFJTQ2hhcmdpbmdJRCwgCk1OUEluZm9SZXMsCglSb3V0ZWluZ051bWJlciwKCgktLSBhbnkgdGltZSBpbmZvcm1hdGlvbiBlbnF1aXJ5IHR5cGVzCglBbnlUaW1lSW50ZXJyb2dhdGlvbkFyZywKCUFueVRpbWVJbnRlcnJvZ2F0aW9uUmVzLAoKCS0tIGFueSB0aW1lIGluZm9ybWF0aW9uIGhhbmRsaW5nIHR5cGVzCglBbnlUaW1lU3Vic2NyaXB0aW9uSW50ZXJyb2dhdGlvbkFyZywKCUFueVRpbWVTdWJzY3JpcHRpb25JbnRlcnJvZ2F0aW9uUmVzLAoJQW55VGltZU1vZGlmaWNhdGlvbkFyZywKCUFueVRpbWVNb2RpZmljYXRpb25SZXMsCgoJLS0gc3Vic2NyaWJlciBkYXRhIG1vZGlmaWNhdGlvbiBub3RpZmljYXRpb24gdHlwZXMKCU5vdGVTdWJzY3JpYmVyRGF0YU1vZGlmaWVkQXJnLAoJTm90ZVN1YnNjcmliZXJEYXRhTW9kaWZpZWRSZXMsCgoJLS0gZ3BycyBsb2NhdGlvbiBpbmZvcm1hdGlvbiByZXRyaWV2YWwgdHlwZXMKCVNlbmRSb3V0aW5nSW5mb0ZvckdwcnNBcmcsCglTZW5kUm91dGluZ0luZm9Gb3JHcHJzUmVzLAoKCS0tIGZhaWx1cmUgcmVwb3J0aW5nIHR5cGVzCglGYWlsdXJlUmVwb3J0QXJnLAoJRmFpbHVyZVJlcG9ydFJlcywKCgktLSBncHJzIG5vdGlmaWNhdGlvbiB0eXBlcwoJTm90ZU1zUHJlc2VudEZvckdwcnNBcmcsCglOb3RlTXNQcmVzZW50Rm9yR3Byc1JlcywKCgktLSBNb2JpbGl0eSBNYW5hZ2VtZW50IHR5cGVzCk5vdGVNTS1FdmVudEFyZywKCU5vdGVNTS1FdmVudFJlcywKCU51bWJlclBvcnRhYmlsaXR5U3RhdHVzLAoJUGFnaW5nQXJlYSwKCgktLSBWR0NTIC8gVkJTIHR5cGVzIHR5cGVzCkdyb3VwSWQsIApMb25nLUdyb3VwSWQsCkFkZGl0aW9uYWxTdWJzY3JpcHRpb25zCgo7CgpJTVBPUlRTCgltYXhOdW1PZlNTLAoJU1MtU3Vic2NyaXB0aW9uT3B0aW9uLAoJU1MtTGlzdCwKCVNTLUZvckJTLUNvZGUsCglQYXNzd29yZApGUk9NIE1BUC1TUy1EYXRhVHlwZXMgewogICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQogICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLVNTLURhdGFUeXBlcyAoMTQpIHZlcnNpb24xMSAoMTEpfQoKCVNTLUNvZGUKRlJPTSBNQVAtU1MtQ29kZSB7CiAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCiAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtU1MtQ29kZSAoMTUpIHZlcnNpb24xMSAoMTEpfQoKCUV4dC1CZWFyZXJTZXJ2aWNlQ29kZQpGUk9NIE1BUC1CUy1Db2RlIHsKICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1CUy1Db2RlICgyMCkgdmVyc2lvbjExICgxMSl9CgoJRXh0LVRlbGVzZXJ2aWNlQ29kZQpGUk9NIE1BUC1UUy1Db2RlIHsKICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1UUy1Db2RlICgxOSkgdmVyc2lvbjExICgxMSl9CgoJQWRkcmVzc1N0cmluZywKSVNETi1BZGRyZXNzU3RyaW5nLCAKCUlTRE4tU3ViYWRkcmVzc1N0cmluZywgCglGVE4tQWRkcmVzc1N0cmluZywKCUFjY2Vzc05ldHdvcmtTaWduYWxJbmZvLAoJSU1TSSwgCglJTUVJLAoJVE1TSSwKCUhMUi1MaXN0LAoJTE1TSSwKCUlkZW50aXR5LAoJR2xvYmFsQ2VsbElkLAoJQ2VsbEdsb2JhbElkT3JTZXJ2aWNlQXJlYUlkT3JMQUksCglFeHQtQmFzaWNTZXJ2aWNlQ29kZSwKCU5BRUEtUHJlZmVycmVkQ0ksCglFTUxQUC1JbmZvLCAKCU1DLVNTLUluZm8sCglTdWJzY3JpYmVySWRlbnRpdHksCglBZ2VPZkxvY2F0aW9uSW5mb3JtYXRpb24sCglMQ1NDbGllbnRFeHRlcm5hbElELAoJTENTQ2xpZW50SW50ZXJuYWxJRCwKCUV4dC1TUy1TdGF0dXMsCglMQ1NTZXJ2aWNlVHlwZUlELAoJQVNDSS1DYWxsUmVmZXJlbmNlLAoJVEJDRC1TVFJJTkcsCglMQUlGaXhlZExlbmd0aCwKCVBMTU4tSWQsCkVNTFBQLVByaW9yaXR5CkZST00gTUFQLUNvbW1vbkRhdGFUeXBlcyB7CiAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCiAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtQ29tbW9uRGF0YVR5cGVzICgxOCkgdmVyc2lvbjExICgxMSl9CgoJRXh0ZW5zaW9uQ29udGFpbmVyCkZST00gTUFQLUV4dGVuc2lvbkRhdGFUeXBlcyB7CiAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCiAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtRXh0ZW5zaW9uRGF0YVR5cGVzICgyMSkgdmVyc2lvbjExICgxMSl9CgoJQWJzZW50U3Vic2NyaWJlckRpYWdub3N0aWNTTQpGUk9NIE1BUC1FUi1EYXRhVHlwZXMgewogICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQogICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUVSLURhdGFUeXBlcyAoMTcpIHZlcnNpb24xMSAoMTEpfQoKCVRyYWNlUHJvcGFnYXRpb25MaXN0CkZST00gTUFQLU9NLURhdGFUeXBlcyB7CiAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCiAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtT00tRGF0YVR5cGVzICgxMikgdmVyc2lvbjExICgxMSl9Cgo7CgotLSBsb2NhdGlvbiByZWdpc3RyYXRpb24gdHlwZXMKClVwZGF0ZUxvY2F0aW9uQXJnIDo6PSBTRVFVRU5DRSB7CglpbXNpCQkJSU1TSSwKCW1zYy1OdW1iZXIJWzFdIElTRE4tQWRkcmVzc1N0cmluZywKCXZsci1OdW1iZXIJSVNETi1BZGRyZXNzU3RyaW5nLAoJbG1zaQkJCVsxMF0gTE1TSQkJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uICwKCXZsci1DYXBhYmlsaXR5CVs2XSBWTFItQ2FwYWJpbGl0eQlPUFRJT05BTCwKCWluZm9ybVByZXZpb3VzTmV0d29ya0VudGl0eQlbMTFdCU5VTEwJCU9QVElPTkFMLAoJY3MtTENTLU5vdFN1cHBvcnRlZEJ5VUUJWzEyXQlOVUxMCQlPUFRJT05BTCwKCXYtZ21sYy1BZGRyZXNzCVsyXQlHU04tQWRkcmVzcwlPUFRJT05BTCwKCWFkZC1pbmZvCQlbMTNdIEFERC1JbmZvCU9QVElPTkFMLAoJcGFnaW5nQXJlYQlbMTRdIFBhZ2luZ0FyZWEJT1BUSU9OQUwsCglza2lwU3Vic2NyaWJlckRhdGFVcGRhdGUJWzE1XSBOVUxMCQlPUFRJT05BTCAKCS0tIFRoZSBza2lwU3Vic2NyaWJlckRhdGFVcGRhdGUgcGFyYW1ldGVyIGluIHRoZSBVcGRhdGVMb2NhdGlvbkFyZyBhbmQgdGhlIEFERC1JbmZvCgktLSBzdHJ1Y3R1cmVzIGNhcnJ5IHRoZSBzYW1lIHNlbWFudGljLgoJIH0KClZMUi1DYXBhYmlsaXR5IDo6PSBTRVFVRU5DRXsKCXN1cHBvcnRlZENhbWVsUGhhc2VzICAJWzBdIFN1cHBvcnRlZENhbWVsUGhhc2VzCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiAsCglzb2xzYVN1cHBvcnRJbmRpY2F0b3IJWzJdIE5VTEwJCU9QVElPTkFMLAoJaXN0U3VwcG9ydEluZGljYXRvcglbMV0gSVNULVN1cHBvcnRJbmRpY2F0b3IJT1BUSU9OQUwsCglzdXBlckNoYXJnZXJTdXBwb3J0ZWRJblNlcnZpbmdOZXR3b3JrRW50aXR5CVszXSBTdXBlckNoYXJnZXJJbmZvCU9QVElPTkFMLAoJbG9uZ0ZUTi1TdXBwb3J0ZWQJWzRdCU5VTEwJCU9QVElPTkFMLAoJc3VwcG9ydGVkTENTLUNhcGFiaWxpdHlTZXRzCVs1XQlTdXBwb3J0ZWRMQ1MtQ2FwYWJpbGl0eVNldHMJT1BUSU9OQUwsCglvZmZlcmVkQ2FtZWw0Q1NJcwlbNl0gT2ZmZXJlZENhbWVsNENTSXMJT1BUSU9OQUwsCglzdXBwb3J0ZWRSQVQtVHlwZXNJbmRpY2F0b3IJWzddCVN1cHBvcnRlZFJBVC1UeXBlcwlPUFRJT05BTCwKCWxvbmdHcm91cElELVN1cHBvcnRlZAlbOF0JTlVMTAkJT1BUSU9OQUwgfQoKU3VwcG9ydGVkUkFULVR5cGVzOjo9IEJJVCBTVFJJTkcgewoJdXRyYW4gICgwKSwKCWdlcmFuICAoMSksCglnYW4gICAgKDIpLAoJaS1oc3BhLWV2b2x1dGlvbiAoMyksCgllLXV0cmFuCSg0KX0gKFNJWkUgKDIuLjgpKQoJLS0gZXhjZXB0aW9uIGhhbmRsaW5nOiBiaXRzIDUgdG8gNyBzaGFsbCBiZSBpZ25vcmVkIGlmIHJlY2VpdmVkIGFuZCBub3QgdW5kZXJzdG9vZAoJIAoKClN1cGVyQ2hhcmdlckluZm8gOjo9IENIT0lDRSB7CglzZW5kU3Vic2NyaWJlckRhdGEJWzBdIE5VTEwsCglzdWJzY3JpYmVyRGF0YVN0b3JlZAlbMV0gQWdlSW5kaWNhdG9yIH0KCkFnZUluZGljYXRvciA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi42KSkKCS0tIFRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMuCgpJU1QtU3VwcG9ydEluZGljYXRvciA6Oj0gIEVOVU1FUkFURUQgewoJYmFzaWNJU1RTdXBwb3J0ZWQJKDApLAoJaXN0Q29tbWFuZFN1cHBvcnRlZAkoMSksCgkuLi59Ci0tIGV4Y2VwdGlvbiBoYW5kbGluZzoKLS0gcmVjZXB0aW9uIG9mIHZhbHVlcyA+IDEgc2hhbGwgYmUgbWFwcGVkIHRvICcgaXN0Q29tbWFuZFN1cHBvcnRlZCAnCgpTdXBwb3J0ZWRMQ1MtQ2FwYWJpbGl0eVNldHMgOjo9IEJJVCBTVFJJTkcgewoJbGNzQ2FwYWJpbGl0eVNldDEgKDApLAoJbGNzQ2FwYWJpbGl0eVNldDIgKDEpLAoJbGNzQ2FwYWJpbGl0eVNldDMgKDIpLAoJbGNzQ2FwYWJpbGl0eVNldDQgKDMpICwKCWxjc0NhcGFiaWxpdHlTZXQ1ICg0KSB9IChTSVpFICgyLi4xNikpIAotLSBDb3JlIG5ldHdvcmsgc2lnbmFsbGluZyBjYXBhYmlsaXR5IHNldDEgaW5kaWNhdGVzIExDUyBSZWxlYXNlOTggb3IgUmVsZWFzZTk5IHZlcnNpb24uCi0tIENvcmUgbmV0d29yayBzaWduYWxsaW5nIGNhcGFiaWxpdHkgc2V0MiBpbmRpY2F0ZXMgTENTIFJlbGVhc2U0LgotLSBDb3JlIG5ldHdvcmsgc2lnbmFsbGluZyBjYXBhYmlsaXR5IHNldDMgaW5kaWNhdGVzIExDUyBSZWxlYXNlNS4KLS0gQ29yZSBuZXR3b3JrIHNpZ25hbGxpbmcgY2FwYWJpbGl0eSBzZXQ0IGluZGljYXRlcyBMQ1MgUmVsZWFzZTYuCi0tIENvcmUgbmV0d29yayBzaWduYWxsaW5nIGNhcGFiaWxpdHkgc2V0NSBpbmRpY2F0ZXMgTENTIFJlbGVhc2U3IG9yIGxhdGVyIHZlcnNpb24uCi0tIEEgbm9kZSBzaGFsbCBtYXJrIGluIHRoZSBCSVQgU1RSSU5HIGFsbCBMQ1MgY2FwYWJpbGl0eSBzZXRzIGl0IHN1cHBvcnRzLiAKLS0gSWYgbm8gYml0IGlzIHNldCB0aGVuIHRoZSBzZW5kaW5nIG5vZGUgZG9lcyBub3Qgc3VwcG9ydCBMQ1MuCi0tIElmIHRoZSBwYXJhbWV0ZXIgaXMgbm90IHNlbnQgYnkgYW4gVkxSIHRoZW4gdGhlIFZMUiBtYXkgc3VwcG9ydCBhdCBtb3N0IGNhcGFiaWxpdHkgc2V0MS4KLS0gSWYgdGhlIHBhcmFtZXRlciBpcyBub3Qgc2VudCBieSBhbiBTR1NOIHRoZW4gbm8gc3VwcG9ydCBmb3IgTENTIGlzIGFzc3VtZWQuCi0tIEFuIFNHU04gaXMgbm90IGFsbG93ZWQgdG8gaW5kaWNhdGUgc3VwcG9ydCBvZiBjYXBhYmlsaXR5IHNldDEuCi0tIE90aGVyIGJpdHMgdGhhbiBsaXN0ZWQgYWJvdmUgc2hhbGwgYmUgZGlzY2FyZGVkLgoKVXBkYXRlTG9jYXRpb25SZXMgOjo9IFNFUVVFTkNFIHsKCWhsci1OdW1iZXIJSVNETi1BZGRyZXNzU3RyaW5nLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiwKCWFkZC1DYXBhYmlsaXR5CU5VTEwJCQlPUFRJT05BTCwKCXBhZ2luZ0FyZWEtQ2FwYWJpbGl0eQlbMF1OVUxMCQkJT1BUSU9OQUwgfQoKQURELUluZm8gOjo9IFNFUVVFTkNFIHsKCWltZWlzdgkJWzBdIElNRUksCglza2lwU3Vic2NyaWJlckRhdGFVcGRhdGUJWzFdIE5VTEwJCU9QVElPTkFMLAoJLS0gVGhlIHNraXBTdWJzY3JpYmVyRGF0YVVwZGF0ZSBwYXJhbWV0ZXIgaW4gdGhlIFVwZGF0ZUxvY2F0aW9uQXJnIGFuZCB0aGUgQURELUluZm8KCS0tIHN0cnVjdHVyZXMgY2FycnkgdGhlIHNhbWUgc2VtYW50aWMuCgkuLi59CgoKUGFnaW5nQXJlYSA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uNSkgT0YgTG9jYXRpb25BcmVhIAoKCkxvY2F0aW9uQXJlYSA6Oj0gQ0hPSUNFIHsKCWxhaUZpeGVkTGVuZ3RoCVswXSBMQUlGaXhlZExlbmd0aCwKCWxhYwkJCVsxXSBMQUN9CgoKTEFDIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIpKQoJLS0gUmVmZXJzIHRvIExvY2F0aW9uIEFyZWEgQ29kZSBvZiB0aGUgTG9jYXRpb24gQXJlYSBJZGVudGlmaWNhdGlvbiBkZWZpbmVkIGluIAogICAgIC0tIDNHUFAgVFMgMjMuMDAzIFsxN10uCgktLSBMb2NhdGlvbiBBcmVhIENvZGUgYWNjb3JkaW5nIHRvIDNHUFAgVFMgMjQuMDA4IFszNV0KCkNhbmNlbExvY2F0aW9uQXJnIDo6PSBbM10gU0VRVUVOQ0UgewoJaWRlbnRpdHkJCUlkZW50aXR5LAoJY2FuY2VsbGF0aW9uVHlwZQlDYW5jZWxsYXRpb25UeXBlCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiwKCXR5cGVPZlVwZGF0ZQlbMF0gVHlwZU9mVXBkYXRlCU9QVElPTkFMIH0KClR5cGVPZlVwZGF0ZSA6Oj0gRU5VTUVSQVRFRCB7CglzZ3NuLWNoYW5nZSAoMCksCgltbWUtY2hhbmdlICgxKSwKCS4uLn0KCS0tIFR5cGVPZlVwZGF0ZSBzaGFsbCBiZSBhYnNlbnQgaWYgQ2FuY2VsbGF0aW9uVHlwZSBpcyBkaWZmZXJlbnQgZnJvbSB1cGRhdGVQcm9jZWR1cmUKCkNhbmNlbGxhdGlvblR5cGUgOjo9IEVOVU1FUkFURUQgewoJdXBkYXRlUHJvY2VkdXJlCSgwKSwKCXN1YnNjcmlwdGlvbldpdGhkcmF3CSgxKSwKCS4uLn0KCS0tIFRoZSBITFIgc2hhbGwgbm90IHNlbmQgdmFsdWVzIG90aGVyIHRoYW4gbGlzdGVkIGFib3ZlCgpDYW5jZWxMb2NhdGlvblJlcyA6Oj0gU0VRVUVOQ0UgewoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KClB1cmdlTVMtQXJnIDo6PSBbM10gU0VRVUVOQ0UgewoJaW1zaQkJCUlNU0ksCgl2bHItTnVtYmVyCVswXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCglzZ3NuLU51bWJlcglbMV0JSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KClB1cmdlTVMtUmVzIDo6PSBTRVFVRU5DRSB7CglmcmVlemVUTVNJCVswXQlOVUxMCQlPUFRJT05BTCwKCWZyZWV6ZVAtVE1TSQlbMV0JTlVMTAkJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uLAoJZnJlZXplTS1UTVNJCVsyXQlOVUxMCQlPUFRJT05BTCB9CgpTZW5kSWRlbnRpZmljYXRpb25BcmcgOjo9IFNFUVVFTkNFIHsKCXRtc2kJCQlUTVNJLAoJbnVtYmVyT2ZSZXF1ZXN0ZWRWZWN0b3JzCU51bWJlck9mUmVxdWVzdGVkVmVjdG9ycyAJT1BUSU9OQUwsCgktLSB3aXRoaW4gYSBkaWFsb2d1ZSBudW1iZXJPZlJlcXVlc3RlZFZlY3RvcnMgc2hhbGwgYmUgcHJlc2VudCBpbiAKCS0tIHRoZSBmaXJzdCBzZXJ2aWNlIHJlcXVlc3QgYW5kIHNoYWxsIG5vdCBiZSBwcmVzZW50IGluIHN1YnNlcXVlbnQgc2VydmljZSByZXF1ZXN0cy4gCgktLSBJZiByZWNlaXZlZCBpbiBhIHN1YnNlcXVlbnQgc2VydmljZSByZXF1ZXN0IGl0IHNoYWxsIGJlIGRpc2NhcmRlZC4gCglzZWdtZW50YXRpb25Qcm9oaWJpdGVkCU5VTEwJCQlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4sCgltc2MtTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZyAJT1BUSU9OQUwsCglwcmV2aW91cy1MQUkJWzBdIExBSUZpeGVkTGVuZ3RoCU9QVElPTkFMLAoJaG9wQ291bnRlcglbMV0gSG9wQ291bnRlcglPUFRJT05BTCB9CgpIb3BDb3VudGVyIDo6PSBJTlRFR0VSICgwLi4zKQoKU2VuZElkZW50aWZpY2F0aW9uUmVzIDo6PSBbM10gU0VRVUVOQ0UgewoJaW1zaQkJCUlNU0kJCQlPUFRJT05BTCwKCS0tIElNU0kgc2hhbGwgYmUgcHJlc2VudCBpbiB0aGUgZmlyc3QgKG9yIG9ubHkpIHNlcnZpY2UgcmVzcG9uc2Ugb2YgYSBkaWFsb2d1ZS4KCS0tIElmIG11bHRpcGxlIHNlcnZpY2UgcmVxdWVzdHMgYXJlIHByZXNlbnQgaW4gYSBkaWFsb2d1ZSB0aGVuIElNU0kKCS0tIHNoYWxsIG5vdCBiZSBwcmVzZW50IGluIGFueSBzZXJ2aWNlIHJlc3BvbnNlIG90aGVyIHRoYW4gdGhlIGZpcnN0IG9uZS4KCWF1dGhlbnRpY2F0aW9uU2V0TGlzdAlBdXRoZW50aWNhdGlvblNldExpc3QJT1BUSU9OQUwsCgljdXJyZW50U2VjdXJpdHlDb250ZXh0CVsyXUN1cnJlbnRTZWN1cml0eUNvbnRleHQJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KCi0tIGF1dGhlbnRpY2F0aW9uIG1hbmFnZW1lbnQgdHlwZXMKCkF1dGhlbnRpY2F0aW9uU2V0TGlzdCA6Oj0gQ0hPSUNFIHsKCXRyaXBsZXRMaXN0CVswXSBUcmlwbGV0TGlzdCwKCXF1aW50dXBsZXRMaXN0CVsxXSBRdWludHVwbGV0TGlzdCB9CgpUcmlwbGV0TGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uNSkgT0YKCQkJCUF1dGhlbnRpY2F0aW9uVHJpcGxldAoKUXVpbnR1cGxldExpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLjUpIE9GCgkJCQlBdXRoZW50aWNhdGlvblF1aW50dXBsZXQKCkF1dGhlbnRpY2F0aW9uVHJpcGxldCA6Oj0gU0VRVUVOQ0UgewoJcmFuZAkJCVJBTkQsCglzcmVzCQkJU1JFUywKCWtjCQkJS2MsCgkuLi59CgpBdXRoZW50aWNhdGlvblF1aW50dXBsZXQgOjo9IFNFUVVFTkNFIHsKCXJhbmQJCQlSQU5ELAoJeHJlcwkJCVhSRVMsCgljawkJCUNLLAoJaWsJCQlJSywKCWF1dG4JCQlBVVROLAoJLi4ufQoKQ3VycmVudFNlY3VyaXR5Q29udGV4dCA6Oj0gQ0hPSUNFIHsKCWdzbS1TZWN1cml0eUNvbnRleHREYXRhCVswXSBHU00tU2VjdXJpdHlDb250ZXh0RGF0YSwKCXVtdHMtU2VjdXJpdHlDb250ZXh0RGF0YQlbMV0gVU1UUy1TZWN1cml0eUNvbnRleHREYXRhIH0KCkdTTS1TZWN1cml0eUNvbnRleHREYXRhIDo6PSBTRVFVRU5DRSB7CglrYwkJCUtjLAoJY2tzbgkJCUNrc24sCgkuLi4gfQoKVU1UUy1TZWN1cml0eUNvbnRleHREYXRhIDo6PSBTRVFVRU5DRSB7CgljawkJCUNLLAoJaWsJCQlJSywKCWtzaQkJCUtTSSwKCS4uLiB9CgpSQU5EIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDE2KSkKClNSRVMgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoNCkpCgpLYyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg4KSkKClhSRVMgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoNC4uMTYpKQoKQ0sgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMTYpKQoKSUsgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMTYpKQoKQVVUTiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxNikpCgpBVVRTIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDE0KSkKCkNrc24gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCgktLSBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gM0dQUCBUUyAyNC4wMDgKCktTSSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKCS0tIFRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiAzR1BQIFRTIDI0LjAwOAoKQXV0aGVudGljYXRpb25GYWlsdXJlUmVwb3J0QXJnIDo6PSBTRVFVRU5DRSB7CglpbXNpCQkJSU1TSSwKCWZhaWx1cmVDYXVzZQlGYWlsdXJlQ2F1c2UsCglleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uICwKCXJlLWF0dGVtcHQJQk9PTEVBTgkJT1BUSU9OQUwsCglhY2Nlc3NUeXBlCUFjY2Vzc1R5cGUJT1BUSU9OQUwsCglyYW5kCQkJUkFORAkJCU9QVElPTkFMLAoJdmxyLU51bWJlcglbMF0gSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAoJc2dzbi1OdW1iZXIJWzFdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCB9CgpBY2Nlc3NUeXBlIDo6PSBFTlVNRVJBVEVEIHsKCWNhbGwgKDApLAoJZW1lcmdlbmN5Q2FsbCAoMSksCglsb2NhdGlvblVwZGF0aW5nICgyKSwKCXN1cHBsZW1lbnRhcnlTZXJ2aWNlICgzKSwKCXNob3J0TWVzc2FnZSAoNCksCglncHJzQXR0YWNoICg1KSwKCXJvdXRpbmdBcmVhVXBkYXRpbmcgKDYpLAoJc2VydmljZVJlcXVlc3QgKDcpLAoJcGRwQ29udGV4dEFjdGl2YXRpb24gKDgpLAoJcGRwQ29udGV4dERlYWN0aXZhdGlvbiAoOSksCgkuLi4sCglncHJzRGV0YWNoICgxMCl9CgktLSBleGNlcHRpb24gaGFuZGxpbmc6CgktLSByZWNlaXZlZCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDEwIHNoYWxsIGJlIGlnbm9yZWQuCgpBdXRoZW50aWNhdGlvbkZhaWx1cmVSZXBvcnRSZXMgOjo9IFNFUVVFTkNFIHsKCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpGYWlsdXJlQ2F1c2UgOjo9IEVOVU1FUkFURUQgewoJd3JvbmdVc2VyUmVzcG9uc2UgICgwKSwKCXdyb25nTmV0d29ya1NpZ25hdHVyZSAgKDEpfQoKLS0gZ3BycyBsb2NhdGlvbiByZWdpc3RyYXRpb24gdHlwZXMKClVwZGF0ZUdwcnNMb2NhdGlvbkFyZyA6Oj0gU0VRVUVOQ0UgewoJaW1zaQkJCUlNU0ksCglzZ3NuLU51bWJlcglJU0ROLUFkZHJlc3NTdHJpbmcsCQoJc2dzbi1BZGRyZXNzCUdTTi1BZGRyZXNzLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiAsCglzZ3NuLUNhcGFiaWxpdHkJWzBdIFNHU04tQ2FwYWJpbGl0eQlPUFRJT05BTCwKCWluZm9ybVByZXZpb3VzTmV0d29ya0VudGl0eQlbMV0JTlVMTAkJT1BUSU9OQUwsCglwcy1MQ1MtTm90U3VwcG9ydGVkQnlVRQlbMl0JTlVMTAkJT1BUSU9OQUwsCgl2LWdtbGMtQWRkcmVzcwlbM10JR1NOLUFkZHJlc3MJT1BUSU9OQUwsCglhZGQtaW5mbwkJWzRdICBBREQtSW5mbwlPUFRJT05BTCwKCWVwcy1pbmZvCQlbNV0JRVBTLUluZm8JT1BUSU9OQUwsCglzZXJ2aW5nTm9kZVR5cGVJbmRpY2F0b3IJWzZdCU5VTEwJCU9QVElPTkFMLAoJc2tpcFN1YnNjcmliZXJEYXRhVXBkYXRlCVs3XSBOVUxMCQlPUFRJT05BTCwKCXVzZWRSQVQtVHlwZQlbOF0gVXNlZC1SQVQtVHlwZQlPUFRJT05BTCAKCSB9CgpVc2VkLVJBVC1UeXBlOjo9IEVOVU1FUkFURUQgewoJdXRyYW4gICgwKSwKCWdlcmFuICAoMSksCglnYW4gICAgKDIpLAoJaS1oc3BhLWV2b2x1dGlvbiAoMyksCgllLXV0cmFuCSg0KSwKCS4uLn0KCkVQUy1JbmZvIDo6PSBDSE9JQ0V7CglwZG4tZ3ctdXBkYXRlCVswXSBQRE4tR1ctVXBkYXRlLAoJaXNyLUluZm9ybWF0aW9uCVsxXSBJU1ItSW5mb3JtYXRpb24gfQoKUEROLUdXLVVwZGF0ZSA6Oj0gU0VRVUVOQ0V7CglhcG4JCQlbMF0gQVBOCQlPUFRJT05BTCwKCXBkbi1ndy1JZGVudGl0eQlbMV0gUEROLUdXLUlkZW50aXR5CU9QVElPTkFMLAoJY29udGV4dElkCQlbMl0gQ29udGV4dElkICAgICAgICAgICAgICAgICAgICAgT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiB9CgpJU1ItSW5mb3JtYXRpb246Oj0gQklUIFNUUklORyB7Cgl1cGRhdGVNTUUgICgwKSwKCWNhbmNlbFNHU04gICgxKX0gKFNJWkUgKDIuLjgpKQoJLS0gZXhjZXB0aW9uIGhhbmRsaW5nOiByZWNlcHRpb24gb2YgdW5rbm93biBiaXQgYXNzaWdubWVudHMgaW4gdGhlCgktLSBJU1ItSW5mb3JtYXRpb24gZGF0YSB0eXBlIHNoYWxsIGJlIGRpc2NhcmRlZCBieSB0aGUgcmVjZWl2ZXIgCgpTR1NOLUNhcGFiaWxpdHkgOjo9IFNFUVVFTkNFewoJc29sc2FTdXBwb3J0SW5kaWNhdG9yCU5VTEwJCQlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbMV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uICwKCXN1cGVyQ2hhcmdlclN1cHBvcnRlZEluU2VydmluZ05ldHdvcmtFbnRpdHkJWzJdIFN1cGVyQ2hhcmdlckluZm8JT1BUSU9OQUwgLAoJZ3Byc0VuaGFuY2VtZW50c1N1cHBvcnRJbmRpY2F0b3IgCVszXSBOVUxMCQlPUFRJT05BTCwKCXN1cHBvcnRlZENhbWVsUGhhc2VzICAJWzRdIFN1cHBvcnRlZENhbWVsUGhhc2VzCU9QVElPTkFMLAoJc3VwcG9ydGVkTENTLUNhcGFiaWxpdHlTZXRzCVs1XSAgU3VwcG9ydGVkTENTLUNhcGFiaWxpdHlTZXRzCU9QVElPTkFMLAoJb2ZmZXJlZENhbWVsNENTSXMJWzZdIE9mZmVyZWRDYW1lbDRDU0lzCU9QVElPTkFMLAoJc21zQ2FsbEJhcnJpbmdTdXBwb3J0SW5kaWNhdG9yCVs3XQlOVUxMCQlPUFRJT05BTCwJc3VwcG9ydGVkUkFULVR5cGVzSW5kaWNhdG9yCVs4XQlTdXBwb3J0ZWRSQVQtVHlwZXMJT1BUSU9OQUwsCglzdXBwb3J0ZWRGZWF0dXJlcwlbOV0gU3VwcG9ydGVkRmVhdHVyZXMJT1BUSU9OQUwgfQoKU3VwcG9ydGVkRmVhdHVyZXM6Oj0gQklUIFNUUklORyB7CglvZGItYWxsICgwKSwKCW9kYi1IUExNTi1BUE4gKDEpLAoJb2RiLVZQTE1OLUFQTiAoMiksCglyZWdTdWIgKDMpfSAoU0laRSAoNC4uOCkpCgpHU04tQWRkcmVzcyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg1Li4xNykpCgktLSBPY3RldHMgYXJlIGNvZGVkIGFjY29yZGluZyB0byBUUyAzR1BQIFRTIDIzLjAwMyBbMTddCgpVcGRhdGVHcHJzTG9jYXRpb25SZXMgOjo9IFNFUVVFTkNFIHsKCWhsci1OdW1iZXIJSVNETi1BZGRyZXNzU3RyaW5nLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiwKCWFkZC1DYXBhYmlsaXR5CU5VTEwJCQlPUFRJT05BTCwKCXNnc24tbW1lU2VwYXJhdGlvblN1cHBvcnRlZAlbMF0gTlVMTAkJT1BUSU9OQUwgfQoKLS0gaGFuZG92ZXIgdHlwZXMKCkZvcndhcmRBY2Nlc3NTaWduYWxsaW5nLUFyZyA6Oj0gWzNdIFNFUVVFTkNFIHsKCWFuLUFQRFUJCUFjY2Vzc05ldHdvcmtTaWduYWxJbmZvLAoJaW50ZWdyaXR5UHJvdGVjdGlvbkluZm8JWzBdIEludGVncml0eVByb3RlY3Rpb25JbmZvcm1hdGlvbgkJT1BUSU9OQUwsCgllbmNyeXB0aW9uSW5mbwlbMV0gRW5jcnlwdGlvbkluZm9ybWF0aW9uCQlPUFRJT05BTCwKCWtleVN0YXR1cwkJWzJdCUtleVN0YXR1cwlPUFRJT05BTCwKCWFsbG93ZWRHU00tQWxnb3JpdGhtcwlbNF0JQWxsb3dlZEdTTS1BbGdvcml0aG1zCU9QVElPTkFMLAoJYWxsb3dlZFVNVFMtQWxnb3JpdGhtcwlbNV0JQWxsb3dlZFVNVFMtQWxnb3JpdGhtcwlPUFRJT05BTCwKCXJhZGlvUmVzb3VyY2VJbmZvcm1hdGlvbglbNl0gUmFkaW9SZXNvdXJjZUluZm9ybWF0aW9uCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVszXQlFeHRlbnNpb25Db250YWluZXIgCU9QVElPTkFMLAoJLi4uLAoJcmFkaW9SZXNvdXJjZUxpc3QJWzddCVJhZGlvUmVzb3VyY2VMaXN0CU9QVElPTkFMLAoJYnNzbWFwLVNlcnZpY2VIYW5kb3ZlcglbOV0JQlNTTUFQLVNlcnZpY2VIYW5kb3ZlcglPUFRJT05BTCwKCXJhbmFwLVNlcnZpY2VIYW5kb3ZlcglbOF0JUkFOQVAtU2VydmljZUhhbmRvdmVyCU9QVElPTkFMLAoJYnNzbWFwLVNlcnZpY2VIYW5kb3Zlckxpc3QJWzEwXQlCU1NNQVAtU2VydmljZUhhbmRvdmVyTGlzdAlPUFRJT05BTCwKCWN1cnJlbnRseVVzZWRDb2RlYwlbMTFdIENvZGVjCU9QVElPTkFMLAoJaXVTdXBwb3J0ZWRDb2RlY3NMaXN0CVsxMl0gU3VwcG9ydGVkQ29kZWNzTGlzdAlPUFRJT05BTCwKCXJhYi1Db25maWd1cmF0aW9uSW5kaWNhdG9yCVsxM10gTlVMTAkJT1BUSU9OQUwsCglpdVNlbGVjdGVkQ29kZWMJWzE0XQlDb2RlYwlPUFRJT05BTCwKCWFsdGVybmF0aXZlQ2hhbm5lbFR5cGUJWzE1XQlSYWRpb1Jlc291cmNlSW5mb3JtYXRpb24JT1BUSU9OQUwsCgl0cmFjZVByb3BhZ2F0aW9uTGlzdAlbMTddCVRyYWNlUHJvcGFnYXRpb25MaXN0CU9QVElPTkFMIH0KCkFsbG93ZWRHU00tQWxnb3JpdGhtcyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKCS0tIGludGVybmFsIHN0cnVjdHVyZSBpcyBjb2RlZCBhcyBBbGdvcml0aG0gaWRlbnRpZmllciBvY3RldCBmcm9tCgktLSBQZXJtaXR0ZWQgQWxnb3JpdGhtcyBkZWZpbmVkIGluIDNHUFAgVFMgNDguMDA4CgktLSBBIG5vZGUgc2hhbGwgbWFyayBhbGwgR1NNIGFsZ29yaXRobXMgdGhhdCBhcmUgYWxsb3dlZCBpbiBNU0MtQgoKQWxsb3dlZFVNVFMtQWxnb3JpdGhtcyA6Oj0gU0VRVUVOQ0UgewoJaW50ZWdyaXR5UHJvdGVjdGlvbkFsZ29yaXRobXMJWzBdIAlQZXJtaXR0ZWRJbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtcwlPUFRJT05BTCwKCWVuY3J5cHRpb25BbGdvcml0aG1zCVsxXSAJUGVybWl0dGVkRW5jcnlwdGlvbkFsZ29yaXRobXMJCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpQZXJtaXR0ZWRJbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtcyA6Oj0KCQlPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLm1heFBlcm1pdHRlZEludGVncml0eVByb3RlY3Rpb25BbGdvcml0aG1zTGVuZ3RoKSkKCS0tIE9jdGV0cyBjb250YWluIGEgY29tcGxldGUgUGVybWl0dGVkSW50ZWdyaXR5UHJvdGVjdGlvbkFsZ29yaXRobXMgZGF0YSB0eXBlIAoJLS0gYXMgZGVmaW5lZCBpbiAzR1BQIFRTIDI1LjQxMywgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIGVuY29kaW5nIHNjaGVtZSAKCS0tIG1hbmRhdGVkIGJ5IDNHUFAgVFMgMjUuNDEzLiAKCS0tIFBhZGRpbmcgYml0cyBhcmUgaW5jbHVkZWQsIGlmIG5lZWRlZCwgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIAoJLS0gbGFzdCBvY3RldCBvZiB0aGUgb2N0ZXQgc3RyaW5nLiAKCgptYXhQZXJtaXR0ZWRJbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtc0xlbmd0aCBJTlRFR0VSIDo6PSA5CgpQZXJtaXR0ZWRFbmNyeXB0aW9uQWxnb3JpdGhtcyA6Oj0KCQlPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLm1heFBlcm1pdHRlZEVuY3J5cHRpb25BbGdvcml0aG1zTGVuZ3RoKSkKCS0tIE9jdGV0cyBjb250YWluIGEgY29tcGxldGUgUGVybWl0dGVkRW5jcnlwdGlvbkFsZ29yaXRobXMgZGF0YSB0eXBlIAoJLS0gYXMgZGVmaW5lZCBpbiAzR1BQIFRTIDI1LjQxMywgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIGVuY29kaW5nIHNjaGVtZSAKCS0tIG1hbmRhdGVkIGJ5IDNHUFAgVFMgMjUuNDEzCgktLSBQYWRkaW5nIGJpdHMgYXJlIGluY2x1ZGVkLCBpZiBuZWVkZWQsIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSAKCS0tIGxhc3Qgb2N0ZXQgb2YgdGhlIG9jdGV0IHN0cmluZy4gCgoKbWF4UGVybWl0dGVkRW5jcnlwdGlvbkFsZ29yaXRobXNMZW5ndGggSU5URUdFUiA6Oj0gOQoKS2V5U3RhdHVzIDo6PSBFTlVNRVJBVEVEIHsKCW9sZCAgKDApLAoJbmV3ICAoMSksCgkuLi59CgktLSBleGNlcHRpb24gaGFuZGxpbmc6CgktLSByZWNlaXZlZCB2YWx1ZXMgaW4gcmFuZ2UgMi0zMSBzaGFsbCBiZSB0cmVhdGVkIGFzICJvbGQiCgktLSByZWNlaXZlZCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDMxIHNoYWxsIGJlIHRyZWF0ZWQgYXMgIm5ldyIKClByZXBhcmVITy1BcmcgOjo9IFszXSBTRVFVRU5DRSB7Cgl0YXJnZXRDZWxsSWQJWzBdIEdsb2JhbENlbGxJZAlPUFRJT05BTCwKCWhvLU51bWJlck5vdFJlcXVpcmVkCU5VTEwJCQlPUFRJT05BTCwgCgl0YXJnZXRSTkNJZAlbMV0gUk5DSWQJCU9QVElPTkFMLAoJYW4tQVBEVQkJWzJdIEFjY2Vzc05ldHdvcmtTaWduYWxJbmZvCU9QVElPTkFMLAoJbXVsdGlwbGVCZWFyZXJSZXF1ZXN0ZWQJWzNdIE5VTEwJCU9QVElPTkFMLAoJaW1zaQkJCVs0XSBJTVNJCQlPUFRJT05BTCwKCWludGVncml0eVByb3RlY3Rpb25JbmZvCVs1XSBJbnRlZ3JpdHlQcm90ZWN0aW9uSW5mb3JtYXRpb24JCU9QVElPTkFMLAoJZW5jcnlwdGlvbkluZm8JWzZdIEVuY3J5cHRpb25JbmZvcm1hdGlvbgkJT1BUSU9OQUwsCglyYWRpb1Jlc291cmNlSW5mb3JtYXRpb24JWzddIFJhZGlvUmVzb3VyY2VJbmZvcm1hdGlvbglPUFRJT05BTCwKCWFsbG93ZWRHU00tQWxnb3JpdGhtcwlbOV0JQWxsb3dlZEdTTS1BbGdvcml0aG1zCU9QVElPTkFMLAoJYWxsb3dlZFVNVFMtQWxnb3JpdGhtcwlbMTBdCUFsbG93ZWRVTVRTLUFsZ29yaXRobXMJT1BUSU9OQUwsCglyYWRpb1Jlc291cmNlTGlzdAlbMTFdIFJhZGlvUmVzb3VyY2VMaXN0CU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVs4XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4gLAoJcmFiLUlkCQlbMTJdIFJBQi1JZAlPUFRJT05BTCwKCWJzc21hcC1TZXJ2aWNlSGFuZG92ZXIJWzEzXQlCU1NNQVAtU2VydmljZUhhbmRvdmVyCU9QVElPTkFMLAoJcmFuYXAtU2VydmljZUhhbmRvdmVyCVsxNF0JUkFOQVAtU2VydmljZUhhbmRvdmVyCU9QVElPTkFMLCAKCWJzc21hcC1TZXJ2aWNlSGFuZG92ZXJMaXN0CVsxNV0JQlNTTUFQLVNlcnZpY2VIYW5kb3Zlckxpc3QJT1BUSU9OQUwsCglhc2NpQ2FsbFJlZmVyZW5jZQlbMjBdCUFTQ0ktQ2FsbFJlZmVyZW5jZQlPUFRJT05BTCwKCWdlcmFuLWNsYXNzbWFyawlbMTZdIEdFUkFOLUNsYXNzbWFyawlPUFRJT05BTCwKCWl1Q3VycmVudGx5VXNlZENvZGVjCVsxN10gQ29kZWMJT1BUSU9OQUwsCglpdVN1cHBvcnRlZENvZGVjc0xpc3QJWzE4XSBTdXBwb3J0ZWRDb2RlY3NMaXN0CU9QVElPTkFMLAoJcmFiLUNvbmZpZ3VyYXRpb25JbmRpY2F0b3IJWzE5XSBOVUxMCQlPUFRJT05BTCwKCXVlc2JpLUl1CQlbMjFdCVVFU0JJLUl1CU9QVElPTkFMLAoJaW1laXN2CQlbMjJdCUlNRUkJCU9QVElPTkFMLAoJYWx0ZXJuYXRpdmVDaGFubmVsVHlwZQlbMjNdCVJhZGlvUmVzb3VyY2VJbmZvcm1hdGlvbglPUFRJT05BTCwKCXRyYWNlUHJvcGFnYXRpb25MaXN0CVsyNV0JVHJhY2VQcm9wYWdhdGlvbkxpc3QJT1BUSU9OQUwJIH0KCkJTU01BUC1TZXJ2aWNlSGFuZG92ZXJMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi4gbWF4TnVtT2ZTZXJ2aWNlSGFuZG92ZXJzKSBPRgoJCQkJQlNTTUFQLVNlcnZpY2VIYW5kb3ZlckluZm8KCkJTU01BUC1TZXJ2aWNlSGFuZG92ZXJJbmZvIDo6PSBTRVFVRU5DRSB7Cglic3NtYXAtU2VydmljZUhhbmRvdmVyCUJTU01BUC1TZXJ2aWNlSGFuZG92ZXIsCglyYWItSWQJCVJBQi1JZCwKCS0tIFJBQiBJZGVudGl0eSBpcyBuZWVkZWQgdG8gcmVsYXRlIHRoZSBzZXJ2aWNlIGhhbmRvdmVycyB3aXRoIHRoZSByYWRpbyBhY2Nlc3MgYmVhcmVycy4gCgkuLi59CgptYXhOdW1PZlNlcnZpY2VIYW5kb3ZlcnMgIElOVEVHRVIgOjo9IDcKCkJTU01BUC1TZXJ2aWNlSGFuZG92ZXIgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCgktLSBPY3RldHMgYXJlIGNvZGVkIGFjY29yZGluZyB0aGUgU2VydmljZSBIYW5kb3ZlciBpbmZvcm1hdGlvbiBlbGVtZW50IGluCgktLSAzR1BQIFRTIDQ4LjAwOC4KClJBTkFQLVNlcnZpY2VIYW5kb3ZlciA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKCS0tIE9jdGV0IGNvbnRhaW5zIGEgY29tcGxldGUgU2VydmljZS1IYW5kb3ZlciBkYXRhIHR5cGUgCgktLSBhcyBkZWZpbmVkIGluIDNHUFAgVFMgMjUuNDEzLCBlbmNvZGVkIGFjY29yZGluZyB0byB0aGUgZW5jb2Rpbmcgc2NoZW1lIAoJLS0gbWFuZGF0ZWQgYnkgM0dQUCBUUyAyNS40MTMKCS0tIFBhZGRpbmcgYml0cyBhcmUgaW5jbHVkZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMuIAoKClJhZGlvUmVzb3VyY2VMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi4gbWF4TnVtT2ZSYWRpb1Jlc291cmNlcykgT0YKCQkJCVJhZGlvUmVzb3VyY2UKClJhZGlvUmVzb3VyY2UgOjo9IFNFUVVFTkNFIHsKCXJhZGlvUmVzb3VyY2VJbmZvcm1hdGlvbglSYWRpb1Jlc291cmNlSW5mb3JtYXRpb24sCglyYWItSWQJCVJBQi1JZCwKCS0tIFJBQiBJZGVudGl0eSBpcyBuZWVkZWQgdG8gcmVsYXRlIHRoZSByYWRpbyByZXNvdXJjZXMgd2l0aCB0aGUgcmFkaW8gYWNjZXNzIGJlYXJlcnMuIAoJLi4ufQoKbWF4TnVtT2ZSYWRpb1Jlc291cmNlcyAgSU5URUdFUiA6Oj0gNwoKUHJlcGFyZUhPLVJlcyA6Oj0gWzNdIFNFUVVFTkNFIHsKCWhhbmRvdmVyTnVtYmVyCVswXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCglyZWxvY2F0aW9uTnVtYmVyTGlzdAlbMV0JUmVsb2NhdGlvbk51bWJlckxpc3QJT1BUSU9OQUwsCglhbi1BUERVCQlbMl0JQWNjZXNzTmV0d29ya1NpZ25hbEluZm8JT1BUSU9OQUwsCgltdWx0aWNhbGxCZWFyZXJJbmZvCVszXQlNdWx0aWNhbGxCZWFyZXJJbmZvCU9QVElPTkFMLAoJbXVsdGlwbGVCZWFyZXJOb3RTdXBwb3J0ZWQJTlVMTAkJCU9QVElPTkFMLAoJc2VsZWN0ZWRVTVRTLUFsZ29yaXRobXMJWzVdCVNlbGVjdGVkVU1UUy1BbGdvcml0aG1zCU9QVElPTkFMLAoJY2hvc2VuUmFkaW9SZXNvdXJjZUluZm9ybWF0aW9uCVs2XSBDaG9zZW5SYWRpb1Jlc291cmNlSW5mb3JtYXRpb24JIE9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVs0XQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4sCglpdVNlbGVjdGVkQ29kZWMJWzddIENvZGVjCQlPUFRJT05BTCwKCWl1QXZhaWxhYmxlQ29kZWNzTGlzdAlbOF0gQ29kZWNMaXN0CU9QVElPTkFMIH0KClNlbGVjdGVkVU1UUy1BbGdvcml0aG1zIDo6PSBTRVFVRU5DRSB7CglpbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtCVswXSAJQ2hvc2VuSW50ZWdyaXR5UHJvdGVjdGlvbkFsZ29yaXRobQlPUFRJT05BTCwKCWVuY3J5cHRpb25BbGdvcml0aG0JWzFdIAlDaG9zZW5FbmNyeXB0aW9uQWxnb3JpdGhtCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpDaG9zZW5JbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQoJLS0gT2N0ZXQgY29udGFpbnMgYSBjb21wbGV0ZSBJbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtIGRhdGEgdHlwZSAKCS0tIGFzIGRlZmluZWQgaW4gM0dQUCBUUyAyNS40MTMsIGVuY29kZWQgYWNjb3JkaW5nIHRvIHRoZSBlbmNvZGluZyBzY2hlbWUgCgktLSBtYW5kYXRlZCBieSAzR1BQIFRTIDI1LjQxMwoJLS0gUGFkZGluZyBiaXRzIGFyZSBpbmNsdWRlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cy4gCgpDaG9zZW5FbmNyeXB0aW9uQWxnb3JpdGhtIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQoJLS0gT2N0ZXQgY29udGFpbnMgYSBjb21wbGV0ZSBFbmNyeXB0aW9uQWxnb3JpdGhtIGRhdGEgdHlwZSAKCS0tIGFzIGRlZmluZWQgaW4gM0dQUCBUUyAyNS40MTMsIGVuY29kZWQgYWNjb3JkaW5nIHRvIHRoZSBlbmNvZGluZyBzY2hlbWUgCgktLSBtYW5kYXRlZCBieSAzR1BQIFRTIDI1LjQxMwoJLS0gUGFkZGluZyBiaXRzIGFyZSBpbmNsdWRlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cy4gCgpDaG9zZW5SYWRpb1Jlc291cmNlSW5mb3JtYXRpb24gOjo9IFNFUVVFTkNFIHsKCWNob3NlbkNoYW5uZWxJbmZvCVswXSBDaG9zZW5DaGFubmVsSW5mbwlPUFRJT05BTCwKCWNob3NlblNwZWVjaFZlcnNpb24JWzFdIENob3NlblNwZWVjaFZlcnNpb24JT1BUSU9OQUwsCgkuLi59CgpDaG9zZW5DaGFubmVsSW5mbyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRoZSBDaG9zZW4gQ2hhbm5lbCBpbmZvcm1hdGlvbiBlbGVtZW50IGluIDNHUFAgVFMgNDguMDA4CgpDaG9zZW5TcGVlY2hWZXJzaW9uIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQoJLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdGhlIFNwZWVjaCBWZXJzaW9uIChjaG9zZW4pIGluZm9ybWF0aW9uIGVsZW1lbnQgaW4gM0dQUCBUUwoJLS0gNDguMDA4IAoKUHJlcGFyZVN1YnNlcXVlbnRITy1BcmcgOjo9IFszXSBTRVFVRU5DRSB7Cgl0YXJnZXRDZWxsSWQJWzBdIEdsb2JhbENlbGxJZAlPUFRJT05BTCwKCXRhcmdldE1TQy1OdW1iZXIJWzFdIElTRE4tQWRkcmVzc1N0cmluZywKCXRhcmdldFJOQ0lkCVsyXSBSTkNJZAkJT1BUSU9OQUwsCglhbi1BUERVCQlbM10JQWNjZXNzTmV0d29ya1NpZ25hbEluZm8JT1BUSU9OQUwsCglzZWxlY3RlZFJhYi1JZAlbNF0JUkFCLUlkCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVs1XQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4sCglnZXJhbi1jbGFzc21hcmsJWzZdIEdFUkFOLUNsYXNzbWFyawlPUFRJT05BTCwKCXJhYi1Db25maWd1cmF0aW9uSW5kaWNhdG9yCVs3XSBOVUxMCQlPUFRJT05BTCB9CgpQcmVwYXJlU3Vic2VxdWVudEhPLVJlcyA6Oj0gWzNdIFNFUVVFTkNFIHsKCWFuLUFQRFUJCUFjY2Vzc05ldHdvcmtTaWduYWxJbmZvLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVswXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpQcm9jZXNzQWNjZXNzU2lnbmFsbGluZy1BcmcgOjo9IFszXSBTRVFVRU5DRSB7Cglhbi1BUERVCQlBY2Nlc3NOZXR3b3JrU2lnbmFsSW5mbywKCXNlbGVjdGVkVU1UUy1BbGdvcml0aG1zCVsxXQlTZWxlY3RlZFVNVFMtQWxnb3JpdGhtcwlPUFRJT05BTCwKCXNlbGVjdGVkR1NNLUFsZ29yaXRobQlbMl0JU2VsZWN0ZWRHU00tQWxnb3JpdGhtCU9QVElPTkFMLAoJY2hvc2VuUmFkaW9SZXNvdXJjZUluZm9ybWF0aW9uCVszXSBDaG9zZW5SYWRpb1Jlc291cmNlSW5mb3JtYXRpb24gT1BUSU9OQUwsCglzZWxlY3RlZFJhYi1JZAlbNF0gUkFCLUlkCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVswXQlFeHRlbnNpb25Db250YWluZXIgCU9QVElPTkFMLAoJLi4uLAoJaVVTZWxlY3RlZENvZGVjCVs1XSBDb2RlYwkJT1BUSU9OQUwsCglpdUF2YWlsYWJsZUNvZGVjc0xpc3QJWzZdIENvZGVjTGlzdAlPUFRJT05BTCB9CgpTdXBwb3J0ZWRDb2RlY3NMaXN0IDo6PSBTRVFVRU5DRSB7Cgl1dHJhbkNvZGVjTGlzdAlbMF0gQ29kZWNMaXN0CU9QVElPTkFMLAoJZ2VyYW5Db2RlY0xpc3QJWzFdIENvZGVjTGlzdAlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4ufQoKQ29kZWNMaXN0IDo6PSBTRVFVRU5DRSB7Cgljb2RlYzEJCVsxXSBDb2RlYywKCWNvZGVjMgkJWzJdIENvZGVjCQlPUFRJT05BTCwKCWNvZGVjMwkJWzNdIENvZGVjCQlPUFRJT05BTCwKCWNvZGVjNAkJWzRdIENvZGVjCQlPUFRJT05BTCwKCWNvZGVjNQkJWzVdIENvZGVjCQlPUFRJT05BTCwKCWNvZGVjNgkJWzZdIENvZGVjCQlPUFRJT05BTCwKCWNvZGVjNwkJWzddIENvZGVjCQlPUFRJT05BTCwKCWNvZGVjOAkJWzhdIENvZGVjCQlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbOV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4ufQoJLS0gQ29kZWNzIGFyZSBzZW50IGluIHByaW9yaXR5IG9yZGVyIHdoZXJlIGNvZGVjMSBoYXMgaGlnaGVzdCBwcmlvcml0eQoKQ29kZWMgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uNCkpCgoJLS0gVGhlIGludGVybmFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6CgktLSBvY3RldCAxCUNvZGVkIGFzIENvZGVjIElkZW50aWZpY2F0aW9uIGNvZGUgaW4gM0dQUCBUUyAyNi4xMDMKCS0tIG9jdGV0cyAyLDMsNAlQYXJhbWV0ZXJzIGZvciB0aGUgQ29kZWMgYXMgZGVmaW5lZCBpbiAzR1BQIFRTCgktLQkJCTI2LjEwMywgaWYgYXZhaWxhYmxlLCBsZW5ndGggZGVwZW5kaW5nIG9uIHRoZSBjb2RlYwoKR0VSQU4tQ2xhc3NtYXJrIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIuLjg3KSkKCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRoZSBHRVJBTiBDbGFzc21hcmsgaW5mb3JtYXRpb24gZWxlbWVudCBpbiAzR1BQIFRTIDQ4LjAwOAoKU2VsZWN0ZWRHU00tQWxnb3JpdGhtIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQoJLS0gaW50ZXJuYWwgc3RydWN0dXJlIGlzIGNvZGVkIGFzIEFsZ29yaXRobSBpZGVudGlmaWVyIG9jdGV0IGZyb20gQ2hvc2VuIEVuY3J5cHRpb24KCS0tIEFsZ29yaXRobSBkZWZpbmVkIGluIDNHUFAgVFMgNDguMDA4CgktLSBBIG5vZGUgc2hhbGwgbWFyayBvbmx5IHRoZSBzZWxlY3RlZCBHU00gYWxnb3JpdGhtCgpTZW5kRW5kU2lnbmFsLUFyZyA6Oj0gWzNdIFNFUVVFTkNFIHsKCWFuLUFQRFUJCUFjY2Vzc05ldHdvcmtTaWduYWxJbmZvLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVswXQlFeHRlbnNpb25Db250YWluZXIgCU9QVElPTkFMLAoJLi4ufQoKU2VuZEVuZFNpZ25hbC1SZXMgOjo9IFNFUVVFTkNFIHsKCWV4dGVuc2lvbkNvbnRhaW5lcglbMF0JRXh0ZW5zaW9uQ29udGFpbmVyIAlPUFRJT05BTCwKCS4uLn0KClJOQ0lkIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDcpKQoJLS0gVGhlIGludGVybmFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6CgktLSBvY3RldCAxIGJpdHMgNDMyMQlNb2JpbGUgQ291bnRyeSBDb2RlIDFzdCBkaWdpdAoJLS0gICAgICAgICBiaXRzIDg3NjUJTW9iaWxlIENvdW50cnkgQ29kZSAybmQgZGlnaXQKCS0tIG9jdGV0IDIgYml0cyA0MzIxCU1vYmlsZSBDb3VudHJ5IENvZGUgM3JkIGRpZ2l0CgktLSAgICAgICAgIGJpdHMgODc2NQlNb2JpbGUgTmV0d29yayBDb2RlIDNyZCBkaWdpdAoJLS0JCQlvciBmaWxsZXIgKDExMTEpIGZvciAyIGRpZ2l0IE1OQ3MKCS0tIG9jdGV0IDMgYml0cyA0MzIxCU1vYmlsZSBOZXR3b3JrIENvZGUgMXN0IGRpZ2l0CgktLSAgICAgICAgIGJpdHMgODc2NQlNb2JpbGUgTmV0d29yayBDb2RlIDJuZCBkaWdpdAoJLS0gb2N0ZXRzIDQgYW5kIDUJTG9jYXRpb24gQXJlYSBDb2RlIGFjY29yZGluZyB0byAzR1BQIFRTIDI0LjAwOAoJLS0gb2N0ZXRzIDYgYW5kIDcJUk5DIElkIHZhbHVlIGFjY29yZGluZyB0byAzR1BQIFRTIDI1LjQxMwoKUmVsb2NhdGlvbk51bWJlckxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mUmVsb2NhdGlvbk51bWJlcikgT0YKCQkJCVJlbG9jYXRpb25OdW1iZXIKCk11bHRpY2FsbEJlYXJlckluZm8gOjo9IElOVEVHRVIgKDEuLm1heE51bU9mUmVsb2NhdGlvbk51bWJlcikKClJlbG9jYXRpb25OdW1iZXIgOjo9IFNFUVVFTkNFIHsKCWhhbmRvdmVyTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZywKCXJhYi1JZAkJUkFCLUlkLAoJLS0gUkFCIElkZW50aXR5IGlzIG5lZWRlZCB0byByZWxhdGUgdGhlIGNhbGxzIHdpdGggdGhlIHJhZGlvIGFjY2VzcyBiZWFyZXJzLiAKCS4uLn0KClJBQi1JZCA6Oj0gSU5URUdFUiAoMS4ubWF4TnJPZlJBQnMpCgptYXhOck9mUkFCcyBJTlRFR0VSIDo6PSAyNTUKCm1heE51bU9mUmVsb2NhdGlvbk51bWJlciAgSU5URUdFUiA6Oj0gNwoKUmFkaW9SZXNvdXJjZUluZm9ybWF0aW9uIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDMuLjEzKSkKCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRoZSBDaGFubmVsIFR5cGUgaW5mb3JtYXRpb24gZWxlbWVudCBpbiAzR1BQIFRTIDQ4LjAwOAoKSW50ZWdyaXR5UHJvdGVjdGlvbkluZm9ybWF0aW9uIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDE4Li5tYXhOdW1PZkludGVncml0eUluZm8pKQoJLS0gT2N0ZXRzIGNvbnRhaW4gYSBjb21wbGV0ZSBJbnRlZ3JpdHlQcm90ZWN0aW9uSW5mb3JtYXRpb24gZGF0YSB0eXBlIAoJLS0gYXMgZGVmaW5lZCBpbiAzR1BQIFRTIDI1LjQxMywgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIGVuY29kaW5nIHNjaGVtZSAKCS0tIG1hbmRhdGVkIGJ5IDNHUFAgVFMgMjUuNDEzCgktLSBQYWRkaW5nIGJpdHMgYXJlIGluY2x1ZGVkLCBpZiBuZWVkZWQsIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSAKCS0tIGxhc3Qgb2N0ZXQgb2YgdGhlIG9jdGV0IHN0cmluZy4gCgptYXhOdW1PZkludGVncml0eUluZm8gSU5URUdFUiA6Oj0gMTAwCgpFbmNyeXB0aW9uSW5mb3JtYXRpb24gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMTguLm1heE51bU9mRW5jcnlwdGlvbkluZm8pKQoJLS0gT2N0ZXRzIGNvbnRhaW4gYSBjb21wbGV0ZSBFbmNyeXB0aW9uSW5mb3JtYXRpb24gZGF0YSB0eXBlIAoJLS0gYXMgZGVmaW5lZCBpbiAzR1BQIFRTIDI1LjQxMywgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIGVuY29kaW5nIHNjaGVtZSAKCS0tIG1hbmRhdGVkIGJ5IDNHUFAgVFMgMjUuNDEzCgktLSBQYWRkaW5nIGJpdHMgYXJlIGluY2x1ZGVkLCBpZiBuZWVkZWQsIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSAKCS0tIGxhc3Qgb2N0ZXQgb2YgdGhlIG9jdGV0IHN0cmluZy4gCgptYXhOdW1PZkVuY3J5cHRpb25JbmZvIElOVEVHRVIgOjo9IDEwMAoKLS0gYXV0aGVudGljYXRpb24gbWFuYWdlbWVudCB0eXBlcwoKU2VuZEF1dGhlbnRpY2F0aW9uSW5mb0FyZyA6Oj0gU0VRVUVOQ0UgewoJaW1zaQkJCVswXSBJTVNJLAoJbnVtYmVyT2ZSZXF1ZXN0ZWRWZWN0b3JzCU51bWJlck9mUmVxdWVzdGVkVmVjdG9ycywKCXNlZ21lbnRhdGlvblByb2hpYml0ZWQJTlVMTAkJCU9QVElPTkFMLAoJaW1tZWRpYXRlUmVzcG9uc2VQcmVmZXJyZWQJWzFdIE5VTEwJCQlPUFRJT05BTCwKCXJlLXN5bmNocm9uaXNhdGlvbkluZm8JUmUtc3luY2hyb25pc2F0aW9uSW5mbwlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uLAoJcmVxdWVzdGluZ05vZGVUeXBlCVszXSBSZXF1ZXN0aW5nTm9kZVR5cGUJT1BUSU9OQUwsCglyZXF1ZXN0aW5nUExNTi1JZAlbNF0gUExNTi1JZAlPUFRJT05BTCwKCW51bWJlck9mUmVxdWVzdGVkQWRkaXRpb25hbC1WZWN0b3JzCVs1XSBOdW1iZXJPZlJlcXVlc3RlZFZlY3RvcnMJT1BUSU9OQUwsCglhZGRpdGlvbmFsVmVjdG9yc0FyZUZvckVQUwlbNl0gTlVMTAkJT1BUSU9OQUwgfQkKCgpOdW1iZXJPZlJlcXVlc3RlZFZlY3RvcnMgOjo9IElOVEVHRVIgKDEuLjUpCgpSZS1zeW5jaHJvbmlzYXRpb25JbmZvIDo6PSBTRVFVRU5DRSB7CglyYW5kCQkJUkFORCwKCWF1dHMJCQlBVVRTLAoJLi4ufQoKU2VuZEF1dGhlbnRpY2F0aW9uSW5mb1JlcyA6Oj0gWzNdIFNFUVVFTkNFIHsKCWF1dGhlbnRpY2F0aW9uU2V0TGlzdAlBdXRoZW50aWNhdGlvblNldExpc3QgCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiwKCWVwcy1BdXRoZW50aWNhdGlvblNldExpc3QJWzJdIEVQUy1BdXRoZW50aWNhdGlvblNldExpc3QJT1BUSU9OQUwgfQoKRVBTLUF1dGhlbnRpY2F0aW9uU2V0TGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uNSkgT0YKCQkJCUVQQy1BVgoKRVBDLUFWIDo6PSBTRVFVRU5DRSB7CglyYW5kCQkJUkFORCwKCXhyZXMJCQlYUkVTLAoJYXV0bgkJCUFVVE4sCglrYXNtZQkJS0FTTUUsCglleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4ufQoKS0FTTUUgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMTYpKQoKUmVxdWVzdGluZ05vZGVUeXBlIDo6PSBFTlVNRVJBVEVEIHsKCXZsciAgKDApLAoJc2dzbiAgKDEpLAoJLi4uLAoJcy1jc2NmICAoMiksCglic2YgICgzKSwKCWdhbi1hYWEtc2VydmVyICAoNCksCgl3bGFuLWFhYS1zZXJ2ZXIgICg1KSwKCW1tZQkJKDE2KSwKCW1tZS1zZ3NuCSgxNykKCX0KCS0tIHRoZSB2YWx1ZXMgMiwgMywgNCBhbmQgNSBzaGFsbCBub3QgYmUgdXNlZCBvbiB0aGUgTUFQLUQgb3IgR3IgaW50ZXJmYWNlcwoJLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgoJLS0gcmVjZWl2ZWQgdmFsdWVzIGluIHRoZSByYW5nZSAoNi0xNSkgc2hhbGwgYmUgdHJlYXRlZCBhcyAidmxyIgoJLS0gcmVjZWl2ZWQgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxNyBzaGFsbCBiZSB0cmVhdGVkIGFzICJzZ3NuIgoKLS0gZXF1aXBtZW50IG1hbmFnZW1lbnQgdHlwZXMKCkNoZWNrSU1FSS1BcmcgOjo9IFNFUVVFTkNFIHsKCWltZWkJCQlJTUVJLAoJcmVxdWVzdGVkRXF1aXBtZW50SW5mbwlSZXF1ZXN0ZWRFcXVpcG1lbnRJbmZvLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KCkNoZWNrSU1FSS1SZXMgOjo9IFNFUVVFTkNFIHsKCWVxdWlwbWVudFN0YXR1cwlFcXVpcG1lbnRTdGF0dXMJT1BUSU9OQUwsCglibXVlZgkJVUVTQkktSXUJCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVswXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpSZXF1ZXN0ZWRFcXVpcG1lbnRJbmZvOjo9IEJJVCBTVFJJTkcgewoJZXF1aXBtZW50U3RhdHVzICAoMCksCglibXVlZiAgKDEpfSAoU0laRSAoMi4uOCkpCgktLSBleGNlcHRpb24gaGFuZGxpbmc6IHJlY2VwdGlvbiBvZiB1bmtub3duIGJpdCBhc3NpZ25tZW50cyBpbiB0aGUKCS0tIFJlcXVlc3RlZEVxdWlwbWVudEluZm8gZGF0YSB0eXBlIHNoYWxsIGJlIGRpc2NhcmRlZCBieSB0aGUgcmVjZWl2ZXIgCgpVRVNCSS1JdSA6Oj0gU0VRVUVOQ0UgewoJdWVzYmktSXVBCVswXSBVRVNCSS1JdUEJCQkJT1BUSU9OQUwsCgl1ZXNiaS1JdUIJWzFdIFVFU0JJLUl1QgkJCQlPUFRJT05BTCwKCS4uLn0KClVFU0JJLUl1QQkJCQk6Oj0gQklUIFNUUklORyAoU0laRSgxLi4xMjgpKQotLSBTZWUgM0dQUCBUUyAyNS40MTMKClVFU0JJLUl1QgkJCQk6Oj0gQklUIFNUUklORyAoU0laRSgxLi4xMjgpKQotLSBTZWUgM0dQUCBUUyAyNS40MTMKCkVxdWlwbWVudFN0YXR1cyA6Oj0gRU5VTUVSQVRFRCB7Cgl3aGl0ZUxpc3RlZCAgKDApLAoJYmxhY2tMaXN0ZWQgICgxKSwKCWdyZXlMaXN0ZWQgICgyKX0KCi0tIHN1YnNjcmliZXIgbWFuYWdlbWVudCB0eXBlcwoKSW5zZXJ0U3Vic2NyaWJlckRhdGFBcmcgOjo9IFNFUVVFTkNFIHsKCWltc2kJCQlbMF0gSU1TSQkJT1BUSU9OQUwsCglDT01QT05FTlRTIE9GCVN1YnNjcmliZXJEYXRhLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVsxNF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uICwJCgluYWVhLVByZWZlcnJlZENJCVsxNV0gTkFFQS1QcmVmZXJyZWRDSQlPUFRJT05BTCwKCS0tIG5hZWEtUHJlZmVycmVkQ0kgaXMgaW5jbHVkZWQgYXQgdGhlIGRpc2NyZXRpb24gb2YgdGhlIEhMUiBvcGVyYXRvci4KCWdwcnNTdWJzY3JpcHRpb25EYXRhCVsxNl0gR1BSU1N1YnNjcmlwdGlvbkRhdGEJT1BUSU9OQUwsCglyb2FtaW5nUmVzdHJpY3RlZEluU2dzbkR1ZVRvVW5zdXBwb3J0ZWRGZWF0dXJlIFsyM10gCU5VTEwJCgkJCQkJCQlPUFRJT05BTCwgCgluZXR3b3JrQWNjZXNzTW9kZQlbMjRdIE5ldHdvcmtBY2Nlc3NNb2RlCU9QVElPTkFMLAoJbHNhSW5mb3JtYXRpb24JWzI1XSBMU0FJbmZvcm1hdGlvbglPUFRJT05BTCwKCWxtdS1JbmRpY2F0b3IJWzIxXQlOVUxMCQlPUFRJT05BTCwKCWxjc0luZm9ybWF0aW9uCVsyMl0JTENTSW5mb3JtYXRpb24JT1BUSU9OQUwsCglpc3RBbGVydFRpbWVyCVsyNl0gSVNULUFsZXJ0VGltZXJWYWx1ZQlPUFRJT05BTCwKCXN1cGVyQ2hhcmdlclN1cHBvcnRlZEluSExSCVsyN10gQWdlSW5kaWNhdG9yCU9QVElPTkFMLAoJbWMtU1MtSW5mbwlbMjhdIE1DLVNTLUluZm8JT1BUSU9OQUwsCgljcy1BbGxvY2F0aW9uUmV0ZW50aW9uUHJpb3JpdHkJWzI5XSBDUy1BbGxvY2F0aW9uUmV0ZW50aW9uUHJpb3JpdHkJCU9QVElPTkFMLAoJc2dzbi1DQU1FTC1TdWJzY3JpcHRpb25JbmZvCVsxN10gU0dTTi1DQU1FTC1TdWJzY3JpcHRpb25JbmZvCU9QVElPTkFMLAoJY2hhcmdpbmdDaGFyYWN0ZXJpc3RpY3MgCVsxOF0JQ2hhcmdpbmdDaGFyYWN0ZXJpc3RpY3MgCU9QVElPTkFMLAoJYWNjZXNzUmVzdHJpY3Rpb25EYXRhCVsxOV0gQWNjZXNzUmVzdHJpY3Rpb25EYXRhCU9QVElPTkFMLAoJaWNzLUluZGljYXRvcglbMjBdCUJPT0xFQU4JT1BUSU9OQUwsCgllcHMtU3Vic2NyaXB0aW9uRGF0YQlbMzFdCUVQUy1TdWJzY3JpcHRpb25EYXRhCU9QVElPTkFMLAoJY3NnLVN1YnNjcmlwdGlvbkRhdGFMaXN0CVszMl0gQ1NHLVN1YnNjcmlwdGlvbkRhdGFMaXN0CU9QVElPTkFMIH0KCS0tIElmIHRoZSBOZXR3b3JrIEFjY2VzcyBNb2RlIHBhcmFtZXRlciBpcyBzZW50LCBpdCBzaGFsbCBiZSBwcmVzZW50IG9ubHkgaW4gCgktLSB0aGUgZmlyc3Qgc2VxdWVuY2UgaWYgc2VxbWVudGF0aW9uIGlzIHVzZWQKCkNTRy1TdWJzY3JpcHRpb25EYXRhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uNTApIE9GCgkJCQlDU0ctU3Vic2NyaXB0aW9uRGF0YQoKQ1NHLVN1YnNjcmlwdGlvbkRhdGEgOjo9IFNFUVVFTkNFIHsKCWNzZy1JZAkgCQlDU0ctSWQsCglleHBpcmF0aW9uRGF0ZQkJVGltZQkJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJCUV4dGVuc2lvbkNvbnRhaW5lciAJT1BUSU9OQUwsCgkuLi59CgpDU0ctSWQgOjo9IEJJVCBTVFJJTkcgKFNJWkUgKDI3KSkKCS0tIGNvZGVkIGFjY29yZGluZyB0byAzR1BQIFRTIDIzLjAwMyBbMTddLgoKVGltZSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg0KSkKCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRvIElFVEYgUkZDIDM1ODggWzEzOV0KCgpFUFMtU3Vic2NyaXB0aW9uRGF0YSA6Oj0gU0VRVUVOQ0UgewoJYXBuLW9pLVJlcGxhY2VtZW50CVswXQlBUE4tT0ktUmVwbGFjZW1lbnQJT1BUSU9OQUwsCglyZnNwLWlkCQlbMl0JUkZTUC1JRAkJT1BUSU9OQUwsCglhbWJyCQkJWzNdCUFNQlIJCU9QVElPTkFMLAoJYXBuLUNvbmZpZ3VyYXRpb25Qcm9maWxlCVs0XQlBUE4tQ29uZmlndXJhdGlvblByb2ZpbGUJT1BUSU9OQUwsCglzdG4tc3IJCVs2XQlJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzVdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiB9CgpBUE4tT0ktUmVwbGFjZW1lbnQgOjo9ICBPQ1RFVCBTVFJJTkcgKFNJWkUgKDkuLjEwMCkpCgktLSBPY3RldHMgYXJlIGNvZGVkIGFzIEFQTiBPcGVyYXRvciBJZGVudGlmaWVyIGFjY29yZGluZyB0byBUUyAzR1BQIFRTIDIzLjAwMyBbMTddIAoKUkZTUC1JRCA6Oj0gIElOVEVHRVIgKDEuLjI1NikKCkFQTi1Db25maWd1cmF0aW9uUHJvZmlsZSA6Oj0gU0VRVUVOQ0UgewoJZGVmYXVsdENvbnRleHQJQ29udGV4dElkLAoJY29tcGxldGVEYXRhTGlzdEluY2x1ZGVkCU5VTEwJCQlPUFRJT05BTCwKCQktLSBJZiBzZWdtZW50YXRpb24gaXMgdXNlZCwgY29tcGxldGVEYXRhTGlzdEluY2x1ZGVkIG1heSBvbmx5IGJlIHByZXNlbnQgaW4gdGhlCgkJLS0gZmlyc3Qgc2VnbWVudCBvZiBBUE4tQ29uZmlndXJhdGlvblByb2ZpbGUuCgllcHNEYXRhTGlzdAlbMV0JRVBTLURhdGFMaXN0LAoJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4gfQoKRVBTLURhdGFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkFQTi1Db25maWd1cmF0aW9ucykgT0YKCQkJCUFQTi1Db25maWd1cmF0aW9uCgoKbWF4TnVtT2ZBUE4tQ29uZmlndXJhdGlvbnMgIElOVEVHRVIgOjo9IDUwCgoKQVBOLUNvbmZpZ3VyYXRpb24gOjo9IFNFUVVFTkNFIHsKCWNvbnRleHRJZAkJWzBdIENvbnRleHRJZCwKCXNlcnZlZFBhcnR5SVAtQWRkcmVzcwlbMV0gUERQLUFkZHJlc3MJT1BUSU9OQUwsCglhcG4JCQlbMl0gQVBOLAoJZXBzLXFvcy1TdWJzY3JpYmVkCVszXSBFUFMtUW9TLVN1YnNjcmliZWQsCglwZG4tZ3ctSWRlbnRpdHkJWzRdIFBETi1HVy1JZGVudGl0eQlPUFRJT05BTCwKCXBkbi1ndy1BbGxvY2F0aW9uVHlwZQlbNV0gUEROLUdXLUFsbG9jYXRpb25UeXBlCU9QVElPTkFMLAoJdnBsbW5BZGRyZXNzQWxsb3dlZAlbNl0gTlVMTAkJT1BUSU9OQUwsCgljaGFyZ2luZ0NoYXJhY3RlcmlzdGljcwlbN10gQ2hhcmdpbmdDaGFyYWN0ZXJpc3RpY3MJT1BUSU9OQUwsCglhbWJyCQkJWzhdIEFNQlIJCU9QVElPTkFMLAoJc3BlY2lmaWNBUE5JbmZvTGlzdAlbOV0gU3BlY2lmaWNBUE5JbmZvTGlzdAlPUFRJT05BTCwJZXh0ZW5zaW9uQ29udGFpbmVyCVsxMF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uIH0KCkVQUy1Rb1MtU3Vic2NyaWJlZCA6Oj0gU0VRVUVOQ0UgewoJcW9zLUNsYXNzLUlkZW50aWZpZXIJWzBdIFFvUy1DbGFzcy1JZGVudGlmaWVyLAoJYWxsb2NhdGlvbi1SZXRlbnRpb24tUHJpb3JpdHkJWzFdIEFsbG9jYXRpb24tUmV0ZW50aW9uLVByaW9yaXR5LAoJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4gfQoKQU1CUiA6Oj0gU0VRVUVOQ0UgewoJbWF4LVJlcXVlc3RlZEJhbmR3aWR0aC1VTAlbMF0gQmFuZHdpZHRoLAoJbWF4LVJlcXVlc3RlZEJhbmR3aWR0aC1ETAlbMV0gQmFuZHdpZHRoLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4gfQoKClNwZWNpZmljQVBOSW5mb0xpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mU3BlY2lmaWNBUE5JbmZvcykgT0YKCQkJCVNwZWNpZmljQVBOSW5mbwoKbWF4TnVtT2ZTcGVjaWZpY0FQTkluZm9zICBJTlRFR0VSIDo6PSA1MAoKU3BlY2lmaWNBUE5JbmZvIDo6PSBTRVFVRU5DRSB7CglhcG4JCQlbMF0gQVBOLAoJcGRuLWd3LUlkZW50aXR5CVsxXSBQRE4tR1ctSWRlbnRpdHksCglleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiB9CgpCYW5kd2lkdGggOjo9IElOVEVHRVIgCgktLSBiaXRzIHBlciBzZWNvbmQKClFvUy1DbGFzcy1JZGVudGlmaWVyIDo6PSBJTlRFR0VSICgxLi45KQoJLS0gdmFsdWVzIGFyZSBkZWZpbmVkIGluICAzR1BQIFRTIDI5LjIxMgoKCgpBbGxvY2F0aW9uLVJldGVudGlvbi1Qcmlvcml0eSA6Oj0gU0VRVUVOQ0UgewoJcHJpb3JpdHktbGV2ZWwJWzBdIElOVEVHRVIsCglwcmUtZW1wdGlvbi1jYXBhYmlsaXR5CVsxXSBCT09MRUFOCU9QVElPTkFMLAoJcHJlLWVtcHRpb24tdnVsbmVyYWJpbGl0eQlbMl0gQk9PTEVBTglPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbM10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uIH0KClBETi1HVy1JZGVudGl0eSA6Oj0gU0VRVUVOQ0UgewoJcGRuLWd3LWlwdjQtQWRkcmVzcwlbMF0gUERQLUFkZHJlc3MJT1BUSU9OQUwsCglwZG4tZ3ctaXB2Ni1BZGRyZXNzCVsxXSBQRFAtQWRkcmVzcwlPUFRJT05BTCwKCXBkbi1ndy1uYW1lCVsyXSBGUUROCQlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbM10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uIH0KCkZRRE4gOjo9ICBPQ1RFVCBTVFJJTkcgKFNJWkUgKDkuLjEwMCkpCgoKUEROLUdXLUFsbG9jYXRpb25UeXBlIDo6PSBFTlVNRVJBVEVEIHsKCXN0YXRpYwkoMCksCglkeW5hbWljCSgxKX0KCgpBY2Nlc3NSZXN0cmljdGlvbkRhdGEgOjo9IEJJVCBTVFJJTkcgewoJdXRyYW5Ob3RBbGxvd2VkICgwKSwKCWdlcmFuTm90QWxsb3dlZCAoMSksCglnYW5Ob3RBbGxvd2VkICAgKDIpLAoJaS1oc3BhLWV2b2x1dGlvbk5vdEFsbG93ZWQgKDMpLAoJZS11dHJhbk5vdEFsbG93ZWQgKDQpLAoJaG8tdG9Ob24zR1BQLUFjY2Vzc05vdEFsbG93ZWQgKDUpIH0gKFNJWkUgKDIuLjgpKQoJLS0gZXhjZXB0aW9uIGhhbmRsaW5nOiAKCS0tIGFjY2VzcyByZXN0cmljdGlvbiBkYXRhIHJlbGF0ZWQgdG8gYW4gYWNjZXNzIHR5cGUgbm90IHN1cHBvcnRlZCBieSBhIG5vZGUKCS0tIHNoYWxsIGJlIGlnbm9yZWQKCS0tIGJpdHMgNiB0byA3IHNoYWxsIGJlIGlnbm9yZWQgaWYgcmVjZWl2ZWQgYW5kIG5vdCB1bmRlcnN0b29kCgkKCkNTLUFsbG9jYXRpb25SZXRlbnRpb25Qcmlvcml0eSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKCS0tIFRoaXMgZGF0YSB0eXBlIGVuY29kZXMgZWFjaCBwcmlvcml0eSBsZXZlbCBkZWZpbmVkIGluIFRTIDIzLjEwNyBhcyB0aGUgYmluYXJ5IHZhbHVlCgktLSBvZiB0aGUgcHJpb3JpdHkgbGV2ZWwuCgpJU1QtQWxlcnRUaW1lclZhbHVlIDo6PSBJTlRFR0VSICgxNS4uMjU1KQoKTENTSW5mb3JtYXRpb24gOjo9IFNFUVVFTkNFIHsKCWdtbGMtTGlzdAlbMF0JR01MQy1MaXN0CU9QVElPTkFMLAoJbGNzLVByaXZhY3lFeGNlcHRpb25MaXN0CVsxXQlMQ1MtUHJpdmFjeUV4Y2VwdGlvbkxpc3QJT1BUSU9OQUwsCgltb2xyLUxpc3QJCVsyXQlNT0xSLUxpc3QJT1BUSU9OQUwsCgkuLi4sCglhZGQtbGNzLVByaXZhY3lFeGNlcHRpb25MaXN0CVszXQlMQ1MtUHJpdmFjeUV4Y2VwdGlvbkxpc3QJT1BUSU9OQUwgfQoJLS0gYWRkLWxjcy1Qcml2YWN5RXhjZXB0aW9uTGlzdCBtYXkgYmUgc2VudCBvbmx5IGlmIGxjcy1Qcml2YWN5RXhjZXB0aW9uTGlzdCBpcwoJLS0gcHJlc2VudCBhbmQgY29udGFpbnMgZm91ciBpbnN0YW5jZXMgb2YgTENTLVByaXZhY3lDbGFzcy4gSWYgdGhlIG1lbnRpb25lZCBjb25kaXRpb24KCS0tIGlzIG5vdCBzYXRpc2ZpZWQgdGhlIHJlY2VpdmluZyBub2RlIHNoYWxsIGRpc2NhcmQgYWRkLWxjcy1Qcml2YWN5RXhjZXB0aW9uTGlzdC4KCS0tIElmIGFuIExDUy1Qcml2YWN5Q2xhc3MgaXMgcmVjZWl2ZWQgYm90aCBpbiBsY3MtUHJpdmFjeUV4Y2VwdGlvbkxpc3QgYW5kIGluCgktLSBhZGQtbGNzLVByaXZhY3lFeGNlcHRpb25MaXN0IHdpdGggdGhlIHNhbWUgU1MtQ29kZSwgdGhlbiB0aGUgZXJyb3IgdW5leHBlY3RlZCAKCS0tIGRhdGEgdmFsdWUgc2hhbGwgYmUgcmV0dXJuZWQuCgpHTUxDLUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mR01MQykgT0YKCQkJCUlTRE4tQWRkcmVzc1N0cmluZwoJLS0gaWYgc2VnbWVudGF0aW9uIGlzIHVzZWQsIHRoZSBjb21wbGV0ZSBHTUxDLUxpc3Qgc2hhbGwgYmUgc2VudCBpbiBvbmUgc2VnbWVudAoKbWF4TnVtT2ZHTUxDICBJTlRFR0VSIDo6PSA1CgpOZXR3b3JrQWNjZXNzTW9kZSA6Oj0gRU5VTUVSQVRFRCB7CglwYWNrZXRBbmRDaXJjdWl0CSgwKSwKCW9ubHlDaXJjdWl0CQkoMSksCglvbmx5UGFja2V0CQkoMiksCgkuLi59CgktLSBpZiB1bmtub3duIHZhbHVlcyBhcmUgcmVjZWl2ZWQgaW4gTmV0d29ya0FjY2Vzc01vZGUKCS0tIHRoZXkgc2hhbGwgYmUgZGlzY2FyZGVkLgoKR1BSU0RhdGFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlBEUC1Db250ZXh0cykgT0YKCQkJCVBEUC1Db250ZXh0CgptYXhOdW1PZlBEUC1Db250ZXh0cyAgSU5URUdFUiA6Oj0gNTAKClBEUC1Db250ZXh0IDo6PSBTRVFVRU5DRSB7CglwZHAtQ29udGV4dElkCUNvbnRleHRJZCwKCXBkcC1UeXBlCQlbMTZdIFBEUC1UeXBlLAoJcGRwLUFkZHJlc3MJWzE3XSBQRFAtQWRkcmVzcwlPUFRJT05BTCwKCXFvcy1TdWJzY3JpYmVkCVsxOF0gUW9TLVN1YnNjcmliZWQsCgl2cGxtbkFkZHJlc3NBbGxvd2VkCVsxOV0gTlVMTAlPUFRJT05BTCwKCWFwbgkJCVsyMF0gQVBOLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVsyMV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uICwKCWV4dC1Rb1MtU3Vic2NyaWJlZAlbMF0gRXh0LVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMLCAKCXBkcC1DaGFyZ2luZ0NoYXJhY3RlcmlzdGljcwlbMV0gQ2hhcmdpbmdDaGFyYWN0ZXJpc3RpY3MJT1BUSU9OQUwsCglleHQyLVFvUy1TdWJzY3JpYmVkCVsyXSBFeHQyLVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMLAoJLS0gZXh0Mi1Rb1MtU3Vic2NyaWJlZCBtYXkgYmUgcHJlc2VudCBvbmx5IGlmIGV4dC1Rb1MtU3Vic2NyaWJlZCBpcyBwcmVzZW50LgoJZXh0My1Rb1MtU3Vic2NyaWJlZAlbM10gRXh0My1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTAoJLS0gZXh0My1Rb1MtU3Vic2NyaWJlZCBtYXkgYmUgcHJlc2VudCBvbmx5IGlmIGV4dDItUW9TLVN1YnNjcmliZWQgaXMgcHJlc2VudC4KCSB9CgpDb250ZXh0SWQgOjo9IElOVEVHRVIgKDEuLm1heE51bU9mUERQLUNvbnRleHRzKQoKR1BSU1N1YnNjcmlwdGlvbkRhdGEgOjo9IFNFUVVFTkNFIHsKCWNvbXBsZXRlRGF0YUxpc3RJbmNsdWRlZAlOVUxMCQkJT1BUSU9OQUwsCgkJLS0gSWYgc2VnbWVudGF0aW9uIGlzIHVzZWQsIGNvbXBsZXRlRGF0YUxpc3RJbmNsdWRlZCBtYXkgb25seSBiZSBwcmVzZW50IGluIHRoZQoJCS0tIGZpcnN0IHNlZ21lbnQgb2YgR1BSU1N1YnNjcmlwdGlvbkRhdGEuCglncHJzRGF0YUxpc3QJWzFdCUdQUlNEYXRhTGlzdCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uIH0KClNHU04tQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbyA6Oj0gU0VRVUVOQ0UgewoJZ3Bycy1DU0kJCVswXQlHUFJTLUNTSQlPUFRJT05BTCwKCW1vLXNtcy1DU0kJWzFdCVNNUy1DU0kJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzJdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiwKCW10LXNtcy1DU0kJWzNdCVNNUy1DU0kJT1BUSU9OQUwsCgltdC1zbXNDQU1FTFREUC1Dcml0ZXJpYUxpc3QJWzRdCU1ULXNtc0NBTUVMVERQLUNyaXRlcmlhTGlzdAlPUFRJT05BTCwKCW1nLWNzaQkJWzVdCU1HLUNTSQlPUFRJT05BTAoJfQoKR1BSUy1DU0kgOjo9IFNFUVVFTkNFIHsKCWdwcnMtQ2FtZWxURFBEYXRhTGlzdAlbMF0gR1BSUy1DYW1lbFREUERhdGFMaXN0CU9QVElPTkFMLAoJY2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcJWzFdIENhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCglub3RpZmljYXRpb25Ub0NTRQlbM10JTlVMTAkJT1BUSU9OQUwsCgljc2ktQWN0aXZlCVs0XQlOVUxMCQlPUFRJT05BTCwKCS4uLn0KLS0Jbm90aWZpY2F0aW9uVG9DU0UgYW5kIGNzaS1BY3RpdmUgc2hhbGwgbm90IGJlIHByZXNlbnQgd2hlbiBHUFJTLUNTSSBpcyBzZW50IHRvIFNHU04uCi0tCVRoZXkgbWF5IG9ubHkgYmUgaW5jbHVkZWQgaW4gQVRTSS9BVE0gYWNrL05TREMgbWVzc2FnZS4gCi0tCUdQUlMtQ2FtZWxURFBEYXRhIGFuZCAgY2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcgc2hhbGwgYmUgcHJlc2VudCBpbiAKLS0JdGhlIEdQUlMtQ1NJIHNlcXVlbmNlLgotLQlJZiBHUFJTLUNTSSBpcyBzZWdtZW50ZWQsIGdwcnMtQ2FtZWxURFBEYXRhTGlzdCBhbmQgY2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcgc2hhbGwgYmUgCi0tCXByZXNlbnQgaW4gdGhlIGZpcnN0IHNlZ21lbnQKCkdQUlMtQ2FtZWxURFBEYXRhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZDYW1lbFREUERhdGEpIE9GCglHUFJTLUNhbWVsVERQRGF0YQotLQlHUFJTLUNhbWVsVERQRGF0YUxpc3Qgc2hhbGwgbm90IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBvZgotLQlHUFJTLUNhbWVsVERQRGF0YSBjb250YWluaW5nIHRoZSBzYW1lIHZhbHVlIGZvciBncHJzLVRyaWdnZXJEZXRlY3Rpb25Qb2ludC4KCkdQUlMtQ2FtZWxURFBEYXRhIDo6PSBTRVFVRU5DRSB7CglncHJzLVRyaWdnZXJEZXRlY3Rpb25Qb2ludAlbMF0gR1BSUy1UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQsCglzZXJ2aWNlS2V5CVsxXSBTZXJ2aWNlS2V5LAoJZ3NtU0NGLUFkZHJlc3MJWzJdIElTRE4tQWRkcmVzc1N0cmluZywKCWRlZmF1bHRTZXNzaW9uSGFuZGxpbmcJWzNdIERlZmF1bHRHUFJTLUhhbmRsaW5nLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVs0XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4KCX0KCkRlZmF1bHRHUFJTLUhhbmRsaW5nIDo6PSBFTlVNRVJBVEVEIHsKCWNvbnRpbnVlVHJhbnNhY3Rpb24gKDApICwKCXJlbGVhc2VUcmFuc2FjdGlvbiAoMSkgLAoJLi4ufQotLSBleGNlcHRpb24gaGFuZGxpbmc6Ci0tIHJlY2VwdGlvbiBvZiB2YWx1ZXMgaW4gcmFuZ2UgMi0zMSBzaGFsbCBiZSB0cmVhdGVkIGFzICJjb250aW51ZVRyYW5zYWN0aW9uIgotLSByZWNlcHRpb24gb2YgdmFsdWVzIGdyZWF0ZXIgdGhhbiAzMSBzaGFsbCBiZSB0cmVhdGVkIGFzICJyZWxlYXNlVHJhbnNhY3Rpb24iCgpHUFJTLVRyaWdnZXJEZXRlY3Rpb25Qb2ludCA6Oj0gRU5VTUVSQVRFRCB7CglhdHRhY2ggCQkJKDEpLAoJYXR0YWNoQ2hhbmdlT2ZQb3NpdGlvbiAJCSgyKSwKCXBkcC1Db250ZXh0RXN0YWJsaXNobWVudCAJCSgxMSksCglwZHAtQ29udGV4dEVzdGFibGlzaG1lbnRBY2tub3dsZWRnZW1lbnQJKDEyKSwKCXBkcC1Db250ZXh0Q2hhbmdlT2ZQb3NpdGlvbiAJCSgxNCksCgkuLi4gfQotLSBleGNlcHRpb24gaGFuZGxpbmc6Ci0tIEZvciBHUFJTLUNhbWVsVERQRGF0YSBzZXF1ZW5jZXMgY29udGFpbmluZyB0aGlzIHBhcmFtZXRlciB3aXRoIGFueQotLSBvdGhlciB2YWx1ZSB0aGFuIHRoZSBvbmVzIGxpc3RlZCB0aGUgcmVjZWl2ZXIgc2hhbGwgaWdub3JlIHRoZSB3aG9sZSAKLS0gR1BSUy1DYW1lbFREUERhdGFzZXF1ZW5jZS4KCkFQTiA6Oj0gIE9DVEVUIFNUUklORyAoU0laRSAoMi4uNjMpKQoJLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gVFMgM0dQUCBUUyAyMy4wMDMgWzE3XSAKClBEUC1UeXBlIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIpKQoJLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gVFMgM0dQUCBUUyAyOS4wNjAgWzEwNV0KClBEUC1BZGRyZXNzIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjE2KSkKCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRvIFRTIDNHUFAgVFMgMjkuMDYwIFsxMDVdCgoJLS0gVGhlIHBvc3NpYmxlIHNpemUgdmFsdWVzIGFyZToKCS0tIDEtNyBvY3RldHMgIFguMjUgYWRkcmVzcyB0eXBlCgktLSAgNCAgb2N0ZXRzICBJUHY0IGFkZHJlc3MgdHlwZQoJLS0gMTYgIG9jdGV0cyAgSXB2NiBhZGRyZXNzIHR5cGUKClFvUy1TdWJzY3JpYmVkIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDMpKQoJLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gVFMgM0dQUCBUUyAyNC4wMDggWzM1XSBRdWFsaXR5IG9mIFNlcnZpY2UgT2N0ZXRzIAoJLS0gMy01LgoKRXh0LVFvUy1TdWJzY3JpYmVkIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjkpKQoJLS0gT0NURVQgMTogCgktLSAgQWxsb2NhdGlvbi9SZXRlbnRpb24gUHJpb3JpdHkgKFRoaXMgb2N0ZXQgZW5jb2RlcyBlYWNoIHByaW9yaXR5IGxldmVsIGRlZmluZWQgaW4KCS0tICAgICAyMy4xMDcgYXMgdGhlIGJpbmFyeSB2YWx1ZSBvZiB0aGUgcHJpb3JpdHkgbGV2ZWwsIGRlY2xhcmF0aW9uIGluIDI5LjA2MCkKCS0tIE9jdGV0cyAyLTkgYXJlIGNvZGVkIGFjY29yZGluZyB0byAzR1BQIFRTIDI0LjAwOCBbMzVdIFF1YWxpdHkgb2YgU2VydmljZSBPY3RldHMgCgktLSA2LTEzLgoKRXh0Mi1Rb1MtU3Vic2NyaWJlZCA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi4zKSkKCS0tIE9jdGV0cyAxLTMgYXJlIGNvZGVkIGFjY29yZGluZyB0byAzR1BQIFRTIDI0LjAwOCBbMzVdIFF1YWxpdHkgb2YgU2VydmljZSBPY3RldHMgMTQtMTYuCgktLSBJZiBRdWFsaXR5IG9mIFNlcnZpY2UgaW5mb3JtYXRpb24gaXMgc3RydWN0dXJlZCB3aXRoIDE0IG9jdGV0IGxlbmd0aCwgdGhlbgoJLS0gT2N0ZXQgMSBpcyBjb2RlZCBhY2NvcmRpbmcgdG8gM0dQUCBUUyAyNC4wMDggWzM1XSBRdWFsaXR5IG9mIFNlcnZpY2UgT2N0ZXQgMTQuCgpFeHQzLVFvUy1TdWJzY3JpYmVkIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjIpKQoJLS0gT2N0ZXRzIDEtMiBhcmUgY29kZWQgYWNjb3JkaW5nIHRvIDNHUFAgVFMgMjQuMDA4IFszNV0gUXVhbGl0eSBvZiBTZXJ2aWNlIE9jdGV0cyAxNy0xOC4KCkNoYXJnaW5nQ2hhcmFjdGVyaXN0aWNzIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIpKQoJLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gM0dQUCBUUyAzMi4yMTUuCgpMU0FPbmx5QWNjZXNzSW5kaWNhdG9yIDo6PSBFTlVNRVJBVEVEIHsKCWFjY2Vzc091dHNpZGVMU0FzQWxsb3dlZCAgKDApLAoJYWNjZXNzT3V0c2lkZUxTQXNSZXN0cmljdGVkICgxKX0KCkxTQURhdGFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkxTQXMpIE9GCgkJCQlMU0FEYXRhCgptYXhOdW1PZkxTQXMgIElOVEVHRVIgOjo9IDIwCgpMU0FEYXRhIDo6PSBTRVFVRU5DRSB7Cglsc2FJZGVudGl0eQlbMF0gTFNBSWRlbnRpdHksCglsc2FBdHRyaWJ1dGVzCVsxXSBMU0FBdHRyaWJ1dGVzLAoJbHNhQWN0aXZlTW9kZUluZGljYXRvcglbMl0gTlVMTAkJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KCkxTQUluZm9ybWF0aW9uIDo6PSBTRVFVRU5DRSB7Cgljb21wbGV0ZURhdGFMaXN0SW5jbHVkZWQJTlVMTAkJCU9QVElPTkFMLAoKCQktLSBJZiBzZWdtZW50YXRpb24gaXMgdXNlZCwgY29tcGxldGVEYXRhTGlzdEluY2x1ZGVkIG1heSBvbmx5IGJlIHByZXNlbnQgaW4gdGhlCgkJLS0gZmlyc3Qgc2VnbWVudC4KCWxzYU9ubHlBY2Nlc3NJbmRpY2F0b3IJWzFdCUxTQU9ubHlBY2Nlc3NJbmRpY2F0b3IJT1BUSU9OQUwsCglsc2FEYXRhTGlzdAlbMl0JTFNBRGF0YUxpc3QJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KCkxTQUlkZW50aXR5IDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDMpKQoJLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gVFMgM0dQUCBUUyAyMy4wMDMgWzE3XQoKTFNBQXR0cmlidXRlcyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRvIFRTIDNHUFAgVFMgNDguMDA4IFs0OV0KClN1YnNjcmliZXJEYXRhIDo6PSBTRVFVRU5DRSB7Cgltc2lzZG4JCVsxXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCgljYXRlZ29yeQkJWzJdIENhdGVnb3J5CU9QVElPTkFMLAoJc3Vic2NyaWJlclN0YXR1cwlbM10gU3Vic2NyaWJlclN0YXR1cwlPUFRJT05BTCwKCWJlYXJlclNlcnZpY2VMaXN0CVs0XSBCZWFyZXJTZXJ2aWNlTGlzdAlPUFRJT05BTCwKCS0tIFRoZSBleGNlcHRpb24gaGFuZGxpbmcgZm9yIHJlY2VwdGlvbiBvZiB1bnN1cHBvcnRlZCAvIG5vdCBhbGxvY2F0ZWQKCS0tIGJlYXJlclNlcnZpY2VDb2RlcyBpcyBkZWZpbmVkIGluIHNlY3Rpb24gOC44LjEKCXRlbGVzZXJ2aWNlTGlzdAlbNl0gVGVsZXNlcnZpY2VMaXN0CU9QVElPTkFMLAoJLS0gVGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBmb3IgcmVjZXB0aW9uIG9mIHVuc3VwcG9ydGVkIC8gbm90IGFsbG9jYXRlZAoJLS0gdGVsZXNlcnZpY2VDb2RlcyBpcyBkZWZpbmVkIGluIHNlY3Rpb24gOC44LjEKCXByb3Zpc2lvbmVkU1MJWzddIEV4dC1TUy1JbmZvTGlzdAlPUFRJT05BTCwKCW9kYi1EYXRhCQlbOF0gT0RCLURhdGEJT1BUSU9OQUwsCglyb2FtaW5nUmVzdHJpY3Rpb25EdWVUb1Vuc3VwcG9ydGVkRmVhdHVyZSAgWzldIE5VTEwJT1BUSU9OQUwsCglyZWdpb25hbFN1YnNjcmlwdGlvbkRhdGEJWzEwXSBab25lQ29kZUxpc3QJT1BUSU9OQUwsCgl2YnNTdWJzY3JpcHRpb25EYXRhCVsxMV0gVkJTRGF0YUxpc3QJT1BUSU9OQUwsCgl2Z2NzU3Vic2NyaXB0aW9uRGF0YQlbMTJdIFZHQ1NEYXRhTGlzdAlPUFRJT05BTCwKCXZsckNhbWVsU3Vic2NyaXB0aW9uSW5mbwlbMTNdIFZsckNhbWVsU3Vic2NyaXB0aW9uSW5mbwlPUFRJT05BTAoJfQoKQ2F0ZWdvcnkgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCgktLSBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gSVRVLVQgUmVjIFEuNzYzLgoKU3Vic2NyaWJlclN0YXR1cyA6Oj0gRU5VTUVSQVRFRCB7CglzZXJ2aWNlR3JhbnRlZCAgKDApLAoJb3BlcmF0b3JEZXRlcm1pbmVkQmFycmluZyAgKDEpfQoKQmVhcmVyU2VydmljZUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mQmVhcmVyU2VydmljZXMpIE9GCgkJCQlFeHQtQmVhcmVyU2VydmljZUNvZGUKCm1heE51bU9mQmVhcmVyU2VydmljZXMgIElOVEVHRVIgOjo9IDUwCgpUZWxlc2VydmljZUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mVGVsZXNlcnZpY2VzKSBPRgoJCQkJRXh0LVRlbGVzZXJ2aWNlQ29kZQoKbWF4TnVtT2ZUZWxlc2VydmljZXMgIElOVEVHRVIgOjo9IDIwCgpPREItRGF0YSA6Oj0gU0VRVUVOQ0UgewoJb2RiLUdlbmVyYWxEYXRhCU9EQi1HZW5lcmFsRGF0YSwKCW9kYi1IUExNTi1EYXRhCU9EQi1IUExNTi1EYXRhCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KCk9EQi1HZW5lcmFsRGF0YSA6Oj0gQklUIFNUUklORyB7CglhbGxPRy1DYWxsc0JhcnJlZCAgKDApLAoJaW50ZXJuYXRpb25hbE9HQ2FsbHNCYXJyZWQgICgxKSwKCWludGVybmF0aW9uYWxPR0NhbGxzTm90VG9IUExNTi1Db3VudHJ5QmFycmVkICAoMiksCglpbnRlcnpvbmFsT0dDYWxsc0JhcnJlZCAoNiksCglpbnRlcnpvbmFsT0dDYWxsc05vdFRvSFBMTU4tQ291bnRyeUJhcnJlZCAoNyksCglpbnRlcnpvbmFsT0dDYWxsc0FuZEludGVybmF0aW9uYWxPR0NhbGxzTm90VG9IUExNTi1Db3VudHJ5QmFycmVkICg4KSwKCXByZW1pdW1SYXRlSW5mb3JtYXRpb25PR0NhbGxzQmFycmVkICAoMyksCglwcmVtaXVtUmF0ZUVudGVydGFpbmVtZW50T0dDYWxsc0JhcnJlZCAgKDQpLAoJc3MtQWNjZXNzQmFycmVkICAoNSksCglhbGxFQ1QtQmFycmVkICg5KSwKCWNoYXJnZWFibGVFQ1QtQmFycmVkICgxMCksCglpbnRlcm5hdGlvbmFsRUNULUJhcnJlZCAoMTEpLAoJaW50ZXJ6b25hbEVDVC1CYXJyZWQgKDEyKSwKCWRvdWJseUNoYXJnZWFibGVFQ1QtQmFycmVkICgxMyksCgltdWx0aXBsZUVDVC1CYXJyZWQgKDE0KSwKCWFsbFBhY2tldE9yaWVudGVkU2VydmljZXNCYXJyZWQgKDE1KSwKCXJvYW1lckFjY2Vzc1RvSFBMTU4tQVAtQmFycmVkICAoMTYpLAoJcm9hbWVyQWNjZXNzVG9WUExNTi1BUC1CYXJyZWQgICgxNyksCglyb2FtaW5nT3V0c2lkZVBMTU5PRy1DYWxsc0JhcnJlZCAgKDE4KSwKCWFsbElDLUNhbGxzQmFycmVkICAoMTkpLAoJcm9hbWluZ091dHNpZGVQTE1OSUMtQ2FsbHNCYXJyZWQgICgyMCksCglyb2FtaW5nT3V0c2lkZVBMTU5JQ291bnRyeUlDLUNhbGxzQmFycmVkICAoMjEpLAoJcm9hbWluZ091dHNpZGVQTE1OLUJhcnJlZCAgKDIyKSwKCXJvYW1pbmdPdXRzaWRlUExNTi1Db3VudHJ5QmFycmVkICAoMjMpLAoJcmVnaXN0cmF0aW9uQWxsQ0YtQmFycmVkICAoMjQpLAoJcmVnaXN0cmF0aW9uQ0ZOb3RUb0hQTE1OLUJhcnJlZCAgKDI1KSwKCXJlZ2lzdHJhdGlvbkludGVyem9uYWxDRi1CYXJyZWQgICgyNiksCglyZWdpc3RyYXRpb25JbnRlcnpvbmFsQ0ZOb3RUb0hQTE1OLUJhcnJlZCAgKDI3KSwKCXJlZ2lzdHJhdGlvbkludGVybmF0aW9uYWxDRi1CYXJyZWQgICgyOCl9IChTSVpFICgxNS4uMzIpKQoJLS0gZXhjZXB0aW9uIGhhbmRsaW5nOiByZWNlcHRpb24gb2YgdW5rbm93biBiaXQgYXNzaWdubWVudHMgaW4gdGhlCgktLSBPREItR2VuZXJhbERhdGEgdHlwZSBzaGFsbCBiZSB0cmVhdGVkIGxpa2UgdW5zdXBwb3J0ZWQgT0RCLUdlbmVyYWxEYXRhCgktLSBXaGVuIHRoZSBPREItR2VuZXJhbERhdGEgdHlwZSBpcyByZW1vdmVkIGZyb20gdGhlIEhMUiBmb3IgYSBnaXZlbiBzdWJzY3JpYmVyLCAKCS0tIGluIE5vdGVTdWJzY3JpYmVyRGF0YU1vZGlmaWVkIG9wZXJhdGlvbiBzZW50IHRvd2FyZCB0aGUgZ3NtU0NGIAoJLS0gYWxsIGJpdHMgc2hhbGwgYmUgc2V0IHRvICJPIi4KCk9EQi1IUExNTi1EYXRhIDo6PSBCSVQgU1RSSU5HIHsKCXBsbW4tU3BlY2lmaWNCYXJyaW5nVHlwZTEgICgwKSwKCXBsbW4tU3BlY2lmaWNCYXJyaW5nVHlwZTIgICgxKSwKCXBsbW4tU3BlY2lmaWNCYXJyaW5nVHlwZTMgICgyKSwKCXBsbW4tU3BlY2lmaWNCYXJyaW5nVHlwZTQgICgzKX0gKFNJWkUgKDQuLjMyKSkKCS0tIGV4Y2VwdGlvbiBoYW5kbGluZzogcmVjZXB0aW9uIG9mIHVua25vd24gYml0IGFzc2lnbm1lbnRzIGluIHRoZQoJLS0gT0RCLUhQTE1OLURhdGEgdHlwZSBzaGFsbCBiZSB0cmVhdGVkIGxpa2UgdW5zdXBwb3J0ZWQgT0RCLUhQTE1OLURhdGEgCgktLSBXaGVuIHRoZSBPREItSFBMTU4tRGF0YSB0eXBlIGlzIHJlbW92ZWQgZnJvbSB0aGUgSExSIGZvciBhIGdpdmVuIHN1YnNjcmliZXIsIAoJLS0gaW4gTm90ZVN1YnNjcmliZXJEYXRhTW9kaWZpZWQgb3BlcmF0aW9uIHNlbnQgdG93YXJkIHRoZSBnc21TQ0YKCS0tIGFsbCBiaXRzIHNoYWxsIGJlIHNldCB0byAiTyIuCgpFeHQtU1MtSW5mb0xpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mU1MpIE9GCgkJCQlFeHQtU1MtSW5mbwoKRXh0LVNTLUluZm8gOjo9IENIT0lDRSB7Cglmb3J3YXJkaW5nSW5mbwlbMF0gRXh0LUZvcndJbmZvLAoJY2FsbEJhcnJpbmdJbmZvCVsxXSBFeHQtQ2FsbEJhckluZm8sCgljdWctSW5mbwkJWzJdIENVRy1JbmZvLAoJc3MtRGF0YQkJWzNdIEV4dC1TUy1EYXRhLAoJZW1scHAtSW5mbwlbNF0gRU1MUFAtSW5mb30KCkV4dC1Gb3J3SW5mbyA6Oj0gU0VRVUVOQ0UgewoJc3MtQ29kZQkJU1MtQ29kZSwKCWZvcndhcmRpbmdGZWF0dXJlTGlzdAlFeHQtRm9yd0ZlYXR1cmVMaXN0LAoJZXh0ZW5zaW9uQ29udGFpbmVyCVswXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpFeHQtRm9yd0ZlYXR1cmVMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkV4dC1CYXNpY1NlcnZpY2VHcm91cHMpIE9GCgkJCQlFeHQtRm9yd0ZlYXR1cmUKCkV4dC1Gb3J3RmVhdHVyZSA6Oj0gU0VRVUVOQ0UgewoJYmFzaWNTZXJ2aWNlCUV4dC1CYXNpY1NlcnZpY2VDb2RlCU9QVElPTkFMLAoJc3MtU3RhdHVzCQlbNF0gRXh0LVNTLVN0YXR1cywKCWZvcndhcmRlZFRvTnVtYmVyCVs1XSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCgktLSBXaGVuIHRoaXMgZGF0YSB0eXBlIGlzIHNlbnQgZnJvbSBhbiBITFIgd2hpY2ggc3VwcG9ydHMgQ0FNRUwgUGhhc2UgMgoJLS0gdG8gYSBWTFIgdGhhdCBzdXBwb3J0cyBDQU1FTCBQaGFzZSAyIHRoZSBWTFIgc2hhbGwgbm90IGNoZWNrIHRoZQoJLS0gZm9ybWF0IG9mIHRoZSBudW1iZXIKCWZvcndhcmRlZFRvU3ViYWRkcmVzcwlbOF0gSVNETi1TdWJhZGRyZXNzU3RyaW5nCU9QVElPTkFMLAoJZm9yd2FyZGluZ09wdGlvbnMJWzZdIEV4dC1Gb3J3T3B0aW9ucwlPUFRJT05BTCwKCW5vUmVwbHlDb25kaXRpb25UaW1lCVs3XSBFeHQtTm9SZXBDb25kVGltZQlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbOV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uLAoJbG9uZ0ZvcndhcmRlZFRvTnVtYmVyCVsxMF0gRlROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwgfQoKRXh0LUZvcndPcHRpb25zIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjUpKQoKCS0tIE9DVEVUIDE6CgoJLS0gIGJpdCA4OiBub3RpZmljYXRpb24gdG8gZm9yd2FyZGluZyBwYXJ0eQoJLS0JMCAgbm8gbm90aWZpY2F0aW9uCgktLQkxICBub3RpZmljYXRpb24KCgktLSAgYml0IDc6IHJlZGlyZWN0aW5nIHByZXNlbnRhdGlvbgoJLS0JMCBubyBwcmVzZW50YXRpb24gIAoJLS0JMSAgcHJlc2VudGF0aW9uCgoJLS0gIGJpdCA2OiBub3RpZmljYXRpb24gdG8gY2FsbGluZyBwYXJ0eQoJLS0JMCAgbm8gbm90aWZpY2F0aW9uCgktLQkxICBub3RpZmljYXRpb24KCgktLSAgYml0IDU6IDAgKHVudXNlZCkKCgktLSAgYml0cyA0MzogZm9yd2FyZGluZyByZWFzb24KCS0tCTAwICBtcyBub3QgcmVhY2hhYmxlCgktLQkwMSAgbXMgYnVzeQoJLS0JMTAgIG5vIHJlcGx5CgktLQkxMSAgdW5jb25kaXRpb25hbAoKCS0tIGJpdHMgMjE6IDAwICh1bnVzZWQpCgoJLS0gT0NURVRTIDItNTogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFRoZXkgc2hhbGwgYmUgZGlzY2FyZGVkIGlmCgktLSByZWNlaXZlZCBhbmQgbm90IHVuZGVyc3Rvb2QuCgpFeHQtTm9SZXBDb25kVGltZSA6Oj0gSU5URUdFUiAoMS4uMTAwKQoJLS0gT25seSB2YWx1ZXMgNS0zMCBhcmUgdXNlZC4KCS0tIFZhbHVlcyBpbiB0aGUgcmFuZ2VzIDEtNCBhbmQgMzEtMTAwIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQoJLS0gSWYgcmVjZWl2ZWQ6CgktLQkJdmFsdWVzIDEtNCBzaGFsbCBiZSBtYXBwZWQgb24gdG8gdmFsdWUgNQoJLS0JCXZhbHVlcyAzMS0xMDAgc2hhbGwgYmUgbWFwcGVkIG9uIHRvIHZhbHVlIDMwCgpFeHQtQ2FsbEJhckluZm8gOjo9IFNFUVVFTkNFIHsKCXNzLUNvZGUJCVNTLUNvZGUsCgljYWxsQmFycmluZ0ZlYXR1cmVMaXN0CUV4dC1DYWxsQmFyRmVhdHVyZUxpc3QsCglleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4ufQoKRXh0LUNhbGxCYXJGZWF0dXJlTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZFeHQtQmFzaWNTZXJ2aWNlR3JvdXBzKSBPRgoJCQkJRXh0LUNhbGxCYXJyaW5nRmVhdHVyZQoKRXh0LUNhbGxCYXJyaW5nRmVhdHVyZSA6Oj0gU0VRVUVOQ0UgewoJYmFzaWNTZXJ2aWNlCUV4dC1CYXNpY1NlcnZpY2VDb2RlCU9QVElPTkFMLAoJc3MtU3RhdHVzCQlbNF0gRXh0LVNTLVN0YXR1cywKCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpDVUctSW5mbyA6Oj0gU0VRVUVOQ0UgewoJY3VnLVN1YnNjcmlwdGlvbkxpc3QJQ1VHLVN1YnNjcmlwdGlvbkxpc3QsCgljdWctRmVhdHVyZUxpc3QJQ1VHLUZlYXR1cmVMaXN0CU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVswXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpDVUctU3Vic2NyaXB0aW9uTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMC4ubWF4TnVtT2ZDVUcpIE9GCgkJCQlDVUctU3Vic2NyaXB0aW9uCgpDVUctU3Vic2NyaXB0aW9uIDo6PSBTRVFVRU5DRSB7CgljdWctSW5kZXgJQ1VHLUluZGV4LAoJY3VnLUludGVybG9jawlDVUctSW50ZXJsb2NrLAoJaW50cmFDVUctT3B0aW9ucwlJbnRyYUNVRy1PcHRpb25zLAoJYmFzaWNTZXJ2aWNlR3JvdXBMaXN0CUV4dC1CYXNpY1NlcnZpY2VHcm91cExpc3QJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzBdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KCkNVRy1JbmRleCA6Oj0gSU5URUdFUiAoMC4uMzI3NjcpCgktLSBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gRVRTIDMwMCAxMzguCgpDVUctSW50ZXJsb2NrIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDQpKQoKSW50cmFDVUctT3B0aW9ucyA6Oj0gRU5VTUVSQVRFRCB7Cglub0NVRy1SZXN0cmljdGlvbnMgICgwKSwKCWN1Z0lDLUNhbGxCYXJyZWQgICgxKSwKCWN1Z09HLUNhbGxCYXJyZWQgICgyKX0KCm1heE51bU9mQ1VHICBJTlRFR0VSIDo6PSAxMAoKQ1VHLUZlYXR1cmVMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkV4dC1CYXNpY1NlcnZpY2VHcm91cHMpIE9GCgkJCQlDVUctRmVhdHVyZQoKRXh0LUJhc2ljU2VydmljZUdyb3VwTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZFeHQtQmFzaWNTZXJ2aWNlR3JvdXBzKSBPRgoJCQkJRXh0LUJhc2ljU2VydmljZUNvZGUKCm1heE51bU9mRXh0LUJhc2ljU2VydmljZUdyb3VwcyAgSU5URUdFUiA6Oj0gMzIKCkNVRy1GZWF0dXJlIDo6PSBTRVFVRU5DRSB7CgliYXNpY1NlcnZpY2UJRXh0LUJhc2ljU2VydmljZUNvZGUJT1BUSU9OQUwsCglwcmVmZXJlbnRpYWxDVUctSW5kaWNhdG9yCUNVRy1JbmRleAlPUFRJT05BTCwKCWludGVyQ1VHLVJlc3RyaWN0aW9ucwlJbnRlckNVRy1SZXN0cmljdGlvbnMsCglleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4ufQoKSW50ZXJDVUctUmVzdHJpY3Rpb25zIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQoKCS0tIGJpdHMgODc2NTQzOiAwMDAwMDAgKHVudXNlZCkKCS0tIEV4Y2VwdGlvbiBoYW5kbGluZzoKCS0tIGJpdHMgODc2NTQzIHNoYWxsIGJlIGlnbm9yZWQgaWYgcmVjZWl2ZWQgYW5kIG5vdCB1bmRlcnN0b29kCgoJLS0gYml0cyAyMQoJLS0JMDAgIENVRyBvbmx5IGZhY2lsaXRpZXMKCS0tCTAxICBDVUcgd2l0aCBvdXRnb2luZyBhY2Nlc3MKCS0tCTEwICBDVUcgd2l0aCBpbmNvbWluZyBhY2Nlc3MKCS0tCTExICBDVUcgd2l0aCBib3RoIG91dGdvaW5nIGFuZCBpbmNvbWluZyBhY2Nlc3MKCkV4dC1TUy1EYXRhIDo6PSBTRVFVRU5DRSB7Cglzcy1Db2RlCQlTUy1Db2RlLAoJc3MtU3RhdHVzCVs0XSBFeHQtU1MtU3RhdHVzLAoJc3MtU3Vic2NyaXB0aW9uT3B0aW9uCVNTLVN1YnNjcmlwdGlvbk9wdGlvbglPUFRJT05BTCwKCWJhc2ljU2VydmljZUdyb3VwTGlzdAlFeHQtQmFzaWNTZXJ2aWNlR3JvdXBMaXN0CU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVs1XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpMQ1MtUHJpdmFjeUV4Y2VwdGlvbkxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mUHJpdmFjeUNsYXNzKSBPRgoJCQkJTENTLVByaXZhY3lDbGFzcwoKbWF4TnVtT2ZQcml2YWN5Q2xhc3MgIElOVEVHRVIgOjo9IDQKCkxDUy1Qcml2YWN5Q2xhc3MgOjo9IFNFUVVFTkNFIHsKCXNzLUNvZGUJCVNTLUNvZGUsCglzcy1TdGF0dXMJCUV4dC1TUy1TdGF0dXMsCglub3RpZmljYXRpb25Ub01TVXNlcglbMF0gTm90aWZpY2F0aW9uVG9NU1VzZXIJT1BUSU9OQUwsCgktLSBub3RpZmljYXRpb25Ub01TVXNlciBtYXkgYmUgc2VudCBvbmx5IGZvciBTUy1jb2RlcyBjYWxsU2Vzc2lvblJlbGF0ZWQKCS0tIGFuZCBjYWxsU2Vzc2lvblVucmVsYXRlZC4gSWYgbm90IHJlY2VpdmVkIGZvciBTUy1jb2RlcyBjYWxsU2Vzc2lvblJlbGF0ZWQKCS0tIGFuZCBjYWxsU2Vzc2lvblVucmVsYXRlZCwKCS0tIHRoZSBkZWZhdWx0IHZhbHVlcyBhY2NvcmRpbmcgdG8gM0dQUCBUUyAyMy4yNzEgc2hhbGwgYmUgYXNzdW1lZC4KCWV4dGVybmFsQ2xpZW50TGlzdAlbMV0gRXh0ZXJuYWxDbGllbnRMaXN0CU9QVElPTkFMLAoJLS0gZXh0ZXJuYWxDbGllbnRMaXN0IG1heSBiZSBzZW50IG9ubHkgZm9yIFNTLWNvZGUgY2FsbFNlc3Npb25VbnJlbGF0ZWQgdG8gYQoJLS0gdmlzaXRlZCBub2RlIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBMQ1MgUmVsZWFzZSA0IG9yIGxhdGVyIHZlcnNpb25zLgoJLS0gZXh0ZXJuYWxDbGllbnRMaXN0IG1heSBiZSBzZW50IG9ubHkgZm9yIFNTLWNvZGVzIGNhbGxTZXNzaW9uVW5yZWxhdGVkIGFuZAoJLS0gY2FsbFNlc3Npb25SZWxhdGVkIHRvIGEgdmlzaXRlZCBub2RlIHRoYXQgc3VwcG9ydHMgTENTIFJlbGVhc2UgNCBvciBsYXRlciB2ZXJzaW9ucy4KCXBsbW5DbGllbnRMaXN0CVsyXSBQTE1OQ2xpZW50TGlzdAlPUFRJT05BTCwKCS0tIHBsbW5DbGllbnRMaXN0IG1heSBiZSBzZW50IG9ubHkgZm9yIFNTLWNvZGUgcGxtbm9wZXJhdG9yLgoJZXh0ZW5zaW9uQ29udGFpbmVyCVszXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4sCglleHQtZXh0ZXJuYWxDbGllbnRMaXN0CVs0XSBFeHQtRXh0ZXJuYWxDbGllbnRMaXN0CU9QVElPTkFMLAoJLS0gRXh0LWV4dGVybmFsQ2xpZW50TGlzdCBtYXkgYmUgc2VudCBvbmx5IGlmIHRoZSB2aXNpdGVkIG5vZGUgc3VwcG9ydHMgTENTIFJlbGVhc2UgNCBvcgoJLS0gbGF0ZXIgdmVyc2lvbnMsIHRoZSB1c2VyIGRpZCBzcGVjaWZ5IG1vcmUgdGhhbiA1IGNsaWVudHMsIGFuZCBXaGl0ZSBCb29rIFNDQ1AgaXMgdXNlZC4KCXNlcnZpY2VUeXBlTGlzdAlbNV0JU2VydmljZVR5cGVMaXN0CU9QVElPTkFMCgktLSBzZXJ2aWNlVHlwZUxpc3QgbWF5IGJlIHNlbnQgb25seSBmb3IgU1MtY29kZSBzZXJ2aWNlVHlwZSBhbmQgaWYgdGhlIHZpc2l0ZWQgbm9kZQoJLS0gc3VwcG9ydHMgTENTIFJlbGVhc2UgNSBvciBsYXRlciB2ZXJzaW9ucy4KCS0tIAoJLS0gaWYgc2VnbWVudGF0aW9uIGlzIHVzZWQsIHRoZSBjb21wbGV0ZSBMQ1MtUHJpdmFjeUNsYXNzIHNoYWxsIGJlIHNlbnQgaW4gb25lIHNlZ21lbnQKfQoKRXh0ZXJuYWxDbGllbnRMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgwLi5tYXhOdW1PZkV4dGVybmFsQ2xpZW50KSBPRgoJCQkJRXh0ZXJuYWxDbGllbnQKCm1heE51bU9mRXh0ZXJuYWxDbGllbnQgIElOVEVHRVIgOjo9IDUKClBMTU5DbGllbnRMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlBMTU5DbGllbnQpIE9GCgkJCQlMQ1NDbGllbnRJbnRlcm5hbElECgptYXhOdW1PZlBMTU5DbGllbnQgIElOVEVHRVIgOjo9IDUKCkV4dC1FeHRlcm5hbENsaWVudExpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mRXh0LUV4dGVybmFsQ2xpZW50KSBPRgoJCQkJRXh0ZXJuYWxDbGllbnQKCm1heE51bU9mRXh0LUV4dGVybmFsQ2xpZW50ICBJTlRFR0VSIDo6PSAzNQoKRXh0ZXJuYWxDbGllbnQgOjo9IFNFUVVFTkNFIHsKCWNsaWVudElkZW50aXR5CUxDU0NsaWVudEV4dGVybmFsSUQsCglnbWxjLVJlc3RyaWN0aW9uCVswXSBHTUxDLVJlc3RyaWN0aW9uCU9QVElPTkFMLAoJbm90aWZpY2F0aW9uVG9NU1VzZXIJWzFdIE5vdGlmaWNhdGlvblRvTVNVc2VyCU9QVElPTkFMLAoJLS0gSWYgbm90aWZpY2F0aW9uVG9NU1VzZXIgaXMgbm90IHJlY2VpdmVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBhY2NvcmRpbmcgdG8gCgktLSAzR1BQIFRTIDIzLjI3MSBzaGFsbCBiZSBhc3N1bWVkLgoJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4gfQoKR01MQy1SZXN0cmljdGlvbiA6Oj0gRU5VTUVSQVRFRCB7CglnbWxjLUxpc3QJCSgwKSwKCWhvbWUtQ291bnRyeQkoMSkgLAoJLi4uIH0KLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgotLSBBdCByZWNlcHRpb24gb2YgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIG9uZXMgbGlzdGVkIHRoZSByZWNlaXZlciBzaGFsbCBpZ25vcmUKLS0gR01MQy1SZXN0cmljdGlvbi4KCk5vdGlmaWNhdGlvblRvTVNVc2VyIDo6PSBFTlVNRVJBVEVEIHsKCW5vdGlmeUxvY2F0aW9uQWxsb3dlZAkoMCksCglub3RpZnlBbmRWZXJpZnktTG9jYXRpb25BbGxvd2VkSWZOb1Jlc3BvbnNlCSgxKSwKCW5vdGlmeUFuZFZlcmlmeS1Mb2NhdGlvbk5vdEFsbG93ZWRJZk5vUmVzcG9uc2UJKDIpLAoJLi4uLAoJbG9jYXRpb25Ob3RBbGxvd2VkICgzKSB9Ci0tIGV4Y2VwdGlvbiBoYW5kbGluZzoKLS0gQXQgcmVjZXB0aW9uIG9mIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSBvbmVzIGxpc3RlZCB0aGUgcmVjZWl2ZXIgc2hhbGwgaWdub3JlCi0tIE5vdGlmaWNhdGlvblRvTVNVc2VyLgoKU2VydmljZVR5cGVMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlNlcnZpY2VUeXBlKSBPRgoJCQkJU2VydmljZVR5cGUKCm1heE51bU9mU2VydmljZVR5cGUgIElOVEVHRVIgOjo9IDMyCgpTZXJ2aWNlVHlwZSA6Oj0gU0VRVUVOQ0UgewoJc2VydmljZVR5cGVJZGVudGl0eQlMQ1NTZXJ2aWNlVHlwZUlELAoJZ21sYy1SZXN0cmljdGlvbglbMF0gR01MQy1SZXN0cmljdGlvbglPUFRJT05BTCwKCW5vdGlmaWNhdGlvblRvTVNVc2VyCVsxXSBOb3RpZmljYXRpb25Ub01TVXNlcglPUFRJT05BTCwKCS0tIElmIG5vdGlmaWNhdGlvblRvTVNVc2VyIGlzIG5vdCByZWNlaXZlZCwgdGhlIGRlZmF1bHQgdmFsdWUgYWNjb3JkaW5nIHRvIAoJLS0gM0dQUCBUUyAyMy4yNzEgc2hhbGwgYmUgYXNzdW1lZC4KCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uIH0KCk1PTFItTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZNT0xSLUNsYXNzKSBPRgoJCQkJTU9MUi1DbGFzcwoKbWF4TnVtT2ZNT0xSLUNsYXNzICBJTlRFR0VSIDo6PSAzCgpNT0xSLUNsYXNzIDo6PSBTRVFVRU5DRSB7Cglzcy1Db2RlCQlTUy1Db2RlLAoJc3MtU3RhdHVzCQlFeHQtU1MtU3RhdHVzLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVswXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59Cgpab25lQ29kZUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mWm9uZUNvZGVzKQoJCQkJT0YgWm9uZUNvZGUKClpvbmVDb2RlIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIpKQoJLS0gaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gVFMgM0dQUCBUUyAyMy4wMDMgWzE3XQoKbWF4TnVtT2Zab25lQ29kZXMgIElOVEVHRVIgOjo9IDEwCgpJbnNlcnRTdWJzY3JpYmVyRGF0YVJlcyA6Oj0gU0VRVUVOQ0UgewoJdGVsZXNlcnZpY2VMaXN0CVsxXSBUZWxlc2VydmljZUxpc3QJT1BUSU9OQUwsCgliZWFyZXJTZXJ2aWNlTGlzdAlbMl0gQmVhcmVyU2VydmljZUxpc3QJT1BUSU9OQUwsCglzcy1MaXN0CQlbM10gU1MtTGlzdAlPUFRJT05BTCwKCW9kYi1HZW5lcmFsRGF0YQlbNF0gT0RCLUdlbmVyYWxEYXRhCU9QVElPTkFMLAoJcmVnaW9uYWxTdWJzY3JpcHRpb25SZXNwb25zZQlbNV0gUmVnaW9uYWxTdWJzY3JpcHRpb25SZXNwb25zZQlPUFRJT05BTCwKCXN1cHBvcnRlZENhbWVsUGhhc2VzCVs2XSBTdXBwb3J0ZWRDYW1lbFBoYXNlcwlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbN10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uICwKCW9mZmVyZWRDYW1lbDRDU0lzCVs4XSBPZmZlcmVkQ2FtZWw0Q1NJcwlPUFRJT05BTCwKCXN1cHBvcnRlZEZlYXR1cmVzCVs5XSBTdXBwb3J0ZWRGZWF0dXJlcwlPUFRJT05BTCB9CgpSZWdpb25hbFN1YnNjcmlwdGlvblJlc3BvbnNlIDo6PSBFTlVNRVJBVEVEIHsKCW5ldHdvcmtOb2RlLUFyZWFSZXN0cmljdGVkCSgwKSwKCXRvb01hbnlab25lQ29kZXMJKDEpLAoJem9uZUNvZGVzQ29uZmxpY3QJKDIpLAoJcmVnaW9uYWxTdWJzY05vdFN1cHBvcnRlZAkoMyl9CgpEZWxldGVTdWJzY3JpYmVyRGF0YUFyZyA6Oj0gU0VRVUVOQ0UgewoJaW1zaQkJCVswXSBJTVNJLAoJYmFzaWNTZXJ2aWNlTGlzdAlbMV0gQmFzaWNTZXJ2aWNlTGlzdAlPUFRJT05BTCwKCS0tIFRoZSBleGNlcHRpb24gaGFuZGxpbmcgZm9yIHJlY2VwdGlvbiBvZiB1bnN1cHBvcnRlZC9ub3QgYWxsb2NhdGVkCgktLSBiYXNpY1NlcnZpY2VDb2RlcyBpcyBkZWZpbmVkIGluIHNlY3Rpb24gNi44LjIKCXNzLUxpc3QJCVsyXSBTUy1MaXN0CU9QVElPTkFMLAoJcm9hbWluZ1Jlc3RyaWN0aW9uRHVlVG9VbnN1cHBvcnRlZEZlYXR1cmUgWzRdIE5VTEwJT1BUSU9OQUwsCglyZWdpb25hbFN1YnNjcmlwdGlvbklkZW50aWZpZXIJWzVdIFpvbmVDb2RlCU9QVElPTkFMLAoJdmJzR3JvdXBJbmRpY2F0aW9uCVs3XSBOVUxMCQlPUFRJT05BTCwKCXZnY3NHcm91cEluZGljYXRpb24JWzhdIE5VTEwJIAlPUFRJT05BTCwKCWNhbWVsU3Vic2NyaXB0aW9uSW5mb1dpdGhkcmF3CVs5XSBOVUxMCSAJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzZdIEV4dGVuc2lvbkNvbnRhaW5lciAJT1BUSU9OQUwsCgkuLi4sCglncHJzU3Vic2NyaXB0aW9uRGF0YVdpdGhkcmF3CVsxMF0gR1BSU1N1YnNjcmlwdGlvbkRhdGFXaXRoZHJhdwlPUFRJT05BTCwKCXJvYW1pbmdSZXN0cmljdGVkSW5TZ3NuRHVlVG9VbnN1cHBwb3J0ZWRGZWF0dXJlIFsxMV0gTlVMTAlPUFRJT05BTCwKCWxzYUluZm9ybWF0aW9uV2l0aGRyYXcJWzEyXSBMU0FJbmZvcm1hdGlvbldpdGhkcmF3CU9QVElPTkFMLAoJZ21sYy1MaXN0V2l0aGRyYXcgCVsxM10JTlVMTAkJT1BUSU9OQUwsCglpc3RJbmZvcm1hdGlvbldpdGhkcmF3CVsxNF0gTlVMTAkJT1BUSU9OQUwsCglzcGVjaWZpY0NTSS1XaXRoZHJhdwlbMTVdIFNwZWNpZmljQ1NJLVdpdGhkcmF3CU9QVElPTkFMLAoJY2hhcmdpbmdDaGFyYWN0ZXJpc3RpY3NXaXRoZHJhdwlbMTZdIE5VTEwJCU9QVElPTkFMLAoJc3RuLXNyV2l0aGRyYXcJWzE3XSBOVUxMCQlPUFRJT05BTCwKCWVwc1N1YnNjcmlwdGlvbkRhdGFXaXRoZHJhdwlbMThdIEVQUy1TdWJzY3JpcHRpb25EYXRhV2l0aGRyYXcJT1BUSU9OQUwsCglhcG4tb2ktcmVwbGFjZW1lbnRXaXRoZHJhdwlbMTldIE5VTEwJCU9QVElPTkFMLAoJY3NnLVN1YnNjcmlwdGlvbkRlbGV0ZWQJWzIwXQlOVUxMCQlPUFRJT05BTCB9CgpTcGVjaWZpY0NTSS1XaXRoZHJhdyA6Oj0gQklUIFNUUklORyB7CglvLWNzaSAoMCksCglzcy1jc2kgKDEpLAoJdGlmLWNzaSAoMiksCglkLWNzaSAoMyksCgl2dC1jc2kgKDQpLAoJbW8tc21zLWNzaSAoNSksCgltLWNzaSAoNiksCglncHJzLWNzaSAoNyksCgl0LWNzaSAoOCksCgltdC1zbXMtY3NpICg5KSwKCW1nLWNzaSAoMTApLAoJby1JTS1DU0kgKDExKSwgCglkLUlNLUNTSSAoMTIpLAoJdnQtSU0tQ1NJICgxMykgfSAoU0laRSg4Li4zMikpIAotLSBleGNlcHRpb24gaGFuZGxpbmc6Ci0tIGJpdHMgMTEgdG8gMzEgc2hhbGwgYmUgaWdub3JlZCBpZiByZWNlaXZlZCBieSBhIG5vbi1JUCBNdWx0aW1lZGlhIENvcmUgTmV0d29yayBlbnRpdHkuCi0tIGJpdHMgMC0xMCBhbmQgMTQtMzEgc2hhbGwgYmUgaWdub3JlZCBpZiByZWNlaXZlZCBieSBhbiBJUCBNdWx0aW1lZGlhIENvcmUgTmV0d29yayBlbnRpdHkuCi0tIGJpdHMgMTEtMTMgYXJlIG9ubHkgYXBwbGljYWJsZSBpbiBhbiBJUCBNdWx0aW1lZGlhIENvcmUgTmV0d29yay4KLS0gQml0IDggYW5kIGJpdHMgMTEtMTMgYXJlIG9ubHkgYXBwbGljYWJsZSBmb3IgdGhlIE5vdGVTdWJzY3JpYmVyRGF0YU1vZGlmaWVkIG9wZXJhdGlvbi4KCkdQUlNTdWJzY3JpcHRpb25EYXRhV2l0aGRyYXcgOjo9IENIT0lDRSB7CglhbGxHUFJTRGF0YQlOVUxMLAoJY29udGV4dElkTGlzdAlDb250ZXh0SWRMaXN0fQoKRVBTLVN1YnNjcmlwdGlvbkRhdGFXaXRoZHJhdyA6Oj0gQ0hPSUNFIHsKCWFsbEVQUy1EYXRhCU5VTEwsCgljb250ZXh0SWRMaXN0CUNvbnRleHRJZExpc3R9CgpDb250ZXh0SWRMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlBEUC1Db250ZXh0cykgT0YKCQkJCUNvbnRleHRJZAoKTFNBSW5mb3JtYXRpb25XaXRoZHJhdyA6Oj0gQ0hPSUNFIHsKCWFsbExTQURhdGEJTlVMTCwKCWxzYUlkZW50aXR5TGlzdAlMU0FJZGVudGl0eUxpc3QgfQoKTFNBSWRlbnRpdHlMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkxTQXMpIE9GCgkJCQlMU0FJZGVudGl0eQoKQmFzaWNTZXJ2aWNlTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZCYXNpY1NlcnZpY2VzKSBPRgoJCQkJRXh0LUJhc2ljU2VydmljZUNvZGUKCm1heE51bU9mQmFzaWNTZXJ2aWNlcyAgSU5URUdFUiA6Oj0gNzAKCkRlbGV0ZVN1YnNjcmliZXJEYXRhUmVzIDo6PSBTRVFVRU5DRSB7CglyZWdpb25hbFN1YnNjcmlwdGlvblJlc3BvbnNlCVswXSBSZWdpb25hbFN1YnNjcmlwdGlvblJlc3BvbnNlCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KClZsckNhbWVsU3Vic2NyaXB0aW9uSW5mbyA6Oj0gU0VRVUVOQ0UgewoJby1DU0kJCVswXSBPLUNTSQkJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzFdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiwKCXNzLUNTSQkJWzJdIFNTLUNTSQlPUFRJT05BTCwKCW8tQmNzbUNhbWVsVERQLUNyaXRlcmlhTGlzdAlbNF0gTy1CY3NtQ2FtZWxURFBDcml0ZXJpYUxpc3QJT1BUSU9OQUwsCgl0aWYtQ1NJCQlbM10gTlVMTAlPUFRJT05BTCwKCW0tQ1NJCQlbNV0gTS1DU0kJT1BUSU9OQUwsCgltby1zbXMtQ1NJCVs2XSBTTVMtQ1NJCU9QVElPTkFMLAoJdnQtQ1NJCQlbN10gVC1DU0kJT1BUSU9OQUwsCgl0LUJDU00tQ0FNRUwtVERQLUNyaXRlcmlhTGlzdAlbOF0gVC1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYUxpc3QJT1BUSU9OQUwsCglkLUNTSQkJWzldIEQtQ1NJCU9QVElPTkFMLAoJbXQtc21zLUNTSQlbMTBdIFNNUy1DU0kJT1BUSU9OQUwsCgltdC1zbXNDQU1FTFREUC1Dcml0ZXJpYUxpc3QJWzExXQlNVC1zbXNDQU1FTFREUC1Dcml0ZXJpYUxpc3QJT1BUSU9OQUwKCX0KCk1ULXNtc0NBTUVMVERQLUNyaXRlcmlhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uIG1heE51bU9mQ2FtZWxURFBEYXRhKSBPRgoJTVQtc21zQ0FNRUxURFAtQ3JpdGVyaWEKCk1ULXNtc0NBTUVMVERQLUNyaXRlcmlhIDo6PSBTRVFVRU5DRSB7CglzbXMtVHJpZ2dlckRldGVjdGlvblBvaW50CVNNUy1UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQsCgl0cGR1LVR5cGVDcml0ZXJpb24JWzBdCVRQRFUtVHlwZUNyaXRlcmlvbgkJT1BUSU9OQUwsCgkuLi4gfQoKVFBEVS1UeXBlQ3JpdGVyaW9uIDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlRQRFVUeXBlcykgT0YKCU1ULVNNUy1UUERVLVR5cGUKCgptYXhOdW1PZlRQRFVUeXBlcyBJTlRFR0VSIDo6PSA1CgpNVC1TTVMtVFBEVS1UeXBlIDo6PSBFTlVNRVJBVEVEIHsKCXNtcy1ERUxJVkVSIAkoMCksCglzbXMtU1VCTUlULVJFUE9SVCAJKDEpLAoJc21zLVNUQVRVUy1SRVBPUlQgCSgyKSwKCS4uLiB9CgotLQlleGNlcHRpb24gaGFuZGxpbmc6Ci0tCUZvciBUUERVLVR5cGVDcml0ZXJpb24gc2VxdWVuY2VzIGNvbnRhaW5pbmcgdGhpcyBwYXJhbWV0ZXIgd2l0aCBhbnkKLS0Jb3RoZXIgdmFsdWUgdGhhbiB0aGUgb25lcyBsaXN0ZWQgYWJvdmUgdGhlIHJlY2VpdmVyIHNoYWxsIGlnbm9yZSAKLS0JdGhlIHdob2xlIFRQRFUtVHlwZUNyaXRlcmlvbiBzZXF1ZW5jZS4KLS0JSW4gQ0FNRUwgcGhhc2UgNCwgc21zLVNVQk1JVC1SRVBPUlQgc2hhbGwgbm90IGJlIHVzZWQgYW5kIGEgcmVjZWl2ZWQgVFBEVS1UeXBlQ3JpdGVyaW9uCi0tCXNlcXVlbmNlIGNvbnRhaW5pbmcgc21zLVNVQk1JVC1SRVBPUlQgc2hhbGwgYmUgd2hvbGx5IGlnbm9yZWQuCgpELUNTSSA6Oj0gU0VRVUVOQ0UgewoJZHAtQW5hbHlzZWRJbmZvQ3JpdGVyaWFMaXN0CVswXSBEUC1BbmFseXNlZEluZm9Dcml0ZXJpYUxpc3QJT1BUSU9OQUwsCgljYW1lbENhcGFiaWxpdHlIYW5kbGluZwlbMV0gQ2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCW5vdGlmaWNhdGlvblRvQ1NFCVszXQlOVUxMCQlPUFRJT05BTCwKCWNzaS1BY3RpdmUJWzRdCU5VTEwJCU9QVElPTkFMLAoJLi4ufSAKLS0Jbm90aWZpY2F0aW9uVG9DU0UgYW5kIGNzaS1BY3RpdmUgc2hhbGwgbm90IGJlIHByZXNlbnQgd2hlbiBELUNTSSBpcyBzZW50IHRvIFZMUi9HTVNDLgotLQlUaGV5IG1heSBvbmx5IGJlIGluY2x1ZGVkIGluIEFUU0kvQVRNIGFjay9OU0RDIG1lc3NhZ2UuCi0tCURQLUFuYWx5c2VkSW5mb0NyaXRlcmlhIGFuZCAgY2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcgc2hhbGwgYmUgcHJlc2VudCBpbiAKLS0JdGhlIEQtQ1NJIHNlcXVlbmNlLgotLQlJZiBELUNTSSBpcyBzZWdtZW50ZWQsIHRoZW4gdGhlIGZpcnN0IHNlZ21lbnQgc2hhbGwgY29udGFpbiBkcC1BbmFseXNlZEluZm9Dcml0ZXJpYUxpc3QKLS0JYW5kIGNhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nLiBTdWJzZXF1ZW50IHNlZ21lbnRzIHNoYWxsIG5vdCBjb250YWluCi0tCWNhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nLCBidXQgbWF5IGNvbnRhaW4gZHAtQW5hbHlzZWRJbmZvQ3JpdGVyaWFMaXN0LgoKRFAtQW5hbHlzZWRJbmZvQ3JpdGVyaWFMaXN0ICA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZEUC1BbmFseXNlZEluZm9Dcml0ZXJpYSkgT0YKCQkJCURQLUFuYWx5c2VkSW5mb0NyaXRlcml1bQoKbWF4TnVtT2ZEUC1BbmFseXNlZEluZm9Dcml0ZXJpYSBJTlRFR0VSIDo6PSAxMAoKRFAtQW5hbHlzZWRJbmZvQ3JpdGVyaXVtIDo6PSBTRVFVRU5DRSB7CglkaWFsbGVkTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZywKCXNlcnZpY2VLZXkJU2VydmljZUtleSwKCWdzbVNDRi1BZGRyZXNzCUlTRE4tQWRkcmVzc1N0cmluZywKCWRlZmF1bHRDYWxsSGFuZGxpbmcJRGVmYXVsdENhbGxIYW5kbGluZywKCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpTUy1DU0kgOjo9IFNFUVVFTkNFIHsKCXNzLUNhbWVsRGF0YQlTUy1DYW1lbERhdGEsCglleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uLAoJbm90aWZpY2F0aW9uVG9DU0UJWzBdCU5VTEwJCU9QVElPTkFMLAoJY3NpLUFjdGl2ZQlbMV0JTlVMTAkJT1BUSU9OQUwKLS0Jbm90aWZpY2F0aW9uVG9DU0UgYW5kIGNzaS1BY3RpdmUgc2hhbGwgbm90IGJlIHByZXNlbnQgd2hlbiBTUy1DU0kgaXMgc2VudCB0byBWTFIuCi0tCVRoZXkgbWF5IG9ubHkgYmUgaW5jbHVkZWQgaW4gQVRTSS9BVE0gYWNrL05TREMgbWVzc2FnZS4KfQoKU1MtQ2FtZWxEYXRhICA6Oj0gU0VRVUVOQ0UgewoJc3MtRXZlbnRMaXN0CVNTLUV2ZW50TGlzdCwKCWdzbVNDRi1BZGRyZXNzCUlTRE4tQWRkcmVzc1N0cmluZywKCWV4dGVuc2lvbkNvbnRhaW5lcglbMF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLCAKCS4uLn0KClNTLUV2ZW50TGlzdCAgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mQ2FtZWxTU0V2ZW50cykgT0YgU1MtQ29kZQoJLS0gQWN0aW9ucyBmb3IgdGhlIGZvbGxvd2luZyBTUy1Db2RlIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiBDQU1FTCBQaGFzZSAzOgoJLS0gZWN0CQlTUy1Db2RlIDo6PSAnMDAxMTAwMDEnQgoJLS0gbXVsdGlQVFkJU1MtQ29kZSA6Oj0gJzAxMDEwMDAxJ0IKCS0tIGNkCQlTUy1Db2RlIDo6PSAnMDAxMDAxMDAnQgoJLS0gY2NicwkJU1MtQ29kZSA6Oj0gJzAxMDAwMTAwJ0IKCS0tIGFsbCBvdGhlciBTUyBjb2RlcyBzaGFsbCBiZSBpZ25vcmVkCgktLSBXaGVuIFNTLUNTSSBpcyBzZW50IHRvIHRoZSBWTFIsIGl0IHNoYWxsIG5vdCBjb250YWluIGEgbWFya2luZyBmb3IgY2Nicy4KCS0tIElmIHRoZSBWTFIgcmVjZWl2ZXMgU1MtQ1NJIGNvbnRhaW5pbmcgYSBtYXJraW5nIGZvciBjY2JzLCB0aGUgVkxSIHNoYWxsIGRpc2NhcmQgdGhlCgktLSBjY2JzIG1hcmtpbmcgaW4gU1MtQ1NJLgoKbWF4TnVtT2ZDYW1lbFNTRXZlbnRzIElOVEVHRVIgOjo9IDEwCgpPLUNTSSA6Oj0gU0VRVUVOQ0UgewoJby1CY3NtQ2FtZWxURFBEYXRhTGlzdAlPLUJjc21DYW1lbFREUERhdGFMaXN0LAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiwKCWNhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nCVswXSBDYW1lbENhcGFiaWxpdHlIYW5kbGluZwlPUFRJT05BTCwKCW5vdGlmaWNhdGlvblRvQ1NFCVsxXQlOVUxMCQlPUFRJT05BTCwKCWNzaUFjdGl2ZQkJWzJdCU5VTEwJCU9QVElPTkFMfQotLQlub3RpZmljYXRpb250b0NTRSBhbmQgY3NpQWN0aXZlIHNoYWxsIG5vdCBiZSBwcmVzZW50IHdoZW4gTy1DU0kgaXMgc2VudCB0byBWTFIvR01TQy4KLS0JVGhleSBtYXkgb25seSBiZSBpbmNsdWRlZCBpbiBBVFNJL0FUTSBhY2svTlNEQyBtZXNzYWdlLgotLQlPLUNTSSBzaGFsbCBub3QgYmUgc2VnbWVudGVkLgoKTy1CY3NtQ2FtZWxURFBEYXRhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZDYW1lbFREUERhdGEpIE9GCglPLUJjc21DYW1lbFREUERhdGEKCS0tIE8tQmNzbUNhbWVsVERQRGF0YUxpc3Qgc2hhbGwgbm90IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBvZgoJLS0gTy1CY3NtQ2FtZWxURFBEYXRhIGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWUgZm9yIG8tQmNzbVRyaWdnZXJEZXRlY3Rpb25Qb2ludC4KCS0tIEZvciBDQU1FTCBQaGFzZSAyLCB0aGlzIG1lYW5zIHRoYXQgb25seSBvbmUgaW5zdGFuY2Ugb2YgTy1CY3NtQ2FtZWxURFBEYXRhIGlzIGFsbG93ZWQKCS0tIHdpdGggby1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50IGJlaW5nIGVxdWFsIHRvIERQMi4KCm1heE51bU9mQ2FtZWxURFBEYXRhICBJTlRFR0VSIDo6PSAxMAoKTy1CY3NtQ2FtZWxURFBEYXRhIDo6PSBTRVFVRU5DRSB7CglvLUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQJTy1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50LAoJc2VydmljZUtleQlTZXJ2aWNlS2V5LAoJZ3NtU0NGLUFkZHJlc3MJWzBdIElTRE4tQWRkcmVzc1N0cmluZywKCWRlZmF1bHRDYWxsSGFuZGxpbmcJWzFdIERlZmF1bHRDYWxsSGFuZGxpbmcsCglleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLgoJfQoKU2VydmljZUtleSA6Oj0gSU5URUdFUiAoMC4uMjE0NzQ4MzY0NykKCk8tQmNzbVRyaWdnZXJEZXRlY3Rpb25Qb2ludCA6Oj0gRU5VTUVSQVRFRCB7Cgljb2xsZWN0ZWRJbmZvICgyKSwKCS4uLiwKCXJvdXRlU2VsZWN0RmFpbHVyZSAoNCkgfQoJLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgoJLS0gRm9yIE8tQmNzbUNhbWVsVERQRGF0YSBzZXF1ZW5jZXMgY29udGFpbmluZyB0aGlzIHBhcmFtZXRlciB3aXRoIGFueQoJLS0gb3RoZXIgdmFsdWUgdGhhbiB0aGUgb25lcyBsaXN0ZWQgdGhlIHJlY2VpdmVyIHNoYWxsIGlnbm9yZSB0aGUgd2hvbGUgCgktLSBPLUJjc21DYW1lbFREUERhdGFzZXF1ZW5jZS4gCgktLSBGb3IgTy1CY3NtQ2FtZWxURFAtQ3JpdGVyaWEgc2VxdWVuY2VzIGNvbnRhaW5pbmcgdGhpcyBwYXJhbWV0ZXIgd2l0aCBhbnkKCS0tIG90aGVyIHZhbHVlIHRoYW4gdGhlIG9uZXMgbGlzdGVkIHRoZSByZWNlaXZlciBzaGFsbCBpZ25vcmUgdGhlIHdob2xlCgktLSBPLUJjc21DYW1lbFREUC1Dcml0ZXJpYSBzZXF1ZW5jZS4KCk8tQmNzbUNhbWVsVERQQ3JpdGVyaWFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkNhbWVsVERQRGF0YSkgT0YKCU8tQmNzbUNhbWVsVERQLUNyaXRlcmlhIAoKVC1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mQ2FtZWxURFBEYXRhKSBPRgoJVC1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYSAKCk8tQmNzbUNhbWVsVERQLUNyaXRlcmlhIDo6PSBTRVFVRU5DRSB7CglvLUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQJTy1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50LAkKCWRlc3RpbmF0aW9uTnVtYmVyQ3JpdGVyaWEgCVswXSBEZXN0aW5hdGlvbk51bWJlckNyaXRlcmlhCU9QVElPTkFMLAoJYmFzaWNTZXJ2aWNlQ3JpdGVyaWEJWzFdIEJhc2ljU2VydmljZUNyaXRlcmlhCU9QVElPTkFMLAoJY2FsbFR5cGVDcml0ZXJpYQlbMl0gQ2FsbFR5cGVDcml0ZXJpYQlPUFRJT05BTCwKCS4uLiwKCW8tQ2F1c2VWYWx1ZUNyaXRlcmlhCVszXSBPLUNhdXNlVmFsdWVDcml0ZXJpYQlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbNF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMIH0KClQtQkNTTS1DQU1FTC1URFAtQ3JpdGVyaWEgOjo9IFNFUVVFTkNFIHsKCXQtQkNTTS1UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQJVC1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50LAkKCWJhc2ljU2VydmljZUNyaXRlcmlhCVswXSBCYXNpY1NlcnZpY2VDcml0ZXJpYQlPUFRJT05BTCwKCXQtQ2F1c2VWYWx1ZUNyaXRlcmlhCVsxXSBULUNhdXNlVmFsdWVDcml0ZXJpYQlPUFRJT05BTCwKCS4uLiB9CgpEZXN0aW5hdGlvbk51bWJlckNyaXRlcmlhICA6Oj0gU0VRVUVOQ0UgewoJbWF0Y2hUeXBlCQlbMF0gTWF0Y2hUeXBlLAoJZGVzdGluYXRpb25OdW1iZXJMaXN0IAlbMV0gRGVzdGluYXRpb25OdW1iZXJMaXN0CU9QVElPTkFMLAoJZGVzdGluYXRpb25OdW1iZXJMZW5ndGhMaXN0CVsyXSBEZXN0aW5hdGlvbk51bWJlckxlbmd0aExpc3QJT1BUSU9OQUwsCgktLSBvbmUgb3IgYm90aCBvZiBkZXN0aW5hdGlvbk51bWJlckxpc3QgYW5kIGRlc3RpbmF0aW9uTnVtYmVyTGVuZ3RoTGlzdCAKCS0tIHNoYWxsIGJlIHByZXNlbnQKCS4uLn0KCkRlc3RpbmF0aW9uTnVtYmVyTGlzdCAgOjo9IFNFUVVFTkNFIFNJWkUJKDEuLm1heE51bU9mQ2FtZWxEZXN0aW5hdGlvbk51bWJlcnMpIE9GCgkJCQlJU0ROLUFkZHJlc3NTdHJpbmcKCS0tIFRoZSByZWNlaXZpbmcgZW50aXR5IHNoYWxsIG5vdCBjaGVjayB0aGUgZm9ybWF0IG9mIGEgbnVtYmVyIGluCgktLSB0aGUgZGlhbGxlZCBudW1iZXIgbGlzdAoKRGVzdGluYXRpb25OdW1iZXJMZW5ndGhMaXN0ICA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZDYW1lbERlc3RpbmF0aW9uTnVtYmVyTGVuZ3RocykgT0YgCgkJCQkJSU5URUdFUigxLi5tYXhOdW1PZklTRE4tQWRkcmVzc0RpZ2l0cykKCkJhc2ljU2VydmljZUNyaXRlcmlhICAgOjo9IFNFUVVFTkNFIFNJWkUoMS4ubWF4TnVtT2ZDYW1lbEJhc2ljU2VydmljZUNyaXRlcmlhKSBPRgoJRXh0LUJhc2ljU2VydmljZUNvZGUKCm1heE51bU9mSVNETi1BZGRyZXNzRGlnaXRzICBJTlRFR0VSIDo6PSAxNQoKbWF4TnVtT2ZDYW1lbERlc3RpbmF0aW9uTnVtYmVycyAgSU5URUdFUiA6Oj0gMTAKCm1heE51bU9mQ2FtZWxEZXN0aW5hdGlvbk51bWJlckxlbmd0aHMgIElOVEVHRVIgOjo9IDMKCm1heE51bU9mQ2FtZWxCYXNpY1NlcnZpY2VDcml0ZXJpYSAgSU5URUdFUiA6Oj0gNQoKQ2FsbFR5cGVDcml0ZXJpYSAgICAgICA6Oj0gRU5VTUVSQVRFRCB7Cglmb3J3YXJkZWQgCSgwKSwKCW5vdEZvcndhcmRlZAkoMSl9CgpNYXRjaFR5cGUgICAgICAgOjo9IEVOVU1FUkFURUQgewoJaW5oaWJpdGluZyAJKDApLAoJZW5hYmxpbmcJCSgxKX0KCk8tQ2F1c2VWYWx1ZUNyaXRlcmlhICAgOjo9IFNFUVVFTkNFIFNJWkUoMS4ubWF4TnVtT2ZDQU1FTC1PLUNhdXNlVmFsdWVDcml0ZXJpYSkgT0YKCUNhdXNlVmFsdWUKClQtQ2F1c2VWYWx1ZUNyaXRlcmlhICAgOjo9IFNFUVVFTkNFIFNJWkUoMS4ubWF4TnVtT2ZDQU1FTC1ULUNhdXNlVmFsdWVDcml0ZXJpYSkgT0YKCUNhdXNlVmFsdWUKCm1heE51bU9mQ0FNRUwtTy1DYXVzZVZhbHVlQ3JpdGVyaWEgIElOVEVHRVIgOjo9IDUKCm1heE51bU9mQ0FNRUwtVC1DYXVzZVZhbHVlQ3JpdGVyaWEgIElOVEVHRVIgOjo9IDUKCkNhdXNlVmFsdWUgOjo9IE9DVEVUIFNUUklORyAoU0laRSgxKSkKLS0gVHlwZSBleHRyYWN0ZWQgZnJvbSBDYXVzZSBwYXJhbWV0ZXIgaW4gSVRVLVQgUmVjb21tZW5kYXRpb24gUS43NjMuCi0tIEZvciB0aGUgdXNlIG9mIGNhdXNlIHZhbHVlIHJlZmVyIHRvIElUVS1UIFJlY29tbWVuZGF0aW9uIFEuODUwLgoKRGVmYXVsdENhbGxIYW5kbGluZyA6Oj0gRU5VTUVSQVRFRCB7Cgljb250aW51ZUNhbGwgKDApICwKCXJlbGVhc2VDYWxsICgxKSAsCgkuLi59CgktLSBleGNlcHRpb24gaGFuZGxpbmc6CgktLSByZWNlcHRpb24gb2YgdmFsdWVzIGluIHJhbmdlIDItMzEgc2hhbGwgYmUgdHJlYXRlZCBhcyAiY29udGludWVDYWxsIgoJLS0gcmVjZXB0aW9uIG9mIHZhbHVlcyBncmVhdGVyIHRoYW4gMzEgc2hhbGwgYmUgdHJlYXRlZCBhcyAicmVsZWFzZUNhbGwiCgpDYW1lbENhcGFiaWxpdHlIYW5kbGluZyA6Oj0gSU5URUdFUigxLi4xNikgCgktLSB2YWx1ZSAxID0gQ0FNRUwgcGhhc2UgMSwKCS0tIHZhbHVlIDIgPSBDQU1FTCBwaGFzZSAyLAoJLS0gdmFsdWUgMyA9IENBTUVMIFBoYXNlIDMsCgktLSB2YWx1ZSA0ID0gQ0FNRUwgcGhhc2UgNDoKCS0tIHJlY2VwdGlvbiBvZiB2YWx1ZXMgZ3JlYXRlciB0aGFuIDQgc2hhbGwgYmUgdHJlYXRlZCBhcyBDQU1FTCBwaGFzZSA0LgoKU3VwcG9ydGVkQ2FtZWxQaGFzZXMgOjo9IEJJVCBTVFJJTkcgewoJcGhhc2UxICgwKSwKCXBoYXNlMiAoMSksCglwaGFzZTMgKDIpLAoJcGhhc2U0ICgzKX0gKFNJWkUgKDEuLjE2KSkgCi0tIEEgbm9kZSBzaGFsbCBtYXJrIGluIHRoZSBCSVQgU1RSSU5HIGFsbCBDQU1FTCBQaGFzZXMgaXQgc3VwcG9ydHMuCi0tIE90aGVyIHZhbHVlcyB0aGFuIGxpc3RlZCBhYm92ZSBzaGFsbCBiZSBkaXNjYXJkZWQuCgpPZmZlcmVkQ2FtZWw0Q1NJcyA6Oj0gQklUIFNUUklORyB7IAkKCW8tY3NpCQkoMCksCglkLWNzaQkJKDEpLAoJdnQtY3NpCQkoMiksCgl0LWNzaQkJKDMpLAoJbXQtc21zLWNzaQkoNCksCgltZy1jc2kJCSg1KSwKCXBzaS1lbmhhbmNlbWVudHMJKDYpIAp9IChTSVpFICg3Li4xNikpCi0tIEEgbm9kZSBzdXBwb3J0aW5nIENhbWVsIHBoYXNlIDQgc2hhbGwgbWFyayBpbiB0aGUgQklUIFNUUklORyBhbGwgQ2FtZWw0IENTSXMgCi0tIGl0IG9mZmVycy4KLS0gT3RoZXIgdmFsdWVzIHRoYW4gbGlzdGVkIGFib3ZlIHNoYWxsIGJlIGRpc2NhcmRlZC4KCk9mZmVyZWRDYW1lbDRGdW5jdGlvbmFsaXRpZXMgOjo9IEJJVCBTVFJJTkcgeyAJCglpbml0aWF0ZUNhbGxBdHRlbXB0CSgwKSwKCXNwbGl0TGVnCQkoMSksCgltb3ZlTGVnCQkoMiksCglkaXNjb25uZWN0TGVnCSgzKSwKCWVudGl0eVJlbGVhc2VkCSg0KSwKCWRmYy1XaXRoQXJndW1lbnQJKDUpLAoJcGxheVRvbmUJCSg2KSwKCWR0bWYtTWlkQ2FsbAkoNyksCgljaGFyZ2luZ0luZGljYXRvcgkoOCksCglhbGVydGluZ0RQCSg5KSwKCWxvY2F0aW9uQXRBbGVydGluZwkoMTApLAoJY2hhbmdlT2ZQb3NpdGlvbkRQCSgxMSksCglvci1JbnRlcmFjdGlvbnMJKDEyKSwKCXdhcm5pbmdUb25lRW5oYW5jZW1lbnRzCSgxMyksCgljZi1FbmhhbmNlbWVudHMJKDE0KSwKCXN1YnNjcmliZWRFbmhhbmNlZERpYWxsZWRTZXJ2aWNlcyAJKDE1KSwKCXNlcnZpbmdOZXR3b3JrRW5oYW5jZWREaWFsbGVkU2VydmljZXMgKDE2KSwKCWNyaXRlcmlhRm9yQ2hhbmdlT2ZQb3NpdGlvbkRQCSgxNyksCglzZXJ2aWNlQ2hhbmdlRFAJKDE4KSwKCWNvbGxlY3RJbmZvcm1hdGlvbgkoMTkpCn0gKFNJWkUgKDE1Li42NCkpCi0tIEEgbm9kZSBzdXBwb3J0aW5nIENhbWVsIHBoYXNlIDQgc2hhbGwgbWFyayBpbiB0aGUgQklUIFNUUklORyBhbGwgQ0FNRUw0IAotLSBmdW5jdGlvbmFsaXRpZXMgaXQgb2ZmZXJzLgotLSBPdGhlciB2YWx1ZXMgdGhhbiBsaXN0ZWQgYWJvdmUgc2hhbGwgYmUgZGlzY2FyZGVkLgoKU01TLUNTSSA6Oj0gU0VRVUVOQ0UgewoJc21zLUNBTUVMLVREUC1EYXRhTGlzdAlbMF0gU01TLUNBTUVMLVREUC1EYXRhTGlzdAlPUFRJT05BTCwKCWNhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nCVsxXSBDYW1lbENhcGFiaWxpdHlIYW5kbGluZwlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJbm90aWZpY2F0aW9uVG9DU0UJWzNdIE5VTEwJCU9QVElPTkFMLAoJY3NpLUFjdGl2ZQlbNF0gTlVMTAkJT1BUSU9OQUwsCgkuLi59Ci0tCW5vdGlmaWNhdGlvblRvQ1NFIGFuZCBjc2ktQWN0aXZlIHNoYWxsIG5vdCBiZSBwcmVzZW50Ci0tCXdoZW4gTU8tU01TLUNTSSBvciBNVC1TTVMtQ1NJIGlzIHNlbnQgdG8gVkxSIG9yIFNHU04uCi0tCVRoZXkgbWF5IG9ubHkgYmUgaW5jbHVkZWQgaW4gQVRTSS9BVE0gYWNrL05TREMgbWVzc2FnZS4KLS0JU01TLUNBTUVMLVREUC1EYXRhIGFuZCAgY2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcgc2hhbGwgYmUgcHJlc2VudCBpbiAKLS0JdGhlIFNNUy1DU0kgc2VxdWVuY2UuCi0tCUlmIFNNUy1DU0kgaXMgc2VnbWVudGVkLCBzbXMtQ0FNRUwtVERQLURhdGFMaXN0IGFuZCBjYW1lbENhcGFiaWxpdHlIYW5kbGluZyBzaGFsbCBiZSAKLS0JcHJlc2VudCBpbiB0aGUgZmlyc3Qgc2VnbWVudAoKU01TLUNBTUVMLVREUC1EYXRhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZDYW1lbFREUERhdGEpIE9GCglTTVMtQ0FNRUwtVERQLURhdGEKLS0JU01TLUNBTUVMLVREUC1EYXRhTGlzdCBzaGFsbCBub3QgY29udGFpbiBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mCi0tCVNNUy1DQU1FTC1URFAtRGF0YSBjb250YWluaW5nIHRoZSBzYW1lIHZhbHVlIGZvciBzbXMtVHJpZ2dlckRldGVjdGlvblBvaW50LgoKU01TLUNBTUVMLVREUC1EYXRhIDo6PSBTRVFVRU5DRSB7CglzbXMtVHJpZ2dlckRldGVjdGlvblBvaW50CVswXSBTTVMtVHJpZ2dlckRldGVjdGlvblBvaW50LAoJc2VydmljZUtleQlbMV0gU2VydmljZUtleSwKCWdzbVNDRi1BZGRyZXNzCVsyXSBJU0ROLUFkZHJlc3NTdHJpbmcsCglkZWZhdWx0U01TLUhhbmRsaW5nCVszXSBEZWZhdWx0U01TLUhhbmRsaW5nLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVs0XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4KCX0KClNNUy1UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQgOjo9IEVOVU1FUkFURUQgewoJc21zLUNvbGxlY3RlZEluZm8gKDEpLAoJLi4uLAoJc21zLURlbGl2ZXJ5UmVxdWVzdCAoMikKCX0KLS0JZXhjZXB0aW9uIGhhbmRsaW5nOgotLQlGb3IgU01TLUNBTUVMLVREUC1EYXRhIGFuZCBNVC1zbXNDQU1FTFREUC1Dcml0ZXJpYSBzZXF1ZW5jZXMgY29udGFpbmluZyB0aGlzIAotLQlwYXJhbWV0ZXIgd2l0aCBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGUgb25lcyBsaXN0ZWQgdGhlIHJlY2VpdmVyIHNoYWxsIGlnbm9yZQotLQl0aGUgd2hvbGUgc2VxdWVuY2UuCi0tCi0tCUlmIHRoaXMgcGFyYW1ldGVyIGlzIHJlY2VpdmVkIHdpdGggYW55IG90aGVyIHZhbHVlIHRoYW4gc21zLUNvbGxlY3RlZEluZm8KLS0JaW4gYW4gU01TLUNBTUVMLVREUC1EYXRhIHNlcXVlbmNlIGNvbnRhaW5lZCBpbiBtby1zbXMtQ1NJLCB0aGVuIHRoZSByZWNlaXZlciBzaGFsbAotLQlpZ25vcmUgdGhlIHdob2xlIFNNUy1DQU1FTC1URFAtRGF0YSBzZXF1ZW5jZS4KLS0KLS0JSWYgdGhpcyBwYXJhbWV0ZXIgaXMgcmVjZWl2ZWQgd2l0aCBhbnkgb3RoZXIgdmFsdWUgdGhhbiBzbXMtRGVsaXZlcnlSZXF1ZXN0Ci0tCWluIGFuIFNNUy1DQU1FTC1URFAtRGF0YSBzZXF1ZW5jZSBjb250YWluZWQgaW4gbXQtc21zLUNTSSB0aGVuIHRoZSByZWNlaXZlciBzaGFsbAotLQlpZ25vcmUgdGhlIHdob2xlIFNNUy1DQU1FTC1URFAtRGF0YSBzZXF1ZW5jZS4KLS0KLS0JSWYgdGhpcyBwYXJhbWV0ZXIgaXMgcmVjZWl2ZWQgd2l0aCBhbnkgb3RoZXIgdmFsdWUgdGhhbiBzbXMtRGVsaXZlcnlSZXF1ZXN0Ci0tCWluIGFuIE1ULXNtc0NBTUVMVERQLUNyaXRlcmlhIHNlcXVlbmNlIHRoZW4gdGhlIHJlY2VpdmVyIHNoYWxsCi0tCWlnbm9yZSB0aGUgd2hvbGUgTVQtc21zQ0FNRUxURFAtQ3JpdGVyaWEgc2VxdWVuY2UuCgpEZWZhdWx0U01TLUhhbmRsaW5nIDo6PSBFTlVNRVJBVEVEIHsKCWNvbnRpbnVlVHJhbnNhY3Rpb24gKDApICwKCXJlbGVhc2VUcmFuc2FjdGlvbiAoMSkgLAoJLi4ufQotLQlleGNlcHRpb24gaGFuZGxpbmc6Ci0tCXJlY2VwdGlvbiBvZiB2YWx1ZXMgaW4gcmFuZ2UgMi0zMSBzaGFsbCBiZSB0cmVhdGVkIGFzICJjb250aW51ZVRyYW5zYWN0aW9uIgotLQlyZWNlcHRpb24gb2YgdmFsdWVzIGdyZWF0ZXIgdGhhbiAzMSBzaGFsbCBiZSB0cmVhdGVkIGFzICJyZWxlYXNlVHJhbnNhY3Rpb24iCgpNLUNTSSA6Oj0gU0VRVUVOQ0UgewoJbW9iaWxpdHlUcmlnZ2VycwlNb2JpbGl0eVRyaWdnZXJzLAoJc2VydmljZUtleQlTZXJ2aWNlS2V5LAoJZ3NtU0NGLUFkZHJlc3MJWzBdCUlTRE4tQWRkcmVzc1N0cmluZywKCWV4dGVuc2lvbkNvbnRhaW5lcglbMV0JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJbm90aWZpY2F0aW9uVG9DU0UJWzJdIE5VTEwJCU9QVElPTkFMLAoJY3NpLUFjdGl2ZQlbM10gTlVMTAkJT1BUSU9OQUwsCgkuLi59Ci0tCW5vdGlmaWNhdGlvblRvQ1NFIGFuZCBjc2ktQWN0aXZlIHNoYWxsIG5vdCBiZSBwcmVzZW50IHdoZW4gTS1DU0kgaXMgc2VudCB0byBWTFIuCi0tCVRoZXkgbWF5IG9ubHkgYmUgaW5jbHVkZWQgaW4gQVRTSS9BVE0gYWNrL05TREMgbWVzc2FnZS4KCk1HLUNTSSA6Oj0gU0VRVUVOQ0UgewoJbW9iaWxpdHlUcmlnZ2VycwlNb2JpbGl0eVRyaWdnZXJzLAoJc2VydmljZUtleQlTZXJ2aWNlS2V5LAoJZ3NtU0NGLUFkZHJlc3MJWzBdCUlTRE4tQWRkcmVzc1N0cmluZywKCWV4dGVuc2lvbkNvbnRhaW5lcglbMV0JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJbm90aWZpY2F0aW9uVG9DU0UJWzJdIE5VTEwJCU9QVElPTkFMLAoJY3NpLUFjdGl2ZQlbM10gTlVMTAkJT1BUSU9OQUwsCgkuLi59Ci0tCW5vdGlmaWNhdGlvblRvQ1NFIGFuZCBjc2ktQWN0aXZlIHNoYWxsIG5vdCBiZSBwcmVzZW50IHdoZW4gTUctQ1NJIGlzIHNlbnQgdG8gU0dTTi4KLS0JVGhleSBtYXkgb25seSBiZSBpbmNsdWRlZCBpbiBBVFNJL0FUTSBhY2svTlNEQyBtZXNzYWdlLgoKTW9iaWxpdHlUcmlnZ2VycyAgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mTW9iaWxpdHlUcmlnZ2VycykgT0YKCU1NLUNvZGUKCm1heE51bU9mTW9iaWxpdHlUcmlnZ2VycyBJTlRFR0VSIDo6PSAxMAoKTU0tQ29kZSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKLS0JVGhpcyB0eXBlIGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBNb2JpbGl0eSBNYW5hZ2VtZW50IGV2ZW50LgotLQlBY3Rpb25zIGZvciB0aGUgZm9sbG93aW5nIE1NLUNvZGUgdmFsdWVzIGFyZSBkZWZpbmVkIGluIENBTUVMIFBoYXNlIDQ6Ci0tCi0tCUNTIGRvbWFpbiBNTSBldmVudHM6Ci0tCUxvY2F0aW9uLXVwZGF0ZS1pbi1zYW1lLVZMUglNTS1Db2RlIDo6PSAnMDAwMDAwMDAnQgotLQlMb2NhdGlvbi11cGRhdGUtdG8tb3RoZXItVkxSCU1NLUNvZGUgOjo9ICcwMDAwMDAwMSdCCi0tCUlNU0ktQXR0YWNoCU1NLUNvZGUgOjo9ICcwMDAwMDAxMCdCCi0tCU1TLWluaXRpYXRlZC1JTVNJLURldGFjaAlNTS1Db2RlIDo6PSAnMDAwMDAwMTEnQgotLQlOZXR3b3JrLWluaXRpYXRlZC1JTVNJLURldGFjaAlNTS1Db2RlIDo6PSAnMDAwMDAxMDAnQgotLQotLQlQUyBkb21haW4gTU0gZXZlbnRzOgotLQlSb3V0ZWluZy1BcmVhLXVwZGF0ZS1pbi1zYW1lLVNHU04JTU0tQ29kZSA6Oj0gJzEwMDAwMDAwJ0IKLS0JUm91dGVpbmctQXJlYS11cGRhdGUtdG8tb3RoZXItU0dTTi11cGRhdGUtZnJvbS1uZXctU0dTTgotLQkJCQlNTS1Db2RlIDo6PSAnMTAwMDAwMDEnQgotLQlSb3V0ZWluZy1BcmVhLXVwZGF0ZS10by1vdGhlci1TR1NOLWRpc2Nvbm5lY3QtYnktZGV0YWNoCi0tCQkJCU1NLUNvZGUgOjo9ICcxMDAwMDAxMCdCCi0tCUdQUlMtQXR0YWNoCU1NLUNvZGUgOjo9ICcxMDAwMDAxMSdCCi0tCU1TLWluaXRpYXRlZC1HUFJTLURldGFjaAlNTS1Db2RlIDo6PSAnMTAwMDAxMDAnQgotLQlOZXR3b3JrLWluaXRpYXRlZC1HUFJTLURldGFjaAlNTS1Db2RlIDo6PSAnMTAwMDAxMDEnQiAKLS0JTmV0d29yay1pbml0aWF0ZWQtdHJhbnNmZXItdG8tTVMtbm90LXJlYWNoYWJsZS1mb3ItcGFnaW5nCi0tCQkJCU1NLUNvZGUgOjo9ICcxMDAwMDExMCdCCi0tCi0tCUlmIHRoZSBNU0MgcmVjZWl2ZXMgYW55IG90aGVyIE1NLWNvZGUgdGhhbiB0aGUgb25lcyBsaXN0ZWQgYWJvdmUgZm9yIHRoZQotLQlDUyBkb21haW4sIHRoZW4gdGhlIE1TQyBzaGFsbCBpZ25vcmUgdGhhdCBNTS1jb2RlLgotLQlJZiB0aGUgU0dTTiByZWNlaXZlcyBhbnkgb3RoZXIgTU0tY29kZSB0aGFuIHRoZSBvbmVzIGxpc3RlZCBhYm92ZSBmb3IgdGhlCi0tCVBTIGRvbWFpbiwgdGhlbiB0aGUgU0dTTiBzaGFsbCBpZ25vcmUgdGhhdCBNTS1jb2RlLgoKVC1DU0kgOjo9IFNFUVVFTkNFIHsKCXQtQmNzbUNhbWVsVERQRGF0YUxpc3QJVC1CY3NtQ2FtZWxURFBEYXRhTGlzdCwKCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4sCgljYW1lbENhcGFiaWxpdHlIYW5kbGluZwlbMF0gQ2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcJT1BUSU9OQUwsCglub3RpZmljYXRpb25Ub0NTRQlbMV0gTlVMTAkJT1BUSU9OQUwsCgljc2ktQWN0aXZlCVsyXSBOVUxMCQlPUFRJT05BTH0KLS0Jbm90aWZpY2F0aW9uVG9DU0UgYW5kIGNzaS1BY3RpdmUgc2hhbGwgbm90IGJlIHByZXNlbnQgd2hlbiBWVC1DU0kvVC1DU0kgaXMgc2VudAotLQl0byBWTFIvR01TQy4KLS0JVGhleSBtYXkgb25seSBiZSBpbmNsdWRlZCBpbiBBVFNJL0FUTSBhY2svTlNEQyBtZXNzYWdlLgotLQlULUNTSSBzaGFsbCBub3QgYmUgc2VnbWVudGVkLgoKVC1CY3NtQ2FtZWxURFBEYXRhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZDYW1lbFREUERhdGEpIE9GCglULUJjc21DYW1lbFREUERhdGEKCS0tLSBULUJjc21DYW1lbFREUERhdGFMaXN0IHNoYWxsIG5vdCBjb250YWluIG1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YKCS0tLSBULUJjc21DYW1lbFREUERhdGEgY29udGFpbmluZyB0aGUgc2FtZSB2YWx1ZSBmb3IgdC1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50LgoJLS0tIEZvciBDQU1FTCBQaGFzZSAyLCB0aGlzIG1lYW5zIHRoYXQgb25seSBvbmUgaW5zdGFuY2Ugb2YgVC1CY3NtQ2FtZWxURFBEYXRhIGlzIGFsbG93ZWQKCS0tLSB3aXRoIHQtQmNzbVRyaWdnZXJEZXRlY3Rpb25Qb2ludCBiZWluZyBlcXVhbCB0byBEUDEyLiAKCS0tLSBGb3IgQ0FNRUwgUGhhc2UgMywgbW9yZSBURFCScyBhcmUgYWxsb3dlZC4KClQtQmNzbUNhbWVsVERQRGF0YSA6Oj0gU0VRVUVOQ0UgewoJdC1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50CVQtQmNzbVRyaWdnZXJEZXRlY3Rpb25Qb2ludCwKCXNlcnZpY2VLZXkJU2VydmljZUtleSwKCWdzbVNDRi1BZGRyZXNzCVswXSBJU0ROLUFkZHJlc3NTdHJpbmcsCglkZWZhdWx0Q2FsbEhhbmRsaW5nCVsxXSBEZWZhdWx0Q2FsbEhhbmRsaW5nLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpULUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQgOjo9IEVOVU1FUkFURUQgewoJdGVybUF0dGVtcHRBdXRob3JpemVkICgxMiksCgkuLi4gLAoJdEJ1c3kgKDEzKSwKCXROb0Fuc3dlciAoMTQpfQoJLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgoJLS0gRm9yIFQtQmNzbUNhbWVsVERQRGF0YSBzZXF1ZW5jZXMgY29udGFpbmluZyB0aGlzIHBhcmFtZXRlciB3aXRoIGFueSBvdGhlcgoJLS0gdmFsdWUgdGhhbiB0aGUgb25lcyBsaXN0ZWQgYWJvdmUsIHRoZSByZWNlaXZlciBzaGFsbCBpZ25vcmUgdGhlIHdob2xlCgktLSBULUJjc21DYW1lbFREUERhdGEgc2VxdWVuY2UuCgotLSBncHJzIGxvY2F0aW9uIGluZm9ybWF0aW9uIHJldHJpZXZhbCB0eXBlcwoKU2VuZFJvdXRpbmdJbmZvRm9yR3Byc0FyZyA6Oj0gU0VRVUVOQ0UgewoJaW1zaQkJCQlbMF0gSU1TSSwKCWdnc24tQWRkcmVzcwkJWzFdIEdTTi1BZGRyZXNzCU9QVElPTkFMLCAKCWdnc24tTnVtYmVyCQlbMl0JSVNETi1BZGRyZXNzU3RyaW5nLAoJZXh0ZW5zaW9uQ29udGFpbmVyCQlbM10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4ufQoKU2VuZFJvdXRpbmdJbmZvRm9yR3Byc1JlcyA6Oj0gU0VRVUVOQ0UgewoJc2dzbi1BZGRyZXNzCQlbMF0gR1NOLUFkZHJlc3MsCglnZ3NuLUFkZHJlc3MJCVsxXQlHU04tQWRkcmVzcwlPUFRJT05BTCwKCW1vYmlsZU5vdFJlYWNoYWJsZVJlYXNvbgkJWzJdCUFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00JCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCQlbM10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4ufQoKLS0gZmFpbHVyZSByZXBvcnQgdHlwZXMKCkZhaWx1cmVSZXBvcnRBcmcgOjo9IFNFUVVFTkNFIHsKCWltc2kJCQkJWzBdIElNU0ksCglnZ3NuLU51bWJlcgkJWzFdIElTRE4tQWRkcmVzc1N0cmluZwksCglnZ3NuLUFkZHJlc3MJCVsyXSBHU04tQWRkcmVzcwlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcgkJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KCkZhaWx1cmVSZXBvcnRSZXMgOjo9IFNFUVVFTkNFIHsKCWdnc24tQWRkcmVzcwkJWzBdIEdTTi1BZGRyZXNzCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCQlbMV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4ufQoKLS0gZ3BycyBub3RpZmljYXRpb24gdHlwZXMKCk5vdGVNc1ByZXNlbnRGb3JHcHJzQXJnIDo6PSBTRVFVRU5DRSB7CglpbXNpCQkJCVswXSBJTVNJLAoJc2dzbi1BZGRyZXNzCQlbMV0gR1NOLUFkZHJlc3MsCglnZ3NuLUFkZHJlc3MJCVsyXSBHU04tQWRkcmVzcwlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcgkJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KCk5vdGVNc1ByZXNlbnRGb3JHcHJzUmVzIDo6PSBTRVFVRU5DRSB7CglleHRlbnNpb25Db250YWluZXIJCVswXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgotLSBmYXVsdCByZWNvdmVyeSB0eXBlcwoKUmVzZXRBcmcgOjo9IFNFUVVFTkNFIHsKCWhsci1OdW1iZXIJSVNETi1BZGRyZXNzU3RyaW5nLAoJaGxyLUxpc3QJCUhMUi1MaXN0CQlPUFRJT05BTCwKCS4uLn0KClJlc3RvcmVEYXRhQXJnIDo6PSBTRVFVRU5DRSB7CglpbXNpCQkJSU1TSSwKCWxtc2kJCQlMTVNJCQkJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uICwKCXZsci1DYXBhYmlsaXR5CVs2XSBWTFItQ2FwYWJpbGl0eQlPUFRJT05BTCB9CgpSZXN0b3JlRGF0YVJlcyA6Oj0gU0VRVUVOQ0UgewoJaGxyLU51bWJlcglJU0ROLUFkZHJlc3NTdHJpbmcsCgltc05vdFJlYWNoYWJsZQlOVUxMCQkJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4ufQoKLS0gVkJTL1ZHQ1MgdHlwZXMKVkJTRGF0YUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mVkJTR3JvdXBJZHMpIE9GCgkJCQlWb2ljZUJyb2FkY2FzdERhdGEKClZHQ1NEYXRhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZWR0NTR3JvdXBJZHMpIE9GCgkJCQlWb2ljZUdyb3VwQ2FsbERhdGEKCm1heE51bU9mVkJTR3JvdXBJZHMgIElOVEVHRVIgOjo9IDUwCgptYXhOdW1PZlZHQ1NHcm91cElkcyAgSU5URUdFUiA6Oj0gNTAKClZvaWNlR3JvdXBDYWxsRGF0YSAgOjo9IFNFUVVFTkNFIHsKCWdyb3VwSWQJCUdyb3VwSWQsIAoJLS0gZ3JvdXBJZCBzaGFsbCBiZSBmaWxsZWQgd2l0aCBzaXggVEJDRCBmaWxsZXJzICgxMTExKWlmIHRoZSBsb25nR3JvdXBJZCBpcyBwcmVzZW50ICAKCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4sCglhZGRpdGlvbmFsU3Vic2NyaXB0aW9ucwlBZGRpdGlvbmFsU3Vic2NyaXB0aW9ucwlPUFRJT05BTCwKCWFkZGl0aW9uYWxJbmZvCVswXSBBZGRpdGlvbmFsSW5mbwlPUFRJT05BTCwKCWxvbmdHcm91cElkCVsxXSBMb25nLUdyb3VwSWQJT1BUSU9OQUwgfQoKCS0tIFZvaWNlR3JvdXBDYWxsRGF0YSBjb250YWluaW5nIGEgbG9uZ0dyb3VwSWQgc2hhbGwgbm90IGJlIHNlbnQgdG8gVkxScyB0aGF0IGRpZCBub3QKCS0tIGluZGljYXRlIHN1cHBvcnQgb2YgbG9uZyBHcm91cCBJRHMgd2l0aGluIHRoZSBVcGRhdGUgTG9jYXRpb24gb3IgUmVzdG9yZSBEYXRhIAoJLS0gcmVxdWVzdCBtZXNzYWdlCgpBZGRpdGlvbmFsSW5mbyA6Oj0gQklUIFNUUklORyAoU0laRSAoMS4uMTM2KSkKLS0JIFJlZmVycyB0byBBZGRpdGlvbmFsIEluZm8gYXMgc3BlY2lmaWVkIGluIDNHUFAgVFMgNDMuMDY4IAoKQWRkaXRpb25hbFN1YnNjcmlwdGlvbnMgOjo9IEJJVCBTVFJJTkcgewoJcHJpdmlsZWdlZFVwbGlua1JlcXVlc3QgKDApLAoJZW1lcmdlbmN5VXBsaW5rUmVxdWVzdCAoMSksCgllbWVyZ2VuY3lSZXNldCAoMil9IChTSVpFICgzLi44KSkKLS0gT3RoZXIgYml0cyB0aGFuIGxpc3RlZCBhYm92ZSBzaGFsbCBiZSBkaXNjYXJkZWQuCgpWb2ljZUJyb2FkY2FzdERhdGEgOjo9IFNFUVVFTkNFIHsKCWdyb3VwaWQJCUdyb3VwSWQsIAoJLS0gZ3JvdXBJZCBzaGFsbCBiZSBmaWxsZWQgd2l0aCBzaXggVEJDRCBmaWxsZXJzICgxMTExKWlmIHRoZSBsb25nR3JvdXBJZCBpcyBwcmVzZW50Cglicm9hZGNhc3RJbml0RW50aXRsZW1lbnQJTlVMTAkJCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiwKCWxvbmdHcm91cElkCVswXSBMb25nLUdyb3VwSWQJT1BUSU9OQUwgfQoJCi0tIFZvaWNlQnJvYWRjYXN0RGF0YSBjb250YWluaW5nIGEgbG9uZ0dyb3VwSWQgc2hhbGwgbm90IGJlIHNlbnQgdG8gVkxScyB0aGF0IGRpZCBub3QKLS0gaW5kaWNhdGUgc3VwcG9ydCBvZiBsb25nIEdyb3VwIElEcyB3aXRoaW4gdGhlIFVwZGF0ZSBMb2NhdGlvbiBvciBSZXN0b3JlIERhdGEgCgktLSByZXF1ZXN0IG1lc3NhZ2UKCkdyb3VwSWQgIDo6PSBUQkNELVNUUklORyAoU0laRSAoMykpCgktLSBXaGVuIEdyb3VwLUlkIGlzIGxlc3MgdGhhbiBzaXggY2hhcmFjdGVycyBpbiBsZW5ndGgsIHRoZSBUQkNEIGZpbGxlciAoMTExMSkKCS0tIGlzIHVzZWQgdG8gZmlsbCB1bnVzZWQgaGFsZiBvY3RldHMuCgktLSBSZWZlcnMgdG8gdGhlIEdyb3VwIElkZW50aWZpY2F0aW9uIGFzIHNwZWNpZmllZCBpbiAzR1BQIFRTIDIzLjAwMyAKCS0tIGFuZCAzR1BQIFRTIDQzLjA2OC8gNDMuMDY5CgpMb25nLUdyb3VwSWQgIDo6PSBUQkNELVNUUklORyAoU0laRSAoNCkpCgktLSBXaGVuIExvbmctR3JvdXAtSWQgaXMgbGVzcyB0aGFuIGVpZ2h0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoLCB0aGUgVEJDRCBmaWxsZXIgKDExMTEpCgktLSBpcyB1c2VkIHRvIGZpbGwgdW51c2VkIGhhbGYgb2N0ZXRzLgoJLS0gUmVmZXJzIHRvIHRoZSBHcm91cCBJZGVudGlmaWNhdGlvbiBhcyBzcGVjaWZpZWQgaW4gM0dQUCBUUyAyMy4wMDMgCgktLSBhbmQgM0dQUCBUUyA0My4wNjgvIDQzLjA2OQoKCi0tIHByb3ZpZGUgc3Vic2NyaWJlciBpbmZvIHR5cGVzCgpQcm92aWRlU3Vic2NyaWJlckluZm9BcmcgOjo9IFNFUVVFTkNFIHsKCWltc2kJCVswXSBJTVNJLAoJbG1zaQkJWzFdIExNU0kJT1BUSU9OQUwsCglyZXF1ZXN0ZWRJbmZvCVsyXSBSZXF1ZXN0ZWRJbmZvLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVszXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4sCgljYWxsUHJpb3JpdHkJWzRdCUVNTFBQLVByaW9yaXR5CU9QVElPTkFMCgl9CgpQcm92aWRlU3Vic2NyaWJlckluZm9SZXMgOjo9IFNFUVVFTkNFIHsKCXN1YnNjcmliZXJJbmZvCVN1YnNjcmliZXJJbmZvLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KClN1YnNjcmliZXJJbmZvIDo6PSBTRVFVRU5DRSB7Cglsb2NhdGlvbkluZm9ybWF0aW9uCVswXSBMb2NhdGlvbkluZm9ybWF0aW9uCU9QVElPTkFMLAoJc3Vic2NyaWJlclN0YXRlCVsxXSBTdWJzY3JpYmVyU3RhdGUJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiAsCglsb2NhdGlvbkluZm9ybWF0aW9uR1BSUwlbM10gTG9jYXRpb25JbmZvcm1hdGlvbkdQUlMJT1BUSU9OQUwsCglwcy1TdWJzY3JpYmVyU3RhdGUJWzRdIFBTLVN1YnNjcmliZXJTdGF0ZQlPUFRJT05BTCwKCWltZWkJCQlbNV0gSU1FSQkJT1BUSU9OQUwsCgltcy1DbGFzc21hcmsyCVs2XSBNUy1DbGFzc21hcmsyCU9QVElPTkFMLAoJZ3Bycy1NUy1DbGFzcwlbN10gR1BSU01TQ2xhc3MJT1BUSU9OQUwsCgltbnBJbmZvUmVzCVs4XSBNTlBJbmZvUmVzCU9QVElPTkFMIH0KCi0tCUlmIHRoZSBITFIgcmVjZWl2ZXMgbG9jYXRpb25JbmZvcm1hdGlvbiwgc3Vic2NyaWJlclN0YXRlIG9yIG1zLUNsYXNzbWFyazIgZnJvbSBhbiBTR1NOCi0tCWl0IHNoYWxsIGRpc2NhcmQgdGhlbS4KLS0JSWYgdGhlIEhMUiByZWNlaXZlcyBsb2NhdGlvbkluZm9ybWF0aW9uR1BSUywgcHMtU3Vic2NyaWJlclN0YXRlIG9yIGdwcnMtTVMtQ2xhc3MgZnJvbQotLQlhIFZMUiBpdCBzaGFsbCBkaXNjYXJkIHRoZW0uCi0tCUlmIHRoZSBITFIgcmVjZWl2ZXMgcGFyYW1ldGVycyB3aGljaCBpdCBoYXMgbm90IHJlcXVlc3RlZCwgaXQgc2hhbGwgZGlzY2FyZCB0aGVtLgoKTU5QSW5mb1JlcyA6Oj0gU0VRVUVOQ0UgewoJcm91dGVpbmdOdW1iZXIJWzBdIFJvdXRlaW5nTnVtYmVyIAlPUFRJT05BTCwKCWltc2kJCQlbMV0gSU1TSQkJT1BUSU9OQUwsCgltc2lzZG4JCVsyXSBJU0ROLUFkZHJlc3NTdHJpbmcgCU9QVElPTkFMLAoJbnVtYmVyUG9ydGFiaWxpdHlTdGF0dXMJWzNdIE51bWJlclBvcnRhYmlsaXR5U3RhdHVzCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVs0XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4gfQotLQlUaGUgSU1TSSBwYXJhbWV0ZXIgY29udGFpbnMgYSBnZW5lcmljIElNU0ksIGkuZS4gaXQgaXMgbm90IHRpZWQgbmVjZXNzYXJpbHkgdG8gdGhlIAotLQlTdWJzY3JpYmVyLiBNQ0MgYW5kIE1OQyB2YWx1ZXMgaW4gdGhpcyBJTVNJIHNoYWxsIHBvaW50IHRvIHRoZSBTdWJzY3JpcHRpb24gTmV0d29yayBvZiAKLS0JdGhlIFN1YnNjcmliZXIuIFNlZSAzR1BQIFRTIDIzLjA2NiBbMTA4XS4KClJvdXRlaW5nTnVtYmVyIDo6PSBUQkNELVNUUklORyAoU0laRSAoMS4uNSkpCgoKTnVtYmVyUG9ydGFiaWxpdHlTdGF0dXMgOjo9IEVOVU1FUkFURUQgewoJbm90S25vd25Ub0JlUG9ydGVkCSgwKSwKCW93bk51bWJlclBvcnRlZE91dAkoMSksCglmb3JlaWduTnVtYmVyUG9ydGVkVG9Gb3JlaWduTmV0d29yawkoMiksCgkuLi4sCglvd25OdW1iZXJOb3RQb3J0ZWRPdXQJKDQpLAoJZm9yZWlnbk51bWJlclBvcnRlZEluCSg1KQoJfQoJLS0JZXhjZXB0aW9uIGhhbmRsaW5nOiAKCS0tICByZWNlcHRpb24gb2Ygb3RoZXIgdmFsdWVzIHRoYW4gdGhlIG9uZXMgbGlzdGVkIHRoZSByZWNlaXZlciBzaGFsbCBpZ25vcmUgdGhlIAoJLS0gIHdob2xlIE51bWJlclBvcnRhYmlsaXR5U3RhdHVzOwoJLS0gIG93bk51bWJlck5vdFBvcnRlZE91dCBvciBmb3JlaWduTnVtYmVyUG9ydGVkSW4gbWF5IG9ubHkgYmUgaW5jbHVkZWQgaW4gQW55IFRpbWUgCgktLSAgSW50ZXJyb2dhdGlvbiBtZXNzYWdlLgoKTVMtQ2xhc3NtYXJrMiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgzKSkKCS0tIFRoaXMgcGFyYW1ldGVyIGNhcnJpZXMgdGhlIHZhbHVlIHBhcnQgb2YgdGhlIE1TIENsYXNzbWFyayAyIElFIGRlZmluZWQgaW4gCgktLSAzR1BQIFRTIDI0LjAwOCBbMzVdLgoKR1BSU01TQ2xhc3MgOjo9IFNFUVVFTkNFIHsKCW1TTmV0d29ya0NhcGFiaWxpdHkJWzBdIE1TTmV0d29ya0NhcGFiaWxpdHksCgltU1JhZGlvQWNjZXNzQ2FwYWJpbGl0eQlbMV0gTVNSYWRpb0FjY2Vzc0NhcGFiaWxpdHkJT1BUSU9OQUwKCX0KCk1TTmV0d29ya0NhcGFiaWxpdHkgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uOCkpCgktLSBUaGlzIHBhcmFtZXRlciBjYXJyaWVzIHRoZSB2YWx1ZSBwYXJ0IG9mIHRoZSBNUyBOZXR3b3JrIENhcGFiaWxpdHkgSUUgZGVmaW5lZCBpbiAKCS0tIDNHUFAgVFMgMjQuMDA4IFszNV0uCgkKTVNSYWRpb0FjY2Vzc0NhcGFiaWxpdHkgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uNTApKQoJLS0gVGhpcyBwYXJhbWV0ZXIgY2FycmllcyB0aGUgdmFsdWUgcGFydCBvZiB0aGUgTVMgUmFkaW8gQWNjZXNzIENhcGFiaWxpdHkgSUUgZGVmaW5lZCBpbgoJLS0gM0dQUCBUUyAyNC4wMDggWzM1XS4KClJlcXVlc3RlZEluZm8gOjo9IFNFUVVFTkNFIHsKCWxvY2F0aW9uSW5mb3JtYXRpb24JWzBdIE5VTEwJCU9QVElPTkFMLAoJc3Vic2NyaWJlclN0YXRlCVsxXSBOVUxMCQlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uLCAKCWN1cnJlbnRMb2NhdGlvbglbM10gTlVMTAkJT1BUSU9OQUwsCglyZXF1ZXN0ZWREb21haW4JWzRdIERvbWFpblR5cGUJT1BUSU9OQUwsCglpbWVpCQkJWzZdIE5VTEwJCU9QVElPTkFMLAoJbXMtY2xhc3NtYXJrCVs1XSBOVUxMCQlPUFRJT05BTCwKCW1ucFJlcXVlc3RlZEluZm8JWzddIE5VTEwgCQlPUFRJT05BTCB9CgotLQljdXJyZW50TG9jYXRpb24gc2hhbGwgYmUgYWJzZW50IGlmIGxvY2F0aW9uSW5mb3JtYXRpb24gaXMgYWJzZW50CgpEb21haW5UeXBlIDo6PSAgRU5VTUVSQVRFRCB7Cgljcy1Eb21haW4JCSgwKSwKCXBzLURvbWFpbgkJKDEpLAoJLi4ufQotLSBleGNlcHRpb24gaGFuZGxpbmc6Ci0tIHJlY2VwdGlvbiBvZiB2YWx1ZXMgPiAxIHNoYWxsIGJlIG1hcHBlZCB0byAnY3MtRG9tYWluJwoKTG9jYXRpb25JbmZvcm1hdGlvbiA6Oj0gU0VRVUVOQ0UgewoJYWdlT2ZMb2NhdGlvbkluZm9ybWF0aW9uCUFnZU9mTG9jYXRpb25JbmZvcm1hdGlvbglPUFRJT05BTCwKCWdlb2dyYXBoaWNhbEluZm9ybWF0aW9uCVswXSBHZW9ncmFwaGljYWxJbmZvcm1hdGlvbglPUFRJT05BTCwKCXZsci1udW1iZXIJWzFdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKCWxvY2F0aW9uTnVtYmVyCVsyXSBMb2NhdGlvbk51bWJlcglPUFRJT05BTCwKCWNlbGxHbG9iYWxJZE9yU2VydmljZUFyZWFJZE9yTEFJCVszXSBDZWxsR2xvYmFsSWRPclNlcnZpY2VBcmVhSWRPckxBSQlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbNF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uICwKCXNlbGVjdGVkTFNBLUlkCVs1XSBMU0FJZGVudGl0eQlPUFRJT05BTCwKCW1zYy1OdW1iZXIJWzZdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKCWdlb2RldGljSW5mb3JtYXRpb24JWzddIEdlb2RldGljSW5mb3JtYXRpb24JT1BUSU9OQUwsIAoJY3VycmVudExvY2F0aW9uUmV0cmlldmVkCVs4XSBOVUxMCQlPUFRJT05BTCwKCXNhaS1QcmVzZW50CVs5XSBOVUxMCQlPUFRJT05BTCB9Ci0tIHNhaS1QcmVzZW50IGluZGljYXRlcyB0aGF0IHRoZSBjZWxsR2xvYmFsSWRPclNlcnZpY2VBcmVhSWRPckxBSSBwYXJhbWV0ZXIgY29udGFpbnMKLS0gYSBTZXJ2aWNlIEFyZWEgSWRlbnRpdHkuCi0tIGN1cnJlbnRMb2NhdGlvblJldHJpZXZlZCBzaGFsbCBiZSBwcmVzZW50IAotLSBpZiB0aGUgbG9jYXRpb24gaW5mb3JtYXRpb24gd2VyZSByZXRyaWV2ZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsbCBwYWdpbmcuCgpMb2NhdGlvbkluZm9ybWF0aW9uR1BSUyA6Oj0gU0VRVUVOQ0UgewoJY2VsbEdsb2JhbElkT3JTZXJ2aWNlQXJlYUlkT3JMQUkJWzBdIENlbGxHbG9iYWxJZE9yU2VydmljZUFyZWFJZE9yTEFJIE9QVElPTkFMLAoJcm91dGVpbmdBcmVhSWRlbnRpdHkJWzFdIFJBSWRlbnRpdHkJT1BUSU9OQUwsCglnZW9ncmFwaGljYWxJbmZvcm1hdGlvbglbMl0gR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24JT1BUSU9OQUwsCglzZ3NuLU51bWJlcglbM10gSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAoJc2VsZWN0ZWRMU0FJZGVudGl0eQlbNF0gTFNBSWRlbnRpdHkJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzVdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiwKCXNhaS1QcmVzZW50CVs2XSBOVUxMCQlPUFRJT05BTCwKCWdlb2RldGljSW5mb3JtYXRpb24JWzddIEdlb2RldGljSW5mb3JtYXRpb24JT1BUSU9OQUwsCgljdXJyZW50TG9jYXRpb25SZXRyaWV2ZWQJWzhdIE5VTEwJCU9QVElPTkFMLAoJYWdlT2ZMb2NhdGlvbkluZm9ybWF0aW9uCVs5XSBBZ2VPZkxvY2F0aW9uSW5mb3JtYXRpb24JT1BUSU9OQUwgfQotLSBzYWktUHJlc2VudCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2VsbEdsb2JhbElkT3JTZXJ2aWNlQXJlYUlkT3JMQUkgcGFyYW1ldGVyIGNvbnRhaW5zCi0tIGEgU2VydmljZSBBcmVhIElkZW50aXR5LgotLSBjdXJyZW50TG9jYXRpb25SZXRyaWV2ZWQgc2hhbGwgYmUgcHJlc2VudCBpZiB0aGUgbG9jYXRpb24gaW5mb3JtYXRpb24KLS0gd2FzIHJldHJpZXZlZCBhZnRlciBzdWNjZXNzZnVsIHBhZ2luZy4KClJBSWRlbnRpdHkgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoNikpCi0tIFJvdXRpbmcgQXJlYSBJZGVudGl0eSBpcyBjb2RlZCBpbiBhY2NvcmRhbmNlIHdpdGggM0dQUCBUUyAyOS4wNjAgWzEwNV0uCi0tIEl0IHNoYWxsIGNvbnRhaW4gdGhlIHZhbHVlIHBhcnQgZGVmaW5lZCBpbiAzR1BQIFRTIDI5LjA2MCBvbmx5LiBJLmUuIHRoZSAzR1BQIFRTIDI5LjA2MAotLSB0eXBlIGlkZW50aWZpZXIgb2N0ZXQgc2hhbGwgbm90IGJlIGluY2x1ZGVkLgoKCkdlb2dyYXBoaWNhbEluZm9ybWF0aW9uIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDgpKQotLQlSZWZlcnMgdG8gZ2VvZ3JhcGhpY2FsIEluZm9ybWF0aW9uIGRlZmluZWQgaW4gM0dQUCBUUyAyMy4wMzIuCi0tCU9ubHkgdGhlIGRlc2NyaXB0aW9uIG9mIGFuIGVsbGlwc29pZCBwb2ludCB3aXRoIHVuY2VydGFpbnR5IGNpcmNsZQotLQlhcyBzcGVjaWZpZWQgaW4gM0dQUCBUUyAyMy4wMzIgaXMgYWxsb3dlZCB0byBiZSB1c2VkCi0tCVRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgYWNjb3JkaW5nIHRvIDNHUFAgVFMgMjMuMDMyIGlzIGFzIGZvbGxvd3M6Ci0tCQlUeXBlIG9mIHNoYXBlIChlbGxpcHNvaWQgcG9pbnQgd2l0aCB1bmNlcnRhaW50eSBjaXJjbGUpCTEgb2N0ZXQKLS0JCURlZ3JlZXMgb2YgTGF0aXR1ZGUJCQkJMyBvY3RldHMKLS0JCURlZ3JlZXMgb2YgTG9uZ2l0dWRlCQkJCTMgb2N0ZXRzCi0tCQlVbmNlcnRhaW50eSBjb2RlCQkJCTEgb2N0ZXQKCkdlb2RldGljSW5mb3JtYXRpb24gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMTApKQotLQlSZWZlcnMgdG8gQ2FsbGluZyBHZW9kZXRpYyBMb2NhdGlvbiBkZWZpbmVkIGluIFEuNzYzICgxOTk5KS4KLS0JT25seSB0aGUgZGVzY3JpcHRpb24gb2YgYW4gZWxsaXBzb2lkIHBvaW50IHdpdGggdW5jZXJ0YWludHkgY2lyY2xlCi0tCWFzIHNwZWNpZmllZCBpbiBRLjc2MyAoMTk5OSkgaXMgYWxsb3dlZCB0byBiZSB1c2VkCi0tCVRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgYWNjb3JkaW5nIHRvIFEuNzYzICgxOTk5KSBpcyBhcyBmb2xsb3dzOgotLQkJU2NyZWVuaW5nIGFuZCBwcmVzZW50YXRpb24gaW5kaWNhdG9ycwkJMSBvY3RldAotLQkJVHlwZSBvZiBzaGFwZSAoZWxsaXBzb2lkIHBvaW50IHdpdGggdW5jZXJ0YWludHkgY2lyY2xlKQkxIG9jdGV0Ci0tCQlEZWdyZWVzIG9mIExhdGl0dWRlCQkJCTMgb2N0ZXRzCi0tCQlEZWdyZWVzIG9mIExvbmdpdHVkZQkJCQkzIG9jdGV0cwotLQkJVW5jZXJ0YWludHkgY29kZQkJCQkxIG9jdGV0Ci0tCQlDb25maWRlbmNlCQkJCTEgb2N0ZXQKCkxvY2F0aW9uTnVtYmVyIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIuLjEwKSkKCS0tIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiBJVFUtVCBSZWMgUS43NjMKClN1YnNjcmliZXJTdGF0ZSA6Oj0gQ0hPSUNFIHsKCWFzc3VtZWRJZGxlCVswXSBOVUxMLAoJY2FtZWxCdXN5CQlbMV0gTlVMTCwKCW5ldERldE5vdFJlYWNoYWJsZQlOb3RSZWFjaGFibGVSZWFzb24sCglub3RQcm92aWRlZEZyb21WTFIJWzJdIE5VTEx9CgpQUy1TdWJzY3JpYmVyU3RhdGUgOjo9IENIT0lDRSB7Cglub3RQcm92aWRlZEZyb21TR1NOCVswXSBOVUxMLAoJcHMtRGV0YWNoZWQJWzFdIE5VTEwsCglwcy1BdHRhY2hlZE5vdFJlYWNoYWJsZUZvclBhZ2luZwlbMl0gTlVMTCwKCXBzLUF0dGFjaGVkUmVhY2hhYmxlRm9yUGFnaW5nCVszXSBOVUxMLAoJcHMtUERQLUFjdGl2ZU5vdFJlYWNoYWJsZUZvclBhZ2luZwlbNF0gUERQLUNvbnRleHRJbmZvTGlzdCwKCXBzLVBEUC1BY3RpdmVSZWFjaGFibGVGb3JQYWdpbmcJWzVdIFBEUC1Db250ZXh0SW5mb0xpc3QsCgluZXREZXROb3RSZWFjaGFibGUJTm90UmVhY2hhYmxlUmVhc29uIH0KClBEUC1Db250ZXh0SW5mb0xpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mUERQLUNvbnRleHRzKSBPRgoJCQkJUERQLUNvbnRleHRJbmZvCgpQRFAtQ29udGV4dEluZm8gOjo9IFNFUVVFTkNFIHsKCXBkcC1Db250ZXh0SWRlbnRpZmllcglbMF0gQ29udGV4dElkLAoJcGRwLUNvbnRleHRBY3RpdmUJWzFdIE5VTEwJCU9QVElPTkFMLAoJcGRwLVR5cGUJCVsyXSBQRFAtVHlwZSwKCXBkcC1BZGRyZXNzCVszXSBQRFAtQWRkcmVzcwlPUFRJT05BTCwKCWFwbi1TdWJzY3JpYmVkCVs0XSBBUE4JCU9QVElPTkFMLAoJYXBuLUluVXNlCQlbNV0gQVBOCQlPUFRJT05BTCwKCW5zYXBpCQlbNl0gTlNBUEkJCU9QVElPTkFMLAoJdHJhbnNhY3Rpb25JZAlbN10gVHJhbnNhY3Rpb25JZAlPUFRJT05BTCwKCXRlaWQtRm9yR25BbmRHcAlbOF0gVEVJRAkJT1BUSU9OQUwsCgl0ZWlkLUZvckl1CVs5XSBURUlECQlPUFRJT05BTCwKCWdnc24tQWRkcmVzcwlbMTBdIEdTTi1BZGRyZXNzIAlPUFRJT05BTCwKCXFvcy1TdWJzY3JpYmVkCVsxMV0gRXh0LVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMLAoJcW9zLVJlcXVlc3RlZAlbMTJdIEV4dC1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTCwKCXFvcy1OZWdvdGlhdGVkCVsxM10gRXh0LVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMLAoJY2hhcmdpbmdJZAlbMTRdIEdQUlNDaGFyZ2luZ0lECU9QVElPTkFMLAoJY2hhcmdpbmdDaGFyYWN0ZXJpc3RpY3MJWzE1XSBDaGFyZ2luZ0NoYXJhY3RlcmlzdGljcwlPUFRJT05BTCwKCXJuYy1BZGRyZXNzCVsxNl0gR1NOLUFkZHJlc3MJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzE3XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4sCglxb3MyLVN1YnNjcmliZWQJWzE4XSBFeHQyLVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMLAoJLS0gcW9zMi1TdWJzY3JpYmVkIG1heSBiZSBwcmVzZW50IG9ubHkgaWYgcW9zLVN1YnNjcmliZWQgaXMgcHJlc2VudC4KCXFvczItUmVxdWVzdGVkCVsxOV0gRXh0Mi1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTCwKCS0tIHFvczItUmVxdWVzdGVkIG1heSBiZSBwcmVzZW50IG9ubHkgaWYgcW9zLVJlcXVlc3RlZCBpcyBwcmVzZW50LgoJcW9zMi1OZWdvdGlhdGVkCVsyMF0gRXh0Mi1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTCwKCS0tIHFvczItTmVnb3RpYXRlZCBtYXkgYmUgcHJlc2VudCBvbmx5IGlmIHFvcy1OZWdvdGlhdGVkIGlzIHByZXNlbnQuCgkJcW9zMy1TdWJzY3JpYmVkCVsyMV0gRXh0My1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTCwKCS0tIHFvczMtU3Vic2NyaWJlZCBtYXkgYmUgcHJlc2VudCBvbmx5IGlmIHFvczItU3Vic2NyaWJlZCBpcyBwcmVzZW50LgoJcW9zMy1SZXF1ZXN0ZWQJWzIyXSBFeHQzLVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMLAoJLS0gcW9zMy1SZXF1ZXN0ZWQgbWF5IGJlIHByZXNlbnQgb25seSBpZiBxb3MyLVJlcXVlc3RlZCBpcyBwcmVzZW50LgoJcW9zMy1OZWdvdGlhdGVkCVsyM10gRXh0My1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTAoJLS0gcW9zMy1OZWdvdGlhdGVkIG1heSBiZSBwcmVzZW50IG9ubHkgaWYgcW9zMi1OZWdvdGlhdGVkIGlzIHByZXNlbnQuCn0KCk5TQVBJIDo6PSBJTlRFR0VSICgwLi4xNSkKLS0JVGhpcyB0eXBlIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIE5ldHdvcmsgbGF5ZXIgU2VydmljZSBBY2Nlc3MgUG9pbnQKClRyYW5zYWN0aW9uSWQgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uMikpCi0tCVRoaXMgdHlwZSBjYXJyaWVzIHRoZSB2YWx1ZSBwYXJ0IG9mIHRoZSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHdoaWNoIGlzIHVzZWQgaW4gdGhlIAotLQlzZXNzaW9uIG1hbmFnZW1lbnQgbWVzc2FnZXMgb24gdGhlIGFjY2VzcyBpbnRlcmZhY2UuIFRoZSBlbmNvZGluZyBpcyBkZWZpbmVkIGluIAotLQkzR1BQIFRTIDI0LjAwOAoKVEVJRCA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg0KSkKLS0JVGhpcyB0eXBlIGNhcnJpZXMgdGhlIHZhbHVlIHBhcnQgb2YgdGhlIFR1bm5lbCBFbmRwb2ludCBJZGVudGlmaWVyIHdoaWNoIGlzIHVzZWQgdG8gCi0tCWRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IHR1bm5lbHMgYmV0d2VlbiB0aGUgc2FtZSBwYWlyIG9mIGVudGl0aWVzIHdoaWNoIGNvbW11bmljYXRlIAotLQl1c2luZyB0aGUgR1BSUyBUdW5uZWxsaW5nIFByb3RvY29sIFRoZSBlbmNvZGluZyBpcyBkZWZpbmVkIGluIDNHUFAgVFMgMjkuMDYwLgoKR1BSU0NoYXJnaW5nSUQgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoNCkpCi0tCVRoZSBDaGFyZ2luZyBJRCBpcyBhIHVuaXF1ZSBmb3VyIG9jdGV0IHZhbHVlIGdlbmVyYXRlZCBieSB0aGUgR0dTTiB3aGVuIAotLQlhIFBEUCBDb250ZXh0IGlzIGFjdGl2YXRlZC4gQSBDaGFyZ2luZyBJRCBpcyBnZW5lcmF0ZWQgZm9yIGVhY2ggYWN0aXZhdGVkIGNvbnRleHQuCi0tCVRoZSBlbmNvZGluZyBpcyBkZWZpbmVkIGluIDNHUFAgVFMgMjkuMDYwLgoKTm90UmVhY2hhYmxlUmVhc29uIDo6PSBFTlVNRVJBVEVEIHsKCW1zUHVyZ2VkICgwKSwKCWltc2lEZXRhY2hlZCAoMSksCglyZXN0cmljdGVkQXJlYSAoMiksCglub3RSZWdpc3RlcmVkICgzKX0KCi0tIGFueSB0aW1lIGludGVycm9nYXRpb24gaW5mbyB0eXBlcwoKQW55VGltZUludGVycm9nYXRpb25BcmcgOjo9IFNFUVVFTkNFIHsKCXN1YnNjcmliZXJJZGVudGl0eQlbMF0gU3Vic2NyaWJlcklkZW50aXR5LAoJcmVxdWVzdGVkSW5mbwlbMV0gUmVxdWVzdGVkSW5mbywKCWdzbVNDRi1BZGRyZXNzCVszXSBJU0ROLUFkZHJlc3NTdHJpbmcsCglleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KCkFueVRpbWVJbnRlcnJvZ2F0aW9uUmVzIDo6PSBTRVFVRU5DRSB7CglzdWJzY3JpYmVySW5mbwlTdWJzY3JpYmVySW5mbywKCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgotLSBhbnkgdGltZSBpbmZvcm1hdGlvbiBoYW5kbGluZyB0eXBlcwoKQW55VGltZVN1YnNjcmlwdGlvbkludGVycm9nYXRpb25BcmcgOjo9IFNFUVVFTkNFIHsKCXN1YnNjcmliZXJJZGVudGl0eQlbMF0gU3Vic2NyaWJlcklkZW50aXR5LAoJcmVxdWVzdGVkU3Vic2NyaXB0aW9uSW5mbwlbMV0gUmVxdWVzdGVkU3Vic2NyaXB0aW9uSW5mbywKCWdzbVNDRi1BZGRyZXNzCVsyXSBJU0ROLUFkZHJlc3NTdHJpbmcsCglleHRlbnNpb25Db250YWluZXIJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCWxvbmdGVE4tU3VwcG9ydGVkCVs0XQlOVUxMCQlPUFRJT05BTCwKCS4uLn0KCkFueVRpbWVTdWJzY3JpcHRpb25JbnRlcnJvZ2F0aW9uUmVzIDo6PSBTRVFVRU5DRSB7CgljYWxsRm9yd2FyZGluZ0RhdGEJWzFdIENhbGxGb3J3YXJkaW5nRGF0YQlPUFRJT05BTCwKCWNhbGxCYXJyaW5nRGF0YQlbMl0gQ2FsbEJhcnJpbmdEYXRhCU9QVElPTkFMLAoJb2RiLUluZm8JCVszXSBPREItSW5mbwlPUFRJT05BTCwKCWNhbWVsLVN1YnNjcmlwdGlvbkluZm8JWzRdIENBTUVMLVN1YnNjcmlwdGlvbkluZm8JT1BUSU9OQUwsCglzdXBwb3J0ZWRWTFItQ0FNRUwtUGhhc2VzCVs1XSBTdXBwb3J0ZWRDYW1lbFBoYXNlcwlPUFRJT05BTCwKCXN1cHBvcnRlZFNHU04tQ0FNRUwtUGhhc2VzCVs2XSBTdXBwb3J0ZWRDYW1lbFBoYXNlcwlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbN10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uICwKCW9mZmVyZWRDYW1lbDRDU0lzSW5WTFIJWzhdIE9mZmVyZWRDYW1lbDRDU0lzCU9QVElPTkFMLAoJb2ZmZXJlZENhbWVsNENTSXNJblNHU04JWzldIE9mZmVyZWRDYW1lbDRDU0lzCU9QVElPTkFMLAoJbXNpc2RuLUJTLUxpc3QJWzEwXSBNU0lTRE4tQlMtTGlzdAlPUFRJT05BTCB9CgpSZXF1ZXN0ZWRTdWJzY3JpcHRpb25JbmZvIDo6PSBTRVFVRU5DRSB7CglyZXF1ZXN0ZWRTUy1JbmZvCVsxXSBTUy1Gb3JCUy1Db2RlCU9QVElPTkFMLAoJb2RiCQkJWzJdIE5VTEwJCU9QVElPTkFMLAoJcmVxdWVzdGVkQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbwlbM10gUmVxdWVzdGVkQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbwkJT1BUSU9OQUwsCglzdXBwb3J0ZWRWTFItQ0FNRUwtUGhhc2VzCVs0XSBOVUxMCQlPUFRJT05BTCwKCXN1cHBvcnRlZFNHU04tQ0FNRUwtUGhhc2VzCVs1XSBOVUxMCQlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbNl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uLAoJYWRkaXRpb25hbFJlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8KCQkJCVs3XSBBZGRpdGlvbmFsUmVxdWVzdGVkQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbwoJCQkJCQkJT1BUSU9OQUwsCgltc2lzZG4tQlMtTGlzdAlbOF0gTlVMTAkJT1BUSU9OQUwgfQoKTVNJU0ROLUJTLUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mTVNJU0ROKSBPRgoJCQkJTVNJU0ROLUJTCgptYXhOdW1PZk1TSVNETiAgSU5URUdFUiA6Oj0gNTAKCgpNU0lTRE4tQlMgOjo9IFNFUVVFTkNFIHsKCW1zaXNkbgkJCUlTRE4tQWRkcmVzc1N0cmluZywJCgliYXNpY1NlcnZpY2VMaXN0CVswXQlCYXNpY1NlcnZpY2VMaXN0CU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVsxXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpSZXF1ZXN0ZWRDQU1FTC1TdWJzY3JpcHRpb25JbmZvIDo6PSBFTlVNRVJBVEVEIHsKCW8tQ1NJCQkoMCksCgl0LUNTSQkJKDEpLAoJdnQtQ1NJCQkoMiksCgl0aWYtQ1NJCQkoMyksCglncHJzLUNTSQkJKDQpLAoJbW8tc21zLUNTSQkoNSksCglzcy1DU0kJCSg2KSwKCW0tQ1NJCQkoNyksCglkLWNzaQkJKDgpfQoKQWRkaXRpb25hbFJlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8gOjo9IEVOVU1FUkFURUQgewoJbXQtc21zLUNTSQkoMCksCgltZy1jc2kJCSgxKSwKCW8tSU0tQ1NJIAkJKDIpLAoJZC1JTS1DU0kJCSgzKSwKCXZ0LUlNLUNTSQkgCSg0KSwKCS4uLn0KLS0JZXhjZXB0aW9uIGhhbmRsaW5nOiB1bmtub3duIHZhbHVlcyBzaGFsbCBiZSBkaXNjYXJkZWQgYnkgdGhlIHJlY2VpdmVyLgoKQ2FsbEZvcndhcmRpbmdEYXRhIDo6PSBTRVFVRU5DRSB7Cglmb3J3YXJkaW5nRmVhdHVyZUxpc3QJRXh0LUZvcndGZWF0dXJlTGlzdCwKCW5vdGlmaWNhdGlvblRvQ1NFCU5VTEwJCQlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbMF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4ufQoKQ2FsbEJhcnJpbmdEYXRhIDo6PSBTRVFVRU5DRSB7CgljYWxsQmFycmluZ0ZlYXR1cmVMaXN0CUV4dC1DYWxsQmFyRmVhdHVyZUxpc3QsCglwYXNzd29yZAkJUGFzc3dvcmQJCU9QVElPTkFMLAoJd3JvbmdQYXNzd29yZEF0dGVtcHRzQ291bnRlcglXcm9uZ1Bhc3N3b3JkQXR0ZW1wdHNDb3VudGVyCU9QVElPTkFMLAoJbm90aWZpY2F0aW9uVG9DU0UJTlVMTAkJCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KCldyb25nUGFzc3dvcmRBdHRlbXB0c0NvdW50ZXIgOjo9IElOVEVHRVIgKDAuLjQpCgpPREItSW5mbyA6Oj0gU0VRVUVOQ0UgewoJb2RiLURhdGEJCU9EQi1EYXRhLAoJbm90aWZpY2F0aW9uVG9DU0UJTlVMTAkJCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KCkNBTUVMLVN1YnNjcmlwdGlvbkluZm8gOjo9IFNFUVVFTkNFIHsKCW8tQ1NJCQlbMF0JTy1DU0kJT1BUSU9OQUwsCglvLUJjc21DYW1lbFREUC1Dcml0ZXJpYUxpc3QJWzFdCU8tQmNzbUNhbWVsVERQQ3JpdGVyaWFMaXN0CU9QVElPTkFMLCAKCWQtQ1NJCQlbMl0JRC1DU0kJT1BUSU9OQUwsCgl0LUNTSQkJWzNdCVQtQ1NJCU9QVElPTkFMLAoJdC1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYUxpc3QJWzRdCVQtQkNTTS1DQU1FTC1URFAtQ3JpdGVyaWFMaXN0CU9QVElPTkFMLAoJdnQtQ1NJCQlbNV0JVC1DU0kJT1BUSU9OQUwsCgl2dC1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYUxpc3QJWzZdCVQtQkNTTS1DQU1FTC1URFAtQ3JpdGVyaWFMaXN0CU9QVElPTkFMLAoJdGlmLUNTSQkJWzddCU5VTEwJCU9QVElPTkFMLAoJdGlmLUNTSS1Ob3RpZmljYXRpb25Ub0NTRQlbOF0JTlVMTAkJT1BUSU9OQUwsCglncHJzLUNTSQkJWzldCUdQUlMtQ1NJCU9QVElPTkFMLAoJbW8tc21zLUNTSQlbMTBdCVNNUy1DU0kJT1BUSU9OQUwsCglzcy1DU0kJCVsxMV0JU1MtQ1NJCU9QVElPTkFMLAoJbS1DU0kJCVsxMl0JTS1DU0kJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzEzXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4sCglzcGVjaWZpY0NTSURlbGV0ZWRMaXN0CVsxNF0JU3BlY2lmaWNDU0ktV2l0aGRyYXcJT1BUSU9OQUwsCgltdC1zbXMtQ1NJCVsxNV0JU01TLUNTSQlPUFRJT05BTCwKCW10LXNtc0NBTUVMVERQLUNyaXRlcmlhTGlzdAlbMTZdCU1ULXNtc0NBTUVMVERQLUNyaXRlcmlhTGlzdAlPUFRJT05BTCwKCW1nLWNzaQkJWzE3XQlNRy1DU0kJT1BUSU9OQUwsCglvLUlNLUNTSQkJWzE4XSBPLUNTSQlPUFRJT05BTCwKCW8tSU0tQmNzbUNhbWVsVERQLUNyaXRlcmlhTGlzdAlbMTldIE8tQmNzbUNhbWVsVERQQ3JpdGVyaWFMaXN0CU9QVElPTkFMLAoJZC1JTS1DU0kJCVsyMF0gRC1DU0kJT1BUSU9OQUwsCgl2dC1JTS1DU0kJCVsyMV0gVC1DU0kJT1BUSU9OQUwsCgl2dC1JTS1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYUxpc3QJWzIyXQlULUJDU00tQ0FNRUwtVERQLUNyaXRlcmlhTGlzdAlPUFRJT05BTAoJfQoKQW55VGltZU1vZGlmaWNhdGlvbkFyZyA6Oj0gU0VRVUVOQ0UgewoJc3Vic2NyaWJlcklkZW50aXR5CVswXQlTdWJzY3JpYmVySWRlbnRpdHksCglnc21TQ0YtQWRkcmVzcwlbMV0JSVNETi1BZGRyZXNzU3RyaW5nLAoJbW9kaWZpY2F0aW9uUmVxdWVzdEZvci1DRi1JbmZvCVsyXQlNb2RpZmljYXRpb25SZXF1ZXN0Rm9yLUNGLUluZm8gT1BUSU9OQUwsCgltb2RpZmljYXRpb25SZXF1ZXN0Rm9yLUNCLUluZm8JWzNdCU1vZGlmaWNhdGlvblJlcXVlc3RGb3ItQ0ItSW5mbyBPUFRJT05BTCwKCW1vZGlmaWNhdGlvblJlcXVlc3RGb3ItQ1NJCVs0XQlNb2RpZmljYXRpb25SZXF1ZXN0Rm9yLUNTSQlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbNV0JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJbG9uZ0ZUTi1TdXBwb3J0ZWQJWzZdCU5VTEwJCU9QVElPTkFMLAoJLi4uLAoJbW9kaWZpY2F0aW9uUmVxdWVzdEZvci1PREItZGF0YQlbN10JTW9kaWZpY2F0aW9uUmVxdWVzdEZvci1PREItZGF0YSBPUFRJT05BTCwKCW1vZGlmaWNhdGlvblJlcXVlc3RGb3ItSVAtU00tR1ctRGF0YQlbOF0JTW9kaWZpY2F0aW9uUmVxdWVzdEZvci1JUC1TTS1HVy1EYXRhIE9QVElPTkFMIH0KCkFueVRpbWVNb2RpZmljYXRpb25SZXMgOjo9IFNFUVVFTkNFIHsKCXNzLUluZm9Gb3ItQ1NFCVswXQlFeHQtU1MtSW5mb0Zvci1DU0UJT1BUSU9OQUwsCgljYW1lbC1TdWJzY3JpcHRpb25JbmZvCVsxXQlDQU1FTC1TdWJzY3JpcHRpb25JbmZvCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4sCglvZGItSW5mbwkJWzNdCU9EQi1JbmZvCU9QVElPTkFMIH0KCk1vZGlmaWNhdGlvblJlcXVlc3RGb3ItQ0YtSW5mbyA6Oj0gU0VRVUVOQ0UgewoJc3MtQ29kZQkJWzBdCVNTLUNvZGUsCgliYXNpY1NlcnZpY2UJWzFdCUV4dC1CYXNpY1NlcnZpY2VDb2RlCU9QVElPTkFMLAoJc3MtU3RhdHVzCQlbMl0JRXh0LVNTLVN0YXR1cwlPUFRJT05BTCwKCWZvcndhcmRlZFRvTnVtYmVyCVszXQlBZGRyZXNzU3RyaW5nCU9QVElPTkFMLAoJZm9yd2FyZGVkVG9TdWJhZGRyZXNzCVs0XQlJU0ROLVN1YmFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCglub1JlcGx5Q29uZGl0aW9uVGltZQlbNV0JRXh0LU5vUmVwQ29uZFRpbWUJT1BUSU9OQUwsCgltb2RpZnlOb3RpZmljYXRpb25Ub0NTRQlbNl0JTW9kaWZpY2F0aW9uSW5zdHJ1Y3Rpb24JT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzddCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLn0KCk1vZGlmaWNhdGlvblJlcXVlc3RGb3ItQ0ItSW5mbyA6Oj0gU0VRVUVOQ0UgewoJc3MtQ29kZQkJWzBdCVNTLUNvZGUsCgliYXNpY1NlcnZpY2UJWzFdCUV4dC1CYXNpY1NlcnZpY2VDb2RlCU9QVElPTkFMLAoJc3MtU3RhdHVzCQlbMl0JRXh0LVNTLVN0YXR1cwlPUFRJT05BTCwKCXBhc3N3b3JkCQlbM10JUGFzc3dvcmQJT1BUSU9OQUwsCgl3cm9uZ1Bhc3N3b3JkQXR0ZW1wdHNDb3VudGVyCVs0XQlXcm9uZ1Bhc3N3b3JkQXR0ZW1wdHNDb3VudGVyCU9QVElPTkFMLAoJbW9kaWZ5Tm90aWZpY2F0aW9uVG9DU0UJWzVdCU1vZGlmaWNhdGlvbkluc3RydWN0aW9uCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVs2XQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpNb2RpZmljYXRpb25SZXF1ZXN0Rm9yLU9EQi1kYXRhIDo6PSBTRVFVRU5DRSB7CglvZGItZGF0YQkJWzBdCU9EQi1EYXRhCU9QVElPTkFMLAoJbW9kaWZ5Tm90aWZpY2F0aW9uVG9DU0UJWzFdCU1vZGlmaWNhdGlvbkluc3RydWN0aW9uCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpNb2RpZmljYXRpb25SZXF1ZXN0Rm9yLUNTSSA6Oj0gU0VRVUVOQ0UgewoJcmVxdWVzdGVkQ2FtZWwtU3Vic2NyaXB0aW9uSW5mbwlbMF0JUmVxdWVzdGVkQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbywKCW1vZGlmeU5vdGlmaWNhdGlvblRvQ1NFCVsxXQlNb2RpZmljYXRpb25JbnN0cnVjdGlvbglPUFRJT05BTCwKCW1vZGlmeUNTSS1TdGF0ZQlbMl0JTW9kaWZpY2F0aW9uSW5zdHJ1Y3Rpb24JT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzNdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiwKCWFkZGl0aW9uYWxSZXF1ZXN0ZWRDQU1FTC1TdWJzY3JpcHRpb25JbmZvCgkJCQlbNF0gQWRkaXRpb25hbFJlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8KCQkJCQkJCU9QVElPTkFMIH0KLS0gcmVxdWVzdGVkQ2FtZWwtU3Vic2NyaXB0aW9uSW5mbyBzaGFsbCBiZSBkaXNjYXJkZWQgaWYKLS0gYWRkaXRpb25hbFJlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8gaXMgcmVjZWl2ZWQKCk1vZGlmaWNhdGlvblJlcXVlc3RGb3ItSVAtU00tR1ctRGF0YSA6Oj0gU0VRVUVOQ0UgewoJbW9kaWZ5UmVnaXN0cmF0aW9uU3RhdHVzCVswXQlNb2RpZmljYXRpb25JbnN0cnVjdGlvbglPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbMV0JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4ufQoKTW9kaWZpY2F0aW9uSW5zdHJ1Y3Rpb24gOjo9IEVOVU1FUkFURUQgewoJZGVhY3RpdmF0ZQkoMCksCglhY3RpdmF0ZQkJKDEpfQoKLS0gc3Vic2NyaWJlciBkYXRhIG1vZGlmaWNhdGlvbiBub3RpZmljYXRpb24gdHlwZXMKCk5vdGVTdWJzY3JpYmVyRGF0YU1vZGlmaWVkQXJnIDo6PSBTRVFVRU5DRSB7CglpbXNpCQkJSU1TSSwKCW1zaXNkbgkJSVNETi1BZGRyZXNzU3RyaW5nLAoJZm9yd2FyZGluZ0luZm9Gb3ItQ1NFCVswXSBFeHQtRm9yd2FyZGluZ0luZm9Gb3ItQ1NFCU9QVElPTkFMLAoJY2FsbEJhcnJpbmdJbmZvRm9yLUNTRQlbMV0gRXh0LUNhbGxCYXJyaW5nSW5mb0Zvci1DU0UJT1BUSU9OQUwsCglvZGItSW5mbwkJWzJdIE9EQi1JbmZvCU9QVElPTkFMLAoJY2FtZWwtU3Vic2NyaXB0aW9uSW5mbwlbM10gQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbwlPUFRJT05BTCwKCWFsbEluZm9ybWF0aW9uU2VudAlbNF0gTlVMTAkJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4ufQoKTm90ZVN1YnNjcmliZXJEYXRhTW9kaWZpZWRSZXMgOjo9IFNFUVVFTkNFIHsKCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgotLSBtb2JpbGl0eSBtYW5hZ2VtZW50IGV2ZW50IG5vdGlmaWNhdGlvb24gaW5mbyB0eXBlcwoKTm90ZU1NLUV2ZW50QXJnOjo9IFNFUVVFTkNFIHsKCXNlcnZpY2VLZXkJU2VydmljZUtleSwKCWV2ZW50TWV0CQlbMF0JTU0tQ29kZSwKCWltc2kJCQlbMV0JSU1TSSwKCW1zaXNkbgkJWzJdCUlTRE4tQWRkcmVzc1N0cmluZywKCWxvY2F0aW9uSW5mb3JtYXRpb24JWzNdCUxvY2F0aW9uSW5mb3JtYXRpb24JT1BUSU9OQUwsCglzdXBwb3J0ZWRDQU1FTFBoYXNlcwlbNV0JU3VwcG9ydGVkQ2FtZWxQaGFzZXMJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzZdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiwKCWxvY2F0aW9uSW5mb3JtYXRpb25HUFJTCVs3XQlMb2NhdGlvbkluZm9ybWF0aW9uR1BSUwlPUFRJT05BTCwKCW9mZmVyZWRDYW1lbDRGdW5jdGlvbmFsaXRpZXMJWzhdIE9mZmVyZWRDYW1lbDRGdW5jdGlvbmFsaXRpZXMJT1BUSU9OQUwKfQoKTm90ZU1NLUV2ZW50UmVzIDo6PSBTRVFVRU5DRSB7CglleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyIAlPUFRJT05BTCwKCS4uLn0KCkV4dC1TUy1JbmZvRm9yLUNTRSA6Oj0gQ0hPSUNFIHsKCWZvcndhcmRpbmdJbmZvRm9yLUNTRQlbMF0gRXh0LUZvcndhcmRpbmdJbmZvRm9yLUNTRSwKCWNhbGxCYXJyaW5nSW5mb0Zvci1DU0UJWzFdIEV4dC1DYWxsQmFycmluZ0luZm9Gb3ItQ1NFCgl9CgpFeHQtRm9yd2FyZGluZ0luZm9Gb3ItQ1NFIDo6PSBTRVFVRU5DRSB7Cglzcy1Db2RlCQlbMF0JU1MtQ29kZSwKCWZvcndhcmRpbmdGZWF0dXJlTGlzdAlbMV0JRXh0LUZvcndGZWF0dXJlTGlzdCwKCW5vdGlmaWNhdGlvblRvQ1NFCVsyXQlOVUxMCQlPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbM10JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4ufQoKRXh0LUNhbGxCYXJyaW5nSW5mb0Zvci1DU0UgOjo9IFNFUVVFTkNFIHsKCXNzLUNvZGUJCVswXQlTUy1Db2RlLAoJY2FsbEJhcnJpbmdGZWF0dXJlTGlzdAlbMV0JRXh0LUNhbGxCYXJGZWF0dXJlTGlzdCwKCXBhc3N3b3JkCQlbMl0JUGFzc3dvcmQJT1BUSU9OQUwsCgl3cm9uZ1Bhc3N3b3JkQXR0ZW1wdHNDb3VudGVyCVszXQlXcm9uZ1Bhc3N3b3JkQXR0ZW1wdHNDb3VudGVyCU9QVElPTkFMLAoJbm90aWZpY2F0aW9uVG9DU0UJWzRdCU5VTEwJCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVs1XQlFeHRlbnNpb25Db250YWluZXIgCU9QVElPTkFMLAoJLi4ufQoKRU5ECgo=