LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBVa3JhaW5pYW4KICoKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2RlV2VhdmVycwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojcHJhZ21hIGNvZGVfcGFnZSgxMjUxKQoKU1RSSU5HVEFCTEUgTEFOR1VBR0UgTEFOR19VS1JBSU5JQU4sIFNVQkxBTkdfREVGQVVMVAp7CiAgTE9DQUxFX0ZPTlRTSUdOQVRVUkUgTCJceDAyMDNceDgwMDBceDM4NDhceDAwMDBceDAwMDBceDAwMDBceDAwMDBceDAwMDBceDAwMDRceDAwMDBceDAwMDBceDAwMDJceDAwMDRceDAwMDBceDAwMDBceDAyMDIiCiAgTE9DQUxFX0lDQUxFTkRBUlRZUEUgIjEiCiAgTE9DQUxFX0lDRU5UVVJZICIxIgogIExPQ0FMRV9JQ09VTlRSWSAiMzgwIgogIExPQ0FMRV9JQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUNVUlJFTkNZICIzIgogIExPQ0FMRV9JREFURSAiMSIKICBMT0NBTEVfSURBWUxaRVJPICIxIgogIExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSAiMTI1MSIKICBMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSAiODY2IgogIExPQ0FMRV9JREVGQVVMVENPVU5UUlkgIjM4MCIKICBMT0NBTEVfSURFRkFVTFRFQkNESUNDT0RFUEFHRSAiNTAwIgogIExPQ0FMRV9JREVGQVVMVExBTkdVQUdFICIwNDIyIgogIExPQ0FMRV9JREVGQVVMVE1BQ0NPREVQQUdFICIxMDAxNyIKICBMT0NBTEVfSURFRkFVTFRVTklYQ09ERVBBR0UgIjIxODY2IgogIExPQ0FMRV9JRElHSVRTICIyIgogIExPQ0FMRV9JRElHSVRTVUJTVElUVVRJT04gIjEiCiAgTE9DQUxFX0lGSVJTVERBWU9GV0VFSyAiMCIKICBMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiAiMCIKICBMT0NBTEVfSUlOVExDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JTEFOR1VBR0UgIjA0MjIiCiAgTE9DQUxFX0lMREFURSAiMSIKICBMT0NBTEVfSUxaRVJPICIxIgogIExPQ0FMRV9JTUVBU1VSRSAiMCIKICBMT0NBTEVfSU1PTkxaRVJPICIxIgogIExPQ0FMRV9JTkVHQ1VSUiAiOCIKICBMT0NBTEVfSU5FR05VTUJFUiAiMSIKICBMT0NBTEVfSU5FR1NFUEJZU1BBQ0UgIjEiCiAgTE9DQUxFX0lORUdTSUdOUE9TTiAiMSIKICBMT0NBTEVfSU5FR1NZTVBSRUNFREVTICIwIgogIExPQ0FMRV9JTkVVVFJBTCAiMCIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjAiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSVJFQURJTkdMQVlPVVQgIjAiCiAgTE9DQUxFX0lUSU1FICIxIgogIExPQ0FMRV9JVElNRU1BUktQT1NOICIwIgogIExPQ0FMRV9JVExaRVJPICIwIgogIExPQ0FMRV9TMTE1OSAiIgogIExPQ0FMRV9TMjM1OSAiIgogIExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUgIlVLUiIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUxICLP7SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUyICLC8iIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUzICLR8CIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU0ICLX8iIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU1ICLP8iIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU2ICLR4SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU3ICLN5CIKICBMT0NBTEVfU0FCQlJFVkxBTkdOQU1FICJVS1IiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxICLRs/ciCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyICLL/vIiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzICLB5fAiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0ICLK4rMiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1ICLS8OAiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2ICLX5fAiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3ICLL6O8iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4ICLR5fAiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5ICLC5fAiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCAixu7iIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEgIsvo8SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyICLD8PMiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TQ09VTlRSWSAiVWtyYWluZSIKICBMT0NBTEVfU0NVUlJFTkNZICLj8O0uIgogIExPQ0FMRV9TREFURSAiLiIKICBMT0NBTEVfU0RBWU5BTUUxICLv7u3l5LPr7uoiCiAgTE9DQUxFX1NEQVlOQU1FMiAi4rPi8u7w7uoiCiAgTE9DQUxFX1NEQVlOQU1FMyAi8eXw5eTgIgogIExPQ0FMRV9TREFZTkFNRTQgIvfl8uLl8CIKICBMT0NBTEVfU0RBWU5BTUU1ICLvJ//y7ej2/yIKICBMT0NBTEVfU0RBWU5BTUU2ICLx8+Hu8uAiCiAgTE9DQUxFX1NEQVlOQU1FNyAi7eXks+v/IgogIExPQ0FMRV9TREVDSU1BTCAiLCIKICBMT0NBTEVfU0VOR0NPVU5UUlkgIlVrcmFpbmUiCiAgTE9DQUxFX1NFTkdDVVJSTkFNRSAiVWtyYWluaWFuIEdyaXZuYSIKICBMT0NBTEVfU0VOR0xBTkdVQUdFICJVa3JhaW5pYW4iCiAgTE9DQUxFX1NHUk9VUElORyAiMzswIgogIExPQ0FMRV9TSU5UTFNZTUJPTCAiVUFIIgogIExPQ0FMRV9TSVNPMzE2NkNUUllOQU1FICJVQSIKICBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FICJ1ayIKICBMT0NBTEVfU0xBTkdVQUdFICJVa3JhaW5pYW4iCiAgTE9DQUxFX1NMSVNUICI7IgogIExPQ0FMRV9TTE9OR0RBVEUgImQgTU1NTSB5eXl5JyDwLiciCiAgTE9DQUxFX1NNT05ERUNJTUFMU0VQICIsIgogIExPQ0FMRV9TTU9OR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU01PTlRITkFNRTEgItGz9+Xt/Fww8bP37f8iCiAgTE9DQUxFX1NNT05USE5BTUUyICLL/vLo6Vww6/7y7uPuIgogIExPQ0FMRV9TTU9OVEhOQU1FMyAiweXw5efl7fxcMOHl8OXn7f8iCiAgTE9DQUxFX1NNT05USE5BTUU0ICLK4rPy5e38XDDq4rPy7f8iCiAgTE9DQUxFX1NNT05USE5BTUU1ICLS8ODi5e38XDDy8ODi7f8iCiAgTE9DQUxFX1NNT05USE5BTUU2ICLX5fDi5e38XDD35fDi7f8iCiAgTE9DQUxFX1NNT05USE5BTUU3ICLL6O/l7fxcMOvo7+3/IgogIExPQ0FMRV9TTU9OVEhOQU1FOCAi0eXw7+Xt/Fww8eXw7+3/IgogIExPQ0FMRV9TTU9OVEhOQU1FOSAiwuXw5fHl7fxcMOLl8OXx7f8iCiAgTE9DQUxFX1NNT05USE5BTUUxMCAixu7i8uXt/Fww5u7i8u3/IgogIExPQ0FMRV9TTU9OVEhOQU1FMTEgIsvo8fLu7+DkXDDr6PHy7u/g5OAiCiAgTE9DQUxFX1NNT05USE5BTUUxMiAiw/Dz5OXt/Fww4/Dz5O3/IgogIExPQ0FMRV9TTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU01PTlRIT1VTQU5EU0VQICKgIgogIExPQ0FMRV9TTkFNRSAidWstVUEiCiAgTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSAi0+rw4L/t4CIKICBMT0NBTEVfU05BVElWRUNVUlJOQU1FICLj8Oji7f8iCiAgTE9DQUxFX1NOQVRJVkVESUdJVFMgIjAxMjM0NTY3ODkiCiAgTE9DQUxFX1NOQVRJVkVESVNQTEFZTkFNRSAi8+rw4L/t/PHq4CAo0+rw4L/t4CkiCiAgTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSAi8+rw4L/t/PHq4CIKICBMT0NBTEVfU05FR0FUSVZFU0lHTiAiLSIKICBMT0NBTEVfU09QRU5UWVBFTEFOR1VBR0VUQUcgIlVLUiAiCiAgTE9DQUxFX1NQT1NJVElWRVNJR04gIiIKICBMT0NBTEVfU1NDUklQVFMgIkN5cmw7IgogIExPQ0FMRV9TU0hPUlREQVRFICJkZC5NTS55eXl5IgogIExPQ0FMRV9TU0hPUlRUSU1FICJIOm1tIgogIExPQ0FMRV9TU09SVE5BTUUgIkRlZmF1bHQiCiAgTE9DQUxFX1NUSE9VU0FORCAioCIKICBMT0NBTEVfU1RJTUUgIjoiCiAgTE9DQUxFX1NUSU1FRk9STUFUICJIOm1tOnNzIgogIExPQ0FMRV9TWUVBUk1PTlRIICJNTU1NIHl5eXknIPAuJyIKCiAgTEdSUElEX1dFU1RFUk5fRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAix+D1s+Tt4CCq4vDu7+AgsyDR7+7r8/fl7bMg2PLg8ugiCiAgTEdSUElEX0NFTlRSQUxfRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAi1uXt8vDg6/zt4CCq4vDu7+AiCiAgTEdSUElEX0JBTFRJQytMR1JQSURfUkVTX0JBU0UgIsHg6/Kz6fH86uAiCiAgTEdSUElEX0dSRUVLK0xHUlBJRF9SRVNfQkFTRSAiw/Dl9vzq4CIKICBMR1JQSURfQ1lSSUxMSUMrTEdSUElEX1JFU19CQVNFICLK6PDo6+j2/yIKICBMR1JQSURfVFVSS0lTSCtMR1JQSURfUkVTX0JBU0UgItL+8Orx/OrgIgogIExHUlBJRF9KQVBBTkVTRStMR1JQSURfUkVTX0JBU0UgIt/v7u3x/OrgIgogIExHUlBJRF9LT1JFQU4rTEdSUElEX1JFU19CQVNFICLK7vDl6fH86uAiCiAgTEdSUElEX1RSQURJVElPTkFMX0NISU5FU0UrTEdSUElEX1JFU19CQVNFICLK6PLg6fH86uAg8vDg5Oj2s+nt4CIKICBMR1JQSURfU0lNUExJRklFRF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAiyujy4Onx/OrgIPHv8O755e3gIgogIExHUlBJRF9USEFJK0xHUlBJRF9SRVNfQkFTRSAi0uDp8fzq4CIKICBMR1JQSURfSEVCUkVXK0xHUlBJRF9SRVNfQkFTRSAisuLw6PIiCiAgTEdSUElEX0FSQUJJQytMR1JQSURfUkVTX0JBU0UgIsDw4OHx/OrgIgogIExHUlBJRF9WSUVUTkFNRVNFK0xHUlBJRF9SRVNfQkFTRSAiwie68u3g7PH86uAiCiAgTEdSUElEX0lORElDK0xHUlBJRF9SRVNfQkFTRSAisu3ks+nx/OrgIgogIExHUlBJRF9HRU9SR0lBTitMR1JQSURfUkVTX0JBU0UgIsPw8+fo7fH86uAiCiAgTEdSUElEX0FSTUVOSUFOK0xHUlBJRF9SRVNfQkFTRSAiwrPw7OXt8fzq4CIKfQo=