ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UudHh0CmluZGV4IDZiNTc0MWUuLjMzZjc0MzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlLnR4dApAQCAtODYsNiArODYsNjIgQEAKICAgVGhlIGRlZmF1bHQgaXMgaW5maW5pdGUuICBOb3RlIHRoYXQgdGhlIHNpemUgb2YgcmVhZCByZXF1ZXN0cyBpcwogICBsaW1pdGVkIGFueXdheSB0byAzMiBwYWdlcyAod2hpY2ggaXMgMTI4a2J5dGUgb24gaTM4NikuCiAKK1N5c2ZzCit+fn5+fgorCitGVVNFIHNldHMgdXAgdGhlIGZvbGxvd2luZyBoaWVyYXJjaHkgaW4gc3lzZnM6CisKKyAgL3N5cy9mcy9mdXNlL2Nvbm5lY3Rpb25zL04vCisKK3doZXJlIE4gaXMgYW4gaW5jcmVhc2luZyBudW1iZXIgYWxsb2NhdGVkIHRvIGVhY2ggbmV3IGNvbm5lY3Rpb24uCisKK0ZvciBlYWNoIGNvbm5lY3Rpb24gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkOgorCisgJ3dhaXRpbmcnCisKKyAgVGhlIG51bWJlciBvZiByZXF1ZXN0cyB3aGljaCBhcmUgd2FpdGluZyB0byBiZSB0cmFuc2ZlcmVkIHRvCisgIHVzZXJzcGFjZSBvciBiZWluZyBwcm9jZXNzZWQgYnkgdGhlIGZpbGVzeXN0ZW0gZGFlbW9uLiAgSWYgdGhlcmUgaXMKKyAgbm8gZmlsZXN5c3RlbSBhY3Rpdml0eSBhbmQgJ3dhaXRpbmcnIGlzIG5vbi16ZXJvLCB0aGVuIHRoZQorICBmaWxlc3lzdGVtIGlzIGh1bmcgb3IgZGVhZGxvY2tlZC4KKworICdhYm9ydCcKKworICBXcml0aW5nIGFueXRoaW5nIGludG8gdGhpcyBmaWxlIHdpbGwgYWJvcnQgdGhlIGZpbGVzeXN0ZW0KKyAgY29ubmVjdGlvbi4gIFRoaXMgbWVhbnMgdGhhdCBhbGwgd2FpdGluZyByZXF1ZXN0cyB3aWxsIGJlIGFib3J0ZWQgYW4KKyAgZXJyb3IgcmV0dXJuZWQgZm9yIGFsbCBhYm9ydGVkIGFuZCBuZXcgcmVxdWVzdHMuCisKK09ubHkgYSBwcml2aWxlZ2VkIHVzZXIgbWF5IHJlYWQgb3Igd3JpdGUgdGhlc2UgYXR0cmlidXRlcy4KKworQWJvcnRpbmcgYSBmaWxlc3lzdGVtIGNvbm5lY3Rpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0l0IGlzIHBvc3NpYmxlIHRvIGdldCBpbnRvIGNlcnRhaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgZmlsZXN5c3RlbSBpcworbm90IHJlc3BvbmRpbmcuICBSZWFzb25zIGZvciB0aGlzIG1heSBiZToKKworICBhKSBCcm9rZW4gdXNlcnNwYWNlIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24KKworICBiKSBOZXR3b3JrIGNvbm5lY3Rpb24gZG93bgorCisgIGMpIEFjY2lkZW50YWwgZGVhZGxvY2sKKworICBkKSBNYWxpY2lvdXMgZGVhZGxvY2sKKworKEZvciBtb3JlIG9uIGMpIGFuZCBkKSBzZWUgbGF0ZXIgc2VjdGlvbnMpCisKK0luIGVpdGhlciBvZiB0aGVzZSBjYXNlcyBpdCBtYXkgYmUgdXNlZnVsIHRvIGFib3J0IHRoZSBjb25uZWN0aW9uIHRvCit0aGUgZmlsZXN5c3RlbS4gIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZG8gdGhpczoKKworICAtIEtpbGwgdGhlIGZpbGVzeXN0ZW0gZGFlbW9uLiAgV29ya3MgaW4gY2FzZSBvZiBhKSBhbmQgYikKKworICAtIEtpbGwgdGhlIGZpbGVzeXN0ZW0gZGFlbW9uIGFuZCBhbGwgdXNlcnMgb2YgdGhlIGZpbGVzeXN0ZW0uICBXb3JrcworICAgIGluIGFsbCBjYXNlcyBleGNlcHQgc29tZSBtYWxpY2lvdXMgZGVhZGxvY2tzCisKKyAgLSBVc2UgZm9yY2VkIHVtb3VudCAodW1vdW50IC1mKS4gIFdvcmtzIGluIGFsbCBjYXNlcyBidXQgb25seSBpZgorICAgIGZpbGVzeXN0ZW0gaXMgc3RpbGwgYXR0YWNoZWQgKGl0IGhhc24ndCBiZWVuIGxhenkgdW5tb3VudGVkKQorCisgIC0gQWJvcnQgZmlsZXN5c3RlbSB0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UuICBNb3N0IHBvd2VyZnVsCisgICAgbWV0aG9kLCBhbHdheXMgd29ya3MuCisKIEhvdyBkbyBub24tcHJpdmlsZWdlZCBtb3VudHMgd29yaz8KIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIApAQCAtMzEzLDMgKzM2OSwxMCBAQAogd2hlbiB0aGUgY29weSBpcyB0YWtpbmcgcGxhY2UsIGFuZCBpbnRlcnJ1cHRpb24gaXMgZGVsYXllZCB1bnRpbAogdGhpcyBmbGFnIGlzIHVuc2V0LgogCitTY2VuYXJpbyAzIC0gVHJpY2t5IGRlYWRsb2NrIHdpdGggYXN5bmNocm9ub3VzIHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc2FtZSBzaXR1YXRpb24gYXMgYWJvdmUsIGV4Y2VwdCB0aHJlYWQtMSB3aWxsIHdhaXQgb24gcGFnZSBsb2NrCithbmQgaGVuY2UgaXQgd2lsbCBiZSB1bmludGVycnVwdGlibGUgYXMgd2VsbC4gIFRoZSBzb2x1dGlvbiBpcyB0bworYWJvcnQgdGhlIGNvbm5lY3Rpb24gd2l0aCBmb3JjZWQgdW1vdW50IChpZiBtb3VudCBpcyBhdHRhY2hlZCkgb3IKK3Rocm91Z2ggdGhlIGFib3J0IGF0dHJpYnV0ZSBpbiBzeXNmcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCmluZGV4IDBiZjNkNWIuLmY2ZDBjZjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgpAQCAtNjgsMyArNjgsNCBAQAogdHVuZXI9NjcgLSBQaGlsaXBzIFREMTMxNiBIeWJyaWQgVHVuZXIKIHR1bmVyPTY4IC0gUGhpbGlwcyBUVVYxMjM2RCBBVFNDL05UU0MgZHVhbCBpbgogdHVuZXI9NjkgLSBUZW5hIFRORiA1MzM1IE1GCit0dW5lcj03MCAtIFNhbXN1bmcgVENQTiAyMTIxUDMwQQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA2NzMxNDhlLi5jM2E3MjcxIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMTA2LDEyICsxMDYsMTMgQEAKICQoaWYgJChLQlVJTERfT1VUUFVUKSwsIFwKICAgICAgJChlcnJvciBvdXRwdXQgZGlyZWN0b3J5ICIkKHNhdmVkLW91dHB1dCkiIGRvZXMgbm90IGV4aXN0KSkKIAotLlBIT05ZOiAkKE1BS0VDTURHT0FMUykKKy5QSE9OWTogJChNQUtFQ01ER09BTFMpIGNkYnVpbGRkaXIKKyQoTUFLRUNNREdPQUxTKSBfYWxsOiBjZGJ1aWxkZGlyCiAKLSQoZmlsdGVyLW91dCBfYWxsLCQoTUFLRUNNREdPQUxTKSkgX2FsbDoKK2NkYnVpbGRkaXI6CiAJJChpZiAkKEtCVUlMRF9WRVJCT1NFOjE9KSxAKSQoTUFLRSkgLUMgJChLQlVJTERfT1VUUFVUKSBcCiAJS0JVSUxEX1NSQz0kKENVUkRJUikgXAotCUtCVUlMRF9FWFRNT0Q9IiQoS0JVSUxEX0VYVE1PRCkiIC1mICQoQ1VSRElSKS9NYWtlZmlsZSAkQAorCUtCVUlMRF9FWFRNT0Q9IiQoS0JVSUxEX0VYVE1PRCkiIC1mICQoQ1VSRElSKS9NYWtlZmlsZSAkKE1BS0VDTURHT0FMUykKIAogIyBMZWF2ZSBwcm9jZXNzaW5nIHRvIGFib3ZlIGludm9jYXRpb24gb2YgbWFrZQogc2tpcC1tYWtlZmlsZSA6PSAxCkBAIC0yNjIsNiArMjYzLDEzIEBACiAjIGNjIHN1cHBvcnQgZnVuY3Rpb25zIHRvIGJlIHVzZWQgKG9ubHkpIGluIGFyY2gvJChBUkNIKS9NYWtlZmlsZQogIyBTZWUgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMudHh0CiAKKyMgYXMtb3B0aW9uCisjIFVzYWdlOiBjZmxhZ3MteSArPSAkKGNhbGwgYXMtb3B0aW9uLCAtV2EkKGNvbW1hKS1pc2E9Zm9vLCkKKworYXMtb3B0aW9uID0gJChzaGVsbCBpZiAkKENDKSAkKENGTEFHUykgJCgxKSAtV2EsLVogLWMgLW8gL2Rldi9udWxsIFwKKwkgICAgIC14YXNzZW1ibGVyIC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuIGVjaG8gIiQoMSkiOyBcCisJICAgICBlbHNlIGVjaG8gIiQoMikiOyBmaSA7KQorCiAjIGNjLW9wdGlvbgogIyBVc2FnZTogY2ZsYWdzLXkgKz0gJChjYWxsIGNjLW9wdGlvbiwgLW1hcmNoPXdpbmNoaXAtYzYsIC1tYXJjaD1pNTg2KQogCkBAIC0zMzcsOCArMzQ1LDkgQEAKIAogIyBSZWFkIEtFUk5FTFJFTEVBU0UgZnJvbSAua2VybmVscmVsZWFzZSAoaWYgaXQgZXhpc3RzKQogS0VSTkVMUkVMRUFTRSA9ICQoc2hlbGwgY2F0IC5rZXJuZWxyZWxlYXNlIDI+IC9kZXYvbnVsbCkKK0tFUk5FTFZFUlNJT04gPSAkKFZFUlNJT04pLiQoUEFUQ0hMRVZFTCkuJChTVUJMRVZFTCkkKEVYVFJBVkVSU0lPTikKIAotZXhwb3J0CVZFUlNJT04gUEFUQ0hMRVZFTCBTVUJMRVZFTCBLRVJORUxSRUxFQVNFIFwKK2V4cG9ydAlWRVJTSU9OIFBBVENITEVWRUwgU1VCTEVWRUwgS0VSTkVMUkVMRUFTRSBLRVJORUxWRVJTSU9OIFwKIAlBUkNIIENPTkZJR19TSEVMTCBIT1NUQ0MgSE9TVENGTEFHUyBDUk9TU19DT01QSUxFIEFTIExEIENDIFwKIAlDUFAgQVIgTk0gU1RSSVAgT0JKQ09QWSBPQkpEVU1QIE1BS0UgQVdLIEdFTktTWU1TIFBFUkwgVVRTX01BQ0hJTkUgXAogCUhPU1RDWFggSE9TVENYWEZMQUdTIExERkxBR1NfTU9EVUxFIENIRUNLIENIRUNLRkxBR1MKQEAgLTQzMyw2ICs0NDIsNyBAQAogY29uZmlnICVjb25maWc6IHNjcmlwdHNfYmFzaWMgb3V0cHV0bWFrZWZpbGUgRk9SQ0UKIAkkKFEpbWtkaXIgLXAgaW5jbHVkZS9saW51eAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPXNjcmlwdHMva2NvbmZpZyAkQAorCSQoUSkkKE1BS0UpIC5rZXJuZWxyZWxlYXNlCiAKIGVsc2UKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC01NDIsNyArNTUyLDcgQEAKICMgbWFrZWZpbGUgYnV0IHRoZSBhcmd1ZW1lbnQgY2FuIGJlIHBhc3NlZCB0byBtYWtlIGlmIG5lZWRlZC4KICMKIAotTU9ETElCCTo9ICQoSU5TVEFMTF9NT0RfUEFUSCkvbGliL21vZHVsZXMvJChLRVJORUxSRUxFQVNFKQorTU9ETElCCT0gJChJTlNUQUxMX01PRF9QQVRIKS9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpCiBleHBvcnQgTU9ETElCCiAKIApAQCAtNzgzLDEyICs3OTMsMTAgQEAKIGxvY2FsdmVyLWZ1bGwgPSAkKGxvY2FsdmVyKSQobG9jYWx2ZXItYXV0bykKIAogIyBTdG9yZSAobmV3KSBLRVJORUxSRUxBU0Ugc3RyaW5nIGluIC5rZXJuZWxyZWxlYXNlCi1rZXJuZWxyZWxlYXNlID0gXAotICAgICAgICQoVkVSU0lPTikuJChQQVRDSExFVkVMKS4kKFNVQkxFVkVMKSQoRVhUUkFWRVJTSU9OKSQobG9jYWx2ZXItZnVsbCkKK2tlcm5lbHJlbGVhc2UgPSAkKEtFUk5FTFZFUlNJT04pJChsb2NhbHZlci1mdWxsKQogLmtlcm5lbHJlbGVhc2U6IEZPUkNFCi0JJChRKXJtIC1mIC5rZXJuZWxyZWxlYXNlCi0JJChRKWVjaG8gJChrZXJuZWxyZWxlYXNlKSA+IC5rZXJuZWxyZWxlYXNlCi0JJChRKWVjaG8gIiAgQnVpbGRpbmcga2VybmVsICQoa2VybmVscmVsZWFzZSkiCisJJChRKXJtIC1mICRACisJJChRKWVjaG8gJChrZXJuZWxyZWxlYXNlKSA+ICRACiAKIAogIyBUaGluZ3Mgd2UgbmVlZCB0byBkbyBiZWZvcmUgd2UgcmVjdXJzaXZlbHkgc3RhcnQgYnVpbGRpbmcgdGhlIGtlcm5lbApAQCAtODk4LDcgKzkwNiw3IEBACiAJKQogZW5kZWYKIAotaW5jbHVkZS9saW51eC92ZXJzaW9uLmg6ICQoc3JjdHJlZSkvTWFrZWZpbGUgRk9SQ0UKK2luY2x1ZGUvbGludXgvdmVyc2lvbi5oOiAkKHNyY3RyZWUpL01ha2VmaWxlIC5jb25maWcgRk9SQ0UKIAkkKGNhbGwgZmlsZWNoayx2ZXJzaW9uLmgpCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzAxLDkgKzEzMDksMTAgQEAKIAkkKFBFUkwpICQoc3JjKS9zY3JpcHRzL2NoZWNrc3RhY2sucGwgJChBUkNIKQogCiBrZXJuZWxyZWxlYXNlOgotCUBlY2hvICQoS0VSTkVMUkVMRUFTRSkKKwkkKGlmICQod2lsZGNhcmQgLmtlcm5lbHJlbGVhc2UpLCAkKFEpZWNobyAkKEtFUk5FTFJFTEVBU0UpLCBcCisJJChlcnJvciBrZXJuZWxyZWxlYXNlIG5vdCB2YWxpZCAtIHJ1biAnbWFrZSAqY29uZmlnJyB0byB1cGRhdGUgaXQpKQoga2VybmVsdmVyc2lvbjoKLQlAZWNobyAkKFZFUlNJT04pLiQoUEFUQ0hMRVZFTCkuJChTVUJMRVZFTCkkKEVYVFJBVkVSU0lPTikKKwlAZWNobyAkKEtFUk5FTFZFUlNJT04pCiAKICMgRklYTUUgU2hvdWxkIGdvIGludG8gYSBtYWtlLmxpYiBvciBzb21ldGhpbmcgCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IGNkNWUyZWIuLjBkMzE4YWIgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNCArMSw0IEBACi0JTGludXgga2VybmVsIHJlbGVhc2UgMi42Lnh4CisJTGludXgga2VybmVsIHJlbGVhc2UgMi42Lnh4IDxodHRwOi8va2VybmVsLm9yZz4KIAogVGhlc2UgYXJlIHRoZSByZWxlYXNlIG5vdGVzIGZvciBMaW51eCB2ZXJzaW9uIDIuNi4gIFJlYWQgdGhlbSBjYXJlZnVsbHksCiBhcyB0aGV5IHRlbGwgeW91IHdoYXQgdGhpcyBpcyBhbGwgYWJvdXQsIGV4cGxhaW4gaG93IHRvIGluc3RhbGwgdGhlCkBAIC02LDIzICs2LDMxIEBACiAKIFdIQVQgSVMgTElOVVg/CiAKLSAgTGludXggaXMgYSBVbml4IGNsb25lIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIGJ5IExpbnVzIFRvcnZhbGRzIHdpdGgKLSAgYXNzaXN0YW5jZSBmcm9tIGEgbG9vc2VseS1rbml0IHRlYW0gb2YgaGFja2VycyBhY3Jvc3MgdGhlIE5ldC4KLSAgSXQgYWltcyB0b3dhcmRzIFBPU0lYIGNvbXBsaWFuY2UuIAorICBMaW51eCBpcyBhIGNsb25lIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIFVuaXgsIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIGJ5CisgIExpbnVzIFRvcnZhbGRzIHdpdGggYXNzaXN0YW5jZSBmcm9tIGEgbG9vc2VseS1rbml0IHRlYW0gb2YgaGFja2VycyBhY3Jvc3MKKyAgdGhlIE5ldC4gSXQgYWltcyB0b3dhcmRzIFBPU0lYIGFuZCBTaW5nbGUgVU5JWCBTcGVjaWZpY2F0aW9uIGNvbXBsaWFuY2UuCiAKLSAgSXQgaGFzIGFsbCB0aGUgZmVhdHVyZXMgeW91IHdvdWxkIGV4cGVjdCBpbiBhIG1vZGVybiBmdWxseS1mbGVkZ2VkCi0gIFVuaXgsIGluY2x1ZGluZyB0cnVlIG11bHRpdGFza2luZywgdmlydHVhbCBtZW1vcnksIHNoYXJlZCBsaWJyYXJpZXMsCi0gIGRlbWFuZCBsb2FkaW5nLCBzaGFyZWQgY29weS1vbi13cml0ZSBleGVjdXRhYmxlcywgcHJvcGVyIG1lbW9yeQotICBtYW5hZ2VtZW50IGFuZCBUQ1AvSVAgbmV0d29ya2luZy4gCisgIEl0IGhhcyBhbGwgdGhlIGZlYXR1cmVzIHlvdSB3b3VsZCBleHBlY3QgaW4gYSBtb2Rlcm4gZnVsbHktZmxlZGdlZCBVbml4LAorICBpbmNsdWRpbmcgdHJ1ZSBtdWx0aXRhc2tpbmcsIHZpcnR1YWwgbWVtb3J5LCBzaGFyZWQgbGlicmFyaWVzLCBkZW1hbmQKKyAgbG9hZGluZywgc2hhcmVkIGNvcHktb24td3JpdGUgZXhlY3V0YWJsZXMsIHByb3BlciBtZW1vcnkgbWFuYWdlbWVudCwKKyAgYW5kIG11bHRpc3RhY2sgbmV0d29ya2luZyBpbmNsdWRpbmcgSVB2NCBhbmQgSVB2Ni4KIAogICBJdCBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgLSBzZWUgdGhlCiAgIGFjY29tcGFueWluZyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscy4gCiAKIE9OIFdIQVQgSEFSRFdBUkUgRE9FUyBJVCBSVU4/CiAKLSAgTGludXggd2FzIGZpcnN0IGRldmVsb3BlZCBmb3IgMzg2LzQ4Ni1iYXNlZCBQQ3MuICBUaGVzZSBkYXlzIGl0IGFsc28KLSAgcnVucyBvbiBBUk1zLCBERUMgQWxwaGFzLCBTVU4gU3BhcmNzLCBNNjgwMDAgbWFjaGluZXMgKGxpa2UgQXRhcmkgYW5kCi0gIEFtaWdhKSwgTUlQUyBhbmQgUG93ZXJQQywgYW5kIG90aGVycy4KKyAgQWx0aG91Z2ggb3JpZ2luYWxseSBkZXZlbG9wZWQgZmlyc3QgZm9yIDMyLWJpdCB4ODYtYmFzZWQgUENzICgzODYgb3IgaGlnaGVyKSwKKyAgdG9kYXkgTGludXggYWxzbyBydW5zIG9uIChhdCBsZWFzdCkgdGhlIENvbXBhcSBBbHBoYSBBWFAsIFN1biBTUEFSQyBhbmQKKyAgVWx0cmFTUEFSQywgTW90b3JvbGEgNjgwMDAsIFBvd2VyUEMsIFBvd2VyUEM2NCwgQVJNLCBIaXRhY2hpIFN1cGVySCwKKyAgSUJNIFMvMzkwLCBNSVBTLCBIUCBQQS1SSVNDLCBJbnRlbCBJQS02NCwgREVDIFZBWCwgQU1EIHg4Ni02NCwgQVhJUyBDUklTLAorICBhbmQgUmVuZXNhcyBNMzJSIGFyY2hpdGVjdHVyZXMuCisKKyAgTGludXggaXMgZWFzaWx5IHBvcnRhYmxlIHRvIG1vc3QgZ2VuZXJhbC1wdXJwb3NlIDMyLSBvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcworICBhcyBsb25nIGFzIHRoZXkgaGF2ZSBhIHBhZ2VkIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQgKFBNTVUpIGFuZCBhIHBvcnQgb2YgdGhlCisgIEdOVSBDIGNvbXBpbGVyIChnY2MpIChwYXJ0IG9mIFRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiwgR0NDKS4gTGludXggaGFzCisgIGFsc28gYmVlbiBwb3J0ZWQgdG8gYSBudW1iZXIgb2YgYXJjaGl0ZWN0dXJlcyB3aXRob3V0IGEgUE1NVSwgYWx0aG91Z2gKKyAgZnVuY3Rpb25hbGl0eSBpcyB0aGVuIG9idmlvdXNseSBzb21ld2hhdCBsaW1pdGVkLgogCiBET0NVTUVOVEFUSU9OOgogCmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L2tlcm5lbC9pcnEuYyBiL2FyY2gvYXJtMjYva2VybmVsL2lycS5jCmluZGV4IGYzY2MxMDMuLjA5MzRlNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYva2VybmVsL2lycS5jCisrKyBiL2FyY2gvYXJtMjYva2VybmVsL2lycS5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAlpZiAoaSA8IE5SX0lSUVMpIHsKIAkgICAgCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKIAkJaWYgKCFhY3Rpb24pCi0JCQljb250aW51ZTsKKwkJCWdvdG8gb3V0OwogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICUxMHUgIiwgaSwga3N0YXRfaXJxcyhpKSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpIHsKQEAgLTE1Miw2ICsxNTIsNyBAQAogCQlzaG93X2ZpcV9saXN0KHAsIHYpOwogCQlzZXFfcHJpbnRmKHAsICJFcnI6ICUxMGx1XG4iLCBpcnFfZXJyX2NvdW50KTsKIAl9CitvdXQ6CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9hcm0yNi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggM2MzMzcxZC4uMjgyZTI0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0yNi9rZXJuZWwvcHRyYWNlLmMKQEAgLTUyNyw3ICs1MjcsNyBAQAogc3RhdGljIGludCBwdHJhY2Vfc2V0ZnByZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB2b2lkICp1ZnApCiB7CiAJc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKHRzayk7Ci0JcmV0dXJuIGNvcHlfZnJvbV91c2VyKCZ0YXNrX3RocmVhc19pbmZvKHRzayktPmZwc3RhdGUsIHVmcCwKKwlyZXR1cm4gY29weV9mcm9tX3VzZXIoJnRhc2tfdGhyZWFkX2luZm8odHNrKS0+ZnBzdGF0ZSwgdWZwLAogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB1c2VyX2ZwKSkgPyAtRUZBVUxUIDogMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L01ha2VmaWxlIGIvYXJjaC9pMzg2L01ha2VmaWxlCmluZGV4IGJkMmQ1M2EuLjM2YmVmNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9NYWtlZmlsZQorKysgYi9hcmNoL2kzODYvTWFrZWZpbGUKQEAgLTM3LDEwICszNyw3IEBACiAjIENQVS1zcGVjaWZpYyB0dW5pbmcuIEFueXRoaW5nIHdoaWNoIGNhbiBiZSBzaGFyZWQgd2l0aCBVTUwgc2hvdWxkIGdvIGhlcmUuCiBpbmNsdWRlICQoc3JjdHJlZSkvYXJjaC9pMzg2L01ha2VmaWxlLmNwdQogCi0jIC1tcmVncGFybT0zIHdvcmtzIG9rIG9uIGdjYy0zLjAgYW5kIGxhdGVyCi0jCi1jZmxhZ3MtJChDT05GSUdfUkVHUEFSTSkgKz0gJChzaGVsbCBpZiBbICQoY2FsbCBjYy12ZXJzaW9uKSAtZ2UgMDMwMCBdIDsgdGhlbiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiLW1yZWdwYXJtPTMiOyBmaSA7KQorY2ZsYWdzLSQoQ09ORklHX1JFR1BBUk0pICs9IC1tcmVncGFybT0zCiAKICMgRGlzYWJsZSB1bml0LWF0LWEtdGltZSBtb2RlIG9uIHByZS1nY2MtNC4wIGNvbXBpbGVycywgaXQgbWFrZXMgZ2NjIHVzZQogIyBhIGxvdCBtb3JlIHN0YWNrIGR1ZSB0byB0aGUgbGFjayBvZiBzaGFyaW5nIG9mIHN0YWNrbG90czoKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCAwZmJiZDRjLi5lMTFhMDkyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC05ODAsNyArOTgwLDcgQEAKIH0KIAogLyogcGVyIENQVSBpbml0IGVudHJ5IHBvaW50IHRvIHRoZSBkcml2ZXIgKi8KLXN0YXRpYyBpbnQgX19pbml0IHBvd2Vybm93azhfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2wpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBwb3dlcm5vd2s4X2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9sKQogewogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhOwogCWNwdW1hc2tfdCBvbGRtYXNrID0gQ1BVX01BU0tfQUxMOwpAQCAtMTE0MSw3ICsxMTQxLDcgQEAKIH07CiAKIC8qIGRyaXZlciBlbnRyeSBwb2ludCBmb3IgaW5pdCAqLwotc3RhdGljIGludCBfX2luaXQgcG93ZXJub3drOF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBwb3dlcm5vd2s4X2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgc3VwcG9ydGVkX2NwdXMgPSAwOwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vaW5pdC5jIGIvYXJjaC9pMzg2L21tL2luaXQuYwppbmRleCA3ZGY0OTRiLi4yNzAwZjAxIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbW0vaW5pdC5jCisrKyBiL2FyY2gvaTM4Ni9tbS9pbml0LmMKQEAgLTI2OCw3ICsyNjgsNyBAQAogCXBrbWFwX3BhZ2VfdGFibGUgPSBwdGU7CQogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgZnJlZV9uZXdfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgdm9pZCBfX21lbWluaXQgZnJlZV9uZXdfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CiAJX19mcmVlX3BhZ2UocGFnZSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IGJkODdjYjYuLjJlYTRiMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC02MjgsOSArNjI4LDExIEBACiAKICNpbmNsdWRlICJwZXJmbW9uX2l0YW5pdW0uaCIKICNpbmNsdWRlICJwZXJmbW9uX21ja2lubGV5LmgiCisjaW5jbHVkZSAicGVyZm1vbl9tb250ZWNpdG8uaCIKICNpbmNsdWRlICJwZXJmbW9uX2dlbmVyaWMuaCIKIAogc3RhdGljIHBtdV9jb25maWdfdCAqcG11X2NvbmZzW109eworCSZwbXVfY29uZl9tb250LAogCSZwbXVfY29uZl9tY2ssCiAJJnBtdV9jb25mX2l0YSwKIAkmcG11X2NvbmZfZ2VuLCAvKiBtdXN0IGJlIGxhc3QgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbl9tb250ZWNpdG8uaCBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbl9tb250ZWNpdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA2YWM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uX21vbnRlY2l0by5oCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBNb250ZWNpdG8gUE1VIHJlZ2lzdGVyIGRlc2NyaXB0aW9uIHRhYmxlcworICogYW5kIHBtYyBjaGVja2VyIHVzZWQgYnkgcGVyZm1vbi5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA2IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKiAgICAgICAgICAgICAgIENvbnRyaWJ1dGVkIGJ5IFN0ZXBoYW5lIEVyYW5pYW4gPGVyYW5pYW5AaHBsLmhwLmNvbT4KKyAqLworc3RhdGljIGludCBwZm1fbW9udF9wbWNfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBwZm1fY29udGV4dF90ICpjdHgsIHVuc2lnbmVkIGludCBjbnVtLCB1bnNpZ25lZCBsb25nICp2YWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2RlZmluZSBSREVQX01PTlRfRVRCCShSREVQKDM4KXxSREVQKDM5KXxSREVQKDQ4KXxSREVQKDQ5KXxSREVQKDUwKXxSREVQKDUxKXxSREVQKDUyKXxSREVQKDUzKXxSREVQKDU0KXxcCisJCQkgUkRFUCg1NSl8UkRFUCg1Nil8UkRFUCg1Nyl8UkRFUCg1OCl8UkRFUCg1OSl8UkRFUCg2MCl8UkRFUCg2MSl8UkRFUCg2Mil8UkRFUCg2MykpCisjZGVmaW5lIFJERVBfTU9OVF9ERUFSICAoUkRFUCgzMil8UkRFUCgzMyl8UkRFUCgzNikpCisjZGVmaW5lIFJERVBfTU9OVF9JRUFSICAoUkRFUCgzNCl8UkRFUCgzNSkpCisKK3N0YXRpYyBwZm1fcmVnX2Rlc2NfdCBwZm1fbW9udF9wbWNfZGVzY1tQTVVfTUFYX1BNQ1NdPXsKKy8qIHBtYzAgICovIHsgUEZNX1JFR19DT05UUk9MICwgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwgezAsMCwgMCwgMH0sIHswLDAsIDAsIDB9fSwKKy8qIHBtYzEgICovIHsgUEZNX1JFR19DT05UUk9MICwgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwgezAsMCwgMCwgMH0sIHswLDAsIDAsIDB9fSwKKy8qIHBtYzIgICovIHsgUEZNX1JFR19DT05UUk9MICwgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwgezAsMCwgMCwgMH0sIHswLDAsIDAsIDB9fSwKKy8qIHBtYzMgICovIHsgUEZNX1JFR19DT05UUk9MICwgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwgezAsMCwgMCwgMH0sIHswLDAsIDAsIDB9fSwKKy8qIHBtYzQgICovIHsgUEZNX1JFR19DT1VOVElORywgNiwgMHgyMDAwMDAwLCAweDdjN2ZmZjdmLCBOVUxMLCBwZm1fbW9udF9wbWNfY2hlY2ssIHtSREVQKDQpLDAsIDAsIDB9LCB7MCwwLCAwLCAwfX0sCisvKiBwbWM1ICAqLyB7IFBGTV9SRUdfQ09VTlRJTkcsIDYsIDB4MjAwMDAwMCwgMHg3YzdmZmY3ZiwgTlVMTCwgcGZtX21vbnRfcG1jX2NoZWNrLCB7UkRFUCg1KSwwLCAwLCAwfSwgezAsMCwgMCwgMH19LAorLyogcG1jNiAgKi8geyBQRk1fUkVHX0NPVU5USU5HLCA2LCAweDIwMDAwMDAsIDB4N2M3ZmZmN2YsIE5VTEwsIHBmbV9tb250X3BtY19jaGVjaywge1JERVAoNiksMCwgMCwgMH0sIHswLDAsIDAsIDB9fSwKKy8qIHBtYzcgICovIHsgUEZNX1JFR19DT1VOVElORywgNiwgMHgyMDAwMDAwLCAweDdjN2ZmZjdmLCBOVUxMLCBwZm1fbW9udF9wbWNfY2hlY2ssIHtSREVQKDcpLDAsIDAsIDB9LCB7MCwwLCAwLCAwfX0sCisvKiBwbWM4ICAqLyB7IFBGTV9SRUdfQ09VTlRJTkcsIDYsIDB4MjAwMDAwMCwgMHg3YzdmZmY3ZiwgTlVMTCwgcGZtX21vbnRfcG1jX2NoZWNrLCB7UkRFUCg4KSwwLCAwLCAwfSwgezAsMCwgMCwgMH19LAorLyogcG1jOSAgKi8geyBQRk1fUkVHX0NPVU5USU5HLCA2LCAweDIwMDAwMDAsIDB4N2M3ZmZmN2YsIE5VTEwsIHBmbV9tb250X3BtY19jaGVjaywge1JERVAoOSksMCwgMCwgMH0sIHswLDAsIDAsIDB9fSwKKy8qIHBtYzEwICovIHsgUEZNX1JFR19DT1VOVElORywgNiwgMHgyMDAwMDAwLCAweDdjN2ZmZjdmLCBOVUxMLCBwZm1fbW9udF9wbWNfY2hlY2ssIHtSREVQKDEwKSwwLCAwLCAwfSwgezAsMCwgMCwgMH19LAorLyogcG1jMTEgKi8geyBQRk1fUkVHX0NPVU5USU5HLCA2LCAweDIwMDAwMDAsIDB4N2M3ZmZmN2YsIE5VTEwsIHBmbV9tb250X3BtY19jaGVjaywge1JERVAoMTEpLDAsIDAsIDB9LCB7MCwwLCAwLCAwfX0sCisvKiBwbWMxMiAqLyB7IFBGTV9SRUdfQ09VTlRJTkcsIDYsIDB4MjAwMDAwMCwgMHg3YzdmZmY3ZiwgTlVMTCwgcGZtX21vbnRfcG1jX2NoZWNrLCB7UkRFUCgxMiksMCwgMCwgMH0sIHswLDAsIDAsIDB9fSwKKy8qIHBtYzEzICovIHsgUEZNX1JFR19DT1VOVElORywgNiwgMHgyMDAwMDAwLCAweDdjN2ZmZjdmLCBOVUxMLCBwZm1fbW9udF9wbWNfY2hlY2ssIHtSREVQKDEzKSwwLCAwLCAwfSwgezAsMCwgMCwgMH19LAorLyogcG1jMTQgKi8geyBQRk1fUkVHX0NPVU5USU5HLCA2LCAweDIwMDAwMDAsIDB4N2M3ZmZmN2YsIE5VTEwsIHBmbV9tb250X3BtY19jaGVjaywge1JERVAoMTQpLDAsIDAsIDB9LCB7MCwwLCAwLCAwfX0sCisvKiBwbWMxNSAqLyB7IFBGTV9SRUdfQ09VTlRJTkcsIDYsIDB4MjAwMDAwMCwgMHg3YzdmZmY3ZiwgTlVMTCwgcGZtX21vbnRfcG1jX2NoZWNrLCB7UkRFUCgxNSksMCwgMCwgMH0sIHswLDAsIDAsIDB9fSwKKy8qIHBtYzE2ICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1jMTcgKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWMxOCAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtYzE5ICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1jMjAgKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWMyMSAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtYzIyICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1jMjMgKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWMyNCAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtYzI1ICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1jMjYgKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWMyNyAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtYzI4ICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1jMjkgKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWMzMCAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtYzMxICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1jMzIgKi8geyBQRk1fUkVHX0NPTkZJRywgIDAsIDB4MzBmMDFmZmZmZmZmZmZmLCAweDMwZjAxZmZmZmZmZmZmZiwgTlVMTCwgcGZtX21vbnRfcG1jX2NoZWNrLCB7MCwwLCAwLCAwfSwgezAsMCwgMCwgMH19LAorLyogcG1jMzMgKi8geyBQRk1fUkVHX0NPTkZJRywgIDAsIDB4MCwgIDB4MWZmZmZmZmZmZmYsIE5VTEwsIHBmbV9tb250X3BtY19jaGVjaywgezAsMCwgMCwgMH0sIHswLDAsIDAsIDB9fSwKKy8qIHBtYzM0ICovIHsgUEZNX1JFR19DT05GSUcsICAwLCAweGYwMWZmZmZmZmZmZmYsIDB4ZjAxZmZmZmZmZmZmZiwgTlVMTCwgcGZtX21vbnRfcG1jX2NoZWNrLCB7MCwwLCAwLCAwfSwgezAsMCwgMCwgMH19LAorLyogcG1jMzUgKi8geyBQRk1fUkVHX0NPTkZJRywgIDAsIDB4MCwgIDB4MWZmZmZmZmZmZmYsIE5VTEwsIHBmbV9tb250X3BtY19jaGVjaywgezAsMCwgMCwgMH0sIHswLDAsIDAsIDB9fSwKKy8qIHBtYzM2ICovIHsgUEZNX1JFR19DT05GSUcsICAwLCAweGZmZmZmZmYwLCAweGYsIE5VTEwsIHBmbV9tb250X3BtY19jaGVjaywgezAsMCwgMCwgMH0sIHswLDAsIDAsIDB9fSwKKy8qIHBtYzM3ICovIHsgUEZNX1JFR19NT05JVE9SLCA0LCAweDAsIDB4M2ZmZiwgTlVMTCwgcGZtX21vbnRfcG1jX2NoZWNrLCB7UkRFUF9NT05UX0lFQVIsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorLyogcG1jMzggKi8geyBQRk1fUkVHX0NPTkZJRywgIDAsIDB4ZGI2LCAweDI0OTIsIE5VTEwsIHBmbV9tb250X3BtY19jaGVjaywgezAsMCwgMCwgMH0sIHswLDAsIDAsIDB9fSwKKy8qIHBtYzM5ICovIHsgUEZNX1JFR19NT05JVE9SLCA2LCAweDAsIDB4ZmZjZiwgTlVMTCwgcGZtX21vbnRfcG1jX2NoZWNrLCB7UkRFUF9NT05UX0VUQiwwLCAwLCAwfSwgezAsMCwgMCwgMH19LAorLyogcG1jNDAgKi8geyBQRk1fUkVHX01PTklUT1IsIDYsIDB4MjAwMDAwMCwgMHhmMDFjZiwgTlVMTCwgcGZtX21vbnRfcG1jX2NoZWNrLCB7UkRFUF9NT05UX0RFQVIsMCwgMCwgMH0sIHswLDAsIDAsIDB9fSwKKy8qIHBtYzQxICovIHsgUEZNX1JFR19DT05GSUcsICAwLCAweDAwMDAyMDc4ZmVmZWZlZmUsIDB4MWUwMDAxODE4MTgxOCwgTlVMTCwgcGZtX21vbnRfcG1jX2NoZWNrLCB7MCwwLCAwLCAwfSwgezAsMCwgMCwgMH19LAorLyogcG1jNDIgKi8geyBQRk1fUkVHX01PTklUT1IsIDYsIDB4MCwgMHg3ZmY0ZiwgTlVMTCwgcGZtX21vbnRfcG1jX2NoZWNrLCB7UkRFUF9NT05UX0VUQiwwLCAwLCAwfSwgezAsMCwgMCwgMH19LAorCSAgICB7IFBGTV9SRUdfRU5EICAgICwgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwgezAsfSwgezAsfX0sIC8qIGVuZCBtYXJrZXIgKi8KK307CisKK3N0YXRpYyBwZm1fcmVnX2Rlc2NfdCBwZm1fbW9udF9wbWRfZGVzY1tQTVVfTUFYX1BNRFNdPXsKKy8qIHBtZDAgICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LCAKKy8qIHBtZDEgICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1kMiAgKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWQzICAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtZDQgICovIHsgUEZNX1JFR19DT1VOVElORywgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwgezAsMCwgMCwgMH0sIHtSREVQKDQpLDAsIDAsIDB9fSwKKy8qIHBtZDUgICovIHsgUEZNX1JFR19DT1VOVElORywgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwgezAsMCwgMCwgMH0sIHtSREVQKDUpLDAsIDAsIDB9fSwKKy8qIHBtZDYgICovIHsgUEZNX1JFR19DT1VOVElORywgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwgezAsMCwgMCwgMH0sIHtSREVQKDYpLDAsIDAsIDB9fSwKKy8qIHBtZDcgICovIHsgUEZNX1JFR19DT1VOVElORywgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwgezAsMCwgMCwgMH0sIHtSREVQKDcpLDAsIDAsIDB9fSwKKy8qIHBtZDggICovIHsgUEZNX1JFR19DT1VOVElORywgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwgezAsMCwgMCwgMH0sIHtSREVQKDgpLDAsIDAsIDB9fSwgCisvKiBwbWQ5ICAqLyB7IFBGTV9SRUdfQ09VTlRJTkcsIDAsIDB4MCwgLTEsIE5VTEwsIE5VTEwsIHswLDAsIDAsIDB9LCB7UkRFUCg5KSwwLCAwLCAwfX0sCisvKiBwbWQxMCAqLyB7IFBGTV9SRUdfQ09VTlRJTkcsIDAsIDB4MCwgLTEsIE5VTEwsIE5VTEwsIHswLDAsIDAsIDB9LCB7UkRFUCgxMCksMCwgMCwgMH19LAorLyogcG1kMTEgKi8geyBQRk1fUkVHX0NPVU5USU5HLCAwLCAweDAsIC0xLCBOVUxMLCBOVUxMLCB7MCwwLCAwLCAwfSwge1JERVAoMTEpLDAsIDAsIDB9fSwKKy8qIHBtZDEyICovIHsgUEZNX1JFR19DT1VOVElORywgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwgezAsMCwgMCwgMH0sIHtSREVQKDEyKSwwLCAwLCAwfX0sCisvKiBwbWQxMyAqLyB7IFBGTV9SRUdfQ09VTlRJTkcsIDAsIDB4MCwgLTEsIE5VTEwsIE5VTEwsIHswLDAsIDAsIDB9LCB7UkRFUCgxMyksMCwgMCwgMH19LAorLyogcG1kMTQgKi8geyBQRk1fUkVHX0NPVU5USU5HLCAwLCAweDAsIC0xLCBOVUxMLCBOVUxMLCB7MCwwLCAwLCAwfSwge1JERVAoMTQpLDAsIDAsIDB9fSwKKy8qIHBtZDE1ICovIHsgUEZNX1JFR19DT1VOVElORywgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwgezAsMCwgMCwgMH0sIHtSREVQKDE1KSwwLCAwLCAwfX0sCisvKiBwbWQxNiAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtZDE3ICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1kMTggKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWQxOSAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtZDIwICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1kMjEgKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWQyMiAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtZDIzICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1kMjQgKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWQyNSAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtZDI2ICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1kMjcgKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWQyOCAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtZDI5ICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1kMzAgKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWQzMSAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtZDMyICovIHsgUEZNX1JFR19CVUZGRVIsIDAsIDB4MCwgLTEsIE5VTEwsIE5VTEwsIHtSREVQKDMzKXxSREVQKDM2KSwwLCAwLCAwfSwge1JERVAoNDApLDAsIDAsIDB9fSwKKy8qIHBtZDMzICovIHsgUEZNX1JFR19CVUZGRVIsIDAsIDB4MCwgLTEsIE5VTEwsIE5VTEwsIHtSREVQKDMyKXxSREVQKDM2KSwwLCAwLCAwfSwge1JERVAoNDApLDAsIDAsIDB9fSwKKy8qIHBtZDM0ICovIHsgUEZNX1JFR19CVUZGRVIsIDAsIDB4MCwgLTEsIE5VTEwsIE5VTEwsIHtSREVQKDM1KSwwLCAwLCAwfSwge1JERVAoMzcpLDAsIDAsIDB9fSwKKy8qIHBtZDM1ICovIHsgUEZNX1JFR19CVUZGRVIsIDAsIDB4MCwgLTEsIE5VTEwsIE5VTEwsIHtSREVQKDM0KSwwLCAwLCAwfSwge1JERVAoMzcpLDAsIDAsIDB9fSwKKy8qIHBtZDM2ICovIHsgUEZNX1JFR19CVUZGRVIsIDAsIDB4MCwgLTEsIE5VTEwsIE5VTEwsIHtSREVQKDMyKXxSREVQKDMzKSwwLCAwLCAwfSwge1JERVAoNDApLDAsIDAsIDB9fSwKKy8qIHBtZDM3ICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1kMzggKi8geyBQRk1fUkVHX0JVRkZFUiwgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwge1JERVBfTU9OVF9FVEIsMCwgMCwgMH0sIHtSREVQKDM5KSwwLCAwLCAwfX0sCisvKiBwbWQzOSAqLyB7IFBGTV9SRUdfQlVGRkVSLCAwLCAweDAsIC0xLCBOVUxMLCBOVUxMLCB7UkRFUF9NT05UX0VUQiwwLCAwLCAwfSwge1JERVAoMzkpLDAsIDAsIDB9fSwKKy8qIHBtZDQwICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1kNDEgKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWQ0MiAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtZDQzICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1kNDQgKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWQ0NSAqLyB7IFBGTV9SRUdfTk9USU1QTCwgfSwKKy8qIHBtZDQ2ICovIHsgUEZNX1JFR19OT1RJTVBMLCB9LAorLyogcG1kNDcgKi8geyBQRk1fUkVHX05PVElNUEwsIH0sCisvKiBwbWQ0OCAqLyB7IFBGTV9SRUdfQlVGRkVSLCAwLCAweDAsIC0xLCBOVUxMLCBOVUxMLCB7UkRFUF9NT05UX0VUQiwwLCAwLCAwfSwge1JERVAoMzkpLDAsIDAsIDB9fSwKKy8qIHBtZDQ5ICovIHsgUEZNX1JFR19CVUZGRVIsIDAsIDB4MCwgLTEsIE5VTEwsIE5VTEwsIHtSREVQX01PTlRfRVRCLDAsIDAsIDB9LCB7UkRFUCgzOSksMCwgMCwgMH19LAorLyogcG1kNTAgKi8geyBQRk1fUkVHX0JVRkZFUiwgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwge1JERVBfTU9OVF9FVEIsMCwgMCwgMH0sIHtSREVQKDM5KSwwLCAwLCAwfX0sCisvKiBwbWQ1MSAqLyB7IFBGTV9SRUdfQlVGRkVSLCAwLCAweDAsIC0xLCBOVUxMLCBOVUxMLCB7UkRFUF9NT05UX0VUQiwwLCAwLCAwfSwge1JERVAoMzkpLDAsIDAsIDB9fSwKKy8qIHBtZDUyICovIHsgUEZNX1JFR19CVUZGRVIsIDAsIDB4MCwgLTEsIE5VTEwsIE5VTEwsIHtSREVQX01PTlRfRVRCLDAsIDAsIDB9LCB7UkRFUCgzOSksMCwgMCwgMH19LAorLyogcG1kNTMgKi8geyBQRk1fUkVHX0JVRkZFUiwgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwge1JERVBfTU9OVF9FVEIsMCwgMCwgMH0sIHtSREVQKDM5KSwwLCAwLCAwfX0sCisvKiBwbWQ1NCAqLyB7IFBGTV9SRUdfQlVGRkVSLCAwLCAweDAsIC0xLCBOVUxMLCBOVUxMLCB7UkRFUF9NT05UX0VUQiwwLCAwLCAwfSwge1JERVAoMzkpLDAsIDAsIDB9fSwKKy8qIHBtZDU1ICovIHsgUEZNX1JFR19CVUZGRVIsIDAsIDB4MCwgLTEsIE5VTEwsIE5VTEwsIHtSREVQX01PTlRfRVRCLDAsIDAsIDB9LCB7UkRFUCgzOSksMCwgMCwgMH19LAorLyogcG1kNTYgKi8geyBQRk1fUkVHX0JVRkZFUiwgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwge1JERVBfTU9OVF9FVEIsMCwgMCwgMH0sIHtSREVQKDM5KSwwLCAwLCAwfX0sCisvKiBwbWQ1NyAqLyB7IFBGTV9SRUdfQlVGRkVSLCAwLCAweDAsIC0xLCBOVUxMLCBOVUxMLCB7UkRFUF9NT05UX0VUQiwwLCAwLCAwfSwge1JERVAoMzkpLDAsIDAsIDB9fSwKKy8qIHBtZDU4ICovIHsgUEZNX1JFR19CVUZGRVIsIDAsIDB4MCwgLTEsIE5VTEwsIE5VTEwsIHtSREVQX01PTlRfRVRCLDAsIDAsIDB9LCB7UkRFUCgzOSksMCwgMCwgMH19LAorLyogcG1kNTkgKi8geyBQRk1fUkVHX0JVRkZFUiwgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwge1JERVBfTU9OVF9FVEIsMCwgMCwgMH0sIHtSREVQKDM5KSwwLCAwLCAwfX0sCisvKiBwbWQ2MCAqLyB7IFBGTV9SRUdfQlVGRkVSLCAwLCAweDAsIC0xLCBOVUxMLCBOVUxMLCB7UkRFUF9NT05UX0VUQiwwLCAwLCAwfSwge1JERVAoMzkpLDAsIDAsIDB9fSwKKy8qIHBtZDYxICovIHsgUEZNX1JFR19CVUZGRVIsIDAsIDB4MCwgLTEsIE5VTEwsIE5VTEwsIHtSREVQX01PTlRfRVRCLDAsIDAsIDB9LCB7UkRFUCgzOSksMCwgMCwgMH19LAorLyogcG1kNjIgKi8geyBQRk1fUkVHX0JVRkZFUiwgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwge1JERVBfTU9OVF9FVEIsMCwgMCwgMH0sIHtSREVQKDM5KSwwLCAwLCAwfX0sCisvKiBwbWQ2MyAqLyB7IFBGTV9SRUdfQlVGRkVSLCAwLCAweDAsIC0xLCBOVUxMLCBOVUxMLCB7UkRFUF9NT05UX0VUQiwwLCAwLCAwfSwge1JERVAoMzkpLDAsIDAsIDB9fSwKKwkgICAgeyBQRk1fUkVHX0VORCAgICwgMCwgMHgwLCAtMSwgTlVMTCwgTlVMTCwgezAsfSwgezAsfX0sIC8qIGVuZCBtYXJrZXIgKi8KK307CisKKy8qCisgKiBQTUMgcmVzZXJ2ZWQgZmllbGRzIG11c3QgaGF2ZSB0aGVpciBwb3dlci11cCB2YWx1ZXMgcHJlc2VydmVkCisgKi8KK3N0YXRpYyBpbnQKK3BmbV9tb250X3Jlc2VydmVkKHVuc2lnbmVkIGludCBjbnVtLCB1bnNpZ25lZCBsb25nICp2YWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMiwgaXZhbCA9ICp2YWw7CisKKwkvKiByZW1vdmUgcmVzZXJ2ZWQgYXJlYXMgZnJvbSB1c2VyIHZhbHVlICovCisJdG1wMSA9IGl2YWwgJiBQTUNfUlNWRF9NQVNLKGNudW0pOworCisJLyogZ2V0IHJlc2VydmVkIGZpZWxkcyB2YWx1ZXMgKi8KKwl0bXAyID0gUE1DX0RGTF9WQUwoY251bSkgJiB+UE1DX1JTVkRfTUFTSyhjbnVtKTsKKworCSp2YWwgPSB0bXAxIHwgdG1wMjsKKworCURQUklOVCgoInBtY1slZF09MHglbHgsIG1hc2s9MHglbHgsIHJlc2V0PTB4JWx4LCB2YWw9MHglbHhcbiIsCisJCSAgY251bSwgaXZhbCwgUE1DX1JTVkRfTUFTSyhjbnVtKSwgUE1DX0RGTF9WQUwoY251bSksICp2YWwpKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHRhc2sgY2FuIGJlIE5VTEwgaWYgdGhlIGNvbnRleHQgaXMgdW5sb2FkZWQKKyAqLworc3RhdGljIGludAorcGZtX21vbnRfcG1jX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgcGZtX2NvbnRleHRfdCAqY3R4LCB1bnNpZ25lZCBpbnQgY251bSwgdW5zaWduZWQgbG9uZyAqdmFsLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHZhbDMyID0gMCwgdmFsMzggPSAwLCB2YWw0MSA9IDA7CisJdW5zaWduZWQgbG9uZyB0bXB2YWw7CisJaW50IGNoZWNrX2Nhc2UxID0gMDsKKwlpbnQgaXNfbG9hZGVkOworCisJLyogZmlyc3QgcHJlc2VydmUgdGhlIHJlc2VydmVkIGZpZWxkcyAqLworCXBmbV9tb250X3Jlc2VydmVkKGNudW0sIHZhbCwgcmVncyk7CisKKwl0bXB2YWwgPSAqdmFsOworCisJLyogc2FuaXR5IGNoZWNrICovCisJaWYgKGN0eCA9PSBOVUxMKSByZXR1cm4gLUVJTlZBTDsKKworCWlzX2xvYWRlZCA9IGN0eC0+Y3R4X3N0YXRlID09IFBGTV9DVFhfTE9BREVEIHx8IGN0eC0+Y3R4X3N0YXRlID09IFBGTV9DVFhfTUFTS0VEOworCisJLyoKKwkgKiB3ZSBtdXN0IGNsZWFyIHRoZSBkZWJ1ZyByZWdpc3RlcnMgaWYgcG1jNDEgaGFzIGEgdmFsdWUgd2hpY2ggZW5hYmxlCisJICogbWVtb3J5IHBpcGVsaW5lIGV2ZW50IGNvbnN0cmFpbnRzLiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBjbGVhciB0aGUKKwkgKiB0aGUgZGVidWcgcmVnaXN0ZXJzIGlmIHRoZXkgaGF2ZSBub3QgeWV0IGJlZW4gYWNjZXNzZWQuIFRoaXMgaXMgcmVxdWlyZWQKKwkgKiB0byBhdm9pZCBwaWNraW5nIHN0YWxlIHN0YXRlLgorCSAqIFBNQzQxIGlzICJhY3RpdmUiIGlmOgorCSAqIAlvbmUgb2YgdGhlIHBtYzQxLmNmZ19kdGFnWFggZmllbGQgaXMgZGlmZmVyZW50IGZyb20gMHgzCisJICogQU5ECisJICogCWF0IHRoZSBjb3JyZXNwb25kaW5nIHBtYzQxLmVuX2RicnBYWCBpcyBzZXQuCisJICogQU5ECisJICoJY3R4X2ZsX3VzaW5nX2RicmVnID09IDAgIChpLmUuLCBkYnIgbm90IHlldCB1c2VkKQorCSAqLworCURQUklOVCgoImNudW09JXUgdmFsPTB4JWx4LCB1c2luZ19kYnJlZz0lZCBsb2FkZWQ9JWRcbiIsIGNudW0sIHRtcHZhbCwgY3R4LT5jdHhfZmxfdXNpbmdfZGJyZWcsIGlzX2xvYWRlZCkpOworCisJaWYgKGNudW0gPT0gNDEgJiYgaXNfbG9hZGVkIAorCSAgICAmJiAodG1wdmFsICYgMHgxZTAwMDAwMDAwMDAwKSAmJiAodG1wdmFsICYgMHgxODE4MTgxOFVMKSAhPSAweDE4MTgxODE4VUwgJiYgY3R4LT5jdHhfZmxfdXNpbmdfZGJyZWcgPT0gMCkgeworCisJCURQUklOVCgoInBtY1slZF09MHglbHggaGFzIGFjdGl2ZSBwbWM0MSBzZXR0aW5ncywgY2xlYXJpbmcgZGJyXG4iLCBjbnVtLCB0bXB2YWwpKTsKKworCQkvKiBkb24ndCBtaXggZGVidWcgd2l0aCBwZXJmbW9uICovCisJCWlmICh0YXNrICYmICh0YXNrLT50aHJlYWQuZmxhZ3MgJiBJQTY0X1RIUkVBRF9EQkdfVkFMSUQpICE9IDApIHJldHVybiAtRUlOVkFMOworCisJCS8qCisJCSAqIGEgY291bnQgb2YgMCB3aWxsIG1hcmsgdGhlIGRlYnVnIHJlZ2lzdGVycyBpZjoKKwkJICogQU5ECisJCSAqLworCQlyZXQgPSBwZm1fd3JpdGVfaWJyX2RicihQRk1fREFUQV9SUiwgY3R4LCBOVUxMLCAwLCByZWdzKTsKKwkJaWYgKHJldCkgcmV0dXJuIHJldDsKKwl9CisJLyoKKwkgKiB3ZSBtdXN0IGNsZWFyIHRoZSAoaW5zdHJ1Y3Rpb24pIGRlYnVnIHJlZ2lzdGVycyBpZjoKKwkgKiAJcG1jMzguaWdfaWJycFggaXMgMCAoZW5hYmxlZCkKKwkgKiBBTkQKKwkgKgljdHhfZmxfdXNpbmdfZGJyZWcgPT0gMCAgKGkuZS4sIGRiciBub3QgeWV0IHVzZWQpCisJICovCisJaWYgKGNudW0gPT0gMzggJiYgaXNfbG9hZGVkICYmICgodG1wdmFsICYgMHg0OTJVTCkgIT0gMHg0OTJVTCkgJiYgY3R4LT5jdHhfZmxfdXNpbmdfZGJyZWcgPT0gMCkgeworCisJCURQUklOVCgoInBtYzM4PTB4JWx4IGhhcyBhY3RpdmUgcG1jMzggc2V0dGluZ3MsIGNsZWFyaW5nIGliclxuIiwgdG1wdmFsKSk7CisKKwkJLyogZG9uJ3QgbWl4IGRlYnVnIHdpdGggcGVyZm1vbiAqLworCQlpZiAodGFzayAmJiAodGFzay0+dGhyZWFkLmZsYWdzICYgSUE2NF9USFJFQURfREJHX1ZBTElEKSAhPSAwKSByZXR1cm4gLUVJTlZBTDsKKworCQkvKgorCQkgKiBhIGNvdW50IG9mIDAgd2lsbCBtYXJrIHRoZSBkZWJ1ZyByZWdpc3RlcnMgYXMgaW4gdXNlIGFuZCBhbHNvCisJCSAqIGVuc3VyZSB0aGF0IHRoZXkgYXJlIHByb3Blcmx5IGNsZWFyZWQuCisJCSAqLworCQlyZXQgPSBwZm1fd3JpdGVfaWJyX2RicihQRk1fQ09ERV9SUiwgY3R4LCBOVUxMLCAwLCByZWdzKTsKKwkJaWYgKHJldCkgcmV0dXJuIHJldDsKKworCX0KKwlzd2l0Y2goY251bSkgeworCQljYXNlICAzMjogdmFsMzIgPSAqdmFsOworCQkJICB2YWwzOCA9IGN0eC0+Y3R4X3BtY3NbMzhdOworCQkJICB2YWw0MSA9IGN0eC0+Y3R4X3BtY3NbNDFdOworCQkJICBjaGVja19jYXNlMSA9IDE7CisJCQkgIGJyZWFrOworCQljYXNlICAzODogdmFsMzggPSAqdmFsOworCQkJICB2YWwzMiA9IGN0eC0+Y3R4X3BtY3NbMzJdOworCQkJICB2YWw0MSA9IGN0eC0+Y3R4X3BtY3NbNDFdOworCQkJICBjaGVja19jYXNlMSA9IDE7CisJCQkgIGJyZWFrOworCQljYXNlICA0MTogdmFsNDEgPSAqdmFsOworCQkJICB2YWwzMiA9IGN0eC0+Y3R4X3BtY3NbMzJdOworCQkJICB2YWwzOCA9IGN0eC0+Y3R4X3BtY3NbMzhdOworCQkJICBjaGVja19jYXNlMSA9IDE7CisJCQkgIGJyZWFrOworCX0KKwkvKiBjaGVjayBpbGxlZ2FsIGNvbmZpZ3VyYXRpb24gd2hpY2ggY2FuIHByb2R1Y2UgaW5jb25zaXN0ZW5jaWVzIGluIHRhZ2dpbmcKKwkgKiBpLXNpZGUgZXZlbnRzIGluIEwxRCBhbmQgTDIgY2FjaGVzCisJICovCisJaWYgKGNoZWNrX2Nhc2UxKSB7CisJCXJldCA9ICAgKCgodmFsNDEgPj4gNDUpICYgMHhmKSA9PSAwICYmICgodmFsMzI+PjU3KSAmIDB4MSkgPT0gMCkKKwkJICAgICAmJiAoKCgodmFsMzg+PjEpICYgMHgzKSA9PSAweDIgfHwgKCh2YWwzOD4+MSkgJiAweDMpID09IDApCisJCSAgICAgfHwgICgoKHZhbDM4Pj40KSAmIDB4MykgPT0gMHgyIHx8ICgodmFsMzg+PjQpICYgMHgzKSA9PSAwKSk7CisJCWlmIChyZXQpIHsKKwkJCURQUklOVCgoImludmFsaWQgY29uZmlnIHBtYzM4PTB4JWx4IHBtYzQxPTB4JWx4IHBtYzMyPTB4JWx4XG4iLCB2YWwzOCwgdmFsNDEsIHZhbDMyKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwkqdmFsID0gdG1wdmFsOworCXJldHVybiAwOworfQorCisvKgorICogaW1wbF9wbWNzLCBpbXBsX3BtZHMgYXJlIGNvbXB1dGVkIGF0IHJ1bnRpbWUgdG8gbWluaW1pemUgZXJyb3JzIQorICovCitzdGF0aWMgcG11X2NvbmZpZ190IHBtdV9jb25mX21vbnQ9eworCS5wbXVfbmFtZSAgICAgICAgPSAiTW9udGVjaXRvIiwKKwkucG11X2ZhbWlseSAgICAgID0gMHgyMCwKKwkuZmxhZ3MgICAgICAgICAgID0gUEZNX1BNVV9JUlFfUkVTRU5ELAorCS5vdmZsX3ZhbCAgICAgICAgPSAoMVVMIDw8IDQ3KSAtIDEsCisJLnBtZF9kZXNjICAgICAgICA9IHBmbV9tb250X3BtZF9kZXNjLAorCS5wbWNfZGVzYyAgICAgICAgPSBwZm1fbW9udF9wbWNfZGVzYywKKwkubnVtX2licnMgICAgICAgID0gOCwKKwkubnVtX2RicnMgICAgICAgID0gOCwKKwkudXNlX3JyX2RicmVncyAgID0gMSAvKiBkZWJ1ZyByZWdpc3RlciBhcmUgdXNlIGZvciByYW5nZSByZXRyaWN0aW9ucyAqLworfTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCmluZGV4IGUzMjE1YmEuLmIzOGI2ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtNjM1LDMgKzYzNSwzOSBAQAogCWlhMzJfbWVtX2luaXQoKTsKICNlbmRpZgogfQorCisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCit2b2lkIG9ubGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOworCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOworCV9fZnJlZV9wYWdlKHBhZ2UpOworCXRvdGFscmFtX3BhZ2VzKys7CisJbnVtX3BoeXNwYWdlcysrOworfQorCitpbnQgYWRkX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQoreworCXBnX2RhdGFfdCAqcGdkYXQ7CisJc3RydWN0IHpvbmUgKnpvbmU7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBzaXplID4+IFBBR0VfU0hJRlQ7CisJaW50IHJldDsKKworCXBnZGF0ID0gTk9ERV9EQVRBKDApOworCisJem9uZSA9IHBnZGF0LT5ub2RlX3pvbmVzICsgWk9ORV9OT1JNQUw7CisJcmV0ID0gX19hZGRfcGFnZXMoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7CisKKwlpZiAocmV0KQorCQlwcmludGsoIiVzOiBQcm9ibGVtIGVuY291bnRlcmVkIGluIF9fYWRkX3BhZ2VzKCkgYXMgcmV0PSVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCAgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9wY2kvcGNpLmMgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCmluZGV4IDMwZGJjOTguLmQyN2VjZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9wY2kvcGNpLmMKKysrIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwpAQCAtNDU0LDE0ICs0NTQsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaWJpb3NfZml4dXBfZGV2aWNlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgX19kZXZpbml0CitwY2liaW9zX2ZpeHVwX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgc3RhcnQsIGludCBsaW1pdCkKIHsKIAlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gcmVnaW9uOwogCWludCBpOwotCWludCBsaW1pdCA9IChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9OT1JNQUwpID8gXAotCQlQQ0lfQlJJREdFX1JFU09VUkNFUyA6IFBDSV9OVU1fUkVTT1VSQ0VTOwogCi0JZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKKwlmb3IgKGkgPSBzdGFydDsgaSA8IGxpbWl0OyBpKyspIHsKIAkJaWYgKCFkZXYtPnJlc291cmNlW2ldLmZsYWdzKQogCQkJY29udGludWU7CiAJCXJlZ2lvbi5zdGFydCA9IGRldi0+cmVzb3VyY2VbaV0uc3RhcnQ7CkBAIC00NzIsNiArNDcxLDE2IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpYmlvc19maXh1cF9kZXZpY2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcGNpYmlvc19maXh1cF9yZXNvdXJjZXMoZGV2LCAwLCBQQ0lfQlJJREdFX1JFU09VUkNFUyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2liaW9zX2ZpeHVwX2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlwY2liaW9zX2ZpeHVwX3Jlc291cmNlcyhkZXYsIFBDSV9CUklER0VfUkVTT1VSQ0VTLCBQQ0lfTlVNX1JFU09VUkNFUyk7Cit9CisKIC8qCiAgKiAgQ2FsbGVkIGFmdGVyIGVhY2ggYnVzIGlzIHByb2JlZCwgYnV0IGJlZm9yZSBpdHMgY2hpbGRyZW4gYXJlIGV4YW1pbmVkLgogICovCkBAIC00ODIsNyArNDkxLDcgQEAKIAogCWlmIChiLT5zZWxmKSB7CiAJCXBjaV9yZWFkX2JyaWRnZV9iYXNlcyhiKTsKLQkJcGNpYmlvc19maXh1cF9kZXZpY2VfcmVzb3VyY2VzKGItPnNlbGYpOworCQlwY2liaW9zX2ZpeHVwX2JyaWRnZV9yZXNvdXJjZXMoYi0+c2VsZik7CiAJfQogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYi0+ZGV2aWNlcywgYnVzX2xpc3QpCiAJCXBjaWJpb3NfZml4dXBfZGV2aWNlX3Jlc291cmNlcyhkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2luY2x1ZGUveHRhbGsvaHViZGV2LmggYi9hcmNoL2lhNjQvc24vaW5jbHVkZS94dGFsay9odWJkZXYuaAppbmRleCA0ZDQxN2MzLi43Yzg4ZTlhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vaW5jbHVkZS94dGFsay9odWJkZXYuaAorKysgYi9hcmNoL2lhNjQvc24vaW5jbHVkZS94dGFsay9odWJkZXYuaApAQCAtNDAsOCArNDAsOCBAQAogCXVuc2lnbmVkIGxvbmcgc2ZkbF9mb3JjZV9pbnRfYWRkcjsKIAl1bnNpZ25lZCBsb25nIHNmZGxfZmx1c2hfdmFsdWU7CiAJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqc2ZkbF9mbHVzaF9hZGRyOwotCXVpbnQzMl90IHNmZGxfcGVyc2lzdGVudF9idXNudW07Ci0JdWludDMyX3Qgc2ZkbF9wZXJzaXN0ZW50X3NlZ21lbnQ7CisJdTMyIHNmZGxfcGVyc2lzdGVudF9idXNudW07CisJdTMyIHNmZGxfcGVyc2lzdGVudF9zZWdtZW50OwogCXN0cnVjdCBwY2lidXNfaW5mbyAqc2ZkbF9wY2lidXNfaW5mbzsKIH07CiAKQEAgLTU2LDcgKzU2LDcgQEAKICAqLwogc3RydWN0IHNuX2ZsdXNoX25hc2lkX2VudHJ5ICB7CiAJc3RydWN0IHNuX2ZsdXNoX2RldmljZV9rZXJuZWwgKip3aWRnZXRfcDsgLy8gVXNlZCBhcyBhbiBhcnJheSBvZiB3aWRfbnVtCi0JdWludDY0X3QgaWlvX2l0dGVbOF07CisJdTY0IGlpb19pdHRlWzhdOwogfTsKIAogc3RydWN0IGh1YmRldl9pbmZvIHsKQEAgLTcwLDggKzcwLDggQEAKIAogCXZvaWQJCQkJKmhkaV9ub2RlcGRhOwogCXZvaWQJCQkJKmhkaV9ub2RlX3ZlcnRleDsKLQl1aW50MzJfdAkJCW1heF9zZWdtZW50X251bWJlcjsKLQl1aW50MzJfdAkJCW1heF9wY2lidXNfbnVtYmVyOworCXUzMgkJCQltYXhfc2VnbWVudF9udW1iZXI7CisJdTMyCQkJCW1heF9wY2lidXNfbnVtYmVyOwogfTsKIAogZXh0ZXJuIHZvaWQgaHViZGV2X2luaXRfbm9kZShub2RlcGRhX3QgKiwgY25vZGVpZF90KTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9pbmNsdWRlL3h0YWxrL3hib3cuaCBiL2FyY2gvaWE2NC9zbi9pbmNsdWRlL3h0YWxrL3hib3cuaAppbmRleCBlYzU2YjM0Li45MGYzN2E0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vaW5jbHVkZS94dGFsay94Ym93LmgKKysrIGIvYXJjaC9pYTY0L3NuL2luY2x1ZGUveHRhbGsveGJvdy5oCkBAIC0zLDcgKzMsOCBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTItMTk5NywyMDAwLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAxOTkyLTE5OTcsMjAwMC0yMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cworICogUmVzZXJ2ZWQuCiAgKi8KICNpZm5kZWYgX0FTTV9JQTY0X1NOX1hUQUxLX1hCT1dfSAogI2RlZmluZSBfQVNNX0lBNjRfU05fWFRBTEtfWEJPV19ICkBAIC0yMSw5NCArMjIsOTQgQEAKIAogLyogUmVnaXN0ZXIgc2V0IGZvciBlYWNoIHhib3cgbGluayAqLwogdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgeGJfbGlua3JlZ3NfcyB7Ci0vKiAKKy8qCiAgKiB3ZSBhY2Nlc3MgdGhlc2UgdGhyb3VnaCBzeW5lcmd5IHVuc3dpenpsZWQgc3BhY2UsIHNvIHRoZSBhZGRyZXNzCiAgKiBnZXRzIHR3aWRkbGVkIChpLmUuIHJlZmVyZW5jZXMgdG8gMHg0IGFjdHVhbGx5IGdvIHRvIDB4MCBhbmQgdnYuKQogICogVGhhdCdzIHdoeSB3ZSBwdXQgdGhlIHJlZ2lzdGVyIGZpcnN0IGFuZCBmaWxsZXIgc2Vjb25kLgogICovCi0gICAgdWludDMyX3QgICAgICAgICAgICAgICBsaW5rX2liZjsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIGZpbGxlcjA7CS8qIGZpbGxlciBmb3IgcHJvcGVyIGFsaWdubWVudCAqLwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgbGlua19jb250cm9sOwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgZmlsbGVyMTsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIGxpbmtfc3RhdHVzOwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgZmlsbGVyMjsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIGxpbmtfYXJiX3VwcGVyOwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgZmlsbGVyMzsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIGxpbmtfYXJiX2xvd2VyOwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgZmlsbGVyNDsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIGxpbmtfc3RhdHVzX2NscjsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIGZpbGxlcjU7Ci0gICAgdWludDMyX3QgICAgICAgICAgICAgICBsaW5rX3Jlc2V0OwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgZmlsbGVyNjsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIGxpbmtfYXV4X3N0YXR1czsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIGZpbGxlcjc7CisJdTMyIGxpbmtfaWJmOworCXUzMiBmaWxsZXIwOwkvKiBmaWxsZXIgZm9yIHByb3BlciBhbGlnbm1lbnQgKi8KKwl1MzIgbGlua19jb250cm9sOworCXUzMiBmaWxsZXIxOworCXUzMiBsaW5rX3N0YXR1czsKKwl1MzIgZmlsbGVyMjsKKwl1MzIgbGlua19hcmJfdXBwZXI7CisJdTMyIGZpbGxlcjM7CisJdTMyIGxpbmtfYXJiX2xvd2VyOworCXUzMiBmaWxsZXI0OworCXUzMiBsaW5rX3N0YXR1c19jbHI7CisJdTMyIGZpbGxlcjU7CisJdTMyIGxpbmtfcmVzZXQ7CisJdTMyIGZpbGxlcjY7CisJdTMyIGxpbmtfYXV4X3N0YXR1czsKKwl1MzIgZmlsbGVyNzsKIH0geGJfbGlua3JlZ3NfdDsKIAogdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgeGJvd19zIHsKLSAgICAvKiBzdGFuZGFyZCB3aWRnZXQgY29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAtMHgwMDAwNTcgKi8KLSAgICBzdHJ1Y3Qgd2lkZ2V0X2NmZyAgICAgICAgICAgIHhiX3dpZGdldDsgIC8qIDB4MDAwMDAwICovCisJLyogc3RhbmRhcmQgd2lkZ2V0IGNvbmZpZ3VyYXRpb24gMHgwMDAwMDAtMHgwMDAwNTcgKi8KKwlzdHJ1Y3Qgd2lkZ2V0X2NmZyB4Yl93aWRnZXQ7ICAvKiAweDAwMDAwMCAqLwogCi0gICAgLyogaGVscGVyIGZpZWxkbmFtZXMgZm9yIGFjY2Vzc2luZyBicmlkZ2Ugd2lkZ2V0ICovCisJLyogaGVscGVyIGZpZWxkbmFtZXMgZm9yIGFjY2Vzc2luZyBicmlkZ2Ugd2lkZ2V0ICovCiAKLSNkZWZpbmUgeGJfd2lkX2lkICAgICAgICAgICAgICAgICAgICAgICB4Yl93aWRnZXQud19pZAotI2RlZmluZSB4Yl93aWRfc3RhdCAgICAgICAgICAgICAgICAgICAgIHhiX3dpZGdldC53X3N0YXR1cwotI2RlZmluZSB4Yl93aWRfZXJyX3VwcGVyICAgICAgICAgICAgICAgIHhiX3dpZGdldC53X2Vycl91cHBlcl9hZGRyCi0jZGVmaW5lIHhiX3dpZF9lcnJfbG93ZXIgICAgICAgICAgICAgICAgeGJfd2lkZ2V0LndfZXJyX2xvd2VyX2FkZHIKLSNkZWZpbmUgeGJfd2lkX2NvbnRyb2wgICAgICAgICAgICAgICAgICB4Yl93aWRnZXQud19jb250cm9sCi0jZGVmaW5lIHhiX3dpZF9yZXFfdGltZW91dCAgICAgICAgICAgICAgeGJfd2lkZ2V0LndfcmVxX3RpbWVvdXQKLSNkZWZpbmUgeGJfd2lkX2ludF91cHBlciAgICAgICAgICAgICAgICB4Yl93aWRnZXQud19pbnRkZXN0X3VwcGVyX2FkZHIKLSNkZWZpbmUgeGJfd2lkX2ludF9sb3dlciAgICAgICAgICAgICAgICB4Yl93aWRnZXQud19pbnRkZXN0X2xvd2VyX2FkZHIKLSNkZWZpbmUgeGJfd2lkX2Vycl9jbWR3b3JkICAgICAgICAgICAgICB4Yl93aWRnZXQud19lcnJfY21kX3dvcmQKLSNkZWZpbmUgeGJfd2lkX2xscCAgICAgICAgICAgICAgICAgICAgICB4Yl93aWRnZXQud19sbHBfY2ZnCi0jZGVmaW5lIHhiX3dpZF9zdGF0X2NsciAgICAgICAgICAgICAgICAgeGJfd2lkZ2V0LndfdGZsdXNoCisjZGVmaW5lIHhiX3dpZF9pZCAJCXhiX3dpZGdldC53X2lkCisjZGVmaW5lIHhiX3dpZF9zdGF0IAkJeGJfd2lkZ2V0Lndfc3RhdHVzCisjZGVmaW5lIHhiX3dpZF9lcnJfdXBwZXIgCXhiX3dpZGdldC53X2Vycl91cHBlcl9hZGRyCisjZGVmaW5lIHhiX3dpZF9lcnJfbG93ZXIgCXhiX3dpZGdldC53X2Vycl9sb3dlcl9hZGRyCisjZGVmaW5lIHhiX3dpZF9jb250cm9sCQl4Yl93aWRnZXQud19jb250cm9sCisjZGVmaW5lIHhiX3dpZF9yZXFfdGltZW91dCAJeGJfd2lkZ2V0LndfcmVxX3RpbWVvdXQKKyNkZWZpbmUgeGJfd2lkX2ludF91cHBlciAJeGJfd2lkZ2V0LndfaW50ZGVzdF91cHBlcl9hZGRyCisjZGVmaW5lIHhiX3dpZF9pbnRfbG93ZXIgCXhiX3dpZGdldC53X2ludGRlc3RfbG93ZXJfYWRkcgorI2RlZmluZSB4Yl93aWRfZXJyX2NtZHdvcmQgCXhiX3dpZGdldC53X2Vycl9jbWRfd29yZAorI2RlZmluZSB4Yl93aWRfbGxwIAkJeGJfd2lkZ2V0LndfbGxwX2NmZworI2RlZmluZSB4Yl93aWRfc3RhdF9jbHIgCXhiX3dpZGdldC53X3RmbHVzaAogCi0vKiAKKy8qCiAgKiB3ZSBhY2Nlc3MgdGhlc2UgdGhyb3VnaCBzeW5lcmd5IHVuc3dpenpsZWQgc3BhY2UsIHNvIHRoZSBhZGRyZXNzCiAgKiBnZXRzIHR3aWRkbGVkIChpLmUuIHJlZmVyZW5jZXMgdG8gMHg0IGFjdHVhbGx5IGdvIHRvIDB4MCBhbmQgdnYuKQogICogVGhhdCdzIHdoeSB3ZSBwdXQgdGhlIHJlZ2lzdGVyIGZpcnN0IGFuZCBmaWxsZXIgc2Vjb25kLgogICovCi0gICAgLyogeGJvdy1zcGVjaWZpYyB3aWRnZXQgY29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgIDB4MDAwMDU4LTB4MDAwMEZGICovCi0gICAgdWludDMyX3QgICAgICAgICAgICAgICB4Yl93aWRfYXJiX3JlbG9hZDsgIC8qIDB4MDAwMDVDICovCi0gICAgdWludDMyX3QgICAgICAgICAgICAgICBfcGFkXzAwMDA1ODsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIHhiX3BlcmZfY3RyX2E7ICAgICAgLyogMHgwMDAwNjQgKi8KLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIF9wYWRfMDAwMDYwOwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgeGJfcGVyZl9jdHJfYjsgICAgICAvKiAweDAwMDA2YyAqLwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgX3BhZF8wMDAwNjg7Ci0gICAgdWludDMyX3QgICAgICAgICAgICAgICB4Yl9uaWM7ICAgICAvKiAweDAwMDA3NCAqLwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgX3BhZF8wMDAwNzA7CisJLyogeGJvdy1zcGVjaWZpYyB3aWRnZXQgY29uZmlndXJhdGlvbiAgICAweDAwMDA1OC0weDAwMDBGRiAqLworCXUzMiB4Yl93aWRfYXJiX3JlbG9hZDsgLyogMHgwMDAwNUMgKi8KKwl1MzIgX3BhZF8wMDAwNTg7CisJdTMyIHhiX3BlcmZfY3RyX2E7CS8qIDB4MDAwMDY0ICovCisJdTMyIF9wYWRfMDAwMDYwOworCXUzMiB4Yl9wZXJmX2N0cl9iOwkvKiAweDAwMDA2YyAqLworCXUzMiBfcGFkXzAwMDA2ODsKKwl1MzIgeGJfbmljOwkJLyogMHgwMDAwNzQgKi8KKwl1MzIgX3BhZF8wMDAwNzA7CiAKLSAgICAvKiBYYnJpZGdlIG9ubHkgKi8KLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIHhiX3cwX3JzdF9mbmM7ICAgICAgLyogMHgwMDAwN0MgKi8KLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIF9wYWRfMDAwMDc4OwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgeGJfbDhfcnN0X2ZuYzsgICAgICAvKiAweDAwMDA4NCAqLwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgX3BhZF8wMDAwODA7Ci0gICAgdWludDMyX3QgICAgICAgICAgICAgICB4Yl9sOV9yc3RfZm5jOyAgICAgIC8qIDB4MDAwMDhjICovCi0gICAgdWludDMyX3QgICAgICAgICAgICAgICBfcGFkXzAwMDA4ODsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIHhiX2xhX3JzdF9mbmM7ICAgICAgLyogMHgwMDAwOTQgKi8KLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIF9wYWRfMDAwMDkwOwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgeGJfbGJfcnN0X2ZuYzsgICAgICAvKiAweDAwMDA5YyAqLwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgX3BhZF8wMDAwOTg7Ci0gICAgdWludDMyX3QgICAgICAgICAgICAgICB4Yl9sY19yc3RfZm5jOyAgICAgIC8qIDB4MDAwMGE0ICovCi0gICAgdWludDMyX3QgICAgICAgICAgICAgICBfcGFkXzAwMDBhMDsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIHhiX2xkX3JzdF9mbmM7ICAgICAgLyogMHgwMDAwYWMgKi8KLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIF9wYWRfMDAwMGE4OwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgeGJfbGVfcnN0X2ZuYzsgICAgICAvKiAweDAwMDBiNCAqLwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgX3BhZF8wMDAwYjA7Ci0gICAgdWludDMyX3QgICAgICAgICAgICAgICB4Yl9sZl9yc3RfZm5jOyAgICAgIC8qIDB4MDAwMGJjICovCi0gICAgdWludDMyX3QgICAgICAgICAgICAgICBfcGFkXzAwMDBiODsKLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIHhiX2xvY2s7ICAgICAgICAgICAgLyogMHgwMDAwYzQgKi8KLSAgICB1aW50MzJfdCAgICAgICAgICAgICAgIF9wYWRfMDAwMGMwOwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgeGJfbG9ja19jbHI7ICAgICAgICAvKiAweDAwMDBjYyAqLwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgX3BhZF8wMDAwYzg7Ci0gICAgLyogZW5kIG9mIFhicmlkZ2Ugb25seSAqLwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgX3BhZF8wMDAwZDBbMTJdOworCS8qIFhicmlkZ2Ugb25seSAqLworCXUzMiB4Yl93MF9yc3RfZm5jOwkvKiAweDAwMDA3QyAqLworCXUzMiBfcGFkXzAwMDA3ODsKKwl1MzIgeGJfbDhfcnN0X2ZuYzsJLyogMHgwMDAwODQgKi8KKwl1MzIgX3BhZF8wMDAwODA7CisJdTMyIHhiX2w5X3JzdF9mbmM7CS8qIDB4MDAwMDhjICovCisJdTMyIF9wYWRfMDAwMDg4OworCXUzMiB4Yl9sYV9yc3RfZm5jOwkvKiAweDAwMDA5NCAqLworCXUzMiBfcGFkXzAwMDA5MDsKKwl1MzIgeGJfbGJfcnN0X2ZuYzsJLyogMHgwMDAwOWMgKi8KKwl1MzIgX3BhZF8wMDAwOTg7CisJdTMyIHhiX2xjX3JzdF9mbmM7CS8qIDB4MDAwMGE0ICovCisJdTMyIF9wYWRfMDAwMGEwOworCXUzMiB4Yl9sZF9yc3RfZm5jOwkvKiAweDAwMDBhYyAqLworCXUzMiBfcGFkXzAwMDBhODsKKwl1MzIgeGJfbGVfcnN0X2ZuYzsJLyogMHgwMDAwYjQgKi8KKwl1MzIgX3BhZF8wMDAwYjA7CisJdTMyIHhiX2xmX3JzdF9mbmM7CS8qIDB4MDAwMGJjICovCisJdTMyIF9wYWRfMDAwMGI4OworCXUzMiB4Yl9sb2NrOwkJLyogMHgwMDAwYzQgKi8KKwl1MzIgX3BhZF8wMDAwYzA7CisJdTMyIHhiX2xvY2tfY2xyOwkvKiAweDAwMDBjYyAqLworCXUzMiBfcGFkXzAwMDBjODsKKwkvKiBlbmQgb2YgWGJyaWRnZSBvbmx5ICovCisJdTMyIF9wYWRfMDAwMGQwWzEyXTsKIAotICAgIC8qIExpbmsgU3BlY2lmaWMgUmVnaXN0ZXJzLCBwb3J0IDguLjE1ICAgICAgICAgICAgICAgICAweDAwMDEwMC0weDAwMDMwMCAqLwotICAgIHhiX2xpbmtyZWdzX3QgICAgICAgICAgIHhiX2xpbmtfcmF3W01BWF9YQk9XX1BPUlRTXTsKLSNkZWZpbmUgeGJfbGluayhwKSAgICAgIHhiX2xpbmtfcmF3WyhwKSAmIChNQVhfWEJPV19QT1JUUyAtIDEpXQotCisJLyogTGluayBTcGVjaWZpYyBSZWdpc3RlcnMsIHBvcnQgOC4uMTUgICAweDAwMDEwMC0weDAwMDMwMCAqLworCXhiX2xpbmtyZWdzX3QgeGJfbGlua19yYXdbTUFYX1hCT1dfUE9SVFNdOwogfSB4Ym93X3Q7CiAKKyNkZWZpbmUgeGJfbGluayhwKSB4Yl9saW5rX3Jhd1socCkgJiAoTUFYX1hCT1dfUE9SVFMgLSAxKV0KKwogI2RlZmluZSBYQl9GTEFHU19FWElTVFMJCTB4MQkvKiBkZXZpY2UgZXhpc3RzICovCiAjZGVmaW5lIFhCX0ZMQUdTX01BU1RFUgkJMHgyCiAjZGVmaW5lIFhCX0ZMQUdTX1NMQVZFCQkweDAKQEAgLTE2MCw3ICsxNjEsNyBAQAogLyogRW5kIG9mIFhicmlkZ2Ugb25seSAqLwogCiAvKiB1c2VkIG9ubHkgaW4gaWRlLCBidXQgZGVmaW5lZCBoZXJlIHdpdGhpbiB0aGUgcmVzZXJ2ZWQgcG9ydGlvbiAqLwotLyogICAgICAgICAgICAgIG9mIHRoZSB3aWRnZXQwIGFkZHJlc3Mgc3BhY2UgKGJlZm9yZSAweGY0KSAqLworLyogb2YgdGhlIHdpZGdldDAgYWRkcmVzcyBzcGFjZSAoYmVmb3JlIDB4ZjQpICovCiAjZGVmaW5lCVhCT1dfV0lEX1VOREVGCQkweGU0CiAKIC8qIHhib3cgbGluayByZWdpc3RlciBzZXQgYmFzZSwgbGVnYWwgdmFsdWUgZm9yIHggaXMgMHg4Li4weGYgKi8KQEAgLTE3OSwyOSArMTgwLDM3IEBACiAKIC8qIGxpbmtfY29udHJvbCh4KSAqLwogI2RlZmluZQlYQl9DVFJMX0xJTktBTElWRV9JRQkJMHg4MDAwMDAwMAkvKiBsaW5rIGNvbWVzIGFsaXZlICovCi0gICAgIC8qIHJlc2VydmVkOgkJCTB4NDAwMDAwMDAgKi8KKy8qIHJlc2VydmVkOgkJCTB4NDAwMDAwMDAgKi8KICNkZWZpbmUJWEJfQ1RSTF9QRVJGX0NUUl9NT0RFX01TSwkweDMwMDAwMDAwCS8qIHBlcmYgY291bnRlciBtb2RlICovCi0jZGVmaW5lCVhCX0NUUkxfSUJVRl9MRVZFTF9NU0sJCTB4MGUwMDAwMDAJLyogaW5wdXQgcGFja2V0IGJ1ZmZlciBsZXZlbCAqLwotI2RlZmluZQlYQl9DVFJMXzhCSVRfTU9ERQkJMHgwMTAwMDAwMAkvKiBmb3JjZSBsaW5rIGludG8gOCBiaXQgbW9kZSAqLwotI2RlZmluZSBYQl9DVFJMX0JBRF9MTFBfUEtUCQkweDAwODAwMDAwCS8qIGZvcmNlIGJhZCBMTFAgcGFja2V0ICovCi0jZGVmaW5lIFhCX0NUUkxfV0lER0VUX0NSX01TSwkJMHgwMDdjMDAwMAkvKiBMTFAgd2lkZ2V0IGNyZWRpdCBtYXNrICovCi0jZGVmaW5lIFhCX0NUUkxfV0lER0VUX0NSX1NIRlQJMTgJCQkvKiBMTFAgd2lkZ2V0IGNyZWRpdCBzaGlmdCAqLwotI2RlZmluZSBYQl9DVFJMX0lMTEVHQUxfRFNUX0lFCQkweDAwMDIwMDAwCS8qIGlsbGVnYWwgZGVzdGluYXRpb24gKi8KLSNkZWZpbmUgWEJfQ1RSTF9PQUxMT0NfSUJVRl9JRQkJMHgwMDAxMDAwMAkvKiBvdmVyYWxsb2NhdGVkIGlucHV0IGJ1ZmZlciAqLwotICAgICAvKiByZXNlcnZlZDoJCQkweDAwMDBmZTAwICovCisjZGVmaW5lCVhCX0NUUkxfSUJVRl9MRVZFTF9NU0sJCTB4MGUwMDAwMDAJLyogaW5wdXQgcGFja2V0IGJ1ZmZlcgorCQkJCQkJCSAgIGxldmVsICovCisjZGVmaW5lCVhCX0NUUkxfOEJJVF9NT0RFCQkweDAxMDAwMDAwCS8qIGZvcmNlIGxpbmsgaW50byA4CisJCQkJCQkJICAgYml0IG1vZGUgKi8KKyNkZWZpbmUgWEJfQ1RSTF9CQURfTExQX1BLVAkJMHgwMDgwMDAwMAkvKiBmb3JjZSBiYWQgTExQCisJCQkJCQkJICAgcGFja2V0ICovCisjZGVmaW5lIFhCX0NUUkxfV0lER0VUX0NSX01TSwkJMHgwMDdjMDAwMAkvKiBMTFAgd2lkZ2V0IGNyZWRpdAorCQkJCQkJCSAgIG1hc2sgKi8KKyNkZWZpbmUgWEJfQ1RSTF9XSURHRVRfQ1JfU0hGVAkxOAkJCS8qIExMUCB3aWRnZXQgY3JlZGl0CisJCQkJCQkJICAgc2hpZnQgKi8KKyNkZWZpbmUgWEJfQ1RSTF9JTExFR0FMX0RTVF9JRQkJMHgwMDAyMDAwMAkvKiBpbGxlZ2FsIGRlc3RpbmF0aW9uCisJCQkJCQkJICovCisjZGVmaW5lIFhCX0NUUkxfT0FMTE9DX0lCVUZfSUUJCTB4MDAwMTAwMDAJLyogb3ZlcmFsbG9jYXRlZCBpbnB1dAorCQkJCQkJCSAgIGJ1ZmZlciAqLworLyogcmVzZXJ2ZWQ6CQkJMHgwMDAwZmUwMCAqLwogI2RlZmluZSBYQl9DVFJMX0JORFdEVEhfQUxMT0NfSUUJMHgwMDAwMDEwMAkvKiBiYW5kd2lkdGggYWxsb2MgKi8KICNkZWZpbmUgWEJfQ1RSTF9SQ1ZfQ05UX09GTE9XX0lFCTB4MDAwMDAwODAJLyogcmN2IHJldHJ5IG92ZXJmbG93ICovCiAjZGVmaW5lIFhCX0NUUkxfWE1UX0NOVF9PRkxPV19JRQkweDAwMDAwMDQwCS8qIHhtdCByZXRyeSBvdmVyZmxvdyAqLwogI2RlZmluZSBYQl9DVFJMX1hNVF9NQVhfUlRSWV9JRQkJMHgwMDAwMDAyMAkvKiBtYXggdHJhbnNtaXQgcmV0cnkgKi8KICNkZWZpbmUgWEJfQ1RSTF9SQ1ZfSUUJCQkweDAwMDAwMDEwCS8qIHJlY2VpdmUgKi8KICNkZWZpbmUgWEJfQ1RSTF9YTVRfUlRSWV9JRQkJMHgwMDAwMDAwOAkvKiB0cmFuc21pdCByZXRyeSAqLwotICAgICAvKiByZXNlcnZlZDoJCQkweDAwMDAwMDA0ICovCi0jZGVmaW5lCVhCX0NUUkxfTUFYUkVRX1RPVVRfSUUJCTB4MDAwMDAwMDIJLyogbWF4aW11bSByZXF1ZXN0IHRpbWVvdXQgKi8KKy8qIHJlc2VydmVkOgkJCTB4MDAwMDAwMDQgKi8KKyNkZWZpbmUJWEJfQ1RSTF9NQVhSRVFfVE9VVF9JRQkJMHgwMDAwMDAwMgkvKiBtYXhpbXVtIHJlcXVlc3QKKwkJCQkJCQkgICB0aW1lb3V0ICovCiAjZGVmaW5lCVhCX0NUUkxfU1JDX1RPVVRfSUUJCTB4MDAwMDAwMDEJLyogc291cmNlIHRpbWVvdXQgKi8KIAogLyogbGlua19zdGF0dXMoeCkgKi8KICNkZWZpbmUJWEJfU1RBVF9MSU5LQUxJVkUJCVhCX0NUUkxfTElOS0FMSVZFX0lFCi0gICAgIC8qIHJlc2VydmVkOgkJCTB4N2ZmODAwMDAgKi8KKy8qIHJlc2VydmVkOgkJCTB4N2ZmODAwMDAgKi8KICNkZWZpbmUJWEJfU1RBVF9NVUxUSV9FUlIJCTB4MDAwNDAwMDAJLyogbXVsdGkgZXJyb3IgKi8KICNkZWZpbmUJWEJfU1RBVF9JTExFR0FMX0RTVF9FUlIJCVhCX0NUUkxfSUxMRUdBTF9EU1RfSUUKICNkZWZpbmUJWEJfU1RBVF9PQUxMT0NfSUJVRl9FUlIJCVhCX0NUUkxfT0FMTE9DX0lCVUZfSUUKQEAgLTIxMSw3ICsyMjAsNyBAQAogI2RlZmluZQlYQl9TVEFUX1hNVF9NQVhfUlRSWV9FUlIJWEJfQ1RSTF9YTVRfTUFYX1JUUllfSUUKICNkZWZpbmUJWEJfU1RBVF9SQ1ZfRVJSCQkJWEJfQ1RSTF9SQ1ZfSUUKICNkZWZpbmUJWEJfU1RBVF9YTVRfUlRSWV9FUlIJCVhCX0NUUkxfWE1UX1JUUllfSUUKLSAgICAgLyogcmVzZXJ2ZWQ6CQkJMHgwMDAwMDAwNCAqLworLyogcmVzZXJ2ZWQ6CQkJMHgwMDAwMDAwNCAqLwogI2RlZmluZQlYQl9TVEFUX01BWFJFUV9UT1VUX0VSUgkJWEJfQ1RSTF9NQVhSRVFfVE9VVF9JRQogI2RlZmluZQlYQl9TVEFUX1NSQ19UT1VUX0VSUgkJWEJfQ1RSTF9TUkNfVE9VVF9JRQogCkBAIC0yMjIsNyArMjMxLDcgQEAKICNkZWZpbmUJWEJfQVVYX0xJTktGQUlMX1JTVF9CQUQJMHgwMDAwMDA0MAogI2RlZmluZQlYQl9BVVhfU1RBVF9QUkVTRU5UCTB4MDAwMDAwMjAKICNkZWZpbmUJWEJfQVVYX1NUQVRfUE9SVF9XSURUSAkweDAwMDAwMDEwCi0gICAgIC8qCXJlc2VydmVkOgkJMHgwMDAwMDAwZiAqLworLyoJcmVzZXJ2ZWQ6CQkweDAwMDAwMDBmICovCiAKIC8qCiAgKiBsaW5rX2FyYl91cHBlci9saW5rX2FyYl9sb3dlcih4KSwgKHJlZykgc2hvdWxkIGJlIHRoZSBsaW5rX2FyYl91cHBlcgpAQCAtMjM4LDcgKzI0Nyw4IEBACiAvKiBYQk9XX1dJRF9TVEFUICovCiAjZGVmaW5lCVhCX1dJRF9TVEFUX0xJTktfSU5UUl9TSEZUCSgyNCkKICNkZWZpbmUJWEJfV0lEX1NUQVRfTElOS19JTlRSX01BU0sJKDB4RkYgPDwgWEJfV0lEX1NUQVRfTElOS19JTlRSX1NIRlQpCi0jZGVmaW5lCVhCX1dJRF9TVEFUX0xJTktfSU5UUih4KQkoMHgxIDw8ICgoKHgpJjcpICsgWEJfV0lEX1NUQVRfTElOS19JTlRSX1NIRlQpKQorI2RlZmluZQlYQl9XSURfU1RBVF9MSU5LX0lOVFIoeCkgXAorCSgweDEgPDwgKCgoeCkmNykgKyBYQl9XSURfU1RBVF9MSU5LX0lOVFJfU0hGVCkpCiAjZGVmaW5lCVhCX1dJRF9TVEFUX1dJREdFVDBfSU5UUgkweDAwODAwMDAwCiAjZGVmaW5lIFhCX1dJRF9TVEFUX1NSQ0lEX01BU0sJCTB4MDAwMDAzYzAJLyogWGJyaWRnZSBvbmx5ICovCiAjZGVmaW5lCVhCX1dJRF9TVEFUX1JFR19BQ0NfRVJSCQkweDAwMDAwMDIwCkBAIC0yNjQsNyArMjc0LDcgQEAKICNkZWZpbmUgWFhCT1dfV0lER0VUX1BBUlRfTlVNCTB4ZDAwMAkJLyogWGJyaWRnZSAqLwogI2RlZmluZQlYQk9XX1dJREdFVF9NRkdSX05VTQkweDAKICNkZWZpbmUJWFhCT1dfV0lER0VUX01GR1JfTlVNCTB4MAotI2RlZmluZSBQWEJPV19XSURHRVRfUEFSVF9OVU0gICAweGQxMDAgICAgICAgICAgLyogUElDICovCisjZGVmaW5lIFBYQk9XX1dJREdFVF9QQVJUX05VTSAgIDB4ZDEwMAkJLyogUElDICovCiAKICNkZWZpbmUJWEJPV19SRVZfMV8wCQkweDEJLyogeGJvdyByZXYgMS4wIGlzICIxIiAqLwogI2RlZmluZQlYQk9XX1JFVl8xXzEJCTB4MgkvKiB4Ym93IHJldiAxLjEgaXMgIjIiICovCkBAIC0yNzksMTMgKzI4OSwxMyBAQAogI2RlZmluZQlYQk9XX1dJRF9BUkJfUkVMT0FEX0lOVAkweDNmCS8qIEdCUiByZWxvYWQgaW50ZXJ2YWwgKi8KIAogI2RlZmluZSBJU19YQlJJREdFX1hCT1cod2lkKSBcCi0gICAgICAgIChYV0lER0VUX1BBUlRfTlVNKHdpZCkgPT0gWFhCT1dfV0lER0VUX1BBUlRfTlVNICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIFhXSURHRVRfTUZHX05VTSh3aWQpID09IFhYQk9XX1dJREdFVF9NRkdSX05VTSkKKwkoWFdJREdFVF9QQVJUX05VTSh3aWQpID09IFhYQk9XX1dJREdFVF9QQVJUX05VTSAmJiBcCisJWFdJREdFVF9NRkdfTlVNKHdpZCkgPT0gWFhCT1dfV0lER0VUX01GR1JfTlVNKQogCiAjZGVmaW5lIElTX1BJQ19YQk9XKHdpZCkgXAotICAgICAgICAoWFdJREdFVF9QQVJUX05VTSh3aWQpID09IFBYQk9XX1dJREdFVF9QQVJUX05VTSAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICBYV0lER0VUX01GR19OVU0od2lkKSA9PSBYWEJPV19XSURHRVRfTUZHUl9OVU0pCisJKFhXSURHRVRfUEFSVF9OVU0od2lkKSA9PSBQWEJPV19XSURHRVRfUEFSVF9OVU0gJiYgXAorCVhXSURHRVRfTUZHX05VTSh3aWQpID09IFhYQk9XX1dJREdFVF9NRkdSX05VTSkKIAogI2RlZmluZSBYQk9XX1dBUl9FTkFCTEVEKHB2LCB3aWRpZCkgKCgxIDw8IFhXSURHRVRfUkVWX05VTSh3aWRpZCkpICYgcHYpCiAKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX0FTTV9JQTY0X1NOX1hUQUxLX1hCT1dfSCAqLworI2VuZGlmIC8qIF9BU01fSUE2NF9TTl9YVEFMS19YQk9XX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9pbmNsdWRlL3h0YWxrL3h3aWRnZXRkZXYuaCBiL2FyY2gvaWE2NC9zbi9pbmNsdWRlL3h0YWxrL3h3aWRnZXRkZXYuaAppbmRleCBjNWY0YmM1Li4yODAwZWRhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vaW5jbHVkZS94dGFsay94d2lkZ2V0ZGV2LmgKKysrIGIvYXJjaC9pYTY0L3NuL2luY2x1ZGUveHRhbGsveHdpZGdldGRldi5oCkBAIC0yNSwyOCArMjUsMjggQEAKIAogLyogd2lkZ2V0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCiBzdHJ1Y3Qgd2lkZ2V0X2NmZ3sKLQl1aW50MzJfdAl3X2lkOwkvKiAweDA0ICovCi0JdWludDMyX3QJd19wYWRfMDsJLyogMHgwMCAqLwotCXVpbnQzMl90CXdfc3RhdHVzOwkvKiAweDBjICovCi0JdWludDMyX3QJd19wYWRfMTsJLyogMHgwOCAqLwotCXVpbnQzMl90CXdfZXJyX3VwcGVyX2FkZHI7CS8qIDB4MTQgKi8KLQl1aW50MzJfdAl3X3BhZF8yOwkvKiAweDEwICovCi0JdWludDMyX3QJd19lcnJfbG93ZXJfYWRkcjsJLyogMHgxYyAqLwotCXVpbnQzMl90CXdfcGFkXzM7CS8qIDB4MTggKi8KLQl1aW50MzJfdAl3X2NvbnRyb2w7CS8qIDB4MjQgKi8KLQl1aW50MzJfdAl3X3BhZF80OwkvKiAweDIwICovCi0JdWludDMyX3QJd19yZXFfdGltZW91dDsJLyogMHgyYyAqLwotCXVpbnQzMl90CXdfcGFkXzU7CS8qIDB4MjggKi8KLQl1aW50MzJfdAl3X2ludGRlc3RfdXBwZXJfYWRkcjsJLyogMHgzNCAqLwotCXVpbnQzMl90CXdfcGFkXzY7CS8qIDB4MzAgKi8KLQl1aW50MzJfdAl3X2ludGRlc3RfbG93ZXJfYWRkcjsJLyogMHgzYyAqLwotCXVpbnQzMl90CXdfcGFkXzc7CS8qIDB4MzggKi8KLQl1aW50MzJfdAl3X2Vycl9jbWRfd29yZDsJLyogMHg0NCAqLwotCXVpbnQzMl90CXdfcGFkXzg7CS8qIDB4NDAgKi8KLQl1aW50MzJfdAl3X2xscF9jZmc7CS8qIDB4NGMgKi8KLQl1aW50MzJfdAl3X3BhZF85OwkvKiAweDQ4ICovCi0JdWludDMyX3QJd190Zmx1c2g7CS8qIDB4NTQgKi8KLQl1aW50MzJfdAl3X3BhZF8xMDsJLyogMHg1MCAqLworCXUzMgl3X2lkOwkvKiAweDA0ICovCisJdTMyCXdfcGFkXzA7CS8qIDB4MDAgKi8KKwl1MzIJd19zdGF0dXM7CS8qIDB4MGMgKi8KKwl1MzIJd19wYWRfMTsJLyogMHgwOCAqLworCXUzMgl3X2Vycl91cHBlcl9hZGRyOwkvKiAweDE0ICovCisJdTMyCXdfcGFkXzI7CS8qIDB4MTAgKi8KKwl1MzIJd19lcnJfbG93ZXJfYWRkcjsJLyogMHgxYyAqLworCXUzMgl3X3BhZF8zOwkvKiAweDE4ICovCisJdTMyCXdfY29udHJvbDsJLyogMHgyNCAqLworCXUzMgl3X3BhZF80OwkvKiAweDIwICovCisJdTMyCXdfcmVxX3RpbWVvdXQ7CS8qIDB4MmMgKi8KKwl1MzIJd19wYWRfNTsJLyogMHgyOCAqLworCXUzMgl3X2ludGRlc3RfdXBwZXJfYWRkcjsJLyogMHgzNCAqLworCXUzMgl3X3BhZF82OwkvKiAweDMwICovCisJdTMyCXdfaW50ZGVzdF9sb3dlcl9hZGRyOwkvKiAweDNjICovCisJdTMyCXdfcGFkXzc7CS8qIDB4MzggKi8KKwl1MzIJd19lcnJfY21kX3dvcmQ7CS8qIDB4NDQgKi8KKwl1MzIJd19wYWRfODsJLyogMHg0MCAqLworCXUzMgl3X2xscF9jZmc7CS8qIDB4NGMgKi8KKwl1MzIJd19wYWRfOTsJLyogMHg0OCAqLworCXUzMgl3X3RmbHVzaDsJLyogMHg1NCAqLworCXUzMgl3X3BhZF8xMDsJLyogMHg1MCAqLwogfTsKIAogLyoKQEAgLTYzLDcgKzYzLDcgQEAKIAlzdHJ1Y3QgeHdpZGdldF9od2lkCXh3aV9od2lkOwkvKiBXaWRnZXQgSWRlbnRpZmljYXRpb24gKi8KIAljaGFyCQkJeHdpX21hc3RlcnhpZDsJLyogSHViJ3MgV2lkZ2V0IFBvcnQgTnVtYmVyICovCiAJdm9pZAkJCSp4d2lfaHViaW5mbzsgICAgIC8qIEh1YidzIHByb3ZpZGVyIHByaXZhdGUgaW5mbyAqLwotCXVpbnQ2NF90CQkqeHdpX2h1Yl9wcm92aWRlcjsgLyogcHJvbSBwcm92aWRlciBmdW5jdGlvbnMgKi8KKwl1NjQJCQkqeHdpX2h1Yl9wcm92aWRlcjsgLyogcHJvbSBwcm92aWRlciBmdW5jdGlvbnMgKi8KIAl2b2lkCQkJKnh3aV92ZXJ0ZXg7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCmluZGV4IDI1OGQ5ZDcuLjIzM2Q1NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCkBAIC0xMzIsOCArMTMyLDggQEAKICAqIFJldHJpZXZlIHRoZSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGdpdmVuIHRoZSBidXMgYW5kIGRldmljZXxmdW5jdGlvbiBudW1iZXIuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdTY0Ci1zYWxfZ2V0X3BjaWRldl9pbmZvKHU2NCBzZWdtZW50LCB1NjQgYnVzX251bWJlciwgdTY0IGRldmZuLCB1NjQgcGNpX2RldiwgCi0JCQl1NjQgc25faXJxX2luZm8pCitzYWxfZ2V0X3BjaWRldl9pbmZvKHU2NCBzZWdtZW50LCB1NjQgYnVzX251bWJlciwgdTY0IGRldmZuLCB1NjQgcGNpX2RldiwKKwkJICAgIHU2NCBzbl9pcnFfaW5mbykKIHsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJldF9zdHVmZjsKIAlyZXRfc3R1ZmYuc3RhdHVzID0gMDsKQEAgLTE0MSw3ICsxNDEsNyBAQAogCiAJU0FMX0NBTExfTk9MT0NLKHJldF9zdHVmZiwKIAkJCSh1NjQpIFNOX1NBTF9JT0lGX0dFVF9QQ0lERVZfSU5GTywKLQkJCSh1NjQpIHNlZ21lbnQsICh1NjQpIGJ1c19udW1iZXIsICh1NjQpIGRldmZuLCAKKwkJCSh1NjQpIHNlZ21lbnQsICh1NjQpIGJ1c19udW1iZXIsICh1NjQpIGRldmZuLAogCQkJKHU2NCkgcGNpX2RldiwKIAkJCXNuX2lycV9pbmZvLCAwLCAwKTsKIAlyZXR1cm4gcmV0X3N0dWZmLnYwOwpAQCAtMjY4LDcgKzI2OCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkCiBzbl9wY2lfd2luZG93X2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBjb3VudCwKLQkJICAgIGludDY0X3QgKiBwY2lfYWRkcnMpCisJCSAgICBzNjQgKiBwY2lfYWRkcnMpCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpjb250cm9sbGVyID0gUENJX0NPTlRST0xMRVIoZGV2LT5idXMpOwogCXVuc2lnbmVkIGludCBpOwpAQCAtMzI4LDcgKzMyOCw3IEBACiAgCXN0cnVjdCBwY2lfYnVzICpob3N0X3BjaV9idXM7CiAgCXN0cnVjdCBwY2lfZGV2ICpob3N0X3BjaV9kZXY7CiAJc3RydWN0IHBjaWRldl9pbmZvICpwY2lkZXZfaW5mbzsKLQlpbnQ2NF90IHBjaV9hZGRyc1tQQ0lfUk9NX1JFU09VUkNFICsgMV07CisJczY0IHBjaV9hZGRyc1tQQ0lfUk9NX1JFU09VUkNFICsgMV07CiAgCXN0cnVjdCBzbl9pcnFfaW5mbyAqc25faXJxX2luZm87CiAgCXVuc2lnbmVkIGxvbmcgc2l6ZTsKICAJdW5zaWduZWQgaW50IGJ1c19ubywgZGV2Zm47CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pcnEuYwppbmRleCAwMWQxOGI3Li5lYzM3MDg0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaXJxLmMKQEAgLTI4LDcgKzI4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICoqc25faXJxX2xoOwogc3RhdGljIHNwaW5sb2NrX3Qgc25faXJxX2luZm9fbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgLyogbm9uLUlSUSBsb2NrICovCiAKLXN0YXRpYyBpbmxpbmUgdWludDY0X3Qgc25faW50cl9hbGxvYyhuYXNpZF90IGxvY2FsX25hc2lkLCBpbnQgbG9jYWxfd2lkZ2V0LAorc3RhdGljIGlubGluZSB1NjQgc25faW50cl9hbGxvYyhuYXNpZF90IGxvY2FsX25hc2lkLCBpbnQgbG9jYWxfd2lkZ2V0LAogCQkJCSAgICAgdTY0IHNuX2lycV9pbmZvLAogCQkJCSAgICAgaW50IHJlcV9pcnEsIG5hc2lkX3QgcmVxX25hc2lkLAogCQkJCSAgICAgaW50IHJlcV9zbGljZSkKQEAgLTEyMyw3ICsxMjMsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNuX2lycV9pbmZvLCBzbl9pcnFfaW5mb19zYWZlLAogCQkJCSBzbl9pcnFfbGhbaXJxXSwgbGlzdCkgewotCQl1aW50NjRfdCBicmlkZ2U7CisJCXU2NCBicmlkZ2U7CiAJCWludCBsb2NhbF93aWRnZXQsIHN0YXR1czsKIAkJbmFzaWRfdCBsb2NhbF9uYXNpZDsKIAkJc3RydWN0IHNuX2lycV9pbmZvICpuZXdfaXJxX2luZm87CkBAIC0xMzQsNyArMTM0LDcgQEAKIAkJCWJyZWFrOwogCQltZW1jcHkobmV3X2lycV9pbmZvLCBzbl9pcnFfaW5mbywgc2l6ZW9mKHN0cnVjdCBzbl9pcnFfaW5mbykpOwogCi0JCWJyaWRnZSA9ICh1aW50NjRfdCkgbmV3X2lycV9pbmZvLT5pcnFfYnJpZGdlOworCQlicmlkZ2UgPSAodTY0KSBuZXdfaXJxX2luZm8tPmlycV9icmlkZ2U7CiAJCWlmICghYnJpZGdlKSB7CiAJCQlrZnJlZShuZXdfaXJxX2luZm8pOwogCQkJYnJlYWs7IC8qIGlycSBpcyBub3QgYSBkZXZpY2UgaW50ZXJydXB0ICovCkBAIC0zNDksMTAgKzM0OSwxMCBAQAogICovCiBzdGF0aWMgdm9pZCBzbl9jaGVja19pbnRyKGludCBpcnEsIHN0cnVjdCBzbl9pcnFfaW5mbyAqc25faXJxX2luZm8pCiB7Ci0JdWludDY0X3QgcmVndmFsOworCXU2NCByZWd2YWw7CiAJaW50IGlycl9yZWdfbnVtOwogCWludCBpcnJfYml0OwotCXVpbnQ2NF90IGlycl9yZWc7CisJdTY0IGlycl9yZWc7CiAJc3RydWN0IHBjaWRldl9pbmZvICpwY2lkZXZfaW5mbzsKIAlzdHJ1Y3QgcGNpYnVzX2luZm8gKnBjaWJ1c19pbmZvOwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3Rpb2N4LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3Rpb2N4LmMKaW5kZXggNmE3OTM5Yi4uZDI2M2QzZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC90aW9jeC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvdGlvY3guYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJCQkJICBjeF9kZXYtPmJ0KTsKIH0KIAotc3RhdGljIGlubGluZSB1aW50NjRfdCB0aW9jeF9pbnRyX2FsbG9jKG5hc2lkX3QgbmFzaWQsIGludCB3aWRnZXQsCitzdGF0aWMgaW5saW5lIHU2NCB0aW9jeF9pbnRyX2FsbG9jKG5hc2lkX3QgbmFzaWQsIGludCB3aWRnZXQsCiAJCQkJCXU2NCBzbl9pcnFfaW5mbywKIAkJCQkJaW50IHJlcV9pcnEsIG5hc2lkX3QgcmVxX25hc2lkLAogCQkJCQlpbnQgcmVxX3NsaWNlKQpAQCAtMzAyLDcgKzMwMiw3IEBACiAKIHZvaWQgdGlvY3hfaXJxX2ZyZWUoc3RydWN0IHNuX2lycV9pbmZvICpzbl9pcnFfaW5mbykKIHsKLQl1aW50NjRfdCBicmlkZ2UgPSAodWludDY0X3QpIHNuX2lycV9pbmZvLT5pcnFfYnJpZGdlOworCXU2NCBicmlkZ2UgPSAodTY0KSBzbl9pcnFfaW5mby0+aXJxX2JyaWRnZTsKIAluYXNpZF90IG5hc2lkID0gTkFTSURfR0VUKGJyaWRnZSk7CiAJaW50IHdpZGdldDsKIApAQCAtMzEzLDEyICszMTMsMTIgQEAKIAl9CiB9CiAKLXVpbnQ2NF90IHRpb2N4X2RtYV9hZGRyKHVpbnQ2NF90IGFkZHIpCit1NjQgdGlvY3hfZG1hX2FkZHIodTY0IGFkZHIpCiB7CiAJcmV0dXJuIFBIWVNfVE9fVElPRE1BKGFkZHIpOwogfQogCi11aW50NjRfdCB0aW9jeF9zd2luX2Jhc2UoaW50IG5hc2lkKQordTY0IHRpb2N4X3N3aW5fYmFzZShpbnQgbmFzaWQpCiB7CiAJcmV0dXJuIFRJT19TV0lOX0JBU0UobmFzaWQsIFRJT0NYX0NPUkVMRVQpOwogfQpAQCAtMzM1LDggKzMzNSw4IEBACiAKIHN0YXRpYyB2b2lkIHRpb19jb252ZXlvcl9zZXQobmFzaWRfdCBuYXNpZCwgaW50IGVuYWJsZV9mbGFnKQogewotCXVpbnQ2NF90IGljZV9mcno7Ci0JdWludDY0X3QgZGlzYWJsZV9jYiA9ICgxdWxsIDw8IDYxKTsKKwl1NjQgaWNlX2ZyejsKKwl1NjQgZGlzYWJsZV9jYiA9ICgxdWxsIDw8IDYxKTsKIAogCWlmICghKG5hc2lkICYgMSkpCiAJCXJldHVybjsKQEAgLTM4OCw3ICszODgsNyBAQAogCiBzdGF0aWMgaW50IGJpdHN0cmVhbV9sb2FkZWQobmFzaWRfdCBuYXNpZCkKIHsKLQl1aW50NjRfdCBjeF9jcmVkaXRzOworCXU2NCBjeF9jcmVkaXRzOwogCiAJY3hfY3JlZGl0cyA9IFJFTU9URV9IVUJfTChuYXNpZCwgVElPX0lDRV9QTUlfVFhfRFlOX0NSRURJVF9TVEFUX0NCMyk7CiAJY3hfY3JlZGl0cyAmPSBUSU9fSUNFX1BNSV9UWF9EWU5fQ1JFRElUX1NUQVRfQ0IzX0NSRURJVF9DTlRfTUFTSzsKQEAgLTQwNCwxNCArNDA0LDE0IEBACiAJbmFzaWRfdCBuYXNpZCA9IGN4X2Rldi0+Y3hfaWQubmFzaWQ7CiAKIAlpZiAoYml0c3RyZWFtX2xvYWRlZChuYXNpZCkpIHsKLQkJdWludDY0X3QgY3hfaWQ7CisJCXU2NCBjeF9pZDsKIAkJaW50IHJ2OwogCiAJCXJ2ID0gaWE2NF9zbl9zeXNjdGxfdGlvX2Nsb2NrX3Jlc2V0KG5hc2lkKTsKIAkJaWYgKHJ2KSB7CiAJCQlwcmludGsoS0VSTl9BTEVSVCAiQ1ggcG9ydCBKVEFHIHJlc2V0IGZhaWxlZC5cbiIpOwogCQl9IGVsc2UgewotCQkJY3hfaWQgPSAqKHZvbGF0aWxlIHVpbnQ2NF90ICopCisJCQljeF9pZCA9ICoodm9sYXRpbGUgdTY0ICopCiAJCQkJKFRJT19TV0lOX0JBU0UobmFzaWQsIFRJT0NYX0NPUkVMRVQpICsKIAkJCQkJICBXSURHRVRfSUQpOwogCQkJcGFydF9udW0gPSBYV0lER0VUX1BBUlRfTlVNKGN4X2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfYXRlLmMgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2F0ZS5jCmluZGV4IGQxNjQ3YjguLmFhM2ZhNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfYXRlLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9hdGUuYwpAQCAtMTgsMTAgKzE4LDEwIEBACiAgKiBtYXJrX2F0ZTogTWFyayB0aGUgYXRlIGFzIGVpdGhlciBmcmVlIG9yIGludXNlLgogICovCiBzdGF0aWMgdm9pZCBtYXJrX2F0ZShzdHJ1Y3QgYXRlX3Jlc291cmNlICphdGVfcmVzb3VyY2UsIGludCBzdGFydCwgaW50IG51bWJlciwKLQkJICAgICB1aW50NjRfdCB2YWx1ZSkKKwkJICAgICB1NjQgdmFsdWUpCiB7CiAKLQl1aW50NjRfdCAqYXRlID0gYXRlX3Jlc291cmNlLT5hdGU7CisJdTY0ICphdGUgPSBhdGVfcmVzb3VyY2UtPmF0ZTsKIAlpbnQgaW5kZXg7CiAJaW50IGxlbmd0aCA9IDA7CiAKQEAgLTM4LDcgKzM4LDcgQEAKIAkJCSBpbnQgY291bnQpCiB7CiAKLQl1aW50NjRfdCAqYXRlID0gYXRlX3Jlc291cmNlLT5hdGU7CisJdTY0ICphdGUgPSBhdGVfcmVzb3VyY2UtPmF0ZTsKIAlpbnQgaW5kZXg7CiAJaW50IHN0YXJ0X2ZyZWU7CiAKQEAgLTExOSw3ICsxMTksNyBAQAogaW50IHBjaWJyX2F0ZV9hbGxvYyhzdHJ1Y3QgcGNpYnVzX2luZm8gKnBjaWJ1c19pbmZvLCBpbnQgY291bnQpCiB7CiAJaW50IHN0YXR1cyA9IDA7Ci0JdWludDY0X3QgZmxhZzsKKwl1NjQgZmxhZzsKIAogCWZsYWcgPSBwY2licl9sb2NrKHBjaWJ1c19pbmZvKTsKIAlzdGF0dXMgPSBhbGxvY19hdGVfcmVzb3VyY2UoJnBjaWJ1c19pbmZvLT5wYmlfaW50X2F0ZV9yZXNvdXJjZSwgY291bnQpOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAgKiBTZXR1cCBhbiBBZGRyZXNzIFRyYW5zbGF0aW9uIEVudHJ5IGFzIHNwZWNpZmllZC4gIFVzZSBlaXRoZXIgdGhlIEJyaWRnZQogICogaW50ZXJuYWwgbWFwcyBvciB0aGUgZXh0ZXJuYWwgbWFwIFJBTSwgYXMgYXBwcm9wcmlhdGUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdWludDY0X3QgKnBjaWJyX2F0ZV9hZGRyKHN0cnVjdCBwY2lidXNfaW5mbyAqcGNpYnVzX2luZm8sCitzdGF0aWMgaW5saW5lIHU2NCAqcGNpYnJfYXRlX2FkZHIoc3RydWN0IHBjaWJ1c19pbmZvICpwY2lidXNfaW5mbywKIAkJCQkgICAgICAgaW50IGF0ZV9pbmRleCkKIHsKIAlpZiAoYXRlX2luZGV4IDwgcGNpYnVzX2luZm8tPnBiaV9pbnRfYXRlX3NpemUpIHsKQEAgLTE1Myw3ICsxNTMsNyBAQAogICovCiB2b2lkIGlubGluZQogYXRlX3dyaXRlKHN0cnVjdCBwY2lidXNfaW5mbyAqcGNpYnVzX2luZm8sIGludCBhdGVfaW5kZXgsIGludCBjb3VudCwKLQkgIHZvbGF0aWxlIHVpbnQ2NF90IGF0ZSkKKwkgIHZvbGF0aWxlIHU2NCBhdGUpCiB7CiAJd2hpbGUgKGNvdW50LS0gPiAwKSB7CiAJCWlmIChhdGVfaW5kZXggPCBwY2lidXNfaW5mby0+cGJpX2ludF9hdGVfc2l6ZSkgewpAQCAtMTcxLDkgKzE3MSw5IEBACiB2b2lkIHBjaWJyX2F0ZV9mcmVlKHN0cnVjdCBwY2lidXNfaW5mbyAqcGNpYnVzX2luZm8sIGludCBpbmRleCkKIHsKIAotCXZvbGF0aWxlIHVpbnQ2NF90IGF0ZTsKKwl2b2xhdGlsZSB1NjQgYXRlOwogCWludCBjb3VudDsKLQl1aW50NjRfdCBmbGFnczsKKwl1NjQgZmxhZ3M7CiAKIAlpZiAocGNpYnJfaW52YWxpZGF0ZV9hdGUpIHsKIAkJLyogRm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgY2xlYXIgdGhlIHZhbGlkIGJpdCBpbiB0aGUgQVRFICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYwppbmRleCBlNjgzMzJkLi41NGNlNWI3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfZG1hLmMKQEAgLTQxLDIxICs0MSwyMSBAQAogCiBzdGF0aWMgZG1hX2FkZHJfdAogcGNpYnJfZG1hbWFwX2F0ZTMyKHN0cnVjdCBwY2lkZXZfaW5mbyAqaW5mbywKLQkJICAgdWludDY0X3QgcGFkZHIsIHNpemVfdCByZXFfc2l6ZSwgdWludDY0X3QgZmxhZ3MpCisJCSAgIHU2NCBwYWRkciwgc2l6ZV90IHJlcV9zaXplLCB1NjQgZmxhZ3MpCiB7CiAKIAlzdHJ1Y3QgcGNpZGV2X2luZm8gKnBjaWRldl9pbmZvID0gaW5mby0+cGRpX2hvc3RfcGNpZGV2X2luZm87CiAJc3RydWN0IHBjaWJ1c19pbmZvICpwY2lidXNfaW5mbyA9IChzdHJ1Y3QgcGNpYnVzX2luZm8gKilwY2lkZXZfaW5mby0+CiAJICAgIHBkaV9wY2lidXNfaW5mbzsKLQl1aW50OF90IGludGVybmFsX2RldmljZSA9IChQQ0lfU0xPVChwY2lkZXZfaW5mby0+cGRpX2hvc3RfcGNpZGV2X2luZm8tPgorCXU4IGludGVybmFsX2RldmljZSA9IChQQ0lfU0xPVChwY2lkZXZfaW5mby0+cGRpX2hvc3RfcGNpZGV2X2luZm8tPgogCQkJCQkgICAgcGRpX2xpbnV4X3BjaWRldi0+ZGV2Zm4pKSAtIDE7CiAJaW50IGF0ZV9jb3VudDsKIAlpbnQgYXRlX2luZGV4OwotCXVpbnQ2NF90IGF0ZV9mbGFncyA9IGZsYWdzIHwgUENJMzJfQVRFX1Y7Ci0JdWludDY0X3QgYXRlOwotCXVpbnQ2NF90IHBjaV9hZGRyOwotCXVpbnQ2NF90IHhpb19hZGRyOwotCXVpbnQ2NF90IG9mZnNldDsKKwl1NjQgYXRlX2ZsYWdzID0gZmxhZ3MgfCBQQ0kzMl9BVEVfVjsKKwl1NjQgYXRlOworCXU2NCBwY2lfYWRkcjsKKwl1NjQgeGlvX2FkZHI7CisJdTY0IG9mZnNldDsKIAogCS8qIFBJQyBpbiBQQ0ktWCBtb2RlIGRvZXMgbm90IHN1cHBvcnRzIDMyYml0IFBhZ2VNYXAgbW9kZSAqLwogCWlmIChJU19QSUNfU09GVChwY2lidXNfaW5mbykgJiYgSVNfUENJWChwY2lidXNfaW5mbykpIHsKQEAgLTEwOSwxMiArMTA5LDEyIEBACiB9CiAKIHN0YXRpYyBkbWFfYWRkcl90Ci1wY2licl9kbWF0cmFuc19kaXJlY3Q2NChzdHJ1Y3QgcGNpZGV2X2luZm8gKiBpbmZvLCB1aW50NjRfdCBwYWRkciwKLQkJCXVpbnQ2NF90IGRtYV9hdHRyaWJ1dGVzKQorcGNpYnJfZG1hdHJhbnNfZGlyZWN0NjQoc3RydWN0IHBjaWRldl9pbmZvICogaW5mbywgdTY0IHBhZGRyLAorCQkJdTY0IGRtYV9hdHRyaWJ1dGVzKQogewogCXN0cnVjdCBwY2lidXNfaW5mbyAqcGNpYnVzX2luZm8gPSAoc3RydWN0IHBjaWJ1c19pbmZvICopCiAJICAgICgoaW5mby0+cGRpX2hvc3RfcGNpZGV2X2luZm8pLT5wZGlfcGNpYnVzX2luZm8pOwotCXVpbnQ2NF90IHBjaV9hZGRyOworCXU2NCBwY2lfYWRkcjsKIAogCS8qIFRyYW5zbGF0ZSB0byBDcm9zc3RhbGsgVmlldyBvZiBQaHlzaWNhbCBBZGRyZXNzICovCiAJcGNpX2FkZHIgPSAoSVNfUElDX1NPRlQocGNpYnVzX2luZm8pID8gUEhZU19UT19ETUEocGFkZHIpIDoKQEAgLTEyNyw3ICsxMjcsNyBAQAogCS8qIEhhbmRsZSBCcmlkZ2UgQ2hpcHNldCBkaWZmZXJlbmNlcyAqLwogCWlmIChJU19QSUNfU09GVChwY2lidXNfaW5mbykpIHsKIAkJcGNpX2FkZHIgfD0KLQkJICAgICgodWludDY0X3QpIHBjaWJ1c19pbmZvLT4KKwkJICAgICgodTY0KSBwY2lidXNfaW5mby0+CiAJCSAgICAgcGJpX2h1Yl94aWQgPDwgUElDX1BDSTY0X0FUVFJfVEFSR19TSEZUKTsKIAl9IGVsc2UKIAkJcGNpX2FkZHIgfD0gVElPQ1BfUENJNjRfQ01EVFlQRV9NRU07CkBAIC0xNDIsMTcgKzE0MiwxNyBAQAogCiBzdGF0aWMgZG1hX2FkZHJfdAogcGNpYnJfZG1hdHJhbnNfZGlyZWN0MzIoc3RydWN0IHBjaWRldl9pbmZvICogaW5mbywKLQkJCXVpbnQ2NF90IHBhZGRyLCBzaXplX3QgcmVxX3NpemUsIHVpbnQ2NF90IGZsYWdzKQorCQkJdTY0IHBhZGRyLCBzaXplX3QgcmVxX3NpemUsIHU2NCBmbGFncykKIHsKIAogCXN0cnVjdCBwY2lkZXZfaW5mbyAqcGNpZGV2X2luZm8gPSBpbmZvLT5wZGlfaG9zdF9wY2lkZXZfaW5mbzsKIAlzdHJ1Y3QgcGNpYnVzX2luZm8gKnBjaWJ1c19pbmZvID0gKHN0cnVjdCBwY2lidXNfaW5mbyAqKXBjaWRldl9pbmZvLT4KIAkgICAgcGRpX3BjaWJ1c19pbmZvOwotCXVpbnQ2NF90IHhpb19hZGRyOworCXU2NCB4aW9fYWRkcjsKIAotCXVpbnQ2NF90IHhpb19iYXNlOwotCXVpbnQ2NF90IG9mZnNldDsKLQl1aW50NjRfdCBlbmRvZmY7CisJdTY0IHhpb19iYXNlOworCXU2NCBvZmZzZXQ7CisJdTY0IGVuZG9mZjsKIAogCWlmIChJU19QQ0lYKHBjaWJ1c19pbmZvKSkgewogCQlyZXR1cm4gMDsKQEAgLTIwOSwxNCArMjA5LDE0IEBACiAgKiB1bmxpa2UgdGhlIFBJQyBEZXZpY2UoeCkgV3JpdGUgUmVxdWVzdCBCdWZmZXIgRmx1c2ggcmVnaXN0ZXIuCiAgKi8KIAotdm9pZCBzbl9kbWFfZmx1c2godWludDY0X3QgYWRkcikKK3ZvaWQgc25fZG1hX2ZsdXNoKHU2NCBhZGRyKQogewogCW5hc2lkX3QgbmFzaWQ7CiAJaW50IGlzX3RpbzsKIAlpbnQgd2lkX251bTsKIAlpbnQgaSwgajsKLQl1aW50NjRfdCBmbGFnczsKLQl1aW50NjRfdCBpdHRlOworCXU2NCBmbGFnczsKKwl1NjQgaXR0ZTsKIAlzdHJ1Y3QgaHViZGV2X2luZm8gKmh1YmluZm87CiAJdm9sYXRpbGUgc3RydWN0IHNuX2ZsdXNoX2RldmljZV9rZXJuZWwgKnA7CiAJdm9sYXRpbGUgc3RydWN0IHNuX2ZsdXNoX2RldmljZV9jb21tb24gKmNvbW1vbjsKQEAgLTI5OSw4ICsyOTksOCBAQAogCQkgKiBJZiBDRSBldmVyIG5lZWRzIHRoZSBzbl9kbWFfZmx1c2ggbWVjaGFuaXNtLCB3ZSB3aWxsIGhhdmUKIAkJICogdG8gYWNjb3VudCBmb3IgdGhhdCBoZXJlIGFuZCBpbiB0aW9jZV9idXNfZml4dXAoKS4KIAkgCSAqLwotCQl1aW50MzJfdCB0aW9faWQgPSBIVUJfTChUSU9fSU9TUEFDRV9BRERSKG5hc2lkLCBUSU9fTk9ERV9JRCkpOwotCQl1aW50MzJfdCByZXZudW0gPSBYV0lER0VUX1BBUlRfUkVWX05VTSh0aW9faWQpOworCQl1MzIgdGlvX2lkID0gSFVCX0woVElPX0lPU1BBQ0VfQUREUihuYXNpZCwgVElPX05PREVfSUQpKTsKKwkJdTMyIHJldm51bSA9IFhXSURHRVRfUEFSVF9SRVZfTlVNKHRpb19pZCk7CiAKIAkJLyogVElPQ1AgQlJJTkdVUCBXQVIgKFBWOTA3NTE2KTogRG9uJ3Qgd3JpdGUgYnVmZmVyIGZsdXNoIHJlZyAqLwogCQlpZiAoKDEgPDwgWFdJREdFVF9QQVJUX1JFVl9OVU1fUkVWKHJldm51bSkpICYgUFY5MDc1MTYpIHsKQEAgLTMxNSw3ICszMTUsNyBAQAogCQkqY29tbW9uLT5zZmRsX2ZsdXNoX2FkZHIgPSAwOwogCiAJCS8qIGZvcmNlIGFuIGludGVycnVwdC4gKi8KLQkJKih2b2xhdGlsZSB1aW50MzJfdCAqKShjb21tb24tPnNmZGxfZm9yY2VfaW50X2FkZHIpID0gMTsKKwkJKih2b2xhdGlsZSB1MzIgKikoY29tbW9uLT5zZmRsX2ZvcmNlX2ludF9hZGRyKSA9IDE7CiAKIAkJLyogd2FpdCBmb3IgdGhlIGludGVycnVwdCB0byBjb21lIGJhY2suICovCiAJCXdoaWxlICgqKGNvbW1vbi0+c2ZkbF9mbHVzaF9hZGRyKSAhPSAweDEwZikKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcHJvdmlkZXIuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcHJvdmlkZXIuYwppbmRleCBlMzI4ZTk0Li43N2ExMjYyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3Byb3ZpZGVyLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9wcm92aWRlci5jCkBAIC0yMyw3ICsyMyw3IEBACiBzYWxfcGNpYnJfc2xvdF9lbmFibGUoc3RydWN0IHBjaWJ1c19pbmZvICpzb2Z0LCBpbnQgZGV2aWNlLCB2b2lkICpyZXNwKQogewogCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOwotCXVpbnQ2NF90IGJ1c251bTsKKwl1NjQgYnVzbnVtOwogCiAJcmV0X3N0dWZmLnN0YXR1cyA9IDA7CiAJcmV0X3N0dWZmLnYwID0gMDsKQEAgLTQwLDcgKzQwLDcgQEAKIAkJICAgICAgIHZvaWQgKnJlc3ApCiB7CiAJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7Ci0JdWludDY0X3QgYnVzbnVtOworCXU2NCBidXNudW07CiAKIAlyZXRfc3R1ZmYuc3RhdHVzID0gMDsKIAlyZXRfc3R1ZmYudjAgPSAwOwpAQCAtNTYsNyArNTYsNyBAQAogc3RhdGljIGludCBzYWxfcGNpYnJfZXJyb3JfaW50ZXJydXB0KHN0cnVjdCBwY2lidXNfaW5mbyAqc29mdCkKIHsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJldF9zdHVmZjsKLQl1aW50NjRfdCBidXNudW07CisJdTY0IGJ1c251bTsKIAlpbnQgc2VnbWVudDsKIAlyZXRfc3R1ZmYuc3RhdHVzID0gMDsKIAlyZXRfc3R1ZmYudjAgPSAwOwpAQCAtMTU5LDkgKzE1OSw5IEBACiAJLyogU2V0dXAgdGhlIFBNVSBBVEUgbWFwICovCiAJc29mdC0+cGJpX2ludF9hdGVfcmVzb3VyY2UubG93ZXN0X2ZyZWVfaW5kZXggPSAwOwogCXNvZnQtPnBiaV9pbnRfYXRlX3Jlc291cmNlLmF0ZSA9Ci0JICAgIGttYWxsb2Moc29mdC0+cGJpX2ludF9hdGVfc2l6ZSAqIHNpemVvZih1aW50NjRfdCksIEdGUF9LRVJORUwpOworCSAgICBrbWFsbG9jKHNvZnQtPnBiaV9pbnRfYXRlX3NpemUgKiBzaXplb2YodTY0KSwgR0ZQX0tFUk5FTCk7CiAJbWVtc2V0KHNvZnQtPnBiaV9pbnRfYXRlX3Jlc291cmNlLmF0ZSwgMCwKLSAJICAgICAgIChzb2Z0LT5wYmlfaW50X2F0ZV9zaXplICogc2l6ZW9mKHVpbnQ2NF90KSkpOworIAkgICAgICAgKHNvZnQtPnBiaV9pbnRfYXRlX3NpemUgKiBzaXplb2YodTY0KSkpOwogCiAJaWYgKHByb21fYnVzc29mdC0+YnNfYXNpY190eXBlID09IFBDSUlPX0FTSUNfVFlQRV9USU9DUCkgewogCQkvKiBUSU8gUENJIEJyaWRnZTogZmluZCBuZWFyZXN0IG5vZGUgd2l0aCBDUFVzICovCkBAIC0yMDMsNyArMjAzLDcgQEAKIAlzdHJ1Y3QgcGNpZGV2X2luZm8gKnBjaWRldl9pbmZvOwogCXN0cnVjdCBwY2lidXNfaW5mbyAqcGNpYnVzX2luZm87CiAJaW50IGJpdCA9IHNuX2lycV9pbmZvLT5pcnFfaW50X2JpdDsKLQl1aW50NjRfdCB4dGFsa19hZGRyID0gc25faXJxX2luZm8tPmlycV94dGFsa2FkZHI7CisJdTY0IHh0YWxrX2FkZHIgPSBzbl9pcnFfaW5mby0+aXJxX3h0YWxrYWRkcjsKIAogCXBjaWRldl9pbmZvID0gKHN0cnVjdCBwY2lkZXZfaW5mbyAqKXNuX2lycV9pbmZvLT5pcnFfcGNpaW9pbmZvOwogCWlmIChwY2lkZXZfaW5mbykgewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9yZWcuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcmVnLmMKaW5kZXggNzlmZGI5MS4uOGI4YmJkNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9yZWcuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3JlZy5jCkBAIC0yMyw3ICsyMyw3IEBACiAvKgogICogQ29udHJvbCBSZWdpc3RlciBBY2Nlc3MgLS0gUmVhZC9Xcml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwXzAwMjAKICAqLwotdm9pZCBwY2lyZWdfY29udHJvbF9iaXRfY2xyKHN0cnVjdCBwY2lidXNfaW5mbyAqcGNpYnVzX2luZm8sIHVpbnQ2NF90IGJpdHMpCit2b2lkIHBjaXJlZ19jb250cm9sX2JpdF9jbHIoc3RydWN0IHBjaWJ1c19pbmZvICpwY2lidXNfaW5mbywgdTY0IGJpdHMpCiB7CiAJdW5pb24gYnJfcHRyIF9faW9tZW0gKnB0ciA9ICh1bmlvbiBicl9wdHIgX19pb21lbSAqKXBjaWJ1c19pbmZvLT5wYmlfYnVzY29tbW9uLmJzX2Jhc2U7CiAKQEAgLTQzLDcgKzQzLDcgQEAKIAl9CiB9CiAKLXZvaWQgcGNpcmVnX2NvbnRyb2xfYml0X3NldChzdHJ1Y3QgcGNpYnVzX2luZm8gKnBjaWJ1c19pbmZvLCB1aW50NjRfdCBiaXRzKQordm9pZCBwY2lyZWdfY29udHJvbF9iaXRfc2V0KHN0cnVjdCBwY2lidXNfaW5mbyAqcGNpYnVzX2luZm8sIHU2NCBiaXRzKQogewogCXVuaW9uIGJyX3B0ciBfX2lvbWVtICpwdHIgPSAodW5pb24gYnJfcHRyIF9faW9tZW0gKilwY2lidXNfaW5mby0+cGJpX2J1c2NvbW1vbi5ic19iYXNlOwogCkBAIC02NiwxMCArNjYsMTAgQEAKIC8qCiAgKiBQQ0kvUENJWCBUYXJnZXQgRmx1c2ggUmVnaXN0ZXIgQWNjZXNzIC0tIFJlYWQgT25seQkJICAgIDAwMDBfMDA1MAogICovCi11aW50NjRfdCBwY2lyZWdfdGZsdXNoX2dldChzdHJ1Y3QgcGNpYnVzX2luZm8gKnBjaWJ1c19pbmZvKQordTY0IHBjaXJlZ190Zmx1c2hfZ2V0KHN0cnVjdCBwY2lidXNfaW5mbyAqcGNpYnVzX2luZm8pCiB7CiAJdW5pb24gYnJfcHRyIF9faW9tZW0gKnB0ciA9ICh1bmlvbiBicl9wdHIgX19pb21lbSAqKXBjaWJ1c19pbmZvLT5wYmlfYnVzY29tbW9uLmJzX2Jhc2U7Ci0JdWludDY0X3QgcmV0ID0gMDsKKwl1NjQgcmV0ID0gMDsKIAogCWlmIChwY2lidXNfaW5mbykgewogCQlzd2l0Y2ggKHBjaWJ1c19pbmZvLT5wYmlfYnJpZGdlX3R5cGUpIHsKQEAgLTk2LDEwICs5NiwxMCBAQAogLyoKICAqIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgQWNjZXNzIC0tIFJlYWQgT25seQkJICAgIDAwMDBfMDEwMAogICovCi11aW50NjRfdCBwY2lyZWdfaW50cl9zdGF0dXNfZ2V0KHN0cnVjdCBwY2lidXNfaW5mbyAqIHBjaWJ1c19pbmZvKQordTY0IHBjaXJlZ19pbnRyX3N0YXR1c19nZXQoc3RydWN0IHBjaWJ1c19pbmZvICogcGNpYnVzX2luZm8pCiB7CiAJdW5pb24gYnJfcHRyIF9faW9tZW0gKnB0ciA9ICh1bmlvbiBicl9wdHIgX19pb21lbSAqKXBjaWJ1c19pbmZvLT5wYmlfYnVzY29tbW9uLmJzX2Jhc2U7Ci0JdWludDY0X3QgcmV0ID0gMDsKKwl1NjQgcmV0ID0gMDsKIAogCWlmIChwY2lidXNfaW5mbykgewogCQlzd2l0Y2ggKHBjaWJ1c19pbmZvLT5wYmlfYnJpZGdlX3R5cGUpIHsKQEAgLTEyMSw3ICsxMjEsNyBAQAogLyoKICAqIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgQWNjZXNzIC0tIFJlYWQvV3JpdGUgICAgICAgICAgICAgICAgICAgMDAwMF8wMTA4CiAgKi8KLXZvaWQgcGNpcmVnX2ludHJfZW5hYmxlX2JpdF9jbHIoc3RydWN0IHBjaWJ1c19pbmZvICpwY2lidXNfaW5mbywgdWludDY0X3QgYml0cykKK3ZvaWQgcGNpcmVnX2ludHJfZW5hYmxlX2JpdF9jbHIoc3RydWN0IHBjaWJ1c19pbmZvICpwY2lidXNfaW5mbywgdTY0IGJpdHMpCiB7CiAJdW5pb24gYnJfcHRyIF9faW9tZW0gKnB0ciA9ICh1bmlvbiBicl9wdHIgX19pb21lbSAqKXBjaWJ1c19pbmZvLT5wYmlfYnVzY29tbW9uLmJzX2Jhc2U7CiAKQEAgLTE0MSw3ICsxNDEsNyBAQAogCX0KIH0KIAotdm9pZCBwY2lyZWdfaW50cl9lbmFibGVfYml0X3NldChzdHJ1Y3QgcGNpYnVzX2luZm8gKnBjaWJ1c19pbmZvLCB1aW50NjRfdCBiaXRzKQordm9pZCBwY2lyZWdfaW50cl9lbmFibGVfYml0X3NldChzdHJ1Y3QgcGNpYnVzX2luZm8gKnBjaWJ1c19pbmZvLCB1NjQgYml0cykKIHsKIAl1bmlvbiBicl9wdHIgX19pb21lbSAqcHRyID0gKHVuaW9uIGJyX3B0ciBfX2lvbWVtICopcGNpYnVzX2luZm8tPnBiaV9idXNjb21tb24uYnNfYmFzZTsKIApAQCAtMTY1LDcgKzE2NSw3IEBACiAgKiBJbnRyIEhvc3QgQWRkcmVzcyBSZWdpc3RlciAoaW50X2FkZHIpIC0tIFJlYWQvV3JpdGUgIDAwMDBfMDEzMCAtIDAwMDBfMDE2OAogICovCiB2b2lkIHBjaXJlZ19pbnRyX2FkZHJfYWRkcl9zZXQoc3RydWN0IHBjaWJ1c19pbmZvICpwY2lidXNfaW5mbywgaW50IGludF9uLAotCQkJICAgICAgIHVpbnQ2NF90IGFkZHIpCisJCQkgICAgICAgdTY0IGFkZHIpCiB7CiAJdW5pb24gYnJfcHRyIF9faW9tZW0gKnB0ciA9ICh1bmlvbiBicl9wdHIgX19pb21lbSAqKXBjaWJ1c19pbmZvLT5wYmlfYnVzY29tbW9uLmJzX2Jhc2U7CiAKQEAgLTIxNywxMCArMjE3LDEwIEBACiAvKgogICogRGV2aWNlKHgpIFdyaXRlIEJ1ZmZlciBGbHVzaCBSZWcgQWNjZXNzIC0tIFJlYWQgT25seSAwMDAwXzAyNDAgLSAwMDAwXzAyNTgKICAqLwotdWludDY0X3QgcGNpcmVnX3dyYl9mbHVzaF9nZXQoc3RydWN0IHBjaWJ1c19pbmZvICpwY2lidXNfaW5mbywgaW50IGRldmljZSkKK3U2NCBwY2lyZWdfd3JiX2ZsdXNoX2dldChzdHJ1Y3QgcGNpYnVzX2luZm8gKnBjaWJ1c19pbmZvLCBpbnQgZGV2aWNlKQogewogCXVuaW9uIGJyX3B0ciBfX2lvbWVtICpwdHIgPSAodW5pb24gYnJfcHRyIF9faW9tZW0gKilwY2lidXNfaW5mby0+cGJpX2J1c2NvbW1vbi5ic19iYXNlOwotCXVpbnQ2NF90IHJldCA9IDA7CisJdTY0IHJldCA9IDA7CiAKIAlpZiAocGNpYnVzX2luZm8pIHsKIAkJc3dpdGNoIChwY2lidXNfaW5mby0+cGJpX2JyaWRnZV90eXBlKSB7CkBAIC0yNDIsNyArMjQyLDcgQEAKIH0KIAogdm9pZCBwY2lyZWdfaW50X2F0ZV9zZXQoc3RydWN0IHBjaWJ1c19pbmZvICpwY2lidXNfaW5mbywgaW50IGF0ZV9pbmRleCwKLQkJCXVpbnQ2NF90IHZhbCkKKwkJCXU2NCB2YWwpCiB7CiAJdW5pb24gYnJfcHRyIF9faW9tZW0gKnB0ciA9ICh1bmlvbiBicl9wdHIgX19pb21lbSAqKXBjaWJ1c19pbmZvLT5wYmlfYnVzY29tbW9uLmJzX2Jhc2U7CiAKQEAgLTI2MiwxMCArMjYyLDEwIEBACiAJfQogfQogCi11aW50NjRfdCBfX2lvbWVtICpwY2lyZWdfaW50X2F0ZV9hZGRyKHN0cnVjdCBwY2lidXNfaW5mbyAqcGNpYnVzX2luZm8sIGludCBhdGVfaW5kZXgpCit1NjQgX19pb21lbSAqcGNpcmVnX2ludF9hdGVfYWRkcihzdHJ1Y3QgcGNpYnVzX2luZm8gKnBjaWJ1c19pbmZvLCBpbnQgYXRlX2luZGV4KQogewogCXVuaW9uIGJyX3B0ciBfX2lvbWVtICpwdHIgPSAodW5pb24gYnJfcHRyIF9faW9tZW0gKilwY2lidXNfaW5mby0+cGJpX2J1c2NvbW1vbi5ic19iYXNlOwotCXVpbnQ2NF90IF9faW9tZW0gKnJldCA9IE5VTEw7CisJdTY0IF9faW9tZW0gKnJldCA9IE5VTEw7CiAKIAlpZiAocGNpYnVzX2luZm8pIHsKIAkJc3dpdGNoIChwY2lidXNfaW5mby0+cGJpX2JyaWRnZV90eXBlKSB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMKaW5kZXggMjdhYTE4NC4uNzU3MWE0MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jYV9wcm92aWRlci5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2FfcHJvdmlkZXIuYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9zbi9wY2lidXNfcHJvdmlkZXJfZGVmcy5oPgogI2luY2x1ZGUgPGFzbS9zbi90aW9jYV9wcm92aWRlci5oPgogCi11aW50MzJfdCB0aW9jYV9nYXJ0X2ZvdW5kOwordTMyIHRpb2NhX2dhcnRfZm91bmQ7CiBFWFBPUlRfU1lNQk9MKHRpb2NhX2dhcnRfZm91bmQpOwkvKiB1c2VkIGJ5IGFncC1zZ2kgKi8KIAogTElTVF9IRUFEKHRpb2NhX2xpc3QpOwpAQCAtMzQsOCArMzQsOCBAQAogc3RhdGljIGludAogdGlvY2FfZ2FydF9pbml0KHN0cnVjdCB0aW9jYV9rZXJuZWwgKnRpb2NhX2tlcm4pCiB7Ci0JdWludDY0X3QgYXBfcmVnOwotCXVpbnQ2NF90IG9mZnNldDsKKwl1NjQgYXBfcmVnOworCXU2NCBvZmZzZXQ7CiAJc3RydWN0IHBhZ2UgKnRtcDsKIAlzdHJ1Y3QgdGlvY2FfY29tbW9uICp0aW9jYV9jb21tb247CiAJc3RydWN0IHRpb2NhIF9faW9tZW0gKmNhX2Jhc2U7CkBAIC0yMTQsNyArMjE0LDcgQEAKIHRpb2NhX2Zhc3R3cml0ZV9lbmFibGUoc3RydWN0IHRpb2NhX2tlcm5lbCAqdGlvY2Ffa2VybikKIHsKIAlpbnQgY2FwX3B0cjsKLQl1aW50MzJfdCByZWc7CisJdTMyIHJlZzsKIAlzdHJ1Y3QgdGlvY2EgX19pb21lbSAqdGlvY2FfYmFzZTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAlzdHJ1Y3QgdGlvY2FfY29tbW9uICpjb21tb247CkBAIC0yNzYsNyArMjc2LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Ugd2lsbCBhbHdheXMgdXNlIDB4MQogICogNTU6NTUgLSBTd2FwIGJ5dGVzCQkgICBDdXJyZW50bHkgdW51c2VkCiAgKi8KLXN0YXRpYyB1aW50NjRfdAorc3RhdGljIHU2NAogdGlvY2FfZG1hX2Q2NCh1bnNpZ25lZCBsb25nIHBhZGRyKQogewogCWRtYV9hZGRyX3QgYnVzX2FkZHI7CkBAIC0zMTgsMTUgKzMxOCwxNSBAQAogICogYW5kIHNvIGEgZ2l2ZW4gQ0EgY2FuIG9ubHkgZGlyZWN0bHkgdGFyZ2V0IG5vZGVzIGluIHRoZSByYW5nZQogICogeHh4IC0geHh4KzI1NS4KICAqLwotc3RhdGljIHVpbnQ2NF90Ci10aW9jYV9kbWFfZDQ4KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1aW50NjRfdCBwYWRkcikKK3N0YXRpYyB1NjQKK3Rpb2NhX2RtYV9kNDgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU2NCBwYWRkcikKIHsKIAlzdHJ1Y3QgdGlvY2FfY29tbW9uICp0aW9jYV9jb21tb247CiAJc3RydWN0IHRpb2NhIF9faW9tZW0gKmNhX2Jhc2U7Ci0JdWludDY0X3QgY3RfYWRkcjsKKwl1NjQgY3RfYWRkcjsKIAlkbWFfYWRkcl90IGJ1c19hZGRyOwotCXVpbnQzMl90IG5vZGVfdXBwZXI7Ci0JdWludDY0X3QgYWdwX2RtYV9leHRuOworCXUzMiBub2RlX3VwcGVyOworCXU2NCBhZ3BfZG1hX2V4dG47CiAJc3RydWN0IHBjaWRldl9pbmZvICpwY2lkZXZfaW5mbyA9IFNOX1BDSURFVl9JTkZPKHBkZXYpOwogCiAJdGlvY2FfY29tbW9uID0gKHN0cnVjdCB0aW9jYV9jb21tb24gKilwY2lkZXZfaW5mby0+cGRpX3BjaWJ1c19pbmZvOwpAQCAtMzY3LDEwICszNjcsMTAgQEAKICAqIGRtYV9hZGRyX3QgaXMgZ3VhcmVudGVlZCB0byBiZSBjb250aWd1b3VzIGluIENBIGJ1cyBzcGFjZS4KICAqLwogc3RhdGljIGRtYV9hZGRyX3QKLXRpb2NhX2RtYV9tYXBwZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVpbnQ2NF90IHBhZGRyLCBzaXplX3QgcmVxX3NpemUpCit0aW9jYV9kbWFfbWFwcGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1NjQgcGFkZHIsIHNpemVfdCByZXFfc2l6ZSkKIHsKIAlpbnQgaSwgcHMsIHBzX3NoaWZ0LCBlbnRyeSwgZW50cmllcywgbWFwc2l6ZSwgbGFzdF9lbnRyeTsKLQl1aW50NjRfdCB4aW9fYWRkciwgZW5kX3hpb19hZGRyOworCXU2NCB4aW9fYWRkciwgZW5kX3hpb19hZGRyOwogCXN0cnVjdCB0aW9jYV9jb21tb24gKnRpb2NhX2NvbW1vbjsKIAlzdHJ1Y3QgdGlvY2Ffa2VybmVsICp0aW9jYV9rZXJuOwogCWRtYV9hZGRyX3QgYnVzX2FkZHIgPSAwOwpAQCAtNTE0LDEwICs1MTQsMTAgQEAKICAqIFRoZSBtYXBwaW5nIG1vZGUgdXNlZCBpcyBiYXNlZCBvbiB0aGUgZGV2aWNlcyBkbWFfbWFzay4gIEFzIGEgbGFzdCByZXNvcnQKICAqIHVzZSB0aGUgR0FSVCBtYXBwZWQgbW9kZS4KICAqLwotc3RhdGljIHVpbnQ2NF90Ci10aW9jYV9kbWFfbWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1aW50NjRfdCBwYWRkciwgc2l6ZV90IGJ5dGVfY291bnQpCitzdGF0aWMgdTY0Cit0aW9jYV9kbWFfbWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1NjQgcGFkZHIsIHNpemVfdCBieXRlX2NvdW50KQogewotCXVpbnQ2NF90IG1hcGFkZHI7CisJdTY0IG1hcGFkZHI7CiAKIAkvKgogCSAqIElmIGNhcmQgaXMgNjQgb3IgNDggYml0IGFkZHJlc2FibGUsIHVzZSBhIGRpcmVjdCBtYXBwaW5nLiAgMzIKQEAgLTU1NCw4ICs1NTQsOCBAQAogewogCXN0cnVjdCB0aW9jYV9jb21tb24gKnNvZnQgPSBhcmc7CiAJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7Ci0JdWludDY0X3Qgc2VnbWVudDsKLQl1aW50NjRfdCBidXNudW07CisJdTY0IHNlZ21lbnQ7CisJdTY0IGJ1c251bTsKIAlyZXRfc3R1ZmYuc3RhdHVzID0gMDsKIAlyZXRfc3R1ZmYudjAgPSAwOwogCkBAIC02MjAsNyArNjIwLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmdGlvY2Ffa2Vybi0+Y2FfZG1hbWFwcyk7CiAJdGlvY2Ffa2Vybi0+Y2FfY2xvc2VzdF9ub2RlID0KIAkgICAgbmFzaWRfdG9fY25vZGVpZCh0aW9jYV9jb21tb24tPmNhX2Nsb3Nlc3RfbmFzaWQpOwotCXRpb2NhX2NvbW1vbi0+Y2Ffa2VybmVsX3ByaXZhdGUgPSAodWludDY0X3QpIHRpb2NhX2tlcm47CisJdGlvY2FfY29tbW9uLT5jYV9rZXJuZWxfcHJpdmF0ZSA9ICh1NjQpIHRpb2NhX2tlcm47CiAKIAlidXMgPSBwY2lfZmluZF9idXModGlvY2FfY29tbW9uLT5jYV9jb21tb24uYnNfcGVyc2lzdF9zZWdtZW50LAogCQl0aW9jYV9jb21tb24tPmNhX2NvbW1vbi5ic19wZXJzaXN0X2J1c251bSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKaW5kZXggZGRhMTk2Yy4uZTUyODMxZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYwpAQCAtODEsMTAgKzgxLDEwIEBACiAgKiA2MSAgICAtIDAgc2luY2UgdGhpcyBpcyBub3QgYW4gTVNJIHRyYW5zYWN0aW9uCiAgKiA2MDo1NCAtIHJlc2VydmVkLCBNQloKICAqLwotc3RhdGljIHVpbnQ2NF90CitzdGF0aWMgdTY0CiB0aW9jZV9kbWFfZDY0KHVuc2lnbmVkIGxvbmcgY3RfYWRkcikKIHsKLQl1aW50NjRfdCBidXNfYWRkcjsKKwl1NjQgYnVzX2FkZHI7CiAKIAlidXNfYWRkciA9IGN0X2FkZHIgfCAoMVVMIDw8IDYzKTsKIApAQCAtMTQxLDkgKzE0MSw5IEBACiAgKiBsZW5ndGgsIGFuZCBpZiBlbm91Z2ggcmVzb3VyY2VzIGV4aXN0LCBmaWxsIGluIHRoZSBBVEUncyBhbmQgY29uc3RydWN0IGEKICAqIHRpb2NlX2RtYW1hcCBzdHJ1Y3QgdG8gdHJhY2sgdGhlIG1hcHBpbmcuCiAgKi8KLXN0YXRpYyB1aW50NjRfdAorc3RhdGljIHU2NAogdGlvY2VfYWxsb2NfbWFwKHN0cnVjdCB0aW9jZV9rZXJuZWwgKmNlX2tlcm4sIGludCB0eXBlLCBpbnQgcG9ydCwKLQkJdWludDY0X3QgY3RfYWRkciwgaW50IGxlbikKKwkJdTY0IGN0X2FkZHIsIGludCBsZW4pCiB7CiAJaW50IGk7CiAJaW50IGo7CkBAIC0xNTIsMTEgKzE1MiwxMSBAQAogCWludCBlbnRyaWVzOwogCWludCBuYXRlczsKIAlpbnQgcGFnZXNpemU7Ci0JdWludDY0X3QgKmF0ZV9zaGFkb3c7Ci0JdWludDY0X3QgKmF0ZV9yZWc7Ci0JdWludDY0X3QgYWRkcjsKKwl1NjQgKmF0ZV9zaGFkb3c7CisJdTY0ICphdGVfcmVnOworCXU2NCBhZGRyOwogCXN0cnVjdCB0aW9jZSAqY2VfbW1yOwotCXVpbnQ2NF90IGJ1c19iYXNlOworCXU2NCBidXNfYmFzZTsKIAlzdHJ1Y3QgdGlvY2VfZG1hbWFwICptYXA7CiAKIAljZV9tbXIgPSAoc3RydWN0IHRpb2NlICopY2Vfa2Vybi0+Y2VfY29tbW9uLT5jZV9wY2lidXMuYnNfYmFzZTsKQEAgLTIyNCw3ICsyMjQsNyBAQAogCiAJYWRkciA9IGN0X2FkZHI7CiAJZm9yIChqID0gMDsgaiA8IG5hdGVzOyBqKyspIHsKLQkJdWludDY0X3QgYXRlOworCQl1NjQgYXRlOwogCiAJCWF0ZSA9IEFURV9NQUtFKGFkZHIsIHBhZ2VzaXplKTsKIAkJYXRlX3NoYWRvd1tpICsgal0gPSBhdGU7CkBAIC0yNTIsMTUgKzI1MiwxNSBAQAogICoKICAqIE1hcCBAcGFkZHIgaW50byAzMi1iaXQgYnVzIHNwYWNlIG9mIHRoZSBDRSBhc3NvY2lhdGVkIHdpdGggQHBjaWRldl9pbmZvLgogICovCi1zdGF0aWMgdWludDY0X3QKLXRpb2NlX2RtYV9kMzIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVpbnQ2NF90IGN0X2FkZHIpCitzdGF0aWMgdTY0Cit0aW9jZV9kbWFfZDMyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1NjQgY3RfYWRkcikKIHsKIAlpbnQgZG1hX29rOwogCWludCBwb3J0OwogCXN0cnVjdCB0aW9jZSAqY2VfbW1yOwogCXN0cnVjdCB0aW9jZV9rZXJuZWwgKmNlX2tlcm47Ci0JdWludDY0X3QgY3RfdXBwZXI7Ci0JdWludDY0X3QgY3RfbG93ZXI7CisJdTY0IGN0X3VwcGVyOworCXU2NCBjdF9sb3dlcjsKIAlkbWFfYWRkcl90IGJ1c19hZGRyOwogCiAJY3RfdXBwZXIgPSBjdF9hZGRyICYgfjB4M2ZmZmZmZmZVTDsKQEAgLTI2OSw3ICsyNjksNyBAQAogCXBjaWRldl90b190aW9jZShwZGV2LCAmY2VfbW1yLCAmY2Vfa2VybiwgJnBvcnQpOwogCiAJaWYgKGNlX2tlcm4tPmNlX3BvcnRbcG9ydF0uZGlybWFwX3JlZmNudCA9PSAwKSB7Ci0JCXVpbnQ2NF90IHRtcDsKKwkJdTY0IHRtcDsKIAogCQljZV9rZXJuLT5jZV9wb3J0W3BvcnRdLmRpcm1hcF9zaGFkb3cgPSBjdF91cHBlcjsKIAkJd3JpdGVxKGN0X3VwcGVyLCAmY2VfbW1yLT5jZV91cmVfZGlyX21hcFtwb3J0XSk7CkBAIC0yOTUsMTAgKzI5NSwxMCBAQAogICogR2l2ZW4gYSBUSU9DRSBidXMgYWRkcmVzcywgc2V0IHRoZSBhcHByb3ByaWF0ZSBiaXQgdG8gaW5kaWNhdGUgYmFycmllcgogICogYXR0cmlidXRlcy4KICAqLwotc3RhdGljIHVpbnQ2NF90Ci10aW9jZV9kbWFfYmFycmllcih1aW50NjRfdCBidXNfYWRkciwgaW50IG9uKQorc3RhdGljIHU2NAordGlvY2VfZG1hX2JhcnJpZXIodTY0IGJ1c19hZGRyLCBpbnQgb24pCiB7Ci0JdWludDY0X3QgYmFycmllcl9iaXQ7CisJdTY0IGJhcnJpZXJfYml0OwogCiAJLyogYmFycmllciBub3Qgc3VwcG9ydGVkIGluIE00MC9NNDBTIG1vZGUgKi8KIAlpZiAoVElPQ0VfTTQwX0FERFIoYnVzX2FkZHIpIHx8IFRJT0NFX000MFNfQUREUihidXNfYWRkcikpCkBAIC0zNTEsNyArMzUxLDcgQEAKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcCwgJmNlX2tlcm4tPmNlX2RtYW1hcF9saXN0LAogCQkJCSAgICBjZV9kbWFtYXBfbGlzdCkgewotCQkJdWludDY0X3QgbGFzdDsKKwkJCXU2NCBsYXN0OwogCiAJCQlsYXN0ID0gbWFwLT5wY2lfc3RhcnQgKyBtYXAtPm5ieXRlcyAtIDE7CiAJCQlpZiAoYnVzX2FkZHIgPj0gbWFwLT5wY2lfc3RhcnQgJiYgYnVzX2FkZHIgPD0gbGFzdCkKQEAgLTM4NSwxNyArMzg1LDE3IEBACiAgKiBUaGlzIGlzIHRoZSBtYWluIHdyYXBwZXIgZm9yIG1hcHBpbmcgaG9zdCBwaHlzaWNhbCBwYWdlcyB0byBDRSBQQ0kgc3BhY2UuCiAgKiBUaGUgbWFwcGluZyBtb2RlIHVzZWQgaXMgYmFzZWQgb24gdGhlIGRldmljZSdzIGRtYV9tYXNrLgogICovCi1zdGF0aWMgdWludDY0X3QKLXRpb2NlX2RvX2RtYV9tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVpbnQ2NF90IHBhZGRyLCBzaXplX3QgYnl0ZV9jb3VudCwKK3N0YXRpYyB1NjQKK3Rpb2NlX2RvX2RtYV9tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU2NCBwYWRkciwgc2l6ZV90IGJ5dGVfY291bnQsCiAJCSBpbnQgYmFycmllcikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVpbnQ2NF90IGN0X2FkZHI7Ci0JdWludDY0X3QgbWFwYWRkciA9IDA7CisJdTY0IGN0X2FkZHI7CisJdTY0IG1hcGFkZHIgPSAwOwogCXN0cnVjdCB0aW9jZV9rZXJuZWwgKmNlX2tlcm47CiAJc3RydWN0IHRpb2NlX2RtYW1hcCAqbWFwOwogCWludCBwb3J0OwotCXVpbnQ2NF90IGRtYV9tYXNrOworCXU2NCBkbWFfbWFzazsKIAogCWRtYV9tYXNrID0gKGJhcnJpZXIpID8gcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrIDogcGRldi0+ZG1hX21hc2s7CiAKQEAgLTQyNSw3ICs0MjUsNyBAQAogCSAqIGFkZHJlc3MgYml0cyB0aGFuIHRoaXMgZGV2aWNlIGNhbiBzdXBwb3J0LgogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkobWFwLCAmY2Vfa2Vybi0+Y2VfZG1hbWFwX2xpc3QsIGNlX2RtYW1hcF9saXN0KSB7Ci0JCXVpbnQ2NF90IGxhc3Q7CisJCXU2NCBsYXN0OwogCiAJCWxhc3QgPSBtYXAtPmN0X3N0YXJ0ICsgbWFwLT5uYnl0ZXMgLSAxOwogCQlpZiAoY3RfYWRkciA+PSBtYXAtPmN0X3N0YXJ0ICYmCkBAIC01MDEsOCArNTAxLDggQEAKICAqIFNpbXBseSBjYWxsIHRpb2NlX2RvX2RtYV9tYXAoKSB0byBjcmVhdGUgYSBtYXAgd2l0aCB0aGUgYmFycmllciBiaXQgY2xlYXIKICAqIGluIHRoZSBhZGRyZXNzLgogICovCi1zdGF0aWMgdWludDY0X3QKLXRpb2NlX2RtYShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdWludDY0X3QgcGFkZHIsIHNpemVfdCBieXRlX2NvdW50KQorc3RhdGljIHU2NAordGlvY2VfZG1hKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1NjQgcGFkZHIsIHNpemVfdCBieXRlX2NvdW50KQogewogCXJldHVybiB0aW9jZV9kb19kbWFfbWFwKHBkZXYsIHBhZGRyLCBieXRlX2NvdW50LCAwKTsKIH0KQEAgLTUxNSw4ICs1MTUsOCBAQAogICoKICAqIFNpbXBseSBjYWxsIHRpb2NlX2RvX2RtYV9tYXAoKSB0byBjcmVhdGUgYSBtYXAgd2l0aCB0aGUgYmFycmllciBiaXQgc2V0CiAgKiBpbiB0aGUgYWRkcmVzcy4KLSAqLyBzdGF0aWMgdWludDY0X3QKLXRpb2NlX2RtYV9jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1aW50NjRfdCBwYWRkciwgc2l6ZV90IGJ5dGVfY291bnQpCisgKi8gc3RhdGljIHU2NAordGlvY2VfZG1hX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU2NCBwYWRkciwgc2l6ZV90IGJ5dGVfY291bnQpCiB7CiAJcmV0dXJuIHRpb2NlX2RvX2RtYV9tYXAocGRldiwgcGFkZHIsIGJ5dGVfY291bnQsIDEpOwogfQpAQCAtNTUxLDcgKzU1MSw3IEBACiB0aW9jZV9rZXJuX2luaXQoc3RydWN0IHRpb2NlX2NvbW1vbiAqdGlvY2VfY29tbW9uKQogewogCWludCBpOwotCXVpbnQzMl90IHRtcDsKKwl1MzIgdG1wOwogCXN0cnVjdCB0aW9jZSAqdGlvY2VfbW1yOwogCXN0cnVjdCB0aW9jZV9rZXJuZWwgKnRpb2NlX2tlcm47CiAKQEAgLTU2Myw3ICs1NjMsNyBAQAogCXRpb2NlX2tlcm4tPmNlX2NvbW1vbiA9IHRpb2NlX2NvbW1vbjsKIAlzcGluX2xvY2tfaW5pdCgmdGlvY2Vfa2Vybi0+Y2VfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnRpb2NlX2tlcm4tPmNlX2RtYW1hcF9saXN0KTsKLQl0aW9jZV9jb21tb24tPmNlX2tlcm5lbF9wcml2YXRlID0gKHVpbnQ2NF90KSB0aW9jZV9rZXJuOworCXRpb2NlX2NvbW1vbi0+Y2Vfa2VybmVsX3ByaXZhdGUgPSAodTY0KSB0aW9jZV9rZXJuOwogCiAJLyoKIAkgKiBEZXRlcm1pbmUgdGhlIHNlY29uZGFyeSBidXMgbnVtYmVyIG9mIHRoZSBwb3J0MiBsb2dpY2FsIFBQQi4KQEAgLTU3NSw3ICs1NzUsNyBAQAogCXJhd19wY2lfb3BzLT5yZWFkKHRpb2NlX2NvbW1vbi0+Y2VfcGNpYnVzLmJzX3BlcnNpc3Rfc2VnbWVudCwKIAkJCSAgdGlvY2VfY29tbW9uLT5jZV9wY2lidXMuYnNfcGVyc2lzdF9idXNudW0sCiAJCQkgIFBDSV9ERVZGTigyLCAwKSwgUENJX1NFQ09OREFSWV9CVVMsIDEsICZ0bXApOwotCXRpb2NlX2tlcm4tPmNlX3BvcnQxX3NlY29uZGFyeSA9ICh1aW50OF90KSB0bXA7CisJdGlvY2Vfa2Vybi0+Y2VfcG9ydDFfc2Vjb25kYXJ5ID0gKHU4KSB0bXA7CiAKIAkvKgogCSAqIFNldCBQTVUgcGFnZXNpemUgdG8gdGhlIGxhcmdlc3Qgc2l6ZSBhdmFpbGFibGUsIGFuZCB6ZXJvIG91dApAQCAtNjE1LDcgKzYxNSw3IEBACiAJc3RydWN0IHBjaWRldl9pbmZvICpwY2lkZXZfaW5mbzsKIAlzdHJ1Y3QgdGlvY2VfY29tbW9uICpjZV9jb21tb247CiAJc3RydWN0IHRpb2NlICpjZV9tbXI7Ci0JdWludDY0X3QgZm9yY2VfaW50X3ZhbDsKKwl1NjQgZm9yY2VfaW50X3ZhbDsKIAogCWlmICghc25faXJxX2luZm8tPmlycV9icmlkZ2UpCiAJCXJldHVybjsKQEAgLTY4Nyw3ICs2ODcsNyBAQAogCXN0cnVjdCB0aW9jZV9jb21tb24gKmNlX2NvbW1vbjsKIAlzdHJ1Y3QgdGlvY2UgKmNlX21tcjsKIAlpbnQgYml0OwotCXVpbnQ2NF90IHZlY3RvcjsKKwl1NjQgdmVjdG9yOwogCiAJcGNpZGV2X2luZm8gPSAoc3RydWN0IHBjaWRldl9pbmZvICopc25faXJxX2luZm8tPmlycV9wY2lpb2luZm87CiAJaWYgKCFwY2lkZXZfaW5mbykKQEAgLTY5OSw3ICs2OTksNyBAQAogCWJpdCA9IHNuX2lycV9pbmZvLT5pcnFfaW50X2JpdDsKIAogCV9fc25fc2V0cV9yZWxheGVkKCZjZV9tbXItPmNlX2FkbV9pbnRfbWFzaywgKDFVTCA8PCBiaXQpKTsKLQl2ZWN0b3IgPSAodWludDY0X3Qpc25faXJxX2luZm8tPmlycV9pcnEgPDwgSU5UUl9WRUNUT1JfU0hGVDsKKwl2ZWN0b3IgPSAodTY0KXNuX2lycV9pbmZvLT5pcnFfaXJxIDw8IElOVFJfVkVDVE9SX1NIRlQ7CiAJdmVjdG9yIHw9IHNuX2lycV9pbmZvLT5pcnFfeHRhbGthZGRyOwogCXdyaXRlcSh2ZWN0b3IsICZjZV9tbXItPmNlX2FkbV9pbnRfZGVzdFtiaXRdKTsKIAlfX3NuX2NscnFfcmVsYXhlZCgmY2VfbW1yLT5jZV9hZG1faW50X21hc2ssICgxVUwgPDwgYml0KSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3Jlc2V0LmMgYi9hcmNoL21pcHMva2VybmVsL3Jlc2V0LmMKaW5kZXggYWUyYmE2Ny4uNWUzN2RmMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcmVzZXQuYworKysgYi9hcmNoL21pcHMva2VybmVsL3Jlc2V0LmMKQEAgLTEyLDYgKzEyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAKK3ZvaWQgKCpwbV9wb3dlcl9vZmYpKHZvaWQpOworRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOworCiAvKgogICogVXJncyAuLi4gIFRvbyBtYW55IE1JUFMgbWFjaGluZXMgdG8gaGFuZGxlIHRoaXMgaW4gYSBnZW5lcmljIHdheS4KICAqIFNvIGhhbmRsZSBhbGwgdXNpbmcgZnVuY3Rpb24gcG9pbnRlcnMgdG8gbWFjaGluZSBzcGVjaWZpYwpAQCAtMzMsNiArMzYsOSBAQAogCiB2b2lkIG1hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCiB7CisJaWYgKHBtX3Bvd2VyX29mZikKKwkJcG1fcG93ZXJfb2ZmKCk7CisKIAlfbWFjaGluZV9wb3dlcl9vZmYoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IDhjZjZkNDMuLjAxYmM3ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTMzLDkgKzMzLDExIEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgR0VORVJJQ19JT01BUAorCWJvb2wKKwogY29uZmlnIEFSQ0hfTUFZX0hBVkVfUENfRkRDCiAJYm9vbAotCWRlZmF1bHQgeQogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIApAQCAtNTMsMjQgKzU1LDI4IEBACiAKIGNvbmZpZyBTSF83NzUxX1NPTFVUSU9OX0VOR0lORQogCWJvb2wgIlNvbHV0aW9uRW5naW5lNzc1MSIKKwlzZWxlY3QgQ1BVX1NVQlRZUEVfU0g3NzUxCiAJaGVscAogCSAgU2VsZWN0IDc3NTEgU29sdXRpb25FbmdpbmUgaWYgY29uZmlndXJpbmcgZm9yIGEgSGl0YWNoaSBTSDc3NTEKIAkgIGV2YWx1YXRpb24gYm9hcmQuCiAKIGNvbmZpZyBTSF83MzAwX1NPTFVUSU9OX0VOR0lORQogCWJvb2wgIlNvbHV0aW9uRW5naW5lNzMwMCIKKwlzZWxlY3QgQ1BVX1NVQlRZUEVfU0g3MzAwCiAJaGVscAogCSAgU2VsZWN0IDczMDAgU29sdXRpb25FbmdpbmUgaWYgY29uZmlndXJpbmcgZm9yIGEgSGl0YWNoaSBTSDczMDAoU0gtTW9iaWxlIFYpCiAJICBldmFsdWF0aW9uIGJvYXJkLgogCiBjb25maWcgU0hfNzMxODBfU09MVVRJT05fRU5HSU5FCiAgICAgICAgYm9vbCAiU29sdXRpb25FbmdpbmU3MzE4MCIKKyAgICAgICBzZWxlY3QgQ1BVX1NVQlRZUEVfU0g3MzE4MAogICAgICAgIGhlbHAKICAgICAgICAgIFNlbGVjdCA3MzE4MCBTb2x1dGlvbkVuZ2luZSBpZiBjb25maWd1cmluZyBmb3IgYSBIaXRhY2hpIFNINzMxODAoU0gtTW9iaWxlIDMpCiAgICAgICAgICBldmFsdWF0aW9uIGJvYXJkLgogCiBjb25maWcgU0hfNzc1MV9TWVNURU1ICiAJYm9vbCAiU3lzdGVtSDc3NTFSIgorCXNlbGVjdCBDUFVfU1VCVFlQRV9TSDc3NTFSCiAJaGVscAogCSAgU2VsZWN0IFN5c3RlbUggaWYgeW91IGFyZSBjb25maWd1cmluZyBmb3IgYSBSZW5lc2FzIFN5c3RlbUgKIAkgIDc3NTFSIGV2YWx1YXRpb24gYm9hcmQuCkBAIC04MSwyNyArODcsMTMgQEAKIGNvbmZpZyBTSF9TVEIxX09WRVJEUklWRQogCWJvb2wgIlNUQjFfT3ZlcmRyaXZlIgogCi1jb25maWcgU0hfSFA2MjAKLQlib29sICJIUDYyMCIKK2NvbmZpZyBTSF9IUDZYWAorCWJvb2wgIkhQNlhYIgogCWhlbHAKLQkgIFNlbGVjdCBIUDYyMCBpZiBjb25maWd1cmluZyBmb3IgYSBIUCBqb3JuYWRhIEhQNjIwLgorCSAgU2VsZWN0IEhQNlhYIGlmIGNvbmZpZ3VyaW5nIGZvciBhIEhQIGpvcm5hZGEgSFA2eHguCiAJICBNb3JlIGluZm9ybWF0aW9uIChoYXJkd2FyZSBvbmx5KSBhdAogCSAgPGh0dHA6Ly93d3cuaHAuY29tL2pvcm5hZGEvPi4KIAotY29uZmlnIFNIX0hQNjgwCi0JYm9vbCAiSFA2ODAiCi0JaGVscAotCSAgU2VsZWN0IEhQNjgwIGlmIGNvbmZpZ3VyaW5nIGZvciBhIEhQIEpvcm5hZGEgSFA2ODAuCi0JICBNb3JlIGluZm9ybWF0aW9uIChoYXJkd2FyZSBvbmx5KSBhdAotCSAgPGh0dHA6Ly93d3cuaHAuY29tL2pvcm5hZGEvcHJvZHVjdHMvNjgwLz4uCi0KLWNvbmZpZyBTSF9IUDY5MAotCWJvb2wgIkhQNjkwIgotCWhlbHAKLQkgIFNlbGVjdCBIUDY5MCBpZiBjb25maWd1cmluZyBmb3IgYSBIUCBKb3JuYWRhIEhQNjkwLgotCSAgTW9yZSBpbmZvcm1hdGlvbiAoaGFyZHdhcmUgb25seSkKLQkgIGF0IDxodHRwOi8vd3d3LmhwLmNvbS9qb3JuYWRhL3Byb2R1Y3RzLzY4MC8+LgotCiBjb25maWcgU0hfQ1FSRUVLCiAJYm9vbCAiQ3FSRUVLIgogCWhlbHAKQEAgLTEyMywxMSArMTE1LDEzIEBACiAKIGNvbmZpZyBTSF9TQVRVUk4KIAlib29sICJTYXR1cm4iCisJc2VsZWN0IENQVV9TVUJUWVBFX1NINzYwNAogCWhlbHAKIAkgIFNlbGVjdCBTYXR1cm4gaWYgY29uZmlndXJpbmcgZm9yIGEgU0VHQSBTYXR1cm4uCiAKIGNvbmZpZyBTSF9EUkVBTUNBU1QKIAlib29sICJEcmVhbWNhc3QiCisJc2VsZWN0IENQVV9TVUJUWVBFX1NINzA5MQogCWhlbHAKIAkgIFNlbGVjdCBEcmVhbWNhc3QgaWYgY29uZmlndXJpbmcgZm9yIGEgU0VHQSBEcmVhbWNhc3QuCiAJICBNb3JlIGluZm9ybWF0aW9uIGF0CkBAIC0xNDIsNiArMTM2LDcgQEAKIAogY29uZmlnIFNIX1NIMjAwMAogCWJvb2wgIlNIMjAwMCIKKwlzZWxlY3QgQ1BVX1NVQlRZUEVfU0g3NzA5CiAJaGVscAogCSAgU0gtMjAwMCBpcyBhIHNpbmdsZS1ib2FyZCBjb21wdXRlciBiYXNlZCBhcm91bmQgU0g3NzA5QSBjaGlwCiAJICBpbnRlbmRlZCBmb3IgZW1iZWRkZWQgYXBwbGljYXRpb25zLgpAQCAtMTUzLDIwICsxNDgsMjIgQEAKIAlib29sICJBRFgiCiAKIGNvbmZpZyBTSF9NUEMxMjExCi0JYm9vbCAiTVBDMTIxMSIKKwlib29sICJJbnRlcmZhY2UgTVBDMTIxMSIKKwloZWxwCisJICBDVFAvUENJLVNIMDIgaXMgYSBDUFUgbW9kdWxlIGNvbXB1dGVyIHRoYXQgaXMgcHJvZHVjZWQKKwkgIGJ5IEludGVyZmFjZSBDb3Jwb3JhdGlvbi4KKwkgIE1vcmUgaW5mb3JtYXRpb24gYXQgPGh0dHA6Ly93d3cuaW50ZXJmYWNlLmNvLmpwPgogCiBjb25maWcgU0hfU0gwMwotCWJvb2wgIlNIMDMiCisJYm9vbCAiSW50ZXJmYWNlIENUUC9QQ0ktU0gwMyIKIAloZWxwCi0JICBDVFAvUENJLVNIMDMgaXMgYSBDUFUgbW9kdWxlIGNvbXB1dGVyIHRoYXQgcHJvZHVjZWQKKwkgIENUUC9QQ0ktU0gwMyBpcyBhIENQVSBtb2R1bGUgY29tcHV0ZXIgdGhhdCBpcyBwcm9kdWNlZAogCSAgYnkgSW50ZXJmYWNlIENvcnBvcmF0aW9uLgotCSAgSXQgaXMgY29tcGFjdCBhbmQgZXhjZWxsZW50IGluIGR1cmFiaWxpdHkuCi0JICBJdCB3aWxsIHBsYXkgYW4gYWN0aXZlIHBhcnQgaW4geW91ciBmYWN0b3J5IG9yIGxhYm9yYXRvcnkKLQkgIGFzIGEgRkEgY29tcHV0ZXIuCiAJICBNb3JlIGluZm9ybWF0aW9uIGF0IDxodHRwOi8vd3d3LmludGVyZmFjZS5jby5qcD4KIAogY29uZmlnIFNIX1NFQ1VSRUVER0U1NDEwCiAJYm9vbCAiU2VjdXJlRWRnZTU0MTAiCisJc2VsZWN0IENQVV9TVUJUWVBFX1NINzc1MVIKIAloZWxwCiAJICBTZWxlY3QgU2VjdXJlRWRnZTU0MTAgaWYgY29uZmlndXJpbmcgZm9yIGEgU25hcEdlYXIgU0ggYm9hcmQuCiAJICBUaGlzIGluY2x1ZGVzIGJvdGggdGhlIE9FTSBTZWN1cmVFZGdlIHByb2R1Y3RzIGFzIHdlbGwgYXMgdGhlCkBAIC0xNzQsMjUgKzE3MSw0OSBAQAogCiBjb25maWcgU0hfSFM3NzUxUlZPSVAKIAlib29sICJIUzc3NTFSVk9JUCIKKwlzZWxlY3QgQ1BVX1NVQlRZUEVfU0g3NzUxUgogCWhlbHAKIAkgIFNlbGVjdCBIUzc3NTFSVk9JUCBpZiBjb25maWd1cmluZyBmb3IgYSBSZW5lc2FzIFRlY2hub2xvZ3kKIAkgIFNhbGVzIFZvSVAgYm9hcmQuCiAKIGNvbmZpZyBTSF9SVFM3NzUxUjJECiAJYm9vbCAiUlRTNzc1MVIyRCIKKwlzZWxlY3QgQ1BVX1NVQlRZUEVfU0g3NzUxUgogCWhlbHAKIAkgIFNlbGVjdCBSVFM3NzUxUjJEIGlmIGNvbmZpZ3VyaW5nIGZvciBhIFJlbmVzYXMgVGVjaG5vbG9neQogCSAgU2FsZXMgU0gtR3JhcGhpY3MgYm9hcmQuCiAKK2NvbmZpZyBTSF9SNzc4MFJQCisJYm9vbCAiUjc3ODBSUC0xIgorCXNlbGVjdCBDUFVfU1VCVFlQRV9TSDc3ODAKKwloZWxwCisJICBTZWxlY3QgUjc3ODBSUC0xIGlmIGNvbmZpZ3VyaW5nIGZvciBhIFJlbmVzYXMgU29sdXRpb25zCisJICBISUdITEFOREVSIGJvYXJkLgorCiBjb25maWcgU0hfRURPU0s3NzA1CiAJYm9vbCAiRURPU0s3NzA1IgorCXNlbGVjdCBDUFVfU1VCVFlQRV9TSDc3MDUKIAogY29uZmlnIFNIX1NINDIwMl9NSUNST0RFVgogCWJvb2wgIlNINC0yMDIgTWljcm9EZXYiCisJc2VsZWN0IENQVV9TVUJUWVBFX1NINF8yMDIKIAloZWxwCiAJICBTZWxlY3QgU0g0LTIwMiBNaWNyb0RldiBpZiBjb25maWd1cmluZyBmb3IgYSBTdXBlckggTWljcm9EZXYgYm9hcmQKIAkgIHdpdGggYW4gU0g0LTIwMiBDUFUuCiAKK2NvbmZpZyBTSF9MQU5ESVNLCisJYm9vbCAiTEFORElTSyIKKwlzZWxlY3QgQ1BVX1NVQlRZUEVfU0g3NzUxUgorCWhlbHAKKwkgIEktTyBEQVRBIERFVklDRSwgSU5DLiAiTEFORElTSyBTZXJpZXMiIHN1cHBvcnQuCisKK2NvbmZpZyBTSF9USVRBTgorCWJvb2wgIlRJVEFOIgorCXNlbGVjdCBDUFVfU1VCVFlQRV9TSDc3NTFSCisJaGVscAorCSAgU2VsZWN0IFRpdGFuIGlmIHlvdSBhcmUgY29uZmlndXJpbmcgZm9yIGEgTmltYmxlIE1pY3Jvc3lzdGVtcworCSAgTmV0RW5naW5lIE5QNTFSLgorCiBjb25maWcgU0hfVU5LTk9XTgogCWJvb2wgIkJhcmVDUFUiCiAJaGVscApAQCAtMjA3LDE2OCArMjI4LDI3IEBACiAKIGVuZGNob2ljZQogCi1jaG9pY2UKLQlwcm9tcHQgIlByb2Nlc3NvciBmYW1pbHkiCi0JZGVmYXVsdCBDUFVfU0g0Ci0JaGVscAotCSAgVGhpcyBvcHRpb24gZGV0ZXJtaW5lcyB0aGUgQ1BVIGZhbWlseSB0byBjb21waWxlIGZvci4gU3VwcG9ydGVkCi0JICB0YXJnZXRzIGFyZSBTSC0yLCBTSC0zLCBhbmQgU0gtNC4gVGhlc2Ugb3B0aW9ucyBhcmUgaW5kZXBlbmRlbnQgb2YKLQkgIENQVSBmdW5jdGlvbmFsaXR5LiBBcyBzdWNoLCBTSC1EU1AgdXNlcnMgd2lsbCBzdGlsbCB3YW50IHRvIHNlbGVjdAotCSAgdGhlaXIgcmVzcGVjdGl2ZSBwcm9jZXNzb3IgZmFtaWx5IGluIGFkZGl0aW9uIHRvIHRoZSBEU1Agc3VwcG9ydAotCSAgb3B0aW9uLgorc291cmNlICJhcmNoL3NoL21tL0tjb25maWciCiAKLWNvbmZpZyBDUFVfU0gyCi0JYm9vbCAiU0gtMiIKLQlzZWxlY3QgU0hfV1JJVEVUSFJPVUdICi0KLWNvbmZpZyBDUFVfU0gzCi0JYm9vbCAiU0gtMyIKLQotY29uZmlnIENQVV9TSDQKLQlib29sICJTSC00IgotCi1lbmRjaG9pY2UKLQotY2hvaWNlCi0JcHJvbXB0ICJQcm9jZXNzb3Igc3VidHlwZSIKLQotY29uZmlnIENQVV9TVUJUWVBFX1NINzYwNAotCWJvb2wgIlNINzYwNCIKLQlkZXBlbmRzIG9uIENQVV9TSDIKLQloZWxwCi0JICBTZWxlY3QgU0g3NjA0IGlmIHlvdSBoYXZlIFNINzYwNAotCi1jb25maWcgQ1BVX1NVQlRZUEVfU0g3MzAwCi0JYm9vbCAiU0g3MzAwIgotCWRlcGVuZHMgb24gQ1BVX1NIMwotCi1jb25maWcgQ1BVX1NVQlRZUEVfU0g3NzA1Ci0JYm9vbCAiU0g3NzA1IgotCWRlcGVuZHMgb24gQ1BVX1NIMwotCi1jb25maWcgQ1BVX1NVQlRZUEVfU0g3NzA3Ci0JYm9vbCAiU0g3NzA3IgotCWRlcGVuZHMgb24gQ1BVX1NIMwotCWhlbHAKLQkgIFNlbGVjdCBTSDc3MDcgaWYgeW91IGhhdmUgYSAgNjAgTWh6IFNILTMgSEQ2NDE3NzA3IENQVS4KLQotY29uZmlnIENQVV9TVUJUWVBFX1NINzcwOAotCWJvb2wgIlNINzcwOCIKLQlkZXBlbmRzIG9uIENQVV9TSDMKLQloZWxwCi0JICBTZWxlY3QgU0g3NzA4IGlmIHlvdSBoYXZlIGEgIDYwIE1oeiBTSC0zIEhENjQxNzcwOFMgb3IKLQkgIGlmIHlvdSBoYXZlIGEgMTAwIE1oeiBTSC0zIEhENjQxNzcwOFIgQ1BVLgotCi1jb25maWcgQ1BVX1NVQlRZUEVfU0g3NzA5Ci0JYm9vbCAiU0g3NzA5IgotCWRlcGVuZHMgb24gQ1BVX1NIMwotCWhlbHAKLQkgIFNlbGVjdCBTSDc3MDkgaWYgeW91IGhhdmUgYSAgODAgTWh6IFNILTMgSEQ2NDE3NzA5IENQVS4KLQotY29uZmlnIENQVV9TVUJUWVBFX1NINzc1MAotCWJvb2wgIlNINzc1MCIKLQlkZXBlbmRzIG9uIENQVV9TSDQKLQloZWxwCi0JICBTZWxlY3QgU0g3NzUwIGlmIHlvdSBoYXZlIGEgMjAwIE1oeiBTSC00IEhENjQxNzc1MCBDUFUuCi0KLWNvbmZpZyBDUFVfU1VCVFlQRV9TSDc3NTEKLQlib29sICJTSDc3NTEvU0g3NzUxUiIKLQlkZXBlbmRzIG9uIENQVV9TSDQKLQloZWxwCi0JICBTZWxlY3QgU0g3NzUxIGlmIHlvdSBoYXZlIGEgMTY2IE1oeiBTSC00IEhENjQxNzc1MSBDUFUsCi0JICBvciBpZiB5b3UgaGF2ZSBhIEhENjQxNzc1MVIgQ1BVLgotCi1jb25maWcgQ1BVX1NVQlRZUEVfU0g3NzYwCi0JYm9vbCAiU0g3NzYwIgotCWRlcGVuZHMgb24gQ1BVX1NINAotCi1jb25maWcgQ1BVX1NVQlRZUEVfU0g3MzE4MAotICAgICAgIGJvb2wgIlNINzMxODAiCi0gICAgICAgZGVwZW5kcyBvbiBDUFVfU0g0Ci0KLWNvbmZpZyBDUFVfU1VCVFlQRV9TVDQwU1RCMQotICAgICAgIGJvb2wgIlNUNDBTVEIxIC8gU1Q0MFJBIgotICAgICAgIGRlcGVuZHMgb24gQ1BVX1NINAotICAgICAgIGhlbHAKLSAgICAgICAgIFNlbGVjdCBTVDQwU1RCMSBpZiB5b3UgaGF2ZSBhIFNUNDBSQSBDUFUuCi0gICAgICAgICBUaGlzIHdhcyBwcmV2aW91c2x5IGNhbGxlZCB0aGUgU1Q0MFNUQjEsIGhlbmNlIHRoZSBvcHRpb24gbmFtZS4KLQotY29uZmlnIENQVV9TVUJUWVBFX1NUNDBHWDEKLSAgICAgICBib29sICJTVDQwR1gxIgotICAgICAgIGRlcGVuZHMgb24gQ1BVX1NINAotICAgICAgIGhlbHAKLSAgICAgICAgIFNlbGVjdCBTVDQwR1gxIGlmIHlvdSBoYXZlIGEgU1Q0MEdYMSBDUFUuCi0KLWNvbmZpZyBDUFVfU1VCVFlQRV9TSDRfMjAyCi0JYm9vbCAiU0g0LTIwMiIKLQlkZXBlbmRzIG9uIENQVV9TSDQKLQotZW5kY2hvaWNlCi0KLWNvbmZpZyBTSDc3MDVfQ0FDSEVfMzJLQgotICAgIGJvb2wgIkVuYWJsZSAzMktCIGNhY2hlIHNpemUgZm9yIFNINzcwNSIKLSAgICBkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcwNQotICAgIGRlZmF1bHQgeQotCi1jb25maWcgTU1VCi0gICAgICAgIGJvb2wgIlN1cHBvcnQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGhhcmR3YXJlIgotCWRlcGVuZHMgb24gIUNQVV9TSDIKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBFYXJseSBTSCBwcm9jZXNzb3JzIChzdWNoIGFzIHRoZSBTSDc2MDQpIGxhY2sgYW4gTU1VLiBJbiBvcmRlciB0bwotCSAgYm9vdCBvbiB0aGVzZSBzeXN0ZW1zLCB0aGlzIG9wdGlvbiBtdXN0IG5vdCBiZSBzZXQuCi0KLQkgIE9uIG90aGVyIHN5c3RlbXMgKHN1Y2ggYXMgdGhlIFNILTMgYW5kIDQpIHdoZXJlIGFuIE1NVSBleGlzdHMsCi0JICB0dXJuaW5nIHRoaXMgb2ZmIHdpbGwgYm9vdCB0aGUga2VybmVsIG9uIHRoZXNlIG1hY2hpbmVzIHdpdGggdGhlCi0JICBNTVUgaW1wbGljaXRseSBzd2l0Y2hlZCBvZmYuCi0KLWNob2ljZQotCXByb21wdCAiSHVnZVRMQiBwYWdlIHNpemUiCi0JZGVwZW5kcyBvbiBIVUdFVExCX1BBR0UgJiYgQ1BVX1NINCAmJiBNTVUKLQlkZWZhdWx0IEhVR0VUTEJfUEFHRV9TSVpFXzY0SwotCi1jb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLCi0JYm9vbCAiNjRLIgotCi1jb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CCi0JYm9vbCAiMU1CIgotCi1lbmRjaG9pY2UKLQotY29uZmlnIENNRExJTkVfQk9PTAotCWJvb2wgIkRlZmF1bHQgYm9vdGxvYWRlciBrZXJuZWwgYXJndW1lbnRzIgotCi1jb25maWcgQ01ETElORQotCXN0cmluZyAiSW5pdGlhbCBrZXJuZWwgY29tbWFuZCBzdHJpbmciCi0JZGVwZW5kcyBvbiBDTURMSU5FX0JPT0wKLQlkZWZhdWx0ICJjb25zb2xlPXR0eVNDMSwxMTUyMDAiCi0KLSMgUGxhdGZvcm0tc3BlY2lmaWMgbWVtb3J5IHN0YXJ0IGFuZCBzaXplIGRlZmluaXRpb25zCiBjb25maWcgTUVNT1JZX1NUQVJUCi0JaGV4ICJQaHlzaWNhbCBtZW1vcnkgc3RhcnQgYWRkcmVzcyIgaWYgIU1FTU9SWV9TRVQgfHwgTUVNT1JZX09WRVJSSURFCi0JZGVmYXVsdCAiMHgwODAwMDAwMCIgaWYgIU1FTU9SWV9TRVQgfHwgTUVNT1JZX09WRVJSSURFIHx8ICFNRU1PUllfT1ZFUlJJREUgJiYgU0hfQURYIHx8IFNIX01QQzEyMTEgfHwgU0hfU0gwMyB8fCBTSF9TRUNVUkVFREdFNTQxMCB8fCBTSF9TSDQyMDJfTUlDUk9ERVYKLQlkZWZhdWx0ICIweDBjMDAwMDAwIiBpZiAhTUVNT1JZX09WRVJSSURFICYmIChTSF9EUkVBTUNBU1QgfHwgU0hfSFA2MDAgfHwgU0hfQklHU1VSIHx8IFNIX1NIMjAwMCB8fCBTSF83MzE4MF9TT0xVVElPTl9FTkdJTkUgfHwgU0hfNzMwMF9TT0xVVElPTl9FTkdJTkUgfHwgU0hfNzc1MV9TT0xVVElPTl9FTkdJTkUgfHwgU0hfU09MVVRJT05fRU5HSU5FIHx8IFNIX0hTNzc1MVJWT0lQIHx8IFNIX1JUUzc3NTFSMkQgfHwgU0hfRURPU0s3NzA1KQorCWhleCAiUGh5c2ljYWwgbWVtb3J5IHN0YXJ0IGFkZHJlc3MiCisJZGVmYXVsdCAiMHgwODAwMDAwMCIKIAktLS1oZWxwLS0tCiAJICBDb21wdXRlcnMgYnVpbHQgd2l0aCBIaXRhY2hpIFN1cGVySCBwcm9jZXNzb3JzIGFsd2F5cwogCSAgbWFwIHRoZSBST00gc3RhcnRpbmcgYXQgYWRkcmVzcyB6ZXJvLiAgQnV0IHRoZSBwcm9jZXNzb3IKIAkgIGRvZXMgbm90IHNwZWNpZnkgdGhlIHJhbmdlIHRoYXQgUkFNIHRha2VzLgogCiAJICBUaGUgcGh5c2ljYWwgbWVtb3J5IChSQU0pIHN0YXJ0IGFkZHJlc3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5Ci0JICBzZXQgdG8gMDgwMDAwMDAsIHVubGVzcyB5b3Ugc2VsZWN0ZWQgb25lIG9mIHRoZSBmb2xsb3dpbmcKLQkgIHByb2Nlc3NvciB0eXBlczogU29sdXRpb25FbmdpbmUsIE92ZXJkcml2ZSwgSFA2MjAsIEhQNjgwLCBIUDY5MCwKLQkgIGluIHdoaWNoIGNhc2UgdGhlIHN0YXJ0IGFkZHJlc3Mgd2lsbCBiZSBzZXQgdG8gMGMwMDAwMDAuCisJICBzZXQgdG8gMDgwMDAwMDAuIE90aGVyIHBsYXRmb3Jtcywgc3VjaCBhcyB0aGUgU29sdXRpb24gRW5naW5lCisJICBib2FyZHMgdHlwaWNhbGx5IG1hcCBSQU0gYXQgMEMwMDAwMDAuCiAKLQkgIFR3ZWFrIHRoaXMgb25seSB3aGVuIHBvcnRpbmcgdG8gYSBuZXcgbWFjaGluZSB3aGljaCBpcyBub3QgYWxyZWFkeQotCSAga25vd24gYnkgdGhlIGNvbmZpZyBzeXN0ZW0uICBDaGFuZ2luZyBpdCBmcm9tIHRoZSBrbm93biBjb3JyZWN0CisJICBUd2VhayB0aGlzIG9ubHkgd2hlbiBwb3J0aW5nIHRvIGEgbmV3IG1hY2hpbmUgd2hpY2ggZG9lcyBub3QKKwkgIGFscmVhZHkgaGF2ZSBhIGRlZmNvbmZpZy4gQ2hhbmdpbmcgaXQgZnJvbSB0aGUga25vd24gY29ycmVjdAogCSAgdmFsdWUgb24gYW55IG9mIHRoZSBrbm93biBzeXN0ZW1zIHdpbGwgb25seSBsZWFkIHRvIGRpc2FzdGVyLgogCiBjb25maWcgTUVNT1JZX1NJWkUKLQloZXggIlBoeXNpY2FsIG1lbW9yeSBzaXplIiBpZiAhTUVNT1JZX1NFVCB8fCBNRU1PUllfT1ZFUlJJREUKLQlkZWZhdWx0ICIweDAwNDAwMDAwIiBpZiAhTUVNT1JZX1NFVCB8fCBNRU1PUllfT1ZFUlJJREUgfHwgIU1FTU9SWV9PVkVSUklERSAmJiBTSF9BRFggfHwgIU1FTU9SWV9PVkVSUklERSAmJiAoU0hfSFA2MDAgfHwgU0hfQklHU1VSIHx8IFNIX1NIMjAwMCkKLQlkZWZhdWx0ICIweDAxMDAwMDAwIiBpZiAhTUVNT1JZX09WRVJSSURFICYmIFNIX0RSRUFNQ0FTVCB8fCBTSF9TRUNVUkVFREdFNTQxMCB8fCBTSF9FRE9TSzc3MDUKLSAgICAgICAgZGVmYXVsdCAiMHgwMjAwMDAwMCIgaWYgIU1FTU9SWV9PVkVSUklERSAmJiAoU0hfNzMxODBfU09MVVRJT05fRU5HSU5FIHx8IFNIX1NPTFVUSU9OX0VOR0lORSkKLSAgICAgICAgZGVmYXVsdCAiMHgwNDAwMDAwMCIgaWYgIU1FTU9SWV9PVkVSUklERSAmJiAoU0hfNzMwMF9TT0xVVElPTl9FTkdJTkUgfHwgU0hfNzc1MV9TT0xVVElPTl9FTkdJTkUgfHwgU0hfSFM3NzUxUlZPSVAgfHwgU0hfUlRTNzc1MVIyRCB8fCBTSF9TSDQyMDJfTUlDUk9ERVYpCi0JZGVmYXVsdCAiMHgwODAwMDAwMCIgaWYgU0hfTVBDMTIxMSB8fCBTSF9TSDAzCisJaGV4ICJQaHlzaWNhbCBtZW1vcnkgc2l6ZSIKKwlkZWZhdWx0ICIweDAwNDAwMDAwIgogCWhlbHAKIAkgIFRoaXMgc2V0cyB0aGUgZGVmYXVsdCBtZW1vcnkgc2l6ZSBhc3N1bWVkIGJ5IHlvdXIgU0gga2VybmVsLiBJdCBjYW4KIAkgIGJlIG92ZXJyaWRkZW4gYXMgbm9ybWFsIGJ5IHRoZSAnbWVtPScgYXJndW1lbnQgb24gdGhlIGtlcm5lbCBjb21tYW5kCkBAIC0zNzYsMjEgKzI1Niw2IEBACiAJICBhcyAweDAwNDAwMDAwIHdoaWNoIHdhcyB0aGUgZGVmYXVsdCB2YWx1ZSBiZWZvcmUgdGhpcyBiZWNhbWUKIAkgIGNvbmZpZ3VyYWJsZS4KIAotY29uZmlnIE1FTU9SWV9TRVQKLQlib29sCi0JZGVwZW5kcyBvbiAhTUVNT1JZX09WRVJSSURFICYmIChTSF9NUEMxMjExIHx8IFNIX1NIMDMgfHwgU0hfQURYIHx8IFNIX0RSRUFNQ0FTVCB8fCBTSF9IUDYwMCB8fCBTSF9CSUdTVVIgfHwgU0hfU0gyMDAwIHx8IFNIXzc3NTFfU09MVVRJT05fRU5HSU5FIHx8IFNIX1NPTFVUSU9OX0VOR0lORSB8fCBTSF9TRUNVUkVFREdFNTQxMCB8fCBTSF9IUzc3NTFSVk9JUCB8fCBTSF9SVFM3NzUxUjJEIHx8IFNIX1NINDIwMl9NSUNST0RFViB8fCBTSF9FRE9TSzc3MDUpCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgVGhpcyBpcyBhbiBvcHRpb24gYWJvdXQgd2hpY2ggeW91IHdpbGwgbmV2ZXIgYmUgYXNrZWQgYSBxdWVzdGlvbi4KLQkgIFRoZXJlZm9yZSwgSSBjb25jbHVkZSB0aGF0IHlvdSBkbyBub3QgZXhpc3QgLSBnbyBhd2F5LgotCi0JICBUaGVyZSBpcyBhIGdydWUgaGVyZS4KLQotIyBJZiBub25lIG9mIHRoZSBhYm92ZSBoYXZlIHNldCBtZW1vcnkgc3RhcnQvc2l6ZSwgYXNrIHRoZSB1c2VyLgotY29uZmlnIE1FTU9SWV9PVkVSUklERQotCWJvb2wgIk92ZXJyaWRlIGRlZmF1bHQgbG9hZCBhZGRyZXNzIGFuZCBtZW1vcnkgc2l6ZSIKLQotIyBYWFg6IGJyZWFrIHRoZXNlIG91dCBpbnRvIHRoZSBib2FyZC1zcGVjaWZpYyBjb25maWdzIGJlbG93CiBjb25maWcgQ0ZfRU5BQkxFUgogCWJvb2wgIkNvbXBhY3QgRmxhc2ggRW5hYmxlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gU0hfQURYIHx8IFNIX1NPTFVUSU9OX0VOR0lORSB8fCBTSF9VTktOT1dOIHx8IFNIX0NBVDY4NzAxIHx8IFNIX1NIMDMKQEAgLTQzNCwxMCArMjk5LDIxIEBACiAJZGVmYXVsdCAiMHhiODAwMDAwMCIgaWYgQ0ZfQVJFQTYKIAlkZWZhdWx0ICIweGI0MDAwMDAwIiBpZiBDRl9BUkVBNQogCittZW51ICJQcm9jZXNzb3IgZmVhdHVyZXMiCisKK2NvbmZpZyBDUFVfTElUVExFX0VORElBTgorCWJvb2wgIkxpdHRsZSBFbmRpYW4iCisJaGVscAorCSAgU29tZSBTdXBlckggbWFjaGluZXMgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIGVpdGhlciBsaXR0bGUgb3IgYmlnCisJICBlbmRpYW4gYnl0ZSBvcmRlci4gVGhlc2UgbW9kZXMgcmVxdWlyZSBkaWZmZXJlbnQga2VybmVscy4gU2F5IFkgaWYKKwkgIHlvdXIgbWFjaGluZSBpcyBsaXR0bGUgZW5kaWFuLCBOIGlmIGl0J3MgYSBiaWcgZW5kaWFuIG1hY2hpbmUuCisKICMgVGhlIFNINzc1MCBSVEMgbW9kdWxlIGlzIGRpc2FibGVkIGluIHRoZSBEcmVhbWNhc3QKIGNvbmZpZyBTSF9SVEMKIAlib29sCi0JZGVwZW5kcyBvbiAhU0hfRFJFQU1DQVNUICYmICFTSF9TQVRVUk4gJiYgIVNIXzczMDBfU09MVVRJT05fRU5HSU5FICYmICFTSF83MzE4MF9TT0xVVElPTl9FTkdJTkUKKwlkZXBlbmRzIG9uICFTSF9EUkVBTUNBU1QgJiYgIVNIX1NBVFVSTiAmJiAhU0hfNzMwMF9TT0xVVElPTl9FTkdJTkUgJiYgXAorCQkgICAhU0hfNzMxODBfU09MVVRJT05fRU5HSU5FICYmICFTSF9MQU5ESVNLICYmIFwKKwkJICAgIVNIX1I3NzgwUlAKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gd2lsbCBhbGxvdyB0aGUgTGludXgga2VybmVsIHRvIGVtdWxhdGUKQEAgLTQ3Niw5OCArMzUyLDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIFNIX0hQNjAwCi0JYm9vbAotCWRlcGVuZHMgb24gU0hfSFA2MjAgfHwgU0hfSFA2ODAgfHwgU0hfSFA2OTAKLQlkZWZhdWx0IHkKLQotY29uZmlnIENQVV9TVUJUWVBFX1NUNDAKLSAgICAgICBib29sCi0gICAgICAgZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TVDQwU1RCMSB8fCBDUFVfU1VCVFlQRV9TVDQwR1gxCi0gICAgICAgZGVmYXVsdCB5Ci0KLXNvdXJjZSAibW0vS2NvbmZpZyIKLQotY29uZmlnIFpFUk9fUEFHRV9PRkZTRVQKLQloZXggIlplcm8gcGFnZSBvZmZzZXQiCi0JZGVmYXVsdCAiMHgwMDAwMTAwMCIgaWYgIShTSF9NUEMxMjExIHx8IFNIX1NIMDMpCi0JZGVmYXVsdCAiMHgwMDAwNDAwMCIgaWYgU0hfTVBDMTIxMSB8fCBTSF9TSDAzCi0JaGVscAotCSAgVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG9mZnNldCBvZiB6ZXJvIHBhZ2UuCi0KLSMgWFhYOiBuZWVkcyB0byBsb3NlIHN1YnR5cGUgZm9yIHN5c3RlbSB0eXBlCi1jb25maWcgU1Q0MF9MTUlfTUVNT1JZCi0JYm9vbCAiTWVtb3J5IG9uIExNSSIKLQlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NUNDBTVEIxCi0KLWNvbmZpZyBNRU1PUllfU1RBUlQKLQloZXgKLQlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NUNDBTVEIxICYmIFNUNDBfTE1JX01FTU9SWQotCWRlZmF1bHQgIjB4MDgwMDAwMDAiCi0KLWNvbmZpZyBNRU1PUllfU0laRQotCWhleAotCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU1Q0MFNUQjEgJiYgU1Q0MF9MTUlfTUVNT1JZCi0JZGVmYXVsdCAiMHgwMDQwMDAwMCIKLQotY29uZmlnIE1FTU9SWV9TRVQKLQlib29sCi0JZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TVDQwU1RCMSAmJiBTVDQwX0xNSV9NRU1PUlkKLQlkZWZhdWx0IHkKLQotY29uZmlnIEJPT1RfTElOS19PRkZTRVQKLQloZXggIkxpbmsgYWRkcmVzcyBvZmZzZXQgZm9yIGJvb3RpbmciCi0JZGVmYXVsdCAiMHgwMDgwMDAwMCIKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNldCB0aGUgbGluayBhZGRyZXNzIG9mZnNldCBvZiB0aGUgekltYWdlLgotCSAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSBhcmUgb24gYSBib2FyZCB3aGljaCBoYXMgYSBzbWFsbCBhbW91bnQgb2YKLQkgIG1lbW9yeS4KLQotY29uZmlnIENQVV9MSVRUTEVfRU5ESUFOCi0JYm9vbCAiTGl0dGxlIEVuZGlhbiIKLQloZWxwCi0JICBTb21lIFN1cGVySCBtYWNoaW5lcyBjYW4gYmUgY29uZmlndXJlZCBmb3IgZWl0aGVyIGxpdHRsZSBvciBiaWcKLQkgIGVuZGlhbiBieXRlIG9yZGVyLiBUaGVzZSBtb2RlcyByZXF1aXJlIGRpZmZlcmVudCBrZXJuZWxzLiBTYXkgWSBpZgotCSAgeW91ciBtYWNoaW5lIGlzIGxpdHRsZSBlbmRpYW4sIE4gaWYgaXQncyBhIGJpZyBlbmRpYW4gbWFjaGluZS4KLQotY29uZmlnIFBSRUVNUFQKLQlib29sICJQcmVlbXB0aWJsZSBLZXJuZWwgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQotY29uZmlnIFVCQ19XQUtFVVAKLQlib29sICJXYWtldXAgVUJDIG9uIHN0YXJ0dXAiCi0JaGVscAotCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uIHdpbGwgd2FrZXVwIHRoZSBVc2VyIEJyZWFrIENvbnRyb2xsZXIgKFVCQykgb24KLQkgIHN0YXJ0dXAuIEFsdGhvdWdoIHRoZSBVQkMgaXMgbGVmdCBpbiBhbiBhd2FrZSBzdGF0ZSB3aGVuIHRoZSBwcm9jZXNzb3IKLQkgIGNvbWVzIHVwLCBzb21lIGJvb3QgbG9hZGVycyBtaXNiZWhhdmUgYnkgcHV0dGluZyB0aGUgVUJDIHRvIHNsZWVwIGluIGEKLQkgIHBvd2VyIHNhdmluZyBzdGF0ZSwgd2hpY2ggY2F1c2VzIGlzc3VlcyB3aXRoIHRoaW5ncyBsaWtlIHB0cmFjZSgpLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgU0hfV1JJVEVUSFJPVUdICi0JYm9vbCAiVXNlIHdyaXRlLXRocm91Z2ggY2FjaGluZyIKLQlkZWZhdWx0IHkgaWYgQ1BVX1NIMgotCWhlbHAKLQkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIGNvbmZpZ3VyZSB0aGUgY2FjaGVzIGluIHdyaXRlLXRocm91Z2gKLQkgIG1vZGUsIGFzIG9wcG9zZWQgdG8gdGhlIGRlZmF1bHQgd3JpdGUtYmFjayBjb25maWd1cmF0aW9uLgotCi0JICBTaW5jZSB0aGVyZSdzIHNpbGwgc29tZSBhbGlhc2luZyBpc3N1ZXMgb24gU0gtNCwgdGhpcyBvcHRpb24gd2lsbAotCSAgdW5mb3J0dW5hdGVseSBzdGlsbCByZXF1aXJlIHRoZSBtYWpvcml0eSBvZiBmbHVzaGluZyBmdW5jdGlvbnMgdG8KLQkgIGJlIGltcGxlbWVudGVkIHRvIGRlYWwgd2l0aCBhbGlhc2luZy4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIFNIX09DUkFNCi0JYm9vbCAiT3BlcmFuZCBDYWNoZSBSQU0gKE9DUkFNKSBzdXBwb3J0IgotCWhlbHAKLQkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgdGVhciBkb3duIHRoZSBudW1iZXIgb2YKLQkgIHNldHMgaW4gdGhlIGRjYWNoZSBieSBoYWxmLCB3aGljaCBpbiB0dXJuIGV4cG9zZXMgYSBtZW1vcnkgcmFuZ2UuCi0KLQkgIFRoZSBhZGRyZXNzZXMgZm9yIHRoZSBPQyBSQU0gYmFzZSB3aWxsIHZhcnkgYWNjb3JkaW5nIHRvIHRoZQotCSAgcHJvY2Vzc29yIHZlcnNpb24uIENvbnN1bHQgdmVuZG9yIGRvY3VtZW50YXRpb24gZm9yIHNwZWNpZmljcy4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIFNIX1NUT1JFX1FVRVVFUwogCWJvb2wgIlN1cHBvcnQgZm9yIFN0b3JlIFF1ZXVlcyIKIAlkZXBlbmRzIG9uIENQVV9TSDQKQEAgLTU3NSw2ICszNTksMTI1IEBACiAJICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gd2lsbCBlbmFibGUgYW4gaW4ta2VybmVsIEFQSSBmb3IgbWFuaXB1bGF0aW5nCiAJICB0aGUgc3RvcmUgcXVldWVzIGludGVncmF0ZWQgaW4gdGhlIFNILTQgcHJvY2Vzc29ycy4KIAorY29uZmlnIENQVV9IQVNfSU5URVZUCisJYm9vbAorCitjb25maWcgQ1BVX0hBU19QSU5UX0lSUQorCWJvb2wKKworY29uZmlnIENQVV9IQVNfSU5UQzJfSVJRCisJYm9vbAorCitjb25maWcgQ1BVX0hBU19TUl9SQgorCWJvb2wgIkNQVSBoYXMgU1IuUkIiCisJZGVwZW5kcyBvbiBDUFVfU0gzIHx8IENQVV9TSDQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIHdpbGwgZW5hYmxlIHRoZSB1c2Ugb2YgU1IuUkIgcmVnaXN0ZXIgYmFuayB1c2FnZS4gUHJvY2Vzc29ycworCSAgdGhhdCBhcmUgbGFja2luZyB0aGlzIGJpdCBtdXN0IGhhdmUgYW5vdGhlciBtZXRob2QgaW4gcGxhY2UgZm9yCisJICBhY2NvbXBsaXNoaW5nIHdoYXQgaXMgdGFrZW4gY2FyZSBvZiBieSB0aGUgYmFua2VkIHJlZ2lzdGVycy4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vc2gvcmVnaXN0ZXItYmFua3MudHh0PiBmb3IgZnVydGhlcgorCSAgaW5mb3JtYXRpb24gb24gU1IuUkIgYW5kIHJlZ2lzdGVyIGJhbmtpbmcgaW4gdGhlIGtlcm5lbCBpbiBnZW5lcmFsLgorCitlbmRtZW51CisKK21lbnUgIlRpbWVyIHN1cHBvcnQiCisKK2NvbmZpZyBTSF9UTVUKKwlib29sICJUTVUgdGltZXIgc3VwcG9ydCIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgVE1VIGFzIHRoZSBzeXN0ZW0gdGltZXIuCisKK2VuZG1lbnUKKworc291cmNlICJhcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL0tjb25maWciCisKK3NvdXJjZSAiYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL0tjb25maWciCisKK2NvbmZpZyBTSF9QQ0xLX0ZSRVFfQk9PTAorCWJvb2wgIlNldCBkZWZhdWx0IHBjbGsgZnJlcXVlbmN5IgorCWRlZmF1bHQgeSBpZiAhU0hfUlRDCisJZGVmYXVsdCBuCisKK2NvbmZpZyBTSF9QQ0xLX0ZSRVEKKwlpbnQgIlBlcmlwaGVyYWwgY2xvY2sgZnJlcXVlbmN5IChpbiBIeikiCisJZGVwZW5kcyBvbiBTSF9QQ0xLX0ZSRVFfQk9PTAorCWRlZmF1bHQgIjUwMDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc3NTAgfHwgQ1BVX1NVQlRZUEVfU0g3NzgwCisJZGVmYXVsdCAiNjAwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzc1MQorCWRlZmF1bHQgIjMzMzMzMzMzIiBpZiBDUFVfU1VCVFlQRV9TSDczMDAgfHwgQ1BVX1NVQlRZUEVfU0g3NzcwIHx8IENQVV9TVUJUWVBFX1NINzc2MAorCWRlZmF1bHQgIjI3MDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDczMTgwCisJZGVmYXVsdCAiNjYwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINF8yMDIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHBlcmlwaGVyYWwgY2xvY2sgZnJlcXVlbmN5LgorCSAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGRldGVybWluaW5nIHRoZSByZWZlcmVuY2UgY2xvY2sgdmFsdWUgb24KKwkgIHBsYXRmb3JtcyBsYWNraW5nIGFuIFJUQy4KKworbWVudSAiQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIgorCitzb3VyY2UgImRyaXZlcnMvY3B1ZnJlcS9LY29uZmlnIgorCitjb25maWcgU0hfQ1BVX0ZSRVEKKwl0cmlzdGF0ZSAiU3VwZXJIIENQVSBGcmVxdWVuY3kgZHJpdmVyIgorCWRlcGVuZHMgb24gQ1BVX0ZSRVEKKwlzZWxlY3QgQ1BVX0ZSRVFfVEFCTEUKKwloZWxwCisJICBUaGlzIGFkZHMgdGhlIGNwdWZyZXEgZHJpdmVyIGZvciBTdXBlckguIEF0IHByZXNlbnQsIG9ubHkKKwkgIHRoZSBTSC00IGlzIHN1cHBvcnRlZC4KKworCSAgRm9yIGRldGFpbHMsIHRha2UgYSBsb29rIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vY3B1LWZyZXE+LgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitlbmRtZW51CisKK3NvdXJjZSAiYXJjaC9zaC9kcml2ZXJzL2RtYS9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvc2gvY2NoaXBzL0tjb25maWciCisKK2NvbmZpZyBIRUFSVEJFQVQKKwlib29sICJIZWFydGJlYXQgTEVEIgorCWRlcGVuZHMgb24gU0hfTVBDMTIxMSB8fCBTSF9TSDAzIHx8IFNIX0NBVDY4NzAxIHx8IFwKKwkJICAgU0hfU1RCMV9IQVJQIHx8IFNIX1NUQjFfT1ZFUkRSSVZFIHx8IFNIX0JJR1NVUiB8fCBcCisJCSAgIFNIXzc3NTFfU09MVVRJT05fRU5HSU5FIHx8IFNIXzczMDBfU09MVVRJT05fRU5HSU5FIHx8IFwKKwkJICAgU0hfNzMxODBfU09MVVRJT05fRU5HSU5FIHx8IFNIX1NPTFVUSU9OX0VOR0lORSB8fCBcCisJCSAgIFNIX1JUUzc3NTFSMkQgfHwgU0hfU0g0MjAyX01JQ1JPREVWIHx8IFNIX0xBTkRJU0sKKwloZWxwCisJICBVc2UgdGhlIHBvd2VyLW9uIExFRCBvbiB5b3VyIG1hY2hpbmUgYXMgYSBsb2FkIG1ldGVyLiAgVGhlIGV4YWN0CisJICBiZWhhdmlvciBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQsIGJ1dCBub3JtYWxseSB0aGUgZmxhc2ggZnJlcXVlbmN5IGlzCisJICBhIGh5cGVyYm9saWMgZnVuY3Rpb24gb2YgdGhlIDUtbWludXRlIGxvYWQgYXZlcmFnZS4KKworZW5kbWVudQorCitjb25maWcgSVNBX0RNQV9BUEkKKwlib29sCisJZGVwZW5kcyBvbiBNUEMxMjExCisJZGVmYXVsdCB5CisKK21lbnUgIktlcm5lbCBmZWF0dXJlcyIKKworY29uZmlnIEtFWEVDCisJYm9vbCAia2V4ZWMgc3lzdGVtIGNhbGwgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBrZXhlYyBpcyBhIHN5c3RlbSBjYWxsIHRoYXQgaW1wbGVtZW50cyB0aGUgYWJpbGl0eSB0byBzaHV0ZG93biB5b3VyCisJICBjdXJyZW50IGtlcm5lbCwgYW5kIHRvIHN0YXJ0IGFub3RoZXIga2VybmVsLiAgSXQgaXMgbGlrZSBhIHJlYm9vdAorCSAgYnV0IGl0IGlzIGluZGVwZWRlbnQgb2YgdGhlIHN5c3RlbSBmaXJtd2FyZS4gIEFuZCBsaWtlIGEgcmVib290CisJICB5b3UgY2FuIHN0YXJ0IGFueSBrZXJuZWwgd2l0aCBpdCwgbm90IGp1c3QgTGludXguCisKKwkgIFRoZSBuYW1lIGNvbWVzIGZyb20gdGhlIHNpbWlsaWFyaXR5IHRvIHRoZSBleGVjIHN5c3RlbSBjYWxsLgorCisJICBJdCBpcyBhbiBvbmdvaW5nIHByb2Nlc3MgdG8gYmUgY2VydGFpbiB0aGUgaGFyZHdhcmUgaW4gYSBtYWNoaW5lCisJICBpcyBwcm9wZXJseSBzaHV0ZG93biwgc28gZG8gbm90IGJlIHN1cnByaXNlZCBpZiB0aGlzIGNvZGUgZG9lcyBub3QKKwkgIGluaXRpYWxseSB3b3JrIGZvciB5b3UuICBJdCBtYXkgaGVscCB0byBlbmFibGUgZGV2aWNlIGhvdHBsdWdnaW5nCisJICBzdXBwb3J0LiAgQXMgb2YgdGhpcyB3cml0aW5nIHRoZSBleGFjdCBoYXJkd2FyZSBpbnRlcmZhY2UgaXMKKwkgIHN0cm9uZ2x5IGluIGZsdXgsIHNvIG5vIGdvb2QgcmVjb21tZW5kYXRpb24gY2FuIGJlIG1hZGUuCisKK2NvbmZpZyBQUkVFTVBUCisJYm9vbCAiUHJlZW1wdGlibGUgS2VybmVsIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisKIGNvbmZpZyBTTVAKIAlib29sICJTeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0IgogCS0tLWhlbHAtLS0KQEAgLTYxMCw4NyArNTEzLDU4IEBACiAJICBUaGlzIGlzIHB1cmVseSB0byBzYXZlIG1lbW9yeSAtIGVhY2ggc3VwcG9ydGVkIENQVSBhZGRzCiAJICBhcHByb3hpbWF0ZWx5IGVpZ2h0IGtpbG9ieXRlcyB0byB0aGUga2VybmVsIGltYWdlLgogCi1jb25maWcgSFM3NzUxUlZPSVBfQ09ERUMKLQlib29sICJTdXBwb3J0IFZvSVAgQ29kZWMgc2VjdGlvbiIKLQlkZXBlbmRzIG9uIFNIX0hTNzc1MVJWT0lQCi0JaGVscAotCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uIHdpbGwgc3VwcG9ydCBDT0RFQyBzZWN0aW9uLgotCi1jb25maWcgUlRTNzc1MVIyRF9SRVYxMQotCWJvb2wgIlJUUzc3NTFSMkQgUmV2LiAxLjEgYm9hcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNIX1JUUzc3NTFSMkQKLQloZWxwCi0JICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gd2lsbCBzdXBwb3J0IHZlcnNpb24gcmV2LiAxLjEuCi0KLWNvbmZpZyBTSF9QQ0xLX0NBTEMKLQlib29sCi0JZGVmYXVsdCBuIGlmIENQVV9TVUJUWVBFX1NINzMwMCB8fCBDUFVfU1VCVFlQRV9TSDczMTgwCitjb25maWcgQ1BVX0hBU19TUl9SQgorCWJvb2wgIkNQVSBoYXMgU1IuUkIiCisJZGVwZW5kcyBvbiBDUFVfU0gzIHx8IENQVV9TSDQKIAlkZWZhdWx0IHkKIAloZWxwCi0JICBUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBQQ0xLIHZhbHVlIHRvIGJlIHByb2JlZCBhdCBydW4tdGltZS4gSXQKLQkgIHdpbGwgZGlzcGxheSBhIG5vdGlmaWNhdGlvbiBpZiB0aGUgcHJvYmVkIHZhbHVlIGhhcyBncmVhdGVyIHRoYW4gYQotCSAgMSUgdmFyaWFuY2Ugb2YgdGhlIGhhcmRjb2RlZCBDT05GSUdfU0hfUENMS19GUkVRLgorCSAgVGhpcyB3aWxsIGVuYWJsZSB0aGUgdXNlIG9mIFNSLlJCIHJlZ2lzdGVyIGJhbmsgdXNhZ2UuIFByb2Nlc3NvcnMKKwkgIHRoYXQgYXJlIGxhY2tpbmcgdGhpcyBiaXQgbXVzdCBoYXZlIGFub3RoZXIgbWV0aG9kIGluIHBsYWNlIGZvcgorCSAgYWNjb21wbGlzaGluZyB3aGF0IGlzIHRha2VuIGNhcmUgb2YgYnkgdGhlIGJhbmtlZCByZWdpc3RlcnMuCiAKLWNvbmZpZyBTSF9QQ0xLX0ZSRVEKLQlpbnQgIlBlcmlwaGVyYWwgY2xvY2sgZnJlcXVlbmN5IChpbiBIeikiCi0JZGVmYXVsdCAiNTAwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzc1MAotCWRlZmF1bHQgIjYwMDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc3NTEKLQlkZWZhdWx0ICIzMzMzMzMzMyIgaWYgQ1BVX1NVQlRZUEVfU0g3MzAwCi0JZGVmYXVsdCAiMjcwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzMxODAKLQlkZWZhdWx0ICI2NjAwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g0XzIwMgotCWRlZmF1bHQgIjExOTMxODIiCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zaC9yZWdpc3Rlci1iYW5rcy50eHQ+IGZvciBmdXJ0aGVyCisJICBpbmZvcm1hdGlvbiBvbiBTUi5SQiBhbmQgcmVnaXN0ZXIgYmFua2luZyBpbiB0aGUga2VybmVsIGluIGdlbmVyYWwuCisKK2VuZG1lbnUKKworbWVudSAiQm9vdCBvcHRpb25zIgorCitjb25maWcgWkVST19QQUdFX09GRlNFVAorCWhleCAiWmVybyBwYWdlIG9mZnNldCIKKwlkZWZhdWx0ICIweDAwMDA0MDAwIiBpZiBTSF9NUEMxMjExIHx8IFNIX1NIMDMKKwlkZWZhdWx0ICIweDAwMDAxMDAwIgogCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGVyaXBoZXJhbCBjbG9jayBmcmVxdWVuY3kuIFRoaXMKLQkgIG9wdGlvbiBtdXN0IGJlIHNldCBmb3IgZWFjaCBwcm9jZXNzb3IgaW4gb3JkZXIgZm9yIHRoZSBrZXJuZWwgdG8KLQkgIGZ1bmN0aW9uIHJlbGlhYmx5LiBJZiBubyBzYW5lIGRlZmF1bHQgZXhpc3RzLCB3ZSB1c2UgYSBkZWZhdWx0IGZyb20KLQkgIHRoZSBsZWdhY3kgaTgyNTQuIEFueSBkaXNjcmVwYW5jaWVzIHdpbGwgYmUgcmVwb3J0ZWQgb24gYm9vdCB0aW1lCi0JICB3aXRoIGFuIGF1dG8tcHJvYmVkIGZyZXF1ZW5jeSB3aGljaCBzaG91bGQgYmUgY29uc2lkZXJlZCB0aGUgcHJvcGVyCi0JICB2YWx1ZSBmb3IgeW91ciBoYXJkd2FyZS4KKwkgIFRoaXMgc2V0cyB0aGUgZGVmYXVsdCBvZmZzZXQgb2YgemVybyBwYWdlLgogCi1tZW51ICJDUFUgRnJlcXVlbmN5IHNjYWxpbmciCi0KLXNvdXJjZSAiZHJpdmVycy9jcHVmcmVxL0tjb25maWciCi0KLWNvbmZpZyBTSF9DUFVfRlJFUQotCXRyaXN0YXRlICJTdXBlckggQ1BVIEZyZXF1ZW5jeSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBDUFVfRlJFUQotCXNlbGVjdCBDUFVfRlJFUV9UQUJMRQorY29uZmlnIEJPT1RfTElOS19PRkZTRVQKKwloZXggIkxpbmsgYWRkcmVzcyBvZmZzZXQgZm9yIGJvb3RpbmciCisJZGVmYXVsdCAiMHgwMDgwMDAwMCIKIAloZWxwCi0JICBUaGlzIGFkZHMgdGhlIGNwdWZyZXEgZHJpdmVyIGZvciBTdXBlckguIEF0IHByZXNlbnQsIG9ubHkKLQkgIHRoZSBTSC00IGlzIHN1cHBvcnRlZC4KKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSBsaW5rIGFkZHJlc3Mgb2Zmc2V0IG9mIHRoZSB6SW1hZ2UuCisJICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IGFyZSBvbiBhIGJvYXJkIHdoaWNoIGhhcyBhIHNtYWxsIGFtb3VudCBvZgorCSAgbWVtb3J5LgogCi0JICBGb3IgZGV0YWlscywgdGFrZSBhIGxvb2sgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi9jcHUtZnJlcT4uCitjb25maWcgVUJDX1dBS0VVUAorCWJvb2wgIldha2V1cCBVQkMgb24gc3RhcnR1cCIKKwloZWxwCisJICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gd2lsbCB3YWtldXAgdGhlIFVzZXIgQnJlYWsgQ29udHJvbGxlciAoVUJDKSBvbgorCSAgc3RhcnR1cC4gQWx0aG91Z2ggdGhlIFVCQyBpcyBsZWZ0IGluIGFuIGF3YWtlIHN0YXRlIHdoZW4gdGhlIHByb2Nlc3NvcgorCSAgY29tZXMgdXAsIHNvbWUgYm9vdCBsb2FkZXJzIG1pc2JlaGF2ZSBieSBwdXR0aW5nIHRoZSBVQkMgdG8gc2xlZXAgaW4gYQorCSAgcG93ZXIgc2F2aW5nIHN0YXRlLCB3aGljaCBjYXVzZXMgaXNzdWVzIHdpdGggdGhpbmdzIGxpa2UgcHRyYWNlKCkuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWVuZG1lbnUKK2NvbmZpZyBDTURMSU5FX0JPT0wKKwlib29sICJEZWZhdWx0IGJvb3Rsb2FkZXIga2VybmVsIGFyZ3VtZW50cyIKIAotc291cmNlICJhcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWciCi0KLXNvdXJjZSAiYXJjaC9zaC9jY2hpcHMvS2NvbmZpZyIKLQotY29uZmlnIEhFQVJUQkVBVAotCWJvb2wgIkhlYXJ0YmVhdCBMRUQiCi0JZGVwZW5kcyBvbiBTSF9NUEMxMjExIHx8IFNIX1NIMDMgfHwgU0hfQ0FUNjg3MDEgfHwgU0hfU1RCMV9IQVJQIHx8IFNIX1NUQjFfT1ZFUkRSSVZFIHx8IFNIX0JJR1NVUiB8fCBTSF83NzUxX1NPTFVUSU9OX0VOR0lORSB8fCBTSF83MzAwX1NPTFVUSU9OX0VOR0lORSB8fCBTSF83MzE4MF9TT0xVVElPTl9FTkdJTkUgfHwgU0hfU09MVVRJT05fRU5HSU5FIHx8IFNIX1JUUzc3NTFSMkQgfHwgU0hfU0g0MjAyX01JQ1JPREVWCi0JaGVscAotCSAgVXNlIHRoZSBwb3dlci1vbiBMRUQgb24geW91ciBtYWNoaW5lIGFzIGEgbG9hZCBtZXRlci4gIFRoZSBleGFjdAotCSAgYmVoYXZpb3IgaXMgcGxhdGZvcm0tZGVwZW5kZW50LCBidXQgbm9ybWFsbHkgdGhlIGZsYXNoIGZyZXF1ZW5jeSBpcwotCSAgYSBoeXBlcmJvbGljIGZ1bmN0aW9uIG9mIHRoZSA1LW1pbnV0ZSBsb2FkIGF2ZXJhZ2UuCi0KLWNvbmZpZyBSVENfOTcwMUpFCi0JdHJpc3RhdGUgIkVQU09OIFJUQy05NzAxSkUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNIX1JUUzc3NTFSMkQKLQloZWxwCi0JICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gd2lsbCBzdXBwb3J0IEVQU09OIFJUQy05NzAxSkUuCitjb25maWcgQ01ETElORQorCXN0cmluZyAiSW5pdGlhbCBrZXJuZWwgY29tbWFuZCBzdHJpbmciCisJZGVwZW5kcyBvbiBDTURMSU5FX0JPT0wKKwlkZWZhdWx0ICJjb25zb2xlPXR0eVNDMSwxMTUyMDAiCiAKIGVuZG1lbnUKIAotY29uZmlnIElTQV9ETUFfQVBJCi0JYm9vbAotCWRlcGVuZHMgb24gTVBDMTIxMQotCWRlZmF1bHQgeQotCi1tZW51ICJCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIE1DQSwgSVNBKSIKK21lbnUgIkJ1cyBvcHRpb25zIgogCiAjIEV2ZW4gb24gU3VwZXJIIGRldmljZXMgd2hpY2ggZG9uJ3QgaGF2ZSBhbiBJU0EgYnVzLAogIyB0aGlzIHZhcmlhYmxlIGhlbHBzIHRoZSBQQ01DSUEgbW9kdWxlcyBoYW5kbGUKQEAgLTcwMSw3ICs1NzUsNyBAQAogIyBQQ01DSUEgb3V0cmlnaHQuIC0tIFBGTS4KIGNvbmZpZyBJU0EKIAlib29sCi0JZGVmYXVsdCB5IGlmIFBDTUNJQSB8fCBTTUM5MVgKKwlkZWZhdWx0IHkgaWYgUENNQ0lBCiAJaGVscAogCSAgRmluZCBvdXQgd2hldGhlciB5b3UgaGF2ZSBJU0Egc2xvdHMgb24geW91ciBtb3RoZXJib2FyZC4gIElTQSBpcyB0aGUKIAkgIG5hbWUgb2YgYSBidXMgc3lzdGVtLCBpLmUuIHRoZSB3YXkgdGhlIENQVSB0YWxrcyB0byB0aGUgb3RoZXIgc3R1ZmYKQEAgLTczNSwxMCArNjA5LDkgQEAKIGNvbmZpZyBTQlVTCiAJYm9vbAogCi1jb25maWcgTUFQTEUKLQl0cmlzdGF0ZSAiTWFwbGUgQnVzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTSF9EUkVBTUNBU1QKLQlkZWZhdWx0IHkKK2NvbmZpZyBTVVBFUkhZV0FZCisJdHJpc3RhdGUgIlN1cGVySHl3YXkgQnVzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDRfMjAyCiAKIHNvdXJjZSAiYXJjaC9zaC9kcml2ZXJzL3BjaS9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcuZGVidWcgYi9hcmNoL3NoL0tjb25maWcuZGVidWcKaW5kZXggM2ZhYjE4MS4uOGZiMzFhYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvc2gvS2NvbmZpZy5kZWJ1ZwpAQCAtMTcsNyArMTcsNyBAQAogCiBjb25maWcgRUFSTFlfU0NJRl9DT05TT0xFCiAJYm9vbCAiVXNlIGVhcmx5IFNDSUYgY29uc29sZSIKLQlkZXBlbmRzIG9uIENQVV9TSDQKKwlkZXBlbmRzIG9uIENQVV9TSDQgfHwgQ1BVX1NIMkEgJiYgIVNIX1NUQU5EQVJEX0JJT1MKIAogY29uZmlnIEVBUkxZX1BSSU5USwogCWJvb2wgIkVhcmx5IHByaW50ayBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggNjcxOTJkNi4uMDhjOTUxNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtMTcsMTAgKzE3LDMwIEBACiBjZmxhZ3MteQkJCQk6PSAtbWIKIGNmbGFncy0kKENPTkZJR19DUFVfTElUVExFX0VORElBTikJOj0gLW1sCiAKK2lzYS15CQkJCQk6PSBhbnkKK2lzYS0kKENPTkZJR19DUFVfU0gyKQkJCTo9IHNoMgoraXNhLSQoQ09ORklHX0NQVV9TSDMpCQkJOj0gc2gzCitpc2EtJChDT05GSUdfQ1BVX1NINCkJCQk6PSBzaDQKK2lzYS0kKENPTkZJR19DUFVfU0g0QSkJCQk6PSBzaDRhCitpc2EtJChDT05GSUdfQ1BVX1NIMkEpCQkJOj0gc2gyYQorCitpc2EtJChDT05GSUdfU0hfRFNQKQkJCTo9ICQoaXNhLXkpLWRzcAorCitpZm5kZWYgQ09ORklHX01NVQoraXNhLXkJCQk6PSAkKGlzYS15KS1ub21tdQorZW5kaWYKKworaWZuZGVmIENPTkZJR19TSF9GUFUKK2lzYS15CQkJOj0gJChpc2EteSktbm9mcHUKK2VuZGlmCisKK2NmbGFncy15CSs9ICQoY2FsbCBhcy1vcHRpb24sLVdhJChjb21tYSktaXNhPSQoaXNhLXkpLCkKKwogY2ZsYWdzLSQoQ09ORklHX0NQVV9TSDIpCQkrPSAtbTIKIGNmbGFncy0kKENPTkZJR19DUFVfU0gzKQkJKz0gLW0zCiBjZmxhZ3MtJChDT05GSUdfQ1BVX1NINCkJCSs9IC1tNCBcCiAJJChjYWxsIGNjLW9wdGlvbiwtbW5vLWltcGxpY2l0LWZwLC1tNC1ub2ZwdSkKK2NmbGFncy0kKENPTkZJR19DUFVfU0g0QSkJCSs9ICQoY2FsbCBjYy1vcHRpb24sLW00YS1ub2ZwdSwpCiAKIGNmbGFncy0kKENPTkZJR19TSF9EU1ApCQkJKz0gLVdhLC1kc3AKIGNmbGFncy0kKENPTkZJR19TSF9LR0RCKQkJKz0gLWcKQEAgLTY3LDkgKzg3LDcgQEAKIG1hY2hkaXItJChDT05GSUdfU0hfNzMxODBfU09MVVRJT05fRU5HSU5FKQk6PSBzZS83MzE4MAogbWFjaGRpci0kKENPTkZJR19TSF9TVEIxX0hBUlApCQkJOj0gaGFycAogbWFjaGRpci0kKENPTkZJR19TSF9TVEIxX09WRVJEUklWRSkJCTo9IG92ZXJkcml2ZQotbWFjaGRpci0kKENPTkZJR19TSF9IUDYyMCkJCQk6PSBocDZ4eC9ocDYyMAotbWFjaGRpci0kKENPTkZJR19TSF9IUDY4MCkJCQk6PSBocDZ4eC9ocDY4MAotbWFjaGRpci0kKENPTkZJR19TSF9IUDY5MCkJCQk6PSBocDZ4eC9ocDY5MAorbWFjaGRpci0kKENPTkZJR19TSF9IUDZYWCkJCQk6PSBocDZ4eAogbWFjaGRpci0kKENPTkZJR19TSF9DUVJFRUspCQkJOj0gY3FyZWVrCiBtYWNoZGlyLSQoQ09ORklHX1NIX0RNSURBKQkJCTo9IGRtaWRhCiBtYWNoZGlyLSQoQ09ORklHX1NIX0VDMzEwNCkJCQk6PSBlYzMxMDQKQEAgLTExOSwzMSArMTM3LDM5IEBACiAKIENQUEZMQUdTX3ZtbGludXgubGRzIDo9IC10cmFkaXRpb25hbAogCitpZm5lcSAoJChLQlVJTERfU1JDKSwpCitpbmNkaXItcHJlZml4CTo9ICQoc3JjdHJlZSkvaW5jbHVkZS9hc20tc2gvCitlbHNlCitpbmNkaXItcHJlZml4CTo9CitlbmRpZgorCiAjCVVwZGF0ZSBtYWNoaW5lIGFyY2ggYW5kIHByb2Mgc3ltbGlua3MgaWYgc29tZXRoaW5nIHdoaWNoIGFmZmVjdHMKICMJdGhlbSBjaGFuZ2VkLiAgV2UgdXNlIC5hcmNoIGFuZCAubWFjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgd2VyZQogIwl1cGRhdGVkIGxhc3QsIG90aGVyd2lzZSBtYWtlIHVzZXMgdGhlIHRhcmdldCBkaXJlY3RvcnkgbXRpbWUuCiAKIGluY2x1ZGUvYXNtLXNoLy5jcHU6ICQod2lsZGNhcmQgaW5jbHVkZS9jb25maWcvY3B1LyouaCkgaW5jbHVkZS9jb25maWcvTUFSS0VSCiAJQGVjaG8gJyAgU1lNTElOSyBpbmNsdWRlL2FzbS1zaC9jcHUgLT4gaW5jbHVkZS9hc20tc2gvJChjcHVpbmNkaXIteSknCi1pZm5lcSAoJChLQlVJTERfU1JDKSwpCi0JJChRKW1rZGlyIC1wIGluY2x1ZGUvYXNtLXNoCi0JJChRKWxuIC1mc24gJChzcmN0cmVlKS9pbmNsdWRlL2FzbS1zaC8kKGNwdWluY2Rpci15KSBpbmNsdWRlL2FzbS1zaC9jcHUKLWVsc2UKLQkkKFEpbG4gLWZzbiAkKGNwdWluY2Rpci15KSBpbmNsdWRlL2FzbS1zaC9jcHUKLWVuZGlmCisJJChRKWlmIFsgISAtZCBpbmNsdWRlL2FzbS1zaCBdOyB0aGVuIG1rZGlyIC1wIGluY2x1ZGUvYXNtLXNoOyBmaQorCSQoUSlsbiAtZnNuICQoaW5jZGlyLXByZWZpeCkkKGNwdWluY2Rpci15KSBpbmNsdWRlL2FzbS1zaC9jcHUKIAlAdG91Y2ggJEAKIAorIwlNb3N0IGJvYXJkcyBoYXZlIHRoZWlyIG93biBtYWNoIGRpcmVjdG9yaWVzLiAgRm9yIHRoZSBvbmVzIHRoYXQKKyMJZG9uJ3QsIGp1c3QgcmVmZXJlbmNlIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHNvIHRoZSBzZW1hbnRpY3MgYXJlCisjCWtlcHQgcm91Z2hseSB0aGUgc2FtZS4KKwogaW5jbHVkZS9hc20tc2gvLm1hY2g6ICQod2lsZGNhcmQgaW5jbHVkZS9jb25maWcvc2gvKi5oKSBpbmNsdWRlL2NvbmZpZy9NQVJLRVIKLQlAZWNobyAnICBTWU1MSU5LIGluY2x1ZGUvYXNtLXNoL21hY2ggLT4gaW5jbHVkZS9hc20tc2gvJChpbmNkaXIteSknCi1pZm5lcSAoJChLQlVJTERfU1JDKSwpCi0JJChRKW1rZGlyIC1wIGluY2x1ZGUvYXNtLXNoCi0JJChRKWxuIC1mc24gJChzcmN0cmVlKS9pbmNsdWRlL2FzbS1zaC8kKGluY2Rpci15KSBpbmNsdWRlL2FzbS1zaC9tYWNoCi1lbHNlCi0JJChRKWxuIC1mc24gJChpbmNkaXIteSkgaW5jbHVkZS9hc20tc2gvbWFjaAotZW5kaWYKKwlAZWNobyAtbiAnICBTWU1MSU5LIGluY2x1ZGUvYXNtLXNoL21hY2ggLT4gJworCSQoUSlpZiBbICEgLWQgaW5jbHVkZS9hc20tc2ggXTsgdGhlbiBta2RpciAtcCBpbmNsdWRlL2FzbS1zaDsgZmkKKwkkKFEpaWYgWyAtZCAkKGluY2Rpci1wcmVmaXgpJChpbmNkaXIteSkgXTsgdGhlbiBcCisJCWVjaG8gLWUgJ2luY2x1ZGUvYXNtLXNoLyQoaW5jZGlyLXkpJzsgXAorCQlsbiAtZnNuICQoaW5jZGlyLXByZWZpeCkkKGluY2Rpci15KSBcCisJCQlpbmNsdWRlL2FzbS1zaC9tYWNoOyBcCisJZWxzZSBcCisJCWVjaG8gLWUgJ2luY2x1ZGUvYXNtLXNoJzsgXAorCQlsbiAtZnNuICQoaW5jZGlyLXByZWZpeCkgaW5jbHVkZS9hc20tc2gvbWFjaDsgXAorCWZpCiAJQHRvdWNoICRACiAKLQogYXJjaHByZXBhcmU6IG1ha2V0b29scyBpbmNsdWRlL2FzbS1zaC8uY3B1IGluY2x1ZGUvYXNtLXNoLy5tYWNoCiAKIC5QSE9OWTogbWFrZXRvb2xzIEZPUkNFCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyN2ZlMGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBIUDZ4eCBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCisjCisKK29iai15CSA6PSBtYWNoLm8gc2V0dXAubworCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDYyMC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNjIwL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDY5MWRiLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNjIwL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgSFA2MjAgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAotIwotCi1vYmoteQkgOj0gbWFjaC5vIHNldHVwLm8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvaHA2eHgvaHA2MjAvbWFjaC5jIGIvYXJjaC9zaC9ib2FyZHMvaHA2eHgvaHA2MjAvbWFjaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzkyZDgyLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNjIwL21hY2guYworKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDYyMC9tYWNoLmMKLSAqIAotICogQ29weXJpZ2h0IChDKSAyMDAwIFN0dWFydCBNZW5lZnkgKHN0dWFydC5tZW5lZnlAc3QuY29tKQotICogCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogTWFjaGluZSB2ZWN0b3IgZm9yIHRoZSBIUDYyMAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9ydGMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaHZlY19pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaGQ2NDQ2MS9oZDY0NDYxLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0vKgotICogVGhlIE1hY2hpbmUgVmVjdG9yCi0gKi8KLQotc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X2hwNjIwIF9faW5pdG12ID0gewotICAgICAgICAubXZfbnJfaXJxcyAgICAgICAgICAgICA9IEhENjQ0NjFfSVJRQkFTRStIRDY0NDYxX0lSUV9OVU0sCi0KLSAgICAgICAgLm12X2luYiAgICAgICAgICAgICAgICAgPSBoZDY0NDYxX2luYiwKLSAgICAgICAgLm12X2ludyAgICAgICAgICAgICAgICAgPSBoZDY0NDYxX2ludywKLSAgICAgICAgLm12X2lubCAgICAgICAgICAgICAgICAgPSBoZDY0NDYxX2lubCwKLSAgICAgICAgLm12X291dGIgICAgICAgICAgICAgICAgPSBoZDY0NDYxX291dGIsCi0gICAgICAgIC5tdl9vdXR3ICAgICAgICAgICAgICAgID0gaGQ2NDQ2MV9vdXR3LAotICAgICAgICAubXZfb3V0bCAgICAgICAgICAgICAgICA9IGhkNjQ0NjFfb3V0bCwKLQotICAgICAgICAubXZfaW5iX3AgICAgICAgICAgICAgICA9IGhkNjQ0NjFfaW5iX3AsCi0gICAgICAgIC5tdl9pbndfcCAgICAgICAgICAgICAgID0gaGQ2NDQ2MV9pbncsCi0gICAgICAgIC5tdl9pbmxfcCAgICAgICAgICAgICAgID0gaGQ2NDQ2MV9pbmwsCi0gICAgICAgIC5tdl9vdXRiX3AgICAgICAgICAgICAgID0gaGQ2NDQ2MV9vdXRiX3AsCi0gICAgICAgIC5tdl9vdXR3X3AgICAgICAgICAgICAgID0gaGQ2NDQ2MV9vdXR3LAotICAgICAgICAubXZfb3V0bF9wICAgICAgICAgICAgICA9IGhkNjQ0NjFfb3V0bCwKLQotICAgICAgICAubXZfaW5zYiAgICAgICAgICAgICAgICA9IGhkNjQ0NjFfaW5zYiwKLSAgICAgICAgLm12X2luc3cgICAgICAgICAgICAgICAgPSBoZDY0NDYxX2luc3csCi0gICAgICAgIC5tdl9pbnNsICAgICAgICAgICAgICAgID0gaGQ2NDQ2MV9pbnNsLAotICAgICAgICAubXZfb3V0c2IgICAgICAgICAgICAgICA9IGhkNjQ0NjFfb3V0c2IsCi0gICAgICAgIC5tdl9vdXRzdyAgICAgICAgICAgICAgID0gaGQ2NDQ2MV9vdXRzdywKLSAgICAgICAgLm12X291dHNsICAgICAgICAgICAgICAgPSBoZDY0NDYxX291dHNsLAotCi0gICAgICAgIC5tdl9pcnFfZGVtdXggICAgICAgICAgID0gaGQ2NDQ2MV9pcnFfZGVtdXgsCi19OwotQUxJQVNfTVYoaHA2MjApCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDYyMC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvaHA2eHgvaHA2MjAvc2V0dXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ1ZmM1ZC4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDYyMC9zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNjIwL3NldHVwLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgQW5kcml5IFNrdWx5c2gsIDIwMDUgS3Jpc3RvZmZlciBFcmljc29uCi0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gU2VlIExpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogU2V0dXAgY29kZSBmb3IgYW4gSFA2MjAuCi0gKiBEdWUgdG8gc2ltaWxpYXJpdHkgd2l0aCBocDY4MC9ocDY5MCBzYW1lIGluaXRzIGFyZSBkb25lIChmb3Igbm93KQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL2hkNjQ0NjEvaGQ2NDQ2MS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC9ocDZ4eC5oPgotI2luY2x1ZGUgPGFzbS9jcHUvZGFjLmg+Ci0KLWNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQotewotCXJldHVybiAiSFA2MjAiOwotfQotCi1pbnQgX19pbml0IHBsYXRmb3JtX3NldHVwKHZvaWQpCi17Ci0JdTE2IHY7Ci0KLQl2ICA9IGludyhIRDY0NDYxX1NUQkNSKTsKLQl2IHw9IEhENjQ0NjFfU1RCQ1JfU1VSVFNUIHwgSEQ2NDQ2MV9TVEJDUl9TSVJTVCAgfAotCSAgICAgSEQ2NDQ2MV9TVEJDUl9TVE0xU1QgfCBIRDY0NDYxX1NUQkNSX1NUTTBTVCB8Ci0JICAgICBIRDY0NDYxX1NUQkNSX1NBRkVTVCB8IEhENjQ0NjFfU1RCQ1JfU1BDMFNUIHwKLQkgICAgIEhENjQ0NjFfU1RCQ1JfU01JQVNUIHwgSEQ2NDQ2MV9TVEJDUl9TQUZFQ0tFX09TVCB8Ci0JICAgICBIRDY0NDYxX1NUQkNSX1NBRkVDS0VfSVNUOwotCW91dHcodiwgSEQ2NDQ2MV9TVEJDUik7Ci0KLQl2ICA9IGludyhIRDY0NDYxX0dQQURSKTsKLQl2IHw9IEhENjQ0NjFfR1BBRFJfU1BFQUtFUiB8IEhENjQ0NjFfR1BBRFJfUENNQ0lBMDsKLQlvdXR3KHYsIEhENjQ0NjFfR1BBRFIpOwotCi0Jc2hfZGFjX2Rpc2FibGUoREFDX1NQRUFLRVJfVk9MVU1FKTsKLQotCXJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDY4MC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNjgwL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmVlZjExLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNjgwL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgSFA2ODAgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAotIwotCi1vYmoteQkgOj0gbWFjaC5vIHNldHVwLm8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvaHA2eHgvaHA2OTAvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDY5MC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJiZTk1ZS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDY5MC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIEhQNjkwIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBrZXJuZWwKLSMKLQotb2JqLXkJIDo9IG1hY2gubwotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDY5MC9tYWNoLmMgYi9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDY5MC9tYWNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNGM2ODcuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvaHA2eHgvaHA2OTAvbWFjaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNjkwL21hY2guYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogTWFjaGluZSB2ZWN0b3IgZm9yIHRoZSBIUDY5MAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9ydGMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaHZlY19pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaGQ2NDQ2MS9oZDY0NDYxLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi1zdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfaHA2OTAgX19pbml0bXYgPSB7Ci0gICAgICAgIC5tdl9ucl9pcnFzICAgICAgICAgICAgID0gSEQ2NDQ2MV9JUlFCQVNFK0hENjQ0NjFfSVJRX05VTSwKLQotICAgICAgICAubXZfaW5iICAgICAgICAgICAgICAgICA9IGhkNjQ0NjFfaW5iLAotICAgICAgICAubXZfaW53ICAgICAgICAgICAgICAgICA9IGhkNjQ0NjFfaW53LAotICAgICAgICAubXZfaW5sICAgICAgICAgICAgICAgICA9IGhkNjQ0NjFfaW5sLAotICAgICAgICAubXZfb3V0YiAgICAgICAgICAgICAgICA9IGhkNjQ0NjFfb3V0YiwKLSAgICAgICAgLm12X291dHcgICAgICAgICAgICAgICAgPSBoZDY0NDYxX291dHcsCi0gICAgICAgIC5tdl9vdXRsICAgICAgICAgICAgICAgID0gaGQ2NDQ2MV9vdXRsLAotCi0gICAgICAgIC5tdl9pbmJfcCAgICAgICAgICAgICAgID0gaGQ2NDQ2MV9pbmJfcCwKLSAgICAgICAgLm12X2lud19wICAgICAgICAgICAgICAgPSBoZDY0NDYxX2ludywKLSAgICAgICAgLm12X2lubF9wICAgICAgICAgICAgICAgPSBoZDY0NDYxX2lubCwKLSAgICAgICAgLm12X291dGJfcCAgICAgICAgICAgICAgPSBoZDY0NDYxX291dGJfcCwKLSAgICAgICAgLm12X291dHdfcCAgICAgICAgICAgICAgPSBoZDY0NDYxX291dHcsCi0gICAgICAgIC5tdl9vdXRsX3AgICAgICAgICAgICAgID0gaGQ2NDQ2MV9vdXRsLAotCi0gICAgICAgIC5tdl9pbnNiICAgICAgICAgICAgICAgID0gaGQ2NDQ2MV9pbnNiLAotICAgICAgICAubXZfaW5zdyAgICAgICAgICAgICAgICA9IGhkNjQ0NjFfaW5zdywKLSAgICAgICAgLm12X2luc2wgICAgICAgICAgICAgICAgPSBoZDY0NDYxX2luc2wsCi0gICAgICAgIC5tdl9vdXRzYiAgICAgICAgICAgICAgID0gaGQ2NDQ2MV9vdXRzYiwKLSAgICAgICAgLm12X291dHN3ICAgICAgICAgICAgICAgPSBoZDY0NDYxX291dHN3LAotICAgICAgICAubXZfb3V0c2wgICAgICAgICAgICAgICA9IGhkNjQ0NjFfb3V0c2wsCi0KLSAgICAgICAgLm12X2lycV9kZW11eCAgICAgICAgICAgPSBoZDY0NDYxX2lycV9kZW11eCwKLX07Ci1BTElBU19NVihocDY5MCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNjgwL21hY2guYyBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L21hY2guYwpzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBhcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDY4MC9tYWNoLmMKcmVuYW1lIHRvIGFyY2gvc2gvYm9hcmRzL2hwNnh4L21hY2guYwppbmRleCBkNzM0ODYxLi4wOGRiYmE5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDY4MC9tYWNoLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvaHA2eHgvbWFjaC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNjgwL21hY2guYworICogbGludXgvYXJjaC9zaC9ib2FyZHMvaHA2eHgvbWFjaC5jCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAwIFN0dWFydCBNZW5lZnkgKHN0dWFydC5tZW5lZnlAc3QuY29tKQogICoKQEAgLTgsMTkgKzgsMTIgQEAKICAqCiAgKiBNYWNoaW5lIHZlY3RvciBmb3IgdGhlIEhQNjgwCiAgKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL3J0Yy5oPgotI2luY2x1ZGUgPGFzbS9tYWNodmVjX2luaXQuaD4KLQorI2luY2x1ZGUgPGFzbS9oZDY0NDYxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2hkNjQ0NjEvaGQ2NDQ2MS5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X2hwNjgwIF9faW5pdG12ID0geworc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X2hwNnh4IF9faW5pdG12ID0gewogCS5tdl9ucl9pcnFzID0gSEQ2NDQ2MV9JUlFCQVNFICsgSEQ2NDQ2MV9JUlFfTlVNLAogCiAJLm12X2luYiA9IGhkNjQ0NjFfaW5iLApAQCAtNTAsNCArNDMsNCBAQAogCS5tdl9pcnFfZGVtdXggPSBoZDY0NDYxX2lycV9kZW11eCwKIH07CiAKLUFMSUFTX01WKGhwNjgwKQorQUxJQVNfTVYoaHA2eHgpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDY4MC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvaHA2eHgvc2V0dXAuYwpzaW1pbGFyaXR5IGluZGV4IDcwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDY4MC9zZXR1cC5jCnJlbmFtZSB0byBhcmNoL3NoL2JvYXJkcy9ocDZ4eC9zZXR1cC5jCmluZGV4IDQxNzAxOTAuLjZkOTRhOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNjgwL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvaHA2eHgvc2V0dXAuYwpAQCAtMTEsMTggKzExLDE5IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL2hkNjQ0NjEvaGQ2NDQ2MS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9oZDY0NDYxLmg+CiAjaW5jbHVkZSA8YXNtL2hwNnh4L2hwNnh4Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdS9kYWMuaD4KIAogY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCiB7Ci0JcmV0dXJuICJIUDY4MCI7CisJcmV0dXJuICJIUDZ4eCI7CiB9CiAKIGludCBfX2luaXQgcGxhdGZvcm1fc2V0dXAodm9pZCkKIHsKKwl1OCB2ODsKIAl1MTYgdjsKIAl2ID0gaW53KEhENjQ0NjFfU1RCQ1IpOwogCXYgfD0gSEQ2NDQ2MV9TVEJDUl9TVVJUU1QgfCBIRDY0NDYxX1NUQkNSX1NJUlNUIHwKQEAgLTMwLDEyICszMSwyNSBAQAogCSAgICBIRDY0NDYxX1NUQkNSX1NBRkVTVCB8IEhENjQ0NjFfU1RCQ1JfU1BDMFNUIHwKIAkgICAgSEQ2NDQ2MV9TVEJDUl9TTUlBU1QgfCBIRDY0NDYxX1NUQkNSX1NBRkVDS0VfT1NUIHwKIAkgICAgSEQ2NDQ2MV9TVEJDUl9TQUZFQ0tFX0lTVDsKKyNpZm5kZWYgQ09ORklHX0hENjQ0NjFfRU5BQkxFUgorCXYgfD0gSEQ2NDQ2MV9TVEJDUl9TUEMxU1Q7CisjZW5kaWYKIAlvdXR3KHYsIEhENjQ0NjFfU1RCQ1IpOwogCXYgPSBpbncoSEQ2NDQ2MV9HUEFEUik7CiAJdiB8PSBIRDY0NDYxX0dQQURSX1NQRUFLRVIgfCBIRDY0NDYxX0dQQURSX1BDTUNJQTA7CiAJb3V0dyh2LCBIRDY0NDYxX0dQQURSKTsKIAorCW91dHcoSEQ2NDQ2MV9QQ0NHQ1JfVkNDMCB8IEhENjQ0NjFfUENDU0NSX1ZDQzEsIEhENjQ0NjFfUENDMEdDUik7CisKKyNpZm5kZWYgQ09ORklHX0hENjQ0NjFfRU5BQkxFUgorCW91dHcoSEQ2NDQ2MV9QQ0NHQ1JfVkNDMCB8IEhENjQ0NjFfUENDU0NSX1ZDQzEsIEhENjQ0NjFfUENDMUdDUik7CisjZW5kaWYKKworCXNoX2RhY19vdXRwdXQoMCwgREFDX1NQRUFLRVJfVk9MVU1FKTsKIAlzaF9kYWNfZGlzYWJsZShEQUNfU1BFQUtFUl9WT0xVTUUpOworCXY4ID0gY3RybF9pbmIoREFDUik7CisJdjggJj0gfkRBQ1JfREFFOworCWN0cmxfb3V0Yih2OCxEQUNSKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL01ha2VmaWxlCmluZGV4IDE3NjJiNTkuLjI0NWYwM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE92ZXJkcml2ZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCiAjCiAKLW9iai15CSA6PSBtYWNoLm8gc2V0dXAubyBpby5vIGlycS5vIGxlZC5vIHRpbWUubworb2JqLXkJIDo9IG1hY2gubyBzZXR1cC5vIGlvLm8gaXJxLm8gbGVkLm8KIAogb2JqLSQoQ09ORklHX1BDSSkgKz0gZnBnYS5vIGdhbGlsZW8ubyBwY2lkbWEubwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9zZXR1cC5jCmluZGV4IGEzNmNlMDIuLjk0ZjYxNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9zZXR1cC5jCkBAIC0xNyw4ICsxNyw2IEBACiAjaW5jbHVkZSA8YXNtL292ZXJkcml2ZS9vdmVyZHJpdmUuaD4KICNpbmNsdWRlIDxhc20vb3ZlcmRyaXZlL2ZwZ2EuaD4KIAotZXh0ZXJuIHZvaWQgb2RfdGltZV9pbml0KHZvaWQpOwotCiBjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKIHsKIAlyZXR1cm4gIlNINzc1MCBPdmVyZHJpdmUiOwpAQCAtMzEsMTEgKzI5LDkgQEAKIHsKICNpZmRlZiBDT05GSUdfUENJCiAJaW5pdF9vdmVyZHJpdmVfZnBnYSgpOwotCWdhbGlsZW9faW5pdCgpOyAKKwlnYWxpbGVvX2luaXQoKTsKICNlbmRpZgogCi0JYm9hcmRfdGltZV9pbml0ID0gb2RfdGltZV9pbml0OwotCiAgICAgICAgIC8qIEVuYWJsZSBSUzIzMiByZWNlaXZlIGJ1ZmZlcnMgKi8KIAl3cml0ZWwoMHgxZSwgT1ZFUkRSSVZFX0NUUkwpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL3RpbWUuYyBiL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS90aW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NTMzNjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL3RpbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL3RpbWUuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMiBQYXVsIE11bmR0IChsZXRoYWxAY2hhb3RpY2RyZWFtcy5vcmcpCi0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIFNUTWljcm9lbGVjdHJvbmljcyBPdmVyZHJpdmUgU3VwcG9ydC4KLSAqLwotCi12b2lkIG9kX3RpbWVfaW5pdCh2b2lkKQotewotCXN0cnVjdCBmcnFjcl9kYXRhIHsKLQkJdW5zaWduZWQgc2hvcnQgZnJxY3I7Ci0JCXN0cnVjdCB7Ci0JCQl1bnNpZ25lZCBjaGFyIG11bHRpcGxpZXI7Ci0JCQl1bnNpZ25lZCBjaGFyIGRpdmlzb3I7Ci0JCX0gZmFjdG9yWzNdOwotCX07Ci0KLQlzdGF0aWMgc3RydWN0IGZycWNyX2RhdGEgc3Q0MF9mcnFjcl90YWJsZVtdID0gewkJCi0JCXsgMHgwMDAsIHt7MSwxfSwgezEsMX0sIHsxLDJ9fX0sCi0JCXsgMHgwMDIsIHt7MSwxfSwgezEsMX0sIHsxLDR9fX0sCi0JCXsgMHgwMDQsIHt7MSwxfSwgezEsMX0sIHsxLDh9fX0sCi0JCXsgMHgwMDgsIHt7MSwxfSwgezEsMn0sIHsxLDJ9fX0sCi0JCXsgMHgwMEEsIHt7MSwxfSwgezEsMn0sIHsxLDR9fX0sCi0JCXsgMHgwMEMsIHt7MSwxfSwgezEsMn0sIHsxLDh9fX0sCi0JCXsgMHgwMTEsIHt7MSwxfSwgezIsM30sIHsxLDZ9fX0sCi0JCXsgMHgwMTMsIHt7MSwxfSwgezIsM30sIHsxLDN9fX0sCi0JCXsgMHgwMUEsIHt7MSwxfSwgezEsMn0sIHsxLDR9fX0sCi0JCXsgMHgwMUMsIHt7MSwxfSwgezEsMn0sIHsxLDh9fX0sCi0JCXsgMHgwMjMsIHt7MSwxfSwgezIsM30sIHsxLDN9fX0sCi0JCXsgMHgwMkMsIHt7MSwxfSwgezEsMn0sIHsxLDh9fX0sCi0JCXsgMHgwNDgsIHt7MSwyfSwgezEsMn0sIHsxLDR9fX0sCi0JCXsgMHgwNEEsIHt7MSwyfSwgezEsMn0sIHsxLDZ9fX0sCi0JCXsgMHgwNEMsIHt7MSwyfSwgezEsMn0sIHsxLDh9fX0sCi0JCXsgMHgwNUEsIHt7MSwyfSwgezEsM30sIHsxLDZ9fX0sCi0JCXsgMHgwNUMsIHt7MSwyfSwgezEsM30sIHsxLDZ9fX0sCi0JCXsgMHgwNjMsIHt7MSwyfSwgezEsNH0sIHsxLDR9fX0sCi0JCXsgMHgwNkMsIHt7MSwyfSwgezEsNH0sIHsxLDh9fX0sCi0JCXsgMHgwOTEsIHt7MSwzfSwgezEsM30sIHsxLDZ9fX0sCi0JCXsgMHgwOTMsIHt7MSwzfSwgezEsM30sIHsxLDZ9fX0sCi0JCXsgMHgwQTMsIHt7MSwzfSwgezEsNn0sIHsxLDZ9fX0sCi0JCXsgMHgwREEsIHt7MSw0fSwgezEsNH0sIHsxLDh9fX0sCi0JCXsgMHgwREMsIHt7MSw0fSwgezEsNH0sIHsxLDh9fX0sCi0JCXsgMHgwRUMsIHt7MSw0fSwgezEsOH0sIHsxLDh9fX0sCi0JCXsgMHgxMjMsIHt7MSw0fSwgezEsNH0sIHsxLDh9fX0sCi0JCXsgMHgxNkMsIHt7MSw0fSwgezEsOH0sIHsxLDh9fX0sCi0JfTsKLQotCXN0cnVjdCBtZW1jbGtfZGF0YSB7Ci0JCXVuc2lnbmVkIGNoYXIgbXVsdGlwbGllcjsKLQkJdW5zaWduZWQgY2hhciBkaXZpc29yOwotCX07Ci0Jc3RhdGljIHN0cnVjdCBtZW1jbGtfZGF0YSBzdDQwX21lbWNsa190YWJsZVs4XSA9IHsKLQkJezEsMX0sCS8vIDAwMAotCQl7MSwyfSwJLy8gMDAxCi0JCXsxLDN9LAkvLyAwMTAKLQkJezIsM30sCS8vIDAxMQotCQl7MSw0fSwJLy8gMTAwCi0JCXsxLDZ9LAkvLyAxMDEKLQkJezEsOH0sCS8vIDExMAotCQl7MSw4fQkvLyAxMTEKLQl9OwotCi0JdW5zaWduZWQgbG9uZyBwdnI7Ci0KLQkvKiAKLQkgKiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZCBpbnRvIHRoZSBTSDMgcHJvYmluZyBjb2RlLCBhbmQgdGhlbgotCSAqIHVzZSB0aGUgcHJvY2Vzc29yIHN0cnVjdHVyZSB0byBkZXRlcm1pbmUgd2hpY2ggQ1BVIHdlIGFyZSBydW5uaW5nCi0JICogb24uCi0JICovCi0JcHZyID0gY3RybF9pbmwoQ0NOX1BWUik7Ci0JcHJpbnRrKCJQVlIgJTA4eFxuIiwgcHZyKTsKLQotCWlmICgoKHB2ciA+PiBDQ05fUFZSX0NISVBfU0hJRlQpICYgQ0NOX1BWUl9DSElQX01BU0spID09IENDTl9QVlJfQ0hJUF9TVDQwU1RCMSkgewotCQkvKiAKLQkJICogVW5mb3J0dW5hdGx5IHRoZSBTVEIxIEZSUUNSIHZhbHVlcyBhcmUgZGlmZmVyZW50IGZyb20gdGhlCi0JCSAqIDc3NTAgb25lcy4KLQkJICovCi0JCXN0cnVjdCBmcnFjcl9kYXRhICpkOwotCQlpbnQgYTsKLQkJdW5zaWduZWQgbG9uZyBtZW1jbGtjcjsKLQkJc3RydWN0IG1lbWNsa19kYXRhICplOwotCi0JCWZvciAoYT0wOyBhPEFSUkFZX1NJWkUoc3Q0MF9mcnFjcl90YWJsZSk7IGErKykgewotCQkJZCA9ICZzdDQwX2ZycWNyX3RhYmxlW2FdOwotCQkJaWYgKGQtPmZycWNyID09IChmcnFjciAmIDB4MWZmKSkKLQkJCQlicmVhazsKLQkJfQotCQlpZiAoYSA9PSBBUlJBWV9TSVpFKHN0NDBfZnJxY3JfdGFibGUpKSB7Ci0JCQlkID0gc3Q0MF9mcnFjcl90YWJsZTsKLQkJCXByaW50aygiRVJST1I6IFVucmVjb2duaXNlZCBGUlFDUiB2YWx1ZSwgdXNpbmcgZGVmYXVsdCBtdWx0aXBsaWVyc1xuIik7Ci0JCX0KLQotCQltZW1jbGtjciA9IGN0cmxfaW5sKENMT0NLR0VOX01FTUNMS0NSKTsKLQkJZSA9ICZzdDQwX21lbWNsa190YWJsZVttZW1jbGtjciAmIE1FTUNMS0NSX1JBVElPX01BU0tdOwotCi0JCXByaW50aygiQ2xvY2sgbXVsdGlwbGllcnM6IENQVTogJWQvJWQgQnVzOiAlZC8lZCBNZW06ICVkLyVkIFBlcmlwaDogJWQvJWRcbiIsCi0JCSAgICAgICBkLT5mYWN0b3JbMF0ubXVsdGlwbGllciwgZC0+ZmFjdG9yWzBdLmRpdmlzb3IsCi0JCSAgICAgICBkLT5mYWN0b3JbMV0ubXVsdGlwbGllciwgZC0+ZmFjdG9yWzFdLmRpdmlzb3IsCi0JCSAgICAgICBlLT5tdWx0aXBsaWVyLCAgICAgICAgICAgZS0+ZGl2aXNvciwKLQkJICAgICAgIGQtPmZhY3RvclsyXS5tdWx0aXBsaWVyLCBkLT5mYWN0b3JbMl0uZGl2aXNvcik7Ci0JCQotCQljdXJyZW50X2NwdV9kYXRhLm1hc3Rlcl9jbG9jayA9IGN1cnJlbnRfY3B1X2RhdGEubW9kdWxlX2Nsb2NrICoKLQkJCQkJCWQtPmZhY3RvclsyXS5kaXZpc29yIC8KLQkJCQkJCWQtPmZhY3RvclsyXS5tdWx0aXBsaWVyOwotCQljdXJyZW50X2NwdV9kYXRhLmJ1c19jbG9jayAgICA9IGN1cnJlbnRfY3B1X2RhdGEubWFzdGVyX2Nsb2NrICoKLQkJCQkJCWQtPmZhY3RvclsxXS5tdWx0aXBsaWVyIC8KLQkJCQkJCWQtPmZhY3RvclsxXS5kaXZpc29yOwotCQljdXJyZW50X2NwdV9kYXRhLm1lbW9yeV9jbG9jayA9IGN1cnJlbnRfY3B1X2RhdGEubWFzdGVyX2Nsb2NrICoKLQkJCQkJCWUtPm11bHRpcGxpZXIgLyBlLT5kaXZpc29yOwotCQljdXJyZW50X2NwdV9kYXRhLmNwdV9jbG9jayAgICA9IGN1cnJlbnRfY3B1X2RhdGEubWFzdGVyX2Nsb2NrICoKLQkJCQkJCWQtPmZhY3RvclswXS5tdWx0aXBsaWVyIC8KLQkJCQkJCWQtPmZhY3RvclswXS5kaXZpc29yOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvaHA2ODBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDY0JQpyZW5hbWUgZnJvbSBhcmNoL3NoL2NvbmZpZ3MvaHA2ODBfZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnCmluZGV4IGM4NWQzNjUuLmIzNmYxMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9ocDY4MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMS1zaAotIyBXZWQgTWFyICAyIDE1OjA5OjQxIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1zaAorIyBXZWQgSmFuICA0IDE1OjMyOjU2IDIwMDYKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1VJRDE2PXkKQEAgLTE3LDMxICsxNywzNiBAQAogIyBDT05GSUdfQ0xFQU5fQ09NUElMRSBpcyBub3Qgc2V0CiBDT05GSUdfQlJPS0VOPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC00OSw2ICs1NCwyNCBAQAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiAKICMKKyMgQmxvY2sgbGF5ZXIKKyMKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorCisjCiAjIFN5c3RlbSB0eXBlCiAjCiAjIENPTkZJR19TSF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldApAQCAtNTgsOSArODEsNyBAQAogIyBDT05GSUdfU0hfNzc1MV9TWVNURU1IIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQjFfSEFSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEIxX09WRVJEUklWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9IUDYyMCBpcyBub3Qgc2V0Ci1DT05GSUdfU0hfSFA2ODA9eQotIyBDT05GSUdfU0hfSFA2OTAgaXMgbm90IHNldAorQ09ORklHX1NIX0hQNlhYPXkKICMgQ09ORklHX1NIX0NRUkVFSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9ETUlEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9FQzMxMDQgaXMgbm90IHNldApAQCAtNzcsNDMgKzk4LDkwIEBACiAjIENPTkZJR19TSF9SVFM3NzUxUjJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX0VET1NLNzcwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TSDQyMDJfTUlDUk9ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU0hfTEFORElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9USVRBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9VTktOT1dOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9TSDIgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzZWxlY3Rpb24KKyMKIENPTkZJR19DUFVfU0gzPXkKLSMgQ09ORklHX0NQVV9TSDQgaXMgbm90IHNldAorCisjCisjIFNILTIgUHJvY2Vzc29yIFN1cHBvcnQKKyMKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYwNCBpcyBub3Qgc2V0CisKKyMKKyMgU0gtMyBQcm9jZXNzb3IgU3VwcG9ydAorIwogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDk9eQorCisjCisjIFNILTQgUHJvY2Vzc29yIFN1cHBvcnQKKyMKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorCisjCisjIFNUNDAgUHJvY2Vzc29yIFN1cHBvcnQKKyMKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBHWDEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisKKyMKKyMgU0gtNEEgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIwogQ09ORklHX01NVT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX09DUkFNIGlzIG5vdCBzZXQKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwYzAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDA0MDAwMDAKLUNPTkZJR19NRU1PUllfU0VUPXkKLSMgQ09ORklHX01FTU9SWV9PVkVSUklERSBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NIX1JUQz15CiAjIENPTkZJR19TSF9EU1AgaXMgbm90IHNldAogQ09ORklHX1NIX0FEQz15Ci1DT05GSUdfU0hfSFA2MDA9eQotQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAotQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfU0hfT0NSQU0gaXMgbm90IHNldAotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19TSF9QQ0xLX0NBTEM9eQotQ09ORklHX1NIX1BDTEtfRlJFUT0xMTkzMTgyCisKKyMKKyMgVGltZXIgc3VwcG9ydAorIworQ09ORklHX1NIX1RNVT15CitDT05GSUdfU0hfUENMS19GUkVRX0JPT0w9eQorQ09ORklHX1NIX1BDTEtfRlJFUT0yMjExMDAwMAogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtMTIzLDcgKzE5MSwxMCBAQAogIwogIyBETUEgc3VwcG9ydAogIwotIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9ETUE9eQorQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NAorIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX1BBR0VfT1BTIGlzIG5vdCBzZXQKIAogIwogIyBDb21wYW5pb24gQ2hpcHMKQEAgLTEzMiwyMSArMjAzLDQ3IEBACiBDT05GSUdfSEQ2NDQ2MT15CiAjIENPTkZJR19IRDY0NDY1IGlzIG5vdCBzZXQKIENPTkZJR19IRDY0NDYxX0lSUT0zNgotIyBDT05GSUdfSEQ2NDQ2MV9FTkFCTEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IRDY0NDYxX0lPQkFTRT0weGIwMDAwMDAwCitDT05GSUdfSEQ2NDQ2MV9FTkFCTEVSPXkKIAogIwotIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIE1DQSwgSVNBKQorIyBLZXJuZWwgZmVhdHVyZXMKICMKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKKyMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX0lTQT15CiAjIENPTkZJR19QQ0kgaXMgbm90IHNldAogCiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKICMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CitDT05GSUdfUENDQVJEPXkKKyMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBPXkKK0NPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQorQ09ORklHX1BDTUNJQV9JT0NUTD15CiAKICMKICMgUEMtY2FyZCBicmlkZ2VzCiAjCisjIENPTkZJR19JODIzNjUgaXMgbm90IHNldAorIyBDT05GSUdfVENJQyBpcyBub3Qgc2V0CitDT05GSUdfSEQ2NDQ2MV9QQ01DSUE9eQorQ09ORklHX0hENjQ0NjFfUENNQ0lBX1NPQ0tFVFM9MQorQ09ORklHX1BDTUNJQV9QUk9CRT15CiAKICMKICMgUENJIEhvdHBsdWcgU3VwcG9ydApAQCAtMTYwLDkgKzI1Nyw5IEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKLSMgU0ggaW5pdHJkIG9wdGlvbnMKKyMgTmV0d29ya2luZwogIwotIyBDT05GSUdfRU1CRURERURfUkFNRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVQgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0xNzMsNyArMjcwLDExIEBACiAjCiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCiAKICMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQpAQCAtMTg4LDMwICsyODksMjAgQEAKICMKICMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CiAjCisjIENPTkZJR19QTlAgaXMgbm90IHNldAogCiAjCiAjIEJsb2NrIGRldmljZXMKICMKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKIAogIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0KLSMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogQ09ORklHX0lERT15CkBAIC0yMjQsNiArMzE1LDcgQEAKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRElTSz15CiAjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CkBAIC0yMzUsNiArMzI3LDcgQEAKIENPTkZJR19JREVfR0VORVJJQz15CiBDT05GSUdfSURFX1NIPXkKICMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtMjQyLDkgKzMzNSwxNSBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAogCiAjCisjIE9sZCBDRC1ST00gZHJpdmVycyAobm90IFNDU0ksIG5vdCBJREUpCisjCisjIENPTkZJR19DRF9OT19JREVTQ1NJIGlzIG5vdCBzZXQKKworIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQogIwogIyBDT05GSUdfTUQgaXMgbm90IHNldApAQCAtMjUyLDYgKzM1MSw3IEBACiAjCiAjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydApAQCAtMjYzLDkgKzM2Myw4IEBACiAjCiAKICMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKICMKLSMgQ09ORklHX05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogCkBAIC0yOTYsMTcgKzM5NSw2IEBACiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKLSMgSW5wdXQgSS9PIGRyaXZlcnMKLSMKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotCi0jCiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CkBAIC0zMTYsNiArNDA0LDE1IEBACiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CisjIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CkBAIC0zNTMsMTAgKzQ1MCwyMiBAQAogIwogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKKworIwogIyBJMkMgc3VwcG9ydAogIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKQEAgLTM2NywxMCArNDc2LDIxIEBACiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCiAjIE1pc2MgZGV2aWNlcwogIwogCiAjCisjIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIworCisjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTM4MywyNyArNTAzLDM1IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKIENPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9FUFNPTjEzNTUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX0hJVD15CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX0ZPTlRTPXkKICMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKIENPTkZJR19GT05UX1BFQVJMXzh4OD15CiAjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAogCiAjCiAjIExvZ28gY29uZmlndXJhdGlvbgpAQCAtNDE0LDcgKzU0MiwyMiBAQAogIwogIyBTb3VuZAogIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKKyMgQ09ORklHX1NORCBpcyBub3Qgc2V0CisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKK0NPTkZJR19TT1VORF9QUklNRT15CisjIENPTkZJR19PQlNPTEVURV9PU1NfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAorQ09ORklHX1NPVU5EX1NIX0RBQ19BVURJTz15CitDT05GSUdfU09VTkRfU0hfREFDX0FVRElPX0NIQU5ORUw9MQogCiAjCiAjIFVTQiBzdXBwb3J0CkBAIC00MjMsNyArNTY2LDcgQEAKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwogIwogCiAjCkBAIC00NDIsMjUgKzU4NSwyOSBAQAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKKyMgU04gRGV2aWNlcworIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTQ3MSw4ICs2MTgsMTEgQEAKICMKICMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwogIworQ09ORklHX0ZBVF9GUz15CiAjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKICMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC00ODEsMTQgKzYzMSwxMSBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19ERVZGU19GUz15Ci1DT05GSUdfREVWRlNfTU9VTlQ9eQotIyBDT05GSUdfREVWRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTUxNiw3ICs2NjMsNDYgQEAKICMKICMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKICMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogCiAjCiAjIFByb2ZpbGluZyBzdXBwb3J0CkBAIC01MjYsNyArNzEyLDkgQEAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0tHREIgaXMgbm90IHNldApAQCAtNTUwLDUgKzczOCw2IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWFwaS5jIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtYXBpLmMKaW5kZXggOTZlMzAzNi4uNDdjM2U4MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtYXBpLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtYXBpLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogU3VwZXJILXNwZWNpZmljIERNQSBtYW5hZ2VtZW50IEFQSQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogCiBERUZJTkVfU1BJTkxPQ0soZG1hX3NwaW5fbG9jayk7CkBAIC01NSwxNiArNTYsMTQgQEAKIAogc3RydWN0IGRtYV9pbmZvICpnZXRfZG1hX2luZm8odW5zaWduZWQgaW50IGNoYW4pCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wOworCXN0cnVjdCBkbWFfaW5mbyAqaW5mbzsKIAl1bnNpZ25lZCBpbnQgdG90YWwgPSAwOwogCiAJLyoKIAkgKiBMb29rIGZvciBlYWNoIERNQUMncyByYW5nZSB0byBkZXRlcm1pbmUgd2hvIHRoZSBvd25lciBvZgogCSAqIHRoZSBjaGFubmVsIGlzLgogCSAqLwotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJnJlZ2lzdGVyZWRfZG1hY19saXN0KSB7Ci0JCXN0cnVjdCBkbWFfaW5mbyAqaW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZG1hX2luZm8sIGxpc3QpOwotCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbmZvLCAmcmVnaXN0ZXJlZF9kbWFjX2xpc3QsIGxpc3QpIHsKIAkJdG90YWwgKz0gaW5mby0+bnJfY2hhbm5lbHM7CiAJCWlmIChjaGFuID4gdG90YWwpCiAJCQljb250aW51ZTsKQEAgLTc1LDYgKzc0LDIwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X25yX2NoYW5uZWxzKHZvaWQpCit7CisJc3RydWN0IGRtYV9pbmZvICppbmZvOworCXVuc2lnbmVkIGludCBuciA9IDA7CisKKwlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmcmVnaXN0ZXJlZF9kbWFjX2xpc3QpKSkKKwkJcmV0dXJuIG5yOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbmZvLCAmcmVnaXN0ZXJlZF9kbWFjX2xpc3QsIGxpc3QpCisJCW5yICs9IGluZm8tPm5yX2NoYW5uZWxzOworCisJcmV0dXJuIG5yOworfQorCiBzdHJ1Y3QgZG1hX2NoYW5uZWwgKmdldF9kbWFfY2hhbm5lbCh1bnNpZ25lZCBpbnQgY2hhbikKIHsKIAlzdHJ1Y3QgZG1hX2luZm8gKmluZm8gPSBnZXRfZG1hX2luZm8oY2hhbik7CkBAIC0xNzMsNyArMTg2LDcgQEAKIHN0YXRpYyBpbnQgZG1hX3JlYWRfcHJvYyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAogCQkJIGludCBsZW4sIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcDsKKwlzdHJ1Y3QgZG1hX2luZm8gKmluZm87CiAJY2hhciAqcCA9IGJ1ZjsKIAogCWlmIChsaXN0X2VtcHR5KCZyZWdpc3RlcmVkX2RtYWNfbGlzdCkpCkBAIC0xODIsOCArMTk1LDcgQEAKIAkvKgogCSAqIEl0ZXJhdGUgb3ZlciBlYWNoIHJlZ2lzdGVyZWQgRE1BQwogCSAqLwotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJnJlZ2lzdGVyZWRfZG1hY19saXN0KSB7Ci0JCXN0cnVjdCBkbWFfaW5mbyAqaW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZG1hX2luZm8sIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5mbywgJnJlZ2lzdGVyZWRfZG1hY19saXN0LCBsaXN0KSB7CiAJCWludCBpOwogCiAJCS8qCkBAIC0yMDUsOSArMjE3LDkgQEAKICNlbmRpZgogCiAKLWludCBfX2luaXQgcmVnaXN0ZXJfZG1hYyhzdHJ1Y3QgZG1hX2luZm8gKmluZm8pCitpbnQgcmVnaXN0ZXJfZG1hYyhzdHJ1Y3QgZG1hX2luZm8gKmluZm8pCiB7Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IHRvdGFsX2NoYW5uZWxzLCBpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmluZm8tPmxpc3QpOwogCkBAIC0yMTcsNiArMjI5LDExIEBACiAKIAlCVUdfT04oKGluZm8tPmZsYWdzICYgRE1BQ19DSEFOTkVMU19DT05GSUdVUkVEKSAmJiAhaW5mby0+Y2hhbm5lbHMpOwogCisJaW5mby0+cGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoKGNoYXIgKilpbmZvLT5uYW1lLCAtMSwKKwkJCQkJCSAgICAgTlVMTCwgMCk7CisJaWYgKElTX0VSUihpbmZvLT5wZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5mby0+cGRldik7CisKIAkvKgogCSAqIERvbid0IHRvdWNoIHByZS1jb25maWd1cmVkIGNoYW5uZWxzCiAJICovCkBAIC0yMzIsMTAgKzI0OSwxMiBAQAogCQltZW1zZXQoaW5mby0+Y2hhbm5lbHMsIDAsIHNpemUpOwogCX0KIAorCXRvdGFsX2NoYW5uZWxzID0gZ2V0X25yX2NoYW5uZWxzKCk7CiAJZm9yIChpID0gMDsgaSA8IGluZm8tPm5yX2NoYW5uZWxzOyBpKyspIHsKIAkJc3RydWN0IGRtYV9jaGFubmVsICpjaGFuID0gaW5mby0+Y2hhbm5lbHMgKyBpOwogCiAJCWNoYW4tPmNoYW4gPSBpOworCQljaGFuLT52Y2hhbiA9IGkgKyB0b3RhbF9jaGFubmVsczsKIAogCQltZW1jcHkoY2hhbi0+ZGV2X2lkLCAiVW51c2VkIiwgNyk7CiAKQEAgLTI0NSw5ICsyNjQsNyBAQAogCQlpbml0X01VVEVYKCZjaGFuLT5zZW0pOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaGFuLT53YWl0X3F1ZXVlKTsKIAotI2lmZGVmIENPTkZJR19TWVNGUwotCQlkbWFfY3JlYXRlX3N5c2ZzX2ZpbGVzKGNoYW4pOwotI2VuZGlmCisJCWRtYV9jcmVhdGVfc3lzZnNfZmlsZXMoY2hhbiwgaW5mbyk7CiAJfQogCiAJbGlzdF9hZGQoJmluZm8tPmxpc3QsICZyZWdpc3RlcmVkX2RtYWNfbGlzdCk7CkBAIC0yNTUsMTIgKzI3MiwxOCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fZXhpdCB1bnJlZ2lzdGVyX2RtYWMoc3RydWN0IGRtYV9pbmZvICppbmZvKQordm9pZCB1bnJlZ2lzdGVyX2RtYWMoc3RydWN0IGRtYV9pbmZvICppbmZvKQogeworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IGluZm8tPm5yX2NoYW5uZWxzOyBpKyspCisJCWRtYV9yZW1vdmVfc3lzZnNfZmlsZXMoaW5mby0+Y2hhbm5lbHMgKyBpLCBpbmZvKTsKKwogCWlmICghKGluZm8tPmZsYWdzICYgRE1BQ19DSEFOTkVMU19DT05GSUdVUkVEKSkKIAkJa2ZyZWUoaW5mby0+Y2hhbm5lbHMpOwogCiAJbGlzdF9kZWwoJmluZm8tPmxpc3QpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGluZm8tPnBkZXYpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBkbWFfYXBpX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWcyLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1nMi5jCmluZGV4IDIzMWUzZjYuLjVhZmFiNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWcyLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtZzIuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGRtYV9pbmZvIGcyX2RtYV9pbmZvID0gewotCS5uYW1lCQk9ICJHMiBETUEiLAorCS5uYW1lCQk9ICJnMl9kbWFjIiwKIAkubnJfY2hhbm5lbHMJPSA0LAogCS5vcHMJCT0gJmcyX2RtYV9vcHMsCiAJLmZsYWdzCQk9IERNQUNfQ0hBTk5FTFNfVEVJX0NBUEFCTEUsCkBAIC0xNjAsNiArMTYwLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBnMl9kbWFfZXhpdCh2b2lkKQogewogCWZyZWVfaXJxKEhXX0VWRU5UX0cyX0RNQSwgMCk7CisJdW5yZWdpc3Rlcl9kbWFjKCZnMl9kbWFfaW5mbyk7CiB9CiAKIHN1YnN5c19pbml0Y2FsbChnMl9kbWFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1pc2EuYyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWlzYS5jCmluZGV4IDFjOWJjNDUuLjA1YTc0ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWlzYS5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWlzYS5jCkBAIC0yNSwxNCArMjUsMTQgQEAKICAqIHN1Y2gsIHRoaXMgY29kZSBpcyBtZWFudCBmb3Igb25seSB0aGUgc2ltcGxlc3Qgb2YgdGFza3MgKGFuZCBzaG91bGRuJ3QgYmUKICAqIHVzZWQgaW4gYW55IG5ldyBkcml2ZXJzIGF0IGFsbCkuCiAgKgotICogSXQgc2hvdWxkIGFsc28gYmUgbm90ZWQgdGhhdCB2YXJpb3VzIGZ1bmN0aW9ucyBoZXJlIGFyZSBsYWJlbGxlZCBhcwotICogYmVpbmcgZGVwcmVjYXRlZC4gVGhpcyBpcyBkdWUgdG8gdGhlIGZhY3QgdGhhdCB0aGUgb3BzLT54ZmVyKCkgbWV0aG9kIGlzCi0gKiB0aGUgcHJlZmVycmVkIHdheSBvZiBkb2luZyB0aGluZ3MgKGFzIHdlbGwgYXMganVzdCBncmFiYmluZyB0aGUgc3BpbmxvY2sKLSAqIGRpcmVjdGx5KS4gQXMgc3VjaCwgYW55IHVzZXJzIG9mIHRoaXMgaW50ZXJmYWNlIHdpbGwgYmUgd2FybmVkIHJhdGhlcgotICogbG91ZGx5LgorICogTk9URTogb3BzLT54ZmVyKCkgaXMgdGhlIHByZWZlcnJlZCB3YXkgb2YgZG9pbmcgdGhpbmdzLiBIb3dldmVyLCB0aGVyZQorICogYXJlIHNvbWUgdXNlcnMgb2YgdGhlIElTQSBETUEgQVBJIHRoYXQgZXhpc3QgaW4gY29tbW9uIGNvZGUgdGhhdCB3ZQorICogZG9uJ3QgbmVjZXNzYXJpbHkgd2FudCB0byBnbyBvdXQgb2Ygb3VyIHdheSB0byBicmVhaywgc28gd2Ugc3RpbGwKKyAqIGFsbG93IGZvciBzb21lIGNvbXBhdGFiaWxpdHkgYXQgdGhhdCBsZXZlbC4gQW55IG5ldyBjb2RlIGlzIHN0cm9uZ2x5CisgKiBhZHZpc2VkIHRvIHJ1biBmYXIgYXdheSBmcm9tIHRoZSBJU0EgRE1BIEFQSSBhbmQgdXNlIHRoZSBTSCBETUEgQVBJCisgKiBkaXJlY3RseS4KICAqLwotCi11bnNpZ25lZCBsb25nIF9fZGVwcmVjYXRlZCBjbGFpbV9kbWFfbG9jayh2b2lkKQordW5zaWduZWQgbG9uZyBjbGFpbV9kbWFfbG9jayh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQyLDE5ICs0MiwxOSBAQAogfQogRVhQT1JUX1NZTUJPTChjbGFpbV9kbWFfbG9jayk7CiAKLXZvaWQgX19kZXByZWNhdGVkIHJlbGVhc2VfZG1hX2xvY2sodW5zaWduZWQgbG9uZyBmbGFncykKK3ZvaWQgcmVsZWFzZV9kbWFfbG9jayh1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0wocmVsZWFzZV9kbWFfbG9jayk7CiAKLXZvaWQgX19kZXByZWNhdGVkIGRpc2FibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuKQordm9pZCBkaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgY2hhbikKIHsKIAkvKiBOb3RoaW5nICovCiB9CiBFWFBPUlRfU1lNQk9MKGRpc2FibGVfZG1hKTsKIAotdm9pZCBfX2RlcHJlY2F0ZWQgZW5hYmxlX2RtYSh1bnNpZ25lZCBpbnQgY2hhbikKK3ZvaWQgZW5hYmxlX2RtYSh1bnNpZ25lZCBpbnQgY2hhbikKIHsKIAlzdHJ1Y3QgZG1hX2luZm8gKmluZm8gPSBnZXRfZG1hX2luZm8oY2hhbik7CiAJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gJmluZm8tPmNoYW5uZWxzW2NoYW5dOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtcHZyMi5jIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtcHZyMi5jCmluZGV4IDJlMWQ1OGYuLmRmNjA0OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXB2cjIuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1wdnIyLmMKQEAgLTgwLDcgKzgwLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2luZm8gcHZyMl9kbWFfaW5mbyA9IHsKLQkubmFtZQkJPSAiUG93ZXJWUiAyIERNQSIsCisJLm5hbWUJCT0gInB2cjJfZG1hYyIsCiAJLm5yX2NoYW5uZWxzCT0gMSwKIAkub3BzCQk9ICZwdnIyX2RtYV9vcHMsCiAJLmZsYWdzCQk9IERNQUNfQ0hBTk5FTFNfVEVJX0NBUEFCTEUsCkBAIC05OCw2ICs5OCw3IEBACiB7CiAJZnJlZV9kbWEoUFZSMl9DQVNDQURFX0NIQU4pOwogCWZyZWVfaXJxKEhXX0VWRU5UX1BWUjJfRE1BLCAwKTsKKwl1bnJlZ2lzdGVyX2RtYWMoJnB2cjJfZG1hX2luZm8pOwogfQogCiBzdWJzeXNfaW5pdGNhbGwocHZyMl9kbWFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYwppbmRleCAzMWRhY2Q0Li5jY2EyNmM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKQEAgLTUsNiArNSw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAwIFRha2FzaGkgWU9TSElJCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHJpeSBTa3VseXNoCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE2LDUxICsxNywyOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9kcmVhbWNhc3QvZG1hLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAiZG1hLXNoLmgiCiAKLS8qCi0gKiBUaGUgU3VwZXJIIERNQUMgc3VwcG9ydHMgYSBudW1iZXIgb2YgdHJhbnNtaXQgc2l6ZXMsIHdlIGxpc3QgdGhlbSBoZXJlLAotICogd2l0aCB0aGVpciByZXNwZWN0aXZlIHZhbHVlcyBhcyB0aGV5IGFwcGVhciBpbiB0aGUgQ0hDUiByZWdpc3RlcnMuCi0gKgotICogRGVmYXVsdHMgdG8gYSA2NC1iaXQgdHJhbnNmZXIgc2l6ZS4KLSAqLwotZW51bSB7Ci0JWE1JVF9TWl82NEJJVCwKLQlYTUlUX1NaXzhCSVQsCi0JWE1JVF9TWl8xNkJJVCwKLQlYTUlUX1NaXzMyQklULAotCVhNSVRfU1pfMjU2QklULAotfTsKLQotLyoKLSAqIFRoZSBETUEgY291bnQgaXMgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gPSB7Ci0JW1hNSVRfU1pfNjRCSVRdCQk9IDMsCi0JW1hNSVRfU1pfOEJJVF0JCT0gMCwKLQlbWE1JVF9TWl8xNkJJVF0JCT0gMSwKLQlbWE1JVF9TWl8zMkJJVF0JCT0gMiwKLQlbWE1JVF9TWl8yNTZCSVRdCT0gNSwKLX07Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9kbXRlX2lycSh1bnNpZ25lZCBpbnQgY2hhbikKIHsKLQl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGludCBpcnEgPSAwOwogCiAJLyoKIAkgKiBOb3JtYWxseSB3ZSBjb3VsZCBqdXN0IGRvIERNVEUwX0lSUSArIGNoYW4gb3V0cmlnaHQsIHRob3VnaCBpbiB0aGUKIAkgKiBjYXNlIG9mIHRoZSA3NzUxUiwgdGhlIERNVEUgSVJRcyBmb3IgY2hhbm5lbHMgPiA0IHN0YXJ0IHJpZ2h0IGFib3ZlCiAJICogdGhlIFNDSUYKIAkgKi8KLQogCWlmIChjaGFuIDwgNCkgewogCQlpcnEgPSBETVRFMF9JUlEgKyBjaGFuOwogCX0gZWxzZSB7CisjaWZkZWYgRE1URTRfSVJRCiAJCWlycSA9IERNVEU0X0lSUSArIGNoYW4gLSA0OworI2VuZGlmCiAJfQogCiAJcmV0dXJuIGlycTsKQEAgLTc4LDkgKzU2LDcgQEAKIHsKIAl1MzIgY2hjciA9IGN0cmxfaW5sKENIQ1JbY2hhbi0+Y2hhbl0pOwogCi0JY2hjciA+Pj0gNDsKLQotCXJldHVybiB0c19zaGlmdFtjaGNyICYgMHgwMDA3XTsKKwlyZXR1cm4gdHNfc2hpZnRbKGNoY3IgJiBDSENSX1RTX01BU0spPj5DSENSX1RTX1NISUZUXTsKIH0KIAogLyoKQEAgLTEwOSw4ICs4NSwxMyBAQAogCiBzdGF0aWMgaW50IHNoX2RtYWNfcmVxdWVzdF9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogeworCWNoYXIgbmFtZVszMl07CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJETUFDIFRyYW5zZmVyIEVuZCAoQ2hhbm5lbCAlZCkiLAorCQkgY2hhbi0+Y2hhbik7CisKIAlyZXR1cm4gcmVxdWVzdF9pcnEoZ2V0X2RtdGVfaXJxKGNoYW4tPmNoYW4pLCBkbWFfdGVpLAotCQkJICAgU0FfSU5URVJSVVBULCAiRE1BQyBUcmFuc2ZlciBFbmQiLCBjaGFuKTsKKwkJCSAgIFNBX0lOVEVSUlVQVCwgbmFtZSwgY2hhbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNoX2RtYWNfZnJlZV9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQpAQCAtMTE4LDEwICs5OSwxOCBAQAogCWZyZWVfaXJxKGdldF9kbXRlX2lycShjaGFuLT5jaGFuKSwgY2hhbik7CiB9CiAKLXN0YXRpYyB2b2lkIHNoX2RtYWNfY29uZmlndXJlX2NoYW5uZWwoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBsb25nIGNoY3IpCitzdGF0aWMgdm9pZAorc2hfZG1hY19jb25maWd1cmVfY2hhbm5lbChzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGxvbmcgY2hjcikKIHsKIAlpZiAoIWNoY3IpCi0JCWNoY3IgPSBSU19EVUFMOworCQljaGNyID0gUlNfRFVBTCB8IENIQ1JfSUU7CisKKwlpZiAoY2hjciAmIENIQ1JfSUUpIHsKKwkJY2hjciAmPSB+Q0hDUl9JRTsKKwkJY2hhbi0+ZmxhZ3MgfD0gRE1BX1RFSV9DQVBBQkxFOworCX0gZWxzZSB7CisJCWNoYW4tPmZsYWdzICY9IH5ETUFfVEVJX0NBUEFCTEU7CisJfQogCiAJY3RybF9vdXRsKGNoY3IsIENIQ1JbY2hhbi0+Y2hhbl0pOwogCkBAIC0xMzAsMjIgKzExOSwzMiBAQAogCiBzdGF0aWMgdm9pZCBzaF9kbWFjX2VuYWJsZV9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogewotCWludCBpcnEgPSBnZXRfZG10ZV9pcnEoY2hhbi0+Y2hhbik7CisJaW50IGlycTsKIAl1MzIgY2hjcjsKIAogCWNoY3IgPSBjdHJsX2lubChDSENSW2NoYW4tPmNoYW5dKTsKLQljaGNyIHw9IENIQ1JfREUgfCBDSENSX0lFOworCWNoY3IgfD0gQ0hDUl9ERTsKKworCWlmIChjaGFuLT5mbGFncyAmIERNQV9URUlfQ0FQQUJMRSkKKwkJY2hjciB8PSBDSENSX0lFOworCiAJY3RybF9vdXRsKGNoY3IsIENIQ1JbY2hhbi0+Y2hhbl0pOwogCi0JZW5hYmxlX2lycShpcnEpOworCWlmIChjaGFuLT5mbGFncyAmIERNQV9URUlfQ0FQQUJMRSkgeworCQlpcnEgPSBnZXRfZG10ZV9pcnEoY2hhbi0+Y2hhbik7CisJCWVuYWJsZV9pcnEoaXJxKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHNoX2RtYWNfZGlzYWJsZV9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogewotCWludCBpcnEgPSBnZXRfZG10ZV9pcnEoY2hhbi0+Y2hhbik7CisJaW50IGlycTsKIAl1MzIgY2hjcjsKIAotCWRpc2FibGVfaXJxKGlycSk7CisJaWYgKGNoYW4tPmZsYWdzICYgRE1BX1RFSV9DQVBBQkxFKSB7CisJCWlycSA9IGdldF9kbXRlX2lycShjaGFuLT5jaGFuKTsKKwkJZGlzYWJsZV9pcnEoaXJxKTsKKwl9CiAKIAljaGNyID0gY3RybF9pbmwoQ0hDUltjaGFuLT5jaGFuXSk7CiAJY2hjciAmPSB+KENIQ1JfREUgfCBDSENSX1RFIHwgQ0hDUl9JRSk7CkBAIC0xNTgsNyArMTU3LDcgQEAKIAkgKiBJZiB3ZSBoYXZlbid0IHByZS1jb25maWd1cmVkIHRoZSBjaGFubmVsIHdpdGggc3BlY2lhbCBmbGFncywgdXNlCiAJICogdGhlIGRlZmF1bHRzLgogCSAqLwotCWlmICghKGNoYW4tPmZsYWdzICYgRE1BX0NPTkZJR1VSRUQpKQorCWlmICh1bmxpa2VseSghKGNoYW4tPmZsYWdzICYgRE1BX0NPTkZJR1VSRUQpKSkKIAkJc2hfZG1hY19jb25maWd1cmVfY2hhbm5lbChjaGFuLCAwKTsKIAogCXNoX2RtYWNfZGlzYWJsZV9kbWEoY2hhbik7CkBAIC0xNzgsOSArMTc3LDExIEBACiAJICogY2FzY2FkaW5nIHRvIHRoZSBQVlIyIERNQUMuIEluIHRoaXMgY2FzZSwgd2Ugc3RpbGwgbmVlZCB0byB3cml0ZQogCSAqIFNBUiBhbmQgREFSLCByZWdhcmRsZXNzIG9mIHZhbHVlLCBpbiBvcmRlciBmb3IgY2FzY2FkaW5nIHRvIHdvcmsuCiAJICovCi0JaWYgKGNoYW4tPnNhciB8fCAobWFjaF9pc19kcmVhbWNhc3QoKSAmJiBjaGFuLT5jaGFuID09IDIpKQorCWlmIChjaGFuLT5zYXIgfHwgKG1hY2hfaXNfZHJlYW1jYXN0KCkgJiYKKwkJCSAgY2hhbi0+Y2hhbiA9PSBQVlIyX0NBU0NBREVfQ0hBTikpCiAJCWN0cmxfb3V0bChjaGFuLT5zYXIsIFNBUltjaGFuLT5jaGFuXSk7Ci0JaWYgKGNoYW4tPmRhciB8fCAobWFjaF9pc19kcmVhbWNhc3QoKSAmJiBjaGFuLT5jaGFuID09IDIpKQorCWlmIChjaGFuLT5kYXIgfHwgKG1hY2hfaXNfZHJlYW1jYXN0KCkgJiYKKwkJCSAgY2hhbi0+Y2hhbiA9PSBQVlIyX0NBU0NBREVfQ0hBTikpCiAJCWN0cmxfb3V0bChjaGFuLT5kYXIsIERBUltjaGFuLT5jaGFuXSk7CiAKIAljdHJsX291dGwoY2hhbi0+Y291bnQgPj4gY2FsY194bWl0X3NoaWZ0KGNoYW4pLCBETUFUQ1JbY2hhbi0+Y2hhbl0pOwpAQCAtMTk4LDE3ICsxOTksMzggQEAKIAlyZXR1cm4gY3RybF9pbmwoRE1BVENSW2NoYW4tPmNoYW5dKSA8PCBjYWxjX3htaXRfc2hpZnQoY2hhbik7CiB9CiAKKyNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwCisjZGVmaW5lIGRtYW9yX3JlYWRfcmVnKCkJY3RybF9pbncoRE1BT1IpCisjZGVmaW5lIGRtYW9yX3dyaXRlX3JlZyhkYXRhKQljdHJsX291dHcoZGF0YSwgRE1BT1IpCisjZWxzZQorI2RlZmluZSBkbWFvcl9yZWFkX3JlZygpCWN0cmxfaW5sKERNQU9SKQorI2RlZmluZSBkbWFvcl93cml0ZV9yZWcoZGF0YSkJY3RybF9vdXRsKGRhdGEsIERNQU9SKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYW9yX3Jlc2V0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBkbWFvciA9IGRtYW9yX3JlYWRfcmVnKCk7CisKKwkvKiBUcnkgdG8gY2xlYXIgdGhlIGVycm9yIGZsYWdzIGZpcnN0LCBpbmNhc2UgdGhleSBhcmUgc2V0ICovCisJZG1hb3IgJj0gfihETUFPUl9OTUlGIHwgRE1BT1JfQUUpOworCWRtYW9yX3dyaXRlX3JlZyhkbWFvcik7CisKKwlkbWFvciB8PSBETUFPUl9JTklUOworCWRtYW9yX3dyaXRlX3JlZyhkbWFvcik7CisKKwkvKiBTZWUgaWYgd2UgZ290IGFuIGVycm9yIGFnYWluICovCisJaWYgKChkbWFvcl9yZWFkX3JlZygpICYgKERNQU9SX0FFIHwgRE1BT1JfTk1JRikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZG1hLXNoOiBDYW4ndCBpbml0aWFsaXplIERNQU9SLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKIHN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfZXJyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBkbWFvciA9IGN0cmxfaW5sKERNQU9SKTsKLQotCXByaW50aygiRE1BRTogRE1BT1I9JWx4XG4iLCBkbWFvcik7Ci0KLQljdHJsX291dGwoY3RybF9pbmwoRE1BT1IpJn5ETUFPUl9OTUlGLCBETUFPUik7Ci0JY3RybF9vdXRsKGN0cmxfaW5sKERNQU9SKSZ+RE1BT1JfQUUsIERNQU9SKTsKLQljdHJsX291dGwoY3RybF9pbmwoRE1BT1IpfERNQU9SX0RNRSwgRE1BT1IpOwotCisJZG1hb3JfcmVzZXQoKTsKIAlkaXNhYmxlX2lycShpcnEpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMjI0LDggKzI0Niw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGRtYV9pbmZvIHNoX2RtYWNfaW5mbyA9IHsKLQkubmFtZQkJPSAiU3VwZXJIIERNQUMiLAotCS5ucl9jaGFubmVscwk9IDQsCisJLm5hbWUJCT0gInNoX2RtYWMiLAorCS5ucl9jaGFubmVscwk9IENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTLAogCS5vcHMJCT0gJnNoX2RtYWNfb3BzLAogCS5mbGFncwkJPSBETUFDX0NIQU5ORUxTX1RFSV9DQVBBQkxFLAogfTsKQEAgLTI0OCw3ICsyNzAsMTMgQEAKIAkJbWFrZV9pcHJfaXJxKGlycSwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZKTsKIAl9CiAKLQljdHJsX291dGwoMHg4MDAwIHwgRE1BT1JfRE1FLCBETUFPUik7CisJLyoKKwkgKiBJbml0aWFsaXplIERNQU9SLCBhbmQgY2xlYW4gdXAgYW55IGVycm9yIGZsYWdzIHRoYXQgbWF5IGhhdmUKKwkgKiBiZWVuIHNldC4KKwkgKi8KKwlpID0gZG1hb3JfcmVzZXQoKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiBpOwogCiAJcmV0dXJuIHJlZ2lzdGVyX2RtYWMoaW5mbyk7CiB9CkBAIC0yNTgsMTAgKzI4NiwxMiBAQAogI2lmZGVmIENPTkZJR19DUFVfU0g0CiAJZnJlZV9pcnEoRE1BRV9JUlEsIDApOwogI2VuZGlmCisJdW5yZWdpc3Rlcl9kbWFjKCZzaF9kbWFjX2luZm8pOwogfQogCiBzdWJzeXNfaW5pdGNhbGwoc2hfZG1hY19pbml0KTsKIG1vZHVsZV9leGl0KHNoX2RtYWNfZXhpdCk7CiAKK01PRFVMRV9BVVRIT1IoIlRha2FzaGkgWU9TSElJLCBQYXVsIE11bmR0LCBBbmRyaXkgU2t1bHlzaCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBlckggT24tQ2hpcCBETUFDIFN1cHBvcnQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guaCBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmgKaW5kZXggZGQ5ZDU0Ny4uMGY1OTFmYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guaAorKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5oCkBAIC0xMSw2ICsxMSw4IEBACiAjaWZuZGVmIF9fRE1BX1NIX0gKICNkZWZpbmUgX19ETUFfU0hfSAogCisjaW5jbHVkZSA8YXNtL2NwdS9kbWEuaD4KKwogLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLwogI2RlZmluZSBSRVFfTAkweDAwMDAwMDAwCiAjZGVmaW5lIFJFUV9FCTB4MDAwODAwMDAKQEAgLTI2LDI3ICsyOCw0NyBAQAogI2RlZmluZSBTTV9ERUMJMHgwMDAwMjAwMAogI2RlZmluZSBSU19JTgkweDAwMDAwMjAwCiAjZGVmaW5lIFJTX09VVAkweDAwMDAwMzAwCi0jZGVmaW5lIFRNX0JVUlNUIDB4MDAwMDA4MAotI2RlZmluZSBUU184CTB4MDAwMDAwMTAKLSNkZWZpbmUgVFNfMTYJMHgwMDAwMDAyMAotI2RlZmluZSBUU18zMgkweDAwMDAwMDMwCi0jZGVmaW5lIFRTXzY0CTB4MDAwMDAwMDAKICNkZWZpbmUgVFNfQkxLCTB4MDAwMDAwNDAKICNkZWZpbmUgQ0hDUl9ERSAweDAwMDAwMDAxCiAjZGVmaW5lIENIQ1JfVEUgMHgwMDAwMDAwMgogI2RlZmluZSBDSENSX0lFIDB4MDAwMDAwMDQKIAotLyogRGVmaW5lIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGR1YWwgYWRkcmVzcyBtZW1vcnktbWVtb3J5IHRyYW5zZmVyLgotICogVGhlIDB4NDAwIHZhbHVlIHJlcHJlc2VudHMgYXV0by1yZXF1ZXN0LCBleHRlcm5hbC0+ZXh0ZXJuYWwuCi0gKi8KLSNkZWZpbmUgUlNfRFVBTAkoRE1fSU5DIHwgU01fSU5DIHwgMHg0MDAgfCBUU18zMikKLQotI2RlZmluZSBETUFPUl9DT0QJMHgwMDAwMDAwOAorLyogRE1BT1IgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgRE1BT1JfQUUJMHgwMDAwMDAwNAogI2RlZmluZSBETUFPUl9OTUlGCTB4MDAwMDAwMDIKICNkZWZpbmUgRE1BT1JfRE1FCTB4MDAwMDAwMDEKIAorLyoKKyAqIERlZmluZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBkdWFsIGFkZHJlc3MgbWVtb3J5LW1lbW9yeSB0cmFuc2Zlci4KKyAqIFRoZSAweDQwMCB2YWx1ZSByZXByZXNlbnRzIGF1dG8tcmVxdWVzdCwgZXh0ZXJuYWwtPmV4dGVybmFsLgorICovCisjZGVmaW5lIFJTX0RVQUwJKERNX0lOQyB8IFNNX0lOQyB8IDB4NDAwIHwgVFNfMzIpCisKICNkZWZpbmUgTUFYX0RNQUNfQ0hBTk5FTFMJKENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTKQogCisvKgorICogU3VidHlwZXMgdGhhdCBoYXZlIGZld2VyIGNoYW5uZWxzIHRoYW4gdGhpcyBzaW1wbHkgbmVlZCB0byBjaGFuZ2UKKyAqIENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTLiBMaWtld2lzZSwgc3VidHlwZXMgd2l0aCBhIGxhcmdlciBudW1iZXIKKyAqIG9mIGNoYW5uZWxzIHNob3VsZCBleHBhbmQgb24gdGhpcy4KKyAqCisgKiBGb3IgbW9zdCBzdWJ0eXBlcyB3ZSBjYW4gZWFzaWx5IGZpZ3VyZSB0aGVzZSB2YWx1ZXMgb3V0IHdpdGggc29tZQorICogYmFzaWMgY2FsY3VsYXRpb24sIHVuZm9ydHVuYXRlbHkgb24gb3RoZXIgc3VidHlwZXMgdGhlc2UgYXJlIG1vcmUKKyAqIHNjYXR0ZXJlZCwgc28gd2UganVzdCBsZWF2ZSBpdCB1bnJvbGxlZCBmb3Igc2ltcGxpY2l0eS4KKyAqLworI2RlZmluZSBTQVIJKCh1bnNpZ25lZCBsb25nW10pe1NIX0RNQUNfQkFTRSArIDB4MDAsIFNIX0RNQUNfQkFTRSArIDB4MTAsIFwKKwkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDIwLCBTSF9ETUFDX0JBU0UgKyAweDMwLCBcCisJCQkJICAgU0hfRE1BQ19CQVNFICsgMHg1MCwgU0hfRE1BQ19CQVNFICsgMHg2MH0pCisjZGVmaW5lIERBUgkoKHVuc2lnbmVkIGxvbmdbXSl7U0hfRE1BQ19CQVNFICsgMHgwNCwgU0hfRE1BQ19CQVNFICsgMHgxNCwgXAorCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4MjQsIFNIX0RNQUNfQkFTRSArIDB4MzQsIFwKKwkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDU0LCBTSF9ETUFDX0JBU0UgKyAweDY0fSkKKyNkZWZpbmUgRE1BVENSCSgodW5zaWduZWQgbG9uZ1tdKXtTSF9ETUFDX0JBU0UgKyAweDA4LCBTSF9ETUFDX0JBU0UgKyAweDE4LCBcCisJCQkJICAgU0hfRE1BQ19CQVNFICsgMHgyOCwgU0hfRE1BQ19CQVNFICsgMHgzOCwgXAorCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4NTgsIFNIX0RNQUNfQkFTRSArIDB4Njh9KQorI2RlZmluZSBDSENSCSgodW5zaWduZWQgbG9uZ1tdKXtTSF9ETUFDX0JBU0UgKyAweDBjLCBTSF9ETUFDX0JBU0UgKyAweDFjLCBcCisJCQkJICAgU0hfRE1BQ19CQVNFICsgMHgyYywgU0hfRE1BQ19CQVNFICsgMHgzYywgXAorCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4NWMsIFNIX0RNQUNfQkFTRSArIDB4NmN9KQorCisjZGVmaW5lIERNQU9SCShTSF9ETUFDX0JBU0UgKyAweDQwKQorCiAjZW5kaWYgLyogX19ETUFfU0hfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zeXNmcy5jIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc3lzZnMuYwppbmRleCA2ZTNiNThiLi43MGE1ZDgyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zeXNmcy5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXN5c2ZzLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogc3lzZnMgaW50ZXJmYWNlIGZvciBTSCBETUEgQVBJCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0ICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTIsNyArMTIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAKQEAgLTc3LDcgKzc5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGNvbmZpZzsKIAogCWNvbmZpZyA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7Ci0JZG1hX2NvbmZpZ3VyZV9jaGFubmVsKGNoYW5uZWwtPmNoYW4sIGNvbmZpZyk7CisJZG1hX2NvbmZpZ3VyZV9jaGFubmVsKGNoYW5uZWwtPnZjaGFuLCBjb25maWcpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTExLDEyICsxMTMsMTMgQEAKIGRtYV9yb19hdHRyKGNvdW50LCAiMHglMDh4XG4iKTsKIGRtYV9yb19hdHRyKGZsYWdzLCAiMHglMDhseFxuIik7CiAKLWludCBfX2luaXQgZG1hX2NyZWF0ZV9zeXNmc19maWxlcyhzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCitpbnQgZG1hX2NyZWF0ZV9zeXNmc19maWxlcyhzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBkbWFfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2ID0gJmNoYW4tPmRldjsKKwljaGFyIG5hbWVbMTZdOwogCWludCByZXQ7CiAKLQlkZXYtPmlkICA9IGNoYW4tPmNoYW47CisJZGV2LT5pZCAgPSBjaGFuLT52Y2hhbjsKIAlkZXYtPmNscyA9ICZkbWFfc3lzY2xhc3M7CiAKIAlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoZGV2KTsKQEAgLTEyOSw2ICsxMzIsMjQgQEAKIAlzeXNkZXZfY3JlYXRlX2ZpbGUoZGV2LCAmYXR0cl9mbGFncyk7CiAJc3lzZGV2X2NyZWF0ZV9maWxlKGRldiwgJmF0dHJfY29uZmlnKTsKIAotCXJldHVybiAwOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImRtYSVkIiwgY2hhbi0+Y2hhbik7CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9saW5rKCZpbmZvLT5wZGV2LT5kZXYua29iaiwgJmRldi0+a29iaiwgbmFtZSk7Cit9CisKK3ZvaWQgZG1hX3JlbW92ZV9zeXNmc19maWxlcyhzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBkbWFfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2ID0gJmNoYW4tPmRldjsKKwljaGFyIG5hbWVbMTZdOworCisJc3lzZGV2X3JlbW92ZV9maWxlKGRldiwgJmF0dHJfZGV2X2lkKTsKKwlzeXNkZXZfcmVtb3ZlX2ZpbGUoZGV2LCAmYXR0cl9jb3VudCk7CisJc3lzZGV2X3JlbW92ZV9maWxlKGRldiwgJmF0dHJfbW9kZSk7CisJc3lzZGV2X3JlbW92ZV9maWxlKGRldiwgJmF0dHJfZmxhZ3MpOworCXN5c2Rldl9yZW1vdmVfZmlsZShkZXYsICZhdHRyX2NvbmZpZyk7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJkbWElZCIsIGNoYW4tPmNoYW4pOworCXN5c2ZzX3JlbW92ZV9saW5rKCZpbmZvLT5wZGV2LT5kZXYua29iaiwgbmFtZSk7CisKKwlzeXNkZXZfdW5yZWdpc3RlcihkZXYpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlCmluZGV4IDhiODE5NjkuLjdhODZlZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw0IEBACiBvYmotJChDT05GSUdfU0hfQ1BVX0ZSRVEpCSs9IGNwdWZyZXEubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBtb2R1bGUubwogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0gZWFybHlfcHJpbnRrLm8KLQotVVNFX1NUQU5EQVJEX0FTX1JVTEUgOj0gdHJ1ZQotCitvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjLm8gcmVsb2NhdGVfa2VybmVsLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQppbmRleCBjZDQzNzE0Li41YmZjMzNiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCkBAIC0yLDE1ICsyLDEyIEBACiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXgvU3VwZXJIIENQVS1zcGVjaWZjIGJhY2tlbmRzLgogIwogCi1vYmoteQk6PSBpcnFfaXByLm8gaXJxX2ltYXNrLm8gaW5pdC5vIGJ1cy5vCitvYmoteQkrPSBpcnEvIGluaXQubyBidXMubyBjbG9jay5vCiAKIG9iai0kKENPTkZJR19DUFVfU0gyKQkJKz0gc2gyLwogb2JqLSQoQ09ORklHX0NQVV9TSDMpCQkrPSBzaDMvCiBvYmotJChDT05GSUdfQ1BVX1NINCkJCSs9IHNoNC8KIAotb2JqLSQoQ09ORklHX1NIX1JUQykgICAgICAgICAgICArPSBydGMubworb2JqLSQoQ09ORklHX1NIX1JUQykJCSs9IHJ0Yy5vCiBvYmotJChDT05GSUdfVUJDX1dBS0VVUCkJKz0gdWJjLm8KLW9iai0kKENPTkZJR19TSF9BREMpICAgICAgICAgICAgKz0gYWRjLm8KLQotVVNFX1NUQU5EQVJEX0FTX1JVTEUgOj0gdHJ1ZQotCitvYmotJChDT05GSUdfU0hfQURDKQkJKz0gYWRjLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9idXMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9idXMuYwppbmRleCAzMjc4ZDIzLi5mYzZjNGJkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvYnVzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2J1cy5jCkBAIC0xMDksNiArMTA5LDggQEAKIAkvKiBUaGlzIGlzIG5lZWRlZCBmb3IgVVNCIE9IQ0kgdG8gd29yayAqLwogCWlmIChkZXYtPmRtYV9tYXNrKQogCQlkZXYtPmRldi5kbWFfbWFzayA9IGRldi0+ZG1hX21hc2s7CisJaWYgKGRldi0+Y29oZXJlbnRfZG1hX21hc2spCisJCWRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gZGV2LT5jb2hlcmVudF9kbWFfbWFzazsKIAogCXNucHJpbnRmKGRldi0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICIlcyV1IiwKIAkJIGRldi0+bmFtZSwgZGV2LT5kZXZfaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODllN2ZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYyAtIFN1cGVySCBjbG9jayBmcmFtZXdvcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBjbG9jayBmcmFtZXdvcmsgaXMgZGVyaXZlZCBmcm9tIHRoZSBPTUFQIHZlcnNpb24gYnk6CisgKgorICoJQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIENvcnBvcmF0aW9uCisgKglXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KKworc3RhdGljIExJU1RfSEVBRChjbG9ja19saXN0KTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xvY2tfbG9jayk7CitzdGF0aWMgREVDTEFSRV9NVVRFWChjbG9ja19saXN0X3NlbSk7CisKKy8qCisgKiBFYWNoIHN1YnR5cGUgaXMgZXhwZWN0ZWQgdG8gZGVmaW5lIHRoZSBpbml0IHJvdXRpbmVzIGZvciB0aGVzZSBjbG9ja3MsCisgKiBhcyBlYWNoIHN1YnR5cGUgKG9yIHByb2Nlc3NvciBmYW1pbHkpIHdpbGwgaGF2ZSB0aGVzZSBjbG9ja3MgYXQgdGhlCisgKiB2ZXJ5IGxlYXN0LiBUaGVzZSBhcmUgYWxsIHByb3ZpZGVkIHRocm91Z2ggdGhlIENQRywgd2hpY2ggZXZlbiBzb21lIG9mCisgKiB0aGUgbW9yZSBxdWlya3kgcGFydHMgKHN1Y2ggYXMgU1Q0MCwgU0g0LTIwMiwgZXRjLikgc3RpbGwgaGF2ZS4KKyAqCisgKiBUaGUgcHJvY2Vzc29yLXNwZWNpZmljIGNvZGUgaXMgZXhwZWN0ZWQgdG8gcmVnaXN0ZXIgYW55IGFkZGl0aW9uYWwKKyAqIGNsb2NrIHNvdXJjZXMgdGhhdCBhcmUgb2YgaW50ZXJlc3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1hc3Rlcl9jbGsgPSB7CisJLm5hbWUJCT0gIm1hc3Rlcl9jbGsiLAorCS5mbGFncwkJPSBDTEtfQUxXQVlTX0VOQUJMRUQgfCBDTEtfUkFURV9QUk9QQUdBVEVTLAorI2lmZGVmIENPTkZJR19TSF9QQ0xLX0ZSRVFfQk9PTAorCS5yYXRlCQk9IENPTkZJR19TSF9QQ0xLX0ZSRVEsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1vZHVsZV9jbGsgPSB7CisJLm5hbWUJCT0gIm1vZHVsZV9jbGsiLAorCS5wYXJlbnQJCT0gJm1hc3Rlcl9jbGssCisJLmZsYWdzCQk9IENMS19BTFdBWVNfRU5BQkxFRCB8IENMS19SQVRFX1BST1BBR0FURVMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBidXNfY2xrID0geworCS5uYW1lCQk9ICJidXNfY2xrIiwKKwkucGFyZW50CQk9ICZtYXN0ZXJfY2xrLAorCS5mbGFncwkJPSBDTEtfQUxXQVlTX0VOQUJMRUQgfCBDTEtfUkFURV9QUk9QQUdBVEVTLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3B1X2NsayA9IHsKKwkubmFtZQkJPSAiY3B1X2NsayIsCisJLnBhcmVudAkJPSAmbWFzdGVyX2NsaywKKwkuZmxhZ3MJCT0gQ0xLX0FMV0FZU19FTkFCTEVELAorfTsKKworLyoKKyAqIFRoZSBvcmRlcmluZyBvZiB0aGVzZSBjbG9ja3MgbWF0dGVycywgZG8gbm90IGNoYW5nZSBpdC4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgKm9uY2hpcF9jbG9ja3NbXSA9IHsKKwkmbWFzdGVyX2NsaywKKwkmbW9kdWxlX2NsaywKKwkmYnVzX2NsaywKKwkmY3B1X2NsaywKK307CisKK3N0YXRpYyB2b2lkIHByb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlzdHJ1Y3QgY2xrICpjbGtwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtwLCAmY2xvY2tfbGlzdCwgbm9kZSkgeworCQlpZiAobGlrZWx5KGNsa3AtPnBhcmVudCAhPSBjbGspKQorCQkJY29udGludWU7CisJCWlmIChsaWtlbHkoY2xrcC0+b3BzICYmIGNsa3AtPm9wcy0+cmVjYWxjKSkKKwkJCWNsa3AtPm9wcy0+cmVjYWxjKGNsa3ApOworCX0KK30KKworaW50IF9fY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJLyoKKwkgKiBTZWUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSdyZSBlbmFibGluZyB0aGUgY2xvY2ssIHNvbWUKKwkgKiBjbG9ja3MgdGhhdCBhcmUgYWx3YXlzIGVuYWJsZWQgc3RpbGwgcmVxdWlyZSAic3BlY2lhbCIKKwkgKiBpbml0aWFsaXphdGlvbi4gVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgaWYgdGhlIGNsb2NrIG1vZGUKKwkgKiBjaGFuZ2VzIGFuZCB0aGUgY2xvY2sgbmVlZHMgdG8gaHVudCBmb3IgdGhlIHByb3BlciBzZXQgb2YKKwkgKiBkaXZpc29ycyB0byB1c2UgYmVmb3JlIGl0IGNhbiBlZmZlY3RpdmVseSByZWNhbGMuCisJICovCisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZjbGstPmtyZWYucmVmY291bnQpID09IDEpKQorCQlpZiAoY2xrLT5vcHMgJiYgY2xrLT5vcHMtPmluaXQpCisJCQljbGstPm9wcy0+aW5pdChjbGspOworCisJaWYgKGNsay0+ZmxhZ3MgJiBDTEtfQUxXQVlTX0VOQUJMRUQpCisJCXJldHVybiAwOworCisJaWYgKGxpa2VseShjbGstPm9wcyAmJiBjbGstPm9wcy0+ZW5hYmxlKSkKKwkJY2xrLT5vcHMtPmVuYWJsZShjbGspOworCisJa3JlZl9nZXQoJmNsay0+a3JlZik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCXJldCA9IF9fY2xrX2VuYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNsa19rcmVmX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJLyogTm90aGluZyB0byBkbyAqLworfQorCit2b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGstPmZsYWdzICYgQ0xLX0FMV0FZU19FTkFCTEVEKQorCQlyZXR1cm47CisKKwlrcmVmX3B1dCgmY2xrLT5rcmVmLCBjbGtfa3JlZl9yZWxlYXNlKTsKK30KKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja19sb2NrLCBmbGFncyk7CisJX19jbGtfZGlzYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKK30KKworaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCit7CisJZG93bigmY2xvY2tfbGlzdF9zZW0pOworCisJbGlzdF9hZGQoJmNsay0+bm9kZSwgJmNsb2NrX2xpc3QpOworCWtyZWZfaW5pdCgmY2xrLT5rcmVmKTsKKworCXVwKCZjbG9ja19saXN0X3NlbSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCit7CisJZG93bigmY2xvY2tfbGlzdF9zZW0pOworCWxpc3RfZGVsKCZjbGstPm5vZGUpOworCXVwKCZjbG9ja19saXN0X3NlbSk7Cit9CisKK2lubGluZSB1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cmF0ZTsKK30KKworaW50IGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwlpZiAobGlrZWx5KGNsay0+b3BzICYmIGNsay0+b3BzLT5zZXRfcmF0ZSkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCQlyZXQgPSBjbGstPm9wcy0+c2V0X3JhdGUoY2xrLCByYXRlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCX0KKworCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgQ0xLX1JBVEVfUFJPUEFHQVRFUykpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGNsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGxpa2VseShjbGstPm9wcyAmJiBjbGstPm9wcy0+cmVjYWxjKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja19sb2NrLCBmbGFncyk7CisJCWNsay0+b3BzLT5yZWNhbGMoY2xrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCX0KKworCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgQ0xLX1JBVEVfUFJPUEFHQVRFUykpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7Cit9CisKK3N0cnVjdCBjbGsgKmNsa19nZXQoY29uc3QgY2hhciAqaWQpCit7CisJc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CisKKwlkb3duKCZjbG9ja19saXN0X3NlbSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tfbGlzdCwgbm9kZSkgeworCQlpZiAoc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgeworCQkJY2xrID0gcDsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwKCZjbG9ja19saXN0X3NlbSk7CisKKwlyZXR1cm4gY2xrOworfQorCit2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGsgJiYgIUlTX0VSUihjbGspKQorCQltb2R1bGVfcHV0KGNsay0+b3duZXIpOworfQorCit2b2lkIF9faW5pdCBfX2F0dHJpYnV0ZV9fICgod2VhaykpCithcmNoX2luaXRfY2xrX29wcyhzdHJ1Y3QgY2xrX29wcyAqKm9wcywgaW50IHR5cGUpCit7Cit9CisKK2ludCBfX2luaXQgY2xrX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKworCWlmICh1bmxpa2VseSghbWFzdGVyX2Nsay5yYXRlKSkKKwkJLyoKKwkJICogTk9URTogVGhpcyB3aWxsIGJyZWFrIGlmIHRoZSBkZWZhdWx0IGRpdmlzb3IgaGFzIGJlZW4KKwkJICogY2hhbmdlZC4KKwkJICoKKwkJICogTm8gb25lIHNob3VsZCBiZSBjaGFuZ2luZyB0aGUgZGVmYXVsdCBvbiB1cyBob3dldmVyLAorCQkgKiBleHBlY3QgdGhhdCBhIHNhbmUgdmFsdWUgZm9yIENPTkZJR19TSF9QQ0xLX0ZSRVEgd2lsbAorCQkgKiBiZSBkZWZpbmVkIGluIHRoZSBldmVudCBvZiBhIGRpZmZlcmVudCBkaXZpc29yLgorCQkgKi8KKwkJbWFzdGVyX2Nsay5yYXRlID0gZ2V0X3RpbWVyX2ZyZXF1ZW5jeSgpICogNDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9uY2hpcF9jbG9ja3MpOyBpKyspIHsKKwkJc3RydWN0IGNsayAqY2xrID0gb25jaGlwX2Nsb2Nrc1tpXTsKKworCQlhcmNoX2luaXRfY2xrX29wcygmY2xrLT5vcHMsIGkpOworCQlyZXQgfD0gY2xrX3JlZ2lzdGVyKGNsayk7CisJCWNsa19lbmFibGUoY2xrKTsKKwl9CisKKwkvKiBLaWNrIHRoZSBjaGlsZCBjbG9ja3MuLiAqLworCXByb3BhZ2F0ZV9yYXRlKCZtYXN0ZXJfY2xrKTsKKwlwcm9wYWdhdGVfcmF0ZSgmYnVzX2Nsayk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc2hvd19jbG9ja3Moc3RydWN0IHNlcV9maWxlICptKQoreworCXN0cnVjdCBjbGsgKmNsazsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShjbGssICZjbG9ja19saXN0LCBub2RlKSB7CisJCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOworCisJCS8qCisJCSAqIERvbid0IGJvdGhlciBsaXN0aW5nIGR1bW15IGNsb2NrcyB3aXRoIG5vIGFuY2VzdHJ5CisJCSAqIHRoYXQgb25seSBzdXBwb3J0IGVuYWJsZSBhbmQgZGlzYWJsZSBvcHMuCisJCSAqLworCQlpZiAodW5saWtlbHkoIXJhdGUgJiYgIWNsay0+cGFyZW50KSkKKwkJCWNvbnRpbnVlOworCisJCXNlcV9wcmludGYobSwgIiUtMTJzXHQ6ICVsZC4lMDJsZE1IelxuIiwgY2xrLT5uYW1lLAorCQkJICAgcmF0ZSAvIDEwMDAwMDAsIChyYXRlICUgMTAwMDAwMCkgLyAxMDAwMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGNsa19yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfdW5yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfZ2V0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGNsa19wdXQpOworRVhQT1JUX1NZTUJPTF9HUEwoY2xrX2VuYWJsZSk7CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfZGlzYWJsZSk7CitFWFBPUlRfU1lNQk9MX0dQTChfX2Nsa19lbmFibGUpOworRVhQT1JUX1NZTUJPTF9HUEwoX19jbGtfZGlzYWJsZSk7CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfZ2V0X3JhdGUpOworRVhQT1JUX1NZTUJPTF9HUEwoY2xrX3NldF9yYXRlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGNsa19yZWNhbGNfcmF0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2NjY2VhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eC9TdXBlckggQ1BVLXNwZWNpZmMgSVJRIGhhbmRsZXJzLgorIworb2JqLXkJKz0gaXByLm8gaW1hc2subworCitvYmotJChDT05GSUdfQ1BVX0hBU19QSU5UX0lSUSkJKz0gcGludC5vCitvYmotJChDT05GSUdfQ1BVX0hBU19JTlRDMl9JUlEpCSs9IGludGMyLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnFfaW1hc2suYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW1hc2suYwpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBhcmNoL3NoL2tlcm5lbC9jcHUvaXJxX2ltYXNrLmMKcmVuYW1lIHRvIGFyY2gvc2gva2VybmVsL2NwdS9pcnEvaW1hc2suYwppbmRleCBhOTYzZDAwLi5iYWVkOWE1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxX2ltYXNrLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbWFzay5jCkBAIC0xLDE2ICsxLDEyIEBACi0vKiAkSWQ6IGlycV9pbWFzay5jLHYgMS4xLjIuMSAyMDAyLzExLzE3IDEwOjUzOjQzIG1yYnJvd24gRXhwICQKLSAqCi0gKiBsaW51eC9hcmNoL3NoL2tlcm5lbC9pcnFfaW1hc2suYworLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9pcnEvaW1hc2suYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgTmlpYmUgWXV0YWthCiAgKgogICogU2ltcGxlIGludGVycnVwdCBoYW5kbGluZyB1c2luZyBJTUFTSyBvZiBTUiByZWdpc3Rlci4KICAqCiAgKi8KLQogLyogTk9URTogV2lsbCBub3Qgd29yayBvbiBsZXZlbCAxNSAqLwotCi0KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CkBAIC0xOSwxMyArMTUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CiAKIC8qIEJpdG1hcCBvZiBJUlEgbWFza2VkICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbWFza19tYXNrID0gMHg3ZmZmOwpAQCAtNDAsNyArMzQsNyBAQAogI2RlZmluZSBJTUFTS19QUklPUklUWQkxNQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfaW1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17IAorewogCS8qIE5vdGhpbmcgdG8gZG8gKi8KIAlyZXR1cm4gMDsgLyogbmV2ZXIgYW55dGhpbmcgcGVuZGluZyAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZThhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMyLmMKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBJbnRlcnJ1cHQgaGFuZGxpbmcgZm9yIElOVEMyLWJhc2VkIElSUS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgRGF2aWQgSi4gTWNrYXkgKGRhdmlkLm1ja2F5QHN0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBQYXVsIE11bmR0IChsZXRoYWxAbGludXgtc2gub3JnKQorICoKKyAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGVzZSBhcmUgdGhlICJuZXcgSGl0YWNoaSBzdHlsZSIgaW50ZXJydXB0cywgYXMgcHJlc2VudCBvbiB0aGUKKyAqIEhpdGFjaGkgNzc1MSwgdGhlIFNUTSBTVDQwIFNUQjEsIFNINzc2MCwgYW5kIFNINzc4MC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorCitzdHJ1Y3QgaW50YzJfZGF0YSB7CisJdW5zaWduZWQgY2hhciBtc2tfb2Zmc2V0OworCXVuc2lnbmVkIGNoYXIgbXNrX3NoaWZ0OworCisJaW50ICgqY2xlYXJfaXJxKSAoaW50KTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50YzJfZGF0YSBpbnRjMl9kYXRhW05SX0lOVEMyX0lSUVNdOworCitzdGF0aWMgdm9pZCBlbmFibGVfaW50YzJfaXJxKHVuc2lnbmVkIGludCBpcnEpOworc3RhdGljIHZvaWQgZGlzYWJsZV9pbnRjMl9pcnEodW5zaWduZWQgaW50IGlycSk7CisKKy8qIHNodXRkb3duIGlzIHNhbWUgYXMgImRpc2FibGUiICovCisjZGVmaW5lIHNodXRkb3duX2ludGMyX2lycSBkaXNhYmxlX2ludGMyX2lycQorCitzdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfaW50YzIodW5zaWduZWQgaW50KTsKK3N0YXRpYyB2b2lkIGVuZF9pbnRjMl9pcnEodW5zaWduZWQgaW50IGlycSk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9pbnRjMl9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwllbmFibGVfaW50YzJfaXJxKGlycSk7CisJcmV0dXJuIDA7IC8qIG5ldmVyIGFueXRoaW5nIHBlbmRpbmcgKi8KK30KKworc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBpbnRjMl9pcnFfdHlwZSA9IHsKKwkudHlwZW5hbWUJPSAiSU5UQzItSVJRIiwKKwkuc3RhcnR1cAk9IHN0YXJ0dXBfaW50YzJfaXJxLAorCS5zaHV0ZG93bgk9IHNodXRkb3duX2ludGMyX2lycSwKKwkuZW5hYmxlCQk9IGVuYWJsZV9pbnRjMl9pcnEsCisJLmRpc2FibGUJPSBkaXNhYmxlX2ludGMyX2lycSwKKwkuYWNrCQk9IG1hc2tfYW5kX2Fja19pbnRjMiwKKwkuZW5kCQk9IGVuZF9pbnRjMl9pcnEKK307CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfaW50YzJfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGlycV9vZmZzZXQgPSBpcnEgLSBJTlRDMl9GSVJTVF9JUlE7CisJaW50IG1za19zaGlmdCwgbXNrX29mZnNldDsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmICh1bmxpa2VseShpcnFfb2Zmc2V0IDwgMCB8fCBpcnFfb2Zmc2V0ID49IE5SX0lOVEMyX0lSUVMpKQorCQlyZXR1cm47CisKKwltc2tfc2hpZnQgPSBpbnRjMl9kYXRhW2lycV9vZmZzZXRdLm1za19zaGlmdDsKKwltc2tfb2Zmc2V0ID0gaW50YzJfZGF0YVtpcnFfb2Zmc2V0XS5tc2tfb2Zmc2V0OworCisJY3RybF9vdXRsKDEgPDwgbXNrX3NoaWZ0LAorCQkgIElOVEMyX0JBU0UgKyBJTlRDMl9JTlRNU0tfT0ZGU0VUICsgbXNrX29mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9pbnRjMl9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgaXJxX29mZnNldCA9IGlycSAtIElOVEMyX0ZJUlNUX0lSUTsKKwlpbnQgbXNrX3NoaWZ0LCBtc2tfb2Zmc2V0OworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKHVubGlrZWx5KGlycV9vZmZzZXQgPCAwIHx8IGlycV9vZmZzZXQgPj0gTlJfSU5UQzJfSVJRUykpCisJCXJldHVybjsKKworCW1za19zaGlmdCA9IGludGMyX2RhdGFbaXJxX29mZnNldF0ubXNrX3NoaWZ0OworCW1za19vZmZzZXQgPSBpbnRjMl9kYXRhW2lycV9vZmZzZXRdLm1za19vZmZzZXQ7CisKKwljdHJsX291dGwoMSA8PCBtc2tfc2hpZnQsCisJCSAgSU5UQzJfQkFTRSArIElOVEMyX0lOVE1TS0NMUl9PRkZTRVQgKyBtc2tfb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX2ludGMyKHVuc2lnbmVkIGludCBpcnEpCit7CisJZGlzYWJsZV9pbnRjMl9pcnEoaXJxKTsKK30KKworc3RhdGljIHZvaWQgZW5kX2ludGMyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRHxJUlFfSU5QUk9HUkVTUykpKQorCQllbmFibGVfaW50YzJfaXJxKGlycSk7CisKKwlpZiAodW5saWtlbHkoaW50YzJfZGF0YVtpcnEgLSBJTlRDMl9GSVJTVF9JUlFdLmNsZWFyX2lycSkpCisJCWludGMyX2RhdGFbaXJxIC0gSU5UQzJfRklSU1RfSVJRXS5jbGVhcl9pcnEoaXJxKTsKK30KKworLyoKKyAqIFNldHVwIGFuIElOVEMyIHN0eWxlIGludGVycnVwdC4KKyAqIE5PVEU6IFVubGlrZSBJUFIgaW50ZXJydXB0cywgcGFyYW1ldGVycyBhcmUgbm90IHNoaWZ0ZWQgYnkgdGhpcyBjb2RlLAorICogYWxsb3dpbmcgdGhlIHVzZSBvZiB0aGUgbnVtYmVycyBzdHJhaWdodCBvdXQgb2YgdGhlIGRhdGFzaGVldC4KKyAqIEZvciBleGFtcGxlOgorICogICAgUElPMSB3aGljaCBpcyBJTlRQUkkwMFsxOSwxNl0gYW5kIElOVE1TSzAwWzEzXQorICogd291bGQgYmU6ICAgICAgICAgICAgICAgXiAgICAgXiAgICAgICAgICAgICBeICBeCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgIHwgIHwKKyAqICAgIG1ha2VfaW50YzJfaXJxKDg0LCAgIDAsICAgMTYsICAgICAgICAgICAgMCwgMTMpOworICovCit2b2lkIG1ha2VfaW50YzJfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCSAgICB1bnNpZ25lZCBpbnQgaXByX29mZnNldCwgdW5zaWduZWQgaW50IGlwcl9zaGlmdCwKKwkJICAgIHVuc2lnbmVkIGludCBtc2tfb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbXNrX3NoaWZ0LAorCQkgICAgdW5zaWduZWQgaW50IHByaW9yaXR5KQoreworCWludCBpcnFfb2Zmc2V0ID0gaXJxIC0gSU5UQzJfRklSU1RfSVJROworCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGlwcjsKKworCWlmICh1bmxpa2VseShpcnFfb2Zmc2V0IDwgMCB8fCBpcnFfb2Zmc2V0ID49IE5SX0lOVEMyX0lSUVMpKQorCQlyZXR1cm47CisKKwlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKworCS8qIEZpbGwgdGhlIGRhdGEgd2UgbmVlZCAqLworCWludGMyX2RhdGFbaXJxX29mZnNldF0ubXNrX29mZnNldCA9IG1za19vZmZzZXQ7CisJaW50YzJfZGF0YVtpcnFfb2Zmc2V0XS5tc2tfc2hpZnQgID0gbXNrX3NoaWZ0OworCWludGMyX2RhdGFbaXJxX29mZnNldF0uY2xlYXJfaXJxID0gTlVMTDsKKworCS8qIFNldCB0aGUgcHJpb3JpdHkgbGV2ZWwgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpcHIgPSBjdHJsX2lubChJTlRDMl9CQVNFICsgSU5UQzJfSU5UUFJJX09GRlNFVCArIGlwcl9vZmZzZXQpOworCWlwciAmPSB+KDB4ZiA8PCBpcHJfc2hpZnQpOworCWlwciB8PSBwcmlvcml0eSA8PCBpcHJfc2hpZnQ7CisJY3RybF9vdXRsKGlwciwgSU5UQzJfQkFTRSArIElOVEMyX0lOVFBSSV9PRkZTRVQgKyBpcHJfb2Zmc2V0KTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWlycV9kZXNjW2lycV0uaGFuZGxlciA9ICZpbnRjMl9pcnFfdHlwZTsKKworCWRpc2FibGVfaW50YzJfaXJxKGlycSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW50YzJfaW5pdCB7CisJdW5zaWduZWQgc2hvcnQgaXJxOworCXVuc2lnbmVkIGNoYXIgaXByX29mZnNldCwgaXByX3NoaWZ0OworCXVuc2lnbmVkIGNoYXIgbXNrX29mZnNldCwgbXNrX3NoaWZ0OworCXVuc2lnbmVkIGNoYXIgcHJpb3JpdHk7Cit9IGludGMyX2luaXRfZGF0YVtdICBfX2luaXRkYXRhID0geworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NUNDApCisJezY0LCAgMCwgIDAsIDAsICAwLCAxM30sCS8qIFBDSSBzZXJyICovCisJezY1LCAgMCwgIDQsIDAsICAxLCAxM30sCS8qIFBDSSBlcnIgKi8KKwl7NjYsICAwLCAgNCwgMCwgIDIsIDEzfSwJLyogUENJIGFkICovCisJezY3LCAgMCwgIDQsIDAsICAzLCAxM30sCS8qIFBDSSBwd2QgZG93biAqLworCXs3MiwgIDAsICA4LCAwLCAgNSwgMTN9LAkvKiBETUFDIElOVDAgKi8KKwl7NzMsICAwLCAgOCwgMCwgIDYsIDEzfSwJLyogRE1BQyBJTlQxICovCisJezc0LCAgMCwgIDgsIDAsICA3LCAxM30sCS8qIERNQUMgSU5UMiAqLworCXs3NSwgIDAsICA4LCAwLCAgOCwgMTN9LAkvKiBETUFDIElOVDMgKi8KKwl7NzYsICAwLCAgOCwgMCwgIDksIDEzfSwJLyogRE1BQyBJTlQ0ICovCisJezc4LCAgMCwgIDgsIDAsIDExLCAxM30sCS8qIERNQUMgRVJSICovCisJezgwLCAgMCwgMTIsIDAsIDEyLCAxM30sCS8qIFBJTzAgKi8KKwl7ODQsICAwLCAxNiwgMCwgMTMsIDEzfSwJLyogUElPMSAqLworCXs4OCwgIDAsIDIwLCAwLCAxNCwgMTN9LAkvKiBQSU8yICovCisJezExMiwgNCwgIDAsIDQsICAwLCAxM30sCS8qIE1haWxib3ggKi8KKyAjaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBHWDEKKwl7MTE2LCA0LCAgNCwgNCwgIDQsIDEzfSwJLyogU1NDMCAqLworCXsxMjAsIDQsICA4LCA0LCAgOCwgMTN9LAkvKiBJUiBCbGFzdGVyICovCisJezEyNCwgNCwgMTIsIDQsIDEyLCAxM30sCS8qIFVTQiBob3N0ICovCisJezEyOCwgNCwgMTYsIDQsIDE2LCAxM30sCS8qIFZpZGVvIHByb2Nlc3NvciBCTElUVEVSICovCisJezEzMiwgNCwgMjAsIDQsIDIwLCAxM30sCS8qIFVBUlQwICovCisJezEzNCwgNCwgMjAsIDQsIDIyLCAxM30sCS8qIFVBUlQyICovCisJezEzNiwgNCwgMjQsIDQsIDI0LCAxM30sCS8qIElPX1BJTzAgKi8KKwl7MTQwLCA0LCAyOCwgNCwgMjgsIDEzfSwJLyogRU1QSSAqLworCXsxNDQsIDgsICAwLCA4LCAgMCwgMTN9LAkvKiBNQUZFICovCisJezE0OCwgOCwgIDQsIDgsICA0LCAxM30sCS8qIFBXTSAqLworCXsxNTIsIDgsICA4LCA4LCAgOCwgMTN9LAkvKiBTU0MxICovCisJezE1NiwgOCwgMTIsIDgsIDEyLCAxM30sCS8qIElPX1BJTzEgKi8KKwl7MTYwLCA4LCAxNiwgOCwgMTYsIDEzfSwJLyogVVNCIHRhcmdldCAqLworCXsxNjQsIDgsIDIwLCA4LCAyMCwgMTN9LAkvKiBVQVJUMSAqLworCXsxNjgsIDgsIDI0LCA4LCAyNCwgMTN9LAkvKiBUZWxldGV4dCAqLworCXsxNzIsIDgsIDI4LCA4LCAyOCwgMTN9LAkvKiBWaWRlb1N5bmMgVlRHICovCisJezE3MywgOCwgMjgsIDgsIDI5LCAxM30sCS8qIFZpZGVvU3luYyBEVlAwICovCisJezE3NCwgOCwgMjgsIDgsIDMwLCAxM30sCS8qIFZpZGVvU3luYyBEVlAxICovCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkKKy8qCisgKiBTSDc3NjAgSU5UQzItU3R5bGUgaW50ZXJydXB0cywgdmVjdG9ycyBJUlE0OC0xMTEgSU5URVZUIDB4ODAwLTB4RkUwCisgKi8KKwkvKiBJTlRQUklPMCB8IElOVE1TSzAgKi8KKwl7NDgsICAwLCAyOCwgMCwgMzEsICAzfSwJLyogSVJRIDQgKi8KKwl7NDksICAwLCAyNCwgMCwgMzAsICAzfSwJLyogSVJRIDMgKi8KKwl7NTAsICAwLCAyMCwgMCwgMjksICAzfSwJLyogSVJRIDIgKi8KKwl7NTEsICAwLCAxNiwgMCwgMjgsICAzfSwJLyogSVJRIDEgKi8KKwkvKiA1Mi01NSAoSU5URVZUIDB4ODgwLTB4OEUwKSB1bnVzZWQvcmVzZXJ2ZWQgKi8KKwkvKiBJTlRQUklPNCB8IElOVE1TSzAgKi8KKwl7NTYsICA0LCAyOCwgMCwgMjUsICAzfSwJLyogSENBTjJfQ0hBTjAgKi8KKwl7NTcsICA0LCAyNCwgMCwgMjQsICAzfSwJLyogSENBTjJfQ0hBTjEgKi8KKwl7NTgsICA0LCAyMCwgMCwgMjMsICAzfSwJLyogSTJTX0NIQU4wICAgKi8KKwl7NTksICA0LCAxNiwgMCwgMjIsICAzfSwJLyogSTJTX0NIQU4xICAgKi8KKwl7NjAsICA0LCAxMiwgMCwgMjEsICAzfSwJLyogQUM5N19DSEFOMCAgKi8KKwl7NjEsICA0LCAgOCwgMCwgMjAsICAzfSwJLyogQUM5N19DSEFOMSAgKi8KKwl7NjIsICA0LCAgNCwgMCwgMTksICAzfSwJLyogSTJDX0NIQU4wICAgKi8KKwl7NjMsICA0LCAgMCwgMCwgMTgsICAzfSwJLyogSTJDX0NIQU4xICAgKi8KKwkvKiBJTlRQUklPOCB8IElOVE1TSzAgKi8KKwl7NTIsICA4LCAxNiwgMCwgMTEsICAzfSwJLyogU0NJRjBfRVJJX0lSUSAqLworCXs1MywgIDgsIDE2LCAwLCAxMCwgIDN9LAkvKiBTQ0lGMF9SWElfSVJRICovCisJezU0LCAgOCwgMTYsIDAsICA5LCAgM30sCS8qIFNDSUYwX0JSSV9JUlEgKi8KKwl7NTUsICA4LCAxNiwgMCwgIDgsICAzfSwJLyogU0NJRjBfVFhJX0lSUSAqLworCXs2NCwgIDgsIDI4LCAwLCAxNywgIDN9LAkvKiBVU0JISV9JUlEgKi8KKwl7NjUsICA4LCAyNCwgMCwgMTYsICAzfSwJLyogTENEQyAgICAgICovCisJLyogNjYsIDY3IHVudXNlZCAqLworCXs2OCwgIDgsIDIwLCAwLCAxNCwgMTN9LAkvKiBETUFCUkdJMF9JUlEgKi8KKwl7NjksICA4LCAyMCwgMCwgMTMsIDEzfSwJLyogRE1BQlJHSTFfSVJRICovCisJezcwLCAgOCwgMjAsIDAsIDEyLCAxM30sCS8qIERNQUJSR0kyX0lSUSAqLworCS8qIDcxIHVudXNlZCAqLworCXs3MiwgIDgsIDEyLCAwLCAgNywgIDN9LAkvKiBTQ0lGMV9FUklfSVJRICovCisJezczLCAgOCwgMTIsIDAsICA2LCAgM30sCS8qIFNDSUYxX1JYSV9JUlEgKi8KKwl7NzQsICA4LCAxMiwgMCwgIDUsICAzfSwJLyogU0NJRjFfQlJJX0lSUSAqLworCXs3NSwgIDgsIDEyLCAwLCAgNCwgIDN9LAkvKiBTQ0lGMV9UWElfSVJRICovCisJezc2LCAgOCwgIDgsIDAsICAzLCAgM30sCS8qIFNDSUYyX0VSSV9JUlEgKi8KKwl7NzcsICA4LCAgOCwgMCwgIDIsICAzfSwJLyogU0NJRjJfUlhJX0lSUSAqLworCXs3OCwgIDgsICA4LCAwLCAgMSwgIDN9LAkvKiBTQ0lGMl9CUklfSVJRICovCisJezc5LCAgOCwgIDgsIDAsICAwLCAgM30sCS8qIFNDSUYyX1RYSV9JUlEgKi8KKwkvKiAgICAgICAgICB8IElOVE1TSzQgKi8KKwl7ODAsICA4LCAgNCwgNCwgMjMsICAzfSwJLyogU0lNX0VSSSAqLworCXs4MSwgIDgsICA0LCA0LCAyMiwgIDN9LAkvKiBTSU1fUlhJICovCisJezgyLCAgOCwgIDQsIDQsIDIxLCAgM30sCS8qIFNJTV9UWEkgKi8KKwl7ODMsICA4LCAgNCwgNCwgMjAsICAzfSwJLyogU0lNX1RFSSAqLworCXs4NCwgIDgsICAwLCA0LCAxOSwgIDN9LAkvKiBIU1BJSSAqLworCS8qIElOVFBSSU9DIHwgSU5UTVNLNCAqLworCS8qIDg1LTg3IHVudXNlZC9yZXNlcnZlZCAqLworCXs4OCwgMTIsIDIwLCA0LCAxOCwgIDN9LAkvKiBNTUNJMCAqLworCXs4OSwgMTIsIDIwLCA0LCAxNywgIDN9LAkvKiBNTUNJMSAqLworCXs5MCwgMTIsIDIwLCA0LCAxNiwgIDN9LAkvKiBNTUNJMiAqLworCXs5MSwgMTIsIDIwLCA0LCAxNSwgIDN9LAkvKiBNTUNJMyAqLworCXs5MiwgMTIsIDEyLCA0LCAgNiwgIDN9LAkvKiBNRkkgKHVuc3VyZSwgYnVnPyBpbiBteSA3NzYwIG1hbnVhbCovCisJLyogOTMtMTA3IHJlc2VydmVkL3VuZG9jdW1lbnRlZCAqLworCXsxMDgsMTIsICA0LCA0LCAgMSwgIDN9LAkvKiBBREMgICovCisJezEwOSwxMiwgIDAsIDQsICAwLCAgM30sCS8qIENNVEkgKi8KKwkvKiAxMTAtMTExIHJlc2VydmVkL3VudXNlZCAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQorCXsgVElNRVJfSVJRLCAwLCAyNCwgMCwgSU5UQ19UTVUwX01TSywgMn0sCisjaWZkZWYgQ09ORklHX1NIX1JUQworCXsgUlRDX0lSUSwgNCwgMCwgMCwgSU5UQ19SVENfTVNLLCBUSU1FUl9QUklPUklUWSB9LAorI2VuZGlmCisJeyBTQ0lGMF9FUklfSVJRLCA4LCAyNCwgMCwgSU5UQ19TQ0lGMF9NU0ssIFNDSUYwX1BSSU9SSVRZIH0sCisJeyBTQ0lGMF9SWElfSVJRLCA4LCAyNCwgMCwgSU5UQ19TQ0lGMF9NU0ssIFNDSUYwX1BSSU9SSVRZIH0sCisJeyBTQ0lGMF9CUklfSVJRLCA4LCAyNCwgMCwgSU5UQ19TQ0lGMF9NU0ssIFNDSUYwX1BSSU9SSVRZIH0sCisJeyBTQ0lGMF9UWElfSVJRLCA4LCAyNCwgMCwgSU5UQ19TQ0lGMF9NU0ssIFNDSUYwX1BSSU9SSVRZIH0sCisKKwl7IFNDSUYxX0VSSV9JUlEsIDgsIDE2LCAwLCBJTlRDX1NDSUYxX01TSywgU0NJRjFfUFJJT1JJVFkgfSwKKwl7IFNDSUYxX1JYSV9JUlEsIDgsIDE2LCAwLCBJTlRDX1NDSUYxX01TSywgU0NJRjFfUFJJT1JJVFkgfSwKKwl7IFNDSUYxX0JSSV9JUlEsIDgsIDE2LCAwLCBJTlRDX1NDSUYxX01TSywgU0NJRjFfUFJJT1JJVFkgfSwKKwl7IFNDSUYxX1RYSV9JUlEsIDgsIDE2LCAwLCBJTlRDX1NDSUYxX01TSywgU0NJRjFfUFJJT1JJVFkgfSwKKworCXsgUENJQzBfSVJRLCAweDEwLCAgOCwgMCwgSU5UQ19QQ0lDMF9NU0ssIFBDSUMwX1BSSU9SSVRZIH0sCisJeyBQQ0lDMV9JUlEsIDB4MTAsICAwLCAwLCBJTlRDX1BDSUMxX01TSywgUENJQzFfUFJJT1JJVFkgfSwKKwl7IFBDSUMyX0lSUSwgMHgxNCwgMjQsIDAsIElOVENfUENJQzJfTVNLLCBQQ0lDMl9QUklPUklUWSB9LAorCXsgUENJQzNfSVJRLCAweDE0LCAxNiwgMCwgSU5UQ19QQ0lDM19NU0ssIFBDSUMzX1BSSU9SSVRZIH0sCisJeyBQQ0lDNF9JUlEsIDB4MTQsICA4LCAwLCBJTlRDX1BDSUM0X01TSywgUENJQzRfUFJJT1JJVFkgfSwKKyNlbmRpZgorfTsKKwordm9pZCBfX2luaXQgaW5pdF9JUlFfaW50YzIodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGludGMyX2luaXRfZGF0YSk7IGkrKykgeworCQlzdHJ1Y3QgaW50YzJfaW5pdCAqcCA9IGludGMyX2luaXRfZGF0YSArIGk7CisJCW1ha2VfaW50YzJfaXJxKHAtPmlycSwgcC0+aXByX29mZnNldCwgcC0+aXByX3NoaWZ0LAorCQkJICAgICAgIHAtPiBtc2tfb2Zmc2V0LCBwLT5tc2tfc2hpZnQsIHAtPnByaW9yaXR5KTsKKwl9Cit9CisKKy8qIEFkZHMgYSB0ZXJtaW5hdGlvbiBjYWxsYmFjayB0byB0aGUgaW50ZXJydXB0ICovCit2b2lkIGludGMyX2FkZF9jbGVhcl9pcnEoaW50IGlycSwgaW50ICgqZm4pKGludCkpCit7CisJaWYgKHVubGlrZWx5KGlycSA8IElOVEMyX0ZJUlNUX0lSUSkpCisJCXJldHVybjsKKworCWludGMyX2RhdGFbaXJxIC0gSU5UQzJfRklSU1RfSVJRXS5jbGVhcl9pcnEgPSBmbjsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pcHIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRiZDcxOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2lwci5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBOaWliZSBZdXRha2EgJiBUYWtlc2hpIFlhZWdhc2hpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEthenVtb3RvIEtvamltYQorICogQ29weXJpZ2h0IChDKSAyMDAzIFRha2FzaGkgS3VzdWRhIDxrdXN1ZGEtdGFrYXNoaUBoaXRhY2hpLXVsLmNvLmpwPgorICoKKyAqIEludGVycnVwdCBoYW5kbGluZyBmb3IgSVBSLWJhc2VkIElSUS4KKyAqCisgKiBTdXBwb3J0ZWQgc3lzdGVtOgorICoJT24tY2hpcCBzdXBwb3J0aW5nIG1vZHVsZXMgKFRNVSwgUlRDLCBldGMuKS4KKyAqCU9uLWNoaXAgc3VwcG9ydGluZyBtb2R1bGVzIGZvciBTSDc3MDkvU0g3NzA5QS9TSDc3MjkvU0g3MzAwLgorICoJSGl0YWNoaSBTb2x1dGlvbkVuZ2luZSBleHRlcm5hbCBJL086CisgKgkJTVM3NzA5U0UwMSwgTVM3NzA5QVNFMDEsIGFuZCBNUzc3NTBTRTAxCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKworc3RydWN0IGlwcl9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgYWRkcjsJLyogQWRkcmVzcyBvZiBJbnRlcnJ1cHQgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KKwlpbnQgc2hpZnQ7CQkvKiBTaGlmdHMgb2YgdGhlIDE2LWJpdCBkYXRhICovCisJaW50IHByaW9yaXR5OwkJLyogVGhlIHByaW9yaXR5ICovCit9Oworc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBpcHJfZGF0YVtOUl9JUlFTXTsKKworc3RhdGljIHZvaWQgZW5hYmxlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSk7CitzdGF0aWMgdm9pZCBkaXNhYmxlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSk7CisKKy8qIHNodXRkb3duIGlzIHNhbWUgYXMgImRpc2FibGUiICovCisjZGVmaW5lIHNodXRkb3duX2lwcl9pcnEgZGlzYWJsZV9pcHJfaXJxCisKK3N0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19pcHIodW5zaWduZWQgaW50KTsKK3N0YXRpYyB2b2lkIGVuZF9pcHJfaXJxKHVuc2lnbmVkIGludCBpcnEpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfaXByX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWVuYWJsZV9pcHJfaXJxKGlycSk7CisJcmV0dXJuIDA7IC8qIG5ldmVyIGFueXRoaW5nIHBlbmRpbmcgKi8KK30KKworc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBpcHJfaXJxX3R5cGUgPSB7CisJLnR5cGVuYW1lID0gIklQUi1JUlEiLAorCS5zdGFydHVwID0gc3RhcnR1cF9pcHJfaXJxLAorCS5zaHV0ZG93biA9IHNodXRkb3duX2lwcl9pcnEsCisJLmVuYWJsZSA9IGVuYWJsZV9pcHJfaXJxLAorCS5kaXNhYmxlID0gZGlzYWJsZV9pcHJfaXJxLAorCS5hY2sgPSBtYXNrX2FuZF9hY2tfaXByLAorCS5lbmQgPSBlbmRfaXByX2lycQorfTsKKworc3RhdGljIHZvaWQgZGlzYWJsZV9pcHJfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyB2YWwsIGZsYWdzOworCXVuc2lnbmVkIGludCBhZGRyID0gaXByX2RhdGFbaXJxXS5hZGRyOworCXVuc2lnbmVkIHNob3J0IG1hc2sgPSAweGZmZmYgXiAoMHgwZiA8PCBpcHJfZGF0YVtpcnFdLnNoaWZ0KTsKKworCS8qIFNldCB0aGUgcHJpb3JpdHkgaW4gSVBSIHRvIDAgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdmFsID0gY3RybF9pbncoYWRkcik7CisJdmFsICY9IG1hc2s7CisJY3RybF9vdXR3KHZhbCwgYWRkcik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfaXByX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgdmFsLCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgYWRkciA9IGlwcl9kYXRhW2lycV0uYWRkcjsKKwlpbnQgcHJpb3JpdHkgPSBpcHJfZGF0YVtpcnFdLnByaW9yaXR5OworCXVuc2lnbmVkIHNob3J0IHZhbHVlID0gKHByaW9yaXR5IDw8IGlwcl9kYXRhW2lycV0uc2hpZnQpOworCisJLyogU2V0IHByaW9yaXR5IGluIElQUiBiYWNrIHRvIG9yaWdpbmFsIHZhbHVlICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXZhbCA9IGN0cmxfaW53KGFkZHIpOworCXZhbCB8PSB2YWx1ZTsKKwljdHJsX291dHcodmFsLCBhZGRyKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19pcHIodW5zaWduZWQgaW50IGlycSkKK3sKKwlkaXNhYmxlX2lwcl9pcnEoaXJxKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCisJLyogVGhpcyBpcyBuZWVkZWQgd2hlbiB3ZSB1c2UgZWRnZSB0cmlnZ2VyZWQgc2V0dGluZyAqLworCS8qIFhYWDogSXMgaXQgcmVhbGx5IG5lZWRlZD8gKi8KKwlpZiAoSVJRMF9JUlEgPD0gaXJxICYmIGlycSA8PSBJUlE1X0lSUSkgeworCQkvKiBDbGVhciBleHRlcm5hbCBpbnRlcnJ1cHQgcmVxdWVzdCAqLworCQlpbnQgYSA9IGN0cmxfaW5iKElOVENfSVJSMCk7CisJCWEgJj0gfigxIDw8IChpcnEgLSBJUlEwX0lSUSkpOworCQljdHJsX291dGIoYSwgSU5UQ19JUlIwKTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgZW5kX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKSkKKwkJZW5hYmxlX2lwcl9pcnEoaXJxKTsKK30KKwordm9pZCBtYWtlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGFkZHIsIGludCBwb3MsCisJCSAgaW50IHByaW9yaXR5LCBpbnQgbWFza3BvcykKK3sKKwlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKwlpcHJfZGF0YVtpcnFdLmFkZHIgPSBhZGRyOworCWlwcl9kYXRhW2lycV0uc2hpZnQgPSBwb3MqNDsgLyogUE9TaXRpb24gKDAtMykgeCA0IG1lYW5zIHNoaWZ0ICovCisJaXByX2RhdGFbaXJxXS5wcmlvcml0eSA9IHByaW9yaXR5OworCisJaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gJmlwcl9pcnFfdHlwZTsKKwlkaXNhYmxlX2lwcl9pcnEoaXJxKTsKK30KKwordm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKK3sKKyNpZm5kZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MAorCW1ha2VfaXByX2lycShUSU1FUl9JUlEsIFRJTUVSX0lQUl9BRERSLCBUSU1FUl9JUFJfUE9TLCBUSU1FUl9QUklPUklUWSwgMCk7CisJbWFrZV9pcHJfaXJxKFRJTUVSMV9JUlEsIFRJTUVSMV9JUFJfQUREUiwgVElNRVIxX0lQUl9QT1MsIFRJTUVSMV9QUklPUklUWSwgMCk7CisjaWYgZGVmaW5lZChDT05GSUdfU0hfUlRDKQorCW1ha2VfaXByX2lycShSVENfSVJRLCBSVENfSVBSX0FERFIsIFJUQ19JUFJfUE9TLCBSVENfUFJJT1JJVFksIDApOworI2VuZGlmCisKKyNpZmRlZiBTQ0lfRVJJX0lSUQorCW1ha2VfaXByX2lycShTQ0lfRVJJX0lSUSwgU0NJX0lQUl9BRERSLCBTQ0lfSVBSX1BPUywgU0NJX1BSSU9SSVRZLCAwKTsKKwltYWtlX2lwcl9pcnEoU0NJX1JYSV9JUlEsIFNDSV9JUFJfQUREUiwgU0NJX0lQUl9QT1MsIFNDSV9QUklPUklUWSwgMCk7CisJbWFrZV9pcHJfaXJxKFNDSV9UWElfSVJRLCBTQ0lfSVBSX0FERFIsIFNDSV9JUFJfUE9TLCBTQ0lfUFJJT1JJVFksIDApOworI2VuZGlmCisKKyNpZmRlZiBTQ0lGMV9FUklfSVJRCisJbWFrZV9pcHJfaXJxKFNDSUYxX0VSSV9JUlEsIFNDSUYxX0lQUl9BRERSLCBTQ0lGMV9JUFJfUE9TLCBTQ0lGMV9QUklPUklUWSwgMCk7CisJbWFrZV9pcHJfaXJxKFNDSUYxX1JYSV9JUlEsIFNDSUYxX0lQUl9BRERSLCBTQ0lGMV9JUFJfUE9TLCBTQ0lGMV9QUklPUklUWSwgMCk7CisJbWFrZV9pcHJfaXJxKFNDSUYxX0JSSV9JUlEsIFNDSUYxX0lQUl9BRERSLCBTQ0lGMV9JUFJfUE9TLCBTQ0lGMV9QUklPUklUWSwgMCk7CisJbWFrZV9pcHJfaXJxKFNDSUYxX1RYSV9JUlEsIFNDSUYxX0lQUl9BRERSLCBTQ0lGMV9JUFJfUE9TLCBTQ0lGMV9QUklPUklUWSwgMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCkKKwltYWtlX2lwcl9pcnEoU0NJRjBfSVJRLCBTQ0lGMF9JUFJfQUREUiwgU0NJRjBfSVBSX1BPUywgU0NJRjBfUFJJT1JJVFksIDApOworCW1ha2VfaXByX2lycShETVRFMl9JUlEsIERNQTFfSVBSX0FERFIsIERNQTFfSVBSX1BPUywgRE1BMV9QUklPUklUWSwgMCk7CisJbWFrZV9pcHJfaXJxKERNVEUzX0lSUSwgRE1BMV9JUFJfQUREUiwgRE1BMV9JUFJfUE9TLCBETUExX1BSSU9SSVRZLCAwKTsKKwltYWtlX2lwcl9pcnEoVklPX0lSUSwgVklPX0lQUl9BRERSLCBWSU9fSVBSX1BPUywgVklPX1BSSU9SSVRZLCAwKTsKKyNlbmRpZgorCisjaWZkZWYgU0NJRl9FUklfSVJRCisJbWFrZV9pcHJfaXJxKFNDSUZfRVJJX0lSUSwgU0NJRl9JUFJfQUREUiwgU0NJRl9JUFJfUE9TLCBTQ0lGX1BSSU9SSVRZLCAwKTsKKwltYWtlX2lwcl9pcnEoU0NJRl9SWElfSVJRLCBTQ0lGX0lQUl9BRERSLCBTQ0lGX0lQUl9QT1MsIFNDSUZfUFJJT1JJVFksIDApOworCW1ha2VfaXByX2lycShTQ0lGX0JSSV9JUlEsIFNDSUZfSVBSX0FERFIsIFNDSUZfSVBSX1BPUywgU0NJRl9QUklPUklUWSwgMCk7CisJbWFrZV9pcHJfaXJxKFNDSUZfVFhJX0lSUSwgU0NJRl9JUFJfQUREUiwgU0NJRl9JUFJfUE9TLCBTQ0lGX1BSSU9SSVRZLCAwKTsKKyNlbmRpZgorCisjaWZkZWYgSVJEQV9FUklfSVJRCisJbWFrZV9pcHJfaXJxKElSREFfRVJJX0lSUSwgSVJEQV9JUFJfQUREUiwgSVJEQV9JUFJfUE9TLCBJUkRBX1BSSU9SSVRZLCAwKTsKKwltYWtlX2lwcl9pcnEoSVJEQV9SWElfSVJRLCBJUkRBX0lQUl9BRERSLCBJUkRBX0lQUl9QT1MsIElSREFfUFJJT1JJVFksIDApOworCW1ha2VfaXByX2lycShJUkRBX0JSSV9JUlEsIElSREFfSVBSX0FERFIsIElSREFfSVBSX1BPUywgSVJEQV9QUklPUklUWSwgMCk7CisJbWFrZV9pcHJfaXJxKElSREFfVFhJX0lSUSwgSVJEQV9JUFJfQUREUiwgSVJEQV9JUFJfUE9TLCBJUkRBX1BSSU9SSVRZLCAwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIEludGVycnVwdCBDb250cm9sbGVyIChJTlRDKQorCSAqIHJlZ2lzdGVycyB0byB0aGVpciBwb3dlciBvbiB2YWx1ZXMKKwkgKi8KKworCS8qCisJICogRW5hYmxlIGV4dGVybmFsIGlycSAoSU5UQyBJUlEgbW9kZSkuCisJICogWW91IHNob3VsZCBzZXQgY29ycmVzcG9uZGluZyBiaXRzIG9mIFBGQyB0byAiMDAiCisJICogdG8gZW5hYmxlIHRoZXNlIGludGVycnVwdHMuCisJICovCisJbWFrZV9pcHJfaXJxKElSUTBfSVJRLCBJUlEwX0lQUl9BRERSLCBJUlEwX0lQUl9QT1MsIElSUTBfUFJJT1JJVFksIDApOworCW1ha2VfaXByX2lycShJUlExX0lSUSwgSVJRMV9JUFJfQUREUiwgSVJRMV9JUFJfUE9TLCBJUlExX1BSSU9SSVRZLCAwKTsKKwltYWtlX2lwcl9pcnEoSVJRMl9JUlEsIElSUTJfSVBSX0FERFIsIElSUTJfSVBSX1BPUywgSVJRMl9QUklPUklUWSwgMCk7CisJbWFrZV9pcHJfaXJxKElSUTNfSVJRLCBJUlEzX0lQUl9BRERSLCBJUlEzX0lQUl9QT1MsIElSUTNfUFJJT1JJVFksIDApOworCW1ha2VfaXByX2lycShJUlE0X0lSUSwgSVJRNF9JUFJfQUREUiwgSVJRNF9JUFJfUE9TLCBJUlE0X1BSSU9SSVRZLCAwKTsKKwltYWtlX2lwcl9pcnEoSVJRNV9JUlEsIElSUTVfSVBSX0FERFIsIElSUTVfSVBSX1BPUywgSVJRNV9QUklPUklUWSwgMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9IQVNfUElOVF9JUlEKKwlpbml0X0lSUV9waW50KCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfSEFTX0lOVEMyX0lSUQorCWluaXRfSVJRX2ludGMyKCk7CisjZW5kaWYKKwkvKiBQZXJmb3JtIHRoZSBtYWNoaW5lIHNwZWNpZmljIGluaXRpYWxpc2F0aW9uICovCisJaWYgKHNoX212Lm12X2luaXRfaXJxICE9IE5VTEwpCisJCXNoX212Lm12X2luaXRfaXJxKCk7Cit9CisKKyNpZiAhZGVmaW5lZChDT05GSUdfQ1BVX0hBU19QSU5UX0lSUSkKK2ludCBpcHJfaXJxX2RlbXV4KGludCBpcnEpCit7CisJcmV0dXJuIGlycTsKK30KKyNlbmRpZgorCitFWFBPUlRfU1lNQk9MKG1ha2VfaXByX2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL3BpbnQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvcGludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZDYwMjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL3BpbnQuYwpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9pcnEvcGludC5jIC0gSW50ZXJydXB0IGhhbmRsaW5nIGZvciBQSU5ULWJhc2VkIElSUXMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBOaWliZSBZdXRha2EgJiBUYWtlc2hpIFlhZWdhc2hpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEthenVtb3RvIEtvamltYQorICogQ29weXJpZ2h0IChDKSAyMDAzIFRha2FzaGkgS3VzdWRhIDxrdXN1ZGEtdGFrYXNoaUBoaXRhY2hpLXVsLmNvLmpwPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcGludF9tYXBbMjU2XTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBvcnRjcl9tYXNrOworCitzdGF0aWMgdm9pZCBlbmFibGVfcGludF9pcnEodW5zaWduZWQgaW50IGlycSk7CitzdGF0aWMgdm9pZCBkaXNhYmxlX3BpbnRfaXJxKHVuc2lnbmVkIGludCBpcnEpOworCisvKiBzaHV0ZG93biBpcyBzYW1lIGFzICJkaXNhYmxlIiAqLworI2RlZmluZSBzaHV0ZG93bl9waW50X2lycSBkaXNhYmxlX3BpbnRfaXJxCisKK3N0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19waW50KHVuc2lnbmVkIGludCk7CitzdGF0aWMgdm9pZCBlbmRfcGludF9pcnEodW5zaWduZWQgaW50IGlycSk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9waW50X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWVuYWJsZV9waW50X2lycShpcnEpOworCXJldHVybiAwOyAvKiBuZXZlciBhbnl0aGluZyBwZW5kaW5nICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgcGludF9pcnFfdHlwZSA9IHsKKwkudHlwZW5hbWUgPSAiUElOVC1JUlEiLAorCS5zdGFydHVwID0gc3RhcnR1cF9waW50X2lycSwKKwkuc2h1dGRvd24gPSBzaHV0ZG93bl9waW50X2lycSwKKwkuZW5hYmxlID0gZW5hYmxlX3BpbnRfaXJxLAorCS5kaXNhYmxlID0gZGlzYWJsZV9waW50X2lycSwKKwkuYWNrID0gbWFza19hbmRfYWNrX3BpbnQsCisJLmVuZCA9IGVuZF9waW50X2lycQorfTsKKworc3RhdGljIHZvaWQgZGlzYWJsZV9waW50X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgdmFsLCBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl2YWwgPSBjdHJsX2ludyhJTlRDX0lOVEVSKTsKKwl2YWwgJj0gfigxIDw8IChpcnEgLSBQSU5UX0lSUV9CQVNFKSk7CisJY3RybF9vdXR3KHZhbCwgSU5UQ19JTlRFUik7CS8qIGRpc2FibGUgUElOVG4gKi8KKwlwb3J0Y3JfbWFzayAmPSB+KDMgPDwgKGlycSAtIFBJTlRfSVJRX0JBU0UpKjIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgZW5hYmxlX3BpbnRfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyB2YWwsIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXZhbCA9IGN0cmxfaW53KElOVENfSU5URVIpOworCXZhbCB8PSAxIDw8IChpcnEgLSBQSU5UX0lSUV9CQVNFKTsKKwljdHJsX291dHcodmFsLCBJTlRDX0lOVEVSKTsJLyogZW5hYmxlIFBJTlRuICovCisJcG9ydGNyX21hc2sgfD0gMyA8PCAoaXJxIC0gUElOVF9JUlFfQkFTRSkqMjsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19waW50KHVuc2lnbmVkIGludCBpcnEpCit7CisJZGlzYWJsZV9waW50X2lycShpcnEpOworfQorCitzdGF0aWMgdm9pZCBlbmRfcGludF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKSkKKwkJZW5hYmxlX3BpbnRfaXJxKGlycSk7Cit9CisKK3ZvaWQgbWFrZV9waW50X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCWlycV9kZXNjW2lycV0uaGFuZGxlciA9ICZwaW50X2lycV90eXBlOworCWRpc2FibGVfcGludF9pcnEoaXJxKTsKK30KKwordm9pZCBfX2luaXQgaW5pdF9JUlFfcGludCh2b2lkKQoreworCWludCBpOworCisJbWFrZV9pcHJfaXJxKFBJTlQwX0lSUSwgUElOVDBfSVBSX0FERFIsIFBJTlQwX0lQUl9QT1MsIFBJTlQwX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoUElOVDhfSVJRLCBQSU5UOF9JUFJfQUREUiwgUElOVDhfSVBSX1BPUywgUElOVDhfUFJJT1JJVFkpOworCisJZW5hYmxlX2lycShQSU5UMF9JUlEpOworCWVuYWJsZV9pcnEoUElOVDhfSVJRKTsKKworCWZvcihpID0gMDsgaSA8IDE2OyBpKyspCisJCW1ha2VfcGludF9pcnEoUElOVF9JUlFfQkFTRSArIGkpOworCisJZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJaWYgKGkgJiAxKQorCQkJcGludF9tYXBbaV0gPSAwOworCQllbHNlIGlmIChpICYgMikKKwkJCXBpbnRfbWFwW2ldID0gMTsKKwkJZWxzZSBpZiAoaSAmIDQpCisJCQlwaW50X21hcFtpXSA9IDI7CisJCWVsc2UgaWYgKGkgJiA4KQorCQkJcGludF9tYXBbaV0gPSAzOworCQllbHNlIGlmIChpICYgMHgxMCkKKwkJCXBpbnRfbWFwW2ldID0gNDsKKwkJZWxzZSBpZiAoaSAmIDB4MjApCisJCQlwaW50X21hcFtpXSA9IDU7CisJCWVsc2UgaWYgKGkgJiAweDQwKQorCQkJcGludF9tYXBbaV0gPSA2OworCQllbHNlIGlmIChpICYgMHg4MCkKKwkJCXBpbnRfbWFwW2ldID0gNzsKKwl9Cit9CisKK2ludCBpcHJfaXJxX2RlbXV4KGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyBjcmVnLCBkcmVnLCBkLCBzYXY7CisKKwlpZiAoaXJxID09IFBJTlQwX0lSUSkgeworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykKKwkJY3JlZyA9IFBPUlRfUEFDUjsKKwkJZHJlZyA9IFBPUlRfUEFEUjsKKyNlbHNlCisJCWNyZWcgPSBQT1JUX1BDQ1I7CisJCWRyZWcgPSBQT1JUX1BDRFI7CisjZW5kaWYKKwkJc2F2ID0gY3RybF9pbncoY3JlZyk7CisJCWN0cmxfb3V0dyhzYXYgfCBwb3J0Y3JfbWFzaywgY3JlZyk7CisJCWQgPSAofmN0cmxfaW5iKGRyZWcpIF4gY3RybF9pbncoSU5UQ19JQ1IyKSkgJgorCQkJY3RybF9pbncoSU5UQ19JTlRFUikgJiAweGZmOworCQljdHJsX291dHcoc2F2LCBjcmVnKTsKKworCQlpZiAoZCA9PSAwKQorCQkJcmV0dXJuIGlycTsKKworCQlyZXR1cm4gUElOVF9JUlFfQkFTRSArIHBpbnRfbWFwW2RdOworCX0gZWxzZSBpZiAoaXJxID09IFBJTlQ4X0lSUSkgeworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykKKwkJY3JlZyA9IFBPUlRfUEJDUjsKKwkJZHJlZyA9IFBPUlRfUEJEUjsKKyNlbHNlCisJCWNyZWcgPSBQT1JUX1BGQ1I7CisJCWRyZWcgPSBQT1JUX1BGRFI7CisjZW5kaWYKKwkJc2F2ID0gY3RybF9pbncoY3JlZyk7CisJCWN0cmxfb3V0dyhzYXYgfCAocG9ydGNyX21hc2sgPj4gMTYpLCBjcmVnKTsKKwkJZCA9ICh+Y3RybF9pbmIoZHJlZykgXiAoY3RybF9pbncoSU5UQ19JQ1IyKSA+PiA4KSkgJgorCQkJKGN0cmxfaW53KElOVENfSU5URVIpID4+IDgpICYgMHhmZjsKKwkJY3RybF9vdXR3KHNhdiwgY3JlZyk7CisKKwkJaWYgKGQgPT0gMCkKKwkJCXJldHVybiBpcnE7CisKKwkJcmV0dXJuIFBJTlRfSVJRX0JBU0UgKyA4ICsgcGludF9tYXBbZF07CisJfQorCisJcmV0dXJuIGlycTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycV9pcHIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnFfaXByLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxZjkyMDkuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycV9pcHIuYworKysgL2Rldi9udWxsCkBAIC0xLDMzOSArMCwwIEBACi0vKiAkSWQ6IGlycV9pcHIuYyx2IDEuMS4yLjEgMjAwMi8xMS8xNyAxMDo1Mzo0MyBtcmJyb3duIEV4cCAkCi0gKgotICogbGludXgvYXJjaC9zaC9rZXJuZWwvaXJxX2lwci5jCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5ICBOaWliZSBZdXRha2EgJiBUYWtlc2hpIFlhZWdhc2hpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEthenVtb3RvIEtvamltYQotICogQ29weXJpZ2h0IChDKSAyMDAzIFRha2FzaGkgS3VzdWRhIDxrdXN1ZGEtdGFrYXNoaUBoaXRhY2hpLXVsLmNvLmpwPgotICoKLSAqIEludGVycnVwdCBoYW5kbGluZyBmb3IgSVBSLWJhc2VkIElSUS4KLSAqCi0gKiBTdXBwb3J0ZWQgc3lzdGVtOgotICoJT24tY2hpcCBzdXBwb3J0aW5nIG1vZHVsZXMgKFRNVSwgUlRDLCBldGMuKS4KLSAqCU9uLWNoaXAgc3VwcG9ydGluZyBtb2R1bGVzIGZvciBTSDc3MDkvU0g3NzA5QS9TSDc3MjkvU0g3MzAwLgotICoJSGl0YWNoaSBTb2x1dGlvbkVuZ2luZSBleHRlcm5hbCBJL086Ci0gKgkJTVM3NzA5U0UwMSwgTVM3NzA5QVNFMDEsIGFuZCBNUzc3NTBTRTAxCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLQotc3RydWN0IGlwcl9kYXRhIHsKLQl1bnNpZ25lZCBpbnQgYWRkcjsJLyogQWRkcmVzcyBvZiBJbnRlcnJ1cHQgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KLQlpbnQgc2hpZnQ7CQkvKiBTaGlmdHMgb2YgdGhlIDE2LWJpdCBkYXRhICovCi0JaW50IHByaW9yaXR5OwkJLyogVGhlIHByaW9yaXR5ICovCi19Owotc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBpcHJfZGF0YVtOUl9JUlFTXTsKLQotc3RhdGljIHZvaWQgZW5hYmxlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCBkaXNhYmxlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLS8qIHNodXRkb3duIGlzIHNhbWUgYXMgImRpc2FibGUiICovCi0jZGVmaW5lIHNodXRkb3duX2lwcl9pcnEgZGlzYWJsZV9pcHJfaXJxCi0KLXN0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19pcHIodW5zaWduZWQgaW50KTsKLXN0YXRpYyB2b2lkIGVuZF9pcHJfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfaXByX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWVuYWJsZV9pcHJfaXJxKGlycSk7Ci0JcmV0dXJuIDA7IC8qIG5ldmVyIGFueXRoaW5nIHBlbmRpbmcgKi8KLX0KLQotc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBpcHJfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gIklQUi1JUlEiLAotCS5zdGFydHVwID0gc3RhcnR1cF9pcHJfaXJxLAotCS5zaHV0ZG93biA9IHNodXRkb3duX2lwcl9pcnEsCi0JLmVuYWJsZSA9IGVuYWJsZV9pcHJfaXJxLAotCS5kaXNhYmxlID0gZGlzYWJsZV9pcHJfaXJxLAotCS5hY2sgPSBtYXNrX2FuZF9hY2tfaXByLAotCS5lbmQgPSBlbmRfaXByX2lycQotfTsKLQotc3RhdGljIHZvaWQgZGlzYWJsZV9pcHJfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWwsIGZsYWdzOwotCXVuc2lnbmVkIGludCBhZGRyID0gaXByX2RhdGFbaXJxXS5hZGRyOwotCXVuc2lnbmVkIHNob3J0IG1hc2sgPSAweGZmZmYgXiAoMHgwZiA8PCBpcHJfZGF0YVtpcnFdLnNoaWZ0KTsKLQotCS8qIFNldCB0aGUgcHJpb3JpdHkgaW4gSVBSIHRvIDAgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdmFsID0gY3RybF9pbncoYWRkcik7Ci0JdmFsICY9IG1hc2s7Ci0JY3RybF9vdXR3KHZhbCwgYWRkcik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfaXByX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgdmFsLCBmbGFnczsKLQl1bnNpZ25lZCBpbnQgYWRkciA9IGlwcl9kYXRhW2lycV0uYWRkcjsKLQlpbnQgcHJpb3JpdHkgPSBpcHJfZGF0YVtpcnFdLnByaW9yaXR5OwotCXVuc2lnbmVkIHNob3J0IHZhbHVlID0gKHByaW9yaXR5IDw8IGlwcl9kYXRhW2lycV0uc2hpZnQpOwotCi0JLyogU2V0IHByaW9yaXR5IGluIElQUiBiYWNrIHRvIG9yaWdpbmFsIHZhbHVlICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXZhbCA9IGN0cmxfaW53KGFkZHIpOwotCXZhbCB8PSB2YWx1ZTsKLQljdHJsX291dHcodmFsLCBhZGRyKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19pcHIodW5zaWduZWQgaW50IGlycSkKLXsKLQlkaXNhYmxlX2lwcl9pcnEoaXJxKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCi0JLyogVGhpcyBpcyBuZWVkZWQgd2hlbiB3ZSB1c2UgZWRnZSB0cmlnZ2VyZWQgc2V0dGluZyAqLwotCS8qIFhYWDogSXMgaXQgcmVhbGx5IG5lZWRlZD8gKi8KLQlpZiAoSVJRMF9JUlEgPD0gaXJxICYmIGlycSA8PSBJUlE1X0lSUSkgewotCQkvKiBDbGVhciBleHRlcm5hbCBpbnRlcnJ1cHQgcmVxdWVzdCAqLwotCQlpbnQgYSA9IGN0cmxfaW5iKElOVENfSVJSMCk7Ci0JCWEgJj0gfigxIDw8IChpcnEgLSBJUlEwX0lSUSkpOwotCQljdHJsX291dGIoYSwgSU5UQ19JUlIwKTsKLQl9Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgZW5kX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKSkKLQkJZW5hYmxlX2lwcl9pcnEoaXJxKTsKLX0KLQotdm9pZCBtYWtlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGFkZHIsIGludCBwb3MsIGludCBwcmlvcml0eSkKLXsKLQlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKLQlpcHJfZGF0YVtpcnFdLmFkZHIgPSBhZGRyOwotCWlwcl9kYXRhW2lycV0uc2hpZnQgPSBwb3MqNDsgLyogUE9TaXRpb24gKDAtMykgeCA0IG1lYW5zIHNoaWZ0ICovCi0JaXByX2RhdGFbaXJxXS5wcmlvcml0eSA9IHByaW9yaXR5OwotCi0JaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gJmlwcl9pcnFfdHlwZTsKLQlkaXNhYmxlX2lwcl9pcnEoaXJxKTsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHBpbnRfbWFwWzI1Nl07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwb3J0Y3JfbWFzayA9IDA7Ci0KLXN0YXRpYyB2b2lkIGVuYWJsZV9waW50X2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLXN0YXRpYyB2b2lkIGRpc2FibGVfcGludF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLS8qIHNodXRkb3duIGlzIHNhbWUgYXMgImRpc2FibGUiICovCi0jZGVmaW5lIHNodXRkb3duX3BpbnRfaXJxIGRpc2FibGVfcGludF9pcnEKLQotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX3BpbnQodW5zaWduZWQgaW50KTsKLXN0YXRpYyB2b2lkIGVuZF9waW50X2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX3BpbnRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZW5hYmxlX3BpbnRfaXJxKGlycSk7Ci0JcmV0dXJuIDA7IC8qIG5ldmVyIGFueXRoaW5nIHBlbmRpbmcgKi8KLX0KLQotc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBwaW50X2lycV90eXBlID0gewotCS50eXBlbmFtZSA9ICJQSU5ULUlSUSIsCi0JLnN0YXJ0dXAgPSBzdGFydHVwX3BpbnRfaXJxLAotCS5zaHV0ZG93biA9IHNodXRkb3duX3BpbnRfaXJxLAotCS5lbmFibGUgPSBlbmFibGVfcGludF9pcnEsCi0JLmRpc2FibGUgPSBkaXNhYmxlX3BpbnRfaXJxLAotCS5hY2sgPSBtYXNrX2FuZF9hY2tfcGludCwKLQkuZW5kID0gZW5kX3BpbnRfaXJxCi19OwotCi1zdGF0aWMgdm9pZCBkaXNhYmxlX3BpbnRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWwsIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXZhbCA9IGN0cmxfaW53KElOVENfSU5URVIpOwotCXZhbCAmPSB+KDEgPDwgKGlycSAtIFBJTlRfSVJRX0JBU0UpKTsKLQljdHJsX291dHcodmFsLCBJTlRDX0lOVEVSKTsJLyogZGlzYWJsZSBQSU5UbiAqLwotCXBvcnRjcl9tYXNrICY9IH4oMyA8PCAoaXJxIC0gUElOVF9JUlFfQkFTRSkqMik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfcGludF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbCwgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdmFsID0gY3RybF9pbncoSU5UQ19JTlRFUik7Ci0JdmFsIHw9IDEgPDwgKGlycSAtIFBJTlRfSVJRX0JBU0UpOwotCWN0cmxfb3V0dyh2YWwsIElOVENfSU5URVIpOwkvKiBlbmFibGUgUElOVG4gKi8KLQlwb3J0Y3JfbWFzayB8PSAzIDw8IChpcnEgLSBQSU5UX0lSUV9CQVNFKSoyOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX3BpbnQodW5zaWduZWQgaW50IGlycSkKLXsKLQlkaXNhYmxlX3BpbnRfaXJxKGlycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZF9waW50X2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRHxJUlFfSU5QUk9HUkVTUykpKQotCQllbmFibGVfcGludF9pcnEoaXJxKTsKLX0KLQotdm9pZCBtYWtlX3BpbnRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7Ci0JaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gJnBpbnRfaXJxX3R5cGU7Ci0JZGlzYWJsZV9waW50X2lycShpcnEpOwotfQotI2VuZGlmCi0KLXZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQotCWludCBpOwotI2VuZGlmCi0KLQltYWtlX2lwcl9pcnEoVElNRVJfSVJRLCBUSU1FUl9JUFJfQUREUiwgVElNRVJfSVBSX1BPUywgVElNRVJfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShUSU1FUjFfSVJRLCBUSU1FUjFfSVBSX0FERFIsIFRJTUVSMV9JUFJfUE9TLCBUSU1FUjFfUFJJT1JJVFkpOwotI2lmIGRlZmluZWQoQ09ORklHX1NIX1JUQykKLQltYWtlX2lwcl9pcnEoUlRDX0lSUSwgUlRDX0lQUl9BRERSLCBSVENfSVBSX1BPUywgUlRDX1BSSU9SSVRZKTsKLSNlbmRpZgotCi0jaWZkZWYgU0NJX0VSSV9JUlEKLQltYWtlX2lwcl9pcnEoU0NJX0VSSV9JUlEsIFNDSV9JUFJfQUREUiwgU0NJX0lQUl9QT1MsIFNDSV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKFNDSV9SWElfSVJRLCBTQ0lfSVBSX0FERFIsIFNDSV9JUFJfUE9TLCBTQ0lfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShTQ0lfVFhJX0lSUSwgU0NJX0lQUl9BRERSLCBTQ0lfSVBSX1BPUywgU0NJX1BSSU9SSVRZKTsKLSNlbmRpZgotCi0jaWZkZWYgU0NJRjFfRVJJX0lSUQotCW1ha2VfaXByX2lycShTQ0lGMV9FUklfSVJRLCBTQ0lGMV9JUFJfQUREUiwgU0NJRjFfSVBSX1BPUywgU0NJRjFfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShTQ0lGMV9SWElfSVJRLCBTQ0lGMV9JUFJfQUREUiwgU0NJRjFfSVBSX1BPUywgU0NJRjFfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShTQ0lGMV9CUklfSVJRLCBTQ0lGMV9JUFJfQUREUiwgU0NJRjFfSVBSX1BPUywgU0NJRjFfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShTQ0lGMV9UWElfSVJRLCBTQ0lGMV9JUFJfQUREUiwgU0NJRjFfSVBSX1BPUywgU0NJRjFfUFJJT1JJVFkpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApCi0JbWFrZV9pcHJfaXJxKFNDSUYwX0lSUSwgU0NJRjBfSVBSX0FERFIsIFNDSUYwX0lQUl9QT1MsIFNDSUYwX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoRE1URTJfSVJRLCBETUExX0lQUl9BRERSLCBETUExX0lQUl9QT1MsIERNQTFfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShETVRFM19JUlEsIERNQTFfSVBSX0FERFIsIERNQTFfSVBSX1BPUywgRE1BMV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKFZJT19JUlEsIFZJT19JUFJfQUREUiwgVklPX0lQUl9QT1MsIFZJT19QUklPUklUWSk7Ci0jZW5kaWYKLQotI2lmZGVmIFNDSUZfRVJJX0lSUQotCW1ha2VfaXByX2lycShTQ0lGX0VSSV9JUlEsIFNDSUZfSVBSX0FERFIsIFNDSUZfSVBSX1BPUywgU0NJRl9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKFNDSUZfUlhJX0lSUSwgU0NJRl9JUFJfQUREUiwgU0NJRl9JUFJfUE9TLCBTQ0lGX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoU0NJRl9CUklfSVJRLCBTQ0lGX0lQUl9BRERSLCBTQ0lGX0lQUl9QT1MsIFNDSUZfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShTQ0lGX1RYSV9JUlEsIFNDSUZfSVBSX0FERFIsIFNDSUZfSVBSX1BPUywgU0NJRl9QUklPUklUWSk7Ci0jZW5kaWYKLQotI2lmZGVmIElSREFfRVJJX0lSUQotCW1ha2VfaXByX2lycShJUkRBX0VSSV9JUlEsIElSREFfSVBSX0FERFIsIElSREFfSVBSX1BPUywgSVJEQV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElSREFfUlhJX0lSUSwgSVJEQV9JUFJfQUREUiwgSVJEQV9JUFJfUE9TLCBJUkRBX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoSVJEQV9CUklfSVJRLCBJUkRBX0lQUl9BRERSLCBJUkRBX0lQUl9QT1MsIElSREFfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShJUkRBX1RYSV9JUlEsIElSREFfSVBSX0FERFIsIElSREFfSVBSX1BPUywgSVJEQV9QUklPUklUWSk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSU5UQykKLQkgKiByZWdpc3RlcnMgdG8gdGhlaXIgcG93ZXIgb24gdmFsdWVzCi0JICovCi0KLQkvKgotCSAqIEVuYWJsZSBleHRlcm5hbCBpcnEgKElOVEMgSVJRIG1vZGUpLgotCSAqIFlvdSBzaG91bGQgc2V0IGNvcnJlc3BvbmRpbmcgYml0cyBvZiBQRkMgdG8gIjAwIgotCSAqIHRvIGVuYWJsZSB0aGVzZSBpbnRlcnJ1cHRzLgotCSAqLwotCW1ha2VfaXByX2lycShJUlEwX0lSUSwgSVJRMF9JUFJfQUREUiwgSVJRMF9JUFJfUE9TLCBJUlEwX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoSVJRMV9JUlEsIElSUTFfSVBSX0FERFIsIElSUTFfSVBSX1BPUywgSVJRMV9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElSUTJfSVJRLCBJUlEyX0lQUl9BRERSLCBJUlEyX0lQUl9QT1MsIElSUTJfUFJJT1JJVFkpOwotCW1ha2VfaXByX2lycShJUlEzX0lSUSwgSVJRM19JUFJfQUREUiwgSVJRM19JUFJfUE9TLCBJUlEzX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoSVJRNF9JUlEsIElSUTRfSVBSX0FERFIsIElSUTRfSVBSX1BPUywgSVJRNF9QUklPUklUWSk7Ci0JbWFrZV9pcHJfaXJxKElSUTVfSVJRLCBJUlE1X0lQUl9BRERSLCBJUlE1X0lQUl9QT1MsIElSUTVfUFJJT1JJVFkpOwotI2lmICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApCi0JbWFrZV9pcHJfaXJxKFBJTlQwX0lSUSwgUElOVDBfSVBSX0FERFIsIFBJTlQwX0lQUl9QT1MsIFBJTlQwX1BSSU9SSVRZKTsKLQltYWtlX2lwcl9pcnEoUElOVDhfSVJRLCBQSU5UOF9JUFJfQUREUiwgUElOVDhfSVBSX1BPUywgUElOVDhfUFJJT1JJVFkpOwotCWVuYWJsZV9pcHJfaXJxKFBJTlQwX0lSUSk7Ci0JZW5hYmxlX2lwcl9pcnEoUElOVDhfSVJRKTsKLQotCWZvcihpID0gMDsgaSA8IDE2OyBpKyspCi0JCW1ha2VfcGludF9pcnEoUElOVF9JUlFfQkFTRSArIGkpOwotCWZvcihpID0gMDsgaSA8IDI1NjsgaSsrKQotCXsKLQkJaWYoaSAmIDEpIHBpbnRfbWFwW2ldID0gMDsKLQkJZWxzZSBpZihpICYgMikgcGludF9tYXBbaV0gPSAxOwotCQllbHNlIGlmKGkgJiA0KSBwaW50X21hcFtpXSA9IDI7Ci0JCWVsc2UgaWYoaSAmIDgpIHBpbnRfbWFwW2ldID0gMzsKLQkJZWxzZSBpZihpICYgMHgxMCkgcGludF9tYXBbaV0gPSA0OwotCQllbHNlIGlmKGkgJiAweDIwKSBwaW50X21hcFtpXSA9IDU7Ci0JCWVsc2UgaWYoaSAmIDB4NDApIHBpbnRfbWFwW2ldID0gNjsKLQkJZWxzZSBpZihpICYgMHg4MCkgcGludF9tYXBbaV0gPSA3OwotCX0KLSNlbmRpZiAvKiAhQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCAqLwotI2VuZGlmIC8qIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgfHwgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSAgfHwgQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCovCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MAotCWluaXRfSVJRX2ludGMyKCk7Ci0jZW5kaWYKLQotCS8qIFBlcmZvcm0gdGhlIG1hY2hpbmUgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24gKi8KLQlpZiAoc2hfbXYubXZfaW5pdF9pcnEgIT0gTlVMTCkgewotCQlzaF9tdi5tdl9pbml0X2lycSgpOwotCX0KLX0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQotaW50IGlwcl9pcnFfZGVtdXgoaW50IGlycSkKLXsKLSNpZiAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKQotCXVuc2lnbmVkIGxvbmcgY3JlZywgZHJlZywgZCwgc2F2OwotCi0JaWYoaXJxID09IFBJTlQwX0lSUSkKLQl7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KQotCQljcmVnID0gUE9SVF9QQUNSOwotCQlkcmVnID0gUE9SVF9QQURSOwotI2Vsc2UKLQkJY3JlZyA9IFBPUlRfUENDUjsKLQkJZHJlZyA9IFBPUlRfUENEUjsKLSNlbmRpZgotCQlzYXYgPSBjdHJsX2ludyhjcmVnKTsKLQkJY3RybF9vdXR3KHNhdiB8IHBvcnRjcl9tYXNrLCBjcmVnKTsKLQkJZCA9ICh+Y3RybF9pbmIoZHJlZykgXiBjdHJsX2ludyhJTlRDX0lDUjIpKSAmIGN0cmxfaW53KElOVENfSU5URVIpICYgMHhmZjsKLQkJY3RybF9vdXR3KHNhdiwgY3JlZyk7Ci0JCWlmKGQgPT0gMCkgcmV0dXJuIGlycTsKLQkJcmV0dXJuIFBJTlRfSVJRX0JBU0UgKyBwaW50X21hcFtkXTsKLQl9Ci0JZWxzZSBpZihpcnEgPT0gUElOVDhfSVJRKQotCXsKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpCi0JCWNyZWcgPSBQT1JUX1BCQ1I7Ci0JCWRyZWcgPSBQT1JUX1BCRFI7Ci0jZWxzZQotCQljcmVnID0gUE9SVF9QRkNSOwotCQlkcmVnID0gUE9SVF9QRkRSOwotI2VuZGlmCi0JCXNhdiA9IGN0cmxfaW53KGNyZWcpOwotCQljdHJsX291dHcoc2F2IHwgKHBvcnRjcl9tYXNrID4+IDE2KSwgY3JlZyk7Ci0JCWQgPSAofmN0cmxfaW5iKGRyZWcpIF4gKGN0cmxfaW53KElOVENfSUNSMikgPj4gOCkpICYgKGN0cmxfaW53KElOVENfSU5URVIpID4+IDgpICYgMHhmZjsKLQkJY3RybF9vdXR3KHNhdiwgY3JlZyk7Ci0JCWlmKGQgPT0gMCkgcmV0dXJuIGlycTsKLQkJcmV0dXJuIFBJTlRfSVJRX0JBU0UgKyA4ICsgcGludF9tYXBbZF07Ci0JfQotI2VuZGlmCi0JcmV0dXJuIGlycTsKLX0KLSNlbmRpZgotCi1FWFBPUlRfU1lNQk9MKG1ha2VfaXByX2lycSk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCmluZGV4IGE2NDUzMmUuLmI1NGRiYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQpAQCAtNCwzICs0LDEwIEBACiAKIG9iai15CTo9IGV4Lm8gcHJvYmUubwogCitjbG9jay0kKENPTkZJR19DUFVfU0gzKQkJCTo9IGNsb2NrLXNoMy5vCitjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApCTo9IGNsb2NrLXNoNzMwMC5vCitjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCTo9IGNsb2NrLXNoNzcwNS5vCitjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCTo9IGNsb2NrLXNoNzcwOS5vCisKK29iai15CSs9ICQoY2xvY2steSkKKwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2gzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNjOTQ1OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2gzLmMKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2gzLmMKKyAqCisgKiBHZW5lcmljIFNILTMgc3VwcG9ydCBmb3IgdGhlIGNsb2NrIGZyYW1ld29yaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgIFBhdWwgTXVuZHQKKyAqCisgKiBGUlFDUiBwYXJzaW5nIGhhY2tlZCBvdXQgb2YgYXJjaC9zaC9rZXJuZWwvdGltZS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSAgVGV0c3V5YSBPa2FkYSAmIE5paWJlIFl1dGFrYQorICogIENvcHlyaWdodCAoQykgMjAwMCAgUGhpbGlwcCBSdW1wZiA8cHJ1bXBmQHR1eC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDAyICBNLiBSLiBCcm93biAgPG1yYnJvd25AbGludXgtc2gub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9mcmVxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyBpbnQgc3RjX211bHRpcGxpZXJzW10gPSB7IDEsIDIsIDMsIDQsIDYsIDEsIDEsIDEgfTsKK3N0YXRpYyBpbnQgaWZjX2Rpdmlzb3JzW10gICAgPSB7IDEsIDIsIDMsIDQsIDEsIDEsIDEsIDEgfTsKK3N0YXRpYyBpbnQgcGZjX2Rpdmlzb3JzW10gICAgPSB7IDEsIDIsIDMsIDQsIDYsIDEsIDEsIDEgfTsKKworc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGlkeCA9ICgoZnJxY3IgJiAweDIwMDApID4+IDExKSB8IChmcnFjciAmIDB4MDAwMyk7CisKKwljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDNfbWFzdGVyX2Nsa19vcHMgPSB7CisJLmluaXQJCT0gbWFzdGVyX2Nsa19pbml0LAorfTsKKworc3RhdGljIHZvaWQgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgaWR4ID0gKChmcnFjciAmIDB4MjAwMCkgPj4gMTEpIHwgKGZycWNyICYgMHgwMDAzKTsKKworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDNfbW9kdWxlX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGlkeCA9ICgoZnJxY3IgJiAweDgwMDApID4+IDEzKSB8ICgoZnJxY3IgJiAweDAwMzApID4+IDQpOworCisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBzdGNfbXVsdGlwbGllcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoM19idXNfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGJ1c19jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgaWR4ID0gKChmcnFjciAmIDB4NDAwMCkgPj4gMTIpIHwgKChmcnFjciAmIDB4MDAwYykgPj4gMik7CisKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2gzX2NwdV9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gY3B1X2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19vcHMgKnNoM19jbGtfb3BzW10gPSB7CisJJnNoM19tYXN0ZXJfY2xrX29wcywKKwkmc2gzX21vZHVsZV9jbGtfb3BzLAorCSZzaDNfYnVzX2Nsa19vcHMsCisJJnNoM19jcHVfY2xrX29wcywKK307CisKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqb3BzLCBpbnQgaWR4KQoreworCWlmIChpZHggPCBBUlJBWV9TSVpFKHNoM19jbGtfb3BzKSkKKwkJKm9wcyA9IHNoM19jbGtfb3BzW2lkeF07Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3MzAwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzMwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MDQxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzMwMC5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzMwMC5jCisgKgorICogU0g3MzAwIHN1cHBvcnQgZm9yIHRoZSBjbG9jayBmcmFtZXdvcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1ICBQYXVsIE11bmR0CisgKgorICogRlJRQ1IgcGFyc2luZyBoYWNrZWQgb3V0IG9mIGFyY2gvc2gva2VybmVsL3RpbWUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgIFRldHN1eWEgT2thZGEgJiBOaWliZSBZdXRha2EKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgIFBoaWxpcHAgUnVtcGYgPHBydW1wZkB0dXgub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwMiAgTS4gUi4gQnJvd24gIDxtcmJyb3duQGxpbnV4LXNoLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vZnJlcS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgaW50IG1kX3RhYmxlW10gPSB7IDEsIDIsIDMsIDQsIDYsIDgsIDEyIH07CisKK3N0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCit7CisJY2xrLT5yYXRlICo9IG1kX3RhYmxlW2N0cmxfaW53KEZSUUNSKSAmIDB4MDAwN107Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDczMDBfbWFzdGVyX2Nsa19vcHMgPSB7CisJLmluaXQJCT0gbWFzdGVyX2Nsa19pbml0LAorfTsKKworc3RhdGljIHZvaWQgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpICYgMHgwMDA3KTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIG1kX3RhYmxlW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDczMDBfbW9kdWxlX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDcwMCkgPj4gODsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIG1kX3RhYmxlW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDczMDBfYnVzX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBidXNfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDA3MCkgPj4gNDsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIG1kX3RhYmxlW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDczMDBfY3B1X2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBjcHVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyAqc2g3MzAwX2Nsa19vcHNbXSA9IHsKKwkmc2g3MzAwX21hc3Rlcl9jbGtfb3BzLAorCSZzaDczMDBfbW9kdWxlX2Nsa19vcHMsCisJJnNoNzMwMF9idXNfY2xrX29wcywKKwkmc2g3MzAwX2NwdV9jbGtfb3BzLAorfTsKKwordm9pZCBfX2luaXQgYXJjaF9pbml0X2Nsa19vcHMoc3RydWN0IGNsa19vcHMgKipvcHMsIGludCBpZHgpCit7CisJaWYgKGlkeCA8IEFSUkFZX1NJWkUoc2g3MzAwX2Nsa19vcHMpKQorCQkqb3BzID0gc2g3MzAwX2Nsa19vcHNbaWR4XTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZkYmYzMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA1LmMKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA1LmMKKyAqCisgKiBTSDc3MDUgc3VwcG9ydCBmb3IgdGhlIGNsb2NrIGZyYW1ld29yaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgIFBhdWwgTXVuZHQKKyAqCisgKiBGUlFDUiBwYXJzaW5nIGhhY2tlZCBvdXQgb2YgYXJjaC9zaC9rZXJuZWwvdGltZS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSAgVGV0c3V5YSBPa2FkYSAmIE5paWJlIFl1dGFrYQorICogIENvcHlyaWdodCAoQykgMjAwMCAgUGhpbGlwcCBSdW1wZiA8cHJ1bXBmQHR1eC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDAyICBNLiBSLiBCcm93biAgPG1yYnJvd25AbGludXgtc2gub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9mcmVxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKy8qCisgKiBTSDc3MDUgdXNlcyB0aGUgc2FtZSBkaXZpc29ycyBhcyB0aGUgZ2VuZXJpYyBTSC0zIGNhc2UsIGl0J3MganVzdCB0aGUKKyAqIEZSUUNSIGxheW91dCB0aGF0IGlzIGEgYml0IGRpZmZlcmVudC4uCisgKi8KK3N0YXRpYyBpbnQgc3RjX211bHRpcGxpZXJzW10gPSB7IDEsIDIsIDMsIDQsIDYsIDEsIDEsIDEgfTsKK3N0YXRpYyBpbnQgaWZjX2Rpdmlzb3JzW10gICAgPSB7IDEsIDIsIDMsIDQsIDEsIDEsIDEsIDEgfTsKK3N0YXRpYyBpbnQgcGZjX2Rpdmlzb3JzW10gICAgPSB7IDEsIDIsIDMsIDQsIDYsIDEsIDEsIDEgfTsKKworc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2N0cmxfaW53KEZSUUNSKSAmIDB4MDAwM107Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3MDVfbWFzdGVyX2Nsa19vcHMgPSB7CisJLmluaXQJCT0gbWFzdGVyX2Nsa19pbml0LAorfTsKKworc3RhdGljIHZvaWQgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSBjdHJsX2ludyhGUlFDUikgJiAweDAwMDM7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzcwNV9tb2R1bGVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IG1vZHVsZV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpICYgMHgwMzAwKSA+PiA4OworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gc3RjX211bHRpcGxpZXJzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3MDVfYnVzX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBidXNfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDAzMCkgPj4gNDsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzA1X2NwdV9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gY3B1X2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19vcHMgKnNoNzcwNV9jbGtfb3BzW10gPSB7CisJJnNoNzcwNV9tYXN0ZXJfY2xrX29wcywKKwkmc2g3NzA1X21vZHVsZV9jbGtfb3BzLAorCSZzaDc3MDVfYnVzX2Nsa19vcHMsCisJJnNoNzcwNV9jcHVfY2xrX29wcywKK307CisKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqb3BzLCBpbnQgaWR4KQoreworCWlmIChpZHggPCBBUlJBWV9TSVpFKHNoNzcwNV9jbGtfb3BzKSkKKwkJKm9wcyA9IHNoNzcwNV9jbGtfb3BzW2lkeF07Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA5LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNDYxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwOS5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwOS5jCisgKgorICogU0g3NzA5IHN1cHBvcnQgZm9yIHRoZSBjbG9jayBmcmFtZXdvcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1ICBBbmRyaXkgU2t1bHlzaAorICoKKyAqIEJhc2VkIG9uIGFyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA1LmMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vZnJlcS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgaW50IHN0Y19tdWx0aXBsaWVyc1tdID0geyAxLCAyLCA0LCA4LCAzLCA2LCAxLCAxIH07CitzdGF0aWMgaW50IGlmY19kaXZpc29yc1tdICAgID0geyAxLCAyLCA0LCAxLCAzLCAxLCAxLCAxIH07CitzdGF0aWMgaW50IHBmY19kaXZpc29yc1tdICAgID0geyAxLCAyLCA0LCAxLCAzLCA2LCAxLCAxIH07CisKK3N0YXRpYyB2b2lkIHNldF9idXNfcGFyZW50KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlzdHJ1Y3QgY2xrICpidXNfY2xrID0gY2xrX2dldCgiYnVzX2NsayIpOworCWNsay0+cGFyZW50ID0gYnVzX2NsazsKKwljbGtfcHV0KGJ1c19jbGspOworfQorCitzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgaWR4ID0gKChmcnFjciAmIDB4MjAwMCkgPj4gMTEpIHwgKGZycWNyICYgMHgwMDAzKTsKKworCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzcwOV9tYXN0ZXJfY2xrX29wcyA9IHsKKwkuaW5pdAkJPSBtYXN0ZXJfY2xrX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOworCisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzcwOV9tb2R1bGVfY2xrX29wcyA9IHsKKyNpZmRlZiBDTE9DS19NT0RFXzBfMV8yXzcKKwkuaW5pdAkJPSBzZXRfYnVzX3BhcmVudCwKKyNlbmRpZgorCS5yZWNhbGMJCT0gbW9kdWxlX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgdm9pZCBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBpZHggPSAoZnJxY3IgJiAweDAwODApID8KKwkJKChmcnFjciAmIDB4ODAwMCkgPj4gMTMpIHwgKChmcnFjciAmIDB4MDAzMCkgPj4gNCkgOiAxOworCisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgKiBzdGNfbXVsdGlwbGllcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzcwOV9idXNfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGJ1c19jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgaWR4ID0gKChmcnFjciAmIDB4NDAwMCkgPj4gMTIpIHwgKChmcnFjciAmIDB4MDAwYykgPj4gMik7CisKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzA5X2NwdV9jbGtfb3BzID0geworCS5pbml0CQk9IHNldF9idXNfcGFyZW50LAorCS5yZWNhbGMJCT0gY3B1X2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19vcHMgKnNoNzcwOV9jbGtfb3BzW10gPSB7CisJJnNoNzcwOV9tYXN0ZXJfY2xrX29wcywKKwkmc2g3NzA5X21vZHVsZV9jbGtfb3BzLAorCSZzaDc3MDlfYnVzX2Nsa19vcHMsCisJJnNoNzcwOV9jcHVfY2xrX29wcywKK307CisKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqb3BzLCBpbnQgaWR4KQoreworCWlmIChpZHggPCBBUlJBWV9TSVpFKHNoNzcwOV9jbGtfb3BzKSkKKwkJKm9wcyA9IHNoNzcwOV9jbGtfb3BzW2lkeF07Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZQppbmRleCBlYWQxMDcxLi4zZDVjYWZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUKQEAgLTUsNiArNSwxNSBAQAogb2JqLXkJOj0gZXgubyBwcm9iZS5vCiAKIG9iai0kKENPTkZJR19TSF9GUFUpICAgICAgICAgICAgICAgICAgICArPSBmcHUubwotb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxKQkrPSBpcnFfaW50YzIubwogb2JqLSQoQ09ORklHX1NIX1NUT1JFX1FVRVVFUykJCSs9IHNxLm8KIAorIyBQcmltYXJ5IG9uLWNoaXAgY2xvY2tzIChjb21tb24pCitjbG9jay0kKENPTkZJR19DUFVfU0g0KQkJCTo9IGNsb2NrLXNoNC5vCitjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwKQk6PSBjbG9jay1zaDczMTgwLm8KK2Nsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCkJOj0gY2xvY2stc2g3NzcwLm8KK2Nsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJOj0gY2xvY2stc2g3NzgwLm8KKworIyBBZGRpdGlvbmFsIGNsb2NrcyBieSBzdWJ0eXBlCitjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyKQkrPSBjbG9jay1zaDQtMjAyLm8KKworb2JqLXkJKz0gJChjbG9jay15KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQtMjAyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmRmNWZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQtMjAyLmMKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYworICoKKyAqIEFkZGl0aW9uYWwgU0g0LTIwMiBzdXBwb3J0IGZvciB0aGUgY2xvY2sgZnJhbWV3b3JrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGFzbS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9mcmVxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgQ1BHMl9GUlFDUjMJMHhmZTBhMDAxOAorCitzdGF0aWMgaW50IGZycWNyM19kaXZpc29yc1tdID0geyAxLCAyLCAzLCA0LCA2LCA4LCAxNiB9Oworc3RhdGljIGludCBmcnFjcjNfdmFsdWVzW10gICA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiAgfTsKKworc3RhdGljIHZvaWQgZW1pX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSBjdHJsX2lubChDUEcyX0ZSUUNSMykgJiAweDAwMDc7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBmcnFjcjNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZnJxY3IzX2xvb2t1cChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlpbnQgZGl2aXNvciA9IGNsay0+cGFyZW50LT5yYXRlIC8gcmF0ZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZycWNyM19kaXZpc29ycyk7IGkrKykKKwkJaWYgKGZycWNyM19kaXZpc29yc1tpXSA9PSBkaXZpc29yKQorCQkJcmV0dXJuIGZycWNyM192YWx1ZXNbaV07CisKKwkvKiBTYWZlIGZhbGxiYWNrICovCisJcmV0dXJuIDU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDQyMDJfZW1pX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBlbWlfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoNDIwMl9lbWlfY2xrID0geworCS5uYW1lCQk9ICJlbWlfY2xrIiwKKwkuZmxhZ3MJCT0gQ0xLX0FMV0FZU19FTkFCTEVELAorCS5vcHMJCT0gJnNoNDIwMl9lbWlfY2xrX29wcywKK307CisKK3N0YXRpYyB2b2lkIGZlbWlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9IChjdHJsX2lubChDUEcyX0ZSUUNSMykgPj4gMykgJiAweDAwMDc7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBmcnFjcjNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNDIwMl9mZW1pX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBmZW1pX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzaDQyMDJfZmVtaV9jbGsgPSB7CisJLm5hbWUJCT0gImZlbWlfY2xrIiwKKwkuZmxhZ3MJCT0gQ0xLX0FMV0FZU19FTkFCTEVELAorCS5vcHMJCT0gJnNoNDIwMl9mZW1pX2Nsa19vcHMsCit9OworCitzdGF0aWMgdm9pZCBzaG9jX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaTsKKworCS8qCisJICogRm9yIHNvbWUgcmVhc29uLCB0aGUgc2hvY19jbGsgc2VlbXMgdG8gYmUgc2V0IHRvIHNvbWUgcmVhbGx5CisJICogaW5zYW5lIHZhbHVlIGF0IGJvb3QgKHZhbHVlcyBvdXRzaWRlIG9mIHRoZSBhbGxvd2FibGUgZnJlcXVlbmN5CisJICogcmFuZ2UgZm9yIGluc3RhbmNlKS4gV2UgZGVhbCB3aXRoIHRoaXMgYnkgc2NhbGluZyBpdCBiYWNrIGRvd24KKwkgKiB0byBzb21ldGhpbmcgc2Vuc2libGUganVzdCBpbiBjYXNlLgorCSAqCisJICogU3RhcnQgc2NhbGluZyBmcm9tIHRoZSBoaWdoIGVuZCBkb3duIHVudGlsIHdlIGZpbmQgc29tZXRoaW5nCisJICogdGhhdCBwYXNzZXMgcmF0ZSB2ZXJpZmljYXRpb24uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZycWNyM19kaXZpc29ycyk7IGkrKykgeworCQlpbnQgZGl2aXNvciA9IGZycWNyM19kaXZpc29yc1tpXTsKKworCQlpZiAoY2xrLT5vcHMtPnNldF9yYXRlKGNsaywgY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXZpc29yKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJV0FSTl9PTihpID09IEFSUkFZX1NJWkUoZnJxY3IzX2Rpdmlzb3JzKSk7CS8qIFVuZGVmaW5lZCBjbG9jayAqLworfQorCitzdGF0aWMgdm9pZCBzaG9jX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbmwoQ1BHMl9GUlFDUjMpID4+IDYpICYgMHgwMDA3OworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZnJxY3IzX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBpbnQgc2hvY19jbGtfdmVyaWZ5X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJc3RydWN0IGNsayAqYmNsayA9IGNsa19nZXQoImJ1c19jbGsiKTsKKwl1bnNpZ25lZCBsb25nIGJjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShiY2xrKTsKKworCWNsa19wdXQoYmNsayk7CisKKwlpZiAocmF0ZSA+IGJjbGtfcmF0ZSkKKwkJcmV0dXJuIDE7CisJaWYgKHJhdGUgPiA2NjAwMDAwMCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG9jX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZycWNyMzsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyogTWFrZSBzdXJlIHdlIGhhdmUgc29tZXRoaW5nIHNlbnNpYmxlIHRvIHN3aXRjaCB0byAqLworCWlmIChzaG9jX2Nsa192ZXJpZnlfcmF0ZShjbGssIHJhdGUpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdG1wID0gZnJxY3IzX2xvb2t1cChjbGssIHJhdGUpOworCisJZnJxY3IzID0gY3RybF9pbmwoQ1BHMl9GUlFDUjMpOworCWZycWNyMyAmPSB+KDB4MDAwNyA8PCA2KTsKKwlmcnFjcjMgfD0gdG1wIDw8IDY7CisJY3RybF9vdXRsKGZycWNyMywgQ1BHMl9GUlFDUjMpOworCisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBmcnFjcjNfZGl2aXNvcnNbdG1wXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g0MjAyX3Nob2NfY2xrX29wcyA9IHsKKwkuaW5pdAkJPSBzaG9jX2Nsa19pbml0LAorCS5yZWNhbGMJCT0gc2hvY19jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZQk9IHNob2NfY2xrX3NldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2g0MjAyX3Nob2NfY2xrID0geworCS5uYW1lCQk9ICJzaG9jX2NsayIsCisJLmZsYWdzCQk9IENMS19BTFdBWVNfRU5BQkxFRCwKKwkub3BzCQk9ICZzaDQyMDJfc2hvY19jbGtfb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKnNoNDIwMl9vbmNoaXBfY2xvY2tzW10gPSB7CisJJnNoNDIwMl9lbWlfY2xrLAorCSZzaDQyMDJfZmVtaV9jbGssCisJJnNoNDIwMl9zaG9jX2NsaywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNDIwMl9jbGtfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNsayA9IGNsa19nZXQoIm1hc3Rlcl9jbGsiKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNoNDIwMl9vbmNoaXBfY2xvY2tzKTsgaSsrKSB7CisJCXN0cnVjdCBjbGsgKmNsa3AgPSBzaDQyMDJfb25jaGlwX2Nsb2Nrc1tpXTsKKworCQljbGtwLT5wYXJlbnQgPSBjbGs7CisJCWNsa19yZWdpc3RlcihjbGtwKTsKKwkJY2xrX2VuYWJsZShjbGtwKTsKKwl9CisKKwkvKgorCSAqIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHJlc3Qgb2YgdGhlIGNsb2NrcyByZWdpc3RlcmVkLCB3ZSBuZWVkIHRvCisJICogZm9yY2UgdGhlIHBhcmVudCBjbG9jayB0byBwcm9wYWdhdGUgc28gdGhhdCB0aGVzZSBjbG9ja3Mgd2lsbAorCSAqIGF1dG9tYXRpY2FsbHkgZmlndXJlIG91dCB0aGVpciByYXRlLiBXZSBjaGVhdCBieSBoYW5kaW5nIHRoZQorCSAqIHBhcmVudCBjbG9jayBpdHMgY3VycmVudCByYXRlIGFuZCBmb3JjaW5nIGNoaWxkIHByb3BhZ2F0aW9uLgorCSAqLworCWNsa19zZXRfcmF0ZShjbGssIGNsa19nZXRfcmF0ZShjbGspKTsKKworCWNsa19wdXQoY2xrKTsKKworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKHNoNDIwMl9jbGtfaW5pdCk7CisKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYTlmODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC5jCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC5jCisgKgorICogR2VuZXJpYyBTSC00IHN1cHBvcnQgZm9yIHRoZSBjbG9jayBmcmFtZXdvcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1ICBQYXVsIE11bmR0CisgKgorICogRlJRQ1IgcGFyc2luZyBoYWNrZWQgb3V0IG9mIGFyY2gvc2gva2VybmVsL3RpbWUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgIFRldHN1eWEgT2thZGEgJiBOaWliZSBZdXRha2EKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgIFBoaWxpcHAgUnVtcGYgPHBydW1wZkB0dXgub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwMiAgTS4gUi4gQnJvd24gIDxtcmJyb3duQGxpbnV4LXNoLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vZnJlcS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgaW50IGlmY19kaXZpc29yc1tdID0geyAxLCAyLCAzLCA0LCA2LCA4LCAxLCAxIH07CisjZGVmaW5lIGJmY19kaXZpc29ycyBpZmNfZGl2aXNvcnMJLyogU2FtZSAqLworc3RhdGljIGludCBwZmNfZGl2aXNvcnNbXSA9IHsgMiwgMywgNCwgNiwgOCwgMiwgMiwgMiB9OworCitzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbY3RybF9pbncoRlJRQ1IpICYgMHgwMDA3XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNF9tYXN0ZXJfY2xrX29wcyA9IHsKKwkuaW5pdAkJPSBtYXN0ZXJfY2xrX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9IChjdHJsX2ludyhGUlFDUikgJiAweDAwMDcpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDRfbW9kdWxlX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSA+PiAzKSAmIDB4MDAwNzsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g0X2J1c19jbGtfb3BzID0geworCS5yZWNhbGMJCT0gYnVzX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgdm9pZCBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9IChjdHJsX2ludyhGUlFDUikgPj4gNikgJiAweDAwMDc7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNF9jcHVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGNwdV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzICpzaDRfY2xrX29wc1tdID0geworCSZzaDRfbWFzdGVyX2Nsa19vcHMsCisJJnNoNF9tb2R1bGVfY2xrX29wcywKKwkmc2g0X2J1c19jbGtfb3BzLAorCSZzaDRfY3B1X2Nsa19vcHMsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2luaXRfY2xrX29wcyhzdHJ1Y3QgY2xrX29wcyAqKm9wcywgaW50IGlkeCkKK3sKKwlpZiAoaWR4IDwgQVJSQVlfU0laRShzaDRfY2xrX29wcykpCisJCSpvcHMgPSBzaDRfY2xrX29wc1tpZHhdOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNzMxODAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g3MzE4MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTVjYjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNzMxODAuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDczMTgwLmMKKyAqCisgKiBTSDczMTgwIHN1cHBvcnQgZm9yIHRoZSBjbG9jayBmcmFtZXdvcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1ICBQYXVsIE11bmR0CisgKgorICogRlJRQ1IgcGFyc2luZyBoYWNrZWQgb3V0IG9mIGFyY2gvc2gva2VybmVsL3RpbWUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgIFRldHN1eWEgT2thZGEgJiBOaWliZSBZdXRha2EKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgIFBoaWxpcHAgUnVtcGYgPHBydW1wZkB0dXgub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwMiAgTS4gUi4gQnJvd24gIDxtcmJyb3duQGxpbnV4LXNoLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vZnJlcS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKgorICogU0g3MzE4MCB1c2VzIGEgY29tbW9uIHNldCBvZiBkaXZpc29ycywgc28gdGhpcyBpcyBxdWl0ZSBzaW1wbGUuLgorICovCitzdGF0aWMgaW50IGRpdmlzb3JzW10gPSB7IDEsIDIsIDMsIDQsIDYsIDgsIDEyLCAxNiB9OworCitzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCWNsay0+cmF0ZSAqPSBkaXZpc29yc1tjdHJsX2lubChGUlFDUikgJiAweDAwMDddOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3MzE4MF9tYXN0ZXJfY2xrX29wcyA9IHsKKwkuaW5pdAkJPSBtYXN0ZXJfY2xrX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgJiAweDAwMDcpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzMxODBfbW9kdWxlX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW5sKEZSUUNSKSA+PiAxMikgJiAweDAwMDc7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3MzE4MF9idXNfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGJ1c19jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbmwoRlJRQ1IpID4+IDIwKSAmIDB4MDAwNzsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDczMTgwX2NwdV9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gY3B1X2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19vcHMgKnNoNzMxODBfY2xrX29wc1tdID0geworCSZzaDczMTgwX21hc3Rlcl9jbGtfb3BzLAorCSZzaDczMTgwX21vZHVsZV9jbGtfb3BzLAorCSZzaDczMTgwX2J1c19jbGtfb3BzLAorCSZzaDczMTgwX2NwdV9jbGtfb3BzLAorfTsKKwordm9pZCBfX2luaXQgYXJjaF9pbml0X2Nsa19vcHMoc3RydWN0IGNsa19vcHMgKipvcHMsIGludCBpZHgpCit7CisJaWYgKGlkeCA8IEFSUkFZX1NJWkUoc2g3MzE4MF9jbGtfb3BzKSkKKwkJKm9wcyA9IHNoNzMxODBfY2xrX29wc1tpZHhdOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNzc3MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDc3NzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODY5NGJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDc3NzAuYwpAQCAtMCwwICsxLDczIEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDc3NzAuYworICoKKyAqIFNINzc3MCBzdXBwb3J0IGZvciB0aGUgY2xvY2sgZnJhbWV3b3JrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9mcmVxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyBpbnQgaWZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKK3N0YXRpYyBpbnQgYmZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDEsIDEsIDEsIDgsMTIsIDEgfTsKK3N0YXRpYyBpbnQgcGZjX2Rpdmlzb3JzW10gPSB7IDEsIDgsIDEsMTAsMTIsMTYsIDEsIDEgfTsKKworc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzWyhjdHJsX2lubChGUlFDUikgPj4gMjgpICYgMHgwMDBmXTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc3MF9tYXN0ZXJfY2xrX29wcyA9IHsKKwkuaW5pdAkJPSBtYXN0ZXJfY2xrX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDI4KSAmIDB4MDAwZik7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc3MF9tb2R1bGVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IG1vZHVsZV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbmwoRlJRQ1IpICYgMHgwMDBmKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzcwX2J1c19jbGtfb3BzID0geworCS5yZWNhbGMJCT0gYnVzX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgdm9pZCBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDI0KSAmIDB4MDAwZik7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc3MF9jcHVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGNwdV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzICpzaDc3NzBfY2xrX29wc1tdID0geworCSZzaDc3NzBfbWFzdGVyX2Nsa19vcHMsCisJJnNoNzc3MF9tb2R1bGVfY2xrX29wcywKKwkmc2g3NzcwX2J1c19jbGtfb3BzLAorCSZzaDc3NzBfY3B1X2Nsa19vcHMsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2luaXRfY2xrX29wcyhzdHJ1Y3QgY2xrX29wcyAqKm9wcywgaW50IGlkeCkKK3sKKwlpZiAoaWR4IDwgQVJSQVlfU0laRShzaDc3NzBfY2xrX29wcykpCisJCSpvcHMgPSBzaDc3NzBfY2xrX29wc1tpZHhdOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDc3ODAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2FkMzY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDc3ODAuYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g3NzgwLmMKKyAqCisgKiBTSDc3ODAgc3VwcG9ydCBmb3IgdGhlIGNsb2NrIGZyYW1ld29yaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vZnJlcS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgaW50IGlmY19kaXZpc29yc1tdID0geyAyLCA0IH07CitzdGF0aWMgaW50IGJmY19kaXZpc29yc1tdID0geyAxLCAxLCAxLCA4LCAxMiwgMTYsIDI0LCAxIH07CitzdGF0aWMgaW50IHBmY19kaXZpc29yc1tdID0geyAxLCAyNCwgMjQsIDEgfTsKK3N0YXRpYyBpbnQgY2ZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDQsIDEsIDYsIDEsIDEsIDEgfTsKKworc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2N0cmxfaW5sKEZSUUNSKSAmIDB4MDAwM107Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODBfbWFzdGVyX2Nsa19vcHMgPSB7CisJLmluaXQJCT0gbWFzdGVyX2Nsa19pbml0LAorfTsKKworc3RhdGljIHZvaWQgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbmwoRlJRQ1IpICYgMHgwMDAzKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzgwX21vZHVsZV9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gbW9kdWxlX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgdm9pZCBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDE2KSAmIDB4MDAwNyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4MF9idXNfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGJ1c19jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiAyNCkgJiAweDAwMDEpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODBfY3B1X2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBjcHVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyAqc2g3NzgwX2Nsa19vcHNbXSA9IHsKKwkmc2g3NzgwX21hc3Rlcl9jbGtfb3BzLAorCSZzaDc3ODBfbW9kdWxlX2Nsa19vcHMsCisJJnNoNzc4MF9idXNfY2xrX29wcywKKwkmc2g3NzgwX2NwdV9jbGtfb3BzLAorfTsKKwordm9pZCBfX2luaXQgYXJjaF9pbml0X2Nsa19vcHMoc3RydWN0IGNsa19vcHMgKipvcHMsIGludCBpZHgpCit7CisJaWYgKGlkeCA8IEFSUkFZX1NJWkUoc2g3NzgwX2Nsa19vcHMpKQorCQkqb3BzID0gc2g3NzgwX2Nsa19vcHNbaWR4XTsKK30KKworc3RhdGljIHZvaWQgc2h5d2F5X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiAyMCkgJiAweDAwMDcpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gY2ZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODBfc2h5d2F5X2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBzaHl3YXlfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoNzc4MF9zaHl3YXlfY2xrID0geworCS5uYW1lCQk9ICJzaHl3YXlfY2xrIiwKKwkuZmxhZ3MJCT0gQ0xLX0FMV0FZU19FTkFCTEVELAorCS5vcHMJCT0gJnNoNzc4MF9zaHl3YXlfY2xrX29wcywKK307CisKKy8qCisgKiBBZGRpdGlvbmFsIFNINzc4MC1zcGVjaWZpYyBvbi1jaGlwIGNsb2NrcyB0aGF0IGFyZW4ndCBhbHJlYWR5IHBhcnQgb2YgdGhlCisgKiBjbG9jayBmcmFtZXdvcmsKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgKnNoNzc4MF9vbmNoaXBfY2xvY2tzW10gPSB7CisJJnNoNzc4MF9zaHl3YXlfY2xrLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2g3NzgwX2Nsa19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrID0gY2xrX2dldCgibWFzdGVyX2NsayIpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2g3NzgwX29uY2hpcF9jbG9ja3MpOyBpKyspIHsKKwkJc3RydWN0IGNsayAqY2xrcCA9IHNoNzc4MF9vbmNoaXBfY2xvY2tzW2ldOworCisJCWNsa3AtPnBhcmVudCA9IGNsazsKKwkJY2xrX3JlZ2lzdGVyKGNsa3ApOworCQljbGtfZW5hYmxlKGNsa3ApOworCX0KKworCS8qCisJICogTm93IHRoYXQgd2UgaGF2ZSB0aGUgcmVzdCBvZiB0aGUgY2xvY2tzIHJlZ2lzdGVyZWQsIHdlIG5lZWQgdG8KKwkgKiBmb3JjZSB0aGUgcGFyZW50IGNsb2NrIHRvIHByb3BhZ2F0ZSBzbyB0aGF0IHRoZXNlIGNsb2NrcyB3aWxsCisJICogYXV0b21hdGljYWxseSBmaWd1cmUgb3V0IHRoZWlyIHJhdGUuIFdlIGNoZWF0IGJ5IGhhbmRpbmcgdGhlCisJICogcGFyZW50IGNsb2NrIGl0cyBjdXJyZW50IHJhdGUgYW5kIGZvcmNpbmcgY2hpbGQgcHJvcGFnYXRpb24uCisJICovCisJY2xrX3NldF9yYXRlKGNsaywgY2xrX2dldF9yYXRlKGNsaykpOworCisJY2xrX3B1dChjbGspOworCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoc2g3NzgwX2Nsa19pbml0KTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9pcnFfaW50YzIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvaXJxX2ludGMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YjE2YmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9pcnFfaW50YzIuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9zaC9rZXJuZWwvaXJxX2ludGMyLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgRGF2aWQgSi4gTWNrYXkgKGRhdmlkLm1ja2F5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICoKLSAqIEludGVycnVwdCBoYW5kbGluZyBmb3IgSU5UQzItYmFzZWQgSVJRLgotICoKLSAqIFRoZXNlIGFyZSB0aGUgIm5ldyBIaXRhY2hpIHN0eWxlIiBpbnRlcnJ1cHRzLCBhcyBwcmVzZW50IG9uIHRoZSAKLSAqIEhpdGFjaGkgNzc1MSBhbmQgdGhlIFNUTSBTVDQwIFNUQjEuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotCi0KLXN0cnVjdCBpbnRjMl9kYXRhIHsKLQl1bnNpZ25lZCBjaGFyIG1za19vZmZzZXQ7Ci0JdW5zaWduZWQgY2hhciBtc2tfc2hpZnQ7Ci0jaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDAKLQlpbnQgKCpjbGVhcl9pcnEpIChpbnQpOwotI2VuZGlmCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3QgaW50YzJfZGF0YSBpbnRjMl9kYXRhW05SX0lOVEMyX0lSUVNdOwotCi1zdGF0aWMgdm9pZCBlbmFibGVfaW50YzJfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotc3RhdGljIHZvaWQgZGlzYWJsZV9pbnRjMl9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLS8qIHNodXRkb3duIGlzIHNhbWUgYXMgImRpc2FibGUiICovCi0jZGVmaW5lIHNodXRkb3duX2ludGMyX2lycSBkaXNhYmxlX2ludGMyX2lycQotCi1zdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfaW50YzIodW5zaWduZWQgaW50KTsKLXN0YXRpYyB2b2lkIGVuZF9pbnRjMl9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9pbnRjMl9pcnEodW5zaWduZWQgaW50IGlycSkKLXsgCi0JZW5hYmxlX2ludGMyX2lycShpcnEpOwotCXJldHVybiAwOyAvKiBuZXZlciBhbnl0aGluZyBwZW5kaW5nICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgaW50YzJfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gIklOVEMyLUlSUSIsCi0JLnN0YXJ0dXAgPSBzdGFydHVwX2ludGMyX2lycSwKLQkuc2h1dGRvd24gPSBzaHV0ZG93bl9pbnRjMl9pcnEsCi0JLmVuYWJsZSA9IGVuYWJsZV9pbnRjMl9pcnEsCi0JLmRpc2FibGUgPSBkaXNhYmxlX2ludGMyX2lycSwKLQkuYWNrID0gbWFza19hbmRfYWNrX2ludGMyLAotCS5lbmQgPSBlbmRfaW50YzJfaXJxCi19OwotCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2ludGMyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBpcnFfb2Zmc2V0ID0gaXJxIC0gSU5UQzJfRklSU1RfSVJROwotCWludCBtc2tfc2hpZnQsIG1za19vZmZzZXQ7Ci0KLQkvLyBTYW5pdHkgY2hlY2sKLQlpZigoaXJxX29mZnNldDwwKSB8fCAoaXJxX29mZnNldD49TlJfSU5UQzJfSVJRUykpCi0JCXJldHVybjsKLQotCW1za19zaGlmdCA9IGludGMyX2RhdGFbaXJxX29mZnNldF0ubXNrX3NoaWZ0OwotCW1za19vZmZzZXQgPSBpbnRjMl9kYXRhW2lycV9vZmZzZXRdLm1za19vZmZzZXQ7Ci0KLQljdHJsX291dGwoMTw8bXNrX3NoaWZ0LAotCQkgIElOVEMyX0JBU0UrSU5UQzJfSU5UTVNLX09GRlNFVCttc2tfb2Zmc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgZW5hYmxlX2ludGMyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBpcnFfb2Zmc2V0ID0gaXJxIC0gSU5UQzJfRklSU1RfSVJROwotCWludCBtc2tfc2hpZnQsIG1za19vZmZzZXQ7Ci0KLQkvKiBTYW5pdHkgY2hlY2sgKi8KLQlpZigoaXJxX29mZnNldDwwKSB8fCAoaXJxX29mZnNldD49TlJfSU5UQzJfSVJRUykpCi0JCXJldHVybjsKLQotCW1za19zaGlmdCA9IGludGMyX2RhdGFbaXJxX29mZnNldF0ubXNrX3NoaWZ0OwotCW1za19vZmZzZXQgPSBpbnRjMl9kYXRhW2lycV9vZmZzZXRdLm1za19vZmZzZXQ7Ci0KLQljdHJsX291dGwoMTw8bXNrX3NoaWZ0LAotCQkgIElOVEMyX0JBU0UrSU5UQzJfSU5UTVNLQ0xSX09GRlNFVCttc2tfb2Zmc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX2ludGMyKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZGlzYWJsZV9pbnRjMl9pcnEoaXJxKTsKLX0KLQotc3RhdGljIHZvaWQgZW5kX2ludGMyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRHxJUlFfSU5QUk9HUkVTUykpKQotCQllbmFibGVfaW50YzJfaXJxKGlycSk7Ci0KLSNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MAotCWlmIChpbnRjMl9kYXRhW2lycSAtIElOVEMyX0ZJUlNUX0lSUV0uY2xlYXJfaXJxKQotCQlpbnRjMl9kYXRhW2lycSAtIElOVEMyX0ZJUlNUX0lSUV0uY2xlYXJfaXJxIChpcnEpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBTZXR1cCBhbiBJTlRDMiBzdHlsZSBpbnRlcnJ1cHQuCi0gKiBOT1RFOiBVbmxpa2UgSVBSIGludGVycnVwdHMsIHBhcmFtZXRlcnMgYXJlIG5vdCBzaGlmdGVkIGJ5IHRoaXMgY29kZSwKLSAqIGFsbG93aW5nIHRoZSB1c2Ugb2YgdGhlIG51bWJlcnMgc3RyYWlnaHQgb3V0IG9mIHRoZSBkYXRhc2hlZXQuCi0gKiBGb3IgZXhhbXBsZToKLSAqICAgIFBJTzEgd2hpY2ggaXMgSU5UUFJJMDBbMTksMTZdIGFuZCBJTlRNU0swMFsxM10KLSAqIHdvdWxkIGJlOiAgICAgICAgICAgICAgIF4gICAgIF4gICAgICAgICAgICAgXiAgXgotICogICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICB8ICB8Ci0gKiAgICBtYWtlX2ludGMyX2lycSg4NCwgICAwLCAgIDE2LCAgICAgICAgICAgIDAsIDEzKTsKLSAqLwotdm9pZCBtYWtlX2ludGMyX2lycSh1bnNpZ25lZCBpbnQgaXJxLAotCQkgICAgdW5zaWduZWQgaW50IGlwcl9vZmZzZXQsIHVuc2lnbmVkIGludCBpcHJfc2hpZnQsCi0JCSAgICB1bnNpZ25lZCBpbnQgbXNrX29mZnNldCwgdW5zaWduZWQgaW50IG1za19zaGlmdCwKLQkJICAgIHVuc2lnbmVkIGludCBwcmlvcml0eSkKLXsKLQlpbnQgaXJxX29mZnNldCA9IGlycSAtIElOVEMyX0ZJUlNUX0lSUTsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBpcHI7Ci0KLQlpZigoaXJxX29mZnNldDwwKSB8fCAoaXJxX29mZnNldD49TlJfSU5UQzJfSVJRUykpCi0JCXJldHVybjsKLQotCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwotCi0JLyogRmlsbCB0aGUgZGF0YSB3ZSBuZWVkICovCi0JaW50YzJfZGF0YVtpcnFfb2Zmc2V0XS5tc2tfb2Zmc2V0ID0gbXNrX29mZnNldDsKLQlpbnRjMl9kYXRhW2lycV9vZmZzZXRdLm1za19zaGlmdCAgPSBtc2tfc2hpZnQ7Ci0jaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDAKLQlpbnRjMl9kYXRhW2lycV9vZmZzZXRdLmNsZWFyX2lycSA9IE5VTEw7Ci0jZW5kaWYKLQkJCi0JLyogU2V0IHRoZSBwcmlvcml0eSBsZXZlbCAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWlwcj1jdHJsX2lubChJTlRDMl9CQVNFK0lOVEMyX0lOVFBSSV9PRkZTRVQraXByX29mZnNldCk7Ci0JaXByJj1+KDB4Zjw8aXByX3NoaWZ0KTsKLQlpcHJ8PShwcmlvcml0eSk8PGlwcl9zaGlmdDsKLQljdHJsX291dGwoaXByLCBJTlRDMl9CQVNFK0lOVEMyX0lOVFBSSV9PRkZTRVQraXByX29mZnNldCk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXI9JmludGMyX2lycV90eXBlOwotCi0JZGlzYWJsZV9pbnRjMl9pcnEoaXJxKTsKLX0KLQotI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwCi0KLXN0cnVjdCBpbnRjMl9pbml0IHsKLQl1bnNpZ25lZCBzaG9ydCBpcnE7Ci0JdW5zaWduZWQgY2hhciBpcHJfb2Zmc2V0LCBpcHJfc2hpZnQ7Ci0JdW5zaWduZWQgY2hhciBtc2tfb2Zmc2V0LCBtc2tfc2hpZnQ7Ci19OwotCi1zdGF0aWMgc3RydWN0IGludGMyX2luaXQgaW50YzJfaW5pdF9kYXRhW10gIF9faW5pdGRhdGEgPSB7Ci0JezY0LCAgMCwgIDAsIDAsICAwfSwJLyogUENJIHNlcnIgKi8KLQl7NjUsICAwLCAgNCwgMCwgIDF9LAkvKiBQQ0kgZXJyICovCi0JezY2LCAgMCwgIDQsIDAsICAyfSwJLyogUENJIGFkICovCi0JezY3LCAgMCwgIDQsIDAsICAzfSwJLyogUENJIHB3ZCBkb3duICovCi0JezcyLCAgMCwgIDgsIDAsICA1fSwJLyogRE1BQyBJTlQwICovCi0JezczLCAgMCwgIDgsIDAsICA2fSwJLyogRE1BQyBJTlQxICovCi0Jezc0LCAgMCwgIDgsIDAsICA3fSwJLyogRE1BQyBJTlQyICovCi0Jezc1LCAgMCwgIDgsIDAsICA4fSwJLyogRE1BQyBJTlQzICovCi0Jezc2LCAgMCwgIDgsIDAsICA5fSwJLyogRE1BQyBJTlQ0ICovCi0Jezc4LCAgMCwgIDgsIDAsIDExfSwJLyogRE1BQyBFUlIgKi8KLQl7ODAsICAwLCAxMiwgMCwgMTJ9LAkvKiBQSU8wICovCi0Jezg0LCAgMCwgMTYsIDAsIDEzfSwJLyogUElPMSAqLwotCXs4OCwgIDAsIDIwLCAwLCAxNH0sCS8qIFBJTzIgKi8KLQl7MTEyLCA0LCAgMCwgNCwgIDB9LAkvKiBNYWlsYm94ICovCi0jaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBHWDEKLQl7MTE2LCA0LCAgNCwgNCwgIDR9LAkvKiBTU0MwICovCi0JezEyMCwgNCwgIDgsIDQsICA4fSwJLyogSVIgQmxhc3RlciAqLwotCXsxMjQsIDQsIDEyLCA0LCAxMn0sCS8qIFVTQiBob3N0ICovCi0JezEyOCwgNCwgMTYsIDQsIDE2fSwJLyogVmlkZW8gcHJvY2Vzc29yIEJMSVRURVIgKi8KLQl7MTMyLCA0LCAyMCwgNCwgMjB9LAkvKiBVQVJUMCAqLwotCXsxMzQsIDQsIDIwLCA0LCAyMn0sCS8qIFVBUlQyICovCi0JezEzNiwgNCwgMjQsIDQsIDI0fSwJLyogSU9fUElPMCAqLwotCXsxNDAsIDQsIDI4LCA0LCAyOH0sCS8qIEVNUEkgKi8KLQl7MTQ0LCA4LCAgMCwgOCwgIDB9LAkvKiBNQUZFICovCi0JezE0OCwgOCwgIDQsIDgsICA0fSwJLyogUFdNICovCi0JezE1MiwgOCwgIDgsIDgsICA4fSwJLyogU1NDMSAqLwotCXsxNTYsIDgsIDEyLCA4LCAxMn0sCS8qIElPX1BJTzEgKi8KLQl7MTYwLCA4LCAxNiwgOCwgMTZ9LAkvKiBVU0IgdGFyZ2V0ICovCi0JezE2NCwgOCwgMjAsIDgsIDIwfSwJLyogVUFSVDEgKi8KLQl7MTY4LCA4LCAyNCwgOCwgMjR9LAkvKiBUZWxldGV4dCAqLwotCXsxNzIsIDgsIDI4LCA4LCAyOH0sCS8qIFZpZGVvU3luYyBWVEcgKi8KLQl7MTczLCA4LCAyOCwgOCwgMjl9LAkvKiBWaWRlb1N5bmMgRFZQMCAqLwotCXsxNzQsIDgsIDI4LCA4LCAzMH0sCS8qIFZpZGVvU3luYyBEVlAxICovCi0jZW5kaWYKLX07Ci0KLXZvaWQgX19pbml0IGluaXRfSVJRX2ludGMyKHZvaWQpCi17Ci0Jc3RydWN0IGludGMyX2luaXQgKnA7Ci0KLQlwcmludGsoS0VSTl9BTEVSVCAiaW5pdF9JUlFfaW50YzJcbiIpOwotCi0JZm9yIChwID0gaW50YzJfaW5pdF9kYXRhOwotCSAgICAgcDxpbnRjMl9pbml0X2RhdGErQVJSQVlfU0laRShpbnRjMl9pbml0X2RhdGEpOwotCSAgICAgcCsrKSB7Ci0JCW1ha2VfaW50YzJfaXJxKHAtPmlycSwgcC0+aXByX29mZnNldCwgcC0+aXByX3NoaWZ0LAotCQkJICAgICAgIHAtPiBtc2tfb2Zmc2V0LCBwLT5tc2tfc2hpZnQsIDEzKTsKLQl9Ci19Ci0KLS8qIEFkZHMgYSB0ZXJtaW5hdGlvbiBjYWxsYmFjayB0byB0aGUgaW50ZXJydXB0ICovCi12b2lkIGludGMyX2FkZF9jbGVhcl9pcnEoaW50IGlycSwgaW50ICgqZm4pKGludCkpCi17Ci0JaWYgKGlycSA8IElOVEMyX0ZJUlNUX0lSUSkKLQkJcmV0dXJuOwotCi0JaW50YzJfZGF0YVtpcnEgLSBJTlRDMl9GSVJTVF9JUlFdLmNsZWFyX2lycSA9IGZuOwotfQotCi0jZW5kaWYgLyogQ09ORklHX0NQVV9TVUJUWVBFX1NUNDAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lvLmMgYi9hcmNoL3NoL2tlcm5lbC9pby5jCmluZGV4IGQ5OTMyZjIuLjcxYzlmZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaW8uYwpAQCAtMiw1OCArMiw3MyBAQAogICogbGludXgvYXJjaC9zaC9rZXJuZWwvaW8uYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwMCAgU3R1YXJ0IE1lbmVmeQorICogQ29weXJpZ2h0IChDKSAyMDA1ICBQYXVsIE11bmR0CiAgKgogICogUHJvdmlkZSByZWFsIGZ1bmN0aW9ucyB3aGljaCBleHBhbmQgdG8gd2hhdGV2ZXIgdGhlIGhlYWRlciBmaWxlIGRlZmluZWQuCiAgKiBBbHNvIGRlZmluaXRpb25zIG9mIG1hY2hpbmUgaW5kZXBlbmRlbnQgSU8gZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCi0KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogCiAvKgogICogQ29weSBkYXRhIGZyb20gSU8gbWVtb3J5IHNwYWNlIHRvICJyZWFsIiBtZW1vcnkgc3BhY2UuCiAgKiBUaGlzIG5lZWRzIHRvIGJlIG9wdGltaXplZC4KICAqLwotdm9pZCAgbWVtY3B5X2Zyb21pbyh2b2lkICogdG8sIHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3ZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICp0bywgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpmcm9tLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewogCWNoYXIgKnAgPSB0bzsKICAgICAgICAgd2hpbGUgKGNvdW50KSB7CiAgICAgICAgICAgICAgICAgY291bnQtLTsKLSAgICAgICAgICAgICAgICAqcCA9IHJlYWRiKGZyb20pOworICAgICAgICAgICAgICAgICpwID0gcmVhZGIoKHZvaWQgX19pb21lbSAqKWZyb20pOwogICAgICAgICAgICAgICAgIHArKzsKICAgICAgICAgICAgICAgICBmcm9tKys7CiAgICAgICAgIH0KIH0KLSAKK0VYUE9SVF9TWU1CT0wobWVtY3B5X2Zyb21pbyk7CisKIC8qCiAgKiBDb3B5IGRhdGEgZnJvbSAicmVhbCIgbWVtb3J5IHNwYWNlIHRvIElPIG1lbW9yeSBzcGFjZS4KICAqIFRoaXMgbmVlZHMgdG8gYmUgb3B0aW1pemVkLgogICovCi12b2lkICBtZW1jcHlfdG9pbyh1bnNpZ25lZCBsb25nIHRvLCBjb25zdCB2b2lkICogZnJvbSwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3ZvaWQgbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKIAljb25zdCBjaGFyICpwID0gZnJvbTsKICAgICAgICAgd2hpbGUgKGNvdW50KSB7CiAgICAgICAgICAgICAgICAgY291bnQtLTsKLSAgICAgICAgICAgICAgICB3cml0ZWIoKnAsIHRvKTsKKyAgICAgICAgICAgICAgICB3cml0ZWIoKnAsICh2b2lkIF9faW9tZW0gKil0byk7CiAgICAgICAgICAgICAgICAgcCsrOwogICAgICAgICAgICAgICAgIHRvKys7CiAgICAgICAgIH0KIH0KLSAKK0VYUE9SVF9TWU1CT0wobWVtY3B5X3RvaW8pOworCiAvKgogICogIm1lbXNldCIgb24gSU8gbWVtb3J5IHNwYWNlLgogICogVGhpcyBuZWVkcyB0byBiZSBvcHRpbWl6ZWQuCiAgKi8KLXZvaWQgIG1lbXNldF9pbyh1bnNpZ25lZCBsb25nIGRzdCwgaW50IGMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit2b2lkIG1lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRzdCwgaW50IGMsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAgICAgICAgIHdoaWxlIChjb3VudCkgewogICAgICAgICAgICAgICAgIGNvdW50LS07Ci0gICAgICAgICAgICAgICAgd3JpdGViKGMsIGRzdCk7CisgICAgICAgICAgICAgICAgd3JpdGViKGMsICh2b2lkIF9faW9tZW0gKilkc3QpOwogICAgICAgICAgICAgICAgIGRzdCsrOwogICAgICAgICB9CiB9Ci0KLUVYUE9SVF9TWU1CT0wobWVtY3B5X2Zyb21pbyk7Ci1FWFBPUlRfU1lNQk9MKG1lbWNweV90b2lvKTsKIEVYUE9SVF9TWU1CT0wobWVtc2V0X2lvKTsKIAordm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKQoreworCXJldHVybiBzaF9tdi5tdl9pb3BvcnRfbWFwKHBvcnQsIG5yKTsKK30KK0VYUE9SVF9TWU1CT0woaW9wb3J0X21hcCk7CisKK3ZvaWQgaW9wb3J0X3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlzaF9tdi5tdl9pb3BvcnRfdW5tYXAoYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MKGlvcG9ydF91bm1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMgYi9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMKaW5kZXggYTkxMWIwMS4uMjhlYzc0OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYwpAQCAtMyw2ICszLDcgQEAKICAqIGxpbnV4L2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwMCAgTmlpYmUgWXV0YWthCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgIFBhdWwgTXVuZHQKICAqCiAgKiBHZW5lcmljIEkvTyByb3V0aW5lLiBUaGVzZSBjYW4gYmUgdXNlZCB3aGVyZSBhIG1hY2hpbmUgc3BlY2lmaWMgdmVyc2lvbgogICogaXMgbm90IHJlcXVpcmVkLgpAQCAtMTAsMjEgKzExLDIwIEBACiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCiAgKi8KLQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKQorI2lmZGVmIENPTkZJR19DUFVfU0gzCisvKiBTSDMgaGFzIGEgUENNQ0lBIGJ1ZyB0aGF0IG5lZWRzIGEgZHVtbXkgcmVhZCBmcm9tIGFyZWEgNiBmb3IgYQorICogd29ya2Fyb3VuZC4gKi8KIC8qIEknbSBub3Qgc3VyZSBTSDc3MDkgaGFzIHRoaXMga2luZCBvZiBidWcgKi8KLSNkZWZpbmUgU0gzX1BDTUNJQV9CVUdfV09SS0FST1VORCAxCi0jZGVmaW5lIERVTU1ZX1JFQURfQVJFQTYJICAweGJhMDAwMDAwCisjZGVmaW5lIGR1bW15X3JlYWQoKQljdHJsX2luYigweGJhMDAwMDAwKQorI2Vsc2UKKyNkZWZpbmUgZHVtbXlfcmVhZCgpCiAjZW5kaWYKIAotI2RlZmluZSBQT1JUMkFERFIoeCkgKHNoX212Lm12X2lzYV9wb3J0MmFkZHIoeCkpCi0KIHVuc2lnbmVkIGxvbmcgZ2VuZXJpY19pb19iYXNlOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVsYXkodm9pZCkKQEAgLTMyLDQwICszMiw0MCBAQAogCWN0cmxfaW53KDB4YTAwMDAwMDApOwogfQogCi11bnNpZ25lZCBjaGFyIGdlbmVyaWNfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3U4IGdlbmVyaWNfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKilQT1JUMkFERFIocG9ydCk7CisJcmV0dXJuIGN0cmxfaW5iKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpaW9wb3J0X21hcChwb3J0LCAxKSk7CiB9CiAKLXVuc2lnbmVkIHNob3J0IGdlbmVyaWNfaW53KHVuc2lnbmVkIGxvbmcgcG9ydCkKK3UxNiBnZW5lcmljX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKVBPUlQyQUREUihwb3J0KTsKKwlyZXR1cm4gY3RybF9pbncoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlpb3BvcnRfbWFwKHBvcnQsIDIpKTsKIH0KIAotdW5zaWduZWQgaW50IGdlbmVyaWNfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3UzMiBnZW5lcmljX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopUE9SVDJBRERSKHBvcnQpOworCXJldHVybiBjdHJsX2lubCgodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWlvcG9ydF9tYXAocG9ydCwgNCkpOwogfQogCi11bnNpZ25lZCBjaGFyIGdlbmVyaWNfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KQordTggZ2VuZXJpY19pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JdW5zaWduZWQgbG9uZyB2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKilQT1JUMkFERFIocG9ydCk7CisJdW5zaWduZWQgbG9uZyB2ID0gZ2VuZXJpY19pbmIocG9ydCk7CiAKIAlkZWxheSgpOwogCXJldHVybiB2OwogfQogCi11bnNpZ25lZCBzaG9ydCBnZW5lcmljX2lud19wKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3UxNiBnZW5lcmljX2lud19wKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQl1bnNpZ25lZCBsb25nIHYgPSAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilQT1JUMkFERFIocG9ydCk7CisJdW5zaWduZWQgbG9uZyB2ID0gZ2VuZXJpY19pbncocG9ydCk7CiAKIAlkZWxheSgpOwogCXJldHVybiB2OwogfQogCi11bnNpZ25lZCBpbnQgZ2VuZXJpY19pbmxfcCh1bnNpZ25lZCBsb25nIHBvcnQpCit1MzIgZ2VuZXJpY19pbmxfcCh1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JdW5zaWduZWQgbG9uZyB2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKilQT1JUMkFERFIocG9ydCk7CisJdW5zaWduZWQgbG9uZyB2ID0gZ2VuZXJpY19pbmwocG9ydCk7CiAKIAlkZWxheSgpOwogCXJldHVybiB2OwpAQCAtNzcsNzUgKzc3LDcwIEBACiAgKiBjb252ZXJ0IHRoZSBwb3J0IGFkZHJlc3MgdG8gcmVhbCBhZGRyZXNzIG9uY2UuCiAgKi8KIAotdm9pZCBnZW5lcmljX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQpCit2b2lkIGdlbmVyaWNfaW5zYih1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwb3J0X2FkZHI7Ci0JdW5zaWduZWQgY2hhciAqYnVmPWJ1ZmZlcjsKKwl2b2xhdGlsZSB1OCAqcG9ydF9hZGRyOworCXU4ICpidWYgPSBkc3Q7CiAKLQlwb3J0X2FkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVBPUlQyQUREUihwb3J0KTsKLQotCXdoaWxlKGNvdW50LS0pCi0JICAgICpidWYrKyA9ICpwb3J0X2FkZHI7CisJcG9ydF9hZGRyID0gKHZvbGF0aWxlIHU4ICopaW9wb3J0X21hcChwb3J0LCAxKTsKKwl3aGlsZSAoY291bnQtLSkKKwkJKmJ1ZisrID0gKnBvcnRfYWRkcjsKIH0KIAotdm9pZCBnZW5lcmljX2luc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQpCit2b2lkIGdlbmVyaWNfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcG9ydF9hZGRyOwotCXVuc2lnbmVkIHNob3J0ICpidWY9YnVmZmVyOworCXZvbGF0aWxlIHUxNiAqcG9ydF9hZGRyOworCXUxNiAqYnVmID0gZHN0OwogCi0JcG9ydF9hZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUE9SVDJBRERSKHBvcnQpOworCXBvcnRfYWRkciA9ICh2b2xhdGlsZSB1MTYgKilpb3BvcnRfbWFwKHBvcnQsIDIpOworCXdoaWxlIChjb3VudC0tKQorCQkqYnVmKysgPSAqcG9ydF9hZGRyOwogCi0Jd2hpbGUoY291bnQtLSkKLQkgICAgKmJ1ZisrID0gKnBvcnRfYWRkcjsKLSNpZmRlZiBTSDNfUENNQ0lBX0JVR19XT1JLQVJPVU5ECi0JY3RybF9pbmIgKERVTU1ZX1JFQURfQVJFQTYpOwotI2VuZGlmCisJZHVtbXlfcmVhZCgpOwogfQogCi12b2lkIGdlbmVyaWNfaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3ZvaWQgZ2VuZXJpY19pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnBvcnRfYWRkcjsKLQl1bnNpZ25lZCBsb25nICpidWY9YnVmZmVyOworCXZvbGF0aWxlIHUzMiAqcG9ydF9hZGRyOworCXUzMiAqYnVmID0gZHN0OwogCi0JcG9ydF9hZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilQT1JUMkFERFIocG9ydCk7CisJcG9ydF9hZGRyID0gKHZvbGF0aWxlIHUzMiAqKWlvcG9ydF9tYXAocG9ydCwgNCk7CisJd2hpbGUgKGNvdW50LS0pCisJCSpidWYrKyA9ICpwb3J0X2FkZHI7CiAKLQl3aGlsZShjb3VudC0tKQotCSAgICAqYnVmKysgPSAqcG9ydF9hZGRyOwotI2lmZGVmIFNIM19QQ01DSUFfQlVHX1dPUktBUk9VTkQKLQljdHJsX2luYiAoRFVNTVlfUkVBRF9BUkVBNik7Ci0jZW5kaWYKKwlkdW1teV9yZWFkKCk7CiB9CiAKLXZvaWQgZ2VuZXJpY19vdXRiKHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQordm9pZCBnZW5lcmljX291dGIodTggYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopUE9SVDJBRERSKHBvcnQpID0gYjsKKwljdHJsX291dGIoYiwgKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlpb3BvcnRfbWFwKHBvcnQsIDEpKTsKIH0KIAotdm9pZCBnZW5lcmljX291dHcodW5zaWduZWQgc2hvcnQgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQordm9pZCBnZW5lcmljX291dHcodTE2IGIsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilQT1JUMkFERFIocG9ydCkgPSBiOworCWN0cmxfb3V0dyhiLCAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWlvcG9ydF9tYXAocG9ydCwgMikpOwogfQogCi12b2lkIGdlbmVyaWNfb3V0bCh1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQordm9pZCBnZW5lcmljX291dGwodTMyIGIsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLSAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKilQT1JUMkFERFIocG9ydCkgPSBiOworCWN0cmxfb3V0bChiLCAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWlvcG9ydF9tYXAocG9ydCwgNCkpOwogfQogCi12b2lkIGdlbmVyaWNfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQordm9pZCBnZW5lcmljX291dGJfcCh1OCBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKilQT1JUMkFERFIocG9ydCkgPSBiOworCWdlbmVyaWNfb3V0YihiLCBwb3J0KTsKIAlkZWxheSgpOwogfQogCi12b2lkIGdlbmVyaWNfb3V0d19wKHVuc2lnbmVkIHNob3J0IGIsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3ZvaWQgZ2VuZXJpY19vdXR3X3AodTE2IGIsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilQT1JUMkFERFIocG9ydCkgPSBiOworCWdlbmVyaWNfb3V0dyhiLCBwb3J0KTsKIAlkZWxheSgpOwogfQogCi12b2lkIGdlbmVyaWNfb3V0bF9wKHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCit2b2lkIGdlbmVyaWNfb3V0bF9wKHUzMiBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKilQT1JUMkFERFIocG9ydCkgPSBiOworCWdlbmVyaWNfb3V0bChiLCBwb3J0KTsKIAlkZWxheSgpOwogfQogCkBAIC0xNTQsOTAgKzE0OSw3NyBAQAogICogYWRkcmVzcy4gSG93ZXZlciBhcyB0aGUgcG9ydCBhZGRyZXNzIGRvZXNuJ3QgY2hhbmdlIHdlIG9ubHkgbmVlZCB0bwogICogY29udmVydCB0aGUgcG9ydCBhZGRyZXNzIHRvIHJlYWwgYWRkcmVzcyBvbmNlLgogICovCi0KLXZvaWQgZ2VuZXJpY19vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3ZvaWQgZ2VuZXJpY19vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwb3J0X2FkZHI7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqYnVmPWJ1ZmZlcjsKKwl2b2xhdGlsZSB1OCAqcG9ydF9hZGRyOworCWNvbnN0IHU4ICpidWYgPSBzcmM7CiAKLQlwb3J0X2FkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVBPUlQyQUREUihwb3J0KTsKKwlwb3J0X2FkZHIgPSAodm9sYXRpbGUgdTggX19mb3JjZSAqKWlvcG9ydF9tYXAocG9ydCwgMSk7CiAKLQl3aGlsZShjb3VudC0tKQotCSAgICAqcG9ydF9hZGRyID0gKmJ1ZisrOworCXdoaWxlIChjb3VudC0tKQorCQkqcG9ydF9hZGRyID0gKmJ1ZisrOwogfQogCi12b2lkIGdlbmVyaWNfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQpCit2b2lkIGdlbmVyaWNfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnBvcnRfYWRkcjsKLQljb25zdCB1bnNpZ25lZCBzaG9ydCAqYnVmPWJ1ZmZlcjsKKwl2b2xhdGlsZSB1MTYgKnBvcnRfYWRkcjsKKwljb25zdCB1MTYgKmJ1ZiA9IHNyYzsKIAotCXBvcnRfYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBPUlQyQUREUihwb3J0KTsKKwlwb3J0X2FkZHIgPSAodm9sYXRpbGUgdTE2IF9fZm9yY2UgKilpb3BvcnRfbWFwKHBvcnQsIDIpOwogCi0Jd2hpbGUoY291bnQtLSkKLQkgICAgKnBvcnRfYWRkciA9ICpidWYrKzsKKwl3aGlsZSAoY291bnQtLSkKKwkJKnBvcnRfYWRkciA9ICpidWYrKzsKIAotI2lmZGVmIFNIM19QQ01DSUFfQlVHX1dPUktBUk9VTkQKLQljdHJsX2luYiAoRFVNTVlfUkVBRF9BUkVBNik7Ci0jZW5kaWYKKwlkdW1teV9yZWFkKCk7CiB9CiAKLXZvaWQgZ2VuZXJpY19vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3ZvaWQgZ2VuZXJpY19vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwb3J0X2FkZHI7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyAqYnVmPWJ1ZmZlcjsKKwl2b2xhdGlsZSB1MzIgKnBvcnRfYWRkcjsKKwljb25zdCB1MzIgKmJ1ZiA9IHNyYzsKIAotCXBvcnRfYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopUE9SVDJBRERSKHBvcnQpOworCXBvcnRfYWRkciA9ICh2b2xhdGlsZSB1MzIgX19mb3JjZSAqKWlvcG9ydF9tYXAocG9ydCwgNCk7CisJd2hpbGUgKGNvdW50LS0pCisJCSpwb3J0X2FkZHIgPSAqYnVmKys7CiAKLQl3aGlsZShjb3VudC0tKQotCSAgICAqcG9ydF9hZGRyID0gKmJ1ZisrOwotCi0jaWZkZWYgU0gzX1BDTUNJQV9CVUdfV09SS0FST1VORAotCWN0cmxfaW5iIChEVU1NWV9SRUFEX0FSRUE2KTsKLSNlbmRpZgorCWR1bW15X3JlYWQoKTsKIH0KIAotdW5zaWduZWQgY2hhciBnZW5lcmljX3JlYWRiKHVuc2lnbmVkIGxvbmcgYWRkcikKK3U4IGdlbmVyaWNfcmVhZGIodm9pZCBfX2lvbWVtICphZGRyKQogewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKWFkZHI7CisJcmV0dXJuIGN0cmxfaW5iKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcik7CiB9CiAKLXVuc2lnbmVkIHNob3J0IGdlbmVyaWNfcmVhZHcodW5zaWduZWQgbG9uZyBhZGRyKQordTE2IGdlbmVyaWNfcmVhZHcodm9pZCBfX2lvbWVtICphZGRyKQogewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilhZGRyOworCXJldHVybiBjdHJsX2ludygodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHIpOwogfQogCi11bnNpZ25lZCBpbnQgZ2VuZXJpY19yZWFkbCh1bnNpZ25lZCBsb25nIGFkZHIpCit1MzIgZ2VuZXJpY19yZWFkbCh2b2lkIF9faW9tZW0gKmFkZHIpCiB7Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopYWRkcjsKKwlyZXR1cm4gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyKTsKIH0KIAotdm9pZCBnZW5lcmljX3dyaXRlYih1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3ZvaWQgZ2VuZXJpY193cml0ZWIodTggYiwgdm9pZCBfX2lvbWVtICphZGRyKQogewotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopYWRkciA9IGI7CisJY3RybF9vdXRiKGIsICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcik7CiB9CiAKLXZvaWQgZ2VuZXJpY193cml0ZXcodW5zaWduZWQgc2hvcnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQordm9pZCBnZW5lcmljX3dyaXRldyh1MTYgYiwgdm9pZCBfX2lvbWVtICphZGRyKQogewotCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKWFkZHIgPSBiOworCWN0cmxfb3V0dyhiLCAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHIpOwogfQogCi12b2lkIGdlbmVyaWNfd3JpdGVsKHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCit2b2lkIGdlbmVyaWNfd3JpdGVsKHUzMiBiLCB2b2lkIF9faW9tZW0gKmFkZHIpCiB7Ci0gICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopYWRkciA9IGI7CisJY3RybF9vdXRsKGIsICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcik7CiB9CiAKLXZvaWQgKiBnZW5lcmljX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3ZvaWQgX19pb21lbSAqZ2VuZXJpY19pb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IHNpemUpCiB7Ci0JcmV0dXJuICh2b2lkICopIFAyU0VHQUREUihvZmZzZXQpOworCXJldHVybiAodm9pZCBfX2lvbWVtICopKGFkZHIgKyBnZW5lcmljX2lvX2Jhc2UpOwogfQotRVhQT1JUX1NZTUJPTChnZW5lcmljX2lvcmVtYXApOwogCi12b2lkIGdlbmVyaWNfaW91bm1hcCh2b2lkICphZGRyKQordm9pZCBnZW5lcmljX2lvcG9ydF91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiB9Ci1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfaW91bm1hcCk7Ci0KLXVuc2lnbmVkIGxvbmcgZ2VuZXJpY19pc2FfcG9ydDJhZGRyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXJldHVybiBvZmZzZXQgKyBnZW5lcmljX2lvX2Jhc2U7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pcnEuYyBiL2FyY2gvc2gva2VybmVsL2lycS5jCmluZGV4IDU0YzE3MTIuLjY4ODNjMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lycS5jCkBAIC04LDM4ICs4LDEzIEBACiAgKiBTdXBlckggdmVyc2lvbjogIENvcHlyaWdodCAoQykgMTk5OSAgTmlpYmUgWXV0YWthCiAgKi8KIAotLyoKLSAqIElSUXMgYXJlIGluIGZhY3QgaW1wbGVtZW50ZWQgYSBiaXQgbGlrZSBzaWduYWwgaGFuZGxlcnMgZm9yIHRoZSBrZXJuZWwuCi0gKiBOYXR1cmFsbHkgaXQncyBub3QgYSAxOjEgcmVsYXRpb24sIGJ1dCB0aGVyZSBhcmUgc2ltaWxhcml0aWVzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLQotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9jcHUvbW11X2NvbnRleHQuaD4KIAogLyoKICAqICd3aGF0IHNob3VsZCB3ZSBkbyBpZiB3ZSBnZXQgYSBodyBpcnEgZXZlbnQgb24gYW4gaWxsZWdhbCB2ZWN0b3InLgpAQCAtNjYsNyArNDEsNyBAQAogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIAl9CiAKLQlpZiAoaSA8IEFDVFVBTF9OUl9JUlFTKSB7CisJaWYgKGkgPCBOUl9JUlFTKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKIAkJaWYgKCFhY3Rpb24pCkBAIC04NiwxOSArNjEsMzIgQEAKIH0KICNlbmRpZgogCisKIGFzbWxpbmthZ2UgaW50IGRvX0lSUSh1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAogCQkgICAgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAogCQkgICAgICBzdHJ1Y3QgcHRfcmVncyByZWdzKQotewkKLQlpbnQgaXJxOworeworCWludCBpcnEgPSByNDsKIAogCWlycV9lbnRlcigpOwotCWFzbSB2b2xhdGlsZSgic3RjCXIyX2JhbmssICUwXG5cdCIKLQkJICAgICAic2hscjIJJTBcblx0IgotCQkgICAgICJzaGxyMgklMFxuXHQiCi0JCSAgICAgInNobHIJJTBcblx0IgotCQkgICAgICJhZGQJIy0xNiwgJTBcblx0IgotCQkgICAgIDoiPXoiIChpcnEpKTsKKworI2lmZGVmIENPTkZJR19DUFVfSEFTX0lOVEVWVAorCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19TUl9SQgorCQkic3RjCXIyX2JhbmssICUwXG5cdCIKKyNlbHNlCisJCSJtb3YubAlAJTEsICUwXG5cdCIKKyNlbmRpZgorCQkic2hscjIJJTBcblx0IgorCQkic2hscjIJJTBcblx0IgorCQkic2hscgklMFxuXHQiCisJCSJhZGQJIy0xNiwgJTBcblx0IgorCQk6ICI9eiIgKGlycSksICI9ciIgKHI0KQorCQk6ICIxIiAoSU5URVZUKQorCQk6ICJtZW1vcnkiCisJKTsKKyNlbmRpZgorCiAJaXJxID0gaXJxX2RlbXV4KGlycSk7CiAJX19kb19JUlEoaXJxLCAmcmVncyk7CiAJaXJxX2V4aXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzU0NjUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogbWFjaGluZV9rZXhlYy5jIC0gaGFuZGxlIHRyYW5zaXRpb24gb2YgTGludXggYm9vdGluZyBhbm90aGVyIGtlcm5lbAorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRXJpYyBCaWVkZXJtYW4gIDxlYmllZGVybUB4bWlzc2lvbi5jb20+CisgKgorICogR2FtZUN1YmUvcHBjMzIgcG9ydCBDb3B5cmlnaHQgKEMpIDIwMDQgQWxiZXJ0IEhlcnJhbnoKKyAqIExBTkRJU0svc2g0IHN1cHBvcnRlZCBieSBrb2dpaWRlbmEKKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIFZlcnNpb24gMi4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCit0eXBlZGVmIE5PUkVUX1RZUEUgdm9pZCAoKnJlbG9jYXRlX25ld19rZXJuZWxfdCkoCisJCQkJdW5zaWduZWQgbG9uZyBpbmRpcmVjdGlvbl9wYWdlLAorCQkJCXVuc2lnbmVkIGxvbmcgcmVib290X2NvZGVfYnVmZmVyLAorCQkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzcywKKwkJCQl1bnNpZ25lZCBsb25nIHZicl9yZWcpIEFUVFJJQl9OT1JFVDsKKworY29uc3QgZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcmVsb2NhdGVfbmV3X2tlcm5lbFtdOworY29uc3QgZXh0ZXJuIHVuc2lnbmVkIGludCByZWxvY2F0ZV9uZXdfa2VybmVsX3NpemU7CitleHRlcm4gdm9pZCAqZ2RiX3Zicl92ZWN0b3I7CisKKy8qCisgKiBQcm92aWRlIGEgZHVtbXkgY3Jhc2hfbm90ZXMgZGVmaW5pdGlvbiB3aGlsZSBjcmFzaCBkdW1wIGFycml2ZXMgdG8gcHBjLgorICogVGhpcyBwcmV2ZW50cyBicmVha2FnZSBvZiBjcmFzaF9ub3RlcyBhdHRyaWJ1dGUgaW4ga2VybmVsL2tzeXNmcy5jLgorICovCit2b2lkICpjcmFzaF9ub3RlcyA9IE5VTEw7CisKK3ZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQoreworfQorCit2b2lkIG1hY2hpbmVfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7Cit9CisKKy8qCisgKiBEbyB3aGF0IGV2ZXJ5IHNldHVwIGlzIG5lZWRlZCBvbiBpbWFnZSBhbmQgdGhlCisgKiByZWJvb3QgY29kZSBidWZmZXIgdG8gYWxsb3cgdXMgdG8gYXZvaWQgYWxsb2NhdGlvbnMKKyAqIGxhdGVyLgorICovCitpbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKQoreworCXJldHVybiAwOworfQorCit2b2lkIG1hY2hpbmVfa2V4ZWNfY2xlYW51cChzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3sKK30KKworc3RhdGljIHZvaWQga2V4ZWNfaW5mbyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3sKKyAgICAgICAgaW50IGk7CisJcHJpbnRrKCJrZXhlYyBpbmZvcm1hdGlvblxuIik7CisJZm9yIChpID0gMDsgaSA8IGltYWdlLT5ucl9zZWdtZW50czsgaSsrKSB7CisJICAgICAgICBwcmludGsoIiAgc2VnbWVudFslZF06IDB4JTA4eCAtIDB4JTA4eCAoMHglMDh4KVxuIiwKKwkJICAgICAgIGksCisJCSAgICAgICAodW5zaWduZWQgaW50KWltYWdlLT5zZWdtZW50W2ldLm1lbSwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpaW1hZ2UtPnNlZ21lbnRbaV0ubWVtICsgaW1hZ2UtPnNlZ21lbnRbaV0ubWVtc3osCisJCSAgICAgICAodW5zaWduZWQgaW50KWltYWdlLT5zZWdtZW50W2ldLm1lbXN6KTsKKyAJfQorCXByaW50aygiICBzdGFydCAgICAgOiAweCUwOHhcblxuIiwgKHVuc2lnbmVkIGludClpbWFnZS0+c3RhcnQpOworfQorCisKKy8qCisgKiBEbyBub3QgYWxsb2NhdGUgbWVtb3J5IChvciBmYWlsIGluIGFueSB3YXkpIGluIG1hY2hpbmVfa2V4ZWMoKS4KKyAqIFdlIGFyZSBwYXN0IHRoZSBwb2ludCBvZiBubyByZXR1cm4sIGNvbW1pdHRlZCB0byByZWJvb3Rpbmcgbm93LgorICovCitOT1JFVF9UWVBFIHZvaWQgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3sKKworCXVuc2lnbmVkIGxvbmcgcGFnZV9saXN0OworCXVuc2lnbmVkIGxvbmcgcmVib290X2NvZGVfYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgdmJyX3JlZzsKKwlyZWxvY2F0ZV9uZXdfa2VybmVsX3Qgcm5rOworCisjaWYgZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKKwl2YnJfcmVnID0gKCh1bnNpZ25lZCBsb25nIClnZGJfdmJyX3ZlY3RvcikgLSAweDEwMDsKKyNlbHNlCisJdmJyX3JlZyA9IDB4ODAwMDAwMDA7ICAvLyBkdW1teQorI2VuZGlmCisJLyogSW50ZXJydXB0cyBhcmVuJ3QgYWNjZXB0YWJsZSB3aGlsZSB3ZSByZWJvb3QgKi8KKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJcGFnZV9saXN0ID0gaW1hZ2UtPmhlYWQ7CisKKwkvKiB3ZSBuZWVkIGJvdGggZWZmZWN0aXZlIGFuZCByZWFsIGFkZHJlc3MgaGVyZSAqLworCXJlYm9vdF9jb2RlX2J1ZmZlciA9CisJCQkodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoaW1hZ2UtPmNvbnRyb2xfY29kZV9wYWdlKTsKKworCS8qIGNvcHkgb3VyIGtlcm5lbCByZWxvY2F0aW9uIGNvZGUgdG8gdGhlIGNvbnRyb2wgY29kZSBwYWdlICovCisJbWVtY3B5KCh2b2lkICopcmVib290X2NvZGVfYnVmZmVyLCByZWxvY2F0ZV9uZXdfa2VybmVsLAorCQkJCQkJcmVsb2NhdGVfbmV3X2tlcm5lbF9zaXplKTsKKworICAgICAgICBrZXhlY19pbmZvKGltYWdlKTsKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKworCS8qIG5vdyBjYWxsIGl0ICovCisJcm5rID0gKHJlbG9jYXRlX25ld19rZXJuZWxfdCkgcmVib290X2NvZGVfYnVmZmVyOworICAgICAgIAkoKnJuaykocGFnZV9saXN0LCByZWJvb3RfY29kZV9idWZmZXIsIGltYWdlLT5zdGFydCwgdmJyX3JlZyk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYwppbmRleCBhYWMxNWU0Li5hNGRjMmI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC03MSw2ICs3MSwxNiBAQAogCiB2b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICogX191bnVzZWQpCiB7CisKKyNpZmRlZiBDT05GSUdfS0VYRUMKKwlzdHJ1Y3Qga2ltYWdlICppbWFnZTsKKwlpbWFnZSA9IHhjaGcoJmtleGVjX2ltYWdlLCAwKTsKKwlpZiAoaW1hZ2UpIHsKKwkJbWFjaGluZV9zaHV0ZG93bigpOworCQltYWNoaW5lX2tleGVjKGltYWdlKTsKKwl9CisjZW5kaWYKKwogCS8qIFNSLkJMPTEgYW5kIGludm9rZSBhZGRyZXNzIGVycm9yIHRvIGxldCBDUFUgcmVzZXQgKG1hbnVhbCByZXNldCkgKi8KIAlhc20gdm9sYXRpbGUoImxkYyAlMCwgc3Jcblx0IgogCQkgICAgICJtb3YubCBAJTEsICUwIiA6IDogInIiICgweDEwMDAwMDAwKSwgInIiICgweDgwMDAwMDAxKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUyBiL2FyY2gvc2gva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNjk1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIHJlbG9jYXRlX2tlcm5lbC5TIC0gcHV0IHRoZSBrZXJuZWwgaW1hZ2UgaW4gcGxhY2UgdG8gYm9vdAorICogMjAwNS45LjE3IGtvZ2lpZGVuYUBlZ2dwbGFudC5kZG8uanAKKyAqCisgKiBMQU5ESVNLL3NoNCBpcyBzdXBwb3J0ZWQuIE1heWJlLCBTSCBhcmNodGVjdHVyZSB3b3JrcyB3ZWxsLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogVmVyc2lvbiAyLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjZGVmaW5lIFBBR0VfU0laRSAgICAgIDQwOTYgLyogbXVzdCBiZSBzYW1lIHZhbHVlIGFzIGluIDxhc20vcGFnZS5oPiAqLworCisKKwkJLmdsb2JsIHJlbG9jYXRlX25ld19rZXJuZWwKK3JlbG9jYXRlX25ld19rZXJuZWw6CisJLyogcjQgPSBpbmRpcmVjdGlvbl9wYWdlICAgKi8KKwkvKiByNSA9IHJlYm9vdF9jb2RlX2J1ZmZlciAqLworCS8qIHI2ID0gc3RhcnRfYWRkcmVzcyAgICAgICovCisJLyogcjcgPSB2YnJfcmVnICAgICAgICAgICAgKi8KKworCW1vdi5sCTEwZixyOAkgIC8qIDQwOTYgKi8KKwltb3YubAkxMWYscjkgICAgLyogMHhhMDAwMDAwMCAqLworCisJLyogIHN0YWNrIHNldHRpbmcgKi8KKwlhZGQJcjgscjUKKwltb3YJcjUscjE1CisKKwlicmEJMWYKKwltb3YJcjQscjAJICAvKiBjbWQgPSBpbmRpcmVjdGlvbl9wYWdlICovCiswOgorCW1vdi5sCUByNCsscjAJICAvKiBjbWQgPSAqaW5kKysgKi8KKworMToJLyogYWRkciA9IChjbWQgfCAweGEwMDAwMDAwKSAmIDB4ZmZmZmZmZjAgKi8KKwltb3YJcjAscjIKKwlvcglyOSxyMgorCW1vdgkjLTE2LHIxCisJYW5kCXIxLHIyCisKKwkvKiBpZihjbWQgJiBJTkRfREVTVElOQVRJT04pIGRzdCA9IGFkZHIgICovCisJdHN0CSMxLHIwCisJYnQJMmYKKwlicmEJMGIKKwltb3YJcjIscjUKKworMjoJLyogZWxzZSBpZihjbWQgJiBJTkRfSU5ESVJFQ1RJT04pIGluZCA9IGFkZHIgICovCisJdHN0CSMyLHIwCisJYnQJM2YKKwlicmEJMGIKKwltb3YJcjIscjQKKworMzoJLyogZWxzZSBpZihjbWQgJiBJTkRfRE9ORSkgZ290byA2ICAqLworCXRzdAkjNCxyMAorCWJ0CTRmCisJYnJhCTZmCisJbm9wCisKKzQ6CS8qIGVsc2UgaWYoY21kICYgSU5EX1NPVVJDRSkgbWVtY3B5KGRzdCxhZGRyLFBBR0VfU0laRSkgKi8KKwl0c3QJIzgscjAKKwlidAkwYgorCisJbW92CXI4LHIzCisJc2hscjIJcjMKKwlzaGxyMglyMworNToKKwlkdAlyMworCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzAgKi8KKwltb3YubAlyMSxAcjUKKwlhZGQJIzQscjUKKwltb3YubAlAcjIrLHIxCSAgLyogIDE2bis0ICovCisJbW92LmwJcjEsQHI1CisJYWRkCSM0LHI1CisJbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rOCAqLworCW1vdi5sCXIxLEByNQorCWFkZAkjNCxyNQorCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzEyICovCisJbW92LmwJcjEsQHI1CisJYWRkCSM0LHI1CisJYmYJNWIKKworCWJyYQkwYgorCW5vcAorNjoKKyNpZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUworCWxkYyAgIHI3LCB2YnIKKyNlbmRpZgorCWptcCBAcjYKKwlub3AKKworCS5hbGlnbiAyCisxMDoKKwkubG9uZwlQQUdFX1NJWkUKKzExOgorCS5sb25nCTB4YTAwMDAwMDAKKworcmVsb2NhdGVfbmV3X2tlcm5lbF9lbmQ6CisKKwkuZ2xvYmwgcmVsb2NhdGVfbmV3X2tlcm5lbF9zaXplCityZWxvY2F0ZV9uZXdfa2VybmVsX3NpemU6CisJLmxvbmcgcmVsb2NhdGVfbmV3X2tlcm5lbF9lbmQgLSByZWxvY2F0ZV9uZXdfa2VybmVsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lLmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lLmMKaW5kZXggNjcxYjg3Ni4uMzE0YTI3NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWUuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5ICBUZXRzdXlhIE9rYWRhICYgTmlpYmUgWXV0YWthCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwICBQaGlsaXBwIFJ1bXBmIDxwcnVtcGZAdHV4Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgIE0uIFIuIEJyb3duICA8bXJicm93bkBsaW51eC1zaC5vcmc+CiAgKgogICogIFNvbWUgY29kZSB0YWtlbiBmcm9tIGkzODYgdmVyc2lvbi4KQEAgLTExLDUwICsxMSwyMSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+Ci0KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vcnRjLmg+Ci0jaW5jbHVkZSA8YXNtL2ZyZXEuaD4KLSNpbmNsdWRlIDxhc20vY3B1L3RpbWVyLmg+Ci0jaWZkZWYgQ09ORklHX1NIX0tHREIKKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KICNpbmNsdWRlIDxhc20va2dkYi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCi0jZGVmaW5lIFRNVV9UT0NSX0lOSVQJMHgwMAotI2RlZmluZSBUTVUwX1RDUl9JTklUCTB4MDAyMAotI2RlZmluZSBUTVVfVFNUUl9JTklUCTEKLQotI2RlZmluZSBUTVUwX1RDUl9DQUxJQgkweDAwMDAKLQotI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMQotI2RlZmluZSBDTE9DS0dFTl9NRU1DTEtDUiAweGJiMDQwMDM4Ci0jZGVmaW5lIE1FTUNMS0NSX1JBVElPX01BU0sgMHg3Ci0jZW5kaWYgLyogQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxICovCiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHdhbGxfamlmZmllczsKLSNkZWZpbmUgVElDS19TSVpFICh0aWNrX25zZWMgLyAxMDAwKQotREVGSU5FX1NQSU5MT0NLKHRtdTBfbG9jayk7CitzdHJ1Y3Qgc3lzX3RpbWVyICpzeXNfdGltZXI7CisKKy8qIE1vdmUgdGhpcyBzb21ld2hlcmUgbW9yZSBzZW5zaWJsZS4uICovCitERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOworRVhQT1JUX1NZTUJPTChydGNfbG9jayk7CiAKIC8qIFhYWDogQ2FuIHdlIGluaXRpYWxpemUgdGhpcyBpbiBhIHJvdXRpbmUgc29tZXdoZXJlPyAgRHJlYW1jYXN0IGRvZXNuJ3Qgd2FudAogICogdGhlc2Ugcm91dGluZXMgYW55d2hlcmUuLi4gKi8KQEAgLTY2LDk4ICszNywxNCBAQAogaW50ICgqcnRjX3NldF90aW1lKShjb25zdCB0aW1lX3QpOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApCi1zdGF0aWMgaW50IG1kX3RhYmxlW10gPSB7IDEsIDIsIDMsIDQsIDYsIDgsIDEyIH07Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKQotc3RhdGljIGludCBzdGNfbXVsdGlwbGllcnNbXSA9IHsgMSwgMiwgMywgNCwgNiwgMSwgMSwgMSB9Owotc3RhdGljIGludCBzdGNfdmFsdWVzW10gICAgICA9IHsgMCwgMSwgNCwgMiwgNSwgMCwgMCwgMCB9OwotI2RlZmluZSBiZmNfZGl2aXNvcnMgc3RjX211bHRpcGxpZXJzCi0jZGVmaW5lIGJmY192YWx1ZXMgc3RjX3ZhbHVlcwotc3RhdGljIGludCBpZmNfZGl2aXNvcnNbXSAgICA9IHsgMSwgMiwgMywgNCwgMSwgMSwgMSwgMSB9Owotc3RhdGljIGludCBpZmNfdmFsdWVzW10gICAgICA9IHsgMCwgMSwgNCwgMiwgMCwgMCwgMCwgMCB9Owotc3RhdGljIGludCBwZmNfZGl2aXNvcnNbXSAgICA9IHsgMSwgMiwgMywgNCwgNiwgMSwgMSwgMSB9Owotc3RhdGljIGludCBwZmNfdmFsdWVzW10gICAgICA9IHsgMCwgMSwgNCwgMiwgNSwgMCwgMCwgMCB9OwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwKQotc3RhdGljIGludCBpZmNfZGl2aXNvcnNbXSA9IHsgMSwgMiwgMywgNCwgNiwgOCwgMTIsIDE2IH07Ci1zdGF0aWMgaW50IGlmY192YWx1ZXNbXSA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyB9OwotI2RlZmluZSBiZmNfZGl2aXNvcnMgaWZjX2Rpdmlzb3JzCS8qIFNhbWUgKi8KLSNkZWZpbmUgYmZjX3ZhbHVlcyBpZmNfdmFsdWVzCi0jZGVmaW5lIHBmY19kaXZpc29ycyBpZmNfZGl2aXNvcnMJLyogU2FtZSAqLwotI2RlZmluZSBwZmNfdmFsdWVzIGlmY192YWx1ZXMKLSNlbHNlCi1zdGF0aWMgaW50IGlmY19kaXZpc29yc1tdID0geyAxLCAyLCAzLCA0LCA2LCA4LCAxLCAxIH07Ci1zdGF0aWMgaW50IGlmY192YWx1ZXNbXSAgID0geyAwLCAxLCAyLCAzLCAwLCA0LCAwLCA1IH07Ci0jZGVmaW5lIGJmY19kaXZpc29ycyBpZmNfZGl2aXNvcnMJLyogU2FtZSAqLwotI2RlZmluZSBiZmNfdmFsdWVzIGlmY192YWx1ZXMKLXN0YXRpYyBpbnQgcGZjX2Rpdmlzb3JzW10gPSB7IDIsIDMsIDQsIDYsIDgsIDIsIDIsIDIgfTsKLXN0YXRpYyBpbnQgcGZjX3ZhbHVlc1tdICAgPSB7IDAsIDAsIDEsIDIsIDAsIDMsIDAsIDQgfTsKLSNlbmRpZgotI2Vsc2UKLSNlcnJvciAiVW5rbm93biBpZmMvYmZjL3BmYy9zdGMgdmFsdWVzIGZvciB0aGlzIHByb2Nlc3NvciIKLSNlbmRpZgotCiAvKgogICogU2NoZWR1bGVyIGNsb2NrIC0gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gbmFub3NlYyB1bml0cy4KICAqLwotdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCit1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXyAoKHdlYWspKSBzY2hlZF9jbG9jayh2b2lkKQogewogCXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKWppZmZpZXMgKiAoMTAwMDAwMDAwMCAvIEhaKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fZ2V0dGltZW9mZnNldCh2b2lkKQotewotCWludCBjb3VudDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3RhdGljIGludCBjb3VudF9wID0gMHg3ZmZmZmZmZjsgICAgLyogZm9yIHRoZSBmaXJzdCBjYWxsIGFmdGVyIGJvb3QgKi8KLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX3AgPSAwOwotCi0JLyoKLQkgKiBjYWNoZSB2b2xhdGlsZSBqaWZmaWVzIHRlbXBvcmFyaWx5OyB3ZSBoYXZlIElSUXMgdHVybmVkIG9mZi4KLQkgKi8KLQl1bnNpZ25lZCBsb25nIGppZmZpZXNfdDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ0bXUwX2xvY2ssIGZsYWdzKTsKLQkvKiB0aW1lciBjb3VudCBtYXkgdW5kZXJmbG93IHJpZ2h0IGhlcmUgKi8KLQljb3VudCA9IGN0cmxfaW5sKFRNVTBfVENOVCk7CS8qIHJlYWQgdGhlIGxhdGNoZWQgY291bnQgKi8KLQotCWppZmZpZXNfdCA9IGppZmZpZXM7Ci0KLQkvKgotCSAqIGF2b2lkaW5nIHRpbWVyIGluY29uc2lzdGVuY2llcyAodGhleSBhcmUgcmFyZSwgYnV0IHRoZXkgaGFwcGVuKS4uLgotCSAqIHRoZXJlIGlzIG9uZSBraW5kIG9mIHByb2JsZW0gdGhhdCBtdXN0IGJlIGF2b2lkZWQgaGVyZToKLQkgKiAgMS4gdGhlIHRpbWVyIGNvdW50ZXIgdW5kZXJmbG93cwotCSAqLwotCi0JaWYoIGppZmZpZXNfdCA9PSBqaWZmaWVzX3AgKSB7Ci0JCWlmKCBjb3VudCA+IGNvdW50X3AgKSB7Ci0JCQkvKiB0aGUgbnV0Y2FzZSAqLwotCi0JCQlpZihjdHJsX2ludyhUTVUwX1RDUikgJiAweDEwMCkgeyAvKiBDaGVjayBVTkYgYml0ICovCi0JCQkJLyoKLQkJCQkgKiBXZSBjYW5ub3QgZGV0ZWN0IGxvc3QgdGltZXIgaW50ZXJydXB0cyAuLi4KLQkJCQkgKiB3ZWxsLCB0aGF0J3Mgd2h5IHdlIGNhbGwgdGhlbSBsb3N0LCBkb24ndCB3ZT8gOikKLQkJCQkgKiBbaG1tLCBvbiB0aGUgUGVudGl1bSBhbmQgQWxwaGEgd2UgY2FuIC4uLiBzb3J0IG9mXQotCQkJCSAqLwotCQkJCWNvdW50IC09IExBVENIOwotCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoImRvX3Nsb3dfZ2V0dGltZW9mZnNldCgpOiBoYXJkd2FyZSB0aW1lciBwcm9ibGVtP1xuIik7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UKLQkJamlmZmllc19wID0gamlmZmllc190OwotCi0JY291bnRfcCA9IGNvdW50OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtdTBfbG9jaywgZmxhZ3MpOwotCi0JY291bnQgPSAoKExBVENILTEpIC0gY291bnQpICogVElDS19TSVpFOwotCWNvdW50ID0gKGNvdW50ICsgTEFUQ0gvMikgLyBMQVRDSDsKLQotCXJldHVybiBjb3VudDsKLX0KLQogdm9pZCBkb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQogewogCXVuc2lnbmVkIGxvbmcgc2VxOwpAQCAtMTY2LDcgKzUzLDcgQEAKIAogCWRvIHsKIAkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7Ci0JCXVzZWMgPSBkb19nZXR0aW1lb2Zmc2V0KCk7CisJCXVzZWMgPSBnZXRfdGltZXJfb2Zmc2V0KCk7CiAKIAkJbG9zdCA9IGppZmZpZXMgLSB3YWxsX2ppZmZpZXM7CiAJCWlmIChsb3N0KQpAQCAtMjAyLDcgKzg5LDcgQEAKIAkgKiB3YWxsIHRpbWUuICBEaXNjb3ZlciB3aGF0IGNvcnJlY3Rpb24gZ2V0dGltZW9mZGF5KCkgd291bGQgaGF2ZQogCSAqIG1hZGUsIGFuZCB0aGVuIHVuZG8gaXQhCiAJICovCi0JbnNlYyAtPSAxMDAwICogKGRvX2dldHRpbWVvZmZzZXQoKSArCisJbnNlYyAtPSAxMDAwICogKGdldF90aW1lcl9vZmZzZXQoKSArCiAJCQkJKGppZmZpZXMgLSB3YWxsX2ppZmZpZXMpICogKDEwMDAwMDAgLyBIWikpOwogCiAJd3RtX3NlYyAgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKQEAgLTIyNCwxMCArMTExLDEwIEBACiBzdGF0aWMgbG9uZyBsYXN0X3J0Y191cGRhdGU7CiAKIC8qCi0gKiB0aW1lcl9pbnRlcnJ1cHQoKSBuZWVkcyB0byBrZWVwIHVwIHRoZSByZWFsLXRpbWUgY2xvY2ssCisgKiBoYW5kbGVfdGltZXJfdGljaygpIG5lZWRzIHRvIGtlZXAgdXAgdGhlIHJlYWwtdGltZSBjbG9jaywKICAqIGFzIHdlbGwgYXMgY2FsbCB0aGUgImRvX3RpbWVyKCkiIHJvdXRpbmUgZXZlcnkgY2xvY2t0aWNrCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb190aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit2b2lkIGhhbmRsZV90aW1lcl90aWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWRvX3RpbWVyKHJlZ3MpOwogI2lmbmRlZiBDT05GSUdfU01QCkBAIC0yNTIsMzM3ICsxMzksMzUgQEAKIAkJaWYgKHJ0Y19zZXRfdGltZSh4dGltZS50dl9zZWMpID09IDApCiAJCQlsYXN0X3J0Y191cGRhdGUgPSB4dGltZS50dl9zZWM7CiAJCWVsc2UKLQkJCWxhc3RfcnRjX3VwZGF0ZSA9IHh0aW1lLnR2X3NlYyAtIDYwMDsgLyogZG8gaXQgYWdhaW4gaW4gNjAgcyAqLworCQkJLyogZG8gaXQgYWdhaW4gaW4gNjBzICovCisJCQlsYXN0X3J0Y191cGRhdGUgPSB4dGltZS50dl9zZWMgLSA2MDA7CiAJfQogfQogCi0vKgotICogVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgYWJvdmUsIGV4Y2VwdCB3ZSBfYWxzb18gc2F2ZSB0aGUgY3VycmVudAotICogVGltZSBTdGFtcCBDb3VudGVyIHZhbHVlIGF0IHRoZSB0aW1lIG9mIHRoZSB0aW1lciBpbnRlcnJ1cHQsIHNvIHRoYXQKLSAqIHdlIGxhdGVyIG9uIGNhbiBlc3RpbWF0ZSB0aGUgdGltZSBvZiBkYXkgbW9yZSBleGFjdGx5LgotICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyB0aW1lcl9zeXNjbGFzcyA9IHsKKwlzZXRfa3NldF9uYW1lKCJ0aW1lciIpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdGltZXJfaW5pdF9zeXNmcyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgdGltZXJfc3RhdHVzOworCWludCByZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnRpbWVyX3N5c2NsYXNzKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CiAKLQkvKiBDbGVhciBVTkYgYml0ICovCi0JdGltZXJfc3RhdHVzID0gY3RybF9pbncoVE1VMF9UQ1IpOwotCXRpbWVyX3N0YXR1cyAmPSB+MHgxMDA7Ci0JY3RybF9vdXR3KHRpbWVyX3N0YXR1cywgVE1VMF9UQ1IpOwotCi0JLyoKLQkgKiBIZXJlIHdlIGFyZSBpbiB0aGUgdGltZXIgaXJxIGhhbmRsZXIuIFdlIGp1c3QgaGF2ZSBpcnFzIGxvY2FsbHkKLQkgKiBkaXNhYmxlZCBidXQgd2UgZG9uJ3Qga25vdyBpZiB0aGUgdGltZXJfYmggaXMgcnVubmluZyBvbiB0aGUgb3RoZXIKLQkgKiBDUFUuIFdlIG5lZWQgdG8gYXZvaWQgdG8gU01QIHJhY2Ugd2l0aCBpdC4gTk9URTogd2UgZG9uJyB0IG5lZWQKLQkgKiB0aGUgaXJxIHZlcnNpb24gb2Ygd3JpdGVfbG9jayBiZWNhdXNlIGFzIGp1c3Qgc2FpZCB3ZSBoYXZlIGlycQotCSAqIGxvY2FsbHkgZGlzYWJsZWQuIC1hcmNhCi0JICovCi0Jd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7Ci0JZG9fdGltZXJfaW50ZXJydXB0KGlycSwgcmVncyk7Ci0Jd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKKwlzeXNfdGltZXItPmRldi5jbHMgPSAmdGltZXJfc3lzY2xhc3M7CisJcmV0dXJuIHN5c2Rldl9yZWdpc3Rlcigmc3lzX3RpbWVyLT5kZXYpOwogfQogCi0vKgotICogSGFoISAgV2UnbGwgc2VlIGlmIHRoaXMgd29ya3MgKHN3aXRjaGluZyBmcm9tIHVzZWNzIHRvIG5zZWNzKS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgZ2V0X3RpbWVyX2ZyZXF1ZW5jeSh2b2lkKQotewotCXUzMiBmcmVxOwotCXN0cnVjdCB0aW1lc3BlYyB0czEsIHRzMjsKLQl1bnNpZ25lZCBsb25nIGRpZmZfbnNlYzsKLQl1bnNpZ25lZCBsb25nIGZhY3RvcjsKLQotCS8qIFNldHVwIHRoZSB0aW1lcjogIFdlIGRvbid0IHdhbnQgdG8gZ2VuZXJhdGUgaW50ZXJydXB0cywganVzdAotCSAqIGhhdmUgaXQgY291bnQgZG93biBhdCBpdHMgbmF0dXJhbCByYXRlLgotCSAqLwotCWN0cmxfb3V0YigwLCBUTVVfVFNUUik7Ci0jaWYgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCkKLQljdHJsX291dGIoVE1VX1RPQ1JfSU5JVCwgVE1VX1RPQ1IpOwotI2VuZGlmCi0JY3RybF9vdXR3KFRNVTBfVENSX0NBTElCLCBUTVUwX1RDUik7Ci0JY3RybF9vdXRsKDB4ZmZmZmZmZmYsIFRNVTBfVENPUik7Ci0JY3RybF9vdXRsKDB4ZmZmZmZmZmYsIFRNVTBfVENOVCk7Ci0KLQlydGNfZ2V0X3RpbWUoJnRzMik7Ci0KLQlkbyB7Ci0JCXJ0Y19nZXRfdGltZSgmdHMxKTsKLQl9IHdoaWxlICh0czEudHZfbnNlYyA9PSB0czIudHZfbnNlYyAmJiB0czEudHZfc2VjID09IHRzMi50dl9zZWMpOwotCi0JLyogYWN0dWFsbHkgc3RhcnQgdGhlIHRpbWVyICovCi0JY3RybF9vdXRiKFRNVV9UU1RSX0lOSVQsIFRNVV9UU1RSKTsKLQotCWRvIHsKLQkJcnRjX2dldF90aW1lKCZ0czIpOwotCX0gd2hpbGUgKHRzMS50dl9uc2VjID09IHRzMi50dl9uc2VjICYmIHRzMS50dl9zZWMgPT0gdHMyLnR2X3NlYyk7Ci0KLQlmcmVxID0gMHhmZmZmZmZmZiAtIGN0cmxfaW5sKFRNVTBfVENOVCk7Ci0JaWYgKHRzMi50dl9uc2VjIDwgdHMxLnR2X25zZWMpIHsKLQkJdHMyLnR2X25zZWMgKz0gMTAwMDAwMDAwMDsKLQkJdHMyLnR2X3NlYy0tOwotCX0KLQotCWRpZmZfbnNlYyA9ICh0czIudHZfc2VjIC0gdHMxLnR2X3NlYykgKiAxMDAwMDAwMDAwICsgKHRzMi50dl9uc2VjIC0gdHMxLnR2X25zZWMpOwotCi0JLyogdGhpcyBzaG91bGQgd29yayB3ZWxsIGlmIHRoZSBSVEMgaGFzIGEgcHJlY2lzaW9uIG9mIG4gSHosIHdoZXJlCi0JICogbiBpcyBhbiBpbnRlZ2VyLiAgSSBkb24ndCB0aGluayB3ZSBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBvdGhlcgotCSAqIGNhc2VzLiAqLwotCWZhY3RvciA9ICgxMDAwMDAwMDAwICsgZGlmZl9uc2VjLzIpIC8gZGlmZl9uc2VjOwotCi0JaWYgKGZhY3RvciAqIGRpZmZfbnNlYyA+IDExMDAwMDAwMDAgfHwKLQkgICAgZmFjdG9yICogZGlmZl9uc2VjIDwgIDkwMDAwMDAwMCkKLQkJcGFuaWMoIndlaXJkIFJUQyAoZGlmZl9uc2VjICVsZCkiLCBkaWZmX25zZWMpOwotCi0JcmV0dXJuIGZyZXEgKiBmYWN0b3I7Ci19CitkZXZpY2VfaW5pdGNhbGwodGltZXJfaW5pdF9zeXNmcyk7CiAKIHZvaWQgKCpib2FyZF90aW1lX2luaXQpKHZvaWQpOwotdm9pZCAoKmJvYXJkX3RpbWVyX3NldHVwKShzdHJ1Y3QgaXJxYWN0aW9uICppcnEpOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHNoX3BjbGtfZnJlcSBfX2luaXRkYXRhID0gQ09ORklHX1NIX1BDTEtfRlJFUTsKLQotc3RhdGljIGludCBfX2luaXQgc2hfcGNsa19zZXR1cChjaGFyICpzdHIpCi17Ci0gICAgICAgIHVuc2lnbmVkIGludCBmcmVxOwotCi0JaWYgKGdldF9vcHRpb24oJnN0ciwgJmZyZXEpKQotCQlzaF9wY2xrX2ZyZXEgPSBmcmVxOwotCi0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJzaF9wY2xrPSIsIHNoX3BjbGtfc2V0dXApOwotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsgdGltZXJfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsIENQVV9NQVNLX05PTkUsICJ0aW1lciIsIE5VTEwsIE5VTEx9OwotCi12b2lkIGdldF9jdXJyZW50X2ZyZXF1ZW5jeV9kaXZpc29ycyh1bnNpZ25lZCBpbnQgKmlmYywgdW5zaWduZWQgaW50ICpiZmMsIHVuc2lnbmVkIGludCAqcGZjKQotewotCXVuc2lnbmVkIGludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKQotCSppZmMgPSBtZF90YWJsZVsoKGZycWNyICYgMHgwMDcwKSA+PiA0KV07Ci0JKmJmYyA9IG1kX3RhYmxlWygoZnJxY3IgJiAweDA3MDApID4+IDgpXTsKLQkqcGZjID0gbWRfdGFibGVbZnJxY3IgJiAweDAwMDddOwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQotCSpiZmMgPSBzdGNfbXVsdGlwbGllcnNbKGZycWNyICYgMHgwMzAwKSA+PiA4XTsKLQkqaWZjID0gaWZjX2Rpdmlzb3JzWyhmcnFjciAmIDB4MDAzMCkgPj4gNF07Ci0JKnBmYyA9IHBmY19kaXZpc29yc1tmcnFjciAmIDB4MDAwM107Ci0jZWxzZQotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQl0bXAgID0gKGZycWNyICYgMHg4MDAwKSA+PiAxMzsKLQl0bXAgfD0gKGZycWNyICYgMHgwMDMwKSA+PiAgNDsKLQkqYmZjID0gc3RjX211bHRpcGxpZXJzW3RtcF07Ci0JdG1wICA9IChmcnFjciAmIDB4NDAwMCkgID4+IDEyOwotCXRtcCB8PSAoZnJxY3IgJiAweDAwMGMpID4+IDI7Ci0JKmlmYyA9IGlmY19kaXZpc29yc1t0bXBdOwotCXRtcCAgPSAoZnJxY3IgJiAweDIwMDApID4+IDExOwotCXRtcCB8PSBmcnFjciAmIDB4MDAwMzsKLQkqcGZjID0gcGZjX2Rpdmlzb3JzW3RtcF07Ci0jZW5kaWYKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzE4MCkKLQkqaWZjID0gaWZjX2Rpdmlzb3JzWyhmcnFjcj4+IDIwKSAmIDB4MDAwN107Ci0JKmJmYyA9IGJmY19kaXZpc29yc1soZnJxY3I+PiAxMikgJiAweDAwMDddOwotCSpwZmMgPSBwZmNfZGl2aXNvcnNbZnJxY3IgJiAweDAwMDddOwotI2Vsc2UKLQkqaWZjID0gaWZjX2Rpdmlzb3JzWyhmcnFjciA+PiA2KSAmIDB4MDAwN107Ci0JKmJmYyA9IGJmY19kaXZpc29yc1soZnJxY3IgPj4gMykgJiAweDAwMDddOwotCSpwZmMgPSBwZmNfZGl2aXNvcnNbZnJxY3IgJiAweDAwMDddOwotI2VuZGlmCi0jZW5kaWYKLX0KLQotLyoKLSAqIFRoaXMgYml0IG9mIHVnbGluZXNzIGJ1aWxkcyB1cCBhY2Nlc3NvciByb3V0aW5lcyB0byBnZXQgYXQgYm90aAotICogdGhlIGRpdmlzb3JzIGFuZCB0aGUgcGh5c2ljYWwgdmFsdWVzLgotICovCi0jZGVmaW5lIF9GUkVRX1RBQkxFKHgpIFwKLQl1bnNpZ25lZCBpbnQgZ2V0XyMjeCMjX2Rpdmlzb3IodW5zaWduZWQgaW50IHZhbHVlKQlcCi0JCXsgcmV0dXJuIHgjI19kaXZpc29yc1t2YWx1ZV07IH0JCQlcCi0JCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgZ2V0XyMjeCMjX3ZhbHVlKHVuc2lnbmVkIGludCBkaXZpc29yKQlcCi0JCXsgcmV0dXJuIHgjI192YWx1ZXNbKGRpdmlzb3IgLSAxKV07IH0KLQotX0ZSRVFfVEFCTEUoaWZjKTsKLV9GUkVRX1RBQkxFKGJmYyk7Ci1fRlJFUV9UQUJMRShwZmMpOwotCi0jaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxCi0KLS8qCi0gKiBUaGUgU1Q0MCBkaXZpc29ycyBhcmUgdG90YWxseSBkaWZmZXJlbnQgc28gd2Ugc2V0IHRoZSBjcHUgZGF0YQotICogY2xvY2tzIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobQotICoKLSAqIEkndmUganVzdCBwbHVnZ2VkIHRoaXMgZnJvbSB0aGUgMi40IGNvZGUKLSAqCS0gQWxleCBCZW5uZWUgPGtlcm5lbC1oYWNrZXJAYmVubmVlLmNvbT4KLSAqLwotI2RlZmluZSBDQ05fUFZSX0NISVBfU0hJRlQgMjQKLSNkZWZpbmUgQ0NOX1BWUl9DSElQX01BU0sgIDB4ZmYKLSNkZWZpbmUgQ0NOX1BWUl9DSElQX1NUNDBTVEIxIDB4NAotCi0KLXN0cnVjdCBmcnFjcl9kYXRhIHsKLQl1bnNpZ25lZCBzaG9ydCBmcnFjcjsKLQotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGNoYXIgbXVsdGlwbGllcjsKLQkJdW5zaWduZWQgY2hhciBkaXZpc29yOwotCX0gZmFjdG9yWzNdOwotfTsKLQotc3RhdGljIHN0cnVjdCBmcnFjcl9kYXRhIHN0NDBfZnJxY3JfdGFibGVbXSA9IHsKLQl7IDB4MDAwLCB7ezEsMX0sIHsxLDF9LCB7MSwyfX19LAotCXsgMHgwMDIsIHt7MSwxfSwgezEsMX0sIHsxLDR9fX0sCi0JeyAweDAwNCwge3sxLDF9LCB7MSwxfSwgezEsOH19fSwKLQl7IDB4MDA4LCB7ezEsMX0sIHsxLDJ9LCB7MSwyfX19LAotCXsgMHgwMEEsIHt7MSwxfSwgezEsMn0sIHsxLDR9fX0sCi0JeyAweDAwQywge3sxLDF9LCB7MSwyfSwgezEsOH19fSwKLQl7IDB4MDExLCB7ezEsMX0sIHsyLDN9LCB7MSw2fX19LAotCXsgMHgwMTMsIHt7MSwxfSwgezIsM30sIHsxLDN9fX0sCi0JeyAweDAxQSwge3sxLDF9LCB7MSwyfSwgezEsNH19fSwKLQl7IDB4MDFDLCB7ezEsMX0sIHsxLDJ9LCB7MSw4fX19LAotCXsgMHgwMjMsIHt7MSwxfSwgezIsM30sIHsxLDN9fX0sCi0JeyAweDAyQywge3sxLDF9LCB7MSwyfSwgezEsOH19fSwKLQl7IDB4MDQ4LCB7ezEsMn0sIHsxLDJ9LCB7MSw0fX19LAotCXsgMHgwNEEsIHt7MSwyfSwgezEsMn0sIHsxLDZ9fX0sCi0JeyAweDA0Qywge3sxLDJ9LCB7MSwyfSwgezEsOH19fSwKLQl7IDB4MDVBLCB7ezEsMn0sIHsxLDN9LCB7MSw2fX19LAotCXsgMHgwNUMsIHt7MSwyfSwgezEsM30sIHsxLDZ9fX0sCi0JeyAweDA2Mywge3sxLDJ9LCB7MSw0fSwgezEsNH19fSwKLQl7IDB4MDZDLCB7ezEsMn0sIHsxLDR9LCB7MSw4fX19LAotCXsgMHgwOTEsIHt7MSwzfSwgezEsM30sIHsxLDZ9fX0sCi0JeyAweDA5Mywge3sxLDN9LCB7MSwzfSwgezEsNn19fSwKLQl7IDB4MEEzLCB7ezEsM30sIHsxLDZ9LCB7MSw2fX19LAotCXsgMHgwREEsIHt7MSw0fSwgezEsNH0sIHsxLDh9fX0sCi0JeyAweDBEQywge3sxLDR9LCB7MSw0fSwgezEsOH19fSwKLQl7IDB4MEVDLCB7ezEsNH0sIHsxLDh9LCB7MSw4fX19LAotCXsgMHgxMjMsIHt7MSw0fSwgezEsNH0sIHsxLDh9fX0sCi0JeyAweDE2Qywge3sxLDR9LCB7MSw4fSwgezEsOH19fSwKLX07Ci0KLXN0cnVjdCBtZW1jbGtfZGF0YSB7Ci0JdW5zaWduZWQgY2hhciBtdWx0aXBsaWVyOwotCXVuc2lnbmVkIGNoYXIgZGl2aXNvcjsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVtY2xrX2RhdGEgc3Q0MF9tZW1jbGtfdGFibGVbOF0gPSB7Ci0JezEsMX0sCS8vIDAwMAotCXsxLDJ9LAkvLyAwMDEKLQl7MSwzfSwJLy8gMDEwCi0JezIsM30sCS8vIDAxMQotCXsxLDR9LAkvLyAxMDAKLQl7MSw2fSwJLy8gMTAxCi0JezEsOH0sCS8vIDExMAotCXsxLDh9CS8vIDExMQotfTsKLQotc3RhdGljIHZvaWQgc3Q0MF9zcGVjaWZpY190aW1lX2luaXQodW5zaWduZWQgaW50IG1vZHVsZV9jbG9jaywgdW5zaWduZWQgc2hvcnQgZnJxY3IpCi17Ci0JdW5zaWduZWQgaW50IGNwdV9jbG9jaywgbWFzdGVyX2Nsb2NrLCBidXNfY2xvY2ssIG1lbW9yeV9jbG9jazsKLQlzdHJ1Y3QgZnJxY3JfZGF0YSAqZDsKLQlpbnQgYTsKLQl1bnNpZ25lZCBsb25nIG1lbWNsa2NyOwotCXN0cnVjdCBtZW1jbGtfZGF0YSAqZTsKLQotCWZvciAoYSA9IDA7IGEgPCBBUlJBWV9TSVpFKHN0NDBfZnJxY3JfdGFibGUpOyBhKyspIHsKLQkJZCA9ICZzdDQwX2ZycWNyX3RhYmxlW2FdOwotCi0JCWlmIChkLT5mcnFjciA9PSAoZnJxY3IgJiAweDFmZikpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoYSA9PSBBUlJBWV9TSVpFKHN0NDBfZnJxY3JfdGFibGUpKSB7Ci0JCWQgPSBzdDQwX2ZycWNyX3RhYmxlOwotCi0JCXByaW50aygiRVJST1I6IFVucmVjb2duaXNlZCBGUlFDUiB2YWx1ZSAoMHgleCksICIKLQkJICAgICAgICJ1c2luZyBkZWZhdWx0IG11bHRpcGxpZXJzXG4iLCBmcnFjcik7Ci0JfQotCi0JbWVtY2xrY3IgPSBjdHJsX2lubChDTE9DS0dFTl9NRU1DTEtDUik7Ci0JZSA9ICZzdDQwX21lbWNsa190YWJsZVttZW1jbGtjciAmIE1FTUNMS0NSX1JBVElPX01BU0tdOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2sgbXVsdGlwbGllcnM6IENQVTogJWQvJWQgQnVzOiAlZC8lZCAiCi0JICAgICAgICJNZW06ICVkLyVkIFBlcmlwaDogJWQvJWRcbiIsCi0JICAgICAgIGQtPmZhY3RvclswXS5tdWx0aXBsaWVyLCBkLT5mYWN0b3JbMF0uZGl2aXNvciwKLQkgICAgICAgZC0+ZmFjdG9yWzFdLm11bHRpcGxpZXIsIGQtPmZhY3RvclsxXS5kaXZpc29yLAotCSAgICAgICBlLT5tdWx0aXBsaWVyLCAgICAgICAgICAgZS0+ZGl2aXNvciwKLQkgICAgICAgZC0+ZmFjdG9yWzJdLm11bHRpcGxpZXIsIGQtPmZhY3RvclsyXS5kaXZpc29yKTsKLQotCW1hc3Rlcl9jbG9jayA9IG1vZHVsZV9jbG9jayAqIGQtPmZhY3RvclsyXS5kaXZpc29yCi0JCQkJICAgIC8gZC0+ZmFjdG9yWzJdLm11bHRpcGxpZXI7Ci0JYnVzX2Nsb2NrICAgID0gbWFzdGVyX2Nsb2NrICogZC0+ZmFjdG9yWzFdLm11bHRpcGxpZXIKLQkJCQkgICAgLyBkLT5mYWN0b3JbMV0uZGl2aXNvcjsKLQltZW1vcnlfY2xvY2sgPSBtYXN0ZXJfY2xvY2sgKiBlLT5tdWx0aXBsaWVyCi0JCQkJICAgIC8gZS0+ZGl2aXNvcjsKLQljcHVfY2xvY2sgICAgPSBtYXN0ZXJfY2xvY2sgKiBkLT5mYWN0b3JbMF0ubXVsdGlwbGllcgotCQkJCSAgICAvIGQtPmZhY3RvclswXS5kaXZpc29yOwotCi0JY3VycmVudF9jcHVfZGF0YS5jcHVfY2xvY2sgICAgPSBjcHVfY2xvY2s7Ci0JY3VycmVudF9jcHVfZGF0YS5tYXN0ZXJfY2xvY2sgPSBtYXN0ZXJfY2xvY2s7Ci0JY3VycmVudF9jcHVfZGF0YS5idXNfY2xvY2sgICAgPSBidXNfY2xvY2s7Ci0JY3VycmVudF9jcHVfZGF0YS5tZW1vcnlfY2xvY2sgPSBtZW1vcnlfY2xvY2s7Ci0JY3VycmVudF9jcHVfZGF0YS5tb2R1bGVfY2xvY2sgPSBtb2R1bGVfY2xvY2s7Ci19Ci0jZW5kaWYKIAogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHRpbWVyX2ZyZXEgPSAwOwotCXVuc2lnbmVkIGludCBpZmMsIHBmYywgYmZjOwotCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7Ci0jaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxCi0JdW5zaWduZWQgbG9uZyBwdnI7Ci0JdW5zaWduZWQgc2hvcnQgZnJxY3I7Ci0jZW5kaWYKLQogCWlmIChib2FyZF90aW1lX2luaXQpCiAJCWJvYXJkX3RpbWVfaW5pdCgpOwogCi0JLyoKLQkgKiBJZiB3ZSBkb24ndCBoYXZlIGFuIFJUQyAoc3VjaCBhcyB3aXRoIHRoZSBTSDczMDApLCBkb24ndCBhdHRlbXB0IHRvCi0JICogcHJvYmUgdGhlIHRpbWVyIGZyZXF1ZW5jeS4gUmVseSBvbiBhbiBlaXRoZXIgaGFyZGNvZGVkIHBlcmlwaGVyYWwKLQkgKiBjbG9jayB2YWx1ZSwgb3Igb24gdGhlIHNoX3BjbGsgY29tbWFuZCBsaW5lIG9wdGlvbi4gTm90ZSB0aGF0IHdlCi0JICogc3RpbGwgbmVlZCB0byBoYXZlIENPTkZJR19TSF9QQ0xLX0ZSRVEgc2V0IGluIG9yZGVyIGZvciB0aGluZ3MgbGlrZQotCSAqIENMT0NLX1RJQ0tfUkFURSB0byBiZSBzYW5lLgotCSAqLwotCWN1cnJlbnRfY3B1X2RhdGEubW9kdWxlX2Nsb2NrID0gc2hfcGNsa19mcmVxOwotCi0jaWZkZWYgQ09ORklHX1NIX1BDTEtfQ0FMQwotCS8qIFhYWDogU3dpdGNoIHRoaXMgb3ZlciB0byBhIG1vcmUgZ2VuZXJpYyB0ZXN0LiAqLwotCXsKLQkJdW5zaWduZWQgaW50IGZyZXE7Ci0KLQkJLyoKLQkJICogSWYgd2UndmUgc3BlY2lmaWVkIGEgcGVyaXBoZXJhbCBjbG9jayBmcmVxdWVuY3ksIGFuZCB3ZSBoYXZlCi0JCSAqIGFuIFJUQywgY29tcGFyZSBpdCBhZ2FpbnN0IHRoZSBhdXRvZGV0ZWN0ZWQgdmFsdWUuIENvbXBsYWluCi0JCSAqIGlmIHRoZXJlJ3MgYSBtaXNtYXRjaC4KLQkJICovCi0JCXRpbWVyX2ZyZXEgPSBnZXRfdGltZXJfZnJlcXVlbmN5KCk7Ci0JCWZyZXEgPSB0aW1lcl9mcmVxICogNDsKLQotCQlpZiAoc2hfcGNsa19mcmVxICYmIChzaF9wY2xrX2ZyZXEvMTAwKjk5ID4gZnJlcSB8fCBzaF9wY2xrX2ZyZXEvMTAwKjEwMSA8IGZyZXEpKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNhbGN1bGF0ZWQgcGVyaXBoZXJhbCBjbG9jayB2YWx1ZSAiCi0JCQkgICAgICAgIiVkIGRpZmZlcnMgZnJvbSBzaF9wY2xrIHZhbHVlICVkLCBmaXhpbmcuLlxuIiwKLQkJCSAgICAgICBmcmVxLCBzaF9wY2xrX2ZyZXEpOwotCQkJY3VycmVudF9jcHVfZGF0YS5tb2R1bGVfY2xvY2sgPSBmcmVxOwotCQl9Ci0JfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MFNUQjEKLQkvKiBYWFg6IFVwZGF0ZSBTVDQwIGNvZGUgdG8gdXNlIGJvYXJkX3RpbWVfaW5pdCgpICovCi0JcHZyID0gY3RybF9pbmwoQ0NOX1BWUik7Ci0JZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7Ci0JcHJpbnRrKCJ0aW1lLmMgU1Q0MCBQcm9iZTogUFZSICUwOGx4LCBGUlFDUiAlMDRoeFxuIiwgcHZyLCBmcnFjcik7Ci0KLQlpZiAoKChwdnIgPj4gQ0NOX1BWUl9DSElQX1NISUZUKSAmIENDTl9QVlJfQ0hJUF9NQVNLKSA9PSBDQ05fUFZSX0NISVBfU1Q0MFNUQjEpCi0JCXN0NDBfc3BlY2lmaWNfdGltZV9pbml0KGN1cnJlbnRfY3B1X2RhdGEubW9kdWxlX2Nsb2NrLCBmcnFjcik7Ci0JZWxzZQotI2VuZGlmCi0JCWdldF9jdXJyZW50X2ZyZXF1ZW5jeV9kaXZpc29ycygmaWZjLCAmYmZjLCAmcGZjKTsKKwljbGtfaW5pdCgpOwogCiAJaWYgKHJ0Y19nZXRfdGltZSkgewogCQlydGNfZ2V0X3RpbWUoJnh0aW1lKTsKQEAgLTU5NCw1MSArMTc5LDEyIEBACiAgICAgICAgIHNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOwogCi0JaWYgKGJvYXJkX3RpbWVyX3NldHVwKSB7Ci0JCWJvYXJkX3RpbWVyX3NldHVwKCZpcnEwKTsKLQl9IGVsc2UgewotCQlzZXR1cF9pcnEoVElNRVJfSVJRLCAmaXJxMCk7Ci0JfQotCiAJLyoKLQkgKiBmb3IgU1Q0MCBjaGlwcyB0aGUgY3VycmVudF9jcHVfZGF0YSBzaG91bGQgYWxyZWFkeSBiZSBzZXQKLQkgKiBzbyBub3QgaGF2aW5nIHZhbGlkIHBmYy9iZmMvaWZjIHNob3VsZG4ndCBiZSBhIHByb2JsZW0KKwkgKiBGaW5kIHRoZSB0aW1lciB0byB1c2UgYXMgdGhlIHN5c3RlbSB0aW1lciwgaXQgd2lsbCBiZQorCSAqIGluaXRpYWxpemVkIGZvciB1cy4KIAkgKi8KLQlpZiAoIWN1cnJlbnRfY3B1X2RhdGEubWFzdGVyX2Nsb2NrKQotCQljdXJyZW50X2NwdV9kYXRhLm1hc3Rlcl9jbG9jayA9IGN1cnJlbnRfY3B1X2RhdGEubW9kdWxlX2Nsb2NrICogcGZjOwotCWlmICghY3VycmVudF9jcHVfZGF0YS5idXNfY2xvY2spCi0JCWN1cnJlbnRfY3B1X2RhdGEuYnVzX2Nsb2NrID0gY3VycmVudF9jcHVfZGF0YS5tYXN0ZXJfY2xvY2sgLyBiZmM7Ci0JaWYgKCFjdXJyZW50X2NwdV9kYXRhLmNwdV9jbG9jaykKLQkJY3VycmVudF9jcHVfZGF0YS5jcHVfY2xvY2sgPSBjdXJyZW50X2NwdV9kYXRhLm1hc3Rlcl9jbG9jayAvIGlmYzsKLQotCXByaW50aygiQ1BVIGNsb2NrOiAlZC4lMDJkTUh6XG4iLAotCSAgICAgICAoY3VycmVudF9jcHVfZGF0YS5jcHVfY2xvY2sgLyAxMDAwMDAwKSwKLQkgICAgICAgKGN1cnJlbnRfY3B1X2RhdGEuY3B1X2Nsb2NrICUgMTAwMDAwMCkvMTAwMDApOwotCXByaW50aygiQnVzIGNsb2NrOiAlZC4lMDJkTUh6XG4iLAotCSAgICAgICAoY3VycmVudF9jcHVfZGF0YS5idXNfY2xvY2sgLyAxMDAwMDAwKSwKLQkgICAgICAgKGN1cnJlbnRfY3B1X2RhdGEuYnVzX2Nsb2NrICUgMTAwMDAwMCkvMTAwMDApOwotI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMQotCXByaW50aygiTWVtb3J5IGNsb2NrOiAlZC4lMDJkTUh6XG4iLAotCSAgICAgICAoY3VycmVudF9jcHVfZGF0YS5tZW1vcnlfY2xvY2sgLyAxMDAwMDAwKSwKLQkgICAgICAgKGN1cnJlbnRfY3B1X2RhdGEubWVtb3J5X2Nsb2NrICUgMTAwMDAwMCkvMTAwMDApOwotI2VuZGlmCi0JcHJpbnRrKCJNb2R1bGUgY2xvY2s6ICVkLiUwMmRNSHpcbiIsCi0JICAgICAgIChjdXJyZW50X2NwdV9kYXRhLm1vZHVsZV9jbG9jayAvIDEwMDAwMDApLAotCSAgICAgICAoY3VycmVudF9jcHVfZGF0YS5tb2R1bGVfY2xvY2sgJSAxMDAwMDAwKS8xMDAwMCk7Ci0KLQlpbnRlcnZhbCA9IChjdXJyZW50X2NwdV9kYXRhLm1vZHVsZV9jbG9jay80ICsgSFovMikgLyBIWjsKLQotCXByaW50aygiSW50ZXJ2YWwgPSAlbGRcbiIsIGludGVydmFsKTsKLQotCS8qIFN0YXJ0IFRNVTAgKi8KLQljdHJsX291dGIoMCwgVE1VX1RTVFIpOwotI2lmICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApCi0JY3RybF9vdXRiKFRNVV9UT0NSX0lOSVQsIFRNVV9UT0NSKTsKLSNlbmRpZgotCWN0cmxfb3V0dyhUTVUwX1RDUl9JTklULCBUTVUwX1RDUik7Ci0JY3RybF9vdXRsKGludGVydmFsLCBUTVUwX1RDT1IpOwotCWN0cmxfb3V0bChpbnRlcnZhbCwgVE1VMF9UQ05UKTsKLQljdHJsX291dGIoVE1VX1RTVFJfSU5JVCwgVE1VX1RTVFIpOworCXN5c190aW1lciA9IGdldF9zeXNfdGltZXIoKTsKKwlwcmludGsoS0VSTl9JTkZPICJVc2luZyAlcyBmb3Igc3lzdGVtIHRpbWVyXG4iLCBzeXNfdGltZXItPm5hbWUpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0hfS0dEQikKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MWE2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgdmFyaW91cyBMaW51eC9TdXBlckggdGltZXJzCisjCisKK29iai15CTo9IHRpbWVyLm8KKworb2JqLSQoQ09ORklHX1NIX1RNVSkJCSs9IHRpbWVyLXRtdS5vCisKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE2NGNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jIC0gVE1VIFRpbWVyIFN1cHBvcnQKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1ICBQYXVsIE11bmR0CisgKgorICogVE1VIGhhbmRsaW5nIGNvZGUgaGFja2VkIG91dCBvZiBhcmNoL3NoL2tlcm5lbC90aW1lLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5ICBUZXRzdXlhIE9rYWRhICYgTmlpYmUgWXV0YWthCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwICBQaGlsaXBwIFJ1bXBmIDxwcnVtcGZAdHV4Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgIE0uIFIuIEJyb3duICA8bXJicm93bkBsaW51eC1zaC5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CisjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL3J0Yy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKworI2RlZmluZSBUTVVfVE9DUl9JTklUCTB4MDAKKyNkZWZpbmUgVE1VMF9UQ1JfSU5JVAkweDAwMjAKKyNkZWZpbmUgVE1VX1RTVFJfSU5JVAkxCisKKyNkZWZpbmUgVE1VMF9UQ1JfQ0FMSUIJMHgwMDAwCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodG11MF9sb2NrKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG11X3RpbWVyX2dldF9vZmZzZXQodm9pZCkKK3sKKwlpbnQgY291bnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN0YXRpYyBpbnQgY291bnRfcCA9IDB4N2ZmZmZmZmY7ICAgIC8qIGZvciB0aGUgZmlyc3QgY2FsbCBhZnRlciBib290ICovCisJc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19wID0gMDsKKworCS8qCisJICogY2FjaGUgdm9sYXRpbGUgamlmZmllcyB0ZW1wb3JhcmlseTsgd2UgaGF2ZSBJUlFzIHR1cm5lZCBvZmYuCisJICovCisJdW5zaWduZWQgbG9uZyBqaWZmaWVzX3Q7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdG11MF9sb2NrLCBmbGFncyk7CisJLyogdGltZXIgY291bnQgbWF5IHVuZGVyZmxvdyByaWdodCBoZXJlICovCisJY291bnQgPSBjdHJsX2lubChUTVUwX1RDTlQpOwkvKiByZWFkIHRoZSBsYXRjaGVkIGNvdW50ICovCisKKwlqaWZmaWVzX3QgPSBqaWZmaWVzOworCisJLyoKKwkgKiBhdm9pZGluZyB0aW1lciBpbmNvbnNpc3RlbmNpZXMgKHRoZXkgYXJlIHJhcmUsIGJ1dCB0aGV5IGhhcHBlbikuLi4KKwkgKiB0aGVyZSBpcyBvbmUga2luZCBvZiBwcm9ibGVtIHRoYXQgbXVzdCBiZSBhdm9pZGVkIGhlcmU6CisJICogIDEuIHRoZSB0aW1lciBjb3VudGVyIHVuZGVyZmxvd3MKKwkgKi8KKworCWlmIChqaWZmaWVzX3QgPT0gamlmZmllc19wKSB7CisJCWlmIChjb3VudCA+IGNvdW50X3ApIHsKKwkJCS8qIHRoZSBudXRjYXNlICovCisJCQlpZiAoY3RybF9pbncoVE1VMF9UQ1IpICYgMHgxMDApIHsgLyogQ2hlY2sgVU5GIGJpdCAqLworCQkJCWNvdW50IC09IExBVENIOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoIiVzICgpOiBoYXJkd2FyZSB0aW1lciBwcm9ibGVtP1xuIiwKKwkJCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJCX0KKwkJfQorCX0gZWxzZQorCQlqaWZmaWVzX3AgPSBqaWZmaWVzX3Q7CisKKwljb3VudF9wID0gY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdG11MF9sb2NrLCBmbGFncyk7CisKKwljb3VudCA9ICgoTEFUQ0gtMSkgLSBjb3VudCkgKiBUSUNLX1NJWkU7CisJY291bnQgPSAoY291bnQgKyBMQVRDSC8yKSAvIExBVENIOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdG11X3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgdGltZXJfc3RhdHVzOworCisJLyogQ2xlYXIgVU5GIGJpdCAqLworCXRpbWVyX3N0YXR1cyA9IGN0cmxfaW53KFRNVTBfVENSKTsKKwl0aW1lcl9zdGF0dXMgJj0gfjB4MTAwOworCWN0cmxfb3V0dyh0aW1lcl9zdGF0dXMsIFRNVTBfVENSKTsKKworCS8qCisJICogSGVyZSB3ZSBhcmUgaW4gdGhlIHRpbWVyIGlycSBoYW5kbGVyLiBXZSBqdXN0IGhhdmUgaXJxcyBsb2NhbGx5CisJICogZGlzYWJsZWQgYnV0IHdlIGRvbid0IGtub3cgaWYgdGhlIHRpbWVyX2JoIGlzIHJ1bm5pbmcgb24gdGhlIG90aGVyCisJICogQ1BVLiBXZSBuZWVkIHRvIGF2b2lkIHRvIFNNUCByYWNlIHdpdGggaXQuIE5PVEU6IHdlIGRvbicgdCBuZWVkCisJICogdGhlIGlycSB2ZXJzaW9uIG9mIHdyaXRlX2xvY2sgYmVjYXVzZSBhcyBqdXN0IHNhaWQgd2UgaGF2ZSBpcnEKKwkgKiBsb2NhbGx5IGRpc2FibGVkLiAtYXJjYQorCSAqLworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCWhhbmRsZV90aW1lcl90aWNrKHJlZ3MpOworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRtdV9pcnEgPSB7CisJLm5hbWUJCT0gInRpbWVyIiwKKwkuaGFuZGxlcgk9IHRtdV90aW1lcl9pbnRlcnJ1cHQsCisJLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkubWFzawkJPSBDUFVfTUFTS19OT05FLAorfTsKKworLyoKKyAqIEhhaCEgIFdlJ2xsIHNlZSBpZiB0aGlzIHdvcmtzIChzd2l0Y2hpbmcgZnJvbSB1c2VjcyB0byBuc2VjcykuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRtdV90aW1lcl9nZXRfZnJlcXVlbmN5KHZvaWQpCit7CisJdTMyIGZyZXE7CisJc3RydWN0IHRpbWVzcGVjIHRzMSwgdHMyOworCXVuc2lnbmVkIGxvbmcgZGlmZl9uc2VjOworCXVuc2lnbmVkIGxvbmcgZmFjdG9yOworCisJLyogU2V0dXAgdGhlIHRpbWVyOiAgV2UgZG9uJ3Qgd2FudCB0byBnZW5lcmF0ZSBpbnRlcnJ1cHRzLCBqdXN0CisJICogaGF2ZSBpdCBjb3VudCBkb3duIGF0IGl0cyBuYXR1cmFsIHJhdGUuCisJICovCisJY3RybF9vdXRiKDAsIFRNVV9UU1RSKTsKKyNpZiAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKQorCWN0cmxfb3V0YihUTVVfVE9DUl9JTklULCBUTVVfVE9DUik7CisjZW5kaWYKKwljdHJsX291dHcoVE1VMF9UQ1JfQ0FMSUIsIFRNVTBfVENSKTsKKwljdHJsX291dGwoMHhmZmZmZmZmZiwgVE1VMF9UQ09SKTsKKwljdHJsX291dGwoMHhmZmZmZmZmZiwgVE1VMF9UQ05UKTsKKworCXJ0Y19nZXRfdGltZSgmdHMyKTsKKworCWRvIHsKKwkJcnRjX2dldF90aW1lKCZ0czEpOworCX0gd2hpbGUgKHRzMS50dl9uc2VjID09IHRzMi50dl9uc2VjICYmIHRzMS50dl9zZWMgPT0gdHMyLnR2X3NlYyk7CisKKwkvKiBhY3R1YWxseSBzdGFydCB0aGUgdGltZXIgKi8KKwljdHJsX291dGIoVE1VX1RTVFJfSU5JVCwgVE1VX1RTVFIpOworCisJZG8geworCQlydGNfZ2V0X3RpbWUoJnRzMik7CisJfSB3aGlsZSAodHMxLnR2X25zZWMgPT0gdHMyLnR2X25zZWMgJiYgdHMxLnR2X3NlYyA9PSB0czIudHZfc2VjKTsKKworCWZyZXEgPSAweGZmZmZmZmZmIC0gY3RybF9pbmwoVE1VMF9UQ05UKTsKKwlpZiAodHMyLnR2X25zZWMgPCB0czEudHZfbnNlYykgeworCQl0czIudHZfbnNlYyArPSAxMDAwMDAwMDAwOworCQl0czIudHZfc2VjLS07CisJfQorCisJZGlmZl9uc2VjID0gKHRzMi50dl9zZWMgLSB0czEudHZfc2VjKSAqIDEwMDAwMDAwMDAgKyAodHMyLnR2X25zZWMgLSB0czEudHZfbnNlYyk7CisKKwkvKiB0aGlzIHNob3VsZCB3b3JrIHdlbGwgaWYgdGhlIFJUQyBoYXMgYSBwcmVjaXNpb24gb2YgbiBIeiwgd2hlcmUKKwkgKiBuIGlzIGFuIGludGVnZXIuICBJIGRvbid0IHRoaW5rIHdlIGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIG90aGVyCisJICogY2FzZXMuICovCisJZmFjdG9yID0gKDEwMDAwMDAwMDAgKyBkaWZmX25zZWMvMikgLyBkaWZmX25zZWM7CisKKwlpZiAoZmFjdG9yICogZGlmZl9uc2VjID4gMTEwMDAwMDAwMCB8fAorCSAgICBmYWN0b3IgKiBkaWZmX25zZWMgPCAgOTAwMDAwMDAwKQorCQlwYW5pYygid2VpcmQgUlRDIChkaWZmX25zZWMgJWxkKSIsIGRpZmZfbnNlYyk7CisKKwlyZXR1cm4gZnJlcSAqIGZhY3RvcjsKK30KKworc3RhdGljIHZvaWQgdG11X2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1OCBkaXZpc29yID0gVE1VMF9UQ1JfSU5JVCAmIDB4NzsKKwljdHJsX291dHcoVE1VMF9UQ1JfSU5JVCwgVE1VMF9UQ1IpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKDQgPDwgKGRpdmlzb3IgPDwgMSkpOworfQorCitzdGF0aWMgdm9pZCB0bXVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdTggZGl2aXNvciA9IGN0cmxfaW53KFRNVTBfVENSKSAmIDB4NzsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICg0IDw8IChkaXZpc29yIDw8IDEpKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHRtdV9jbGtfb3BzID0geworCS5pbml0CQk9IHRtdV9jbGtfaW5pdCwKKwkucmVjYWxjCQk9IHRtdV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdG11MF9jbGsgPSB7CisJLm5hbWUJCT0gInRtdTBfY2xrIiwKKwkub3BzCQk9ICZ0bXVfY2xrX29wcywKK307CisKK3N0YXRpYyBpbnQgdG11X3RpbWVyX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGludGVydmFsOworCisJc2V0dXBfaXJxKFRJTUVSX0lSUSwgJnRtdV9pcnEpOworCisJdG11MF9jbGsucGFyZW50ID0gY2xrX2dldCgibW9kdWxlX2NsayIpOworCisJLyogU3RhcnQgVE1VMCAqLworCWN0cmxfb3V0YigwLCBUTVVfVFNUUik7CisjaWYgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCkgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkKKwljdHJsX291dGIoVE1VX1RPQ1JfSU5JVCwgVE1VX1RPQ1IpOworI2VuZGlmCisKKwljbGtfcmVnaXN0ZXIoJnRtdTBfY2xrKTsKKwljbGtfZW5hYmxlKCZ0bXUwX2Nsayk7CisKKwlpbnRlcnZhbCA9IChjbGtfZ2V0X3JhdGUoJnRtdTBfY2xrKSArIEhaIC8gMikgLyBIWjsKKwlwcmludGsoS0VSTl9JTkZPICJJbnRlcnZhbCA9ICVsZFxuIiwgaW50ZXJ2YWwpOworCisJY3RybF9vdXRsKGludGVydmFsLCBUTVUwX1RDT1IpOworCWN0cmxfb3V0bChpbnRlcnZhbCwgVE1VMF9UQ05UKTsKKworCWN0cmxfb3V0YihUTVVfVFNUUl9JTklULCBUTVVfVFNUUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHN5c190aW1lcl9vcHMgdG11X3RpbWVyX29wcyA9IHsKKwkuaW5pdAkJPSB0bXVfdGltZXJfaW5pdCwKKwkuZ2V0X2ZyZXF1ZW5jeQk9IHRtdV90aW1lcl9nZXRfZnJlcXVlbmN5LAorCS5nZXRfb2Zmc2V0CT0gdG11X3RpbWVyX2dldF9vZmZzZXQsCit9OworCitzdHJ1Y3Qgc3lzX3RpbWVyIHRtdV90aW1lciA9IHsKKwkubmFtZQk9ICJ0bXUiLAorCS5vcHMJPSAmdG11X3RpbWVyX29wcywKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxZjYzMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXIuYyAtIENvbW1vbiB0aW1lciBjb2RlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyICpzeXNfdGltZXJzW10gX19pbml0ZGF0YSA9IHsKKyNpZmRlZiBDT05GSUdfU0hfVE1VCisJJnRtdV90aW1lciwKKyNlbmRpZgorCU5VTEwsCit9OworCitzdGF0aWMgY2hhciB0aW1lcl9vdmVycmlkZVsxMF0gX19pbml0ZGF0YTsKK3N0YXRpYyBpbnQgX19pbml0IHRpbWVyX3NldHVwKGNoYXIgKnN0cikKK3sKKwlpZiAoc3RyKQorCQlzdHJsY3B5KHRpbWVyX292ZXJyaWRlLCBzdHIsIHNpemVvZih0aW1lcl9vdmVycmlkZSkpOworCXJldHVybiAxOworfQorX19zZXR1cCgidGltZXI9IiwgdGltZXJfc2V0dXApOworCitzdHJ1Y3Qgc3lzX3RpbWVyICpnZXRfc3lzX3RpbWVyKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzeXNfdGltZXJzKTsgaSsrKSB7CisJCXN0cnVjdCBzeXNfdGltZXIgKnQgPSBzeXNfdGltZXJzW2ldOworCisJCWlmICh1bmxpa2VseSghdCkpCisJCQlicmVhazsKKwkJaWYgKHVubGlrZWx5KHRpbWVyX292ZXJyaWRlWzBdKSkKKwkJCWlmICgoc3RyY21wKHRpbWVyX292ZXJyaWRlLCB0LT5uYW1lKSAhPSAwKSkKKwkJCQljb250aW51ZTsKKwkJaWYgKGxpa2VseSh0LT5vcHMtPmluaXQoKSA9PSAwKSkKKwkJCXJldHVybiB0OworCX0KKworCXJldHVybiBOVUxMOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL0tjb25maWcgYi9hcmNoL3NoL21tL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI1ODZiMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vS2NvbmZpZwpAQCAtMCwwICsxLDIzMyBAQAorbWVudSAiUHJvY2Vzc29yIHNlbGVjdGlvbiIKKworIworIyBQcm9jZXNzb3IgZmFtaWxpZXMKKyMKK2NvbmZpZyBDUFVfU0gyCisJYm9vbAorCXNlbGVjdCBTSF9XUklURVRIUk9VR0gKKworY29uZmlnIENQVV9TSDMKKwlib29sCisJc2VsZWN0IENQVV9IQVNfSU5URVZUCisJc2VsZWN0IENQVV9IQVNfU1JfUkIKKworY29uZmlnIENQVV9TSDQKKwlib29sCisJc2VsZWN0IENQVV9IQVNfSU5URVZUCisJc2VsZWN0IENQVV9IQVNfU1JfUkIKKworY29uZmlnIENQVV9TSDRBCisJYm9vbAorCXNlbGVjdCBDUFVfU0g0CisJc2VsZWN0IENQVV9IQVNfSU5UQzJfSVJRCisKK2NvbmZpZyBDUFVfU1VCVFlQRV9TVDQwCisJYm9vbAorCXNlbGVjdCBDUFVfU0g0CisJc2VsZWN0IENQVV9IQVNfSU5UQzJfSVJRCisKKyMKKyMgUHJvY2Vzc29yIHN1YnR5cGVzCisjCisKK2NvbW1lbnQgIlNILTIgUHJvY2Vzc29yIFN1cHBvcnQiCisKK2NvbmZpZyBDUFVfU1VCVFlQRV9TSDc2MDQKKwlib29sICJTdXBwb3J0IFNINzYwNCBwcm9jZXNzb3IiCisJc2VsZWN0IENQVV9TSDIKKworY29tbWVudCAiU0gtMyBQcm9jZXNzb3IgU3VwcG9ydCIKKworY29uZmlnIENQVV9TVUJUWVBFX1NINzMwMAorCWJvb2wgIlN1cHBvcnQgU0g3MzAwIHByb2Nlc3NvciIKKwlzZWxlY3QgQ1BVX1NIMworCitjb25maWcgQ1BVX1NVQlRZUEVfU0g3NzA1CisJYm9vbCAiU3VwcG9ydCBTSDc3MDUgcHJvY2Vzc29yIgorCXNlbGVjdCBDUFVfU0gzCisJc2VsZWN0IENQVV9IQVNfUElOVF9JUlEKKworY29uZmlnIENQVV9TVUJUWVBFX1NINzcwNworCWJvb2wgIlN1cHBvcnQgU0g3NzA3IHByb2Nlc3NvciIKKwlzZWxlY3QgQ1BVX1NIMworCXNlbGVjdCBDUFVfSEFTX1BJTlRfSVJRCisJaGVscAorCSAgU2VsZWN0IFNINzcwNyBpZiB5b3UgaGF2ZSBhICA2MCBNaHogU0gtMyBIRDY0MTc3MDcgQ1BVLgorCitjb25maWcgQ1BVX1NVQlRZUEVfU0g3NzA4CisJYm9vbCAiU3VwcG9ydCBTSDc3MDggcHJvY2Vzc29yIgorCXNlbGVjdCBDUFVfU0gzCisJaGVscAorCSAgU2VsZWN0IFNINzcwOCBpZiB5b3UgaGF2ZSBhICA2MCBNaHogU0gtMyBIRDY0MTc3MDhTIG9yCisJICBpZiB5b3UgaGF2ZSBhIDEwMCBNaHogU0gtMyBIRDY0MTc3MDhSIENQVS4KKworY29uZmlnIENQVV9TVUJUWVBFX1NINzcwOQorCWJvb2wgIlN1cHBvcnQgU0g3NzA5IHByb2Nlc3NvciIKKwlzZWxlY3QgQ1BVX1NIMworCXNlbGVjdCBDUFVfSEFTX1BJTlRfSVJRCisJaGVscAorCSAgU2VsZWN0IFNINzcwOSBpZiB5b3UgaGF2ZSBhICA4MCBNaHogU0gtMyBIRDY0MTc3MDkgQ1BVLgorCitjb21tZW50ICJTSC00IFByb2Nlc3NvciBTdXBwb3J0IgorCitjb25maWcgQ1BVX1NVQlRZUEVfU0g3NzUwCisJYm9vbCAiU3VwcG9ydCBTSDc3NTAgcHJvY2Vzc29yIgorCXNlbGVjdCBDUFVfU0g0CisJaGVscAorCSAgU2VsZWN0IFNINzc1MCBpZiB5b3UgaGF2ZSBhIDIwMCBNaHogU0gtNCBIRDY0MTc3NTAgQ1BVLgorCitjb25maWcgQ1BVX1NVQlRZUEVfU0g3MDkxCisJYm9vbCAiU3VwcG9ydCBTSDcwOTEgcHJvY2Vzc29yIgorCXNlbGVjdCBDUFVfU0g0CisJc2VsZWN0IENQVV9TVUJUWVBFX1NINzc1MAorCWhlbHAKKwkgIFNlbGVjdCBTSDcwOTEgaWYgeW91IGhhdmUgYW4gU0gtNCBiYXNlZCBTZWdhIGRldmljZSAoc3VjaCBhcworCSAgdGhlIERyZWFtY2FzdCwgTmFvbWksIGFuZCBOYW9taSAyKS4KKworY29uZmlnIENQVV9TVUJUWVBFX1NINzc1MFIKKwlib29sICJTdXBwb3J0IFNINzc1MFIgcHJvY2Vzc29yIgorCXNlbGVjdCBDUFVfU0g0CisJc2VsZWN0IENQVV9TVUJUWVBFX1NINzc1MAorCitjb25maWcgQ1BVX1NVQlRZUEVfU0g3NzUwUworCWJvb2wgIlN1cHBvcnQgU0g3NzUwUyBwcm9jZXNzb3IiCisJc2VsZWN0IENQVV9TSDQKKwlzZWxlY3QgQ1BVX1NVQlRZUEVfU0g3NzUwCisKK2NvbmZpZyBDUFVfU1VCVFlQRV9TSDc3NTEKKwlib29sICJTdXBwb3J0IFNINzc1MSBwcm9jZXNzb3IiCisJc2VsZWN0IENQVV9TSDQKKwloZWxwCisJICBTZWxlY3QgU0g3NzUxIGlmIHlvdSBoYXZlIGEgMTY2IE1oeiBTSC00IEhENjQxNzc1MSBDUFUsCisJICBvciBpZiB5b3UgaGF2ZSBhIEhENjQxNzc1MVIgQ1BVLgorCitjb25maWcgQ1BVX1NVQlRZUEVfU0g3NzUxUgorCWJvb2wgIlN1cHBvcnQgU0g3NzUxUiBwcm9jZXNzb3IiCisJc2VsZWN0IENQVV9TSDQKKwlzZWxlY3QgQ1BVX1NVQlRZUEVfU0g3NzUxCisKK2NvbmZpZyBDUFVfU1VCVFlQRV9TSDc3NjAKKwlib29sICJTdXBwb3J0IFNINzc2MCBwcm9jZXNzb3IiCisJc2VsZWN0IENQVV9TSDQKKwlzZWxlY3QgQ1BVX0hBU19JTlRDMl9JUlEKKworY29uZmlnIENQVV9TVUJUWVBFX1NINF8yMDIKKwlib29sICJTdXBwb3J0IFNINC0yMDIgcHJvY2Vzc29yIgorCXNlbGVjdCBDUFVfU0g0CisKK2NvbW1lbnQgIlNUNDAgUHJvY2Vzc29yIFN1cHBvcnQiCisKK2NvbmZpZyBDUFVfU1VCVFlQRV9TVDQwU1RCMQorCWJvb2wgIlN1cHBvcnQgU1Q0MFNUQjEvU1Q0MFJBIHByb2Nlc3NvcnMiCisJc2VsZWN0IENQVV9TVUJUWVBFX1NUNDAKKwloZWxwCisJICBTZWxlY3QgU1Q0MFNUQjEgaWYgeW91IGhhdmUgYSBTVDQwUkEgQ1BVLgorCSAgVGhpcyB3YXMgcHJldmlvdXNseSBjYWxsZWQgdGhlIFNUNDBTVEIxLCBoZW5jZSB0aGUgb3B0aW9uIG5hbWUuCisKK2NvbmZpZyBDUFVfU1VCVFlQRV9TVDQwR1gxCisJYm9vbCAiU3VwcG9ydCBTVDQwR1gxIHByb2Nlc3NvciIKKwlzZWxlY3QgQ1BVX1NVQlRZUEVfU1Q0MAorCWhlbHAKKwkgIFNlbGVjdCBTVDQwR1gxIGlmIHlvdSBoYXZlIGEgU1Q0MEdYMSBDUFUuCisKK2NvbW1lbnQgIlNILTRBIFByb2Nlc3NvciBTdXBwb3J0IgorCitjb25maWcgQ1BVX1NVQlRZUEVfU0g3MzE4MAorCWJvb2wgIlN1cHBvcnQgU0g3MzE4MCBwcm9jZXNzb3IiCisJc2VsZWN0IENQVV9TSDRBCisKK2NvbmZpZyBDUFVfU1VCVFlQRV9TSDc3NzAKKwlib29sICJTdXBwb3J0IFNINzc3MCBwcm9jZXNzb3IiCisJc2VsZWN0IENQVV9TSDRBCisKK2NvbmZpZyBDUFVfU1VCVFlQRV9TSDc3ODAKKwlib29sICJTdXBwb3J0IFNINzc4MCBwcm9jZXNzb3IiCisJc2VsZWN0IENQVV9TSDRBCisKK2VuZG1lbnUKKworbWVudSAiTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucyIKKworY29uZmlnIE1NVQorICAgICAgICBib29sICJTdXBwb3J0IGZvciBtZW1vcnkgbWFuYWdlbWVudCBoYXJkd2FyZSIKKwlkZXBlbmRzIG9uICFDUFVfU0gyCisJZGVmYXVsdCB5CisJaGVscAorCSAgU29tZSBTSCBwcm9jZXNzb3JzIChzdWNoIGFzIFNILTIvU0gtMkEpIGxhY2sgYW4gTU1VLiBJbiBvcmRlciB0bworCSAgYm9vdCBvbiB0aGVzZSBzeXN0ZW1zLCB0aGlzIG9wdGlvbiBtdXN0IG5vdCBiZSBzZXQuCisKKwkgIE9uIG90aGVyIHN5c3RlbXMgKHN1Y2ggYXMgdGhlIFNILTMgYW5kIDQpIHdoZXJlIGFuIE1NVSBleGlzdHMsCisJICB0dXJuaW5nIHRoaXMgb2ZmIHdpbGwgYm9vdCB0aGUga2VybmVsIG9uIHRoZXNlIG1hY2hpbmVzIHdpdGggdGhlCisJICBNTVUgaW1wbGljaXRseSBzd2l0Y2hlZCBvZmYuCisKK2NvbmZpZyAzMkJJVAorCWJvb2wgIlN1cHBvcnQgMzItYml0IHBoeXNpY2FsIGFkZHJlc3NpbmcgdGhyb3VnaCBQTUIiCisJZGVwZW5kcyBvbiBDUFVfU0g0QQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgZXh0ZW5kZWQgdG8KKwkgIDMyLWJpdHMgdGhyb3VnaCB0aGUgU0gtNEEgUE1CLiBJZiB0aGlzIGlzIG5vdCBzZXQsIGxlZ2FjeQorCSAgMjktYml0IHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSB1c2VkLgorCitjaG9pY2UKKwlwcm9tcHQgIkh1Z2VUTEIgcGFnZSBzaXplIgorCWRlcGVuZHMgb24gSFVHRVRMQl9QQUdFICYmIENQVV9TSDQgJiYgTU1VCisJZGVmYXVsdCBIVUdFVExCX1BBR0VfU0laRV82NEsKKworY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0SworCWJvb2wgIjY0SyIKKworY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQgorCWJvb2wgIjFNQiIKKworZW5kY2hvaWNlCisKK3NvdXJjZSAibW0vS2NvbmZpZyIKKworZW5kbWVudQorCittZW51ICJDYWNoZSBjb25maWd1cmF0aW9uIgorCitjb25maWcgU0g3NzA1X0NBQ0hFXzMyS0IKKwlib29sICJFbmFibGUgMzJLQiBjYWNoZSBzaXplIGZvciBTSDc3MDUiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MDUKKwlkZWZhdWx0IHkKKworY29uZmlnIFNIX0RJUkVDVF9NQVBQRUQKKwlib29sICJVc2UgZGlyZWN0LW1hcHBlZCBjYWNoaW5nIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIGNvbmZpZ3VyZSB0aGUgY2FjaGVzIHRvIGJlIGRpcmVjdC1tYXBwZWQsCisJICBldmVuIGlmIHRoZSBjYWNoZSBzdXBwb3J0cyBhIDIgb3IgNC13YXkgbW9kZS4gVGhpcyBpcyB1c2VmdWwgcHJpbWFyaWx5CisJICBmb3IgZGVidWdnaW5nIG9uIHBsYXRmb3JtcyB3aXRoIDIgYW5kIDQtd2F5IGNhY2hlcyAoU0g3NzUwUi9TSDc3NTFSLAorCSAgU0g0LTIwMiwgU0g0LTUwMSwgZXRjLikKKworCSAgVHVybiB0aGlzIG9wdGlvbiBvZmYgZm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBoYXZlIGEgZGlyZWN0LW1hcHBlZAorCSAgY2FjaGUsIGFuZCB5b3UgaGF2ZSBubyBuZWVkIHRvIHJ1biB0aGUgY2FjaGVzIGluIHN1Y2ggYSBjb25maWd1cmF0aW9uLgorCitjb25maWcgU0hfV1JJVEVUSFJPVUdICisJYm9vbCAiVXNlIHdyaXRlLXRocm91Z2ggY2FjaGluZyIKKwlkZWZhdWx0IHkgaWYgQ1BVX1NIMgorCWhlbHAKKwkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIGNvbmZpZ3VyZSB0aGUgY2FjaGVzIGluIHdyaXRlLXRocm91Z2gKKwkgIG1vZGUsIGFzIG9wcG9zZWQgdG8gdGhlIGRlZmF1bHQgd3JpdGUtYmFjayBjb25maWd1cmF0aW9uLgorCisJICBTaW5jZSB0aGVyZSdzIHNpbGwgc29tZSBhbGlhc2luZyBpc3N1ZXMgb24gU0gtNCwgdGhpcyBvcHRpb24gd2lsbAorCSAgdW5mb3J0dW5hdGVseSBzdGlsbCByZXF1aXJlIHRoZSBtYWpvcml0eSBvZiBmbHVzaGluZyBmdW5jdGlvbnMgdG8KKwkgIGJlIGltcGxlbWVudGVkIHRvIGRlYWwgd2l0aCBhbGlhc2luZy4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIFNIX09DUkFNCisJYm9vbCAiT3BlcmFuZCBDYWNoZSBSQU0gKE9DUkFNKSBzdXBwb3J0IgorCWhlbHAKKwkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgdGVhciBkb3duIHRoZSBudW1iZXIgb2YKKwkgIHNldHMgaW4gdGhlIGRjYWNoZSBieSBoYWxmLCB3aGljaCBpbiB0dXJuIGV4cG9zZXMgYSBtZW1vcnkgcmFuZ2UuCisKKwkgIFRoZSBhZGRyZXNzZXMgZm9yIHRoZSBPQyBSQU0gYmFzZSB3aWxsIHZhcnkgYWNjb3JkaW5nIHRvIHRoZQorCSAgcHJvY2Vzc29yIHZlcnNpb24uIENvbnN1bHQgdmVuZG9yIGRvY3VtZW50YXRpb24gZm9yIHNwZWNpZmljcy4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pb3JlbWFwLmMgYi9hcmNoL3NoL21tL2lvcmVtYXAuYwppbmRleCBlNzk0ZTI3Li45NmZhNGE5IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2lvcmVtYXAuYworKysgYi9hcmNoL3NoL21tL2lvcmVtYXAuYwpAQCAtNiwxMyArNiwxOSBAQAogICogNjQway0xTUIgSU8gbWVtb3J5IGFyZWEgb24gUEMncwogICoKICAqIChDKSBDb3B5cmlnaHQgMTk5NSAxOTk2IExpbnVzIFRvcnZhbGRzCisgKiAoQykgQ29weXJpZ2h0IDIwMDUsIDIwMDYgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KLQogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIApAQCAtODAsOSArODYsMTUgQEAKIAlpZiAoYWRkcmVzcyA+PSBlbmQpCiAJCUJVRygpOwogCWRvIHsKKwkJcHVkX3QgKnB1ZDsKIAkJcG1kX3QgKnBtZDsKLQkJcG1kID0gcG1kX2FsbG9jKCZpbml0X21tLCBkaXIsIGFkZHJlc3MpOworCiAJCWVycm9yID0gLUVOT01FTTsKKworCQlwdWQgPSBwdWRfYWxsb2MoJmluaXRfbW0sIGRpciwgYWRkcmVzcyk7CisJCWlmICghcHVkKQorCQkJYnJlYWs7CisJCXBtZCA9IHBtZF9hbGxvYygmaW5pdF9tbSwgcHVkLCBhZGRyZXNzKTsKIAkJaWYgKCFwbWQpCiAJCQlicmVhazsKIAkJaWYgKHJlbWFwX2FyZWFfcG1kKHBtZCwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywKQEAgLTk3LDEwICsxMDksNiBAQAogfQogCiAvKgotICogR2VuZXJpYyBtYXBwaW5nIGZ1bmN0aW9uIChub3QgdmlzaWJsZSBvdXRzaWRlKToKLSAqLwotCi0vKgogICogUmVtYXAgYW4gYXJiaXRyYXJ5IHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgaW50byB0aGUga2VybmVsIHZpcnR1YWwKICAqIGFkZHJlc3Mgc3BhY2UuIE5lZWRlZCB3aGVuIHRoZSBrZXJuZWwgd2FudHMgdG8gYWNjZXNzIGhpZ2ggYWRkcmVzc2VzCiAgKiBkaXJlY3RseS4KQEAgLTEwOSwxMSArMTE3LDExIEBACiAgKiBoYXZlIHRvIGNvbnZlcnQgdGhlbSBpbnRvIGFuIG9mZnNldCBpbiBhIHBhZ2UtYWxpZ25lZCBtYXBwaW5nLCBidXQgdGhlCiAgKiBjYWxsZXIgc2hvdWxkbid0IG5lZWQgdG8ga25vdyB0aGF0IHNtYWxsIGRldGFpbC4KICAqLwotdm9pZCAqIHAzX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3ZvaWQgX19pb21lbSAqX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQl1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXZvaWQgKiBhZGRyOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKiBhcmVhOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsYXN0X2FkZHI7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQsIGxhc3RfYWRkciwgYWRkciwgb3JpZ19hZGRyOwogCiAJLyogRG9uJ3QgYWxsb3cgd3JhcGFyb3VuZCBvciB6ZXJvIHNpemUgKi8KIAlsYXN0X2FkZHIgPSBwaHlzX2FkZHIgKyBzaXplIC0gMTsKQEAgLTEyNCw3ICsxMzIsNyBAQAogCSAqIERvbid0IHJlbWFwIHRoZSBsb3cgUENJL0lTQSBhcmVhLCBpdCdzIGFsd2F5cyBtYXBwZWQuLgogCSAqLwogCWlmIChwaHlzX2FkZHIgPj0gMHhBMDAwMCAmJiBsYXN0X2FkZHIgPCAweDEwMDAwMCkKLQkJcmV0dXJuIHBoeXNfdG9fdmlydChwaHlzX2FkZHIpOworCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBoeXNfdG9fdmlydChwaHlzX2FkZHIpOwogCiAJLyoKIAkgKiBEb24ndCBhbGxvdyBhbnlib2R5IHRvIHJlbWFwIG5vcm1hbCBSQU0gdGhhdCB3ZSdyZSB1c2luZy4uCkBAIC0xNDYsMTYgKzE1NCw3MSBAQAogCWlmICghYXJlYSkKIAkJcmV0dXJuIE5VTEw7CiAJYXJlYS0+cGh5c19hZGRyID0gcGh5c19hZGRyOwotCWFkZHIgPSBhcmVhLT5hZGRyOwotCWlmIChyZW1hcF9hcmVhX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBhZGRyLCBwaHlzX2FkZHIsIHNpemUsIGZsYWdzKSkgewotCQl2dW5tYXAoYWRkcik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gKHZvaWQgKikgKG9mZnNldCArIChjaGFyICopYWRkcik7Ci19CisJb3JpZ19hZGRyID0gYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtPmFkZHI7CiAKLXZvaWQgcDNfaW91bm1hcCh2b2lkICphZGRyKQotewotCWlmIChhZGRyID4gaGlnaF9tZW1vcnkpCi0JCXZmcmVlKCh2b2lkICopKFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nKWFkZHIpKTsKKyNpZmRlZiBDT05GSUdfMzJCSVQKKwkvKgorCSAqIEZpcnN0IHRyeSB0byByZW1hcCB0aHJvdWdoIHRoZSBQTUIgb25jZSBhIHZhbGlkIFZNQSBoYXMgYmVlbgorCSAqIGVzdGFibGlzaGVkLiBTbWFsbGVyIGFsbG9jYXRpb25zIChvciB0aGUgcmVzdCBvZiB0aGUgc2l6ZQorCSAqIHJlbWFpbmluZyBhZnRlciBhIFBNQiBtYXBwaW5nIGR1ZSB0byB0aGUgc2l6ZSBub3QgYmVpbmcKKwkgKiBwZXJmZWN0bHkgYWxpZ25lZCBvbiBhIFBNQiBzaXplIGJvdW5kYXJ5KSBhcmUgdGhlbiBtYXBwZWQKKwkgKiB0aHJvdWdoIHRoZSBVVExCIHVzaW5nIGNvbnZlbnRpb25hbCBwYWdlIHRhYmxlcy4KKwkgKgorCSAqIFBNQiBlbnRyaWVzIGFyZSBhbGwgcHJlLWZhdWx0ZWQuCisJICovCisJaWYgKHVubGlrZWx5KHNpemUgPj0gMHgxMDAwMDAwKSkgeworCQl1bnNpZ25lZCBsb25nIG1hcHBlZCA9IHBtYl9yZW1hcChhZGRyLCBwaHlzX2FkZHIsIHNpemUsIGZsYWdzKTsKKworCQlpZiAobGlrZWx5KG1hcHBlZCkpIHsKKwkJCWFkZHIJCSs9IG1hcHBlZDsKKwkJCXBoeXNfYWRkcgkrPSBtYXBwZWQ7CisJCQlzaXplCQktPSBtYXBwZWQ7CisJCX0KKwl9CisjZW5kaWYKKworCWlmIChsaWtlbHkoc2l6ZSkpCisJCWlmIChyZW1hcF9hcmVhX3BhZ2VzKGFkZHIsIHBoeXNfYWRkciwgc2l6ZSwgZmxhZ3MpKSB7CisJCQl2dW5tYXAoKHZvaWQgKilvcmlnX2FkZHIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCXJldHVybiAodm9pZCBfX2lvbWVtICopKG9mZnNldCArIChjaGFyICopb3JpZ19hZGRyKTsKIH0KK0VYUE9SVF9TWU1CT0woX19pb3JlbWFwKTsKKwordm9pZCBfX2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHI7CisJc3RydWN0IHZtX3N0cnVjdCAqcDsKKworCWlmIChQWFNFRyh2YWRkcikgPCBQM1NFRykKKwkJcmV0dXJuOworCisjaWZkZWYgQ09ORklHXzMyQklUCisJLyoKKwkgKiBQdXJnZSBhbnkgUE1CIGVudHJpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGVzdGFibGlzaGVkIGZvciB0aGlzCisJICogbWFwcGluZywgdGhlbiBwcm9jZWVkIHdpdGggY29udmVudGlvbmFsIFZNQSB0ZWFyZG93bi4KKwkgKgorCSAqIFhYWDogTm90ZSB0aGF0IGR1ZSB0byB0aGUgd2F5IHRoYXQgcmVtb3ZlX3ZtX2FyZWEoKSBkb2VzCisJICogbWF0Y2hpbmcgb2YgdGhlIHJlc3VsdGFudCBWTUEsIHdlIGFyZW4ndCBhYmxlIHRvIGZhc3QtZm9yd2FyZAorCSAqIHRoZSBhZGRyZXNzIHBhc3QgdGhlIFBNQiBzcGFjZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBWTUEgd2hlcmUKKwkgKiB0aGUgcGFnZSB0YWJsZXMgcmVzaWRlLiBBcyBzdWNoLCB1bm1hcF92bV9hcmVhKCkgd2lsbCBiZQorCSAqIGZvcmNlZCB0byBsaW5lYXJseSBzY2FuIG92ZXIgdGhlIGFyZWEgdW50aWwgaXQgZmluZHMgdGhlIHBhZ2UKKwkgKiB0YWJsZXMgd2hlcmUgUFRFcyB0aGF0IG5lZWQgdG8gYmUgdW5tYXBwZWQgYWN0dWFsbHkgcmVzaWRlLAorCSAqIHdoaWNoIGlzIGZhciBmcm9tIG9wdGltYWwuIFBlcmhhcHMgd2UgbmVlZCB0byB1c2UgYSBzZXBhcmF0ZQorCSAqIFZNQSBmb3IgdGhlIFBNQiBtYXBwaW5ncz8KKwkgKgkJCQkJLS0gUEZNLgorCSAqLworCXBtYl91bm1hcCh2YWRkcik7CisjZW5kaWYKKworCXAgPSByZW1vdmVfdm1fYXJlYSgodm9pZCAqKSh2YWRkciAmIFBBR0VfTUFTSykpOworCWlmICghcCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgYWRkcmVzcyAlcFxuIiwgX19GVU5DVElPTl9fLCBhZGRyKTsKKwkJcmV0dXJuOworCX0KKworCWtmcmVlKHApOworfQorRVhQT1JUX1NZTUJPTChfX2lvdW5tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCmluZGV4IDA2OTNmYmQuLjE4MmZlOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEwLDEwICsxMCw3IEBACiA3MzAwU0UJCQlTSF83MzAwX1NPTFVUSU9OX0VOR0lORQogNzMxODBTRQkJCVNIXzczMTgwX1NPTFVUSU9OX0VOR0lORQogNzc1MVNZU1RFTUgJCVNIXzc3NTFfU1lTVEVNSAotSFA2MDAJCQlTSF9IUDYwMAotSFA2MjAJCQlTSF9IUDYyMAotSFA2ODAJCQlTSF9IUDY4MAotSFA2OTAJCQlTSF9IUDY5MAorSFA2WFgJCQlTSF9IUDZYWAogSEQ2NDQ2MQkJCUhENjQ0NjEKIEhENjQ0NjUJCQlIRDY0NDY1CiBTSDIwMDAJCQlTSF9TSDIwMDAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L0tjb25maWcgYi9hcmNoL3g4Nl82NC9LY29uZmlnCmluZGV4IDJlZmM0YmUuLjJmOWRlY2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L0tjb25maWcKKysrIGIvYXJjaC94ODZfNjQvS2NvbmZpZwpAQCAtMzA1LDcgKzMwNSwxMSBAQAogCiBjb25maWcgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gTlVNQQorCWRlcGVuZHMgb24gKE5VTUEgfHwgRVhQRVJJTUVOVEFMKQorCitjb25maWcgQVJDSF9NRU1PUllfUFJPQkUKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRwogCiBjb25maWcgQVJDSF9GTEFUTUVNX0VOQUJMRQogCWRlZl9ib29sIHkKQEAgLTMxNSw2ICszMTksNyBAQAogCiBjb25maWcgSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQKIAlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBOVU1BCiAKIGNvbmZpZyBOUl9DUFVTCiAJaW50ICJNYXhpbXVtIG51bWJlciBvZiBDUFVzICgyLTI1NikiCkBAIC0zNTAsNyArMzU1LDcgQEAKIAkgIDxodHRwOi8vd3d3LmludGVsLmNvbS9oYXJkd2FyZWRlc2lnbi9ocGV0c3BlYy5odG0+LgogCiBjb25maWcgWDg2X1BNX1RJTUVSCi0JYm9vbCAiUE0gdGltZXIiCisJYm9vbCAiUE0gdGltZXIiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBBQ1BJCiAJZGVmYXVsdCB5CiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvZGVmY29uZmlnIGIvYXJjaC94ODZfNjQvZGVmY29uZmlnCmluZGV4IDA1NGRjZDguLjUyMzFmZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2RlZmNvbmZpZworKysgYi9hcmNoL3g4Nl82NC9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtZ2l0NwotIyBXZWQgSmFuIDExIDExOjU3OjM2IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1naXQxMgorIyBNb24gSmFuIDE2IDEzOjA5OjA4IDIwMDYKICMKIENPTkZJR19YODZfNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTMxOSw2ICszMTksMTEgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC01MzcsOCArNTQyLDcgQEAKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxBMlhYWD15Ci0jIENPTkZJR19TQ1NJX1FMQTJYWFhfRU1CRURERURfRklSTVdBUkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKQEAgLTgwNSw2ICs4MDksNyBAQAogIyBDT05GSUdfVzgzODc3Rl9XRFQgaXMgbm90IHNldAogIyBDT05GSUdfVzgzOTc3Rl9XRFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSFpfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQ19FUFhfQzNfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCiAjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwpAQCAtODUwLDYgKzg1NSwxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTk5Miw2ICsxMDAzLDcgQEAKICMKIENPTkZJR19VU0JfSElEPXkKIENPTkZJR19VU0JfSElESU5QVVQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKQEAgLTEyNzYsNiArMTI4OCw3IEBACiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVF9ERUJVRz15CiAjIENPTkZJR19ERUJVR19ST0RBVEEgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvaWEzMi9NYWtlZmlsZSBiL2FyY2gveDg2XzY0L2lhMzIvTWFrZWZpbGUKaW5kZXggMDUxNjA4ZC4uOTI5ZTZiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvaWEzMi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Nl82NC9pYTMyL01ha2VmaWxlCkBAIC0zLDcgKzMsOCBAQAogIwogCiBvYmotJChDT05GSUdfSUEzMl9FTVVMQVRJT04pIDo9IGlhMzJlbnRyeS5vIHN5c19pYTMyLm8gaWEzMl9zaWduYWwubyB0bHMzMi5vIFwKLQlpYTMyX2JpbmZtdC5vIGZwdTMyLm8gcHRyYWNlMzIubyBzeXNjYWxsMzIubyBzeXNjYWxsMzJfc3lzY2FsbC5vCisJaWEzMl9iaW5mbXQubyBmcHUzMi5vIHB0cmFjZTMyLm8gc3lzY2FsbDMyLm8gc3lzY2FsbDMyX3N5c2NhbGwubyBcCisJbW1hcDMyLm8KIAogc3lzdi0kKENPTkZJR19TWVNWSVBDKSA6PSBpcGMzMi5vCiBvYmotJChDT05GSUdfSUEzMl9FTVVMQVRJT04pICs9ICQoc3lzdi15KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2JpbmZtdC5jIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2JpbmZtdC5jCmluZGV4IDAyOWJkZGEuLjU3MmIzYjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9iaW5mbXQuYworKysgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYmluZm10LmMKQEAgLTI5Myw4ICsyOTMsNiBAQAogfSB3aGlsZSgwKSAKIAogCi0jZGVmaW5lIGVsZl9tYXAgZWxmMzJfbWFwCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJCaW5hcnkgZm9ybWF0IGxvYWRlciBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIElBMzIgRUxGIGJpbmFyaWVzLiIpOyAKQEAgLTM5MCwyMSArMzg4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWEzMl9zZXR1cF9hcmdfcGFnZXMpOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotZWxmMzJfbWFwIChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGVsZl9waGRyICplcHBudCwgaW50IHByb3QsIGludCB0eXBlKQotewotCXVuc2lnbmVkIGxvbmcgbWFwX2FkZHI7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICptZSA9IGN1cnJlbnQ7IAotCi0JZG93bl93cml0ZSgmbWUtPm1tLT5tbWFwX3NlbSk7Ci0JbWFwX2FkZHIgPSBkb19tbWFwKGZpbGVwLCBFTEZfUEFHRVNUQVJUKGFkZHIpLAotCQkJICAgZXBwbnQtPnBfZmlsZXN6ICsgRUxGX1BBR0VPRkZTRVQoZXBwbnQtPnBfdmFkZHIpLCBwcm90LCAKLQkJCSAgIHR5cGUsCi0JCQkgICBlcHBudC0+cF9vZmZzZXQgLSBFTEZfUEFHRU9GRlNFVChlcHBudC0+cF92YWRkcikpOwotCXVwX3dyaXRlKCZtZS0+bW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4obWFwX2FkZHIpOwotfQotCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogLyogUmVnaXN0ZXIgdnN5c2NhbGwzMiBpbnRvIHRoZSBBQkkgdGFibGUgKi8KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvbW1hcDMyLmMgYi9hcmNoL3g4Nl82NC9pYTMyL21tYXAzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OWY0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Nl82NC9pYTMyL21tYXAzMi5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgbGludXgvYXJjaC94ODZfNjQvaWEzMi9tbS9tbWFwLmMKKyAqCisgKiAgZmxleGlibGUgbW1hcCBsYXlvdXQgc3VwcG9ydAorICoKKyAqIEJhc2VkIG9uIHRoZSBpMzg2IHZlcnNpb24gd2hpY2ggd2FzCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAwNCBSZWQgSGF0IEluYy4sIER1cmhhbSwgTm9ydGggQ2Fyb2xpbmEuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKgorICogU3RhcnRlZCBieSBJbmdvIE1vbG5hciA8bWluZ29AZWx0ZS5odT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorCisvKgorICogVG9wIG9mIG1tYXAgYXJlYSAoanVzdCBiZWxvdyB0aGUgcHJvY2VzcyBzdGFjaykuCisgKgorICogTGVhdmUgYW4gYXQgbGVhc3QgfjEyOCBNQiBob2xlLgorICovCisjZGVmaW5lIE1JTl9HQVAgKDEyOCoxMDI0KjEwMjQpCisjZGVmaW5lIE1BWF9HQVAgKFRBU0tfU0laRS82KjUpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbWFwX2Jhc2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyBnYXAgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX2N1cjsKKwl1bnNpZ25lZCBsb25nIHJhbmRvbV9mYWN0b3IgPSAwOworCisJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfUkFORE9NSVpFKQorCQlyYW5kb21fZmFjdG9yID0gZ2V0X3JhbmRvbV9pbnQoKSAlICgxMDI0KjEwMjQpOworCisJaWYgKGdhcCA8IE1JTl9HQVApCisJCWdhcCA9IE1JTl9HQVA7CisJZWxzZSBpZiAoZ2FwID4gTUFYX0dBUCkKKwkJZ2FwID0gTUFYX0dBUDsKKworCXJldHVybiBQQUdFX0FMSUdOKFRBU0tfU0laRSAtIGdhcCAtIHJhbmRvbV9mYWN0b3IpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiwgY2FsbGVkIHZlcnkgZWFybHkgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiBhIG5ldworICogcHJvY2VzcyBWTSBpbWFnZSwgc2V0cyB1cCB3aGljaCBWTSBsYXlvdXQgZnVuY3Rpb24gdG8gdXNlOgorICovCit2b2lkIGlhMzJfcGlja19tbWFwX2xheW91dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwkvKgorCSAqIEZhbGwgYmFjayB0byB0aGUgc3RhbmRhcmQgbGF5b3V0IGlmIHRoZSBwZXJzb25hbGl0eQorCSAqIGJpdCBpcyBzZXQsIG9yIGlmIHRoZSBleHBlY3RlZCBzdGFjayBncm93dGggaXMgdW5saW1pdGVkOgorCSAqLworCWlmIChzeXNjdGxfbGVnYWN5X3ZhX2xheW91dCB8fAorCQkJKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgQUREUl9DT01QQVRfTEFZT1VUKSB8fAorCQkJY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkgeworCQltbS0+bW1hcF9iYXNlID0gVEFTS19VTk1BUFBFRF9CQVNFOworCQltbS0+Z2V0X3VubWFwcGVkX2FyZWEgPSBhcmNoX2dldF91bm1hcHBlZF9hcmVhOworCQltbS0+dW5tYXBfYXJlYSA9IGFyY2hfdW5tYXBfYXJlYTsKKwl9IGVsc2UgeworCQltbS0+bW1hcF9iYXNlID0gbW1hcF9iYXNlKG1tKTsKKwkJbW0tPmdldF91bm1hcHBlZF9hcmVhID0gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duOworCQltbS0+dW5tYXBfYXJlYSA9IGFyY2hfdW5tYXBfYXJlYV90b3Bkb3duOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9hcGljLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvYXBpYy5jCmluZGV4IDhmZGQwODkuLjVkM2M1YjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9hcGljLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2FwaWMuYwpAQCAtNDk5LDEzICs0OTksMTAgQEAKIAlpZiAoIWFwaWNfcG1fc3RhdGUuYWN0aXZlKQogCQlyZXR1cm4gMDsKIAotCS8qIFhYWDogUGF2ZWwgbmVlZHMgdGhpcyBmb3IgUzMgcmVzdW1lLCBidXQgY2FuJ3QgZXhwbGFpbiB3aHkgKi8KLQlzZXRfZml4bWFwX25vY2FjaGUoRklYX0FQSUNfQkFTRSwgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSk7Ci0KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwogCWwgJj0gfk1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7Ci0JbCB8PSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUgfCBBUElDX0RFRkFVTFRfUEhZU19CQVNFOworCWwgfD0gTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFIHwgbXBfbGFwaWNfYWRkcjsKIAl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7CiAJYXBpY193cml0ZShBUElDX0xWVEVSUiwgRVJST1JfQVBJQ19WRUNUT1IgfCBBUElDX0xWVF9NQVNLRUQpOwogCWFwaWNfd3JpdGUoQVBJQ19JRCwgYXBpY19wbV9zdGF0ZS5hcGljX2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC94ODZfNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggY2ZiNGY5Yy4uMzg4MzRiYiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTQzLDYgKzQzLDcgQEAKIAlFTlRSWShpcnFjb3VudCk7CiAJRU5UUlkoY3B1bnVtYmVyKTsKIAlFTlRSWShpcnFzdGFja3B0cik7CisJRU5UUlkoZGF0YV9vZmZzZXQpOwogCUJMQU5LKCk7CiAjdW5kZWYgRU5UUlkKICNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT04KQEAgLTY2LDggKzY3LDYgQEAKIAlERUZJTkUocGJlX29yaWdfYWRkcmVzcywgb2Zmc2V0b2Yoc3RydWN0IHBiZSwgb3JpZ19hZGRyZXNzKSk7CiAJREVGSU5FKHBiZV9uZXh0LCBvZmZzZXRvZihzdHJ1Y3QgcGJlLCBuZXh0KSk7CiAJQkxBTksoKTsKLSNpZiBERUJVR19TVEtTWiA+IEVYQ0VQVElPTl9TVEtTWgotCURFRklORShERUJVR19JU1QsIERFQlVHX1NUQUNLKTsKLSNlbmRpZgorCURFRklORShUU1NfaXN0LCBvZmZzZXRvZihzdHJ1Y3QgdHNzX3N0cnVjdCwgaXN0KSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IDYzMmZjMGYuLmRiZGJhNTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAJLmNvZGU2NAogCkBAIC02NzQsOSArNjc1LDYgQEAKIAogCS8qIGVycm9yIGNvZGUgaXMgb24gdGhlIHN0YWNrIGFscmVhZHkgKi8KIAkvKiBoYW5kbGUgTk1JIGxpa2UgZXhjZXB0aW9ucyB0aGF0IGNhbiBoYXBwZW4gZXZlcnl3aGVyZSAqLwotI2lmbmRlZiBERUJVR19JU1QKLSMgZGVmaW5lIERFQlVHX0lTVCAwCi0jZW5kaWYKIAkubWFjcm8gcGFyYW5vaWRlbnRyeSBzeW0sIGlzdD0wCiAJU0FWRV9BTEwKIAljbGQKQEAgLTY5NSwxMSArNjkzLDExIEBACiAJbW92cSBPUklHX1JBWCglcnNwKSwlcnNpCiAJbW92cSAkLTEsT1JJR19SQVgoJXJzcCkKIAkuaWYgXGlzdAotCXN1YnEJJEVYQ0VQVElPTl9TVEFDS19TSVpFLCBwZXJfY3B1X19pbml0X3RzcyArIFRTU19pc3QgKyAoXGlzdCAtIDEpICogOCglcmJwKQorCXN1YnEJJEVYQ0VQVElPTl9TVEtTWiwgcGVyX2NwdV9faW5pdF90c3MgKyBUU1NfaXN0ICsgKFxpc3QgLSAxKSAqIDgoJXJicCkKIAkuZW5kaWYKIAljYWxsIFxzeW0KIAkuaWYgXGlzdAotCWFkZHEJJEVYQ0VQVElPTl9TVEFDS19TSVpFLCBwZXJfY3B1X19pbml0X3RzcyArIFRTU19pc3QgKyAoXGlzdCAtIDEpICogOCglcmJwKQorCWFkZHEJJEVYQ0VQVElPTl9TVEtTWiwgcGVyX2NwdV9faW5pdF90c3MgKyBUU1NfaXN0ICsgKFxpc3QgLSAxKSAqIDgoJXJicCkKIAkuZW5kaWYKIAljbGkKIAkuZW5kbQpAQCAtOTE4LDcgKzkxNiw3IEBACiAgCUlOVFJfRlJBTUUKIAlwdXNocSAkMAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4CQkKLQlwYXJhbm9pZGVudHJ5IGRvX2RlYnVnLCBERUJVR19JU1QKKwlwYXJhbm9pZGVudHJ5IGRvX2RlYnVnLCBERUJVR19TVEFDSwogCWptcCBwYXJhbm9pZF9leGl0CiAJQ0ZJX0VORFBST0MKIAkucHJldmlvdXMgLnRleHQKQEAgLTk3Niw3ICs5NzQsNyBAQAogIAlJTlRSX0ZSQU1FCiAgCXB1c2hxICQwCiAgCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4Ci0gCXBhcmFub2lkZW50cnkgZG9faW50MywgREVCVUdfSVNUCisgCXBhcmFub2lkZW50cnkgZG9faW50MywgREVCVUdfU1RBQ0sKICAJam1wIHBhcmFub2lkX2V4aXQKICAJQ0ZJX0VORFBST0MKIAkucHJldmlvdXMgLnRleHQKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaGVhZC5TCmluZGV4IDM4ZmMzZDUuLjY5MmM3MzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2hlYWQuUwpAQCAtMjQxLDEwNCArMjQxLDcwIEBACiBFTlRSWShzdGV4dCkKIEVOVFJZKF9zdGV4dCkKIAotLm9yZyAweDEwMDAKLUVOVFJZKGluaXRfbGV2ZWw0X3BndCkKKwkkcGFnZSA9IDAKKyNkZWZpbmUgTkVYVF9QQUdFKG5hbWUpIFwKKwkkcGFnZSA9ICRwYWdlICsgMTsgXAorCS5vcmcgJHBhZ2UgKiAweDEwMDA7IFwKKwlwaHlzXy8qKi9uYW1lID0gJHBhZ2UgKiAweDEwMDAgKyBfX1BIWVNJQ0FMX1NUQVJUOyBcCitFTlRSWShuYW1lKQorCitORVhUX1BBR0UoaW5pdF9sZXZlbDRfcGd0KQogCS8qIFRoaXMgZ2V0cyBpbml0aWFsaXplZCBpbiB4ODZfNjRfc3RhcnRfa2VybmVsICovCiAJLmZpbGwJNTEyLDgsMAogCi0ub3JnIDB4MjAwMAotRU5UUlkobGV2ZWwzX2lkZW50X3BndCkKLQkucXVhZAkweDAwMDAwMDAwMDAwMDQwMDcgKyBfX1BIWVNJQ0FMX1NUQVJUCitORVhUX1BBR0UobGV2ZWwzX2lkZW50X3BndCkKKwkucXVhZAlwaHlzX2xldmVsMl9pZGVudF9wZ3QgfCAweDAwNwogCS5maWxsCTUxMSw4LDAKIAotLm9yZyAweDMwMDAKLUVOVFJZKGxldmVsM19rZXJuZWxfcGd0KQorTkVYVF9QQUdFKGxldmVsM19rZXJuZWxfcGd0KQogCS5maWxsCTUxMCw4LDAKIAkvKiAoMl40OC0oMioxMDI0KjEwMjQqMTAyNCktKCgyXjM5KSo1MTEpKS8oMl4zMCkgPSA1MTAgKi8KLQkucXVhZAkweDAwMDAwMDAwMDAwMDUwMDcgKyBfX1BIWVNJQ0FMX1NUQVJUCS8qIC0+IGxldmVsMl9rZXJuZWxfcGd0ICovCisJLnF1YWQJcGh5c19sZXZlbDJfa2VybmVsX3BndCB8IDB4MDA3CiAJLmZpbGwJMSw4LDAKIAotLm9yZyAweDQwMDAKLUVOVFJZKGxldmVsMl9pZGVudF9wZ3QpCitORVhUX1BBR0UobGV2ZWwyX2lkZW50X3BndCkKIAkvKiA0ME1CIGZvciBib290dXAuIAkqLwotCS5xdWFkCTB4MDAwMDAwMDAwMDAwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMDIwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMDQwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMDYwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMDgwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMEEwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMEMwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMEUwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMTAwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMTIwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMTQwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMTYwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMTgwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMUEwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMUMwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMUUwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMjAwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMjIwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMjQwMDA4MwotCS5xdWFkCTB4MDAwMDAwMDAwMjYwMDA4MworCWkgPSAwCisJLnJlcHQgMjAKKwkucXVhZAlpIDw8IDIxIHwgMHgwODMKKwlpID0gaSArIDEKKwkuZW5kcgogCS8qIFRlbXBvcmFyeSBtYXBwaW5ncyBmb3IgdGhlIHN1cGVyIGVhcmx5IGFsbG9jYXRvciBpbiBhcmNoL3g4Nl82NC9tbS9pbml0LmMgKi8KIAkuZ2xvYmwgdGVtcF9ib290X3BtZHMKIHRlbXBfYm9vdF9wbWRzOgogCS5maWxsCTQ5Miw4LDAKIAkKLS5vcmcgMHg1MDAwCi1FTlRSWShsZXZlbDJfa2VybmVsX3BndCkKK05FWFRfUEFHRShsZXZlbDJfa2VybmVsX3BndCkKIAkvKiA0ME1CIGtlcm5lbCBtYXBwaW5nLiBUaGUga2VybmVsIGNvZGUgY2Fubm90IGJlIGJpZ2dlciB0aGFuIHRoYXQuCiAJICAgV2hlbiB5b3UgY2hhbmdlIHRoaXMgY2hhbmdlIEtFUk5FTF9URVhUX1NJWkUgaW4gcGFnZS5oIHRvby4gKi8KIAkvKiAoMl40OC0oMioxMDI0KjEwMjQqMTAyNCktKCgyXjM5KSo1MTEpLSgoMl4zMCkqNTEwKSkgPSAwICovCi0JLnF1YWQJMHgwMDAwMDAwMDAwMDAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAwMjAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAwNDAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAwNjAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAwODAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAwQTAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAwQzAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAwRTAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAxMDAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAxMjAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAxNDAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAxNjAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAxODAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAxQTAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAxQzAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAxRTAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAyMDAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAyMjAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAyNDAwMTgzCi0JLnF1YWQJMHgwMDAwMDAwMDAyNjAwMTgzCisJaSA9IDAKKwkucmVwdCAyMAorCS5xdWFkCWkgPDwgMjEgfCAweDE4MworCWkgPSBpICsgMQorCS5lbmRyCiAJLyogTW9kdWxlIG1hcHBpbmcgc3RhcnRzIGhlcmUgKi8KIAkuZmlsbAk0OTIsOCwwCiAKLS5vcmcgMHg2MDAwCi1FTlRSWShlbXB0eV96ZXJvX3BhZ2UpCitORVhUX1BBR0UoZW1wdHlfemVyb19wYWdlKQogCi0ub3JnIDB4NzAwMAotRU5UUlkoZW1wdHlfYmFkX3BhZ2UpCitORVhUX1BBR0UobGV2ZWwzX3BoeXNtZW1fcGd0KQorCS5xdWFkCXBoeXNfbGV2ZWwyX2tlcm5lbF9wZ3QgfCAweDAwNwkvKiBzbyB0aGF0IF9fdmEgd29ya3MgZXZlbiBiZWZvcmUgcGFnZXRhYmxlX2luaXQgKi8KKwkuZmlsbAk1MTEsOCwwCiAKLS5vcmcgMHg4MDAwCi1FTlRSWShlbXB0eV9iYWRfcHRlX3RhYmxlKQorI3VuZGVmIE5FWFRfUEFHRQogCi0ub3JnIDB4OTAwMAotRU5UUlkoZW1wdHlfYmFkX3BtZF90YWJsZSkKKwkuZGF0YQogCi0ub3JnIDB4YTAwMAotRU5UUlkobGV2ZWwzX3BoeXNtZW1fcGd0KQotCS5xdWFkCTB4MDAwMDAwMDAwMDAwNTAwNyArIF9fUEhZU0lDQUxfU1RBUlQJLyogLT4gbGV2ZWwyX2tlcm5lbF9wZ3QgKHNvIHRoYXQgX192YSB3b3JrcyBldmVuIGJlZm9yZSBwYWdldGFibGVfaW5pdCkgKi8KLQotCS5vcmcgMHhiMDAwCiAjaWZkZWYgQ09ORklHX0FDUElfU0xFRVAKKwkuYWxpZ24gUEFHRV9TSVpFCiBFTlRSWSh3YWtldXBfbGV2ZWw0X3BndCkKLQkucXVhZAkweDAwMDAwMDAwMDAwMDIwMDcgKyBfX1BIWVNJQ0FMX1NUQVJUCS8qIC0+IGxldmVsM19pZGVudF9wZ3QgKi8KKwkucXVhZAlwaHlzX2xldmVsM19pZGVudF9wZ3QgfCAweDAwNwogCS5maWxsCTI1NSw4LDAKLQkucXVhZAkweDAwMDAwMDAwMDAwMGEwMDcgKyBfX1BIWVNJQ0FMX1NUQVJUCisJLnF1YWQJcGh5c19sZXZlbDNfcGh5c21lbV9wZ3QgfCAweDAwNwogCS5maWxsCTI1NCw4LDAKIAkvKiAoMl40OC0oMioxMDI0KjEwMjQqMTAyNCkpLygyXjM5KSA9IDUxMSAqLwotCS5xdWFkCTB4MDAwMDAwMDAwMDAwMzAwNyArIF9fUEhZU0lDQUxfU1RBUlQJLyogLT4gbGV2ZWwzX2tlcm5lbF9wZ3QgKi8KKwkucXVhZAlwaHlzX2xldmVsM19rZXJuZWxfcGd0IHwgMHgwMDcKICNlbmRpZgogCiAjaWZuZGVmIENPTkZJR19IT1RQTFVHX0NQVQpAQCAtMzUyLDEyICszMTgsMTIgQEAKIAkgKi8KIAkuYWxpZ24gUEFHRV9TSVpFCiBFTlRSWShib290X2xldmVsNF9wZ3QpCi0JLnF1YWQJMHgwMDAwMDAwMDAwMDAyMDA3ICsgX19QSFlTSUNBTF9TVEFSVAkvKiAtPiBsZXZlbDNfaWRlbnRfcGd0ICovCisJLnF1YWQJcGh5c19sZXZlbDNfaWRlbnRfcGd0IHwgMHgwMDcKIAkuZmlsbAkyNTUsOCwwCi0JLnF1YWQJMHgwMDAwMDAwMDAwMDBhMDA3ICsgX19QSFlTSUNBTF9TVEFSVAorCS5xdWFkCXBoeXNfbGV2ZWwzX3BoeXNtZW1fcGd0IHwgMHgwMDcKIAkuZmlsbAkyNTQsOCwwCiAJLyogKDJeNDgtKDIqMTAyNCoxMDI0KjEwMjQpKS8oMl4zOSkgPSA1MTEgKi8KLQkucXVhZAkweDAwMDAwMDAwMDAwMDMwMDcgKyBfX1BIWVNJQ0FMX1NUQVJUCS8qIC0+IGxldmVsM19rZXJuZWxfcGd0ICovCisJLnF1YWQJcGh5c19sZXZlbDNfa2VybmVsX3BndCB8IDB4MDA3CiAKIAkuZGF0YQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXA2NC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwNjQuYwppbmRleCA2ZWZmNTFlLi44YWM0ZGIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXA2NC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cDY0LmMKQEAgLTM4LDcgKzM4LDcgQEAKIGNoYXIgYm9vdF9jcHVfc3RhY2tbSVJRU1RBQ0tTSVpFXSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuYnNzLnBhZ2VfYWxpZ25lZCIpKSk7CiAKIHVuc2lnbmVkIGxvbmcgX19zdXBwb3J0ZWRfcHRlX21hc2sgX19yZWFkX21vc3RseSA9IH4wVUw7Ci1zdGF0aWMgaW50IGRvX25vdF9ueCBfX2luaXRkYXRhID0gMDsKK3N0YXRpYyBpbnQgZG9fbm90X254IF9fY3B1aW5pdGRhdGEgPSAwOwogCiAvKiBub2V4ZWM9b258b2ZmCiBDb250cm9sIG5vbiBleGVjdXRhYmxlIG1hcHBpbmdzIGZvciA2NGJpdCBwcm9jZXNzZXMuCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9NYWtlZmlsZSBiL2FyY2gveDg2XzY0L21tL01ha2VmaWxlCmluZGV4IDFkMjMyYTguLmQyNWFjODYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L21tL01ha2VmaWxlCisrKyBiL2FyY2gveDg2XzY0L21tL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IHg4Nl82NC1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZXIuCiAjCiAKLW9iai15CSA6PSBpbml0Lm8gZmF1bHQubyBpb3JlbWFwLm8gZXh0YWJsZS5vIHBhZ2VhdHRyLm8KK29iai15CSA6PSBpbml0Lm8gZmF1bHQubyBpb3JlbWFwLm8gZXh0YWJsZS5vIHBhZ2VhdHRyLm8gbW1hcC5vCiBvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKSArPSBodWdldGxicGFnZS5vCiBvYmotJChDT05GSUdfTlVNQSkgKz0gbnVtYS5vCiBvYmotJChDT05GSUdfSzhfTlVNQSkgKz0gazh0b3BvbG9neS5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9pbml0LmMgYi9hcmNoL3g4Nl82NC9tbS9pbml0LmMKaW5kZXggZWNhNjAxMi4uN2FmMTc0MiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gveDg2XzY0L21tL2luaXQuYwpAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeV9ob3RwbHVnLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMTgwLDEzICsxODIsMTkgQEAKIAl7fQogfTsgCiAKLXN0YXRpYyBfX2luaXQgdm9pZCAqYWxsb2NfbG93X3BhZ2UoaW50ICppbmRleCwgdW5zaWduZWQgbG9uZyAqcGh5cykgCitzdGF0aWMgX19tZW1pbml0IHZvaWQgKmFsbG9jX2xvd19wYWdlKGludCAqaW5kZXgsIHVuc2lnbmVkIGxvbmcgKnBoeXMpCiB7IAogCXN0cnVjdCB0ZW1wX21hcCAqdGk7CiAJaW50IGk7IAogCXVuc2lnbmVkIGxvbmcgcGZuID0gdGFibGVfZW5kKyssIHBhZGRyOyAKIAl2b2lkICphZHI7CiAKKwlpZiAoYWZ0ZXJfYm9vdG1lbSkgeworCQlhZHIgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKKwkJKnBoeXMgPSBfX3BhKGFkcik7CisJCXJldHVybiBhZHI7CisJfQorCiAJaWYgKHBmbiA+PSBlbmRfcGZuKSAKIAkJcGFuaWMoImFsbG9jX2xvd19wYWdlOiByYW4gb3V0IG9mIG1lbW9yeSIpOyAKIAlmb3IgKGkgPSAwOyB0ZW1wX21hcHBpbmdzW2ldLmFsbG9jYXRlZDsgaSsrKSB7CkBAIC0xOTksNTUgKzIwNyw4NiBAQAogCXRpLT5hbGxvY2F0ZWQgPSAxOyAKIAlfX2ZsdXNoX3RsYigpOyAJICAgICAgIAogCWFkciA9IHRpLT5hZGRyZXNzICsgKChwZm4gPDwgUEFHRV9TSElGVCkgJiB+UE1EX01BU0spOyAKKwltZW1zZXQoYWRyLCAwLCBQQUdFX1NJWkUpOwogCSppbmRleCA9IGk7IAogCSpwaHlzICA9IHBmbiAqIFBBR0VfU0laRTsgIAogCXJldHVybiBhZHI7IAogfSAKIAotc3RhdGljIF9faW5pdCB2b2lkIHVubWFwX2xvd19wYWdlKGludCBpKQorc3RhdGljIF9fbWVtaW5pdCB2b2lkIHVubWFwX2xvd19wYWdlKGludCBpKQogeyAKLQlzdHJ1Y3QgdGVtcF9tYXAgKnRpID0gJnRlbXBfbWFwcGluZ3NbaV07CisJc3RydWN0IHRlbXBfbWFwICp0aTsKKworCWlmIChhZnRlcl9ib290bWVtKQorCQlyZXR1cm47CisKKwl0aSA9ICZ0ZW1wX21hcHBpbmdzW2ldOwogCXNldF9wbWQodGktPnBtZCwgX19wbWQoMCkpOwogCXRpLT5hbGxvY2F0ZWQgPSAwOyAKIH0gCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBwaHlzX3B1ZF9pbml0KHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBlbmQpCi17IAotCWxvbmcgaSwgajsgCitzdGF0aWMgdm9pZCBfX21lbWluaXQKK3BoeXNfcG1kX2luaXQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpbnQgaTsKIAotCWkgPSBwdWRfaW5kZXgoYWRkcmVzcyk7CisJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BNRDsgcG1kKyssIGkrKywgYWRkcmVzcyArPSBQTURfU0laRSkgeworCQl1bnNpZ25lZCBsb25nIGVudHJ5OworCisJCWlmIChhZGRyZXNzID4gZW5kKSB7CisJCQlmb3IgKDsgaSA8IFBUUlNfUEVSX1BNRDsgaSsrLCBwbWQrKykKKwkJCQlzZXRfcG1kKHBtZCwgX19wbWQoMCkpOworCQkJYnJlYWs7CisJCX0KKwkJZW50cnkgPSBfUEFHRV9OWHxfUEFHRV9QU0V8X0tFUk5QR19UQUJMRXxfUEFHRV9HTE9CQUx8YWRkcmVzczsKKwkJZW50cnkgJj0gX19zdXBwb3J0ZWRfcHRlX21hc2s7CisJCXNldF9wbWQocG1kLCBfX3BtZChlbnRyeSkpOworCX0KK30KKworc3RhdGljIHZvaWQgX19tZW1pbml0CitwaHlzX3BtZF91cGRhdGUocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlwbWRfdCAqcG1kID0gcG1kX29mZnNldChwdWQsICh1bnNpZ25lZCBsb25nKV9fdmEoYWRkcmVzcykpOworCisJaWYgKHBtZF9ub25lKCpwbWQpKSB7CisJCXNwaW5fbG9jaygmaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spOworCQlwaHlzX3BtZF9pbml0KHBtZCwgYWRkcmVzcywgZW5kKTsKKwkJc3Bpbl91bmxvY2soJmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTsKKwkJX19mbHVzaF90bGJfYWxsKCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX21lbWluaXQgcGh5c19wdWRfaW5pdChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kKQoreyAKKwlsb25nIGkgPSBwdWRfaW5kZXgoYWRkcmVzcyk7CisKIAlwdWQgPSBwdWQgKyBpOworCisJaWYgKGFmdGVyX2Jvb3RtZW0gJiYgcHVkX3ZhbCgqcHVkKSkgeworCQlwaHlzX3BtZF91cGRhdGUocHVkLCBhZGRyZXNzLCBlbmQpOworCQlyZXR1cm47CisJfQorCiAJZm9yICg7IGkgPCBQVFJTX1BFUl9QVUQ7IHB1ZCsrLCBpKyspIHsKIAkJaW50IG1hcDsgCiAJCXVuc2lnbmVkIGxvbmcgcGFkZHIsIHBtZF9waHlzOwogCQlwbWRfdCAqcG1kOwogCi0JCXBhZGRyID0gYWRkcmVzcyArIGkqUFVEX1NJWkU7Ci0JCWlmIChwYWRkciA+PSBlbmQpIHsgCi0JCQlmb3IgKDsgaSA8IFBUUlNfUEVSX1BVRDsgaSsrLCBwdWQrKykgCi0JCQkJc2V0X3B1ZChwdWQsIF9fcHVkKDApKTsgCisJCXBhZGRyID0gKGFkZHJlc3MgJiBQR0RJUl9NQVNLKSArIGkqUFVEX1NJWkU7CisJCWlmIChwYWRkciA+PSBlbmQpCiAJCQlicmVhazsKLQkJfSAKIAotCQlpZiAoIWU4MjBfbWFwcGVkKHBhZGRyLCBwYWRkcitQVURfU0laRSwgMCkpIHsgCisJCWlmICghYWZ0ZXJfYm9vdG1lbSAmJiAhZTgyMF9tYXBwZWQocGFkZHIsIHBhZGRyK1BVRF9TSVpFLCAwKSkgewogCQkJc2V0X3B1ZChwdWQsIF9fcHVkKDApKTsgCiAJCQljb250aW51ZTsKIAkJfSAKIAogCQlwbWQgPSBhbGxvY19sb3dfcGFnZSgmbWFwLCAmcG1kX3BoeXMpOworCQlzcGluX2xvY2soJmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTsKIAkJc2V0X3B1ZChwdWQsIF9fcHVkKHBtZF9waHlzIHwgX0tFUk5QR19UQUJMRSkpOwotCQlmb3IgKGogPSAwOyBqIDwgUFRSU19QRVJfUE1EOyBwbWQrKywgaisrLCBwYWRkciArPSBQTURfU0laRSkgewotCQkJdW5zaWduZWQgbG9uZyBwZTsKLQotCQkJaWYgKHBhZGRyID49IGVuZCkgeyAKLQkJCQlmb3IgKDsgaiA8IFBUUlNfUEVSX1BNRDsgaisrLCBwbWQrKykKLQkJCQkJc2V0X3BtZChwbWQsICBfX3BtZCgwKSk7IAotCQkJCWJyZWFrOwotCQl9Ci0JCQlwZSA9IF9QQUdFX05YfF9QQUdFX1BTRSB8IF9LRVJOUEdfVEFCTEUgfCBfUEFHRV9HTE9CQUwgfCBwYWRkcjsKLQkJCXBlICY9IF9fc3VwcG9ydGVkX3B0ZV9tYXNrOwotCQkJc2V0X3BtZChwbWQsIF9fcG1kKHBlKSk7Ci0JCX0KKwkJcGh5c19wbWRfaW5pdChwbWQsIHBhZGRyLCBlbmQpOworCQlzcGluX3VubG9jaygmaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spOwogCQl1bm1hcF9sb3dfcGFnZShtYXApOwogCX0KIAlfX2ZsdXNoX3RsYigpOwpAQCAtMjYyLDMwICszMDEsMjUgQEAKIAl0YWJsZXMgPSByb3VuZF91cChwdWRzICogc2l6ZW9mKHB1ZF90KSwgUEFHRV9TSVpFKSArCiAJCSByb3VuZF91cChwbWRzICogc2l6ZW9mKHBtZF90KSwgUEFHRV9TSVpFKTsKIAotCS8qIFB1dCBwYWdlIHRhYmxlcyBiZXlvbmQgdGhlIERNQSB6b25lcyBpZiBwb3NzaWJsZS4KLQkgICBSRUQtUEVOIG1pZ2h0IGJlIGJldHRlciB0byBzcHJlYWQgdGhlbSBvdXQgbW9yZSBvdmVyCi0JICAgbWVtb3J5IHRvIGF2b2lkIGhvdHNwb3RzICovCi0JaWYgKGVuZCA+IE1BWF9ETUEzMl9QRk48PFBBR0VfU0hJRlQpCi0JCXN0YXJ0ID0gTUFYX0RNQTMyX1BGTiA8PCBQQUdFX1NISUZUOwotCWVsc2UgaWYgKGVuZCA+IE1BWF9ETUFfUEZOIDw8IFBBR0VfU0hJRlQpCi0JCXN0YXJ0ID0gTUFYX0RNQV9QRk4gPDwgUEFHRV9TSElGVDsKLQllbHNlCi0JCXN0YXJ0ID0gMHg4MDAwOwotCi0JdGFibGVfc3RhcnQgPSBmaW5kX2U4MjBfYXJlYShzdGFydCwgZW5kLCB0YWJsZXMpOwotCWlmICh0YWJsZV9zdGFydCA9PSAtMSkKLQkJdGFibGVfc3RhcnQgPSBmaW5kX2U4MjBfYXJlYSgweDgwMDAsIGVuZCwgdGFibGVzKTsKKyAJLyogUkVELVBFTiBwdXR0aW5nIHBhZ2UgdGFibGVzIG9ubHkgb24gbm9kZSAwIGNvdWxkCisgCSAgIGNhdXNlIGEgaG90c3BvdCBhbmQgZmlsbCB1cCBaT05FX0RNQS4gVGhlIHBhZ2UgdGFibGVzCisgCSAgIG5lZWQgcm91Z2hseSAwLjVLQiBwZXIgR0IuICovCisgCXN0YXJ0ID0gMHg4MDAwOworIAl0YWJsZV9zdGFydCA9IGZpbmRfZTgyMF9hcmVhKHN0YXJ0LCBlbmQsIHRhYmxlcyk7CiAJaWYgKHRhYmxlX3N0YXJ0ID09IC0xVUwpCiAJCXBhbmljKCJDYW5ub3QgZmluZCBzcGFjZSBmb3IgdGhlIGtlcm5lbCBwYWdlIHRhYmxlcyIpOwogCiAJdGFibGVfc3RhcnQgPj49IFBBR0VfU0hJRlQ7CiAJdGFibGVfZW5kID0gdGFibGVfc3RhcnQ7CisKKwllYXJseV9wcmludGsoImtlcm5lbCBkaXJlY3QgbWFwcGluZyB0YWJsZXMgdXAgdG8gJWx4IEAgJWx4LSVseFxuIiwKKwkJZW5kLCB0YWJsZV9zdGFydCA8PCBQQUdFX1NISUZULCB0YWJsZV9lbmQgPDwgUEFHRV9TSElGVCk7CiB9CiAKIC8qIFNldHVwIHRoZSBkaXJlY3QgbWFwcGluZyBvZiB0aGUgcGh5c2ljYWwgbWVtb3J5IGF0IFBBR0VfT0ZGU0VULgogICAgVGhpcyBydW5zIGJlZm9yZSBib290bWVtIGlzIGluaXRpYWxpemVkIGFuZCBnZXRzIHBhZ2VzIGRpcmVjdGx5IGZyb20gdGhlIAogICAgcGh5c2ljYWwgbWVtb3J5LiBUbyBhY2Nlc3MgdGhlbSB0aGV5IGFyZSB0ZW1wb3JhcmlseSBtYXBwZWQuICovCi12b2lkIF9faW5pdCBpbml0X21lbW9yeV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQordm9pZCBfX21lbWluaXQgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsgCiAJdW5zaWduZWQgbG9uZyBuZXh0OyAKIApAQCAtMjk3LDcgKzMzMSw4IEBACiAJICogbWFwcGVkLiAgVW5mb3J0dW5hdGVseSB0aGlzIGlzIGRvbmUgY3VycmVudGx5IGJlZm9yZSB0aGUgbm9kZXMgYXJlIAogCSAqIGRpc2NvdmVyZWQuCiAJICovCi0JZmluZF9lYXJseV90YWJsZV9zcGFjZShlbmQpOworCWlmICghYWZ0ZXJfYm9vdG1lbSkKKwkJZmluZF9lYXJseV90YWJsZV9zcGFjZShlbmQpOwogCiAJc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKHN0YXJ0KTsKIAllbmQgPSAodW5zaWduZWQgbG9uZylfX3ZhKGVuZCk7CkBAIC0zMDUsMjAgKzM0MCwyNiBAQAogCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgPSBuZXh0KSB7CiAJCWludCBtYXA7CiAJCXVuc2lnbmVkIGxvbmcgcHVkX3BoeXM7IAotCQlwdWRfdCAqcHVkID0gYWxsb2NfbG93X3BhZ2UoJm1hcCwgJnB1ZF9waHlzKTsKKwkJcGdkX3QgKnBnZCA9IHBnZF9vZmZzZXRfayhzdGFydCk7CisJCXB1ZF90ICpwdWQ7CisKKwkJaWYgKGFmdGVyX2Jvb3RtZW0pCisJCQlwdWQgPSBwdWRfb2Zmc2V0X2socGdkLCBfX1BBR0VfT0ZGU0VUKTsKKwkJZWxzZQorCQkJcHVkID0gYWxsb2NfbG93X3BhZ2UoJm1hcCwgJnB1ZF9waHlzKTsKKwogCQluZXh0ID0gc3RhcnQgKyBQR0RJUl9TSVpFOwogCQlpZiAobmV4dCA+IGVuZCkgCiAJCQluZXh0ID0gZW5kOyAKIAkJcGh5c19wdWRfaW5pdChwdWQsIF9fcGEoc3RhcnQpLCBfX3BhKG5leHQpKTsKLQkJc2V0X3BnZChwZ2Rfb2Zmc2V0X2soc3RhcnQpLCBta19rZXJuZWxfcGdkKHB1ZF9waHlzKSk7CisJCWlmICghYWZ0ZXJfYm9vdG1lbSkKKwkJCXNldF9wZ2QocGdkX29mZnNldF9rKHN0YXJ0KSwgbWtfa2VybmVsX3BnZChwdWRfcGh5cykpOwogCQl1bm1hcF9sb3dfcGFnZShtYXApOyAgIAogCX0gCiAKLQlhc20gdm9sYXRpbGUoIm1vdnEgJSVjcjQsJTAiIDogIj1yIiAobW11X2NyNF9mZWF0dXJlcykpOworCWlmICghYWZ0ZXJfYm9vdG1lbSkKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlY3I0LCUwIiA6ICI9ciIgKG1tdV9jcjRfZmVhdHVyZXMpKTsKIAlfX2ZsdXNoX3RsYl9hbGwoKTsKLQllYXJseV9wcmludGsoImtlcm5lbCBkaXJlY3QgbWFwcGluZyB0YWJsZXMgdXB0byAlbHggQCAlbHgtJWx4XG4iLCBlbmQsIAotCSAgICAgICB0YWJsZV9zdGFydDw8UEFHRV9TSElGVCwgCi0JICAgICAgIHRhYmxlX2VuZDw8UEFHRV9TSElGVCk7CiB9CiAKIHZvaWQgX19jcHVpbml0IHphcF9sb3dfbWFwcGluZ3MoaW50IGNwdSkKQEAgLTM5Myw2ICs0MzQsOSBAQAogdm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHpvbmVzW01BWF9OUl9aT05FU10sIGhvbGVzW01BWF9OUl9aT05FU107CisKKwltZW1vcnlfcHJlc2VudCgwLCAwLCBlbmRfcGZuKTsKKwlzcGFyc2VfaW5pdCgpOwogCXNpemVfem9uZXMoem9uZXMsIGhvbGVzLCAwLCBlbmRfcGZuKTsKIAlmcmVlX2FyZWFfaW5pdF9ub2RlKDAsIE5PREVfREFUQSgwKSwgem9uZXMsCiAJCQkgICAgX19wYShQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCwgaG9sZXMpOwpAQCAtNDMzLDYgKzQ3Nyw1MCBAQAogCV9fZmx1c2hfdGxiX2FsbCgpOwogfSAKIAorLyoKKyAqIE1lbW9yeSBob3RwbHVnIHNwZWNpZmljIGZ1bmN0aW9ucworICogVGhlc2UgYXJlIG9ubHkgZm9yIG5vbi1OVU1BIG1hY2hpbmVzIHJpZ2h0IG5vdy4KKyAqLworI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworCit2b2lkIG9ubGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOworCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOworCV9fZnJlZV9wYWdlKHBhZ2UpOworCXRvdGFscmFtX3BhZ2VzKys7CisJbnVtX3BoeXNwYWdlcysrOworfQorCitpbnQgYWRkX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQoreworCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEoMCk7CisJc3RydWN0IHpvbmUgKnpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIE1BWF9OUl9aT05FUy0yOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOworCWludCByZXQ7CisKKwlyZXQgPSBfX2FkZF9wYWdlcyh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJaW5pdF9tZW1vcnlfbWFwcGluZyhzdGFydCwgKHN0YXJ0ICsgc2l6ZSAtMSkpOworCisJcmV0dXJuIHJldDsKK2Vycm9yOgorCXByaW50aygiJXM6IFByb2JsZW0gZW5jb3VudGVyZWQgaW4gX19hZGRfcGFnZXMhXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnkpOworCitpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQoreworCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVtb3ZlX21lbW9yeSk7CisKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGtjb3JlX2xpc3Qga2NvcmVfbWVtLCBrY29yZV92bWFsbG9jLCBrY29yZV9rZXJuZWwsIGtjb3JlX21vZHVsZXMsCiAJCQkga2NvcmVfdnN5c2NhbGw7CiAKQEAgLTUzOSw3ICs2MjcsNyBAQAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogdm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0JaWYgKHN0YXJ0IDwgKHVuc2lnbmVkIGxvbmcpJl9lbmQpCisJaWYgKHN0YXJ0ID49IGVuZCkKIAkJcmV0dXJuOwogCXByaW50ayAoIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWxkayBmcmVlZFxuIiwgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7CiAJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21tL21tYXAuYyBiL2FyY2gveDg2XzY0L21tL21tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2U5Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODZfNjQvbW0vbW1hcC5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qIENvcHlyaWdodCAyMDA1IEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KKyAqIExpY2Vuc2VkIHVuZGVyIEdQTCwgdi4yCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8YXNtL2lhMzIuaD4KKworLyogTm90ZWJvb2s6IG1vdmUgdGhlIG1tYXAgY29kZSBmcm9tIHN5c194ODZfNjQuYyBvdmVyIGhlcmUuICovCisKK3ZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgorCWlmIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzICYgX1RJRl9JQTMyKQorCQlyZXR1cm4gaWEzMl9waWNrX21tYXBfbGF5b3V0KG1tKTsKKyNlbmRpZgorCW1tLT5tbWFwX2Jhc2UgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CisJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfUkFORE9NSVpFKSB7CisJCS8qIEFkZCAyOGJpdCByYW5kb21uZXNzIHdoaWNoIGlzIGFib3V0IDQwYml0cyBvZiBhZGRyZXNzIHNwYWNlCisJCSAgIGJlY2F1c2UgbW1hcCBiYXNlIGhhcyB0byBiZSBwYWdlIGFsaWduZWQuCisgCQkgICBvciB+MS8xMjggb2YgdGhlIHRvdGFsIHVzZXIgVk0KKwkgICAJICAgKHRvdGFsIHVzZXIgYWRkcmVzcyBzcGFjZSBpcyA0N2JpdHMpICovCisJCXVuc2lnbmVkIHJuZCA9IGdldF9yYW5kb21faW50KCkgJiAweGZmZmZmZmY7CisJCW1tLT5tbWFwX2Jhc2UgKz0gKCh1bnNpZ25lZCBsb25nKXJuZCkgPDwgUEFHRV9TSElGVDsKKwl9CisJbW0tPmdldF91bm1hcHBlZF9hcmVhID0gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYTsKKwltbS0+dW5tYXBfYXJlYSA9IGFyY2hfdW5tYXBfYXJlYTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wczJlc2RpLmMgYi9kcml2ZXJzL2Jsb2NrL3BzMmVzZGkuYwppbmRleCA0MzQxNWY2Li5iZWE3NWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BzMmVzZGkuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BzMmVzZGkuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VzcC5jIGIvZHJpdmVycy9jaGFyL2VzcC5jCmluZGV4IGRkNWRjOGYuLjNmM2FjMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lc3AuYworKysgYi9kcml2ZXJzL2NoYXIvZXNwLmMKQEAgLTI0OTIsNiArMjQ5Miw3IEBACiAJfQogCiAJbWVtc2V0KCh2b2lkICopaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBlc3Bfc3RydWN0KSk7CisJc3Bpbl9sb2NrX2luaXQoJmluZm8tPmxvY2spOwogCS8qIHJ4X3RyaWdnZXIsIHR4X3RyaWdnZXIgYXJlIG5lZWRlZCBieSBhdXRvY29uZmlnICovCiAJaW5mby0+Y29uZmlnLnJ4X3RyaWdnZXIgPSByeF90cmlnZ2VyOwogCWluZm8tPmNvbmZpZy50eF90cmlnZ2VyID0gdHhfdHJpZ2dlcjsKQEAgLTI1MjgsNyArMjUyOSw2IEBACiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmNsb3NlX3dhaXQpOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmJyZWFrX3dhaXQpOwotCQlzcGluX2xvY2tfaW5pdCgmaW5mby0+bG9jayk7CiAJCXBvcnRzID0gaW5mbzsKIAkJcHJpbnRrKEtFUk5fSU5GTyAidHR5UCVkIGF0IDB4JTA0eCAoaXJxID0gJWQpIGlzIGFuIEVTUCAiLAogCQkJaW5mby0+bGluZSwgaW5mby0+cG9ydCwgaW5mby0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vYnJhdGVzLmggYi9kcml2ZXJzL2NoYXIvcmlvL2JyYXRlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDY4NmQ1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vYnJhdGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKgkJQlJBVEVTLkgJCQkJICAgICAgKioqKioqKgotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSBBdXRob3IgIDogSmVyZW15IFJvbGxzCi0gRGF0ZSAgICA6IDEgTm92IDE5OTAKLQotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSBWZXJzaW9uIDogMC4wMQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RzCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBEYXRlICAgICBCeSAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfYnJhdGVzX2gKLSNpZm5kZWYgbGludAotLyogc3RhdGljIGNoYXIgKiBfYnJhdGVzX2hfc2NjcyA9ICJAKCMpYnJhdGVzLmgJMS40IjsgKi8KLSNlbmRpZgotI2RlZmluZSBfYnJhdGVzX2ggMQotLyogTGlzdCBvZiBiYXVkIHJhdGUgZGVmaW5lcy4gTW9zdCBhcmUgYm9ycm93ZWQgZnJvbSAvdXNyL2luY2x1ZGUvc3lzL3Rlcm1pby5oCi0qLwotI2lmbmRlZiBJTktFUk5FTAotCi0jZGVmaW5lCUIwCTB4MDAKLSNkZWZpbmUJQjUwCTB4MDEKLSNkZWZpbmUJQjc1CTB4MDIKLSNkZWZpbmUJQjExMAkweDAzCi0jZGVmaW5lCUIxMzQJMHgwNAotI2RlZmluZQlCMTUwCTB4MDUKLSNkZWZpbmUJQjIwMAkweDA2Ci0jZGVmaW5lCUIzMDAJMHgwNwotI2RlZmluZQlCNjAwCTB4MDgKLSNkZWZpbmUJQjEyMDAJMHgwOQotI2RlZmluZQlCMTgwMAkweDBhCi0jZGVmaW5lCUIyNDAwCTB4MGIKLSNkZWZpbmUJQjQ4MDAJMHgwYwotI2RlZmluZQlCOTYwMAkweDBkCi0jZGVmaW5lCUIxOTIwMAkweDBlCi0jZGVmaW5lCUIzODQwMAkweDBmCi0KLSNlbmRpZgotCi0vKgotKiogVGhlIGZvbGxvd2luZyBiYXVkcmF0ZXMgbWF5IG9yIG1heSBub3QgYmUgZGVmaW5lZAotKiogb24gdmFyaW91cyBVTklYIHN5c3RlbXMuCi0qKiBJZiB0aGV5IGFyZSBub3QgdGhlbiB3ZSBkZWZpbmUgdGhlbS4KLSoqIElmIHRoZXkgYXJlIHRoZW4gd2UgZG8gbm90IGRlZmluZSB0aGVtIDstKQotKioKLSoqIFRoaXMgaXMgYXBwYWxsaW5nIHRoYXQgd2UgdXNlIHNhbWUgZGVmaW5pdGlvbnMgYXMgVU5JWAotKiogZm9yIG91ciBvd24gZG93bmxvYWQgY29kZSBhcyB0aGVyZSBpcyBubyBnYXJ1bnRlZSB0aGF0Ci0qKiBCNTc2MDAgd2lsbCBiZSBkZWZpbmVkIGFzIDB4MTEgYnkgYSBVTklYIHN5c3RlbS4uLi4KLSoqIEFyZ2hoaGhoISEhISEhISEhISEhISEKLSovCi0jaWYgIWRlZmluZWQoQjU2MDAwKQotI2RlZmluZQlCNTYwMDAJMHgxMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChCNTc2MDApCi0jZGVmaW5lCUI1NzYwMAkweDExCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEI2NDAwMCkKLSNkZWZpbmUJQjY0MDAwCTB4MTIKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQjExNTIwMCkKLSNkZWZpbmUJQjExNTIwMAkweDEzCi0jZW5kaWYKLQotCi0jaWYgIWRlZmluZWQoQjIwMDApCi0jZGVmaW5lIEIyMDAwCTB4MTQKLSNlbmRpZgotCi0KLSNkZWZpbmUgTUFYX1JBVEUgQjIwMDAKLQotc3RydWN0IGJhdWRfcmF0ZSB7CQkvKiBUYWcgZm9yIGJhdWQgcmF0ZXMgKi8KLQkvKiBzaG9ydCAgICBob3N0X3JhdGUsICovLyogQXMgcGFzc2VkIGJ5IHRoZSBkcml2ZXIgKi8KLQlzaG9ydCBkaXZpc29yLAkJLyogVGhlIGRpdmlzb3IgKi8KLQkgcHJlc2NhbGVyOwkJLyogVGhlIHByZS1zY2FsZXIgKi8KLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9jaGFuLmggYi9kcml2ZXJzL2NoYXIvcmlvL2NoYW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYxNDMxMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2NoYW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKgotICogIChDKSAxOTkwIC0gMjAwMCBTcGVjaWFsaXggSW50ZXJuYXRpb25hbCBMdGQuLCBCeWZsZWV0LCBTdXJyZXksIFVLLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSovCi0jaWZuZGVmIF9jaGFuX2gKLSNkZWZpbmUgX2NoYW5faAotCi0jaWZuZGVmIGxpbnQKLSNpZmRlZiBTQ0NTCi1zdGF0aWMgY2hhciAqX3Jpb19jaGFuX2hfc2NjcyA9ICJAKCMpY2hhbi5oCTEuMSI7Ci0jZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIExpbmswICAgMAotI2RlZmluZSBMaW5rMSAgIDEKLSNkZWZpbmUgTGluazIgICAyCi0jZGVmaW5lIExpbmszICAgMwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vY21kLmggYi9kcml2ZXJzL2NoYXIvcmlvL2NtZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTdiNjI0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vY21kLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgQyBPIE0gTSBBIE4gRCAgIFAgQSBDIEsgRSBUICAgSCBFIEEgRCBFIFIgUwotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSBBdXRob3IgIDogSWFuIE5hbmRocmEKLSBEYXRlICAgIDoKLQotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSBWZXJzaW9uIDogMC4wMQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RzCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBEYXRlICAgICBCeSAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIF9jbWRfaAotI2RlZmluZSBfY21kX2gKLQotI2lmbmRlZiBsaW50Ci0jaWZkZWYgU0NDUwotc3RhdGljIGNoYXIgKl9yaW9fY21kX2hfc2NjcyA9ICJAKCMpY21kLmgJMS4xIjsKLSNlbmRpZgotI2VuZGlmCi0KLQotI2RlZmluZSBQUkVfRU1QVElWRV9DTUQgICAgICAgICAweDgwCi0jZGVmaW5lIElOTElORV9DTUQgICAgICAgICAgICAgIH5QUkVfRU1QVElWRV9DTUQKLQotI2RlZmluZSBDTURfSUdOT1JFX1BLVCAgICAgICAgICAoICh1c2hvcnQpIDApCi0jZGVmaW5lIENNRF9TVEFUVVNfUkVRICAgICAgICAgICggKHVzaG9ydCkgMSkKLSNkZWZpbmUgQ01EX1VOSVRfU1RBVFVTX1JFUSAgICAgKCAodXNob3J0KSAyKQkvKiBJcyB0aGlzIG5lZWRlZCA/Pz8gKi8KLSNkZWZpbmUgQ01EX0NPTkZfUE9SVCAgICAgICAgICAgKCAodXNob3J0KSAzKQotI2RlZmluZSBDTURfQ09ORl9VTklUICAgICAgICAgICAoICh1c2hvcnQpIDQpCi0jZGVmaW5lIENNRF9ST1VURV9NQVBfUkVRICAgICAgICggKHVzaG9ydCkgNSkKLSNkZWZpbmUgQ01EX0ZMVVNIX1RYICAgICAgICAgICAgKCAodXNob3J0KSA2KQotI2RlZmluZSBDTURfRkxVU0hfUlggICAgICAgICAgICAoICh1c2hvcnQpIDcpCi0jZGVmaW5lIENNRF9QQVJUSU9OX1BPUlQgICAgICAgICggKHVzaG9ydCkgOCkKLSNkZWZpbmUgQ01EX1JFU0VUX1BPUlQgICAgICAgICAgKCAodXNob3J0KSAweDBhKQotI2RlZmluZSBDTURfQk9PVF9VTklUICAgICAgICAgICAoICh1c2hvcnQpIDB4MGIpCi0jZGVmaW5lIENNRF9GT1VORF9VTklUICAgICAgICAgICggKHVzaG9ydCkgMHgwYykKLSNkZWZpbmUgQ01EX0FUVEFDSEVEX1JUQV8yICAgICAgKCAodXNob3J0KSAweDBkKQotI2RlZmluZSBDTURfUFJPVklERV9CT09UICAgICAgICAoICh1c2hvcnQpIDB4MGUpCi0jZGVmaW5lIENNRF9DSVJSVVMgICAgICAgICAgICAgICggKHVzaG9ydCkgMHgwZikKLQotI2RlZmluZSBGT1JNX1NUQVRVU19QS1QgICAgICAgICAoICh1c2hvcnQpIDEgKQotI2RlZmluZSBGT1JNX1BPTExfUEtUICAgICAgICAgICAoICh1c2hvcnQpIDIgKQotI2RlZmluZSBGT1JNX0xJTktfU1RBVFVTX1BLVCAgICAoICh1c2hvcnQpIDMgKQotCi0KLSNkZWZpbmUgQ01EX0RBVEFfUE9SVCAgICAgICAgICAgKCAodXNob3J0KSAxICkKLSNkZWZpbmUgQ01EX0RBVEEgICAgICAgICAgICAgICAgKCAodXNob3J0KSAyICkKLQotI2RlZmluZSBDTURfVFhfUEFSVCAgICAgICAgICAgICAoICh1c2hvcnQpIDIgKQotI2RlZmluZSBDTURfUlhfUEFSVCAgICAgICAgICAgICAoICh1c2hvcnQpIDMgKQotI2RlZmluZSBDTURfUlhfTElNSVQgICAgICAgICAgICAoICh1c2hvcnQpIDQgKQotCi0jZW5kaWYKLQotLyoqKioqKioqKioqIGVuZCBvZiBmaWxlICoqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9kYXRhLmggYi9kcml2ZXJzL2NoYXIvcmlvL2RhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFiYzJkMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2RhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqICBQZXJsZSBTcGVjaWFsaXggZHJpdmVyIGZvciBMaW51eAotKiogIFBvcnRlZCBmcm9tIGV4aXN0aW5nIFJJTyBEcml2ZXIgZm9yIFNDTyBzb3VyY2VzLgotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qKgotKioJTW9kdWxlCQk6IGRhdGEuaAotKioJU0lECQk6IDEuMgotKioJTGFzdCBNb2RpZmllZAk6IDExLzYvOTggMTE6MzQ6MDkKLSoqCVJldHJpZXZlZAk6IDExLzYvOTggMTE6MzQ6MjEKLSoqCi0qKiAgaWRlbnQgQCgjKWRhdGEuaAkxLjIKLSoqCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmbmRlZiBfX3Jpb19kYXRhZGV4X18KLSNkZWZpbmUgX19yaW9fZGF0YWRleF9fCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgKl9kYXRhX2hfc2Njc18gPSAiQCgjKWRhdGEuaAkxLjIiOwotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9kZWJ1Zy5oIGIvZHJpdmVycy9jaGFyL3Jpby9kZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWU5NWMwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vZGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0qKiBGaWxlOgkJZGVidWcuaAotKioKLSoqIEF1dGhvcjoJCURhdmlkIERpeAotKioKLSoqIENyZWF0ZWQ6CQkxMnRoIE1hcmNoIDE5OTMKLSoqCi0qKiBMYXN0IG1vZGlmaWVkOgk5My8wNC8yNwotKioKLSAqCi0gKiAgKEMpIDE5OTAgLSAyMDAwIFNwZWNpYWxpeCBJbnRlcm5hdGlvbmFsIEx0ZC4sIEJ5ZmxlZXQsIFN1cnJleSwgVUsuCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotKi8KLQotI2lmbmRlZiBfZGVidWdfaF8KLSNkZWZpbmUgX2RlYnVnX2hfCi0KLQotI2lmIGRlZmluZWQoRENJUlJVUykKLSNkZWZpbmUJREJQQUNLRVQocGt0LCBvcHQsIHN0ciwgY2huKSAJZGVidWdfcGFja2V0KChwa3QpLCAob3B0KSwgKHN0ciksIChjaG4pKQotI2Vsc2UKLSNkZWZpbmUJREJQQUNLRVQocGt0LCBvcHQsIHN0ciwgYykKLSNlbmRpZgkJCQkvKiBEQ0lSUlVTICovCi0KLQotI2VuZGlmCQkJCS8qIF9kZWJ1Z19oXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9laXNhLmggYi9kcml2ZXJzL2NoYXIvcmlvL2Vpc2EuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJhYmFmMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2Vpc2EuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKiAgUGVybGUgU3BlY2lhbGl4IGRyaXZlciBmb3IgTGludXgKLSoqICBQb3J0ZWQgZnJvbSBleGlzdGluZyBSSU8gRHJpdmVyIGZvciBTQ08gc291cmNlcy4KLQotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qKgotKioJTW9kdWxlCQk6IGVpc2EuaAotKioJU0lECQk6IDEuMgotKioJTGFzdCBNb2RpZmllZAk6IDExLzYvOTggMTE6MzQ6MTAKLSoqCVJldHJpZXZlZAk6IDExLzYvOTggMTE6MzQ6MjEKLSoqCi0qKiAgaWRlbnQgQCgjKWVpc2EuaAkxLjIKLSoqCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmbmRlZiBfX3Jpb19laXNhX2hfXwotI2RlZmluZSBfX3Jpb19laXNhX2hfXwotCi0jaWZkZWYgU0NDU19MQUJFTFMKLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgKl9laXNhX2hfc2Njc18gPSAiQCgjKWVpc2EuaAkxLjIiOwotI2VuZGlmCi0jZW5kaWYKLQotLyoKLSoqIHRoaW5ncyB0byBkbyB3aXRoIHRoZSBFSVNBIGJ1cwotKi8KLQotI2RlZmluZSBSSU9fRUlTQV9TVFJJTkdfQUREUkVTUyAJMHhmZmZkOQkvKiB3aGVyZSBFSVNBIGlzIHN0b3JlZCAqLwotCi0jZGVmaW5lCVJJT19NQVhfRUlTQV9TTE9UUwkJMTYJLyogaG93IG1hbnkgRUlTQSBzbG90cz8gKi8KLQotI2RlZmluZQlSSU9fRUlTQV9JREVOVAkJCTB4OTg0RAkvKiBTcGVjaWFsaXggKi8KLSNkZWZpbmUJUklPX0VJU0FfUFJPRFVDVF9DT0RFCQkweDE0CS8qIENvZGUgMTQgKi8KLSNkZWZpbmUJUklPX0VJU0FfRU5BQkxFX0JJVAkJMHgwMQkvKiBUbyBlbmFibGUgY2FyZCAqLwotCi0jZGVmaW5lCUVJU0FfTUVNT1JZX0JBU0VfTE8JCTB4QzAwCS8qIEExNi1BMjMgKi8KLSNkZWZpbmUJRUlTQV9NRU1PUllfQkFTRV9ISQkJMHhDMDEJLyogQTI0LUEzMSAqLwotI2RlZmluZQlFSVNBX0lOVEVSUlVQVF9WRUMJCTB4QzAyCS8qIHNlZSBiZWxvdyAqLwotI2RlZmluZQlFSVNBX0NPTlRST0xfUE9SVAkJMHhDMDIJLyogc2VlIGJlbG93ICovCi0jZGVmaW5lCUVJU0FfSU5URVJSVVBUX1JFU0VUCQkweEMwMwkvKiByZWFkIHRvIGNsZWFyIElSUSAqLwotCi0jZGVmaW5lCUVJU0FfUFJPRFVDVF9JREVOVF9MTwkJMHhDODAJLyogd2hlcmUgUklPX0VJU0FfSURFTlQgaXMgKi8KLSNkZWZpbmUJRUlTQV9QUk9EVUNUX0lERU5UX0hJCQkweEM4MQotI2RlZmluZQlFSVNBX1BST0RVQ1RfTlVNQkVSCQkweEM4MgkvKiB3aGVyZSBQUk9EX0NPREUgaXMgKi8KLSNkZWZpbmUJRUlTQV9SRVZJU0lPTl9OVU1CRVIJCTB4QzgzCS8qIHJldmlzaW9uICgxZHApICovCi0jZGVmaW5lCUVJU0FfRU5BQkxFCQkJMHhDODQJLyogc2V0IExTQiB0byBlbmFibGUgY2FyZCAqLwotI2RlZmluZQlFSVNBX1VOSVFVRV9OVU1fMAkJMHhDODgJLyogdm9taXQgKi8KLSNkZWZpbmUJRUlTQV9VTklRVUVfTlVNXzEJCTB4QzhBCi0jZGVmaW5lCUVJU0FfVU5JUVVFX05VTV8yCQkweEM5MAkvKiBiaXQgc3RyYW5nZWx5IGFycmFuZ2VkICovCi0jZGVmaW5lCUVJU0FfVU5JUVVFX05VTV8zCQkweEM5MgotI2RlZmluZQlFSVNBX01BTlVGX1lFQVIJCQkweEM5OAkvKiB3aGVuICovCi0jZGVmaW5lCUVJU0FfTUFOVUZfV0VFSwkJCTB4QzlBCS8qIG1vcmUgd2hlbiAqLwotCi0jZGVmaW5lCUVJU0FfVFBfQk9PVF9GUk9NX1JBTQkweDAxCi0jZGVmaW5lCUVJU0FfVFBfQk9PVF9GUk9NX0xJTksJMHgwMAotI2RlZmluZQlFSVNBX1RQX0ZBU1RfTElOS1MJMHgwMgotI2RlZmluZQlFSVNBX1RQX1NMT1dfTElOS1MJMHgwMAotI2RlZmluZQlFSVNBX1RQX0JVU19FTkFCTEUJMHgwNAotI2RlZmluZQlFSVNBX1RQX0JVU19ESVNBQkxFCTB4MDAKLSNkZWZpbmUJRUlTQV9UUF9SVU4JCTB4MDgKLSNkZWZpbmUJRUlTQV9UUF9SRVNFVAkJMHgwMAotI2RlZmluZQlFSVNBX1BPTExFRAkJMHgwMAotI2RlZmluZQlFSVNBX0lSUV8zCQkweDMwCi0jZGVmaW5lCUVJU0FfSVJRXzQJCTB4NDAKLSNkZWZpbmUJRUlTQV9JUlFfNQkJMHg1MAotI2RlZmluZQlFSVNBX0lSUV82CQkweDYwCi0jZGVmaW5lCUVJU0FfSVJRXzcJCTB4NzAKLSNkZWZpbmUJRUlTQV9JUlFfOQkJMHg5MAotI2RlZmluZQlFSVNBX0lSUV8xMAkJMHhBMAotI2RlZmluZQlFSVNBX0lSUV8xMQkJMHhCMAotI2RlZmluZQlFSVNBX0lSUV8xMgkJMHhDMAotI2RlZmluZQlFSVNBX0lSUV8xNAkJMHhFMAotI2RlZmluZQlFSVNBX0lSUV8xNQkJMHhGMAotCi0jZGVmaW5lCUVJU0FfSU5URVJSVVBUX01BU0sJMHhGMAotI2RlZmluZQlFSVNBX0NPTlRST0xfTUFTSwkweDBGCi0KLSNkZWZpbmUJUklPX0VJU0FfREVGQVVMVF9NT0RFCUVJU0FfVFBfU0xPV19MSU5LUwotCi0jZGVmaW5lCVJJT0Vpc2FUb0l2ZWMoWCkJKHVjaGFyICkoKHVjaGFyKSgoWCkgJiBFSVNBX0lOVEVSUlVQVF9NQVNLKT4+NCkKLQotI2RlZmluZQlJTkJaKHoseCkJaW5iKCgoeik8PDEyKSB8ICh4KSkKLSNkZWZpbmUJT1VUQlooeix4LHkpCW91dGIoKCgoeik8PDEyKSB8ICh4KSksIHkpCi0KLSNlbmRpZgkJCQkvKiBfX3Jpb19laXNhX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9lbmFibGUuaCBiL2RyaXZlcnMvY2hhci9yaW8vZW5hYmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNjY3M2YuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9lbmFibGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKgotICoqKioqKiogICAgICAgICAgICAgICBFIE4gQSBCIEwgRSAgIEggRSBBIEQgRSBSIFMKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gQXV0aG9yICA6IElhbiBOYW5kaHJhCi0gRGF0ZSAgICA6Ci0KLSAqCi0gKiAgKEMpIDE5OTAgLSAyMDAwIFNwZWNpYWxpeCBJbnRlcm5hdGlvbmFsIEx0ZC4sIEJ5ZmxlZXQsIFN1cnJleSwgVUsuCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gVmVyc2lvbiA6IDAuMDEKLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kcwotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgRGF0ZSAgICAgQnkgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24KLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgbGludAotI2lmZGVmIFNDQ1MKLXN0YXRpYyBjaGFyICpfcmlvX2VuYWJsZV9oX3NjY3MgPSAiQCgjKWVuYWJsZS5oCTEuMSI7Ci0jZW5kaWYKLSNlbmRpZgotCi0KLSNkZWZpbmUgRU5BQkxFX0xUVCAgVFJVRQotI2RlZmluZSBFTkFCTEVfTFJUICBUUlVFCi0KLQotLyoqKioqKioqKioqIGVuZCBvZiBmaWxlICoqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9mb3JtcGt0LmggYi9kcml2ZXJzL2NoYXIvcmlvL2Zvcm1wa3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M3YzkxYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2Zvcm1wa3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKiAgICAgICAgIEYgTyBSIE0gICBQIEEgQyBLIEUgVCAgIEggRSBBIEQgRSBSICAgRiBJIEwgRQotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSBBdXRob3IgIDogSWFuIE5hbmRocmEKLSBEYXRlICAgIDoKLQotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSBWZXJzaW9uIDogMC4wMQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RzCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBEYXRlICAgICBCeSAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfZm9ybXBrdF9oCi0jZGVmaW5lIF9mb3JtcGt0X2ggMQotCi0jaWZuZGVmIGxpbnQKLSNpZmRlZiBTQ0NTCi1zdGF0aWMgY2hhciAqX3Jpb19mb3JtcGt0X2hfc2NjcyA9ICJAKCMpZm9ybXBrdC5oCTEuMSI7Ci0jZW5kaWYKLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCBGT1JNX0JPT1RfUEtUXzEgRk9STV9CT09UX1BLVF8xOwotc3RydWN0IEZPUk1fQk9PVF9QS1RfMSB7Ci0JdXNob3J0IHBrdF9udW1iZXI7Ci0JdXNob3J0IHBrdF90b3RhbDsKLQl1c2hvcnQgYm9vdF90b3A7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBGT1JNX0JPT1RfUEtUXzIgRk9STV9CT09UX1BLVF8yOwotc3RydWN0IEZPUk1fQk9PVF9QS1RfMiB7Ci0JdXNob3J0IHBrdF9udW1iZXI7Ci0JY2hhciBib290X2RhdGFbMTBdOwotfTsKLQotCi10eXBlZGVmIHN0cnVjdCBGT1JNX0FUVEFDSF9SVEEgRk9STV9BVFRBQ0hfUlRBOwotc3RydWN0IEZPUk1fQVRUQUNIX1JUQSB7Ci0JY2hhciBjbWRfY29kZTsKLQljaGFyIGJvb3Rlcl9zZXJpYWxbNF07Ci0JY2hhciBib290ZXJfbGluazsKLQljaGFyIGJvb3RlZV9zZXJpYWxbNF07Ci0JY2hhciBib290ZWVfbGluazsKLX07Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgRk9STV9CT09UX0lEIEZPUk1fQk9PVF9JRDsKLXN0cnVjdCBGT1JNX0JPT1RfSUQgewotCWNoYXIgY21kX2NvZGU7Ci0JY2hhciBib290ZWVfc2VyaWFsWzRdOwotCWNoYXIgYm9vdGVlX3Byb2RfaWQ7Ci0JY2hhciBib290ZWVfbGluazsKLX07Ci0KLQotCi10eXBlZGVmIHN0cnVjdCBGT1JNX1JPVVRFXzEgRk9STV9ST1VURV8xOwotc3RydWN0IEZPUk1fUk9VVEVfMSB7Ci0JY2hhciBjbWRfY29kZTsKLQljaGFyIHBrdF9udW1iZXI7Ci0JY2hhciB0b3RhbF9pbl9zZXF1ZW5jZTsKLQljaGFyIHVuaXRfaWQ7Ci0JY2hhciBob3N0X3VuaXRfaWQ7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBGT1JNX1JPVVRFXzIgRk9STV9ST1VURV8yOwotc3RydWN0IEZPUk1fUk9VVEVfMiB7Ci0JY2hhciBjbWRfY29kZTsKLQljaGFyIHBrdF9udW1iZXI7Ci0JY2hhciB0b3RhbF9pbl9zZXF1ZW5jZTsKLQljaGFyIHJvdXRlX2RhdGFbOV07Ci19OwotCi10eXBlZGVmIHN0cnVjdCBGT1JNX1JPVVRFX1JFUSBGT1JNX1JPVVRFX1JFUTsKLXN0cnVjdCBGT1JNX1JPVVRFX1JFUSB7Ci0JY2hhciBjbWRfY29kZTsKLQljaGFyIHBrdF9udW1iZXI7Ci0JY2hhciB0b3RhbF9pbl9zZXF1ZW5jZTsKLQljaGFyIHJvdXRlX2RhdGFbMTBdOwotfTsKLQotCi10eXBlZGVmIHN0cnVjdCBGT1JNX0VSUk9SIEZPUk1fRVJST1I7Ci1zdHJ1Y3QgRk9STV9FUlJPUiB7Ci0JY2hhciBjbWRfY29kZTsKLQljaGFyIGVycm9yX2NvZGU7Ci0KLX07Ci0KLXR5cGVkZWYgc3RydWN0IEZPUk1fU1RBVFVTIEZPUk1fU1RBVFVTOwotc3RydWN0IEZPUk1fU1RBVFVTIHsKLQljaGFyIGNtZF9jb2RlOwotCWNoYXIgc3RhdHVzX2NvZGU7Ci0JY2hhciBsYXN0X3BhY2tldF92YWxpZDsKLQljaGFyIHR4X2J1ZmZlcjsKLQljaGFyIHJ4X2J1ZmZlcjsKLQljaGFyIHBvcnRfc3RhdHVzOwotCWNoYXIgcGhiX3N0YXR1czsKLX07Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgRk9STV9MSU5LX1NUQVRVUyBGT1JNX0xJTktfU1RBVFVTOwotc3RydWN0IEZPUk1fTElOS19TVEFUVVMgewotCWNoYXIgY21kX2NvZGU7Ci0JY2hhciBzdGF0dXNfY29kZTsKLQljaGFyIGxpbmtfbnVtYmVyOwotCXVzaG9ydCByeF9lcnJvcnM7Ci0JdXNob3J0IHR4X2Vycm9yczsKLQl1c2hvcnQgY3N1bV9lcnJvcnM7Ci0JdXNob3J0IGRpc2Nvbm5lY3RzOwotfTsKLQotCi0KLXR5cGVkZWYgc3RydWN0IEZPUk1fUEFSVElUSU9OIEZPUk1fUEFSVElUSU9OOwotc3RydWN0IEZPUk1fUEFSVElUSU9OIHsKLQljaGFyIGNtZF9jb2RlOwotCWNoYXIgc3RhdHVzX2NvZGU7Ci0JY2hhciBwb3J0X251bWJlcjsKLQljaGFyIHR4X21heDsKLQljaGFyIHJ4X21heDsKLQljaGFyIHJ4X2xpbWl0OwotfTsKLQotCi0jZW5kaWYKLQotLyoqKioqKioqKioqIGVuZCBvZiBmaWxlICoqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9ob3N0aHcuaCBiL2RyaXZlcnMvY2hhci9yaW8vaG9zdGh3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyODFmZTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9ob3N0aHcuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKgotICoqKioqKiogICAgICAgICAgICAgICAgSCBPIFMgVCAgICAgIEggQSBSIEQgVyBBIFIgRQotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSBBdXRob3IgIDogSWFuIE5hbmRocmEgLyBKZXJlbXkgUm9sbHMKLSBEYXRlICAgIDoKLQotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSBWZXJzaW9uIDogMC4wMQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RzCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBEYXRlICAgICBCeSAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIGxpbnQKLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9yaW9faG9zdGh3X2hfc2NjcyA9ICJAKCMpaG9zdGh3LmgJMS4yIjsKLSNlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgU0VUX09USEVSX0lOVEVSUlVQVCAgKCAodm9sYXRpbGUgdV9zaG9ydCAqKSAweDdjODAgKQotI2RlZmluZSBTRVRfRUlTQV9JTlRFUlJVUFQgICggKHZvbGF0aWxlIHVfc2hvcnQgKikgMHg3ZWYwICkKLQotI2RlZmluZSBFSVNBX0hPU1QgICAgMHgzMAotI2RlZmluZSBBVF9IT1NUICAgICAgMHhhMAotI2RlZmluZSBNQ0FfSE9TVCAgICAgMHhiMAotI2RlZmluZSBQQ0lfSE9TVCAgICAgMHhkMAotCi0jZGVmaW5lIFBST0RVQ1RfTUFTSyAweGYwCi0KLQotLyoqKioqKioqKioqIGVuZCBvZiBmaWxlICoqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9scnQuaCBiL2RyaXZlcnMvY2hhci9yaW8vbHJ0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MTc2NGQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9scnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKgotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgTCBSIFQKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gQXV0aG9yICA6IElhbiBOYW5kaHJhIC8gSmVyZW15IFJvbGxzCi0gRGF0ZSAgICA6Ci0KLSAqCi0gKiAgKEMpIDE5OTAgLSAyMDAwIFNwZWNpYWxpeCBJbnRlcm5hdGlvbmFsIEx0ZC4sIEJ5ZmxlZXQsIFN1cnJleSwgVUsuCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gVmVyc2lvbiA6IDAuMDEKLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kcwotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgRGF0ZSAgICAgQnkgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24KLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgbGludAotI2lmZGVmIFNDQ1NfTEFCRUxTCi1zdGF0aWMgY2hhciAqX3Jpb19scnRfaF9zY2NzID0gIkAoIylscnQuaAkxLjEiOwotI2VuZGlmCi0jZW5kaWYKLQotCi0jaWZkZWYgRENJUlJVUwotI2RlZmluZSBMUlRfU1RBQ0sgICAgICAgKHVuc2lnbmVkIHNob3J0KSA2MDAKLSNlbHNlCi0jZGVmaW5lIExSVF9TVEFDSyAgICAgICAgKHVzaG9ydCkgMjAwCi0jZW5kaWYKLQotCi0KLS8qKioqKioqKioqKiBlbmQgb2YgZmlsZSAqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vbHR0LmggYi9kcml2ZXJzL2NoYXIvcmlvL2x0dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjA0MDA0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vbHR0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgIEwgVCBUCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotIEF1dGhvciAgOiBJYW4gTmFuZGhyYSAvIEplcmVteSBSb2xscwotIERhdGUgICAgOgotCi0gKgotICogIChDKSAxOTkwIC0gMjAwMCBTcGVjaWFsaXggSW50ZXJuYXRpb25hbCBMdGQuLCBCeWZsZWV0LCBTdXJyZXksIFVLLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotIFZlcnNpb24gOiAwLjAxCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHMKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIERhdGUgICAgIEJ5ICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIGxpbnQKLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9yaW9fbHR0X2hfc2NjcyA9ICJAKCMpbHR0LmgJMS4xIjsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBEQ0lSUlVTCi0jZGVmaW5lIExUVF9TVEFDSyAgICAgICAodW5zaWduZWQgc2hvcnQpICA2MDAKLSNlbHNlCi0jZGVmaW5lIExUVF9TVEFDSyAgICAgICAodXNob3J0KSAyMDAKLSNlbmRpZgotCi0KLQotCi0vKioqKioqKioqKiogZW5kIG9mIGZpbGUgKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL2x0dHdha2UuaCBiL2RyaXZlcnMvY2hhci9yaW8vbHR0d2FrZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGYwYzFmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vbHR0d2FrZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgIEwgVCBUICAgIFcgQSBLIEUgVSBQICAgIEggRSBBIEQgRSBSCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotIEF1dGhvciAgOiBJYW4gTmFuZGhyYQotIERhdGUgICAgOgotCi0gKgotICogIChDKSAxOTkwIC0gMjAwMCBTcGVjaWFsaXggSW50ZXJuYXRpb25hbCBMdGQuLCBCeWZsZWV0LCBTdXJyZXksIFVLLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotIFZlcnNpb24gOiAwLjAxCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHMKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIERhdGUgICAgIEJ5ICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIGxpbnQKLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9yaW9fbHR0d2FrZV9oX3NjY3MgPSAiQCgjKWx0dHdha2UuaAkxLjEiOwotI2VuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBMVFRfV0FLRVVQX1NUQUNLICAgICAgICAgIDUwMAotI2RlZmluZSBMVFRfV0FLRVVQX0lOVEVSVkFMICAgICAgIChpbnQpICg1MDAgKiBNSUxMSVNFQ09ORCkKLQotCi0vKioqKioqKioqKiogZW5kIG9mIGZpbGUgKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL21jYS5oIGIvZHJpdmVycy9jaGFyL3Jpby9tY2EuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAxZTc2Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL21jYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKgotKiogIFBlcmxlIFNwZWNpYWxpeCBkcml2ZXIgZm9yIExpbnV4Ci0qKiAgUG9ydGVkIGZyb20gZXhpc3RpbmcgUklPIERyaXZlciBmb3IgU0NPIHNvdXJjZXMuCi0gKgotICogIChDKSAxOTkwIC0gMjAwMCBTcGVjaWFsaXggSW50ZXJuYXRpb25hbCBMdGQuLCBCeWZsZWV0LCBTdXJyZXksIFVLLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSoqCi0qKglNb2R1bGUJCTogbWNhLmgKLSoqCVNJRAkJOiAxLjIKLSoqCUxhc3QgTW9kaWZpZWQJOiAxMS82Lzk4IDExOjM0OjExCi0qKglSZXRyaWV2ZWQJOiAxMS82Lzk4IDExOjM0OjIxCi0qKgotKiogIGlkZW50IEAoIyltY2EuaAkxLjIKLSoqCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmbmRlZiBfX3Jpb19tY2FfaF9fCi0jZGVmaW5lCV9fcmlvX21jYV9oX18KLQotI2lmZGVmIFNDQ1NfTEFCRUxTCi1zdGF0aWMgY2hhciAqX21jYV9oX3NjY3NfID0gIkAoIyltY2EuaAkxLjIiOwotI2VuZGlmCi0KLS8qCi0qKiBNaWNybyBDaGFubmVsIHN0dWZmCi0qLwotCi0jZGVmaW5lCU1jYU1heFNsb3RzCTgKLSNkZWZpbmUgTWNhU2xvdFNlbGVjdAkweDk2Ci0jZGVmaW5lCU1jYVNsb3RFbmFibGUJMHgwOAotI2RlZmluZQlNY2FJZExvdwkweDEwMAotI2RlZmluZQlNY2FJZEhpZ2gJMHgxMDEKLSNkZWZpbmUJTWNhSXJxRW5hYmxlCTB4MTAyCi0jZGVmaW5lCU1jYU1lbW9yeQkweDEwMwotI2RlZmluZSBNY2FSSU9JZAkweDZhNWMKLSNkZWZpbmUJTWNhSXJxOQkJMHgwMAotI2RlZmluZQlNY2FJcnEzCQkweDAyCi0jZGVmaW5lCU1jYUlycTQJCTB4MDQKLSNkZWZpbmUJTWNhSXJxNwkJMHgwNgotI2RlZmluZQlNY2FJcnExMAkweDA4Ci0jZGVmaW5lCU1jYUlycTExCTB4MEEKLSNkZWZpbmUJTWNhSXJxMTIJMHgwQwotI2RlZmluZQlNY2FJcnExNQkweDBFCi0jZGVmaW5lIE1jYUlycU1hc2sJMHgwRQotI2RlZmluZQlNY2FDYXJkRW5hYmxlCTB4MDEKLSNkZWZpbmUJTWNhQWRkcmVzcyhYKQkoKChYKSYweEZGKTw8MTYpCi0KLSNkZWZpbmUJTWNhVHBGYXN0TGlua3MJICAgICAgICAweDQwCi0jZGVmaW5lCU1jYVRwU2xvd0xpbmtzCSAgICAgICAgMHgwMAotI2RlZmluZQlNY2FUcEJvb3RGcm9tUmFtCTB4MDEKLSNkZWZpbmUJTWNhVHBCb290RnJvbUxpbmsJMHgwMAotI2RlZmluZQlNY2FUcEJ1c0VuYWJsZQkJMHgwMgotI2RlZmluZQlNY2FUcEJ1c0Rpc2FibGUJCTB4MDAKLQotI2RlZmluZQlSSU9fTUNBX0RFRkFVTFRfTU9ERQlTTE9XX0xJTktTCi0KLSNlbmRpZgkJCQkvKiBfX3Jpb19tY2FfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL21lc2cuaCBiL2RyaXZlcnMvY2hhci9yaW8vbWVzZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDliZTU4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vbWVzZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKgotKiogIFBlcmxlIFNwZWNpYWxpeCBkcml2ZXIgZm9yIExpbnV4Ci0qKiAgUG9ydGVkIGZyb20gZXhpc3RpbmcgUklPIERyaXZlciBmb3IgU0NPIHNvdXJjZXMuCi0gKgotICogIChDKSAxOTkwIC0gMjAwMCBTcGVjaWFsaXggSW50ZXJuYXRpb25hbCBMdGQuLCBCeWZsZWV0LCBTdXJyZXksIFVLLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSoqCi0qKglNb2R1bGUJCTogbWVzZy5oCi0qKglTSUQJCTogMS4yCi0qKglMYXN0IE1vZGlmaWVkCTogMTEvNi85OCAxMTozNDoxMgotKioJUmV0cmlldmVkCTogMTEvNi85OCAxMTozNDoyMQotKioKLSoqICBpZGVudCBAKCMpbWVzZy5oCTEuMgotKioKLSoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWZuZGVmIF9fcmlvX21lc2dfaF9fCi0jZGVmaW5lCV9fcmlvX21lc2dfaF9fCi0KLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9tZXNnX2hfc2Njc18gPSAiQCgjKW1lc2cuaAkxLjIiOwotI2VuZGlmCi0KLQotI2VuZGlmCQkJCS8qIF9fcmlvX21lc2dfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3BvbGwuaCBiL2RyaXZlcnMvY2hhci9yaW8vcG9sbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjE2ZWU0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcG9sbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICBQIE8gTCBMCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotIEF1dGhvciAgOiBJYW4gTmFuZGhyYSAvIEplcmVteSBSb2xscwotIERhdGUgICAgOgotCi0gKgotICogIChDKSAxOTkwIC0gMjAwMCBTcGVjaWFsaXggSW50ZXJuYXRpb25hbCBMdGQuLCBCeWZsZWV0LCBTdXJyZXksIFVLLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotIFZlcnNpb24gOiAwLjAxCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHMKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIERhdGUgICAgIEJ5ICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9wb2xsX2gKLSNkZWZpbmUgX3BvbGxfaAotCi0jaWZuZGVmIGxpbnQKLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9yaW9fcG9sbF9oX3NjY3MgPSAiQCgjKXBvbGwuaAkxLjIiOwotI2VuZGlmCi0jZW5kaWYKLQotCi0jaWZkZWYgSE9TVAotI2RlZmluZSBQT0xMX1NUQUNLICAgICAgICAgICAgMTAwCi0jZW5kaWYKLSNpZmRlZiBSVEEKLSNkZWZpbmUgUE9MTF9TVEFDSyAgICAgICAgICAgIDIwMAotI2VuZGlmCi0KLSNkZWZpbmUgUE9MTF9QRVJJT0QgICAgICAgICAgIChpbnQpIFNFQ09ORAotCi0vKiBUaGUgdmFyaW91cyBwb2xsIGNvbW1hbmRzICovCi0jZGVmaW5lIFBPTExfUE9MTCAgICAgICAgICAgICAwCS8qIFdlIGFyZSBjb25uZWN0ZWQgYW5kIGhhcHB5Li4gKi8KLSNkZWZpbmUgUE9MTF9JTlRSTyAgICAgICAgICAgIDEJLyogSW50cm9kdWN0aW9uIHBhY2tldCAqLwotI2RlZmluZSBQT0xMX1RPUE9MT0dZICAgICAgICAgMgkvKiBUb3BvbG9neSB1cGRhdGUgKi8KLSNkZWZpbmUgUE9MTF9BU1NJR04gICAgICAgICAgIDMJLyogSUQgYXNzaWduICovCi0jZGVmaW5lIFBPTExfRk9BRCAgICAgICAgICAgICA0CS8qIEYqKiogT2ZmIEFuZCBEaWUgKi8KLSNkZWZpbmUgUE9MTF9MTUQJICAgICAgNQkvKiBMZXQgTWUgRGllICovCi0jZGVmaW5lIFBPTExfRFlCCSAgICAgIDYJLyogRGllIFlvdSBCYSoqKioqICovCi0KLS8qIFRoZSB3YXkgZGF0YSBmaWVsZHMgYXJlIHNwbGl0IHVwIGZvciBQT0xMIHBhY2tldHMgKi8KLSNkZWZpbmUgUE9MTF9IT1NUX1NFUklBTCAgICAgIDIJLyogSG9zdCB3aG8gYm9vdGVkIG1lICovCi0jZGVmaW5lIFBPTExfTVlfU0VSSUFMICAgICAgICA2CS8qIE15IHNlcmlhbCBudW1iZXIgKi8KLSNkZWZpbmUgUE9MTF9ZT1VSX0lEICAgICAgICAgIDEJLyogWW91ciBJRCBudW1iZXIgKi8KLSNkZWZpbmUgUE9MTF9UT1BPTE9HWV9GSUVMRFMgIDIJLyogVG9wb2xvZ3kgbWFwcyAqLwotCi0jZW5kaWYKLQotLyoqKioqKioqKioqIGVuZCBvZiBmaWxlICoqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9wcm90by5oIGIvZHJpdmVycy9jaGFyL3Jpby9wcm90by5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWEzMzc2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcHJvdG8uaAorKysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi0vKgotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLSNpZm5kZWYJX3Byb3RvdHlwZXNfaAotI2RlZmluZSBfcHJvdG90eXBlc19oCi0KLQotLyoKLSoqIGJvb3QuYwotKi8KLXZvaWQgaW5pdF9ib290KGNoYXIgKnAsIHNob3J0IHN0YWdlKTsKLQotLyoKLSoqIGRpc2NvbmN0LmMKLSovCi12b2lkIGtpbGxfYm9vdChMUEIgKiBsaW5rKTsKLXZvaWQgZGlzY29ubmVjdGVkKExQQiAqIGxpbmspOwotc2hvcnQgYm9vdF8zKExQQiAqIGxpbmssIFBLVCAqIHBrdCk7Ci1zaG9ydCBzZW5kXzNfcGt0KExQQiAqIGxpbmssIFBLVCAqIHBrdCk7Ci0KLS8qCi0qKiBlcnJvci5jCi0qLwotdm9pZCBkdV9lcnJvcih2b2lkKTsKLQotLyoKLSoqIGZvcm1wa3QuYwotKi8KLXVzaG9ydCBzdW1faXQoUEtUICogcGt0KTsKLXZvaWQgZm9ybV9ydXBfcGt0KFJVUCAqIGZvcm1fcnVwLCBQS1QgKiBwa3QpOwotdm9pZCBmb3JtX3BvbGxfcGt0KGludCB0eXBlLCBMUEIgKiBsaW5rLCBpbnQgbm9kZSk7Ci12b2lkIGZvcm1fcm91dGVfcGt0KGludCB0eXBlLCBQS1QgKiBwa3QsIExQQiAqIGxpbmspOwotCi0vKgotKiogaWRsZS5jCi0qLwotdm9pZCBpZGxlKFByb2Nlc3MgKiBpZGxlX3ApOwotCi0vKgotKiogaW5pdC5jCi0qLwotdm9pZCBnZW5lcmFsX2luaXQodm9pZCk7Ci12b2lkIG1lbV9oYWx0KGludCBlcnJvcik7Ci0KLS8qCi0qKiBsaW5raW5pdC5jCi0qLwotdm9pZCBpbml0bGluayh1X3Nob3J0IG51bWJlciwgTFBCICogbGluayk7Ci12b2lkIHJ1bmxpbmsoTFBCICogbGluayk7Ci0KLS8qCi0qKiBsaXN0LmMKLSovCi1QS1QgKmdldF9mcmVlX3N0YXJ0KHZvaWQpOwotdm9pZCBwdXRfZnJlZV9zdGFydChQS1QgKiBwa3QpOwotCi0jaWZkZWYgSE9TVAotaW50IGNhbl9yZW1vdmVfdHJhbnNtaXQoUEtUICoqIHBrdCwgUEtUICogcG9pbnRlcik7Ci0jZW5kaWYKLQotI2lmZGVmIFJUQQotaW50IHNwbDcodm9pZCk7Ci1pbnQgc3BsMCh2b2lkKTsKLVFfQlVGICpnZXRfZnJlZV9xKHZvaWQpOwotUEtUICpnZXRfZnJlZV9lbmQodm9pZCk7Ci1pbnQgYWRkX2VuZChQS1QgKiBwa3QsIFBIQiAqIHBoYiwgaW50IHR5cGUpOwotdW5zaWduZWQgc2hvcnQgZnJlZV9wYWNrZXRzKFBIQiAqIHBoYiwgaW50IHR5cGUpOwotaW50IGNhbl9yZW1vdmVfc3RhcnQoUEtUICoqIHBrdCwgUEhCICogcGhiLCBpbnQgdHlwZSk7Ci1pbnQgY2FuX2FkZF9zdGFydChQSEIgKiBwaGIsIGludCB0eXBlKTsKLWludCBjYW5fYWRkX2VuZChQSEIgKiBwaGIsIGludCB0eXBlKTsKLXZvaWQgcHV0X2ZyZWVfZW5kKFBLVCAqIHBrdCk7Ci1pbnQgcmVtb3ZlX3N0YXJ0KFBLVCAqKiBwa3QsIFBIQiAqIHBoYiwgaW50IHR5cGUpOwotI2VuZGlmCi0KLS8qCi0qKiBMcnQuYwotKi8KLXZvaWQgbHJ0KFByb2Nlc3MgKiBscnRfcCwgTFBCICogbGluayk7Ci0KLSNpZmRlZiBSVEEKLXZvaWQgc2V0X2xlZF9yZWQoTFBCICogbGluayk7Ci0jZW5kaWYKLQotLyoKLSoqIGx0dC5jCi0qLwotdm9pZCBsdHQoUHJvY2VzcyAqIGx0dF9wLCBMUEIgKiBsaW5rLCBQSEIgKiBwaGJfcHRyW10pOwotdm9pZCBzZW5kX3BvbGwoTFBCICogbGluayk7Ci12b2lkIHJlcXVlc3RfaWQoTFBCICogbGluayk7Ci12b2lkIHNlbmRfdG9wb2xvZ3lfdXBkYXRlKExQQiAqIGxpbmspOwotdm9pZCBzZW5kX3RvcG9sb2d5KExQQiAqIGxpbmspOwotdm9pZCBzdXBwbHlfaWQoTFBCICogbGluayk7Ci0KLSNpZmRlZiBSVEEKLXZvaWQgcmVkaXJlY3RfcXVldWUoTFBCICogbGluaywgdXNob3J0IGZsdXNoKTsKLWludCBvYnRhaW5fcnVwKGludCBydXBfbnVtYmVyLCBQS1QgKiogcGt0X2FkZHJlc3MsIExQQiAqIGxpbmspOwotI2VuZGlmCi0KLSNpZmRlZiBURVNUSU5HX1BFUkYKLWludCBjb25zdW1lX2NwdSh2b2lkKTsKLSNlbmRpZgotCi0vKgotKiogbHR0d2FrZS5jCi0qLwotI2lmZGVmIEhPU1QKLXZvaWQgbHR0X3dha2V1cChQcm9jZXNzICogbHR0X3dha2V1cF9wKTsKLSNlbmRpZgotCi0vKgotKiogbWFwZ2VuLmMKLSovCi12b2lkIGdlbmVyYXRlX2lkX21hcChzaG9ydCBtYXBwaW5nLCBST1VURV9TVFIgcm91dGVbXSk7Ci12b2lkIGdlbl9tYXAoaW50IG1hcHBpbmcsIGludCBsb29raW5nX2F0LCBpbnQgY29tZV9mcm9tLCBST1VURV9TVFIgcm91dGVbXSwgaW50IGxpbmssIGludCAqdHRsKTsKLXZvaWQgYWRqdXN0X3R0bChpbnQgbWFwcGluZywgaW50IGxvb2tpbmdfYXQsIGludCBjb21lX2Zyb20sIFJPVVRFX1NUUiByb3V0ZVtdLCBpbnQgbGluaywgaW50ICp0dGwpOwotdm9pZCBpbml0X3N5c19tYXAodm9pZCk7Ci0KLS8qCi0qKiBtbXUuYwotKi8KLWNoYXIgKnJpb19tYWxsb2ModW5zaWduZWQgaW50IGFtb3VudCk7Ci1jaGFyICpyaW9fY2FsbG9jKHVuc2lnbmVkIGludCBudW0sIHVuc2lnbmVkIGludCBzaXplKTsKLUVSUk9SIHJpb19tbXVfaW5pdCh1aW50IHRvdGFsX21lbSk7Ci0KLS8qCi0qKiBwYXJ0bi5jCi0qLwotdm9pZCBwYXJ0aXRpb25fdHgoc3RydWN0IFBIQiAqcGhiLCB1X3Nob3J0IHR4X3NpemUsIHVfc2hvcnQgcnhfc2l6ZSwgdV9zaG9ydCByeF9saW1pdCk7Ci0KLS8qCi0qKiBwb2xsLmMKLSovCi12b2lkIHR4X3BvbGwoUHJvY2VzcyAqIHR4X3BvbGxfcCk7Ci0KLS8qCi0qKiBwcm9jZXNzLmMKLSovCi1pbnQgZ2V0X3Byb2Nfc3BhY2UoUHJvY2VzcyAqKiBwZCwgaW50ICoqcHdzLCBpbnQgd3NzaXplKTsKLQotLyoKLSoqIHJlYWRyb20uYwotKi8KLXZvaWQgcmVhZF9zZXJpYWxfbnVtYmVyKGNoYXIgKmJ1Zik7Ci0KLS8qCi0qKiByaW8uYwotKi8KLWludCBtYWluKHZvaWQpOwotCi0vKgotKiogcm91dGUuYwotKi8KLXZvaWQgcm91dGVfdXBkYXRlKFBLVCAqIHBrdCwgTFBCICogbGluayk7Ci0KLS8qCi0qKiBydGFpbml0LmMKLSovCi0jaWYgZGVmaW5lZChSVEEpCi12b2lkIHJ0YV9pbml0KHVzaG9ydCBSdGFUeXBlKTsKLSNlbmRpZgkJCQkvKiBkZWZpbmVkKFJUQSkgKi8KLQotLyoKLSoqIHJ1cGJvb3QuYwotKi8KLXZvaWQgcnVwX2Jvb3QoUEtUICogcGt0LCBSVVAgKiB0aGlzX3J1cCwgTFBCICogbGluayk7Ci0KLSNpZmRlZiBSVEEKLXZvaWQga2lsbF95b3VyX25laWdoYm91cihpbnQgbGlua190b19raWxsKTsKLSNlbmRpZgotCi0vKgotKiogcnVwY21kLmMKLSovCi12b2lkIHJ1cF9jb21tYW5kKFBLVCAqIHBrdCwgc3RydWN0IFJVUCAqdGhpc19ydXAsIExQQiAqIGxpbmspOwotCi0vKgotKiogcnVwZXJyLmMKLSovCi12b2lkIHJ1cF9lcnJvcihQS1QgKiBwa3QsIFJVUCAqIHRoaXNfcnVwLCBMUEIgKiBsaW5rKTsKLXZvaWQgaWxsZWdhbF9jbWQoUEtUICogc3JjX3BrdCk7Ci0KLS8qCi0qKiBydXBwb2xsLmMKLSovCi12b2lkIHJ1cF9wb2xsKFBLVCAqIHBrdCwgUlVQICogdGhpc19ydXAsIExQQiAqIGxpbmspOwotCi0vKgotKiogcnVwcG93ZXIuYwotKi8KLXZvaWQgcnVwX3Bvd2VyKFBLVCAqIHBrdCwgUlVQICogdGhpc19ydXAsIExQQiAqIGxpbmspOwotCi0vKgotKiogcnVwcm0uYwotKi8KLXZvaWQgcnVwX3JvdXRlX21hcChQS1QgKiBwa3QsIFJVUCAqIHRoaXNfcnVwLCBMUEIgKiBsaW5rKTsKLQotLyoKLSoqIHJ1cHN0YXQuYwotKi8KLXZvaWQgcnVwX3N0YXR1cyhQS1QgKiBwa3QsIFJVUCAqIHRoaXNfcnVwLCBMUEIgKiBsaW5rKTsKLQotLyoKLSoqIHJ1cHN5bmMuYwotKi8KLXZvaWQgcnVwX3N5bmMoUEtUICogcGt0KTsKLQotLyoKLSoqIHJ4cGt0LmMKLSovCi1FUlJPUiByeF9wa3QoUEtUX3B0cl9wdHIgcGt0X2FkZHJlc3MsIExQQiAqIGxpbmspOwotCi0vKgotKiogc2VuZHN0cy5jCi0qLwotdm9pZCBzZW5kX3N0YXR1cyhQS1QgKiByZXF1ZXN0aW5nX3BrdCwgUlVQICogdGhpc19ydXApOwotCi0vKgotKiogc2VyaWFsLmMKLSovCi12b2lkIGFzc2lnbl9zZXJpYWwoY2hhciAqc2VyX2luLCBjaGFyICpzZXJfb3V0KTsKLWludCBjbXBfc2VyaWFsKGNoYXIgKnNlcl8xLCBjaGFyICpzZXJfMik7Ci0KLS8qCi0qKiB0eHBrdC5jCi0qLwotRVJST1IgdHhfcGt0KFBLVCAqIHBrdCwgTFBCICogbGluayk7Ci1zaG9ydCBzZW5kX3N5bmMoTFBCICogbGluayk7Ci0KLSNlbmRpZgkJCQkvKiBfcHJvdG90eXBlc19oICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguYwppbmRleCA4ODI1YmQ2Li5jOWFmMjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMKQEAgLTEzMiwxNiArMTMyLDYgQEAKICovCiAjZGVmaW5lIElSUV9SQVRFX0xJTUlUIDIwMAogCi0jaWYgMAotLyogTm90IGltcGxlbWVudGVkICovCi0vKiAKLSAqIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgbW9zdGx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBCdXQgaWYgeW91IG5lZWQKLSAqIHNvbWUgbmljZSByZXBvcnRpbmcgaW4geW91ciBzeXNsb2csIHlvdSBjYW4gZGVmaW5lIHRoZW0gYWxzby4KLSAqLwotI2RlZmluZSBSSU9fUkVQT1JUX0ZJRk8KLSNkZWZpbmUgUklPX1JFUE9SVF9PVkVSUlVOCi0jZW5kaWYKLQogCiAvKiBUaGVzZSBjb25zdGFudHMgYXJlIGRlcml2ZWQgZnJvbSBTQ08gU291cmNlICovCiBzdGF0aWMgc3RydWN0IENvbmYKQEAgLTU3MywyMSArNTYzLDYgQEAKIAogCVBvcnRQID0gKHN0cnVjdCBQb3J0ICopIHB0cjsKIAlQb3J0UC0+Z3MudHR5ID0gTlVMTDsKLSNpZiAwCi0JcG9ydC0+Z3MuZmxhZ3MgJj0gfkdTX0FDVElWRTsKLQlpZiAoIXBvcnQtPmdzLnR0eSkgewotCQlyaW9fZHByaW50ayhSSU9fREJVR19UVFksICJObyB0dHkuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoIXBvcnQtPmdzLnR0eS0+dGVybWlvcykgewotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiTm8gdGVybWlvcy5cbiIpOwotCQlyZXR1cm47Ci0JfQotCWlmIChwb3J0LT5ncy50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkgewotCQlyaW9fc2V0c2lnbmFscyhwb3J0LCAwLCAwKTsKLQl9Ci0jZW5kaWYKLQogCWZ1bmNfZXhpdCgpOwogfQogCkBAIC02NjMsMTEgKzYzOCw2IEBACiAKIAlyYyA9IDA7CiAJc3dpdGNoIChjbWQpIHsKLSNpZiAwCi0JY2FzZSBUSU9DR1NPRlRDQVI6Ci0JCXJjID0gcHV0X3VzZXIoKCh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpID8gMSA6IDApLCAodW5zaWduZWQgaW50ICopIGFyZyk7Ci0JCWJyZWFrOwotI2VuZGlmCiAJY2FzZSBUSU9DU1NPRlRDQVI6CiAJCWlmICgocmMgPSBnZXRfdXNlcihpdmFsLCAodW5zaWduZWQgaW50ICopIGFyZykpID09IDApIHsKIAkJCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9ICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiB+Q0xPQ0FMKSB8IChpdmFsID8gQ0xPQ0FMIDogMCk7CkBAIC03MDksMzYgKzY3OSw2IEBACiAJCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICh2b2lkICopIGFyZywgc2l6ZW9mKHN0cnVjdCBzZXJpYWxfc3RydWN0KSkpCiAJCQlyYyA9IGdzX3NldHNlcmlhbCgmUG9ydFAtPmdzLCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKikgYXJnKTsKIAkJYnJlYWs7Ci0jaWYgMAotCQkvKgotCQkgKiBub3RlOiB0aGVzZSBJT0NUTHMgbm8gbG9uZ2VyIHJlYWNoIGhlcmUuICBVc2UKLQkJICogdGlvY21zZXQvdGlvY21nZXQgZHJpdmVyIG1ldGhvZHMgaW5zdGVhZC4gIFRoZQotCQkgKiAjaWYgMCBkaXNhYmxlbWVudCBwcmVkYXRlcyB0aGlzIGNvbW1lbnQuCi0JCSAqLwotCWNhc2UgVElPQ01HRVQ6Ci0JCXJjID0gLUVGQVVMVDsKLQkJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsICh2b2lkICopIGFyZywgc2l6ZW9mKHVuc2lnbmVkIGludCkpKSB7Ci0JCQlyYyA9IDA7Ci0JCQlpdmFsID0gcmlvX2dldHNpZ25hbHMocG9ydCk7Ci0JCQlwdXRfdXNlcihpdmFsLCAodW5zaWduZWQgaW50ICopIGFyZyk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBUSU9DTUJJUzoKLQkJaWYgKChyYyA9IGdldF91c2VyKGl2YWwsICh1bnNpZ25lZCBpbnQgKikgYXJnKSkgPT0gMCkgewotCQkJcmlvX3NldHNpZ25hbHMocG9ydCwgKChpdmFsICYgVElPQ01fRFRSKSA/IDEgOiAtMSksICgoaXZhbCAmIFRJT0NNX1JUUykgPyAxIDogLTEpKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFRJT0NNQklDOgotCQlpZiAoKHJjID0gZ2V0X3VzZXIoaXZhbCwgKHVuc2lnbmVkIGludCAqKSBhcmcpKSA9PSAwKSB7Ci0JCQlyaW9fc2V0c2lnbmFscyhwb3J0LCAoKGl2YWwgJiBUSU9DTV9EVFIpID8gMCA6IC0xKSwgKChpdmFsICYgVElPQ01fUlRTKSA/IDAgOiAtMSkpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgVElPQ01TRVQ6Ci0JCWlmICgocmMgPSBnZXRfdXNlcihpdmFsLCAodW5zaWduZWQgaW50ICopIGFyZykpID09IDApIHsKLQkJCXJpb19zZXRzaWduYWxzKHBvcnQsICgoaXZhbCAmIFRJT0NNX0RUUikgPyAxIDogMCksICgoaXZhbCAmIFRJT0NNX1JUUykgPyAxIDogMCkpOwotCQl9Ci0JCWJyZWFrOwotI2VuZGlmCiAJZGVmYXVsdDoKIAkJcmMgPSAtRU5PSU9DVExDTUQ7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9ib290LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2Jvb3QuYwppbmRleCAzNGNiYjEzLi45MmRmNDM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2Jvb3QuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2Jvb3QuYwpAQCAtNjY1LDEzICs2NjUsNiBAQAogCXN0cnVjdCBDbWRCbGsgKkNtZEJsa1A7CiAJdWludCBzZXF1ZW5jZTsKIAotI2lmZGVmIENIRUNLCi0JQ2hlY2tIb3N0KEhvc3QpOwotCUNoZWNrUnVwKFJ1cCk7Ci0JQ2hlY2tIb3N0UChIb3N0UCk7Ci0JQ2hlY2tQYWNrZXRQKFBhY2tldFApOwotI2VuZGlmCi0KIAkvKgogCSoqIElmIHdlIGhhdmVuJ3QgYmVlbiB0b2xkIHdoYXQgdG8gYm9vdCwgd2UgY2FuJ3QgYm9vdCBpdC4KIAkqLwpAQCAtOTU2LDExICs5NDksNiBAQAogCSAgICBNeVR5cGUgPSAiUlRBIjsKIAkgICAgTXlOYW1lID0gSG9zdFAtPk1hcHBpbmdbUnVwXS5OYW1lOwogCX0KLSNpZmRlZiBDSEVDSwotCUNoZWNrU3RyaW5nKE15VHlwZSk7Ci0JQ2hlY2tTdHJpbmcoTXlOYW1lKTsKLSNlbmRpZgotCiAJTXlMaW5rID0gUkJZVEUoUGt0Q21kUC0+TGlua051bSk7CiAKIAkvKgpAQCAtMTMwOSw1MiArMTI5NywzIEBACiAJfQogfQogCi0jaWYgMAotLyoKLQlGdW5jdGlvbjoJVGhpcyBmdW5jdGlvbiBpcyB0byBkaXNhYmxlIHRoZSBkaXNrIGludGVycnVwdCAKLSAgICBSZXR1cm5zIDogICBOb3RoaW5nCi0qLwotdm9pZAotZGlzYWJsZV9pbnRlcnJ1cHQodmVjdG9yKQotaW50CXZlY3RvcjsKLXsKLQlpbnQJcHM7Ci0JaW50CXZhbDsKLQotCWRpc2FibGUocHMpOwotCWlmICh2ZWN0b3IgPiA0MCkgIHsKLQkJdmFsID0gMSA8PCAodmVjdG9yIC0gNDApOwotCQlfX291dGIoUzgyNTkrMSwgX19pbmIoUzgyNTkrMSkgfCB2YWwpOwotCX0KLQllbHNlIHsKLQkJdmFsID0gMSA8PCAodmVjdG9yIC0gMzIpOwotCQlfX291dGIoTTgyNTkrMSwgX19pbmIoTTgyNTkrMSkgfCB2YWwpOwotCX0KLQlyZXN0b3JlKHBzKTsKLX0KLQotLyoKLQlGdW5jdGlvbjoJVGhpcyBmdW5jdGlvbiBpcyB0byBlbmFibGUgdGhlIGRpc2sgaW50ZXJydXB0IAotICAgIFJldHVybnMgOiAgIE5vdGhpbmcKLSovCi12b2lkCi1lbmFibGVfaW50ZXJydXB0KHZlY3RvcikKLWludAl2ZWN0b3I7Ci17Ci0JaW50CXBzOwotCWludAl2YWw7Ci0KLQlkaXNhYmxlKHBzKTsKLQlpZiAodmVjdG9yID4gNDApICB7Ci0JCXZhbCA9IDEgPDwgKHZlY3RvciAtIDQwKTsKLQkJdmFsID0gfnZhbDsKLQkJX19vdXRiKFM4MjU5KzEsIF9faW5iKFM4MjU5KzEpICYgdmFsKTsKLQl9Ci0JZWxzZSB7Ci0JCXZhbCA9IDEgPDwgKHZlY3RvciAtIDMyKTsKLQkJdmFsID0gfnZhbDsKLQkJX19vdXRiKE04MjU5KzEsIF9faW5iKE04MjU5KzEpICYgdmFsKTsKLQl9Ci0JcmVzdG9yZShwcyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCmluZGV4IGI5N2RkOWYuLjY5NGJmYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9jbWQuYwpAQCAtMzg3LDEyICszODcsNiBAQAogCiAJZnVuY19lbnRlcigpOwogCi0jaWZkZWYgQ0hFQ0sKLQlDaGVja0hvc3QoSG9zdCk7Ci0JQ2hlY2tIb3N0UChIb3N0UCk7Ci0JQ2hlY2tQYWNrZXRQKFBhY2tldFApOwotI2VuZGlmCi0KIAkvKgogCSAqKiAxNiBwb3J0IFJUQSBub3RlOgogCSAqKiBDb21tYW5kIHJ1cCBwYWNrZXRzIGNvbWluZyBmcm9tIHRoZSBSVEEgd2lsbCBoYXZlIHBrdC0+ZGF0YVsxXSAod2hpY2gKQEAgLTQwNiwxMCArNDAwLDYgQEAKIAlTeXNQb3J0ID0gVW5peFJ1cFAtPkJhc2VTeXNQb3J0ICsgKFJCWVRFKFBrdENtZFAtPlBoYk51bSkgJSAodXNob3J0KSBQT1JUU19QRVJfUlRBKTsKIAlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiQ29tbWFuZCBvbiBydXAgJWQsIHBvcnQgJWRcbiIsIHJ1cCwgU3lzUG9ydCk7CiAKLSNpZmRlZiBDSEVDSwotCUNoZWNrUnVwKHJ1cCk7Ci0JQ2hlY2tVbml4UnVwUChVbml4UnVwUCk7Ci0jZW5kaWYKIAlpZiAoVW5peFJ1cFAtPkJhc2VTeXNQb3J0ID09IE5PX1BPUlQpIHsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIk9CU0NVUkUgRVJST1IhXG4iKTsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkRpYWdub3N0aWNzIGZvbGxvdy4gUGxlYXNlIFdSSVRFIFRIRVNFIERPV04gYW5kIHJlcG9ydCB0aGVtIHRvIFNwZWNpYWxpeCBUZWNobmljYWwgU3VwcG9ydFxuIik7CkBAIC00MjksOSArNDE5LDYgQEAKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkNPTU1BTkQgaW5mb3JtYXRpb246IEhvc3QgUG9ydCBOdW1iZXIgMHgleCwgIiAiQ29tbWFuZCBDb2RlIDB4JXhcbiIsIFBrdENtZFAtPlBoYk51bSwgUGt0Q21kUC0+Q29tbWFuZCk7CiAJCXJldHVybiBUUlVFOwogCX0KLSNpZmRlZiBDSEVDSwotCUNoZWNrU3lzUG9ydChTeXNQb3J0KTsKLSNlbmRpZgogCVBvcnRQID0gcC0+UklPUG9ydHBbU3lzUG9ydF07CiAJcmlvX3NwaW5fbG9ja19pcnFzYXZlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwogCXN3aXRjaCAoUkJZVEUoUGt0Q21kUC0+Q29tbWFuZCkpIHsKQEAgLTYwNCwxMSArNTkxLDYgQEAKIAlzdHJ1Y3QgVW5peFJ1cCAqVW5peFJ1cFA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotI2lmZGVmIENIRUNLCi0JQ2hlY2tIb3N0UChIb3N0UCk7Ci0JQ2hlY2tSdXAoUnVwKTsKLQlDaGVja0NtZEJsa1AoQ21kQmxrUCk7Ci0jZW5kaWYKIAlpZiAoUnVwID49ICh1c2hvcnQpIChNQVhfUlVQICsgTElOS1NfUEVSX1VOSVQpKSB7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJJbGxlZ2FsIHJ1cCBudW1iZXIgJWQgaW4gUklPUXVldWVDbWRCbGtcbiIsIFJ1cCk7CiAJCVJJT0ZyZWVDbWRCbGsoQ21kQmxrUCk7CkBAIC04MDYsOSArNzg4LDYgQEAKIAkJCSAqKiBJZiBpdCByZXR1cm5zIFJJT19GQUlMIHRoZW4gZG9uJ3QKIAkJCSAqKiBzZW5kIHRoaXMgY29tbWFuZCB5ZXQhCiAJCQkgKi8KLSNpZmRlZiBDSEVDSwotCQkJQ2hlY2tDbWRCbGtQKENtZEJsa1ApOwotI2VuZGlmCiAJCQlpZiAoIShDbWRCbGtQLT5QcmVGdW5jUCA/ICgqQ21kQmxrUC0+UHJlRnVuY1ApIChDbWRCbGtQLT5QcmVBcmcsIENtZEJsa1ApIDogVFJVRSkpIHsKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiTm90IHJlYWR5IHRvIHN0YXJ0IGNvbW1hbmQgMHgleFxuIiwgKGludCkgQ21kQmxrUCk7CiAJCQl9IGVsc2UgewpAQCAtODE2LDkgKzc5NSw2IEBACiAJCQkJLyoKIAkJCQkgKiogV2hhbW15ISBibGF0IHRoYXQgcGFjayEKIAkJCQkgKi8KLSNpZmRlZiBDSEVDSwotCQkJCUNoZWNrUGFja2V0UCgoUEtUICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCBVbml4UnVwUC0+UnVwUC0+dHhwa3QpKTsKLSNlbmRpZgogCQkJCUhvc3RQLT5Db3B5KChjYWRkcl90KSAmIENtZEJsa1AtPlBhY2tldCwgUklPX1BUUihIb3N0UC0+Q2FkZHIsIFVuaXhSdXBQLT5SdXBQLT50eHBrdCksIHNpemVvZihQS1QpKTsKIAogCQkJCS8qCkBAIC04NTIsOSArODI4LDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmlvX3NwaW5fbG9ja19pcnFzYXZlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotI2lmZGVmIENIRUNLCi0JQ2hlY2tQb3J0UChQb3J0UCk7Ci0jZW5kaWYKIAlQb3J0UC0+V2ZsdXNoRmxhZysrOwogCVBvcnRQLT5NYWdpY0ZsYWdzIHw9IE1BR0lDX0ZMVVNIOwogCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwpAQCAtODk0LDkgKzg2Nyw2IEBACiAKIAlyaW9fc3Bpbl9sb2NrX2lycXNhdmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7CiAKLSNpZmRlZiBDSEVDSwotCUNoZWNrUG9ydFAoUG9ydFApOwotI2VuZGlmCiAJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkRlY3JlbWVudCBpbiB1c2UgY291bnQgZm9yIHBvcnRcbiIpOwogCiAJaWYgKFBvcnRQLT5JblVzZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwppbmRleCAwYjc3MDBkLi5mY2YxOGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwpAQCAtMzA4LDEyICszMDgsNyBAQAogCQl9CiAKIAljYXNlIFJJT19ERUJVR19NRU06Ci0jaWZkZWYgREVCVUdfTUVNX1NVUFBPUlQKLQkJUklPX0RFQlVHX0NUUkwsIGlmIChzdSkKLQkJCXJldHVybiByaW9fUklPRGVidWdNZW1vcnkoUklPX0RFQlVHX0NUUkwsIGFyZyk7Ci0JCWVsc2UKLSNlbmRpZgotCQkJcmV0dXJuIC1FUEVSTTsKKwkJcmV0dXJuIC1FUEVSTTsKIAogCWNhc2UgUklPX0FMTF9NT0RFTToKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fQUxMX01PREVNXG4iKTsKQEAgLTU5MSwxMiArNTg2LDcgQEAKIAogCWNhc2UgUklPX0dFVF9MT0c6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0dFVF9MT0dcbiIpOwotI2lmZGVmIExPR0dJTkcKLQkJUklPR2V0TG9nKGFyZyk7Ci0JCXJldHVybiAwOwotI2Vsc2UKIAkJcmV0dXJuIC1FSU5WQUw7Ci0jZW5kaWYKIAogCWNhc2UgUklPX0dFVF9NT0RUWVBFOgogCQlpZiAoY29weWluKChpbnQpIGFyZywgKGNhZGRyX3QpICYgcG9ydCwgc2l6ZW9mKHVpbnQpKSA9PSBDT1BZRkFJTCkgewpAQCAtNjg0LDUyICs2NzQsNiBAQAogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgImVudGVyaW5nIGxvb3AgKCVkICVkKSFcbiIsIFBvcnRTZXR1cC5Gcm9tLCBQb3J0U2V0dXAuVG8pOwogCQlmb3IgKGxvb3AgPSBQb3J0U2V0dXAuRnJvbTsgbG9vcCA8PSBQb3J0U2V0dXAuVG87IGxvb3ArKykgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJpbiBsb29wICglZCkhXG4iLCBsb29wKTsKLSNpZiAwCi0JCQlQb3J0UCA9IHAtPlJJT1BvcnRwW2xvb3BdOwotCQkJaWYgKCFQb3J0UC0+VHR5UCkKLQkJCQlQb3J0UC0+VHR5UCA9ICZwLT5jaGFubmVsW2xvb3BdOwotCi0JCQlyaW9fc3Bpbl9sb2NrX2lycXNhdmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCQlpZiAoUG9ydFNldHVwLkl4QW55KQotCQkJCVBvcnRQLT5Db25maWcgfD0gUklPX0lYQU5ZOwotCQkJZWxzZQotCQkJCVBvcnRQLT5Db25maWcgJj0gflJJT19JWEFOWTsKLQkJCWlmIChQb3J0U2V0dXAuSXhPbikKLQkJCQlQb3J0UC0+Q29uZmlnIHw9IFJJT19JWE9OOwotCQkJZWxzZQotCQkJCVBvcnRQLT5Db25maWcgJj0gflJJT19JWE9OOwotCi0JCQkvKgotCQkJICoqIElmIHRoZSBwb3J0IG5lZWRzIHRvIHdhaXQgZm9yIGFsbCBhIHByb2Nlc3NlcyBvdXRwdXQKLQkJCSAqKiB0byBkcmFpbiBiZWZvcmUgY2xvc2luZyB0aGVuIHRoaXMgZmxhZyB3aWxsIGJlIHNldC4KLQkJCSAqLwotCQkJaWYgKFBvcnRTZXR1cC5EcmFpbikgewotCQkJCVBvcnRQLT5Db25maWcgfD0gUklPX1dBSVREUkFJTjsKLQkJCX0gZWxzZSB7Ci0JCQkJUG9ydFAtPkNvbmZpZyAmPSB+UklPX1dBSVREUkFJTjsKLQkJCX0KLQkJCS8qCi0JCQkgKiogU3RvcmUgc2V0dGluZ3MgaWYgbG9ja2luZyBvciB1bmxvY2tpbmcgcG9ydCBvciBpZiB0aGUKLQkJCSAqKiBwb3J0IGlzIG5vdCBsb2NrZWQsIHdoZW4gc2V0dGluZyB0aGUgc3RvcmUgb3B0aW9uLgotCQkJICovCi0JCQlpZiAoUG9ydFAtPk1hcHBlZCAmJiAoKFBvcnRTZXR1cC5Mb2NrICYmICFQb3J0UC0+TG9jaykgfHwgKCFQb3J0UC0+TG9jayAmJiAoUG9ydFNldHVwLlN0b3JlICYmICFQb3J0UC0+U3RvcmUpKSkpIHsKLQkJCQlQb3J0UC0+U3RvcmVkVHR5LmlmbGFnID0gUG9ydFAtPlR0eVAtPnRtLmNfaWZsYWc7Ci0JCQkJUG9ydFAtPlN0b3JlZFR0eS5vZmxhZyA9IFBvcnRQLT5UdHlQLT50bS5jX29mbGFnOwotCQkJCVBvcnRQLT5TdG9yZWRUdHkuY2ZsYWcgPSBQb3J0UC0+VHR5UC0+dG0uY19jZmxhZzsKLQkJCQlQb3J0UC0+U3RvcmVkVHR5LmxmbGFnID0gUG9ydFAtPlR0eVAtPnRtLmNfbGZsYWc7Ci0JCQkJUG9ydFAtPlN0b3JlZFR0eS5saW5lID0gUG9ydFAtPlR0eVAtPnRtLmNfbGluZTsKLQkJCQliY29weShQb3J0UC0+VHR5UC0+dG0uY19jYywgUG9ydFAtPlN0b3JlZFR0eS5jYywgTkNDICsgNSk7Ci0JCQl9Ci0JCQlQb3J0UC0+TG9jayA9IFBvcnRTZXR1cC5Mb2NrOwotCQkJUG9ydFAtPlN0b3JlID0gUG9ydFNldHVwLlN0b3JlOwotCQkJUG9ydFAtPlhwcmludC5YcENwcyA9IFBvcnRTZXR1cC5YcENwczsKLQkJCWJjb3B5KFBvcnRTZXR1cC5YcE9uLCBQb3J0UC0+WHByaW50LlhwT24sIE1BWF9YUF9DVFJMX0xFTik7Ci0JCQliY29weShQb3J0U2V0dXAuWHBPZmYsIFBvcnRQLT5YcHJpbnQuWHBPZmYsIE1BWF9YUF9DVFJMX0xFTik7Ci0JCQlQb3J0UC0+WHByaW50LlhwT25bTUFYX1hQX0NUUkxfTEVOIC0gMV0gPSAnXDAnOwotCQkJUG9ydFAtPlhwcmludC5YcE9mZltNQVhfWFBfQ1RSTF9MRU4gLSAxXSA9ICdcMCc7Ci0JCQlQb3J0UC0+WHByaW50LlhwTGVuID0gUklPU3RybGVuKFBvcnRQLT5YcHJpbnQuWHBPbikgKyBSSU9TdHJsZW4oUG9ydFAtPlhwcmludC5YcE9mZik7Ci0JCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKLSNlbmRpZgogCQl9CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiYWZ0ZXIgbG9vcCAoJWQpIVxuIiwgbG9vcCk7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUmV0dmFsOiV4XG4iLCByZXR2YWwpOwpAQCAtODAxLDEyICs3NDUsNiBAQAogCiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUG9ydCAlZFxuIiwgUG9ydFR0eS5wb3J0KTsKIAkJUG9ydFAgPSAocC0+UklPUG9ydHBbUG9ydFR0eS5wb3J0XSk7Ci0jaWYgMAotCQlQb3J0VHR5LlR0eS50bS5jX2lmbGFnID0gUG9ydFAtPlR0eVAtPnRtLmNfaWZsYWc7Ci0JCVBvcnRUdHkuVHR5LnRtLmNfb2ZsYWcgPSBQb3J0UC0+VHR5UC0+dG0uY19vZmxhZzsKLQkJUG9ydFR0eS5UdHkudG0uY19jZmxhZyA9IFBvcnRQLT5UdHlQLT50bS5jX2NmbGFnOwotCQlQb3J0VHR5LlR0eS50bS5jX2xmbGFnID0gUG9ydFAtPlR0eVAtPnRtLmNfbGZsYWc7Ci0jZW5kaWYKIAkJaWYgKGNvcHlvdXQoKGNhZGRyX3QpICYgUG9ydFR0eSwgKGludCkgYXJnLCBzaXplb2Yoc3RydWN0IFBvcnRUdHkpKSA9PSBDT1BZRkFJTCkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtODI0LDE1ICs3NjIsNiBAQAogCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCQlQb3J0UCA9IChwLT5SSU9Qb3J0cFtQb3J0VHR5LnBvcnRdKTsKLSNpZiAwCi0JCXJpb19zcGluX2xvY2tfaXJxc2F2ZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKLQkJUG9ydFAtPlR0eVAtPnRtLmNfaWZsYWcgPSBQb3J0VHR5LlR0eS50bS5jX2lmbGFnOwotCQlQb3J0UC0+VHR5UC0+dG0uY19vZmxhZyA9IFBvcnRUdHkuVHR5LnRtLmNfb2ZsYWc7Ci0JCVBvcnRQLT5UdHlQLT50bS5jX2NmbGFnID0gUG9ydFR0eS5UdHkudG0uY19jZmxhZzsKLQkJUG9ydFAtPlR0eVAtPnRtLmNfbGZsYWcgPSBQb3J0VHR5LlR0eS50bS5jX2xmbGFnOwotCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKLSNlbmRpZgotCiAJCVJJT1BhcmFtKFBvcnRQLCBDT05GSUcsIFBvcnRQLT5TdGF0ZSAmIFJJT19NT0RFTSwgT0tfVE9fU0xFRVApOwogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC05MDksMjMgKzgzOCw2IEBACiAJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwogCQlyZXR1cm4gcmV0dmFsOwogCi0jaWZkZWYgREVCVUdfU1VQUE9SVEVECi0JY2FzZSBSSU9fUkVBRF9MRVZFTFM6Ci0JCXsKLQkJCWludCBudW07Ci0JCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19SRUFEX0xFVkVMU1xuIik7Ci0JCQlmb3IgKG51bSA9IDA7IFJJT0RiSW5mW251bV0uRmxhZzsgbnVtKyspOwotCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICIlZCBsZXZlbHMgdG8gY29weVxuIiwgbnVtKTsKLQkJCWlmIChjb3B5b3V0KChjYWRkcl90KSBSSU9EYkluZiwgKGludCkgYXJnLCBzaXplb2Yoc3RydWN0IERiSW5mKSAqIChudW0gKyAxKSkgPT0gQ09QWUZBSUwpIHsKLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJlYWRMZXZlbHMgQ29weSBmYWlsZWRcbiIpOwotCQkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7Ci0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl9Ci0JCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIiVkIGxldmVscyB0byBjb3BpZWRcbiIsIG51bSk7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCQl9Ci0jZW5kaWYKLQogCWNhc2UgUklPX1JFQURfQ09ORklHOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19SRUFEX0NPTkZJR1xuIik7CiAJCWlmIChjb3B5b3V0KChjYWRkcl90KSAmIHAtPlJJT0NvbmYsIChpbnQpIGFyZywgc2l6ZW9mKHN0cnVjdCBDb25mKSkgPT0gQ09QWUZBSUwpIHsKQEAgLTEwODQsMzAgKzk5NiwxMyBAQAogCQkJKHZvaWQpIFJJT0JvYXJkVGVzdChwLT5SSU9Ib3N0c1tIb3N0XS5QYWRkclAsIHAtPlJJT0hvc3RzW0hvc3RdLkNhZGRyLCBwLT5SSU9Ib3N0c1tIb3N0XS5UeXBlLCBwLT5SSU9Ib3N0c1tIb3N0XS5TbG90KTsKIAkJCWJ6ZXJvKChjYWRkcl90KSAmIHAtPlJJT0hvc3RzW0hvc3RdLkZsYWdzLCAoKGludCkgJnAtPlJJT0hvc3RzW0hvc3RdLl9fX19lbmRfbWFya2VyX19fXykgLSAoKGludCkgJnAtPlJJT0hvc3RzW0hvc3RdLkZsYWdzKSk7CiAJCQlwLT5SSU9Ib3N0c1tIb3N0XS5GbGFncyA9IFJDX1dBSVRJTkc7Ci0jaWYgMAotCQkJUklPU2V0dXBEYXRhU3RydWN0cyhwKTsKLSNlbmRpZgogCQl9CiAJCVJJT0ZvYWRXYWtldXAocCk7CiAJCXAtPlJJT051bUJvb3RQa3RzID0gMDsKIAkJcC0+UklPQm9vdGluZyA9IDA7Ci0KLSNpZmRlZiBSSU5HQlVGRkVSX1NVUFBPUlQKLQkJZm9yIChsb29wID0gMDsgbG9vcCA8IFJJT19QT1JUUzsgbG9vcCsrKQotCQkJaWYgKHAtPlJJT1BvcnRwW2xvb3BdLT5UeFJpbmdCdWZmZXIpCi0JCQkJc3lzZnJlZSgodm9pZCAqKSBwLT5SSU9Qb3J0cFtsb29wXS0+VHhSaW5nQnVmZmVyLCBSSU9CdWZmZXJTaXplKTsKLSNlbmRpZgotI2lmIDAKLQkJYnplcm8oKGNhZGRyX3QpICYgcC0+UklPUG9ydHBbMF0sIFJJT19QT1JUUyAqIHNpemVvZihzdHJ1Y3QgUG9ydCkpOwotI2Vsc2UKIAkJcHJpbnRrKCJIRUVFRUVMUCFcbiIpOwotI2VuZGlmCiAKIAkJZm9yIChsb29wID0gMDsgbG9vcCA8IFJJT19QT1JUUzsgbG9vcCsrKSB7Ci0jaWYgMAotCQkJcC0+UklPUG9ydHBbbG9vcF0tPlR0eVAgPSAmcC0+Y2hhbm5lbFtsb29wXTsKLSNlbmRpZgotCiAJCQlzcGluX2xvY2tfaW5pdCgmcC0+UklPUG9ydHBbbG9vcF0tPnBvcnRTZW0pOwogCQkJcC0+UklPUG9ydHBbbG9vcF0tPkluVXNlID0gTk9UX0lOVVNFOwogCQl9CkBAIC0xNjUzLDEwICsxNTQ4LDYgQEAKIAl1c2hvcnQgcnVwOwogCWludCBwb3J0OwogCi0jaWZkZWYgQ0hFQ0sKLQlDaGVja1BvcnRQKFBvcnRQKTsKLSNlbmRpZgotCiAJaWYgKFBvcnRQLT5TdGF0ZSAmIFJJT19ERUxFVEVEKSB7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUHJlZW1wdGl2ZSBjb21tYW5kIHRvIGRlbGV0ZWQgUlRBIGlnbm9yZWRcbiIpOwogCQlyZXR1cm4gUklPX0ZBSUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luaXQuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvaW5pdC5jCmluZGV4IDg5OGExMjYuLjBkNDRlZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvaW5pdC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvaW5pdC5jCkBAIC04NywyMjIgKzg3LDggQEAKIAogaW50IFJJT1BDSWluaXQoc3RydWN0IHJpb19pbmZvICpwLCBpbnQgTW9kZSk7CiAKLSNpZiAwCi1zdGF0aWMgdm9pZCBSSU9BbGxvY2F0ZUludGVycnVwdHMoc3RydWN0IHJpb19pbmZvICopOwotc3RhdGljIGludCBSSU9SZXBvcnQoc3RydWN0IHJpb19pbmZvICopOwotc3RhdGljIHZvaWQgUklPU3RvcEludGVycnVwdHMoc3RydWN0IHJpb19pbmZvICosIGludCwgaW50KTsKLSNlbmRpZgotCiBzdGF0aWMgaW50IFJJT1NjcnViKGludCwgQllURSAqLCBpbnQpOwogCi0jaWYgMAotZXh0ZXJuIGludAlyaW9faW50cigpOwotCi0vKgotKioJSW5pdCB0aW1lIGNvZGUuCi0qLwotdm9pZAotcmlvaW5pdCggcCwgaW5mbyApCi1zdHJ1Y3QgcmlvX2luZm8JCSogcDsKLXN0cnVjdCBSaW9Ib3N0SW5mbwkqIGluZm87Ci17Ci0JLyoKLQkqKiBNdWx0aS1Ib3N0IGNhcmQgc3VwcG9ydCAtIHRha2luZyB0aGUgZWFzeSB3YXkgb3V0IC0gc29ycnkgIQotCSoqIFdlIGFsbG9jYXRlIGFuZCBzZXQgdXAgdGhlIEhvc3QgYW5kIFBvcnQgc3RydWN0cyB3aGVuIHRoZQotCSoqIGRyaXZlciBpcyBjYWxsZWQgdG8gJ2luc3RhbGwnIHRoZSBmaXJzdCBob3N0LgotCSoqIFdlIGNoZWNrIGZvciB0aGlzIGZpcnN0ICdjYWxsJyBieSB0ZXN0aW5nIHRoZSBSSU9Qb3J0cCBwb2ludGVyLgotCSovCi0JaWYgKCAhcC0+UklPUG9ydHAgKQotCXsKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAgIkFsbG9jYXRpbmcgYW5kIHNldHRpbmcgdXAgZHJpdmVyIGRhdGEgc3RydWN0dXJlc1xuIik7Ci0KLQkJUklPQWxsb2NEYXRhU3RydWN0cyhwKTsJCS8qIGFsbG9jYXRlIGhvc3QvcG9ydCBzdHJ1Y3RzICovCi0JCVJJT1NldHVwRGF0YVN0cnVjdHMocCk7CQkvKiBzZXR1cCB0b3BvbG9neSBzdHJ1Y3RzICovCi0JfQotCi0JUklPSW5pdEhvc3RzKCBwLCBpbmZvICk7CS8qIGh1bnQgZG93biB0aGUgaGFyZHdhcmUgKi8KLQotCVJJT0FsbG9jYXRlSW50ZXJydXB0cyhwKTsJLyogYWxsb2NhdGUgaW50ZXJydXB0cyAqLwotCVJJT1JlcG9ydChwKTsJCQkvKiBzaG93IHdoYXQgd2UgZm91bmQgKi8KLX0KLQotLyoKLSoqIEluaXRpYWxpc2UgdGhlIENhcmRzIAotKi8gCi12b2lkCi1SSU9Jbml0SG9zdHMocCwgaW5mbykKLXN0cnVjdCByaW9faW5mbwkJKiBwOwotc3RydWN0IFJpb0hvc3RJbmZvCSogaW5mbzsKLXsKLS8qCi0qKiAxNS4xMC4xOTk4IEFSRyAtIEVTSUwgMDc2MiBwYXJ0IGZpeAotKiogSWYgdGhlcmUgaXMgbm8gSVNBIGNhcmQgZGVmaW5pdGlvbiAtIHdlIGFsd2F5cyBsb29rIGZvciBQQ0kgY2FyZHMuCi0qKiBBcyB3ZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IG9uZSBob3N0IGNhcmQgdGhpcyBsZXRzIGFuIElTQSBjYXJkCi0qKiBkZWZpbml0aW9uIHRha2UgcHJlY2VkZW5jZSBvdmVyIFBMVUcgYW5kIFBMQVkuCi0qKiBObyBJU0EgY2FyZCAtIHdlIGFyZSBQTFVHIGFuZCBQTEFZIHdpdGggUENJLgotKi8KLQotCS8qCi0JKiogTm90ZSAtIGZvciBQQ0kgYm90aCB0aGVzZSB3aWxsIGJlIHplcm8sIHRoYXQncyBva2F5IGJlY2F1c2UKLQkqKiBSSU9QQ0lJbml0KCkgZmlsbHMgdGhlbSBpbiBpZiBhIGNhcmQgaXMgZm91bmQuCi0JKi8KLQlwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uSXZlYwk9IGluZm8tPnZlY3RvcjsKLQlwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uUGFkZHJQCT0gaW5mby0+bG9jYXRpb247Ci0KLQkvKgotCSoqIENoZWNrIHRoYXQgd2UgYXJlIGFibGUgdG8gYWNjb21tb2RhdGUgYW5vdGhlciBob3N0Ci0JKi8KLQlpZiAoIHAtPlJJT051bUhvc3RzID49IFJJT19IT1NUUyApCi0JewotCQlwLT5SSU9GYWlsZWQrKzsKLQkJcmV0dXJuOwotCX0KLQotCWlmICggaW5mby0+YnVzICYgSVNBX0JVUyApCi0JewotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICAiaW5pdGlhbGlzaW5nIGNhcmQgJWQgKElTQSlcbiIsIHAtPlJJT051bUhvc3RzKTsKLQkJUklPSVNBaW5pdChwLCBwLT5tb2RlKTsKLQl9Ci0JZWxzZQotCXsKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAgImluaXRpYWxpc2luZyBjYXJkICVkIChQQ0kpXG4iLCBwLT5SSU9OdW1Ib3N0cyk7Ci0JCVJJT1BDSWluaXQocCwgUklPX1BDSV9ERUZBVUxUX01PREUpOwotCX0KLQotCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgICJUb3RhbCBob3N0cyBpbml0aWFsaXNlZCBzbyBmYXIgOiAlZFxuIiwgcC0+UklPTnVtSG9zdHMpOwotCi0KLSNpZmRlZiBGVVRVUkVfUkVMRUFTRQotCWlmIChwLT5idXMgJiBFSVNBX0JVUykKLQkJLyogRUlTQSBjYXJkICovCi0JCVJJT0VJU0Fpbml0KHAsIFJJT19FSVNBX0RFRkFVTFRfTU9ERSk7Ci0KLQlpZiAocC0+YnVzICYgTUNBX0JVUykKLQkJLyogTUNBIGNhcmQgKi8KLQkJUklPTUNBaW5pdChwLCBSSU9fTUNBX0RFRkFVTFRfTU9ERSk7Ci0jZW5kaWYKLX0KLQotLyoKLSoqIGdvIHRocm91Z2ggbWVtb3J5IGZvciBhbiBBVCBob3N0IHRoYXQgd2UgcGFzcyBpbiB0aGUgZGV2aWNlIGluZm8KLSoqIHN0cnVjdHVyZSBhbmQgaW5pdGlhbGlzZQotKi8KLXZvaWQKLVJJT0lTQWluaXQocCwgbW9kZSkKLXN0cnVjdCByaW9faW5mbyAqCXA7Ci1pbnQJCQkJCW1vZGU7Ci17Ci0KLSAgLyogWFhYIE5lZWQgdG8gaW1wbGVtZW50IHRoaXMuICovCi0jaWYgMAotCXAtPmludHJfdGlkID0gaW9pbnRzZXQocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLkl2ZWMsCi0JCQkJCShpbnQgKCopKCkpcmlvX2ludHIsIChjaGFyKilwLT5SSU9OdW1Ib3N0cyk7Ci0KLQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICAiU2V0IGludGVycnVwdCBoYW5kbGVyLCBpbnRyX3RpZCA9IDB4JXhcbiIsIHAtPmludHJfdGlkICk7Ci0KLQlpZiAoUklPRG9BVChwLCBwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uUGFkZHJQLCBtb2RlKSkgewotCQlyZXR1cm47Ci0JfQotCWVsc2UgewotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU9Eb0FUIGZhaWxlZFxuIik7Ci0JCXAtPlJJT0ZhaWxlZCsrOwotCX0KLSNlbmRpZgotCi19Ci0KLS8qCi0qKiBSSU9Eb0FUIDoKLSoqCi0qKiBNYXAgaW4gYSBib2FyZHMgcGh5c2ljYWwgYWRkcmVzcywgY2hlY2sgdGhhdCB0aGUgYm9hcmQgaXMgdGhlcmUsCi0qKiB0ZXN0IHRoZSBib2FyZCBhbmQgaWYgZXZlcnl0aGluZyBpcyBva2F5IGFzc2lnbiB0aGUgYm9hcmQgYW4gZW50cnkKLSoqIGluIHRoZSBSaW8gSG9zdHMgc3RydWN0dXJlLgotKi8KLWludAotUklPRG9BVChwLCBCYXNlLCBtb2RlKQotc3RydWN0IHJpb19pbmZvICoJcDsKLWludAkJQmFzZTsKLWludAkJbW9kZTsKLXsKLSNkZWZpbmUJRk9VTkQJCTEKLSNkZWZpbmUgTk9UX0ZPVU5ECTAKLQotCWNhZGRyX3QJCWNhcmRBZGRyOwotCi0JLyoKLQkqKiBDaGVjayB0byBzZWUgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhIGJvYXJkIGF0IHRoaXMgcGh5c2ljYWwgYWRkcmVzcy4KLQkqLwotCWlmICgoY2FyZEFkZHIgPSBSSU9DaGVja0ZvckFUQ2FyZChCYXNlKSkgIT0gMCkgewotCQkvKgotCQkqKiBOb3cgdGVzdCB0aGUgYm9hcmQgdG8gc2VlIGlmIGl0IGlzIHdvcmtpbmcuCi0JCSovCi0JCWlmIChSSU9Cb2FyZFRlc3QoQmFzZSwgY2FyZEFkZHIsIFJJT19BVCwgMCkgPT0gUklPX1NVQ0NFU1MpIHsKLQkJCS8qCi0JCQkqKiBGaWxsIG91dCBhIHNsb3QgaW4gdGhlIFJpbyBob3N0IHN0cnVjdHVyZS4KLQkJCSovCi0JCQlpZiAoUklPQXNzaWduQVQocCwgQmFzZSwgY2FyZEFkZHIsIG1vZGUpKSB7Ci0JCQkJcmV0dXJuKEZPVU5EKTsKLQkJCX0KLQkJfQotCQlSSU9NYXBvdXQoQmFzZSwgUklPX0FUX01FTV9TSVpFLCBjYXJkQWRkcik7Ci0JfQotCXJldHVybihOT1RfRk9VTkQpOwotfQotCi1jYWRkcl90Ci1SSU9DaGVja0ZvckFUQ2FyZChCYXNlKQotaW50CQlCYXNlOwotewotCWludAkJCQlvZmY7Ci0Jc3RydWN0IERwUmFtCSpjYXJkcDsJCS8qIChQb2ludHMgYXQgdGhlIGhvc3QpICovCi0JY2FkZHJfdAkJCXZpcnRBZGRyOwotCXVuc2lnbmVkIGNoYXIJCQlSSU9TaWdUYWJbMjRdOwotLyoKLSoqIFRhYmxlIG9mIHZhbHVlcyB0byBzZWFyY2ggZm9yIGFzIHByb20gc2lnbmF0dXJlIG9mIGEgaG9zdCBjYXJkCi0qLwotCXN0cmNweShSSU9TaWdUYWIsICJKQkpHUEdHSElOU01KUEpSIik7Ci0KLQkvKgotCSoqIEhleSEgWWVzLCBZb3UgcmVhZGluZyB0aGlzIGNvZGUhIFlvLCBncmFiIGEgbG9hZCBhIHRoaXM6Ci0JKioKLQkqKiBJRiB0aGUgY2FyZCBpcyB1c2luZyBXT1JEIE1PREUgcmF0aGVyIHRoYW4gQllURSBNT0RFCi0JKiogdGhlbiBpdCB3aWxsIG9jY3VweSAxMjhLIG9mIFBIWVNJQ0FMIG1lbW9yeSBhcmVhLiBTbywKLQkqKiB5b3UgbWlnaHQgdGhpbmsgdGhhdCB0aGUgZm9sbG93aW5nIE1hcGluIGlzIHdyb25nLiBXZWxsLAotCSoqIGl0IGlzbid0LCBiZWNhdXNlIHRoZSBTRUNPTkQgNjRLIG9mIG9jY3VwaWVkIHNwYWNlIGlzIGFuCi0JKiogRVhBQ1QgQ09QWSBvZiB0aGUgRklSU1QgNjRLLiAoZ29vZD8pLCBzbywgd2UgbmVlZCBvbmx5Ci0JKiogbWFwIGl0IGluIGluIG9uZSA2NEsgYmxvY2suCi0JKi8KLQlpZiAoUklPTWFwaW4oQmFzZSwgUklPX0FUX01FTV9TSVpFLCAmdmlydEFkZHIpID09IC0xKSB7Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBDb3VsZG4ndCBtYXAgdGhlIGJvYXJkIGluIVxuIik7Ci0JCXJldHVybigoY2FkZHJfdCkwKTsKLQl9Ci0KLQkvKgotCSoqIHZpcnRBZGRyIHBvaW50cyB0byB0aGUgRFAgcmFtIG9mIHRoZSBzeXN0ZW0uCi0JKiogV2Ugbm93IGNhc3QgdGhpcyB0byBhIHBvaW50ZXIgdG8gYSBSSU8gSG9zdCwKLQkqKiBhbmQgaGF2ZSBhIHJ1bW1hZ2UgYWJvdXQgaW4gdGhlIFBST00uCi0JKi8KLQljYXJkcCA9IChzdHJ1Y3QgRHBSYW0gKil2aXJ0QWRkcjsKLQotCWZvciAob2ZmPTA7IFJJT1NpZ1RhYltvZmZdOyBvZmYrKykgewotCQlpZiAoKFJCWVRFKGNhcmRwLT5EcFNpZ25hdHVyZVtvZmZdKSAmIDB4RkYpICE9IFJJT1NpZ1RhYltvZmZdKSB7Ci0JCQkvKgotCQkJKiogU2lnbmF0dXJlIG1pc21hdGNoIC0gY2FyZCBub3QgYXQgdGhpcyBhZGRyZXNzCi0JCQkqLwotCQkJUklPTWFwb3V0KEJhc2UsIFJJT19BVF9NRU1fU0laRSwgdmlydEFkZHIpOwotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPLWluaXQ6IENvdWxkbid0IG1hdGNoIHRoZSBzaWduYXR1cmUgMHgleCAweCV4IVxuIiwKLQkJCQkJCShpbnQpY2FyZHAsIG9mZik7Ci0JCQlyZXR1cm4oKGNhZGRyX3QpMCk7Ci0JCX0KLQl9Ci0KLQkvKgotCSoqIElmIHdlIGdldCBoZXJlIHRoZW4gd2UgbXVzdCBoYXZlIGZvdW5kIGEgdmFsaWQgYm9hcmQgc28gcmV0dXJuCi0JKiogaXRzIHZpcnR1YWwgYWRkcmVzcy4KLQkqLwotCXJldHVybih2aXJ0QWRkcik7Ci19Ci0jZW5kaWYKIAogLyoqCiAqKiBSSU9Bc3NpZ25BVCA6CkBAIC0zNjcsNjY3ICsxNTMsNiBAQAogCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBUZXN0cyBQYXNzZWQgYXQgMHgleFxuIiwgQmFzZSk7CiAJcmV0dXJuKDEpOwogfQotI2lmIDAKLSNpZmRlZiBGVVRVUkVfUkVMRUFTRQotaW50IFJJT01DQWluaXQoaW50IE1vZGUpCi17Ci0JdWNoYXIgU2xvdE51bWJlcjsKLQljYWRkcl90IENhZGRyOwotCXVpbnQJUGFkZHI7Ci0JdWludAlJdmVjOwotCWludAkgSGFuZGxlOwotCWludAkgcmV0ID0gMDsKLQotCS8qCi0JKiogVmFsaWQgbW9kZSBpbmZvcm1hdGlvbiBmb3IgTUNBIGNhcmRzCi0JKiogaXMgb25seSBGQVNUIExJTktTCi0JKi8KLQlNb2RlID0gKE1vZGUgJiBGQVNUX0xJTktTKSA/IE1jYVRwRmFzdExpbmtzIDogTWNhVHBTbG93TGlua3M7Ci0JcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPTUNBaW5pdCglZClcbiIsTW9kZSk7Ci0KLQotCS8qCi0JKiogQ2hlY2sgb3V0IGVhY2ggb2YgdGhlIHNsb3RzCi0JKi8KLQlmb3IgKFNsb3ROdW1iZXIgPSAwOyBTbG90TnVtYmVyIDwgTWNhTWF4U2xvdHM7IFNsb3ROdW1iZXIrKykgewotCS8qCi0JKiogRW5hYmxlIHRoZSBzbG90IHdlIHdhbnQgdG8gdGFsayB0bwotCSovCi0Jb3V0YiggTWNhU2xvdFNlbGVjdCwgU2xvdE51bWJlciB8IE1jYVNsb3RFbmFibGUgKTsKLQotCS8qCi0JKiogUmVhZCB0aGUgSUQgd29yZCBmcm9tIHRoZSBzbG90Ci0JKi8KLQlpZiAoKChpbmIoTWNhSWRIaWdoKTw8IDgpfGluYihNY2FJZExvdykpID09IE1jYVJJT0lkKQotCXsKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUG90ZW50aWFsIE1DQSBjYXJkIGluIHNsb3QgJWRcbiIsIFNsb3ROdW1iZXIpOwotCi0JCS8qCi0JCSoqIENhcmQgYXBwZWFycyB0byBiZSBhIFJJTyBNQ0EgY2FyZCEKLQkJKi8KLQkJUklPTWFjaGluZVR5cGUgfD0gKDE8PFJJT19NQ0EpOwotCi0JCS8qCi0JCSoqIEp1c3QgY2hlY2sgd2UgaGF2ZW4ndCBmb3VuZCB0b28gbWFueSB3b25kZXJmdWwgb2JqZWN0cwotCQkqLwotCQlpZiAoIFJJT051bUhvc3RzID49IFJJT19IT1NUUyApCi0JCXsKLQkJUnByaW50ZihSSU9NZXNnVG9vTWFueUNhcmRzKTsKLQkJcmV0dXJuKHJldCk7Ci0JCX0KLQotCQkvKgotCQkqKiBNY2FJcnFFbmFibGUgY29udGFpbnMgdGhlIGludGVycnVwdCB2ZWN0b3IsIGFuZCBhIGNhcmQKLQkJKiogZW5hYmxlIGJpdC4KLQkJKi8KLQkJSXZlYyA9IGluYihNY2FJcnFFbmFibGUpOwotCi0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIkl2ZWMgaXMgJXhcbiIsIEl2ZWMpOwotCi0JCXN3aXRjaCAoIEl2ZWMgJiBNY2FJcnFNYXNrICkKLQkJewotCQljYXNlIE1jYUlycTk6Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIklSUTlcbiIpOwotCQlicmVhazsKLQkJY2FzZSBNY2FJcnEzOgotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJJUlEzXG4iKTsKLQkJYnJlYWs7Ci0JCWNhc2UgTWNhSXJxNDoKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiSVJRNFxuIik7Ci0JCWJyZWFrOwotCQljYXNlIE1jYUlycTc6Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIklSUTdcbiIpOwotCQlicmVhazsKLQkJY2FzZSBNY2FJcnExMDoKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiSVJRMTBcbiIpOwotCQlicmVhazsKLQkJY2FzZSBNY2FJcnExMToKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiSVJRMTFcbiIpOwotCQlicmVhazsKLQkJY2FzZSBNY2FJcnExMjoKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiSVJRMTJcbiIpOwotCQlicmVhazsKLQkJY2FzZSBNY2FJcnExNToKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiSVJRMTVcbiIpOwotCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSoqIElmIHRoZSBjYXJkIGVuYWJsZSBiaXQgaXNuJ3Qgc2V0LCB0aGVuIHNldCBpdCEKLQkJKi8KLQkJaWYgKChJdmVjICYgTWNhQ2FyZEVuYWJsZSkgIT0gTWNhQ2FyZEVuYWJsZSkgewotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiTWNhQ2FyZEVuYWJsZSBub3Qgc2V0IC0gc2V0dGluZyFcbiIpOwotCQkJb3V0YihNY2FJcnFFbmFibGUsSXZlY3xNY2FDYXJkRW5hYmxlKTsKLQkJfSBlbHNlCi0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJNY2FDYXJkRW5hYmxlIGFscmVhZHkgc2V0XG4iKTsKLQotCQkvKgotCQkqKiBDb252ZXJ0IHRoZSBJUlEgZW5hYmxlIG1hc2sgaW50byBzb21ldGhpbmcgdXNlZnVsCi0JCSovCi0JCUl2ZWMgPSBSSU9NY2FUb0l2ZWNbSXZlYyAmIE1jYUlycU1hc2tdOwotCi0JCS8qCi0JCSoqIEZpbmQgdGhlIHBoeXNpY2FsIGFkZHJlc3MKLQkJKi8KLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiaW5iKE1jYU1lbW9yeSkgaXMgJXhcbiIsIGluYihNY2FNZW1vcnkpKTsKLQkJUGFkZHIgPSBNY2FBZGRyZXNzKGluYihNY2FNZW1vcnkpKTsKLQotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJNQ0EgY2FyZCBoYXMgSXZlYyAlZCBBZGRyICV4XG4iLCBJdmVjLCBQYWRkcik7Ci0KLQkJaWYgKCBQYWRkciAhPSAwICkKLQkJewotCi0JCS8qCi0JCSoqIFRlbGwgdGhlIG1lbW9yeSBtYXBwZXIgdGhhdCB3ZSB3YW50IHRvIHRhbGsgdG8gaXQKLQkJKi8KLQkJSGFuZGxlID0gUklPTWFwaW4oIFBhZGRyLCBSSU9fTUNBX01FTV9TSVpFLCAmQ2FkZHIgKTsKLQotCQlpZiAoIEhhbmRsZSA9PSAtMSApIHsKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIkNvdWxkbid0IG1hcCAlZCBieXRlcyBhdCAleFxuIiwgUklPX01DQV9NRU1fU0laRSwgUGFkZHI7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIkJvYXJkIG1hcHBlZCB0byB2YWRkciAweCV4XG4iLCBDYWRkcik7Ci0KLQkJLyoKLQkJKiogQW5kIGNoZWNrIHRoYXQgaXQgaXMgYWN0dWFsbHkgdGhlcmUhCi0JCSovCi0JCWlmICggUklPQm9hcmRUZXN0KCBQYWRkcixDYWRkcixSSU9fTUNBLFNsb3ROdW1iZXIgKSA9PSBSSU9fU1VDQ0VTUyApCi0JCXsKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIkJvYXJkIGhhcyBwYXNzZWQgdGVzdFxuIik7Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJTbG90ICVkLiBUeXBlICVkLiBQYWRkciAweCV4LiBDYWRkciAweCV4LiBNb2RlIDB4JXguXG4iLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3ROdW1iZXIsIFJJT19NQ0EsIFBhZGRyLCBDYWRkciwgTW9kZSk7Ci0KLQkJCS8qCi0JCQkqKiBCb2FyZCBoYXMgcGFzc2VkIGl0cyBzY3J1YiB0ZXN0LiBGaWxsIGluIGFsbCB0aGUKLQkJCSoqIHRyYW5zaWVudCBzdHVmZi4KLQkJCSovCi0JCQlwLT5SSU9Ib3N0c1tSSU9OdW1Ib3N0c10uU2xvdAkgPSBTbG90TnVtYmVyOwotCQkJcC0+UklPSG9zdHNbUklPTnVtSG9zdHNdLkl2ZWMJID0gSXZlYzsKLQkJCXAtPlJJT0hvc3RzW1JJT051bUhvc3RzXS5UeXBlCSA9IFJJT19NQ0E7Ci0JCQlwLT5SSU9Ib3N0c1tSSU9OdW1Ib3N0c10uQ29weQkgPSBiY29weTsKLQkJCXAtPlJJT0hvc3RzW1JJT051bUhvc3RzXS5QYWRkclAgICA9IFBhZGRyOwotCQkJcC0+UklPSG9zdHNbUklPTnVtSG9zdHNdLkNhZGRyCT0gQ2FkZHI7Ci0JCQlwLT5SSU9Ib3N0c1tSSU9OdW1Ib3N0c10uQ2FyZFAJPSAoc3RydWN0IERwUmFtICopQ2FkZHI7Ci0JCQlwLT5SSU9Ib3N0c1tSSU9OdW1Ib3N0c10uTW9kZQkgPSBNb2RlOwotCQkJV0JZVEUocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlJlc2V0SW50ICwgMHhmZik7Ci0JCQlwLT5SSU9Ib3N0c1tSSU9OdW1Ib3N0c10uVW5pcXVlTnVtID0KLQkJCSgoUkJZVEUocC0+UklPSG9zdHNbUklPTnVtSG9zdHNdLlVuaXF1ZVswXSkmMHhGRik8PDApfAotCQkJCQkJKChSQllURShwLT5SSU9Ib3N0c1tSSU9OdW1Ib3N0c10uVW5pcXVlWzFdKSYweEZGKTw8OCl8Ci0JCQkoKFJCWVRFKHAtPlJJT0hvc3RzW1JJT051bUhvc3RzXS5VbmlxdWVbMl0pJjB4RkYpPDwxNil8Ci0JCQkoKFJCWVRFKHAtPlJJT0hvc3RzW1JJT051bUhvc3RzXS5VbmlxdWVbM10pJjB4RkYpPDwyNCk7Ci0JCQlSSU9OdW1Ib3N0cysrOwotCQkJcmV0Kys7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKgotCQkJKiogSXQgZmFpbGVkIHRoZSB0ZXN0LCBzbyBpZ25vcmUgaXQuCi0JCQkqLwotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiVEVTVCBGQUlMRURcbiIpOwotCQkJUklPTWFwb3V0KFBhZGRyLCBSSU9fTUNBX01FTV9TSVpFLCBDYWRkciApOwotCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlNsb3QgJWQgLSBQYWRkciB6ZXJvIVxuIiwgU2xvdE51bWJlcik7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiU2xvdCAlZCBOT1QgUklPXG4iLCBTbG90TnVtYmVyKTsKLQl9Ci0JfQotCS8qCi0JKiogTm93IHdlIGhhdmUgY2hlY2tlZCBhbGwgdGhlIHNsb3RzLCB0dXJuIG9mZiB0aGUgTUNBIHNsb3Qgc2VsZWN0b3IKLQkqLwotCW91dGIoTWNhU2xvdFNlbGVjdCwwKTsKLQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJTbG90ICVkIE5PVCBSSU9cbiIsIFNsb3ROdW1iZXIpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBSSU9FSVNBaW5pdCggaW50IE1vZGUgKQotewotCXN0YXRpYyBpbnQgRUlTQURvbmUgPSAwOwotCXVpbnQgUGFkZHI7Ci0JaW50IFBvbGxJbnRNaXhNc2dEb25lID0gMDsKLQljYWRkcl90IENhZGRyOwotCXVzaG9ydCBJZGVudDsKLQl1Y2hhciBFaXNhU2xvdDsKLQl1Y2hhciBJdmVjOwotCWludCByZXQgPSAwOwotCi0JLyoKLQkqKiBUaGUgb25seSB2YWxpZCBtb2RlIGluZm9ybWF0aW9uIGZvciBFSVNBIGhvc3RzIGlzIGZhc3Qgb3Igc2xvdwotCSoqIGxpbmtzLgotCSovCi0JTW9kZSA9IChNb2RlICYgRkFTVF9MSU5LUykgPyBFSVNBX1RQX0ZBU1RfTElOS1MgOiBFSVNBX1RQX1NMT1dfTElOS1M7Ci0KLQlpZiAoIEVJU0FEb25lICkKLQl7Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJT0VJU0Fpbml0KCkgLSBhbHJlYWR5IGRvbmUsIHJldHVybi5cbiIpOwotCQlyZXR1cm4oMCk7Ci0JfQotCi0JRUlTQURvbmUrKzsKLQotCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJT0VJU0Fpbml0KClcbiIpOwotCi0KLQkvKgotCSoqIEZpcnN0IGNoZWNrIGFsbCBjYXJkcyB0byBzZWUgaWYgQU5ZIGFyZSBzZXQgZm9yIHBvbGxlZCBtb2RlIG9wZXJhdGlvbi4KLQkqKiBJZiBzbywgc2V0IEFMTCB0byBwb2xsZWQuCi0JKi8KLQotCWZvciAoIEVpc2FTbG90PTE7IEVpc2FTbG90PD1SSU9fTUFYX0VJU0FfU0xPVFM7IEVpc2FTbG90KysgKQotCXsKLQlJZGVudCA9IChJTkJaKEVpc2FTbG90LEVJU0FfUFJPRFVDVF9JREVOVF9ISSk8PDgpIHwKLQkJIElOQlooRWlzYVNsb3QsRUlTQV9QUk9EVUNUX0lERU5UX0xPKTsKLQotCWlmICggSWRlbnQgPT0gUklPX0VJU0FfSURFTlQgKQotCXsKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiRm91bmQgU3BlY2lhbGl4IHByb2R1Y3RcbiIpOwotCi0JCWlmICggSU5CWihFaXNhU2xvdCxFSVNBX1BST0RVQ1RfTlVNQkVSKSAhPSBSSU9fRUlTQV9QUk9EVUNUX0NPREUgKQotCQl7Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIk5vdCBTcGVjaWFsaXggUklPIC0gUHJvZHVjdCBudW1iZXIgJXhcbiIsCi0JCQkJCQlJTkJaKEVpc2FTbG90LCBFSVNBX1BST0RVQ1RfTlVNQkVSKSk7Ci0JCWNvbnRpbnVlOyAgLyogbmV4dCBzbG90ICovCi0JCX0KLQkJLyoKLQkJKiogSXRzIGEgU3BlY2lhbGl4IFJJTyEKLQkJKi8KLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPIFJldmlzaW9uICVkXG4iLAotCQkJCQlJTkJaKEVpc2FTbG90LCBFSVNBX1JFVklTSU9OX05VTUJFUikpOwotCQkKLQkJUklPTWFjaGluZVR5cGUgfD0gKDE8PFJJT19FSVNBKTsKLQotCQkvKgotCQkqKiBKdXN0IGNoZWNrIHdlIGhhdmVuJ3QgZm91bmQgdG9vIG1hbnkgd29uZGVyZnVsIG9iamVjdHMKLQkJKi8KLQkJaWYgKCBSSU9OdW1Ib3N0cyA+PSBSSU9fSE9TVFMgKQotCQl7Ci0JCVJwcmludGYoUklPTWVzZ1Rvb01hbnlDYXJkcyk7Ci0JCXJldHVybiAwOwotCQl9Ci0KLQkJLyoKLQkJKiogRW5zdXJlIHRoYXQgdGhlIGVuYWJsZSBiaXQgaXMgc2V0IQotCQkqLwotCQlPVVRCWiggRWlzYVNsb3QsIEVJU0FfRU5BQkxFLCBSSU9fRUlTQV9FTkFCTEVfQklUICk7Ci0KLQkJLyoKLQkJKiogRUlTQV9JTlRFUlJVUFRfVkVDIGNvbnRhaW5zIHRoZSBpbnRlcnJ1cHQgdmVjdG9yLgotCQkqLwotCQlJdmVjID0gSU5CWihFaXNhU2xvdCxFSVNBX0lOVEVSUlVQVF9WRUMpOwotCi0jaWZkZWYgUklPREVCVUcKLQkJc3dpdGNoICggSXZlYyAmIEVJU0FfSU5URVJSVVBUX01BU0sgKQotCQl7Ci0JCWNhc2UgRUlTQV9JUlFfMzoKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIkVJU0EgSVJRIDNcbiIpOwotCQlicmVhazsKLQkJY2FzZSBFSVNBX0lSUV80OgotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiRUlTQSBJUlEgNFxuIik7Ci0JCWJyZWFrOwotCQljYXNlIEVJU0FfSVJRXzU6Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJFSVNBIElSUSA1XG4iKTsKLQkJYnJlYWs7Ci0JCWNhc2UgRUlTQV9JUlFfNjoKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIkVJU0EgSVJRIDZcbiIpOwotCQlicmVhazsKLQkJY2FzZSBFSVNBX0lSUV83OgotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiRUlTQSBJUlEgN1xuIik7Ci0JCWJyZWFrOwotCQljYXNlIEVJU0FfSVJRXzk6Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJFSVNBIElSUSA5XG4iKTsKLQkJYnJlYWs7Ci0JCWNhc2UgRUlTQV9JUlFfMTA6Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJFSVNBIElSUSAxMFxuIik7Ci0JCWJyZWFrOwotCQljYXNlIEVJU0FfSVJRXzExOgotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiRUlTQSBJUlEgMTFcbiIpOwotCQlicmVhazsKLQkJY2FzZSBFSVNBX0lSUV8xMjoKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIkVJU0EgSVJRIDEyXG4iKTsKLQkJYnJlYWs7Ci0JCWNhc2UgRUlTQV9JUlFfMTQ6Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJFSVNBIElSUSAxNFxuIik7Ci0JCWJyZWFrOwotCQljYXNlIEVJU0FfSVJRXzE1OgotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiRUlTQSBJUlEgMTVcbiIpOwotCQlicmVhazsKLQkJY2FzZSBFSVNBX1BPTExFRDoKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIkVJU0EgUE9MTEVEXG4iKTsKLQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsIE5VTEwsREJHX0lOSVR8REJHX0ZBSUwsIlNoYWdnZWQgaW50ZXJydXB0IG51bWJlciFcbiIpOwotCQlJdmVjICY9IEVJU0FfQ09OVFJPTF9NQVNLOwotCQl9Ci0jZW5kaWYKLQotCQlpZiAoIChJdmVjICYgRUlTQV9JTlRFUlJVUFRfTUFTSykgPT0KLQkJIEVJU0FfUE9MTEVEICkKLQkJewotCQlSSU9XaWxsUG9sbCA9IDE7Ci0JCWJyZWFrOwkJLyogRnJvbSBFaXNhU2xvdCBsb29wICovCi0JCX0KLQl9Ci0JfQotCi0JLyoKLQkqKiBEbyBpdCBhbGwgYWdhaW4gbm93IHdlIGtub3cgd2hldGhlciB0byBjaGFuZ2UgYWxsIGNhcmRzIHRvIHBvbGxlZAotCSoqIG1vZGUgb3Igbm90Ci0JKi8KLQotCWZvciAoIEVpc2FTbG90PTE7IEVpc2FTbG90PD1SSU9fTUFYX0VJU0FfU0xPVFM7IEVpc2FTbG90KysgKQotCXsKLQlJZGVudCA9IChJTkJaKEVpc2FTbG90LEVJU0FfUFJPRFVDVF9JREVOVF9ISSk8PDgpIHwKLQkJIElOQlooRWlzYVNsb3QsRUlTQV9QUk9EVUNUX0lERU5UX0xPKTsKLQotCWlmICggSWRlbnQgPT0gUklPX0VJU0FfSURFTlQgKQotCXsKLQkJaWYgKCBJTkJaKEVpc2FTbG90LEVJU0FfUFJPRFVDVF9OVU1CRVIpICE9IFJJT19FSVNBX1BST0RVQ1RfQ09ERSApCi0JCWNvbnRpbnVlOyAgLyogbmV4dCBzbG90ICovCi0KLQkJLyoKLQkJKiogSXRzIGEgU3BlY2lhbGl4IFJJTyEKLQkJKi8KLQkJCi0JCS8qCi0JCSoqIEVuc3VyZSB0aGF0IHRoZSBlbmFibGUgYml0IGlzIHNldCEKLQkJKi8KLQkJT1VUQlooIEVpc2FTbG90LCBFSVNBX0VOQUJMRSwgUklPX0VJU0FfRU5BQkxFX0JJVCApOwotCi0JCS8qCi0JCSoqIEVJU0FfSU5URVJSVVBUX1ZFQyBjb250YWlucyB0aGUgaW50ZXJydXB0IHZlY3Rvci4KLQkJKi8KLQkJSXZlYyA9IElOQlooRWlzYVNsb3QsRUlTQV9JTlRFUlJVUFRfVkVDKTsKLQotCQlpZiAoIFJJT1dpbGxQb2xsICkKLQkJewotCQkJLyoKLQkJCSoqIElmIHdlIGFyZSBnb2luZyB0byBvcGVyYXRlIGluIHBvbGxlZCBtb2RlLCBidXQgdGhpcwotCQkJKiogYm9hcmQgaXMgY29uZmlndXJlZCB0byBiZSBpbnRlcnJ1cHQgZHJpdmVuLCBkaXNwbGF5Ci0JCQkqKiB0aGUgbWVzc2FnZSBleHBsYWluaW5nIHRoZSBzaXR1YXRpb24gdG8gdGhlIHB1bnRlciwKLQkJCSoqIGFzc3VtaW5nIHdlIGhhdmVuJ3QgYWxyZWFkeSBkb25lIHNvLgotCQkJKi8KLQotCQkJaWYgKCAhUG9sbEludE1peE1zZ0RvbmUgJiYKLQkJCSAoSXZlYyAmIEVJU0FfSU5URVJSVVBUX01BU0spICE9IEVJU0FfUE9MTEVEICkKLQkJCXsKLQkJCVJwcmludGYoUklPTWVzZ0FsbFBvbGxlZCk7Ci0JCQlQb2xsSW50TWl4TXNnRG9uZSA9IDE7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkqKiBVbmdyYWNpb3VzbHkgaWdub3JlIHdoYXRldmVyIHRoZSBib2FyZCByZXBvcnRzIGFzIGl0cwotCQkJKiogaW50ZXJydXB0IHZlY3Rvci4uLgotCQkJKi8KLQotCQkJSXZlYyAmPSB+RUlTQV9JTlRFUlJVUFRfTUFTSzsKLQotCQkJLyoKLQkJCSoqIC4uLmFuZCBmb3JjZSBpdCB0byBkYW5jZSB0byB0aGUgcG9sbCB0dW5lLgotCQkJKi8KLQotCQkJSXZlYyB8PSBFSVNBX1BPTExFRDsKLQkJfQotCi0JCS8qCi0JCSoqIENvbnZlcnQgdGhlIElSUSBlbmFibGUgbWFzayBpbnRvIHNvbWV0aGluZyB1c2VmdWwgKDAtMTUpCi0JCSovCi0JCUl2ZWMgPSBSSU9FaXNhVG9JdmVjKEl2ZWMpOwotCi0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIkVJU0EgaG9zdCBpbiBzbG90ICVkIGhhcyBJdmVjIDB4JXhcbiIsCi0JCSBFaXNhU2xvdCwgSXZlYyk7Ci0KLQkJLyoKLQkJKiogRmluZCB0aGUgcGh5c2ljYWwgYWRkcmVzcwotCQkqLwotCQlQYWRkciA9IChJTkJaKEVpc2FTbG90LEVJU0FfTUVNT1JZX0JBU0VfSEkpPDwyNCkgfAotCQkJCShJTkJaKEVpc2FTbG90LEVJU0FfTUVNT1JZX0JBU0VfTE8pPDwxNik7Ci0KLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiRUlTQSBjYXJkIGhhcyBJdmVjICVkIEFkZHIgJXhcbiIsIEl2ZWMsIFBhZGRyKTsKLQotCQlpZiAoIFBhZGRyID09IDAgKQotCQl7Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwKLQkJICJCb2FyZCBpbiBzbG90ICVkIGNvbmZpZ3VyZWQgZm9yIGFkZHJlc3MgemVybyFcbiIsIEVpc2FTbG90KTsKLQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkqKiBUZWxsIHRoZSBtZW1vcnkgbWFwcGVyIHRoYXQgd2Ugd2FudCB0byB0YWxrIHRvIGl0Ci0JCSovCi0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIkFib3V0IHRvIG1hcCBFSVNBIGNhcmQgXG4iKTsKLQotCQlpZiAoUklPTWFwaW4oIFBhZGRyLCBSSU9fRUlTQV9NRU1fU0laRSwgJkNhZGRyKSA9PSAtMSkgewotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJDb3VsZG4ndCBtYXAgJWQgYnl0ZXMgYXQgJXhcbiIsCi0JCQkJCQkJUklPX0VJU0FfTUVNX1NJWkUsUGFkZHIpOwotCQljb250aW51ZTsKLQkJfQotCi0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIkJvYXJkIG1hcHBlZCB0byB2YWRkciAweCV4XG4iLCBDYWRkcik7Ci0KLQkJLyoKLQkJKiogQW5kIGNoZWNrIHRoYXQgaXQgaXMgYWN0dWFsbHkgdGhlcmUhCi0JCSovCi0JCWlmICggUklPQm9hcmRUZXN0KCBQYWRkcixDYWRkcixSSU9fRUlTQSxFaXNhU2xvdCkgPT0gUklPX1NVQ0NFU1MgKQotCQkJewotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJCb2FyZCBoYXMgcGFzc2VkIHRlc3RcbiIpOwotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsIAotCQkiU2xvdCAlZC4gSXZlYyAlZC4gVHlwZSAlZC4gUGFkZHIgMHgleC4gQ2FkZHIgMHgleC4gTW9kZSAweCV4LlxuIiwKLQkJCUVpc2FTbG90LEl2ZWMsUklPX0VJU0EsUGFkZHIsQ2FkZHIsTW9kZSk7Ci0KLQkJLyoKLQkJKiogQm9hcmQgaGFzIHBhc3NlZCBpdHMgc2NydWIgdGVzdC4gRmlsbCBpbiBhbGwgdGhlCi0JCSoqIHRyYW5zaWVudCBzdHVmZi4KLQkJKi8KLQkJcC0+UklPSG9zdHNbUklPTnVtSG9zdHNdLlNsb3QJID0gRWlzYVNsb3Q7Ci0JCXAtPlJJT0hvc3RzW1JJT051bUhvc3RzXS5JdmVjCSA9IEl2ZWM7Ci0JCXAtPlJJT0hvc3RzW1JJT051bUhvc3RzXS5UeXBlCSA9IFJJT19FSVNBOwotCQlwLT5SSU9Ib3N0c1tSSU9OdW1Ib3N0c10uQ29weQkgPSBiY29weTsKLQkJCQlwLT5SSU9Ib3N0c1tSSU9OdW1Ib3N0c10uUGFkZHJQICAgPSBQYWRkcjsKLQkJCQlwLT5SSU9Ib3N0c1tSSU9OdW1Ib3N0c10uQ2FkZHIJPSBDYWRkcjsKLQkJcC0+UklPSG9zdHNbUklPTnVtSG9zdHNdLkNhcmRQCT0gKHN0cnVjdCBEcFJhbSAqKUNhZGRyOwotCQkJCXAtPlJJT0hvc3RzW1JJT051bUhvc3RzXS5Nb2RlCSA9IE1vZGU7Ci0JCS8qCi0JCSoqIGJlY2F1c2UgdGhlIEVJU0EgcHJvbSBpcyBtYXBwZWQgaW50byBJTyBzcGFjZSwgd2UKLQkJKiogbmVlZCB0byBjb3B5IHRoZSB1bnFpdWUgbnVtYmVyIGludG8gdGhlIG1lbW9yeSBhcmVhCi0JCSoqIHRoYXQgaXQgd291bGQgaGF2ZSBvY2N1cGllZCwgc28gdGhhdCB0aGUgZG93bmxvYWQKLQkJKiogY29kZSBjYW4gZGV0ZXJtaW5lIGl0cyBJRCBhbmQgY2FyZCB0eXBlLgotCQkqLwotCSBXQllURShwLT5SSU9Ib3N0c1tSSU9OdW1Ib3N0c10uVW5pcXVlWzBdLElOQlooRWlzYVNsb3QsRUlTQV9VTklRVUVfTlVNXzApKTsKLQkgV0JZVEUocC0+UklPSG9zdHNbUklPTnVtSG9zdHNdLlVuaXF1ZVsxXSxJTkJaKEVpc2FTbG90LEVJU0FfVU5JUVVFX05VTV8xKSk7Ci0JIFdCWVRFKHAtPlJJT0hvc3RzW1JJT051bUhvc3RzXS5VbmlxdWVbMl0sSU5CWihFaXNhU2xvdCxFSVNBX1VOSVFVRV9OVU1fMikpOwotCSBXQllURShwLT5SSU9Ib3N0c1tSSU9OdW1Ib3N0c10uVW5pcXVlWzNdLElOQlooRWlzYVNsb3QsRUlTQV9VTklRVUVfTlVNXzMpKTsKLQkJcC0+UklPSG9zdHNbUklPTnVtSG9zdHNdLlVuaXF1ZU51bSA9Ci0JCQkoKFJCWVRFKHAtPlJJT0hvc3RzW1JJT051bUhvc3RzXS5VbmlxdWVbMF0pJjB4RkYpPDwwKXwKLQkJCQkJCSgoUkJZVEUocC0+UklPSG9zdHNbUklPTnVtSG9zdHNdLlVuaXF1ZVsxXSkmMHhGRik8PDgpfAotCQkJKChSQllURShwLT5SSU9Ib3N0c1tSSU9OdW1Ib3N0c10uVW5pcXVlWzJdKSYweEZGKTw8MTYpfAotCQkJKChSQllURShwLT5SSU9Ib3N0c1tSSU9OdW1Ib3N0c10uVW5pcXVlWzNdKSYweEZGKTw8MjQpOwotCQlJTkJaKEVpc2FTbG90LEVJU0FfSU5URVJSVVBUX1JFU0VUKTsKLQkJCQlSSU9OdW1Ib3N0cysrOwotCQlyZXQrKzsKLQkJCX0KLQkJZWxzZQotCQl7Ci0JCS8qCi0JCSoqIEl0IGZhaWxlZCB0aGUgdGVzdCwgc28gaWdub3JlIGl0LgotCQkqLwotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJURVNUIEZBSUxFRFxuIik7Ci0KLQkJUklPTWFwb3V0KFBhZGRyLCBSSU9fRUlTQV9NRU1fU0laRSwgQ2FkZHIgKTsKLQkJfQotCX0KLQl9Ci0JaWYgKFJJT01hY2hpbmVUeXBlICYgUklPX0VJU0EpCi0JcmV0dXJuIHJldCsxOwotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYKLQotCi0jaWZuZGVmIGxpbnV4Ci0KLSNkZWZpbmUgQ09ORklHX0FERFJFU1MJMHhjZjgKLSNkZWZpbmUgQ09ORklHX0RBVEEJCTB4Y2ZjCi0jZGVmaW5lIEZPUldBUkRfUkVHCQkweGNmYQotCi0KLXN0YXRpYyBpbnQKLXJlYWRfY29uZmlnKGludCBidXNfbnVtYmVyLCBpbnQgZGV2aWNlX251bSwgaW50IHJfbnVtYmVyKSAKLXsKLQl1bnNpZ25lZCBpbnQgY2F2OwotCXVuc2lnbmVkIGludCB2YWw7Ci0KLS8qCi0gICBCdWlsZCBjb25maWdfYWRkcmVzc192YWx1ZToKLQotICAgICAgMzEgICAgICAgIDI0IDIzICAgICAgICAxNiAxNSAgICAgIDExIDEwICA4IDcgICAgICAgIDAgCi0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgIHwxfCAwMDAwMDAwIHwgYnVzX251bWJlciB8IGRldmljZSAjIHwgMDAwIHwgcmVnaXN0ZXIgfAotICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0JY2F2ID0gcl9udW1iZXIgJiAweGZmOwotCWNhdiB8PSAoKGRldmljZV9udW0gJiAweDFmKSA8PCAxMSk7Ci0JY2F2IHw9ICgoYnVzX251bWJlciAmIDB4ZmYpIDw8IDE2KTsKLQljYXYgfD0gMHg4MDAwMDAwMDsgLyogRW5hYmxlIGJpdCAqLwotCW91dHBkKENPTkZJR19BRERSRVNTLGNhdik7Ci0JdmFsID0gaW5wZChDT05GSUdfREFUQSk7Ci0Jb3V0cGQoQ09ORklHX0FERFJFU1MsMCk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljCi13cml0ZV9jb25maWcoYnVzX251bWJlcixkZXZpY2VfbnVtLHJfbnVtYmVyLHZhbCkgCi17Ci0JdW5zaWduZWQgaW50IGNhdjsKLQotLyoKLSAgIEJ1aWxkIGNvbmZpZ19hZGRyZXNzX3ZhbHVlOgotCi0gICAgICAzMSAgICAgICAgMjQgMjMgICAgICAgIDE2IDE1ICAgICAgMTEgMTAgIDggNyAgICAgICAgMCAKLSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgfDF8IDAwMDAwMDAgfCBidXNfbnVtYmVyIHwgZGV2aWNlICMgfCAwMDAgfCByZWdpc3RlciB8Ci0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLQljYXYgPSByX251bWJlciAmIDB4ZmY7Ci0JY2F2IHw9ICgoZGV2aWNlX251bSAmIDB4MWYpIDw8IDExKTsKLQljYXYgfD0gKChidXNfbnVtYmVyICYgMHhmZikgPDwgMTYpOwotCWNhdiB8PSAweDgwMDAwMDAwOyAvKiBFbmFibGUgYml0ICovCi0Jb3V0cGQoQ09ORklHX0FERFJFU1MsIGNhdik7Ci0Jb3V0cGQoQ09ORklHX0RBVEEsIHZhbCk7Ci0Jb3V0cGQoQ09ORklHX0FERFJFU1MsIDApOwotCXJldHVybiB2YWw7Ci19Ci0jZWxzZQotLyogWFhYIEltcGxlbWVudCB0aGVzZS4uLiAqLwotc3RhdGljIGludAotcmVhZF9jb25maWcoaW50IGJ1c19udW1iZXIsIGludCBkZXZpY2VfbnVtLCBpbnQgcl9udW1iZXIpIAotewotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotd3JpdGVfY29uZmlnKGludCBidXNfbnVtYmVyLCBpbnQgZGV2aWNlX251bSwgaW50IHJfbnVtYmVyKSAKLXsKLSAgcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZgotCi1pbnQKLVJJT1BDSWluaXQocCwgTW9kZSkKLXN0cnVjdCByaW9faW5mbwkqcDsKLWludCAJCU1vZGU7Ci17Ci0JI2RlZmluZSBNQVhfUENJX1NMT1QJCTMyCi0JI2RlZmluZSBSSU9fUENJX0pFVF9DQVJECTB4MjAwMDExQ0IKLQotCXN0YXRpYyBpbnQJc2xvdDsJLyogY291bnQgb2YgbWFjaGluZSdzIFBDSSBzbG90cyBzZWFyY2hlZCBzbyBmYXIgKi8KLQljYWRkcl90CQlDYWRkcjsJLyogVmlydHVhbCBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IFBDSSBob3N0IGNhcmQuICovCi0JdW5zaWduZWQgY2hhcglJdmVjOwkvKiBpbnRlcnJ1cHQgdmVjdG9yIGZvciB0aGUgY3VycmVudCBQQ0kgaG9zdCAqLwotCXVuc2lnbmVkIGxvbmcJUGFkZHI7CS8qIFBoeXNpY2FsIGFkZHJlc3MgZm9yIHRoZSBjdXJyZW50IFBDSSBob3N0ICovCi0JaW50CQlIYW5kbGU7CS8qIEhhbmRsZSB0byBWaXJ0dWFsIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGN1cnJlbnQgUENJIGhvc3QgKi8KLQotCi0JcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAgIlNlYXJjaCBmb3IgYSBSSU8gUENJIGNhcmQgLSBzdGFydCBhdCBzbG90ICVkXG4iLCBzbG90KTsKLQotCS8qCi0JKiogSW5pdGlhbGlzZSB0aGUgc2VhcmNoIHN0YXR1cwotCSovCi0JcC0+UklPTGFzdFBDSVNlYXJjaAk9IFJJT19GQUlMOwotCi0Jd2hpbGUgKCAoc2xvdCA8IE1BWF9QQ0lfU0xPVCkgJiAocC0+UklPTGFzdFBDSVNlYXJjaCAhPSBSSU9fU1VDQ0VTUykgKQotCXsKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAgIkN1cnJlbnRseSB0ZXN0aW5nIHNsb3QgJWRcbiIsIHNsb3QpOwotCi0JCWlmIChyZWFkX2NvbmZpZygwLHNsb3QsMCkgPT0gUklPX1BDSV9KRVRfQ0FSRCkgewotCQkJcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLkl2ZWMgPSAwOwotCQkJUGFkZHIgPSByZWFkX2NvbmZpZygwLHNsb3QsMHgxOCk7Ci0JCQlQYWRkciA9IFBhZGRyIC0gKFBhZGRyICYgMHgxKTsgLyogTWFzayBvZmYgdGhlIGlvIGJpdCAqLwotCi0JCQlpZiAoIChQYWRkciA9PSAwKSB8fCAoKFBhZGRyICYgMHhmZmZmMDAwMCkgPT0gMHhmZmZmMDAwMCkgKSB7Ci0JCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAgIkdvb2ZlZCB1cCBzbG90XG4iKTsJLyogd2hhdCEgKi8KLQkJCQlzbG90Kys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCXAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5QYWRkclAgPSBQYWRkcjsKLQkJCUl2ZWMgPSAocmVhZF9jb25maWcoMCxzbG90LDB4M2MpICYgMHhmZik7Ci0KLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgICJQQ0kgSG9zdCBhdCAweCV4LCBJbnRyICVkXG4iLCAoaW50KVBhZGRyLCBJdmVjKTsKLQotCQkJSGFuZGxlID0gUklPTWFwaW4oIFBhZGRyLCBSSU9fUENJX01FTV9TSVpFLCAmQ2FkZHIgKTsKLQkJCWlmIChIYW5kbGUgPT0gLTEpIHsKLQkJCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICAiQ291bGRuJ3QgbWFwICVkIGJ5dGVzIGF0IDB4JXhcbiIsIFJJT19QQ0lfTUVNX1NJWkUsIChpbnQpUGFkZHIpOwotCQkJCXNsb3QrKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5JdmVjID0gSXZlYyArIDMyOwotCQkJcC0+aW50cl90aWQgPSBpb2ludHNldChwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uSXZlYywKLQkJCQkJCShpbnQgKCopKCkpcmlvX2ludHIsIChjaGFyICopcC0+UklPTnVtSG9zdHMpOwotCQkJaWYgKFJJT0JvYXJkVGVzdCggUGFkZHIsIENhZGRyLCBSSU9fUENJLCAwICkgPT0gUklPX1NVQ0NFU1MpIHsKLQkJCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICgiQm9hcmQgaGFzIHBhc3NlZCB0ZXN0XG4iKTsKLQkJCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICgiUGFkZHIgMHgleC4gQ2FkZHIgMHgleC4gTW9kZSAweCV4LlxuIiwgUGFkZHIsIENhZGRyLCBNb2RlKTsKLQotCQkJCS8qCi0JCQkJKiogQm9hcmQgaGFzIHBhc3NlZCBpdHMgc2NydWIgdGVzdC4gRmlsbCBpbiBhbGwgdGhlCi0JCQkJKiogdHJhbnNpZW50IHN0dWZmLgotCQkJCSovCi0JCQkJcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlNsb3QJICAgPSAwOwotCQkJCXAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5JdmVjCSAgID0gSXZlYyArIDMyOwotCQkJCXAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5UeXBlCSAgID0gUklPX1BDSTsKLQkJCQlwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uQ29weQkgICA9IHJpb19wY2ljb3B5OyAKLQkJCQlwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uUGFkZHJQCSAgID0gUGFkZHI7Ci0JCQkJcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLkNhZGRyCSAgID0gQ2FkZHI7Ci0JCQkJcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLkNhcmRQCSAgID0gKHN0cnVjdCBEcFJhbSAqKUNhZGRyOwotCQkJCXAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5Nb2RlCSAgID0gTW9kZTsKLQotI2lmIDAKLQkJCQlXQllURShwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uQ29udHJvbCwgCi0JCQkJCQlCT09UX0ZST01fUkFNIHwgRVhURVJOQUxfQlVTX09GRiB8IAotCQkJCQkJcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLk1vZGUgfCAKLQkJCQkJCUlOVEVSUlVQVF9ESVNBQkxFICk7Ci0JCQkJV0JZVEUocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlJlc2V0SW50LDB4ZmYpOwotCQkJCVdCWVRFKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5Db250cm9sLAotCQkJCQkJQk9PVF9GUk9NX1JBTSB8IEVYVEVSTkFMX0JVU19PRkYgfCAKLQkJCQkJCXAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5Nb2RlIHwKLQkJCQkJCUlOVEVSUlVQVF9ESVNBQkxFICk7Ci0JCQkJV0JZVEUocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlJlc2V0SW50LDB4ZmYpOwotI2Vsc2UKLQkJCQlXQllURShwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uUmVzZXRJbnQsIDB4ZmYpOwotI2VuZGlmCi0JCQkJcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZU51bSAgPQotCQkJCQkoKFJCWVRFKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5VbmlxdWVbMF0pJjB4RkYpPDwwKXwKLQkJCQkJKChSQllURShwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzFdKSYweEZGKTw8OCl8Ci0JCQkJCSgoUkJZVEUocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZVsyXSkmMHhGRik8PDE2KXwKLQkJCQkJKChSQllURShwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzNdKSYweEZGKTw8MjQpOwotCi0JCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiVW5pcXVlIG5vIDB4JXguXG4iLCAKLQkJCQkgICAgcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZU51bSk7Ci0KLQkJCQlwLT5SSU9MYXN0UENJU2VhcmNoID0gUklPX1NVQ0NFU1M7Ci0JCQkJcC0+UklPTnVtSG9zdHMrKzsKLQkJCX0KLQkJfQotCQlzbG90Kys7Ci0JfQotCi0JaWYgKCBzbG90ID49IE1BWF9QQ0lfU0xPVCApIHsKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAgIkFsbCAlZCBQQ0kgc2xvdHMgaGF2ZSB0ZXN0ZWQgZm9yIFJJTyBjYXJkcyAhISFcbiIsCi0JCQkgICAgIE1BWF9QQ0lfU0xPVCk7Ci0JfQotCi0KLQkvKgotCSoqIEkgZG9uJ3QgdGhpbmsgd2Ugd2FudCB0byBkbyB0aGlzIGFueW1vcmUKLQkqKgotCi0JaWYgKCFwLT5SSU9MYXN0UENJU2VhcmNoID09IFJJT19GQUlMICkgewotCQlwLT5SSU9GYWlsZWQrKzsKLQl9Ci0KLQkqKgotCSovCi19Ci0KLSNpZmRlZiBGVVRVUkVfUkVMRUFTRQotdm9pZCByaW9oYWx0KCB2b2lkICkKLXsKLQlpbnQgaG9zdDsKLQlmb3IgKCBob3N0PTA7IGhvc3Q8cC0+UklPTnVtSG9zdHM7IGhvc3QrKyApCi0JewotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJTdG9wIGhvc3QgJWRcbiIsIGhvc3QpOwotCQkodm9pZClSSU9Cb2FyZFRlc3QoIHAtPlJJT0hvc3RzW2hvc3RdLlBhZGRyUCwgcC0+UklPSG9zdHNbaG9zdF0uQ2FkZHIsIHAtPlJJT0hvc3RzW2hvc3RdLlR5cGUscC0+UklPSG9zdHNbaG9zdF0uU2xvdCApOwotCX0KLX0KLSNlbmRpZgotI2VuZGlmCiAKIHN0YXRpYwl1Y2hhcgl2YWxbXSA9IHsKICNpZmRlZiBWRVJZX0xPTkdfVEVTVApAQCAtMTI2MiwyMDAgKzM4Nyw2IEBACiAJcmV0dXJuIFJJT19TVUNDRVNTOwogfQogCi0vKgotKiogdHJ5IHRvIGVuc3VyZSB0aGF0IGV2ZXJ5IGhvc3QgaXMgZWl0aGVyIGluIHBvbGxlZCBtb2RlCi0qKiBvciBpcyBpbiBpbnRlcnJ1cHQgbW9kZS4gT25seSBhbGxvdyBpbnRlcnJ1cHQgbW9kZSBpZgotKiogYWxsIGhvc3RzIGNhbiBpbnRlcnJ1cHQgKHdoeT8pCi0qKiBhbmQgZm9yY2UgaW50byBwb2xsZWQgbW9kZSBpZiB0b2xkIHRvLiBQYXRjaCB1cCB0aGUKLSoqIGludGVycnVwdCB2ZWN0b3IgJiBzYWx1dGUgVGhlIFF1ZWVuIHdoZW4geW91J3ZlIGRvbmUuCi0qLwotI2lmIDAKLXN0YXRpYyB2b2lkCi1SSU9BbGxvY2F0ZUludGVycnVwdHMocCkKLXN0cnVjdCByaW9faW5mbyAqCXA7Ci17Ci0JaW50IEhvc3Q7Ci0KLQkvKgotCSoqIEVhc3kgY2FzZSAtIGlmIHdlIGhhdmUgYmVlbiB0b2xkIHRvIHBvbGwsIHRoZW4gd2UgcG9sbC4KLQkqLwotCWlmIChwLT5tb2RlICYgUE9MTEVEX01PREUpIHsKLQkJUklPU3RvcEludGVycnVwdHMocCwgMCwgMCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSoqIGNoZWNrIC0gaWYgYW55IGhvc3QgaGFzIGJlZW4gc2V0IHRvIHBvbGxlZCBtb2RlLCB0aGVuIGFsbCBtdXN0IGJlLgotCSovCi0JZm9yIChIb3N0PTA7IEhvc3Q8cC0+UklPTnVtSG9zdHM7IEhvc3QrKykgewotCQlpZiAoIChwLT5SSU9Ib3N0c1tIb3N0XS5UeXBlICE9IFJJT19BVCkgJiYKLQkJCQkocC0+UklPSG9zdHNbSG9zdF0uSXZlYyA9PSBQT0xMRUQpICkgewotCQkJUklPU3RvcEludGVycnVwdHMocCwgMSwgSG9zdCApOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWZvciAoSG9zdD0wOyBIb3N0PHAtPlJJT051bUhvc3RzOyBIb3N0KyspIHsKLQkJaWYgKHAtPlJJT0hvc3RzW0hvc3RdLlR5cGUgPT0gUklPX0FUKSB7Ci0JCQlpZiAoIChwLT5SSU9Ib3N0c1tIb3N0XS5JdmVjIC0gMzIpID09IDApIHsKLQkJCQlSSU9TdG9wSW50ZXJydXB0cyhwLCAyLCBIb3N0ICk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotfQotCi0vKgotKiogc29tZXRoaW5nIGhhcyBkZWNpZGVkIHRoYXQgd2UgY2FuJ3QgYmUgZG9pbmcgd2l0aCB0aGVzZQotKiogbmV3LWZhbmdsZWQgaW50ZXJydXB0IHRoaW5naWVzLiBTZXQgZXZlcnl0aGluZyB1cCB0byBqdXN0Ci0qKiBwb2xsLgotKi8KLXN0YXRpYyB2b2lkCi1SSU9TdG9wSW50ZXJydXB0cyhwLCBSZWFzb24sIEhvc3QpCi1zdHJ1Y3QgcmlvX2luZm8gKglwOwotaW50CVJlYXNvbjsKLWludAlIb3N0OyAKLXsKLSNpZmRlZiBGVVRVUkVfUkVMRUFTRQotCXN3aXRjaCAoUmVhc29uKSB7Ci0JCWNhc2UgMDoJLyogZm9yY2VkIGludG8gcG9sbGluZyBieSByaW9fcG9sbGVkICovCi0JCQlicmVhazsKLQkJY2FzZSAxOgkvKiBTQ1UgaGFzIHNldCAnSG9zdCcgaW50byBwb2xsZWQgbW9kZSAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoJLyogdGhlcmUgYXJlbid0IGVub3VnaCBpbnRlcnJ1cHQgdmVjdG9ycyBmb3IgJ0hvc3QnICovCi0JCQlicmVhazsKLQl9Ci0jZW5kaWYKLQotCWZvciAoSG9zdD0wOyBIb3N0PHAtPlJJT051bUhvc3RzOyBIb3N0KysgKSB7Ci0JCXN0cnVjdCBIb3N0ICpIb3N0UCA9ICZwLT5SSU9Ib3N0c1tIb3N0XTsKLQotCQlzd2l0Y2ggKEhvc3RQLT5UeXBlKSB7Ci0JCQljYXNlIFJJT19BVDoKLQkJCQkvKgotCQkJCSoqIFRoZSBBVCBob3N0IGhhcyBpdCdzIGludGVycnVwdHMgZGlzYWJsZWQgYnkgY2xlYXJpbmcgdGhlCi0JCQkJKiogaW50X2VuYWJsZSBiaXQuCi0JCQkJKi8KLQkJCQlIb3N0UC0+TW9kZSAmPSB+SU5URVJSVVBUX0VOQUJMRTsKLQkJCQlIb3N0UC0+SXZlYyA9IFBPTExFRDsKLQkJCQlicmVhazsKLSNpZmRlZiBGVVRVUkVfUkVMRUFTRQotCQkJY2FzZSBSSU9fRUlTQToKLQkJCQkvKgotCQkJCSoqIFRoZSBFSVNBIGhvc3QgaGFzIGl0J3MgaW50ZXJydXB0cyBkaXNhYmxlZCBieSBzZXR0aW5nIHRoZQotCQkJCSoqIEl2ZWMgdG8gemVybwotCQkJCSovCi0JCQkJSG9zdFAtPkl2ZWMgPSBQT0xMRUQ7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCWNhc2UgUklPX1BDSToKLQkJCQkvKgotCQkJCSoqIFRoZSBQQ0kgaG9zdCBoYXMgaXQncyBpbnRlcnJ1cHRzIGRpc2FibGVkIGJ5IGNsZWFyaW5nIHRoZQotCQkJCSoqIGludF9lbmFibGUgYml0LCBsaWtlIGEgcmVndWxhciBob3N0IGNhcmQuCi0JCQkJKi8KLQkJCQlIb3N0UC0+TW9kZSAmPSB+UklPX1BDSV9JTlRfRU5BQkxFOwotCQkJCUhvc3RQLT5JdmVjID0gUE9MTEVEOwotCQkJCWJyZWFrOwotI2lmZGVmIEZVVFVSRV9SRUxFQVNFCi0JCQljYXNlIFJJT19NQ0E6Ci0JCQkJLyoKLQkJCQkqKiBUaGVyZSdzIGFsd2F5cyBvbmUsIGlzbid0IHRoZXJlPwotCQkJCSoqIFRoZSBNQ0EgaG9zdCBjYXJkIGNhbm5vdCBoYXZlIGl0J3MgaW50ZXJydXB0cyBkaXNhYmxlZC4KLQkJCQkqLwotCQkJCVJJT1BhdGNoVmVjKEhvc3RQKTsKLQkJCQlicmVhazsKLSNlbmRpZgotCQl9Ci0JfQotfQotCi0vKgotKiogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgaW5pdCB0aW1lIHRvIHNldHVwIHRoZSBkYXRhIHN0cnVjdHVyZXMuCi0qLwotdm9pZAotUklPQWxsb2NEYXRhU3RydWN0cyhwKQotc3RydWN0IHJpb19pbmZvICoJcDsKLXsKLQlpbnQJcG9ydCwKLQkJaG9zdCwKLQkJdG07Ci0KLQlwLT5SSU9Qb3J0cCA9IChzdHJ1Y3QgUG9ydCAqKXN5c2JyayhSSU9fUE9SVFMgKiBzaXplb2Yoc3RydWN0IFBvcnQpKTsKLQlpZiAoIXAtPlJJT1BvcnRwKSB7Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBObyBtZW1vcnkgZm9yIHBvcnQgc3RydWN0dXJlc1xuIik7Ci0JCXAtPlJJT0ZhaWxlZCsrOwotCQlyZXR1cm47Ci0JfSAKLQliemVybyggcC0+UklPUG9ydHAsIHNpemVvZihzdHJ1Y3QgUG9ydCkgKiBSSU9fUE9SVFMgKTsKLQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICAiUklPLWluaXQ6IGFsbG9jYXRlZCBhbmQgY2xlYXJlZCBtZW1vcnkgZm9yIHBvcnQgc3RydWN0c1xuIik7Ci0JcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAgIkZpcnN0IFJJTyBwb3J0IHN0cnVjdCBAMHgleCwgc2l6ZT0weCV4IGJ5dGVzXG4iLAotCSAgICAoaW50KXAtPlJJT1BvcnRwLCBzaXplb2Yoc3RydWN0IFBvcnQpKTsKLQotCWZvciggcG9ydD0wOyBwb3J0PFJJT19QT1JUUzsgcG9ydCsrICkgewotCQlwLT5SSU9Qb3J0cFtwb3J0XS5Qb3J0TnVtID0gcG9ydDsKLQkJcC0+UklPUG9ydHBbcG9ydF0uVHR5UCA9ICZwLT5jaGFubmVsW3BvcnRdOwotCQlzcmVzZXQgKHAtPlJJT1BvcnRwW3BvcnRdLkluVXNlKTsJLyogTGV0IHRoZSBmaXJzdCBndXkgdXNlcyBpdCAqLwotCQlwLT5SSU9Qb3J0cFtwb3J0XS5wb3J0U2VtID0gLTE7CS8qIExldCB0aGUgZmlyc3QgZ3V5IHRha2VzIGl0ICovCi0JCXAtPlJJT1BvcnRwW3BvcnRdLlBhcmFtU2VtID0gLTE7CS8qIExldCB0aGUgZmlyc3QgZ3V5IHRha2VzIGl0ICovCi0JCXAtPlJJT1BvcnRwW3BvcnRdLnRpbWVvdXRfaWQgPSAwOwkvKiBMZXQgdGhlIGZpcnN0IGd1eSB0YWtlcyBpdCAqLwotCX0KLQotCXAtPlJJT0hvc3RzID0gKHN0cnVjdCBIb3N0ICopc3lzYnJrKFJJT19IT1NUUyAqIHNpemVvZihzdHJ1Y3QgSG9zdCkpOwotCWlmICghcC0+UklPSG9zdHMpIHsKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPLWluaXQ6IE5vIG1lbW9yeSBmb3IgaG9zdCBzdHJ1Y3R1cmVzXG4iKTsKLQkJcC0+UklPRmFpbGVkKys7Ci0JCXJldHVybjsKLQl9Ci0JYnplcm8ocC0+UklPSG9zdHMsIHNpemVvZihzdHJ1Y3QgSG9zdCkqUklPX0hPU1RTKTsKLQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICAiUklPLWluaXQ6IGFsbG9jYXRlZCBhbmQgY2xlYXJlZCBtZW1vcnkgZm9yIGhvc3Qgc3RydWN0c1xuIik7Ci0JcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAgIkZpcnN0IFJJTyBob3N0IHN0cnVjdCBAMHgleCwgc2l6ZT0weCV4IGJ5dGVzXG4iLAotCSAgICAoaW50KXAtPlJJT0hvc3RzLCBzaXplb2Yoc3RydWN0IEhvc3QpKTsKLQotCWZvciggaG9zdD0wOyBob3N0PFJJT19IT1NUUzsgaG9zdCsrICkgewotCQlzcGluX2xvY2tfaW5pdCAoJnAtPlJJT0hvc3RzW2hvc3RdLkhvc3RMb2NrKTsKLQkJcC0+UklPSG9zdHNbaG9zdF0udGltZW91dF9pZCA9IDA7IC8qIExldCB0aGUgZmlyc3QgZ3V5IHRha2VzIGl0ICovCi0JfQotCS8qCi0JKiogY2hlY2sgdGhhdCB0aGUgYnVmZmVyIHNpemUgaXMgdmFsaWQsIHJvdW5kIGRvd24gdG8gdGhlIG5leHQgcG93ZXIgb2YKLQkqKiB0d28gaWYgbmVjZXNzYXJ5OyBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIHRoZW4sIGhleSwgbm8gZG91YmxlIGJ1ZmZlcnMuCi0JKi8KLQlmb3IgKCB0bSA9IDE7IHRtICYmIHRtIDw9IHAtPlJJT0NvbmYuQnVmZmVyU2l6ZTsgdG0gPDw9IDEgKQotCQk7Ci0JdG0gPj49IDE7Ci0JcC0+UklPQnVmZmVyU2l6ZSA9IHRtOwotCXAtPlJJT0J1ZmZlck1hc2sgPSB0bSA/IHRtIC0gMSA6IDA7Ci19Ci0KLS8qCi0qKiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW5ldmVyIHRoZSBkYXRhIHN0cnVjdHVyZXMgbmVlZCB0byBiZQotKiogcmUtc2V0dXAsIGZvciBleGFtcGxlLCBhZnRlciBhIHJpb2hhbHQgKHdoeSBkaWQgSSBldmVyIGludmVudCBpdD8pCi0qLwotdm9pZAotUklPU2V0dXBEYXRhU3RydWN0cyhwKQotc3RydWN0IHJpb19pbmZvCSogcDsKLXsKLQlpbnQgaG9zdCwgZW50cnksIHJ1cDsKLQotCWZvciAoIGhvc3Q9MDsgaG9zdDxSSU9fSE9TVFM7IGhvc3QrKyApIHsKLQkJc3RydWN0IEhvc3QgKkhvc3RQID0gJnAtPlJJT0hvc3RzW2hvc3RdOwotCQlmb3IgKCBlbnRyeT0wOyBlbnRyeTxMSU5LU19QRVJfVU5JVDsgZW50cnkrKyApIHsKLQkJCUhvc3RQLT5Ub3BvbG9neVtlbnRyeV0uVW5pdCA9IFJPVVRFX0RJU0NPTk5FQ1Q7Ci0JCQlIb3N0UC0+VG9wb2xvZ3lbZW50cnldLkxpbmsgPSBOT19MSU5LOwotCQl9Ci0JCWJjb3B5KCJIT1NUIFgiLCBIb3N0UC0+TmFtZSwgNyk7Ci0JCUhvc3RQLT5OYW1lWzVdID0gJzEnK2hvc3Q7Ci0JCWZvciAocnVwPTA7IHJ1cDwoTUFYX1JVUCArIExJTktTX1BFUl9VTklUKTsgcnVwKyspIHsKLQkJCWlmIChydXAgPCBNQVhfUlVQKSB7Ci0JCQkJZm9yIChlbnRyeT0wOyBlbnRyeTxMSU5LU19QRVJfVU5JVDsgZW50cnkrKyApIHsKLQkJCQkJSG9zdFAtPk1hcHBpbmdbcnVwXS5Ub3BvbG9neVtlbnRyeV0uVW5pdCA9IFJPVVRFX0RJU0NPTk5FQ1Q7Ci0JCQkJCUhvc3RQLT5NYXBwaW5nW3J1cF0uVG9wb2xvZ3lbZW50cnldLkxpbmsgPSBOT19MSU5LOwotCQkJCX0KLQkJCQlSSU9EZWZhdWx0TmFtZShwLCBIb3N0UCwgcnVwKTsKLQkJCX0KLQkJCXNwaW5fbG9ja19pbml0KCZIb3N0UC0+VW5peFJ1cHNbcnVwXS5SdXBMb2NrKTsKLQkJfQotCX0KLX0KLSNlbmRpZgogCiBpbnQKIFJJT0RlZmF1bHROYW1lKHAsIEhvc3RQLCBVbml0SWQpCkBAIC0xNDYzLDEwICszOTQsNiBAQAogc3RydWN0IEhvc3QgKglIb3N0UDsKIHVpbnQJCQlVbml0SWQ7CiB7Ci0jaWZkZWYgQ0hFQ0sKLQlDaGVja0hvc3QoIEhvc3QgKTsKLQlDaGVja1VuaXRJZCggVW5pdElkICk7Ci0jZW5kaWYKIAliY29weSgiVU5LTk9XTiBSVEEgWC1YWCIsSG9zdFAtPk1hcHBpbmdbVW5pdElkXS5OYW1lLDE3KTsKIAlIb3N0UC0+TWFwcGluZ1tVbml0SWRdLk5hbWVbMTJdPScxJysoSG9zdFAtcC0+UklPSG9zdHMpOwogCWlmICgoVW5pdElkKzEpID4gOSkgewpAQCAtMTQ4MywzMyArNDEwLDYgQEAKICNkZWZpbmUgUklPX1JFTEVBU0UJIkxpbnV4IgogI2RlZmluZSBSRUxFQVNFX0lECSIxLjAiCiAKLSNpZiAwCi1zdGF0aWMgaW50Ci1SSU9SZXBvcnQocCkKLXN0cnVjdCByaW9faW5mbyAqCXA7Ci17Ci0JY2hhciAqCVJJT1JlbGVhc2UgPSBSSU9fUkVMRUFTRTsKLQljaGFyICoJUklPUmVsSUQgPSBSRUxFQVNFX0lEOwotCWludAkJaG9zdDsKLQotCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTyA6IFJlbGVhc2U6ICVzIElEOiAlc1xuIiwgUklPUmVsZWFzZSwgUklPUmVsSUQpOwotCi0JaWYgKCBwLT5SSU9OdW1Ib3N0cz09MCApIHsKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiXG5ObyBIb3N0cyBjb25maWd1cmVkXG4iKTsKLQkJcmV0dXJuKDApOwotCX0KLQotCWZvciAoIGhvc3Q9MDsgaG9zdCA8IHAtPlJJT051bUhvc3RzOyBob3N0KysgKSB7Ci0JCXN0cnVjdCBIb3N0ICpIb3N0UCA9ICZwLT5SSU9Ib3N0c1tob3N0XTsKLQkJc3dpdGNoICggSG9zdFAtPlR5cGUgKSB7Ci0JCQljYXNlIFJJT19BVDoKLQkJCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJBVCBCVVMgOiBmb3VuZCB0aGUgY2FyZCBhdCAweCV4XG4iLCBIb3N0UC0+UGFkZHJQKTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IHJpb1ZlcnNpb24Jc3RWZXJzaW9uOwogCiBzdHJ1Y3QgcmlvVmVyc2lvbiAqCkBAIC0xNTIzLDI3ICs0MjMsNiBAQAogICAgIHJldHVybiAmc3RWZXJzaW9uOwogfQogCi0jaWYgMAotaW50Ci1SSU9NYXBpbihwYWRkciwgc2l6ZSwgdmFkZHIpCi1wYWRkcl90CQlwYWRkcjsKLWludAkJCXNpemU7Ci1jYWRkcl90ICoJdmFkZHI7Ci17Ci0JKnZhZGRyID0gKGNhZGRyX3QpcGVybWFwKCAobG9uZylwYWRkciwgc2l6ZSk7Ci0JcmV0dXJuICgoaW50KSp2YWRkcik7Ci19Ci0KLXZvaWQKLVJJT01hcG91dChwYWRkciwgc2l6ZSwgdmFkZHIpCi1wYWRkcl90CQlwYWRkcjsKLWxvbmcJCXNpemU7Ci1jYWRkcl90IAl2YWRkcjsKLXsKLX0KLSNlbmRpZgotCi0KIHZvaWQKIFJJT0hvc3RSZXNldChUeXBlLCBEcFJhbVAsIFNsb3QpCiB1aW50IFR5cGU7CkBAIC0xNTcwLDMxICs0NDksNiBAQAogCQkJV0JZVEUoRHBSYW1QLT5EcFJlc2V0VHB1LCAweEZGKTsKIAkJCXVkZWxheSgzKTsKIAkJCWJyZWFrOwotI2lmZGVmIEZVVFVSRV9SRUxFQVNFCi0JY2FzZSBSSU9fRUlTQToKLQkvKgotCSoqIEJldCB0aGlzIGRvZXNuJ3Qgd29yayEKLQkqLwotCU9VVEJaKCBTbG90LCBFSVNBX0NPTlRST0xfUE9SVCwKLQkJRUlTQV9UUF9SVU4JCXwgRUlTQV9UUF9CVVNfRElTQUJMRSAgIHwKLQkJRUlTQV9UUF9TTE9XX0xJTktTIHwgRUlTQV9UUF9CT09UX0ZST01fUkFNICk7Ci0JT1VUQlooIFNsb3QsIEVJU0FfQ09OVFJPTF9QT1JULAotCQlFSVNBX1RQX1JFU0VUCSAgfCBFSVNBX1RQX0JVU19ESVNBQkxFICAgfCAKLQkJRUlTQV9UUF9TTE9XX0xJTktTIHwgRUlTQV9UUF9CT09UX0ZST01fUkFNICk7Ci0Jc3VzcGVuZCggMyApOwotCU9VVEJaKCBTbG90LCBFSVNBX0NPTlRST0xfUE9SVCwKLQkJRUlTQV9UUF9SVU4JCXwgRUlTQV9UUF9CVVNfRElTQUJMRSAgIHwgCi0JCUVJU0FfVFBfU0xPV19MSU5LUyB8IEVJU0FfVFBfQk9PVF9GUk9NX1JBTSApOwotCWJyZWFrOwotCWNhc2UgUklPX01DQToKLQlXQllURShEcFJhbVAtPkRwQ29udHJvbCAgLCBNY2FUcEJvb3RGcm9tUmFtIHwgTWNhVHBCdXNEaXNhYmxlICk7Ci0JV0JZVEUoRHBSYW1QLT5EcFJlc2V0VHB1ICwgMHhGRiApOwotCXN1c3BlbmQoIDMgKTsKLQlXQllURShEcFJhbVAtPkRwQ29udHJvbCAgLCBNY2FUcEJvb3RGcm9tUmFtIHwgTWNhVHBCdXNEaXNhYmxlICk7Ci0JV0JZVEUoRHBSYW1QLT5EcFJlc2V0VHB1ICwgMHhGRiApOwotCXN1c3BlbmQoIDMgKTsKLQkJYnJlYWs7Ci0jZW5kaWYKIAljYXNlIFJJT19QQ0k6CiAJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIiAoUklPX1BDSSlcbiIpOwogCQlEcFJhbVAtPkRwQ29udHJvbCAgPSBSSU9fUENJX0JPT1RfRlJPTV9SQU07CkBAIC0xNjA0LDEyICs0NTgsNiBAQAogCQkvKiBmb3IgKGk9MDsgaTw2MDAwOyBpKyspOyAgKi8KIAkJLyogc3VzcGVuZCggMyApOyAqLwogCQlicmVhazsKLSNpZmRlZiBGVVRVUkVfUkVMRUFTRQotCWRlZmF1bHQ6Ci0JUnByaW50ZihSSU9NZXNnTm9TdXBwb3J0LFR5cGUsRHBSYW1QLFNsb3QpOwotCXJldHVybjsKLSNlbmRpZgotCiAJZGVmYXVsdDoKIAkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiIChVTktOT1dOKVxuIik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9sb2Nrcy5oIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9sb2Nrcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTBjZGFjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvbG9ja3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKioKLSoqICBQZXJsZSBTcGVjaWFsaXggZHJpdmVyIGZvciBMaW51eAotKiogIFBvcnRlZCBmcm9tIGV4aXN0aW5nIFJJTyBEcml2ZXIgZm9yIFNDTyBzb3VyY2VzLgotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qKgotKioJTW9kdWxlCQk6IHJpb2xvY2tzLmgKLSoqCVNJRAkJOiAxLjIKLSoqCUxhc3QgTW9kaWZpZWQJOiAxMS82Lzk4IDExOjM0OjEzCi0qKglSZXRyaWV2ZWQJOiAxMS82Lzk4IDExOjM0OjIyCi0qKgotKiogIGlkZW50IEAoIylyaW9sb2Nrcy5oCTEuMgotKioKLSoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWZuZGVmCV9fcmlvX3Jpb2xvY2tzX2hfXwotI2RlZmluZQlfX3Jpb19yaW9sb2Nrc19oX18KLQotI2lmZGVmIFNDQ1NfTEFCRUxTCi1zdGF0aWMgY2hhciAqX3Jpb2xvY2tzX2hfc2Njc18gPSAiQCgjKXJpb2xvY2tzLmgJMS4yIjsKLSNlbmRpZgotCi0jZGVmaW5lIExPQ0tCKGxrKQkJbG9ja2IobGspOwotI2RlZmluZSBVTkxPQ0tCKGxrLCBvbGRzcGwpCXVubG9ja2IobGssIG9sZHNwbCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9wYXJhbS5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9wYXJhbS5jCmluZGV4IDRjYzdmNDkuLmM2MjJmNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvcGFyYW0uYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3BhcmFtLmMKQEAgLTE5NSwyNyArMTk1LDYgQEAKIAkJICoqIHBhcmFtZWQgd2l0aCBPUEVOLCB3ZSB3YW50IHRvIHJlc3RvcmUgdGhlIHNhdmVkIHBvcnQgdGVybWlvLCBidXQKIAkJICoqIG9ubHkgaWYgU3RvcmVkVGVybWlvIGhhcyBiZWVuIHNhdmVkLCBpLmUuIE5PVCAxc3Qgb3BlbiBhZnRlciByZWJvb3QuCiAJCSAqLwotI2lmIDAKLQkJaWYgKFBvcnRQLT5GaXJzdE9wZW4pIHsKLQkJCVBvcnRQLT5TdG9yZWRUdHkuaWZsYWcgPSBUdHlQLT50bS5jX2lmbGFnOwotCQkJUG9ydFAtPlN0b3JlZFR0eS5vZmxhZyA9IFR0eVAtPnRtLmNfb2ZsYWc7Ci0JCQlQb3J0UC0+U3RvcmVkVHR5LmNmbGFnID0gVHR5UC0+dG0uY19jZmxhZzsKLQkJCVBvcnRQLT5TdG9yZWRUdHkubGZsYWcgPSBUdHlQLT50bS5jX2xmbGFnOwotCQkJUG9ydFAtPlN0b3JlZFR0eS5saW5lID0gVHR5UC0+dG0uY19saW5lOwotCQkJZm9yIChpID0gMDsgaSA8IE5DQyArIDU7IGkrKykKLQkJCQlQb3J0UC0+U3RvcmVkVHR5LmNjW2ldID0gVHR5UC0+dG0uY19jY1tpXTsKLQkJCVBvcnRQLT5GaXJzdE9wZW4gPSAwOwotCQl9IGVsc2UgaWYgKFBvcnRQLT5TdG9yZSB8fCBQb3J0UC0+TG9jaykgewotCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1BBUkFNLCAiT1BFTjogUmVzdG9yaW5nIHN0b3JlZC9sb2NrZWQgcGFyYW1zXG4iKTsKLQkJCVR0eVAtPnRtLmNfaWZsYWcgPSBQb3J0UC0+U3RvcmVkVHR5LmlmbGFnOwotCQkJVHR5UC0+dG0uY19vZmxhZyA9IFBvcnRQLT5TdG9yZWRUdHkub2ZsYWc7Ci0JCQlUdHlQLT50bS5jX2NmbGFnID0gUG9ydFAtPlN0b3JlZFR0eS5jZmxhZzsKLQkJCVR0eVAtPnRtLmNfbGZsYWcgPSBQb3J0UC0+U3RvcmVkVHR5LmxmbGFnOwotCQkJVHR5UC0+dG0uY19saW5lID0gUG9ydFAtPlN0b3JlZFR0eS5saW5lOwotCQkJZm9yIChpID0gMDsgaSA8IE5DQyArIDU7IGkrKykKLQkJCQlUdHlQLT50bS5jX2NjW2ldID0gUG9ydFAtPlN0b3JlZFR0eS5jY1tpXTsKLQkJfQotI2VuZGlmCiAJfQogCiAJLyoKQEAgLTI3MywxNiArMjUyLDYgQEAKIAlwaGJfcGFyYW1fcHRyID0gKHN0cnVjdCBwaGJfcGFyYW0gKikgUGFja2V0UC0+ZGF0YTsKIAogCi0jaWYgMAotCS8qCi0JICoqIENPUiAxCi0JICovCi0JaWYgKFR0eVAtPnRtLmNfaWZsYWcgJiBJTlBDSykgewotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfUEFSQU0sICJQYXJpdHkgY2hlY2tpbmcgb24gaW5wdXQgZW5hYmxlZFxuIik7Ci0JCUNvcjEgfD0gQ09SMV9JTlBDSzsKLQl9Ci0jZW5kaWYKLQogCXN3aXRjaCAoVHR5UC0+dGVybWlvcy0+Y19jZmxhZyAmIENTSVpFKSB7CiAJY2FzZSBDUzU6CiAJCXsKQEAgLTUyNCwxMCArNDkzLDYgQEAKIAlpZiAoVHR5UC0+dGVybWlvcy0+Y19jZmxhZyAmIFhNVDFFTikKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1BBUkFNLCAiWE1UMUVOICg/KVxuIik7CiAjZW5kaWYKLSNpZiAwCi0JaWYgKFR0eVAtPnRlcm1pb3MtPmNfY2ZsYWcgJiBMT0JMSykKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1BBUkFNLCAiTE9CTEsgLSBKQ0wgb3V0cHV0IGJsb2NrcyB3aGVuIG5vdCBjdXJyZW50XG4iKTsKLSNlbmRpZgogCWlmIChUdHlQLT50ZXJtaW9zLT5jX2xmbGFnICYgSVNJRykKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1BBUkFNLCAiSW5wdXQgY2hhcmFjdGVyIHNpZ25hbCBnZW5lcmF0aW5nIGVuYWJsZWRcbiIpOwogCWlmIChUdHlQLT50ZXJtaW9zLT5jX2xmbGFnICYgSUNBTk9OKQpAQCAtNTcyLDE0ICs1MzcsNiBAQAogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfUEFSQU0sICJDYXJyaWFnZSByZXR1cm4gZGVsYXkgc2V0XG4iKTsKIAlpZiAoVHR5UC0+dGVybWlvcy0+Y19vZmxhZyAmIFRBQkRMWSkKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1BBUkFNLCAiVGFiIGRlbGF5IHNldFxuIik7Ci0jaWYgMAotCWlmIChUdHlQLT50ZXJtaW9zLT5jX29mbGFnICYgQlNETFkpCi0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19QQVJBTSwgIkJhY2stc3BhY2UgZGVsYXkgc2V0XG4iKTsKLQlpZiAoVHR5UC0+dGVybWlvcy0+Y19vZmxhZyAmIFZURExZKQotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfUEFSQU0sICJWZXJ0aWNhbCB0YWIgZGVsYXkgc2V0XG4iKTsKLQlpZiAoVHR5UC0+dGVybWlvcy0+Y19vZmxhZyAmIEZGRExZKQotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfUEFSQU0sICJGb3JtLWZlZWQgZGVsYXkgc2V0XG4iKTsKLSNlbmRpZgogCS8qCiAJICoqIFRoZXNlIHRoaW5ncyBhcmUga2luZCBvZiB1c2VmdWwgaW4gYSBsYXRlciBsaWZlIQogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9yb3V0ZS5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9yb3V0ZS5jCmluZGV4IDBmNGNkMzMuLmY5ODg4OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvcm91dGUuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3JvdXRlLmMKQEAgLTExMiwxNSArMTEyLDYgQEAKIAlpbnQgTGllczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0jaWZkZWYgU1RBQ0sKLQlSSU9TdGFja0NoZWNrKCJSSU9Sb3V0ZVJ1cCIpOwotI2VuZGlmCi0jaWZkZWYgQ0hFQ0sKLQlDaGVja1BhY2tldFAoUGFja2V0UCk7Ci0JQ2hlY2tIb3N0UChIb3N0UCk7Ci0JQ2hlY2tSdXAoUnVwKTsKLQlDaGVja0hvc3QoSG9zdCk7Ci0jZW5kaWYKIAkvKgogCSAqKiBJcyB0aGlzIHVuaXQgdGVsbGluZyB1cyBpdCdzIGN1cnJlbnQgbGluayB0b3BvbG9neT8KIAkgKi8KQEAgLTU0MCw5ICs1MzEsNiBAQAogCiAJCWZvciAocG9ydCA9IDA7IHBvcnQgPCBQT1JUU19QRVJfUlRBOyBwb3J0KyssIFBvcnROKyspIHsKIAkJCXVzaG9ydCBkZXN0X3BvcnQgPSBwb3J0ICsgODsKLSNpZiAwCi0JCQl1aW50IFBrdEludDsKLSNlbmRpZgogCQkJV09SRCAqVHhQa3RQOwogCQkJUEtUICpQa3Q7CiAKQEAgLTYyMywxMCArNjExLDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXJpb19zcGluX2xvY2tfaXJxc2F2ZSgmSG9zdFAtPkhvc3RMb2NrLCBmbGFncyk7CiAKLSNpZmRlZiBDSEVDSwotCUNoZWNrSG9zdFAoSG9zdFApOwotCUNoZWNrVW5pdElkKFVuaXRJZCk7Ci0jZW5kaWYKIAlpZiAoUklPQ2hlY2soSG9zdFAsIFVuaXRJZCkpIHsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1JPVVRFLCAiVW5pdCAlZCBpcyBOT1QgaXNvbGF0ZWRcbiIsIFVuaXRJZCk7CiAJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZIb3N0UC0+SG9zdExvY2ssIGZsYWdzKTsKQEAgLTY1MSwxMCArNjM1LDYgQEAKIHsKIAl1aW50IGxpbmssIHVuaXQ7CiAKLSNpZmRlZiBDSEVDSwotCUNoZWNrSG9zdFAoSG9zdFApOwotCUNoZWNrVW5pdElkKFVuaXRJZCk7Ci0jZW5kaWYKIAlVbml0SWQtLTsJCS8qIHRoaXMgdHJpY2sgcmVsaWVzIG9uIHRoZSBVbml0IElkIGJlaW5nIFVOU0lHTkVEISAqLwogCiAJaWYgKFVuaXRJZCA+PSBNQVhfUlVQKQkvKiBkb250Y2hhIGp1c3QgbHVydiB1bnNpZ25lZCBtYXRocyEgKi8KQEAgLTY4NCwxMCArNjY0LDYgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIGxpbms7CiAKLSNpZmRlZiBDSEVDSwotCUNoZWNrSG9zdFAoSG9zdFApOwotCUNoZWNrVW5pdElkKFVuaXRJZCk7Ci0jZW5kaWYKIC8qIAlyaW9fZHByaW50KFJJT19ERUJVR19ST1VURSwgKCJDaGVjayB0byBzZWUgaWYgdW5pdCAlZCBoYXMgYSByb3V0ZSB0byB0aGUgaG9zdFxuIixVbml0SWQpKTsgKi8KIAlyaW9fZHByaW50ayhSSU9fREVCVUdfUk9VVEUsICJSSU9DaGVjayA6IFVuaXRJRCA9ICVkXG4iLCBVbml0SWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3RhYmxlLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3RhYmxlLmMKaW5kZXggNDJjM2RmZmMuLmE4NmIyMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdGFibGUuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3RhYmxlLmMKQEAgLTc1NCwxMSArNzU0LDYgQEAKIAl1c2hvcnQgUnRhVHlwZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0jaWZkZWYgQ0hFQ0sKLQlDaGVja0hvc3RQKEhvc3RQKTsKLQlDaGVja0hvc3RNYXBQKEhvc3RNYXBQKTsKLSNlbmRpZgotCiAJcmlvX2RwcmludGsoUklPX0RFQlVHX1RBQkxFLCAiTWFwcGluZyBzeXNwb3J0ICVkIHRvIGlkICVkXG4iLCAoaW50KSBIb3N0TWFwUC0+U3lzUG9ydCwgSG9zdE1hcFAtPklEKTsKIAogCS8qCkBAIC03ODQsOSArNzc5LDYgQEAKIAogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVEFCTEUsICJjMSBwID0gJXAsIHAtPnJpb1BvcnRwID0gJXBcbiIsIHAsIHAtPlJJT1BvcnRwKTsKIAkJUG9ydFAgPSBwLT5SSU9Qb3J0cFtTeXNQb3J0XTsKLSNpZiAwCi0JCVBvcnRQLT5UdHlQID0gJnAtPmNoYW5uZWxbU3lzUG9ydF07Ci0jZW5kaWYKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RBQkxFLCAiTWFwIHBvcnRcbiIpOwogCiAJCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3RpbWUuaCBiL2RyaXZlcnMvY2hhci9yaW8vcmlvdGltZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWUwMWNkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdGltZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgIFQgSSBNIEUKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gQXV0aG9yICA6IEplcmVteSBSb2xscwotIERhdGUgICAgOgotCi0gKgotICogIChDKSAxOTkwIC0gMjAwMCBTcGVjaWFsaXggSW50ZXJuYXRpb25hbCBMdGQuLCBCeWZsZWV0LCBTdXJyZXksIFVLLgotICoKLQotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gVmVyc2lvbiA6IDAuMDEKLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kcwotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgRGF0ZSAgICAgQnkgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24KLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX3Jpb3RpbWVfaAotI2RlZmluZSBfcmlvdGltZV9oIDEKLQotI2lmbmRlZiBsaW50Ci0jaWZkZWYgU0NDUwotc3RhdGljIGNoYXIgKl9yaW9fcmlvdGltZV9oX3NjY3MgPSAiQCgjKXJpb3RpbWUuaAkxLjEiOwotI2VuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBUV09fUE9XRVJfRklGVEVFTiAodXNob3J0KTMyNzY4Ci0jZGVmaW5lIFJpb1RpbWUoKSAgICByaW90aW1lCi0jZGVmaW5lIFJpb1RpbWVBZnRlcih0aW1lMSx0aW1lMikgKCh1c2hvcnQpdGltZTEgLSAodXNob3J0KXRpbWUyKSA8IFRXT19QT1dFUl9GSUZURUVOCi0jZGVmaW5lIFJpb1RpbWVQbHVzKHRpbWUxLHRpbWUyKSAoKHVzaG9ydCl0aW1lMSArICh1c2hvcnQpdGltZTIpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29udmVydCBhIFJJTyB0aWNrICgxLzEwdGggc2Vjb25kKQotICogaW50byB0cmFuc3B1dGVyIGxvdyBwcmlvcml0eSB0aWNrcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFJpb1RpbWVUb0xvdyh0aW1lKSAodGltZSooMTAwMDAwIC8gNjQpKQotI2RlZmluZSBSaW9Mb3dUb1RpbWUodGltZSkgKCh0aW1lKjY0KS8xMDAwMDApCi0KLSNkZWZpbmUgUklPVEVOVEhTRUNPTkQgKHVzaG9ydCkxCi0jZGVmaW5lIFJJT1NFQ09ORCAodXNob3J0KShSSU9URU5USFNFQ09ORCAqIDEwKQotI2VuZGlmCi0KLS8qKioqKioqKioqKiBlbmQgb2YgZmlsZSAqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jCmluZGV4IDU4OTRhMjUuLjYzNzk4MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW90dHkuYwpAQCAtODksMTYgKzg5LDkgQEAKICNpbmNsdWRlICJsaXN0LmgiCiAjaW5jbHVkZSAic2FtLmgiCiAKLSNpZiAwCi1zdGF0aWMgdm9pZCB0dHlzZXRoX3B2KHN0cnVjdCBQb3J0ICosIHN0cnVjdCB0dHlzdGF0aWNzICosIHN0cnVjdCB0ZXJtaW9zICpzZywgaW50KTsKLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBSSU9DbGVhclVwKHN0cnVjdCBQb3J0ICpQb3J0UCk7CiBpbnQgUklPU2hvcnRDb21tYW5kKHN0cnVjdCByaW9faW5mbyAqcCwgc3RydWN0IFBvcnQgKlBvcnRQLCBpbnQgY29tbWFuZCwgaW50IGxlbiwgaW50IGFyZyk7CiAKLSNpZiAwCi1zdGF0aWMgaW50IFJJT0Nvb2tNb2RlKHN0cnVjdCB0dHlzdGF0aWNzICopOwotI2VuZGlmCiAKIGV4dGVybiBpbnQgY29udl92YltdOwkJLyogbm93IGRlZmluZWQgaW4gdHR5bWdyLmMgKi8KIGV4dGVybiBpbnQgY29udl9idltdOwkJLyogbm93IGRlZmluZWQgaW4gdHR5bWdyLmMgKi8KQEAgLTIyNiwzMyArMjE5LDYgQEAKIAkgKiogdW50aWwgdGhlIFJUQSBpcyBwcmVzZW50IHRoZW4gd2UgbXVzdCBzcGluIGhlcmUgd2FpdGluZyBmb3IKIAkgKiogdGhlIFJUQSB0byBib290LgogCSAqLwotI2lmIDAKLQlpZiAoIShQb3J0UC0+SG9zdFAtPk1hcHBpbmdbUG9ydFAtPlJ1cE51bV0uRmxhZ3MgJiBSVEFfQk9PVEVEKSkgewotCQlpZiAoUG9ydFAtPldhaXRVbnRpbEJvb3RlZCkgewotCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIldhaXRpbmcgZm9yIFJUQSB0byBib290XG4iKTsKLQkJCWRvIHsKLQkJCQlpZiAoUklPRGVsYXkoUG9ydFAsIEhVTkRSRURfTVMpID09IFJJT19GQUlMKSB7Ci0JCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJSVEEgRUlOVFIgaW4gZGVsYXkgXG4iKTsKLQkJCQkJZnVuY19leGl0KCk7Ci0JCQkJCXJldHVybiAtRUlOVFI7Ci0JCQkJfQotCQkJCWlmIChyZXBlYXRfdGhpcy0tIDw9IDApIHsKLQkJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIldhaXRpbmcgZm9yIFJUQSB0byBib290IHRpbWVvdXRcbiIpOwotCQkJCQlSSU9QcmVlbXB0aXZlQ21kKHAsIFBvcnRQLCBGQ0xPU0UpOwotCQkJCQlwc2V0ZXJyKEVJTlRSKTsKLQkJCQkJZnVuY19leGl0KCk7Ci0JCQkJCXJldHVybiAtRUlPOwotCQkJCX0KLQkJCX0gd2hpbGUgKCEoUG9ydFAtPkhvc3RQLT5NYXBwaW5nW1BvcnRQLT5SdXBOdW1dLkZsYWdzICYgUlRBX0JPT1RFRCkpOwotCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIlJUQSBoYXMgYmVlbiBib290ZWRcbiIpOwotCQl9IGVsc2UgewotCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIlJUQSBuZXZlciBib290ZWRcbiIpOwotCQkJcHNldGVycihFTlhJTyk7Ci0JCQlmdW5jX2V4aXQoKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotI2Vsc2UKIAkvKiBJIGZpbmQgdGhlIGFib3ZlIGNvZGUgYSBiaXQgaGFpcnkuIEkgZmluZCB0aGUgYmVsb3cgY29kZQogCSAgIGVhc2llciB0byByZWFkIGFuZCBzaG9ydGVyLiBOb3csIGlmIGl0IHdvcmtzIHRvbyB0aGF0IHdvdWxkCiAJICAgYmUgZ3JlYXQuLi4gLS0gUkVXIApAQCAtMjgxLDIxICsyNDcsMTAgQEAKIAkJfQogCX0KIAlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiUlRBIGhhcyBiZWVuIGJvb3RlZFxuIik7Ci0jZW5kaWYKLSNpZiAwCi0JdHAgPSBQb3J0UC0+VHR5UDsJLyogZ2V0IHR0eSBzdHJ1Y3QgKi8KLSNlbmRpZgogCXJpb19zcGluX2xvY2tfaXJxc2F2ZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKIAlpZiAocC0+UklPSGFsdGVkKSB7CiAJCWdvdG8gYm9tYm91dDsKIAl9Ci0jaWYgMAotCXJldHZhbCA9IGdzX2luaXRfcG9ydCgmUG9ydFAtPmdzKTsKLQlpZiAocmV0dmFsKSB7Ci0JCWZ1bmNfZXhpdCgpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLSNlbmRpZgogCiAJLyoKIAkgKiogSWYgdGhlIHBvcnQgaXMgaW4gdGhlIGZpbmFsIHRocm93cyBvZiBiZWluZyBjbG9zZWQsCkBAIC0zNjMsMTEgKzMxOCw2IEBACiAJCSAgIGNvbW1hbmQgcGlnZ3liYWNrcyB0aGUgcGFyYW1ldGVycyBpbW1lZGlhdGVseS4KIAkJICAgLS0gUkVXICovCiAJCVJJT1BhcmFtKFBvcnRQLCBPUEVOLCBNb2RlbSwgT0tfVE9fU0xFRVApOwkvKiBPcGVuIHRoZSBwb3J0ICovCi0jaWYgMAotCQkvKiBUaGlzIGRlbGF5IG9mIDEgc2Vjb25kIHdhcyBhbm5veWluZy4gSSByZW1vdmVkIGl0LiAtLSBSRVcgKi8KLQkJUklPRGVsYXkoUG9ydFAsIEhVTkRSRURfTVMgKiAxMCk7Ci0JCVJJT1BhcmFtKFBvcnRQLCBDT05GSUcsIE1vZGVtLCBPS19UT19TTEVFUCk7CS8qIENvbmZpZyB0aGUgcG9ydCAqLwotI2VuZGlmCiAJCXJpb19zcGluX2xvY2tfaXJxc2F2ZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKIAogCQkvKgpAQCAtNDM5LDkgKzM4OSw2IEBACiAJCQkJUG9ydFAtPlN0YXRlIHw9IFJJT19XT1BFTjsKIAkJCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKIAkJCQlpZiAoUklPRGVsYXkoUG9ydFAsIEhVTkRSRURfTVMpID09IFJJT19GQUlMKQotI2lmIDAKLQkJCQkJaWYgKHNsZWVwKChjYWRkcl90KSAmIHRwLT50bS5jX2NhbnFvLCBUVElQUkkgfCBQQ0FUQ0gpKQotI2VuZGlmCiAJCQkJCXsKIAkJCQkJCS8qCiAJCQkJCQkgKiogQUNUSU9OOiB2ZXJpZnkgdGhhdCB0aGlzIGlzIGEgZ29vZCB0aGluZwpAQCAtNTA1LDEwICs0NTIsNiBAQAogKi8KIGludCByaW90Y2xvc2Uodm9pZCAqcHRyKQogewotI2lmIDAKLQlyZWdpc3RlciB1aW50IFN5c1BvcnQgPSBkZXY7Ci0Jc3RydWN0IHR0eXN0YXRpY3MgKnRwOwkvKiBwb2ludGVyIHRvIG91ciB0dHlzdHJ1Y3QgKi8KLSNlbmRpZgogCXN0cnVjdCBQb3J0ICpQb3J0UCA9IHB0cjsJLyogcG9pbnRlciB0byB0aGUgcG9ydCBzdHJ1Y3R1cmUgKi8KIAlpbnQgZGVsZXRlZCA9IDA7CiAJaW50IHRyeSA9IC0xOwkJLyogRGlzYWJsZSB0aGUgdGltZW91dHMgYnkgc2V0dGluZyB0aGVtIHRvIC0xICovCkBAIC01MzQsMTMgKzQ3Nyw2IEBACiAJCWVuZF90aW1lID0gamlmZmllcyArIE1BWF9TQ0hFRFVMRV9USU1FT1VUOwogCiAJTW9kZW0gPSByaW9faXNtb2RlbSh0dHkpOwotI2lmIDAKLQkvKiBXaGF0IEYuQ0tJTkcgY2FjaGU/IEV2ZW4gdGhlbiwgYSBoaWdseSBpZGxlIG11bHRpcHJvY2Vzc29yLAotCSAgIHN5c3RlbSB3aXRoIGxhcmdlIGNhY2hlcyB0aGlzIHdvbid0IHdvcmsgLiBCZXR0ZXIgZmluZCBvdXQgd2hlbiAKLQkgICB0aGlzIGRvZXNuJ3Qgd29yayBhc2FwLCBhbmQgZml4IHRoZSBjYXVzZS4gIC0tIFJFVyAqLwotCi0JUklPRGVsYXkoUG9ydFAsIEhVTkRSRURfTVMgKiAxMCk7CS8qIFRvIGZsdXNoIHRoZSBjYWNoZSAqLwotI2VuZGlmCiAJcmlvX3NwaW5fbG9ja19pcnFzYXZlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwogCiAJLyoKQEAgLTcwMyw0NSArNjM5LDYgQEAKIH0KIAogCi0vKgotKiogZGVjaWRlIGlmIHdlIG5lZWQgdG8gdXNlIHRoZSBsaW5lIGRpc2NpcGxpbmUuCi0qKiBUaGlzIHJvdXRpbmUgY2FuIHJldHVybiBvbmUgb2YgdGhyZWUgdmFsdWVzOgotKiogQ09PS19SQVcgaWYgbm8gcHJvY2Vzc2luZyBoYXMgdG8gYmUgZG9uZSBieSB0aGUgbGluZSBkaXNjaXBsaW5lIG9yIHRoZSBjYXJkCi0qKiBDT09LX1dFTEwgaWYgdGhlIGxpbmUgZGlzY2lwbGluZSBtdXN0IGJlIHVzZWQgdG8gZG8gdGhlIHByb2Nlc3NpbmcKLSoqIENPT0tfTUVESVVNIGlmIHRoZSBjYXJkIGNhbiBkbyBhbGwgdGhlIHByb2Nlc3NpbmcgbmVjZXNzYXJ5LgotKi8KLSNpZiAwCi1zdGF0aWMgaW50IFJJT0Nvb2tNb2RlKHN0cnVjdCB0dHlzdGF0aWNzICp0cCkKLXsKLQkvKgotCSAqKiBXZSBjYW4ndCBoYW5kbGUgdG0uY19tc3RhdGUgIT0gMCBvbiBTQ08KLQkgKiogV2UgY2FuJ3QgaGFuZGxlIG1hcHBpbmcKLQkgKiogV2UgY2FuJ3QgaGFuZGxlIG5vbi10dHdyaXRlIGxpbmUgZGlzYy4KLQkgKiogV2UgY2FuJ3QgaGFuZGxlIGxmbGFnIFhDQVNFCi0JICoqIFdlIGNhbiBoYW5kbGUgb2ZsYWcgT1BPU1QgJiAoT0NSTkwsIE9OTENSLCBUQUIzKQotCSAqLwotCi0jaWZkZWYgQ0hFQ0sKLQlDaGVja1R0eVAodHApOwotI2VuZGlmCi0JaWYgKCEodHAtPnRtLmNfb2ZsYWcgJiBPUE9TVCkpCS8qIE5vIHBvc3QgcHJvY2Vzc2luZyAqLwotCQlyZXR1cm4gQ09PS19SQVc7CS8qIFJhdyBtb2RlIG8vcCAqLwotCi0JaWYgKHRwLT50bS5jX2xmbGFnICYgWENBU0UpCi0JCXJldHVybiBDT09LX1dFTEw7CS8qIFVzZSBsaW5lIGRpc2MgKi8KLQotCWlmICh0cC0+dG0uY19vZmxhZyAmIH4oT1BPU1QgfCBPTkxDUiB8IE9DUk5MIHwgVEFCMykpCi0JCXJldHVybiBDT09LX1dFTEw7CS8qIFVzZSBsaW5lIGRpc2MgZm9yIHN0cmFuZ2UgbW9kZXMgKi8KLQotCWlmICh0cC0+dG0uY19vZmxhZyA9PSBPUE9TVCkJLyogSWYgb25seSBPUE9TVCBpcyBzZXQsIGRvIFJBVyAqLwotCQlyZXR1cm4gQ09PS19SQVc7Ci0KLQkvKgotCSAqKiBTbywgd2UgbmVlZCB0byBvdXRwdXQgcHJvY2VzcyEKLQkgKi8KLQlyZXR1cm4gQ09PS19NRURJVU07Ci19Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgUklPQ2xlYXJVcChQb3J0UCkKIHN0cnVjdCBQb3J0ICpQb3J0UDsKQEAgLTc3NiwxMSArNjczLDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgImVudGVyaW5nIHNob3J0Y29tbWFuZC5cbiIpOwotI2lmZGVmIENIRUNLCi0JQ2hlY2tQb3J0UChQb3J0UCk7Ci0JaWYgKGxlbiA8IDEgfHwgbGVuID4gMikKLQkJY3ByaW50ZigoIlNUVVBJRCBMRU5HVEggJWRcbiIsIGxlbikpOwotI2VuZGlmCiAKIAlpZiAoUG9ydFAtPlN0YXRlICYgUklPX0RFTEVURUQpIHsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIlNob3J0IGNvbW1hbmQgdG8gZGVsZXRlZCBSVEEgaWdub3JlZFxuIik7CkBAIC04NTIsNDc4ICs3NDQsMyBAQAogfQogCiAKLSNpZiAwCi0vKgotKiogVGhpcyBpcyBhbiBpb2N0bCBpbnRlcmZhY2UuIFRoaXMgaXMgdGhlIHR3ZW50aWV0aCBjZW50dXJ5LiBZb3Uga25vdyB3aGF0Ci0qKiBpdHMgYWxsIGFib3V0LgotKi8KLWludCByaW90aW9jdGwoc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgY21kLCBjYWRkcl90IGFyZykKLXsKLQlyZWdpc3RlciBzdHJ1Y3QgUG9ydCAqUG9ydFA7Ci0JcmVnaXN0ZXIgc3RydWN0IHR0eXN0YXRpY3MgKnRwOwotCWludCBjdXJyZW50OwotCWludCBQYXJhbVNlbUluY3JlbWVudGVkID0gMDsKLQlpbnQgb2xkX29mbGFnLCBvbGRfY2ZsYWcsIG9sZF9pZmxhZywgY2hhbmdlZCwgb2xkY29vazsKLQlpbnQgaTsKLQl1bnNpZ25lZCBjaGFyIHNpb19yZWdzWzVdOwkvKiBIZXJlIGJlIG1hZ2ljICovCi0Jc2hvcnQgdnBpeF9jZmxhZzsKLQlzaG9ydCBkaXZpc29yOwotCWludCBiYXVkOwotCXVpbnQgU3lzUG9ydCA9IHJpb19taW5vcih0dHkpOwotCWludCBNb2RlbSA9IHJpb19pc21vZGVtKHR0eSk7Ci0JaW50IGlvY3RsX3Byb2Nlc3NlZDsKLQotCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJwb3J0IGlvY3RsIFN5c1BvcnQgJWQgY29tbWFuZCAweCV4IGFyZ3VtZW50IDB4JXggJXNcbiIsIFN5c1BvcnQsIGNtZCwgYXJnLCBNb2RlbSA/ICJNb2RlbSIgOiAidHR5Iik7Ci0KLQlpZiAoU3lzUG9ydCA+PSBSSU9fUE9SVFMpIHsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIkJhZCBwb3J0IG51bWJlciAlZFxuIiwgU3lzUG9ydCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JUG9ydFAgPSBwLT5SSU9Qb3J0cFtTeXNQb3J0XTsKLQl0cCA9IFBvcnRQLT5UdHlQOwotCi0JcmlvX3NwaW5fbG9ja19pcnFzYXZlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCi0jaWZkZWYgU1RBVFMKLQlQb3J0UC0+U3RhdC5Jb2N0bENudCsrOwotI2VuZGlmCi0KLQlpZiAoUG9ydFAtPlN0YXRlICYgUklPX0RFTEVURUQpIHsKLQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCi0JaWYgKHAtPlJJT0hhbHRlZCkgewotCQlSSU9DbGVhclVwKFBvcnRQKTsKLQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qCi0JICoqIENvdW50IGlvY3RscyBmb3IgcG9ydCBzdGF0aXN0aWNzIHJlcG9ydGluZwotCSAqLwotCWlmIChQb3J0UC0+c3RhdHNHYXRoZXIpCi0JCVBvcnRQLT5pb2N0bHMrKzsKLQotCS8qCi0JICoqIFNwZWNpYWxpeCBSSU8gSW9jdGwgY2FsbHMKLQkgKi8KLQlzd2l0Y2ggKGNtZCkgewotCi0JY2FzZSBUQ1JJT1RSSUFEOgotCQlpZiAoYXJnKQotCQkJUG9ydFAtPlN0YXRlIHw9IFJJT19UUklBRF9NT0RFOwotCQllbHNlCi0JCQlQb3J0UC0+U3RhdGUgJj0gflJJT19UUklBRF9NT0RFOwotCQkvKgotCQkgKiogTm9ybWFsbHksIHdoZW4gaXN0cmlwIGlzIHNldCBvbiBhIHBvcnQsIGEgY29uZmlnIGlzCi0JCSAqKiBzZW50IHRvIHRoZSBSVEEgaW5zdHJ1Y3RpbmcgdGhlIENEMTQwMCB0byBkbyB0aGUKLQkJICoqIHN0cmlwcGluZy4gSW4gVFJJQUQgbW9kZSwgdGhlIGludGVycnVwdCByZWNlaXZlIHJvdXRpbmUKLQkJICoqIG11c3QgZG8gdGhlIHN0cmlwcGluZyBpbnN0ZWFkLCBzaW5jZSBpdCBoYXMgdG8gZGV0ZWN0Ci0JCSAqKiBhbiA4IGJpdCBmdW5jdGlvbiBrZXkgc2VxdWVuY2UuIElmIGlzdHJpcCBpcyBzZXQgd2l0aAotCQkgKiogVFJJQUQgbW9kZSBvbihvZmYpLCBhbmQgOCBiaXQgZGF0YSBpcyBiZWluZyByZWFkIGJ5Ci0JCSAqKiB0aGUgcG9ydCwgdGhlIHVzZXIgdGhlbiB0dXJucyBUUklBRCBtb2RlIG9mZihvbiksIHRoZSBSVEEKLQkJICoqIG11c3QgYmUgcmVjb25maWd1cmVkIChub3QpIHRvIGRvIHRoZSBzdHJpcHBpbmcuCi0JCSAqKiBIZW5jZSB3ZSBjYWxsIFJJT1BhcmFtIGhlcmUuCi0JCSAqLwotCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKLQkJUklPUGFyYW0oUG9ydFAsIENPTkZJRywgTW9kZW0sIE9LX1RPX1NMRUVQKTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFRDUklPVFNUQVRFOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAidGJ1c3kvdHN0b3AgbW9uaXRvcmluZyAlc2FibGVkXG4iLCBhcmcgPyAiZW4iIDogImRpcyIpOwotCQkvKiBNb25pdG9yVHN0YXRlID0gMCA7ICovCi0JCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQlSSU9QYXJhbShQb3J0UCwgQ09ORklHLCBNb2RlbSwgT0tfVE9fU0xFRVApOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgVENSSU9TVEFURToJLyogY3VycmVudCBzdGF0ZSBvZiBNb2RlbSBpbnB1dCBwaW5zICovCi0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJUQ1JJT1NUQVRFXG4iKTsKLQkJaWYgKFJJT1ByZWVtcHRpdmVDbWQocCwgUG9ydFAsIE1HRVQpID09IFJJT19GQUlMKQotCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIlRDUklPU1RBVEUgY29tbWFuZCBmYWlsZWRcbiIpOwotCQlQb3J0UC0+U3RhdGUgfD0gUklPX0JVU1k7Ci0JCWN1cnJlbnQgPSBQb3J0UC0+TW9kZW1TdGF0ZTsKLQkJaWYgKGNvcHlvdXQoKGNhZGRyX3QpICYgY3VycmVudCwgKGludCkgYXJnLCBzaXplb2YoY3VycmVudCkpID09IENPUFlGQUlMKSB7Ci0JCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiQ29weW91dCBmYWlsZWRcbiIpOwotCQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCQlwc2V0ZXJyKEVGQVVMVCk7Ci0JCX0KLQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBUQ1JJT01CSVM6CS8qIFNldCBtb2RlbSBsaW5lcyAqLwotCWNhc2UgVENSSU9NQklDOgkvKiBDbGVhciBtb2RlbSBsaW5lcyAqLwotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiVENSSU9NQklTL1RDUklPTUJJQ1xuIik7Ci0JCWlmIChjbWQgPT0gVENSSU9NQklTKSB7Ci0JCQl1aW50IHN0YXRlOwotCQkJc3RhdGUgPSAodWludCkgYXJnOwotCQkJUG9ydFAtPk1vZGVtU3RhdGUgfD0gKHVzaG9ydCkgc3RhdGU7Ci0JCQlQb3J0UC0+TW9kZW1MaW5lcyA9ICh1bG9uZykgYXJnOwotCQkJaWYgKFJJT1ByZWVtcHRpdmVDbWQocCwgUG9ydFAsIE1CSVMpID09IFJJT19GQUlMKQotCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJUQ1JJT01CSVMgY29tbWFuZCBmYWlsZWRcbiIpOwotCQl9IGVsc2UgewotCQkJdWludCBzdGF0ZTsKLQotCQkJc3RhdGUgPSAodWludCkgYXJnOwotCQkJUG9ydFAtPk1vZGVtU3RhdGUgJj0gfih1c2hvcnQpIHN0YXRlOwotCQkJUG9ydFAtPk1vZGVtTGluZXMgPSAodWxvbmcpIGFyZzsKLQkJCWlmIChSSU9QcmVlbXB0aXZlQ21kKHAsIFBvcnRQLCBNQklDKSA9PSBSSU9fRkFJTCkKLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiVENSSU9NQklDIGNvbW1hbmQgZmFpbGVkXG4iKTsKLQkJfQotCQlQb3J0UC0+U3RhdGUgfD0gUklPX0JVU1k7Ci0JCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgVENSSU9YUE9OOgkvKiBzZXQgWHByaW50IE9OIHN0cmluZyAqLwotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiVENSSU9YUE9OXG4iKTsKLQkJaWYgKGNvcHlpbigoaW50KSBhcmcsIChjYWRkcl90KSBQb3J0UC0+WHByaW50LlhwT24sIE1BWF9YUF9DVFJMX0xFTikgPT0gQ09QWUZBSUwpIHsKLQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJDb3B5aW4gZmFpbGVkXG4iKTsKLQkJCVBvcnRQLT5YcHJpbnQuWHBPblswXSA9ICdcMCc7Ci0JCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKLQkJCXBzZXRlcnIoRUZBVUxUKTsKLQkJfQotCQlQb3J0UC0+WHByaW50LlhwT25bTUFYX1hQX0NUUkxfTEVOIC0gMV0gPSAnXDAnOwotCQlQb3J0UC0+WHByaW50LlhwTGVuID0gc3RybGVuKFBvcnRQLT5YcHJpbnQuWHBPbikgKyBzdHJsZW4oUG9ydFAtPlhwcmludC5YcE9mZik7Ci0JCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgVENSSU9YUE9GRjoJLyogc2V0IFhwcmludCBPRkYgc3RyaW5nICovCi0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJUQ1JJT1hQT0ZGXG4iKTsKLQkJaWYgKGNvcHlpbigoaW50KSBhcmcsIChjYWRkcl90KSBQb3J0UC0+WHByaW50LlhwT2ZmLCBNQVhfWFBfQ1RSTF9MRU4pID09IENPUFlGQUlMKSB7Ci0JCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiQ29weWluIGZhaWxlZFxuIik7Ci0JCQlQb3J0UC0+WHByaW50LlhwT2ZmWzBdID0gJ1wwJzsKLQkJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQkJcHNldGVycihFRkFVTFQpOwotCQl9Ci0JCVBvcnRQLT5YcHJpbnQuWHBPZmZbTUFYX1hQX0NUUkxfTEVOIC0gMV0gPSAnXDAnOwotCQlQb3J0UC0+WHByaW50LlhwTGVuID0gc3RybGVuKFBvcnRQLT5YcHJpbnQuWHBPbikgKyBzdHJsZW4oUG9ydFAtPlhwcmludC5YcE9mZik7Ci0JCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgVENSSU9YUENQUzoJLyogc2V0IFhwcmludCBDUFMgc3RyaW5nICovCi0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJUQ1JJT1hQQ1BTXG4iKTsKLQkJaWYgKCh1aW50KSBhcmcgPiBwLT5SSU9Db25mLk1heFhwQ3BzIHx8ICh1aW50KSBhcmcgPCBwLT5SSU9Db25mLk1pblhwQ3BzKSB7Ci0JCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiJWQgQ1BTIG91dCBvZiByYW5nZVxuIiwgYXJnKTsKLQkJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQkJcHNldGVycihFSU5WQUwpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJUG9ydFAtPlhwcmludC5YcENwcyA9ICh1aW50KSBhcmc7Ci0JCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgVENSSU9YUFJJTlQ6Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJUQ1JJT1hQUklOVFxuIik7Ci0JCWlmIChjb3B5b3V0KChjYWRkcl90KSAmIFBvcnRQLT5YcHJpbnQsIChpbnQpIGFyZywgc2l6ZW9mKHN0cnVjdCBYcHJpbnQpKSA9PSBDT1BZRkFJTCkgewotCQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCQlwc2V0ZXJyKEVGQVVMVCk7Ci0JCX0KLQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBUQ1JJT0lYQU5ZT046Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJUQ1JJT0lYQU5ZT05cbiIpOwotCQlQb3J0UC0+Q29uZmlnIHw9IFJJT19JWEFOWTsKLQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBUQ1JJT0lYQU5ZT0ZGOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiVENSSU9JWEFOWU9GRlxuIik7Ci0JCVBvcnRQLT5Db25maWcgJj0gflJJT19JWEFOWTsKLQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBUQ1JJT0lYT05PTjoKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIlRDUklPSVhPTk9OXG4iKTsKLQkJUG9ydFAtPkNvbmZpZyB8PSBSSU9fSVhPTjsKLQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBUQ1JJT0lYT05PRkY6Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJUQ1JJT0lYT05PRkZcbiIpOwotCQlQb3J0UC0+Q29uZmlnICY9IH5SSU9fSVhPTjsKLQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCXJldHVybiAwOwotCi0vKgotKiogMTUuMTAuMTk5OCBBUkcgLSBFU0lMIDA3NjEgcGFydCBmaXgKLSoqIEFkZGVkIHN1cHBvcnQgZm9yIENUUyBhbmQgUlRTIGZsb3cgY29udHJvbCBpb2N0bHMgOgotKi8KLQljYXNlIFRDUklPQ1RTRkxPV0VOOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiVENSSU9DVFNGTE9XRU5cbiIpOwotCQlQb3J0UC0+Q29uZmlnIHw9IFJJT19DVFNGTE9XOwotCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKLQkJUklPUGFyYW0oUG9ydFAsIENPTkZJRywgTW9kZW0sIE9LX1RPX1NMRUVQKTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFRDUklPQ1RTRkxPV0RJUzoKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIlRDUklPQ1RTRkxPV0RJU1xuIik7Ci0JCVBvcnRQLT5Db25maWcgJj0gflJJT19DVFNGTE9XOwotCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKLQkJUklPUGFyYW0oUG9ydFAsIENPTkZJRywgTW9kZW0sIE9LX1RPX1NMRUVQKTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFRDUklPUlRTRkxPV0VOOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiVENSSU9SVFNGTE9XRU5cbiIpOwotCQlQb3J0UC0+Q29uZmlnIHw9IFJJT19SVFNGTE9XOwotCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKLQkJUklPUGFyYW0oUG9ydFAsIENPTkZJRywgTW9kZW0sIE9LX1RPX1NMRUVQKTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFRDUklPUlRTRkxPV0RJUzoKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIlRDUklPUlRTRkxPV0RJU1xuIik7Ci0JCVBvcnRQLT5Db25maWcgJj0gflJJT19SVFNGTE9XOwotCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKLQkJUklPUGFyYW0oUG9ydFAsIENPTkZJRywgTW9kZW0sIE9LX1RPX1NMRUVQKTsKLQkJcmV0dXJuIDA7Ci0KLS8qIGVuZCBFU0lMIDA3NjEgcGFydCBmaXggKi8KLQotCX0KLQotCi0JLyogTHlueCBJT0NUTFMgKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVElPQ1NFVFA6Ci0JY2FzZSBUSU9DU0VUTjoKLQljYXNlIE9USU9DU0VUUDoKLQljYXNlIE9USU9DU0VUTjoKLQkJaW9jdGxfcHJvY2Vzc2VkKys7Ci0JCXR0eXNldGgoUG9ydFAsIHRwLCAoc3RydWN0IG9sZF9zZ3R0eWIgKikgYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSBUQ1NFVEE6Ci0JY2FzZSBUQ1NFVEFXOgotCWNhc2UgVENTRVRBRjoKLQkJaW9jdGxfcHJvY2Vzc2VkKys7Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJOT04gUE9TSVggaW9jdGxcbiIpOwotCQl0dHlzZXRoX3B2KFBvcnRQLCB0cCwgKHN0cnVjdCB0ZXJtaW9zICopIGFyZywgMCk7Ci0JCWJyZWFrOwotCWNhc2UgVENTRVRBUDoJCS8qIHBvc2l4IHRjc2V0YXR0cigpICovCi0JY2FzZSBUQ1NFVEFXUDoJCS8qIHBvc2l4IHRjc2V0YXR0cigpICovCi0JY2FzZSBUQ1NFVEFGUDoJCS8qIHBvc2l4IHRjc2V0YXR0cigpICovCi0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJOT04gUE9TSVggU1lTViBpb2N0bFxuIik7Ci0JCXR0eXNldGhfcHYoUG9ydFAsIHRwLCAoc3RydWN0IHRlcm1pb3MgKikgYXJnLCAxKTsKLQkJaW9jdGxfcHJvY2Vzc2VkKys7Ci0JCWJyZWFrOwotCX0KLQotCS8qCi0JICoqIElmIGl0cyBhbnkgb2YgdGhlIGNvbW1hbmRzIHRoYXQgcmVxdWlyZSB0aGUgcG9ydCB0byBiZSBpbiB0aGUKLQkgKiogbm9uLWJ1c3kgc3RhdGUgd2FpdCB1bnRpbCBhbGwgb3V0cHV0IGhhcyBkcmFpbmVkCi0JICovCi0JaWYgKCFpb2N0bF9wcm9jZXNzZWQpCi0JCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgVENTRVRBVzoKLQkJY2FzZSBUQ1NFVEFGOgotCQljYXNlIFRDU0VUQToKLQkJY2FzZSBUQ1NCUks6Ci0jZGVmaW5lIE9MRF9QT1NJWCAoJ3gnIDw8IDgpCi0jZGVmaW5lIE9MRF9QT1NJWF9TRVRBIChPTERfUE9TSVggfCAyKQotI2RlZmluZSBPTERfUE9TSVhfU0VUQVcgKE9MRF9QT1NJWCB8IDMpCi0jZGVmaW5lIE9MRF9QT1NJWF9TRVRBRiAoT0xEX1BPU0lYIHwgNCkKLSNkZWZpbmUgTkVXX1BPU0lYICgoJ2knIDw8IDI0KSB8ICgnWCcgPDwgMTYpKQotI2RlZmluZSBORVdfUE9TSVhfU0VUQSAoTkVXX1BPU0lYIHwgMikKLSNkZWZpbmUgTkVXX1BPU0lYX1NFVEFXIChORVdfUE9TSVggfCAzKQotI2RlZmluZSBORVdfUE9TSVhfU0VUQUYgKE5FV19QT1NJWCB8IDQpCi0JCWNhc2UgT0xEX1BPU0lYX1NFVEE6Ci0JCWNhc2UgT0xEX1BPU0lYX1NFVEFXOgotCQljYXNlIE9MRF9QT1NJWF9TRVRBRjoKLQkJY2FzZSBORVdfUE9TSVhfU0VUQToKLQkJY2FzZSBORVdfUE9TSVhfU0VUQVc6Ci0JCWNhc2UgTkVXX1BPU0lYX1NFVEFGOgotI2lmZGVmIFRJT0NTRVRQCi0JCWNhc2UgVElPQ1NFVFA6Ci0jZW5kaWYKLQkJY2FzZSBUSU9DU0VURDoKLQkJY2FzZSBUSU9DU0VUTjoKLQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJ3YWl0IGZvciBub24tQlVTWSwgc2VtYXBob3JlIHNldFxuIik7Ci0JCQkvKgotCQkJICoqIFdhaXQgZm9yIGRyYWluIGhlcmUsIGF0IGxlYXN0IGFzIGZhciBhcyB0aGUgZG91YmxlIGJ1ZmZlcgotCQkJICoqIGJlaW5nIGVtcHR5LgotCQkJICovCi0JCQkvKiBYWFggRG9lcyB0aGUgYWJvdmUgY29tbWVudCBtZWFuIHRoYXQgdGhpcyBoYXMKLQkJCSAgIHN0aWxsIHRvIGJlIGltcGxlbWVudGVkPyAtLSBSRVcgKi8KLQkJCS8qIFhYWCBJcyB0aGUgbG9ja2luZyBPSyB0b2dldGhlciB3aXRoIGxvY2tpbmcKLQkJCSAgIGluIHR4ZW5hYmxlPyAoRGVhZGxvY2s/KSAtLSBSRVcgKi8KLQotCQkJUklPVHhFbmFibGUoKGNoYXIgKikgUG9ydFApOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0Jb2xkX2NmbGFnID0gdHAtPnRtLmNfY2ZsYWc7Ci0Jb2xkX2lmbGFnID0gdHAtPnRtLmNfaWZsYWc7Ci0Jb2xkX29mbGFnID0gdHAtPnRtLmNfb2ZsYWc7Ci0Jb2xkY29vayA9IFBvcnRQLT5Db29rTW9kZTsKLQotCWlmIChwLT5SSU9IYWx0ZWQpIHsKLQkJUklPQ2xlYXJVcChQb3J0UCk7Ci0JCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQlwc2V0ZXJyKEVJTyk7Ci0JCXJldHVybiAwOwotCX0KLQotCVBvcnRQLT5GbHVzaENtZEJvZGdlID0gMDsKLQotCS8qCi0JICoqIElmIHRoZSBwb3J0IGlzIGxvY2tlZCwgYW5kIGl0IGlzIHJlY29uZmlndXJlZCwgd2Ugd2FudAotCSAqKiB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZiB0aGUgdHR5IHN0cnVjdHVyZSBzbyB0aGUgY2hhbmdlIGlzIE5PVAotCSAqKiBtYWRlLgotCSAqLwotCWlmIChQb3J0UC0+TG9jaykgewotCQl0cC0+dG0uY19pZmxhZyA9IFBvcnRQLT5TdG9yZWRUdHkuaWZsYWc7Ci0JCXRwLT50bS5jX29mbGFnID0gUG9ydFAtPlN0b3JlZFR0eS5vZmxhZzsKLQkJdHAtPnRtLmNfY2ZsYWcgPSBQb3J0UC0+U3RvcmVkVHR5LmNmbGFnOwotCQl0cC0+dG0uY19sZmxhZyA9IFBvcnRQLT5TdG9yZWRUdHkubGZsYWc7Ci0JCXRwLT50bS5jX2xpbmUgPSBQb3J0UC0+U3RvcmVkVHR5LmxpbmU7Ci0JCWZvciAoaSA9IDA7IGkgPCBOQ0MgKyAxOyBpKyspCi0JCQl0cC0+dG0uY19jY1tpXSA9IFBvcnRQLT5TdG9yZWRUdHkuY2NbaV07Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICoqIElmIHRoZSBwb3J0IGlzIHNldCB0byBzdG9yZSB0aGUgcGFyYW1ldGVycywgYW5kIGl0IGlzCi0JCSAqKiByZWNvbmZpZ3VyZWQsIHdlIHdhbnQgdG8gc2F2ZSB0aGUgY3VycmVudCB0dHkgc3RydWN0IHNvIGl0Ci0JCSAqKiBtYXkgYmUgcmVzdG9yZWQgb24gdGhlIG5leHQgb3Blbi4KLQkJICovCi0JCWlmIChQb3J0UC0+U3RvcmUpIHsKLQkJCVBvcnRQLT5TdG9yZWRUdHkuaWZsYWcgPSB0cC0+dG0uY19pZmxhZzsKLQkJCVBvcnRQLT5TdG9yZWRUdHkub2ZsYWcgPSB0cC0+dG0uY19vZmxhZzsKLQkJCVBvcnRQLT5TdG9yZWRUdHkuY2ZsYWcgPSB0cC0+dG0uY19jZmxhZzsKLQkJCVBvcnRQLT5TdG9yZWRUdHkubGZsYWcgPSB0cC0+dG0uY19sZmxhZzsKLQkJCVBvcnRQLT5TdG9yZWRUdHkubGluZSA9IHRwLT50bS5jX2xpbmU7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgTkNDICsgMTsgaSsrKQotCQkJCVBvcnRQLT5TdG9yZWRUdHkuY2NbaV0gPSB0cC0+dG0uY19jY1tpXTsKLQkJfQotCX0KLQotCWNoYW5nZWQgPSAodHAtPnRtLmNfY2ZsYWcgIT0gb2xkX2NmbGFnKSB8fCAodHAtPnRtLmNfaWZsYWcgIT0gb2xkX2lmbGFnKSB8fCAodHAtPnRtLmNfb2ZsYWcgIT0gb2xkX29mbGFnKTsKLQotCVBvcnRQLT5Db29rTW9kZSA9IFJJT0Nvb2tNb2RlKHRwKTsJLyogU2V0IG5ldyBjb29raW5nIG1vZGUgKi8KLQotCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJSSU9Jb2N0bCBjaGFuZ2VkICVkIG5ld2Nvb2sgJWQgb2xkY29vayAlZFxuIiwgY2hhbmdlZCwgUG9ydFAtPkNvb2tNb2RlLCBvbGRjb29rKTsKLQotI2lmZGVmIE1PREVNX1NVUFBPUlQKLQkvKgotCSAqKiBrbHVkZ2UgdG8gZm9yY2UgQ0FSUl9PTiBpZiBDTE9DQUwgc2V0Ci0JICovCi0JaWYgKCh0cC0+dG0uY19jZmxhZyAmIENMT0NBTCkgfHwgKFBvcnRQLT5Nb2RlbVN0YXRlICYgTVNWUjFfQ0QpKSB7Ci0JCXRwLT50bS5jX3N0YXRlIHw9IENBUlJfT047Ci0JCXdha2V1cCgoY2FkZHJfdCkgJiB0cC0+dG0uY19jYW5xKTsKLQl9Ci0jZW5kaWYKLQotCWlmIChwLT5SSU9IYWx0ZWQpIHsKLQkJUklPQ2xlYXJVcChQb3J0UCk7Ci0JCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQlwc2V0ZXJyKEVJTyk7Ci0JCXJldHVybiAwOwotCX0KLQkvKgotCSAqKiBSZS1jb25maWd1cmUgaWYgbW9kZXMgb3IgY29va2luZyBoYXZlIGNoYW5nZWQKLQkgKi8KLQlpZiAoY2hhbmdlZCB8fCBvbGRjb29rICE9IFBvcnRQLT5Db29rTW9kZSB8fCAoaW9jdGxfcHJvY2Vzc2VkKSkgewotCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIklvY3RsIGNoYW5naW5nIHRoZSBQT1JUIHNldHRpbmdzXG4iKTsKLQkJUklPUGFyYW0oUG9ydFAsIENPTkZJRywgTW9kZW0sIE9LX1RPX1NMRUVQKTsKLQkJcmlvX3NwaW5fbG9ja19pcnFzYXZlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCX0KLQotCWlmIChwLT5SSU9IYWx0ZWQpIHsKLQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCVJJT0NsZWFyVXAoUG9ydFApOwotCQlwc2V0ZXJyKEVJTyk7Ci0JCXJldHVybiAwOwotCX0KLQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLQl0dHlzZXRoIC0tIHNldCBoYXJkd2FyZSBkZXBlbmRlbnQgdHR5IHNldHRpbmdzCi0qLwotdm9pZCB0dHlzZXRoKFBvcnRQLCBzLCBzZykKLXN0cnVjdCBQb3J0ICpQb3J0UDsKLXN0cnVjdCB0dHlzdGF0aWNzICpzOwotc3RydWN0IG9sZF9zZ3R0eWIgKnNnOwotewotCXN0cnVjdCBvbGRfc2d0dHliICp0c2c7Ci0Jc3RydWN0IHRlcm1pb3MgKnRwID0gJnMtPnRtOwotCi0JdHNnID0gJnMtPnNnOwotCi0JaWYgKHNnLT5zZ19mbGFncyAmIChFVkVOUCB8IE9ERFApKSB7Ci0JCXRwLT5jX2NmbGFnICY9IFBBUkVOQjsKLQkJaWYgKHNnLT5zZ19mbGFncyAmIEVWRU5QKSB7Ci0JCQlpZiAoc2ctPnNnX2ZsYWdzICYgT0REUCkgewotCQkJCXRwLT5jX2NmbGFnICY9IFZfQ1M3OwotCQkJCXRwLT5jX2NmbGFnICY9IH5QQVJFTkI7Ci0JCQl9IGVsc2UgewotCQkJCXRwLT5jX2NmbGFnICY9IFZfQ1M3OwotCQkJCXRwLT5jX2NmbGFnICY9IFBBUkVOQjsKLQkJCQl0cC0+Y19jZmxhZyAmPSBQQVJPREQ7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoc2ctPnNnX2ZsYWdzICYgT0REUCkgewotCQkJdHAtPmNfY2ZsYWcgJj0gVl9DUzc7Ci0JCQl0cC0+Y19jZmxhZyAmPSBQQVJFTkI7Ci0JCQl0cC0+Y19jZmxhZyAmPSBQQVJPREQ7Ci0JCX0gZWxzZSB7Ci0JCQl0cC0+Y19jZmxhZyAmPSBWX0NTNzsKLQkJCXRwLT5jX2NmbGFnICY9IFBBUkVOQjsKLQkJfQotCX0KLS8qCi0gKiBVc2UgaXNwZWVkIGFzIHRoZSBkZXNpcmVkIHNwZWVkLiAgTW9zdCBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgaGFuZGxlIAotICogc2VwYXJhdGUgaW5wdXQgYW5kIG91dHB1dCBzcGVlZHMgdmVyeSB3ZWxsLiBJZiB0aGUgUklPIGhhbmRsZXMgdGhpcywgCi0gKiBJIHdpbGwgaGF2ZSB0byB1c2Ugc2VwYXJhdGUgc2V0cyBvZiBmbGFncyB0byBzdG9yZSB0aGVtIGluIHRoZSAKLSAqIFBvcnQgc3RydWN0dXJlLgotICovCi0JaWYgKCFzZy0+c2dfb3NwZWVkKQotCQlzZy0+c2dfb3NwZWVkID0gc2ctPnNnX2lzcGVlZDsKLQllbHNlCi0JCXNnLT5zZ19pc3BlZWQgPSBzZy0+c2dfb3NwZWVkOwotCWlmIChzZy0+c2dfaXNwZWVkID4gVl9FWFRCKQotCQlzZy0+c2dfaXNwZWVkID0gVl9FWFRCOwotCWlmIChzZy0+c2dfaXNwZWVkIDwgVl9CMCkKLQkJc2ctPnNnX2lzcGVlZCA9IFZfQjA7Ci0JKnRzZyA9ICpzZzsKLQl0cC0+Y19jZmxhZyA9ICh0cC0+Y19jZmxhZyAmIH5WX0NCQVVEKSB8IGNvbnZfYnZbKGludCkgc2ctPnNnX2lzcGVlZF07Ci19Ci0KLS8qCi0JdHR5c2V0aF9wdiAtLSBzZXQgaGFyZHdhcmUgZGVwZW5kZW50IHR0eSBzZXR0aW5ncyB1c2luZyBlaXRoZXIgdGhlCi0JCQlQT1NJWCB0ZXJtaW9zIHN0cnVjdHVyZSBvciB0aGUgU3lzdGVtIFYgdGVybWlvIHN0cnVjdHVyZS4KLQkJCQlzeXN2ID0gMCA9PiAoUE9TSVgpOgkgc3RydWN0IHRlcm1pb3MgKnNnCi0JCQkJc3lzdiAhPSAwID0+IChTeXN0ZW0gVik6IHN0cnVjdCB0ZXJtaW8gKnNnCi0qLwotc3RhdGljIHZvaWQgdHR5c2V0aF9wdihQb3J0UCwgcywgc2csIHN5c3YpCi1zdHJ1Y3QgUG9ydCAqUG9ydFA7Ci1zdHJ1Y3QgdHR5c3RhdGljcyAqczsKLXN0cnVjdCB0ZXJtaW9zICpzZzsKLWludCBzeXN2OwotewotCWludCBzcGVlZDsKLQl1bnNpZ25lZCBjaGFyIGNzaXplOwotCXVuc2lnbmVkIGNoYXIgY3JlYWQ7Ci0JdW5zaWduZWQgaW50IGxjcl9mbGFnczsKLQlpbnQgcHM7Ci0KLQlpZiAoc3lzdikgewotCQkvKiBzZyBwb2ludHMgdG8gYSBTeXN0ZW0gViB0ZXJtaW8gc3RydWN0dXJlICovCi0JCWNzaXplID0gKChzdHJ1Y3QgdGVybWlvICopIHNnKS0+Y19jZmxhZyAmIENTSVpFOwotCQljcmVhZCA9ICgoc3RydWN0IHRlcm1pbyAqKSBzZyktPmNfY2ZsYWcgJiBDUkVBRDsKLQkJc3BlZWQgPSBjb252X3ZiWygoc3RydWN0IHRlcm1pbyAqKSBzZyktPmNfY2ZsYWcgJiBWX0NCQVVEXTsKLQl9IGVsc2UgewotCQkvKiBzZyBwb2ludHMgdG8gYSBQT1NJWCB0ZXJtaW9zIHN0cnVjdHVyZSAqLwotCQljc2l6ZSA9IHNnLT5jX2NmbGFnICYgQ1NJWkU7Ci0JCWNyZWFkID0gc2ctPmNfY2ZsYWcgJiBDUkVBRDsKLQkJc3BlZWQgPSBjb252X3ZiW3NnLT5jX2NmbGFnICYgVl9DQkFVRF07Ci0JfQotCWlmIChzLT5zZy5zZ19pc3BlZWQgIT0gc3BlZWQgfHwgcy0+c2cuc2dfb3NwZWVkICE9IHNwZWVkKSB7Ci0JCXMtPnNnLnNnX2lzcGVlZCA9IHNwZWVkOwotCQlzLT5zZy5zZ19vc3BlZWQgPSBzcGVlZDsKLQkJcy0+dG0uY19jZmxhZyA9IChzLT50bS5jX2NmbGFnICYgflZfQ0JBVUQpIHwgY29udl9idlsoaW50KSBzLT5zZy5zZ19pc3BlZWRdOwotCX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW93aW5pZi5oIGIvZHJpdmVycy9jaGFyL3Jpby9yaW93aW5pZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODAyZDc1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvd2luaWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCQkJCQkJCQkJKi8KLS8qCVRpdGxlCQk6CVJJTyBTaGFyZWQgTWVtb3J5IFdpbmRvdyBJbnRlZmFjZQkqLwotLyoJCQkJCQkJCQkqLwotLyoJQXV0aG9yCQk6CU4uUC5WYXNzYWxsbwkJCQkqLwotLyoJCQkJCQkJCQkqLwotLyoJQ3JlYXRpb24JOgk3dGggSnVuZSAxOTk5CQkJCSovCi0vKgkJCQkJCQkJCSovCi0vKglWZXJzaW9uCQk6CTEuMC4wCQkJCQkqLwotLyoJCQkJCQkJCQkqLwotLyoJQ29weXJpZ2h0CToJKGMpIFNwZWNpYWxpeCBJbnRlcm5hdGlvbmFsIEx0ZC4gMTk5OQkqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgkJCQkJCQkJCSovCi0vKglEZXNjcmlwdGlvbgk6CVByb3RvdHlwZXMsIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCSovCi0vKgkJCQlkZXNjcmliaW5nIFJJTyBob3N0IGNhcmQgc2hhcmVkCW1lbW9yeQkqLwotLyoJCQkJd2luZG93IGludGVyZmFjZSBzdHJ1Y3R1cmVzOgkJKi8KLS8qCQkJCQlQQVJNTUFQCQkJCSovCi0vKgkJCQkJUlVQCQkJCSovCi0vKgkJCQkJUEhCCQkJCSovCi0vKgkJCQkJTFBCCQkJCSovCi0vKgkJCQkJUEtUCQkJCSovCi0vKgkJCQkJCQkJCSovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBIaXN0b3J5Li4uCi0KLTEuMC4wCTA3LzA2Lzk5IE5QVglDcmVhdGlvbi4gKGJhc2VkIG9uIFBBUk1NQVAuSCkKLQotKi8KLQotI2lmbmRlZglfcmlvd2luaWZfaAkJLyogSWYgUklPV0lORElGLkggbm90IGFscmVhZHkgZGVmaW5lZCAqLwotI2RlZmluZQlfcmlvd2luaWZfaCAgICAxCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIEdlbmVyYWwgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUJVFBOVUxMCQkoKF91MTYpKDB4ODAwMCkpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIFBBUk1fTUFQICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoZSBQQVJNX01BUCBzdHJ1Y3R1cmUgZGVmaW5lcyBnbG9iYWwgdmFsdWVzIHJlbGF0aW5nIHRvIHRoZSBIb3N0IENhcmQgLyBSVEEKLSAgIGFuZCBpcyB0aGUgbWFpbiBzdHJ1Y3R1cmUgZnJvbSB3aGljaCBhbGwgb3RoZXIgc3RydWN0dXJlcyBhcmUgcmVmZXJlbmNlZC4gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgX1BBUk1fTUFQIHsKLQlfdTE2IHBoYl9wdHI7CQkvKiAweDAwIFBvaW50ZXIgdG8gdGhlIFBIQiBhcnJheSAqLwotCV91MTYgcGhiX251bV9wdHI7CS8qIDB4MDIgUHRyIHRvIE51bWJlciBvZiBQSEIncyAqLwotCV91MTYgZnJlZV9saXN0OwkJLyogMHgwNCBGcmVlIExpc3QgcG9pbnRlciAqLwotCV91MTYgZnJlZV9saXN0X2VuZDsJLyogMHgwNiBGcmVlIExpc3QgRW5kIHBvaW50ZXIgKi8KLQlfdTE2IHFfZnJlZV9saXN0X3B0cjsJLyogMHgwOCBQdHIgdG8gUV9CVUYgdmFyaWFibGUgKi8KLQlfdTE2IHVuaXRfaWRfcHRyOwkvKiAweDBBIFVuaXQgSWQgKi8KLQlfdTE2IGxpbmtfc3RyX3B0cjsJLyogMHgwQyBMaW5rIFN0cnVjdHVyZSBBcnJheSAqLwotCV91MTYgYm9vdGxvYWRlcl8xOwkvKiAweDBFIDFzdCBTdGFnZSBCb290IExvYWRlciAqLwotCV91MTYgYm9vdGxvYWRlcl8yOwkvKiAweDEwIDJuZCBTdGFnZSBCb290IExvYWRlciAqLwotCV91MTYgcG9ydF9yb3V0ZV9tYXBfcHRyOwkvKiAweDEyIFBvcnQgUm91dGUgTWFwICovCi0JX3UxNiByb3V0ZV9wdHI7CQkvKiAweDE0IFJvdXRlIE1hcCAqLwotCV91MTYgbWFwX3ByZXNlbnQ7CS8qIDB4MTYgUm91dGUgTWFwIHByZXNlbnQgKi8KLQlfdTE2IHBrdF9udW07CQkvKiAweDE4IFRvdGFsIG51bWJlciBvZiBwYWNrZXRzICovCi0JX3UxNiBxX251bTsJCS8qIDB4MUEgVG90YWwgbnVtYmVyIG9mIFEgcGFja2V0cyAqLwotCV91MTYgYnVmZmVyc19wZXJfcG9ydDsJLyogMHgxQyBOdW1iZXIgb2YgYnVmZmVycyBwZXIgcG9ydCAqLwotCV91MTYgaGVhcF9zaXplOwkJLyogMHgxRSBJbml0aWFsIHNpemUgb2YgaGVhcCAqLwotCV91MTYgaGVhcF9sZWZ0OwkJLyogMHgyMCBDdXJyZW50IEhlYXAgbGVmdCAqLwotCV91MTYgZXJyb3I7CQkvKiAweDIyIEVycm9yIGNvZGUgKi8KLQlfdTE2IHR4X21heDsJCS8qIDB4MjQgTWF4IG51bWJlciBvZiB0eCBwa3RzIHBlciBwaGIgKi8KLQlfdTE2IHJ4X21heDsJCS8qIDB4MjYgTWF4IG51bWJlciBvZiByeCBwa3RzIHBlciBwaGIgKi8KLQlfdTE2IHJ4X2xpbWl0OwkJLyogMHgyOCBGb3IgaGlnaCAvIGxvdyB3YXRlcm1hcmtzICovCi0JX3UxNiBsaW5rczsJCS8qIDB4MkEgTGlua3MgdG8gdXNlICovCi0JX3UxNiB0aW1lcjsJCS8qIDB4MkMgSW50ZXJydXB0cyBwZXIgc2Vjb25kICovCi0JX3UxNiBydXBzOwkJLyogMHgyRSBQb2ludGVyIHRvIHRoZSBSVVBzICovCi0JX3UxNiBtYXhfcGhiOwkJLyogMHgzMCBNb3N0bHkgZm9yIGRlYnVnZ2luZyAqLwotCV91MTYgbGl2aW5nOwkJLyogMHgzMiBKdXN0IGluY3JlbWVudHMhISAqLwotCV91MTYgaW5pdF9kb25lOwkJLyogMHgzNCBJbml0aWFsaXNhdGlvbiBvdmVyICovCi0JX3UxNiBib290aW5nX2xpbms7CS8qIDB4MzYgKi8KLQlfdTE2IGlkbGVfY291bnQ7CS8qIDB4MzggSWRsZSB0aW1lIGNvdW50ZXIgKi8KLQlfdTE2IGJ1c3lfY291bnQ7CS8qIDB4M0EgQnVzeSBjb3VudGVyICovCi0JX3UxNiBpZGxlX2NvbnRyb2w7CS8qIDB4M0MgQ29udHJvbCBJZGxlIFByb2Nlc3MgKi8KLQlfdTE2IHR4X2ludHI7CQkvKiAweDNFIFRYIGludGVycnVwdCBwZW5kaW5nICovCi0JX3UxNiByeF9pbnRyOwkJLyogMHg0MCBSWCBpbnRlcnJ1cHQgcGVuZGluZyAqLwotCV91MTYgcnVwX2ludHI7CQkvKiAweDQyIFJVUCBpbnRlcnJ1cHQgcGVuZGluZyAqLwotCi19IFBBUk1fTUFQOwotCi0vKiBTYW1lIHRoaW5nIGFnYWluLCBidXQgZGVmaW5lZCBhcyBvZmZzZXRzLi4uICovCi0KLSNkZWZpbmUJUE1fcGhiX3B0cgkJMHgwMAkvKiAweDAwIFBvaW50ZXIgdG8gdGhlIFBIQiBhcnJheSAqLwotI2RlZmluZQlQTV9waGJfbnVtX3B0cgkJMHgwMgkvKiAweDAyIFB0ciB0byBOdW1iZXIgb2YgUEhCJ3MgKi8KLSNkZWZpbmUJUE1fZnJlZV9saXN0CQkweDA0CS8qIDB4MDQgRnJlZSBMaXN0IHBvaW50ZXIgKi8KLSNkZWZpbmUJUE1fZnJlZV9saXN0X2VuZAkweDA2CS8qIDB4MDYgRnJlZSBMaXN0IEVuZCBwb2ludGVyICovCi0jZGVmaW5lCVBNX3FfZnJlZV9saXN0X3B0cgkweDA4CS8qIDB4MDggUHRyIHRvIFFfQlVGIHZhcmlhYmxlICovCi0jZGVmaW5lCVBNX3VuaXRfaWRfcHRyCQkweDBBCS8qIDB4MEEgVW5pdCBJZCAqLwotI2RlZmluZQlQTV9saW5rX3N0cl9wdHIJCTB4MEMJLyogMHgwQyBMaW5rIFN0cnVjdHVyZSBBcnJheSAqLwotI2RlZmluZQlQTV9ib290bG9hZGVyXzEJCTB4MEUJLyogMHgwRSAxc3QgU3RhZ2UgQm9vdCBMb2FkZXIgKi8KLSNkZWZpbmUJUE1fYm9vdGxvYWRlcl8yCQkweDEwCS8qIDB4MTAgMm5kIFN0YWdlIEJvb3QgTG9hZGVyICovCi0jZGVmaW5lCVBNX3BvcnRfcm91dGVfbWFwX3B0cgkweDEyCS8qIDB4MTIgUG9ydCBSb3V0ZSBNYXAgKi8KLSNkZWZpbmUJUE1fcm91dGVfcHRyCQkweDE0CS8qIDB4MTQgUm91dGUgTWFwICovCi0jZGVmaW5lCVBNX21hcF9wcmVzZW50CQkweDE2CS8qIDB4MTYgUm91dGUgTWFwIHByZXNlbnQgKi8KLSNkZWZpbmUJUE1fcGt0X251bQkJMHgxOAkvKiAweDE4IFRvdGFsIG51bWJlciBvZiBwYWNrZXRzICovCi0jZGVmaW5lCVBNX3FfbnVtCQkweDFBCS8qIDB4MUEgVG90YWwgbnVtYmVyIG9mIFEgcGFja2V0cyAqLwotI2RlZmluZQlQTV9idWZmZXJzX3Blcl9wb3J0CTB4MUMJLyogMHgxQyBOdW1iZXIgb2YgYnVmZmVycyBwZXIgcG9ydCAqLwotI2RlZmluZQlQTV9oZWFwX3NpemUJCTB4MUUJLyogMHgxRSBJbml0aWFsIHNpemUgb2YgaGVhcCAqLwotI2RlZmluZQlQTV9oZWFwX2xlZnQJCTB4MjAJLyogMHgyMCBDdXJyZW50IEhlYXAgbGVmdCAqLwotI2RlZmluZQlQTV9lcnJvcgkJMHgyMgkvKiAweDIyIEVycm9yIGNvZGUgKi8KLSNkZWZpbmUJUE1fdHhfbWF4CQkweDI0CS8qIDB4MjQgTWF4IG51bWJlciBvZiB0eCBwa3RzIHBlciBwaGIgKi8KLSNkZWZpbmUJUE1fcnhfbWF4CQkweDI2CS8qIDB4MjYgTWF4IG51bWJlciBvZiByeCBwa3RzIHBlciBwaGIgKi8KLSNkZWZpbmUJUE1fcnhfbGltaXQJCTB4MjgJLyogMHgyOCBGb3IgaGlnaCAvIGxvdyB3YXRlcm1hcmtzICovCi0jZGVmaW5lCVBNX2xpbmtzCQkweDJBCS8qIDB4MkEgTGlua3MgdG8gdXNlICovCi0jZGVmaW5lCVBNX3RpbWVyCQkweDJDCS8qIDB4MkMgSW50ZXJydXB0cyBwZXIgc2Vjb25kICovCi0jZGVmaW5lCVBNX3J1cHMJCQkweDJFCS8qIDB4MkUgUG9pbnRlciB0byB0aGUgUlVQcyAqLwotI2RlZmluZQlQTV9tYXhfcGhiCQkweDMwCS8qIDB4MzAgTW9zdGx5IGZvciBkZWJ1Z2dpbmcgKi8KLSNkZWZpbmUJUE1fbGl2aW5nCQkweDMyCS8qIDB4MzIgSnVzdCBpbmNyZW1lbnRzISEgKi8KLSNkZWZpbmUJUE1faW5pdF9kb25lCQkweDM0CS8qIDB4MzQgSW5pdGlhbGlzYXRpb24gb3ZlciAqLwotI2RlZmluZQlQTV9ib290aW5nX2xpbmsJCTB4MzYJLyogMHgzNiAqLwotI2RlZmluZQlQTV9pZGxlX2NvdW50CQkweDM4CS8qIDB4MzggSWRsZSB0aW1lIGNvdW50ZXIgKi8KLSNkZWZpbmUJUE1fYnVzeV9jb3VudAkJMHgzQQkvKiAweDNBIEJ1c3kgY291bnRlciAqLwotI2RlZmluZQlQTV9pZGxlX2NvbnRyb2wJCTB4M0MJLyogMHgzQyBDb250cm9sIElkbGUgUHJvY2VzcyAqLwotI2RlZmluZQlQTV90eF9pbnRyCQkweDNFCS8qIDB4NEUgVFggaW50ZXJydXB0IHBlbmRpbmcgKi8KLSNkZWZpbmUJUE1fcnhfaW50cgkJMHg0MAkvKiAweDQwIFJYIGludGVycnVwdCBwZW5kaW5nICovCi0jZGVmaW5lCVBNX3J1cF9pbnRyCQkweDQyCS8qIDB4NDIgUlVQIGludGVycnVwdCBwZW5kaW5nICovCi0jZGVmaW5lCXNpemVvZl9QQVJNX01BUAkJMHg0NAkvKiBzdHJ1Y3R1cmUgc2l6ZSA9IDB4NDQgKi8KLQotLyogUEFSTV9NQVAuZXJyb3IgZGVmaW5pdGlvbnMuLi4gKi8KLSNkZWZpbmUJRV9OT19FUlJPUgkJMHgwMAotI2RlZmluZQlFX1BST0NFU1NfTk9UX0lOSVQJMHgwMQotI2RlZmluZQlFX0xJTktfVElNRU9VVAkJMHgwMgotI2RlZmluZQlFX05PX1JPVVRFCQkweDAzCi0jZGVmaW5lCUVfQ09ORlVTRUQJCTB4MDQKLSNkZWZpbmUJRV9IT01FCQkJMHgwNQotI2RlZmluZQlFX0NTVU1fRkFJTAkJMHgwNgotI2RlZmluZQlFX0RJU0NPTk5FQ1RFRAkJMHgwNwotI2RlZmluZQlFX0JBRF9SVVAJCTB4MDgKLSNkZWZpbmUJRV9OT19WSVJHSU4JCTB4MDkKLSNkZWZpbmUJRV9CT09UX1JVUF9CVVNZCQkweDEwCi0jZGVmaW5lCUVfQ0hBTkFMTE9DCQkweDgwCi0jZGVmaW5lCUVfUE9MTF9BTExPQwkJMHg4MQotI2RlZmluZQlFX0xUVFdBS0UJCTB4ODIKLSNkZWZpbmUJRV9MVFRfQUxMT0MJCTB4ODMKLSNkZWZpbmUJRV9MUlRfQUxMT0MJCTB4ODQKLSNkZWZpbmUJRV9DSVJSVVMJCTB4ODUKLSNkZWZpbmUJRV9NT05JVE9SCQkweDg2Ci0jZGVmaW5lCUVfUEhCX0FMTE9DCQkweDg3Ci0jZGVmaW5lCUVfQVJSQVlfQUxMT0MJCTB4ODgKLSNkZWZpbmUJRV9RQlVGX0FMTE9DCQkweDg5Ci0jZGVmaW5lCUVfUEtUX0FMTE9DCQkweDhhCi0jZGVmaW5lCUVfR0VUX1RYX1FfQlVGCQkweDhiCi0jZGVmaW5lCUVfR0VUX1JYX1FfQlVGCQkweDhjCi0jZGVmaW5lCUVfTUVNX09VVAkJMHg4ZAotI2RlZmluZQlFX01NVV9JTklUCQkweDhlCi0jZGVmaW5lCUVfTFRUX0lOSVQJCTB4OGYKLSNkZWZpbmUJRV9MUlRfSU5JVAkJMHg5MAotI2RlZmluZQlFX0xJTktfUlVOCQkweDkxCi0jZGVmaW5lCUVfTU9OSVRPUl9BTExPQwkJMHg5MgotI2RlZmluZQlFX01PTklUT1JfSU5JVAkJMHg5MwotI2RlZmluZQlFX1BPTExfSU5JVAkJMHg5NAotCi0vKiBQQVJNX01BUC5saW5rcyBkZWZpbml0aW9ucy4uLiAqLwotI2RlZmluZQlSSU9fTElOS19FTkFCTEUJMHg4MEZGCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgUlVQICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoZSBSVVAgKFJlbW90ZSBVbml0IFBvcnQpIHN0cnVjdHVyZSByZWxhdGVzIHRvIHRoZSBSZW1vdGUgVGVybWluYWwgQWRhcHRlcnMKLSAgIGF0dGFjaGVkIHRvIHRoZSBzeXN0ZW0gYW5kIHRoZXJlIGlzIG5vcm1hbGx5IGFuIGFycmF5IG9mIE1BWF9SVVBTICg9MTYpIHN0cnVjdHVyZXMKLSAgIGluIGEgaG9zdCBjYXJkLCBkZWZpbmVkIGJ5IFBBUk1fTUFQLT5ydXAuICovCi0KLXR5cGVkZWYgc3RydWN0IF9SVVAgewotCV91MTYgdHhwa3Q7CQkvKiAweDAwIE91dGdvaW5nIHBhY2tldCAqLwotCV91MTYgcnhwa3Q7CQkvKiAweDAyIG5jb21pbmcgcGFja2V0ICovCi0JX3UxNiBsaW5rOwkJLyogMHgwNCBXaGljaCBsaW5rIHRvIHNlbmQgcGFja2V0IGRvd24gPyAqLwotCV91OCBydXBfZGVzdF91bml0WzJdOwkvKiAweDA2IERlc3RpbmF0aW9uIFVuaXQgKi8KLQlfdTE2IGhhbmRzaGFrZTsJCS8qIDB4MDggSGFuZHNoYWtpbmcgKi8KLQlfdTE2IHRpbWVvdXQ7CQkvKiAweDBBIFRpbWVvdXQgKi8KLQlfdTE2IHN0YXR1czsJCS8qIDB4MEMgU3RhdHVzICovCi0JX3UxNiB0eGNvbnRyb2w7CQkvKiAweDBFIFRyYW5zbWl0IGNvbnRyb2wgKi8KLQlfdTE2IHJ4Y29udHJvbDsJCS8qIDB4MTAgUmVjZWl2ZSBjb250cm9sICovCi0KLX0gUlVQOwotCi0vKiBTYW1lIHRoaW5nIGFnYWluLCBidXQgZGVmaW5lZCBhcyBvZmZzZXRzLi4uICovCi0KLSNkZWZpbmUJUlVQX3R4cGt0CQkweDAwCS8qIDB4MDAgT3V0Z29pbmcgcGFja2V0ICovCi0jZGVmaW5lCVJVUF9yeHBrdAkJMHgwMgkvKiAweDAyIEluY29taW5nIHBhY2tldCAqLwotI2RlZmluZQlSVVBfbGluawkJMHgwNAkvKiAweDA0IFdoaWNoIGxpbmsgdG8gc2VuZCBwYWNrZXQgZG93biA/ICovCi0jZGVmaW5lCVJVUF9ydXBfZGVzdF91bml0CTB4MDYJLyogMHgwNiBEZXN0aW5hdGlvbiBVbml0ICovCi0jZGVmaW5lCVJVUF9oYW5kc2hha2UJCTB4MDgJLyogMHgwOCBIYW5kc2hha2luZyAqLwotI2RlZmluZQlSVVBfdGltZW91dAkJMHgwQQkvKiAweDBBIFRpbWVvdXQgKi8KLSNkZWZpbmUJUlVQX3N0YXR1cwkJMHgwQwkvKiAweDBDIFN0YXR1cyAqLwotI2RlZmluZQlSVVBfdHhjb250cm9sCQkweDBFCS8qIDB4MEUgVHJhbnNtaXQgY29udHJvbCAqLwotI2RlZmluZQlSVVBfcnhjb250cm9sCQkweDEwCS8qIDB4MTAgUmVjZWl2ZSBjb250cm9sICovCi0jZGVmaW5lCXNpemVvZl9SVVAJCTB4MTIJLyogc3RydWN0dXJlIHNpemUgPSAweDEyICovCi0KLSNkZWZpbmUgTUFYX1JVUAkJCTE2Ci0KLS8qIFJVUC50eGNvbnRyb2wgZGVmaW5pdGlvbnMuLi4gKi8KLSNkZWZpbmUJVFhfUlVQX0lOQUNUSVZFCQkwCS8qIE5vdGhpbmcgdG8gdHJhbnNtaXQgKi8KLSNkZWZpbmUJVFhfUEFDS0VUX1JFQURZCQkxCS8qIFRyYW5zbWl0IHBhY2tldCByZWFkeSAqLwotI2RlZmluZQlUWF9MT0NLX1JVUAkJMgkvKiBUcmFuc21pdCBzaWRlIGxvY2tlZCAqLwotCi0vKiBSVVAudHhjb250cm9sIGRlZmluaXRpb25zLi4uICovCi0jZGVmaW5lCVJYX1JVUF9JTkFDVElWRQkJMAkvKiBOb3RoaW5nIHJlY2VpdmVkICovCi0jZGVmaW5lCVJYX1BBQ0tFVF9SRUFEWQkJMQkvKiBQYWNrZXQgcmVjZWl2ZWQgKi8KLQotI2RlZmluZQlSVVBfTk9fT1dORVIJCTB4RkYJLyogUlVQIG5vdCBvd25lZCBieSBhbnkgcHJvY2VzcyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIFBIQiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGUgUEhCIChQb3J0IEhlYWRlciBCbG9jaykgc3RydWN0dXJlIHJlbGF0ZXMgdG8gdGhlIHNlcmlhbCBwb3J0cyBhdHRhY2hlZAotICAgdG8gdGhlIHN5c3RlbSBhbmQgdGhlcmUgaXMgbm9ybWFsbHkgYW4gYXJyYXkgb2YgTUFYX1BIQlMgKD0xMjgpIHN0cnVjdHVyZXMKLSAgIGluIGEgaG9zdCBjYXJkLCBkZWZpbmVkIGJ5IFBBUk1fTUFQLT5waGJfcHRyIGFuZCBQQVJNX01BUC0+cGhiX251bV9wdHIuICovCi0KLXR5cGVkZWYgc3RydWN0IF9QSEIgewotCV91MTYgc291cmNlOwkJLyogMHgwMCBMb2NhdGlvbiBvZiB0aGUgUEhCIGluIHRoZSBob3N0IGNhcmQgKi8KLQlfdTE2IGhhbmRzaGFrZTsJCS8qIDB4MDIgVXNlZCB0byBtYW5hZ2UgcmVjZWl2ZSBwYWNrZXQgZmxvdyBjb250cm9sICovCi0JX3UxNiBzdGF0dXM7CQkvKiAweDA0IEludGVybmFsIHBvcnQgdHJhbnNtaXQvcmVjZWl2ZSBzdGF0dXMgKi8KLQlfdTE2IHRpbWVvdXQ7CQkvKiAweDA2IFRpbWUgcGVyaW9kIHRvIHdhaXQgZm9yIGFuIEFDSyAqLwotCV91MTYgbGluazsJCS8qIDB4MDggVGhlIGhvc3QgbGluayBhc3NvY2lhdGVkIHdpdGggdGhlIFBIQiAqLwotCV91MTYgZGVzdGluYXRpb247CS8qIDB4MEEgTG9jYXRpb24gb2YgdGhlIHJlbW90ZSBwb3J0IG9uIHRoZSBuZXR3b3JrICovCi0KLQlfdTE2IHR4X3N0YXJ0OwkJLyogMHgwQyBmaXJzdCBlbnRyeSBpbiB0aGUgcGFja2V0IGFycmF5IGZvciB0cmFuc21pdCBwYWNrZXRzICovCi0JX3UxNiB0eF9lbmQ7CQkvKiAweDBFIGxhc3QgZW50cnkgaW4gdGhlIHBhY2tldCBhcnJheSBmb3IgdHJhbnNtaXQgcGFja2V0cyAqLwotCV91MTYgdHhfYWRkOwkJLyogMHgxMCBwb3NpdGlvbiBpbiB0aGUgcGFja2V0IGFycmF5IGZvciBuZXcgdHJhbnNtaXQgcGFja2V0cyAqLwotCV91MTYgdHhfcmVtb3ZlOwkJLyogMHgxMiBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBwYWNrZXQgcG9pbnRlciBhcnJheSAqLwotCi0JX3UxNiByeF9zdGFydDsJCS8qIDB4MTQgZmlyc3QgZW50cnkgaW4gdGhlIHBhY2tldCBhcnJheSBmb3IgcmVjZWl2ZSBwYWNrZXRzICovCi0JX3UxNiByeF9lbmQ7CQkvKiAweDE2IGxhc3QgZW50cnkgaW4gdGhlIHBhY2tldCBhcnJheSBmb3IgcmVjZWl2ZSBwYWNrZXRzICovCi0JX3UxNiByeF9hZGQ7CQkvKiAweDE4IHBvc2l0aW9uIGluIHRoZSBwYWNrZXQgYXJyYXkgZm9yIG5ldyByZWNlaXZlIHBhY2tldHMgKi8KLQlfdTE2IHJ4X3JlbW92ZTsJCS8qIDB4MUEgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgcGFja2V0IHBvaW50ZXIgYXJyYXkgKi8KLQotfSBQSEI7Ci0KLS8qIFNhbWUgdGhpbmcgYWdhaW4sIGJ1dCBkZWZpbmVkIGFzIG9mZnNldHMuLi4gKi8KLQotI2RlZmluZQlQSEJfc291cmNlCQkweDAwCS8qIDB4MDAgTG9jYXRpb24gb2YgdGhlIFBIQiBpbiB0aGUgaG9zdCBjYXJkICovCi0jZGVmaW5lCVBIQl9oYW5kc2hha2UJCTB4MDIJLyogMHgwMiBVc2VkIHRvIG1hbmFnZSByZWNlaXZlIHBhY2tldCBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUJUEhCX3N0YXR1cwkJMHgwNAkvKiAweDA0IEludGVybmFsIHBvcnQgdHJhbnNtaXQvcmVjZWl2ZSBzdGF0dXMgKi8KLSNkZWZpbmUJUEhCX3RpbWVvdXQJCTB4MDYJLyogMHgwNiBUaW1lIHBlcmlvZCB0byB3YWl0IGZvciBhbiBBQ0sgKi8KLSNkZWZpbmUJUEhCX2xpbmsJCTB4MDgJLyogMHgwOCBUaGUgaG9zdCBsaW5rIGFzc29jaWF0ZWQgd2l0aCB0aGUgUEhCICovCi0jZGVmaW5lCVBIQl9kZXN0aW5hdGlvbgkJMHgwQQkvKiAweDBBIExvY2F0aW9uIG9mIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgbmV0d29yayAqLwotI2RlZmluZQlQSEJfdHhfc3RhcnQJCTB4MEMJLyogMHgwQyBmaXJzdCBlbnRyeSBpbiB0aGUgcGFja2V0IGFycmF5IGZvciB0cmFuc21pdCBwYWNrZXRzICovCi0jZGVmaW5lCVBIQl90eF9lbmQJCTB4MEUJLyogMHgwRSBsYXN0IGVudHJ5IGluIHRoZSBwYWNrZXQgYXJyYXkgZm9yIHRyYW5zbWl0IHBhY2tldHMgKi8KLSNkZWZpbmUJUEhCX3R4X2FkZAkJMHgxMAkvKiAweDEwIHBvc2l0aW9uIGluIHRoZSBwYWNrZXQgYXJyYXkgZm9yIG5ldyB0cmFuc21pdCBwYWNrZXRzICovCi0jZGVmaW5lCVBIQl90eF9yZW1vdmUJCTB4MTIJLyogMHgxMiBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBwYWNrZXQgcG9pbnRlciBhcnJheSAqLwotI2RlZmluZQlQSEJfcnhfc3RhcnQJCTB4MTQJLyogMHgxNCBmaXJzdCBlbnRyeSBpbiB0aGUgcGFja2V0IGFycmF5IGZvciByZWNlaXZlIHBhY2tldHMgKi8KLSNkZWZpbmUJUEhCX3J4X2VuZAkJMHgxNgkvKiAweDE2IGxhc3QgZW50cnkgaW4gdGhlIHBhY2tldCBhcnJheSBmb3IgcmVjZWl2ZSBwYWNrZXRzICovCi0jZGVmaW5lCVBIQl9yeF9hZGQJCTB4MTgJLyogMHgxOCBwb3NpdGlvbiBpbiB0aGUgcGFja2V0IGFycmF5IGZvciBuZXcgcmVjZWl2ZSBwYWNrZXRzICovCi0jZGVmaW5lCVBIQl9yeF9yZW1vdmUJCTB4MUEJLyogMHgxQSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBwYWNrZXQgcG9pbnRlciBhcnJheSAqLwotI2RlZmluZQlzaXplb2ZfUEhCCQkweDFDCS8qIHN0cnVjdHVyZSBzaXplID0gMHgxQyAqLwotCi0vKiBQSEIuaGFuZHNoYWtlIGRlZmluaXRpb25zLi4uICovCi0jZGVmaW5lCVBIQl9IQU5EU0hBS0VfU0VUCTB4MDAwMQkvKiBTZXQgYnkgTFJUICovCi0jZGVmaW5lCVBIQl9IQU5EU0hBS0VfUkVTRVQJMHgwMDAyCS8qIFNldCBieSBJU1IgLyBkcml2ZXIgKi8KLSNkZWZpbmUJUEhCX0hBTkRTSEFLRV9GTEFHUwkoUEhCX0hBTkRTSEFLRV9SRVNFVHxQSEJfSEFORFNIQUtFX1NFVCkKLQkJCQkJCS8qIFJlc2V0IGJ5IGx0dCAqLwotCi0jZGVmaW5lCU1BWF9QSEIJCQkxMjgJLyogcmFuZ2UgMC0xMjcgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICBMUEIgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhlIExQQiAoTGluayBQYXJhbWV0ZXIgQmxvY2spIHN0cnVjdHVyZSByZWxhdGVzIHRvIGEgUklPIE5ldHdvcmsgTGluawotICAgYW5kIHRoZXJlIGlzIG5vcm1hbGx5IGFuIGFycmF5IG9mIE1BWF9MSU5LUyAoPTQpIHN0cnVjdHVyZXMgaW4gYSBob3N0IGNhcmQsCi0gICBkZWZpbmVkIGJ5IFBBUk1fTUFQLT5saW5rX3N0cl9wdHIuICovCi0KLXR5cGVkZWYgc3RydWN0IF9MUEIgewotCV91MTYgbGlua19udW1iZXI7CS8qIDB4MDAgTGluayBOdW1iZXIgKi8KLQlfdTE2IGluX2NoOwkJLyogMHgwMiBMaW5rIEluIENoYW5uZWwgKi8KLQlfdTE2IG91dF9jaDsJCS8qIDB4MDQgTGluayBPdXQgQ2hhbm5lbCAqLwotCV91OCBhdHRhY2hlZF9zZXJpYWxbNF07CS8qIDB4MDYgQXR0YWNoZWQgc2VyaWFsIG51bWJlciAqLwotCV91OCBhdHRhY2hlZF9ob3N0X3NlcmlhbFs0XTsJLyogMHgwQSBTZXJpYWwgbnVtYmVyIG9mIEhvc3Qgd2hvIGJvb3RlZCBvdGhlciBlbmQgKi8KLQlfdTE2IGRlc2NoZWR1bGVkOwkvKiAweDBFIEN1cnJlbnRseSBEZXNjaGVkdWxlZCAqLwotCV91MTYgc3RhdGU7CQkvKiAweDEwIEN1cnJlbnQgc3RhdGUgKi8KLQlfdTE2IHNlbmRfcG9sbDsJCS8qIDB4MTIgU2VuZCBhIFBvbGwgUGFja2V0ICovCi0JX3UxNiBsdHRfcDsJCS8qIDB4MTQgUHJvY2VzcyBEZXNjcmlwdG9yICovCi0JX3UxNiBscnRfcDsJCS8qIDB4MTYgUHJvY2VzcyBEZXNjcmlwdG9yICovCi0JX3UxNiBscnRfc3RhdHVzOwkvKiAweDE4IEN1cnJlbnQgbHJ0IHN0YXR1cyAqLwotCV91MTYgbHR0X3N0YXR1czsJLyogMHgxQSBDdXJyZW50IGx0dCBzdGF0dXMgKi8KLQlfdTE2IHRpbWVvdXQ7CQkvKiAweDFDIFRpbWVvdXQgdmFsdWUgKi8KLQlfdTE2IHRvcG9sb2d5OwkJLyogMHgxRSBUb3BvbG9neSBiaXRzICovCi0JX3UxNiBtb25fbHR0OwkJLyogMHgyMCAqLwotCV91MTYgbW9uX2xydDsJCS8qIDB4MjIgKi8KLQlfdTE2IG51bV9wa3RzOwkJLyogMHgyNCAqLwotCV91MTYgYWRkX3BhY2tldF9saXN0OwkvKiAweDI2IEFkZCBwYWNrZXRzIHRvIGhlcmUgKi8KLQlfdTE2IHJlbW92ZV9wYWNrZXRfbGlzdDsJLyogMHgyOCBTZW5kIHBhY2tldHMgZnJvbSBoZXJlICovCi0KLQlfdTE2IGxydF9mYWlsX2NoYW47CS8qIDB4MkEgTHJ0J3MgZmFpbHVyZSBjaGFubmVsICovCi0JX3UxNiBsdHRfZmFpbF9jaGFuOwkvKiAweDJDIEx0dCdzIGZhaWx1cmUgY2hhbm5lbCAqLwotCi0JUlVQIHJ1cDsJCS8qIDB4MkUgUlVQIHN0cnVjdHVyZSBmb3IgSE9TVCB0byBkcml2ZXIgY29tbXMgKi8KLQlSVVAgbGlua19ydXA7CQkvKiAweDQwIFJVUCBmb3IgdGhlIGxpbmsgKFBPTEwsIHRvcG9sb2d5IGV0Yy4pICovCi0JX3UxNiBhdHRhY2hlZF9saW5rOwkvKiAweDUyIE51bWJlciBvZiBhdHRhY2hlZCBsaW5rICovCi0JX3UxNiBjc3VtX2Vycm9yczsJLyogMHg1NCBjc3VtIGVycm9ycyAqLwotCV91MTYgbnVtX2Rpc2Nvbm5lY3RzOwkvKiAweDU2IG51bWJlciBvZiBkaXNjb25uZWN0cyAqLwotCV91MTYgbnVtX3N5bmNfcmN2ZDsJLyogMHg1OCAjIHN5bmMncyByZWNlaXZlZCAqLwotCV91MTYgbnVtX3N5bmNfcnFzdDsJLyogMHg1QSAjIHN5bmMgcmVxdWVzdHMgKi8KLQlfdTE2IG51bV90eDsJCS8qIDB4NUMgTnVtIHBrdHMgc2VudCAqLwotCV91MTYgbnVtX3J4OwkJLyogMHg1RSBOdW0gcGt0cyByZWNlaXZlZCAqLwotCV91MTYgbW9kdWxlX2F0dGFjaGVkOwkvKiAweDYwIE1vZHVsZSB0cHllcyBvZiBhdHRhY2hlZCAqLwotCV91MTYgbGVkX3RpbWVvdXQ7CS8qIDB4NjIgTEVEIHRpbWVvdXQgKi8KLQlfdTE2IGZpcnN0X3BvcnQ7CS8qIDB4NjQgRmlyc3QgcG9ydCB0byBzZXJ2aWNlICovCi0JX3UxNiBsYXN0X3BvcnQ7CQkvKiAweDY2IExhc3QgcG9ydCB0byBzZXJ2aWNlICovCi0KLX0gTFBCOwotCi0vKiBTYW1lIHRoaW5nIGFnYWluLCBidXQgZGVmaW5lZCBhcyBvZmZzZXRzLi4uICovCi0KLSNkZWZpbmUJTFBCX2xpbmtfbnVtYmVyCQkweDAwCS8qIDB4MDAgTGluayBOdW1iZXIgKi8KLSNkZWZpbmUJTFBCX2luX2NoCQkweDAyCS8qIDB4MDIgTGluayBJbiBDaGFubmVsICovCi0jZGVmaW5lCUxQQl9vdXRfY2gJCTB4MDQJLyogMHgwNCBMaW5rIE91dCBDaGFubmVsICovCi0jZGVmaW5lCUxQQl9hdHRhY2hlZF9zZXJpYWwJMHgwNgkvKiAweDA2IEF0dGFjaGVkIHNlcmlhbCBudW1iZXIgKi8KLSNkZWZpbmUJTFBCX2F0dGFjaGVkX2hvc3Rfc2VyaWFsIDB4MEEJLyogMHgwQSBTZXJpYWwgbnVtYmVyIG9mIEhvc3Qgd2hvIGJvb3RlZCBvdGhlciBlbmQgKi8KLSNkZWZpbmUJTFBCX2Rlc2NoZWR1bGVkCQkweDBFCS8qIDB4MEUgQ3VycmVudGx5IERlc2NoZWR1bGVkICovCi0jZGVmaW5lCUxQQl9zdGF0ZQkJMHgxMAkvKiAweDEwIEN1cnJlbnQgc3RhdGUgKi8KLSNkZWZpbmUJTFBCX3NlbmRfcG9sbAkJMHgxMgkvKiAweDEyIFNlbmQgYSBQb2xsIFBhY2tldCAqLwotI2RlZmluZQlMUEJfbHR0X3AJCTB4MTQJLyogMHgxNCBQcm9jZXNzIERlc2NyaXB0b3IgKi8KLSNkZWZpbmUJTFBCX2xydF9wCQkweDE2CS8qIDB4MTYgUHJvY2VzcyBEZXNjcmlwdG9yICovCi0jZGVmaW5lCUxQQl9scnRfc3RhdHVzCQkweDE4CS8qIDB4MTggQ3VycmVudCBscnQgc3RhdHVzICovCi0jZGVmaW5lCUxQQl9sdHRfc3RhdHVzCQkweDFBCS8qIDB4MUEgQ3VycmVudCBsdHQgc3RhdHVzICovCi0jZGVmaW5lCUxQQl90aW1lb3V0CQkweDFDCS8qIDB4MUMgVGltZW91dCB2YWx1ZSAqLwotI2RlZmluZQlMUEJfdG9wb2xvZ3kJCTB4MUUJLyogMHgxRSBUb3BvbG9neSBiaXRzICovCi0jZGVmaW5lCUxQQl9tb25fbHR0CQkweDIwCS8qIDB4MjAgKi8KLSNkZWZpbmUJTFBCX21vbl9scnQJCTB4MjIJLyogMHgyMiAqLwotI2RlZmluZQlMUEJfbnVtX3BrdHMJCTB4MjQJLyogMHgyNCAqLwotI2RlZmluZQlMUEJfYWRkX3BhY2tldF9saXN0CTB4MjYJLyogMHgyNiBBZGQgcGFja2V0cyB0byBoZXJlICovCi0jZGVmaW5lCUxQQl9yZW1vdmVfcGFja2V0X2xpc3QJMHgyOAkvKiAweDI4IFNlbmQgcGFja2V0cyBmcm9tIGhlcmUgKi8KLSNkZWZpbmUJTFBCX2xydF9mYWlsX2NoYW4JMHgyQQkvKiAweDJBIExydCdzIGZhaWx1cmUgY2hhbm5lbCAqLwotI2RlZmluZQlMUEJfbHR0X2ZhaWxfY2hhbgkweDJDCS8qIDB4MkMgTHR0J3MgZmFpbHVyZSBjaGFubmVsICovCi0jZGVmaW5lCUxQQl9ydXAJCQkweDJFCS8qIDB4MkUgUlVQIHN0cnVjdHVyZSBmb3IgSE9TVCB0byBkcml2ZXIgY29tbXMgKi8KLSNkZWZpbmUJTFBCX2xpbmtfcnVwCQkweDQwCS8qIDB4NDAgUlVQIGZvciB0aGUgbGluayAoUE9MTCwgdG9wb2xvZ3kgZXRjLikgKi8KLSNkZWZpbmUJTFBCX2F0dGFjaGVkX2xpbmsJMHg1MgkvKiAweDUyIE51bWJlciBvZiBhdHRhY2hlZCBsaW5rICovCi0jZGVmaW5lCUxQQl9jc3VtX2Vycm9ycwkJMHg1NAkvKiAweDU0IGNzdW0gZXJyb3JzICovCi0jZGVmaW5lCUxQQl9udW1fZGlzY29ubmVjdHMJMHg1NgkvKiAweDU2IG51bWJlciBvZiBkaXNjb25uZWN0cyAqLwotI2RlZmluZQlMUEJfbnVtX3N5bmNfcmN2ZAkweDU4CS8qIDB4NTggIyBzeW5jJ3MgcmVjZWl2ZWQgKi8KLSNkZWZpbmUJTFBCX251bV9zeW5jX3Jxc3QJMHg1QQkvKiAweDVBICMgc3luYyByZXF1ZXN0cyAqLwotI2RlZmluZQlMUEJfbnVtX3R4CQkweDVDCS8qIDB4NUMgTnVtIHBrdHMgc2VudCAqLwotI2RlZmluZQlMUEJfbnVtX3J4CQkweDVFCS8qIDB4NUUgTnVtIHBrdHMgcmVjZWl2ZWQgKi8KLSNkZWZpbmUJTFBCX21vZHVsZV9hdHRhY2hlZAkweDYwCS8qIDB4NjAgTW9kdWxlIHRweWVzIG9mIGF0dGFjaGVkICovCi0jZGVmaW5lCUxQQl9sZWRfdGltZW91dAkJMHg2MgkvKiAweDYyIExFRCB0aW1lb3V0ICovCi0jZGVmaW5lCUxQQl9maXJzdF9wb3J0CQkweDY0CS8qIDB4NjQgRmlyc3QgcG9ydCB0byBzZXJ2aWNlICovCi0jZGVmaW5lCUxQQl9sYXN0X3BvcnQJCTB4NjYJLyogMHg2NiBMYXN0IHBvcnQgdG8gc2VydmljZSAqLwotI2RlZmluZQlzaXplb2ZfTFBCCQkweDY4CS8qIHN0cnVjdHVyZSBzaXplID0gMHg2OCAqLwotCi0jZGVmaW5lCUxJTktTX1BFUl9VTklUCQk0CS8qIG51bWJlciBvZiBsaW5rcyBmcm9tIGEgaG9zdCAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICBGUkVFX0xJU1QgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBVc2VkIHRvIG92ZXJsYXkgcGFja2V0IGhlYWRlcnMgd2hlbiBhbGxvY2F0aW5nL2ZyZWVpbmcgcGFja2V0cyBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgX0ZSRUVfTElTVCB7Ci0JX3UxNiBuZXh0OwkJLyogMHgwMCBvZmZzZXQgb2YgbmV4dCBsaXN0IGl0ZW0gKi8KLQlfdTE2IHByZXY7CQkvKiAweDAyIG9mZnNldCBvZiBwcmV2aW91cyBsaXN0IGl0ZW0gKi8KLQotfSBGUkVFX0xJU1Q7Ci0KLS8qIFNhbWUgdGhpbmcgYWdhaW4sIGJ1dCBkZWZpbmVkIGFzIG9mZnNldHMuLi4gKi8KLQotI2RlZmluZQlGTF9uZXh0CQkJMHgwMAkvKiAweDAwIG9mZnNldCBvZiBuZXh0IGxpc3QgaXRlbSAqLwotI2RlZmluZQlGTF9wcmV2CQkJMHgwMgkvKiAweDAyIG9mZnNldCBvZiBwcmV2aW91cyBsaXN0IGl0ZW0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICBQS1QgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhlIFBLVCBpcyB0aGUgbWFpbiB1bml0IG9mIGNvbW11bmljYXRpb24gYmV0d2VlbiBIb3N0IENhcmRzIGFuZCBSVEFzIGFjcm9zcwotICAgdGhlIFJJTyBuZXR3b3JrLiAgKi8KLQotI2RlZmluZSBQS1RfTUFYX0RBVEFfTEVOICAgNzIJLyogU2l6ZSBvZiBwYWNrZXQgZGF0YSAqLwotCi10eXBlZGVmIHN0cnVjdCBfUEtUIHsKLQlfdTggZGVzdF91bml0OwkJLyogMHgwMCBEZXN0aW5hdGlvbiBVbml0IElkICovCi0JX3U4IGRlc3RfcG9ydDsJCS8qIDB4MDEgRGVzdGluYXRpb24gUG9ydCAqLwotCV91OCBzcmNfdW5pdDsJCS8qIDB4MDIgU291cmNlIFVuaXQgSWQgKi8KLQlfdTggc3JjX3BvcnQ7CQkvKiAweDAzIFNvdXJjZSBQb3J0ICovCi0JX3U4IGxlbjsJCS8qIDB4MDQgTGVuZ3RoIChpbiBieXRlcykgb2YgZGF0YSBmaWVsZCAqLwotCV91OCBjb250cm9sOwkJLyogMHgwNSAqLwotCV91OCBkYXRhW1BLVF9NQVhfREFUQV9MRU5dOwkvKiAweDA2IEFjdHVhbCBkYXRhICovCi0JX3UxNiBjc3VtOwkJLyogMHg0RSBDLVNVTSAqLwotCi19IFBLVDsKLQotLyogU2FtZSB0aGluZyBhZ2FpbiwgYnV0IGRlZmluZWQgYXMgb2Zmc2V0cy4uLiAqLwotCi0jZGVmaW5lCVBLVF9kZXN0X3VuaXQJCTB4MDAJLyogMHgwMCBEZXN0aW5hdGlvbiBVbml0IElkICovCi0jZGVmaW5lCVBLVF9kZXN0X3BvcnQJCTB4MDEJLyogMHgwMSBEZXN0aW5hdGlvbiBQb3J0ICovCi0jZGVmaW5lCVBLVF9zcmNfdW5pdAkJMHgwMgkvKiAweDAyIFNvdXJjZSBVbml0IElkICovCi0jZGVmaW5lCVBLVF9zcmNfcG9ydAkJMHgwMwkvKiAweDAzIFNvdXJjZSBQb3J0ICovCi0jZGVmaW5lCVBLVF9sZW4JCQkweDA0CS8qIDB4MDQgTGVuZ3RoIChpbiBieXRlcykgb2YgZGF0YSBmaWVsZCAqLwotI2RlZmluZQlQS1RfY29udHJvbAkJMHgwNQkvKiAweDA1ICovCi0jZGVmaW5lCVBLVF9kYXRhCQkweDA2CS8qIDB4MDYgQWN0dWFsIGRhdGEgKi8KLSNkZWZpbmUJUEtUX2NzdW0JCTB4NEUJLyogMHg0RSBDLVNVTSAqLwotI2RlZmluZQlzaXplb2ZfUEtUCQkweDUwCS8qIHN0cnVjdHVyZSBzaXplID0gMHg1MCAqLwotCi0vKiBQS1QubGVuIGRlZmluaXRpb25zLi4uICovCi0jZGVmaW5lCVBLVF9DTURfQklUCQkweDgwCi0jZGVmaW5lCVBLVF9DTURfREFUQQkJMHg4MAotI2RlZmluZQlQS1RfTEVOX01BU0sJCTB4N0YKLQotLyogUEtULmNvbnRyb2wgZGVmaW5pdGlvbnMuLi4gKi8KLSNkZWZpbmUJUEtUX0FDSwkJCTB4NDAKLSNkZWZpbmUJUEtUX1RHTAkJCTB4MjAKLSNkZWZpbmUJREFUQV9XTkRXCQkweDEwCi0jZGVmaW5lCVBLVF9UVExfTUFTSwkJMHgwRgotI2RlZmluZQlNQVhfVFRMCQkJMHgwRgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICBDb250cm9sIFBhY2tldHMgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzIGRlZmluZSB0aGUgY29udHJvbCBwYWNrZXRzIHNlbnQKLSAgIGJldHdlZW4gdGhlIGRyaXZlciBhbmQgUklPIFBvcnRzLCBSVEFzIGFuZCBIb3N0IENhcmRzLiAqLwotCi0jZGVmaW5lCVBSRV9FTVBUSVZFCQkweDgwCS8qIFByZS1lbXB0aXZlIGNvbW1hbmQgKHNlbnQgdmlhIHBvcnQncyBSVVApICovCi0KLS8qICJpbi1iYW5kIiBhbmQgInByZS1lbXB0aXZlIiBwb3J0IGNvbW1hbmRzLi4uICovCi0jZGVmaW5lCU9QRU4JCQkweDAwCS8qIERyaXZlci0+UklPIE9wZW4gYSBwb3J0ICovCi0jZGVmaW5lCUNPTkZJRwkJCTB4MDEJLyogRHJpdmVyLT5SSU8gQ29uZmlndXJlIGEgcG9ydCAqLwotI2RlZmluZQlNT1BFTgkJCTB4MDIJLyogRHJpdmVyLT5SSU8gTW9kZW0gb3BlbiAod2FpdCBmb3IgRENEKSAqLwotI2RlZmluZQlDTE9TRQkJCTB4MDMJLyogRHJpdmVyLT5SSU8gQ2xvc2UgYSBwb3J0ICovCi0jZGVmaW5lCVdGTFVTSAkJCSgweDA0fFBSRV9FTVBUSVZFKQkvKiBEcml2ZXItPlJJTyBXcml0ZSBmbHVzaCAqLwotI2RlZmluZQlSRkxVU0gJCQkoMHgwNXxQUkVfRU1QVElWRSkJLyogRHJpdmVyLT5SSU8gUmVhZCBmbHVzaCAqLwotI2RlZmluZQlSRVNVTUUJCQkoMHgwNnxQUkVfRU1QVElWRSkJLyogRHJpdmVyLT5SSU8gQmVoYXZlIGFzIGlmIFhPTiByZWNlaXZlZCAqLwotI2RlZmluZQlTQlJFQUsJCQkweDA3CS8qIERyaXZlci0+UklPIFN0YXJ0IGJyZWFrICovCi0jZGVmaW5lCUVCUkVBSwkJCTB4MDgJLyogRHJpdmVyLT5SSU8gRW5kIGJyZWFrICovCi0jZGVmaW5lCVNVU1BFTkQJCQkoMHgwOXxQUkVfRU1QVElWRSkJLyogRHJpdmVyLT5SSU8gQmVoYXZlIGFzIGlmIFhPRkYgcmVjZWl2ZWQgKi8KLSNkZWZpbmUJRkNMT1NFCQkJKDB4MEF8UFJFX0VNUFRJVkUpCS8qIERyaXZlci0+UklPIEZvcmNlIGNsb3NlICovCi0jZGVmaW5lCVhQUklOVAkJCTB4MEIJLyogRHJpdmVyLT5SSU8gWHByaW50IHBhY2tldCAqLwotI2RlZmluZQlNQklTCQkJKDB4MEN8UFJFX0VNUFRJVkUpCS8qIERyaXZlci0+UklPIFNldCBtb2RlbSBsaW5lcyAqLwotI2RlZmluZQlNQklDCQkJKDB4MER8UFJFX0VNUFRJVkUpCS8qIERyaXZlci0+UklPIENsZWFyIG1vZGVtIGxpbmVzICovCi0jZGVmaW5lCU1TRVQJCQkoMHgwRXxQUkVfRU1QVElWRSkJLyogRHJpdmVyLT5SSU8gU2V0IG1vZGVtIGxpbmVzICovCi0jZGVmaW5lCVBDTE9TRQkJCTB4MEYJLyogRHJpdmVyLT5SSU8gUHNldWRvIGNsb3NlICovCi0jZGVmaW5lCU1HRVQJCQkoMHgxMHxQUkVfRU1QVElWRSkJLyogRHJpdmVyLT5SSU8gRm9yY2UgdXBkYXRlIG9mIG1vZGVtIHN0YXR1cyAqLwotI2RlZmluZQlNRU1EVU1QCQkJKDB4MTF8UFJFX0VNUFRJVkUpCS8qIERyaXZlci0+UklPIERFQlVHIHJlcXVlc3QgZm9yIFJUQSBtZW1vcnkgKi8KLSNkZWZpbmUJUkVBRF9SRUdJU1RFUgkJKDB4MTJ8UFJFX0VNUFRJVkUpCS8qIERyaXZlci0+UklPIERFQlVHIHJlYWQgQ0QxNDAwIHJlZ2lzdGVyICovCi0KLS8qIFJlbW90ZSBVbml0IFBvcnQgKFJVUCkgcGFja2V0IGRlZmluaXRpb25zLi4uIChzcGVjaWZpZWQgaW4gUEtULmRlc3RfdW5pdCBhbmQgUEtULnNyY191bml0KSAqLwotI2RlZmluZQlTWU5DX1JVUAkJMHhGRgkvKiBEb3dubG9hZCBpbnRlcm5hbCAqLwotI2RlZmluZQlDT01NQU5EX1JVUAkJMHhGRQkvKiBDb21tYW5kIGFjay9zdGF0dXMgKi8KLSNkZWZpbmUJRVJST1JfUlVQCQkweEZECS8qIERvd25sb2FkIGludGVybmFsICovCi0jZGVmaW5lCVBPTExfUlVQCQkweEZDCS8qIERvd25sb2FkIGludGVybmFsICovCi0jZGVmaW5lCUJPT1RfUlVQCQkweEZCCS8qIFVzZWQgdG8gYm9vdCBSVEFzICovCi0jZGVmaW5lCVJPVVRFX1JVUAkJMHhGQQkvKiBVc2VkIHRvIHNwZWNpZnkgcm91dGluZy90b3BvbG9neSAqLwotI2RlZmluZQlTVEFUVVNfUlVQCQkweEY5CS8qIE5vdCB1c2VkICovCi0jZGVmaW5lCVBPV0VSX1JVUAkJMHhGOAkvKiBEb3dubG9hZCBpbnRlcm5hbCAqLwotCi0vKiBDT01NQU5EX1JVUCBkZWZpbml0aW9ucy4uLiAqLwotI2RlZmluZQlDT01QTEVURQkJKDB4MjB8UFJFX0VNUFRJVkUpCS8qIFJJTy0+RHJpdmVyIENvbW1hbmQgY29tcGxldGUgKi8KLSNkZWZpbmUJQlJFQUtfUkVDRUlWRUQJCSgweDIxfFBSRV9FTVBUSVZFKQkvKiBSSU8tPkRyaXZlciBCcmVhayByZWNlaXZlZCAqLwotI2RlZmluZQlNT0RFTV9TVEFUVVMJCSgweDIyfFBSRV9FTVBUSVZFKQkvKiBSSU8tPkRyaXZlciBNb2RlbSBzdGF0dXMgY2hhbmdlICovCi0KLS8qIEJPT1RfUlVQIGRlZmluaXRpb25zLi4uICovCi0jZGVmaW5lCUJPT1RfUkVRVUVTVAkJMHgwMAkvKiBSSU8tPkRyaXZlciBSZXF1ZXN0IGZvciBib290ICovCi0jZGVmaW5lCUJPT1RfQUJPUlQJCTB4MDEJLyogRHJpdmVyLT5SSU8gQWJvcnQgYSBib290ICovCi0jZGVmaW5lCUJPT1RfU0VRVUVOQ0UJCTB4MDIJLyogRHJpdmVyLT5SSU8gUGFja2V0IHdpdGggZmlybXdhcmUgZGV0YWlscyAqLwotI2RlZmluZQlCT09UX0NPTVBMRVRFRAkJMHgwMwkvKiBSSU8tPkRyaXZlciBCb290IGNvbXBsZXRlZCAqLwotI2RlZmluZSBJRk9BRAkJCTB4MkYJLyogRHJpdmVyLT5SSU8gU2h1dGRvd24vUmVib290IFJUQSAoRmFsbCBPdmVyIEFuZCBEaWUpICovCi0jZGVmaW5lCUlERU5USUZZCQkweDMwCS8qIERyaXZlci0+UklPIElkZW50aWZ5IFJUQSAqLwotI2RlZmluZQlaT01CSUUJCQkweDMxCS8qIERyaXZlci0+UklPIFNodXRkb3duL0ZsYXNoIExFRHMgKi8KLSNkZWZpbmUJVUZPQUQJCQkweDMyCS8qIERyaXZlci0+UklPIFNodXRkb3duL1JlYm9vdCBuZWlnaGJvdXJpbmcgUlRBICovCi0jZGVmaW5lIElXQUlUCQkJMHgzMwkvKiBEcml2ZXItPlJJTyBQYXVzZSBib290aW5nIHByb2Nlc3MgKi8KLQotLyogUk9VVEVfUlVQIGRlZmluaXRpb25zLi4uICovCi0jZGVmaW5lCVJPVVRFX1JFUVVFU1QJCTB4MDAJLyogUklPLT5Ecml2ZXIgUmVxdWVzdCBhbiBJRCAqLwotI2RlZmluZQlST1VURV9GT0FECQkweDAxCS8qIERyaXZlci0+UklPIFNodXRkb3duL3JlYm9vdCBSVEEgKi8KLSNkZWZpbmUJUk9VVEVfQUxSRUFEWQkJMHgwMgkvKiBEcml2ZXItPlJJTyBOb3QgdXNlZCAqLwotI2RlZmluZQlST1VURV9VU0VECQkweDAzCS8qIERyaXZlci0+UklPIE5vdCB1c2VkICovCi0jZGVmaW5lCVJPVVRFX0FMTE9DQVRFCQkweDA0CS8qIERyaXZlci0+UklPIEFsbG9jYXRlIFJUQSBSVVAgbnVtYmVycyAqLwotI2RlZmluZQlST1VURV9SRVFfVE9QCQkweDA1CS8qIERyaXZlci0+UklPIE5vdCB1c2VkICovCi0jZGVmaW5lIFJPVVRFX1RPUE9MT0dZCQkweDA2CS8qIFJJTy0+RHJpdmVyIFJvdXRlL1RvcG9sb2d5IHN0YXR1cyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIE9QRU4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoRHJpdmVyLT5SSU8saW4tYmFuZCkKLQotICAgU2VudCB0byBvcGVuIGEgcG9ydC4gCi0gICBTdHJ1Y3R1cmUgb2YgY29uZmlndXJhdGlvbiBpbmZvIHVzZWQgd2l0aCBPUEVOLCBDT05GSUcgYW5kIE1PUEVOIHBhY2tldHMuLi4gKi8KLQotI2RlZmluZQlQS1RfQ21kCQkJKFBLVF9EYXRhKzApCS8qIENvbW1hbmQgY29kZSAqLwotI2RlZmluZQlQS1RfQ29yMQkJKFBLVF9EYXRhKzEpCS8qIENoYW5uZWwgT3B0aW9uIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUJUEtUX0NvcjIJCShQS1RfRGF0YSsyKQkvKiBDaGFubmVsIE9wdGlvbiBSZWdpc3RlciAyICovCi0jZGVmaW5lCVBLVF9Db3I0CQkoUEtUX0RhdGErMykJLyogQ2hhbm5lbCBPcHRpb24gUmVnaXN0ZXIgNCAqLwotI2RlZmluZQlQS1RfQ29yNQkJKFBLVF9EYXRhKzQpCS8qIENoYW5uZWwgT3B0aW9uIFJlZ2lzdGVyIDUgKi8KLSNkZWZpbmUJUEtUX1R4WG9uCQkoUEtUX0RhdGErNSkJLyogVHJhbnNtaXQgWE9OIGNoYXJhY3RlciAqLwotI2RlZmluZQlQS1RfVHhYb2ZmCQkoUEtUX0RhdGErNikJLyogVHJhbnNtaXQgWE9GRiBjaGFyYWN0ZXIgKi8KLSNkZWZpbmUJUEtUX1J4WG9uCQkoUEtUX0RhdGErNykJLyogUmVjZWl2ZSBYT04gY2hhcmFjdGVyICovCi0jZGVmaW5lCVBLVF9SeFhvZmYJCShQS1RfRGF0YSs4KQkvKiBSZWNlaXZlIFhPRkYgY2hhcmFjdGVyICovCi0jZGVmaW5lCVBLVF9MbmV4dAkJKFBLVF9EYXRhKzkpCS8qIExuZXh0IGNoYXJhY3RlciAqLwotI2RlZmluZQlQS1RfVHhCYXVkCQkoUEtUX0RhdGErMTApCS8qIFRyYW5zbWl0IGJhdWQgcmF0ZSAqLwotI2RlZmluZQlQS1RfUnhCYXVkCQkoUEtUX0RhdGErMTEpCS8qIFJlY2VpdmUgYmF1ZCByYXRlICovCi0KLS8qIENPUjEgZGVmaW5pdGlvbnMuLi4gKi8KLSNkZWZpbmUJQ09SMV9QQVJJVFkJCTB4RTAJLyogUGFyaXR5IG1hc2sgKi8KLSNkZWZpbmUJQ09SMV9OT05FCQkweDAwCS8qIE5vIHBhcml0eSAqLwotI2RlZmluZQlDT1IxX1NQQUNFCQkweDIwCS8qIFNwYWNlIHBhcml0eSAqLwotI2RlZmluZQlDT1IxX0VWRU4JCTB4NDAJLyogRXZlbiBwYXJpdHkgKi8KLSNkZWZpbmUJQ09SMV9NQVJLCQkweEEwCS8qIE1hcmsgcGFyaXR5ICovCi0jZGVmaW5lCUNPUjFfT0RECQkweEMwCS8qIE9kZCBwYXJpdHkgKi8KLQotI2RlZmluZQlDT1IxX1NUT1BCSVRTCQkweDBDCS8qIFN0b3AgYml0cyBtYXNrICovCi0jZGVmaW5lCUNPUjFfU1RPUDEJCTB4MDAJLyogMSBzdG9wIGJpdCAqLwotI2RlZmluZQlDT1IxX1NUT1AxXzUJCTB4MDQJLyogMS41IHN0b3AgYml0cyAqLwotI2RlZmluZQlDT1IxX1NUT1AyCQkweDA4CS8qIDIgc3RvcCBiaXRzICovCi0KLSNkZWZpbmUJQ09SMV9EQVRBQklUUwkJMHgwMwkvKiBEYXRhIGJpdHMgbWFzayAqLwotI2RlZmluZQlDT1IxX0RBVEE1CQkweDAwCS8qIDUgZGF0YSBiaXRzICovCi0jZGVmaW5lCUNPUjFfREFUQTYJCTB4MDEJLyogNiBkYXRhIGJpdHMgKi8KLSNkZWZpbmUJQ09SMV9EQVRBNwkJMHgwMgkvKiA3IGRhdGEgYml0cyAqLwotI2RlZmluZQlDT1IxX0RBVEE4CQkweDAzCS8qIDggZGF0YSBiaXRzICovCi0KLS8qIENPUjIgZGVmaW5pdGlvbnMuLi4gKi8KLSNkZWZpbmUJQ09SMl9YT05fVFhGTE9XCQkweDQwCS8qIFhPTi9YT0ZGIFRyYW5zbWl0IEZsb3cgKi8KLSNkZWZpbmUJQ09SMl9YQU5ZX1RYRkxPVwkweEMwCS8qIFhPTi9YQU5ZIFRyYW5zbWl0IEZsb3cgKi8KLSNkZWZpbmUJQ09SMl9IVVBDTAkJMHgyMAkvKiBIYW5nIFVwIE9uIENsb3NlICovCi0jZGVmaW5lCUNPUjJfRFNSX1RYRkxPVwkJMHgwOAkvKiBEU1IgVHJhbnNtaXQgRmxvdyBDb250cm9sICovCi0jZGVmaW5lCUNPUjJfUlRTX1JYRkxPVwkJMHgwNAkvKiBSVFMgUmVjZWl2ZSBGbG93IENvbnRyb2wgKi8KLSNkZWZpbmUJQ09SMl9DVFNfVFhGTE9XCQkweDAyCS8qIENUUyBUcmFuc21pdCBGbG93IENvbnRyb2wgKi8KLSNkZWZpbmUJQ09SMl9YT05fUlhGTE9XCQkweDAxCS8qIFhPTi9YT0ZGIFJlY2VpdmUgRmxvdyAqLwotCi0vKiBDT1I0IGRlZmluaXRpb24uLi4gKi8KLSNkZWZpbmUJQ09SNF9JR05DUgkJMHg4MAkvKiBEaXNjYXJkIHJlY2VpdmVkIENSICovCi0jZGVmaW5lCUNPUjRfSUNSTkwJCTB4NDAJLyogTWFwIHJlY2VpdmVkIENSIC0+IE5MICovCi0jZGVmaW5lCUNPUjRfSU5MQ1IJCTB4MjAJLyogTWFwIHJlY2VpdmVkIE5MIC0+IENSICovCi0jZGVmaW5lCUNPUjRfSUdOQlJLCQkweDEwCS8qIElnbm9yZSBSZWNlaXZlZCBCcmVhayAqLwotI2RlZmluZQlDT1I0X05CUktJTlQJCTB4MDgJLyogTm8gaW50ZXJydXB0IG9uIHJ4IEJyZWFrICovCi0jZGVmaW5lCUNPUjRfSUdOUEFSCQkweDA0CS8qIGlnbm9yZSByeCBwYXJpdHkgZXJyb3IgY2hhcnMgKi8KLSNkZWZpbmUJQ09SNF9QQVJNUksJCTB4MDIJLyogTWFyayByeCBwYXJpdHkgZXJyb3IgY2hhcnMgKi8KLSNkZWZpbmUJQ09SNF9SQUlTRU1PRAkJMHgwMQkvKiBSYWlzZSBtb2RlbSBsaW5lcyBvbiAhMCBiYXVkICovCi0KLS8qIENPUjUgZGVmaW5pdGlvbnMuLi4gKi8KLSNkZWZpbmUJQ09SNV9JU1RSSVAJCTB4ODAJLyogU3RyaXAgaW5wdXQgY2hhcnMgdG8gNyBiaXRzICovCi0jZGVmaW5lCUNPUjVfTE5FCQkweDQwCS8qIEVuYWJsZSBMTkVYVCBwcm9jZXNzaW5nICovCi0jZGVmaW5lCUNPUjVfQ01PRQkJMHgyMAkvKiBNYXRjaCBnb29kICYgZXJyb3IgY2hhcmFjdGVycyAqLwotI2RlZmluZQlDT1I1X1RBQjMJCTB4MTAJLyogVEFCMyBtb2RlICovCi0jZGVmaW5lCUNPUjVfVFNUQVRFX09OCQkweDA4CS8qIEVuYWJsZSB0YnVzeS90c3RvcCBtb25pdG9yaW5nICovCi0jZGVmaW5lCUNPUjVfVFNUQVRFX09GRgkJMHgwNAkvKiBEaXNhYmxlIHRidXN5L3RzdG9wIG1vbml0b3JpbmcgKi8KLSNkZWZpbmUJQ09SNV9PTkxDUgkJMHgwMgkvKiBOTCAtPiBDUiBOTCBvbiBvdXRwdXQgKi8KLSNkZWZpbmUJQ09SNV9PQ1JOTAkJMHgwMQkvKiBDUiAtPiBOTCBvbiBvdXRwdXQgKi8KLQotLyogUnhCYXVkIGFuZCBUeEJhdWQgZGVmaW5pdGlvbnMuLi4gKi8KLSNkZWZpbmUJUklPX0IwCQkJMHgwMAkvKiBSVFMgLyBEVFIgc2lnbmFscyBkcm9wcGVkICovCi0jZGVmaW5lCVJJT19CNTAJCQkweDAxCS8qIDUwIGJhdWQgKi8KLSNkZWZpbmUJUklPX0I3NQkJCTB4MDIJLyogNzUgYmF1ZCAqLwotI2RlZmluZQlSSU9fQjExMAkJMHgwMwkvKiAxMTAgYmF1ZCAqLwotI2RlZmluZQlSSU9fQjEzNAkJMHgwNAkvKiAxMzQuNSBiYXVkICovCi0jZGVmaW5lCVJJT19CMTUwCQkweDA1CS8qIDE1MCBiYXVkICovCi0jZGVmaW5lCVJJT19CMjAwCQkweDA2CS8qIDIwMCBiYXVkICovCi0jZGVmaW5lCVJJT19CMzAwCQkweDA3CS8qIDMwMCBiYXVkICovCi0jZGVmaW5lCVJJT19CNjAwCQkweDA4CS8qIDYwMCBiYXVkICovCi0jZGVmaW5lCVJJT19CMTIwMAkJMHgwOQkvKiAxMjAwIGJhdWQgKi8KLSNkZWZpbmUJUklPX0IxODAwCQkweDBBCS8qIDE4MDAgYmF1ZCAqLwotI2RlZmluZQlSSU9fQjI0MDAJCTB4MEIJLyogMjQwMCBiYXVkICovCi0jZGVmaW5lCVJJT19CNDgwMAkJMHgwQwkvKiA0ODAwIGJhdWQgKi8KLSNkZWZpbmUJUklPX0I5NjAwCQkweDBECS8qIDk2MDAgYmF1ZCAqLwotI2RlZmluZQlSSU9fQjE5MjAwCQkweDBFCS8qIDE5MjAwIGJhdWQgKi8KLSNkZWZpbmUJUklPX0IzODQwMAkJMHgwRgkvKiAzODQwMCBiYXVkICovCi0jZGVmaW5lCVJJT19CNTYwMDAJCTB4MTAJLyogNTYwMDAgYmF1ZCAqLwotI2RlZmluZQlSSU9fQjU3NjAwCQkweDExCS8qIDU3NjAwIGJhdWQgKi8KLSNkZWZpbmUJUklPX0I2NDAwMAkJMHgxMgkvKiA2NDAwMCBiYXVkICovCi0jZGVmaW5lCVJJT19CMTE1MjAwCQkweDEzCS8qIDExNTIwMCBiYXVkICovCi0jZGVmaW5lCVJJT19CMjAwMAkJMHgxNAkvKiAyMDAwIGJhdWQgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIENPTkZJRyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKERyaXZlci0+UklPLGluLWJhbmQpCi0KLSAgIENPTkZJRyBpcyBzZW50IGZyb20gdGhlIGRyaXZlciB0byBjb25maWd1cmUgYW4gYWxyZWFkeSBvcGVuZWQgcG9ydC4KLSAgIFBhY2tldCBzdHJ1Y3R1cmUgaXMgc2FtZSBhcyBPUEVOLiAgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIE1PUEVOICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKERyaXZlci0+UklPLGluLWJhbmQpCi0KLSAgIE1PUEVOIGlzIHNlbnQgZnJvbSB0aGUgZHJpdmVyIHRvIG9wZW4gYSBwb3J0IGF0dGFjaGVkIHRvIGEgbW9kZW0uIChpbi1iYW5kKQotICAgUGFja2V0IHN0cnVjdHVyZSBpcyBzYW1lIGFzIE9QRU4uICAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgQ0xPU0UgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoRHJpdmVyLT5SSU8saW4tYmFuZCkKLQotICAgQ0xPU0UgaXMgc2VudCBmcm9tIHRoZSBkcml2ZXIgdG8gY2xvc2UgYSBwcmV2aW91c2x5IG9wZW5lZCBwb3J0LgotICAgTm8gcGFyYW1ldGVycy4KLSAqLwotI2lmIDAKLSNkZWZpbmUJUEtUX0NtZAkJCShQS1RfRGF0YSswKQkvKiBDb21tYW5kIGNvZGUgKi8KLSNlbmRpZgotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIFdGTFVTSCAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKERyaXZlci0+UklPLHByZS1lbXB0aXZlKQotCi0gICBXRkxVU0ggaXMgc2VudCBwcmUtZW1wdGl2ZWx5IGZyb20gdGhlIGRyaXZlciB0byBmbHVzaCB0aGUgd3JpdGUgYnVmZmVycyBhbmQKLSAgIHBhY2tldHMgb2YgYSBwb3J0LiAgKHByZS1lbXB0aXZlKQotICAgCi0gICBXRkxVU0ggaXMgYWxzbyBzZW50IGluLWJhbmQgZnJvbSB0aGUgZHJpdmVyIHRvIGEgcG9ydCBhcyBhIG1hcmtlciB0byBlbmQKLSAgIHdyaXRlIGZsdXNoaW5nIHByZXZpb3VzbHkgc3RhcnRlZCBieSBhIHByZS1lbXB0aXZlIFdGTFVTSCBwYWNrZXQuIChpbi1iYW5kKQotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZW5kaWYKLSNkZWZpbmUJUEtUX1BoYk51bQkJKFBLVF9EYXRhKzEpCS8qIFBvcnQgbnVtYmVyIHdydCBSVEEgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIFJGTFVTSCAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKERyaXZlci0+UklPLHByZS1lbXB0aXZlKQotCi0gICBSRkxVU0ggaXMgc2VudCBwcmUtZW1wdGl2ZWx5IGZyb20gdGhlIGRyaXZlciB0byBmbHVzaCB0aGUgcmVhZCBidWZmZXJzIGFuZAotICAgcGFja2V0cyBvZiBhIHBvcnQuCi0gICAqLwotI2lmIDAKLSNkZWZpbmUJUEtUX0NtZAkJCShQS1RfRGF0YSswKQkvKiBDb21tYW5kIGNvZGUgKi8KLSNkZWZpbmUJUEtUX1BoYk51bQkJKFBLVF9EYXRhKzEpCS8qIFBvcnQgbnVtYmVyIHdydCBSVEEgKi8KLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgUkVTVU1FICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoRHJpdmVyLT5SSU8scHJlLWVtcHRpdmUpCi0KLSAgIFJFU1VNRSBpcyBzZW50IHByZS1lbXB0aXZlbHkgZnJvbSB0aGUgZHJpdmVyIHRvIGNhdXNlIGEgcG9ydCB0byByZXN1bWUgCi0gICB0cmFuc21pc3Npb24gb2YgZGF0YSBpZiBibG9ja2VkIGJ5IFhPRkYuICAoYXMgaWYgWE9OIGhhZCBiZWVuIHJlY2VpdmVkKQotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZGVmaW5lCVBLVF9QaGJOdW0JCShQS1RfRGF0YSsxKQkvKiBQb3J0IG51bWJlciB3cnQgUlRBICovCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIFNCUkVBSyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKERyaXZlci0+UklPLGluLWJhbmQpCi0KLSAgIFNCUkVBSyBpcyBzZW50IGluLWJhbmQgZnJvbSB0aGUgZHJpdmVyIHRvIGEgcG9ydCB0byBzdXNwZW5kIGRhdGEgYW5kIHN0YXJ0Ci0gICBicmVhayBzaWduYWwgdHJhbnNtaXNzaW9uLgotCi0gICBJZiB0aGUgYnJlYWsgZGVsYXkgaXMgMCwgdGhlIGJyZWFrIHNpZ25hbCB3aWxsIGJlIGFja25vd2xlZGdlZCB3aXRoIGEKLSAgIFJVUF9DT01NQU5ELCBDT01QTEVURSBwYWNrZXQgYW5kIGNvbnRpbnVlIHVudGlsIGFuIEVCUkVBSyBwYWNrZXQgaXMgcmVjZWl2ZWQuCi0KLSAgIE90aGVyd2lzZSwgdGhlcmUgaXMgbm8gYWNrbm93bGVkZ2VtZW50IGFuZCB0aGUgYnJlYWsgc2lnbmFsIHdpbGwgbGFzdCBmb3IgdGhlCi0gICBzcGVjaWZpZWQgbnVtYmVyIG9mIG1TLgotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZW5kaWYKLSNkZWZpbmUJUEtUX0JyZWFrRGVsYXkJCShQS1RfRGF0YSsxKQkvKiBCcmVhayBkZWxheSBpbiBtUyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgRUJSRUFLICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoRHJpdmVyLT5SSU8saW4tYmFuZCkKLQotICAgRUJSRUFLIGlzIHNlbnQgaW4tYmFuZCBmcm9tIHRoZSBkcml2ZXIgdG8gYSBwb3J0IHRvIHN0b3AgdHJhbnNtaXNzaW9uIG9mIGEKLSAgIGJyZWFrIHNpZ25hbC4KLQotICAgTm8gcGFyYW1ldGVycy4gICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICBTVVNQRU5EICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIChEcml2ZXItPlJJTyxwcmUtZW1wdGl2ZSkKLQotICAgU1VTUEVORCBpcyBzZW50IHByZS1lbXB0aXZlbHkgZnJvbSB0aGUgZHJpdmVyIHRvIGNhdXNlIGEgcG9ydCB0byBzdXNwZW5kCi0gICB0cmFuc21pc3Npb24gb2YgZGF0YS4gIChhcyBpZiBYT0ZGIGhhZCBiZWVuIHJlY2VpdmVkKQotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZGVmaW5lCVBLVF9QaGJOdW0JCShQS1RfRGF0YSsxKQkvKiBQb3J0IG51bWJlciB3cnQgUlRBICovCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIEZDTE9TRSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKERyaXZlci0+UklPLHByZS1lbXB0aXZlKQotCi0gICBGQ0xPU0UgaXMgc2VudCBwcmUtZW1wdGl2ZWx5IGZyb20gdGhlIGRyaXZlciB0byBmb3JjZSBjbG9zZSBhIHBvcnQuCi0gICBBIGZvcmNlIGNsb3NlIGZsdXNoZXMgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcXVldWVzLCBhbmQgYWxzbyBsb3dlcnMgYWxsIG91dHB1dAotICAgbW9kZW0gc2lnbmFscyBpZiB0aGUgQ09SNV9IVVBDTCAoSGFuZyBVcCBPbiBDbG9zZSkgZmxhZyBpcyBzZXQuCi0gICAqLwotI2lmIDAKLSNkZWZpbmUJUEtUX0NtZAkJCShQS1RfRGF0YSswKQkvKiBDb21tYW5kIGNvZGUgKi8KLSNkZWZpbmUJUEtUX1BoYk51bQkJKFBLVF9EYXRhKzEpCS8qIFBvcnQgbnVtYmVyIHdydCBSVEEgKi8KLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgWFBSSU5UICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoRHJpdmVyLT5SSU8saW4tYmFuZCkKLQotICAgWFBSSU5UIGlzIHNlbnQgYXMgYSBub3JtYWwgSS9PIGRhdGEgcGFja2V0IGV4Y2VwdCB0aGF0IHRoZSBQS1RfQ01EX0JJVCBvZgotICAgdGhlICJsZW4iIGZpZWxkIGlzIHNldCwgYW5kIHRoZSBmaXJzdCAiZGF0YSIgYnl0ZSBpcyBYUFJJTlQuCi0KLSAgIFRoZSBJL08gZGF0YSBpbiB0aGUgWFBSSU5UIHBhY2tldCB3aWxsIGNvbnRhaW4gdGhlIGZvbGxvd2luZzoKLSAgIC0JVHJhbnNwYXJlbnQgUHJpbnQgU3RhcnQgU2VxdWVuY2UKLSAgIC0JVHJhbnNwYXJlbnQgUHJpbnQgRGF0YQotICAgLQlUcmFuc3BhcmVudCBQcmludCBTdG9wIFNlcXVlbmNlLgotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZGVmaW5lCVBLVF9QaGJOdW0JCShQS1RfRGF0YSsxKQkvKiBQb3J0IG51bWJlciB3cnQgUlRBICovCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICBNQklTICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKERyaXZlci0+UklPLHByZS1lbXB0aXZlKQotCi0gICBNQklTIGlzIHNlbnQgcHJlLWVtcHRpdmVseSBmcm9tIHRoZSBkcml2ZXIgdG8gc2V0IGEgcG9ydCdzIG1vZGVtIHNpZ25hbHMuCi0gICAqLwotI2lmIDAKLSNkZWZpbmUJUEtUX0NtZAkJCShQS1RfRGF0YSswKQkvKiBDb21tYW5kIGNvZGUgKi8KLSNkZWZpbmUJUEtUX1BoYk51bQkJKFBLVF9EYXRhKzEpCS8qIFBvcnQgbnVtYmVyIHdydCBSVEEgKi8KLSNlbmRpZgotI2RlZmluZQlQS1RfTW9kZW1TZXQJCShQS1RfRGF0YSs0KQkvKiBNb2RlbSBzZXQgc2lnbmFscyBtYXNrICovCi0KLS8qIE1vZGVtU2V0IGRlZmluaXRpb25zLi4uICovCi0jZGVmaW5lCU1CSVNfUlRTCQkweDAxCS8qIFJUUyBtb2RlbSBzaWduYWwgKi8KLSNkZWZpbmUJTUJJU19EVFIJCTB4MDIJLyogRFRSIG1vZGVtIHNpZ25hbCAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIE1CSUMgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoRHJpdmVyLT5SSU8scHJlLWVtcHRpdmUpCi0KLSAgIE1CSUMgaXMgc2VudCBwcmUtZW1wdGl2ZWx5IGZyb20gdGhlIGRyaXZlciB0byBjbGVhciBhIHBvcnQncyBtb2RlbSBzaWduYWxzLgotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZGVmaW5lCVBLVF9QaGJOdW0JCShQS1RfRGF0YSsxKQkvKiBQb3J0IG51bWJlciB3cnQgUlRBICovCi0jZW5kaWYKLQotI2RlZmluZQlQS1RfTW9kZW1DbGVhcgkJKFBLVF9EYXRhKzQpCS8qIE1vZGVtIGNsZWFyIHNpZ25hbHMgbWFzayAqLwotCi0vKiBNb2RlbUNsZWFyIGRlZmluaXRpb25zLi4uICovCi0jZGVmaW5lCU1CSUNfUlRTCQkweDAxCS8qIFJUUyBtb2RlbSBzaWduYWwgKi8KLSNkZWZpbmUJTUJJQ19EVFIJCTB4MDIJLyogRFRSIG1vZGVtIHNpZ25hbCAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIE1TRVQgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoRHJpdmVyLT5SSU8scHJlLWVtcHRpdmUpCi0KLSAgIE1TRVQgaXMgc2VudCBwcmUtZW1wdGl2ZWx5IGZyb20gdGhlIGRyaXZlciB0byBzZXQvY2xlYXIgYSBwb3J0J3MgbW9kZW0gc2lnbmFscy4gKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZGVmaW5lCVBLVF9QaGJOdW0JCShQS1RfRGF0YSsxKQkvKiBQb3J0IG51bWJlciB3cnQgUlRBICovCi0jZW5kaWYKLQotI2RlZmluZQlQS1RfTW9kZW1TZXQJCShQS1RfRGF0YSs0KQkvKiBNb2RlbSBzZXQgc2lnbmFscyBtYXNrICovCi0KLS8qIE1vZGVtU2V0IGRlZmluaXRpb25zLi4uICovCi0jZGVmaW5lCU1TRVRfUlRTCQkweDAxCS8qIFJUUyBtb2RlbSBzaWduYWwgKi8KLSNkZWZpbmUJTVNFVF9EVFIJCTB4MDIJLyogRFRSIG1vZGVtIHNpZ25hbCAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgUENMT1NFICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoRHJpdmVyLT5SSU8saW4tYmFuZCkKLQotICAgUENMT1NFIGlzIHNlbnQgZnJvbSB0aGUgZHJpdmVyIHRvIHBzZXVkbyBjbG9zZSBhIHByZXZpb3VzbHkgb3BlbmVkIHBvcnQuCi0gICAKLSAgIFRoZSBwb3J0IHdpbGwgY2xvc2Ugd2hlbiBhbGwgZGF0YSBoYXMgYmVlbiBzZW50L3JlY2VpdmVkLCBob3dldmVyLCB0aGUKLSAgIHBvcnQncyB0cmFuc21pdCAvIHJlY2VpdmUgYW5kIG1vZGVtIHNpZ25hbHMgd2lsbCBiZSBsZWZ0IGVuYWJsZWQgYW5kIHRoZQotICAgcG9ydCBtYXJrZWQgaW50ZXJuYWxseSBhcyBQc2V1ZG8gQ2xvc2VkLiAqLwotCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgTUdFVCAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIChEcml2ZXItPlJJTyxwcmUtZW1wdGl2ZSkKLQotICAgTUdFVCBpcyBzZW50IHByZS1lbXB0aXZlbHkgZnJvbSB0aGUgZHJpdmVyIHRvIHJlcXVlc3QgdGhlIHBvcnQncyBjdXJyZW50IG1vZGVtIHNpZ25hbHMuICovCi0KLSNkZWZpbmUJUEtUX0NtZAkJCShQS1RfRGF0YSswKQkvKiBDb21tYW5kIGNvZGUgKi8KLSNkZWZpbmUJUEtUX1BoYk51bQkJKFBLVF9EYXRhKzEpCS8qIFBvcnQgbnVtYmVyIHdydCBSVEEgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIE1FTURVTVAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKERyaXZlci0+UklPLHByZS1lbXB0aXZlKQotCi0gICBNRU1EVU1QIGlzIHNlbnQgcHJlLWVtcHRpdmVseSBmcm9tIHRoZSBkcml2ZXIgdG8gcmVxdWVzdCBhIGR1bXAgb2YgMzIgYnl0ZXMKLSAgIG9mIHRoZSBzcGVjaWZpZWQgcG9ydCdzIFJUQSBhZGRyZXNzIHNwYWNlLgotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZW5kaWYKLSNkZWZpbmUJUEtUX1BoYk51bQkJKFBLVF9EYXRhKzEpCS8qIFBvcnQgbnVtYmVyIHdydCBSVEEgKi8KLSNkZWZpbmUJUEtUX1N1YkNtZAkJKFBLVF9EYXRhKzUpCS8qIFN1YiBDb21tYW5kICovCi0jZGVmaW5lCVBLVF9BZGRyZXNzCQkoUEtUX0RhdGErNikJLyogUmVxdWVzdGVkIGFkZHJlc3MgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIFJFQURfUkVHSVNURVIgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKERyaXZlci0+UklPLHByZS1lbXB0aXZlKQotCi0gICBSRUFEX1JFR0lTVEVSIGlzIHNlbnQgcHJlLWVtcHRpdmVseSBmcm9tIHRoZSBkcml2ZXIgdG8gcmVxdWVzdCB0aGUgY29udGVudHMKLSAgIG9mIHRoZSBDRDE0MDAgcmVnaXN0ZXIgc3BlY2lmaWVkIGluIGFkZHJlc3MuCi0gICAqLwotI2lmIDAKLSNkZWZpbmUJUEtUX0NtZAkJCShQS1RfRGF0YSswKQkvKiBDb21tYW5kIGNvZGUgKi8KLSNlbmRpZgotI2RlZmluZQlQS1RfUGhiTnVtCQkoUEtUX0RhdGErMSkJLyogUG9ydCBudW1iZXIgd3J0IFJUQSAqLwotI2RlZmluZQlQS1RfU3ViQ21kCQkoUEtUX0RhdGErNSkJLyogU3ViIENvbW1hbmQgKi8KLSNkZWZpbmUJUEtUX0FkZHJlc3MJCShQS1RfRGF0YSs2KQkvKiBSZXF1ZXN0ZWQgYWRkcmVzcyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqICAgQ09NTUFORF9SVVAgLSBDT01QTEVURSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoUklPLT5Ecml2ZXIscHJlLWVtcHRpdmUpCi0KLSAgIENPTU1BTkRfUlVQIC0gQ09NUExFVEUgaXMgc2VudCBpbiByZXNwb25zZSB0byBhbGwgcG9ydCBJL08gY29udHJvbCBjb21tYW5kCi0gICBwYWNrZXRzLCBleGNlcHQgTUVNRFVNUCBhbmQgUkVBRF9SRUdJU1RFUi4KLSAgICovCi0jaWYgMAotI2RlZmluZQlQS1RfQ21kCQkJKFBLVF9EYXRhKzApCS8qIENvbW1hbmQgY29kZSAqLwotI2VuZGlmCi0jZGVmaW5lCVBLVF9QaGJOdW0JCShQS1RfRGF0YSsxKQkvKiBQb3J0IG51bWJlciB3cnQgUlRBICovCi0jZGVmaW5lCVBLVF9DbWQyCQkoUEtUX0RhdGErMikJLyogQ29tbWFuZCBjb2RlIGNvcHkgKi8KLSNkZWZpbmUJUEtUX01vZGVtU3RhdHVzCQkoUEtUX0RhdGErMykJLyogTW9kZW0gc2lnbmFsIHN0YXR1cyAqLwotI2RlZmluZQlQS1RfUG9ydFN0YXR1cwkJKFBLVF9EYXRhKzQpCS8qIFBvcnQgc2lnbmFsIHN0YXR1cyAqLwotI2RlZmluZQlQS1RfU3ViQ21kCQkoUEtUX0RhdGErNSkJLyogU3ViIENvbW1hbmQgKi8KLQotLyogTW9kZW1TdGF0dXMgZGVmaW5pdGlvbnMuLi4gKi8KLSNkZWZpbmUJTU9ERU1fRFNSCQkweDgwCS8qIERhdGEgU2V0IFJlYWR5IG1vZGVtIHN0YXRlICovCi0jZGVmaW5lCU1PREVNX0NUUwkJMHg0MAkvKiBDbGVhciBUbyBTZW5kIG1vZGVtIHN0YXRlICovCi0jZGVmaW5lCU1PREVNX1JJCQkweDIwCS8qIFJpbmcgSW5kaWNhdGUgbW9kZW0gc3RhdGUgKi8KLSNkZWZpbmUJTU9ERU1fQ0QJCTB4MTAJLyogQ2FycmllciBEZXRlY3QgbW9kZW0gc3RhdGUgKi8KLSNkZWZpbmUJTU9ERU1fVFNUT1AJCTB4MDgJLyogVHJhbnNtaXQgU3RvcHBlZCBzdGF0ZSAqLwotI2RlZmluZQlNT0RFTV9URU1QVFkJCTB4MDQJLyogVHJhbnNtaXQgRW1wdHkgc3RhdGUgKi8KLSNkZWZpbmUJTU9ERU1fRFRSCQkweDAyCS8qIERUUiBtb2RlbSBvdXRwdXQgc3RhdGUgKi8KLSNkZWZpbmUJTU9ERU1fUlRTCQkweDAxCS8qIFJUUyBtb2RlbSBvdXRwdXQgc3RhdGUgKi8KLQotLyogUG9ydFN0YXR1cyBkZWZpbml0aW9ucy4uLiAqLwotI2RlZmluZQlQT1JUX0lTT1BFTgkJMHgwMQkvKiBQb3J0IG9wZW4gPyAqLwotI2RlZmluZQlQT1JUX0hVUENMCQkweDAyCS8qIEhhbmd1cCBvbiBjbG9zZT8gKi8KLSNkZWZpbmUJUE9SVF9NT1BFTlBFTkQJCTB4MDQJLyogTW9kZW0gb3BlbiBwZW5kaW5nICovCi0jZGVmaW5lCVBPUlRfSVNQQVJBTExFTAkJMHgwOAkvKiBQYXJhbGxlbCBwb3J0ICovCi0jZGVmaW5lCVBPUlRfQlJFQUsJCTB4MTAJLyogUG9ydCBvbiBicmVhayAqLwotI2RlZmluZQlQT1JUX1NUQVRVU1BFTkQJCTAwMjAJLyogU3RhdHVzIHBhY2tldCBwZW5kaW5nICovCi0jZGVmaW5lCVBPUlRfQlJFQUtQRU5ECQkweDQwCS8qIEJyZWFrIHBhY2tldCBwZW5kaW5nICovCi0jZGVmaW5lCVBPUlRfTU9ERU1QRU5ECQkweDgwCS8qIE1vZGVtIHN0YXR1cyBwYWNrZXQgcGVuZGluZyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqICAgQ09NTUFORF9SVVAgLSBDT01QTEVURSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoUklPLT5Ecml2ZXIscHJlLWVtcHRpdmUpCi0KLSAgIENPTU1BTkRfUlVQIC0gQ09NUExFVEUgaXMgc2VudCBpbiByZXNwb25zZSB0byBhbGwgcG9ydCBJL08gY29udHJvbCBjb21tYW5kCi0gICBwYWNrZXRzLCBleGNlcHQgTUVNRFVNUCBhbmQgUkVBRF9SRUdJU1RFUi4KLSAgICovCi0jaWYgMAotI2RlZmluZQlQS1RfQ21kCQkJKFBLVF9EYXRhKzApCS8qIENvbW1hbmQgY29kZSAqLwotI2RlZmluZQlQS1RfUGhiTnVtCQkoUEtUX0RhdGErMSkJLyogUG9ydCBudW1iZXIgd3J0IFJUQSAqLwotI2RlZmluZQlQS1RfQ21kMgkJKFBLVF9EYXRhKzIpCS8qIENvbW1hbmQgY29kZSBjb3B5ICovCi0jZW5kaWYKLSNkZWZpbmUJUEtUX01vZGVtU3RhdHVzCQkoUEtUX0RhdGErMykJLyogTW9kZW0gc2lnbmFsIHN0YXR1cyAqLwotI2RlZmluZQlQS1RfUG9ydFN0YXR1cwkJKFBLVF9EYXRhKzQpCS8qIFBvcnQgc2lnbmFsIHN0YXR1cyAqLwotI2lmIDAKLSNkZWZpbmUJUEtUX1N1YkNtZAkJKFBLVF9EYXRhKzUpCS8qIFN1YiBDb21tYW5kICovCi0jZW5kaWYKLQotLyogTW9kZW1TdGF0dXMgZGVmaW5pdGlvbnMuLi4gKi8KLSNkZWZpbmUJTU9ERU1fRFNSCQkweDgwCS8qIERhdGEgU2V0IFJlYWR5IG1vZGVtIHN0YXRlICovCi0jZGVmaW5lCU1PREVNX0NUUwkJMHg0MAkvKiBDbGVhciBUbyBTZW5kIG1vZGVtIHN0YXRlICovCi0jZGVmaW5lCU1PREVNX1JJCQkweDIwCS8qIFJpbmcgSW5kaWNhdGUgbW9kZW0gc3RhdGUgKi8KLSNkZWZpbmUJTU9ERU1fQ0QJCTB4MTAJLyogQ2FycmllciBEZXRlY3QgbW9kZW0gc3RhdGUgKi8KLSNkZWZpbmUJTU9ERU1fVFNUT1AJCTB4MDgJLyogVHJhbnNtaXQgU3RvcHBlZCBzdGF0ZSAqLwotI2RlZmluZQlNT0RFTV9URU1QVFkJCTB4MDQJLyogVHJhbnNtaXQgRW1wdHkgc3RhdGUgKi8KLSNkZWZpbmUJTU9ERU1fRFRSCQkweDAyCS8qIERUUiBtb2RlbSBvdXRwdXQgc3RhdGUgKi8KLSNkZWZpbmUJTU9ERU1fUlRTCQkweDAxCS8qIFJUUyBtb2RlbSBvdXRwdXQgc3RhdGUgKi8KLQotLyogUG9ydFN0YXR1cyBkZWZpbml0aW9ucy4uLiAqLwotI2RlZmluZQlQT1JUX0lTT1BFTgkJMHgwMQkvKiBQb3J0IG9wZW4gPyAqLwotI2RlZmluZQlQT1JUX0hVUENMCQkweDAyCS8qIEhhbmd1cCBvbiBjbG9zZT8gKi8KLSNkZWZpbmUJUE9SVF9NT1BFTlBFTkQJCTB4MDQJLyogTW9kZW0gb3BlbiBwZW5kaW5nICovCi0jZGVmaW5lCVBPUlRfSVNQQVJBTExFTAkJMHgwOAkvKiBQYXJhbGxlbCBwb3J0ICovCi0jZGVmaW5lCVBPUlRfQlJFQUsJCTB4MTAJLyogUG9ydCBvbiBicmVhayAqLwotI2RlZmluZQlQT1JUX1NUQVRVU1BFTkQJCTAwMjAJLyogU3RhdHVzIHBhY2tldCBwZW5kaW5nICovCi0jZGVmaW5lCVBPUlRfQlJFQUtQRU5ECQkweDQwCS8qIEJyZWFrIHBhY2tldCBwZW5kaW5nICovCi0jZGVmaW5lCVBPUlRfTU9ERU1QRU5ECQkweDgwCS8qIE1vZGVtIHN0YXR1cyBwYWNrZXQgcGVuZGluZyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKiogICBDT01NQU5EX1JVUCAtIENPTVBMRVRFIC0gTUVNRFVNUCAgICoqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoUklPLT5Ecml2ZXIscHJlLWVtcHRpdmUpCi0KLSAgIENPTU1BTkRfUlVQIC0gQ09NUExFVEUgLSBNRU1EVU1QIGlzIHNlbnQgYXMgYW4gYWNrbm93bGVkZ2VtZW50IGZvciBhIE1FTURVTVAKLSAgIHBvcnQgSS9PIGNvbnRyb2wgY29tbWFuZCBwYWNrZXQuCi0gICAqLwotI2lmIDAKLSNkZWZpbmUJUEtUX0NtZAkJCShQS1RfRGF0YSswKQkvKiBDb21tYW5kIGNvZGUgKi8KLSNkZWZpbmUJUEtUX1BoYk51bQkJKFBLVF9EYXRhKzEpCS8qIFBvcnQgbnVtYmVyIHdydCBSVEEgKi8KLSNkZWZpbmUJUEtUX0NtZDIJCShQS1RfRGF0YSsyKQkvKiBDb21tYW5kIGNvZGUgY29weSAqLwotI2RlZmluZQlQS1RfTW9kZW1TdGF0dXMJCShQS1RfRGF0YSszKQkvKiBNb2RlbSBzaWduYWwgc3RhdHVzICovCi0jZGVmaW5lCVBLVF9Qb3J0U3RhdHVzCQkoUEtUX0RhdGErNCkJLyogUG9ydCBzaWduYWwgc3RhdHVzICovCi0jZGVmaW5lCVBLVF9TdWJDbWQJCShQS1RfRGF0YSs1KQkvKiBTdWIgQ29tbWFuZCAqLwotI2RlZmluZQlQS1RfQWRkcmVzcwkJKFBLVF9EYXRhKzYpCS8qIFJlcXVlc3RlZCBhZGRyZXNzICovCi0jZW5kaWYKLSNkZWZpbmUJUEtUX0R1bXAJCShQS1RfRGF0YSs4KQkvKiAzMmJ5dGVzIG9mIHJlcXVlc3RlZCBkdW1wIGRhdGEgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqICAgQ09NTUFORF9SVVAgLSBDT01QTEVURSAtIFJFQURfUkVHSVNURVIgICAqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKFJJTy0+RHJpdmVyLHByZS1lbXB0aXZlKQotCi0gICBDT01NQU5EX1JVUCAtIENPTVBMRVRFIC0gUkVBRF9SRUdJU1RFUiBpcyBzZW50IGFzIGFuIGFja25vd2xlZGdlbWVudCBmb3IgYQotICAgUkVBRF9SRUdJU1RFUiBwb3J0IEkvTyBjb250cm9sIGNvbW1hbmQgcGFja2V0LgotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLypDb21tYW5kIGNvZGUgKi8KLSNkZWZpbmUJUEtUX1BoYk51bQkJKFBLVF9EYXRhKzEpCS8qUG9ydCBudW1iZXIgd3J0IFJUQSAqLwotI2RlZmluZQlQS1RfQ21kMgkJKFBLVF9EYXRhKzIpCS8qIENvbW1hbmQgY29kZSBjb3B5ICovCi0jZW5kaWYKLSNkZWZpbmUJUEtUX1JlZ2lzdGVyVmFsdWUJKFBLVF9EYXRhKzMpCS8qIE1vZGVtIHNpZ25hbCBzdGF0dXMgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9Qb3J0U3RhdHVzCQkoUEtUX0RhdGErNCkJLyogUG9ydCBzaWduYWwgc3RhdHVzICovCi0jZGVmaW5lCVBLVF9TdWJDbWQJCShQS1RfRGF0YSs1KQkvKiBTdWIgQ29tbWFuZCAqLwotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKiogICBDT01NQU5EX1JVUCAtIEJSRUFLX1JFQ0VJVkVEICAgKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIChSSU8tPkRyaXZlcixwcmUtZW1wdGl2ZSkKLQotICAgQ09NTUFORF9SVVAgLSBCUkVBS19SRUNFSVZFRCBwYWNrZXRzIGFyZSBzZW50IHdoZW4gdGhlIHBvcnQgZGV0ZWN0cyBhIHJlY2VpdmUgQlJFQUsgc2lnbmFsLgotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZGVmaW5lCVBLVF9QaGJOdW0JCShQS1RfRGF0YSsxKQkvKiBQb3J0IG51bWJlciB3cnQgUlRBICovCi0jZGVmaW5lCVBLVF9DbWQyCQkoUEtUX0RhdGErMikJLyogQ29tbWFuZCBjb2RlIGNvcHkgKi8KLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqICAgQ09NTUFORF9SVVAgLSBNT0RFTV9TVEFUVVMgICAqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoUklPLT5Ecml2ZXIscHJlLWVtcHRpdmUpCi0KLSAgIENPTU1BTkRfUlVQIC0gTU9ERU1fU1RBVFVTIHBhY2tldHMgYXJlIHNlbnQgd2hlbmV2ZXIgdGhlIHBvcnQgZGV0ZWN0cyBhCi0gICBjaGFuZ2UgaW4gdGhlIGlucHV0IG1vZGVtIHNpZ25hbCBzdGF0ZXMuCi0KLSAgICovCi0jaWYgMAotI2RlZmluZQlQS1RfQ21kCQkJKFBLVF9EYXRhKzApCS8qIENvbW1hbmQgY29kZSAqLwotI2RlZmluZQlQS1RfUGhiTnVtCQkoUEtUX0RhdGErMSkJLyogUG9ydCBudW1iZXIgd3J0IFJUQSAqLwotI2RlZmluZQlQS1RfQ21kMgkJKFBLVF9EYXRhKzIpCS8qIENvbW1hbmQgY29kZSBjb3B5ICovCi0jZGVmaW5lCVBLVF9Nb2RlbVN0YXR1cwkJKFBLVF9EYXRhKzMpCS8qIE1vZGVtIHNpZ25hbCBzdGF0dXMgKi8KLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqICAgQk9PVF9SVVAgLSBCT09UX1JFUVVFU1QgICAqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoUklPLT5Ecml2ZXIscHJlLWVtcHRpdmUpCi0KLSAgIEJPT1RfUlVQIC0gQk9PVF9SRVFVRVNUIHBhY2tldHMgYXJlIHNlbnQgdG8gdGhlIERyaXZlciBmcm9tIFJJTyB0byByZXF1ZXN0Ci0gICBmaXJtd2FyZSBjb2RlIHRvIGxvYWQgb250byBhdHRhY2hlZCBSVEFzLgotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKiAgIEJPT1RfUlVQIC0gQk9PVF9TRVFVRU5DRSAgICoqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKERyaXZlci0+UklPLHByZS1lbXB0aXZlKQotCi0gICBCT09UX1JVUCAtIEJPT1RfU0VRVUVOQ0UgcGFja2V0cyBhcmUgc2VudCBmcm9tIHRoZSBEcml2ZXIgdG8gUklPIGluIHJlc3BvbnNlCi0gICB0byBhIEJPT1RfUlVQIC0gQk9PVF9SRVFVRVNUIHBhY2tldC4KLSAgICovCi0jaWYgMAotI2RlZmluZQlQS1RfQ21kCQkJKFBLVF9EYXRhKzApCS8qIENvbW1hbmQgY29kZSAqLwotI2VuZGlmCi0jZGVmaW5lCVBLVF9OdW1QYWNrZXRzCQkoUEtUX0RhdGErMikJLyogUGFja2V0cyByZXF1aXJlZCB0byBsb2FkIGZpcm13YXJlICovCi0jZGVmaW5lCVBLVF9Mb2FkQmFzZQkJKFBLVF9EYXRhKzQpCS8qIFJUQSBmaXJtd2FyZSBsb2FkIGFkZHJlc3MgKi8KLSNkZWZpbmUJUEtUX0NvZGVTaXplCQkoUEtUX0RhdGErNikJLyogU2l6ZSBvZiBmaXJtd2FyZSBpbiBieXRlcyAqLwotI2RlZmluZQlQS1RfQ21kU3RyaW5nCQkoUEtUX0RhdGErOCkJLyogQ29tbWFuZCBzdHJpbmcgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKiAgIEJPT1RfUlVQIC0gQk9PVF9DT01QTEVURUQgICAqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKFJJTy0+RHJpdmVyLHByZS1lbXB0aXZlKQotCi0gICBCT09UX1JVUCAtIEJPT1RfQ09NUExFVEUgaXMgc2VudCB0byB0aGUgRHJpdmVyIGZyb20gUklPIHdoZW4gZG93bmxvYWRpbmcgb2YKLSAgIFJUQSBmaXJtd2FyZSBoYXMgY29tcGxldGVkLgotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZW5kaWYKLSNkZWZpbmUJUEtUX0xpbmtOdW1iZXIJCShQS1RfRGF0YSsxKQkvKiBMaW5rIG51bWJlciBSVEEgYm9vdGVkIG9uICovCi0jZGVmaW5lCVBLVF9TZXJpYWxOdW1iZXIJKFBLVF9EYXRhKzIpCS8qIDQgYnl0ZSBzZXJpYWwgbnVtYmVyICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKiogICBCT09UX1JVUCAtIFBhY2tldCBSZXF1ZXN0ICAgKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIChSSU8tPkRyaXZlcixwcmUtZW1wdGl2ZSkKLQotICAgQk9PVF9SVVAgcGFja2V0IHdpdGhvdXQgdGhlIFBLVF9DTURfQklUIHNldCBpbiB0aGUgUEtULT5sZW4gZmllbGQgaXMgc2VudAotICAgZnJvbSBSSU8gdG8gdGhlIERyaXZlciBhcyBhIHJlcXVlc3QgZm9yIGEgZmlybXdhcmUgYm9vdCBwYWNrZXQuICovCi0KLSNkZWZpbmUJUEtUX1NlcXVlbmNlTnVtYmVyCShQS1RfRGF0YSswKQkvKiBQYWNrZXQgc2VxdWVuY2UgbnVtYmVyICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKiAgIEJPT1RfUlVQIC0gUGFja2V0IFJlc3BvbnNlICAgKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIChEcml2ZXItPlJJTyxwcmUtZW1wdGl2ZSkKLQotICAgSW4gcmVzcG9uc2UgdG8gYSBCT09UX1JVUCBib290IHBhY2tldCByZXF1ZXN0LCB0aGUgZHJpdmVyIGZpbGxzIG91dCB0aGUgcmVzcG9uc2UKLSAgIHBhY2tldCB3aXRoIHRoZSA3MCBieXRlcyBvZiB0aGUgcmVxdWVzdGVkIHNlcXVlbmNlLgotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9TZXF1ZW5jZU51bWJlcgkoUEtUX0RhdGErMCkJLyogUGFja2V0IHNlcXVlbmNlIG51bWJlciAqLwotI2VuZGlmCi0jZGVmaW5lCVBLVF9GaXJtd2FyZVBhY2tldAkoUEtUX0RhdGErMikJLyogRmlybXdhcmUgcGFja2V0ICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgQk9PVF9SVVAgLSBJRk9BRCAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIChEcml2ZXItPlJJTyxwcmUtZW1wdGl2ZSkKLQotICAgQk9PVF9SVVAgLSBJRk9BRCBwYWNrZXRzIGFyZSBzZW50IGZyb20gdGhlIERyaXZlciB0byBhbiBSVEEgdG8gY2F1c2UgdGhlCi0gICBSVEEgdG8gc2h1dCBkb3duIGFuZCByZWJvb3QuCi0gICAqLwotI2lmIDAKLSNkZWZpbmUJUEtUX0NtZAkJCShQS1RfRGF0YSswKQkvKiBDb21tYW5kIGNvZGUgKi8KLSNlbmRpZgotI2RlZmluZQlQS1RfSWZvYWRJZDEJCShQS1RfRGF0YSsyKQkvKiBJRk9BRCBJZCAxICovCi0jZGVmaW5lCVBLVF9JZm9hZElkMgkJKFBLVF9EYXRhKzMpCS8qIElGT0FEIElkIDIgKi8KLQotI2RlZmluZQlJRk9BRElEMQkJMHhBRAotI2RlZmluZQlJRk9BRElEMgkJMHhGMAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKiogICBCT09UX1JVUCAtIElERU5USUZZICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoRHJpdmVyLT5SSU8scHJlLWVtcHRpdmUpCi0KLSAgIEJPT1RfUlVQIC0gSURFTlRJRlkgcGFja2V0cyBhcmUgc2VudCBmcm9tIHRoZSBEcml2ZXIgdG8gYW4gUlRBIHRvIGNhdXNlIHRoZQotICAgUlRBIHRvIGZsYXNoIGl0cyBMRURzIGZvciBhIHBlcmlvZCBvZiB0aW1lLgotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZW5kaWYKLSNkZWZpbmUJUEtUX0lkZW50aWZ5SWQJCShQS1RfRGF0YSsyKQkvKiBkZWZpbmVzIHBhdHRlcm4gdG8gZmxhc2ggKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKiogICBCT09UX1JVUCAtIFpPTUJJRSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKERyaXZlci0+UklPLHByZS1lbXB0aXZlKQotCi0gICBCT09UX1JVUCAtIFpPTUJJRSBwYWNrZXRzIGFyZSBzZW50IGZyb20gdGhlIERyaXZlciB0byBhbiBSVEEgdG8gY2F1c2UgdGhlCi0gICBSVEEgdG8gc2h1dCBkb3duIGFuZCBmbGFzaCBpdCdzIExFRHMuCi0gICAqLwotI2lmIDAKLSNkZWZpbmUJUEtUX0NtZAkJCShQS1RfRGF0YSswKQkvKiBDb21tYW5kIGNvZGUgKi8KLSNlbmRpZgotI2RlZmluZQlQS1RfWm9tYmllSWQxCQkoUEtUX0RhdGErMikJLyogWk9NQklFIElkIDEgKi8KLSNkZWZpbmUJUEtUX1pvbWJpZUlkMgkJKFBLVF9EYXRhKzMpCS8qIFpPTUJJRSBJZCAyICovCi0KLSNkZWZpbmUJWk9NQklFSUQxCQkweDUyCi0jZGVmaW5lCVpPTUJJRUlEMgkJMHgyMQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIEJPT1RfUlVQIC0gVUZPQUQgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoRHJpdmVyLT5SSU8scHJlLWVtcHRpdmUpCi0KLSAgIEJPT1RfUlVQIC0gVUZPQUQgcGFja2V0cyBhcmUgc2VudCBmcm9tIHRoZSBEcml2ZXIgdG8gYW4gUlRBIHRvIGNhdXNlIHRoZSBSVEEKLSAgIHRvIGFzayBpdCdzIG5laWdoYm91cmluZyBSVEEgdG8gc2h1dCBkb3duIGFuZCByZWJvb3QuCi0gICAqLwotI2lmIDAKLSNkZWZpbmUJUEtUX0NtZAkJCShQS1RfRGF0YSswKQkvKiBDb21tYW5kIGNvZGUgKi8KLSNkZWZpbmUJUEtUX0xpbmtOdW1iZXIJCShQS1RfRGF0YSsxKQkvKiBMaW5rIG51bWJlciBvZiBSVEEgdG8gVUZPQUQgKi8KLSNlbmRpZgotI2RlZmluZQlQS1RfVWZvYWRJZDEJCShQS1RfRGF0YSsyKQkvKiBVRk9BRCBJZCAxICovCi0jZGVmaW5lCVBLVF9VZm9hZElkMgkJKFBLVF9EYXRhKzMpCS8qIFVGT0FEIElkIDIgKi8KLQotI2RlZmluZQlVRk9BRElEMQkJMHgxRQotI2RlZmluZQlVRk9BRElEMgkJMHgwRAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIEJPT1RfUlVQIC0gSVdBSVQgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoRHJpdmVyLT5SSU8scHJlLWVtcHRpdmUpCi0KLSAgIEJPT1RfUlVQIC0gSVdBSVQgcGFja2V0cyBhcmUgc2VudCBmcm9tIHRoZSBEcml2ZXIgdG8gYW4gUlRBIHRvIGNhdXNlIHRoZSBSVEEKLSAgIHRvIHBhdXNlIGJvb3Rpbmcgb24gdGhlIHNwZWNpZmllZCBsaW5rIGZvciAzMCBzZWNvbmRzLgotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZGVmaW5lCVBLVF9MaW5rTnVtYmVyCQkoUEtUX0RhdGErMSkJLyogTGluayBudW1iZXIgb2YgUlRBIHRvIFVGT0FEICovCi0jZW5kaWYKLSNkZWZpbmUJUEtUX0l3YWl0SWQxCQkoUEtUX0RhdGErMikJLyogSVdBSVQgSWQgMSAqLwotI2RlZmluZQlQS1RfSXdhaXRJZDIJCShQS1RfRGF0YSszKQkvKiBJV0FJVCBJZCAyICovCi0KLSNkZWZpbmUJSVdBSVRJRDEJCTB4REUKLSNkZWZpbmUJSVdBSVRJRDIJCTB4QjEKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKiAgIFJPVVRFX1JVUCAtIFJPVVRFX1JFUVVFU1QgICAqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogKFJJTy0+RHJpdmVyLHByZS1lbXB0aXZlKQotCi0gICBST1VURV9SVVAgLSBST1VURV9SRVFVRVNUIHBhY2tldHMgYXJlIHNlbnQgZnJvbSBhIG5ld2x5IGJvb3RlZCBvciBjb25uZWN0ZWQKLSAgIFJUQSB0byBhIERyaXZlciB0byByZXF1ZXN0IGFuIElEIChSVVAgb3IgdW5pdCBudW1iZXIpLgotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZW5kaWYKLSNkZWZpbmUJUEtUX1NlcmlhbE51bWJlcgkoUEtUX0RhdGErMikJLyogNCBieXRlIHNlcmlhbCBudW1iZXIgKi8KLSNkZWZpbmUJUEtUX01vZHVsZVR5cGVzCQkoUEtUX0RhdGErNikJLyogUlRBIE1vZHVsZSB0eXBlcyAqLwotCi0vKiBNb2R1bGVUeXBlcyBkZWZpbml0aW9ucy4uLiAqLwotI2RlZmluZQlNT0RfQkxBTksJCTB4MEYJLyogQmxhbmsgcGxhdGUgYXR0YWNoZWQgKi8KLSNkZWZpbmUJTU9EX1JTMjMyREIyNQkJMHgwMAkvKiBSUzIzMiBEQjI1IGNvbm5lY3RvciAqLwotI2RlZmluZQlNT0RfUlMyMzJSSjQ1CQkweDAxCS8qIFJTMjMyIFJKNDUgY29ubmVjdG9yICovCi0jZGVmaW5lCU1PRF9SUzQyMkRCMjUJCTB4MDIJLyogUlM0MjIgREIyNSBjb25uZWN0b3IgKi8KLSNkZWZpbmUJTU9EX1JTNDg1REIyNQkJMHgwMwkvKiBSUzQ4NSBEQjI1IGNvbm5lY3RvciAqLwotI2RlZmluZQlNT0RfUEFSQUxMRUwJCTB4MDQJLyogQ2VudHJvbmljcyBwYXJhbGxlbCAqLwotCi0jZGVmaW5lCU1PRDIJCQkweDA4CS8qIFNldCB0byBpbmRpY2F0ZSBSZXYyIG1vZHVsZSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKiAgIFJPVVRFX1JVUCAtIFJPVVRFX0ZPQUQgICAqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoRHJpdmVyLT5SSU8scHJlLWVtcHRpdmUpCi0KLSAgIFJPVVRFX1JVUCAtIFJPVVRFX0ZPQUQgcGFja2V0IGlzIHNlbnQgYXMgYSByZXNwb25zZSB0byBhIFJPVVRFX1JVUCAtIFJPVVRFX1JFUVVFU1QKLSAgIHBhY2tldCB0byBjYXVzZSB0aGUgUlRBIHRvICJGYWxsIE92ZXIgQW5kIERpZSIuLCBpLmUuIHNodXRkb3duIGFuZCByZWJvb3QuCi0gICAqLwotI2lmIDAKLSNkZWZpbmUJUEtUX0NtZAkJCShQS1RfRGF0YSswKQkvKiBDb21tYW5kIGNvZGUgKi8KLSNlbmRpZgotI2RlZmluZQlQS1RfUm91dGVDbWRTdHJpbmcJKFBLVF9EYXRhKzIpCS8qIENvbW1hbmQgc3RyaW5nICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKiAgIFJPVVRFX1JVUCAtIFJPVVRFX0FMTE9DQVRFICAgKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIChEcml2ZXItPlJJTyxwcmUtZW1wdGl2ZSkKLQotICAgUk9VVEVfUlVQIC0gUk9VVEVfQUxMT0NBVEUgcGFja2V0IGlzIHNlbnQgYXMgYSByZXNwb25zZSB0byBhIFJPVVRFX1JVUCAtIFJPVVRFX1JFUVVFU1QKLSAgIHBhY2tldCB0byBhbGxvY2F0ZSB0aGUgUlRBJ3MgSWQgbnVtYmVyIChSVVAgbnVtYmVyIDEuLjE2KQotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZW5kaWYKLSNkZWZpbmUJUEtUX0lkTnVtCQkoUEtUX0RhdGErMSkJLyogUlVQIG51bWJlciBmb3IgcG9ydHMgMS4uOCAqLwotI2lmIDAKLSNkZWZpbmUJUEtUX1JvdXRlQ21kU3RyaW5nCShQS1RfRGF0YSsyKQkvKiBDb21tYW5kIHN0cmluZyAqLwotI2VuZGlmCi0jZGVmaW5lCVBLVF9JZE51bTIJCShQS1RfRGF0YSsweDE3KQkvKiBSVVAgbnVtYmVyIGZvciBwb3J0cyA5Li4xNiAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKiogICBST1VURV9SVVAgLSBST1VURV9UT1BPTE9HWSAgICoqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAoUklPLT5Ecml2ZXIscHJlLWVtcHRpdmUpCi0KLSAgIFJPVVRFX1JVUCAtIFJPVVRFX1RPUE9MT0dZIHBhY2tldCBpcyBzZW50IHRvIGluZm9ybSB0aGUgZHJpdmVyIG9mIGFuIFJUQSdzCi0gICBjdXJyZW50IGxpbmsgc3RhdHVzLgotICAgKi8KLSNpZiAwCi0jZGVmaW5lCVBLVF9DbWQJCQkoUEtUX0RhdGErMCkJLyogQ29tbWFuZCBjb2RlICovCi0jZW5kaWYKLSNkZWZpbmUJUEtUX0xpbmsxUnVwCQkoUEtUX0RhdGErMikJLyogTGluayAxIFJVUCBudW1iZXIgKi8KLSNkZWZpbmUJUEtUX0xpbmsxTGluawkJKFBLVF9EYXRhKzMpCS8qIExpbmsgMSBsaW5rIG51bWJlciAqLwotI2RlZmluZQlQS1RfTGluazJSdXAJCShQS1RfRGF0YSs0KQkvKiBMaW5rIDIgUlVQIG51bWJlciAqLwotI2RlZmluZQlQS1RfTGluazJMaW5rCQkoUEtUX0RhdGErNSkJLyogTGluayAyIGxpbmsgbnVtYmVyICovCi0jZGVmaW5lCVBLVF9MaW5rM1J1cAkJKFBLVF9EYXRhKzYpCS8qIExpbmsgMyBSVVAgbnVtYmVyICovCi0jZGVmaW5lCVBLVF9MaW5rM0xpbmsJCShQS1RfRGF0YSs3KQkvKiBMaW5rIDMgbGluayBudW1iZXIgKi8KLSNkZWZpbmUJUEtUX0xpbms0UnVwCQkoUEtUX0RhdGErOCkJLyogTGluayA0IFJVUCBudW1iZXIgKi8KLSNkZWZpbmUJUEtUX0xpbms0TGluawkJKFBLVF9EYXRhKzkpCS8qIExpbmsgNCBsaW5rIG51bWJlciAqLwotI2RlZmluZQlQS1RfUnRhVnBkUHJvbQkJKFBLVF9EYXRhKzEwKQkvKiAzMiBieXRlcyBvZiBSVEEgVlBEIFBST00gQ29udGVudHMgKi8KLQotI2VuZGlmCQkJCS8qIF9zeHdpbmlmX2ggKi8KLQotLyogRW5kIG9mIFJJT1dJTklGLkggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlzY29zLmggYi9kcml2ZXJzL2NoYXIvcmlvL3Jpc2Nvcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGQ2NmQwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlzY29zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKiAgUGVybGUgU3BlY2lhbGl4IGRyaXZlciBmb3IgTGludXgKLSoqICBQb3J0ZWQgZnJvbSBleGlzdGluZyBSSU8gRHJpdmVyIGZvciBTQ08gc291cmNlcy4KLSAqCi0gKiAgKEMpIDE5OTAgLSAyMDAwIFNwZWNpYWxpeCBJbnRlcm5hdGlvbmFsIEx0ZC4sIEJ5ZmxlZXQsIFN1cnJleSwgVUsuCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotKioKLSoqCU1vZHVsZQkJOiByaXNjb3MuaAotKioJU0lECQk6IDEuMgotKioJTGFzdCBNb2RpZmllZAk6IDExLzYvOTggMTE6MzQ6MTkKLSoqCVJldHJpZXZlZAk6IDExLzYvOTggMTE6MzQ6MjIKLSoqCi0qKiAgaWRlbnQgQCgjKXJpc2Nvcy5oCTEuMgotKioKLSoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWZuZGVmIF9fcmlvX3Jpc2Nvc19oX18KLSNkZWZpbmUgX19yaW9fcmlzY29zX2hfXwotCi0jaWZkZWYgU0NDU19MQUJFTFMKLXN0YXRpYyBjaGFyICpfcmlzY29zX2hfc2Njc18gPSAiQCgjKXJpc2Nvcy5oCTEuMiI7Ci0jZW5kaWYKLQotLyoKLSoqIFRoaXMgbW9kdWxlIHVzZWQgdG8gZGVmaW5lIGFsbCB0aG9zZSBsaXR0bGUgaXRzeSBiaXRzIHJlcXVpcmVkIGZvciBSSVNDL09TCi0qKiBub3cgaXQncyBmdWxsIG9mIG51bGwgbWFjcm9zLgotKi8KLQotLyoKLSoqCVJCWVRFIHJlYWRzIGEgYnl0ZSBmcm9tIGEgbG9jYXRpb24uCi0qKglSV09SRCByZWFkcyBhIHdvcmQgZnJvbSBhIGxvY2F0aW9uLgotKioJV0JZVEUgd3JpdGVzIGEgYnl0ZSB0byBhIGxvY2F0aW9uLgotKioJV1dPUkQgd3JpdGVzIGEgd29yZCB0byBhIGxvY2F0aW9uLgotKioJUklORFcgcmVhZHMgYSB3b3JkIHRocm91Z2ggYSBwb2ludGVyLgotKioJV0lORFcgd3JpdGVzIGEgd29yZCB0aHJvdWdoIGEgcG9pbnRlci4KLSoqCVJJT1NXQUIgc3dhcHMgdGhlIHR3byBieXRlcyBvZiBhIHdvcmQsIGlmIG5lZWRlZC4KLSovCi0KLSNkZWZpbmUJUklPU1dBQihOKSAgICAgIChOKQotI2RlZmluZQlXQllURShBLFYpCShBKT0odWNoYXIpKFYpCi0jZGVmaW5lIFdXT1JEKEEsVikJKEEpPSh1c2hvcnQpKFYpCi0jZGVmaW5lIFJCWVRFKEEpCSh1Y2hhcikoQSkKLSNkZWZpbmUgUldPUkQoQSkJKHVzaG9ydCkoQSkKLSNkZWZpbmUgUklORFcoQSkJKCoodXNob3J0ICopKEEpKQotI2RlZmluZSBXSU5EVyhBLFYpCSgqKHVzaG9ydCAqKShBKT0odXNob3J0KShWKSkKLQotI2VuZGlmCQkJCS8qIF9fcmlvX3Jpc2Nvc19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcnRhaHcuaCBiL2RyaXZlcnMvY2hhci9yaW8vcnRhaHcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZjMmNkZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3J0YWh3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKgotICoqKioqKiogICAgICAgICAgICAgICAgUiBUIEEgICAgSCBBIFIgRCBXIEEgUiBFCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotIEF1dGhvciAgOiBJYW4gTmFuZGhyYQotIERhdGUgICAgOgotCi0gKgotICogIChDKSAxOTkwIC0gMjAwMCBTcGVjaWFsaXggSW50ZXJuYXRpb25hbCBMdGQuLCBCeWZsZWV0LCBTdXJyZXksIFVLLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotIFZlcnNpb24gOiAwLjAxCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHMKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIERhdGUgICAgIEJ5ICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIGxpbnQKLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9yaW9fcnRhaHdfaF9zY2NzID0gIkAoIylydGFody5oCTEuNSI7Ci0jZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lCVdBVENIRE9HX0FERFIJKCh1bnNpZ25lZCBzaG9ydCAqKTB4N2EwMCkKLSNkZWZpbmUgUlRBX0xFRF9BRERSCSgodW5zaWduZWQgc2hvcnQgKikweDdjMDApCi0jZGVmaW5lIFNFUklBTE5VTV9BRERSCSgodW5zaWduZWQgY2hhciAqKTB4NzgwOSkKLSNkZWZpbmUgTEFUQ0hfQUREUiAgICAgICgodW5zaWduZWQgY2hhciAqKTB4NzgwMCkKLQotLyoKLSoqIEhlcmUgd2UgZGVmaW5lIHdoZXJlIHRoZSBjZDE0MDAgY2hpcHMgYXJlIGluIG1lbW9yeS4KLSovCi0jZGVmaW5lIENEMTQwMF9PTkVfQUREUgkJKDB4NzMwMCkKLSNkZWZpbmUgQ0QxNDAwX1RXT19BRERSCQkoMHg3MjAwKQotI2RlZmluZSBDRDE0MDBfVEhSRUVfQUREUgkoMHg3MTAwKQotI2RlZmluZSBDRDE0MDBfRk9VUl9BRERSCSgweDcwMDApCi0KLS8qCi0qKiBEZWZpbmUgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBtb2R1bGVzIHdlIGNhbiBoYXZlCi0qLwotZW51bSBtb2R1bGUgewotCU1PRF9CTEFOSyA9IDB4MGYsCS8qIEJsYW5rIHBsYXRlIGF0dGFjaGVkICovCi0JTU9EX1JTMjMyREIyNSA9IDB4MDAsCS8qIFJTMjMyIERCMjUgY29ubmVjdG9yICovCi0JTU9EX1JTMjMyUko0NSA9IDB4MDEsCS8qIFJTMjMyIFJKNDUgY29ubmVjdG9yICovCi0JTU9EX1JTNDIyREIyNSA9IDB4MDIsCS8qIFJTNDIyIERCMjUgY29ubmVjdG9yICovCi0JTU9EX1JTNDg1REIyNSA9IDB4MDMsCS8qIFJTNDg1IERCMjUgY29ubmVjdG9yICovCi0JTU9EX1BBUkFMTEVMID0gMHgwNAkvKiBDZW50cm9uaWNzIHBhcmFsbGVsICovCi19OwotCi0jZGVmaW5lIFRZUEVfSE9TVAkwCi0jZGVmaW5lIFRZUEVfUlRBOAkxCi0jZGVmaW5lIFRZUEVfUlRBMTYJMgotCi0jZGVmaW5lCVdBVENIX0RPRwlXQVRDSERPR19BRERSCi0KLS8qKioqKioqKioqKiBlbmQgb2YgZmlsZSAqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcnVwc3RhdC5oIGIvZHJpdmVycy9jaGFyL3Jpby9ydXBzdGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZDgyOGMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9ydXBzdGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgIFJVUFNUQVQKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gQXV0aG9yICA6IEplcmVteSBSb2xscwotIERhdGUgICAgOgotCi0gKgotICogIChDKSAxOTkwIC0gMjAwMCBTcGVjaWFsaXggSW50ZXJuYXRpb25hbCBMdGQuLCBCeWZsZWV0LCBTdXJyZXksIFVLLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotIFZlcnNpb24gOiAwLjAxCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHMKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIERhdGUgICAgIEJ5ICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9ydXBzdGF0X2gKLSNkZWZpbmUgX3J1cHN0YXRfaAotCi0jaWZuZGVmIGxpbnQKLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9yaW9fcnVwc3RhdF9oX3NjY3MgPSAiQCgjKXJ1cHN0YXQuaAkxLjEiOwotI2VuZGlmCi0jZW5kaWYKLQotI2RlZmluZSAgICBTVEFUVVNfU1lOQyAgICAwCi0jZGVmaW5lICAgIFNUQVRVU19SRVFfVE9QIDEKLSNkZWZpbmUgICAgU1RBVFVTX1RPUE9MT0dZICAgIDIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3NlbGZ0ZXN0LmggYi9kcml2ZXJzL2NoYXIvcmlvL3NlbGZ0ZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhM2RiYTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9zZWxmdGVzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSoqIEZpbGU6CQlzZWxmdGVzdC5oCi0qKgotKiogQXV0aG9yOgkJRGF2aWQgRGl4Ci0qKgotKiogQ3JlYXRlZDoJCTE1dGggTWFyY2ggMTk5MwotKioKLSoqIExhc3QgbW9kaWZpZWQ6CTk0LzA2LzE0Ci0qKgotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qLwotCi0jaWZuZGVmCV9zZWxmdGVzdHNfaF8KLSNkZWZpbmUgX3NlbGZ0ZXN0c19oXwotCi0vKgotKiogU2VsZnRlc3QgaWRlbnRpZmllci4uLgotKi8KLSNkZWZpbmUgU0VMRlRFU1RfTUFHSUMJMHg1YTVhCi0KLS8qCi0qKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHBhY2tldCB0aGF0IGlzIHNlbnQgYmFjayBhZnRlciBlYWNoCi0qKiBzZWxmdGVzdCBvbiBhIGJvb3RpbmcgUlRBLgotKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlzaG9ydCBtYWdpYzsJCS8qIElkZW50aWZpZXMgcGFja2V0IHR5cGUgKi8KLQlpbnQgdGVzdDsJCS8qIFRlc3QgbnVtYmVyLCBzZWUgYmVsb3cgKi8KLQl1bnNpZ25lZCBpbnQgcmVzdWx0OwkvKiBSZXN1bHQgdmFsdWUgKi8KLQl1bnNpZ25lZCBpbnQgZGF0YUluOwotCXVuc2lnbmVkIGludCBkYXRhT3V0OwotfSBzZWxmdGVzdFN0cnVjdDsKLQotLyoKLSoqIFRoZSBkaWZmZXJlbnQgdGVzdHMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIGZvbGxvd2luZyBkYXRhIHZhbHVlcy4KLSovCi1lbnVtIHRlc3QgewotCVRFU1RTX0NPTVBMRVRFID0gMHgwMCwKLQlNRU1URVNUX0FERFIgPSAweDAxLAotCU1FTVRFU1RfQklUID0gMHgwMiwKLQlNRU1URVNUX0ZJTEwgPSAweDAzLAotCU1FTVRFU1RfREFUQUJVUyA9IDB4MDQsCi0JTUVNVEVTVF9BRERSQlVTID0gMHgwNSwKLQlDRDE0MDBfSU5JVCA9IDB4MTAsCi0JQ0QxNDAwX0xPT1AgPSAweDExLAotCUNEMTQwMF9JTlRFUlJVUFQgPSAweDEyCi19OwotCi1lbnVtIHJlc3VsdCB7Ci0JRV9QT1JUID0gMHgxMCwKLQlFX1RYID0gMHgxMSwKLQlFX1JYID0gMHgxMiwKLQlFX0VYQ0VQVCA9IDB4MTMsCi0JRV9DT01QQVJFID0gMHgxNCwKLQlFX01PREVNID0gMHgxNSwKLQlFX1RJTUVPVVQgPSAweDE2LAotCUVfSU5URVJSVVBUID0gMHgxNwotfTsKLSNlbmRpZgkJCQkvKiBfc2VsZnRlc3RzX2hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3N5c21hcC5oIGIvZHJpdmVycy9jaGFyL3Jpby9zeXNtYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFjNmYxMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3N5c21hcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqICAgICAgICAgIFMgWSBTIFQgRSBNICAgTSBBIFAgICBIIEUgQSBEIEUgUgotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSBBdXRob3IgIDogSWFuIE5hbmRocmEKLSBEYXRlICAgIDoKLQotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSBWZXJzaW9uIDogMC4wMQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RzCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBEYXRlICAgICBCeSAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBsaW50Ci0jaWZkZWYgU0NDU19MQUJFTFMKLXN0YXRpYyBjaGFyICpfcmlvX3N5c21hcF9oX3NjY3MgPSAiQCgjKXN5c21hcC5oCTEuMSI7Ci0jZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIFNZU1RFTV9NQVBfTEVOICAgICA2NAkvKiBMZW4gb2YgU3lzdGVtIE1hcCBhcnJheSAqLwotCi0KLXR5cGVkZWYgc3RydWN0IFNZU19NQVAgU1lTX01BUDsKLXR5cGVkZWYgc3RydWN0IFNZU19NQVBfTElOSyBTWVNfTUFQX0xJTks7Ci0KLXN0cnVjdCBTWVNfTUFQX0xJTksgewotCXNob3J0IGlkOwkJLyogVW5pdCBJZCAqLwotCXNob3J0IGxpbms7CQkvKiBJZCdzIExpbmsgKi8KLQlzaG9ydCBiZWVuX2hlcmU7CS8qIFVzZWQgYnkgbWFwX2dlbiAqLwotfTsKLQotc3RydWN0IFNZU19NQVAgewotCWNoYXIgc2VyaWFsX251bVs0XTsKLQlTWVNfTUFQX0xJTksgbGlua1s0XTsKLX07Ci0KLQotLyoqKioqKioqKioqIGVuZCBvZiBmaWxlICoqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby90aW1lb3V0cy5oIGIvZHJpdmVycy9jaGFyL3Jpby90aW1lb3V0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGI1YmUzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vdGltZW91dHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgIFQgSSBNIEUgTyBVIFQgUwotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSBBdXRob3IgIDogSWFuIE5hbmRocmEKLSBEYXRlICAgIDoKLQotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSBWZXJzaW9uIDogMC4wMQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RzCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBEYXRlICAgICBCeSAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBsaW50Ci0jaWZkZWYgU0NDU19MQUJFTFMKLXN0YXRpYyBjaGFyICpfcmlvX2RlZmF1bHRzX2hfc2NjcyA9ICJAKCMpdGltZW91dHMuaAkxLjMiOwotI2VuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBNSUxMSVNFQ09ORCAgICAgICAgICAgKGludCkgKDEwMDAvNjQpCS8qIDE1LjYyNSBsb3cgdGlja3MgKi8KLSNkZWZpbmUgU0VDT05EICAgICAgICAgICAgICAgIChpbnQpIDE1NjI1CS8qIExvdyBwcmlvcml0eSB0aWNrcyAqLwotCi0jZGVmaW5lIFRYX1RJTUVPVVQgICAgICAgICAgKGludCkgKDIwMCAqIE1JTExJU0VDT05EKQotCi0KLS8qKioqKioqKioqKiBlbmQgb2YgZmlsZSAqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvYW1kdHAuYyBiL2RyaXZlcnMvaWVlZTEzOTQvYW1kdHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTczOTBkNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2FtZHRwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjk3ICswLDAgQEAKLS8qIC0qLSBjLWJhc2ljLW9mZnNldDogOCAtKi0KLSAqCi0gKiBhbWR0cC5jIC0gQXVkaW8gYW5kIE11c2ljIERhdGEgVHJhbnNtaXNzaW9uIFByb3RvY29sIERyaXZlcgotICogQ29weXJpZ2h0IChDKSAyMDAxIEtyaXN0aWFuIEj4Z3NiZXJnCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0vKiBPVkVSVklFVwotICogLS0tLS0tLS0KLSAqCi0gKiBUaGUgQU1EVFAgZHJpdmVyIGlzIGRlc2lnbmVkIHRvIGV4cG9zZSB0aGUgSUVFRTEzOTQgYnVzIGFzIGEKLSAqIHJlZ3VsYXIgT1NTIHNvdW5kY2FyZCwgaS5lLiB5b3UgY2FuIGxpbmsgL2Rldi9kc3AgdG8gL2Rldi9hbWR0cCBhbmQKLSAqIHRoZW4geW91ciBmYXZvdXJpdGUgTVAzIHBsYXllciwgZ2FtZSBvciB3aGF0ZXZlciBzb3VuZCBwcm9ncmFtIHdpbGwKLSAqIG91dHB1dCB0byBhbiBJRUVFMTM5NCBpc29jaHJvbm91cyBjaGFubmVsLiAgVGhlIHNpZ25hbCBkZXN0aW5hdGlvbgotICogY291bGQgYmUgYSBzZXQgb2YgSUVFRTEzOTQgbG91ZHNwZWFrZXJzIChpZiBhbmQgd2hlbiBzdWNoIHRoaW5ncwotICogYmVjb21lIGF2YWlsYWJsZSkgb3IgYW4gYW1wbGlmaWVyIHdpdGggSUVFRTEzOTQgaW5wdXQgKGxpa2UgdGhlCi0gKiBTb255IFNUUi1MU0ExKS4gIFRoZSBkcml2ZXIgb25seSBoYW5kbGVzIHRoZSBhY3R1YWwgc3RyZWFtaW5nLCBzb21lCi0gKiBjb25uZWN0aW9uIG1hbmFnZW1lbnQgaXMgYWxzbyByZXF1aXJlZCBmb3IgdGhpcyB0byBhY3R1YWxseSB3b3JrLgotICogVGhhdCBpcyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIGRyaXZlciwgYW5kIGZ1cnRoZXJtb3JlIGl0IGlzIG5vdAotICogcmVhbGx5IHN0YW5kYXJkaXplZCB5ZXQuCi0gKgotICogVGhlIEF1ZGlvIGFuZCBNdXNpYyBEYXRhIFRyYW5taXNzaW9uIFByb3RvY29sIGlzIGF2YWlsYWJsZSBhdAotICoKLSAqICAgICBodHRwOi8vd3d3LjEzOTR0YS5vcmcvRG93bmxvYWQvVGVjaG5vbG9neS9TcGVjaWZpY2F0aW9ucy8yMDAxL0FNMjBGaW5hbC1qZjIucGRmCi0gKgotICoKLSAqIFRPRE8KLSAqIC0tLS0KLSAqCi0gKiAtIFdlIHNob3VsZCBiZSBhYmxlIHRvIGNoYW5nZSBpbnB1dCBzYW1wbGUgZm9ybWF0IGJldHdlZW4gTEUvQkUsIGFzCi0gKiAgIHdlIGFscmVhZHkgc2hpZnQgdGhlIGJ5dGVzIGFyb3VuZCB3aGVuIHdlIGNvbnN0cnVjdCB0aGUgaXNvCi0gKiAgIHBhY2tldHMuCi0gKgotICogLSBGaXggRE1BIHN0b3AgYWZ0ZXIgYnVzIHJlc2V0IQotICoKLSAqIC0gQ2xlYW4gdXAgaXNvIGNvbnRleHQgaGFuZGxpbmcgaW4gb2hjaTEzOTQuCi0gKgotICoKLSAqIE1BWUJFIFRPRE8KLSAqIC0tLS0tLS0tLS0KLSAqCi0gKiAtIFJlY2VpdmUgZGF0YSBmb3IgbG9jYWwgcGxheWJhY2sgb3IgcmVjb3JkaW5nLiAgUGxheWJhY2sgcmVxdWlyZXMKLSAqICAgc29mdCBzeW5jaW5nIHdpdGggdGhlIHNvdW5kIGNhcmQuCi0gKgotICogLSBTaWduYWwgcHJvY2Vzc2luZywgaS5lLiByZWNlaXZlIHBhY2tldHMsIGRvIHNvbWUgcHJvY2Vzc2luZywgYW5kCi0gKiAgIHRyYW5zbWl0IHRoZW0gYWdhaW4gdXNpbmcgdGhlIHNhbWUgcGFja2V0IHN0cnVjdHVyZSBhbmQgdGltZXN0YW1wcwotICogICBvZmZzZXQgYnkgcHJvY2Vzc2luZyB0aW1lLgotICoKLSAqIC0gTWF5YmUgbWFrZSBhbiBBTFNBIGludGVyZmFjZSwgdGhhdCBpcywgY3JlYXRlIGEgZmlsZV9vcHMKLSAqICAgaW1wbGVtZW50YXRpb24gdGhhdCByZWNvZ25pemVzIEFMU0EgaW9jdGxzIGFuZCB1c2VzIGRlZmF1bHRzIGZvcgotICogICB0aGluZ3MgdGhhdCBjYW4ndCBiZSBjb250cm9sbGVkIHRocm91Z2ggQUxTQSAoaXNvIGNoYW5uZWwpLgotICoKLSAqICAgQ2hhbmdlczoKLSAqCi0gKiAtIEF1ZGl0IGNvcHlfZnJvbV91c2VyIGluIGFtZHRwX3dyaXRlLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICBEYW5pZWxlIEJlbGx1Y2NpIDxiZWxsdWNkYUB0aXNjYWxpLml0PgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KLSNpbmNsdWRlICJob3N0cy5oIgotI2luY2x1ZGUgImhpZ2hsZXZlbC5oIgotI2luY2x1ZGUgImllZWUxMzk0LmgiCi0jaW5jbHVkZSAiaWVlZTEzOTRfY29yZS5oIgotI2luY2x1ZGUgIm9oY2kxMzk0LmgiCi0KLSNpbmNsdWRlICJhbWR0cC5oIgotI2luY2x1ZGUgImNtcC5oIgotCi0jZGVmaW5lIEZNVF9BTURUUCAweDEwCi0jZGVmaW5lIEZERl9BTTgyNCAweDAwCi0jZGVmaW5lIEZERl9TRkNfMzJLSFogICAweDAwCi0jZGVmaW5lIEZERl9TRkNfNDRLMUhaICAweDAxCi0jZGVmaW5lIEZERl9TRkNfNDhLSFogICAweDAyCi0jZGVmaW5lIEZERl9TRkNfODhLMkhaICAweDAzCi0jZGVmaW5lIEZERl9TRkNfOTZLSFogICAweDA0Ci0jZGVmaW5lIEZERl9TRkNfMTc2SzRIWiAweDA1Ci0jZGVmaW5lIEZERl9TRkNfMTkyS0haICAweDA2Ci0KLXN0cnVjdCBkZXNjcmlwdG9yX2Jsb2NrIHsKLQlzdHJ1Y3Qgb3V0cHV0X21vcmVfaW1tZWRpYXRlIHsKLQkJdTMyIGNvbnRyb2w7Ci0JCXUzMiBwYWQwOwotCQl1MzIgc2tpcDsKLQkJdTMyIHBhZDE7Ci0JCXUzMiBoZWFkZXJbNF07Ci0JfSBoZWFkZXJfZGVzYzsKLQotCXN0cnVjdCBvdXRwdXRfbGFzdCB7Ci0JCXUzMiBjb250cm9sOwotCQl1MzIgZGF0YV9hZGRyZXNzOwotCQl1MzIgYnJhbmNoOwotCQl1MzIgc3RhdHVzOwotCX0gcGF5bG9hZF9kZXNjOwotfTsKLQotc3RydWN0IHBhY2tldCB7Ci0Jc3RydWN0IGRlc2NyaXB0b3JfYmxvY2sgKmRiOwotCWRtYV9hZGRyX3QgZGJfYnVzOwotCXN0cnVjdCBpc29fcGFja2V0ICpwYXlsb2FkOwotCWRtYV9hZGRyX3QgcGF5bG9hZF9idXM7Ci19OwotCi0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCi0jaWYgZGVmaW5lZCBfX0JJR19FTkRJQU5fQklURklFTEQKLQotc3RydWN0IGlzb19wYWNrZXQgewotCS8qIEZpcnN0IHF1YWRsZXQgKi8KLQl1bnNpZ25lZCBpbnQgZGJzICAgICAgOiA4OwotCXVuc2lnbmVkIGludCBlb2gwICAgICA6IDI7Ci0JdW5zaWduZWQgaW50IHNpZCAgICAgIDogNjsKLQotCXVuc2lnbmVkIGludCBkYmMgICAgICA6IDg7Ci0JdW5zaWduZWQgaW50IGZuICAgICAgIDogMjsKLQl1bnNpZ25lZCBpbnQgcXBjICAgICAgOiAzOwotCXVuc2lnbmVkIGludCBzcGggICAgICA6IDE7Ci0JdW5zaWduZWQgaW50IHJlc2VydmVkIDogMjsKLQotCS8qIFNlY29uZCBxdWFkbGV0ICovCi0JdW5zaWduZWQgaW50IGZkZiAgICAgIDogODsKLQl1bnNpZ25lZCBpbnQgZW9oMSAgICAgOiAyOwotCXVuc2lnbmVkIGludCBmbXQgICAgICA6IDY7Ci0KLQl1bnNpZ25lZCBpbnQgc3l0ICAgICAgOiAxNjsKLQotICAgICAgICBxdWFkbGV0X3QgZGF0YVswXTsKLX07Ci0KLSNlbGlmIGRlZmluZWQgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECi0KLXN0cnVjdCBpc29fcGFja2V0IHsKLQkvKiBGaXJzdCBxdWFkbGV0ICovCi0JdW5zaWduZWQgaW50IHNpZCAgICAgIDogNjsKLQl1bnNpZ25lZCBpbnQgZW9oMCAgICAgOiAyOwotCXVuc2lnbmVkIGludCBkYnMgICAgICA6IDg7Ci0KLQl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQgOiAyOwotCXVuc2lnbmVkIGludCBzcGggICAgICA6IDE7Ci0JdW5zaWduZWQgaW50IHFwYyAgICAgIDogMzsKLQl1bnNpZ25lZCBpbnQgZm4gICAgICAgOiAyOwotCXVuc2lnbmVkIGludCBkYmMgICAgICA6IDg7Ci0KLQkvKiBTZWNvbmQgcXVhZGxldCAqLwotCXVuc2lnbmVkIGludCBmbXQgICAgICA6IDY7Ci0JdW5zaWduZWQgaW50IGVvaDEgICAgIDogMjsKLQl1bnNpZ25lZCBpbnQgZmRmICAgICAgOiA4OwotCi0JdW5zaWduZWQgaW50IHN5dCAgICAgIDogMTY7Ci0KLQlxdWFkbGV0X3QgZGF0YVswXTsKLX07Ci0KLSNlbHNlCi0KLSNlcnJvciBVbmtub3duIGJpdGZpZWxkIHR5cGUKLQotI2VuZGlmCi0KLXN0cnVjdCBmcmFjdGlvbiB7Ci0JaW50IGludGVnZXI7Ci0JaW50IG51bWVyYXRvcjsKLQlpbnQgZGVub21pbmF0b3I7Ci19OwotCi0jZGVmaW5lIFBBQ0tFVF9MSVNUX1NJWkUgMjU2Ci0jZGVmaW5lIE1BWF9QQUNLRVRfTElTVFMgNAotCi1zdHJ1Y3QgcGFja2V0X2xpc3QgewotCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKLQlpbnQgbGFzdF9jeWNsZV9jb3VudDsKLQlzdHJ1Y3QgcGFja2V0IHBhY2tldHNbUEFDS0VUX0xJU1RfU0laRV07Ci19OwotCi0jZGVmaW5lIEJVRkZFUl9TSVpFIDEyOAotCi0vKiBUaGlzIGltcGxlbWVudHMgYSBjaXJjdWxhciBidWZmZXIgZm9yIGluY29taW5nIHNhbXBsZXMuICovCi0KLXN0cnVjdCBidWZmZXIgewotCXNpemVfdCBoZWFkLCB0YWlsLCBsZW5ndGgsIHNpemU7Ci0JdW5zaWduZWQgY2hhciBkYXRhWzBdOwotfTsKLQotc3RydWN0IHN0cmVhbSB7Ci0JaW50IGlzb19jaGFubmVsOwotCWludCBmb3JtYXQ7Ci0JaW50IHJhdGU7Ci0JaW50IGRpbWVuc2lvbjsKLQlpbnQgZmRmOwotCWludCBtb2RlOwotCWludCBzYW1wbGVfZm9ybWF0OwotCXN0cnVjdCBjbXBfcGNyICpvcGNyOwotCi0JLyogSW5wdXQgc2FtcGxlcyBhcmUgY29waWVkIGhlcmUuICovCi0Jc3RydWN0IGJ1ZmZlciAqaW5wdXQ7Ci0KLQkvKiBJU08gUGFja2VyIHN0YXRlICovCi0JdW5zaWduZWQgY2hhciBkYmM7Ci0Jc3RydWN0IHBhY2tldF9saXN0ICpjdXJyZW50X3BhY2tldF9saXN0OwotCWludCBjdXJyZW50X3BhY2tldDsKLQlzdHJ1Y3QgZnJhY3Rpb24gcmVhZHlfc2FtcGxlcywgc2FtcGxlc19wZXJfY3ljbGU7Ci0KLQkvKiBXZSB1c2UgdGhlc2UgdG8gZ2VuZXJhdGUgY29udHJvbCBiaXRzIHdoZW4gd2UgYXJlIHBhY2tpbmcKLQkgKiBpZWM5NTggZGF0YS4KLQkgKi8KLQlpbnQgaWVjOTU4X2ZyYW1lX2NvdW50OwotCWludCBpZWM5NThfcmF0ZV9jb2RlOwotCi0JLyogVGhlIGN5Y2xlX2NvdW50IGFuZCBjeWNsZV9vZmZzZXQgZmllbGRzIGFyZSB1c2VkIGZvciB0aGUKLQkgKiBzeW5jaHJvbml6YXRpb24gdGltZXN0YW1wcyAoc3l0KSBpbiB0aGUgY2lwIGhlYWRlci4gIFRoZXkKLQkgKiBhcmUgaW5jcmVtZW50ZWQgYnkgYXQgbGVhc3QgYSBjeWNsZSBldmVyeSB0aW1lIHdlIHB1dCBhCi0JICogdGltZSBzdGFtcCBpbiBhIHBhY2tldC4gIEFzIHdlIGRvbid0IHRpbWUgc3RhbXAgYWxsCi0JICogcGFja2FnZXMsIGN5Y2xlX2NvdW50IGlzbid0IHVwZGF0ZWQgaW4gZXZlcnkgY3ljbGUsIGFuZAotCSAqIHNvbWV0aW1lcyBpdCdzIGluY3JlbWVudGVkIGJ5IDIuICBUaHVzLCB3ZSBoYXZlCi0JICogY3ljbGVfY291bnQyLCB3aGljaCBpcyBzaW1wbHkgaW5jcmVtZW50ZWQgYnkgb25lIHdpdGggZWFjaAotCSAqIHBhY2tldCwgc28gd2UgY2FuIGNvbXBhcmUgaXQgdG8gdGhlIHRyYW5zbWlzc2lvbiB0aW1lCi0JICogd3JpdHRlbiBiYWNrIGluIHRoZSBkbWEgcHJvZ3JhbXMuCi0JICovCi0JYXRvbWljX3QgY3ljbGVfY291bnQsIGN5Y2xlX2NvdW50MjsKLQlzdHJ1Y3QgZnJhY3Rpb24gY3ljbGVfb2Zmc2V0LCB0aWNrc19wZXJfc3l0X29mZnNldDsKLQlpbnQgc3l0X2ludGVydmFsOwotCWludCBzdGFsZV9jb3VudDsKLQotCS8qIFRoZXNlcyBmaWVsZHMgY29udHJvbCB0aGUgc2FtcGxlIG91dHB1dCB0byB0aGUgRE1BIGVuZ2luZS4KLQkgKiBUaGUgZG1hX3BhY2tldF9saXN0cyBsaXN0IGhvbGRzIHBhY2tldCBsaXN0cyBjdXJyZW50bHkKLQkgKiBxdWV1ZWQgZm9yIGRtYTsgdGhlIGhlYWQgb2YgdGhlIGxpc3QgaXMgY3VycmVudGx5IGJlaW5nCi0JICogcHJvY2Vzc2VkLiAgVGhlIGxhc3QgcHJvZ3JhbSBpbiBhIHBhY2tldCBsaXN0IGdlbmVyYXRlcyBhbgotCSAqIGludGVycnVwdCwgd2hpY2ggcmVtb3ZlcyB0aGUgaGVhZCBmcm9tIGRtYV9wYWNrZXRfbGlzdHMgYW5kCi0JICogcHV0cyBpdCBiYWNrIG9uIHRoZSBmcmVlIGxpc3QuCi0JICovCi0Jc3RydWN0IGxpc3RfaGVhZCBkbWFfcGFja2V0X2xpc3RzOwotCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9wYWNrZXRfbGlzdHM7Ci0gICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHBhY2tldF9saXN0X3dhaXQ7Ci0Jc3BpbmxvY2tfdCBwYWNrZXRfbGlzdF9sb2NrOwotCXN0cnVjdCBvaGNpMTM5NF9pc29fdGFza2xldCBpc29fdGFza2xldDsKLQlzdHJ1Y3QgcGNpX3Bvb2wgKmRlc2NyaXB0b3JfcG9vbCwgKnBhY2tldF9wb29sOwotCi0JLyogU3RyZWFtcyBhdCBhIGhvc3QgY29udHJvbGxlciBhcmUgY2hhaW5lZCB0aHJvdWdoIHRoaXMgZmllbGQuICovCi0Jc3RydWN0IGxpc3RfaGVhZCBsaW5rOwotCXN0cnVjdCBhbWR0cF9ob3N0ICpob3N0OwotfTsKLQotc3RydWN0IGFtZHRwX2hvc3QgewotCXN0cnVjdCBocHNiX2hvc3QgKmhvc3Q7Ci0Jc3RydWN0IHRpX29oY2kgKm9oY2k7Ci0Jc3RydWN0IGxpc3RfaGVhZCBzdHJlYW1fbGlzdDsKLQlzcGlubG9ja190IHN0cmVhbV9saXN0X2xvY2s7Ci19OwotCi1zdGF0aWMgc3RydWN0IGhwc2JfaGlnaGxldmVsIGFtZHRwX2hpZ2hsZXZlbDsKLQotCi0vKiBGSVhNRTogVGhpcyBkb2Vzbid0IGJlbG9uZyBoZXJlLi4uICovCi0KLSNkZWZpbmUgT0hDSTEzOTRfQ09OVEVYVF9DWUNMRV9NQVRDSCAweDgwMDAwMDAwCi0jZGVmaW5lIE9IQ0kxMzk0X0NPTlRFWFRfUlVOICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBPSENJMTM5NF9DT05URVhUX1dBS0UgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgT0hDSTEzOTRfQ09OVEVYVF9ERUFEICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIE9IQ0kxMzk0X0NPTlRFWFRfQUNUSVZFICAgICAgMHgwMDAwMDQwMAotCi1zdGF0aWMgdm9pZCBvaGNpMTM5NF9zdGFydF9pdF9jdHgoc3RydWN0IHRpX29oY2kgKm9oY2ksIGludCBjdHgsCi0JCQkgICBkbWFfYWRkcl90IGZpcnN0X2NtZCwgaW50IHosIGludCBjeWNsZV9tYXRjaCkKLXsKLQlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSXNvWG1pdEludE1hc2tTZXQsIDEgPDwgY3R4KTsKLQlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSXNvWG1pdENvbW1hbmRQdHIgKyBjdHggKiAxNiwgZmlyc3RfY21kIHwgeik7Ci0JcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRDb250ZXh0Q29udHJvbENsZWFyICsgY3R4ICogMTYsIH4wKTsKLQl3bWIoKTsKLQlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSXNvWG1pdENvbnRleHRDb250cm9sU2V0ICsgY3R4ICogMTYsCi0JCSAgT0hDSTEzOTRfQ09OVEVYVF9DWUNMRV9NQVRDSCB8IChjeWNsZV9tYXRjaCA8PCAxNikgfAotCQkgIE9IQ0kxMzk0X0NPTlRFWFRfUlVOKTsKLX0KLQotc3RhdGljIHZvaWQgb2hjaTEzOTRfd2FrZV9pdF9jdHgoc3RydWN0IHRpX29oY2kgKm9oY2ksIGludCBjdHgpCi17Ci0JcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRDb250ZXh0Q29udHJvbFNldCArIGN0eCAqIDE2LAotCQkgIE9IQ0kxMzk0X0NPTlRFWFRfV0FLRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9oY2kxMzk0X3N0b3BfaXRfY3R4KHN0cnVjdCB0aV9vaGNpICpvaGNpLCBpbnQgY3R4LCBpbnQgc3luY2hyb25vdXMpCi17Ci0JdTMyIGNvbnRyb2w7Ci0JaW50IHdhaXQ7Ci0KLQlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSXNvWG1pdEludE1hc2tDbGVhciwgMSA8PCBjdHgpOwotCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29YbWl0Q29udGV4dENvbnRyb2xDbGVhciArIGN0eCAqIDE2LAotCQkgIE9IQ0kxMzk0X0NPTlRFWFRfUlVOKTsKLQl3bWIoKTsKLQotCWlmIChzeW5jaHJvbm91cykgewotCQlmb3IgKHdhaXQgPSAwOyB3YWl0IDwgNTsgd2FpdCsrKSB7Ci0JCQljb250cm9sID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvWG1pdENvbnRleHRDb250cm9sU2V0ICsgY3R4ICogMTYpOwotCQkJaWYgKChjb250cm9sICYgT0hDSTEzOTRfQ09OVEVYVF9BQ1RJVkUpID09IDApCi0JCQkJYnJlYWs7Ci0KLQkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKLQkJfQotCX0KLX0KLQotLyogTm90ZTogd2UgY2FuIHRlc3QgaWYgZnJlZV9wYWNrZXRfbGlzdHMgaXMgZW1wdHkgd2l0aG91dCBhcXVpcmluZwotICogdGhlIHBhY2tldF9saXN0X2xvY2suICBUaGUgaW50ZXJydXB0IGhhbmRsZXIgb25seSBhZGRzIHRvIHRoZSBmcmVlCi0gKiBsaXN0LCB0aGVyZSBpcyBubyByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRlc3RpbmcgdGhlIGxpc3Qgbm9uLWVtcHR5Ci0gKiBhbmQgYWNxdWlyaW5nIHRoZSBsb2NrLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X2xpc3QgKnN0cmVhbV9nZXRfZnJlZV9wYWNrZXRfbGlzdChzdHJ1Y3Qgc3RyZWFtICpzKQotewotCXN0cnVjdCBwYWNrZXRfbGlzdCAqcGw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChsaXN0X2VtcHR5KCZzLT5mcmVlX3BhY2tldF9saXN0cykpCi0JCXJldHVybiBOVUxMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPnBhY2tldF9saXN0X2xvY2ssIGZsYWdzKTsKLQlwbCA9IGxpc3RfZW50cnkocy0+ZnJlZV9wYWNrZXRfbGlzdHMubmV4dCwgc3RydWN0IHBhY2tldF9saXN0LCBsaW5rKTsKLQlsaXN0X2RlbCgmcGwtPmxpbmspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPnBhY2tldF9saXN0X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBwbDsKLX0KLQotc3RhdGljIHZvaWQgc3RyZWFtX3N0YXJ0X2RtYShzdHJ1Y3Qgc3RyZWFtICpzLCBzdHJ1Y3QgcGFja2V0X2xpc3QgKnBsKQotewotCXUzMiBzeXRfY3ljbGUsIGN5Y2xlX2NvdW50LCBzdGFydF9jeWNsZTsKLQotCWN5Y2xlX2NvdW50ID0gcmVnX3JlYWQocy0+aG9zdC0+b2hjaSwKLQkJCSAgICAgICBPSENJMTM5NF9Jc29jaHJvbm91c0N5Y2xlVGltZXIpID4+IDEyOwotCXN5dF9jeWNsZSA9IChwbC0+bGFzdF9jeWNsZV9jb3VudCAtIFBBQ0tFVF9MSVNUX1NJWkUgKyAxKSAmIDB4MGY7Ci0KLQkvKiBXZSBwcm9ncmFtIHRoZSBETUEgY29udHJvbGxlciB0byBzdGFydCB0cmFuc21pc3Npb24gYXQKLQkgKiBsZWFzdCAxNyBjeWNsZXMgZnJvbSBub3cgLSB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgbG93ZXIgZm91cgotCSAqIGJpdHMgb2YgY3ljbGVfY291bnQgaXMgMHgwZiBhbmQgc3l0X2N5Y2xlIGlzIDAsIGluIHRoaXMKLQkgKiBjYXNlIHRoZSBzdGFydCBjeWNsZSBpcyBjeWNsZV9jb3VudCAtIDE1ICsgMzIuICovCi0Jc3RhcnRfY3ljbGUgPSAoY3ljbGVfY291bnQgJiB+MHgwZikgKyAzMiArIHN5dF9jeWNsZTsKLQlpZiAoKHN0YXJ0X2N5Y2xlICYgMHgxZmZmKSA+PSA4MDAwKQotCQlzdGFydF9jeWNsZSA9IHN0YXJ0X2N5Y2xlIC0gODAwMCArIDB4MjAwMDsKLQotCW9oY2kxMzk0X3N0YXJ0X2l0X2N0eChzLT5ob3N0LT5vaGNpLCBzLT5pc29fdGFza2xldC5jb250ZXh0LAotCQkJICAgICAgcGwtPnBhY2tldHNbMF0uZGJfYnVzLCAzLAotCQkJICAgICAgc3RhcnRfY3ljbGUgJiAweDdmZmYpOwotfQotCi1zdGF0aWMgdm9pZCBzdHJlYW1fcHV0X2RtYV9wYWNrZXRfbGlzdChzdHJ1Y3Qgc3RyZWFtICpzLAotCQkJCSAgICAgICBzdHJ1Y3QgcGFja2V0X2xpc3QgKnBsKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHBhY2tldF9saXN0ICpwcmV2OwotCi0JLyogUmVtZW1iZXIgdGhlIGN5Y2xlX2NvdW50IHVzZWQgZm9yIHRpbWVzdGFtcGluZyB0aGUgbGFzdCBwYWNrZXQuICovCi0JcGwtPmxhc3RfY3ljbGVfY291bnQgPSBhdG9taWNfcmVhZCgmcy0+Y3ljbGVfY291bnQyKSAtIDE7Ci0JcGwtPnBhY2tldHNbUEFDS0VUX0xJU1RfU0laRSAtIDFdLmRiLT5wYXlsb2FkX2Rlc2MuYnJhbmNoID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5wYWNrZXRfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmcGwtPmxpbmssICZzLT5kbWFfcGFja2V0X2xpc3RzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5wYWNrZXRfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQlwcmV2ID0gbGlzdF9lbnRyeShwbC0+bGluay5wcmV2LCBzdHJ1Y3QgcGFja2V0X2xpc3QsIGxpbmspOwotCWlmIChwbC0+bGluay5wcmV2ICE9ICZzLT5kbWFfcGFja2V0X2xpc3RzKSB7Ci0JCXN0cnVjdCBwYWNrZXQgKmxhc3QgPSAmcHJldi0+cGFja2V0c1tQQUNLRVRfTElTVF9TSVpFIC0gMV07Ci0JCWxhc3QtPmRiLT5wYXlsb2FkX2Rlc2MuYnJhbmNoID0gcGwtPnBhY2tldHNbMF0uZGJfYnVzIHwgMzsKLQkJbGFzdC0+ZGItPmhlYWRlcl9kZXNjLnNraXAgPSBwbC0+cGFja2V0c1swXS5kYl9idXMgfCAzOwotCQlvaGNpMTM5NF93YWtlX2l0X2N0eChzLT5ob3N0LT5vaGNpLCBzLT5pc29fdGFza2xldC5jb250ZXh0KTsKLQl9Ci0JZWxzZQotCQlzdHJlYW1fc3RhcnRfZG1hKHMsIHBsKTsKLX0KLQotc3RhdGljIHZvaWQgc3RyZWFtX3NoaWZ0X3BhY2tldF9saXN0cyh1bnNpZ25lZCBsb25nIGwpCi17Ci0Jc3RydWN0IHN0cmVhbSAqcyA9IChzdHJ1Y3Qgc3RyZWFtICopIGw7Ci0Jc3RydWN0IHBhY2tldF9saXN0ICpwbDsKLQlzdHJ1Y3QgcGFja2V0ICpsYXN0OwotCWludCBkaWZmOwotCi0JaWYgKGxpc3RfZW1wdHkoJnMtPmRtYV9wYWNrZXRfbGlzdHMpKSB7Ci0JCUhQU0JfRVJSKCJlbXB0eSBkbWFfcGFja2V0X2xpc3RzIGluICVzIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIE5vdyB0aGF0IHdlIGtub3cgdGhlIGxpc3QgaXMgbm9uLWVtcHR5LCB3ZSBjYW4gZ2V0IHRoZSBoZWFkCi0JICogb2YgdGhlIGxpc3Qgd2l0aG91dCBsb2NraW5nLCBiZWNhdXNlIHRoZSBwcm9jZXNzIGNvbnRleHQKLQkgKiBvbmx5IGFkZHMgdG8gdGhlIHRhaWwuCi0JICovCi0JcGwgPSBsaXN0X2VudHJ5KHMtPmRtYV9wYWNrZXRfbGlzdHMubmV4dCwgc3RydWN0IHBhY2tldF9saXN0LCBsaW5rKTsKLQlsYXN0ID0gJnBsLT5wYWNrZXRzW1BBQ0tFVF9MSVNUX1NJWkUgLSAxXTsKLQotCS8qIFRoaXMgaXMgd2VpcmQuLi4gaWYgd2Ugc3RvcCBkbWEgcHJvY2Vzc2luZyBpbiB0aGUgbWlkZGxlIG9mCi0JICogYSBwYWNrZXQgbGlzdCwgdGhlIGRtYSBjb250ZXh0IGltbWVkaWF0ZWx5IGdlbmVyYXRlcyBhbgotCSAqIGludGVycnVwdCBpZiB3ZSBlbmFibGUgaXQgYWdhaW4gbGF0ZXIuICBUaGlzIG9ubHkgaGFwcGVucwotCSAqIHdoZW4gYW1kdHBfcmVsZWFzZSBpcyBpbnRlcnJ1cHRlZCB3aGlsZSB3YWl0aW5nIGZvciBkbWEgdG8KLQkgKiBjb21wbGV0ZSwgdGhvdWdoLiAgQW55d2F5LCB3ZSBkZXRlY3QgdGhpcyBieSBzZWVpbmcgdGhhdAotCSAqIHRoZSBzdGF0dXMgb2YgdGhlIGRtYSBkZXNjcmlwdG9yIHRoYXQgd2UgZXhwZWN0ZWQgYW4KLQkgKiBpbnRlcnJ1cHQgZnJvbSBpcyBzdGlsbCAwLgotCSAqLwotCWlmIChsYXN0LT5kYi0+cGF5bG9hZF9kZXNjLnN0YXR1cyA9PSAwKSB7Ci0JCUhQU0JfSU5GTygid2VpcmQgaW50ZXJydXB0Li4uIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBJZiB0aGUgbGFzdCBkZXNjcmlwdG9yIGJsb2NrIGRvZXMgbm90IHNwZWNpZnkgYSBicmFuY2gKLQkgKiBhZGRyZXNzLCB3ZSBoYXZlIGEgc2FtcGxlIHVuZGVyZmxvdy4KLQkgKi8KLQlpZiAobGFzdC0+ZGItPnBheWxvYWRfZGVzYy5icmFuY2ggPT0gMCkKLQkJSFBTQl9JTkZPKCJGSVhNRTogc2FtcGxlIHVuZGVyZmxvdy4uLiIpOwotCi0JLyogSGVyZSB3ZSBjaGVjayB3aGVuICh3aGljaCBjeWNsZSkgdGhlIGxhc3QgcGFja2V0IHdhcyBzZW50Ci0JICogYW5kIGNvbXBhcmUgaXQgdG8gd2hhdCB0aGUgaXNvIHBhY2tlciB3YXMgdXNpbmcgYXQgdGhlCi0JICogdGltZS4gIElmIHRoZXJlIGlzIGEgbWlzbWF0Y2gsIHdlIGFkanVzdCB0aGUgY3ljbGUgY291bnQgaW4KLQkgKiB0aGUgaXNvIHBhY2tlci4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBzdGlsbCB1cCB0bwotCSAqIE1BWF9QQUNLRVRfTElTVFMgcGFja2V0IGxpc3RzIHF1ZXVlZCB3aXRoIGJhZCB0aW1lIHN0YW1wcywKLQkgKiBzbyB3ZSBkaXNhYmxlIHRpbWUgc3RhbXAgbW9uaXRvcmluZyBmb3IgdGhlIG5leHQKLQkgKiBNQVhfUEFDS0VUX0xJU1RTIHBhY2tldCBsaXN0cy4KLQkgKi8KLQlkaWZmID0gKGxhc3QtPmRiLT5wYXlsb2FkX2Rlc2Muc3RhdHVzIC0gcGwtPmxhc3RfY3ljbGVfY291bnQpICYgMHhmOwotCWlmIChkaWZmID4gMCAmJiBzLT5zdGFsZV9jb3VudCA9PSAwKSB7Ci0JCWF0b21pY19hZGQoZGlmZiwgJnMtPmN5Y2xlX2NvdW50KTsKLQkJYXRvbWljX2FkZChkaWZmLCAmcy0+Y3ljbGVfY291bnQyKTsKLQkJcy0+c3RhbGVfY291bnQgPSBNQVhfUEFDS0VUX0xJU1RTOwotCX0KLQotCWlmIChzLT5zdGFsZV9jb3VudCA+IDApCi0JCXMtPnN0YWxlX2NvdW50LS07Ci0KLQkvKiBGaW5hbGx5LCB3ZSBtb3ZlIHRoZSBwYWNrZXQgbGlzdCB0aGF0IHdhcyBqdXN0IHByb2Nlc3NlZAotCSAqIGJhY2sgdG8gdGhlIGZyZWUgbGlzdCwgYW5kIG5vdGlmeSBhbnkgd2FpdGVycy4KLQkgKi8KLQlzcGluX2xvY2soJnMtPnBhY2tldF9saXN0X2xvY2spOwotCWxpc3RfZGVsKCZwbC0+bGluayk7Ci0JbGlzdF9hZGRfdGFpbCgmcGwtPmxpbmssICZzLT5mcmVlX3BhY2tldF9saXN0cyk7Ci0Jc3Bpbl91bmxvY2soJnMtPnBhY2tldF9saXN0X2xvY2spOwotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzLT5wYWNrZXRfbGlzdF93YWl0KTsKLX0KLQotc3RhdGljIHN0cnVjdCBwYWNrZXQgKnN0cmVhbV9jdXJyZW50X3BhY2tldChzdHJ1Y3Qgc3RyZWFtICpzKQotewotCWlmIChzLT5jdXJyZW50X3BhY2tldF9saXN0ID09IE5VTEwgJiYKLQkgICAgKHMtPmN1cnJlbnRfcGFja2V0X2xpc3QgPSBzdHJlYW1fZ2V0X2ZyZWVfcGFja2V0X2xpc3QocykpID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuICZzLT5jdXJyZW50X3BhY2tldF9saXN0LT5wYWNrZXRzW3MtPmN1cnJlbnRfcGFja2V0XTsKLX0KLQotc3RhdGljIHZvaWQgc3RyZWFtX3F1ZXVlX3BhY2tldChzdHJ1Y3Qgc3RyZWFtICpzKQotewotCXMtPmN1cnJlbnRfcGFja2V0Kys7Ci0JaWYgKHMtPmN1cnJlbnRfcGFja2V0ID09IFBBQ0tFVF9MSVNUX1NJWkUpIHsKLQkJc3RyZWFtX3B1dF9kbWFfcGFja2V0X2xpc3Qocywgcy0+Y3VycmVudF9wYWNrZXRfbGlzdCk7Ci0JCXMtPmN1cnJlbnRfcGFja2V0X2xpc3QgPSBOVUxMOwotCQlzLT5jdXJyZW50X3BhY2tldCA9IDA7Ci0JfQotfQotCi0vKiBJbnRlZ2VyIGZyYWN0aW9uYWwgbWF0aC4gIFdoZW4gd2UgdHJhbnNtaXQgYSA0NGsxSHogc2lnbmFsIHdlIG11c3QKLSAqIHNlbmQgNSA0MS84MCBzYW1wbGVzIHBlciBpc29jaHJvbm91cyBjeWNsZSwgYXMgdGhlc2Ugb2NjdXIgODAwMAotICogdGltZXMgYSBzZWNvbmQuICBPZiBjb3Vyc2UsIHdlIG11c3Qgc2VuZCBhbiBpbnRlZ3JhbCBudW1iZXIgb2YKLSAqIHNhbXBsZXMgaW4gYSBwYWNrZXQsIHNvIHdlIHVzZSB0aGUgaW50ZWdlciBtYXRoIHRvIGFsdGVybmF0ZQotICogYmV0d2VlbiBzZW5kaW5nIDUgYW5kIDYgc2FtcGxlcyBwZXIgcGFja2V0LgotICovCi0KLXN0YXRpYyB2b2lkIGZyYWN0aW9uX2luaXQoc3RydWN0IGZyYWN0aW9uICpmLCBpbnQgbnVtZXJhdG9yLCBpbnQgZGVub21pbmF0b3IpCi17Ci0JZi0+aW50ZWdlciA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yOwotCWYtPm51bWVyYXRvciA9IG51bWVyYXRvciAlIGRlbm9taW5hdG9yOwotCWYtPmRlbm9taW5hdG9yID0gZGVub21pbmF0b3I7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZnJhY3Rpb25fYWRkKHN0cnVjdCBmcmFjdGlvbiAqZHN0LAotCQkJCSAgICBzdHJ1Y3QgZnJhY3Rpb24gKnNyYzEsCi0JCQkJICAgIHN0cnVjdCBmcmFjdGlvbiAqc3JjMikKLXsKLQkvKiBhc3NlcnQ6IHNyYzEtPmRlbm9taW5hdG9yID09IHNyYzItPmRlbm9taW5hdG9yICovCi0KLQlpbnQgc3VtLCBkZW5vbTsKLQotCS8qIFdlIHVzZSB0aGVzZSB0d28gbG9jYWwgdmFyaWFibGVzIHRvIGFsbG93IGdjYyB0byBvcHRpbWl6ZQotCSAqIHRoZSBkaXZpc2lvbiBhbmQgdGhlIG1vZHVsbyBpbnRvIG9ubHkgb25lIGRpdmlzaW9uLiAqLwotCi0Jc3VtID0gc3JjMS0+bnVtZXJhdG9yICsgc3JjMi0+bnVtZXJhdG9yOwotCWRlbm9tID0gc3JjMS0+ZGVub21pbmF0b3I7Ci0JZHN0LT5pbnRlZ2VyID0gc3JjMS0+aW50ZWdlciArIHNyYzItPmludGVnZXIgKyBzdW0gLyBkZW5vbTsKLQlkc3QtPm51bWVyYXRvciA9IHN1bSAlIGRlbm9tOwotCWRzdC0+ZGVub21pbmF0b3IgPSBkZW5vbTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBmcmFjdGlvbl9zdWJfaW50KHN0cnVjdCBmcmFjdGlvbiAqZHN0LAotCQkJCQlzdHJ1Y3QgZnJhY3Rpb24gKnNyYywgaW50IGludGVnZXIpCi17Ci0JZHN0LT5pbnRlZ2VyID0gc3JjLT5pbnRlZ2VyIC0gaW50ZWdlcjsKLQlkc3QtPm51bWVyYXRvciA9IHNyYy0+bnVtZXJhdG9yOwotCWRzdC0+ZGVub21pbmF0b3IgPSBzcmMtPmRlbm9taW5hdG9yOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgZnJhY3Rpb25fZmxvb3Ioc3RydWN0IGZyYWN0aW9uICpmcmFjKQotewotCXJldHVybiBmcmFjLT5pbnRlZ2VyOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgZnJhY3Rpb25fY2VpbChzdHJ1Y3QgZnJhY3Rpb24gKmZyYWMpCi17Ci0JcmV0dXJuIGZyYWMtPmludGVnZXIgKyAoZnJhYy0+bnVtZXJhdG9yID4gMCA/IDEgOiAwKTsKLX0KLQotc3RhdGljIHZvaWQgcGFja2V0X2luaXRpYWxpemUoc3RydWN0IHBhY2tldCAqcCwgc3RydWN0IHBhY2tldCAqbmV4dCkKLXsKLQkvKiBIZXJlIHdlIGluaXRpYWxpemUgdGhlIGRtYSBkZXNjcmlwdG9yIGJsb2NrIGZvcgotCSAqIHRyYW5zZmVycmluZyBvbmUgaXNvIHBhY2tldC4gIFdlIHVzZSB0d28gZGVzY3JpcHRvcnMgcGVyCi0JICogcGFja2V0OiBhbiBPVVRQVVRfTU9SRV9JTU1NRURJQVRFIGRlc2NyaXB0b3IgZm9yIHRoZQotCSAqIElFRUUxMzk0IGlzbyBwYWNrZXQgaGVhZGVyIGFuZCBhbiBPVVRQVVRfTEFTVCBkZXNjcmlwdG9yCi0JICogZm9yIHRoZSBwYXlsb2FkLgotCSAqLwotCi0JcC0+ZGItPmhlYWRlcl9kZXNjLmNvbnRyb2wgPQotCQlETUFfQ1RMX09VVFBVVF9NT1JFIHwgRE1BX0NUTF9JTU1FRElBVEUgfCA4OwotCi0JaWYgKG5leHQpIHsKLQkJcC0+ZGItPnBheWxvYWRfZGVzYy5jb250cm9sID0KLQkJCURNQV9DVExfT1VUUFVUX0xBU1QgfCBETUFfQ1RMX0JSQU5DSDsKLQkJcC0+ZGItPnBheWxvYWRfZGVzYy5icmFuY2ggPSBuZXh0LT5kYl9idXMgfCAzOwotCQlwLT5kYi0+aGVhZGVyX2Rlc2Muc2tpcCA9IG5leHQtPmRiX2J1cyB8IDM7Ci0JfQotCWVsc2UgewotCQlwLT5kYi0+cGF5bG9hZF9kZXNjLmNvbnRyb2wgPQotCQkJRE1BX0NUTF9PVVRQVVRfTEFTVCB8IERNQV9DVExfQlJBTkNIIHwKLQkJCURNQV9DVExfVVBEQVRFIHwgRE1BX0NUTF9JUlE7Ci0JCXAtPmRiLT5wYXlsb2FkX2Rlc2MuYnJhbmNoID0gMDsKLQkJcC0+ZGItPmhlYWRlcl9kZXNjLnNraXAgPSAwOwotCX0KLQlwLT5kYi0+cGF5bG9hZF9kZXNjLmRhdGFfYWRkcmVzcyA9IHAtPnBheWxvYWRfYnVzOwotCXAtPmRiLT5wYXlsb2FkX2Rlc2Muc3RhdHVzID0gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwYWNrZXRfbGlzdCAqcGFja2V0X2xpc3RfYWxsb2Moc3RydWN0IHN0cmVhbSAqcykKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgcGFja2V0X2xpc3QgKnBsOwotCXN0cnVjdCBwYWNrZXQgKm5leHQ7Ci0KLQlwbCA9IGttYWxsb2Moc2l6ZW9mICpwbCwgU0xBQl9LRVJORUwpOwotCWlmIChwbCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAoaSA9IDA7IGkgPCBQQUNLRVRfTElTVF9TSVpFOyBpKyspIHsKLQkJc3RydWN0IHBhY2tldCAqcCA9ICZwbC0+cGFja2V0c1tpXTsKLQkJcC0+ZGIgPSBwY2lfcG9vbF9hbGxvYyhzLT5kZXNjcmlwdG9yX3Bvb2wsIFNMQUJfS0VSTkVMLAotCQkJCSAgICAgICAmcC0+ZGJfYnVzKTsKLQkJcC0+cGF5bG9hZCA9IHBjaV9wb29sX2FsbG9jKHMtPnBhY2tldF9wb29sLCBTTEFCX0tFUk5FTCwKLQkJCQkJICAgICZwLT5wYXlsb2FkX2J1cyk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IFBBQ0tFVF9MSVNUX1NJWkU7IGkrKykgewotCQlpZiAoaSA8IFBBQ0tFVF9MSVNUX1NJWkUgLSAxKQotCQkJbmV4dCA9ICZwbC0+cGFja2V0c1tpICsgMV07Ci0JCWVsc2UKLQkJCW5leHQgPSBOVUxMOwotCQlwYWNrZXRfaW5pdGlhbGl6ZSgmcGwtPnBhY2tldHNbaV0sIG5leHQpOwotCX0KLQotCXJldHVybiBwbDsKLX0KLQotc3RhdGljIHZvaWQgcGFja2V0X2xpc3RfZnJlZShzdHJ1Y3QgcGFja2V0X2xpc3QgKnBsLCBzdHJ1Y3Qgc3RyZWFtICpzKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IFBBQ0tFVF9MSVNUX1NJWkU7IGkrKykgewotCQlzdHJ1Y3QgcGFja2V0ICpwID0gJnBsLT5wYWNrZXRzW2ldOwotCQlwY2lfcG9vbF9mcmVlKHMtPmRlc2NyaXB0b3JfcG9vbCwgcC0+ZGIsIHAtPmRiX2J1cyk7Ci0JCXBjaV9wb29sX2ZyZWUocy0+cGFja2V0X3Bvb2wsIHAtPnBheWxvYWQsIHAtPnBheWxvYWRfYnVzKTsKLQl9Ci0Ja2ZyZWUocGwpOwotfQotCi1zdGF0aWMgc3RydWN0IGJ1ZmZlciAqYnVmZmVyX2FsbG9jKGludCBzaXplKQotewotCXN0cnVjdCBidWZmZXIgKmI7Ci0KLQliID0ga21hbGxvYyhzaXplb2YgKmIgKyBzaXplLCBTTEFCX0tFUk5FTCk7Ci0JaWYgKGIgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0JYi0+aGVhZCA9IDA7Ci0JYi0+dGFpbCA9IDA7Ci0JYi0+bGVuZ3RoID0gMDsKLQliLT5zaXplID0gc2l6ZTsKLQotCXJldHVybiBiOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY2hhciAqYnVmZmVyX2dldF9ieXRlcyhzdHJ1Y3QgYnVmZmVyICpidWZmZXIsIGludCBzaXplKQotewotCXVuc2lnbmVkIGNoYXIgKnA7Ci0KLQlpZiAoYnVmZmVyLT5oZWFkICsgc2l6ZSA+IGJ1ZmZlci0+c2l6ZSkKLQkJQlVHKCk7Ci0KLQlwID0gJmJ1ZmZlci0+ZGF0YVtidWZmZXItPmhlYWRdOwotCWJ1ZmZlci0+aGVhZCArPSBzaXplOwotCWlmIChidWZmZXItPmhlYWQgPT0gYnVmZmVyLT5zaXplKQotCQlidWZmZXItPmhlYWQgPSAwOwotCWJ1ZmZlci0+bGVuZ3RoIC09IHNpemU7Ci0KLQlyZXR1cm4gcDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl9wdXRfYnl0ZXMoc3RydWN0IGJ1ZmZlciAqYnVmZmVyLAotCQkJCSAgICAgICBzaXplX3QgbWF4LCBzaXplX3QgKmFjdHVhbCkKLXsKLQlzaXplX3QgbGVuZ3RoOwotCXVuc2lnbmVkIGNoYXIgKnA7Ci0KLQlwID0gJmJ1ZmZlci0+ZGF0YVtidWZmZXItPnRhaWxdOwotCWxlbmd0aCA9IG1pbihidWZmZXItPnNpemUgLSBidWZmZXItPmxlbmd0aCwgbWF4KTsKLQlpZiAoYnVmZmVyLT50YWlsICsgbGVuZ3RoIDwgYnVmZmVyLT5zaXplKSB7Ci0JCSphY3R1YWwgPSBsZW5ndGg7Ci0JCWJ1ZmZlci0+dGFpbCArPSBsZW5ndGg7Ci0JfQotCWVsc2UgewotCQkqYWN0dWFsID0gYnVmZmVyLT5zaXplIC0gYnVmZmVyLT50YWlsOwotCQkgYnVmZmVyLT50YWlsID0gMDsKLQl9Ci0KLQlidWZmZXItPmxlbmd0aCArPSAqYWN0dWFsOwotCXJldHVybiBwOwotfQotCi1zdGF0aWMgdTMyIGdldF9pZWM5NThfaGVhZGVyX2JpdHMoc3RydWN0IHN0cmVhbSAqcywgaW50IHN1Yl9mcmFtZSwgdTMyIHNhbXBsZSkKLXsKLQlpbnQgY3NpLCBwYXJpdHksIHNoaWZ0OwotCWludCBibG9ja19zdGFydDsKLQl1MzIgYml0czsKLQotCXN3aXRjaCAocy0+aWVjOTU4X2ZyYW1lX2NvdW50KSB7Ci0JY2FzZSAxOgotCQljc2kgPSBzLT5mb3JtYXQgPT0gQU1EVFBfRk9STUFUX0lFQzk1OF9BQzM7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQljYXNlIDk6Ci0JCWNzaSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgMjQgLi4uIDI3OgotCQljc2kgPSAocy0+aWVjOTU4X3JhdGVfY29kZSA+PiAoMjcgLSBzLT5pZWM5NThfZnJhbWVfY291bnQpKSAmIDB4MDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWNzaSA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCWJsb2NrX3N0YXJ0ID0gKHMtPmllYzk1OF9mcmFtZV9jb3VudCA9PSAwICYmIHN1Yl9mcmFtZSA9PSAwKTsKLQotCS8qIFRoZSBwYXJpdHkgYml0IGlzIHRoZSB4b3Igb2YgdGhlIHNhbXBsZSBiaXRzIGFuZCB0aGUKLQkgKiBjaGFubmVsIHN0YXR1cyBpbmZvIGJpdC4gKi8KLQlmb3IgKHNoaWZ0ID0gMTYsIHBhcml0eSA9IHNhbXBsZSBeIGNzaTsgc2hpZnQgPiAwOyBzaGlmdCA+Pj0gMSkKLQkJcGFyaXR5IF49IChwYXJpdHkgPj4gc2hpZnQpOwotCi0JYml0cyA9ICAoYmxvY2tfc3RhcnQgPDwgNSkgfAkJLyogQmxvY2sgc3RhcnQgYml0ICovCi0JCSgoc3ViX2ZyYW1lID09IDApIDw8IDQpIHwJLyogU3ViZnJhbWUgYml0ICovCi0JCSgocGFyaXR5ICYgMSkgPDwgMykgfAkJLyogUGFyaXR5IGJpdCAqLwotCQkoY3NpIDw8IDIpOwkJCS8qIENoYW5uZWwgc3RhdHVzIGluZm8gYml0ICovCi0KLQlyZXR1cm4gYml0czsKLX0KLQotc3RhdGljIHUzMiBnZXRfaGVhZGVyX2JpdHMoc3RydWN0IHN0cmVhbSAqcywgaW50IHN1Yl9mcmFtZSwgdTMyIHNhbXBsZSkKLXsKLQlzd2l0Y2ggKHMtPmZvcm1hdCkgewotCWNhc2UgQU1EVFBfRk9STUFUX0lFQzk1OF9QQ006Ci0JY2FzZSBBTURUUF9GT1JNQVRfSUVDOTU4X0FDMzoKLQkJcmV0dXJuIGdldF9pZWM5NThfaGVhZGVyX2JpdHMocywgc3ViX2ZyYW1lLCBzYW1wbGUpOwotCi0JY2FzZSBBTURUUF9GT1JNQVRfUkFXOgotCQlyZXR1cm4gMHg0MDsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZmlsbF9wYXlsb2FkX2xlMTYoc3RydWN0IHN0cmVhbSAqcywgcXVhZGxldF90ICpkYXRhLCBpbnQgbmV2ZW50cykKLXsKLQlxdWFkbGV0X3QgKmV2ZW50LCBzYW1wbGUsIGJpdHM7Ci0JdW5zaWduZWQgY2hhciAqcDsKLQlpbnQgaSwgajsKLQotCWZvciAoaSA9IDAsIGV2ZW50ID0gZGF0YTsgaSA8IG5ldmVudHM7IGkrKykgewotCi0JCWZvciAoaiA9IDA7IGogPCBzLT5kaW1lbnNpb247IGorKykgewotCQkJcCA9IGJ1ZmZlcl9nZXRfYnl0ZXMocy0+aW5wdXQsIDIpOwotCQkJc2FtcGxlID0gKHBbMV0gPDwgMTYpIHwgKHBbMF0gPDwgOCk7Ci0JCQliaXRzID0gZ2V0X2hlYWRlcl9iaXRzKHMsIGosIHNhbXBsZSk7Ci0JCQlldmVudFtqXSA9IGNwdV90b19iZTMyKChiaXRzIDw8IDI0KSB8IHNhbXBsZSk7Ci0JCX0KLQotCQlldmVudCArPSBzLT5kaW1lbnNpb247Ci0JCWlmICgrK3MtPmllYzk1OF9mcmFtZV9jb3VudCA9PSAxOTIpCi0JCQlzLT5pZWM5NThfZnJhbWVfY291bnQgPSAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZmlsbF9wYWNrZXQoc3RydWN0IHN0cmVhbSAqcywgc3RydWN0IHBhY2tldCAqcGFja2V0LCBpbnQgbmV2ZW50cykKLXsKLQlpbnQgc3l0X2luZGV4LCBzeXQsIHNpemU7Ci0JdTMyIGNvbnRyb2w7Ci0KLQlzaXplID0gKG5ldmVudHMgKiBzLT5kaW1lbnNpb24gKyAyKSAqIHNpemVvZihxdWFkbGV0X3QpOwotCi0JLyogVXBkYXRlIERNQSBkZXNjcmlwdG9ycyAqLwotCXBhY2tldC0+ZGItPnBheWxvYWRfZGVzYy5zdGF0dXMgPSAwOwotCWNvbnRyb2wgPSBwYWNrZXQtPmRiLT5wYXlsb2FkX2Rlc2MuY29udHJvbCAmIDB4ZmZmZjAwMDA7Ci0JcGFja2V0LT5kYi0+cGF5bG9hZF9kZXNjLmNvbnRyb2wgPSBjb250cm9sIHwgc2l6ZTsKLQotCS8qIEZpbGwgSUVFRTEzOTQgaGVhZGVycyAqLwotCXBhY2tldC0+ZGItPmhlYWRlcl9kZXNjLmhlYWRlclswXSA9Ci0JCShJRUVFMTM5NF9TUEVFRF8xMDAgPDwgMTYpIHwgKDB4MDEgPDwgMTQpIHwKLQkJKHMtPmlzb19jaGFubmVsIDw8IDgpIHwgKFRDT0RFX0lTT19EQVRBIDw8IDQpOwotCXBhY2tldC0+ZGItPmhlYWRlcl9kZXNjLmhlYWRlclsxXSA9IHNpemUgPDwgMTY7Ci0KLQkvKiBDYWxjdWxhdGUgc3luY2hyb25pemF0aW9uIHRpbWVzdGFtcCAoc3l0KS4gRmlyc3Qgd2UKLQkgKiBkZXRlcm1pbmUgc3l0X2luZGV4LCB0aGF0IGlzLCB0aGUgaW5kZXggaW4gdGhlIHBhY2tldCBvZgotCSAqIHRoZSBzYW1wbGUgZm9yIHdoaWNoIHRoZSB0aW1lc3RhbXAgaXMgdmFsaWQuICovCi0Jc3l0X2luZGV4ID0gKHMtPnN5dF9pbnRlcnZhbCAtIHMtPmRiYykgJiAocy0+c3l0X2ludGVydmFsIC0gMSk7Ci0JaWYgKHN5dF9pbmRleCA8IG5ldmVudHMpIHsKLQkJc3l0ID0gKChhdG9taWNfcmVhZCgmcy0+Y3ljbGVfY291bnQpIDw8IDEyKSB8Ci0JCSAgICAgICBzLT5jeWNsZV9vZmZzZXQuaW50ZWdlcikgJiAweGZmZmY7Ci0JCWZyYWN0aW9uX2FkZCgmcy0+Y3ljbGVfb2Zmc2V0LAotCQkJICAgICAmcy0+Y3ljbGVfb2Zmc2V0LCAmcy0+dGlja3NfcGVyX3N5dF9vZmZzZXQpOwotCi0JCS8qIFRoaXMgbmV4dCBhZGRpdGlvbiBzaG91bGQgYmUgbW9kdWxvIDgwMDAgKDB4MWY0MCksCi0JCSAqIGJ1dCB3ZSBvbmx5IHVzZSB0aGUgbG93ZXIgNCBiaXRzIG9mIGN5Y2xlX2NvdW50LCBzbwotCQkgKiB3ZSBkb24ndCBuZWVkIHRoZSBtb2R1bG8uICovCi0JCWF0b21pY19hZGQocy0+Y3ljbGVfb2Zmc2V0LmludGVnZXIgLyAzMDcyLCAmcy0+Y3ljbGVfY291bnQpOwotCQlzLT5jeWNsZV9vZmZzZXQuaW50ZWdlciAlPSAzMDcyOwotCX0KLQllbHNlCi0JCXN5dCA9IDB4ZmZmZjsKLQotCWF0b21pY19pbmMoJnMtPmN5Y2xlX2NvdW50Mik7Ci0KLQkvKiBGaWxsIGNpcCBoZWFkZXIgKi8KLQlwYWNrZXQtPnBheWxvYWQtPmVvaDAgPSAwOwotCXBhY2tldC0+cGF5bG9hZC0+c2lkID0gcy0+aG9zdC0+aG9zdC0+bm9kZV9pZCAmIDB4M2Y7Ci0JcGFja2V0LT5wYXlsb2FkLT5kYnMgPSBzLT5kaW1lbnNpb247Ci0JcGFja2V0LT5wYXlsb2FkLT5mbiA9IDA7Ci0JcGFja2V0LT5wYXlsb2FkLT5xcGMgPSAwOwotCXBhY2tldC0+cGF5bG9hZC0+c3BoID0gMDsKLQlwYWNrZXQtPnBheWxvYWQtPnJlc2VydmVkID0gMDsKLQlwYWNrZXQtPnBheWxvYWQtPmRiYyA9IHMtPmRiYzsKLQlwYWNrZXQtPnBheWxvYWQtPmVvaDEgPSAyOwotCXBhY2tldC0+cGF5bG9hZC0+Zm10ID0gRk1UX0FNRFRQOwotCXBhY2tldC0+cGF5bG9hZC0+ZmRmID0gcy0+ZmRmOwotCXBhY2tldC0+cGF5bG9hZC0+c3l0ID0gY3B1X3RvX2JlMTYoc3l0KTsKLQotCXN3aXRjaCAocy0+c2FtcGxlX2Zvcm1hdCkgewotCWNhc2UgQU1EVFBfSU5QVVRfTEUxNjoKLQkJZmlsbF9wYXlsb2FkX2xlMTYocywgcGFja2V0LT5wYXlsb2FkLT5kYXRhLCBuZXZlbnRzKTsKLQkJYnJlYWs7Ci0JfQotCi0Jcy0+ZGJjICs9IG5ldmVudHM7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0cmVhbV9mbHVzaChzdHJ1Y3Qgc3RyZWFtICpzKQotewotCXN0cnVjdCBwYWNrZXQgKnA7Ci0JaW50IG5ldmVudHM7Ci0Jc3RydWN0IGZyYWN0aW9uIG5leHQ7Ci0KLQkvKiBUaGUgQU1EVFAgc3BlY2lmaWVzIHR3byB0cmFuc21pc3Npb24gbW9kZXM6IGJsb2NraW5nIGFuZAotCSAqIG5vbi1ibG9ja2luZy4gIEluIGJsb2NraW5nIG1vZGUgeW91IGFsd2F5cyB0cmFuc2ZlcgotCSAqIHN5dF9pbnRlcnZhbCBvciB6ZXJvIHNhbXBsZXMsIHdoZXJlYXMgaW4gbm9uLWJsb2NraW5nIG1vZGUKLQkgKiB5b3Ugc2VuZCBhcyBtYW55IHNhbXBsZXMgYXMgeW91IGhhdmUgYXZhaWxhYmxlIGF0IHRyYW5zZmVyCi0JICogdGltZS4KLQkgKgotCSAqIFRoZSBmcmFjdGlvbiBzYW1wbGVzX3Blcl9jeWNsZSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZgotCSAqIHNhbXBsZXMgdGhhdCBiZWNvbWUgYXZhaWxhYmxlIHBlciBjeWNsZS4gIFdlIGFkZCB0aGlzIHRvCi0JICogdGhlIGZyYWN0aW9uIHJlYWR5X3NhbXBsZXMsIHdoaWNoIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mCi0JICogbGVmdG92ZXIgc2FtcGxlcyBmcm9tIHRoZSBwcmV2aW91cyB0cmFuc21pc3Npb24uICBUaGUgc3VtLAotCSAqIHN0b3JlZCBpbiB0aGUgZnJhY3Rpb24gbmV4dCwgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YKLQkgKiBzYW1wbGVzIGF2YWlsYWJsZSBmb3IgdHJhbnNtaXNzaW9uLCBhbmQgZnJvbSB0aGlzIHdlCi0JICogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBhY3R1YWxseSB0cmFuc21pdC4KLQkgKi8KLQotCXdoaWxlICgxKSB7Ci0JCWZyYWN0aW9uX2FkZCgmbmV4dCwgJnMtPnJlYWR5X3NhbXBsZXMsICZzLT5zYW1wbGVzX3Blcl9jeWNsZSk7Ci0JCWlmIChzLT5tb2RlID09IEFNRFRQX01PREVfQkxPQ0tJTkcpIHsKLQkJCWlmIChmcmFjdGlvbl9mbG9vcigmbmV4dCkgPj0gcy0+c3l0X2ludGVydmFsKQotCQkJCW5ldmVudHMgPSBzLT5zeXRfaW50ZXJ2YWw7Ci0JCQllbHNlCi0JCQkJbmV2ZW50cyA9IDA7Ci0JCX0KLQkJZWxzZQotCQkJbmV2ZW50cyA9IGZyYWN0aW9uX2Zsb29yKCZuZXh0KTsKLQotCQlwID0gc3RyZWFtX2N1cnJlbnRfcGFja2V0KHMpOwotCQlpZiAocy0+aW5wdXQtPmxlbmd0aCA8IG5ldmVudHMgKiBzLT5kaW1lbnNpb24gKiAyIHx8IHAgPT0gTlVMTCkKLQkJCWJyZWFrOwotCi0JCWZpbGxfcGFja2V0KHMsIHAsIG5ldmVudHMpOwotCQlzdHJlYW1fcXVldWVfcGFja2V0KHMpOwotCi0JCS8qIE5vdyB0aGF0IHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IHF1ZXVlZCB0aGUgcGFja2V0IGZvcgotCQkgKiB0cmFuc21pc3Npb24sIHdlIHVwZGF0ZSB0aGUgZnJhY3Rpb24gcmVhZHlfc2FtcGxlcy4gKi8KLQkJZnJhY3Rpb25fc3ViX2ludCgmcy0+cmVhZHlfc2FtcGxlcywgJm5leHQsIG5ldmVudHMpOwotCX0KLX0KLQotc3RhdGljIGludCBzdHJlYW1fYWxsb2NfcGFja2V0X2xpc3RzKHN0cnVjdCBzdHJlYW0gKnMpCi17Ci0JaW50IG1heF9uZXZlbnRzLCBtYXhfcGFja2V0X3NpemUsIGk7Ci0KLQlpZiAocy0+bW9kZSA9PSBBTURUUF9NT0RFX0JMT0NLSU5HKQotCQltYXhfbmV2ZW50cyA9IHMtPnN5dF9pbnRlcnZhbDsKLQllbHNlCi0JCW1heF9uZXZlbnRzID0gZnJhY3Rpb25fY2VpbCgmcy0+c2FtcGxlc19wZXJfY3ljbGUpOwotCi0JbWF4X3BhY2tldF9zaXplID0gbWF4X25ldmVudHMgKiBzLT5kaW1lbnNpb24gKiA0ICsgODsKLQlzLT5wYWNrZXRfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgicGFja2V0IHBvb2wiLCBzLT5ob3N0LT5vaGNpLT5kZXYsCi0JCQkJCSBtYXhfcGFja2V0X3NpemUsIDAsIDApOwotCi0JaWYgKHMtPnBhY2tldF9wb29sID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCUlOSVRfTElTVF9IRUFEKCZzLT5mcmVlX3BhY2tldF9saXN0cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJnMtPmRtYV9wYWNrZXRfbGlzdHMpOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfUEFDS0VUX0xJU1RTOyBpKyspIHsKLQkJc3RydWN0IHBhY2tldF9saXN0ICpwbCA9IHBhY2tldF9saXN0X2FsbG9jKHMpOwotCQlpZiAocGwgPT0gTlVMTCkKLQkJCWJyZWFrOwotCQlsaXN0X2FkZF90YWlsKCZwbC0+bGluaywgJnMtPmZyZWVfcGFja2V0X2xpc3RzKTsKLQl9Ci0KLQlyZXR1cm4gaSA8IE1BWF9QQUNLRVRfTElTVFMgPyAtMSA6IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0cmVhbV9mcmVlX3BhY2tldF9saXN0cyhzdHJ1Y3Qgc3RyZWFtICpzKQotewotCXN0cnVjdCBwYWNrZXRfbGlzdCAqcGFja2V0X2wsICpwYWNrZXRfbF9uZXh0OwotCi0JaWYgKHMtPmN1cnJlbnRfcGFja2V0X2xpc3QgIT0gTlVMTCkKLQkJcGFja2V0X2xpc3RfZnJlZShzLT5jdXJyZW50X3BhY2tldF9saXN0LCBzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFja2V0X2wsIHBhY2tldF9sX25leHQsICZzLT5kbWFfcGFja2V0X2xpc3RzLCBsaW5rKQotCQlwYWNrZXRfbGlzdF9mcmVlKHBhY2tldF9sLCBzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFja2V0X2wsIHBhY2tldF9sX25leHQsICZzLT5mcmVlX3BhY2tldF9saXN0cywgbGluaykKLQkJcGFja2V0X2xpc3RfZnJlZShwYWNrZXRfbCwgcyk7Ci0JaWYgKHMtPnBhY2tldF9wb29sICE9IE5VTEwpCi0JCXBjaV9wb29sX2Rlc3Ryb3kocy0+cGFja2V0X3Bvb2wpOwotCi0Jcy0+Y3VycmVudF9wYWNrZXRfbGlzdCA9IE5VTEw7Ci0JSU5JVF9MSVNUX0hFQUQoJnMtPmZyZWVfcGFja2V0X2xpc3RzKTsKLQlJTklUX0xJU1RfSEVBRCgmcy0+ZG1hX3BhY2tldF9saXN0cyk7Ci0Jcy0+cGFja2V0X3Bvb2wgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBwbHVnX3VwZGF0ZShzdHJ1Y3QgY21wX3BjciAqcGx1Zywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qgc3RyZWFtICpzID0gZGF0YTsKLQotCUhQU0JfSU5GTygicGx1ZyB1cGRhdGU6IHAycF9jb3VudD0lZCwgY2hhbm5lbD0lZCIsCi0JCSAgcGx1Zy0+cDJwX2NvdW50LCBwbHVnLT5jaGFubmVsKTsKLQlzLT5pc29fY2hhbm5lbCA9IHBsdWctPmNoYW5uZWw7Ci0JaWYgKHBsdWctPnAycF9jb3VudCA+IDApIHsKLQkJc3RydWN0IHBhY2tldF9saXN0ICpwbDsKLQotCQlwbCA9IGxpc3RfZW50cnkocy0+ZG1hX3BhY2tldF9saXN0cy5uZXh0LCBzdHJ1Y3QgcGFja2V0X2xpc3QsIGxpbmspOwotCQlzdHJlYW1fc3RhcnRfZG1hKHMsIHBsKTsKLQl9Ci0JZWxzZSB7Ci0JCW9oY2kxMzk0X3N0b3BfaXRfY3R4KHMtPmhvc3QtPm9oY2ksIHMtPmlzb190YXNrbGV0LmNvbnRleHQsIDApOwotCX0KLX0KLQotc3RhdGljIGludCBzdHJlYW1fY29uZmlndXJlKHN0cnVjdCBzdHJlYW0gKnMsIGludCBjbWQsIHN0cnVjdCBhbWR0cF9pb2N0bCAqY2ZnKQotewotCWNvbnN0IGludCB0cmFuc2Zlcl9kZWxheSA9IDkwMDA7Ci0KLQlpZiAoY2ZnLT5mb3JtYXQgPD0gQU1EVFBfRk9STUFUX0lFQzk1OF9BQzMpCi0JCXMtPmZvcm1hdCA9IGNmZy0+Zm9ybWF0OwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzd2l0Y2ggKGNmZy0+cmF0ZSkgewotCWNhc2UgMzIwMDA6Ci0JCXMtPnN5dF9pbnRlcnZhbCA9IDg7Ci0JCXMtPmZkZiA9IEZERl9TRkNfMzJLSFo7Ci0JCXMtPmllYzk1OF9yYXRlX2NvZGUgPSAweDBjOwotCQlicmVhazsKLQljYXNlIDQ0MTAwOgotCQlzLT5zeXRfaW50ZXJ2YWwgPSA4OwotCQlzLT5mZGYgPSBGREZfU0ZDXzQ0SzFIWjsKLQkJcy0+aWVjOTU4X3JhdGVfY29kZSA9IDB4MDA7Ci0JCWJyZWFrOwotCWNhc2UgNDgwMDA6Ci0JCXMtPnN5dF9pbnRlcnZhbCA9IDg7Ci0JCXMtPmZkZiA9IEZERl9TRkNfNDhLSFo7Ci0JCXMtPmllYzk1OF9yYXRlX2NvZGUgPSAweDA0OwotCQlicmVhazsKLQljYXNlIDg4MjAwOgotCQlzLT5zeXRfaW50ZXJ2YWwgPSAxNjsKLQkJcy0+ZmRmID0gRkRGX1NGQ184OEsySFo7Ci0JCXMtPmllYzk1OF9yYXRlX2NvZGUgPSAweDAwOwotCQlicmVhazsKLQljYXNlIDk2MDAwOgotCQlzLT5zeXRfaW50ZXJ2YWwgPSAxNjsKLQkJcy0+ZmRmID0gRkRGX1NGQ185NktIWjsKLQkJcy0+aWVjOTU4X3JhdGVfY29kZSA9IDB4MDA7Ci0JCWJyZWFrOwotCWNhc2UgMTc2NDAwOgotCQlzLT5zeXRfaW50ZXJ2YWwgPSAzMjsKLQkJcy0+ZmRmID0gRkRGX1NGQ18xNzZLNEhaOwotCQlzLT5pZWM5NThfcmF0ZV9jb2RlID0gMHgwMDsKLQkJYnJlYWs7Ci0JY2FzZSAxOTIwMDA6Ci0JCXMtPnN5dF9pbnRlcnZhbCA9IDMyOwotCQlzLT5mZGYgPSBGREZfU0ZDXzE5MktIWjsKLQkJcy0+aWVjOTU4X3JhdGVfY29kZSA9IDB4MDA7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jcy0+cmF0ZSA9IGNmZy0+cmF0ZTsKLQlmcmFjdGlvbl9pbml0KCZzLT5zYW1wbGVzX3Blcl9jeWNsZSwgcy0+cmF0ZSwgODAwMCk7Ci0JZnJhY3Rpb25faW5pdCgmcy0+cmVhZHlfc2FtcGxlcywgMCwgODAwMCk7Ci0KLQkvKiBUaGUgdGlja3NfcGVyX3N5dF9vZmZzZXQgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIG51bWJlciBvZgotCSAqIHRpY2tzIGJldHdlZW4gc3l0X2ludGVydmFsIGV2ZW50cy4gIFRoZSBudW1iZXIgb2YgdGlja3MgcGVyCi0JICogc2Vjb25kIGlzIDI0LjU3NmU2LCBzbyB0aGUgbnVtYmVyIG9mIHRpY2tzIGJldHdlZW4KLQkgKiBzeXRfaW50ZXJ2YWwgZXZlbnRzIGlzIDI0LjU3NmU2ICogc3l0X2ludGVydmFsIC8gcmF0ZS4KLQkgKi8KLQlmcmFjdGlvbl9pbml0KCZzLT50aWNrc19wZXJfc3l0X29mZnNldCwKLQkJICAgICAgMjQ1NzYwMDAgKiBzLT5zeXRfaW50ZXJ2YWwsIHMtPnJhdGUpOwotCWZyYWN0aW9uX2luaXQoJnMtPmN5Y2xlX29mZnNldCwgKHRyYW5zZmVyX2RlbGF5ICUgMzA3MikgKiBzLT5yYXRlLCBzLT5yYXRlKTsKLQlhdG9taWNfc2V0KCZzLT5jeWNsZV9jb3VudCwgdHJhbnNmZXJfZGVsYXkgLyAzMDcyKTsKLQlhdG9taWNfc2V0KCZzLT5jeWNsZV9jb3VudDIsIDApOwotCi0Jcy0+bW9kZSA9IGNmZy0+bW9kZTsKLQlzLT5zYW1wbGVfZm9ybWF0ID0gQU1EVFBfSU5QVVRfTEUxNjsKLQotCS8qIFdoZW4gdXNpbmcgdGhlIEFNODI0IHJhdyBzdWJmb3JtYXQgd2UgY2FuIHN0cmVhbSBzaWduYWxzIG9mCi0JICogYW55IGRpbWVuc2lvbi4gIFRoZSBJRUM5NTggc3ViZm9ybWF0LCBob3dldmVyLCBvbmx5Ci0JICogc3VwcG9ydHMgMiBjaGFubmVscy4KLQkgKi8KLQlpZiAocy0+Zm9ybWF0ID09IEFNRFRQX0ZPUk1BVF9SQVcgfHwgY2ZnLT5kaW1lbnNpb24gPT0gMikKLQkJcy0+ZGltZW5zaW9uID0gY2ZnLT5kaW1lbnNpb247Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChzLT5vcGNyICE9IE5VTEwpIHsKLQkJY21wX3VucmVnaXN0ZXJfb3BjcihzLT5ob3N0LT5ob3N0LCBzLT5vcGNyKTsKLQkJcy0+b3BjciA9IE5VTEw7Ci0JfQotCi0Jc3dpdGNoKGNtZCkgewotCWNhc2UgQU1EVFBfSU9DX1BMVUc6Ci0JCXMtPm9wY3IgPSBjbXBfcmVnaXN0ZXJfb3BjcihzLT5ob3N0LT5ob3N0LCBjZmctPnUucGx1ZywKLQkJCQkJICAgLypwYXlsb2FkKi8gMTIsIHBsdWdfdXBkYXRlLCBzKTsKLQkJaWYgKHMtPm9wY3IgPT0gTlVMTCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzLT5pc29fY2hhbm5lbCA9IHMtPm9wY3ItPmNoYW5uZWw7Ci0JCWJyZWFrOwotCi0JY2FzZSBBTURUUF9JT0NfQ0hBTk5FTDoKLQkJaWYgKGNmZy0+dS5jaGFubmVsID49IDAgJiYgY2ZnLT51LmNoYW5uZWwgPCA2NCkKLQkJCXMtPmlzb19jaGFubmVsID0gY2ZnLT51LmNoYW5uZWw7Ci0JCWVsc2UKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQkvKiBUaGUgaW9jdGwgc2V0dGluZ3Mgd2VyZSBhbGwgdmFsaWQsIHNvIHdlIHJlYWxsb2MgdGhlIHBhY2tldAotCSAqIGxpc3RzIHRvIG1ha2Ugc3VyZSB0aGUgcGFja2V0IHNpemUgaXMgYmlnIGVub3VnaC4KLQkgKi8KLQlpZiAocy0+cGFja2V0X3Bvb2wgIT0gTlVMTCkKLQkJc3RyZWFtX2ZyZWVfcGFja2V0X2xpc3RzKHMpOwotCi0JaWYgKHN0cmVhbV9hbGxvY19wYWNrZXRfbGlzdHMocykgPCAwKSB7Ci0JCXN0cmVhbV9mcmVlX3BhY2tldF9saXN0cyhzKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3RyZWFtICpzdHJlYW1fYWxsb2Moc3RydWN0IGFtZHRwX2hvc3QgKmhvc3QpCi17Ci0Jc3RydWN0IHN0cmVhbSAqczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0gICAgICAgIHMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyZWFtKSwgU0xBQl9LRVJORUwpOwotICAgICAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgIG1lbXNldChzLCAwLCBzaXplb2Yoc3RydWN0IHN0cmVhbSkpOwotCXMtPmhvc3QgPSBob3N0OwotCi0Jcy0+aW5wdXQgPSBidWZmZXJfYWxsb2MoQlVGRkVSX1NJWkUpOwotCWlmIChzLT5pbnB1dCA9PSBOVUxMKSB7Ci0JCWtmcmVlKHMpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlzLT5kZXNjcmlwdG9yX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoImRlc2NyaXB0b3IgcG9vbCIsIGhvc3QtPm9oY2ktPmRldiwKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IGRlc2NyaXB0b3JfYmxvY2spLAotCQkJCQkgICAgIDE2LCAwKTsKLQotCWlmIChzLT5kZXNjcmlwdG9yX3Bvb2wgPT0gTlVMTCkgewotCQlrZnJlZShzLT5pbnB1dCk7Ci0JCWtmcmVlKHMpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlJTklUX0xJU1RfSEVBRCgmcy0+ZnJlZV9wYWNrZXRfbGlzdHMpOwotCUlOSVRfTElTVF9IRUFEKCZzLT5kbWFfcGFja2V0X2xpc3RzKTsKLQotICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5wYWNrZXRfbGlzdF93YWl0KTsKLSAgICAgICAgc3Bpbl9sb2NrX2luaXQoJnMtPnBhY2tldF9saXN0X2xvY2spOwotCi0Jb2hjaTEzOTRfaW5pdF9pc29fdGFza2xldCgmcy0+aXNvX3Rhc2tsZXQsIE9IQ0lfSVNPX1RSQU5TTUlULAotCQkJCSAgc3RyZWFtX3NoaWZ0X3BhY2tldF9saXN0cywKLQkJCQkgICh1bnNpZ25lZCBsb25nKSBzKTsKLQotCWlmIChvaGNpMTM5NF9yZWdpc3Rlcl9pc29fdGFza2xldChob3N0LT5vaGNpLCAmcy0+aXNvX3Rhc2tsZXQpIDwgMCkgewotCQlwY2lfcG9vbF9kZXN0cm95KHMtPmRlc2NyaXB0b3JfcG9vbCk7Ci0JCWtmcmVlKHMtPmlucHV0KTsKLQkJa2ZyZWUocyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5zdHJlYW1fbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmcy0+bGluaywgJmhvc3QtPnN0cmVhbV9saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5zdHJlYW1fbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gczsKLX0KLQotc3RhdGljIHZvaWQgc3RyZWFtX2ZyZWUoc3RydWN0IHN0cmVhbSAqcykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogU3RvcCB0aGUgRE1BLiAgV2Ugd2FpdCBmb3IgdGhlIGRtYSBwYWNrZXQgbGlzdCB0byBiZWNvbWUKLQkgKiBlbXB0eSBhbmQgbGV0IHRoZSBkbWEgY29udHJvbGxlciBydW4gb3V0IG9mIHByb2dyYW1zLiAgVGhpcwotCSAqIHNlZW1zIHRvIGJlIG1vcmUgcmVsaWFibGUgdGhhbiBzdG9wcGluZyBpdCBkaXJlY3RseSwgc2luY2UKLQkgKiB0aGF0IHNvbWV0aW1lcyBnZW5lcmF0ZXMgYW4gaXQgdHJhbnNtaXQgaW50ZXJydXB0IGlmIHdlCi0JICogbGF0ZXIgcmUtZW5hYmxlIHRoZSBjb250ZXh0LgotCSAqLwotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzLT5wYWNrZXRfbGlzdF93YWl0LAotCQkJCSBsaXN0X2VtcHR5KCZzLT5kbWFfcGFja2V0X2xpc3RzKSk7Ci0KLQlvaGNpMTM5NF9zdG9wX2l0X2N0eChzLT5ob3N0LT5vaGNpLCBzLT5pc29fdGFza2xldC5jb250ZXh0LCAxKTsKLQlvaGNpMTM5NF91bnJlZ2lzdGVyX2lzb190YXNrbGV0KHMtPmhvc3QtPm9oY2ksICZzLT5pc29fdGFza2xldCk7Ci0KLQlpZiAocy0+b3BjciAhPSBOVUxMKQotCQljbXBfdW5yZWdpc3Rlcl9vcGNyKHMtPmhvc3QtPmhvc3QsIHMtPm9wY3IpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmhvc3QtPnN0cmVhbV9saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmcy0+bGluayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+aG9zdC0+c3RyZWFtX2xpc3RfbG9jaywgZmxhZ3MpOwotCi0Ja2ZyZWUocy0+aW5wdXQpOwotCi0Jc3RyZWFtX2ZyZWVfcGFja2V0X2xpc3RzKHMpOwotCXBjaV9wb29sX2Rlc3Ryb3kocy0+ZGVzY3JpcHRvcl9wb29sKTsKLQotCWtmcmVlKHMpOwotfQotCi0vKiBGaWxlIG9wZXJhdGlvbnMgKi8KLQotc3RhdGljIHNzaXplX3QgYW1kdHBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwKLQkJCSAgIGxvZmZfdCAqb2Zmc2V0X2lzX2lnbm9yZWQpCi17Ci0Jc3RydWN0IHN0cmVhbSAqcyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBjaGFyICpwOwotCWludCBpOwotCXNpemVfdCBsZW5ndGg7Ci0KLQlpZiAocy0+cGFja2V0X3Bvb2wgPT0gTlVMTCkKLQkJcmV0dXJuIC1FQkFERkQ7Ci0KLQkvKiBGaWxsIHRoZSBjaXJjdWxhciBidWZmZXIgZnJvbSB0aGUgaW5wdXQgYnVmZmVyIGFuZCBjYWxsIHRoZQotCSAqIGlzbyBwYWNrZXIgd2hlbiB0aGUgYnVmZmVyIGlzIGZ1bGwuICBUaGUgaXNvIHBhY2tlciBtYXkKLQkgKiBsZWF2ZSBieXRlcyBpbiB0aGUgYnVmZmVyIGZvciB0d28gcmVhc29uczogZWl0aGVyIHRoZQotCSAqIHJlbWFpbmluZyBieXRlcyB3YXNuJ3QgZW5vdWdoIHRvIGJ1aWxkIGEgbmV3IHBhY2tldCwgb3IKLQkgKiB0aGVyZSB3ZXJlIG5vIGZyZWUgcGFja2V0IGxpc3RzLiAgSW4gdGhlIGZpcnN0IGNhc2Ugd2UKLQkgKiByZS1maWxsIHRoZSBidWZmZXIgYW5kIGNhbGwgdGhlIGlzbyBwYWNrZXIgYWdhaW4gb3IgcmV0dXJuCi0JICogaWYgd2UgdXNlZCBhbGwgdGhlIGRhdGEgZnJvbSB1c2Vyc3BhY2UuICBJbiB0aGUgc2Vjb25kCi0JICogY2FzZSwgdGhlIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSB3aWxsIGJsb2NrIHVudGlsIHRoZSBpcnEKLQkgKiBoYW5kbGVyIGZyZWVzIGEgcGFja2V0IGxpc3QuCi0JICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkgKz0gbGVuZ3RoKSB7Ci0JCXAgPSBidWZmZXJfcHV0X2J5dGVzKHMtPmlucHV0LCBjb3VudCAtIGksICZsZW5ndGgpOwotCQlpZiAoY29weV9mcm9tX3VzZXIocCwgYnVmZmVyICsgaSwgbGVuZ3RoKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAocy0+aW5wdXQtPmxlbmd0aCA8IHMtPmlucHV0LT5zaXplKQotCQkJY29udGludWU7Ci0KLQkJc3RyZWFtX2ZsdXNoKHMpOwotCi0JCWlmIChzLT5jdXJyZW50X3BhY2tldF9saXN0ICE9IE5VTEwpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCi0JCQlyZXR1cm4gaSArIGxlbmd0aCA+IDAgPyBpICsgbGVuZ3RoIDogLUVBR0FJTjsKLQotCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHMtPnBhY2tldF9saXN0X3dhaXQsCi0JCQkJCSAgICAgIWxpc3RfZW1wdHkoJnMtPmZyZWVfcGFja2V0X2xpc3RzKSkpCi0JCQlyZXR1cm4gLUVJTlRSOwotCX0KLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGxvbmcgYW1kdHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBzdHJlYW0gKnMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGFtZHRwX2lvY3RsIGNmZzsKLQlpbnQgZXJyOwotCWxvY2tfa2VybmVsKCk7Ci0Jc3dpdGNoKGNtZCkKLQl7Ci0JY2FzZSBBTURUUF9JT0NfUExVRzoKLQljYXNlIEFNRFRQX0lPQ19DSEFOTkVMOgotCQlpZiAoY29weV9mcm9tX3VzZXIoJmNmZywgKHN0cnVjdCBhbWR0cF9pb2N0bCBfX3VzZXIgKikgYXJnLCBzaXplb2YgY2ZnKSkKLQkJCWVyciA9IC1FRkFVTFQ7Ci0JCWVsc2UKLQkJCWVyciA9IHN0cmVhbV9jb25maWd1cmUocywgY21kLCAmY2ZnKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQllcnIgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYW1kdHBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqcHQpCi17Ci0Jc3RydWN0IHN0cmVhbSAqcyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXBvbGxfd2FpdChmaWxlLCAmcy0+cGFja2V0X2xpc3Rfd2FpdCwgcHQpOwotCi0JaWYgKCFsaXN0X2VtcHR5KCZzLT5mcmVlX3BhY2tldF9saXN0cykpCi0JCXJldHVybiBQT0xMT1VUIHwgUE9MTFdSTk9STTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFtZHRwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGFtZHRwX2hvc3QgKmhvc3Q7Ci0JaW50IGkgPSBpZWVlMTM5NF9maWxlX3RvX2luc3RhbmNlKGZpbGUpOwotCi0JaG9zdCA9IGhwc2JfZ2V0X2hvc3RpbmZvX2J5a2V5KCZhbWR0cF9oaWdobGV2ZWwsIGkpOwotCWlmIChob3N0ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gc3RyZWFtX2FsbG9jKGhvc3QpOwotCWlmIChmaWxlLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhbWR0cF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzdHJlYW0gKnMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlzdHJlYW1fZnJlZShzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNkZXYgYW1kdHBfY2RldjsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFtZHRwX2ZvcHMgPQotewotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS53cml0ZSA9CWFtZHRwX3dyaXRlLAotCS5wb2xsID0JCWFtZHRwX3BvbGwsCi0JLnVubG9ja2VkX2lvY3RsID0gYW1kdHBfaW9jdGwsCi0JLmNvbXBhdF9pb2N0bCA9IGFtZHRwX2lvY3RsLCAvKiBBbGwgYW1kdHAgaW9jdGxzIGFyZSBjb21wYXRpYmxlICovCi0JLm9wZW4gPQkJYW1kdHBfb3BlbiwKLQkucmVsZWFzZSA9CWFtZHRwX3JlbGVhc2UKLX07Ci0KLS8qIElFRUUxMzk0IFN1YnN5c3RlbSBmdW5jdGlvbnMgKi8KLQotc3RhdGljIHZvaWQgYW1kdHBfYWRkX2hvc3Qoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCkKLXsKLQlzdHJ1Y3QgYW1kdHBfaG9zdCAqYWg7Ci0JaW50IG1pbm9yOwotCi0JaWYgKHN0cmNtcChob3N0LT5kcml2ZXItPm5hbWUsIE9IQ0kxMzk0X0RSSVZFUl9OQU1FKSAhPSAwKQotCQlyZXR1cm47Ci0KLQlhaCA9IGhwc2JfY3JlYXRlX2hvc3RpbmZvKCZhbWR0cF9oaWdobGV2ZWwsIGhvc3QsIHNpemVvZigqYWgpKTsKLQlpZiAoIWFoKSB7Ci0JCUhQU0JfRVJSKCJhbWR0cDogVW5hYmxlIGFibGUgdG8gYWxsb2MgaG9zdGluZm8iKTsKLQkJcmV0dXJuOwotCX0KLQotCWFoLT5ob3N0ID0gaG9zdDsKLQlhaC0+b2hjaSA9IGhvc3QtPmhvc3RkYXRhOwotCi0JaHBzYl9zZXRfaG9zdGluZm9fa2V5KCZhbWR0cF9oaWdobGV2ZWwsIGhvc3QsIGFoLT5ob3N0LT5pZCk7Ci0KLQltaW5vciA9IElFRUUxMzk0X01JTk9SX0JMT0NLX0FNRFRQICogMTYgKyBhaC0+aG9zdC0+aWQ7Ci0KLQlJTklUX0xJU1RfSEVBRCgmYWgtPnN0cmVhbV9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmYWgtPnN0cmVhbV9saXN0X2xvY2spOwotCi0JZGV2ZnNfbWtfY2RldihNS0RFVihJRUVFMTM5NF9NQUpPUiwgbWlub3IpLAotCQkJU19JRkNIUnxTX0lSVVNSfFNfSVdVU1IsICJhbWR0cC8lZCIsIGFoLT5ob3N0LT5pZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFtZHRwX3JlbW92ZV9ob3N0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpCi17Ci0Jc3RydWN0IGFtZHRwX2hvc3QgKmFoID0gaHBzYl9nZXRfaG9zdGluZm8oJmFtZHRwX2hpZ2hsZXZlbCwgaG9zdCk7Ci0KLQlpZiAoYWgpCi0JCWRldmZzX3JlbW92ZSgiYW1kdHAvJWQiLCBhaC0+aG9zdC0+aWQpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgc3RydWN0IGhwc2JfaGlnaGxldmVsIGFtZHRwX2hpZ2hsZXZlbCA9IHsKLQkubmFtZSA9CQkiYW1kdHAiLAotCS5hZGRfaG9zdCA9CWFtZHRwX2FkZF9ob3N0LAotCS5yZW1vdmVfaG9zdCA9CWFtZHRwX3JlbW92ZV9ob3N0LAotfTsKLQotLyogTW9kdWxlIGludGVyZmFjZSAqLwotCi1NT0RVTEVfQVVUSE9SKCJLcmlzdGlhbiBIb2dzYmVyZyA8aG9nc2JlcmdAdXNlcnMuc2YubmV0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEF1ZGlvICYgTXVzaWMgRGF0YSBUcmFuc21pc3Npb24gUHJvdG9jb2wgIgotCQkgICAib24gT0hDSSBib2FyZHMuIik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiYW1kdHAiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIGludCBfX2luaXQgYW1kdHBfaW5pdF9tb2R1bGUgKHZvaWQpCi17Ci0JY2Rldl9pbml0KCZhbWR0cF9jZGV2LCAmYW1kdHBfZm9wcyk7Ci0JYW1kdHBfY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwotCWtvYmplY3Rfc2V0X25hbWUoJmFtZHRwX2NkZXYua29iaiwgImFtZHRwIik7Ci0JaWYgKGNkZXZfYWRkKCZhbWR0cF9jZGV2LCBJRUVFMTM5NF9BTURUUF9ERVYsIDE2KSkgewotCQlIUFNCX0VSUigiYW1kdHA6IHVuYWJsZSB0byBhZGQgY2hhciBkZXZpY2UiKTsKLSAJCXJldHVybiAtRUlPOwotIAl9Ci0KLQlkZXZmc19ta19kaXIoImFtZHRwIik7Ci0KLQlocHNiX3JlZ2lzdGVyX2hpZ2hsZXZlbCgmYW1kdHBfaGlnaGxldmVsKTsKLQotCUhQU0JfSU5GTygiTG9hZGVkIEFNRFRQIGRyaXZlciIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhbWR0cF9leGl0X21vZHVsZSAodm9pZCkKLXsKLSAgICAgICAgaHBzYl91bnJlZ2lzdGVyX2hpZ2hsZXZlbCgmYW1kdHBfaGlnaGxldmVsKTsKLQlkZXZmc19yZW1vdmUoImFtZHRwIik7Ci0JY2Rldl9kZWwoJmFtZHRwX2NkZXYpOwotCi0JSFBTQl9JTkZPKCJVbmxvYWRlZCBBTURUUCBkcml2ZXIiKTsKLX0KLQotbW9kdWxlX2luaXQoYW1kdHBfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoYW1kdHBfZXhpdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9hbWR0cC5oIGIvZHJpdmVycy9pZWVlMTM5NC9hbWR0cC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzFmMjhlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvYW1kdHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qIC0qLSBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLQotI2lmbmRlZiBfX0FNRFRQX0gKLSNkZWZpbmUgX19BTURUUF9ICi0KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpbmNsdWRlICJpZWVlMTM5NC1pb2N0bC5oIgotCi0vKiBUaGUgdXNlcnNwYWNlIGludGVyZmFjZSBmb3IgdGhlIEF1ZGlvICYgTXVzaWMgRGF0YSBUcmFuc21pc3Npb24KLSAqIFByb3RvY29sIGRyaXZlciBpcyByZWFsbHkgc2ltcGxlLiBGaXJzdCwgb3BlbiAvZGV2L2FtZHRwLCB1c2UgdGhlCi0gKiBpb2N0bCB0byBjb25maWd1cmUgZm9ybWF0LCByYXRlLCBkaW1lbnNpb24gYW5kIGVpdGhlciBwbHVnIG9yCi0gKiBjaGFubmVsLCB0aGVuIHN0YXJ0IHdyaXRpbmcgc2FtcGxlcy4KLSAqCi0gKiBUaGUgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciBhcmUgbGlzdGVkIGJlbG93LgotICogQU1EVFBfRk9STUFUX1JBVyBjb3JyZXNwb25kcyB0byB0aGUgQU04MjQgcmF3IGZvcm1hdCwgd2hpY2ggY2FuCi0gKiBjYXJyeSBhbnkgbnVtYmVyIG9mIGNoYW5uZWxzLCBzbyB1c2UgdGhpcyBpZiB5b3UncmUgc3RyZWFtaW5nCi0gKiBtdWx0aWNoYW5uZWwgYXVkaW8uICBUaGUgQU1EVFBfRk9STUFUX0lFQzk1OF9QQ00gY29ycmVzcG9uZHMgdG8gdGhlCi0gKiBBTTgyNCBJRUM5NTggZW5jYXBzdWxhdGlvbiB3aXRob3V0IHRoZSBJRUM5NTggZGF0YSBiaXQgc2V0LCB1c2luZwotICogQU1EVFBfRk9STUFUX0lFQzk1OF9BQzMgd2lsbCB0cmFuc21pdCB0aGUgc2FtcGxlcyB3aXRoIHRoZSBkYXRhIGJpdAotICogc2V0LCBzdWl0YWJsZSBmb3IgdHJhbnNtaXR0aW5nIGNvbXByZXNzZWQgQUMtMyBhdWRpby4KLSAqCi0gKiBUaGUgcmF0ZSBmaWVsZCBzcGVjaWZpZXMgdGhlIHRyYW5zbWlzc2lvbiByYXRlOyBzdXBwb3J0ZWQgdmFsdWVzCi0gKiBhcmUgMzIwMDAsIDQ0MTAwLCA0ODAwMCwgODgyMDAsIDk2MDAwLCAxNzY0MDAgYW5kIDE5MjAwMC4KLSAqCi0gKiBUaGUgZGltZW5zaW9uIGZpZWxkIHNwZWNpZmllcyB0aGUgZGltZW5zaW9uIG9mIHRoZSBzaWduYWwsIHRoYXQgaXMsCi0gKiB0aGUgbnVtYmVyIG9mIGF1ZGlvIGNoYW5uZWxzLiAgT25seSBBTURUUF9GT1JNQVRfUkFXIHN1cHBvcnRzCi0gKiBzZXR0aW5ncyBncmVhdGVyIHRoYW4gMi4KLSAqCi0gKiBUaGUgbW9kZSBmaWVsZCBzcGVjaWZpZXMgd2hpY2ggdHJhbnNtaXNzaW9uIG1vZGUgdG8gdXNlLiBUaGUgQU1EVFAKLSAqIHNwZWNpZmllcyB0d28gZGlmZmVyZW50IHRyYW5zbWlzc2lvbiBtb2RlczogYmxvY2tpbmcgYW5kCi0gKiBub24tYmxvY2tpbmcuICBUaGUgYmxvY2tpbmcgdHJhbnNtaXNzaW9uIG1vZGUgYWx3YXlzIHNlbmQgYSBmaXhlZAotICogbnVtYmVyIG9mIHNhbXBsZXMsIHR5cGljYWxseSA4LCAxNiBvciAzMi4gIFRvIGV4YWN0bHkgbWF0Y2ggdGhlCi0gKiB0cmFuc21pc3Npb24gcmF0ZSwgdGhlIGRyaXZlciBhbHRlcm5hdGVzIGJldHdlZW4gc2VuZGluZyBlbXB0eSBhbmQKLSAqIG5vbi1lbXB0eSBwYWNrZXRzLiAgSW4gbm9uLWJsb2NraW5nIG1vZGUsIHRoZSBkcml2ZXIgdHJhbnNtaXRzIGFzCi0gKiBzbWFsbCBwYWNrZXRzIGFzIHBvc3NpYmxlLiAgRm9yIGV4YW1wbGUsIGZvciBhIHRyYW5zbWlzc2lvbiByYXRlIG9mCi0gKiA0NDEwMEh6LCB0aGUgZHJpdmVyIHNob3VsZCBzZW5kIDUgNDEvODAgc2FtcGxlcyBpbiBldmVyeSBjeWNsZSwgYnV0Ci0gKiB0aGlzIGlzIG5vdCBwb3NzaWJsZSBzbyBpbnN0ZWFkIHRoZSBkcml2ZXIgYWx0ZXJuYXRlcyBiZXR3ZWVuCi0gKiBzZW5kaW5nIDUgYW5kIDYgc2FtcGxlcy4KLSAqCi0gKiBUaGUgbGFzdCB0aGluZyB0byBzcGVjaWZ5IGlzIGVpdGhlciB0aGUgaXNvY2hyb25vdXMgY2hhbm5lbCB0byB1c2UKLSAqIG9yIHRoZSBvdXRwdXQgcGx1ZyB0byBjb25uZWN0IHRvLiAgSWYgeW91IGtub3cgd2hhdCBjaGFubmVsIHRoZQotICogZGVzdGluYXRpb24gZGV2aWNlIHdpbGwgbGlzdGVuIG9uLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGNoYW5uZWwKLSAqIGRpcmVjdGx5IGFuZCB1c2UgdGhlIEFNRFRQX0lPQ19DSEFOTkVMIGlvY3RsLiAgSG93ZXZlciwgaWYgdGhlCi0gKiBkZXN0aW5hdGlvbiBkZXZpY2UgY2hvb3NlcyB0aGUgY2hhbm5lbCBhbmQgdXNlcyB0aGUgSUVDNjE4ODMtMSBwbHVnCi0gKiBtZWNoYW5pc20sIHlvdSBjYW4gc3BlY2lmeSBhbiBvdXRwdXQgcGx1ZyB0byBjb25uZWN0IHRvLiAgVGhlCi0gKiBkcml2ZXIgd2lsbCBwaWNrIHVwIHRoZSBjaGFubmVsIG51bWJlciBmcm9tIHRoZSBwbHVnIG9uY2UgdGhlCi0gKiBkZXN0aW5hdGlvbiBkZXZpY2UgbG9ja3MgdGhlIG91dHB1dCBwbHVnIGNvbnRyb2wgcmVnaXN0ZXIuICBJbiB0aGlzCi0gKiBjYXNlIHNldCB0aGUgcGx1ZyBmaWVsZCBhbmQgdXNlIHRoZSBBTURUUF9JT0NfUExVRyBpb2N0bC4KLSAqCi0gKiBIYXZpbmcgY29uZmlndXJlZCB0aGUgaW50ZXJmYWNlLCB0aGUgZHJpdmVyIG5vdyBhY2NlcHRzIHdyaXRlcyBvZgotICogcmVndWxhciAxNiBiaXQgc2lnbmVkIGxpdHRsZSBlbmRpYW4gc2FtcGxlcywgd2l0aCB0aGUgY2hhbm5lbHMKLSAqIGludGVybGVhdmVkLiAgRm9yIGV4YW1wbGUsIDQgY2hhbm5lbHMgd291bGQgbG9vayBsaWtlOgotICoKLSAqICAgfCBzYW1wbGUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzYW1wbGUgMSAgICAuLi4KLSAqICAgfCBjaC4gMCAgICAgfCBjaC4gMSAgICAgfCBjaC4gMiAgICAgfCBjaC4gMyAgICAgfCBjaC4gMCAgICAgfCAuLi4KLSAqICAgfCBsc2IgfCBtc2IgfCBsc2IgfCBtc2IgfCBsc2IgfCBtc2IgfCBsc2IgfCBtc2IgfCBsc2IgfCBtc2IgfCAuLi4KLSAqCi0gKi8KLQotZW51bSB7Ci0JQU1EVFBfRk9STUFUX1JBVywKLQlBTURUUF9GT1JNQVRfSUVDOTU4X1BDTSwKLQlBTURUUF9GT1JNQVRfSUVDOTU4X0FDMwotfTsKLQotZW51bSB7Ci0JQU1EVFBfTU9ERV9CTE9DS0lORywKLQlBTURUUF9NT0RFX05PTl9CTE9DS0lORywKLX07Ci0KLWVudW0gewotCUFNRFRQX0lOUFVUX0xFMTYsCi0JQU1EVFBfSU5QVVRfQkUxNiwKLX07Ci0KLXN0cnVjdCBhbWR0cF9pb2N0bCB7Ci0JX191MzIgZm9ybWF0OwotCV9fdTMyIHJhdGU7Ci0JX191MzIgZGltZW5zaW9uOwotCV9fdTMyIG1vZGU7Ci0JdW5pb24geyBfX3UzMiBjaGFubmVsOyBfX3UzMiBwbHVnOyB9IHU7Ci19OwotCi0jZW5kaWYgLyogX19BTURUUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2NtcC5jIGIvZHJpdmVycy9pZWVlMTM5NC9jbXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlhZWQyNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2NtcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzExICswLDAgQEAKLS8qIC0qLSBjLWJhc2ljLW9mZnNldDogOCAtKi0KLSAqCi0gKiBjbXAuYyAtIENvbm5lY3Rpb24gTWFuYWdlbWVudCBQcm9jZWR1cmVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgS3Jpc3RpYW4gSPhnc2JlcmcKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLS8qIFRPRE8KLSAqIC0tLS0KLSAqCi0gKiAtIEltcGxlbWVudCBJRUM2MTg4My0xIG91dHB1dCBwbHVncyBhbmQgY29ubmVjdGlvbiBtYW5hZ2VtZW50LgotICogICBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBwYXJ0IG9mIHRoZSBnZW5lcmFsIHN1YnN5c3RlbSwgYXMgaXQgY291bGQKLSAqICAgYmUgc2hhcmVkIHdpdGggZHYxMzk0LgotICoKLSAqIC0gQWRkIElFQzYxODgzIHVuaXQgZGlyZWN0b3J5IHdoZW4gbG9hZGluZyB0aGlzIG1vZHVsZS4gIFRoaXMKLSAqICAgcmVxdWlyZXMgYSBydW4tdGltZSBjaGFuZ2VhYmxlIGNvbmZpZyByb20uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi0jaW5jbHVkZSAiaG9zdHMuaCIKLSNpbmNsdWRlICJoaWdobGV2ZWwuaCIKLSNpbmNsdWRlICJpZWVlMTM5NC5oIgotI2luY2x1ZGUgImllZWUxMzk0X2NvcmUuaCIKLSNpbmNsdWRlICJjbXAuaCIKLQotc3RydWN0IHBsdWcgewotCXVuaW9uIHsKLQkJc3RydWN0IGNtcF9wY3IgcGNyOwotCQlxdWFkbGV0X3QgcXVhZGxldDsKLQl9IHU7Ci0Jdm9pZCAoKnVwZGF0ZSkoc3RydWN0IGNtcF9wY3IgKnBsdWcsIHZvaWQgKmRhdGEpOwotCXZvaWQgKmRhdGE7Ci19OwotCi1zdHJ1Y3QgY21wX2hvc3QgewotCXN0cnVjdCBocHNiX2hvc3QgKmhvc3Q7Ci0KLQl1bmlvbiB7Ci0JCXN0cnVjdCBjbXBfbXByIG9tcHI7Ci0JCXF1YWRsZXRfdCBvbXByX3F1YWRsZXQ7Ci0JfSB1OwotCXN0cnVjdCBwbHVnIG9wY3JbMl07Ci0KLQl1bmlvbiB7Ci0JCXN0cnVjdCBjbXBfbXByIGltcHI7Ci0JCXF1YWRsZXRfdCBpbXByX3F1YWRsZXQ7Ci0JfSB2OwotCXN0cnVjdCBwbHVnIGlwY3JbMl07Ci19OwotCi1lbnVtIHsKLQlDTVBfUDJQX0NPTk5FQ1RJT04sCi0JQ01QX0JDX0NPTk5FQ1RJT04KLX07Ci0KLSNkZWZpbmUgQ1NSX1BDUl9NQVAgICAgICAweDkwMAotI2RlZmluZSBDU1JfUENSX01BUF9FTkQgIDB4OWZjCi0KLXN0YXRpYyBzdHJ1Y3QgaHBzYl9oaWdobGV2ZWwgY21wX2hpZ2hsZXZlbDsKLQotc3RhdGljIHZvaWQgY21wX2FkZF9ob3N0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpOwotc3RhdGljIHZvaWQgY21wX2hvc3RfcmVzZXQoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCk7Ci1zdGF0aWMgaW50IHBjcl9yZWFkKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBub2RlaWQsIHF1YWRsZXRfdCAqYnVmLAotCQkgICAgdTY0IGFkZHIsIHNpemVfdCBsZW5ndGgsIHUxNiBmbGFncyk7Ci1zdGF0aWMgaW50IHBjcl9sb2NrKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBub2RlaWQsIHF1YWRsZXRfdCAqc3RvcmUsCi0JCSAgICB1NjQgYWRkciwgcXVhZGxldF90IGRhdGEsIHF1YWRsZXRfdCBhcmcsIGludCBleHRjb2RlLCB1MTYgZmxhZ3MpOwotCi1zdGF0aWMgc3RydWN0IGhwc2JfaGlnaGxldmVsIGNtcF9oaWdobGV2ZWwgPSB7Ci0JLm5hbWUgPQkJImNtcCIsCi0JLmFkZF9ob3N0ID0JY21wX2FkZF9ob3N0LAotCS5ob3N0X3Jlc2V0ID0JY21wX2hvc3RfcmVzZXQsCi19OwotCi1zdGF0aWMgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgcGNyX29wcyA9IHsKLQkucmVhZCA9CXBjcl9yZWFkLAotCS5sb2NrID0JcGNyX2xvY2ssCi19OwotCi0KLXN0cnVjdCBjbXBfcGNyICoKLWNtcF9yZWdpc3Rlcl9vcGNyKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBvcGNyX251bWJlciwgaW50IHBheWxvYWQsCi0JCSAgdm9pZCAoKnVwZGF0ZSkoc3RydWN0IGNtcF9wY3IgKnBjciwgdm9pZCAqZGF0YSksCi0JCSAgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgY21wX2hvc3QgKmNoOwotCXN0cnVjdCBwbHVnICpwbHVnOwotCi0JY2ggPSBocHNiX2dldF9ob3N0aW5mbygmY21wX2hpZ2hsZXZlbCwgaG9zdCk7Ci0KLQlpZiAob3Bjcl9udW1iZXIgPj0gY2gtPnUub21wci5ucGx1Z3MgfHwKLQkgICAgY2gtPm9wY3Jbb3Bjcl9udW1iZXJdLnVwZGF0ZSAhPSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXBsdWcgPSAmY2gtPm9wY3Jbb3Bjcl9udW1iZXJdOwotCXBsdWctPnUucGNyLm9ubGluZSA9IDE7Ci0JcGx1Zy0+dS5wY3IuYmNhc3RfY291bnQgPSAwOwotCXBsdWctPnUucGNyLnAycF9jb3VudCA9IDA7Ci0JcGx1Zy0+dS5wY3Iub3ZlcmhlYWQgPSAwOwotCXBsdWctPnUucGNyLnBheWxvYWQgPSBwYXlsb2FkOwotCXBsdWctPnVwZGF0ZSA9IHVwZGF0ZTsKLQlwbHVnLT5kYXRhID0gZGF0YTsKLQotCXJldHVybiAmcGx1Zy0+dS5wY3I7Ci19Ci0KLXZvaWQgY21wX3VucmVnaXN0ZXJfb3BjcihzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBzdHJ1Y3QgY21wX3BjciAqb3BjcikKLXsKLQlzdHJ1Y3QgY21wX2hvc3QgKmNoOwotCXN0cnVjdCBwbHVnICpwbHVnOwotCi0JY2ggPSBocHNiX2dldF9ob3N0aW5mbygmY21wX2hpZ2hsZXZlbCwgaG9zdCk7Ci0JcGx1ZyA9IChzdHJ1Y3QgcGx1ZyAqKW9wY3I7Ci0JaWYgKHBsdWcgLSBjaC0+b3BjciA+PSBjaC0+dS5vbXByLm5wbHVncykgQlVHKCk7Ci0KLQlwbHVnLT51LnBjci5vbmxpbmUgPSAwOwotCXBsdWctPnVwZGF0ZSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc2V0X3BsdWdzKHN0cnVjdCBjbXBfaG9zdCAqY2gpCi17Ci0JaW50IGk7Ci0KLQljaC0+dS5vbXByLm5vbl9wZXJzaXN0ZW50X2V4dCA9IDB4ZmY7Ci0JZm9yIChpID0gMDsgaSA8IGNoLT51Lm9tcHIubnBsdWdzOyBpKyspIHsKLQkJY2gtPm9wY3JbaV0udS5wY3IuYmNhc3RfY291bnQgPSAwOwotCQljaC0+b3BjcltpXS51LnBjci5wMnBfY291bnQgPSAwOwotCQljaC0+b3BjcltpXS51LnBjci5vdmVyaGVhZCA9IDA7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBjbXBfYWRkX2hvc3Qoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCkKLXsKLQlzdHJ1Y3QgY21wX2hvc3QgKmNoID0gaHBzYl9jcmVhdGVfaG9zdGluZm8oJmNtcF9oaWdobGV2ZWwsIGhvc3QsIHNpemVvZiAoKmNoKSk7Ci0KLQlpZiAoY2ggPT0gTlVMTCkgewotCQlIUFNCX0VSUigiRmFpbGVkIHRvIGFsbG9jYXRlIGNtcF9ob3N0Iik7Ci0JCXJldHVybjsKLQl9Ci0KLQlocHNiX3JlZ2lzdGVyX2FkZHJzcGFjZSgmY21wX2hpZ2hsZXZlbCwgaG9zdCwgJnBjcl9vcHMsCi0JCQkJQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfUENSX01BUCwKLQkJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9QQ1JfTUFQX0VORCk7Ci0KLQljaC0+aG9zdCA9IGhvc3Q7Ci0JY2gtPnUub21wci5yYXRlID0gSUVFRTEzOTRfU1BFRURfMTAwOwotCWNoLT51Lm9tcHIuYmNhc3RfY2hhbm5lbF9iYXNlID0gNjM7Ci0JY2gtPnUub21wci5ucGx1Z3MgPSAyOwotCi0JcmVzZXRfcGx1Z3MoY2gpOwotfQotCi1zdGF0aWMgdm9pZCBjbXBfaG9zdF9yZXNldChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0KQotewotCXN0cnVjdCBjbXBfaG9zdCAqY2g7Ci0KLQljaCA9IGhwc2JfZ2V0X2hvc3RpbmZvKCZjbXBfaGlnaGxldmVsLCBob3N0KTsKLQlpZiAoY2ggPT0gTlVMTCkgewotCQlIUFNCX0VSUigiY21wOiBUcmllZCB0byByZXNldCB1bmtub3duIGhvc3QiKTsKLQkJcmV0dXJuOwotCX0KLQotCXJlc2V0X3BsdWdzKGNoKTsKLX0KLQotc3RhdGljIGludCBwY3JfcmVhZChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgbm9kZWlkLCBxdWFkbGV0X3QgKmJ1ZiwKLQkJICAgIHU2NCBhZGRyLCBzaXplX3QgbGVuZ3RoLCB1MTYgZmxhZ3MpCi17Ci0JaW50IGNzcmFkZHIgPSBhZGRyIC0gQ1NSX1JFR0lTVEVSX0JBU0U7Ci0JaW50IHBsdWc7Ci0Jc3RydWN0IGNtcF9ob3N0ICpjaDsKLQotCWlmIChsZW5ndGggIT0gNCkKLQkJcmV0dXJuIFJDT0RFX1RZUEVfRVJST1I7Ci0KLQljaCA9IGhwc2JfZ2V0X2hvc3RpbmZvKCZjbXBfaGlnaGxldmVsLCBob3N0KTsKLQlpZiAoY3NyYWRkciA9PSAweDkwMCkgewotCQkqYnVmID0gY3B1X3RvX2JlMzIoY2gtPnUub21wcl9xdWFkbGV0KTsKLQkJcmV0dXJuIFJDT0RFX0NPTVBMRVRFOwotCX0KLQllbHNlIGlmIChjc3JhZGRyIDwgMHg5MDQgKyBjaC0+dS5vbXByLm5wbHVncyAqIDQpIHsKLQkJcGx1ZyA9IChjc3JhZGRyIC0gMHg5MDQpIC8gNDsKLQkJKmJ1ZiA9IGNwdV90b19iZTMyKGNoLT5vcGNyW3BsdWddLnUucXVhZGxldCk7Ci0JCXJldHVybiBSQ09ERV9DT01QTEVURTsKLQl9Ci0JZWxzZSBpZiAoY3NyYWRkciA8IDB4OTgwKSB7Ci0JCXJldHVybiBSQ09ERV9BRERSRVNTX0VSUk9SOwotCX0KLQllbHNlIGlmIChjc3JhZGRyID09IDB4OTgwKSB7Ci0JCSpidWYgPSBjcHVfdG9fYmUzMihjaC0+di5pbXByX3F1YWRsZXQpOwotCQlyZXR1cm4gUkNPREVfQ09NUExFVEU7Ci0JfQotCWVsc2UgaWYgKGNzcmFkZHIgPCAweDk4NCArIGNoLT52LmltcHIubnBsdWdzICogNCkgewotCQlwbHVnID0gKGNzcmFkZHIgLSAweDk4NCkgLyA0OwotCQkqYnVmID0gY3B1X3RvX2JlMzIoY2gtPmlwY3JbcGx1Z10udS5xdWFkbGV0KTsKLQkJcmV0dXJuIFJDT0RFX0NPTVBMRVRFOwotCX0KLQllbHNlCi0JCXJldHVybiBSQ09ERV9BRERSRVNTX0VSUk9SOwotfQotCi1zdGF0aWMgaW50IHBjcl9sb2NrKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBub2RlaWQsIHF1YWRsZXRfdCAqc3RvcmUsCi0JCSAgICB1NjQgYWRkciwgcXVhZGxldF90IGRhdGEsIHF1YWRsZXRfdCBhcmcsIGludCBleHRjb2RlLCB1MTYgZmxhZ3MpCi17Ci0JaW50IGNzcmFkZHIgPSBhZGRyIC0gQ1NSX1JFR0lTVEVSX0JBU0U7Ci0JaW50IHBsdWc7Ci0Jc3RydWN0IGNtcF9ob3N0ICpjaDsKLQotCWNoID0gaHBzYl9nZXRfaG9zdGluZm8oJmNtcF9oaWdobGV2ZWwsIGhvc3QpOwotCi0JaWYgKGV4dGNvZGUgIT0gRVhUQ09ERV9DT01QQVJFX1NXQVApCi0JCXJldHVybiBSQ09ERV9UWVBFX0VSUk9SOwotCi0JaWYgKGNzcmFkZHIgPT0gMHg5MDApIHsKLQkJLyogRklYTUU6IElnbm9yZSB3cml0ZXMgdG8gYml0cyAzMC0zMSBhbmQgMC03ICovCi0JCSpzdG9yZSA9IGNwdV90b19iZTMyKGNoLT51Lm9tcHJfcXVhZGxldCk7Ci0JCWlmIChhcmcgPT0gY3B1X3RvX2JlMzIoY2gtPnUub21wcl9xdWFkbGV0KSkKLQkJCWNoLT51Lm9tcHJfcXVhZGxldCA9IGJlMzJfdG9fY3B1KGRhdGEpOwotCi0JCXJldHVybiBSQ09ERV9DT01QTEVURTsKLQl9Ci0JaWYgKGNzcmFkZHIgPCAweDkwNCArIGNoLT51Lm9tcHIubnBsdWdzICogNCkgewotCQlwbHVnID0gKGNzcmFkZHIgLSAweDkwNCkgLyA0OwotCQkqc3RvcmUgPSBjcHVfdG9fYmUzMihjaC0+b3BjcltwbHVnXS51LnF1YWRsZXQpOwotCi0JCWlmIChhcmcgPT0gKnN0b3JlKQotCQkJY2gtPm9wY3JbcGx1Z10udS5xdWFkbGV0ID0gYmUzMl90b19jcHUoZGF0YSk7Ci0KLQkJaWYgKGJlMzJfdG9fY3B1KCpzdG9yZSkgIT0gY2gtPm9wY3JbcGx1Z10udS5xdWFkbGV0ICYmCi0JCSAgICBjaC0+b3BjcltwbHVnXS51cGRhdGUgIT0gTlVMTCkKLQkJCWNoLT5vcGNyW3BsdWddLnVwZGF0ZSgmY2gtPm9wY3JbcGx1Z10udS5wY3IsCi0JCQkJCSAgICAgIGNoLT5vcGNyW3BsdWddLmRhdGEpOwotCi0JCXJldHVybiBSQ09ERV9DT01QTEVURTsKLQl9Ci0JZWxzZSBpZiAoY3NyYWRkciA8IDB4OTgwKSB7Ci0JCXJldHVybiBSQ09ERV9BRERSRVNTX0VSUk9SOwotCX0KLQllbHNlIGlmIChjc3JhZGRyID09IDB4OTgwKSB7Ci0JCS8qIEZJWE1FOiBJZ25vcmUgd3JpdGVzIHRvIGJpdHMgMjQtMzEgYW5kIDAtNyAqLwotCQkqc3RvcmUgPSBjcHVfdG9fYmUzMihjaC0+dS5vbXByX3F1YWRsZXQpOwotCQlpZiAoYXJnID09IGNwdV90b19iZTMyKGNoLT51Lm9tcHJfcXVhZGxldCkpCi0JCQljaC0+dS5vbXByX3F1YWRsZXQgPSBiZTMyX3RvX2NwdShkYXRhKTsKLQotCQlyZXR1cm4gUkNPREVfQ09NUExFVEU7Ci0JfQotCWVsc2UgaWYgKGNzcmFkZHIgPCAweDk4NCArIGNoLT52LmltcHIubnBsdWdzICogNCkgewotCQlwbHVnID0gKGNzcmFkZHIgLSAweDk4NCkgLyA0OwotCQkqc3RvcmUgPSBjcHVfdG9fYmUzMihjaC0+aXBjcltwbHVnXS51LnF1YWRsZXQpOwotCi0JCWlmIChhcmcgPT0gKnN0b3JlKQotCQkJY2gtPmlwY3JbcGx1Z10udS5xdWFkbGV0ID0gYmUzMl90b19jcHUoZGF0YSk7Ci0KLQkJaWYgKGJlMzJfdG9fY3B1KCpzdG9yZSkgIT0gY2gtPmlwY3JbcGx1Z10udS5xdWFkbGV0ICYmCi0JCSAgICBjaC0+aXBjcltwbHVnXS51cGRhdGUgIT0gTlVMTCkKLQkJCWNoLT5pcGNyW3BsdWddLnVwZGF0ZSgmY2gtPmlwY3JbcGx1Z10udS5wY3IsCi0JCQkJCSAgICAgIGNoLT5pcGNyW3BsdWddLmRhdGEpOwotCi0JCXJldHVybiBSQ09ERV9DT01QTEVURTsKLQl9Ci0JZWxzZQotCQlyZXR1cm4gUkNPREVfQUREUkVTU19FUlJPUjsKLX0KLQotCi0vKiBNb2R1bGUgaW50ZXJmYWNlICovCi0KLU1PRFVMRV9BVVRIT1IoIktyaXN0aWFuIEhvZ3NiZXJnIDxob2dzYmVyZ0B1c2Vycy5zZi5uZXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkNvbm5lY3Rpb24gTWFuYWdlbWVudCBQcm9jZWR1cmVzIChDTVApIik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiY21wIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUVYUE9SVF9TWU1CT0woY21wX3JlZ2lzdGVyX29wY3IpOwotRVhQT1JUX1NZTUJPTChjbXBfdW5yZWdpc3Rlcl9vcGNyKTsKLQotc3RhdGljIGludCBfX2luaXQgY21wX2luaXRfbW9kdWxlICh2b2lkKQotewotCWhwc2JfcmVnaXN0ZXJfaGlnaGxldmVsICgmY21wX2hpZ2hsZXZlbCk7Ci0KLQlIUFNCX0lORk8oIkxvYWRlZCBDTVAgZHJpdmVyIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNtcF9leGl0X21vZHVsZSAodm9pZCkKLXsKLSAgICAgICAgaHBzYl91bnJlZ2lzdGVyX2hpZ2hsZXZlbCgmY21wX2hpZ2hsZXZlbCk7Ci0KLQlIUFNCX0lORk8oIlVubG9hZGVkIENNUCBkcml2ZXIiKTsKLX0KLQotbW9kdWxlX2luaXQoY21wX2luaXRfbW9kdWxlKTsKLW1vZHVsZV9leGl0KGNtcF9leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2NtcC5oIGIvZHJpdmVycy9pZWVlMTM5NC9jbXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkyODhiZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2NtcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotI2lmbmRlZiBfX0NNUF9ICi0jZGVmaW5lIF9fQ01QX0gKLQotc3RydWN0IGNtcF9tcHIgewotCXUzMiBucGx1Z3M6NTsKLQl1MzIgcmVzZXJ2ZWQ6MzsKLQl1MzIgcGVyc2lzdGVudF9leHQ6ODsKLQl1MzIgbm9uX3BlcnNpc3RlbnRfZXh0Ojg7Ci0JdTMyIGJjYXN0X2NoYW5uZWxfYmFzZTo2OwotCXUzMiByYXRlOjI7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3QgY21wX3BjciB7Ci0JdTMyIHBheWxvYWQ6MTA7Ci0JdTMyIG92ZXJoZWFkOjQ7Ci0JdTMyIHNwZWVkOjI7Ci0JdTMyIGNoYW5uZWw6NjsKLQl1MzIgcmVzZXJ2ZWQ6MjsKLQl1MzIgcDJwX2NvdW50OjY7Ci0JdTMyIGJjYXN0X2NvdW50OjE7Ci0JdTMyIG9ubGluZToxOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IGNtcF9wY3IgKmNtcF9yZWdpc3Rlcl9vcGNyKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBwbHVnLAotCQkJCSAgaW50IHBheWxvYWQsCi0JCQkJICB2b2lkICgqdXBkYXRlKShzdHJ1Y3QgY21wX3BjciAqcGx1ZywKLQkJCQkJCSB2b2lkICpkYXRhKSwKLQkJCQkgIHZvaWQgKmRhdGEpOwotdm9pZCBjbXBfdW5yZWdpc3Rlcl9vcGNyKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIHN0cnVjdCBjbXBfcGNyICpwbHVnKTsKLQotI2VuZGlmIC8qIF9fQ01QX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwppbmRleCAyYzY3NDAyLi5iMWIxNGY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCkBAIC05OCw3ICs5OCw3IEBACiAKIGNvbmZpZyBUT1VDSFNDUkVFTl9IUDYwMAogCXRyaXN0YXRlICJIUCBKb3JuYWRhIDY4MC82OTAgdG91Y2hzY3JlZW4iCi0JZGVwZW5kcyBvbiBTSF9IUDYwMCAmJiBTSF9BREMKKwlkZXBlbmRzIG9uIFNIX0hQNlhYICYmIFNIX0FEQwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBIUCBKb3JuYWRhIDY4MCBvciA2OTAgYW5kIHdhbnQgdG8KICAgICAgICAgICBzdXBwb3J0IHRoZSBidWlsdC1pbiB0b3VjaHNjcmVlbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCAxNzc4MTA0Li43MTQ1Y2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0zMzk1LDYgKzMzOTUsNyBAQAogCW1kZGV2LT5jdGltZSAgICAgICAgID0gZ2V0X3NlY29uZHMoKTsKIAogCW1kZGV2LT5sZXZlbCAgICAgICAgID0gaW5mby0+bGV2ZWw7CisJbWRkZXYtPmNsZXZlbFswXSAgICAgPSAwOwogCW1kZGV2LT5zaXplICAgICAgICAgID0gaW5mby0+c2l6ZTsKIAltZGRldi0+cmFpZF9kaXNrcyAgICA9IGluZm8tPnJhaWRfZGlza3M7CiAJLyogZG9uJ3Qgc2V0IG1kX21pbm9yLCBpdCBpcyBkZXRlcm1pbmVkIGJ5IHdoaWNoIC9kZXYvbWQqIHdhcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMKaW5kZXggZjI5NTcxNC4uYTA0YmI2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5jCkBAIC01NDIsNyArNTQyLDcgQEAKICAgICAgIC5yZW1vdmUJPSBidDg3OF9yZW1vdmUsCiB9OwogCi1zdGF0aWMgaW50IGJ0ODc4X3BjaV9kcml2ZXJfcmVnaXN0ZXJlZCA9IDA7CitzdGF0aWMgaW50IGJ0ODc4X3BjaV9kcml2ZXJfcmVnaXN0ZXJlZDsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBNb2R1bGUgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKaW5kZXggNDRmY2JlNy4uZWEyN2IxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKQEAgLTg5Myw3ICs4OTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGR2Yl9idDh4eF9yZW1vdmUoc3RydWN0IGJ0dHZfc3ViX2RldmljZSAqc3ViKQorc3RhdGljIHZvaWQgZHZiX2J0OHh4X3JlbW92ZShzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlICpzdWIpCiB7CiAJc3RydWN0IGR2Yl9idDh4eF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKCZzdWItPmRldik7CiAKQEAgLTkxMSw4ICs5MTEsNiBAQAogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmNhcmQtPmR2Yl9hZGFwdGVyKTsKIAogCWtmcmVlKGNhcmQpOwotCi0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYnR0dl9zdWJfZHJpdmVyIGRyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKaW5kZXggMDZiNjk2ZS4uNTRmOGI5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KLQorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSAiZHZiZGV2LmgiCiAKIHN0YXRpYyBpbnQgZHZiZGV2X2RlYnVnOwpAQCAtNDQsNyArNDQsNyBAQAogI2RlZmluZSBkcHJpbnRrIGlmIChkdmJkZXZfZGVidWcpIHByaW50awogCiBzdGF0aWMgTElTVF9IRUFEKGR2Yl9hZGFwdGVyX2xpc3QpOwotc3RhdGljIERFQ0xBUkVfTVVURVgoZHZiZGV2X3JlZ2lzdGVyX2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChkdmJkZXZfcmVnaXN0ZXJfbG9jayk7CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZG5hbWVzW10gPSB7CiAJInZpZGVvIiwgImF1ZGlvIiwgInNlYyIsICJmcm9udGVuZCIsICJkZW11eCIsICJkdnIiLCAiY2EiLApAQCAtMjAyLDExICsyMDIsMTEgQEAKIAlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2OwogCWludCBpZDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZkdmJkZXZfcmVnaXN0ZXJfbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZHZiZGV2X3JlZ2lzdGVyX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKChpZCA9IGR2YmRldl9nZXRfZnJlZV9pZCAoYWRhcCwgdHlwZSkpIDwgMCkgewotCQl1cCAoJmR2YmRldl9yZWdpc3Rlcl9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkdmJkZXZfcmVnaXN0ZXJfbG9jayk7CiAJCSpwZHZiZGV2ID0gTlVMTDsKIAkJcHJpbnRrICgiJXM6IGNvdWxkIGdldCBmaW5kIGZyZWUgZGV2aWNlIGlkLi4uXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVORklMRTsKQEAgLTIxNSwxMSArMjE1LDExIEBACiAJKnBkdmJkZXYgPSBkdmJkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHZiX2RldmljZSksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFkdmJkZXYpIHsKLQkJdXAoJmR2YmRldl9yZWdpc3Rlcl9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkdmJkZXZfcmVnaXN0ZXJfbG9jayk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXVwICgmZHZiZGV2X3JlZ2lzdGVyX2xvY2spOworCW11dGV4X3VubG9jaygmZHZiZGV2X3JlZ2lzdGVyX2xvY2spOwogCiAJbWVtY3B5KGR2YmRldiwgdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgZHZiX2RldmljZSkpOwogCWR2YmRldi0+dHlwZSA9IHR5cGU7CkBAIC0yODksMTEgKzI4OSwxMSBAQAogewogCWludCBudW07CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmZHZiZGV2X3JlZ2lzdGVyX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmR2YmRldl9yZWdpc3Rlcl9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmICgobnVtID0gZHZiZGV2X2dldF9mcmVlX2FkYXB0ZXJfbnVtICgpKSA8IDApIHsKLQkJdXAgKCZkdmJkZXZfcmVnaXN0ZXJfbG9jayk7CisJCW11dGV4X3VubG9jaygmZHZiZGV2X3JlZ2lzdGVyX2xvY2spOwogCQlyZXR1cm4gLUVORklMRTsKIAl9CiAKQEAgLTMwOSw3ICszMDksNyBAQAogCiAJbGlzdF9hZGRfdGFpbCAoJmFkYXAtPmxpc3RfaGVhZCwgJmR2Yl9hZGFwdGVyX2xpc3QpOwogCi0JdXAgKCZkdmJkZXZfcmVnaXN0ZXJfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkdmJkZXZfcmVnaXN0ZXJfbG9jayk7CiAKIAlyZXR1cm4gbnVtOwogfQpAQCAtMzIwLDEwICszMjAsMTAgQEAKIHsKIAlkZXZmc19yZW1vdmUoImR2Yi9hZGFwdGVyJWQiLCBhZGFwLT5udW0pOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmR2YmRldl9yZWdpc3Rlcl9sb2NrKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkdmJkZXZfcmVnaXN0ZXJfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJbGlzdF9kZWwgKCZhZGFwLT5saXN0X2hlYWQpOwotCXVwICgmZHZiZGV2X3JlZ2lzdGVyX2xvY2spOworCW11dGV4X3VubG9jaygmZHZiZGV2X3JlZ2lzdGVyX2xvY2spOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwppbmRleCAxOGQxNjk4Li5hN2ZiMDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCkBAIC02OTEsNiArNjkxLDggQEAKIG1vZHVsZV9leGl0IChjeHVzYl9tb2R1bGVfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIlBhdHJpY2sgQm9ldHRjaGVyIDxwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlPiIpOworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbTFrLm5ldD4iKTsKK01PRFVMRV9BVVRIT1IoIkNocmlzIFBhc2NvZSA8Yy5wYXNjb2VAaXRlZS51cS5lZHUuYXU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQ29uZXhhbnQgVVNCMi4wIGh5YnJpZCByZWZlcmVuY2UgZGVzaWduIik7CiBNT0RVTEVfVkVSU0lPTigiMS4wLWFscGhhIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYwppbmRleCA3NTcwNzVmLi4xYjk5MzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKQEAgLTMzMyw3ICszMzMsNyBAQAogCS5uYW1lID0gIlNhbXN1bmcgVEJNVjMwMTExSU4iLAogCS5taW4gPSA1NDAwMDAwMCwKIAkubWF4ID0gODYwMDAwMDAwLAotCS5jb3VudCA9IDQsCisJLmNvdW50ID0gNiwKIAkuZW50cmllcyA9IHsKIAkJeyAxNzIwMDAwMDAsIDQ0MDAwMDAwLCAxNjY2NjYsIDB4YjQsIDB4MDEgfSwKIAkJeyAyMTQwMDAwMDAsIDQ0MDAwMDAwLCAxNjY2NjYsIDB4YjQsIDB4MDIgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKaW5kZXggMzI3YTgwOC4uMjc0OTQ5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKQEAgLTgxLDcgKzgxLDcgQEAKIHN0YXRpYyBpbnQgaHdfc2VjdGlvbnM7CiBzdGF0aWMgaW50IHJnYl9vbjsKIHN0YXRpYyBpbnQgdm9sdW1lID0gMjU1Owotc3RhdGljIGludCBidWRnZXRwYXRjaCA9IDA7CitzdGF0aWMgaW50IGJ1ZGdldHBhdGNoOwogCiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGF2NzExMF9kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBsZXZlbCAoYml0bWFzaywgZGVmYXVsdCAwKSIpOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAKIHN0YXRpYyB2b2lkIHJlc3RhcnRfZmVlZHMoc3RydWN0IGF2NzExMCAqYXY3MTEwKTsKIAotc3RhdGljIGludCBhdjcxMTBfbnVtID0gMDsKK3N0YXRpYyBpbnQgYXY3MTEwX251bTsKIAogI2RlZmluZSBGRV9GVU5DX09WRVJSSURFKGZlX2Z1bmMsIGF2NzExMF9jb3B5LCBhdjcxMTBfZnVuYykgXAoge1wKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9ody5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmMKaW5kZXggY2IzNzc0NS4uYjJlNjNlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmMKQEAgLTE0Niw1MiArMTQ2LDUyIEBACiB7CiAJaW50IGk7CiAJaW50IGJsb2NrcywgcmVzdDsKLQl1MzIgYmFzZSwgYm9vdGJsb2NrID0gQk9PVF9CTE9DSzsKKwl1MzIgYmFzZSwgYm9vdGJsb2NrID0gQVY3MTEwX0JPT1RfQkxPQ0s7CiAKIAlkcHJpbnRrKDQsICIlcFxuIiwgYXY3MTEwKTsKIAotCWJsb2NrcyA9IGxlbiAvIEJPT1RfTUFYX1NJWkU7Ci0JcmVzdCA9IGxlbiAlIEJPT1RfTUFYX1NJWkU7CisJYmxvY2tzID0gbGVuIC8gQVY3MTEwX0JPT1RfTUFYX1NJWkU7CisJcmVzdCA9IGxlbiAlIEFWNzExMF9CT09UX01BWF9TSVpFOwogCWJhc2UgPSBEUkFNX1NUQVJUX0NPREU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYmxvY2tzOyBpKyspIHsKLQkJaWYgKHdhaXRkZWJpKGF2NzExMCwgQk9PVF9TVEFURSwgQk9PVFNUQVRFX0JVRkZFUl9FTVBUWSkgPCAwKSB7CisJCWlmICh3YWl0ZGViaShhdjcxMTAsIEFWNzExMF9CT09UX1NUQVRFLCBCT09UU1RBVEVfQlVGRkVSX0VNUFRZKSA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiBsb2FkX2RyYW0oKTogdGltZW91dCBhdCBibG9jayAlZFxuIiwgaSk7CiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCQlkcHJpbnRrKDQsICJ3cml0aW5nIERSQU0gYmxvY2sgJWRcbiIsIGkpOwogCQltd2RlYmkoYXY3MTEwLCBERUJJU1dBQiwgYm9vdGJsb2NrLAotCQkgICAgICAgKChjaGFyKilkYXRhKSArIGkgKiBCT09UX01BWF9TSVpFLCBCT09UX01BWF9TSVpFKTsKKwkJICAgICAgICgoY2hhciopZGF0YSkgKyBpICogQVY3MTEwX0JPT1RfTUFYX1NJWkUsIEFWNzExMF9CT09UX01BWF9TSVpFKTsKIAkJYm9vdGJsb2NrIF49IDB4MTQwMDsKLQkJaXdkZWJpKGF2NzExMCwgREVCSVNXQUIsIEJPT1RfQkFTRSwgc3dhYjMyKGJhc2UpLCA0KTsKLQkJaXdkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgQk9PVF9TSVpFLCBCT09UX01BWF9TSVpFLCAyKTsKLQkJaXdkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgQk9PVF9TVEFURSwgQk9PVFNUQVRFX0JVRkZFUl9GVUxMLCAyKTsKLQkJYmFzZSArPSBCT09UX01BWF9TSVpFOworCQlpd2RlYmkoYXY3MTEwLCBERUJJU1dBQiwgQVY3MTEwX0JPT1RfQkFTRSwgc3dhYjMyKGJhc2UpLCA0KTsKKwkJaXdkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgQVY3MTEwX0JPT1RfU0laRSwgQVY3MTEwX0JPT1RfTUFYX1NJWkUsIDIpOworCQlpd2RlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBBVjcxMTBfQk9PVF9TVEFURSwgQk9PVFNUQVRFX0JVRkZFUl9GVUxMLCAyKTsKKwkJYmFzZSArPSBBVjcxMTBfQk9PVF9NQVhfU0laRTsKIAl9CiAKIAlpZiAocmVzdCA+IDApIHsKLQkJaWYgKHdhaXRkZWJpKGF2NzExMCwgQk9PVF9TVEFURSwgQk9PVFNUQVRFX0JVRkZFUl9FTVBUWSkgPCAwKSB7CisJCWlmICh3YWl0ZGViaShhdjcxMTAsIEFWNzExMF9CT09UX1NUQVRFLCBCT09UU1RBVEVfQlVGRkVSX0VNUFRZKSA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiBsb2FkX2RyYW0oKTogdGltZW91dCBhdCBsYXN0IGJsb2NrXG4iKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CiAJCWlmIChyZXN0ID4gNCkKIAkJCW13ZGViaShhdjcxMTAsIERFQklTV0FCLCBib290YmxvY2ssCi0JCQkgICAgICAgKChjaGFyKilkYXRhKSArIGkgKiBCT09UX01BWF9TSVpFLCByZXN0KTsKKwkJCSAgICAgICAoKGNoYXIqKWRhdGEpICsgaSAqIEFWNzExMF9CT09UX01BWF9TSVpFLCByZXN0KTsKIAkJZWxzZQogCQkJbXdkZWJpKGF2NzExMCwgREVCSVNXQUIsIGJvb3RibG9jaywKLQkJCSAgICAgICAoKGNoYXIqKWRhdGEpICsgaSAqIEJPT1RfTUFYX1NJWkUgLSA0LCByZXN0ICsgNCk7CisJCQkgICAgICAgKChjaGFyKilkYXRhKSArIGkgKiBBVjcxMTBfQk9PVF9NQVhfU0laRSAtIDQsIHJlc3QgKyA0KTsKIAotCQlpd2RlYmkoYXY3MTEwLCBERUJJU1dBQiwgQk9PVF9CQVNFLCBzd2FiMzIoYmFzZSksIDQpOwotCQlpd2RlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBCT09UX1NJWkUsIHJlc3QsIDIpOwotCQlpd2RlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBCT09UX1NUQVRFLCBCT09UU1RBVEVfQlVGRkVSX0ZVTEwsIDIpOworCQlpd2RlYmkoYXY3MTEwLCBERUJJU1dBQiwgQVY3MTEwX0JPT1RfQkFTRSwgc3dhYjMyKGJhc2UpLCA0KTsKKwkJaXdkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgQVY3MTEwX0JPT1RfU0laRSwgcmVzdCwgMik7CisJCWl3ZGViaShhdjcxMTAsIERFQklOT1NXQVAsIEFWNzExMF9CT09UX1NUQVRFLCBCT09UU1RBVEVfQlVGRkVSX0ZVTEwsIDIpOwogCX0KLQlpZiAod2FpdGRlYmkoYXY3MTEwLCBCT09UX1NUQVRFLCBCT09UU1RBVEVfQlVGRkVSX0VNUFRZKSA8IDApIHsKKwlpZiAod2FpdGRlYmkoYXY3MTEwLCBBVjcxMTBfQk9PVF9TVEFURSwgQk9PVFNUQVRFX0JVRkZFUl9FTVBUWSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiBsb2FkX2RyYW0oKTogdGltZW91dCBhZnRlciBsYXN0IGJsb2NrXG4iKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQotCWl3ZGViaShhdjcxMTAsIERFQklOT1NXQVAsIEJPT1RfU0laRSwgMCwgMik7Ci0JaXdkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgQk9PVF9TVEFURSwgQk9PVFNUQVRFX0JVRkZFUl9GVUxMLCAyKTsKLQlpZiAod2FpdGRlYmkoYXY3MTEwLCBCT09UX1NUQVRFLCBCT09UU1RBVEVfQk9PVF9DT01QTEVURSkgPCAwKSB7CisJaXdkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgQVY3MTEwX0JPT1RfU0laRSwgMCwgMik7CisJaXdkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgQVY3MTEwX0JPT1RfU1RBVEUsIEJPT1RTVEFURV9CVUZGRVJfRlVMTCwgMik7CisJaWYgKHdhaXRkZWJpKGF2NzExMCwgQVY3MTEwX0JPT1RfU1RBVEUsIEJPT1RTVEFURV9BVjcxMTBfQk9PVF9DT01QTEVURSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiBsb2FkX2RyYW0oKTogZmluYWwgaGFuZHNoYWtlIHRpbWVvdXRcbiIpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CkBAIC0yNjIsNyArMjYyLDcgQEAKIAkvL3NhYTcxNDZfc2V0Z3BpbyhkZXYsIDMsIFNBQTcxNDZfR1BJT19JTlBVVCk7CiAKIAltd2RlYmkoYXY3MTEwLCBERUJJU1dBQiwgRFBSQU1fQkFTRSwgYm9vdGNvZGUsIHNpemVvZihib290Y29kZSkpOwotCWl3ZGViaShhdjcxMTAsIERFQklOT1NXQVAsIEJPT1RfU1RBVEUsIEJPT1RTVEFURV9CVUZGRVJfRlVMTCwgMik7CisJaXdkZWJpKGF2NzExMCwgREVCSU5PU1dBUCwgQVY3MTEwX0JPT1RfU1RBVEUsIEJPT1RTVEFURV9CVUZGRVJfRlVMTCwgMik7CiAKIAlpZiAoc2FhNzE0Nl93YWl0X2Zvcl9kZWJpX2RvbmUoYXY3MTEwLT5kZXYsIDEpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiBhdjcxMTBfYm9vdGFybSgpOiAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9ody5oCmluZGV4IDg0YjgzMjkuLjRlMTczYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9ody5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9ody5oCkBAIC0xOCw3ICsxOCw3IEBACiB7CiAJQk9PVFNUQVRFX0JVRkZFUl9FTVBUWQk9IDAsCiAJQk9PVFNUQVRFX0JVRkZFUl9GVUxMCT0gMSwKLQlCT09UU1RBVEVfQk9PVF9DT01QTEVURQk9IDIKKwlCT09UU1RBVEVfQVY3MTEwX0JPT1RfQ09NUExFVEUJPSAyCiB9OwogCiBlbnVtIGF2NzExMF90eXBlX3JlY19wbGF5X2Zvcm1hdApAQCAtMjk1LDExICsyOTUsMTEgQEAKICNkZWZpbmUJRFBSQU1fQkFTRSAweDQwMDAKIAogLyogYm9vdCBwcm90b2NvbCBhcmVhICovCi0jZGVmaW5lIEJPT1RfU1RBVEUJKERQUkFNX0JBU0UgKyAweDNGOCkKLSNkZWZpbmUgQk9PVF9TSVpFCShEUFJBTV9CQVNFICsgMHgzRkEpCi0jZGVmaW5lIEJPT1RfQkFTRQkoRFBSQU1fQkFTRSArIDB4M0ZDKQotI2RlZmluZSBCT09UX0JMT0NLCShEUFJBTV9CQVNFICsgMHg0MDApCi0jZGVmaW5lIEJPT1RfTUFYX1NJWkUJMHhjMDAKKyNkZWZpbmUgQVY3MTEwX0JPT1RfU1RBVEUJKERQUkFNX0JBU0UgKyAweDNGOCkKKyNkZWZpbmUgQVY3MTEwX0JPT1RfU0laRQkoRFBSQU1fQkFTRSArIDB4M0ZBKQorI2RlZmluZSBBVjcxMTBfQk9PVF9CQVNFCShEUFJBTV9CQVNFICsgMHgzRkMpCisjZGVmaW5lIEFWNzExMF9CT09UX0JMT0NLCShEUFJBTV9CQVNFICsgMHg0MDApCisjZGVmaW5lIEFWNzExMF9CT09UX01BWF9TSVpFCTB4YzAwCiAKIC8qIGZpcm13YXJlIGNvbW1hbmQgcHJvdG9jb2wgYXJlYSAqLwogI2RlZmluZSBJUlFfU1RBVEUJKERQUkFNX0JBU0UgKyAweDBGNCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCmluZGV4IGRkMjQ4OTYuLmZhZjcyODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQpAQCAtOCw3ICs4LDggQEAKIHpvcmFuLW9ianMgICAgICA6PQl6cjM2MTIwLm8genIzNjEyMF9pMmMubyB6cjM2MTIwX21lbS5vCiB6cjM2MDY3LW9ianMJOj0Jem9yYW5fcHJvY2ZzLm8gem9yYW5fZGV2aWNlLm8gXAogCQkJem9yYW5fZHJpdmVyLm8gem9yYW5fY2FyZC5vCi10dW5lci1vYmpzCTo9CXR1bmVyLWNvcmUubyB0dW5lci1zaW1wbGUubyBtdDIweHgubyB0ZGE4MjkwLm8gdGVhNTc2Ny5vCit0dW5lci1vYmpzCTo9CXR1bmVyLWNvcmUubyB0dW5lci10eXBlcy5vIHR1bmVyLXNpbXBsZS5vIFwKKwkJCW10MjB4eC5vIHRkYTgyOTAubyB0ZWE1NzY3Lm8KIAogbXNwMzQwMC1vYmpzCTo9CW1zcDM0MDAtZHJpdmVyLm8gbXNwMzQwMC1rdGhyZWFkcy5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jCmluZGV4IDdkNWEwNjguLjk5NGI3NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYwpAQCAtMTI5LDkgKzEyOSw5IEBACiBzdGF0aWMgaW50IGZyZXEgPSBERUZBVUxUX0ZSRVE7CS8qIEJDTEs6IGF2YWlsYWJsZSA1MCBvciA3MCAoTUh6KSAqLwogc3RhdGljIGludCB2Z2EgPSAwOwkJLyogZGVmYXVsdCBtb2RlKDA6UVZHQSBtb2RlLCBvdGhlcjpWR0EgbW9kZSkgKi8KIHN0YXRpYyBpbnQgdmdhX2ludGVybGFjZSA9IDA7CS8qIDAgaXMgbm9ybWFsIG1vZGUgZm9yLCBlbHNlIGludGVybGFjZSBtb2RlICovCi1NT0RVTEVfUEFSTShmcmVxLCAiaSIpOwotTU9EVUxFX1BBUk0odmdhLCAiaSIpOwotTU9EVUxFX1BBUk0odmdhX2ludGVybGFjZSwgImkiKTsKK21vZHVsZV9wYXJhbShmcmVxLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHZnYSwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh2Z2FfaW50ZXJsYWNlLCBpbnQsIDApOwogCiBzdGF0aWMgaW50IGFyX2luaXRpYWxpemUoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgzMi5jCmluZGV4IDA3Yzc4ZjEuLmNjNTRiNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODMyLmMKQEAgLTQzLDcgKzQzLDcgQEAKIAkJCQkgICAgICAgSTJDX0NMSUVOVF9FTkQgfTsKIEkyQ19DTElFTlRfSU5TTU9EOwogCi1pbnQgZGVidWcgICAgPSAwOyAgICAvKiBkZWJ1ZyBvdXRwdXQgKi8KK2ludCBkZWJ1ZzsgICAgLyogZGVidWcgb3V0cHV0ICovCiBtb2R1bGVfcGFyYW0oZGVidWcsICAgICAgICAgICAgaW50LCAwNjQ0KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idGN4LXJpc2MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnRjeC1yaXNjLmMKaW5kZXggYTQ4ZGUzYy4uYjRhY2E3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idGN4LXJpc2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0Y3gtcmlzYy5jCkBAIC0zNyw3ICszNyw3IEBACiBNT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWcgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsImRlYnVnIG1lc3NhZ2VzLCBkZWZhdWx0IGlzIDAgKG5vKSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1jYXJkcy5jCmluZGV4IDY1MzIzZTcuLjk3NDlkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1jYXJkcy5jCkBAIC05Miw4ICs5Miw4IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwdnJfYm9vdChzdHJ1Y3QgYnR0diAqYnR2KTsKIAogLyogY29uZmlnIHZhcmlhYmxlcyAqLwotc3RhdGljIHVuc2lnbmVkIGludCB0cml0b24xPTA7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHZzZng9MDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHJpdG9uMTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdnNmeDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbGF0ZW5jeSA9IFVOU0VUOwogaW50IG5vX292ZXJsYXk9LTE7CiAKQEAgLTEwNiw3ICsxMDYsNyBAQAogI2lmZGVmIE1PRFVMRQogc3RhdGljIHVuc2lnbmVkIGludCBhdXRvbG9hZCA9IDE7CiAjZWxzZQotc3RhdGljIHVuc2lnbmVkIGludCBhdXRvbG9hZCA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IGF1dG9sb2FkOwogI2VuZGlmCiBzdGF0aWMgdW5zaWduZWQgaW50IGdwaW9tYXNrID0gVU5TRVQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IGF1ZGlvYWxsID0gVU5TRVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZHJpdmVyLmMKaW5kZXggMGU2OTcwMy4uYWE0YzRjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1kcml2ZXIuYwpAQCAtNDgsNDcgKzQ4LDQ2IEBACiB1bnNpZ25lZCBpbnQgYnR0dl9udW07CQkJLyogbnVtYmVyIG9mIEJ0ODQ4cyBpbiB1c2UgKi8KIHN0cnVjdCBidHR2IGJ0dHZzW0JUVFZfTUFYXTsKIAotdW5zaWduZWQgaW50IGJ0dHZfZGVidWcgPSAwOwordW5zaWduZWQgaW50IGJ0dHZfZGVidWc7CiB1bnNpZ25lZCBpbnQgYnR0dl92ZXJib3NlID0gMTsKLXVuc2lnbmVkIGludCBidHR2X2dwaW8gPSAwOwordW5zaWduZWQgaW50IGJ0dHZfZ3BpbzsKIAogLyogY29uZmlnIHZhcmlhYmxlcyAqLwogI2lmZGVmIF9fQklHX0VORElBTgogc3RhdGljIHVuc2lnbmVkIGludCBiaWdlbmRpYW49MTsKICNlbHNlCi1zdGF0aWMgdW5zaWduZWQgaW50IGJpZ2VuZGlhbj0wOworc3RhdGljIHVuc2lnbmVkIGludCBiaWdlbmRpYW47CiAjZW5kaWYKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmFkaW9bQlRUVl9NQVhdOwotc3RhdGljIHVuc2lnbmVkIGludCBpcnFfZGVidWcgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBpcnFfZGVidWc7CiBzdGF0aWMgdW5zaWduZWQgaW50IGdidWZmZXJzID0gODsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2J1ZnNpemUgPSAweDIwODAwMDsKIAogc3RhdGljIGludCB2aWRlb19uciA9IC0xOwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwogc3RhdGljIGludCB2YmlfbnIgPSAtMTsKLXN0YXRpYyBpbnQgZGVidWdfbGF0ZW5jeSA9IDA7CitzdGF0aWMgaW50IGRlYnVnX2xhdGVuY3k7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmRzciA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IGZkc3I7CiAKIC8qIG9wdGlvbnMgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgY29tYmZpbHRlciAgPSAwOwotc3RhdGljIHVuc2lnbmVkIGludCBsdW1hZmlsdGVyICA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbWJmaWx0ZXI7CitzdGF0aWMgdW5zaWduZWQgaW50IGx1bWFmaWx0ZXI7CiBzdGF0aWMgdW5zaWduZWQgaW50IGF1dG9tdXRlICAgID0gMTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY2hyb21hX2FnYyAgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBjaHJvbWFfYWdjOwogc3RhdGljIHVuc2lnbmVkIGludCBhZGNfY3J1c2ggICA9IDE7CiBzdGF0aWMgdW5zaWduZWQgaW50IHdoaXRlY3J1c2hfdXBwZXIgPSAweENGOwogc3RhdGljIHVuc2lnbmVkIGludCB3aGl0ZWNydXNoX2xvd2VyID0gMHg3RjsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdmNyX2hhY2sgICAgPSAwOwotc3RhdGljIHVuc2lnbmVkIGludCBpcnFfaXN3aXRjaCA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IHZjcl9oYWNrOworc3RhdGljIHVuc2lnbmVkIGludCBpcnFfaXN3aXRjaDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdXZfcmF0aW8gICAgPSA1MDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnVsbF9sdW1hX3JhbmdlID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY29yaW5nICAgICAgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBmdWxsX2x1bWFfcmFuZ2U7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvcmluZzsKIGV4dGVybiBpbnQgbm9fb3ZlcmxheTsKIAogLyogQVBJIGZlYXR1cmVzICh0dXJuIG9uL29mZiBzdHVmZiBmb3IgdGVzdGluZykgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgdjRsMiAgICAgICAgPSAxOwogCi0KIC8qIGluc21vZCBhcmdzICovCiBtb2R1bGVfcGFyYW0oYnR0dl92ZXJib3NlLCAgICAgIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oYnR0dl9ncGlvLCAgICAgICAgIGludCwgMDY0NCk7CkBAIC02ODUsMTYgKzY4NCwxNiBAQAogCQlyZXR1cm4gMTsKIAogCS8qIGlzIGl0IGZyZWU/ICovCi0JZG93bigmYnR2LT5yZXNsb2NrKTsKKwltdXRleF9sb2NrKCZidHYtPnJlc2xvY2spOwogCWlmIChidHYtPnJlc291cmNlcyAmIGJpdCkgewogCQkvKiBubywgc29tZW9uZSBlbHNlIHVzZXMgaXQgKi8KLQkJdXAoJmJ0di0+cmVzbG9jayk7CisJCW11dGV4X3VubG9jaygmYnR2LT5yZXNsb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIGl0J3MgZnJlZSwgZ3JhYiBpdCAqLwogCWZoLT5yZXNvdXJjZXMgIHw9IGJpdDsKIAlidHYtPnJlc291cmNlcyB8PSBiaXQ7Ci0JdXAoJmJ0di0+cmVzbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZidHYtPnJlc2xvY2spOwogCXJldHVybiAxOwogfQogCkBAIC03MTcsMTAgKzcxNiwxMCBAQAogCQkvKiB0cnlpbmcgdG8gZnJlZSByZXNzb3VyY2VzIG5vdCBhbGxvY2F0ZWQgYnkgdXMgLi4uICovCiAJCXByaW50aygiYnR0djogQlVHISAoYnRyZXMpXG4iKTsKIAl9Ci0JZG93bigmYnR2LT5yZXNsb2NrKTsKKwltdXRleF9sb2NrKCZidHYtPnJlc2xvY2spOwogCWZoLT5yZXNvdXJjZXMgICY9IH5iaXRzOwogCWJ0di0+cmVzb3VyY2VzICY9IH5iaXRzOwotCXVwKCZidHYtPnJlc2xvY2spOworCW11dGV4X3VubG9jaygmYnR2LT5yZXNsb2NrKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE1MzcsMTIgKzE1MzYsMTIgQEAKIAljYXNlIFZJRElPQ1NGUkVROgogCXsKIAkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKLQkJZG93bigmYnR2LT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKIAkJYnR2LT5mcmVxPSpmcmVxOwogCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LFZJRElPQ1NGUkVRLGZyZXEpOwogCQlpZiAoYnR2LT5oYXNfbWF0Y2hib3ggJiYgYnR2LT5yYWRpb191c2VyKQogCQkJdGVhNTc1N19zZXRfZnJlcShidHYsKmZyZXEpOwotCQl1cCgmYnR2LT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZidHYtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE1NzIsMTAgKzE1NzEsMTAgQEAKIAkJaWYgKHYtPm1vZGUgPj0gQlRUVl9UVk5PUk1TKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZG93bigmYnR2LT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKIAkJc2V0X3R2bm9ybShidHYsdi0+bW9kZSk7CiAJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsY21kLHYpOwotCQl1cCgmYnR2LT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZidHYtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE2MTIsMTcgKzE2MTEsMTcgQEAKIAkJaWYgKHYtPm5vcm0gPj0gQlRUVl9UVk5PUk1TKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZG93bigmYnR2LT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKIAkJaWYgKGNoYW5uZWwgPT0gYnR2LT5pbnB1dCAmJgogCQkgICAgdi0+bm9ybSA9PSBidHYtPnR2bm9ybSkgewogCQkJLyogbm90aGluZyB0byBkbyAqLwotCQkJdXAoJmJ0di0+bG9jayk7CisJCQltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCiAJCWJ0di0+dHZub3JtID0gdi0+bm9ybTsKIAkJc2V0X2lucHV0KGJ0dix2LT5jaGFubmVsKTsKLQkJdXAoJmJ0di0+bG9jayk7CisJCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjM1LDE0ICsxNjM0LDE0IEBACiAJCXYtPmZsYWdzIHw9IFZJREVPX0FVRElPX01VVEFCTEU7CiAJCXYtPm1vZGUgID0gVklERU9fU09VTkRfTU9OTzsKIAotCQlkb3duKCZidHYtPmxvY2spOworCQltdXRleF9sb2NrKCZidHYtPmxvY2spOwogCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LGNtZCx2KTsKIAogCQkvKiBjYXJkIHNwZWNpZmljIGhvb2tzICovCiAJCWlmIChidHYtPmF1ZGlvX2hvb2spCiAJCQlidHYtPmF1ZGlvX2hvb2soYnR2LHYsMCk7CiAKLQkJdXAoJmJ0di0+bG9jayk7CisJCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCWNhc2UgVklESU9DU0FVRElPOgpAQCAtMTY1Myw3ICsxNjUyLDcgQEAKIAkJaWYgKGF1ZGlvID49IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uYXVkaW9faW5wdXRzKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZG93bigmYnR2LT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKIAkJYXVkaW9fbXV4KGJ0diwgKHYtPmZsYWdzJlZJREVPX0FVRElPX01VVEUpID8gQVVESU9fTVVURSA6IEFVRElPX1VOTVVURSk7CiAJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsY21kLHYpOwogCkBAIC0xNjYxLDcgKzE2NjAsNyBAQAogCQlpZiAoYnR2LT5hdWRpb19ob29rKQogCQkJYnR2LT5hdWRpb19ob29rKGJ0dix2LDEpOwogCi0JCXVwKCZidHYtPmxvY2spOworCQltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTY5NSwxMCArMTY5NCwxMCBAQAogCQlpZiAoaSA9PSBCVFRWX1RWTk9STVMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlkb3duKCZidHYtPmxvY2spOworCQltdXRleF9sb2NrKCZidHYtPmxvY2spOwogCQlzZXRfdHZub3JtKGJ0dixpKTsKIAkJaTJjX3ZpZGlvY3NjaGFuKGJ0dik7Ci0JCXVwKCZidHYtPmxvY2spOworCQltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIAljYXNlIFZJRElPQ19RVUVSWVNURDoKQEAgLTE3NTYsOSArMTc1NSw5IEBACiAKIAkJaWYgKCppID4gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS52aWRlb19pbnB1dHMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJZG93bigmYnR2LT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKIAkJc2V0X2lucHV0KGJ0diwqaSk7Ci0JCXVwKCZidHYtPmxvY2spOworCQltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTc3MCw3ICsxNzY5LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoMCAhPSB0LT5pbmRleCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlkb3duKCZidHYtPmxvY2spOworCQltdXRleF9sb2NrKCZidHYtPmxvY2spOwogCQltZW1zZXQodCwwLHNpemVvZigqdCkpOwogCQlzdHJjcHkodC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKIAkJdC0+dHlwZSAgICAgICA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwpAQCAtMTgwNSw3ICsxODA0LDcgQEAKIAkJCX0KIAkJfQogCQkvKiBGSVhNRTogZmlsbCBjYXBhYmlsaXR5K2F1ZG1vZGUgKi8KLQkJdXAoJmJ0di0+bG9jayk7CisJCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCWNhc2UgVklESU9DX1NfVFVORVI6CkBAIC0xODE2LDcgKzE4MTUsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICgwICE9IHQtPmluZGV4KQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWRvd24oJmJ0di0+bG9jayk7CisJCW11dGV4X2xvY2soJmJ0di0+bG9jayk7CiAJCXsKIAkJCXN0cnVjdCB2aWRlb19hdWRpbyB2YTsKIAkJCW1lbXNldCgmdmEsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fYXVkaW8pKTsKQEAgLTE4MzMsNyArMTgzMiw3IEBACiAJCQlpZiAoYnR2LT5hdWRpb19ob29rKQogCQkJCWJ0di0+YXVkaW9faG9vayhidHYsJnZhLDEpOwogCQl9Ci0JCXVwKCZidHYtPmxvY2spOworCQltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTg1NCwxMiArMTg1MywxMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICh1bmxpa2VseSAoZi0+dHlwZSAhPSBWNEwyX1RVTkVSX0FOQUxPR19UVikpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJZG93bigmYnR2LT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKIAkJYnR2LT5mcmVxID0gZi0+ZnJlcXVlbmN5OwogCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LFZJRElPQ1NGUkVRLCZidHYtPmZyZXEpOwogCQlpZiAoYnR2LT5oYXNfbWF0Y2hib3ggJiYgYnR2LT5yYWRpb191c2VyKQogCQkJdGVhNTc1N19zZXRfZnJlcShidHYsYnR2LT5mcmVxKTsKLQkJdXAoJmJ0di0+bG9jayk7CisJCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCWNhc2UgVklESU9DX0xPR19TVEFUVVM6CkBAIC0zMTU3LDcgKzMxNTYsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWRwcmludGsoImJ0dHYlZDogb3BlbiBjYWxsZWQgKHJhZGlvKVxuIixidHYtPmMubnIpOwotCWRvd24oJmJ0di0+bG9jayk7CisJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKIAogCWJ0di0+cmFkaW9fdXNlcisrOwogCkBAIC0zMTY2LDcgKzMxNjUsNyBAQAogCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsQVVEQ19TRVRfUkFESU8sJmJ0di0+dHVuZXJfdHlwZSk7CiAJYXVkaW9fbXV4KGJ0dixBVURJT19SQURJTyk7CiAKLQl1cCgmYnR2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5MjEsOCArMzkyMCw4IEBACiAJc3ByaW50ZihidHYtPmMubmFtZSwiYnR0diVkIixidHYtPmMubnIpOwogCiAJLyogaW5pdGlhbGl6ZSBzdHJ1Y3RzIC8gZmlsbCBpbiBkZWZhdWx0cyAqLwotCWluaXRfTVVURVgoJmJ0di0+bG9jayk7Ci0JaW5pdF9NVVRFWCgmYnR2LT5yZXNsb2NrKTsKKwltdXRleF9pbml0KCZidHYtPmxvY2spOworCW11dGV4X2luaXQoJmJ0di0+cmVzbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmJ0di0+c19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYnR2LT5ncGlvX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmJ0di0+Z3Bpb3EpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWkyYy5jCmluZGV4IDc0OGQ2MzAuLjYxNGMxMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtaTJjLmMKQEAgLTQxLDkgKzQxLDkgQEAKIAogc3RhdGljIGludCBhdHRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCi1zdGF0aWMgaW50IGkyY19kZWJ1ZyA9IDA7Ci1zdGF0aWMgaW50IGkyY19odyA9IDA7Ci1zdGF0aWMgaW50IGkyY19zY2FuID0gMDsKK3N0YXRpYyBpbnQgaTJjX2RlYnVnOworc3RhdGljIGludCBpMmNfaHc7CitzdGF0aWMgaW50IGkyY19zY2FuOwogbW9kdWxlX3BhcmFtKGkyY19kZWJ1ZywgaW50LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShpMmNfaHcsICAgIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0oaTJjX3NjYW4sICBpbnQsIDA0NDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2cC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2cC5oCmluZGV4IGRkMDBjMjAuLjljYjcyZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0dnAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHZwLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtMzA5LDkgKzMxMCw5IEBACiAKIAkvKiBsb2NraW5nICovCiAJc3BpbmxvY2tfdCBzX2xvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogCWludCByZXNvdXJjZXM7Ci0Jc3RydWN0IHNlbWFwaG9yZSByZXNsb2NrOworCXN0cnVjdCBtdXRleCByZXNsb2NrOwogI2lmZGVmIFZJRElPQ19HX1BSSU9SSVRZCiAJc3RydWN0IHY0bDJfcHJpb19zdGF0ZSBwcmlvOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKaW5kZXggMWQ3NWE0Mi4uYzY2YzJjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYwpAQCAtNDMsNyArNDMsNyBAQAogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAKLWludCBjeDI1ODQwX2RlYnVnID0gMDsKK3N0YXRpYyBpbnQgY3gyNTg0MF9kZWJ1ZzsKIAogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLGN4MjU4NDBfZGVidWcsIGludCwgMDY0NCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKaW5kZXggNzZmY2I0ZS4uNTMzMDg5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKQEAgLTMxLDggKzMxLDcgQEAKIAogY29uZmlnIFZJREVPX0NYODhfQUxTQQogCXRyaXN0YXRlICJBTFNBIERNQSBhdWRpbyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fQ1g4OCAmJiBTTkQKLQlzZWxlY3QgU05EX1BDTV9PU1MKKwlkZXBlbmRzIG9uIFZJREVPX0NYODggJiYgU05EICYmIEVYUEVSSU1FTlRBTAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIGRpcmVjdCAoRE1BKSBhdWRpbyBvbgogCSAgQ29uZXhhbnQgMjM4OHggYmFzZWQgVFYgY2FyZHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUKaW5kZXggZTRiMjEzNC4uNmU1ZWFhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9NYWtlZmlsZQpAQCAtNSw2ICs1LDcgQEAKIAogb2JqLSQoQ09ORklHX1ZJREVPX0NYODgpICs9IGN4ODh4eC5vIGN4ODgwMC5vIGN4ODgwMi5vIGN4ODgtYmxhY2tiaXJkLm8KIG9iai0kKENPTkZJR19WSURFT19DWDg4X0RWQikgKz0gY3g4OC1kdmIubyBjeDg4LXZwMzA1NC1pMmMubworb2JqLSQoQ09ORklHX1ZJREVPX0NYODhfQUxTQSkgKz0gY3g4OC1hbHNhLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCiBFWFRSQV9DRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKaW5kZXggNzY5NWI1Mi4uYTJlMzZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwpAQCAtMTE2LDcgKzExNiw3IEBACiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tDb25leGFudCwyMzg4MX0sIgogCQkJInt7Q29uZXhhbnQsMjM4ODJ9LCIKIAkJCSJ7e0NvbmV4YW50LDIzODgzfSIpOwotc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZyA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLGludCwwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOwogCkBAIC0zMzMsMTAgKzMzMywxMCBAQAogCS5jaGFubmVsc19taW4gPSAxLAogCS5jaGFubmVsc19tYXggPSAyLAogCS5idWZmZXJfYnl0ZXNfbWF4ID0gKDIqMjA0OCksCi0JLnBlcmlvZF9ieXRlc19taW4gPSAyNTYsCisJLnBlcmlvZF9ieXRlc19taW4gPSAyMDQ4LAogCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMjA0OCwKIAkucGVyaW9kc19taW4gPSAyLAotCS5wZXJpb2RzX21heCA9IDE2LAorCS5wZXJpb2RzX21heCA9IDIsCiB9OwogCiAvKgpAQCAtNjUzLDcgKzY1Myw3IEBACiAgKiBBbHNhIENvbnN0cnVjdG9yIC0gQ29tcG9uZW50IHByb2JlCiAgKi8KIAotc3RhdGljIGludCBkZXZubz0wOworc3RhdGljIGludCBkZXZubzsKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jeDg4X2NyZWF0ZShzbmRfY2FyZF90ICpjYXJkLCBzdHJ1Y3QgcGNpX2RldiAqcGNpLAogCQkJCSAgICBzbmRfY3g4OF9jYXJkX3QgKipyY2hpcCkKIHsKQEAgLTgwNSw3ICs4MDUsNiBAQAogCS5pZF90YWJsZSA9IGN4ODhfYXVkaW9fcGNpX3RibCwKIAkucHJvYmUgICAgPSBjeDg4X2F1ZGlvX2luaXRkZXYsCiAJLnJlbW92ZSAgID0gY3g4OF9hdWRpb19maW5pZGV2LAotCVNORF9QQ0lfUE1fQ0FMTEJBQ0tTCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCmluZGV4IDE5NDQ0NmYuLjhkNmQ2YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJjeDg4LmgiCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KQEAgLTc1LDcgKzc2LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBjeDg4X2RldmNvdW50Owogc3RhdGljIExJU1RfSEVBRChjeDg4X2Rldmxpc3QpOwotc3RhdGljIERFQ0xBUkVfTVVURVgoZGV2bGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGRldmxpc3QpOwogCiAjZGVmaW5lIE5PX1NZTkNfTElORSAoLTFVKQogCkBAIC0xMDM2LDcgKzEwMzcsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKml0ZW07CiAJaW50IGk7CiAKLQlkb3duKCZkZXZsaXN0KTsKKwltdXRleF9sb2NrKCZkZXZsaXN0KTsKIAlsaXN0X2Zvcl9lYWNoKGl0ZW0sJmN4ODhfZGV2bGlzdCkgewogCQljb3JlID0gbGlzdF9lbnRyeShpdGVtLCBzdHJ1Y3QgY3g4OF9jb3JlLCBkZXZsaXN0KTsKIAkJaWYgKHBjaS0+YnVzLT5udW1iZXIgIT0gY29yZS0+cGNpX2J1cykKQEAgLTEwNDcsNyArMTA0OCw3IEBACiAJCWlmICgwICE9IGdldF9yZXNzb3VyY2VzKGNvcmUscGNpKSkKIAkJCWdvdG8gZmFpbF91bmxvY2s7CiAJCWF0b21pY19pbmMoJmNvcmUtPnJlZmNvdW50KTsKLQkJdXAoJmRldmxpc3QpOworCQltdXRleF91bmxvY2soJmRldmxpc3QpOwogCQlyZXR1cm4gY29yZTsKIAl9CiAJY29yZSA9IGt6YWxsb2Moc2l6ZW9mKCpjb3JlKSxHRlBfS0VSTkVMKTsKQEAgLTExMjIsMTMgKzExMjMsMTMgQEAKIAljeDg4X2NhcmRfc2V0dXAoY29yZSk7CiAJY3g4OF9pcl9pbml0KGNvcmUscGNpKTsKIAotCXVwKCZkZXZsaXN0KTsKKwltdXRleF91bmxvY2soJmRldmxpc3QpOwogCXJldHVybiBjb3JlOwogCiBmYWlsX2ZyZWU6CiAJa2ZyZWUoY29yZSk7CiBmYWlsX3VubG9jazoKLQl1cCgmZGV2bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZkZXZsaXN0KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTE0MCwxNCArMTE0MSwxNCBAQAogCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmY29yZS0+cmVmY291bnQpKQogCQlyZXR1cm47CiAKLQlkb3duKCZkZXZsaXN0KTsKKwltdXRleF9sb2NrKCZkZXZsaXN0KTsKIAljeDg4X2lyX2ZpbmkoY29yZSk7CiAJaWYgKDAgPT0gY29yZS0+aTJjX3JjKQogCQlpMmNfYml0X2RlbF9idXMoJmNvcmUtPmkyY19hZGFwKTsKIAlsaXN0X2RlbCgmY29yZS0+ZGV2bGlzdCk7CiAJaW91bm1hcChjb3JlLT5sbW1pbyk7CiAJY3g4OF9kZXZjb3VudC0tOwotCXVwKCZkZXZsaXN0KTsKKwltdXRleF91bmxvY2soJmRldmxpc3QpOwogCWtmcmVlKGNvcmUpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKaW5kZXggMjQxMThlNC4uZGE4ZDk3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYwpAQCAtNjAsNiArNjAsMTEgQEAKIG1vZHVsZV9wYXJhbShhdWRpb19kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYXVkaW9fZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2F1ZGlvXSIpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IGFsd2F5c19hbmFsb2cgPSAwOworbW9kdWxlX3BhcmFtKGFsd2F5c19hbmFsb2csaW50LDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhhbHdheXNfYW5hbG9nLCJmb3JjZSBhbmFsb2cgYXVkaW8gb3V0Iik7CisKKwogI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJnLi4uKQlpZiAoYXVkaW9fZGVidWcpIFwKIAlwcmludGsoS0VSTl9ERUJVRyAiJXMvMDogIiBmbXQsIGNvcmUtPm5hbWUgLCAjIyBhcmcpCiAKQEAgLTE1NSw3ICsxNjAsOCBAQAogCQljeF93cml0ZShBVURfSTJTT1VUUFVUQ05UTCwgMSk7CiAJCWN4X3dyaXRlKEFVRF9JMlNDTlRMLCAwKTsKIAkJLyogY3hfd3JpdGUoQVVEX0FQQl9JTl9SQVRFX0FESiwgMCk7ICovCi0JfSBlbHNlIHsKKwl9CisJaWYgKChhbHdheXNfYW5hbG9nKSB8fCAoIWN4ODhfYm9hcmRzW2NvcmUtPmJvYXJkXS5ibGFja2JpcmQpKSB7CiAJCWN0bCB8PSBFTl9EQUNfRU5BQkxFOwogCQljeF93cml0ZShBVURfQ1RMLCBjdGwpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZwMzA1NC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZwMzA1NC1pMmMuYwppbmRleCAzNzJjZDI5Li43NTFhNzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12cDMwNTQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdnAzMDU0LWkyYy5jCkBAIC0zMiw2ICszMiwxMCBAQAogI2luY2x1ZGUgImN4ODgtdnAzMDU0LWkyYy5oIgogCiAKK01PRFVMRV9ERVNDUklQVElPTigiZHJpdmVyIGZvciBjeDIzODh4IFZQMzA1NCBkZXNpZ24iKTsKK01PRFVMRV9BVVRIT1IoIkNocmlzIFBhc2NvZSA8Yy5wYXNjb2VAaXRlZS51cS5lZHUuYXU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyB2b2lkIHZwMzA1NF9iaXRfc2V0c2NsKHZvaWQgKmRhdGEsIGludCBzdGF0ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKaW5kZXggOWI5NGY3Ny4uMzBkZmE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKQEAgLTc2LDYgKzc2LDU4IEBACiAJWyAweDQwIF0gPSBLRVlfWk9PTSwKIH07CiAKK3N0YXRpYyBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbV9waW5uYWNsZV91c2JbSVJfS0VZVEFCX1NJWkVdID0geworCVsgMHgzYSBdID0gS0VZX0tQMCwKKwlbIDB4MzEgXSA9IEtFWV9LUDEsCisJWyAweDMyIF0gPSBLRVlfS1AyLAorCVsgMHgzMyBdID0gS0VZX0tQMywKKwlbIDB4MzQgXSA9IEtFWV9LUDQsCisJWyAweDM1IF0gPSBLRVlfS1A1LAorCVsgMHgzNiBdID0gS0VZX0tQNiwKKwlbIDB4MzcgXSA9IEtFWV9LUDcsCisJWyAweDM4IF0gPSBLRVlfS1A4LAorCVsgMHgzOSBdID0gS0VZX0tQOSwKKworCVsgMHgyZiBdID0gS0VZX1BPV0VSLAorCisJWyAweDJlIF0gPSBLRVlfUCwKKwlbIDB4MWYgXSA9IEtFWV9MLAorCVsgMHgyYiBdID0gS0VZX0ksCisKKwlbIDB4MmQgXSA9IEtFWV9aT09NLAorCVsgMHgxZSBdID0gS0VZX1pPT00sCisJWyAweDFiIF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDBmIF0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbIDB4MTcgXSA9IEtFWV9DSEFOTkVMVVAsCisJWyAweDFjIF0gPSBLRVlfQ0hBTk5FTERPV04sCisJWyAweDI1IF0gPSBLRVlfSU5GTywKKworCVsgMHgzYyBdID0gS0VZX01VVEUsCisKKwlbIDB4M2QgXSA9IEtFWV9MRUZULAorCVsgMHgzYiBdID0gS0VZX1JJR0hULAorCisJWyAweDNmIF0gPSBLRVlfVVAsCisJWyAweDNlIF0gPSBLRVlfRE9XTiwKKwlbIDB4MWEgXSA9IEtFWV9QQVVTRSwKKworCVsgMHgxZCBdID0gS0VZX01FTlUsCisJWyAweDE5IF0gPSBLRVlfUExBWSwKKwlbIDB4MTYgXSA9IEtFWV9SRVdJTkQsCisJWyAweDEzIF0gPSBLRVlfRk9SV0FSRCwKKwlbIDB4MTUgXSA9IEtFWV9QQVVTRSwKKwlbIDB4MGUgXSA9IEtFWV9SRVdJTkQsCisJWyAweDBkIF0gPSBLRVlfUExBWSwKKwlbIDB4MGIgXSA9IEtFWV9TVE9QLAorCVsgMHgwNyBdID0gS0VZX0ZPUldBUkQsCisJWyAweDI3IF0gPSBLRVlfUkVDT1JELAorCVsgMHgyNiBdID0gS0VZX1RVTkVSLAorCVsgMHgyOSBdID0gS0VZX1RFWFQsCisJWyAweDJhIF0gPSBLRVlfTUVESUEsCisJWyAweDE4IF0gPSBLRVlfRVBHLAorCVsgMHgyNyBdID0gS0VZX1JFQ09SRCwKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgZ2V0X2tleV90ZXJyYXRlYyhzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQpAQCAtMTM4LDYgKzE5MCwyOCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGdldF9rZXlfcGlubmFjbGVfdXNiKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCit7CisJdW5zaWduZWQgY2hhciBidWZbM107CisKKwkvKiBwb2xsIElSIGNoaXAgKi8KKworCWlmICgzICE9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsYnVmLDMpKSB7CisJCWRwcmludGsoInJlYWQgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkcHJpbnRrKCJrZXkgJTAyeFxuIiwgYnVmWzJdJjB4M2YpOworCWlmIChidWZbMF0hPTB4MDApeworCQlyZXR1cm4gMDsKKwl9CisKKwkqaXJfa2V5ID0gYnVmWzJdJjB4M2Y7CisJKmlyX3JhdyA9IGJ1ZlsyXSYweDNmOworCisJcmV0dXJuIDE7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiB2b2lkIGVtMjh4eF9zZXRfaXIoc3RydWN0IGVtMjh4eCAqIGRldixzdHJ1Y3QgSVJfaTJjICppcikKIHsKQEAgLTE1OSw2ICsyMzMsOSBAQAogCQlzbnByaW50Zihpci0+Yy5uYW1lLCBzaXplb2YoaXItPmMubmFtZSksICJpMmMgSVIgKEVNMjhYWCBUZXJyYXRlYykiKTsKIAkJYnJlYWs7CiAJY2FzZSAoRU0yODIwX0JPQVJEX1BJTk5BQ0xFX1VTQl8yKToKKwkJaXItPmlyX2NvZGVzID0gaXJfY29kZXNfZW1fcGlubmFjbGVfdXNiOworCQlpci0+Z2V0X2tleSA9IGdldF9rZXlfcGlubmFjbGVfdXNiOworCQlzbnByaW50Zihpci0+Yy5uYW1lLCBzaXplb2YoaXItPmMubmFtZSksICJpMmMgSVIgKEVNMjhYWCBQaW5uYWNsZSBQQ1RWKSIpOwogCQlicmVhazsKIAljYXNlIChFTTI4MjBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX1VTQl8yKToKIAkJaXItPmlyX2NvZGVzID0gaXJfY29kZXNfaGF1cHBhdWdlX25ldzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKaW5kZXggMzMyM2RmZi4uZWVhMzA0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJlbTI4eHguaCIKICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgpAQCAtMTkxLDcgKzE5Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBlbTI4eHhfdXNiX2RyaXZlcjsKIAotc3RhdGljIERFQ0xBUkVfTVVURVgoZW0yOHh4X3N5c2ZzX2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChlbTI4eHhfc3lzZnNfbG9jayk7CiBzdGF0aWMgREVDTEFSRV9SV1NFTShlbTI4eHhfZGlzY29ubmVjdCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKiogIHY0bDIgaW50ZXJmYWNlICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zOTQsNyArMzk1LDcgQEAKICovCiBzdGF0aWMgdm9pZCBlbTI4eHhfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IGVtMjh4eCAqZGV2KQogewotCWRvd24oJmVtMjh4eF9zeXNmc19sb2NrKTsKKwltdXRleF9sb2NrKCZlbTI4eHhfc3lzZnNfbG9jayk7CiAKIAllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgL2Rldi92aWRlbyVkIGRlcmVnaXN0ZXJlZFxuIiwKIAkJICAgIGRldi0+dmRldi0+bWlub3IpOwpAQCAtNDAzLDcgKzQwNCw3IEBACiAvKgl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZiaV9kZXYpOyAqLwogCWVtMjh4eF9pMmNfdW5yZWdpc3RlcihkZXYpOwogCXVzYl9wdXRfZGV2KGRldi0+dWRldik7Ci0JdXAoJmVtMjh4eF9zeXNmc19sb2NrKTsKKwltdXRleF91bmxvY2soJmVtMjh4eF9zeXNmc19sb2NrKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYwppbmRleCA5YjA1YTBhLi42OWVkMzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCkBAIC02NiwxMiArNjYsMTIgQEAKIAogLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KIHN0YXRpYyBpbnQgb3Btb2RlICAgPSBPUE1PREVfQVVUTzsKLWludCBtc3BfZGVidWcgICAgPSAwOyAgICAvKiBtc3BfZGVidWcgb3V0cHV0ICovCi1pbnQgbXNwX29uY2UgICAgID0gMDsgICAgLyogbm8gY29udGlub3VzIHN0ZXJlbyBtb25pdG9yaW5nICovCi1pbnQgbXNwX2Ftc291bmQgID0gMDsgICAgLyogaGFyZC13aXJlIEFNIHNvdW5kIGF0IDYuNSBIeiAoZnJhbmNlKSwKLQkJCSAgICAgICB0aGUgYXV0b3NjYW4gc2VlbXMgd29yayB3ZWxsIG9ubHkgd2l0aCBGTS4uLiAqLworaW50IG1zcF9kZWJ1ZzsJCSAvKiBtc3BfZGVidWcgb3V0cHV0ICovCitpbnQgbXNwX29uY2U7CQkgLyogbm8gY29udGlub3VzIHN0ZXJlbyBtb25pdG9yaW5nICovCitpbnQgbXNwX2Ftc291bmQ7CSAvKiBoYXJkLXdpcmUgQU0gc291bmQgYXQgNi41IEh6IChmcmFuY2UpLAorCQkJICAgIHRoZSBhdXRvc2NhbiBzZWVtcyB3b3JrIHdlbGwgb25seSB3aXRoIEZNLi4uICovCiBpbnQgbXNwX3N0YW5kYXJkID0gMTsgICAgLyogT3ZlcnJpZGUgYXV0byBkZXRlY3Qgb2YgYXVkaW8gbXNwX3N0YW5kYXJkLCBpZiBuZWVkZWQuICovCi1pbnQgbXNwX2RvbGJ5ICAgID0gMDsKK2ludCBtc3BfZG9sYnk7CiAKIGludCBtc3Bfc3RlcmVvX3RocmVzaCA9IDB4MTkwOyAvKiBhMiB0aHJlc2hvbGQgZm9yIHN0ZXJlby9iaWxpbmd1YWwKIAkJCQkJKG1zcDM0eHhnIG9ubHkpIDB4MDBhMC0weDAzYzAgKi8KQEAgLTEwMzEsOCArMTAzMSw4IEBACiAJfQogCiAJZGVmYXVsdDoKLQkJLyogbm90aGluZyAqLwotCQlicmVhazsKKwkJLyogdW5rbm93biAqLworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC5oCmluZGV4IDcwYTVlZjguLmE5YWM1N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC5oCkBAIC02LDE0ICs2LDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdHJ1Y3QgbXNwX21hdHJpeCB7Ci0gIGludCBpbnB1dDsKLSAgaW50IG91dHB1dDsKLX07Ci0KLS8qIGlvY3RsIGZvciBNU1BfU0VUX01BVFJJWCB3aWxsIGhhdmUgdG8gYmUgcmVnaXN0ZXJlZCAqLwotI2RlZmluZSBNU1BfU0VUX01BVFJJWCAgICAgX0lPVygnbScsMTcsc3RydWN0IG1zcF9tYXRyaXgpCi0KIC8qIFRoaXMgbWFjcm8gaXMgYWxsb3dlZCBmb3IgKmNvbnN0YW50cyogb25seSwgZ2NjIG11c3QgY2FsY3VsYXRlIGl0CiAgICBhdCBjb21waWxlIHRpbWUuICBSZW1lbWJlciAtLSBubyBmbG9hdHMgaW4ga2VybmVsIG1vZGUgKi8KICNkZWZpbmUgTVNQX0NBUlJJRVIoZnJlcSkgKChpbnQpKChmbG9hdCkoZnJlcSAvIDE4LjQzMikgKiAoMSA8PCAyNCkpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDIweHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQyMHh4LmMKaW5kZXggMGJmMWNhYS4uYzdjOWYzZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQyMHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDIweHguYwpAQCAtMzUzLDggKzM1Myw4IEBACiAJfSB3aGlsZSAoeG9rICE9IDEgKTsKIAl0LT54b2djPXhvZ2M7CiAKLQl0LT50dl9mcmVxICAgID0gbXQyMDMyX3NldF90dl9mcmVxOwotCXQtPnJhZGlvX2ZyZXEgPSBtdDIwMzJfc2V0X3JhZGlvX2ZyZXE7CisJdC0+c2V0X3R2X2ZyZXEgICAgPSBtdDIwMzJfc2V0X3R2X2ZyZXE7CisJdC0+c2V0X3JhZGlvX2ZyZXEgPSBtdDIwMzJfc2V0X3JhZGlvX2ZyZXE7CiAJcmV0dXJuKDEpOwogfQogCkBAIC00ODEsOCArNDgxLDggQEAKIAlpMmNfbWFzdGVyX3JlY3YoYyxidWYsMSk7CiAKIAl0dW5lcl9kYmcoIm10MjA1MDogc3JvIGlzICV4XG4iLGJ1ZlswXSk7Ci0JdC0+dHZfZnJlcSAgICA9IG10MjA1MF9zZXRfdHZfZnJlcTsKLQl0LT5yYWRpb19mcmVxID0gbXQyMDUwX3NldF9yYWRpb19mcmVxOworCXQtPnNldF90dl9mcmVxICAgID0gbXQyMDUwX3NldF90dl9mcmVxOworCXQtPnNldF9yYWRpb19mcmVxID0gbXQyMDUwX3NldF9yYWRpb19mcmVxOwogCXJldHVybiAwOwogfQogCkBAIC00OTQsOCArNDk0LDggQEAKIAlpbnQgY29tcGFueV9jb2RlOwogCiAJbWVtc2V0KGJ1ZiwwLHNpemVvZihidWYpKTsKLQl0LT50dl9mcmVxICAgID0gTlVMTDsKLQl0LT5yYWRpb19mcmVxID0gTlVMTDsKKwl0LT5zZXRfdHZfZnJlcSAgICA9IE5VTEw7CisJdC0+c2V0X3JhZGlvX2ZyZXEgPSBOVUxMOwogCXQtPnN0YW5kYnkgICAgPSBOVUxMOwogCWlmICh0LT5zdGQgJiBWNEwyX1NURF81MjVfNjApIHsKIAkJdHVuZXJfZGJnKCJwaW5uYWNsZSBudHNjXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcGxhbmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcGxhbmIuYwppbmRleCBiMTljMzM0Li5mM2ZjMzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3BsYW5iLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wbGFuYi5jCkBAIC03Niw5ICs3Niw5IEBACiBzdGF0aWMgaW50IGRlZl9ub3JtID0gUExBTkJfREVGX05PUk07CS8qIGRlZmF1bHQgbm9ybSAqLwogc3RhdGljIGludCB2aWRlb19uciA9IC0xOwogCi1NT0RVTEVfUEFSTShkZWZfbm9ybSwgImkiKTsKK21vZHVsZV9wYXJhbShkZWZfbm9ybSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVmX25vcm0sICJEZWZhdWx0IHN0YXJ0dXAgbm9ybSAoMD1QQUwsIDE9TlRTQywgMj1TRUNBTSkiKTsKLU1PRFVMRV9QQVJNKHZpZGVvX25yLCJpIik7Cittb2R1bGVfcGFyYW0odmlkZW9fbnIsIGludCwgMCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYwppbmRleCBlNzBiMTdlLi5kMTczOTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYwpAQCAtNTAsMTUgKzUwLDE1IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHBsdmwgPSAwOwogc3RhdGljIHVuc2lnbmVkIGludCBidWZibG9ja3MgPSAxMDA7CiAKLU1PRFVMRV9QQVJNKGRlYnVnLCAiaSIpOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOwotTU9EVUxFX1BBUk0oeHRhbCwgImkiKTsKK21vZHVsZV9wYXJhbSh4dGFsLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh4dGFsLCAic2VsZWN0IG9zY2lsbGF0b3IgZnJlcXVlbmN5ICgwLi4zKSwgZGVmYXVsdCAwIik7Ci1NT0RVTEVfUEFSTShyYmRzLCAiaSIpOworbW9kdWxlX3BhcmFtKHJiZHMsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJiZHMsICJzZWxlY3QgbW9kZSwgMD1SRFMsIDE9UkJEUywgZGVmYXVsdCAwIik7Ci1NT0RVTEVfUEFSTShwbHZsLCAiaSIpOworbW9kdWxlX3BhcmFtKHBsdmwsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBsdmwsICJzZWxlY3QgcGF1c2UgbGV2ZWwgKDAuLjMpLCBkZWZhdWx0IDAiKTsKLU1PRFVMRV9QQVJNKGJ1ZmJsb2NrcywgImkiKTsKK21vZHVsZV9wYXJhbShidWZibG9ja3MsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGJ1ZmJsb2NrcywgIm51bWJlciBvZiBidWZmZXJlZCBibG9ja3MsIGRlZmF1bHQgMTAwIik7CiAKIE1PRFVMRV9ERVNDUklQVElPTigidjRsMiBkcml2ZXIgbW9kdWxlIGZvciBTQUE2NTg4IFJEUyBkZWNvZGVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExeC5jCmluZGV4IGFlNTMwNjMuLjZjMTYxZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExeC5jCkBAIC01Miw3ICs1Miw3IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgogCiBzdGF0aWMgaW50IGRlYnVnID0gMDsKLU1PRFVMRV9QQVJNKGRlYnVnLCAiaSIpOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIiBTZXQgdGhlIGRlZmF1bHQgRGVidWcgbGV2ZWwuICBEZWZhdWx0OiAwIChPZmYpIC0gKDAtMSkiKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCAyNzVkMDZhLi5jNjQ3MThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTI1MTUsNiArMjUxNSw3IEBACiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAogCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuZ3Bpb21hc2sgICAgICAgPSAxIDw8IDIxLAogCQkuaW5wdXRzID0ge3sKIAkJCS5uYW1lICAgPSBuYW1lX3R2LAogCQkJLnZtdXggICA9IDEsCkBAIC0yNTI5LDYgKzI1MzAsMTEgQEAKIAkJCS52bXV4ICAgPSA4LAogCQkJLmFtdXggICA9IExJTkUxLAogCQl9fSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgICA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCAgID0gVFYsCisJCQkuZ3BpbyAgID0gMHgwMjAwMDAwLAorCQl9LAogCX0sCiAJW1NBQTcxMzRfQk9BUkRfTVNJX1RWQVRBTllXSEVSRV9QTFVTXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk1TSSBUVkBBbnl3aGVyZSBwbHVzIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwppbmRleCAzOTgzYTY1Li4wMjg5MDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc291bmQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJzYWE3MTM0LXJlZy5oIgogI2luY2x1ZGUgInNhYTcxMzQuaCIKQEAgLTg0LDcgKzg1LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0ModHVuZXIsICAgICJ0dW5lciB0eXBlIik7CiBNT0RVTEVfUEFSTV9ERVNDKGNhcmQsICAgICAiY2FyZCB0eXBlIik7CiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKGRldmxpc3RfbG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKGRldmxpc3RfbG9jayk7CiBMSVNUX0hFQUQoc2FhNzEzNF9kZXZsaXN0KTsKIHN0YXRpYyBMSVNUX0hFQUQobW9wc19saXN0KTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2FhNzEzNF9kZXZjb3VudDsKQEAgLTE0MCw3ICsxNDEsNyBAQAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAotc3RhdGljIGludCBwZW5kaW5nX3JlZ2lzdGVyZWQ9MDsKK3N0YXRpYyBpbnQgcGVuZGluZ19yZWdpc3RlcmVkOwogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwZW5kaW5nX25vdGlmaWVyID0gewogCS5ub3RpZmllcl9jYWxsID0gcGVuZGluZ19jYWxsLAogfTsKQEAgLTk2OSwxMyArOTcwLDEzIEBACiAJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsZGV2KTsKIAlzYWE3MTM0X2RldmNvdW50Kys7CiAKLQlkb3duKCZkZXZsaXN0X2xvY2spOworCW11dGV4X2xvY2soJmRldmxpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChpdGVtLCZtb3BzX2xpc3QpIHsKIAkJbW9wcyA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHNhYTcxMzRfbXBlZ19vcHMsIG5leHQpOwogCQltcGVnX29wc19hdHRhY2gobW9wcywgZGV2KTsKIAl9CiAJbGlzdF9hZGRfdGFpbCgmZGV2LT5kZXZsaXN0LCZzYWE3MTM0X2Rldmxpc3QpOwotCXVwKCZkZXZsaXN0X2xvY2spOworCW11dGV4X3VubG9jaygmZGV2bGlzdF9sb2NrKTsKIAogCS8qIGNoZWNrIGZvciBzaWduYWwgKi8KIAlzYWE3MTM0X2lycV92aWRlb19pbnRsKGRldik7CkBAIC0xMDMxLDEzICsxMDMyLDEzIEBACiAJc2FhNzEzNF9od2ZpbmkoZGV2KTsKIAogCS8qIHVucmVnaXN0ZXIgKi8KLQlkb3duKCZkZXZsaXN0X2xvY2spOworCW11dGV4X2xvY2soJmRldmxpc3RfbG9jayk7CiAJbGlzdF9kZWwoJmRldi0+ZGV2bGlzdCk7CiAJbGlzdF9mb3JfZWFjaChpdGVtLCZtb3BzX2xpc3QpIHsKIAkJbW9wcyA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHNhYTcxMzRfbXBlZ19vcHMsIG5leHQpOwogCQltcGVnX29wc19kZXRhY2gobW9wcywgZGV2KTsKIAl9Ci0JdXAoJmRldmxpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXZsaXN0X2xvY2spOwogCXNhYTcxMzRfZGV2Y291bnQtLTsKIAogCXNhYTcxMzRfaTJjX3VucmVnaXN0ZXIoZGV2KTsKQEAgLTEwNzEsMTMgKzEwNzIsMTMgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICppdGVtOwogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2OwogCi0JZG93bigmZGV2bGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZkZXZsaXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2goaXRlbSwmc2FhNzEzNF9kZXZsaXN0KSB7CiAJCWRldiA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHNhYTcxMzRfZGV2LCBkZXZsaXN0KTsKIAkJbXBlZ19vcHNfYXR0YWNoKG9wcywgZGV2KTsKIAl9CiAJbGlzdF9hZGRfdGFpbCgmb3BzLT5uZXh0LCZtb3BzX2xpc3QpOwotCXVwKCZkZXZsaXN0X2xvY2spOworCW11dGV4X3VubG9jaygmZGV2bGlzdF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA4NiwxMyArMTA4NywxMyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKml0ZW07CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY7CiAKLQlkb3duKCZkZXZsaXN0X2xvY2spOworCW11dGV4X2xvY2soJmRldmxpc3RfbG9jayk7CiAJbGlzdF9kZWwoJm9wcy0+bmV4dCk7CiAJbGlzdF9mb3JfZWFjaChpdGVtLCZzYWE3MTM0X2Rldmxpc3QpIHsKIAkJZGV2ID0gbGlzdF9lbnRyeShpdGVtLCBzdHJ1Y3Qgc2FhNzEzNF9kZXYsIGRldmxpc3QpOwogCQltcGVnX29wc19kZXRhY2gob3BzLCBkZXYpOwogCX0KLQl1cCgmZGV2bGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJmRldmxpc3RfbG9jayk7CiB9CiAKIEVYUE9SVF9TWU1CT0woc2FhNzEzNF90c19yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMKaW5kZXggOTMyNjg0Mi4uYWZhNGRjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYwpAQCAtMTgwLDggKzE4MCw4IEBACiAJc2FhX3dyaXRlYihTQUE3MTM0X0FVRElPX0NMT0NLMCwgICAgICBjbG9jayAgICAgICAgJiAweGZmKTsKIAlzYWFfd3JpdGViKFNBQTcxMzRfQVVESU9fQ0xPQ0sxLCAgICAgKGNsb2NrID4+ICA4KSAmIDB4ZmYpOwogCXNhYV93cml0ZWIoU0FBNzEzNF9BVURJT19DTE9DSzIsICAgICAoY2xvY2sgPj4gMTYpICYgMHhmZik7Ci0JLy8gZnJhbWUgbG9ja2VkIGF1ZGlvIHdhcyByZXBvcnRlZCBub3QgdG8gYmUgcmVsaWFibGUKLQlzYWFfd3JpdGViKFNBQTcxMzRfQVVESU9fUExMX0NUUkwsICAgMHgwMik7CisJLyogZnJhbWUgbG9ja2VkIGF1ZGlvIGlzIG1hbmRhdG9yeSBmb3IgTklDQU0gKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfQVVESU9fUExMX0NUUkwsICAgMHgwMSk7CiAKIAlzYWFfd3JpdGViKFNBQTcxMzRfTklDQU1fRVJST1JfTE9XLCAgMHgxNCk7CiAJc2FhX3dyaXRlYihTQUE3MTM0X05JQ0FNX0VSUk9SX0hJR0gsIDB4NTApOwpAQCAtODA5LDcgKzgwOSwxMiBAQAogCQkJZHByaW50aygiZGRlcCBvdmVycmlkZTogJXNcbiIsc3RkcmVzW2F1ZGlvX2RkZXBdKTsKIAkJfSBlbHNlIGlmICgmY2FyZChkZXYpLnJhZGlvID09IGRldi0+aW5wdXQpIHsKIAkJCWRwcmludGsoIkZNIFJhZGlvXG4iKTsKLQkJCW5vcm1zID0gKDB4MGYgPDwgMikgfCAweDAxOworCQkJaWYgKGRldi0+dHVuZXJfdHlwZSA9PSBUVU5FUl9QSElMSVBTX1REQTgyOTApIHsKKwkJCQlub3JtcyA9ICgweDExIDw8IDIpIHwgMHgwMTsKKwkJCQlzYWFfZHNwX3dyaXRlbChkZXYsIDB4NDJjID4+IDIsIDB4NzI5NTU1KTsKKwkJCX0gZWxzZSB7CisJCQkJbm9ybXMgPSAoMHgwZiA8PCAyKSB8IDB4MDE7CisJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKiAobGV0IGNoaXApIHNjYW4gZm9yIHNvdW5kIGNhcnJpZXIgKi8KIAkJCW5vcm1zID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhODI5MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE4MjkwLmMKaW5kZXggMjQ5OGI3Ni4uN2I0ZmIyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE4MjkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE4MjkwLmMKQEAgLTU2Nyw4ICs1NjcsOCBAQAogCX0KIAl0dW5lcl9pbmZvKCJ0dW5lcjogdHlwZSBzZXQgdG8gJXNcbiIsIGMtPm5hbWUpOwogCi0JdC0+dHZfZnJlcSAgICA9IHNldF90dl9mcmVxOwotCXQtPnJhZGlvX2ZyZXEgPSBzZXRfcmFkaW9fZnJlcTsKKwl0LT5zZXRfdHZfZnJlcSAgICA9IHNldF90dl9mcmVxOworCXQtPnNldF9yYWRpb19mcmVxID0gc2V0X3JhZGlvX2ZyZXE7CiAJdC0+aGFzX3NpZ25hbCA9IGhhc19zaWduYWw7CiAJdC0+c3RhbmRieSA9IHN0YW5kYnk7CiAJdC0+dGRhODI3eF9scHNlbCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTU3NjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNTc2Ny5jCmluZGV4IDkyMWZlNzIuLmMyYjk4ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNTc2Ny5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNTc2Ny5jCkBAIC02Miw3ICs2Miw3IEBACiAKICNkZWZpbmUgVEVBNTc2N19QT1JUMV9ISUdICTB4MDEKIAotLyogRm9ydGggcmVnaXN0ZXIgKi8KKy8qIEZvdXJ0aCByZWdpc3RlciAqLwogI2RlZmluZSBURUE1NzY3X1BPUlQyX0hJR0gJMHg4MAogLyogQ2hpcHMgc3RvcHMgd29ya2luZy4gT25seSBJMkMgYnVzIHJlbWFpbnMgb24gKi8KICNkZWZpbmUgVEVBNTc2N19TVERCWQkJMHg0MApAQCAtODUsNyArODUsNyBAQAogLyogSWYgYWN0aXZhdGUgUE9SVCAxIGluZGljYXRlcyBTRUFSQ0ggb3IgZWxzZSBpdCBpcyB1c2VkIGFzIFBPUlQxICovCiAjZGVmaW5lIFRFQTU3NjdfU1JDSF9JTkQJMHgwMQogCi0vKiBGaXZldGggcmVnaXN0ZXIgKi8KKy8qIEZpZnRoIHJlZ2lzdGVyICovCiAKIC8qIEJ5IGFjdGl2YXRpbmcsIGl0IHdpbGwgdXNlIFh0YWwgYXQgMTMgTUh6IGFzIHJlZmVyZW5jZSBmb3IgZGl2aWRlciAqLwogI2RlZmluZSBURUE1NzY3X1BMTFJFRl9FTkFCTEUJMHg4MApAQCAtMTA5LDEzICsxMDksMTMgQEAKICNkZWZpbmUgVEVBNTc2N19TVEVSRU9fTUFTSwkweDgwCiAjZGVmaW5lIFRFQTU3NjdfSUZfQ05UUl9NQVNLCTB4N2YKIAotLyogRm91ciByZWdpc3RlciAqLworLyogRm91cnRoIHJlZ2lzdGVyICovCiAjZGVmaW5lIFRFQTU3NjdfQURDX0xFVkVMX01BU0sJMHhmMAogCiAvKiBzaG91bGQgYmUgMCAqLwogI2RlZmluZSBURUE1NzY3X0NISVBfSURfTUFTSwkweDBmCiAKLS8qIEZpdmV0aCByZWdpc3RlciAqLworLyogRmlmdGggcmVnaXN0ZXIgKi8KIC8qIFJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyAqLwogI2RlZmluZSBURUE1NzY3X1JFU0VSVkVEX01BU0sJMHhmZgogCkBAIC0yMjAsMTkgKzIyMCwxOSBAQAogCQl0dW5lcl9kYmcgKCJURUE1NzY3IHJhZGlvIEhJR0ggTE8gaW5qZWN0IHh0YWwgQCAxMyBNSHpcbiIpOwogCQlidWZmZXJbMl0gfD0gVEVBNTc2N19ISUdIX0xPX0lOSkVDVDsKIAkJYnVmZmVyWzRdIHw9IFRFQTU3NjdfUExMUkVGX0VOQUJMRTsKLQkJZGl2ID0gKGZycSAqIDQwMDAgLyAxNiArIDcwMDAwMCArIDIyNTAwMCArIDI1MDAwKSAvIDUwMDAwOworCQlkaXYgPSAoZnJxICogKDQwMDAgLyAxNikgKyA3MDAwMDAgKyAyMjUwMDAgKyAyNTAwMCkgLyA1MDAwMDsKIAkJYnJlYWs7CiAJY2FzZSBURUE1NzY3X0xPV19MT18xM01IejoKIAkJdHVuZXJfZGJnICgiVEVBNTc2NyByYWRpbyBMT1cgTE8gaW5qZWN0IHh0YWwgQCAxMyBNSHpcbiIpOwogCiAJCWJ1ZmZlcls0XSB8PSBURUE1NzY3X1BMTFJFRl9FTkFCTEU7Ci0JCWRpdiA9IChmcnEgKiA0MDAwIC8gMTYgLSA3MDAwMDAgLSAyMjUwMDAgKyAyNTAwMCkgLyA1MDAwMDsKKwkJZGl2ID0gKGZycSAqICg0MDAwIC8gMTYpIC0gNzAwMDAwIC0gMjI1MDAwICsgMjUwMDApIC8gNTAwMDA7CiAJCWJyZWFrOwogCWNhc2UgVEVBNTc2N19MT1dfTE9fMzI3Njg6CiAJCXR1bmVyX2RiZyAoIlRFQTU3NjcgcmFkaW8gTE9XIExPIGluamVjdCB4dGFsIEAgMzIsNzY4IE1IelxuIik7CiAJCWJ1ZmZlclszXSB8PSBURUE1NzY3X1hUQUxfMzI3Njg7CiAJCS8qIGNvbnN0IDcwMD00MDAwKjE3NSBLaHogLSB0byBhZGp1c3QgZnJlcSB0byByaWdodCB2YWx1ZSAqLwotCQlkaXYgPSAoKGZycSAqIDQwMDAgLyAxNiAtIDcwMDAwMCAtIDIyNTAwMCkgKyAxNjM4NCkgPj4gMTU7CisJCWRpdiA9ICgoZnJxICogKDQwMDAgLyAxNikgLSA3MDAwMDAgLSAyMjUwMDApICsgMTYzODQpID4+IDE1OwogCQlicmVhazsKIAljYXNlIFRFQTU3NjdfSElHSF9MT18zMjc2ODoKIAlkZWZhdWx0OgpAQCAtMzUwLDggKzM1MCw4IEBACiAJdHVuZXJfaW5mbygidHlwZSBzZXQgdG8gJWQgKCVzKVxuIiwgdC0+dHlwZSwgIlBoaWxpcHMgVEVBNTc2N0hOIEZNIFJhZGlvIik7CiAJc3RybGNweShjLT5uYW1lLCAidGVhNTc2NyIsIHNpemVvZihjLT5uYW1lKSk7CiAKLQl0LT50dl9mcmVxID0gc2V0X3R2X2ZyZXE7Ci0JdC0+cmFkaW9fZnJlcSA9IHNldF9yYWRpb19mcmVxOworCXQtPnNldF90dl9mcmVxID0gc2V0X3R2X2ZyZXE7CisJdC0+c2V0X3JhZGlvX2ZyZXEgPSBzZXRfcmFkaW9fZnJlcTsKIAl0LT5oYXNfc2lnbmFsID0gdGVhNTc2N19zaWduYWw7CiAJdC0+aXNfc3RlcmVvID0gdGVhNTc2N19zdGVyZW87CiAJdC0+c3RhbmRieSA9IHRlYTU3Njdfc3RhbmRieTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKaW5kZXggZjMwZWY3OWQuLjI5OTViMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCkBAIC04Miw3ICs4Miw3IEBACiAJCXR1bmVyX3dhcm4gKCJ0dW5lciB0eXBlIG5vdCBzZXRcbiIpOwogCQlyZXR1cm47CiAJfQotCWlmIChOVUxMID09IHQtPnR2X2ZyZXEpIHsKKwlpZiAoTlVMTCA9PSB0LT5zZXRfdHZfZnJlcSkgewogCQl0dW5lcl93YXJuICgiVHVuZXIgaGFzIG5vIHdheSB0byBzZXQgdHYgZnJlcVxuIik7CiAJCXJldHVybjsKIAl9CkBAIC05MCw4ICs5MCwxNCBAQAogCQl0dW5lcl9kYmcgKCJUViBmcmVxICglZC4lMDJkKSBvdXQgb2YgcmFuZ2UgKCVkLSVkKVxuIiwKIAkJCSAgIGZyZXEgLyAxNiwgZnJlcSAlIDE2ICogMTAwIC8gMTYsIHR2X3JhbmdlWzBdLAogCQkJICAgdHZfcmFuZ2VbMV0pOworCQkvKiBWNEwyIHNwZWM6IGlmIHRoZSBmcmVxIGlzIG5vdCBwb3NzaWJsZSB0aGVuIHRoZSBjbG9zZXN0CisJCSAgIHBvc3NpYmxlIHZhbHVlIHNob3VsZCBiZSBzZWxlY3RlZCAqLworCQlpZiAoZnJlcSA8IHR2X3JhbmdlWzBdICogMTYpCisJCQlmcmVxID0gdHZfcmFuZ2VbMF0gKiAxNjsKKwkJZWxzZQorCQkJZnJlcSA9IHR2X3JhbmdlWzFdICogMTY7CiAJfQotCXQtPnR2X2ZyZXEoYywgZnJlcSk7CisJdC0+c2V0X3R2X2ZyZXEoYywgZnJlcSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9yYWRpb19mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBpbnQgZnJlcSkKQEAgLTEwMiwxOCArMTA4LDIzIEBACiAJCXR1bmVyX3dhcm4gKCJ0dW5lciB0eXBlIG5vdCBzZXRcbiIpOwogCQlyZXR1cm47CiAJfQotCWlmIChOVUxMID09IHQtPnJhZGlvX2ZyZXEpIHsKKwlpZiAoTlVMTCA9PSB0LT5zZXRfcmFkaW9fZnJlcSkgewogCQl0dW5lcl93YXJuICgidHVuZXIgaGFzIG5vIHdheSB0byBzZXQgcmFkaW8gZnJlcXVlbmN5XG4iKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoZnJlcSA8PSByYWRpb19yYW5nZVswXSAqIDE2MDAwIHx8IGZyZXEgPj0gcmFkaW9fcmFuZ2VbMV0gKiAxNjAwMCkgeworCWlmIChmcmVxIDwgcmFkaW9fcmFuZ2VbMF0gKiAxNjAwMCB8fCBmcmVxID4gcmFkaW9fcmFuZ2VbMV0gKiAxNjAwMCkgewogCQl0dW5lcl9kYmcgKCJyYWRpbyBmcmVxICglZC4lMDJkKSBvdXQgb2YgcmFuZ2UgKCVkLSVkKVxuIiwKIAkJCSAgIGZyZXEgLyAxNjAwMCwgZnJlcSAlIDE2MDAwICogMTAwIC8gMTYwMDAsCiAJCQkgICByYWRpb19yYW5nZVswXSwgcmFkaW9fcmFuZ2VbMV0pOworCQkvKiBWNEwyIHNwZWM6IGlmIHRoZSBmcmVxIGlzIG5vdCBwb3NzaWJsZSB0aGVuIHRoZSBjbG9zZXN0CisJCSAgIHBvc3NpYmxlIHZhbHVlIHNob3VsZCBiZSBzZWxlY3RlZCAqLworCQlpZiAoZnJlcSA8IHJhZGlvX3JhbmdlWzBdICogMTYwMDApCisJCQlmcmVxID0gcmFkaW9fcmFuZ2VbMF0gKiAxNjAwMDsKKwkJZWxzZQorCQkJZnJlcSA9IHJhZGlvX3JhbmdlWzFdICogMTYwMDA7CiAJfQogCi0JdC0+cmFkaW9fZnJlcShjLCBmcmVxKTsKLQlyZXR1cm47CisJdC0+c2V0X3JhZGlvX2ZyZXEoYywgZnJlcSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBsb25nIGZyZXEpCkBAIC0xMjUsMTUgKzEzNiwxNiBAQAogCQl0dW5lcl9kYmcoInJhZGlvIGZyZXEgc2V0IHRvICVsdS4lMDJsdVxuIiwKIAkJCSAgZnJlcSAvIDE2MDAwLCBmcmVxICUgMTYwMDAgKiAxMDAgLyAxNjAwMCk7CiAJCXNldF9yYWRpb19mcmVxKGMsIGZyZXEpOworCQl0LT5yYWRpb19mcmVxID0gZnJlcTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1RVTkVSX0FOQUxPR19UVjoKIAljYXNlIFY0TDJfVFVORVJfRElHSVRBTF9UVjoKIAkJdHVuZXJfZGJnKCJ0diBmcmVxIHNldCB0byAlbHUuJTAybHVcbiIsCiAJCQkgIGZyZXEgLyAxNiwgZnJlcSAlIDE2ICogMTAwIC8gMTYpOwogCQlzZXRfdHZfZnJlcShjLCBmcmVxKTsKKwkJdC0+dHZfZnJlcSA9IGZyZXE7CiAJCWJyZWFrOwogCX0KLQl0LT5mcmVxID0gZnJlcTsKIH0KIAogc3RhdGljIHZvaWQgc2V0X3R5cGUoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCB0eXBlLApAQCAtMjEyLDcgKzIyNCw3IEBACiAJaWYgKHQtPm1vZGVfbWFzayA9PSBUX1VOSU5JVElBTElaRUQpCiAJCXQtPm1vZGVfbWFzayA9IG5ld19tb2RlX21hc2s7CiAKLQlzZXRfZnJlcShjLCB0LT5mcmVxKTsKKwlzZXRfZnJlcShjLCAoVjRMMl9UVU5FUl9SQURJTyA9PSB0LT5tb2RlKSA/IHQtPnJhZGlvX2ZyZXEgOiB0LT50dl9mcmVxKTsKIAl0dW5lcl9kYmcoIiVzICVzIEkyQyBhZGRyIDB4JTAyeCB3aXRoIHR5cGUgJWQgdXNlZCBmb3IgMHglMDJ4XG4iLAogCQkgIGMtPmFkYXB0ZXItPm5hbWUsIGMtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIGMtPmFkZHIgPDwgMSwgdHlwZSwKIAkJICB0LT5tb2RlX21hc2spOwpAQCAtMzc3LDExICszODksMTEgQEAKIAkJZGVmYXVsdDogcCA9ICJ1bmRlZmluZWQiOyBicmVhazsKIAl9CiAJaWYgKHQtPm1vZGUgPT0gVjRMMl9UVU5FUl9SQURJTykgewotCQlmcmVxID0gdC0+ZnJlcSAvIDE2MDAwOwotCQlmcmVxX2ZyYWN0aW9uID0gKHQtPmZyZXEgJSAxNjAwMCkgKiAxMDAgLyAxNjAwMDsKKwkJZnJlcSA9IHQtPnJhZGlvX2ZyZXEgLyAxNjAwMDsKKwkJZnJlcV9mcmFjdGlvbiA9ICh0LT5yYWRpb19mcmVxICUgMTYwMDApICogMTAwIC8gMTYwMDA7CiAJfSBlbHNlIHsKLQkJZnJlcSA9IHQtPmZyZXEgLyAxNjsKLQkJZnJlcV9mcmFjdGlvbiA9ICh0LT5mcmVxICUgMTYpICogMTAwIC8gMTY7CisJCWZyZXEgPSB0LT50dl9mcmVxIC8gMTY7CisJCWZyZXFfZnJhY3Rpb24gPSAodC0+dHZfZnJlcSAlIDE2KSAqIDEwMCAvIDE2OwogCX0KIAl0dW5lcl9pbmZvKCJUdW5lciBtb2RlOiAgICAgICVzXG4iLCBwKTsKIAl0dW5lcl9pbmZvKCJGcmVxdWVuY3k6ICAgICAgICVsdS4lMDJsdSBNSHpcbiIsIGZyZXEsIGZyZXFfZnJhY3Rpb24pOwpAQCAtNDU2LDcgKzQ2OCw3IEBACiAJCQkJdC0+dHlwZSA9IFRVTkVSX1RFQTU3Njc7CiAJCQkJdC0+bW9kZV9tYXNrID0gVF9SQURJTzsKIAkJCQl0LT5tb2RlID0gVF9TVEFOREJZOwotCQkJCXQtPmZyZXEgPSA4Ny41ICogMTY7IC8qIFNldHMgZnJlcSB0byBGTSByYW5nZSAqLworCQkJCXQtPnJhZGlvX2ZyZXEgPSA4Ny41ICogMTYwMDA7IC8qIFNldHMgZnJlcSB0byBGTSByYW5nZSAqLwogCQkJCWRlZmF1bHRfbW9kZV9tYXNrICY9IH5UX1JBRElPOwogCiAJCQkJZ290byByZWdpc3Rlcl9jbGllbnQ7CkBAIC00NjksNyArNDgxLDggQEAKIAlpZiAoZGVmYXVsdF9tb2RlX21hc2sgIT0gVF9VTklOSVRJQUxJWkVEKSB7CiAJCXR1bmVyX2RiZyAoIlNldHRpbmcgbW9kZV9tYXNrIHRvIDB4JTAyeFxuIiwgZGVmYXVsdF9tb2RlX21hc2spOwogCQl0LT5tb2RlX21hc2sgPSBkZWZhdWx0X21vZGVfbWFzazsKLQkJdC0+ZnJlcSA9IDQwMCAqIDE2OyAvKiBTZXRzIGZyZXEgdG8gVkhGIEhpZ2ggKi8KKwkJdC0+dHZfZnJlcSA9IDQwMCAqIDE2OyAvKiBTZXRzIGZyZXEgdG8gVkhGIEhpZ2ggKi8KKwkJdC0+cmFkaW9fZnJlcSA9IDg3LjUgKiAxNjAwMDsgLyogU2V0cyBmcmVxIHRvIEZNIHJhbmdlICovCiAJCWRlZmF1bHRfbW9kZV9tYXNrID0gVF9VTklOSVRJQUxJWkVEOwogCX0KIApAQCAtNTY1LDE2ICs1NzgsMTggQEAKIAkJc2V0X2FkZHIoY2xpZW50LCAoc3RydWN0IHR1bmVyX3NldHVwICopYXJnKTsKIAkJYnJlYWs7CiAJY2FzZSBBVURDX1NFVF9SQURJTzoKLQkJc2V0X21vZGUoY2xpZW50LHQsVjRMMl9UVU5FUl9SQURJTywgIkFVRENfU0VUX1JBRElPIik7CisJCWlmIChzZXRfbW9kZShjbGllbnQsIHQsIFY0TDJfVFVORVJfUkFESU8sICJBVURDX1NFVF9SQURJTyIpCisJCQkJPT0gRUlOVkFMKQorCQkJcmV0dXJuIDA7CisJCWlmICh0LT5yYWRpb19mcmVxKQorCQkJc2V0X2ZyZXEoY2xpZW50LCB0LT5yYWRpb19mcmVxKTsKIAkJYnJlYWs7CiAJY2FzZSBUVU5FUl9TRVRfU1RBTkRCWToKLQkJewotCQkJaWYgKGNoZWNrX21vZGUodCwgIlRVTkVSX1NFVF9TVEFOREJZIikgPT0gRUlOVkFMKQotCQkJCXJldHVybiAwOwotCQkJaWYgKHQtPnN0YW5kYnkpCi0JCQkJdC0+c3RhbmRieSAoY2xpZW50KTsKLQkJCWJyZWFrOwotCQl9CisJCWlmIChjaGVja19tb2RlKHQsICJUVU5FUl9TRVRfU1RBTkRCWSIpID09IEVJTlZBTCkKKwkJCXJldHVybiAwOworCQlpZiAodC0+c3RhbmRieSkKKwkJCXQtPnN0YW5kYnkgKGNsaWVudCk7CisJCWJyZWFrOwogCWNhc2UgVklESU9DU0FVRElPOgogCQlpZiAoY2hlY2tfbW9kZSh0LCAiVklESU9DU0FVRElPIikgPT0gRUlOVkFMKQogCQkJcmV0dXJuIDA7CkBAIC01ODMsNyArNTk4LDYgQEAKIAogCQkvKiBTaG91bGQgYmUgaW1wbGVtZW50ZWQsIHNpbmNlIGJ0dHYgY2FsbHMgaXQgKi8KIAkJdHVuZXJfZGJnKCJWSURJT0NTQVVESU8gbm90IGltcGxlbWVudGVkLlxuIik7Ci0KIAkJYnJlYWs7CiAJLyogLS0tIHY0bCBpb2N0bHMgLS0tICovCiAJLyogdGFrZSBjYXJlOiBidHR2IGRvZXMgdXNlcnNwYWNlIGNvcHlpbmcsIHdlJ2xsIGdldCBhCkBAIC02MDksOCArNjIzLDggQEAKIAkJCWlmICh2Yy0+bm9ybSA8IEFSUkFZX1NJWkUobWFwKSkKIAkJCQl0LT5zdGQgPSBtYXBbdmMtPm5vcm1dOwogCQkJdHVuZXJfZml4dXBfc3RkKHQpOwotCQkJaWYgKHQtPmZyZXEpCi0JCQkJc2V0X3R2X2ZyZXEoY2xpZW50LCB0LT5mcmVxKTsKKwkJCWlmICh0LT50dl9mcmVxKQorCQkJCXNldF90dl9mcmVxKGNsaWVudCwgdC0+dHZfZnJlcSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCWNhc2UgVklESU9DU0ZSRVE6CkBAIC02ODQsMTUgKzY5OCwxNCBAQAogCiAJCQl0LT5zdGQgPSAqaWQ7CiAJCQl0dW5lcl9maXh1cF9zdGQodCk7Ci0JCQlpZiAodC0+ZnJlcSkKLQkJCQlzZXRfZnJlcShjbGllbnQsIHQtPmZyZXEpOworCQkJaWYgKHQtPnR2X2ZyZXEpCisJCQkJc2V0X2ZyZXEoY2xpZW50LCB0LT50dl9mcmVxKTsKIAkJCWJyZWFrOwogCQl9CiAJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CiAJCXsKIAkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKIAotCQkJdC0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKIAkJCXN3aXRjaF92NGwyKCk7CiAJCQlpZiAoVjRMMl9UVU5FUl9SQURJTyA9PSBmLT50eXBlICYmCiAJCQkgICAgVjRMMl9UVU5FUl9SQURJTyAhPSB0LT5tb2RlKSB7CkBAIC03MDAsNyArNzEzLDcgQEAKIAkJCQkJICAgID09IEVJTlZBTCkKIAkJCQkJcmV0dXJuIDA7CiAJCQl9Ci0JCQlzZXRfZnJlcShjbGllbnQsdC0+ZnJlcSk7CisJCQlzZXRfZnJlcShjbGllbnQsZi0+ZnJlcXVlbmN5KTsKIAogCQkJYnJlYWs7CiAJCX0KQEAgLTcxMiw3ICs3MjUsOCBAQAogCQkJCXJldHVybiAwOwogCQkJc3dpdGNoX3Y0bDIoKTsKIAkJCWYtPnR5cGUgPSB0LT5tb2RlOwotCQkJZi0+ZnJlcXVlbmN5ID0gdC0+ZnJlcTsKKwkJCWYtPmZyZXF1ZW5jeSA9IChWNEwyX1RVTkVSX1JBRElPID09IHQtPm1vZGUpID8KKwkJCQl0LT5yYWRpb19mcmVxIDogdC0+dHZfZnJlcTsKIAkJCWJyZWFrOwogCQl9CiAJY2FzZSBWSURJT0NfR19UVU5FUjoKQEAgLTc2Myw3ICs3NzcsNyBAQAogCiAJCQlpZiAoVjRMMl9UVU5FUl9SQURJTyA9PSB0LT5tb2RlKSB7CiAJCQkJdC0+YXVkbW9kZSA9IHR1bmVyLT5hdWRtb2RlOwotCQkJCXNldF9yYWRpb19mcmVxKGNsaWVudCwgdC0+ZnJlcSk7CisJCQkJc2V0X3JhZGlvX2ZyZXEoY2xpZW50LCB0LT5yYWRpb19mcmVxKTsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CkBAIC03OTEsOCArODA1LDEzIEBACiAJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhIChjKTsKIAogCXR1bmVyX2RiZyAoInJlc3VtZVxuIik7Ci0JaWYgKHQtPmZyZXEpCi0JCXNldF9mcmVxKGMsIHQtPmZyZXEpOworCWlmIChWNEwyX1RVTkVSX1JBRElPID09IHQtPm1vZGUpIHsKKwkJaWYgKHQtPnJhZGlvX2ZyZXEpCisJCQlzZXRfZnJlcShjLCB0LT5yYWRpb19mcmVxKTsKKwl9IGVsc2UgeworCQlpZiAodC0+dHZfZnJlcSkKKwkJCXNldF9mcmVxKGMsIHQtPnR2X2ZyZXEpOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMKaW5kZXggZTVmYjc0My4uMzc5NzdmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXNpbXBsZS5jCkBAIC03OSw3MjIgKzc5LDE2IEBACiAjZGVmaW5lIFRVTkVSX1BMTF9MT0NLRUQgICAweDQwCiAjZGVmaW5lIFRVTkVSX1NURVJFT19NSzMgICAweDA0CiAKLSNkZWZpbmUgVFVORVJfTUFYX1JBTkdFUyAgIDMKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdHJ1Y3QgdHVuZXJ0eXBlCi17Ci0JY2hhciAqbmFtZTsKLQotCWludCBjb3VudDsKLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBzaG9ydCB0aHJlc2g7Ci0JCXVuc2lnbmVkIGNoYXIgY2I7Ci0JfSByYW5nZXNbVFVORVJfTUFYX1JBTkdFU107Ci0JdW5zaWduZWQgY2hhciBjb25maWc7Ci19OwotCi0vKgotICoJVGhlIGZsb2F0cyBpbiB0aGUgdHVuZXIgc3RydWN0IGFyZSBjb21wdXRlZCBhdCBjb21waWxlIHRpbWUKLSAqCWJ5IGdjYyBhbmQgY2FzdCBiYWNrIHRvIGludGVnZXJzLiBUaHVzIHdlIGRvbid0IHZpb2xhdGUgdGhlCi0gKgkibm8gZmxvYXQgaW4ga2VybmVsIiBydWxlLgorI2RlZmluZSBUVU5FUl9QQVJBTV9BTkFMT0cgMCAgLyogdG8gYmUgcmVtb3ZlZCAqLworLyogRklYTUU6CisgKiBSaWdodCBub3csIGFsbCB0dW5lcnMgYXJlIHVzaW5nIHRoZSBmaXJzdCB0dW5lcl9wYXJhbXNbXSBhcnJheSBlbGVtZW50CisgKiBmb3IgYW5hbG9nIG1vZGUuIEluIHRoZSBmdXR1cmUsIHdlIHdpbGwgYmUgbWVyZ2luZyBzaW1pbGFyIHR1bmVyCisgKiBkZWZpbml0aW9ucyB0b2dldGhlciwgc3VjaCB0aGF0IGVhY2ggdHVuZXIgZGVmaW5pdGlvbiB3aWxsIGhhdmUgYQorICogdHVuZXJfcGFyYW1zIHN0cnVjdCBmb3IgZWFjaCBhdmFpbGFibGUgdmlkZW8gc3RhbmRhcmQuIEF0IHRoYXQgcG9pbnQsCisgKiBUVU5FUl9QQVJBTV9BTkFMT0cgd2lsbCBiZSByZW1vdmVkLCBhbmQgdGhlIHR1bmVyX3BhcmFtc1tdIGFycmF5CisgKiBlbGVtZW50IHdpbGwgYmUgY2hvc2VuIGJhc2VkIG9uIHRoZSB2aWRlbyBzdGFuZGFyZCBpbiB1c2UuCisgKgogICovCi1zdGF0aWMgc3RydWN0IHR1bmVydHlwZSB0dW5lcnNbXSA9IHsKLQkvKiAwLTkgKi8KLQlbVFVORVJfVEVNSUNfUEFMXSA9IHsgLyogVEVNSUMgUEFMICovCi0JCS5uYW1lICAgPSAiVGVtaWMgUEFMICg0MDAyIEZINSkiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNDAuMjUgLypNSHoqLywgMHgwMiwgfSwKLQkJCXsgMTYgKiA0NjMuMjUgLypNSHoqLywgMHgwNCwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwMSwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfUEhJTElQU19QQUxfSV0gPSB7IC8qIFBoaWxpcHMgUEFMX0kgKi8KLQkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTF9JIChGSTEyNDYgYW5kIGNvbXBhdGlibGVzKSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE0MC4yNSAvKk1IeiovLCAweGEwLCB9LAotCQkJeyAxNiAqIDQ2My4yNSAvKk1IeiovLCAweDkwLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9QSElMSVBTX05UU0NdID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KLQkJLm5hbWUgICA9ICJQaGlsaXBzIE5UU0MgKEZJMTIzNixGTTEyMzYgYW5kIGNvbXBhdGlibGVzKSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweGEwLCB9LAotCQkJeyAxNiAqIDQ1MS4yNSAvKk1IeiovLCAweDkwLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9QSElMSVBTX1NFQ0FNXSA9IHsgLyogUGhpbGlwcyBTRUNBTSAqLwotCQkubmFtZSAgID0gIlBoaWxpcHMgKFNFQ0FNK1BBTF9CRykgKEZJMTIxNk1GLCBGTTEyMTZNRiwgRlIxMjE2TUYpIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTY4LjI1IC8qTUh6Ki8sIDB4YTcsIH0sCi0JCQl7IDE2ICogNDQ3LjI1IC8qTUh6Ki8sIDB4OTcsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzcsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX0FCU0VOVF0gPSB7IC8qIFR1bmVyIEFic2VudCAqLwotCQkubmFtZSAgID0gIk5vVHVuZXIiLAotCQkuY291bnQgID0gMSwKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMCwgMHgwMCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4MDAsCi0JfSwKLQlbVFVORVJfUEhJTElQU19QQUxdID0geyAvKiBQaGlsaXBzIFBBTCAqLwotCQkubmFtZSAgID0gIlBoaWxpcHMgUEFMX0JHIChGSTEyMTYgYW5kIGNvbXBhdGlibGVzKSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE2OC4yNSAvKk1IeiovLCAweGEwLCB9LAotCQkJeyAxNiAqIDQ0Ny4yNSAvKk1IeiovLCAweDkwLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9URU1JQ19OVFNDXSA9IHsgLyogVEVNSUMgTlRTQyAqLwotCQkubmFtZSAgID0gIlRlbWljIE5UU0MgKDQwMzIgRlk1KSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweDAyLCB9LAotCQkJeyAxNiAqIDQ2My4yNSAvKk1IeiovLCAweDA0LCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDAxLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9URU1JQ19QQUxfSV0gPSB7IC8qIFRFTUlDIFBBTF9JICovCi0JCS5uYW1lICAgPSAiVGVtaWMgUEFMX0kgKDQwNjIgRlk1KSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE3MC4wMCAvKk1IeiovLCAweDAyLCB9LAotCQkJeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweDA0LCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDAxLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9URU1JQ180MDM2Rlk1X05UU0NdID0geyAvKiBURU1JQyBOVFNDICovCi0JCS5uYW1lICAgPSAiVGVtaWMgTlRTQyAoNDAzNiBGWTUpIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTU3LjI1IC8qTUh6Ki8sIDB4YTAsIH0sCi0JCQl7IDE2ICogNDYzLjI1IC8qTUh6Ki8sIDB4OTAsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX0FMUFNfVFNCSDFfTlRTQ10gPSB7IC8qIFRFTUlDIE5UU0MgKi8KLQkJLm5hbWUgICA9ICJBbHBzIEhTQkgxIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTM3LjI1IC8qTUh6Ki8sIDB4MDEsIH0sCi0JCQl7IDE2ICogMzg1LjI1IC8qTUh6Ki8sIDB4MDIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0KLQkvKiAxMC0xOSAqLwotCVtUVU5FUl9BTFBTX1RTQkUxX1BBTF0gPSB7IC8qIFRFTUlDIFBBTCAqLwotCQkubmFtZSAgID0gIkFscHMgVFNCRTEiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxMzcuMjUgLypNSHoqLywgMHgwMSwgfSwKLQkJCXsgMTYgKiAzODUuMjUgLypNSHoqLywgMHgwMiwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfQUxQU19UU0JCNV9QQUxfSV0gPSB7IC8qIEFscHMgUEFMX0kgKi8KLQkJLm5hbWUgICA9ICJBbHBzIFRTQkI1IiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTMzLjI1IC8qTUh6Ki8sIDB4MDEsIH0sCi0JCQl7IDE2ICogMzUxLjI1IC8qTUh6Ki8sIDB4MDIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX0FMUFNfVFNCRTVfUEFMXSA9IHsgLyogQWxwcyBQQUwgKi8KLQkJLm5hbWUgICA9ICJBbHBzIFRTQkU1IiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTMzLjI1IC8qTUh6Ki8sIDB4MDEsIH0sCi0JCQl7IDE2ICogMzUxLjI1IC8qTUh6Ki8sIDB4MDIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX0FMUFNfVFNCQzVfUEFMXSA9IHsgLyogQWxwcyBQQUwgKi8KLQkJLm5hbWUgICA9ICJBbHBzIFRTQkM1IiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTMzLjI1IC8qTUh6Ki8sIDB4MDEsIH0sCi0JCQl7IDE2ICogMzUxLjI1IC8qTUh6Ki8sIDB4MDIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX1RFTUlDXzQwMDZGSDVfUEFMXSA9IHsgLyogVEVNSUMgUEFMICovCi0JCS5uYW1lICAgPSAiVGVtaWMgUEFMX0JHICg0MDA2Rkg1KSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE3MC4wMCAvKk1IeiovLCAweGEwLCB9LAotCQkJeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweDkwLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9BTFBTX1RTSEM2X05UU0NdID0geyAvKiBBbHBzIE5UU0MgKi8KLQkJLm5hbWUgICA9ICJBbHBzIFRTQ0g2IiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTM3LjI1IC8qTUh6Ki8sIDB4MTQsIH0sCi0JCQl7IDE2ICogMzg1LjI1IC8qTUh6Ki8sIDB4MTIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MTEsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX1RFTUlDX1BBTF9ES10gPSB7IC8qIFRFTUlDIFBBTCAqLwotCQkubmFtZSAgID0gIlRlbWljIFBBTF9ESyAoNDAxNiBGWTUpIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTY4LjI1IC8qTUh6Ki8sIDB4YTAsIH0sCi0JCQl7IDE2ICogNDU2LjI1IC8qTUh6Ki8sIDB4OTAsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX1BISUxJUFNfTlRTQ19NXSA9IHsgLyogUGhpbGlwcyBOVFNDICovCi0JCS5uYW1lICAgPSAiUGhpbGlwcyBOVFNDX00gKE1LMikiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHhhMCwgfSwKLQkJCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg5MCwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfVEVNSUNfNDA2NkZZNV9QQUxfSV0gPSB7IC8qIFRFTUlDIFBBTF9JICovCi0JCS5uYW1lICAgPSAiVGVtaWMgUEFMX0kgKDQwNjYgRlk1KSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE2OS4wMCAvKk1IeiovLCAweGEwLCB9LAotCQkJeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDkwLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9URU1JQ180MDA2Rk41X01VTFRJX1BBTF0gPSB7IC8qIFRFTUlDIFBBTCAqLwotCQkubmFtZSAgID0gIlRlbWljIFBBTCogYXV0byAoNDAwNiBGTjUpIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTY5LjAwIC8qTUh6Ki8sIDB4YTAsIH0sCi0JCQl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4OTAsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0KLQkvKiAyMC0yOSAqLwotCVtUVU5FUl9URU1JQ180MDA5RlI1X1BBTF0gPSB7IC8qIFRFTUlDIFBBTCAqLwotCQkubmFtZSAgID0gIlRlbWljIFBBTF9CRyAoNDAwOSBGUjUpIG9yIFBBTF9JICg0MDY5IEZSNSkiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNDEuMDAgLypNSHoqLywgMHhhMCwgfSwKLQkJCXsgMTYgKiA0NjQuMDAgLypNSHoqLywgMHg5MCwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfVEVNSUNfNDAzOUZSNV9OVFNDXSA9IHsgLyogVEVNSUMgTlRTQyAqLwotCQkubmFtZSAgID0gIlRlbWljIE5UU0MgKDQwMzkgRlI1KSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE1OC4wMCAvKk1IeiovLCAweGEwLCB9LAotCQkJeyAxNiAqIDQ1My4wMCAvKk1IeiovLCAweDkwLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9URU1JQ180MDQ2Rk01XSA9IHsgLyogVEVNSUMgUEFMICovCi0JCS5uYW1lICAgPSAiVGVtaWMgUEFML1NFQ0FNIG11bHRpICg0MDQ2IEZNNSkiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNjkuMDAgLypNSHoqLywgMHhhMCwgfSwKLQkJCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg5MCwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfUEhJTElQU19QQUxfREtdID0geyAvKiBQaGlsaXBzIFBBTCAqLwotCQkubmFtZSAgID0gIlBoaWxpcHMgUEFMX0RLIChGSTEyNTYgYW5kIGNvbXBhdGlibGVzKSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE3MC4wMCAvKk1IeiovLCAweGEwLCB9LAotCQkJeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweDkwLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9QSElMSVBTX0ZRMTIxNk1FXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KLQkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRlExMjE2TUUpIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4YTAsIH0sCi0JCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4OTAsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX0xHX1BBTF9JX0ZNXSA9IHsgLyogTEdJTk5PVEVLIFBBTF9JICovCi0JCS5uYW1lICAgPSAiTEcgUEFMX0krRk0gKFRBUEMtSTAwMUQpIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4YTAsIH0sCi0JCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4OTAsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX0xHX1BBTF9JXSA9IHsgLyogTEdJTk5PVEVLIFBBTF9JICovCi0JCS5uYW1lICAgPSAiTEcgUEFMX0kgKFRBUEMtSTcwMUQpIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4YTAsIH0sCi0JCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4OTAsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX0xHX05UU0NfRk1dID0geyAvKiBMR0lOTk9URUsgTlRTQyAqLwotCQkubmFtZSAgID0gIkxHIE5UU0MrRk0gKFRQSThOU1IwMUYpIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMjEwLjAwIC8qTUh6Ki8sIDB4YTAsIH0sCi0JCQl7IDE2ICogNDk3LjAwIC8qTUh6Ki8sIDB4OTAsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX0xHX1BBTF9GTV0gPSB7IC8qIExHSU5OT1RFSyBQQUwgKi8KLQkJLm5hbWUgICA9ICJMRyBQQUxfQkcrRk0gKFRQSThQU0IwMUQpIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4YTAsIH0sCi0JCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4OTAsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX0xHX1BBTF0gPSB7IC8qIExHSU5OT1RFSyBQQUwgKi8KLQkJLm5hbWUgICA9ICJMRyBQQUxfQkcgKFRQSThQU0IxMUQpIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4YTAsIH0sCi0JCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4OTAsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0KLQkvKiAzMC0zOSAqLwotCVtUVU5FUl9URU1JQ180MDA5Rk41X01VTFRJX1BBTF9GTV0gPSB7IC8qIFRFTUlDIFBBTCAqLwotCQkubmFtZSAgID0gIlRlbWljIFBBTCogYXV0byArIEZNICg0MDA5IEZONSkiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNDEuMDAgLypNSHoqLywgMHhhMCwgfSwKLQkJCXsgMTYgKiA0NjQuMDAgLypNSHoqLywgMHg5MCwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfU0hBUlBfMlU1SkY1NTQwX05UU0NdID0geyAvKiBTSEFSUCBOVFNDICovCi0JCS5uYW1lICAgPSAiU0hBUlAgTlRTQ19KUCAoMlU1SkY1NTQwKSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDEzNy4yNSAvKk1IeiovLCAweDAxLCB9LAotCQkJeyAxNiAqIDMxNy4yNSAvKk1IeiovLCAweDAyLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA4LCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9TYW1zdW5nX1BBTF9UQ1BNOTA5MVBEMjddID0geyAvKiBTYW1zdW5nIFBBTCAqLwotCQkubmFtZSAgID0gIlNhbXN1bmcgUEFMIFRDUE05MDkxUEQyNyIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE2OSAvKk1IeiovLCAweGEwLCB9LAotCQkJeyAxNiAqIDQ2NCAvKk1IeiovLCAweDkwLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgLCAweDMwLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9NVDIwMzJdID0geyAvKiBNaWNyb3R1bmUgUEFMfE5UU0MgKi8KLQkJLm5hbWUgICA9ICJNVDIweHggdW5pdmVyc2FsIiwKLQkgIC8qIHNlZSBtdDIweHguYyBmb3IgZGV0YWlscyAqLyB9LAotCVtUVU5FUl9URU1JQ180MTA2Rkg1XSA9IHsgLyogVEVNSUMgUEFMICovCi0JCS5uYW1lICAgPSAiVGVtaWMgUEFMX0JHICg0MTA2IEZINSkiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNDEuMDAgLypNSHoqLywgMHhhMCwgfSwKLQkJCXsgMTYgKiA0NjQuMDAgLypNSHoqLywgMHg5MCwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfVEVNSUNfNDAxMkZZNV0gPSB7IC8qIFRFTUlDIFBBTCAqLwotCQkubmFtZSAgID0gIlRlbWljIFBBTF9ESy9TRUNBTV9MICg0MDEyIEZZNSkiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNDAuMjUgLypNSHoqLywgMHgwMiwgfSwKLQkJCXsgMTYgKiA0NjMuMjUgLypNSHoqLywgMHgwNCwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwMSwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfVEVNSUNfNDEzNkZZNV0gPSB7IC8qIFRFTUlDIE5UU0MgKi8KLQkJLm5hbWUgICA9ICJUZW1pYyBOVFNDICg0MTM2IEZZNSkiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNTguMDAgLypNSHoqLywgMHhhMCwgfSwKLQkJCXsgMTYgKiA0NTMuMDAgLypNSHoqLywgMHg5MCwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfTEdfUEFMX05FV19UQVBDXSA9IHsgLyogTEdJTk5PVEVLIFBBTCAqLwotCQkubmFtZSAgID0gIkxHIFBBTCAobmV3ZXIgVEFQQyBzZXJpZXMpIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCi0JCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KLQkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRk0xMjE2TUUgTUszKSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE1OC4wMCAvKk1IeiovLCAweDAxLCB9LAotCQkJeyAxNiAqIDQ0Mi4wMCAvKk1IeiovLCAweDAyLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9MR19OVFNDX05FV19UQVBDXSA9IHsgLyogTEdJTk5PVEVLIE5UU0MgKi8KLQkJLm5hbWUgICA9ICJMRyBOVFNDIChuZXdlciBUQVBDIHNlcmllcykiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNzAuMDAgLypNSHoqLywgMHgwMSwgfSwKLQkJCXsgMTYgKiA0NTAuMDAgLypNSHoqLywgMHgwMiwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQotCS8qIDQwLTQ5ICovCi0JW1RVTkVSX0hJVEFDSElfTlRTQ10gPSB7IC8qIEhJVEFDSEkgTlRTQyAqLwotCQkubmFtZSAgID0gIkhJVEFDSEkgVjctSjE4MEFUIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCi0JCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX1BISUxJUFNfUEFMX01LXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KLQkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTF9NSyAoRkkxMjE2IE1LKSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE0MC4yNSAvKk1IeiovLCAweDAxLCB9LAotCQkJeyAxNiAqIDQ2My4yNSAvKk1IeiovLCAweGMyLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweGNmLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9QSElMSVBTX0FUU0NdID0geyAvKiBQaGlsaXBzIEFUU0MgKi8KLQkJLm5hbWUgICA9ICJQaGlsaXBzIDEyMzZEIEFUU0MvTlRTQyBkdWFsIGluIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTU3LjI1IC8qTUh6Ki8sIDB4YTAsIH0sCi0JCQl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4OTAsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX1BISUxJUFNfRk0xMjM2X01LM10gPSB7IC8qIFBoaWxpcHMgTlRTQyAqLwotCQkubmFtZSAgID0gIlBoaWxpcHMgTlRTQyBNSzMgKEZNMTIzNk1LMyBvciBGTTEyMzYvRikiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHgwMSwgfSwKLQkJCXsgMTYgKiA0NDIuMDAgLypNSHoqLywgMHgwMiwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfUEhJTElQU180SU4xXSA9IHsgLyogUGhpbGlwcyBOVFNDICovCi0JCS5uYW1lICAgPSAiUGhpbGlwcyA0IGluIDEgKEFUSSBUViBXb25kZXIgUHJvL0NvbmV4YW50KSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDAxLCB9LAotCQkJeyAxNiAqIDQ0Mi4wMCAvKk1IeiovLCAweDAyLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9NSUNST1RVTkVfNDA0OUZNNV0gPSB7IC8qIE1pY3JvdHVuZSBQQUwgKi8KLQkJLm5hbWUgICA9ICJNaWNyb3R1bmUgNDA0OSBGTTUiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNDEuMDAgLypNSHoqLywgMHhhMCwgfSwKLQkJCXsgMTYgKiA0NjQuMDAgLypNSHoqLywgMHg5MCwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfUEFOQVNPTklDX1ZQMjddID0geyAvKiBQYW5hc29uaWMgTlRTQyAqLwotCQkubmFtZSAgID0gIlBhbmFzb25pYyBWUDI3cy9FTkdFNDMyNEQiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHgwMSwgfSwKLQkJCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHgwMiwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4Y2UsCi0JfSwKLQlbVFVORVJfTEdfTlRTQ19UQVBFXSA9IHsgLyogTEdJTk5PVEVLIE5UU0MgKi8KLQkJLm5hbWUgICA9ICJMRyBOVFNDIChUQVBFIHNlcmllcykiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHgwMSwgfSwKLQkJCXsgMTYgKiA0NDIuMDAgLypNSHoqLywgMHgwMiwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfVE5GXzg4MzFCR0ZGXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KLQkJLm5hbWUgICA9ICJUZW5uYSBUTkYgODgzMSBCR0ZGKSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE2MS4yNSAvKk1IeiovLCAweGEwLCB9LAotCQkJeyAxNiAqIDQ2My4yNSAvKk1IeiovLCAweDkwLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9NSUNST1RVTkVfNDA0MkZJNV0gPSB7IC8qIE1pY3JvdHVuZSBOVFNDICovCi0JCS5uYW1lICAgPSAiTWljcm90dW5lIDQwNDIgRkk1IEFUU0MvTlRTQyBkdWFsIGluIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTYyLjAwIC8qTUh6Ki8sIDB4YTIsIH0sCi0JCQl7IDE2ICogNDU3LjAwIC8qTUh6Ki8sIDB4OTQsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzEsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0KLQkvKiA1MC01OSAqLwotCVtUVU5FUl9UQ0xfMjAwMk5dID0geyAvKiBUQ0wgTlRTQyAqLwotCQkubmFtZSAgID0gIlRDTCAyMDAyTiIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE3Mi4wMCAvKk1IeiovLCAweDAxLCB9LAotCQkJeyAxNiAqIDQ0OC4wMCAvKk1IeiovLCAweDAyLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA4LCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9QSElMSVBTX0ZNMTI1Nl9JSDNdID0geyAvKiBQaGlsaXBzIFBBTCAqLwotCQkubmFtZSAgID0gIlBoaWxpcHMgUEFML1NFQ0FNX0QgKEZNIDEyNTYgSS1IMykiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHgwMSwgfSwKLQkJCXsgMTYgKiA0NDIuMDAgLypNSHoqLywgMHgwMiwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfVEhPTVNPTl9EVFQ3NjEwXSA9IHsgLyogVEhPTVNPTiBBVFNDICovCi0JCS5uYW1lICAgPSAiVGhvbXNvbiBEVFQgNzYxMCAoQVRTQy9OVFNDKSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweDM5LCB9LAotCQkJeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDNhLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDNjLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9QSElMSVBTX0ZRMTI4Nl0gPSB7IC8qIFBoaWxpcHMgTlRTQyAqLwotCQkubmFtZSAgID0gIlBoaWxpcHMgRlExMjg2IiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4NDEsIH0sCi0JCQl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4NDIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX1BISUxJUFNfVERBODI5MF0gPSB7IC8qIFBoaWxpcHMgUEFMfE5UU0MgKi8KLQkJLm5hbWUgICA9ICJ0ZGE4MjkwKzc1IiwKLQkgIC8qIHNlZSB0ZGE4MjkwLmMgZm9yIGRldGFpbHMgKi8gfSwKLQlbVFVORVJfVENMXzIwMDJNQl0gPSB7IC8qIFRDTCBQQUwgKi8KLQkJLm5hbWUgICA9ICJUQ0wgMjAwMk1CIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCi0JCQl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweGNlLAotCX0sCi0JW1RVTkVSX1BISUxJUFNfRlExMjE2QU1FX01LNF0gPSB7IC8qIFBoaWxpcHMgUEFMICovCi0JCS5uYW1lICAgPSAiUGhpbGlwcyBQQUwvU0VDQU0gbXVsdGkgKEZRMTIxNkFNRSBNSzQpIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCi0JCQl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweGNlLAotCX0sCi0JW1RVTkVSX1BISUxJUFNfRlExMjM2QV9NSzRdID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KLQkJLm5hbWUgICA9ICJQaGlsaXBzIEZRMTIzNkEgTUs0IiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCi0JCQl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX1lNRUNfVFZGXzg1MzFNRl0gPSB7IC8qIFBoaWxpcHMgTlRTQyAqLwotCQkubmFtZSAgID0gIlltZWMgVFZpc2lvbiBUVkYtODUzMU1GLzg4MzFNRi84NzMxTUYiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHhhMCwgfSwKLQkJCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg5MCwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQlbVFVORVJfWU1FQ19UVkZfNTUzM01GXSA9IHsgLyogUGhpbGlwcyBOVFNDICovCi0JCS5uYW1lICAgPSAiWW1lYyBUVmlzaW9uIFRWRi01NTMzTUYiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHgwMSwgfSwKLQkJCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHgwMiwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4OGUsCi0JfSwKLQotCS8qIDYwLTY5ICovCi0JW1RVTkVSX1RIT01TT05fRFRUNzYxWF0gPSB7IC8qIFRIT01TT04gQVRTQyAqLwotCQkvKiBEVFQgNzYxMSA3NjExQSA3NjEyIDc2MTMgNzYxM0EgNzYxNCA3NjE1IDc2MTVBICovCi0JCS5uYW1lICAgPSAiVGhvbXNvbiBEVFQgNzYxWCAoQVRTQy9OVFNDKSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE0NS4yNSAvKk1IeiovLCAweDM5LCB9LAotCQkJeyAxNiAqIDQxNS4yNSAvKk1IeiovLCAweDNhLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDNjLCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9URU5BXzk1MzNfREldID0geyAvKiBQaGlsaXBzIFBBTCAqLwotCQkubmFtZSAgID0gIlRlbmEgVE5GOTUzMy1EL0lGL1RORjk1MzMtQi9ERiIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDE2MC4yNSAvKk1IeiovLCAweDAxLCB9LAotCQkJeyAxNiAqIDQ2NC4yNSAvKk1IeiovLCAweDAyLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9URUE1NzY3XSA9IHsgLyogUGhpbGlwcyBSQURJTyAqLwotCQkubmFtZSAgID0gIlBoaWxpcHMgVEVBNTc2N0hOIEZNIFJhZGlvIiwKLQkgIC8qIHNlZSB0ZWE1NzY3LmMgZm9yIGRldGFpbHMgKi99LAotCVtUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzNdID0geyAvKiBQaGlsaXBzIFBBTCAqLwotCQkubmFtZSAgID0gIlBoaWxpcHMgRk1EMTIxNk1FIE1LMyBIeWJyaWQgVHVuZXIiLAotCQkuY291bnQgID0gMywKLQkJLnJhbmdlcyA9IHsKLQkJCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHg1MSwgfSwKLQkJCXsgMTYgKiA0NDIuMDAgLypNSHoqLywgMHg1MiwgfSwKLQkJCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg1NCwgfSwKLQkJfSwKLQkJLmNvbmZpZyA9IDB4ODYsCi0JfSwKLQlbVFVORVJfTEdfVERWU19IMDYyRl0gPSB7IC8qIExHSU5OT1RFSyBBVFNDICovCi0JCS5uYW1lICAgPSAiTEcgVERWUy1IMDYyRi9UVUE2MDM0IiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4MDEgfSwKLQkJCXsgMTYgKiA0NTUuMDAgLypNSHoqLywgMHgwMiB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0IH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX1lNRUNfVFZGNjZUNV9CX0RGRl0gPSB7IC8qIFBoaWxpcHMgUEFMICovCi0JCS5uYW1lICAgPSAiWW1lYyBUVkY2NlQ1LUIvREZGIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTYwLjI1IC8qTUh6Ki8sIDB4MDEsIH0sCi0JCQl7IDE2ICogNDY0LjI1IC8qTUh6Ki8sIDB4MDIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi0JW1RVTkVSX0xHX05UU0NfVEFMTl9NSU5JXSA9IHsgLyogTEdJTk5PVEVLIE5UU0MgKi8KLQkJLm5hbWUgICA9ICJMRyBOVFNDIChUQUxOIG1pbmkgc2VyaWVzKSIsCi0JCS5jb3VudCAgPSAzLAotCQkucmFuZ2VzID0gewotCQkJeyAxNiAqIDEzNy4yNSAvKk1IeiovLCAweDAxLCB9LAotCQkJeyAxNiAqIDM3My4yNSAvKk1IeiovLCAweDAyLCB9LAotCQkJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA4LCB9LAotCQl9LAotCQkuY29uZmlnID0gMHg4ZSwKLQl9LAotCVtUVU5FUl9QSElMSVBTX1REMTMxNl0gPSB7IC8qIFBoaWxpcHMgUEFMICovCi0JCS5uYW1lICAgPSAiUGhpbGlwcyBURDEzMTYgSHlicmlkIFR1bmVyIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4YTEsIH0sCi0JCQl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4YTIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4YTQsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweGM4LAotCX0sCi0JW1RVTkVSX1BISUxJUFNfVFVWMTIzNkRdID0geyAvKiBQaGlsaXBzIEFUU0MgKi8KLQkJLm5hbWUgICA9ICJQaGlsaXBzIFRVVjEyMzZEIEFUU0MvTlRTQyBkdWFsIGluIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTU3LjI1IC8qTUh6Ki8sIDB4MDEsIH0sCi0JCQl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4MDIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweGNlLAotCX0sCi0JW1RVTkVSX1RORl81MzM1TUZdID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KLQkJLm5hbWUgICA9ICJUZW5hIFRORiA1MzM1IE1GIiwKLQkJLmNvdW50ICA9IDMsCi0JCS5yYW5nZXMgPSB7Ci0JCQl7IDE2ICogMTU3LjI1IC8qTUh6Ki8sIDB4MDEsIH0sCi0JCQl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4MDIsIH0sCi0JCQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCi0JCX0sCi0JCS5jb25maWcgPSAweDhlLAotCX0sCi19OwotCi11bnNpZ25lZCBjb25zdCBpbnQgdHVuZXJfY291bnQgPSBBUlJBWV9TSVpFKHR1bmVycyk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtODQyLDE2ICsxMzYsMjMgQEAKIAl1OCBjb25maWcsIHR1bmVyYWRkcjsKIAl1MTYgZGl2OwogCXN0cnVjdCB0dW5lcnR5cGUgKnR1bjsKLQl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls0XTsKLQlpbnQgcmMsIElGUENvZmYsIGk7CisJdTggYnVmZmVyWzRdOworCWludCByYywgSUZQQ29mZiwgaSwgajsKIAogCXR1biA9ICZ0dW5lcnNbdC0+dHlwZV07Ci0JZm9yIChpID0gMDsgaSA8IHR1bi0+Y291bnQ7IGkrKykgewotCQlpZiAoZnJlcSA+IHR1bi0+cmFuZ2VzW2ldLnRocmVzaCkKKwlqID0gVFVORVJfUEFSQU1fQU5BTE9HOworCisJZm9yIChpID0gMDsgaSA8IHR1bi0+cGFyYW1zW2pdLmNvdW50OyBpKyspIHsKKwkJaWYgKGZyZXEgPiB0dW4tPnBhcmFtc1tqXS5yYW5nZXNbaV0ubGltaXQpCiAJCQljb250aW51ZTsKIAkJYnJlYWs7CiAJfQotCWNvbmZpZyA9IHR1bi0+cmFuZ2VzW2ldLmNiOworCWlmIChpID09IHR1bi0+cGFyYW1zW2pdLmNvdW50KSB7CisJCXR1bmVyX2RiZygiVFYgZnJlcXVlbmN5IG91dCBvZiByYW5nZSAoJWQgPiAlZCkiLAorCQkJCWZyZXEsIHR1bi0+cGFyYW1zW2pdLnJhbmdlc1tpIC0gMV0ubGltaXQpOworCQlmcmVxID0gdHVuLT5wYXJhbXNbal0ucmFuZ2VzWy0taV0ubGltaXQ7CisJfQorCWNvbmZpZyA9IHR1bi0+cGFyYW1zW2pdLnJhbmdlc1tpXS5jYjsKIAkvKiAgaSA9PSAwIC0+IFZIRl9MTyAgKi8KIAkvKiAgaSA9PSAxIC0+IFZIRl9ISSAgKi8KIAkvKiAgaSA9PSAyIC0+IFVIRiAgICAgKi8KQEAgLTkxNCw3ICsyMTUsNyBAQAogCiAJY2FzZSBUVU5FUl9NSUNST1RVTkVfNDA0MkZJNToKIAkJLyogU2V0IHRoZSBjaGFyZ2UgcHVtcCBmb3IgZmFzdCB0dW5pbmcgKi8KLQkJdHVuLT5jb25maWcgfD0gVFVORVJfQ0hBUkdFX1BVTVA7CisJCXR1bi0+cGFyYW1zW2pdLmNvbmZpZyB8PSBUVU5FUl9DSEFSR0VfUFVNUDsKIAkJYnJlYWs7CiAKIAljYXNlIFRVTkVSX1BISUxJUFNfVFVWMTIzNkQ6CkBAIC05NDMsMjAgKzI0NCw2IEBACiAJCWJyZWFrOwogCX0KIAotCS8qCi0JICogUGhpbGlwcyBGSTEyMTZNSzIgcmVtYXJrIGZyb20gc3BlY2lmaWNhdGlvbiA6Ci0JICogZm9yIGNoYW5uZWwgc2VsZWN0aW9uIGludm9sdmluZyBiYW5kIHN3aXRjaGluZywgYW5kIHRvIGVuc3VyZQotCSAqIHNtb290aCB0dW5pbmcgdG8gdGhlIGRlc2lyZWQgY2hhbm5lbCB3aXRob3V0IGNhdXNpbmcKLQkgKiB1bm5lY2Vzc2FyeSBjaGFyZ2UgcHVtcCBhY3Rpb24sIGl0IGlzIHJlY29tbWVuZGVkIHRvIGNvbnNpZGVyCi0JICogdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3YW50ZWQgY2hhbm5lbCBmcmVxdWVuY3kgYW5kIHRoZQotCSAqIGN1cnJlbnQgY2hhbm5lbCBmcmVxdWVuY3kuICBVbm5lY2Vzc2FyeSBjaGFyZ2UgcHVtcCBhY3Rpb24KLQkgKiB3aWxsIHJlc3VsdCBpbiB2ZXJ5IGxvdyB0dW5pbmcgdm9sdGFnZSB3aGljaCBtYXkgZHJpdmUgdGhlCi0JICogb3NjaWxsYXRvciB0byBleHRyZW1lIGNvbmRpdGlvbnMuCi0JICoKLQkgKiBQcm9nZm91OiBzcGVjaWZpY2F0aW9uIHNheXMgdG8gc2VuZCBjb25maWcgZGF0YSBiZWZvcmUKLQkgKiBmcmVxdWVuY3kgaW4gY2FzZSAod2FudGVkIGZyZXF1ZW5jeSA8IGN1cnJlbnQgZnJlcXVlbmN5KS4KLQkgKi8KLQogCS8qIElGUENvZmYgPSBWaWRlbyBJbnRlcm1lZGlhdGUgRnJlcXVlbmN5IC0gVmlmOgogCQk5NDAgID0xNio1OC43NSAgTlRTQy9KIChKYXBhbikKIAkJNzMyICA9MTYqNDUuNzUgIE0vTiBTVEQKQEAgLTk4OCwxNyArMjc1LDE4IEBACiAJCQkJCW9mZnNldCAvIDE2LCBvZmZzZXQgJSAxNiAqIDEwMCAvIDE2LAogCQkJCQlkaXYpOwogCi0JaWYgKHQtPnR5cGUgPT0gVFVORVJfUEhJTElQU19TRUNBTSAmJiBmcmVxIDwgdC0+ZnJlcSkgewotCQlidWZmZXJbMF0gPSB0dW4tPmNvbmZpZzsKKwlpZiAodHVuZXJzW3QtPnR5cGVdLnBhcmFtcy0+Y2JfZmlyc3RfaWZfbG93ZXJfZnJlcSAmJiBkaXYgPCB0LT5sYXN0X2RpdikgeworCQlidWZmZXJbMF0gPSB0dW4tPnBhcmFtc1tqXS5jb25maWc7CiAJCWJ1ZmZlclsxXSA9IGNvbmZpZzsKIAkJYnVmZmVyWzJdID0gKGRpdj4+OCkgJiAweDdmOwogCQlidWZmZXJbM10gPSBkaXYgICAgICAmIDB4ZmY7CiAJfSBlbHNlIHsKIAkJYnVmZmVyWzBdID0gKGRpdj4+OCkgJiAweDdmOwogCQlidWZmZXJbMV0gPSBkaXYgICAgICAmIDB4ZmY7Ci0JCWJ1ZmZlclsyXSA9IHR1bi0+Y29uZmlnOworCQlidWZmZXJbMl0gPSB0dW4tPnBhcmFtc1tqXS5jb25maWc7CiAJCWJ1ZmZlclszXSA9IGNvbmZpZzsKIAl9CisJdC0+bGFzdF9kaXYgPSBkaXY7CiAJdHVuZXJfZGJnKCJ0diAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnhcbiIsCiAJCSAgYnVmZmVyWzBdLGJ1ZmZlclsxXSxidWZmZXJbMl0sYnVmZmVyWzNdKTsKIApAQCAtMTAyNCwxMCArMzEyLDEwIEBACiAJCX0KIAogCQkvKiBTZXQgdGhlIGNoYXJnZSBwdW1wIGZvciBvcHRpbWl6ZWQgcGhhc2Ugbm9pc2UgZmlndXJlICovCi0JCXR1bi0+Y29uZmlnICY9IH5UVU5FUl9DSEFSR0VfUFVNUDsKKwkJdHVuLT5wYXJhbXNbal0uY29uZmlnICY9IH5UVU5FUl9DSEFSR0VfUFVNUDsKIAkJYnVmZmVyWzBdID0gKGRpdj4+OCkgJiAweDdmOwogCQlidWZmZXJbMV0gPSBkaXYgICAgICAmIDB4ZmY7Ci0JCWJ1ZmZlclsyXSA9IHR1bi0+Y29uZmlnOworCQlidWZmZXJbMl0gPSB0dW4tPnBhcmFtc1tqXS5jb25maWc7CiAJCWJ1ZmZlclszXSA9IGNvbmZpZzsKIAkJdHVuZXJfZGJnKCJ0diAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnhcbiIsCiAJCSAgICAgICBidWZmZXJbMF0sYnVmZmVyWzFdLGJ1ZmZlclsyXSxidWZmZXJbM10pOwpAQCAtMTA0MSwxMyArMzI5LDE1IEBACiB7CiAJc3RydWN0IHR1bmVydHlwZSAqdHVuOwogCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls0XTsKLQl1bnNpZ25lZCBkaXY7Ci0JaW50IHJjOworCXU4IGJ1ZmZlcls0XTsKKwl1MTYgZGl2OworCWludCByYywgajsKIAogCXR1biA9ICZ0dW5lcnNbdC0+dHlwZV07CisJaiA9IFRVTkVSX1BBUkFNX0FOQUxPRzsKKwogCWRpdiA9ICgyMCAqIGZyZXEgLyAxNjAwMCkgKyAoaW50KSgyMCoxMC43KTsgLyogSUYgMTAuNyBNSHogKi8KLQlidWZmZXJbMl0gPSAodHVuLT5jb25maWcgJiB+VFVORVJfUkFUSU9fTUFTSykgfCBUVU5FUl9SQVRJT19TRUxFQ1RfNTA7IC8qIDUwIGtIeiBzdGVwICovCisJYnVmZmVyWzJdID0gKHR1bi0+cGFyYW1zW2pdLmNvbmZpZyAmIH5UVU5FUl9SQVRJT19NQVNLKSB8IFRVTkVSX1JBVElPX1NFTEVDVF81MDsgLyogNTAga0h6IHN0ZXAgKi8KIAogCXN3aXRjaCAodC0+dHlwZSkgewogCWNhc2UgVFVORVJfVEVOQV85NTMzX0RJOgpAQCAtMTA3Niw5ICszNjYsMTkgQEAKIAl9CiAJYnVmZmVyWzBdID0gKGRpdj4+OCkgJiAweDdmOwogCWJ1ZmZlclsxXSA9IGRpdiAgICAgICYgMHhmZjsKKwlpZiAodHVuZXJzW3QtPnR5cGVdLnBhcmFtcy0+Y2JfZmlyc3RfaWZfbG93ZXJfZnJlcSAmJiBkaXYgPCB0LT5sYXN0X2RpdikgeworCQlidWZmZXJbMF0gPSBidWZmZXJbMl07CisJCWJ1ZmZlclsxXSA9IGJ1ZmZlclszXTsKKwkJYnVmZmVyWzJdID0gKGRpdj4+OCkgJiAweDdmOworCQlidWZmZXJbM10gPSBkaXYgICAgICAmIDB4ZmY7CisJfSBlbHNlIHsKKwkJYnVmZmVyWzBdID0gKGRpdj4+OCkgJiAweDdmOworCQlidWZmZXJbMV0gPSBkaXYgICAgICAmIDB4ZmY7CisJfQogCiAJdHVuZXJfZGJnKCJyYWRpbyAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnhcbiIsCiAJICAgICAgIGJ1ZmZlclswXSxidWZmZXJbMV0sYnVmZmVyWzJdLGJ1ZmZlclszXSk7CisJdC0+bGFzdF9kaXYgPSBkaXY7CiAKIAlpZiAoNCAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYyxidWZmZXIsNCkpKQogCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDQpXG4iLHJjKTsKQEAgLTEwOTIsMTAgKzM5MiwxMCBAQAogCQkgICB0LT50eXBlLCB0dW5lcnNbdC0+dHlwZV0ubmFtZSk7CiAJc3RybGNweShjLT5uYW1lLCB0dW5lcnNbdC0+dHlwZV0ubmFtZSwgc2l6ZW9mKGMtPm5hbWUpKTsKIAotCXQtPnR2X2ZyZXEgICAgPSBkZWZhdWx0X3NldF90dl9mcmVxOwotCXQtPnJhZGlvX2ZyZXEgPSBkZWZhdWx0X3NldF9yYWRpb19mcmVxOworCXQtPnNldF90dl9mcmVxID0gZGVmYXVsdF9zZXRfdHZfZnJlcTsKKwl0LT5zZXRfcmFkaW9fZnJlcSA9IGRlZmF1bHRfc2V0X3JhZGlvX2ZyZXE7CiAJdC0+aGFzX3NpZ25hbCA9IHR1bmVyX3NpZ25hbDsKLQl0LT5pc19zdGVyZW8gID0gdHVuZXJfc3RlcmVvOworCXQtPmlzX3N0ZXJlbyA9IHR1bmVyX3N0ZXJlbzsKIAl0LT5zdGFuZGJ5ID0gTlVMTDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci10eXBlcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci10eXBlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZTc4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXR5cGVzLmMKQEAgLTAsMCArMSwxNDA2IEBACisvKgorICoKKyAqIGkyYyB0diB0dW5lciBjaGlwIGRldmljZSB0eXBlIGRhdGFiYXNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS90dW5lci10eXBlcy5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKglUaGUgZmxvYXRzIGluIHRoZSB0dW5lciBzdHJ1Y3QgYXJlIGNvbXB1dGVkIGF0IGNvbXBpbGUgdGltZQorICoJYnkgZ2NjIGFuZCBjYXN0IGJhY2sgdG8gaW50ZWdlcnMuIFRodXMgd2UgZG9uJ3QgdmlvbGF0ZSB0aGUKKyAqCSJubyBmbG9hdCBpbiBrZXJuZWwiIHJ1bGUuCisgKgorICoJQSB0dW5lcl9yYW5nZSBtYXkgYmUgcmVmZXJlbmNlZCBieSBtdWx0aXBsZSB0dW5lcl9wYXJhbXMgc3RydWN0cy4KKyAqCVRoZXJlIGFyZSBtYW55IGR1cGxpY2F0ZXMgaW4gaGVyZS4gUmV1c2luZyB0dW5lcl9yYW5nZSBzdHJ1Y3RzLAorICoJcmF0aGVyIHRoYW4gZGVmaW5pbmcgbmV3IG9uZXMgZm9yIGVhY2ggdHVuZXIsIHdpbGwgY3V0IGRvd24gb24KKyAqCW1lbW9yeSB1c2FnZSwgYW5kIGlzIHByZWZlcnJlZCB3aGVuIHBvc3NpYmxlLgorICoKKyAqCUVhY2ggdHVuZXJfcGFyYW1zIGFycmF5IG1heSBjb250YWluIG9uZSBvciBtb3JlIGVsZW1lbnRzLCBvbmUKKyAqCWZvciBlYWNoIHZpZGVvIHN0YW5kYXJkLgorICoKKyAqCUZJWE1FOiBTb21lIHR1bmVyX3JhbmdlIGRlZmluaXRpb25zIGFyZSBkdXBsaWNhdGVkLCBhbmQKKyAqCXNob3VsZCBiZSBlbGltaW5hdGVkLgorICoKKyAqCUZJWE1FOiB0dW5lcnR5cGUgc3RydWN0IGNvbnRhaW5zIGFuIGVsZW1lbnQsIGhhc190ZGE5ODh4LgorICoJV2UgbXVzdCBzZXQgdGhpcyBmb3IgYWxsIHR1bmVydHlwZXMgdGhhdCBjb250YWluIGEgdGRhOTg4eAorICoJY2hpcCwgYW5kIHRoZW4gd2UgY2FuIHJlbW92ZSB0aGlzIHNldHRpbmcgZnJvbSB0aGUgdmFyaW91cworICoJY2FyZCBzdHJ1Y3RzLgorICovCisKKy8qIDAtOSAqLworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RFTUlDX1BBTCAtIFRFTUlDIFBBTCAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90ZW1pY19wYWxfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE0MC4yNSAvKk1IeiovLCAweDAyLCB9LAorCXsgMTYgKiA0NjMuMjUgLypNSHoqLywgMHgwNCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDEsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90ZW1pY19wYWxfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl90ZW1pY19wYWxfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY19wYWxfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTX1BBTF9JIC0gUGhpbGlwcyBQQUxfSSAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzX3BhbF9pX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNDAuMjUgLypNSHoqLywgMHhhMCwgfSwKKwl7IDE2ICogNDYzLjI1IC8qTUh6Ki8sIDB4OTAsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGhpbGlwc19wYWxfaV9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKKwkJLnJhbmdlcyA9IHR1bmVyX3BoaWxpcHNfcGFsX2lfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX3BhbF9pX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19OVFNDIC0gUGhpbGlwcyBOVFNDIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3BoaWxpcHNfbnRzY19yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTU3LjI1IC8qTUh6Ki8sIDB4YTAsIH0sCisJeyAxNiAqIDQ1MS4yNSAvKk1IeiovLCAweDkwLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3BoaWxpcHNfbnRzY19wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX250c2NfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX250c2NfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJCS5jYl9maXJzdF9pZl9sb3dlcl9mcmVxID0gMSwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfU0VDQU0gLSBQaGlsaXBzIFNFQ0FNIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3BoaWxpcHNfc2VjYW1fcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE2OC4yNSAvKk1IeiovLCAweGE3LCB9LAorCXsgMTYgKiA0NDcuMjUgLypNSHoqLywgMHg5NywgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzcsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9waGlsaXBzX3NlY2FtX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfU0VDQU0sCisJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX3NlY2FtX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19zZWNhbV9yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4ZSwKKwkJLmNiX2ZpcnN0X2lmX2xvd2VyX2ZyZXEgPSAxLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19QQUwgLSBQaGlsaXBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzX3BhbF9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTY4LjI1IC8qTUh6Ki8sIDB4YTAsIH0sCisJeyAxNiAqIDQ0Ny4yNSAvKk1IeiovLCAweDkwLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3BoaWxpcHNfcGFsX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19wYWxfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX3BhbF9yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4ZSwKKwkJLmNiX2ZpcnN0X2lmX2xvd2VyX2ZyZXEgPSAxLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEVNSUNfTlRTQyAtIFRFTUlDIE5UU0MgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGVtaWNfbnRzY19yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTU3LjI1IC8qTUh6Ki8sIDB4MDIsIH0sCisJeyAxNiAqIDQ2My4yNSAvKk1IeiovLCAweDA0LCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwMSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3RlbWljX250c2NfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljX250c2NfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9URU1JQ19QQUxfSSAtIFRFTUlDIFBBTF9JIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3RlbWljX3BhbF9pX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNzAuMDAgLypNSHoqLywgMHgwMiwgfSwKKwl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4MDQsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDAxLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGVtaWNfcGFsX2lfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl90ZW1pY19wYWxfaV9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljX3BhbF9pX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEVNSUNfNDAzNkZZNV9OVFNDIC0gVEVNSUMgTlRTQyAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90ZW1pY180MDM2Znk1X250c2NfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweGEwLCB9LAorCXsgMTYgKiA0NjMuMjUgLypNSHoqLywgMHg5MCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90ZW1pY180MDM2Znk1X250c2NfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfNDAzNmZ5NV9udHNjX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfNDAzNmZ5NV9udHNjX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfQUxQU19UU0JIMV9OVFNDIC0gVEVNSUMgTlRTQyAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9hbHBzX3RzYl8xX3Jhbmdlc1tdID0geworCXsgMTYgKiAxMzcuMjUgLypNSHoqLywgMHgwMSwgfSwKKwl7IDE2ICogMzg1LjI1IC8qTUh6Ki8sIDB4MDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA4LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfYWxwc190c2JoMV9udHNjX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKKwkJLnJhbmdlcyA9IHR1bmVyX2FscHNfdHNiXzFfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9hbHBzX3RzYl8xX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAxMC0xOSAqLworLyogLS0tLS0tLS0tLS0tIFRVTkVSX0FMUFNfVFNCRTFfUEFMIC0gVEVNSUMgUEFMIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9hbHBzX3RzYl8xX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfYWxwc190c2JfMV9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2FscHNfdHNiXzFfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9BTFBTX1RTQkI1X1BBTF9JIC0gQWxwcyBQQUxfSSAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9hbHBzX3RzYl81X3BhbF9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTMzLjI1IC8qTUh6Ki8sIDB4MDEsIH0sCisJeyAxNiAqIDM1MS4yNSAvKk1IeiovLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX2FscHNfdHNiYjVfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl9hbHBzX3RzYl81X3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2FscHNfdHNiXzVfcGFsX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfQUxQU19UU0JFNV9QQUwgLSBBbHBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfYWxwc190c2JlNV9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKKwkJLnJhbmdlcyA9IHR1bmVyX2FscHNfdHNiXzVfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfYWxwc190c2JfNV9wYWxfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9BTFBTX1RTQkM1X1BBTCAtIEFscHMgUEFMIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9hbHBzX3RzYmM1X3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfYWxwc190c2JfNV9wYWxfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9hbHBzX3RzYl81X3BhbF9yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RFTUlDXzQwMDZGSDVfUEFMIC0gVEVNSUMgUEFMIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3RlbWljXzQwMDZmaDVfcGFsX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNzAuMDAgLypNSHoqLywgMHhhMCwgfSwKKwl7IDE2ICogNDUwLjAwIC8qTUh6Ki8sIDB4OTAsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGVtaWNfNDAwNmZoNV9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKKwkJLnJhbmdlcyA9IHR1bmVyX3RlbWljXzQwMDZmaDVfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfNDAwNmZoNV9wYWxfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9BTFBTX1RTSEM2X05UU0MgLSBBbHBzIE5UU0MgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfYWxwc190c2hjNl9udHNjX3Jhbmdlc1tdID0geworCXsgMTYgKiAxMzcuMjUgLypNSHoqLywgMHgxNCwgfSwKKwl7IDE2ICogMzg1LjI1IC8qTUh6Ki8sIDB4MTIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDExLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfYWxwc190c2hjNl9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl9hbHBzX3RzaGM2X250c2NfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9hbHBzX3RzaGM2X250c2NfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9URU1JQ19QQUxfREsgLSBURU1JQyBQQUwgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGVtaWNfcGFsX2RrX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjguMjUgLypNSHoqLywgMHhhMCwgfSwKKwl7IDE2ICogNDU2LjI1IC8qTUh6Ki8sIDB4OTAsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGVtaWNfcGFsX2RrX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfcGFsX2RrX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfcGFsX2RrX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19OVFNDX00gLSBQaGlsaXBzIE5UU0MgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfcGhpbGlwc19udHNjX21fcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweGEwLCB9LAorCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg5MCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9waGlsaXBzX250c2NfbV9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX250c2NfbV9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfbnRzY19tX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEVNSUNfNDA2NkZZNV9QQUxfSSAtIFRFTUlDIFBBTF9JIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3RlbWljXzQweDZmXzVfcGFsX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjkuMDAgLypNSHoqLywgMHhhMCwgfSwKKwl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4OTAsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGVtaWNfNDA2NmZ5NV9wYWxfaV9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKKwkJLnJhbmdlcyA9IHR1bmVyX3RlbWljXzQweDZmXzVfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfNDB4NmZfNV9wYWxfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9URU1JQ180MDA2Rk41X01VTFRJX1BBTCAtIFRFTUlDIFBBTCAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGVtaWNfNDAwNmZuNV9tdWx0aV9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKKwkJLnJhbmdlcyA9IHR1bmVyX3RlbWljXzQweDZmXzVfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfNDB4NmZfNV9wYWxfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIDIwLTI5ICovCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEVNSUNfNDAwOUZSNV9QQUwgLSBURU1JQyBQQUwgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGVtaWNfNDAwOWZfNV9wYWxfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE0MS4wMCAvKk1IeiovLCAweGEwLCB9LAorCXsgMTYgKiA0NjQuMDAgLypNSHoqLywgMHg5MCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90ZW1pY180MDA5Zl81X3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfNDAwOWZfNV9wYWxfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MDA5Zl81X3BhbF9yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RFTUlDXzQwMzlGUjVfTlRTQyAtIFRFTUlDIE5UU0MgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGVtaWNfNDAzOWZyNV9udHNjX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNTguMDAgLypNSHoqLywgMHhhMCwgfSwKKwl7IDE2ICogNDUzLjAwIC8qTUh6Ki8sIDB4OTAsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGVtaWNfNDAzOWZyNV9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl90ZW1pY180MDM5ZnI1X250c2NfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MDM5ZnI1X250c2NfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9URU1JQ180MDQ2Rk01IC0gVEVNSUMgUEFMIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3RlbWljXzQwNDZmbTVfcGFsX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjkuMDAgLypNSHoqLywgMHhhMCwgfSwKKwl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4OTAsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGVtaWNfNDA0NmZtNV9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKKwkJLnJhbmdlcyA9IHR1bmVyX3RlbWljXzQwNDZmbTVfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfNDA0NmZtNV9wYWxfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTX1BBTF9ESyAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX2xnX3BhbF9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4YTAsIH0sCisJeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweDkwLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3BoaWxpcHNfcGFsX2RrX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfbGdfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfcGFsX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19GUTEyMTZNRSAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9waGlsaXBzX2ZxMTIxNm1lX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfbGdfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfcGFsX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfTEdfUEFMX0lfRk0gLSBMR0lOTk9URUsgUEFMX0kgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX2xnX3BhbF9pX2ZtX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfbGdfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfcGFsX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfTEdfUEFMX0kgLSBMR0lOTk9URUsgUEFMX0kgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX2xnX3BhbF9pX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfbGdfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfcGFsX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfTEdfTlRTQ19GTSAtIExHSU5OT1RFSyBOVFNDIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX2xnX250c2NfZm1fcmFuZ2VzW10gPSB7CisJeyAxNiAqIDIxMC4wMCAvKk1IeiovLCAweGEwLCB9LAorCXsgMTYgKiA0OTcuMDAgLypNSHoqLywgMHg5MCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9sZ19udHNjX2ZtX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKKwkJLnJhbmdlcyA9IHR1bmVyX2xnX250c2NfZm1fcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9sZ19udHNjX2ZtX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfTEdfUEFMX0ZNIC0gTEdJTk5PVEVLIFBBTCAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfbGdfcGFsX2ZtX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfbGdfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfcGFsX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfTEdfUEFMIC0gTEdJTk5PVEVLIFBBTCAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfbGdfcGFsX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfbGdfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfcGFsX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAzMC0zOSAqLworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RFTUlDXzQwMDlGTjVfTVVMVElfUEFMX0ZNIC0gVEVNSUMgUEFMIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90ZW1pY180MDA5X2ZuNV9tdWx0aV9wYWxfZm1fcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl90ZW1pY180MDA5Zl81X3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljXzQwMDlmXzVfcGFsX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfU0hBUlBfMlU1SkY1NTQwX05UU0MgLSBTSEFSUCBOVFNDIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3NoYXJwXzJ1NWpmNTU0MF9udHNjX3Jhbmdlc1tdID0geworCXsgMTYgKiAxMzcuMjUgLypNSHoqLywgMHgwMSwgfSwKKwl7IDE2ICogMzE3LjI1IC8qTUh6Ki8sIDB4MDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA4LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfc2hhcnBfMnU1amY1NTQwX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKKwkJLnJhbmdlcyA9IHR1bmVyX3NoYXJwXzJ1NWpmNTU0MF9udHNjX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfc2hhcnBfMnU1amY1NTQwX250c2NfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9TYW1zdW5nX1BBTF9UQ1BNOTA5MVBEMjcgLSBTYW1zdW5nIFBBTCAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9zYW1zdW5nX3BhbF90Y3BtOTA5MXBkMjdfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE2OSAvKk1IeiovLCAweGEwLCB9LAorCXsgMTYgKiA0NjQgLypNSHoqLywgMHg5MCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAsIDB4MzAsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9zYW1zdW5nX3BhbF90Y3BtOTA5MXBkMjdfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl9zYW1zdW5nX3BhbF90Y3BtOTA5MXBkMjdfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9zYW1zdW5nX3BhbF90Y3BtOTA5MXBkMjdfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9URU1JQ180MTA2Rkg1IC0gVEVNSUMgUEFMIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90ZW1pY180MTA2Zmg1X3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfNDAwOWZfNV9wYWxfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MDA5Zl81X3BhbF9yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RFTUlDXzQwMTJGWTUgLSBURU1JQyBQQUwgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGVtaWNfNDAxMmZ5NV9wYWxfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE0MC4yNSAvKk1IeiovLCAweDAyLCB9LAorCXsgMTYgKiA0NjMuMjUgLypNSHoqLywgMHgwNCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDEsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90ZW1pY180MDEyZnk1X3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfNDAxMmZ5NV9wYWxfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MDEyZnk1X3BhbF9yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RFTUlDXzQxMzZGWTUgLSBURU1JQyBOVFNDIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3RlbWljXzQxMzZfZnk1X250c2NfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE1OC4wMCAvKk1IeiovLCAweGEwLCB9LAorCXsgMTYgKiA0NTMuMDAgLypNSHoqLywgMHg5MCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90ZW1pY180MTM2X2Z5NV9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl90ZW1pY180MTM2X2Z5NV9udHNjX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfNDEzNl9meTVfbnRzY19yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tIFRVTkVSX0xHX1BBTF9ORVdfVEFQQyAtIExHSU5OT1RFSyBQQUwgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfbGdfbmV3X3RhcGNfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE3MC4wMCAvKk1IeiovLCAweDAxLCB9LAorCXsgMTYgKiA0NTAuMDAgLypNSHoqLywgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9sZ19wYWxfbmV3X3RhcGNfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl9sZ19uZXdfdGFwY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX25ld190YXBjX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMgLSBQaGlsaXBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9mbTEyMTZtZV9tazNfcGFsX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNTguMDAgLypNSHoqLywgMHgwMSwgfSwKKwl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfZm0xMjE2bWVfbWszX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfZm0xMjE2bWVfbWszX3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2ZtMTIxNm1lX21rM19wYWxfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJCS5jYl9maXJzdF9pZl9sb3dlcl9mcmVxID0gMSwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tIFRVTkVSX0xHX05UU0NfTkVXX1RBUEMgLSBMR0lOTk9URUsgTlRTQyAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfbGdfbnRzY19uZXdfdGFwY19wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl9sZ19uZXdfdGFwY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX25ld190YXBjX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiA0MC00OSAqLworLyogLS0tLS0tLS0tLS0tIFRVTkVSX0hJVEFDSElfTlRTQyAtIEhJVEFDSEkgTlRTQyAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfaGl0YWNoaV9udHNjX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKKwkJLnJhbmdlcyA9IHR1bmVyX2xnX25ld190YXBjX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfbmV3X3RhcGNfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTX1BBTF9NSyAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3BoaWxpcHNfcGFsX21rX3BhbF9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTQwLjI1IC8qTUh6Ki8sIDB4MDEsIH0sCisJeyAxNiAqIDQ2My4yNSAvKk1IeiovLCAweGMyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHhjZiwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3BoaWxpcHNfcGFsX21rX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19wYWxfbWtfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19wYWxfbWtfcGFsX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19BVFNDIC0gUGhpbGlwcyBBVFNDIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3BoaWxpcHNfYXRzY19yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTU3LjI1IC8qTUh6Ki8sIDB4YTAsIH0sCisJeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDkwLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3BoaWxpcHNfYXRzY19wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX2F0c2NfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX2F0c2NfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMgLSBQaGlsaXBzIE5UU0MgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfZm0xMjM2X21rM19udHNjX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHgwMSwgfSwKKwl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfZm0xMjM2X21rM19wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl9mbTEyMzZfbWszX250c2NfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9mbTEyMzZfbWszX250c2NfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJCS5jYl9maXJzdF9pZl9sb3dlcl9mcmVxID0gMSwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfNElOMSAtIFBoaWxpcHMgTlRTQyAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzXzRpbjFfbnRzY19yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCisJeyAxNiAqIDQ0Mi4wMCAvKk1IeiovLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3BoaWxpcHNfNGluMV9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzXzRpbjFfbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfNGluMV9udHNjX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfTUlDUk9UVU5FXzQwNDlGTTUgLSBNaWNyb3R1bmUgUEFMIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9taWNyb3R1bmVfNDA0OV9mbTVfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl90ZW1pY180MDA5Zl81X3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljXzQwMDlmXzVfcGFsX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEFOQVNPTklDX1ZQMjcgLSBQYW5hc29uaWMgTlRTQyAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9wYW5hc29uaWNfdnAyN19udHNjX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHgwMSwgfSwKKwl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4MDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA4LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGFuYXNvbmljX3ZwMjdfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfcGFuYXNvbmljX3ZwMjdfbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BhbmFzb25pY192cDI3X250c2NfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4Y2UsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9MR19OVFNDX1RBUEUgLSBMR0lOTk9URUsgTlRTQyAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9sZ19udHNjX3RhcGVfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDAxLCB9LAorCXsgMTYgKiA0NDIuMDAgLypNSHoqLywgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9sZ19udHNjX3RhcGVfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfbGdfbnRzY190YXBlX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfbnRzY190YXBlX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfVE5GXzg4MzFCR0ZGIC0gUGhpbGlwcyBQQUwgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdG5mXzg4MzFiZ2ZmX3BhbF9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTYxLjI1IC8qTUh6Ki8sIDB4YTAsIH0sCisJeyAxNiAqIDQ2My4yNSAvKk1IeiovLCAweDkwLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3RuZl84ODMxYmdmZl9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKKwkJLnJhbmdlcyA9IHR1bmVyX3RuZl84ODMxYmdmZl9wYWxfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90bmZfODgzMWJnZmZfcGFsX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfTUlDUk9UVU5FXzQwNDJGSTUgLSBNaWNyb3R1bmUgTlRTQyAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9taWNyb3R1bmVfNDA0MmZpNV9udHNjX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjIuMDAgLypNSHoqLywgMHhhMiwgfSwKKwl7IDE2ICogNDU3LjAwIC8qTUh6Ki8sIDB4OTQsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMxLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfbWljcm90dW5lXzQwNDJmaTVfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfbWljcm90dW5lXzQwNDJmaTVfbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX21pY3JvdHVuZV80MDQyZmk1X250c2NfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIDUwLTU5ICovCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfVENMXzIwMDJOIC0gVENMIE5UU0MgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGNsXzIwMDJuX250c2NfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE3Mi4wMCAvKk1IeiovLCAweDAxLCB9LAorCXsgMTYgKiA0NDguMDAgLypNSHoqLywgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90Y2xfMjAwMm5fcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfdGNsXzIwMDJuX250c2NfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90Y2xfMjAwMm5fbnRzY19yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4ZSwKKwkJLmNiX2ZpcnN0X2lmX2xvd2VyX2ZyZXEgPSAxLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19GTTEyNTZfSUgzIC0gUGhpbGlwcyBQQUwgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfcGhpbGlwc19mbTEyNTZfaWgzX3BhbF9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCisJeyAxNiAqIDQ0Mi4wMCAvKk1IeiovLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3BoaWxpcHNfZm0xMjU2X2loM19wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKKwkJLnJhbmdlcyA9IHR1bmVyX3BoaWxpcHNfZm0xMjU2X2loM19wYWxfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX2ZtMTI1Nl9paDNfcGFsX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEhPTVNPTl9EVFQ3NjEwIC0gVEhPTVNPTiBBVFNDIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3Rob21zb25fZHR0NzYxMF9udHNjX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNTcuMjUgLypNSHoqLywgMHgzOSwgfSwKKwl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4M2EsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDNjLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGhvbXNvbl9kdHQ3NjEwX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKKwkJLnJhbmdlcyA9IHR1bmVyX3Rob21zb25fZHR0NzYxMF9udHNjX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGhvbXNvbl9kdHQ3NjEwX250c2NfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTX0ZRMTI4NiAtIFBoaWxpcHMgTlRTQyAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzX2ZxMTI4Nl9udHNjX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHg0MSwgfSwKKwl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4NDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGhpbGlwc19mcTEyODZfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19mcTEyODZfbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfZnExMjg2X250c2NfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9UQ0xfMjAwMk1CIC0gVENMIFBBTCAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90Y2xfMjAwMm1iX3BhbF9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCisJeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3RjbF8yMDAybWJfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl90Y2xfMjAwMm1iX3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RjbF8yMDAybWJfcGFsX3JhbmdlcyksCisJCS5jb25maWcgPSAweGNlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19GUTEyMTZBTUVfTUs0IC0gUGhpbGlwcyBQQUwgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfcGhpbGlwc19mcTEyXzZhX19fbWs0X3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHgwMSwgfSwKKwl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGhpbGlwc19mcTEyMTZhbWVfbWs0X3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19mcTEyXzZhX19fbWs0X3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mcTEyXzZhX19fbWs0X3JhbmdlcyksCisJCS5jb25maWcgPSAweGNlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19GUTEyMzZBX01LNCAtIFBoaWxpcHMgTlRTQyAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGhpbGlwc19mcTEyMzZhX21rNF9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX2ZxMTJfNmFfX19tazRfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX2ZxMTJfNmFfX19tazRfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9ZTUVDX1RWRl84NTMxTUYgLSBQaGlsaXBzIE5UU0MgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfeW1lY190dmZfODUzMW1mX250c2NfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweGEwLCB9LAorCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg5MCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl95bWVjX3R2Zl84NTMxbWZfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfeW1lY190dmZfODUzMW1mX250c2NfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl95bWVjX3R2Zl84NTMxbWZfbnRzY19yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1lNRUNfVFZGXzU1MzNNRiAtIFBoaWxpcHMgTlRTQyAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl95bWVjX3R2Zl81NTMzbWZfbnRzY19yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCisJeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3ltZWNfdHZmXzU1MzNtZl9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl95bWVjX3R2Zl81NTMzbWZfbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3ltZWNfdHZmXzU1MzNtZl9udHNjX3JhbmdlcyksCisJCS5jb25maWcgPSAweDhlLAorCX0sCit9OworCisvKiA2MC02OSAqLworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RIT01TT05fRFRUNzYxWCAtIFRIT01TT04gQVRTQyAtLS0tLS0tLS0tLS0gKi8KKy8qIERUVCA3NjExIDc2MTFBIDc2MTIgNzYxMyA3NjEzQSA3NjE0IDc2MTUgNzYxNUEgKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90aG9tc29uX2R0dDc2MXhfbnRzY19yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTQ1LjI1IC8qTUh6Ki8sIDB4MzksIH0sCisJeyAxNiAqIDQxNS4yNSAvKk1IeiovLCAweDNhLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzYywgfSwKK307CisKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGhvbXNvbl9kdHQ3NjF4X3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKKwkJLnJhbmdlcyA9IHR1bmVyX3Rob21zb25fZHR0NzYxeF9udHNjX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGhvbXNvbl9kdHQ3NjF4X250c2NfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9URU5BXzk1MzNfREkgLSBQaGlsaXBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90dW5lcl90ZW5hXzk1MzNfZGlfcGFsX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjAuMjUgLypNSHoqLywgMHgwMSwgfSwKKwl7IDE2ICogNDY0LjI1IC8qTUh6Ki8sIDB4MDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGVuYV85NTMzX2RpX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfdHVuZXJfdGVuYV85NTMzX2RpX3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3R1bmVyX3RlbmFfOTUzM19kaV9wYWxfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4OGUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMgLSBQaGlsaXBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZV9tazNfcGFsX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHg1MSwgfSwKKwl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4NTIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDU0LCB9LAorfTsKKworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90dW5lcl9waGlsaXBzX2ZtZDEyMTZtZV9tazNfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZV9tazNfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mbWQxMjE2bWVfbWszX3BhbF9yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4NiwKKwl9LAorfTsKKworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfTEdfVERWU19IMDYyRiAtIElORklORU9OIEFUU0MgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdHVhNjAzNF9udHNjX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHgwMSB9LAorCXsgMTYgKiA0NTUuMDAgLypNSHoqLywgMHgwMiB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCB9LAorfTsKKworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90dWE2MDM0X3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKKwkJLnJhbmdlcyA9IHR1bmVyX3R1YTYwMzRfbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3R1YTYwMzRfbnRzY19yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1lNRUNfVFZGNjZUNV9CX0RGRiAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3ltZWNfdHZmNjZ0NV9iX2RmZl9wYWxfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE2MC4yNSAvKk1IeiovLCAweDAxLCB9LAorCXsgMTYgKiA0NjQuMjUgLypNSHoqLywgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl95bWVjX3R2ZjY2dDVfYl9kZmZfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl95bWVjX3R2ZjY2dDVfYl9kZmZfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfeW1lY190dmY2NnQ1X2JfZGZmX3BhbF9yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tIFRVTkVSX0xHX05UU0NfVEFMTl9NSU5JIC0gTEdJTk5PVEVLIE5UU0MgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfbGdfdGFsbl9taW5pX250c2NfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDEzNy4yNSAvKk1IeiovLCAweDAxLCB9LAorCXsgMTYgKiAzNzMuMjUgLypNSHoqLywgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9sZ190YWxuX21pbmlfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfbGdfdGFsbl9taW5pX250c2NfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9sZ190YWxuX21pbmlfbnRzY19yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfVEQxMzE2IC0gUGhpbGlwcyBQQUwgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfcGhpbGlwc190ZDEzMTZfcGFsX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHhhMSwgfSwKKwl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4YTIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweGE0LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGhpbGlwc190ZDEzMTZfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX3RkMTMxNl9wYWxfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX3RkMTMxNl9wYWxfcmFuZ2VzKSwKKwkJLmNvbmZpZyA9IDB4YzgsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTX1RVVjEyMzZEIC0gUGhpbGlwcyBBVFNDIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3R1djEyMzZkX250c2NfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweDAxLCB9LAorCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3R1bmVyX3R1djEyMzZkX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKKwkJLnJhbmdlcyA9IHR1bmVyX3R1djEyMzZkX250c2NfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90dXYxMjM2ZF9udHNjX3JhbmdlcyksCisJCS5jb25maWcgPSAweGNlLAorCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfVE5GXzUzMzVNRiAtIFBoaWxpcHMgTlRTQyAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90bmZfNTMzNW1mX250c2NfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweDAxLCB9LAorCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90bmZfNTMzNW1mX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKKwkJLnJhbmdlcyA9IHR1bmVyX3RuZl81MzM1bWZfbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RuZl81MzM1bWZfbnRzY19yYW5nZXMpLAorCQkuY29uZmlnID0gMHg4ZSwKKwl9LAorfTsKKworLyogNzAtNzkgKi8KKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9TQU1TVU5HX1RDUE5fMjEyMVAzMEEgLSBTYW1zdW5nIE5UU0MgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfc2Ftc3VuZ190Y3BuXzIxMjFwMzBhX250c2NfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE3NS43NSAvKk1IeiovLCAweDAxLCB9LAorCXsgMTYgKiA0MTAuMjUgLypNSHoqLywgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9zYW1zdW5nX3RjcG5fMjEyMXAzMGFfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfc2Ftc3VuZ190Y3BuXzIxMjFwMzBhX250c2NfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9zYW1zdW5nX3RjcG5fMjEyMXAzMGFfbnRzY19yYW5nZXMpLAorCQkuY29uZmlnID0gMHhjZSwKKwl9LAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCB0dW5lcnR5cGUgdHVuZXJzW10gPSB7CisJLyogMC05ICovCisJW1RVTkVSX1RFTUlDX1BBTF0gPSB7IC8qIFRFTUlDIFBBTCAqLworCQkubmFtZSAgID0gIlRlbWljIFBBTCAoNDAwMiBGSDUpIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3RlbWljX3BhbF9wYXJhbXMsCisJfSwKKwlbVFVORVJfUEhJTElQU19QQUxfSV0gPSB7IC8qIFBoaWxpcHMgUEFMX0kgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTF9JIChGSTEyNDYgYW5kIGNvbXBhdGlibGVzKSIsCisJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX3BhbF9pX3BhcmFtcywKKwl9LAorCVtUVU5FUl9QSElMSVBTX05UU0NdID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIE5UU0MgKEZJMTIzNixGTTEyMzYgYW5kIGNvbXBhdGlibGVzKSIsCisJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX250c2NfcGFyYW1zLAorCX0sCisJW1RVTkVSX1BISUxJUFNfU0VDQU1dID0geyAvKiBQaGlsaXBzIFNFQ0FNICovCisJCS5uYW1lICAgPSAiUGhpbGlwcyAoU0VDQU0rUEFMX0JHKSAoRkkxMjE2TUYsIEZNMTIxNk1GLCBGUjEyMTZNRikiLAorCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc19zZWNhbV9wYXJhbXMsCisJfSwKKwlbVFVORVJfQUJTRU5UXSA9IHsgLyogVHVuZXIgQWJzZW50ICovCisJCS5uYW1lICAgPSAiTm9UdW5lciIsCisJfSwKKwlbVFVORVJfUEhJTElQU19QQUxdID0geyAvKiBQaGlsaXBzIFBBTCAqLworCQkubmFtZSAgID0gIlBoaWxpcHMgUEFMX0JHIChGSTEyMTYgYW5kIGNvbXBhdGlibGVzKSIsCisJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX3BhbF9wYXJhbXMsCisJfSwKKwlbVFVORVJfVEVNSUNfTlRTQ10gPSB7IC8qIFRFTUlDIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJUZW1pYyBOVFNDICg0MDMyIEZZNSkiLAorCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfbnRzY19wYXJhbXMsCisJfSwKKwlbVFVORVJfVEVNSUNfUEFMX0ldID0geyAvKiBURU1JQyBQQUxfSSAqLworCQkubmFtZSAgID0gIlRlbWljIFBBTF9JICg0MDYyIEZZNSkiLAorCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfcGFsX2lfcGFyYW1zLAorCX0sCisJW1RVTkVSX1RFTUlDXzQwMzZGWTVfTlRTQ10gPSB7IC8qIFRFTUlDIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJUZW1pYyBOVFNDICg0MDM2IEZZNSkiLAorCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfNDAzNmZ5NV9udHNjX3BhcmFtcywKKwl9LAorCVtUVU5FUl9BTFBTX1RTQkgxX05UU0NdID0geyAvKiBURU1JQyBOVFNDICovCisJCS5uYW1lICAgPSAiQWxwcyBIU0JIMSIsCisJCS5wYXJhbXMgPSB0dW5lcl9hbHBzX3RzYmgxX250c2NfcGFyYW1zLAorCX0sCisKKwkvKiAxMC0xOSAqLworCVtUVU5FUl9BTFBTX1RTQkUxX1BBTF0gPSB7IC8qIFRFTUlDIFBBTCAqLworCQkubmFtZSAgID0gIkFscHMgVFNCRTEiLAorCQkucGFyYW1zID0gdHVuZXJfYWxwc190c2JfMV9wYXJhbXMsCisJfSwKKwlbVFVORVJfQUxQU19UU0JCNV9QQUxfSV0gPSB7IC8qIEFscHMgUEFMX0kgKi8KKwkJLm5hbWUgICA9ICJBbHBzIFRTQkI1IiwKKwkJLnBhcmFtcyA9IHR1bmVyX2FscHNfdHNiYjVfcGFyYW1zLAorCX0sCisJW1RVTkVSX0FMUFNfVFNCRTVfUEFMXSA9IHsgLyogQWxwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJBbHBzIFRTQkU1IiwKKwkJLnBhcmFtcyA9IHR1bmVyX2FscHNfdHNiZTVfcGFyYW1zLAorCX0sCisJW1RVTkVSX0FMUFNfVFNCQzVfUEFMXSA9IHsgLyogQWxwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJBbHBzIFRTQkM1IiwKKwkJLnBhcmFtcyA9IHR1bmVyX2FscHNfdHNiYzVfcGFyYW1zLAorCX0sCisJW1RVTkVSX1RFTUlDXzQwMDZGSDVfUEFMXSA9IHsgLyogVEVNSUMgUEFMICovCisJCS5uYW1lICAgPSAiVGVtaWMgUEFMX0JHICg0MDA2Rkg1KSIsCisJCS5wYXJhbXMgPSB0dW5lcl90ZW1pY180MDA2Zmg1X3BhcmFtcywKKwl9LAorCVtUVU5FUl9BTFBTX1RTSEM2X05UU0NdID0geyAvKiBBbHBzIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJBbHBzIFRTQ0g2IiwKKwkJLnBhcmFtcyA9IHR1bmVyX2FscHNfdHNoYzZfcGFyYW1zLAorCX0sCisJW1RVTkVSX1RFTUlDX1BBTF9ES10gPSB7IC8qIFRFTUlDIFBBTCAqLworCQkubmFtZSAgID0gIlRlbWljIFBBTF9ESyAoNDAxNiBGWTUpIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3RlbWljX3BhbF9ka19wYXJhbXMsCisJfSwKKwlbVFVORVJfUEhJTElQU19OVFNDX01dID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIE5UU0NfTSAoTUsyKSIsCisJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX250c2NfbV9wYXJhbXMsCisJfSwKKwlbVFVORVJfVEVNSUNfNDA2NkZZNV9QQUxfSV0gPSB7IC8qIFRFTUlDIFBBTF9JICovCisJCS5uYW1lICAgPSAiVGVtaWMgUEFMX0kgKDQwNjYgRlk1KSIsCisJCS5wYXJhbXMgPSB0dW5lcl90ZW1pY180MDY2Znk1X3BhbF9pX3BhcmFtcywKKwl9LAorCVtUVU5FUl9URU1JQ180MDA2Rk41X01VTFRJX1BBTF0gPSB7IC8qIFRFTUlDIFBBTCAqLworCQkubmFtZSAgID0gIlRlbWljIFBBTCogYXV0byAoNDAwNiBGTjUpIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3RlbWljXzQwMDZmbjVfbXVsdGlfcGFyYW1zLAorCX0sCisKKwkvKiAyMC0yOSAqLworCVtUVU5FUl9URU1JQ180MDA5RlI1X1BBTF0gPSB7IC8qIFRFTUlDIFBBTCAqLworCQkubmFtZSAgID0gIlRlbWljIFBBTF9CRyAoNDAwOSBGUjUpIG9yIFBBTF9JICg0MDY5IEZSNSkiLAorCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfNDAwOWZfNV9wYXJhbXMsCisJfSwKKwlbVFVORVJfVEVNSUNfNDAzOUZSNV9OVFNDXSA9IHsgLyogVEVNSUMgTlRTQyAqLworCQkubmFtZSAgID0gIlRlbWljIE5UU0MgKDQwMzkgRlI1KSIsCisJCS5wYXJhbXMgPSB0dW5lcl90ZW1pY180MDM5ZnI1X3BhcmFtcywKKwl9LAorCVtUVU5FUl9URU1JQ180MDQ2Rk01XSA9IHsgLyogVEVNSUMgUEFMICovCisJCS5uYW1lICAgPSAiVGVtaWMgUEFML1NFQ0FNIG11bHRpICg0MDQ2IEZNNSkiLAorCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfNDA0NmZtNV9wYXJhbXMsCisJfSwKKwlbVFVORVJfUEhJTElQU19QQUxfREtdID0geyAvKiBQaGlsaXBzIFBBTCAqLworCQkubmFtZSAgID0gIlBoaWxpcHMgUEFMX0RLIChGSTEyNTYgYW5kIGNvbXBhdGlibGVzKSIsCisJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX3BhbF9ka19wYXJhbXMsCisJfSwKKwlbVFVORVJfUEhJTElQU19GUTEyMTZNRV0gPSB7IC8qIFBoaWxpcHMgUEFMICovCisJCS5uYW1lICAgPSAiUGhpbGlwcyBQQUwvU0VDQU0gbXVsdGkgKEZRMTIxNk1FKSIsCisJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX2ZxMTIxNm1lX3BhcmFtcywKKwl9LAorCVtUVU5FUl9MR19QQUxfSV9GTV0gPSB7IC8qIExHSU5OT1RFSyBQQUxfSSAqLworCQkubmFtZSAgID0gIkxHIFBBTF9JK0ZNIChUQVBDLUkwMDFEKSIsCisJCS5wYXJhbXMgPSB0dW5lcl9sZ19wYWxfaV9mbV9wYXJhbXMsCisJfSwKKwlbVFVORVJfTEdfUEFMX0ldID0geyAvKiBMR0lOTk9URUsgUEFMX0kgKi8KKwkJLm5hbWUgICA9ICJMRyBQQUxfSSAoVEFQQy1JNzAxRCkiLAorCQkucGFyYW1zID0gdHVuZXJfbGdfcGFsX2lfcGFyYW1zLAorCX0sCisJW1RVTkVSX0xHX05UU0NfRk1dID0geyAvKiBMR0lOTk9URUsgTlRTQyAqLworCQkubmFtZSAgID0gIkxHIE5UU0MrRk0gKFRQSThOU1IwMUYpIiwKKwkJLnBhcmFtcyA9IHR1bmVyX2xnX250c2NfZm1fcGFyYW1zLAorCX0sCisJW1RVTkVSX0xHX1BBTF9GTV0gPSB7IC8qIExHSU5OT1RFSyBQQUwgKi8KKwkJLm5hbWUgICA9ICJMRyBQQUxfQkcrRk0gKFRQSThQU0IwMUQpIiwKKwkJLnBhcmFtcyA9IHR1bmVyX2xnX3BhbF9mbV9wYXJhbXMsCisJfSwKKwlbVFVORVJfTEdfUEFMXSA9IHsgLyogTEdJTk5PVEVLIFBBTCAqLworCQkubmFtZSAgID0gIkxHIFBBTF9CRyAoVFBJOFBTQjExRCkiLAorCQkucGFyYW1zID0gdHVuZXJfbGdfcGFsX3BhcmFtcywKKwl9LAorCisJLyogMzAtMzkgKi8KKwlbVFVORVJfVEVNSUNfNDAwOUZONV9NVUxUSV9QQUxfRk1dID0geyAvKiBURU1JQyBQQUwgKi8KKwkJLm5hbWUgICA9ICJUZW1pYyBQQUwqIGF1dG8gKyBGTSAoNDAwOSBGTjUpIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3RlbWljXzQwMDlfZm41X211bHRpX3BhbF9mbV9wYXJhbXMsCisJfSwKKwlbVFVORVJfU0hBUlBfMlU1SkY1NTQwX05UU0NdID0geyAvKiBTSEFSUCBOVFNDICovCisJCS5uYW1lICAgPSAiU0hBUlAgTlRTQ19KUCAoMlU1SkY1NTQwKSIsCisJCS5wYXJhbXMgPSB0dW5lcl9zaGFycF8ydTVqZjU1NDBfcGFyYW1zLAorCX0sCisJW1RVTkVSX1NhbXN1bmdfUEFMX1RDUE05MDkxUEQyN10gPSB7IC8qIFNhbXN1bmcgUEFMICovCisJCS5uYW1lICAgPSAiU2Ftc3VuZyBQQUwgVENQTTkwOTFQRDI3IiwKKwkJLnBhcmFtcyA9IHR1bmVyX3NhbXN1bmdfcGFsX3RjcG05MDkxcGQyN19wYXJhbXMsCisJfSwKKwlbVFVORVJfTVQyMDMyXSA9IHsgLyogTWljcm90dW5lIFBBTHxOVFNDICovCisJCS5uYW1lICAgPSAiTVQyMHh4IHVuaXZlcnNhbCIsCisJCS8qIHNlZSBtdDIweHguYyBmb3IgZGV0YWlscyAqLyB9LAorCVtUVU5FUl9URU1JQ180MTA2Rkg1XSA9IHsgLyogVEVNSUMgUEFMICovCisJCS5uYW1lICAgPSAiVGVtaWMgUEFMX0JHICg0MTA2IEZINSkiLAorCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfNDEwNmZoNV9wYXJhbXMsCisJfSwKKwlbVFVORVJfVEVNSUNfNDAxMkZZNV0gPSB7IC8qIFRFTUlDIFBBTCAqLworCQkubmFtZSAgID0gIlRlbWljIFBBTF9ESy9TRUNBTV9MICg0MDEyIEZZNSkiLAorCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfNDAxMmZ5NV9wYXJhbXMsCisJfSwKKwlbVFVORVJfVEVNSUNfNDEzNkZZNV0gPSB7IC8qIFRFTUlDIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJUZW1pYyBOVFNDICg0MTM2IEZZNSkiLAorCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfNDEzNl9meTVfcGFyYW1zLAorCX0sCisJW1RVTkVSX0xHX1BBTF9ORVdfVEFQQ10gPSB7IC8qIExHSU5OT1RFSyBQQUwgKi8KKwkJLm5hbWUgICA9ICJMRyBQQUwgKG5ld2VyIFRBUEMgc2VyaWVzKSIsCisJCS5wYXJhbXMgPSB0dW5lcl9sZ19wYWxfbmV3X3RhcGNfcGFyYW1zLAorCX0sCisJW1RVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRk0xMjE2TUUgTUszKSIsCisJCS5wYXJhbXMgPSB0dW5lcl9mbTEyMTZtZV9tazNfcGFyYW1zLAorCX0sCisJW1RVTkVSX0xHX05UU0NfTkVXX1RBUENdID0geyAvKiBMR0lOTk9URUsgTlRTQyAqLworCQkubmFtZSAgID0gIkxHIE5UU0MgKG5ld2VyIFRBUEMgc2VyaWVzKSIsCisJCS5wYXJhbXMgPSB0dW5lcl9sZ19udHNjX25ld190YXBjX3BhcmFtcywKKwl9LAorCisJLyogNDAtNDkgKi8KKwlbVFVORVJfSElUQUNISV9OVFNDXSA9IHsgLyogSElUQUNISSBOVFNDICovCisJCS5uYW1lICAgPSAiSElUQUNISSBWNy1KMTgwQVQiLAorCQkucGFyYW1zID0gdHVuZXJfaGl0YWNoaV9udHNjX3BhcmFtcywKKwl9LAorCVtUVU5FUl9QSElMSVBTX1BBTF9NS10gPSB7IC8qIFBoaWxpcHMgUEFMICovCisJCS5uYW1lICAgPSAiUGhpbGlwcyBQQUxfTUsgKEZJMTIxNiBNSykiLAorCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc19wYWxfbWtfcGFyYW1zLAorCX0sCisJW1RVTkVSX1BISUxJUFNfQVRTQ10gPSB7IC8qIFBoaWxpcHMgQVRTQyAqLworCQkubmFtZSAgID0gIlBoaWxpcHMgMTIzNkQgQVRTQy9OVFNDIGR1YWwgaW4iLAorCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc19hdHNjX3BhcmFtcywKKwl9LAorCVtUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzNdID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIE5UU0MgTUszIChGTTEyMzZNSzMgb3IgRk0xMjM2L0YpIiwKKwkJLnBhcmFtcyA9IHR1bmVyX2ZtMTIzNl9tazNfcGFyYW1zLAorCX0sCisJW1RVTkVSX1BISUxJUFNfNElOMV0gPSB7IC8qIFBoaWxpcHMgTlRTQyAqLworCQkubmFtZSAgID0gIlBoaWxpcHMgNCBpbiAxIChBVEkgVFYgV29uZGVyIFByby9Db25leGFudCkiLAorCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc180aW4xX3BhcmFtcywKKwl9LAorCVtUVU5FUl9NSUNST1RVTkVfNDA0OUZNNV0gPSB7IC8qIE1pY3JvdHVuZSBQQUwgKi8KKwkJLm5hbWUgICA9ICJNaWNyb3R1bmUgNDA0OSBGTTUiLAorCQkucGFyYW1zID0gdHVuZXJfbWljcm90dW5lXzQwNDlfZm01X3BhcmFtcywKKwl9LAorCVtUVU5FUl9QQU5BU09OSUNfVlAyN10gPSB7IC8qIFBhbmFzb25pYyBOVFNDICovCisJCS5uYW1lICAgPSAiUGFuYXNvbmljIFZQMjdzL0VOR0U0MzI0RCIsCisJCS5wYXJhbXMgPSB0dW5lcl9wYW5hc29uaWNfdnAyN19wYXJhbXMsCisJfSwKKwlbVFVORVJfTEdfTlRTQ19UQVBFXSA9IHsgLyogTEdJTk5PVEVLIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJMRyBOVFNDIChUQVBFIHNlcmllcykiLAorCQkucGFyYW1zID0gdHVuZXJfbGdfbnRzY190YXBlX3BhcmFtcywKKwl9LAorCVtUVU5FUl9UTkZfODgzMUJHRkZdID0geyAvKiBQaGlsaXBzIFBBTCAqLworCQkubmFtZSAgID0gIlRlbm5hIFRORiA4ODMxIEJHRkYpIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3RuZl84ODMxYmdmZl9wYXJhbXMsCisJfSwKKwlbVFVORVJfTUlDUk9UVU5FXzQwNDJGSTVdID0geyAvKiBNaWNyb3R1bmUgTlRTQyAqLworCQkubmFtZSAgID0gIk1pY3JvdHVuZSA0MDQyIEZJNSBBVFNDL05UU0MgZHVhbCBpbiIsCisJCS5wYXJhbXMgPSB0dW5lcl9taWNyb3R1bmVfNDA0MmZpNV9wYXJhbXMsCisJfSwKKworCS8qIDUwLTU5ICovCisJW1RVTkVSX1RDTF8yMDAyTl0gPSB7IC8qIFRDTCBOVFNDICovCisJCS5uYW1lICAgPSAiVENMIDIwMDJOIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3RjbF8yMDAybl9wYXJhbXMsCisJfSwKKwlbVFVORVJfUEhJTElQU19GTTEyNTZfSUgzXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTC9TRUNBTV9EIChGTSAxMjU2IEktSDMpIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3BoaWxpcHNfZm0xMjU2X2loM19wYXJhbXMsCisJfSwKKwlbVFVORVJfVEhPTVNPTl9EVFQ3NjEwXSA9IHsgLyogVEhPTVNPTiBBVFNDICovCisJCS5uYW1lICAgPSAiVGhvbXNvbiBEVFQgNzYxMCAoQVRTQy9OVFNDKSIsCisJCS5wYXJhbXMgPSB0dW5lcl90aG9tc29uX2R0dDc2MTBfcGFyYW1zLAorCX0sCisJW1RVTkVSX1BISUxJUFNfRlExMjg2XSA9IHsgLyogUGhpbGlwcyBOVFNDICovCisJCS5uYW1lICAgPSAiUGhpbGlwcyBGUTEyODYiLAorCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc19mcTEyODZfcGFyYW1zLAorCX0sCisJW1RVTkVSX1BISUxJUFNfVERBODI5MF0gPSB7IC8qIFBoaWxpcHMgUEFMfE5UU0MgKi8KKwkJLm5hbWUgICA9ICJ0ZGE4MjkwKzc1IiwKKwkJLyogc2VlIHRkYTgyOTAuYyBmb3IgZGV0YWlscyAqLyB9LAorCVtUVU5FUl9UQ0xfMjAwMk1CXSA9IHsgLyogVENMIFBBTCAqLworCQkubmFtZSAgID0gIlRDTCAyMDAyTUIiLAorCQkucGFyYW1zID0gdHVuZXJfdGNsXzIwMDJtYl9wYXJhbXMsCisJfSwKKwlbVFVORVJfUEhJTElQU19GUTEyMTZBTUVfTUs0XSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRlExMjE2QU1FIE1LNCkiLAorCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc19mcTEyMTZhbWVfbWs0X3BhcmFtcywKKwl9LAorCVtUVU5FUl9QSElMSVBTX0ZRMTIzNkFfTUs0XSA9IHsgLyogUGhpbGlwcyBOVFNDICovCisJCS5uYW1lICAgPSAiUGhpbGlwcyBGUTEyMzZBIE1LNCIsCisJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX2ZxMTIzNmFfbWs0X3BhcmFtcywKKwl9LAorCVtUVU5FUl9ZTUVDX1RWRl84NTMxTUZdID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJZbWVjIFRWaXNpb24gVFZGLTg1MzFNRi84ODMxTUYvODczMU1GIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3ltZWNfdHZmXzg1MzFtZl9wYXJhbXMsCisJfSwKKwlbVFVORVJfWU1FQ19UVkZfNTUzM01GXSA9IHsgLyogUGhpbGlwcyBOVFNDICovCisJCS5uYW1lICAgPSAiWW1lYyBUVmlzaW9uIFRWRi01NTMzTUYiLAorCQkucGFyYW1zID0gdHVuZXJfeW1lY190dmZfNTUzM21mX3BhcmFtcywKKwl9LAorCisJLyogNjAtNjkgKi8KKwlbVFVORVJfVEhPTVNPTl9EVFQ3NjFYXSA9IHsgLyogVEhPTVNPTiBBVFNDICovCisJCS8qIERUVCA3NjExIDc2MTFBIDc2MTIgNzYxMyA3NjEzQSA3NjE0IDc2MTUgNzYxNUEgKi8KKwkJLm5hbWUgICA9ICJUaG9tc29uIERUVCA3NjFYIChBVFNDL05UU0MpIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3Rob21zb25fZHR0NzYxeF9wYXJhbXMsCisJfSwKKwlbVFVORVJfVEVOQV85NTMzX0RJXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJUZW5hIFRORjk1MzMtRC9JRi9UTkY5NTMzLUIvREYiLAorCQkucGFyYW1zID0gdHVuZXJfdGVuYV85NTMzX2RpX3BhcmFtcywKKwl9LAorCVtUVU5FUl9URUE1NzY3XSA9IHsgLyogUGhpbGlwcyBSQURJTyAqLworCQkubmFtZSAgID0gIlBoaWxpcHMgVEVBNTc2N0hOIEZNIFJhZGlvIiwKKwkJLyogc2VlIHRlYTU3NjcuYyBmb3IgZGV0YWlscyAqLworCX0sCisJW1RVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LM10gPSB7IC8qIFBoaWxpcHMgUEFMICovCisJCS5uYW1lICAgPSAiUGhpbGlwcyBGTUQxMjE2TUUgTUszIEh5YnJpZCBUdW5lciIsCisJCS5wYXJhbXMgPSB0dW5lcl90dW5lcl9waGlsaXBzX2ZtZDEyMTZtZV9tazNfcGFyYW1zLAorCX0sCisJW1RVTkVSX0xHX1REVlNfSDA2MkZdID0geyAvKiBMR0lOTk9URUsgQVRTQyAqLworCQkubmFtZSAgID0gIkxHIFREVlMtSDA2MkYvVFVBNjAzNCIsCisJCS5wYXJhbXMgPSB0dW5lcl90dWE2MDM0X3BhcmFtcywKKwl9LAorCVtUVU5FUl9ZTUVDX1RWRjY2VDVfQl9ERkZdID0geyAvKiBQaGlsaXBzIFBBTCAqLworCQkubmFtZSAgID0gIlltZWMgVFZGNjZUNS1CL0RGRiIsCisJCS5wYXJhbXMgPSB0dW5lcl95bWVjX3R2ZjY2dDVfYl9kZmZfcGFyYW1zLAorCX0sCisJW1RVTkVSX0xHX05UU0NfVEFMTl9NSU5JXSA9IHsgLyogTEdJTk5PVEVLIE5UU0MgKi8KKwkJLm5hbWUgICA9ICJMRyBOVFNDIChUQUxOIG1pbmkgc2VyaWVzKSIsCisJCS5wYXJhbXMgPSB0dW5lcl9sZ190YWxuX21pbmlfcGFyYW1zLAorCX0sCisJW1RVTkVSX1BISUxJUFNfVEQxMzE2XSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIFREMTMxNiBIeWJyaWQgVHVuZXIiLAorCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc190ZDEzMTZfcGFyYW1zLAorCX0sCisJW1RVTkVSX1BISUxJUFNfVFVWMTIzNkRdID0geyAvKiBQaGlsaXBzIEFUU0MgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIFRVVjEyMzZEIEFUU0MvTlRTQyBkdWFsIGluIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3R1bmVyX3R1djEyMzZkX3BhcmFtcywKKwl9LAorCVtUVU5FUl9UTkZfNTMzNU1GXSA9IHsgLyogUGhpbGlwcyBOVFNDICovCisJCS5uYW1lICAgPSAiVGVuYSBUTkYgNTMzNSBNRiIsCisJCS5wYXJhbXMgPSB0dW5lcl90bmZfNTMzNW1mX3BhcmFtcywKKwl9LAorCisJLyogNzAtNzkgKi8KKwlbVFVORVJfU0FNU1VOR19UQ1BOXzIxMjFQMzBBXSA9IHsgLyogU2Ftc3VuZyBOVFNDICovCisJCS5uYW1lICAgPSAiU2Ftc3VuZyBUQ1BOIDIxMjFQMzBBIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3NhbXN1bmdfdGNwbl8yMTIxcDMwYV9wYXJhbXMsCisJfSwKK307CisKK3Vuc2lnbmVkIGNvbnN0IGludCB0dW5lcl9jb3VudCA9IEFSUkFZX1NJWkUodHVuZXJzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwppbmRleCA1ZTcxYTM1Li41ODI1NTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCkBAIC0xOTAsNyArMTkwLDcgQEAKIAl7IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywgIlRDTCAyMDAyTUkgMyJ9LAogCXsgVFVORVJfVENMXzIwMDJOLCAgICAgIlRDTCAyMDAyTiA2QSJ9LAogCXsgVFVORVJfUEhJTElQU19GTTEyMzZfTUszLCAiUGhpbGlwcyBGUTEyMzYgTUszIn0sCi0JeyBUVU5FUl9BQlNFTlQsICAgICAgICAiU2Ftc3VuZyBUQ1BOIDIxMjFQMzBBIn0sCisJeyBUVU5FUl9TQU1TVU5HX1RDUE5fMjEyMVAzMEEsICJTYW1zdW5nIFRDUE4gMjEyMVAzMEEifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJTYW1zdW5nIFRDUEUgNDEyMVAzMEEifSwKIAl7IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLCAiVENMIE1GUEUwNSAyIn0sCiAJLyogOTAtOTkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKaW5kZXggOTA5NGZhOS4uZmFkOWVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKQEAgLTYzNCw3ICs2MzQsNyBAQAogCXVuc2lnbmVkIGNoYXIgdmFsdWVzWzI2XTsKIH07CiAKLXN0cnVjdCBpMmNfdmJpX3JhbV92YWx1ZSB2YmlfcmFtX2RlZmF1bHRbXSA9CitzdGF0aWMgc3RydWN0IGkyY192YmlfcmFtX3ZhbHVlIHZiaV9yYW1fZGVmYXVsdFtdID0KIHsKIAl7MHgwMTAsIC8qIFdTVCBTRUNBTSA2ICovCiAJCXsgMHhhYSwgMHhhYSwgMHhmZiwgMHhmZiAsIDB4ZTcsIDB4MmUsIDB4MjAsIDB4MjYsIDB4ZTYsIDB4YjQsIDB4MGUsIDB4MCwgMHgwLCAweDAsIDB4MTAsIDB4MCB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggNWRiZDdjMS4uY2QyYzQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtMzA2LDYgKzMwNiw3IEBACiAjZW5kaWYKIAlbX0lPQ19OUihBVURDX1NFVF9SQURJTyldICAgICAgICAgICAgICA9ICJBVURDX1NFVF9SQURJTyIsCiAJW19JT0NfTlIoQVVEQ19TRVRfSU5QVVQpXSAgICAgICAgICAgICAgPSAiQVVEQ19TRVRfSU5QVVQiLAorCVtfSU9DX05SKE1TUF9TRVRfTUFUUklYKV0gICAgICAgICAgICAgID0gIk1TUF9TRVRfTUFUUklYIiwKIAogCVtfSU9DX05SKFRVTkVSX1NFVF9UWVBFX0FERFIpXSAgICAgICAgID0gIlRVTkVSX1NFVF9UWVBFX0FERFIiLAogCVtfSU9DX05SKFRVTkVSX1NFVF9TVEFOREJZKV0gICAgICAgICAgID0gIlRVTkVSX1NFVF9TVEFOREJZIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYwppbmRleCBkNWJlMjU5Li4wNzg4ODBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KIApAQCAtODMsNyArODIsNyBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXZpY2VbVklERU9fTlVNX0RFVklDRVNdOwotc3RhdGljIERFQ0xBUkVfTVVURVgodmlkZW9kZXZfbG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKHZpZGVvZGV2X2xvY2spOwogCiBzdHJ1Y3QgdmlkZW9fZGV2aWNlKiB2aWRlb19kZXZkYXRhKHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtMTAyLDE1ICsxMDEsMTUgQEAKIAogCWlmKG1pbm9yPj1WSURFT19OVU1fREVWSUNFUykKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JZG93bigmdmlkZW9kZXZfbG9jayk7CisJbXV0ZXhfbG9jaygmdmlkZW9kZXZfbG9jayk7CiAJdmZsPXZpZGVvX2RldmljZVttaW5vcl07CiAJaWYodmZsPT1OVUxMKSB7Ci0JCXVwKCZ2aWRlb2Rldl9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKIAkJcmVxdWVzdF9tb2R1bGUoImNoYXItbWFqb3ItJWQtJWQiLCBWSURFT19NQUpPUiwgbWlub3IpOwotCQlkb3duKCZ2aWRlb2Rldl9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmdmlkZW9kZXZfbG9jayk7CiAJCXZmbD12aWRlb19kZXZpY2VbbWlub3JdOwogCQlpZiAodmZsPT1OVUxMKSB7Ci0JCQl1cCgmdmlkZW9kZXZfbG9jayk7CisJCQltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CkBAIC0xMjMsNyArMTIyLDcgQEAKIAkJZmlsZS0+Zl9vcCA9IGZvcHNfZ2V0KG9sZF9mb3BzKTsKIAl9CiAJZm9wc19wdXQob2xkX2ZvcHMpOwotCXVwKCZ2aWRlb2Rldl9sb2NrKTsKKwltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTMwNCwxMiArMzAzLDEyIEBACiAJfQogCiAJLyogcGljayBhIG1pbm9yIG51bWJlciAqLwotCWRvd24oJnZpZGVvZGV2X2xvY2spOworCW11dGV4X2xvY2soJnZpZGVvZGV2X2xvY2spOwogCWlmIChuciA+PSAwICAmJiAgbnIgPCBlbmQtYmFzZSkgewogCQkvKiB1c2UgdGhlIG9uZSB0aGUgZHJpdmVyIGFza2VkIGZvciAqLwogCQlpID0gYmFzZStucjsKIAkJaWYgKE5VTEwgIT0gdmlkZW9fZGV2aWNlW2ldKSB7Ci0JCQl1cCgmdmlkZW9kZXZfbG9jayk7CisJCQltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwogCQkJcmV0dXJuIC1FTkZJTEU7CiAJCX0KIAl9IGVsc2UgewpAQCAtMzE4LDEzICszMTcsMTMgQEAKIAkJCWlmIChOVUxMID09IHZpZGVvX2RldmljZVtpXSkKIAkJCQlicmVhazsKIAkJaWYgKGkgPT0gZW5kKSB7Ci0JCQl1cCgmdmlkZW9kZXZfbG9jayk7CisJCQltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwogCQkJcmV0dXJuIC1FTkZJTEU7CiAJCX0KIAl9CiAJdmlkZW9fZGV2aWNlW2ldPXZmZDsKIAl2ZmQtPm1pbm9yPWk7Ci0JdXAoJnZpZGVvZGV2X2xvY2spOworCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CiAKIAlzcHJpbnRmKHZmZC0+ZGV2ZnNfbmFtZSwgInY0bC8lcyVkIiwgbmFtZV9iYXNlLCBpIC0gYmFzZSk7CiAJZGV2ZnNfbWtfY2RldihNS0RFVihWSURFT19NQUpPUiwgdmZkLT5taW5vciksCkBAIC0zNjIsMTQgKzM2MSwxNCBAQAogCiB2b2lkIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCkKIHsKLQlkb3duKCZ2aWRlb2Rldl9sb2NrKTsKKwltdXRleF9sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKIAlpZih2aWRlb19kZXZpY2VbdmZkLT5taW5vcl0hPXZmZCkKIAkJcGFuaWMoInZpZGVvZGV2OiBiYWQgdW5yZWdpc3RlciIpOwogCiAJZGV2ZnNfcmVtb3ZlKHZmZC0+ZGV2ZnNfbmFtZSk7CiAJdmlkZW9fZGV2aWNlW3ZmZC0+bWlub3JdPU5VTEw7CiAJY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoJnZmZC0+Y2xhc3NfZGV2KTsKLQl1cCgmdmlkZW9kZXZfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZwppbmRleCBlYWZhMjNmLi5lZmZhMGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKQEAgLTMxLDYgKzMxLDcgQEAKIAogY29uZmlnIE1URF9HRU5fUFJPQkUKIAl0cmlzdGF0ZQorCXNlbGVjdCBPQlNPTEVURV9JTlRFUk1PRFVMRQogCiBjb25maWcgTVREX0NGSV9BRFZfT1BUSU9OUwogCWJvb2wgIkZsYXNoIGNoaXAgZHJpdmVyIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIKQEAgLTI1OSw3ICsyNjAsNyBAQAogCSAgd2l0aCB0aGlzIGRyaXZlciB3aWxsIHJldHVybiAtRU5PREVWIHVwb24gYWNjZXNzLgogCiBjb25maWcgTVREX09CU09MRVRFX0NISVBTCi0JZGVwZW5kcyBvbiBNVEQgJiYgQlJPS0VOCisJZGVwZW5kcyBvbiBNVEQKIAlib29sICJPbGRlciAodGhlb3JldGljYWxseSBvYnNvbGV0ZWQgbm93KSBkcml2ZXJzIGZvciBub24tQ0ZJIGNoaXBzIgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGRvZXMgbm90IGVuYWJsZSBhbnkgY29kZSBkaXJlY3RseSwgYnV0IHdpbGwgYWxsb3cgeW91IHRvCkBAIC0yNzIsNyArMjczLDcgQEAKIAogY29uZmlnIE1URF9BTURTVEQKIAl0cmlzdGF0ZSAiQU1EIGNvbXBhdGlibGUgZmxhc2ggY2hpcCBzdXBwb3J0IChub24tQ0ZJKSIKLQlkZXBlbmRzIG9uIE1URCAmJiBNVERfT0JTT0xFVEVfQ0hJUFMKKwlkZXBlbmRzIG9uIE1URCAmJiBNVERfT0JTT0xFVEVfQ0hJUFMgJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBmbGFzaCBjaGlwcyB1c2luZyBBTUQtY29tcGF0aWJsZQogCSAgY29tbWFuZHMsIGluY2x1ZGluZyBzb21lIHdoaWNoIGFyZSBub3QgQ0ZJLWNvbXBhdGlibGUgYW5kIGhlbmNlCkBAIC0yOTAsNyArMjkxLDcgQEAKIAogY29uZmlnIE1URF9KRURFQwogCXRyaXN0YXRlICJKRURFQyBkZXZpY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1URCAmJiBNVERfT0JTT0xFVEVfQ0hJUFMKKwlkZXBlbmRzIG9uIE1URCAmJiBNVERfT0JTT0xFVEVfQ0hJUFMgJiYgQlJPS0VOCiAJaGVscAogCSAgRW5hYmxlIG9sZGVyIG9sZGVyIEpFREVDIGZsYXNoIGludGVyZmFjZSBkZXZpY2VzIGZvciBzZWxmCiAJICBwcm9ncmFtbWluZyBmbGFzaC4gIEl0IGlzIGNvbW1vbmx5IHVzZWQgaW4gb2xkZXIgQU1EIGNoaXBzLiAgSXQgaXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwppbmRleCA1MDM4ZTkwLi5kZDYyOGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCkBAIC0yMTgsNiArMjE4LDcgQEAKIGNvbmZpZyBNVERfRE9DUFJPQkUKIAl0cmlzdGF0ZQogCXNlbGVjdCBNVERfRE9DRUNDCisJc2VsZWN0IE9CU09MRVRFX0lOVEVSTU9EVUxFCiAKIGNvbmZpZyBNVERfRE9DRUNDCiAJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NzODl4MC5jIGIvZHJpdmVycy9uZXQvY3M4OXgwLmMKaW5kZXggZmFiNjU4Ni4uZWY1NGViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3M4OXgwLmMKKysrIGIvZHJpdmVycy9uZXQvY3M4OXgwLmMKQEAgLTkzLDYgKzkzLDkgQEAKICAgRGVlcGFrIFNheGVuYSAgICAgOiBkc2F4ZW5hQHBsZXhpdHkubmV0CiAgICAgICAgICAgICAgICAgICAgIDogSW50ZWwgSVhEUDIzNTEgcGxhdGZvcm0gc3VwcG9ydAogCisgIERtaXRyeSBQZXJ2dXNoaW4gIDogZHBlcnZ1c2hpbkBydS5tdmlzdGEuY29tCisgICAgICAgICAgICAgICAgICAgIDogUE5YMDEwWCBwbGF0Zm9ybSBzdXBwb3J0CisKICovCiAKIC8qIEFsd2F5cyBpbmNsdWRlICdjb25maWcuaCcgZmlyc3QgaW4gY2FzZSB0aGUgdXNlciB3YW50cyB0byB0dXJuIG9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NidXNsaWIuYyBiL2RyaXZlcnMvdmlkZW8vc2J1c2xpYi5jCmluZGV4IDNhNzRhNjNkLi41NWU2ZTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NidXNsaWIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NidXNsaWIuYwpAQCAtMjE2LDEwICsyMTYsMTAgQEAKIAlyZXQgfD0gcHV0X3VzZXIoY29tcGF0X3B0cihhZGRyKSwgJnAtPmJsdWUpOwogCWlmIChyZXQpCiAJCXJldHVybiAtRUZBVUxUOwotCXJldHVybiBpbmZvLT5mYm9wcy0+ZmJfaW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJcmV0dXJuIGluZm8tPmZib3BzLT5mYl9pb2N0bChpbmZvLAogCQkJKGNtZCA9PSBGQklPUFVUQ01BUDMyKSA/CiAJCQlGQklPUFVUQ01BUF9TUEFSQyA6IEZCSU9HRVRDTUFQX1NQQVJDLAotCQkJKHVuc2lnbmVkIGxvbmcpcCwgaW5mbyk7CisJCQkodW5zaWduZWQgbG9uZylwKTsKIH0KIAogc3RydWN0IGZiY3Vyc29yMzIgewpAQCAtMjYwLDEyICsyNjAsMTEgQEAKIAlyZXQgfD0gcHV0X3VzZXIoY29tcGF0X3B0cihhZGRyKSwgJnAtPmltYWdlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gaW5mby0+ZmJvcHMtPmZiX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRkJJT1NDVVJTT1IsICh1bnNpZ25lZCBsb25nKXAsIGluZm8pOworCXJldHVybiBpbmZvLT5mYm9wcy0+ZmJfaW9jdGwoaW5mbywgRkJJT1NDVVJTT1IsICh1bnNpZ25lZCBsb25nKXApOwogfQogCi1sb25nIHNidXNmYl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCi0JCXVuc2lnbmVkIGxvbmcgYXJnLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK2xvbmcgc2J1c2ZiX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNtZCwKKwkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEZCSU9HVFlQRToKQEAgLTI3OCwxNCArMjc3LDEzIEBACiAJY2FzZSBGQklPU0NVUlBPUzoKIAljYXNlIEZCSU9HQ1VSUE9TOgogCWNhc2UgRkJJT0dDVVJNQVg6Ci0JCXJldHVybiBpbmZvLT5mYm9wcy0+ZmJfaW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsCi0JCQkJZmlsZSwgY21kLCBhcmcsIGluZm8pOworCQlyZXR1cm4gaW5mby0+ZmJvcHMtPmZiX2lvY3RsKGluZm8sIGNtZCwgYXJnKTsKIAljYXNlIEZCSU9QVVRDTUFQMzI6Ci0JCXJldHVybiBmYmlvZ2V0cHV0Y21hcChmaWxlLCBpbmZvLCBjbWQsIGFyZyk7CisJCXJldHVybiBmYmlvZ2V0cHV0Y21hcChpbmZvLCBjbWQsIGFyZyk7CiAJY2FzZSBGQklPR0VUQ01BUDMyOgotCQlyZXR1cm4gZmJpb2dldHB1dGNtYXAoZmlsZSwgaW5mbywgY21kLCBhcmcpOworCQlyZXR1cm4gZmJpb2dldHB1dGNtYXAoaW5mbywgY21kLCBhcmcpOwogCWNhc2UgRkJJT1NDVVJTT1IzMjoKLQkJcmV0dXJuIGZiaW9nc2N1cnNvcihmaWxlLCBpbmZvLCBhcmcpOworCQlyZXR1cm4gZmJpb2dzY3Vyc29yKGluZm8sIGFyZyk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NidXNsaWIuaCBiL2RyaXZlcnMvdmlkZW8vc2J1c2xpYi5oCmluZGV4IGI0NzBlNTIuLmY3NTM5MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2J1c2xpYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vc2J1c2xpYi5oCkBAIC0yMCw3ICsyMCw3IEBACiBpbnQgc2J1c2ZiX2lvY3RsX2hlbHBlcih1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcsCiAJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKIAkJCWludCB0eXBlLCBpbnQgZmJfZGVwdGgsIHVuc2lnbmVkIGxvbmcgZmJfc2l6ZSk7Ci1sb25nIHNidXNmYl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCi0JCXVuc2lnbmVkIGxvbmcgYXJnLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Citsb25nIHNidXNmYl9jb21wYXRfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsCisJCXVuc2lnbmVkIGxvbmcgYXJnKTsKIAogI2VuZGlmIC8qIF9TQlVTTElCX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggN2NkZjQ4YS4uM2RjNzEyZiAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTEwMjcsNyArMTAyNyw3IEBACiAJCS8qIExpbmsgdGhlIGJ1ZmZlciB0byBpdHMgcGFnZSAqLwogCQlzZXRfYmhfcGFnZShiaCwgcGFnZSwgb2Zmc2V0KTsKIAotCQliaC0+Yl9lbmRfaW8gPSBOVUxMOworCQlpbml0X2J1ZmZlcihiaCwgTlVMTCwgTlVMTCk7CiAJfQogCXJldHVybiBoZWFkOwogLyoKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGV2LmMgYi9mcy9mdXNlL2Rldi5jCmluZGV4IGUwOGFiNDcuLjQ1MjZkYTggMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGV2LmMKKysrIGIvZnMvZnVzZS9kZXYuYwpAQCAtMjEsMTggKzIxLDE4IEBACiAKIHN0YXRpYyBrbWVtX2NhY2hlX3QgKmZ1c2VfcmVxX2NhY2hlcDsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZnVzZV9jb25uICpmdXNlX2dldF9jb25uKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIHN0cnVjdCBmdXNlX2Nvbm4gKmZ1c2VfZ2V0X2Nvbm4oc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmM7CiAJc3Bpbl9sb2NrKCZmdXNlX2xvY2spOwogCWZjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWlmIChmYyAmJiAhZmMtPm1vdW50ZWQpCisJaWYgKGZjICYmICFmYy0+Y29ubmVjdGVkKQogCQlmYyA9IE5VTEw7CiAJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CiAJcmV0dXJuIGZjOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZnVzZV9yZXF1ZXN0X2luaXQoc3RydWN0IGZ1c2VfcmVxICpyZXEpCitzdGF0aWMgdm9pZCBmdXNlX3JlcXVlc3RfaW5pdChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOwogCUlOSVRfTElTVF9IRUFEKCZyZXEtPmxpc3QpOwpAQCAtNTMsNyArNTMsNyBAQAogCWttZW1fY2FjaGVfZnJlZShmdXNlX3JlcV9jYWNoZXAsIHJlcSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBibG9ja19zaWdzKHNpZ3NldF90ICpvbGRzZXQpCitzdGF0aWMgdm9pZCBibG9ja19zaWdzKHNpZ3NldF90ICpvbGRzZXQpCiB7CiAJc2lnc2V0X3QgbWFzazsKIApAQCAtNjEsNyArNjEsNyBAQAogCXNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJm1hc2ssIG9sZHNldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX3NpZ3Moc2lnc2V0X3QgKm9sZHNldCkKK3N0YXRpYyB2b2lkIHJlc3RvcmVfc2lncyhzaWdzZXRfdCAqb2xkc2V0KQogewogCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCBvbGRzZXQsIE5VTEwpOwogfQpAQCAtMTA5LDE4ICsxMDksMjQgQEAKIAlpbnQgaW50cjsKIAlzaWdzZXRfdCBvbGRzZXQ7CiAKKwlhdG9taWNfaW5jKCZmYy0+bnVtX3dhaXRpbmcpOwogCWJsb2NrX3NpZ3MoJm9sZHNldCk7CiAJaW50ciA9IGRvd25faW50ZXJydXB0aWJsZSgmZmMtPm91dHN0YW5kaW5nX3NlbSk7CiAJcmVzdG9yZV9zaWdzKCZvbGRzZXQpOwotCXJldHVybiBpbnRyID8gTlVMTCA6IGRvX2dldF9yZXF1ZXN0KGZjKTsKKwlpZiAoaW50cikgeworCQlhdG9taWNfZGVjKCZmYy0+bnVtX3dhaXRpbmcpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIGRvX2dldF9yZXF1ZXN0KGZjKTsKIH0KIAogc3RhdGljIHZvaWQgZnVzZV9wdXRiYWNrX3JlcXVlc3Qoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQogewogCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlpZiAocmVxLT5wcmVhbGxvY2F0ZWQpCisJaWYgKHJlcS0+cHJlYWxsb2NhdGVkKSB7CisJCWF0b21pY19kZWMoJmZjLT5udW1fd2FpdGluZyk7CiAJCWxpc3RfYWRkKCZyZXEtPmxpc3QsICZmYy0+dW51c2VkX2xpc3QpOwotCWVsc2UKKwl9IGVsc2UKIAkJZnVzZV9yZXF1ZXN0X2ZyZWUocmVxKTsKIAogCS8qIElmIHdlIGFyZSBpbiBkZWJ0IGRlY3JlYXNlIHRoYXQgZmlyc3QgKi8KQEAgLTE0OCw0MiArMTU0LDIzIEBACiAJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHByb2Nlc3NfaW5pdF9yZXBseShzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGZ1c2VfaW5pdF9vdXQgKmFyZyA9ICZyZXEtPm1pc2MuaW5pdF9vdXQ7Ci0KLQlpZiAoYXJnLT5tYWpvciAhPSBGVVNFX0tFUk5FTF9WRVJTSU9OKQotCQlmYy0+Y29ubl9lcnJvciA9IDE7Ci0JZWxzZSB7Ci0JCWZjLT5taW5vciA9IGFyZy0+bWlub3I7Ci0JCWZjLT5tYXhfd3JpdGUgPSBhcmctPm1pbm9yIDwgNSA/IDQwOTYgOiBhcmctPm1heF93cml0ZTsKLQl9Ci0KLQkvKiBBZnRlciBJTklUIHJlcGx5IGlzIHJlY2VpdmVkIG90aGVyIHJlcXVlc3RzIGNhbiBnbwotCSAgIG91dC4gIFNvIGRvIChGVVNFX01BWF9PVVRTVEFORElORyAtIDEpIG51bWJlciBvZgotCSAgIHVwKClzIG9uIG91dHN0YW5kaW5nX3NlbS4gIFRoZSBsYXN0IHVwKCkgaXMgZG9uZSBpbgotCSAgIGZ1c2VfcHV0YmFja19yZXF1ZXN0KCkgKi8KLQlmb3IgKGkgPSAxOyBpIDwgRlVTRV9NQVhfT1VUU1RBTkRJTkc7IGkrKykKLQkJdXAoJmZjLT5vdXRzdGFuZGluZ19zZW0pOwotfQotCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHJlcXVlc3QgaXMgZmluaXNoZWQuICBFaXRoZXIgYSByZXBseQogICogaGFzIGFycml2ZWQgb3IgaXQgd2FzIGludGVycnVwdGVkIChhbmQgbm90IHlldCBzZW50KSBvciBzb21lIGVycm9yCi0gKiBvY2N1cnJlZCBkdXJpbmcgY29tbXVuaWNhdGlvbiB3aXRoIHVzZXJzcGFjZSwgb3IgdGhlIGRldmljZSBmaWxlIHdhcwotICogY2xvc2VkLiAgSXQgZGVjcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIHRoZSByZXF1ZXN0LiAgSW4gY2FzZQotICogb2YgYSBiYWNrZ3JvdW5kIHJlcXVlc3QgdGhlIHJlZmVyZW5jZSB0byB0aGUgc3RvcmVkIG9iamVjdHMgYXJlCi0gKiByZWxlYXNlZC4gIFRoZSByZXF1ZXN0ZXIgdGhyZWFkIGlzIHdva2VuIHVwIChpZiBzdGlsbCB3YWl0aW5nKSwgYW5kCi0gKiBmaW5hbGx5IHRoZSByZXF1ZXN0IGlzIGVpdGhlciBmcmVlZCBvciBwdXQgb24gdGhlIHVudXNlZF9saXN0CisgKiBvY2N1cnJlZCBkdXJpbmcgY29tbXVuaWNhdGlvbiB3aXRoIHVzZXJzcGFjZSwgb3IgdGhlIGRldmljZSBmaWxlCisgKiB3YXMgY2xvc2VkLiAgSW4gY2FzZSBvZiBhIGJhY2tncm91bmQgcmVxdWVzdCB0aGUgcmVmZXJlbmNlIHRvIHRoZQorICogc3RvcmVkIG9iamVjdHMgYXJlIHJlbGVhc2VkLiAgVGhlIHJlcXVlc3RlciB0aHJlYWQgaXMgd29rZW4gdXAgKGlmCisgKiBzdGlsbCB3YWl0aW5nKSwgdGhlICdlbmQnIGNhbGxiYWNrIGlzIGNhbGxlZCBpZiBnaXZlbiwgZWxzZSB0aGUKKyAqIHJlZmVyZW5jZSB0byB0aGUgcmVxdWVzdCBpcyByZWxlYXNlZAogICoKICAqIENhbGxlZCB3aXRoIGZ1c2VfbG9jaywgdW5sb2NrcyBpdAogICovCiBzdGF0aWMgdm9pZCByZXF1ZXN0X2VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7Ci0JaW50IHB1dGJhY2s7Ci0JcmVxLT5maW5pc2hlZCA9IDE7Ci0JcHV0YmFjayA9IGF0b21pY19kZWNfYW5kX3Rlc3QoJnJlcS0+Y291bnQpOworCXZvaWQgKCplbmQpIChzdHJ1Y3QgZnVzZV9jb25uICosIHN0cnVjdCBmdXNlX3JlcSAqKSA9IHJlcS0+ZW5kOworCXJlcS0+ZW5kID0gTlVMTDsKKwlsaXN0X2RlbCgmcmVxLT5saXN0KTsKKwlyZXEtPnN0YXRlID0gRlVTRV9SRVFfRklOSVNIRUQ7CiAJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CiAJaWYgKHJlcS0+YmFja2dyb3VuZCkgewogCQlkb3duX3JlYWQoJmZjLT5zYnB1dF9zZW0pOwpAQCAtMTkyLDE4ICsxNzksMTAgQEAKIAkJdXBfcmVhZCgmZmMtPnNicHV0X3NlbSk7CiAJfQogCXdha2VfdXAoJnJlcS0+d2FpdHEpOwotCWlmIChyZXEtPmluLmgub3Bjb2RlID09IEZVU0VfSU5JVCkKLQkJcHJvY2Vzc19pbml0X3JlcGx5KGZjLCByZXEpOwotCWVsc2UgaWYgKHJlcS0+aW4uaC5vcGNvZGUgPT0gRlVTRV9SRUxFQVNFICYmIHJlcS0+aW5vZGUgPT0gTlVMTCkgewotCQkvKiBTcGVjaWFsIGNhc2UgZm9yIGZhaWxlZCBpZ2V0IGluIENSRUFURSAqLwotCQl1NjQgbm9kZWlkID0gcmVxLT5pbi5oLm5vZGVpZDsKLQkJX19mdXNlX2dldF9yZXF1ZXN0KHJlcSk7Ci0JCWZ1c2VfcmVzZXRfcmVxdWVzdChyZXEpOwotCQlmdXNlX3NlbmRfZm9yZ2V0KGZjLCByZXEsIG5vZGVpZCwgMSk7Ci0JCXB1dGJhY2sgPSAwOwotCX0KLQlpZiAocHV0YmFjaykKLQkJZnVzZV9wdXRiYWNrX3JlcXVlc3QoZmMsIHJlcSk7CisJaWYgKGVuZCkKKwkJZW5kKGZjLCByZXEpOworCWVsc2UKKwkJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKIH0KIAogLyoKQEAgLTI1NCwxNCArMjMzLDE2IEBACiAKIAlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKIAlibG9ja19zaWdzKCZvbGRzZXQpOwotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShyZXEtPndhaXRxLCByZXEtPmZpbmlzaGVkKTsKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocmVxLT53YWl0cSwgcmVxLT5zdGF0ZSA9PSBGVVNFX1JFUV9GSU5JU0hFRCk7CiAJcmVzdG9yZV9zaWdzKCZvbGRzZXQpOwogCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlpZiAocmVxLT5maW5pc2hlZCkKKwlpZiAocmVxLT5zdGF0ZSA9PSBGVVNFX1JFUV9GSU5JU0hFRCAmJiAhcmVxLT5pbnRlcnJ1cHRlZCkKIAkJcmV0dXJuOwogCi0JcmVxLT5vdXQuaC5lcnJvciA9IC1FSU5UUjsKLQlyZXEtPmludGVycnVwdGVkID0gMTsKKwlpZiAoIXJlcS0+aW50ZXJydXB0ZWQpIHsKKwkJcmVxLT5vdXQuaC5lcnJvciA9IC1FSU5UUjsKKwkJcmVxLT5pbnRlcnJ1cHRlZCA9IDE7CisJfQogCWlmIChyZXEtPmxvY2tlZCkgewogCQkvKiBUaGlzIGlzIHVuaW50ZXJydXB0aWJsZSBzbGVlcCwgYmVjYXVzZSBkYXRhIGlzCiAJCSAgIGJlaW5nIGNvcGllZCB0by9mcm9tIHRoZSBidWZmZXJzIG9mIHJlcS4gIER1cmluZwpAQCAtMjcyLDEwICsyNTMsMTAgQEAKIAkJd2FpdF9ldmVudChyZXEtPndhaXRxLCAhcmVxLT5sb2NrZWQpOwogCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CiAJfQotCWlmICghcmVxLT5zZW50ICYmICFsaXN0X2VtcHR5KCZyZXEtPmxpc3QpKSB7CisJaWYgKHJlcS0+c3RhdGUgPT0gRlVTRV9SRVFfUEVORElORykgewogCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKIAkJX19mdXNlX3B1dF9yZXF1ZXN0KHJlcSk7Ci0JfSBlbHNlIGlmICghcmVxLT5maW5pc2hlZCAmJiByZXEtPnNlbnQpCisJfSBlbHNlIGlmIChyZXEtPnN0YXRlID09IEZVU0VfUkVRX1NFTlQpCiAJCWJhY2tncm91bmRfcmVxdWVzdChmYywgcmVxKTsKIH0KIApAQCAtMzEwLDYgKzI5MSw3IEBACiAJCQlmYy0+b3V0c3RhbmRpbmdfZGVidCsrOwogCX0KIAlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsICZmYy0+cGVuZGluZyk7CisJcmVxLT5zdGF0ZSA9IEZVU0VfUkVRX1BFTkRJTkc7CiAJd2FrZV91cCgmZmMtPndhaXRxKTsKIH0KIApAQCAtMzYyLDM0ICszNDQsMTIgQEAKIAlyZXF1ZXN0X3NlbmRfbm93YWl0KGZjLCByZXEpOwogfQogCi12b2lkIGZ1c2Vfc2VuZF9pbml0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjKQotewotCS8qIFRoaXMgaXMgY2FsbGVkIGZyb20gZnVzZV9yZWFkX3N1cGVyKCkgc28gdGhlcmUncyBndWFyYW50ZWVkCi0JICAgdG8gYmUgYSByZXF1ZXN0IGF2YWlsYWJsZSAqLwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0gZG9fZ2V0X3JlcXVlc3QoZmMpOwotCXN0cnVjdCBmdXNlX2luaXRfaW4gKmFyZyA9ICZyZXEtPm1pc2MuaW5pdF9pbjsKLQlhcmctPm1ham9yID0gRlVTRV9LRVJORUxfVkVSU0lPTjsKLQlhcmctPm1pbm9yID0gRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTjsKLQlyZXEtPmluLmgub3Bjb2RlID0gRlVTRV9JTklUOwotCXJlcS0+aW4ubnVtYXJncyA9IDE7Ci0JcmVxLT5pbi5hcmdzWzBdLnNpemUgPSBzaXplb2YoKmFyZyk7Ci0JcmVxLT5pbi5hcmdzWzBdLnZhbHVlID0gYXJnOwotCXJlcS0+b3V0Lm51bWFyZ3MgPSAxOwotCS8qIFZhcmlhYmxlIGxlbmd0aCBhcmd1ZW1lbnQgdXNlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQotCSAgIHdpdGggaW50ZXJmYWNlIHZlcnNpb24gPCA3LjUuICBSZXN0IG9mIGluaXRfb3V0IGlzIHplcm9lZAotCSAgIGJ5IGRvX2dldF9yZXF1ZXN0KCksIHNvIGEgc2hvcnQgcmVwbHkgaXMgbm90IGEgcHJvYmxlbSAqLwotCXJlcS0+b3V0LmFyZ3ZhciA9IDE7Ci0JcmVxLT5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKHN0cnVjdCBmdXNlX2luaXRfb3V0KTsKLQlyZXEtPm91dC5hcmdzWzBdLnZhbHVlID0gJnJlcS0+bWlzYy5pbml0X291dDsKLQlyZXF1ZXN0X3NlbmRfYmFja2dyb3VuZChmYywgcmVxKTsKLX0KLQogLyoKICAqIExvY2sgdGhlIHJlcXVlc3QuICBVcCB0byB0aGUgbmV4dCB1bmxvY2tfcmVxdWVzdCgpIHRoZXJlIG11c3RuJ3QgYmUKICAqIGFueXRoaW5nIHRoYXQgY291bGQgY2F1c2UgYSBwYWdlLWZhdWx0LiAgSWYgdGhlIHJlcXVlc3Qgd2FzIGFscmVhZHkKICAqIGludGVycnVwdGVkIGJhaWwgb3V0LgogICovCi1zdGF0aWMgaW5saW5lIGludCBsb2NrX3JlcXVlc3Qoc3RydWN0IGZ1c2VfcmVxICpyZXEpCitzdGF0aWMgaW50IGxvY2tfcmVxdWVzdChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlpbnQgZXJyID0gMDsKIAlpZiAocmVxKSB7CkBAIC00MDgsNyArMzY4LDcgQEAKICAqIHJlcXVlc3RlciB0aHJlYWQgaXMgY3VycmVudGx5IHdhaXRpbmcgZm9yIGl0IHRvIGJlIHVubG9ja2VkLCBzbwogICogd2FrZSBpdCB1cC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19yZXF1ZXN0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKQorc3RhdGljIHZvaWQgdW5sb2NrX3JlcXVlc3Qoc3RydWN0IGZ1c2VfcmVxICpyZXEpCiB7CiAJaWYgKHJlcSkgewogCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CkBAIC00NDQsNyArNDA0LDcgQEAKIH0KIAogLyogVW5tYXAgYW5kIHB1dCBwcmV2aW91cyBwYWdlIG9mIHVzZXJzcGFjZSBidWZmZXIgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmdXNlX2NvcHlfZmluaXNoKHN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgKmNzKQorc3RhdGljIHZvaWQgZnVzZV9jb3B5X2ZpbmlzaChzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlICpjcykKIHsKIAlpZiAoY3MtPm1hcGFkZHIpIHsKIAkJa3VubWFwX2F0b21pYyhjcy0+bWFwYWRkciwgS01fVVNFUjApOwpAQCAtNDkzLDggKzQ1Myw3IEBACiB9CiAKIC8qIERvIGFzIG11Y2ggY29weSB0by9mcm9tIHVzZXJzcGFjZSBidWZmZXIgYXMgd2UgY2FuICovCi1zdGF0aWMgaW5saW5lIGludCBmdXNlX2NvcHlfZG8oc3RydWN0IGZ1c2VfY29weV9zdGF0ZSAqY3MsIHZvaWQgKip2YWwsCi0JCQkgICAgICAgdW5zaWduZWQgKnNpemUpCitzdGF0aWMgaW50IGZ1c2VfY29weV9kbyhzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlICpjcywgdm9pZCAqKnZhbCwgdW5zaWduZWQgKnNpemUpCiB7CiAJdW5zaWduZWQgbmNweSA9IG1pbigqc2l6ZSwgY3MtPmxlbik7CiAJaWYgKHZhbCkgewpAQCAtNTE0LDggKzQ3Myw4IEBACiAgKiBDb3B5IGEgcGFnZSBpbiB0aGUgcmVxdWVzdCB0by9mcm9tIHRoZSB1c2Vyc3BhY2UgYnVmZmVyLiAgTXVzdCBiZQogICogZG9uZSBhdG9taWNhbGx5CiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGZ1c2VfY29weV9wYWdlKHN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgKmNzLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgaW50IHplcm9pbmcpCitzdGF0aWMgaW50IGZ1c2VfY29weV9wYWdlKHN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgKmNzLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgaW50IHplcm9pbmcpCiB7CiAJaWYgKHBhZ2UgJiYgemVyb2luZyAmJiBjb3VudCA8IFBBR0VfU0laRSkgewogCQl2b2lkICptYXBhZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjEpOwpAQCAtNTk3LDcgKzU1Niw3IEBACiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKIAlhZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmUoJmZjLT53YWl0cSwgJndhaXQpOwotCXdoaWxlIChmYy0+bW91bnRlZCAmJiBsaXN0X2VtcHR5KCZmYy0+cGVuZGluZykpIHsKKwl3aGlsZSAoZmMtPmNvbm5lY3RlZCAmJiBsaXN0X2VtcHR5KCZmYy0+cGVuZGluZykpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJYnJlYWs7CkBAIC02MzcsMTQgKzU5NiwxNSBAQAogCQlnb3RvIGVycl91bmxvY2s7CiAJcmVxdWVzdF93YWl0KGZjKTsKIAllcnIgPSAtRU5PREVWOwotCWlmICghZmMtPm1vdW50ZWQpCisJaWYgKCFmYy0+Y29ubmVjdGVkKQogCQlnb3RvIGVycl91bmxvY2s7CiAJZXJyID0gLUVSRVNUQVJUU1lTOwogCWlmIChsaXN0X2VtcHR5KCZmYy0+cGVuZGluZykpCiAJCWdvdG8gZXJyX3VubG9jazsKIAogCXJlcSA9IGxpc3RfZW50cnkoZmMtPnBlbmRpbmcubmV4dCwgc3RydWN0IGZ1c2VfcmVxLCBsaXN0KTsKLQlsaXN0X2RlbF9pbml0KCZyZXEtPmxpc3QpOworCXJlcS0+c3RhdGUgPSBGVVNFX1JFUV9SRUFESU5HOworCWxpc3RfbW92ZSgmcmVxLT5saXN0LCAmZmMtPmlvKTsKIAogCWluID0gJnJlcS0+aW47CiAJcmVxc2l6ZSA9IGluLT5oLmxlbjsKQEAgLTY3Nyw4ICs2MzcsOCBAQAogCWlmICghcmVxLT5pc3JlcGx5KQogCQlyZXF1ZXN0X2VuZChmYywgcmVxKTsKIAllbHNlIHsKLQkJcmVxLT5zZW50ID0gMTsKLQkJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmZmMtPnByb2Nlc3NpbmcpOworCQlyZXEtPnN0YXRlID0gRlVTRV9SRVFfU0VOVDsKKwkJbGlzdF9tb3ZlX3RhaWwoJnJlcS0+bGlzdCwgJmZjLT5wcm9jZXNzaW5nKTsKIAkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CiAJfQogCXJldHVybiByZXFzaXplOwpAQCAtNzY2LDE3ICs3MjYsMjMgQEAKIAkJZ290byBlcnJfZmluaXNoOwogCiAJc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCWVyciA9IC1FTk9FTlQ7CisJaWYgKCFmYy0+Y29ubmVjdGVkKQorCQlnb3RvIGVycl91bmxvY2s7CisKIAlyZXEgPSByZXF1ZXN0X2ZpbmQoZmMsIG9oLnVuaXF1ZSk7CiAJZXJyID0gLUVJTlZBTDsKIAlpZiAoIXJlcSkKIAkJZ290byBlcnJfdW5sb2NrOwogCi0JbGlzdF9kZWxfaW5pdCgmcmVxLT5saXN0KTsKIAlpZiAocmVxLT5pbnRlcnJ1cHRlZCkgewotCQlyZXF1ZXN0X2VuZChmYywgcmVxKTsKKwkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CiAJCWZ1c2VfY29weV9maW5pc2goJmNzKTsKKwkJc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCQlyZXF1ZXN0X2VuZChmYywgcmVxKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQorCWxpc3RfbW92ZSgmcmVxLT5saXN0LCAmZmMtPmlvKTsKIAlyZXEtPm91dC5oID0gb2g7CiAJcmVxLT5sb2NrZWQgPSAxOwogCWNzLnJlcSA9IHJlcTsKQEAgLTgzMCwxOSArNzk2LDkwIEBACiAJcmV0dXJuIG1hc2s7CiB9CiAKLS8qIEFib3J0IGFsbCByZXF1ZXN0cyBvbiB0aGUgZ2l2ZW4gbGlzdCAocGVuZGluZyBvciBwcm9jZXNzaW5nKSAqLworLyoKKyAqIEFib3J0IGFsbCByZXF1ZXN0cyBvbiB0aGUgZ2l2ZW4gbGlzdCAocGVuZGluZyBvciBwcm9jZXNzaW5nKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgYW5kIHJlYWNxdWlyZXMgZnVzZV9sb2NrCisgKi8KIHN0YXRpYyB2b2lkIGVuZF9yZXF1ZXN0cyhzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAJCXJlcSA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IGZ1c2VfcmVxLCBsaXN0KTsKLQkJbGlzdF9kZWxfaW5pdCgmcmVxLT5saXN0KTsKIAkJcmVxLT5vdXQuaC5lcnJvciA9IC1FQ09OTkFCT1JURUQ7CiAJCXJlcXVlc3RfZW5kKGZjLCByZXEpOwogCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CiAJfQogfQogCisvKgorICogQWJvcnQgcmVxdWVzdHMgdW5kZXIgSS9PCisgKgorICogVGhlIHJlcXVlc3RzIGFyZSBzZXQgdG8gaW50ZXJydXB0ZWQgYW5kIGZpbmlzaGVkLCBhbmQgdGhlIHJlcXVlc3QKKyAqIHdhaXRlciBpcyB3b2tlbiB1cC4gIFRoaXMgd2lsbCBtYWtlIHJlcXVlc3Rfd2FpdF9hbnN3ZXIoKSB3YWl0CisgKiB1bnRpbCB0aGUgcmVxdWVzdCBpcyB1bmxvY2tlZCBhbmQgdGhlbiByZXR1cm4uCisgKgorICogSWYgdGhlIHJlcXVlc3QgaXMgYXN5bmNocm9ub3VzLCB0aGVuIHRoZSBlbmQgZnVuY3Rpb24gbmVlZHMgdG8gYmUKKyAqIGNhbGxlZCBhZnRlciB3YWl0aW5nIGZvciB0aGUgcmVxdWVzdCB0byBiZSB1bmxvY2tlZCAoaWYgaXQgd2FzCisgKiBsb2NrZWQpLgorICovCitzdGF0aWMgdm9pZCBlbmRfaW9fcmVxdWVzdHMoc3RydWN0IGZ1c2VfY29ubiAqZmMpCit7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZmYy0+aW8pKSB7CisJCXN0cnVjdCBmdXNlX3JlcSAqcmVxID0KKwkJCWxpc3RfZW50cnkoZmMtPmlvLm5leHQsIHN0cnVjdCBmdXNlX3JlcSwgbGlzdCk7CisJCXZvaWQgKCplbmQpIChzdHJ1Y3QgZnVzZV9jb25uICosIHN0cnVjdCBmdXNlX3JlcSAqKSA9IHJlcS0+ZW5kOworCisJCXJlcS0+aW50ZXJydXB0ZWQgPSAxOworCQlyZXEtPm91dC5oLmVycm9yID0gLUVDT05OQUJPUlRFRDsKKwkJcmVxLT5zdGF0ZSA9IEZVU0VfUkVRX0ZJTklTSEVEOworCQlsaXN0X2RlbF9pbml0KCZyZXEtPmxpc3QpOworCQl3YWtlX3VwKCZyZXEtPndhaXRxKTsKKwkJaWYgKGVuZCkgeworCQkJcmVxLT5lbmQgPSBOVUxMOworCQkJLyogVGhlIGVuZCBmdW5jdGlvbiB3aWxsIGNvbnN1bWUgdGhpcyByZWZlcmVuY2UgKi8KKwkJCV9fZnVzZV9nZXRfcmVxdWVzdChyZXEpOworCQkJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJCQl3YWl0X2V2ZW50KHJlcS0+d2FpdHEsICFyZXEtPmxvY2tlZCk7CisJCQllbmQoZmMsIHJlcSk7CisJCQlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBBYm9ydCBhbGwgcmVxdWVzdHMuCisgKgorICogRW1lcmdlbmN5IGV4aXQgaW4gY2FzZSBvZiBhIG1hbGljaW91cyBvciBhY2NpZGVudGFsIGRlYWRsb2NrLCBvcgorICoganVzdCBhIGh1bmcgZmlsZXN5c3RlbS4KKyAqCisgKiBUaGUgc2FtZSBlZmZlY3QgaXMgdXN1YWxseSBhY2hpZXZhYmxlIHRocm91Z2gga2lsbGluZyB0aGUKKyAqIGZpbGVzeXN0ZW0gZGFlbW9uIGFuZCBhbGwgdXNlcnMgb2YgdGhlIGZpbGVzeXN0ZW0uICBUaGUgZXhjZXB0aW9uCisgKiBpcyB0aGUgY29tYmluYXRpb24gb2YgYW4gYXN5bmNocm9ub3VzIHJlcXVlc3QgYW5kIHRoZSB0cmlja3kKKyAqIGRlYWRsb2NrIChzZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlLnR4dCkuCisgKgorICogRHVyaW5nIHRoZSBhYm9ydGluZywgcHJvZ3Jlc3Npb24gb2YgcmVxdWVzdHMgZnJvbSB0aGUgcGVuZGluZyBhbmQKKyAqIHByb2Nlc3NpbmcgbGlzdHMgb250byB0aGUgaW8gbGlzdCwgYW5kIHByb2dyZXNzaW9uIG9mIG5ldyByZXF1ZXN0cworICogb250byB0aGUgcGVuZGluZyBsaXN0IGlzIHByZXZlbnRlZCBieSByZXEtPmNvbm5lY3RlZCBiZWluZyBmYWxzZS4KKyAqCisgKiBQcm9ncmVzc2lvbiBvZiByZXF1ZXN0cyB1bmRlciBJL08gdG8gdGhlIHByb2Nlc3NpbmcgbGlzdCBpcworICogcHJldmVudGVkIGJ5IHRoZSByZXEtPmludGVycnVwdGVkIGZsYWcgYmVpbmcgdHJ1ZSBmb3IgdGhlc2UKKyAqIHJlcXVlc3RzLiAgRm9yIHRoaXMgcmVhc29uIHJlcXVlc3RzIG9uIHRoZSBpbyBsaXN0IG11c3QgYmUgYWJvcnRlZAorICogZmlyc3QuCisgKi8KK3ZvaWQgZnVzZV9hYm9ydF9jb25uKHN0cnVjdCBmdXNlX2Nvbm4gKmZjKQoreworCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKKwlpZiAoZmMtPmNvbm5lY3RlZCkgeworCQlmYy0+Y29ubmVjdGVkID0gMDsKKwkJZW5kX2lvX3JlcXVlc3RzKGZjKTsKKwkJZW5kX3JlcXVlc3RzKGZjLCAmZmMtPnBlbmRpbmcpOworCQllbmRfcmVxdWVzdHMoZmMsICZmYy0+cHJvY2Vzc2luZyk7CisJCXdha2VfdXBfYWxsKCZmYy0+d2FpdHEpOworCX0KKwlzcGluX3VubG9jaygmZnVzZV9sb2NrKTsKK30KKwogc3RhdGljIGludCBmdXNlX2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjOwpAQCAtODUzLDkgKzg5MCwxMSBAQAogCQlmYy0+Y29ubmVjdGVkID0gMDsKIAkJZW5kX3JlcXVlc3RzKGZjLCAmZmMtPnBlbmRpbmcpOwogCQllbmRfcmVxdWVzdHMoZmMsICZmYy0+cHJvY2Vzc2luZyk7Ci0JCWZ1c2VfcmVsZWFzZV9jb25uKGZjKTsKIAl9CiAJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJaWYgKGZjKQorCQlrb2JqZWN0X3B1dCgmZmMtPmtvYmopOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IDQxN2JjZWUuLjIxZmQ1OWMgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGlyLmMKKysrIGIvZnMvZnVzZS9kaXIuYwpAQCAtMjMsOCArMjMsNyBAQAogLyoKICAqIENhbGN1bGF0ZSB0aGUgdGltZSBpbiBqaWZmaWVzIHVudGlsIGEgZGVudHJ5L2F0dHJpYnV0ZXMgYXJlIHZhbGlkCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aW1lX3RvX2ppZmZpZXModW5zaWduZWQgbG9uZyBzZWMsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIG5zZWMpCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lX3RvX2ppZmZpZXModW5zaWduZWQgbG9uZyBzZWMsIHVuc2lnbmVkIGxvbmcgbnNlYykKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7c2VjLCBuc2VjfTsKIAlyZXR1cm4gamlmZmllcyArIHRpbWVzcGVjX3RvX2ppZmZpZXMoJnRzKTsKQEAgLTE1Nyw3ICsxNTYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpbnZhbGlkX25vZGVpZCh1NjQgbm9kZWlkKQorc3RhdGljIGludCBpbnZhbGlkX25vZGVpZCh1NjQgbm9kZWlkKQogewogCXJldHVybiAhbm9kZWlkIHx8IG5vZGVpZCA9PSBGVVNFX1JPT1RfSUQ7CiB9CkBAIC0xNjYsNyArMTY1LDcgQEAKIAkuZF9yZXZhbGlkYXRlCT0gZnVzZV9kZW50cnlfcmV2YWxpZGF0ZSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IHZhbGlkX21vZGUoaW50IG0pCitzdGF0aWMgaW50IHZhbGlkX21vZGUoaW50IG0pCiB7CiAJcmV0dXJuIFNfSVNSRUcobSkgfHwgU19JU0RJUihtKSB8fCBTX0lTTE5LKG0pIHx8IFNfSVNDSFIobSkgfHwKIAkJU19JU0JMSyhtKSB8fCBTX0lTRklGTyhtKSB8fCBTX0lTU09DSyhtKTsKQEAgLTc2MywxMyArNzYyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBzaXplX3QgZnVzZV9zZW5kX3JlYWRkaXIoc3RydWN0IGZ1c2VfcmVxICpyZXEsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLAotCQkJCSAgICAgICBzaXplX3QgY291bnQpCi17Ci0JcmV0dXJuIGZ1c2Vfc2VuZF9yZWFkX2NvbW1vbihyZXEsIGZpbGUsIGlub2RlLCBwb3MsIGNvdW50LCAxKTsKLX0KLQogc3RhdGljIGludCBmdXNlX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmRzdGJ1ZiwgZmlsbGRpcl90IGZpbGxkaXIpCiB7CiAJaW50IGVycjsKQEAgLTc5Myw3ICs3ODUsOSBAQAogCX0KIAlyZXEtPm51bV9wYWdlcyA9IDE7CiAJcmVxLT5wYWdlc1swXSA9IHBhZ2U7Ci0JbmJ5dGVzID0gZnVzZV9zZW5kX3JlYWRkaXIocmVxLCBmaWxlLCBpbm9kZSwgZmlsZS0+Zl9wb3MsIFBBR0VfU0laRSk7CisJZnVzZV9yZWFkX2ZpbGwocmVxLCBmaWxlLCBpbm9kZSwgZmlsZS0+Zl9wb3MsIFBBR0VfU0laRSwgRlVTRV9SRUFERElSKTsKKwlyZXF1ZXN0X3NlbmQoZmMsIHJlcSk7CisJbmJ5dGVzID0gcmVxLT5vdXQuYXJnc1swXS5zaXplOwogCWVyciA9IHJlcS0+b3V0LmguZXJyb3I7CiAJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAoIWVycikKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggNjNkMjk4MC4uYTdlZjVlNyAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKKysrIGIvZnMvZnVzZS9maWxlLmMKQEAgLTExMyw2ICsxMTMsMTQgQEAKIAlyZXR1cm4gZXJyOwogfQogCisvKiBTcGVjaWFsIGNhc2UgZm9yIGZhaWxlZCBpZ2V0IGluIENSRUFURSAqLworc3RhdGljIHZvaWQgZnVzZV9yZWxlYXNlX2VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCit7CisJdTY0IG5vZGVpZCA9IHJlcS0+aW4uaC5ub2RlaWQ7CisJZnVzZV9yZXNldF9yZXF1ZXN0KHJlcSk7CisJZnVzZV9zZW5kX2ZvcmdldChmYywgcmVxLCBub2RlaWQsIDEpOworfQorCiB2b2lkIGZ1c2Vfc2VuZF9yZWxlYXNlKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9maWxlICpmZiwKIAkJICAgICAgIHU2NCBub2RlaWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBmbGFncywgaW50IGlzZGlyKQogewpAQCAtMTI4LDYgKzEzNiw4IEBACiAJcmVxLT5pbi5hcmdzWzBdLnNpemUgPSBzaXplb2Yoc3RydWN0IGZ1c2VfcmVsZWFzZV9pbik7CiAJcmVxLT5pbi5hcmdzWzBdLnZhbHVlID0gaW5hcmc7CiAJcmVxdWVzdF9zZW5kX2JhY2tncm91bmQoZmMsIHJlcSk7CisJaWYgKCFpbm9kZSkKKwkJcmVxLT5lbmQgPSBmdXNlX3JlbGVhc2VfZW5kOwogCWtmcmVlKGZmKTsKIH0KIApAQCAtMjQwLDM4ICsyNTAsMzUgQEAKIAlyZXR1cm4gZnVzZV9mc3luY19jb21tb24oZmlsZSwgZGUsIGRhdGFzeW5jLCAwKTsKIH0KIAotc2l6ZV90IGZ1c2Vfc2VuZF9yZWFkX2NvbW1vbihzdHJ1Y3QgZnVzZV9yZXEgKnJlcSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCwKLQkJCSAgICAgaW50IGlzZGlyKQordm9pZCBmdXNlX3JlYWRfZmlsbChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQsIGludCBvcGNvZGUpCiB7Ci0Jc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKIAlzdHJ1Y3QgZnVzZV9maWxlICpmZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZnVzZV9yZWFkX2luIGluYXJnOworCXN0cnVjdCBmdXNlX3JlYWRfaW4gKmluYXJnID0gJnJlcS0+bWlzYy5yZWFkX2luOwogCi0JbWVtc2V0KCZpbmFyZywgMCwgc2l6ZW9mKHN0cnVjdCBmdXNlX3JlYWRfaW4pKTsKLQlpbmFyZy5maCA9IGZmLT5maDsKLQlpbmFyZy5vZmZzZXQgPSBwb3M7Ci0JaW5hcmcuc2l6ZSA9IGNvdW50OwotCXJlcS0+aW4uaC5vcGNvZGUgPSBpc2RpciA/IEZVU0VfUkVBRERJUiA6IEZVU0VfUkVBRDsKKwlpbmFyZy0+ZmggPSBmZi0+Zmg7CisJaW5hcmctPm9mZnNldCA9IHBvczsKKwlpbmFyZy0+c2l6ZSA9IGNvdW50OworCXJlcS0+aW4uaC5vcGNvZGUgPSBvcGNvZGU7CiAJcmVxLT5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGlub2RlKTsKIAlyZXEtPmlub2RlID0gaW5vZGU7CiAJcmVxLT5maWxlID0gZmlsZTsKIAlyZXEtPmluLm51bWFyZ3MgPSAxOwogCXJlcS0+aW4uYXJnc1swXS5zaXplID0gc2l6ZW9mKHN0cnVjdCBmdXNlX3JlYWRfaW4pOwotCXJlcS0+aW4uYXJnc1swXS52YWx1ZSA9ICZpbmFyZzsKKwlyZXEtPmluLmFyZ3NbMF0udmFsdWUgPSBpbmFyZzsKIAlyZXEtPm91dC5hcmdwYWdlcyA9IDE7CiAJcmVxLT5vdXQuYXJndmFyID0gMTsKIAlyZXEtPm91dC5udW1hcmdzID0gMTsKIAlyZXEtPm91dC5hcmdzWzBdLnNpemUgPSBjb3VudDsKLQlyZXF1ZXN0X3NlbmQoZmMsIHJlcSk7Ci0JcmV0dXJuIHJlcS0+b3V0LmFyZ3NbMF0uc2l6ZTsKIH0KIAotc3RhdGljIGlubGluZSBzaXplX3QgZnVzZV9zZW5kX3JlYWQoc3RydWN0IGZ1c2VfcmVxICpyZXEsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLAotCQkJCSAgICBzaXplX3QgY291bnQpCitzdGF0aWMgc2l6ZV90IGZ1c2Vfc2VuZF9yZWFkKHN0cnVjdCBmdXNlX3JlcSAqcmVxLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KQogewotCXJldHVybiBmdXNlX3NlbmRfcmVhZF9jb21tb24ocmVxLCBmaWxlLCBpbm9kZSwgcG9zLCBjb3VudCwgMCk7CisJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKKwlmdXNlX3JlYWRfZmlsbChyZXEsIGZpbGUsIGlub2RlLCBwb3MsIGNvdW50LCBGVVNFX1JFQUQpOworCXJlcXVlc3Rfc2VuZChmYywgcmVxKTsKKwlyZXR1cm4gcmVxLT5vdXQuYXJnc1swXS5zaXplOwogfQogCiBzdGF0aWMgaW50IGZ1c2VfcmVhZHBhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtMzA0LDIxICszMTEsMzMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGZ1c2Vfc2VuZF9yZWFkcGFnZXMoc3RydWN0IGZ1c2VfcmVxICpyZXEsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgdm9pZCBmdXNlX3JlYWRwYWdlc19lbmQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQogewotCWxvZmZfdCBwb3MgPSBwYWdlX29mZnNldChyZXEtPnBhZ2VzWzBdKTsKLQlzaXplX3QgY291bnQgPSByZXEtPm51bV9wYWdlcyA8PCBQQUdFX0NBQ0hFX1NISUZUOwotCXVuc2lnbmVkIGk7Ci0JcmVxLT5vdXQucGFnZV96ZXJvaW5nID0gMTsKLQlmdXNlX3NlbmRfcmVhZChyZXEsIGZpbGUsIGlub2RlLCBwb3MsIGNvdW50KTsKKwlpbnQgaTsKKworCWZ1c2VfaW52YWxpZGF0ZV9hdHRyKHJlcS0+cGFnZXNbMF0tPm1hcHBpbmctPmhvc3QpOyAvKiBhdGltZSBjaGFuZ2VkICovCisKIAlmb3IgKGkgPSAwOyBpIDwgcmVxLT5udW1fcGFnZXM7IGkrKykgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHJlcS0+cGFnZXNbaV07CiAJCWlmICghcmVxLT5vdXQuaC5lcnJvcikKIAkJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJZWxzZQorCQkJU2V0UGFnZUVycm9yKHBhZ2UpOwogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9Ci0JcmV0dXJuIHJlcS0+b3V0LmguZXJyb3I7CisJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKK30KKworc3RhdGljIHZvaWQgZnVzZV9zZW5kX3JlYWRwYWdlcyhzdHJ1Y3QgZnVzZV9yZXEgKnJlcSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oaW5vZGUpOworCWxvZmZfdCBwb3MgPSBwYWdlX29mZnNldChyZXEtPnBhZ2VzWzBdKTsKKwlzaXplX3QgY291bnQgPSByZXEtPm51bV9wYWdlcyA8PCBQQUdFX0NBQ0hFX1NISUZUOworCXJlcS0+b3V0LnBhZ2VfemVyb2luZyA9IDE7CisJcmVxLT5lbmQgPSBmdXNlX3JlYWRwYWdlc19lbmQ7CisJZnVzZV9yZWFkX2ZpbGwocmVxLCBmaWxlLCBpbm9kZSwgcG9zLCBjb3VudCwgRlVTRV9SRUFEKTsKKwlyZXF1ZXN0X3NlbmRfYmFja2dyb3VuZChmYywgcmVxKTsKIH0KIAogc3RydWN0IGZ1c2VfcmVhZHBhZ2VzX2RhdGEgewpAQCAtMzM4LDEyICszNTcsMTIgQEAKIAkgICAgKHJlcS0+bnVtX3BhZ2VzID09IEZVU0VfTUFYX1BBR0VTX1BFUl9SRVEgfHwKIAkgICAgIChyZXEtPm51bV9wYWdlcyArIDEpICogUEFHRV9DQUNIRV9TSVpFID4gZmMtPm1heF9yZWFkIHx8CiAJICAgICByZXEtPnBhZ2VzW3JlcS0+bnVtX3BhZ2VzIC0gMV0tPmluZGV4ICsgMSAhPSBwYWdlLT5pbmRleCkpIHsKLQkJaW50IGVyciA9IGZ1c2Vfc2VuZF9yZWFkcGFnZXMocmVxLCBkYXRhLT5maWxlLCBpbm9kZSk7Ci0JCWlmIChlcnIpIHsKKwkJZnVzZV9zZW5kX3JlYWRwYWdlcyhyZXEsIGRhdGEtPmZpbGUsIGlub2RlKTsKKwkJZGF0YS0+cmVxID0gcmVxID0gZnVzZV9nZXRfcmVxdWVzdChmYyk7CisJCWlmICghcmVxKSB7CiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJCXJldHVybiBlcnI7CisJCQlyZXR1cm4gLUVJTlRSOwogCQl9Ci0JCWZ1c2VfcmVzZXRfcmVxdWVzdChyZXEpOwogCX0KIAlyZXEtPnBhZ2VzW3JlcS0+bnVtX3BhZ2VzXSA9IHBhZ2U7CiAJcmVxLT5udW1fcGFnZXMgKys7CkBAIC0zNjgsMTAgKzM4Nyw4IEBACiAJCXJldHVybiAtRUlOVFI7CiAKIAllcnIgPSByZWFkX2NhY2hlX3BhZ2VzKG1hcHBpbmcsIHBhZ2VzLCBmdXNlX3JlYWRwYWdlc19maWxsLCAmZGF0YSk7Ci0JaWYgKCFlcnIgJiYgZGF0YS5yZXEtPm51bV9wYWdlcykKLQkJZXJyID0gZnVzZV9zZW5kX3JlYWRwYWdlcyhkYXRhLnJlcSwgZmlsZSwgaW5vZGUpOwotCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIGRhdGEucmVxKTsKLQlmdXNlX2ludmFsaWRhdGVfYXR0cihpbm9kZSk7IC8qIGF0aW1lIGNoYW5nZWQgKi8KKwlpZiAoIWVycikKKwkJZnVzZV9zZW5kX3JlYWRwYWdlcyhkYXRhLnJlcSwgZmlsZSwgaW5vZGUpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZnVzZV9pLmggYi9mcy9mdXNlL2Z1c2VfaS5oCmluZGV4IDc0YzhkMDkuLjQ2Y2Y5MzMgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZnVzZV9pLmgKKysrIGIvZnMvZnVzZS9mdXNlX2kuaApAQCAtOTQsNiArOTQsMTEgQEAKIAkvKiogSGVhZGVyIHJldHVybmVkIGZyb20gdXNlcnNwYWNlICovCiAJc3RydWN0IGZ1c2Vfb3V0X2hlYWRlciBoOwogCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGJpdGZpZWxkcyBhcmUgbm90IGNoYW5nZWQgZHVyaW5nIHRoZSByZXF1ZXN0CisJICogcHJvY2Vzc2luZworCSAqLworCiAJLyoqIExhc3QgYXJndW1lbnQgaXMgdmFyaWFibGUgbGVuZ3RoIChjYW4gYmUgc2hvcnRlciB0aGFuCiAJICAgIGFyZy0+c2l6ZSkgKi8KIAl1bnNpZ25lZCBhcmd2YXI6MTsKQEAgLTExMSwxMiArMTE2LDIzIEBACiAJc3RydWN0IGZ1c2VfYXJnIGFyZ3NbM107CiB9OwogCisvKiogVGhlIHJlcXVlc3Qgc3RhdGUgKi8KK2VudW0gZnVzZV9yZXFfc3RhdGUgeworCUZVU0VfUkVRX0lOSVQgPSAwLAorCUZVU0VfUkVRX1BFTkRJTkcsCisJRlVTRV9SRVFfUkVBRElORywKKwlGVVNFX1JFUV9TRU5ULAorCUZVU0VfUkVRX0ZJTklTSEVECit9OworCitzdHJ1Y3QgZnVzZV9jb25uOworCiAvKioKICAqIEEgcmVxdWVzdCB0byB0aGUgY2xpZW50CiAgKi8KIHN0cnVjdCBmdXNlX3JlcSB7Ci0JLyoqIFRoaXMgY2FuIGJlIG9uIGVpdGhlciB1bnVzZWRfbGlzdCwgcGVuZGluZyBvciBwcm9jZXNzaW5nCi0JICAgIGxpc3RzIGluIGZ1c2VfY29ubiAqLworCS8qKiBUaGlzIGNhbiBiZSBvbiBlaXRoZXIgdW51c2VkX2xpc3QsIHBlbmRpbmcgcHJvY2Vzc2luZyBvcgorCSAgICBpbyBsaXN0cyBpbiBmdXNlX2Nvbm4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKIAkvKiogRW50cnkgb24gdGhlIGJhY2tncm91bmQgbGlzdCAqLwpAQCAtMTI1LDYgKzE0MSwxMiBAQAogCS8qKiByZWZjb3VudCAqLwogCWF0b21pY190IGNvdW50OwogCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGJpdGZpZWxkcyBhcmUgZWl0aGVyIHNldCBvbmNlIGJlZm9yZSB0aGUKKwkgKiByZXF1ZXN0IGlzIHF1ZXVlZCBvciBzZXR0aW5nL2NsZWFyaW5nIHRoZW0gaXMgcHJvdGVjdGVkIGJ5CisJICogZnVzZV9sb2NrCisJICovCisKIAkvKiogVHJ1ZSBpZiB0aGUgcmVxdWVzdCBoYXMgcmVwbHkgKi8KIAl1bnNpZ25lZCBpc3JlcGx5OjE7CiAKQEAgLTE0MCwxMSArMTYyLDggQEAKIAkvKiogRGF0YSBpcyBiZWluZyBjb3BpZWQgdG8vZnJvbSB0aGUgcmVxdWVzdCAqLwogCXVuc2lnbmVkIGxvY2tlZDoxOwogCi0JLyoqIFJlcXVlc3QgaGFzIGJlZW4gc2VudCB0byB1c2Vyc3BhY2UgKi8KLQl1bnNpZ25lZCBzZW50OjE7Ci0KLQkvKiogVGhlIHJlcXVlc3QgaXMgZmluaXNoZWQgKi8KLQl1bnNpZ25lZCBmaW5pc2hlZDoxOworCS8qKiBTdGF0ZSBvZiB0aGUgcmVxdWVzdCAqLworCWVudW0gZnVzZV9yZXFfc3RhdGUgc3RhdGU7CiAKIAkvKiogVGhlIHJlcXVlc3QgaW5wdXQgKi8KIAlzdHJ1Y3QgZnVzZV9pbiBpbjsKQEAgLTE2MSw2ICsxODAsNyBAQAogCQlzdHJ1Y3QgZnVzZV9yZWxlYXNlX2luIHJlbGVhc2VfaW47CiAJCXN0cnVjdCBmdXNlX2luaXRfaW4gaW5pdF9pbjsKIAkJc3RydWN0IGZ1c2VfaW5pdF9vdXQgaW5pdF9vdXQ7CisJCXN0cnVjdCBmdXNlX3JlYWRfaW4gcmVhZF9pbjsKIAl9IG1pc2M7CiAKIAkvKiogcGFnZSB2ZWN0b3IgKi8KQEAgLTE4MCw2ICsyMDAsOSBAQAogCiAJLyoqIEZpbGUgdXNlZCBpbiB0aGUgcmVxdWVzdCAob3IgTlVMTCkgKi8KIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKKworCS8qKiBSZXF1ZXN0IGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwl2b2lkICgqZW5kKShzdHJ1Y3QgZnVzZV9jb25uICosIHN0cnVjdCBmdXNlX3JlcSAqKTsKIH07CiAKIC8qKgpAQCAtMTkwLDkgKzIxMyw2IEBACiAgKiB1bm1vdW50ZWQuCiAgKi8KIHN0cnVjdCBmdXNlX2Nvbm4gewotCS8qKiBSZWZlcmVuY2UgY291bnQgKi8KLQlpbnQgY291bnQ7Ci0KIAkvKiogVGhlIHVzZXIgaWQgZm9yIHRoaXMgbW91bnQgKi8KIAl1aWRfdCB1c2VyX2lkOwogCkBAIC0yMTcsNiArMjM3LDkgQEAKIAkvKiogVGhlIGxpc3Qgb2YgcmVxdWVzdHMgYmVpbmcgcHJvY2Vzc2VkICovCiAJc3RydWN0IGxpc3RfaGVhZCBwcm9jZXNzaW5nOwogCisJLyoqIFRoZSBsaXN0IG9mIHJlcXVlc3RzIHVuZGVyIEkvTyAqLworCXN0cnVjdCBsaXN0X2hlYWQgaW87CisKIAkvKiogUmVxdWVzdHMgcHV0IGluIHRoZSBiYWNrZ3JvdW5kIChSRUxFQVNFIG9yIGFueSBvdGhlcgogCSAgICBpbnRlcnJ1cHRlZCByZXF1ZXN0KSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgYmFja2dyb3VuZDsKQEAgLTIzOCwxNCArMjYxLDIyIEBACiAJdTY0IHJlcWN0cjsKIAogCS8qKiBNb3VudCBpcyBhY3RpdmUgKi8KLQl1bnNpZ25lZCBtb3VudGVkIDogMTsKKwl1bnNpZ25lZCBtb3VudGVkOwogCi0JLyoqIENvbm5lY3Rpb24gZXN0YWJsaXNoZWQgKi8KLQl1bnNpZ25lZCBjb25uZWN0ZWQgOiAxOworCS8qKiBDb25uZWN0aW9uIGVzdGFibGlzaGVkLCBjbGVhcmVkIG9uIHVtb3VudCwgY29ubmVjdGlvbgorCSAgICBhYm9ydCBhbmQgZGV2aWNlIHJlbGVhc2UgKi8KKwl1bnNpZ25lZCBjb25uZWN0ZWQ7CiAKLQkvKiogQ29ubmVjdGlvbiBmYWlsZWQgKHZlcnNpb24gbWlzbWF0Y2gpICovCisJLyoqIENvbm5lY3Rpb24gZmFpbGVkICh2ZXJzaW9uIG1pc21hdGNoKS4gIENhbm5vdCByYWNlIHdpdGgKKwkgICAgc2V0dGluZyBvdGhlciBiaXRmaWVsZHMgc2luY2UgaXQgaXMgb25seSBzZXQgb25jZSBpbiBJTklUCisJICAgIHJlcGx5LCBiZWZvcmUgYW55IG90aGVyIHJlcXVlc3QsIGFuZCBuZXZlciBjbGVhcmVkICovCiAJdW5zaWduZWQgY29ubl9lcnJvciA6IDE7CiAKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgYml0ZmllbGRzIGFyZSBvbmx5IGZvciBvcHRpbWl6YXRpb24gcHVycG9zZXMKKwkgKiBhbmQgaGVuY2UgcmFjZXMgaW4gc2V0dGluZyB0aGVtIHdpbGwgbm90IGNhdXNlIG1hbGZ1bmN0aW9uCisJICovCisKIAkvKiogSXMgZnN5bmMgbm90IGltcGxlbWVudGVkIGJ5IGZzPyAqLwogCXVuc2lnbmVkIG5vX2ZzeW5jIDogMTsKIApAQCAtMjczLDIxICszMDQsMjIgQEAKIAkvKiogSXMgY3JlYXRlIG5vdCBpbXBsZW1lbnRlZCBieSBmcz8gKi8KIAl1bnNpZ25lZCBub19jcmVhdGUgOiAxOwogCisJLyoqIFRoZSBudW1iZXIgb2YgcmVxdWVzdHMgd2FpdGluZyBmb3IgY29tcGxldGlvbiAqLworCWF0b21pY190IG51bV93YWl0aW5nOworCiAJLyoqIE5lZ290aWF0ZWQgbWlub3IgdmVyc2lvbiAqLwogCXVuc2lnbmVkIG1pbm9yOwogCiAJLyoqIEJhY2tpbmcgZGV2IGluZm8gKi8KIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBiZGk7Ci19OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBmdXNlX2Nvbm4gKipnZXRfZnVzZV9jb25uX3N1cGVyX3Aoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlyZXR1cm4gKHN0cnVjdCBmdXNlX2Nvbm4gKiopICZzYi0+c19mc19pbmZvOwotfQorCS8qKiBrb2JqZWN0ICovCisJc3RydWN0IGtvYmplY3Qga29iajsKK307CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZ1c2VfY29ubiAqZ2V0X2Z1c2VfY29ubl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXJldHVybiAqZ2V0X2Z1c2VfY29ubl9zdXBlcl9wKHNiKTsKKwlyZXR1cm4gc2ItPnNfZnNfaW5mbzsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZnVzZV9jb25uICpnZXRfZnVzZV9jb25uKHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC0yOTUsNiArMzI3LDExIEBACiAJcmV0dXJuIGdldF9mdXNlX2Nvbm5fc3VwZXIoaW5vZGUtPmlfc2IpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmdXNlX2Nvbm4gKmdldF9mdXNlX2Nvbm5fa29iaihzdHJ1Y3Qga29iamVjdCAqb2JqKQoreworCXJldHVybiBjb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgZnVzZV9jb25uLCBrb2JqKTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgZnVzZV9pbm9kZSAqZ2V0X2Z1c2VfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgZnVzZV9pbm9kZSwgaW5vZGUpOwpAQCAtMzM2LDExICszNzMsMTAgQEAKIAkJICAgICAgdW5zaWduZWQgbG9uZyBub2RlaWQsIHU2NCBubG9va3VwKTsKIAogLyoqCi0gKiBTZW5kIFJFQUQgb3IgUkVBRERJUiByZXF1ZXN0CisgKiBJbml0aWFsaXplIFJFQUQgb3IgUkVBRERJUiByZXF1ZXN0CiAgKi8KLXNpemVfdCBmdXNlX3NlbmRfcmVhZF9jb21tb24oc3RydWN0IGZ1c2VfcmVxICpyZXEsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQsCi0JCQkgICAgIGludCBpc2Rpcik7Cit2b2lkIGZ1c2VfcmVhZF9maWxsKHN0cnVjdCBmdXNlX3JlcSAqcmVxLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCwgaW50IG9wY29kZSk7CiAKIC8qKgogICogU2VuZCBPUEVOIG9yIE9QRU5ESVIgcmVxdWVzdApAQCAtMzk1LDEyICs0MzEsNiBAQAogdm9pZCBmdXNlX2NoYW5nZV9hdHRyaWJ1dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmdXNlX2F0dHIgKmF0dHIpOwogCiAvKioKLSAqIENoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGNhbiBiZSByZWxlYXNlZCwgYW5kIGlmIHllcywgdGhlbiBmcmVlIHRoZQotICogY29ubmVjdGlvbiBzdHJ1Y3R1cmUKLSAqLwotdm9pZCBmdXNlX3JlbGVhc2VfY29ubihzdHJ1Y3QgZnVzZV9jb25uICpmYyk7Ci0KLS8qKgogICogSW5pdGlhbGl6ZSB0aGUgY2xpZW50IGRldmljZQogICovCiBpbnQgZnVzZV9kZXZfaW5pdCh2b2lkKTsKQEAgLTQ1Niw2ICs0ODYsOSBAQAogICovCiB2b2lkIGZ1c2VfcmVsZWFzZV9iYWNrZ3JvdW5kKHN0cnVjdCBmdXNlX3JlcSAqcmVxKTsKIAorLyogQWJvcnQgYWxsIHJlcXVlc3RzICovCit2b2lkIGZ1c2VfYWJvcnRfY29ubihzdHJ1Y3QgZnVzZV9jb25uICpmYyk7CisKIC8qKgogICogR2V0IHRoZSBhdHRyaWJ1dGVzIG9mIGEgZmlsZQogICovCkBAIC00NjUsOCArNDk4LDMgQEAKICAqIEludmFsaWRhdGUgaW5vZGUgYXR0cmlidXRlcwogICovCiB2b2lkIGZ1c2VfaW52YWxpZGF0ZV9hdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotCi0vKioKLSAqIFNlbmQgdGhlIElOSVQgbWVzc2FnZQotICovCi12b2lkIGZ1c2Vfc2VuZF9pbml0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjKTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCAwNGM4MGNjLi5jNzU1YTA0IDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC0yNCw2ICsyNCwxMyBAQAogCiBzcGlubG9ja190IGZ1c2VfbG9jazsKIHN0YXRpYyBrbWVtX2NhY2hlX3QgKmZ1c2VfaW5vZGVfY2FjaGVwOworc3RhdGljIHN0cnVjdCBzdWJzeXN0ZW0gY29ubmVjdGlvbnNfc3Vic3lzOworCitzdHJ1Y3QgZnVzZV9jb25uX2F0dHIgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGZ1c2VfY29ubiAqLCBjaGFyICopOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGZ1c2VfY29ubiAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Cit9OwogCiAjZGVmaW5lIEZVU0VfU1VQRVJfTUFHSUMgMHg2NTczNTU0NgogCkBAIC0xODksNiArMTk2LDExIEBACiAJcmV0dXJuIGlub2RlOwogfQogCitzdGF0aWMgdm9pZCBmdXNlX3Vtb3VudF9iZWdpbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWZ1c2VfYWJvcnRfY29ubihnZXRfZnVzZV9jb25uX3N1cGVyKHNiKSk7Cit9CisKIHN0YXRpYyB2b2lkIGZ1c2VfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uX3N1cGVyKHNiKTsKQEAgLTIwMCwxNCArMjEyLDEzIEBACiAKIAlzcGluX2xvY2soJmZ1c2VfbG9jayk7CiAJZmMtPm1vdW50ZWQgPSAwOwotCWZjLT51c2VyX2lkID0gMDsKLQlmYy0+Z3JvdXBfaWQgPSAwOwotCWZjLT5mbGFncyA9IDA7CisJZmMtPmNvbm5lY3RlZCA9IDA7CisJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJdXBfd3JpdGUoJmZjLT5zYnB1dF9zZW0pOwogCS8qIEZsdXNoIGFsbCByZWFkZXJzIG9uIHRoaXMgZnMgKi8KIAl3YWtlX3VwX2FsbCgmZmMtPndhaXRxKTsKLQl1cF93cml0ZSgmZmMtPnNicHV0X3NlbSk7Ci0JZnVzZV9yZWxlYXNlX2Nvbm4oZmMpOwotCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCWtvYmplY3RfZGVsKCZmYy0+a29iaik7CisJa29iamVjdF9wdXQoJmZjLT5rb2JqKTsKIH0KIAogc3RhdGljIHZvaWQgY29udmVydF9mdXNlX3N0YXRmcyhzdHJ1Y3Qga3N0YXRmcyAqc3RidWYsIHN0cnVjdCBmdXNlX2tzdGF0ZnMgKmF0dHIpCkBAIC0zNTYsOCArMzY3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfY29ubihzdHJ1Y3QgZnVzZV9jb25uICpmYykKK3N0YXRpYyB2b2lkIGZ1c2VfY29ubl9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQogeworCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubl9rb2JqKGtvYmopOworCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZmYy0+dW51c2VkX2xpc3QpKSB7CiAJCXN0cnVjdCBmdXNlX3JlcSAqcmVxOwogCQlyZXEgPSBsaXN0X2VudHJ5KGZjLT51bnVzZWRfbGlzdC5uZXh0LCBzdHJ1Y3QgZnVzZV9yZXEsIGxpc3QpOwpAQCAtMzY3LDMzICszODAsMjggQEAKIAlrZnJlZShmYyk7CiB9CiAKLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGZ1c2UgbG9jayBoZWxkICovCi12b2lkIGZ1c2VfcmVsZWFzZV9jb25uKHN0cnVjdCBmdXNlX2Nvbm4gKmZjKQotewotCWZjLT5jb3VudC0tOwotCWlmICghZmMtPmNvdW50KQotCQlmcmVlX2Nvbm4oZmMpOwotfQotCiBzdGF0aWMgc3RydWN0IGZ1c2VfY29ubiAqbmV3X2Nvbm4odm9pZCkKIHsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYzsKIAotCWZjID0ga21hbGxvYyhzaXplb2YoKmZjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGZjICE9IE5VTEwpIHsKKwlmYyA9IGt6YWxsb2Moc2l6ZW9mKCpmYyksIEdGUF9LRVJORUwpOworCWlmIChmYykgewogCQlpbnQgaTsKLQkJbWVtc2V0KGZjLCAwLCBzaXplb2YoKmZjKSk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZjLT53YWl0cSk7CiAJCUlOSVRfTElTVF9IRUFEKCZmYy0+cGVuZGluZyk7CiAJCUlOSVRfTElTVF9IRUFEKCZmYy0+cHJvY2Vzc2luZyk7CisJCUlOSVRfTElTVF9IRUFEKCZmYy0+aW8pOwogCQlJTklUX0xJU1RfSEVBRCgmZmMtPnVudXNlZF9saXN0KTsKIAkJSU5JVF9MSVNUX0hFQUQoJmZjLT5iYWNrZ3JvdW5kKTsKLQkJc2VtYV9pbml0KCZmYy0+b3V0c3RhbmRpbmdfc2VtLCAwKTsKKwkJc2VtYV9pbml0KCZmYy0+b3V0c3RhbmRpbmdfc2VtLCAxKTsgLyogT25lIGZvciBJTklUICovCiAJCWluaXRfcndzZW0oJmZjLT5zYnB1dF9zZW0pOworCQlrb2JqX3NldF9rc2V0X3MoZmMsIGNvbm5lY3Rpb25zX3N1YnN5cyk7CisJCWtvYmplY3RfaW5pdCgmZmMtPmtvYmopOworCQlhdG9taWNfc2V0KCZmYy0+bnVtX3dhaXRpbmcsIDApOwogCQlmb3IgKGkgPSAwOyBpIDwgRlVTRV9NQVhfT1VUU1RBTkRJTkc7IGkrKykgewogCQkJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX3JlcXVlc3RfYWxsb2MoKTsKIAkJCWlmICghcmVxKSB7Ci0JCQkJZnJlZV9jb25uKGZjKTsKKwkJCQlrb2JqZWN0X3B1dCgmZmMtPmtvYmopOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQkJbGlzdF9hZGQoJnJlcS0+bGlzdCwgJmZjLT51bnVzZWRfbGlzdCk7CkBAIC00MDgsMjUgKzQxNiwzMiBAQAogc3RhdGljIHN0cnVjdCBmdXNlX2Nvbm4gKmdldF9jb25uKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjOworCWludCBlcnI7CiAKKwllcnIgPSAtRUlOVkFMOwogCWlmIChmaWxlLT5mX29wICE9ICZmdXNlX2Rldl9vcGVyYXRpb25zKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byBvdXRfZXJyOworCisJZXJyID0gLUVOT01FTTsKIAlmYyA9IG5ld19jb25uKCk7Ci0JaWYgKGZjID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWlmICghZmMpCisJCWdvdG8gb3V0X2VycjsKKwogCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhKSB7Ci0JCWZyZWVfY29ubihmYyk7Ci0JCWZjID0gRVJSX1BUUigtRUlOVkFMKTsKLQl9IGVsc2UgewotCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBmYzsKLQkJKmdldF9mdXNlX2Nvbm5fc3VwZXJfcChzYikgPSBmYzsKLQkJZmMtPm1vdW50ZWQgPSAxOwotCQlmYy0+Y29ubmVjdGVkID0gMTsKLQkJZmMtPmNvdW50ID0gMjsKLQl9CisJZXJyID0gLUVJTlZBTDsKKwlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlrb2JqZWN0X2dldCgmZmMtPmtvYmopOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZjOwogCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOwogCXJldHVybiBmYzsKKworIG91dF91bmxvY2s6CisJc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJa29iamVjdF9wdXQoJmZjLT5rb2JqKTsKKyBvdXRfZXJyOgorCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmdldF9yb290X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIG1vZGUpCkBAIC00NDUsMTYgKzQ2MCw3NCBAQAogCS5yZWFkX2lub2RlCT0gZnVzZV9yZWFkX2lub2RlLAogCS5jbGVhcl9pbm9kZQk9IGZ1c2VfY2xlYXJfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IGZ1c2VfcHV0X3N1cGVyLAorCS51bW91bnRfYmVnaW4JPSBmdXNlX3Vtb3VudF9iZWdpbiwKIAkuc3RhdGZzCQk9IGZ1c2Vfc3RhdGZzLAogCS5zaG93X29wdGlvbnMJPSBmdXNlX3Nob3dfb3B0aW9ucywKIH07CiAKK3N0YXRpYyB2b2lkIHByb2Nlc3NfaW5pdF9yZXBseShzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCit7CisJaW50IGk7CisJc3RydWN0IGZ1c2VfaW5pdF9vdXQgKmFyZyA9ICZyZXEtPm1pc2MuaW5pdF9vdXQ7CisKKwlpZiAocmVxLT5vdXQuaC5lcnJvciB8fCBhcmctPm1ham9yICE9IEZVU0VfS0VSTkVMX1ZFUlNJT04pCisJCWZjLT5jb25uX2Vycm9yID0gMTsKKwllbHNlIHsKKwkJZmMtPm1pbm9yID0gYXJnLT5taW5vcjsKKwkJZmMtPm1heF93cml0ZSA9IGFyZy0+bWlub3IgPCA1ID8gNDA5NiA6IGFyZy0+bWF4X3dyaXRlOworCX0KKworCS8qIEFmdGVyIElOSVQgcmVwbHkgaXMgcmVjZWl2ZWQgb3RoZXIgcmVxdWVzdHMgY2FuIGdvCisJICAgb3V0LiAgU28gZG8gKEZVU0VfTUFYX09VVFNUQU5ESU5HIC0gMSkgbnVtYmVyIG9mCisJICAgdXAoKXMgb24gb3V0c3RhbmRpbmdfc2VtLiAgVGhlIGxhc3QgdXAoKSBpcyBkb25lIGluCisJICAgZnVzZV9wdXRiYWNrX3JlcXVlc3QoKSAqLworCWZvciAoaSA9IDE7IGkgPCBGVVNFX01BWF9PVVRTVEFORElORzsgaSsrKQorCQl1cCgmZmMtPm91dHN0YW5kaW5nX3NlbSk7CisKKwlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOworfQorCitzdGF0aWMgdm9pZCBmdXNlX3NlbmRfaW5pdChzdHJ1Y3QgZnVzZV9jb25uICpmYykKK3sKKwkvKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGZ1c2VfcmVhZF9zdXBlcigpIHNvIHRoZXJlJ3MgZ3VhcmFudGVlZAorCSAgIHRvIGJlIGV4YWN0bHkgb25lIHJlcXVlc3QgYXZhaWxhYmxlICovCisJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXF1ZXN0KGZjKTsKKwlzdHJ1Y3QgZnVzZV9pbml0X2luICphcmcgPSAmcmVxLT5taXNjLmluaXRfaW47CisKKwlhcmctPm1ham9yID0gRlVTRV9LRVJORUxfVkVSU0lPTjsKKwlhcmctPm1pbm9yID0gRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTjsKKwlyZXEtPmluLmgub3Bjb2RlID0gRlVTRV9JTklUOworCXJlcS0+aW4ubnVtYXJncyA9IDE7CisJcmVxLT5pbi5hcmdzWzBdLnNpemUgPSBzaXplb2YoKmFyZyk7CisJcmVxLT5pbi5hcmdzWzBdLnZhbHVlID0gYXJnOworCXJlcS0+b3V0Lm51bWFyZ3MgPSAxOworCS8qIFZhcmlhYmxlIGxlbmd0aCBhcmd1ZW1lbnQgdXNlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorCSAgIHdpdGggaW50ZXJmYWNlIHZlcnNpb24gPCA3LjUuICBSZXN0IG9mIGluaXRfb3V0IGlzIHplcm9lZAorCSAgIGJ5IGRvX2dldF9yZXF1ZXN0KCksIHNvIGEgc2hvcnQgcmVwbHkgaXMgbm90IGEgcHJvYmxlbSAqLworCXJlcS0+b3V0LmFyZ3ZhciA9IDE7CisJcmVxLT5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKHN0cnVjdCBmdXNlX2luaXRfb3V0KTsKKwlyZXEtPm91dC5hcmdzWzBdLnZhbHVlID0gJnJlcS0+bWlzYy5pbml0X291dDsKKwlyZXEtPmVuZCA9IHByb2Nlc3NfaW5pdF9yZXBseTsKKwlyZXF1ZXN0X3NlbmRfYmFja2dyb3VuZChmYywgcmVxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBjb25uX2lkKHZvaWQpCit7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBjdHIgPSAxOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJc3Bpbl9sb2NrKCZmdXNlX2xvY2spOworCXZhbCA9IGN0cisrOworCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCXJldHVybiB2YWw7Cit9CisKIHN0YXRpYyBpbnQgZnVzZV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCiB7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmM7CiAJc3RydWN0IGlub2RlICpyb290OwogCXN0cnVjdCBmdXNlX21vdW50X2RhdGEgZDsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeTsKIAlpbnQgZXJyOwogCiAJaWYgKCFwYXJzZV9mdXNlX29wdCgoY2hhciAqKSBkYXRhLCAmZCkpCkBAIC00ODIsMjMgKzU1NSw0MiBAQAogCWlmIChmYy0+bWF4X3JlYWQgLyBQQUdFX0NBQ0hFX1NJWkUgPCBmYy0+YmRpLnJhX3BhZ2VzKQogCQlmYy0+YmRpLnJhX3BhZ2VzID0gZmMtPm1heF9yZWFkIC8gUEFHRV9DQUNIRV9TSVpFOwogCisJLyogVXNlZCBieSBnZXRfcm9vdF9pbm9kZSgpICovCisJc2ItPnNfZnNfaW5mbyA9IGZjOworCiAJZXJyID0gLUVOT01FTTsKIAlyb290ID0gZ2V0X3Jvb3RfaW5vZGUoc2IsIGQucm9vdG1vZGUpOwotCWlmIChyb290ID09IE5VTEwpCisJaWYgKCFyb290KQogCQlnb3RvIGVycjsKIAotCXNiLT5zX3Jvb3QgPSBkX2FsbG9jX3Jvb3Qocm9vdCk7Ci0JaWYgKCFzYi0+c19yb290KSB7CisJcm9vdF9kZW50cnkgPSBkX2FsbG9jX3Jvb3Qocm9vdCk7CisJaWYgKCFyb290X2RlbnRyeSkgewogCQlpcHV0KHJvb3QpOwogCQlnb3RvIGVycjsKIAl9CisKKwllcnIgPSBrb2JqZWN0X3NldF9uYW1lKCZmYy0+a29iaiwgIiVsbHUiLCBjb25uX2lkKCkpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3B1dF9yb290OworCisJZXJyID0ga29iamVjdF9hZGQoJmZjLT5rb2JqKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9wdXRfcm9vdDsKKworCXNiLT5zX3Jvb3QgPSByb290X2RlbnRyeTsKKwlzcGluX2xvY2soJmZ1c2VfbG9jayk7CisJZmMtPm1vdW50ZWQgPSAxOworCWZjLT5jb25uZWN0ZWQgPSAxOworCXNwaW5fdW5sb2NrKCZmdXNlX2xvY2spOworCiAJZnVzZV9zZW5kX2luaXQoZmMpOworCiAJcmV0dXJuIDA7CiAKKyBlcnJfcHV0X3Jvb3Q6CisJZHB1dChyb290X2RlbnRyeSk7CiAgZXJyOgotCXNwaW5fbG9jaygmZnVzZV9sb2NrKTsKLQlmdXNlX3JlbGVhc2VfY29ubihmYyk7Ci0Jc3Bpbl91bmxvY2soJmZ1c2VfbG9jayk7CisJa29iamVjdF9wdXQoJmZjLT5rb2JqKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC01MTYsNiArNjA4LDY5IEBACiAJLmtpbGxfc2IJPSBraWxsX2Fub25fc3VwZXIsCiB9OwogCitzdGF0aWMgc3NpemVfdCBmdXNlX2Nvbm5fd2FpdGluZ19zaG93KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBjaGFyICpwYWdlKQoreworCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlaVxuIiwgYXRvbWljX3JlYWQoJmZjLT5udW1fd2FpdGluZykpOworfQorCitzdGF0aWMgc3NpemVfdCBmdXNlX2Nvbm5fYWJvcnRfc3RvcmUoc3RydWN0IGZ1c2VfY29ubiAqZmMsIGNvbnN0IGNoYXIgKnBhZ2UsCisJCQkJICAgICBzaXplX3QgY291bnQpCit7CisJZnVzZV9hYm9ydF9jb25uKGZjKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnVzZV9jb25uX2F0dHIgZnVzZV9jb25uX3dhaXRpbmcgPQorCV9fQVRUUih3YWl0aW5nLCAwNDAwLCBmdXNlX2Nvbm5fd2FpdGluZ19zaG93LCBOVUxMKTsKK3N0YXRpYyBzdHJ1Y3QgZnVzZV9jb25uX2F0dHIgZnVzZV9jb25uX2Fib3J0ID0KKwlfX0FUVFIoYWJvcnQsIDA2MDAsIE5VTEwsIGZ1c2VfY29ubl9hYm9ydF9zdG9yZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmdXNlX2Nvbm5fYXR0cnNbXSA9IHsKKwkmZnVzZV9jb25uX3dhaXRpbmcuYXR0ciwKKwkmZnVzZV9jb25uX2Fib3J0LmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzc2l6ZV90IGZ1c2VfY29ubl9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICBjaGFyICpwYWdlKQoreworCXN0cnVjdCBmdXNlX2Nvbm5fYXR0ciAqZmNhID0KKwkJY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBmdXNlX2Nvbm5fYXR0ciwgYXR0cik7CisKKwlpZiAoZmNhLT5zaG93KQorCQlyZXR1cm4gZmNhLT5zaG93KGdldF9mdXNlX2Nvbm5fa29iaihrb2JqKSwgcGFnZSk7CisJZWxzZQorCQlyZXR1cm4gLUVBQ0NFUzsKK30KKworc3RhdGljIHNzaXplX3QgZnVzZV9jb25uX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZnVzZV9jb25uX2F0dHIgKmZjYSA9CisJCWNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZnVzZV9jb25uX2F0dHIsIGF0dHIpOworCisJaWYgKGZjYS0+c3RvcmUpCisJCXJldHVybiBmY2EtPnN0b3JlKGdldF9mdXNlX2Nvbm5fa29iaihrb2JqKSwgcGFnZSwgY291bnQpOworCWVsc2UKKwkJcmV0dXJuIC1FQUNDRVM7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGZ1c2VfY29ubl9zeXNmc19vcHMgPSB7CisJLnNob3cJPSAmZnVzZV9jb25uX2F0dHJfc2hvdywKKwkuc3RvcmUJPSAmZnVzZV9jb25uX2F0dHJfc3RvcmUsCit9OworCitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBrdHlwZV9mdXNlX2Nvbm4gPSB7CisJLnJlbGVhc2UJPSBmdXNlX2Nvbm5fcmVsZWFzZSwKKwkuc3lzZnNfb3BzCT0gJmZ1c2VfY29ubl9zeXNmc19vcHMsCisJLmRlZmF1bHRfYXR0cnMJPSBmdXNlX2Nvbm5fYXR0cnMsCit9OworCitzdGF0aWMgZGVjbF9zdWJzeXMoZnVzZSwgTlVMTCwgTlVMTCk7CitzdGF0aWMgZGVjbF9zdWJzeXMoY29ubmVjdGlvbnMsICZrdHlwZV9mdXNlX2Nvbm4sIE5VTEwpOworCiBzdGF0aWMgdm9pZCBmdXNlX2lub2RlX2luaXRfb25jZSh2b2lkICpmb28sIGttZW1fY2FjaGVfdCAqY2FjaGVwLAogCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpAQCAtNTUzLDYgKzcwOCwzNCBAQAogCWttZW1fY2FjaGVfZGVzdHJveShmdXNlX2lub2RlX2NhY2hlcCk7CiB9CiAKK3N0YXRpYyBpbnQgZnVzZV9zeXNmc19pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWtzZXRfc2V0X2tzZXRfcygmZnVzZV9zdWJzeXMsIGZzX3N1YnN5cyk7CisJZXJyID0gc3Vic3lzdGVtX3JlZ2lzdGVyKCZmdXNlX3N1YnN5cyk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZXJyOworCisJa3NldF9zZXRfa3NldF9zKCZjb25uZWN0aW9uc19zdWJzeXMsIGZ1c2Vfc3Vic3lzKTsKKwllcnIgPSBzdWJzeXN0ZW1fcmVnaXN0ZXIoJmNvbm5lY3Rpb25zX3N1YnN5cyk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZnVzZV91bnJlZ2lzdGVyOworCisJcmV0dXJuIDA7CisKKyBvdXRfZnVzZV91bnJlZ2lzdGVyOgorCXN1YnN5c3RlbV91bnJlZ2lzdGVyKCZmdXNlX3N1YnN5cyk7Cisgb3V0X2VycjoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBmdXNlX3N5c2ZzX2NsZWFudXAodm9pZCkKK3sKKwlzdWJzeXN0ZW1fdW5yZWdpc3RlcigmY29ubmVjdGlvbnNfc3Vic3lzKTsKKwlzdWJzeXN0ZW1fdW5yZWdpc3RlcigmZnVzZV9zdWJzeXMpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBmdXNlX2luaXQodm9pZCkKIHsKIAlpbnQgcmVzOwpAQCAtNTY5LDggKzc1MiwxNCBAQAogCWlmIChyZXMpCiAJCWdvdG8gZXJyX2ZzX2NsZWFudXA7CiAKKwlyZXMgPSBmdXNlX3N5c2ZzX2luaXQoKTsKKwlpZiAocmVzKQorCQlnb3RvIGVycl9kZXZfY2xlYW51cDsKKwogCXJldHVybiAwOwogCisgZXJyX2Rldl9jbGVhbnVwOgorCWZ1c2VfZGV2X2NsZWFudXAoKTsKICBlcnJfZnNfY2xlYW51cDoKIAlmdXNlX2ZzX2NsZWFudXAoKTsKICBlcnI6CkBAIC01ODEsNiArNzcwLDcgQEAKIHsKIAlwcmludGsoS0VSTl9ERUJVRyAiZnVzZSBleGl0XG4iKTsKIAorCWZ1c2Vfc3lzZnNfY2xlYW51cCgpOwogCWZ1c2VfZnNfY2xlYW51cCgpOwogCWZ1c2VfZGV2X2NsZWFudXAoKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggOGJjMTViMy4uY2U5N2JlYyAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTQ4LDYgKzQ4LDEwIEBACiBzdGF0aWMga21lbV9jYWNoZV90ICptbnRfY2FjaGU7CiBzdGF0aWMgc3RydWN0IHJ3X3NlbWFwaG9yZSBuYW1lc3BhY2Vfc2VtOwogCisvKiAvc3lzL2ZzICovCitkZWNsX3N1YnN5cyhmcywgTlVMTCwgTlVMTCk7CitFWFBPUlRfU1lNQk9MX0dQTChmc19zdWJzeXMpOworCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaGFzaChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXVuc2lnbmVkIGxvbmcgdG1wID0gKCh1bnNpZ25lZCBsb25nKW1udCAvIEwxX0NBQ0hFX0JZVEVTKTsKQEAgLTE3MjUsNiArMTcyOSw3IEBACiAJCWktLTsKIAl9IHdoaWxlIChpKTsKIAlzeXNmc19pbml0KCk7CisJc3Vic3lzdGVtX3JlZ2lzdGVyKCZmc19zdWJzeXMpOwogCWluaXRfcm9vdGZzKCk7CiAJaW5pdF9tb3VudF90cmVlKCk7CiB9CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL0tjb25maWcgYi9mcy9wYXJ0aXRpb25zL0tjb25maWcKaW5kZXggNzQ5MGNjOS4uYzlhNDc4MCAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9LY29uZmlnCisrKyBiL2ZzL3BhcnRpdGlvbnMvS2NvbmZpZwpAQCAtMjIyLDYgKzIyMiwxMyBAQAogCSAgZ2l2ZW4gYnkgdGhlIHRhciBwcm9ncmFtICgibWFuIHRhciIgb3IgcHJlZmVyYWJseSAiaW5mbyB0YXIiKS4gSWYKIAkgIHlvdSBkb24ndCBrbm93IHdoYXQgYWxsIHRoaXMgaXMgYWJvdXQsIHNheSBOLgogCitjb25maWcgS0FSTUFfUEFSVElUSU9OCisJYm9vbCAiS2FybWEgUGFydGl0aW9uIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQVJUSVRJT05fQURWQU5DRUQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIG1vdW50IHRoZSBSaW8gS2FybWEgTVAzIHBsYXllciwgYXMgaXQKKwkgIHVzZXMgYSBwcm9wcmlldGFyeSBwYXJ0aXRpb24gdGFibGUuCisKIGNvbmZpZyBFRklfUEFSVElUSU9OCiAJYm9vbCAiRUZJIEdVSUQgUGFydGl0aW9uIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQVJUSVRJT05fQURWQU5DRUQKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvTWFrZWZpbGUgYi9mcy9wYXJ0aXRpb25zL01ha2VmaWxlCmluZGV4IDY2ZDVjYzIuLjQyYzdkMzggMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvTWFrZWZpbGUKKysrIGIvZnMvcGFydGl0aW9ucy9NYWtlZmlsZQpAQCAtMTcsMyArMTcsNCBAQAogb2JqLSQoQ09ORklHX1VMVFJJWF9QQVJUSVRJT04pICs9IHVsdHJpeC5vCiBvYmotJChDT05GSUdfSUJNX1BBUlRJVElPTikgKz0gaWJtLm8KIG9iai0kKENPTkZJR19FRklfUEFSVElUSU9OKSArPSBlZmkubworb2JqLSQoQ09ORklHX0tBUk1BX1BBUlRJVElPTikgKz0ga2FybWEubwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IDc4ODFjZTAuLmY5MjRmNDUgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJpYm0uaCIKICNpbmNsdWRlICJ1bHRyaXguaCIKICNpbmNsdWRlICJlZmkuaCIKKyNpbmNsdWRlICJrYXJtYS5oIgogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfTUQKIGV4dGVybiB2b2lkIG1kX2F1dG9kZXRlY3RfZGV2KGRldl90IGRldik7CkBAIC0xMDMsNiArMTA0LDkgQEAKICNpZmRlZiBDT05GSUdfSUJNX1BBUlRJVElPTgogCWlibV9wYXJ0aXRpb24sCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfS0FSTUFfUEFSVElUSU9OCisJa2FybWFfcGFydGl0aW9uLAorI2VuZGlmCiAJTlVMTAogfTsKICAKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMva2FybWEuYyBiL2ZzL3BhcnRpdGlvbnMva2FybWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzZkODliCi0tLSAvZGV2L251bGwKKysrIGIvZnMvcGFydGl0aW9ucy9rYXJtYS5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAgZnMvcGFydGl0aW9ucy9rYXJtYS5jCisgKiAgUmlvIEthcm1hIHBhcnRpdGlvbiBpbmZvLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQm9iIENvcGVsYW5kIChtZUBib2Jjb3BlbGFuZC5jb20pCisgKiAgYmFzZWQgb24gb3NmLmMKKyAqLworCisjaW5jbHVkZSAiY2hlY2suaCIKKyNpbmNsdWRlICJrYXJtYS5oIgorCitpbnQga2FybWFfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJaW50IGk7CisJaW50IHNsb3QgPSAxOworCVNlY3RvciBzZWN0OworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJc3RydWN0IGRpc2tsYWJlbCB7CisJCXU4IGRfcmVzZXJ2ZWRbMjcwXTsKKwkJc3RydWN0IGRfcGFydGl0aW9uIHsKKwkJCV9fbGUzMiBwX3JlczsKKwkJCXU4IHBfZnN0eXBlOworCQkJdTggcF9yZXMyWzNdOworCQkJX19sZTMyIHBfb2Zmc2V0OworCQkJX19sZTMyIHBfc2l6ZTsKKwkJfSBkX3BhcnRpdGlvbnNbMl07CisJCXU4IGRfYmxhbmtbMjA4XTsKKwkJX19sZTE2IGRfbWFnaWM7CisJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqbGFiZWw7CisJc3RydWN0IGRfcGFydGl0aW9uICpwOworCisJZGF0YSA9IHJlYWRfZGV2X3NlY3RvcihiZGV2LCAwLCAmc2VjdCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLTE7CisKKwlsYWJlbCA9IChzdHJ1Y3QgZGlza2xhYmVsICopZGF0YTsKKwlpZiAobGUxNl90b19jcHUobGFiZWwtPmRfbWFnaWMpICE9IEtBUk1BX0xBQkVMX01BR0lDKSB7CisJCXB1dF9kZXZfc2VjdG9yKHNlY3QpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwID0gbGFiZWwtPmRfcGFydGl0aW9uczsKKwlmb3IgKGkgPSAwIDsgaSA8IDI7IGkrKywgcCsrKSB7CisJCWlmIChzbG90ID09IHN0YXRlLT5saW1pdCkKKwkJCWJyZWFrOworCisJCWlmIChwLT5wX2ZzdHlwZSA9PSAweDRkICYmIGxlMzJfdG9fY3B1KHAtPnBfc2l6ZSkpIHsKKwkJCXB1dF9wYXJ0aXRpb24oc3RhdGUsIHNsb3QsIGxlMzJfdG9fY3B1KHAtPnBfb2Zmc2V0KSwKKwkJCQlsZTMyX3RvX2NwdShwLT5wX3NpemUpKTsKKwkJfQorCQlzbG90Kys7CisJfQorCXByaW50aygiXG4iKTsKKwlwdXRfZGV2X3NlY3RvcihzZWN0KTsKKwlyZXR1cm4gMTsKK30KKwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9rYXJtYS5oIGIvZnMvcGFydGl0aW9ucy9rYXJtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZjdkM2YKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9wYXJ0aXRpb25zL2thcm1hLmgKQEAgLTAsMCArMSw4IEBACisvKgorICogIGZzL3BhcnRpdGlvbnMva2FybWEuaAorICovCisKKyNkZWZpbmUgS0FSTUFfTEFCRUxfTUFHSUMJCTB4QUI1NgorCitpbnQga2FybWFfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9jYWNoZS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvY2FjaGUuaAppbmRleCBmNTJjYTFiLi44YzNhYmNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2NhY2hlLmgKQEAgLTQsNyArNCw4IEBACiAjaWZuZGVmIF9fQVNNQVJNX0NBQ0hFX0gKICNkZWZpbmUgX19BU01BUk1fQ0FDSEVfSAogCi0jZGVmaW5lICAgICAgICBMMV9DQUNIRV9CWVRFUyAgMzIKKyNkZWZpbmUgICAgICAgIEwxX0NBQ0hFX1NISUZUICA1CisjZGVmaW5lICAgICAgICBMMV9DQUNIRV9CWVRFUyAgKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCiAjZGVmaW5lICAgICAgICBMMV9DQUNIRV9BTElHTih4KSAgICAgICAoKCh4KSsoTDFfQ0FDSEVfQllURVMtMSkpJn4oTDFfQ0FDSEVfQllURVMtMSkpCiAjZGVmaW5lICAgICAgICBTTVBfQ0FDSEVfQllURVMgTDFfQ0FDSEVfQllURVMKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLWFybTI2L3RocmVhZF9pbmZvLmgKaW5kZXggYTY1ZTU4YS4uOWIzNjdlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi90aHJlYWRfaW5mby5oCkBAIC04MCw4ICs4MCw3IEBACiAJcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKikoc3AgJiB+MHgxZmZmKTsKIH0KIAotLyogRklYTUUgLSBQQUdFX1NJWkUgPCAzMksgKi8KLSNkZWZpbmUgVEhSRUFEX1NJWkUJCSg4KjMyNzY4KSAvLyBGSVhNRSAtIHRoaXMgbmVlZHMgYXR0ZW50aW9uIChzZWUga2VybmVsL2ZvcmsuYyB3aGljaCBnZXRzIGEgbmljZSBkaXYgYnkgemVybyBpZiB0aGlzIGlzIGxvd2VyIHRoYW4gOCozMjc2OAorI2RlZmluZSBUSFJFQURfU0laRQlQQUdFX1NJWkUKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spICgoc3RydWN0IHB0X3JlZ3MgKikodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUgLSA4KSAtIDEpCiAKIGV4dGVybiBzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BhbC5oIGIvaW5jbHVkZS9hc20taWE2NC9wYWwuaAppbmRleCBlODI4Mzc3Li43NzA4ZWM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGFsLmgKQEAgLTkyNyw3ICs5MjcsNyBAQAogaWE2NF9wYWxfY2FjaGVfZmx1c2ggKHU2NCBjYWNoZV90eXBlLCB1NjQgaW52YWxpZGF0ZSwgdTY0ICpwcm9ncmVzcywgdTY0ICp2ZWN0b3IpCiB7CiAJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OwotCVBBTF9DQUxMX0lDX09GRihpcHJ2LCBQQUxfQ0FDSEVfRkxVU0gsIGNhY2hlX3R5cGUsIGludmFsaWRhdGUsICpwcm9ncmVzcyk7CisJUEFMX0NBTEwoaXBydiwgUEFMX0NBQ0hFX0ZMVVNILCBjYWNoZV90eXBlLCBpbnZhbGlkYXRlLCAqcHJvZ3Jlc3MpOwogCWlmICh2ZWN0b3IpCiAJCSp2ZWN0b3IgPSBpcHJ2LnYwOwogCSpwcm9ncmVzcyA9IGlwcnYudjE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaAppbmRleCA4YzY0OGJmLi4wOWI5OTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgKQEAgLTI1LDggKzI1LDggQEAKICAqIExpbWl0cyBmb3IgUE1DIGFuZCBQTUQgYXJlIHNldCB0byBsZXNzIHRoYW4gbWF4aW11bSBhcmNoaXRlY3RlZCB2YWx1ZXMKICAqIGJ1dCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgYSB3aGlsZQogICovCi0jZGVmaW5lIElBNjRfTlVNX1BNQ19SRUdTCTMyCi0jZGVmaW5lIElBNjRfTlVNX1BNRF9SRUdTCTMyCisjZGVmaW5lIElBNjRfTlVNX1BNQ19SRUdTCTY0CisjZGVmaW5lIElBNjRfTlVNX1BNRF9SRUdTCTY0CiAKICNkZWZpbmUgREVGQVVMVF9NQVBfQkFTRQlfX0lBNjRfVUxfQ09OU1QoMHgyMDAwMDAwMDAwMDAwMDAwKQogI2RlZmluZSBERUZBVUxUX1RBU0tfU0laRQlfX0lBNjRfVUxfQ09OU1QoMHhhMDAwMDAwMDAwMDAwMDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9pbnRyLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2ludHIuaAppbmRleCBlMzUwNzRmLi5hMzQzMTM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2ludHIuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2ludHIuaApAQCAtNDAsNyArNDAsNyBAQAogCWludAkJaXJxX2NwdWlkOwkvKiBrZXJuZWwgbG9naWNhbCBjcHVpZAkgICAgICovCiAJaW50CQlpcnFfaXJxOwkvKiB0aGUgSVJRIG51bWJlciAqLwogCWludAkJaXJxX2ludF9iaXQ7CS8qIEJyaWRnZSBpbnRlcnJ1cHQgcGluICovCi0JdWludDY0X3QJaXJxX3h0YWxrYWRkcjsJLyogeHRhbGthZGRyIElSUSBpcyBzZW50IHRvICAqLworCXU2NAlpcnFfeHRhbGthZGRyOwkvKiB4dGFsa2FkZHIgSVJRIGlzIHNlbnQgdG8gICovCiAJaW50CQlpcnFfYnJpZGdlX3R5cGU7LyogcGNpaW8gYXNpYyB0eXBlIChwY2lpby5oKSAqLwogCXZvaWQJICAgICAgICppcnFfYnJpZGdlOwkvKiBicmlkZ2UgZ2VuZXJhdGluZyBpcnEgICAgICovCiAJdm9pZAkgICAgICAgKmlycV9wY2lpb2luZm87CS8qIGFzc29jaWF0ZWQgcGNpaW9faW5mb190ICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vcGNpYnJfcHJvdmlkZXIuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vcGNpYnJfcHJvdmlkZXIuaAppbmRleCAyYjQyZDllLi45MzM0MDc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3BjaWJyX3Byb3ZpZGVyLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9wY2licl9wcm92aWRlci5oCkBAIC00NCw5ICs0NCw5IEBACiAjZGVmaW5lIFBDSTMyX01BUFBFRF9CQVNFICAgICAgICAgICAgICAgMHg0MDAwMDAwMAogI2RlZmluZSBQQ0kzMl9ESVJFQ1RfQkFTRSAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKIAotI2RlZmluZSBJU19QQ0kzMl9NQVBQRUQoeCkgICAgICAgICAgICAgICgodWludDY0X3QpKHgpIDwgUENJMzJfRElSRUNUX0JBU0UgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpKHgpID49IFBDSTMyX01BUFBFRF9CQVNFKQotI2RlZmluZSBJU19QQ0kzMl9ESVJFQ1QoeCkgICAgICAgICAgICAgICgodWludDY0X3QpKHgpID49IFBDSTMyX01BUFBFRF9CQVNFKQorI2RlZmluZSBJU19QQ0kzMl9NQVBQRUQoeCkgICAgICAgICAgICAgICgodTY0KSh4KSA8IFBDSTMyX0RJUkVDVF9CQVNFICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHU2NCkoeCkgPj0gUENJMzJfTUFQUEVEX0JBU0UpCisjZGVmaW5lIElTX1BDSTMyX0RJUkVDVCh4KSAgICAgICAgICAgICAgKCh1NjQpKHgpID49IFBDSTMyX01BUFBFRF9CQVNFKQogCiAKIC8qCkBAIC02Myw3ICs2Myw3IEBACiAJKElPUEcoSU9QR09GRihhZGRyKSArIChzaXplKSAtIDEpID09IElPUEcoKHNpemUpIC0gMSkpCiAKICNkZWZpbmUgTUlOSU1BTF9BVEVfRkxBRyhhZGRyLCBzaXplKSBcCi0JKE1JTklNQUxfQVRFU19SRVFVSVJFRCgodWludDY0X3QpYWRkciwgc2l6ZSkgPyAxIDogMCkKKwkoTUlOSU1BTF9BVEVTX1JFUVVJUkVEKCh1NjQpYWRkciwgc2l6ZSkgPyAxIDogMCkKIAogLyogYml0IDI5IG9mIHRoZSBwY2kgYWRkcmVzcyBpcyB0aGUgU1dBUCBiaXQgKi8KICNkZWZpbmUgQVRFX1NXQVBTSElGVCAgICAgICAgICAgICAgICAgICAyOQpAQCAtOTAsMjcgKzkwLDI3IEBACiAgKiBQTVUgcmVzb3VyY2VzLgogICovCiBzdHJ1Y3QgYXRlX3Jlc291cmNlewotCXVpbnQ2NF90ICphdGU7Ci0JdWludDY0X3QgbnVtX2F0ZTsKLQl1aW50NjRfdCBsb3dlc3RfZnJlZV9pbmRleDsKKwl1NjQgKmF0ZTsKKwl1NjQgbnVtX2F0ZTsKKwl1NjQgbG93ZXN0X2ZyZWVfaW5kZXg7CiB9OwogCiBzdHJ1Y3QgcGNpYnVzX2luZm8gewogCXN0cnVjdCBwY2lidXNfYnVzc29mdAlwYmlfYnVzY29tbW9uOyAgIC8qIGNvbW1vbiBoZWFkZXIgKi8KLQl1aW50MzJfdCAgICAgICAgICAgICAgICBwYmlfbW9kdWxlaWQ7CisJdTMyICAgICAgICAgICAgICAgIHBiaV9tb2R1bGVpZDsKIAlzaG9ydCAgICAgICAgICAgICAgICAgICBwYmlfYnJpZGdlX3R5cGU7CiAJc2hvcnQgICAgICAgICAgICAgICAgICAgcGJpX2JyaWRnZV9tb2RlOwogCiAJc3RydWN0IGF0ZV9yZXNvdXJjZSAgICAgcGJpX2ludF9hdGVfcmVzb3VyY2U7Ci0JdWludDY0X3QgICAgICAgICAgICAgICAgcGJpX2ludF9hdGVfc2l6ZTsKKwl1NjQgICAgICAgICAgICAgICAgcGJpX2ludF9hdGVfc2l6ZTsKIAotCXVpbnQ2NF90ICAgICAgICAgICAgICAgIHBiaV9kaXJfeGJhc2U7CisJdTY0ICAgICAgICAgICAgICAgIHBiaV9kaXJfeGJhc2U7CiAJY2hhciAgICAgICAgICAgICAgICAgICAgcGJpX2h1Yl94aWQ7CiAKLQl1aW50NjRfdCAgICAgICAgICAgICAgICBwYmlfZGV2cmVnWzhdOworCXU2NCAgICAgICAgICAgICAgICBwYmlfZGV2cmVnWzhdOwogCi0JdWludDMyX3QJCXBiaV92YWxpZF9kZXZpY2VzOwotCXVpbnQzMl90CQlwYmlfZW5hYmxlZF9kZXZpY2VzOworCXUzMgkJcGJpX3ZhbGlkX2RldmljZXM7CisJdTMyCQlwYmlfZW5hYmxlZF9kZXZpY2VzOwogCiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgcGJpX2xvY2s7CiB9OwpAQCAtMTM2LDIyICsxMzYsMjIgQEAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciB0aGUgYnJpZGdlIGFzaWMgcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzIGluIHBjaWJyX3JlZy5jCiAgKi8KLWV4dGVybiB2b2lkICAgICAgICAgICAgIHBjaXJlZ19jb250cm9sX2JpdF9jbHIoc3RydWN0IHBjaWJ1c19pbmZvICosIHVpbnQ2NF90KTsKLWV4dGVybiB2b2lkICAgICAgICAgICAgIHBjaXJlZ19jb250cm9sX2JpdF9zZXQoc3RydWN0IHBjaWJ1c19pbmZvICosIHVpbnQ2NF90KTsKLWV4dGVybiB1aW50NjRfdCAgICAgICAgIHBjaXJlZ190Zmx1c2hfZ2V0KHN0cnVjdCBwY2lidXNfaW5mbyAqKTsKLWV4dGVybiB1aW50NjRfdCAgICAgICAgIHBjaXJlZ19pbnRyX3N0YXR1c19nZXQoc3RydWN0IHBjaWJ1c19pbmZvICopOwotZXh0ZXJuIHZvaWQgICAgICAgICAgICAgcGNpcmVnX2ludHJfZW5hYmxlX2JpdF9jbHIoc3RydWN0IHBjaWJ1c19pbmZvICosIHVpbnQ2NF90KTsKLWV4dGVybiB2b2lkICAgICAgICAgICAgIHBjaXJlZ19pbnRyX2VuYWJsZV9iaXRfc2V0KHN0cnVjdCBwY2lidXNfaW5mbyAqLCB1aW50NjRfdCk7Ci1leHRlcm4gdm9pZCAgICAgICAgICAgICBwY2lyZWdfaW50cl9hZGRyX2FkZHJfc2V0KHN0cnVjdCBwY2lidXNfaW5mbyAqLCBpbnQsIHVpbnQ2NF90KTsKK2V4dGVybiB2b2lkICAgICAgICAgICAgIHBjaXJlZ19jb250cm9sX2JpdF9jbHIoc3RydWN0IHBjaWJ1c19pbmZvICosIHU2NCk7CitleHRlcm4gdm9pZCAgICAgICAgICAgICBwY2lyZWdfY29udHJvbF9iaXRfc2V0KHN0cnVjdCBwY2lidXNfaW5mbyAqLCB1NjQpOworZXh0ZXJuIHU2NCAgICAgICAgIHBjaXJlZ190Zmx1c2hfZ2V0KHN0cnVjdCBwY2lidXNfaW5mbyAqKTsKK2V4dGVybiB1NjQgICAgICAgICBwY2lyZWdfaW50cl9zdGF0dXNfZ2V0KHN0cnVjdCBwY2lidXNfaW5mbyAqKTsKK2V4dGVybiB2b2lkICAgICAgICAgICAgIHBjaXJlZ19pbnRyX2VuYWJsZV9iaXRfY2xyKHN0cnVjdCBwY2lidXNfaW5mbyAqLCB1NjQpOworZXh0ZXJuIHZvaWQgICAgICAgICAgICAgcGNpcmVnX2ludHJfZW5hYmxlX2JpdF9zZXQoc3RydWN0IHBjaWJ1c19pbmZvICosIHU2NCk7CitleHRlcm4gdm9pZCAgICAgICAgICAgICBwY2lyZWdfaW50cl9hZGRyX2FkZHJfc2V0KHN0cnVjdCBwY2lidXNfaW5mbyAqLCBpbnQsIHU2NCk7CiBleHRlcm4gdm9pZCAgICAgICAgICAgICBwY2lyZWdfZm9yY2VfaW50cl9zZXQoc3RydWN0IHBjaWJ1c19pbmZvICosIGludCk7Ci1leHRlcm4gdWludDY0X3QgICAgICAgICBwY2lyZWdfd3JiX2ZsdXNoX2dldChzdHJ1Y3QgcGNpYnVzX2luZm8gKiwgaW50KTsKLWV4dGVybiB2b2lkICAgICAgICAgICAgIHBjaXJlZ19pbnRfYXRlX3NldChzdHJ1Y3QgcGNpYnVzX2luZm8gKiwgaW50LCB1aW50NjRfdCk7Ci1leHRlcm4gdWludDY0X3QgKglwY2lyZWdfaW50X2F0ZV9hZGRyKHN0cnVjdCBwY2lidXNfaW5mbyAqLCBpbnQpOworZXh0ZXJuIHU2NCAgICAgICAgIHBjaXJlZ193cmJfZmx1c2hfZ2V0KHN0cnVjdCBwY2lidXNfaW5mbyAqLCBpbnQpOworZXh0ZXJuIHZvaWQgICAgICAgICAgICAgcGNpcmVnX2ludF9hdGVfc2V0KHN0cnVjdCBwY2lidXNfaW5mbyAqLCBpbnQsIHU2NCk7CitleHRlcm4gdTY0ICoJcGNpcmVnX2ludF9hdGVfYWRkcihzdHJ1Y3QgcGNpYnVzX2luZm8gKiwgaW50KTsKIGV4dGVybiB2b2lkIAkJcGNpYnJfZm9yY2VfaW50ZXJydXB0KHN0cnVjdCBzbl9pcnFfaW5mbyAqc25faXJxX2luZm8pOwogZXh0ZXJuIHZvaWQgCQlwY2licl9jaGFuZ2VfZGV2aWNlc19pcnEoc3RydWN0IHNuX2lycV9pbmZvICpzbl9pcnFfaW5mbyk7CiBleHRlcm4gaW50IAkJcGNpYnJfYXRlX2FsbG9jKHN0cnVjdCBwY2lidXNfaW5mbyAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgCQlwY2licl9hdGVfZnJlZShzdHJ1Y3QgcGNpYnVzX2luZm8gKiwgaW50KTsKLWV4dGVybiB2b2lkIAkJYXRlX3dyaXRlKHN0cnVjdCBwY2lidXNfaW5mbyAqLCBpbnQsIGludCwgdWludDY0X3QpOworZXh0ZXJuIHZvaWQgCQlhdGVfd3JpdGUoc3RydWN0IHBjaWJ1c19pbmZvICosIGludCwgaW50LCB1NjQpOwogZXh0ZXJuIGludCBzYWxfcGNpYnJfc2xvdF9lbmFibGUoc3RydWN0IHBjaWJ1c19pbmZvICpzb2Z0LCBpbnQgZGV2aWNlLAogCQkJCSB2b2lkICpyZXNwKTsKIGV4dGVybiBpbnQgc2FsX3BjaWJyX3Nsb3RfZGlzYWJsZShzdHJ1Y3QgcGNpYnVzX2luZm8gKnNvZnQsIGludCBkZXZpY2UsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3BjaWJ1c19wcm92aWRlcl9kZWZzLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3BjaWJ1c19wcm92aWRlcl9kZWZzLmgKaW5kZXggYWQwZThlOC4uY2UzZjZjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9wY2lidXNfcHJvdmlkZXJfZGVmcy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaApAQCAtMjksMTMgKzI5LDEzIEBACiAgKi8KIAogc3RydWN0IHBjaWJ1c19idXNzb2Z0IHsKLQl1aW50MzJfdAkJYnNfYXNpY190eXBlOwkvKiBjaGlwc2V0IHR5cGUgKi8KLQl1aW50MzJfdAkJYnNfeGlkOwkJLyogeHdpZGdldCBpZCAqLwotCXVpbnQzMl90CQlic19wZXJzaXN0X2J1c251bTsgLyogUGVyc2lzdGVudCBCdXMgTnVtYmVyICovCi0JdWludDMyX3QJCWJzX3BlcnNpc3Rfc2VnbWVudDsgLyogU2VnbWVudCBOdW1iZXIgKi8KLQl1aW50NjRfdAkJYnNfbGVnYWN5X2lvOwkvKiBsZWdhY3kgaW8gcGlvIGFkZHIgKi8KLQl1aW50NjRfdAkJYnNfbGVnYWN5X21lbTsJLyogbGVnYWN5IG1lbSBwaW8gYWRkciAqLwotCXVpbnQ2NF90CQlic19iYXNlOwkvKiB3aWRnZXQgYmFzZSAqLworCXUzMgkJYnNfYXNpY190eXBlOwkvKiBjaGlwc2V0IHR5cGUgKi8KKwl1MzIJCWJzX3hpZDsJCS8qIHh3aWRnZXQgaWQgKi8KKwl1MzIJCWJzX3BlcnNpc3RfYnVzbnVtOyAvKiBQZXJzaXN0ZW50IEJ1cyBOdW1iZXIgKi8KKwl1MzIJCWJzX3BlcnNpc3Rfc2VnbWVudDsgLyogU2VnbWVudCBOdW1iZXIgKi8KKwl1NjQJCWJzX2xlZ2FjeV9pbzsJLyogbGVnYWN5IGlvIHBpbyBhZGRyICovCisJdTY0CQlic19sZWdhY3lfbWVtOwkvKiBsZWdhY3kgbWVtIHBpbyBhZGRyICovCisJdTY0CQlic19iYXNlOwkvKiB3aWRnZXQgYmFzZSAqLwogCXN0cnVjdCB4d2lkZ2V0X2luZm8JKmJzX3h3aWRnZXRfaW5mbzsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vcGNpZGV2LmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3BjaWRldi5oCmluZGV4IGY2NWQyMjIuLjM4Y2RmZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vcGNpZGV2LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9wY2lkZXYuaApAQCAtNTUsOCArNTUsOCBAQAogI2RlZmluZSBQQ0lJT19WRU5ET1JfSURfTk9ORQkoLTEpCiAKIHN0cnVjdCBwY2lkZXZfaW5mbyB7Ci0JdWludDY0X3QJCXBkaV9waW9fbWFwcGVkX2FkZHJbN107IC8qIDYgQkFScyBQTFVTIDEgUk9NICovCi0JdWludDY0X3QJCXBkaV9zbG90X2hvc3RfaGFuZGxlOwkvKiBCdXMgYW5kIGRldmZuIEhvc3QgcGNpX2RldiAqLworCXU2NAkJcGRpX3Bpb19tYXBwZWRfYWRkcls3XTsgLyogNiBCQVJzIFBMVVMgMSBST00gKi8KKwl1NjQJCXBkaV9zbG90X2hvc3RfaGFuZGxlOwkvKiBCdXMgYW5kIGRldmZuIEhvc3QgcGNpX2RldiAqLwogCiAJc3RydWN0IHBjaWJ1c19idXNzb2Z0CSpwZGlfcGNpYnVzX2luZm87CS8qIEtlcm5lbCBjb21tb24gYnVzIHNvZnQgKi8KIAlzdHJ1Y3QgcGNpZGV2X2luZm8JKnBkaV9ob3N0X3BjaWRldl9pbmZvOwkvKiBLZXJuZWwgSG9zdCBwY2lfZGV2ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3BpYy5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9waWMuaAppbmRleCAwZGU4MmU2Li41ZjlkYTVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3BpYy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vcGljLmgKQEAgLTc0LDEyMCArNzQsMTIwIEBACiAgICAgLyogMHgwMDAwMDAtMHgwMEZGRkYgLS0gTG9jYWwgUmVnaXN0ZXJzICovCiAKICAgICAvKiAweDAwMDAwMC0weDAwMDA1NyAtLSBTdGFuZGFyZCBXaWRnZXQgQ29uZmlndXJhdGlvbiAqLwotICAgIHVpbnQ2NF90CQlwX3dpZF9pZDsJCQkvKiAweDAwMDAwMCAqLwotICAgIHVpbnQ2NF90CQlwX3dpZF9zdGF0OwkJCS8qIDB4MDAwMDA4ICovCi0gICAgdWludDY0X3QJCXBfd2lkX2Vycl91cHBlcjsJCS8qIDB4MDAwMDEwICovCi0gICAgdWludDY0X3QJCXBfd2lkX2Vycl9sb3dlcjsJCS8qIDB4MDAwMDE4ICovCisgICAgdTY0CQlwX3dpZF9pZDsJCQkvKiAweDAwMDAwMCAqLworICAgIHU2NAkJcF93aWRfc3RhdDsJCQkvKiAweDAwMDAwOCAqLworICAgIHU2NAkJcF93aWRfZXJyX3VwcGVyOwkJLyogMHgwMDAwMTAgKi8KKyAgICB1NjQJCXBfd2lkX2Vycl9sb3dlcjsJCS8qIDB4MDAwMDE4ICovCiAgICAgI2RlZmluZSBwX3dpZF9lcnIgcF93aWRfZXJyX2xvd2VyCi0gICAgdWludDY0X3QJCXBfd2lkX2NvbnRyb2w7CQkJLyogMHgwMDAwMjAgKi8KLSAgICB1aW50NjRfdAkJcF93aWRfcmVxX3RpbWVvdXQ7CQkvKiAweDAwMDAyOCAqLwotICAgIHVpbnQ2NF90CQlwX3dpZF9pbnRfdXBwZXI7CQkvKiAweDAwMDAzMCAqLwotICAgIHVpbnQ2NF90CQlwX3dpZF9pbnRfbG93ZXI7CQkvKiAweDAwMDAzOCAqLworICAgIHU2NAkJcF93aWRfY29udHJvbDsJCQkvKiAweDAwMDAyMCAqLworICAgIHU2NAkJcF93aWRfcmVxX3RpbWVvdXQ7CQkvKiAweDAwMDAyOCAqLworICAgIHU2NAkJcF93aWRfaW50X3VwcGVyOwkJLyogMHgwMDAwMzAgKi8KKyAgICB1NjQJCXBfd2lkX2ludF9sb3dlcjsJCS8qIDB4MDAwMDM4ICovCiAgICAgI2RlZmluZSBwX3dpZF9pbnQgcF93aWRfaW50X2xvd2VyCi0gICAgdWludDY0X3QJCXBfd2lkX2Vycl9jbWR3b3JkOwkJLyogMHgwMDAwNDAgKi8KLSAgICB1aW50NjRfdAkJcF93aWRfbGxwOwkJCS8qIDB4MDAwMDQ4ICovCi0gICAgdWludDY0X3QJCXBfd2lkX3RmbHVzaDsJCQkvKiAweDAwMDA1MCAqLworICAgIHU2NAkJcF93aWRfZXJyX2NtZHdvcmQ7CQkvKiAweDAwMDA0MCAqLworICAgIHU2NAkJcF93aWRfbGxwOwkJCS8qIDB4MDAwMDQ4ICovCisgICAgdTY0CQlwX3dpZF90Zmx1c2g7CQkJLyogMHgwMDAwNTAgKi8KIAogICAgIC8qIDB4MDAwMDU4LTB4MDAwMDdGIC0tIEJyaWRnZS1zcGVjaWZpYyBXaWRnZXQgQ29uZmlndXJhdGlvbiAqLwotICAgIHVpbnQ2NF90CQlwX3dpZF9hdXhfZXJyOwkJCS8qIDB4MDAwMDU4ICovCi0gICAgdWludDY0X3QJCXBfd2lkX3Jlc3BfdXBwZXI7CQkvKiAweDAwMDA2MCAqLwotICAgIHVpbnQ2NF90CQlwX3dpZF9yZXNwX2xvd2VyOwkJLyogMHgwMDAwNjggKi8KKyAgICB1NjQJCXBfd2lkX2F1eF9lcnI7CQkJLyogMHgwMDAwNTggKi8KKyAgICB1NjQJCXBfd2lkX3Jlc3BfdXBwZXI7CQkvKiAweDAwMDA2MCAqLworICAgIHU2NAkJcF93aWRfcmVzcF9sb3dlcjsJCS8qIDB4MDAwMDY4ICovCiAgICAgI2RlZmluZSBwX3dpZF9yZXNwIHBfd2lkX3Jlc3BfbG93ZXIKLSAgICB1aW50NjRfdAkJcF93aWRfdHN0X3Bpbl9jdHJsOwkJLyogMHgwMDAwNzAgKi8KLSAgICB1aW50NjRfdAkJcF93aWRfYWRkcl9sa2VycjsJCS8qIDB4MDAwMDc4ICovCisgICAgdTY0CQlwX3dpZF90c3RfcGluX2N0cmw7CQkvKiAweDAwMDA3MCAqLworICAgIHU2NAkJcF93aWRfYWRkcl9sa2VycjsJCS8qIDB4MDAwMDc4ICovCiAKICAgICAvKiAweDAwMDA4MC0weDAwMDA4RiAtLSBQTVUgJiBNQVAgKi8KLSAgICB1aW50NjRfdAkJcF9kaXJfbWFwOwkJCS8qIDB4MDAwMDgwICovCi0gICAgdWludDY0X3QJCV9wYWRfMDAwMDg4OwkJCS8qIDB4MDAwMDg4ICovCisgICAgdTY0CQlwX2Rpcl9tYXA7CQkJLyogMHgwMDAwODAgKi8KKyAgICB1NjQJCV9wYWRfMDAwMDg4OwkJCS8qIDB4MDAwMDg4ICovCiAKICAgICAvKiAweDAwMDA5MC0weDAwMDA5RiAtLSBTU1JBTSAqLwotICAgIHVpbnQ2NF90CQlwX21hcF9mYXVsdDsJCQkvKiAweDAwMDA5MCAqLwotICAgIHVpbnQ2NF90CQlfcGFkXzAwMDA5ODsJCQkvKiAweDAwMDA5OCAqLworICAgIHU2NAkJcF9tYXBfZmF1bHQ7CQkJLyogMHgwMDAwOTAgKi8KKyAgICB1NjQJCV9wYWRfMDAwMDk4OwkJCS8qIDB4MDAwMDk4ICovCiAKICAgICAvKiAweDAwMDBBMC0weDAwMDBBRiAtLSBBcmJpdHJhdGlvbiAqLwotICAgIHVpbnQ2NF90CQlwX2FyYjsJCQkJLyogMHgwMDAwQTAgKi8KLSAgICB1aW50NjRfdAkJX3BhZF8wMDAwQTg7CQkJLyogMHgwMDAwQTggKi8KKyAgICB1NjQJCXBfYXJiOwkJCQkvKiAweDAwMDBBMCAqLworICAgIHU2NAkJX3BhZF8wMDAwQTg7CQkJLyogMHgwMDAwQTggKi8KIAogICAgIC8qIDB4MDAwMEIwLTB4MDAwMEJGIC0tIE51bWJlciBJbiBBIENhbiBvciBBVEUgUGFyaXR5IEVycm9yICovCi0gICAgdWludDY0X3QJCXBfYXRlX3Bhcml0eV9lcnI7CQkvKiAweDAwMDBCMCAqLwotICAgIHVpbnQ2NF90CQlfcGFkXzAwMDBCODsJCQkvKiAweDAwMDBCOCAqLworICAgIHU2NAkJcF9hdGVfcGFyaXR5X2VycjsJCS8qIDB4MDAwMEIwICovCisgICAgdTY0CQlfcGFkXzAwMDBCODsJCQkvKiAweDAwMDBCOCAqLwogCiAgICAgLyogMHgwMDAwQzAtMHgwMDAwRkYgLS0gUENJL0dJTyAqLwotICAgIHVpbnQ2NF90CQlwX2J1c190aW1lb3V0OwkJCS8qIDB4MDAwMEMwICovCi0gICAgdWludDY0X3QJCXBfcGNpX2NmZzsJCQkvKiAweDAwMDBDOCAqLwotICAgIHVpbnQ2NF90CQlwX3BjaV9lcnJfdXBwZXI7CQkvKiAweDAwMDBEMCAqLwotICAgIHVpbnQ2NF90CQlwX3BjaV9lcnJfbG93ZXI7CQkvKiAweDAwMDBEOCAqLworICAgIHU2NAkJcF9idXNfdGltZW91dDsJCQkvKiAweDAwMDBDMCAqLworICAgIHU2NAkJcF9wY2lfY2ZnOwkJCS8qIDB4MDAwMEM4ICovCisgICAgdTY0CQlwX3BjaV9lcnJfdXBwZXI7CQkvKiAweDAwMDBEMCAqLworICAgIHU2NAkJcF9wY2lfZXJyX2xvd2VyOwkJLyogMHgwMDAwRDggKi8KICAgICAjZGVmaW5lIHBfcGNpX2VyciBwX3BjaV9lcnJfbG93ZXIKLSAgICB1aW50NjRfdAkJX3BhZF8wMDAwRTBbNF07CQkJLyogMHgwMDAwe0UwLi5GOH0gKi8KKyAgICB1NjQJCV9wYWRfMDAwMEUwWzRdOwkJCS8qIDB4MDAwMHtFMC4uRjh9ICovCiAKICAgICAvKiAweDAwMDEwMC0weDAwMDFGRiAtLSBJbnRlcnJ1cHQgKi8KLSAgICB1aW50NjRfdAkJcF9pbnRfc3RhdHVzOwkJCS8qIDB4MDAwMTAwICovCi0gICAgdWludDY0X3QJCXBfaW50X2VuYWJsZTsJCQkvKiAweDAwMDEwOCAqLwotICAgIHVpbnQ2NF90CQlwX2ludF9yc3Rfc3RhdDsJCQkvKiAweDAwMDExMCAqLwotICAgIHVpbnQ2NF90CQlwX2ludF9tb2RlOwkJCS8qIDB4MDAwMTE4ICovCi0gICAgdWludDY0X3QJCXBfaW50X2RldmljZTsJCQkvKiAweDAwMDEyMCAqLwotICAgIHVpbnQ2NF90CQlwX2ludF9ob3N0X2VycjsJCQkvKiAweDAwMDEyOCAqLwotICAgIHVpbnQ2NF90CQlwX2ludF9hZGRyWzhdOwkJCS8qIDB4MDAwMXszMCwsLDY4fSAqLwotICAgIHVpbnQ2NF90CQlwX2Vycl9pbnRfdmlldzsJCQkvKiAweDAwMDE3MCAqLwotICAgIHVpbnQ2NF90CQlwX211bHRfaW50OwkJCS8qIDB4MDAwMTc4ICovCi0gICAgdWludDY0X3QJCXBfZm9yY2VfYWx3YXlzWzhdOwkJLyogMHgwMDAxezgwLCwsQjh9ICovCi0gICAgdWludDY0X3QJCXBfZm9yY2VfcGluWzhdOwkJCS8qIDB4MDAwMXtDMCwsLEY4fSAqLworICAgIHU2NAkJcF9pbnRfc3RhdHVzOwkJCS8qIDB4MDAwMTAwICovCisgICAgdTY0CQlwX2ludF9lbmFibGU7CQkJLyogMHgwMDAxMDggKi8KKyAgICB1NjQJCXBfaW50X3JzdF9zdGF0OwkJCS8qIDB4MDAwMTEwICovCisgICAgdTY0CQlwX2ludF9tb2RlOwkJCS8qIDB4MDAwMTE4ICovCisgICAgdTY0CQlwX2ludF9kZXZpY2U7CQkJLyogMHgwMDAxMjAgKi8KKyAgICB1NjQJCXBfaW50X2hvc3RfZXJyOwkJCS8qIDB4MDAwMTI4ICovCisgICAgdTY0CQlwX2ludF9hZGRyWzhdOwkJCS8qIDB4MDAwMXszMCwsLDY4fSAqLworICAgIHU2NAkJcF9lcnJfaW50X3ZpZXc7CQkJLyogMHgwMDAxNzAgKi8KKyAgICB1NjQJCXBfbXVsdF9pbnQ7CQkJLyogMHgwMDAxNzggKi8KKyAgICB1NjQJCXBfZm9yY2VfYWx3YXlzWzhdOwkJLyogMHgwMDAxezgwLCwsQjh9ICovCisgICAgdTY0CQlwX2ZvcmNlX3Bpbls4XTsJCQkvKiAweDAwMDF7QzAsLCxGOH0gKi8KIAogICAgIC8qIDB4MDAwMjAwLTB4MDAwMjk4IC0tIERldmljZSAqLwotICAgIHVpbnQ2NF90CQlwX2RldmljZVs0XTsJCQkvKiAweDAwMDJ7MDAsLCwxOH0gKi8KLSAgICB1aW50NjRfdAkJX3BhZF8wMDAyMjBbNF07CQkJLyogMHgwMDAyezIwLCwsMzh9ICovCi0gICAgdWludDY0X3QJCXBfd3JfcmVxX2J1Zls0XTsJCS8qIDB4MDAwMns0MCwsLDU4fSAqLwotICAgIHVpbnQ2NF90CQlfcGFkXzAwMDI2MFs0XTsJCQkvKiAweDAwMDJ7NjAsLCw3OH0gKi8KLSAgICB1aW50NjRfdAkJcF9ycmJfbWFwWzJdOwkJCS8qIDB4MDAwMns4MCwsLDg4fSAqLworICAgIHU2NAkJcF9kZXZpY2VbNF07CQkJLyogMHgwMDAyezAwLCwsMTh9ICovCisgICAgdTY0CQlfcGFkXzAwMDIyMFs0XTsJCQkvKiAweDAwMDJ7MjAsLCwzOH0gKi8KKyAgICB1NjQJCXBfd3JfcmVxX2J1Zls0XTsJCS8qIDB4MDAwMns0MCwsLDU4fSAqLworICAgIHU2NAkJX3BhZF8wMDAyNjBbNF07CQkJLyogMHgwMDAyezYwLCwsNzh9ICovCisgICAgdTY0CQlwX3JyYl9tYXBbMl07CQkJLyogMHgwMDAyezgwLCwsODh9ICovCiAgICAgI2RlZmluZSBwX2V2ZW5fcmVzcCBwX3JyYl9tYXBbMF0JCQkvKiAweDAwMDI4MCAqLwogICAgICNkZWZpbmUgcF9vZGRfcmVzcCAgcF9ycmJfbWFwWzFdCQkJLyogMHgwMDAyODggKi8KLSAgICB1aW50NjRfdAkJcF9yZXNwX3N0YXR1czsJCQkvKiAweDAwMDI5MCAqLwotICAgIHVpbnQ2NF90CQlwX3Jlc3BfY2xlYXI7CQkJLyogMHgwMDAyOTggKi8KKyAgICB1NjQJCXBfcmVzcF9zdGF0dXM7CQkJLyogMHgwMDAyOTAgKi8KKyAgICB1NjQJCXBfcmVzcF9jbGVhcjsJCQkvKiAweDAwMDI5OCAqLwogCi0gICAgdWludDY0X3QJCV9wYWRfMDAwMkEwWzEyXTsJCS8qIDB4MDAwMntBMC4uRjh9ICovCisgICAgdTY0CQlfcGFkXzAwMDJBMFsxMl07CQkvKiAweDAwMDJ7QTAuLkY4fSAqLwogCiAgICAgLyogMHgwMDAzMDAtMHgwMDAzRjggLS0gQnVmZmVyIEFkZHJlc3MgTWF0Y2ggUmVnaXN0ZXJzICovCiAgICAgc3RydWN0IHsKLQl1aW50NjRfdAl1cHBlcjsJCQkJLyogMHgwMDAzezAwLCwsRjB9ICovCi0JdWludDY0X3QJbG93ZXI7CQkJCS8qIDB4MDAwM3swOCwsLEY4fSAqLworCXU2NAl1cHBlcjsJCQkJLyogMHgwMDAzezAwLCwsRjB9ICovCisJdTY0CWxvd2VyOwkJCQkvKiAweDAwMDN7MDgsLCxGOH0gKi8KICAgICB9IHBfYnVmX2FkZHJfbWF0Y2hbMTZdOwogCiAgICAgLyogMHgwMDA0MDAtMHgwMDA1RkYgLS0gUGVyZm9ybWFuY2UgTW9uaXRvciBSZWdpc3RlcnMgKGV2ZW4gb25seSkgKi8KICAgICBzdHJ1Y3QgewotCXVpbnQ2NF90CWZsdXNoX3dfdG91Y2g7CQkJLyogMHgwMDB7NDAwLCwsNUMwfSAqLwotCXVpbnQ2NF90CWZsdXNoX3dvX3RvdWNoOwkJCS8qIDB4MDAwezQwOCwsLDVDOH0gKi8KLQl1aW50NjRfdAlpbmZsaWdodDsJCQkvKiAweDAwMHs0MTAsLCw1RDB9ICovCi0JdWludDY0X3QJcHJlZmV0Y2g7CQkJLyogMHgwMDB7NDE4LCwsNUQ4fSAqLwotCXVpbnQ2NF90CXRvdGFsX3BjaV9yZXRyeTsJCS8qIDB4MDAwezQyMCwsLDVFMH0gKi8KLQl1aW50NjRfdAltYXhfcGNpX3JldHJ5OwkJCS8qIDB4MDAwezQyOCwsLDVFOH0gKi8KLQl1aW50NjRfdAltYXhfbGF0ZW5jeTsJCQkvKiAweDAwMHs0MzAsLCw1RjB9ICovCi0JdWludDY0X3QJY2xlYXJfYWxsOwkJCS8qIDB4MDAwezQzOCwsLDVGOH0gKi8KKwl1NjQJZmx1c2hfd190b3VjaDsJCQkvKiAweDAwMHs0MDAsLCw1QzB9ICovCisJdTY0CWZsdXNoX3dvX3RvdWNoOwkJCS8qIDB4MDAwezQwOCwsLDVDOH0gKi8KKwl1NjQJaW5mbGlnaHQ7CQkJLyogMHgwMDB7NDEwLCwsNUQwfSAqLworCXU2NAlwcmVmZXRjaDsJCQkvKiAweDAwMHs0MTgsLCw1RDh9ICovCisJdTY0CXRvdGFsX3BjaV9yZXRyeTsJCS8qIDB4MDAwezQyMCwsLDVFMH0gKi8KKwl1NjQJbWF4X3BjaV9yZXRyeTsJCQkvKiAweDAwMHs0MjgsLCw1RTh9ICovCisJdTY0CW1heF9sYXRlbmN5OwkJCS8qIDB4MDAwezQzMCwsLDVGMH0gKi8KKwl1NjQJY2xlYXJfYWxsOwkJCS8qIDB4MDAwezQzOCwsLDVGOH0gKi8KICAgICB9IHBfYnVmX2NvdW50WzhdOwogCiAKICAgICAvKiAweDAwMDYwMC0weDAwMDlGRiAtLSBQQ0kvWCByZWdpc3RlcnMgKi8KLSAgICB1aW50NjRfdAkJcF9wY2l4X2J1c19lcnJfYWRkcjsJCS8qIDB4MDAwNjAwICovCi0gICAgdWludDY0X3QJCXBfcGNpeF9idXNfZXJyX2F0dHI7CQkvKiAweDAwMDYwOCAqLwotICAgIHVpbnQ2NF90CQlwX3BjaXhfYnVzX2Vycl9kYXRhOwkJLyogMHgwMDA2MTAgKi8KLSAgICB1aW50NjRfdAkJcF9wY2l4X3Bpb19zcGxpdF9hZGRyOwkJLyogMHgwMDA2MTggKi8KLSAgICB1aW50NjRfdAkJcF9wY2l4X3Bpb19zcGxpdF9hdHRyOwkJLyogMHgwMDA2MjAgKi8KLSAgICB1aW50NjRfdAkJcF9wY2l4X2RtYV9yZXFfZXJyX2F0dHI7CS8qIDB4MDAwNjI4ICovCi0gICAgdWludDY0X3QJCXBfcGNpeF9kbWFfcmVxX2Vycl9hZGRyOwkvKiAweDAwMDYzMCAqLwotICAgIHVpbnQ2NF90CQlwX3BjaXhfdGltZW91dDsJCQkvKiAweDAwMDYzOCAqLworICAgIHU2NAkJcF9wY2l4X2J1c19lcnJfYWRkcjsJCS8qIDB4MDAwNjAwICovCisgICAgdTY0CQlwX3BjaXhfYnVzX2Vycl9hdHRyOwkJLyogMHgwMDA2MDggKi8KKyAgICB1NjQJCXBfcGNpeF9idXNfZXJyX2RhdGE7CQkvKiAweDAwMDYxMCAqLworICAgIHU2NAkJcF9wY2l4X3Bpb19zcGxpdF9hZGRyOwkJLyogMHgwMDA2MTggKi8KKyAgICB1NjQJCXBfcGNpeF9waW9fc3BsaXRfYXR0cjsJCS8qIDB4MDAwNjIwICovCisgICAgdTY0CQlwX3BjaXhfZG1hX3JlcV9lcnJfYXR0cjsJLyogMHgwMDA2MjggKi8KKyAgICB1NjQJCXBfcGNpeF9kbWFfcmVxX2Vycl9hZGRyOwkvKiAweDAwMDYzMCAqLworICAgIHU2NAkJcF9wY2l4X3RpbWVvdXQ7CQkJLyogMHgwMDA2MzggKi8KIAotICAgIHVpbnQ2NF90CQlfcGFkXzAwMDY0MFsxMjBdOwkJLyogMHgwMDB7NjQwLCwsOUY4fSAqLworICAgIHU2NAkJX3BhZF8wMDA2NDBbMTIwXTsJCS8qIDB4MDAwezY0MCwsLDlGOH0gKi8KIAogICAgIC8qIDB4MDAwQTAwLTB4MDAwQkZGIC0tIFBDSS9YIFJlYWQmV3JpdGUgQnVmZmVyICovCiAgICAgc3RydWN0IHsKLQl1aW50NjRfdAlwX2J1Zl9hZGRyOwkJCS8qIDB4MDAwe0EwMCwsLEFGMH0gKi8KLQl1aW50NjRfdAlwX2J1Zl9hdHRyOwkJCS8qIDBYMDAwe0EwOCwsLEFGOH0gKi8KKwl1NjQJcF9idWZfYWRkcjsJCQkvKiAweDAwMHtBMDAsLCxBRjB9ICovCisJdTY0CXBfYnVmX2F0dHI7CQkJLyogMFgwMDB7QTA4LCwsQUY4fSAqLwogICAgIH0gcF9wY2l4X3JlYWRfYnVmXzY0WzE2XTsKIAogICAgIHN0cnVjdCB7Ci0JdWludDY0X3QJcF9idWZfYWRkcjsJCQkvKiAweDAwMHtCMDAsLCxCRTB9ICovCi0JdWludDY0X3QJcF9idWZfYXR0cjsJCQkvKiAweDAwMHtCMDgsLCxCRTh9ICovCi0JdWludDY0X3QJcF9idWZfdmFsaWQ7CQkJLyogMHgwMDB7QjEwLCwsQkYwfSAqLwotCXVpbnQ2NF90CV9fcGFkMTsJCQkJLyogMHgwMDB7QjE4LCwsQkY4fSAqLworCXU2NAlwX2J1Zl9hZGRyOwkJCS8qIDB4MDAwe0IwMCwsLEJFMH0gKi8KKwl1NjQJcF9idWZfYXR0cjsJCQkvKiAweDAwMHtCMDgsLCxCRTh9ICovCisJdTY0CXBfYnVmX3ZhbGlkOwkJCS8qIDB4MDAwe0IxMCwsLEJGMH0gKi8KKwl1NjQJX19wYWQxOwkJCQkvKiAweDAwMHtCMTgsLCxCRjh9ICovCiAgICAgfSBwX3BjaXhfd3JpdGVfYnVmXzY0WzhdOwogCiAgICAgLyogRW5kIG9mIExvY2FsIFJlZ2lzdGVycyAtLSBTdGFydCBvZiBBZGRyZXNzIE1hcCBzcGFjZSAqLwpAQCAtMTk1LDQ1ICsxOTUsNDUgQEAKICAgICBjaGFyCQlfcGFkXzAwMGMwMFsweDAxMDAwMCAtIDB4MDAwYzAwXTsKIAogICAgIC8qIDB4MDEwMDAwLTB4MDExZmZmIC0tIEludGVybmFsIEFURSBSQU0gKEF1dG8gUGFyaXR5IEdlbmVyYXRpb24pICovCi0gICAgdWludDY0X3QJCXBfaW50X2F0ZV9yYW1bMTAyNF07CQkvKiAweDAxMDAwMC0weDAxMWZmZiAqLworICAgIHU2NAkJcF9pbnRfYXRlX3JhbVsxMDI0XTsJCS8qIDB4MDEwMDAwLTB4MDExZmZmICovCiAKICAgICAvKiAweDAxMjAwMC0weDAxM2ZmZiAtLSBJbnRlcm5hbCBBVEUgUkFNIChNYW51YWwgUGFyaXR5IEdlbmVyYXRpb24pICovCi0gICAgdWludDY0X3QJCXBfaW50X2F0ZV9yYW1fbXBbMTAyNF07CQkvKiAweDAxMjAwMC0weDAxM2ZmZiAqLworICAgIHU2NAkJcF9pbnRfYXRlX3JhbV9tcFsxMDI0XTsJCS8qIDB4MDEyMDAwLTB4MDEzZmZmICovCiAKICAgICBjaGFyCQlfcGFkXzAxNDAwMFsweDE4MDAwIC0gMHgwMTQwMDBdOwogCiAgICAgLyogMHgxODAwMC0weDE5N0Y4IC0tIFBJQyBXcml0ZSBSZXF1ZXN0IFJhbSAqLwotICAgIHVpbnQ2NF90CQlwX3dyX3JlcV9sb3dlclsyNTZdOwkJLyogMHgxODAwMCAtIDB4MTg3RjggKi8KLSAgICB1aW50NjRfdAkJcF93cl9yZXFfdXBwZXJbMjU2XTsJCS8qIDB4MTg4MDAgLSAweDE4RkY4ICovCi0gICAgdWludDY0X3QJCXBfd3JfcmVxX3Bhcml0eVsyNTZdOwkJLyogMHgxOTAwMCAtIDB4MTk3RjggKi8KKyAgICB1NjQJCXBfd3JfcmVxX2xvd2VyWzI1Nl07CQkvKiAweDE4MDAwIC0gMHgxODdGOCAqLworICAgIHU2NAkJcF93cl9yZXFfdXBwZXJbMjU2XTsJCS8qIDB4MTg4MDAgLSAweDE4RkY4ICovCisgICAgdTY0CQlwX3dyX3JlcV9wYXJpdHlbMjU2XTsJCS8qIDB4MTkwMDAgLSAweDE5N0Y4ICovCiAKICAgICBjaGFyCQlfcGFkXzAxOTgwMFsweDIwMDAwIC0gMHgwMTk4MDBdOwogCiAgICAgLyogMHgwMjAwMDAtMHgwMjdGRkYgLS0gUENJIERldmljZSBDb25maWd1cmF0aW9uIFNwYWNlcyAqLwogICAgIHVuaW9uIHsKLQl1aW50OF90CQljWzB4MTAwMCAvIDFdOwkJCS8qIDB4MDJ7MDAwMCwsLDdGRkZ9ICovCi0JdWludDE2X3QJc1sweDEwMDAgLyAyXTsJCQkvKiAweDAyezAwMDAsLCw3RkZGfSAqLwotCXVpbnQzMl90CWxbMHgxMDAwIC8gNF07CQkJLyogMHgwMnswMDAwLCwsN0ZGRn0gKi8KLQl1aW50NjRfdAlkWzB4MTAwMCAvIDhdOwkJCS8qIDB4MDJ7MDAwMCwsLDdGRkZ9ICovCisJdTgJCWNbMHgxMDAwIC8gMV07CQkJLyogMHgwMnswMDAwLCwsN0ZGRn0gKi8KKwl1MTYJc1sweDEwMDAgLyAyXTsJCQkvKiAweDAyezAwMDAsLCw3RkZGfSAqLworCXUzMglsWzB4MTAwMCAvIDRdOwkJCS8qIDB4MDJ7MDAwMCwsLDdGRkZ9ICovCisJdTY0CWRbMHgxMDAwIC8gOF07CQkJLyogMHgwMnswMDAwLCwsN0ZGRn0gKi8KIAl1bmlvbiB7Ci0JICAgIHVpbnQ4X3QJY1sweDEwMCAvIDFdOwotCSAgICB1aW50MTZfdAlzWzB4MTAwIC8gMl07Ci0JICAgIHVpbnQzMl90CWxbMHgxMDAgLyA0XTsKLQkgICAgdWludDY0X3QJZFsweDEwMCAvIDhdOworCSAgICB1OAljWzB4MTAwIC8gMV07CisJICAgIHUxNglzWzB4MTAwIC8gMl07CisJICAgIHUzMglsWzB4MTAwIC8gNF07CisJICAgIHU2NAlkWzB4MTAwIC8gOF07CiAJfSBmWzhdOwogICAgIH0gcF90eXBlMF9jZmdfZGV2WzhdOwkJCQkvKiAweDAyezAwMDAsLCw3RkZGfSAqLwogCiAgICAgLyogMHgwMjgwMDAtMHgwMjhGRkYgLS0gUENJIFR5cGUgMSBDb25maWd1cmF0aW9uIFNwYWNlICovCiAgICAgdW5pb24gewotCXVpbnQ4X3QJCWNbMHgxMDAwIC8gMV07CQkJLyogMHgwMjgwMDAtMHgwMjkwMDAgKi8KLQl1aW50MTZfdAlzWzB4MTAwMCAvIDJdOwkJCS8qIDB4MDI4MDAwLTB4MDI5MDAwICovCi0JdWludDMyX3QJbFsweDEwMDAgLyA0XTsJCQkvKiAweDAyODAwMC0weDAyOTAwMCAqLwotCXVpbnQ2NF90CWRbMHgxMDAwIC8gOF07CQkJLyogMHgwMjgwMDAtMHgwMjkwMDAgKi8KKwl1OAkJY1sweDEwMDAgLyAxXTsJCQkvKiAweDAyODAwMC0weDAyOTAwMCAqLworCXUxNglzWzB4MTAwMCAvIDJdOwkJCS8qIDB4MDI4MDAwLTB4MDI5MDAwICovCisJdTMyCWxbMHgxMDAwIC8gNF07CQkJLyogMHgwMjgwMDAtMHgwMjkwMDAgKi8KKwl1NjQJZFsweDEwMDAgLyA4XTsJCQkvKiAweDAyODAwMC0weDAyOTAwMCAqLwogCXVuaW9uIHsKLQkgICAgdWludDhfdAljWzB4MTAwIC8gMV07Ci0JICAgIHVpbnQxNl90CXNbMHgxMDAgLyAyXTsKLQkgICAgdWludDMyX3QJbFsweDEwMCAvIDRdOwotCSAgICB1aW50NjRfdAlkWzB4MTAwIC8gOF07CisJICAgIHU4CWNbMHgxMDAgLyAxXTsKKwkgICAgdTE2CXNbMHgxMDAgLyAyXTsKKwkgICAgdTMyCWxbMHgxMDAgLyA0XTsKKwkgICAgdTY0CWRbMHgxMDAgLyA4XTsKIAl9IGZbOF07CiAgICAgfSBwX3R5cGUxX2NmZzsJCQkJCS8qIDB4MDI4MDAwLTB4MDI5MDAwICovCiAKQEAgLTI0MSwyMCArMjQxLDIwIEBACiAKICAgICAvKiAweDAzMDAwMC0weDAzMDAwNyAtLSBQQ0kgSW50ZXJydXB0IEFja25vd2xlZGdlIEN5Y2xlICovCiAgICAgdW5pb24gewotCXVpbnQ4X3QJCWNbOCAvIDFdOwotCXVpbnQxNl90CXNbOCAvIDJdOwotCXVpbnQzMl90CWxbOCAvIDRdOwotCXVpbnQ2NF90CWRbOCAvIDhdOworCXU4CQljWzggLyAxXTsKKwl1MTYJc1s4IC8gMl07CisJdTMyCWxbOCAvIDRdOworCXU2NAlkWzggLyA4XTsKICAgICB9IHBfcGNpX2lhY2s7CQkJCQkvKiAweDAzMDAwMC0weDAzMDAwNyAqLwogCiAgICAgY2hhcgkJX3BhZF8wMzAwMDdbMHgwNDAwMDAtMHgwMzAwMDhdOwogCiAgICAgLyogMHgwNDAwMDAtMHgwMzAwMDcgLS0gUENJWCBTcGVjaWFsIEN5Y2xlICovCiAgICAgdW5pb24gewotCXVpbnQ4X3QJCWNbOCAvIDFdOwotCXVpbnQxNl90CXNbOCAvIDJdOwotCXVpbnQzMl90CWxbOCAvIDRdOwotCXVpbnQ2NF90CWRbOCAvIDhdOworCXU4CQljWzggLyAxXTsKKwl1MTYJc1s4IC8gMl07CisJdTMyCWxbOCAvIDRdOworCXU2NAlkWzggLyA4XTsKICAgICB9IHBfcGNpeF9jeWNsZTsJCQkJCS8qIDB4MDQwMDAwLTB4MDQwMDA3ICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NodWJpby5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zaHViaW8uaAppbmRleCA4MzFiNzIxLi4yMmE2ZjE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NodWJpby5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc2h1YmlvLmgKQEAgLTIyNywxMyArMjI3LDEzIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX3dpZF91IHsKLQl1aW50NjRfdCBpaV93aWRfcmVndmFsOworCXU2NCBpaV93aWRfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IHdfcnN2ZF8xOjE7Ci0JCXVpbnQ2NF90IHdfbWZnX251bToxMTsKLQkJdWludDY0X3Qgd19wYXJ0X251bToxNjsKLQkJdWludDY0X3Qgd19yZXZfbnVtOjQ7Ci0JCXVpbnQ2NF90IHdfcnN2ZDozMjsKKwkJdTY0IHdfcnN2ZF8xOjE7CisJCXU2NCB3X21mZ19udW06MTE7CisJCXU2NCB3X3BhcnRfbnVtOjE2OworCQl1NjQgd19yZXZfbnVtOjQ7CisJCXU2NCB3X3JzdmQ6MzI7CiAJfSBpaV93aWRfZmxkX3M7CiB9IGlpX3dpZF91X3Q7CiAKQEAgLTI0NiwxOCArMjQ2LDE4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX3dzdGF0X3UgewotCXVpbnQ2NF90IGlpX3dzdGF0X3JlZ3ZhbDsKKwl1NjQgaWlfd3N0YXRfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IHdfcGVuZGluZzo0OwotCQl1aW50NjRfdCB3X3h0X2NyZF90bzoxOwotCQl1aW50NjRfdCB3X3h0X3RhaWxfdG86MTsKLQkJdWludDY0X3Qgd19yc3ZkXzM6MzsKLQkJdWludDY0X3Qgd190eF9teF9ydHk6MTsKLQkJdWludDY0X3Qgd19yc3ZkXzI6NjsKLQkJdWludDY0X3Qgd19sbHBfdHhfY250Ojg7Ci0JCXVpbnQ2NF90IHdfcnN2ZF8xOjg7Ci0JCXVpbnQ2NF90IHdfY3Jhenk6MTsKLQkJdWludDY0X3Qgd19yc3ZkOjMxOworCQl1NjQgd19wZW5kaW5nOjQ7CisJCXU2NCB3X3h0X2NyZF90bzoxOworCQl1NjQgd194dF90YWlsX3RvOjE7CisJCXU2NCB3X3JzdmRfMzozOworCQl1NjQgd190eF9teF9ydHk6MTsKKwkJdTY0IHdfcnN2ZF8yOjY7CisJCXU2NCB3X2xscF90eF9jbnQ6ODsKKwkJdTY0IHdfcnN2ZF8xOjg7CisJCXU2NCB3X2NyYXp5OjE7CisJCXU2NCB3X3JzdmQ6MzE7CiAJfSBpaV93c3RhdF9mbGRfczsKIH0gaWlfd3N0YXRfdV90OwogCkBAIC0yNjksMTYgKzI2OSwxNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV93Y3JfdSB7Ci0JdWludDY0X3QgaWlfd2NyX3JlZ3ZhbDsKKwl1NjQgaWlfd2NyX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCB3X3dpZDo0OwotCQl1aW50NjRfdCB3X3RhZzoxOwotCQl1aW50NjRfdCB3X3JzdmRfMTo4OwotCQl1aW50NjRfdCB3X2RzdF9jcmQ6MzsKLQkJdWludDY0X3Qgd19mX2JhZF9wa3Q6MTsKLQkJdWludDY0X3Qgd19kaXJfY29uOjE7Ci0JCXVpbnQ2NF90IHdfZV90aHJlc2g6NTsKLQkJdWludDY0X3Qgd19yc3ZkOjQxOworCQl1NjQgd193aWQ6NDsKKwkJdTY0IHdfdGFnOjE7CisJCXU2NCB3X3JzdmRfMTo4OworCQl1NjQgd19kc3RfY3JkOjM7CisJCXU2NCB3X2ZfYmFkX3BrdDoxOworCQl1NjQgd19kaXJfY29uOjE7CisJCXU2NCB3X2VfdGhyZXNoOjU7CisJCXU2NCB3X3JzdmQ6NDE7CiAJfSBpaV93Y3JfZmxkX3M7CiB9IGlpX3djcl91X3Q7CiAKQEAgLTMxMCw5ICszMTAsOSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pbGFwcl91IHsKLQl1aW50NjRfdCBpaV9pbGFwcl9yZWd2YWw7CisJdTY0IGlpX2lsYXByX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3JlZ2lvbjo2NDsKKwkJdTY0IGlfcmVnaW9uOjY0OwogCX0gaWlfaWxhcHJfZmxkX3M7CiB9IGlpX2lsYXByX3VfdDsKIApAQCAtMzMwLDkgKzMzMCw5IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lsYXBvX3UgewotCXVpbnQ2NF90IGlpX2lsYXBvX3JlZ3ZhbDsKKwl1NjQgaWlfaWxhcG9fcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfaW9fb3ZycmlkZTo2NDsKKwkJdTY0IGlfaW9fb3ZycmlkZTo2NDsKIAl9IGlpX2lsYXBvX2ZsZF9zOwogfSBpaV9pbGFwb191X3Q7CiAKQEAgLTM0NCwxMiArMzQ0LDEyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lvd2FfdSB7Ci0JdWludDY0X3QgaWlfaW93YV9yZWd2YWw7CisJdTY0IGlpX2lvd2FfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfdzBfb2FjOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjc7Ci0JCXVpbnQ2NF90IGlfd3hfb2FjOjg7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo0ODsKKwkJdTY0IGlfdzBfb2FjOjE7CisJCXU2NCBpX3JzdmRfMTo3OworCQl1NjQgaV93eF9vYWM6ODsKKwkJdTY0IGlfcnN2ZDo0ODsKIAl9IGlpX2lvd2FfZmxkX3M7CiB9IGlpX2lvd2FfdV90OwogCkBAIC0zNjMsMTIgKzM2MywxMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9paXdhX3UgewotCXVpbnQ2NF90IGlpX2lpd2FfcmVndmFsOworCXU2NCBpaV9paXdhX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3cwX2lhYzoxOwotCQl1aW50NjRfdCBpX3JzdmRfMTo3OwotCQl1aW50NjRfdCBpX3d4X2lhYzo4OwotCQl1aW50NjRfdCBpX3JzdmQ6NDg7CisJCXU2NCBpX3cwX2lhYzoxOworCQl1NjQgaV9yc3ZkXzE6NzsKKwkJdTY0IGlfd3hfaWFjOjg7CisJCXU2NCBpX3JzdmQ6NDg7CiAJfSBpaV9paXdhX2ZsZF9zOwogfSBpaV9paXdhX3VfdDsKIApAQCAtMzkyLDE2ICszOTIsMTYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWlkZW1fdSB7Ci0JdWludDY0X3QgaWlfaWlkZW1fcmVndmFsOworCXU2NCBpaV9paWRlbV9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV93OF9keHM6ODsKLQkJdWludDY0X3QgaV93OV9keHM6ODsKLQkJdWludDY0X3QgaV93YV9keHM6ODsKLQkJdWludDY0X3QgaV93Yl9keHM6ODsKLQkJdWludDY0X3QgaV93Y19keHM6ODsKLQkJdWludDY0X3QgaV93ZF9keHM6ODsKLQkJdWludDY0X3QgaV93ZV9keHM6ODsKLQkJdWludDY0X3QgaV93Zl9keHM6ODsKKwkJdTY0IGlfdzhfZHhzOjg7CisJCXU2NCBpX3c5X2R4czo4OworCQl1NjQgaV93YV9keHM6ODsKKwkJdTY0IGlfd2JfZHhzOjg7CisJCXU2NCBpX3djX2R4czo4OworCQl1NjQgaV93ZF9keHM6ODsKKwkJdTY0IGlfd2VfZHhzOjg7CisJCXU2NCBpX3dmX2R4czo4OwogCX0gaWlfaWlkZW1fZmxkX3M7CiB9IGlpX2lpZGVtX3VfdDsKIApAQCAtNDEzLDIyICs0MTMsMjIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWxjc3JfdSB7Ci0JdWludDY0X3QgaWlfaWxjc3JfcmVndmFsOworCXU2NCBpaV9pbGNzcl9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9udWxsdG86NjsKLQkJdWludDY0X3QgaV9yc3ZkXzQ6MjsKLQkJdWludDY0X3QgaV93cm1yc3Q6MTsKLQkJdWludDY0X3QgaV9yc3ZkXzM6MTsKLQkJdWludDY0X3QgaV9sbHBfZW46MTsKLQkJdWludDY0X3QgaV9ibTg6MTsKLQkJdWludDY0X3QgaV9sbHBfc3RhdDoyOwotCQl1aW50NjRfdCBpX3JlbW90ZV9wb3dlcjoxOwotCQl1aW50NjRfdCBpX3JzdmRfMjoxOwotCQl1aW50NjRfdCBpX21heHJ0cnk6MTA7Ci0JCXVpbnQ2NF90IGlfZF9hdmFpbF9zZWw6MjsKLQkJdWludDY0X3QgaV9yc3ZkXzE6NDsKLQkJdWludDY0X3QgaV9tYXhicnN0OjEwOwotCQl1aW50NjRfdCBpX3JzdmQ6MjI7CisJCXU2NCBpX251bGx0bzo2OworCQl1NjQgaV9yc3ZkXzQ6MjsKKwkJdTY0IGlfd3JtcnN0OjE7CisJCXU2NCBpX3JzdmRfMzoxOworCQl1NjQgaV9sbHBfZW46MTsKKwkJdTY0IGlfYm04OjE7CisJCXU2NCBpX2xscF9zdGF0OjI7CisJCXU2NCBpX3JlbW90ZV9wb3dlcjoxOworCQl1NjQgaV9yc3ZkXzI6MTsKKwkJdTY0IGlfbWF4cnRyeToxMDsKKwkJdTY0IGlfZF9hdmFpbF9zZWw6MjsKKwkJdTY0IGlfcnN2ZF8xOjQ7CisJCXU2NCBpX21heGJyc3Q6MTA7CisJCXU2NCBpX3JzdmQ6MjI7CiAKIAl9IGlpX2lsY3NyX2ZsZF9zOwogfSBpaV9pbGNzcl91X3Q7CkBAIC00NDEsMTEgKzQ0MSwxMSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pbGxyX3UgewotCXVpbnQ2NF90IGlpX2lsbHJfcmVndmFsOworCXU2NCBpaV9pbGxyX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3NuX2NudDoxNjsKLQkJdWludDY0X3QgaV9jYl9jbnQ6MTY7Ci0JCXVpbnQ2NF90IGlfcnN2ZDozMjsKKwkJdTY0IGlfc25fY250OjE2OworCQl1NjQgaV9jYl9jbnQ6MTY7CisJCXU2NCBpX3JzdmQ6MzI7CiAJfSBpaV9pbGxyX2ZsZF9zOwogfSBpaV9pbGxyX3VfdDsKIApAQCAtNDY0LDE5ICs0NjQsMTkgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWlkc3JfdSB7Ci0JdWludDY0X3QgaWlfaWlkc3JfcmVndmFsOworCXU2NCBpaV9paWRzcl9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9sZXZlbDo4OwotCQl1aW50NjRfdCBpX3BpX2lkOjE7Ci0JCXVpbnQ2NF90IGlfbm9kZToxMTsKLQkJdWludDY0X3QgaV9yc3ZkXzM6NDsKLQkJdWludDY0X3QgaV9lbmFibGU6MTsKLQkJdWludDY0X3QgaV9yc3ZkXzI6MzsKLQkJdWludDY0X3QgaV9pbnRfc2VudDoyOwotCQl1aW50NjRfdCBpX3JzdmRfMToyOwotCQl1aW50NjRfdCBpX3BpMF9mb3J3YXJkX2ludDoxOwotCQl1aW50NjRfdCBpX3BpMV9mb3J3YXJkX2ludDoxOwotCQl1aW50NjRfdCBpX3JzdmQ6MzA7CisJCXU2NCBpX2xldmVsOjg7CisJCXU2NCBpX3BpX2lkOjE7CisJCXU2NCBpX25vZGU6MTE7CisJCXU2NCBpX3JzdmRfMzo0OworCQl1NjQgaV9lbmFibGU6MTsKKwkJdTY0IGlfcnN2ZF8yOjM7CisJCXU2NCBpX2ludF9zZW50OjI7CisJCXU2NCBpX3JzdmRfMToyOworCQl1NjQgaV9waTBfZm9yd2FyZF9pbnQ6MTsKKwkJdTY0IGlfcGkxX2ZvcndhcmRfaW50OjE7CisJCXU2NCBpX3JzdmQ6MzA7CiAJfSBpaV9paWRzcl9mbGRfczsKIH0gaWlfaWlkc3JfdV90OwogCkBAIC00OTIsMTMgKzQ5MiwxMyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pZ2Z4MF91IHsKLQl1aW50NjRfdCBpaV9pZ2Z4MF9yZWd2YWw7CisJdTY0IGlpX2lnZngwX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3dfbnVtOjQ7Ci0JCXVpbnQ2NF90IGlfcGlfaWQ6MTsKLQkJdWludDY0X3QgaV9uX251bToxMjsKLQkJdWludDY0X3QgaV9wX251bToxOwotCQl1aW50NjRfdCBpX3JzdmQ6NDY7CisJCXU2NCBpX3dfbnVtOjQ7CisJCXU2NCBpX3BpX2lkOjE7CisJCXU2NCBpX25fbnVtOjEyOworCQl1NjQgaV9wX251bToxOworCQl1NjQgaV9yc3ZkOjQ2OwogCX0gaWlfaWdmeDBfZmxkX3M7CiB9IGlpX2lnZngwX3VfdDsKIApAQCAtNTE0LDEzICs1MTQsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWdmeDFfdSB7Ci0JdWludDY0X3QgaWlfaWdmeDFfcmVndmFsOworCXU2NCBpaV9pZ2Z4MV9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV93X251bTo0OwotCQl1aW50NjRfdCBpX3BpX2lkOjE7Ci0JCXVpbnQ2NF90IGlfbl9udW06MTI7Ci0JCXVpbnQ2NF90IGlfcF9udW06MTsKLQkJdWludDY0X3QgaV9yc3ZkOjQ2OworCQl1NjQgaV93X251bTo0OworCQl1NjQgaV9waV9pZDoxOworCQl1NjQgaV9uX251bToxMjsKKwkJdTY0IGlfcF9udW06MTsKKwkJdTY0IGlfcnN2ZDo0NjsKIAl9IGlpX2lnZngxX2ZsZF9zOwogfSBpaV9pZ2Z4MV91X3Q7CiAKQEAgLTUzMiw5ICs1MzIsOSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pc2NyMF91IHsKLQl1aW50NjRfdCBpaV9pc2NyMF9yZWd2YWw7CisJdTY0IGlpX2lzY3IwX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3NjcmF0Y2g6NjQ7CisJCXU2NCBpX3NjcmF0Y2g6NjQ7CiAJfSBpaV9pc2NyMF9mbGRfczsKIH0gaWlfaXNjcjBfdV90OwogCkBAIC01NDYsOSArNTQ2LDkgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXNjcjFfdSB7Ci0JdWludDY0X3QgaWlfaXNjcjFfcmVndmFsOworCXU2NCBpaV9pc2NyMV9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9zY3JhdGNoOjY0OworCQl1NjQgaV9zY3JhdGNoOjY0OwogCX0gaWlfaXNjcjFfZmxkX3M7CiB9IGlpX2lzY3IxX3VfdDsKIApAQCAtNTgwLDEzICs1ODAsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXR0ZTFfdSB7Ci0JdWludDY0X3QgaWlfaXR0ZTFfcmVndmFsOworCXU2NCBpaV9pdHRlMV9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9vZmZzZXQ6NTsKLQkJdWludDY0X3QgaV9yc3ZkXzE6MzsKLQkJdWludDY0X3QgaV93X251bTo0OwotCQl1aW50NjRfdCBpX2lvc3A6MTsKLQkJdWludDY0X3QgaV9yc3ZkOjUxOworCQl1NjQgaV9vZmZzZXQ6NTsKKwkJdTY0IGlfcnN2ZF8xOjM7CisJCXU2NCBpX3dfbnVtOjQ7CisJCXU2NCBpX2lvc3A6MTsKKwkJdTY0IGlfcnN2ZDo1MTsKIAl9IGlpX2l0dGUxX2ZsZF9zOwogfSBpaV9pdHRlMV91X3Q7CiAKQEAgLTYxOCwxMyArNjE4LDEzIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2l0dGUyX3UgewotCXVpbnQ2NF90IGlpX2l0dGUyX3JlZ3ZhbDsKKwl1NjQgaWlfaXR0ZTJfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfb2Zmc2V0OjU7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjM7Ci0JCXVpbnQ2NF90IGlfd19udW06NDsKLQkJdWludDY0X3QgaV9pb3NwOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo1MTsKKwkJdTY0IGlfb2Zmc2V0OjU7CisJCXU2NCBpX3JzdmRfMTozOworCQl1NjQgaV93X251bTo0OworCQl1NjQgaV9pb3NwOjE7CisJCXU2NCBpX3JzdmQ6NTE7CiAJfSBpaV9pdHRlMl9mbGRfczsKIH0gaWlfaXR0ZTJfdV90OwogCkBAIC02NTYsMTMgKzY1NiwxMyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pdHRlM191IHsKLQl1aW50NjRfdCBpaV9pdHRlM19yZWd2YWw7CisJdTY0IGlpX2l0dGUzX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX29mZnNldDo1OwotCQl1aW50NjRfdCBpX3JzdmRfMTozOwotCQl1aW50NjRfdCBpX3dfbnVtOjQ7Ci0JCXVpbnQ2NF90IGlfaW9zcDoxOwotCQl1aW50NjRfdCBpX3JzdmQ6NTE7CisJCXU2NCBpX29mZnNldDo1OworCQl1NjQgaV9yc3ZkXzE6MzsKKwkJdTY0IGlfd19udW06NDsKKwkJdTY0IGlfaW9zcDoxOworCQl1NjQgaV9yc3ZkOjUxOwogCX0gaWlfaXR0ZTNfZmxkX3M7CiB9IGlpX2l0dGUzX3VfdDsKIApAQCAtNjk0LDEzICs2OTQsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXR0ZTRfdSB7Ci0JdWludDY0X3QgaWlfaXR0ZTRfcmVndmFsOworCXU2NCBpaV9pdHRlNF9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9vZmZzZXQ6NTsKLQkJdWludDY0X3QgaV9yc3ZkXzE6MzsKLQkJdWludDY0X3QgaV93X251bTo0OwotCQl1aW50NjRfdCBpX2lvc3A6MTsKLQkJdWludDY0X3QgaV9yc3ZkOjUxOworCQl1NjQgaV9vZmZzZXQ6NTsKKwkJdTY0IGlfcnN2ZF8xOjM7CisJCXU2NCBpX3dfbnVtOjQ7CisJCXU2NCBpX2lvc3A6MTsKKwkJdTY0IGlfcnN2ZDo1MTsKIAl9IGlpX2l0dGU0X2ZsZF9zOwogfSBpaV9pdHRlNF91X3Q7CiAKQEAgLTczMiwxMyArNzMyLDEzIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2l0dGU1X3UgewotCXVpbnQ2NF90IGlpX2l0dGU1X3JlZ3ZhbDsKKwl1NjQgaWlfaXR0ZTVfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfb2Zmc2V0OjU7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjM7Ci0JCXVpbnQ2NF90IGlfd19udW06NDsKLQkJdWludDY0X3QgaV9pb3NwOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo1MTsKKwkJdTY0IGlfb2Zmc2V0OjU7CisJCXU2NCBpX3JzdmRfMTozOworCQl1NjQgaV93X251bTo0OworCQl1NjQgaV9pb3NwOjE7CisJCXU2NCBpX3JzdmQ6NTE7CiAJfSBpaV9pdHRlNV9mbGRfczsKIH0gaWlfaXR0ZTVfdV90OwogCkBAIC03NzAsMTMgKzc3MCwxMyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pdHRlNl91IHsKLQl1aW50NjRfdCBpaV9pdHRlNl9yZWd2YWw7CisJdTY0IGlpX2l0dGU2X3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX29mZnNldDo1OwotCQl1aW50NjRfdCBpX3JzdmRfMTozOwotCQl1aW50NjRfdCBpX3dfbnVtOjQ7Ci0JCXVpbnQ2NF90IGlfaW9zcDoxOwotCQl1aW50NjRfdCBpX3JzdmQ6NTE7CisJCXU2NCBpX29mZnNldDo1OworCQl1NjQgaV9yc3ZkXzE6MzsKKwkJdTY0IGlfd19udW06NDsKKwkJdTY0IGlfaW9zcDoxOworCQl1NjQgaV9yc3ZkOjUxOwogCX0gaWlfaXR0ZTZfZmxkX3M7CiB9IGlpX2l0dGU2X3VfdDsKIApAQCAtODA4LDEzICs4MDgsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXR0ZTdfdSB7Ci0JdWludDY0X3QgaWlfaXR0ZTdfcmVndmFsOworCXU2NCBpaV9pdHRlN19yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9vZmZzZXQ6NTsKLQkJdWludDY0X3QgaV9yc3ZkXzE6MzsKLQkJdWludDY0X3QgaV93X251bTo0OwotCQl1aW50NjRfdCBpX2lvc3A6MTsKLQkJdWludDY0X3QgaV9yc3ZkOjUxOworCQl1NjQgaV9vZmZzZXQ6NTsKKwkJdTY0IGlfcnN2ZF8xOjM7CisJCXU2NCBpX3dfbnVtOjQ7CisJCXU2NCBpX2lvc3A6MTsKKwkJdTY0IGlfcnN2ZDo1MTsKIAl9IGlpX2l0dGU3X2ZsZF9zOwogfSBpaV9pdHRlN191X3Q7CiAKQEAgLTg0MywyMiArODQzLDIyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcmIwX3UgewotCXVpbnQ2NF90IGlpX2lwcmIwX3JlZ3ZhbDsKKwl1NjQgaWlfaXByYjBfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfYzo4OwotCQl1aW50NjRfdCBpX25hOjE0OwotCQl1aW50NjRfdCBpX3JzdmRfMjoyOwotCQl1aW50NjRfdCBpX25iOjE0OwotCQl1aW50NjRfdCBpX3JzdmRfMToyOwotCQl1aW50NjRfdCBpX206MjsKLQkJdWludDY0X3QgaV9mOjE7Ci0JCXVpbnQ2NF90IGlfb2ZfY250OjU7Ci0JCXVpbnQ2NF90IGlfZXJyb3I6MTsKLQkJdWludDY0X3QgaV9yZF90bzoxOwotCQl1aW50NjRfdCBpX3NwdXJfd3I6MTsKLQkJdWludDY0X3QgaV9zcHVyX3JkOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDoxMTsKLQkJdWludDY0X3QgaV9tdWx0X2VycjoxOworCQl1NjQgaV9jOjg7CisJCXU2NCBpX25hOjE0OworCQl1NjQgaV9yc3ZkXzI6MjsKKwkJdTY0IGlfbmI6MTQ7CisJCXU2NCBpX3JzdmRfMToyOworCQl1NjQgaV9tOjI7CisJCXU2NCBpX2Y6MTsKKwkJdTY0IGlfb2ZfY250OjU7CisJCXU2NCBpX2Vycm9yOjE7CisJCXU2NCBpX3JkX3RvOjE7CisJCXU2NCBpX3NwdXJfd3I6MTsKKwkJdTY0IGlfc3B1cl9yZDoxOworCQl1NjQgaV9yc3ZkOjExOworCQl1NjQgaV9tdWx0X2VycjoxOwogCX0gaWlfaXByYjBfZmxkX3M7CiB9IGlpX2lwcmIwX3VfdDsKIApAQCAtODg3LDIyICs4ODcsMjIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXByYjhfdSB7Ci0JdWludDY0X3QgaWlfaXByYjhfcmVndmFsOworCXU2NCBpaV9pcHJiOF9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9jOjg7Ci0JCXVpbnQ2NF90IGlfbmE6MTQ7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8yOjI7Ci0JCXVpbnQ2NF90IGlfbmI6MTQ7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjI7Ci0JCXVpbnQ2NF90IGlfbToyOwotCQl1aW50NjRfdCBpX2Y6MTsKLQkJdWludDY0X3QgaV9vZl9jbnQ6NTsKLQkJdWludDY0X3QgaV9lcnJvcjoxOwotCQl1aW50NjRfdCBpX3JkX3RvOjE7Ci0JCXVpbnQ2NF90IGlfc3B1cl93cjoxOwotCQl1aW50NjRfdCBpX3NwdXJfcmQ6MTsKLQkJdWludDY0X3QgaV9yc3ZkOjExOwotCQl1aW50NjRfdCBpX211bHRfZXJyOjE7CisJCXU2NCBpX2M6ODsKKwkJdTY0IGlfbmE6MTQ7CisJCXU2NCBpX3JzdmRfMjoyOworCQl1NjQgaV9uYjoxNDsKKwkJdTY0IGlfcnN2ZF8xOjI7CisJCXU2NCBpX206MjsKKwkJdTY0IGlfZjoxOworCQl1NjQgaV9vZl9jbnQ6NTsKKwkJdTY0IGlfZXJyb3I6MTsKKwkJdTY0IGlfcmRfdG86MTsKKwkJdTY0IGlfc3B1cl93cjoxOworCQl1NjQgaV9zcHVyX3JkOjE7CisJCXU2NCBpX3JzdmQ6MTE7CisJCXU2NCBpX211bHRfZXJyOjE7CiAJfSBpaV9pcHJiOF9mbGRfczsKIH0gaWlfaXByYjhfdV90OwogCkBAIC05MzEsMjIgKzkzMSwyMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJiOV91IHsKLQl1aW50NjRfdCBpaV9pcHJiOV9yZWd2YWw7CisJdTY0IGlpX2lwcmI5X3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX2M6ODsKLQkJdWludDY0X3QgaV9uYToxNDsKLQkJdWludDY0X3QgaV9yc3ZkXzI6MjsKLQkJdWludDY0X3QgaV9uYjoxNDsKLQkJdWludDY0X3QgaV9yc3ZkXzE6MjsKLQkJdWludDY0X3QgaV9tOjI7Ci0JCXVpbnQ2NF90IGlfZjoxOwotCQl1aW50NjRfdCBpX29mX2NudDo1OwotCQl1aW50NjRfdCBpX2Vycm9yOjE7Ci0JCXVpbnQ2NF90IGlfcmRfdG86MTsKLQkJdWludDY0X3QgaV9zcHVyX3dyOjE7Ci0JCXVpbnQ2NF90IGlfc3B1cl9yZDoxOwotCQl1aW50NjRfdCBpX3JzdmQ6MTE7Ci0JCXVpbnQ2NF90IGlfbXVsdF9lcnI6MTsKKwkJdTY0IGlfYzo4OworCQl1NjQgaV9uYToxNDsKKwkJdTY0IGlfcnN2ZF8yOjI7CisJCXU2NCBpX25iOjE0OworCQl1NjQgaV9yc3ZkXzE6MjsKKwkJdTY0IGlfbToyOworCQl1NjQgaV9mOjE7CisJCXU2NCBpX29mX2NudDo1OworCQl1NjQgaV9lcnJvcjoxOworCQl1NjQgaV9yZF90bzoxOworCQl1NjQgaV9zcHVyX3dyOjE7CisJCXU2NCBpX3NwdXJfcmQ6MTsKKwkJdTY0IGlfcnN2ZDoxMTsKKwkJdTY0IGlfbXVsdF9lcnI6MTsKIAl9IGlpX2lwcmI5X2ZsZF9zOwogfSBpaV9pcHJiOV91X3Q7CiAKQEAgLTk3NSwyMiArOTc1LDIyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcmJhX3UgewotCXVpbnQ2NF90IGlpX2lwcmJhX3JlZ3ZhbDsKKwl1NjQgaWlfaXByYmFfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfYzo4OwotCQl1aW50NjRfdCBpX25hOjE0OwotCQl1aW50NjRfdCBpX3JzdmRfMjoyOwotCQl1aW50NjRfdCBpX25iOjE0OwotCQl1aW50NjRfdCBpX3JzdmRfMToyOwotCQl1aW50NjRfdCBpX206MjsKLQkJdWludDY0X3QgaV9mOjE7Ci0JCXVpbnQ2NF90IGlfb2ZfY250OjU7Ci0JCXVpbnQ2NF90IGlfZXJyb3I6MTsKLQkJdWludDY0X3QgaV9yZF90bzoxOwotCQl1aW50NjRfdCBpX3NwdXJfd3I6MTsKLQkJdWludDY0X3QgaV9zcHVyX3JkOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDoxMTsKLQkJdWludDY0X3QgaV9tdWx0X2VycjoxOworCQl1NjQgaV9jOjg7CisJCXU2NCBpX25hOjE0OworCQl1NjQgaV9yc3ZkXzI6MjsKKwkJdTY0IGlfbmI6MTQ7CisJCXU2NCBpX3JzdmRfMToyOworCQl1NjQgaV9tOjI7CisJCXU2NCBpX2Y6MTsKKwkJdTY0IGlfb2ZfY250OjU7CisJCXU2NCBpX2Vycm9yOjE7CisJCXU2NCBpX3JkX3RvOjE7CisJCXU2NCBpX3NwdXJfd3I6MTsKKwkJdTY0IGlfc3B1cl9yZDoxOworCQl1NjQgaV9yc3ZkOjExOworCQl1NjQgaV9tdWx0X2VycjoxOwogCX0gaWlfaXByYmFfZmxkX3M7CiB9IGlpX2lwcmJhX3VfdDsKIApAQCAtMTAxOSwyMiArMTAxOSwyMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJiYl91IHsKLQl1aW50NjRfdCBpaV9pcHJiYl9yZWd2YWw7CisJdTY0IGlpX2lwcmJiX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX2M6ODsKLQkJdWludDY0X3QgaV9uYToxNDsKLQkJdWludDY0X3QgaV9yc3ZkXzI6MjsKLQkJdWludDY0X3QgaV9uYjoxNDsKLQkJdWludDY0X3QgaV9yc3ZkXzE6MjsKLQkJdWludDY0X3QgaV9tOjI7Ci0JCXVpbnQ2NF90IGlfZjoxOwotCQl1aW50NjRfdCBpX29mX2NudDo1OwotCQl1aW50NjRfdCBpX2Vycm9yOjE7Ci0JCXVpbnQ2NF90IGlfcmRfdG86MTsKLQkJdWludDY0X3QgaV9zcHVyX3dyOjE7Ci0JCXVpbnQ2NF90IGlfc3B1cl9yZDoxOwotCQl1aW50NjRfdCBpX3JzdmQ6MTE7Ci0JCXVpbnQ2NF90IGlfbXVsdF9lcnI6MTsKKwkJdTY0IGlfYzo4OworCQl1NjQgaV9uYToxNDsKKwkJdTY0IGlfcnN2ZF8yOjI7CisJCXU2NCBpX25iOjE0OworCQl1NjQgaV9yc3ZkXzE6MjsKKwkJdTY0IGlfbToyOworCQl1NjQgaV9mOjE7CisJCXU2NCBpX29mX2NudDo1OworCQl1NjQgaV9lcnJvcjoxOworCQl1NjQgaV9yZF90bzoxOworCQl1NjQgaV9zcHVyX3dyOjE7CisJCXU2NCBpX3NwdXJfcmQ6MTsKKwkJdTY0IGlfcnN2ZDoxMTsKKwkJdTY0IGlfbXVsdF9lcnI6MTsKIAl9IGlpX2lwcmJiX2ZsZF9zOwogfSBpaV9pcHJiYl91X3Q7CiAKQEAgLTEwNjMsMjIgKzEwNjMsMjIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXByYmNfdSB7Ci0JdWludDY0X3QgaWlfaXByYmNfcmVndmFsOworCXU2NCBpaV9pcHJiY19yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9jOjg7Ci0JCXVpbnQ2NF90IGlfbmE6MTQ7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8yOjI7Ci0JCXVpbnQ2NF90IGlfbmI6MTQ7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjI7Ci0JCXVpbnQ2NF90IGlfbToyOwotCQl1aW50NjRfdCBpX2Y6MTsKLQkJdWludDY0X3QgaV9vZl9jbnQ6NTsKLQkJdWludDY0X3QgaV9lcnJvcjoxOwotCQl1aW50NjRfdCBpX3JkX3RvOjE7Ci0JCXVpbnQ2NF90IGlfc3B1cl93cjoxOwotCQl1aW50NjRfdCBpX3NwdXJfcmQ6MTsKLQkJdWludDY0X3QgaV9yc3ZkOjExOwotCQl1aW50NjRfdCBpX211bHRfZXJyOjE7CisJCXU2NCBpX2M6ODsKKwkJdTY0IGlfbmE6MTQ7CisJCXU2NCBpX3JzdmRfMjoyOworCQl1NjQgaV9uYjoxNDsKKwkJdTY0IGlfcnN2ZF8xOjI7CisJCXU2NCBpX206MjsKKwkJdTY0IGlfZjoxOworCQl1NjQgaV9vZl9jbnQ6NTsKKwkJdTY0IGlfZXJyb3I6MTsKKwkJdTY0IGlfcmRfdG86MTsKKwkJdTY0IGlfc3B1cl93cjoxOworCQl1NjQgaV9zcHVyX3JkOjE7CisJCXU2NCBpX3JzdmQ6MTE7CisJCXU2NCBpX211bHRfZXJyOjE7CiAJfSBpaV9pcHJiY19mbGRfczsKIH0gaWlfaXByYmNfdV90OwogCkBAIC0xMTA3LDIyICsxMTA3LDIyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcmJkX3UgewotCXVpbnQ2NF90IGlpX2lwcmJkX3JlZ3ZhbDsKKwl1NjQgaWlfaXByYmRfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfYzo4OwotCQl1aW50NjRfdCBpX25hOjE0OwotCQl1aW50NjRfdCBpX3JzdmRfMjoyOwotCQl1aW50NjRfdCBpX25iOjE0OwotCQl1aW50NjRfdCBpX3JzdmRfMToyOwotCQl1aW50NjRfdCBpX206MjsKLQkJdWludDY0X3QgaV9mOjE7Ci0JCXVpbnQ2NF90IGlfb2ZfY250OjU7Ci0JCXVpbnQ2NF90IGlfZXJyb3I6MTsKLQkJdWludDY0X3QgaV9yZF90bzoxOwotCQl1aW50NjRfdCBpX3NwdXJfd3I6MTsKLQkJdWludDY0X3QgaV9zcHVyX3JkOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDoxMTsKLQkJdWludDY0X3QgaV9tdWx0X2VycjoxOworCQl1NjQgaV9jOjg7CisJCXU2NCBpX25hOjE0OworCQl1NjQgaV9yc3ZkXzI6MjsKKwkJdTY0IGlfbmI6MTQ7CisJCXU2NCBpX3JzdmRfMToyOworCQl1NjQgaV9tOjI7CisJCXU2NCBpX2Y6MTsKKwkJdTY0IGlfb2ZfY250OjU7CisJCXU2NCBpX2Vycm9yOjE7CisJCXU2NCBpX3JkX3RvOjE7CisJCXU2NCBpX3NwdXJfd3I6MTsKKwkJdTY0IGlfc3B1cl9yZDoxOworCQl1NjQgaV9yc3ZkOjExOworCQl1NjQgaV9tdWx0X2VycjoxOwogCX0gaWlfaXByYmRfZmxkX3M7CiB9IGlpX2lwcmJkX3VfdDsKIApAQCAtMTE1MSwyMiArMTE1MSwyMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJiZV91IHsKLQl1aW50NjRfdCBpaV9pcHJiZV9yZWd2YWw7CisJdTY0IGlpX2lwcmJlX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX2M6ODsKLQkJdWludDY0X3QgaV9uYToxNDsKLQkJdWludDY0X3QgaV9yc3ZkXzI6MjsKLQkJdWludDY0X3QgaV9uYjoxNDsKLQkJdWludDY0X3QgaV9yc3ZkXzE6MjsKLQkJdWludDY0X3QgaV9tOjI7Ci0JCXVpbnQ2NF90IGlfZjoxOwotCQl1aW50NjRfdCBpX29mX2NudDo1OwotCQl1aW50NjRfdCBpX2Vycm9yOjE7Ci0JCXVpbnQ2NF90IGlfcmRfdG86MTsKLQkJdWludDY0X3QgaV9zcHVyX3dyOjE7Ci0JCXVpbnQ2NF90IGlfc3B1cl9yZDoxOwotCQl1aW50NjRfdCBpX3JzdmQ6MTE7Ci0JCXVpbnQ2NF90IGlfbXVsdF9lcnI6MTsKKwkJdTY0IGlfYzo4OworCQl1NjQgaV9uYToxNDsKKwkJdTY0IGlfcnN2ZF8yOjI7CisJCXU2NCBpX25iOjE0OworCQl1NjQgaV9yc3ZkXzE6MjsKKwkJdTY0IGlfbToyOworCQl1NjQgaV9mOjE7CisJCXU2NCBpX29mX2NudDo1OworCQl1NjQgaV9lcnJvcjoxOworCQl1NjQgaV9yZF90bzoxOworCQl1NjQgaV9zcHVyX3dyOjE7CisJCXU2NCBpX3NwdXJfcmQ6MTsKKwkJdTY0IGlfcnN2ZDoxMTsKKwkJdTY0IGlfbXVsdF9lcnI6MTsKIAl9IGlpX2lwcmJlX2ZsZF9zOwogfSBpaV9pcHJiZV91X3Q7CiAKQEAgLTExOTUsMjIgKzExOTUsMjIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXByYmZfdSB7Ci0JdWludDY0X3QgaWlfaXByYmZfcmVndmFsOworCXU2NCBpaV9pcHJiZl9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9jOjg7Ci0JCXVpbnQ2NF90IGlfbmE6MTQ7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8yOjI7Ci0JCXVpbnQ2NF90IGlfbmI6MTQ7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjI7Ci0JCXVpbnQ2NF90IGlfbToyOwotCQl1aW50NjRfdCBpX2Y6MTsKLQkJdWludDY0X3QgaV9vZl9jbnQ6NTsKLQkJdWludDY0X3QgaV9lcnJvcjoxOwotCQl1aW50NjRfdCBpX3JkX3RvOjE7Ci0JCXVpbnQ2NF90IGlfc3B1cl93cjoxOwotCQl1aW50NjRfdCBpX3NwdXJfcmQ6MTsKLQkJdWludDY0X3QgaV9yc3ZkOjExOwotCQl1aW50NjRfdCBpX211bHRfZXJyOjE7CisJCXU2NCBpX2M6ODsKKwkJdTY0IGlfbmE6MTQ7CisJCXU2NCBpX3JzdmRfMjoyOworCQl1NjQgaV9uYjoxNDsKKwkJdTY0IGlfcnN2ZF8xOjI7CisJCXU2NCBpX206MjsKKwkJdTY0IGlfZjoxOworCQl1NjQgaV9vZl9jbnQ6NTsKKwkJdTY0IGlfZXJyb3I6MTsKKwkJdTY0IGlfcmRfdG86MTsKKwkJdTY0IGlfc3B1cl93cjoxOworCQl1NjQgaV9zcHVyX3JkOjE7CisJCXU2NCBpX3JzdmQ6MTE7CisJCXU2NCBpX211bHRfZXJyOjE7CiAJfSBpaV9pcHJiZV9mbGRfczsKIH0gaWlfaXByYmZfdV90OwogCkBAIC0xMjMyLDEwICsxMjMyLDEwIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2l4Y2NfdSB7Ci0JdWludDY0X3QgaWlfaXhjY19yZWd2YWw7CisJdTY0IGlpX2l4Y2NfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfdGltZV9vdXQ6MjY7Ci0JCXVpbnQ2NF90IGlfcnN2ZDozODsKKwkJdTY0IGlfdGltZV9vdXQ6MjY7CisJCXU2NCBpX3JzdmQ6Mzg7CiAJfSBpaV9peGNjX2ZsZF9zOwogfSBpaV9peGNjX3VfdDsKIApAQCAtMTI1NiwxNiArMTI1NiwxNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pbWVtX3UgewotCXVpbnQ2NF90IGlpX2ltZW1fcmVndmFsOworCXU2NCBpaV9pbWVtX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3cwX2VzZDoxOwotCQl1aW50NjRfdCBpX3JzdmRfMzozOwotCQl1aW50NjRfdCBpX2IwX2VzZDoxOwotCQl1aW50NjRfdCBpX3JzdmRfMjozOwotCQl1aW50NjRfdCBpX2IxX2VzZDoxOwotCQl1aW50NjRfdCBpX3JzdmRfMTozOwotCQl1aW50NjRfdCBpX2Nscl9wcmVjaXNlOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo1MTsKKwkJdTY0IGlfdzBfZXNkOjE7CisJCXU2NCBpX3JzdmRfMzozOworCQl1NjQgaV9iMF9lc2Q6MTsKKwkJdTY0IGlfcnN2ZF8yOjM7CisJCXU2NCBpX2IxX2VzZDoxOworCQl1NjQgaV9yc3ZkXzE6MzsKKwkJdTY0IGlfY2xyX3ByZWNpc2U6MTsKKwkJdTY0IGlfcnN2ZDo1MTsKIAl9IGlpX2ltZW1fZmxkX3M7CiB9IGlpX2ltZW1fdV90OwogCkBAIC0xMjk0LDEzICsxMjk0LDEzIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2l4dHRfdSB7Ci0JdWludDY0X3QgaWlfaXh0dF9yZWd2YWw7CisJdTY0IGlpX2l4dHRfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfdGFpbF90bzoyNjsKLQkJdWludDY0X3QgaV9yc3ZkXzE6NjsKLQkJdWludDY0X3QgaV9ycnNwX3BzOjIzOwotCQl1aW50NjRfdCBpX3Jyc3BfdG86NTsKLQkJdWludDY0X3QgaV9yc3ZkOjQ7CisJCXU2NCBpX3RhaWxfdG86MjY7CisJCXU2NCBpX3JzdmRfMTo2OworCQl1NjQgaV9ycnNwX3BzOjIzOworCQl1NjQgaV9ycnNwX3RvOjU7CisJCXU2NCBpX3JzdmQ6NDsKIAl9IGlpX2l4dHRfZmxkX3M7CiB9IGlpX2l4dHRfdV90OwogCkBAIC0xMzE2LDM3ICsxMzE2LDM3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2llY2xyX3UgewotCXVpbnQ2NF90IGlpX2llY2xyX3JlZ3ZhbDsKKwl1NjQgaWlfaWVjbHJfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfZV9wcmJfMDoxOwotCQl1aW50NjRfdCBpX3JzdmQ6NzsKLQkJdWludDY0X3QgaV9lX3ByYl84OjE7Ci0JCXVpbnQ2NF90IGlfZV9wcmJfOToxOwotCQl1aW50NjRfdCBpX2VfcHJiX2E6MTsKLQkJdWludDY0X3QgaV9lX3ByYl9iOjE7Ci0JCXVpbnQ2NF90IGlfZV9wcmJfYzoxOwotCQl1aW50NjRfdCBpX2VfcHJiX2Q6MTsKLQkJdWludDY0X3QgaV9lX3ByYl9lOjE7Ci0JCXVpbnQ2NF90IGlfZV9wcmJfZjoxOwotCQl1aW50NjRfdCBpX2VfY3Jhenk6MTsKLQkJdWludDY0X3QgaV9lX2J0ZV8wOjE7Ci0JCXVpbnQ2NF90IGlfZV9idGVfMToxOwotCQl1aW50NjRfdCBpX3Jlc2VydmVkXzE6MTA7Ci0JCXVpbnQ2NF90IGlfc3B1cl9yZF9oZHI6MTsKLQkJdWludDY0X3QgaV9jYW1faW50cl90bzoxOwotCQl1aW50NjRfdCBpX2NhbV9vdmVyZmxvdzoxOwotCQl1aW50NjRfdCBpX2NhbV9yZWFkX21pc3M6MTsKLQkJdWludDY0X3QgaV9pb3FfcmVwX3VuZGVyZmxvdzoxOwotCQl1aW50NjRfdCBpX2lvcV9yZXFfdW5kZXJmbG93OjE7Ci0JCXVpbnQ2NF90IGlfaW9xX3JlcF9vdmVyZmxvdzoxOwotCQl1aW50NjRfdCBpX2lvcV9yZXFfb3ZlcmZsb3c6MTsKLQkJdWludDY0X3QgaV9paXFfcmVwX292ZXJmbG93OjE7Ci0JCXVpbnQ2NF90IGlfaWlxX3JlcV9vdmVyZmxvdzoxOwotCQl1aW50NjRfdCBpX2lpX3huX3JlcF9jcmVkX292ZXJmbG93OjE7Ci0JCXVpbnQ2NF90IGlfaWlfeG5fcmVxX2NyZWRfb3ZlcmZsb3c6MTsKLQkJdWludDY0X3QgaV9paV94bl9pbnZhbGlkX2NtZDoxOwotCQl1aW50NjRfdCBpX3huX2lpX2ludmFsaWRfY21kOjE7Ci0JCXVpbnQ2NF90IGlfcmVzZXJ2ZWRfMjoyMTsKKwkJdTY0IGlfZV9wcmJfMDoxOworCQl1NjQgaV9yc3ZkOjc7CisJCXU2NCBpX2VfcHJiXzg6MTsKKwkJdTY0IGlfZV9wcmJfOToxOworCQl1NjQgaV9lX3ByYl9hOjE7CisJCXU2NCBpX2VfcHJiX2I6MTsKKwkJdTY0IGlfZV9wcmJfYzoxOworCQl1NjQgaV9lX3ByYl9kOjE7CisJCXU2NCBpX2VfcHJiX2U6MTsKKwkJdTY0IGlfZV9wcmJfZjoxOworCQl1NjQgaV9lX2NyYXp5OjE7CisJCXU2NCBpX2VfYnRlXzA6MTsKKwkJdTY0IGlfZV9idGVfMToxOworCQl1NjQgaV9yZXNlcnZlZF8xOjEwOworCQl1NjQgaV9zcHVyX3JkX2hkcjoxOworCQl1NjQgaV9jYW1faW50cl90bzoxOworCQl1NjQgaV9jYW1fb3ZlcmZsb3c6MTsKKwkJdTY0IGlfY2FtX3JlYWRfbWlzczoxOworCQl1NjQgaV9pb3FfcmVwX3VuZGVyZmxvdzoxOworCQl1NjQgaV9pb3FfcmVxX3VuZGVyZmxvdzoxOworCQl1NjQgaV9pb3FfcmVwX292ZXJmbG93OjE7CisJCXU2NCBpX2lvcV9yZXFfb3ZlcmZsb3c6MTsKKwkJdTY0IGlfaWlxX3JlcF9vdmVyZmxvdzoxOworCQl1NjQgaV9paXFfcmVxX292ZXJmbG93OjE7CisJCXU2NCBpX2lpX3huX3JlcF9jcmVkX292ZXJmbG93OjE7CisJCXU2NCBpX2lpX3huX3JlcV9jcmVkX292ZXJmbG93OjE7CisJCXU2NCBpX2lpX3huX2ludmFsaWRfY21kOjE7CisJCXU2NCBpX3huX2lpX2ludmFsaWRfY21kOjE7CisJCXU2NCBpX3Jlc2VydmVkXzI6MjE7CiAJfSBpaV9pZWNscl9mbGRfczsKIH0gaWlfaWVjbHJfdV90OwogCkBAIC0xMzYwLDEyICsxMzYwLDEyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2liY3JfdSB7Ci0JdWludDY0X3QgaWlfaWJjcl9yZWd2YWw7CisJdTY0IGlpX2liY3JfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfY291bnQ6NDsKLQkJdWludDY0X3QgaV9yc3ZkXzE6NDsKLQkJdWludDY0X3QgaV9zb2Z0X3Jlc2V0OjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo1NTsKKwkJdTY0IGlfY291bnQ6NDsKKwkJdTY0IGlfcnN2ZF8xOjQ7CisJCXU2NCBpX3NvZnRfcmVzZXQ6MTsKKwkJdTY0IGlfcnN2ZDo1NTsKIAl9IGlpX2liY3JfZmxkX3M7CiB9IGlpX2liY3JfdV90OwogCkBAIC0xMzk5LDIyICsxMzk5LDIyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2l4c21fdSB7Ci0JdWludDY0X3QgaWlfaXhzbV9yZWd2YWw7CisJdTY0IGlpX2l4c21fcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfYnl0ZV9lbjozMjsKLQkJdWludDY0X3QgaV9yZXNlcnZlZDoxOwotCQl1aW50NjRfdCBpX3RhZzozOwotCQl1aW50NjRfdCBpX2FsdF9wYWN0eXA6NDsKLQkJdWludDY0X3QgaV9ibzoxOwotCQl1aW50NjRfdCBpX2Vycm9yOjE7Ci0JCXVpbnQ2NF90IGlfdmJwbToxOwotCQl1aW50NjRfdCBpX2dicjoxOwotCQl1aW50NjRfdCBpX2RzOjI7Ci0JCXVpbnQ2NF90IGlfY3Q6MTsKLQkJdWludDY0X3QgaV90bnVtOjU7Ci0JCXVpbnQ2NF90IGlfcGFjdHlwOjQ7Ci0JCXVpbnQ2NF90IGlfc2lkbjo0OwotCQl1aW50NjRfdCBpX2RpZG46NDsKKwkJdTY0IGlfYnl0ZV9lbjozMjsKKwkJdTY0IGlfcmVzZXJ2ZWQ6MTsKKwkJdTY0IGlfdGFnOjM7CisJCXU2NCBpX2FsdF9wYWN0eXA6NDsKKwkJdTY0IGlfYm86MTsKKwkJdTY0IGlfZXJyb3I6MTsKKwkJdTY0IGlfdmJwbToxOworCQl1NjQgaV9nYnI6MTsKKwkJdTY0IGlfZHM6MjsKKwkJdTY0IGlfY3Q6MTsKKwkJdTY0IGlfdG51bTo1OworCQl1NjQgaV9wYWN0eXA6NDsKKwkJdTY0IGlfc2lkbjo0OworCQl1NjQgaV9kaWRuOjQ7CiAJfSBpaV9peHNtX2ZsZF9zOwogfSBpaV9peHNtX3VfdDsKIApAQCAtMTQyNiwxMSArMTQyNiwxMSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9peHNzX3UgewotCXVpbnQ2NF90IGlpX2l4c3NfcmVndmFsOworCXU2NCBpaV9peHNzX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3NpZGViYW5kOjg7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo1NTsKLQkJdWludDY0X3QgaV92YWxpZDoxOworCQl1NjQgaV9zaWRlYmFuZDo4OworCQl1NjQgaV9yc3ZkOjU1OworCQl1NjQgaV92YWxpZDoxOwogCX0gaWlfaXhzc19mbGRfczsKIH0gaWlfaXhzc191X3Q7CiAKQEAgLTE0NDcsMTcgKzE0NDcsMTcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWxjdF91IHsKLQl1aW50NjRfdCBpaV9pbGN0X3JlZ3ZhbDsKKwl1NjQgaWlfaWxjdF9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV90ZXN0X3NlZWQ6MjA7Ci0JCXVpbnQ2NF90IGlfdGVzdF9tYXNrOjg7Ci0JCXVpbnQ2NF90IGlfdGVzdF9kYXRhOjIwOwotCQl1aW50NjRfdCBpX3Rlc3RfdmFsaWQ6MTsKLQkJdWludDY0X3QgaV90ZXN0X2NiZXJyOjE7Ci0JCXVpbnQ2NF90IGlfdGVzdF9mbGl0OjM7Ci0JCXVpbnQ2NF90IGlfdGVzdF9jbGVhcjoxOwotCQl1aW50NjRfdCBpX3Rlc3RfZXJyX2NhcHR1cmU6MTsKLQkJdWludDY0X3QgaV9yc3ZkOjk7CisJCXU2NCBpX3Rlc3Rfc2VlZDoyMDsKKwkJdTY0IGlfdGVzdF9tYXNrOjg7CisJCXU2NCBpX3Rlc3RfZGF0YToyMDsKKwkJdTY0IGlfdGVzdF92YWxpZDoxOworCQl1NjQgaV90ZXN0X2NiZXJyOjE7CisJCXU2NCBpX3Rlc3RfZmxpdDozOworCQl1NjQgaV90ZXN0X2NsZWFyOjE7CisJCXU2NCBpX3Rlc3RfZXJyX2NhcHR1cmU6MTsKKwkJdTY0IGlfcnN2ZDo5OwogCX0gaWlfaWxjdF9mbGRfczsKIH0gaWlfaWxjdF91X3Q7CiAKQEAgLTE0ODIsMjAgKzE0ODIsMjAgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWllcGgxX3UgewotCXVpbnQ2NF90IGlpX2lpZXBoMV9yZWd2YWw7CisJdTY0IGlpX2lpZXBoMV9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9jb21tYW5kOjc7Ci0JCXVpbnQ2NF90IGlfcnN2ZF81OjE7Ci0JCXVpbnQ2NF90IGlfc3VwcGw6MTQ7Ci0JCXVpbnQ2NF90IGlfcnN2ZF80OjE7Ci0JCXVpbnQ2NF90IGlfc291cmNlOjE0OwotCQl1aW50NjRfdCBpX3JzdmRfMzoxOwotCQl1aW50NjRfdCBpX2Vycl90eXBlOjQ7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8yOjQ7Ci0JCXVpbnQ2NF90IGlfb3ZlcnJ1bjoxOwotCQl1aW50NjRfdCBpX3JzdmRfMTozOwotCQl1aW50NjRfdCBpX3ZhbGlkOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDoxMzsKKwkJdTY0IGlfY29tbWFuZDo3OworCQl1NjQgaV9yc3ZkXzU6MTsKKwkJdTY0IGlfc3VwcGw6MTQ7CisJCXU2NCBpX3JzdmRfNDoxOworCQl1NjQgaV9zb3VyY2U6MTQ7CisJCXU2NCBpX3JzdmRfMzoxOworCQl1NjQgaV9lcnJfdHlwZTo0OworCQl1NjQgaV9yc3ZkXzI6NDsKKwkJdTY0IGlfb3ZlcnJ1bjoxOworCQl1NjQgaV9yc3ZkXzE6MzsKKwkJdTY0IGlfdmFsaWQ6MTsKKwkJdTY0IGlfcnN2ZDoxMzsKIAl9IGlpX2lpZXBoMV9mbGRfczsKIH0gaWlfaWllcGgxX3VfdDsKIApAQCAtMTUxMSwxMyArMTUxMSwxMyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9paWVwaDJfdSB7Ci0JdWludDY0X3QgaWlfaWllcGgyX3JlZ3ZhbDsKKwl1NjQgaWlfaWllcGgyX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3JzdmRfMDozOwotCQl1aW50NjRfdCBpX2FkZHJlc3M6NDc7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjEwOwotCQl1aW50NjRfdCBpX3RhaWw6MTsKLQkJdWludDY0X3QgaV9yc3ZkOjM7CisJCXU2NCBpX3JzdmRfMDozOworCQl1NjQgaV9hZGRyZXNzOjQ3OworCQl1NjQgaV9yc3ZkXzE6MTA7CisJCXU2NCBpX3RhaWw6MTsKKwkJdTY0IGlfcnN2ZDozOwogCX0gaWlfaWllcGgyX2ZsZF9zOwogfSBpaV9paWVwaDJfdV90OwogCkBAIC0xNTMyLDkgKzE1MzIsOSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pc2xhcHJfdSB7Ci0JdWludDY0X3QgaWlfaXNsYXByX3JlZ3ZhbDsKKwl1NjQgaWlfaXNsYXByX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3JlZ2lvbjo2NDsKKwkJdTY0IGlfcmVnaW9uOjY0OwogCX0gaWlfaXNsYXByX2ZsZF9zOwogfSBpaV9pc2xhcHJfdV90OwogCkBAIC0xNTQ3LDEwICsxNTQ3LDEwIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lzbGFwb191IHsKLQl1aW50NjRfdCBpaV9pc2xhcG9fcmVndmFsOworCXU2NCBpaV9pc2xhcG9fcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfaW9fc2J4X292cnJpZGU6NTY7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo4OworCQl1NjQgaV9pb19zYnhfb3ZycmlkZTo1NjsKKwkJdTY0IGlfcnN2ZDo4OwogCX0gaWlfaXNsYXBvX2ZsZF9zOwogfSBpaV9pc2xhcG9fdV90OwogCkBAIC0xNTYzLDE0ICsxNTYzLDE0IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2l3aV91IHsKLQl1aW50NjRfdCBpaV9pd2lfcmVndmFsOworCXU2NCBpaV9pd2lfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfcHJlc2NhbGU6MjQ7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo4OwotCQl1aW50NjRfdCBpX3RpbWVvdXQ6ODsKLQkJdWludDY0X3QgaV9yc3ZkMTo4OwotCQl1aW50NjRfdCBpX2ludHJwdF9yZXRyeV9wZXJpb2Q6ODsKLQkJdWludDY0X3QgaV9yc3ZkMjo4OworCQl1NjQgaV9wcmVzY2FsZToyNDsKKwkJdTY0IGlfcnN2ZDo4OworCQl1NjQgaV90aW1lb3V0Ojg7CisJCXU2NCBpX3JzdmQxOjg7CisJCXU2NCBpX2ludHJwdF9yZXRyeV9wZXJpb2Q6ODsKKwkJdTY0IGlfcnN2ZDI6ODsKIAl9IGlpX2l3aV9mbGRfczsKIH0gaWlfaXdpX3VfdDsKIApAQCAtMTU4MiwyNiArMTU4MiwyNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pd2VsX3UgewotCXVpbnQ2NF90IGlpX2l3ZWxfcmVndmFsOworCXU2NCBpaV9pd2VsX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX2ludHJfdGltZWRfb3V0OjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo3OwotCQl1aW50NjRfdCBpX2NhbV9vdmVyZmxvdzoxOwotCQl1aW50NjRfdCBpX2NhbV9yZWFkX21pc3M6MTsKLQkJdWludDY0X3QgaV9yc3ZkMToyOwotCQl1aW50NjRfdCBpX2lvcV9yZXBfdW5kZXJmbG93OjE7Ci0JCXVpbnQ2NF90IGlfaW9xX3JlcV91bmRlcmZsb3c6MTsKLQkJdWludDY0X3QgaV9pb3FfcmVwX292ZXJmbG93OjE7Ci0JCXVpbnQ2NF90IGlfaW9xX3JlcV9vdmVyZmxvdzoxOwotCQl1aW50NjRfdCBpX2lpcV9yZXBfb3ZlcmZsb3c6MTsKLQkJdWludDY0X3QgaV9paXFfcmVxX292ZXJmbG93OjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDI6NjsKLQkJdWludDY0X3QgaV9paV94bl9yZXBfY3JlZF9vdmVyX3VuZGVyOjE7Ci0JCXVpbnQ2NF90IGlfaWlfeG5fcmVxX2NyZWRfb3Zlcl91bmRlcjoxOwotCQl1aW50NjRfdCBpX3JzdmQzOjY7Ci0JCXVpbnQ2NF90IGlfaWlfeG5faW52YWxpZF9jbWQ6MTsKLQkJdWludDY0X3QgaV94bl9paV9pbnZhbGlkX2NtZDoxOwotCQl1aW50NjRfdCBpX3JzdmQ0OjMwOworCQl1NjQgaV9pbnRyX3RpbWVkX291dDoxOworCQl1NjQgaV9yc3ZkOjc7CisJCXU2NCBpX2NhbV9vdmVyZmxvdzoxOworCQl1NjQgaV9jYW1fcmVhZF9taXNzOjE7CisJCXU2NCBpX3JzdmQxOjI7CisJCXU2NCBpX2lvcV9yZXBfdW5kZXJmbG93OjE7CisJCXU2NCBpX2lvcV9yZXFfdW5kZXJmbG93OjE7CisJCXU2NCBpX2lvcV9yZXBfb3ZlcmZsb3c6MTsKKwkJdTY0IGlfaW9xX3JlcV9vdmVyZmxvdzoxOworCQl1NjQgaV9paXFfcmVwX292ZXJmbG93OjE7CisJCXU2NCBpX2lpcV9yZXFfb3ZlcmZsb3c6MTsKKwkJdTY0IGlfcnN2ZDI6NjsKKwkJdTY0IGlfaWlfeG5fcmVwX2NyZWRfb3Zlcl91bmRlcjoxOworCQl1NjQgaV9paV94bl9yZXFfY3JlZF9vdmVyX3VuZGVyOjE7CisJCXU2NCBpX3JzdmQzOjY7CisJCXU2NCBpX2lpX3huX2ludmFsaWRfY21kOjE7CisJCXU2NCBpX3huX2lpX2ludmFsaWRfY21kOjE7CisJCXU2NCBpX3JzdmQ0OjMwOwogCX0gaWlfaXdlbF9mbGRfczsKIH0gaWlfaXdlbF91X3Q7CiAKQEAgLTE2MTIsMjIgKzE2MTIsMjIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXdjX3UgewotCXVpbnQ2NF90IGlpX2l3Y19yZWd2YWw7CisJdTY0IGlpX2l3Y19yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9kbWFfYnl0ZV9zd2FwOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDozOwotCQl1aW50NjRfdCBpX2NhbV9yZWFkX2xpbmVzX3Jlc2V0OjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDE6MzsKLQkJdWludDY0X3QgaV9paV94bl9jcmVkX292ZXJfdW5kZXJfbG9nOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDI6MTk7Ci0JCXVpbnQ2NF90IGlfeG5fcmVwX2lxX2RlcHRoOjU7Ci0JCXVpbnQ2NF90IGlfcnN2ZDM6MzsKLQkJdWludDY0X3QgaV94bl9yZXFfaXFfZGVwdGg6NTsKLQkJdWludDY0X3QgaV9yc3ZkNDozOwotCQl1aW50NjRfdCBpX2lpcV9kZXB0aDo2OwotCQl1aW50NjRfdCBpX3JzdmQ1OjEyOwotCQl1aW50NjRfdCBpX2ZvcmNlX3JlcF9jcmVkOjE7Ci0JCXVpbnQ2NF90IGlfZm9yY2VfcmVxX2NyZWQ6MTsKKwkJdTY0IGlfZG1hX2J5dGVfc3dhcDoxOworCQl1NjQgaV9yc3ZkOjM7CisJCXU2NCBpX2NhbV9yZWFkX2xpbmVzX3Jlc2V0OjE7CisJCXU2NCBpX3JzdmQxOjM7CisJCXU2NCBpX2lpX3huX2NyZWRfb3Zlcl91bmRlcl9sb2c6MTsKKwkJdTY0IGlfcnN2ZDI6MTk7CisJCXU2NCBpX3huX3JlcF9pcV9kZXB0aDo1OworCQl1NjQgaV9yc3ZkMzozOworCQl1NjQgaV94bl9yZXFfaXFfZGVwdGg6NTsKKwkJdTY0IGlfcnN2ZDQ6MzsKKwkJdTY0IGlfaWlxX2RlcHRoOjY7CisJCXU2NCBpX3JzdmQ1OjEyOworCQl1NjQgaV9mb3JjZV9yZXBfY3JlZDoxOworCQl1NjQgaV9mb3JjZV9yZXFfY3JlZDoxOwogCX0gaWlfaXdjX2ZsZF9zOwogfSBpaV9pd2NfdV90OwogCkBAIC0xNjM4LDEyICsxNjM4LDEyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2l3c191IHsKLQl1aW50NjRfdCBpaV9pd3NfcmVndmFsOworCXU2NCBpaV9pd3NfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfeG5fcmVwX2lxX2NyZWRpdHM6NTsKLQkJdWludDY0X3QgaV9yc3ZkOjM7Ci0JCXVpbnQ2NF90IGlfeG5fcmVxX2lxX2NyZWRpdHM6NTsKLQkJdWludDY0X3QgaV9yc3ZkMTo1MTsKKwkJdTY0IGlfeG5fcmVwX2lxX2NyZWRpdHM6NTsKKwkJdTY0IGlfcnN2ZDozOworCQl1NjQgaV94bl9yZXFfaXFfY3JlZGl0czo1OworCQl1NjQgaV9yc3ZkMTo1MTsKIAl9IGlpX2l3c19mbGRfczsKIH0gaWlfaXdzX3VfdDsKIApAQCAtMTY1NCwyNiArMTY1NCwyNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pd2VpbV91IHsKLQl1aW50NjRfdCBpaV9pd2VpbV9yZWd2YWw7CisJdTY0IGlpX2l3ZWltX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX2ludHJfdGltZWRfb3V0OjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo3OwotCQl1aW50NjRfdCBpX2NhbV9vdmVyZmxvdzoxOwotCQl1aW50NjRfdCBpX2NhbV9yZWFkX21pc3M6MTsKLQkJdWludDY0X3QgaV9yc3ZkMToyOwotCQl1aW50NjRfdCBpX2lvcV9yZXBfdW5kZXJmbG93OjE7Ci0JCXVpbnQ2NF90IGlfaW9xX3JlcV91bmRlcmZsb3c6MTsKLQkJdWludDY0X3QgaV9pb3FfcmVwX292ZXJmbG93OjE7Ci0JCXVpbnQ2NF90IGlfaW9xX3JlcV9vdmVyZmxvdzoxOwotCQl1aW50NjRfdCBpX2lpcV9yZXBfb3ZlcmZsb3c6MTsKLQkJdWludDY0X3QgaV9paXFfcmVxX292ZXJmbG93OjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDI6NjsKLQkJdWludDY0X3QgaV9paV94bl9yZXBfY3JlZF9vdmVyZmxvdzoxOwotCQl1aW50NjRfdCBpX2lpX3huX3JlcV9jcmVkX292ZXJmbG93OjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDM6NjsKLQkJdWludDY0X3QgaV9paV94bl9pbnZhbGlkX2NtZDoxOwotCQl1aW50NjRfdCBpX3huX2lpX2ludmFsaWRfY21kOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDQ6MzA7CisJCXU2NCBpX2ludHJfdGltZWRfb3V0OjE7CisJCXU2NCBpX3JzdmQ6NzsKKwkJdTY0IGlfY2FtX292ZXJmbG93OjE7CisJCXU2NCBpX2NhbV9yZWFkX21pc3M6MTsKKwkJdTY0IGlfcnN2ZDE6MjsKKwkJdTY0IGlfaW9xX3JlcF91bmRlcmZsb3c6MTsKKwkJdTY0IGlfaW9xX3JlcV91bmRlcmZsb3c6MTsKKwkJdTY0IGlfaW9xX3JlcF9vdmVyZmxvdzoxOworCQl1NjQgaV9pb3FfcmVxX292ZXJmbG93OjE7CisJCXU2NCBpX2lpcV9yZXBfb3ZlcmZsb3c6MTsKKwkJdTY0IGlfaWlxX3JlcV9vdmVyZmxvdzoxOworCQl1NjQgaV9yc3ZkMjo2OworCQl1NjQgaV9paV94bl9yZXBfY3JlZF9vdmVyZmxvdzoxOworCQl1NjQgaV9paV94bl9yZXFfY3JlZF9vdmVyZmxvdzoxOworCQl1NjQgaV9yc3ZkMzo2OworCQl1NjQgaV9paV94bl9pbnZhbGlkX2NtZDoxOworCQl1NjQgaV94bl9paV9pbnZhbGlkX2NtZDoxOworCQl1NjQgaV9yc3ZkNDozMDsKIAl9IGlpX2l3ZWltX2ZsZF9zOwogfSBpaV9pd2VpbV91X3Q7CiAKQEAgLTE2ODgsMTMgKzE2ODgsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXBjYV91IHsKLQl1aW50NjRfdCBpaV9pcGNhX3JlZ3ZhbDsKKwl1NjQgaWlfaXBjYV9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV93aWQ6NDsKLQkJdWludDY0X3QgaV9hZGp1c3Q6MTsKLQkJdWludDY0X3QgaV9yc3ZkXzE6MzsKLQkJdWludDY0X3QgaV9maWVsZDoyOwotCQl1aW50NjRfdCBpX3JzdmQ6NTQ7CisJCXU2NCBpX3dpZDo0OworCQl1NjQgaV9hZGp1c3Q6MTsKKwkJdTY0IGlfcnN2ZF8xOjM7CisJCXU2NCBpX2ZpZWxkOjI7CisJCXU2NCBpX3JzdmQ6NTQ7CiAJfSBpaV9pcGNhX2ZsZF9zOwogfSBpaV9pcGNhX3VfdDsKIApAQCAtMTcwOSwxMiArMTcwOSwxMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTBhX3UgewotCXVpbnQ2NF90IGlpX2lwcnRlMGFfcmVndmFsOworCXU2NCBpaV9pcHJ0ZTBhX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3JzdmRfMTo1NDsKLQkJdWludDY0X3QgaV93aWRnZXQ6NDsKLQkJdWludDY0X3QgaV90b19jbnQ6NTsKLQkJdWludDY0X3QgaV92bGQ6MTsKKwkJdTY0IGlfcnN2ZF8xOjU0OworCQl1NjQgaV93aWRnZXQ6NDsKKwkJdTY0IGlfdG9fY250OjU7CisJCXU2NCBpX3ZsZDoxOwogCX0gaWlfaXBydGUwYV9mbGRfczsKIH0gaWlfaXBydGUwYV91X3Q7CiAKQEAgLTE3MjksMTIgKzE3MjksMTIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXBydGUxYV91IHsKLQl1aW50NjRfdCBpaV9pcHJ0ZTFhX3JlZ3ZhbDsKKwl1NjQgaWlfaXBydGUxYV9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9yc3ZkXzE6NTQ7Ci0JCXVpbnQ2NF90IGlfd2lkZ2V0OjQ7Ci0JCXVpbnQ2NF90IGlfdG9fY250OjU7Ci0JCXVpbnQ2NF90IGlfdmxkOjE7CisJCXU2NCBpX3JzdmRfMTo1NDsKKwkJdTY0IGlfd2lkZ2V0OjQ7CisJCXU2NCBpX3RvX2NudDo1OworCQl1NjQgaV92bGQ6MTsKIAl9IGlpX2lwcnRlMWFfZmxkX3M7CiB9IGlpX2lwcnRlMWFfdV90OwogCkBAIC0xNzQ5LDEyICsxNzQ5LDEyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcnRlMmFfdSB7Ci0JdWludDY0X3QgaWlfaXBydGUyYV9yZWd2YWw7CisJdTY0IGlpX2lwcnRlMmFfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjU0OwotCQl1aW50NjRfdCBpX3dpZGdldDo0OwotCQl1aW50NjRfdCBpX3RvX2NudDo1OwotCQl1aW50NjRfdCBpX3ZsZDoxOworCQl1NjQgaV9yc3ZkXzE6NTQ7CisJCXU2NCBpX3dpZGdldDo0OworCQl1NjQgaV90b19jbnQ6NTsKKwkJdTY0IGlfdmxkOjE7CiAJfSBpaV9pcHJ0ZTJhX2ZsZF9zOwogfSBpaV9pcHJ0ZTJhX3VfdDsKIApAQCAtMTc2OSwxMiArMTc2OSwxMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTNhX3UgewotCXVpbnQ2NF90IGlpX2lwcnRlM2FfcmVndmFsOworCXU2NCBpaV9pcHJ0ZTNhX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3JzdmRfMTo1NDsKLQkJdWludDY0X3QgaV93aWRnZXQ6NDsKLQkJdWludDY0X3QgaV90b19jbnQ6NTsKLQkJdWludDY0X3QgaV92bGQ6MTsKKwkJdTY0IGlfcnN2ZF8xOjU0OworCQl1NjQgaV93aWRnZXQ6NDsKKwkJdTY0IGlfdG9fY250OjU7CisJCXU2NCBpX3ZsZDoxOwogCX0gaWlfaXBydGUzYV9mbGRfczsKIH0gaWlfaXBydGUzYV91X3Q7CiAKQEAgLTE3ODksMTIgKzE3ODksMTIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXBydGU0YV91IHsKLQl1aW50NjRfdCBpaV9pcHJ0ZTRhX3JlZ3ZhbDsKKwl1NjQgaWlfaXBydGU0YV9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9yc3ZkXzE6NTQ7Ci0JCXVpbnQ2NF90IGlfd2lkZ2V0OjQ7Ci0JCXVpbnQ2NF90IGlfdG9fY250OjU7Ci0JCXVpbnQ2NF90IGlfdmxkOjE7CisJCXU2NCBpX3JzdmRfMTo1NDsKKwkJdTY0IGlfd2lkZ2V0OjQ7CisJCXU2NCBpX3RvX2NudDo1OworCQl1NjQgaV92bGQ6MTsKIAl9IGlpX2lwcnRlNGFfZmxkX3M7CiB9IGlpX2lwcnRlNGFfdV90OwogCkBAIC0xODA5LDEyICsxODA5LDEyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcnRlNWFfdSB7Ci0JdWludDY0X3QgaWlfaXBydGU1YV9yZWd2YWw7CisJdTY0IGlpX2lwcnRlNWFfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjU0OwotCQl1aW50NjRfdCBpX3dpZGdldDo0OwotCQl1aW50NjRfdCBpX3RvX2NudDo1OwotCQl1aW50NjRfdCBpX3ZsZDoxOworCQl1NjQgaV9yc3ZkXzE6NTQ7CisJCXU2NCBpX3dpZGdldDo0OworCQl1NjQgaV90b19jbnQ6NTsKKwkJdTY0IGlfdmxkOjE7CiAJfSBpaV9pcHJ0ZTVhX2ZsZF9zOwogfSBpaV9pcHJ0ZTVhX3VfdDsKIApAQCAtMTgyOSwxMiArMTgyOSwxMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTZhX3UgewotCXVpbnQ2NF90IGlpX2lwcnRlNmFfcmVndmFsOworCXU2NCBpaV9pcHJ0ZTZhX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3JzdmRfMTo1NDsKLQkJdWludDY0X3QgaV93aWRnZXQ6NDsKLQkJdWludDY0X3QgaV90b19jbnQ6NTsKLQkJdWludDY0X3QgaV92bGQ6MTsKKwkJdTY0IGlfcnN2ZF8xOjU0OworCQl1NjQgaV93aWRnZXQ6NDsKKwkJdTY0IGlfdG9fY250OjU7CisJCXU2NCBpX3ZsZDoxOwogCX0gaWlfaXBydGU2YV9mbGRfczsKIH0gaWlfaXBydGU2YV91X3Q7CiAKQEAgLTE4NDksMTIgKzE4NDksMTIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXBydGU3YV91IHsKLQl1aW50NjRfdCBpaV9pcHJ0ZTdhX3JlZ3ZhbDsKKwl1NjQgaWlfaXBydGU3YV9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9yc3ZkXzE6NTQ7Ci0JCXVpbnQ2NF90IGlfd2lkZ2V0OjQ7Ci0JCXVpbnQ2NF90IGlfdG9fY250OjU7Ci0JCXVpbnQ2NF90IGlfdmxkOjE7CisJCXU2NCBpX3JzdmRfMTo1NDsKKwkJdTY0IGlfd2lkZ2V0OjQ7CisJCXU2NCBpX3RvX2NudDo1OworCQl1NjQgaV92bGQ6MTsKIAl9IGlpX2lwcnRlYTdfZmxkX3M7CiB9IGlpX2lwcnRlN2FfdV90OwogCkBAIC0xODY5LDEyICsxODY5LDEyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcnRlMGJfdSB7Ci0JdWludDY0X3QgaWlfaXBydGUwYl9yZWd2YWw7CisJdTY0IGlpX2lwcnRlMGJfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjM7Ci0JCXVpbnQ2NF90IGlfYWRkcmVzczo0NzsKLQkJdWludDY0X3QgaV9pbml0OjM7Ci0JCXVpbnQ2NF90IGlfc291cmNlOjExOworCQl1NjQgaV9yc3ZkXzE6MzsKKwkJdTY0IGlfYWRkcmVzczo0NzsKKwkJdTY0IGlfaW5pdDozOworCQl1NjQgaV9zb3VyY2U6MTE7CiAJfSBpaV9pcHJ0ZTBiX2ZsZF9zOwogfSBpaV9pcHJ0ZTBiX3VfdDsKIApAQCAtMTg4OSwxMiArMTg4OSwxMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTFiX3UgewotCXVpbnQ2NF90IGlpX2lwcnRlMWJfcmVndmFsOworCXU2NCBpaV9pcHJ0ZTFiX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3JzdmRfMTozOwotCQl1aW50NjRfdCBpX2FkZHJlc3M6NDc7Ci0JCXVpbnQ2NF90IGlfaW5pdDozOwotCQl1aW50NjRfdCBpX3NvdXJjZToxMTsKKwkJdTY0IGlfcnN2ZF8xOjM7CisJCXU2NCBpX2FkZHJlc3M6NDc7CisJCXU2NCBpX2luaXQ6MzsKKwkJdTY0IGlfc291cmNlOjExOwogCX0gaWlfaXBydGUxYl9mbGRfczsKIH0gaWlfaXBydGUxYl91X3Q7CiAKQEAgLTE5MDksMTIgKzE5MDksMTIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXBydGUyYl91IHsKLQl1aW50NjRfdCBpaV9pcHJ0ZTJiX3JlZ3ZhbDsKKwl1NjQgaWlfaXBydGUyYl9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9yc3ZkXzE6MzsKLQkJdWludDY0X3QgaV9hZGRyZXNzOjQ3OwotCQl1aW50NjRfdCBpX2luaXQ6MzsKLQkJdWludDY0X3QgaV9zb3VyY2U6MTE7CisJCXU2NCBpX3JzdmRfMTozOworCQl1NjQgaV9hZGRyZXNzOjQ3OworCQl1NjQgaV9pbml0OjM7CisJCXU2NCBpX3NvdXJjZToxMTsKIAl9IGlpX2lwcnRlMmJfZmxkX3M7CiB9IGlpX2lwcnRlMmJfdV90OwogCkBAIC0xOTI5LDEyICsxOTI5LDEyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcnRlM2JfdSB7Ci0JdWludDY0X3QgaWlfaXBydGUzYl9yZWd2YWw7CisJdTY0IGlpX2lwcnRlM2JfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjM7Ci0JCXVpbnQ2NF90IGlfYWRkcmVzczo0NzsKLQkJdWludDY0X3QgaV9pbml0OjM7Ci0JCXVpbnQ2NF90IGlfc291cmNlOjExOworCQl1NjQgaV9yc3ZkXzE6MzsKKwkJdTY0IGlfYWRkcmVzczo0NzsKKwkJdTY0IGlfaW5pdDozOworCQl1NjQgaV9zb3VyY2U6MTE7CiAJfSBpaV9pcHJ0ZTNiX2ZsZF9zOwogfSBpaV9pcHJ0ZTNiX3VfdDsKIApAQCAtMTk0OSwxMiArMTk0OSwxMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTRiX3UgewotCXVpbnQ2NF90IGlpX2lwcnRlNGJfcmVndmFsOworCXU2NCBpaV9pcHJ0ZTRiX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3JzdmRfMTozOwotCQl1aW50NjRfdCBpX2FkZHJlc3M6NDc7Ci0JCXVpbnQ2NF90IGlfaW5pdDozOwotCQl1aW50NjRfdCBpX3NvdXJjZToxMTsKKwkJdTY0IGlfcnN2ZF8xOjM7CisJCXU2NCBpX2FkZHJlc3M6NDc7CisJCXU2NCBpX2luaXQ6MzsKKwkJdTY0IGlfc291cmNlOjExOwogCX0gaWlfaXBydGU0Yl9mbGRfczsKIH0gaWlfaXBydGU0Yl91X3Q7CiAKQEAgLTE5NjksMTIgKzE5NjksMTIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXBydGU1Yl91IHsKLQl1aW50NjRfdCBpaV9pcHJ0ZTViX3JlZ3ZhbDsKKwl1NjQgaWlfaXBydGU1Yl9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9yc3ZkXzE6MzsKLQkJdWludDY0X3QgaV9hZGRyZXNzOjQ3OwotCQl1aW50NjRfdCBpX2luaXQ6MzsKLQkJdWludDY0X3QgaV9zb3VyY2U6MTE7CisJCXU2NCBpX3JzdmRfMTozOworCQl1NjQgaV9hZGRyZXNzOjQ3OworCQl1NjQgaV9pbml0OjM7CisJCXU2NCBpX3NvdXJjZToxMTsKIAl9IGlpX2lwcnRlNWJfZmxkX3M7CiB9IGlpX2lwcnRlNWJfdV90OwogCkBAIC0xOTg5LDEyICsxOTg5LDEyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcnRlNmJfdSB7Ci0JdWludDY0X3QgaWlfaXBydGU2Yl9yZWd2YWw7CisJdTY0IGlpX2lwcnRlNmJfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjM7Ci0JCXVpbnQ2NF90IGlfYWRkcmVzczo0NzsKLQkJdWludDY0X3QgaV9pbml0OjM7Ci0JCXVpbnQ2NF90IGlfc291cmNlOjExOworCQl1NjQgaV9yc3ZkXzE6MzsKKwkJdTY0IGlfYWRkcmVzczo0NzsKKwkJdTY0IGlfaW5pdDozOworCQl1NjQgaV9zb3VyY2U6MTE7CiAKIAl9IGlpX2lwcnRlNmJfZmxkX3M7CiB9IGlpX2lwcnRlNmJfdV90OwpAQCAtMjAxMCwxMiArMjAxMCwxMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pcHJ0ZTdiX3UgewotCXVpbnQ2NF90IGlpX2lwcnRlN2JfcmVndmFsOworCXU2NCBpaV9pcHJ0ZTdiX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3JzdmRfMTozOwotCQl1aW50NjRfdCBpX2FkZHJlc3M6NDc7Ci0JCXVpbnQ2NF90IGlfaW5pdDozOwotCQl1aW50NjRfdCBpX3NvdXJjZToxMTsKKwkJdTY0IGlfcnN2ZF8xOjM7CisJCXU2NCBpX2FkZHJlc3M6NDc7CisJCXU2NCBpX2luaXQ6MzsKKwkJdTY0IGlfc291cmNlOjExOwogCX0gaWlfaXBydGU3Yl9mbGRfczsKIH0gaWlfaXBydGU3Yl91X3Q7CiAKQEAgLTIwMzgsMTMgKzIwMzgsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaXBkcl91IHsKLQl1aW50NjRfdCBpaV9pcGRyX3JlZ3ZhbDsKKwl1NjQgaWlfaXBkcl9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV90ZTozOwotCQl1aW50NjRfdCBpX3JzdmRfMToxOwotCQl1aW50NjRfdCBpX3BuZDoxOwotCQl1aW50NjRfdCBpX2luaXRfcnBjbnQ6MTsKLQkJdWludDY0X3QgaV9yc3ZkOjU4OworCQl1NjQgaV90ZTozOworCQl1NjQgaV9yc3ZkXzE6MTsKKwkJdTY0IGlfcG5kOjE7CisJCXU2NCBpX2luaXRfcnBjbnQ6MTsKKwkJdTY0IGlfcnN2ZDo1ODsKIAl9IGlpX2lwZHJfZmxkX3M7CiB9IGlpX2lwZHJfdV90OwogCkBAIC0yMDY2LDExICsyMDY2LDExIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2ljZHJfdSB7Ci0JdWludDY0X3QgaWlfaWNkcl9yZWd2YWw7CisJdTY0IGlpX2ljZHJfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfY3JiX251bTo0OwotCQl1aW50NjRfdCBpX3BuZDoxOwotCQl1aW50NjRfdCBpX3JzdmQ6NTk7CisJCXU2NCBpX2NyYl9udW06NDsKKwkJdTY0IGlfcG5kOjE7CisJCXU2NCBpX3JzdmQ6NTk7CiAJfSBpaV9pY2RyX2ZsZF9zOwogfSBpaV9pY2RyX3VfdDsKIApAQCAtMjA5MiwxMyArMjA5MiwxMyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pZmRyX3UgewotCXVpbnQ2NF90IGlpX2lmZHJfcmVndmFsOworCXU2NCBpaV9pZmRyX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX2lvcV9tYXhfcnE6NzsKLQkJdWludDY0X3QgaV9zZXRfaW9xX3JxOjE7Ci0JCXVpbnQ2NF90IGlfaW9xX21heF9ycDo3OwotCQl1aW50NjRfdCBpX3NldF9pb3FfcnA6MTsKLQkJdWludDY0X3QgaV9yc3ZkOjQ4OworCQl1NjQgaV9pb3FfbWF4X3JxOjc7CisJCXU2NCBpX3NldF9pb3FfcnE6MTsKKwkJdTY0IGlfaW9xX21heF9ycDo3OworCQl1NjQgaV9zZXRfaW9xX3JwOjE7CisJCXU2NCBpX3JzdmQ6NDg7CiAJfSBpaV9pZmRyX2ZsZF9zOwogfSBpaV9pZmRyX3VfdDsKIApAQCAtMjExNCwxMiArMjExNCwxMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9paWFwX3UgewotCXVpbnQ2NF90IGlpX2lpYXBfcmVndmFsOworCXU2NCBpaV9paWFwX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3JxX21sczo2OwotCQl1aW50NjRfdCBpX3JzdmRfMToyOwotCQl1aW50NjRfdCBpX3JwX21sczo2OwotCQl1aW50NjRfdCBpX3JzdmQ6NTA7CisJCXU2NCBpX3JxX21sczo2OworCQl1NjQgaV9yc3ZkXzE6MjsKKwkJdTY0IGlfcnBfbWxzOjY7CisJCXU2NCBpX3JzdmQ6NTA7CiAJfSBpaV9paWFwX2ZsZF9zOwogfSBpaV9paWFwX3VfdDsKIApAQCAtMjEzMywyMiArMjEzMywyMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pY21yX3UgewotCXVpbnQ2NF90IGlpX2ljbXJfcmVndmFsOworCXU2NCBpaV9pY21yX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3NwX21zZzoxOwotCQl1aW50NjRfdCBpX3JkX2hkcjoxOwotCQl1aW50NjRfdCBpX3JzdmRfNDoyOwotCQl1aW50NjRfdCBpX2NfY250OjQ7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8zOjQ7Ci0JCXVpbnQ2NF90IGlfY2xyX3JxcGQ6MTsKLQkJdWludDY0X3QgaV9jbHJfcnBwZDoxOwotCQl1aW50NjRfdCBpX3JzdmRfMjoyOwotCQl1aW50NjRfdCBpX2ZjX2NudDo0OwotCQl1aW50NjRfdCBpX2NyYl92bGQ6MTU7Ci0JCXVpbnQ2NF90IGlfY3JiX21hcms6MTU7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjI7Ci0JCXVpbnQ2NF90IGlfcHJlY2lzZToxOwotCQl1aW50NjRfdCBpX3JzdmQ6MTE7CisJCXU2NCBpX3NwX21zZzoxOworCQl1NjQgaV9yZF9oZHI6MTsKKwkJdTY0IGlfcnN2ZF80OjI7CisJCXU2NCBpX2NfY250OjQ7CisJCXU2NCBpX3JzdmRfMzo0OworCQl1NjQgaV9jbHJfcnFwZDoxOworCQl1NjQgaV9jbHJfcnBwZDoxOworCQl1NjQgaV9yc3ZkXzI6MjsKKwkJdTY0IGlfZmNfY250OjQ7CisJCXU2NCBpX2NyYl92bGQ6MTU7CisJCXU2NCBpX2NyYl9tYXJrOjE1OworCQl1NjQgaV9yc3ZkXzE6MjsKKwkJdTY0IGlfcHJlY2lzZToxOworCQl1NjQgaV9yc3ZkOjExOwogCX0gaWlfaWNtcl9mbGRfczsKIH0gaWlfaWNtcl91X3Q7CiAKQEAgLTIxNjEsMTMgKzIxNjEsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWNjcl91IHsKLQl1aW50NjRfdCBpaV9pY2NyX3JlZ3ZhbDsKKwl1NjQgaWlfaWNjcl9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9jcmJfbnVtOjQ7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjQ7Ci0JCXVpbnQ2NF90IGlfY21kOjg7Ci0JCXVpbnQ2NF90IGlfcGVuZGluZzoxOwotCQl1aW50NjRfdCBpX3JzdmQ6NDc7CisJCXU2NCBpX2NyYl9udW06NDsKKwkJdTY0IGlfcnN2ZF8xOjQ7CisJCXU2NCBpX2NtZDo4OworCQl1NjQgaV9wZW5kaW5nOjE7CisJCXU2NCBpX3JzdmQ6NDc7CiAJfSBpaV9pY2NyX2ZsZF9zOwogfSBpaV9pY2NyX3VfdDsKIApAQCAtMjE3OCwxMCArMjE3OCwxMCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pY3RvX3UgewotCXVpbnQ2NF90IGlpX2ljdG9fcmVndmFsOworCXU2NCBpaV9pY3RvX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3RpbWVvdXQ6ODsKLQkJdWludDY0X3QgaV9yc3ZkOjU2OworCQl1NjQgaV90aW1lb3V0Ojg7CisJCXU2NCBpX3JzdmQ6NTY7CiAJfSBpaV9pY3RvX2ZsZF9zOwogfSBpaV9pY3RvX3VfdDsKIApAQCAtMjE5NywxMCArMjE5NywxMCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pY3RwX3UgewotCXVpbnQ2NF90IGlpX2ljdHBfcmVndmFsOworCXU2NCBpaV9pY3RwX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3ByZXNjYWxlOjI0OwotCQl1aW50NjRfdCBpX3JzdmQ6NDA7CisJCXU2NCBpX3ByZXNjYWxlOjI0OworCQl1NjQgaV9yc3ZkOjQwOwogCX0gaWlfaWN0cF9mbGRfczsKIH0gaWlfaWN0cF91X3Q7CiAKQEAgLTIyMjgsMTQgKzIyMjgsMTQgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWNyYjBfYV91IHsKLQl1aW50NjRfdCBpaV9pY3JiMF9hX3JlZ3ZhbDsKKwl1NjQgaWlfaWNyYjBfYV9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaWFfaW93OjE7Ci0JCXVpbnQ2NF90IGlhX3ZsZDoxOwotCQl1aW50NjRfdCBpYV9hZGRyOjQ3OwotCQl1aW50NjRfdCBpYV90bnVtOjU7Ci0JCXVpbnQ2NF90IGlhX3NpZG46NDsKLQkJdWludDY0X3QgaWFfcnN2ZDo2OworCQl1NjQgaWFfaW93OjE7CisJCXU2NCBpYV92bGQ6MTsKKwkJdTY0IGlhX2FkZHI6NDc7CisJCXU2NCBpYV90bnVtOjU7CisJCXU2NCBpYV9zaWRuOjQ7CisJCXU2NCBpYV9yc3ZkOjY7CiAJfSBpaV9pY3JiMF9hX2ZsZF9zOwogfSBpaV9pY3JiMF9hX3VfdDsKIApAQCAtMjI0OSwzMCArMjI0OSwzMCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pY3JiMF9iX3UgewotCXVpbnQ2NF90IGlpX2ljcmIwX2JfcmVndmFsOworCXU2NCBpaV9pY3JiMF9iX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpYl94dF9lcnI6MTsKLQkJdWludDY0X3QgaWJfbWFyazoxOwotCQl1aW50NjRfdCBpYl9sbl91Y2U6MTsKLQkJdWludDY0X3QgaWJfZXJyY29kZTozOwotCQl1aW50NjRfdCBpYl9lcnJvcjoxOwotCQl1aW50NjRfdCBpYl9zdGFsbF9fYnRlXzE6MTsKLQkJdWludDY0X3QgaWJfc3RhbGxfX2J0ZV8wOjE7Ci0JCXVpbnQ2NF90IGliX3N0YWxsX19pbnRyOjE7Ci0JCXVpbnQ2NF90IGliX3N0YWxsX2liOjE7Ci0JCXVpbnQ2NF90IGliX2ludHZuOjE7Ci0JCXVpbnQ2NF90IGliX3diOjE7Ci0JCXVpbnQ2NF90IGliX2hvbGQ6MTsKLQkJdWludDY0X3QgaWJfYWNrOjE7Ci0JCXVpbnQ2NF90IGliX3Jlc3A6MTsKLQkJdWludDY0X3QgaWJfYWNrX2NudDoxMTsKLQkJdWludDY0X3QgaWJfcnN2ZDo3OwotCQl1aW50NjRfdCBpYl9leGM6NTsKLQkJdWludDY0X3QgaWJfaW5pdDozOwotCQl1aW50NjRfdCBpYl9pbXNnOjg7Ci0JCXVpbnQ2NF90IGliX2ltc2d0eXBlOjI7Ci0JCXVpbnQ2NF90IGliX3VzZV9vbGQ6MTsKLQkJdWludDY0X3QgaWJfcnN2ZF8xOjExOworCQl1NjQgaWJfeHRfZXJyOjE7CisJCXU2NCBpYl9tYXJrOjE7CisJCXU2NCBpYl9sbl91Y2U6MTsKKwkJdTY0IGliX2VycmNvZGU6MzsKKwkJdTY0IGliX2Vycm9yOjE7CisJCXU2NCBpYl9zdGFsbF9fYnRlXzE6MTsKKwkJdTY0IGliX3N0YWxsX19idGVfMDoxOworCQl1NjQgaWJfc3RhbGxfX2ludHI6MTsKKwkJdTY0IGliX3N0YWxsX2liOjE7CisJCXU2NCBpYl9pbnR2bjoxOworCQl1NjQgaWJfd2I6MTsKKwkJdTY0IGliX2hvbGQ6MTsKKwkJdTY0IGliX2FjazoxOworCQl1NjQgaWJfcmVzcDoxOworCQl1NjQgaWJfYWNrX2NudDoxMTsKKwkJdTY0IGliX3JzdmQ6NzsKKwkJdTY0IGliX2V4Yzo1OworCQl1NjQgaWJfaW5pdDozOworCQl1NjQgaWJfaW1zZzo4OworCQl1NjQgaWJfaW1zZ3R5cGU6MjsKKwkJdTY0IGliX3VzZV9vbGQ6MTsKKwkJdTY0IGliX3JzdmRfMToxMTsKIAl9IGlpX2ljcmIwX2JfZmxkX3M7CiB9IGlpX2ljcmIwX2JfdV90OwogCkBAIC0yMjg2LDE3ICsyMjg2LDE3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2ljcmIwX2NfdSB7Ci0JdWludDY0X3QgaWlfaWNyYjBfY19yZWd2YWw7CisJdTY0IGlpX2ljcmIwX2NfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGljX3NvdXJjZToxNTsKLQkJdWludDY0X3QgaWNfc2l6ZToyOwotCQl1aW50NjRfdCBpY19jdDoxOwotCQl1aW50NjRfdCBpY19idGVfbnVtOjE7Ci0JCXVpbnQ2NF90IGljX2dicjoxOwotCQl1aW50NjRfdCBpY19yZXNwcnFkOjE7Ci0JCXVpbnQ2NF90IGljX2JvOjE7Ci0JCXVpbnQ2NF90IGljX3N1cHBsOjE1OwotCQl1aW50NjRfdCBpY19yc3ZkOjI3OworCQl1NjQgaWNfc291cmNlOjE1OworCQl1NjQgaWNfc2l6ZToyOworCQl1NjQgaWNfY3Q6MTsKKwkJdTY0IGljX2J0ZV9udW06MTsKKwkJdTY0IGljX2dicjoxOworCQl1NjQgaWNfcmVzcHJxZDoxOworCQl1NjQgaWNfYm86MTsKKwkJdTY0IGljX3N1cHBsOjE1OworCQl1NjQgaWNfcnN2ZDoyNzsKIAl9IGlpX2ljcmIwX2NfZmxkX3M7CiB9IGlpX2ljcmIwX2NfdV90OwogCkBAIC0yMzEwLDE0ICsyMzEwLDE0IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2ljcmIwX2RfdSB7Ci0JdWludDY0X3QgaWlfaWNyYjBfZF9yZWd2YWw7CisJdTY0IGlpX2ljcmIwX2RfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlkX3BhX2JlOjQzOwotCQl1aW50NjRfdCBpZF9idGVfb3A6MTsKLQkJdWludDY0X3QgaWRfcHJfcHNjOjQ7Ci0JCXVpbnQ2NF90IGlkX3ByX2NudDo0OwotCQl1aW50NjRfdCBpZF9zbGVlcDoxOwotCQl1aW50NjRfdCBpZF9yc3ZkOjExOworCQl1NjQgaWRfcGFfYmU6NDM7CisJCXU2NCBpZF9idGVfb3A6MTsKKwkJdTY0IGlkX3ByX3BzYzo0OworCQl1NjQgaWRfcHJfY250OjQ7CisJCXU2NCBpZF9zbGVlcDoxOworCQl1NjQgaWRfcnN2ZDoxMTsKIAl9IGlpX2ljcmIwX2RfZmxkX3M7CiB9IGlpX2ljcmIwX2RfdV90OwogCkBAIC0yMzMxLDE0ICsyMzMxLDE0IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2ljcmIwX2VfdSB7Ci0JdWludDY0X3QgaWlfaWNyYjBfZV9yZWd2YWw7CisJdTY0IGlpX2ljcmIwX2VfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGllX3RpbWVvdXQ6ODsKLQkJdWludDY0X3QgaWVfY29udGV4dDoxNTsKLQkJdWludDY0X3QgaWVfcnN2ZDoxOwotCQl1aW50NjRfdCBpZV90dmxkOjE7Ci0JCXVpbnQ2NF90IGllX2N2bGQ6MTsKLQkJdWludDY0X3QgaWVfcnN2ZF8wOjM4OworCQl1NjQgaWVfdGltZW91dDo4OworCQl1NjQgaWVfY29udGV4dDoxNTsKKwkJdTY0IGllX3JzdmQ6MTsKKwkJdTY0IGllX3R2bGQ6MTsKKwkJdTY0IGllX2N2bGQ6MTsKKwkJdTY0IGllX3JzdmRfMDozODsKIAl9IGlpX2ljcmIwX2VfZmxkX3M7CiB9IGlpX2ljcmIwX2VfdV90OwogCkBAIC0yMzUxLDEyICsyMzUxLDEyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2ljc21sX3UgewotCXVpbnQ2NF90IGlpX2ljc21sX3JlZ3ZhbDsKKwl1NjQgaWlfaWNzbWxfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfdHRfYWRkcjo0NzsKLQkJdWludDY0X3QgaV9uZXdzdXBwbF9leDoxNDsKLQkJdWludDY0X3QgaV9yZXNlcnZlZDoyOwotCQl1aW50NjRfdCBpX292ZXJmbG93OjE7CisJCXU2NCBpX3R0X2FkZHI6NDc7CisJCXU2NCBpX25ld3N1cHBsX2V4OjE0OworCQl1NjQgaV9yZXNlcnZlZDoyOworCQl1NjQgaV9vdmVyZmxvdzoxOwogCX0gaWlfaWNzbWxfZmxkX3M7CiB9IGlpX2ljc21sX3VfdDsKIApAQCAtMjM2OSwxMCArMjM2OSwxMCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pY3NtbV91IHsKLQl1aW50NjRfdCBpaV9pY3NtbV9yZWd2YWw7CisJdTY0IGlpX2ljc21tX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3R0X2Fja19jbnQ6MTE7Ci0JCXVpbnQ2NF90IGlfcmVzZXJ2ZWQ6NTM7CisJCXU2NCBpX3R0X2Fja19jbnQ6MTE7CisJCXU2NCBpX3Jlc2VydmVkOjUzOwogCX0gaWlfaWNzbW1fZmxkX3M7CiB9IGlpX2ljc21tX3VfdDsKIApAQCAtMjM4NSw0OCArMjM4NSw0OCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pY3NtaF91IHsKLQl1aW50NjRfdCBpaV9pY3NtaF9yZWd2YWw7CisJdTY0IGlpX2ljc21oX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3R0X3ZsZDoxOwotCQl1aW50NjRfdCBpX3hlcnI6MTsKLQkJdWludDY0X3QgaV9mdF9jd2FjdF9vOjE7Ci0JCXVpbnQ2NF90IGlfZnRfd2FjdF9vOjE7Ci0JCXVpbnQ2NF90IGlfZnRfYWN0aXZlX286MTsKLQkJdWludDY0X3QgaV9zeW5jOjE7Ci0JCXVpbnQ2NF90IGlfbW51c2c6MTsKLQkJdWludDY0X3QgaV9tbnVzejoxOwotCQl1aW50NjRfdCBpX3BsdXN6OjE7Ci0JCXVpbnQ2NF90IGlfcGx1c2c6MTsKLQkJdWludDY0X3QgaV90dF9leGM6NTsKLQkJdWludDY0X3QgaV90dF93YjoxOwotCQl1aW50NjRfdCBpX3R0X2hvbGQ6MTsKLQkJdWludDY0X3QgaV90dF9hY2s6MTsKLQkJdWludDY0X3QgaV90dF9yZXNwOjE7Ci0JCXVpbnQ2NF90IGlfdHRfaW50dm46MTsKLQkJdWludDY0X3QgaV9nX3N0YWxsX2J0ZTE6MTsKLQkJdWludDY0X3QgaV9nX3N0YWxsX2J0ZTA6MTsKLQkJdWludDY0X3QgaV9nX3N0YWxsX2lsOjE7Ci0JCXVpbnQ2NF90IGlfZ19zdGFsbF9pYjoxOwotCQl1aW50NjRfdCBpX3R0X2ltc2c6ODsKLQkJdWludDY0X3QgaV90dF9pbXNndHlwZToyOwotCQl1aW50NjRfdCBpX3R0X3VzZV9vbGQ6MTsKLQkJdWludDY0X3QgaV90dF9yZXNwcmVxZDoxOwotCQl1aW50NjRfdCBpX3R0X2J0ZV9udW06MTsKLQkJdWludDY0X3QgaV9jYm46MTsKLQkJdWludDY0X3QgaV9tYXRjaDoxOwotCQl1aW50NjRfdCBpX3JwY250X2x0XzM0OjE7Ci0JCXVpbnQ2NF90IGlfcnBjbnRfZ2VfMzQ6MTsKLQkJdWludDY0X3QgaV9ycGNudF9sdF8xODoxOwotCQl1aW50NjRfdCBpX3JwY250X2dlXzE4OjE7Ci0JCXVpbnQ2NF90IGlfcnBjbnRfbHRfMjoxOwotCQl1aW50NjRfdCBpX3JwY250X2dlXzI6MTsKLQkJdWludDY0X3QgaV9ycWNudF9sdF8xODoxOwotCQl1aW50NjRfdCBpX3JxY250X2dlXzE4OjE7Ci0JCXVpbnQ2NF90IGlfcnFjbnRfbHRfMjoxOwotCQl1aW50NjRfdCBpX3JxY250X2dlXzI6MTsKLQkJdWludDY0X3QgaV90dF9kZXZpY2U6NzsKLQkJdWludDY0X3QgaV90dF9pbml0OjM7Ci0JCXVpbnQ2NF90IGlfcmVzZXJ2ZWQ6NTsKKwkJdTY0IGlfdHRfdmxkOjE7CisJCXU2NCBpX3hlcnI6MTsKKwkJdTY0IGlfZnRfY3dhY3RfbzoxOworCQl1NjQgaV9mdF93YWN0X286MTsKKwkJdTY0IGlfZnRfYWN0aXZlX286MTsKKwkJdTY0IGlfc3luYzoxOworCQl1NjQgaV9tbnVzZzoxOworCQl1NjQgaV9tbnVzejoxOworCQl1NjQgaV9wbHVzejoxOworCQl1NjQgaV9wbHVzZzoxOworCQl1NjQgaV90dF9leGM6NTsKKwkJdTY0IGlfdHRfd2I6MTsKKwkJdTY0IGlfdHRfaG9sZDoxOworCQl1NjQgaV90dF9hY2s6MTsKKwkJdTY0IGlfdHRfcmVzcDoxOworCQl1NjQgaV90dF9pbnR2bjoxOworCQl1NjQgaV9nX3N0YWxsX2J0ZTE6MTsKKwkJdTY0IGlfZ19zdGFsbF9idGUwOjE7CisJCXU2NCBpX2dfc3RhbGxfaWw6MTsKKwkJdTY0IGlfZ19zdGFsbF9pYjoxOworCQl1NjQgaV90dF9pbXNnOjg7CisJCXU2NCBpX3R0X2ltc2d0eXBlOjI7CisJCXU2NCBpX3R0X3VzZV9vbGQ6MTsKKwkJdTY0IGlfdHRfcmVzcHJlcWQ6MTsKKwkJdTY0IGlfdHRfYnRlX251bToxOworCQl1NjQgaV9jYm46MTsKKwkJdTY0IGlfbWF0Y2g6MTsKKwkJdTY0IGlfcnBjbnRfbHRfMzQ6MTsKKwkJdTY0IGlfcnBjbnRfZ2VfMzQ6MTsKKwkJdTY0IGlfcnBjbnRfbHRfMTg6MTsKKwkJdTY0IGlfcnBjbnRfZ2VfMTg6MTsKKwkJdTY0IGlfcnBjbnRfbHRfMjoxOworCQl1NjQgaV9ycGNudF9nZV8yOjE7CisJCXU2NCBpX3JxY250X2x0XzE4OjE7CisJCXU2NCBpX3JxY250X2dlXzE4OjE7CisJCXU2NCBpX3JxY250X2x0XzI6MTsKKwkJdTY0IGlfcnFjbnRfZ2VfMjoxOworCQl1NjQgaV90dF9kZXZpY2U6NzsKKwkJdTY0IGlfdHRfaW5pdDozOworCQl1NjQgaV9yZXNlcnZlZDo1OwogCX0gaWlfaWNzbWhfZmxkX3M7CiB9IGlpX2ljc21oX3VfdDsKIApAQCAtMjQzOSwxNCArMjQzOSwxNCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pZGJzc191IHsKLQl1aW50NjRfdCBpaV9pZGJzc19yZWd2YWw7CisJdTY0IGlpX2lkYnNzX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX2lpb2Nsa19jb3JlX3N1Ym1lbnU6MzsKLQkJdWludDY0X3QgaV9yc3ZkOjU7Ci0JCXVpbnQ2NF90IGlfZnNiY2xrX3dyYXBwZXJfc3VibWVudTozOwotCQl1aW50NjRfdCBpX3JzdmRfMTo1OwotCQl1aW50NjRfdCBpX2lpb2Nsa19tZW51OjU7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8yOjQzOworCQl1NjQgaV9paW9jbGtfY29yZV9zdWJtZW51OjM7CisJCXU2NCBpX3JzdmQ6NTsKKwkJdTY0IGlfZnNiY2xrX3dyYXBwZXJfc3VibWVudTozOworCQl1NjQgaV9yc3ZkXzE6NTsKKwkJdTY0IGlfaWlvY2xrX21lbnU6NTsKKwkJdTY0IGlfcnN2ZF8yOjQzOwogCX0gaWlfaWRic3NfZmxkX3M7CiB9IGlpX2lkYnNzX3VfdDsKIApAQCAtMjQ2NiwxMyArMjQ2NiwxMyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pYmxzMF91IHsKLQl1aW50NjRfdCBpaV9pYmxzMF9yZWd2YWw7CisJdTY0IGlpX2libHMwX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX2xlbmd0aDoxNjsKLQkJdWludDY0X3QgaV9lcnJvcjoxOwotCQl1aW50NjRfdCBpX3JzdmRfMTozOwotCQl1aW50NjRfdCBpX2J1c3k6MTsKLQkJdWludDY0X3QgaV9yc3ZkOjQzOworCQl1NjQgaV9sZW5ndGg6MTY7CisJCXU2NCBpX2Vycm9yOjE7CisJCXU2NCBpX3JzdmRfMTozOworCQl1NjQgaV9idXN5OjE7CisJCXU2NCBpX3JzdmQ6NDM7CiAJfSBpaV9pYmxzMF9mbGRfczsKIH0gaWlfaWJsczBfdV90OwogCkBAIC0yNDg3LDExICsyNDg3LDExIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lic2EwX3UgewotCXVpbnQ2NF90IGlpX2lic2EwX3JlZ3ZhbDsKKwl1NjQgaWlfaWJzYTBfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjc7Ci0JCXVpbnQ2NF90IGlfYWRkcjo0MjsKLQkJdWludDY0X3QgaV9yc3ZkOjE1OworCQl1NjQgaV9yc3ZkXzE6NzsKKwkJdTY0IGlfYWRkcjo0MjsKKwkJdTY0IGlfcnN2ZDoxNTsKIAl9IGlpX2lic2EwX2ZsZF9zOwogfSBpaV9pYnNhMF91X3Q7CiAKQEAgLTI1MDYsMTEgKzI1MDYsMTEgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWJkYTBfdSB7Ci0JdWludDY0X3QgaWlfaWJkYTBfcmVndmFsOworCXU2NCBpaV9pYmRhMF9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9yc3ZkXzE6NzsKLQkJdWludDY0X3QgaV9hZGRyOjQyOwotCQl1aW50NjRfdCBpX3JzdmQ6MTU7CisJCXU2NCBpX3JzdmRfMTo3OworCQl1NjQgaV9hZGRyOjQyOworCQl1NjQgaV9yc3ZkOjE1OwogCX0gaWlfaWJkYTBfZmxkX3M7CiB9IGlpX2liZGEwX3VfdDsKIApAQCAtMjUyNywxNCArMjUyNywxNCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pYmN0MF91IHsKLQl1aW50NjRfdCBpaV9pYmN0MF9yZWd2YWw7CisJdTY0IGlpX2liY3QwX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3plcm9maWxsOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8yOjM7Ci0JCXVpbnQ2NF90IGlfbm90aWZ5OjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjM7Ci0JCXVpbnQ2NF90IGlfcG9pc29uOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo1NTsKKwkJdTY0IGlfemVyb2ZpbGw6MTsKKwkJdTY0IGlfcnN2ZF8yOjM7CisJCXU2NCBpX25vdGlmeToxOworCQl1NjQgaV9yc3ZkXzE6MzsKKwkJdTY0IGlfcG9pc29uOjE7CisJCXU2NCBpX3JzdmQ6NTU7CiAJfSBpaV9pYmN0MF9mbGRfczsKIH0gaWlfaWJjdDBfdV90OwogCkBAIC0yNTQ2LDExICsyNTQ2LDExIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2libmEwX3UgewotCXVpbnQ2NF90IGlpX2libmEwX3JlZ3ZhbDsKKwl1NjQgaWlfaWJuYTBfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjc7Ci0JCXVpbnQ2NF90IGlfYWRkcjo0MjsKLQkJdWludDY0X3QgaV9yc3ZkOjE1OworCQl1NjQgaV9yc3ZkXzE6NzsKKwkJdTY0IGlfYWRkcjo0MjsKKwkJdTY0IGlfcnN2ZDoxNTsKIAl9IGlpX2libmEwX2ZsZF9zOwogfSBpaV9pYm5hMF91X3Q7CiAKQEAgLTI1NjMsMTMgKzI1NjMsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWJpYTBfdSB7Ci0JdWludDY0X3QgaWlfaWJpYTBfcmVndmFsOworCXU2NCBpaV9pYmlhMF9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9yc3ZkXzI6MTsKLQkJdWludDY0X3QgaV9ub2RlX2lkOjExOwotCQl1aW50NjRfdCBpX3JzdmRfMTo0OwotCQl1aW50NjRfdCBpX2xldmVsOjc7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo0MTsKKwkJdTY0IGlfcnN2ZF8yOjE7CisJCXU2NCBpX25vZGVfaWQ6MTE7CisJCXU2NCBpX3JzdmRfMTo0OworCQl1NjQgaV9sZXZlbDo3OworCQl1NjQgaV9yc3ZkOjQxOwogCX0gaWlfaWJpYTBfZmxkX3M7CiB9IGlpX2liaWEwX3VfdDsKIApAQCAtMjU4OSwxMyArMjU4OSwxMyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pYmxzMV91IHsKLQl1aW50NjRfdCBpaV9pYmxzMV9yZWd2YWw7CisJdTY0IGlpX2libHMxX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX2xlbmd0aDoxNjsKLQkJdWludDY0X3QgaV9lcnJvcjoxOwotCQl1aW50NjRfdCBpX3JzdmRfMTozOwotCQl1aW50NjRfdCBpX2J1c3k6MTsKLQkJdWludDY0X3QgaV9yc3ZkOjQzOworCQl1NjQgaV9sZW5ndGg6MTY7CisJCXU2NCBpX2Vycm9yOjE7CisJCXU2NCBpX3JzdmRfMTozOworCQl1NjQgaV9idXN5OjE7CisJCXU2NCBpX3JzdmQ6NDM7CiAJfSBpaV9pYmxzMV9mbGRfczsKIH0gaWlfaWJsczFfdV90OwogCkBAIC0yNjEwLDExICsyNjEwLDExIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lic2ExX3UgewotCXVpbnQ2NF90IGlpX2lic2ExX3JlZ3ZhbDsKKwl1NjQgaWlfaWJzYTFfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjc7Ci0JCXVpbnQ2NF90IGlfYWRkcjozMzsKLQkJdWludDY0X3QgaV9yc3ZkOjI0OworCQl1NjQgaV9yc3ZkXzE6NzsKKwkJdTY0IGlfYWRkcjozMzsKKwkJdTY0IGlfcnN2ZDoyNDsKIAl9IGlpX2lic2ExX2ZsZF9zOwogfSBpaV9pYnNhMV91X3Q7CiAKQEAgLTI2MjksMTEgKzI2MjksMTEgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWJkYTFfdSB7Ci0JdWludDY0X3QgaWlfaWJkYTFfcmVndmFsOworCXU2NCBpaV9pYmRhMV9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9yc3ZkXzE6NzsKLQkJdWludDY0X3QgaV9hZGRyOjMzOwotCQl1aW50NjRfdCBpX3JzdmQ6MjQ7CisJCXU2NCBpX3JzdmRfMTo3OworCQl1NjQgaV9hZGRyOjMzOworCQl1NjQgaV9yc3ZkOjI0OwogCX0gaWlfaWJkYTFfZmxkX3M7CiB9IGlpX2liZGExX3VfdDsKIApAQCAtMjY1MCwxNCArMjY1MCwxNCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdHlwZWRlZiB1bmlvbiBpaV9pYmN0MV91IHsKLQl1aW50NjRfdCBpaV9pYmN0MV9yZWd2YWw7CisJdTY0IGlpX2liY3QxX3JlZ3ZhbDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3plcm9maWxsOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8yOjM7Ci0JCXVpbnQ2NF90IGlfbm90aWZ5OjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjM7Ci0JCXVpbnQ2NF90IGlfcG9pc29uOjE7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo1NTsKKwkJdTY0IGlfemVyb2ZpbGw6MTsKKwkJdTY0IGlfcnN2ZF8yOjM7CisJCXU2NCBpX25vdGlmeToxOworCQl1NjQgaV9yc3ZkXzE6MzsKKwkJdTY0IGlfcG9pc29uOjE7CisJCXU2NCBpX3JzdmQ6NTU7CiAJfSBpaV9pYmN0MV9mbGRfczsKIH0gaWlfaWJjdDFfdV90OwogCkBAIC0yNjY5LDExICsyNjY5LDExIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2libmExX3UgewotCXVpbnQ2NF90IGlpX2libmExX3JlZ3ZhbDsKKwl1NjQgaWlfaWJuYTFfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfcnN2ZF8xOjc7Ci0JCXVpbnQ2NF90IGlfYWRkcjozMzsKLQkJdWludDY0X3QgaV9yc3ZkOjI0OworCQl1NjQgaV9yc3ZkXzE6NzsKKwkJdTY0IGlfYWRkcjozMzsKKwkJdTY0IGlfcnN2ZDoyNDsKIAl9IGlpX2libmExX2ZsZF9zOwogfSBpaV9pYm5hMV91X3Q7CiAKQEAgLTI2ODYsMTMgKzI2ODYsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5pb24gaWlfaWJpYTFfdSB7Ci0JdWludDY0X3QgaWlfaWJpYTFfcmVndmFsOworCXU2NCBpaV9pYmlhMV9yZWd2YWw7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgaV9waV9pZDoxOwotCQl1aW50NjRfdCBpX25vZGVfaWQ6ODsKLQkJdWludDY0X3QgaV9yc3ZkXzE6NzsKLQkJdWludDY0X3QgaV9sZXZlbDo3OwotCQl1aW50NjRfdCBpX3JzdmQ6NDE7CisJCXU2NCBpX3BpX2lkOjE7CisJCXU2NCBpX25vZGVfaWQ6ODsKKwkJdTY0IGlfcnN2ZF8xOjc7CisJCXU2NCBpX2xldmVsOjc7CisJCXU2NCBpX3JzdmQ6NDE7CiAJfSBpaV9pYmlhMV9mbGRfczsKIH0gaWlfaWJpYTFfdV90OwogCkBAIC0yNzEyLDEyICsyNzEyLDEyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwY3JfdSB7Ci0JdWludDY0X3QgaWlfaXBjcl9yZWd2YWw7CisJdTY0IGlpX2lwY3JfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfaXBwcjBfYzo0OwotCQl1aW50NjRfdCBpX2lwcHIxX2M6NDsKLQkJdWludDY0X3QgaV9pY2N0Ojg7Ci0JCXVpbnQ2NF90IGlfcnN2ZDo0ODsKKwkJdTY0IGlfaXBwcjBfYzo0OworCQl1NjQgaV9pcHByMV9jOjQ7CisJCXU2NCBpX2ljY3Q6ODsKKwkJdTY0IGlfcnN2ZDo0ODsKIAl9IGlpX2lwY3JfZmxkX3M7CiB9IGlpX2lwY3JfdV90OwogCkBAIC0yNzI4LDEwICsyNzI4LDEwIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB0eXBlZGVmIHVuaW9uIGlpX2lwcHJfdSB7Ci0JdWludDY0X3QgaWlfaXBwcl9yZWd2YWw7CisJdTY0IGlpX2lwcHJfcmVndmFsOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IGlfaXBwcjA6MzI7Ci0JCXVpbnQ2NF90IGlfaXBwcjE6MzI7CisJCXU2NCBpX2lwcHIwOjMyOworCQl1NjQgaV9pcHByMTozMjsKIAl9IGlpX2lwcHJfZmxkX3M7CiB9IGlpX2lwcHJfdV90OwogCkBAIC0zMjY3LDE1ICszMjY3LDE1IEBACiAjZGVmaW5lIElPX1BFUkZfU0VUUwkzMgogCiAvKiBCaXQgZm9yIHRoZSB3aWRnZXQgaW4gaW5ib3VuZCBhY2Nlc3MgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgSUlPX0lJV0FfV0lER0VUKF93KQkoKHVpbnQ2NF90KSgxVUxMIDw8IF93KSkKKyNkZWZpbmUgSUlPX0lJV0FfV0lER0VUKF93KQkoKHU2NCkoMVVMTCA8PCBfdykpCiAvKiBCaXQgZm9yIHRoZSB3aWRnZXQgaW4gb3V0Ym91bmQgYWNjZXNzIHJlZ2lzdGVyICovCi0jZGVmaW5lIElJT19JT1dBX1dJREdFVChfdykJKCh1aW50NjRfdCkoMVVMTCA8PCBfdykpCisjZGVmaW5lIElJT19JT1dBX1dJREdFVChfdykJKCh1NjQpKDFVTEwgPDwgX3cpKQogCiAvKiBOT1RFOiBUaGUgZm9sbG93aW5nIGRlZmluZSBhc3N1bWVzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGdldAogICogd2lkZ2V0IG51bWJlcnMgZnJvbSA4IHRocnUgRiBhbmQgdGhlIGRldmljZSBudW1iZXJzIHdpdGhpbgogICogd2lkZ2V0IGZyb20gMCB0aHJ1IDcuCiAgKi8KLSNkZWZpbmUgSUlPX0lJREVNX1dJREdFVERFVl9NQVNLKHcsIGQpCSgodWludDY0X3QpKDFVTEwgPDwgKDggKiAoKHcpIC0gOCkgKyAoZCkpKSkKKyNkZWZpbmUgSUlPX0lJREVNX1dJREdFVERFVl9NQVNLKHcsIGQpCSgodTY0KSgxVUxMIDw8ICg4ICogKCh3KSAtIDgpICsgKGQpKSkpCiAKIC8qIElPIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAqLwogI2RlZmluZSBJSU9fSUlEU1JfU0VOVF9TSElGVCAgICAyOApAQCAtMzMwMiw5ICszMzAyLDkgQEAKICAqLwogCiB0eXBlZGVmIHVuaW9uIGh1YmlpX3djcl91IHsKLQl1aW50NjRfdCB3Y3JfcmVnX3ZhbHVlOworCXU2NCB3Y3JfcmVnX3ZhbHVlOwogCXN0cnVjdCB7Ci0JCXVpbnQ2NF90IHdjcl93aWRnZXRfaWQ6NCwJLyogTExQIGNyb3NzYmFyIGNyZWRpdCAqLworCQl1NjQgd2NyX3dpZGdldF9pZDo0LAkvKiBMTFAgY3Jvc3NiYXIgY3JlZGl0ICovCiAJCSB3Y3JfdGFnX21vZGU6MSwJLyogVGFnIG1vZGUgKi8KIAkJIHdjcl9yc3ZkMTo4LAkvKiBSZXNlcnZlZCAqLwogCQkgd2NyX3hiYXJfY3JkOjMsCS8qIExMUCBjcm9zc2JhciBjcmVkaXQgKi8KQEAgLTMzMjQsOSArMzMyNCw5IEBACiAgICBwZXJmb3JtZWQgKi8KIAogdHlwZWRlZiB1bmlvbiBpb19wZXJmX3NlbCB7Ci0JdWludDY0X3QgcGVyZl9zZWxfcmVnOworCXU2NCBwZXJmX3NlbF9yZWc7CiAJc3RydWN0IHsKLQkJdWludDY0X3QgcGVyZl9pcHByMDo0LCBwZXJmX2lwcHIxOjQsIHBlcmZfaWNjdDo4LCBwZXJmX3JzdmQ6NDg7CisJCXU2NCBwZXJmX2lwcHIwOjQsIHBlcmZfaXBwcjE6NCwgcGVyZl9pY2N0OjgsIHBlcmZfcnN2ZDo0ODsKIAl9IHBlcmZfc2VsX2JpdHM7CiB9IGlvX3BlcmZfc2VsX3Q7CiAKQEAgLTMzMzQsMjQgKzMzMzQsMjQgQEAKICAgIGhhcmR3YXJlIHByb2JsZW1zIHRoZXJlIGlzIG9ubHkgb25lIGNvdW50ZXIsIG5vdCB0d28uICovCiAKIHR5cGVkZWYgdW5pb24gaW9fcGVyZl9jbnQgewotCXVpbnQ2NF90IHBlcmZfY250OworCXU2NCBwZXJmX2NudDsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBwZXJmX2NudDoyMCwgcGVyZl9yc3ZkMjoxMiwgcGVyZl9yc3ZkMTozMjsKKwkJdTY0IHBlcmZfY250OjIwLCBwZXJmX3JzdmQyOjEyLCBwZXJmX3JzdmQxOjMyOwogCX0gcGVyZl9jbnRfYml0czsKIAogfSBpb19wZXJmX2NudF90OwogCiB0eXBlZGVmIHVuaW9uIGlwcnRlX2EgewotCXVpbnQ2NF90IGVudHJ5OworCXU2NCBlbnRyeTsKIAlzdHJ1Y3QgewotCQl1aW50NjRfdCBpX3JzdmRfMTozOwotCQl1aW50NjRfdCBpX2FkZHI6Mzg7Ci0JCXVpbnQ2NF90IGlfaW5pdDozOwotCQl1aW50NjRfdCBpX3NvdXJjZTo4OwotCQl1aW50NjRfdCBpX3JzdmQ6MjsKLQkJdWludDY0X3QgaV93aWRnZXQ6NDsKLQkJdWludDY0X3QgaV90b19jbnQ6NTsKLQkJdWludDY0X3QgaV92bGQ6MTsKKwkJdTY0IGlfcnN2ZF8xOjM7CisJCXU2NCBpX2FkZHI6Mzg7CisJCXU2NCBpX2luaXQ6MzsKKwkJdTY0IGlfc291cmNlOjg7CisJCXU2NCBpX3JzdmQ6MjsKKwkJdTY0IGlfd2lkZ2V0OjQ7CisJCXU2NCBpX3RvX2NudDo1OworCQl1NjQgaV92bGQ6MTsKIAl9IGlwcnRlX2ZpZWxkczsKIH0gaXBydGVfYV90OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaAppbmRleCA4YjllMTBlLi5lNzdmMGM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKQEAgLTI3Myw3ICsyNzMsNyBAQAogCXJldF9zdHVmZi52MCA9IDA7CiAJcmV0X3N0dWZmLnYxID0gMDsKIAlyZXRfc3R1ZmYudjIgPSAwOwotCVNBTF9DQUxMX05PTE9DSyhyZXRfc3R1ZmYsIFNOX1NBTF9DT05TT0xFX1BVVEMsICh1aW50NjRfdCljaCwgMCwgMCwgMCwgMCwgMCwgMCk7CisJU0FMX0NBTExfTk9MT0NLKHJldF9zdHVmZiwgU05fU0FMX0NPTlNPTEVfUFVUQywgKHU2NCljaCwgMCwgMCwgMCwgMCwgMCwgMCk7CiAKIAlyZXR1cm4gcmV0X3N0dWZmLnN0YXR1czsKIH0KQEAgLTI5MCw3ICsyOTAsNyBAQAogCXJldF9zdHVmZi52MCA9IDA7IAogCXJldF9zdHVmZi52MSA9IDA7CiAJcmV0X3N0dWZmLnYyID0gMDsKLQlTQUxfQ0FMTF9OT0xPQ0socmV0X3N0dWZmLCBTTl9TQUxfQ09OU09MRV9QVVRCLCAodWludDY0X3QpYnVmLCAodWludDY0X3QpbGVuLCAwLCAwLCAwLCAwLCAwKTsKKwlTQUxfQ0FMTF9OT0xPQ0socmV0X3N0dWZmLCBTTl9TQUxfQ09OU09MRV9QVVRCLCAodTY0KWJ1ZiwgKHU2NClsZW4sIDAsIDAsIDAsIDAsIDApOwogCiAJaWYgKCByZXRfc3R1ZmYuc3RhdHVzID09IDAgKSB7CiAJCXJldHVybiByZXRfc3R1ZmYudjA7CkBAIC0zMTAsNyArMzEwLDcgQEAKIAlyZXRfc3R1ZmYudjAgPSAwOwogCXJldF9zdHVmZi52MSA9IDA7CiAJcmV0X3N0dWZmLnYyID0gMDsKLQlTQUxfQ0FMTF9SRUVOVFJBTlQocmV0X3N0dWZmLCBTTl9TQUxfUFJJTlRfRVJST1IsICh1aW50NjRfdClob29rLCAodWludDY0X3QpcmVjLCAwLCAwLCAwLCAwLCAwKTsKKwlTQUxfQ0FMTF9SRUVOVFJBTlQocmV0X3N0dWZmLCBTTl9TQUxfUFJJTlRfRVJST1IsICh1NjQpaG9vaywgKHU2NClyZWMsIDAsIDAsIDAsIDAsIDApOwogCiAJcmV0dXJuIHJldF9zdHVmZi5zdGF0dXM7CiB9CkBAIC0zOTgsNyArMzk4LDcgQEAKICAqIEVuYWJsZSBhbiBpbnRlcnJ1cHQgb24gdGhlIFNBTCBjb25zb2xlIGRldmljZS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1pYTY0X3NuX2NvbnNvbGVfaW50cl9lbmFibGUodWludDY0X3QgaW50cikKK2lhNjRfc25fY29uc29sZV9pbnRyX2VuYWJsZSh1NjQgaW50cikKIHsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIHJldF9zdHVmZjsKIApAQCAtNDE1LDcgKzQxNSw3IEBACiAgKiBEaXNhYmxlIGFuIGludGVycnVwdCBvbiB0aGUgU0FMIGNvbnNvbGUgZGV2aWNlLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLWlhNjRfc25fY29uc29sZV9pbnRyX2Rpc2FibGUodWludDY0X3QgaW50cikKK2lhNjRfc25fY29uc29sZV9pbnRyX2Rpc2FibGUodTY0IGludHIpCiB7CiAJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7CiAKQEAgLTQ0MSw3ICs0NDEsNyBAQAogCXJldF9zdHVmZi52MSA9IDA7CiAJcmV0X3N0dWZmLnYyID0gMDsKIAlTQUxfQ0FMTF9OT0xPQ0socmV0X3N0dWZmLCBTTl9TQUxfQ09OU09MRV9YTUlUX0NIQVJTLAotCQkgKHVpbnQ2NF90KWJ1ZiwgKHVpbnQ2NF90KWxlbiwKKwkJICh1NjQpYnVmLCAodTY0KWxlbiwKIAkJIDAsIDAsIDAsIDAsIDApOwogCiAJaWYgKHJldF9zdHVmZi5zdGF0dXMgPT0gMCkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jYS5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jYS5oCmluZGV4IGJjMWFhY2YuLjY2NjIyMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY2EuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2NhLmgKQEAgLTE5LDQ3ICsxOSw0NyBAQAogICovCiAKIHN0cnVjdCB0aW9jYSB7Ci0JdWludDY0X3QJY2FfaWQ7CQkJCS8qIDB4MDAwMDAwICovCi0JdWludDY0X3QJY2FfY29udHJvbDE7CQkJLyogMHgwMDAwMDggKi8KLQl1aW50NjRfdAljYV9jb250cm9sMjsJCQkvKiAweDAwMDAxMCAqLwotCXVpbnQ2NF90CWNhX3N0YXR1czE7CQkJLyogMHgwMDAwMTggKi8KLQl1aW50NjRfdAljYV9zdGF0dXMyOwkJCS8qIDB4MDAwMDIwICovCi0JdWludDY0X3QJY2FfZ2FydF9hcGVyYXR1cmU7CQkvKiAweDAwMDAyOCAqLwotCXVpbnQ2NF90CWNhX2dmeF9kZXRhY2g7CQkJLyogMHgwMDAwMzAgKi8KLQl1aW50NjRfdAljYV9pbnRhX2Rlc3RfYWRkcjsJCS8qIDB4MDAwMDM4ICovCi0JdWludDY0X3QJY2FfaW50Yl9kZXN0X2FkZHI7CQkvKiAweDAwMDA0MCAqLwotCXVpbnQ2NF90CWNhX2Vycl9pbnRfZGVzdF9hZGRyOwkJLyogMHgwMDAwNDggKi8KLQl1aW50NjRfdAljYV9pbnRfc3RhdHVzOwkJCS8qIDB4MDAwMDUwICovCi0JdWludDY0X3QJY2FfaW50X3N0YXR1c19hbGlhczsJCS8qIDB4MDAwMDU4ICovCi0JdWludDY0X3QJY2FfbXVsdF9lcnJvcjsJCQkvKiAweDAwMDA2MCAqLwotCXVpbnQ2NF90CWNhX211bHRfZXJyb3JfYWxpYXM7CQkvKiAweDAwMDA2OCAqLwotCXVpbnQ2NF90CWNhX2ZpcnN0X2Vycm9yOwkJCS8qIDB4MDAwMDcwICovCi0JdWludDY0X3QJY2FfaW50X21hc2s7CQkJLyogMHgwMDAwNzggKi8KLQl1aW50NjRfdAljYV9jcm1fcGt0ZXJyX3R5cGU7CQkvKiAweDAwMDA4MCAqLwotCXVpbnQ2NF90CWNhX2NybV9wa3RlcnJfdHlwZV9hbGlhczsJLyogMHgwMDAwODggKi8KLQl1aW50NjRfdAljYV9jcm1fY3RfZXJyb3JfZGV0YWlsXzE7CS8qIDB4MDAwMDkwICovCi0JdWludDY0X3QJY2FfY3JtX2N0X2Vycm9yX2RldGFpbF8yOwkvKiAweDAwMDA5OCAqLwotCXVpbnQ2NF90CWNhX2NybV90bnVtdG87CQkJLyogMHgwMDAwQTAgKi8KLQl1aW50NjRfdAljYV9nYXJ0X2VycjsJCQkvKiAweDAwMDBBOCAqLwotCXVpbnQ2NF90CWNhX3BjaWVycl90eXBlOwkJCS8qIDB4MDAwMEIwICovCi0JdWludDY0X3QJY2FfcGNpZXJyX2FkZHI7CQkJLyogMHgwMDAwQjggKi8KKwl1NjQJY2FfaWQ7CQkJCS8qIDB4MDAwMDAwICovCisJdTY0CWNhX2NvbnRyb2wxOwkJCS8qIDB4MDAwMDA4ICovCisJdTY0CWNhX2NvbnRyb2wyOwkJCS8qIDB4MDAwMDEwICovCisJdTY0CWNhX3N0YXR1czE7CQkJLyogMHgwMDAwMTggKi8KKwl1NjQJY2Ffc3RhdHVzMjsJCQkvKiAweDAwMDAyMCAqLworCXU2NAljYV9nYXJ0X2FwZXJhdHVyZTsJCS8qIDB4MDAwMDI4ICovCisJdTY0CWNhX2dmeF9kZXRhY2g7CQkJLyogMHgwMDAwMzAgKi8KKwl1NjQJY2FfaW50YV9kZXN0X2FkZHI7CQkvKiAweDAwMDAzOCAqLworCXU2NAljYV9pbnRiX2Rlc3RfYWRkcjsJCS8qIDB4MDAwMDQwICovCisJdTY0CWNhX2Vycl9pbnRfZGVzdF9hZGRyOwkJLyogMHgwMDAwNDggKi8KKwl1NjQJY2FfaW50X3N0YXR1czsJCQkvKiAweDAwMDA1MCAqLworCXU2NAljYV9pbnRfc3RhdHVzX2FsaWFzOwkJLyogMHgwMDAwNTggKi8KKwl1NjQJY2FfbXVsdF9lcnJvcjsJCQkvKiAweDAwMDA2MCAqLworCXU2NAljYV9tdWx0X2Vycm9yX2FsaWFzOwkJLyogMHgwMDAwNjggKi8KKwl1NjQJY2FfZmlyc3RfZXJyb3I7CQkJLyogMHgwMDAwNzAgKi8KKwl1NjQJY2FfaW50X21hc2s7CQkJLyogMHgwMDAwNzggKi8KKwl1NjQJY2FfY3JtX3BrdGVycl90eXBlOwkJLyogMHgwMDAwODAgKi8KKwl1NjQJY2FfY3JtX3BrdGVycl90eXBlX2FsaWFzOwkvKiAweDAwMDA4OCAqLworCXU2NAljYV9jcm1fY3RfZXJyb3JfZGV0YWlsXzE7CS8qIDB4MDAwMDkwICovCisJdTY0CWNhX2NybV9jdF9lcnJvcl9kZXRhaWxfMjsJLyogMHgwMDAwOTggKi8KKwl1NjQJY2FfY3JtX3RudW10bzsJCQkvKiAweDAwMDBBMCAqLworCXU2NAljYV9nYXJ0X2VycjsJCQkvKiAweDAwMDBBOCAqLworCXU2NAljYV9wY2llcnJfdHlwZTsJCQkvKiAweDAwMDBCMCAqLworCXU2NAljYV9wY2llcnJfYWRkcjsJCQkvKiAweDAwMDBCOCAqLwogCi0JdWludDY0X3QJY2FfcGFkXzAwMDBDMFszXTsJCS8qIDB4MDAwMHtDMC4uRDB9ICovCisJdTY0CWNhX3BhZF8wMDAwQzBbM107CQkvKiAweDAwMDB7QzAuLkQwfSAqLwogCi0JdWludDY0X3QJY2FfcGNpX3JkX2J1Zl9mbHVzaDsJCS8qIDB4MDAwMEQ4ICovCi0JdWludDY0X3QJY2FfcGNpX2RtYV9hZGRyX2V4dG47CQkvKiAweDAwMDBFMCAqLwotCXVpbnQ2NF90CWNhX2FncF9kbWFfYWRkcl9leHRuOwkJLyogMHgwMDAwRTggKi8KLQl1aW50NjRfdAljYV9mb3JjZV9pbnRhOwkJCS8qIDB4MDAwMEYwICovCi0JdWludDY0X3QJY2FfZm9yY2VfaW50YjsJCQkvKiAweDAwMDBGOCAqLwotCXVpbnQ2NF90CWNhX2RlYnVnX3ZlY3Rvcl9zZWw7CQkvKiAweDAwMDEwMCAqLwotCXVpbnQ2NF90CWNhX2RlYnVnX211eF9jb3JlX3NlbDsJCS8qIDB4MDAwMTA4ICovCi0JdWludDY0X3QJY2FfZGVidWdfbXV4X3BjaV9zZWw7CQkvKiAweDAwMDExMCAqLwotCXVpbnQ2NF90CWNhX2RlYnVnX2RvbWFpbl9zZWw7CQkvKiAweDAwMDExOCAqLworCXU2NAljYV9wY2lfcmRfYnVmX2ZsdXNoOwkJLyogMHgwMDAwRDggKi8KKwl1NjQJY2FfcGNpX2RtYV9hZGRyX2V4dG47CQkvKiAweDAwMDBFMCAqLworCXU2NAljYV9hZ3BfZG1hX2FkZHJfZXh0bjsJCS8qIDB4MDAwMEU4ICovCisJdTY0CWNhX2ZvcmNlX2ludGE7CQkJLyogMHgwMDAwRjAgKi8KKwl1NjQJY2FfZm9yY2VfaW50YjsJCQkvKiAweDAwMDBGOCAqLworCXU2NAljYV9kZWJ1Z192ZWN0b3Jfc2VsOwkJLyogMHgwMDAxMDAgKi8KKwl1NjQJY2FfZGVidWdfbXV4X2NvcmVfc2VsOwkJLyogMHgwMDAxMDggKi8KKwl1NjQJY2FfZGVidWdfbXV4X3BjaV9zZWw7CQkvKiAweDAwMDExMCAqLworCXU2NAljYV9kZWJ1Z19kb21haW5fc2VsOwkJLyogMHgwMDAxMTggKi8KIAotCXVpbnQ2NF90CWNhX3BhZF8wMDAxMjBbMjhdOwkJLyogMHgwMDAxezIwLi5GOH0gKi8KKwl1NjQJY2FfcGFkXzAwMDEyMFsyOF07CQkvKiAweDAwMDF7MjAuLkY4fSAqLwogCi0JdWludDY0X3QJY2FfZ2FydF9wdHJfdGFibGU7CQkvKiAweDIwMCAqLwotCXVpbnQ2NF90CWNhX2dhcnRfdGxiX2FkZHJbOF07CQkvKiAweDJ7MDguLjQwfSAqLworCXU2NAljYV9nYXJ0X3B0cl90YWJsZTsJCS8qIDB4MjAwICovCisJdTY0CWNhX2dhcnRfdGxiX2FkZHJbOF07CQkvKiAweDJ7MDguLjQwfSAqLwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY2FfcHJvdmlkZXIuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY2FfcHJvdmlkZXIuaAppbmRleCBiNTMyZWY2Li5hYjdmZTI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2NhX3Byb3ZpZGVyLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jYV9wcm92aWRlci5oCkBAIC01NiwzMSArNTYsMzEgQEAKIAkvKgogCSAqIEdlbmVyYWwgR0FSVCBzdHVmZgogCSAqLwotCXVpbnQ2NF90CWNhX2FwX3NpemU7CQkvKiBzaXplIG9mIGFwZXJhdHVyZSBpbiBieXRlcyAqLwotCXVpbnQzMl90CWNhX2dhcnRfZW50cmllczsJLyogIyB1aW50NjRfdCBlbnRyaWVzIGluIGdhcnQgKi8KLQl1aW50MzJfdAljYV9hcF9wYWdlc2l6ZTsgCS8qIGFwZXJhdHVyZSBwYWdlIHNpemUgaW4gYnl0ZXMgKi8KLQl1aW50NjRfdAljYV9hcF9idXNfYmFzZTsgCS8qIGJ1cyBhZGRyZXNzIG9mIENBIGFwZXJhdHVyZSAqLwotCXVpbnQ2NF90CWNhX2dhcnRfc2l6ZTsJCS8qIGdhcnQgc2l6ZSBpbiBieXRlcyAqLwotCXVpbnQ2NF90CSpjYV9nYXJ0OwkJLyogZ2FydCB0YWJsZSB2YWRkciAqLwotCXVpbnQ2NF90CWNhX2dhcnRfY29yZXRhbGtfYWRkcjsJLyogZ2FydCBjb3JldGFsayBhZGRyICovCi0JdWludDhfdAkJY2FfZ2FydF9pc2NvaGVyZW50OwkvKiB1c2VkIGluIHRpb2NhX3RsYmZsdXNoICovCisJdTY0CWNhX2FwX3NpemU7CQkvKiBzaXplIG9mIGFwZXJhdHVyZSBpbiBieXRlcyAqLworCXUzMgljYV9nYXJ0X2VudHJpZXM7CS8qICMgdTY0IGVudHJpZXMgaW4gZ2FydCAqLworCXUzMgljYV9hcF9wYWdlc2l6ZTsgCS8qIGFwZXJhdHVyZSBwYWdlIHNpemUgaW4gYnl0ZXMgKi8KKwl1NjQJY2FfYXBfYnVzX2Jhc2U7IAkvKiBidXMgYWRkcmVzcyBvZiBDQSBhcGVyYXR1cmUgKi8KKwl1NjQJY2FfZ2FydF9zaXplOwkJLyogZ2FydCBzaXplIGluIGJ5dGVzICovCisJdTY0CSpjYV9nYXJ0OwkJLyogZ2FydCB0YWJsZSB2YWRkciAqLworCXU2NAljYV9nYXJ0X2NvcmV0YWxrX2FkZHI7CS8qIGdhcnQgY29yZXRhbGsgYWRkciAqLworCXU4CQljYV9nYXJ0X2lzY29oZXJlbnQ7CS8qIHVzZWQgaW4gdGlvY2FfdGxiZmx1c2ggKi8KIAogCS8qIFBDSSBHQVJUIGNvbnZlbmllbmNlIHZhbHVlcyAqLwotCXVpbnQ2NF90CWNhX3BjaWFwX2Jhc2U7CQkvKiBwY2kgYXBlcmF0dXJlIGJ1cyBiYXNlIGFkZHJlc3MgKi8KLQl1aW50NjRfdAljYV9wY2lhcF9zaXplOwkJLyogcGNpIGFwZXJhdHVyZSBzaXplIChieXRlcykgKi8KLQl1aW50NjRfdAljYV9wY2lnYXJ0X2Jhc2U7CS8qIGdmeCBHQVJUIGJ1cyBiYXNlIGFkZHJlc3MgKi8KLQl1aW50NjRfdAkqY2FfcGNpZ2FydDsJCS8qIGdmeCBHQVJUIHZtIGFkZHJlc3MgKi8KLQl1aW50MzJfdAljYV9wY2lnYXJ0X2VudHJpZXM7Ci0JdWludDMyX3QJY2FfcGNpZ2FydF9zdGFydDsJLyogUENJIHN0YXJ0IGluZGV4IGluIGNhX2dhcnQgKi8KKwl1NjQJY2FfcGNpYXBfYmFzZTsJCS8qIHBjaSBhcGVyYXR1cmUgYnVzIGJhc2UgYWRkcmVzcyAqLworCXU2NAljYV9wY2lhcF9zaXplOwkJLyogcGNpIGFwZXJhdHVyZSBzaXplIChieXRlcykgKi8KKwl1NjQJY2FfcGNpZ2FydF9iYXNlOwkvKiBnZnggR0FSVCBidXMgYmFzZSBhZGRyZXNzICovCisJdTY0CSpjYV9wY2lnYXJ0OwkJLyogZ2Z4IEdBUlQgdm0gYWRkcmVzcyAqLworCXUzMgljYV9wY2lnYXJ0X2VudHJpZXM7CisJdTMyCWNhX3BjaWdhcnRfc3RhcnQ7CS8qIFBDSSBzdGFydCBpbmRleCBpbiBjYV9nYXJ0ICovCiAJdm9pZAkJKmNhX3BjaWdhcnRfcGFnZW1hcDsKIAogCS8qIEFHUCBHQVJUIGNvbnZlbmllbmNlIHZhbHVlcyAqLwotCXVpbnQ2NF90CWNhX2dmeGFwX2Jhc2U7CQkvKiBnZnggYXBlcmF0dXJlIGJ1cyBiYXNlIGFkZHJlc3MgKi8KLQl1aW50NjRfdAljYV9nZnhhcF9zaXplOwkJLyogZ2Z4IGFwZXJhdHVyZSBzaXplIChieXRlcykgKi8KLQl1aW50NjRfdAljYV9nZnhnYXJ0X2Jhc2U7CS8qIGdmeCBHQVJUIGJ1cyBiYXNlIGFkZHJlc3MgKi8KLQl1aW50NjRfdAkqY2FfZ2Z4Z2FydDsJCS8qIGdmeCBHQVJUIHZtIGFkZHJlc3MgKi8KLQl1aW50MzJfdAljYV9nZnhnYXJ0X2VudHJpZXM7Ci0JdWludDMyX3QJY2FfZ2Z4Z2FydF9zdGFydDsJLyogYWdwZ2FydCBzdGFydCBpbmRleCBpbiBjYV9nYXJ0ICovCisJdTY0CWNhX2dmeGFwX2Jhc2U7CQkvKiBnZnggYXBlcmF0dXJlIGJ1cyBiYXNlIGFkZHJlc3MgKi8KKwl1NjQJY2FfZ2Z4YXBfc2l6ZTsJCS8qIGdmeCBhcGVyYXR1cmUgc2l6ZSAoYnl0ZXMpICovCisJdTY0CWNhX2dmeGdhcnRfYmFzZTsJLyogZ2Z4IEdBUlQgYnVzIGJhc2UgYWRkcmVzcyAqLworCXU2NAkqY2FfZ2Z4Z2FydDsJCS8qIGdmeCBHQVJUIHZtIGFkZHJlc3MgKi8KKwl1MzIJY2FfZ2Z4Z2FydF9lbnRyaWVzOworCXUzMgljYV9nZnhnYXJ0X3N0YXJ0OwkvKiBhZ3BnYXJ0IHN0YXJ0IGluZGV4IGluIGNhX2dhcnQgKi8KIH07CiAKIC8qCkBAIC05MywxMSArOTMsMTEgQEAKIHN0cnVjdCB0aW9jYV9jb21tb24gewogCXN0cnVjdCBwY2lidXNfYnVzc29mdAljYV9jb21tb247CS8qIGNvbW1vbiBwY2lpbyBoZWFkZXIgKi8KIAotCXVpbnQzMl90CQljYV9yZXY7Ci0JdWludDMyX3QJCWNhX2Nsb3Nlc3RfbmFzaWQ7CisJdTMyCQljYV9yZXY7CisJdTMyCQljYV9jbG9zZXN0X25hc2lkOwogCi0JdWludDY0X3QJCWNhX3Byb21fcHJpdmF0ZTsKLQl1aW50NjRfdAkJY2Ffa2VybmVsX3ByaXZhdGU7CisJdTY0CQljYV9wcm9tX3ByaXZhdGU7CisJdTY0CQljYV9rZXJuZWxfcHJpdmF0ZTsKIH07CiAKIC8qKgpAQCAtMTM5LDkgKzEzOSw5IEBACiAgKi8KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi10aW9jYV9waHlzcGFnZV90b19nYXJ0KHVpbnQ2NF90IHBhZ2VfYWRkcikKK3Rpb2NhX3BoeXNwYWdlX3RvX2dhcnQodTY0IHBhZ2VfYWRkcikKIHsKLQl1aW50NjRfdCBjb3JldGFsa19hZGRyOworCXU2NCBjb3JldGFsa19hZGRyOwogCiAJY29yZXRhbGtfYWRkciA9IFBIWVNfVE9fVElPRE1BKHBhZ2VfYWRkcik7CiAJaWYgKCFjb3JldGFsa19hZGRyKSB7CkBAIC0xNjEsNyArMTYxLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogdGlvY2FfdGxiZmx1c2goc3RydWN0IHRpb2NhX2tlcm5lbCAqdGlvY2Ffa2VybmVsKQogewotCXZvbGF0aWxlIHVpbnQ2NF90IHRtcDsKKwl2b2xhdGlsZSB1NjQgdG1wOwogCXZvbGF0aWxlIHN0cnVjdCB0aW9jYSAqY2FfYmFzZTsKIAlzdHJ1Y3QgdGlvY2FfY29tbW9uICp0aW9jYV9jb21tb247CiAKQEAgLTIwMCw3ICsyMDAsNyBAQAogCXRtcCA9IF9fc25fcmVhZHFfcmVsYXhlZCgmY2FfYmFzZS0+Y2FfY29udHJvbDIpOwogfQogCi1leHRlcm4gdWludDMyX3QJdGlvY2FfZ2FydF9mb3VuZDsKK2V4dGVybiB1MzIJdGlvY2FfZ2FydF9mb3VuZDsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHRpb2NhX2xpc3Q7CiBleHRlcm4gaW50IHRpb2NhX2luaXRfcHJvdmlkZXIodm9pZCk7CiBleHRlcm4gdm9pZCB0aW9jYV9mYXN0d3JpdGVfZW5hYmxlKHN0cnVjdCB0aW9jYV9rZXJuZWwgKnRpb2NhX2tlcm4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jZS5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jZS5oCmluZGV4IGVjYWRkZjkuLmQ0Yzk5MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY2UuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2NlLmgKQEAgLTM1LDcyICszNSw3MiBAQAogCS8qCiAJICogQURNSU4gOiBBZG1pbmlzdHJhdGlvbiBSZWdpc3RlcnMKIAkgKi8KLQl1aW50NjRfdAljZV9hZG1faWQ7CQkJCS8qIDB4MDAwMDAwICovCi0JdWludDY0X3QJY2VfcGFkXzAwMDAwODsJCQkJLyogMHgwMDAwMDggKi8KLQl1aW50NjRfdAljZV9hZG1fZHluX2NyZWRpdF9zdGF0dXM7CQkvKiAweDAwMDAxMCAqLwotCXVpbnQ2NF90CWNlX2FkbV9sYXN0X2NyZWRpdF9zdGF0dXM7CQkvKiAweDAwMDAxOCAqLwotCXVpbnQ2NF90CWNlX2FkbV9jcmVkaXRfbGltaXQ7CQkJLyogMHgwMDAwMjAgKi8KLQl1aW50NjRfdAljZV9hZG1fZm9yY2VfY3JlZGl0OwkJCS8qIDB4MDAwMDI4ICovCi0JdWludDY0X3QJY2VfYWRtX2NvbnRyb2w7CQkJCS8qIDB4MDAwMDMwICovCi0JdWludDY0X3QJY2VfYWRtX21tcl9jaG5fdGltZW91dDsJCQkvKiAweDAwMDAzOCAqLwotCXVpbnQ2NF90CWNlX2FkbV9zc3BfdXJlX3RpbWVvdXQ7CQkJLyogMHgwMDAwNDAgKi8KLQl1aW50NjRfdAljZV9hZG1fc3NwX2RyZV90aW1lb3V0OwkJCS8qIDB4MDAwMDQ4ICovCi0JdWludDY0X3QJY2VfYWRtX3NzcF9kZWJ1Z19zZWw7CQkJLyogMHgwMDAwNTAgKi8KLQl1aW50NjRfdAljZV9hZG1faW50X3N0YXR1czsJCQkvKiAweDAwMDA1OCAqLwotCXVpbnQ2NF90CWNlX2FkbV9pbnRfc3RhdHVzX2FsaWFzOwkJLyogMHgwMDAwNjAgKi8KLQl1aW50NjRfdAljZV9hZG1faW50X21hc2s7CQkJLyogMHgwMDAwNjggKi8KLQl1aW50NjRfdAljZV9hZG1faW50X3BlbmRpbmc7CQkJLyogMHgwMDAwNzAgKi8KLQl1aW50NjRfdAljZV9hZG1fZm9yY2VfaW50OwkJCS8qIDB4MDAwMDc4ICovCi0JdWludDY0X3QJY2VfYWRtX3VyZV91cHNfYnVmX2JhcnJpZXJfZmx1c2g7CS8qIDB4MDAwMDgwICovCi0JdWludDY0X3QJY2VfYWRtX2ludF9kZXN0WzE1XTsJICAgIC8qIDB4MDAwMDg4IC0tIDB4MDAwMEY4ICovCi0JdWludDY0X3QJY2VfYWRtX2Vycm9yX3N1bW1hcnk7CQkJLyogMHgwMDAxMDAgKi8KLQl1aW50NjRfdAljZV9hZG1fZXJyb3Jfc3VtbWFyeV9hbGlhczsJCS8qIDB4MDAwMTA4ICovCi0JdWludDY0X3QJY2VfYWRtX2Vycm9yX21hc2s7CQkJLyogMHgwMDAxMTAgKi8KLQl1aW50NjRfdAljZV9hZG1fZmlyc3RfZXJyb3I7CQkJLyogMHgwMDAxMTggKi8KLQl1aW50NjRfdAljZV9hZG1fZXJyb3Jfb3ZlcmZsb3c7CQkJLyogMHgwMDAxMjAgKi8KLQl1aW50NjRfdAljZV9hZG1fZXJyb3Jfb3ZlcmZsb3dfYWxpYXM7CQkvKiAweDAwMDEyOCAqLwotCXVpbnQ2NF90CWNlX3BhZF8wMDAxMzBbMl07CSAgICAvKiAweDAwMDEzMCAtLSAweDAwMDEzOCAqLwotCXVpbnQ2NF90CWNlX2FkbV90bnVtX2Vycm9yOwkJCS8qIDB4MDAwMTQwICovCi0JdWludDY0X3QJY2VfYWRtX21tcl9lcnJfZGV0YWlsOwkJCS8qIDB4MDAwMTQ4ICovCi0JdWludDY0X3QJY2VfYWRtX21zZ19zcmFtX3BlcnJfZGV0YWlsOwkJLyogMHgwMDAxNTAgKi8KLQl1aW50NjRfdAljZV9hZG1fYmFwX3NyYW1fcGVycl9kZXRhaWw7CQkvKiAweDAwMDE1OCAqLwotCXVpbnQ2NF90CWNlX2FkbV9jZV9zcmFtX3BlcnJfZGV0YWlsOwkJLyogMHgwMDAxNjAgKi8KLQl1aW50NjRfdAljZV9hZG1fY2VfY3JlZGl0X29mbG93X2RldGFpbDsJCS8qIDB4MDAwMTY4ICovCi0JdWludDY0X3QJY2VfYWRtX3R4X2xpbmtfaWRsZV9tYXhfdGltZXI7CQkvKiAweDAwMDE3MCAqLwotCXVpbnQ2NF90CWNlX2FkbV9wY2llX2RlYnVnX3NlbDsJCQkvKiAweDAwMDE3OCAqLwotCXVpbnQ2NF90CWNlX3BhZF8wMDAxODBbMTZdOwkgICAgLyogMHgwMDAxODAgLS0gMHgwMDAxRjggKi8KKwl1NjQJY2VfYWRtX2lkOwkJCQkvKiAweDAwMDAwMCAqLworCXU2NAljZV9wYWRfMDAwMDA4OwkJCQkvKiAweDAwMDAwOCAqLworCXU2NAljZV9hZG1fZHluX2NyZWRpdF9zdGF0dXM7CQkvKiAweDAwMDAxMCAqLworCXU2NAljZV9hZG1fbGFzdF9jcmVkaXRfc3RhdHVzOwkJLyogMHgwMDAwMTggKi8KKwl1NjQJY2VfYWRtX2NyZWRpdF9saW1pdDsJCQkvKiAweDAwMDAyMCAqLworCXU2NAljZV9hZG1fZm9yY2VfY3JlZGl0OwkJCS8qIDB4MDAwMDI4ICovCisJdTY0CWNlX2FkbV9jb250cm9sOwkJCQkvKiAweDAwMDAzMCAqLworCXU2NAljZV9hZG1fbW1yX2Nobl90aW1lb3V0OwkJCS8qIDB4MDAwMDM4ICovCisJdTY0CWNlX2FkbV9zc3BfdXJlX3RpbWVvdXQ7CQkJLyogMHgwMDAwNDAgKi8KKwl1NjQJY2VfYWRtX3NzcF9kcmVfdGltZW91dDsJCQkvKiAweDAwMDA0OCAqLworCXU2NAljZV9hZG1fc3NwX2RlYnVnX3NlbDsJCQkvKiAweDAwMDA1MCAqLworCXU2NAljZV9hZG1faW50X3N0YXR1czsJCQkvKiAweDAwMDA1OCAqLworCXU2NAljZV9hZG1faW50X3N0YXR1c19hbGlhczsJCS8qIDB4MDAwMDYwICovCisJdTY0CWNlX2FkbV9pbnRfbWFzazsJCQkvKiAweDAwMDA2OCAqLworCXU2NAljZV9hZG1faW50X3BlbmRpbmc7CQkJLyogMHgwMDAwNzAgKi8KKwl1NjQJY2VfYWRtX2ZvcmNlX2ludDsJCQkvKiAweDAwMDA3OCAqLworCXU2NAljZV9hZG1fdXJlX3Vwc19idWZfYmFycmllcl9mbHVzaDsJLyogMHgwMDAwODAgKi8KKwl1NjQJY2VfYWRtX2ludF9kZXN0WzE1XTsJICAgIC8qIDB4MDAwMDg4IC0tIDB4MDAwMEY4ICovCisJdTY0CWNlX2FkbV9lcnJvcl9zdW1tYXJ5OwkJCS8qIDB4MDAwMTAwICovCisJdTY0CWNlX2FkbV9lcnJvcl9zdW1tYXJ5X2FsaWFzOwkJLyogMHgwMDAxMDggKi8KKwl1NjQJY2VfYWRtX2Vycm9yX21hc2s7CQkJLyogMHgwMDAxMTAgKi8KKwl1NjQJY2VfYWRtX2ZpcnN0X2Vycm9yOwkJCS8qIDB4MDAwMTE4ICovCisJdTY0CWNlX2FkbV9lcnJvcl9vdmVyZmxvdzsJCQkvKiAweDAwMDEyMCAqLworCXU2NAljZV9hZG1fZXJyb3Jfb3ZlcmZsb3dfYWxpYXM7CQkvKiAweDAwMDEyOCAqLworCXU2NAljZV9wYWRfMDAwMTMwWzJdOwkgICAgLyogMHgwMDAxMzAgLS0gMHgwMDAxMzggKi8KKwl1NjQJY2VfYWRtX3RudW1fZXJyb3I7CQkJLyogMHgwMDAxNDAgKi8KKwl1NjQJY2VfYWRtX21tcl9lcnJfZGV0YWlsOwkJCS8qIDB4MDAwMTQ4ICovCisJdTY0CWNlX2FkbV9tc2dfc3JhbV9wZXJyX2RldGFpbDsJCS8qIDB4MDAwMTUwICovCisJdTY0CWNlX2FkbV9iYXBfc3JhbV9wZXJyX2RldGFpbDsJCS8qIDB4MDAwMTU4ICovCisJdTY0CWNlX2FkbV9jZV9zcmFtX3BlcnJfZGV0YWlsOwkJLyogMHgwMDAxNjAgKi8KKwl1NjQJY2VfYWRtX2NlX2NyZWRpdF9vZmxvd19kZXRhaWw7CQkvKiAweDAwMDE2OCAqLworCXU2NAljZV9hZG1fdHhfbGlua19pZGxlX21heF90aW1lcjsJCS8qIDB4MDAwMTcwICovCisJdTY0CWNlX2FkbV9wY2llX2RlYnVnX3NlbDsJCQkvKiAweDAwMDE3OCAqLworCXU2NAljZV9wYWRfMDAwMTgwWzE2XTsJICAgIC8qIDB4MDAwMTgwIC0tIDB4MDAwMUY4ICovCiAKLQl1aW50NjRfdAljZV9hZG1fcGNpZV9kZWJ1Z19zZWxfdG9wOwkJLyogMHgwMDAyMDAgKi8KLQl1aW50NjRfdAljZV9hZG1fcGNpZV9kZWJ1Z19sYXRfc2VsX2xvX3RvcDsJLyogMHgwMDAyMDggKi8KLQl1aW50NjRfdAljZV9hZG1fcGNpZV9kZWJ1Z19sYXRfc2VsX2hpX3RvcDsJLyogMHgwMDAyMTAgKi8KLQl1aW50NjRfdAljZV9hZG1fcGNpZV9kZWJ1Z190cmlnX3NlbF90b3A7CQkvKiAweDAwMDIxOCAqLwotCXVpbnQ2NF90CWNlX2FkbV9wY2llX2RlYnVnX3RyaWdfbGF0X3NlbF9sb190b3A7CS8qIDB4MDAwMjIwICovCi0JdWludDY0X3QJY2VfYWRtX3BjaWVfZGVidWdfdHJpZ19sYXRfc2VsX2hpX3RvcDsJLyogMHgwMDAyMjggKi8KLQl1aW50NjRfdAljZV9hZG1fcGNpZV90cmlnX2NvbXBhcmVfdG9wOwkJLyogMHgwMDAyMzAgKi8KLQl1aW50NjRfdAljZV9hZG1fcGNpZV90cmlnX2NvbXBhcmVfZW5fdG9wOwkvKiAweDAwMDIzOCAqLwotCXVpbnQ2NF90CWNlX2FkbV9zc3BfZGVidWdfc2VsX3RvcDsJCS8qIDB4MDAwMjQwICovCi0JdWludDY0X3QJY2VfYWRtX3NzcF9kZWJ1Z19sYXRfc2VsX2xvX3RvcDsJLyogMHgwMDAyNDggKi8KLQl1aW50NjRfdAljZV9hZG1fc3NwX2RlYnVnX2xhdF9zZWxfaGlfdG9wOwkvKiAweDAwMDI1MCAqLwotCXVpbnQ2NF90CWNlX2FkbV9zc3BfZGVidWdfdHJpZ19zZWxfdG9wOwkJLyogMHgwMDAyNTggKi8KLQl1aW50NjRfdAljZV9hZG1fc3NwX2RlYnVnX3RyaWdfbGF0X3NlbF9sb190b3A7CS8qIDB4MDAwMjYwICovCi0JdWludDY0X3QJY2VfYWRtX3NzcF9kZWJ1Z190cmlnX2xhdF9zZWxfaGlfdG9wOwkvKiAweDAwMDI2OCAqLwotCXVpbnQ2NF90CWNlX2FkbV9zc3BfdHJpZ19jb21wYXJlX3RvcDsJCS8qIDB4MDAwMjcwICovCi0JdWludDY0X3QJY2VfYWRtX3NzcF90cmlnX2NvbXBhcmVfZW5fdG9wOwkJLyogMHgwMDAyNzggKi8KLQl1aW50NjRfdAljZV9wYWRfMDAwMjgwWzQ4XTsJICAgIC8qIDB4MDAwMjgwIC0tIDB4MDAwM0Y4ICovCisJdTY0CWNlX2FkbV9wY2llX2RlYnVnX3NlbF90b3A7CQkvKiAweDAwMDIwMCAqLworCXU2NAljZV9hZG1fcGNpZV9kZWJ1Z19sYXRfc2VsX2xvX3RvcDsJLyogMHgwMDAyMDggKi8KKwl1NjQJY2VfYWRtX3BjaWVfZGVidWdfbGF0X3NlbF9oaV90b3A7CS8qIDB4MDAwMjEwICovCisJdTY0CWNlX2FkbV9wY2llX2RlYnVnX3RyaWdfc2VsX3RvcDsJCS8qIDB4MDAwMjE4ICovCisJdTY0CWNlX2FkbV9wY2llX2RlYnVnX3RyaWdfbGF0X3NlbF9sb190b3A7CS8qIDB4MDAwMjIwICovCisJdTY0CWNlX2FkbV9wY2llX2RlYnVnX3RyaWdfbGF0X3NlbF9oaV90b3A7CS8qIDB4MDAwMjI4ICovCisJdTY0CWNlX2FkbV9wY2llX3RyaWdfY29tcGFyZV90b3A7CQkvKiAweDAwMDIzMCAqLworCXU2NAljZV9hZG1fcGNpZV90cmlnX2NvbXBhcmVfZW5fdG9wOwkvKiAweDAwMDIzOCAqLworCXU2NAljZV9hZG1fc3NwX2RlYnVnX3NlbF90b3A7CQkvKiAweDAwMDI0MCAqLworCXU2NAljZV9hZG1fc3NwX2RlYnVnX2xhdF9zZWxfbG9fdG9wOwkvKiAweDAwMDI0OCAqLworCXU2NAljZV9hZG1fc3NwX2RlYnVnX2xhdF9zZWxfaGlfdG9wOwkvKiAweDAwMDI1MCAqLworCXU2NAljZV9hZG1fc3NwX2RlYnVnX3RyaWdfc2VsX3RvcDsJCS8qIDB4MDAwMjU4ICovCisJdTY0CWNlX2FkbV9zc3BfZGVidWdfdHJpZ19sYXRfc2VsX2xvX3RvcDsJLyogMHgwMDAyNjAgKi8KKwl1NjQJY2VfYWRtX3NzcF9kZWJ1Z190cmlnX2xhdF9zZWxfaGlfdG9wOwkvKiAweDAwMDI2OCAqLworCXU2NAljZV9hZG1fc3NwX3RyaWdfY29tcGFyZV90b3A7CQkvKiAweDAwMDI3MCAqLworCXU2NAljZV9hZG1fc3NwX3RyaWdfY29tcGFyZV9lbl90b3A7CQkvKiAweDAwMDI3OCAqLworCXU2NAljZV9wYWRfMDAwMjgwWzQ4XTsJICAgIC8qIDB4MDAwMjgwIC0tIDB4MDAwM0Y4ICovCiAKLQl1aW50NjRfdAljZV9hZG1fYmFwX2N0cmw7CQkJLyogMHgwMDA0MDAgKi8KLQl1aW50NjRfdAljZV9wYWRfMDAwNDA4WzEyN107CSAgICAvKiAweDAwMDQwOCAtLSAweDAwMDdGOCAqLworCXU2NAljZV9hZG1fYmFwX2N0cmw7CQkJLyogMHgwMDA0MDAgKi8KKwl1NjQJY2VfcGFkXzAwMDQwOFsxMjddOwkgICAgLyogMHgwMDA0MDggLS0gMHgwMDA3RjggKi8KIAotCXVpbnQ2NF90CWNlX21zZ19idWZfZGF0YTYzXzBbMzVdOyAgICAvKiAweDAwMDgwMCAtLSAweDAwMDkxOCAqLwotCXVpbnQ2NF90CWNlX3BhZF8wMDA5MjBbMjldOwkgICAgLyogMHgwMDA5MjAgLS0gMHgwMDA5RjggKi8KKwl1NjQJY2VfbXNnX2J1Zl9kYXRhNjNfMFszNV07ICAgIC8qIDB4MDAwODAwIC0tIDB4MDAwOTE4ICovCisJdTY0CWNlX3BhZF8wMDA5MjBbMjldOwkgICAgLyogMHgwMDA5MjAgLS0gMHgwMDA5RjggKi8KIAotCXVpbnQ2NF90CWNlX21zZ19idWZfZGF0YTEyN182NFszNV07ICAvKiAweDAwMEEwMCAtLSAweDAwMEIxOCAqLwotCXVpbnQ2NF90CWNlX3BhZF8wMDBCMjBbMjldOwkgICAgLyogMHgwMDBCMjAgLS0gMHgwMDBCRjggKi8KKwl1NjQJY2VfbXNnX2J1Zl9kYXRhMTI3XzY0WzM1XTsgIC8qIDB4MDAwQTAwIC0tIDB4MDAwQjE4ICovCisJdTY0CWNlX3BhZF8wMDBCMjBbMjldOwkgICAgLyogMHgwMDBCMjAgLS0gMHgwMDBCRjggKi8KIAotCXVpbnQ2NF90CWNlX21zZ19idWZfcGFyaXR5WzM1XTsJICAgIC8qIDB4MDAwQzAwIC0tIDB4MDAwRDE4ICovCi0JdWludDY0X3QJY2VfcGFkXzAwMEQyMFsyOV07CSAgICAvKiAweDAwMEQyMCAtLSAweDAwMERGOCAqLworCXU2NAljZV9tc2dfYnVmX3Bhcml0eVszNV07CSAgICAvKiAweDAwMEMwMCAtLSAweDAwMEQxOCAqLworCXU2NAljZV9wYWRfMDAwRDIwWzI5XTsJICAgIC8qIDB4MDAwRDIwIC0tIDB4MDAwREY4ICovCiAKLQl1aW50NjRfdAljZV9wYWRfMDAwRTAwWzU3Nl07CSAgICAvKiAweDAwMEUwMCAtLSAweDAwMUZGOCAqLworCXU2NAljZV9wYWRfMDAwRTAwWzU3Nl07CSAgICAvKiAweDAwMEUwMCAtLSAweDAwMUZGOCAqLwogCiAJLyoKIAkgKiBMU0kgOiBMU0kncyBQQ0kgRXhwcmVzcyBMaW5rIFJlZ2lzdGVycyAoTGluayMxIGFuZCBMaW5rIzIpCkBAIC0xMDksMTQxICsxMDksMTQxIEBACiAJICovCiAJI2RlZmluZSBjZV9sc2kobGlua19udW0pCWNlX2xzaVtsaW5rX251bS0xXQogCXN0cnVjdCBjZV9sc2lfcmVnIHsKLQkJdWludDY0X3QJY2VfbHNpX2xwdV9pZDsJCQkvKiAweDAwejAwMCAqLwotCQl1aW50NjRfdAljZV9sc2lfcnN0OwkJCS8qIDB4MDB6MDA4ICovCi0JCXVpbnQ2NF90CWNlX2xzaV9kYmdfc3RhdDsJCS8qIDB4MDB6MDEwICovCi0JCXVpbnQ2NF90CWNlX2xzaV9kYmdfY2ZnOwkJCS8qIDB4MDB6MDE4ICovCi0JCXVpbnQ2NF90CWNlX2xzaV9sdHNzbV9jdHJsOwkJLyogMHgwMHowMjAgKi8KLQkJdWludDY0X3QJY2VfbHNpX2xrX3N0YXQ7CQkJLyogMHgwMHowMjggKi8KLQkJdWludDY0X3QJY2VfcGFkXzAwejAzMFsyXTsgICAvKiAweDAwejAzMCAtLSAweDAwejAzOCAqLwotCQl1aW50NjRfdAljZV9sc2lfaW50X2FuZF9zdGF0OwkJLyogMHgwMHowNDAgKi8KLQkJdWludDY0X3QJY2VfbHNpX2ludF9tYXNrOwkJLyogMHgwMHowNDggKi8KLQkJdWludDY0X3QJY2VfcGFkXzAwejA1MFsyMl07ICAvKiAweDAwejA1MCAtLSAweDAwejBGOCAqLwotCQl1aW50NjRfdAljZV9sc2lfbGtfcGVyZl9jbnRfc2VsOwkJLyogMHgwMHoxMDAgKi8KLQkJdWludDY0X3QJY2VfcGFkXzAwejEwODsJCQkvKiAweDAwejEwOCAqLwotCQl1aW50NjRfdAljZV9sc2lfbGtfcGVyZl9jbnRfY3RybDsJLyogMHgwMHoxMTAgKi8KLQkJdWludDY0X3QJY2VfcGFkXzAwejExODsJCQkvKiAweDAwejExOCAqLwotCQl1aW50NjRfdAljZV9sc2lfbGtfcGVyZl9jbnQxOwkJLyogMHgwMHoxMjAgKi8KLQkJdWludDY0X3QJY2VfbHNpX2xrX3BlcmZfY250MV90ZXN0OwkvKiAweDAwejEyOCAqLwotCQl1aW50NjRfdAljZV9sc2lfbGtfcGVyZl9jbnQyOwkJLyogMHgwMHoxMzAgKi8KLQkJdWludDY0X3QJY2VfbHNpX2xrX3BlcmZfY250Ml90ZXN0OwkvKiAweDAwejEzOCAqLwotCQl1aW50NjRfdAljZV9wYWRfMDB6MTQwWzI0XTsgIC8qIDB4MDB6MTQwIC0tIDB4MDB6MUY4ICovCi0JCXVpbnQ2NF90CWNlX2xzaV9sa19seXJfY2ZnOwkJLyogMHgwMHoyMDAgKi8KLQkJdWludDY0X3QJY2VfbHNpX2xrX2x5cl9zdGF0dXM7CQkvKiAweDAwejIwOCAqLwotCQl1aW50NjRfdAljZV9sc2lfbGtfbHlyX2ludF9zdGF0OwkJLyogMHgwMHoyMTAgKi8KLQkJdWludDY0X3QJY2VfbHNpX2xrX2x5X2ludF9zdGF0X3Rlc3Q7CS8qIDB4MDB6MjE4ICovCi0JCXVpbnQ2NF90CWNlX2xzaV9sa19seV9pbnRfc3RhdF9tYXNrOwkvKiAweDAwejIyMCAqLwotCQl1aW50NjRfdAljZV9wYWRfMDB6MjI4WzNdOyAgIC8qIDB4MDB6MjI4IC0tIDB4MDB6MjM4ICovCi0JCXVpbnQ2NF90CWNlX2xzaV9mY191cGRfY3RsOwkJLyogMHgwMHoyNDAgKi8KLQkJdWludDY0X3QJY2VfcGFkXzAwejI0OFszXTsgICAvKiAweDAwejI0OCAtLSAweDAwejI1OCAqLwotCQl1aW50NjRfdAljZV9sc2lfZmx3X2N0bF91cGRfdG9fdGltZXI7CS8qIDB4MDB6MjYwICovCi0JCXVpbnQ2NF90CWNlX2xzaV9mbHdfY3RsX3VwZF90aW1lcjA7CS8qIDB4MDB6MjY4ICovCi0JCXVpbnQ2NF90CWNlX2xzaV9mbHdfY3RsX3VwZF90aW1lcjE7CS8qIDB4MDB6MjcwICovCi0JCXVpbnQ2NF90CWNlX3BhZF8wMHoyNzhbNDldOyAgLyogMHgwMHoyNzggLS0gMHgwMHozRjggKi8KLQkJdWludDY0X3QJY2VfbHNpX2ZyZXFfbmFrX2xhdF90aHJzaDsJLyogMHgwMHo0MDAgKi8KLQkJdWludDY0X3QJY2VfbHNpX2Fja19uYWtfbGF0X3RtcjsJCS8qIDB4MDB6NDA4ICovCi0JCXVpbnQ2NF90CWNlX2xzaV9ycGx5X3Rtcl90aHI7CQkvKiAweDAwejQxMCAqLwotCQl1aW50NjRfdAljZV9sc2lfcnBseV90bXI7CQkvKiAweDAwejQxOCAqLwotCQl1aW50NjRfdAljZV9sc2lfcnBseV9udW1fc3RhdDsJCS8qIDB4MDB6NDIwICovCi0JCXVpbnQ2NF90CWNlX2xzaV9ydHlfYnVmX21heF9hZGRyOwkvKiAweDAwejQyOCAqLwotCQl1aW50NjRfdAljZV9sc2lfcnR5X2ZpZm9fcHRyOwkJLyogMHgwMHo0MzAgKi8KLQkJdWludDY0X3QJY2VfbHNpX3J0eV9maWZvX3JkX3dyX3B0cjsJLyogMHgwMHo0MzggKi8KLQkJdWludDY0X3QJY2VfbHNpX3J0eV9maWZvX2NyZWQ7CQkvKiAweDAwejQ0MCAqLwotCQl1aW50NjRfdAljZV9sc2lfc2VxX2NudDsJCQkvKiAweDAwejQ0OCAqLwotCQl1aW50NjRfdAljZV9sc2lfYWNrX3NlbnRfc2VxX251bTsJLyogMHgwMHo0NTAgKi8KLQkJdWludDY0X3QJY2VfbHNpX3NlcV9jbnRfZmlmb19tYXhfYWRkcjsJLyogMHgwMHo0NTggKi8KLQkJdWludDY0X3QJY2VfbHNpX3NlcV9jbnRfZmlmb19wdHI7CS8qIDB4MDB6NDYwICovCi0JCXVpbnQ2NF90CWNlX2xzaV9zZXFfY250X3JkX3dyX3B0cjsJLyogMHgwMHo0NjggKi8KLQkJdWludDY0X3QJY2VfbHNpX3R4X2xrX3RzX2N0bDsJCS8qIDB4MDB6NDcwICovCi0JCXVpbnQ2NF90CWNlX3BhZF8wMHo0Nzg7CQkJLyogMHgwMHo0NzggKi8KLQkJdWludDY0X3QJY2VfbHNpX21lbV9hZGRyX2N0bDsJCS8qIDB4MDB6NDgwICovCi0JCXVpbnQ2NF90CWNlX2xzaV9tZW1fZF9sZDA7CQkvKiAweDAwejQ4OCAqLwotCQl1aW50NjRfdAljZV9sc2lfbWVtX2RfbGQxOwkJLyogMHgwMHo0OTAgKi8KLQkJdWludDY0X3QJY2VfbHNpX21lbV9kX2xkMjsJCS8qIDB4MDB6NDk4ICovCi0JCXVpbnQ2NF90CWNlX2xzaV9tZW1fZF9sZDM7CQkvKiAweDAwejRBMCAqLwotCQl1aW50NjRfdAljZV9sc2lfbWVtX2RfbGQ0OwkJLyogMHgwMHo0QTggKi8KLQkJdWludDY0X3QJY2VfcGFkXzAwejRCMFsyXTsgICAvKiAweDAwejRCMCAtLSAweDAwejRCOCAqLwotCQl1aW50NjRfdAljZV9sc2lfcnR5X2RfY250OwkJLyogMHgwMHo0QzAgKi8KLQkJdWludDY0X3QJY2VfbHNpX3NlcV9idWZfY250OwkJLyogMHgwMHo0QzggKi8KLQkJdWludDY0X3QJY2VfbHNpX3NlcV9idWZfYnRfZDsJCS8qIDB4MDB6NEQwICovCi0JCXVpbnQ2NF90CWNlX3BhZF8wMHo0RDg7CQkJLyogMHgwMHo0RDggKi8KLQkJdWludDY0X3QJY2VfbHNpX2Fja19sYXRfdGhyOwkJLyogMHgwMHo0RTAgKi8KLQkJdWludDY0X3QJY2VfcGFkXzAwejRFOFszXTsgICAvKiAweDAwejRFOCAtLSAweDAwejRGOCAqLwotCQl1aW50NjRfdAljZV9sc2lfbnh0X3Jjdl9zZXFfMV9jbnRyOwkvKiAweDAwejUwMCAqLwotCQl1aW50NjRfdAljZV9sc2lfdW5zcF9kbGxwX3JjdmQ7CQkvKiAweDAwejUwOCAqLwotCQl1aW50NjRfdAljZV9sc2lfcmN2X2xrX3RzX2N0bDsJCS8qIDB4MDB6NTEwICovCi0JCXVpbnQ2NF90CWNlX3BhZF8wMHo1MThbMjldOyAgLyogMHgwMHo1MTggLS0gMHgwMHo1RjggKi8KLQkJdWludDY0X3QJY2VfbHNpX3BoeV9seXJfY2ZnOwkJLyogMHgwMHo2MDAgKi8KLQkJdWludDY0X3QJY2VfcGFkXzAwejYwODsJCQkvKiAweDAwejYwOCAqLwotCQl1aW50NjRfdAljZV9sc2lfcGh5X2x5cl9pbnRfc3RhdDsJLyogMHgwMHo2MTAgKi8KLQkJdWludDY0X3QJY2VfbHNpX3BoeV9seXJfaW50X3N0YXRfdGVzdDsJLyogMHgwMHo2MTggKi8KLQkJdWludDY0X3QJY2VfbHNpX3BoeV9seXJfaW50X21hc2s7CS8qIDB4MDB6NjIwICovCi0JCXVpbnQ2NF90CWNlX3BhZF8wMHo2MjhbMTFdOyAgLyogMHgwMHo2MjggLS0gMHgwMHo2NzggKi8KLQkJdWludDY0X3QJY2VfbHNpX3Jjdl9waHlfY2ZnOwkJLyogMHgwMHo2ODAgKi8KLQkJdWludDY0X3QJY2VfbHNpX3Jjdl9waHlfc3RhdDE7CQkvKiAweDAwejY4OCAqLwotCQl1aW50NjRfdAljZV9sc2lfcmN2X3BoeV9zdGF0MjsJCS8qIDB4MDB6NjkwICovCi0JCXVpbnQ2NF90CWNlX2xzaV9yY3ZfcGh5X3N0YXQzOwkJLyogMHgwMHo2OTggKi8KLQkJdWludDY0X3QJY2VfbHNpX3Jjdl9waHlfaW50X3N0YXQ7CS8qIDB4MDB6NkEwICovCi0JCXVpbnQ2NF90CWNlX2xzaV9yY3ZfcGh5X2ludF9zdGF0X3Rlc3Q7CS8qIDB4MDB6NkE4ICovCi0JCXVpbnQ2NF90CWNlX2xzaV9yY3ZfcGh5X2ludF9tYXNrOwkvKiAweDAwejZCMCAqLwotCQl1aW50NjRfdAljZV9wYWRfMDB6NkI4WzldOyAgIC8qIDB4MDB6NkI4IC0tIDB4MDB6NkY4ICovCi0JCXVpbnQ2NF90CWNlX2xzaV90eF9waHlfY2ZnOwkJLyogMHgwMHo3MDAgKi8KLQkJdWludDY0X3QJY2VfbHNpX3R4X3BoeV9zdGF0OwkJLyogMHgwMHo3MDggKi8KLQkJdWludDY0X3QJY2VfbHNpX3R4X3BoeV9pbnRfc3RhdDsJCS8qIDB4MDB6NzEwICovCi0JCXVpbnQ2NF90CWNlX2xzaV90eF9waHlfaW50X3N0YXRfdGVzdDsJLyogMHgwMHo3MTggKi8KLQkJdWludDY0X3QJY2VfbHNpX3R4X3BoeV9pbnRfbWFzazsJCS8qIDB4MDB6NzIwICovCi0JCXVpbnQ2NF90CWNlX2xzaV90eF9waHlfc3RhdDI7CQkvKiAweDAwejcyOCAqLwotCQl1aW50NjRfdAljZV9wYWRfMDB6NzMwWzEwXTsgIC8qIDB4MDB6NzMwIC0tIDB4MDB6NzdGICovCi0JCXVpbnQ2NF90CWNlX2xzaV9sdHNzbV9jZmcxOwkJLyogMHgwMHo3ODAgKi8KLQkJdWludDY0X3QJY2VfbHNpX2x0c3NtX2NmZzI7CQkvKiAweDAwejc4OCAqLwotCQl1aW50NjRfdAljZV9sc2lfbHRzc21fY2ZnMzsJCS8qIDB4MDB6NzkwICovCi0JCXVpbnQ2NF90CWNlX2xzaV9sdHNzbV9jZmc0OwkJLyogMHgwMHo3OTggKi8KLQkJdWludDY0X3QJY2VfbHNpX2x0c3NtX2NmZzU7CQkvKiAweDAwejdBMCAqLwotCQl1aW50NjRfdAljZV9sc2lfbHRzc21fc3RhdDE7CQkvKiAweDAwejdBOCAqLwotCQl1aW50NjRfdAljZV9sc2lfbHRzc21fc3RhdDI7CQkvKiAweDAwejdCMCAqLwotCQl1aW50NjRfdAljZV9sc2lfbHRzc21faW50X3N0YXQ7CQkvKiAweDAwejdCOCAqLwotCQl1aW50NjRfdAljZV9sc2lfbHRzc21faW50X3N0YXRfdGVzdDsJLyogMHgwMHo3QzAgKi8KLQkJdWludDY0X3QJY2VfbHNpX2x0c3NtX2ludF9tYXNrOwkJLyogMHgwMHo3QzggKi8KLQkJdWludDY0X3QJY2VfbHNpX2x0c3NtX3N0YXRfd3JfZW47CS8qIDB4MDB6N0QwICovCi0JCXVpbnQ2NF90CWNlX3BhZF8wMHo3RDhbNV07ICAgLyogMHgwMHo3RDggLS0gMHgwMHo3RjggKi8KLQkJdWludDY0X3QJY2VfbHNpX2diX2NmZzE7CQkJLyogMHgwMHo4MDAgKi8KLQkJdWludDY0X3QJY2VfbHNpX2diX2NmZzI7CQkJLyogMHgwMHo4MDggKi8KLQkJdWludDY0X3QJY2VfbHNpX2diX2NmZzM7CQkJLyogMHgwMHo4MTAgKi8KLQkJdWludDY0X3QJY2VfbHNpX2diX2NmZzQ7CQkJLyogMHgwMHo4MTggKi8KLQkJdWludDY0X3QJY2VfbHNpX2diX3N0YXQ7CQkJLyogMHgwMHo4MjAgKi8KLQkJdWludDY0X3QJY2VfbHNpX2diX2ludF9zdGF0OwkJLyogMHgwMHo4MjggKi8KLQkJdWludDY0X3QJY2VfbHNpX2diX2ludF9zdGF0X3Rlc3Q7CS8qIDB4MDB6ODMwICovCi0JCXVpbnQ2NF90CWNlX2xzaV9nYl9pbnRfbWFzazsJCS8qIDB4MDB6ODM4ICovCi0JCXVpbnQ2NF90CWNlX2xzaV9nYl9wd3JfZG4xOwkJLyogMHgwMHo4NDAgKi8KLQkJdWludDY0X3QJY2VfbHNpX2diX3B3cl9kbjI7CQkvKiAweDAwejg0OCAqLwotCQl1aW50NjRfdAljZV9wYWRfMDB6ODUwWzI0Nl07IC8qIDB4MDB6ODUwIC0tIDB4MDB6RkY4ICovCisJCXU2NAljZV9sc2lfbHB1X2lkOwkJCS8qIDB4MDB6MDAwICovCisJCXU2NAljZV9sc2lfcnN0OwkJCS8qIDB4MDB6MDA4ICovCisJCXU2NAljZV9sc2lfZGJnX3N0YXQ7CQkvKiAweDAwejAxMCAqLworCQl1NjQJY2VfbHNpX2RiZ19jZmc7CQkJLyogMHgwMHowMTggKi8KKwkJdTY0CWNlX2xzaV9sdHNzbV9jdHJsOwkJLyogMHgwMHowMjAgKi8KKwkJdTY0CWNlX2xzaV9sa19zdGF0OwkJCS8qIDB4MDB6MDI4ICovCisJCXU2NAljZV9wYWRfMDB6MDMwWzJdOyAgIC8qIDB4MDB6MDMwIC0tIDB4MDB6MDM4ICovCisJCXU2NAljZV9sc2lfaW50X2FuZF9zdGF0OwkJLyogMHgwMHowNDAgKi8KKwkJdTY0CWNlX2xzaV9pbnRfbWFzazsJCS8qIDB4MDB6MDQ4ICovCisJCXU2NAljZV9wYWRfMDB6MDUwWzIyXTsgIC8qIDB4MDB6MDUwIC0tIDB4MDB6MEY4ICovCisJCXU2NAljZV9sc2lfbGtfcGVyZl9jbnRfc2VsOwkJLyogMHgwMHoxMDAgKi8KKwkJdTY0CWNlX3BhZF8wMHoxMDg7CQkJLyogMHgwMHoxMDggKi8KKwkJdTY0CWNlX2xzaV9sa19wZXJmX2NudF9jdHJsOwkvKiAweDAwejExMCAqLworCQl1NjQJY2VfcGFkXzAwejExODsJCQkvKiAweDAwejExOCAqLworCQl1NjQJY2VfbHNpX2xrX3BlcmZfY250MTsJCS8qIDB4MDB6MTIwICovCisJCXU2NAljZV9sc2lfbGtfcGVyZl9jbnQxX3Rlc3Q7CS8qIDB4MDB6MTI4ICovCisJCXU2NAljZV9sc2lfbGtfcGVyZl9jbnQyOwkJLyogMHgwMHoxMzAgKi8KKwkJdTY0CWNlX2xzaV9sa19wZXJmX2NudDJfdGVzdDsJLyogMHgwMHoxMzggKi8KKwkJdTY0CWNlX3BhZF8wMHoxNDBbMjRdOyAgLyogMHgwMHoxNDAgLS0gMHgwMHoxRjggKi8KKwkJdTY0CWNlX2xzaV9sa19seXJfY2ZnOwkJLyogMHgwMHoyMDAgKi8KKwkJdTY0CWNlX2xzaV9sa19seXJfc3RhdHVzOwkJLyogMHgwMHoyMDggKi8KKwkJdTY0CWNlX2xzaV9sa19seXJfaW50X3N0YXQ7CQkvKiAweDAwejIxMCAqLworCQl1NjQJY2VfbHNpX2xrX2x5X2ludF9zdGF0X3Rlc3Q7CS8qIDB4MDB6MjE4ICovCisJCXU2NAljZV9sc2lfbGtfbHlfaW50X3N0YXRfbWFzazsJLyogMHgwMHoyMjAgKi8KKwkJdTY0CWNlX3BhZF8wMHoyMjhbM107ICAgLyogMHgwMHoyMjggLS0gMHgwMHoyMzggKi8KKwkJdTY0CWNlX2xzaV9mY191cGRfY3RsOwkJLyogMHgwMHoyNDAgKi8KKwkJdTY0CWNlX3BhZF8wMHoyNDhbM107ICAgLyogMHgwMHoyNDggLS0gMHgwMHoyNTggKi8KKwkJdTY0CWNlX2xzaV9mbHdfY3RsX3VwZF90b190aW1lcjsJLyogMHgwMHoyNjAgKi8KKwkJdTY0CWNlX2xzaV9mbHdfY3RsX3VwZF90aW1lcjA7CS8qIDB4MDB6MjY4ICovCisJCXU2NAljZV9sc2lfZmx3X2N0bF91cGRfdGltZXIxOwkvKiAweDAwejI3MCAqLworCQl1NjQJY2VfcGFkXzAwejI3OFs0OV07ICAvKiAweDAwejI3OCAtLSAweDAwejNGOCAqLworCQl1NjQJY2VfbHNpX2ZyZXFfbmFrX2xhdF90aHJzaDsJLyogMHgwMHo0MDAgKi8KKwkJdTY0CWNlX2xzaV9hY2tfbmFrX2xhdF90bXI7CQkvKiAweDAwejQwOCAqLworCQl1NjQJY2VfbHNpX3JwbHlfdG1yX3RocjsJCS8qIDB4MDB6NDEwICovCisJCXU2NAljZV9sc2lfcnBseV90bXI7CQkvKiAweDAwejQxOCAqLworCQl1NjQJY2VfbHNpX3JwbHlfbnVtX3N0YXQ7CQkvKiAweDAwejQyMCAqLworCQl1NjQJY2VfbHNpX3J0eV9idWZfbWF4X2FkZHI7CS8qIDB4MDB6NDI4ICovCisJCXU2NAljZV9sc2lfcnR5X2ZpZm9fcHRyOwkJLyogMHgwMHo0MzAgKi8KKwkJdTY0CWNlX2xzaV9ydHlfZmlmb19yZF93cl9wdHI7CS8qIDB4MDB6NDM4ICovCisJCXU2NAljZV9sc2lfcnR5X2ZpZm9fY3JlZDsJCS8qIDB4MDB6NDQwICovCisJCXU2NAljZV9sc2lfc2VxX2NudDsJCQkvKiAweDAwejQ0OCAqLworCQl1NjQJY2VfbHNpX2Fja19zZW50X3NlcV9udW07CS8qIDB4MDB6NDUwICovCisJCXU2NAljZV9sc2lfc2VxX2NudF9maWZvX21heF9hZGRyOwkvKiAweDAwejQ1OCAqLworCQl1NjQJY2VfbHNpX3NlcV9jbnRfZmlmb19wdHI7CS8qIDB4MDB6NDYwICovCisJCXU2NAljZV9sc2lfc2VxX2NudF9yZF93cl9wdHI7CS8qIDB4MDB6NDY4ICovCisJCXU2NAljZV9sc2lfdHhfbGtfdHNfY3RsOwkJLyogMHgwMHo0NzAgKi8KKwkJdTY0CWNlX3BhZF8wMHo0Nzg7CQkJLyogMHgwMHo0NzggKi8KKwkJdTY0CWNlX2xzaV9tZW1fYWRkcl9jdGw7CQkvKiAweDAwejQ4MCAqLworCQl1NjQJY2VfbHNpX21lbV9kX2xkMDsJCS8qIDB4MDB6NDg4ICovCisJCXU2NAljZV9sc2lfbWVtX2RfbGQxOwkJLyogMHgwMHo0OTAgKi8KKwkJdTY0CWNlX2xzaV9tZW1fZF9sZDI7CQkvKiAweDAwejQ5OCAqLworCQl1NjQJY2VfbHNpX21lbV9kX2xkMzsJCS8qIDB4MDB6NEEwICovCisJCXU2NAljZV9sc2lfbWVtX2RfbGQ0OwkJLyogMHgwMHo0QTggKi8KKwkJdTY0CWNlX3BhZF8wMHo0QjBbMl07ICAgLyogMHgwMHo0QjAgLS0gMHgwMHo0QjggKi8KKwkJdTY0CWNlX2xzaV9ydHlfZF9jbnQ7CQkvKiAweDAwejRDMCAqLworCQl1NjQJY2VfbHNpX3NlcV9idWZfY250OwkJLyogMHgwMHo0QzggKi8KKwkJdTY0CWNlX2xzaV9zZXFfYnVmX2J0X2Q7CQkvKiAweDAwejREMCAqLworCQl1NjQJY2VfcGFkXzAwejREODsJCQkvKiAweDAwejREOCAqLworCQl1NjQJY2VfbHNpX2Fja19sYXRfdGhyOwkJLyogMHgwMHo0RTAgKi8KKwkJdTY0CWNlX3BhZF8wMHo0RThbM107ICAgLyogMHgwMHo0RTggLS0gMHgwMHo0RjggKi8KKwkJdTY0CWNlX2xzaV9ueHRfcmN2X3NlcV8xX2NudHI7CS8qIDB4MDB6NTAwICovCisJCXU2NAljZV9sc2lfdW5zcF9kbGxwX3JjdmQ7CQkvKiAweDAwejUwOCAqLworCQl1NjQJY2VfbHNpX3Jjdl9sa190c19jdGw7CQkvKiAweDAwejUxMCAqLworCQl1NjQJY2VfcGFkXzAwejUxOFsyOV07ICAvKiAweDAwejUxOCAtLSAweDAwejVGOCAqLworCQl1NjQJY2VfbHNpX3BoeV9seXJfY2ZnOwkJLyogMHgwMHo2MDAgKi8KKwkJdTY0CWNlX3BhZF8wMHo2MDg7CQkJLyogMHgwMHo2MDggKi8KKwkJdTY0CWNlX2xzaV9waHlfbHlyX2ludF9zdGF0OwkvKiAweDAwejYxMCAqLworCQl1NjQJY2VfbHNpX3BoeV9seXJfaW50X3N0YXRfdGVzdDsJLyogMHgwMHo2MTggKi8KKwkJdTY0CWNlX2xzaV9waHlfbHlyX2ludF9tYXNrOwkvKiAweDAwejYyMCAqLworCQl1NjQJY2VfcGFkXzAwejYyOFsxMV07ICAvKiAweDAwejYyOCAtLSAweDAwejY3OCAqLworCQl1NjQJY2VfbHNpX3Jjdl9waHlfY2ZnOwkJLyogMHgwMHo2ODAgKi8KKwkJdTY0CWNlX2xzaV9yY3ZfcGh5X3N0YXQxOwkJLyogMHgwMHo2ODggKi8KKwkJdTY0CWNlX2xzaV9yY3ZfcGh5X3N0YXQyOwkJLyogMHgwMHo2OTAgKi8KKwkJdTY0CWNlX2xzaV9yY3ZfcGh5X3N0YXQzOwkJLyogMHgwMHo2OTggKi8KKwkJdTY0CWNlX2xzaV9yY3ZfcGh5X2ludF9zdGF0OwkvKiAweDAwejZBMCAqLworCQl1NjQJY2VfbHNpX3Jjdl9waHlfaW50X3N0YXRfdGVzdDsJLyogMHgwMHo2QTggKi8KKwkJdTY0CWNlX2xzaV9yY3ZfcGh5X2ludF9tYXNrOwkvKiAweDAwejZCMCAqLworCQl1NjQJY2VfcGFkXzAwejZCOFs5XTsgICAvKiAweDAwejZCOCAtLSAweDAwejZGOCAqLworCQl1NjQJY2VfbHNpX3R4X3BoeV9jZmc7CQkvKiAweDAwejcwMCAqLworCQl1NjQJY2VfbHNpX3R4X3BoeV9zdGF0OwkJLyogMHgwMHo3MDggKi8KKwkJdTY0CWNlX2xzaV90eF9waHlfaW50X3N0YXQ7CQkvKiAweDAwejcxMCAqLworCQl1NjQJY2VfbHNpX3R4X3BoeV9pbnRfc3RhdF90ZXN0OwkvKiAweDAwejcxOCAqLworCQl1NjQJY2VfbHNpX3R4X3BoeV9pbnRfbWFzazsJCS8qIDB4MDB6NzIwICovCisJCXU2NAljZV9sc2lfdHhfcGh5X3N0YXQyOwkJLyogMHgwMHo3MjggKi8KKwkJdTY0CWNlX3BhZF8wMHo3MzBbMTBdOyAgLyogMHgwMHo3MzAgLS0gMHgwMHo3N0YgKi8KKwkJdTY0CWNlX2xzaV9sdHNzbV9jZmcxOwkJLyogMHgwMHo3ODAgKi8KKwkJdTY0CWNlX2xzaV9sdHNzbV9jZmcyOwkJLyogMHgwMHo3ODggKi8KKwkJdTY0CWNlX2xzaV9sdHNzbV9jZmczOwkJLyogMHgwMHo3OTAgKi8KKwkJdTY0CWNlX2xzaV9sdHNzbV9jZmc0OwkJLyogMHgwMHo3OTggKi8KKwkJdTY0CWNlX2xzaV9sdHNzbV9jZmc1OwkJLyogMHgwMHo3QTAgKi8KKwkJdTY0CWNlX2xzaV9sdHNzbV9zdGF0MTsJCS8qIDB4MDB6N0E4ICovCisJCXU2NAljZV9sc2lfbHRzc21fc3RhdDI7CQkvKiAweDAwejdCMCAqLworCQl1NjQJY2VfbHNpX2x0c3NtX2ludF9zdGF0OwkJLyogMHgwMHo3QjggKi8KKwkJdTY0CWNlX2xzaV9sdHNzbV9pbnRfc3RhdF90ZXN0OwkvKiAweDAwejdDMCAqLworCQl1NjQJY2VfbHNpX2x0c3NtX2ludF9tYXNrOwkJLyogMHgwMHo3QzggKi8KKwkJdTY0CWNlX2xzaV9sdHNzbV9zdGF0X3dyX2VuOwkvKiAweDAwejdEMCAqLworCQl1NjQJY2VfcGFkXzAwejdEOFs1XTsgICAvKiAweDAwejdEOCAtLSAweDAwejdGOCAqLworCQl1NjQJY2VfbHNpX2diX2NmZzE7CQkJLyogMHgwMHo4MDAgKi8KKwkJdTY0CWNlX2xzaV9nYl9jZmcyOwkJCS8qIDB4MDB6ODA4ICovCisJCXU2NAljZV9sc2lfZ2JfY2ZnMzsJCQkvKiAweDAwejgxMCAqLworCQl1NjQJY2VfbHNpX2diX2NmZzQ7CQkJLyogMHgwMHo4MTggKi8KKwkJdTY0CWNlX2xzaV9nYl9zdGF0OwkJCS8qIDB4MDB6ODIwICovCisJCXU2NAljZV9sc2lfZ2JfaW50X3N0YXQ7CQkvKiAweDAwejgyOCAqLworCQl1NjQJY2VfbHNpX2diX2ludF9zdGF0X3Rlc3Q7CS8qIDB4MDB6ODMwICovCisJCXU2NAljZV9sc2lfZ2JfaW50X21hc2s7CQkvKiAweDAwejgzOCAqLworCQl1NjQJY2VfbHNpX2diX3B3cl9kbjE7CQkvKiAweDAwejg0MCAqLworCQl1NjQJY2VfbHNpX2diX3B3cl9kbjI7CQkvKiAweDAwejg0OCAqLworCQl1NjQJY2VfcGFkXzAwejg1MFsyNDZdOyAvKiAweDAwejg1MCAtLSAweDAwekZGOCAqLwogCX0gY2VfbHNpWzJdOwogCi0JdWludDY0X3QJY2VfcGFkXzAwNDAwMFsxMF07CSAgICAvKiAweDAwNDAwMCAtLSAweDAwNDA0OCAqLworCXU2NAljZV9wYWRfMDA0MDAwWzEwXTsJICAgIC8qIDB4MDA0MDAwIC0tIDB4MDA0MDQ4ICovCiAKIAkvKgogCSAqIENSTTogQ29yZXRhbGsgUmVjZWl2ZSBNb2R1bGUgUmVnaXN0ZXJzCiAJICovCi0JdWludDY0X3QJY2VfY3JtX2RlYnVnX211eDsJCQkvKiAweDAwNDA1MCAqLwotCXVpbnQ2NF90CWNlX3BhZF8wMDQwNTg7CQkJCS8qIDB4MDA0MDU4ICovCi0JdWludDY0X3QJY2VfY3JtX3NzcF9lcnJfY21kX3dyZDsJCQkvKiAweDAwNDA2MCAqLwotCXVpbnQ2NF90CWNlX2NybV9zc3BfZXJyX2FkZHI7CQkJLyogMHgwMDQwNjggKi8KLQl1aW50NjRfdAljZV9jcm1fc3NwX2Vycl9zeW47CQkJLyogMHgwMDQwNzAgKi8KKwl1NjQJY2VfY3JtX2RlYnVnX211eDsJCQkvKiAweDAwNDA1MCAqLworCXU2NAljZV9wYWRfMDA0MDU4OwkJCQkvKiAweDAwNDA1OCAqLworCXU2NAljZV9jcm1fc3NwX2Vycl9jbWRfd3JkOwkJCS8qIDB4MDA0MDYwICovCisJdTY0CWNlX2NybV9zc3BfZXJyX2FkZHI7CQkJLyogMHgwMDQwNjggKi8KKwl1NjQJY2VfY3JtX3NzcF9lcnJfc3luOwkJCS8qIDB4MDA0MDcwICovCiAKLQl1aW50NjRfdAljZV9wYWRfMDA0MDc4WzQ5OV07CSAgICAvKiAweDAwNDA3OCAtLSAweDAwNTAwOCAqLworCXU2NAljZV9wYWRfMDA0MDc4WzQ5OV07CSAgICAvKiAweDAwNDA3OCAtLSAweDAwNTAwOCAqLwogCiAJLyoKICAgICAgICAgICogQ1hNOiBDb3JldGFsayBYbWl0IE1vZHVsZSBSZWdpc3RlcnMKICAgICAgICAgICovCi0JdWludDY0X3QJY2VfY3htX2R5bl9jcmVkaXRfc3RhdHVzOwkJLyogMHgwMDUwMTAgKi8KLQl1aW50NjRfdAljZV9jeG1fbGFzdF9jcmVkaXRfc3RhdHVzOwkJLyogMHgwMDUwMTggKi8KLQl1aW50NjRfdAljZV9jeG1fY3JlZGl0X2xpbWl0OwkJCS8qIDB4MDA1MDIwICovCi0JdWludDY0X3QJY2VfY3htX2ZvcmNlX2NyZWRpdDsJCQkvKiAweDAwNTAyOCAqLwotCXVpbnQ2NF90CWNlX2N4bV9kaXNhYmxlX2J5cGFzczsJCQkvKiAweDAwNTAzMCAqLwotCXVpbnQ2NF90CWNlX3BhZF8wMDUwMzhbM107CSAgICAvKiAweDAwNTAzOCAtLSAweDAwNTA0OCAqLwotCXVpbnQ2NF90CWNlX2N4bV9kZWJ1Z19tdXg7CQkJLyogMHgwMDUwNTAgKi8KKwl1NjQJY2VfY3htX2R5bl9jcmVkaXRfc3RhdHVzOwkJLyogMHgwMDUwMTAgKi8KKwl1NjQJY2VfY3htX2xhc3RfY3JlZGl0X3N0YXR1czsJCS8qIDB4MDA1MDE4ICovCisJdTY0CWNlX2N4bV9jcmVkaXRfbGltaXQ7CQkJLyogMHgwMDUwMjAgKi8KKwl1NjQJY2VfY3htX2ZvcmNlX2NyZWRpdDsJCQkvKiAweDAwNTAyOCAqLworCXU2NAljZV9jeG1fZGlzYWJsZV9ieXBhc3M7CQkJLyogMHgwMDUwMzAgKi8KKwl1NjQJY2VfcGFkXzAwNTAzOFszXTsJICAgIC8qIDB4MDA1MDM4IC0tIDB4MDA1MDQ4ICovCisJdTY0CWNlX2N4bV9kZWJ1Z19tdXg7CQkJLyogMHgwMDUwNTAgKi8KIAotICAgICAgICB1aW50NjRfdCAgICAgICAgY2VfcGFkXzAwNTA1OFs1MDFdOyAgICAgICAgIC8qIDB4MDA1MDU4IC0tIDB4MDA1RkY4ICovCisgICAgICAgIHU2NCAgICAgICAgY2VfcGFkXzAwNTA1OFs1MDFdOyAgICAgICAgIC8qIDB4MDA1MDU4IC0tIDB4MDA1RkY4ICovCiAKIAkvKgogCSAqIERUTDogRG93bnN0cmVhbSBUcmFuc2FjdGlvbiBMYXllciBSZWdzIChMaW5rIzEgYW5kIExpbmsjMikKQEAgLTI1OCwyMDkgKzI1OCwyMDkgQEAKIAkjZGVmaW5lIGNlX3V0bChsaW5rX251bSkJY2VfZHRsX3V0bFtsaW5rX251bS0xXQogCXN0cnVjdCBjZV9kdGxfdXRsX3JlZyB7CiAJCS8qIERUTCAqLwotCQl1aW50NjRfdAljZV9kdGxfZHRkcl9jcmVkaXRfbGltaXQ7CS8qIDB4MDB5MDAwICovCi0JCXVpbnQ2NF90CWNlX2R0bF9kdGRyX2NyZWRpdF9mb3JjZTsJLyogMHgwMHkwMDggKi8KLQkJdWludDY0X3QJY2VfZHRsX2R5bl9jcmVkaXRfc3RhdHVzOwkvKiAweDAweTAxMCAqLwotCQl1aW50NjRfdAljZV9kdGxfZHRsX2xhc3RfY3JlZGl0X3N0YXQ7CS8qIDB4MDB5MDE4ICovCi0JCXVpbnQ2NF90CWNlX2R0bF9kdGxfY3RybDsJCS8qIDB4MDB5MDIwICovCi0JCXVpbnQ2NF90CWNlX3BhZF8wMHkwMjhbNV07ICAgLyogMHgwMHkwMjggLS0gMHgwMHkwNDggKi8KLQkJdWludDY0X3QJY2VfZHRsX2RlYnVnX3NlbDsJCS8qIDB4MDB5MDUwICovCi0JCXVpbnQ2NF90CWNlX3BhZF8wMHkwNThbNTAxXTsgLyogMHgwMHkwNTggLS0gMHgwMHlGRjggKi8KKwkJdTY0CWNlX2R0bF9kdGRyX2NyZWRpdF9saW1pdDsJLyogMHgwMHkwMDAgKi8KKwkJdTY0CWNlX2R0bF9kdGRyX2NyZWRpdF9mb3JjZTsJLyogMHgwMHkwMDggKi8KKwkJdTY0CWNlX2R0bF9keW5fY3JlZGl0X3N0YXR1czsJLyogMHgwMHkwMTAgKi8KKwkJdTY0CWNlX2R0bF9kdGxfbGFzdF9jcmVkaXRfc3RhdDsJLyogMHgwMHkwMTggKi8KKwkJdTY0CWNlX2R0bF9kdGxfY3RybDsJCS8qIDB4MDB5MDIwICovCisJCXU2NAljZV9wYWRfMDB5MDI4WzVdOyAgIC8qIDB4MDB5MDI4IC0tIDB4MDB5MDQ4ICovCisJCXU2NAljZV9kdGxfZGVidWdfc2VsOwkJLyogMHgwMHkwNTAgKi8KKwkJdTY0CWNlX3BhZF8wMHkwNThbNTAxXTsgLyogMHgwMHkwNTggLS0gMHgwMHlGRjggKi8KIAogCQkvKiBVVEwgKi8KLQkJdWludDY0X3QJY2VfdXRsX3V0bF9jdHJsOwkJLyogMHgwMHowMDAgKi8KLQkJdWludDY0X3QJY2VfdXRsX2RlYnVnX3NlbDsJCS8qIDB4MDB6MDA4ICovCi0JCXVpbnQ2NF90CWNlX3BhZF8wMHowMTBbNTEwXTsgLyogMHgwMHowMTAgLS0gMHgwMHpGRjggKi8KKwkJdTY0CWNlX3V0bF91dGxfY3RybDsJCS8qIDB4MDB6MDAwICovCisJCXU2NAljZV91dGxfZGVidWdfc2VsOwkJLyogMHgwMHowMDggKi8KKwkJdTY0CWNlX3BhZF8wMHowMTBbNTEwXTsgLyogMHgwMHowMTAgLS0gMHgwMHpGRjggKi8KIAl9IGNlX2R0bF91dGxbMl07CiAKLQl1aW50NjRfdAljZV9wYWRfMDBBMDAwWzUxNF07CSAgICAvKiAweDAwQTAwMCAtLSAweDAwQjAwOCAqLworCXU2NAljZV9wYWRfMDBBMDAwWzUxNF07CSAgICAvKiAweDAwQTAwMCAtLSAweDAwQjAwOCAqLwogCiAJLyoKIAkgKiBVUkU6IFVwc3RyZWFtIFJlcXVlc3QgRW5naW5lCiAgICAgICAgICAqLwotCXVpbnQ2NF90CWNlX3VyZV9keW5fY3JlZGl0X3N0YXR1czsJCS8qIDB4MDBCMDEwICovCi0JdWludDY0X3QJY2VfdXJlX2xhc3RfY3JlZGl0X3N0YXR1czsJCS8qIDB4MDBCMDE4ICovCi0JdWludDY0X3QJY2VfdXJlX2NyZWRpdF9saW1pdDsJCQkvKiAweDAwQjAyMCAqLwotCXVpbnQ2NF90CWNlX3BhZF8wMEIwMjg7CQkJCS8qIDB4MDBCMDI4ICovCi0JdWludDY0X3QJY2VfdXJlX2NvbnRyb2w7CQkJCS8qIDB4MDBCMDMwICovCi0JdWludDY0X3QJY2VfdXJlX3N0YXR1czsJCQkJLyogMHgwMEIwMzggKi8KLQl1aW50NjRfdAljZV9wYWRfMDBCMDQwWzJdOwkgICAgLyogMHgwMEIwNDAgLS0gMHgwMEIwNDggKi8KLQl1aW50NjRfdAljZV91cmVfZGVidWdfc2VsOwkJCS8qIDB4MDBCMDUwICovCi0JdWludDY0X3QJY2VfdXJlX3BjaWVfZGVidWdfc2VsOwkJCS8qIDB4MDBCMDU4ICovCi0JdWludDY0X3QJY2VfdXJlX3NzcF9lcnJfY21kX3dyZDsJCQkvKiAweDAwQjA2MCAqLwotCXVpbnQ2NF90CWNlX3VyZV9zc3BfZXJyX2FkZHI7CQkJLyogMHgwMEIwNjggKi8KLQl1aW50NjRfdAljZV91cmVfcGFnZV9tYXA7CQkJLyogMHgwMEIwNzAgKi8KLQl1aW50NjRfdAljZV91cmVfZGlyX21hcFtUSU9DRV9OVU1fUE9SVFNdOwkvKiAweDAwQjA3OCAqLwotCXVpbnQ2NF90CWNlX3VyZV9waXBlX3NlbDE7CQkJLyogMHgwMEIwODggKi8KLQl1aW50NjRfdAljZV91cmVfcGlwZV9tYXNrMTsJCQkvKiAweDAwQjA5MCAqLwotCXVpbnQ2NF90CWNlX3VyZV9waXBlX3NlbDI7CQkJLyogMHgwMEIwOTggKi8KLQl1aW50NjRfdAljZV91cmVfcGlwZV9tYXNrMjsJCQkvKiAweDAwQjBBMCAqLwotCXVpbnQ2NF90CWNlX3VyZV9wY2llMV9jcmVkaXRzX3NlbnQ7CQkvKiAweDAwQjBBOCAqLwotCXVpbnQ2NF90CWNlX3VyZV9wY2llMV9jcmVkaXRzX3VzZWQ7CQkvKiAweDAwQjBCMCAqLwotCXVpbnQ2NF90CWNlX3VyZV9wY2llMV9jcmVkaXRfbGltaXQ7CQkvKiAweDAwQjBCOCAqLwotCXVpbnQ2NF90CWNlX3VyZV9wY2llMl9jcmVkaXRzX3NlbnQ7CQkvKiAweDAwQjBDMCAqLwotCXVpbnQ2NF90CWNlX3VyZV9wY2llMl9jcmVkaXRzX3VzZWQ7CQkvKiAweDAwQjBDOCAqLwotCXVpbnQ2NF90CWNlX3VyZV9wY2llMl9jcmVkaXRfbGltaXQ7CQkvKiAweDAwQjBEMCAqLwotCXVpbnQ2NF90CWNlX3VyZV9wY2llX2ZvcmNlX2NyZWRpdDsJCS8qIDB4MDBCMEQ4ICovCi0JdWludDY0X3QJY2VfdXJlX3JkX3RudW1fdmFsOwkJCS8qIDB4MDBCMEUwICovCi0JdWludDY0X3QJY2VfdXJlX3JkX3RudW1fcnNwX3JjdmQ7CQkvKiAweDAwQjBFOCAqLwotCXVpbnQ2NF90CWNlX3VyZV9yZF90bnVtX2VzZW50X3RpbWVyOwkJLyogMHgwMEIwRjAgKi8KLQl1aW50NjRfdAljZV91cmVfcmRfdG51bV9lcnJvcjsJCQkvKiAweDAwQjBGOCAqLwotCXVpbnQ2NF90CWNlX3VyZV9yZF90bnVtX2ZpcnN0X2NsOwkJLyogMHgwMEIxMDAgKi8KLQl1aW50NjRfdAljZV91cmVfcmRfdG51bV9saW5rX2J1ZjsJCS8qIDB4MDBCMTA4ICovCi0JdWludDY0X3QJY2VfdXJlX3dyX3RudW1fdmFsOwkJCS8qIDB4MDBCMTEwICovCi0JdWludDY0X3QJY2VfdXJlX3NyYW1fZXJyX2FkZHIwOwkJCS8qIDB4MDBCMTE4ICovCi0JdWludDY0X3QJY2VfdXJlX3NyYW1fZXJyX2FkZHIxOwkJCS8qIDB4MDBCMTIwICovCi0JdWludDY0X3QJY2VfdXJlX3NyYW1fZXJyX2FkZHIyOwkJCS8qIDB4MDBCMTI4ICovCi0JdWludDY0X3QJY2VfdXJlX3NyYW1fcmRfYWRkcjA7CQkJLyogMHgwMEIxMzAgKi8KLQl1aW50NjRfdAljZV91cmVfc3JhbV9yZF9hZGRyMTsJCQkvKiAweDAwQjEzOCAqLwotCXVpbnQ2NF90CWNlX3VyZV9zcmFtX3JkX2FkZHIyOwkJCS8qIDB4MDBCMTQwICovCi0JdWludDY0X3QJY2VfdXJlX3NyYW1fd3JfYWRkcjA7CQkJLyogMHgwMEIxNDggKi8KLQl1aW50NjRfdAljZV91cmVfc3JhbV93cl9hZGRyMTsJCQkvKiAweDAwQjE1MCAqLwotCXVpbnQ2NF90CWNlX3VyZV9zcmFtX3dyX2FkZHIyOwkJCS8qIDB4MDBCMTU4ICovCi0JdWludDY0X3QJY2VfdXJlX2J1Zl9mbHVzaDEwOwkJCS8qIDB4MDBCMTYwICovCi0JdWludDY0X3QJY2VfdXJlX2J1Zl9mbHVzaDExOwkJCS8qIDB4MDBCMTY4ICovCi0JdWludDY0X3QJY2VfdXJlX2J1Zl9mbHVzaDEyOwkJCS8qIDB4MDBCMTcwICovCi0JdWludDY0X3QJY2VfdXJlX2J1Zl9mbHVzaDEzOwkJCS8qIDB4MDBCMTc4ICovCi0JdWludDY0X3QJY2VfdXJlX2J1Zl9mbHVzaDIwOwkJCS8qIDB4MDBCMTgwICovCi0JdWludDY0X3QJY2VfdXJlX2J1Zl9mbHVzaDIxOwkJCS8qIDB4MDBCMTg4ICovCi0JdWludDY0X3QJY2VfdXJlX2J1Zl9mbHVzaDIyOwkJCS8qIDB4MDBCMTkwICovCi0JdWludDY0X3QJY2VfdXJlX2J1Zl9mbHVzaDIzOwkJCS8qIDB4MDBCMTk4ICovCi0JdWludDY0X3QJY2VfdXJlX3BjaWVfY29udHJvbDE7CQkJLyogMHgwMEIxQTAgKi8KLQl1aW50NjRfdAljZV91cmVfcGNpZV9jb250cm9sMjsJCQkvKiAweDAwQjFBOCAqLworCXU2NAljZV91cmVfZHluX2NyZWRpdF9zdGF0dXM7CQkvKiAweDAwQjAxMCAqLworCXU2NAljZV91cmVfbGFzdF9jcmVkaXRfc3RhdHVzOwkJLyogMHgwMEIwMTggKi8KKwl1NjQJY2VfdXJlX2NyZWRpdF9saW1pdDsJCQkvKiAweDAwQjAyMCAqLworCXU2NAljZV9wYWRfMDBCMDI4OwkJCQkvKiAweDAwQjAyOCAqLworCXU2NAljZV91cmVfY29udHJvbDsJCQkJLyogMHgwMEIwMzAgKi8KKwl1NjQJY2VfdXJlX3N0YXR1czsJCQkJLyogMHgwMEIwMzggKi8KKwl1NjQJY2VfcGFkXzAwQjA0MFsyXTsJICAgIC8qIDB4MDBCMDQwIC0tIDB4MDBCMDQ4ICovCisJdTY0CWNlX3VyZV9kZWJ1Z19zZWw7CQkJLyogMHgwMEIwNTAgKi8KKwl1NjQJY2VfdXJlX3BjaWVfZGVidWdfc2VsOwkJCS8qIDB4MDBCMDU4ICovCisJdTY0CWNlX3VyZV9zc3BfZXJyX2NtZF93cmQ7CQkJLyogMHgwMEIwNjAgKi8KKwl1NjQJY2VfdXJlX3NzcF9lcnJfYWRkcjsJCQkvKiAweDAwQjA2OCAqLworCXU2NAljZV91cmVfcGFnZV9tYXA7CQkJLyogMHgwMEIwNzAgKi8KKwl1NjQJY2VfdXJlX2Rpcl9tYXBbVElPQ0VfTlVNX1BPUlRTXTsJLyogMHgwMEIwNzggKi8KKwl1NjQJY2VfdXJlX3BpcGVfc2VsMTsJCQkvKiAweDAwQjA4OCAqLworCXU2NAljZV91cmVfcGlwZV9tYXNrMTsJCQkvKiAweDAwQjA5MCAqLworCXU2NAljZV91cmVfcGlwZV9zZWwyOwkJCS8qIDB4MDBCMDk4ICovCisJdTY0CWNlX3VyZV9waXBlX21hc2syOwkJCS8qIDB4MDBCMEEwICovCisJdTY0CWNlX3VyZV9wY2llMV9jcmVkaXRzX3NlbnQ7CQkvKiAweDAwQjBBOCAqLworCXU2NAljZV91cmVfcGNpZTFfY3JlZGl0c191c2VkOwkJLyogMHgwMEIwQjAgKi8KKwl1NjQJY2VfdXJlX3BjaWUxX2NyZWRpdF9saW1pdDsJCS8qIDB4MDBCMEI4ICovCisJdTY0CWNlX3VyZV9wY2llMl9jcmVkaXRzX3NlbnQ7CQkvKiAweDAwQjBDMCAqLworCXU2NAljZV91cmVfcGNpZTJfY3JlZGl0c191c2VkOwkJLyogMHgwMEIwQzggKi8KKwl1NjQJY2VfdXJlX3BjaWUyX2NyZWRpdF9saW1pdDsJCS8qIDB4MDBCMEQwICovCisJdTY0CWNlX3VyZV9wY2llX2ZvcmNlX2NyZWRpdDsJCS8qIDB4MDBCMEQ4ICovCisJdTY0CWNlX3VyZV9yZF90bnVtX3ZhbDsJCQkvKiAweDAwQjBFMCAqLworCXU2NAljZV91cmVfcmRfdG51bV9yc3BfcmN2ZDsJCS8qIDB4MDBCMEU4ICovCisJdTY0CWNlX3VyZV9yZF90bnVtX2VzZW50X3RpbWVyOwkJLyogMHgwMEIwRjAgKi8KKwl1NjQJY2VfdXJlX3JkX3RudW1fZXJyb3I7CQkJLyogMHgwMEIwRjggKi8KKwl1NjQJY2VfdXJlX3JkX3RudW1fZmlyc3RfY2w7CQkvKiAweDAwQjEwMCAqLworCXU2NAljZV91cmVfcmRfdG51bV9saW5rX2J1ZjsJCS8qIDB4MDBCMTA4ICovCisJdTY0CWNlX3VyZV93cl90bnVtX3ZhbDsJCQkvKiAweDAwQjExMCAqLworCXU2NAljZV91cmVfc3JhbV9lcnJfYWRkcjA7CQkJLyogMHgwMEIxMTggKi8KKwl1NjQJY2VfdXJlX3NyYW1fZXJyX2FkZHIxOwkJCS8qIDB4MDBCMTIwICovCisJdTY0CWNlX3VyZV9zcmFtX2Vycl9hZGRyMjsJCQkvKiAweDAwQjEyOCAqLworCXU2NAljZV91cmVfc3JhbV9yZF9hZGRyMDsJCQkvKiAweDAwQjEzMCAqLworCXU2NAljZV91cmVfc3JhbV9yZF9hZGRyMTsJCQkvKiAweDAwQjEzOCAqLworCXU2NAljZV91cmVfc3JhbV9yZF9hZGRyMjsJCQkvKiAweDAwQjE0MCAqLworCXU2NAljZV91cmVfc3JhbV93cl9hZGRyMDsJCQkvKiAweDAwQjE0OCAqLworCXU2NAljZV91cmVfc3JhbV93cl9hZGRyMTsJCQkvKiAweDAwQjE1MCAqLworCXU2NAljZV91cmVfc3JhbV93cl9hZGRyMjsJCQkvKiAweDAwQjE1OCAqLworCXU2NAljZV91cmVfYnVmX2ZsdXNoMTA7CQkJLyogMHgwMEIxNjAgKi8KKwl1NjQJY2VfdXJlX2J1Zl9mbHVzaDExOwkJCS8qIDB4MDBCMTY4ICovCisJdTY0CWNlX3VyZV9idWZfZmx1c2gxMjsJCQkvKiAweDAwQjE3MCAqLworCXU2NAljZV91cmVfYnVmX2ZsdXNoMTM7CQkJLyogMHgwMEIxNzggKi8KKwl1NjQJY2VfdXJlX2J1Zl9mbHVzaDIwOwkJCS8qIDB4MDBCMTgwICovCisJdTY0CWNlX3VyZV9idWZfZmx1c2gyMTsJCQkvKiAweDAwQjE4OCAqLworCXU2NAljZV91cmVfYnVmX2ZsdXNoMjI7CQkJLyogMHgwMEIxOTAgKi8KKwl1NjQJY2VfdXJlX2J1Zl9mbHVzaDIzOwkJCS8qIDB4MDBCMTk4ICovCisJdTY0CWNlX3VyZV9wY2llX2NvbnRyb2wxOwkJCS8qIDB4MDBCMUEwICovCisJdTY0CWNlX3VyZV9wY2llX2NvbnRyb2wyOwkJCS8qIDB4MDBCMUE4ICovCiAKLQl1aW50NjRfdAljZV9wYWRfMDBCMUIwWzQ1OF07CSAgICAvKiAweDAwQjFCMCAtLSAweDAwQkZGOCAqLworCXU2NAljZV9wYWRfMDBCMUIwWzQ1OF07CSAgICAvKiAweDAwQjFCMCAtLSAweDAwQkZGOCAqLwogCiAJLyogVXBzdHJlYW0gRGF0YSBCdWZmZXIsIFBvcnQxICovCiAJc3RydWN0IGNlX3VyZV9tYWludF91cHNfZGF0MV9kYXRhIHsKLQkJdWludDY0X3QJZGF0YTYzXzBbNTEyXTsJICAgIC8qIDB4MDBDMDAwIC0tIDB4MDBDRkY4ICovCi0JCXVpbnQ2NF90CWRhdGExMjdfNjRbNTEyXTsgICAgLyogMHgwMEQwMDAgLS0gMHgwMERGRjggKi8KLQkJdWludDY0X3QJcGFyaXR5WzUxMl07CSAgICAvKiAweDAwRTAwMCAtLSAweDAwRUZGOCAqLworCQl1NjQJZGF0YTYzXzBbNTEyXTsJICAgIC8qIDB4MDBDMDAwIC0tIDB4MDBDRkY4ICovCisJCXU2NAlkYXRhMTI3XzY0WzUxMl07ICAgIC8qIDB4MDBEMDAwIC0tIDB4MDBERkY4ICovCisJCXU2NAlwYXJpdHlbNTEyXTsJICAgIC8qIDB4MDBFMDAwIC0tIDB4MDBFRkY4ICovCiAJfSBjZV91cmVfbWFpbnRfdXBzX2RhdDE7CiAKIAkvKiBVcHN0cmVhbSBIZWFkZXIgQnVmZmVyLCBQb3J0MSAqLwogCXN0cnVjdCBjZV91cmVfbWFpbnRfdXBzX2hkcjFfZGF0YSB7Ci0JCXVpbnQ2NF90CWRhdGE2M18wWzUxMl07CSAgICAvKiAweDAwRjAwMCAtLSAweDAwRkZGOCAqLwotCQl1aW50NjRfdAlkYXRhMTI3XzY0WzUxMl07ICAgIC8qIDB4MDEwMDAwIC0tIDB4MDEwRkY4ICovCi0JCXVpbnQ2NF90CXBhcml0eVs1MTJdOwkgICAgLyogMHgwMTEwMDAgLS0gMHgwMTFGRjggKi8KKwkJdTY0CWRhdGE2M18wWzUxMl07CSAgICAvKiAweDAwRjAwMCAtLSAweDAwRkZGOCAqLworCQl1NjQJZGF0YTEyN182NFs1MTJdOyAgICAvKiAweDAxMDAwMCAtLSAweDAxMEZGOCAqLworCQl1NjQJcGFyaXR5WzUxMl07CSAgICAvKiAweDAxMTAwMCAtLSAweDAxMUZGOCAqLwogCX0gY2VfdXJlX21haW50X3Vwc19oZHIxOwogCiAJLyogVXBzdHJlYW0gRGF0YSBCdWZmZXIsIFBvcnQyICovCiAJc3RydWN0IGNlX3VyZV9tYWludF91cHNfZGF0Ml9kYXRhIHsKLQkJdWludDY0X3QJZGF0YTYzXzBbNTEyXTsJICAgIC8qIDB4MDEyMDAwIC0tIDB4MDEyRkY4ICovCi0JCXVpbnQ2NF90CWRhdGExMjdfNjRbNTEyXTsgICAgLyogMHgwMTMwMDAgLS0gMHgwMTNGRjggKi8KLQkJdWludDY0X3QJcGFyaXR5WzUxMl07CSAgICAvKiAweDAxNDAwMCAtLSAweDAxNEZGOCAqLworCQl1NjQJZGF0YTYzXzBbNTEyXTsJICAgIC8qIDB4MDEyMDAwIC0tIDB4MDEyRkY4ICovCisJCXU2NAlkYXRhMTI3XzY0WzUxMl07ICAgIC8qIDB4MDEzMDAwIC0tIDB4MDEzRkY4ICovCisJCXU2NAlwYXJpdHlbNTEyXTsJICAgIC8qIDB4MDE0MDAwIC0tIDB4MDE0RkY4ICovCiAJfSBjZV91cmVfbWFpbnRfdXBzX2RhdDI7CiAKIAkvKiBVcHN0cmVhbSBIZWFkZXIgQnVmZmVyLCBQb3J0MiAqLwogCXN0cnVjdCBjZV91cmVfbWFpbnRfdXBzX2hkcjJfZGF0YSB7Ci0JCXVpbnQ2NF90CWRhdGE2M18wWzUxMl07CSAgICAvKiAweDAxNTAwMCAtLSAweDAxNUZGOCAqLwotCQl1aW50NjRfdAlkYXRhMTI3XzY0WzUxMl07ICAgIC8qIDB4MDE2MDAwIC0tIDB4MDE2RkY4ICovCi0JCXVpbnQ2NF90CXBhcml0eVs1MTJdOwkgICAgLyogMHgwMTcwMDAgLS0gMHgwMTdGRjggKi8KKwkJdTY0CWRhdGE2M18wWzUxMl07CSAgICAvKiAweDAxNTAwMCAtLSAweDAxNUZGOCAqLworCQl1NjQJZGF0YTEyN182NFs1MTJdOyAgICAvKiAweDAxNjAwMCAtLSAweDAxNkZGOCAqLworCQl1NjQJcGFyaXR5WzUxMl07CSAgICAvKiAweDAxNzAwMCAtLSAweDAxN0ZGOCAqLwogCX0gY2VfdXJlX21haW50X3Vwc19oZHIyOwogCiAJLyogRG93bnN0cmVhbSBEYXRhIEJ1ZmZlciAqLwogCXN0cnVjdCBjZV91cmVfbWFpbnRfZG5zX2RhdF9kYXRhIHsKLQkJdWludDY0X3QJZGF0YTYzXzBbNTEyXTsJICAgIC8qIDB4MDE4MDAwIC0tIDB4MDE4RkY4ICovCi0JCXVpbnQ2NF90CWRhdGExMjdfNjRbNTEyXTsgICAgLyogMHgwMTkwMDAgLS0gMHgwMTlGRjggKi8KLQkJdWludDY0X3QJcGFyaXR5WzUxMl07CSAgICAvKiAweDAxQTAwMCAtLSAweDAxQUZGOCAqLworCQl1NjQJZGF0YTYzXzBbNTEyXTsJICAgIC8qIDB4MDE4MDAwIC0tIDB4MDE4RkY4ICovCisJCXU2NAlkYXRhMTI3XzY0WzUxMl07ICAgIC8qIDB4MDE5MDAwIC0tIDB4MDE5RkY4ICovCisJCXU2NAlwYXJpdHlbNTEyXTsJICAgIC8qIDB4MDFBMDAwIC0tIDB4MDFBRkY4ICovCiAJfSBjZV91cmVfbWFpbnRfZG5zX2RhdDsKIAogCS8qIERvd25zdHJlYW0gSGVhZGVyIEJ1ZmZlciAqLwogCXN0cnVjdAljZV91cmVfbWFpbnRfZG5zX2hkcl9kYXRhIHsKLQkJdWludDY0X3QJZGF0YTMxXzBbNjRdOwkgICAgLyogMHgwMUIwMDAgLS0gMHgwMUIxRjggKi8KLQkJdWludDY0X3QJZGF0YTk1XzMyWzY0XTsJICAgIC8qIDB4MDFCMjAwIC0tIDB4MDFCM0Y4ICovCi0JCXVpbnQ2NF90CXBhcml0eVs2NF07CSAgICAvKiAweDAxQjQwMCAtLSAweDAxQjVGOCAqLworCQl1NjQJZGF0YTMxXzBbNjRdOwkgICAgLyogMHgwMUIwMDAgLS0gMHgwMUIxRjggKi8KKwkJdTY0CWRhdGE5NV8zMls2NF07CSAgICAvKiAweDAxQjIwMCAtLSAweDAxQjNGOCAqLworCQl1NjQJcGFyaXR5WzY0XTsJICAgIC8qIDB4MDFCNDAwIC0tIDB4MDFCNUY4ICovCiAJfSBjZV91cmVfbWFpbnRfZG5zX2hkcjsKIAogCS8qIFJDSSBCdWZmZXIgRGF0YSAqLwogCXN0cnVjdAljZV91cmVfbWFpbnRfcmNpX2RhdGEgewotCQl1aW50NjRfdAlkYXRhNDFfMFs2NF07CSAgICAvKiAweDAxQjYwMCAtLSAweDAxQjdGOCAqLwotCQl1aW50NjRfdAlkYXRhNjlfNDJbNjRdOwkgICAgLyogMHgwMUI4MDAgLS0gMHgwMUI5RjggKi8KKwkJdTY0CWRhdGE0MV8wWzY0XTsJICAgIC8qIDB4MDFCNjAwIC0tIDB4MDFCN0Y4ICovCisJCXU2NAlkYXRhNjlfNDJbNjRdOwkgICAgLyogMHgwMUI4MDAgLS0gMHgwMUI5RjggKi8KIAl9IGNlX3VyZV9tYWludF9yY2k7CiAKIAkvKiBSZXNwb25zZSBRdWV1ZSAqLwotCXVpbnQ2NF90CWNlX3VyZV9tYWludF9yc3BxWzY0XTsJICAgIC8qIDB4MDFCQTAwIC0tIDB4MDFCQkY4ICovCisJdTY0CWNlX3VyZV9tYWludF9yc3BxWzY0XTsJICAgIC8qIDB4MDFCQTAwIC0tIDB4MDFCQkY4ICovCiAKLQl1aW50NjRfdAljZV9wYWRfMDFDMDAwWzQyMjRdOwkgICAgLyogMHgwMUJDMDAgLS0gMHgwMjNGRjggKi8KKwl1NjQJY2VfcGFkXzAxQzAwMFs0MjI0XTsJICAgIC8qIDB4MDFCQzAwIC0tIDB4MDIzRkY4ICovCiAKIAkvKiBBZG1pbiBCdWlsZC1hLVBhY2tldCBCdWZmZXIgKi8KIAlzdHJ1Y3QJY2VfYWRtX21haW50X2JhcF9idWZfZGF0YSB7Ci0JCXVpbnQ2NF90CWRhdGE2M18wWzI1OF07CSAgICAvKiAweDAyNDAwMCAtLSAweDAyNDgwOCAqLwotCQl1aW50NjRfdAlkYXRhMTI3XzY0WzI1OF07ICAgIC8qIDB4MDI0ODEwIC0tIDB4MDI1MDE4ICovCi0JCXVpbnQ2NF90CXBhcml0eVsyNThdOwkgICAgLyogMHgwMjUwMjAgLS0gMHgwMjU4MjggKi8KKwkJdTY0CWRhdGE2M18wWzI1OF07CSAgICAvKiAweDAyNDAwMCAtLSAweDAyNDgwOCAqLworCQl1NjQJZGF0YTEyN182NFsyNThdOyAgICAvKiAweDAyNDgxMCAtLSAweDAyNTAxOCAqLworCQl1NjQJcGFyaXR5WzI1OF07CSAgICAvKiAweDAyNTAyMCAtLSAweDAyNTgyOCAqLwogCX0gY2VfYWRtX21haW50X2JhcF9idWY7CiAKLQl1aW50NjRfdAljZV9wYWRfMDI1ODMwWzUzNzBdOwkgICAgLyogMHgwMjU4MzAgLS0gMHgwMkZGRjggKi8KKwl1NjQJY2VfcGFkXzAyNTgzMFs1MzcwXTsJICAgIC8qIDB4MDI1ODMwIC0tIDB4MDJGRkY4ICovCiAKIAkvKiBVUkU6IDQwYml0IFBNVSBBVEUgQnVmZmVyICovCQkgICAgLyogMHgwMzAwMDAgLS0gMHgwMzdGRjggKi8KLQl1aW50NjRfdAljZV91cmVfYXRlNDBbVElPQ0VfTlVNX000MF9BVEVTXTsKKwl1NjQJY2VfdXJlX2F0ZTQwW1RJT0NFX05VTV9NNDBfQVRFU107CiAKIAkvKiBVUkU6IDMyLzQwYml0IFBNVSBBVEUgQnVmZmVyICovCSAgICAvKiAweDAzODAwMCAtLSAweDAzQkZGOCAqLwotCXVpbnQ2NF90CWNlX3VyZV9hdGUzMjQwW1RJT0NFX05VTV9NMzI0MF9BVEVTXTsKKwl1NjQJY2VfdXJlX2F0ZTMyNDBbVElPQ0VfTlVNX00zMjQwX0FURVNdOwogCi0JdWludDY0X3QJY2VfcGFkXzAzQzAwMFsyMDUwXTsJICAgIC8qIDB4MDNDMDAwIC0tIDB4MDQwMDA4ICovCisJdTY0CWNlX3BhZF8wM0MwMDBbMjA1MF07CSAgICAvKiAweDAzQzAwMCAtLSAweDA0MDAwOCAqLwogCiAJLyoKIAkgKiBEUkU6IERvd24gU3RyZWFtIFJlcXVlc3QgRW5naW5lCiAgICAgICAgICAqLwotCXVpbnQ2NF90CWNlX2RyZV9keW5fY3JlZGl0X3N0YXR1czE7CQkvKiAweDA0MDAxMCAqLwotCXVpbnQ2NF90CWNlX2RyZV9keW5fY3JlZGl0X3N0YXR1czI7CQkvKiAweDA0MDAxOCAqLwotCXVpbnQ2NF90CWNlX2RyZV9sYXN0X2NyZWRpdF9zdGF0dXMxOwkJLyogMHgwNDAwMjAgKi8KLQl1aW50NjRfdAljZV9kcmVfbGFzdF9jcmVkaXRfc3RhdHVzMjsJCS8qIDB4MDQwMDI4ICovCi0JdWludDY0X3QJY2VfZHJlX2NyZWRpdF9saW1pdDE7CQkJLyogMHgwNDAwMzAgKi8KLQl1aW50NjRfdAljZV9kcmVfY3JlZGl0X2xpbWl0MjsJCQkvKiAweDA0MDAzOCAqLwotCXVpbnQ2NF90CWNlX2RyZV9mb3JjZV9jcmVkaXQxOwkJCS8qIDB4MDQwMDQwICovCi0JdWludDY0X3QJY2VfZHJlX2ZvcmNlX2NyZWRpdDI7CQkJLyogMHgwNDAwNDggKi8KLQl1aW50NjRfdAljZV9kcmVfZGVidWdfbXV4MTsJCQkvKiAweDA0MDA1MCAqLwotCXVpbnQ2NF90CWNlX2RyZV9kZWJ1Z19tdXgyOwkJCS8qIDB4MDQwMDU4ICovCi0JdWludDY0X3QJY2VfZHJlX3NzcF9lcnJfY21kX3dyZDsJCQkvKiAweDA0MDA2MCAqLwotCXVpbnQ2NF90CWNlX2RyZV9zc3BfZXJyX2FkZHI7CQkJLyogMHgwNDAwNjggKi8KLQl1aW50NjRfdAljZV9kcmVfY29tcF9lcnJfY21kX3dyZDsJCS8qIDB4MDQwMDcwICovCi0JdWludDY0X3QJY2VfZHJlX2NvbXBfZXJyX2FkZHI7CQkJLyogMHgwNDAwNzggKi8KLQl1aW50NjRfdAljZV9kcmVfcmVxX3N0YXR1czsJCQkvKiAweDA0MDA4MCAqLwotCXVpbnQ2NF90CWNlX2RyZV9jb25maWcxOwkJCQkvKiAweDA0MDA4OCAqLwotCXVpbnQ2NF90CWNlX2RyZV9jb25maWcyOwkJCQkvKiAweDA0MDA5MCAqLwotCXVpbnQ2NF90CWNlX2RyZV9jb25maWdfcmVxX3N0YXR1czsJCS8qIDB4MDQwMDk4ICovCi0JdWludDY0X3QJY2VfcGFkXzA0MDBBMFsxMl07CSAgICAvKiAweDA0MDBBMCAtLSAweDA0MDBGOCAqLwotCXVpbnQ2NF90CWNlX2RyZV9keW5fZmlmbzsJCQkvKiAweDA0MDEwMCAqLwotCXVpbnQ2NF90CWNlX3BhZF8wNDAxMDhbM107CSAgICAvKiAweDA0MDEwOCAtLSAweDA0MDExOCAqLwotCXVpbnQ2NF90CWNlX2RyZV9sYXN0X2ZpZm87CQkJLyogMHgwNDAxMjAgKi8KKwl1NjQJY2VfZHJlX2R5bl9jcmVkaXRfc3RhdHVzMTsJCS8qIDB4MDQwMDEwICovCisJdTY0CWNlX2RyZV9keW5fY3JlZGl0X3N0YXR1czI7CQkvKiAweDA0MDAxOCAqLworCXU2NAljZV9kcmVfbGFzdF9jcmVkaXRfc3RhdHVzMTsJCS8qIDB4MDQwMDIwICovCisJdTY0CWNlX2RyZV9sYXN0X2NyZWRpdF9zdGF0dXMyOwkJLyogMHgwNDAwMjggKi8KKwl1NjQJY2VfZHJlX2NyZWRpdF9saW1pdDE7CQkJLyogMHgwNDAwMzAgKi8KKwl1NjQJY2VfZHJlX2NyZWRpdF9saW1pdDI7CQkJLyogMHgwNDAwMzggKi8KKwl1NjQJY2VfZHJlX2ZvcmNlX2NyZWRpdDE7CQkJLyogMHgwNDAwNDAgKi8KKwl1NjQJY2VfZHJlX2ZvcmNlX2NyZWRpdDI7CQkJLyogMHgwNDAwNDggKi8KKwl1NjQJY2VfZHJlX2RlYnVnX211eDE7CQkJLyogMHgwNDAwNTAgKi8KKwl1NjQJY2VfZHJlX2RlYnVnX211eDI7CQkJLyogMHgwNDAwNTggKi8KKwl1NjQJY2VfZHJlX3NzcF9lcnJfY21kX3dyZDsJCQkvKiAweDA0MDA2MCAqLworCXU2NAljZV9kcmVfc3NwX2Vycl9hZGRyOwkJCS8qIDB4MDQwMDY4ICovCisJdTY0CWNlX2RyZV9jb21wX2Vycl9jbWRfd3JkOwkJLyogMHgwNDAwNzAgKi8KKwl1NjQJY2VfZHJlX2NvbXBfZXJyX2FkZHI7CQkJLyogMHgwNDAwNzggKi8KKwl1NjQJY2VfZHJlX3JlcV9zdGF0dXM7CQkJLyogMHgwNDAwODAgKi8KKwl1NjQJY2VfZHJlX2NvbmZpZzE7CQkJCS8qIDB4MDQwMDg4ICovCisJdTY0CWNlX2RyZV9jb25maWcyOwkJCQkvKiAweDA0MDA5MCAqLworCXU2NAljZV9kcmVfY29uZmlnX3JlcV9zdGF0dXM7CQkvKiAweDA0MDA5OCAqLworCXU2NAljZV9wYWRfMDQwMEEwWzEyXTsJICAgIC8qIDB4MDQwMEEwIC0tIDB4MDQwMEY4ICovCisJdTY0CWNlX2RyZV9keW5fZmlmbzsJCQkvKiAweDA0MDEwMCAqLworCXU2NAljZV9wYWRfMDQwMTA4WzNdOwkgICAgLyogMHgwNDAxMDggLS0gMHgwNDAxMTggKi8KKwl1NjQJY2VfZHJlX2xhc3RfZmlmbzsJCQkvKiAweDA0MDEyMCAqLwogCi0JdWludDY0X3QJY2VfcGFkXzA0MDEyOFsyN107CSAgICAvKiAweDA0MDEyOCAtLSAweDA0MDFGOCAqLworCXU2NAljZV9wYWRfMDQwMTI4WzI3XTsJICAgIC8qIDB4MDQwMTI4IC0tIDB4MDQwMUY4ICovCiAKIAkvKiBEUkUgRG93bnN0cmVhbSBIZWFkIFF1ZXVlICovCiAJc3RydWN0CWNlX2RyZV9tYWludF9kc19oZWFkX3F1ZXVlIHsKLQkJdWludDY0X3QJZGF0YTYzXzBbMzJdOwkgICAgLyogMHgwNDAyMDAgLS0gMHgwNDAyRjggKi8KLQkJdWludDY0X3QJZGF0YTEyN182NFszMl07CSAgICAvKiAweDA0MDMwMCAtLSAweDA0MDNGOCAqLwotCQl1aW50NjRfdAlwYXJpdHlbMzJdOwkgICAgLyogMHgwNDA0MDAgLS0gMHgwNDA0RjggKi8KKwkJdTY0CWRhdGE2M18wWzMyXTsJICAgIC8qIDB4MDQwMjAwIC0tIDB4MDQwMkY4ICovCisJCXU2NAlkYXRhMTI3XzY0WzMyXTsJICAgIC8qIDB4MDQwMzAwIC0tIDB4MDQwM0Y4ICovCisJCXU2NAlwYXJpdHlbMzJdOwkgICAgLyogMHgwNDA0MDAgLS0gMHgwNDA0RjggKi8KIAl9IGNlX2RyZV9tYWludF9kc19oZWFkX3E7CiAKLQl1aW50NjRfdAljZV9wYWRfMDQwNTAwWzM1Ml07CSAgICAvKiAweDA0MDUwMCAtLSAweDA0MEZGOCAqLworCXU2NAljZV9wYWRfMDQwNTAwWzM1Ml07CSAgICAvKiAweDA0MDUwMCAtLSAweDA0MEZGOCAqLwogCiAJLyogRFJFIERvd25zdHJlYW0gRGF0YSBRdWV1ZSAqLwogCXN0cnVjdAljZV9kcmVfbWFpbnRfZHNfZGF0YV9xdWV1ZSB7Ci0JCXVpbnQ2NF90CWRhdGE2M18wWzI1Nl07CSAgICAvKiAweDA0MTAwMCAtLSAweDA0MTdGOCAqLwotCQl1aW50NjRfdAljZV9wYWRfMDQxODAwWzI1Nl07IC8qIDB4MDQxODAwIC0tIDB4MDQxRkY4ICovCi0JCXVpbnQ2NF90CWRhdGExMjdfNjRbMjU2XTsgICAgLyogMHgwNDIwMDAgLS0gMHgwNDI3RjggKi8KLQkJdWludDY0X3QJY2VfcGFkXzA0MjgwMFsyNTZdOyAvKiAweDA0MjgwMCAtLSAweDA0MkZGOCAqLwotCQl1aW50NjRfdAlwYXJpdHlbMjU2XTsJICAgIC8qIDB4MDQzMDAwIC0tIDB4MDQzN0Y4ICovCi0JCXVpbnQ2NF90CWNlX3BhZF8wNDM4MDBbMjU2XTsgLyogMHgwNDM4MDAgLS0gMHgwNDNGRjggKi8KKwkJdTY0CWRhdGE2M18wWzI1Nl07CSAgICAvKiAweDA0MTAwMCAtLSAweDA0MTdGOCAqLworCQl1NjQJY2VfcGFkXzA0MTgwMFsyNTZdOyAvKiAweDA0MTgwMCAtLSAweDA0MUZGOCAqLworCQl1NjQJZGF0YTEyN182NFsyNTZdOyAgICAvKiAweDA0MjAwMCAtLSAweDA0MjdGOCAqLworCQl1NjQJY2VfcGFkXzA0MjgwMFsyNTZdOyAvKiAweDA0MjgwMCAtLSAweDA0MkZGOCAqLworCQl1NjQJcGFyaXR5WzI1Nl07CSAgICAvKiAweDA0MzAwMCAtLSAweDA0MzdGOCAqLworCQl1NjQJY2VfcGFkXzA0MzgwMFsyNTZdOyAvKiAweDA0MzgwMCAtLSAweDA0M0ZGOCAqLwogCX0gY2VfZHJlX21haW50X2RzX2RhdGFfcTsKIAogCS8qIERSRSBVUkUgVXBzdHJlYW0gUmVzcG9uc2UgUXVldWUgKi8KIAlzdHJ1Y3QJY2VfZHJlX21haW50X3VyZV91c19yc3BfcXVldWUgewotCQl1aW50NjRfdAlkYXRhNjNfMFs4XTsJICAgIC8qIDB4MDQ0MDAwIC0tIDB4MDQ0MDM4ICovCi0JCXVpbnQ2NF90CWNlX3BhZF8wNDQwNDBbMjRdOyAgLyogMHgwNDQwNDAgLS0gMHgwNDQwRjggKi8KLQkJdWludDY0X3QJZGF0YTEyN182NFs4XTsgICAgICAvKiAweDA0NDEwMCAtLSAweDA0NDEzOCAqLwotCQl1aW50NjRfdAljZV9wYWRfMDQ0MTQwWzI0XTsgIC8qIDB4MDQ0MTQwIC0tIDB4MDQ0MUY4ICovCi0JCXVpbnQ2NF90CXBhcml0eVs4XTsJICAgIC8qIDB4MDQ0MjAwIC0tIDB4MDQ0MjM4ICovCi0JCXVpbnQ2NF90CWNlX3BhZF8wNDQyNDBbMjRdOyAgLyogMHgwNDQyNDAgLS0gMHgwNDQyRjggKi8KKwkJdTY0CWRhdGE2M18wWzhdOwkgICAgLyogMHgwNDQwMDAgLS0gMHgwNDQwMzggKi8KKwkJdTY0CWNlX3BhZF8wNDQwNDBbMjRdOyAgLyogMHgwNDQwNDAgLS0gMHgwNDQwRjggKi8KKwkJdTY0CWRhdGExMjdfNjRbOF07ICAgICAgLyogMHgwNDQxMDAgLS0gMHgwNDQxMzggKi8KKwkJdTY0CWNlX3BhZF8wNDQxNDBbMjRdOyAgLyogMHgwNDQxNDAgLS0gMHgwNDQxRjggKi8KKwkJdTY0CXBhcml0eVs4XTsJICAgIC8qIDB4MDQ0MjAwIC0tIDB4MDQ0MjM4ICovCisJCXU2NAljZV9wYWRfMDQ0MjQwWzI0XTsgIC8qIDB4MDQ0MjQwIC0tIDB4MDQ0MkY4ICovCiAJfSBjZV9kcmVfbWFpbnRfdXJlX3VzX3JzcF9xOwogCi0JdWludDY0X3QgCWNlX2RyZV9tYWludF91c193cnRfcnNwWzMyXTsvKiAweDA0NDMwMCAtLSAweDA0NDNGOCAqLworCXU2NCAJY2VfZHJlX21haW50X3VzX3dydF9yc3BbMzJdOy8qIDB4MDQ0MzAwIC0tIDB4MDQ0M0Y4ICovCiAKLQl1aW50NjRfdAljZV9lbmRfb2Zfc3RydWN0OwkJCS8qIDB4MDQ0NDAwICovCisJdTY0CWNlX2VuZF9vZl9zdHJ1Y3Q7CQkJLyogMHgwNDQ0MDAgKi8KIH0gdGlvY2VfdDsKIAogCkBAIC02MjUsMTEgKzYyNSwxMSBAQAogI2RlZmluZSBDRV9VUkVfQlVTX01BU0sJCQkoMHhGRlVMTCA8PCBCVVNfU1JDX0lEX1NIRlQpCiAjZGVmaW5lIENFX1VSRV9ERVZfTUFTSwkJCSgweDFGVUxMIDw8IERFVl9TUkNfSURfU0hGVCkKICNkZWZpbmUgQ0VfVVJFX0ZOQ19NQVNLCQkJKDB4MDdVTEwgPDwgRk5DX1NSQ19JRF9TSEZUKQotI2RlZmluZSBDRV9VUkVfUElQRV9CVVMoYikJCSgoKHVpbnQ2NF90KShiKSA8PCBCVVNfU1JDX0lEX1NIRlQpICYgXAorI2RlZmluZSBDRV9VUkVfUElQRV9CVVMoYikJCSgoKHU2NCkoYikgPDwgQlVTX1NSQ19JRF9TSEZUKSAmIFwKIAkJCQkJIENFX1VSRV9CVVNfTUFTSykKLSNkZWZpbmUgQ0VfVVJFX1BJUEVfREVWKGQpCQkoKCh1aW50NjRfdCkoZCkgPDwgREVWX1NSQ19JRF9TSEZUKSAmIFwKKyNkZWZpbmUgQ0VfVVJFX1BJUEVfREVWKGQpCQkoKCh1NjQpKGQpIDw8IERFVl9TUkNfSURfU0hGVCkgJiBcCiAJCQkJCSBDRV9VUkVfREVWX01BU0spCi0jZGVmaW5lIENFX1VSRV9QSVBFX0ZOQyhmKQkJKCgodWludDY0X3QpKGYpIDw8IEZOQ19TUkNfSURfU0hGVCkgJiBcCisjZGVmaW5lIENFX1VSRV9QSVBFX0ZOQyhmKQkJKCgodTY0KShmKSA8PCBGTkNfU1JDX0lEX1NIRlQpICYgXAogCQkJCQkgQ0VfVVJFX0ZOQ19NQVNLKQogCiAjZGVmaW5lIENFX1VSRV9TRUwxX1NIRlQJCTAKQEAgLTY2MCw5ICs2NjAsOSBAQAogI2RlZmluZSBDRV9VUkVfUE4xX01BU0sJCQkoMHhGRlVMTCA8PCBDRV9VUkVfUE4xX1NIRlQpCiAjZGVmaW5lIENFX1VSRV9QTjJfU0hGVAkJCTI0CiAjZGVmaW5lIENFX1VSRV9QTjJfTUFTSwkJCSgweEZGVUxMIDw8IENFX1VSRV9QTjJfU0hGVCkKLSNkZWZpbmUgQ0VfVVJFX1BOMV9TRVQobikJCSgoKHVpbnQ2NF90KShuKSA8PCBDRV9VUkVfUE4xX1NIRlQpICYgXAorI2RlZmluZSBDRV9VUkVfUE4xX1NFVChuKQkJKCgodTY0KShuKSA8PCBDRV9VUkVfUE4xX1NIRlQpICYgXAogCQkJCQkgQ0VfVVJFX1BOMV9NQVNLKQotI2RlZmluZSBDRV9VUkVfUE4yX1NFVChuKQkJKCgodWludDY0X3QpKG4pIDw8IENFX1VSRV9QTjJfU0hGVCkgJiBcCisjZGVmaW5lIENFX1VSRV9QTjJfU0VUKG4pCQkoKCh1NjQpKG4pIDw8IENFX1VSRV9QTjJfU0hGVCkgJiBcCiAJCQkJCSBDRV9VUkVfUE4yX01BU0spCiAKIC8qIGNlX3VyZV9wY2llX2NvbnRyb2wyIHJlZ2lzdGVyIGJpdCBtYXNrcyAmIHNoaWZ0cyAqLwpAQCAtNjgxLDkgKzY4MSw5IEBACiAjZGVmaW5lIENFX1VSRV9QU04xX01BU0sJCSgweDFGRkZVTEwgPDwgQ0VfVVJFX1BTTjFfU0hGVCkKICNkZWZpbmUgQ0VfVVJFX1BTTjJfU0hGVAkJMzIKICNkZWZpbmUgQ0VfVVJFX1BTTjJfTUFTSwkJKDB4MUZGRlVMTCA8PCBDRV9VUkVfUFNOMl9TSEZUKQotI2RlZmluZSBDRV9VUkVfUFNOMV9TRVQobikJCSgoKHVpbnQ2NF90KShuKSA8PCBDRV9VUkVfUFNOMV9TSEZUKSAmIFwKKyNkZWZpbmUgQ0VfVVJFX1BTTjFfU0VUKG4pCQkoKCh1NjQpKG4pIDw8IENFX1VSRV9QU04xX1NIRlQpICYgXAogCQkJCQkgQ0VfVVJFX1BTTjFfTUFTSykKLSNkZWZpbmUgQ0VfVVJFX1BTTjJfU0VUKG4pCQkoKCh1aW50NjRfdCkobikgPDwgQ0VfVVJFX1BTTjJfU0hGVCkgJiBcCisjZGVmaW5lIENFX1VSRV9QU04yX1NFVChuKQkJKCgodTY0KShuKSA8PCBDRV9VUkVfUFNOMl9TSEZUKSAmIFwKIAkJCQkJIENFX1VSRV9QU04yX01BU0spCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2NlX3Byb3ZpZGVyLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2NlX3Byb3ZpZGVyLmgKaW5kZXggY2I0MTQ5MC4uNmQ2MmIxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jZV9wcm92aWRlci5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY2VfcHJvdmlkZXIuaApAQCAtMjEsOSArMjEsOSBAQAogc3RydWN0IHRpb2NlX2NvbW1vbiB7CiAJc3RydWN0IHBjaWJ1c19idXNzb2Z0CWNlX3BjaWJ1czsJLyogY29tbW9uIHBjaWlvIGhlYWRlciAqLwogCi0JdWludDMyX3QJCWNlX3JldjsKLQl1aW50NjRfdAkJY2Vfa2VybmVsX3ByaXZhdGU7Ci0JdWludDY0X3QJCWNlX3Byb21fcHJpdmF0ZTsKKwl1MzIJCWNlX3JldjsKKwl1NjQJCWNlX2tlcm5lbF9wcml2YXRlOworCXU2NAkJY2VfcHJvbV9wcml2YXRlOwogfTsKIAogc3RydWN0IHRpb2NlX2tlcm5lbCB7CkBAIC0zMSwzMSArMzEsMzEgQEAKIAlzcGlubG9ja190CQljZV9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJY2VfZG1hbWFwX2xpc3Q7CiAKLQl1aW50NjRfdAkJY2VfYXRlNDBfc2hhZG93W1RJT0NFX05VTV9NNDBfQVRFU107Ci0JdWludDY0X3QJCWNlX2F0ZTMyNDBfc2hhZG93W1RJT0NFX05VTV9NMzI0MF9BVEVTXTsKLQl1aW50MzJfdAkJY2VfYXRlMzI0MF9wYWdlc2l6ZTsKKwl1NjQJCWNlX2F0ZTQwX3NoYWRvd1tUSU9DRV9OVU1fTTQwX0FURVNdOworCXU2NAkJY2VfYXRlMzI0MF9zaGFkb3dbVElPQ0VfTlVNX00zMjQwX0FURVNdOworCXUzMgkJY2VfYXRlMzI0MF9wYWdlc2l6ZTsKIAotCXVpbnQ4X3QJCQljZV9wb3J0MV9zZWNvbmRhcnk7CisJdTgJCQljZV9wb3J0MV9zZWNvbmRhcnk7CiAKIAkvKiBwZXItcG9ydCByZXNvdXJjZXMgKi8KIAlzdHJ1Y3QgewogCQlpbnQgCQlkaXJtYXBfcmVmY250OwotCQl1aW50NjRfdAlkaXJtYXBfc2hhZG93OworCQl1NjQJZGlybWFwX3NoYWRvdzsKIAl9IGNlX3BvcnRbVElPQ0VfTlVNX1BPUlRTXTsKIH07CiAKIHN0cnVjdCB0aW9jZV9kbWFtYXAgewogCXN0cnVjdCBsaXN0X2hlYWQJY2VfZG1hbWFwX2xpc3Q7CS8qIGhlYWRlZCBieSB0aW9jZV9rZXJuZWwgKi8KLQl1aW50MzJfdAkJcmVmY250OworCXUzMgkJcmVmY250OwogCi0JdWludDY0X3QJCW5ieXRlczsJCS8qICMgYnl0ZXMgbWFwcGVkICovCisJdTY0CQluYnl0ZXM7CQkvKiAjIGJ5dGVzIG1hcHBlZCAqLwogCi0JdWludDY0X3QJCWN0X3N0YXJ0OwkvKiBjb3JldGFsayBzdGFydCBhZGRyZXNzICovCi0JdWludDY0X3QJCXBjaV9zdGFydDsJLyogYnVzIHN0YXJ0IGFkZHJlc3MgKi8KKwl1NjQJCWN0X3N0YXJ0OwkvKiBjb3JldGFsayBzdGFydCBhZGRyZXNzICovCisJdTY0CQlwY2lfc3RhcnQ7CS8qIGJ1cyBzdGFydCBhZGRyZXNzICovCiAKLQl1aW50NjRfdAkJKmF0ZV9odzsJLyogaHcgcHRyIG9mIGZpcnN0IGF0ZSBpbiBtYXAgKi8KLQl1aW50NjRfdAkJKmF0ZV9zaGFkb3c7CS8qIHNoYWRvdyBwdHIgb2YgZmlyYXQgYXRlICovCi0JdWludDE2X3QJCWF0ZV9jb3VudDsJLyogIyBhdGUncyBpbiB0aGUgbWFwICovCisJdTY0CQkqYXRlX2h3OwkvKiBodyBwdHIgb2YgZmlyc3QgYXRlIGluIG1hcCAqLworCXU2NAkJKmF0ZV9zaGFkb3c7CS8qIHNoYWRvdyBwdHIgb2YgZmlyYXQgYXRlICovCisJdTE2CQlhdGVfY291bnQ7CS8qICMgYXRlJ3MgaW4gdGhlIG1hcCAqLwogfTsKIAogZXh0ZXJuIGludCB0aW9jZV9pbml0X3Byb3ZpZGVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jcC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jcC5oCmluZGV4IDVmMjQ4OWMuLmY0N2MwOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY3AuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2NwLmgKQEAgLTIxLDE4OSArMjEsMTg5IEBACiAgICAgLyogMHgwMDAwMDAtMHgwMEZGRkYgLS0gTG9jYWwgUmVnaXN0ZXJzICovCiAKICAgICAvKiAweDAwMDAwMC0weDAwMDA1NyAtLSAoTGVnYWN5IFdpZGdldCBTcGFjZSkgQ29uZmlndXJhdGlvbiAqLwotICAgIHVpbnQ2NF90CQljcF9pZDsJCQkJLyogMHgwMDAwMDAgKi8KLSAgICB1aW50NjRfdAkJY3Bfc3RhdDsJCQkvKiAweDAwMDAwOCAqLwotICAgIHVpbnQ2NF90CQljcF9lcnJfdXBwZXI7CQkJLyogMHgwMDAwMTAgKi8KLSAgICB1aW50NjRfdAkJY3BfZXJyX2xvd2VyOwkJCS8qIDB4MDAwMDE4ICovCisgICAgdTY0CQljcF9pZDsJCQkJLyogMHgwMDAwMDAgKi8KKyAgICB1NjQJCWNwX3N0YXQ7CQkJLyogMHgwMDAwMDggKi8KKyAgICB1NjQJCWNwX2Vycl91cHBlcjsJCQkvKiAweDAwMDAxMCAqLworICAgIHU2NAkJY3BfZXJyX2xvd2VyOwkJCS8qIDB4MDAwMDE4ICovCiAgICAgI2RlZmluZSBjcF9lcnIgY3BfZXJyX2xvd2VyCi0gICAgdWludDY0X3QJCWNwX2NvbnRyb2w7CQkJLyogMHgwMDAwMjAgKi8KLSAgICB1aW50NjRfdAkJY3BfcmVxX3RpbWVvdXQ7CQkJLyogMHgwMDAwMjggKi8KLSAgICB1aW50NjRfdAkJY3BfaW50cl91cHBlcjsJCQkvKiAweDAwMDAzMCAqLwotICAgIHVpbnQ2NF90CQljcF9pbnRyX2xvd2VyOwkJCS8qIDB4MDAwMDM4ICovCisgICAgdTY0CQljcF9jb250cm9sOwkJCS8qIDB4MDAwMDIwICovCisgICAgdTY0CQljcF9yZXFfdGltZW91dDsJCQkvKiAweDAwMDAyOCAqLworICAgIHU2NAkJY3BfaW50cl91cHBlcjsJCQkvKiAweDAwMDAzMCAqLworICAgIHU2NAkJY3BfaW50cl9sb3dlcjsJCQkvKiAweDAwMDAzOCAqLwogICAgICNkZWZpbmUgY3BfaW50ciBjcF9pbnRyX2xvd2VyCi0gICAgdWludDY0X3QJCWNwX2Vycl9jbWR3b3JkOwkJCS8qIDB4MDAwMDQwICovCi0gICAgdWludDY0X3QJCV9wYWRfMDAwMDQ4OwkJCS8qIDB4MDAwMDQ4ICovCi0gICAgdWludDY0X3QJCWNwX3RmbHVzaDsJCQkvKiAweDAwMDA1MCAqLworICAgIHU2NAkJY3BfZXJyX2NtZHdvcmQ7CQkJLyogMHgwMDAwNDAgKi8KKyAgICB1NjQJCV9wYWRfMDAwMDQ4OwkJCS8qIDB4MDAwMDQ4ICovCisgICAgdTY0CQljcF90Zmx1c2g7CQkJLyogMHgwMDAwNTAgKi8KIAogICAgIC8qIDB4MDAwMDU4LTB4MDAwMDdGIC0tIEJyaWRnZS1zcGVjaWZpYyBDb25maWd1cmF0aW9uICovCi0gICAgdWludDY0X3QJCWNwX2F1eF9lcnI7CQkJLyogMHgwMDAwNTggKi8KLSAgICB1aW50NjRfdAkJY3BfcmVzcF91cHBlcjsJCQkvKiAweDAwMDA2MCAqLwotICAgIHVpbnQ2NF90CQljcF9yZXNwX2xvd2VyOwkJCS8qIDB4MDAwMDY4ICovCisgICAgdTY0CQljcF9hdXhfZXJyOwkJCS8qIDB4MDAwMDU4ICovCisgICAgdTY0CQljcF9yZXNwX3VwcGVyOwkJCS8qIDB4MDAwMDYwICovCisgICAgdTY0CQljcF9yZXNwX2xvd2VyOwkJCS8qIDB4MDAwMDY4ICovCiAgICAgI2RlZmluZSBjcF9yZXNwIGNwX3Jlc3BfbG93ZXIKLSAgICB1aW50NjRfdAkJY3BfdHN0X3Bpbl9jdHJsOwkJLyogMHgwMDAwNzAgKi8KLSAgICB1aW50NjRfdAkJY3BfYWRkcl9sa2VycjsJCQkvKiAweDAwMDA3OCAqLworICAgIHU2NAkJY3BfdHN0X3Bpbl9jdHJsOwkJLyogMHgwMDAwNzAgKi8KKyAgICB1NjQJCWNwX2FkZHJfbGtlcnI7CQkJLyogMHgwMDAwNzggKi8KIAogICAgIC8qIDB4MDAwMDgwLTB4MDAwMDhGIC0tIFBNVSAmIE1BUCAqLwotICAgIHVpbnQ2NF90CQljcF9kaXJfbWFwOwkJCS8qIDB4MDAwMDgwICovCi0gICAgdWludDY0X3QJCV9wYWRfMDAwMDg4OwkJCS8qIDB4MDAwMDg4ICovCisgICAgdTY0CQljcF9kaXJfbWFwOwkJCS8qIDB4MDAwMDgwICovCisgICAgdTY0CQlfcGFkXzAwMDA4ODsJCQkvKiAweDAwMDA4OCAqLwogCiAgICAgLyogMHgwMDAwOTAtMHgwMDAwOUYgLS0gU1NSQU0gKi8KLSAgICB1aW50NjRfdAkJY3BfbWFwX2ZhdWx0OwkJCS8qIDB4MDAwMDkwICovCi0gICAgdWludDY0X3QJCV9wYWRfMDAwMDk4OwkJCS8qIDB4MDAwMDk4ICovCisgICAgdTY0CQljcF9tYXBfZmF1bHQ7CQkJLyogMHgwMDAwOTAgKi8KKyAgICB1NjQJCV9wYWRfMDAwMDk4OwkJCS8qIDB4MDAwMDk4ICovCiAKICAgICAvKiAweDAwMDBBMC0weDAwMDBBRiAtLSBBcmJpdHJhdGlvbiAqLwotICAgIHVpbnQ2NF90CQljcF9hcmI7CQkJCS8qIDB4MDAwMEEwICovCi0gICAgdWludDY0X3QJCV9wYWRfMDAwMEE4OwkJCS8qIDB4MDAwMEE4ICovCisgICAgdTY0CQljcF9hcmI7CQkJCS8qIDB4MDAwMEEwICovCisgICAgdTY0CQlfcGFkXzAwMDBBODsJCQkvKiAweDAwMDBBOCAqLwogCiAgICAgLyogMHgwMDAwQjAtMHgwMDAwQkYgLS0gTnVtYmVyIEluIEEgQ2FuIG9yIEFURSBQYXJpdHkgRXJyb3IgKi8KLSAgICB1aW50NjRfdAkJY3BfYXRlX3Bhcml0eV9lcnI7CQkvKiAweDAwMDBCMCAqLwotICAgIHVpbnQ2NF90CQlfcGFkXzAwMDBCODsJCQkvKiAweDAwMDBCOCAqLworICAgIHU2NAkJY3BfYXRlX3Bhcml0eV9lcnI7CQkvKiAweDAwMDBCMCAqLworICAgIHU2NAkJX3BhZF8wMDAwQjg7CQkJLyogMHgwMDAwQjggKi8KIAogICAgIC8qIDB4MDAwMEMwLTB4MDAwMEZGIC0tIFBDSS9HSU8gKi8KLSAgICB1aW50NjRfdAkJY3BfYnVzX3RpbWVvdXQ7CQkJLyogMHgwMDAwQzAgKi8KLSAgICB1aW50NjRfdAkJY3BfcGNpX2NmZzsJCQkvKiAweDAwMDBDOCAqLwotICAgIHVpbnQ2NF90CQljcF9wY2lfZXJyX3VwcGVyOwkJLyogMHgwMDAwRDAgKi8KLSAgICB1aW50NjRfdAkJY3BfcGNpX2Vycl9sb3dlcjsJCS8qIDB4MDAwMEQ4ICovCisgICAgdTY0CQljcF9idXNfdGltZW91dDsJCQkvKiAweDAwMDBDMCAqLworICAgIHU2NAkJY3BfcGNpX2NmZzsJCQkvKiAweDAwMDBDOCAqLworICAgIHU2NAkJY3BfcGNpX2Vycl91cHBlcjsJCS8qIDB4MDAwMEQwICovCisgICAgdTY0CQljcF9wY2lfZXJyX2xvd2VyOwkJLyogMHgwMDAwRDggKi8KICAgICAjZGVmaW5lIGNwX3BjaV9lcnIgY3BfcGNpX2Vycl9sb3dlcgotICAgIHVpbnQ2NF90CQlfcGFkXzAwMDBFMFs0XTsJCQkvKiAweDAwMDB7RTAuLkY4fSAqLworICAgIHU2NAkJX3BhZF8wMDAwRTBbNF07CQkJLyogMHgwMDAwe0UwLi5GOH0gKi8KIAogICAgIC8qIDB4MDAwMTAwLTB4MDAwMUZGIC0tIEludGVycnVwdCAqLwotICAgIHVpbnQ2NF90CQljcF9pbnRfc3RhdHVzOwkJCS8qIDB4MDAwMTAwICovCi0gICAgdWludDY0X3QJCWNwX2ludF9lbmFibGU7CQkJLyogMHgwMDAxMDggKi8KLSAgICB1aW50NjRfdAkJY3BfaW50X3JzdF9zdGF0OwkJLyogMHgwMDAxMTAgKi8KLSAgICB1aW50NjRfdAkJY3BfaW50X21vZGU7CQkJLyogMHgwMDAxMTggKi8KLSAgICB1aW50NjRfdAkJY3BfaW50X2RldmljZTsJCQkvKiAweDAwMDEyMCAqLwotICAgIHVpbnQ2NF90CQljcF9pbnRfaG9zdF9lcnI7CQkvKiAweDAwMDEyOCAqLwotICAgIHVpbnQ2NF90CQljcF9pbnRfYWRkcls4XTsJCQkvKiAweDAwMDF7MzAsLCw2OH0gKi8KLSAgICB1aW50NjRfdAkJY3BfZXJyX2ludF92aWV3OwkJLyogMHgwMDAxNzAgKi8KLSAgICB1aW50NjRfdAkJY3BfbXVsdF9pbnQ7CQkJLyogMHgwMDAxNzggKi8KLSAgICB1aW50NjRfdAkJY3BfZm9yY2VfYWx3YXlzWzhdOwkJLyogMHgwMDAxezgwLCwsQjh9ICovCi0gICAgdWludDY0X3QJCWNwX2ZvcmNlX3Bpbls4XTsJCS8qIDB4MDAwMXtDMCwsLEY4fSAqLworICAgIHU2NAkJY3BfaW50X3N0YXR1czsJCQkvKiAweDAwMDEwMCAqLworICAgIHU2NAkJY3BfaW50X2VuYWJsZTsJCQkvKiAweDAwMDEwOCAqLworICAgIHU2NAkJY3BfaW50X3JzdF9zdGF0OwkJLyogMHgwMDAxMTAgKi8KKyAgICB1NjQJCWNwX2ludF9tb2RlOwkJCS8qIDB4MDAwMTE4ICovCisgICAgdTY0CQljcF9pbnRfZGV2aWNlOwkJCS8qIDB4MDAwMTIwICovCisgICAgdTY0CQljcF9pbnRfaG9zdF9lcnI7CQkvKiAweDAwMDEyOCAqLworICAgIHU2NAkJY3BfaW50X2FkZHJbOF07CQkJLyogMHgwMDAxezMwLCwsNjh9ICovCisgICAgdTY0CQljcF9lcnJfaW50X3ZpZXc7CQkvKiAweDAwMDE3MCAqLworICAgIHU2NAkJY3BfbXVsdF9pbnQ7CQkJLyogMHgwMDAxNzggKi8KKyAgICB1NjQJCWNwX2ZvcmNlX2Fsd2F5c1s4XTsJCS8qIDB4MDAwMXs4MCwsLEI4fSAqLworICAgIHU2NAkJY3BfZm9yY2VfcGluWzhdOwkJLyogMHgwMDAxe0MwLCwsRjh9ICovCiAKICAgICAvKiAweDAwMDIwMC0weDAwMDI5OCAtLSBEZXZpY2UgKi8KLSAgICB1aW50NjRfdAkJY3BfZGV2aWNlWzRdOwkJCS8qIDB4MDAwMnswMCwsLDE4fSAqLwotICAgIHVpbnQ2NF90CQlfcGFkXzAwMDIyMFs0XTsJCQkvKiAweDAwMDJ7MjAsLCwzOH0gKi8KLSAgICB1aW50NjRfdAkJY3Bfd3JfcmVxX2J1Zls0XTsJCS8qIDB4MDAwMns0MCwsLDU4fSAqLwotICAgIHVpbnQ2NF90CQlfcGFkXzAwMDI2MFs0XTsJCQkvKiAweDAwMDJ7NjAsLCw3OH0gKi8KLSAgICB1aW50NjRfdAkJY3BfcnJiX21hcFsyXTsJCQkvKiAweDAwMDJ7ODAsLCw4OH0gKi8KKyAgICB1NjQJCWNwX2RldmljZVs0XTsJCQkvKiAweDAwMDJ7MDAsLCwxOH0gKi8KKyAgICB1NjQJCV9wYWRfMDAwMjIwWzRdOwkJCS8qIDB4MDAwMnsyMCwsLDM4fSAqLworICAgIHU2NAkJY3Bfd3JfcmVxX2J1Zls0XTsJCS8qIDB4MDAwMns0MCwsLDU4fSAqLworICAgIHU2NAkJX3BhZF8wMDAyNjBbNF07CQkJLyogMHgwMDAyezYwLCwsNzh9ICovCisgICAgdTY0CQljcF9ycmJfbWFwWzJdOwkJCS8qIDB4MDAwMns4MCwsLDg4fSAqLwogICAgICNkZWZpbmUgY3BfZXZlbl9yZXNwIGNwX3JyYl9tYXBbMF0JCQkvKiAweDAwMDI4MCAqLwogICAgICNkZWZpbmUgY3Bfb2RkX3Jlc3AgIGNwX3JyYl9tYXBbMV0JCQkvKiAweDAwMDI4OCAqLwotICAgIHVpbnQ2NF90CQljcF9yZXNwX3N0YXR1czsJCQkvKiAweDAwMDI5MCAqLwotICAgIHVpbnQ2NF90CQljcF9yZXNwX2NsZWFyOwkJCS8qIDB4MDAwMjk4ICovCisgICAgdTY0CQljcF9yZXNwX3N0YXR1czsJCQkvKiAweDAwMDI5MCAqLworICAgIHU2NAkJY3BfcmVzcF9jbGVhcjsJCQkvKiAweDAwMDI5OCAqLwogCi0gICAgdWludDY0X3QJCV9wYWRfMDAwMkEwWzEyXTsJCS8qIDB4MDAwMntBMC4uRjh9ICovCisgICAgdTY0CQlfcGFkXzAwMDJBMFsxMl07CQkvKiAweDAwMDJ7QTAuLkY4fSAqLwogCiAgICAgLyogMHgwMDAzMDAtMHgwMDAzRjggLS0gQnVmZmVyIEFkZHJlc3MgTWF0Y2ggUmVnaXN0ZXJzICovCiAgICAgc3RydWN0IHsKLQl1aW50NjRfdAl1cHBlcjsJCQkJLyogMHgwMDAzezAwLCwsRjB9ICovCi0JdWludDY0X3QJbG93ZXI7CQkJCS8qIDB4MDAwM3swOCwsLEY4fSAqLworCXU2NAl1cHBlcjsJCQkJLyogMHgwMDAzezAwLCwsRjB9ICovCisJdTY0CWxvd2VyOwkJCQkvKiAweDAwMDN7MDgsLCxGOH0gKi8KICAgICB9IGNwX2J1Zl9hZGRyX21hdGNoWzE2XTsKIAogICAgIC8qIDB4MDAwNDAwLTB4MDAwNUZGIC0tIFBlcmZvcm1hbmNlIE1vbml0b3IgUmVnaXN0ZXJzIChldmVuIG9ubHkpICovCiAgICAgc3RydWN0IHsKLQl1aW50NjRfdAlmbHVzaF93X3RvdWNoOwkJCS8qIDB4MDAwezQwMCwsLDVDMH0gKi8KLQl1aW50NjRfdAlmbHVzaF93b190b3VjaDsJCQkvKiAweDAwMHs0MDgsLCw1Qzh9ICovCi0JdWludDY0X3QJaW5mbGlnaHQ7CQkJLyogMHgwMDB7NDEwLCwsNUQwfSAqLwotCXVpbnQ2NF90CXByZWZldGNoOwkJCS8qIDB4MDAwezQxOCwsLDVEOH0gKi8KLQl1aW50NjRfdAl0b3RhbF9wY2lfcmV0cnk7CQkvKiAweDAwMHs0MjAsLCw1RTB9ICovCi0JdWludDY0X3QJbWF4X3BjaV9yZXRyeTsJCQkvKiAweDAwMHs0MjgsLCw1RTh9ICovCi0JdWludDY0X3QJbWF4X2xhdGVuY3k7CQkJLyogMHgwMDB7NDMwLCwsNUYwfSAqLwotCXVpbnQ2NF90CWNsZWFyX2FsbDsJCQkvKiAweDAwMHs0MzgsLCw1Rjh9ICovCisJdTY0CWZsdXNoX3dfdG91Y2g7CQkJLyogMHgwMDB7NDAwLCwsNUMwfSAqLworCXU2NAlmbHVzaF93b190b3VjaDsJCQkvKiAweDAwMHs0MDgsLCw1Qzh9ICovCisJdTY0CWluZmxpZ2h0OwkJCS8qIDB4MDAwezQxMCwsLDVEMH0gKi8KKwl1NjQJcHJlZmV0Y2g7CQkJLyogMHgwMDB7NDE4LCwsNUQ4fSAqLworCXU2NAl0b3RhbF9wY2lfcmV0cnk7CQkvKiAweDAwMHs0MjAsLCw1RTB9ICovCisJdTY0CW1heF9wY2lfcmV0cnk7CQkJLyogMHgwMDB7NDI4LCwsNUU4fSAqLworCXU2NAltYXhfbGF0ZW5jeTsJCQkvKiAweDAwMHs0MzAsLCw1RjB9ICovCisJdTY0CWNsZWFyX2FsbDsJCQkvKiAweDAwMHs0MzgsLCw1Rjh9ICovCiAgICAgfSBjcF9idWZfY291bnRbOF07CiAKIAogICAgIC8qIDB4MDAwNjAwLTB4MDAwOUZGIC0tIFBDSS9YIHJlZ2lzdGVycyAqLwotICAgIHVpbnQ2NF90CQljcF9wY2l4X2J1c19lcnJfYWRkcjsJCS8qIDB4MDAwNjAwICovCi0gICAgdWludDY0X3QJCWNwX3BjaXhfYnVzX2Vycl9hdHRyOwkJLyogMHgwMDA2MDggKi8KLSAgICB1aW50NjRfdAkJY3BfcGNpeF9idXNfZXJyX2RhdGE7CQkvKiAweDAwMDYxMCAqLwotICAgIHVpbnQ2NF90CQljcF9wY2l4X3Bpb19zcGxpdF9hZGRyOwkJLyogMHgwMDA2MTggKi8KLSAgICB1aW50NjRfdAkJY3BfcGNpeF9waW9fc3BsaXRfYXR0cjsJCS8qIDB4MDAwNjIwICovCi0gICAgdWludDY0X3QJCWNwX3BjaXhfZG1hX3JlcV9lcnJfYXR0cjsJLyogMHgwMDA2MjggKi8KLSAgICB1aW50NjRfdAkJY3BfcGNpeF9kbWFfcmVxX2Vycl9hZGRyOwkvKiAweDAwMDYzMCAqLwotICAgIHVpbnQ2NF90CQljcF9wY2l4X3RpbWVvdXQ7CQkvKiAweDAwMDYzOCAqLworICAgIHU2NAkJY3BfcGNpeF9idXNfZXJyX2FkZHI7CQkvKiAweDAwMDYwMCAqLworICAgIHU2NAkJY3BfcGNpeF9idXNfZXJyX2F0dHI7CQkvKiAweDAwMDYwOCAqLworICAgIHU2NAkJY3BfcGNpeF9idXNfZXJyX2RhdGE7CQkvKiAweDAwMDYxMCAqLworICAgIHU2NAkJY3BfcGNpeF9waW9fc3BsaXRfYWRkcjsJCS8qIDB4MDAwNjE4ICovCisgICAgdTY0CQljcF9wY2l4X3Bpb19zcGxpdF9hdHRyOwkJLyogMHgwMDA2MjAgKi8KKyAgICB1NjQJCWNwX3BjaXhfZG1hX3JlcV9lcnJfYXR0cjsJLyogMHgwMDA2MjggKi8KKyAgICB1NjQJCWNwX3BjaXhfZG1hX3JlcV9lcnJfYWRkcjsJLyogMHgwMDA2MzAgKi8KKyAgICB1NjQJCWNwX3BjaXhfdGltZW91dDsJCS8qIDB4MDAwNjM4ICovCiAKLSAgICB1aW50NjRfdAkJX3BhZF8wMDA2NDBbMjRdOwkJLyogMHgwMDB7NjQwLCwsNkY4fSAqLworICAgIHU2NAkJX3BhZF8wMDA2NDBbMjRdOwkJLyogMHgwMDB7NjQwLCwsNkY4fSAqLwogCiAgICAgLyogMHgwMDA3MDAtMHgwMDA3MzcgLS0gRGVidWcgUmVnaXN0ZXJzICovCi0gICAgdWludDY0X3QJCWNwX2N0X2RlYnVnX2N0bDsJCS8qIDB4MDAwNzAwICovCi0gICAgdWludDY0X3QJCWNwX2JyX2RlYnVnX2N0bDsJCS8qIDB4MDAwNzA4ICovCi0gICAgdWludDY0X3QJCWNwX211eDNfZGVidWdfY3RsOwkJLyogMHgwMDA3MTAgKi8KLSAgICB1aW50NjRfdAkJY3BfbXV4NF9kZWJ1Z19jdGw7CQkvKiAweDAwMDcxOCAqLwotICAgIHVpbnQ2NF90CQljcF9tdXg1X2RlYnVnX2N0bDsJCS8qIDB4MDAwNzIwICovCi0gICAgdWludDY0X3QJCWNwX211eDZfZGVidWdfY3RsOwkJLyogMHgwMDA3MjggKi8KLSAgICB1aW50NjRfdAkJY3BfbXV4N19kZWJ1Z19jdGw7CQkvKiAweDAwMDczMCAqLworICAgIHU2NAkJY3BfY3RfZGVidWdfY3RsOwkJLyogMHgwMDA3MDAgKi8KKyAgICB1NjQJCWNwX2JyX2RlYnVnX2N0bDsJCS8qIDB4MDAwNzA4ICovCisgICAgdTY0CQljcF9tdXgzX2RlYnVnX2N0bDsJCS8qIDB4MDAwNzEwICovCisgICAgdTY0CQljcF9tdXg0X2RlYnVnX2N0bDsJCS8qIDB4MDAwNzE4ICovCisgICAgdTY0CQljcF9tdXg1X2RlYnVnX2N0bDsJCS8qIDB4MDAwNzIwICovCisgICAgdTY0CQljcF9tdXg2X2RlYnVnX2N0bDsJCS8qIDB4MDAwNzI4ICovCisgICAgdTY0CQljcF9tdXg3X2RlYnVnX2N0bDsJCS8qIDB4MDAwNzMwICovCiAKLSAgICB1aW50NjRfdAkJX3BhZF8wMDA3MzhbODldOwkJLyogMHgwMDB7NzM4LCwsOUY4fSAqLworICAgIHU2NAkJX3BhZF8wMDA3MzhbODldOwkJLyogMHgwMDB7NzM4LCwsOUY4fSAqLwogCiAgICAgLyogMHgwMDBBMDAtMHgwMDBCRkYgLS0gUENJL1ggUmVhZCZXcml0ZSBCdWZmZXIgKi8KICAgICBzdHJ1Y3QgewotCXVpbnQ2NF90CWNwX2J1Zl9hZGRyOwkJCS8qIDB4MDAwe0EwMCwsLEFGMH0gKi8KLQl1aW50NjRfdAljcF9idWZfYXR0cjsJCQkvKiAwWDAwMHtBMDgsLCxBRjh9ICovCisJdTY0CWNwX2J1Zl9hZGRyOwkJCS8qIDB4MDAwe0EwMCwsLEFGMH0gKi8KKwl1NjQJY3BfYnVmX2F0dHI7CQkJLyogMFgwMDB7QTA4LCwsQUY4fSAqLwogICAgIH0gY3BfcGNpeF9yZWFkX2J1Zl82NFsxNl07CiAKICAgICBzdHJ1Y3QgewotCXVpbnQ2NF90CWNwX2J1Zl9hZGRyOwkJCS8qIDB4MDAwe0IwMCwsLEJFMH0gKi8KLQl1aW50NjRfdAljcF9idWZfYXR0cjsJCQkvKiAweDAwMHtCMDgsLCxCRTh9ICovCi0JdWludDY0X3QJY3BfYnVmX3ZhbGlkOwkJCS8qIDB4MDAwe0IxMCwsLEJGMH0gKi8KLQl1aW50NjRfdAlfX3BhZDE7CQkJCS8qIDB4MDAwe0IxOCwsLEJGOH0gKi8KKwl1NjQJY3BfYnVmX2FkZHI7CQkJLyogMHgwMDB7QjAwLCwsQkUwfSAqLworCXU2NAljcF9idWZfYXR0cjsJCQkvKiAweDAwMHtCMDgsLCxCRTh9ICovCisJdTY0CWNwX2J1Zl92YWxpZDsJCQkvKiAweDAwMHtCMTAsLCxCRjB9ICovCisJdTY0CV9fcGFkMTsJCQkJLyogMHgwMDB7QjE4LCwsQkY4fSAqLwogICAgIH0gY3BfcGNpeF93cml0ZV9idWZfNjRbOF07CiAKICAgICAvKiBFbmQgb2YgTG9jYWwgUmVnaXN0ZXJzIC0tIFN0YXJ0IG9mIEFkZHJlc3MgTWFwIHNwYWNlICovCiAKLSAgICBjaGFyCQlfcGFkXzAwMGMwMFsweDAxMDAwMCAtIDB4MDAwYzAwXTsKKyAgICBjaGFyCV9wYWRfMDAwYzAwWzB4MDEwMDAwIC0gMHgwMDBjMDBdOwogCiAgICAgLyogMHgwMTAwMDAtMHgwMTFGRjggLS0gSW50ZXJuYWwgQVRFIFJBTSAoQXV0byBQYXJpdHkgR2VuZXJhdGlvbikgKi8KLSAgICB1aW50NjRfdAkJY3BfaW50X2F0ZV9yYW1bMTAyNF07CQkvKiAweDAxMDAwMC0weDAxMUZGOCAqLworICAgIHU2NAkJY3BfaW50X2F0ZV9yYW1bMTAyNF07CQkvKiAweDAxMDAwMC0weDAxMUZGOCAqLwogCi0gICAgY2hhcgkJX3BhZF8wMTIwMDBbMHgxNDAwMCAtIDB4MDEyMDAwXTsKKyAgICBjaGFyCV9wYWRfMDEyMDAwWzB4MTQwMDAgLSAweDAxMjAwMF07CiAKICAgICAvKiAweDAxNDAwMC0weDAxNUZGOCAtLSBJbnRlcm5hbCBBVEUgUkFNIChNYW51YWwgUGFyaXR5IEdlbmVyYXRpb24pICovCi0gICAgdWludDY0X3QJCWNwX2ludF9hdGVfcmFtX21wWzEwMjRdOwkvKiAweDAxNDAwMC0weDAxNUZGOCAqLworICAgIHU2NAkJY3BfaW50X2F0ZV9yYW1fbXBbMTAyNF07CS8qIDB4MDE0MDAwLTB4MDE1RkY4ICovCiAKLSAgICBjaGFyCQlfcGFkXzAxNjAwMFsweDE4MDAwIC0gMHgwMTYwMDBdOworICAgIGNoYXIJX3BhZF8wMTYwMDBbMHgxODAwMCAtIDB4MDE2MDAwXTsKIAogICAgIC8qIDB4MTgwMDAtMHgxOTdGOCAtLSBUSU9DUCBXcml0ZSBSZXF1ZXN0IFJhbSAqLwotICAgIHVpbnQ2NF90CQljcF93cl9yZXFfbG93ZXJbMjU2XTsJCS8qIDB4MTgwMDAgLSAweDE4N0Y4ICovCi0gICAgdWludDY0X3QJCWNwX3dyX3JlcV91cHBlclsyNTZdOwkJLyogMHgxODgwMCAtIDB4MThGRjggKi8KLSAgICB1aW50NjRfdAkJY3Bfd3JfcmVxX3Bhcml0eVsyNTZdOwkJLyogMHgxOTAwMCAtIDB4MTk3RjggKi8KKyAgICB1NjQJCWNwX3dyX3JlcV9sb3dlclsyNTZdOwkJLyogMHgxODAwMCAtIDB4MTg3RjggKi8KKyAgICB1NjQJCWNwX3dyX3JlcV91cHBlclsyNTZdOwkJLyogMHgxODgwMCAtIDB4MThGRjggKi8KKyAgICB1NjQJCWNwX3dyX3JlcV9wYXJpdHlbMjU2XTsJCS8qIDB4MTkwMDAgLSAweDE5N0Y4ICovCiAKLSAgICBjaGFyCQlfcGFkXzAxOTgwMFsweDFDMDAwIC0gMHgwMTk4MDBdOworICAgIGNoYXIJX3BhZF8wMTk4MDBbMHgxQzAwMCAtIDB4MDE5ODAwXTsKIAogICAgIC8qIDB4MUMwMDAtMHgxRUZGOCAtLSBUSU9DUCBSZWFkIFJlc3BvbnNlIFJhbSAqLwotICAgIHVpbnQ2NF90CQljcF9yZF9yZXNwX2xvd2VyWzUxMl07CQkvKiAweDFDMDAwIC0gMHgxQ0ZGOCAqLwotICAgIHVpbnQ2NF90CQljcF9yZF9yZXNwX3VwcGVyWzUxMl07CQkvKiAweDFEMDAwIC0gMHgxREZGOCAqLwotICAgIHVpbnQ2NF90CQljcF9yZF9yZXNwX3Bhcml0eVs1MTJdOwkJLyogMHgxRTAwMCAtIDB4MUVGRjggKi8KKyAgICB1NjQJCWNwX3JkX3Jlc3BfbG93ZXJbNTEyXTsJCS8qIDB4MUMwMDAgLSAweDFDRkY4ICovCisgICAgdTY0CQljcF9yZF9yZXNwX3VwcGVyWzUxMl07CQkvKiAweDFEMDAwIC0gMHgxREZGOCAqLworICAgIHU2NAkJY3BfcmRfcmVzcF9wYXJpdHlbNTEyXTsJCS8qIDB4MUUwMDAgLSAweDFFRkY4ICovCiAKLSAgICBjaGFyCQlfcGFkXzAxRjAwMFsweDIwMDAwIC0gMHgwMUYwMDBdOworICAgIGNoYXIJX3BhZF8wMUYwMDBbMHgyMDAwMCAtIDB4MDFGMDAwXTsKIAogICAgIC8qIDB4MDIwMDAwLTB4MDIxRkZGIC0tIEhvc3QgRGV2aWNlIChDUCkgQ29uZmlndXJhdGlvbiBTcGFjZSAobm90IHVzZWQpICAqLwotICAgIGNoYXIJCV9wYWRfMDIwMDAwWzB4MDIxMDAwIC0gMHgyMDAwMF07CisgICAgY2hhcglfcGFkXzAyMDAwMFsweDAyMTAwMCAtIDB4MjAwMDBdOwogCiAgICAgLyogMHgwMjEwMDAtMHgwMjdGRkYgLS0gUENJIERldmljZSBDb25maWd1cmF0aW9uIFNwYWNlcyAqLwogICAgIHVuaW9uIHsKLQl1aW50OF90CQljWzB4MTAwMCAvIDFdOwkJCS8qIDB4MDJ7MDAwMCwsLDdGRkZ9ICovCi0JdWludDE2X3QJc1sweDEwMDAgLyAyXTsJCQkvKiAweDAyezAwMDAsLCw3RkZGfSAqLwotCXVpbnQzMl90CWxbMHgxMDAwIC8gNF07CQkJLyogMHgwMnswMDAwLCwsN0ZGRn0gKi8KLQl1aW50NjRfdAlkWzB4MTAwMCAvIDhdOwkJCS8qIDB4MDJ7MDAwMCwsLDdGRkZ9ICovCisJdTgJY1sweDEwMDAgLyAxXTsJCQkvKiAweDAyezAwMDAsLCw3RkZGfSAqLworCXUxNglzWzB4MTAwMCAvIDJdOwkJCS8qIDB4MDJ7MDAwMCwsLDdGRkZ9ICovCisJdTMyCWxbMHgxMDAwIC8gNF07CQkJLyogMHgwMnswMDAwLCwsN0ZGRn0gKi8KKwl1NjQJZFsweDEwMDAgLyA4XTsJCQkvKiAweDAyezAwMDAsLCw3RkZGfSAqLwogCXVuaW9uIHsKLQkgICAgdWludDhfdAljWzB4MTAwIC8gMV07Ci0JICAgIHVpbnQxNl90CXNbMHgxMDAgLyAyXTsKLQkgICAgdWludDMyX3QJbFsweDEwMCAvIDRdOwotCSAgICB1aW50NjRfdAlkWzB4MTAwIC8gOF07CisJICAgIHU4CWNbMHgxMDAgLyAxXTsKKwkgICAgdTE2CXNbMHgxMDAgLyAyXTsKKwkgICAgdTMyCWxbMHgxMDAgLyA0XTsKKwkgICAgdTY0CWRbMHgxMDAgLyA4XTsKIAl9IGZbOF07CiAgICAgfSBjcF90eXBlMF9jZmdfZGV2WzddOwkJCQkvKiAweDAyezEwMDAsLCw3RkZGfSAqLwogCiAgICAgLyogMHgwMjgwMDAtMHgwMjhGRkYgLS0gUENJIFR5cGUgMSBDb25maWd1cmF0aW9uIFNwYWNlICovCiAgICAgdW5pb24gewotCXVpbnQ4X3QJCWNbMHgxMDAwIC8gMV07CQkJLyogMHgwMjgwMDAtMHgwMjkwMDAgKi8KLQl1aW50MTZfdAlzWzB4MTAwMCAvIDJdOwkJCS8qIDB4MDI4MDAwLTB4MDI5MDAwICovCi0JdWludDMyX3QJbFsweDEwMDAgLyA0XTsJCQkvKiAweDAyODAwMC0weDAyOTAwMCAqLwotCXVpbnQ2NF90CWRbMHgxMDAwIC8gOF07CQkJLyogMHgwMjgwMDAtMHgwMjkwMDAgKi8KKwl1OAljWzB4MTAwMCAvIDFdOwkJCS8qIDB4MDI4MDAwLTB4MDI5MDAwICovCisJdTE2CXNbMHgxMDAwIC8gMl07CQkJLyogMHgwMjgwMDAtMHgwMjkwMDAgKi8KKwl1MzIJbFsweDEwMDAgLyA0XTsJCQkvKiAweDAyODAwMC0weDAyOTAwMCAqLworCXU2NAlkWzB4MTAwMCAvIDhdOwkJCS8qIDB4MDI4MDAwLTB4MDI5MDAwICovCiAJdW5pb24gewotCSAgICB1aW50OF90CWNbMHgxMDAgLyAxXTsKLQkgICAgdWludDE2X3QJc1sweDEwMCAvIDJdOwotCSAgICB1aW50MzJfdAlsWzB4MTAwIC8gNF07Ci0JICAgIHVpbnQ2NF90CWRbMHgxMDAgLyA4XTsKKwkgICAgdTgJY1sweDEwMCAvIDFdOworCSAgICB1MTYJc1sweDEwMCAvIDJdOworCSAgICB1MzIJbFsweDEwMCAvIDRdOworCSAgICB1NjQJZFsweDEwMCAvIDhdOwogCX0gZls4XTsKICAgICB9IGNwX3R5cGUxX2NmZzsJCQkJCS8qIDB4MDI4MDAwLTB4MDI5MDAwICovCiAKQEAgLTIxMSwzMCArMjExLDMwIEBACiAKICAgICAvKiAweDAzMDAwMC0weDAzMDAwNyAtLSBQQ0kgSW50ZXJydXB0IEFja25vd2xlZGdlIEN5Y2xlICovCiAgICAgdW5pb24gewotCXVpbnQ4X3QJCWNbOCAvIDFdOwotCXVpbnQxNl90CXNbOCAvIDJdOwotCXVpbnQzMl90CWxbOCAvIDRdOwotCXVpbnQ2NF90CWRbOCAvIDhdOworCXU4CWNbOCAvIDFdOworCXUxNglzWzggLyAyXTsKKwl1MzIJbFs4IC8gNF07CisJdTY0CWRbOCAvIDhdOwogICAgIH0gY3BfcGNpX2lhY2s7CQkJCQkvKiAweDAzMDAwMC0weDAzMDAwNyAqLwogCiAgICAgY2hhcgkJX3BhZF8wMzAwMDdbMHgwNDAwMDAtMHgwMzAwMDhdOwogCiAgICAgLyogMHgwNDAwMDAtMHgwNDAwMDcgLS0gUENJWCBTcGVjaWFsIEN5Y2xlICovCiAgICAgdW5pb24gewotCXVpbnQ4X3QJCWNbOCAvIDFdOwotCXVpbnQxNl90CXNbOCAvIDJdOwotCXVpbnQzMl90CWxbOCAvIDRdOwotCXVpbnQ2NF90CWRbOCAvIDhdOworCXU4CWNbOCAvIDFdOworCXUxNglzWzggLyAyXTsKKwl1MzIJbFs4IC8gNF07CisJdTY0CWRbOCAvIDhdOwogICAgIH0gY3BfcGNpeF9jeWNsZTsJCQkJCS8qIDB4MDQwMDAwLTB4MDQwMDA3ICovCiAKICAgICBjaGFyCQlfcGFkXzA0MDAwN1sweDIwMDAwMC0weDA0MDAwOF07CiAKICAgICAvKiAweDIwMDAwMC0weDdGRkZGRiAtLSBQQ0kvR0lPIERldmljZSBTcGFjZXMgKi8KICAgICB1bmlvbiB7Ci0JdWludDhfdAkJY1sweDEwMDAwMCAvIDFdOwotCXVpbnQxNl90CXNbMHgxMDAwMDAgLyAyXTsKLQl1aW50MzJfdAlsWzB4MTAwMDAwIC8gNF07Ci0JdWludDY0X3QJZFsweDEwMDAwMCAvIDhdOworCXU4CWNbMHgxMDAwMDAgLyAxXTsKKwl1MTYJc1sweDEwMDAwMCAvIDJdOworCXUzMglsWzB4MTAwMDAwIC8gNF07CisJdTY0CWRbMHgxMDAwMDAgLyA4XTsKICAgICB9IGNwX2RldmlvX3Jhd1s2XTsJCQkJCS8qIDB4MjAwMDAwLTB4N0ZGRkZGICovCiAKICAgICAjZGVmaW5lIGNwX2RldmlvKG4pICBjcF9kZXZpb19yYXdbKChuKTwyKT8obioyKToobisyKV0KQEAgLTI0MywxMCArMjQzLDEwIEBACiAKICAgICAvKiAweEEwMDAwMC0weEJGRkZGRiAtLSBQQ0kvR0lPIERldmljZSBTcGFjZXMgdy9mbHVzaCAgKi8KICAgICB1bmlvbiB7Ci0JdWludDhfdAkJY1sweDEwMDAwMCAvIDFdOwotCXVpbnQxNl90CXNbMHgxMDAwMDAgLyAyXTsKLQl1aW50MzJfdAlsWzB4MTAwMDAwIC8gNF07Ci0JdWludDY0X3QJZFsweDEwMDAwMCAvIDhdOworCXU4CWNbMHgxMDAwMDAgLyAxXTsKKwl1MTYJc1sweDEwMDAwMCAvIDJdOworCXUzMglsWzB4MTAwMDAwIC8gNF07CisJdTY0CWRbMHgxMDAwMDAgLyA4XTsKICAgICB9IGNwX2RldmlvX3Jhd19mbHVzaFs2XTsJCQkJLyogMHhBMDAwMDAtMHhCRkZGRkYgKi8KIAogICAgICNkZWZpbmUgY3BfZGV2aW9fZmx1c2gobikgIGNwX2RldmlvX3Jhd19mbHVzaFsoKG4pPDIpPyhuKjIpOihuKzIpXQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jeC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jeC5oCmluZGV4IDU2OTllNzUuLmQyOTcyODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY3guaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2N4LmgKQEAgLTQwLDEwICs0MCwxMCBAQAogfTsKIAogLyogY3JlYXRlIERNQSBhZGRyZXNzIGJ5IHN0cmlwcGluZyBBUyBiaXRzICovCi0jZGVmaW5lIFRJT0NYX0RNQV9BRERSKGEpICh1aW50NjRfdCkoKHVpbnQ2NF90KShhKSAmIDB4ZmZmZmNmZmZmZmZmZmZVTCkKKyNkZWZpbmUgVElPQ1hfRE1BX0FERFIoYSkgKHU2NCkoKHU2NCkoYSkgJiAweGZmZmZjZmZmZmZmZmZmVUwpCiAKLSNkZWZpbmUgVElPQ1hfVE9fVElPQ1hfRE1BX0FERFIoYSkgKHVpbnQ2NF90KSgoKHVpbnQ2NF90KShhKSAmIDB4ZmZmZmZmZmZmKSB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHVpbnQ2NF90KShhKSkgJiAweGZmZmZjMDAwMDAwMDAwVUwpIDw8MikpCisjZGVmaW5lIFRJT0NYX1RPX1RJT0NYX0RNQV9BRERSKGEpICh1NjQpKCgodTY0KShhKSAmIDB4ZmZmZmZmZmZmKSB8ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHU2NCkoYSkpICYgMHhmZmZmYzAwMDAwMDAwMFVMKSA8PDIpKQogCiAjZGVmaW5lIFRJT19DRV9BU0lDX1BBUlROVU0gMHhjZTAwCiAjZGVmaW5lIFRJT0NYX0NPUkVMRVQgMwpAQCAtNjMsMTAgKzYzLDEwIEBACiBleHRlcm4gaW50IGN4X2RldmljZV9yZWdpc3RlcihuYXNpZF90LCBpbnQsIGludCwgc3RydWN0IGh1YmRldl9pbmZvICosIGludCk7CiBleHRlcm4gaW50IGN4X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBjeF9kcnYgKik7CiBleHRlcm4gaW50IGN4X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgY3hfZHJ2ICopOwotZXh0ZXJuIHVpbnQ2NF90IHRpb2N4X2RtYV9hZGRyKHVpbnQ2NF90IGFkZHIpOwotZXh0ZXJuIHVpbnQ2NF90IHRpb2N4X3N3aW5fYmFzZShpbnQgbmFzaWQpOwotZXh0ZXJuIHZvaWQgdGlvY3hfbW1yX3N0b3JlKGludCBuYXNpZCwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCB2YWx1ZSk7Ci1leHRlcm4gdWludDY0X3QgdGlvY3hfbW1yX2xvYWQoaW50IG5hc2lkLCB1aW50NjRfdCBvZmZzZXQpOworZXh0ZXJuIHU2NCB0aW9jeF9kbWFfYWRkcih1NjQgYWRkcik7CitleHRlcm4gdTY0IHRpb2N4X3N3aW5fYmFzZShpbnQgbmFzaWQpOworZXh0ZXJuIHZvaWQgdGlvY3hfbW1yX3N0b3JlKGludCBuYXNpZCwgdTY0IG9mZnNldCwgdTY0IHZhbHVlKTsKK2V4dGVybiB1NjQgdGlvY3hfbW1yX2xvYWQoaW50IG5hc2lkLCB1NjQgb2Zmc2V0KTsKIAogI2VuZGlmCQkJCS8vICBfX0tFUk5FTF9fCiAjZW5kaWYJCQkJLy8gX0FTTV9JQTY0X1NOX1RJT19USU9DWF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9idXMtc2guaCBiL2luY2x1ZGUvYXNtLXNoL2J1cy1zaC5oCmluZGV4IDgzYzVkMmYuLmU0MmQ2M2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2J1cy1zaC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2J1cy1zaC5oCkBAIC0yMSw2ICsyMSw3IEBACiAJdm9pZAkJKm1hcGJhc2U7CiAJdW5zaWduZWQgaW50CWlycVs2XTsKIAl1NjQJCSpkbWFfbWFzazsKKwl1NjQJCWNvaGVyZW50X2RtYV9tYXNrOwogfTsKIAogI2RlZmluZSB0b19zaF9kZXYoZCkJY29udGFpbmVyX29mKChkKSwgc3RydWN0IHNoX2RldiwgZGV2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY2xvY2suaCBiL2luY2x1ZGUvYXNtLXNoL2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRmYjc1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2Nsb2NrLmgKQEAgLTAsMCArMSw2MSBAQAorI2lmbmRlZiBfX0FTTV9TSF9DTE9DS19ICisjZGVmaW5lIF9fQVNNX1NIX0NMT0NLX0gKKworI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RydWN0IGNsazsKKworc3RydWN0IGNsa19vcHMgeworCXZvaWQgKCppbml0KShzdHJ1Y3QgY2xrICpjbGspOworCXZvaWQgKCplbmFibGUpKHN0cnVjdCBjbGsgKmNsayk7CisJdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBjbGsgKmNsayk7CisJdm9pZCAoKnJlY2FsYykoc3RydWN0IGNsayAqY2xrKTsKKwlpbnQgKCpzZXRfcmF0ZSkoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworfTsKKworc3RydWN0IGNsayB7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCWNvbnN0IGNoYXIJCSpuYW1lOworCisJc3RydWN0IG1vZHVsZQkJKm93bmVyOworCisJc3RydWN0IGNsawkJKnBhcmVudDsKKwlzdHJ1Y3QgY2xrX29wcwkJKm9wczsKKworCXN0cnVjdCBrcmVmCQlrcmVmOworCisJdW5zaWduZWQgbG9uZwkJcmF0ZTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKK307CisKKyNkZWZpbmUgQ0xLX0FMV0FZU19FTkFCTEVECSgxIDw8IDApCisjZGVmaW5lIENMS19SQVRFX1BST1BBR0FURVMJKDEgPDwgMSkKKworLyogU2hvdWxkIGJlIGRlZmluZWQgYnkgcHJvY2Vzc29yLXNwZWNpZmljIGNvZGUgKi8KK3ZvaWQgYXJjaF9pbml0X2Nsa19vcHMoc3RydWN0IGNsa19vcHMgKiosIGludCB0eXBlKTsKKworLyogYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMgKi8KK2ludCBjbGtfaW5pdCh2b2lkKTsKKworaW50IF9fY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICopOworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqKTsKKwordm9pZCBfX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKik7Cit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKik7CisKK2ludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nIHJhdGUpOwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqKTsKK3ZvaWQgY2xrX3JlY2FsY19yYXRlKHN0cnVjdCBjbGsgKik7CisKK3N0cnVjdCBjbGsgKmNsa19nZXQoY29uc3QgY2hhciAqaWQpOwordm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKik7CisKK2ludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqKTsKK3ZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqKTsKKworaW50IHNob3dfY2xvY2tzKHN0cnVjdCBzZXFfZmlsZSAqbSk7CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9DTE9DS19IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvZG1hLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2RtYS5oCmluZGV4IGI5NzJlNzEuLjk1NDgwMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9kbWEuaApAQCAtMyw1ICszLDM0IEBACiAKICNkZWZpbmUgU0hfRE1BQ19CQVNFCTB4YTQwMDAwMjAKIAotI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfRE1BX0ggKi8KKy8qIERlZmluaXRpb25zIGZvciB0aGUgU3VwZXJIIERNQUMgKi8KKyNkZWZpbmUgVE1fQlVSU1QJMHgwMDAwMDAyMAorI2RlZmluZSBUU184CQkweDAwMDAwMDAwCisjZGVmaW5lIFRTXzE2CQkweDAwMDAwMDA4CisjZGVmaW5lIFRTXzMyCQkweDAwMDAwMDEwCisjZGVmaW5lIFRTXzEyOAkJMHgwMDAwMDAxOAogCisjZGVmaW5lIENIQ1JfVFNfTUFTSwkweDE4CisjZGVmaW5lIENIQ1JfVFNfU0hJRlQJMworCisjZGVmaW5lIERNQU9SX0lOSVQJRE1BT1JfRE1FCisKKy8qCisgKiBUaGUgU3VwZXJIIERNQUMgc3VwcG9ydHMgYSBudW1iZXIgb2YgdHJhbnNtaXQgc2l6ZXMsIHdlIGxpc3QgdGhlbSBoZXJlLAorICogd2l0aCB0aGVpciByZXNwZWN0aXZlIHZhbHVlcyBhcyB0aGV5IGFwcGVhciBpbiB0aGUgQ0hDUiByZWdpc3RlcnMuCisgKi8KK2VudW0geworCVhNSVRfU1pfOEJJVCwKKwlYTUlUX1NaXzE2QklULAorCVhNSVRfU1pfMzJCSVQsCisJWE1JVF9TWl8xMjhCSVQsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gX19hdHRyaWJ1dGVfXyAoKHVzZWQpKSA9IHsKKwlbWE1JVF9TWl84QklUXQkJPSAwLAorCVtYTUlUX1NaXzE2QklUXQkJPSAxLAorCVtYTUlUX1NaXzMyQklUXQkJPSAyLAorCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAorfTsKKworI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZG1hLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2RtYS5oCmluZGV4IGUyYjkxYWQuLjBkZmU2MWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9kbWEuaApAQCAtMSwxNyArMSw0OSBAQAogI2lmbmRlZiBfX0FTTV9DUFVfU0g0X0RNQV9ICiAjZGVmaW5lIF9fQVNNX0NQVV9TSDRfRE1BX0gKIAorI2lmZGVmIENPTkZJR19DUFVfU0g0QQorI2RlZmluZSBTSF9ETUFDX0JBU0UJMHhmYzgwODAyMAorI2Vsc2UKICNkZWZpbmUgU0hfRE1BQ19CQVNFCTB4ZmZhMDAwMDAKKyNlbmRpZgogCi0jZGVmaW5lIFNBUgkoKHVuc2lnbmVkIGxvbmdbXSl7U0hfRE1BQ19CQVNFICsgMHgwMCwgU0hfRE1BQ19CQVNFICsgMHgxMCwgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4MjAsIFNIX0RNQUNfQkFTRSArIDB4MzB9KQotI2RlZmluZSBEQVIJKCh1bnNpZ25lZCBsb25nW10pe1NIX0RNQUNfQkFTRSArIDB4MDQsIFNIX0RNQUNfQkFTRSArIDB4MTQsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDI0LCBTSF9ETUFDX0JBU0UgKyAweDM0fSkKLSNkZWZpbmUgRE1BVENSCSgodW5zaWduZWQgbG9uZ1tdKXtTSF9ETUFDX0JBU0UgKyAweDA4LCBTSF9ETUFDX0JBU0UgKyAweDE4LCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHgyOCwgU0hfRE1BQ19CQVNFICsgMHgzOH0pCi0jZGVmaW5lIENIQ1IJKCh1bnNpZ25lZCBsb25nW10pe1NIX0RNQUNfQkFTRSArIDB4MGMsIFNIX0RNQUNfQkFTRSArIDB4MWMsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDJjLCBTSF9ETUFDX0JBU0UgKyAweDNjfSkKLSNkZWZpbmUgRE1BT1IJKFNIX0RNQUNfQkFTRSArIDB4NDApCisvKiBEZWZpbml0aW9ucyBmb3IgdGhlIFN1cGVySCBETUFDICovCisjZGVmaW5lIFRNX0JVUlNUCTB4MDAwMDA4MAorI2RlZmluZSBUU184CQkweDAwMDAwMDEwCisjZGVmaW5lIFRTXzE2CQkweDAwMDAwMDIwCisjZGVmaW5lIFRTXzMyCQkweDAwMDAwMDMwCisjZGVmaW5lIFRTXzY0CQkweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0hDUl9UU19NQVNLCTB4MzAKKyNkZWZpbmUgQ0hDUl9UU19TSElGVAk0CisKKyNkZWZpbmUgRE1BT1JfQ09ECTB4MDAwMDAwMDgKKworI2RlZmluZSBETUFPUl9JTklUCSggMHg4MDAwIHwgRE1BT1JfRE1FICkKKworLyoKKyAqIFRoZSBTdXBlckggRE1BQyBzdXBwb3J0cyBhIG51bWJlciBvZiB0cmFuc21pdCBzaXplcywgd2UgbGlzdCB0aGVtIGhlcmUsCisgKiB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWVzIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBDSENSIHJlZ2lzdGVycy4KKyAqCisgKiBEZWZhdWx0cyB0byBhIDY0LWJpdCB0cmFuc2ZlciBzaXplLgorICovCitlbnVtIHsKKwlYTUlUX1NaXzY0QklULAorCVhNSVRfU1pfOEJJVCwKKwlYTUlUX1NaXzE2QklULAorCVhNSVRfU1pfMzJCSVQsCisJWE1JVF9TWl8yNTZCSVQsCit9OworCisvKgorICogVGhlIERNQSBjb3VudCBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSBfX2F0dHJpYnV0ZV9fICgodXNlZCkpID0geworCVtYTUlUX1NaXzY0QklUXQkJPSAzLAorCVtYTUlUX1NaXzhCSVRdCQk9IDAsCisJW1hNSVRfU1pfMTZCSVRdCQk9IDEsCisJW1hNSVRfU1pfMzJCSVRdCQk9IDIsCisJW1hNSVRfU1pfMjU2QklUXQk9IDUsCit9OwogCiAjZW5kaWYgLyogX19BU01fQ1BVX1NINF9ETUFfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2ZyZXEuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZnJlcS5oCmluZGV4IDIwMWQ5NGYuLmVmMmI5YjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZnJlcS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZnJlcS5oCkBAIC0xMiw2ICsxMiw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwKQogI2RlZmluZSBGUlFDUgkJICAgICAgICAweGE0MTUwMDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCisjZGVmaW5lCUZSUUNSCQkJMHhmZmM4MDAwMAogI2Vsc2UKICNkZWZpbmUgRlJRQ1IJCQkweGZmYzAwMDAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1zaC9kbWEtbWFwcGluZy5oCmluZGV4IGQzZmE1YzIuLjQ4ZjFmNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvZG1hLW1hcHBpbmcuaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNpX2J1c190eXBlOwpAQCAtMTQxLDI0ICsxNDIsMjQgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3N0YXRpYyB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogCV9fYXR0cmlidXRlX18gKChhbGlhcygiZG1hX3N5bmNfc2luZ2xlIikpKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotCV9fYXR0cmlidXRlX18gKChhbGlhcygiZG1hX3N5bmNfc2luZ2xlIikpKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorc3RhdGljIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAogCQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCisJX19hdHRyaWJ1dGVfXyAoKGFsaWFzKCJkbWFfc3luY19zaW5nbGUiKSkpOworCitzdGF0aWMgdm9pZCBkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIAlfX2F0dHJpYnV0ZV9fICgoYWxpYXMoImRtYV9zeW5jX3NnIikpKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCitzdGF0aWMgdm9pZCBkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIAlfX2F0dHJpYnV0ZV9fICgoYWxpYXMoImRtYV9zeW5jX3NnIikpKTsKIAogc3RhdGljIGlubGluZSBpbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2RtYS5oIGIvaW5jbHVkZS9hc20tc2gvZG1hLmgKaW5kZXggOGU5NDM2MC4uYTExOGEwZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2RtYS5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS9kbWEuaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKQEAgLTU0LDggKzU1LDggQEAKICAqIERNQSBjaGFubmVsIGNhcGFiaWxpdGllcyAvIGZsYWdzCiAgKi8KIGVudW0gewotCURNQV9DT05GSUdVUkVECQkJPSAweDAwLAogCURNQV9URUlfQ0FQQUJMRQkJCT0gMHgwMSwKKwlETUFfQ09ORklHVVJFRAkJCT0gMHgwMiwKIH07CiAKIGV4dGVybiBzcGlubG9ja190IGRtYV9zcGluX2xvY2s7CkBAIC03NCw3ICs3NSw4IEBACiBzdHJ1Y3QgZG1hX2NoYW5uZWwgewogCWNoYXIgZGV2X2lkWzE2XTsKIAotCXVuc2lnbmVkIGludCBjaGFuOworCXVuc2lnbmVkIGludCBjaGFuOwkJLyogUGh5c2ljYWwgY2hhbm5lbCBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgdmNoYW47CQkvKiBWaXJ0dWFsIGNoYW5uZWwgbnVtYmVyICovCiAJdW5zaWduZWQgaW50IG1vZGU7CiAJdW5zaWduZWQgaW50IGNvdW50OwogCkBAIC05MSw2ICs5Myw4IEBACiB9OwogCiBzdHJ1Y3QgZG1hX2luZm8geworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKIAljb25zdCBjaGFyICpuYW1lOwogCXVuc2lnbmVkIGludCBucl9jaGFubmVsczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTMwLDcgKzEzNCwxMSBAQAogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCiAvKiBhcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zeXNmcy5jICovCi1leHRlcm4gaW50IGRtYV9jcmVhdGVfc3lzZnNfZmlsZXMoc3RydWN0IGRtYV9jaGFubmVsICopOworZXh0ZXJuIGludCBkbWFfY3JlYXRlX3N5c2ZzX2ZpbGVzKHN0cnVjdCBkbWFfY2hhbm5lbCAqLCBzdHJ1Y3QgZG1hX2luZm8gKik7CitleHRlcm4gdm9pZCBkbWFfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHN0cnVjdCBkbWFfY2hhbm5lbCAqLCBzdHJ1Y3QgZG1hX2luZm8gKik7CisjZWxzZQorI2RlZmluZSBkbWFfY3JlYXRlX3N5c2ZzX2ZpbGUoY2hhbm5lbCwgaW5mbykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX3JlbW92ZV9zeXNmc19maWxlKGNoYW5uZWwsIGluZm8pCQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQ0kKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2ZyZXEuaCBiL2luY2x1ZGUvYXNtLXNoL2ZyZXEuaAppbmRleCAyYzBmZGU0Li4zOWMwZTA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9mcmVxLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvZnJlcS5oCkBAIC0xNCwxNiArMTQsNSBAQAogCiAjaW5jbHVkZSA8YXNtL2NwdS9mcmVxLmg+CiAKLS8qIGFyY2gvc2gva2VybmVsL3RpbWUuYyAqLwotZXh0ZXJuIHZvaWQgZ2V0X2N1cnJlbnRfZnJlcXVlbmN5X2Rpdmlzb3JzKHVuc2lnbmVkIGludCAqaWZjLCB1bnNpZ25lZCBpbnQgKnBmYywgdW5zaWduZWQgaW50ICpiZmMpOwotCi1leHRlcm4gdW5zaWduZWQgaW50IGdldF9pZmNfZGl2aXNvcih1bnNpZ25lZCBpbnQgdmFsdWUpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRfaWZjX2Rpdmlzb3IodW5zaWduZWQgaW50IHZhbHVlKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X2lmY19kaXZpc29yKHVuc2lnbmVkIGludCB2YWx1ZSk7Ci0KLWV4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X2lmY192YWx1ZSh1bnNpZ25lZCBpbnQgZGl2aXNvcik7Ci1leHRlcm4gdW5zaWduZWQgaW50IGdldF9wZmNfdmFsdWUodW5zaWduZWQgaW50IGRpdmlzb3IpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRfYmZjX3ZhbHVlKHVuc2lnbmVkIGludCBkaXZpc29yKTsKLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0FTTV9TSF9GUkVRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9pby5oCmluZGV4IDZiYzM0M2ZlLi5iMGIyOTM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2lvLmgKQEAgLTExLDcgKzExLDcgQEAKICAqIEZvciByZWFke2IsdyxsfSBhbmQgd3JpdGV7Yix3LGx9IHRoZXJlIGFyZSBhbHNvIF9fcmF3IHZlcnNpb25zLCB3aGljaAogICogZG8gbm90IGhhdmUgYSBtZW1vcnkgYmFycmllciBhZnRlciB0aGVtLgogICoKLSAqIEluIGFkZGl0aW9uLCB3ZSBoYXZlIAorICogSW4gYWRkaXRpb24sIHdlIGhhdmUKICAqICAgY3RybF9pbntiLHcsbH0vY3RybF9vdXR7Yix3LGx9IGZvciBTdXBlckggc3BlY2lmaWMgSS9PLgogICogICB3aGljaCBhcmUgcHJvY2Vzc29yIHNwZWNpZmljLgogICovCkBAIC0yMywxOSArMjMsMjcgQEAKICAqICBpbmIgICBieSBkZWZhdWx0IGV4cGFuZHMgdG8gX2luYiwgYnV0IHRoZSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgbWF5CiAgKiAgICAgICAgZGVmaW5lIGl0IHRvIF9faW5iIGlmIGl0IGNob29zZXMuCiAgKi8KLQorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvbWFwLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCiAKIC8qCiAgKiBEZXBlbmRpbmcgb24gd2hpY2ggcGxhdGZvcm0gd2UgYXJlIHJ1bm5pbmcgb24sIHdlIG5lZWQgZGlmZmVyZW50CiAgKiBJL08gZnVuY3Rpb25zLgogICovCisjZGVmaW5lIF9fSU9fUFJFRklYCWdlbmVyaWMKKyNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgogCi0jaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBtYXliZWJhZGlvKHBvcnQpIFwKKyAgcHJpbnRrKEtFUk5fRVJSICJiYWQgUEMtbGlrZSBpbyAlczoldSBmb3IgcG9ydCAweCVseCBhdCAweCUwOHhcbiIsIFwKKwkgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgKHBvcnQpLCAodTMyKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKKwogLyoKICAqIFNpbmNlIGJvYXJkcyBhcmUgYWJsZSB0byBkZWZpbmUgdGhlaXIgb3duIHNldCBvZiBJL08gcm91dGluZXMgdGhyb3VnaAogICogdGhlaXIgcmVzcGVjdGl2ZSBtYWNoaW5lIHZlY3Rvciwgd2UgYWx3YXlzIHdyYXAgdGhyb3VnaCB0aGUgbXYuCkBAIC00NCwxMTMgKzUyLDEyMCBAQAogICogYSBnaXZlbiByb3V0aW5lLCBpdCB3aWxsIGJlIHdyYXBwZWQgdG8gZ2VuZXJpYyBjb2RlIGF0IHJ1bi10aW1lLgogICovCiAKLSMgZGVmaW5lIF9faW5iKHApCXNoX212Lm12X2luYigocCkpCi0jIGRlZmluZSBfX2ludyhwKQlzaF9tdi5tdl9pbncoKHApKQotIyBkZWZpbmUgX19pbmwocCkJc2hfbXYubXZfaW5sKChwKSkKLSMgZGVmaW5lIF9fb3V0Yih4LHApCXNoX212Lm12X291dGIoKHgpLChwKSkKLSMgZGVmaW5lIF9fb3V0dyh4LHApCXNoX212Lm12X291dHcoKHgpLChwKSkKLSMgZGVmaW5lIF9fb3V0bCh4LHApCXNoX212Lm12X291dGwoKHgpLChwKSkKKyNkZWZpbmUgX19pbmIocCkJc2hfbXYubXZfaW5iKChwKSkKKyNkZWZpbmUgX19pbncocCkJc2hfbXYubXZfaW53KChwKSkKKyNkZWZpbmUgX19pbmwocCkJc2hfbXYubXZfaW5sKChwKSkKKyNkZWZpbmUgX19vdXRiKHgscCkJc2hfbXYubXZfb3V0YigoeCksKHApKQorI2RlZmluZSBfX291dHcoeCxwKQlzaF9tdi5tdl9vdXR3KCh4KSwocCkpCisjZGVmaW5lIF9fb3V0bCh4LHApCXNoX212Lm12X291dGwoKHgpLChwKSkKIAotIyBkZWZpbmUgX19pbmJfcChwKQlzaF9tdi5tdl9pbmJfcCgocCkpCi0jIGRlZmluZSBfX2lud19wKHApCXNoX212Lm12X2lud19wKChwKSkKLSMgZGVmaW5lIF9faW5sX3AocCkJc2hfbXYubXZfaW5sX3AoKHApKQotIyBkZWZpbmUgX19vdXRiX3AoeCxwKQlzaF9tdi5tdl9vdXRiX3AoKHgpLChwKSkKLSMgZGVmaW5lIF9fb3V0d19wKHgscCkJc2hfbXYubXZfb3V0d19wKCh4KSwocCkpCi0jIGRlZmluZSBfX291dGxfcCh4LHApCXNoX212Lm12X291dGxfcCgoeCksKHApKQorI2RlZmluZSBfX2luYl9wKHApCXNoX212Lm12X2luYl9wKChwKSkKKyNkZWZpbmUgX19pbndfcChwKQlzaF9tdi5tdl9pbndfcCgocCkpCisjZGVmaW5lIF9faW5sX3AocCkJc2hfbXYubXZfaW5sX3AoKHApKQorI2RlZmluZSBfX291dGJfcCh4LHApCXNoX212Lm12X291dGJfcCgoeCksKHApKQorI2RlZmluZSBfX291dHdfcCh4LHApCXNoX212Lm12X291dHdfcCgoeCksKHApKQorI2RlZmluZSBfX291dGxfcCh4LHApCXNoX212Lm12X291dGxfcCgoeCksKHApKQogCi0jIGRlZmluZSBfX2luc2IocCxiLGMpCXNoX212Lm12X2luc2IoKHApLCAoYiksIChjKSkKLSMgZGVmaW5lIF9faW5zdyhwLGIsYykJc2hfbXYubXZfaW5zdygocCksIChiKSwgKGMpKQotIyBkZWZpbmUgX19pbnNsKHAsYixjKQlzaF9tdi5tdl9pbnNsKChwKSwgKGIpLCAoYykpCi0jIGRlZmluZSBfX291dHNiKHAsYixjKQlzaF9tdi5tdl9vdXRzYigocCksIChiKSwgKGMpKQotIyBkZWZpbmUgX19vdXRzdyhwLGIsYykJc2hfbXYubXZfb3V0c3coKHApLCAoYiksIChjKSkKLSMgZGVmaW5lIF9fb3V0c2wocCxiLGMpCXNoX212Lm12X291dHNsKChwKSwgKGIpLCAoYykpCisjZGVmaW5lIF9faW5zYihwLGIsYykJc2hfbXYubXZfaW5zYigocCksIChiKSwgKGMpKQorI2RlZmluZSBfX2luc3cocCxiLGMpCXNoX212Lm12X2luc3coKHApLCAoYiksIChjKSkKKyNkZWZpbmUgX19pbnNsKHAsYixjKQlzaF9tdi5tdl9pbnNsKChwKSwgKGIpLCAoYykpCisjZGVmaW5lIF9fb3V0c2IocCxiLGMpCXNoX212Lm12X291dHNiKChwKSwgKGIpLCAoYykpCisjZGVmaW5lIF9fb3V0c3cocCxiLGMpCXNoX212Lm12X291dHN3KChwKSwgKGIpLCAoYykpCisjZGVmaW5lIF9fb3V0c2wocCxiLGMpCXNoX212Lm12X291dHNsKChwKSwgKGIpLCAoYykpCiAKLSMgZGVmaW5lIF9fcmVhZGIoYSkJc2hfbXYubXZfcmVhZGIoKGEpKQotIyBkZWZpbmUgX19yZWFkdyhhKQlzaF9tdi5tdl9yZWFkdygoYSkpCi0jIGRlZmluZSBfX3JlYWRsKGEpCXNoX212Lm12X3JlYWRsKChhKSkKLSMgZGVmaW5lIF9fd3JpdGViKHYsYSkJc2hfbXYubXZfd3JpdGViKCh2KSwoYSkpCi0jIGRlZmluZSBfX3dyaXRldyh2LGEpCXNoX212Lm12X3dyaXRldygodiksKGEpKQotIyBkZWZpbmUgX193cml0ZWwodixhKQlzaF9tdi5tdl93cml0ZWwoKHYpLChhKSkKKyNkZWZpbmUgX19yZWFkYihhKQlzaF9tdi5tdl9yZWFkYigoYSkpCisjZGVmaW5lIF9fcmVhZHcoYSkJc2hfbXYubXZfcmVhZHcoKGEpKQorI2RlZmluZSBfX3JlYWRsKGEpCXNoX212Lm12X3JlYWRsKChhKSkKKyNkZWZpbmUgX193cml0ZWIodixhKQlzaF9tdi5tdl93cml0ZWIoKHYpLChhKSkKKyNkZWZpbmUgX193cml0ZXcodixhKQlzaF9tdi5tdl93cml0ZXcoKHYpLChhKSkKKyNkZWZpbmUgX193cml0ZWwodixhKQlzaF9tdi5tdl93cml0ZWwoKHYpLChhKSkKIAotIyBkZWZpbmUgX19pb3JlbWFwKGEscykJc2hfbXYubXZfaW9yZW1hcCgoYSksIChzKSkKLSMgZGVmaW5lIF9faW91bm1hcChhKQlzaF9tdi5tdl9pb3VubWFwKChhKSkKKyNkZWZpbmUgaW5iCQlfX2luYgorI2RlZmluZSBpbncJCV9faW53CisjZGVmaW5lIGlubAkJX19pbmwKKyNkZWZpbmUgb3V0YgkJX19vdXRiCisjZGVmaW5lIG91dHcJCV9fb3V0dworI2RlZmluZSBvdXRsCQlfX291dGwKIAotIyBkZWZpbmUgX19pc2FfcG9ydDJhZGRyKGEpCXNoX212Lm12X2lzYV9wb3J0MmFkZHIoYSkKKyNkZWZpbmUgaW5iX3AJCV9faW5iX3AKKyNkZWZpbmUgaW53X3AJCV9faW53X3AKKyNkZWZpbmUgaW5sX3AJCV9faW5sX3AKKyNkZWZpbmUgb3V0Yl9wCQlfX291dGJfcAorI2RlZmluZSBvdXR3X3AJCV9fb3V0d19wCisjZGVmaW5lIG91dGxfcAkJX19vdXRsX3AKIAotIyBkZWZpbmUgaW5iCQlfX2luYgotIyBkZWZpbmUgaW53CQlfX2ludwotIyBkZWZpbmUgaW5sCQlfX2lubAotIyBkZWZpbmUgb3V0YgkJX19vdXRiCi0jIGRlZmluZSBvdXR3CQlfX291dHcKLSMgZGVmaW5lIG91dGwJCV9fb3V0bAorI2RlZmluZSBpbnNiCQlfX2luc2IKKyNkZWZpbmUgaW5zdwkJX19pbnN3CisjZGVmaW5lIGluc2wJCV9faW5zbAorI2RlZmluZSBvdXRzYgkJX19vdXRzYgorI2RlZmluZSBvdXRzdwkJX19vdXRzdworI2RlZmluZSBvdXRzbAkJX19vdXRzbAogCi0jIGRlZmluZSBpbmJfcAkJX19pbmJfcAotIyBkZWZpbmUgaW53X3AJCV9faW53X3AKLSMgZGVmaW5lIGlubF9wCQlfX2lubF9wCi0jIGRlZmluZSBvdXRiX3AJCV9fb3V0Yl9wCi0jIGRlZmluZSBvdXR3X3AJCV9fb3V0d19wCi0jIGRlZmluZSBvdXRsX3AJCV9fb3V0bF9wCi0KLSMgZGVmaW5lIGluc2IJCV9faW5zYgotIyBkZWZpbmUgaW5zdwkJX19pbnN3Ci0jIGRlZmluZSBpbnNsCQlfX2luc2wKLSMgZGVmaW5lIG91dHNiCQlfX291dHNiCi0jIGRlZmluZSBvdXRzdwkJX19vdXRzdwotIyBkZWZpbmUgb3V0c2wJCV9fb3V0c2wKLQotIyBkZWZpbmUgX19yYXdfcmVhZGIJX19yZWFkYgotIyBkZWZpbmUgX19yYXdfcmVhZHcJX19yZWFkdwotIyBkZWZpbmUgX19yYXdfcmVhZGwJX19yZWFkbAotIyBkZWZpbmUgX19yYXdfd3JpdGViCV9fd3JpdGViCi0jIGRlZmluZSBfX3Jhd193cml0ZXcJX193cml0ZXcKLSMgZGVmaW5lIF9fcmF3X3dyaXRlbAlfX3dyaXRlbAorI2RlZmluZSBfX3Jhd19yZWFkYihhKQkJX19yZWFkYigodm9pZCBfX2lvbWVtICopKGEpKQorI2RlZmluZSBfX3Jhd19yZWFkdyhhKQkJX19yZWFkdygodm9pZCBfX2lvbWVtICopKGEpKQorI2RlZmluZSBfX3Jhd19yZWFkbChhKQkJX19yZWFkbCgodm9pZCBfX2lvbWVtICopKGEpKQorI2RlZmluZSBfX3Jhd193cml0ZWIodiwgYSkJX193cml0ZWIodiwgKHZvaWQgX19pb21lbSAqKShhKSkKKyNkZWZpbmUgX19yYXdfd3JpdGV3KHYsIGEpCV9fd3JpdGV3KHYsICh2b2lkIF9faW9tZW0gKikoYSkpCisjZGVmaW5lIF9fcmF3X3dyaXRlbCh2LCBhKQlfX3dyaXRlbCh2LCAodm9pZCBfX2lvbWVtICopKGEpKQogCiAvKgogICogVGhlIHBsYXRmb3JtIGhlYWRlciBmaWxlcyBtYXkgZGVmaW5lIHNvbWUgb2YgdGhlc2UgbWFjcm9zIHRvIHVzZQogICogdGhlIGlubGluZWQgdmVyc2lvbnMgd2hlcmUgYXBwcm9wcmlhdGUuICBUaGVzZSBtYWNyb3MgbWF5IGFsc28gYmUKICAqIHJlZGVmaW5lZCBieSB1c2VybGV2ZWwgcHJvZ3JhbXMuCiAgKi8KLSNpZmRlZiBfX3Jhd19yZWFkYgotIyBkZWZpbmUgcmVhZGIoYSkJKHsgdW5zaWduZWQgbG9uZyByXyA9IF9fcmF3X3JlYWRiKCh1bnNpZ25lZCBsb25nKWEpOyBtYigpOyByXzsgfSkKKyNpZmRlZiBfX3JlYWRiCisjIGRlZmluZSByZWFkYihhKQkoeyB1bnNpZ25lZCBsb25nIHJfID0gX19yYXdfcmVhZGIoYSk7IG1iKCk7IHJfOyB9KQogI2VuZGlmCiAjaWZkZWYgX19yYXdfcmVhZHcKLSMgZGVmaW5lIHJlYWR3KGEpCSh7IHVuc2lnbmVkIGxvbmcgcl8gPSBfX3Jhd19yZWFkdygodW5zaWduZWQgbG9uZylhKTsgbWIoKTsgcl87IH0pCisjIGRlZmluZSByZWFkdyhhKQkoeyB1bnNpZ25lZCBsb25nIHJfID0gX19yYXdfcmVhZHcoYSk7IG1iKCk7IHJfOyB9KQogI2VuZGlmCiAjaWZkZWYgX19yYXdfcmVhZGwKLSMgZGVmaW5lIHJlYWRsKGEpCSh7IHVuc2lnbmVkIGxvbmcgcl8gPSBfX3Jhd19yZWFkbCgodW5zaWduZWQgbG9uZylhKTsgbWIoKTsgcl87IH0pCisjIGRlZmluZSByZWFkbChhKQkoeyB1bnNpZ25lZCBsb25nIHJfID0gX19yYXdfcmVhZGwoYSk7IG1iKCk7IHJfOyB9KQogI2VuZGlmCiAKICNpZmRlZiBfX3Jhd193cml0ZWIKLSMgZGVmaW5lIHdyaXRlYih2LGEpCSh7IF9fcmF3X3dyaXRlYigodiksKHVuc2lnbmVkIGxvbmcpKGEpKTsgbWIoKTsgfSkKKyMgZGVmaW5lIHdyaXRlYih2LGEpCSh7IF9fcmF3X3dyaXRlYigodiksKGEpKTsgbWIoKTsgfSkKICNlbmRpZgogI2lmZGVmIF9fcmF3X3dyaXRldwotIyBkZWZpbmUgd3JpdGV3KHYsYSkJKHsgX19yYXdfd3JpdGV3KCh2KSwodW5zaWduZWQgbG9uZykoYSkpOyBtYigpOyB9KQorIyBkZWZpbmUgd3JpdGV3KHYsYSkJKHsgX19yYXdfd3JpdGV3KCh2KSwoYSkpOyBtYigpOyB9KQogI2VuZGlmCiAjaWZkZWYgX19yYXdfd3JpdGVsCi0jIGRlZmluZSB3cml0ZWwodixhKQkoeyBfX3Jhd193cml0ZWwoKHYpLCh1bnNpZ25lZCBsb25nKShhKSk7IG1iKCk7IH0pCisjIGRlZmluZSB3cml0ZWwodixhKQkoeyBfX3Jhd193cml0ZWwoKHYpLChhKSk7IG1iKCk7IH0pCiAjZW5kaWYKIAogI2RlZmluZSByZWFkYl9yZWxheGVkKGEpIHJlYWRiKGEpCiAjZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYSkgcmVhZHcoYSkKICNkZWZpbmUgcmVhZGxfcmVsYXhlZChhKSByZWFkbChhKQogCi0jZGVmaW5lIG1taW93YigpCisvKiBTaW1wbGUgTU1JTyAqLworI2RlZmluZSBpb3JlYWQ4KGEpCQlyZWFkYihhKQorI2RlZmluZSBpb3JlYWQxNihhKQkJcmVhZHcoYSkKKyNkZWZpbmUgaW9yZWFkMTZiZShhKQkJYmUxNl90b19jcHUoX19yYXdfcmVhZHcoKGEpKSkKKyNkZWZpbmUgaW9yZWFkMzIoYSkJCXJlYWRsKGEpCisjZGVmaW5lIGlvcmVhZDMyYmUoYSkJCWJlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKChhKSkpCiAKLS8qCi0gKiBJZiB0aGUgcGxhdGZvcm0gaGFzIFBDLWxpa2UgSS9PLCB0aGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBvZmZzZXQgaW50bwotICogYW4gYWRkcmVzcy4KLSAqLwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBpc2FfcG9ydDJhZGRyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXJldHVybiBfX2lzYV9wb3J0MmFkZHIob2Zmc2V0KTsKLX0KKyNkZWZpbmUgaW93cml0ZTgodixhKQkJd3JpdGViKCh2KSwoYSkpCisjZGVmaW5lIGlvd3JpdGUxNih2LGEpCQl3cml0ZXcoKHYpLChhKSkKKyNkZWZpbmUgaW93cml0ZTE2YmUodixhKQlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYoKHYpKSwoYSkpCisjZGVmaW5lIGlvd3JpdGUzMih2LGEpCQl3cml0ZWwoKHYpLChhKSkKKyNkZWZpbmUgaW93cml0ZTMyYmUodixhKQlfX3Jhd193cml0ZWwoY3B1X3RvX2JlMzIoKHYpKSwoYSkpCisKKyNkZWZpbmUgaW9yZWFkOF9yZXAoYSxkLGMpCWluc2IoKGEpLChkKSwoYykpCisjZGVmaW5lIGlvcmVhZDE2X3JlcChhLGQsYykJaW5zdygoYSksKGQpLChjKSkKKyNkZWZpbmUgaW9yZWFkMzJfcmVwKGEsZCxjKQlpbnNsKChhKSwoZCksKGMpKQorCisjZGVmaW5lIGlvd3JpdGU4X3JlcChhLHMsYykJb3V0c2IoKGEpLChzKSwoYykpCisjZGVmaW5lIGlvd3JpdGUxNl9yZXAoYSxzLGMpCW91dHN3KChhKSwocyksKGMpKQorI2RlZmluZSBpb3dyaXRlMzJfcmVwKGEscyxjKQlvdXRzbCgoYSksKHMpLChjKSkKKworI2RlZmluZSBtbWlvd2IoKQl3bWIoKQkvKiBzeW5jbyBvbiBTSC00QSwgb3RoZXJ3aXNlIGEgbm9wICovCiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWV0aG9kIGZvciB0aGUgZ2VuZXJpYyBjYXNlIHdoZXJlIGEgYm9hcmQtc3BlY2lmaWMKLSAqIGlzYV9wb3J0MmFkZHIgc2ltcGx5IG5lZWRzIHRvIHJldHVybiB0aGUgcG9ydCArIHNvbWUgYXJiaXRyYXJ5IHBvcnQgYmFzZS4KKyAqIGlvcG9ydF9tYXAgc2ltcGx5IG5lZWRzIHRvIHJldHVybiB0aGUgcG9ydCArIHNvbWUgYXJiaXRyYXJ5IHBvcnQgYmFzZS4KICAqCiAgKiBXZSB1c2UgdGhpcyBhdCBib2FyZCBzZXR1cCB0aW1lIHRvIGltcGxpY2l0bHkgc2V0IHRoZSBwb3J0IGJhc2UsIGFuZAotICogYXMgYSByZXN1bHQsIHdlIGNhbiB1c2UgdGhlIGdlbmVyaWMgaXNhX3BvcnQyYWRkci4KKyAqIGFzIGEgcmVzdWx0LCB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljIGlvcG9ydF9tYXAuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9pb19wb3J0X2Jhc2UodW5zaWduZWQgbG9uZyBwYmFzZSkKIHsKQEAgLTE1OSw1MSArMTc0LDUyIEBACiAJZ2VuZXJpY19pb19iYXNlID0gcGJhc2U7CiB9CiAKLSNkZWZpbmUgaXNhX3JlYWRiKGEpIHJlYWRiKGlzYV9wb3J0MmFkZHIoYSkpCi0jZGVmaW5lIGlzYV9yZWFkdyhhKSByZWFkdyhpc2FfcG9ydDJhZGRyKGEpKQotI2RlZmluZSBpc2FfcmVhZGwoYSkgcmVhZGwoaXNhX3BvcnQyYWRkcihhKSkKLSNkZWZpbmUgaXNhX3dyaXRlYihiLGEpIHdyaXRlYihiLGlzYV9wb3J0MmFkZHIoYSkpCi0jZGVmaW5lIGlzYV93cml0ZXcodyxhKSB3cml0ZXcodyxpc2FfcG9ydDJhZGRyKGEpKQotI2RlZmluZSBpc2Ffd3JpdGVsKGwsYSkgd3JpdGVsKGwsaXNhX3BvcnQyYWRkcihhKSkKKyNkZWZpbmUgaXNhX3JlYWRiKGEpIHJlYWRiKGlvcG9ydF9tYXAoYSwgMSkpCisjZGVmaW5lIGlzYV9yZWFkdyhhKSByZWFkdyhpb3BvcnRfbWFwKGEsIDIpKQorI2RlZmluZSBpc2FfcmVhZGwoYSkgcmVhZGwoaW9wb3J0X21hcChhLCA0KSkKKyNkZWZpbmUgaXNhX3dyaXRlYihiLGEpIHdyaXRlYihiLGlvcG9ydF9tYXAoYSwgMSkpCisjZGVmaW5lIGlzYV93cml0ZXcodyxhKSB3cml0ZXcodyxpb3BvcnRfbWFwKGEsIDIpKQorI2RlZmluZSBpc2Ffd3JpdGVsKGwsYSkgd3JpdGVsKGwsaW9wb3J0X21hcChhLCA0KSkKKwogI2RlZmluZSBpc2FfbWVtc2V0X2lvKGEsYixjKSBcCi0gIG1lbXNldCgodm9pZCAqKShpc2FfcG9ydDJhZGRyKCh1bnNpZ25lZCBsb25nKWEpKSwoYiksKGMpKQorICBtZW1zZXQoKHZvaWQgKikoaW9wb3J0X21hcCgodW5zaWduZWQgbG9uZykoYSksIDEpKSwoYiksKGMpKQogI2RlZmluZSBpc2FfbWVtY3B5X2Zyb21pbyhhLGIsYykgXAotICBtZW1jcHkoKGEpLCh2b2lkICopKGlzYV9wb3J0MmFkZHIoKHVuc2lnbmVkIGxvbmcpKGIpKSksKGMpKQorICBtZW1jcHkoKGEpLCh2b2lkICopKGlvcG9ydF9tYXAoKHVuc2lnbmVkIGxvbmcpKGIpLCAxKSksKGMpKQogI2RlZmluZSBpc2FfbWVtY3B5X3RvaW8oYSxiLGMpIFwKLSAgbWVtY3B5KCh2b2lkICopKGlzYV9wb3J0MmFkZHIoKHVuc2lnbmVkIGxvbmcpKGEpKSksKGIpLChjKSkKKyAgbWVtY3B5KCh2b2lkICopKGlvcG9ydF9tYXAoKHVuc2lnbmVkIGxvbmcpKGEpLCAxKSksKGIpLChjKSkKIAogLyogV2UgcmVhbGx5IHdhbnQgdG8gdHJ5IGFuZCBnZXQgdGhlc2UgdG8gbWVtY3B5IGV0YyAqLwotZXh0ZXJuIHZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgbWVtY3B5X3RvaW8odW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIG1lbXNldF9pbyh1bnNpZ25lZCBsb25nLCBpbnQsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICosIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCiAvKiBTdXBlckggb24tY2hpcCBJL08gZnVuY3Rpb25zICovCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIGN0cmxfaW5iKHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjdHJsX2luYih1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopYWRkcjsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgY3RybF9pbncodW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBjdHJsX2ludyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKWFkZHI7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBjdHJsX2lubCh1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjdHJsX2lubCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopYWRkcjsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBjdHJsX291dGIodW5zaWduZWQgY2hhciBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgY3RybF9vdXRiKHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopYWRkciA9IGI7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgY3RybF9vdXR3KHVuc2lnbmVkIHNob3J0IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBjdHJsX291dHcodW5zaWduZWQgc2hvcnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKWFkZHIgPSBiOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGN0cmxfb3V0bCh1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIGN0cmxfb3V0bCh1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKWFkZHIgPSBiOwogfQpAQCAtMjE0LDEyICsyMzAsMTIgQEAKICAqIENoYW5nZSB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHZ2LgogICogVGhlc2UgYXJlIHRyaXZpYWwgb24gdGhlIDE6MSBMaW51eC9TdXBlckggbWFwcGluZwogICovCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh2b2xhdGlsZSB2b2lkICogYWRkcmVzcykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9sYXRpbGUgdm9pZCAqYWRkcmVzcykKIHsKIAlyZXR1cm4gUEhZU0FERFIoYWRkcmVzcyk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgKiBwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXJldHVybiAodm9pZCAqKVAxU0VHQUREUihhZGRyZXNzKTsKIH0KQEAgLTIzNCwyNyArMjUwLDYwIEBACiAgKiBkaWZmZXJlbnRseS4gT24gdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHdlIGp1c3QgcmVhZC93cml0ZSB0aGUKICAqIG1lbW9yeSBsb2NhdGlvbiBkaXJlY3RseS4KICAqCi0gKiBPbiBTSCwgd2UgaGF2ZSB0aGUgd2hvbGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBtYXBwZWQgYXQgYWxsIHRpbWVzCi0gKiAoYXMgTUlQUyBkb2VzKSwgc28gImlvcmVtYXAoKSIgYW5kICJpb3VubWFwKCkiIGRvIG5vdCBuZWVkIHRvIGRvCi0gKiBhbnl0aGluZy4gIChUaGlzIGlzbid0IHRydWUgZm9yIGFsbCBtYWNoaW5lcyBidXQgd2Ugc3RpbGwgaGFuZGxlCi0gKiB0aGVzZSBjYXNlcyB3aXRoIHdpcmVkIFRMQiBlbnRyaWVzIGFueXdheSAuLi4pCisgKiBPbiBTSCwgd2UgdHJhZGl0aW9uYWxseSBoYXZlIHRoZSB3aG9sZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1hcHBlZAorICogYXQgYWxsIHRpbWVzIChhcyBNSVBTIGRvZXMpLCBzbyAiaW9yZW1hcCgpIiBhbmQgImlvdW5tYXAoKSIgZG8gbm90CisgKiBuZWVkIHRvIGRvIGFueXRoaW5nIGJ1dCBwbGFjZSB0aGUgYWRkcmVzcyBpbiB0aGUgcHJvcGVyIHNlZ21lbnQuIFRoaXMKKyAqIGlzIHRydWUgZm9yIFAxIGFuZCBQMiBhZGRyZXNzZXMsIGFzIHdlbGwgYXMgc29tZSBQMyBvbmVzLiBIb3dldmVyLAorICogbW9zdCBvZiB0aGUgUDMgYWRkcmVzc2VzIGFuZCBuZXdlciBjb3JlcyB1c2luZyBleHRlbmRlZCBhZGRyZXNzaW5nCisgKiBuZWVkIHRvIG1hcCB0aHJvdWdoIHBhZ2UgdGFibGVzLCBzbyB0aGUgaW9yZW1hcCgpIGltcGxlbWVudGF0aW9uCisgKiBiZWNvbWVzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQuIFNlZSBhcmNoL3NoL21tL2lvcmVtYXAuYyBmb3IKKyAqIGFkZGl0aW9uYWwgbm90ZXMgb24gdGhpcy4KICAqCiAgKiBXZSBjaGVhdCBhIGJpdCBhbmQgYWx3YXlzIHJldHVybiB1bmNhY2hhYmxlIGFyZWFzIHVudGlsIHdlJ3ZlIGZpeGVkCi0gKiB0aGUgZHJpdmVycyB0byBoYW5kbGUgY2FjaGluZyBwcm9wZXJseS4gIAorICogdGhlIGRyaXZlcnMgdG8gaGFuZGxlIGNhY2hpbmcgcHJvcGVybHkuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgKiBpb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCisjaWZkZWYgQ09ORklHX01NVQordm9pZCBfX2lvbWVtICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpOwordm9pZCBfX2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKTsKKyNlbHNlCisjZGVmaW5lIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIGZsYWdzKQkoKHZvaWQgX19pb21lbSAqKShvZmZzZXQpKQorI2RlZmluZSBfX2lvdW5tYXAoYWRkcikJCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogQ09ORklHX01NVSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitfX2lvcmVtYXBfbW9kZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXJldHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplKTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfYWRkciA9IG9mZnNldCArIHNpemUgLSAxOworCisJLyoKKwkgKiBGb3IgUDEgYW5kIFAyIHNwYWNlIHRoaXMgaXMgdHJpdmlhbCwgYXMgZXZlcnl0aGluZyBpcyBhbHJlYWR5CisJICogbWFwcGVkLiBVbmNhY2hlZCBhY2Nlc3MgZm9yIFAxIGFkZHJlc3NlcyBhcmUgZG9uZSB0aHJvdWdoIFAyLgorCSAqIEluIHRoZSBQMyBjYXNlIG9yIGZvciBhZGRyZXNzZXMgb3V0c2lkZSBvZiB0aGUgMjktYml0IHNwYWNlLAorCSAqIG1hcHBpbmcgbXVzdCBiZSBkb25lIGJ5IHRoZSBQTUIgb3IgYnkgdXNpbmcgcGFnZSB0YWJsZXMuCisJICovCisJaWYgKGxpa2VseShQWFNFRyhvZmZzZXQpIDwgUDNTRUcgJiYgUFhTRUcobGFzdF9hZGRyKSA8IFAzU0VHKSkgeworCQlpZiAodW5saWtlbHkoZmxhZ3MgJiBfUEFHRV9DQUNIQUJMRSkpCisJCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKVAxU0VHQUREUihvZmZzZXQpOworCisJCXJldHVybiAodm9pZCBfX2lvbWVtICopUDJTRUdBRERSKG9mZnNldCk7CisJfQorCisJcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIGZsYWdzKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBpb3VubWFwKHZvaWQgKmFkZHIpCi17Ci0JcmV0dXJuIF9faW91bm1hcChhZGRyKTsKLX0KKyNkZWZpbmUgaW9yZW1hcChvZmZzZXQsIHNpemUpCQkJCVwKKwlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCAwKQorI2RlZmluZSBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKQkJCVwKKwlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCAwKQorI2RlZmluZSBpb3JlbWFwX2NhY2hlKG9mZnNldCwgc2l6ZSkJCQlcCisJX19pb3JlbWFwX21vZGUoKG9mZnNldCksIChzaXplKSwgX1BBR0VfQ0FDSEFCTEUpCisjZGVmaW5lIHAzX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBmbGFncykJCQlcCisJX19pb3JlbWFwKChvZmZzZXQpLCAoc2l6ZSksIChmbGFncykpCisjZGVmaW5lIGlvdW5tYXAoYWRkcikJCQkJCVwKKwlfX2lvdW5tYXAoKGFkZHIpKQogCi0jZGVmaW5lIGlvcmVtYXBfbm9jYWNoZShvZmYsc2l6ZSkgaW9yZW1hcChvZmYsc2l6ZSkKLQotc3RhdGljIF9faW5saW5lX18gaW50IGNoZWNrX3NpZ25hdHVyZSh1bnNpZ25lZCBsb25nIGlvX2FkZHIsCitzdGF0aWMgaW5saW5lIGludCBjaGVja19zaWduYXR1cmUoY2hhciBfX2lvbWVtICppb19hZGRyLAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2lnbmF0dXJlLCBpbnQgbGVuZ3RoKQogewogCWludCByZXR2YWwgPSAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaW9fZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tc2gvaW9fZ2VuZXJpYy5oCmluZGV4IGJlMTQ1ODcuLjkyZmM2MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2lvX2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9pb19nZW5lcmljLmgKQEAgLTEsNTEgKzEsNDkgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1zaC9pb19nZW5lcmljLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogR2VuZXJpYyBJTyBmdW5jdGlvbnMKKyAqIFRyaXZpYWwgSS9PIHJvdXRpbmUgZGVmaW5pdGlvbnMsIGludGVudGlvbmFsbHkgbWVhbnQgdG8gYmUgaW5jbHVkZWQKKyAqIG11bHRpcGxlIHRpbWVzLiBVZ2x5IEkvTyByb3V0aW5lIGNvbmNhdGVuYXRpb24gaGVscGVycyB0YWtlbiBmcm9tCisgKiBhbHBoYS4gTXVzdCBiZSBpbmNsdWRlZCBfYmVmb3JlXyBpby5oIHRvIGF2b2lkIHByZXByb2Nlc3Nvci1pbmR1Y2VkCisgKiByb3V0aW5lIG1pc21hdGNoLgogICovCisjZGVmaW5lIElPX0NPTkNBVChhLGIpCV9JT19DT05DQVQoYSxiKQorI2RlZmluZSBfSU9fQ09OQ0FUKGEsYikJYSAjIyBfICMjIGIKIAotI2lmbmRlZiBfQVNNX1NIX0lPX0dFTkVSSUNfSAotI2RlZmluZSBfQVNNX1NIX0lPX0dFTkVSSUNfSAorI2lmbmRlZiBfX0lPX1BSRUZJWAorI2Vycm9yICJEb24ndCBpbmNsdWRlIHRoaXMgaGVhZGVyIHdpdGhvdXQgYSB2YWxpZCBzeXN0ZW0gcHJlZml4IgorI2VuZGlmCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGdlbmVyaWNfaW9fYmFzZTsKK3U4IElPX0NPTkNBVChfX0lPX1BSRUZJWCxpbmIpKHVuc2lnbmVkIGxvbmcpOwordTE2IElPX0NPTkNBVChfX0lPX1BSRUZJWCxpbncpKHVuc2lnbmVkIGxvbmcpOwordTMyIElPX0NPTkNBVChfX0lPX1BSRUZJWCxpbmwpKHVuc2lnbmVkIGxvbmcpOwogCi1leHRlcm4gdW5zaWduZWQgY2hhciBnZW5lcmljX2luYih1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGdlbmVyaWNfaW53KHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdW5zaWduZWQgaW50IGdlbmVyaWNfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCk7Cit2b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxvdXRiKSh1OCwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxvdXR3KSh1MTYsIHVuc2lnbmVkIGxvbmcpOwordm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsb3V0bCkodTMyLCB1bnNpZ25lZCBsb25nKTsKIAotZXh0ZXJuIHZvaWQgZ2VuZXJpY19vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdm9pZCBnZW5lcmljX291dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdm9pZCBnZW5lcmljX291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwordTggSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGluYl9wKSh1bnNpZ25lZCBsb25nKTsKK3UxNiBJT19DT05DQVQoX19JT19QUkVGSVgsaW53X3ApKHVuc2lnbmVkIGxvbmcpOwordTMyIElPX0NPTkNBVChfX0lPX1BSRUZJWCxpbmxfcCkodW5zaWduZWQgbG9uZyk7Cit2b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxvdXRiX3ApKHU4LCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLG91dHdfcCkodTE2LCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLG91dGxfcCkodTMyLCB1bnNpZ25lZCBsb25nKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZ2VuZXJpY19pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGdlbmVyaWNfaW53X3AodW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgZ2VuZXJpY19pbmxfcCh1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHZvaWQgZ2VuZXJpY19vdXRiX3AodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB2b2lkIGdlbmVyaWNfb3V0d19wKHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHZvaWQgZ2VuZXJpY19vdXRsX3AodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwordm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsaW5zYikodW5zaWduZWQgbG9uZywgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK3ZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGluc3cpKHVuc2lnbmVkIGxvbmcsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCk7Cit2b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxpbnNsKSh1bnNpZ25lZCBsb25nLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOwordm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsb3V0c2IpKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCk7Cit2b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxvdXRzdykodW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK3ZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLG91dHNsKSh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogCi1leHRlcm4gdm9pZCBnZW5lcmljX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIGdlbmVyaWNfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgZ2VuZXJpY19pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBnZW5lcmljX291dHNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBnZW5lcmljX291dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBnZW5lcmljX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Cit1OCBJT19DT05DQVQoX19JT19QUkVGSVgscmVhZGIpKHZvaWQgX19pb21lbSAqKTsKK3UxNiBJT19DT05DQVQoX19JT19QUkVGSVgscmVhZHcpKHZvaWQgX19pb21lbSAqKTsKK3UzMiBJT19DT05DQVQoX19JT19QUkVGSVgscmVhZGwpKHZvaWQgX19pb21lbSAqKTsKK3ZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHdyaXRlYikodTgsIHZvaWQgX19pb21lbSAqKTsKK3ZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHdyaXRldykodTE2LCB2b2lkIF9faW9tZW0gKik7Cit2b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCx3cml0ZWwpKHUzMiwgdm9pZCBfX2lvbWVtICopOwogCi1leHRlcm4gdW5zaWduZWQgY2hhciBnZW5lcmljX3JlYWRiKHVuc2lnbmVkIGxvbmcgYWRkcik7Ci1leHRlcm4gdW5zaWduZWQgc2hvcnQgZ2VuZXJpY19yZWFkdyh1bnNpZ25lZCBsb25nIGFkZHIpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBnZW5lcmljX3JlYWRsKHVuc2lnbmVkIGxvbmcgYWRkcik7Ci1leHRlcm4gdm9pZCBnZW5lcmljX3dyaXRlYih1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcik7Ci1leHRlcm4gdm9pZCBnZW5lcmljX3dyaXRldyh1bnNpZ25lZCBzaG9ydCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpOwotZXh0ZXJuIHZvaWQgZ2VuZXJpY193cml0ZWwodW5zaWduZWQgaW50IGIsIHVuc2lnbmVkIGxvbmcgYWRkcik7Cit2b2lkICpJT19DT05DQVQoX19JT19QUkVGSVgsaW9yZW1hcCkodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Cit2b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxpb3VubWFwKSh2b2lkICphZGRyKTsKIAotZXh0ZXJuIHZvaWQgKmdlbmVyaWNfaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWV4dGVybiB2b2lkIGdlbmVyaWNfaW91bm1hcCh2b2lkICphZGRyKTsKK3ZvaWQgX19pb21lbSAqSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvcG9ydF9tYXApKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IHNpemUpOwordm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsaW9wb3J0X3VubWFwKSh2b2lkIF9faW9tZW0gKmFkZHIpOwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBnZW5lcmljX2lzYV9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpOwotCi0jZW5kaWYgLyogX0FTTV9TSF9JT19HRU5FUklDX0ggKi8KKyN1bmRlZiBfX0lPX1BSRUZJWApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaXJxLXNoNzc4MC5oIGIvaW5jbHVkZS9hc20tc2gvaXJxLXNoNzc4MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjOGNhMTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9pcnEtc2g3NzgwLmgKQEAgLTAsMCArMSwzNDkgQEAKKyNpZm5kZWYgX19BU01fU0hfSVJRX1NINzc4MF9ICisjZGVmaW5lIF9fQVNNX1NIX0lSUV9TSDc3ODBfSAorCisvKgorICogbGludXgvaW5jbHVkZS9hc20tc2gvaXJxLXNoNzc4MC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRha2FzaGkgU0hVRE8gPHNodWRvQGhpdGFjaGktdWwuY28uanA+CisgKi8KKworI2lmZGVmIENPTkZJR19JREUKKyMgaWZuZGVmIElSUV9DRkNBUkQKKyMgIGRlZmluZSBJUlFfQ0ZDQVJECTE0CisjIGVuZGlmCisjIGlmbmRlZiBJUlFfUENNQ0lBCisjICBkZWZpbmUgSVJRX1BDTUNJQQkxNQorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgSU5UQ19CQVNFCTB4ZmZkMDAwMDAKKyNkZWZpbmUgSU5UQ19JQ1IwCShJTlRDX0JBU0UrMHgwKQorI2RlZmluZSBJTlRDX0lDUjEJKElOVENfQkFTRSsweDFjKQorI2RlZmluZSBJTlRDX0lOVFBSSQkoSU5UQ19CQVNFKzB4MTApCisjZGVmaW5lIElOVENfSU5UUkVRCShJTlRDX0JBU0UrMHgyNCkKKyNkZWZpbmUgSU5UQ19JTlRNU0swCShJTlRDX0JBU0UrMHg0NCkKKyNkZWZpbmUgSU5UQ19JTlRNU0sxCShJTlRDX0JBU0UrMHg0OCkKKyNkZWZpbmUgSU5UQ19JTlRNU0syCShJTlRDX0JBU0UrMHg0MDA4MCkKKyNkZWZpbmUgSU5UQ19JTlRNU0tDTFIwCShJTlRDX0JBU0UrMHg2NCkKKyNkZWZpbmUgSU5UQ19JTlRNU0tDTFIxCShJTlRDX0JBU0UrMHg2OCkKKyNkZWZpbmUgSU5UQ19JTlRNU0tDTFIyCShJTlRDX0JBU0UrMHg0MDA4NCkKKyNkZWZpbmUgSU5UQ19OTUlGQ1IJKElOVENfQkFTRSsweGMwKQorI2RlZmluZSBJTlRDX1VTRVJJTUFTSwkoSU5UQ19CQVNFKzB4MzAwMDApCisKKyNkZWZpbmUJSU5UQ19JTlQyUFJJMAkoSU5UQ19CQVNFKzB4NDAwMDApCisjZGVmaW5lCUlOVENfSU5UMlBSSTEJKElOVENfQkFTRSsweDQwMDA0KQorI2RlZmluZQlJTlRDX0lOVDJQUkkyCShJTlRDX0JBU0UrMHg0MDAwOCkKKyNkZWZpbmUJSU5UQ19JTlQyUFJJMwkoSU5UQ19CQVNFKzB4NDAwMGMpCisjZGVmaW5lCUlOVENfSU5UMlBSSTQJKElOVENfQkFTRSsweDQwMDEwKQorI2RlZmluZQlJTlRDX0lOVDJQUkk1CShJTlRDX0JBU0UrMHg0MDAxNCkKKyNkZWZpbmUJSU5UQ19JTlQyUFJJNgkoSU5UQ19CQVNFKzB4NDAwMTgpCisjZGVmaW5lCUlOVENfSU5UMlBSSTcJKElOVENfQkFTRSsweDQwMDFjKQorI2RlZmluZQlJTlRDX0lOVDJBMAkoSU5UQ19CQVNFKzB4NDAwMzApCisjZGVmaW5lCUlOVENfSU5UMkExCShJTlRDX0JBU0UrMHg0MDAzNCkKKyNkZWZpbmUJSU5UQ19JTlQyTVNLUgkoSU5UQ19CQVNFKzB4NDAwMzgpCisjZGVmaW5lCUlOVENfSU5UMk1TS0NSCShJTlRDX0JBU0UrMHg0MDAzYykKKyNkZWZpbmUJSU5UQ19JTlQyQjAJKElOVENfQkFTRSsweDQwMDQwKQorI2RlZmluZQlJTlRDX0lOVDJCMQkoSU5UQ19CQVNFKzB4NDAwNDQpCisjZGVmaW5lCUlOVENfSU5UMkIyCShJTlRDX0JBU0UrMHg0MDA0OCkKKyNkZWZpbmUJSU5UQ19JTlQyQjMJKElOVENfQkFTRSsweDQwMDRjKQorI2RlZmluZQlJTlRDX0lOVDJCNAkoSU5UQ19CQVNFKzB4NDAwNTApCisjZGVmaW5lCUlOVENfSU5UMkI1CShJTlRDX0JBU0UrMHg0MDA1NCkKKyNkZWZpbmUJSU5UQ19JTlQyQjYJKElOVENfQkFTRSsweDQwMDU4KQorI2RlZmluZQlJTlRDX0lOVDJCNwkoSU5UQ19CQVNFKzB4NDAwNWMpCisjZGVmaW5lCUlOVENfSU5UMkdQSUMJKElOVENfQkFTRSsweDQwMDkwKQorLyoKKyAgTk9URToKKyAgKl9JUlEgPSAoSU5URVZUMiAtIDB4MjAwKS8weDIwCisqLworLyogSVJRIDAtNyBsaW5lIGV4dGVybmFsIGludCovCisjZGVmaW5lIElSUTBfSVJRCTIKKyNkZWZpbmUgSVJRMF9JUFJfQUREUglJTlRDX0lOVFBSSQorI2RlZmluZSBJUlEwX0lQUl9QT1MJNworI2RlZmluZSBJUlEwX1BSSU9SSVRZCTIKKworI2RlZmluZSBJUlExX0lSUQk0CisjZGVmaW5lIElSUTFfSVBSX0FERFIJSU5UQ19JTlRQUkkKKyNkZWZpbmUgSVJRMV9JUFJfUE9TCTYKKyNkZWZpbmUgSVJRMV9QUklPUklUWQkyCisKKyNkZWZpbmUgSVJRMl9JUlEJNgorI2RlZmluZSBJUlEyX0lQUl9BRERSCUlOVENfSU5UUFJJCisjZGVmaW5lIElSUTJfSVBSX1BPUwk1CisjZGVmaW5lIElSUTJfUFJJT1JJVFkJMgorCisjZGVmaW5lIElSUTNfSVJRCTgKKyNkZWZpbmUgSVJRM19JUFJfQUREUglJTlRDX0lOVFBSSQorI2RlZmluZSBJUlEzX0lQUl9QT1MJNAorI2RlZmluZSBJUlEzX1BSSU9SSVRZCTIKKworI2RlZmluZSBJUlE0X0lSUQkxMAorI2RlZmluZSBJUlE0X0lQUl9BRERSCUlOVENfSU5UUFJJCisjZGVmaW5lIElSUTRfSVBSX1BPUwkzCisjZGVmaW5lIElSUTRfUFJJT1JJVFkJMgorCisjZGVmaW5lIElSUTVfSVJRCTEyCisjZGVmaW5lIElSUTVfSVBSX0FERFIJSU5UQ19JTlRQUkkKKyNkZWZpbmUgSVJRNV9JUFJfUE9TCTIKKyNkZWZpbmUgSVJRNV9QUklPUklUWQkyCisKKyNkZWZpbmUgSVJRNl9JUlEJMTQKKyNkZWZpbmUgSVJRNl9JUFJfQUREUglJTlRDX0lOVFBSSQorI2RlZmluZSBJUlE2X0lQUl9QT1MJMQorI2RlZmluZSBJUlE2X1BSSU9SSVRZCTIKKworI2RlZmluZSBJUlE3X0lSUQkwCisjZGVmaW5lIElSUTdfSVBSX0FERFIJSU5UQ19JTlRQUkkKKyNkZWZpbmUgSVJRN19JUFJfUE9TCTAKKyNkZWZpbmUgSVJRN19QUklPUklUWQkyCisKKy8qIFRNVSAqLworLyogY2gwICovCisjZGVmaW5lIFRNVV9JUlEJCTI4CisjZGVmaW5lCVRNVV9JUFJfQUREUglJTlRDX0lOVDJQUkkwCisjZGVmaW5lCVRNVV9JUFJfUE9TCTMKKyNkZWZpbmUgVE1VX1BSSU9SSVRZCTIKKworI2RlZmluZSBUSU1FUl9JUlEJMjgKKyNkZWZpbmUJVElNRVJfSVBSX0FERFIJSU5UQ19JTlQyUFJJMAorI2RlZmluZQlUSU1FUl9JUFJfUE9TCTMKKyNkZWZpbmUgVElNRVJfUFJJT1JJVFkJMgorCisvKiBjaCAxKi8KKyNkZWZpbmUgVE1VX0NIMV9JUlEJCTI5CisjZGVmaW5lCVRNVV9DSDFfSVBSX0FERFIJSU5UQ19JTlQyUFJJMAorI2RlZmluZQlUTVVfQ0gxX0lQUl9QT1MJCTIKKyNkZWZpbmUgVE1VX0NIMV9QUklPUklUWQkyCisKKyNkZWZpbmUgVElNRVIxX0lSUQkyOQorI2RlZmluZQlUSU1FUjFfSVBSX0FERFIJSU5UQ19JTlQyUFJJMAorI2RlZmluZQlUSU1FUjFfSVBSX1BPUwkyCisjZGVmaW5lIFRJTUVSMV9QUklPUklUWQkyCisKKy8qIGNoIDIqLworI2RlZmluZSBUTVVfQ0gyX0lSUQkJMzAKKyNkZWZpbmUJVE1VX0NIMl9JUFJfQUREUglJTlRDX0lOVDJQUkkwCisjZGVmaW5lCVRNVV9DSDJfSVBSX1BPUwkJMQorI2RlZmluZSBUTVVfQ0gyX1BSSU9SSVRZCTIKKy8qIGNoIDIgSW5wdXQgY2FwdHVyZSAqLworI2RlZmluZSBUTVVfQ0gySUNfSVJRCQkzMQorI2RlZmluZQlUTVVfQ0gySUNfSVBSX0FERFIJSU5UQ19JTlQyUFJJMAorI2RlZmluZQlUTVVfQ0gySUNfSVBSX1BPUwkwCisjZGVmaW5lIFRNVV9DSDJJQ19QUklPUklUWQkyCisvKiBjaCAzICovCisjZGVmaW5lIFRNVV9DSDNfSVJRCQk5NgorI2RlZmluZQlUTVVfQ0gzX0lQUl9BRERSCUlOVENfSU5UMlBSSTEKKyNkZWZpbmUJVE1VX0NIM19JUFJfUE9TCQkzCisjZGVmaW5lIFRNVV9DSDNfUFJJT1JJVFkJMgorLyogY2ggNCAqLworI2RlZmluZSBUTVVfQ0g0X0lSUQkJOTcKKyNkZWZpbmUJVE1VX0NINF9JUFJfQUREUglJTlRDX0lOVDJQUkkxCisjZGVmaW5lCVRNVV9DSDRfSVBSX1BPUwkJMgorI2RlZmluZSBUTVVfQ0g0X1BSSU9SSVRZCTIKKy8qIGNoIDUqLworI2RlZmluZSBUTVVfQ0g1X0lSUQkJOTgKKyNkZWZpbmUJVE1VX0NINV9JUFJfQUREUglJTlRDX0lOVDJQUkkxCisjZGVmaW5lCVRNVV9DSDVfSVBSX1BPUwkJMQorI2RlZmluZSBUTVVfQ0g1X1BSSU9SSVRZCTIKKworI2RlZmluZQlSVENfSVJRCQkyMgorI2RlZmluZQlSVENfSVBSX0FERFIJSU5UQ19JTlQyUFJJMQorI2RlZmluZQlSVENfSVBSX1BPUwkwCisjZGVmaW5lCVJUQ19QUklPUklUWQlUSU1FUl9QUklPUklUWQorCisvKiBTQ0lGMCAqLworI2RlZmluZSBTQ0lGMF9FUklfSVJRCTQwCisjZGVmaW5lIFNDSUYwX1JYSV9JUlEJNDEKKyNkZWZpbmUgU0NJRjBfQlJJX0lSUQk0MgorI2RlZmluZSBTQ0lGMF9UWElfSVJRCTQzCisjZGVmaW5lCVNDSUYwX0lQUl9BRERSCUlOVENfSU5UMlBSSTIKKyNkZWZpbmUJU0NJRjBfSVBSX1BPUwkzCisjZGVmaW5lIFNDSUYwX1BSSU9SSVRZCTMKKworLyogU0NJRjEgKi8KKyNkZWZpbmUgU0NJRjFfRVJJX0lSUQk3NgorI2RlZmluZSBTQ0lGMV9SWElfSVJRCTc3CisjZGVmaW5lIFNDSUYxX0JSSV9JUlEJNzgKKyNkZWZpbmUgU0NJRjFfVFhJX0lSUQk3OQorI2RlZmluZQlTQ0lGMV9JUFJfQUREUglJTlRDX0lOVDJQUkkyCisjZGVmaW5lCVNDSUYxX0lQUl9QT1MJMgorI2RlZmluZSBTQ0lGMV9QUklPUklUWQkzCisKKyNkZWZpbmUJV0RUX0lSUQkJMjcKKyNkZWZpbmUJV0RUX0lQUl9BRERSCUlOVENfSU5UMlBSSTIKKyNkZWZpbmUJV0RUX0lQUl9QT1MJMQorI2RlZmluZQlXRFRfUFJJT1JJVFkJMgorCisvKiBETUFDKDApICovCisjZGVmaW5lCURNSU5UMF9JUlEJMzQKKyNkZWZpbmUJRE1JTlQxX0lSUQkzNQorI2RlZmluZQlETUlOVDJfSVJRCTM2CisjZGVmaW5lCURNSU5UM19JUlEJMzcKKyNkZWZpbmUJRE1JTlQ0X0lSUQk0NAorI2RlZmluZQlETUlOVDVfSVJRCTQ1CisjZGVmaW5lCURNSU5UNl9JUlEJNDYKKyNkZWZpbmUJRE1JTlQ3X0lSUQk0NworI2RlZmluZQlETUFFX0lSUQkzOAorI2RlZmluZQlETUEwX0lQUl9BRERSCUlOVENfSU5UMlBSSTMKKyNkZWZpbmUJRE1BMF9JUFJfUE9TCTIKKyNkZWZpbmUJRE1BMF9QUklPUklUWQk3CisKKy8qIERNQUMoMSkgKi8KKyNkZWZpbmUJRE1JTlQ4X0lSUQk5MgorI2RlZmluZQlETUlOVDlfSVJRCTkzCisjZGVmaW5lCURNSU5UMTBfSVJRCTk0CisjZGVmaW5lCURNSU5UMTFfSVJRCTk1CisjZGVmaW5lCURNQTFfSVBSX0FERFIJSU5UQ19JTlQyUFJJMworI2RlZmluZQlETUExX0lQUl9QT1MJMQorI2RlZmluZQlETUExX1BSSU9SSVRZCTcKKworI2RlZmluZQlETVRFMF9JUlEJRE1JTlQwX0lSUQorI2RlZmluZQlETVRFNF9JUlEJRE1JTlQ0X0lSUQorI2RlZmluZQlETUFfSVBSX0FERFIJRE1BMF9JUFJfQUREUgorI2RlZmluZQlETUFfSVBSX1BPUwlETUEwX0lQUl9QT1MKKyNkZWZpbmUJRE1BX1BSSU9SSVRZCURNQTBfUFJJT1JJVFkKKworLyogQ01UICovCisjZGVmaW5lCUNNVF9JUlEJCTU2CisjZGVmaW5lCUNNVF9JUFJfQUREUglJTlRDX0lOVDJQUkk0CisjZGVmaW5lCUNNVF9JUFJfUE9TCTMKKyNkZWZpbmUJQ01UX1BSSU9SSVRZCTAKKworLyogSEFDICovCisjZGVmaW5lCUhBQ19JUlEJCTYwCisjZGVmaW5lCUhBQ19JUFJfQUREUglJTlRDX0lOVDJQUkk0CisjZGVmaW5lCUhBQ19JUFJfUE9TCTIKKyNkZWZpbmUJQ01UX1BSSU9SSVRZCTAKKworLyogUENJQygwKSAqLworI2RlZmluZQlQQ0lDMF9JUlEJNjQKKyNkZWZpbmUJUENJQzBfSVBSX0FERFIJSU5UQ19JTlQyUFJJNAorI2RlZmluZQlQQ0lDMF9JUFJfUE9TCTEKKyNkZWZpbmUJUENJQzBfUFJJT1JJVFkJMgorCisvKiBQQ0lDKDEpICovCisjZGVmaW5lCVBDSUMxX0lSUQk2NQorI2RlZmluZQlQQ0lDMV9JUFJfQUREUglJTlRDX0lOVDJQUkk0CisjZGVmaW5lCVBDSUMxX0lQUl9QT1MJMAorI2RlZmluZQlQQ0lDMV9QUklPUklUWQkyCisKKy8qIFBDSUMoMikgKi8KKyNkZWZpbmUJUENJQzJfSVJRCTY2CisjZGVmaW5lCVBDSUMyX0lQUl9BRERSCUlOVENfSU5UMlBSSTUKKyNkZWZpbmUJUENJQzJfSVBSX1BPUwkzCisjZGVmaW5lCVBDSUMyX1BSSU9SSVRZCTIKKworLyogUENJQygzKSAqLworI2RlZmluZQlQQ0lDM19JUlEJNjcKKyNkZWZpbmUJUENJQzNfSVBSX0FERFIJSU5UQ19JTlQyUFJJNQorI2RlZmluZQlQQ0lDM19JUFJfUE9TCTIKKyNkZWZpbmUJUENJQzNfUFJJT1JJVFkJMgorCisvKiBQQ0lDKDQpICovCisjZGVmaW5lCVBDSUM0X0lSUQk2OAorI2RlZmluZQlQQ0lDNF9JUFJfQUREUglJTlRDX0lOVDJQUkk1CisjZGVmaW5lCVBDSUM0X0lQUl9QT1MJMQorI2RlZmluZQlQQ0lDNF9QUklPUklUWQkyCisKKy8qIFBDSUMoNSkgKi8KKyNkZWZpbmUJUENJQ0VSUl9JUlEJNjkKKyNkZWZpbmUJUENJQ1BXRDNfSVJRCTcwCisjZGVmaW5lCVBDSUNQV0QyX0lSUQk3MQorI2RlZmluZQlQQ0lDUFdEMV9JUlEJNzIKKyNkZWZpbmUJUENJQ1BXRDBfSVJRCTczCisjZGVmaW5lCVBDSUM1X0lQUl9BRERSCUlOVENfSU5UMlBSSTUKKyNkZWZpbmUJUENJQzVfSVBSX1BPUwkwCisjZGVmaW5lCVBDSUM1X1BSSU9SSVRZCTIKKworLyogU0lPRiAqLworI2RlZmluZQlTSU9GX0lSUQk4MAorI2RlZmluZQlTSU9GX0lQUl9BRERSCUlOVENfSU5UMlBSSTYKKyNkZWZpbmUJU0lPRl9JUFJfUE9TCTMKKyNkZWZpbmUJU0lPRl9QUklPUklUWQkzCisKKy8qIEhTUEkgKi8KKyNkZWZpbmUJSFNQSV9JUlEJODQKKyNkZWZpbmUJSFNQSV9JUFJfQUREUglJTlRDX0lOVDJQUkk2CisjZGVmaW5lCUhTUElfSVBSX1BPUwkyCisjZGVmaW5lCUhTUElfUFJJT1JJVFkJMworCisvKiBNTUNJRiAqLworI2RlZmluZQlNTUNJRl9GU1RBVF9JUlEJODgKKyNkZWZpbmUJTU1DSUZfVFJBTl9JUlEJODkKKyNkZWZpbmUJTU1DSUZfRVJSX0lSUQk5MAorI2RlZmluZQlNTUNJRl9GUkRZX0lSUQk5MQorI2RlZmluZQlNTUNJRl9JUFJfQUREUglJTlRDX0lOVDJQUkk2CisjZGVmaW5lCU1NQ0lGX0lQUl9QT1MJMQorI2RlZmluZQlIU1BJX1BSSU9SSVRZCTMKKworLyogU1NJICovCisjZGVmaW5lCVNTSV9JUlEJCTEwMAorI2RlZmluZQlTU0lfSVBSX0FERFIJSU5UQ19JTlQyUFJJNgorI2RlZmluZQlTU0lfSVBSX1BPUwkwCisjZGVmaW5lCVNTSV9QUklPUklUWQkzCisKKy8qIEZMQ1RMICovCisjZGVmaW5lCUZMQ1RMX0ZMU1RFX0lSUQkJMTA0CisjZGVmaW5lCUZMQ1RMX0ZMVEVORF9JUlEJMTA1CisjZGVmaW5lCUZMQ1RMX0ZMVFJRMF9JUlEJMTA2CisjZGVmaW5lCUZMQ1RMX0ZMVFJRMV9JUlEJMTA3CisjZGVmaW5lCUZMQ1RMX0lQUl9BRERSCQlJTlRDX0lOVDJQUkk3CisjZGVmaW5lCUZMQ1RMX0lQUl9QT1MJCTMKKyNkZWZpbmUJRkxDVExfUFJJT1JJVFkJCTMKKworLyogR1BJTyAqLworI2RlZmluZQlHUElPMF9JUlEJMTA4CisjZGVmaW5lCUdQSU8xX0lSUQkxMDkKKyNkZWZpbmUJR1BJTzJfSVJRCTExMAorI2RlZmluZQlHUElPM19JUlEJMTExCisjZGVmaW5lCUdQSU9fSVBSX0FERFIJSU5UQ19JTlQyUFJJNworI2RlZmluZQlHUElPX0lQUl9QT1MJMgorI2RlZmluZQlHUElPX1BSSU9SSVRZCTMKKworLyogT05DSElQX05SX0lSUVMgKi8KKyNkZWZpbmUgTlJfSVJRUyAxNTAJLyogMTExICsgMTYgKi8KKworLyogSW4gYSBnZW5lcmljIGtlcm5lbCwgTlJfSVJRUyBpcyBhbiB1cHBlciBib3VuZCwgYW5kIHdlIHNob3VsZCB1c2UKKyAqIEFDVFVBTF9OUl9JUlFTICh3aGljaCB1c2VzIHRoZSBtYWNoaW5lIHZlY3RvcikgdG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlLgorICovCisjZGVmaW5lIEFDVFVBTF9OUl9JUlFTIE5SX0lSUVMKKworZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGRpc2FibGVfaXJxX25vc3luYyh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOworCisvKgorICogU2ltcGxlIE1hc2sgUmVnaXN0ZXIgU3VwcG9ydAorICovCitleHRlcm4gdm9pZCBtYWtlX21hc2tyZWdfaXJxKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0ICppcnFfbWFza19yZWdpc3RlcjsKKworLyoKKyAqIEZ1bmN0aW9uIGZvciAib24gY2hpcCBzdXBwb3J0IG1vZHVsZXMiLgorICovCitleHRlcm4gdm9pZCBtYWtlX2ltYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKworI2RlZmluZQlJTlRDX1RNVTBfTVNLCTAKKyNkZWZpbmUJSU5UQ19UTVUzX01TSwkxCisjZGVmaW5lCUlOVENfUlRDX01TSwkyCisjZGVmaW5lCUlOVENfU0NJRjBfTVNLCTMKKyNkZWZpbmUJSU5UQ19TQ0lGMV9NU0sJNAorI2RlZmluZQlJTlRDX1dEVF9NU0sJNQorI2RlZmluZQlJTlRDX0hVSURfTVNLCTcKKyNkZWZpbmUJSU5UQ19ETUFDMF9NU0sJOAorI2RlZmluZQlJTlRDX0RNQUMxX01TSwk5CisjZGVmaW5lCUlOVENfQ01UX01TSwkxMgorI2RlZmluZQlJTlRDX0hBQ19NU0sJMTMKKyNkZWZpbmUJSU5UQ19QQ0lDMF9NU0sJMTQKKyNkZWZpbmUJSU5UQ19QQ0lDMV9NU0sJMTUKKyNkZWZpbmUJSU5UQ19QQ0lDMl9NU0sJMTYKKyNkZWZpbmUJSU5UQ19QQ0lDM19NU0sJMTcKKyNkZWZpbmUJSU5UQ19QQ0lDNF9NU0sJMTgKKyNkZWZpbmUJSU5UQ19QQ0lDNV9NU0sJMTkKKyNkZWZpbmUJSU5UQ19TSU9GX01TSwkyMAorI2RlZmluZQlJTlRDX0hTUElfTVNLCTIxCisjZGVmaW5lCUlOVENfTU1DSUZfTVNLCTIyCisjZGVmaW5lCUlOVENfU1NJX01TSwkyMworI2RlZmluZQlJTlRDX0ZMQ1RMX01TSwkyNAorI2RlZmluZQlJTlRDX0dQSU9fTVNLCTI1CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9JUlFfU0g3NzgwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lycS5oIGIvaW5jbHVkZS9hc20tc2gvaXJxLmgKaW5kZXggNjE0YThjMS4uMDYwZWMzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvaXJxLmgKQEAgLTE1LDEzICsxNSwyMCBAQAogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgkJLyogZm9yIHB0X3JlZ3MgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1NIX0hQNjAwKSB8fCBcCisjaWYgZGVmaW5lZChDT05GSUdfU0hfSFA2WFgpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19TSF9SVFM3NzUxUjJEKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfU0hfSFM3NzUxUlZPSVApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19TSF9TSDAzKQorICAgIGRlZmluZWQoQ09ORklHX1NIX0hTNzc1MVJWT0lQKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfU0hfU0gwMykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX1NIX1I3NzgwUlApIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19TSF9MQU5ESVNLKQogI2luY2x1ZGUgPGFzbS9tYWNoL2lkZS5oPgogI2VuZGlmCiAKKyNpZm5kZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MAorCisjZGVmaW5lIElOVENfRE1BQzBfTVNLCTAKKwogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpCiAjZGVmaW5lIElOVENfSVBSQQkweGZmZmZmZWUyVUwKICNkZWZpbmUgSU5UQ19JUFJCCTB4ZmZmZmZlZTRVTApAQCAtMjM1LDggKzI0Miw5IEBACiAjZGVmaW5lIFNDSUYxX0lQUl9BRERSCUlOVENfSVBSQgogI2RlZmluZSBTQ0lGMV9JUFJfUE9TCTEKICNkZWZpbmUgU0NJRjFfUFJJT1JJVFkJMwotI2VuZGlmCi0jZW5kaWYKKyNlbmRpZiAvKiBTVDQwU1RCMSAqLworCisjZW5kaWYgLyogNzc1eCAvIFNINC0yMDIgLyBTVDQwU1RCMSAqLwogCiAvKiBOUl9JUlFTIGlzIG1hZGUgZnJvbSB0aHJlZSBjb21wb25lbnRzOgogICogICAxLiBPTkNISVBfTlJfSVJRUyAtIG51bWJlciBvZiBJUkxTICsgb24tY2hpcCBwZXJpcGhlcmlhbCBtb2R1bGVzCkBAIC0yNDUsMzcgKzI1MywzNSBAQAogICovCiAKIC8qIDEuIE9OQ0hJUF9OUl9JUlFTICovCi0jaWZkZWYgQ09ORklHX1NIX0dFTkVSSUMKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MDQpCisjIGRlZmluZSBPTkNISVBfTlJfSVJRUyAyNAkvLyBBY3R1YWxseSAyMQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KQorIyBkZWZpbmUgT05DSElQX05SX0lSUVMgNjQKKyMgZGVmaW5lIFBJTlRfTlJfSVJRUyAgIDE2CisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDgpCisjIGRlZmluZSBPTkNISVBfTlJfSVJRUyAzMgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCisjIGRlZmluZSBPTkNISVBfTlJfSVJRUyA2NAkvLyBBY3R1YWxseSA2MQorIyBkZWZpbmUgUElOVF9OUl9JUlFTICAgMTYKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCkKKyMgZGVmaW5lIE9OQ0hJUF9OUl9JUlFTIDQ4CS8vIEFjdHVhbGx5IDQ0CisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEpCisjIGRlZmluZSBPTkNISVBfTlJfSVJRUyA3MgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKQorIyBkZWZpbmUgT05DSElQX05SX0lSUVMgMTEyCS8qIFhYWCAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMikKKyMgZGVmaW5lIE9OQ0hJUF9OUl9JUlFTIDcyCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSkKICMgZGVmaW5lIE9OQ0hJUF9OUl9JUlFTIDE0NAotI2Vsc2UKLSMgaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjA0KQotIyAgZGVmaW5lIE9OQ0hJUF9OUl9JUlFTIDI0CS8vIEFjdHVhbGx5IDIxCi0jIGVsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KQotIyAgZGVmaW5lIE9OQ0hJUF9OUl9JUlFTIDY0Ci0jICBkZWZpbmUgUElOVF9OUl9JUlFTICAgMTYKLSMgZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDgpCi0jICBkZWZpbmUgT05DSElQX05SX0lSUVMgMzIKLSMgZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpIHx8IFwKLSAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCi0jICBkZWZpbmUgT05DSElQX05SX0lSUVMgNjQJLy8gQWN0dWFsbHkgNjEKLSMgIGRlZmluZSBQSU5UX05SX0lSUVMgICAxNgotIyBlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCkKLSMgIGRlZmluZSBPTkNISVBfTlJfSVJRUyA0OAkvLyBBY3R1YWxseSA0NAotIyBlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkKLSMgIGRlZmluZSBPTkNISVBfTlJfSVJRUyA3MgotIyBlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkKLSMgIGRlZmluZSBPTkNISVBfTlJfSVJRUyAxMTAKLSMgZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyKQotIyAgZGVmaW5lIE9OQ0hJUF9OUl9JUlFTIDcyCi0jIGVsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MFNUQjEpCi0jICBkZWZpbmUgT05DSElQX05SX0lSUVMgMTQ0Ci0jIGVsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKQotIyAgZGVmaW5lIE9OQ0hJUF9OUl9JUlFTIDEwOQotIyBlbmRpZgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKQorIyBkZWZpbmUgT05DSElQX05SX0lSUVMgMTA5CisjZWxpZiBkZWZpbmVkKENPTkZJR19TSF9VTktOT1dOKQkvKiBNb3N0IGJlIGxhc3QgKi8KKyMgZGVmaW5lIE9OQ0hJUF9OUl9JUlFTIDE0NAogI2VuZGlmCiAKIC8qIDIuIFBJTlRfTlJfSVJRUyAqLwotI2lmZGVmIENPTkZJR19TSF9HRU5FUklDCisjaWZkZWYgQ09ORklHX1NIX1VOS05PV04KICMgZGVmaW5lIFBJTlRfTlJfSVJRUyAxNgogI2Vsc2UKICMgaWZuZGVmIFBJTlRfTlJfSVJRUwpAQCAtMjg4LDIyICsyOTQsMjIgQEAKICNlbmRpZgogCiAvKiAzLiBPRkZDSElQX05SX0lSUVMgKi8KLSNpZmRlZiBDT05GSUdfU0hfR0VORVJJQworI2lmIGRlZmluZWQoQ09ORklHX0hENjQ0NjEpCisjIGRlZmluZSBPRkZDSElQX05SX0lSUVMgMTgKKyNlbGlmIGRlZmluZWQgKENPTkZJR19TSF9CSUdTVVIpIC8qIG11c3QgYmUgYmVmb3JlIENPTkZJR19IRDY0NDY1ICovCisjIGRlZmluZSBPRkZDSElQX05SX0lSUVMgNDgKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hENjQ0NjUpCiAjIGRlZmluZSBPRkZDSElQX05SX0lSUVMgMTYKKyNlbGlmIGRlZmluZWQgKENPTkZJR19TSF9FQzMxMDQpCisjIGRlZmluZSBPRkZDSElQX05SX0lSUVMgMTYKKyNlbGlmIGRlZmluZWQgKENPTkZJR19TSF9EUkVBTUNBU1QpCisjIGRlZmluZSBPRkZDSElQX05SX0lSUVMgOTYKKyNlbGlmIGRlZmluZWQgKENPTkZJR19TSF9USVRBTikKKyMgZGVmaW5lIE9GRkNISVBfTlJfSVJRUyA0CisjZWxpZiBkZWZpbmVkKENPTkZJR19TSF9VTktOT1dOKQorIyBkZWZpbmUgT0ZGQ0hJUF9OUl9JUlFTIDE2CS8qIE11c3QgYWxzbyBiZSBsYXN0ICovCiAjZWxzZQotIyBpZiBkZWZpbmVkKENPTkZJR19IRDY0NDYxKQotIyAgZGVmaW5lIE9GRkNISVBfTlJfSVJRUyAxOAotIyBlbGlmIGRlZmluZWQgKENPTkZJR19TSF9CSUdTVVIpIC8qIG11c3QgYmUgYmVmb3JlIENPTkZJR19IRDY0NDY1ICovCi0jICBkZWZpbmUgT0ZGQ0hJUF9OUl9JUlFTIDQ4Ci0jIGVsaWYgZGVmaW5lZChDT05GSUdfSEQ2NDQ2NSkKLSMgIGRlZmluZSBPRkZDSElQX05SX0lSUVMgMTYKLSMgZWxpZiBkZWZpbmVkIChDT05GSUdfU0hfRUMzMTA0KQotIyAgZGVmaW5lIE9GRkNISVBfTlJfSVJRUyAxNgotIyBlbGlmIGRlZmluZWQgKENPTkZJR19TSF9EUkVBTUNBU1QpCi0jICBkZWZpbmUgT0ZGQ0hJUF9OUl9JUlFTIDk2Ci0jIGVsc2UKLSMgIGRlZmluZSBPRkZDSElQX05SX0lSUVMgMAotIyBlbmRpZgorIyBkZWZpbmUgT0ZGQ0hJUF9OUl9JUlFTIDAKICNlbmRpZgogCiAjaWYgT0ZGQ0hJUF9OUl9JUlFTID4gMApAQCAtMzEzLDE2ICszMTksNiBAQAogLyogTlJfSVJRUy4gMSsyKzMgKi8KICNkZWZpbmUgTlJfSVJRUyAoT05DSElQX05SX0lSUVMgKyBQSU5UX05SX0lSUVMgKyBPRkZDSElQX05SX0lSUVMpCiAKLS8qIEluIGEgZ2VuZXJpYyBrZXJuZWwsIE5SX0lSUVMgaXMgYW4gdXBwZXIgYm91bmQsIGFuZCB3ZSBzaG91bGQgdXNlCi0gKiBBQ1RVQUxfTlJfSVJRUyAod2hpY2ggdXNlcyB0aGUgbWFjaGluZSB2ZWN0b3IpIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZS4KLSAqLwotI2lmZGVmIENPTkZJR19TSF9HRU5FUklDCi0jIGRlZmluZSBBQ1RVQUxfTlJfSVJRUyAoc2hfbXYubXZfbnJfaXJxcykKLSNlbHNlCi0jIGRlZmluZSBBQ1RVQUxfTlJfSVJRUyBOUl9JUlFTCi0jZW5kaWYKLQotCiBleHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnFfbm9zeW5jKHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7CkBAIC01NDIsOSArNTM4LDYgQEAKIAogZXh0ZXJuIGludCBpcHJfaXJxX2RlbXV4KGludCBpcnEpOwogI2RlZmluZSBfX2lycV9kZW11eChpcnEpIGlwcl9pcnFfZGVtdXgoaXJxKQotCi0jZWxzZQotI2RlZmluZSBfX2lycV9kZW11eChpcnEpIGlycQogI2VuZGlmIC8qIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgfHwgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEpIHx8IFwKQEAgLTU1NywxOCArNTUwLDM1IEBACiAjZGVmaW5lIElOVENfSUNSX0lSTE0JKDE8PDcpCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMQorI2Vsc2UKKyNpbmNsdWRlIDxhc20vaXJxLXNoNzc4MC5oPgorI2VuZGlmCiAKLSNkZWZpbmUgSU5UQzJfRklSU1RfSVJRIDY0Ci0jZGVmaW5lIE5SX0lOVEMyX0lSUVMgMjUKLQorLyogU0ggd2l0aCBJTlRDMi1zdHlsZSBpbnRlcnJ1cHRzICovCisjaWZkZWYgQ09ORklHX0NQVV9IQVNfSU5UQzJfSVJRCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MFNUQjEpCiAjZGVmaW5lIElOVEMyX0JBU0UJMHhmZTA4MDAwMAotI2RlZmluZSBJTlRDMl9JTlRDMk1PREUJKElOVEMyX0JBU0UrMHg4MCkKLQotI2RlZmluZSBJTlRDMl9JTlRQUklfT0ZGU0VUCTB4MDAKKyNkZWZpbmUgSU5UQzJfRklSU1RfSVJRIDY0CiAjZGVmaW5lIElOVEMyX0lOVFJFUV9PRkZTRVQJMHgyMAogI2RlZmluZSBJTlRDMl9JTlRNU0tfT0ZGU0VUCTB4NDAKICNkZWZpbmUgSU5UQzJfSU5UTVNLQ0xSX09GRlNFVAkweDYwCisjZGVmaW5lIE5SX0lOVEMyX0lSUVMJMjUKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkKKyNkZWZpbmUgSU5UQzJfQkFTRQkweGZlMDgwMDAwCisjZGVmaW5lIElOVEMyX0ZJUlNUX0lSUSA0OAkvKiBJTlRFVlQgMHg4MDAgKi8KKyNkZWZpbmUgSU5UQzJfSU5UUkVRX09GRlNFVAkweDIwCisjZGVmaW5lIElOVEMyX0lOVE1TS19PRkZTRVQJMHg0MAorI2RlZmluZSBJTlRDMl9JTlRNU0tDTFJfT0ZGU0VUCTB4NjAKKyNkZWZpbmUgTlJfSU5UQzJfSVJRUwk2NAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQorI2RlZmluZSBJTlRDMl9CQVNFCTB4ZmZkNDAwMDAKKyNkZWZpbmUgSU5UQzJfRklSU1RfSVJRCTIyCisjZGVmaW5lIElOVEMyX0lOVE1TS19PRkZTRVQJKDB4MzgpCisjZGVmaW5lIElOVEMyX0lOVE1TS0NMUl9PRkZTRVQJKDB4M2MpCisjZGVmaW5lIE5SX0lOVEMyX0lSUVMJNjAKKyNlbmRpZgorCisjZGVmaW5lIElOVEMyX0lOVFBSSV9PRkZTRVQJMHgwMAogCiB2b2lkIG1ha2VfaW50YzJfaXJxKHVuc2lnbmVkIGludCBpcnEsCiAJCSAgICB1bnNpZ25lZCBpbnQgaXByX29mZnNldCwgdW5zaWduZWQgaW50IGlwcl9zaGlmdCwKQEAgLTU3NywxMyArNTg3LDE2IEBACiB2b2lkIGluaXRfSVJRX2ludGMyKHZvaWQpOwogdm9pZCBpbnRjMl9hZGRfY2xlYXJfaXJxKGludCBpcnEsIGludCAoKmZuKShpbnQpKTsKIAotI2VuZGlmCS8qIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSAqLworI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IGdlbmVyaWNfaXJxX2RlbXV4KGludCBpcnEpCiB7CiAJcmV0dXJuIGlycTsKIH0KIAorI2lmbmRlZiBfX2lycV9kZW11eAorI2RlZmluZSBfX2lycV9kZW11eChpcnEpCShpcnEpCisjZW5kaWYKICNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpCShpcnEpCiAjZGVmaW5lIGlycV9kZW11eChpcnEpCQlfX2lycV9kZW11eChzaF9tdi5tdl9pcnFfZGVtdXgoaXJxKSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gva2V4ZWMuaCBiL2luY2x1ZGUvYXNtLXNoL2tleGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRmZTU5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9rZXhlYy5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgX1NIX0tFWEVDX0gKKyNkZWZpbmUgX1NIX0tFWEVDX0gKKworLyoKKyAqIEtFWEVDX1NPVVJDRV9NRU1PUllfTElNSVQgbWF4aW11bSBwYWdlIGdldF9mcmVlX3BhZ2UgY2FuIHJldHVybi4KKyAqIEkuZS4gTWF4aW11bSBwYWdlIHRoYXQgaXMgbWFwcGVkIGRpcmVjdGx5IGludG8ga2VybmVsIG1lbW9yeSwKKyAqIGFuZCBrbWFwIGlzIG5vdCByZXF1aXJlZC4KKyAqCisgKiBTb21lb25lIGNvcnJlY3QgbWUgaWYgRklYQUREUl9TVEFSVCAtIFBBR0VPRkZTRVQgaXMgbm90IHRoZSBjb3JyZWN0CisgKiBjYWxjdWxhdGlvbiBmb3IgdGhlIGFtb3VudCBvZiBtZW1vcnkgZGlyZWN0bHkgbWFwcGFibGUgaW50byB0aGUKKyAqIGtlcm5lbCBtZW1vcnkgc3BhY2UuCisgKi8KKworLyogTWF4aW11bSBwaHlzaWNhbCBhZGRyZXNzIHdlIGNhbiB1c2UgcGFnZXMgZnJvbSAqLworI2RlZmluZSBLRVhFQ19TT1VSQ0VfTUVNT1JZX0xJTUlUICgtMVVMKQorLyogTWF4aW11bSBhZGRyZXNzIHdlIGNhbiByZWFjaCBpbiBwaHlzaWNhbCBhZGRyZXNzIG1vZGUgKi8KKyNkZWZpbmUgS0VYRUNfREVTVElOQVRJT05fTUVNT1JZX0xJTUlUICgtMVVMKQorLyogTWF4aW11bSBhZGRyZXNzIHdlIGNhbiB1c2UgZm9yIHRoZSBjb250cm9sIGNvZGUgYnVmZmVyICovCisjZGVmaW5lIEtFWEVDX0NPTlRST0xfTUVNT1JZX0xJTUlUIFRBU0tfU0laRQorCisjZGVmaW5lIEtFWEVDX0NPTlRST0xfQ09ERV9TSVpFCTQwOTYKKworLyogVGhlIG5hdGl2ZSBhcmNoaXRlY3R1cmUgKi8KKyNkZWZpbmUgS0VYRUNfQVJDSCBLRVhFQ19BUkNIX1NICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB2b2lkIG1hY2hpbmVfc2h1dGRvd24odm9pZCk7CitleHRlcm4gdm9pZCAqY3Jhc2hfbm90ZXM7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9TSF9LRVhFQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9tYWNodmVjLmggYi9pbmNsdWRlL2FzbS1zaC9tYWNodmVjLmgKaW5kZXggM2YxOGFhMS4uNTUwYzUwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvbWFjaHZlYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL21hY2h2ZWMuaApAQCAtMTgsNDQgKzE4LDM3IEBACiAjaW5jbHVkZSA8YXNtL21hY2h2ZWNfaW5pdC5oPgogCiBzdHJ1Y3QgZGV2aWNlOwotc3RydWN0IHRpbWV2YWw7CiAKLXN0cnVjdCBzaF9tYWNoaW5lX3ZlY3Rvcgoteworc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIHsKIAlpbnQgbXZfbnJfaXJxczsKIAotCXVuc2lnbmVkIGNoYXIgKCptdl9pbmIpKHVuc2lnbmVkIGxvbmcpOwotCXVuc2lnbmVkIHNob3J0ICgqbXZfaW53KSh1bnNpZ25lZCBsb25nKTsKLQl1bnNpZ25lZCBpbnQgKCptdl9pbmwpKHVuc2lnbmVkIGxvbmcpOwotCXZvaWQgKCptdl9vdXRiKSh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBsb25nKTsKLQl2b2lkICgqbXZfb3V0dykodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIGxvbmcpOwotCXZvaWQgKCptdl9vdXRsKSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCXU4ICgqbXZfaW5iKSh1bnNpZ25lZCBsb25nKTsKKwl1MTYgKCptdl9pbncpKHVuc2lnbmVkIGxvbmcpOworCXUzMiAoKm12X2lubCkodW5zaWduZWQgbG9uZyk7CisJdm9pZCAoKm12X291dGIpKHU4LCB1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqbXZfb3V0dykodTE2LCB1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqbXZfb3V0bCkodTMyLCB1bnNpZ25lZCBsb25nKTsKIAotCXVuc2lnbmVkIGNoYXIgKCptdl9pbmJfcCkodW5zaWduZWQgbG9uZyk7Ci0JdW5zaWduZWQgc2hvcnQgKCptdl9pbndfcCkodW5zaWduZWQgbG9uZyk7Ci0JdW5zaWduZWQgaW50ICgqbXZfaW5sX3ApKHVuc2lnbmVkIGxvbmcpOwotCXZvaWQgKCptdl9vdXRiX3ApKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGxvbmcpOwotCXZvaWQgKCptdl9vdXR3X3ApKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBsb25nKTsKLQl2b2lkICgqbXZfb3V0bF9wKSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCXU4ICgqbXZfaW5iX3ApKHVuc2lnbmVkIGxvbmcpOworCXUxNiAoKm12X2lud19wKSh1bnNpZ25lZCBsb25nKTsKKwl1MzIgKCptdl9pbmxfcCkodW5zaWduZWQgbG9uZyk7CisJdm9pZCAoKm12X291dGJfcCkodTgsIHVuc2lnbmVkIGxvbmcpOworCXZvaWQgKCptdl9vdXR3X3ApKHUxNiwgdW5zaWduZWQgbG9uZyk7CisJdm9pZCAoKm12X291dGxfcCkodTMyLCB1bnNpZ25lZCBsb25nKTsKIAotCXZvaWQgKCptdl9pbnNiKSh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotCXZvaWQgKCptdl9pbnN3KSh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotCXZvaWQgKCptdl9pbnNsKSh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotCXZvaWQgKCptdl9vdXRzYikodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQl2b2lkICgqbXZfb3V0c3cpKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci0Jdm9pZCAoKm12X291dHNsKSh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCXZvaWQgKCptdl9pbnNiKSh1bnNpZ25lZCBsb25nLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCXZvaWQgKCptdl9pbnN3KSh1bnNpZ25lZCBsb25nLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCXZvaWQgKCptdl9pbnNsKSh1bnNpZ25lZCBsb25nLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOworCXZvaWQgKCptdl9vdXRzYikodW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKKwl2b2lkICgqbXZfb3V0c3cpKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCk7CisJdm9pZCAoKm12X291dHNsKSh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogCi0JdW5zaWduZWQgY2hhciAoKm12X3JlYWRiKSh1bnNpZ25lZCBsb25nKTsKLQl1bnNpZ25lZCBzaG9ydCAoKm12X3JlYWR3KSh1bnNpZ25lZCBsb25nKTsKLQl1bnNpZ25lZCBpbnQgKCptdl9yZWFkbCkodW5zaWduZWQgbG9uZyk7Ci0Jdm9pZCAoKm12X3dyaXRlYikodW5zaWduZWQgY2hhciwgdW5zaWduZWQgbG9uZyk7Ci0Jdm9pZCAoKm12X3dyaXRldykodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIGxvbmcpOwotCXZvaWQgKCptdl93cml0ZWwpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7Ci0KLQl2b2lkKiAoKm12X2lvcmVtYXApKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOwotCXZvaWQgKCptdl9pb3VubWFwKSh2b2lkICphZGRyKTsKLQotCXVuc2lnbmVkIGxvbmcgKCptdl9pc2FfcG9ydDJhZGRyKSh1bnNpZ25lZCBsb25nIG9mZnNldCk7CisJdTggKCptdl9yZWFkYikodm9pZCBfX2lvbWVtICopOworCXUxNiAoKm12X3JlYWR3KSh2b2lkIF9faW9tZW0gKik7CisJdTMyICgqbXZfcmVhZGwpKHZvaWQgX19pb21lbSAqKTsKKwl2b2lkICgqbXZfd3JpdGViKSh1OCwgdm9pZCBfX2lvbWVtICopOworCXZvaWQgKCptdl93cml0ZXcpKHUxNiwgdm9pZCBfX2lvbWVtICopOworCXZvaWQgKCptdl93cml0ZWwpKHUzMiwgdm9pZCBfX2lvbWVtICopOwogCiAJaW50ICgqbXZfaXJxX2RlbXV4KShpbnQgaXJxKTsKIApAQCAtNjYsNiArNTksOSBAQAogCiAJdm9pZCAqKCptdl9jb25zaXN0ZW50X2FsbG9jKShzdHJ1Y3QgZGV2aWNlICosIHNpemVfdCwgZG1hX2FkZHJfdCAqLCBnZnBfdCk7CiAJaW50ICgqbXZfY29uc2lzdGVudF9mcmVlKShzdHJ1Y3QgZGV2aWNlICosIHNpemVfdCwgdm9pZCAqLCBkbWFfYWRkcl90KTsKKworCXZvaWQgX19pb21lbSAqKCptdl9pb3BvcnRfbWFwKSh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBzaXplKTsKKwl2b2lkICgqbXZfaW9wb3J0X3VubWFwKSh2b2lkIF9faW9tZW0gKik7CiB9OwogCiBleHRlcm4gc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIHNoX212OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdGltZXIuaCBiL2luY2x1ZGUvYXNtLXNoL3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ2NTc5YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3RpbWVyLmgKQEAgLTAsMCArMSw0MiBAQAorI2lmbmRlZiBfX0FTTV9TSF9USU1FUl9ICisjZGVmaW5lIF9fQVNNX1NIX1RJTUVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGFzbS9jcHUvdGltZXIuaD4KKworc3RydWN0IHN5c190aW1lcl9vcHMgeworCWludCAoKmluaXQpKHZvaWQpOworCXVuc2lnbmVkIGxvbmcgKCpnZXRfb2Zmc2V0KSh2b2lkKTsKKwl1bnNpZ25lZCBsb25nICgqZ2V0X2ZyZXF1ZW5jeSkodm9pZCk7Cit9OworCitzdHJ1Y3Qgc3lzX3RpbWVyIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKKworCXN0cnVjdCBzeXNfZGV2aWNlCWRldjsKKwlzdHJ1Y3Qgc3lzX3RpbWVyX29wcwkqb3BzOworfTsKKworI2RlZmluZSBUSUNLX1NJWkUgKHRpY2tfbnNlYyAvIDEwMDApCisKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHRtdV90aW1lcjsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyICpzeXNfdGltZXI7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfdGltZXJfb2Zmc2V0KHZvaWQpCit7CisJcmV0dXJuIHN5c190aW1lci0+b3BzLT5nZXRfb2Zmc2V0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfdGltZXJfZnJlcXVlbmN5KHZvaWQpCit7CisJcmV0dXJuIHN5c190aW1lci0+b3BzLT5nZXRfZnJlcXVlbmN5KCk7Cit9CisKKy8qIGFyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci5jICovCitzdHJ1Y3Qgc3lzX3RpbWVyICpnZXRfc3lzX3RpbWVyKHZvaWQpOworCisvKiBhcmNoL3NoL2tlcm5lbC90aW1lLmMgKi8KK3ZvaWQgaGFuZGxlX3RpbWVyX3RpY2soc3RydWN0IHB0X3JlZ3MgKik7CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9USU1FUl9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaWEzMi5oCmluZGV4IGM3YmM5YzAuLmU2YjdmMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lhMzIuaApAQCAtMTY5LDYgKzE2OSw4IEBACiBzdHJ1Y3QgbGludXhfYmlucHJtOwogZXh0ZXJuIGludCBpYTMyX3NldHVwX2FyZ19wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAogCQkJCXVuc2lnbmVkIGxvbmcgc3RhY2tfdG9wLCBpbnQgZXhlY19zdGFjayk7CitzdHJ1Y3QgbW1fc3RydWN0OworZXh0ZXJuIHZvaWQgaWEzMl9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pcnEuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pcnEuaAppbmRleCBmYjcyNGJhLi45ZGI1YTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lycS5oCkBAIC0zNiw3ICszNiw3IEBACiAjZGVmaW5lIE5SX0lSUV9WRUNUT1JTIE5SX0lSUVMKICNlbHNlCiAjZGVmaW5lIE5SX0lSUVMgMjI0Ci0jZGVmaW5lIE5SX0lSUV9WRUNUT1JTIDEwMjQKKyNkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMgKDMyICogTlJfQ1BVUykKICNlbmRpZgogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgaXJxX2Nhbm9uaWNhbGl6ZShpbnQgaXJxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wYWdlLmgKaW5kZXggZGNiYjRmYy4uNjE1ZTNlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGFnZS5oCkBAIC0yNiw2ICsyNiwxMyBAQAogI2RlZmluZSBJUlFTVEFDS19PUkRFUiAyCiAjZGVmaW5lIElSUVNUQUNLU0laRSAoUEFHRV9TSVpFIDw8IElSUVNUQUNLX09SREVSKQogCisjZGVmaW5lIFNUQUNLRkFVTFRfU1RBQ0sgMQorI2RlZmluZSBET1VCTEVGQVVMVF9TVEFDSyAyCisjZGVmaW5lIE5NSV9TVEFDSyAzCisjZGVmaW5lIERFQlVHX1NUQUNLIDQKKyNkZWZpbmUgTUNFX1NUQUNLIDUKKyNkZWZpbmUgTl9FWENFUFRJT05fU1RBQ0tTIDUgIC8qIGh3IGxpbWl0OiA3ICovCisKICNkZWZpbmUgTEFSR0VfUEFHRV9NQVNLICh+KExBUkdFX1BBR0VfU0laRS0xKSkKICNkZWZpbmUgTEFSR0VfUEFHRV9TSVpFICgxVUwgPDwgUE1EX1NISUZUKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcHJvY2Vzc29yLmgKaW5kZXggODdhMjgyYi4uOGM4ZDg4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm9jZXNzb3IuaApAQCAtMjczLDEzICsyNzMsNiBAQAogI2RlZmluZSBJTklUX01NQVAgXAogeyAmaW5pdF9tbSwgMCwgMCwgTlVMTCwgUEFHRV9TSEFSRUQsIFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMsIDEsIE5VTEwsIE5VTEwgfQogCi0jZGVmaW5lIFNUQUNLRkFVTFRfU1RBQ0sgMQotI2RlZmluZSBET1VCTEVGQVVMVF9TVEFDSyAyIAotI2RlZmluZSBOTUlfU1RBQ0sgMyAKLSNkZWZpbmUgREVCVUdfU1RBQ0sgNCAKLSNkZWZpbmUgTUNFX1NUQUNLIDUKLSNkZWZpbmUgTl9FWENFUFRJT05fU1RBQ0tTIDUgIC8qIGh3IGxpbWl0OiA3ICovCi0KICNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsbmV3X3JpcCxuZXdfcnNwKSBkbyB7IFwKIAlhc20gdm9sYXRpbGUoIm1vdmwgJTAsJSVmczsgbW92bCAlMCwlJWVzOyBtb3ZsICUwLCUlZHMiOiA6InIiICgwKSk7CSBcCiAJbG9hZF9nc19pbmRleCgwKTsJCQkJCQkJXApAQCAtNDg0LDQgKzQ3Nyw2IEBACiAvKiBCb290IGxvYWRlciB0eXBlIGZyb20gdGhlIHNldHVwIGhlYWRlciAqLwogZXh0ZXJuIGludCBib290bG9hZGVyX3R5cGU7CiAKKyNkZWZpbmUgSEFWRV9BUkNIX1BJQ0tfTU1BUF9MQVlPVVQgMQorCiAjZW5kaWYgLyogX19BU01fWDg2XzY0X1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc3lzdGVtLmgKaW5kZXggMGVhY2JlZi4uYTczZjBjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zeXN0ZW0uaApAQCAtMzU0LDExICszNTQsNiBAQAogI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpCiAjZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RpIjogOiA6Im1lbW9yeSIpCiAKLS8qIHVzZWQgaW4gdGhlIGlkbGUgbG9vcDsgc3RpIHRha2VzIG9uZSBpbnN0cnVjdGlvbiBjeWNsZSB0byBjb21wbGV0ZSAqLwotI2RlZmluZSBzYWZlX2hhbHQoKQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aTsgaGx0IjogOiA6Im1lbW9yeSIpCi0vKiB1c2VkIHdoZW4gaW50ZXJydXB0cyBhcmUgYWxyZWFkeSBlbmFibGVkIG9yIHRvIHNodXRkb3duIHRoZSBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgaGFsdCgpCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImhsdCI6IDogOiJtZW1vcnkiKQotCiAjZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkJCVwKICh7CQkJCQlcCiAJdW5zaWduZWQgbG9uZyBmbGFnczsJCVwKQEAgLTM3MCw2ICszNjUsMTEgQEAKICNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoeCkgCWRvIHsgd2Fybl9pZl9ub3RfdWxvbmcoeCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCIjIGxvY2FsX2lycV9zYXZlIFxuXHQgcHVzaGZxIDsgcG9wcSAlMCA7IGNsaSI6Ij1nIiAoeCk6IC8qIG5vIGlucHV0ICovIDoibWVtb3J5Iik7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAorLyogdXNlZCBpbiB0aGUgaWRsZSBsb29wOyBzdGkgdGFrZXMgb25lIGluc3RydWN0aW9uIGN5Y2xlIHRvIGNvbXBsZXRlICovCisjZGVmaW5lIHNhZmVfaGFsdCgpCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RpOyBobHQiOiA6IDoibWVtb3J5IikKKy8qIHVzZWQgd2hlbiBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5IGVuYWJsZWQgb3IgdG8gc2h1dGRvd24gdGhlIHByb2Nlc3NvciAqLworI2RlZmluZSBoYWx0KCkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiaGx0IjogOiA6Im1lbW9yeSIpCisKIHZvaWQgY3B1X2lkbGVfd2FpdCh2b2lkKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXJjaF9hbGlnbl9zdGFjayh1bnNpZ25lZCBsb25nIHNwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA1NTJjZWRmLi5iNzdmMjYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0xMjkwLDYgKzEyOTAsOSBAQAogCiBleHRlcm4gaW50IHZmc19zdGF0ZnMoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrc3RhdGZzICopOwogCisvKiAvc3lzL2ZzICovCitleHRlcm4gc3RydWN0IHN1YnN5c3RlbSBmc19zdWJzeXM7CisKICNkZWZpbmUgRkxPQ0tfVkVSSUZZX1JFQUQgIDEKICNkZWZpbmUgRkxPQ0tfVkVSSUZZX1dSSVRFIDIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaCBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKaW5kZXggNmZmMmQzNi4uNDc0YzhmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCkBAIC0xMDQsNiArMTA0LDEwIEBACiAjZGVmaW5lIEkyQ19EUklWRVJJRF9BS0lUQUlPRVhQCTc0CS8qIElPIEV4cGFuZGVyIG9uIFNoYXJwIFNMLUMxMDAwICovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9JTkZSQVJFRAk3NQkvKiBJMkMgSW5mcmFSZWQgb24gVmlkZW8gYm9hcmRzICovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9UVlA1MTUwCTc2CS8qIFRWUDUxNTAgdmlkZW8gZGVjb2RlciAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1dNODczOQk3NwkvKiB3bTg3MzkgYXVkaW8gcHJvY2Vzc29yCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9VUEQ2NDA4Mwk3OAkvKiB1cGQ2NDA4MyB2aWRlbyBwcm9jZXNzb3IJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1VQRDY0MDMxQQk3OQkvKiB1cGQ2NDAzMWEgdmlkZW8gcHJvY2Vzc29yCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTdYCTgwCS8qIHNhYTcxN3ggdmlkZW8gZW5jb2RlcgkqLwogCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9JMkNERVYJOTAwCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9BUlAgICAgICAgIDkwMiAgICAvKiBTTUJ1cyBBUlAgQ2xpZW50ICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0LmggYi9pbmNsdWRlL2xpbnV4L2luaXQuaAppbmRleCA1OTAwOGMzLi5mZjhkOGI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXQuaApAQCAtMjQxLDYgKzI0MSwxOCBAQAogI2RlZmluZSBfX2NwdWV4aXRkYXRhCV9fZXhpdGRhdGEKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCisjZGVmaW5lIF9fbWVtaW5pdAorI2RlZmluZSBfX21lbWluaXRkYXRhCisjZGVmaW5lIF9fbWVtZXhpdAorI2RlZmluZSBfX21lbWV4aXRkYXRhCisjZWxzZQorI2RlZmluZSBfX21lbWluaXQJX19pbml0CisjZGVmaW5lIF9fbWVtaW5pdGRhdGEgX19pbml0ZGF0YQorI2RlZmluZSBfX21lbWV4aXQgX19leGl0CisjZGVmaW5lIF9fbWVtZXhpdGRhdGEJX19leGl0ZGF0YQorI2VuZGlmCisKIC8qIEZ1bmN0aW9ucyBtYXJrZWQgYXMgX19kZXZleGl0IG1heSBiZSBkaXNjYXJkZWQgYXQga2VybmVsIGxpbmsgdGltZSwgZGVwZW5kaW5nCiAgICBvbiBjb25maWcgb3B0aW9ucy4gIE5ld2VyIHZlcnNpb25zIG9mIGJpbnV0aWxzIGRldGVjdCByZWZlcmVuY2VzIGZyb20KICAgIHJldGFpbmVkIHNlY3Rpb25zIHRvIGRpc2NhcmRlZCBzZWN0aW9ucyBhbmQgZmxhZyBhbiBlcnJvci4gIFBvaW50ZXJzIHRvCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjLmgKaW5kZXggOTRhYmMwNy4uYTMxMWY1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXhlYy5oCisrKyBiL2luY2x1ZGUvbGludXgva2V4ZWMuaApAQCAtMTE5LDYgKzExOSw3IEBACiAjZGVmaW5lIEtFWEVDX0FSQ0hfUFBDNjQgICAoMjEgPDwgMTYpCiAjZGVmaW5lIEtFWEVDX0FSQ0hfSUFfNjQgICAoNTAgPDwgMTYpCiAjZGVmaW5lIEtFWEVDX0FSQ0hfUzM5MCAgICAoMjIgPDwgMTYpCisjZGVmaW5lIEtFWEVDX0FSQ0hfU0ggICAgICAoNDIgPDwgMTYpCiAKICNkZWZpbmUgS0VYRUNfRkxBR1MgICAgKEtFWEVDX09OX0NSQVNIKSAgLyogTGlzdCBvZiBkZWZpbmVkL2xlZ2FsIGtleGVjIGZsYWdzICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHVuZXItdHlwZXMuaCBiL2luY2x1ZGUvbWVkaWEvdHVuZXItdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTgyMWFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS90dW5lci10eXBlcy5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBkZXNjcmlwdGlvbnMgZm9yIHNpbXBsZSB0dW5lcnMuCisgKi8KKworI2lmbmRlZiBfX1RVTkVSX1RZUEVTX0hfXworI2RlZmluZSBfX1RVTkVSX1RZUEVTX0hfXworCitlbnVtIHBhcmFtX3R5cGUgeworCVRVTkVSX1BBUkFNX1RZUEVfUkFESU8sIFwKKwlUVU5FUl9QQVJBTV9UWVBFX1BBTCwgXAorCVRVTkVSX1BBUkFNX1RZUEVfU0VDQU0sIFwKKwlUVU5FUl9QQVJBTV9UWVBFX05UU0MKK307CisKK3N0cnVjdCB0dW5lcl9yYW5nZSB7CisJdW5zaWduZWQgc2hvcnQgbGltaXQ7CisJdW5zaWduZWQgY2hhciBjYjsKK307CisKK3N0cnVjdCB0dW5lcl9wYXJhbXMgeworCWVudW0gcGFyYW1fdHlwZSB0eXBlOworCS8qIE1hbnkgUGhpbGlwcyBiYXNlZCB0dW5lcnMgaGF2ZSBhIGNvbW1lbnQgbGlrZSB0aGlzIGluIHRoZWlyCisJICogZGF0YXNoZWV0OgorCSAqCisJICogICBGb3IgY2hhbm5lbCBzZWxlY3Rpb24gaW52b2x2aW5nIGJhbmQgc3dpdGNoaW5nLCBhbmQgdG8gZW5zdXJlCisJICogICBzbW9vdGggdHVuaW5nIHRvIHRoZSBkZXNpcmVkIGNoYW5uZWwgd2l0aG91dCBjYXVzaW5nCisJICogICB1bm5lY2Vzc2FyeSBjaGFyZ2UgcHVtcCBhY3Rpb24sIGl0IGlzIHJlY29tbWVuZGVkIHRvIGNvbnNpZGVyCisJICogICB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHdhbnRlZCBjaGFubmVsIGZyZXF1ZW5jeSBhbmQgdGhlCisJICogICBjdXJyZW50IGNoYW5uZWwgZnJlcXVlbmN5LiAgVW5uZWNlc3NhcnkgY2hhcmdlIHB1bXAgYWN0aW9uCisJICogICB3aWxsIHJlc3VsdCBpbiB2ZXJ5IGxvdyB0dW5pbmcgdm9sdGFnZSB3aGljaCBtYXkgZHJpdmUgdGhlCisJICogICBvc2NpbGxhdG9yIHRvIGV4dHJlbWUgY29uZGl0aW9ucy4KKwkgKgorCSAqIFNldCBjYl9maXJzdF9pZl9sb3dlcl9mcmVxIHRvIDEsIGlmIHRoaXMgY2hlY2sgaXMKKwkgKiByZXF1aXJlZCBmb3IgdGhpcyB0dW5lci4KKwkgKgorCSAqIEkgdGVzdGVkIHRoaXMgZm9yIFBBTCBieSBmaXJzdCBzZXR0aW5nIHRoZSBUViBmcmVxdWVuY3kgdG8KKwkgKiAyMDMgTUh6IGFuZCB0aGVuIHN3aXRjaGluZyB0byA5Ni42IE1IeiBGTSByYWRpby4gVGhlIHJlc3VsdCB3YXMKKwkgKiBzdGF0aWMgdW5sZXNzIHRoZSBjb250cm9sIGJ5dGUgd2FzIHNlbnQgZmlyc3QuCisJICovCisJdW5zaWduZWQgaW50IGNiX2ZpcnN0X2lmX2xvd2VyX2ZyZXE6MTsKKwl1bnNpZ25lZCBjaGFyIGNvbmZpZzsgLyogdG8gYmUgbW92ZWQgaW50byBzdHJ1Y3QgdHVuZXJfcmFuZ2UgZm9yIGR2Yi1wbGwgbWVyZ2UgKi8KKworCXVuc2lnbmVkIGludCBjb3VudDsKKwlzdHJ1Y3QgdHVuZXJfcmFuZ2UgKnJhbmdlczsKK307CisKK3N0cnVjdCB0dW5lcnR5cGUgeworCWNoYXIgKm5hbWU7CisJc3RydWN0IHR1bmVyX3BhcmFtcyAqcGFyYW1zOworfTsKKworZXh0ZXJuIHN0cnVjdCB0dW5lcnR5cGUgdHVuZXJzW107CitleHRlcm4gdW5zaWduZWQgY29uc3QgaW50IHR1bmVyX2NvdW50OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaCBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAppbmRleCAyN2NiZjA4Li5hNWJlZWFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3R1bmVyLmgKKysrIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5lIF9UVU5FUl9ICiAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS90dW5lci10eXBlcy5oPgogCiAjZGVmaW5lIEFERFJfVU5TRVQgKDI1NSkKIApAQCAtMTE0LDYgKzExNSw3IEBACiAKICNkZWZpbmUgVFVORVJfUEhJTElQU19UVVYxMjM2RAkJNjgJLyogQVRJIEhEVFYgV29uZGVyICovCiAjZGVmaW5lIFRVTkVSX1RORl81MzM1TUYgICAgICAgICAgICAgICAgNjkJLyogU2FicmVudCBCdDg0OCAgICovCisjZGVmaW5lIFRVTkVSX1NBTVNVTkdfVENQTl8yMTIxUDMwQSAgICAgNzAgCS8qIEhhdXBwYXVnZSBQVlItNTAwTUNFIE5UU0MgKi8KIAogLyogdHYgY2FyZCBzcGVjaWZpYyAqLwogI2RlZmluZSBUREE5ODg3X1BSRVNFTlQgCQkoMTw8MCkKQEAgLTE3Nyw3ICsxNzksOSBAQAogCXVuc2lnbmVkIGludCBtb2RlOwogCXVuc2lnbmVkIGludCBtb2RlX21hc2s7CS8qIENvbWJpbmF0aW9uIG9mIGFsbG93YWJsZSBtb2RlcyAqLwogCi0JdW5zaWduZWQgaW50IGZyZXE7CS8qIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2V0dGluZ3MgKi8KKwl1bnNpZ25lZCBpbnQgdHZfZnJlcTsJLyoga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBzZXR0aW5ncyAqLworCXVuc2lnbmVkIGludCByYWRpb19mcmVxOworCXUxNiAJICAgICBsYXN0X2RpdjsKIAl1bnNpZ25lZCBpbnQgYXVkbW9kZTsKIAl2NGwyX3N0ZF9pZCAgc3RkOwogCkBAIC0xOTUsOCArMTk5LDggQEAKIAl1bnNpZ25lZCBpbnQgc2dJRjsKIAogCS8qIGZ1bmN0aW9uIHB0cnMgKi8KLQl2b2lkICgqdHZfZnJlcSkoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCBmcmVxKTsKLQl2b2lkICgqcmFkaW9fZnJlcSkoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCBmcmVxKTsKKwl2b2lkICgqc2V0X3R2X2ZyZXEpKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBpbnQgZnJlcSk7CisJdm9pZCAoKnNldF9yYWRpb19mcmVxKShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgaW50IGZyZXEpOwogCWludCAgKCpoYXNfc2lnbmFsKShzdHJ1Y3QgaTJjX2NsaWVudCAqYyk7CiAJaW50ICAoKmlzX3N0ZXJlbykoc3RydWN0IGkyY19jbGllbnQgKmMpOwogCXZvaWQgKCpzdGFuZGJ5KShzdHJ1Y3QgaTJjX2NsaWVudCAqYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKaW5kZXggYzc0MDUyYS4uZDQwMzBhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaApAQCAtMTIwLDYgKzEyMCwxMyBAQAogLyogc2VsZWN0IGZyb20gVFYscmFkaW8sZXh0ZXJuLE1VVEUgKi8KICNkZWZpbmUgQVVEQ19TRVRfSU5QVVQgICAgICAgIF9JT1coJ2QnLDg5LGludCkKIAorLyogbXNwMzQwMCBpb2N0bDogd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSAqLworc3RydWN0IG1zcF9tYXRyaXggeworICBpbnQgaW5wdXQ7CisgIGludCBvdXRwdXQ7Cit9OworI2RlZmluZSBNU1BfU0VUX01BVFJJWCAgICAgX0lPVygnbScsMTcsc3RydWN0IG1zcF9tYXRyaXgpCisKIC8qIHR1bmVyIGlvY3RscyAqLwogLyogU2V0cyB0dW5lciB0eXBlIGFuZCBpdHMgSTJDIGFkZHIgKi8KICNkZWZpbmUgVFVORVJfU0VUX1RZUEVfQUREUiAgICAgICAgICBfSU9XKCdkJyw5MCxpbnQpCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggN2VmYTcyOS4uYjk5MjNiMSAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtNDI3LDYgKzQyNyw5IEBACiAJZGVmYXVsdCAhU0xBQgogCWJvb2wKIAorY29uZmlnIE9CU09MRVRFX0lOVEVSTU9EVUxFCisJdHJpc3RhdGUKKwogbWVudSAiTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQiCiAKIGNvbmZpZyBNT0RVTEVTCmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMzU1MTI2Ni4uNGFlMGZiZCAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIAkgICAgZXhpdC5vIGl0aW1lci5vIHRpbWUubyBzb2Z0aXJxLm8gcmVzb3VyY2UubyBcCiAJICAgIHN5c2N0bC5vIGNhcGFiaWxpdHkubyBwdHJhY2UubyB0aW1lci5vIHVzZXIubyBcCiAJICAgIHNpZ25hbC5vIHN5cy5vIGttb2QubyB3b3JrcXVldWUubyBwaWQubyBcCi0JICAgIHJjdXBkYXRlLm8gaW50ZXJtb2R1bGUubyBleHRhYmxlLm8gcGFyYW1zLm8gcG9zaXgtdGltZXJzLm8gXAorCSAgICByY3VwZGF0ZS5vIGV4dGFibGUubyBwYXJhbXMubyBwb3NpeC10aW1lcnMubyBcCiAJICAgIGt0aHJlYWQubyB3YWl0Lm8ga2ZpZm8ubyBzeXNfbmkubyBwb3NpeC1jcHUtdGltZXJzLm8gbXV0ZXgubyBcCiAJICAgIGhydGltZXIubwogCkBAIC0xNyw2ICsxNyw3IEBACiBvYmotJChDT05GSUdfREVCVUdfU1BJTkxPQ0spICs9IHNwaW5sb2NrLm8KIG9iai0kKENPTkZJR19VSUQxNikgKz0gdWlkMTYubwogb2JqLSQoQ09ORklHX01PRFVMRVMpICs9IG1vZHVsZS5vCitvYmotJChDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEUpICs9IGludGVybW9kdWxlLm8KIG9iai0kKENPTkZJR19LQUxMU1lNUykgKz0ga2FsbHN5bXMubwogb2JqLSQoQ09ORklHX1BNKSArPSBwb3dlci8KIG9iai0kKENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUKSArPSBhY2N0Lm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IDA0Y2NhYjAuLmYxYzQxNTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAgKiBAaW50ZXJ2YWw6CXRoZSBpbnRlcnZhbCB0byBmb3J3YXJkCiAgKgogICogRm9yd2FyZCB0aGUgdGltZXIgZXhwaXJ5IHNvIGl0IHdpbGwgZXhwaXJlIGluIHRoZSBmdXR1cmUuCi0gKiBUaGUgbnVtYmVyIG9mIG92ZXJydW5zIGlzIGFkZGVkIHRvIHRoZSBvdmVycnVuIGZpZWxkLgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG92ZXJydW5zLgogICovCiB1bnNpZ25lZCBsb25nCiBocnRpbWVyX2ZvcndhcmQoc3RydWN0IGhydGltZXIgKnRpbWVyLCBrdGltZV90IGludGVydmFsKQpAQCAtNjQxLDcgKzY0MSw4IEBACiBzdGF0aWMgbG9uZyBfX3NjaGVkCiBuYW5vc2xlZXBfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydCwgY2xvY2tpZF90IGNsb2NraWQpCiB7Ci0Jc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqcm10cCwgdHU7CisJc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqcm10cDsKKwlzdHJ1Y3QgdGltZXNwZWMgdHU7CiAJdm9pZCAqcmZuX3NhdmUgPSByZXN0YXJ0LT5mbjsKIAlzdHJ1Y3QgaHJ0aW1lciB0aW1lcjsKIAlrdGltZV90IHJlbTsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCA4Yzk2MGI0Li5jMmUyOTc0IDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0xNzM1LDcgKzE3MzUsNyBAQAogICogdXAgYnkgZnJlZV9hbGxfYm9vdG1lbSgpIG9uY2UgdGhlIGVhcmx5IGJvb3QgcHJvY2VzcyBpcwogICogZG9uZS4gTm9uLWF0b21pYyBpbml0aWFsaXphdGlvbiwgc2luZ2xlLXBhc3MuCiAgKi8KLXZvaWQgX19kZXZpbml0IG1lbW1hcF9pbml0X3pvbmUodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmUsCit2b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF96b25lKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbikKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTE3ODgsNyArMTc4OCw3IEBACiAJbWVtbWFwX2luaXRfem9uZSgoc2l6ZSksIChuaWQpLCAoem9uZSksIChzdGFydF9wZm4pKQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHpvbmVfYmF0Y2hzaXplKHN0cnVjdCB6b25lICp6b25lKQorc3RhdGljIGludCBfX21lbWluaXQgem9uZV9iYXRjaHNpemUoc3RydWN0IHpvbmUgKnpvbmUpCiB7CiAJaW50IGJhdGNoOwogCkBAIC0xODgyLDcgKzE4ODIsNyBAQAogICogRHluYW1pY2FsbHkgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUKICAqIHBlciBjcHUgcGFnZXNldCBhcnJheSBpbiBzdHJ1Y3Qgem9uZS4KICAqLwotc3RhdGljIGludCBfX2RldmluaXQgcHJvY2Vzc196b25lcyhpbnQgY3B1KQorc3RhdGljIGludCBfX21lbWluaXQgcHJvY2Vzc196b25lcyhpbnQgY3B1KQogewogCXN0cnVjdCB6b25lICp6b25lLCAqZHpvbmU7CiAKQEAgLTE5MjMsNyArMTkyMyw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwYWdlc2V0X2NwdXVwX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorc3RhdGljIGludCBfX21lbWluaXQgcGFnZXNldF9jcHV1cF9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKIAkJdW5zaWduZWQgbG9uZyBhY3Rpb24sCiAJCXZvaWQgKmhjcHUpCiB7CkBAIC0xOTYzLDcgKzE5NjMsNyBAQAogCiAjZW5kaWYKIAotc3RhdGljIF9fZGV2aW5pdAorc3RhdGljIF9fbWVtaW5pdAogdm9pZCB6b25lX3dhaXRfdGFibGVfaW5pdChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyB6b25lX3NpemVfcGFnZXMpCiB7CiAJaW50IGk7CkBAIC0xOTgzLDcgKzE5ODMsNyBAQAogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKHpvbmUtPndhaXRfdGFibGUgKyBpKTsKIH0KIAotc3RhdGljIF9fZGV2aW5pdCB2b2lkIHpvbmVfcGNwX2luaXQoc3RydWN0IHpvbmUgKnpvbmUpCitzdGF0aWMgX19tZW1pbml0IHZvaWQgem9uZV9wY3BfaW5pdChzdHJ1Y3Qgem9uZSAqem9uZSkKIHsKIAlpbnQgY3B1OwogCXVuc2lnbmVkIGxvbmcgYmF0Y2ggPSB6b25lX2JhdGNoc2l6ZSh6b25lKTsKQEAgLTIwMDEsNyArMjAwMSw3IEBACiAJCXpvbmUtPm5hbWUsIHpvbmUtPnByZXNlbnRfcGFnZXMsIGJhdGNoKTsKIH0KIAotc3RhdGljIF9fZGV2aW5pdCB2b2lkIGluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsCitzdGF0aWMgX19tZW1pbml0IHZvaWQgaW5pdF9jdXJyZW50bHlfZW1wdHlfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAkJdW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSB6b25lLT56b25lX3BnZGF0OwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYwppbmRleCBjY2Q0NTEzLi5iMGNiYmUyIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYworKysgYi9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYwpAQCAtMzc1LDcgKzM3NSw3IEBACiAJCWlmICghb3V0X2gpCiAJCQlyZXR1cm4gMTsKIAl9Ci0Jc3ltID0gc3ltX2xvb2t1cCgiS0VSTkVMUkVMRUFTRSIsIDApOworCXN5bSA9IHN5bV9sb29rdXAoIktFUk5FTFZFUlNJT04iLCAwKTsKIAlzeW1fY2FsY192YWx1ZShzeW0pOwogCXRpbWUoJm5vdyk7CiAJZW52ID0gZ2V0ZW52KCJLQ09ORklHX05PVElNRVNUQU1QIik7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvZ2NvbmYuYyBiL3NjcmlwdHMva2NvbmZpZy9nY29uZi5jCmluZGV4IDlmNWFhYmQuLjY2NWJkNTMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9nY29uZi5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9nY29uZi5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIAkJCQkJICBOVUxMKTsKIAogCXNwcmludGYodGl0bGUsIF8oIkxpbnV4IEtlcm5lbCB2JXMgQ29uZmlndXJhdGlvbiIpLAotCQlnZXRlbnYoIktFUk5FTFJFTEVBU0UiKSk7CisJCWdldGVudigiS0VSTkVMVkVSU0lPTiIpKTsKIAlndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKG1haW5fd25kKSwgdGl0bGUpOwogCiAJZ3RrX3dpZGdldF9zaG93KG1haW5fd25kKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9NYWtlZmlsZSBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9NYWtlZmlsZQppbmRleCA4ZjQxZDlhLi5mYWUzZTI5IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL01ha2VmaWxlCkBAIC0xLDkgKzEsOSBAQAogIyBNYWtlZmlsZSB0byBidWlsZCBseGRpYWxvZyBwYWNrYWdlCiAjCiAKLWNoZWNrLWx4ZGlhbG9nICAgOj0gJChzcmN0cmVlKS8kKHNyYykvY2hlY2stbHhkaWFsb2cuc2gKLUhPU1RfRVhUUkFDRkxBR1MgOj0gJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjaGVjay1seGRpYWxvZykgLWNjZmxhZ3MpCi1IT1NUX0xPQURMSUJFUyAgIDo9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2hlY2stbHhkaWFsb2cpIC1sZGZsYWdzKQorY2hlY2stbHhkaWFsb2cgIDo9ICQoc3JjdHJlZSkvJChzcmMpL2NoZWNrLWx4ZGlhbG9nLnNoCitIT1NUX0VYVFJBQ0ZMQUdTOj0gJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjaGVjay1seGRpYWxvZykgLWNjZmxhZ3MpCitIT1NUX0xPQURMSUJFUyAgOj0gJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjaGVjay1seGRpYWxvZykgLWxkZmxhZ3MgJChIT1NUQ0MpKQogIAogSE9TVF9FWFRSQUNGTEFHUyArPSAtRExPQ0FMRSAKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoCmluZGV4IGEzYzE0MWIuLjQ0OGUzNTMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jaGVjay1seGRpYWxvZy5zaAorKysgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gKQEAgLTQsMTEgKzQsMjIgQEAKICMgV2hhdCBsaWJyYXJ5IHRvIGxpbmsKIGxkZmxhZ3MoKQogewotCWlmIFsgYHVuYW1lYCA9PSBTdW5PUyBdOyB0aGVuCi0JCWVjaG8gJy1sY3Vyc2VzJwotCWVsc2UKLQkJZWNobyAnLWxuY3Vyc2VzJworCWVjaG8gIm1haW4oKSB7fSIgfCAkY2MgLWxuY3Vyc2VzdyAteGMgLSAtbyAvZGV2L251bGwgMj4gL2Rldi9udWxsCisJaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJCWVjaG8gJy1sbmN1cnNlc3cnCisJCWV4aXQKIAlmaQorCWVjaG8gIm1haW4oKSB7fSIgfCAkY2MgLWxuY3Vyc2VzIC14YyAtIC1vIC9kZXYvbnVsbCAyPiAvZGV2L251bGwKKwlpZiBbICQ/IC1lcSAwIF07IHRoZW4KKwkJZWNobyAnLWxuY3Vyc2VzJworCQlleGl0CisJZmkKKwllY2hvICJtYWluKCkge30iIHwgJGNjIC1sY3Vyc2VzIC14YyAtIC1vIC9kZXYvbnVsbCAyPiAvZGV2L251bGwKKwlpZiBbICQ/IC1lcSAwIF07IHRoZW4KKwkJZWNobyAnLWxjdXJzZXMnCisJCWV4aXQKKwlmaQorCWV4aXQgMQogfQogCiAjIFdoZXJlIGlzIG5jdXJzZXMuaD8KQEAgLTI4LDcgKzM5LDcgQEAKIGNvbXBpbGVyPSIiCiAjIENoZWNrIGlmIHdlIGNhbiBsaW5rIHRvIG5jdXJzZXMKIGNoZWNrKCkgewotCWVjaG8gIm1haW4oKSB7fSIgfCAkY29tcGlsZXIgLXhjIC0KKwllY2hvICJtYWluKCkge30iIHwgJGNjIC14YyAtIC1vIC9kZXYvbnVsbCAyPiAvZGV2L251bGwKIAlpZiBbICQ/ICE9IDAgXTsgdGhlbgogCQllY2hvICIgKioqIFVuYWJsZSB0byBmaW5kIHRoZSBuY3Vyc2VzIGxpYnJhcmllcy4iICAgICAgICAgIDE+JjIKIAkJZWNobyAiICoqKiBtYWtlIG1lbnVjb25maWcgcmVxdWlyZSB0aGUgbmN1cnNlcyBsaWJyYXJpZXMiICAxPiYyCkBAIC01MSwxMyArNjIsMTUgQEAKIGNhc2UgIiQxIiBpbgogCSItY2hlY2siKQogCQlzaGlmdAotCQljb21waWxlcj0iJEAiCisJCWNjPSIkQCIKIAkJY2hlY2sKIAkJOzsKIAkiLWNjZmxhZ3MiKQogCQljY2ZsYWdzCiAJCTs7CiAJIi1sZGZsYWdzIikKKwkJc2hpZnQKKwkJY2M9IiRAIgogCQlsZGZsYWdzCiAJCTs7CiAJIioiKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL21jb25mLmMgYi9zY3JpcHRzL2tjb25maWcvbWNvbmYuYwppbmRleCBkNjNkN2ZiLi43Zjk3MzE5IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbWNvbmYuYworKysgYi9zY3JpcHRzL2tjb25maWcvbWNvbmYuYwpAQCAtMTA1MSw3ICsxMDUxLDcgQEAKIAljb25mX3BhcnNlKGF2WzFdKTsKIAljb25mX3JlYWQoTlVMTCk7CiAKLQlzeW0gPSBzeW1fbG9va3VwKCJLRVJORUxSRUxFQVNFIiwgMCk7CisJc3ltID0gc3ltX2xvb2t1cCgiS0VSTkVMVkVSU0lPTiIsIDApOwogCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CiAJc3ByaW50ZihtZW51X2JhY2t0aXRsZSwgXygiTGludXggS2VybmVsIHYlcyBDb25maWd1cmF0aW9uIiksCiAJCXN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSkpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3N5bWJvbC5jIGIvc2NyaXB0cy9rY29uZmlnL3N5bWJvbC5jCmluZGV4IDY5YzI1NDkuLjNkNzg3N2EgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9zeW1ib2wuYworKysgYi9zY3JpcHRzL2tjb25maWcvc3ltYm9sLmMKQEAgLTYxLDEwICs2MSwxMCBAQAogCWlmIChwKQogCQlzeW1fYWRkX2RlZmF1bHQoc3ltLCBwKTsKIAotCXN5bSA9IHN5bV9sb29rdXAoIktFUk5FTFJFTEVBU0UiLCAwKTsKKwlzeW0gPSBzeW1fbG9va3VwKCJLRVJORUxWRVJTSU9OIiwgMCk7CiAJc3ltLT50eXBlID0gU19TVFJJTkc7CiAJc3ltLT5mbGFncyB8PSBTWU1CT0xfQVVUTzsKLQlwID0gZ2V0ZW52KCJLRVJORUxSRUxFQVNFIik7CisJcCA9IGdldGVudigiS0VSTkVMVkVSU0lPTiIpOwogCWlmIChwKQogCQlzeW1fYWRkX2RlZmF1bHQoc3ltLCBwKTsKIAo=