LyoqCiogQEZpbGU6IGNvZGVjX3Jlc19tYWluX2N0cmwuaAoqIEBCcmllZjogSW1wbGVtZW50YXRpb24gb2YgRGV2aWNlIE1hbmFnZXIgaW4gU2FuZWNoaXBzCioKKiBDb3B5cmlnaHQgKEMpIDIwMTcgU2FuZWNoaXBzIFRlY2hub2xvZ3kgQ28uLCBMdGQuCiogQEF1dGhvcjogc3VuLnF1YW5AenRlLmNvbS5jbgoqCiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwoqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgoqICovCiNpZm5kZWYgX0FVRElPX1JFU19DVFJMXwojZGVmaW5lIF9BVURJT19SRVNfQ1RSTF8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoJCQkJCQkgICAgzbfOxLz+ICAgCSAgICAgICAgICAJCQkJCSAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHN5cy9pcGMuaD4KI2luY2x1ZGUgPHN5cy9tc2cuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAguuq2qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8vI2RlZmluZSAgTU9EVUxFX0lEX0NPREVDIDAgCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgyv2+3cDg0M22qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZW51bSBhdWRpb190eXBlIHsKCVZPSUNFXzIzRyA9IDAsICAgIAoJVk9JQ0VfVk9MVEUsICAgICAgIAoJUE9DLAoJWkNPUkUsCn07CgplbnVtICBhdWRpb19tc2dfdHlwZSB7CglVU0VfQVVESU9fUkVRID0gMCwgIC8vuanStc7xxKO/6cnqx+vKudPDyKgKCVVTRV9BVURJT19SU1AsICAgICAgLy/P+8+itdrSu7j2ss7K/da4yr7J6sfrs8m5pru5ysfKp7Dco6y12rb+uPayzsr91rjKvrWxx7DKudPDtcTStc7xCglSRUxfQVVESU9fUkVRLCAgICAgIC8vuanW97/Yx+vH88Sz0rXO8cSjv+nKzbfF1f3U2r340NC1xEFVRElPyrnTw8ioCglSRUxfQVVESU9fSU5ELCAgICAgIC8vx+vH88Sz0rXO8cSjv+nKzbfFYXVkaW+1xL3hufvTprTwo6zI9MqnsNyjrLbP0dSju7u70dTWrqOssdjQ67PJuaYKCUlETEVfQVVESU9fSU5GTywgICAgIC8v1ve/2M2o1qrL+dPQyerH67n9QVVESU/XytS0tcTStc7xxKO/6aOsuObWqrWxx7C/1c/Qo6zS1L3ivvbStc7xxKO/6bSm09q50sbwzKy78taux7Cxu8e/0NDKzbfFtcTStc7xxKO/6aOsyOdNUDPS9MDWsqW3xbXIo7sKCUVYSVRfQVVESU9fSU5ELCAvL82o1qrW97/Yo6zStc7xxKO/6c3Ls/bS9Ma118rUtL661fkKCUVYSVRfQVVESU9fUkVRLCAvL8frx/PStc7xxKO/6c3Ls/bS9Ma118rUtL661fkKCUVYSVRfQVVESU9fUlNQLCAvL8/s06bStc7xxKO/6c3Ls/bS9Ma118rUtL661fkKfTsKCgp0eXBlZGVmIHN0cnVjdCB7CglpbnQJdHlwZTsgICAgICAgICAgLy/WuMq+yerH67XEvt/M5dK1zvHA4NDNCglpbnQgbW9kdWxlSWQ7ICAgICAvL8nqx+u1xMSjv+m6xQoJaW50IHRlbXBNb2R1bGVJZDsgCn0gVF9hdWRpb19Vc2VSZXE7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQJcmVzdWx0OyAgICAgICAvL9a4yr7J6sfrtcS94bn7o6wwse3KvrPJuaajrDGx7cq+yqew3AoJaW50CXR5cGU7ICAgICAgICAgLy/WuMq+yerH67XEvt/M5dK1zvHA4NDNCglpbnQJdXNpbmdfdHlwZTsgICAvL9a4yr61scew1f3U2sq508O1xNK1zvHA4NDNo6zKp7DcyrG5qb7fzOXStc7xxKO/6bLp0a/KudPDCn0gVF9hdWRpb19Vc2VSc3A7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQJdXNpbmdfdHlwZTsgIC8v1rjKvrWxx7DExLj2uN/Txc/IvLbStc7xxKO/6dTayerH69fK1LQKCWludCBtb3VsZUlkOyAgICAgLy/Eo7/ptcRpZAp9IFRfYXVkaW9fUmVsUmVxOwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50CXJlc3VsdDsgICAgICAvL9a4yr7J6sfrtcS94bn7o6wwse3KvrPJuaajrDGx7cq+yqew3AoJaW50CXR5cGU7ICAgICAgICAvL9a4yr7KzbfFv9jWxsiotcTStc7xCglpbnQgbW9kdWxlSWQ7ICAgIC8vys23xb/Y1sbIqLXExKO/6WlkCn0gVF9hdWRpb19SZWxJbmQ7CgoKLyog06bTw8frx/Njb2RlY9fK1LSyzsr9ICovCnR5cGVkZWYgc3RydWN0IGF1ZGlvUmVzUmVxdWVzdAp7CiAgICBpbnQgbW9kdWxlSWQ7ICAgICAgICAgICAvKiDStc7xxKO/6brFICovCiAgICBpbnQgdGVtcE1vdWR1bGVJZDsgICAgICAgLyogyerH69fK1LS1xL3TytzP+8+iwdnKsUlkICovCiAgICBpbnQgYXVkaW9UeXBlOyAgICAgICAgICAvKiDStc7xwODQzSAqLwp9VF9hdWRpb19SZXNfUmVxdWVzdDsKCnR5cGVkZWYgc3RydWN0IHsKCWludAl0eXBlOwoJaW50IG1vZHVsZUlkOwp9IFRfYXVkaW9fRXhpdEluZDsKCgovKioKICq6r8r9y7XD96O6x+vH88q508Njb2RlY9fK1LSjrLXItP1jb2RlY9b3v9i72Li0ICAgICAgICAgCiAqQHBhcmFtIDogINOm08PH68fztcSyzsr9CiAqCiAqLwpCT09MIGF1ZGlvX3Jlc291cmNlX3JlcXVlc3Qoc3RydWN0IGF1ZGlvUmVzUmVxdWVzdCAqcGFyYW0sICBUX2F1ZGlvX1VzZVJzcCAqUnNwRGF0YSk7CiNlbmRpZgo=