LyoKICogV2luZU1pbmUKICogUnVzc2lhbiBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAzIFBhdmVsIFJvc2tpbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicmVzb3VyY2UuaCIKCkxBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSB7CiAgICAgSURTX0FQUE5BTUUsICJXaW5lTWluZSIKICAgICBJRFNfTk9CT0RZLCAgIk5vYm9keSIKICAgICBJRFNfQUJPVVQsICAgIkNvcHlyaWdodCAyMDAwIEpvc2h1YSBUaGllbGVuIgp9CgpNRU5VX1dJTkVNSU5FIE1FTlUgRElTQ0FSREFCTEUKewogICAgUE9QVVAgIibI4/DgIiB7CiAgICAgICAgTUVOVUlURU0gIibN7uLg/yDo4/DgXHRGMiIsIElETV9ORVcKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJsLu7/Du8ejy5ev87fvlIOft4OroIiwgSURNX01BUktRCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIs3u4ugm9+7qIiwgICAgICAgSURNX0JFR0lOTkVSCiAgICAgICAgTUVOVUlURU0gIibM4PHy5fAiLCAgICAgICAgSURNX0FEVkFOQ0VECiAgICAgICAgTUVOVUlURU0gIibd6vHv5fDyIiwgICAgICAgSURNX0VYUEVSVAogICAgICAgIE1FTlVJVEVNICLN5fHy4O3k4PDy7fvlICbv4PDg7OXy8PsiLCAgIElETV9DVVNUT00KICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJsfg6vD78vxcdEFsdCtYIiwgICAgICAgSURNX0VYSVQKICAgIH0KICAgIFBPUFVQICIm0e/w4OLq4CIgewogICAgICAgIE1FTlVJVEVNICImy/P3+OXlIOLw5ez/IiwgIElETV9USU1FUwogICAgICAgIE1FTlVJVEVNICImziDv8O7j8ODs7OUiLCAgIElETV9BQk9VVAogICAgfQp9CgpETEdfVElNRVMgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDE2MCwgODAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAiy/P3+OXlIOLw5ez/Igp7CiAgICBHUk9VUEJPWCAgICAgICAgIsvz9/jl5SDi8OXs/yIsIC0xLCAgMTAsICAxMCwgMTQwLCAgNDUKICAgIExURVhUICAgICAgICAgICAize7i6Pfu6iIsICAgICAgLTEsICAyMCwgIDIwLCAgNDAsICAgOAogICAgTFRFWFQgICAgICAgICAgICLM4PHy5fAiLCAgICAgICAtMSwgIDIwLCAgMzAsICA0MCwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIt3q8e/l8PIiLCAgICAgIC0xLCAgMjAsICA0MCwgIDQwLCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUxLCAgNzAsICAyMCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUyLCAgNzAsICAzMCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUzLCAgNzAsICA0MCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUxLCAgOTAsICAyMCwgIDU1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUyLCAgOTAsICAzMCwgIDU1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUzLCAgOTAsICA0MCwgIDU1LCAgIDgKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAgICAgICAgICAgICAgICBJRE9LLCAgNTUsICA2MCwgIDUwLCAgMTUKfQoKRExHX0NPTkdSQVRTIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTYwLCA2MApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICLP7ufk8ODi6//+ISIKewogICAgTFRFWFQgICAgICAgICAgICLP7ubg6/Pp8fLgLCDi4uXk6PLlIMLg+OUg6Oz/IiwgLTEsICAxMCwgIDEwLCAxNTAsICAxMAogICAgRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRENfRURJVE5BTUUsICAyNSwgIDIwLCAxMTAsICAxMgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsICAgICAgICAgICAgICAgICAgICAgICAgIElET0ssICA2MCwgIDQwLCAgNDAsICAxNQp9CgpETEdfQ1VTVE9NIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTQwLCAxMDAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAizeXx8uDt5ODw8u375SDv4PDg7OXy8PsiCnsKICAgIExURVhUICAgICAgICAgICAiz+4g4uXw8ujq4OvoIiwgICAgIC0xLCAgIDUsICAgNSwgIDcwLCAgMTAKICAgIExURVhUICAgICAgICAgICAiz+4g4+7w6Ofu7fLg6+giLCAgIC0xLCAgIDUsICAzNSwgIDcwLCAgMTAKICAgIExURVhUICAgICAgICAgICAi1+jx6+4g7OjtIiwgICAgICAgIC0xLCAgIDUsICA2NSwgIDcwLCAgMTAKICAgIEVESVRURVhUICAgICAgICAgICAgICBJRENfRURJVFJPV1MsICAgNSwgIDE1LCAgMjAsICAxMiwgRVNfTlVNQkVSCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgSURDX0VESVRDT0xTLCAgIDUsICA0NSwgIDIwLCAgMTIsIEVTX05VTUJFUgogICAgRURJVFRFWFQgICAgICAgICAgICAgSURDX0VESVRNSU5FUywgICA1LCAgNzUsICAyMCwgIDEyLCBFU19OVU1CRVIKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAgICAgSURPSywgICAgICA4MCwgIDMwLCAgNTAsICAxNQogICAgUFVTSEJVVFRPTiAgICAgICLO8uzl7eAiLCBJRENBTkNFTCwgIDgwLCAgNTAsICA1MCwgIDE1Cn0K