ZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaS5oIGIvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM4MDQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaS5oCkBAIC0wLDAgKzEsNzEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDEKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBjY2NpLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIEhlYWRlciBmaWxlIG9mIENDQ0kuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19DQ0NJX0hfXworI2RlZmluZSBfX0NDQ0lfSF9fCisjaW5jbHVkZSAiY2NjaV9pZi5oIgorLy8jaW5jbHVkZSAiY2NjaV9mc19pZi5oIgorCisjaWYgMAorI2lmZGVmCV9fQ0NDSV9DXworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2Vsc2UKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2lmIGRlZmluZWQoX19NT0RFTV9DQ0NJX0VYSVNUX18pCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisJI2lmZGVmIENDQ0lfSU5JVF9IQU5EU0hBS0VfTU9ERTEKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKwkjZW5kaWYKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNpZmRlZiBDQ0NJX0lOSVRfSEFORFNIQUtFX01PREUxCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAvKl9fTU9ERU1fQ0NDSV9FWElTVF9fICovCisjZW5kaWYKKyNlbmRpZiAgLyogIV9fQ0NDSV9IX18gKi8KKworCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfY2hfY2ZnLmggYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfY2hfY2ZnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxYzk1MgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9jaF9jZmcuaApAQCAtMCwwICsxLDE5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGNjY2lfY2hfY2ZnLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIERlZmluZXMgdGhlIENDQ0kgY2hhbm5lbHMKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDkgMjMgMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDA0NDE2MzldIFtWTU9MWV0gc3VwcG9ydCA2NGtCIGxvZ2dpbmcgY2hhbm5lbAorICogW1ZNT0xZXVtPQV0gY29ycmVjdCBwZWVyX2lkIGFuZCBzdXBwb3J0IDY0a2IgbG9nZ2luZyBjaGFubmVsCisgKgorICogMDcgMTggMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDA0MjI1NzldIFtNRERQXSBEUEZNIHBvcnRpbmcgdG8gVk1PTFkKKyAqIFtWTU9MWV1bT0FdIHN1cHBvcnQgTUREUCAmIHJlbmFtZSB0byBEUEZNCisgKgorICogMDQgMTkgMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDAzOTUxNzZdIFtUaGluIE1vZGVtIDEuMF1bUENJZSBwbGF0Zm9ybV0gUENJZSBQbGF0Zm9ybSAxc3QgUmVsZWFzZSBvbiBBcG9sbG8KKyAqIFtQQ0llXVtPQV1bQ0NDSV0gc3VwcG9ydCBwY2llIHRoaW4gbW9kZW0gMS4wCisgKgorICogMDggMjEgMjAxOCBhY3Rvcnkub3UKKyAqIFtNT0xZMDAzNDY1NjZdIFtHZW45N11bTDFTX0wxRElTQUJMRV9TQVBdIGJvb3QgdG8gaWRsZSBzeW5jCisgKiBbQ0NDSV0gYm9vdCB0byBpZGxlIHBhdGNoCisgKgorICogMDggMTYgMjAxOCBhY3Rvcnkub3UKKyAqIFtNT0xZMDAzNDUzNzVdIFtHZW45N10gTGFuZGluZyBOQ0NDSSAoTmV4dCBnZW4gQ0NDSSkKKyAqIFtWTU9MWV0gYWRkIG5jY2NpIG5jY2Npc3J2IG5jY2NpX2l0X2N0cmwKKyAqCisgKiAwNyAyNCAyMDE4IGFjdG9yeS5vdQorICogW01PTFkwMDM0MTc5MF0gW01UNjI5NV0gVURDIGZlYXR1cmUgcGF0Y2ggYmFjaworICogYWRkIFVEQyBmZWF0dXJlIElEIGFuZCB0dHkgY2hhbm5lbCAvIHJlcGxhY2UgY2NjaSBzcGlubG9jayB3aXRoIEhXSVRDCisgKgorICogMDggMDkgMjAxNyBjaGllbi1odWkubHUKKyAqIFtNT0xZMDAyNjg5MTNdIFtCSVBdIEJJUCBvdmVyIFdpZmkKKyAqIFtDQ0NJX1RUWV1bQ0NDSV0gYWRkIENDQ0kgVFRZIHBvcnQgZm9yIEJJUC4KKyAqCisgKiAwNSAyNCAyMDE3IGNoaWVuLWh1aS5sdQorICogW01PTFkwMDI1MTQ2OV0gW1VNT0xZXSBbQWRkIE1vZHVsZV0gc3NkcworICogW0NDQ0lfVFRZXVtDQ0NJXSBhZGQgVFRZIHBvcnQgZm9yIFhVSS4KKyAqCisgKiAwNCAyNyAyMDE3IGNoaWVuLWh1aS5sdQorICogW01PTFkwMDI0NTUwOF0gW0NDQ0ldIGZpbGUgaGlzdG9yeSBsb2cgaGFzIHVuZXhwZWN0ZWQgY2hhcmFjdG9yCisgKiBbQ0NDSV0gZmlsZSBoaXN0b3J5IGxvZyBoYXMgY2hhcmFjdG9yIGVuY29kaW5nIGlzc3VlLgorICoKKyAqIDAyIDE1IDIwMTcgY2hpZW4taHVpLmx1CisgKiBbTU9MWTAwMjIwMjkxXSBbQ0NDSV1bQ0NDSV9UVFldIGFkZCBUVFkgcG9ydCBmb3IgOTMgTUQKKyAqIFtDQ0NJIFRUWV1bQ0NDSV0gYWRkIHR0eSBwb3J0IGZvciA5MyBNRCBJTVNNICYgV09BLgorICoKKyAqIDAxIDA0IDIwMTcgY2hpZW4taHVpLmx1CisgKiBbTU9MWTAwMjIwMDAwXSBtZXJnZSBDU0NEIGludG8gdHJ1bmsKKyAqIFtDQ0NJXVtDQ0NJX1RUWV0gYWRkIENDQ0kgVFRZIHBvcnQgYW5kIENTQ0QgQ29yZSByZWxhdGVkLgorICoKKyAqIDExIDExIDIwMTYgY3MuaHVhbmcKKyAqIFtNT0xZMDAyMDQ0MzBdIFtDQ0NJXSBNVDYyOTMgY2hhbmdlCisgKiBbQ0NDSV0gQWRkIENDTU5JIGludGVyZmFjZSBmb3IgbXVsdGkgSU1TIGVtZXJlbmd5IFBETgorICoKKyAqIDEwIDA0IDIwMTYgY3MuaHVhbmcKKyAqIFtNT0xZMDAyMDUwODddIFtDQ01OSV0gQWRkIG1vcmUgTkVUSUZzIGZvciBtdWx0aSBJTVMgZW1lcmdlbmN5IFBETgorICogW0NDQ0ldIEFkZCBDQ01OSSBpbnRlcmZhY2UgZm9yIG11bHRpIElNUyBlbWVyZW5neSBQRE4KKyAqCisgKiAwNyAwNSAyMDE2IGNzLmh1YW5nCisgKiBbTU9MWTAwMTg3MzgzXSBbRFBGTV0gTUQgZGlyZWN0IHRldGhlcmluZyBwb3J0aW5nIHRvIFVNT0xZCisgKiBbQ0NDSV0gRFBGTSBzdXBwb3J0CisgKgorICoKKyAqCisgKiAwMSAyNSAyMDE2IGNzLmh1YW5nCisgKiBbTU9MWTAwMTYyMzY3XSBbQ0NJU01dIGFkZCBDQ0lTTQorICogW0NDQ0ldIEFkZCBDQ0lTTSByZWxhdGVkIGNvZGUKKyAqCisgKgorICogMDcgMjkgMjAxNSBoc2luLWp1bi50YW5nCisgKiBbTU9MWTAwMTMyODczXSBbQ0NDSV0gREhMIDJlZCBwYXRoIGNoYW5uZWwgZm9yIGh1Z2VsYW5kIGF1dG90ZXN0IHRvb2wKKyAqIFtDQ0NJXSBESEwgMmVkIHBhdGggY2hhbm5lbCAtIFVNT0xZCisgKgorICogMTEgMTMgMjAxNCBjcy5odWFuZworICogW01PTFkwMDA4NDM5M10gW1VNT0xZXVtDQ0NJXSBDQ0NJIGNvbW1vbiBoZWFkZXIgYXJyYW5nZW1lbnQKKyAqIE1lcmdpbmcKKyAqIAkKKyAqIAkvL1VNT0xZL1RSVU5LL1VNT0xZL21jdS9wY29yZS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9jaF9jZmcuaAorICogCQorICogCXRvIC8vVU1PTFkvVFJVTksvVU1PTFkvbWN1L2NvbW1vbi9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9jaF9jZmcuaAorICoKKyAqIDA2IDExIDIwMTQgaWFuLmNoZW5nCisgKiBbTU9MWTAwMDY5MjMxXSBbVEs2MjkxXSBNT0xZIENDQ0kgbWVyZ2UKKyAqIAlUSzYyOTEgQ0NDSSBtaWdyYXRpb24KKyAqCisgKiAwNSAxNCAyMDE0IGFwLndhbmcKKyAqIFtNT0xZMDAwNjM4NjZdIFtST01FXSBkYXRhL2Fja3F1ZXVlIElUCisgKiBDQ01OSSBGYXN0IEFjayBQYXRjaCBhbmQgbGlua2Rvd24gZmFzdCByZWxvYWQKKyAqCisgKiAwMyAyOCAyMDE0IGlhbi5jaGVuZworICogW01PTFkwMDA2MTIxOV0gW01UNjU4Ml1bU0dMVEVdW0NNQ0MgRlRdW1NaXVtUQ18zLjEuOF1ERlRQKEZhaWwgW0ZPQ1VTIElTU1VFXQorICogCVtDQ01OSSBBQ0sgRmFzdCBQYXRoXQorICoKKyAqIDEyIDA1IDIwMTMgY3MuaHVhbmcKKyAqIFtNT0xZMDAwNDkwNDldIFtNVDY1OTVdIFtDQ0NJXSBBZGQgSUNVU0IgZmVhdHVyZQorICogW0NDQ0ldIEFkZCBJQ1VTQiBmZWF0dXJlLgorICoKKyAqIDExIDI2IDIwMTMgYm94Lnd1CisgKiBbTU9MWTAwMDQ3OTY2XSBbTVQ2NTk1XSBwYXRjaCBmb3IgQ0NDSSBvdmVyIENMRE1BCisgKiBhZGQgZXhjZXB0aW9uLCB0dHksIElDVVNCLgorICoKKyAqIDA1IDMwIDIwMTMgYXAud2FuZworICogW01PTFkwMDAyNDI2M10gW0NDQ0kgSU1TXSBBZGQgQ0NDSSBJTVMgRGF0YSBDb250cm9sIGNoYW5uZWwKKyAqIFtDQ0NJX0lNU10gQWRkIElNU19EQ1RSTCBjaGFubmVsCisgKgorICogMDEgMjggMjAxMyBhcC53YW5nCisgKiBbTU9MWTAwMDA5NDg4XSBbQ0NDSV0gQ0NDSV9JTVMgY2ggcmVuYW1lCisgKiBbQ0NDSV0gQ0NDSV9JTVMgY2hhbm5lbCByZW5hbWUKKyAqCisgKiAwMSAxNyAyMDEzIGlhbi5jaGVuZworICogW01PTFkwMDAwODk5M10gW0NDQ0lfU1JWXSBDQ0NJX0lNUyAxc3QgdmVyc2lvbgorICogW0NDQ0ldIENDQ0lfSU1TIDFzdCB2ZXJpc29uIGxvb3BiYWNrIHN1cHBvcnQKKyAqCisgKiAwMSAxMSAyMDEzIGFwLndhbmcKKyAqIFtNT0xZMDAwMDg2ODNdIFtDQ0NJXSBDQ0NJIG5ldyBmZWF0dXJlIGNoZWNrIGluCisgKiBbQ0NDSV0gTW9kaWZ5IENDQ0kgY2hhbm5lbCBjb25maWcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQ0NDSV9DSF9DRkdfSAorI2RlZmluZSBfQ0NDSV9DSF9DRkdfSAorCisjZGVmaW5lIENDQ0lfTURfQVBfQkFTRSAoQ0NDSV9QRUVSX0lEX0FQIDw8IDEyKQorI2RlZmluZSBDQ0NJX01EX1NDUF9CQVNFIChDQ0NJX1BFRVJfSURfU0NQIDw8IDEyKQorI2RlZmluZSBDQ0NJX01EX0VBUF9CQVNFIChDQ0NJX1BFRVJfSURfRUFQIDw8IDEyKQorCisjZGVmaW5lIENDQ0lfTUFYX1RXTyhhICxiKSAoKGE+Yik/KGEpOihiKSkKKyNkZWZpbmUgQ0NDSV9NQVhfQ0hBTk5FTCBDQ0NJX01BWF9UV08oQ0NDSV9NQVhfVFdPKENDQ0lfTURfQVBfTUFYX0NIQU5ORUwsIENDQ0lfTURfRUFQX01BWF9DSEFOTkVMKSwgQ0NDSV9NRF9TQ1BfTUFYX0NIQU5ORUwpCisKKy8qIQorICogIEBicmllZiBDQ0NJIHBlZXIgaWQgZW51bSBmb3IgbXVsdGkgSElGCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIENDQ0lfUEVFUl9JRF9NSU4gICAgPSAwLAorICAgICNpbmNsdWRlICJjY2NpX2NvbmZpZ19wZWVyX2lkLmgiCisgICAgQ0NDSV9QRUVSX0lEX01BWCwKK30gQ0NDSV9QRUVSX0lEX0JBU0VfVDsKKworLyohCisgKiAgQGJyaWVmIENDQ0lfQ0hBTk5FTF9UIENDQ0kgbG9naWNhbCBjaGFubmVsIGVudW0KKyAqICAgICAgICAgICAgTk9USUNFOiBOZWdvdGlhdGlvbnMgV2l0aCBBUCBPd25lciBCZWZvcmUgTW9kaWZpY2F0aW9uCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgICNpbmNsdWRlICJjY2NpX2NvbmZpZ19jaGFubmVsX2lkLmgiCit9IENDQ0lfQ0hBTk5FTF9UOworCisKKyNlbmRpZiAvLyNpZm5kZWYgX0NDQ0lfQ0hfQ0ZHX0gKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9jb25maWdfY2hhbm5lbF9pZC5oIGIvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpX2NvbmZpZ19jaGFubmVsX2lkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjYjY1MQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9jb25maWdfY2hhbm5lbF9pZC5oCkBAIC0wLDAgKzEsNjY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTIKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgY2NjaV9wZWVyX2lkX2NvbmZpZ19zb2MuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBWTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIERlZmluZXMgQ0NDSSBjaGFubmVsIElEIGxpc3QgZm9yIFNPQworICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogJExvZyQKKyAqCisgKiAwMSAyNSAyMDIxIGFkZWwubGlhbworICogW01PTFkwMDYwNzkyNF0gW05va2lhXVtPRFVdW01vZHVsZSBTdGFydHVwIGJsb2NraW5nXSBtaXBjX2luaXQgc3BlbmQgMzBzCisgKiAJCisgKiAJYWRkIG1pcGMgMTAtMTQgaW50ZXJmYWNlLgorICoKKyAqIDEyIDE0IDIwMjAgYWRlbC5saWFvCisgKiBbTU9MWTAwNjA1Nzc2XSBzdXBwb3J0IE1CSU1fQ0lEX0RTU19DT05ORUNUCisgKiAJCisgKiAJYWRkIERTUyBjaGFubmVscy4KKyAqCisgKiAwOSAxOCAyMDIwIGxpLWNoZW5nLnRzYWkKKyAqIFtNT0xZMDA1Njk2NDddIFtNUDcuUFJFQ0hFQ0tJTi5ERVZdW0NvZGUgc3luY10gc3luYyBjb2RlIGZyb20gVDcwMAorICogW1IzLk1QXVtPQV1bQ0NDSV1jb2RlIHN5bmMgZnJvbSBUNzAwCisgKgorICogMDkgMTUgMjAyMCBsaS1jaGVuZy50c2FpCisgKiBbTU9MWTAwNTY5NjQ3XSBbTVA3LlBSRUNIRUNLSU4uREVWXVtDb2RlIHN5bmNdIHN5bmMgY29kZSBmcm9tIFQ3MDAKKyAqIFtNUDcuUFJFQ0hFQ0tJTi5ERVZdW09BXVtDQ0NJXWNvZGUgc3luYyBmcm9tIFQ3MDAKKyAqCisgKiAwOCAxMCAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDU1NjE2OF0goWlXTj+l2LvdqEQtU2Vuc29yIEh1Yqq6P67m2sw/oWoKKyAqIFtUNzAwLk1QXVtPQV0gYWRkIGNlbGxpbmZvMiBjaGFubmVsCisgKgorICogMDggMDQgMjAyMCBhY3Rvcnkub3UKKyAqIFtNT0xZMDA1NTQ1MzRdIFtDb2xnaW5dW0NvZGUgc3luY10gc3luYyBjb2RlIGZyb20gTVQ2ODgwLk1QCisgKiBbVDcwMF1bT0FdW0NDQ0ldIHN5bmMgZnJvbSBNVDY4ODAKKyAqCisgKiAwNyAwOSAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDU0NDM4Nl0gW0NvbGdpbl1bQ0NDSV0gYWRkIElEQyB3aWZpL2J0IGNoYW5uZWxzCisgKiBbTVQ2ODgwLk1QXVtPQV0gYWRkIElEQyB3aWZpL2J0IGNoYW5uZWxzCisgKgorICogMDYgMDMgMjAyMCBhY3Rvcnkub3UKKyAqIFtNT0xZMDA1MjAwNDBdIFtHZW45N11bQ0NDSV0gRElQQyBkZXZlbG9wbWVudCAtIHN1cHBvcnQgcG9ydCBzZXR0aW5nIGluZGljYXRpb24KKyAqIFtOUjE1LlIzLkNPTEdJTi5TQi5TTVQuREVWXVtPQV0gYXBwbHkgRElQQworICoKKyAqIDA1IDE5IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTI1NTk5XSBjb2RlIHN5bmMgZm9yIENvbGdpbgorICogW05SMTUuUjMuQ09MR0lOLlNCLlNNVC5ERVZdW09BXVtDQ0NJXSBjb2RlIHN5bmMgZnJvbSAxOU5PVgorICoKKyAqIDA0IDE0IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTEwNjgxXSBbQ29sZ2luXSBhZGQgTUQgbWV0YSBwb3J0CisgKiBbMTlOT1ZdW09BXSBhZGQgbWV0YSBlYXAgcG9ydAorICoKKyAqIDAzIDIzIDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTAyODU4XSBbR2VuOTddW0dlbjk4XSBtZXJnZSBjY2NpIGNoYW5uZWwgaWQvcnVudGltZSBkYXRhIGlkCisgKiBbMTlOT1ZdW09BXVtOQ0NDSS9OQ0NDSURFVl0gbWVyZ2UgY2hhbm5lbCBpZCB0YWJsZQorICoKKyAqIDAyIDI2IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTAyMTA2XSBbQ0NDSV0gYWRkIG1iaW0gcG9ydAorICogWzE5Tk9WLkRFVl1bT0FdIGFkZCBNQklNIHBvcnQKKyAqCisgKiAwMSAwOCAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDQ2NTc0Ml0gW0dlbjk3XSBhZGQgTDUgY2hhbm5lbHMgYW5kIGNoYW5nZSBDQ0lGIFNITSBsYXlvdXQKKyAqIFtNNzAuMTlOT1ZdW09BXSBmaXggU1AgYnVpbGQKKyAqCisgKiAwMSAwNyAyMDIwIHZlbmRfbWNkX2NpZW5ldDAyNQorICogW01PTFkwMDQ3MDQzNl0gQ29sZ2luIE03MC9NODAgR1BTIHBvcnQgc3VwcG9ydAorICogQ29sZ2luIE03MC9NODAgR1BTIHBvcnQgc3VwcG9ydAorICoKKyAqIDEyIDE4IDIwMTkgYWN0b3J5Lm91CisgKiBbTU9MWTAwNDY1NzQyXSBbR2VuOTddIGFkZCBMNSBjaGFubmVscyBhbmQgY2hhbmdlIENDSUYgU0hNIGxheW91dAorICogWzE5Tk9WLkRFVl1bT0FdIGFkZCBMNSBjaGFubmVscworICoKKyAqIDA0IDE1IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNDc5NzM2XSBbQ292ZXJpdHkgU2Nhbm5lZCBDb2RlIERlZmVjdF1bTVBEXVtDRVJUIEwxIGZvciBDXUNJRDoyOTYzODcgY29kZSBkZWZlY3QgaGFwcGVuZWQgaW4gL21jdS9zZXJ2aWNlL2hpZi9uY2NjaS9zcmMvY2NjaV9hcGlzLmMKKyAqIFtOUjE1LlIzXVtPQV1bQ0NDSV0gZml4IGNvdmVyaXR5CisgKgorICogMDkgMjMgMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDA0NDE2MzldIFtWTU9MWV0gc3VwcG9ydCA2NGtCIGxvZ2dpbmcgY2hhbm5lbAorICogW1ZNT0xZXVtPQV0gY29ycmVjdCBwZWVyX2lkIGFuZCBzdXBwb3J0IDY0a2IgbG9nZ2luZyBjaGFubmVsCisgKgorICogMDcgMjUgMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDA0MjI2NDldIFtHZW45N11bRU1BQ11bUGF0Y2ggYmFjayBmcm9tIEdlbjk1XSBjaGFuZ2UgdWFydC9jY2NpIG5hbWUgZm9yIG5ldHdvcmsgbGF0ZW5jeSBvcHRpbWl6YXRpb24KKyAqIFtWTU9MWV1bT0FdIHN5bmMgY2hhbm5lbAorICoKKyAqIDA3IDE1IDIwMTkgYWN0b3J5Lm91CisgKiBbTU9MWTAwNDIyMDQwXSBbR2VuOTddW1ZNT0xZXSBhZGQgY2hhbm5lbCBmb3IgQ0NDSSBJUEMgcmVtb3ZhbAorICogW1ZNT0xZXVtPQV0gYWRkIGNoYW5uZWwgZm9yIENDQ0kgSVBDIHJlbW92YWwKKyAqCisgKiAwNCAxOSAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDM5NTE3Nl0gW1RoaW4gTW9kZW0gMS4wXVtQQ0llIHBsYXRmb3JtXSBQQ0llIFBsYXRmb3JtIDFzdCBSZWxlYXNlIG9uIEFwb2xsbworICogW1BDSWVdW09BXVtDQ0NJXSBzdXBwb3J0IHBjaWUgdGhpbiBtb2RlbSAxLjAKKyAqCisgKiAwOCAyMyAyMDE4IGFjdG9yeS5vdQorICogW01PTFkwMDM0NjU2Nl0gW0dlbjk3XVtMMVNfTDFESVNBQkxFX1NBUF0gYm9vdCB0byBpZGxlIHN5bmMKKyAqIGFkZCBVREMgY2hhbm5lbCBiYWNrCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgQ0NDSV9NRF9BUF9NSU4gPSBDQ0NJX01EX0FQX0JBU0UsCisgICAgQ0NDSV9DT05UUk9MX0NIQU5ORUwgPSBDQ0NJX01EX0FQX01JTiwgLy89WzAwXSAweDAwMDAKKyAgICBDQ0NJX0NPTlRST0xfQ0hBTk5FTF9BQ0ssIC8vPVswMV0gMHgwMDAxCisgICAgQ0NDSV9TWVNURU1fQ0hBTk5FTCwgLy89WzAyXSAweDAwMDIKKyAgICBDQ0NJX1NZU1RFTV9DSEFOTkVMX0FDSywgLy89WzAzXSAweDAwMDMKKyAgICBDQ0NJX1BDTV9DSEFOTkVMLCAvLz1bMDRdIDB4MDAwNAorICAgIENDQ0lfUENNX0NIQU5ORUxfQUNLLCAvLz1bMDVdIDB4MDAwNQorICAgIENDQ0lfVFNUX0NIQU5ORUwsIC8vPVswNl0gMHgwMDA2CisgICAgQ0NDSV9UU1RfQUNLX0NIQU5ORUwsIC8vPVswN10gMHgwMDA3CisgICAgQ0NDSV9UUl9DSEFOTkVMLCAvLz1bMDhdIDB4MDAwOAorICAgIENDQ0lfVFJfQUNLX0NIQU5ORUwsIC8vPVswOV0gMHgwMDA5CisgICAgQ0NDSV9BVF9DSEFOTkVMX1RYLCAvLz1bMTBdIDB4MDAwYQorICAgIENDQ0lfQVRfQUNLX0NIQU5ORUxfVFgsIC8vPVsxMV0gMHgwMDBiCisgICAgQ0NDSV9BVF9DSEFOTkVMX1JYLCAvLz1bMTJdIDB4MDAwYworICAgIENDQ0lfQVRfQUNLX0NIQU5ORUxfUlgsIC8vPVsxM10gMHgwMDBkCisgICAgQ0NDSV9GU19DSEFOTkVMLCAvLz1bMTRdIDB4MDAwZQorICAgIENDQ0lfRlNfQUNLX0NIQU5ORUwsIC8vPVsxNV0gMHgwMDBmCisgICAgQ0NDSV9QTUlDX0NIQU5ORUwsIC8vPVsxNl0gMHgwMDEwCisgICAgQ0NDSV9QTUlDX0FDS19DSEFOTkVMLCAvLz1bMTddIDB4MDAxMQorICAgIENDQ0lfVUVNX0NIQU5ORUwsIC8vPVsxOF0gMHgwMDEyCisgICAgQ0NDSV9VRU1fQUNLX0NIQU5ORUwsIC8vPVsxOV0gMHgwMDEzCisgICAgQ0NDSV9DQ01OSTFfVFgsIENDQ0lfTkNDTU5JMF9DSEFOTkVMID0gQ0NDSV9DQ01OSTFfVFgsIC8vPVsyMF0gMHgwMDE0CisgICAgQ0NDSV9DQ01OSTFfVFhfQUNLLCAvLz1bMjFdIDB4MDAxNQorICAgIENDQ0lfQ0NNTkkxX1JYLCAvLz1bMjJdIDB4MDAxNgorICAgIENDQ0lfQ0NNTkkxX1JYX0FDSywgLy89WzIzXSAweDAwMTcKKyAgICBDQ0NJX0NDTU5JMl9UWCwgQ0NDSV9OQ0NNTkkxX0NIQU5ORUwgPSBDQ0NJX0NDTU5JMl9UWCwgLy89WzI0XSAweDAwMTgKKyAgICBDQ0NJX0NDTU5JMl9UWF9BQ0ssIC8vPVsyNV0gMHgwMDE5CisgICAgQ0NDSV9DQ01OSTJfUlgsIC8vPVsyNl0gMHgwMDFhCisgICAgQ0NDSV9DQ01OSTJfUlhfQUNLLCAvLz1bMjddIDB4MDAxYgorICAgIENDQ0lfQ0NNTkkzX1RYLCBDQ0NJX05DQ01OSTJfQ0hBTk5FTCA9IENDQ0lfQ0NNTkkzX1RYLCAvLz1bMjhdIDB4MDAxYworICAgIENDQ0lfQ0NNTkkzX1RYX0FDSywgLy89WzI5XSAweDAwMWQKKyAgICBDQ0NJX0NDTU5JM19SWCwgLy89WzMwXSAweDAwMWUKKyAgICBDQ0NJX0NDTU5JM19SWF9BQ0ssIC8vPVszMV0gMHgwMDFmCisgICAgQ0NDSV9JUENfUlBDX0NIQU5ORUwsIC8vPVszMl0gMHgwMDIwCisgICAgQ0NDSV9JUENfUlBDX0FDS19DSEFOTkVMLCAvLz1bMzNdIDB4MDAyMQorICAgIENDQ0lfTVNHU1ZDX1NFTkRfQ0hBTk5FTCwgLy89WzM0XSAweDAwMjIKKyAgICBDQ0NJX01TR1NWQ19TRU5EX0FDS19DSEFOTkVMLCAvLz1bMzVdIDB4MDAyMworICAgIENDQ0lfTVNHU1ZDX1JDVl9DSEFOTkVMLCAvLz1bMzZdIDB4MDAyNAorICAgIENDQ0lfTVNHU1ZDX1JDVl9BQ0tfQ0hBTk5FTCwgLy89WzM3XSAweDAwMjUKKyAgICBDQ0NJX0dQU19DSEFOTkVMX1RYLCAvLz1bMzhdIDB4MDAyNgorICAgIENDQ0lfR1BTX0FDS19DSEFOTkVMX1RYLCAvLz1bMzldIDB4MDAyNworICAgIENDQ0lfR1BTX0NIQU5ORUxfUlgsIC8vPVs0MF0gMHgwMDI4CisgICAgQ0NDSV9HUFNfQUNLX0NIQU5ORUxfUlgsIC8vPVs0MV0gMHgwMDI5CisgICAgQ0NDSV9NRF9MT0dfUlgsIC8vPVs0Ml0gMHgwMDJhCisgICAgQ0NDSV9NRF9MT0dfVFgsIC8vPVs0M10gMHgwMDJiCisgICAgQ0NDSV9BUk03X1JFU0VSVkVEMV9UWCwgLy89WzQ0XSAweDAwMmMKKyAgICBDQ0NJX0FSTTdfUkVTRVJWRUQxX1JYLCAvLz1bNDVdIDB4MDAyZAorICAgIENDQ0lfQVJNN19SRVNFUlZFRDJfUlgsIC8vPVs0Nl0gMHgwMDJlCisgICAgQ0NDSV9BUk03X1JFU0VSVkVEMl9UWCwgLy89WzQ3XSAweDAwMmYKKyAgICBDQ0NJX0FSTTdfUkVTRVJWRUQzX1RYLCAvLz1bNDhdIDB4MDAzMAorICAgIENDQ0lfQVJNN19SRVNFUlZFRDNfUlgsIC8vPVs0OV0gMHgwMDMxCisgICAgQ0NDSV9JVF9DSEFOTkVMX1RYLCAvLz1bNTBdIDB4MDAzMgorICAgIENDQ0lfSVRfQ0hBTk5FTF9SWCwgLy89WzUxXSAweDAwMzMKKyAgICBDQ0NJX0lNU1ZfVUwsIC8vPVs1Ml0gMHgwMDM0CisgICAgQ0NDSV9JTVNWX0RMLCAvLz1bNTNdIDB4MDAzNQorICAgIENDQ0lfSU1TQ19VTCwgLy89WzU0XSAweDAwMzYKKyAgICBDQ0NJX0lNU0NfREwsIC8vPVs1NV0gMHgwMDM3CisgICAgQ0NDSV9JTVNBX1VMLCAvLz1bNTZdIDB4MDAzOAorICAgIENDQ0lfSU1TQV9ETCwgLy89WzU3XSAweDAwMzkKKyAgICBDQ0NJX0lNU0RfVUwsIC8vPVs1OF0gMHgwMDNhCisgICAgQ0NDSV9JTVNEX0RMLCAvLz1bNTldIDB4MDAzYgorICAgIENDQ0lfU0lNX0NIQU5ORUxfVFgsIC8vPVs2MF0gMHgwMDNjCisgICAgQ0NDSV9TSU1fQ0hBTk5FTF9SWCwgLy89WzYxXSAweDAwM2QKKyAgICBDQ0NJX0xCX0lUX0NIQU5ORUxfVFgsIC8vPVs2Ml0gMHgwMDNlCisgICAgQ0NDSV9MQl9JVF9DSEFOTkVMX1JYLCAvLz1bNjNdIDB4MDAzZgorICAgIENDQ0lfQ0NNTkkxX0RMQUNLX1RYLCAvLz1bNjRdIDB4MDA0MCAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fCisgICAgQ0NDSV9DQ01OSTJfRExBQ0tfVFgsIC8vPVs2NV0gMHgwMDQxIC8vX19DQ01OSV9BQ0tfRkFTVF9QQVRIX18KKyAgICBDQ0NJX0NDTU5JM19ETEFDS19UWCwgLy89WzY2XSAweDAwNDIgLy9fX0NDTU5JX0FDS19GQVNUX1BBVEhfXyAgIAorICAgIENDQ0lfREVCVUdfU1RBVFVTX0NIQU5ORUxfVFgsIC8vPVs2N10gMHgwMDQzCisgICAgQ0NDSV9ERUJVR19TVEFUVVNfQ0hBTk5FTF9SWCwgLy89WzY4XSAweDAwNDQKKyAgICBDQ0NJX0NDTU5JNF9UWCwgQ0NDSV9OQ0NNTkkzX0NIQU5ORUwgPSBDQ0NJX0NDTU5JNF9UWCwgLy89WzY5XSAweDAwNDUKKyAgICBDQ0NJX0NDTU5JNF9UWF9BQ0ssIC8vPVs3MF0gMHgwMDQ2CisgICAgQ0NDSV9DQ01OSTRfUlgsIC8vPVs3MV0gMHgwMDQ3CisgICAgQ0NDSV9DQ01OSTRfUlhfQUNLLCAvLz1bNzJdIDB4MDA0OAorICAgIENDQ0lfQ0NNTkk0X0RMQUNLX1RYLCAvLz1bNzNdIDB4MDA0OSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fICAKKyAgICBDQ0NJX0NDTU5JNV9UWCwgQ0NDSV9OQ0NNTkk0X0NIQU5ORUwgPSBDQ0NJX0NDTU5JNV9UWCwgLy89Wzc0XSAweDAwNGEKKyAgICBDQ0NJX0NDTU5JNV9UWF9BQ0ssIC8vPVs3NV0gMHgwMDRiCisgICAgQ0NDSV9DQ01OSTVfUlgsIC8vPVs3Nl0gMHgwMDRjCisgICAgQ0NDSV9DQ01OSTVfUlhfQUNLLCAvLz1bNzddIDB4MDA0ZAorICAgIENDQ0lfQ0NNTkk1X0RMQUNLX1RYLCAvLz1bNzhdIDB4MDA0ZSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fICAKKyAgICBDQ0NJX0NDTU5JNl9UWCwgQ0NDSV9OQ0NNTkk1X0NIQU5ORUwgPSBDQ0NJX0NDTU5JNl9UWCwgLy89Wzc5XSAweDAwNGYKKyAgICBDQ0NJX0NDTU5JNl9UWF9BQ0ssIC8vPVs4MF0gMHgwMDUwCisgICAgQ0NDSV9DQ01OSTZfUlgsIC8vPVs4MV0gMHgwMDUxCisgICAgQ0NDSV9DQ01OSTZfUlhfQUNLLCAvLz1bODJdIDB4MDA1MgorICAgIENDQ0lfQ0NNTkk2X0RMQUNLX1RYLCAvLz1bODNdIDB4MDA1MyAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fICAKKyAgICBDQ0NJX0NDTU5JN19UWCwgQ0NDSV9OQ0NNTkk2X0NIQU5ORUwgPSBDQ0NJX0NDTU5JN19UWCwgLy89Wzg0XSAweDAwNTQKKyAgICBDQ0NJX0NDTU5JN19UWF9BQ0ssIC8vPVs4NV0gMHgwMDU1CisgICAgQ0NDSV9DQ01OSTdfUlgsIC8vPVs4Nl0gMHgwMDU2CisgICAgQ0NDSV9DQ01OSTdfUlhfQUNLLCAvLz1bODddIDB4MDA1NworICAgIENDQ0lfQ0NNTkk3X0RMQUNLX1RYLCAvLz1bODhdIDB4MDA1OCAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fICAKKyAgICBDQ0NJX0NDTU5JOF9UWCwgQ0NDSV9OQ0NNTkk3X0NIQU5ORUwgPSBDQ0NJX0NDTU5JOF9UWCwgLy89Wzg5XSAweDAwNTkKKyAgICBDQ0NJX0NDTU5JOF9UWF9BQ0ssIC8vPVs5MF0gMHgwMDVhCisgICAgQ0NDSV9DQ01OSThfUlgsIC8vPVs5MV0gMHgwMDViCisgICAgQ0NDSV9DQ01OSThfUlhfQUNLLCAvLz1bOTJdIDB4MDA1YworICAgIENDQ0lfQ0NNTkk4X0RMQUNLX1RYLCAvLz1bOTNdIDB4MDA1ZCAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fICAgIAorICAgIENDQ0lfTURfTE9HMl9SWCwgLy89Wzk0XSAweDAwNWUKKyAgICBDQ0NJX01EX0xPRzJfVFgsIC8vPVs5NV0gMHgwMDVmCisgICAgQ0NDSV9DQ01OSTlfVFgsIENDQ0lfTkNDTU5JOF9DSEFOTkVMID0gQ0NDSV9DQ01OSTlfVFgsIC8vPVs5Nl0gMHgwMDYwCisgICAgQ0NDSV9DQ01OSTlfVFhfQUNLLCAvLz1bOTddIDB4MDA2MQorICAgIENDQ0lfQ0NNTkk5X1JYLCAvLz1bOThdIDB4MDA2MgorICAgIENDQ0lfQ0NNTkk5X1JYX0FDSywgLy89Wzk5XSAweDAwNjMKKyAgICBDQ0NJX0NDTU5JOV9ETEFDS19UWCwgLy89WzEwMF0gMHgwMDY0IC8vX19DQ01OSV9BQ0tfRkFTVF9QQVRIX18KKyAgICBDQ0NJX0lNU0VNX1VMLCAvLz1bMTAxXSAweDAwNjUKKyAgICBDQ0NJX0lNU0VNX0RMLCAvLz1bMTAyXSAweDAwNjYgICAgIAorICAgIENDQ0lfQ0NNTkkxMF9UWCwgQ0NDSV9OQ0NNTkk5X0NIQU5ORUwgPSBDQ0NJX0NDTU5JMTBfVFgsIC8vPVsxMDNdIDB4MDA2NworICAgIENDQ0lfQ0NNTkkxMF9UWF9BQ0ssIC8vPVsxMDRdIDB4MDA2OAorICAgIENDQ0lfQ0NNTkkxMF9SWCwgLy89WzEwNV0gMHgwMDY5CisgICAgQ0NDSV9DQ01OSTEwX1JYX0FDSywgLy89WzEwNl0gMHgwMDZhCisgICAgQ0NDSV9DQ01OSTEwX0RMQUNLX1RYLCAvLz1bMTA3XSAweDAwNmIgLy9fX0NDTU5JX0FDS19GQVNUX1BBVEhfXyAKKyAgICBDQ0NJX0NDTU5JMTFfVFgsIENDQ0lfTkNDTU5JMTBfQ0hBTk5FTCA9IENDQ0lfQ0NNTkkxMV9UWCwgLy89WzEwOF0gMHgwMDZjCisgICAgQ0NDSV9DQ01OSTExX1RYX0FDSywgLy89WzEwOV0gMHgwMDZkCisgICAgQ0NDSV9DQ01OSTExX1JYLCAvLz1bMTEwXSAweDAwNmUKKyAgICBDQ0NJX0NDTU5JMTFfUlhfQUNLLCAvLz1bMTExXSAweDAwNmYKKyAgICBDQ0NJX0NDTU5JMTFfRExBQ0tfVFgsIC8vPVsxMTJdIDB4MDA3MCAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkxMl9UWCwgQ0NDSV9OQ0NNTkkxMV9DSEFOTkVMID0gQ0NDSV9DQ01OSTEyX1RYLCAvLz1bMTEzXSAweDAwNzEKKyAgICBDQ0NJX0NDTU5JMTJfVFhfQUNLLCAvLz1bMTE0XSAweDAwNzIKKyAgICBDQ0NJX0NDTU5JMTJfUlgsIC8vPVsxMTVdIDB4MDA3MworICAgIENDQ0lfQ0NNTkkxMl9SWF9BQ0ssIC8vPVsxMTZdIDB4MDA3NAorICAgIENDQ0lfQ0NNTkkxMl9ETEFDS19UWCwgLy89WzExN10gMHgwMDc1IC8vX19DQ01OSV9BQ0tfRkFTVF9QQVRIX18gCisgICAgQ0NDSV9DQ01OSTEzX1RYLCBDQ0NJX05DQ01OSTEyX0NIQU5ORUwgPSBDQ0NJX0NDTU5JMTNfVFgsIC8vPVsxMThdIDB4MDA3NgorICAgIENDQ0lfQ0NNTkkxM19UWF9BQ0ssIC8vPVsxMTldIDB4MDA3NworICAgIENDQ0lfQ0NNTkkxM19SWCwgLy89WzEyMF0gMHgwMDc4CisgICAgQ0NDSV9DQ01OSTEzX1JYX0FDSywgLy89WzEyMV0gMHgwMDc5CisgICAgQ0NDSV9DQ01OSTEzX0RMQUNLX1RYLCAvLz1bMTIyXSAweDAwN2EgLy9fX0NDTU5JX0FDS19GQVNUX1BBVEhfXyAKKyAgICBDQ0NJX0NDTU5JMTRfVFgsIENDQ0lfTkNDTU5JMTNfQ0hBTk5FTCA9IENDQ0lfQ0NNTkkxNF9UWCwgLy89WzEyM10gMHgwMDdiCisgICAgQ0NDSV9DQ01OSTE0X1RYX0FDSywgLy89WzEyNF0gMHgwMDdjCisgICAgQ0NDSV9DQ01OSTE0X1JYLCAvLz1bMTI1XSAweDAwN2QKKyAgICBDQ0NJX0NDTU5JMTRfUlhfQUNLLCAvLz1bMTI2XSAweDAwN2UKKyAgICBDQ0NJX0NDTU5JMTRfRExBQ0tfVFgsIC8vPVsxMjddIDB4MDA3ZiAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkxNV9UWCwgQ0NDSV9OQ0NNTkkxNF9DSEFOTkVMID0gQ0NDSV9DQ01OSTE1X1RYLCAvLz1bMTI4XSAweDAwODAKKyAgICBDQ0NJX0NDTU5JMTVfVFhfQUNLLCAvLz1bMTI5XSAweDAwODEKKyAgICBDQ0NJX0NDTU5JMTVfUlgsIC8vPVsxMzBdIDB4MDA4MgorICAgIENDQ0lfQ0NNTkkxNV9SWF9BQ0ssIC8vPVsxMzFdIDB4MDA4MworICAgIENDQ0lfQ0NNTkkxNV9ETEFDS19UWCwgLy89WzEzMl0gMHgwMDg0IC8vX19DQ01OSV9BQ0tfRkFTVF9QQVRIX18gCisgICAgQ0NDSV9DQ01OSTE2X1RYLCBDQ0NJX05DQ01OSTE1X0NIQU5ORUwgPSBDQ0NJX0NDTU5JMTZfVFgsIC8vPVsxMzNdIDB4MDA4NQorICAgIENDQ0lfQ0NNTkkxNl9UWF9BQ0ssIC8vPVsxMzRdIDB4MDA4NgorICAgIENDQ0lfQ0NNTkkxNl9SWCwgLy89WzEzNV0gMHgwMDg3CisgICAgQ0NDSV9DQ01OSTE2X1JYX0FDSywgLy89WzEzNl0gMHgwMDg4CisgICAgQ0NDSV9DQ01OSTE2X0RMQUNLX1RYLCAvLz1bMTM3XSAweDAwODkgLy9fX0NDTU5JX0FDS19GQVNUX1BBVEhfXyAKKyAgICBDQ0NJX0NDTU5JMTdfVFgsIENDQ0lfTkNDTU5JMTZfQ0hBTk5FTCA9IENDQ0lfQ0NNTkkxN19UWCwgLy89WzEzOF0gMHgwMDhhCisgICAgQ0NDSV9DQ01OSTE3X1RYX0FDSywgLy89WzEzOV0gMHgwMDhiCisgICAgQ0NDSV9DQ01OSTE3X1JYLCAvLz1bMTQwXSAweDAwOGMKKyAgICBDQ0NJX0NDTU5JMTdfUlhfQUNLLCAvLz1bMTQxXSAweDAwOGQKKyAgICBDQ0NJX0NDTU5JMTdfRExBQ0tfVFgsIC8vPVsxNDJdIDB4MDA4ZSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkxOF9UWCwgQ0NDSV9OQ0NNTkkxN19DSEFOTkVMID0gQ0NDSV9DQ01OSTE4X1RYLCAvLz1bMTQzXSAweDAwOGYKKyAgICBDQ0NJX0NDTU5JMThfVFhfQUNLLCAvLz1bMTQ0XSAweDAwOTAKKyAgICBDQ0NJX0NDTU5JMThfUlgsIC8vPVsxNDVdIDB4MDA5MQorICAgIENDQ0lfQ0NNTkkxOF9SWF9BQ0ssIC8vPVsxNDZdIDB4MDA5MgorICAgIENDQ0lfQ0NNTkkxOF9ETEFDS19UWCwgLy89WzE0N10gMHgwMDkzIC8vX19DQ01OSV9BQ0tfRkFTVF9QQVRIX18gCisgICAgQ0NDSV9DQ01OSTE5X1RYLCBDQ0NJX05DQ01OSTE4X0NIQU5ORUwgPSBDQ0NJX0NDTU5JMTlfVFgsIC8vPVsxNDhdIDB4MDA5NAorICAgIENDQ0lfQ0NNTkkxOV9UWF9BQ0ssIC8vPVsxNDldIDB4MDA5NQorICAgIENDQ0lfQ0NNTkkxOV9SWCwgLy89WzE1MF0gMHgwMDk2CisgICAgQ0NDSV9DQ01OSTE5X1JYX0FDSywgLy89WzE1MV0gMHgwMDk3CisgICAgQ0NDSV9DQ01OSTE5X0RMQUNLX1RYLCAvLz1bMTUyXSAweDAwOTggLy9fX0NDTU5JX0FDS19GQVNUX1BBVEhfXyAKKyAgICBDQ0NJX0NDTU5JMjBfVFgsIENDQ0lfTkNDTU5JMTlfQ0hBTk5FTCA9IENDQ0lfQ0NNTkkyMF9UWCwgLy89WzE1M10gMHgwMDk5CisgICAgQ0NDSV9DQ01OSTIwX1RYX0FDSywgLy89WzE1NF0gMHgwMDlhCisgICAgQ0NDSV9DQ01OSTIwX1JYLCAvLz1bMTU1XSAweDAwOWIKKyAgICBDQ0NJX0NDTU5JMjBfUlhfQUNLLCAvLz1bMTU2XSAweDAwOWMKKyAgICBDQ0NJX0NDTU5JMjBfRExBQ0tfVFgsIC8vPVsxNTddIDB4MDA5ZCAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkyMV9UWCwgQ0NDSV9OQ0NNTkkyMF9DSEFOTkVMID0gQ0NDSV9DQ01OSTIxX1RYLCAvLz1bMTU4XSAweDAwOWUKKyAgICBDQ0NJX0NDTU5JMjFfVFhfQUNLLCAvLz1bMTU5XSAweDAwOWYKKyAgICBDQ0NJX0NDTU5JMjFfUlgsIC8vPVsxNjBdIDB4MDBhMAorICAgIENDQ0lfQ0NNTkkyMV9SWF9BQ0ssIC8vPVsxNjFdIDB4MDBhMQorICAgIENDQ0lfQ0NNTkkyMV9ETEFDS19UWCwgLy89WzE2Ml0gMHgwMGEyIC8vX19DQ01OSV9BQ0tfRkFTVF9QQVRIX18gCisgICAgQ0NDSV9BVENQX1RYLCAvLz1bMTYzXSAweDAwYTMgIAorICAgIENDQ0lfQVRDUF9SWCwgLy89WzE2NF0gMHgwMGE0ICAKKyAgICBDQ0NJX0MyS19QUFBfVFgsIC8vPVsxNjVdIDB4MDBhNSAgCisgICAgQ0NDSV9DMktfUFBQX1JYLCAvLz1bMTY2XSAweDAwYTYgIAorICAgIENDQ0lfQzJLX0FHUFNfVFgsIC8vPVsxNjddIDB4MDBhNyAgCisgICAgQ0NDSV9DMktfQUdQU19SWCwgLy89WzE2OF0gMHgwMGE4ICAKKyAgICBDQ0NJX0lNU01fQ0hBTk5FTF9UWCwgLy89WzE2OV0gMHgwMGE5CisgICAgQ0NDSV9JTVNNX0NIQU5ORUxfUlgsIC8vPVsxNzBdIDB4MDBhYQorICAgIENDQ0lfV09BX0NIQU5ORUxfVFgsIC8vPVsxNzFdIDB4MDBhYgorICAgIENDQ0lfV09BX0NIQU5ORUxfUlgsIC8vPVsxNzJdIDB4MDBhYworICAgIENDQ0lfWFVJX0NIQU5ORUxfVFgsIC8vPVsxNzNdIDB4MDBhZAorICAgIENDQ0lfWFVJX0NIQU5ORUxfUlgsIC8vPVsxNzRdIDB4MDBhZQorICAgIENDQ0lfQklQX0NIQU5ORUxfVFgsIC8vPVsxNzVdIDB4MDBhZgorICAgIENDQ0lfQklQX0NIQU5ORUxfUlgsIC8vPVsxNzZdIDB4MDBiMAorICAgIENDQ0lfVURDX0NIQU5ORUxfVFgsIC8vPVsxNzddIDB4MDBiMQorICAgIENDQ0lfVURDX0NIQU5ORUxfUlgsIC8vPVsxNzhdIDB4MDBiMgorICAgIENDQ0lfTUlQSV9DSEFOTkVMX1RYLCAvLz1bMTc5XSAweDAwYjMKKyAgICBDQ0NJX01JUElfQ0hBTk5FTF9SWCwgLy89WzE4MF0gMHgwMGI0CisgICAgQ0NDSV9OTE9QVF9DSEFOTkVMX1RYLCAvLz1bMTgxXSAweDAwYjUKKyAgICBDQ0NJX05MT1BUX0NIQU5ORUxfUlgsIC8vPVsxODJdIDB4MDBiNgorICAgIENDQ0lfTkxPUFBfQ0hBTk5FTF9UWCwgLy89WzE4M10gMHgwMGI3CisgICAgQ0NDSV9OTE9QUF9DSEFOTkVMX1JYLCAvLz1bMTg0XSAweDAwYjgKKyAgICBDQ0NJX0NJUV9DSEFOTkVMX1RYLCAvLz1bMTg1XSAweDAwYjkKKyAgICBDQ0NJX0NJUV9DSEFOTkVMX1JYLCAvLz1bMTg2XSAweDAwYmEKKyAgICBDQ0NJX1dJRklQUk9YWV9DSEFOTkVMX1RYLCBDQ0NJX1dJRklQUk9YWV9DSEFOTkVMID0gQ0NDSV9XSUZJUFJPWFlfQ0hBTk5FTF9UWCwgLy89WzE4N10gMHgwMGJiCisgICAgQ0NDSV9XSUZJUFJPWFlfQ0hBTk5FTF9SWCwgLy89WzE4OF0gMHgwMGJjCisgICAgQ0NDSV9WVFNfQ0hBTk5FTF9UWCwgQ0NDSV9WVFNfQ0hBTk5FTCA9IENDQ0lfVlRTX0NIQU5ORUxfVFgsICAvLz1bMTg5XSAweDAwYmQKKyAgICBDQ0NJX1ZUU19DSEFOTkVMX1JYLCAvLz1bMTkwXSAweDAwYmUKKyAgICBDQ0NJX0lLRVJBV19DSEFOTkVMX1RYLCAvLz1bMTkxXSAweDAwYmYKKyAgICBDQ0NJX0lLRVJBV19DSEFOTkVMX1JYLCAvLz1bMTkyXSAweDAwYzAKKyAgICBDQ0NJX1JJTF9JUEMwX0NIQU5ORUxfVFgsIC8vPVsxOTNdIDB4MDBjMQorICAgIENDQ0lfUklMX0lQQzBfQ0hBTk5FTF9SWCwgLy89WzE5NF0gMHgwMGMyCisgICAgQ0NDSV9SSUxfSVBDMV9DSEFOTkVMX1RYLCAvLz1bMTk1XSAweDAwYzMKKyAgICBDQ0NJX1JJTF9JUEMxX0NIQU5ORUxfUlgsIC8vPVsxOTZdIDB4MDBjNAorICAgIENDQ0lfM0dfVlRfQ0hBTk5FTF9UWCwgLy89WzE5N10gMHgwMGM1CisgICAgQ0NDSV8zR19WVF9DSEFOTkVMX1JYLCAvLz1bMTk4XSAweDAwYzYKKyAgICBDQ0NJX0RVTU1ZMTk5X0NIQU5ORUwsIC8vPVsxOTldIDB4MDBjNworICAgIENDQ0lfMF8yMDBfQ0hBTk5FTF9UWCwgQ0NDSV8wXzIwMF9DSEFOTkVMID0gQ0NDSV8wXzIwMF9DSEFOTkVMX1RYLCAvLz1bMjAwXSAweDAwYzgKKyAgICBDQ0NJXzBfMjAwX0NIQU5ORUxfUlgsIC8vPVsyMDFdIDB4MDBjOQorICAgIENDQ0lfMF8yMDJfQ0hBTk5FTF9UWCwgQ0NDSV8wXzIwMl9DSEFOTkVMID0gQ0NDSV8wXzIwMl9DSEFOTkVMX1RYLCAvLz1bMjAyXSAweDAwY2EKKyAgICBDQ0NJXzBfMjAyX0NIQU5ORUxfUlgsIC8vPVsyMDNdIDB4MDBjYgorICAgIENDQ0lfMF8yMDRfQ0hBTk5FTF9UWCwgQ0NDSV8wXzIwNF9DSEFOTkVMID0gQ0NDSV8wXzIwNF9DSEFOTkVMX1RYLCAvLz1bMjA0XSAweDAwY2MKKyAgICBDQ0NJXzBfMjA0X0NIQU5ORUxfUlgsIC8vPVsyMDVdIDB4MDBjZAorICAgIENDQ0lfQVBQUFJJT19DSEFOTkVMX1RYLCBDQ0NJX0FQUFBSSU9fQ0hBTk5FTCA9IENDQ0lfQVBQUFJJT19DSEFOTkVMX1RYLC8vPVsyMDZdIDB4MDBjZQorICAgIENDQ0lfQVBQUFJJT19DSEFOTkVMX1JYLC8vPVsyMDddIDB4MDBjZgorICAgIENDQ0lfQVBfTE9HX0NUUkxfVFgsIENDQ0lfQVBfTE9HX0NUUkwgPSBDQ0NJX0FQX0xPR19DVFJMX1RYLCAvLz1bMjA4XSAweDAwZDAKKyAgICBDQ0NJX0FQX0xPR19DVFJMX1JYLCAvLz1bMjA5XSAweDAwZDEKKyAgICBDQ0NJX0FQX0xPR19EQVRBX1RYLCBDQ0NJX0FQX0xPR19EQVRBID0gQ0NDSV9BUF9MT0dfREFUQV9UWCwgLy89WzIxMF0gMHgwMGQyCisgICAgQ0NDSV9BUF9MT0dfREFUQV9SWCwgLy89WzIxMV0gMHgwMGQzCisgICAgQ0NDSV9EUkFNX1BST0ZJTEVfVFgsIENDQ0lfRFJBTV9QUk9GSUxFID0gQ0NDSV9EUkFNX1BST0ZJTEVfVFgsIC8vPVsyMTJdIDB4MDBkNAorICAgIENDQ0lfRFJBTV9QUk9GSUxFX1JYLCAvLz1bMjEzXSAweDAwZDUKKyAgICBDQ0NJX01JUENfQVAwX0NIQU5ORUxfVFgsIC8vPVsyMTRdIDB4MDBkNgorICAgIENDQ0lfTUlQQ19BUDBfQ0hBTk5FTF9SWCwgLy89WzIxNV0gMHgwMGQ3CisgICAgQ0NDSV9NSVBDX0FQMV9DSEFOTkVMX1RYLCAvLz1bMjE2XSAweDAwZDgKKyAgICBDQ0NJX01JUENfQVAxX0NIQU5ORUxfUlgsIC8vPVsyMTddIDB4MDBkOQorICAgIENDQ0lfTUlQQ19BUDJfQ0hBTk5FTF9UWCwgLy89WzIxOF0gMHgwMGRhCisgICAgQ0NDSV9NSVBDX0FQMl9DSEFOTkVMX1JYLCAvLz1bMjE5XSAweDAwZGIKKyAgICBDQ0NJX01JUENfQVAzX0NIQU5ORUxfVFgsIC8vPVsyMjBdIDB4MDBkYworICAgIENDQ0lfTUlQQ19BUDNfQ0hBTk5FTF9SWCwgLy89WzIyMV0gMHgwMGRkCisgICAgQ0NDSV9NSVBDX0FQNF9DSEFOTkVMX1RYLCAvLz1bMjIyXSAweDAwZGUKKyAgICBDQ0NJX01JUENfQVA0X0NIQU5ORUxfUlgsIC8vPVsyMjNdIDB4MDBkZgorICAgIENDQ0lfTUlQQ19BUDVfQ0hBTk5FTF9UWCwgLy89WzIyNF0gMHgwMGUwCisgICAgQ0NDSV9NSVBDX0FQNV9DSEFOTkVMX1JYLCAvLz1bMjI1XSAweDAwZTEKKyAgICBDQ0NJX01JUENfQVA2X0NIQU5ORUxfVFgsIC8vPVsyMjZdIDB4MDBlMgorICAgIENDQ0lfTUlQQ19BUDZfQ0hBTk5FTF9SWCwgLy89WzIyN10gMHgwMGUzCisgICAgQ0NDSV9NSVBDX0FQN19DSEFOTkVMX1RYLCAvLz1bMjI4XSAweDAwZTQKKyAgICBDQ0NJX01JUENfQVA3X0NIQU5ORUxfUlgsIC8vPVsyMjldIDB4MDBlNQorICAgIENDQ0lfTUlQQ19BUDhfQ0hBTk5FTF9UWCwgLy89WzIzMF0gMHgwMGU2CisgICAgQ0NDSV9NSVBDX0FQOF9DSEFOTkVMX1JYLCAvLz1bMjMxXSAweDAwZTcKKyAgICBDQ0NJX01JUENfQVA5X0NIQU5ORUxfVFgsIC8vPVsyMzJdIDB4MDBlOAorICAgIENDQ0lfTUlQQ19BUDlfQ0hBTk5FTF9SWCwgLy89WzIzM10gMHgwMGU5CisgICAgQ0NDSV9VU0JfRldEX0NIQU5ORUxfVFgsIENDQ0lfVVNCX0ZXRF9DSEFOTkVMID0gQ0NDSV9VU0JfRldEX0NIQU5ORUxfVFgsIC8vPVsyMzRdIDB4MDBlYQorICAgIENDQ0lfVVNCX0ZXRF9DSEFOTkVMX1JYLCAvLz1bMjM1XSAweDAwZWIKKyAgICBDQ0NJX0VQREdfQ0hBTk5FTF9UWCwgLy89WzIzNl0gMHgwMGVjCisgICAgQ0NDSV9FUERHX0NIQU5ORUxfUlgsIC8vPVsyMzddIDB4MDBlZAorICAgIENDQ0lfRVBERzJfQ0hBTk5FTF9UWCwgLy89WzIzOF0gMHgwMGVlCisgICAgQ0NDSV9FUERHMl9DSEFOTkVMX1JYLCAvLz1bMjM5XSAweDAwZWYKKyAgICBDQ0NJX0VQREczX0NIQU5ORUxfVFgsIC8vPVsyNDBdIDB4MDBmMAorICAgIENDQ0lfRVBERzNfQ0hBTk5FTF9SWCwgLy89WzI0MV0gMHgwMGYxCisgICAgQ0NDSV9FUERHNF9DSEFOTkVMX1RYLCAvLz1bMjQyXSAweDAwZjIKKyAgICBDQ0NJX0VQREc0X0NIQU5ORUxfUlgsIC8vPVsyNDNdIDB4MDBmMworICAgIENDQ0lfSURDX1dJRklfQ0hBTk5FTF9UWCwgQ0NDSV9JRENfV0lGSV9DSEFOTkVMID0gQ0NDSV9JRENfV0lGSV9DSEFOTkVMX1RYLCAvLz1bMjQ0XSAweDAwZjQKKyAgICBDQ0NJX0lEQ19XSUZJX0NIQU5ORUxfUlgsIC8vPVsyNDVdIDB4MDBmNQorICAgIENDQ0lfSURDX0JUX0NIQU5ORUxfVFgsIENDQ0lfSURDX0JUX0NIQU5ORUwgPSBDQ0NJX0lEQ19CVF9DSEFOTkVMX1RYLCAvLz1bMjQ2XSAweDAwZjYKKyAgICBDQ0NJX0lEQ19CVF9DSEFOTkVMX1JYLCAvLz1bMjQ3XSAweDAwZjcKKwlDQ0NJX01JUENfQVAxMF9DSEFOTkVMX1RYLCAvLz1bMjQ4XSAweDAwZjgKKwlDQ0NJX01JUENfQVAxMF9DSEFOTkVMX1JYLCAvLz1bMjQ5XSAweDAwZjkKKwlDQ0NJX01JUENfQVAxMV9DSEFOTkVMX1RYLCAvLz1bMjUwXSAweDAwZmEKKwlDQ0NJX01JUENfQVAxMV9DSEFOTkVMX1JYLCAvLz1bMjUxXSAweDAwZmIKKwlDQ0NJX01JUENfQVAxMl9DSEFOTkVMX1RYLCAvLz1bMjUyXSAweDAwZmMKKwlDQ0NJX01JUENfQVAxMl9DSEFOTkVMX1JYLCAvLz1bMjUzXSAweDAwZmQKKwlDQ0NJX01JUENfQVAxM19DSEFOTkVMX1RYLCAvLz1bMjU0XSAweDAwZmUKKwlDQ0NJX01JUENfQVAxM19DSEFOTkVMX1JYLCAvLz1bMjU1XSAweDAwZmYKKwlDQ0NJX01JUENfQVAxNF9DSEFOTkVMX1RYLCAvLz1bMjU2XSAweDAxMDAKKwlDQ0NJX01JUENfQVAxNF9DSEFOTkVMX1JYLCAvLz1bMjU3XSAweDAxMDEKKworICAgICNpZiBkZWZpbmVkKF9fQ0NDSV9VVF9fKSAvL2tlZXAgdGhpcyBVVCBwb3J0IGF0IHRoZSBlbmQgb2YgdGFibGUKKyAgICBDQ0NJX05DQ0NJX1RFU1RfQ0hBTk5FTF9UWCwgQ0NDSV9OQ0NDSV9URVNUX0NIQU5ORUwgPSBDQ0NJX05DQ0NJX1RFU1RfQ0hBTk5FTF9UWCwKKyAgICBDQ0NJX05DQ0NJX1RFU1RfQ0hBTk5FTF9SWCwKKyAgICBDQ0NJX05DQ0NJX1VUX0NIQU5ORUxfVFgsIENDQ0lfTkNDQ0lfVVRfQ0hBTk5FTCA9IENDQ0lfTkNDQ0lfVVRfQ0hBTk5FTF9UWCwKKyAgICBDQ0NJX05DQ0NJX1VUX0NIQU5ORUxfUlgsCisgICAgQ0NDSV9VVF9DSEFOTkVMX1RYLAorICAgIENDQ0lfVVRfQ0hBTk5FTF9SWCwKKyAgICAjZW5kaWYKKyAgICBDQ0NJX01EX0FQX01BWCwKKyAgICBDQ0NJX01EX0FQX01BWF9DSEFOTkVMID0gQ0NDSV9NRF9BUF9NQVgtQ0NDSV9NRF9BUF9NSU4sCisKKyAgICBDQ0NJX01EX1NDUF9NSU4gPSBDQ0NJX01EX1NDUF9CQVNFLAorICAgICNpZiBkZWZpbmVkKF9fSElGX0NDSVNNX1NDUF9TVVBQT1JUX18pCisgICAgQ0NDSV9DRUxMSU5GT19DSEFOTkVMX1RYID0gQ0NDSV9NRF9TQ1BfTUlOLC8vID1bMDBdIAorICAgIENDQ0lfQ0VMTElORk9fQUNLX0NIQU5ORUxfVFgsLy8gPVswMV0KKyAgICBDQ0NJX0NFTExJTkZPX0NIQU5ORUxfUlgsLy8gPVswMl0KKyAgICBDQ0NJX0NFTExJTkZPX0FDS19DSEFOTkVMX1JYLC8vID1bMDNdCisgICAgQ0NDSV9NRF9TQ1BfVFhfTEJfSVQsLy8gPVswNF0gLy9DQ0lTTSBMQiBJVCBUeCBDSEFOTkVMCisgICAgQ0NDSV9NRF9TQ1BfUlhfTEJfSVQsLy8gPVswNV0gLy9DQ0lTTSBMQiBJVCBSeCBDSEFOTkVMCisgICAgQ0NDSV9NRF9TQ1BfU0FSX0NIQU5ORUxfVFgsIC8vPVswNl0gCisgICAgQ0NDSV9NRF9TQ1BfU0FSX0NIQU5ORUxfUlgsIC8vPVswN10gCisgICAgQ0NDSV9NRF9TQ1BfU1RBVElDU1RBVEVfQ0hBTk5FTF9UWCwgLy89WzA4XSAKKyAgICBDQ0NJX01EX1NDUF9TVEFUSUNTVEFURV9DSEFOTkVMX1JYLCAvLz1bMDldIAorICAgIENDQ0lfTURfU0NQX0NDX1NUQVRFX0NIQU5ORUxfVFgsIC8vPVsxMF0gCisgICAgQ0NDSV9NRF9TQ1BfQ0NfU1RBVEVfQ0hBTk5FTF9SWCwgLy89WzExXSAKKyAgICBDQ0NJX01EX1NDUF9DRUxMSU5GTzJfQ0hBTk5FTF9UWCwvLz1bMTJdIAorICAgIENDQ0lfTURfU0NQX0NFTExJTkZPMl9DSEFOTkVMX1JYLC8vPVsxM10gCisgICAgI2VuZGlmCisgICAgQ0NDSV9NRF9TQ1BfTUFYLAorICAgIENDQ0lfTURfU0NQX01BWF9DSEFOTkVMID0gQ0NDSV9NRF9TQ1BfTUFYLUNDQ0lfTURfU0NQX01JTiwKKyAgICAKKyAgICBDQ0NJX01EX0VBUF9NSU4gPSBDQ0NJX01EX0VBUF9CQVNFLAorICAgIENDQ0lfQ09OVFJPTF9DSEFOTkVMX0VBUCA9IENDQ0lfTURfRUFQX01JTiwgLy89WzAwXQorICAgIENDQ0lfQ09OVFJPTF9DSEFOTkVMX0VBUF9BQ0ssIC8vPVswMV0KKyAgICBDQ0NJX1NZU1RFTV9DSEFOTkVMX0VBUCwgLy89WzAyXQorICAgIENDQ0lfU1lTVEVNX0NIQU5ORUxfRUFQX0FDSywgLy89WzAzXQorICAgIENDQ0lfUkVTRVJWRTRfQ0hBTk5FTF9FQVAsIC8vPVswNF0KKyAgICBDQ0NJX1JFU0VSVkU1X0NIQU5ORUxfRUFQLCAvLz1bMDVdCisgICAgQ0NDSV9UU1RfQ0hBTk5FTF9FQVAsIC8vPVswNl0KKyAgICBDQ0NJX1JFU0VSVkU3X0NIQU5ORUxfRUFQLCAvLz1bMDddCisgICAgQ0NDSV9UUl9DSEFOTkVMX0VBUCwgLy89WzA4XQorICAgIENDQ0lfUkVTRVJWRTlfQ0hBTk5FTF9FQVAsIC8vPVswOV0KKyAgICBDQ0NJX0FUX0NIQU5ORUxfRUFQX1RYLCAvLz1bMTBdCisgICAgQ0NDSV9BVF9BQ0tfQ0hBTk5FTF9FQVBfVFgsIC8vPVsxMV0KKyAgICBDQ0NJX0FUX0NIQU5ORUxfRUFQX1JYLCAvLz1bMTJdCisgICAgQ0NDSV9BVF9BQ0tfQ0hBTk5FTF9FQVBfUlgsIC8vPVsxM10KKyAgICBDQ0NJX0ZTX0NIQU5ORUxfRUFQLCAvLz1bMTRdCisgICAgQ0NDSV9GU19BQ0tfQ0hBTk5FTF9FQVAsIC8vPVsxNV0KKyAgICBDQ0NJX1JFU0VSVkUxNl9DSEFOTkVMX0VBUCwgLy89WzE2XQorICAgIENDQ0lfUkVTRVJWRTE3X0NIQU5ORUxfRUFQLCAvLz1bMTddCisgICAgQ0NDSV9SRVNFUlZFMThfQ0hBTk5FTF9FQVAsIC8vPVsxOF0KKyAgICBDQ0NJX1JFU0VSVkUxOV9DSEFOTkVMX0VBUCwgLy89WzE5XQorICAgIENDQ0lfQ0NNTkkxX0VBUF9UWCwgLy89WzIwXQorICAgIENDQ0lfQ0NNTkkxX0VBUF9UWF9BQ0ssIC8vPVsyMV0KKyAgICBDQ0NJX0NDTU5JMV9FQVBfUlgsIC8vPVsyMl0KKyAgICBDQ0NJX0NDTU5JMV9FQVBfUlhfQUNLLCAvLz1bMjNdCisgICAgQ0NDSV9DQ01OSTJfRUFQX1RYLCAvLz1bMjRdCisgICAgQ0NDSV9DQ01OSTJfRUFQX1RYX0FDSywgLy89WzI1XQorICAgIENDQ0lfQ0NNTkkyX0VBUF9SWCwgLy89WzI2XQorICAgIENDQ0lfQ0NNTkkyX0VBUF9SWF9BQ0ssIC8vPVsyN10KKyAgICBDQ0NJX0NDTU5JM19FQVBfVFgsIC8vPVsyOF0KKyAgICBDQ0NJX0NDTU5JM19FQVBfVFhfQUNLLCAvLz1bMjldCisgICAgQ0NDSV9DQ01OSTNfRUFQX1JYLCAvLz1bMzBdCisgICAgQ0NDSV9DQ01OSTNfRUFQX1JYX0FDSywgLy89WzMxXQorICAgIENDQ0lfUkVTRVJWRTMyX0NIQU5ORUxfRUFQLCAvLz1bMzJdCisgICAgQ0NDSV9SRVNFUlZFMzNfQ0hBTk5FTF9FQVAsIC8vPVszM10KKyAgICBDQ0NJX1JFU0VSVkUzNF9DSEFOTkVMX0VBUCwgLy89WzM0XQorICAgIENDQ0lfUkVTRVJWRTM1X0NIQU5ORUxfRUFQLCAvLz1bMzVdCisgICAgQ0NDSV9SRVNFUlZFMzZfQ0hBTk5FTF9FQVAsIC8vPVszNl0KKyAgICBDQ0NJX1JFU0VSVkUzN19DSEFOTkVMX0VBUCwgLy89WzM3XQorICAgIENDQ0lfUkVTRVJWRTM4X0NIQU5ORUxfRUFQLCAvLz1bMzhdCisgICAgQ0NDSV9SRVNFUlZFMzlfQ0hBTk5FTF9FQVAsIC8vPVszOV0KKyAgICBDQ0NJX1JFU0VSVkU0MF9DSEFOTkVMX0VBUCwgLy89WzQwXQorICAgIENDQ0lfUkVTRVJWRTQxX0NIQU5ORUxfRUFQLCAvLz1bNDFdCisgICAgCisgICAgQ0NDSV9NRF9MT0dfRUFQX1JYLCAvLz1bNDJdCisgICAgQ0NDSV9NRF9MT0dfRUFQX1RYLCAvLz1bNDNdCisgICAgQ0NDSV9SRVNFUlZFNDRfQ0hBTk5FTF9FQVAsIC8vPVs0NF0KKyAgICBDQ0NJX1JFU0VSVkU0NV9DSEFOTkVMX0VBUCwgLy89WzQ1XQorICAgIENDQ0lfUkVTRVJWRTQ2X0NIQU5ORUxfRUFQLCAvLz1bNDZdCisgICAgQ0NDSV9SRVNFUlZFNDdfQ0hBTk5FTF9FQVAsIC8vPVs0N10KKyAgICBDQ0NJX1JFU0VSVkU0OF9DSEFOTkVMX0VBUCwgLy89WzQ4XQorICAgIENDQ0lfUkVTRVJWRTQ5X0NIQU5ORUxfRUFQLCAvLz1bNDldCisgICAgQ0NDSV9JVF9DSEFOTkVMX0VBUF9UWCwgLy89WzUwXQorICAgIENDQ0lfSVRfQ0hBTk5FTF9FQVBfUlgsIC8vPVs1MV0KKyAgICBDQ0NJX1JFU0VSVkU1Ml9DSEFOTkVMX0VBUCwgLy89WzUyXQorICAgIENDQ0lfUkVTRVJWRTUzX0NIQU5ORUxfRUFQLCAvLz1bNTNdCisgICAgQ0NDSV9SRVNFUlZFNTRfQ0hBTk5FTF9FQVAsIC8vPVs1NF0KKyAgICBDQ0NJX1JFU0VSVkU1NV9DSEFOTkVMX0VBUCwgLy89WzU1XQorICAgIENDQ0lfUkVTRVJWRTU2X0NIQU5ORUxfRUFQLCAvLz1bNTZdCisgICAgQ0NDSV9SRVNFUlZFNTdfQ0hBTk5FTF9FQVAsIC8vPVs1N10KKyAgICBDQ0NJX1JFU0VSVkU1OF9DSEFOTkVMX0VBUCwgLy89WzU4XQorICAgIENDQ0lfUkVTRVJWRTU5X0NIQU5ORUxfRUFQLCAvLz1bNTldCisgICAgQ0NDSV9SRVNFUlZFNjBfQ0hBTk5FTF9FQVAsIC8vPVs2MF0KKyAgICBDQ0NJX1JFU0VSVkU2MV9DSEFOTkVMX0VBUCwgLy89WzYxXQorICAgIENDQ0lfTEJfSVRfQ0hBTk5FTF9FQVBfVFgsIC8vPVs2Ml0KKyAgICBDQ0NJX0xCX0lUX0NIQU5ORUxfRUFQX1JYLCAvLz1bNjNdCisgICAgQ0NDSV9DQ01OSTFfRExBQ0tfRUFQX1RYLCAvLz1bNjRdIC8vX19DQ01OSV9BQ0tfRkFTVF9QQVRIX18KKyAgICBDQ0NJX0NDTU5JMl9ETEFDS19FQVBfVFgsIC8vPVs2NV0gLy9fX0NDTU5JX0FDS19GQVNUX1BBVEhfXworICAgIENDQ0lfQ0NNTkkzX0RMQUNLX0VBUF9UWCwgLy89WzY2XSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fICAgCisgICAgQ0NDSV9SRVNFUlZFNjdfQ0hBTk5FTF9FQVAsIC8vPVs2N10KKyAgICBDQ0NJX1JFU0VSVkU2OF9DSEFOTkVMX0VBUCwgLy89WzY4XQorICAgIENDQ0lfQ0NNTkk0X0VBUF9UWCwgLy89WzY5XQorICAgIENDQ0lfQ0NNTkk0X0VBUF9UWF9BQ0ssIC8vPVs3MF0KKyAgICBDQ0NJX0NDTU5JNF9FQVBfUlgsIC8vPVs3MV0KKyAgICBDQ0NJX0NDTU5JNF9FQVBfUlhfQUNLLCAvLz1bNzJdCisgICAgQ0NDSV9DQ01OSTRfRUFQX0RMQUNLX1RYLCAvLz1bNzNdIC8vX19DQ01OSV9BQ0tfRkFTVF9QQVRIX18gIAorICAgIENDQ0lfQ0NNTkk1X0VBUF9UWCwgLy89Wzc0XQorICAgIENDQ0lfQ0NNTkk1X0VBUF9UWF9BQ0ssIC8vPVs3NV0KKyAgICBDQ0NJX0NDTU5JNV9FQVBfUlgsIC8vPVs3Nl0KKyAgICBDQ0NJX0NDTU5JNV9FQVBfUlhfQUNLLCAvLz1bNzddCisgICAgQ0NDSV9DQ01OSTVfRUFQX0RMQUNLX1RYLCAvLz1bNzhdIC8vX19DQ01OSV9BQ0tfRkFTVF9QQVRIX18gIAorICAgIENDQ0lfQ0NNTkk2X0VBUF9UWCwgLy89Wzc5XQorICAgIENDQ0lfQ0NNTkk2X0VBUF9UWF9BQ0ssIC8vPVs4MF0KKyAgICBDQ0NJX0NDTU5JNl9FQVBfUlgsIC8vPVs4MV0KKyAgICBDQ0NJX0NDTU5JNl9FQVBfUlhfQUNLLCAvLz1bODJdCisgICAgQ0NDSV9DQ01OSTZfRUFQX0RMQUNLX1RYLCAvLz1bODNdIC8vX19DQ01OSV9BQ0tfRkFTVF9QQVRIX18gIAorICAgIENDQ0lfQ0NNTkk3X0VBUF9UWCwgLy89Wzg0XQorICAgIENDQ0lfQ0NNTkk3X0VBUF9UWF9BQ0ssIC8vPVs4NV0KKyAgICBDQ0NJX0NDTU5JN19FQVBfUlgsIC8vPVs4Nl0KKyAgICBDQ0NJX0NDTU5JN19FQVBfUlhfQUNLLCAvLz1bODddCisgICAgQ0NDSV9DQ01OSTdfRUFQX0RMQUNLX1RYLCAvLz1bODhdIC8vX19DQ01OSV9BQ0tfRkFTVF9QQVRIX18gIAorICAgIENDQ0lfQ0NNTkk4X0VBUF9UWCwgLy89Wzg5XQorICAgIENDQ0lfQ0NNTkk4X0VBUF9UWF9BQ0ssIC8vPVs5MF0KKyAgICBDQ0NJX0NDTU5JOF9FQVBfUlgsIC8vPVs5MV0KKyAgICBDQ0NJX0NDTU5JOF9FQVBfUlhfQUNLLCAvLz1bOTJdCisgICAgQ0NDSV9DQ01OSThfRUFQX0RMQUNLX1RYLCAvLz1bOTNdIC8vX19DQ01OSV9BQ0tfRkFTVF9QQVRIX18gICAgCisgICAgQ0NDSV9SRVNFUlZFOTRfQ0hBTk5FTF9FQVAsIC8vPVs5NF0KKyAgICBDQ0NJX1JFU0VSVkU5NV9DSEFOTkVMX0VBUCwgLy89Wzk1XQorICAgIENDQ0lfQ0NNTkk5X0VBUF9UWCwgLy89Wzk2XQorICAgIENDQ0lfQ0NNTkk5X0VBUF9UWF9BQ0ssIC8vPVs5N10KKyAgICBDQ0NJX0NDTU5JOV9FQVBfUlgsIC8vPVs5OF0KKyAgICBDQ0NJX0NDTU5JOV9FQVBfUlhfQUNLLCAvLz1bOTldCisgICAgQ0NDSV9DQ01OSTlfRUFQX0RMQUNLX1RYLCAvLz1bMTAwXSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fCisgICAgQ0NDSV9SRVNFUlZFMTAxX0NIQU5ORUxfRUFQLCAvLz1bMTAxXQorICAgIENDQ0lfUkVTRVJWRTEwMl9DSEFOTkVMX0VBUCwgLy89WzEwMl0gICAgIAorICAgIENDQ0lfQ0NNTkkxMF9FQVBfVFgsIC8vPVsxMDNdCisgICAgQ0NDSV9DQ01OSTEwX0VBUF9UWF9BQ0ssIC8vPVsxMDRdCisgICAgQ0NDSV9DQ01OSTEwX0VBUF9SWCwgLy89WzEwNV0KKyAgICBDQ0NJX0NDTU5JMTBfRUFQX1JYX0FDSywgLy89WzEwNl0KKyAgICBDQ0NJX0NDTU5JMTBfRUFQX0RMQUNLX1RYLCAvLz1bMTA3XSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkxMV9FQVBfVFgsIC8vPVsxMDhdCisgICAgQ0NDSV9DQ01OSTExX0VBUF9UWF9BQ0ssIC8vPVsxMDldCisgICAgQ0NDSV9DQ01OSTExX0VBUF9SWCwgLy89WzExMF0KKyAgICBDQ0NJX0NDTU5JMTFfRUFQX1JYX0FDSywgLy89WzExMV0KKyAgICBDQ0NJX0NDTU5JMTFfRUFQX0RMQUNLX1RYLCAvLz1bMTEyXSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkxMl9FQVBfVFgsIC8vPVsxMTNdCisgICAgQ0NDSV9DQ01OSTEyX0VBUF9UWF9BQ0ssIC8vPVsxMTRdCisgICAgQ0NDSV9DQ01OSTEyX0VBUF9SWCwgLy89WzExNV0KKyAgICBDQ0NJX0NDTU5JMTJfRUFQX1JYX0FDSywgLy89WzExNl0KKyAgICBDQ0NJX0NDTU5JMTJfRUFQX0RMQUNLX1RYLCAvLz1bMTE3XSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkxM19FQVBfVFgsIC8vPVsxMThdCisgICAgQ0NDSV9DQ01OSTEzX0VBUF9UWF9BQ0ssIC8vPVsxMTldCisgICAgQ0NDSV9DQ01OSTEzX0VBUF9SWCwgLy89WzEyMF0KKyAgICBDQ0NJX0NDTU5JMTNfRUFQX1JYX0FDSywgLy89WzEyMV0KKyAgICBDQ0NJX0NDTU5JMTNfRUFQX0RMQUNLX1RYLCAvLz1bMTIyXSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkxNF9FQVBfVFgsIC8vPVsxMjNdCisgICAgQ0NDSV9DQ01OSTE0X0VBUF9UWF9BQ0ssIC8vPVsxMjRdCisgICAgQ0NDSV9DQ01OSTE0X0VBUF9SWCwgLy89WzEyNV0KKyAgICBDQ0NJX0NDTU5JMTRfRUFQX1JYX0FDSywgLy89WzEyNl0KKyAgICBDQ0NJX0NDTU5JMTRfRUFQX0RMQUNLX1RYLCAvLz1bMTI3XSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkxNV9FQVBfVFgsIC8vPVsxMjhdCisgICAgQ0NDSV9DQ01OSTE1X0VBUF9UWF9BQ0ssIC8vPVsxMjldCisgICAgQ0NDSV9DQ01OSTE1X0VBUF9SWCwgLy89WzEzMF0KKyAgICBDQ0NJX0NDTU5JMTVfRUFQX1JYX0FDSywgLy89WzEzMV0KKyAgICBDQ0NJX0NDTU5JMTVfRUFQX0RMQUNLX1RYLCAvLz1bMTMyXSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkxNl9FQVBfVFgsIC8vPVsxMzNdCisgICAgQ0NDSV9DQ01OSTE2X0VBUF9UWF9BQ0ssIC8vPVsxMzRdCisgICAgQ0NDSV9DQ01OSTE2X0VBUF9SWCwgLy89WzEzNV0KKyAgICBDQ0NJX0NDTU5JMTZfRUFQX1JYX0FDSywgLy89WzEzNl0KKyAgICBDQ0NJX0NDTU5JMTZfRUFQX0RMQUNLX1RYLCAvLz1bMTM3XSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkxN19FQVBfVFgsIC8vPVsxMzhdCisgICAgQ0NDSV9DQ01OSTE3X0VBUF9UWF9BQ0ssIC8vPVsxMzldCisgICAgQ0NDSV9DQ01OSTE3X0VBUF9SWCwgLy89WzE0MF0KKyAgICBDQ0NJX0NDTU5JMTdfRUFQX1JYX0FDSywgLy89WzE0MV0KKyAgICBDQ0NJX0NDTU5JMTdfRUFQX0RMQUNLX1RYLCAvLz1bMTQyXSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkxOF9FQVBfVFgsIC8vPVsxNDNdCisgICAgQ0NDSV9DQ01OSTE4X0VBUF9UWF9BQ0ssIC8vPVsxNDRdCisgICAgQ0NDSV9DQ01OSTE4X0VBUF9SWCwgLy89WzE0NV0KKyAgICBDQ0NJX0NDTU5JMThfRUFQX1JYX0FDSywgLy89WzE0Nl0KKyAgICBDQ0NJX0NDTU5JMThfRUFQX0RMQUNLX1RYLCAvLz1bMTQ3XSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkxOV9FQVBfVFgsIC8vPVsxNDhdCisgICAgQ0NDSV9DQ01OSTE5X0VBUF9UWF9BQ0ssIC8vPVsxNDldCisgICAgQ0NDSV9DQ01OSTE5X0VBUF9SWCwgLy89WzE1MF0KKyAgICBDQ0NJX0NDTU5JMTlfRUFQX1JYX0FDSywgLy89WzE1MV0KKyAgICBDQ0NJX0NDTU5JMTlfRUFQX0RMQUNLX1RYLCAvLz1bMTUyXSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkyMF9FQVBfVFgsIC8vPVsxNTNdCisgICAgQ0NDSV9DQ01OSTIwX0VBUF9UWF9BQ0ssIC8vPVsxNTRdCisgICAgQ0NDSV9DQ01OSTIwX0VBUF9SWCwgLy89WzE1NV0KKyAgICBDQ0NJX0NDTU5JMjBfRUFQX1JYX0FDSywgLy89WzE1Nl0KKyAgICBDQ0NJX0NDTU5JMjBfRUFQX0RMQUNLX1RYLCAvLz1bMTU3XSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfQ0NNTkkyMV9FQVBfVFgsIC8vPVsxNThdCisgICAgQ0NDSV9DQ01OSTIxX0VBUF9UWF9BQ0ssIC8vPVsxNTldCisgICAgQ0NDSV9DQ01OSTIxX0VBUF9SWCwgLy89WzE2MF0KKyAgICBDQ0NJX0NDTU5JMjFfRUFQX1JYX0FDSywgLy89WzE2MV0KKyAgICBDQ0NJX0NDTU5JMjFfRUFQX0RMQUNLX1RYLCAvLz1bMTYyXSAvL19fQ0NNTklfQUNLX0ZBU1RfUEFUSF9fIAorICAgIENDQ0lfUkVTRVJWRTE2M19DSEFOTkVMX0VBUCwgLy89WzE2M10gIAorICAgIENDQ0lfUkVTRVJWRTE2NF9DSEFOTkVMX0VBUCwgLy89WzE2NF0gIAorICAgIENDQ0lfUkVTRVJWRTE2NV9DSEFOTkVMX0VBUCwgLy89WzE2NV0gIAorICAgIENDQ0lfUkVTRVJWRTE2Nl9DSEFOTkVMX0VBUCwgLy89WzE2Nl0gIAorICAgIENDQ0lfUkVTRVJWRTE2N19DSEFOTkVMX0VBUCwgLy89WzE2N10gIAorICAgIENDQ0lfUkVTRVJWRTE2OF9DSEFOTkVMX0VBUCwgLy89WzE2OF0gIAorICAgIENDQ0lfUkVTRVJWRTE2OV9DSEFOTkVMX0VBUCwgLy89WzE2OV0KKyAgICBDQ0NJX1JFU0VSVkUxNzBfQ0hBTk5FTF9FQVAsIC8vPVsxNzBdCisgICAgQ0NDSV9SRVNFUlZFMTcxX0NIQU5ORUxfRUFQLCAvLz1bMTcxXQorICAgIENDQ0lfUkVTRVJWRTE3Ml9DSEFOTkVMX0VBUCwgLy89WzE3Ml0KKyAgICBDQ0NJX1JFU0VSVkUxNzNfQ0hBTk5FTF9FQVAsIC8vPVsxNzNdCisgICAgQ0NDSV9SRVNFUlZFMTc0X0NIQU5ORUxfRUFQLCAvLz1bMTc0XQorICAgIENDQ0lfUkVTRVJWRTE3NV9DSEFOTkVMX0VBUCwgLy89WzE3NV0KKyAgICBDQ0NJX1JFU0VSVkUxNzZfQ0hBTk5FTF9FQVAsIC8vPVsxNzZdCisgICAgQ0NDSV9SRVNFUlZFMTc3X0NIQU5ORUxfRUFQLCAvLz1bMTc3XQorICAgIENDQ0lfUkVTRVJWRTE3OF9DSEFOTkVMX0VBUCwgLy89WzE3OF0KKyAgICBDQ0NJX1JFU0VSVkUxNzlfQ0hBTk5FTF9FQVAsIC8vPVsxNzldIAorICAgIENDQ0lfUkVTRVJWRTE4MF9DSEFOTkVMX0VBUCwgLy89WzE4MF0gCisgICAgQ0NDSV9SRVNFUlZFMTgxX0NIQU5ORUxfRUFQLCAvLz1bMTgxXSAKKyAgICBDQ0NJX1JFU0VSVkUxODJfQ0hBTk5FTF9FQVAsIC8vPVsxODJdIAorICAgIENDQ0lfUkVTRVJWRTE4M19DSEFOTkVMX0VBUCwgLy89WzE4M10gCisgICAgQ0NDSV9SRVNFUlZFMTg0X0NIQU5ORUxfRUFQLCAvLz1bMTg0XSAKKyAgICBDQ0NJX1JFU0VSVkUxODVfQ0hBTk5FTF9FQVAsIC8vPVsxODVdIAorICAgIENDQ0lfUkVTRVJWRTE4Nl9DSEFOTkVMX0VBUCwgLy89WzE4Nl0gCisgICAgQ0NDSV9SRVNFUlZFMTg3X0NIQU5ORUxfRUFQLCAvLz1bMTg3XSAKKyAgICBDQ0NJX1JFU0VSVkUxODhfQ0hBTk5FTF9FQVAsIC8vPVsxODhdIAorICAgIENDQ0lfUkVTRVJWRTE4OV9DSEFOTkVMX0VBUCwgLy89WzE4OV0gCisgICAgQ0NDSV9SRVNFUlZFMTkwX0NIQU5ORUxfRUFQLCAvLz1bMTkwXSAKKyAgICBDQ0NJX1JFU0VSVkUxOTFfQ0hBTk5FTF9FQVAsIC8vPVsxOTFdIAorICAgIENDQ0lfUkVTRVJWRTE5Ml9DSEFOTkVMX0VBUCwgLy89WzE5Ml0gCisgICAgQ0NDSV9SRVNFUlZFMTkzX0NIQU5ORUxfRUFQLCAvLz1bMTkzXSAKKyAgICBDQ0NJX1JFU0VSVkUxOTRfQ0hBTk5FTF9FQVAsIC8vPVsxOTRdIAorICAgIENDQ0lfUkVTRVJWRTE5NV9DSEFOTkVMX0VBUCwgLy89WzE5NV0gCisgICAgQ0NDSV9SRVNFUlZFMTk2X0NIQU5ORUxfRUFQLCAvLz1bMTk2XSAKKyAgICBDQ0NJX1JFU0VSVkUxOTdfQ0hBTk5FTF9FQVAsIC8vPVsxOTddIAorICAgIENDQ0lfUkVTRVJWRTE5OF9DSEFOTkVMX0VBUCwgLy89WzE5OF0gCisgICAgQ0NDSV9SRVNFUlZFMTk5X0NIQU5ORUxfRUFQLCAvLz1bMTk5XSAKKyAgICBDQ0NJX1JFU0VSVkUyMDBfQ0hBTk5FTF9FQVAsIC8vPVsyMDBdIAorICAgIENDQ0lfUkVTRVJWRTIwMV9DSEFOTkVMX0VBUCwgLy89WzIwMV0gCisgICAgQ0NDSV9SRVNFUlZFMjAyX0NIQU5ORUxfRUFQLCAvLz1bMjAyXSAKKyAgICBDQ0NJX1JFU0VSVkUyMDNfQ0hBTk5FTF9FQVAsIC8vPVsyMDNdIAorICAgIENDQ0lfUkVTRVJWRTIwNF9DSEFOTkVMX0VBUCwgLy89WzIwNF0gCisgICAgQ0NDSV9SRVNFUlZFMjA1X0NIQU5ORUxfRUFQLCAvLz1bMjA1XSAKKyAgICBDQ0NJX01JUENfRUFQMF9DSEFOTkVMX1RYLCAvLz1bMjA2XSAKKyAgICBDQ0NJX01JUENfRUFQMF9DSEFOTkVMX1JYLCAvLz1bMjA3XSAKKyAgICBDQ0NJX01CSU1fRUFQMF9DSEFOTkVMX1RYLCAvLz1bMjA4XSAKKyAgICBDQ0NJX01CSU1fRUFQMF9DSEFOTkVMX1JYLCAvLz1bMjA5XSAKKwlDQ0NJX01CSU1fRFNTMF9FQVBfQ0hBTk5FTF9UWCwgLy89WzIxMF0gCisJQ0NDSV9NQklNX0RTUzBfRUFQX0NIQU5ORUxfUlgsIC8vPVsyMTFdIAorCUNDQ0lfTUJJTV9EU1MxX0VBUF9DSEFOTkVMX1RYLCAvLz1bMjEyXSAKKwlDQ0NJX01CSU1fRFNTMV9FQVBfQ0hBTk5FTF9SWCwgLy89WzIxM10gCisJQ0NDSV9NQklNX0RTUzJfRUFQX0NIQU5ORUxfVFgsIC8vPVsyMTRdIAorCUNDQ0lfTUJJTV9EU1MyX0VBUF9DSEFOTkVMX1JYLCAvLz1bMjE1XSAKKwlDQ0NJX01CSU1fRFNTM19FQVBfQ0hBTk5FTF9UWCwgLy89WzIxNl0gCisJQ0NDSV9NQklNX0RTUzNfRUFQX0NIQU5ORUxfUlgsIC8vPVsyMTddIAorCUNDQ0lfTUJJTV9EU1M0X0VBUF9DSEFOTkVMX1RYLCAvLz1bMjE4XSAKKwlDQ0NJX01CSU1fRFNTNF9FQVBfQ0hBTk5FTF9SWCwgLy89WzIxOV0gCisJQ0NDSV9NQklNX0RTUzVfRUFQX0NIQU5ORUxfVFgsIC8vPVsyMjBdIAorCUNDQ0lfTUJJTV9EU1M1X0VBUF9DSEFOTkVMX1JYLCAvLz1bMjIxXSAKKwlDQ0NJX01CSU1fRFNTNl9FQVBfQ0hBTk5FTF9UWCwgLy89WzIyMl0gCisJQ0NDSV9NQklNX0RTUzZfRUFQX0NIQU5ORUxfUlgsIC8vPVsyMjNdIAorCUNDQ0lfTUJJTV9EU1M3X0VBUF9DSEFOTkVMX1RYLCAvLz1bMjI0XSAKKwlDQ0NJX01CSU1fRFNTN19FQVBfQ0hBTk5FTF9SWCwgLy89WzIyNV0gCisgICAgQ0NDSV9NRF9FQVBfTUFYLAorICAgIENDQ0lfTURfRUFQX01BWF9DSEFOTkVMID0gQ0NDSV9NRF9FQVBfTUFYLUNDQ0lfTURfRUFQX01JTiwKKworICAgIENDQ0lfRk9SQ0VfUkVTRVRfTU9ERU1fQ0hBTk5FTCAgPSAyMDA5MDIxNSwgLy8weDAxMzI4RDY3CmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfY29uZmlnX2ZlYXR1cmVfaWQuaCBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9jb25maWdfZmVhdHVyZV9pZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTdhYTkKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfY29uZmlnX2ZlYXR1cmVfaWQuaApAQCAtMCwwICsxLDI1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGNjY2lfY29uZmlnX2ZlYXR1cmVfaWQuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBVTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIERlZmluZXMgQ0NDSSBmZWF0dXJlIElEIGxpc3QKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDggMDQgMjAyMSBsaS1jaGVuZy50c2FpCisgKiBbTU9MWTAwNjY1MDI5XSBbR2VuOTddQU1NUyBEUkRJIG5ldyBhcmNoaXRlY3R1cmUgcG9ydGluZworICogCQorICogCVtOUjE1LlIzLk1ENzAwLk1QXSBmZWF0dXJlIGlkIGFuZCBycGMgb3AgaWQgY29kZSBzeW5jIGZyb20gTlIxNS5SMy5NUAorICoKKyAqIDExIDExIDIwMjAgYWRlbC5saWFvCisgKiBbTU9MWTAwNTg3NjkwXSBbTVQ2ODgwXVtDb2xnaW5dRml4IHRoZSBtZXRob2QgdG8gZ2V0IHRoZSBtaW5pIGR1bXAgZmxhZyBhbmQgbWlkciBkdW1wIGZsYWcKKyAqCisgKiAwOSAxOCAyMDIwIGxpLWNoZW5nLnRzYWkKKyAqIFtNT0xZMDA1Njk2NDddIFtNUDcuUFJFQ0hFQ0tJTi5ERVZdW0NvZGUgc3luY10gc3luYyBjb2RlIGZyb20gVDcwMAorICogW1IzLk1QXVtPQV1bQ0NDSV1jb2RlIHN5bmMgZnJvbSBUNzAwCisgKgorICogMDkgMTUgMjAyMCBsaS1jaGVuZy50c2FpCisgKiBbTU9MWTAwNTY5NjQ3XSBbTVA3LlBSRUNIRUNLSU4uREVWXVtDb2RlIHN5bmNdIHN5bmMgY29kZSBmcm9tIFQ3MDAKKyAqIFtNUDcuUFJFQ0hFQ0tJTi5ERVZdW09BXVtDQ0NJXWNvZGUgc3luYyBmcm9tIFQ3MDAKKyAqCisgKiAwOCAwNCAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDU1NDUzNF0gW0NvbGdpbl1bQ29kZSBzeW5jXSBzeW5jIGNvZGUgZnJvbSBNVDY4ODAuTVAKKyAqIFtUNzAwXVtPQV1bQ0NDSV0gc3luYyBmcm9tIE1UNjg4MAorICoKKyAqIDA3IDA3IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTQzMTg2XSBbQ29sZ2luXSBjb2RlIHN5bmMgdG8gTlIxNS5SMy5NVDY4ODAuTVAKKyAqIFtSMy5NVDY4ODAuTVBdW09BXVtDQ0NJXSBzeW5jIGZyb20gQ09MR0lOLlNCLlNNVC5ERVYKKyAqCisgKiAwNiAwNSAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDUzMjExN10gW0NDQ0ldIHN1cHBvcnQgYXN5bmMgSFMgb24gZGF0YSBjYXJkCisgKiBbQ09MR0lOLlNCLkRFVl1bT0FdIGVuYWJsZSBhc3luYyBocworICoKKyAqIDA1IDE5IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTI1NTk5XSBjb2RlIHN5bmMgZm9yIENvbGdpbgorICogW05SMTUuUjMuQ09MR0lOLlNCLlNNVC5ERVZdW09BXVtDQ0NJXSBjb2RlIHN5bmMgZnJvbSAxOU5PVgorICoKKyAqIDA1IDA4IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTIxMzgwXSBbQ0NDSV0gYWRkIE1JRFIgZmVhdHVyZSBJRCBmb3IgREhMCisgKiBbRElQQy5ERVZdW09BXSBmaXggdHlwbworICoKKyAqIDA1IDA3IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTIxMzgwXSBbQ0NDSV0gYWRkIE1JRFIgZmVhdHVyZSBJRCBmb3IgREhMCisgKiBbMTlOT1ZdW09BXSBhZGQgTUlEUiBydW50aW1lIGRhdGEKKyAqCisgKiAwNCAyMyAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDUxNjc5NF0gW0NDQ0ldIGZpeCBDUEUgYnVpbGQKKyAqIFsxOU5PVl1bT0FdIGZpeCBDUEUgYnVpbGQKKyAqCisgKiAwMyAyMyAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDUwMjg1OF0gW0dlbjk3XVtHZW45OF0gbWVyZ2UgY2NjaSBjaGFubmVsIGlkL3J1bnRpbWUgZGF0YSBpZAorICogWzE5Tk9WXVtPQV1bTkNDQ0kvTkNDQ0lERVZdIG1lcmdlIGNoYW5uZWwgaWQgdGFibGUKKyAqCisgKiAwOCAwMSAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDQyNTM2NF0gYWRkIE5WUkFNIHN0YXRpYyBjYWNoZSBmZWF0dXJlCisgKiBbVk1PTFldW09BXSBhZGQgbnZyYW0gY2FjaGUgc2htIGZlYXR1cmUgaWQKKyAqCisgKiAwNyAxOCAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDQyMjU3OV0gW01ERFBdIERQRk0gcG9ydGluZyB0byBWTU9MWQorICogW1ZNT0xZXVtPQV0gc3VwcG9ydCBNRERQICYgcmVuYW1lIHRvIERQRk0KKyAqCisgKiAwNyAxNSAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDQyMjA2N10gW0dlbjk3XVtWTU9MWV1bQ0NDSV0gYWRkIHdpZmkgcHJveHkgZmVhdHVyZSBpZCBmb3Igc3VibWFyaW5lCisgKiBbVk1PTFldW09BXSBhZGQgc3VibWFyaW5lIHNldHRpbmcKKyAqCisgKiAwNiAyNiAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDQxNjcyNV0gW0dlbjk3XVtQQ0llXSBzdXBwb3J0IGNoYW5uZWwgZXhjZXB0aW9uIGZsb3cgb3ZlciBQQ0llCisgKiBbVk1PTFldW09BXSBzdXBwb3J0IGV4Y2VwdGlvbiBmbG93IGF0IFBDSWUgcGxhdGZvcm0KKyAqCisgKiAwNCAxOSAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDM5NTE3Nl0gW1RoaW4gTW9kZW0gMS4wXVtQQ0llIHBsYXRmb3JtXSBQQ0llIFBsYXRmb3JtIDFzdCBSZWxlYXNlIG9uIEFwb2xsbworICogW1BDSWVdW09BXVtDQ0NJXSBzdXBwb3J0IHBjaWUgdGhpbiBtb2RlbSAxLjAKKyAqCisgKiAwOSAyMCAyMDE4IGFjdG9yeS5vdQorICogW01PTFkwMDM0NzQzM10gW1ZNT0xZXVtYQ0FQXSBmaXggdGFyZ2V0IGJ1aWxkCisgKiBbVk1PTFldIGFkZCBTSUIgU0hNIGJhY2sgZm9yIHRoaW4gbW9kZW0KKyAqCisgKiAwOSAxMSAyMDE4IGFjdG9yeS5vdQorICogW01PTFkwMDM0NjU2Nl0gW0dlbjk3XVtMMVNfTDFESVNBQkxFX1NBUF0gYm9vdCB0byBpZGxlIHN5bmMKKyAqIGFkZCBjb25maWcgZm9yIHNBUCBkdW1wL2V4Y2VwdGlvbiByZWNvcmQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKF9fQ0NDSV9QUk9EVUNUX1RZUEVfVEhJTl9NT0RFTV9fKSAvL3RoaW4gbW9kZW0gY29uZmlndXJhdGlvbgorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpbiBNb2RlbSBDb25maWd1cmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vZmVhdHVyZSBpZCwgc3VwcG9ydCwgdmVyc2lvbgorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfSURfT05MWShBUF9DQ0NJX1JVTlRJTUVfRkVBVFVSRV9JRF9NSU4pCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9CT09UX0lORk8gPSBBUF9DQ0NJX1JVTlRJTUVfRkVBVFVSRV9JRF9NSU4sIENDQ0lfUlVOVElNRV9GRUFUVVJFX01VU1RfU1VQUE9SVCwgMCkgICAgIC8vMC0gYWRkIGZvciBCT09UIGluZm8KKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0VYQ0VQVElPTl9TSEFSRV9NRU1PUlksIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgLy8xLSBhZGQgZm9yIE1EIFNTIGV4Y2VwdGlvbgorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfQ0NJU01fQVBfU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAvLzItIGFkZCBmb3IgQ0NDSSBjb250cm9sIHBhdGggSElGIENDSVNNIHNoYXJlIG1lbW9yeSBBUDwtPk1ECisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9ESExfU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMy0KKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX01EMU1EM19TSEFSRV9NRU1PUlksIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgLy80LQorICAgIC8vIENDQ0kgbWlzYyBpbmZvCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9JRF9PTkxZKENDTVNHX0lEX01JU0NJTkZPX1NUQVJUKSAvLyBmb3IgbWlzYyBpbmZvIGJhY2sgY29tcGl0YWJsZQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihDQ01TR19JRF9NSVNDSU5GT19ISUZfRE1BX1JFTUFQID0gQ0NNU0dfSURfTUlTQ0lORk9fU1RBUlQsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAvLzUtIGFkZCBmb3IgRE1BIHRvIHF1ZXJ5IEhJRi1ETUEgcmVtYXAgYWRkcmVzcworICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihDQ01TR19JRF9NSVNDSU5GT19SVENfMzJLX0xFU1MsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzYtIGFkZCBmb3IgTDEgdG8gcXVlcnkgMzJLLWxlc3MgaW5mb3JtYXRpb24gaW4gQVAKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fUkFORE9NX1NFRURfTlVNLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgLy83LSBhZGQgZm9yIHNyYW0gcmVwYWlyIGZ1bmN0aW9uIHRvIGdldCByYW5kb20gc2VlZCBudW1iZXIgZnJvbSBBUCAoT3duZXI6IFNFNy9TRDMvQ2luZHkpCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKENDTVNHX0lEX01JU0NJTkZPX0dQU19DT0NMT0NLLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vOC0gYWRkIGZvciBMMUQgdG8gcXVlcnkgR1BTIGNvLWNsb2NrIGluZm9ybWF0aW9uIGZyb20gQVAKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fU0JQX0lELCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy85LSBhZGQgZm9yIFNCUCB0byBxdWVyeSBTQlAgcmVsYXRlZCBwcm9maWxlIChPd25lcjogU0UzL1BTOC9Ib25nKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihDQ01TR19JRF9NSVNDSU5GT19DQ0NJLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzEwLSBhZGQgZm9yIENDQ0kgcmVsYXRlZCBmZWF0dXJlIChPd25lcjogU0U3L1NEOC9DUykKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fQ0xJQl9USU1FLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xMS0gcmVkaXJlY3QgdG8gZUFQIGluIHRoaW4gbW9kZW0KKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fQzJLLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xMi0gYWRkIGZvciBDMksgb3B0aW9uICAoT3duZXI6IFNFMy9QUzUvUmFsZikKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX01EX0lNR19JTkZPLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xMy0gYWRkIGZvciBLQUwgdG8gZ2V0IE1EIGltYWdlIGluZm8gKE93bmVyOiBTUy9LQy5Uc2FpKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfQ0NJU01fU0NQX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAvLzE0LSBhZGQgZm9yIENDQ0kgSElGIENDSVNNIHNoYXJlIG1lbW9yeSBNRDwtPlNDUAorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX0NDQl9TSEFSRV9NRU1PUlksIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzE1LSBhZGQgZm9yIENDQ0kgQ0NCCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfREhMX1JBV19TSEFSRV9NRU1PUlksIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMTYtIGFkZCBmb3IgREhMIFJBVworICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfRFBGTV9ORVREX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAvLzE3LSBhZGQgZm9yIERUIE5FVEQKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0RQRk1fVVNCX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgLy8xOC0gYWRkIGZvciBEVCBVU0IKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0VFX0FGVEVSX0VQT0YsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xOS0gYWRkIGZvciBFUE9GIGZsb3cKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX05FVFdPUktfTVRVX1NJWkUsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yMC0gYWRkIGZvciBxdWVyeWluZyBuZXR3b3JrIE1UVSBzaXplCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKENDTVNHX0lEX01JU0NfSU5GT19DVVNUT01FUl9QQVJNLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMjEtIGFkZCBmb3IgY3VzdG9tZXIKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0NDQ0lfRkFTVF9IRUFERVIsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yMi0gYWRkIGZvciBxdWVyeWluZyBjY2NpIGZhc3QgaGVhZGVyIHN1cHBvcnQKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fU0xQSElTVExPRywgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yMy0gYWRkIGZvciBzbGVlcCBoaXN0b3J5IGxvZyAKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fQzJLX01FSUQsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yNC0gYWRkIGZvciBtaXNjIGluZm8gYWxpZ21lbnQsIGMyayB1c2UKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fTFdBU0hNLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yNS0gYWRkIGZvciBMV0Egc2hhcmUgbWVtb3J5CisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfQVVESU9fUkFXX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMjYtIGFkZCBmb3IgQXVkaW8gc2hhcmUgbWVtb3J5CisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfTVVMVElfTVBVX1NFVFRJTkcsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMjctIGFkZCBmb3IgbXVsdGlwbGUgTVBVIHNldHRpbmcgdG8gaW5mb3JtIEFQCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9DQ0lTTV9BUF9FWENFUFRfU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgIC8vMjgtIGFkZCBmb3IgQ0NDSSBjb250cm9sIHBhdGggSElGIENDSVNNIHNoYXJlIG1lbW9yeSBBUDwtPk1EIGZvciBleGNlcHRpb24gdXNhZ2UKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX01EX1BIWV9DQVBUVVJFX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgLy8yOS0gYWRkIGZvciA5MyBNb2RlbSBQSFkgQ2FwdHVyZSwgcmVxdWVzdCAyMDBNQiBzaGFyZSBtZW1vcnkKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX01EX0NPTlNZU19TSEFSRV9NRU1PUlksIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgLy8zMC0gYWRkIGZvciBNRDwtPldpRmkgZGlyZWN0IHBhdGggc2hhcmUgbWVtb3J5CisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9NRF9VU0lQX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgIC8vMzEtIGFkZCBmb3IgdVNJUCBzaGFyZSBtZW1vcnkgKE93bmVyOiBXU0QvT1NTOC9NRTkgVGhvbWFzIENoZW4pCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9NRF9NVEVFX1NIQVJFX01FTU9SWV9FTkFCTEUsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgIC8vMzItIGFkZCBmb3IgTUQ8LT5NVEVFIHNoYXJlIG1lbW9yeSBlbmFibGUgZmxhZyAoT3duZXI6IFdDUy9TRTMvUFM4IEFsbGVuIEhzdSkKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0FNTVNfUE9TX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgLy8zMy0gYWRkIGZvciBBTU1TIFBPUyBzaGFyZSBtZW1vcnkgKFdDU19TU0VfU1M1OiBUZWUtWXVlbiBDaHVuKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfTURfVURDX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgICAvLzM0LSBhZGQgZm9yIFVEQyBzaGFyZSBtZW1vcnkgKFVzZXI6IENhbW1pZSwgQ2hpLVllbikKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX01EX1dJRklfUFJPWFlfU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgLy8zNS0gYWRkIGZvciBXaUZpIFByb3h5IHNoYXJlIG1lbW9yeSAoVXNlcjogS29uYXJrIE1laHJhKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfTlZSQU1fQ0FDSEVfU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAvLzM2LSBhZGQgZm9yIE5WUkFNIGNhY2hlIHNoYXJlIG1lbW9yeSAoVXNlcjogVGFuZ3BpbmcgSmlhbmcpCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9TRUNVUklUWV9TSEFSRV9NRU1PUlksIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgIC8vMzctIGFkZCBmb3Igc2VjdXJlIHNoYXJlZCBtZW1vcnkgYWNjZXNzZWQgYnkgVEVFL01EIChVc2VyOiBBbmRyZXcgS29vKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfTUVNT1JZX1JFTUFQX0lORk8sIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAvLzM4LSBhZGQgZm9yIHF1ZXJ5IEFQL01EIG1lbW9yeSByZW1hcCBpbmZvIChVc2VyOiBDaGVuZy1EYW8gTGVlKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfU0FQX01FTURVTVBfU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAvLzM5IC0gc0FQIG1lbW9yeSBkdW1wIGF0IHRoaXMgc2hhcmUgbWVtb3J5LCBhbmQgTUQgU1MgaGVscHMgdG8gZHVtcCB0byBob3N0IHNpZGUKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX1NBUF9FWENFUFRJT05fUkVDT1JEX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgLy80MCAtIHNBUCByZWNvcmRzIGV4Y2VwdGlvbiBpbmZvIGhlcmUsIGFuZCBNRCBTUyBoZWxwcyB0byBkdW1wIHRvIGhvc3Qgc2lkZQorICAgICNpZiBkZWZpbmVkKF9fQ0NDSV9QUk9EVUNUX1RZUEVfUENJRV9USElOX01PREVNX18pCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9FQVBfUFJPRFVDVF9JTkZPLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9NVVNUX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vNDEtIHRlbGwgc0FQIE1EJ3MgcHJvZHVjdCB0eXBlCisgICAgI2Vsc2UKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0VBUF9QUk9EVUNUX0lORk8sIENDQ0lfUlVOVElNRV9GRUFUVVJFX05PVF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy80MS0gdGVsbCBzQVAgTUQncyBwcm9kdWN0IHR5cGUgICAgCisgICAgI2VuZGlmCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9EUE1GX1VTQl9QQVRIX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAvLzQyIC0gTUQgVVNCIGRhdGEgcGF0aCBtZW1vcnkgYWRkcmVzcyBxdWVyeSAsIGFsbG9jYXRlZCBmcm9tIEFQIENDQ0kgKFVzZXI6IE1pbmdjaHVhbmcgUWlhbykKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX01JRFJfU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vNDMgLSBESEwgTUlEUiBmZWF0dXJlIGZvciBwb3N0LXJlc2V0IGNvcmUgZHVtcCAoVXNlcjogWUggU3VuZykKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0RITF9NSVNDX0lORk8sIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy80NC0gYWRkIGFlZSBtaW5pIGR1bXAgZmxhZyBmZWF0dXJlIGlkIGZvciBESEwuIChVc2VyOiBZZW4tSHN1YW4gTGluKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfQU1NU19EUkRJX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAvLzQ1LSBhZGQgZm9yIEFNTVMgRFJESSBzaGFyZSBtZW1vcnkgKFVzZXI6IExpYW5nIFlhbikKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0lEX09OTFkoQVBfQ0NDSV9SVU5USU1FX0ZFQVRVUkVfSURfTUFYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9FQVAgcnVudGltZSBkYXRhIGlzIFRoaW4gbW9kZW0gTUlTQyBkYXRhIC0gZHVtbXkgaW4gU09DCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9JRF9PTkxZKEVBUF9DQ0NJX1JVTlRJTUVfRkVBVFVSRV9JRF9NSU4gPSBBUF9DQ0NJX1JVTlRJTUVfRkVBVFVSRV9JRF9NQVgpCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEVBUF9DQ0NJX1JVTlRJTUVfRUFQX1JFU0VSVkUwID0gRUFQX0NDQ0lfUlVOVElNRV9GRUFUVVJFX0lEX01JTiwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfTk9UX0VYSVNULCAwKSAgIC8vcmVzZXJ2ZSAoT3duZXI6IENDQ0kpCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9JRF9PTkxZKEVBUF9DQ0NJX1JVTlRJTUVfRkVBVFVSRV9JRF9NQVgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRUFQIHJ1bnRpbWUgZGF0YSBpcyBUaGluIG1vZGVtIE1JU0MgZGF0YSAtIGR1bW15IGluIFNPQworI2Vsc2UKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvQyBDb25maWd1cmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvL2ZlYXR1cmUgaWQsIHN1cHBvcnQsIHZlcnNpb24KKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0lEX09OTFkoQVBfQ0NDSV9SVU5USU1FX0ZFQVRVUkVfSURfTUlOKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfQk9PVF9JTkZPID0gQVBfQ0NDSV9SVU5USU1FX0ZFQVRVUkVfSURfTUlOLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9NVVNUX1NVUFBPUlQsIDApICAgICAvLzAtIGFkZCBmb3IgQk9PVCBpbmZvCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9FWENFUFRJT05fU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgIC8vMS0gYWRkIGZvciBNRCBTUyBleGNlcHRpb24KKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0NDSVNNX0FQX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgLy8yLSBhZGQgZm9yIENDQ0kgY29udHJvbCBwYXRoIEhJRiBDQ0lTTSBzaGFyZSBtZW1vcnkgQVA8LT5NRAorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfREhMX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzMtCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9NRDFNRDNfU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgIC8vNC0KKyAgICAvLyBDQ0NJIG1pc2MgaW5mbworICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfSURfT05MWShDQ01TR19JRF9NSVNDSU5GT19TVEFSVCkgLy8gZm9yIG1pc2MgaW5mbyBiYWNrIGNvbXBpdGFibGUKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fSElGX0RNQV9SRU1BUCA9IENDTVNHX0lEX01JU0NJTkZPX1NUQVJULCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgLy81LSBhZGQgZm9yIERNQSB0byBxdWVyeSBISUYtRE1BIHJlbWFwIGFkZHJlc3MKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fUlRDXzMyS19MRVNTLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy82LSBhZGQgZm9yIEwxIHRvIHF1ZXJ5IDMySy1sZXNzIGluZm9ybWF0aW9uIGluIEFQCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKENDTVNHX0lEX01JU0NJTkZPX1JBTkRPTV9TRUVEX05VTSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8vNy0gYWRkIGZvciBzcmFtIHJlcGFpciBmdW5jdGlvbiB0byBnZXQgcmFuZG9tIHNlZWQgbnVtYmVyIGZyb20gQVAgKE93bmVyOiBTRTcvU0QzL0NpbmR5KQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihDQ01TR19JRF9NSVNDSU5GT19HUFNfQ09DTE9DSywgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzgtIGFkZCBmb3IgTDFEIHRvIHF1ZXJ5IEdQUyBjby1jbG9jayBpbmZvcm1hdGlvbiBmcm9tIEFQCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKENDTVNHX0lEX01JU0NJTkZPX1NCUF9JRCwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vOS0gYWRkIGZvciBTQlAgdG8gcXVlcnkgU0JQIHJlbGF0ZWQgcHJvZmlsZSAoT3duZXI6IFNFMy9QUzgvSG9uZykKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fQ0NDSSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xMC0gYWRkIGZvciBDQ0NJIHJlbGF0ZWQgZmVhdHVyZSAoT3duZXI6IFNFNy9TRDgvQ1MpCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKENDTVNHX0lEX01JU0NJTkZPX0NMSUJfVElNRSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMTEtIGFkZCBmb3IgS0FMIHRvIGdldCBhbmRyaW9kIHRpbWUgKE93bmVyOiBTRTcvU1MvQ2FybCkKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fQzJLLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xMi0gYWRkIGZvciBDMksgb3B0aW9uICAoT3duZXI6IFNFMy9QUzUvUmFsZikKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX01EX0lNR19JTkZPLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xMy0gYWRkIGZvciBLQUwgdG8gZ2V0IE1EIGltYWdlIGluZm8gKE93bmVyOiBTUy9LQy5Uc2FpKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfQ0NJU01fU0NQX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAvLzE0LSBhZGQgZm9yIENDQ0kgSElGIENDSVNNIHNoYXJlIG1lbW9yeSBNRDwtPlNDUAorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX0NDQl9TSEFSRV9NRU1PUlksIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzE1LSBhZGQgZm9yIENDQ0kgQ0NCCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfREhMX1JBV19TSEFSRV9NRU1PUlksIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMTYtIGFkZCBmb3IgREhMIFJBVworICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfRFBGTV9ORVREX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAvLzE3LSBhZGQgZm9yIERUIE5FVEQKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0RQRk1fVVNCX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgLy8xOC0gYWRkIGZvciBEVCBVU0IKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0VFX0FGVEVSX0VQT0YsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xOS0gYWRkIGZvciBFUE9GIGZsb3cKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX05FVFdPUktfTVRVX1NJWkUsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yMC0gYWRkIGZvciBxdWVyeWluZyBuZXR3b3JrIE1UVSBzaXplCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKENDTVNHX0lEX01JU0NfSU5GT19DVVNUT01FUl9QQVJNLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMjEtIGFkZCBmb3IgY3VzdG9tZXIKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0NDQ0lfRkFTVF9IRUFERVIsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yMi0gYWRkIGZvciBxdWVyeWluZyBjY2NpIGZhc3QgaGVhZGVyIHN1cHBvcnQKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fU0xQSElTVExPRywgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yMy0gYWRkIGZvciBzbGVlcCBoaXN0b3J5IGxvZyAKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fQzJLX01FSUQsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yNC0gYWRkIGZvciBtaXNjIGluZm8gYWxpZ21lbnQsIGMyayB1c2UKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQ0NNU0dfSURfTUlTQ0lORk9fTFdBU0hNLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yNS0gYWRkIGZvciBMV0Egc2hhcmUgbWVtb3J5CisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfQVVESU9fUkFXX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMjYtIGFkZCBmb3IgQXVkaW8gc2hhcmUgbWVtb3J5CisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfTVVMVElfTVBVX1NFVFRJTkcsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMjctIGFkZCBmb3IgbXVsdGlwbGUgTVBVIHNldHRpbmcgdG8gaW5mb3JtIEFQCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9DQ0lTTV9BUF9FWENFUFRfU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgIC8vMjgtIGFkZCBmb3IgQ0NDSSBjb250cm9sIHBhdGggSElGIENDSVNNIHNoYXJlIG1lbW9yeSBBUDwtPk1EIGZvciBleGNlcHRpb24gdXNhZ2UKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX01EX1BIWV9DQVBUVVJFX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgLy8yOS0gYWRkIGZvciA5MyBNb2RlbSBQSFkgQ2FwdHVyZSwgcmVxdWVzdCAyMDBNQiBzaGFyZSBtZW1vcnkKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX01EX0NPTlNZU19TSEFSRV9NRU1PUlksIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgLy8zMC0gYWRkIGZvciBNRDwtPldpRmkgZGlyZWN0IHBhdGggc2hhcmUgbWVtb3J5CisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9NRF9VU0lQX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgIC8vMzEtIGFkZCBmb3IgdVNJUCBzaGFyZSBtZW1vcnkgKE93bmVyOiBXU0QvT1NTOC9NRTkgVGhvbWFzIENoZW4pCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9NRF9NVEVFX1NIQVJFX01FTU9SWV9FTkFCTEUsIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgIC8vMzItIGFkZCBmb3IgTUQ8LT5NVEVFIHNoYXJlIG1lbW9yeSBlbmFibGUgZmxhZyAoT3duZXI6IFdDUy9TRTMvUFM4IEFsbGVuIEhzdSkKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0FNTVNfUE9TX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgLy8zMy0gYWRkIGZvciBBTU1TIFBPUyBzaGFyZSBtZW1vcnkgKFdDU19TU0VfU1M1OiBUZWUtWXVlbiBDaHVuKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfTURfVURDX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAgICAvLzM0LSBhZGQgZm9yIFVEQyBzaGFyZSBtZW1vcnkgKFVzZXI6IENhbW1pZSwgQ2hpLVllbikKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX01EX1dJRklfUFJPWFlfU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgLy8zNS0gYWRkIGZvciBXaUZpIFByb3h5IHNoYXJlIG1lbW9yeSAoVXNlcjogS29uYXJrIE1laHJhKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfTlZSQU1fQ0FDSEVfU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAvLzM2LSBhZGQgZm9yIE5WUkFNIGNhY2hlIHNoYXJlIG1lbW9yeSAoVXNlcjogVGFuZ3BpbmcgSmlhbmcpCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9TRUNVUklUWV9TSEFSRV9NRU1PUlksIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgIC8vMzctIGFkZCBmb3Igc2VjdXJlIHNoYXJlZCBtZW1vcnkgYWNjZXNzZWQgYnkgVEVFL01EIChVc2VyOiBBbmRyZXcgS29vKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfTUVNT1JZX1JFTUFQX0lORk8sIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAvLzM4LSBhZGQgZm9yIHF1ZXJ5IEFQL01EIG1lbW9yeSByZW1hcCBpbmZvIChVc2VyOiBDaGVuZy1EYW8gTGVlKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfU0FQX01FTURVTVBfU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAvLzM5IC0gc0FQIG1lbW9yeSBkdW1wIGF0IHRoaXMgc2hhcmUgbWVtb3J5LCBhbmQgTUQgU1MgaGVscHMgdG8gZHVtcCB0byBob3N0IHNpZGUKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX1NBUF9FWENFUFRJT05fUkVDT1JEX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgLy80MCAtIHNBUCByZWNvcmRzIGV4Y2VwdGlvbiBpbmZvIGhlcmUsIGFuZCBNRCBTUyBoZWxwcyB0byBkdW1wIHRvIGhvc3Qgc2lkZQorICAgICNpZiBkZWZpbmVkKF9fQ0NDSV9QUk9EVUNUX1RZUEVfUENJRV9USElOX01PREVNX18pCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9FQVBfUFJPRFVDVF9JTkZPLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9NVVNUX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vNDEtIHRlbGwgc0FQIE1EJ3MgcHJvZHVjdCB0eXBlCisgICAgI2Vsc2UKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0VBUF9QUk9EVUNUX0lORk8sIENDQ0lfUlVOVElNRV9GRUFUVVJFX05PVF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy80MS0gdGVsbCBzQVAgTUQncyBwcm9kdWN0IHR5cGUgICAgCisgICAgI2VuZGlmCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GKEFQX0NDQ0lfUlVOVElNRV9EUE1GX1VTQl9QQVRIX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAvLzQyIC0gTUQgVVNCIGRhdGEgcGF0aCBtZW1vcnkgYWRkcmVzcyBxdWVyeSAsIGFsbG9jYXRlZCBmcm9tIEFQIENDQ0kgKFVzZXI6IE1pbmdjaHVhbmcgUWlhbykKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX01JRFJfU0hBUkVfTUVNT1JZLCBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JULCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vNDMgLSBESEwgTUlEUiBmZWF0dXJlIGZvciBwb3N0LXJlc2V0IGNvcmUgZHVtcCAoVXNlcjogWUggU3VuZykKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0NPTkYoQVBfQ0NDSV9SVU5USU1FX0RITF9NSVNDX0lORk8sIENDQ0lfUlVOVElNRV9GRUFUVVJFX09QVElPTkFMX1NVUFBPUlQsIDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy80NC0gYWRkIGFlZSBtaW5pIGR1bXAgZmxhZyBmZWF0dXJlIGlkIGZvciBESEwuIChVc2VyOiBZZW4tSHN1YW4gTGluKQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihBUF9DQ0NJX1JVTlRJTUVfQU1NU19EUkRJX1NIQVJFX01FTU9SWSwgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfT1BUSU9OQUxfU1VQUE9SVCwgMCkgICAgICAgICAgICAgICAgICAgICAvLzQ1LSBhZGQgZm9yIEFNTVMgRFJESSBzaGFyZSBtZW1vcnkgKFVzZXI6IExpYW5nIFlhbikKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0lEX09OTFkoQVBfQ0NDSV9SVU5USU1FX0ZFQVRVUkVfSURfTUFYKQorI2VuZGlmIC8vI2lmIGRlZmluZWQoX19DQ0NJX1BST0RVQ1RfVFlQRV9USElOX01PREVNX18pIC8vdGhpbiBtb2RlbSBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfY29uZmlnX3BlZXJfaWQuaCBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9jb25maWdfcGVlcl9pZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzdkOTcKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfY29uZmlnX3BlZXJfaWQuaApAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTIKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgY2NjaV9jb25maWdfcGVlcl9pZC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIFZNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgRGVmaW5lcyBDQ0NJIGZlYXR1cmUgSUQgbGlzdCBmb3IgU09DCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAkTG9nJAorICoKKyAqIDA5IDIzIDIwMTkgYWN0b3J5Lm91CisgKiBbTU9MWTAwNDQxNjM5XSBbVk1PTFldIHN1cHBvcnQgNjRrQiBsb2dnaW5nIGNoYW5uZWwKKyAqIFtWTU9MWV1bT0FdIGNvcnJlY3QgcGVlcl9pZCBhbmQgc3VwcG9ydCA2NGtiIGxvZ2dpbmcgY2hhbm5lbAorICoKKyAqIDA0IDE5IDIwMTkgYWN0b3J5Lm91CisgKiBbTU9MWTAwMzk1MTc2XSBbVGhpbiBNb2RlbSAxLjBdW1BDSWUgcGxhdGZvcm1dIFBDSWUgUGxhdGZvcm0gMXN0IFJlbGVhc2Ugb24gQXBvbGxvCisgKiBbUENJZV1bT0FdW0NDQ0ldIHN1cHBvcnQgcGNpZSB0aGluIG1vZGVtIDEuMAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gVG8gQVAgSElGIHN1cHBvcnQKK0NDQ0lfUEVFUl9JRF9BUCAgPSBDQ0NJX1BFRVJfSURfTUlOLAorQ0NDSV9QRUVSX0lEX1NDUCA9IDEsCitDQ0NJX1BFRVJfSURfRUFQID0gMiwKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9leGNlcF9tZW1vcnlfcmVnaW9uLmggYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfZXhjZXBfbWVtb3J5X3JlZ2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOTY0NzcKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfZXhjZXBfbWVtb3J5X3JlZ2lvbi5oCkBAIC0wLDAgKzEsMTI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTIKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBjY2NpX2V4Y2VwX21lbW9yeV9yZWdpb24uaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgU2V0IGNjY2kgZXhjZXB0aW9uIG1lbW9yeSByZWdpb24gCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogJExvZyQKKyAqCisgKiAxMSAwMiAyMDE4IGFjdG9yeS5vdQorICogW01PTFkwMDM2MjY2M10gW0dlbjk3XVtWTU9MWV0gY2hlY2staW4gZXhjZXB0aW9uIGZsb3cKKyAqIFtWTU9MWV1bQ0NDSV0gZXhjZXB0aW9uIHNobSBzaXplIGNvbmZpZ3VyYXRpb24gY2hhbmdlCisgKgorICogMDQgMDkgMjAxOCBhY3Rvcnkub3UKKyAqIFtNT0xZMDAzMTIyOTBdIFtVTU9MWUVdW0NDQ0ldIGZpeCBsZWdhY3kgcHJvYmxlbQorICogW2NjY2ldIHN5bmMgc2hhcmUgbWVtb3J5IGxheW91dCB3aXRoIEFQIHNpZGUKKyAqCisgKiAxMCAyMCAyMDE2IGNzLmh1YW5nCisgKiBbTU9MWTAwMjA0NDMwXSBbQ0NDSV0gTVQ2MjkzIGNoYW5nZQorICogW0NDQ0ldIEZpeCBidWlsZCB3YXJuaW5nCisgKgorICogMDIgMTkgMjAxNiBjcy5odWFuZworICogW01PTFkwMDE2NTYxNl0gW0NDQ0ldIENoYW5nZSBLQUwgZXhjZXB0aW9uIGxvZyBzaXplIGZvciBNVDYyOTIKKyAqIFtDQ0NJIEV4Y2VwXSBDaGFuZ2UgQ0NDSSBleGNlcHRpb24gaGFuZHNoYWtlIGRhdGEgc2l6ZSAoUmVxdWVzdG9yIDogU1MvUW1laSkKKyAqCisgKiAwOCAwNiAyMDE1IGNzLmh1YW5nCisgKiBbTU9MWTAwMTM1NDY0XSBbQ0NDSV0gTmV3IENDQ0kgaGFuZHNoYWtlIGZsb3cKKyAqIFtDQ0NJXSBOZXcgQ0NDSSBoYW5kc2hha2UgZmxvdworICoKKyAqIDA4IDA2IDIwMTUgY3MuaHVhbmcKKyAqIFtNT0xZMDAxMzU0NjRdIFtDQ0NJXSBOZXcgQ0NDSSBoYW5kc2hha2UgZmxvdworICogW0NDQ0ldIE5ldyBDQ0NJIGhhbmRzaGFrZSBmbG93CisgKgorICogMDYgMDIgMjAxNSBjcy5odWFuZworICogW01PTFkwMDExNzg3MF0gW0NDQ0ldIE1vZGlmeSBleGNlcHRpb24gc2hhcmUgbWVtb3J5IHJlZ2lvbiBzZXR0aW5nIGZvciBLQUwgJiBBUCBDQ0NJCisgKiBbQ0NDSV0gTW9kaWZ5IGV4Y2VwdGlvbiBzaGFyZSBtZW1vcnkgcmVnaW9uIHNldHRpbmcgZm9yIEtBTCAmIEFQIENDQ0kKKyAqCisgKiAwNSAyOSAyMDE1IGhzaW4tanVuLnRhbmcKKyAqIFtNT0xZMDAxMTMzNDZdIERlYW5saSAtIE5ldyBTbGVlcCBNb2RlIERlYnVnIEZlYXR1cmUKKyAqIFtTSE1dIEFkZCBmb3IgbG93IHBvd2VyIC0gVU1PTFkKKyAqCisgKiAxMSAxMyAyMDE0IGNzLmh1YW5nCisgKiBbTU9MWTAwMDg0MzkzXSBbVU1PTFldW0NDQ0ldIENDQ0kgY29tbW9uIGhlYWRlciBhcnJhbmdlbWVudAorICogTWVyZ2luZworICogCQorICogCS8vVU1PTFkvVFJVTksvVU1PTFkvbWN1L3Bjb3JlL2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpX2NoX2NmZy5oCisgKiAJCisgKiAJdG8gLy9VTU9MWS9UUlVOSy9VTU9MWS9tY3UvY29tbW9uL2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpX2NoX2NmZy5oCisgKgorICogMDggMTkgMjAxNCBjcy5odWFuZworICogW01PTFkwMDA3NTc0MF0gW1VNT0xZXVtDQ0NJXSBDaGFuZ2UgZXhjZXB0aW9uIHNoYXJlIG1lbW9yeSBjb25maWcgc2l6ZSBmb3IgVU1PTFkgYnJpbmctdXAgb25seQorICogW0NDQ0ldIENoYW5nZSBleGNlcHRpb24gc2hhcmUgbWVtb3J5IGNvbmZpZyBzaXplIGZvciBVTU9MWSBicmluZy11cCBvbmx5CisgKgorICogMDggMDQgMjAxNCBpYW4uY2hlbmcKKyAqIFtNT0xZMDAwNzQ0NThdIFVNT0xZIENDQ0kgc2VydmljZQorICogCVtVTU9MWV9ERVYgQ0NDSSBQQ29yZSBTZXJ2aWNlXQorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKF9fTVRLX1RBUkdFVF9fKSAmJiBkZWZpbmVkKF9fSElGX0NDSVNNX1NVUFBPUlRfXykvLyBJbnRlcm5hbCBtb2RlbQorWF9DQ0NJX0VYQ0VQX01FTU9SWV9DT05GKENDQ0lfRVhDRVBfTUVNT1JZX1JFR0lPTl9DQ0NJLCA0NjQpICAgLy8tIHRoZSByZWdpb24gZm9yIENDQ0kgZGVidWcKK1hfQ0NDSV9FWENFUF9NRU1PUllfQ09ORihDQ0NJX0VYQ0VQX01FTU9SWV9SRUdJT05fQ0NDSUZTX0RVTVAsIDQ4KSAgIC8vLSB0aGUgcmVnaW9uIGZvciBDQ0NJIGRlYnVnCitYX0NDQ0lfRVhDRVBfTUVNT1JZX0NPTkYoQ0NDSV9FWENFUF9NRU1PUllfUkVHSU9OX0NDQ0lfU0VRX0RFQlVHLCAxNTM2KSAgIC8vLSB0aGUgcmVnaW9uIGZvciBDQ0NJIHNlcSBkZWJ1ZworWF9DQ0NJX0VYQ0VQX01FTU9SWV9DT05GKENDQ0lfRVhDRVBfTUVNT1JZX1JFR0lPTl9LQUwgLCAxNDMzNikgICAvLy0gdGhlIHJlZ2lvbiBmb3IgS0FMCitYX0NDQ0lfRVhDRVBfTUVNT1JZX0NPTkYoQ0NDSV9FWENFUF9NRU1PUllfUkVHSU9OX0xPV19QT1dFUl9NT05JVE9SLCAzMjc2OCkgICAvLy0gdGhlIHJlZ2lvbiBmb3IgbG93IHBvd2VyIG1vbml0b3IgKFNEMTA6IEVKIEZhcm4pCitYX0NDQ0lfRVhDRVBfTUVNT1JZX0NPTkYoQ0NDSV9FWENFUF9NRU1PUllfUkVHSU9OX05PVVNFICwgMTAyNDApICAgLy8tIGZvciByZXNlcnZlZAorWF9DQ0NJX0VYQ0VQX01FTU9SWV9DT05GKENDQ0lfRVhDRVBfTUVNT1JZX1JFR0lPTl9SVU5USU1FX0RBVEEgLDQwOTYgKSAgIC8vLSB0aGUgcmVnaW9uIGZvciBBUCBDQ0NJIChydW50aW1lIGRhdGEpCitYX0NDQ0lfRVhDRVBfTUVNT1JZX0NPTkYoQ0NDSV9FWENFUF9NRU1PUllfUkVHSU9OX0FQQ0NDSSAsIDEwMjQpICAgLy8tIHRoZSByZWdpb24gZm9yIEFQIENDQ0kgKGZvcmNlIGFzc2VydCkKK1hfQ0NDSV9FWENFUF9NRU1PUllfQ09ORihDQ0NJX0VYQ0VQX01FTU9SWV9SRUdJT05fTE9XX1BPV0VSICwgMTAyNCkJLy8tIHRoZSByZWdpb24gZm9yIGxvdyBwb3dlciAgCisjZWxzZSAvLyBleHRlcm5hbCBtb2RlbSBvciBNb0RJUworWF9DQ0NJX0VYQ0VQX01FTU9SWV9DT05GKENDQ0lfRVhDRVBfTUVNT1JZX1JFR0lPTl9DQ0NJLCA0NjQpICAgLy8tIHRoZSByZWdpb24gZm9yIENDQ0kgZGVidWcKK1hfQ0NDSV9FWENFUF9NRU1PUllfQ09ORihDQ0NJX0VYQ0VQX01FTU9SWV9SRUdJT05fQ0NDSUZTX0RVTVAsIDQ4KSAgIC8vLSB0aGUgcmVnaW9uIGZvciBDQ0NJIGRlYnVnCitYX0NDQ0lfRVhDRVBfTUVNT1JZX0NPTkYoQ0NDSV9FWENFUF9NRU1PUllfUkVHSU9OX0NDQ0lfU0VRX0RFQlVHLCAxNTM2KSAgIC8vLSB0aGUgcmVnaW9uIGZvciBDQ0NJIHNlcSBkZWJ1ZworWF9DQ0NJX0VYQ0VQX01FTU9SWV9DT05GKENDQ0lfRVhDRVBfTUVNT1JZX1JFR0lPTl9LQUwgLCAyMDQ4KQkvLy0gdGhlIHJlZ2lvbiBmb3IgS0FMCitYX0NDQ0lfRVhDRVBfTUVNT1JZX0NPTkYoQ0NDSV9FWENFUF9NRU1PUllfUkVHSU9OX0FQQ0NDSSAsIDEwMjQpICAgLy8tIHRoZSByZWdpb24gZm9yIEtBTAorWF9DQ0NJX0VYQ0VQX01FTU9SWV9DT05GKENDQ0lfRVhDRVBfTUVNT1JZX1JFR0lPTl9MT1dfUE9XRVIgLCAxMDI0KQkvLy0gdGhlIHJlZ2lvbiBmb3IgbG93IHBvd2VyIAorI2VuZGlmCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfZnNfaWYuaCBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9mc19pZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MzZhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfZnNfaWYuaApAQCAtMCwwICsxLDI3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgY2NjaV9mc19pZi5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBJbnRlcmZhY2Ugb2YgQ0NDSV9GUyBzZXJ2aWNlLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDkgMTggMjAyMCBsaS1jaGVuZy50c2FpCisgKiBbTU9MWTAwNTY5NjQ3XSBbTVA3LlBSRUNIRUNLSU4uREVWXVtDb2RlIHN5bmNdIHN5bmMgY29kZSBmcm9tIFQ3MDAKKyAqIFtSMy5NUF1bT0FdIE5WUkFNIGJhY2t1cC9yZXN0b3JlL3JlYnVpbGQvYmFja3VwIGVyYXNlCisgKgorICogMDkgMTEgMjAyMCBhY3Rvcnkub3UKKyAqIFtNT0xZMDA1MDU4ODRdIFJlcXVlc3QgZm9yIHRoZSBBUEkgb2YgbnZyYW0gYmFja3VwLyByZXNvdHJlIC8gcmVidWlsZCAvIGJhY2t1cCBlcmFzZS4KKyAqIFtNUDcuUFJFQ0hFQ0tJTl1bT0FdXSBOVlJBTSBiYWNrdXAvcmVzdG9yZS9yZWJ1aWxkL2JhY2t1cCBlcmFzZQorICoKKyAqIDA1IDA3IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTA1ODg0XSBSZXF1ZXN0IGZvciB0aGUgQVBJIG9mIG52cmFtIGJhY2t1cC8gcmVzb3RyZSAvIHJlYnVpbGQgLyBiYWNrdXAgZXJhc2UuCisgKiBbVEMxMC5TUF1bT0FdIE5WUkFNIGJhY2t1cC9yZXN0b3JlL3JlYnVpbGQvYmFja3VwIGVyYXNlCisgKgorICogMDcgMTcgMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDA0MjI0MzFdIFtDQ0NJXSBzdXBwb3J0IENNUFRfV3JpdGUgJiBDQ0NJIEZTL05WUkFNIGRlY291cGxlCisgKiBbVk1PTFldW09BXSBOVlJBTS9DQ0NJIGRlY291cGxlICYgQ01QVF9Xcml0ZSBmdW5jdGlvbiByZWFkeQorICoKKyAqIDAxIDE2IDIwMTkgYWN0b3J5Lm91CisgKiBbTU9MWTAwMzc5NTgxXSBbR2VuOTddW0NDQ0ldIFVNT0xZRSBwYXRjaCBiYWNrIFZNT0xZIGFjdGl2aXR5CisgKiBbVk1PTFkuU0VQVF1bT0FdIGNjY2kgcGF0Y2ggYmFjayBhY3Rpdml0eSBmcm9tIFVNT0xZRQorICoKKyAqIDExIDEyIDIwMTggYWN0b3J5Lm91CisgKiBbTU9MWTAwMzYzNTY3XSBbTUNGXSBOZXcgbm9ybWFsL2NyaXRpY2FsIE9UQSBmaWxlIHVwZGF0ZSBmbG93CisgKiBbQ0NDSUZTXSBhZGQgZ2V0IGZpbGUgZGV0YWlsIGFwaSBmb3IgTUNGCisgKgorICogMDIgMTcgMjAxNiBjcy5odWFuZworICogW01PTFkwMDE2NTA1OV0gW0NDQ0kgRlNdIEZpeCByZWN1cnNpdmUgaW5jbHVkZSBlcnJvcgorICogW0NDQ0kgRlNdIEZpeCByZWN1cnNpdmUgaW5jbHVkZQorICoKKyAqIDA5IDE0IDIwMTUgY3MuaHVhbmcKKyAqIFtNT0xZMDAxNDE3NzZdIFtDQ0NJIEZTXSBGaXggQ0NDSSBGUyBidWlsZCB3YXJuaW5nCisgKiBbQ0NDSSBGU10gRml4IENDQ0kgRlMgYnVpbGQgd2FybmluZworICoKKyAqIDA5IDE0IDIwMTUgY3MuaHVhbmcKKyAqIFtNT0xZMDAxNDE3NzZdIFtDQ0NJIEZTXSBGaXggQ0NDSSBGUyBidWlsZCB3YXJuaW5nCisgKiBbQ0NDSSBGU10gRml4IENDQ0kgRlMgYnVpbGQgd2FybmluZworICoKKyAqIDAxIDIwIDIwMTQgaS13ZWkudHNhaQorICogW01PTFkwMDA1NDMzN10gW01UNjU4MkxURV1bUGVyZm9ybWFuY2VdIE1lZXQgT3JhbmdlIElvVCBBdHRhY2ggdGltZSByZXF1aXJlbWVudCAoPDEwcykKKyAqIAlDQ0NJX0ZTIGNvbXBhY3QgcmVhZCBhbmQgcHJvZmlsZSB0cmFjZSAoc2RpbykKKyAqCisgKiAwMSAyMCAyMDE0IGktd2VpLnRzYWkKKyAqIFtNT0xZMDAwNTQzMzddIFtNVDY1ODJMVEVdW1BlcmZvcm1hbmNlXSBNZWV0IE9yYW5nZSBJb1QgQXR0YWNoIHRpbWUgcmVxdWlyZW1lbnQgKDwxMHMpCisgKiAJQ0NDSV9GUyBjb21wYWN0IHJlYWQgYW5kIHByb2ZpbGUgdHJhY2UKKyAqCisgKiAwNSAwOCAyMDEzIGktd2VpLnRzYWkKKyAqIFtNT0xZMDAwMjE4MjhdIFtDQ0NJIEZTXSBDQ0NJRlMgZGV2ZWxvcGVtZW50CisgKiBhLiBDaGVjay1pbiBjY2NpZnMgbmV3IGZlYXR1cmVzIChzdXBwb3J0IDE2S0IgSS9PKQorICogYi4gYWRkIF9fQ0NDSUZTX1NVUFBPUlRfXyBvcHRpb24gdG8gcmVsYXRlZCBmaWxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQ0NDSV9GU19JRl9IX18KKyNkZWZpbmUgX19DQ0NJX0ZTX0lGX0hfXworCisjaW5jbHVkZSAiZnNfZ2VuZXJhbF90eXBlcy5oIgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGUgU3lzdGVtIG9wIGNvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgICAgRlNfQ0NDSV9PUF9PUEVOID0gMHgxMDAxLAorICAgIEZTX0NDQ0lfT1BfU0VFSywgIC8vMHgxMDAyCisgICAgRlNfQ0NDSV9PUF9SRUFELCAgICAvLzB4MTAwMworICAgIEZTX0NDQ0lfT1BfV1JJVEUsIC8vMHgxMDA0CisgICAgRlNfQ0NDSV9PUF9DTE9TRSwgLy8weDEwMDUKKyAgICBGU19DQ0NJX09QX0NMT1NFQUxMLCAvLzB4MTAwNgorICAgIEZTX0NDQ0lfT1BfQ1JFQVRFRElSLCAvLzB4MTAwNworICAgIEZTX0NDQ0lfT1BfUkVNT1ZFRElSLCAvLzB4MTAwOAorICAgIEZTX0NDQ0lfT1BfR0VURklMRVNJWkUsIC8vMHgxMDA5CisgICAgRlNfQ0NDSV9PUF9HRVRGT0xERVJTSVpFLCAvLzB4MTAwYQorICAgIEZTX0NDQ0lfT1BfUkVOQU1FLCAgLy8weDEwMGIKKyAgICBGU19DQ0NJX09QX01PVkUsICAgIC8vMHgxMDBjCisgICAgRlNfQ0NDSV9PUF9DT1VOVCwgICAvLzB4MTAwZAorICAgIEZTX0NDQ0lfT1BfR0VURElTS0lORk8sIC8vMHgxMDBlCisgICAgRlNfQ0NDSV9PUF9ERUxFVEUsIC8vMHgxMDBmCisgICAgRlNfQ0NDSV9PUF9HRVRBVFRSSUJVVEVTLCAvLzB4MTAxMAorICAgIEZTX0NDQ0lfT1BfT1BFTkhJTlQsIC8vMHgxMDExCisgICAgRlNfQ0NDSV9PUF9GSU5ERklSU1QsIC8vMHgxMDEyCisgICAgRlNfQ0NDSV9PUF9GSU5ETkVYVCwgLy8weDEwMTMKKyAgICBGU19DQ0NJX09QX0ZJTkRDTE9TRSwgLy8weDEwMTQKKyAgICBGU19DQ0NJX09QX0xPQ0tGQVQsIC8vMHgxMDE1CisgICAgRlNfQ0NDSV9PUF9VTkxPQ0tBTEwsIC8vMHgxMDE2CisgICAgRlNfQ0NDSV9PUF9TSFVURE9XTiwvLzB4MTAxNworICAgIEZTX0NDQ0lfT1BfWERFTEVURSwgLy8weDEwMTgKKyAgICBGU19DQ0NJX09QX0NMRUFSRElTS0ZMQUcsIC8vMHgxMDE5CisgICAgRlNfQ0NDSV9PUF9HRVREUklWRSwgLy8weDEwMWEKKyAgICBGU19DQ0NJX09QX0dFVENMVVNURVJTSVpFLCAvLzB4MTAxYgorICAgIEZTX0NDQ0lfT1BfU0VURElTS0ZMQUcsIC8vMHgxMDFjCisgICAgRlNfQ0NDSV9PUF9PVFBXUklURSwgLy8weDEwMWQKKyAgICBGU19DQ0NJX09QX09UUFJFQUQsIC8vMHgxMDFlCisgICAgRlNfQ0NDSV9PUF9PVFBRVUVSWUxFTkdUSCwgLy8weDEwMWYKKyAgICBGU19DQ0NJX09QX09UUExPQ0ssICAgLy8weDEwMjAKKyAgICBGU19DQ0NJX09QX1JFU1RPUkUgPSAweDEwMjEsCisgICAgRlNfQ0NDSV9PUF9DTVBUUkVBRCA9IDB4MTAyMiwKKyAgICBGU19DQ0NJX09QX0JJTkFDQ0VTUyA9IDB4MTAyMywKKyAgICBGU19DQ0NJX09QX0NNUFRXUklURSA9IDB4MTAyNCwKKyAgICBGU19DQ0NJX09QX0dFVEZJTEVERVRBSUwgPSAweDEwMjUKK30gRlNfQ0NDSV9PUF9JRF9UOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBiaXQgbWFwIGZvciBDTVBUX09QX0lEICYgU3RydWN0dXJlIGZvciBDTVBUIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENDQ0lfRlNfQ01QVF9PUEVOICAgICAgICAgICgoMSkgPDwgMCkKKyNkZWZpbmUgQ0NDSV9GU19DTVBUX0dFVEZJTEVTSVpFICAgKCgxKSA8PCAxKQorI2RlZmluZSBDQ0NJX0ZTX0NNUFRfU0VFSyAgICAgICAgICAoKDEpIDw8IDIpCisjZGVmaW5lIENDQ0lfRlNfQ01QVF9SRUFEICAgICAgICAgICgoMSkgPDwgMykKKyNkZWZpbmUgQ0NDSV9GU19DTVBUX0NMT1NFICAgICAgICAgKCgxKSA8PCA0KQorI2RlZmluZSBDQ0NJX0ZTX0NNUFRfV1JJVEUgICAgICAgICAoKDEpIDw8IDUpCisKK3R5cGVkZWYgc3RydWN0IENDQ0lfRlNfUEFSQU1fQ01QVAoreworICAgIGthbF91aW50MzIgIG9waWRfbWFwOyAgIC8vb3BlcmF0ZSBpZAorICAgIGthbF91aW50MzIgIHJldFsyXTsgICAgIC8vZmlyc3QgYml0bWFwIHNlY29uZCBpcyBlcnJvciBjb2RlCisgICAga2FsX3VpbnQzMiAgRmxhZzsgICAgICAgLy9mc19vcGVuIFtpbl0gcGFyYQorICAgIGthbF91aW50MzIgICpGaWxlU2l6ZTsgIC8vZnNfZ2V0ZmlsZXNpemUgW291dF0gcGFyYW0KKyAgICBrYWxfaW50MzIgICBPZmZzZXQ7ICAgICAvL2ZzX3NlZWsgW2luXSBwYXJhbQorICAgIGthbF9pbnQzMiAgIFdoZW5jZTsgICAgIC8vZnNfc2VlayBbaW5dIHBhcmFtCisgICAgdm9pZCAgICAgICAgKkRhdGFQdHI7ICAgLy9mc19yZWFkIFtvdXRdIHBhcmFtCisgICAga2FsX3VpbnQzMiAgTGVuZ3RoOyAgICAgLy9mc19yZWFkIFtpbl0gIHBhcmFtCisgICAga2FsX3VpbnQzMiAgKlJlYWQ7ICAgICAgLy9mc19yZWFkIFtvdXRdIHBhcmFtCit9IENDQ0lfRlNfUEFSQU1fQ01QVF9UOworCit0eXBlZGVmIHN0cnVjdCBDQ0NJX0ZTX1BBUkFNX0NNUFRXCit7CisgICAga2FsX3VpbnQzMiAgb3BpZF9tYXA7ICAgICAgICAgICAvL29wZXJhdGUgaWQKKyAgICBrYWxfdWludDMyICByZXRbMl07ICAgICAgICAgICAgIC8vZmlyc3QgYml0bWFwIHNlY29uZCBpcyBlcnJvciBjb2RlCisgICAga2FsX3VpbnQzMiAgRmxhZzsgICAgICAgICAgICAgICAvL2ZzX29wZW4gW2luXSBwYXJhCisgICAga2FsX2ludDMyICAgT2Zmc2V0OyAgICAgICAgICAgICAvL2ZzX3NlZWsgW2luXSBwYXJhbQorICAgIGthbF9pbnQzMiAgIFdoZW5jZTsgICAgICAgICAgICAgLy9mc19zZWVrIFtpbl0gcGFyYW0KKyAgICB2b2lkICAgICAgICAqRGF0YVB0cjsgICAgICAgICAgIC8vZnNfY21wdF93cml0ZSBbaW5dIHBhcmFtCisgICAga2FsX3VpbnQzMiAgTGVuZ3RoOyAgICAgICAgICAgICAvL2ZzX2NtcHRfd3JpdGUgW2luXSAgcGFyYW0KKyAgICBrYWxfaW50MzIgICBmaWxlX2hhbmRsZTsgICAgICAgIC8vZnNfY21wdF93cml0ZSBbaW5dIHBhcmFtCisgICAga2FsX3VpbnQzMiAgKmZpbGVfaGFuZGxlX3B0cjsgICAvL2ZzX2NtcHRfd3JpdGUgW291dF0gcGFyYW0KKyAgICBrYWxfdWludDMyICAqYWN0X3dyaXRlX3NpemU7ICAgIC8vZnNfY21wdF93cml0ZSBbb3V0XSBwYXJhbQorfSBDQ0NJX0ZTX1BBUkFNX0NNUFRXX1Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWNsYXJlIGZ1bmN0aW9uIHByb3RvdHlwZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2ludDMyIE1EX0ZTX0NNUFRfUmVhZChjb25zdCBXQ0hBUiAqIEZpbGVOYW1lLCBDQ0NJX0ZTX1BBUkFNX0NNUFRfVCAqY21wdF9wYXJhbSk7CitrYWxfaW50MzIgTURfRlNfQ01QVF9Xcml0ZShjb25zdCBXQ0hBUiAqIEZpbGVOYW1lLCBDQ0NJX0ZTX1BBUkFNX0NNUFRXX1QgKmNtcHR3X3BhcmFtKTsKKy8vIEdlbmVyYWwgSS9PCitrYWxfaW50MzIgTURfRlNfT3Blbihjb25zdCBXQ0hBUiAqIEZpbGVOYW1lLCBrYWxfdWludDMyIEZsYWcpOwora2FsX2ludDMyIE1EX0ZTX09wZW5IaW50KGNvbnN0IFdDSEFSICogRmlsZU5hbWUsIGthbF91aW50MzIgRmxhZywgRlNfRmlsZU9wZW5IaW50ICogRFNSX0hpbnQpOwora2FsX2ludDMyIE1EX0ZTX0Nsb3NlKEZTX0hBTkRMRSBGaWxlSGFuZGxlKTsKK2thbF9pbnQzMiBNRF9GU19SZWFkKEZTX0hBTkRMRSBGaWxlSGFuZGxlLCB2b2lkICogRGF0YVB0ciwga2FsX3VpbnQzMiBMZW5ndGgsIGthbF91aW50MzIgKiBSZWFkKTsKK2thbF9pbnQzMiBNRF9GU19Xcml0ZShGU19IQU5ETEUgRmlsZUhhbmRsZSwgdm9pZCAqIERhdGFQdHIsIGthbF91aW50MzIgTGVuZ3RoLCBrYWxfdWludDMyICogV3JpdHRlbik7CitrYWxfaW50MzIgTURfRlNfU2VlayhGU19IQU5ETEUgRmlsZUhhbmRsZSwga2FsX2ludDMyIE9mZnNldCwga2FsX2ludDMyIFdoZW5jZSk7CisKKy8vTlZSQU0gYmFja3VwL3Jlc3RvcmUvZXJhc2UgZm9yIFRpdGFuJ3MgZmFjdG9yeSBDTUQKK2thbF9pbnQzMiBNRF9GU19CaW5fUmVnaW9uX0FjY2VzcyhrYWxfaW50MzIgb3BUeXBlKTsKKworLy9JbmZvcm1hdGlvbgora2FsX2ludDMyIE1EX0ZTX0dldEZpbGVTaXplKEZTX0hBTkRMRSBGaWxlSGFuZGxlLCBrYWxfdWludDMyICogU2l6ZSk7CisKKy8vRmlsZSBPbmx5IE9wZXJhdGlvbgora2FsX2ludDMyIE1EX0ZTX0RlbGV0ZShjb25zdCBXQ0hBUiAqIEZpbGVOYW1lKTsKKwora2FsX2ludDMyIE1EX0ZTX0dldEF0dHJpYnV0ZXMoY29uc3QgV0NIQVIgKiBGaWxlTmFtZSk7CitrYWxfaW50MzIgTURfRlNfR2V0RmlsZURldGFpbChjb25zdCBXQ0hBUiAqRmlsZU5hbWUsIEZTX0ZpbGVEZXRhaWwgKkZpbGVEZXRhaWwpOworCisKKy8vRm9sZGVyIE9ubHkgT3BlcmF0aW9uCitrYWxfaW50MzIgTURfRlNfQ3JlYXRlRGlyKGNvbnN0IFdDSEFSICogRGlyTmFtZSk7CisKK2thbF9pbnQzMiBNRF9GU19SZW1vdmVEaXIoY29uc3QgV0NIQVIgKiBEaXJOYW1lKTsKKwora2FsX2ludDMyIE1EX0ZTX0dldEZvbGRlclNpemUoY29uc3QgV0NIQVIgKkRpck5hbWUsIGthbF91aW50MzIgRmxhZywga2FsX3VpbnQ4ICpSZWN1cnNpdmVTdGFjaywgY29uc3Qga2FsX3VpbnQzMiBTdGFja1NpemUpOworCitrYWxfaW50MzIgTURfRlNfUmVuYW1lKGNvbnN0IFdDSEFSICogRmlsZU5hbWUsIGNvbnN0IFdDSEFSICogTmV3TmFtZSk7CisvL0ZpbGUgYW5kIEZvbGRlciBPcGVyYXRpb25zCitrYWxfaW50MzIgTURfRlNfTW92ZShjb25zdCBXQ0hBUiAqIFNyY0Z1bGxQYXRoLCBjb25zdCBXQ0hBUiAqIERzdEZ1bGxQYXRoLCBrYWxfdWludDMyIEZsYWcsIEZTX1Byb2dyZXNzQ2FsbGJhY2sgUHJvZ3Jlc3MsIGthbF91aW50OCAqUmVjdXJzaXZlU3RhY2ssIGNvbnN0IGthbF91aW50MzIgU3RhY2tTaXplKTsKKwora2FsX2ludDMyIE1EX0ZTX0NvdW50KGNvbnN0IFdDSEFSICogRnVsbFBhdGgsIFVJTlQgRmxhZywgQllURSAqUmVjdXJzaXZlU3RhY2ssIGNvbnN0IFVJTlQgU3RhY2tTaXplKTsKKwora2FsX2ludDMyIE1EX0ZTX1hEZWxldGUoY29uc3QgV0NIQVIgKiBGdWxsUGF0aCwga2FsX3VpbnQzMiBGbGFnLCBrYWxfdWludDggKlJlY3Vyc2l2ZVN0YWNrLCBjb25zdCBrYWxfdWludDMyIFN0YWNrU2l6ZSk7CisKKy8vRmluZCBGaWxlCitrYWxfaW50MzIgTURfRlNfRmluZEZpcnN0KGNvbnN0IFdDSEFSICogTmFtZVBhdHRlcm4sIGthbF91aW50OCBBdHRyLCBrYWxfdWludDggQXR0ck1hc2ssIEZTX0RPU0RpckVudHJ5ICogRmlsZUluZm8sIFdDSEFSICogRmlsZU5hbWUsIGthbF91aW50MzIgTWF4TGVuZ3RoKTsKK2thbF9pbnQzMiBNRF9GU19GaW5kTmV4dChGU19IQU5ETEUgRmlsZUhhbmRsZSwgRlNfRE9TRGlyRW50cnkgKiBGaWxlSW5mbywgV0NIQVIgKiBGaWxlTmFtZSwga2FsX3VpbnQzMiBNYXhMZW5ndGgpOwora2FsX2ludDMyIE1EX0ZTX0ZpbmRDbG9zZShGU19IQU5ETEUgRmlsZUhhbmRsZSk7CisKK2thbF9pbnQzMiBNRF9GU19HZXREcml2ZShrYWxfdWludDMyIFR5cGUsIGthbF91aW50MzIgU2VyaWFsLCBrYWxfdWludDMyIEFsdE1hc2spOworLy9Ecml2ZSBNYW5hZ2VtZW50CitrYWxfaW50MzIgTURfRlNfR2V0Q2x1c3RlclNpemUoa2FsX3VpbnQzMiBEcml2ZUlkeCk7CisKKy8vUG93ZXIgTG9zdCBEZXRlY3Rpb24gYW5kIFJlY292ZXJ5CitrYWxfaW50MzIgTURfRlNfU2V0RGlza0ZsYWcodm9pZCk7CisKK2thbF9pbnQzMiBNRF9GU19DbG9zZUFsbCh2b2lkKTsKKworLy9rYWxfaW50MzIgTURfRlNfQ2hlY2tEaXNrRmxhZyh2b2lkKTsKK2thbF9pbnQzMiBNRF9GU19DbGVhckRpc2tGbGFnKHZvaWQpOworCisvL0Rpc2sgTWFuYWdlbWVudAora2FsX2ludDMyIE1EX0ZTX0dldERpc2tJbmZvKGNvbnN0IFdDSEFSICogRHJpdmVOYW1lLCBGU19EaXNrSW5mbyAqIERpc2tJbmZvLCBrYWxfaW50MzIgRmxhZ3MpOworCisvL0NhcmQgbWFuYWdlbWVudAorCisvL0ZpbGUgU3lzdGVtIFJ1bi1UaW1lIExpZmVDeWNsZQordm9pZCBNRF9GU19TaHV0RG93bih2b2lkKTsKK2thbF9pbnQzMiBNRF9GU19VbmxvY2tBbGwodm9pZCk7CitrYWxfaW50MzIgTURfRlNfTG9ja0ZBVChrYWxfdWludDMyIFR5cGUpOworCisvL0ZpbGUgU3lzdGVtIFJ1bi1UaW1lIERlYnVnCisKKy8vRGlyQ2FjaGUKKworLy9GbGFzaCBEZXZpY2UgRGlyZWN0IElPCitrYWxfaW50MzIgTURfRlNfT1RQV3JpdGUoa2FsX2ludDMyIGRldnR5cGUsIGthbF91aW50MzIgT2Zmc2V0LCB2b2lkICogQnVmZmVyUHRyLCBrYWxfdWludDMyIExlbmd0aCk7CitrYWxfaW50MzIgTURfRlNfT1RQUmVhZChrYWxfaW50MzIgZGV2dHlwZSwga2FsX3VpbnQzMiBPZmZzZXQsIHZvaWQgKiBCdWZmZXJQdHIsIGthbF91aW50MzIgTGVuZ3RoKTsKK2thbF9pbnQzMiBNRF9GU19PVFBRdWVyeUxlbmd0aChrYWxfaW50MzIgZGV2dHlwZSwga2FsX3VpbnQzMiAqTGVuZ3RoKTsKK2thbF9pbnQzMiBNRF9GU19PVFBMb2NrKGthbF9pbnQzMiBkZXZ0eXBlKTsKK2thbF9pbnQzMiBNRF9GU19SZXN0b3JlKGNvbnN0IFdDSEFSICogRmlsZU5hbWUsIHZvaWQqIHBCdWZmZXIsIGthbF91aW50MzIgTGVuZ3RoKTsKKworI2VuZGlmICAvKiAhX19DQ0NJX0ZTX0lGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpX2lmLmggYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfaWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWZkOTVhCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpX2lmLmgKQEAgLTAsMCArMSwxNDg4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTIKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgY2NjaV9pZi5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIFVNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgRGVmaW5lcyB0aGUgQ0NDSSBkYXRhIHN0cnVjdHVyZXMgYW5kIEFQSXMKKyAqICAgVGhpcyBmaWxlIGhhcyA3IHJlZ2lvbnMsIGluY2x1ZGVzOgorICogICBDQ0NJIGhlYWRlciBmaWxlIAkJOiBpbmNsdWRlIGhlYWRlciBmaWxlCisgKiAgIENDQ0kgY29tcGlsZSBvcHRpb24gCTogRGVmaW5lIENDQ0kgcmVsYXRlZCBjb21waWxlIG9wdGlvbgorICogICBDQ0NJIHN0cnVjdHVyZSBkZWZpbmUgCTogRGVmaW5lIENDQ0kgcHVibGljIHN0cnVjdHVyZQorICogICBDQ0NJIE1hY3JvCQkJOiBEZWZpbmUgQ0NDSSBwdWJsaWMgTWFjcm8KKyAqICAgQ0NDSSBmdW5jdGlvbiBwb2ludGVyCTogRGVmaW5lIENDQ0kgcHVibGljIGZ1bmN0aW9uIHBvaW50ZXIKKyAqICAgQ0NDSSBwdWJsaWMgQVBJCQk6IERlZmluZSBDQ0NJIHB1YmxpYyBBUEkKKyAqICAgQ0NDSSBNSVNDIAkJCTogRm9yIHRlc3QgcHJvcG9zZSBvciBvdGhlciB1c2UKKyAqCisgKiAgIEVhY2ggcmVnaW9uIGluY2x1ZGVzIDMgcGFydHMsIGluY2x1ZGVzOgorICogICBDb21tb24gOiBGb3IgY29tbW9uIHVzZQorICogICBQQ29yZSAgOiBGb3IgUENvcmUgdXNlIG9ubHkKKyAqICAgTDFDb3JlIDogRm9yIEwxQ29yZSB1c2Ugb25seQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogJExvZyQKKyAqCisgKiAxMSAxMSAyMDIwIGFkZWwubGlhbworICogW01PTFkwMDU4NzY5MF0gW01UNjg4MF1bQ29sZ2luXUZpeCB0aGUgbWV0aG9kIHRvIGdldCB0aGUgbWluaSBkdW1wIGZsYWcgYW5kIG1pZHIgZHVtcCBmbGFnCisgKgorICogMDkgMTggMjAyMCBsaS1jaGVuZy50c2FpCisgKiBbTU9MWTAwNTY5NjQ3XSBbTVA3LlBSRUNIRUNLSU4uREVWXVtDb2RlIHN5bmNdIHN5bmMgY29kZSBmcm9tIFQ3MDAKKyAqIFtSMy5NUF1bT0FdW0NDQ0ldY29kZSBzeW5jIGZyb20gVDcwMAorICoKKyAqIDA5IDE1IDIwMjAgbGktY2hlbmcudHNhaQorICogW01PTFkwMDU2OTY0N10gW01QNy5QUkVDSEVDS0lOLkRFVl1bQ29kZSBzeW5jXSBzeW5jIGNvZGUgZnJvbSBUNzAwCisgKiBbTVA3LlBSRUNIRUNLSU4uREVWXVtPQV1bQ0NDSV1jb2RlIHN5bmMgZnJvbSBUNzAwCisgKgorICogMDggMDQgMjAyMCBhY3Rvcnkub3UKKyAqIFtNT0xZMDA1NTQ1MzRdIFtDb2xnaW5dW0NvZGUgc3luY10gc3luYyBjb2RlIGZyb20gTVQ2ODgwLk1QCisgKiBbVDcwMF1bT0FdW0NDQ0ldIHN5bmMgZnJvbSBNVDY4ODAKKyAqCisgKiAwNyAyMyAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDU0OTIyN10gW0NvbGdpbl0gcHJvdmlkZSBib290IGlkIGZyb20gcnVudGltZSBkYXRhIGZvciBVU0IgZHJpdmVyCisgKiBbTVQ2ODgwXVtPQV0gYWRkIGJvb3QgbW9kZSBlbnVtIChnZXQgZnJvbSBBUCBydW50aW1lIGRhdGEpCisgKgorICogMDcgMTYgMjAyMCBhY3Rvcnkub3UKKyAqIFtNT0xZMDA1NDY4NjRdIFtDb2xnaW5dW0NDQ0ldIGJyaW5nIHVwIGlzc3VlIHBhdGNoIGJhY2sKKyAqIFtNVDY4ODAuTVBdW09BXSBhZGQgaG9zdCBoYW5kc2hha2UgZG9uZSBicm9hZGNhc3QKKyAqCisgKiAwNyAwOCAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDU0MTYyNV0gW0NvbGdpbl1bU0JdIERQTUFJRiBjb2RlIG1lcmdlCisgKiBbUjMuTVQ2ODgwLk1QXVtPQV0gYWRkIGhvc3QgaGFuZHNoYWtlIGRvbmUgYnJvYWRjYXN0CisgKgorICogMDcgMDcgMjAyMCBhY3Rvcnkub3UKKyAqIFtNT0xZMDA1NDMxODZdIFtDb2xnaW5dIGNvZGUgc3luYyB0byBOUjE1LlIzLk1UNjg4MC5NUAorICogW1IzLk1UNjg4MC5NUF1bT0FdW0NDQ0ldIHN5bmMgZnJvbSBDT0xHSU4uU0IuU01ULkRFVgorICoKKyAqIDA2IDA1IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTMyMTE3XSBbQ0NDSV0gc3VwcG9ydCBhc3luYyBIUyBvbiBkYXRhIGNhcmQKKyAqIFtDT0xHSU4uU0IuREVWXVtPQV0gZW5hYmxlIGFzeW5jIGhzCisgKgorICogMDYgMDMgMjAyMCBhY3Rvcnkub3UKKyAqIFtNT0xZMDA1MjAwNDBdIFtHZW45N11bQ0NDSV0gRElQQyBkZXZlbG9wbWVudCAtIHN1cHBvcnQgcG9ydCBzZXR0aW5nIGluZGljYXRpb24KKyAqIFtOUjE1LlIzLkNPTEdJTi5TQi5TTVQuREVWXVtPQV0gYXBwbHkgRElQQworICoKKyAqIDA1IDE5IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTI1NTk5XSBjb2RlIHN5bmMgZm9yIENvbGdpbgorICogW05SMTUuUjMuQ09MR0lOLlNCLlNNVC5ERVZdW09BXVtDQ0NJXSBjb2RlIHN5bmMgZnJvbSAxOU5PVgorICoKKyAqIDAzIDIzIDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTAyODU4XSBbR2VuOTddW0dlbjk4XSBtZXJnZSBjY2NpIGNoYW5uZWwgaWQvcnVudGltZSBkYXRhIGlkCisgKiBbMTlOT1ZdW09BXVtOQ0NDSS9OQ0NDSURFVl0gbWVyZ2UgY2hhbm5lbCBpZCB0YWJsZQorICoKKyAqIDAzIDA2IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTAzNjE3XSBbR2VuOTddW1RoaW4gTW9kZW1dW2NjY2ldIGNob29zZSBib290IHVwIGhhbmRzaGFrZSBmbG93IGJhc2VkIG9uIGxpbmsgc3RhdHVzCisgKiBbMTlOT1ZdW09BXSBjY2NpIHNraXAgcGNpZSBmbG93IGlmIG5vIHBjaWUKKyAqCisgKiAwMSAwNiAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDQ2Nzg4Ml0gW1RFLUNBVF1bQnkgQVRHXVtNVDY4ODVdW1BldHJ1c11bUTBdW01EU1RdW1NJTTE6Q1RdRXh0ZXJuZWwgKEVFKSxtY3UvZHJpdmVyL2NjaXNtY29yZS9zcmMvY2Npc21jb3JlX2NjY2kuYyBsaW5lOjE5NzcgcG9wIHVwCisgKiBbTTcwLjE5Tk9WXVtPQV0gYWRkIGV4Y2VwdGlvbiBocyB0aW1lb3V0CisgKgorICogMTIgMDkgMjAxOSBreWxlLnNoaW4KKyAqIFtNT0xZMDAzNDAwMDFdIFs2NzZYXVtTUFJdIGJsb2NrIEJJUCB3aGVuIGRldmljZSBjb25uZWN0IHRvIDU2SyBmYWN0b3J5IGNhYmxlCisgKiAJCisgKiAJLgorICogCXBhdGNoIGJhY2sKKyAqCisgKiAxMiAwNSAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDQ2MzgxN10gW0dlbjk3XVtDQ0NJXSBwcm92aWRlIHF1ZXJ5IGZ1bmN0aW9uIHRvIGdldCBBUC9NRCBtZW1vcnkgbWFwcGluZworICogW1ZNT0xZXVtPQV0gYWRkIG1lbW9yeSByZW1hcCBhZGRyZXNzIGZlYXR1cmUgaWQKKyAqCisgKiAwNyAyNSAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDQyNDc3N10gW0dlbjk3XSBBc3NlcnRpb24gcmVtb3ZhbCAmIFN0cmljdCBhbGlhc2luZyB3YXJuaW5nIGNsZWFuLXVuCisgKiBbVk1PTFldW09BXVtDQ0NJXSBmaXggTFRPIHdhcm5pbmcKKyAqCisgKiAwNyAxOCAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDQyMjU3OV0gW01ERFBdIERQRk0gcG9ydGluZyB0byBWTU9MWQorICogW1ZNT0xZXVtPQV0gc3VwcG9ydCBNRERQICYgcmVuYW1lIHRvIERQRk0KKyAqCisgKiAwNyAxNyAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDQyMjQzMV0gW0NDQ0ldIHN1cHBvcnQgQ01QVF9Xcml0ZSAmIENDQ0kgRlMvTlZSQU0gZGVjb3VwbGUKKyAqIFtWTU9MWV1bT0FdIE5WUkFNL0NDQ0kgZGVjb3VwbGUgJiBDTVBUX1dyaXRlIGZ1bmN0aW9uIHJlYWR5CisgKgorICogMDYgMjYgMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDA0MTY3MjVdIFtHZW45N11bUENJZV0gc3VwcG9ydCBjaGFubmVsIGV4Y2VwdGlvbiBmbG93IG92ZXIgUENJZQorICogW1ZNT0xZXVtPQV0gc3VwcG9ydCBleGNlcHRpb24gZmxvdyBhdCBQQ0llIHBsYXRmb3JtCisgKgorICogMDYgMTAgMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDA0MTI2MjBdIFtHZW45N11bTFRPXSBmaXggTFRPIHdhcm5pbmcgaW4gbGluay5sb2cKKyAqIFtWTU9MWV1bT0FdIGZpeCBjY2NpX2V4Y2VwdF9obXVfaW5pdCByZXR1cm4gdHlwZQorICoKKyAqIDA0IDI5IDIwMTkgYWN0b3J5Lm91CisgKiBbTU9MWTAwMzk1MTc2XSBbVGhpbiBNb2RlbSAxLjBdW1BDSWUgcGxhdGZvcm1dIFBDSWUgUGxhdGZvcm0gMXN0IFJlbGVhc2Ugb24gQXBvbGxvCisgKiBbVk1PTFldW1RydW5rXVtPQV0gRGlzYWJsZSBhc3NlcnQgYml0IGZvciBDQ0NJX1NZU1RFTV9DSEFOTkVMCisgKgorICogMDQgMTkgMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDAzOTUxNzZdIFtUaGluIE1vZGVtIDEuMF1bUENJZSBwbGF0Zm9ybV0gUENJZSBQbGF0Zm9ybSAxc3QgUmVsZWFzZSBvbiBBcG9sbG8KKyAqIFtQQ0llXVtPQV1bQ0NDSV0gc3VwcG9ydCBwY2llIHRoaW4gbW9kZW0gMS4wCisgKgorICogMDEgMTYgMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDAzNzk1ODFdIFtHZW45N11bQ0NDSV0gVU1PTFlFIHBhdGNoIGJhY2sgVk1PTFkgYWN0aXZpdHkKKyAqIFtWTU9MWS5TRVBUXVtPQV0gY2NjaSBwYXRjaCBiYWNrIGFjdGl2aXR5IGZyb20gVU1PTFlFCisgKgorICogMTIgMjQgMjAxOCBhY3Rvcnkub3UKKyAqIFtNT0xZMDAzNzAyNzhdIE1EIGVhcmx5IGV4Y2VwdGlvbiBkdW1wIGZvciBQIE1pZ3JhdGlvbgorICogW0xSMTMuUjFdIGFkZCBBUEkgZm9yIG1lbWR1bXAgdGltZW91dC4KKyAqCisgKiAwOCAyMSAyMDE4IGFjdG9yeS5vdQorICogW01PTFkwMDM0NjU2Nl0gW0dlbjk3XVtMMVNfTDFESVNBQkxFX1NBUF0gYm9vdCB0byBpZGxlIHN5bmMKKyAqIFtDQ0NJXSBib290IHRvIGlkbGUgcGF0Y2gKKyAqCisgKiAwOCAxNiAyMDE4IGFjdG9yeS5vdQorICogW01PTFkwMDM0NTM3NV0gW0dlbjk3XSBMYW5kaW5nIE5DQ0NJIChOZXh0IGdlbiBDQ0NJKQorICogW1ZNT0xZXSBhZGQgbmNjY2kgbmNjY2lzcnYgbmNjY2lfaXRfY3RybAorICoKKyAqIDA3IDI0IDIwMTggYWN0b3J5Lm91CisgKiBbTU9MWTAwMzQxNzkwXSBbTVQ2Mjk1XSBVREMgZmVhdHVyZSBwYXRjaCBiYWNrCisgKiBhZGQgVURDIGZlYXR1cmUgSUQgYW5kIHR0eSBjaGFubmVsIC8gcmVwbGFjZSBjY2NpIHNwaW5sb2NrIHdpdGggSFdJVEMKKyAqCisgKiAwNCAzMCAyMDE4IGFjdG9yeS5vdQorICogW01PTFkwMDMyMjk5NF0gW2NjY2ldIGFkZCBkdW1teSB0YXNrIHRvIGhlbHAgZGlzcGF0Y2ggQ1IKKyAqIFtkdW1teSBtb2R1bGVdIGFkZCBBUCBDQ0NJL0hNVS9NRCBDQ0NJIG1vZHVsZSBJRAorICoKKyAqIDA0IDMwIDIwMTggYWN0b3J5Lm91CisgKiBbTU9MWTAwMzIyMDAyXSBbU3lzdGVtIFNlcnZpY2VdW01PTFkgS2VybmVsIEludGVybmFsIFJlcXVlc3RdIEFNTVNfUE9TCisgKiBbY2NjaV0gYWRkIFBPUyBTSE0gZmVhdHVyZSBpZAorICoKKyAqIDAzIDIyIDIwMTggYWN0b3J5Lm91CisgKiBbTU9MWTAwMzE1NTkyXSA/TS1URUWR4z8/cmVsZWFzZSBwYXRjaGFwcGx5IGZvciBtdDY3NzEgTXRlZSBwYXRjaCBjb21iaW5lZCBjb2RlYmFzZSAtIE1EX0NDQ0kKKyAqIFtUUlVOS11bY2NjaV0gYWRkIGZvciBNVEVFL01EIFNITSBhbGxvY2F0aW9uCisgKgorICogMDkgMTggMjAxNyBjaGllbi1odWkubHUKKyAqIFtNT0xZMDAyNzgzMjFdIFtDQ0NJXVtTQ1BDQ0lTTV0gQ0NDSSBzdXBwb3J0IE1EPC0+U0NQIHRyYW5zbWlzc2lvbiBvbiBHZW45MworICogW0NDQ0lUVFldW0NDQ0ldIHN1cHBvcnQgTUQ8LT5TQ1AgdHJhbnNtaXNzaW9uLgorICoKKyAqIDA5IDA3IDIwMTcgY2hpZW4taHVpLmx1CisgKiBbTU9MWTAwMjc2NTEwXSBbQ0NDSV1bQ0NDSV9TWVNfTVNHXSBtb2RpZnkgQ0NDSSBzeXN0ZW0gbWVzc2FnZSBzZW5kIGlsbSA0IGJ5dGVzCisgKiBbQ0NDSV1bQ0NDSV9TWVNfTVNHXSBwcmV2ZW50IGNjY2kgY29tbW9uIGlsbSA0QiBwb3RlbnRpYWwgcmlzay4KKyAqCisgKiAwNCAwNSAyMDE3IGNoaWVuLWh1aS5sdQorICogW01PTFkwMDIzOTYxMV0gW0NDQ0lfSVBDXVtDQ0NJXSBhZGQgQ0NDSSBJUEMgYW5kIHJ1bnRpbWUgZmVhdHVyZQorICogW0NDQ0ldW0NDQ0lfSVBDXSBhZGQgcnVudGltZSBmZWF0dXJlIGFuZCBJUEMgY29uZmlnIGZvciBEUEZNLgorICoKKyAqIDAxIDI0IDIwMTcgY2hpZW4taHVpLmx1CisgKiBbTU9MWTAwMjI2NTg0XSBbQ0NDSV0gYWRkIHJ1bnRpbWUgZGF0YSBzdXBwb3J0IGZlYXR1cmUKKyAqIGFkZCBydW50aW1lIGRhdGEgZmVhdHVyZSBJRCBmb3IgTW9kZW0gUEhZIENhcHR1cmUgYW5kIE1EPC0+V2lGaSBkaXJlY3QgcGF0aC4KKyAqCisgKiAwMSAwNiAyMDE3IGNoaWVuLWh1aS5sdQorICogW01PTFkwMDIyMDAwMF0gbWVyZ2UgQ1NDRCBpbnRvIHRydW5rCisgKiBbQ0NDSV0gYWRkIENTQ0QgY29tcGlsZSBmbGFnIGZvciBBUCBNRCBQRUVSIElEIGVudW0uCisgKgorICogMDEgMDYgMjAxNyBjaGllbi1odWkubHUKKyAqIFtNT0xZMDAyMjAwMDBdIG1lcmdlIENTQ0QgaW50byB0cnVuaworICogW0NDQ0ldIGFkZCBDU0NEIGNvbXBpbGUgZmxhZyBmb3IgQVAgTUQgUEVFUiBJRCBlbnVtLgorICoKKyAqIDEyIDEyIDIwMTYgY2hpZW4taHVpLmx1CisgKiBbTU9MWTAwMjAxODgxXSBbQ0NJU01dIENDSVNNIHN1cHBvcnQgaW4gVU1PTFlBCisgKiBbQ0NDSV1bQ0NJU01dIG1vZGlmeSBmZWF0dXJlIElEIGZvciBDQ0lTTSBTSE0gc3VwcG9ydAorICoKKyAqIDExIDIzIDIwMTYgYXAud2FuZworICogW01PTFkwMDIxMDgyMF0gW0hNVV0gQWRkIGV4Y2VwdGlvbiBzdGVwCisgKiAuCisgKgorICogMTEgMTggMjAxNiBjaGllbi1odWkubHUKKyAqIFtNT0xZMDAyMDE4ODFdIFtDQ0lTTV0gQ0NJU00gc3VwcG9ydCBpbiBVTU9MWUEKKyAqIFtDQ0lTTV0gYWRkIENDSVNNIGV4Y2VwdGlvbiBtb2RlIHNoYXJlIG1lbW9yeS4KKyAqCisgKiAxMCAwNiAyMDE2IGNzLmh1YW5nCisgKiBbTU9MWTAwMjA0ODA4XSBbQ0NDSV0gU3VwcG9ydCBtdWx0aS1tcHUgc2V0dGluZworICogW0NDQ0ldIG11bHRpIE1QVQorICoKKyAqIFtNT0xZMDAyMDQ0MzBdIFtDQ0NJXSBNVDYyOTMgY2hhbmdlCisgKiBbQ0NDSV0gQWRkIDkzIGNoYW5nZQorICoKKyAqIDA3IDE5IDIwMTYgY3MuaHVhbmcKKyAqIFtNT0xZMDAxODU3NTRdIFtDQ0JdIFBvcnRpbmcgdG8gVU1PTFkgdHJ1bmsKKyAqIFtDQ0NJXSBTdXBwb3J0IENDQgorICoKKyAqIDA2IDI5IDIwMTYgYXAud2FuZworICogW01PTFkwMDE4NzI5OF0gW0NDQ0ldIExXQSByZWxhdGVkIGNoZWNrIGluCisgKiAuCisgKgorICoKKyAqCisgKiAwNiAwMSAyMDE2IGNzLmh1YW5nCisgKiBbTU9MWTAwMTgyNjQ3XSBbQ0NDSV0gRmFzdCBDQ0NJIGhlYWRlcgorICogW0NDQ0ldIEZhc3QgQ0NDSSBoZWFkZXIKKyAqCisgKiAwNCAyMCAyMDE2IGNzLmh1YW5nCisgKiBbTU9MWTAwMTczODI5XSBbQ0NDSV0gQWRkIGEgbmV3IENDQ0kgbWlzYyBpbmZvIGZvciBjdXN0b21lcgorICogW0NDQ0ldIEFkZCBjdXN0b21lciBtaXNjIGlkCisgKgorICogMDMgMjkgMjAxNiBjcy5odWFuZworICogW01PTFkwMDE3MTM1Ml0gW1dXIEZUXVtNVDY3NTVdW0phZGUtTV1bSDNHXVtVS11bVm9MVEVdW1NRQyBFeGNsdWRlZF0gTm8gIm1hbmFnZSBjb25mZXJlbmNlIiBtZW51CisgKiBbQ0NDSV0gQWRkIHJ1bnRpbWUgZGF0YSBpZCBmb3IgTVRVIHNpemUKKyAqCisgKiAwMSAyNSAyMDE2IGNzLmh1YW5nCisgKiBbTU9MWTAwMTYyMzY3XSBbQ0NJU01dIGFkZCBDQ0lTTQorICogW0NDQ0ldIEFkZCBDQ0lTTSByZWxhdGVkIGNvZGUKKyAqCisgKiAxMiAyOCAyMDE1IGNzLmh1YW5nCisgKiBbTU9MWTAwMTU0MDQ1XSBbTVQ2Nzk3XSBFUE9GIGNvZGUgc3VibWlzc2lvbiAtIHF1ZXJ5IEFQIGZlYXR1cmUgaWQKKyAqIFtDQ0NJXSBBZGQgcnVudGltZSBkYXRhIEFQX0NDQ0lfUlVOVElNRV9FRV9BRlRFUl9FUE9GCisgKgorICogMTIgMjEgMjAxNSBjcy5odWFuZworICogW01PTFkwMDE1NDA0NV0gW01UNjc5N10gRVBPRiBjb2RlIHN1Ym1pc3Npb24gLSBxdWVyeSBBUCBmZWF0dXJlIGlkCisgKiBbQ0NDSV0gQWRkIHJ1bnRpbWUgZGF0YSBBUF9DQ0NJX1JVTlRJTUVfRUVfQUZURVJfRVBPRgorICoKKyAqCisgKiAxMSAxMCAyMDE1IGNzLmh1YW5nCisgKiBbTU9MWTAwMTQ4NzQ2XSBbSE1VXSBDaGVjayB0aW1lciBmZWF0dXJlCisgKiBbQ0NDSV0gSE1VIGNoZWNrIHRpbWVyIGZlYXR1cmUKKyAqCisgKiAxMSAwMyAyMDE1IGNzLmh1YW5nCisgKiBbTU9MWTAwMTQ3OTU5XSBbQ0NDSV0gU3VwcG9ydCBlcnJvciBjb2RlCisgKiBbQ0NDSV0gU3VwcG9ydCBlcnJvciBjb2RlCisgKgorICogMTAgMjcgMjAxNSBjcy5odWFuZworICogW01PTFkwMDE0Njg3N10gW0NMRE1BIENvcmVdIEFkZCBEdXBsaWNhdGVkIEdQRCBkZXRlY3Rpb24gbWVjaGFuaXNtCisgKiBbQ0NDSV0gQWRkIEhJRiBwYXR0ZXJuIGluIENDQ0kgSU9SIHN0cnVjdHVyZQorICoKKyAqIDEwIDEyIDIwMTUgY3MuaHVhbmcKKyAqIFtNT0xZMDAxNDM5MjddIFtTeXN0ZW0gU29mdHdhcmVdIHNhdmUgTUQgYm9vdHVwIGFkZHJlc3MgZnJvbSBBUCBmb3IgRU1JIE1QVSB2aW9sYXRpb24gZGVidWdnaW5nCisgKiBbQ0NDSV0gQWRkIEFQIHJ1bnRpbWUgZGF0YSBpZCA6IEFQX0NDQ0lfUlVOVElNRV9NRF9JTUdfSU5GTworICoKKyAqIDA5IDI1IDIwMTUgY3MuaHVhbmcKKyAqIFtNT0xZMDAxNDMyMjZdIFtDQ0NJXSBBZGQgYm9vdCB1cCB0cmFjZSBmb3IgZGVidWdnaW5nIENDQ0kgSFMxCisgKiBbQ0NDSV0gQWRkIGJvb3QgdXAgdHJhY2UgZm9yIGRlYnVnZ2luZyBDQ0NJIEhTMQorICoKKyAqIDA4IDA2IDIwMTUgY3MuaHVhbmcKKyAqIFtNT0xZMDAxMzU0NjRdIFtDQ0NJXSBOZXcgQ0NDSSBoYW5kc2hha2UgZmxvdworICogW0NDQ0ldIE5ldyBDQ0NJIGhhbmRzaGFrZSBmbG93CisgKgorICogMDggMDYgMjAxNSBjcy5odWFuZworICogW01PTFkwMDEzNTQ2NF0gW0NDQ0ldIE5ldyBDQ0NJIGhhbmRzaGFrZSBmbG93CisgKiBbQ0NDSV0gTmV3IENDQ0kgaGFuZHNoYWtlIGZsb3cKKyAqCisgKiAwOCAwNSAyMDE1IGNzLmh1YW5nCisgKiBbTU9MWTAwMTM1NDYyXSBbSmFkZV0gQ0xETUFDT1JFIHRhc2sgbG9nZ2luZyBjYWxsYmFjayBmdW5jdGlvbiBhY3Rpdml0eQorICogW0NDQ0ldIEFkZCBDTERNQSBkZWJ1ZyBleGNlcHRpb24gc2hhcmUgbWVtb3J5IElELgorICoKKyAqIDA4IDA0IDIwMTUgY3MuaHVhbmcKKyAqIFtNT0xZMDAxMjIzNjFdIFs2MjkxIHBsdXNdW0NDQ0ldIE1lcmdlIFBDb3JlL0wxQ29yZQorICogW0NDQ0ldIE1lcmdlIGNvbW1vbiBoZWFkZXIKKyAqCisgKgorICogMDYgMTggMjAxNSBjcy5odWFuZworICogW01PTFkwMDEyMjM2MV0gWzYyOTEgcGx1c11bQ0NDSV0gTWVyZ2UgUENvcmUvTDFDb3JlCisgKiBbQ0NDSV0gTWVyZ2UgY29tbW9uIGhlYWRlcgorICogMDQgMTMgMjAxNSBjcy5odWFuZworICogW01PTFkwMDEwNjkxNF0gW0MySyBJUkFUXVtDQ0NJXSBBZGQgQ0NDSSBtaXNjIGluZm8gaWQgZm9yIEMySworICogW0NDQ0ldIEFkZCBDQ0NJIG1pc2MgaW5mbyBpZCBmb3IgQzJLCisgKgorICogMDEgMTQgMjAxNSBjcy5odWFuZworICogW01PTFkwMDA5MjAzN10gW0NDQ0ldIEZpeCBVTU9MWSBUcnVuayBidWlsZCBlcnJvcgorICogRml4IGJ1aWxkIGVycm9yLgorICoKKyAqIDAxIDEzIDIwMTUgY3MuaHVhbmcKKyAqIFtNT0xZMDAwOTIwMzddIFtDQ0NJXSBGaXggVU1PTFkgVHJ1bmsgYnVpbGQgZXJyb3IKKyAqIEZpeCBidWlsZCBlcnJvcgorICoKKyAqIDAxIDEyIDIwMTUgY3MuaHVhbmcKKyAqIFtNT0xZMDAwOTIwMzddIFtDQ0NJXSBGaXggVU1PTFkgVHJ1bmsgYnVpbGQgZXJyb3IKKyAqIEZpeCBDQ0NJIGJ1aWxkIGVycm9yCisgKgorICogMDEgMTIgMjAxNSBjcy5odWFuZworICogW01PTFkwMDA5MjAzN10gW0NDQ0ldIEZpeCBVTU9MWSBUcnVuayBidWlsZCBlcnJvcgorICogRml4IENDQ0kgYnVpbGQgZXJyb3IKKyAqCisgKiAxMiAyNSAyMDE0IGktd2VpLnRzYWkKKyAqIFtNT0xZMDAwODg5MjZdIElNUyBkZWRpY2F0ZSBtdXggY2hhbm5lbCBzdXBwb3J0CisgKiBmaXggZXJyb3IKKyAqCisgKiAxMiAxMCAyMDE0IGNzLmh1YW5nCisgKiBbTU9MWTAwMDgwMzUxXSBbTVQ2MjkxXVtDQ0NJXSBBZGQgTDFDb3JlIENDQ0kgc2VydmljZSAoQ0NDSSBTWVNNU0cvUlBDL0lQQykKKyAqIFtDQ0NJXSBBZGQgTDFDb3JlIFJQQy9JUEMgZGVidWcgc2VxCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9DQ0NJX0lGX0gKKyNkZWZpbmUgX0NDQ0lfSUZfSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJjY2NpX2NoX2NmZy5oIgorI2luY2x1ZGUgImhpZl9pb3IuaCIKKyNpbmNsdWRlICJxbXVfYm0uaCIKKworI2RlZmluZSBfX09MRF9DQ0NJX0hTX0ZMT1dfXworI2RlZmluZSBfX05FV19DQ0NJX0hTX0ZMT1dfXworI2RlZmluZSBfX0ZBU1RfQ0NDSV9IRUFERVJfXworLyohCisgKiAgQGJyaWVmIF9fQ0NDSV9OX1VTRV9UR1BEX0VYVF9fCisgKiAgICAgICAgICAgMjAxMjA5MjUgcGVyZmVyIHRvIHVzZSBUR1BEIGV4dGVuc2lvbiBmb3IgQ0NDSV9IRUFERVIKKyAqICAgICAgICAgICAgICAgICAgICBpZiBkZWZpbmVkIF9fQ0NDSV9OX1VTRV9HUERfRVhUX18sIHVzZSBidWZmIHBhcnQuCisgKi8KKy8vI2RlZmluZSBfX0NDQ0lfTl9VU0VfVEdQRF9FWFRfXworCisvKiEKKyAqICBAYnJpZWYgX19DQ0NJX1BFUkZfUFJPRklMSU5HX18KKyAqICAgICAgICAgICAyMDEyMDkyNCBjb21waWxlIG9wdGlvbiBmb3IgcGVyZm9ybWFuY2UgcHJvZmlsaW5nCisgKi8KKy8vI2RlZmluZSBfX0NDQ0lfUEVSRl9QUk9GSUxJTkdfXworCisvKiEKKyAqICBAYnJpZWYgX19DQ0NJX0xCX0lUX18KKyAqICAgICAgICAgICAyMDEyMDgwNSBjb21waWxlIG9wdGlvbiBmb3IgU21hcnRwaG9uZSBBUCBJVAorICovCisvLyNkZWZpbmUgX19DQ0NJX0xCX0lUX18gZGVmaW5lZCBpbiBoaWZfY2NjaS5tYWsKKworLyohCisgKiAgQGJyaWVmIF9fQ0NDSV9HUERfTEVBS19EQkdfXyBkZWJ1ZyBmb3IgZ3BkIGxlYWsKKyAqICAgICAgICAgICAyMDEyMDYwNCBzb2x2ZWQgdGhlIGxlYWsgaW4gSElGIFNESU8gU0lNCisgKi8KKy8vI2RlZmluZSBfX0NDQ0lfR1BEX0xFQUtfREJHX18KKworLyohCisgKiAgQGJyaWVmIF9fU0RJT0NfUFVMTF9RX0VOSF9ETF9fCisgKiAgICAgICAgICAgMjAxMjEwMDEgZW5hYmxlIHRoaXMgdG8gZW5oYW5jZSB0aGUgaGlmIHBvbGwgREwgcXVldWUgcGVyZm9ybWFuY2UKKyAqICAgICAgICAgICAgICAgICAgICBEbyB0aGUgcG9sbCBxdWV1ZSBvbmx5IGlmIHRoZSBod28gZ3BkIGNvdW50ID4gMAorICovCisjZGVmaW5lIF9fU0RJT0NfUFVMTF9RX0VOSF9ETF9fCisKKy8qIQorICogIEBicmllZiBGU19DQ0NJX01BWF9CVUZfU0laRSBtYXggYnVmZmVyIHNpemUgb2YgQ0NDSV9GUworICogICAgICAgICBOb3RlOiB1c2VyIGNhbm5vdCBzZW5kL3JlcXVlc3QgYnVmZmVyIGxhcmdlciB0aGFuIHRoaXMgc2l6ZQorICogICAgICAgICAoQ0NDSV9IZWFkZXIpIChGU19PUF9JRCkgKEFSR0MpIChNQVhfQVJHX05VTSogTGVuKSAoTUFYX0FSR19OVU0qIHZhbHVlX2xlbikoRlNfQlVGRikKKyAqICAgICAgICAgKDE2KSAgICAgICAgICAoNCkgICAgICAgICg0KSAgICAoNio0KSAgICAgICAgICAgICAgKDYqNCkgICAgICAgICAgICAgICAgICAgKDE2S0IpCisgKiAgICAgICAgIFRhaWwgYnVmZmVyIGZvciA0QiBhbGlnbmVkOiAxMjgKKyAqLworI2RlZmluZSBGU19DQ0NJX01BWF9VU0VSX0JVRkYgICAgICAgICAgIDE2Mzg0CisjZGVmaW5lIEZTX0NDQ0lfUkVRX0JVRkZFUl9OVU0gICAgICAgICAgNSAvKiBzdXBwb3J0IDUgY29uY3VycmVudGx5IHJlcXVlc3QqLworI2RlZmluZSBGU19DQ0NJX01BWF9BUkdfTlVNCSAgICAgICAgICAgIDYgLyogcGFyYW1ldGVyIG51bWJlciAqLworI2RlZmluZSBGU19DQ0NJX01BWF9CVUZfU0laRSAgICAgICAgICAgICgxNis0KzQrRlNfQ0NDSV9NQVhfQVJHX05VTSo0KjIrRlNfQ0NDSV9NQVhfVVNFUl9CVUZGKzEyOCkKKyNkZWZpbmUgRlNfQ0NDSV9QT0xMSU5HX0JVRkZfU0laRSAgICAgICBRQk1fU0laRV9DQ0NJX0NPTU0KKworLyohCisgKiAgQGJyaWVmIEN1cnJlbnQgTVQ2MjgwIGRlc2lnbiBvbmx5IGRlZmluZXMKKyAqICAgICAgICAgICAgdGhlIG1heCBUeC9SeCBHUEQgc2l6ZSBhcyA0S0IgZm9yIG5vbi1uZXR3b3JrIHVzZXIKKyAqICAgICAgICAgICAgdGhlIG1heCBUeC9SeCBHUEQgc2l6ZSBhcyAyS0IgZm9yIG5ldHdvcmsgdXNlcgorICovCisjZGVmaW5lIENDQ0lfVUxfQlVGX1RZUEUgIFFCTV9UWVBFX0NDQ0lfQ09NTSAgIC8vIG5vbi1uZXR3b3JrIHVzZXIgUkdQRAorI2RlZmluZSBDQ0NJX0RMX0JVRl9UWVBFICBRQk1fVFlQRV9DQ0NJX0NPTU0gICAvLyBub24tbmV0d29yayB1c2VyIFRHUEQsIGNjY2lfd3JpdGUgd29uJ3QgZmx1c2ggZGF0YSBtdXN0IGJtY2ZnX2NhY2hlX2ludmFsaWQoS0FMX1RSVUUpCisjZGVmaW5lIENDQ0lfRExfU1lTTVNHX0JVRl9UWVBFIFFCTV9UWVBFX1RHUEQgIC8vIGZvciBRQk0gcG9vbCBzaHJpbmssIGNjY2lfd3JpdGUgc2hvdWxkIGZsdXNoIGRhdGEKKworI2RlZmluZSBDQ0NJX01UVV9TSVpFICgzNTg0LXNpemVvZihDQ0NJX0JVRkZfVCkpCisjZGVmaW5lIENDQ0lfSEVBREVSX1NJWkUgKHNpemVvZihDQ0NJX0JVRkZfVCkpCisKKy8qIQorICogIEBicmllZiBDQ0NJX1JFVFVSTlZBTF9UIENDQ0kgQVBJIHJldHVybiB2YWx1ZSBlbnVtCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIENDQ0lfU1VDQ0VTUyAgICAgICAgPSAwLAorICAgIENDQ0lfRkFJTCAgICAgICAgICAgPSAtMTAwMSwKKyAgICBDQ0NJX0lOX1VTRSAgICAgICAgID0gLTEwMDIsCisgICAgQ0NDSV9OT1RfT1dORVIgICAgICA9IC0xMDAzLAorICAgIENDQ0lfSU5WQUxJRF9QQVJBTSAgPSAtMTAwNCwKKyAgICBDQ0NJX05PX1BIWV9DSEFOTkVMID0gLTEwMDUsCisgICAgQ0NDSV9JTl9MSVNSICAgICAgICA9IC0xMDA2LAorICAgIENDQ0lfTk9fREFUQSAgICAgICAgPSAtMTAwNywKKyAgICBDQ0NJX05PVF9TVVBQT1JUICAgID0gLTEwMDgKK30gQ0NDSV9SRVRVUk5WQUxfVDsKKworLyohCisgKiAgQGJyaWVmIENDQ0lfTUFJTEJPWF9UIENDQ0kgbWFpbGJveCBjaGFubmVsIHN0cnVjdHVyZSBzdHJ1Y3QKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIG1hZ2ljOyAgIC8qIDB4RkZGRkZGRkYgKi8KKyAgICBrYWxfdWludDMyIGlkOworICAgIGthbF91aW50MzIgY2hhbm5lbDoxNjsKKyAgICBrYWxfdWludDMyIHNlcToxNTsKKyAgICBrYWxfdWludDMyIGFzc2VydF9iaXQ6MTsKKyAgICBrYWxfdWludDMyIHJlc2VydmVkOworfSBDQ0NJX01BSUxCT1hfVDsKKworLyohCisgKiAgQGJyaWVmIENDQ0lfU1RSRUFNX1QgQ0NDSSBzdHJlYW0gY2hhbm5lbCBzdHJ1Y3R1cmUgc3RydWN0CisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiBhZGRyOworICAgIGthbF91aW50MzIgbGVuOworICAgIGthbF91aW50MzIgY2hhbm5lbDoxNjsKKyAgICBrYWxfdWludDMyIHNlcToxNTsKKyAgICBrYWxfdWludDMyIGFzc2VydF9iaXQ6MTsKKyAgICBrYWxfdWludDMyIHJlc2VydmVkOworfSBDQ0NJX1NUUkVBTV9UOworCisvKiEKKyAqICBAYnJpZWYgQ0NDSV9CVUZGX1QgQ0NDSSBjaGFubmVsIGJ1ZmZlciBzdHJ1Y3R1cmUgc3RydWN0CisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiBkYXRhWzJdOyAvKiBkYXRhWzFdOiBsZW5ndGggaW5jbHVkaW5nIHRoZSBDQ0NJX0JVRkZfVCovCisgICAga2FsX3VpbnQzMiBjaGFubmVsOjE2OworICAgIGthbF91aW50MzIgc2VxOjE1OworICAgIGthbF91aW50MzIgYXNzZXJ0X2JpdDoxOworICAgIGthbF91aW50MzIgcmVzZXJ2ZWQ7Cit9IENDQ0lfQlVGRl9UOworCisvKiEKKyAqICBAYnJpZWYgQ0NDSV9VTklPTl9IRFJfVCBDQ0NJIGhlYWRlciB1bmlvbiB0byByZXNvbHZlIExUTyBpc3N1ZQorICovCit0eXBlZGVmIHVuaW9ueworICAgIENDQ0lfQlVGRl9UIGNjY2lfYnVmZjsKKyAgICBDQ0NJX1NUUkVBTV9UIGNjY2lfc3RyZWFtOworICAgIENDQ0lfTUFJTEJPWF9UIGNjY2lfbWFpbGJveDsKK30gQ0NDSV9VTklPTl9IRFJfVTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlrYWxfdWludDgJCXJlZl9jb3VudDsKKwlrYWxfdWludDE2CQltc2dfbGVuOworCWthbF91aW50MzIJCVcwOworfSBDQ0NJX0NPTU1PTl9JTE1fNEI7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJa2FsX3VpbnQ4CQlyZWZfY291bnQ7CisJa2FsX3VpbnQxNgkJbXNnX2xlbjsKKwlrYWxfdWludDE2CQlIVzA7Cit9IENDQ0lfQ09NTU9OX0lMTV8yQjsKKworLyohCisgKiAgQGJyaWVmIENDQ0lfU1lTTVNHX0RFU1RfRSBDQ0NJIFNZU01TRyBEZXN0aW5hdGlvbiBEZWZpbml0aW9uIGVudW0KKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgQ0NDSV9TWVNNU0dfREVTVF9NSU4gICAgICAgICA9IDAsCisgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCAgICAgICAgICA9IENDQ0lfU1lTTVNHX0RFU1RfTUlOLAorICAgIENDQ0lfU1lTTVNHX0RFU1RfRUFQICAgICAgICAgPSAxLAorICAgIENDQ0lfU1lTTVNHX0RFU1RfTk9UX1NVUFBPUlQgPSAyLAorICAgIENDQ0lfU1lTTVNHX0RFU1RfTUFYLAorfSBDQ0NJX1NZU01TR19ERVNUX0U7CisKKyN1bmRlZglYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYKKyNkZWZpbmUJWF9DQ0NJX1NZU01TR1NWQ19DT05GKG1TR05PLCBtT0RFLCBpRCwgZGVzdCkJbVNHTk8sCisvKiEKKyAqICBAYnJpZWYgIENPTlRST0xfQ0hBTk5FTF9NU0cKKyAqICAgICAgICAgICAgIENDQ0kgTWVzc2FnZSBJRCBQYXNzaW5nIFRocm91Z2ggQ09OVFJPTF9DSEFOTkVMIGFuZCBTWVNURU1fQ0hBTk5FTAorICogICAgICAgICAgICAgTk9USUNFOiBOZWdvdGlhdGlvbnMgV2l0aCBBUCBPd25lciBCZWZvcmUgTW9kaWZpY2F0aW9uCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIENDTVNHX0lEX1NUQVJUX0JPT1QgICAgICAgID0gMHgwMDAwMDAwMCwKKyAgICBDQ01TR19JRF9OT1JNQUxfQk9PVF9SRUFEWSA9IDB4MDAwMDAwMDEsCisgICAgQ0NNU0dfSURfTUVUQV9CT09UX1JFQURZICAgPSAweDAwMDAwMDAyLAorICAgIENDTVNHX0lEX1JFU0VUICAgICAgICAgICAgID0gMHgwMDAwMDAwMywKKyAgICBDQ01TR19JRF9FWENFUFRJT05fQ0hFQ0sgICA9IDB4MDAwMDAwMDQsCisgICAgQ0NNU0dfSURfRFJWX1ZFUlNJT05fRVJSICAgPSAweDAwMDAwMDA1LAorICAgIENDTVNHX0lEX0VYQ0VQVElPTl9SRUNfT0sgID0gMHgwMDAwMDAwNiwKKyAgICBDQ01TR19JRF9FWENFUFRJT05fUEFTUyAgICA9IDB4MDAwMDAwMDgsCisgICAgQ0NNU0dfSURfUE9SVF9TRVRUSU5HICAgICAgPSAweDAwMDAwMDA5LAorICAgIC8qIFN5c3RlbSBDaGFubmVsICovCisgICAgQ0NNU0dfSURfTURfTDRfTU9EICAgICAgICAgPSAweDAwMDAwMDBFLC8vYWRkIGZvciBSSUwgKEFQIHRhc2spIGFuZCBMNEMgKE1EIHRhc2spIGNvbW11bmljYXRpb24gbWVzc2FnZQorICAgIENDTVNHX0lEX01EX0w0X01BWF9UWF9QV1JfUkVEX1JFUSA9IDB4MDAwMDAwMEYsCisKKyAgICBDQ01TR19JRF9NRF9MRUdBQ1lfRU5EICAgICA9IDB4MDAwMDAwRkYsCisgICAgQ0NNU0dfSURfU1lTTVNHU1ZDX01BU0sgICAgPSAweDAwMDAwMTAwLAorICAgIENDTVNHX0lEX1NZU01TR1NWQ19TVEFSVCAgID0gMHgwMDAwMDEwMCwKKyAgICBDQ01TR19JRF9TWVNNU0dTVkNfRFVNTVkgICA9IDB4MDAwMDAwRkYsCisgICAgLy8tIHNlY3Rpb24gMHgxMDAgfiAweDFGRiA6IHJlc2VydmVkIGZvciBzeXN0ZW0gbWVzc2FnZSBzZXJ2aWNlIHVzZWQKKyAgICAjaW5jbHVkZSAiY2NjaV9zeXNtc2dzdmNfY29uZi5oIgorCisgICAgQ0NNU0dfSURfU1lTTVNHU1ZDX0VORCwKKworICAgIENDTVNHX0lEX01EX1dEVF9GTEFHICAgICAgID0gMHgwMDAwMTAwMCwgLy8tIGZvciBNVDY1NzcvTVQ2NTg5LCBBUCBjYW5ub3QgcmVjZWl2ZSBNRCBXRFQgaW50ZXJydXB0IGlzc3VlLiBrMiBtZDIgNjU4OSwgZm9yIHJlc29sdmluZyB3ZHQgYnVpbGQgZXJyb3IKKworfUNPTlRST0xfQ0hBTk5FTF9NU0c7CisjdW5kZWYJWF9DQ0NJX1NZU01TR1NWQ19DT05GCisKK3R5cGVkZWYgc3RydWN0IE1JU0NfSU5GT19FTEVNRU5UX1QKK3sKKyAgICBrYWxfdWludDMyICAgRmVhdHVyZVs0XTsKK31NSVNDX0lORk9fRUxFTUVOVDsKKwordHlwZWRlZiBzdHJ1Y3QgTUlTQ19JTkZPX0RBVEFfVAoreworICAgIGthbF91aW50MzIgICBNaXNjUHJlZml4OyAgICAgICAgICAgIC8vICJNSVNDIgorCWthbF91aW50MzIgICBTdXBwb3J0TWFzazsKKwlrYWxfdWludDMyICAgSW5kZXg7CisJa2FsX3VpbnQzMiAgIE5leHQ7CisgICAgTUlTQ19JTkZPX0VMRU1FTlQgZWxlbWVudFsxNl07CisJa2FsX3VpbnQzMiAgIFJlc2VydmVbM107CisJa2FsX3VpbnQzMiAgIE1pc2NQb3N0Zml4OyAgICAgICAgICAvLyAiTUlTQyIKK31NSVNDX0lORk9fREFUQTsKKworLyohCisgKiAgQGJyaWVmIE1PREVNX1JVTlRJTUVfREFUQSBDQ0NJIE1EIHJ1bnRpbWUgZW51bQorICovCit0eXBlZGVmIHN0cnVjdCBNT0RFTV9SVU5USU1FX0RBVEFfVAoreworICAgIGthbF91aW50OCAgICBQcmVmaXhbNF07ICAgICAgICAgICAgLy8gIkNDSUYiIGZvciBjb21wYXRpYmxlIHRvIDYyODAKKyAgICBrYWxfdWludDggICAgUGxhdGZvcm1bOF07ICAgICAgICAgIC8vIEhhcmR3YXJlIFBsYXRmb3JtIFN0cmluZyBleDogIk1UNjUxNkUxIgorICAgIGthbF91aW50MzIgICBEcml2ZXJWZXJzaW9uOyAgICAgICAgLy8gMHgwMDAwMDkyOSBzaW5jZSBXMDkuMjkKKyAgICBrYWxfdWludDMyICAgQm9vdENoYW5uZWw7ICAgICAgICAgIC8vIENoYW5uZWwgdG8gQUNLIEFQIHdpdGggYm9vdCByZWFkeQorICAgIGthbF91aW50MzIgICBCb290aW5nU3RhcnRJRDsgICAgICAgLy8gTUQgaXMgYm9vdGluZy4gTk9STUFMX0JPT1RfSUQgb3IgTUVUQV9CT09UX0lEIG9yIGVhcmx5IGV4Y2VwdGlvbiBtZW1vcnkgZHVtcAorICAgIGthbF91aW50MzIgICBCb290QXR0cmlidXRlczsgICAgICAgLy8gQXR0cmlidXRlcyBwYXNzaW5nIGZyb20gQVAgdG8gTUQgQm9vdGluZworICAgIGthbF91aW50MzIgICBCb290UmVhZHlJRDsgICAgICAgICAgLy8gTUQgcmVzcG9uc2UgSUQgaWYgYm9vdCBzdWNjZXNzZnVsIGFuZCByZWFkeSAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYW5ub3QgZXF1YWwgdG8gQ0NNU0dfSURfRFJWX1ZFUlNJT05fRVJSCisgICAga2FsX3VpbnQzMiAgIEZpbGVTaGFyZU1lbUJhc2U7CisgICAga2FsX3VpbnQzMiAgIEZpbGVTaGFyZU1lbVNpemU7CisgICAga2FsX3VpbnQzMiAgIEV4Y2VTaGFyZU1lbUJhc2U7CisgICAga2FsX3VpbnQzMiAgIEV4Y2VTaGFyZU1lbVNpemU7ICAgICAvLyA1MTIgQnl0ZXMgUmVxdWlyZWQKKyAgICBrYWxfdWludDMyICAgQ0NJRlNoYXJlTWVtQmFzZTsKKyAgICBrYWxfdWludDMyICAgQ0NJRlNoYXJlTWVtU2l6ZTsgICAgIC8vIENDSUYgc2hhcmUgcXVldWUgc2l6ZQorICAgIGthbF91aW50MzIgICBESExTaGFyZU1lbUJhc2U7ICAvLyBGb3IgREhMCisgICAga2FsX3VpbnQzMiAgIERITFNoYXJlTWVtU2l6ZTsKKyAgICBrYWxfdWludDMyICAgTUQxTUQzU2hhcmVNZW1CYXNlOyAgLy8gRm9yIE1EMSBNRDMgc2hhcmUgbWVtb3J5CisgICAga2FsX3VpbnQzMiAgIE1EMU1EM1NoYXJlTWVtU2l6ZTsKKyAgICBrYWxfdWludDMyCSBDQ0lTTVNoYXJlTWVtQmFzZTsKKyAgICBrYWxfdWludDMyCSBDQ0lTTVNoYXJlTWVtU2l6ZTsKKyAgICBrYWxfdWludDMyCSBDQ0lTTUV4cHRTaGFyZU1lbUJhc2U7CisgICAga2FsX3VpbnQzMgkgQ0NJU01FeHB0U2hhcmVNZW1TaXplOworICAgIGthbF91aW50MzIgICBUb3RhbFNoYXJlTWVtQmFzZTsKKyAgICBrYWxfdWludDMyICAgVG90YWxTaGFyZU1lbVNpemU7CisgICAga2FsX3VpbnQzMiAgIENoZWNrU3VtOworICAgIGthbF91aW50OCAgICBQb3N0Zml4WzRdOyAgICAgICAgICAgLy8iQ0NJRiIgZm9yIGNvbXBhdGlibGUgdG8gNjI4MAorICAgIE1JU0NfSU5GT19EQVRBIE1pc2NJbmZvOworfU1PREVNX1JVTlRJTUVfREFUQTsKKworI2RlZmluZSBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9NQVggNjQKKyNpZiBkZWZpbmVkKF9fQ0NDSV9QUk9EVUNUX1RZUEVfUENJRV9USElOX01PREVNX18pIC8vUENJZSBpbnRlcmZhY2UKKyAgICAjZGVmaW5lIENDQ0lfUlVOVElNRV9GRUFUVVJFX0lEX01BWCBFQVBfQ0NDSV9SVU5USU1FX0ZFQVRVUkVfSURfTUFYCisjZWxzZSAvL1NPQyBjb25maWd1cmF0aW9uCisgICAgI2RlZmluZSBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9JRF9NQVggQVBfQ0NDSV9SVU5USU1FX0ZFQVRVUkVfSURfTUFYCisjZW5kaWYKKworLy9ib290LXVwIENQVShzQVAvZUFQKQordHlwZWRlZiBlbnVteworICAgIENDQ0lfQk9PVF9VUF9IU19IT1NUX01JTiwKKyAgICBDQ0NJX0JPT1RfVVBfSFNfSE9TVF9BUCA9IENDQ0lfQk9PVF9VUF9IU19IT1NUX01JTiwKKyAgICAjaWYgZGVmaW5lZChfX0NDQ0lfUFJPRFVDVF9UWVBFX1BDSUVfVEhJTl9NT0RFTV9fKSAvL1BDSWUgVGhpbiBNb2RlbSBpbnRlcmZhY2UKKyAgICBDQ0NJX0JPT1RfVVBfSFNfSE9TVF9FQVAsCisgICAgI2VuZGlmCisgICAgQ0NDSV9CT09UX1VQX0hTX0hPU1RfTUFYLAorfSBDQ0NJX0JPT1RfVVBfSFNfSE9TVDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBDQ0NJX0hPU1RfSFNfRE9ORV9CUk9BRENBU1RfSURfTUlOID0gMCwKKyAgICBDQ0NJX0hPU1RfSFNfRE9ORV9CUk9BRENBU1RfSURfTEhJRiA9IENDQ0lfSE9TVF9IU19ET05FX0JST0FEQ0FTVF9JRF9NSU4sCisgICAgQ0NDSV9IT1NUX0hTX0RPTkVfQlJPQURDQVNUX0lEX0NDQ0lUVFksCisgICAgQ0NDSV9IT1NUX0hTX0RPTkVfQlJPQURDQVNUX0lEX01BWAorfSBDQ0NJX0hPU1RfSFNfRE9ORV9CUk9BRENBU1RfSURfRTsKKwordHlwZWRlZiBzdHJ1Y3QgQVBfUlVOVElNRV9EQVRBX1QKK3sKKyAgICBrYWxfdWludDggICAgUHJlZml4WzRdOyAgICAgICAgICAgIC8vICJJQ0NDIgorICAgIGthbF91aW50OCAgICBBUFF1ZXJ5RmVhdHVyZVtDQ0NJX1JVTlRJTUVfRkVBVFVSRV9NQVhdOworICAgIGthbF91aW50MzIgICBTSE1TdXBwb3J0OworICAgIGthbF91aW50MzIgICBBUFJ1bnRpbWVEYXRhQWRkcjsKKyAgICBrYWxfdWludDMyICAgQVBSdW50aW1lRGF0YVNpemU7CisgICAga2FsX3VpbnQzMiAgIE1EUnVudGltZURhdGFBZGRyOworICAgIGthbF91aW50MzIgICBNRFJ1bnRpbWVEYXRhU2l6ZTsKKyAgICBrYWxfdWludDMyICAgU2V0TURNUFVTdGFydEFkZHI7CisgICAga2FsX3VpbnQzMiAgIFNldE1ETVBVVG90YWxTaXplOworICAgIGthbF91aW50OCAgICBQb3N0Zml4WzRdOyAgICAgICAgICAgLy8iSUNDQyIKK31BUF9SVU5USU1FX0RBVEE7CisKK3R5cGVkZWYgc3RydWN0IEFQX1JVTlRJTUVfREFUQV9WMl9UCit7CisgICAga2FsX3VpbnQ4ICAgIFByZWZpeFs0XTsgICAgICAgICAgICAvLyAiSUNDQyIKKyAgICBrYWxfdWludDggICAgQVBRdWVyeUZlYXR1cmVbQ0NDSV9SVU5USU1FX0ZFQVRVUkVfTUFYXTsKKyAgICBrYWxfdWludDMyICAgU0hNU3VwcG9ydDsKKyAgICBrYWxfdWludDMyICAgQVBSdW50aW1lRGF0YUFkZHI7CisgICAga2FsX3VpbnQzMiAgIEFQUnVudGltZURhdGFTaXplOworICAgIGthbF91aW50MzIgICBNRFJ1bnRpbWVEYXRhQWRkcjsKKyAgICBrYWxfdWludDMyICAgTURSdW50aW1lRGF0YVNpemU7CisgICAga2FsX3VpbnQ4ICAgIE1QVVNldHRpbmdbNjRdOworICAgIGthbF91aW50OCAgICBQb3N0Zml4WzRdOyAgICAgICAgICAgLy8iSUNDQyIKK31BUF9SVU5USU1FX0RBVEFfVjI7CisKK3R5cGVkZWYgc3RydWN0IE1EX1JVTlRJTUVfREFUQV9UCit7CisgICAga2FsX3VpbnQ4ICAgIFByZWZpeFs0XTsgICAgICAgICAgICAvLyAiQ0NDSSIKKyAgICBrYWxfdWludDggICAgTURRdWVyeUZlYXR1cmVbQ0NDSV9SVU5USU1FX0ZFQVRVUkVfTUFYXTsKKyAgICBrYWxfdWludDggICAgUG9zdGZpeFs0XTsgICAgICAgICAgIC8vIkNDQ0kiCit9TURfUlVOVElNRV9EQVRBOworCisjdW5kZWYgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GCisjdW5kZWYgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9JRF9PTkxZCisjZGVmaW5lIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfQ09ORihfaWQsIF9zdXBwb3J0LCBfdmVyc2lvbikgX2lkLAorI2RlZmluZSBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX0lEX09OTFkoX2lkKSBfaWQsCit0eXBlZGVmIGVudW17CisgICAgI2luY2x1ZGUgImNjY2lfY29uZmlnX2ZlYXR1cmVfaWQuaCIKK30gQVBfQ0NDSV9SVU5USU1FX0ZFQVRVUkVfSUQ7CisjdW5kZWYgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9DT05GCisjdW5kZWYgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9JRF9PTkxZCisKK3R5cGVkZWYgZW51bXsKKyAgICAvLyBOZXcgaWQgYWRkIGhlcmUKKyNpZiAhZGVmaW5lZChfX01US19UQVJHRVRfXykgJiYgZGVmaW5lZChBVEVTVF9TWVNfRU5BQkxFKSAvLyBmb3IgVVQKKyAgICBNRF9DQ0NJX1JVTlRJTUVfVVRfVEVTVCwKKyNlbmRpZgorICAgIE1EX0NDQ0lfUlVOVElNRV9GRUFUVVJFX0lEX01BWCwKK30gTURfQ0NDSV9SVU5USU1FX0ZFQVRVUkVfSUQ7CisKK3R5cGVkZWYgZW51bXsKKyAgICBNRF9FQVBfQ0NDSV9SVU5USU1FX1BPUlRfU0VUVElORywKKyAgICAvLyBOZXcgaWQgYWRkIGhlcmUKKyNpZiAhZGVmaW5lZChfX01US19UQVJHRVRfXykgJiYgZGVmaW5lZChBVEVTVF9TWVNfRU5BQkxFKSAvLyBmb3IgVVQKKyAgICBNRF9FQVBfQ0NDSV9SVU5USU1FX1VUX1RFU1QsCisjZW5kaWYKKyAgICBNRF9FQVBfQ0NDSV9SVU5USU1FX0ZFQVRVUkVfSURfTUFYLAorfSBNRF9FQVBfQ0NDSV9SVU5USU1FX0ZFQVRVUkVfSUQ7CisKK3R5cGVkZWYgZW51bXsKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9OT1RfRVhJU1QgICAgICAgICAgICAgICA9IDAsCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfTk9UX1NVUFBPUlQgICAgICAgICAgICAgPSAxLAorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX01VU1RfU1VQUE9SVCAgICAgICAgICAgID0gMiwKKyAgICBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9PUFRJT05BTF9TVVBQT1JUICAgICAgICA9IDMsCisgICAgQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9CQUNLV0FSRF9DT01QQVQgPSA0LAorfUNDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggc3VwcG9ydF9tYXNrOjQ7CisgICAga2FsX3VpbnQ4IHZlcnNpb246NDsKK30gQ0NDSV9SVU5USU1FX0ZFQVRVUkVfU1VQUE9SVF9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBmZWF0dXJlX2lkOyAvLyBmb3IgZGVidWcgb25seQorICAgIENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfVCBzdXBwb3J0X2luZm87IC8vMUIKKyAgICBrYWxfdWludDggcmVzZXJ2ZWRbMl07CisgICAga2FsX3VpbnQzMiBkYXRhX2xlbmd0aDsKKyAgICBrYWxfdWludDMyIGRhdGFbMF07Cit9IENDQ0lfUlVOVElNRV9GRUFUVVJFX0ZPUk1BVF9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MzIgYWRkcjsKKyAgICBrYWxfdWludDMyIHNpemU7Cit9IENDQ0lfUlVOVElNRV9TSEFSRV9NRU1PUllfRk9STUFUX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgQ0NDSV9SVU5USU1FX1NIQVJFX01FTU9SWV9GT1JNQVRfVCBjdHJsX2J1ZmZyOworICAgIENDQ0lfUlVOVElNRV9TSEFSRV9NRU1PUllfRk9STUFUX1QgZGF0YV9idWZmcjsKK30gQ0NCX1NIQVJFX01FTU9SWV9GT1JNQVRfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBDQ0NJX1JVTlRJTUVfU0hBUkVfTUVNT1JZX0ZPUk1BVF9UIHVkY19idWY7CisgICAgQ0NDSV9SVU5USU1FX1NIQVJFX01FTU9SWV9GT1JNQVRfVCB1ZGNfdGJsOworfSBVRENfU0hBUkVfTUVNT1JZX0ZPUk1BVF9UOyAgICAgICAgICAgLy9ydW50aW1lIGRhdGEgIzMxLSBhZGQgZm9yIFVEQyBzaGFyZSBtZW1vcnkgKFVzZXI6IENhbW1pZSwgQ2hpLVllbikKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyICAgQm9vdENoYW5uZWw7ICAgICAgICAgIC8vIENoYW5uZWwgdG8gQUNLIEFQIHdpdGggYm9vdCByZWFkeQorICAgIGthbF91aW50MzIgICBCb290aW5nU3RhcnRJRDsgICAgICAgLy8gTUQgaXMgYm9vdGluZy4gTk9STUFMX0JPT1RfSUQgb3IgTUVUQV9CT09UX0lEIG9yIGVhcmx5IGV4Y2VwdGlvbiBtZW1vcnkgZHVtcAorICAgIGthbF91aW50MzIgICBCb290QXR0cmlidXRlczsgICAgICAgLy8gQXR0cmlidXRlcyBwYXNzaW5nIGZyb20gQVAgdG8gTUQgQm9vdGluZworICAgIGthbF91aW50MzIgICBCb290UmVhZHlJRDsgICAgICAgICAgLy8gTUQgcmVzcG9uc2UgSUQgaWYgYm9vdCBzdWNjZXNzZnVsIGFuZCByZWFkeSAsCit9IENDQ0lfUlVOVElNRV9CT09UX0lORk9fRk9STUFUX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgbWluaV9kdW1wX2ZsYWc7CisgICAga2FsX3VpbnQ4ICAgbWlkcl9kdW1wX2ZsYWc7CisJa2FsX3VpbnQxNiAgcmVzZXJ2ZWQ7Cit9IENDQ0lfUlVOVElNRV9ESExfTUlTQ19JTkZPX1Q7CisKK3R5cGVkZWYgZW51bXsKKyAgICBDQ0NJX0ZBX1VOS05PV05fRVJST1IgICAgICAgPSAweDAwMCwKKyAgICBDQ0NJX0ZBX01EX05PX1JFU1BPTlNFICAgICAgPSAweDEwMCwKKyAgICBDQ0NJX0ZBX0hNVV9EU1BfVElNRVJfQlJPS0VOPSAweDEwMSwKKyAgICBDQ0NJX0ZBX0hNVV9HUFRfVElNRVJfQlJPS0VOPSAweDEwMiwKKyAgICBDQ0NJX0ZBX01EX1NFUV9FUlJPUiAgICAgICAgPSAweDIwMCwKKyAgICBDQ0NJX0ZBX0FQX1NFUV9FUlJPUiAgICAgICAgPSAweDIwMSwKKyAgICBDQ0NJX0ZBX0FQX0RBVEFfUEFUSF9FUlJPUiAgPSAweDMwMCwKKyAgICBDQ0NJX0ZBX1VTUl9UUklHR0VSICAgICAgICAgPSAweDQwMCwKK31DQ0NJX0ZPUkNFX0FTU0VSVF9FUlJPUl9DT0RFOworCisvKiEKKyAqICBAYnJpZWYgY2NjaV9pb19yZXFfdHlwZV9lIFR5cGUgb2Ygb3BlcmF0aW9uIHRvIGZvciByZXF1ZXN0cyB0byBzdWJtaXQgdG8gSElGLgorICogIEBwYXJhbSBDQ0NJX0lPX1RYX05PX0ZMVVNIICAgICAgICAgICAgICAgICAgVHJhbnNtaXQgb3BlcmF0aW9uIHdpdGhvdXQgR1BEIGNoZWNrc3VtIGNhbGN1YXRpb24gYW5kIGNhY2hlIGZsdXNoLgorICovCit0eXBlZGVmIGVudW0gX2NjY2lfaW9fcmVxX3R5cGUgeworICAgICBDQ0NJX0lPX1RYX05PX0ZMVVNIICAgICAgICA9IDB4MDAwMDAwMTAsCisgICAgIENDQ0lfSU9fVFlQRV9EVU1NWSAgICAgICAgID0gMHg3ZmZmZmZmZgorfSBjY2NpX2lvX3JlcV90eXBlX2U7CisKKy8qIQorICogIEBicmllZiBjY2NpX2lvX2V4dF9pbmZvX3QgQ29uZmlndXJhdGlvbnMgYXBwbHkgdG8gdGhlIHJlcXVlc3RzIHRvIHN1Ym1pdCB0byBISUYuCisgKiAgQHBhcmFtIHR5cGUgICAgICAgICAgICAgICBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2NjY2lfaW9fZXh0X2luZm8geworICAgICBjY2NpX2lvX3JlcV90eXBlX2UgICB0eXBlOworfSBjY2NpX2lvX2V4dF9pbmZvX3Q7CisKKy8qIQorICogIEBicmllZiBDQ0NJX1NUQVRFX1QgQ0NDSSBzdGF0dXMgZW51bQorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBDQ0NJX0lETEUgICAgICAgICAgID0gMHgwMCwKKyAgICBDQ0NJX0FDVElWRV9SRUFEICAgID0gMHgwMSwKKyAgICBDQ0NJX0FDVElWRV9XUklURSAgID0gMHgwMiwKKyAgICBDQ0NJX0FDVElWRV9JU1IgICAgID0gMHgwNAorfSBDQ0NJX1NUQVRFX1Q7CisKKworI2lmZGVmIF9fU0RJT0NfUFVMTF9RX0VOSF9ETF9fCisvKiEKKyAqICBAYnJpZWYgY2NjaV9pb19yZXF1ZXN0X3QgaXMgYSB0eXBlZGVmIG9mIHN0cnVjdCBfY2NjaV9pb19yZXF1ZXN0X3QKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2NjY2lfaW9fcmVxdWVzdF90IGNjY2lfaW9fcmVxdWVzdF90OworLyohCisgKiAgQGJyaWVmIHN0cnVjdCBfY2NjaV9pb19yZXF1ZXN0X3QgZGVzY3JpYmUgaW8gcmVxdWVzdCB1c2VkIHRvIGNvbW11bmljYXRlCisgKiAgICAgICAgIGJldHdlZW4gY2NjaV9zZGlvIG1vZHVsZXMKKyAqLworc3RydWN0IF9jY2NpX2lvX3JlcXVlc3RfdCB7CisgICAgLyohCisgICAgICogIEBicmllZiBuZXh0IGlvIHJlcXVlc3QKKyAgICAgKi8KKyAgICBjY2NpX2lvX3JlcXVlc3RfdCogICAgICBuZXh0X3JlcXVlc3Q7CisgICAgLyohCisgICAgICogIEBicmllZiBwb2ludGVyIHRvIGN1cnJlbnQgZ3BkIG9mIHRoaXMgaW8gcmVxdWVzdAorICAgICAqLworICAgIHFibV9ncGQqICAgICAgICAgICAgICAgIGZpcnN0X2dwZDsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIHBvaW50ZXIgdG8gbGFzdCBncGQgb2YgdGhpcyBpbyByZXF1ZXN0CisgICAgICovCisgICAgcWJtX2dwZCogICAgICAgICAgICAgICAgbGFzdF9ncGQ7CisgICAgLyohCisgICAgICogIEBicmllZiBudW1iZXIgb2YgdGhlIGdwZCBpbiB0aGlzIGlvcgorICAgICAqLworICAgIGthbF9pbnQxNiAgICAgICAgICAgICAgIG51bV9ncGQ7CisgICAgLyohCisgICAgICogIEBicmllZiBoaWYgZm9yYmlkZGVuIHBhdHRlcm4gZm9yIGR1cGxpY2F0ZWQgR1BEIGRldGVjdGlvbgorICAgICAqLworICAgIGthbF91aW50MTYgICAgICAgICAgICAgIGhpZl9mb3JiaWRkZW47Cit9OworI2Vsc2UKKyNkZWZpbmUgY2NjaV9pb19yZXF1ZXN0X3QgaGlmX2lvX3JlcXVlc3RfdAorI2VuZGlmCisKK3R5cGVkZWYgZW51bSBfQ0NDSV9FWFBUX1NUQVRFCit7CisgICAgQ0NDSV9FWFBUX0lOVkFMSURfU1QsCisgICAgQ0NDSV9FWFBUX0lOSVRfQ0NDSVRUWV9ERVZfU1QsCisgICAgQ0NDSV9FWFBUX0lOSVRfU1QsCisgICAgQ0NDSV9FWFBUX0NMRUFSX0NIX1NULAorICAgIENDQ0lfRVhQVF9IQU5EU0hBS0VfU1RBUlRfU1QsCisgICAgQ0NDSV9FWFBUX0hBTkRTSEFLRV9UWF9TVEFSVF9TVCwKKyAgICBDQ0NJX0VYUFRfSEFORFNIQUtFX1RYX0RPTkVfU1QsCisgICAgQ0NDSV9FWFBUX0hBTkRTSEFLRV9SWF9TVEFSVF9TVCwKKyAgICBDQ0NJX0VYUFRfSEFORFNIQUtFX1JYX0RPTkVfU1QsCisgICAgQ0NDSV9FWFBUX0hBTkRTSEFLRV9ET05FX1NULAorICAgIENDQ0lfRVhQVF9JTkZPX1BBU1NfUFJFX1NUQVJUX1NULAorICAgIENDQ0lfRVhQVF9JTkZPX1BBU1NfUFJFX0RPTkVfU1QsCisgICAgQ0NDSV9FWFBUX0lORk9fUEFTU0VEX1NUQVJUX1NULAorICAgIENDQ0lfRVhQVF9JTkZPX1BBU1NFRF9ET05FX1NULAorICAgIENDQ0lfRVhQVF9TVEFURV9NQVgKK30gQ0NDSV9FWFBUX1NUQVRFX0U7CisKK3R5cGVkZWYgZW51bSB7CisgICAgQ0NDSV9FWENFUF9EQkdfSFNfQ0NDSV9GU19XQUlUX1RJTUVfUE9MTElORyA9IDAsCisgICAgQ0NDSV9FWENFUF9EQkdfSFNfQ0NDSV9GU19XQUlUX1RJTUVfTk9STUFMX0NBUlJZLCAvLyB3YWl0IHRpbWUgaXMgZG91YmxlLCBIMzIgaXMgaGlnaCAzMiBiaXQgdmFsdWUKKyAgICBDQ0NJX0VYQ0VQX0RCR19IU19DQ0NJX0ZTX1dBSVRfVElNRV9OT1JNQUwsIC8vIHdhaXQgdGltZSBpcyBkb3VibGUsIEwzMiBpcyBsb3cgMzIgYml0IHZhbHVlCisgICAgQ0NDSV9FWENFUF9EQkdfSFNfQ0NDSV9GU19UUkFDRSwKKyAgICBDQ0NJX0VYQ0VQX0RCR19IU19DQ0NJX1JQQ19XQUlUX1RJTUVfUE9MTElORywKKyAgICBDQ0NJX0VYQ0VQX0RCR19IU19DQ0NJX1JQQ19XQUlUX1RJTUVfTk9STUFMX0NBUlJZLCAvLyB3YWl0IHRpbWUgaXMgZG91YmxlLCBIMzIgaXMgaGlnaCAzMiBiaXQgdmFsdWUKKyAgICBDQ0NJX0VYQ0VQX0RCR19IU19DQ0NJX1JQQ19XQUlUX1RJTUVfTk9STUFMLCAvLyB3YWl0IHRpbWUgaXMgZG91YmxlLCBMMzIgaXMgbG93IDMyIGJpdCB2YWx1ZQorICAgIENDQ0lfRVhDRVBfREJHX0hTX0NDQ0lfUlBDX1RSQUNFLAorICAgIENDQ0lfRVhDRVBfREJHX0hTX0JPT1RUUkNfV0FJVF9USU1FLAorICAgIENDQ0lfRVhDRVBfREJHX0hTX0NDQ0lfREVCVUdfQ0hBTk5FTCwKKyAgICBDQ0NJX0VYQ0VQX0RCR19IU19DQ0NJX0RFQlVHX0NVUlJFTlRfU0VRX05VTSwKKyAgICBDQ0NJX0VYQ0VQX0RCR19IU19DQ0NJX0RFQlVHX0VYUEVDVEVEX1NFUV9OVU0sCisgICAgQ0NDSV9FWENFUF9EQkdfSFNfQ01VWF9HUERfUFJPRklMRV9OVU0sCisgICAgQ0NDSV9FWENFUF9EQkdfSFNfQ0NDSV9GU19FUlJPUl9MSU5FLAorICAgIENDQ0lfRVhDRVBfREJHX0hTX0NDQ0lfRlNfRVJST1JfUEFSQU0xLAorICAgIENDQ0lfRVhDRVBfREJHX0hTX0NDQ0lfRlNfRVJST1JfUEFSQU0yLAorICAgIENDQ0lfRVhDRVBfREJHX0hTX0NDQ0lfRlNfRVJST1JfUEFSQU0zLAorICAgIENDQ0lfRVhDRVBfREJHX0hTX0NDQ0lfQ0xETUFfVFhfQ0IsCisgICAgQ0NDSV9FWENFUF9EQkdfSFNfQ0NDSV9DTERNQV9SWF9DQiwKKyAgICBDQ0NJX0VYQ0VQX0RCR19TVEVQLAorICAgIENDQ0lfRVhDRVBfREJHX0VYUFRfSFNfQ0hBTk5FTCwKKyAgICBDQ0NJX0VYQ0VQX0RCR19FWFBUX0hTX1BPTExJTkdfVElNRU9VVCwKKyAgICBDQ0NJX0VYQ0VQX0RCR19IU19MT0dfTUFYLAorfSBDQ0NJX0VYQ0VQX0RCR19IU19JTkRFWDsKKworI3VuZGVmICAgICBYX0NDQ0lfRVhDRVBfTUVNT1JZX0NPTkYKKyNkZWZpbmUgICAgWF9DQ0NJX0VYQ0VQX01FTU9SWV9DT05GKHJlZ2lvbiwgbGVuZ3RoKSAgICByZWdpb24sCit0eXBlZGVmIGVudW0KK3sKKyNpbmNsdWRlICJjY2NpX2V4Y2VwX21lbW9yeV9yZWdpb24uaCIKKyAgICBDQ0NJX0VYQ0VQX01FTU9SWV9SRUdJT05fTUFYCit9IENDQ0lfRVhDRVBfTUVNT1JZX1JFR0lPTjsKKyN1bmRlZiAgICBYX0NDQ0lfRVhDRVBfTUVNT1JZX0NPTkYKKwordHlwZWRlZiBlbnVtIHsKKyAgICBDQ0NJX0VYQ0VQX01FTU9SWV9UWVBFX1NITSwKKyAgICBDQ0NJX0VYQ0VQX01FTU9SWV9UWVBFX1NUQVRJQ19CVUZGRVIsCisgICAgQ0NDSV9FWENFUF9NRU1PUllfVFlQRV9NQVgKK30gQ0NDSV9FWENFUF9NRU1PUllfVFlQRTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQ0NDSV9ERUJVR19HRVRfU1RBVFVTX01PRFVMRV9MMVRJTUUgPSAweDAsCisgICAgQ0NDSV9ERUJVR19HRVRfU1RBVFVTX01PRFVMRV9DQ0NJRlMsCisgICAgQ0NDSV9ERUJVR19HRVRfU1RBVFVTX01PRFVMRV9DQ0NJUlBDLAorICAgIENDQ0lfREVCVUdfR0VUX1NUQVRVU19NT0RVTEVfQ0NDSUlQQywKKyAgICBDQ0NJX0RFQlVHX0dFVF9TVEFUVVNfTU9EVUxFX0NDTU5JLAorICAgIENDQ0lfREVCVUdfR0VUX1NUQVRVU19NT0RVTEVfQ0NDSVRUWSwKKyAgICBDQ0NJX0RFQlVHX0dFVF9TVEFUVVNfTU9EVUxFX0NDQ0lJTVMsCisgICAgQ0NDSV9ERUJVR19HRVRfU1RBVFVTX01PRFVMRV9DQ0NJU0VRLAorICAgIENDQ0lfREVCVUdfR0VUX1NUQVRVU19NT0RVTEVfTUFYCit9IENDQ0lfREVCVUdfR0VUX1NUQVRVU19NT0RVTEU7CisKKy8qIENDQ0kgYm9vdCB1cCB0cmFjZSBzdGVwICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBDQ0NJX0JPT1RfVVBfVFJBQ0VfU1RBUlQgPSAweDIwMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBhbGlnbiB3aXRoIFNTCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hXX0lOSVRfRU5URVIgPSBDQ0NJX0JPT1RfVVBfVFJBQ0VfU1RBUlQsIC8vIDB4MjAwCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hXX0lOSVRfTEVBVkUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjAxCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8xX0VOVEVSLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjAyCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8xX1NUQVJUX1RYLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjAzCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8xX1RYX1RJTUVPVVQsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjA0CisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8xX1NUQVJUX1JYLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjA1CisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8xX1JYX1RJTUVPVVQsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjA2CisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8xX1RSQU5TTUlTU0lPTl9ET05FLCAgICAgICAgICAgICAgICAgIC8vIDB4MjA3CisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8xX0xFQVZFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjA4CisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8yX0VOVEVSLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjA5CisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8yX1NUQVJUX1RYLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjBhCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8yX1RYX1RJTUVPVVQsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjBiCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8yX1NUQVJUX1JYLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjBjCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8yX1JYX1RJTUVPVVQsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjBkCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8yX1RSQU5TTUlTU0lPTl9ET05FLCAgICAgICAgICAgICAgICAgIC8vIDB4MjBlCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8yX0xFQVZFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjBmCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hXX0lOSVQyX0VOVEVSLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjEwCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hXX0lOSVQyX0xFQVZFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjExCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMl8xX0VOVEVSLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjEyCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMl8xX1NUQVJUX1RYLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjEzCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMl8xX1RYX1RJTUVPVVQsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjE0CisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMl8xX1RSQU5TTUlTU0lPTl9ET05FLCAgICAgICAgICAgICAgICAgIC8vIDB4MjE1CisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMl8xX0xFQVZFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjE2CisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMl8yX0VOVEVSLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjE3CisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMl8yX1NUQVJUX1RYLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjE4CisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMl8yX1RYX1RJTUVPVVQsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjE5CisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMl8yX1RSQU5TTUlTU0lPTl9ET05FLCAgICAgICAgICAgICAgICAgIC8vIDB4MjFhCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMl8yX0xFQVZFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjFiCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMV8yX1NLSVAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjFjCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX0hTMl8yX1NLSVAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4MjFkCisgICAgQ0NDSV9CT09UX1VQX1RSQUNFX01BWCA9IDB4MkZGLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYWxpZ24gd2l0aCBTUworfSBDQ0NJX0JPT1RfVVBfVFJBQ0VfU1RFUDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQVBfQ0NDSV9SVU5USU1FX0RBVEFfVkVSU0lPTl9VTktOT1dOID0gMCwKKyAgICBBUF9DQ0NJX1JVTlRJTUVfREFUQV9WRVJTSU9OX09MRCwKKyAgICBBUF9DQ0NJX1JVTlRJTUVfREFUQV9WRVJTSU9OX05FV19WMSwKKyAgICBBUF9DQ0NJX1JVTlRJTUVfREFUQV9WRVJTSU9OX05FV19WMiwKKyAgICBBUF9DQ0NJX1JVTlRJTUVfREFUQV9WRVJTSU9OX05FV19WMl9XSVRIT1VUX1NITSwKK30gQVBfQ0NDSV9SVU5USU1FX0RBVEFfVkVSU0lPTjsKKworLyohCisgKiAgQGJyaWVmIENDQ0lfSU5JVF9NQUlMQk9YIGluaXRpYWxpemUgYSBDQ0NJIG1haWxib3ggYnVmZmVyCisgKi8KKyNkZWZpbmUgQ0NDSV9JTklUX01BSUxCT1goYnVmZiwgbWFpbGJveF9pZCkgXAorICAgICAgICBkbyB7ICAgIFwKKyAgICAgICAgICAgICgoQ0NDSV9NQUlMQk9YX1QgKikoYnVmZikpLT5tYWdpYyA9IDB4RkZGRkZGRkY7IFwKKyAgICAgICAgICAgICgoQ0NDSV9NQUlMQk9YX1QgKikoYnVmZikpLT5pZCA9IChtYWlsYm94X2lkKTsgIFwKKyAgICAgICAgICAgIChidWZmKS0+Y2hhbm5lbCA9IDA7ICBcCisgICAgICAgICAgICAoYnVmZiktPnJlc2VydmVkID0gMDsgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorCisvKiEKKyAqICBAYnJpZWYgQ0NDSV9JTklUX1NUUkVBTSBpbml0aWFsaXplIGEgQ0NDSSBzdHJlYW0gYnVmZmVyCisgKi8KKyNkZWZpbmUgQ0NDSV9JTklUX1NUUkVBTShidWZmLCBzdHJlYW1fYWRkciwgc3RyZWFtX2xlbikgXAorICAgICAgICBkbyB7ICAgIFwKKyAgICAgICAgICAgICgoQ0NDSV9TVFJFQU1fVCAqKShidWZmKSktPmFkZHIgPSAoc3RyZWFtX2FkZHIpOyBcCisgICAgICAgICAgICAoKENDQ0lfU1RSRUFNX1QgKikoYnVmZikpLT5sZW4gPSAoc3RyZWFtX2xlbik7ICBcCisgICAgICAgICAgICAoYnVmZiktPmNoYW5uZWwgPSAwOyAgXAorICAgICAgICAgICAgKGJ1ZmYpLT5yZXNlcnZlZCA9IDA7ICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKy8qIQorICogIEBicmllZiBDQ0NJX0lTX01BSUxCT1ggY2hlY2sgdGhlIENDQ0kgYnVmZmVyIHR5cGUKKyAqLworI2RlZmluZSBDQ0NJX0lTX01BSUxCT1goYnVmZikgICAoKCgoQ0NDSV9NQUlMQk9YX1QgKikoYnVmZikpLT5tYWdpYyA9PSAweEZGRkZGRkZGKT8gMTogMCkKKworLyohCisgKiAgQGJyaWVmIENDQ0lfTUFJTEJPWF9JRCBnZXQgdGhlIGlkIG9mIHRoZSBDQ0NJIG1haWxib3ggYnVmZmVyCisgKi8KKyNkZWZpbmUgQ0NDSV9NQUlMQk9YX0lEKGJ1ZmYpICAgKCgoQ0NDSV9NQUlMQk9YX1QgKikoYnVmZikpLT5pZCkKKworLyohCisgKiAgQGJyaWVmIENDQ0lfU1RSRUFNX0FERFIgZ2V0IHRoZSBhZGRyIG9mIHRoZSBDQ0NJIHN0cmVhbSBidWZmZXIKKyAqLworI2RlZmluZSBDQ0NJX1NUUkVBTV9BRERSKGJ1ZmYpICAgKCgoQ0NDSV9TVFJFQU1fVCAqKShidWZmKSktPmFkZHIpCisvKiEKKyAqICBAYnJpZWYgQ0NDSV9TVFJFQU1fTEVOIGdldCB0aGUgbGVuIG9mIHRoZSBDQ0NJIHN0cmVhbSBidWZmZXIKKyAqLworI2RlZmluZSBDQ0NJX1NUUkVBTV9MRU4oYnVmZikgICAoKChDQ0NJX1NUUkVBTV9UICopKGJ1ZmYpKS0+bGVuKQorLyohCisgKiAgQGJyaWVmIENDQ0lfU1RSRUFNX1NFVF9MRU4gZ2V0IHRoZSBsZW4gb2YgdGhlIENDQ0kgc3RyZWFtIGJ1ZmZlcgorICovCisjZGVmaW5lIENDQ0lfU1RSRUFNX1NFVF9MRU4oYnVmZiwgc3RyZWFtX2xlbikgXAorICAgICAgICBkbyB7ICAgIFwKKyAgICAgICAgICAgICgoQ0NDSV9TVFJFQU1fVCAqKShidWZmKSktPmxlbiA9IChzdHJlYW1fbGVuKTsgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKy8qIQorICogIEBicmllZiBDQ0NJX0dFVF9DSF9OTyBvYnRhaW4gdGhlIENDQ0kgY2hhbm5lbCBudW1iZXIKKyAqLworI2RlZmluZSBDQ0NJX0dFVF9DSF9OTyhidWZmKSAgICgoKENDQ0lfQlVGRl9UICopKGJ1ZmYpKS0+Y2hhbm5lbCkKKy8qIQorICogIEBicmllZiBDQ0NJX1NFVF9DSF9OTyBzZXQgdGhlIENDQ0kgY2hhbm5lbCBudW1iZXIKKyAqLworI2RlZmluZSBDQ0NJX1NFVF9DSF9OTyhidWZmLCBjaF9ubykgXAorICAgICAgICBkbyB7ICAgIFwKKyAgICAgICAgICAgICgoQ0NDSV9CVUZGX1QgKikoYnVmZikpLT5jaGFubmVsID0gY2hfbm87ICBcCisgICAgICAgIH0gd2hpbGUgKDApCisvKiEKKyAqICBAYnJpZWYgQ0NDSV9TRVRfUkVTRVJWRUQgc2V0IHRoZSBDQ0NJIHJlc2VydmVkCisgKi8KKyNkZWZpbmUgQ0NDSV9TRVRfUkVTRVJWRUQoYnVmZiwgcmVzZXJ2ZWRfZCkgXAorICAgICAgICBkbyB7ICAgIFwKKyAgICAgICAgICAgICgoQ0NDSV9CVUZGX1QgKikoYnVmZikpLT5yZXNlcnZlZCA9IHJlc2VydmVkX2Q7ICBcCisgICAgICAgIH0gd2hpbGUgKDApCisvKiEKKyAqICBAYnJpZWYgQ0NDSV9HRVRfUkVTRVJWRUQgZ2V0IHRoZSBDQ0NJIHJlc2VydmVkCisgKi8KKyNkZWZpbmUgQ0NDSV9HRVRfUkVTRVJWRUQoYnVmZikgKCgoQ0NDSV9CVUZGX1QgKikoYnVmZikpLT5yZXNlcnZlZCkKKworI2RlZmluZSBDQ0NJX01JU0NfSU5GT19OT1RfRVhJU1QgICAweDAwMDAwMDAwCisjZGVmaW5lIENDQ0lfTUlTQ19JTkZPX05PVF9TVVBQT1JUIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0NDSV9NSVNDX0lORk9fU1VQUE9SVCAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDQ0NJX01JU0NfSU5GT19QQVJUSUFMTFlfU1VQUE9SVCAweDAwMDAwMDAzCisKKyNkZWZpbmUgUEVFUl9JRF9NQVNLIDB4RjAwMCAvLyBlYWNoIHBlZXIgcmFuZ2UgMHgwfjB4RkYKKyNkZWZpbmUgUEVFUl9DSF9NQVNLIDB4MEZGRiAvLyBlYWNoIGNoYW5uZWwgcmFuZ2UgaXMgMHgwfjB4RkYKKworI2RlZmluZSBHRVRfUEVFUl9JRChfY2gpICgoX2NoICYgUEVFUl9JRF9NQVNLKSA+PiAxMiApCisjZGVmaW5lIEdFVF9QRUVSX0NIQU5ORUwoX2NoKSAoX2NoICYgUEVFUl9DSF9NQVNLKQorI2RlZmluZSBHRVRfVklSVFVBTF9DSEFOTkVMKF9wZWVyX2lkLCBfY2gpICgoX3BlZXJfaWQgPDwgMTIpIHwgX2NoKSAvLyBwZWVyX2lkICsgY2hhbm5lbAorCisjZGVmaW5lIEJPT1RfQVRUUl9JU19DTEVBTl9CT09UICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIENDQ0lfREVCVUdfQVNTRVJUX0JJVCAxCisjZGVmaW5lIENDQ0lfREVCVUdfTk9UX0FTU0VSVF9CSVQgMAorCit0eXBlZGVmIHZvaWQgKCpDQ0NJX1NZU01TR1NWQ19ISVNSX0NBTExCQUNLKShrYWxfdWludDMyIHBhcmFtKTsKKworLyohCisgKiAgQGJyaWVmIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSBmb3IgSElGIENDQ0kgY2FsbGJhY2sgZnVuY3Rpb246IGNhbGxlZCBieSBISUYgcHJvdmlkZWQgYnkgQ0NDSQorICogICAgICAgICAgICBUaGUgQ0NDSSB3aWxsIHJlZ2lzdGVycyBISUZfQ0NDSV9HUERfQ0FMTEJBQ0svSElGX0NDQ0lfQlVGRl9DQUxMQkFDSyBkZXBlbmRpbmcgb24gdGhlIEhJRyBJTyBtb2RlCisgKi8KK3R5cGVkZWYgdm9pZCAoKkhJRl9DQ0NJX0NBTExCQUNLKShrYWxfdWludDggcXVldWVfbm8sIHZvaWQqIHBpb3Jfb3JfcGJ1ZmYpOworLyohCisgKiAgQGJyaWVmIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSBmb3IgSElGIENDQ0kgY2FsbGJhY2sgZnVuY3Rpb246IGNhbGxlZCBieSBISUYgcHJvdmlkZWQgYnkgQ0NDSSBmb3IgQ0NDSV9DSF9ISUZJT19HUEQKKyAqLwordHlwZWRlZiB2b2lkICgqSElGX0NDQ0lfR1BEX0NBTExCQUNLKShrYWxfdWludDggcXVldWVfbm8sIGNjY2lfaW9fcmVxdWVzdF90KiBpb3IpOworLyohCisgKiAgQGJyaWVmIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSBmb3IgSElGIENDQ0kgY2FsbGJhY2sgZnVuY3Rpb246IGNhbGxlZCBieSBISUYgcHJvdmlkZWQgYnkgQ0NDSSBmb3IgQ0NDSV9DSF9ISUZJT19CVUZGCisgKi8KK3R5cGVkZWYgdm9pZCAoKkhJRl9DQ0NJX0JVRkZfQ0FMTEJBQ0spKGthbF91aW50OCBxdWV1ZV9ubywgQ0NDSV9CVUZGX1QqIHBidWZmKTsKKworCisvKiEKKyAqICBAYnJpZWYgZnVuY3Rpb24gcG9pbnRlciB0eXBlIGZvciBDQ0NJIGNhbGxiYWNrIGZ1bmN0aW9uOiBjYWxsZWQgYnkgQ0NDSSwgIHByb3ZpZGVkIGJ5IGRldmljZS91c2VyIHJlZ2lzdGVyZWQgYnkgY2NjaV9pbml0CisgKi8KK3R5cGVkZWYgdm9pZCAoKkNDQ0lfQ0FMTEJBQ0spKENDQ0lfQlVGRl9UICpidWZmKTsKKworLyohCisgKiAgQGJyaWVmIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSBmb3IgQ0NDSSBJT1IgY2FsbGJhY2sgZnVuY3Rpb246IGNhbGxlZCBieSBDQ0NJLCAgcHJvdmlkZWQgYnkgR1BEIGRldmljZSAoQ0NNTkkvVFRZQ09SRSkgcmVnaXN0ZXJlZCBieSBjY2NpX2luaXRfZ3BkaW9yCisgKi8KK3R5cGVkZWYgdm9pZCAoKkNDQ0lfSU9SQ0FMTEJBQ0sgKShDQ0NJX0NIQU5ORUxfVCBjaGFubmVsLCBjY2NpX2lvX3JlcXVlc3RfdCogaW9yKTsKKworLyohCisgKiAgQGJyaWVmIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSBmb3IgQ0NDSSBJVCByZWxvYWQgR1BELgorICovCit0eXBlZGVmIHZvaWQgKCpDQ0NJX1JHUERfUkVMT0FEX0NBTExCQUNLKSgpOworCisvKiEKKyAqICBAYnJpZWYgZnVuY3Rpb24gcG9pbnRlciB0eXBlIGZvciBDQ0NJIElUIHRvIGdlbmVyYXRlIERMIHRyYWZmaWMKKyAqLwordHlwZWRlZiB2b2lkICgqQ0NDSV9ETF9QS1RHRU5fQ0FMTEJBQ0spKCk7CisKKy8qIQorICogIEBicmllZiBmdW5jdGlvbiBwb2ludGVyIHR5cGUgZm9yIEhvc3QgSFMgZG9uZSBicm9hZGNhc3RpbmcKKyAqLwordHlwZWRlZiB2b2lkICgqQ0NDSV9IT1NUX0hTX0RPTkVfQ0FMTEJBQ0spKCk7CisKK3R5cGVkZWYga2FsX3VpbnQzMiAoKkNDQ0lfREVCVUdfR0VUX1NUQVRVU19DQUxMQkFDSykoa2FsX3VpbnQzMiAqd3JpdGVfcHRyLCBrYWxfdWludDMyIGF2YWlsYWJsZV9zaXplKTsKKworLyohCisqICBAYnJpZWYgQ0NDSSBjYWxsYmFjayB1c2VyJ3MgZnVuY3Rpb24gdG8gZ2V0IHJ1bnRpbWUgZGF0YSBhbmQgbGVuCisqICBxdWVyeV9zdXBwb3J0ICAgICAgICAgICAgLSBxdWVyeSBzdXBwb3J0IG1hc2sgJiB2ZXJzaW9uIG9mIHRoaXMgaWQKKyogIGRhdGEgICAgICAgICAgIAkgICAgICAgLSAgICB1c2VyIG5lZWRzIHRvIG1lbWNweSB0byBkYXRhLgorKiAgZGF0YV9sZW4gICAgICAgICAgLSAgICAgdGhlIGxlbmd0aCBvZiB1c2VycyBkYXRhCisgUmV0dXJuIHZhbHVlICAgICAgLSAgICAgdXNlcnMgc3VwcG9ydCBtYXNrICYgdmVyc2lvbiBvZiB0aGlzIGlkCisqLwordHlwZWRlZiBDQ0NJX1JVTlRJTUVfRkVBVFVSRV9TVVBQT1JUX1QgKCpDQ0NJX1JVTlRJTUVfREFUQV9RVUVSWV9SRUdfQ0IpKENDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfVCBxdWVyeV9zdXBwb3J0LCB2b2lkICogZGF0YSwga2FsX3VpbnQzMiAqIGRhdGFfbGVuKTsKKworI2lmIGRlZmluZWQoX19UQzAxX18pCitleHRlcm4ga2FsX3VpbnQ4IGxnZV9ib290X2luZm87Cit2b2lkIGZhY3RvcnlfY2FibGVfcWVtX2RldGVjdCh2b2lkKTsKKyNlbmRpZgorCisvKiEKKyAqICBAYnJpZWYgY2NjaV9zZW5kX21lc3NhZ2Ugc2VuZCBhIG1lc3NhZ2UgYW5kIHJlc2VydmVkIGJ5IGNjY2lfbWFpbGJveF93cml0ZV93aXRoX3Jlc2VydmVkCisgKiAgQHBhcmFtIG1lc3NhZ2U6ICBtYWlsYm94X2lkCisgKiAgQHBhcmFtIHJlc2VydmVkOiBjY2NpX2hlYWRlci0+cmVzZXJ2ZWQKKyAqICBAcmV0dXJuIENDQ0lfUkVUVVJOVkFMX1QKKyAqLwora2FsX2Jvb2wgY2NjaV9zZW5kX21lc3NhZ2Uoa2FsX3VpbnQzMiBtZXNzYWdlLCBrYWxfdWludDMyIHJlc2VydmVkKTsKK2thbF9ib29sIGNjY2lfc2VuZF9tZXNzYWdlX2J5X2lsbShrYWxfdWludDMyIG1lc3NhZ2UsIGthbF91aW50MzIgcmVzZXJ2ZWQpOwora2FsX2ludDMyIGNjY2lfc2VuZF9pbG0oaWxtX3N0cnVjdCogaWxtKTsKK2thbF9pbnQzMiBjY2NpX3JlZ2lzdGVyX3N5c21zZ3N2Y19jYWxsYmFjayhrYWxfdWludDMyIG1zZ25vLCBDQ0NJX1NZU01TR1NWQ19ISVNSX0NBTExCQUNLIGZ1bnApOwora2FsX3VpbnQzMiBjY2NpX2dldF9jdXJyZW50X3RpbWUoKTsKK2thbF91aW50MzIgY2NjaV9nZXRfZHVyYXRpb24oa2FsX3VpbnQzMiBzdGFydCwga2FsX3VpbnQzMiBlbmQpOworCitrYWxfaW50MzIgY2NjaV9taXNjX2RhdGFfZmVhdHVyZV9zdXBwb3J0KGthbF91aW50MzIgb3BfaWQsIGthbF91aW50MzIgbGVuLCB2b2lkICpwUmV0dXJuKTsKKy8qIEFQSSBmb3IgQ0NDSSBkZXZpY2UgdG8gb2J0YWluIHRoZSBzaGFyZSBtZW1vcnkgKi8KK01PREVNX1JVTlRJTUVfREFUQSogY2NjaV9nZXRfc2hhcmVfZGF0YSh2b2lkKTsKK2thbF91aW50OCogY2NjaV9nZXRfYXBfc2hhcmVfZGF0YShDQ0NJX0JPT1RfVVBfSFNfSE9TVCBoc19ob3N0KTsKK0NDQ0lfUlVOVElNRV9GRUFUVVJFX1NVUFBPUlRfVCBjY2NpX3J1bnRpbWVfZGF0YV9xdWVyeShBUF9DQ0NJX1JVTlRJTUVfRkVBVFVSRV9JRCBmZWF0dXJlX2lkLCB2b2lkICpkYXRhLCBrYWxfdWludDMyIHJlYWRfbGVuKTsKKy8qIQorICogIEBicmllZiBjY2NpX2NoZWNrX21heGNoYW5uZWwgY2hlY2tzIHRoZSBjaGFubmVsIGV4Y2VlZCB0aGUgbWF4IGNoYW5uZWwgb3Igbm90CisgKiAgQHBhcmFtIGNoYW5uZWw6IGNjY2kgY2hhbm5lbCBpbiBDQ0NJX0NIQU5ORUxfVCBlbnVtZXJhdGlvbgorICogIEByZXR1cm4gQ0NDSV9SRVRVUk5WQUxfVCBDQ0NJX1NVQ0NFU1MgbWVhbnMgdGhlIGNoYW5uZWwgaXMgdmFsaWQsIENDQ0lfSU5WQUxJRF9QQVJBTSBtZWFucyB0aGUgY2hhbm5lbCBpcyBpbnZhbGlkCisgKi8KK2thbF9pbnQzMiBjY2NpX2NoZWNrX21heGNoYW5uZWwoQ0NDSV9DSEFOTkVMX1QgY2hhbm5lbCk7CisKKyNkZWZpbmUgQ0NDSV9FUlJPUl9DT0RFX0VORCAweEZGRkYKKyNkZWZpbmUgQ0NDSV9FUlJPUl9DT0RFX0FTU0VSVChlcnJvcl9jb2RlLCAuLi4pIF9jY2NpX2Vycm9yX2NvZGVfYXNzZXJ0KGVycm9yX2NvZGUsICMjX19WQV9BUkdTX18sIENDQ0lfRVJST1JfQ09ERV9FTkQpCit2b2lkIF9jY2NpX2Vycm9yX2NvZGVfYXNzZXJ0KENDQ0lfRk9SQ0VfQVNTRVJUX0VSUk9SX0NPREUgZXJyb3JfY29kZSwgLi4uKTsKKworLyohCisgKiAgQGJyaWVmIGNjY2lfaW5pdDogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgYnVmZmVyIG1vZGUgbG9naWNhbCBjaGFubmVsLgorICogIEBwYXJhbSBjaGFubmVsOiAgbG9naWNhbCBjaGFubmVsCisgKiAgQHBhcmFtIGZ1bnA6ICBDQ0NJIGNhbGxiYWNrIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IHVzZXIKKyAqICBAcmV0dXJuIENDQ0kgZXJyb3IgY29kZSwgQ0NDSV9SRVRVUk5WQUxfVAorICovCitrYWxfaW50MzIgY2NjaV9pbml0KENDQ0lfQ0hBTk5FTF9UIGNoYW5uZWwsIENDQ0lfQ0FMTEJBQ0sgZnVucCk7CisvKiEKKyAqICBAYnJpZWYgY2NjaV9vd25lcl9pbml0OiBMZWdhY3kgTVQ2MjgwIENDQ0kgQVBJLCBjY2NpX2luaXQgdGhlIGNoYW5uZWwgd2l0aCB0YXNrIGlkIHNldC4gQnV0IHdlIGRvbid0IGNoZWNrIHRhc2sgaWQgaW4gTVQ2MjkwCisgKiAgQHBhcmFtIGNoYW5uZWw6ICBsb2dpY2FsIGNoYW5uZWwKKyAqICBAcGFyYW0ga2FsX3Rhc2tpZDogdGFzayBpZDsKKyAqICBAcGFyYW0gZnVucDogIENDQ0kgY2FsbGJhY2sgZnVuY3Rpb24gcHJvdmlkZWQgYnkgdXNlcgorICogIEByZXR1cm4gQ0NDSSBlcnJvciBjb2RlLCBDQ0NJX1JFVFVSTlZBTF9UCisgKi8KK2thbF9pbnQzMiBjY2NpX293bmVyX2luaXQoQ0NDSV9DSEFOTkVMX1QgY2hhbm5lbCwga2FsX3Rhc2tpZCB0YXNrLCBDQ0NJX0NBTExCQUNLIGZ1bnApOworLyohCisgKiAgQGJyaWVmIGNjY2lfaW5pdF9ncGRpb3I6IFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIEdQRCBtb2RlIGxvZ2ljYWwgY2hhbm5lbC4KKyAqICBAcGFyYW0gY2hhbm5lbDogIGxvZ2ljYWwgY2hhbm5lbAorICogIEBwYXJhbSBmdW5wOiAgQ0NDSSBjYWxsYmFjayBmdW5jdGlvbiBwcm92aWRlZCBieSB1c2VyCisgKiAgQHJldHVybiBDQ0NJIGVycm9yIGNvZGUsIENDQ0lfUkVUVVJOVkFMX1QKKyAqLwora2FsX2ludDMyIGNjY2lfaW5pdF9ncGRpb3IoQ0NDSV9DSEFOTkVMX1QgY2hhbm5lbCwgQ0NDSV9JT1JDQUxMQkFDSyBpb3JfZnVucCk7CisvKiEKKyAqICBAYnJpZWYgY2NjaV9kZWluaXQ6IFRoaXMgZnVuY3Rpb24gZGUtaW5pdGlhbGl6ZXMgdGhlIEJ1ZmZlciBhbmQgR1BEIG1vZGUgbG9naWNhbCBjaGFubmVsLgorICogIEBwYXJhbSBjaGFubmVsOiAgbG9naWNhbCBjaGFubmVsCisgKiAgQHJldHVybiBDQ0NJIGVycm9yIGNvZGUsIENDQ0lfUkVUVVJOVkFMX1QKKyAqLwora2FsX2ludDMyIGNjY2lfZGVpbml0KENDQ0lfQ0hBTk5FTF9UIGNoYW5uZWwpOworLyohCisgKiAgQGJyaWVmIGNjY2lfd3JpdGUgcHJvdmlkZXMgdGhlIGFwaSBmb3IgYnVmZmVyIG1vZGUgdXNlciB0byBzZW5kIERMIGJ1ZmZlciB0byBISUYgdHJhbnNtaXNzaW9uIEhXLgorICogICAgICAgICBJdCBhbGxvY2F0ZXMgT05FIFRHUEQgYnkgcWJtdF9hbGxvY19xX25vX3RhaWwsIGlmIGl0IGZhaWxzIHJldHVybnMgQ0NDSV9OT19QSFlfQ0hBTk5FTAorICogICAgICAgICBUaGUgYnVmZiB3aWxsIGJlIG1lbWNweSB0byBUR1BELT5CRCBhbmQgc3VibWl0IHRoZSBUR1BEIHRvIEhJRiBIVy4KKyAqICBAcGFyYW0gY2hhbm5lbDogIGxvZ2ljYWwgY2hhbm5lbAorICogIEBwYXJhbSBidWZmOiAgICAgcG9pbnRlciB0byBidWZmZXIgdG8gYmUgc2VudAorICogIEByZXR1cm4gQ0NDSV9SRVRVUk5WQUxfVAorICovCitrYWxfaW50MzIgY2NjaV93cml0ZShDQ0NJX0NIQU5ORUxfVCBjaGFubmVsLCBDQ0NJX0JVRkZfVCAqYnVmZik7CisvKiEKKyAqICBAYnJpZWYgY2NjaV93cml0ZV9ncGQgcHJvdmlkZXMgdGhlIGFwaSBmb3IgR1BEIG1vZGUgdXNlciB0byBzZW5kIERMIGJ1ZmZlciB0byBISUYgdHJhbnNtaXNzaW9uIEhXLgorICogICAgICAgICAgICBUaGVyZSdzIG5vIG1lbWNweSBpbiB0aGlzIG1vZGUgYnV0IGl0IHdpbGwgdHJhdmVyc2UgdGhlIEdQRCBjaGFpbiB0byBhZGQgdGhlIENDQ0kgaGVhZGVyLgorICogIEBwYXJhbSBjaGFubmVsOiAgbG9naWNhbCBjaGFubmVsCisgKiAgQHBhcmFtIGJ1ZmY6ICAgICBwb2ludGVyIHRvIGJ1ZmZlciB0byBiZSBzZW50CisgKiAgQHBhcmFtIHBleHRpbmZvOiBwb2ludGVyIHRvIHRoZSBjY2NpIGlvIHJlcXVlc3QgZXh0ZW5zaW9uIGluZm9ybWF0aW9uLCBleC5DQ0NJX0lPX1RYX05PX0ZMVVNICisgKiAgQHJldHVybiBDQ0NJX1JFVFVSTlZBTF9UCisgKi8KK2thbF9pbnQzMiBjY2NpX3dyaXRlX2dwZChDQ0NJX0NIQU5ORUxfVCBjaGFubmVsLCBjY2NpX2lvX3JlcXVlc3RfdCAqY2NjaV9ETF9pb3IsIGNjY2lfaW9fZXh0X2luZm9fdCogcGV4dGluZm8pOworCisvKiEKKyAqIEBmdW5jdGlvbiAgICAgICAgY2NjaV9wb2xsaW5nX3dyaXRlX2dwZAorICogQGJyaWVmICAgICAgICAgICBIb29rIHVwIFNESU8gcG9sbGluZyBtb2RlIEFQSQorICogICAgICAgICAgICAgICAgICBDdXJyZW50IFVzYWdlOiBOVlJBTS0tPkNDQ0lfRlMgZHVyaW5nIG1haW5wKCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9IYW5kc2hha2UKKyAqIEBwYXJhbSBjaGFubmVsICAgW0lOXSBjY2NpX2NoYW5uZWwKKyAqIEBwYXJhbSBwX2dwZCAgICAgW0lOXSBwb2ludGVyIHRvIHRoZSBncGQKKyAqIEBwYXJhbSBpc3R4ICAgICAgW0lOXSBLQUxfVFJVRTogRG93bmxpbmsvVHggS0FMX0ZBU0U6IFVwbGluay9SeAorICoKKyAqIEByZXR1cm4gICAgICAgICAgS0FMX1RSVUU6IFBBU1MKKyAqICAgICAgICAgICAgICAgICAgS0FMX0ZBTFNFOiBORworICovCitrYWxfaW50MzIgY2NjaV9wb2xsaW5nX2lvKENDQ0lfQ0hBTk5FTF9UIGNoYW5uZWwsIHFibV9ncGQgKnBfZ3BkLCBrYWxfYm9vbCBpc190eCk7CisKKy8qIQorICogIEBicmllZiBjY2NpX3VsYnVmZl9jYiBpcyB0aGUgTUQgc2lkZSBDQ0NJIFJ4IGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHJlZ2lzdGVyZWQgdG8gdGhlIGJ1ZmZlciBtb2RlIEhJRiBkcml2ZXIgYnkgSElGX2F0dGFjaAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nLiBDQ0NJX0NIX0hJRklPX0JVRkYKKyAqICBAcGFyYW0gcXVldWVfbm86ICBIVyBxdWV1ZSBpZCwgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHVzYiBjb3JlCisgKiAgQHBhcmFtIHBidWZmOiAgICAgICAgIHBvaW50ZXIgdG8gUnggYnVmZmVyIENDQ0kgaGVhZGVyCisgKiAgQHJldHVybiB2b2lkCisgKi8KK3ZvaWQgY2NjaV91bGJ1ZmZfY2IgKGthbF91aW50OCBxdWV1ZV9ubywgQ0NDSV9CVUZGX1QqIHBidWZmKTsKKy8qIQorICogIEBicmllZiBjY2NpX3VsaW9yX2NiIGlzIHRoZSBNRCBzaWRlIENDQ0kgUnggY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggcmVnaXN0ZXJlZCB0byB0aGUgR1BEIG1vZGUgSElGIGRyaXZlciBieSBISUZfYXR0YWNoCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmcuIENDQ0lfQ0hfSElGSU9fR1BECisgKiAgQHBhcmFtIHF1ZXVlX25vOiAgSFcgcXVldWUgaWQsIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCB1c2IgY29yZQorICogIEBwYXJhbSBpb19yZXF1ZXN0OiAgICAgICAgIHBvaW50ZXIgb2YgaW9yCisgKiAgQHJldHVybiB2b2lkCisgKi8KK3ZvaWQgY2NjaV91bGlvcl9jYiAoa2FsX3VpbnQ4IHF1ZXVlX25vLCBjY2NpX2lvX3JlcXVlc3RfdCogaW9yKTsKKworLyohCisgKiAgQGJyaWVmIGNjY2lfdWxpb3JfbmV0X2NiIGlzIHRoZSBNRCBzaWRlIENDQ0kgQ0NNTkkgUnggY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggcmVnaXN0ZXJlZCB0byB0aGUgR1BEIG1vZGUgSElGIGRyaXZlciBieSBISUZfYXR0YWNoCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmcuIENDQ0lfQ0hfSElGSU9fR1BECisgKiAgQHBhcmFtIHF1ZXVlX25vOiAgSFcgcXVldWUgaWQsIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCB1c2IgY29yZQorICogIEBwYXJhbSBpb19yZXF1ZXN0OiAgICAgICAgIHBvaW50ZXIgb2YgaW9yCisgKiAgQHJldHVybiB2b2lkCisgKi8KK3ZvaWQgY2NjaV91bGlvcl9uZXRfY2IgKGthbF91aW50OCBxdWV1ZV9ubywgY2NjaV9pb19yZXF1ZXN0X3QqIGlvX3JlcXVlc3QpOworCisjZGVmaW5lIGNjY2lfZGxpb3JfY2IgY2NjaV9kbGlvcl9hZ2dfY2IKKy8qIQorICogIEBicmllZiBjY2NpX2RsaW9yX2FnZ19jYiBpcyB0aGUgTUQgc2lkZSBDQ0NJIFR4IERPTkUgYWdncmVnYXRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZGVxIHRoZSBUR1BEIGUuZy4gREhMCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmxpa2UgY2NjaV91bGlvcl9jYiwgdGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBoYW5kbGUgdGhlIG5vbi1DQ0NJX0NIX1VTRVJfR1BEIHR5cGVzCisgKiAgQHBhcmFtIHF1ZXVlX25vOiAgSFcgcXVldWUgaWQsIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCB1c2IgY29yZQorICogIEBwYXJhbSBpb19yZXF1ZXN0OiAgcG9pbnRlciBvZiBpb3IKKyAqICBAcmV0dXJuIHZvaWQKKyAqLwordm9pZCBjY2NpX2RsaW9yX2FnZ19jYihrYWxfdWludDggcXVldWVfbm8sIGNjY2lfaW9fcmVxdWVzdF90KiBpb19yZXF1ZXN0KTsKKy8qIQorICogIEBicmllZiBjY2NpX2RsaW9yX3NpbmdsZV9jYiBpcyB0aGUgTUQgc2lkZSBDQ0NJIFR4IERPTkUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGRlcSB0aGUgVEdQRCBlLmcuIERITAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5saWtlIGNjY2lfdWxpb3JfY2IsIHRoaXMgZnVuY3Rpb24gZG9lcyBOT1QgaGFuZGxlIHRoZSBub24tQ0NDSV9DSF9VU0VSX0dQRCB0eXBlcworICogIEBwYXJhbSBxdWV1ZV9ubzogIEhXIHF1ZXVlIGlkLCBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggdXNiIGNvcmUKKyAqICBAcGFyYW0gaW9fcmVxdWVzdDogIHBvaW50ZXIgb2YgaW9yCisgKiAgQHJldHVybiB2b2lkCisgKi8KK3ZvaWQgY2NjaV9kbGlvcl9zaW5nbGVfY2Ioa2FsX3VpbnQ4IHF1ZXVlX25vLCBjY2NpX2lvX3JlcXVlc3RfdCogaW9fcmVxdWVzdCk7CisKKy8qIQorICogIEBicmllZiBjY2NpX21haWxib3hfd3JpdGUgZm9ybWF0cyBhIGxvY2FsIGJ1ZmZlciB0byBtYWlsYm94IGZvcm1hdCBhbmQgY2FsbCBjY2NpX3dyaXRlCisgKiAgQHBhcmFtIGNoYW5uZWw6ICBsb2dpY2FsIGNoYW5uZWwKKyAqICBAcGFyYW0gaWQ6ICAgICAgICAgIG1haWxib3ggaWQKKyAqICBAcmV0dXJuIENDQ0lfUkVUVVJOVkFMX1QKKyAqLwora2FsX2ludDMyIGNjY2lfbWFpbGJveF93cml0ZShDQ0NJX0NIQU5ORUxfVCBjaGFubmVsLCBrYWxfdWludDMyIGlkKTsKKy8qIQorICogIEBicmllZiBjY2NpX21haWxib3hfd3JpdGUgZm9ybWF0cyBhIGxvY2FsIGJ1ZmZlciB0byBtYWlsYm94IGZvcm1hdCBhbmQgY2FsbCBjY2NpX3dyaXRlCisgKiAgQHBhcmFtIGNoYW5uZWw6ICAgICBsb2dpY2FsIGNoYW5uZWwKKyAqICBAcGFyYW0gaWQ6ICAgICAgICAgICAgICBtYWlsYm94IGlkCisgKiAgQHBhcmFtIHJlc2VydmVkOiAgICBjY2NpX2hlYWRlci0+cmVzZXJ2ZWQKKyAqICBAcmV0dXJuIENDQ0lfUkVUVVJOVkFMX1QKKyAqLwora2FsX2ludDMyIGNjY2lfbWFpbGJveF93cml0ZV93aXRoX3Jlc2VydmVkKENDQ0lfQ0hBTk5FTF9UIGNoYW5uZWwsIGthbF91aW50MzIgaWQsIGthbF91aW50MzIgcmVzZXJ2ZWQpOworLyohCisgKiAgQGJyaWVmIGNjY2lfc3RyZWFtX3dyaXRlIGZvcm1hdHMgYSBsb2NhbCBidWZmZXIgdG8gc3RyZWFtIGZvcm1hdCBhbmQgY2FsbCBjY2NpX3dyaXRlCisgKiAgQHBhcmFtIGNoYW5uZWw6ICAgICAgICBsb2dpY2FsIGNoYW5uZWwKKyAqICBAcGFyYW0gYWRkcjogICAgICAgICAgICBzdGFydCBhZGRyZXNzIG9mIHRoZSB1c2VyIGJ1ZmZlcgorICogIEBwYXJhbSBsZW46ICAgICAgICAgICAgICBsZW5naHQgb2YgdGhlIHVzZXIgYnVmZmVyCisgKiAgQHJldHVybiBDQ0NJX1JFVFVSTlZBTF9UCisgKi8KK2thbF9pbnQzMiBjY2NpX3N0cmVhbV93cml0ZShDQ0NJX0NIQU5ORUxfVCBjaGFubmVsLCBrYWxfdWludDMyIGFkZHIsIGthbF91aW50MzIgbGVuKTsKKy8qIQorICogIEBicmllZiBjY2NpX3N0cmVhbV93cml0ZV93aXRoX3Jlc2VydmVkIGZvcm1hdHMgYSBsb2NhbCBidWZmZXIgdG8gc3RyZWFtIGZvcm1hdCBhbmQgY2FsbCBjY2NpX3dyaXRlCisgKiAgQHBhcmFtIGNoYW5uZWw6ICAgICAgICBsb2dpY2FsIGNoYW5uZWwKKyAqICBAcGFyYW0gYWRkcjogICAgICAgICAgICBzdGFydCBhZGRyZXNzIG9mIHRoZSB1c2VyIGJ1ZmZlcgorICogIEBwYXJhbSBsZW46ICAgICAgICAgICAgICBsZW5naHQgb2YgdGhlIHVzZXIgYnVmZmVyCisgKiAgQHBhcmFtIHJlc2VydmVkICAgICAgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIKKyAqICBAcmV0dXJuIENDQ0lfUkVUVVJOVkFMX1QKKyAqLwora2FsX2ludDMyIGNjY2lfc3RyZWFtX3dyaXRlX3dpdGhfcmVzZXJ2ZWQoQ0NDSV9DSEFOTkVMX1QgY2hhbm5lbCwga2FsX3VpbnQzMiBhZGRyLCBrYWxfdWludDMyIGxlbixrYWxfdWludDMyIHJlc2VydmVkKTsKKwordm9pZCBjY2NpX3V0X3R4X2RpcmVjdF91c2VyX2RsX2Fja19kYmcoQ0NDSV9CVUZGX1QgKmJ1ZmYpOwordm9pZCBsdGVfY2NjaV9od19pbml0KHZvaWQpOwordm9pZCBsdGVfY2NjaV9pbml0X2hhbmRzaGFrZV9waGFzZTEodm9pZCk7Cit2b2lkIGx0ZV9jY2NpX2hhbF9pbml0KHZvaWQpOwordm9pZCBsdGVfY2NjaV9pbml0X2hhbmRzaGFrZV9waGFzZTIoa2FsX3VpbnQxNiBfYm9vdF9tb2RlKTsKK3ZvaWQgbHRlX2NjY2lfaHdfaW5pdF9waGFzZTIodm9pZCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgQ0NDSSBleGNlcHRpb24gQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIHZvaWQgY2NjaV9leGNlcHRpb25faGFuZHNoYWtlCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIC4KKyoKKyogUEFSQU1FVEVSUworKiAgY2hhbm5lbCAgICAtICAgIAkJCWxvZ2ljYWwgY2hhbm5lbAorKiAgKgorKiBSRVRVUk5TCisqICBUaGUgYWRkcmVzcyBvZiB0aGUgc2hhcmUgbWVtb3J5IG9mIHRoZSBpbnB1dCBsb2dpY2FsIGNoYW5uZWwKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGNjY2lfZXhjZXB0aW9uX2hhbmRzaGFrZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIHZvaWQgY2NjaV9leGNlcHRpb25faW5mb19wYXNzZWQKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gLgorKgorKiBQQVJBTUVURVJTCisqICBjaGFubmVsICAgIC0gICAgCQkJbG9naWNhbCBjaGFubmVsCisqICAqCisqIFJFVFVSTlMKKyogIFRoZSBhZGRyZXNzIG9mIHRoZSBzaGFyZSBtZW1vcnkgb2YgdGhlIGlucHV0IGxvZ2ljYWwgY2hhbm5lbAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgY2NjaV9leGNlcHRpb25faW5mb19wYXNzZWQodm9pZCk7CisKK2thbF9ib29sIGNjY2lfcXVlcnlCb290QXR0cmlidXRlcyhrYWxfdWludDMyIG1hc2spOworCisvKj09PT09PT09PT09PT09PT09PT09RXhjZXB0aW9uIE1vZGUgQVBJcz09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitrYWxfYm9vbCBjY2NpX2V4Y2VwdF9pbml0X2htdShrYWxfdWludDMyIGRldl9tYXBwaW5nLCBrYWxfdWludDMyIGV4dF9kZXZpbmZvX2xlbiwga2FsX2NoYXIgKiBleHRfZGV2aW5mbyk7CitrYWxfaW50MzIgY2NjaV9leGNlcHRfaW5pdCgpOwora2FsX2ludDMyIGNjY2lfZXhjZXB0X2NsZWFyX2NoKGthbF91aW50MzIgY2NjaV9jaCk7CitrYWxfaW50MzIgY2NjaV9leGNlcHRfc2V0X2dwZChrYWxfdWludDMyIGV4cHRfY2gsIHZvaWQgKnBfZmlyc3RfZ3BkLCB2b2lkICpwX2xhc3RfZ3BkKTsKK2thbF9pbnQzMiBjY2NpX2V4Y2VwdF9wb2xsX2dwZChrYWxfdWludDMyIGV4cHRfY2gsIHZvaWQgKipwcF9maXJzdF9ncGQsIHZvaWQgKipwcF9sYXN0X2dwZCwga2FsX3VpbnQzMiAqZ3BkX251bSk7CitrYWxfaW50MzIgY2NjaV9leGNlcHRfaGlmX3N0KGthbF91aW50MzIgZXhwdF9kbF9jaCk7CitrYWxfaW50MzIgY2NjaV9leGNlcHRfaGlmX2lzcihrYWxfdWludDMyIGV4cHRfZGxfY2gpOworCitrYWxfYm9vbCBjY2NpdHR5X2Rldl9leHB0X2luaXQodm9pZCk7Cit2b2lkIGNjY2lfZnNfc3ZjX2V4cHRfaW5pdCh2b2lkKTsKK3ZvaWQgY2NjaV9nZXRfY2Npc21fc2htX2luZm8odm9pZCAqKnBfbWVtYmFzZSxrYWxfdWludDMyICpwX21lbXNpemUpOwordm9pZCBjY2NpX2dldF9jY2lzbV9leHB0X3NobV9pbmZvKHZvaWQgKipwX21lbWJhc2Usa2FsX3VpbnQzMiAqcF9tZW1zaXplKTsKK3ZvaWQgY2NjaV9nZXRfY2Npc21fc2NwX3NobV9pbmZvKHZvaWQgKipwX21lbWJhc2Usa2FsX3VpbnQzMiAqcF9tZW1zaXplKTsKK3ZvaWQgY2NjaV9nZXRfZXhfc2htX2luZm8odm9pZCAqKnBfbWVtYmFzZSwga2FsX3VpbnQzMiAqcF9tZW1zaXplKTsKK3ZvaWQgY2NjaV9nZXRfbWQxbWQzX3NobV9pbmZvKHZvaWQgKipwX21lbWJhc2UsIGthbF91aW50MzIgKnBfbWVtc2l6ZSk7Cit2b2lkIGNjY2lfZ2V0X2RobF9zaG1faW5mbyh2b2lkICoqcF9tZW1iYXNlLCBrYWxfdWludDMyICpwX21lbXNpemUpOwordm9pZCBjY2NpX2dldF9kaGxfcmF3X3NobV9pbmZvKHZvaWQgKipwX21lbWJhc2UsIGthbF91aW50MzIgKnBfbWVtc2l6ZSk7Cit2b2lkIGNjY2lfZ2V0X2NjaWZfc2htX2luZm8odm9pZCAqKnBfbWVtYmFzZSwga2FsX3VpbnQzMiAqcF9tZW1zaXplKTsKK3ZvaWQgY2NjaV9nZXRfY2NiX2RhdGFfc2htX2luZm8odm9pZCAqKnBfbWVtYmFzZSwga2FsX3VpbnQzMiAqcF9tZW1zaXplKTsKK3ZvaWQgY2NjaV9nZXRfY2NiX2N0cmxfc2htX2luZm8odm9pZCAqKnBfbWVtYmFzZSwga2FsX3VpbnQzMiAqcF9tZW1zaXplKTsKK3ZvaWQgY2NjaV9nZXRfZGlydF9zaG1faW5mbyh2b2lkICoqcF9tZW1iYXNlLCBrYWxfdWludDMyICpwX21lbXNpemUpOwordm9pZCBjY2NpX2dldF9kaXJ0Ml9zaG1faW5mbyh2b2lkICoqcF9tZW1iYXNlLCBrYWxfdWludDMyICpwX21lbXNpemUpOworCisKK2thbF9ib29sIGNjY2lfc2V0X2FwX3J1bnRpbWVfZGF0YShDQ0NJX0JPT1RfVVBfSFNfSE9TVCBoc19ob3N0LCB2b2lkICpzdGFydF9hZGRyLCBrYWxfdWludDMyIHRvdGFsX3NpemUpOwora2FsX3VpbnQzMiBjY2NpX3J1bnRpbWVfZGF0YV9yZWdpc3RyYXRpb24oQ0NDSV9CT09UX1VQX0hTX0hPU1QgaHNfaG9zdCwga2FsX2ludDMyIGZlYXR1cmVfaWQsIENDQ0lfUlVOVElNRV9EQVRBX1FVRVJZX1JFR19DQiBjYik7CisKK2thbF9pbnQzMiBjY2NpX3dyaXRlX2V4Y2VwdF9zaGFyZV9tZW1vcnkoKTsKKworLyo9PT09PT09PT09PT09PT09PT09RkFLRSBBUEk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBjY2NpX2luaXRfaGFuZHNoYWtlX3BoYXNlMSguLi4pCisjZGVmaW5lIGNjY2lfaW5pdF9oYW5kc2hha2VfcGhhc2UyKC4uLikKKyNkZWZpbmUgY2NjaV9oYWxfaW5pdCguLi4pCisKK2thbF9pbnQzMiBjY2NpX2V4Y2VwX2RiZ19sb2dnaW5nX0luSFMyKGthbF91aW50MzIgaW5kZXgsIHZvaWQqIGFkZHIpOworCisvLyNkZWZpbmUgX19TUF9CT09UVFJDX0VOQUJMRV9fCisjaWYgZGVmaW5lZChfX1NQX0JPT1RUUkNfRU5BQkxFX18pCitleHRlcm4gdm9pZCBjY2NpX2Jvb3R0cmNfc2VuZF9sb2coa2FsX3VpbnQzMiBpbmRleCwga2FsX3VpbnQzMiB2YWx1ZSk7CisjZW5kaWYKKwora2FsX2ludDMyIGNjY2lfZXhjZXBfcXVlcnlfc2htKENDQ0lfRVhDRVBfTUVNT1JZX1JFR0lPTiByZWdpb24sIGthbF91aW50MzIgKmFkZHJlc3MsIGthbF91aW50MzIgKnNpemUsIENDQ0lfRVhDRVBfTUVNT1JZX1RZUEUgKm1lbV90eXBlKTsKK2thbF9pbnQzMiBjY2NpX2V4Y2VwX2luaXRfc2htKENDQ0lfRVhDRVBfTUVNT1JZX1RZUEUgbWVtX3R5cGUsIGthbF91aW50MzIgYWRkciwga2FsX3VpbnQzMiBzaXplKTsKK2thbF91aW50MzIgY2NjaV9leGNlcF9zaG1fZ2V0X3RvdGFsX3NpemUoKTsKKwordm9pZCBjY2NpX0NhbGN1bGF0ZVNoYXJlTWVtKGthbF91aW50MzIgKnN0YXJ0X2FkZHIsIGthbF91aW50MzIgKmVuZF9hZGRyICwga2FsX3VpbnQzMiAqc2l6ZSk7CisKK2thbF9pbnQzMiBjY2NpX2RlYnVnX2FkZF9zZXEoQ0NDSV9CVUZGX1QgKmJ1ZnAsIGthbF91aW50MzIgYXNzZXJ0X2JpdCk7CitrYWxfaW50MzIgY2NjaV9kZWJ1Z19jaGVja19zZXEoQ0NDSV9CVUZGX1QgKmJ1ZnApOwordm9pZCBjY2NpX2RlYnVnX3Jlc2V0X3NlcV9kYXRhKCk7Cit2b2lkIGNjY2lfZGVidWdfcmVzZXRfc2VxX2RhdGFfcGVlcihrYWxfdWludDMyIHBlZXJfaWQpOwora2FsX3VpbnQzMiBjY2NpX2RlYnVnX2dldF9zdGF0dXNfcmVnaXN0ZXIoQ0NDSV9ERUJVR19HRVRfU1RBVFVTX01PRFVMRSBtb2R1bGVfaWQsIENDQ0lfREVCVUdfR0VUX1NUQVRVU19DQUxMQkFDSyBmdW5wKTsKK2thbF91aW50MzIgY2NjaV9kZWJ1Z19nZXRfc3RhdHVzX3dvcmtlcigpOwordm9pZCBjY2NpX2RlYnVnX3NldF9mZWF0dXJlKCk7Cit2b2lkIGNjY2lfd3JpdGVfYm9vdF91cF90cmFjZShDQ0NJX0JPT1RfVVBfVFJBQ0VfU1RFUCBzdGVwKTsKK2thbF9ib29sIGNjY2lfY2hlY2tfc2htX2FkZF9hbmRfc2l6ZShrYWxfdWludDMyKiBhZGRyZXNzLCBrYWxfdWludDMyIHNpemUpOwordm9pZCBjY2NpX3NldF9zaGFyZWRfbXB1KHZvaWQpOwora2FsX3VpbnQzMiBjY2NpX2dldF9tZW1kdW1wX3RpbWVvdXQoKTsKK2thbF91aW50MzIgY2NjaV9nZXRfZGVidWdfYXNzZXJ0X2JpdChrYWxfdWludDMyIGNoYW5uZWwpOworCisjaWYgZGVmaW5lZCAoX19DQ0NJX1BFUkZfUFJPRklMSU5HX18pCisjaW5jbHVkZSAiY3B1LmgiCisvKgorICogQmVmb3JlIHlvdSBzdGFydCB0byBjb2xsZWMgZGF0YSAsIHBsZWFzZSBmb2xsb3cgdGhlIGZvbGxvd2luZyBzdGVwCisgKiBzdGVwIDEuIGNoYW5nZSBITVVfR1BUSU1FUl9QUklPRElDX0lOVEVSVkFMIHRvIDEwMDAwMFUgaW4gSE1VLiB0byBtYWtlIHN1cmUgdGhlIHByb2Nlc3Mgd29uJ3QgYmUgaW50ZXJydXB0ZWQKKyAqIHN0ZXAgMi4gZW5hYmxlIF9fQ0NDSV9MQl9JVF9fIGluIGhpZl9jY2NpLm1haywgYXMgd2UgbmVlZCB0byB1c2VyIHRoZSBJVCBjb2RlLgorICogc3RlcCAzLiBmb3IgQ0NDSV9DQ01OSV9ETF9QRVJGIHBsZWFzZSBhZGQgbW9uaXRvciB1cGNtX2RsdnJfZGxfc2R1CisgKiBzdGVwIDQuIGZvciBDQ0NJX0NDTU5JX1VMX1BFUkYgcGxlYXNlIGFkZCBtb25pdG9yIGlwY19vbl9wcm9jZXNzX3VsX3F1ZXVlIC0tPiB1cGNtX3Jjdl91bF9zZHUKKyAqLworI2RlZmluZSBDQ0NJX1BFUkZfR0VUX0NZQ0xFIGNwdV9ldmVudF9jb3VudGVyX2dldF9jeWNsZQorI2RlZmluZSBDQ0NJX1BFUkZfR0VUX0RVUkFUSU9OIGNwdV9ldmVudF9nZXRfZHVyYXRpb24KKyNkZWZpbmUgX19DQ0NJX1RUWV9ORVdfVFhfRExfUEVSRl9fICAgICAvKiBkZWZpbmUgdG8gcHJvZmlsZSB0aGUgY2NjaV90dHkgbmV3IHR4IGRsICovCisjZGVmaW5lIF9fQ0NDSV9UVFlfQ09OVl9UWF9ETF9QRVJGX18gICAgLyogZGVmaW5lIHRvIHByb2ZpbGUgdGhlIGNjY2lfdHR5IGNvbnZlbnRpb25hbCB0eCBkbCAqLworI2RlZmluZSBfX0NDQ0lfVFRZX0NPTlZfUlhfVUxfUEVSRl9fICAgIC8qIGRlZmluZSB0byBwcm9maWxlIHRoZSBjY2NpX3R0eSBjb252ZW50aW9uYWwgcnggdWwgKi8KKyNkZWZpbmUgX19DQ0NJX0NDTU5JX0RMX1BFUkZfXyAgICAgICAgICAvKiBkZWZpbmUgdG8gcHJvZmlsZSB0aGUgY2NtbmkgZGwgKi8KKyNkZWZpbmUgX19DQ0NJX0NDTU5JX1VMX1BFUkZfXyAgICAgICAgICAvKiBkZWZpbmUgdG8gcHJvZmlsZSB0aGUgY2NtbmkgdWwgKi8KKyNkZWZpbmUgX19DQ0NJX0RVU0VSX0RMX1BFUkZfXyAgICAgICAgICAvKiBkZWZpbmUgdG8gcHJvZmlsZSB0aGUgZGlyZWN0IGNjY2kgdXNlciBkbCAqLworI2RlZmluZSBfX0NDQ0lfRFVTRVJfVUxfUEVSRl9fICAgICAgICAgIC8qIGRlZmluZSB0byBwcm9maWxlIHRoZSBkaXJlY3QgY2NjaSB1c2VyIHVsICovCisjZGVmaW5lIENDQ0lfUEVSRl9SRUNfQ05UICAgICAgMjU2CisjZGVmaW5lIENDQ0lfUEVSRl9SRUNfQ05UXzEgICAgQ0NDSV9QRVJGX1JFQ19DTlQtMQorCisvKiBVTCBkYXRhIHN0cnVjdHVyZSovCit0eXBlZGVmIHN0cnVjdCBfY2NjaV9wcm9maWxlX3VsX3R7CisgICAga2FsX3VpbnQzMiAgc2Rpb2NfcHFfbnVtX2dwZDsKKworICAgIGthbF91aW50MzIgIHNkaW9jX3FfcHJvY2Vzc190OworCisjaWZkZWYgX19DQ0NJX0NDTU5JX1VMX1BFUkZfXworICAgIGthbF91aW50MzIgIGNjbW5pX2lwY19vbl9wcm9jZXNzX3VsX3M7CisgICAga2FsX3VpbnQzMiAgY2NtbmlfdXBjbV9yY3ZfdWxfc2R1X3M7CisgICAga2FsX3VpbnQzMiAgY2NtbmlfaXBjMnVwY21fdDsKKyNlbmRpZgorCisjaWZkZWYgX19DQ0NJX1RUWV9DT05WX1JYX1VMX1BFUkZfXworICAgIGthbF91aW50MzIgIHR0eV9jb252X3J4X0NNRF9HQl9zOworICAgIGthbF91aW50MzIgIHR0eV9jb252X3J4X0NNRF9HQl9lOworICAgIGthbF91aW50MzIgIHR0eV9jb252X3J4X0NNRF9HQl90OworI2VuZGlmCisKKyNpZmRlZiBfX0NDQ0lfRFVTRVJfVUxfUEVSRl9fCisjZW5kaWYKKworCit9IGNjY2lfcHJvZmlsZV91bF90OworCisvKiBETCBkYXRhIHN0cnVjdHVyZSovCit0eXBlZGVmIHN0cnVjdCBfY2NjaV9wcm9maWxlX2RsX3R7CisgICAga2FsX3VpbnQzMiAgc2Rpb2NfcHFfbnVtX2dwZDsKKworICAgIGthbF91aW50MzIgIHNkaW9jX3N1Ym1pdF9pb3JfczsKKyAgICBrYWxfdWludDMyICBzZGlvY19zdWJtaXRfaW9yX2U7CisKKy8vPT09PT09PT09PT09PT09PT09PT1nbG9iYWwgZW5kPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworI2lmZGVmIF9fQ0NDSV9DQ01OSV9ETF9QRVJGX18KKyAgICBrYWxfdWludDMyICBpcGNfb25fcHJvY2Vzc191bF9zOworICAgIGthbF91aW50MzIgIHVwY21fcmN2X3VsX3NkdV9zOworI2VuZGlmCisKKyNpZmRlZiBfX0NDQ0lfVFRZX0NPTlZfVFhfRExfUEVSRl9fCisgICAga2FsX3VpbnQzMiAgdHR5X2NvbnZfdHhfczsKKyAgICBrYWxfdWludDMyICB0dHlfY29udl90eF9lOworICAgIGthbF91aW50MzIgIHR0eV9jb252X3R4X3Q7CisgICAga2FsX3VpbnQzMiAgdHR5X2NvbnZfdHhfY2NjaWhfczsKKyAgICBrYWxfdWludDMyICB0dHlfY29udl90eF9jY2NpaF9lOworICAgIGthbF91aW50MzIgIHR0eV9jb252X3R4X2NjY2loX3Q7CisgICAga2FsX3VpbnQzMiAgdHR5X2NvbnZfdHhfc2Rpb2Nfc3VibWl0X2lvcl90OworI2VuZGlmCisKKyNpZmRlZiBfX0NDQ0lfRFVTRVJfRExfUEVSRl9fCisgICAga2FsX3VpbnQzMiAgZHVzZXJfY2NjaV93cml0ZV9zOworICAgIGthbF91aW50MzIgIGR1c2VyX2NjY2lfd3JpdGVfZTsKKyAgICBrYWxfdWludDMyICBkdXNlcl9jY2NpX3dyaXRlX3Q7CisgICAga2FsX3VpbnQzMiAgZHVzZXJfc2Rpb2Nfc3VibWl0X2lvcl90OworI2VuZGlmCisKK30gY2NjaV9wcm9maWxlX2RsX3Q7CisKK2V4dGVybiBjY2NpX3Byb2ZpbGVfZGxfdCAgICBkbF9wcm9mW0NDQ0lfUEVSRl9SRUNfQ05UXTsKK2V4dGVybiBrYWxfdWludDMyICAgICAgICAgICBkbF9wcm9mX2lkOworZXh0ZXJuIGNjY2lfcHJvZmlsZV91bF90ICAgIHVsX3Byb2ZbQ0NDSV9QRVJGX1JFQ19DTlRdOworZXh0ZXJuIGthbF91aW50MzIgICAgICAgICAgIHVsX3Byb2ZfaWQ7CisKKyNlbmRpZiAvL19fQ0NDSV9QRVJGX1BST0ZJTElOR19fCisKKy8vYSBzdHJ1Y3R1cmUgZm9yIEFUUCB0byBzZW5kIEFUIGNvbW1hbmRzIHRvIENDQ0kgbW9kdWxlcwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfaW50MzIgY2NjaWZzX2l0X3Rlc3RfY2FzZV9pZDsKK30gYXRwX2NjY2lfaXRfY2NjaWZzX2l0X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgZW51bXsKKyAgICBDQ0NJX0NUUkxfUkVBRFlfVE9fV1JJVEVfSURfTUlOID0gMCwKKyAgICBDQ0NJX0NUUkxfUkVBRFlfVE9fV1JJVEVfSURfUkVTRU5EX0hPU1RfSFNfUEtUID0gQ0NDSV9DVFJMX1JFQURZX1RPX1dSSVRFX0lEX01JTiwKKyAgICBDQ0NJX0NUUkxfUkVBRFlfVE9fV1JJVEVfSURfTUFYLAorfSBDQ0NJX0NUUkxfUkVBRFlfVE9fV1JJVEVfSURfRTsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBDQ0NJX0NUUkxfUkVBRFlfVE9fV1JJVEVfSURfRSBjY2NpX2N0cmxfd3JpdGVfaWQ7Cit9IGNjY2lfY3RybF9yZWFkeV90b193cml0ZV9zdHJ1Y3Q7CisKKyNkZWZpbmUgQ0NDSV9NRU1PUllfUkVNQVBfTUFYX0FSUkFZX1NJWkUgKDEwKQordHlwZWRlZiBzdHJ1Y3R7CisgICAga2FsX3VpbnQzMiBtb2RlbV9zdGFydF9hZGRyOworICAgIGthbF91aW50MzIgbWVtb3J5X3NpemU7CisgICAga2FsX3VpbnQ2NCBhcF9zdGFydF9hZGRyOworfSBjY2NpX21lbW9yeV9yZW1hcF9pbmZvX3Q7CitrYWxfaW50MzIgY2NjaV9nZXRfc2htX21lbW9yeV9yZW1hcF9pbmZvKGNjY2lfbWVtb3J5X3JlbWFwX2luZm9fdCAqcF9tZW1vcnlfcmVtYXBfaW5mbywga2FsX3VpbnQzMiByZWFkX2xlbik7CisKKyNpZiAwIC8vY2NjaV9nZXRfc2htX21lbW9yeV9yZW1hcF9pbmZvIHJlZmVyZW5jZQorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKKy8qIQorICogIEBicmllZiBDQ0NJX0hJRl9IV19UWVBFX1QgQ0NDSSBoaWYgdHJhbnNtaXNzaW9uIGh3IHR5cGUgZW51bQorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBDQ0NJX1RZUEVfTUlOICAgICAgICAgICA9IDAsCisgICAgQ0NDSV9UWVBFX1NESU8gICAgICAgICAgPSAxLAorICAgIENDQ0lfVFlQRV9DTERNQSAgICAgICAgID0gMiwKKyAgICBDQ0NJX1RZUEVfQ0FJRl9HUEQgICAgICA9IDMsCisgICAgQ0NDSV9UWVBFX0NBSUZfQlVGICAgICAgPSA0LAorICAgIENDQ0lfVFlQRV9DQ0lGX0dQRF9BUCAgID0gNSwKKyAgICBDQ0NJX1RZUEVfQ0NJRl9HUERfTUQgICA9IDYsCisgICAgQ0NDSV9UWVBFX0NDSUZfQlVGICAgICAgPSA3LAorICAgIENDQ0lfVFlQRV9DQ0lTTSAgICAgICAgID0gOCwKKyAgICBDQ0NJX1RZUEVfQVAgICAgICAgICAgICA9IDksCisgICAgQ0NDSV9UWVBFX1NDUCAgICAgICAgICAgPSAxMCwKKyAgICBDQ0NJX1RZUEVfRUFQICAgICAgICAgICA9IDExLAorICAgIC8qIGR1bW15IGludGVyZmFjZSBpcyBmb3IgdGhvc2UgY2hhbm5lbHMgbm90IHVzZWQgKi8KKyAgICBDQ0NJX1RZUEVfTk9UX1NVUFBPUlQsICAvL25vdCBzdXBwb3J0IHR5cGUgZm9yIGJhY2t3YXJkIGNvbXBhdGlibGUgYmVoYXZpb3IgLS0+IGNoYW5uZWwgZXhpc3RzIGJ1dCByZXR1cm4gZmFsc2UgdG8gdXNlcgorICAgIENDQ0lfVFlQRV9EVU1NWSwgICAgICAgIC8vID0gMworICAgIENDQ0lfVFlQRV9VVF9HUEQsICAgICAgIC8vID0gNAorICAgIENDQ0lfVFlQRV9VVF9CVUZGLCAgICAgIC8vID0gNQorICAgIENDQ0lfVFlQRV9VVF9TUEQsICAgICAgIC8vID0gNgorICAgIENDQ0lfVFlQRV9NQVgsCit9IENDQ0lfSElGX0hXX1RZUEVfVDsKKworI2RlZmluZSBDQ0NJX05PUk1BTF9CT09UICgwKQorI2RlZmluZSBDQ0NJX01FVEFfQk9PVCAoMSkKKyNkZWZpbmUgQ0NDSV9GQUNUT1JZX0JPT1QgKDIpCisKKy8vZm9yIGNjY2lzcnYgdG8gc2V0IGh3IHN0YXR1cyAKK3ZvaWQgY2NjaV9oaWZfc2V0X2h3X3N0YXR1cyhDQ0NJX0hJRl9IV19UWVBFX1QgaHdfdHlwZSwga2FsX2Jvb2wgbmV3X3N0YXR1cyk7CisvL2ZvciByZWdpc3RlciBob3N0IGhhbmRzaGFrZSBkb25lIGJyb2FkY2FzdCBDQgordm9pZCBjY2NpX3JlZ19ob3N0X2hzX2RvbmVfYnJvYWRjYXN0KENDQ0lfSE9TVF9IU19ET05FX0JST0FEQ0FTVF9JRF9FIGJyb2FkY2FzdF9pZCwgQ0NDSV9IT1NUX0hTX0RPTkVfQ0FMTEJBQ0sgcF9mdW5wKTsKKworI2VuZGlmIC8vI2lmbmRlZiBfQ0NDSV9JRl9ICmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfaW1zX2lmLmggYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfaW1zX2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkZWVlYwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9pbXNfaWYuaApAQCAtMCwwICsxLDEyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGNjY2lfaW1zX2lmLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIENDQ0lfSU1TIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAkTG9nJAorICoKKyAqIDAzIDIzIDIwMTYgY3MuaHVhbmcKKyAqIFtNT0xZMDAxNjk4MjhdIFtJTVNdIEVNIENDQ0kgQ2hhbm5lbAorICogW0NDQ0kgSU1TXSBBZGQgSU1TIEVNIGZlYXR1cmUKKyAqCisgKiAwMyAyMyAyMDE2IGNzLmh1YW5nCisgKiBbTU9MWTAwMTY5ODI4XSBbSU1TXSBFTSBDQ0NJIENoYW5uZWwKKyAqIFtDQ0NJIElNU10gQWRkIElNUyBFTSBmZWF0dXJlCisgKgorICogMDMgMjMgMjAxNiBjcy5odWFuZworICogW01PTFkwMDE2OTgyOF0gW0lNU10gRU0gQ0NDSSBDaGFubmVsCisgKiBbQ0NDSSBJTVNdIEFkZCBJTVMgRU0gZmVhdHVyZQorICoKKyAqIDEyIDIyIDIwMTQgaHNpbi1qdW4udGFuZworICogW01PTFkwMDA4ODIyOV0gW0NDQ0kgSU1TXSBBZGQgbGF0ZW5jeSBtZWFzdXJlbWVudCBmZWF0dXJlCisgKiAuCisgKgorICogMTIgMTkgMjAxNCBoc2luLWp1bi50YW5nCisgKiBbTU9MWTAwMDg4MjI4XSBbQ0NDSSBJTVNdIEFkZCBsYXRlbmN5IG1lYXN1cmVtZW50IGZlYXR1cmUKKyAqIFtDQ0NJIElNU10gQWRkIGxhdGVuY3kgbWVhc3VyZW1lbnQgZmVhdHVyZQorICoKKyAqIDA1IDMwIDIwMTMgYXAud2FuZworICogW01PTFkwMDAyNDI2M10gW0NDQ0kgSU1TXSBBZGQgQ0NDSSBJTVMgRGF0YSBDb250cm9sIGNoYW5uZWwKKyAqIFtDQ0NJX0lNU10gQWRkIElNU19EQ1RSTCBjaGFubmVsCisgKgorICogMDEgMTcgMjAxMyBpYW4uY2hlbmcKKyAqIFtNT0xZMDAwMDg5OTNdIFtDQ0NJX1NSVl0gQ0NDSV9JTVMgMXN0IHZlcnNpb24KKyAqIFtDQ0NJXSBDQ0NJX0lNUyAxc3QgdmVyaXNvbiBsb29wYmFjayBzdXBwb3J0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0NDQ0lfSU1TX0lGX0gKKyNkZWZpbmUgX0NDQ0lfSU1TX0lGX0gKKyNkZWZpbmUgQ0NDSV9JTVNfTEFURU5DWV9NRUFTVVJFTUVOVAorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAiY2NjaV9pZi5oIgorCit0eXBlZGVmIGVudW0KK3sKKyAgICBDQ0NJX0lNU19DVFJMICAgICAgID0gMHgwMCwKKyAgICBDQ0NJX0lNU19WSURFTyAgICAgID0gMHgwMSwKKyAgICBDQ0NJX0lNU19BVUQgICAgICAgID0gMHgwMiwKKyAgICBDQ0NJX0lNU19EQ1RSTCAgICAgID0gMHgwMywKKyAgICBDQ0NJX0lNU19FTSAgICAgICAgID0gMHgwNCwKKyAgICBDQ0NJX0lNU19DSF9NQVggICAgID0gMHgwNSwKKyAgICBDQ0NJX0lNU19ERUNfTlVNICAgID0gQ0NDSV9JTVNfQ0hfTUFYCit9IENDQ0lfSU1TX0NIX0U7CisKK3R5cGVkZWYgdm9pZCAoKiBDQ0NJX0lNU0NBTExCQUNLICkoa2FsX3VpbnQ4IGltc19jaCwgY2NjaV9pb19yZXF1ZXN0X3QgKnBfaW9yKTsKK2thbF9ib29sIGNjY2lfaW1zX3N2Y19pbml0ICh2b2lkKTsKK2thbF9ib29sIGNjY2lfaW1zX2RsX3JlcSAoa2FsX3VpbnQzMiBpbXNfY2gsIGNjY2lfaW9fcmVxdWVzdF90ICpwX2lvcik7CitrYWxfYm9vbCBjY2NpX2ltc191bGNiX3JlZyAoa2FsX3VpbnQ4IGltc19jaCwgQ0NDSV9JTVNDQUxMQkFDSyB1bGNiX2Z1bnApOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8vIElNUyB0byBDTERNQQorICAgIGthbF91aW50MzIgY2NjaV9pbXNfbWRpbXNfdG9faGlmX3N0YXJ0OworICAgIGthbF91aW50MzIgY2NjaV9pbXNfbWRpbXNfdG9faGlmX2VuZDsKKyAgICBrYWxfdWludDMyIGNjY2lfaW1zX21kaW1zX3RvX2hpZl9kaWZmOworICAgIGthbF91aW50MzIgY2NjaV9pbXNfbWRpbXNfdG9faGlmX2NvdW50OworICAgIAorICAgIC8vIENMRE1BIHRvIElNUworICAgIGthbF91aW50MzIgY2NjaV9pbXNfaGlmX3RvX21kaW1zX3N0YXJ0OworICAgIGthbF91aW50MzIgY2NjaV9pbXNfaGlmX3RvX21kaW1zX2VuZDsKKyAgICBrYWxfdWludDMyIGNjY2lfaW1zX2hpZl90b19tZGltc19kaWZmOworICAgIGthbF91aW50MzIgY2NjaV9pbXNfaGlmX3RvX21kaW1zX2NvdW50OworICAgIC8vIAorICAgIGthbF91aW50MzIgY2NjaV9pbXNfaGlmX3Rhc2tfaW50ZXJ2YWw7Cit9IGNjY2lfaW1zX2xhdGVuY3lfdDsKKworI2VuZGlmIC8vIF9DQ0NJX0lNU19JRl9ICmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfaXBjX2lmLmggYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfaXBjX2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTczNGQyYgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9pcGNfaWYuaApAQCAtMCwwICsxLDE2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgY2NjaV9pcGNfaWYuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgSW50ZXJmYWNlIG9mIENDQ0lfSVBDIHNlcnZpY2UuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogJExvZyQKKyAqCisgKiAwNyAxOCAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDQyMjU3OV0gW01ERFBdIERQRk0gcG9ydGluZyB0byBWTU9MWQorICogW1ZNT0xZXVtPQV0gc3VwcG9ydCBNRERQICYgcmVuYW1lIHRvIERQRk0KKyAqCisgKiAwNCAwNSAyMDE3IGNoaWVuLWh1aS5sdQorICogW01PTFkwMDIzOTYxMV0gW0NDQ0lfSVBDXVtDQ0NJXSBhZGQgQ0NDSSBJUEMgYW5kIHJ1bnRpbWUgZmVhdHVyZQorICogW0NDQ0lfSVBDXVtDQ0NJXSBhZGQgQ0NDSSBJUEMgY29uZmlnIGZvciBXSVBDLgorICoKKyAqIDA0IDA1IDIwMTcgY2hpZW4taHVpLmx1CisgKiBbTU9MWTAwMjM5NjExXSBbQ0NDSV9JUENdW0NDQ0ldIGFkZCBDQ0NJIElQQyBhbmQgcnVudGltZSBmZWF0dXJlCisgKiBbQ0NDSV1bQ0NDSV9JUENdIGFkZCBydW50aW1lIGZlYXR1cmUgYW5kIElQQyBjb25maWcgZm9yIERQRk0uCisgKgorICogMDcgMjkgMjAxNSBoc2luLWp1bi50YW5nCisgKiBbTU9MWTAwMTMzMTE0XSBbQ0NDSSBJUENdIHBhdGNoIENDQ0kgSVBDIG1vZHVsZSBJRCAtIEFQTU9EX0dGCisgKiBbQ0NDSV0gcGF0Y2ggQ0NDSSBJUEMgbW9kdWxlIElEIC0gZ2FyYmFnZSBmaWx0ZXIgLSBVTU9MWQorICoKKyAqIDEyIDEwIDIwMTQgY3MuaHVhbmcKKyAqIFtNT0xZMDAwODAzNTFdIFtNVDYyOTFdW0NDQ0ldIEFkZCBMMUNvcmUgQ0NDSSBzZXJ2aWNlIChDQ0NJIFNZU01TRy9SUEMvSVBDKQorICogW0NDQ0ldIFBDb3JlL0wxQ29yZSBDQ0NJIGVuaGFuY2VtZW50CisgKgorICogMTEgMTMgMjAxNCBjcy5odWFuZworICogW01PTFkwMDA4NDM5M10gW1VNT0xZXVtDQ0NJXSBDQ0NJIGNvbW1vbiBoZWFkZXIgYXJyYW5nZW1lbnQKKyAqIE1lcmdpbmcKKyAqIAkKKyAqIAkvL1VNT0xZL1RSVU5LL1VNT0xZL21jdS9wY29yZS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9jaF9jZmcuaAorICogCQorICogCXRvIC8vVU1PTFkvVFJVTksvVU1PTFkvbWN1L2NvbW1vbi9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9jaF9jZmcuaAorICoKKyAqIDA4IDA0IDIwMTQgaWFuLmNoZW5nCisgKiBbTU9MWTAwMDc0NDU4XSBVTU9MWSBDQ0NJIHNlcnZpY2UKKyAqIAlbVU1PTFlfREVWIENDQ0kgUENvcmUgU2VydmljZV0KKyAqCisgKiAwNiAxMSAyMDE0IGlhbi5jaGVuZworICogW01PTFkwMDA2OTIzMV0gW1RLNjI5MV0gTU9MWSBDQ0NJIG1lcmdlCisgKiAJVEs2MjkxIENDQ0kgbWlncmF0aW9uCisgKgorICogMDMgMDQgMjAxNCBhcC53YW5nCisgKiBbTU9MWTAwMDU4MjYyXSBbQ0NDSV9JUENdIEFkZCBuZXcgQVBJIGZvciBJREMKKyAqIEFkZCAgaXBjX21zZ3N2Y19zZW5kX2V4dF9xdWV1ZV9ub193YWl0IEFQSQorICoKKyAqIDEwIDA4IDIwMTMgYXAud2FuZworICogW01PTFkwMDA0MDQyNF0gW0NDQ0lfSVBDXSBNb2RpZnkgZm9yIElEQworICogCUFkZCBNT0RfRUwxIGFuZCBBUF9NT0RfV01UCisgKgorICogMDYgMDQgMjAxMyBhcC53YW5nCisgKiBbTU9MWTAwMDI0ODk0XSBbQ0NDSSBJUENdIEFkZCBuZXcgQVAgTW9kdWxlIElEIGZvciBsNGMKKyAqIC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fQ0NDSV9JUENfSUZfSF9fCisjZGVmaW5lIF9fQ0NDSV9JUENfSUZfSF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbmUgY29uc3RhbnRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGRlZmluZSBBUCBzaWRlIHZpcnR1YWwgbW9kdWxlIGlkIGFzIGRlc3RpbmF0aW9uICovCisjZGVmaW5lIEFQTU9EX0FHUFMgICAgICAgICAgMHgwNDAxCisjZGVmaW5lIEFQTU9EX0RIQ1AgICAgICAgICAgMHgwNDAyCisjZGVmaW5lIEFQTU9EX0dQUyAgICAgICAgICAgMHgwNDAzCisjZGVmaW5lIEFQTU9EX1dNVCAgICAgICAgICAgMHgwNDA0CisjZGVmaW5lIEFQTU9EX01JU0NUQSAgICAgICAgMHgwNDA1CisjZGVmaW5lIEFQTU9EX0NDQ0kgICAgICAgICAgMHgwNDA2CisjZGVmaW5lIEFQTU9EX0dGICAgICAgICAgICAgMHgwNDA3CisjZGVmaW5lIEFQTU9EX1BLVFRSQyAgICAgICAgMHgwNDA4CisjZGVmaW5lIEFQTU9EX01ERFAgICAgICAgICAgMHgwNDA5CisjZGVmaW5lIEFQTU9EX0xXWE4gICAgICAgICAgMHgwNDBBCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5lIGRhdGEgc3RydWN0dXJlcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTdHJ1Y3QgdG8gZGVmaW5lIHRoZSBjb21tdW5pY2F0aW9uIGlsbSBiZXR3ZWVuIHR3byBjb3JlcyAqLwordHlwZWRlZiBzdHJ1Y3QgaXBjX2lsbV9zdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyICAgICAgICAgICBzcmNfbW9kX2lkOworICAgIGthbF91aW50MzIgICAgICAgICAgIGRlc3RfbW9kX2lkOworICAgIGthbF91aW50MzIgICAgICAgICAgIHNhcF9pZDsKKyAgICBrYWxfdWludDMyICAgICAgICAgICBtc2dfaWQ7CisgICAgbG9jYWxfcGFyYV9zdHJ1Y3QgICAgKmxvY2FsX3BhcmFfcHRyOworICAgIHBlZXJfYnVmZl9zdHJ1Y3QgICAgICpwZWVyX2J1ZmZfcHRyOworfSBpcGNfaWxtX3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluZSBtYWNyb3MuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5lIGV4cG9ydCB2YXJpYWJsZXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbmUgZXhwb3J0IGZ1bmN0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gaXBjX2lsbV90KiBpcGNfbXNnc3ZjX2FsbG9jYXRlX2lsbShtb2R1bGVfdHlwZSBtb2R1bGVfaWQpOworZXh0ZXJuIGthbF9ib29sIGlwY19tc2dzdmNfc2VuZF9leHRfcXVldWUoaXBjX2lsbV90KmlwY19pbG1fdF9wdHIpOworZXh0ZXJuIGthbF9ib29sIGlwY19tc2dzdmNfc2VuZF9leHRfcXVldWVfbm9fd2FpdChpcGNfaWxtX3QqaXBjX2lsbV90X3B0cik7CitleHRlcm4gdm9pZCBpcGNfbXNnc3ZjX2luaXQodm9pZCk7Cit0eXBlZGVmIHZvaWQgKCpDQ0NJX0lQQ19DQl9GVU5QKShpbG1fc3RydWN0ICppbG0pOworZXh0ZXJuIGthbF9ib29sIGNjY2lfcmVnaXN0ZXJfaXBjX2NiX2Z1bnAoa2FsX3VpbnQzMiBtc2dfaWQsIENDQ0lfSVBDX0NCX0ZVTlAgZnVucCk7CisKKworI2VuZGlmICAvKiAhX19DQ0NJX0lQQ19JRl9IX18gKi8KKworCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfaXBjX21vZHVsZV9jb25mLmggYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfaXBjX21vZHVsZV9jb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwNDk2ZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9pcGNfbW9kdWxlX2NvbmYuaApAQCAtMCwwICsxLDI1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgY2NjaV9pcGNfbW9kdWxlX2NvbmYuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgSGVhZGVyIGZpbGUgb2YgQ0NDSV9JUENfTU9EVUxFLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDcgMzAgMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDA0MjMzMDVdIFtNQ0lGXSBQYXRjaCBiYWNrIC0gQ29uZmlnIEZpbGVzCisgKiBbVk1PTFldW09BXSBhZGQgZHVtbXkgV0ZQQSBtb2R1bGUgdG8gZHJvcCBtc2cgZnJvbSBBUAorICoKKyAqIDA3IDE4IDIwMTkgYWN0b3J5Lm91CisgKiBbTU9MWTAwNDIyNTc5XSBbTUREUF0gRFBGTSBwb3J0aW5nIHRvIFZNT0xZCisgKiBbVk1PTFldW09BXSBzdXBwb3J0IE1ERFAgJiByZW5hbWUgdG8gRFBGTQorICoKKyAqIDA0IDE5IDIwMTkgYWN0b3J5Lm91CisgKiBbTU9MWTAwMzk1MTc2XSBbVGhpbiBNb2RlbSAxLjBdW1BDSWUgcGxhdGZvcm1dIFBDSWUgUGxhdGZvcm0gMXN0IFJlbGVhc2Ugb24gQXBvbGxvCisgKiBbUENJZV1bT0FdW0NDQ0ldIHN1cHBvcnQgcGNpZSB0aGluIG1vZGVtIDEuMAorICoKKyAqIDA2IDEyIDIwMTcgY2hpZW4taHVpLmx1CisgKiBbTU9MWTAwMjU2NzYwXSBbTVQ2NzYzXVtCaWFuY29dW04xXVtNVEJGXVtQSE9ORV1bT3Zlcm5pZ2h0XVtIUV1bTGFiXVtFcmljc3Nvbl1bSENSXVtBU1NFUlRdIGZpbGU6bWN1L2NvbW1vbi9zZXJ2aWNlL2hpZi9jY2Npc3J2L2NjY2lfaXBjL3NyYy9jY2NpX2lwY19kYXRhLmMgbGluZToxMTAzCisgKiBbQ0NDSV9JUENdIGFkZCBmb3IgTU9EX0VMMV9NUEMuCisgKgorICogMDQgMDYgMjAxNyBjaGllbi1odWkubHUKKyAqIFtNT0xZMDAyMzk2MTFdIFtDQ0NJX0lQQ11bQ0NDSV0gYWRkIENDQ0kgSVBDIGFuZCBydW50aW1lIGZlYXR1cmUKKyAqIFtDQ0NJX0lQQ10gYWRkIENDQ0kgSVBDIGNvbmZpZyBmb3IgRFBGTS4KKyAqCisgKiAwNCAwNSAyMDE3IGNoaWVuLWh1aS5sdQorICogW01PTFkwMDIzOTYxMV0gW0NDQ0lfSVBDXVtDQ0NJXSBhZGQgQ0NDSSBJUEMgYW5kIHJ1bnRpbWUgZmVhdHVyZQorICogW0NDQ0lfSVBDXVtDQ0NJXSBhZGQgQ0NDSSBJUEMgY29uZmlnIGZvciBXSVBDLgorICoKKyAqIDA0IDA1IDIwMTcgY2hpZW4taHVpLmx1CisgKiBbTU9MWTAwMjM5NjExXSBbQ0NDSV9JUENdW0NDQ0ldIGFkZCBDQ0NJIElQQyBhbmQgcnVudGltZSBmZWF0dXJlCisgKiBbQ0NDSV9JUENdW0NDQ0ldIGZpeCBDQ0NJIElQQyBubyBtb2R1bGUgRFBGTSBidWlsZCBmYWlsLgorICoKKyAqIDA0IDA1IDIwMTcgY2hpZW4taHVpLmx1CisgKiBbTU9MWTAwMjM5NjExXSBbQ0NDSV9JUENdW0NDQ0ldIGFkZCBDQ0NJIElQQyBhbmQgcnVudGltZSBmZWF0dXJlCisgKiBbQ0NDSV9JUENdW0NDQ0ldIGFkZCBDQ0NJIElQQyBjb25maWcgZm9yIERQRk0uCisgKgorICogMDQgMDUgMjAxNyBjaGllbi1odWkubHUKKyAqIFtNT0xZMDAyMzk2MTFdIFtDQ0NJX0lQQ11bQ0NDSV0gYWRkIENDQ0kgSVBDIGFuZCBydW50aW1lIGZlYXR1cmUKKyAqIFtDQ0NJXVtDQ0NJX0lQQ10gYWRkIHJ1bnRpbWUgZmVhdHVyZSBhbmQgSVBDIGNvbmZpZyBmb3IgRFBGTS4KKyAqCisgKiAwNyAyOSAyMDE1IGhzaW4tanVuLnRhbmcKKyAqIFtNT0xZMDAxMzMxMTRdIFtDQ0NJIElQQ10gcGF0Y2ggQ0NDSSBJUEMgbW9kdWxlIElEIC0gQVBNT0RfR0YKKyAqIFtDQ0NJXSBwYXRjaCBDQ0NJIElQQyBtb2R1bGUgSUQgLSBnYXJiYWdlIGZpbHRlciAtIFVNT0xZCisgKgorICogMTIgMTAgMjAxNCBjcy5odWFuZworICogW01PTFkwMDA4MDM1MV0gW01UNjI5MV1bQ0NDSV0gQWRkIEwxQ29yZSBDQ0NJIHNlcnZpY2UgKENDQ0kgU1lTTVNHL1JQQy9JUEMpCisgKiBbQ0NDSV0gUENvcmUvTDFDb3JlIENDQ0kgZW5oYW5jZW1lbnQKKyAqCisgKiAxMSAyNSAyMDE0IGNzLmh1YW5nCisgKiBbTU9MWTAwMDg0MjU4XSBbTVQ2Nzk1XVtNb2RlbV1bRmVhdHVyZV1QbGVhc2Ugc3VwcG9ydCBHYXJiYWdlIGZpbHRlciBmcm9tIG5ldHdvcmsKKyAqIFtDQ0NJIElQQ10gQWRkIENDQ0kgSVBDIG1zZ2lkIGZvciBnYXJiYWdlIGZpbHRlcgorICoKKyAqIDExIDI1IDIwMTQgY3MuaHVhbmcKKyAqIFtNT0xZMDAwODQyNThdIFtNVDY3OTVdW01vZGVtXVtGZWF0dXJlXVBsZWFzZSBzdXBwb3J0IEdhcmJhZ2UgZmlsdGVyIGZyb20gbmV0d29yaworICogW0NDQ0kgSVBDXSBBZGQgQ0NDSSBJUEMgbXNnaWQgZm9yIGdhcmJhZ2UgZmlsdGVyCisgKgorICogMTEgMTMgMjAxNCBjcy5odWFuZworICogW01PTFkwMDA4NDI1OF0gW01UNjc5NV1bTW9kZW1dW0ZlYXR1cmVdUGxlYXNlIHN1cHBvcnQgR2FyYmFnZSBmaWx0ZXIgZnJvbSBuZXR3b3JrCisgKiBbQ0NDSSBJUENdIEFkZCBDQ0NJIElQQyBtc2dpZCBmb3IgZ2FyYmFnZSBmaWx0ZXIKKyAqIDExIDEyIDIwMTQgY3MuaHVhbmcKKyAqIFtNT0xZMDAwODQwOTFdIFtNVDY3OTVdIFtTWVNURU0gU0VSVklDRV0gW0NMSUJdIHBvcnRpbmcgQyB0aW1lIGZ1bmN0aW9uIHRvIE1ECisgKiBbQ0NDSSBJUENdIFN1cHBvcnQgQ2xpYnRpbWUgZmVhdHVyZQorICoKKyAqIDA4IDA0IDIwMTQgaWFuLmNoZW5nCisgKiBbTU9MWTAwMDc0NDU4XSBVTU9MWSBDQ0NJIHNlcnZpY2UKKyAqIAlbVU1PTFlfREVWIENDQ0kgUENvcmUgU2VydmljZV0KKyAqCisgKiAwMSAyMSAyMDE0IHdjcHVzZXJfaW50ZWdyYXRvcgorICogW01PTFkwMDA1NDQ3NV0gU0dMVEUgb3B0aW9uIHJlbmFtZQorICogLgorICoKKyAqIDEwIDA4IDIwMTMgYXAud2FuZworICogW01PTFkwMDA0MDQyNF0gW0NDQ0lfSVBDXSBNb2RpZnkgZm9yIElEQworICogCUZpeCBFTDEgbW9kdWxlIGVycm9yCisgKgorICogMTAgMDggMjAxMyBhcC53YW5nCisgKiBbTU9MWTAwMDQwNDI0XSBbQ0NDSV9JUENdIE1vZGlmeSBmb3IgSURDCisgKiAJQWRkIE1PRF9FTDEgYW5kIEFQX01PRF9XTVQKKyAqCisgKiAwNyAxNSAyMDEzIGFwLndhbmcKKyAqIFtNT0xZMDAwMjk3OTRdIFtDQ0NJX0lQQ10gQWRkIGNvbXBpbGUgb3B0aW9uIF9fU0dMVEVfXyBmb3IgTU1EQworICoKKyAqIDA3IDEyIDIwMTMgYWoudHNhaQorICogW01PTFkwMDAyOTY5MV0gY2hlY2staW4gQU9NR1IgcmVsYXRlZCBjb2RlCisgKiBjaGVjay1pbiBhb21nciBjb2RlIAorICogREhDUFY0IG9rCisgKgorICogMDYgMDQgMjAxMyBhcC53YW5nCisgKiBbTU9MWTAwMDI0ODk0XSBbQ0NDSSBJUENdIEFkZCBuZXcgQVAgTW9kdWxlIElEIGZvciBsNGMKKyAqIC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fQ0NDSV9JUENfTU9EVUxFX0NPTkZfSF9fCisjZGVmaW5lIF9fQ0NDSV9JUENfTU9EVUxFX0NPTkZfSF9fCisKKyNpZiBkZWZpbmVkKF9fQ0NDSV9QUk9EVUNUX1RZUEVfVEhJTl9NT0RFTV9fKSAvL3RoaW4gbW9kZW0gY29uZmlndXJhdGlvbgorICAgIC8vIENyb3NzIENvcmUgSVBDIERpcmVjdGlvbiA6ICBBUCAyIE1ECisgICAgLy8gUHJpb3JpdHkgLS0+IExvY2FsIG1vZHVsZSBJRCAtLT4gRXh0ZXJuYWwgSUQgLS0+IE1heCBzZW50IG1lc3NhZ2UgLS0+IFN1cHBvcnQodHJ1ZSkgb3Igbm90IHN1cHBvcnQoZmFsc2UpCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSwgTU9EX0w0QywwLDEsIEtBTF9GQUxTRSksICAgICAgICAgICAvL1RBU0tfSURfMQorICAgICNpZiBkZWZpbmVkKF9fR0VNSU5JX18pCisgICAgICAgIFhfSVBDX01PRFVMRV9DT05GKDEsIE1PRF9MNENfMiwgMSwgMSwgS0FMX0ZBTFNFKSwgICAgIC8vVEFTS19JRF8yCisgICAgICAjaWYgKEdFTUlOSV9QTFVTID49IDMpCisgICAgICAgIFhfSVBDX01PRFVMRV9DT05GKDEsIE1PRF9MNENfMywgMiwgMSwgS0FMX0ZBTFNFKSwgICAgIC8vVEFTS19JRF8zCisgICAgICAjZW5kaWYgICAgLyogR0VNSU5JX1BMVVMgPj0gMyAqLworICAgICAgI2lmIChHRU1JTklfUExVUyA+PSA0KQorICAgICAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBNT0RfTDRDXzQsIDMsIDEsIEtBTF9GQUxTRSksICAgICAvL1RBU0tfSURfNAorICAgICAgI2VuZGlmICAgIC8qIEdFTUlOSV9QTFVTID49IDQgKi8KKyAgICAjZW5kaWYgLyogX19HRU1JTklfXyAqLworICAgIFhfSVBDX01PRFVMRV9DT05GKDEsIE1PRF9BT01HUiwgNCwgMSwgS0FMX0ZBTFNFKSwgICAgICAgICAvL1RBU0tfSURfNAorICAgICNpZiBkZWZpbmVkKF9fTFRFX1JBVF9fKQorICAgICAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBNT0RfRUwxLCA1LCAxLCBLQUxfRkFMU0UpLCAgICAgIC8vVEFTS19JRF81CisgICAgI2VuZGlmCisgICAgLy8gVEFTS19JRF82IGlzIHJlc2VydmVkIHRvIE1JU0NUQSAgICAgICAgICAvL1RBU0tfSURfNgorICAgIFhfSVBDX01PRFVMRV9DT05GKDEsIE1PRF9DQ0NJSVBDLCA3LCAxLCBLQUxfVFJVRSksICAgICAgLy9UQVNLX0lEXzcKKyAgICAjaWYgZGVmaW5lZChfX0lQQ09SRV9TVVBQT1JUX18pICYmICFkZWZpbmVkKElQQ09SRV9OT1RfUFJFU0VOVCkgJiYgIWRlZmluZWQoX19JUENPUkVfVEFTS19ESVNBQkxFX18pCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSxNT0RfSVBDT1JFLCA4LCAxLCBLQUxfRkFMU0UpLCAgICAgICAvL1RBU0tfSURfOAorICAgICNlbmRpZiAKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBNT0RfRFBGTSwgOSwgMSwgS0FMX0ZBTFNFKSwgICAgICAgICAgLy9UQVNLX0lEXzkKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBNT0RfVUZQTSwgMTAsIDEsIEtBTF9GQUxTRSksICAgICAgICAvL1RBU0tfSURfMTAKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBNT0RfVVNCQ0xBU1MsIDExLCAxLCBLQUxfRkFMU0UpLCAgICAvL1RBU0tfSURfMTEKKyAgICAjaWZkZWYgV0lQQ19TVVBQT1JUCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSxNT0RfV0lQQywgMTIsIDEsIEtBTF9GQUxTRSksICAgICAgICAvL1RBU0tfSURfMTIKKyAgICAjZW5kaWYKKyAgICAjaWYgZGVmaW5lZChfX0xURV9SQVRfXykKKyAgICAgICAgWF9JUENfTU9EVUxFX0NPTkYoMSwgTU9EX0VMMV9NUEMsIDUsIDEsIEtBTF9GQUxTRSksICAgICAgLy9UQVNLX0lEXzEzCisgICAgI2VuZGlmCisgICAgI2lmZGVmIF9fTUNJRl9XSUZJX1NVUFBPUlRfXworICAgIFhfSVBDX01PRFVMRV9DT05GKDEsIE1PRF9XRlBNLCAxMywgMSwgS0FMX0ZBTFNFKSwKKyAgICAjZWxzZSAgICAgCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSwgTU9EX0RVTU1ZX0NDQ0lTUlYsIDEzLCAxLCBLQUxfRkFMU0UpLAorICAgICNlbmRpZgorCisgICAgLy8gQ3Jvc3MgQ29yZSBJUEMgRGlyZWN0aW9uIDogIE1EIDIgQVAKKyAgICAvLyBQcmlvcml0eSAtLT4gTG9jYWwgbW9kdWxlIElEIC0tPiBFeHRlcm5hbCBJRCAtLT4gTWF4IHNlbnQgbWVzc2FnZSAtLT4gRGVzdGluYXRpb24gQ2hpcAorICAgICNkZWZpbmUgQVBfVUlORllfSURfRkxBRyAoKGthbF91aW50MzIpMTw8MzEpCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSwgQVBNT0RfQUdQUywgKDB8QVBfVUlORllfSURfRkxBRyksIDEsIEtBTF9GQUxTRSksICAgIAorICAgIFhfSVBDX01PRFVMRV9DT05GKDEsIEFQTU9EX0RIQ1AsICgxfEFQX1VJTkZZX0lEX0ZMQUcpLCAxLCBLQUxfRkFMU0UpLCAgICAKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBBUE1PRF9HUFMgLCAoMnxBUF9VSU5GWV9JRF9GTEFHKSwgMSwgS0FMX0ZBTFNFKSwgICAgCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSwgQVBNT0RfV01UICwgKDN8QVBfVUlORllfSURfRkxBRyksIDEsIEtBTF9GQUxTRSksICAKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBBUE1PRF9NSVNDVEEgLCAoNHxBUF9VSU5GWV9JRF9GTEFHKSwgMSwgS0FMX0ZBTFNFKSwKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBBUE1PRF9DQ0NJICwgKDV8QVBfVUlORllfSURfRkxBRyksIDEsIEtBTF9UUlVFKSwKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBBUE1PRF9HRiAsICg2fEFQX1VJTkZZX0lEX0ZMQUcpLCAxLCBLQUxfRkFMU0UpLAorICAgIFhfSVBDX01PRFVMRV9DT05GKDEsIEFQTU9EX1BLVFRSQyAsICg3fEFQX1VJTkZZX0lEX0ZMQUcpLCAxLCBLQUxfRkFMU0UpLAorICAgIFhfSVBDX01PRFVMRV9DT05GKDEsIEFQTU9EX01ERFAgLCAoOHxBUF9VSU5GWV9JRF9GTEFHKSwgMSwgS0FMX0ZBTFNFKSwKKyAgICAjaWZkZWYgV0lQQ19TVVBQT1JUCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSxBUE1PRF9MV1hOLCAoOXxBUF9VSU5GWV9JRF9GTEFHKSwgMSwgS0FMX0ZBTFNFKSwKKyAgICAjZW5kaWYKKyAgICAKKyNlbHNlIC8vaWYgZGVmaW5lZChfX0NDQ0lfUFJPRFVDVF9UWVBFX1RISU5fTU9ERU1fXykKKyAgICAvLyBDcm9zcyBDb3JlIElQQyBEaXJlY3Rpb24gOiAgQVAgMiBNRAorICAgIC8vIFByaW9yaXR5IC0tPiBMb2NhbCBtb2R1bGUgSUQgLS0+IEV4dGVybmFsIElEIC0tPiBNYXggc2VudCBtZXNzYWdlIC0tPiBEZXN0aW5hdGlvbiBDaGlwCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSwgTU9EX0w0QywwLDEsIEtBTF9UUlVFKSwgICAgICAgICAgIC8vVEFTS19JRF8xCisgICAgI2lmIGRlZmluZWQoX19HRU1JTklfXykKKyAgICAgICAgWF9JUENfTU9EVUxFX0NPTkYoMSwgTU9EX0w0Q18yLCAxLCAxLCBLQUxfVFJVRSksICAgICAvL1RBU0tfSURfMgorICAgICAgI2lmIChHRU1JTklfUExVUyA+PSAzKQorICAgICAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBNT0RfTDRDXzMsIDIsIDEsIEtBTF9UUlVFKSwgICAgIC8vVEFTS19JRF8zCisgICAgICAjZW5kaWYgICAgLyogR0VNSU5JX1BMVVMgPj0gMyAqLworICAgICAgI2lmIChHRU1JTklfUExVUyA+PSA0KQorICAgICAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBNT0RfTDRDXzQsIDMsIDEsIEtBTF9UUlVFKSwgICAgIC8vVEFTS19JRF80CisgICAgICAjZW5kaWYgICAgLyogR0VNSU5JX1BMVVMgPj0gNCAqLworICAgICNlbmRpZiAvKiBfX0dFTUlOSV9fICovCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSwgTU9EX0FPTUdSLCA0LCAxLCBLQUxfVFJVRSksICAgICAgICAgLy9UQVNLX0lEXzQKKyAgICAjaWYgZGVmaW5lZChfX0xURV9SQVRfXykKKyAgICAgICAgWF9JUENfTU9EVUxFX0NPTkYoMSwgTU9EX0VMMSwgNSwgMSwgS0FMX1RSVUUpLCAgICAgIC8vVEFTS19JRF81CisgICAgI2VuZGlmCisgICAgLy8gVEFTS19JRF82IGlzIHJlc2VydmVkIHRvIE1JU0NUQSAgICAgICAgICAvL1RBU0tfSURfNgorICAgIFhfSVBDX01PRFVMRV9DT05GKDEsIE1PRF9DQ0NJSVBDLCA3LCAxLCBLQUxfVFJVRSksICAgICAgLy9UQVNLX0lEXzcKKyAgICAjaWYgZGVmaW5lZChfX0lQQ09SRV9TVVBQT1JUX18pICYmICFkZWZpbmVkKElQQ09SRV9OT1RfUFJFU0VOVCkgJiYgIWRlZmluZWQoX19JUENPUkVfVEFTS19ESVNBQkxFX18pCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSxNT0RfSVBDT1JFLCA4LCAxLCBLQUxfVFJVRSksICAgICAgIC8vVEFTS19JRF84CisgICAgI2VuZGlmIAorICAgIFhfSVBDX01PRFVMRV9DT05GKDEsIE1PRF9EUEZNLCA5LCAxLCBLQUxfVFJVRSksICAgICAgICAgIC8vVEFTS19JRF85CisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSwgTU9EX1VGUE0sIDEwLCAxLCBLQUxfVFJVRSksICAgICAgICAvL1RBU0tfSURfMTAKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBNT0RfVVNCQ0xBU1MsIDExLCAxLCBLQUxfVFJVRSksICAgIC8vVEFTS19JRF8xMQorICAgICNpZmRlZiBXSVBDX1NVUFBPUlQKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLE1PRF9XSVBDLCAxMiwgMSwgS0FMX1RSVUUpLCAgICAgICAgLy9UQVNLX0lEXzEyCisgICAgI2VuZGlmCisgICAgI2lmIGRlZmluZWQoX19MVEVfUkFUX18pCisgICAgICAgIFhfSVBDX01PRFVMRV9DT05GKDEsIE1PRF9FTDFfTVBDLCA1LCAxLCBLQUxfVFJVRSksICAgICAgLy9UQVNLX0lEXzEzCisgICAgI2VuZGlmCisgICAgI2lmZGVmIF9fTUNJRl9XSUZJX1NVUFBPUlRfXworICAgIFhfSVBDX01PRFVMRV9DT05GKDEsIE1PRF9XRlBNLCAxMywgMSwgS0FMX1RSVUUpLAorICAgICNlbHNlCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSwgTU9EX0RVTU1ZX0NDQ0lTUlYsIDEzLCAxLCBLQUxfVFJVRSksCisgICAgI2VuZGlmCisKKyAgICAvLyBDcm9zcyBDb3JlIElQQyBEaXJlY3Rpb24gOiAgTUQgMiBBUAorICAgIC8vIFByaW9yaXR5IC0tPiBMb2NhbCBtb2R1bGUgSUQgLS0+IEV4dGVybmFsIElEIC0tPiBNYXggc2VudCBtZXNzYWdlIC0tPiBEZXN0aW5hdGlvbiBDaGlwCisgICAgI2RlZmluZSBBUF9VSU5GWV9JRF9GTEFHICgoa2FsX3VpbnQzMikxPDwzMSkKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBBUE1PRF9BR1BTLCAoMHxBUF9VSU5GWV9JRF9GTEFHKSwgMSwgS0FMX1RSVUUpLCAgICAKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBBUE1PRF9ESENQLCAoMXxBUF9VSU5GWV9JRF9GTEFHKSwgMSwgS0FMX1RSVUUpLCAgICAKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBBUE1PRF9HUFMgLCAoMnxBUF9VSU5GWV9JRF9GTEFHKSwgMSwgS0FMX1RSVUUpLCAgICAKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBBUE1PRF9XTVQgLCAoM3xBUF9VSU5GWV9JRF9GTEFHKSwgMSwgS0FMX1RSVUUpLCAgCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSwgQVBNT0RfTUlTQ1RBICwgKDR8QVBfVUlORllfSURfRkxBRyksIDEsIEtBTF9UUlVFKSwKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBBUE1PRF9DQ0NJICwgKDV8QVBfVUlORllfSURfRkxBRyksIDEsIEtBTF9UUlVFKSwKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBBUE1PRF9HRiAsICg2fEFQX1VJTkZZX0lEX0ZMQUcpLCAxLCBLQUxfVFJVRSksCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSwgQVBNT0RfUEtUVFJDICwgKDd8QVBfVUlORllfSURfRkxBRyksIDEsIEtBTF9UUlVFKSwKKyAgICBYX0lQQ19NT0RVTEVfQ09ORigxLCBBUE1PRF9NRERQICwgKDh8QVBfVUlORllfSURfRkxBRyksIDEsIEtBTF9UUlVFKSwKKyAgICAjaWZkZWYgV0lQQ19TVVBQT1JUCisgICAgWF9JUENfTU9EVUxFX0NPTkYoMSxBUE1PRF9MV1hOLCAoOXxBUF9VSU5GWV9JRF9GTEFHKSwgMSwgS0FMX1RSVUUpLAorICAgICNlbmRpZgorI2VuZGlmIC8vaWYgZGVmaW5lZChfX0NDQ0lfUFJPRFVDVF9UWVBFX1RISU5fTU9ERU1fXykKKyNlbmRpZiAgLyogIV9fQ0NDSV9JUENfTU9EVUxFX0NPTkZfSF9fICovCisKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpX2l0X2N0cmxfaWYuaCBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9pdF9jdHJsX2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmMTg1NgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9pdF9jdHJsX2lmLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxMgorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGNjY2lfaXRfY3RybF9pZi5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGUgQVBJIGhlYWRlciBmaWxlIG9mIENDQ0kgSVQgTW9kZSBDb250cm9sLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDMgMjcgMjAxMyBhcC53YW5nCisgKiBbTU9MWTAwMDEyODQ1XSBbQ0NDSV9JVF9DVFJMXSBBZGQgQ0NDSV9JTVMgSVQgbW9kZSBjb250cm9sIGFuZCBtb2RpZnkgZ2VuZXJhdG9yIERMIGFwaQorICoKKyAqIDAzIDIxIDIwMTMgYXAud2FuZworICogW01PTFkwMDAxMjQwOF0gW0NDQ0lfSVRfQ1RSTF0gQWRkIENDQ0lfVFRZIGFuZCBSVCBRdWV1ZSBJVCBtb2RlIGNvbnRyb2wKKyAqCisgKiAwMyAxOCAyMDEzIGFwLndhbmcKKyAqIFtNT0xZMDAwMTIxMjVdIFtDQ0NJX0lUX0NUUkxdIENoYW5nZSBJVCBtb2RlIGFycmFuZ2VtZW50IGFuZCBBZGQgcGFyYW1ldGVyIGZlYXR1cmVzCisgKiBbQ0NDSV9JVF9DVFJMXSBBZGQgRG93bmxpbmsgcGFja2V0IGdlbiBBUEkKKyAqCisgKiAwMyAxMSAyMDEzIGFwLndhbmcKKyAqIFtNT0xZMDAwMTE2OTddIFtDQ0NJX0lQQ10gTW9kaWZ5IGZvciBJVCBMb29wYmFjayBhbmQgY29tcGlsZSB3YXJuaW5nIGZpeAorICogW0NDQ0lfSVBDXSBNb2RpZnkgZm9yIElUIExvb3BiYWNrIGFuZCBjb21waWxlIHdhcm5pbmcgZml4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19DQ0NJX0lUX0NUUkxfSUZfSF9fCisjZGVmaW5lIF9fQ0NDSV9JVF9DVFJMX0lGX0hfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5jbHVkZSBoZWFkZXIgZmlsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAiY2NjaV9pZi5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEYXRhIFN0cnVjdHVyZSBEZWZpbml0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiAgQGJyaWVmIHJlZ2lzdGVyIGluZm9ybWF0aW9uIG9mIGEgdGVzdCBtb2R1bGUuCisgKgorICogIEBwYXJhbSAgcF9yZXRfZXJyX3N0ciAgICAgcmV0dXJuZWQgc3RyaW5nIG9mIGVycm9yIGRlc2NyaXB0aW9uLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzdHJpbmcgYnVmZmVyIGlzIGFsbG9jYXRlZCBieSBjYWxsZXIgKHN5c190ZXN0KSBtb2R1bGUsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGNhbGxlZSBtb2R1bGUgZmlsbHMgaW4gZXJyb3IgZGVzY3JpcHRpb24gaW4gdGhpcyBidWZmZXIuCisgKiAgQHBhcmFtICBwX3JldF9lcnJfc3RyX3N6ICBUaGUgY2FsbGVyIG1vZHVsZSB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gZGVmaW5lIHRoZSBtYXggc2l6ZSBvZiBlcnJvciBzdHJpbmcgYnVmZmVyLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBjYWxsZWUgbW9kdWxlIGZpbGxzIGluIHRoZSBhY3R1YWwgc2l6ZSBvZiBlcnJvciBzdHJpbmcgYnVmZmVyIHdoZW4gcmV0dXJuaW5nLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZTogVGhlIGNhbGxlZSBtb2R1bGUgQ0FOIE5PVCBmaWxsIGludG8gJ3BfcmV0X2Vycl9zdHInIHdpdGggZXhjZWVkaW5nIHNpemUgbGltaXQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgZnVuY3Rpb24gOiBzbnByaW50ZihwX2Vycl9zdHIsIHBfZXJyX3N0cl9zeiwgZm9yYW10X3N0ciwgLi4uKQorICovCisKK3R5cGVkZWYga2FsX2Jvb2wgKCppdF9tb2RlX2Z1bmMpKHZvaWQgKnBfcGFyYW0sIGthbF9jaGFyICpwX3JldF9lcnJfc3RyLCBrYWxfdWludDMyICpwX3JldF9lcnJfc3RyX3N6KTsKKwordHlwZWRlZiBzdHJ1Y3QgX0lUX01PREVfVCB7CisgICAga2FsX2NoYXIgICAgKml0X21vZGVfZGVzY3JpcHRpb247IC8qIHN0cmluZyBkZXNjcmlwdGlvbiBvZiBpdCBtb2RlIGZ1bmN0aW9uICovIAorICAgIGl0X21vZGVfZnVuYyAgICBpdF9tb2RlX2Z1bmM7ICAgICAvKiBpdCBtb2RlIGZ1bmN0aW9uICovCisgICAgdm9pZCAgICAgICAgKml0X21vZGVfZnVuY19wYXJhbTsgIC8qIHBhcmFtZXRlciBvZiBpdCBtb2RlIGZ1bmN0aW9uICovCisgICAga2FsX3VpbnQzMiAgaXRfdGFza19udW1iZXI7ICAgICAgIC8qIG51bWJlciBvZiB0YXNrIHRvIGV4ZWN1dGUgdGhpcyBmdW5jdGlvbiAtIG5vIHVzZSBub3cgKi8KK30gSVRfTU9ERV9UOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHVibGljIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogIGNjY2lfc2VydmljZV9pdF90YWJsZV9yZWcKKyAqICAKKyAqICBAYnJpZWYgcmVnaXN0ZXIgdGVzdCBmdW5jdGlvbiB0byBTWVNfVEVTVCBtb2R1bGUuCisgKgorICogIEBwYXJhbSAgcF9tb2RfbmFtZSAgICAgICAgdGVzdCBtb2R1bGUgbmFtaW5nLgorICogIEBwYXJhbSAgcF90Y2FzZSAgICAgICAgICAgdGVzdCBmdW5jdGlvbiBpbmZvcm1hdGlvbiB1c2VkIHRvIHJlZ2lzdGVyLgorICogIEBwYXJhbSAgdGNhc2VfbnVtICAgICAgICAgbnVtYmVyIG9mIHRlc3QgZnVuY3Rpb24gc3RydWN0LgorICoKKyAqICBAcmV0dXJuIGthbF9ib29sICAgICAgICAgIEtBTF9UUlVFIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBLQUxfRkFMU0UgaWYgZmFpbC4KKyAqLwora2FsX2Jvb2wgY2NjaV9pdF9tb2RlX2NvbnRyb2xfdGFibGVfcmVnKGthbF9jaGFyICpwX21vZHVsZV9uYW1lLCBJVF9NT0RFX1QgKnBfbW9kZSwga2FsX3VpbnQzMiBtb2RlX251bSk7CisKKy8qIQorICogIGNjY2lfaXRfZ2VuX3BhY2tldAorICogIAorICogIEBicmllZiAgRG93bmxpbmsgcGFja2V0IEdQRCBnZW5lcmF0b3IuCisgKgorICogIEBwYXJhbSAgdHlwZSAgICAgICAgICAgIHFibV9ncGQgdHlwZSBvZiBwYWNrZXQuCisgKiAgQHBhcmFtICBwX2Z1biAgICAgICAgICAgZ2VuZXJhdG9yIGZ1bmN0aW9uIHBvaW50ZXIuCisgKgorICogIEByZXR1cm4ga2FsX2Jvb2wgICAgICAgICAgS0FMX1RSVUUgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIEtBTF9GQUxTRSBpZiBmYWlsLgorICovCitjY2NpX2lvX3JlcXVlc3RfdCBjY2NpX2l0X2dlbl9wYWNrZXQocWJtX3R5cGUgdHlwZSk7CisKKworLyohCisgKiBFeGFtcGxlIHVzYWdlOgorICoKKyAqIEBjb2RlCisgCisgI2luY2x1ZGUgImNjY2lfc2VydmljZV9pdF9pZi5oIgorIAorIElUX1RFU1RfQ0FTRV9UIGl0X2Z1bmN0aW9uX3RhYmxlW109eworICAgIHsiSVQgZnVuY3Rpb24gMSJ9LCBpdF9mdW5jdGlvbl8xLCBOVUxMfSwKKyAgICB7IklUIGZ1bmN0aW9uIDIifSwgaXRfZnVuY3Rpb25fMiwgTlVMTH0KKyB9CisKKyBrYWxfYm9vbCAiTW9kdWxlIG5hbWUiX2l0X2NyZWF0ZSgpeworICAgIHJldHVybiBjY2NpX3NlcnZpY2VfaXRfdGFibGVfcmVnKCJNb2R1bGUgbmFtZSIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0X2Z1bmN0aW9uX3RhYmxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaXRfZnVuY3Rpb25fdGFibGUpIC8gc2l6ZW9mKElUX1RFU1RfQ0FTRV9UKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworIH0KKyAKKyAqIEBlbmRjb2RlCisgKi8KKworI2VuZGlmIC8vX19DQ0NJX0lUX0NUUkxfSUZfSF9fCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfcnBjX2NvbmYuaCBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9ycGNfY29uZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhODk3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfcnBjX2NvbmYuaApAQCAtMCwwICsxLDIyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgY2NjaV9ycGNfY29uZi5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBDQ0NJIFJQQyBPUCBJRCBkZWZpbml0aW9uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogJExvZyQKKyAqCisgKiAwOCAwNCAyMDIxIGxpLWNoZW5nLnRzYWkKKyAqIFtNT0xZMDA2NjUwMjldIFtHZW45N11BTU1TIERSREkgbmV3IGFyY2hpdGVjdHVyZSBwb3J0aW5nCisgKiAJCisgKiAJW05SMTUuUjMuTUQ3MDAuTVBdIGZlYXR1cmUgaWQgYW5kIHJwYyBvcCBpZCBjb2RlIHN5bmMgZnJvbSBOUjE1LlIzLk1QCisgKgorICogMDkgMTggMjAyMCBsaS1jaGVuZy50c2FpCisgKiBbTU9MWTAwNTY5NjQ3XSBbTVA3LlBSRUNIRUNLSU4uREVWXVtDb2RlIHN5bmNdIHN5bmMgY29kZSBmcm9tIFQ3MDAKKyAqIFtSMy5NUF1bT0FdREFUQSBDQVJEIFJQQyBPUCBJRCBjb25maWcgbW9kaWZ5LgorICoKKyAqIDA5IDE1IDIwMjAgbGktY2hlbmcudHNhaQorICogW01PTFkwMDU2OTY0N10gW01QNy5QUkVDSEVDS0lOLkRFVl1bQ29kZSBzeW5jXSBzeW5jIGNvZGUgZnJvbSBUNzAwCisgKiBbTVA3L1BSRUNIRUNLSU4uREVWXVtPQV1EQVRBIENBUkQgUlBDIE9QIElEIGNvbmZpZyBtb2RpZnkuCisgKgorICogMDggMTkgMjAyMCBhZGVsLmxpYW8KKyAqIFtNT0xZMDA1NTc1NTJdIFtNVDY4ODBdW0NvbGdpbl1bTS4yXVtNUDZdW1NRQ11bRnVuY3Rpb25dW1NJMV1BZnRlciBlbmFibGUgUElOIGFuZCByZXN0YXJ0LGNhbiBub3QgZW50ZXIgdGhlIFBJTiBpbnB1dCBpbnRlcmZhY2UsYW5kIGNhbXAgb24gbmV0d29yayBkaXJlY3RseS4KKyAqIAkKKyAqIAlEQVRBIENBUkQgUlBDIE9QIElEIGNvbmZpZyBtb2RpZnkuCisgKgorICogMDggMDQgMjAyMCBsaS1jaGVuZy50c2FpCisgKiBbTU9MWTAwNTQ4Mzc4XSBbR2VuOTddW0NvbGdpbl0gIERSREkgZW5hYmxlICBmb3IgTVQ2ODgwX01NUkZfTVQ2MTkwX0VWQgorICogCQorICogCVtUNzAwIE1QXVtPQV1bTUQgQ0NDSV1wYXRjaCBiYWNrIGZyb20gTVQ2ODgwLCBvcGVuIHJwYyBzZXJ2aWNlIElQQ19SUENfR1BJT19BRENfR0VUX1BJTlZBTFVFX09QCisgKgorICogMDcgMjIgMjAyMCBsaS1jaGVuZy50c2FpCisgKiBbTU9MWTAwNTQ4Mzc4XSBbR2VuOTddW0NvbGdpbl0gIERSREkgZW5hYmxlICBmb3IgTVQ2ODgwX01NUkZfTVQ2MTkwX0VWQgorICogCQorICogCVtNVDY4ODAgTVBdW09BXVtNRCBDQ0NJXW9wZW4gcnBjIHNlcnZpY2UgSVBDX1JQQ19HUElPX0FEQ19HRVRfUElOVkFMVUVfT1AKKyAqCisgKiAwMiAyOCAyMDIwIHZlbmRfbWNkX2NpZW5ldDAyNQorICogW01PTFkwMDUwMjI5MF0gW09LXSBTRD8/U0lNPz8/Pz8/PywgPz8/Pz8/Pz8/Mj8/Pz9TSU0/Pz9OQU5PIFNEPworICogaHVhd2VpIDVHIHByb2plY3QgUlBDIHJlcXVlc3QKKyAqCisgKiAxMiAwNiAyMDE5IGppbi5sZWUKKyAqIFtNT0xZMDA0NTc3NDddIFs2NzYzIExHIEtPUiBwcm9qZWN0XSBjYWxsIGZvciBMR0VfU0VDVVJJVFkgcGF0Y2ggZnJvbSBMUjExLlcxNTUyLk1ELlRDMDEuU1AgdG8gTFIxMkEuUjMuVEMwMS5ERVYKKyAqIAkKKyAqIAkuIE1pZ3JhdGUgdG8gVk9NT0xZLlRSVU5LLlZPTUxZCisgKgorICogMDggMDggMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDA0Mjc2MjhdIFtNTVJGXSBxdWVyeSBvcGVyYXRvciBpbmRleCBmb3IgY29tbW9uIHNhciBmZWF0dXJlCisgKiBbVk1PTFldW09BXSBzeW5jIGNjY2kgcnBjIG1zZworICoKKyAqIDA0IDE5IDIwMTkgYWN0b3J5Lm91CisgKiBbTU9MWTAwMzk1MTc2XSBbVGhpbiBNb2RlbSAxLjBdW1BDSWUgcGxhdGZvcm1dIFBDSWUgUGxhdGZvcm0gMXN0IFJlbGVhc2Ugb24gQXBvbGxvCisgKiBbUENJZV1bT0FdW0NDQ0ldIHN1cHBvcnQgcGNpZSB0aGluIG1vZGVtIDEuMAorICoKKyAqIDA4IDE2IDIwMTcgY2hpZW4taHVpLmx1CisgKiBbTU9MWTAwMjcxMDkxXSBbQ0NDSSBSUENdIGFkZCBSUEMgT1AgSUQgZm9yIGdldCBBUCBzeXN0ZW0gcHJvcGVydHkKKyAqIFtDQ0NJX1JQQ10gYWRkIFJQQyBPUCBJRCBmb3IgQVAgc3lzdGVtIHByb3BlcnR5LiAoT1BQTyBmZWF0dXJlIHJlcXVlc3QpCisgKgorICogMDcgMDQgMjAxNyBjaGllbi1odWkubHUKKyAqIFtNT0xZMDAyNjA0MDddIFtNTUwxXVtSRl0gZHJkaSBpbmRleCBmcm9tIGFwIGR0c2kKKyAqIFtDQ0NJIFJQQ10gYWRkIGZvciBEVFNJIHF1ZXJ5LgorICoKKyAqIDA1IDIzIDIwMTcgY2hpZW4taHVpLmx1CisgKiBbTU9MWTAwMjUxNTAyXSBbSVBDT1JFXVtMSElGQ09SRV0gZHluYW1pYyBxdWV1ZSBtYXBwaW5nCisgKiBbQ0NDSV9SUENdW0xISUZDT1JFXSBkeW5hbWljIHF1ZXVlIG1hcHBpbmcuCisgKgorICogMTEgMTMgMjAxNCBjcy5odWFuZworICogW01PTFkwMDA4NDM5M10gW1VNT0xZXVtDQ0NJXSBDQ0NJIGNvbW1vbiBoZWFkZXIgYXJyYW5nZW1lbnQKKyAqIE1lcmdpbmcKKyAqIAkKKyAqIAkvL1VNT0xZL1RSVU5LL1VNT0xZL21jdS9wY29yZS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9jaF9jZmcuaAorICogCQorICogCXRvIC8vVU1PTFkvVFJVTksvVU1PTFkvbWN1L2NvbW1vbi9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9jaF9jZmcuaAorICoKKyAqIDA2IDExIDIwMTQgaWFuLmNoZW5nCisgKiBbTU9MWTAwMDY5MjMxXSBbVEs2MjkxXSBNT0xZIENDQ0kgbWVyZ2UKKyAqIAlUSzYyOTEgQ0NDSSBtaWdyYXRpb24KKyAqCisgKiAwMyAxOCAyMDE0IGNzLmh1YW5nCisgKiBbTU9MWTAwMDU5ODcyXSBbQ0NDSSBSUENdIEFkZCBBREMvR1BJTyBwaW4gdmFsdWUgb3AgaWQsIGFuZCBhZGp1c3QgUkZfQ0xLX0JVRkZFUiBvcCBpZAorICogW0NDQ0kgUlBDXSBBZGQgQURDL0dQSU8gcGluIHZhbHVlIG9wIGlkLCBhbmQgYWRqdXN0IFJGX0NMS19CVUZGRVIgb3AgaWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChfX0NDQ0lfUFJPRFVDVF9UWVBFX1RISU5fTU9ERU1fXykgLy90aGluIG1vZGVtIGNvbmZpZ3VyYXRpb24KKyAgICAvLyBGb3JtYXQ6ICAgICAgT1BOQU1FLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUElEICgyIGJ5dGVzKSAgaXMgc3VwcG9ydCBvciBub3QKKyAgICBYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19DUFNWQ19TRUNVUkVfQUxHT19PUCAgICAgICAgLCAweDIwMDEgICAgICAgICwgS0FMX0ZBTFNFKQorICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0dFVF9TRUNVUkVfUk9fT1AgICAgICAgICAgICAsIDB4MjAwMiAgICAgICAgLCBLQUxfRkFMU0UpCisKKyNpZmRlZiBMR0VfRldfQ09NTU9OCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19SRUFEU0lNTE9DS1RZUEVfT1AgICAgICAgICAgICAgICAgICAgICAgICwgMHgzMDAxICwgS0FMX0ZBTFNFKQorCVhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0xHRVNWQ19GQUNfUkVBREZVU0dGTEFHX09QICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4MzAwMiAsIEtBTF9GQUxTRSkKKwlYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19MR0VTVkNfRkFDX0NIRUNLVU5MT0NLQ09ERVZBTElETkVTU19PUCAgICAgICAgICAgICAgLCAweDMwMDMgLCBLQUxfRkFMU0UpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19DSEVDS05FVFdPUktDT0RFVkFMSURORVNTX09QICAgICAgICAgICAgICwgMHgzMDA0ICwgS0FMX0ZBTFNFKQorCVhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0xHRVNWQ19GQUNfV1JJVEVTSU1MT0NLVFlQRV9PUCAgICAgICAgICAgICAgICAgICAgICAsIDB4MzAwNSAsIEtBTF9GQUxTRSkKKwlYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19MR0VTVkNfRkFDX1JFQURJTUVJX09QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDMwMDYgLCBLQUxfRkFMU0UpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19XUklURUlNRUlfT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHgzMDA3ICwgS0FMX0ZBTFNFKQorCVhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0xHRVNWQ19GQUNfUkVBRE5FVFdPUktDT0RFTElTVE5VTV9PUCAgICAgICAgICAgICAgICAsIDB4MzAwOCAsIEtBTF9GQUxTRSkKKwlYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19MR0VTVkNfRkFDX1JFQURORVRXT1JLQ09ERV9PUCAgICAgICAgICAgICAgICAgICAgICAgLCAweDMwMDkgLCBLQUxfRkFMU0UpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19XUklURV9ORVRXT1JLX0NPREVfTElTVF9OVU1fT1AgICAgICAgICAgICwgMHgzMDBBICwgS0FMX0ZBTFNFKQorCVhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0xHRVNWQ19GQUNfV1JJVEVfVU5MT0NLX0NPREVfVkVSSUZZX0ZBSUxfQ09VTlRfT1AgICAsIDB4MzAwQiAsIEtBTF9GQUxTRSkKKwlYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19MR0VTVkNfRkFDX1JFQURfVU5MT0NLX0NPREVfVkVSSUZZX0ZBSUxfQ09VTlRfT1AgICAgLCAweDMwMEMgLCBLQUxfRkFMU0UpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19XUklURV9VTkxPQ0tfRkFJTF9DT1VOVF9PUCAgICAgICAgICAgICAgICwgMHgzMDBEICwgS0FMX0ZBTFNFKQorCVhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0xHRVNWQ19GQUNfUkVBRF9VTkxPQ0tfRkFJTF9DT1VOVF9PUCAgICAgICAgICAgICAgICAsIDB4MzAwRSAsIEtBTF9GQUxTRSkKKwlYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19MR0VTVkNfRkFDX1dSSVRFX1VOTE9DS19DT0RFX09QICAgICAgICAgICAgICAgICAgICAgLCAweDMwMEYgLCBLQUxfRkFMU0UpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19WRVJJRllfVU5MT0NLX0NPREVfT1AgICAgICAgICAgICAgICAgICAgICwgMHgzMDEwICwgS0FMX0ZBTFNFKQorCVhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0xHRVNWQ19GQUNfV1JJVEVfTkVUV09SS19DT0RFX09QICAgICAgICAgICAgICAgICAgICAsIDB4MzAxMSAsIEtBTF9GQUxTRSkKKwlYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19MR0VTVkNfRkFDX0lOSVRfU0lNX0xPQ0tfREFUQV9PUCAgICAgICAgICAgICAgICAgICAgLCAweDMwMTIgLCBLQUxfRkFMU0UpCisjZW5kaWYKKworICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0VJTlRfR0VUTlVNX09QICAgICAgICAgICAgICAsIDB4NDAwMSAgICAgICAgLCBLQUxfRkFMU0UpCisgICAgWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfR1BJT19HRVRQSU5fT1AgICAgICAgICAgICAgICwgMHg0MDAyICAgICAgICAsIEtBTF9UUlVFKQorICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0FEQ19HRVROVU1fT1AgICAgICAgICAgICAgICAsIDB4NDAwMyAgICAgICAgLCBLQUxfRkFMU0UpCisgICAgWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfUVVFUllfRU1JX09QICAgICAgICAgICAgICAgICwgMHg0MDA0ICAgICAgICAsIEtBTF9GQUxTRSkKKyAgICBYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19FSU5UX0dFVEFUVFJJQlVURV9PUCAgICAgICAgLCAweDQwMDUgICAgICAgICwgS0FMX1RSVUUpCisgICAgWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfR1BJT19HRVRWQUxVRV9PUCAgICAgICAgICAgICwgMHg0MDA2ICAgICAgICAsIEtBTF9GQUxTRSkKKyAgICBYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19BRENfR0VUVkFMVUVfT1AgICAgICAgICAgICAgLCAweDQwMDcgICAgICAgICwgS0FMX0ZBTFNFKQorICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX1JGX0NMS19CVUZGRVJfT1AgICAgICAgICAgICAsIDB4NDAwOCAgICAgICAgLCBLQUxfRkFMU0UpCisgICAgWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfR1BJT19BRENfR0VUX1BJTlZBTFVFX09QICAgICwgMHg0MDA5ICAgICAgICAsIEtBTF9UUlVFKQorICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX1VTSU0yTkZDX09QICAgICAgICAgICAgICAgICAsIDB4NDAwQSAgICAgICAgLCBLQUxfVFJVRSkKKyAgICBYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19EU1BfRU1JX01QVV9TRVRUSU5HICAgICAgICAgLCAweDQwMEIgICAgICAgICwgS0FMX0ZBTFNFKQorICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0NDQ0lfUVVFVUVfTUFQUElORyAgICAgICAgICAsIDB4NDAwQyAgICAgICAgLCBLQUxfRkFMU0UpCisgICAgWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEhJRkNPUkVfUVVFVUVfTUFQUElORyAgICAgICwgMHg0MDBEICAgICAgICAsIEtBTF9UUlVFKQorICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0RUU0lfUVVFUllfT1AgICAgICAgICAgICAgICAsIDB4NDAwRSAgICAgICAgLCBLQUxfVFJVRSkKKyAgICBYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19RVUVSWV9BUF9TWVNfUFJPUEVSVFkgICAgICAgLCAweDQwMEYgICAgICAgICwgS0FMX0ZBTFNFKQorCVhfQ0NDSV9SUENfQ09ORihJUENfUlBDX1NBUl9UQUJMRV9JRFhfUVVFUllfT1AgICAgICAsIDB4NDAxMCAgICAgICAgLCBLQUxfVFJVRSkKKwlYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19FRlVTRV9CTE9XSU5HICAgICAgICAgICAgICAgLCAweDQwMTEgICAgICAgICwgS0FMX0ZBTFNFKQorCVhfQ0NDSV9SUENfQ09ORihJUENfUlBDX1RSTkdfR0VUX1JBTkRPTV9OVU1CRVIgICAgICAsIDB4NDAxMiAgICAgICAgLCBLQUxfVFJVRSkKKwlYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19RVUVSWV9DQVJEX1RZUEUgICAgICAgICAgICAgLCAweDQwMTMgICAgICAgICwgS0FMX0ZBTFNFKQorICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0FNTVNfRFJESV9DT05UUk9MICAgICAgICAgICAsIDB4NDAxNCAgICAgICAgLCBLQUxfRkFMU0UpCisgICAgWF9DQ0NJX1JQQ19DT05GKEVFTUNTX09QX0lUX1ZBTCAgICAgICAgICAgICAgICAgICAgICwgMHg0MzIxICAgICAgICAsIEtBTF9UUlVFKQorI2Vsc2UgLy9pZiBkZWZpbmVkKF9fQ0NDSV9QUk9EVUNUX1RZUEVfVEhJTl9NT0RFTV9fKQorICAgIC8vIEZvcm1hdDogICAgICBPUE5BTUUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QSUQgKDIgYnl0ZXMpICBpcyBzdXBwb3J0IG9yIG5vdAorICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0NQU1ZDX1NFQ1VSRV9BTEdPX09QICAgICAgICAsIDB4MjAwMSAgICAgICAgLCBLQUxfVFJVRSkKKyAgICBYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19HRVRfU0VDVVJFX1JPX09QICAgICAgICAgICAgLCAweDIwMDIgICAgICAgICwgS0FMX1RSVUUpCisKKyNpZmRlZiBMR0VfRldfQ09NTU9OCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19SRUFEU0lNTE9DS1RZUEVfT1AgICAgICAgICAgICAgICAgICAgICAgICwgMHgzMDAxICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19SRUFERlVTR0ZMQUdfT1AgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHgzMDAyICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19DSEVDS1VOTE9DS0NPREVWQUxJRE5FU1NfT1AgICAgICAgICAgICAgICwgMHgzMDAzICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19DSEVDS05FVFdPUktDT0RFVkFMSURORVNTX09QICAgICAgICAgICAgICwgMHgzMDA0ICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19XUklURVNJTUxPQ0tUWVBFX09QICAgICAgICAgICAgICAgICAgICAgICwgMHgzMDA1ICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19SRUFESU1FSV9PUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHgzMDA2ICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19XUklURUlNRUlfT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHgzMDA3ICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19SRUFETkVUV09SS0NPREVMSVNUTlVNX09QICAgICAgICAgICAgICAgICwgMHgzMDA4ICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19SRUFETkVUV09SS0NPREVfT1AgICAgICAgICAgICAgICAgICAgICAgICwgMHgzMDA5ICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19XUklURV9ORVRXT1JLX0NPREVfTElTVF9OVU1fT1AgICAgICAgICAgICwgMHgzMDBBICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19XUklURV9VTkxPQ0tfQ09ERV9WRVJJRllfRkFJTF9DT1VOVF9PUCAgICwgMHgzMDBCICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19SRUFEX1VOTE9DS19DT0RFX1ZFUklGWV9GQUlMX0NPVU5UX09QICAgICwgMHgzMDBDICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19XUklURV9VTkxPQ0tfRkFJTF9DT1VOVF9PUCAgICAgICAgICAgICAgICwgMHgzMDBEICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19SRUFEX1VOTE9DS19GQUlMX0NPVU5UX09QICAgICAgICAgICAgICAgICwgMHgzMDBFICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19XUklURV9VTkxPQ0tfQ09ERV9PUCAgICAgICAgICAgICAgICAgICAgICwgMHgzMDBGICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19WRVJJRllfVU5MT0NLX0NPREVfT1AgICAgICAgICAgICAgICAgICAgICwgMHgzMDEwICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19XUklURV9ORVRXT1JLX0NPREVfT1AgICAgICAgICAgICAgICAgICAgICwgMHgzMDExICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfTEdFU1ZDX0ZBQ19JTklUX1NJTV9MT0NLX0RBVEFfT1AgICAgICAgICAgICAgICAgICAgICwgMHgzMDEyICwgS0FMX1RSVUUpCisjZW5kaWYKKwkKKyAgICBYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19FSU5UX0dFVE5VTV9PUCAgICAgICAgICAgICAgLCAweDQwMDEgICAgICAgICwgS0FMX1RSVUUpCisgICAgWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfR1BJT19HRVRQSU5fT1AgICAgICAgICAgICAgICwgMHg0MDAyICAgICAgICAsIEtBTF9UUlVFKQorICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0FEQ19HRVROVU1fT1AgICAgICAgICAgICAgICAsIDB4NDAwMyAgICAgICAgLCBLQUxfVFJVRSkKKyAgICBYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19RVUVSWV9FTUlfT1AgICAgICAgICAgICAgICAgLCAweDQwMDQgICAgICAgICwgS0FMX1RSVUUpCisgICAgWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfRUlOVF9HRVRBVFRSSUJVVEVfT1AgICAgICAgICwgMHg0MDA1ICAgICAgICAsIEtBTF9UUlVFKQorICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0dQSU9fR0VUVkFMVUVfT1AgICAgICAgICAgICAsIDB4NDAwNiAgICAgICAgLCBLQUxfVFJVRSkKKyAgICBYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19BRENfR0VUVkFMVUVfT1AgICAgICAgICAgICAgLCAweDQwMDcgICAgICAgICwgS0FMX1RSVUUpCisgICAgWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfUkZfQ0xLX0JVRkZFUl9PUCAgICAgICAgICAgICwgMHg0MDA4ICAgICAgICAsIEtBTF9UUlVFKQorICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0dQSU9fQURDX0dFVF9QSU5WQUxVRV9PUCAgICAsIDB4NDAwOSAgICAgICAgLCBLQUxfVFJVRSkKKyAgICBYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19VU0lNMk5GQ19PUCAgICAgICAgICAgICAgICAgLCAweDQwMEEgICAgICAgICwgS0FMX1RSVUUpCisgICAgWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfRFNQX0VNSV9NUFVfU0VUVElORyAgICAgICAgICwgMHg0MDBCICAgICAgICAsIEtBTF9UUlVFKQorICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX0NDQ0lfUVVFVUVfTUFQUElORyAgICAgICAgICAsIDB4NDAwQyAgICAgICAgLCBLQUxfVFJVRSkKKyAgICBYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19MSElGQ09SRV9RVUVVRV9NQVBQSU5HICAgICAgLCAweDQwMEQgICAgICAgICwgS0FMX1RSVUUpCisgICAgWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfRFRTSV9RVUVSWV9PUCAgICAgICAgICAgICAgICwgMHg0MDBFICAgICAgICAsIEtBTF9UUlVFKQorICAgIFhfQ0NDSV9SUENfQ09ORihJUENfUlBDX1FVRVJZX0FQX1NZU19QUk9QRVJUWSAgICAgICAsIDB4NDAwRiAgICAgICAgLCBLQUxfVFJVRSkKKwlYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19TQVJfVEFCTEVfSURYX1FVRVJZX09QICAgICAgLCAweDQwMTAgICAgICAgICwgS0FMX1RSVUUpCisJWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfRUZVU0VfQkxPV0lORyAgICAgICAgICAgICAgICwgMHg0MDExICAgICAgICAsIEtBTF9UUlVFKQorCVhfQ0NDSV9SUENfQ09ORihJUENfUlBDX1RSTkdfR0VUX1JBTkRPTV9OVU1CRVIgICAgICAsIDB4NDAxMiAgICAgICAgLCBLQUxfVFJVRSkKKwlYX0NDQ0lfUlBDX0NPTkYoSVBDX1JQQ19RVUVSWV9DQVJEX1RZUEUgICAgICAgICAgICAgLCAweDQwMTMgICAgICAgICwgS0FMX1RSVUUpCisgICAgWF9DQ0NJX1JQQ19DT05GKElQQ19SUENfQU1NU19EUkRJX0NPTlRST0wgICAgICAgICAgICwgMHg0MDE0ICAgICAgICAsIEtBTF9UUlVFKQorICAgIFhfQ0NDSV9SUENfQ09ORihFRU1DU19PUF9JVF9WQUwgICAgICAgICAgICAgICAgICAgICAsIDB4NDMyMSAgICAgICAgLCBLQUxfVFJVRSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpX3JwY19pZi5oIGIvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpX3JwY19pZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NDE4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfcnBjX2lmLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxMgorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGNjY2lfcnBjX2lmLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIEludGVyZmFjZSBvZiBDQ0NJX1JQQyBzZXJ2aWNlLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDQgMTkgMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDAzOTUxNzZdIFtUaGluIE1vZGVtIDEuMF1bUENJZSBwbGF0Zm9ybV0gUENJZSBQbGF0Zm9ybSAxc3QgUmVsZWFzZSBvbiBBcG9sbG8KKyAqIFtQQ0llXVtPQV1bQ0NDSV0gc3VwcG9ydCBwY2llIHRoaW4gbW9kZW0gMS4wCisgKgorICogMDIgMTcgMjAxNCBjcy5odWFuZworICogW01PTFkwMDA1NjI0Nl0gW01UNjU5NV0gW0NDQ0ldIEFkZCBDQ0NJIFJQQyBnZW5lcmFsIGdyb3VwIEFQSQorICogW0NDQ0kgUlBDXSBBZGQgQ0NDSSBSUEMgZ2VuZXJhbCBxdWVyeSBmdW5jdGlvbi4KKyAqCisgKiAwNiAyNyAyMDEzIGFwLndhbmcKKyAqIFtNT0xZMDAwMjc1NDRdIFtDQ0NJIFJQQ10gQWRkIENDQ0kgUlBDIFNWQyBhbmQgQVBJCisgKiBbQ0NDSV9SUENdIE1vZGlmeSBmb3Igc2NldXJpdHkgUlBDIHNlcnZpY2UKKyAqCisgKiAwNSAwOSAyMDEzIGFwLndhbmcKKyAqIFtNT0xZMDAwMjE5OThdIFtNVDYyOTAgQnJpbmctdXBdW0NDQ0lfSVRdIENDQ0kgSVQgcmVsYXRlZCBjb2RlIGNoZWNraW4KKyAqIFtDQ0NJIFJQQ10gQ0NDSSBSUEMgSVQgbW9kaWZ5IGFuZCByeCBjYWxsYmFjayBydWxlIG1vZGlmeQorICoKKyAqIDAzIDE4IDIwMTMgdmVuZF9icmlhbi5jaGlhbmcKKyAqIFtNT0xZMDAwMTA3NTBdIFtDQ0NJX1JQQ10gbmV3IGZlYXR1cmUgY2hlY2sgaW4KKyAqIGZpeCBjb21waWxlIHdhcm5pbmcgYW5kIGJ1aWxkIGVycm9yCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0NDQ0lfUlBDX0lGX0hfXworI2RlZmluZSBfX0NDQ0lfUlBDX0lGX0hfXworCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluZSBtYXJjbyBvciBjb25zdGFudC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluZSBkYXRhIHN0cnVjdHVyZXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSUEMgb3AgY29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyN1bmRlZiBYX0NDQ0lfUlBDX0NPTkYKKyNkZWZpbmUgWF9DQ0NJX1JQQ19DT05GKE9QTkFNRSwgT1BJRCwgSVNfU1VQUE9SVCkgT1BOQU1FID0gT1BJRCwgCit0eXBlZGVmIGVudW0KK3sKKyAgI2luY2x1ZGUgImNjY2lfcnBjX2NvbmYuaCIKK30gSVBDX1JQQ19PUF9JRF9UOworI3VuZGVmIFhfQ0NDSV9SUENfQ09ORgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5lIG1hY3Jvcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5lIGV4cG9ydCB2YXJpYWJsZXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlY2xhcmUgZnVuY3Rpb24gcHJvdG90eXBlLiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBGdW5jdGlvbiBmb3IgcnBjIGluaXQqLwora2FsX2Jvb2wgY2NjaV9ycGNfc3ZjX2luaXQodm9pZCk7CitrYWxfYm9vbCBjY2NpX3JwY190YXNrX21haW5faW5pdCh2b2lkKTsKKworLyogUlBDIHNlcnZpY2UgQVBJICovCitrYWxfaW50MzIgSVBDX1JQQ19XcmFwcGVyKElQQ19SUENfT1BfSURfVCBycGNfb3AsLi4uKTsKKworLyogUlBDIHNlcnZpY2UgZnVuY3Rpb24qLwora2FsX2ludDMyIElQQ19SUENfU2VjdXJlX0FsZ28gKGthbF91aW50OCBEaXJlY3Rpb24sIGthbF91aW50MzIgQ29udGVudEFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQzMiBDb250ZW50TGVuLCBrYWxfdWludDggKkN1c3RvbVNlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICpSZXNUZXh0KTsKKwora2FsX2ludDMyIElQQ19SUENfR2V0X1NlY3VyZV9STyhrYWxfdWludDgqIFJlc1RleHQsIGthbF91aW50MzIgUmVzTGVuKTsKKworCitrYWxfaW50MzIgSVBDX1JQQ19FSU5UX0dldE51bWJlcihrYWxfdWludDggKkVpbnROYW1lLCBrYWxfdWludDMyIEVpbnROYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQzMiAqRWludE5vKTsKKwora2FsX2ludDMyIElQQ19SUENfR1BJT19HZXRQaW4oa2FsX3VpbnQ4ICpHUElPTmFtZSwga2FsX3VpbnQzMiBHUElPTmFtZUxlbmd0aCwga2FsX3VpbnQzMiAqR1BJT1Bpbik7CisKK2thbF9pbnQzMiBJUENfUlBDX0FEQ19HZXRDaGFubmVsTnVtYmVyKGthbF91aW50OCAqQ2hhbm5lbE5hbWUsIGthbF91aW50MzIgQ2hhbm5lbE5hbWVMZW5ndGgsIGthbF91aW50MzIgKkNoYW5uZWxOdW1iZXIpOworCitrYWxfaW50MzIgSVBDX1JQQ19RdWVyeV9FTUkoa2FsX3VpbnQzMiAqRU1JVHlwZSwga2FsX3VpbnQzMiAqQ2xvY2tSYXRlKTsKKworI2lmIGRlZmluZWQoX19TSU1fSE9UX1NXQVBfU1VQUE9SVF9fKQora2FsX2ludDMyIElQQ19SUENfRUlOVF9HZXRBdHRyaWJ1dGUgKGthbF91aW50OCAqRWludE5hbWUsIGthbF91aW50MzIgRWludE5hbWVMZW5ndGgsIGthbF91aW50MzIgcXVlcnlUeXBlLCB2b2lkICpyZXN1bHQsIGthbF91aW50MzIgcmVzdWx0TGVuZ3RoKTsKKyNlbmRpZgorCitrYWxfaW50MzIgSVBDX1JQQ19HZW5lcmFsX1F1ZXJ5IChrYWxfdWludDMyIE9QSUQsIHZvaWQgKmlucHV0LCBrYWxfdWludDMyIGlucHV0TGVuZ3RoLHZvaWQgKnJlc3VsdCwga2FsX3VpbnQzMiByZXN1bHRMZW5ndGgpOworCisjZW5kaWYgIC8qICFfX0NDQ0lfUlBDX0lGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpX3NobV9ibV9pZi5oIGIvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpX3NobV9ibV9pZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZGNjNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lfc2htX2JtX2lmLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENDQ0kgU0hNIEJNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy9DQ0NJX1NITV9CTSBJVCBvcHRpb24KKy8vI2RlZmluZSBDQ0NJX1NITV9CTV9JVF9PUFRJT04KKworLy9DQ0NJX1NITV9CTSBBUCBJVCBvcHRpb24KKy8vI2RlZmluZSBDQ0NJX1NITV9CTV9BUF9JVF9PUFRJT04KKworI2lmbmRlZiBfQ0NDSV9TSE1fQk1fSUZfSAorI2RlZmluZSBfQ0NDSV9TSE1fQk1fSUZfSAorCisjZGVmaW5lIENDSUZfTk9USUZZX0NIQU5ORUwgNworCit0eXBlZGVmIGVudW0KK3sKKyAgICBDQ0NJX1NITV9CTV9VU0VSX0RITDEsCisJQ0NDSV9TSE1fQk1fVVNFUl9ESEwyLAorCUNDQ0lfU0hNX0JNX1VTRVJfREhMMywKKwlDQ0NJX1NITV9CTV9VU0VSX0RITDQsCisJQ0NDSV9TSE1fQk1fVVNFUl9ESEw1LAorCUNDQ0lfU0hNX0JNX1VTRVJfREhMNiwKKwlDQ0NJX1NITV9CTV9VU0VSX0RITDcsCisJQ0NDSV9TSE1fQk1fVVNFUl9ESEw4LAorCUNDQ0lfU0hNX0JNX1VTRVJfREhMOSwKKwlDQ0NJX1NITV9CTV9VU0VSX0RITDEwLAorCUNDQ0lfU0hNX0JNX1VTRVJfREhMMTEsCisJQ0NDSV9TSE1fQk1fVVNFUl9ESEwxMiwKKwlDQ0NJX1NITV9CTV9VU0VSX0RITDEzLAorCUNDQ0lfU0hNX0JNX1VTRVJfREhMMTQsCisJQ0NDSV9TSE1fQk1fVVNFUl9ESEwxNSwKKwlDQ0NJX1NITV9CTV9VU0VSX0RITDE2LAorCUNDQ0lfU0hNX0JNX1VTRVJfREhMMTcsCisJQ0NDSV9TSE1fQk1fVVNFUl9ESEwxOCwKKwlDQ0NJX1NITV9CTV9VU0VSX0RITDE5LAorCUNDQ0lfU0hNX0JNX1VTRVJfREhMMjAsCisgICAgQ0NDSV9TSE1fQk1fVVNFUl9DTlQKK31DQ0NJX1NITV9CTV9VU0VSX0JVRkZfRU5VTTsKKwordHlwZWRlZiBlbnVtCit7CisJQ0NDSV9TSE1fQk1fQlVGRl9JTlZBTElELAorICAgIENDQ0lfU0hNX0JNX0JVRkZfSFcsCisJQ0NDSV9TSE1fQk1fQlVGRl9TVywKKwlDQ0NJX1NITV9CTV9CVUZGX0VYUCwKKwlDQ0NJX1NITV9CTV9CVUZGX0hXX1NUT1BfQ0FMTEJBQ0ssCisJQ0NDSV9TSE1fQk1fVFlQRV9DTlQKK31DQ0NJX1NITV9CTV9CVUZGX1RZUEVfRU5VTTsKKworCisvLyB1c2VyIG11c3QgY29uZmlndXJlIGJlZnVyZSB1c2luZwordHlwZWRlZiBlbnVtCit7CisJTU9EVUxFX0lELAorCUJVRkZFUl9UWVBFLAorCVBBR0VfU0laRV9ETCwKKwlQQUdFX1NJWkVfVUwsCisJQlVGRkVSX1NJWkVfREwsCisJQlVGRkVSX1NJWkVfVUwsCQorCVBBR0VfQ09VTlRfREwsCisJUEFHRV9DT1VOVF9VTCwKKwlDT05GX0FUVFJJQlVURV9OVU0KK31DQ0NJX1NITV9CTV9VU0VSX0NPTkZfRU5VTTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQ0NDSV9TSE1fQk1fRExfTUQyQVAsCisgICAgQ0NDSV9TSE1fQk1fVUxfQVAyTUQKK31DQ0NJX1NITV9CTV9ESVJFQ1RJT047CisKKwordHlwZWRlZiBzdHJ1Y3QgQ0NDSV9TSE1fQk1fSUxNX0xPQ0FMX1BBUkFfVF9TVFJVQ1QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgIHVzZXJfaWQ7Cit9IENDQ0lfU0hNX0JNX0lMTV9MT0NBTF9QQVJBX1Q7CisKKworI2lmIGRlZmluZWQgKF9fTVRLX1RBUkdFVF9fKQorLy91c2VyIElEIC0+IHtSeCBtb2R1bGUgSUQsIGJ1ZmZlciB0eXBlLCBETCBwYWdlIHNpemUoQVApLCBVTCBwYWdlIHNpemUoQVApLCBETCBidWZmZXIgc2l6ZShBUCksIFVMIGJ1ZmZlciBzaXplKEFQKX0KKy8vYnVmZmVyIGFuZCBwYWdlIHNpemUgbmVlZCB0byA4LWJ5dGUgYWxpZ24KK2V4dGVybiBrYWxfdWludDMyIGNjY2lfc2htX2JtX2NvbmZfdGFibGUgW0NDQ0lfU0hNX0JNX1VTRVJfQ05UXVtDT05GX0FUVFJJQlVURV9OVU1dOworI2VuZGlmCisKKwordm9pZCBjY2NpX3NobWN0cmxfdGltZXJfY2IoKTsKKy8vZm9yIHV0CitrYWxfdWludDMyKiBjY2NpX3NobV9tb3ZlX2N0cmxfcHRyX29uZV9wYWdlKGthbF91aW50MzIgdXNlcl9pZCwga2FsX3VpbnQzMiogYnVmZl9wdHIsIGthbF9ib29sIGlzX2RsKTsKK2thbF91aW50MzIqIGNjY2lfc2htX3BhZ2VfbnVtX3RvX2FkZHIoa2FsX3VpbnQzMiB1c2VyX2lkLCBrYWxfdWludDMyIGN1cl9wYWdlX251bSwga2FsX2Jvb2wgaXNfZGwpOwora2FsX3VpbnQzMiBjY2NpX3NobV9tb3ZlX2N0cmxfcHRyX29uZV9wYWdlX251bWJlcihrYWxfdWludDMyIHVzZXJfaWQsIGthbF91aW50MzIgY3VyX3BhZ2VfbnVtLCBrYWxfYm9vbCBpc19kbCk7CisKKworLy92b2lkIGNjY2lfc2htY3RybF9pb3JfdWxfY2IoQ0NDSV9DSEFOTkVMX1QgY2hhbm5lbCwgY2NjaV9pb19yZXF1ZXN0X3QqIGlvcik7CitrYWxfYm9vbCBjY2NpX3NobV9zcnZfaW5pdCgpOwora2FsX2Jvb2wgY2NjaV9zaG1fc3J2X3dyaXRlX25vdGl0eShrYWxfdWludDMyIHVzZXJfaWQpOworCit0eXBlZGVmIHZvaWQgKCpDQ0NJX1NITV9CTV9UWF9DQUxMQkFDSykoa2FsX3VpbnQzMiogYWRkcmVzcywga2FsX3VpbnQzMiBzaXplKTsgIC8vSFcgVHggY2FsbCBiYWNrIGZ1bmN0aW9uCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlVzZXIgQVBJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoX19DQ0lTTUNPUkVfU1VQUE9SVF9fKSAmJiBkZWZpbmVkIChfX01US19UQVJHRVRfXykKKwora2FsX2Jvb2wgY2NjaV9zaG1fc3J2X2J1Zl9yZWdpc3RlcihrYWxfdWludDMyIHVzZXJfaWQsIENDQ0lfU0hNX0JNX1RYX0NBTExCQUNLIGZ1bnApOwora2FsX2Jvb2wgY2NjaV9zaG1fc3J2X3dyaXRlX2FsbG9jKGthbF91aW50MzIgdXNlcl9pZCwga2FsX3VpbnQzMioqIGFkZHJlc3MsIGthbF91aW50MzIqIHNpemUpOwora2FsX2Jvb2wgY2NjaV9zaG1fc3J2X3dyaXRlX2RvbmUoa2FsX3VpbnQzMiB1c2VyX2lkLCBrYWxfdWludDMyKiBhZGRyZXNzLCBrYWxfdWludDMyIGxlbmd0aCk7CitrYWxfYm9vbCBjY2NpX3NobV9zcnZfcmVhZF9nZXQoa2FsX3VpbnQzMiB1c2VyX2lkLCBrYWxfdWludDMyKiogYWRkcmVzcywga2FsX3VpbnQzMiogc2l6ZSk7CitrYWxfYm9vbCBjY2NpX3NobV9zcnZfcmVhZF9kb25lKGthbF91aW50MzIgdXNlcl9pZCk7CitrYWxfYm9vbCBjY2NpX3NobV9zcnZfZ2V0X2h3X2J1ZmZlcl9pbmZvKGthbF91aW50MzIgdXNlcl9pZCwga2FsX3VpbnQzMioqIGFkZHJlc3MsIGthbF91aW50MzIqIHNpemUpOwora2FsX2Jvb2wgY2NjaV9zaG1fc3J2X3F1ZXJ5X2J1ZmZfc3RhdHVzKGthbF91aW50MzIgdXNlcl9pZCk7CitrYWxfdWludDMyIGNjY2lfc2htX3Nydl9xdWVyeV9wYWdlX3NpemUoa2FsX3VpbnQzMiB1c2VyX2lkLCBrYWxfYm9vbCBpc19kbCk7CitrYWxfdWludDMyIGNjY2lfc2htX3Nydl9xdWVyeV9wYWdlX2NvdW50KGthbF91aW50MzIgdXNlcl9pZCwga2FsX2Jvb2wgaXNfZGwpOwora2FsX3VpbnQzMiBjY2NpX3NobV9zcnZfcXVlcnlfcGFnZV9zdGF0dXMgKGthbF91aW50MzIgdXNlcl9pZCwga2FsX3VpbnQzMiogYWRkcmVzcywga2FsX2Jvb2wgaXNfZGwpOyAvL2FkZHJlc3Mgbm90IGluY2x1ZGUgcGFnZSBoZWFkZXIKK2thbF91aW50MzIgY2NjaV9zaG1fc3J2X3F1ZXJ5X3RvX2JlX3JlYWRfcGFnZV9jb3VudChrYWxfdWludDMyIHVzZXJfaWQsIGthbF9ib29sIGlzX2RsKTsvL3dyaXRlIGRvbmUgYnV0IG5vdCByZWFkIGRvbmUKK2thbF9ib29sIGNjY2lfc2htX3Nydl9wb2xsX2J1ZmYoa2FsX3VpbnQzMiB1c2VyX2lkLCBrYWxfdWludDMyIHRpbWVfb3V0LCBrYWxfYm9vbCBpc19kbCk7Ly9jaGVjayBpZiBhbGwgcGFnZXMgYXJlIHJlYWQgd2l0aCB0aW1lb3V0CitrYWxfYm9vbCBjY2NpX3NobV9zcnZfdW5sb2NrX3JlYWRfaWxtKGthbF91aW50MzIgdXNlcl9pZCk7Cit2b2lkIGNjY2lfc2htX3Nydl9zdG9wX2NhbGxiYWNrKGthbF91aW50MzIgdXNlcl9pZCk7Cit2b2lkIGNjY2lfc2htX3Nydl9zdGFydF9jYWxsYmFjayhrYWxfdWludDMyIHVzZXJfaWQpOwora2FsX2Jvb2wgY2NjaV9zaG1fc3J2X3dyaXRlX2FsbG9jX3NpbmdsZV91c3Ioa2FsX3VpbnQzMiB1c2VyX2lkLCBrYWxfdWludDMyKiogYWRkcmVzcywga2FsX3VpbnQzMiogc2l6ZSk7CitrYWxfYm9vbCBjY2NpX3NobV9zcnZfd3JpdGVfZG9uZV9zaW5nbGVfdXNyKGthbF91aW50MzIgdXNlcl9pZCwga2FsX3VpbnQzMiogYWRkcmVzcywga2FsX3VpbnQzMiBsZW5ndGgpOwordm9pZCBjY2NpX3NobV9zcnZfZ2V0X2RhdGFfc2htX3RvdGFsX3NpemUoa2FsX3VpbnQzMiAqcF9tZW1zaXplKTsKK3ZvaWQgY2NjaV9zaG1fc3J2X2dldF9kYXRhX3NobV91c2VyX3NpemUoa2FsX3VpbnQzMiB1c2VyX2lkLCBDQ0NJX1NITV9CTV9ESVJFQ1RJT04gZGlyLCBrYWxfdWludDMyICpwX21lbXNpemUpOworCisKKy8vRXhjZXB0aW9uCitrYWxfYm9vbCBjY2NpX3NobV9zcnZfaW5pdF9leCgpOwora2FsX2Jvb2wgY2NjaV9zaG1fYm1fc2VuZF9ub3RpZnlfZXgoa2FsX3VpbnQzMiB1c2VyX2lkKTsKK2thbF9ib29sIGNjY2lfc2htX2JtX2ZyZWVfZGxfcGFnZXNfZXgoa2FsX3VpbnQzMiB1c2VyX2lkKTsKKwora2FsX2Jvb2wgY2NjaV9zaG1fc3J2X3dyaXRlX2FsbG9jX2V4KGthbF91aW50MzIgdXNlcl9pZCwga2FsX3VpbnQzMioqIGFkZHJlc3MsIGthbF91aW50MzIqIHNpemUpOy8vIDogY2FsbGVkIGJ5IHVzZXIgdG8gY2hlY2sgYW5kIGdldCB0aGUgd3JpdGUgYWRkcmVzcyBpbiBTSE0gYnVmZmVyCitrYWxfYm9vbCBjY2NpX3NobV9zcnZfd3JpdGVfZG9uZV9leChrYWxfdWludDMyIHVzZXJfaWQsIGthbF91aW50MzIqIGFkZHJlc3MsIGthbF91aW50MzIgbGVuZ3RoKTsvLzogY2FsbGVkIGJ5IHVzZXIgZm9yIHdyaXRlIGRvbmUgbm90aWZpY2F0aW9uCitrYWxfYm9vbCBjY2NpX3NobV9zcnZfcmVhZF9nZXRfZXgoa2FsX3VpbnQzMiB1c2VyX2lkLCBrYWxfdWludDMyKiogYWRkcmVzcywga2FsX3VpbnQzMiogc2l6ZSk7Ly86IGNhbGxlZCBieSB1c2VyIHRvIGdldCB0aGUgcmVhZGFibGUgZGF0YSBmcm9tIFNITSBidWZmZXIKK2thbF9ib29sIGNjY2lfc2htX3Nydl9yZWFkX2RvbmVfZXgoa2FsX3VpbnQzMiB1c2VyX2lkKTsvLzogY2FsbGVkIGJ5IHVzZXIgZm9yIHJlYWQgZG9uZSBub3RpZmljYXRpb24gdG8gZnJlZSBidWZmZXIKKy8va2FsX3VpbnQzMiBjY2NpX3NobV9zcnZfcXVlcnlfd3JpdHRlbl9wYWdlX2NvdW50X2V4KGthbF91aW50MzIgdXNlcl9pZCwga2FsX2Jvb2wgaXNfZGwpOy8vYWxsIHdpcnRlIGRvbmUoaW5jbHVkaW5nIHJlYWQpLCBub3QgaW5jbHVkaW5nIGFsbG9jYXRlZAora2FsX2Jvb2wgY2NjaV9zaG1fc3J2X2dldF93cml0dGVuX3BhZ2VfZXgoa2FsX3VpbnQzMiB1c2VyX2lkLCBrYWxfdWludDMyIHBhZ2VfbnVtLCBrYWxfdWludDMyKiogYWRkcmVzcywga2FsX3VpbnQzMiogc2l6ZSwga2FsX2Jvb2wgaXNfZGwpOy8vZ2V0IHdyaXR0ZW4gcGFnZSwgbm90IGluY2x1ZGluZyBhbGxvY2F0ZWQKKworLy9BUEkgY2FuIGJvdGggdXNlZCBpbiBleGNlcHRpb24gbW9kZSBhbmQgbm9ybWFsIG1vZGUKK3ZvaWQgY2NjaV9zaG1fc3J2X3Jlc2V0X3JlYWRfcGFnZV9leChrYWxfdWludDMyIHVzZXJfaWQpOwordm9pZCBjY2NpX3NobV9zcnZfcmVzZXRfd3JpdGVfcGFnZV9leChrYWxfdWludDMyIHVzZXJfaWQpOworLyoqKioqKioqKioqKioqKioqKioqaW50ZXJuYWwqKioqKioqKioqKioqKioqKioqKioqLworLy92b2lkIGNjY2lfc2htX2JtX2Noa19pc19hY3RpdmUoa2FsX3VpbnQzMiB1c2VyX2lkLCBDQ0NJX1NITV9CTV9VU0VSX0JVRkZfVCogdXNlcl9idWZmKTsKK2thbF9ib29sIGNjY2lfc2htX2JtX3NlbmRfbm90aWZ5KGthbF91aW50MzIgdXNlcl9pZCk7Cit2b2lkIGNjY2lfc2htX2JtX3N0b3BfdGltZXIoKTsKK3ZvaWQgY2NjaV9zaG1fYm1fc3RhcnRfdGltZXIoKTsKK3ZvaWQgY2NjaV9zaG1fYm1fcmVzdGFydF90aW1lcigpOworI2VuZGlmCisKKworCitrYWxfYm9vbCBjY2NpX3NobV9zcnZfd3JpdGVfYWxsb2NfdWxfVVQoa2FsX3VpbnQzMiB1c2VyX2lkLCBrYWxfdWludDMyKiogYWRkcmVzcywga2FsX3VpbnQzMiogc2l6ZSk7CitrYWxfYm9vbCBjY2NpX3NobV9zcnZfd3JpdGVfZG9uZV91bF9VVChrYWxfdWludDMyIHVzZXJfaWQsIGthbF91aW50MzIqIGFkZHJlc3MsIGthbF91aW50MzIgbGVuZ3RoKTsKK2thbF9ib29sIGNjY2lfc2htX3Nydl9yZWFkX2dldF9kbF9VVChrYWxfdWludDMyIHVzZXJfaWQsIGthbF91aW50MzIqKiBhZGRyZXNzLCBrYWxfdWludDMyKiBzaXplKTsKK2thbF9ib29sIGNjY2lfc2htX3Nydl9yZWFkX2RvbmVfZGxfVVQoa2FsX3VpbnQzMiB1c2VyX2lkKTsKKwora2FsX2Jvb2wgY2NjaV9zaG1fYm1faXRfaW5pdCgpOwordm9pZCBjY2NpX3NobV9ibV9pdF90eChrYWxfdWludDMyIHVzZXJfaWQpOwordm9pZCBjY2NpX3NobV9ibV9pdF9yeChrYWxfdWludDMyIHVzZXJfaWQpOworCit2b2lkIGNjY2lfc2htX2JtX21haW4oaWxtX3N0cnVjdCAqaWxtKTsKK2thbF9ib29sIGNjY2lfc2htX2JtX2l0X3JlZyhrYWxfdWludDMyIHVzZXJfaWQpOwora2FsX2Jvb2wgY2NjaV9zaG1fc3J2X3VsX2NiKCk7CisKKwordm9pZCBjY2NpX3NobV9ibV9kbF90ZXN0KGthbF91aW50MzIgdXNlcl9pZCk7Cit2b2lkIGNjY2lfc2htX2JtX2RsX3Rlc3Rfd3JpdGUyKGthbF91aW50MzIgdXNlcl9pZCk7Cit2b2lkIGNjY2lfc2htX2JtX2xvb3BfYmFja190ZXN0KGthbF91aW50MzIgdXNlcl9pZCk7CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9zeXNtc2dzdmNfY29uZi5oIGIvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpX3N5c21zZ3N2Y19jb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4ZjVlMQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaV9zeXNtc2dzdmNfY29uZi5oCkBAIC0wLDAgKzEsMTQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDEKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBjY2NpX3N5c21zZ3N2Y19jb25mLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIHVzZXIgZW51bSBmb3IgY2NjaSBzeXN0ZW0gbWVzc2FnZSBzZXJ2aWNlCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLy0gZmxhZyBiaXQgbWFzaworLy8tIDcgNiA1IDQgMyAyIDEgMCBMU0IKKy8vLSAwIDAgMCB4IHggeCB4IHgKKy8vLSBbN10gaWxtIG5lZWRlZAorLy8tIFs2XSBpbG0gbG9jYWwgcGFyYW0gbmVlZWRlZAorCisjaWYgZGVmaW5lZChfX0NDQ0lERVZfU1VQUE9SVF9fKQorI2lmIGRlZmluZWQoX19DQ0NJX1BST0RVQ1RfVFlQRV9USElOX01PREVNX18pIC8vdGhpbiBtb2RlbSBjb25maWd1cmF0aW9uCisgICAgLy8gICAgICAgICAgICAgICAgICAgIENDQ0lfTVNHX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyAgaWxtX21zZ19pZCAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGRlc3RpbmF0aW9uCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19MMV9ET1JNQU5ULCAgICAgICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKS8vLTB4MTAwIGFkZCBmb3IgTDEgZG9ybWFudCBtb2RlIHVzZWQKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX0wxX1NMRUVQTUFTS0lORywgICAgICAgICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfTk9UX1NVUFBPUlQpLy8tMHgxMDEgYWRkIGZvciBMMSBzbGVlcC91bi1zbGVlcCBtb2RlIHVzZWQKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfTURfTDRfVFhfUFdSX0xFVl9SRVEsICAgICAgICAgICAgICAgICAgICAweEMwLCBNU0dfSURfTDRDX01FQVNfSU5GT19SRVEsICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfTk9UX1NVUFBPUlQpLy8tMHgxMDIgYWRkIGZvciBMMSBUWCBQb3dlcgorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfUkZfTUFYX1RFTVBFUkFUVVJFX1NVQjYsICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkvLy0weDEwMyBhZGQgZm9yIHF1ZXJ5IFNVQjYgUkYgdGVtcGVyYXR1cmUuIE1EIHdpbmRvdzogQWxsZW4gSHN1CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19SRl9BTExfVEVNUEVSQVRVUkVfTU1XLCAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKS8vLTB4MTA0IGFkZCBmb3IgcXVlcnkgTU1XIFJGIHRlbXBlcmF0dXJlLiBNRCB3aW5kb3c6IEFsbGVuIEhzdQorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTDFfUVVFUllfQVBfVk9MVEFHRSwgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMDUgYWRkIGZvciBMMSB0byBxdWVyeSBBUCB2b2xhdGFnZS4gVXNlZCBmb3IgVFggYW5kIFJYLgorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTE9DS19BUF8yNk0sICAgICAgICAgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9OT1RfU1VQUE9SVCkvLy0weDEwNiBhZGQgZm9yIFVTQiB0byBsb2NrIDI2TSBvbiBBUCBzaWRlLiBPbmx5IHVzZWQgaW4gTVQ2MjgwCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19MNF9TSU1fSU5GTywgICAgICAgICAgICAgICAgICAgMHhDMCwgTVNHX0lEX0w0Q19SRUdJT05BTF9QSE9ORV9NT0RFX1JFUSxDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKS8vLTB4MTA3IGFkZCB0byBzZW5kIGluZm9ybWF0aW9uIHRvIEFQLiBGZWF0dXJlOiBSZWdpb25hbCBBbmltYXRpb24uIE1EIHdpbmRvdzogSG9uZworICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfSUNVU0JfQVBfTk9USUZZLCAgICAgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9OT1RfU1VQUE9SVCkvLy0weDEwOCBhZGQgZm9yIElDVVNCIHVzZXIgdG8gZG8gZXJyb3IgaGFuZGxpbmcKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX0wxX0NSWVNUQUxfVEhFUk1BTF9DSEFOR0UsICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfTk9UX1NVUFBPUlQpLy8tMHgxMDkgYWRkIGZvciBMMSB0aGVybWFsIGlzc3VlIGluIDY1NzEuIE1EIHdpbmRvdzogUmljay5XdQorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTDRfVFhfUFdSX1JFRFVfUkVRLCAgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9OT1RfU1VQUE9SVCkvLy0weDEwQSBhZGQgZm9yIEw0IGZvciBUWCBwb3dlciByZWR1Y3Rpb24uIE1EIHdpbmRvdzogQm9iLkNoaWFuZworICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTDFfVEhFUk1BTF9UWF9QV1JfUkVEVV9SRVEsICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9OT1RfU1VQUE9SVCkvLy0weDEwQiBhZGQgZm9yIEwxIFRoZXJtYWwgQ29udHJvbC4gTUQgd2luZG93OiBDaGljaGVuLkxlZQorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTURfU0xFRVBfQ09OVFJPTCwgICAgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9OT1RfU1VQUE9SVCkvLy0weDEwQyBhZGQgZm9yIENQRSBwcm9qZWN0IGZvciBNRCBTbGVlcCBDb250cm9sLiBSb3VudGVyIG9ubHkgCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19FTDFfRElTQUJMRV9NRF9FTUlfUkVRLCAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKS8vLTB4MTBEIGFkZCBmb3IgNjU5NSBEVkZTLCBFTDEgRElTQUJMRSBNRCBFTUkgQUNDRVNTLiBNRCB3aW5kb3c6IExld2lzIFl1CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19NTUwxX1VQREFURV9BUF9UUE9fSU5GTywgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKS8vLTB4MTBFIGFkZCBmb3IgU1dUUC4gTUQgd2luZG93OiBSeWFuLUhOIENoZW4gCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19NRDJfVVBEQVRFX0FQX1RQT19JTkZPLCAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKS8vLTB4MTBGIGFkZCBmb3IgU1dUUC4gTUQgd2luZG93OiBSeWFuLUhOIENoZW4gCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19NTUwxX1FVRVJZX0FQX1RQT19JTkZPLCAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKS8vLTB4MTEwIGFkZCBmb3IgU1dUUC4gTUQgd2luZG93OiBSeWFuLUhOIENoZW4gCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19NRDJfUVVFUllfQVBfVFBPX0lORk8sICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKS8vLTB4MTExIGFkZCBmb3IgU1dUUC4gTUQgd2luZG93OiBSeWFuLUhOIENoZW4gCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19TV19UUFVUX1RIUk9UVExJTkcsICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDExMiBhZGQgZm9yIFNXIHRocm91Z2ggcHV0IHRocm90dGxpbmcuIE1EIHdpbmRvdzogUGV0ZXIgSHN1CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19VVF9PTkxZLCAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDExMyBhZGQgZm9yIFVUIG9ubHkKKyNpZiBkZWZpbmVkKF9fQ0NDSV9URVNUX0VBUF9fKQorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfVEVTVF9NRF9BUCwgICAgICAgICAgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9FQVApIC8vLTB4MTE0IGFkZCBmb3IgSVQgb25seSAKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX1RFU1RfQVBfTUQsICAgICAgICAgICAgICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfRUFQKSAvLy0weDExNSBhZGQgZm9yIElUIG9ubHkgCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19URVNUX01VTFRJVEFTS19NRF9BUCwgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0VBUCkgLy8tMHgxMTYgYWRkIGZvciBJVCBvbmx5IAorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfVEVTVF9NVUxUSVRBU0tfQVBfTUQsICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9FQVApIC8vLTB4MTE3IGFkZCBmb3IgSVQgb25seQorI2Vsc2UKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX1RFU1RfTURfQVAsICAgICAgICAgICAgICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfQVApIC8vLTB4MTE0IGFkZCBmb3IgSVQgb25seSAKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX1RFU1RfQVBfTUQsICAgICAgICAgICAgICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfQVApIC8vLTB4MTE1IGFkZCBmb3IgSVQgb25seSAKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX1RFU1RfTVVMVElUQVNLX01EX0FQLCAgICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfQVApIC8vLTB4MTE2IGFkZCBmb3IgSVQgb25seSAKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX1RFU1RfTVVMVElUQVNLX0FQX01ELCAgICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfQVApIC8vLTB4MTE3IGFkZCBmb3IgSVQgb25seSAgICAKKyNlbmRpZgorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTURfVU5QUk9URUNUX1BBUlRfUkVRLCAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9OT1RfU1VQUE9SVCkvLy0weDExOCBhZGQgZm9yIE5WUkFNLiBNRCB3aW5kb3c6IFF1aW5odWEgWXUgKE1ELT5BUCkKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX0NDSVNNX1NDUF9TSE1fSU5JVCwgICAgICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfTk9UX1NVUFBPUlQpLy8tMHgxMTkgYWRkIGZvciBNRDwtPlNDUCBDQ0lTTSBUUk0gRmxvdyBpbml0IE1TRworICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfQ0NJU01fU0NQX1NITV9JTklUX0FDSywgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9OT1RfU1VQUE9SVCkvLy0weDExQSBhZGQgZm9yIE1EPC0+U0NQIENDSVNNIFRSTSBGbG93IGluaXQgQUNLIE1TRworICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfQ0NJU01fU0NQX1NITV9JTklUX0RPTkUsICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9OT1RfU1VQUE9SVCkvLy0weDExQiBhZGQgZm9yIE1EPC0+U0NQIENDSVNNIFRSTSBGbG93IGluaXQgRG9uZSBNU0cKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX1BNSUNfSU5UUl9NT0RFTV9CVUNLX09DLCAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfTk9UX1NVUFBPUlQpLy8tMHgxMUMgYWRkIGZvciBQTUlDIG92ZXIgY3VycmVudC4gTUQgd2luZG93Oll1eWFuZyBIc2lhbyAKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX0VNSV9BQ0NFU1NfVklPTEFUSU9OX0FDSywgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfTk9UX1NVUFBPUlQpLy8tMHgxMUQgYWRkIGZvciBFTUkgYWNjZXNzIHZpb2xhdGlvbiBhY2suIE1EIHdpbmRvdzogV29vZHkuS3VvCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19MV0FfREFUQV9QQVRIX0NPTlRST0wsICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKS8vLTB4MTFFIGFkZCBmb3IgTFdBIGRhdGEgcGF0Y2ggY29udHJvbC4gTUQgd2luZG93OiBNaW5nVHN1bmcuU3VuCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19DMktfUFBQX0xJTkVfU1RBVFVTLCAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKS8vLTB4MTFGIGFkZCBmb3IgQzJLIFBQUCBsaW5lIHN0YXR1cy4gTUQgd2luZG93OiBTdHVuIFd1CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19ESVNQTEFZX0RZTkFNSUNfTUlQSV9HU00sICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKS8vLTB4MTIwIGFkZCBmb3IgZHluYW1pYyBNSVBJIEdTTSwgMkcgY29ubmVjdGlvbiAyIHBhY2tldC9zKE9QUE8pLiBBQ1MgV2luZG93OiBXaWxleSBMaQorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfUkZfSE9QUElOR19OT1RJRlksICAgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9OT1RfU1VQUE9SVCkvLy0weDEyMSBhZGQgZm9yIE9TQyBmcmVxdWVuY3kganVtcC4gT3duZXI6IEppYW5qdW4gRHUgLyBXZWl3ZWkgUGVpCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19QT1dFUk9GRl9OT1RJRlksICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEyMiBhZGQgZm9yIEw0IHRvIGdldCBsb3cgYmF0dGVyeSB2b2x0YWdlICg8NSUpIG5vdGlmaWNhdGlvbi4gT3duZXI6IEhhb3poZSBDaGFuZy9Ib25nIFl1CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19NRF9USEVSTV9OT1RJRlksICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEyMyBhZGQgZm9yIG1vZGVtIHRoZXJtYWwgbm90aWZ5LiBNRCB3aW5kb3c6IENoYW8tS2FpIFl1LCBBUCB3aW5kb3c6IEplcnJ5LVNDIFd1CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19CQ19DRFBfTk9USUZZLCAgICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEyNCBhZGQgZm9yIFVTQiBCQyBDRFAgbm90aWZ5LiBNRCB3aW5kb3c6IEdhbmcgTGVpLCBBUCB3aW5kb3c6IFd5IENodWFuZworICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfQ0FNRVJBX0hPUFBJTkdfTk9USUZZLCAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9OT1RfU1VQUE9SVCkgLy8tMHgxMjUgYWRkIGZvciBjYW1lcmEgZW5hYmxlL2Rpc2FibGUgcmVwb3J0LiBPd25lcjogSlogSG91CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19DQVJLSVRfREVURUNULCAgICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKSAvLy0weDEyNiBhZGQgZm9yIGNhcmtpdCBzdGF0dXMuIE1EIHdpbmRvdzogRWR3aW4gTGl1CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19DMktfVFhfUE9XRVJfUkVRLCAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKSAvLy0weDEyNyBhZGQgZm9yIEMyayB0aGVybWFsIHBvd2VyIG1zZworICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTE9XUFdSX0FQU1RTX05PVElGWSwgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9OT1RfU1VQUE9SVCkgLy8tMHgxMjggYWRkIGZvciBsb3cgcG93ZXIgQVBTVFMuIE1EIHVzZXI6IEd1by1IdWVpIENoYW5nCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19QQ0lFX1BNX05PVElGWSwgICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEyOSBhZGQgZm9yIFBDSWUgUE0gY29tbXVuaWNhdGlvbi4gTUQgdXNlcjogQ2luZHkgVHUKKyAgICAvKiBBZGQgbmV3IG1zZyBpZCBmcm9tIGhlcmUqLworICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMkEgbWF4aW11bSBTWVNNU0cgSUQgLS0+IGJlbG93IGhlcmUgd2lsbCByZXR1cm4gZmFsc2UKKyNlbHNlIC8vZGVmaW5lZChfX0NDQ0lfUFJPRFVDVF9UWVBFX1NPQ19fKQorICAgIC8vICAgICAgICAgICAgICAgICAgICBDQ0NJX01TR19JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgIGlsbV9tc2dfaWQgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9ISUZfSFdfVFlQRV9UCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19MMV9ET1JNQU5ULCAgICAgICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEwMCBhZGQgZm9yIEwxIGRvcm1hbnQgbW9kZSB1c2VkCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19MMV9TTEVFUE1BU0tJTkcsICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEwMSBhZGQgZm9yIEwxIHNsZWVwL3VuLXNsZWVwIG1vZGUgdXNlZAorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9NRF9MNF9UWF9QV1JfTEVWX1JFUSwgICAgICAgICAgICAgICAgICAgIDB4QzAsIE1TR19JRF9MNENfTUVBU19JTkZPX1JFUSwgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMDIgYWRkIGZvciBMMSBUWCBQb3dlcgorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfUkZfTUFYX1RFTVBFUkFUVVJFX1NVQjYsICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMDMgYWRkIGZvciBxdWVyeSBTVUI2IFJGIHRlbXBlcmF0dXJlLiBNRCB3aW5kb3c6IEFsbGVuIEhzdQorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfUkZfQUxMX1RFTVBFUkFUVVJFX01NVywgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMDQgYWRkIGZvciBxdWVyeSBNTVcgUkYgdGVtcGVyYXR1cmUuIE1EIHdpbmRvdzogQWxsZW4gSHN1CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19MMV9RVUVSWV9BUF9WT0xUQUdFLCAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEwNSBhZGQgZm9yIEwxIHRvIHF1ZXJ5IEFQIHZvbGF0YWdlLiBVc2VkIGZvciBUWCBhbmQgUlguCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19MT0NLX0FQXzI2TSwgICAgICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEwNiBhZGQgZm9yIFVTQiB0byBsb2NrIDI2TSBvbiBBUCBzaWRlLiBPbmx5IHVzZWQgaW4gTVQ2MjgwCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19MNF9TSU1fSU5GTywgICAgICAgICAgICAgICAgICAgMHhDMCwgTVNHX0lEX0w0Q19SRUdJT05BTF9QSE9ORV9NT0RFX1JFUSxDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEwNyBhZGQgdG8gc2VuZCBpbmZvcm1hdGlvbiB0byBBUC4gRmVhdHVyZTogUmVnaW9uYWwgQW5pbWF0aW9uLiBNRCB3aW5kb3c6IEhvbmcKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX0lDVVNCX0FQX05PVElGWSwgICAgICAgICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfQVApIC8vLTB4MTA4IGFkZCBmb3IgSUNVU0IgdXNlciB0byBkbyBlcnJvciBoYW5kbGluZworICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTDFfQ1JZU1RBTF9USEVSTUFMX0NIQU5HRSwgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMDkgYWRkIGZvciBMMSB0aGVybWFsIGlzc3VlIGluIDY1NzEuIE1EIHdpbmRvdzogUmljay5XdQorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTDRfVFhfUFdSX1JFRFVfUkVRLCAgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMEEgYWRkIGZvciBMNCBmb3IgVFggcG93ZXIgcmVkdWN0aW9uLiBNRCB3aW5kb3c6IEJvYi5DaGlhbmcKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX0wxX1RIRVJNQUxfVFhfUFdSX1JFRFVfUkVRLCAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfQVApIC8vLTB4MTBCIGFkZCBmb3IgTDEgVGhlcm1hbCBDb250cm9sLiBNRCB3aW5kb3c6IENoaWNoZW4uTGVlCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19NRF9TTEVFUF9DT05UUk9MLCAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEwQyBhZGQgZm9yIENQRSBwcm9qZWN0IGZvciBNRCBTbGVlcCBDb250cm9sLiBSb3VudGVyIG9ubHkgCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19FTDFfRElTQUJMRV9NRF9FTUlfUkVRLCAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEwRCBhZGQgZm9yIDY1OTUgRFZGUywgRUwxIERJU0FCTEUgTUQgRU1JIEFDQ0VTUy4gTUQgd2luZG93OiBMZXdpcyBZdQorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTU1MMV9VUERBVEVfQVBfVFBPX0lORk8sICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMEUgYWRkIGZvciBTV1RQLiBNRCB3aW5kb3c6IFJ5YW4tSE4gQ2hlbiAKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX01EMl9VUERBVEVfQVBfVFBPX0lORk8sICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfQVApIC8vLTB4MTBGIGFkZCBmb3IgU1dUUC4gTUQgd2luZG93OiBSeWFuLUhOIENoZW4gCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19NTUwxX1FVRVJZX0FQX1RQT19JTkZPLCAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDExMCBhZGQgZm9yIFNXVFAuIE1EIHdpbmRvdzogUnlhbi1ITiBDaGVuIAorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTUQyX1FVRVJZX0FQX1RQT19JTkZPLCAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMTEgYWRkIGZvciBTV1RQLiBNRCB3aW5kb3c6IFJ5YW4tSE4gQ2hlbiAKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX1NXX1RQVVRfVEhST1RUTElORywgICAgICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfQVApIC8vLTB4MTEyIGFkZCBmb3IgU1cgdGhyb3VnaCBwdXQgdGhyb3R0bGluZy4gTUQgd2luZG93OiBQZXRlciBIc3UKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX1VUX09OTFkgICwgICAgICAgICAgICAgICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfQVApIC8vLTB4MTEzIGFkZCBmb3IgVVQgb25seQorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfVEVTVF9NRF9BUCwgICAgICAgICAgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMTQgYWRkIGZvciBJVCBvbmx5IAorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfVEVTVF9BUF9NRCwgICAgICAgICAgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMTUgYWRkIGZvciBJVCBvbmx5IAorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfVEVTVF9NVUxUSVRBU0tfTURfQVAsICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMTYgYWRkIGZvciBJVCBvbmx5IAorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfVEVTVF9NVUxUSVRBU0tfQVBfTUQsICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMTcgYWRkIGZvciBJVCBvbmx5CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19NRF9VTlBST1RFQ1RfUEFSVF9SRVEsICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDExOCBhZGQgZm9yIE5WUkFNLiBNRCB3aW5kb3c6IFF1aW5odWEgWXUgKE1ELT5BUCkKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX0NDSVNNX1NDUF9TSE1fSU5JVCwgICAgICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfQVApIC8vLTB4MTE5IGFkZCBmb3IgTUQ8LT5TQ1AgQ0NJU00gVFJNIEZsb3cgaW5pdCBNU0cKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX0NDSVNNX1NDUF9TSE1fSU5JVF9BQ0ssICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfQVApIC8vLTB4MTFBIGFkZCBmb3IgTUQ8LT5TQ1AgQ0NJU00gVFJNIEZsb3cgaW5pdCBBQ0sgTVNHCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19DQ0lTTV9TQ1BfU0hNX0lOSVRfRE9ORSwgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDExQiBhZGQgZm9yIE1EPC0+U0NQIENDSVNNIFRSTSBGbG93IGluaXQgRG9uZSBNU0cKKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX1BNSUNfSU5UUl9NT0RFTV9CVUNLX09DLCAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfQVApIC8vLTB4MTFDIGFkZCBmb3IgUE1JQyBvdmVyIGN1cnJlbnQuIE1EIHdpbmRvdzpZdXlhbmcgSHNpYW8gCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19FTUlfQUNDRVNTX1ZJT0xBVElPTl9BQ0ssICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDExRCBhZGQgZm9yIEVNSSBhY2Nlc3MgdmlvbGF0aW9uIGFjay4gTUQgd2luZG93OiBXb29keS5LdW8KKyAgICBYX0NDQ0lfU1lTTVNHU1ZDX0NPTkYoQ0NNU0dfSURfU1lTTVNHU1ZDX0xXQV9EQVRBX1BBVEhfQ09OVFJPTCwgICAgICAgICAwLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lfU1lTTVNHX0RFU1RfQVApIC8vLTB4MTFFIGFkZCBmb3IgTFdBIGRhdGEgcGF0Y2ggY29udHJvbC4gTUQgd2luZG93OiBNaW5nVHN1bmcuU3VuCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19DMktfUFBQX0xJTkVfU1RBVFVTLCAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDExRiBhZGQgZm9yIEMySyBQUFAgbGluZSBzdGF0dXMuIE1EIHdpbmRvdzogU3R1biBXdQorICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfRElTUExBWV9EWU5BTUlDX01JUElfR1NNLCAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMjAgYWRkIGZvciBkeW5hbWljIE1JUEkgR1NNLCAyRyBjb25uZWN0aW9uIDIgcGFja2V0L3MoT1BQTykuIEFDUyBXaW5kb3c6IFdpbGV5IExpCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19SRl9IT1BQSU5HX05PVElGWSwgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEyMSBhZGQgZm9yIE9TQyBmcmVxdWVuY3kganVtcC4gT3duZXI6IEppYW5qdW4gRHUgLyBXZWl3ZWkgUGVpCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19QT1dFUk9GRl9OT1RJRlksICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKSAvLy0weDEyMiBhZGQgZm9yIEw0IHRvIGdldCBsb3cgYmF0dGVyeSB2b2x0YWdlICg8NSUpIG5vdGlmaWNhdGlvbi4gT3duZXI6IEhhb3poZSBDaGFuZy9Ib25nIFl1CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19NRF9USEVSTV9OT1RJRlksICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKSAvLy0weDEyMyBhZGQgZm9yIG1vZGVtIHRoZXJtYWwgbm90aWZ5LiBNRCB3aW5kb3c6IENoYW8tS2FpIFl1LCBBUCB3aW5kb3c6IEplcnJ5LVNDIFd1CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19CQ19DRFBfTk9USUZZLCAgICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKSAvLy0weDEyNCBhZGQgZm9yIFVTQiBCQyBDRFAgbm90aWZ5LiBNRCB3aW5kb3c6IEdhbmcgTGVpLCBBUCB3aW5kb3c6IFd5IENodWFuZworICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfQ0FNRVJBX0hPUFBJTkdfTk9USUZZLCAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMjUgYWRkIGZvciBjYW1lcmEgZW5hYmxlL2Rpc2FibGUgcmVwb3J0LiBPd25lcjogSlogSG91CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19DQVJLSVRfREVURUNULCAgICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEyNiBhZGQgZm9yIGNhcmtpdCBzdGF0dXMuIE1EIHdpbmRvdzogRWR3aW4gTGl1CisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19DMktfVFhfUE9XRVJfUkVRLCAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX0FQKSAvLy0weDEyNyBhZGQgZm9yIEMyayB0aGVybWFsIHBvd2VyIG1zZworICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTE9XUFdSX0FQU1RTX05PVElGWSwgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMjggYWRkIGZvciBsb3cgcG93ZXIgQVBTVFMuIE1EIHVzZXI6IEd1by1IdWVpIENoYW5nCisgICAgWF9DQ0NJX1NZU01TR1NWQ19DT05GKENDTVNHX0lEX1NZU01TR1NWQ19QQ0lFX1BNX05PVElGWSwgICAgICAgICAgICAgICAgMCwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0NJX1NZU01TR19ERVNUX05PVF9TVVBQT1JUKSAvLy0weDEyOSBhZGQgZm9yIFBDSWUgUE0gY29tbXVuaWNhdGlvbi4gTUQgdXNlcjogQ2luZHkgVHUKKyAgICAvKiBBZGQgbmV3IG1zZyBpZCBmcm9tIGhlcmUqLworICAgIFhfQ0NDSV9TWVNNU0dTVkNfQ09ORihDQ01TR19JRF9TWVNNU0dTVkNfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NDSV9TWVNNU0dfREVTVF9BUCkgLy8tMHgxMkEgbWF4aW11bSBTWVNNU0cgSUQKKyNlbmRpZgorI2VuZGlmIC8vX19DQ0NJREVWX1NVUFBPUlRfXworCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaWRldl9xYm0uaCBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaWRldl9xYm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDRhYjMzCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpZGV2X3FibS5oCkBAIC0wLDAgKzEsMTA4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGNjY2lkZXZfcWJtLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIERlZmluZXMgdGhlIGNvbW1vbiBxbXVfYm0gbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZm9yIENDQ0kgZGV2aWNlcworICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogJExvZyQKKyAqCisgKiAwOSAxOCAyMDIwIGxpLWNoZW5nLnRzYWkKKyAqIFtNT0xZMDA1Njk2NDddIFtNUDcuUFJFQ0hFQ0tJTi5ERVZdW0NvZGUgc3luY10gc3luYyBjb2RlIGZyb20gVDcwMAorICogW1IzLk1QXVtPQV1bQ0NDSV1jb2RlIHN5bmMgZnJvbSBUNzAwCisgKgorICogMDkgMTUgMjAyMCBsaS1jaGVuZy50c2FpCisgKiBbTU9MWTAwNTY5NjQ3XSBbTVA3LlBSRUNIRUNLSU4uREVWXVtDb2RlIHN5bmNdIHN5bmMgY29kZSBmcm9tIFQ3MDAKKyAqIFtNUDcuUFJFQ0hFQ0tJTi5ERVZdW09BXVtDQ0NJXWNvZGUgc3luYyBmcm9tIFQ3MDAKKyAqCisgKiAwOCAwNCAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDU1NDUzNF0gW0NvbGdpbl1bQ29kZSBzeW5jXSBzeW5jIGNvZGUgZnJvbSBNVDY4ODAuTVAKKyAqIFtUNzAwXVtPQV1bQ0NDSV0gc3luYyBmcm9tIE1UNjg4MAorICoKKyAqIDA3IDA3IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTQzMTg2XSBbQ29sZ2luXSBjb2RlIHN5bmMgdG8gTlIxNS5SMy5NVDY4ODAuTVAKKyAqIFtSMy5NVDY4ODAuTVBdW09BXVtDQ0NJXSBzeW5jIGZyb20gQ09MR0lOLlNCLlNNVC5ERVYKKyAqCisgKiAwNSAxOSAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDUyNTU5OV0gY29kZSBzeW5jIGZvciBDb2xnaW4KKyAqIFtOUjE1LlIzLkNPTEdJTi5TQi5TTVQuREVWXVtPQV1bQ0NDSV0gY29kZSBzeW5jIGZyb20gMTlOT1YKKyAqCisgKiAxMiAxOCAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDQ2NTc0Ml0gW0dlbjk3XSBhZGQgTDUgY2hhbm5lbHMgYW5kIGNoYW5nZSBDQ0lGIFNITSBsYXlvdXQKKyAqIFsxOU5PVi5ERVZdW09BXSBhZGQgTDUgY2hhbm5lbHMKKyAqCisgKiAwOSAxNSAyMDE3IGNoaWVuLWh1aS5sdQorICogW01PTFkwMDI3ODMxN10gW0NDQ0ldW0xISUZDT1JFXVtDQ0lTTUNPUkVdIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9mIElOVF9RdWVyeUV4Y2VwdGlvblN0YXR1cworICogW0NDQ0ldW0xISUZDT1JFXVtDQ0lTTUNPUkVdIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9mIElOVF9RdWVyeUV4Y2VwdGlvblN0YXR1cy4KKyAqCisgKiAwOCAwMSAyMDE3IGNoaWVuLWh1aS5sdQorICogW01PTFkwMDI2MDI4N10gTUQgQ0NDSSBhZGQgY2FjaGUgQVBJIGVuaGFuY2UgdG8gTFIxMiB0cnVuaworICogW0NDQ0ldIGNhY2hlIEFQSSBlbmhhbmNlbWVudCBhbmQgYWdncmVnYXRpb24sIHBvcnRpbmcgZnJvbSBVTU9MWS4KKyAqCisgKiAxMSAwOCAyMDE2IGNzLmh1YW5nCisgKiBbTU9MWTAwMjA0NDMwXSBbQ0NDSV0gTVQ2MjkzIGNoYW5nZQorICogW0NDQ0ldIEZhc3QgQ0NDSSBoZWFkZXIgcHJvYmxlbQorICoKKyAqIDA4IDE1IDIwMTYgY3MuaHVhbmcKKyAqIFtNT0xZMDAxOTc0NTNdIFtDQ0NJXSBGYXN0IENDQ0kgaGVhZGVyIGNoYW5nZSBTUEQgaGVhZGVyIHNpemUKKyAqIFtDQ0NJXSBGYXN0IENDQ0kgaGVhZGVyIHByb2JsZW0KKyAqCisgKiAwNiAwNyAyMDE2IGNzLmh1YW5nCisgKiBbTU9MWTAwMTgzMTQwXSBbQ292ZXJpdHkgU2Nhbm5lZCBDb2RlIERlZmVjdF1DSUQ6MTM4ODI0IGNvZGUgZGVmZWN0IGhhcHBlbmVkIGluIC9tY3UvY29tbW9uL2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9jY2NpZGV2X3FibS5oCisgKiBbQ0NDSV0gRml4IGNvdmVyaXR5IHdhcm5pbmcKKyAqIDA2IDAxIDIwMTYgY3MuaHVhbmcKKyAqIFtNT0xZMDAxODI2NDddIFtDQ0NJXSBGYXN0IENDQ0kgaGVhZGVyCisgKiBbQ0NDSV0gRmFzdCBDQ0NJIGhlYWRlcgorICoKKyAqIDA2IDAxIDIwMTYgY3MuaHVhbmcKKyAqIFtNT0xZMDAxODI2NDddIFtDQ0NJXSBGYXN0IENDQ0kgaGVhZGVyCisgKiBbQ0NDSV0gRmFzdCBDQ0NJIGhlYWRlcgorICoKKyAqIDEyIDI4IDIwMTUgY3MuaHVhbmcKKyAqIFtNT0xZMDAxNTUwNzRdIFtDQ0NJXSBGaXggQ0NDSSBoZWFkZXIgbGVuZ3RoIGZvciBUVFkgYW5kIGZpeCBJVCBwcm9ncmFtCisgKiBbQ0NDSV0gRml4IENDQ0kgaGVhZGVyIGxlbmd0aCBmb3IgVFRZIGFuZCBmaXggSVQgcHJvZ3JhbQorICoKKyAqIDEyIDI4IDIwMTUgY3MuaHVhbmcKKyAqIFtNT0xZMDAxNTUwNzRdIFtDQ0NJXSBGaXggQ0NDSSBoZWFkZXIgbGVuZ3RoIGZvciBUVFkgYW5kIGZpeCBJVCBwcm9ncmFtCisgKiBbQ0NDSV0gRml4IENDQ0kgaGVhZGVyIGxlbmd0aCBmb3IgVFRZIGFuZCBmaXggSVQgcHJvZ3JhbQorICogMDggMDcgMjAxNSBjcy5odWFuZworICogW01PTFkwMDEzNjA0M10gY2NjaWRldl9xYm0uaCBhc3NlcnRpb24KKyAqIFtDQ01OSV0gRml4IFNQRCBFT0wgcHJvYmxlbQorICoKKyAqCisgKiAwOCAwNyAyMDE1IGNzLmh1YW5nCisgKiBbTU9MWTAwMTM2MDQzXSBjY2NpZGV2X3FibS5oIGFzc2VydGlvbgorICogW0NDTU5JXSBGaXggU1BEIEVPTCBwcm9ibGVtCisgKgorICogMDggMDYgMjAxNSBjcy5odWFuZworICogW01PTFkwMDEzNTQ2NF0gW0NDQ0ldIE5ldyBDQ0NJIGhhbmRzaGFrZSBmbG93CisgKiBbQ0NDSV0gTmV3IENDQ0kgaGFuZHNoYWtlIGZsb3cKKyAqCisgKiAwOCAwNiAyMDE1IGNzLmh1YW5nCisgKiBbTU9MWTAwMTM1NDY0XSBbQ0NDSV0gTmV3IENDQ0kgaGFuZHNoYWtlIGZsb3cKKyAqIFtDQ0NJXSBOZXcgQ0NDSSBoYW5kc2hha2UgZmxvdworICogMDcgMjggMjAxNSBjcy5odWFuZworICogW01PTFkwMDEzMTI2OF0gW0NDTU5JXSBBZGQgU1BEIHRyYWNlCisgKiBbQ0NNTkldIEFkZCBTUEQgdHJhY2UKKyAqCisgKiAwNyAyOCAyMDE1IGNzLmh1YW5nCisgKiBbTU9MWTAwMTMxMjY4XSBbQ0NNTkldIEFkZCBTUEQgdHJhY2UKKyAqIFtDQ01OSV0gQWRkIFNQRCB0cmFjZQorICoKKyAqIDA3IDI0IDIwMTUgY3MuaHVhbmcKKyAqIFtNT0xZMDAxMzEyNjhdIFtDQ01OSV0gQWRkIFNQRCB0cmFjZQorICogW0NDTU5JXSBBZGQgU1BEIHRyYWNlIHRpbWluZworICoKKyAqIDA3IDIzIDIwMTUgY3MuaHVhbmcKKyAqIFtNT0xZMDAxMzEyNjhdIFtDQ01OSV0gQWRkIFNQRCB0cmFjZQorICogW0NDTU5JXSBBZGQgU1BEIHRyYWNlCisgKgorICogMDUgMDggMjAxNSBjcy5odWFuZworICogW01PTFkwMDExMjAwMV0gW0NDQ0ldIENoYW5nZSBDQ0NJIHNlcXVlbmNlIGRlZmluaXRpb24gaW4gQ0NDSSBoZWFkZXIuCisgKiBbQ0NDSV0gQ2hhbmdlIENDQ0kgc2VxdWVuY2UgZGVmaW5pdGlvbiBpbiBDQ0NJIGhlYWRlci4KKyAqCisgKiAwNSAwNSAyMDE1IGNzLmh1YW5nCisgKiBbTU9MWTAwMTExMDk3XSBbQ0NDSV0gTW9kaWZ5IFJNUFUgYnVmZmVyIGRlZmluaXRpb24KKyAqIFtDQ0NJXSBNb2RpZnkgcG9sbGluZyBidWZmZXIgZGVmaW5hdGlvbiBmb3IgUk1QVQorICoKKyAqIDA0IDE1IDIwMTUgaS13ZWkudHNhaQorICogW01PTFkwMDEwNzYyNl0gW1RLNjI5MV1bQ0NDSVRUWV0gZW5hYmxlIHNlcXVlbmNlIGNoZWNrIGFuZCBleGNlcHRpb24gU1BEIHN1cHBvcnQKKyAqIAkuCisgKgorICogMDMgMjcgMjAxNSBhcC53YW5nCisgKiBbTU9MWTAwMTAwMjQ2XSBbVU1PTFldIEZpeCBTUEQgdHlwZTMgcmUtbGF5b3V0IGVycm9yCisgKiBBZGQgQ0NDSSBMZW4gZm9yIFNQRCBETCB2MgorICoKKyAqIDAzIDI0IDIwMTUgYXAud2FuZworICogW01PTFkwMDEwMDI0Nl0gW1VNT0xZXSBGaXggU1BEIHR5cGUzIHJlLWxheW91dCBlcnJvcgorICogLgorICoKKyAqIDAxIDIzIDIwMTUgYXAud2FuZworICogW01PTFkwMDA5MjkwMF0gW1VNT0xZXSBMMiBDb3BybyB6ZXJvIGxlbiBwYWNrZXQgb24gU1BECisgKiAuCisgKgorICogMTIgMTAgMjAxNCBjcy5odWFuZworICogW01PTFkwMDA4MDM1MV0gW01UNjI5MV1bQ0NDSV0gQWRkIEwxQ29yZSBDQ0NJIHNlcnZpY2UgKENDQ0kgU1lTTVNHL1JQQy9JUEMpCisgKiBbQ0NDSV0gUENvcmUvTDFDb3JlIENDQ0kgZW5oYW5jZW1lbnQKKyAqCisgKiAxMSAxMyAyMDE0IGNzLmh1YW5nCisgKiBbTU9MWTAwMDg0MDQ5XSBbQ0NDSV0gTWVyZ2luZyBQMlAgQ0NDSSByZWxhdGVkIGNoYW5nZQorICogTWVyZ2luZworICogCQorICogCS8vVU1PTFkvREVWL01UNjI5MV9ERVYvbWN1L3Bjb3JlLy4uLgorICogCQorICogCXRvIC8vVU1PTFkvVFJVTksvVU1PTFkvbWN1L3Bjb3JlLy4uLgorICoKKyAqIDExIDEzIDIwMTQgY3MuaHVhbmcKKyAqIFtNT0xZMDAwODE0MjVdIFtUSzYyOTFfREVWXSBBZGQgU1BEIHN3IHNvbHV0aW9uCisgKiBNZXJnaW5nCisgKiAJCisgKiAJLy9VTU9MWS9ERVYvTVQ2MjkxX0RFVi9tY3UvcGNvcmUvLi4uCisgKiAJCisgKiAJdG8gLy9VTU9MWS9UUlVOSy9VTU9MWS9tY3UvcGNvcmUvLi4uCisgKgorICogMTEgMTMgMjAxNCBjcy5odWFuZworICogW01PTFkwMDA3NTQ4MV0gQWRkIENDQ0kgU1BEIERMIHN1cHBvcnQKKyAqIE1lcmdpbmcKKyAqIAkKKyAqIAkvL1VNT0xZL0RFVi9NVDYyOTFfREVWL21jdS9wY29yZS8uLi4KKyAqIAkKKyAqIAl0byAvL1VNT0xZL1RSVU5LL1VNT0xZL21jdS9wY29yZS8uLi4KKyAqCisgKgorICoKKyAqIDA4IDE0IDIwMTQgYXAud2FuZworICogW01PTFkwMDA3NTQ4MV0gQWRkIENDQ0kgU1BEIERMIHN1cHBvcnQKKyAqIENDQ0lERVYgU1BEIERMIGNvbW1vbiBwcm9jZXNzCisgKiAwNyAyMiAyMDE0IGNzLmh1YW5nCisgKiBbTU9MWTAwMDcxOTUyXSBbQ0NDSV0gQWRkIG5ldyBDQ0NJIGRlYnVnIG1lY2hhbmlzbSAoMS4gQ0NDSSBzZXEgY2hlY2sgMi4gQVAgcG9sbGluZyBNRCBzdGF0dXMpCisgKiBbQ0NDSV0gY2NjaSBuZXcgZGVidWcgbWVjaGFuaXNtCisgKgorICogMDcgMjIgMjAxNCBjcy5odWFuZworICogW01PTFkwMDA3MTk1Ml0gW0NDQ0ldIEFkZCBuZXcgQ0NDSSBkZWJ1ZyBtZWNoYW5pc20gKDEuIENDQ0kgc2VxIGNoZWNrIDIuIEFQIHBvbGxpbmcgTUQgc3RhdHVzKQorICogW0NDQ0ldIENDQ0kgbmV3IGRlYnVnIG1lY2hhbmlzbQorICogMDcgMDkgMjAxNCBjcy5odWFuZworICogW01PTFkwMDA3MTkwNF0gW1dXIEZUXVs0RyBHZW1pbmldW0ZUXVtIS11bT2ZmaWNhbF1bQ1NMK1BDQ1ddRXh0ZXJuZWwgKEVFKSwwLDAsOTksL2RhdGEvY29yZS8sMSxtb2RlbSxtZDA6W0FTU0VSVF0gZmlsZTpjY2NpX3JwY19kYXRhLmMgbGluZTo1ODcKKyAqIFtDQ0NJIFJQQ10gRml4IGNjY2kgcnBjIGNvZGluZyBkZWZlY3QgaW4gY2NjaV9ycGNfcmVjZWl2ZV9jYgorICoKKyAqIDA3IDA5IDIwMTQgY3MuaHVhbmcKKyAqIFtNT0xZMDAwNzE5MDRdIFtXVyBGVF1bNEcgR2VtaW5pXVtGVF1bSEtdW09mZmljYWxdW0NTTCtQQ0NXXUV4dGVybmVsIChFRSksMCwwLDk5LC9kYXRhL2NvcmUvLDEsbW9kZW0sbWQwOltBU1NFUlRdIGZpbGU6Y2NjaV9ycGNfZGF0YS5jIGxpbmU6NTg3CisgKiBbQ0NDSSBSUENdIEZpeCBjY2NpIHJwYyBjb2RpbmcgZGVmZWN0IGluIGNjY2lfcnBjX3JlY2VpdmVfY2IKKyAqCisgKiAwOSAwNiAyMDEzIGFwLndhbmcKKyAqIFtNT0xZMDAwMzY3NjFdIFtDQ0NJXSBBZGQgTDIgdHJhY2UgbG9nCVtDQ0NJXSBBZGQgTDIgdHJhY2UgbG9nCisgKgorICogMDYgMjUgMjAxMyBpYW4uY2hlbmcKKyAqIFtNT0xZMDAwMjczOTJdIFtDQ0NJXUNDQ0lERVZfR0VUX1FCTV9EQVRBTEVOIHNob3VsZCByZXR1cm4gR1BELmxlbiBmb3IgREhMCisgKiBbTU9MWV1bQ0NDSV0gQ0NDSURFVl9HRVRfUUJNX0RBVEFMRU4gcmV0dXJuIEdQRCBsZW5ndGggZXZlbiB3aGVuIHRoZXJlJ3MgQkQKKyAqCisgKiAwMyAxNCAyMDEzIGFwLndhbmcKKyAqIFtNT0xZMDAwMTE5MjJdIFtDQ0NJREVWXSBBZGQgR1BEIGNhY2hlIGZsdXNoIGFmdGVyIHNldCBjaGVja3N1bQorICogW0NDQ0lERVZdIEFkZCBHUEQgY2FjaGUgZmx1c2ggYWZ0ZXIgc2V0IGNoZWNrc3VtCisgKgorICogMDIgMjEgMjAxMyBpLXdlaS50c2FpCisgKiBbTU9MWTAwMDEwNjI0XSBDQ0NJVFRZIGludGVnYXJ0aW9uIHRlc3QgY29kZSByZXZpc2UKKyAqIHJlbW92ZSBpbnRlcm5hbCBfcmVzZXRfY2NjaV9jb21tb24KKyAqCisgKiAwMiAwNCAyMDEzIGktd2VpLnRzYWkKKyAqIFtNT0xZMDAwMDk4OTJdIFJlbmFtZSBhcyBNVDYyOTAKKyAqIFJlbmFtZSBwcm9qZWN0IG5hbWUgYXMgTVQ2MjkwCisgKgorICogMDEgMDggMjAxMyBpLXdlaS50c2FpCisgKiBbTU9MWTAwMDA4MzQ3XSBbTVQ2MjkwXSBbQ0NDSV0gQ0NDSSByZS1BcmNoaXRlY3R1cmUKKyAqIHN5bmMgbGF0ZXN0IHZlcnNpb24gb2YgbmV3IGZlYXR1cmVzCisgKgorICogMTIgMDYgMjAxMiBpYW4uY2hlbmcKKyAqIFtNT0xZMDAwMDcxNjldIFtDQ0NJX1NESU9dIE1PTFkgcGhhc2UgaW4KKyAqIFtNT0xZXVtDQ0NJX1NESU9dIDFzdCB2ZXJzaW9uIG9mIE1UNjI5MCBDQ0NJIGZlYXR1cmUKKyAqCisgKiAxMiAwNiAyMDEyIGlhbi5jaGVuZworICogW01PTFkwMDAwNzE2OV0gW0NDQ0lfU0RJT10gTU9MWSBwaGFzZSBpbgorICogW01PTFldW0NDQ0lfU0RJT10gMXN0IHZlcnNpb24gb2YgTVQ2MjkwIENDQ0kgZmVhdHVyZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9DQ0NJREVWX1FCTV9ICisjZGVmaW5lIF9DQ0NJREVWX1FCTV9ICisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJxbXVfYm0uaCIKKyNpbmNsdWRlICJxbXVfYm1fdXRpbC5oIgorI2luY2x1ZGUgImNjY2lfaWYuaCIgICAgICAgICAgLyogY2NjaV9pb19yZXF1ZXN0X3QgKi8KKyNpbmNsdWRlICJoaWZfc3BkX2V4dC5oIgorCisjZGVmaW5lIENDQ0lfVFRZX0RFVl9OVU0gKHVhcnRfcG9ydF9jY2NpX2VuZC11YXJ0X3BvcnRfY2NjaV9zdGFydCsyKSAvLysyIGZvciB1YXJ0X3BvcnRfZGhsX3NwX2V4cHQgYW5kIHVhcnRfcG9ydF9kaGxfY3RybF9zcF9leHB0CisKKy8qIQorICogQGZ1bmN0aW9uICAgICAgICBbSU5MSU5FXSBDQ0NJQ09NTV9TRVRfUUJNX0RBVEFMRU4KKyAqIEBicmllZiAgICAgICAgICAgU2V0IGRhdGEgbGVuZ3RoIGZvciBRQk1fVFlQRV9DQ0NJX0NPTU0gYnkgUUJNX0RFU19TRVRfREFUQUxFTgorICoKKyAqIEBwYXJhbSBncGQgICAgICAgW0lOXSBwb2ludGVyIHRvIHRoZSBHUEQKKyAqCisgKiBAcmV0dXJuICAgICAgICAgIHZvaWQKKyAqLworc3RhdGljIF9faW5saW5lIHZvaWQgQ0NDSUNPTU1fU0VUX1FCTV9EQVRBTEVOKHZvaWQqIGdwZCwga2FsX3VpbnQzMiBkYXRhX2xlbikKK3sKKyAgICB2b2lkKiBiZCA9IE5VTEw7CisKKyAgICBFWFRfQVNTRVJUKE5VTEwgIT0gZ3BkLCAoa2FsX3VpbnQzMilncGQsIGRhdGFfbGVuLCAwKTsKKyAgICAvKlFCTV9UWVBFX0NDQ0lfQ09NTSBzcGVjaWZpYyBmdW5jdGlvbiovCisgICAgRVhUX0FTU0VSVChRQk1fVFlQRV9DQ0NJX0NPTU0gPT0gUUJNX0dFVF9UWVBFKGdwZCksIChrYWxfdWludDMyKVFCTV9HRVRfVFlQRShncGQpLCAoa2FsX3VpbnQzMilncGQsIGRhdGFfbGVuKTsKKyAgICAvKk11c3QgaGF2ZSBCRCovCisgICAgRVhUX0FTU0VSVCgwICE9IFFCTV9ERVNfR0VUX0JEUChncGQpLCAoa2FsX3VpbnQzMilRQk1fREVTX0dFVF9CRFAoZ3BkKSwgKGthbF91aW50MzIpZ3BkLCBkYXRhX2xlbik7CisKKyAgICBiZCA9IFFCTV9ERVNfR0VUX0RBVEFQVFIoZ3BkKTsKKyAgICBFWFRfQVNTRVJUKE5VTEwhPWJkLCAoa2FsX3VpbnQzMilncGQsIChrYWxfdWludDMyKWJkLCBkYXRhX2xlbik7CisgICAgUUJNX0RFU19TRVRfREFUQUxFTihiZCwgZGF0YV9sZW4pOworICAgIHFibV9jYWxfc2V0X2NoZWNrc3VtKChrYWxfdWludDggKiliZCk7CisgICAgCisgICAgUUJNX0RFU19TRVRfREFUQUxFTihncGQsIGRhdGFfbGVuKTsKKyAgICBxYm1fY2FsX3NldF9jaGVja3N1bSgoa2FsX3VpbnQ4ICopZ3BkKTsKK30KKworLyohCisgKiBAZnVuY3Rpb24gICAgICAgIFtJTkxJTkVdIENDQ0lERVZfR0VUX1FCTV9EQVRBTEVOCisgKiBAYnJpZWYgICAgICAgICAgIE9idGFpbiB0aGUgZGF0YSBsZW5ndGggb2YgZmlyc3QgQkQgaW4gR1BEIGxpc3QuIAorICogICAgICAgICAgICAgICAgICBQb3NzaWJsZSBhcHBsaWNhdGlvbiBpcyB1c2VkIGR1cmluZyBpbnNlcnRpbmcgbGF5ZXIgaGVhZGVycyBleC4gQ0NDSSBoZWFkZXJzLgorICoKKyAqIEBwYXJhbSBncGQgICAgICAgW0lOXSBwb2ludGVyIHRvIHRoZSBHUEQKKyAqCisgKiBAcmV0dXJuICAgICAgICAgIFJldHVybiBncGQtPjFzdF9iZC0+ZGF0YV9sZW4gLyBncGQtPmRhdGFfbGVuCisgKi8KK3N0YXRpYyBfX2lubGluZSBrYWxfdWludDMyIENDQ0lERVZfR0VUX1FCTV9EQVRBTEVOKHZvaWQqIGdwZCkKK3sKKyAgICBrYWxfdWludDMyIGRhdGFfbGVuID0gMDsKKworICAgIEVYVF9BU1NFUlQoTlVMTCE9Z3BkLCAoa2FsX3VpbnQzMikgZ3BkLDAgLDApOworCS8qIHVzZXIgc2hvdWxkIHB1dCBsZW5ndGggaW4gZ3BkLmxlbiAKKwkgICBncGQubGVuID0gYmQuZXh0X2xlbiArIGJkLmxlbiAqLworCWRhdGFfbGVuID0gUUJNX0RFU19HRVRfREFUQUxFTihncGQpOworICAgIHJldHVybiBkYXRhX2xlbjsKK30KKworI2luY2x1ZGUgPGV4X3B1YmxpYy5oPgorLyohCisgKiBAZnVuY3Rpb24gICAgICAgIFtJTkxJTkVdIENDQ0lERVZfR0VUX1FCTV9EQVRBUFRSCisgKiBAYnJpZWYgICAgICAgICAgIE9idGFpbiB0aGUgcG9pbnRlciBvZiBkYXRhLiAKKyAqCisgKiBAcGFyYW0gZ3BkICAgICAgIFtJTl0gcG9pbnRlciB0byB0aGUgR1BECisgKgorICogQHJldHVybiAgICAgICAgICBSZXR1cm4gZ3BkLT4xc3RfYmQtPnBfZGF0YV90YmQgLyBncGQtPnBfZGF0YV90YmQKKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZCogQ0NDSURFVl9HRVRfUUJNX0RBVEFQVFIodm9pZCogZ3BkKQoreworICAgIHZvaWQqIGJkID0gTlVMTDsKKyAgICB2b2lkKiBkYXRhX3B0ciA9IE5VTEw7CisgICAgCisgICAgRVhUX0FTU0VSVChOVUxMIT1ncGQsIChrYWxfdWludDMyKSBncGQsIDAsIDApOworICAgIGlmKDAgIT0gUUJNX0RFU19HRVRfQkRQKGdwZCkpeworICAgICAgICAvLzQgPGNhc2UgMT4gR1BELT5CRC0+QlVGRgorICAgICAgICBiZCA9IFFCTV9ERVNfR0VUX0RBVEFQVFIoZ3BkKTsKKyAgICAgICAgRVhUX0FTU0VSVChOVUxMIT1iZCwgKGthbF91aW50MzIpIGJkLCAoa2FsX3VpbnQzMikgZ3BkLCAwKTsKKyAgICAgICAgZGF0YV9wdHIgPSBRQk1fREVTX0dFVF9EQVRBUFRSKGJkKTsKKyAgICB9ZWxzZXsKKyAgICAgICAgLy80IDxjYXNlIDI+IEdQRC0+QlVGRiAgICAgICAgCisgICAgICAgIGRhdGFfcHRyID0gUUJNX0RFU19HRVRfREFUQVBUUihncGQpOworICAgIH0KKworICAgIC8vTm90ZTogVGhpcyBBUEkgaXMgYWxzbyB1c2VkIGluIGV4Y2VwdGlvbiBtb2RlCisgICAgLy9JbiBleGNlcHRpb24gbW9kZSwgREhMIG1heSBkaXJlY3RseSBkdW1wIG1lbW9yeSBhZGRyZXNzIDB4MCAodXNlIDB4MCBhcyBkYXRhIGJ1ZmZlciBhZGRyZXNzKQorICAgIGlmKElOVF9RdWVyeUV4Y2VwdGlvblN0YXR1cygpID09IEtBTF9GQUxTRSkKKyAgICB7CisgICAgICAgIEVYVF9BU1NFUlQoTlVMTCE9ZGF0YV9wdHIsIChrYWxfdWludDMyKSBkYXRhX3B0ciwgKGthbF91aW50MzIpIGJkLCAoa2FsX3VpbnQzMikgZ3BkKTsKKyAgICB9CisgICAgcmV0dXJuIGRhdGFfcHRyOworfQorCisvKiEKKyAqIEBmdW5jdGlvbiAgICAgICAgW0lOTElORV0gQ0NDSURFVl9HRVRfR1BEX0xJU1RfU0laRQorICogQGJyaWVmICAgICAgICAgICBUcmF2ZXJzZSB0aGUgR1BEIGNoYWluIHRvIG9idGFpbiB0aGUgbnVtYmVyIG9mIEdQRHMgaW4gR1BEIGNoYWluLiAKKyAqCisgKiBAcGFyYW0gaGVhZCAgICAgIFtJTl0gcG9pbnRlciB0byB0aGUgaGVhZCBvZiB0aGUgR1BEIGNoYWluCisgKiBAcGFyYW0gdGFpbCAgICAgIFtJTl0gcG9pbnRlciB0byB0aGUgdGFpbCBvZiB0aGUgR1BEIGNoYWluCisgKgorICogQHJldHVybiAgICAgICAgICBOdW1iZXIgb2YgdGhlIEdQRHMgaW4gR1BEIGNoYWluLiAKKyAqLworc3RhdGljIF9faW5saW5lIGthbF91aW50MzIgQ0NDSURFVl9HRVRfR1BEX0xJU1RfU0laRShxYm1fZ3BkICpoZWFkLCBxYm1fZ3BkICp0YWlsKQoreworICAgIGthbF91aW50MzIgICAgICAgICAgY250ID0gMDsKKworICAgIGlmICh0YWlsKSB7CisgICAgICAgIHdoaWxlIChoZWFkKSB7CisgICAgICAgICAgICBjbnQrKzsKKyAgICAgICAgICAgIGlmIChoZWFkICE9IHRhaWwpIHsKKyAgICAgICAgICAgICAgICBoZWFkID0gUUJNX0RFU19HRVRfTkVYVChoZWFkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY250OworfQorCisvKiEKKyAqIEBmdW5jdGlvbiAgICAgICAgW0lOTElORV0gQ0NDSURFVl9HRVRfTk9OQlBTX0dQRF9MSVNUX1NJWkUKKyAqIEBicmllZiAgICAgICAgICAgVHJhdmVyc2UgdGhlIEdQRCBjaGFpbiB0byBvYnRhaW4gdGhlIG51bWJlciBvZiBOT04tYnlwYXNzIEdQRHMgaW4gR1BEIGNoYWluLiAKKyAqCisgKiBAcGFyYW0gaGVhZCAgICAgIFtJTl0gcG9pbnRlciB0byB0aGUgaGVhZCBvZiB0aGUgR1BEIGNoYWluCisgKiBAcGFyYW0gdGFpbCAgICAgIFtJTl0gcG9pbnRlciB0byB0aGUgdGFpbCBvZiB0aGUgR1BEIGNoYWluCisgKgorICogQHJldHVybiAgICAgICAgICBOdW1iZXIgb2YgdGhlIG5vbi1ieXBhc3MgR1BEcyBpbiBHUEQgY2hhaW4uIAorICovCitzdGF0aWMgX19pbmxpbmUga2FsX3VpbnQzMiBDQ0NJREVWX0dFVF9OT05CUFNfR1BEX0xJU1RfU0laRShxYm1fZ3BkICpoZWFkLCBxYm1fZ3BkICp0YWlsKQoreworICAgIGthbF91aW50MzIgICAgICAgICAgY250ID0gMDsKKworICAgIGlmICh0YWlsKSB7CisgICAgICAgIHdoaWxlIChoZWFkKSB7CisgICAgICAgICAgICBjbnQgKz0gKDAgPT0gUUJNX0RFU19HRVRfQlBTKGhlYWQpKTsKKyAgICAgICAgICAgIGlmIChoZWFkICE9IHRhaWwpIHsKKyAgICAgICAgICAgICAgICBoZWFkID0gUUJNX0RFU19HRVRfTkVYVChoZWFkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY250OworfQorCisvKiEKKyAqIEBmdW5jdGlvbiAgICAgICAgW0lOTElORV0gQ0NDSURFVl9QVVNIX1FCTV9EQVRBSEVBRAorICogQGJyaWVmICAgICAgICAgICBQdXNoIHRoZSBUeCBHUEQvQkQgZGF0YSBwb2ludGVyLiBpLmUuIGluY3JlYXNlIHRoZSBoZWFkZXIgcm9vbQorICogICAgICAgICAgICAgICAgICAxLiBtb3ZlIHRoZSBHUEQtPjFzdF9CRC0+ZGF0YSAvIEdQRC0+ZGF0YSBwb2ludGVyIGJhY2sgIm9mZnNldCIKKyAqICAgICAgICAgICAgICAgICAgMi4gaW5jcmVhc2UgdGhlIEJEIGxlbmd0aAorICogICAgICAgICAgICAgICAgICAzLiBETyBOT1QgZmx1c2ggdGhlIFR4IEJEIGhlYWRlciAtPiBRTVUgZW5xdWV1ZSBzaG91bGQgZG8gaXQKKyAqICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHJlZmVyIHRvIHRoZSBtYWlsIDIwMTIwNjA2IGZyb20gWWlMdW4KKyAqICAgICAgICAgICAgICAgICAgICAgPiAgRm9sZGVyOiAgMFdDUFwwLiBpbXBvcnRhbnQgYW5ub3VuY2VccHJvZ3JhbW1pbmcgcmVsYXRlZAorICogICAgICAgICAgICAgICAgICAgICA+ICBbTm90ZV0gQ0FDSEUgb3AgY29udmVudGlvbiA6IHVwcGVyIHVzZXIgbm8gbmVlZCB0byB0YWtlIFRYIEdQRC9CRCBjYWNoZSBmbHVzaChjbGVhbikKKyAqICAgICAgICAgICAgICAgICAgNC4gc2V0IGdwZCBkYXRhIGxlbmd0aAorICogICAgICAgICAgICAgICAgICA1LiBETyBOT1QgZmx1c2ggdGhlIFR4IEdQRCBoZWFkZXIgLT4gUU1VIGVucXVldWUgc2hvdWxkIGRvIGl0CisgKiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSA6IEVUSENfQ09SRV9QVVNIX1FCTV9EQVRBSEVBRAorICoKKyAqIEBwYXJhbSBncGQgICAgICAgW0lOXSBwb2ludGVyIHRvIHRoZSBHUEQgbmVlZCBtb2RpZmljYXRpb24KKyAqIEBwYXJhbSBvZmZzZXQgICAgW0lOXSBtb3ZlIHRoZSBkYXRhX3B0ciBieSBvZmZzZXQKKyAqCisgKiBAcmV0dXJuICAgICAgICAgIHZvaWQKKyAqLworc3RhdGljIF9faW5saW5lIHZvaWQgQ0NDSURFVl9QVVNIX1FCTV9EQVRBSEVBRCh2b2lkKiBncGQsIGthbF91aW50MzIgb2Zmc2V0KQoreworICAgIHZvaWQqIGJkID0gTlVMTDsKKyAgICBrYWxfdWludDgqIGRhdGFfcHRyID0gTlVMTDsKKyAgICBrYWxfdWludDMyIGRhdGFfbGVuID0gMDsKKworICAgIGlmKDAgIT0gUUJNX0RFU19HRVRfQkRQKGdwZCkpeworICAgICAgICAvLzQgPGNhc2UgMT4gR1BELT5CRC0+QlVGRgorICAgICAgICAvKiBzZXQgYmQgZGF0YSBwdHIgKi8KKyAgICAgICAgYmQgPSBRQk1fREVTX0dFVF9EQVRBUFRSKGdwZCk7CisgICAgICAgIGRhdGFfcHRyID0gIChrYWxfdWludDgqKVFCTV9ERVNfR0VUX0RBVEFQVFIoYmQpOworICAgICAgICBRQk1fREVTX1NFVF9EQVRBUFRSKGJkLCBkYXRhX3B0ci1vZmZzZXQpOworICAgICAgICAvKiBzZXQgYmQgZGF0YSBsZW4gKi8KKyAgICAgICAgZGF0YV9sZW4gPSBRQk1fREVTX0dFVF9EQVRBTEVOKGJkKTsKKyAgICAgICAgUUJNX0RFU19TRVRfREFUQUxFTihiZCwgZGF0YV9sZW4rb2Zmc2V0KTsKKyAgICAgICAgLyogc2V0IGJkIGNoZWNrc3VtICovCisgICAgICAgIHFibV9jYWxfc2V0X2NoZWNrc3VtKGJkKTsKKworICAgICAgICAvKiBzZXQgZ3BkIGRhdGEgbGVuICovCisgICAgICAgIGRhdGFfbGVuID0gUUJNX0RFU19HRVRfREFUQUxFTihncGQpOworICAgICAgICBRQk1fREVTX1NFVF9EQVRBTEVOKGdwZCwgZGF0YV9sZW4rb2Zmc2V0KTsKKyAgICAgICAgLyogc2V0IGdwZCBjaGVja3N1bSAqLworICAgICAgICAvL3FibV9jYWxfc2V0X2NoZWNrc3VtKGdwZCk7CisgICAgfWVsc2V7CisgICAgICAgIC8vNCA8Y2FzZSAyPiBHUEQtPkJVRkYgIAorICAgICAgICAvKiBzZXQgZ3BkIGRhdGEgcHRyICovCisgICAgICAgIGRhdGFfcHRyID0gIChrYWxfdWludDgqKVFCTV9ERVNfR0VUX0RBVEFQVFIoZ3BkKTsKKyAgICAgICAgUUJNX0RFU19TRVRfREFUQVBUUihncGQsIGRhdGFfcHRyLW9mZnNldCk7CisgICAgICAgIC8qIHNldCBncGQgZGF0YSBsZW4gKi8KKyAgICAgICAgZGF0YV9sZW4gPSBRQk1fREVTX0dFVF9EQVRBTEVOKGdwZCk7CisgICAgICAgIFFCTV9ERVNfU0VUX0RBVEFMRU4oZ3BkLCBkYXRhX2xlbitvZmZzZXQpOworICAgICAgICAvKiBzZXQgZ3BkIGNoZWNrc3VtICovCisgICAgICAgIC8vcWJtX2NhbF9zZXRfY2hlY2tzdW0oZ3BkKTsKKyAgICB9Cit9CisKKy8qIQorICogQGZ1bmN0aW9uICAgICAgICBbSU5MSU5FXSBDQ0NJREVWX1BVTExfUUJNX0RBVEFIRUFECisgKiBAYnJpZWYgICAgICAgICAgIFB1bGwgdGhlIFR4IEdQRC9CRCBkYXRhIHBvaW50ZXIuIGkuZS4gZGVjcmVhc2UgdGhlIGhlYWRlciByb29tCisgKgorICogICAgICAgICAgICAgICAgICA8VXNlZCBpbiBub24tbmV0d29yayBHUEQtPkJELT5CVUZGID4KKyAqCisgKiBAcGFyYW0gZ3BkICAgICAgIFtJTl0gcG9pbnRlciB0byB0aGUgR1BEIG5lZWQgbW9kaWZpY2F0aW9uCisgKiBAcGFyYW0gb2Zmc2V0ICAgIFtJTl0gbW92ZSB0aGUgZGF0YV9wdHIgYnkgb2Zmc2V0CisgKgorICogQHJldHVybiAgICAgICAgICB2b2lkCisgKi8KK3N0YXRpYyBfX2lubGluZSB2b2lkIENDQ0lERVZfUFVMTF9RQk1fREFUQUhFQUQodm9pZCogZ3BkLCBrYWxfdWludDMyIG9mZnNldCkKK3sKKyAgICB2b2lkKiBiZCA9IE5VTEw7CisgICAga2FsX3VpbnQ4KiBkYXRhX3B0ciA9IE5VTEw7CisgICAga2FsX3VpbnQzMiBkYXRhX2xlbiA9IDA7CisKKyAgICBpZigwICE9IFFCTV9ERVNfR0VUX0JEUChncGQpKXsKKyAgICAgICAgLy80IDxjYXNlIDE+IEdQRC0+QkQtPkJVRkYKKyAgICAgICAgLyogc2V0IGJkIGRhdGEgcHRyICovCisgICAgICAgIGJkID0gUUJNX0RFU19HRVRfREFUQVBUUihncGQpOworICAgICAgICBkYXRhX3B0ciA9ICAoa2FsX3VpbnQ4KilRQk1fREVTX0dFVF9EQVRBUFRSKGJkKTsKKyAgICAgICAgUUJNX0RFU19TRVRfREFUQVBUUihiZCwgZGF0YV9wdHIrb2Zmc2V0KTsKKyAgICAgICAgLyogc2V0IGJkIGRhdGEgbGVuICovCisgICAgICAgIGRhdGFfbGVuID0gUUJNX0RFU19HRVRfREFUQUxFTihiZCk7CisgICAgICAgIFFCTV9ERVNfU0VUX0RBVEFMRU4oYmQsIGRhdGFfbGVuLW9mZnNldCk7CisgICAgICAgIC8qIHNldCBiZCBjaGVja3N1bSAqLworICAgICAgICBxYm1fY2FsX3NldF9jaGVja3N1bShiZCk7CisgICAgICAgIFFCTV9DQUNIRV9GTFVTSF9OT19EU1IoYmQsIHNpemVvZihxYm1fZ3BkKSk7CisKKyAgICAgICAgLyogc2V0IGdwZCBkYXRhIGxlbiAqLworICAgICAgICBkYXRhX2xlbiA9IFFCTV9ERVNfR0VUX0RBVEFMRU4oZ3BkKTsKKyAgICAgICAgUUJNX0RFU19TRVRfREFUQUxFTihncGQsIGRhdGFfbGVuLW9mZnNldCk7CisgICAgICAgIC8qIHNldCBncGQgY2hlY2tzdW0gKi8KKyAgICAgICAgcWJtX2NhbF9zZXRfY2hlY2tzdW0oZ3BkKTsKKyAgICAgICAgUUJNX0NBQ0hFX0ZMVVNIX05PX0RTUihncGQsIHNpemVvZihxYm1fZ3BkKSk7CisgICAgfWVsc2V7CisgICAgICAgIC8vNCA8Y2FzZSAyPiBHUEQtPkJVRkYgIAorICAgICAgICAvKiBzZXQgZ3BkIGRhdGEgcHRyICovCisgICAgICAgIGRhdGFfcHRyID0gIChrYWxfdWludDgqKVFCTV9ERVNfR0VUX0RBVEFQVFIoZ3BkKTsKKyAgICAgICAgUUJNX0RFU19TRVRfREFUQVBUUihncGQsIGRhdGFfcHRyK29mZnNldCk7CisgICAgICAgIC8qIHNldCBncGQgZGF0YSBsZW4gKi8KKyAgICAgICAgZGF0YV9sZW4gPSBRQk1fREVTX0dFVF9EQVRBTEVOKGdwZCk7CisgICAgICAgIFFCTV9ERVNfU0VUX0RBVEFMRU4oZ3BkLCBkYXRhX2xlbi1vZmZzZXQpOworICAgICAgICAvKiBzZXQgYmQgY2hlY2tzdW0gKi8KKyAgICAgICAgcWJtX2NhbF9zZXRfY2hlY2tzdW0oZ3BkKTsKKyAgICAgICAgUUJNX0NBQ0hFX0ZMVVNIX05PX0RTUihncGQsIHNpemVvZihxYm1fZ3BkKSk7CisgICAgfQorICAgIFFCTV9EU1IoKTsKK30KKworLyohCisgKiBAZnVuY3Rpb24gICAgICAgIFtJTkxJTkVdIENDQ0lERVZfUUJNX0VOUQorICogQGJyaWVmICAgICAgICAgICBFbnF1ZXVlIHBfbmV3X2hlYWQvcF9uZXdfdGFpbCB0byBwcF9vcmlnX2hlYWQvcHBfb3JpZ190YWlsCisgKgorICogQHBhcmFtIHBfbmV3X2hlYWQgICAgW0lOXSBoZWFkIG9mIG5ldyBncGQgY2hhaW4KKyAqIEBwYXJhbSBwX25ld190YWlsICAgIFtJTl0gdGFpbCBvZiBuZXcgZ3BkIGNoYWluCisgKiBAcGFyYW0gcHBfb3JpZ19oZWFkICBbSU4vT1VUXSBoZWFkIG9mIG9yaWdpbmFsIGdwZCBjaGFpbgorICogQHBhcmFtIHBwX29yaWdfdGFpbCAgW0lOL09VVF0gdGFpbCBvZiBvcmlnaW5hbCBncGQgY2hhaW4KKyAqCisgKiBAcmV0dXJuICAgICAgICAgIHZvaWQKKyAqLworc3RhdGljIF9faW5saW5lIHZvaWQgQ0NDSURFVl9RQk1fRU5RKHZvaWQgKnBfbmV3X2hlYWQsIHZvaWQgKnBfbmV3X3RhaWwsIHZvaWQgKipwcF9vcmlnX2hlYWQsIHZvaWQgKipwcF9vcmlnX3RhaWwpCit7CisgICAga2FsX3VpbnQ4ICpwX29yaV90YWlsOworICAgIHBfb3JpX3RhaWwgPSAqcHBfb3JpZ190YWlsOworCisgICAgaWYoKnBwX29yaWdfaGVhZCA9PSBOVUxMKXsKKyAgICAgICAgKnBwX29yaWdfdGFpbCA9IHBfbmV3X3RhaWw7CisgICAgICAgICpwcF9vcmlnX2hlYWQgPSBwX25ld19oZWFkOworICAgIH1lbHNleworICAgICAgICAvKiBsaW5rIG5ldyBxdWV1ZSAqLworICAgICAgICBRQk1fREVTX1NFVF9ORVhUKHBfb3JpX3RhaWwsIHBfbmV3X2hlYWQpOworICAgICAgICAvLyBjaGFuZ2UgdGFpbCB0byBuZXcgdGFpbAorICAgICAgICAqcHBfb3JpZ190YWlsID0gcF9uZXdfdGFpbDsKKyAgICB9CisgICAgUUJNX0RFU19TRVRfTkVYVCgqcHBfb3JpZ190YWlsLCBOVUxMKTsKK30KKworLyohCisgKiBAZnVuY3Rpb24gICAgICAgIFtJTkxJTkVdIENDQ0lERVZfUUJNX0RFUQorICogQGJyaWVmICAgICAgICAgICBkZXF1ZXVlIG4gR1BEIGZyb20gcHBfc3JjX2hlYWQvcHBfc3JjX3RhaWwgdG8gcF9uZXdfaGVhZC9wX25ld190YWlsCisgKiAgICAgICAgICAgICAgICAgIGEgYWNjZWxlcmF0ZSB2ZXJzaW9uIG9mIHFibXRfZGVfcV9uCisgKgorICogQHBhcmFtIHBwX3NyY19oZWFkICAgW0lOL09VVF0gaGVhZCBvZiBzcmMgZ3BkIGNoYWluCisgKiBAcGFyYW0gcHBfc3JjX3RhaWwgICBbSU4vT1VUXSB0YWlsIG9mIHNyYyBncGQgY2hhaW4KKyAqIEBwYXJhbSBuICAgICAgICAgICAgIFtJTl0gZGVxdWV1ZSBjb3VudAorICogQHBhcmFtIHBwX25ld19oZWFkICAgW09VVF0gaGVhZCBvZiBkZXN0IGdwZCBjaGFpbgorICogQHBhcmFtIHBwX25ld190YWlsICAgW09VVF0gdGFpbCBvZiBkZXN0IGdwZCBjaGFpbgorICoKKyAqIEByZXR1cm4gICAgICAgICAgdm9pZAorICovCitzdGF0aWMgX19pbmxpbmUga2FsX3VpbnQzMiBDQ0NJREVWX1FCTV9ERVEoCisJCXZvaWQgKipwcF9zcmNfaGVhZCwgCisJCXZvaWQgKipwcF9zcmNfdGFpbCwgCisJCWthbF91aW50MzIgbiwKKwkJdm9pZCAqKnBwX25ld19oZWFkLAorCQl2b2lkICoqcHBfbmV3X3RhaWwKKwkJKQoreworICAgIGthbF91aW50MzIgZGVxX251bSA9IDA7CisKKyAgICBpZigwID09IG4peworICAgICAgICAqcHBfbmV3X2hlYWQgPSBOVUxMOworICAgICAgICAqcHBfbmV3X3RhaWwgPSBOVUxMOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZihOVUxMID09ICpwcF9zcmNfaGVhZCl7CisgICAgICAgIEVYVF9BU1NFUlQoTlVMTCA9PSAqcHBfc3JjX3RhaWwsIChrYWxfdWludDMyKSpwcF9zcmNfaGVhZCwgKGthbF91aW50MzIpICpwcF9zcmNfdGFpbCwgMCk7CisgICAgICAgICpwcF9uZXdfaGVhZCA9IE5VTEw7CisgICAgICAgICpwcF9uZXdfdGFpbCA9IE5VTEw7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgICpwcF9uZXdfaGVhZCA9ICpwcF9zcmNfaGVhZDsKKworCisgICAgLy9mb3IoZGVxX251bSA9IDA7IGRlcV9udW0gPCBuOyBkZXFfbnVtKyspeworICAgIGRveyAKKyAgICAgICAgKnBwX25ld190YWlsID0gKnBwX3NyY19oZWFkOworICAgICAgICBkZXFfbnVtKys7CisgICAgICAgICpwcF9zcmNfaGVhZCA9IFFCTV9ERVNfR0VUX05FWFQoKnBwX3NyY19oZWFkKTsKKyAgICB9d2hpbGUoKGRlcV9udW0gPCBuKSAmJiAoTlVMTCAhPSAqcHBfc3JjX2hlYWQpKTsKKworICAgIGlmKE5VTEwgPT0gKnBwX3NyY19oZWFkKXsKKyAgICAgICAgKnBwX3NyY190YWlsID0gTlVMTDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGRlcV9udW07Cit9CisKKy8qIQorICogQGZ1bmN0aW9uICAgICAgICBbSU5MSU5FXSBDQ0NJREVWX0ZJWF9JT1JfTlVMTF9MQVNUCisgKiBAYnJpZWYgICAgICAgICAgIGlmIHRoZSBsYXN0IGdwZCBvZiBpb3IgaXMgPT0gTlVMTCwgdHJhdmVyc2UgdGhlIEdQRCBjaGFpbiB0byBmaWxsIHRoZSBsYXN0X2dwZCBpbmZvCisgKgorICogQHBhcmFtIGlvciAgICAgICBbSU5dIGlucHV0IGlvcgorICoKKyAqIEByZXR1cm4gICAgICAgICAgdm9pZAorICovCitzdGF0aWMgX19pbmxpbmUgdm9pZCBDQ0NJREVWX0ZJWF9JT1JfTlVMTF9MQVNUKGNjY2lfaW9fcmVxdWVzdF90KiBpb3IpCit7CisgICAgcWJtX2dwZCAgICAgICAgICAgICAqbGFzdF9ncGQgPSBpb3ItPmxhc3RfZ3BkOyAKKyAgICBxYm1fZ3BkICAgICAgICAgICAgICpmaXJzdF9ncGQgPSBpb3ItPmZpcnN0X2dwZDsKKyAgICBxYm1fZ3BkICAgICAgICAgICAgICpjdXJyZW50X2dwZDsKKyAgICAKKyAgICAvKiAgZml4IHRoZSBsYXN0X2dwZCA9PSBOVUxMIGNhc2UgKi8KKyAgICBpZiAobGFzdF9ncGQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGN1cnJlbnRfZ3BkID0gZmlyc3RfZ3BkOworICAgICAgICB3aGlsZSAoIGN1cnJlbnRfZ3BkLT5wX25leHQgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1cnJlbnRfZ3BkID0gY3VycmVudF9ncGQtPnBfbmV4dDsKKyAgICAgICAgfQorICAgICAgICBpb3ItPmxhc3RfZ3BkID0gY3VycmVudF9ncGQ7CisgICAgfQorfQorCisKKy8qIQorICogQGZ1bmN0aW9uICAgICAgICBbSU5MSU5FXSBDQ0NJREVWX1JNX0NDQ0lfSEVBREVSUyAKKyAqIEBicmllZiAgICAgICAgICAgVG9vbCBmdW5jdGlvbiB0byByZW1vdmUgdGhlIENDQ0kgaGVhZGVyIGluIEdQRC0+QkQtPkJVRkYgLyBHUEQtPkJVRkYKKyAqCisgKiBAcGFyYW0gY2hhbm5lbCAgIFtJTl0gY2hhbm5lbCBudW1iZXIgZm9yIHRoaXMgQ0NDSSBoZWFkZXIKKyAqIEBwYXJhbSBncGQgICAgICAgW0lOXSBwb2ludGVyIHRvIHRoZSBncGQKKyAqCisgKiBAcmV0dXJuICAgICAgICAgIEtBTF9UUlVFOiBzdWNjZXNzLCBLQUxfRkFMU0U6IGNoYW5uZWwgbnVtYmVyIG5vdCBtYXRjaGVkCisgKi8KK3N0YXRpYyBfX2lubGluZSBrYWxfYm9vbCBDQ0NJREVWX1JNX0NDQ0lfSEVBREVSUyhDQ0NJX0NIQU5ORUxfVCBjaGFubmVsLCBxYm1fZ3BkICpncGQpCit7CisgICAgQ0NDSV9CVUZGX1QgICAgICAgICAqcGRhdGE7CisKKyAgICAvLzQgPDE+IGNoZWNrIGdwZC0+YmQtPmJ1ZmYtPmNoYW5uZWwgPSBjaGFubmVsCisgICAgcGRhdGEgPSBDQ0NJREVWX0dFVF9RQk1fREFUQVBUUihncGQpOworICAgIEVYVF9BU1NFUlQocGRhdGEsIChrYWxfdWludDMyKXBkYXRhLCAoa2FsX3VpbnQzMilncGQsIChrYWxfdWludDMyKWNoYW5uZWwpOworCisgICAgLyogdHJlYXQgY2hhbm5lbCBub3QgbWF0Y2ggYW5kIHNpemUgPSAwIGFzIGludmFsaWQgR1BEKi8KKyAgICBpZihwZGF0YS0+Y2hhbm5lbCAhPSBjaGFubmVsIHx8IHBkYXRhLT5kYXRhWzFdID09IHNpemVvZihDQ0NJX0JVRkZfVCkpeworICAgICAgICAvL2hpZl90cmFjZV9lcnJvcihDQ0NJREVWX1RSX1VMX0NDQ0lfQ0hfRVJSLCBwZGF0YS0+Y2hhbm5lbCwgY2hhbm5lbCk7CisgICAgICAgIHJldHVybiBLQUxfRkFMU0U7CisgICAgfWVsc2V7CisgICAgICAgIC8vNCA8Mj4gbW92ZSBkYXRhIHBvaW50ZXIgdG8gcmF3IGRhdGEKKyAgICAgICAgQ0NDSURFVl9QVUxMX1FCTV9EQVRBSEVBRChncGQsIHNpemVvZihDQ0NJX0JVRkZfVCkpOworICAgIH0KKworICAgIHJldHVybiBLQUxfVFJVRTsKK30KKworLyohCisgKiBAZnVuY3Rpb24gICAgICAgIFtJTkxJTkVdIGNjY2lfZGVzdF9pb3IKKyAqIEBicmllZiAgICAgICAgICAgVHJhdmVyc2UgaW9yIGNoYWluIHRvIGZyZWUgdGhlIGxpbmtlZCBpb3IvR1BEL0JEL0J1ZmYgCisgKgorICogQHBhcmFtIGlvciAgICAgICBbSU5dIHBvaW50ZXIgdG8gdGhlIGlvciBjaGFpbgorICoKKyAqIEByZXR1cm4gICAgICAgICAgdm9pZAorICovCitzdGF0aWMgX19pbmxpbmUgdm9pZCBjY2NpX2Rlc3RfaW9yKGNjY2lfaW9fcmVxdWVzdF90ICppb3IpeworICAgIGNjY2lfaW9fcmVxdWVzdF90ICAgICpuZXh0X2lvcjsKKyAgICBxYm1fZ3BkKiAgICAgICAgICAgIGN1cnJlbnRfZ3BkOworCisgICAgRVhUX0FTU0VSVChpb3IsIChrYWxfdWludDMyKWlvciwgMCwgMCk7CisgICAgZm9yICg7IGlvcjsgaW9yID0gbmV4dF9pb3IpIHsKKyAgICAgICAgbmV4dF9pb3IgPSBpb3ItPm5leHRfcmVxdWVzdDsKKyAgICAgICAgRVhUX0FTU0VSVChpb3ItPmZpcnN0X2dwZCwgKGthbF91aW50MzIpaW9yLT5maXJzdF9ncGQsIChrYWxfdWludDMyKWlvciwgIChrYWxfdWludDMyKW5leHRfaW9yKTsKKworICAgICAgICAvKiAgZml4IHRoZSBsYXN0X2dwZCA9PSBOVUxMIGNhc2UgKi8KKyAgICAgICAgaWYgKGlvci0+bGFzdF9ncGQgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgY3VycmVudF9ncGQgPSBpb3ItPmZpcnN0X2dwZDsKKyAgICAgICAgICAgIHdoaWxlICggY3VycmVudF9ncGQtPnBfbmV4dCAhPSBOVUxMICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50X2dwZCA9IGN1cnJlbnRfZ3BkLT5wX25leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpb3ItPmxhc3RfZ3BkID0gY3VycmVudF9ncGQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEVYVF9BU1NFUlQoaW9yLT5maXJzdF9ncGQgJiYgaW9yLT5sYXN0X2dwZCwgKGthbF91aW50MzIpaW9yLT5maXJzdF9ncGQsIChrYWxfdWludDMyKWlvci0+bGFzdF9ncGQsIChrYWxfdWludDMyKWlvcik7CisgICAgICAgIHFibXRfZGVzdF9xKGlvci0+Zmlyc3RfZ3BkLCBpb3ItPmxhc3RfZ3BkKTsKKyAgICB9Cit9CisKKy8qIEdldCBhZGRyZXNzIGJ5IGEgb2Zmc2V0IG9mIHRoZSBQRCAqLworI2RlZmluZSBDQ0NJREVWX1FCTV9ERVNfR0VUX0FERFJfQllfT0ZGU0VUKF9wLCBfb2ZzdCkgIFwKKyAgICAgICAgICAodm9pZCopKChrYWxfdWludDgqKShfcCkgKyAoX29mc3QpKQorCisvKiAgVXNlZCBmb3IgYnVmZmVyIGFuZCBkZXNjcmlwdG9yIGFyZSBpbiBjb250aW51cyBtZW1vcnkgYWRkcmVzcyAqLworI2RlZmluZSBDQ0NJREVWX1FCTV9ERVNfU0VUX0RBVEFfQllfT0ZGU0VUKF9wLCBfb2ZzdCkgIFwKKyAgICAgICAgICAoUUJNX0dFVF9HUERfUFRSKF9wKS0+cF9kYXRhX3RiZCA9IENDQ0lERVZfUUJNX0RFU19HRVRfQUREUl9CWV9PRkZTRVQoX3AsIF9vZnN0KSkKKworI2RlZmluZSBDQ0NJX0NPTU1fQkRfT0ZTVCAgICAoNjQpIC8qIHBfZGF0YV90YmQgPSA2NCAqLworI2RlZmluZSBDQ0NJX0NPTU1fR0VUX0JEKF9wKSBDQ0NJREVWX1FCTV9ERVNfR0VUX0FERFJfQllfT0ZGU0VUKF9wLCBDQ0NJX0NPTU1fQkRfT0ZTVCkKKworLyogdGhpcyBjb2RlIHdpbGwgc2V0IGRhdGFsZW4gYW5kIGV4dGxlbiB0byAwICovCisvKiBCZWNhdXNlIGluIGRlc2NyaXB0b3IsIHRoZXkgYXJlIGluIHRoZSAxMiBieXRlcyAqLworI2RlZmluZSBDQ0NJX0NPTU1fUkVTRVRfREFUQUxFTl9FWFRMRU4oX3ApICooa2FsX3VpbnQzMiopKChrYWxfdWludDgqKShfcCkgKyAxMikgPSAwCisKKy8qIQorICogQGZ1bmN0aW9uICAgICAgICBbSU5MSU5FXSBDQ0NJREVWX1JTVF9DQ0NJX0NPTU1fR1BEX0xJU1QKKyAqIEBicmllZiAgICAgICAgICAgUmVzZXQgdGhlIEdQRCBsaXN0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLCB0eXBlIGhhcyB0byBiZSBRQk1fVFlQRV9DQ0NJX0NPTU0KKyAqCisgKiBAcGFyYW0gZmlyc3RfZ3BkIFtJTl0gcG9pbnRlciB0byB0aGUgZmlyc3QgR1BEIGluIHRoZSBHUEQgY2hhaW4KKyAqIEBwYXJhbSBsYXN0X2dwZCAgW0lOXSBwb2ludGVyIHRvIHRoZSBsYXN0IEdQRCBpbiB0aGUgR1BEIGNoYWluCisgKgorICogQHJldHVybiAgICAgICAgICB2b2lkCisgKi8KK3N0YXRpYyBfX2lubGluZSBrYWxfdWludDMyIENDQ0lERVZfUlNUX0NDQ0lfQ09NTV9HUERfTElTVChxYm1fZ3BkKiBmaXJzdF9ncGQsIHFibV9ncGQqIGxhc3RfZ3BkKQoreworICAgIHFibV9ncGQqICAgICAgICAgICAgY3VycmVudF9ncGQgPSBOVUxMOworICAgIHFibV9ncGQqICAgICAgICAgICAgbmV4dF9ncGQgPSBOVUxMOworICAgIGthbF91aW50MzIgICAgICAgICAgbnVtX2dwZCA9IDA7CisgICAgCisgICAgRVhUX0FTU0VSVChmaXJzdF9ncGQgJiYgbGFzdF9ncGQsIChrYWxfdWludDMyKWZpcnN0X2dwZCwgKGthbF91aW50MzIpbGFzdF9ncGQsIDApOworICAgIGN1cnJlbnRfZ3BkID0gZmlyc3RfZ3BkOworCisgICAgZG8geworICAgICAgICBuZXh0X2dwZCA9IFFCTV9ERVNfR0VUX05FWFQoY3VycmVudF9ncGQpOworICAgICAgICBxYm1fcmVzZXRfcGQoUUJNX1RZUEVfQ0NDSV9DT01NLCAodm9pZCopY3VycmVudF9ncGQpOworICAgICAgICBxYm1fY2FsX3NldF9jaGVja3N1bSgoa2FsX3VpbnQ4ICopY3VycmVudF9ncGQpOworICAgICAgICBRQk1fQ0FDSEVfRkxVU0hfTk9fRFNSKGN1cnJlbnRfZ3BkLCBzaXplb2YocWJtX2dwZCkpOworICAgICAgICBudW1fZ3BkICsrOworICAgICAgICBpZiAoIGN1cnJlbnRfZ3BkID09IGxhc3RfZ3BkICkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gICAgICAgIAorICAgICAgICBjdXJyZW50X2dwZCA9IG5leHRfZ3BkOworICAgIH0gd2hpbGUgKCBjdXJyZW50X2dwZCAhPSBOVUxMICk7CisgICAgUUJNX0RTUigpOworICAgIHJldHVybiBudW1fZ3BkOworfQorCisvKiEKKyAqIEBmdW5jdGlvbiAgICAgICAgW1Byb3RvdHlwZV0gY2NjaWRldl9kbF9oZWFkZXJfaGFuZGxlX2NiCisgKiBAYnJpZWYgICAgICAgICAgIFByb3RvdHlwZSBvZiBmdW5jdGlvbiB0byBoYW5kbGUgZWFjaCBwYWNrZXQncyBDQ0NJIEhlYWRlcgorICoKKyAqIEBwYXJhbSBwRGV2aWNlICAgICBbSU5dIHBvaW50ZXIgdG8gdGhlIENDQ0lERVYgZGV2aWNlCisgKiBAcGFyYW0gcF9jY2NpX2hlYWQgW0lOXSBwb2ludGVyIHRvIGNjY2kgaGVhZGVyIGJ1ZmZlcgorICogQHBhcmFtIGthbF91aW50OCAgIFtJTl0gcG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIKKyAqCisgKiBAcmV0dXJuICAgICAgICAgIDAsIHVudXNlZCAKKyAqLwordHlwZWRlZiBrYWxfdWludDMyICgqY2NjaWRldl9kbF9oZWFkZXJfaGFuZGxlX2NiKSh2b2lkKiBwX2RldmljZSwgQ0NDSV9CVUZGX1QqIHBfY2NjaV9oZWFkLCBrYWxfdWludDgqIHBkYXRhLCBrYWxfdWludDMyIGRhdGFfbGVuKTsKKworLyohCisgKiBAZnVuY3Rpb24gICAgICAgIFtzdGF0aWNdIENDQ0lERVZfU1BEX1BJX1JFTEFZT1VUCisgKiBAYnJpZWYgICAgICAgICAgIFRyYXZlcnNlIHRoZSBpbnB1dCBHUEQgbGlzdCBhbmQgaW5zZXJ0IHRoZSBDQ0NJIGhlYWRlciBvbiB0aGUgZmlyc3QgQkQtPmRhdGEgCisgKgorICogQHBhcmFtIHNwZCAgICAgICBbSU5dIHBvaW50ZXIgdG8gdGhlIFNQRCBpbiB0aGUgR1BEIGNoYWluCisgKgorICogQHJldHVybiAgICAgICAgICByZWxheW91dCBzdWNjZXNzCisgKi8KK3N0YXRpYyBfX2lubGluZSBrYWxfdWludDMyIENDQ0lERVZfU1BEX1BJX1JFTEFZT1VUKHFibV9ncGQqIHBfc3BkKXsKKyAgICBoaWZfc3BkX2V4dF9oZWFkZXIgICAgICAgICAgKnBfc3BkX2V4dCA9IChoaWZfc3BkX2V4dF9oZWFkZXIqKVFCTV9TUERfR0VUX0VYVCgocWJtX3NwZCopcF9zcGQpOworICAgIGhpZl9zcGRfcGFja2V0X2hlYWRlciAgICAgICAqcF9zcGRfcGg7CisgICAgcWJtX3NwZF9waWUgICAgICAgICAgICAgICAgICpwX3NwZF9waWU7CisgICAgcWJtX3NwZF9waSAgICAgICAgICAgICAgICAgICpwX3NwZF9waSA9IFFCTV9TUERfR0VUX1BJKChxYm1fc3BkKilwX3NwZCk7IAorICAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgICBpLCBwa3RfbnVtID0gMCwgaGVhZGVyX2xlbiA9IHNpemVvZihDQ0NJX0JVRkZfVCk7CisgICAgCisgICAgRVhUX0FTU0VSVChRQk1fREVTX0dFVF9QRFQocF9zcGQpID09IERFU19GTEFHX0JJVF9TUEQzLFFCTV9ERVNfR0VUX1BEVChwX3NwZCksIChrYWxfdWludDMyKXBfc3BkLCAwKTsKKyAgICBwX3NwZF9waWUgPSBRQk1fU1BEX1BJX0dFVF9GSVJTVF9QSUUocF9zcGRfcGkpOworICAgIHBfc3BkX3BoID0gSElGX1NQRF9FWFRfR0VUX0ZJUlNUX1BIKHBfc3BkX2V4dCk7CisgICAgcGt0X251bSA9IFFCTV9TUERfUElfR0VUX1BLVE5VTShwX3NwZF9waSk7CisgICAgSElGX1NQRF9FWFRfU0VUX1BLVE5VTShwX3NwZF9leHQsIHBrdF9udW0pOworICAgIEhJRl9TUERfRVhUX1NFVF9TUEQxX0hFQURFUkxFTihwX3NwZF9leHQgLCAoa2FsX3VpbnQ4KWhlYWRlcl9sZW4pOworI2lmZGVmIENDQ0lERVZfU1BEX1JFTEFZT1VUX1NFVF9QS1ROVU1fVFJBQ0UKKyAgICBpZihLQUxfVFJVRSAhPSBrYWxfcXVlcnlfc3lzdGVtSW5pdCgpICYmIEtBTF9GQUxTRSA9PSBJTlRfUXVlcnlFeGNlcHRpb25TdGF0dXMoKSkKKyAgICAgICAgQ0NDSURFVl9TUERfUkVMQVlPVVRfU0VUX1BLVE5VTV9UUkFDRShwa3RfbnVtLCAoa2FsX3VpbnQzMikgcF9zcGRfcGksIChrYWxfdWludDMyKSBwX3NwZF9leHQpOworI2VuZGlmIAorICAgIFFCTV9ERVNfU0VUX1NQRDEocF9zcGQpOworICAgIGZvcihpID0gMTsgaSA8PXBrdF9udW07IGkrKyl7CisgICAgICAgIGthbF9tZW1fY3B5KHBfc3BkX3BoLCBwX3NwZF9waWUsIHNpemVvZihxYm1fc3BkX3BpZSkpOworCQkvLyBAVGhpcyBpcyB0aGUgbGFzdCBwYWNrZXQgOiBjaGVjayBpZiBFUERDUCBzZXQgdGhlIEVPTCBjb3JyZWN0bHksIGlmIHRoaXMgYXNzZXJ0IGhhcHBlbmQsIHBsZWFzZSBjb250YWN0IEVQRENQIG93bmVyCisgICAgICAgIGlmIChpID09IHBrdF9udW0peworICAgICAgICAgICAgRVhUX0FTU0VSVChISUZfU1BEX1BIX0dFVF9FT0wocF9zcGRfcGgpLCBcCisgICAgICAgICAgICAgICAgKGthbF91aW50MzIpcF9zcGQsIHBrdF9udW0sIChrYWxfdWludDMyKXBfc3BkX3BoKTsKKyAgICAgICAgfQorCQkvLyBAVGhpcyBpcyBhbiBFT0wgcGFja2V0IDogaWYgZ2V0IEVPTCBidXQgbm90IGxhc3QgcGFja2V0LCBzaG91bGQgYnJlYWssIG5vIG5lZWQgdG8gaGFuZGxlIHJlbWFpbmluZyBwYWNrZXQKKyAgICAgICAgZWxzZSBpZiAoSElGX1NQRF9QSF9HRVRfRU9MKHBfc3BkX3BoKSl7CisjaWZkZWYgQ0NDSURFVl9TUERfUkVMQVlPVVRfR0VUX0VPTF9CUkVBS19UUkFDRQorICAgICAgICAgICAgaWYoS0FMX1RSVUUgIT0ga2FsX3F1ZXJ5X3N5c3RlbUluaXQoKSAmJiBLQUxfRkFMU0UgPT0gSU5UX1F1ZXJ5RXhjZXB0aW9uU3RhdHVzKCkpCisgICAgICAgICAgICAgICAgQ0NDSURFVl9TUERfUkVMQVlPVVRfR0VUX0VPTF9CUkVBS19UUkFDRShwa3RfbnVtLCBpLCAoa2FsX3VpbnQzMikgcF9zcGRfcGgpOworI2VuZGlmICAgICAgICAgICAKKwkJCWJyZWFrOworICAgICAgICB9CisJCS8vIEBUaGlzIGlzIGEgbm9ybWFsIHBhY2tldCA6IGlmIGdldCBub3QgbGFzdCBHUEQsIG1vdmUgdG8gbmV4dCBwaAorCQllbHNleworICAgICAgICAgICAgcF9zcGRfcGggPSBISUZfU1BEX1BIX05FWFQocF9zcGRfcGgsIChrYWxfdWludDgpaGVhZGVyX2xlbik7CisgICAgICAgICAgICBwX3NwZF9waWUgPSBRQk1fU1BEX1BJRV9ORVhUKHBfc3BkX3BpZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKworLyohCisgKiBAZnVuY3Rpb24gICAgICAgIFtzdGF0aWNdIENDQ0lERVZfUFJPQ0VTU19ETF9HUERfTElTVAorICogQGJyaWVmICAgICAgICAgICBUcmF2ZXJzZSB0aGUgaW5wdXQgR1BEIGxpc3QgYW5kIGluc2VydCB0aGUgQ0NDSSBoZWFkZXIgb24gdGhlIGZpcnN0IEJELT5kYXRhIAorICoKKyAqIEBwYXJhbSBwRGV2aWNlICAgW0lOXSBwb2ludGVyIHRvIHRoZSBDQ0NJREVWIGRldmljZQorICogQHBhcmFtIGZpcnN0X2dwZCBbSU5dIHBvaW50ZXIgdG8gdGhlIGZpcnN0IEdQRCBpbiB0aGUgR1BEIGNoYWluCisgKiBAcGFyYW0gbGFzdF9ncGQgIFtJTl0gcG9pbnRlciB0byB0aGUgbGFzdCBHUEQgaW4gdGhlIEdQRCBjaGFpbgorICogQHBhcmFtIGNjY2lkZXZfZGxfaGVhZGVyX2hhbmRsZV9jYiAgW0lOXSBwb2ludGVyIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgZWFjaCBwYWNrZXQncyBDQ0NJIEhlYWRlcgorICoKKyAqIEByZXR1cm4gICAgICAgICAgbnVtYmVyIG9mIGdwZC9zcGQgaW4gYmV0d2VlbiBmaXJzdF9ncGQgYW5kIGxhc3RfZ3BkCisgKi8KK3N0YXRpYyBfX2lubGluZSBrYWxfdWludDMyIENDQ0lERVZfUFJPQ0VTU19ETF9HUERfTElTVCh2b2lkKiBwRGV2aWNlLCBxYm1fZ3BkKiBmaXJzdF9ncGQsIHFibV9ncGQqIGxhc3RfZ3BkLCBjY2NpZGV2X2RsX2hlYWRlcl9oYW5kbGVfY2IgY2IpCit7ICAvKnByb2Nlc3NfdHhfZ3BkX2xpc3QqLworICAgIHFibV9ncGQqICAgICAgICAgICAgcF9ncGQgPSBOVUxMOworICAgIGthbF91aW50MzIgICAgICAgICAgZ3BkX2NudCA9IDA7CisgICAgQ0NDSV9CVUZGX1QgICAgICAgICAqcF9jY2NpX2hlYWQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICBjdXJyZW50X3BkdDsKKyAgICBoaWZfc3BkX3BhY2tldF9oZWFkZXIgICpwX3NwZF9waCwgKnBfc3BkX3BoX25leHQ9TlVMTDsgIC8vc3BkIHBhY2tldCBoZWFkCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAqcF9wYXlsb2FkLCAqcF9wYXlsb2FkX25leHQ9TlVMTDsgLy9zcGQgcGFja2V0IHBheWxvYWQKKyAgICBoaWZfc3BkX2V4dF9oZWFkZXIgICpwX3NwZF9leHQ7IC8vc3BkIGV4dGVudGlvbgorICAgIGthbF91aW50MTYgICAgICAgICAgcGt0X251bTsKKyAgICBrYWxfdWludDMyICAgICAgICAgIGksIHBheWxvYWRfbGVuLCBoZWFkZXJfbGVuPTA7CisgICAga2FsX3VpbnQzMiAgICAgICAgICBkYXRhX2xlbiA9IDA7CisgICAgRVhUX0FTU0VSVChmaXJzdF9ncGQgJiYgbGFzdF9ncGQsIChrYWxfdWludDMyKWZpcnN0X2dwZCwgKGthbF91aW50MzIpbGFzdF9ncGQsIChrYWxfdWludDMyKXBEZXZpY2UpOworICAKKyAgICBwX2dwZCA9IGZpcnN0X2dwZDsKKyAgICBkbyB7CisgICAgICAgIGN1cnJlbnRfcGR0ID0gUUJNX0RFU19HRVRfUERUKHBfZ3BkKTsKKyAgICAgICAgaWYoY3VycmVudF9wZHQgPT0gREVTX0ZMQUdfQklUX1NQRDMpeworICAgICAgICAgICAgQ0NDSURFVl9TUERfUElfUkVMQVlPVVQocF9ncGQpOworICAgICAgICAgICAgY3VycmVudF9wZHQgPSBRQk1fREVTX0dFVF9QRFQocF9ncGQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBFWFRfQVNTRVJUKCgoIGN1cnJlbnRfcGR0ID09IERFU19GTEFHX0JJVF9TUEQxKSB8fCAoY3VycmVudF9wZHQgPT0gREVTX0ZMQUdfQklUX0dQRCkpLCBcCisgICAgICAgICAgICAoa2FsX3VpbnQzMiljdXJyZW50X3BkdCwgKGthbF91aW50MzIpcERldmljZSwgKGthbF91aW50MzIpcF9ncGQpOworCisgICAgICAgIGlmKGN1cnJlbnRfcGR0ID09IERFU19GTEFHX0JJVF9TUEQxKXsKKyAgICAgICAgLy80IDwxPiBTUEQxIGhhbmRsaW5nCisgICAgICAgICAgICBwX3NwZF9leHQgPSAoaGlmX3NwZF9leHRfaGVhZGVyKilRQk1fU1BEX0dFVF9FWFQoKHFibV9zcGQqKXBfZ3BkKTsKKyAgICAgICAgICAgIHBfc3BkX3BoID0gSElGX1NQRF9FWFRfR0VUX0ZJUlNUX1BIKChoaWZfc3BkX2V4dF9oZWFkZXIqKXBfc3BkX2V4dCk7CisgICAgICAgICAgICBwX3BheWxvYWQgPSBRQk1fREVTX0dFVF9EQVRBUFRSKChxYm1fc3BkKilwX2dwZCk7CisgICAgICAgICAgICBwa3RfbnVtID0gSElGX1NQRF9FWFRfR0VUX1BLVE5VTSgoaGlmX3NwZF9leHRfaGVhZGVyKilwX3NwZF9leHQpOworICAgICAgICAgICAgLy9bdGs2MjkxX213X2hpZl9zcGRfZGVzaWduX2RvY192MS4wOiBUaGUgcGFja2V0IG51bWJlciBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gMSAKKyAgICAgICAgICAgIEVYVF9BU1NFUlQocGt0X251bSA+PSAxLCBwa3RfbnVtLCAoa2FsX3VpbnQzMilwX3NwZF9leHQsIChrYWxfdWludDMyKShxYm1fc3BkKilwX2dwZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vNCA8MS4xPiBzZXQgc3BkMV9oZWFkZXJfbGVuID0gc2l6ZW9mKENDQ0lfQlVGRl9UKTsKKyAgICAgICAgICAgIC8vSGVhZGVyIGxlbmd0aCBmaWxsIGJ5IGZpcnN0IHVzZXIKKyAgICAgICAgICAgIGhlYWRlcl9sZW4gPSBISUZfU1BEX0VYVF9HRVRfU1BEMV9IRUFERVJMRU4oKGhpZl9zcGRfZXh0X2hlYWRlciopcF9zcGRfZXh0KTsKKyAgICAgICAgICAgIHBfc3BkX3BoX25leHQgPSBISUZfU1BEX1BIX05FWFQocF9zcGRfcGgsIGhlYWRlcl9sZW4pOyAvLyBpbml0aWFsCisjaWZkZWYgQ0NDSURFVl9QUk9DRVNTX0RMX1NQRF9UUkFDRQorICAgICAgICAgICAgaWYoS0FMX1RSVUUgIT0ga2FsX3F1ZXJ5X3N5c3RlbUluaXQoKSAmJiBLQUxfRkFMU0UgPT0gSU5UX1F1ZXJ5RXhjZXB0aW9uU3RhdHVzKCkpCisgICAgICAgICAgICAgICAgQ0NDSURFVl9QUk9DRVNTX0RMX1NQRF9UUkFDRShwa3RfbnVtLCAoa2FsX3VpbnQzMilwX2dwZCk7CisjZW5kaWYKKyAgICAgICAgICAgIC8vNCA8MS4yPiBTZXQgSUdSIGZvciAxc3QgcGt0LCBmb3IgTUJJTSB1c2Ugb25seSwgYW5kIG1vdmUgdG8gMm5kIFBIICAgCisgICAgICAgICAgICAvL2l0ZXJhdGUgZnJvbSB0aGUgMXN0IHBoCisgICAgICAgICAgICBmb3IgKGk9MTsgaTw9cGt0X251bTsgaSsrKXsKKyAgICAgICAgICAgICAgICBwYXlsb2FkX2xlbiA9IEhJRl9TUERfUEhfR0VUX1BBWUxPQURfTEVOKHBfc3BkX3BoKTsKKyAgICAgICAgICAgICAgICBpZiAoaSAhPSBwa3RfbnVtKXsKKyAgICAgICAgICAgICAgICAgICAgcF9zcGRfcGhfbmV4dCA9IEhJRl9TUERfUEhfTkVYVChwX3NwZF9waCwgaGVhZGVyX2xlbik7CisgICAgICAgICAgICAgICAgICAgIHBfcGF5bG9hZF9uZXh0ID0gUUJNX1NQRF9QQVlMT0FEX05FWFQocF9wYXlsb2FkLCBwYXlsb2FkX2xlbik7CisgICAgICAgICAgICAgICAgfSAgICAKKyAgICAgICAgICAgICAgICBpZigwID09IEhJRl9TUERfUEhfR0VUX0lHUihwX3NwZF9waCkpeyAvLyBpZiBJR1IgYml0IGlzIG5vdCBzZXQKKyAgICAgICAgICAgICAgICAgICAgLy80IDwxLjM+IGFwcGVuZCBDQ0NJIGhlYWRlciBDQ0NJX0JVRkZfVAorICAgICAgICAgICAgICAgICAgICBwX2NjY2lfaGVhZCA9IChDQ0NJX0JVRkZfVCAqKUhJRl9TUERfUEhfR0VUX0hFQURFUihwX3NwZF9waCk7CisgICAgICAgICAgICAgICAgICAgIC8vIGNhbGwgQ0NDSSBEZXZpY2UgQ0NDSSBoZWFkZXIgaGFuZGxlIAorICAgICAgICAgICAgICAgICAgICBjYihwRGV2aWNlLCBwX2NjY2lfaGVhZCwgcF9wYXlsb2FkLCBwYXlsb2FkX2xlbik7CisgICAgICAgICAgICAgICAgICAgIC8vIHBheWxvYWQgbGVuZ3RoIGNoZWNrLCBpZiB0aGlzIGFzc2VydCBoYXBwZW5kLCBwbGVhc2UgY29udGFjdCBFUERDUCBvd25lcgorICAgICAgICAgICAgICAgICAgICBFWFRfQVNTRVJUKHBheWxvYWRfbGVuLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoa2FsX3VpbnQzMilwX2dwZCwgcGt0X251bSwgKGthbF91aW50MzIpcF9zcGRfcGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNleyAvLyBpZiBJR1IgYml0IGlzIHNldAorI2lmZGVmIENDQ0lERVZfUFJPQ0VTU19ETF9TUERfU0VUX0lHUl9UUkFDRQorICAgICAgICAgICAgICAgICAgICBpZihLQUxfVFJVRSAhPSBrYWxfcXVlcnlfc3lzdGVtSW5pdCgpICYmIEtBTF9GQUxTRSA9PSBJTlRfUXVlcnlFeGNlcHRpb25TdGF0dXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lERVZfUFJPQ0VTU19ETF9TUERfU0VUX0lHUl9UUkFDRShISUZfU1BEX1BIX0dFVF9JR1IocF9zcGRfcGgpLCBpLCAoa2FsX3VpbnQzMilwX3NwZF9waCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisJCQkJLy8gQFRoaXMgaXMgdGhlIGxhc3QgcGFja2V0IDogY2hlY2sgaWYgRVBEQ1Agc2V0IHRoZSBFT0wgY29ycmVjdGx5LCBpZiB0aGlzIGFzc2VydCBoYXBwZW5kLCBwbGVhc2UgY29udGFjdCBFUERDUCBvd25lcgorICAgICAgICAgICAgICAgIGlmIChpID09IHBrdF9udW0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBFWFRfQVNTRVJUKEhJRl9TUERfUEhfR0VUX0VPTChwX3NwZF9waCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChrYWxfdWludDMyKXBfZ3BkLCBwa3RfbnVtLCAoa2FsX3VpbnQzMilwX3NwZF9waCk7CisgICAgICAgICAgICAgICAgICAgIFFCTV9DQUNIRV9GTFVTSChwX3NwZF9leHQsIHNpemVvZihxYm1fc3BkX2V4dCkpOworICAgICAgICAgICAgICAgIH0gICAgICAgCisJCQkJLy8gQFRoaXMgaXMgYW4gRU9MIHBhY2tldCA6aWYgZ2V0IEVPTCBidXQgbm90IGxhc3QgcGFja2V0LCBzaG91bGQgYnJlYWttLCBubyBuZWVkIHRvIGhhbmRsZSByZW1haW5pbmcgcGFja2V0CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoSElGX1NQRF9QSF9HRVRfRU9MKHBfc3BkX3BoKSl7CisjaWZkZWYgQ0NDSURFVl9TUERfUkVMQVlPVVRfR0VUX0VPTF9CUkVBS19UUkFDRQorICAgICAgICAgICAgICAgICAgICBpZihLQUxfVFJVRSAhPSBrYWxfcXVlcnlfc3lzdGVtSW5pdCgpICYmIEtBTF9GQUxTRSA9PSBJTlRfUXVlcnlFeGNlcHRpb25TdGF0dXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIENDQ0lERVZfU1BEX1JFTEFZT1VUX0dFVF9FT0xfQlJFQUtfVFJBQ0UocGt0X251bSwgaSwgKGthbF91aW50MzIpIHBfc3BkX3BoKTsKKyNlbmRpZiAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFFCTV9DQUNIRV9GTFVTSChwX3NwZF9leHQsIHNpemVvZihxYm1fc3BkX2V4dCkpOworCQkJICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisJCQkJLy8gQFRoaXMgaXMgYSBub3JtYWwgcGFja2V0IDogaWYgZ2V0IG5vdCBsYXN0IEdQRCwgbW92ZSB0byBuZXh0IHBoCisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBfc3BkX3BoID0gcF9zcGRfcGhfbmV4dDsKKyAgICAgICAgICAgICAgICAgICAgcF9wYXlsb2FkID0gcF9wYXlsb2FkX25leHQ7CisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICB9ZWxzZQorICAgICAgICB7CisgICAgICAgIC8vNCA8Mj4gR1BEIGhhbmRsaW5nCisgICAgICAgICAgICAvKiBBU1NFUlQgaWYgbm90IEdQRCB0eXBlLCBpZiB0aGlzIGFzc2VydCBoYXBwZW5zIG1lYW5pbmcgREwgaXMgbmVpdGhlciBTUEQgdHlwZTEgbm9yIEdQRAorICAgICAgICAgICAgICAgcGxlYXNlIHNlZWsgZm9yIEVQRENQIG93bmVyJ3MgaGVscCovCisgICAgICAgICAgICBFWFRfQVNTRVJUKChjdXJyZW50X3BkdCA9PSBERVNfRkxBR19CSVRfR1BEKSwgXAorICAgICAgICAgICAgKGthbF91aW50MzIpY3VycmVudF9wZHQsIChrYWxfdWludDMyKXBEZXZpY2UsIChrYWxfdWludDMyKXBfZ3BkKTsKKyAgICAgICAgCisgICAgICAgICAgICAvLzQgPDIuMT4gYXBwZW5kIENDQ0kgaGVhZGVyIENDQ0lfQlVGRl9UCisgICAgICAgICAgICAvLyBDQ0NJREVWIGFwcGVuZCBjY2NpIGhlYWRlciBpbiBCRCBFWFQob25seSBmb3IgQ0NNTkkgd2l0aCBmaXJzdCBlbXB0eSBCRCkgb3IgR1BEIEVYVAorICAgICAgICAgICAgaWYoKDAgIT0gUUJNX0RFU19HRVRfQkRQKHBfZ3BkKSkgJiYgKDAgPT0gUUJNX0RFU19HRVRfREFUQUxFTiAoUUJNX0RFU19HRVRfREFUQVBUUihwX2dwZCkpKSl7CisgICAgICAgICAgICAgICAgLy80IDxjYXNlIDE+IEdQRC0+QkQtPkJVRkYKKyAgICAgICAgICAgICAgICAvKiBTdG9yZSB0aGUgREwgQ0NDSSBoZWFkZXIgaW4gdGhlIEJEIGV4dGVudGlvbiBwYXJ0ICovCisgICAgICAgICAgICAgICAgdm9pZCogYmQgPSBRQk1fREVTX0dFVF9EQVRBUFRSKHBfZ3BkKTsKKyAgICAgICAgICAgICAgICBRQk1fREVTX1NFVF9FWFRMRU4oYmQsIHNpemVvZihDQ0NJX0JVRkZfVCkpOworICAgICAgICAgICAgICAgIHBfY2NjaV9oZWFkID0gKENDQ0lfQlVGRl9UICopUUJNX0RFU19HRVRfRVhUKGJkKTsKKyAgICAgICAgICAgICAgICBxYm1fY2FsX3NldF9jaGVja3N1bShiZCk7CisgICAgICAgICAgICAgICAgUUJNX0NBQ0hFX0ZMVVNIKGJkLCBzaXplb2YocWJtX2dwZCkpOworICAgICAgICAgICAgICAgIFFCTV9ERVNfU0VUX0RBVEFMRU4ocF9ncGQsIENDQ0lERVZfR0VUX1FCTV9EQVRBTEVOKHBfZ3BkKStzaXplb2YoQ0NDSV9CVUZGX1QpKTsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbiA9IENDQ0lERVZfR0VUX1FCTV9EQVRBTEVOKHBfZ3BkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgLy80IDxjYXNlIDI+IEdQRC0+QlVGRgorICAgICAgICAgICAgICAgIC8qIFN0b3JlIHRoZSBETCBDQ0NJIGhlYWRlciBpbiB0aGUgR1BEIGV4dGVudGlvbiBwYXJ0ICovCisgICAgICAgICAgICAgICAgUUJNX0RFU19TRVRfRVhUTEVOKHBfZ3BkLCBzaXplb2YoQ0NDSV9CVUZGX1QpKTsKKyAgICAgICAgICAgICAgICBwX2NjY2lfaGVhZCA9IChDQ0NJX0JVRkZfVCAqKVFCTV9ERVNfR0VUX0VYVChwX2dwZCk7CisgICAgICAgICAgICAgICAgZGF0YV9sZW4gPSBDQ0NJREVWX0dFVF9RQk1fREFUQUxFTihwX2dwZCkgKyBzaXplb2YoQ0NDSV9CVUZGX1QpOworICAgICAgICAgICAgfSAgICAgCisgICAgICAgICAgICBwX3BheWxvYWQgPSBDQ0NJREVWX0dFVF9RQk1fREFUQVBUUihwX2dwZCk7CisgICAgICAgICAgICAvLyBjYWxsIENDQ0kgRGV2aWNlIENDQ0kgaGVhZGVyIGhhbmRsZSAKKyAgICAgICAgICAgIGNiKHBEZXZpY2UsIHBfY2NjaV9oZWFkLCBwX3BheWxvYWQsIGRhdGFfbGVuKTsKKworICAgICAgICB9ICAgICAgICAKKyAgICAgICAgZ3BkX2NudCsrOworICAgICAgICBpZiAoIHBfZ3BkID09IGxhc3RfZ3BkICkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLy9tYWtlIHN1cmUgdGhlcmUgaXMgbm8gaW52YWxpZCBHUEQgaW4gdGhlIGxpc3QKKyAgICAgICAgRVhUX0FTU0VSVChRQk1fREVTX0dFVF9ORVhUKHBfZ3BkKSAhPSBOVUxMLCAoa2FsX3VpbnQzMilwX2dwZCwgKGthbF91aW50MzIpZmlyc3RfZ3BkLCAoa2FsX3VpbnQzMilsYXN0X2dwZCk7CisgICAgICAgIHBfZ3BkID0gUUJNX0RFU19HRVRfTkVYVChwX2dwZCk7CisgICAgfSB3aGlsZSAoIHBfZ3BkICE9IE5VTEwgKTsKKyAgICByZXR1cm4gZ3BkX2NudDsKK30KKworLyohCisgKiBAZnVuY3Rpb24gICAgICAgIFtQcm90b3R5cGVdIGNjY2lkZXZfZGxfaGVhZGVyX2hhbmRsZV9jYgorICogQGJyaWVmICAgICAgICAgICBQcm90b3R5cGUgb2YgZnVuY3Rpb24gdG8gaGFuZGxlIGVhY2ggcGFja2V0J3MgQ0NDSSBIZWFkZXIKKyAqCisgKiBAcGFyYW0gcERldmljZSAgICAgW0lOXSBwb2ludGVyIHRvIHRoZSBDQ0NJREVWIGRldmljZQorICogQHBhcmFtIHBfY2NjaV9oZWFkIFtJTl0gcG9pbnRlciB0byBjY2NpIGhlYWRlciBidWZmZXIKKyAqIEBwYXJhbSBrYWxfdWludDggICBbSU5dIHBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyCisgKgorICogQHJldHVybiAgICAgICAgICAwLCB1bnVzZWQgCisgKi8KK3R5cGVkZWYga2FsX3VpbnQzMiAoKmNjY2lkZXZfZGxfaGVhZGVyX2hhbmRsZV9vbmx5X2ZpcnN0X2NiKSh2b2lkKiBwX2RldmljZSwgQ0NDSV9CVUZGX1QqIHBfY2NjaV9oZWFkLCBrYWxfdWludDgqIHBkYXRhLCBrYWxfdWludDMyIGRhdGFfbGVuLCBrYWxfdWludDE2IHJlbV9ncGQpOworCisvKiEKKyAqIEBmdW5jdGlvbiAgICAgICAgW3N0YXRpY10gQ0NDSURFVl9QUk9DRVNTX0RMX0dQRF9MSVNUCisgKiBAYnJpZWYgICAgICAgICAgIFRyYXZlcnNlIHRoZSBpbnB1dCBHUEQgbGlzdCBhbmQgaW5zZXJ0IHRoZSBDQ0NJIGhlYWRlciBvbiB0aGUgZmlyc3QgQkQtPmRhdGEgCisgKgorICogQHBhcmFtIHBEZXZpY2UgICBbSU5dIHBvaW50ZXIgdG8gdGhlIENDQ0lERVYgZGV2aWNlCisgKiBAcGFyYW0gZmlyc3RfZ3BkIFtJTl0gcG9pbnRlciB0byB0aGUgZmlyc3QgR1BEIGluIHRoZSBHUEQgY2hhaW4KKyAqIEBwYXJhbSBsYXN0X2dwZCAgW0lOXSBwb2ludGVyIHRvIHRoZSBsYXN0IEdQRCBpbiB0aGUgR1BEIGNoYWluCisgKiBAcGFyYW0gY2NjaWRldl9kbF9oZWFkZXJfaGFuZGxlX2NiICBbSU5dIHBvaW50ZXIgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSBlYWNoIHBhY2tldCdzIENDQ0kgSGVhZGVyCisgKgorICogQHJldHVybiAgICAgICAgICBudW1iZXIgb2YgZ3BkL3NwZCBpbiBiZXR3ZWVuIGZpcnN0X2dwZCBhbmQgbGFzdF9ncGQKKyAqLworc3RhdGljIF9faW5saW5lIGthbF91aW50MzIgQ0NDSURFVl9QUk9DRVNTX0RMX0dQRF9MSVNUX09OTFlfRklSU1Qodm9pZCogcERldmljZSwgcWJtX2dwZCogZmlyc3RfZ3BkLCBxYm1fZ3BkKiBsYXN0X2dwZCwgY2NjaWRldl9kbF9oZWFkZXJfaGFuZGxlX29ubHlfZmlyc3RfY2IgY2IsIGthbF91aW50MTYgcmVtX2dwZCkKK3sgIC8qcHJvY2Vzc190eF9ncGRfbGlzdCovCisgICAgcWJtX2dwZCogICAgICAgICAgICBwX2dwZCA9IE5VTEw7CisgICAga2FsX3VpbnQzMiAgICAgICAgICBncGRfY250ID0gMDsKKyAgICBDQ0NJX0JVRkZfVCAgICAgICAgICpwX2NjY2lfaGVhZDsKKyAgICBrYWxfdWludDggICAgICAgICAgIGN1cnJlbnRfcGR0OworICAgIGhpZl9zcGRfcGFja2V0X2hlYWRlciAgKnBfc3BkX3BoLCAqcF9zcGRfcGhfbmV4dD1OVUxMOyAgLy9zcGQgcGFja2V0IGhlYWQKKyAgICBrYWxfdWludDggICAgICAgICAgICpwX3BheWxvYWQsICpwX3BheWxvYWRfbmV4dD1OVUxMOyAvL3NwZCBwYWNrZXQgcGF5bG9hZAorICAgIGhpZl9zcGRfZXh0X2hlYWRlciAgKnBfc3BkX2V4dDsgLy9zcGQgZXh0ZW50aW9uCisgICAga2FsX3VpbnQxNiAgICAgICAgICBwa3RfbnVtOworICAgIGthbF91aW50MzIgICAgICAgICAgaSwgcGF5bG9hZF9sZW4sIGhlYWRlcl9sZW4gPTA7CisgICAga2FsX2Jvb2wgICAgICAgICAgICBpc19maXJzdF9TUEQgPSBLQUxfVFJVRTsKKworICAgIEVYVF9BU1NFUlQoZmlyc3RfZ3BkICYmIGxhc3RfZ3BkLCAoa2FsX3VpbnQzMilmaXJzdF9ncGQsIChrYWxfdWludDMyKWxhc3RfZ3BkLCAoa2FsX3VpbnQzMilwRGV2aWNlKTsKKyAgCisgICAgcF9ncGQgPSBmaXJzdF9ncGQ7CisgICAgZG8geworICAgICAgICBjdXJyZW50X3BkdCA9IFFCTV9ERVNfR0VUX1BEVChwX2dwZCk7CisgICAgICAgIGlmKGN1cnJlbnRfcGR0ID09IERFU19GTEFHX0JJVF9TUEQzKXsKKyAgICAgICAgICAgIENDQ0lERVZfU1BEX1BJX1JFTEFZT1VUKHBfZ3BkKTsKKyAgICAgICAgICAgIGN1cnJlbnRfcGR0ID0gUUJNX0RFU19HRVRfUERUKHBfZ3BkKTsKKyAgICAgICAgfQorCisJRVhUX0FTU0VSVCgoKCBjdXJyZW50X3BkdCA9PSBERVNfRkxBR19CSVRfU1BEMSkgfHwgKGN1cnJlbnRfcGR0ID09IERFU19GTEFHX0JJVF9HUEQpKSwgXAorICAgICAgICAgICAgKGthbF91aW50MzIpY3VycmVudF9wZHQsIChrYWxfdWludDMyKXBEZXZpY2UsIChrYWxfdWludDMyKXBfZ3BkKTsKKworICAgICAgICBpZihjdXJyZW50X3BkdCA9PSBERVNfRkxBR19CSVRfU1BEMSkJCisJeworICAgICAgICAgICAgcF9zcGRfZXh0ID0gKGhpZl9zcGRfZXh0X2hlYWRlciopUUJNX1NQRF9HRVRfRVhUKChxYm1fc3BkKilwX2dwZCk7CisgICAgICAgICAgICBwX3NwZF9waCA9IEhJRl9TUERfRVhUX0dFVF9GSVJTVF9QSCgoaGlmX3NwZF9leHRfaGVhZGVyKilwX3NwZF9leHQpOworCSAgICBwX3NwZF9waF9uZXh0ID0gSElGX1NQRF9QSF9ORVhUKHBfc3BkX3BoLCAwKTsgLy9pbml0aWFsCisgICAgICAgICAgICBwX3BheWxvYWQgPSBRQk1fREVTX0dFVF9EQVRBUFRSKChxYm1fc3BkKilwX2dwZCk7CisgICAgICAgICAgICBwa3RfbnVtID0gSElGX1NQRF9FWFRfR0VUX1BLVE5VTSgoaGlmX3NwZF9leHRfaGVhZGVyKilwX3NwZF9leHQpOworICAgICAgICAgICAgLy9bdGs2MjkxX213X2hpZl9zcGRfZGVzaWduX2RvY192MS4wOiBUaGUgcGFja2V0IG51bWJlciBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gMSAKKyAgICAgICAgICAgIEVYVF9BU1NFUlQocGt0X251bSA+PSAxLCBwa3RfbnVtLCAoa2FsX3VpbnQzMilwX3NwZF9leHQsIChrYWxfdWludDMyKShxYm1fc3BkKilwX2dwZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vNCA8MS4xPiBzZXQgc3BkMV9oZWFkZXJfbGVuID0gc2l6ZW9mKENDQ0lfQlVGRl9UKTsKKyAgICAgICAgICAgIC8vSGVhZGVyIGxlbmd0aCBmaWxsIGJ5IGZpcnN0IHVzZXIKKyAgICAgICAgICAgIGhlYWRlcl9sZW4gPSBISUZfU1BEX0VYVF9HRVRfU1BEMV9IRUFERVJMRU4oKGhpZl9zcGRfZXh0X2hlYWRlciopcF9zcGRfZXh0KTsKKyNpZmRlZiBDQ0NJREVWX1BST0NFU1NfRExfU1BEX1RSQUNFCisgICAgICAgICAgICBpZihLQUxfVFJVRSAhPSBrYWxfcXVlcnlfc3lzdGVtSW5pdCgpICYmIEtBTF9GQUxTRSA9PSBJTlRfUXVlcnlFeGNlcHRpb25TdGF0dXMoKSkKKyAgICAgICAgICAgICAgICBDQ0NJREVWX1BST0NFU1NfRExfU1BEX1RSQUNFKHBrdF9udW0sIChrYWxfdWludDMyKXBfZ3BkKTsKKyNlbmRpZgorICAgICAgICAgICAgLy80IDwxLjI+IFNldCBJR1IgZm9yIDFzdCBwa3QsIGZvciBNQklNIHVzZSBvbmx5LCBhbmQgbW92ZSB0byAybmQgUEggICAKKyAgICAgICAgICAgIC8vaXRlcmF0ZSBmcm9tIHRoZSAxc3QgcGgKKwkgICAgaWYoaXNfZmlyc3RfU1BEID09IEtBTF9UUlVFKXsgLy8gb25seSBhZGQgQ0NDSSBoZWFkZXIgdG8gZmlyc3QgU1BECisJICAgICAgICBpc19maXJzdF9TUEQgPSBLQUxfRkFMU0U7CisJCWZvciAoaT0xOyBpPD1wa3RfbnVtOyBpKyspeworCQkgICAgcGF5bG9hZF9sZW4gPSBISUZfU1BEX1BIX0dFVF9QQVlMT0FEX0xFTihwX3NwZF9waCk7CisJCSAgICBpZiAoaSAhPSBwa3RfbnVtKXsKKwkJCXBfc3BkX3BoX25leHQgPSBISUZfU1BEX1BIX05FWFQocF9zcGRfcGgsIGhlYWRlcl9sZW4pOyAKKwkJCXBfcGF5bG9hZF9uZXh0ID0gUUJNX1NQRF9QQVlMT0FEX05FWFQocF9wYXlsb2FkLCBwYXlsb2FkX2xlbik7CisJCSAgICB9ICAgIAorCQkgICAgaWYoMCA9PSBISUZfU1BEX1BIX0dFVF9JR1IocF9zcGRfcGgpKXsgLy8gaWYgSUdSIGJpdCBpcyBub3Qgc2V0CisJCQkvLzQgPDEuMz4gYXBwZW5kIENDQ0kgaGVhZGVyIENDQ0lfQlVGRl9UCisJCQlwX2NjY2lfaGVhZCA9IChDQ0NJX0JVRkZfVCAqKUhJRl9TUERfUEhfR0VUX0hFQURFUihwX3NwZF9waCk7CisJCQkvLyBjYWxsIENDQ0kgRGV2aWNlIENDQ0kgaGVhZGVyIGhhbmRsZSAKKwkJCWNiKHBEZXZpY2UsIHBfY2NjaV9oZWFkLCBwX3BheWxvYWQsIHBheWxvYWRfbGVuLCByZW1fZ3BkKTsKKwkJCS8vIFRoaXMgaXMgU1BEIG1vZGUKKwkJCWlmKHJlbV9ncGQgPiAwKQorCQkJICAgIHBfY2NjaV9oZWFkLT5kYXRhWzFdID0gcF9jY2NpX2hlYWQtPmRhdGFbMV0gfCAoMSA8PCAzMSk7CisJCQkvLyBwYXlsb2FkIGxlbmd0aCBjaGVjaywgaWYgdGhpcyBhc3NlcnQgaGFwcGVuZCwgcGxlYXNlIGNvbnRhY3QgRVBEQ1Agb3duZXIKKwkJCUVYVF9BU1NFUlQocGF5bG9hZF9sZW4sIFwKKwkJCSAgICAoa2FsX3VpbnQzMilwX2dwZCwgcGt0X251bSwgKGthbF91aW50MzIpcF9zcGRfcGgpOworCQkJYnJlYWs7Ly9vbmx5IGhhbmRsZSBmaXJzdCBoZWFkZXIKKwkJICAgIH0KKwkJICAgIGVsc2V7IC8vIGlmIElHUiBiaXQgaXMgc2V0CisjaWZkZWYgQ0NDSURFVl9QUk9DRVNTX0RMX1NQRF9TRVRfSUdSX1RSQUNFCisJCQlpZihLQUxfVFJVRSAhPSBrYWxfcXVlcnlfc3lzdGVtSW5pdCgpICYmIEtBTF9GQUxTRSA9PSBJTlRfUXVlcnlFeGNlcHRpb25TdGF0dXMoKSkKKwkJCSAgICBDQ0NJREVWX1BST0NFU1NfRExfU1BEX1NFVF9JR1JfVFJBQ0UoSElGX1NQRF9QSF9HRVRfSUdSKHBfc3BkX3BoKSwgaSwgKGthbF91aW50MzIpcF9zcGRfcGgpOworI2VuZGlmCisJCSAgICB9CisJCSAgICAvLyBAVGhpcyBpcyBhIG5vcm1hbCBwYWNrZXQgOiBpZiBnZXQgbm90IGxhc3QgR1BELCBtb3ZlIHRvIG5leHQgcGgKKwkJICAgIC8vZWxzZSAKKwkJICAgIHsKKwkJCXBfc3BkX3BoID0gcF9zcGRfcGhfbmV4dDsKKwkJCXBfcGF5bG9hZCA9IHBfcGF5bG9hZF9uZXh0OworCQkgICAgfSAgICAKKwkJfQorCSAgICB9CisJICAgIC8vIEZsdXNoIGFsbCBzcGQgZXh0CisgICAgICAgICAgICBRQk1fQ0FDSEVfRkxVU0gocF9zcGRfZXh0LCBzaXplb2YocWJtX3NwZF9leHQpKTsKKwl9CisJZWxzZQorICAgICAgICB7CisgICAgICAgIC8vNCA8Mj4gR1BEIGhhbmRsaW5nCisgICAgICAgICAgICAvKiBBU1NFUlQgaWYgbm90IEdQRCB0eXBlLCBpZiB0aGlzIGFzc2VydCBoYXBwZW5zIG1lYW5pbmcgREwgaXMgbmVpdGhlciBTUEQgdHlwZTEgbm9yIEdQRAorICAgICAgICAgICAgICAgcGxlYXNlIHNlZWsgZm9yIEVQRENQIG93bmVyJ3MgaGVscCovCisgICAgICAgICAgICBFWFRfQVNTRVJUKChjdXJyZW50X3BkdCA9PSBERVNfRkxBR19CSVRfR1BEKSwgXAorICAgICAgICAgICAgKGthbF91aW50MzIpY3VycmVudF9wZHQsIChrYWxfdWludDMyKXBEZXZpY2UsIChrYWxfdWludDMyKXBfZ3BkKTsKKyAgICAgICAgCisgICAgICAgICAgICAvLzQgPDIuMT4gYXBwZW5kIENDQ0kgaGVhZGVyIENDQ0lfQlVGRl9UCisgICAgICAgICAgICAvLyBDQ0NJREVWIGFwcGVuZCBjY2NpIGhlYWRlciBpbiBCRCBFWFQob25seSBmb3IgQ0NNTkkgd2l0aCBmaXJzdCBlbXB0eSBCRCkgb3IgR1BEIEVYVAorICAgICAgICAgICAgaWYoKDAgIT0gUUJNX0RFU19HRVRfQkRQKHBfZ3BkKSkgJiYgKDAgPT0gUUJNX0RFU19HRVRfREFUQUxFTiAoUUJNX0RFU19HRVRfREFUQVBUUihwX2dwZCkpKSl7CisgICAgICAgICAgICAgICAgLy80IDxjYXNlIDE+IEdQRC0+QkQtPkJVRkYKKyAgICAgICAgICAgICAgICAvKiBTdG9yZSB0aGUgREwgQ0NDSSBoZWFkZXIgaW4gdGhlIEJEIGV4dGVudGlvbiBwYXJ0ICovCisgICAgICAgICAgICAgICAgdm9pZCogYmQgPSBRQk1fREVTX0dFVF9EQVRBUFRSKHBfZ3BkKTsKKyAgICAgICAgICAgICAgICBRQk1fREVTX1NFVF9FWFRMRU4oYmQsIHNpemVvZihDQ0NJX0JVRkZfVCkpOworICAgICAgICAgICAgICAgIHBfY2NjaV9oZWFkID0gKENDQ0lfQlVGRl9UICopUUJNX0RFU19HRVRfRVhUKGJkKTsKKyAgICAgICAgICAgICAgICBxYm1fY2FsX3NldF9jaGVja3N1bShiZCk7CisgICAgICAgICAgICAgICAgUUJNX0NBQ0hFX0ZMVVNIKGJkLCBzaXplb2YocWJtX2dwZCkpOworICAgICAgICAgICAgICAgIFFCTV9ERVNfU0VUX0RBVEFMRU4ocF9ncGQsIENDQ0lERVZfR0VUX1FCTV9EQVRBTEVOKHBfZ3BkKStzaXplb2YoQ0NDSV9CVUZGX1QpKTsKKyAgICAgICAgICAgICAgICBDQ0NJX1NUUkVBTV9TRVRfTEVOKHBfY2NjaV9oZWFkLCBDQ0NJREVWX0dFVF9RQk1fREFUQUxFTihwX2dwZCkpOworICAgICAgICAgICAgICAgIC8qIGhpZnNkaW9xX3NldF9ncGQgd2lsbCBzZXQgSFdPIGFuZCBzZXQgY2hlY2tzdW0gKi8KKyAgICAgICAgICAgICAgICAvL3FibV9jYWxfc2V0X2NoZWNrc3VtKHBfZ3BkKTsKKyAgICAgICAgICAgICAgICAvL1FCTV9DQUNIRV9GTFVTSChwX2dwZCwgc2l6ZW9mKHFibV9ncGQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgLy80IDxjYXNlIDI+IEdQRC0+QlVGRgorICAgICAgICAgICAgICAgIC8qIFN0b3JlIHRoZSBETCBDQ0NJIGhlYWRlciBpbiB0aGUgR1BEIGV4dGVudGlvbiBwYXJ0ICovCisgICAgICAgICAgICAgICAgUUJNX0RFU19TRVRfRVhUTEVOKHBfZ3BkLCBzaXplb2YoQ0NDSV9CVUZGX1QpKTsKKyAgICAgICAgICAgICAgICBwX2NjY2lfaGVhZCA9IChDQ0NJX0JVRkZfVCAqKVFCTV9ERVNfR0VUX0VYVChwX2dwZCk7CisgICAgICAgICAgICAgICAgQ0NDSV9TVFJFQU1fU0VUX0xFTihwX2NjY2lfaGVhZCwgQ0NDSURFVl9HRVRfUUJNX0RBVEFMRU4ocF9ncGQpK3NpemVvZihDQ0NJX0JVRkZfVCkpOworICAgICAgICAgICAgfSAgICAgCisgICAgICAgICAgICBwX3BheWxvYWQgPSBDQ0NJREVWX0dFVF9RQk1fREFUQVBUUihwX2dwZCk7CisgICAgICAgICAgICAvLyBjYWxsIENDQ0kgRGV2aWNlIENDQ0kgaGVhZGVyIGhhbmRsZSAKKyAgICAgICAgICAgIGNiKHBEZXZpY2UsIHBfY2NjaV9oZWFkLCBwX3BheWxvYWQsIENDQ0lERVZfR0VUX1FCTV9EQVRBTEVOKHBfZ3BkKSwgcmVtX2dwZCk7CisgICAgICAgICAgICBicmVhazsgLy8gR1BEIG1vZGUgb25seSBwcm9jZXNzZXMgZmlyc3QgZ3BkCisgICAgICAgIH0gICAgICAgIAorICAgICAgICBncGRfY250Kys7CisgICAgICAgIGlmICggcF9ncGQgPT0gbGFzdF9ncGQgKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvL21ha2Ugc3VyZSB0aGVyZSBpcyBubyBpbnZhbGlkIEdQRCBpbiB0aGUgbGlzdAorICAgICAgICBFWFRfQVNTRVJUKFFCTV9ERVNfR0VUX05FWFQocF9ncGQpICE9IE5VTEwsIChrYWxfdWludDMyKXBfZ3BkLCAoa2FsX3VpbnQzMilmaXJzdF9ncGQsIChrYWxfdWludDMyKWxhc3RfZ3BkKTsKKyAgICAgICAgcF9ncGQgPSBRQk1fREVTX0dFVF9ORVhUKHBfZ3BkKTsKKyAgICB9IHdoaWxlICggcF9ncGQgIT0gTlVMTCApOworICAgIHJldHVybiBncGRfY250OworfQorCisjZW5kaWYgLy8jaWZuZGVmIF9DQ0NJREVWX1FCTV9ICmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lzcnZfc3RydWN0LmggYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2NjY2lzcnZfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ4MjgxZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvY2NjaXNydl9zdHJ1Y3QuaApAQCAtMCwwICsxLDEzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGNjY2lzcnZfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVU1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBEZWZpbmVzIENDQ0kgc2VydmljZSBJTE0gc3RydWN0IGZvciBFTFQgbG9nZ2luZworICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0NDQ0lTUlZfU1RSVUNUX0gKKyNkZWZpbmUgX0NDQ0lTUlZfU1RSVUNUX0gKKyNpbmNsdWRlICJjY2NpX2lmLmgiCisjaW5jbHVkZSAiY2NjaV9pcGNfaWYuaCIKKworI2RlZmluZSBDQ0NJX0lQQ19TSEFSRV9CVUZGRVJfQ09VTlQgMTAKKyNkZWZpbmUgQ0NDSV9SUENfU0hBUkVfQlVGRkVSX0NPVU5UIDMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogIENDQ0lfU1lTTVNHIGlsbSBzdHJ1Y3QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0IGNjY2lfc3lzbXNnX3BhcmFfdAoreworCUxPQ0FMX1BBUkFfSERSCisJQ0NDSV9CVUZGX1QJCWNjY2lfaGVhZGVyOworfSBDQ0NJX1NZU01TR19QQVJBX1Q7CisvKiBNU0dfSURfQ0NDSV9BUF9MMUNfU1lTTVNHX0lORCwgTVNHX0lEX0NDQ0lfQVBfTDFDX1NZU01TR19SRVEgKi8KKwordHlwZWRlZiBDQ0NJX1NZU01TR19QQVJBX1QgY2NjaV9zeXNtc2dfcmVxX3N0cnVjdDsKK3R5cGVkZWYgQ0NDSV9TWVNNU0dfUEFSQV9UIGNjY2lfc3lzbXNnX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqICBDQ0NJX1JQQyBpbG0gc3RydWN0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElQQ19SUENfSUxNX01BWF9CVUZfU0laRSAgICAgMTI4IC8qIFBDb3JlIHN1cHBvcnQgMjA0OCAqLyAgCisKK3R5cGVkZWYgc3RydWN0IGNjY2lfcnBjX2J1ZmZfdHsKKyAgICBDQ0NJX0JVRkZfVCBjY2NpX2hlYWRlcjsKKyAgICBrYWxfdWludDggICBidWZmWzBdOworfUNDQ0lfUlBDX1NIQVJFX0JVRkZfVDsKKwordHlwZWRlZiBzdHJ1Y3QgY2NjaV9ycGNfcGFyYV90Cit7CisJTE9DQUxfUEFSQV9IRFIKKyAgICB2b2lkKiBidWZmZXI7IC8vc2hhcmUgbWVtb3J5IGFkZHJlc3MKK30gQ0NDSV9SUENfUEFSQV9UOworLypNU0dfSURfQ0NDSV9QU0NfTDFDX1JQQ19JTkQsIE1TR19JRF9DQ0NJX1BTQ19MMUNfUlBDX1JTUCovCit0eXBlZGVmIENDQ0lfUlBDX1BBUkFfVCBjY2NpX3JwY19pbmRfc3RydWN0OwordHlwZWRlZiBDQ0NJX1JQQ19QQVJBX1QgY2NjaV9ycGNfcnNwX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogIENDQ0lfSVBDIGlsbSBzdHJ1Y3QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ0NDSV9JUENfSUxNX01BWF9CVUZfU0laRSAgICAxMjggLyogUENvcmUgc3VwcG9ydCAzNTQ4ICovCisKK3R5cGVkZWYgc3RydWN0IGNjY2lfaXBjX3BhcmFfdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgdm9pZCogYnVmZmVyOyAvL3NoYXJlIG1lbW9yeSBhZGRyZXNzCit9IENDQ0lfSVBDX1BBUkFfVDsKKworLypNU0dfSURfQ0NDSV9QU0NfTDFDX0lQQ19JTkQsIE1TR19JRF9DQ0NJX1BTQ19MMUNfSVBDX1JTUCovCit0eXBlZGVmIENDQ0lfSVBDX1BBUkFfVCBjY2NpX2lwY19pbmRfc3RydWN0OwordHlwZWRlZiBDQ0NJX0lQQ19QQVJBX1QgY2NjaV9pcGNfcnNwX3N0cnVjdDsKKworCisvKiBDQ0NJIHNlcnZpY2UgSVQgKi8KKyNpZiBkZWZpbmVkKF9fQ0NDSV9TUlZfSVRfXykgCisKKyNkZWZpbmUgQ0NDSV9TUlZfSVRfTUFYX1RBU0sgNAordHlwZWRlZiBlbnVtIHsKKyAgICBDQ0NJU1JWX0lUX0RJU0FCTEUsCisgICAgQ0NDSVNSVl9JVF9MQiwKKyAgICBDQ0NJU1JWX0lUX0RMLAorICAgIENDQ0lTUlZfSVRfVUwsCit9Q0NDSVNSVl9JVF9NT0RFOworCit0eXBlZGVmIHN0cnVjdCBfY2NjaV9zZXJ2aWNlaXRfcGFyYV90Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBDQ0NJU1JWX0lUX01PREUgaXRfbW9kZTsgLyogSVQgbW9kZSAqLworICAgIGthbF91aW50MzIgdGVzdF90YXNrX2NudDsgICAgLyogdG90YWwgaXQgdGFzayBpbiBvbmUgdGltZSAqLworICAgIGthbF91aW50MzIgcGFyYW1bM107IC8qIHRhc2sgMyBwYXJhbXMgdG8gbDFjb3JlICovCit9IGNjY2lfc2VydmljZWl0X3BhcmFfdDsKKworZXh0ZXJuIHZvaWQgY2NjaXNydml0X3JldHVybl9yZXN1bHQoa2FsX3VpbnQzMiBkZXN0X21vZF9pZCwga2FsX3VpbnQzMiBtc2dfaWQsa2FsX3VpbnQzMiB0ZXN0X3Rhc2tfaWQsIGthbF91aW50MzIgcmVzdWx0KTsKKworI2VuZGlmCisKKyNlbmRpZiAvL19DQ0NJU1JWX1NUUlVDVF9ICisgCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2hpZl9zcGRfZXh0LmggYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2hpZl9zcGRfZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1YTQ2NgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvaGlmX3NwZF9leHQuaApAQCAtMCwwICsxLDE4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE0CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGhpZl9zcGRfZXh0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVU1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBEZWZpbmVzIHRoZSBjb21tb24gc3BkIGV4dCBtYWNyb3MgZm9yIEhJRiBtaWRkbGV3YXJlCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIEhJRl9TUERfRVhUX0gKKyNkZWZpbmUgSElGX1NQRF9FWFRfSAorICAgICAKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgInFtdV9ibV9zcGQuaCIKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVHlwZSBkZWZpbml0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gCit0eXBlZGVmIHN0cnVjdCBfaGlmX3NwZF9leHRfaGVhZGVyIGhpZl9zcGRfZXh0X2hlYWRlcjsKK3R5cGVkZWYgc3RydWN0IF9oaWZfc3BkX3BhY2tldF9oZWFkZXIgaGlmX3NwZF9wYWNrZXRfaGVhZGVyOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGF0YSBzdHJ1Y3R1cmVzCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RydWN0IF9oaWZfc3BkX2V4dF9oZWFkZXIKK3sKKyAgICBrYWxfdWludDE2ICBwa3RfbnVtOwkJICAgIC8vCisgICAga2FsX3VpbnQ4ICAgc3BkMV9oZWFkZXJfbGVuOwkvLyB0aGUgaGVhZGVyIGxlbmd0aCBvZiBTUEQgdHlwZSAxCisgICAga2FsX3VpbnQ4ICAgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgX2hpZl9zcGRfcGFja2V0X2hlYWRlcgoreworICAgIGthbF91aW50MTYgIHBheWxvYWRfbGVuOwkJLy8gdGhlIGxlbmd0aCBvZiBwYWNrZXQgcGF5bG9hZAorICAgIGthbF91aW50OCAgIHNwZDJfaGVhZGVyX2xlbjsJLy8gdGhlIGhlYWRlciBsZW5ndGggb2YgU1BEIHR5cGUgMgorICAgIGthbF91aW50OCAgIGZsYWdzOwkJCQkvLyBpbmNsdWRlcyBJR1IgYW5kIEVPTAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE1hY3JvcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1BEX1BIX0ZMQUdfQklUX0VPTCAoKGthbF91aW50OCkweDQwKQorI2RlZmluZSBTUERfUEhfRkxBR19CSVRfSUdSICgoa2FsX3VpbnQ4KTB4ODApCisKKyNkZWZpbmUgSElGX1NQRF9QSF9TRVRfRU9MKF9wKSBcCisgICAgICAgIChISUZfR0VUX1NQRF9QSF9QVFIoX3ApLT5mbGFncyB8PSBTUERfUEhfRkxBR19CSVRfRU9MKQorICAgICAgICAKKyNkZWZpbmUgSElGX1NQRF9QSF9DTFJfRU9MKF9wKSBcCisgICAgICAgIChISUZfR0VUX1NQRF9QSF9QVFIoX3ApLT5mbGFncyAmPSB+U1BEX1BIX0ZMQUdfQklUX0VPTCkKKyAgICAKKyNkZWZpbmUgSElGX1NQRF9QSF9HRVRfRU9MKF9wKSBcCisgICAgICAgIChISUZfR0VUX1NQRF9QSF9QVFIoX3ApLT5mbGFncyAmIFNQRF9QSF9GTEFHX0JJVF9FT0wpCisgICAgCisjZGVmaW5lIEhJRl9TUERfUEhfU0VUX0lHUihfcCkgXAorICAgICAgICAoSElGX0dFVF9TUERfUEhfUFRSKF9wKS0+ZmxhZ3MgfD0gU1BEX1BIX0ZMQUdfQklUX0lHUikKKyAgICAKKyNkZWZpbmUgSElGX1NQRF9QSF9DTFJfSUdSKF9wKSBcCisgICAgICAgIChISUZfR0VUX1NQRF9QSF9QVFIoX3ApLT5mbGFncyAmPSB+U1BEX1BIX0ZMQUdfQklUX0lHUikKKyAgICAKKyNkZWZpbmUgSElGX1NQRF9QSF9HRVRfSUdSKF9wKSBcCisgICAgICAgIChISUZfR0VUX1NQRF9QSF9QVFIoX3ApLT5mbGFncyAmIFNQRF9QSF9GTEFHX0JJVF9JR1IpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJbmxpbmUgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworSU5MSU5FX01PRElGSUVSIElOTElORSB2b2lkIEhJRl9TUERfRVhUX1NFVF9QS1ROVU0oaGlmX3NwZF9leHRfaGVhZGVyICpwX3NwZGV4dCwga2FsX3VpbnQxNiBudW0pCit7CisgICAgcF9zcGRleHQtPnBrdF9udW0gPSBudW07Cit9CisKK0lOTElORV9NT0RJRklFUiBJTkxJTkUga2FsX3VpbnQxNiBISUZfU1BEX0VYVF9HRVRfUEtUTlVNKGhpZl9zcGRfZXh0X2hlYWRlciAqcF9zcGRleHQpCit7CisgICAgcmV0dXJuIHBfc3BkZXh0LT5wa3RfbnVtOworfQorCitJTkxJTkVfTU9ESUZJRVIgSU5MSU5FIHZvaWQgSElGX1NQRF9FWFRfU0VUX1NQRDFfSEVBREVSTEVOKGhpZl9zcGRfZXh0X2hlYWRlciAqcF9zcGRleHQsIGthbF91aW50OCBsZW4pCit7CisgICAgREVCVUdfQVNTRVJUKCBsZW4gPD0gUUJNX1NQRF9NQVhfSEVBREVSX0xFTiApOworICAgIHBfc3BkZXh0LT5zcGQxX2hlYWRlcl9sZW4gPSBsZW47Cit9CisKK0lOTElORV9NT0RJRklFUiBJTkxJTkUga2FsX3VpbnQ4IEhJRl9TUERfRVhUX0dFVF9TUEQxX0hFQURFUkxFTihoaWZfc3BkX2V4dF9oZWFkZXIgKnBfc3BkZXh0KQoreworICAgIHJldHVybiBwX3NwZGV4dC0+c3BkMV9oZWFkZXJfbGVuOworfQorCitJTkxJTkVfTU9ESUZJRVIgSU5MSU5FIGhpZl9zcGRfcGFja2V0X2hlYWRlciogSElGX1NQRF9FWFRfR0VUX0ZJUlNUX1BIKHZvaWQgKnApCit7CisgICAgcmV0dXJuIChoaWZfc3BkX3BhY2tldF9oZWFkZXIqKSgoa2FsX3VpbnQ4ICopKHApICsgc2l6ZW9mKGhpZl9zcGRfZXh0X2hlYWRlcikpOworfQorCitJTkxJTkVfTU9ESUZJRVIgSU5MSU5FIGhpZl9zcGRfcGFja2V0X2hlYWRlciogSElGX0dFVF9TUERfUEhfUFRSKHZvaWQgKnApCit7CisgICAgcmV0dXJuIChoaWZfc3BkX3BhY2tldF9oZWFkZXIqKXA7Cit9CisKK0lOTElORV9NT0RJRklFUiBJTkxJTkUgdm9pZCBISUZfU1BEX1BIX1NFVF9QQVlMT0FEX0xFTihoaWZfc3BkX3BhY2tldF9oZWFkZXIgKnBfc3BkcGgsIGthbF91aW50MTYgbGVuKQoreworICAgIHBfc3BkcGgtPnBheWxvYWRfbGVuID0gbGVuOworfQorCitJTkxJTkVfTU9ESUZJRVIgSU5MSU5FIGthbF91aW50MTYgSElGX1NQRF9QSF9HRVRfUEFZTE9BRF9MRU4oaGlmX3NwZF9wYWNrZXRfaGVhZGVyICpwX3NwZHBoKQoreworICAgIHJldHVybiBwX3NwZHBoLT5wYXlsb2FkX2xlbjsKK30KKworSU5MSU5FX01PRElGSUVSIElOTElORSB2b2lkIEhJRl9TUERfUEhfU0VUX1NQRDJfSEVBREVSTEVOKGhpZl9zcGRfcGFja2V0X2hlYWRlciAqcF9zcGRwaCwga2FsX3VpbnQ4IGxlbikKK3sKKyAgICBwX3NwZHBoLT5zcGQyX2hlYWRlcl9sZW4gPSBsZW47Cit9CisKK0lOTElORV9NT0RJRklFUiBJTkxJTkUga2FsX3VpbnQ4IEhJRl9TUERfUEhfR0VUX1NQRDJfSEVBREVSTEVOKGhpZl9zcGRfcGFja2V0X2hlYWRlciAqcF9zcGRwaCkKK3sKKyAgICByZXR1cm4gcF9zcGRwaC0+c3BkMl9oZWFkZXJfbGVuOworfQorCitJTkxJTkVfTU9ESUZJRVIgSU5MSU5FIGthbF91aW50OCogSElGX1NQRF9QSF9HRVRfSEVBREVSKGhpZl9zcGRfcGFja2V0X2hlYWRlciAqcF9waCkKK3sKKyAgICByZXR1cm4gKChrYWxfdWludDggKikocF9waCkgKyBzaXplb2YoaGlmX3NwZF9wYWNrZXRfaGVhZGVyKSk7Cit9CisKK0lOTElORV9NT0RJRklFUiBJTkxJTkUgaGlmX3NwZF9wYWNrZXRfaGVhZGVyKiBISUZfU1BEX1BIX05FWFQoaGlmX3NwZF9wYWNrZXRfaGVhZGVyICpwX3BoLCBrYWxfdWludDggaGVhZGVyX2xlbikKK3sKKyAgICBrYWxfdWludDgqIGFkZHIgPSAoKGthbF91aW50OCAqKShwX3BoKSArIHNpemVvZihoaWZfc3BkX3BhY2tldF9oZWFkZXIpICsgKChoZWFkZXJfbGVuICsgMykgJiB+KDB4MykpKTsvLyA0LWJ5dGVzIGFsaWdubWVudAorCisgICAgcmV0dXJuIChoaWZfc3BkX3BhY2tldF9oZWFkZXIgKilhZGRyOworfQorCisjZW5kaWYgLyogSElGX1NQRF9FWFRfSCAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvaGlmX3N3bGEuaCBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvaGlmX3N3bGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzZiYTcyCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9oaWZfc3dsYS5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX19JTkNfSElGX1NXTEFfSAorI2RlZmluZSBfX0lOQ19ISUZfU1dMQV9ICisKKy8qCisgKiAgUHVycG9zZToKKyAqICAgICAgQWxsb3cgU1dMQSBjdXN0b21Mb2cgcHJvZmlsZS4KKyAqICAgICAgWW91IGNhbiBhY3F1aXJlIHRoZSBjb3VudGVyIGJldHdlZW4gSElGX1NXTEFfU1RBUlQoKSBhbmQgSElGX1NXTEFfU1RPUCgpLgorICoKKyAqICBVc2FnZToKKyAqICAgICAgc3RlcCAxLiBJbnZva2UgSElGX1NXTEFfU1RBUlQoKSB0byBzdGFydCBTV0xBIGN1c3RvbUxvZyBpbiB5b3VyIGZ1bmN0aW9uLgorICoKKyAqICAgICAgc3RlcCAyLiBJbnZva2UgSElGX1NXTEFfU1RPUCgpIHRvIHN0b3AgU1dMQSBjdXN0b21Mb2cgaW4geW91ciBmdW5jdGlvbi4KKyAqCisgKiAgICAgIHN0ZXAgMy4gVXNlIEVMVCB0byBBU1NFUlQgTVRLIGRldmljZSBhbmQgdGhlbiBNRU1EVU1QIFNXTEEgcmVzdWx0LgorICogICAgICAgICAgICAgIAorICovCisKKworI2lmIGRlZmluZWQgSElGX1NXTEFfQ1VTVE9NX0xPRworI2luY2x1ZGUgInN3bGFfcHVibGljLmgiCisjZGVmaW5lIEhJRl9TV0xBX1NUQVJUKF94KSAgICAgIFNMQV9DdXN0b21Mb2dnaW5nKF94LCBTQV9zdGFydCkKKyNkZWZpbmUgSElGX1NXTEFfU1RPUChfeCkgICAgICAgU0xBX0N1c3RvbUxvZ2dpbmcoX3gsIFNBX3N0b3ApCisKKyNlbHNlCisjZGVmaW5lIEhJRl9TV0xBX1NUQVJUKF94KQorI2RlZmluZSBISUZfU1dMQV9TVE9QKF94KQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fSU5DX0hJRl9TV0xBX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvaGlmX3RyYWNlLmggYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2hpZl90cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjNkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2hpZl90cmFjZS5oCkBAIC0wLDAgKzEsMTM4IEBACisjaWZuZGVmIF9fSU5DX0hJRl9UUkFDRV9ICisjZGVmaW5lIF9fSU5DX0hJRl9UUkFDRV9ICisKKyNpbmNsdWRlICJkaGxfdHJhY2UuaCIKKworLyoKKyAqICBQdXJwb3NlOgorICogICAgICBBbGxvdyBESEwgaW5kZXggdHJhY2UgbGlrZSBtZXNzYWdlIGNhbiBiZSBzaG93biBpbiBjb25zb2xlLgorICoKKyAqICBMaW1pdGF0aW9uOgorICogICAgICAxLiBOb3Qgc3VwcG9ydCBzdHJpbmcgYW5kIGZsb2F0aW5nIHBvaW50IGZvcm1hdCBzcGVjaWZpZXJzLgorICoKKyAqICBVc2FnZToKKyAqICAgICAgc3RlcCAxLiBEZWZpbmUgSElGX0NPTlNPTEVfVFJBQ0VfRU5BQkxFRCB0byAxIGlmIHlvdSB3YW50IHRvIHByaW50CisgKiAgICAgICAgICAgICAgZGhsX3RyYWNlKCkgbWVzc2FnZSB0byBjb25zb2xlLCBvdGhlcndpc2UsIGRlZmluZSBpdCB0byAwCisgKgorICogICAgICBzdGVwIDIuIFdyaXRlIHlvdXIgb3duIHRyYWNlIG1lc3NhZ2UgaGVhZGVyIGZpbGUgYW5kIHVzZSB0aGUgCisgKiAgICAgICAgICAgICAgY29tcGlsZXIgZmxhZyBISUZfQ09OU09MRV9UUkFDRV9FTkFCTEVEIHRvIHByZXZlbnQgaW5jbHVkaW5nIAorICogICAgICAgICAgICAgIERITCByZWFsdGVkIGhlYWRlciBmaWxlcy4KKyAqICAgICAgICAgICAgICAKKyAqICAgICAgc3RlcCAzLiBJbmNsdWRlIGhpZl90cmFjZS5oIGFuZCB5b3VyIHRyYWNlIG1lc3NhZ2UgaGVhZGVyIGZpbGUuCisgKiAgICAgICAgICAgICAgUGxlYXNlIG5vdGUgdGhhdCwgZXhjZXB0IGZvciB0aGUgdHJhY2UgbWVzc2FnZSBoZWFkZXIgZmlsZSwgCisgKiAgICAgICAgICAgICAgeW91IGFyZSBhbHNvIHJlcXVpcmVkIHRvIGZvbGxvdyBmb2xsb3cgREhMIGxvZ2dpbmcgQVBJIHVzZXIgCisgKiAgICAgICAgICAgICAgZ3VpZGUgdG8gdXNlIERITCBsb2dnaW5nIGZhY2lsaXRpZXMuCisgKgorICogICAgICBzdGVwIDQuIFVzZSBoaWZfdHJhY2VfZXJyb3IoKSBhbmQgaGlmX3RyYWNlX2luZm8oKSB0byBwcmludCAKKyAqICAgICAgICAgICAgICBESEwgaW5kZXhlZCB0cmFjZSBsaWtlIG1lc3NhZ2UgdG8gY29uc29sZSBvciBFTFQgYXMgeW91IAorICogICAgICAgICAgICAgIHNwZWNpZmllZCBpbiBzdGVwIDEuCisgKgorICogIEV4YW1wbGU6CisgKiAgICAgIEFzc3VtZSB5b3VyIG1vZHVsZSBJRCBpcyBNT0RfWFhYIGFuZCB0aGUgZmlsZSBhbmQgZnVuY3Rpb24gcHJlZml4IGlzIHh4eC4KKyAqCisgKiAgICAgIEluIHh4eF90cmFjZS5oCisgKgorICogICAgICAgICAgI2lmIEhJRl9DT05TT0xFX1RSQUNFX0VOQUJMRUQgIT0gMQorICogICAgICAgICAgICAgICNpZm5kZWYgR0VOX0ZPUl9QQworICogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisgKiAgICAgICAgICAgICAgI2VuZGlmCisgKiAgICAKKyAqICAgICAgICAgICAgICAjaW5jbHVkZSAiZGhsX3RyYWNlLmgiCisgKiAgICAgICAgICAgICAgI2luY2x1ZGUgImRobF9kZWYuaCIKKyAqICAgIAorICogICAgICAgICAgICAgICNpZiAhZGVmaW5lZChHRU5fRk9SX1BDKQorICogICAgICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfX0RITF9NT0RVTEVfXykgfHwgZGVmaW5lZChfX0NVU1RPTV9SRUxFQVNFX18pCisgKiAgICAgICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInJuZGlzX3RyYWNlX2dlbi5oIgorICogICAgICAgICAgICAgICAgICAjZW5kaWYKKyAqICAgICAgICAgICAgICAjZW5kaWYKKyAqICAgICAgICAgICNlbmRpZgorICogICAgICAgICAgQkVHSU5fVFJBQ0VfTUFQKE1PRF9STkRJUykKKyAqICAgICAgICAgICAgICBUUkNfTVNHKFhYWF9TSE9XX0NPREVfTVNHX0lOREVYLCAiW1hYWF0geHh4X2Z1bmMoKSBnb3QgY29kZSglZCkiKQorICogICAgICAgICAgICAgIFRSQ19NU0coWFhYX0VSUk9SX01TR19JTkRFWCwgIltYWFhdIHh4eF9mdW5jKCkgZmFpbGVkISIpCisgKiAgICAgICAgICBFTkRfVFJBQ0VfTUFQKE1PRF9STkRJUykKKyAqCisgKiAgICAgIEluIE9wdGlvbi5tYWs6CisgKgorICogICAgICAgICAgQ09NUF9UUkFDRV9ERUZTICs9IFlPVVJfTU9EVUxFX1BBVEhcaW5jbHVkZVx4eHhfdHJhY2UuaAorICogCisgKiAgICAgIEluIHh4eF9kZWJ1Zy5oOgorICoKKyAqICAgICAgICAgICNkZWZpbmUgSElGX0NPTlNPTEVfVFJBQ0VfRU5BQkxFRCAxCisgKiAgICAgICAgICAjaW5jbHVkZSAiaGlmX3RyYWNlLmgiCisgKiAgICAgICAgICAjaW5jbHVkZSAieHh4X3RyYWNlLmgiCisgKgorICogICAgICBJbiB4eHhfeXl5LmM6CisgKgorICogICAgICAgICAgI2luY2x1ZGUgImhpZl9kZWJ1Zy5oIgorICoKKyAqICAgICAgICAgIHZvaWQgeHh4X2Z1bmMoaW50IGNvZGUpIHsKKyAqICAgICAgICAgICAgIGhpZl90cmFjZV9pbmZvKFhYWF9TSE9XX0NPREVfTVNHX0lOREVYLCBjb2RlKTsKKyAqICAgICAgICAgICAgIGlmIChPSyAhPSBjb2RlKSB7CisgKiAgICAgICAgICAgICAgICAgaGlmX3RyYWNlX2Vycm9yKFhYWF9FUlJPUl9NU0dfSU5ERVgpOworICogICAgICAgICAgICAgfQorICogICAgICAgICAgfQorICovCisjaWYgSElGX0NPTlNPTEVfVFJBQ0VfRU5BQkxFRD09MQorICAgIC8qCisgICAgICogUHJpbnQgaW5kZXhlZCB0cmFjZSB0byBjb25zb2xlLgorICAgICAqLworICAgICNpZiBkZWZpbmVkKF9fTVRLX1RBUkdFVF9fKQorICAgICAgICAjZGVmaW5lIGhpZl9jb25zb2xlX3RyYWNlIGRiZ19wcmludAorICAgICAgICAjZGVmaW5lIEhJRl9ORVdfTElORSAiXHJcbiIKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIGhpZl9jb25zb2xlX3RyYWNlIGthbF9wcmludGYKKyAgICAgICAgI2RlZmluZSBISUZfTkVXX0xJTkUgIlxuIgorICAgICNlbmRpZgorCisgICAgI2lmIGRlZmluZWQoX19HTlVDX18pCisgICAgICAgICNkZWZpbmUgX19VTlVTRURfQVRUUl9fIF9fYXR0cmlidXRlX18gICgodW51c2VkKSkgIAorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgX19VTlVTRURfQVRUUl9fIAorICAgICNlbmRpZgorCisgICAgI2RlZmluZSBoaWZfdHJhY2VfZXJyb3IoLi4uKSBoaWZfY29uc29sZV90cmFjZShfX1ZBX0FSR1NfXykKKyAgICAjZGVmaW5lIGhpZl90cmFjZV9pbmZvKC4uLikgaGlmX2NvbnNvbGVfdHJhY2UoX19WQV9BUkdTX18pCisKKyAgICAjaWYgZGVmaW5lZChCRUdJTl9UUkFDRV9NQVApIAorICAgICAgICAjdW5kZWYgQkVHSU5fVFJBQ0VfTUFQCisgICAgI2VuZGlmCisgICAgI2lmIGRlZmluZWQoVFJDX01TRykgCisgICAgICAgICN1bmRlZiBUUkNfTVNHCisgICAgI2VuZGlmCisgICAgI2lmIGRlZmluZWQoRU5EX1RSQUNFX01BUCkgCisgICAgICAgICN1bmRlZiBFTkRfVFJBQ0VfTUFQCisgICAgI2VuZGlmCisgICAgI2RlZmluZSBCRUdJTl9UUkFDRV9NQVAoX21vZCkKKyAgICAjZGVmaW5lIFRSQ19NU0coX21zZ19pbmRleCwgX2ZtdCkgc3RhdGljIGNoYXIgX21zZ19pbmRleCBbXSBfX1VOVVNFRF9BVFRSX18gPSBfZm10IEhJRl9ORVdfTElORTsKKyAgICAjZGVmaW5lIEVORF9UUkFDRV9NQVAoX21vZCkKKyNlbHNlCisgICAgLyoKKyAgICAgKiBVc2UgREhMIGxvZ2dpbmcuCisgICAgICovCisgICAgI2RlZmluZSBoaWZfdHJhY2VfZXJyb3IodHJjX25hbWUsIC4uLikgTURfVFJDXyMjdHJjX25hbWUoX19WQV9BUkdTX18pCisgICAgI2RlZmluZSBoaWZfdHJhY2VfaW5mbyh0cmNfbmFtZSwgLi4uKSBNRF9UUkNfIyN0cmNfbmFtZShfX1ZBX0FSR1NfXykKKyAgICAjZGVmaW5lIGhpZl90cmFjZV9kZWJ1Zyh0cmNfbmFtZSwgLi4uKSBNRF9UUkNfIyN0cmNfbmFtZShfX1ZBX0FSR1NfXykKKyNlbmRpZiAvKiBISUZfQ09OU09MRV9UUkFDRV9FTkFCTEVEICovCisKKyNpZiBISUZfREFUQV9UUkFDRV9FTkFCTEVEPT0xCisgICAgI2lmZGVmIF9fTVRLX1RBUkdFVF9fCisgICAgICAgICNkZWZpbmUgaGlmX2RhdGFfdHJhY2UoRlVOQ19OQU1FLCAuLi4pICAgICAgZG8geyBpZihLQUxfRkFMU0UgPT0ga2FsX3F1ZXJ5X3N5c3RlbUluaXQoKSl7RlVOQ19OQU1FICggX19WQV9BUkdTX18gKSA7fSB9IHdoaWxlICgwKQorICAgICNlbHNlCisgICAgICAgIC8qCisgICAgICAgICAqICAgKDIwMTMvMDgvMjApIERvIHRvIFZDIGNvbXBpbGVyIGJ1ZyBpbiB2YXJpYWRpYyBtYWNybyByZXBsYWNlbWVudCwgaXQgbmVlZHMgdG8gZGl2aWRlIFZhcmlhZGljIG1hY3JvIGludG8gMiBwYXJ0cyB0byB3b3JrYXJvdW5kLgorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vVmlzdWFsU3R1ZGlvL2ZlZWRiYWNrL2RldGFpbHMvMzgwMDkwL3ZhcmlhZGljLW1hY3JvLXJlcGxhY2VtZW50CisgICAgICAgICAqLworICAgICAgICAjZGVmaW5lIGhpZl9kYXRhX3RyYWNlX2FyZyhGVU5DX05BTUUsIGFyZ3NfbGlzdCkgICAgZG97IEZVTkNfTkFNRSBhcmdzX2xpc3QgOyB9IHdoaWxlICgwKQorICAgICAgICAjZGVmaW5lIGhpZl9kYXRhX3RyYWNlKEZVTkNfTkFNRSwgLi4uKSAgICAgICAgICAgICAgZG97IGhpZl9kYXRhX3RyYWNlX2FyZyhGVU5DX05BTUUsIChfX1ZBX0FSR1NfXykpOyB9IHdoaWxlICgwKQorICAgICNlbmRpZiAvKiBfX01US19UQVJHRVRfXyAqLworI2Vsc2UKKyAgICAjZGVmaW5lIGhpZl9kYXRhX3RyYWNlKEZVTkNfTkFNRSwgLi4uKQorI2VuZGlmIC8qIEhJRl9EQVRBX1RSQUNFX0VOQUJMRUQgKi8KKworI2lmIF9fU0VOU0lUSVZFX0RBVEFfTU9TQUlDX18KKyAgICAjZGVmaW5lIGhpZl9kYXRhX3RyYWNlX3VzaXIoRlVOQ19OQU1FLCAuLi4pIGRvIHsgaWYoS0FMX0ZBTFNFID09IGRobF9tYXNrX3NlbnNpdGl2ZV90cmFjZV9vbigpKXtoaWZfZGF0YV90cmFjZShGVU5DX05BTUUsIF9fVkFfQVJHU19fKTt9IH0gd2hpbGUgKDApCisjZWxzZQorICAgICNkZWZpbmUgaGlmX2RhdGFfdHJhY2VfdXNpcihGVU5DX05BTUUsIC4uLikgaGlmX2RhdGFfdHJhY2UoRlVOQ19OQU1FLCBfX1ZBX0FSR1NfXykKKyNlbmRpZgorCisjZW5kaWYgLyogX19JTkNfSElGX1RSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvaGx0X2lmLmggYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2hsdF9pZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMTJiMmEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2hsdF9pZi5oCkBAIC0wLDAgKzEsMTc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTIKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgaGx0X2lmLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIERlZmluZXMgdGhlIEhMVCBkYXRhIHN0cnVjdHVyZXMgYW5kIEFQSXMKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDggMTYgMjAxOCBhY3Rvcnkub3UKKyAqIFtNT0xZMDAzNDUzNzVdIFtHZW45N10gTGFuZGluZyBOQ0NDSSAoTmV4dCBnZW4gQ0NDSSkKKyAqIFtWTU9MWV0gYWRkIG5jY2NpIG5jY2Npc3J2IG5jY2NpX2l0X2N0cmwKKyAqCisgKiAwMyAyNiAyMDE1IGhzaW4tanVuLnRhbmcKKyAqIFtNT0xZMDAxMDQxMjddIFtITFRdIEFkZCBITFQgZmVhdHVyZSBmb3IgQ0NDSVNSViBDQ0NJREVWIFNESU9DCisgKiBbSExUXSBDQ0NJU1JWIENDQ0lERVYgU0RJT0MKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0hMVF9JRl9ICisjZGVmaW5lIF9ITFRfSUZfSAorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisKKy8qIHN0cnVjdCBkZWZpbmUgKi8KK3R5cGVkZWYgZW51bXsKKyAgICBITFRfVVNFUl9JRF9TVEFSVCA9MCwKKyAgICBDQ0NJX0xBVEVOQ1lfVUxJT1JfQ0IsCisgICAgQ0NDSV9MQVRFTkNZX1VMSU9SX0NCX1RPX1VTRVIsCisgICAgQ0NDSV9MQVRFTkNZX1VMSU9SX0NCX1RPX05DQ0NJX1VTRVIsCisgICAgQ0NDSV9MQVRFTkNZX1VMQlVGRl9DQiwKKyAgICBDQ0NJX0xBVEVOQ1lfVUxCVUZGX0NCX1RPX1VTRVIsCisgICAgQ0NDSV9MQVRFTkNZX1VMTkVUX0NCLAorICAgIENDQ0lfTEFURU5DWV9VTE5FVF9DQl9UT19VU0VSLAorICAgIENDQ0lfTEFURU5DWV9XUklURV9CVUZGLAorICAgIENDQ0lfTEFURU5DWV9XUklURV9JT1IsCisgICAgQ0NDSV9MQVRFTkNZX1dSSVRFX0lPUkVRLAorICAgIENDQ0lfTEFURU5DWV9ETElPUl9BR0dfQ0IsCisgICAgQ0NDSV9MQVRFTkNZX0RMSU9SX0FHR19DQl9UT19VU0VSLAorICAgIENMRE1BX0xBVEVOQ1lfSElTUiwKKyAgICBDTERNQV9MQVRFTkNZX0RFUSwKKyAgICBDTERNQV9MQVRFTkNZX0VOUSwKKyAgICBDTERNQV9MQVRFTkNZX0FDSywKKyAgICAvL1NESU9DIDE2CisgICAgU0RJT0NfRExfU1VCTUlULAorICAgIFNESU9DX1VMX1BPTExfUSwKKyAgICAvL0NDQ0kgU1lTIE1TRyAxOAorICAgIENDQ0lfU1lTX01TR19TRU5EX01FU1NBR0UsCisgICAgQ0NDSV9TWVNfTVNHX1VMX0NCLAorICAgIC8vQ0NDSSBJUEMgMjAKKyAgICBDQ0NJX0lQQ19ETF9UT19ISUYsCisgICAgQ0NDSV9JUENfRExfV0hPTEUsCisgICAgQ0NDSV9JUENfVUxfU0VORF9JTE0sCisgICAgQ0NDSV9JUENfVUxfV0hPTEUsCisgICAgLy9DQ0NJIFJQQyAyNAorICAgIENDQ0lfUlBDX1dSSVRFLAorICAgIENDQ0lfUlBDX1BST0NFU1MsCisgICAgQ0NDSV9SUENfUkVBRCwKKyAgICBDQ0NJX1JQQ19XSE9MRSwKKyAgICAvL0NDQ0kgSU1TIDI4CisgICAgQ0NDSV9JTVNfRExfVE9fSElGLAorICAgIENDQ0lfSU1TX1VMX0NCLAorICAgIC8vQ0NDSSBGUyAzMAorICAgIENDQ0lfRlNfR0VUX1BPUlQsCisgICAgQ0NDSV9GU19QVVRfQlVGRiwKKyAgICBDQ0NJX0ZTX1dBSVRfUlgsCisgICAgQ0NDSV9GU19HRVRfQlVGRiwKKyAgICBDQ0NJX0ZTX1BVVF9QT1JULAorICAgIENDQ0lfRlNfV0hPTEUsCisgICAgLy9DQ01OSSAzNgorICAgIENDTU5JX0RMX1RPX0hJRiwKKyAgICBDQ01OSV9VTF9DQiwKKyAgICBDQ01OSV9VTF9SRUxPQURfUSwKKyAgICAvL0NDQ0kgVFRZIDM5CisgICAgQ0NDSV9UVFlfRExfVE9fSElGLAorICAgIENDQ0lfVFRZX0RMX1JFTE9BRF9HUEQsCisgICAgQ0NDSV9UVFlfVUxfQ0IsCisgICAgQ0NDSV9UVFlfVUxfREVRX0lMTSwKKyAgICAvL05DQ0NJCisgICAgQ0NDSV9MQVRFTkNZX0NCX1RPX05DQ0NJX1VTRVIsCisgICAgQ0NDSV9MQVRFTkNZX05DQ0NJX1dSSVRFX0lPUkVRLAorICAgIENDQ0lfTEFURU5DWV9OQ0NDSV9SRUFEX1JFTE9BRF9ISUZfSU9SRVEsCisgICAgLy8gdXNlciBuZWVkIHRvIGRlZmluZSBoZXJlCisgICAgSExUX1VTRVJfSURfTUFYLAorfUhMVF9VU0VSX0lEOworCit0eXBlZGVmIGVudW17CisgICAgLyogVW5pdCBpcyB1cyAqLworICAgIEhMVF9MQVRFTkNZX0JPVU5EXzEwVVMgICAgPSAxMCwKKyAgICBITFRfTEFURU5DWV9CT1VORF81MFVTICAgID0gNTAsCisgICAgSExUX0xBVEVOQ1lfQk9VTkRfMTAwVVMgICA9IDEwMCwKKyAgICBITFRfTEFURU5DWV9CT1VORF81MDBVUyAgID0gNTAwLAorICAgIEhMVF9MQVRFTkNZX0JPVU5EXzFNUyAgICAgPSAxMDAwLAorICAgIEhMVF9MQVRFTkNZX0JPVU5EXzVNUyAgICAgPSA1MDAwLAorICAgIEhMVF9MQVRFTkNZX0JPVU5EXzEwTVMgICAgPSAxMDAwMCwKKyAgICAvLyBhZGQgbW9yZQorfUhMVF9MQVRFTkNZX0JPVU5EOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgSExUX1VTRVJfSUQgaWQ7ICAgICAgICAvKiBUaGUgbGF0ZWN5IHRyYWNlIGlkKi8KKyAgICBrYWxfdWludDMyIHN0YXJ0X3RpbWU7CisgICAga2FsX3VpbnQzMiBlbmRfdGltZTsKKyAgICBITFRfTEFURU5DWV9CT1VORCBib3VuZDsgIC8qIFRoZSBsYXRlbmN5IGJvdW5kYXJ5ICovCisgICAga2FsX3VpbnQzMiByZXNlcnZlZDsgICAgICAgICAgICAvKiBQcmludCB0aGlzIHJlc2VydmVkIHRvIGxvZyAqLworfUhMVF9VU0VSX0lORk9fVDsKKworI2lmIGRlZmluZWQoX19ITFRfU1VQUE9SVF9fKSAvLyBpbiBoaWZfbWFpbi5tYWsKKworLyogQVBJIGRlZmluZSAqLwordm9pZCBobHRfaW5pdChITFRfVVNFUl9JTkZPX1QgKmluZm8sIEhMVF9VU0VSX0lEIGlkLCBITFRfTEFURU5DWV9CT1VORCBib3VuZCwga2FsX3VpbnQzMiByZXNlcnZlZCk7Cit2b2lkIGhsdF9zdGFydChITFRfVVNFUl9JTkZPX1QgKmluZm8pOwora2FsX3VpbnQzMiBobHRfZW5kKEhMVF9VU0VSX0lORk9fVCAqaW5mbyk7CisKKyNkZWZpbmUgSExUX0lOSVQgIGhsdF9pbml0CisjZGVmaW5lIEhMVF9TVEFSVCBobHRfc3RhcnQKKyNkZWZpbmUgSExUX0VORCAgIGhsdF9lbmQKKworLyogV2lsbCBjYWxjdWFsdGUgYXZnIHdoZW4gY2FsbCBoaWZfbGF0ZW5jeV90cmFjZV9lbmQgKi8KKy8vI2RlZmluZSBfX0hMVF9DQUxDVUxBVEVfQVZHX18gCisKKy8qIENoZWNrIHVzZXIncyBpbnB1dCBwYXJhbWV0ZXIsIHdpbCBhc3NlcnQgaWYgaW52YWxpZCAqLworLy8jZGVmaW5lIF9fSExUX0NIRUNLX0VSUk9SX18KKyNpZiBkZWZpbmVkIChfX0hMVF9DSEVDS19FUlJPUl9fKQorI2RlZmluZSBITFRfQ0hFQ0tfRVJST1JfQVNTRVJUIEVYVF9BU1NFUlQKKyNlbHNlCisjZGVmaW5lIEhMVF9DSEVDS19FUlJPUl9BU1NFUlQoLi4uKSB7fQorI2VuZGlmIC8vIF9fSExUX0NIRUNLX0VSUk9SX18KKworI2Vsc2UgIC8vIE5vdCBzdXBwb3J0IEhMVAorI2RlZmluZSBITFRfSU5JVCguLi4pIHt9ICAKKyNkZWZpbmUgSExUX1NUQVJUKC4uLikge30KKyNkZWZpbmUgSExUX0VORCguLi4pIHt9CisjZW5kaWYgLy8gX19ITFRfU1VQUE9SVF9fCisKKyNlbmRpZiAvLyNpZm5kZWYgX0hMVF9JRl9ICmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2htdS5oIGIvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9obXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjdlOWYzCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9obXUuaApAQCAtMCwwICsxLDQxMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgaG11LmMKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyB0aGUgaGVhZGVyIGZpbGUgb2YgSG9zdCBJbnRlcmZhY2UgTWFuYWdlbWVudCBVbml0LgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDggMDcgMjAxNyBjcy5odWFuZworICogW01PTFkwMDI2ODU1MV0gVGFzayBiYXRjaCBzY2hlZHVsaW5nIGZvciBMVEUgTG93IHBvd2VyCisgKiBITVUgZm9yIFRHIGNoYW5nZQorICoKKyAqIDA4IDA3IDIwMTcgY3MuaHVhbmcKKyAqIFtNT0xZMDAyNjg1NTFdIFRhc2sgYmF0Y2ggc2NoZWR1bGluZyBmb3IgTFRFIExvdyBwb3dlcgorICogSE1VIGZvciBURyBjaGFuZ2UKKyAqCisgKiAwMiAwNiAyMDE3IHN0ZXZlLmthbworICogW01PTFkwMDE5NTU2M10gWzYyOTNdW0VMMl1bVVBDTV1bUkFURE1dW0VQRENQXSBJbml0aWFsIGZlYXR1cmUgaW50ZWdyYXRpb25zCisgKiAJCisgKiAJW1VNT0xZQV1bVFJVTktdW0hNVV0gU2V0IEhNVV9HUFRJTUVSX1BSSU9ESUNfSU5URVJWQUwgYXMgMSBtcyBmb3IgVUVTSU0gb25seQorICoKKyAqIDA5IDI2IDIwMTYgY2FtbWllLnlhbmcKKyAqIFtNT0xZMDAxOTU1NjNdIFs2MjkzXVtFTDJdW1VQQ01dW1JBVERNXVtFUERDUF0gSW5pdGlhbCBmZWF0dXJlIGludGVncmF0aW9ucworICogW1RSVU5LXSBVUENNL1JBVERNL0VQRENQIGZlYXR1cmUgaW50ZWdyYXRpb25zIGZyb20gUFMuREVWCisgKgorICogMDkgMTkgMjAxNiBjYW1taWUueWFuZworICogW01PTFkwMDE5NTU2M10gWzYyOTNdW0VMMl1bVVBDTV1bUkFURE1dW0VQRENQXSBJbml0aWFsIGZlYXR1cmUgaW50ZWdyYXRpb25zCisgKiBbUFMuREVWXVtITVVdIG1vZGlmeSB0aWNrIHVpbnQgb2YgSE1VX0dQVElNRVJfUFJJT0RJQ19JTlRFUlZBTCBpbiBtb2RpcyBlbnZpcm9ubWVudCBmb3IgTldTSU0gVENfN18zXzZfMQorICoKKyAqIDExIDExIDIwMTUgYXAud2FuZworICogW01PTFkwMDE0ODk0N10gW0hNVV0gQ2hhbmdlIFBBTExBRElVTSBHUFQgdGltZXIgdG8gMW1zCisgKiAuCisgKgorICogMTEgMTAgMjAxNSBhcC53YW5nCisgKiBbTU9MWTAwMTQ4NzQ2XSBbSE1VXSBDaGVjayB0aW1lciBmZWF0dXJlCisgKiAuCisgKgorICogMTEgMTAgMjAxNSBhcC53YW5nCisgKiBbTU9MWTAwMTQ4NzQ2XSBbSE1VXSBDaGVjayB0aW1lciBmZWF0dXJlCisgKgorICogMDMgMDIgMjAxNSBhcC53YW5nCisgKiBbTU9MWTAwMDk3MzIwXSBbSE1VXSBSb2xsYmFjayBITVUgMTBtcyBwYXRjaCBmb3IgRlBHQSB0byAxbXMKKyAqIFJvbGxiYWNrIEhNVSAxMG1zIHBhdGNoIGZvciBGUEdBCisgKgorICogMTIgMzEgMjAxNCBhcC53YW5nCisgKiBbTU9MWTAwMDg5OTE2XSBbSE1VXSBISUYgT04vT0ZGIGZvciBwb3dlciBzYXZpbmcKKyAqIC4KKyAqCisgKiAxMSAxMyAyMDE0IGNzLmh1YW5nCisgKiBbTU9MWTAwMDcxMjE1XSBbSE1VXSBNb2RpZnkgSE1VIHRpY2sgdG8gMTBtcyBmb3IgNjI5MSBGUEdBIGZyZXFlbmN5IHRvbyBzbG93CisgKiBNZXJnaW5nCisgKiAJCisgKiAJLy9VTU9MWS9ERVYvTVQ2MjkxX0RFVi9tY3UvcGNvcmUvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2htdS5oCisgKiAJCisgKiAJdG8gLy9VTU9MWS9UUlVOSy9VTU9MWS9tY3UvcGNvcmUvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2htdS5oCisgKgorICogMDcgMDQgMjAxNCBhcC53YW5nCisgKiBbTU9MWTAwMDcxNDgxXSBbSE1VXSBBZGQgSElGIGJvb3QgaW5pdCB0byBBcHBsaWNhdGlvbiBpbml0CisgKiAuCisgKgorICoKKyAqIDA2IDEwIDIwMTQgYXAud2FuZworICogW01PTFkwMDA2NzM2N10gW0hNVV0gTW9kaWZ5IEdQVCB0aW1lciB0byBNUyBjYWxsYmFjayBmb3IgUjggb24gTU9MWQorICogLgorICoKKyAqIDA0IDI4IDIwMTQgYXAud2FuZworICogW01PTFkwMDA2MzkxMl0gW0hNVV0gSE1VIHRlbXAgc29sdXRpb24gZm9yIEsyIE1EMgorICogSE1VIHRlbXAgc29sdXRpb24gZm9yIEsyIE1EMgorICoKKyAqIDAzIDExIDIwMTMgYXAud2FuZworICogW01PTFkwMDAxMTY5Nl0gW0hNVV0gSE1VIGNvZGUgcmVmaW5lIGFuZCBjb21waWxlIHdhcm5pbmcgZml4CisgKiBbSE1VXSBBZGQgY29weXJpZ2h0IGhlYWRlciBhbmQgY2hhbmdlIGlwY19yZWxvYWQgY29uZGl0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluY2x1ZGUgaGVhZGVyIGZpbGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hNVV9IX18KKyNkZWZpbmUgX19ITVVfSF9fCisKKyNpbmNsdWRlICJobXVfY29uZl9kYXRhLmgiCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVHlwZSBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vI2lmIGRlZmluZWQoX19NVEtfVEFSR0VUX18pCisvLyNkZWZpbmUgaG11X3ByaW50ZiAgICAgICAgICAgICAgIGRiZ19wcmludAorLy8jZWxzZQorLy8jZGVmaW5lIGhtdV9wcmludGYgICAgICAgICAgICAgICAJa2FsX3ByaW50ZgorLy8jZW5kaWYKKyNkZWZpbmUgaG11X3ByaW50ZgorCisjZGVmaW5lIEhNVV9HUFRJTUVSX0lOSVRfSU5URVJWQUwJKDEwMFUpICAvLzEwMCBtcyAKKworI2lmIGRlZmluZWQoX19NVEtfVEFSR0VUX18pCisgICAgI2lmIGRlZmluZWQoX19QQUxMQURJVU1fXykKKyAgICAgICAgI2RlZmluZSBITVVfR1BUSU1FUl9QUklPRElDX0lOVEVSVkFMICgxVSkJLy8gMW1zIAorICAgICNlbGlmIGRlZmluZWQoX19GUEdBX18pCisgICAgICAgICNkZWZpbmUgSE1VX0dQVElNRVJfUFJJT0RJQ19JTlRFUlZBTCAoMTBVKQkvLyAxMG1zIAorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgSE1VX0dQVElNRVJfUFJJT0RJQ19JTlRFUlZBTCAoMVUpCS8vIDFtcyAKKyAgICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoX19VNEdfQURBUFRPUl9fKQorICAgICAgICAjZGVmaW5lIEhNVV9HUFRJTUVSX1BSSU9ESUNfSU5URVJWQUwgKDFVKQkvLyAxbXMuIHRvIGVuc3VyZSB0aGF0IEdDRiBUQ183XzNfNl8xIHdpbGwgcGFzcyBpbiBOV1NJTQorI2Vsc2UKKyAgICAgICAgI2RlZmluZSBITVVfR1BUSU1FUl9QUklPRElDX0lOVEVSVkFMICgxMFUpCS8vIDEwbXMKKyNlbmRpZgorCisvKiogCisgKiBAYnJpZWYgZW51bWVyYXRpb24gZm9yIEhNVSBBUEkgcmV0dXJuIGNvZGVzIAorICovCit0eXBlZGVmIGVudW0KK3sKKwlITVVfT0sJCQkJCQkJPSAwLAkKKworCUhNVV9JTklUX05PRlVOQwkJCQkJPSAoLTEpLAorCUhNVV9OT1RfSU5JVAkJCQkJPSAoLTIpLAorCUhNVV9BTFJFQURZX0lOSVQJCQkJPSAoLTMpLAorCQorCUhNVV9RVUVSWV9GQUlMCQkJCQk9ICgtMTApLAorCUhNVV9RVUVSWV9PVVRPRkJVRiAJCQkJPSAoLTExKSwKKwlITVVfUVVFUllfTlZSQU1GQUlMCQkJCT0gKC0xMiksCisJSE1VX1FVRVJZX05PTUFUQ0hJTkcJCQk9ICgtMTMpLAorCit9aG11UmV0dXJuQ29kZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKwlITVVfUFJFX0ZVTkMJCQkJCT0gMCwJCisJSE1VX01BSU5fRlVOQwkJCQkJPSAxLAkKKwlITVVfUE9TVF9GVU5DCQkJCQk9IDIsCQorfWhtdUZ1bmNUeXBlX2VudW07CisKKy8qKiAKKyAqIEBicmllZiBobXVfY2hlY2tfdGltZXIoKSByZXR1cm4gdmFsdWUgCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgICAgICBITVVfQ0hFQ0tfVElNRVJfU1VDQ0VTUwkJPSAwLAorCUhNVV9DSEVDS19USU1FUl9XQVJOSU5HCQk9IDEsCisJSE1VX0NIRUNLX1RJTUVSX0VSUk9SCQk9IDIsCit9SE1VX0NIRUNLX1RJTUVSX0VOVU07CisKKy8qKiAKKyAqIEBicmllZiBlbnVtZXJhdGlvbiBmb3IgSE1VIEJvb3QgbWV0aG9kLCAKKyAqIEN1cnJlbnRseSwgd2UgaGF2ZQorICogKDEpIEhNVV9CT09UX05PUk1BTCA6IHRoaXMgc2V0dGluZyBpcyBmb3Igbm9ybWFsIGJvb3Rpbmcgd2l0aCBVU0IsU0RJTyxDQ0lGIC4uLi4gCisgKiAgIFdoZW4geW91IHNlbGVjdCBITVVfQk9PVF9OT1JNQUwgaW4gaG11X2luaXQsIHRoZSBITVUgY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgYmUgbG9hZGVkIGZyb20gTlZSQU1fRUZfSE1VX0NPTkZJR19MSUQgCisgKiAoMikgSE1VX0JPT1RfSEQgTCB0aGlzIHNldHRpbmcgaXMgZm9yIFVTQiBIb3N0IGRldGVjdGlvbiBib290aW5nCisgKiAgIFdoZW4geW91IHNlbGVjdCBITVVfQk9PVF9IRCBpbiBobXVfaW5pdCwgdGhlIEhNVSBjb25maWd1cmF0aW9uIGZpbGUgd2lsbCBiZSBsb2FkZWQgZnJvbSBOVlJBTV9FRl9ITVVfSERfQ09ORklHX0xJRCAgCisgKi8KK3R5cGVkZWYgZW51bQoreworCUhNVV9CT09UX05PUk1BTCA9ICAwLAorCUhNVV9CT09UX0hEICwKK31obXVCb290VHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKwlITVVfVElNRVJfU09VUkNFX0RTUCA9ICAwLAorCUhNVV9USU1FUl9TT1VSQ0VfU1lTICwKK31obXVUaW1lclNvdXJjZV9lbnVtOworLyoqIAorICogQG5hbWU6IF9ITVVfSU5URVJOQUxfU1RSVUNUCisgKiBAYnJpZWYgdGhlIHN0cnVjdHVyZSBmb3IgSW5pdCBmdW5jdGlvbiBhbmQgaGlmIGVtdSBkZXZpY2UgdHlwZXMgcmVnaXN0cmF0aW9uIHRhYmxlCisgKi8KK3R5cGVkZWYgc3RydWN0IF9ITVVfSU5URVJOQUxfU1RBVEVfU1RSVUNUIHsKKwlrYWxfYm9vbCAJaG11Qm9vdEluaXQ7CisJa2FsX2Jvb2wgCWhtdUluaXQgOworCWthbF9ldmVudGdycGlkCQlobXVIaWZFZ0lkIDsKK30gaG11X2ludGVybmFsX3N0YXRlX3N0cnVjdCA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRlVOQ1RJT04KKyAqICBobXVfYm9vdF9pbml0CisgKiBERVNDUklQVElPTgorICogIEhNVSAxc3QgYm9vdCBJbml0IGZ1bmN0aW9uIHRvIGluaXQgZ2xvYmFsIG11dGV4IGFuZCBncHRpbWVyCisgKiBQQVJBTUVURVJTCisgKiAgCisgKiBSRVRVUk5TCisgKiAgc3VjY2VzcyBvciBmYWlsCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfaW50MzIgaG11X2Jvb3RfaW5pdCh2b2lkKSA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRlVOQ1RJT04KKyAqICBobXVfaGlmZWdfc2V0CisgKiBERVNDUklQVElPTgorICogIFNldCBvbmUgb3IgbW9yZSB0aGUgZXZlbnRzIHRvIHJlc3VtZSB0aGUgSElGIHRhc2suCisgKiBQQVJBTUVURVJTCisgKiAgZXZlbnRzIC0gZXZlbnRzIHRvIHNldC4gCisgKiAgICAgICAgICAgU2VlIGFsc28gSElGX0RSVl9FR19YWFggZGVmaW5lZCBpbiBobXVfY29uZl9kYXRhLmggZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKiBSRVRVUk5TCisgKiAgdGhlIGVnIHNldCByZXN1bHQsIHN1Y2Nlc3Mgb3IgZmFpbAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX3N0YXR1cyBobXVfaGlmZWdfc2V0KGthbF91aW50MzIgZXZlbnRzKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGVU5DVElPTgorICogIGhtdV9oaWZlZ193YWl0CisgKiBERVNDUklQVElPTgorICogIFdhaXQgYW5kIGNsZWFyIHRoZSBvbmUgb3IgbW9yZSBISUYgZXZlbnRzLgorICogUEFSQU1FVEVSUworICogIGV2ZW50cyAtIGV2ZW50cyB0byB3YWl0LiAKKyAqICAgICAgICAgICBTZWUgYWxzbyBISUZfRFJWX0VHX1hYWCBkZWZpbmVkIGluIGhtdV9jb25mX2RhdGEuaCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqIFJFVFVSTlMKKyAqICBUaGUgZXZlbnQgaGFwcGVuZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfdWludDMyIGhtdV9oaWZlZ193YWl0KGthbF91aW50MzIgZXZlbnRzKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGVU5DVElPTgorICogIGhtdV9zdGFydF9oaWZfc3lzX3RpbWVyCisgKiBERVNDUklQVElPTgorICogIHN0YXJ0IHRoZSBzeXMgdGltZXIgZm9yIEhJRiB0YXNraW5nLiBUaGlzIEFQSSBzaG91bGQgYmUgY2FsbGVkIGZyb20gUFdTViBtb2R1bGUgdG8gcmVzdGFydAorICogIHRoZSB0aW1lciBhZnRlciB3YWtlIHVwIGZyb20gUFdTVgorICogUEFSQU1FVEVSUworICogIHZvaWQKKyAqIFJFVFVSTlMKKyAqICB2b2lkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGhtdV9zdGFydF9oaWZfc3lzX3RpbWVyKHZvaWQpIDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGVU5DVElPTgorICogIGhtdV9zdG9wX2hpZl9zeXNfdGltZXIKKyAqIERFU0NSSVBUSU9OCisgKiAgc3RvcCB0aGUgc3lzIHRpbWVyIHRvIHBhdXNlIEhJRiB0YXNraW5nLiBUaGlzIEFQSSBzaG91bGQgYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgCisgKiAgUFdTViBwcm9jZWR1cmUKKyAqIFBBUkFNRVRFUlMKKyAqICB2b2lkCisgKiBSRVRVUk5TCisgKiAgdm9pZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBobXVfc3RvcF9oaWZfc3lzX3RpbWVyKHZvaWQpIDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZVTkNUSU9OCisgKiAgaG11X2RzcF90aW1lcl9raWNrCisgKiBERVNDUklQVElPTgorICogIFRoZSBkc3AgcGVyaW9kaWNhbCB0aW1lciBzaG91bGQga2ljayB0aGlzIEFQSSB0byBzY2hlZHVsIHRoZSBISUYgdGFza2luZyB3aGVuIHRoZSBkc3AgCisgKiAgdGltZXIgZXhpc3RzLiAKKyAqIFBBUkFNRVRFUlMKKyAqICB2b2lkCisgKiBSRVRVUk5TCisgKiAgdm9pZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBobXVfZHNwX3RpbWVyX2tpY2sodm9pZCkgOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZVTkNUSU9OCisgKiAgaG11X3N3aXRjaF9oaWZfdGltZXIKKyAqIERFU0NSSVBUSU9OCisgKiAgVGhlIGRzcCBwZXJpb2RpY2FsIHRpbWVyIHNob3VsZCBraWNrIHRoaXMgQVBJIHRvIHNjaGVkdWwgdGhlIEhJRiB0YXNraW5nIHdoZW4gdGhlIGRzcCAKKyAqICB0aW1lciBleGlzdHMuIAorICogUEFSQU1FVEVSUworICogIHNvdXJjZSAtICgxKSBITVVfVElNRVJfU09VUkNFX0RTUCAKKyAqCQkJKDIpIEhNVV9USU1FUl9TT1VSQ0VfU1lTCisgKiBSRVRVUk5TCisgKiAgdm9pZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBobXVfc3dpdGNoX2hpZl90aW1lcihobXVUaW1lclNvdXJjZV9lbnVtIHNvdXJjZSkgOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZVTkNUSU9OCisgKiAgaG11X2V4Y2VwdF9pbml0CisgKgorICogREVTQ1JJUFRJT04KKyAqICBUcmlnZ2VyIGFuIHVwcGVyIGxheWVyIGRldmljZSBtb2R1bGUgdG8gaG9vayB3aXRoIFRUWUNPUkUgYW5kIHRoZW4gcHJvY2VlZCAKKyAqICBleGNlcHRpb24gZmxvdyBpZiBhbiBleGNlcHRpb24gaGFwcGVucyBiZWZvcmUgaG11X2luaXQoKSBjb21wbGV0ZXMuCisgKgorICogUEFSQU1FVEVSUworICogIE4vQQorICoKKyAqIFJFVFVSTlMKKyAqICBLQUxfVFJVRSBpZiBjYWxsZXIgaXMgYWxsb3dlZCB0byBwcm9jZWVkIHRoZSBleGNlcHRpb24gZmxvdzsgCisgKiAgS0FMX0ZBTFNFIGlmIHRoZXJlJ3Mgbm8gcHJvcGVyIGNhbGxiYWNrIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgYnkgCisgKiAgICAgICAgICAgIHVwcGVyIGxheWVyIGRldmljZSBtb2R1bGVzIG9yIHNvbWV0aGluZyB3cm9uZyB3aGlsZSBleGVjdXRpbmcgCisgKiAgICAgICAgICAgIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIGhtdV9leGNlcHRfaW5pdCh2b2lkKTsgCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRlVOQ1RJT04KKyAqICBoaWZfYm9vdF9pbml0CisgKiBERVNDUklQVElPTgorICogIEhJRiBib290IGluaXQgZnVuY3Rpb24gdG8gaW5pdGlhbCBISUYgbW9kdWxlIHdpdGhvdXQgdGFzay4KKyAqIFBBUkFNRVRFUlMKKyAqICAKKyAqIFJFVFVSTlMKKyAqICBzdWNjZXNzIG9yIGZhaWwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9pbnQzMiBoaWZfYm9vdF9pbml0KHZvaWQpIDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGVU5DVElPTgorICogIGhtdV9oaWZlZ19zdG9wCisgKiBERVNDUklQVElPTgorICogIHN0b3Agb25lIG9yIG1vcmUgSElGIGV2ZW50cy4KKyAqIFBBUkFNRVRFUlMKKyAqICBldmVudHMgLSBldmVudHMgdG8gd2FpdC4gCisgKiAgICAgICAgICAgU2VlIGFsc28gSElGX0RSVl9FR19YWFggZGVmaW5lZCBpbiBobXVfY29uZl9kYXRhLmggZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKiBSRVRVUk5TCisgKiAgVGhlIGVuYWJsZWQgZXZlbnRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX3VpbnQzMiBobXVfaGlmZWdfc3RvcChrYWxfdWludDMyIGV2ZW50cyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRlVOQ1RJT04KKyAqICBobXVfaGlmZWdfc3RhcnQKKyAqIERFU0NSSVBUSU9OCisgKiAgc3RhcnQgb25lIG9yIG1vcmUgSElGIGV2ZW50cy4KKyAqIFBBUkFNRVRFUlMKKyAqICBldmVudHMgLSBldmVudHMgdG8gd2FpdC4gCisgKiAgICAgICAgICAgU2VlIGFsc28gSElGX0RSVl9FR19YWFggZGVmaW5lZCBpbiBobXVfY29uZl9kYXRhLmggZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKiBSRVRVUk5TCisgKiAgVGhlIGVuYWJsZWQgZXZlbnRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX3VpbnQzMiBobXVfaGlmZWdfc3RhcnQoa2FsX3VpbnQzMiBldmVudHMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZVTkNUSU9OCisgKiBobXVfY2hlY2tfdGltZXIKKyAqIERFU0NSSVBUSU9OCisgKiBDaGVjayBITVUgdGltZXIgc291cmNlIHdoZXRoZXIgaXMgbm9ybWFsIAorICogUEFSQU1FVEVSUworICogIAorICogUkVUVVJOUworICogSE1VX0NIRUNLX1RJTUVSX0VOVU0gOiByZXR1cm4gY2hlY2tpbmcgcmVzdWx0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfdWludDMyIGhtdV9jaGVja190aW1lcihrYWxfdWludDMyIGV2ZW50cyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRlVOQ1RJT04KKyAqIGhtdV9jaGVja190aW1lcl9zdGFydCAvIGhtdV9jaGVja190aW1lcl9zdG9wIAorICogREVTQ1JJUFRJT04KKyAqIFN0YXJ0IC8gU3RvcCBITVUgY2hlY2tpbmcgdGltZXIKKyAqIFBBUkFNRVRFUlMKKyAqICAKKyAqIFJFVFVSTlMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgaG11X2NoZWNrX3RpbWVyX3N0YXJ0KCk7Cit2b2lkIGhtdV9jaGVja190aW1lcl9zdG9wKCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRlVOQ1RJT04KKyAqIGhtdV90Z19jYWxsYmFjaworICogREVTQ1JJUFRJT04KKyAqIENhbGxiYWNrIGZyb20gdGFzayBncm91cCBoaXNyCisgKiBQQVJBTUVURVJTCisgKiAgCisgKiBSRVRVUk5TCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChfX0xQX1NDSEVEVUxFX0VOQUJMRV9fKSAmJiBkZWZpbmVkKF9fTFBfU0NIRURVTEVfSE1VX1JFU0NIRURVTEVfXykKKyNkZWZpbmUgX19ITVVfVEdfVElNRVJfU1VQUE9SVF9fCisjZW5kaWYKK3ZvaWQgaG11X3RnX3RpbWVyX2NhbGxiYWNrKCk7CisKKyNlbmRpZiAvKl9fSE1VX0hfXyovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2htdV9jb25mX2RhdGEuaCBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvaG11X2NvbmZfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYTlmODYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL2htdV9jb25mX2RhdGEuaApAQCAtMCwwICsxLDIzOCBAQAorI2lmbmRlZiBfX0hNVV9EUlZfRlVOQ19IX18KKyNkZWZpbmUgX19ITVVfRFJWX0ZVTkNfSF9fCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJkY2wuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhNVSBQYXJhbWV0ZXJzIERlZmluaXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIC8qTWF4aW11bSBudW1iZXIgb2YgZW11bGF0aW9uIGRldmljZXMgbWFuYWdlZCBieSBITVUgaW4gbm9ybWFsIGJvb3RpbmcqLworI2RlZmluZSBITVVfTUFYX0VNVURFVk5VTSAJCQkJMTAKKyAvKk1heGltdW0gbnVtYmVyIG9mIGVtdWxhdGlvbiBkZXZpY2VzIG1hbmFnZWQgYnkgSE1VIGluIEhvc3QgRGV0ZWN0aW9uIGJvb3RpbmcqLworI2RlZmluZSBITVVfTUFYX0hEX0VNVURFVk5VTQkJCTMKKy8qTWF4aW11bSBsZW5ndGggb2YgdGhlIEhJRiBjb3JlJ3MgZXh0ZW5kZWQgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgSE1VX01BWF9ISUZfRVhUSU5GT19TSVpFCQk1MTIKKy8qTWF4aW11bSBsZW5ndGggb2YgZWFjaCBlbXVsYXRpb24gZGV2aWNlJ3MgZXh0ZW5kZWQgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgSE1VX01BWF9FTVVERVZfRVhUSU5GT19TSVpFCQk2NAorCisjZGVmaW5lIEhNVV9QUkVGSVgJCSJITVUiCisjZGVmaW5lIEhNVV9GQUlMX1BSRUZJWAkiSE1VLUZBSUwiCisKKworLyogUG9ydCBudW1iZXIgZm9yIERITCBkZWJ1Z2dpbmcgY2hhbm5lbC4gKi8KKyNkZWZpbmUgSE1VX0VYQ0VQVF9DT01fUE9SVCB1YXJ0X3BvcnRfdXNiMgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVHlwZSBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKlRoZSBkZWZpbml0aW9ucyBhYm91dGhlIEhJRiBldmVudCBncm91cCAqLworLyogTmFtZSAqLworI2RlZmluZSBISUZfRFJWX0VHX05BTUUgIkhJRl9EUlZfRUciCisKKy8qIEV2ZW50ICovCisjZGVmaW5lIEhJRl9EUlZfRUdfSElGX1RJQ0tfRVZFTlQgICAgICAgMHg4MDAwMDAwMCAgLyogSElGIHRpY2sgdG8gdHJpZ2dlciBVU0JDT1JFIHRvIGNoZWNrIEdQRC4gKi8KKyNkZWZpbmUgSElGX0RSVl9FR19ISUZfVElDS19FVkVOVF9TRElPICAweDA4MDAwMDAwICAvKiBISUYgdGljayB0byB0cmlnZ2VyIFNESU9DT1JFIHRvIGNoZWNrIEdQRC4gKi8KKyNkZWZpbmUgSElGX0RSVl9FR19ISUZfVElDS19FVkVOVF9VQVJUICAweDAwODAwMDAwICAvKiBISUYgdGljayB0byB0cmlnZ2VyIFVBUlRDT1JFIHRvIGNoZWNrIEdQRC4gKi8KKyNkZWZpbmUgSElGX0RSVl9FR19ISUZfVElDS19FVkVOVF9DTERNQSAweDAwMDgwMDAwICAvKiBISUYgdGljayB0byB0cmlnZ2VyIENMRE1BQ09SRSB0byBjaGVjayBHUEQuICovCisjZGVmaW5lIEhJRl9EUlZfRUdfSElGX1RJQ0tfRVZFTlRfQ0NCICAgMHgwMDAwODAwMCAgLyogSElGIHRpY2sgdG8gdHJpZ2dlciBDQ0lTTUNDQi4gKi8KKyNkZWZpbmUgSElGX0RSVl9FR19VU0JDX0lORF9FVkVOVCAgICAgICAweDQwMDAwMDAwICAvKiBUbyBhbGxvdyBVU0JDT1JFIHRvIGluZGljYXRlIGRldmljZSBldmVudHMgb3Igc2V0dXAgcGFja2V0IHVwIHRvIFVTQkNMQVNTIGluIHRhc2sgY29udGV4dC4gKi8KKyNkZWZpbmUgSElGX0RSVl9FR19VQVJUX0lORF9FVkVOVCAgICAgICAweDAwNDAwMDAwICAvKiBUbyBhbGxvdyBVQVJUQ09SRSB0byBpbmRpY2F0ZSBwb3J0IG9wZW4gaW4gdGFzayBjb250ZXh0LiAqLworI2RlZmluZSBISUZfRFJWX0VHX0hJRl9USUNLX0VWRU5UX0xISUYgICAgIDB4MDAwMDgwMCAvKiBISUYgdGljayBmb3IgTEhJRiBwb2xsaW5nIFVMIGRhdGEgKi8KKyNkZWZpbmUgSElGX0RSVl9FR19ISUZfVElDS19FVkVOVF9MSElGX0xPRyAgICAgMHgwMDAwNDAwIC8qIEhJRiB0aWNrIGZvciBMSElGIHBvbGxpbmcgSFcgbG9nICovCisjZGVmaW5lIEhJRl9EUlZfRUdfQUxMX0VWRU5UICAgICAgICAgICAgMHhGRkZGRkZGRiAgLyogQWxsIGV2ZW50cyBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50IGdyb3VwIG1hbmFnZWQgYnkgSE1VLiAqLworI2RlZmluZSBISUZfRFJWX0VHX0hJRl9SRUxPQURfRVZORVQgICAgIDB4MDAwMDAwMDggIC8qIEhJRiBSZWxvYWQgRXZlbnQgZm9yIEhJRiBPTi9PRkYgZW5oYW5jZSwga2VlcCBITVUgZm9yIFJHUEQgcmVsb2FkKi8KKyNkZWZpbmUgSElGX0RSVl9FR19ISUZfVElDS19FVkVOVF9JUEZDICAweDAwMDAwMDAxICAvKiBISUYgdGljayB0byB0cmlnZ2VyIElQRkNPUkUgdG8gY2hlY2sgREwgTUVUQSBvciB1cGRhdGUgKi8KKyNkZWZpbmUgSElGX0RSVl9FR19ISUZfSU5EX0VWRU5UX0lQRkMgICAweDAwMDAwMDAyICAvKiBUbyBhbGxvdyBJUEZDT1JFIHRvIGluZGljYXRlIGludGVybmFsIElMTS9ldmVudCB0byBpdHNlbGYgKi8KKworLyogSElGIHRpY2sgdG8gdHJpZ2dlciBISUZDT1JFIHRvIGNoZWNrIEdQRC4gQWRkIEhJRiB0aWNrIGV2ZW50IG11c3QgbW9kaWZ5IHRoaXMgbWFzayovCisjZGVmaW5lIEhJRl9EUlZfRUdfSElGX1RJQ0tfRVZFTlRfR1JPVVAgKCBISUZfRFJWX0VHX0hJRl9USUNLX0VWRU5UIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhJRl9EUlZfRUdfSElGX1RJQ0tfRVZFTlRfU0RJTyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISUZfRFJWX0VHX0hJRl9USUNLX0VWRU5UX1VBUlQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSElGX0RSVl9FR19ISUZfVElDS19FVkVOVF9DTERNQSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISUZfRFJWX0VHX0hJRl9USUNLX0VWRU5UX0xISUYgXAorCQkJCQkJCQkJCXwgSElGX0RSVl9FR19ISUZfVElDS19FVkVOVF9MSElGX0xPRyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISUZfRFJWX0VHX0hJRl9USUNLX0VWRU5UX0NDQiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISUZfRFJWX0VHX0hJRl9SRUxPQURfRVZORVQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSElGX0RSVl9FR19ISUZfVElDS19FVkVOVF9JUEZDIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKy8qKiAKKyAqIEBicmllZiBlbnVtZXJhdGlvbiBmb3IgSE1VIEVtdWxhdGlvbiBEZXZpY2UgdHlwZXMKKyAqLwordHlwZWRlZiBlbnVtCit7CisJSE1VX1VTQl9ERVZfTUlOCQkJCQk9IDAsCQorCUhNVV9VU0JfREVWX0FDTSwgaG11X3VzYl9kZXZfY2RjYWNtID0gSE1VX1VTQl9ERVZfQUNNLAorCUhNVV9VU0JfREVWX0VDTSwgaG11X3VzYl9kZXZfZWNtID0gSE1VX1VTQl9ERVZfRUNNLAorCUhNVV9VU0JfREVWX01CSU0sIGhtdV91c2JfZGV2X21iaW0gPSBITVVfVVNCX0RFVl9NQklNLAorCUhNVV9VU0JfREVWX0NEUk9NLCBobXVfdXNiX2Rldl9jZHJvbSA9IEhNVV9VU0JfREVWX0NEUk9NLAorCUhNVV9VU0JfREVWX0RJU0ssIGhtdV91c2JfZGV2X2Rpc2sgPSBITVVfVVNCX0RFVl9ESVNLLAkKKwlITVVfVVNCX0RFVl9STkRJUywgaG11X3VzYl9kZXZfcm5kaXMgPSBITVVfVVNCX0RFVl9STkRJUywKKyNpZmRlZiBfX1VTQl9NU0RfU1VQUE9SVF9fCisJSE1VX1VTQl9ERVZfTVNELGhtdV91c2JfZGV2X21zZCA9IEhNVV9VU0JfREVWX01TRCwKKyNlbmRpZgorCUhNVV9VU0JfREVWX01BWCwJCisKKwlITVVfTU9CSUxFX0RFVl9NSU4JCQkJPSAyMCwKKwlITVVfTU9CSUxFX0RFVl9DT00gCSwKKwlITVVfTU9CSUxFX0RFVl9FVEggLAorCUhNVV9NT0JJTEVfREVWX0lQICwKKwlITVVfTU9CSUxFX0RFVl9JUEMsCisJSE1VX01PQklMRV9ERVZfTUIgLAkKKwlITVVfTU9CSUxFX0RFVl9NQVggLAkJCisKKwlITVVfRVhUX0RFVl9NSU4JCQkJCT0gNDAgLAkJCisJSE1VX0VYVF9ERVZfVUFSVCAJLAkJCisJSE1VX0VYVF9ERVZfTUFYIAksCQkKKworCUhNVV9ERVZfTk9ORQkJCQkJPSAweDdmZmZmZmZmLAkKK31obXVFbXVEZXZpY2VUeXBlX2VudW07CisKKy8qKiAKKyAqIEBicmllZiBlbnVtZXJhdGlvbiBmb3IgSE1VIEhJRkNPUkUgSW5pdCBmdW5jdGlvbiB0eXBlcy4gSGVyZSB3ZSBkZWZpbmUgYm90aCBvZiBpbml0IGZ1bmN0aW9ucyBhbmQgcG9zdCBpbml0IGZ1bmN0aW9ucyAKKyAqLwordHlwZWRlZiBlbnVtCit7CQorLy8gIFRoZSBkZWNsYXJhdGlvbiBwYXJ0IGZvciB0aGUgdHlwZSBvZiBpbml0L2RlaW5pdCBmdW5jdGlvbnMKKwlITVVfSElGQ09SRV9NSU4JCQk9IDAsCQorCUhNVV9ISUZDT1JFX1VTQiAsCisJSE1VX0hJRkNPUkVfU0RJTyAsCQorCUhNVV9ISUZDT1JFX0NDSUYgLAorICAgIEhNVV9ISUZDT1JFX0NBSUYgLAkKKyAgICBITVVfSElGQ09SRV9DTERNQSAsCisgICAgSE1VX0hJRkNPUkVfQ0NDSSAsCisJSE1VX0hJRkNPUkVfTUFYICwgCisJCisJSE1VX0hJRkNPUkVfVFlQRV9OT05FCQkJPSAweDdmZmZmZmZmLAkKK31obXVIaWZDb3JlVHlwZV9lbnVtOworCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTdHJ1Y3QgRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIAorICogQG5hbWU6IEhNVV9FTVVERVZfSU5GT19TVFJVQ1QKKyAqIEBicmllZiB0aGUgaG11IHN0cnVjdHVyZSBmb3IgZW11bGF0aW9uIGRldmljZSAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSE1VX0VNVURFVl9JTkZPX1NUUlVDVAorewkKKwkvKiB0aGUgZW11bGF0aW9uIGRldmljZSB0eXBlIHN1cHBvcnRlZCBpbiBMVEUgSElGICovCisJaG11RW11RGV2aWNlVHlwZV9lbnVtICAgIGRldl90eXBlOworCS8qIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIGVtdWxhdGlvbiBkZXZpY2UgYW5kIGl0J3MgdXBwZXIgbGF5ZXIgdHVubmVsICovCisJa2FsX3VpbnQzMiAJCQlkZXZfbWFwcGluZzsJCQorCS8qIHJlc2VydmUgaW4gTlZSQU0gc3BhY2UuIG5leHQgcG9pbnRlciBwb2ludCB0byB0aGUgbmV4dCBlbXVsYXRpb24gZGV2aWNlIGluIGRldmljZSBsaXN0LiBOdWxsIG1lYW5zIG5vIG5leHQgZGV2aWNlICAqLworCXVuaW9uIHsKKwkJdm9pZCAJCQkJCQkJCSpyZXNlcnZlIDsKKwkJc3RydWN0IEhNVV9FTVVERVZfSU5GT19TVFJVQ1QJCSpuZXh0IDsgIC8vIE5vdCB1c2UgaW4gTlZSQU0gCisJfSB1IDsJCisJLyogdGhlIGxlbmd0aCBvZiBleHRyYSBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKwlrYWxfdWludDMyCQkJZXh0X2RldmluZm9fbGVuOworCS8qIHRoZSBwb2ludGVyIHRvIGV4dHJhIGRldmljZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworCWthbF9jaGFyCQkJZXh0X2RldmluZm9bSE1VX01BWF9FTVVERVZfRVhUSU5GT19TSVpFXTsKK31obXVfZW11ZGV2X2luZm87CisKKy8qKiAKKyAqIEBuYW1lOiBITVVfQ09ORl9TVFJVQ1RfU1RSVUNUCisgKiBAYnJpZWYgdGhlIGhtdSBzdHJ1Y3R1cmUgZm9yIEhNVSBtYWluIHN0cnVjdHVyZSBpbiBub3JtYWwgYm9vdGluZywgYW5kIHRoZSBjb25maWd1cmF0aW9uIGlzIGxvYWRlZCBmcm9tIE5WUkFNX0VGX0hNVV9DT05GSUdfTElELgorICovCit0eXBlZGVmIHN0cnVjdCBITVVfQ09ORl9TVFJVQ1RfU1RSVUNUCit7CQorCS8qIHRvdGFsIGRldmljZSBudW1iZXIgZGVmaW5lZCBjb25maWd1cmF0aW9uIGZpbGVzICovCisJa2FsX3VpbnQzMiAgICAJCWRldl9udW07CQorCS8qIHRoZSBsZW5ndGggb2YgZXh0cmEgaGlmIHNwZWNpZmljIGluZm9ybWF0aW9uKi8KKwlrYWxfdWludDMyCQkJZXh0X2hpZmluZm9fbGVuOworCS8qIHRoZSBwb2ludGVyIHRvIGV4dHJhIGhpZiBzcGVjaWZpYyBpbmZvcm1hdGlvbiovCisJa2FsX2NoYXIJCQlleHRfaGlmaW5mb1tITVVfTUFYX0hJRl9FWFRJTkZPX1NJWkVdOworCS8qIG51bWJlciBvZiBkZXZpY2UgaW5mbyBsaXN0IHRvIGludHJvZHVjZSB0aGUgZGV2aWNlIGluZm9ybWF0aW9uIG9mIHRoZSBjb25maWd1cmVkIGRldmljZXMqLworCWhtdV9lbXVkZXZfaW5mbyAJZGV2X2luZm9bSE1VX01BWF9FTVVERVZOVU1dOworfWhtdV9jb25mX3N0cnVjdDsKKworLyoqIAorICogQG5hbWU6IEhNVV9IRF9DT05GX1NUUlVDVF9TVFJVQ1QKKyAqIEBicmllZiB0aGUgaG11IHN0cnVjdHVyZSBmb3IgSE1VIG1haW4gc3RydWN0dXJlIGluIEhvc3QgRGV0ZWN0aW9uIGJvb3RpbmcsIGFuZCB0aGUgY29uZmlndXJhdGlvbiBpcyBsb2FkZWQgZnJvbSBOVlJBTV9FRl9ITVVfSERfQ09ORklHX0xJRC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSE1VX0hEX0NPTkZfU1RSVUNUX1NUUlVDVAorewkKKwlrYWxfdWludDMyICAgIAkJZGV2X251bTsJCisJa2FsX3VpbnQzMgkJCWV4dF9oaWZpbmZvX2xlbjsKKwlrYWxfY2hhcgkJCWV4dF9oaWZpbmZvW0hNVV9NQVhfSElGX0VYVElORk9fU0laRV07CisJaG11X2VtdWRldl9pbmZvIAlkZXZfaW5mb1tITVVfTUFYX0hEX0VNVURFVk5VTV07Cit9aG11X2hkX2NvbmZfc3RydWN0OworCisvKgorICogQGJyaWVmOiB1cHBlciBsYXllciBkZXZpY2UgbW9kdWxlIGV4Y2VwdGlvbiBtb2RlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIAorICogICAgICAgICBpdCBpcyB1c2VkIGZvciB0aGUgY2FzZSB0aGF0IGFuIGV4Y2VwdGlvbiBoYXBwZW5zIGJlZm9yZSBobXVfaW5pdCgpIGNvbXBsZXRlZAorICoKKyAqIEByZXR1cm4gS0FMX1RSVUUgaWYgY2FsbGVyIGlzIGFsbG93ZWQgdG8gcHJvY2VlZCB0aGUgZXhjZXB0aW9uIGZsb3cKKyAqICAgICAgICAgS0FMX0ZBTFNFIG90aGVyd2lzZQorICovCit0eXBlZGVmIGthbF9ib29sICgqdWxkcnZfZXhjZXB0X2luaXQpKGthbF91aW50MzIgZGV2X21hcHBpbmcsIGthbF91aW50MzIgZXh0X2RldmluZm9fbGVuLCBrYWxfY2hhciAqZXh0X2RldmluZm8pOworCisvKiogCisgKiBAbmFtZTogX0hNVV9VTERSVl9FWENFUFRfSU5JVEZVTkNfU1RSVUNUCisgKgorICogQGJyaWVmIHRoZSBzdHJ1Y3R1cmUgaXMgZm9yIHVwcGVyIGxheWVyIGRldmljZSBtb2R1bGUgdG8gcmVnaXN0ZXIgaXRzIAorICogICAgICAgIGV4Y2VwdGlvbiBtb2RlIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9ITVVfVUxEUlZfRVhDRVBUX0lOSVRGVU5DX1NUUlVDVCB7CisJa2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICBwb3J0X2lkOworCXVsZHJ2X2V4Y2VwdF9pbml0ICAgICAgICAgICAgICAgZXhjZXB0X2luaXRfZnVuYzsKK30gaG11X3VsZHJ2X2V4Y2VwdF9pbml0ZnVuYyA7CisKK3R5cGVkZWYga2FsX2ludDMyICgqdWxfZHJ2X2luaXQpKGthbF91aW50MzIgZGV2X21hcHBpbmcsIGthbF91aW50MzIgZXh0X2RldmluZm9fbGVuLCBrYWxfY2hhciAqIGV4dF9kZXZpbmZvKSA7CisKKy8qKiAKKyAqIEBuYW1lOiBfSE1VX0hJRkNPUkVfSU5JVEZVTkNfU1RSVUNUCisgKiBAYnJpZWYgdGhlIHN0cnVjdHVyZSBmb3IgSW5pdCBmdW5jdGlvbiBhbmQgaGlmIGVtdSBkZXZpY2UgdHlwZXMgcmVnaXN0cmF0aW9uIHRhYmxlCisgKi8KK3R5cGVkZWYgc3RydWN0IF9ITVVfVUxEUlZfSU5JVEZVTkNfU1RSVUNUIHsKKwlobXVFbXVEZXZpY2VUeXBlX2VudW0JCQlkZXZfdHlwZTsKKwl1bF9kcnZfaW5pdAkJCQlpbml0X2Z1bmM7Cit9IGhtdV91bGRydl9pbml0ZnVuYyA7CisKK3R5cGVkZWYga2FsX2ludDMyICgqaGlmX2NvcmVfaW5pdCkoa2FsX3VpbnQzMiBkZXZfbnVtLCBobXVfZW11ZGV2X2luZm8gKmVtdWRldl9pbmZvLCBrYWxfdWludDMyIGV4dF9oaWZpbmZvX2xlbiwga2FsX2NoYXIgKiBleHRfaGlmaW5mbykgOworCisvKiogCisgKiBAbmFtZTogX0hNVV9ISUZDT1JFX0lOSVRGVU5DX1NUUlVDVAorICogQGJyaWVmIHRoZSBzdHJ1Y3R1cmUgZm9yIEluaXQgZnVuY3Rpb24gYW5kIGhpZiBjb3JlIHR5cGVzIHJlZ2lzdHJhdGlvbiB0YWJsZQorICovCit0eXBlZGVmIHN0cnVjdCBfSE1VX0hJRkNPUkVfSU5JVEZVTkNfU1RSVUNUIHsKKwlobXVIaWZDb3JlVHlwZV9lbnVtCQkJaGlmY29yZV90eXBlOworCWhpZl9jb3JlX2luaXQJCQkJaW5pdF9mdW5jOworfSBobXVfaGlmY29yZV9pbml0ZnVuYyA7CisKKy8qKiAKKyAqIEBuYW1lOiBfSE1VX1RJQ0tfSU5URVJWQUxfU1RSVUNUCisgKiBAYnJpZWYgdGhlIHN0cnVjdHVyZSBmb3Igc2V0IGhpZiBldmVudCB0cmlnZ2VyIGludGVydmFsCisgKi8KK3R5cGVkZWYgc3RydWN0IF9ITVVfVElDS19JTlRFUlZBTF9TVFJVQ1QKK3sKKyAgICBrYWxfdWludDMyIGhpZl9ldmVudDsKKyAgICBrYWxfdWludDMyIGhpZl9ldmVudF90aWNrX2NvdW50OworICAgIGthbF91aW50MzIgaGlmX2N1cnJlbnRfdGljazsKK30gaG11X3RpY2tfaW50ZXJ2YWw7CisKKworLyoqIAorICogQG5hbWU6IERFQ0xBUkVfSE1VX1VMRFJWX0VYQ0VQVF9JTklUX0ZVTkMKKyAqIEBicmllZiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGVjbGFyZSB0aGUgdXBwZXIgbGF5ZXIgZGV2aWNlIG1vZHVsZSBleGNlcHRpb24gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIHdoaWNoIHdpbGwgYmUgbGlua2VkIGluIEhNVSByZWdpc3RyYXRpb24gdGFibGUKKyAqLworI2RlZmluZSBERUNMQVJFX0hNVV9VTERSVl9FWENFUFRfSU5JVF9GVU5DKF9mdW5jTmFtZSkgXAorCWV4dGVybiBrYWxfYm9vbCBfZnVuY05hbWUoa2FsX3VpbnQzMiBkZXZfbWFwcGluZywga2FsX3VpbnQzMiBleHRfZGV2aW5mb19sZW4sIGthbF9jaGFyICpleHRfZGV2aW5mbykgOworCisjZW5kaWYgLypfX0hNVV9EUlZfRlVOQ19IX18qLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9uY2NjaV9pZi5oIGIvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi9uY2NjaV9pZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2Mzk5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL25jY2NpX2lmLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIG5jY2NpX2lmLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVU1PTFlFCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgSGVhZGVyIGZpbGUgb2YgTkNDQ0kuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fTkNDQ0lfSUZfSF9fCisjZGVmaW5lIF9fTkNDQ0lfSUZfSF9fCisjaW5jbHVkZSAiY2NjaV9pZi5oIgorCisjZGVmaW5lIE5DQ0NJX0dFVF9UWF9DSChjaCkgbmNjY2lfZ2V0X3R4X2NoKGNoKQorI2RlZmluZSBOQ0NDSV9HRVRfUlhfQ0goY2gpIG5jY2NpX2dldF9yeF9jaChjaCkKKworI2RlZmluZSBDQ0NJX1BBWUxPQURfU0laRSAoQ0NDSV9NVFVfU0laRSAtIHNpemVvZihDQ0NJX0JVRkZfVCkpCisKK3R5cGVkZWYgdm9pZCAoKk5DQ0NJX0NBTExCQUNLKSgpOwordHlwZWRlZiB2b2lkICgqTkNDQ0lfQ0FMTEJBQ0tfV0lUSF9DT05URVhUKSh2b2lkKiB1c2VyX2NvbnRleHQpOworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBtb2R1bGVfdHlwZSBtb2R1bGVfaWQ7CisgICAgbXNnX3R5cGUgbXNnX2lkOworICAgIHNhcF90eXBlIHNhcDsKK30gTkNDQ0lfSUxNX1JFR0lTVFJBVElPTl9TVFJVQ1Q7CisKKy8vZGVmaW5lIE5DQ0NJIElPQ1RMIEVOVU0KK3R5cGVkZWYgZW51bXsKKyAgICBOQ0NDSV9JT0NUTF9OT05FID0gMCwKKyAgICBOQ0NDSV9JT0NUTF9TRVRfRExfTE9HLAorICAgIE5DQ0NJX0lPQ1RMX1NFVF9VTF9MT0csCisgICAgTkNDQ0lfSU9DVExfU0VUX0RMX0NBTExCQUNLLAorICAgIE5DQ0NJX0lPQ1RMX1NFVF9VTF9DQUxMQkFDSywKKyAgICBOQ0NDSV9JT0NUTF9TRVRfRExfQ0FMTEJBQ0tfV0lUSF9DT05URVhULAorICAgIE5DQ0NJX0lPQ1RMX1NFVF9VTF9DQUxMQkFDS19XSVRIX0NPTlRFWFQsCisgICAgTkNDQ0lfSU9DVExfU0VUX0RMX0RPTkVfSUxNLAorICAgIE5DQ0NJX0lPQ1RMX1NFVF9VTF9ET05FX0lMTSwKKyAgICBOQ0NDSV9JT0NUTF9TRVRfRkxBRywKK30gTkNDQ0lfSU9DVExfRU5VTTsKKwordHlwZWRlZiBlbnVteworICAgIE5DQ0NJX0lPQ1RMX0xPR19OT05FID0gMCwKKyAgICBOQ0NDSV9JT0NUTF9MT0dfMEIsCisgICAgTkNDQ0lfSU9DVExfTE9HX0NDQ0lfSERSX09OTFksCisgICAgTkNDQ0lfSU9DVExfTE9HXzE2QiwKKyAgICBOQ0NDSV9JT0NUTF9MT0dfMzJCLAorICAgIE5DQ0NJX0lPQ1RMX0xPR182NEIsCisgICAgTkNDQ0lfSU9DVExfTE9HX01BWCA9IE5DQ0NJX0lPQ1RMX0xPR182NEIsCit9IE5DQ0NJX0lPQ1RMX0xPR19FTlVNOworCit0eXBlZGVmIGVudW17CisgICAgTkNDQ0lfSU9DVExfTU9ERV9OT05FID0gMCwKKyAgICBOQ0NDSV9JT0NUTF9NT0RFX0JMT0NLSU5HLAorICAgIE5DQ0NJX0lPQ1RMX01PREVfTk9OQkxPQ0tJTkcsCisgICAgTkNDQ0lfSU9DVExfTU9ERV9NQVggPSBOQ0NDSV9JT0NUTF9NT0RFX05PTkJMT0NLSU5HLAorfSBOQ0NDSV9JT0NUTF9NT0RFX0VOVU07CisvL2RlZmluZSBOQ0NDSSBJT0NUTCBFTlVNCisKK2thbF9pbnQzMiBuY2NjaV9vcGVuKENDQ0lfQ0hBTk5FTF9UIGNoYW5uZWwpOwora2FsX2ludDMyIG5jY2NpX2lvY3RsKENDQ0lfQ0hBTk5FTF9UIGNoYW5uZWwsIE5DQ0NJX0lPQ1RMX0VOVU0gaW9jdGxfdHlwZSwgLi4uKTsKK2thbF9pbnQzMiBuY2NjaV93cml0ZShDQ0NJX0NIQU5ORUxfVCBjaGFubmVsLCB2b2lkICpidWZmLCBrYWxfaW50MzIgd3JpdGVfbGVuKTsKK3ZvaWQgY2NjaV93cml0ZV9kb25lKENDQ0lfQ0hBTk5FTF9UIGNoYW5uZWwsIGNjY2lfaW9fcmVxdWVzdF90KiBpb19yZXF1ZXN0KTsKK3ZvaWQgY2NjaV9yZWFkX2RvbmUoQ0NDSV9DSEFOTkVMX1QgY2hhbm5lbCwgY2NjaV9pb19yZXF1ZXN0X3QqIGlvX3JlcXVlc3QpOwora2FsX2ludDMyIG5jY2NpX3JlYWQoQ0NDSV9DSEFOTkVMX1QgY2hhbm5lbCwgdm9pZCAqYnVmZiwga2FsX2ludDMyIGJ1ZmZlcl9zaXplKTsKK2thbF9pbnQzMiBuY2NjaV9jbG9zZShDQ0NJX0NIQU5ORUxfVCBjaGFubmVsKTsKKworQ0NDSV9DSEFOTkVMX1QgbmNjY2lfZ2V0X3R4X2NoKENDQ0lfQ0hBTk5FTF9UIG5jY2NpX2NoKTsKK0NDQ0lfQ0hBTk5FTF9UIG5jY2NpX2dldF9yeF9jaChDQ0NJX0NIQU5ORUxfVCBuY2NjaV9jaCk7CisKK2thbF9ib29sIG5jY2NpX2NoZWNrX2NoYW5uZWxfZXhpc3QoQ0NDSV9DSEFOTkVMX1QgY2hhbm5lbCk7CisjZW5kaWYgIC8qIF9fTkNDQ0lfSUZfSF9fICovCisKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi91Ym1fZXhwb3J0LmggYi9tY3UvaW50ZXJmYWNlL3NlcnZpY2UvaGlmL3VibV9leHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQ5ZDliCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi91Ym1fZXhwb3J0LmgKQEAgLTAsMCArMSw2NiBAQAorI2lmbmRlZiAgX1VCTV9FWFBPUlRfSU5DCisjZGVmaW5lICBfVUJNX0VYUE9SVF9JTkMKKworI2luY2x1ZGUgInVibV90eXBlLmgiCisjaW5jbHVkZSAidXNiY19jdXN0b20uaCIKKworI2luY2x1ZGUgImxoaWZfaWYuaCIKKworI2lmbmRlZiBfX1VCTV9VVF9fCisjaW5jbHVkZSAiaGlmX2NvbW1vbi5oIgorI2luY2x1ZGUgImhpZnVzYl9xbXUuaCIKKyNlbmRpZgorCisvKiBJbml0ICovCit2b2lkIHVibV9pbml0KCk7CisKKy8qIEZIQiAqLwora2FsX3VpbnQ4IHVibV9zZXRfZmhiKGNvbnN0IHZvaWQqIGhlYWRlclBhdHRlcm4sIGthbF91aW50OCBzaXplLCBjb25zdCBjaGFyKiBoZWFkZXJOYW1lKTsKK2thbF9ib29sIHVibV91cGRhdGVfZmhiKGNvbnN0IHZvaWQqIGhlYWRlclBhdHRlcm4sIGthbF91aW50OCBzaXplLCBjb25zdCBjaGFyKiBoZWFkZXJOYW1lKTsKK2thbF9ib29sIHVibV9jbGVhbl9maGIoY29uc3QgY2hhciogaGVhZGVyTmFtZSk7CitrYWxfdWludDggdWJtX2dldF9maGJfdHlwZShjb25zdCBjaGFyKiBoZWFkZXJOYW1lKTsKKworLyogTkZIQiAqLwora2FsX3VpbnQ4KiB1Ym1fYWxsb2NhdGVfbmZoYihrYWxfdWludDggdHhRdWVObywga2FsX3VpbnQzMiBhbGxvY1NpemUpOwordm9pZCB1Ym1fcmVsZWFzZV9uZmhiKGthbF91aW50OCB0eFF1ZU5vLCB2b2lkKiBuZmhiQWRkciwga2FsX3VpbnQzMiByZWxTaXplKTsKKworLyogVlJCIGFkZHJlc3MgdmlydHVhbC9waHlzaWNhbCB0cmFuc2xhdGUgKi8KK3VibV92cmJfcGh5X2FkZHIgdWJtX2FkZHJfdmlyMnBoeV9hbmRfc2F2ZShrYWxfdWludDggdHhRdWVObywga2FsX3VpbnQzMiB2aXJBZGRyLCBrYWxfdWludDE2IHZpckxlbik7CitrYWxfdWludDMyIHVibV9hZGRyX3BoeTJ2aXJfYW5kX2RlbGV0ZShrYWxfdWludDggdHhRdWVObywga2FsX3VpbnQzMiBwaHlBZGRyKTsKKworLyogVlJCIHJlbGVhc2UgKi8KK3ZvaWQgdWJtX3ZyYl92aXJ0dWFsX2FkZHJfcmVsZWFzZSh2b2lkKiB2cmJWaXJBZGRyLCBrYWxfdWludDE2IHJlbExlbik7CisKKy8qIERSQiAqLwordm9pZCB1Ym1fZHJiX2luaXRfcHJvcGVydGllcygpOwora2FsX2Jvb2wgdWJtX2RyYl9xdWVzdF91bnVzZWQoa2FsX3VpbnQ4IHR4UXVlTm8sIGthbF91aW50MzIgYWxsb0NvdW50KTsKK2thbF9ib29sIHVibV9kcmJfc3VibWl0KGthbF91aW50OCB0eFF1ZU5vLCBrYWxfdWludDMyIHN1Ym1pdENvdW50KTsKK3ZvaWQgdWJtX2RyYl9yZXBheShrYWxfdWludDggdHhRdWVObyk7CitrYWxfYm9vbCB1Ym1fZHJiX3JlbGVhc2Uoa2FsX3VpbnQ4IHR4UXVlTm8sIGthbF91aW50MzIgaGVhZElkeCwga2FsX3VpbnQzMiByZWxDb3VudCk7CitrYWxfdWludDMyIHVibV9kcmJfcG9sbChrYWxfdWludDggdHhRdWVObywga2FsX3VpbnQzMiogaGVhZElkeCwga2FsX3VpbnQzMiogdGFpbElkeCk7CitrYWxfYm9vbCB1Ym1fZHJiX2dldF9vbmVfd3JpdGFibGVfSWR4KGthbF91aW50OCB0eFF1ZU5vLCBrYWxfdWludDMyKiB3cml0ZUlkeCk7CitrYWxfYm9vbCB1Ym1fZHJiX3JldmVydF9vbmVfd3JpdGUoa2FsX3VpbnQ4IHR4UXVlTm8pOwordXNicV9kbF9wZF9kcmIqIHVibV9kcmJfaWR4MmFkZHIoa2FsX3VpbnQ4IHR4UXVlTm8sIGthbF91aW50MzIgZHJiSW5kZXgpOwora2FsX3VpbnQzMiB1Ym1fZHJiX2FkZHIyaWR4KGthbF91aW50OCB0eFF1ZU5vLCB1c2JxX2RsX3BkX2RyYiogZHJiUHRyKTsKK2thbF9ib29sIHVibV9kcmJfZmx1c2goa2FsX3VpbnQ4IHR4UXVlTm8sIGthbF91aW50MzIqIGhlYWRJZHgsIGthbF91aW50MzIqIHRhaWxJZHgsIGthbF91aW50MzIqIG51bSk7CisKKy8qIFhJVCAqLwora2FsX2Jvb2wgdWJtX3hpdF9yZWxlYXNlKGthbF91aW50OCByeFF1ZU5vLCBrYWxfdWludDE2IGhlYWRJZHgsIGthbF91aW50MzIgcmVsQ291bnQpOwora2FsX3VpbnQzMiB1Ym1feGl0X3BvbGwoa2FsX3VpbnQ4IHJ4UXVlTm8sIGthbF91aW50MTYqIGhlYWRJZHgsIGthbF91aW50MTYqIHRhaWxJZHgsIGthbF91aW50MTYqIHJlbElkeCk7Cit1c2JxX3VsX3hpdCogdWJtX3hpdF9pZHgyYWRkcihrYWxfdWludDggcnhRdWVObywga2FsX3VpbnQzMiB4aXRJbmRleCk7CitrYWxfdWludDMyIHVibV94aXRfYWRkcjJpZHgoa2FsX3VpbnQ4IHJ4UXVlTm8sIHVzYnFfdWxfeGl0KiB4aXRQdHIpOwora2FsX3VpbnQzMiB1Ym1feGl0X2dldF9uZXh0X2lkeChrYWxfdWludDggcnhRdWVObywga2FsX3VpbnQzMiB4aXRJbmRleCk7CitrYWxfYm9vbCB1Ym1feGl0X2ZsdXNoKGthbF91aW50OCByeFF1ZU5vLCBrYWxfdWludDMyKiBoZWFkSWR4LCBrYWxfdWludDMyKiB0YWlsSWR4LCBrYWxfdWludDMyKiBudW0pOworCisvKiBVTCBNRVRBICovCitsaGlmX21ldGFfdGJsX3QqIHVibV91bF9tZXRhX2lkeDJhZGRyKGthbF91aW50OCByeFF1ZU5vLCBrYWxfdWludDE2IHhpdEluZGV4KTsKK2thbF91aW50MTYgdWJtX3VsX21ldGFfZ2V0X25leHRfaWR4KGthbF91aW50OCByeFF1ZU5vLCBrYWxfdWludDE2IHhpdEluZGV4KTsKK3ZvaWQgdWJtX3VsX21ldGFfaW5pdF9wcm9wZXJ0aWVzKCk7CitMSElGX05FVF9UWVBFIHVibV91bF9tZXRhX2dldF9saGlmX25ldF90eXBlKGthbF91aW50OCByeFF1ZU5vLCB1c2JfY2xhc3NfdHlwZV9lIGNsYXNzVHlwZSk7CitrYWxfYm9vbCB1Ym1fdWxfbWV0YV9lbnF1ZXVlX2xoaWZfdWxfcXVldWUoa2FsX3VpbnQ4IHJ4UXVlTm8sIExISUZfTkVUX1RZUEUgbGhpZk5ldFR5cGUsa2FsX3VpbnQ4IHVzYmNsYXNzRGV2SWQsIHZvaWQqIGRhdGFBZGRyLCBrYWxfdWludDE2IGRhdGFMZW4pOwora2FsX2Jvb2wgdWJtX3VsX21ldGFfZW5xdWV1ZV9saGlmX3VsX3F1ZXVlX2RpZChrYWxfdWludDggcnhRdWVObywgTEhJRl9ORVRfVFlQRSBsaGlmTmV0VHlwZSwga2FsX3VpbnQ4IHVzYmNsYXNzRGV2SWQsIExISUZfTkVUX0lGIG5ldF9pZiwgdm9pZCogZGlkKTsKK2xoaWZfbWV0YV90YmxfdCogdWJtX3VsX21ldGFfZ2V0X2Jhc2UoKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYgLyogX1VCTV9FWFBPUlRfSU5DICovCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvdWJtX3R5cGUuaCBiL21jdS9pbnRlcmZhY2Uvc2VydmljZS9oaWYvdWJtX3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDMyYmJjCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9zZXJ2aWNlL2hpZi91Ym1fdHlwZS5oCkBAIC0wLDAgKzEsNDkgQEAKKyNpZm5kZWYgIF9VQk1fVFlQRV9JTkMKKyNkZWZpbmUgIF9VQk1fVFlQRV9JTkMKKworI2RlZmluZSBVQk1fVlJCX1BIWV9BRERSX05VTSAgICA4CisKK3R5cGVkZWYgc3RydWN0IF91Ym1fdnJiX3BoeV9hZGRyIHsKKyAgICBrYWxfdWludDggc2VnTnVtOyAvLyBudW1iZXIgb2Ygc2VnbWVudGF0aW9uCisgICAga2FsX3VpbnQzMiBwaHlBZGRyW1VCTV9WUkJfUEhZX0FERFJfTlVNXTsKKyAgICBrYWxfdWludDE2IHBoeUxlbltVQk1fVlJCX1BIWV9BRERSX05VTV07Cit9IHVibV92cmJfcGh5X2FkZHI7CisKKyNpZmRlZiBfX1VCTV9VVF9fCit0eXBlZGVmIHN0cnVjdCBfdXNicV9kbF9wZF9kcmIgdXNicV9kbF9wZF9kcmI7CitzdHJ1Y3QgX3VzYnFfZGxfcGRfZHJiCit7CisJa2FsX3VpbnQ4CWRyYl9mbGFnOworCWthbF91aW50OAlwYWRkaW5nX2xlbmd0aDsKKwlrYWxfdWludDE2ICBkbF9kYXRhX2xlbmd0aDsKKwl2b2lkCQkqcF9kbF9kYXRhX2FkZHI7CQorfTsKKwordHlwZWRlZiBzdHJ1Y3QgX3VzYnFfZGxfdGRfZHJiIHVzYnFfZGxfdGRfZHJiOworc3RydWN0IF91c2JxX2RsX3RkX2RyYgoreworCWthbF91aW50OAlkcmJfZmxhZzsKKwlrYWxfdWludDgJcmVzZXJ2ZWQxOworCWthbF91aW50MTYgIGRsX3hmZXJfbGVuZ3RoOworCWthbF91aW50MzIJcmVzZXJ2ZWQyOwkKK307CisKK3R5cGVkZWYgc3RydWN0IF91c2JxX3VsX3hpdCAKK3sKKyAgICBrYWxfdWludDE2ICB1bF94ZmVyX2xlbmd0aDsKKyAgICBrYWxfdWludDE2ICByZXNlcnZlZDsKKyAgICB2b2lkICpwX3VsX3hmZXJfc3RhcnRfYWRkcjsKK30gdXNicV91bF94aXQ7CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdsb2JhbCB2YXJpYWJsZXMgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZiAvKiBfVUJNX1RZUEVfSU5DICovCisK