LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBGYXJzaQogKgogKiBDb3B5cmlnaHQgMjAwMiBBbGV4YW5kcmUgSnVsbGlhcmQgZm9yIENvZGVXZWF2ZXJzCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNwcmFnbWEgY29kZV9wYWdlKDEyNTYpCgpTVFJJTkdUQUJMRSBMQU5HVUFHRSBMQU5HX0ZBUlNJLCBTVUJMQU5HX0RFRkFVTFQKewogIExPQ0FMRV9GT05UU0lHTkFUVVJFIEwiXHg2MGFmXHg4MDAwXHgzODQ4XHgxMDAwXHgwMDA4XHgwMDAwXHgwMDAwXHgwODAwXHgwMDQwXHgwMDAwXHgwMDAwXHgyMDAwXHgwMDQwXHgwMDAwXHgwMDAwXHgyMDA4IgogIExPQ0FMRV9JQ0FMRU5EQVJUWVBFICIyIgogIExPQ0FMRV9JQ0VOVFVSWSAiMSIKICBMT0NBTEVfSUNPVU5UUlkgIjk4MSIKICBMT0NBTEVfSUNVUlJESUdJVFMgIjIiCiAgTE9DQUxFX0lDVVJSRU5DWSAiMiIKICBMT0NBTEVfSURBVEUgIjIiCiAgTE9DQUxFX0lEQVlMWkVSTyAiMSIKICBMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UgIjEyNTYiCiAgTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UgIjcyMCIKICBMT0NBTEVfSURFRkFVTFRDT1VOVFJZICI5ODEiCiAgTE9DQUxFX0lERUZBVUxURUJDRElDQ09ERVBBR0UgIjIwNDIwIgogIExPQ0FMRV9JREVGQVVMVExBTkdVQUdFICIwNDI5IgogIExPQ0FMRV9JREVGQVVMVE1BQ0NPREVQQUdFICIxMDAwNCIKICBMT0NBTEVfSURFRkFVTFRVTklYQ09ERVBBR0UgIjY1MDAxIgogIExPQ0FMRV9JRElHSVRTICIyIgogIExPQ0FMRV9JRElHSVRTVUJTVElUVVRJT04gIjAiCiAgTE9DQUxFX0lGSVJTVERBWU9GV0VFSyAiNiIKICBMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiAiMCIKICBMT0NBTEVfSUlOVExDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JTEFOR1VBR0UgIjA0MjkiCiAgTE9DQUxFX0lMREFURSAiMSIKICBMT0NBTEVfSUxaRVJPICIxIgogIExPQ0FMRV9JTUVBU1VSRSAiMCIKICBMT0NBTEVfSU1PTkxaRVJPICIxIgogIExPQ0FMRV9JTkVHQ1VSUiAiMyIKICBMT0NBTEVfSU5FR05VTUJFUiAiMyIKICBMT0NBTEVfSU5FR1NFUEJZU1BBQ0UgIjAiCiAgTE9DQUxFX0lORUdTSUdOUE9TTiAiMiIKICBMT0NBTEVfSU5FR1NZTVBSRUNFREVTICIxIgogIExPQ0FMRV9JTkVVVFJBTCAiMCIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjIiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjIiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMSIKICBMT0NBTEVfSVJFQURJTkdMQVlPVVQgIjAiCiAgTE9DQUxFX0lUSU1FICIwIgogIExPQ0FMRV9JVElNRU1BUktQT1NOICIwIgogIExPQ0FMRV9JVExaRVJPICIxIgogIExPQ0FMRV9TMTE1OSAi3i7ZIgogIExPQ0FMRV9TMjM1OSAiyC7ZIgogIExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUgIklSTiIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUxICLP5tTkyOUiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiAi0+Wg1OTI5SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUzICKN5cfR1OTI5SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU0ICKB5MzU5MjlIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTUgIszj2uUiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiAi1OTI5SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU3ICLt39TkyOUiCiAgTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSAiRkFSIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSAijsfk5u3lIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiAi3ebR7eUiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzICLjx9HTIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCAiwubR7eEiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1ICLj7CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYgIo7mxuQiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3ICKO5sbt5SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTggIsfmyiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTkgItOBysfjyNEiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCAix/XfysjRIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEgIuTmx+PI0SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyICLP08fjyNEiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TQ09VTlRSWSAiSXJhbiIKICBMT0NBTEVfU0NVUlJFTkNZICLR7cfhIgogIExPQ0FMRV9TREFURSAiLyIKICBMT0NBTEVfU0RBWU5BTUUxICLP5tTkyOUiCiAgTE9DQUxFX1NEQVlOQU1FMiAi0+Wg1OTI5SIKICBMT0NBTEVfU0RBWU5BTUUzICKN5cfR1OTI5SIKICBMT0NBTEVfU0RBWU5BTUU0ICKB5MzU5MjlIgogIExPQ0FMRV9TREFZTkFNRTUgIszj2uUiCiAgTE9DQUxFX1NEQVlOQU1FNiAi1OTI5SIKICBMT0NBTEVfU0RBWU5BTUU3ICLt39TkyOUiCiAgTE9DQUxFX1NERUNJTUFMICIuIgogIExPQ0FMRV9TRU5HQ09VTlRSWSAiSXJhbiIKICBMT0NBTEVfU0VOR0NVUlJOQU1FICJJcmFuaWFuIFJpYWwiCiAgTE9DQUxFX1NFTkdMQU5HVUFHRSAiRmFyc2kiCiAgTE9DQUxFX1NHUk9VUElORyAiMzswIgogIExPQ0FMRV9TSU5UTFNZTUJPTCAiSVJSIgogIExPQ0FMRV9TSVNPMzE2NkNUUllOQU1FICJJUiIKICBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FICJmYSIKICBMT0NBTEVfU0xBTkdVQUdFICJGYXJzaSIKICBMT0NBTEVfU0xJU1QgIjsiCiAgTE9DQUxFX1NMT05HREFURSAieXl5eS9NTS9kZCIKICBMT0NBTEVfU01PTkRFQ0lNQUxTRVAgIi8iCiAgTE9DQUxFX1NNT05HUk9VUElORyAiMzswIgogIExPQ0FMRV9TTU9OVEhOQU1FMSAijsfk5u3lIgogIExPQ0FMRV9TTU9OVEhOQU1FMiAi3ebR7eUiCiAgTE9DQUxFX1NNT05USE5BTUUzICLjx9HTIgogIExPQ0FMRV9TTU9OVEhOQU1FNCAiwubR7eEiCiAgTE9DQUxFX1NNT05USE5BTUU1ICLj7CIKICBMT0NBTEVfU01PTlRITkFNRTYgIo7mxuQiCiAgTE9DQUxFX1NNT05USE5BTUU3ICKO5sbt5SIKICBMT0NBTEVfU01PTlRITkFNRTggIsfmyiIKICBMT0NBTEVfU01PTlRITkFNRTkgItOBysfjyNEiCiAgTE9DQUxFX1NNT05USE5BTUUxMCAix/XfysjRIgogIExPQ0FMRV9TTU9OVEhOQU1FMTEgIuTmx+PI0SIKICBMT0NBTEVfU01PTlRITkFNRTEyICLP08fjyNEiCiAgTE9DQUxFX1NNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAgIiwiCiAgTE9DQUxFX1NOQU1FICJmYS1JUiIKICBMT0NBTEVfU05BVElWRUNUUllOQU1FICLH7dHH5CIKICBMT0NBTEVfU05BVElWRUNVUlJOQU1FICLR7MfhIgogIExPQ0FMRV9TTkFUSVZFRElHSVRTIEwiXHgwNmYwXHgwNmYxXHgwNmYyXHgwNmYzXHgwNmY0XHgwNmY1XHgwNmY2XHgwNmY3XHgwNmY4XHgwNmY5IgogIExPQ0FMRV9TTkFUSVZFRElTUExBWU5BTUUgIt3H0dPsICjH7dHH5CkiCiAgTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSAi3cfR0+wiCiAgTE9DQUxFX1NORUdBVElWRVNJR04gIi0iCiAgTE9DQUxFX1NPUEVOVFlQRUxBTkdVQUdFVEFHICJGQVIgIgogIExPQ0FMRV9TUE9TSVRJVkVTSUdOICIiCiAgTE9DQUxFX1NTQ1JJUFRTICJBcmFiOyIKICBMT0NBTEVfU1NIT1JUREFURSAieXl5eS9NTS9kZCIKICBMT0NBTEVfU1NPUlROQU1FICJEZWZhdWx0IgogIExPQ0FMRV9TVEhPVVNBTkQgIiwiCiAgTE9DQUxFX1NUSU1FICI6IgogIExPQ0FMRV9TVElNRUZPUk1BVCAiaGg6bW06c3MgdHQiCiAgTE9DQUxFX1NZRUFSTU9OVEggInl5eXkvTU0iCgogIExHUlBJRF9XRVNURVJOX0VVUk9QRStMR1JQSURfUkVTX0JBU0UgIldlc3Rlcm4gRXVyb3BlIGFuZCBVbml0ZWQgU3RhdGVzIgogIExHUlBJRF9DRU5UUkFMX0VVUk9QRStMR1JQSURfUkVTX0JBU0UgIkNlbnRyYWwgRXVyb3BlIgogIExHUlBJRF9CQUxUSUMrTEdSUElEX1JFU19CQVNFICJCYWx0aWMiCiAgTEdSUElEX0dSRUVLK0xHUlBJRF9SRVNfQkFTRSAiR3JlZWsiCiAgTEdSUElEX0NZUklMTElDK0xHUlBJRF9SRVNfQkFTRSAiQ3lyaWxsaWMiCiAgTEdSUElEX1RVUktJU0grTEdSUElEX1JFU19CQVNFICJUdXJraWMiCiAgTEdSUElEX0pBUEFORVNFK0xHUlBJRF9SRVNfQkFTRSAiSmFwYW5lc2UiCiAgTEdSUElEX0tPUkVBTitMR1JQSURfUkVTX0JBU0UgIktvcmVhbiIKICBMR1JQSURfVFJBRElUSU9OQUxfQ0hJTkVTRStMR1JQSURfUkVTX0JBU0UgIlRyYWRpdGlvbmFsIENoaW5lc2UiCiAgTEdSUElEX1NJTVBMSUZJRURfQ0hJTkVTRStMR1JQSURfUkVTX0JBU0UgIlNpbXBsaWZpZWQgQ2hpbmVzZSIKICBMR1JQSURfVEhBSStMR1JQSURfUkVTX0JBU0UgIlRoYWkiCiAgTEdSUElEX0hFQlJFVytMR1JQSURfUkVTX0JBU0UgIkhlYnJldyIKICBMR1JQSURfQVJBQklDK0xHUlBJRF9SRVNfQkFTRSAiQXJhYmljIiAKICBMR1JQSURfVklFVE5BTUVTRStMR1JQSURfUkVTX0JBU0UgIlZpZXRuYW1lc2UiCiAgTEdSUElEX0lORElDK0xHUlBJRF9SRVNfQkFTRSAiSW5kaWMiCiAgTEdSUElEX0dFT1JHSUFOK0xHUlBJRF9SRVNfQkFTRSAiR2VvcmdpYW4iCiAgTEdSUElEX0FSTUVOSUFOK0xHUlBJRF9SRVNfQkFTRSAiQXJtZW5pYW4iCn0K