LyoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIENvcHlyaWdodCCpIHsxOTk5fSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgoqICAgMTEvMTcvOTkgICAgYWxpdSAgICAgICAgQ3JlYXRpb24uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KI2lmbmRlZiBVTklSQU5HRV9ICiNkZWZpbmUgVU5JUkFOR0VfSAoKI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCgpjbGFzcyBVbmljb2RlU3RyaW5nOwoKLyoqCiAqICUlJSBJTlRFUk5BTCBDTEFTUyBVU0VEIEJZIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yICUlJQogKgogKiBBIHJhbmdlIG9mIFVuaWNvZGUgY2hhcmFjdGVycy4gIFN1cHBvcnQgdGhlIG9wZXJhdGlvbnMgb2YgdGVzdGluZyBmb3IKICogaW5jbHVzaW9uIChkb2VzIHRoaXMgcmFuZ2UgY29udGFpbiB0aGlzIGNoYXJhY3Rlcj8pIGFuZCBzcGxpdHRpbmcuCiAqIFNwbGl0dGluZyBpbnZvbHZlcyBicmVha2luZyBhIHJhbmdlIGludG8gdHdvIHNtYWxsZXIgcmFuZ2VzIGFyb3VuZCBhCiAqIGNoYXJhY3RlciBpbnNpZGUgdGhlIG9yaWdpbmFsIHJhbmdlLiAgVGhlIHNwbGl0IGNoYXJhY3RlciBpcyBub3QgaW5jbHVkZWQKICogaW4gZWl0aGVyIHJhbmdlLiAgSWYgdGhlIHNwbGl0IGNoYXJhY3RlciBpcyBhdCBlaXRoZXIgZXh0cmVtZSBlbmQgb2YgdGhlCiAqIHJhbmdlLCBvbmUgb2YgdGhlIHNwbGl0IHByb2R1Y3RzIGlzIGFuIGVtcHR5IHJhbmdlLgogKgogKiBUaGlzIGNsYXNzIGlzIHVzZWQgaW50ZXJuYWxseSB0byBkZXRlcm1pbmUgdGhlIGxhcmdlc3QgYXZhaWxhYmxlIHByaXZhdGUKICogdXNlIGNoYXJhY3RlciByYW5nZSBmb3IgdmFyaWFibGUgc3RhbmQtaW5zLgogKi8KY2xhc3MgVW5pY29kZVJhbmdlIHsKCnB1YmxpYzoKCiAgICBVQ2hhciBzdGFydDsKCiAgICBpbnQzMl90IGxlbmd0aDsKCiAgICBVbmljb2RlUmFuZ2UoVUNoYXIgc3RhcnQsIGludDMyX3QgbGVuZ3RoKTsKCiAgICAvKioKICAgICAqIENBTExFUiBPV05TIFJFU1VMVC4KICAgICAqLwogICAgVW5pY29kZVJhbmdlKiBjbG9uZSgpIGNvbnN0OwoKICAgIFVCb29sIGNvbnRhaW5zKFVDaGFyIGMpIGNvbnN0OwoKICAgIC8qKgogICAgICogQXNzdW1lIHRoYXQgY29udGFpbnMoYykgaXMgdHJ1ZS4gIFNwbGl0IHRoaXMgcmFuZ2UgaW50byB0d28gbmV3CiAgICAgKiByYW5nZXMgYXJvdW5kIHRoZSBjaGFyYWN0ZXIgYy4gIE1ha2UgdGhpcyByYW5nZSBvbmUgb2YgdGhlIG5ldyByYW5nZXMKICAgICAqIChtb2RpZnkgaXQgaW4gcGxhY2UpIGFuZCByZXR1cm4gdGhlIG90aGVyIG5ldyByYW5nZS4gIFRoZSBjaGFyYWN0ZXIKICAgICAqIGl0c2VsZiBpcyBub3QgaW5jbHVkZWQgaW4gZWl0aGVyIHJhbmdlLiAgSWYgdGhlIHNwbGl0IHJlc3VsdHMgaW4gYW4KICAgICAqIGVtcHR5IHJhbmdlICh0aGF0IGlzLCBpZiBjID09IHN0YXJ0IG9yIGMgPT0gc3RhcnQgKyBsZW5ndGggLSAxKSB0aGVuCiAgICAgKiByZXR1cm4gbnVsbC4KICAgICAqCiAgICAgKiBNT0RJRklFUyBUSElTIFJBTkdFIElOIFBMQUNFLgogICAgICoKICAgICAqIENBTExFUiBPV05TIFJFU1VMVC4KICAgICAqLwogICAgVW5pY29kZVJhbmdlKiBzcGxpdChVQ2hhciBjKTsKCiAgICAvKioKICAgICAqIEZpbmRzIHRoZSBsYXJnZXN0IHN1YnJhbmdlIG9mIHRoaXMgcmFuZ2UgdGhhdCBpcyB1bnVzZWQgYnkgdGhlCiAgICAgKiBnaXZlbiBzdHJpbmcuICBBIHN1YnJhbmdlIGlzIHVudXNlZCBieSBhIHN0cmluZyBpZiB0aGUgc3RyaW5nCiAgICAgKiBjb250YWlucyBubyBjaGFyYWN0ZXJzIGluIHRoYXQgcmFuZ2UuICBJZiB0aGUgZ2l2ZW4gc3RyaW5nCiAgICAgKiBjb250YWlucyBubyBjaGFyYWN0ZXJzIGluIHRoaXMgcmFuZ2UsIHRoZW4gdGhpcyByYW5nZSBpdHNlbGYgaXMKICAgICAqIHJldHVybmVkLgogICAgICoKICAgICAqIENBTExFUiBPV05TIFJFU1VMVC4KICAgICAqLwogICAgVW5pY29kZVJhbmdlKiBsYXJnZXN0VW51c2VkU3VicmFuZ2UoY29uc3QgVW5pY29kZVN0cmluZyYgc3RyKSBjb25zdDsKCnByaXZhdGU6CgogICAgLy8gRm9yIFVWZWN0b3Igb2YgVW5pY29kZVJhbmdlKiBvYmplY3RzCiAgICBzdGF0aWMgdm9pZCBkZWxldGVyKHZvaWQqKTsKCn07CgojZW5kaWYK