LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgaXJpYXAuaAogKiBWZXJzaW9uOiAgICAgICAwLjUKICogRGVzY3JpcHRpb246ICAgSW5mb3JtYXRpb24gQWNjZXNzIFByb3RvY29sIChJQVApCiAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgogKiBDcmVhdGVkIGF0OiAgICBUaHUgQXVnIDIxIDAwOjAyOjA3IDE5OTcKICogTW9kaWZpZWQgYXQ6ICAgU2F0IERlYyAyNSAxNjo0MjowOSAxOTk5CiAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICogCiAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LCAKICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqICAgICAKICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCiAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCiAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBJUklBUF9ICiNkZWZpbmUgSVJJQVBfSAoKI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KCiNpbmNsdWRlIDxuZXQvaXJkYS9pcmlhcF9ldmVudC5oPgojaW5jbHVkZSA8bmV0L2lyZGEvaXJpYXNfb2JqZWN0Lmg+CiNpbmNsdWRlIDxuZXQvaXJkYS9pcnF1ZXVlLmg+CQkvKiBpcmRhX3F1ZXVlX3QgKi8KI2luY2x1ZGUgPG5ldC9pcmRhL3RpbWVyLmg+CQkvKiBzdHJ1Y3QgdGltZXJfbGlzdCAqLwoKI2RlZmluZSBJQVBfTFNUIDB4ODAKI2RlZmluZSBJQVBfQUNLIDB4NDAKCiNkZWZpbmUgSUFTX1NFUlZFUiAwCiNkZWZpbmUgSUFTX0NMSUVOVCAxCgovKiBJcklBUCBPcC1jb2RlcyAqLwojZGVmaW5lIEdFVF9JTkZPX0JBU0UgICAgICAweDAxCiNkZWZpbmUgR0VUX09CSkVDVFMgICAgICAgIDB4MDIKI2RlZmluZSBHRVRfVkFMVUUgICAgICAgICAgMHgwMwojZGVmaW5lIEdFVF9WQUxVRV9CWV9DTEFTUyAweDA0CiNkZWZpbmUgR0VUX09CSkVDVF9JTkZPICAgIDB4MDUKI2RlZmluZSBHRVRfQVRUUklCX05BTUVTICAgMHgwNgoKI2RlZmluZSBJQVNfU1VDQ0VTUyAgICAgICAgMAojZGVmaW5lIElBU19DTEFTU19VTktOT1dOICAxCiNkZWZpbmUgSUFTX0FUVFJJQl9VTktOT1dOIDIKI2RlZmluZSBJQVNfRElTQ09OTkVDVCAgICAgMTAKCnR5cGVkZWYgdm9pZCAoKkNPTkZJUk1fQ0FMTEJBQ0spKGludCByZXN1bHQsIF9fdTE2IG9ial9pZCwgCgkJCQkgc3RydWN0IGlhc192YWx1ZSAqdmFsdWUsIHZvaWQgKnByaXYpOwoKc3RydWN0IGlyaWFwX2NiIHsKCWlyZGFfcXVldWVfdCBxOyAvKiBNdXN0IGJlIGZpcnN0ICovCQoJbWFnaWNfdCBtYWdpYzsgIC8qIE1hZ2ljIGNvb2tpZSAqLwoKCWludCAgICAgICAgICBtb2RlOyAgIC8qIENsaWVudCBvciBzZXJ2ZXIgKi8KCglfX3UzMiAgICAgICAgc2FkZHI7CglfX3UzMiAgICAgICAgZGFkZHI7CglfX3U4ICAgICAgICAgb3BlcmF0aW9uOwoKCXN0cnVjdCBza19idWZmICpyZXF1ZXN0X3NrYjsKCXN0cnVjdCBsc2FwX2NiICpsc2FwOwoJX191OCBzbHNhcF9zZWw7CgoJLyogQ2xpZW50IHN0YXRlcyAqLwoJSVJJQVBfU1RBVEUgY2xpZW50X3N0YXRlOwoJSVJJQVBfU1RBVEUgY2FsbF9zdGF0ZTsKCQoJLyogU2VydmVyIHN0YXRlcyAqLwoJSVJJQVBfU1RBVEUgc2VydmVyX3N0YXRlOwoJSVJJQVBfU1RBVEUgcl9jb25uZWN0X3N0YXRlOwoJCglDT05GSVJNX0NBTExCQUNLIGNvbmZpcm07Cgl2b2lkICpwcml2OyAgICAgICAgICAgICAgICAvKiBVc2VkIHRvIGlkZW50aWZ5IGNsaWVudCAqLwoKCV9fdTggbWF4X2hlYWRlcl9zaXplOwoJX191MzIgbWF4X2RhdGFfc2l6ZTsKCQoJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7Cn07CgppbnQgIGlyaWFwX2luaXQodm9pZCk7CnZvaWQgaXJpYXBfY2xlYW51cCh2b2lkKTsKCnN0cnVjdCBpcmlhcF9jYiAqaXJpYXBfb3BlbihfX3U4IHNsc2FwX3NlbCwgaW50IG1vZGUsIHZvaWQgKnByaXYsIAoJCQkgICAgQ09ORklSTV9DQUxMQkFDSyBjYWxsYmFjayk7CnZvaWQgaXJpYXBfY2xvc2Uoc3RydWN0IGlyaWFwX2NiICpzZWxmKTsKCmludCBpcmlhcF9nZXR2YWx1ZWJ5Y2xhc3NfcmVxdWVzdChzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsIAoJCQkJICBfX3UzMiBzYWRkciwgX191MzIgZGFkZHIsCgkJCQkgIGNoYXIgKm5hbWUsIGNoYXIgKmF0dHIpOwp2b2lkIGlyaWFwX2Nvbm5lY3RfcmVxdWVzdChzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYpOwp2b2lkIGlyaWFwX3NlbmRfYWNrKCBzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYpOwp2b2lkIGlyaWFwX2NhbGxfaW5kaWNhdGlvbihzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpOwoKdm9pZCBpcmlhcF9yZWdpc3Rlcl9zZXJ2ZXIodm9pZCk7CgojZW5kaWYKCgo=