I2lmbmRlZiBGSUxURVJTX0gKI2RlZmluZSBGSUxURVJTX0gKCiNpbmNsdWRlIDxnbGliLmg+CgojaW5jbHVkZSAiZ3JhcGhpYy5oIgojaW5jbHVkZSAiZ29vbV9jb3JlLmgiCgojZGVmaW5lIE5PUk1BTF9NT0RFIDAKI2RlZmluZSBXQVZFX01PREUgMQojZGVmaW5lIENSWVNUQUxfQkFMTF9NT0RFIDIKI2RlZmluZSBTQ1JVTkNIX01PREUgMwojZGVmaW5lIEFNVUxFVFRFX01PREUgNAojZGVmaW5lIFdBVEVSX01PREUgNQoKc3RydWN0IFpvb21GaWx0ZXJEYXRhCnsKICBpbnQgdml0ZXNzZTsKICB1bnNpZ25lZCBjaGFyIHBlcnRlZGVjOwogIHVuc2lnbmVkIGNoYXIgc3FydHBlcnRlOwogIGludCBtaWRkbGVYOwogIGludCBtaWRkbGVZOwogIGNoYXIgcmV2ZXJzZTsKICBjaGFyIG1vZGU7CiAgICAgICAgLyoqIEBzaW5jZSBKdW5lIDIwMDEgKi8KICBpbnQgaFBsYW5lRWZmZWN0OwogIGludCB2UGxhbmVFZmZlY3Q7CiAgY2hhciBub2lzaWZ5OwoKICBndWludDMyIHJlc194OwogIGd1aW50MzIgcmVzX3k7CiAgZ3VpbnQzMiBidWZmc2l6ZTsKCiAgZ3VpbnQzMiAqYnVmZmVyOwogIGd1aW50MzIgKnBvczEwOwogIGd1aW50MzIgKmNbNF07CiAgaW50ICAgICAqZmlyZWRlYzsKCiAgaW50ICAgICB3YXZlOwogIGludCAgICAgd2F2ZXNwOwp9OwoKdm9pZCBwb2ludEZpbHRlcihHb29tRGF0YSAqZ29vbWRhdGEsIENvbG9yIGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHQxLCBmbG9hdCB0MiwgZmxvYXQgdDMsIGZsb2F0IHQ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIGN5Y2xlKTsKCi8qIGZpbHRyZSBkZSB6b29tIDoKIGxlIGNvbnRlbnUgZGUgcGl4MSBlc3QgY29waWUgZGFucyBwaXgyLCBhdmVjIGwnZWZmZXQgYXBwbGlxdekKIG1pZHggZXQgbWlkeSByZXByZXNlbnRlIGxlIGNlbnRyZSBkdSB6b29tCgp2b2lkIHpvb21GaWx0ZXIoVWludCAqcGl4MSwgVWludCAqcGl4MiwgVWludCBtaWRkbGVYLCBVaW50IG1pZGRsZVkpOwp2b2lkIHpvb21GaWx0ZXJSR0IoVWludCAqcGl4MSwKVWludCAqcGl4MiwKVWludCBtaWRkbGVYLApVaW50IG1pZGRsZVkpOwoqLwoKWm9vbUZpbHRlckRhdGEgKnpvb21GaWx0ZXJOZXcgKHZvaWQpOwp2b2lkIHpvb21GaWx0ZXJEZXN0cm95IChab29tRmlsdGVyRGF0YSAqemYpOwp2b2lkIHpvb21GaWx0ZXJGYXN0UkdCIChHb29tRGF0YSAqZ29vbWRhdGEsIFpvb21GaWx0ZXJEYXRhICp6ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHpmZF91cGRhdGUpOwoKLyogZmlsdHJlIHNpbiA6CiBsZSBjb250ZW51IGRlIHBpeDEgZXN0IGNvcGllIGRhbnMgcGl4MiwgYXZlYyBsJ2VmZmV0IGFwcGxpcXXpCiBjeWNsZSBlc3QgbGEgdmFyaWFibGUgZGUgdGVtcHMuCiBtb2RlIHZhdXQgU0lOX01VTCBvdSBTSU5fQURECiByYXRlIGVzdCBsZSBwb3VyY2VudGFnZSBkZSBsJ2VmZmV0IGFwcGxpcXXpCiBsZW5naHQgOiBsYSBsb25ndWV1ciBkJ29uZGUgKDEuLjEwKSBbNV0KIHNwZWVkIDogbGEgdml0ZXNzZSAoMS4uMTAwKSBbMTBdCiovCi8qCnZvaWQgc2luRmlsdGVyKFVpbnQgKnBpeDEsVWludCAqcGl4MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgVWludCBjeWNsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgVWludCBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50IHJhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgbGVuZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50IHNwZWVkKTsKKi8KCiNkZWZpbmUgU0lOX01VTCAxCiNkZWZpbmUgU0lOX0FERCAyCgojZW5kaWYK