LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBCdWxnYXJpYW4KICoKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2Rld2VhdmVycwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgojcHJhZ21hIGNvZGVfcGFnZSgxMjUxKQoKU1RSSU5HVEFCTEUgTEFOR1VBR0UgTEFOR19CVUxHQVJJQU4sIFNVQkxBTkdfREVGQVVMVAp7CiAgTE9DQUxFX0ZPTlRTSUdOQVRVUkUgTCJceDAyMDNceDgwMDBceDM4NDhceDAwMDBceDAwMDBceDAwMDBceDAwMDBceDAwMDBceDAwMDRceDAwMDBceDAwMDBceDAwMDJceDAwMDRceDAwMDBceDAwMDBceDAyMDIiCiAgTE9DQUxFX0lDQUxFTkRBUlRZUEUgIjEiCiAgTE9DQUxFX0lDRU5UVVJZICIxIgogIExPQ0FMRV9JQ09VTlRSWSAiMzU5IgogIExPQ0FMRV9JQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUNVUlJFTkNZICIzIgogIExPQ0FMRV9JREFURSAiMSIKICBMT0NBTEVfSURBWUxaRVJPICIxIgogIExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSAiMTI1MSIKICBMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSAiODY2IgogIExPQ0FMRV9JREVGQVVMVENPVU5UUlkgIjM1OSIKICBMT0NBTEVfSURFRkFVTFRFQkNESUNDT0RFUEFHRSAiMjA0MjAiCiAgTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UgIjA0MDIiCiAgTE9DQUxFX0lERUZBVUxUTUFDQ09ERVBBR0UgIjEwMDA3IgogIExPQ0FMRV9JRElHSVRTICIyIgogIExPQ0FMRV9JRElHSVRTVUJTVElUVVRJT04gIjEiCiAgTE9DQUxFX0lGSVJTVERBWU9GV0VFSyAiMCIKICBMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiAiMCIKICBMT0NBTEVfSUlOVExDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JTEFOR1VBR0UgIjA0MDIiCiAgTE9DQUxFX0lMREFURSAiMSIKICBMT0NBTEVfSUxaRVJPICIxIgogIExPQ0FMRV9JTUVBU1VSRSAiMCIKICBMT0NBTEVfSU1PTkxaRVJPICIwIgogIExPQ0FMRV9JTkVHQ1VSUiAiOCIKICBMT0NBTEVfSU5FR05VTUJFUiAiMSIKICBMT0NBTEVfSU5FR1NFUEJZU1BBQ0UgIjEiCiAgTE9DQUxFX0lORUdTSUdOUE9TTiAiMSIKICBMT0NBTEVfSU5FR1NZTVBSRUNFREVTICIwIgogIExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUiAiMCIKICBMT0NBTEVfSVBBUEVSU0laRSAiOSIKICBMT0NBTEVfSVBPU1NFUEJZU1BBQ0UgIjEiCiAgTE9DQUxFX0lQT1NTSUdOUE9TTiAiMSIKICBMT0NBTEVfSVBPU1NZTVBSRUNFREVTICIwIgogIExPQ0FMRV9JVElNRSAiMSIKICBMT0NBTEVfSVRJTUVNQVJLUE9TTiAiMCIKICBMT0NBTEVfSVRMWkVSTyAiMSIKICBMT0NBTEVfUzExNTkgIiIKICBMT0NBTEVfUzIzNTkgIiIKICBMT0NBTEVfU0FCQlJFVkNUUllOQU1FICJCR1IiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSAi7+7t5eTl6+3o6iIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUyICLi8u7w7ejqIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTMgIvHw/+TgIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTQgIvfl8uL68PL66iIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU1ICLv5fL66iIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU2ICLx+uHu8uAiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNyAi7eXk5ev/IgogIExPQ0FMRV9TQUJCUkVWTEFOR05BTUUgIkJHUiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEgIt/t8+Dw6CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIgItTl4vDz4PDoIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMyAizODw8iIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQgIsDv8OjrIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSAizODpIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiAi3u3oIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNyAi3uvoIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCAiwOLj8/HyIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSAi0eXv8uXs4vDoIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAgIs7q8u7s4vDoIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEgIs3u5ezi8OgiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiAixOXq5ezi8OgiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TQ09VTlRSWSAiQnVsZ2FyaWEiCiAgTE9DQUxFX1NDVVJSRU5DWSAi6+IiCiAgTE9DQUxFX1NEQVRFICIuIgogIExPQ0FMRV9TREFZTkFNRTEgIu/u7eXk5evt6OoiCiAgTE9DQUxFX1NEQVlOQU1FMiAi4vLu8O3o6iIKICBMT0NBTEVfU0RBWU5BTUUzICLx8P/k4CIKICBMT0NBTEVfU0RBWU5BTUU0ICL35fLi+vDy+uoiCiAgTE9DQUxFX1NEQVlOQU1FNSAi7+Xy+uoiCiAgTE9DQUxFX1NEQVlOQU1FNiAi8frh7vLgIgogIExPQ0FMRV9TREFZTkFNRTcgIu3l5OXr/yIKICBMT0NBTEVfU0RFQ0lNQUwgIiwiCiAgTE9DQUxFX1NFTkdDT1VOVFJZICJCdWxnYXJpYSIKICBMT0NBTEVfU0VOR0NVUlJOQU1FICJCdWxnYXJpYW4gTGV2IgogIExPQ0FMRV9TRU5HTEFOR1VBR0UgIkJ1bGdhcmlhbiIKICBMT0NBTEVfU0dST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NJTlRMU1lNQk9MICJCR0wiCiAgTE9DQUxFX1NJU08zMTY2Q1RSWU5BTUUgIkJHIgogIExPQ0FMRV9TSVNPNjM5TEFOR05BTUUgImJnIgogIExPQ0FMRV9TTEFOR1VBR0UgIkJ1bGdhcmlhbiIKICBMT0NBTEVfU0xJU1QgIjsiCiAgTE9DQUxFX1NMT05HREFURSAiZGQgTU1NTSB5eXl5ICfjLiciCiAgTE9DQUxFX1NNT05ERUNJTUFMU0VQICIsIgogIExPQ0FMRV9TTU9OR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU01PTlRITkFNRTEgIt/t8+Dw6CIKICBMT0NBTEVfU01PTlRITkFNRTIgItTl4vDz4PDoIgogIExPQ0FMRV9TTU9OVEhOQU1FMyAizODw8iIKICBMT0NBTEVfU01PTlRITkFNRTQgIsDv8OjrIgogIExPQ0FMRV9TTU9OVEhOQU1FNSAizODpIgogIExPQ0FMRV9TTU9OVEhOQU1FNiAi3u3oIgogIExPQ0FMRV9TTU9OVEhOQU1FNyAi3uvoIgogIExPQ0FMRV9TTU9OVEhOQU1FOCAiwOLj8/HyIgogIExPQ0FMRV9TTU9OVEhOQU1FOSAi0eXv8uXs4vDoIgogIExPQ0FMRV9TTU9OVEhOQU1FMTAgIs7q8u7s4vDoIgogIExPQ0FMRV9TTU9OVEhOQU1FMTEgIs3u5ezi8OgiCiAgTE9DQUxFX1NNT05USE5BTUUxMiAixOXq5ezi8OgiCiAgTE9DQUxFX1NNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAgIqAiCiAgTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSAiwfrr4+Dw6P8iCiAgTE9DQUxFX1NOQVRJVkVDVVJSTkFNRSAi6+IuIgogIExPQ0FMRV9TTkFUSVZFRElHSVRTICIwMTIzNDU2Nzg5IgogIExPQ0FMRV9TTkFUSVZFTEFOR05BTUUgIuH66+Pg8PHq6CIKICBMT0NBTEVfU05FR0FUSVZFU0lHTiAiLSIKICBMT0NBTEVfU1BPU0lUSVZFU0lHTiAiIgogIExPQ0FMRV9TU0hPUlREQVRFICJkZC5NLnl5eXkgJ+MuJyIKICBMT0NBTEVfU1NPUlROQU1FICJEZWZhdWx0IgogIExPQ0FMRV9TVEhPVVNBTkQgIqAiCiAgTE9DQUxFX1NUSU1FICI6IgogIExPQ0FMRV9TVElNRUZPUk1BVCAiSEg6bW06c3MiCiAgTE9DQUxFX1NZRUFSTU9OVEggIk1NTU0geXl5eSAn4y4nIgp9Cg==