LyoKICogWENPUFkgLSBXaW5lLWNvbXBhdGlibGUgeGNvcHkgcHJvZ3JhbQogKiBEYW5pc2ggbGFuZ3VhZ2Ugc3VwcG9ydAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDggSmVucyBBbGJyZXRzZW4gPGplbnNAYWxicmV0c2VuLmRrPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAieGNvcHkuaCIKCkxBTkdVQUdFIExBTkdfREFOSVNILCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFCnsKICAgIFNUUklOR19JTlZQQVJNUywgIlVneWxkaWd0IGFudGFsIHBhcmFtZXRlcmU7IGJydWcgq3hjb3B5IC8/uyBmb3IgaGplbHBcbiIKICAgIFNUUklOR19JTlZQQVJNLCAgIlVneWxkaWd0IHBhcmFtZXRlciCrJXO7OyBicnVnIKt4Y29weSAvP7sgZm9yIGhqZWxwXG4iCiAgICBTVFJJTkdfUEFVU0UsICAgICJUcnlrIEVudGVyIGZvciBhdCBiZWd5bmRlIGF0IGtvcGllcmVcbiIKICAgIFNUUklOR19TSU1DT1BZLCAgIiVkIGZpbChlcikgdmlsIGJsaXZlIGtvcGllcmV0XG4iCiAgICBTVFJJTkdfQ09QWSwgICAgICIlZCBmaWwoZXIpIGtvcGllcmV0XG4iCiAgICBTVFJJTkdfUUlTRElSLCAgICJFciCrJXO7IGV0IGZpbG5hdm4gZWxsZXIga2F0YWxvZ1xuIiBcCiAgICAgICAgICAgICAgICAgICAgICJw5SBkZXN0aW5hdGlvbmVuP1xuIiBcCiAgICAgICAgICAgICAgICAgICAgICIoRiAtIEZpbCwgSyAtIEthdGFsb2cpXG4iCiAgICBTVFJJTkdfU1JDUFJPTVBULCIlcz8gKEphfE5laSlcbiIKICAgIFNUUklOR19PVkVSV1JJVEUsIk92ZXJza3JpdmUgqyVzuz8gKEphfE5laXxBbGxlKVxuIgogICAgU1RSSU5HX0NPUFlGQUlMLCAiS3VubmUgaWtrZSBrb3BpZXJlIKslc7sgdGlsIKslc7s7IGZlamxldCBtZWQgci9jICVkXG4iCiAgICBTVFJJTkdfT1BFTkZBSUwsICJLdW5uZSBpa2tlIOVibmUgqyVzu1xuIgogICAgU1RSSU5HX1JFQURGQUlMLCAiS3VubmUgaWtrZSBs5nNlIKslc7tcbiIKICAgIFNUUklOR19ZRVNfQ0hBUiwgIkoiCiAgICBTVFJJTkdfTk9fQ0hBUiwgICJOIgogICAgU1RSSU5HX0FMTF9DSEFSLCAiQSIKICAgIFNUUklOR19GSUxFX0NIQVIsIkYiCiAgICBTVFJJTkdfRElSX0NIQVIsICJLIgoKICAgIFNUUklOR19IRUxQLAoiWENPUFkgLSBLb3BpZXJlciBmaWxlciBlbGxlciBrYXRhbG9ndHJlIHRpbCBlbiBt5WxwbGFzc2VyaW5nXG5cClxuXApTeW50YWtzOlxuXApYQ09QWSBraWxkZSBbbeVsXSBbL0ldIFsvU10gWy9RXSBbL0ZdIFsvTF0gWy9XXSBbL1RdIFsvTl0gWy9VXVxuXApcdCAgICAgWy9SXSBbL0hdIFsvQ10gWy9QXSBbL0FdIFsvTV0gWy9FXSBbL0RdIFsvWV0gWy8tWV1cblwKXG5cCmh2b3I6XG5cClsvSV0gIEFudGFnIGF0IGRlc3RpbmF0aW9uZW4gZXIgZXQga2F0YWxvZyBodmlzIGRlc3RpbmF0aW9uZW4gaWtrZVxuXAogICAgICBcdGZpbmRlcyBvZyAyIGVsbGVyIGZsZXJlIGZpbGVyIGJsaXZlciBrb3BpZXJldFxuXApbL1NdICBLb3BpZXIga2F0YWxvZ2VyIG9nIHVuZGVya2F0YWxvZ2VyXG5cClsvRV0gIEtvcGllciBrYXRhbG9nZXIgb2cgdW5kZXJrYXRhbG9nZXIsIG9nc+UgdG9tbWUga2F0YWxvZ2VyXG5cClsvUV0gIFbmciBzdGlsbGUgOiB2aXMgaWtrZSBmaWxuYXZuZSB1bmRlciBrb3BpZXJpbmdcblwKWy9GXSAgRmlsIGhlbGUga2lsZGUtIG9nIG3lbG5hdm4gdW5kZXIga29waWVyaW5nXG5cClsvTF0gIFNpbXVs6XIgb3BlcmF0aW9uZW47IHZpcyBrdW4sIGf4ciBpbnRldFxuXApbL1ddICBTcPhyZyBm+HIga29wZXJpbmdlbiBzdGFydGVyXG5cClsvVF0gIExhdiB0b20ga2F0YWxvZ3N0cnVrdHVyOyBrb3BpZXIgaWtrZSBmaWxlclxuXApbL1ldICBTcPhyZyBpa2tlIG9tIGZpbGVyIHNrYWwgb3ZlcnNrcml2ZXNcblwKWy8tWV0gU3D4cmcgZvhyIG9tIGZpbGVyIHNrYWwgb3ZlcnNrcml2ZXNcblwKWy9QXSAgU3D4cmcgb20gaHZlciBlbmtlbHQgZmlsIGRlciBza2FsIGtvcGllcmVzXG5cClsvTl0gIEtvcGllciBzb20ga29ydGUgZmlsbmF2biAoOC4zIHRlZ24pXG5cClsvVV0gIEtvcGllciBrdW4gZmlsZXIgc29tIGFsbGVyZWRlIGZpbmRlcyBw5SBkZXN0aW5hdGlvbmVuXG5cClsvUl0gIE92ZXJza3JpdiBmaWxlciBzb20gZXIgc2tyaXZlYmVza3l0dGV0XG5cClsvSF0gIEtvcGllciBza2p1bHRlIGZpbGVyIG9nIHN5c3RlbWZpbGVyXG5cClsvQ10gIEZvcnRz5nQgc2VsdiBvbSBkZXQgb3BzdOVyIGZlamwgdW5kZXIga29waWVyaW5nZW5cblwKWy9BXSAgS29waWVyIGlra2UgZmlsZXIgc29tIGVyIG1hcmtlcmV0IHNvbSBhcmtpdlxuXApbL01dICBLb3BpZXIga3VuIGZpbGVyIHNvbSBlciBtYXJrZXJldCBzb20gYWtyaXY7IGZqZXJuZXIgZGVubmUgbWFya2VyaW5nXG5cClsvRCB8IC9EOm0tZC3lXSBLb3BpZXIga3VuIG55ZSBmaWxlciBlbGxlciBkZW0gc29tIGVyIOZuZHJldCBlZnRlclxuXAogICAgICBcdFx0ZGVuIG9wZ2l2bmUgZGF0by5cblwKICAgICAgXHRcdEh2aXMgaW5nZW4gZGF0byBvcGdpdmVzIGtvcGllcmVzIGt1biBkZSBmaWxlciBodm9yXG5cCiAgICAgIFx0XHRkZXN0aW5hdGlvbmVuIGVyIOZsZHJlIGVuZCBraWxkZW5cblxuIgoKfQo=