LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgaXJsbXBfZXZlbnQuaAogKiBWZXJzaW9uOiAgICAgICAwLjEKICogRGVzY3JpcHRpb246ICAgSXJEQS1MTVAgZXZlbnQgaGFuZGxpbmcKICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgogKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAqIENyZWF0ZWQgYXQ6ICAgIE1vbiBBdWcgIDQgMjA6NDA6NTMgMTk5NwogKiBNb2RpZmllZCBhdDogICBUaHUgSnVsICA4IDEyOjE4OjU0IDE5OTkKICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgogKiAKICogICAgIENvcHlyaWdodCAoYykgMTk5NywgMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LCAKICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CiAqICAgICAKICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCiAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCiAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBJUkxNUF9FVkVOVF9ICiNkZWZpbmUgSVJMTVBfRVZFTlRfSAoKLyogQSBmZXcgZm9yd2FyZCBkZWNsYXJhdGlvbnMgKHRvIG1ha2UgY29tcGlsZXIgaGFwcHkpICovCnN0cnVjdCBpcmxtcF9jYjsKc3RydWN0IGxzYXBfY2I7CnN0cnVjdCBsYXBfY2I7CnN0cnVjdCBkaXNjb3ZlcnlfdDsKCi8qIExBUCBzdGF0ZXMgKi8KdHlwZWRlZiBlbnVtIHsKCS8qIElyTEFQIGNvbm5lY3Rpb24gY29udHJvbCBzdGF0ZXMgKi8KCUxBUF9TVEFOREJZLCAgICAgICAgICAgICAvKiBObyBMQVAgY29ubmVjdGlvbiAqLwoJTEFQX1VfQ09OTkVDVCwgICAgICAgICAgIC8qIFN0YXJ0aW5nIExBUCBjb25uZWN0aW9uICovCglMQVBfQUNUSVZFLCAgICAgICAgICAgICAgLyogTEFQIGNvbm5lY3Rpb24gaXMgYWN0aXZlICovCn0gSVJMTVBfU1RBVEU7CgovKiBMU0FQIGNvbm5lY3Rpb24gY29udHJvbCBzdGF0ZXMgKi8KdHlwZWRlZiBlbnVtIHsKCUxTQVBfRElTQ09OTkVDVEVELCAgICAgICAgLyogTm8gTFNBUCBjb25uZWN0aW9uICovCglMU0FQX0NPTk5FQ1QsICAgICAgICAgICAgIC8qIENvbm5lY3QgaW5kaWNhdGlvbiBmcm9tIHBlZXIgKi8KCUxTQVBfQ09OTkVDVF9QRU5ELCAgICAgICAgLyogQ29ubmVjdCByZXF1ZXN0IGZyb20gc2VydmljZSB1c2VyICovCglMU0FQX0RBVEFfVFJBTlNGRVJfUkVBRFksIC8qIExTQVAgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCAqLyAgICAgICAgICAKCUxTQVBfU0VUVVAsICAgICAgICAgICAgICAgLyogVHJ5aW5nIHRvIHNldCB1cCBMU0FQIGNvbm5lY3Rpb24gKi8KCUxTQVBfU0VUVVBfUEVORCwgICAgICAgICAgLyogUmVxdWVzdCB0byBzdGFydCBMQVAgY29ubmVjdGlvbiAqLwp9IExTQVBfU1RBVEU7Cgp0eXBlZGVmIGVudW0gewoJLyogTFNBUCBldmVudHMgKi8KIAlMTV9DT05ORUNUX1JFUVVFU1QsCiAJTE1fQ09OTkVDVF9DT05GSVJNLAoJTE1fQ09OTkVDVF9SRVNQT05TRSwKIAlMTV9DT05ORUNUX0lORElDQVRJT04sIAkKCQoJTE1fRElTQ09OTkVDVF9JTkRJQ0FUSU9OLAoJTE1fRElTQ09OTkVDVF9SRVFVRVNULAoKIAlMTV9EQVRBX1JFUVVFU1QsCglMTV9VREFUQV9SRVFVRVNULAogCUxNX0RBVEFfSU5ESUNBVElPTiwKCUxNX1VEQVRBX0lORElDQVRJT04sCgoJTE1fV0FUQ0hET0dfVElNRU9VVCwKCgkvKiBJckxBUCBldmVudHMgKi8KCUxNX0xBUF9DT05ORUNUX1JFUVVFU1QsCiAJTE1fTEFQX0NPTk5FQ1RfSU5ESUNBVElPTiwgCiAJTE1fTEFQX0NPTk5FQ1RfQ09ORklSTSwKIAlMTV9MQVBfRElTQ09OTkVDVF9JTkRJQ0FUSU9OLCAKCUxNX0xBUF9ESVNDT05ORUNUX1JFUVVFU1QsCglMTV9MQVBfRElTQ09WRVJZX1JFUVVFU1QsCiAJTE1fTEFQX0RJU0NPVkVSWV9DT05GSVJNLAoJTE1fTEFQX0lETEVfVElNRU9VVCwKfSBJUkxNUF9FVkVOVDsKCmV4dGVybiBjb25zdCBjaGFyICppcmxtcF9zdGF0ZVtdOwpleHRlcm4gY29uc3QgY2hhciAqaXJsc2FwX3N0YXRlW107Cgp2b2lkIGlybG1wX3dhdGNoZG9nX3RpbWVyX2V4cGlyZWQodm9pZCAqZGF0YSk7CnZvaWQgaXJsbXBfZGlzY292ZXJ5X3RpbWVyX2V4cGlyZWQodm9pZCAqZGF0YSk7CnZvaWQgaXJsbXBfaWRsZV90aW1lcl9leHBpcmVkKHZvaWQgKmRhdGEpOwoKdm9pZCBpcmxtcF9kb19sYXBfZXZlbnQoc3RydWN0IGxhcF9jYiAqc2VsZiwgSVJMTVBfRVZFTlQgZXZlbnQsIAoJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKaW50IGlybG1wX2RvX2xzYXBfZXZlbnQoc3RydWN0IGxzYXBfY2IgKnNlbGYsIElSTE1QX0VWRU5UIGV2ZW50LCAKCQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7CgojZW5kaWYgLyogSVJMTVBfRVZFTlRfSCAqLwoKCgoK