LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBSb21hbmlhbgogKgogKiBDb3B5cmlnaHQgMjAwMiBBbGV4YW5kcmUgSnVsbGlhcmQgZm9yIENvZGV3ZWF2ZXJzCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCiNwcmFnbWEgY29kZV9wYWdlKDEyNTApCgpTVFJJTkdUQUJMRSBMQU5HVUFHRSBMQU5HX1JPTUFOSUFOLCBTVUJMQU5HX0RFRkFVTFQKewogIExPQ0FMRV9GT05UU0lHTkFUVVJFIEwiXHgwMDI3XHg4MDAwXHgzODA4XHgwMDAwXHgwMDAwXHgwMDAwXHgwMDAwXHgwMDAwXHgwMDAyXHgwMDAwXHgwMDAwXHgwNDAwXHgwMDEyXHgwMDAwXHgwMDAwXHhjNWQ0IgogIExPQ0FMRV9JQ0FMRU5EQVJUWVBFICIxIgogIExPQ0FMRV9JQ0VOVFVSWSAiMSIKICBMT0NBTEVfSUNPVU5UUlkgIjQwIgogIExPQ0FMRV9JQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUNVUlJFTkNZICIzIgogIExPQ0FMRV9JREFURSAiMSIKICBMT0NBTEVfSURBWUxaRVJPICIxIgogIExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSAiMTI1MCIKICBMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSAiODUyIgogIExPQ0FMRV9JREVGQVVMVENPVU5UUlkgIjQwIgogIExPQ0FMRV9JREVGQVVMVEVCQ0RJQ0NPREVQQUdFICIyMDg4MCIKICBMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSAiMDQxOCIKICBMT0NBTEVfSURFRkFVTFRNQUNDT0RFUEFHRSAiMTAwMjkiCiAgTE9DQUxFX0lESUdJVFMgIjIiCiAgTE9DQUxFX0lESUdJVFNVQlNUSVRVVElPTiAiMSIKICBMT0NBTEVfSUZJUlNUREFZT0ZXRUVLICIwIgogIExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSICIwIgogIExPQ0FMRV9JSU5UTENVUlJESUdJVFMgIjIiCiAgTE9DQUxFX0lMQU5HVUFHRSAiMDQxOCIKICBMT0NBTEVfSUxEQVRFICIxIgogIExPQ0FMRV9JTFpFUk8gIjEiCiAgTE9DQUxFX0lNRUFTVVJFICIwIgogIExPQ0FMRV9JTU9OTFpFUk8gIjEiCiAgTE9DQUxFX0lORUdDVVJSICI4IgogIExPQ0FMRV9JTkVHTlVNQkVSICIxIgogIExPQ0FMRV9JTkVHU0VQQllTUEFDRSAiMSIKICBMT0NBTEVfSU5FR1NJR05QT1NOICIxIgogIExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMgIjAiCiAgTE9DQUxFX0lPUFRJT05BTENBTEVOREFSICIwIgogIExPQ0FMRV9JUEFQRVJTSVpFICI5IgogIExPQ0FMRV9JUE9TU0VQQllTUEFDRSAiMSIKICBMT0NBTEVfSVBPU1NJR05QT1NOICIxIgogIExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMgIjAiCiAgTE9DQUxFX0lUSU1FICIxIgogIExPQ0FMRV9JVElNRU1BUktQT1NOICIwIgogIExPQ0FMRV9JVExaRVJPICIxIgogIExPQ0FMRV9TMTE1OSAiIgogIExPQ0FMRV9TMjM1OSAiIgogIExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUgIlJPTSIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUxICJMIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTIgIk1hIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTMgIk1pIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTQgIkoiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSAiViIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU2ICJTIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTcgIkQiCiAgTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSAiUk9NIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSAiaWFuLiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIgImZlYi4iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzICJtYXIuIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCAiYXByLiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUgIm1haS4iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2ICJpdW4uIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNyAiaXVsLiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTggImF1Zy4iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5ICJzZXAuIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAgIm9jdC4iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSAibm92LiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyICJkZWMuIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU0NPVU5UUlkgIlJvbWFuaWEiCiAgTE9DQUxFX1NDVVJSRU5DWSAibGVpIgogIExPQ0FMRV9TREFURSAiLiIKICBMT0NBTEVfU0RBWU5BTUUxICJsdW5pIgogIExPQ0FMRV9TREFZTkFNRTIgIm1hcv5pIgogIExPQ0FMRV9TREFZTkFNRTMgIm1pZXJjdXJpIgogIExPQ0FMRV9TREFZTkFNRTQgImpvaSIKICBMT0NBTEVfU0RBWU5BTUU1ICJ2aW5lcmkiCiAgTE9DQUxFX1NEQVlOQU1FNiAic+JtYuN04yIKICBMT0NBTEVfU0RBWU5BTUU3ICJkdW1pbmlj4yIKICBMT0NBTEVfU0RFQ0lNQUwgIiwiCiAgTE9DQUxFX1NFTkdDT1VOVFJZICJSb21hbmlhIgogIExPQ0FMRV9TRU5HQ1VSUk5BTUUgIlJvbWFuaWFuIExldSIKICBMT0NBTEVfU0VOR0xBTkdVQUdFICJSb21hbmlhbiIKICBMT0NBTEVfU0dST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NJTlRMU1lNQk9MICJST0wiCiAgTE9DQUxFX1NJU08zMTY2Q1RSWU5BTUUgIlJPIgogIExPQ0FMRV9TSVNPNjM5TEFOR05BTUUgInJvIgogIExPQ0FMRV9TTEFOR1VBR0UgIlJvbWFuaWFuIgogIExPQ0FMRV9TTElTVCAiOyIKICBMT0NBTEVfU0xPTkdEQVRFICJkIE1NTU0geXl5eSIKICBMT0NBTEVfU01PTkRFQ0lNQUxTRVAgIiwiCiAgTE9DQUxFX1NNT05HUk9VUElORyAiMzswIgogIExPQ0FMRV9TTU9OVEhOQU1FMSAiaWFudWFyaWUiCiAgTE9DQUxFX1NNT05USE5BTUUyICJmZWJydWFyaWUiCiAgTE9DQUxFX1NNT05USE5BTUUzICJtYXJ0aWUiCiAgTE9DQUxFX1NNT05USE5BTUU0ICJhcHJpbGllIgogIExPQ0FMRV9TTU9OVEhOQU1FNSAibWFpIgogIExPQ0FMRV9TTU9OVEhOQU1FNiAiaXVuaWUiCiAgTE9DQUxFX1NNT05USE5BTUU3ICJpdWxpZSIKICBMT0NBTEVfU01PTlRITkFNRTggImF1Z3VzdCIKICBMT0NBTEVfU01PTlRITkFNRTkgInNlcHRlbWJyaWUiCiAgTE9DQUxFX1NNT05USE5BTUUxMCAib2N0b21icmllIgogIExPQ0FMRV9TTU9OVEhOQU1FMTEgIm5vaWVtYnJpZSIKICBMT0NBTEVfU01PTlRITkFNRTEyICJkZWNlbWJyaWUiCiAgTE9DQUxFX1NNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAgIi4iCiAgTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSAiUm9t4m5pYSIKICBMT0NBTEVfU05BVElWRUNVUlJOQU1FICJMZXUiCiAgTE9DQUxFX1NOQVRJVkVESUdJVFMgIjAxMjM0NTY3ODkiCiAgTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSAicm9t4m7jIgogIExPQ0FMRV9TTkVHQVRJVkVTSUdOICItIgogIExPQ0FMRV9TUE9TSVRJVkVTSUdOICIiCiAgTE9DQUxFX1NTSE9SVERBVEUgImRkLk1NLnl5eXkiCiAgTE9DQUxFX1NTT1JUTkFNRSAiRGVmYXVsdCIKICBMT0NBTEVfU1RIT1VTQU5EICIuIgogIExPQ0FMRV9TVElNRSAiOiIKICBMT0NBTEVfU1RJTUVGT1JNQVQgIkhIOm1tOnNzIgogIExPQ0FMRV9TWUVBUk1PTlRIICJNTU1NIHl5eXkiCn0K