LyoKICogUG9saXNoIHJlc291cmNlcyBmb3Igb2xlYWNjCiAqCiAqIENvcHlyaWdodCAyMDA5IKN1a2FzeiBXb2puabNvd2ljegogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAib2xlYWNjLmgiCgpMQU5HVUFHRSBMQU5HX1BPTElTSCwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRQp7CiAgICAwICJuaWV6bmFueSBvYmlla3QiIC8qIHVuZG9jdW1lbnRlZCAqLwogICAgUk9MRV9TWVNURU1fVElUTEVCQVIgICAgInBhc2VrIHR5dHWzdSIKICAgIFJPTEVfU1lTVEVNX01FTlVCQVIgICAgICJwYXNlayBtZW51IgogICAgUk9MRV9TWVNURU1fU0NST0xMQkFSICAgInBhc2VrIHByemV3aWphbmlhIgogICAgUk9MRV9TWVNURU1fR1JJUCAgICAgICAgInVjaHd5dCIKICAgIFJPTEVfU1lTVEVNX1NPVU5EICAgICAgICJkn3dp6msiCiAgICBST0xFX1NZU1RFTV9DVVJTT1IgICAgICAia3Vyc29yIgogICAgUk9MRV9TWVNURU1fQ0FSRVQgICAgICAgImRhc3playIKICAgIFJPTEVfU1lTVEVNX0FMRVJUICAgICAgICJvc3RyemW/ZW5pZSIKICAgIFJPTEVfU1lTVEVNX1dJTkRPVyAgICAgICJva25vIgogICAgUk9MRV9TWVNURU1fQ0xJRU5UICAgICAgImtsaWVudCIKICAgIFJPTEVfU1lTVEVNX01FTlVQT1BVUCAgICJtZW51IHJvendpamFuZSIKICAgIFJPTEVfU1lTVEVNX01FTlVJVEVNICAgICJlbGVtZW50IG1lbnUiCiAgICBST0xFX1NZU1RFTV9UT09MVElQICAgICAicG9kcG93aWVknyIKICAgIFJPTEVfU1lTVEVNX0FQUExJQ0FUSU9OICJhcGxpa2FjamEiCiAgICBST0xFX1NZU1RFTV9ET0NVTUVOVCAgICAiZG9rdW1lbnQiCiAgICBST0xFX1NZU1RFTV9QQU5FICAgICAgICAid3ljaW5layIKICAgIFJPTEVfU1lTVEVNX0NIQVJUICAgICAgICJ3eWtyZXMiCiAgICBST0xFX1NZU1RFTV9ESUFMT0cgICAgICAiZGlhbG9nIgogICAgUk9MRV9TWVNURU1fQk9SREVSICAgICAgIm9icmFtb3dhbmllIgogICAgUk9MRV9TWVNURU1fR1JPVVBJTkcgICAgImdydXBvd2FuaWUiCiAgICBST0xFX1NZU1RFTV9TRVBBUkFUT1IgICAic2VwYXJhdG9yIgogICAgUk9MRV9TWVNURU1fVE9PTEJBUiAgICAgInBhc2VrIG5hcnrqZHppIgogICAgUk9MRV9TWVNURU1fU1RBVFVTQkFSICAgInBhc2VrIHN0YW51IgogICAgUk9MRV9TWVNURU1fVEFCTEUgICAgICAgICJ0YWJlbGEiCiAgICBST0xFX1NZU1RFTV9DT0xVTU5IRUFERVIgIm5hZ7Pzd2VrIGtvbHVtbnkiCiAgICBST0xFX1NZU1RFTV9ST1dIRUFERVIgICAgIm5hZ7Pzd2VrIHdpZXJzemEiCiAgICBST0xFX1NZU1RFTV9DT0xVTU4gICAgICAgImtvbHVtbmEiCiAgICBST0xFX1NZU1RFTV9ST1cgICAgICAgICAgIndpZXJzeiIKICAgIFJPTEVfU1lTVEVNX0NFTEwgICAgICAgICAia29t83JrYSIKICAgIFJPTEVfU1lTVEVNX0xJTksgICAgICAgICAiZG93abl6YW5pZSIKICAgIFJPTEVfU1lTVEVNX0hFTFBCQUxMT09OICAiZHltZWsgcG9tb2N5IgogICAgUk9MRV9TWVNURU1fQ0hBUkFDVEVSICAgICJ6bmFrIgogICAgUk9MRV9TWVNURU1fTElTVCAgICAgICAgICJsaXN0YSIKICAgIFJPTEVfU1lTVEVNX0xJU1RJVEVNICAgICAiZWxlbWVudCBsaXN0eSIKICAgIFJPTEVfU1lTVEVNX09VVExJTkUgICAgICAiemFyeXMiCiAgICBST0xFX1NZU1RFTV9PVVRMSU5FSVRFTSAgImVsZW1lbnQgemFyeXN1IgogICAgUk9MRV9TWVNURU1fUEFHRVRBQiAgICAgICJ6YWuzYWRrYSBzdHJvbnkiCiAgICBST0xFX1NZU1RFTV9QUk9QRVJUWVBBR0UgInN0cm9uYSB3s2GcY2l3b5xjaSIKICAgIFJPTEVfU1lTVEVNX0lORElDQVRPUiAgICAid3NrYZ9uaWsiCiAgICBST0xFX1NZU1RFTV9HUkFQSElDICAgICAgImdyYWZpa2EiCiAgICBST0xFX1NZU1RFTV9TVEFUSUNURVhUICAgInRla3N0IHN0YXR5Y3pueSIKICAgIFJPTEVfU1lTVEVNX1RFWFQgICAgICAgICAidGVrc3QiCiAgICBST0xFX1NZU1RFTV9QVVNIQlVUVE9OICAgInByenljaXNrIgogICAgUk9MRV9TWVNURU1fQ0hFQ0tCVVRUT04gICJwcnp5Y2lzayB6YXpuYWN6YW55IgogICAgUk9MRV9TWVNURU1fUkFESU9CVVRUT04gICJwcnp5Y2lzayBvcGNqaSIKICAgIFJPTEVfU1lTVEVNX0NPTUJPQk9YICAgICAicG9sZSBrb21iaSIKICAgIFJPTEVfU1lTVEVNX0RST1BMSVNUICAgICAibGlzdGEgcm96d2lqYW5hIgogICAgUk9MRV9TWVNURU1fUFJPR1JFU1NCQVIgICJwYXNlayBwb3N06nB1IgogICAgUk9MRV9TWVNURU1fRElBTCAgICAgICAgICJ3eWJpZXJhbmllIgogICAgUk9MRV9TWVNURU1fSE9US0VZRklFTEQgICJwb2xlIGdvcrljZWdvIGtsYXdpc3phIgogICAgUk9MRV9TWVNURU1fU0xJREVSICAgICAgICJzdXdhayIKICAgIFJPTEVfU1lTVEVNX1NQSU5CVVRUT04gICAicG9sZSBwcnpld2lqYW5lIgogICAgUk9MRV9TWVNURU1fRElBR1JBTSAgICAgICJkaWFncmFtIgogICAgUk9MRV9TWVNURU1fQU5JTUFUSU9OICAgICJhbmltYWNqYSIKICAgIFJPTEVfU1lTVEVNX0VRVUFUSU9OICAgICAicvN3bmFuaWUiCiAgICBST0xFX1NZU1RFTV9CVVRUT05EUk9QRE9XTiAicHJ6eWNpc2sgcm96d2lqYW55IgogICAgUk9MRV9TWVNURU1fQlVUVE9OTUVOVSAgICJwcnp5Y2lzayBtZW51IgogICAgUk9MRV9TWVNURU1fQlVUVE9ORFJPUERPV05HUklEICJzaWF0a2EgcHJ6eWNpc2vzdyByb3p3aWphbnljaCIKICAgIFJPTEVfU1lTVEVNX1dISVRFU1BBQ0UgICAiYmlhs2Egc3BhY2phIgogICAgUk9MRV9TWVNURU1fUEFHRVRBQkxJU1QgICJsaXN0YSB6YWuzYWRlayBzdHJvbiIKICAgIFJPTEVfU1lTVEVNX0NMT0NLICAgICAgICAiemVnYXIiCiAgICBST0xFX1NZU1RFTV9TUExJVEJVVFRPTiAgInByenljaXNrIHJvemR6aWVsYW5pYSIKICAgIFJPTEVfU1lTVEVNX0lQQUREUkVTUyAgICAiYWRyZXMgSVAiCiAgICBST0xFX1NZU1RFTV9PVVRMSU5FQlVUVE9OICJwcnp5Y2lzayB6YXJ5c3UiCn0K