LyoNCiAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uDQogKiBBZGFwdGVkIGZvciB1c2UgYXMgbG9nMiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPi4NCiAqIFB1YmxpYyBkb21haW4uDQogKg0KICogQ2hhbmdlZCB0byB1c2UgZnlsMnhwMSBmb3IgdmFsdWVzIG5lYXIgMSwgPGRyZXBwZXJAY3lnbnVzLmNvbT4uDQogKg0KICogUmVtb3ZlZCBoZWFkZXIgZmlsZSBkZXBlbmRlbmN5IGZvciB1c2UgaW4gbGlibWluZ3dleC5hIGJ5DQogKiAgIERhbm55IFNtaXRoIDxkYW5ueXNtaXRoQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4NCiAqLw0KDQoJLmZpbGUJImxvZzIuUyINCgkudGV4dA0KCS5hbGlnbiA0DQpvbmU6CS5kb3VibGUgMS4wDQoJLyogSXQgaXMgbm90IGltcG9ydGFudCB0aGF0IHRoaXMgY29uc3RhbnQgaXMgcHJlY2lzZS4gIEl0IGlzIG9ubHkNCgkgICBhIHZhbHVlIHdoaWNoIGlzIGtub3duIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUgZm9yIHVzaW5nIHRoZQ0KCSAgIGZ5bDJ4cDEgaW5zdHJ1Y3Rpb24uICAqLw0KbGltaXQ6CS5kb3VibGUgMC4yOQ0KDQoJLnRleHQNCgkuYWxpZ24gNA0KLmdsb2JsIF9sb2cyDQoJLmRlZglfbG9nMjsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmDQpfbG9nMjoNCglmbGRsCW9uZQ0KCWZsZGwJNCglZXNwKQkJLy8geCA6IDENCglmeGFtDQoJZm5zdHN3DQoJZmxkCSVzdAkJLy8geCA6IHggOiAxDQoJc2FoZg0KCWpjCTNmCQkvLyBpbiBjYXNlIHggaXMgTmFOIG9yILFJbmYNCjQ6CWZzdWIJJXN0KDIpLCAlc3QJLy8geC0xIDogeCA6IDENCglmbGQJJXN0CQkvLyB4LTEgOiB4LTEgOiB4IDogMQ0KCWZhYnMJCQkvLyB8eC0xfCA6IHgtMSA6IHggOiAxDQoJZmNvbXBsCWxpbWl0CQkvLyB4LTEgOiB4IDogMQ0KCWZuc3RzdwkJCS8vIHgtMSA6IHggOiAxDQoJYW5kYgkkMHg0NSwgJWFoDQoJanoJMmYNCglmc3RwCSVzdCgxKQkJLy8geC0xIDogMQ0KCWZ5bDJ4cDEJCQkvLyBsb2coeCkNCglyZXQNCg0KMjoJZnN0cAklc3QoMCkJCS8vIHggOiAxDQoJZnlsMngJCQkvLyBsb2coeCkNCglyZXQNCg0KMzoJanAJNGIJCS8vIGluIGNhc2UgeCBpcyCxSW5mDQoJZnN0cAklc3QoMSkNCglmc3RwCSVzdCgxKQ0KCXJldA0K