LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBSdXNzaWFuCiAqCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZCBmb3IgQ29kZXdlYXZlcnMKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKI3ByYWdtYSBjb2RlX3BhZ2UoMTI1MSkKClNUUklOR1RBQkxFIExBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCnsKICBMT0NBTEVfRk9OVFNJR05BVFVSRSBMIlx4MDIwM1x4ODAwMFx4Mzg0OFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwNFx4MDAwMFx4MDAwMFx4MDAwMlx4MDAwNFx4MDAwMFx4MDAwMFx4MDIwMiIKICBMT0NBTEVfSUNBTEVOREFSVFlQRSAiMSIKICBMT0NBTEVfSUNFTlRVUlkgIjEiCiAgTE9DQUxFX0lDT1VOVFJZICI3IgogIExPQ0FMRV9JQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUNVUlJFTkNZICIxIgogIExPQ0FMRV9JREFURSAiMSIKICBMT0NBTEVfSURBWUxaRVJPICIxIgogIExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSAiMTI1MSIKICBMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSAiODY2IgogIExPQ0FMRV9JREVGQVVMVENPVU5UUlkgIjciCiAgTE9DQUxFX0lERUZBVUxURUJDRElDQ09ERVBBR0UgIjIwODgwIgogIExPQ0FMRV9JREVGQVVMVExBTkdVQUdFICIwNDE5IgogIExPQ0FMRV9JREVGQVVMVE1BQ0NPREVQQUdFICIxMDAwNyIKICBMT0NBTEVfSURJR0lUUyAiMiIKICBMT0NBTEVfSURJR0lUU1VCU1RJVFVUSU9OICIxIgogIExPQ0FMRV9JRklSU1REQVlPRldFRUsgIjAiCiAgTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIgIjAiCiAgTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUxBTkdVQUdFICIwNDE5IgogIExPQ0FMRV9JTERBVEUgIjEiCiAgTE9DQUxFX0lMWkVSTyAiMSIKICBMT0NBTEVfSU1FQVNVUkUgIjAiCiAgTE9DQUxFX0lNT05MWkVSTyAiMSIKICBMT0NBTEVfSU5FR0NVUlIgIjUiCiAgTE9DQUxFX0lORUdOVU1CRVIgIjEiCiAgTE9DQUxFX0lORUdTRVBCWVNQQUNFICIwIgogIExPQ0FMRV9JTkVHU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lORUdTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjAiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIwIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSVRJTUUgIjEiCiAgTE9DQUxFX0lUSU1FTUFSS1BPU04gIjAiCiAgTE9DQUxFX0lUTFpFUk8gIjAiCiAgTE9DQUxFX1MxMTU5ICIiCiAgTE9DQUxFX1MyMzU5ICIiCiAgTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSAiUlVTIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTEgIs/tIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTIgIsLyIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTMgItHwIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTQgItfyIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTUgIs/yIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTYgItHhIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTcgIsLxIgogIExPQ0FMRV9TQUJCUkVWTEFOR05BTUUgIlJVUyIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEgIv/t4iIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIgIvTl4iIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMgIuzg8CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQgIuDv8CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUgIuzg6SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYgIuj+7SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcgIuj+6yIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTggIuDi4yIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTkgIvHl7SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwICLu6vIiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSAi7e7/IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIgIuTl6iIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NDT1VOVFJZICJSdXNzaWEiCiAgTE9DQUxFX1NDVVJSRU5DWSAi8C4iCiAgTE9DQUxFX1NEQVRFICIuIgogIExPQ0FMRV9TREFZTkFNRTEgIu/u7eXk5ev87ejqIgogIExPQ0FMRV9TREFZTkFNRTIgIuLy7vDt6OoiCiAgTE9DQUxFX1NEQVlOQU1FMyAi8fDl5OAiCiAgTE9DQUxFX1NEQVlOQU1FNCAi9+Xy4uXw4yIKICBMT0NBTEVfU0RBWU5BTUU1ICLv//Lt6PbgIgogIExPQ0FMRV9TREFZTkFNRTYgIvHz4eHu8uAiCiAgTE9DQUxFX1NEQVlOQU1FNyAi4u7x6vDl8eXt/OUiCiAgTE9DQUxFX1NERUNJTUFMICIsIgogIExPQ0FMRV9TRU5HQ09VTlRSWSAiUnVzc2lhIgogIExPQ0FMRV9TRU5HQ1VSUk5BTUUgIlJ1c3NpYW4gUnVibGUiCiAgTE9DQUxFX1NFTkdMQU5HVUFHRSAiUnVzc2lhbiIKICBMT0NBTEVfU0dST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NJTlRMU1lNQk9MICJSVVIiCiAgTE9DQUxFX1NJU08zMTY2Q1RSWU5BTUUgIlJVIgogIExPQ0FMRV9TSVNPNjM5TEFOR05BTUUgInJ1IgogIExPQ0FMRV9TTEFOR1VBR0UgIlJ1c3NpYW4iCiAgTE9DQUxFX1NMSVNUICI7IgogIExPQ0FMRV9TTE9OR0RBVEUgImQgTU1NTSB5eXl5ICfjLiciCiAgTE9DQUxFX1NNT05ERUNJTUFMU0VQICIsIgogIExPQ0FMRV9TTU9OR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU01PTlRITkFNRTEgIt/t4uDw/CIKICBMT0NBTEVfU01PTlRITkFNRTIgItTl4vDg6/wiCiAgTE9DQUxFX1NNT05USE5BTUUzICLM4PDyIgogIExPQ0FMRV9TTU9OVEhOQU1FNCAiwO/w5ev8IgogIExPQ0FMRV9TTU9OVEhOQU1FNSAizODpIgogIExPQ0FMRV9TTU9OVEhOQU1FNiAiyP7t/CIKICBMT0NBTEVfU01PTlRITkFNRTcgIsj+6/wiCiAgTE9DQUxFX1NNT05USE5BTUU4ICLA4uPz8fIiCiAgTE9DQUxFX1NNT05USE5BTUU5ICLR5e3y/+Hw/CIKICBMT0NBTEVfU01PTlRITkFNRTEwICLO6vL/4fD8IgogIExPQ0FMRV9TTU9OVEhOQU1FMTEgIs3u/+Hw/CIKICBMT0NBTEVfU01PTlRITkFNRTEyICLE5erg4fD8IgogIExPQ0FMRV9TTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU01PTlRIT1VTQU5EU0VQICKgIgogIExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUgItDu8fHo/yIKICBMT0NBTEVfU05BVElWRUNVUlJOQU1FICLw8+Hr/CIKICBMT0NBTEVfU05BVElWRURJR0lUUyAiMDEyMzQ1Njc4OSIKICBMT0NBTEVfU05BVElWRUxBTkdOQU1FICLw8/Hx6ujpIgogIExPQ0FMRV9TTkVHQVRJVkVTSUdOICItIgogIExPQ0FMRV9TUE9TSVRJVkVTSUdOICIiCiAgTE9DQUxFX1NTSE9SVERBVEUgImRkLk1NLnl5eXkiCiAgTE9DQUxFX1NTT1JUTkFNRSAiRGVmYXVsdCIKICBMT0NBTEVfU1RIT1VTQU5EICKgIgogIExPQ0FMRV9TVElNRSAiOiIKICBMT0NBTEVfU1RJTUVGT1JNQVQgIkg6bW06c3MiCiAgTE9DQUxFX1NZRUFSTU9OVEggIk1NTU0geXl5eSAn4y4nIgp9Cg==