DQojaW5jbHVkZSA8d2luZG93cy5oPg0KDQojaWZkZWYgR0xFV19NWA0KIyAgaWZkZWYgX0RFQlVHDQojICAgIGRlZmluZSBGSUxFTkFNRSAidmlzdWFsaW5mby1teGQuZXhlIg0KIyAgZWxzZQ0KIyAgICBkZWZpbmUgRklMRU5BTUUgInZpc3VhbGluZm8tbXguZXhlIg0KIyAgZW5kaWYNCiNlbHNlDQojICBpZmRlZiBfREVCVUcNCiMgICAgZGVmaW5lIEZJTEVOQU1FICJ2aXN1YWxpbmZvZC5leGUiDQojICBlbHNlDQojICAgIGRlZmluZSBGSUxFTkFNRSAidmlzdWFsaW5mby5leGUiDQojICBlbmRpZg0KI2VuZGlmDQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQovLw0KLy8gVmVyc2lvbg0KLy8NClZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTyANCkZJTEVWRVJTSU9OIDEsIDQsIDAsIDANClBST0RVQ1RWRVJTSU9OIDEsIDQsIDAsIDANCkZJTEVGTEFHU01BU0sgVlNfRkZJX0ZJTEVGTEFHU01BU0sNCiNpZmRlZiBfREVCVUcNCkZJTEVGTEFHUyBWU19GRl9ERUJVRw0KI2Vsc2UNCkZJTEVGTEFHUyAweDBMDQojZW5kaWYNCkZJTEVPUyBWT1NfX1dJTkRPV1MzMg0KRklMRVRZUEUgVkZUX0FQUA0KRklMRVNVQlRZUEUgVkZUMl9VTktOT1dODQpCRUdJTg0KICAgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyINCiAgICBCRUdJTg0KICAgICAgICBCTE9DSyAiMDQwOTA0YjAiDQogICAgICAgIEJFR0lODQogICAgICAgICAgICBWQUxVRSAiQ29tbWVudHMiLCAiVGhlIE9wZW5HTCBFeHRlbnNpb24gV3JhbmdsZXIgTGlicmFyeVxyXG5Db3B5cmlnaHQgKEMpIDIwMDItMjAwNywgTWlsYW4gSWtpdHMgPG1pbGFuIGlraXRzW11pZWVlIG9yZz5cclxuQ29weXJpZ2h0IChDKSAyMDAyLTIwMDcsIE1hcmNlbG8gRS4gTWFnYWxsb24gPG1tYWdhbGxvW11kZWJpYW4gb3JnPlxyXG5Db3B5cmlnaHQgKEMpIDIwMDIsIExldiBQb3ZhbGFoZXZcclxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuIFxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgXHJcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIFxyXG4gIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCBcclxuICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIFxyXG4gIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG4qIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIFxyXG4gIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAnQVMgSVMnIFxyXG5BTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIFxyXG5JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxyXG5BUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgXHJcbkxJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgXHJcbkNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFxyXG5TVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1NcclxuSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU5cclxuQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSlcclxuQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRlxyXG5USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXHJcblxyXG5MaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmVcclxubWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZVxyXG5Tb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgJ0xpY2Vuc2UnKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXNcclxuZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weVxyXG5vZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMFxyXG5BbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6XHJcblxyXG5odHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUJcclxuXHJcbk5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhblxyXG4nQVMgSVMnIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlNcclxuRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EXHJcbkNPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQVxyXG5QQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sXHJcblZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLFxyXG5JbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy5cclxuQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkXHJcbmVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcblxyXG5BZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGlzIHNvZnR3YXJlIHdhcyBjcmVhdGVkIHVzaW5nIHRoZVxyXG5PcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24gcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhc1xyXG5ub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUilcclxudmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLlwwIg0KICAgICAgICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgIlwwIg0KICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJVdGlsaXR5IGZvciBsaXN0aW5nIHBpeGVsZm9ybWF0IGNhcGFiaWxpdGllc1wwIg0KICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgIjEsNCwwLDBcMCINCiAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAidmlzdWFsaW5mb1wwIg0KICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIqkgMjAwMy0yMDA3IE1pbGFuIElraXRzICYgTWFyY2VsbyBNYWdhbGxvblwwIg0KICAgICAgICAgICAgVkFMVUUgIkxlZ2FsVHJhZGVtYXJrcyIsICJcMCINCiAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgRklMRU5BTUUgIlwwIg0KICAgICAgICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsICJcMCINCiAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJUaGUgT3BlbkdMIEV4dGVuc2lvbiBXcmFuZ2xlciBMaWJyYXJ5XDAiDQogICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCAiMSw0LDAsMFwwIg0KICAgICAgICAgICAgVkFMVUUgIlNwZWNpYWxCdWlsZCIsICJcMCINCiAgICAgICAgRU5EDQogICAgRU5EDQogICAgQkxPQ0sgIlZhckZpbGVJbmZvIg0KICAgIEJFR0lODQogICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAxMjAwDQogICAgRU5EDQpFTkQNCg==