LyoKICogWENPUFkgLSBXaW5lLWNvbXBhdGlibGUgeGNvcHkgcHJvZ3JhbQogKiBOb3J3ZWdpYW4gQm9rbeVsIGxhbmd1YWdlIHN1cHBvcnQKICoKICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXhhbmRlciBOLiBT+HJuZXMgPGFsZXhAdGhlaGFuZG9mYWdvbnkuY29tPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAieGNvcHkuaCIKCkxBTkdVQUdFIExBTkdfTk9SV0VHSUFOLCBTVUJMQU5HX05PUldFR0lBTl9CT0tNQUwKClNUUklOR1RBQkxFCnsKICAgIFNUUklOR19JTlZQQVJNUywgIlVneWxkaWcgYW50YWxsIHBhcmFtZXRlcmU7IGJydWsgq3hjb3B5IC8/uyBmb3IgaGplbHBcbiIKICAgIFNUUklOR19JTlZQQVJNLCAgIlVneWxkaWcgcGFyYW1ldGVyIKslc7s7IGJydWsgq3hjb3B5IC8/uyBmb3IgaGplbHBcbiIKICAgIFNUUklOR19QQVVTRSwgICAgIlRyeWtrIEVudGVyIGZvciDlIGJlZ3lubmUg5SBrb3BpZXJlXG4iCiAgICBTVFJJTkdfU0lNQ09QWSwgICIlZCBmaWwoZXIpIHZpbGxlIGJsaXR0IGtvcGllcnRcbiIKICAgIFNUUklOR19DT1BZLCAgICAgIiVkIGZpbChlcikga29waWVydFxuIgogICAgU1RSSU5HX1FJU0RJUiwgICAiRWVyIKslc7sgZXQgZmlsbmV2biBlbGxlciBrYXRhbG9nXG4iIFwKICAgICAgICAgICAgICAgICAgICAgImkgbeVsZXQ/XG4iIFwKICAgICAgICAgICAgICAgICAgICAgIihGIC0gRmlsLCBLIC0gS2F0YWxvZylcbiIKICAgIFNUUklOR19TUkNQUk9NUFQsIiVzPyAoSmF8TmVpKVxuIgogICAgU1RSSU5HX09WRVJXUklURSwiU2tyaXZlIG92ZXIgqyVzuz8gKEphfE5laXxBbGxlKVxuIgogICAgU1RSSU5HX0NPUFlGQUlMLCAiS2xhcnRlIGlra2Uga29waWVyZSCrJXO7IHRpbCCrJXO7OyBmZWlsZXQgbWVkIHIvYyAlZFxuIgogICAgU1RSSU5HX09QRU5GQUlMLCAiS2xhcnRlIGlra2Ug5XBuZSCrJXO7XG4iCiAgICBTVFJJTkdfUkVBREZBSUwsICJLbGFydGUgaWtrZSBsZXNlIKslc7tcbiIKICAgIFNUUklOR19ZRVNfQ0hBUiwgIkoiCiAgICBTVFJJTkdfTk9fQ0hBUiwgICJOIgogICAgU1RSSU5HX0FMTF9DSEFSLCAiQSIKICAgIFNUUklOR19GSUxFX0NIQVIsIkYiCiAgICBTVFJJTkdfRElSX0NIQVIsICJLIgoKICAgIFNUUklOR19IRUxQLAoiWENPUFkgLSBLb3BpZXJlciBmaWxlciBlbGxlciBrYXRhbG9ndHJlIHRpbCBlbiBt5WxwbGFzc2VyaW5nXG5cClxuXApTeW50YXg6XG5cClhDT1BZIGtpbGRlIFtt5WxdIFsvSV0gWy9TXSBbL1FdIFsvRl0gWy9MXSBbL1ddIFsvVF0gWy9OXSBbL1VdXG5cClx0ICAgICBbL1JdIFsvSF0gWy9DXSBbL1BdIFsvQV0gWy9NXSBbL0VdIFsvRF0gWy9ZXSBbLy1ZXVxuXApcblwKV2hlcmU6XG5cClxuXApbL0ldICBBbnRhIGF0IG3lbGV0IGVyIGVuIGthdGFsb2cgaHZpcyBt5WxldCBpa2tlIGZpbm5lcyBvZyAyIGVsbGVyXG5cCiAgICAgIFx0ZmxlcmUgZmlsZXIgYmxpciBrb3BpZXJ0XG5cClsvU10gIEtvcGllciBrYXRhbG9nZXIgb2cgdW5kZXJrYXRhbG9nZXJcblwKWy9FXSAgS29waWVyIGthdGFsb2dlciBvZyB1bmRlcmthdGFsb2dlciwgdGEgbWVkIHRvbW1lIGthdGFsb2dlclxuXApbL1FdICBTdGlsbGUgbW9kdXM6IGlra2UgdmlzIGZpbG5hdm4gdW5kZXIga29waWVyaW5nXG5cClsvRl0gIEZpbCBoZWxlIGtpbGRlLSBvZyBt5WxuYXZuIHVuZGVyIGtvcGllcmluZ1xuXApbL0xdICBTaW11bGVyIG9wZXJhc2pvbmVuOyB2aXMgYmFyZSBodmEgc29tIHZpbGxlIGJsaXR0IGtvcGllcnRcblwKWy9XXSAgU3D4ciBmb3Iga29wZXJpbmdlbiBzdGFydGVyXG5cClsvVF0gIExhZyB0b20gIGthdGFsb2dzdHJ1a3R1cjsgaWtrZSBrb3BpZXIgZmlsZXJcblwKWy9ZXSAgSWtrZSBzcPhyIG7lciBmaWxlciBza2FsIG92ZXJza3JpdmVzXG5cClsvLVldIFNw+HIgZvhyIGZpbGVyIHNrYWwgb3ZlcnNrcml2ZXNcblwKWy9QXSAgU3D4ciBmb3IgaHZlciBraWxkZWZpbCBzb20gc2thbCBrb3BpZXJlc1xuXApbL05dICBLb3BpZXIgc29tIGtvcnRlIGZpbG5hdm4gKDguMyB0ZWduKVxuXApbL1VdICBCYXJlIGtvcGllciBmaWxlciBzb20gYWxsZXJlZGUgZmlubmVzIGkgbeVsZXRcblwKWy9SXSAgU2tyaXYgb3ZlciBmaWxlciBzb20gZXIgc2tyaXZlYmVza3l0dGV0XG5cClsvSF0gIEtvcGllciBza2p1bHRlIGZpbGVyIG9nIHN5c3RlbWZpbGVyXG5cClsvQ10gIEZvcnRzZXR0IHNlbHYgb20gZGV0IG9wcHN05XIgZmVpbCB1bmRlciBrb3BpZXJpbmdlblxuXApbL0FdICBJa2tlIGtvcGllciBmaWxlciBzb20gZXIgbWFya2VydCBzb20gYXJraXZcblwKWy9NXSAgQmFyZSBrb3BpZXIgZmlsZXIgc29tIGVyIG1hcmtlcnQgc29tIGFrcml2OyBmamVybmVyIGRlbm5lIG1lcmtpbmdlblxuXApbL0QgfCAvRDptLWQt5V0gS29waWVyIG55ZSBmaWxlciBlbGxlciBkZSBzb20gZXIgZW5kcmV0IGV0dGVyXG5cCiAgICAgIFx0XHRkZW4gb3BwZ2l0dGUgZGF0b2VuLlxuXAogICAgICBcdFx0SHZpcyBpbmdlbiBkYXRvIG9wcGdpcyBrb3BpZXJlcyBiYXJlIGRlIGZpbGVuZSBzb20gZXJcblwKICAgICAgXHRcdGVsZHJlIGkgbeVsZXQgZW5uIGkga2lsZGVuXG5cbiIKCn0K