From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Tomas Mraz To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: update to the latest 1.1.1 beta version Date: Tue, 09 Jun 2026 12:44:13 GMT Message-ID: <178100905330.1.8396440391380737265.rpms-openssl-9189f03055d4@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: 9189f03055d4d55949fb897a1049b800327a312f QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IDkxODlmMDMwNTVkNGQ1NTk0OWZiODk3YTEwNDli ODAwMzI3YTMxMmYKQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+ CkRhdGUgICA6IDIwMTgtMDctMjVUMTg6MTU6MTkrMDI6MDAKU3RhdHMgIDogKzEzNTc4Ly0xNDAw MiBpbiAyOCBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3Jw bXMvb3BlbnNzbC9jLzkxODlmMDMwNTVkNGQ1NTk0OWZiODk3YTEwNDliODAwMzI3YTMxMmY/YnJh bmNoPXJlYmFzZV80MGJldGEKCkxvZzoKdXBkYXRlIHRvIHRoZSBsYXRlc3QgMS4xLjEgYmV0YSB2 ZXJzaW9uCgotLS0KZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGM1 NTA5ZTYuLjhiYWNhZGMgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpA QCAtMzgsMyArMzgsNCBAQCBvcGVuc3NsLTEuMC4wYS11c2EudGFyLmJ6MgogL29wZW5zc2wtMS4x LjBmLWhvYmJsZWQudGFyLnh6CiAvb3BlbnNzbC0xLjEuMGctaG9iYmxlZC50YXIueHoKIC9vcGVu c3NsLTEuMS4waC1ob2JibGVkLnRhci54egorL29wZW5zc2wtMS4xLjEtcHJlOC1ob2JibGVkLnRh ci54egoKZGlmZiAtLWdpdCBhL2VjX2N1cnZlLmMgYi9lY19jdXJ2ZS5jCmluZGV4IGFiZWUyMDUu LjczMDNmZTkgMTAwNjQ0Ci0tLSBhL2VjX2N1cnZlLmMKKysrIGIvZWNfY3VydmUuYwpAQCAtMSw1 ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwMi0yMDE2IFRoZSBPcGVuU1NMIFByb2plY3Qg QXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAyLTIwMTggVGhl IE9wZW5TU0wgUHJvamVjdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp Z2h0IChjKSAyMDAyLCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJl c2VydmVkCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIE9wZW5TU0wgbGljZW5zZSAodGhlICJM aWNlbnNlIikuICBZb3UgbWF5IG5vdCB1c2UKICAqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp YW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IGNhbiBvYnRhaW4gYSBjb3B5CkBAIC03LDI2ICs4 LDEyIEBACiAgKiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2UvbGljZW5zZS5odG1sCiAg Ki8KIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMs IEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRC4KLSAqCi0gKiBQb3J0aW9ucyBvZiB0aGUgYXR0YWNo ZWQgc29mdHdhcmUgKCJDb250cmlidXRpb24iKSBhcmUgZGV2ZWxvcGVkIGJ5Ci0gKiBTVU4gTUlD Uk9TWVNURU1TLCBJTkMuLCBhbmQgYXJlIGNvbnRyaWJ1dGVkIHRvIHRoZSBPcGVuU1NMIHByb2pl Y3QuCi0gKgotICogVGhlIENvbnRyaWJ1dGlvbiBpcyBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGUg T3BlblNTTCBvcGVuIHNvdXJjZQotICogbGljZW5zZSBwcm92aWRlZCBhYm92ZS4KLSAqCi0gKiBU aGUgZWxsaXB0aWMgY3VydmUgYmluYXJ5IHBvbHlub21pYWwgc29mdHdhcmUgaXMgb3JpZ2luYWxs eSB3cml0dGVuIGJ5Ci0gKiBTaGV1ZWxpbmcgQ2hhbmcgU2hhbnR6IGFuZCBEb3VnbGFzIFN0ZWJp bGEgb2YgU3VuIE1pY3Jvc3lzdGVtcyBMYWJvcmF0b3JpZXMuCi0gKgotICovCi0KICNpbmNsdWRl IDxzdHJpbmcuaD4KICNpbmNsdWRlICJlY19sY2wuaCIKICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgogI2luY2x1ZGUgPG9wZW5zc2wvb2JqX21hYy5oPgogI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNz bGNvbmYuaD4KLSNpbmNsdWRlICJlX29zLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwvbmVsZW0uaCIK IAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGludCBmaWVsZF90eXBlLCAgICAgICAgICAgICAvKiBl aXRoZXIgTklEX1g5XzYyX3ByaW1lX2ZpZWxkIG9yCkBAIC0zNTAsNiArMzM3LDggQEAgc3RhdGlj IEVDX0dST1VQICplY19ncm91cF9uZXdfZnJvbV9kYXRhKGNvbnN0IGVjX2xpc3RfZWxlbWVudCBj dXJ2ZSkKICAgICB9CiAjZW5kaWYKIAorICAgIEVDX0dST1VQX3NldF9jdXJ2ZV9uYW1lKGdyb3Vw LCBjdXJ2ZS5uaWQpOworCiAgICAgaWYgKChQID0gRUNfUE9JTlRfbmV3KGdyb3VwKSkgPT0gTlVM TCkgewogICAgICAgICBFQ2VycihFQ19GX0VDX0dST1VQX05FV19GUk9NX0RBVEEsIEVSUl9SX0VD X0xJQik7CiAgICAgICAgIGdvdG8gZXJyOwpAQCAtNDE1LDggKzQwNCw2IEBAIEVDX0dST1VQICpF Q19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZShpbnQgbmlkKQogICAgICAgICByZXR1cm4gTlVMTDsK ICAgICB9CiAKLSAgICBFQ19HUk9VUF9zZXRfY3VydmVfbmFtZShyZXQsIG5pZCk7Ci0KICAgICBy ZXR1cm4gcmV0OwogfQogCgpkaWZmIC0tZ2l0IGEvZWN0ZXN0LmMgYi9lY3Rlc3QuYwppbmRleCBk ZTAwNjgwLi5jM2FjN2M2IDEwMDY0NAotLS0gYS9lY3Rlc3QuYworKysgYi9lY3Rlc3QuYwpAQCAt MSw1ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwMS0yMDE2IFRoZSBPcGVuU1NMIFByb2pl Y3QgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMTgg VGhlIE9wZW5TU0wgUHJvamVjdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w eXJpZ2h0IChjKSAyMDAyLCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRz IHJlc2VydmVkCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIE9wZW5TU0wgbGljZW5zZSAodGhl ICJMaWNlbnNlIikuICBZb3UgbWF5IG5vdCB1c2UKICAqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IGNhbiBvYnRhaW4gYSBjb3B5CkBAIC03LDM4 ICs4LDEwIEBACiAgKiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2UvbGljZW5zZS5odG1s CiAgKi8KIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3Rl bXMsIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRC4KLSAqCi0gKiBQb3J0aW9ucyBvZiB0aGUgYXR0 YWNoZWQgc29mdHdhcmUgKCJDb250cmlidXRpb24iKSBhcmUgZGV2ZWxvcGVkIGJ5Ci0gKiBTVU4g TUlDUk9TWVNURU1TLCBJTkMuLCBhbmQgYXJlIGNvbnRyaWJ1dGVkIHRvIHRoZSBPcGVuU1NMIHBy b2plY3QuCi0gKgotICogVGhlIENvbnRyaWJ1dGlvbiBpcyBsaWNlbnNlZCBwdXJzdWFudCB0byB0 aGUgT3BlblNTTCBvcGVuIHNvdXJjZQotICogbGljZW5zZSBwcm92aWRlZCBhYm92ZS4KLSAqCi0g KiBUaGUgZWxsaXB0aWMgY3VydmUgYmluYXJ5IHBvbHlub21pYWwgc29mdHdhcmUgaXMgb3JpZ2lu YWxseSB3cml0dGVuIGJ5Ci0gKiBTaGV1ZWxpbmcgQ2hhbmcgU2hhbnR6IGFuZCBEb3VnbGFzIFN0 ZWJpbGEgb2YgU3VuIE1pY3Jvc3lzdGVtcyBMYWJvcmF0b3JpZXMuCi0gKgotICovCi0KLSNpbmNs dWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lmZGVmIEZMQVRfSU5DCi0jIGlu Y2x1ZGUgImVfb3MuaCIKLSNlbHNlCi0jIGluY2x1ZGUgIi4uL2Vfb3MuaCIKLSNlbmRpZgotI2lu Y2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLQotI2lmZGVmIE9QRU5TU0xfTk9f RUMKLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gICAgcHV0cygiRWxsaXB0 aWMgY3VydmVzIGFyZSBkaXNhYmxlZC4iKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbHNlCisjaW5j bHVkZSAiaW50ZXJuYWwvbmVsZW0uaCIKKyNpbmNsdWRlICJ0ZXN0dXRpbC5oIgogCisjaWZuZGVm IE9QRU5TU0xfTk9fRUMKICMgaW5jbHVkZSA8b3BlbnNzbC9lYy5oPgogIyBpZm5kZWYgT1BFTlNT TF9OT19FTkdJTkUKICMgIGluY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+CkBAIC01MCwxMTkgKzIz LDgwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAjIGluY2x1ZGUgPG9wZW5z c2wvYm4uaD4KICMgaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgogCi0jIGlmIGRlZmlu ZWQoX01TQ19WRVIpICYmIGRlZmluZWQoX01JUFNfKSAmJiAoX01TQ19WRVIvMTAwPT0xMikKLS8q IHN1cHByZXNzICJ0b28gYmlnIHRvbyBvcHRpbWl6ZSIgd2FybmluZyAqLwotIyAgcHJhZ21hIHdh cm5pbmcoZGlzYWJsZTo0OTU5KQotIyBlbmRpZgotCi0jIGRlZmluZSBBQk9SVCBkbyB7IFwKLSAg ICAgICAgZmZsdXNoKHN0ZG91dCk7IFwKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDog QUJPUlRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKLSAgICAgICAgRVJSX3ByaW50X2Vycm9y c19mcChzdGRlcnIpOyBcCi0gICAgICAgIEVYSVQoMSk7IFwKLX0gd2hpbGUgKDApCi0KLSMgZGVm aW5lIFRJTUlOR19CQVNFX1BUIDAKLSMgZGVmaW5lIFRJTUlOR19SQU5EX1BUIDEKLSMgZGVmaW5l IFRJTUlOR19TSU1VTCAyCitzdGF0aWMgc2l6ZV90IGNydl9sZW4gPSAwOworc3RhdGljIEVDX2J1 aWx0aW5fY3VydmUgKmN1cnZlcyA9IE5VTEw7CiAKIC8qIHRlc3QgbXVsdGlwbGljYXRpb24gd2l0 aCBncm91cCBvcmRlciwgbG9uZyBhbmQgbmVnYXRpdmUgc2NhbGFycyAqLwotc3RhdGljIHZvaWQg Z3JvdXBfb3JkZXJfdGVzdHMoRUNfR1JPVVAgKmdyb3VwKQorc3RhdGljIGludCBncm91cF9vcmRl cl90ZXN0cyhFQ19HUk9VUCAqZ3JvdXApCiB7Ci0gICAgQklHTlVNICpuMSwgKm4yLCAqb3JkZXI7 Ci0gICAgRUNfUE9JTlQgKlAgPSBFQ19QT0lOVF9uZXcoZ3JvdXApOwotICAgIEVDX1BPSU5UICpR ID0gRUNfUE9JTlRfbmV3KGdyb3VwKTsKLSAgICBFQ19QT0lOVCAqUiA9IEVDX1BPSU5UX25ldyhn cm91cCk7Ci0gICAgRUNfUE9JTlQgKlMgPSBFQ19QT0lOVF9uZXcoZ3JvdXApOwotICAgIEJOX0NU WCAqY3R4ID0gQk5fQ1RYX25ldygpOwotICAgIGludCBpOwotCi0gICAgbjEgPSBCTl9uZXcoKTsK LSAgICBuMiA9IEJOX25ldygpOwotICAgIG9yZGVyID0gQk5fbmV3KCk7Ci0gICAgZnByaW50Zihz dGRvdXQsICJ2ZXJpZnkgZ3JvdXAgb3JkZXIgLi4uIik7Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci0g ICAgaWYgKCFFQ19HUk9VUF9nZXRfb3JkZXIoZ3JvdXAsIG9yZGVyLCBjdHgpKQotICAgICAgICBB Qk9SVDsKLSAgICBpZiAoIUVDX1BPSU5UX211bChncm91cCwgUSwgb3JkZXIsIE5VTEwsIE5VTEws IGN0eCkpCi0gICAgICAgIEFCT1JUOwotICAgIGlmICghRUNfUE9JTlRfaXNfYXRfaW5maW5pdHko Z3JvdXAsIFEpKQotICAgICAgICBBQk9SVDsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIi4iKTsKLSAg ICBmZmx1c2goc3Rkb3V0KTsKLSAgICBpZiAoIUVDX0dST1VQX3ByZWNvbXB1dGVfbXVsdChncm91 cCwgY3R4KSkKLSAgICAgICAgQUJPUlQ7Ci0gICAgaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIFEs IG9yZGVyLCBOVUxMLCBOVUxMLCBjdHgpKQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUVDX1BP SU5UX2lzX2F0X2luZmluaXR5KGdyb3VwLCBRKSkKLSAgICAgICAgQUJPUlQ7Ci0gICAgZnByaW50 ZihzdGRvdXQsICIgb2tcbiIpOwotICAgIGZwcmludGYoc3Rkb3V0LCAibG9uZy9uZWdhdGl2ZSBz Y2FsYXIgdGVzdHMgIik7CisgICAgQklHTlVNICpuMSA9IE5VTEwsICpuMiA9IE5VTEwsICpvcmRl ciA9IE5VTEw7CisgICAgRUNfUE9JTlQgKlAgPSBOVUxMLCAqUSA9IE5VTEwsICpSID0gTlVMTCwg KlMgPSBOVUxMOworICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKKyAgICBpbnQgaSA9IDAsIHIgPSAw OworCisgICAgaWYgKCFURVNUX3B0cihuMSA9IEJOX25ldygpKQorICAgICAgICB8fCAhVEVTVF9w dHIobjIgPSBCTl9uZXcoKSkKKyAgICAgICAgfHwgIVRFU1RfcHRyKG9yZGVyID0gQk5fbmV3KCkp CisgICAgICAgIHx8ICFURVNUX3B0cihjdHggPSBCTl9DVFhfbmV3KCkpCisgICAgICAgIHx8ICFU RVNUX3B0cihQID0gRUNfUE9JTlRfbmV3KGdyb3VwKSkKKyAgICAgICAgfHwgIVRFU1RfcHRyKFEg PSBFQ19QT0lOVF9uZXcoZ3JvdXApKQorICAgICAgICB8fCAhVEVTVF9wdHIoUiA9IEVDX1BPSU5U X25ldyhncm91cCkpCisgICAgICAgIHx8ICFURVNUX3B0cihTID0gRUNfUE9JTlRfbmV3KGdyb3Vw KSkpCisgICAgICAgIGdvdG8gZXJyOworCisgICAgaWYgKCFURVNUX3RydWUoRUNfR1JPVVBfZ2V0 X29yZGVyKGdyb3VwLCBvcmRlciwgY3R4KSkKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShFQ19QT0lO VF9tdWwoZ3JvdXAsIFEsIG9yZGVyLCBOVUxMLCBOVUxMLCBjdHgpKQorICAgICAgICB8fCAhVEVT VF90cnVlKEVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGdyb3VwLCBRKSkKKyAgICAgICAgfHwgIVRF U1RfdHJ1ZShFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoZ3JvdXAsIGN0eCkpCisgICAgICAgIHx8 ICFURVNUX3RydWUoRUNfUE9JTlRfbXVsKGdyb3VwLCBRLCBvcmRlciwgTlVMTCwgTlVMTCwgY3R4 KSkKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwg USkpKQorICAgICAgICBnb3RvIGVycjsKKwogICAgIGZvciAoaSA9IDE7IGkgPD0gMjsgaSsrKSB7 CiAgICAgICAgIGNvbnN0IEJJR05VTSAqc2NhbGFyc1s2XTsKICAgICAgICAgY29uc3QgRUNfUE9J TlQgKnBvaW50c1s2XTsKIAotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgaSA9PSAxID8KLSAgICAg ICAgICAgICAgICAiYWxsb3dpbmcgcHJlY29tcHV0YXRpb24gLi4uICIgOgotICAgICAgICAgICAg ICAgICJ3aXRob3V0IHByZWNvbXB1dGF0aW9uIC4uLiAiKTsKLSAgICAgICAgaWYgKCFCTl9zZXRf d29yZChuMSwgaSkpCi0gICAgICAgICAgICBBQk9SVDsKLSAgICAgICAgLyoKLSAgICAgICAgICog SWYgaSA9PSAxLCBQIHdpbGwgYmUgdGhlIHByZWRlZmluZWQgZ2VuZXJhdG9yIGZvciB3aGljaAot ICAgICAgICAgKiBFQ19HUk9VUF9wcmVjb21wdXRlX211bHQgaGFzIHNldCB1cCBwcmVjb21wdXRh dGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIGlmICghRUNfUE9JTlRfbXVsKGdyb3VwLCBQLCBu MSwgTlVMTCwgTlVMTCwgY3R4KSkKLSAgICAgICAgICAgIEFCT1JUOwotCi0gICAgICAgIGlmICgh Qk5fb25lKG4xKSkKLSAgICAgICAgICAgIEFCT1JUOwotICAgICAgICAvKiBuMSA9IDEgLSBvcmRl ciAqLwotICAgICAgICBpZiAoIUJOX3N1YihuMSwgbjEsIG9yZGVyKSkKLSAgICAgICAgICAgIEFC T1JUOwotICAgICAgICBpZiAoIUVDX1BPSU5UX211bChncm91cCwgUSwgTlVMTCwgUCwgbjEsIGN0 eCkpCi0gICAgICAgICAgICBBQk9SVDsKLSAgICAgICAgaWYgKDAgIT0gRUNfUE9JTlRfY21wKGdy b3VwLCBRLCBQLCBjdHgpKQotICAgICAgICAgICAgQUJPUlQ7Ci0KLSAgICAgICAgLyogbjIgPSAx ICsgb3JkZXIgKi8KLSAgICAgICAgaWYgKCFCTl9hZGQobjIsIG9yZGVyLCBCTl92YWx1ZV9vbmUo KSkpCi0gICAgICAgICAgICBBQk9SVDsKLSAgICAgICAgaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAs IFEsIE5VTEwsIFAsIG4yLCBjdHgpKQotICAgICAgICAgICAgQUJPUlQ7Ci0gICAgICAgIGlmICgw ICE9IEVDX1BPSU5UX2NtcChncm91cCwgUSwgUCwgY3R4KSkKLSAgICAgICAgICAgIEFCT1JUOwot Ci0gICAgICAgIC8qIG4yID0gKDEgLSBvcmRlcikgKiAoMSArIG9yZGVyKSA9IDEgLSBvcmRlcl4y ICovCi0gICAgICAgIGlmICghQk5fbXVsKG4yLCBuMSwgbjIsIGN0eCkpCi0gICAgICAgICAgICBB Qk9SVDsKLSAgICAgICAgaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIFEsIE5VTEwsIFAsIG4yLCBj dHgpKQotICAgICAgICAgICAgQUJPUlQ7Ci0gICAgICAgIGlmICgwICE9IEVDX1BPSU5UX2NtcChn cm91cCwgUSwgUCwgY3R4KSkKLSAgICAgICAgICAgIEFCT1JUOworICAgICAgICBpZiAoIVRFU1Rf dHJ1ZShCTl9zZXRfd29yZChuMSwgaSkpCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICog SWYgaSA9PSAxLCBQIHdpbGwgYmUgdGhlIHByZWRlZmluZWQgZ2VuZXJhdG9yIGZvciB3aGljaAor ICAgICAgICAgICAgICogRUNfR1JPVVBfcHJlY29tcHV0ZV9tdWx0IGhhcyBzZXQgdXAgcHJlY29t cHV0YXRpb24uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHx8ICFURVNUX3RydWUoRUNf UE9JTlRfbXVsKGdyb3VwLCBQLCBuMSwgTlVMTCwgTlVMTCwgY3R4KSkKKyAgICAgICAgICAgIHx8 ICFURVNUX3RydWUoQk5fb25lKG4xKSkKKyAgICAgICAgICAgIC8qIG4xID0gMSAtIG9yZGVyICov CisgICAgICAgICAgICB8fCAhVEVTVF90cnVlKEJOX3N1YihuMSwgbjEsIG9yZGVyKSkKKyAgICAg ICAgICAgIHx8ICFURVNUX3RydWUoRUNfUE9JTlRfbXVsKGdyb3VwLCBRLCBOVUxMLCBQLCBuMSwg Y3R4KSkKKyAgICAgICAgICAgIHx8ICFURVNUX2ludF9lcSgwLCBFQ19QT0lOVF9jbXAoZ3JvdXAs IFEsIFAsIGN0eCkpCisKKyAgICAgICAgICAgIC8qIG4yID0gMSArIG9yZGVyICovCisgICAgICAg ICAgICB8fCAhVEVTVF90cnVlKEJOX2FkZChuMiwgb3JkZXIsIEJOX3ZhbHVlX29uZSgpKSkKKyAg ICAgICAgICAgIHx8ICFURVNUX3RydWUoRUNfUE9JTlRfbXVsKGdyb3VwLCBRLCBOVUxMLCBQLCBu MiwgY3R4KSkKKyAgICAgICAgICAgIHx8ICFURVNUX2ludF9lcSgwLCBFQ19QT0lOVF9jbXAoZ3Jv dXAsIFEsIFAsIGN0eCkpCisKKyAgICAgICAgICAgIC8qIG4yID0gKDEgLSBvcmRlcikgKiAoMSAr IG9yZGVyKSA9IDEgLSBvcmRlcl4yICovCisgICAgICAgICAgICB8fCAhVEVTVF90cnVlKEJOX211 bChuMiwgbjEsIG4yLCBjdHgpKQorICAgICAgICAgICAgfHwgIVRFU1RfdHJ1ZShFQ19QT0lOVF9t dWwoZ3JvdXAsIFEsIE5VTEwsIFAsIG4yLCBjdHgpKQorICAgICAgICAgICAgfHwgIVRFU1RfaW50 X2VxKDAsIEVDX1BPSU5UX2NtcChncm91cCwgUSwgUCwgY3R4KSkpCisgICAgICAgICAgICBnb3Rv IGVycjsKIAogICAgICAgICAvKiBuMiA9IG9yZGVyXjIgLSAxICovCiAgICAgICAgIEJOX3NldF9u ZWdhdGl2ZShuMiwgMCk7Ci0gICAgICAgIGlmICghRUNfUE9JTlRfbXVsKGdyb3VwLCBRLCBOVUxM LCBQLCBuMiwgY3R4KSkKLSAgICAgICAgICAgIEFCT1JUOwotICAgICAgICAvKiBBZGQgUCB0byB2 ZXJpZnkgdGhlIHJlc3VsdC4gKi8KLSAgICAgICAgaWYgKCFFQ19QT0lOVF9hZGQoZ3JvdXAsIFEs IFEsIFAsIGN0eCkpCi0gICAgICAgICAgICBBQk9SVDsKLSAgICAgICAgaWYgKCFFQ19QT0lOVF9p c19hdF9pbmZpbml0eShncm91cCwgUSkpCi0gICAgICAgICAgICBBQk9SVDsKLQotICAgICAgICAv KiBFeGVyY2lzZSBFQ19QT0lOVHNfbXVsLCBpbmNsdWRpbmcgY29ybmVyIGNhc2VzLiAqLwotICAg ICAgICBpZiAoRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFApKQotICAgICAgICAgICAg QUJPUlQ7CisgICAgICAgIGlmICghVEVTVF90cnVlKEVDX1BPSU5UX211bChncm91cCwgUSwgTlVM TCwgUCwgbjIsIGN0eCkpCisgICAgICAgICAgICAvKiBBZGQgUCB0byB2ZXJpZnkgdGhlIHJlc3Vs dC4gKi8KKyAgICAgICAgICAgIHx8ICFURVNUX3RydWUoRUNfUE9JTlRfYWRkKGdyb3VwLCBRLCBR LCBQLCBjdHgpKQorICAgICAgICAgICAgfHwgIVRFU1RfdHJ1ZShFQ19QT0lOVF9pc19hdF9pbmZp bml0eShncm91cCwgUSkpCisKKyAgICAgICAgICAgIC8qIEV4ZXJjaXNlIEVDX1BPSU5Uc19tdWws IGluY2x1ZGluZyBjb3JuZXIgY2FzZXMuICovCisgICAgICAgICAgICB8fCAhVEVTVF9mYWxzZShF Q19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUCkpKQorICAgICAgICAgICAgZ290byBlcnI7 CiAKICAgICAgICAgc2NhbGFyc1swXSA9IHNjYWxhcnNbMV0gPSBCTl92YWx1ZV9vbmUoKTsKICAg ICAgICAgcG9pbnRzWzBdICA9IHBvaW50c1sxXSAgPSBQOwogCi0gICAgICAgIGlmICghRUNfUE9J TlRzX211bChncm91cCwgUiwgTlVMTCwgMiwgcG9pbnRzLCBzY2FsYXJzLCBjdHgpKQotICAgICAg ICAgICAgQUJPUlQ7Ci0gICAgICAgIGlmICghRUNfUE9JTlRfZGJsKGdyb3VwLCBTLCBwb2ludHNb MF0sIGN0eCkpCi0gICAgICAgICAgICBBQk9SVDsKLSAgICAgICAgaWYgKDAgIT0gRUNfUE9JTlRf Y21wKGdyb3VwLCBSLCBTLCBjdHgpKQotICAgICAgICAgICAgQUJPUlQ7CisgICAgICAgIGlmICgh VEVTVF90cnVlKEVDX1BPSU5Uc19tdWwoZ3JvdXAsIFIsIE5VTEwsIDIsIHBvaW50cywgc2NhbGFy cywgY3R4KSkKKyAgICAgICAgICAgIHx8ICFURVNUX3RydWUoRUNfUE9JTlRfZGJsKGdyb3VwLCBT LCBwb2ludHNbMF0sIGN0eCkpCisgICAgICAgICAgICB8fCAhVEVTVF9pbnRfZXEoMCwgRUNfUE9J TlRfY21wKGdyb3VwLCBSLCBTLCBjdHgpKSkKKyAgICAgICAgICAgIGdvdG8gZXJyOwogCiAgICAg ICAgIHNjYWxhcnNbMF0gPSBuMTsKICAgICAgICAgcG9pbnRzWzBdID0gUTsgICAgICAgICAgLyog PT4gaW5maW5pdHkgKi8KQEAgLTE3NiwxMyArMTEwLDE2IEBAIHN0YXRpYyB2b2lkIGdyb3VwX29y ZGVyX3Rlc3RzKEVDX0dST1VQICpncm91cCkKICAgICAgICAgcG9pbnRzWzRdID0gUDsgICAgICAg ICAgLyogPT4gUCAqLwogICAgICAgICBzY2FsYXJzWzVdID0gbjI7CiAgICAgICAgIHBvaW50c1s1 XSA9IFE7ICAgICAgICAgIC8qID0+IGluZmluaXR5ICovCi0gICAgICAgIGlmICghRUNfUE9JTlRz X211bChncm91cCwgUCwgTlVMTCwgNiwgcG9pbnRzLCBzY2FsYXJzLCBjdHgpKQotICAgICAgICAg ICAgQUJPUlQ7Ci0gICAgICAgIGlmICghRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFAp KQotICAgICAgICAgICAgQUJPUlQ7CisgICAgICAgIGlmICghVEVTVF90cnVlKEVDX1BPSU5Uc19t dWwoZ3JvdXAsIFAsIE5VTEwsIDYsIHBvaW50cywgc2NhbGFycywgY3R4KSkKKyAgICAgICAgICAg IHx8ICFURVNUX3RydWUoRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFApKSkKKyAgICAg ICAgICAgIGdvdG8gZXJyOwogICAgIH0KLSAgICBmcHJpbnRmKHN0ZG91dCwgIm9rXG4iKTsKIAor ICAgIHIgPSAxOworZXJyOgorICAgIGlmIChyID09IDAgJiYgaSAhPSAwKQorICAgICAgICBURVNU X2luZm8oaSA9PSAxID8gImFsbG93aW5nIHByZWNvbXB1dGF0aW9uIiA6CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAid2l0aG91dCBwcmVjb21wdXRhdGlvbiIpOwogICAgIEVDX1BPSU5UX2Zy ZWUoUCk7CiAgICAgRUNfUE9JTlRfZnJlZShRKTsKICAgICBFQ19QT0lOVF9mcmVlKFIpOwpAQCAt MTkxLDQyNyArMTI4LDMwNiBAQCBzdGF0aWMgdm9pZCBncm91cF9vcmRlcl90ZXN0cyhFQ19HUk9V UCAqZ3JvdXApCiAgICAgQk5fZnJlZShuMik7CiAgICAgQk5fZnJlZShvcmRlcik7CiAgICAgQk5f Q1RYX2ZyZWUoY3R4KTsKKyAgICByZXR1cm4gcjsKIH0KIAotc3RhdGljIHZvaWQgcHJpbWVfZmll bGRfdGVzdHModm9pZCkKK3N0YXRpYyBpbnQgcHJpbWVfZmllbGRfdGVzdHModm9pZCkKIHsKICAg ICBCTl9DVFggKmN0eCA9IE5VTEw7Ci0gICAgQklHTlVNICpwLCAqYSwgKmI7Ci0gICAgRUNfR1JP VVAgKmdyb3VwOwotICAgIEVDX0dST1VQICpQXzE2MCA9IE5VTEwsICpQXzE5MiA9IE5VTEwsICpQ XzIyNCA9IE5VTEwsICpQXzI1NiA9Ci0gICAgICAgIE5VTEwsICpQXzM4NCA9IE5VTEwsICpQXzUy MSA9IE5VTEw7Ci0gICAgRUNfUE9JTlQgKlAsICpRLCAqUjsKLSAgICBCSUdOVU0gKngsICp5LCAq eiwgKnlwbHVzb25lOworICAgIEJJR05VTSAqcCA9IE5VTEwsICphID0gTlVMTCwgKmIgPSBOVUxM LCAqc2NhbGFyMyA9IE5VTEw7CisgICAgRUNfR1JPVVAgKmdyb3VwID0gTlVMTCwgKnRtcCA9IE5V TEw7CisgICAgRUNfR1JPVVAgKlBfMTYwID0gTlVMTCwgKlBfMTkyID0gTlVMTCwgKlBfMjI0ID0g TlVMTCwKKyAgICAgICAgICAgICAqUF8yNTYgPSBOVUxMLCAqUF8zODQgPSBOVUxMLCAqUF81MjEg PSBOVUxMOworICAgIEVDX1BPSU5UICpQID0gTlVMTCwgKlEgPSBOVUxMLCAqUiA9IE5VTEw7Cisg ICAgQklHTlVNICp4ID0gTlVMTCwgKnkgPSBOVUxMLCAqeiA9IE5VTEwsICp5cGx1c29uZSA9IE5V TEw7CisgICAgY29uc3QgRUNfUE9JTlQgKnBvaW50c1s0XTsKKyAgICBjb25zdCBCSUdOVU0gKnNj YWxhcnNbNF07CiAgICAgdW5zaWduZWQgY2hhciBidWZbMTAwXTsKLSAgICBzaXplX3QgaSwgbGVu OworICAgIHNpemVfdCBsZW4sIHIgPSAwOwogICAgIGludCBrOwogCi0gICAgY3R4ID0gQk5fQ1RY X25ldygpOwotICAgIGlmICghY3R4KQotICAgICAgICBBQk9SVDsKLQotICAgIHAgPSBCTl9uZXco KTsKLSAgICBhID0gQk5fbmV3KCk7Ci0gICAgYiA9IEJOX25ldygpOwotICAgIGlmICghcCB8fCAh YSB8fCAhYikKLSAgICAgICAgQUJPUlQ7Ci0KLSAgICBncm91cCA9IEVDX0dST1VQX25ldyhFQ19H RnBfbW9udF9tZXRob2QoKSk7IC8qIGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBFQ19HUk9VUF9uZXdfY3Vy dmVfR0ZwIHNvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKiB0aGF0IHRoZSBsaWJyYXJ5IGdldHMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqIGNob29zZSB0aGUgRUNfTUVUSE9EICovCi0gICAgaWYg KCFncm91cCkKLSAgICAgICAgQUJPUlQ7Ci0KLSAgICBQID0gRUNfUE9JTlRfbmV3KGdyb3VwKTsK LSAgICBRID0gRUNfUE9JTlRfbmV3KGdyb3VwKTsKLSAgICBSID0gRUNfUE9JTlRfbmV3KGdyb3Vw KTsKLSAgICBpZiAoIVAgfHwgIVEgfHwgIVIpCi0gICAgICAgIEFCT1JUOwotCi0gICAgeCA9IEJO X25ldygpOwotICAgIHkgPSBCTl9uZXcoKTsKLSAgICB6ID0gQk5fbmV3KCk7Ci0gICAgeXBsdXNv bmUgPSBCTl9uZXcoKTsKLSAgICBpZiAoeCA9PSBOVUxMIHx8IHkgPT0gTlVMTCB8fCB6ID09IE5V TEwgfHwgeXBsdXNvbmUgPT0gTlVMTCkKLSAgICAgICAgQUJPUlQ7CisgICAgaWYgKCFURVNUX3B0 cihjdHggPSBCTl9DVFhfbmV3KCkpCisgICAgICAgIHx8ICFURVNUX3B0cihwID0gQk5fbmV3KCkp CisgICAgICAgIHx8ICFURVNUX3B0cihhID0gQk5fbmV3KCkpCisgICAgICAgIHx8ICFURVNUX3B0 cihiID0gQk5fbmV3KCkpCisgICAgICAgIC8qCisgICAgICAgICAqIGFwcGxpY2F0aW9ucyBzaG91 bGQgdXNlIEVDX0dST1VQX25ld19jdXJ2ZV9HRnAgc28KKyAgICAgICAgICogdGhhdCB0aGUgbGli cmFyeSBnZXRzIHRvIGNob29zZSB0aGUgRUNfTUVUSE9ECisgICAgICAgICAqLworICAgICAgICB8 fCAhVEVTVF9wdHIoZ3JvdXAgPSBFQ19HUk9VUF9uZXcoRUNfR0ZwX21vbnRfbWV0aG9kKCkpKQor ICAgICAgICB8fCAhVEVTVF9wdHIodG1wID0gRUNfR1JPVVBfbmV3KEVDX0dST1VQX21ldGhvZF9v Zihncm91cCkpKQorICAgICAgICB8fCAhVEVTVF90cnVlKEVDX0dST1VQX2NvcHkodG1wLCBncm91 cCkpKQorICAgICAgICBnb3RvIGVycjsKKyAgICBFQ19HUk9VUF9mcmVlKGdyb3VwKTsKKyAgICBn cm91cCA9IHRtcDsKKyAgICB0bXAgPSBOVUxMOworCisgICAgYnVmWzBdID0gMDsKKyAgICBpZiAo IVRFU1RfcHRyKFAgPSBFQ19QT0lOVF9uZXcoZ3JvdXApKQorICAgICAgICB8fCAhVEVTVF9wdHIo USA9IEVDX1BPSU5UX25ldyhncm91cCkpCisgICAgICAgIHx8ICFURVNUX3B0cihSID0gRUNfUE9J TlRfbmV3KGdyb3VwKSkKKyAgICAgICAgfHwgIVRFU1RfcHRyKHggPSBCTl9uZXcoKSkKKyAgICAg ICAgfHwgIVRFU1RfcHRyKHkgPSBCTl9uZXcoKSkKKyAgICAgICAgfHwgIVRFU1RfcHRyKHogPSBC Tl9uZXcoKSkKKyAgICAgICAgfHwgIVRFU1RfcHRyKHlwbHVzb25lID0gQk5fbmV3KCkpKQorICAg ICAgICBnb3RvIGVycjsKIAogICAgIC8qIEN1cnZlIFAtMjI0IChGSVBTIFBVQiAxODYtMiwgQXBw LiA2KSAqLwogCi0gICAgaWYgKCFCTl9oZXgyYm4KLSAgICAgICAgKCZwLCAiRkZGRkZGRkZGRkZG RkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiKSkKLSAgICAgICAg QUJPUlQ7Ci0gICAgaWYgKDEgIT0gQk5faXNfcHJpbWVfZXgocCwgQk5fcHJpbWVfY2hlY2tzLCBj dHgsIE5VTEwpKQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUJOX2hleDJibgotICAgICAgICAo JmEsICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZG RkZGRSIpKQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUJOX2hleDJibgotICAgICAgICAoJmIs ICJCNDA1MEE4NTBDMDRCM0FCRjU0MTMyNTY1MDQ0QjBCN0Q3QkZEOEJBMjcwQjM5NDMyMzU1RkZC NCIpKQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUVDX0dST1VQX3NldF9jdXJ2ZV9HRnAoZ3Jv dXAsIHAsIGEsIGIsIGN0eCkpCi0gICAgICAgIEFCT1JUOwotCi0gICAgaWYgKCFCTl9oZXgyYm4K LSAgICAgICAgKCZ4LCAiQjcwRTBDQkQ2QkI0QkY3RjMyMTM5MEI5NEEwM0MxRDM1NkMyMTEyMjM0 MzI4MEQ2MTE1QzFEMjEiKSkKLSAgICAgICAgQUJPUlQ7Ci0gICAgaWYgKCFFQ19QT0lOVF9zZXRf Y29tcHJlc3NlZF9jb29yZGluYXRlc19HRnAoZ3JvdXAsIFAsIHgsIDAsIGN0eCkpCi0gICAgICAg IEFCT1JUOwotICAgIGlmIChFQ19QT0lOVF9pc19vbl9jdXJ2ZShncm91cCwgUCwgY3R4KSA8PSAw KQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUJOX2hleDJibgotICAgICAgICAoJnosICJGRkZG RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTZBMkUwQjhGMDNFMTNERDI5NDU1QzVDMkEzRCIpKQot ICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUVDX0dST1VQX3NldF9nZW5lcmF0b3IoZ3JvdXAsIFAs IHosIEJOX3ZhbHVlX29uZSgpKSkKLSAgICAgICAgQUJPUlQ7Ci0KLSAgICBpZiAoIUVDX1BPSU5U X2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBQLCB4LCB5LCBjdHgpKQotICAgICAg ICBBQk9SVDsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIlxuTklTVCBjdXJ2ZSBQLTIyNCAtLSBHZW5l cmF0b3I6XG4gICAgIHggPSAweCIpOwotICAgIEJOX3ByaW50X2ZwKHN0ZG91dCwgeCk7Ci0gICAg ZnByaW50ZihzdGRvdXQsICJcbiAgICAgeSA9IDB4Iik7Ci0gICAgQk5fcHJpbnRfZnAoc3Rkb3V0 LCB5KTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIlxuIik7CisgICAgaWYgKCFURVNUX3RydWUoQk5f aGV4MmJuKCZwLCAgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDEiKSkKKyAgICAgICAgfHwgIVRFU1RfaW50X2VxKDEsIEJOX2lzX3ByaW1lX2V4KHAsIEJOX3By aW1lX2NoZWNrcywgY3R4LCBOVUxMKSkKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShCTl9oZXgyYm4o JmEsICAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRSIpKQor ICAgICAgICB8fCAhVEVTVF90cnVlKEJOX2hleDJibigmYiwgICAgICAgICAiQjQwNTBBODUwQzA0 QjNBQkY1NDEzMjU2IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUwNDRC MEI3RDdCRkQ4QkEyNzBCMzk0MzIzNTVGRkI0IikpCisgICAgICAgIHx8ICFURVNUX3RydWUoRUNf R1JPVVBfc2V0X2N1cnZlX0dGcChncm91cCwgcCwgYSwgYiwgY3R4KSkKKyAgICAgICAgfHwgIVRF U1RfdHJ1ZShCTl9oZXgyYm4oJngsICAgICAgICAgIkI3MEUwQ0JENkJCNEJGN0YzMjEzOTBCOSIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0QTAzQzFEMzU2QzIxMTIyMzQz MjgwRDYxMTVDMUQyMSIpKQorICAgICAgICB8fCAhVEVTVF90cnVlKEVDX1BPSU5UX3NldF9jb21w cmVzc2VkX2Nvb3JkaW5hdGVzX0dGcChncm91cCwgUCwgeCwgMCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4KSkKKyAgICAg ICAgfHwgIVRFU1RfaW50X2d0KEVDX1BPSU5UX2lzX29uX2N1cnZlKGdyb3VwLCBQLCBjdHgpLCAw KQorICAgICAgICB8fCAhVEVTVF90cnVlKEJOX2hleDJibigmeiwgICAgICAgICAiRkZGRkZGRkZG RkZGRkZGRkZGRkZGRkZGIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZG RkYxNkEyRTBCOEYwM0UxM0REMjk0NTVDNUMyQTNEIikpCisgICAgICAgIHx8ICFURVNUX3RydWUo RUNfR1JPVVBfc2V0X2dlbmVyYXRvcihncm91cCwgUCwgeiwgQk5fdmFsdWVfb25lKCkpKQorICAg ICAgICB8fCAhVEVTVF90cnVlKEVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGdy b3VwLCBQLCB4LCB5LCBjdHgpKSkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICBURVNUX2luZm8o Ik5JU1QgY3VydmUgUC0yMjQgLS0gR2VuZXJhdG9yIik7CisgICAgdGVzdF9vdXRwdXRfYmlnbnVt KCJ4IiwgeCk7CisgICAgdGVzdF9vdXRwdXRfYmlnbnVtKCJ5IiwgeSk7CiAgICAgLyogR195IHZh bHVlIHRha2VuIGZyb20gdGhlIHN0YW5kYXJkOiAqLwotICAgIGlmICghQk5faGV4MmJuCi0gICAg ICAgICgmeiwgIkJEMzc2Mzg4QjVGNzIzRkI0QzIyREZFNkNENDM3NUEwNUEwNzQ3NjQ0NEQ1ODE5 OTg1MDA3RTM0IikpCi0gICAgICAgIEFCT1JUOwotICAgIGlmICgwICE9IEJOX2NtcCh5LCB6KSkK LSAgICAgICAgQUJPUlQ7Ci0KLSAgICBpZiAoIUJOX2FkZCh5cGx1c29uZSwgeSwgQk5fdmFsdWVf b25lKCkpKQotICAgICAgICBBQk9SVDsKKyAgICBpZiAoIVRFU1RfdHJ1ZShCTl9oZXgyYm4oJnos ICAgICAgICAgIkJEMzc2Mzg4QjVGNzIzRkI0QzIyREZFNiIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJDRDQzNzVBMDVBMDc0NzY0NDRENTgxOTk4NTAwN0UzNCIpKQorICAgICAg ICB8fCAhVEVTVF9CTl9lcSh5LCB6KQorICAgICAgICB8fCAhVEVTVF90cnVlKEJOX2FkZCh5cGx1 c29uZSwgeSwgQk5fdmFsdWVfb25lKCkpKQogICAgIC8qCiAgICAgICogV2hlbiAoeCwgeSkgaXMg b24gdGhlIGN1cnZlLCAoeCwgeSArIDEpIGlzLCBhcyBpdCBoYXBwZW5zLCBub3QsCiAgICAgICog YW5kIHRoZXJlZm9yZSBzZXR0aW5nIHRoZSBjb29yZGluYXRlcyBzaG91bGQgZmFpbC4KICAgICAg Ki8KLSAgICBpZiAoRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRnAoZ3JvdXAsIFAs IHgsIHlwbHVzb25lLCBjdHgpKQotICAgICAgICBBQk9SVDsKLQotICAgIGZwcmludGYoc3Rkb3V0 LCAidmVyaWZ5IGRlZ3JlZSAuLi4iKTsKLSAgICBpZiAoRUNfR1JPVVBfZ2V0X2RlZ3JlZShncm91 cCkgIT0gMjI0KQotICAgICAgICBBQk9SVDsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIiBva1xuIik7 Ci0KLSAgICBncm91cF9vcmRlcl90ZXN0cyhncm91cCk7Ci0KLSAgICBpZiAoKFBfMjI0ID0gRUNf R1JPVVBfbmV3KEVDX0dST1VQX21ldGhvZF9vZihncm91cCkpKSA9PSBOVUxMKQotICAgICAgICBB Qk9SVDsKLSAgICBpZiAoIUVDX0dST1VQX2NvcHkoUF8yMjQsIGdyb3VwKSkKLSAgICAgICAgQUJP UlQ7CisgICAgICAgIHx8ICFURVNUX2ZhbHNlKEVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0 ZXNfR0ZwKGdyb3VwLCBQLCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB5cGx1c29uZSwgY3R4KSkKKyAgICAgICAgfHwgIVRFU1Rf aW50X2VxKEVDX0dST1VQX2dldF9kZWdyZWUoZ3JvdXApLCAyMjQpCisgICAgICAgIHx8ICFncm91 cF9vcmRlcl90ZXN0cyhncm91cCkKKyAgICAgICAgfHwgIVRFU1RfcHRyKFBfMjI0ID0gRUNfR1JP VVBfbmV3KEVDX0dST1VQX21ldGhvZF9vZihncm91cCkpKQorICAgICAgICB8fCAhVEVTVF90cnVl KEVDX0dST1VQX2NvcHkoUF8yMjQsIGdyb3VwKSkKIAogICAgIC8qIEN1cnZlIFAtMjU2IChGSVBT IFBVQiAxODYtMiwgQXBwLiA2KSAqLwogCi0gICAgaWYgKCFCTl9oZXgyYm4KLSAgICAgICAgKCZw LAotICAgICAgICAgIkZGRkZGRkZGMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZG RkZGRkZGRkZGRkZGRkZGRkZGRkYiKSkKLSAgICAgICAgQUJPUlQ7Ci0gICAgaWYgKDEgIT0gQk5f aXNfcHJpbWVfZXgocCwgQk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5VTEwpKQotICAgICAgICBBQk9S VDsKLSAgICBpZiAoIUJOX2hleDJibgotICAgICAgICAoJmEsCi0gICAgICAgICAiRkZGRkZGRkYw MDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQyIp KQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUJOX2hleDJibgotICAgICAgICAoJmIsCi0gICAg ICAgICAiNUFDNjM1RDhBQTNBOTNFN0IzRUJCRDU1NzY5ODg2QkM2NTFEMDZCMENDNTNCMEY2M0JD RTNDM0UyN0QyNjA0QiIpKQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUVDX0dST1VQX3NldF9j dXJ2ZV9HRnAoZ3JvdXAsIHAsIGEsIGIsIGN0eCkpCi0gICAgICAgIEFCT1JUOwotCi0gICAgaWYg KCFCTl9oZXgyYm4KLSAgICAgICAgKCZ4LAotICAgICAgICAgIjZCMTdEMUYyRTEyQzQyNDdGOEJD RTZFNTYzQTQ0MEYyNzcwMzdEODEyREVCMzNBMEY0QTEzOTQ1RDg5OEMyOTYiKSkKLSAgICAgICAg QUJPUlQ7Ci0gICAgaWYgKCFFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRnAo Z3JvdXAsIFAsIHgsIDEsIGN0eCkpCi0gICAgICAgIEFCT1JUOwotICAgIGlmIChFQ19QT0lOVF9p c19vbl9jdXJ2ZShncm91cCwgUCwgY3R4KSA8PSAwKQotICAgICAgICBBQk9SVDsKLSAgICBpZiAo IUJOX2hleDJibigmeiwgIkZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGQkNFNkZBQURB NzE3OUUiCi0gICAgICAgICAgICAgICAgICAgIjg0RjNCOUNBQzJGQzYzMjU1MSIpKQotICAgICAg ICBBQk9SVDsKLSAgICBpZiAoIUVDX0dST1VQX3NldF9nZW5lcmF0b3IoZ3JvdXAsIFAsIHosIEJO X3ZhbHVlX29uZSgpKSkKLSAgICAgICAgQUJPUlQ7Ci0KLSAgICBpZiAoIUVDX1BPSU5UX2dldF9h ZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBQLCB4LCB5LCBjdHgpKQotICAgICAgICBBQk9S VDsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIlxuTklTVCBjdXJ2ZSBQLTI1NiAtLSBHZW5lcmF0b3I6 XG4gICAgIHggPSAweCIpOwotICAgIEJOX3ByaW50X2ZwKHN0ZG91dCwgeCk7Ci0gICAgZnByaW50 ZihzdGRvdXQsICJcbiAgICAgeSA9IDB4Iik7Ci0gICAgQk5fcHJpbnRfZnAoc3Rkb3V0LCB5KTsK LSAgICBmcHJpbnRmKHN0ZG91dCwgIlxuIik7CisgICAgICAgIHx8ICFURVNUX3RydWUoQk5faGV4 MmJuKCZwLCAiRkZGRkZGRkYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYi KSkKKyAgICAgICAgfHwgIVRFU1RfaW50X2VxKDEsIEJOX2lzX3ByaW1lX2V4KHAsIEJOX3ByaW1l X2NoZWNrcywgY3R4LCBOVUxMKSkKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShCTl9oZXgyYm4oJmEs ICJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQyIpKQorICAg ICAgICB8fCAhVEVTVF90cnVlKEJOX2hleDJibigmYiwgIjVBQzYzNUQ4QUEzQTkzRTdCM0VCQkQ1 NTc2OTg4NkJDIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjY1MUQwNkIw Q0M1M0IwRjYzQkNFM0MzRTI3RDI2MDRCIikpCisgICAgICAgIHx8ICFURVNUX3RydWUoRUNfR1JP VVBfc2V0X2N1cnZlX0dGcChncm91cCwgcCwgYSwgYiwgY3R4KSkKKworICAgICAgICB8fCAhVEVT VF90cnVlKEJOX2hleDJibigmeCwgIjZCMTdEMUYyRTEyQzQyNDdGOEJDRTZFNTYzQTQ0MEYyIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjc3MDM3RDgxMkRFQjMzQTBGNEEx Mzk0NUQ4OThDMjk2IikpCisgICAgICAgIHx8ICFURVNUX3RydWUoRUNfUE9JTlRfc2V0X2NvbXBy ZXNzZWRfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBQLCB4LCAxLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgpKQorICAgICAg ICB8fCAhVEVTVF9pbnRfZ3QoRUNfUE9JTlRfaXNfb25fY3VydmUoZ3JvdXAsIFAsIGN0eCksIDAp CisgICAgICAgIHx8ICFURVNUX3RydWUoQk5faGV4MmJuKCZ6LCAiRkZGRkZGRkYwMDAwMDAwMEZG RkZGRkZGRkZGRkZGRkYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQkNF NkZBQURBNzE3OUU4NEYzQjlDQUMyRkM2MzI1NTEiKSkKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShF Q19HUk9VUF9zZXRfZ2VuZXJhdG9yKGdyb3VwLCBQLCB6LCBCTl92YWx1ZV9vbmUoKSkpCisgICAg ICAgIHx8ICFURVNUX3RydWUoRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRnAoZ3Jv dXAsIFAsIHgsIHksIGN0eCkpKQorICAgICAgICBnb3RvIGVycjsKKworICAgIFRFU1RfaW5mbygi TklTVCBjdXJ2ZSBQLTI1NiAtLSBHZW5lcmF0b3IiKTsKKyAgICB0ZXN0X291dHB1dF9iaWdudW0o IngiLCB4KTsKKyAgICB0ZXN0X291dHB1dF9iaWdudW0oInkiLCB5KTsKICAgICAvKiBHX3kgdmFs dWUgdGFrZW4gZnJvbSB0aGUgc3RhbmRhcmQ6ICovCi0gICAgaWYgKCFCTl9oZXgyYm4KLSAgICAg ICAgKCZ6LAotICAgICAgICAgIjRGRTM0MkUyRkUxQTdGOUI4RUU3RUI0QTdDMEY5RTE2MkJDRTMz NTc2QjMxNUVDRUNCQjY0MDY4MzdCRjUxRjUiKSkKLSAgICAgICAgQUJPUlQ7Ci0gICAgaWYgKDAg IT0gQk5fY21wKHksIHopKQotICAgICAgICBBQk9SVDsKLQotICAgIGlmICghQk5fYWRkKHlwbHVz b25lLCB5LCBCTl92YWx1ZV9vbmUoKSkpCi0gICAgICAgIEFCT1JUOworICAgIGlmICghVEVTVF90 cnVlKEJOX2hleDJibigmeiwgIjRGRTM0MkUyRkUxQTdGOUI4RUU3RUI0QTdDMEY5RTE2IgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjJCQ0UzMzU3NkIzMTVFQ0VDQkI2NDA2ODM3 QkY1MUY1IikpCisgICAgICAgIHx8ICFURVNUX0JOX2VxKHksIHopCisgICAgICAgIHx8ICFURVNU X3RydWUoQk5fYWRkKHlwbHVzb25lLCB5LCBCTl92YWx1ZV9vbmUoKSkpCiAgICAgLyoKICAgICAg KiBXaGVuICh4LCB5KSBpcyBvbiB0aGUgY3VydmUsICh4LCB5ICsgMSkgaXMsIGFzIGl0IGhhcHBl bnMsIG5vdCwKICAgICAgKiBhbmQgdGhlcmVmb3JlIHNldHRpbmcgdGhlIGNvb3JkaW5hdGVzIHNo b3VsZCBmYWlsLgogICAgICAqLwotICAgIGlmIChFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5h dGVzX0dGcChncm91cCwgUCwgeCwgeXBsdXNvbmUsIGN0eCkpCi0gICAgICAgIEFCT1JUOwotCi0g ICAgZnByaW50ZihzdGRvdXQsICJ2ZXJpZnkgZGVncmVlIC4uLiIpOwotICAgIGlmIChFQ19HUk9V UF9nZXRfZGVncmVlKGdyb3VwKSAhPSAyNTYpCi0gICAgICAgIEFCT1JUOwotICAgIGZwcmludGYo c3Rkb3V0LCAiIG9rXG4iKTsKLQotICAgIGdyb3VwX29yZGVyX3Rlc3RzKGdyb3VwKTsKLQotICAg IGlmICgoUF8yNTYgPSBFQ19HUk9VUF9uZXcoRUNfR1JPVVBfbWV0aG9kX29mKGdyb3VwKSkpID09 IE5VTEwpCi0gICAgICAgIEFCT1JUOwotICAgIGlmICghRUNfR1JPVVBfY29weShQXzI1NiwgZ3Jv dXApKQotICAgICAgICBBQk9SVDsKKyAgICAgICAgfHwgIVRFU1RfZmFsc2UoRUNfUE9JTlRfc2V0 X2FmZmluZV9jb29yZGluYXRlc19HRnAoZ3JvdXAsIFAsIHgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlwbHVzb25lLCBjdHgpKQor ICAgICAgICB8fCAhVEVTVF9pbnRfZXEoRUNfR1JPVVBfZ2V0X2RlZ3JlZShncm91cCksIDI1NikK KyAgICAgICAgfHwgIWdyb3VwX29yZGVyX3Rlc3RzKGdyb3VwKQorICAgICAgICB8fCAhVEVTVF9w dHIoUF8yNTYgPSBFQ19HUk9VUF9uZXcoRUNfR1JPVVBfbWV0aG9kX29mKGdyb3VwKSkpCisgICAg ICAgIHx8ICFURVNUX3RydWUoRUNfR1JPVVBfY29weShQXzI1NiwgZ3JvdXApKQogCiAgICAgLyog Q3VydmUgUC0zODQgKEZJUFMgUFVCIDE4Ni0yLCBBcHAuIDYpICovCiAKLSAgICBpZiAoIUJOX2hl eDJibigmcCwgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYi Ci0gICAgICAgICAgICAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGMDAwMDAwMDAw MDAwMDAwMEZGRkZGRkZGIikpCi0gICAgICAgIEFCT1JUOwotICAgIGlmICgxICE9IEJOX2lzX3By aW1lX2V4KHAsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSkKLSAgICAgICAgQUJPUlQ7Ci0g ICAgaWYgKCFCTl9oZXgyYm4oJmEsICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG RkZGRkZGRkZGRkZGIgotICAgICAgICAgICAgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkVGRkZG RkZGRjAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGQyIpKQotICAgICAgICBBQk9SVDsKLSAgICBpZiAo IUJOX2hleDJibigmYiwgIkIzMzEyRkE3RTIzRUU3RTQ5ODhFMDU2QkUzRjgyRDE5MTgxRDlDNkVG RTgxNDEiCi0gICAgICAgICAgICAgICAgICAgIjEyMDMxNDA4OEY1MDEzODc1QUM2NTYzOThEOEEy RUQxOUQyQTg1QzhFREQzRUMyQUVGIikpCi0gICAgICAgIEFCT1JUOwotICAgIGlmICghRUNfR1JP VVBfc2V0X2N1cnZlX0dGcChncm91cCwgcCwgYSwgYiwgY3R4KSkKLSAgICAgICAgQUJPUlQ7Ci0K LSAgICBpZiAoIUJOX2hleDJibigmeCwgIkFBODdDQTIyQkU4QjA1Mzc4RUIxQzcxRUYzMjBBRDc0 NkUxRDNCNjI4QkE3OUIiCi0gICAgICAgICAgICAgICAgICAgIjk4NTlGNzQxRTA4MjU0MkEzODU1 MDJGMjVEQkY1NTI5NkMzQTU0NUUzODcyNzYwQUI3IikpCi0gICAgICAgIEFCT1JUOwotICAgIGlm ICghRUNfUE9JTlRfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBQLCB4LCAx LCBjdHgpKQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoRUNfUE9JTlRfaXNfb25fY3VydmUoZ3Jv dXAsIFAsIGN0eCkgPD0gMCkKLSAgICAgICAgQUJPUlQ7Ci0gICAgaWYgKCFCTl9oZXgyYm4oJnos ICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIgotICAgICAg ICAgICAgICAgICAgICJGRkM3NjM0RDgxRjQzNzJEREY1ODFBMERCMjQ4QjBBNzdBRUNFQzE5NkFD Q0M1Mjk3MyIpKQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUVDX0dST1VQX3NldF9nZW5lcmF0 b3IoZ3JvdXAsIFAsIHosIEJOX3ZhbHVlX29uZSgpKSkKLSAgICAgICAgQUJPUlQ7Ci0KLSAgICBp ZiAoIUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBQLCB4LCB5LCBj dHgpKQotICAgICAgICBBQk9SVDsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIlxuTklTVCBjdXJ2ZSBQ LTM4NCAtLSBHZW5lcmF0b3I6XG4gICAgIHggPSAweCIpOwotICAgIEJOX3ByaW50X2ZwKHN0ZG91 dCwgeCk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJcbiAgICAgeSA9IDB4Iik7Ci0gICAgQk5fcHJp bnRfZnAoc3Rkb3V0LCB5KTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIlxuIik7CisgICAgICAgIHx8 ICFURVNUX3RydWUoQk5faGV4MmJuKCZwLCAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG RkYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkZGRkZGRkZGRkZGRkZG RkZGRkZGRkZGRkZGRkZGRkUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi RkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkYiKSkKKyAgICAgICAgfHwgIVRFU1RfaW50 X2VxKDEsIEJOX2lzX3ByaW1lX2V4KHAsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSkKKyAg ICAgICAgfHwgIVRFU1RfdHJ1ZShCTl9oZXgyYm4oJmEsICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZG RkZGRkZGRkZGRiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGRkZGRkZG RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGQyIpKQorICAgICAgICB8fCAh VEVTVF90cnVlKEJOX2hleDJibigmYiwgIkIzMzEyRkE3RTIzRUU3RTQ5ODhFMDU2QkUzRjgyRDE5 IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE4MUQ5QzZFRkU4MTQxMTIw MzE0MDg4RjUwMTM4NzVBIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkM2 NTYzOThEOEEyRUQxOUQyQTg1QzhFREQzRUMyQUVGIikpCisgICAgICAgIHx8ICFURVNUX3RydWUo RUNfR1JPVVBfc2V0X2N1cnZlX0dGcChncm91cCwgcCwgYSwgYiwgY3R4KSkKKworICAgICAgICB8 fCAhVEVTVF90cnVlKEJOX2hleDJibigmeCwgIkFBODdDQTIyQkU4QjA1Mzc4RUIxQzcxRUYzMjBB RDc0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjZFMUQzQjYyOEJBNzlC OTg1OUY3NDFFMDgyNTQyQTM4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IjU1MDJGMjVEQkY1NTI5NkMzQTU0NUUzODcyNzYwQUI3IikpCisgICAgICAgIHx8ICFURVNUX3Ry dWUoRUNfUE9JTlRfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBQLCB4LCAx LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjdHgpKQorICAgICAgICB8fCAhVEVTVF9pbnRfZ3QoRUNfUE9JTlRfaXNfb25fY3Vy dmUoZ3JvdXAsIFAsIGN0eCksIDApCisgICAgICAgIHx8ICFURVNUX3RydWUoQk5faGV4MmJuKCZ6 LCAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkM3NjM0RDgxRjQzNzJEREYiCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNTgxQTBEQjI0OEIwQTc3QUVDRUMxOTZB Q0NDNTI5NzMiKSkKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShFQ19HUk9VUF9zZXRfZ2VuZXJhdG9y KGdyb3VwLCBQLCB6LCBCTl92YWx1ZV9vbmUoKSkpCisgICAgICAgIHx8ICFURVNUX3RydWUoRUNf UE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRnAoZ3JvdXAsIFAsIHgsIHksIGN0eCkpKQor ICAgICAgICBnb3RvIGVycjsKKworICAgIFRFU1RfaW5mbygiTklTVCBjdXJ2ZSBQLTM4NCAtLSBH ZW5lcmF0b3IiKTsKKyAgICB0ZXN0X291dHB1dF9iaWdudW0oIngiLCB4KTsKKyAgICB0ZXN0X291 dHB1dF9iaWdudW0oInkiLCB5KTsKICAgICAvKiBHX3kgdmFsdWUgdGFrZW4gZnJvbSB0aGUgc3Rh bmRhcmQ6ICovCi0gICAgaWYgKCFCTl9oZXgyYm4oJnosICIzNjE3REU0QTk2MjYyQzZGNUQ5RTk4 QkY5MjkyREMyOUY4RjQxREJEMjg5QTE0IgotICAgICAgICAgICAgICAgICAgICI3Q0U5REEzMTEz QjVGMEI4QzAwQTYwQjFDRTFEN0U4MTlEN0E0MzFEN0M5MEVBMEU1RiIpKQotICAgICAgICBBQk9S VDsKLSAgICBpZiAoMCAhPSBCTl9jbXAoeSwgeikpCi0gICAgICAgIEFCT1JUOwotCi0gICAgaWYg KCFCTl9hZGQoeXBsdXNvbmUsIHksIEJOX3ZhbHVlX29uZSgpKSkKLSAgICAgICAgQUJPUlQ7Cisg ICAgaWYgKCFURVNUX3RydWUoQk5faGV4MmJuKCZ6LCAiMzYxN0RFNEE5NjI2MkM2RjVEOUU5OEJG OTI5MkRDMjkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRjhGNDFEQkQyODlB MTQ3Q0U5REEzMTEzQjVGMEI4QzAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi MEE2MEIxQ0UxRDdFODE5RDdBNDMxRDdDOTBFQTBFNUYiKSkKKyAgICAgICAgfHwgIVRFU1RfQk5f ZXEoeSwgeikKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShCTl9hZGQoeXBsdXNvbmUsIHksIEJOX3Zh bHVlX29uZSgpKSkKICAgICAvKgogICAgICAqIFdoZW4gKHgsIHkpIGlzIG9uIHRoZSBjdXJ2ZSwg KHgsIHkgKyAxKSBpcywgYXMgaXQgaGFwcGVucywgbm90LAogICAgICAqIGFuZCB0aGVyZWZvcmUg c2V0dGluZyB0aGUgY29vcmRpbmF0ZXMgc2hvdWxkIGZhaWwuCiAgICAgICovCi0gICAgaWYgKEVD X1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBQLCB4LCB5cGx1c29uZSwg Y3R4KSkKLSAgICAgICAgQUJPUlQ7Ci0KLSAgICBmcHJpbnRmKHN0ZG91dCwgInZlcmlmeSBkZWdy ZWUgLi4uIik7Ci0gICAgaWYgKEVDX0dST1VQX2dldF9kZWdyZWUoZ3JvdXApICE9IDM4NCkKLSAg ICAgICAgQUJPUlQ7Ci0gICAgZnByaW50ZihzdGRvdXQsICIgb2tcbiIpOwotCi0gICAgZ3JvdXBf b3JkZXJfdGVzdHMoZ3JvdXApOwotCi0gICAgaWYgKChQXzM4NCA9IEVDX0dST1VQX25ldyhFQ19H Uk9VUF9tZXRob2Rfb2YoZ3JvdXApKSkgPT0gTlVMTCkKLSAgICAgICAgQUJPUlQ7Ci0gICAgaWYg KCFFQ19HUk9VUF9jb3B5KFBfMzg0LCBncm91cCkpCi0gICAgICAgIEFCT1JUOworICAgICAgICB8 fCAhVEVTVF9mYWxzZShFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcChncm91cCwg UCwgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeXBsdXNvbmUsIGN0eCkpCisgICAgICAgIHx8ICFURVNUX2ludF9lcShFQ19HUk9V UF9nZXRfZGVncmVlKGdyb3VwKSwgMzg0KQorICAgICAgICB8fCAhZ3JvdXBfb3JkZXJfdGVzdHMo Z3JvdXApCisgICAgICAgIHx8ICFURVNUX3B0cihQXzM4NCA9IEVDX0dST1VQX25ldyhFQ19HUk9V UF9tZXRob2Rfb2YoZ3JvdXApKSkKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShFQ19HUk9VUF9jb3B5 KFBfMzg0LCBncm91cCkpCiAKICAgICAvKiBDdXJ2ZSBQLTUyMSAoRklQUyBQVUIgMTg2LTIsIEFw cC4gNikgKi8KLQotICAgIGlmICghQk5faGV4MmJuKCZwLCAiMUZGRkZGRkZGRkZGRkZGRkZGRkZG RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIKLSAgICAgICAgICAgICAgICAgICAiRkZGRkZGRkZG RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIgotICAgICAg ICAgICAgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIikpCi0gICAgICAgIEFC T1JUOwotICAgIGlmICgxICE9IEJOX2lzX3ByaW1lX2V4KHAsIEJOX3ByaW1lX2NoZWNrcywgY3R4 LCBOVUxMKSkKLSAgICAgICAgQUJPUlQ7Ci0gICAgaWYgKCFCTl9oZXgyYm4oJmEsICIxRkZGRkZG RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIgotICAgICAgICAgICAgICAg ICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG RkZGRkYiCi0gICAgICAgICAgICAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkMi KSkKLSAgICAgICAgQUJPUlQ7Ci0gICAgaWYgKCFCTl9oZXgyYm4oJmIsICIwNTE5NTNFQjk2MThF MUM5QTFGOTI5QTIxQTBCNjg1NDBFRUEyREE3MjVCOTlCIgotICAgICAgICAgICAgICAgICAgICIz MTVGM0I4QjQ4OTkxOEVGMTA5RTE1NjE5Mzk1MUVDN0U5MzdCMTY1MkMwQkQzQkIxQkYwNzM1NzMi Ci0gICAgICAgICAgICAgICAgICAgIkRGODgzRDJDMzRGMUVGNDUxRkQ0NkI1MDNGMDAiKSkKLSAg ICAgICAgQUJPUlQ7Ci0gICAgaWYgKCFFQ19HUk9VUF9zZXRfY3VydmVfR0ZwKGdyb3VwLCBwLCBh LCBiLCBjdHgpKQotICAgICAgICBBQk9SVDsKLQotICAgIGlmICghQk5faGV4MmJuKCZ4LCAiQzY4 NThFMDZCNzA0MDRFOUNEOUUzRUNCNjYyMzk1QjQ0MjlDNjQ4MTM5MDUzRiIKLSAgICAgICAgICAg ICAgICAgICAiQjUyMUY4MjhBRjYwNkI0RDNEQkFBMTRCNUU3N0VGRTc1OTI4RkUxREMxMjdBMkZG QThERTMzNDhCIgotICAgICAgICAgICAgICAgICAgICIzQzE4NTZBNDI5QkY5N0U3RTMxQzJFNUJE NjYiKSkKLSAgICAgICAgQUJPUlQ7Ci0gICAgaWYgKCFFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9j b29yZGluYXRlc19HRnAoZ3JvdXAsIFAsIHgsIDAsIGN0eCkpCi0gICAgICAgIEFCT1JUOwotICAg IGlmIChFQ19QT0lOVF9pc19vbl9jdXJ2ZShncm91cCwgUCwgY3R4KSA8PSAwKQotICAgICAgICBB Qk9SVDsKLSAgICBpZiAoIUJOX2hleDJibigmeiwgIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG RkZGRkZGRkZGRkZGRkZGRkZGRkYiCi0gICAgICAgICAgICAgICAgICAgIkZGRkZGRkZGRkZGRkZG RkZGRkZGQTUxODY4NzgzQkYyRjk2NkI3RkNDMDE0OEY3MDlBNUQwM0JCNSIKLSAgICAgICAgICAg ICAgICAgICAiQzlCODg5OUM0N0FFQkI2RkI3MUU5MTM4NjQwOSIpKQotICAgICAgICBBQk9SVDsK LSAgICBpZiAoIUVDX0dST1VQX3NldF9nZW5lcmF0b3IoZ3JvdXAsIFAsIHosIEJOX3ZhbHVlX29u ZSgpKSkKLSAgICAgICAgQUJPUlQ7Ci0KLSAgICBpZiAoIUVDX1BPSU5UX2dldF9hZmZpbmVfY29v cmRpbmF0ZXNfR0ZwKGdyb3VwLCBQLCB4LCB5LCBjdHgpKQotICAgICAgICBBQk9SVDsKLSAgICBm cHJpbnRmKHN0ZG91dCwgIlxuTklTVCBjdXJ2ZSBQLTUyMSAtLSBHZW5lcmF0b3I6XG4gICAgIHgg PSAweCIpOwotICAgIEJOX3ByaW50X2ZwKHN0ZG91dCwgeCk7Ci0gICAgZnByaW50ZihzdGRvdXQs ICJcbiAgICAgeSA9IDB4Iik7Ci0gICAgQk5fcHJpbnRfZnAoc3Rkb3V0LCB5KTsKLSAgICBmcHJp bnRmKHN0ZG91dCwgIlxuIik7CisgICAgICAgIHx8ICFURVNUX3RydWUoQk5faGV4MmJuKCZwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxRkYiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG RkZGRkYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkZGRkZGRkZGRkZG RkZGRkZGRkZGRkZGRkZGRkZGRkYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiKSkKKyAgICAgICAgfHwgIVRFU1Rf aW50X2VxKDEsIEJOX2lzX3ByaW1lX2V4KHAsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSkK KyAgICAgICAgfHwgIVRFU1RfdHJ1ZShCTl9oZXgyYm4oJmEsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIjFGRiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGRkZG RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG RiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGRkZGRkZGRkZGRkZGRkZG RkZGRkZGRkZGRkZGRkZGQyIpKQorICAgICAgICB8fCAhVEVTVF90cnVlKEJOX2hleDJibigmYiwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMDUxIgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIjk1M0VCOTYxOEUxQzlBMUY5MjlBMjFBMEI2ODU0MEVFIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEyREE3MjVCOTlCMzE1RjNCOEI0ODk5MThF RjEwOUUxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjU2MTkzOTUxRUM3 RTkzN0IxNjUyQzBCRDNCQjFCRjA3IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIjM1NzNERjg4M0QyQzM0RjFFRjQ1MUZENDZCNTAzRjAwIikpCisgICAgICAgIHx8ICFURVNU X3RydWUoRUNfR1JPVVBfc2V0X2N1cnZlX0dGcChncm91cCwgcCwgYSwgYiwgY3R4KSkKKyAgICAg ICAgfHwgIVRFU1RfdHJ1ZShCTl9oZXgyYm4oJngsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJDNiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI4NThFMDZCNzA0 MDRFOUNEOUUzRUNCNjYyMzk1QjQ0MiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICI5QzY0ODEzOTA1M0ZCNTIxRjgyOEFGNjA2QjREM0RCQSIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJBMTRCNUU3N0VGRTc1OTI4RkUxREMxMjdBMkZGQThERSIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzMzQ4QjNDMTg1NkE0MjlCRjk3RTdF MzFDMkU1QkQ2NiIpKQorICAgICAgICB8fCAhVEVTVF90cnVlKEVDX1BPSU5UX3NldF9jb21wcmVz c2VkX2Nvb3JkaW5hdGVzX0dGcChncm91cCwgUCwgeCwgMCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4KSkKKyAgICAgICAg fHwgIVRFU1RfaW50X2d0KEVDX1BPSU5UX2lzX29uX2N1cnZlKGdyb3VwLCBQLCBjdHgpLCAwKQor ICAgICAgICB8fCAhVEVTVF90cnVlKEJOX2hleDJibigmeiwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiMUZGIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZGRkZG RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZBIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIjUxODY4NzgzQkYyRjk2NkI3RkNDMDE0OEY3MDlBNUQw IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjNCQjVDOUI4ODk5QzQ3QUVC QjZGQjcxRTkxMzg2NDA5IikpCisgICAgICAgIHx8ICFURVNUX3RydWUoRUNfR1JPVVBfc2V0X2dl bmVyYXRvcihncm91cCwgUCwgeiwgQk5fdmFsdWVfb25lKCkpKQorICAgICAgICB8fCAhVEVTVF90 cnVlKEVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBQLCB4LCB5LCBj dHgpKSkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICBURVNUX2luZm8oIk5JU1QgY3VydmUgUC01 MjEgLS0gR2VuZXJhdG9yIik7CisgICAgdGVzdF9vdXRwdXRfYmlnbnVtKCJ4IiwgeCk7CisgICAg dGVzdF9vdXRwdXRfYmlnbnVtKCJ5IiwgeSk7CiAgICAgLyogR195IHZhbHVlIHRha2VuIGZyb20g dGhlIHN0YW5kYXJkOiAqLwotICAgIGlmICghQk5faGV4MmJuKCZ6LCAiMTE4MzkyOTZBNzg5QTNC QzAwNDVDOEE1RkI0MkM3RDFCRDk5OEY1NDQ0OTU3OSIKLSAgICAgICAgICAgICAgICAgICAiQjQ0 NjgxN0FGQkQxNzI3M0U2NjJDOTdFRTcyOTk1RUY0MjY0MEM1NTBCOTAxM0ZBRDA3NjEzNTNDIgot ICAgICAgICAgICAgICAgICAgICI3MDg2QTI3MkMyNDA4OEJFOTQ3NjlGRDE2NjUwIikpCi0gICAg ICAgIEFCT1JUOwotICAgIGlmICgwICE9IEJOX2NtcCh5LCB6KSkKLSAgICAgICAgQUJPUlQ7Ci0K LSAgICBpZiAoIUJOX2FkZCh5cGx1c29uZSwgeSwgQk5fdmFsdWVfb25lKCkpKQotICAgICAgICBB Qk9SVDsKKyAgICBpZiAoIVRFU1RfdHJ1ZShCTl9oZXgyYm4oJnosICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIjExOCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzOTI5 NkE3ODlBM0JDMDA0NUM4QTVGQjQyQzdEMUJEOSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICI5OEY1NDQ0OTU3OUI0NDY4MTdBRkJEMTcyNzNFNjYyQyIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICI5N0VFNzI5OTVFRjQyNjQwQzU1MEI5MDEzRkFEMDc2MSIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzNTNDNzA4NkEyNzJDMjQwODhCRTk0NzY5 RkQxNjY1MCIpKQorICAgICAgICB8fCAhVEVTVF9CTl9lcSh5LCB6KQorICAgICAgICB8fCAhVEVT VF90cnVlKEJOX2FkZCh5cGx1c29uZSwgeSwgQk5fdmFsdWVfb25lKCkpKQogICAgIC8qCiAgICAg ICogV2hlbiAoeCwgeSkgaXMgb24gdGhlIGN1cnZlLCAoeCwgeSArIDEpIGlzLCBhcyBpdCBoYXBw ZW5zLCBub3QsCiAgICAgICogYW5kIHRoZXJlZm9yZSBzZXR0aW5nIHRoZSBjb29yZGluYXRlcyBz aG91bGQgZmFpbC4KICAgICAgKi8KLSAgICBpZiAoRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGlu YXRlc19HRnAoZ3JvdXAsIFAsIHgsIHlwbHVzb25lLCBjdHgpKQotICAgICAgICBBQk9SVDsKLQot ICAgIGZwcmludGYoc3Rkb3V0LCAidmVyaWZ5IGRlZ3JlZSAuLi4iKTsKLSAgICBpZiAoRUNfR1JP VVBfZ2V0X2RlZ3JlZShncm91cCkgIT0gNTIxKQotICAgICAgICBBQk9SVDsKLSAgICBmcHJpbnRm KHN0ZG91dCwgIiBva1xuIik7Ci0KLSAgICBncm91cF9vcmRlcl90ZXN0cyhncm91cCk7Ci0KLSAg ICBpZiAoKFBfNTIxID0gRUNfR1JPVVBfbmV3KEVDX0dST1VQX21ldGhvZF9vZihncm91cCkpKSA9 PSBOVUxMKQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUVDX0dST1VQX2NvcHkoUF81MjEsIGdy b3VwKSkKLSAgICAgICAgQUJPUlQ7CisgICAgICAgIHx8ICFURVNUX2ZhbHNlKEVDX1BPSU5UX3Nl dF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBQLCB4LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5cGx1c29uZSwgY3R4KSkK KyAgICAgICAgfHwgIVRFU1RfaW50X2VxKEVDX0dST1VQX2dldF9kZWdyZWUoZ3JvdXApLCA1MjEp CisgICAgICAgIHx8ICFncm91cF9vcmRlcl90ZXN0cyhncm91cCkKKyAgICAgICAgfHwgIVRFU1Rf cHRyKFBfNTIxID0gRUNfR1JPVVBfbmV3KEVDX0dST1VQX21ldGhvZF9vZihncm91cCkpKQorICAg ICAgICB8fCAhVEVTVF90cnVlKEVDX0dST1VQX2NvcHkoUF81MjEsIGdyb3VwKSkKIAogICAgIC8q IG1vcmUgdGVzdHMgdXNpbmcgdGhlIGxhc3QgY3VydmUgKi8KIAogICAgIC8qIFJlc3RvcmUgdGhl IHBvaW50IHRoYXQgZ290IG1hbmdsZWQgaW4gdGhlICh4LCB5ICsgMSkgdGVzdC4gKi8KLSAgICBp ZiAoIUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBQLCB4LCB5LCBj dHgpKQotICAgICAgICBBQk9SVDsKLQotICAgIGlmICghRUNfUE9JTlRfY29weShRLCBQKSkKLSAg ICAgICAgQUJPUlQ7Ci0gICAgaWYgKEVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGdyb3VwLCBRKSkK LSAgICAgICAgQUJPUlQ7Ci0gICAgaWYgKCFFQ19QT0lOVF9kYmwoZ3JvdXAsIFAsIFAsIGN0eCkp Ci0gICAgICAgIEFCT1JUOwotICAgIGlmIChFQ19QT0lOVF9pc19vbl9jdXJ2ZShncm91cCwgUCwg Y3R4KSA8PSAwKQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUVDX1BPSU5UX2ludmVydChncm91 cCwgUSwgY3R4KSkKLSAgICAgICAgQUJPUlQ7ICAgICAgICAgICAgICAgICAgLyogUCA9IC0yUSAq LwotCi0gICAgaWYgKCFFQ19QT0lOVF9hZGQoZ3JvdXAsIFIsIFAsIFEsIGN0eCkpCi0gICAgICAg IEFCT1JUOwotICAgIGlmICghRUNfUE9JTlRfYWRkKGdyb3VwLCBSLCBSLCBRLCBjdHgpKQotICAg ICAgICBBQk9SVDsKLSAgICBpZiAoIUVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGdyb3VwLCBSKSkK LSAgICAgICAgQUJPUlQ7ICAgICAgICAgICAgICAgICAgLyogUiA9IFAgKyAyUSAqLwotCi0gICAg ewotICAgICAgICBjb25zdCBFQ19QT0lOVCAqcG9pbnRzWzRdOwotICAgICAgICBjb25zdCBCSUdO VU0gKnNjYWxhcnNbNF07Ci0gICAgICAgIEJJR05VTSAqc2NhbGFyMzsKLQotICAgICAgICBpZiAo RUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFEpKQotICAgICAgICAgICAgQUJPUlQ7Ci0g ICAgICAgIHBvaW50c1swXSA9IFE7Ci0gICAgICAgIHBvaW50c1sxXSA9IFE7Ci0gICAgICAgIHBv aW50c1syXSA9IFE7Ci0gICAgICAgIHBvaW50c1szXSA9IFE7Ci0KLSAgICAgICAgaWYgKCFFQ19H Uk9VUF9nZXRfb3JkZXIoZ3JvdXAsIHosIGN0eCkpCi0gICAgICAgICAgICBBQk9SVDsKLSAgICAg ICAgaWYgKCFCTl9hZGQoeSwgeiwgQk5fdmFsdWVfb25lKCkpKQotICAgICAgICAgICAgQUJPUlQ7 Ci0gICAgICAgIGlmIChCTl9pc19vZGQoeSkpCi0gICAgICAgICAgICBBQk9SVDsKLSAgICAgICAg aWYgKCFCTl9yc2hpZnQxKHksIHkpKQotICAgICAgICAgICAgQUJPUlQ7Ci0gICAgICAgIHNjYWxh cnNbMF0gPSB5OyAgICAgICAgIC8qIChncm91cCBvcmRlciArIDEpLzIsIHNvIHkqUSArIHkqUSA9 IFEgKi8KLSAgICAgICAgc2NhbGFyc1sxXSA9IHk7Ci0KLSAgICAgICAgZnByaW50ZihzdGRvdXQs ICJjb21iaW5lZCBtdWx0aXBsaWNhdGlvbiAuLi4iKTsKLSAgICAgICAgZmZsdXNoKHN0ZG91dCk7 Ci0KLSAgICAgICAgLyogeiBpcyBzdGlsbCB0aGUgZ3JvdXAgb3JkZXIgKi8KLSAgICAgICAgaWYg KCFFQ19QT0lOVHNfbXVsKGdyb3VwLCBQLCBOVUxMLCAyLCBwb2ludHMsIHNjYWxhcnMsIGN0eCkp Ci0gICAgICAgICAgICBBQk9SVDsKLSAgICAgICAgaWYgKCFFQ19QT0lOVHNfbXVsKGdyb3VwLCBS LCB6LCAyLCBwb2ludHMsIHNjYWxhcnMsIGN0eCkpCi0gICAgICAgICAgICBBQk9SVDsKLSAgICAg ICAgaWYgKDAgIT0gRUNfUE9JTlRfY21wKGdyb3VwLCBQLCBSLCBjdHgpKQotICAgICAgICAgICAg QUJPUlQ7Ci0gICAgICAgIGlmICgwICE9IEVDX1BPSU5UX2NtcChncm91cCwgUiwgUSwgY3R4KSkK LSAgICAgICAgICAgIEFCT1JUOwotCi0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiLiIpOwotICAg ICAgICBmZmx1c2goc3Rkb3V0KTsKLQotICAgICAgICBpZiAoIUJOX3BzZXVkb19yYW5kKHksIEJO X251bV9iaXRzKHkpLCAwLCAwKSkKLSAgICAgICAgICAgIEFCT1JUOwotICAgICAgICBpZiAoIUJO X2FkZCh6LCB6LCB5KSkKLSAgICAgICAgICAgIEFCT1JUOwotICAgICAgICBCTl9zZXRfbmVnYXRp dmUoeiwgMSk7Ci0gICAgICAgIHNjYWxhcnNbMF0gPSB5OwotICAgICAgICBzY2FsYXJzWzFdID0g ejsgICAgICAgICAvKiB6ID0gLShvcmRlciArIHkpICovCi0KLSAgICAgICAgaWYgKCFFQ19QT0lO VHNfbXVsKGdyb3VwLCBQLCBOVUxMLCAyLCBwb2ludHMsIHNjYWxhcnMsIGN0eCkpCi0gICAgICAg ICAgICBBQk9SVDsKLSAgICAgICAgaWYgKCFFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwg UCkpCi0gICAgICAgICAgICBBQk9SVDsKLQotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIi4iKTsK LSAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0KLSAgICAgICAgaWYgKCFCTl9wc2V1ZG9fcmFuZCh4 LCBCTl9udW1fYml0cyh5KSAtIDEsIDAsIDApKQotICAgICAgICAgICAgQUJPUlQ7Ci0gICAgICAg IGlmICghQk5fYWRkKHosIHgsIHkpKQotICAgICAgICAgICAgQUJPUlQ7Ci0gICAgICAgIEJOX3Nl dF9uZWdhdGl2ZSh6LCAxKTsKLSAgICAgICAgc2NhbGFyc1swXSA9IHg7Ci0gICAgICAgIHNjYWxh cnNbMV0gPSB5OwotICAgICAgICBzY2FsYXJzWzJdID0gejsgICAgICAgICAvKiB6ID0gLSh4K3kp ICovCi0KLSAgICAgICAgc2NhbGFyMyA9IEJOX25ldygpOwotICAgICAgICBpZiAoIXNjYWxhcjMp Ci0gICAgICAgICAgICBBQk9SVDsKLSAgICAgICAgQk5femVybyhzY2FsYXIzKTsKLSAgICAgICAg c2NhbGFyc1szXSA9IHNjYWxhcjM7Ci0KLSAgICAgICAgaWYgKCFFQ19QT0lOVHNfbXVsKGdyb3Vw LCBQLCBOVUxMLCA0LCBwb2ludHMsIHNjYWxhcnMsIGN0eCkpCi0gICAgICAgICAgICBBQk9SVDsK LSAgICAgICAgaWYgKCFFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUCkpCi0gICAgICAg ICAgICBBQk9SVDsKLQotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiBva1xuXG4iKTsKLQotICAg ICAgICBCTl9mcmVlKHNjYWxhcjMpOwotICAgIH0KLQorICAgICAgICB8fCAhVEVTVF90cnVlKEVD X1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBQLCB4LCB5LCBjdHgpKQor ICAgICAgICB8fCAhVEVTVF90cnVlKEVDX1BPSU5UX2NvcHkoUSwgUCkpCisgICAgICAgIHx8ICFU RVNUX2ZhbHNlKEVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGdyb3VwLCBRKSkKKyAgICAgICAgfHwg IVRFU1RfdHJ1ZShFQ19QT0lOVF9kYmwoZ3JvdXAsIFAsIFAsIGN0eCkpCisgICAgICAgIHx8ICFU RVNUX2ludF9ndChFQ19QT0lOVF9pc19vbl9jdXJ2ZShncm91cCwgUCwgY3R4KSwgMCkKKyAgICAg ICAgfHwgIVRFU1RfdHJ1ZShFQ19QT0lOVF9pbnZlcnQoZ3JvdXAsIFEsIGN0eCkpICAgICAgIC8q IFAgPSAtMlEgKi8KKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShFQ19QT0lOVF9hZGQoZ3JvdXAsIFIs IFAsIFEsIGN0eCkpCisgICAgICAgIHx8ICFURVNUX3RydWUoRUNfUE9JTlRfYWRkKGdyb3VwLCBS LCBSLCBRLCBjdHgpKQorICAgICAgICB8fCAhVEVTVF90cnVlKEVDX1BPSU5UX2lzX2F0X2luZmlu aXR5KGdyb3VwLCBSKSkgICAgLyogUiA9IFAgKyAyUSAqLworICAgICAgICB8fCAhVEVTVF9mYWxz ZShFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUSkpKQorICAgICAgICBnb3RvIGVycjsK KyAgICBwb2ludHNbMF0gPSBROworICAgIHBvaW50c1sxXSA9IFE7CisgICAgcG9pbnRzWzJdID0g UTsKKyAgICBwb2ludHNbM10gPSBROworCisgICAgaWYgKCFURVNUX3RydWUoRUNfR1JPVVBfZ2V0 X29yZGVyKGdyb3VwLCB6LCBjdHgpKQorICAgICAgICB8fCAhVEVTVF90cnVlKEJOX2FkZCh5LCB6 LCBCTl92YWx1ZV9vbmUoKSkpCisgICAgICAgIHx8ICFURVNUX0JOX2V2ZW4oeSkKKyAgICAgICAg fHwgIVRFU1RfdHJ1ZShCTl9yc2hpZnQxKHksIHkpKSkKKyAgICAgICAgZ290byBlcnI7CisgICAg c2NhbGFyc1swXSA9IHk7ICAgICAgICAgLyogKGdyb3VwIG9yZGVyICsgMSkvMiwgc28geSpRICsg eSpRID0gUSAqLworICAgIHNjYWxhcnNbMV0gPSB5OworCisgICAgVEVTVF9ub3RlKCJjb21iaW5l ZCBtdWx0aXBsaWNhdGlvbiAuLi4iKTsKKworICAgIC8qIHogaXMgc3RpbGwgdGhlIGdyb3VwIG9y ZGVyICovCisgICAgaWYgKCFURVNUX3RydWUoRUNfUE9JTlRzX211bChncm91cCwgUCwgTlVMTCwg MiwgcG9pbnRzLCBzY2FsYXJzLCBjdHgpKQorICAgICAgICB8fCAhVEVTVF90cnVlKEVDX1BPSU5U c19tdWwoZ3JvdXAsIFIsIHosIDIsIHBvaW50cywgc2NhbGFycywgY3R4KSkKKyAgICAgICAgfHwg IVRFU1RfaW50X2VxKDAsIEVDX1BPSU5UX2NtcChncm91cCwgUCwgUiwgY3R4KSkKKyAgICAgICAg fHwgIVRFU1RfaW50X2VxKDAsIEVDX1BPSU5UX2NtcChncm91cCwgUiwgUSwgY3R4KSkKKyAgICAg ICAgfHwgIVRFU1RfdHJ1ZShCTl9yYW5kKHksIEJOX251bV9iaXRzKHkpLCAwLCAwKSkKKyAgICAg ICAgfHwgIVRFU1RfdHJ1ZShCTl9hZGQoeiwgeiwgeSkpKQorICAgICAgICBnb3RvIGVycjsKKyAg ICBCTl9zZXRfbmVnYXRpdmUoeiwgMSk7CisgICAgc2NhbGFyc1swXSA9IHk7CisgICAgc2NhbGFy c1sxXSA9IHo7ICAgICAgICAgLyogeiA9IC0ob3JkZXIgKyB5KSAqLworCisgICAgaWYgKCFURVNU X3RydWUoRUNfUE9JTlRzX211bChncm91cCwgUCwgTlVMTCwgMiwgcG9pbnRzLCBzY2FsYXJzLCBj dHgpKQorICAgICAgICB8fCAhVEVTVF90cnVlKEVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGdyb3Vw LCBQKSkKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShCTl9yYW5kKHgsIEJOX251bV9iaXRzKHkpIC0g MSwgMCwgMCkpCisgICAgICAgIHx8ICFURVNUX3RydWUoQk5fYWRkKHosIHgsIHkpKSkKKyAgICAg ICAgZ290byBlcnI7CisgICAgQk5fc2V0X25lZ2F0aXZlKHosIDEpOworICAgIHNjYWxhcnNbMF0g PSB4OworICAgIHNjYWxhcnNbMV0gPSB5OworICAgIHNjYWxhcnNbMl0gPSB6OyAgICAgICAgIC8q IHogPSAtKHgreSkgKi8KKworICAgIGlmICghVEVTVF9wdHIoc2NhbGFyMyA9IEJOX25ldygpKSkK KyAgICAgICAgZ290byBlcnI7CisgICAgQk5femVybyhzY2FsYXIzKTsKKyAgICBzY2FsYXJzWzNd ID0gc2NhbGFyMzsKKworICAgIGlmICghVEVTVF90cnVlKEVDX1BPSU5Uc19tdWwoZ3JvdXAsIFAs IE5VTEwsIDQsIHBvaW50cywgc2NhbGFycywgY3R4KSkKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShF Q19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUCkpKQorICAgICAgICBnb3RvIGVycjsKKwor ICAgIFRFU1Rfbm90ZSgiIG9rXG4iKTsKKworCisgICAgciA9IDE7CitlcnI6CiAgICAgQk5fQ1RY X2ZyZWUoY3R4KTsKICAgICBCTl9mcmVlKHApOwogICAgIEJOX2ZyZWUoYSk7CiAgICAgQk5fZnJl ZShiKTsKICAgICBFQ19HUk9VUF9mcmVlKGdyb3VwKTsKKyAgICBFQ19HUk9VUF9mcmVlKHRtcCk7 CiAgICAgRUNfUE9JTlRfZnJlZShQKTsKICAgICBFQ19QT0lOVF9mcmVlKFEpOwogICAgIEVDX1BP SU5UX2ZyZWUoUik7CkBAIC02MTksODIgKzQzNSw0NiBAQCBzdGF0aWMgdm9pZCBwcmltZV9maWVs ZF90ZXN0cyh2b2lkKQogICAgIEJOX2ZyZWUoeSk7CiAgICAgQk5fZnJlZSh6KTsKICAgICBCTl9m cmVlKHlwbHVzb25lKTsKKyAgICBCTl9mcmVlKHNjYWxhcjMpOwogCiAgICAgRUNfR1JPVVBfZnJl ZShQXzIyNCk7CiAgICAgRUNfR1JPVVBfZnJlZShQXzI1Nik7CiAgICAgRUNfR1JPVVBfZnJlZShQ XzM4NCk7CiAgICAgRUNfR1JPVVBfZnJlZShQXzUyMSk7Ci0KKyAgICByZXR1cm4gcjsKIH0KIAot c3RhdGljIHZvaWQgaW50ZXJuYWxfY3VydmVfdGVzdCh2b2lkKQorc3RhdGljIGludCBpbnRlcm5h bF9jdXJ2ZV90ZXN0KGludCBuKQogewotICAgIEVDX2J1aWx0aW5fY3VydmUgKmN1cnZlcyA9IE5V TEw7Ci0gICAgc2l6ZV90IGNydl9sZW4gPSAwLCBuID0gMDsKLSAgICBpbnQgb2sgPSAxOworICAg IEVDX0dST1VQICpncm91cCA9IE5VTEw7CisgICAgaW50IG5pZCA9IGN1cnZlc1tuXS5uaWQ7CiAK LSAgICBjcnZfbGVuID0gRUNfZ2V0X2J1aWx0aW5fY3VydmVzKE5VTEwsIDApOwotICAgIGN1cnZl cyA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZigqY3VydmVzKSAqIGNydl9sZW4pOwotICAgIGlmIChj dXJ2ZXMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFFQ19nZXRfYnVpbHRp bl9jdXJ2ZXMoY3VydmVzLCBjcnZfbGVuKSkgewotICAgICAgICBPUEVOU1NMX2ZyZWUoY3VydmVz KTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghVEVTVF9wdHIoZ3JvdXAgPSBFQ19HUk9VUF9u ZXdfYnlfY3VydmVfbmFtZShuaWQpKSkgeworICAgICAgICBURVNUX2luZm8oIkVDX0dST1VQX25l d19jdXJ2ZV9uYW1lKCkgZmFpbGVkIHdpdGggY3VydmUgJXNcbiIsCisgICAgICAgICAgICAgICAg ICBPQkpfbmlkMnNuKG5pZCkpOworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBmcHJp bnRmKHN0ZG91dCwgInRlc3RpbmcgaW50ZXJuYWwgY3VydmVzOiAiKTsKLQotICAgIGZvciAobiA9 IDA7IG4gPCBjcnZfbGVuOyBuKyspIHsKLSAgICAgICAgRUNfR1JPVVAgKmdyb3VwID0gTlVMTDsK LSAgICAgICAgaW50IG5pZCA9IGN1cnZlc1tuXS5uaWQ7Ci0gICAgICAgIGlmICgoZ3JvdXAgPSBF Q19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZShuaWQpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBv ayA9IDA7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIlxuRUNfR1JPVVBfbmV3X2N1cnZl X25hbWUoKSBmYWlsZWQgd2l0aCIKLSAgICAgICAgICAgICAgICAgICAgIiBjdXJ2ZSAlc1xuIiwg T0JKX25pZDJzbihuaWQpKTsKLSAgICAgICAgICAgIC8qIHRyeSBuZXh0IGN1cnZlICovCi0gICAg ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIUVDX0dST1VQX2NoZWNr KGdyb3VwLCBOVUxMKSkgewotICAgICAgICAgICAgb2sgPSAwOwotICAgICAgICAgICAgZnByaW50 ZihzdGRvdXQsICJcbkVDX0dST1VQX2NoZWNrKCkgZmFpbGVkIHdpdGgiCi0gICAgICAgICAgICAg ICAgICAgICIgY3VydmUgJXNcbiIsIE9CSl9uaWQyc24obmlkKSk7Ci0gICAgICAgICAgICBFQ19H Uk9VUF9mcmVlKGdyb3VwKTsKLSAgICAgICAgICAgIC8qIHRyeSB0aGUgbmV4dCBjdXJ2ZSAqLwot ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgZnByaW50ZihzdGRvdXQs ICIuIik7Ci0gICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgIGlmICghVEVTVF90cnVlKEVDX0dS T1VQX2NoZWNrKGdyb3VwLCBOVUxMKSkpIHsKKyAgICAgICAgVEVTVF9pbmZvKCJFQ19HUk9VUF9j aGVjaygpIGZhaWxlZCB3aXRoIGN1cnZlICVzXG4iLCBPQkpfbmlkMnNuKG5pZCkpOwogICAgICAg ICBFQ19HUk9VUF9mcmVlKGdyb3VwKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlm IChvaykKLSAgICAgICAgZnByaW50ZihzdGRvdXQsICIgb2tcblxuIik7Ci0gICAgZWxzZSB7Ci0g ICAgICAgIGZwcmludGYoc3Rkb3V0LCAiIGZhaWxlZFxuXG4iKTsKLSAgICAgICAgQUJPUlQ7Ci0g ICAgfQorICAgIEVDX0dST1VQX2ZyZWUoZ3JvdXApOworICAgIHJldHVybiAxOworfQogCi0gICAg LyogVGVzdCBhbGwgYnVpbHQtaW4gY3VydmVzIGFuZCBsZXQgdGhlIGxpYnJhcnkgY2hvb3NlIHRo ZSBFQ19NRVRIT0QgKi8KLSAgICBmb3IgKG4gPSAwOyBuIDwgY3J2X2xlbjsgbisrKSB7Ci0gICAg ICAgIEVDX0dST1VQICpncm91cCA9IE5VTEw7Ci0gICAgICAgIGludCBuaWQgPSBjdXJ2ZXNbbl0u bmlkOwotICAgICAgICAvKgotICAgICAgICAgKiBTa2lwIGZvciBYMjU1MTkgYmVjYXVzZSBsb3cg bGV2ZWwgb3BlcmF0aW9ucyBzdWNoIGFzIEVDX1BPSU5UX211bCgpCi0gICAgICAgICAqIGFyZSBu b3Qgc3VwcG9ydGVkIGZvciB0aGlzIGN1cnZlCi0gICAgICAgICAqLwotICAgICAgICBpZiAobmlk ID09IE5JRF9YMjU1MTkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZnByaW50Zihz dGRvdXQsICIlczpcbiIsIE9CSl9uaWQyc24obmlkKSk7Ci0gICAgICAgIGZmbHVzaChzdGRvdXQp OwotICAgICAgICBpZiAoKGdyb3VwID0gRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWUobmlkKSkg PT0gTlVMTCkgewotICAgICAgICAgICAgQUJPUlQ7Ci0gICAgICAgIH0KLSAgICAgICAgZ3JvdXBf b3JkZXJfdGVzdHMoZ3JvdXApOwotICAgICAgICBFQ19HUk9VUF9mcmVlKGdyb3VwKTsKLSAgICB9 CitzdGF0aWMgaW50IGludGVybmFsX2N1cnZlX3Rlc3RfbWV0aG9kKGludCBuKQoreworICAgIGlu dCByLCBuaWQgPSBjdXJ2ZXNbbl0ubmlkOworICAgIEVDX0dST1VQICpncm91cDsKIAotICAgIE9Q RU5TU0xfZnJlZShjdXJ2ZXMpOwotICAgIHJldHVybjsKKyAgICBpZiAoIVRFU1RfcHRyKGdyb3Vw ID0gRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWUobmlkKSkpIHsKKyAgICAgICAgVEVTVF9pbmZv KCJDdXJ2ZSAlcyBmYWlsZWRcbiIsIE9CSl9uaWQyc24obmlkKSk7CisgICAgICAgIHJldHVybiAw OworICAgIH0KKyAgICByID0gZ3JvdXBfb3JkZXJfdGVzdHMoZ3JvdXApOworICAgIEVDX0dST1VQ X2ZyZWUoZ3JvdXApOworICAgIHJldHVybiByOwogfQogCiAjIGlmbmRlZiBPUEVOU1NMX05PX0VD X05JU1RQXzY0X0dDQ18xMjgKQEAgLTcxNSw2ICs0OTUsMjkgQEAgc3RydWN0IG5pc3RwX3Rlc3Rf cGFyYW1zIHsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuaXN0cF90ZXN0X3BhcmFtcyBuaXN0cF90 ZXN0c19wYXJhbXNbXSA9IHsKICAgICB7CisgICAgIC8qIFAtMjI0ICovCisgICAgIEVDX0dGcF9u aXN0cDIyNF9tZXRob2QsCisgICAgIDIyNCwKKyAgICAgLyogcCAqLworICAgICAiRkZGRkZGRkZG RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLAorICAgICAv KiBhICovCisgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZG RkZGRkZGRkZGRkZGRSIsCisgICAgIC8qIGIgKi8KKyAgICAgIkI0MDUwQTg1MEMwNEIzQUJGNTQx MzI1NjUwNDRCMEI3RDdCRkQ4QkEyNzBCMzk0MzIzNTVGRkI0IiwKKyAgICAgLyogUXggKi8KKyAg ICAgIkU4NEZCMEI4RTcwMDBDQjY1N0Q3OTczQ0Y2QjQyRUQ3OEIzMDE2NzQyNzZERjc0NEFGMTMw QjNFIiwKKyAgICAgLyogUXkgKi8KKyAgICAgIjQzNzY2NzVDNkZDNTYxMkMyMUEwRkYyRDJBODlE Mjk4N0RGN0EyQkM1MjE4M0I1OTgyMjk4NTU1IiwKKyAgICAgLyogR3ggKi8KKyAgICAgIkI3MEUw Q0JENkJCNEJGN0YzMjEzOTBCOTRBMDNDMUQzNTZDMjExMjIzNDMyODBENjExNUMxRDIxIiwKKyAg ICAgLyogR3kgKi8KKyAgICAgIkJEMzc2Mzg4QjVGNzIzRkI0QzIyREZFNkNENDM3NUEwNUEwNzQ3 NjQ0NEQ1ODE5OTg1MDA3RTM0IiwKKyAgICAgLyogb3JkZXIgKi8KKyAgICAgIkZGRkZGRkZGRkZG RkZGRkZGRkZGRkZGRkZGRkYxNkEyRTBCOEYwM0UxM0REMjk0NTVDNUMyQTNEIiwKKyAgICAgLyog ZCAqLworICAgICAiM0YwQzQ4OEU5ODdDODBCRTBGRUU1MjFGOEQ5MEJFNjAzNEVDNjlBRTExQ0E3 MkFBNzc3NDgxRTgiLAorICAgICB9LAorICAgIHsKICAgICAgLyogUC0yNTYgKi8KICAgICAgRUNf R0ZwX25pc3RwMjU2X21ldGhvZCwKICAgICAgMjU2LApAQCAtNzQyLDE2MCArNTQ1LDE2NSBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IG5pc3RwX3Rlc3RfcGFyYW1zIG5pc3RwX3Rlc3RzX3BhcmFtc1td ID0gewogICAgICBFQ19HRnBfbmlzdHA1MjFfbWV0aG9kLAogICAgICA1MjEsCiAgICAgIC8qIHAg Ki8KLSAgICAgIjFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxZmYiCisgICAgICJmZmZm ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm ZmZmIgorICAgICAiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm ZmZmZmZmZmZmZmZmZmZmZmZmZiIsCiAgICAgIC8qIGEgKi8KLSAgICAgIjFmZmZmZmZmZmZmZmZm ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm ZmZjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIxZmYiCisgICAgICJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIgorICAgICAiZmZmZmZmZmZmZmZm ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYyIsCiAg ICAgIC8qIGIgKi8KLSAgICAgIjA1MTk1M2ViOTYxOGUxYzlhMWY5MjlhMjFhMGI2ODU0MGVlYTJk YTcyNWI5OWIzMTVmM2I4YjQ4OTkxOGVmMTA5ZTE1NjE5Mzk1MWVjN2U5MzdiMTY1MmMwYmQzYmIx YmYwNzM1NzNkZjg4M2QyYzM0ZjFlZjQ1MWZkNDZiNTAzZjAwIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwNTEiCisg ICAgICI5NTNlYjk2MThlMWM5YTFmOTI5YTIxYTBiNjg1NDBlZWEyZGE3MjViOTliMzE1ZjNiOGI0 ODk5MThlZjEwOWUxIgorICAgICAiNTYxOTM5NTFlYzdlOTM3YjE2NTJjMGJkM2JiMWJmMDczNTcz ZGY4ODNkMmMzNGYxZWY0NTFmZDQ2YjUwM2YwMCIsCiAgICAgIC8qIFF4ICovCi0gICAgICIwMDk4 ZTkxZWVmOWE2ODQ1MjgyMjMwOWM1MmZhYjQ1M2Y1ZjExN2MxZGE4ZWQ3OTZiMjU1ZTlhYjhmNjQx MGNjYTE2ZTU5ZGY0MDNhNmJkYzZjYTQ2N2EzNzA1NmIxZTU0YjMwMDVkOGFjMDMwZGVjZmViNjhk ZjE4YjE3MTg4NWQ1YzQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiMDA5OCIKKyAgICAgImU5MWVlZjlhNjg0NTI4MjIz MDljNTJmYWI0NTNmNWYxMTdjMWRhOGVkNzk2YjI1NWU5YWI4ZjY0MTBjY2ExNmUiCisgICAgICI1 OWRmNDAzYTZiZGM2Y2E0NjdhMzcwNTZiMWU1NGIzMDA1ZDhhYzAzMGRlY2ZlYjY4ZGYxOGIxNzE4 ODVkNWM0IiwKICAgICAgLyogUXkgKi8KLSAgICAgIjAxNjQzNTBjMzIxYWVjZmMxY2NhMWJhNDM2 NGM5YjE1NjU2MTUwYjRiNzhkNmE0OGQ3ZDI4ZTdmMzE5ODVlZjE3YmU4NTU0Mzc2YjcyOTAwNzEy YzRiODNhZDY2ODMyNzIzMTUyNmUzMTNmNWYwOTI5OTlhNDYzMmZkNTBkOTQ2YmMyZSIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIwMTY0IgorICAgICAiMzUwYzMyMWFlY2ZjMWNjYTFiYTQzNjRjOWIxNTY1NjE1MGI0Yjc4 ZDZhNDhkN2QyOGU3ZjMxOTg1ZWYxN2JlOCIKKyAgICAgIjU1NDM3NmI3MjkwMDcxMmM0YjgzYWQ2 NjgzMjcyMzE1MjZlMzEzZjVmMDkyOTk5YTQ2MzJmZDUwZDk0NmJjMmUiLAogICAgICAvKiBHeCAq LwotICAgICAiYzY4NThlMDZiNzA0MDRlOWNkOWUzZWNiNjYyMzk1YjQ0MjljNjQ4MTM5MDUzZmI1 MjFmODI4YWY2MDZiNGQzZGJhYTE0YjVlNzdlZmU3NTkyOGZlMWRjMTI3YTJmZmE4ZGUzMzQ4YjNj MTg1NmE0MjliZjk3ZTdlMzFjMmU1YmQ2NiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImM2IgorICAgICAiODU4ZTA2 YjcwNDA0ZTljZDllM2VjYjY2MjM5NWI0NDI5YzY0ODEzOTA1M2ZiNTIxZjgyOGFmNjA2YjRkM2Ri YSIKKyAgICAgImExNGI1ZTc3ZWZlNzU5MjhmZTFkYzEyN2EyZmZhOGRlMzM0OGIzYzE4NTZhNDI5 YmY5N2U3ZTMxYzJlNWJkNjYiLAogICAgICAvKiBHeSAqLwotICAgICAiMTE4MzkyOTZhNzg5YTNi YzAwNDVjOGE1ZmI0MmM3ZDFiZDk5OGY1NDQ0OTU3OWI0NDY4MTdhZmJkMTcyNzNlNjYyYzk3ZWU3 Mjk5NWVmNDI2NDBjNTUwYjkwMTNmYWQwNzYxMzUzYzcwODZhMjcyYzI0MDg4YmU5NDc2OWZkMTY2 NTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIjExOCIKKyAgICAgIjM5Mjk2YTc4OWEzYmMwMDQ1YzhhNWZiNDJjN2Qx YmQ5OThmNTQ0NDk1NzliNDQ2ODE3YWZiZDE3MjczZTY2MmMiCisgICAgICI5N2VlNzI5OTVlZjQy NjQwYzU1MGI5MDEzZmFkMDc2MTM1M2M3MDg2YTI3MmMyNDA4OGJlOTQ3NjlmZDE2NjUwIiwKICAg ICAgLyogb3JkZXIgKi8KLSAgICAgIjFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmE1MTg2ODc4M2JmMmY5NjZiN2ZjYzAxNDhm NzA5YTVkMDNiYjVjOWI4ODk5YzQ3YWViYjZmYjcxZTkxMzg2NDA5IiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxZmYi CisgICAgICJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm ZmZmZmZmZmZmZmZmZmZhIgorICAgICAiNTE4Njg3ODNiZjJmOTY2YjdmY2MwMTQ4ZjcwOWE1ZDAz YmI1YzliODg5OWM0N2FlYmI2ZmI3MWU5MTM4NjQwOSIsCiAgICAgIC8qIGQgKi8KLSAgICAgIjAx MDAwODVmNDdiOGUxYjhiMTFiN2ViMzMwMjhjMGIyODg4ZTMwNGJmYzk4NTAxOTU1YjQ1YmJhMTQ3 OGRjMTg0ZWVlZGYwOWI4NmE1ZjdjMjE5OTQ0MDYwNzI3ODcyMDVlNjlhNjM3MDlmZTM1YWE5M2Jh MzMzNTE0YjI0Zjk2MTcyMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwMTAwIgorICAgICAiMDg1ZjQ3YjhlMWI4YjEx YjdlYjMzMDI4YzBiMjg4OGUzMDRiZmM5ODUwMTk1NWI0NWJiYTE0NzhkYzE4NGVlZSIKKyAgICAg ImRmMDliODZhNWY3YzIxOTk0NDA2MDcyNzg3MjA1ZTY5YTYzNzA5ZmUzNWFhOTNiYTMzMzUxNGIy NGY5NjE3MjIiLAogICAgICB9LAogfTsKIAotc3RhdGljIHZvaWQgbmlzdHBfc2luZ2xlX3Rlc3Qo Y29uc3Qgc3RydWN0IG5pc3RwX3Rlc3RfcGFyYW1zICp0ZXN0KQorc3RhdGljIGludCBuaXN0cF9z aW5nbGVfdGVzdChpbnQgaWR4KQogewotICAgIEJOX0NUWCAqY3R4OwotICAgIEJJR05VTSAqcCwg KmEsICpiLCAqeCwgKnksICpuLCAqbSwgKm9yZGVyLCAqeXBsdXNvbmU7Ci0gICAgRUNfR1JPVVAg Kk5JU1RQOwotICAgIEVDX1BPSU5UICpHLCAqUCwgKlEsICpRX0NIRUNLOwotCi0gICAgZnByaW50 ZihzdGRvdXQsICJcbk5JU1QgY3VydmUgUC0lZCAob3B0aW1pc2VkIGltcGxlbWVudGF0aW9uKTpc biIsCi0gICAgICAgICAgICB0ZXN0LT5kZWdyZWUpOwotICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsK LSAgICBwID0gQk5fbmV3KCk7Ci0gICAgYSA9IEJOX25ldygpOwotICAgIGIgPSBCTl9uZXcoKTsK LSAgICB4ID0gQk5fbmV3KCk7Ci0gICAgeSA9IEJOX25ldygpOwotICAgIG0gPSBCTl9uZXcoKTsK LSAgICBuID0gQk5fbmV3KCk7Ci0gICAgb3JkZXIgPSBCTl9uZXcoKTsKLSAgICB5cGx1c29uZSA9 IEJOX25ldygpOwotCi0gICAgTklTVFAgPSBFQ19HUk9VUF9uZXcodGVzdC0+bWV0aCgpKTsKLSAg ICBpZiAoIU5JU1RQKQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUJOX2hleDJibigmcCwgdGVz dC0+cCkpCi0gICAgICAgIEFCT1JUOwotICAgIGlmICgxICE9IEJOX2lzX3ByaW1lX2V4KHAsIEJO X3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSkKLSAgICAgICAgQUJPUlQ7Ci0gICAgaWYgKCFCTl9o ZXgyYm4oJmEsIHRlc3QtPmEpKQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUJOX2hleDJibigm YiwgdGVzdC0+YikpCi0gICAgICAgIEFCT1JUOwotICAgIGlmICghRUNfR1JPVVBfc2V0X2N1cnZl X0dGcChOSVNUUCwgcCwgYSwgYiwgY3R4KSkKLSAgICAgICAgQUJPUlQ7Ci0gICAgRyA9IEVDX1BP SU5UX25ldyhOSVNUUCk7Ci0gICAgUCA9IEVDX1BPSU5UX25ldyhOSVNUUCk7Ci0gICAgUSA9IEVD X1BPSU5UX25ldyhOSVNUUCk7Ci0gICAgUV9DSEVDSyA9IEVDX1BPSU5UX25ldyhOSVNUUCk7Ci0g ICAgaWYgKCFCTl9oZXgyYm4oJngsIHRlc3QtPlF4KSkKLSAgICAgICAgQUJPUlQ7Ci0gICAgaWYg KCFCTl9oZXgyYm4oJnksIHRlc3QtPlF5KSkKLSAgICAgICAgQUJPUlQ7Ci0gICAgaWYgKCFCTl9h ZGQoeXBsdXNvbmUsIHksIEJOX3ZhbHVlX29uZSgpKSkKLSAgICAgICAgQUJPUlQ7CisgICAgY29u c3Qgc3RydWN0IG5pc3RwX3Rlc3RfcGFyYW1zICp0ZXN0ID0gbmlzdHBfdGVzdHNfcGFyYW1zICsg aWR4OworICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqYSA9 IE5VTEwsICpiID0gTlVMTCwgKnggPSBOVUxMLCAqeSA9IE5VTEw7CisgICAgQklHTlVNICpuID0g TlVMTCwgKm0gPSBOVUxMLCAqb3JkZXIgPSBOVUxMLCAqeXBsdXNvbmUgPSBOVUxMOworICAgIEVD X0dST1VQICpOSVNUUCA9IE5VTEw7CisgICAgRUNfUE9JTlQgKkcgPSBOVUxMLCAqUCA9IE5VTEws ICpRID0gTlVMTCwgKlFfQ0hFQ0sgPSBOVUxMOworICAgIGludCByID0gMDsKKworICAgIFRFU1Rf bm90ZSgiTklTVCBjdXJ2ZSBQLSVkIChvcHRpbWlzZWQgaW1wbGVtZW50YXRpb24pOiIsCisgICAg ICAgICAgICAgIHRlc3QtPmRlZ3JlZSk7CisgICAgaWYgKCFURVNUX3B0cihjdHggPSBCTl9DVFhf bmV3KCkpCisgICAgICAgIHx8ICFURVNUX3B0cihwID0gQk5fbmV3KCkpCisgICAgICAgIHx8ICFU RVNUX3B0cihhID0gQk5fbmV3KCkpCisgICAgICAgIHx8ICFURVNUX3B0cihiID0gQk5fbmV3KCkp CisgICAgICAgIHx8ICFURVNUX3B0cih4ID0gQk5fbmV3KCkpCisgICAgICAgIHx8ICFURVNUX3B0 cih5ID0gQk5fbmV3KCkpCisgICAgICAgIHx8ICFURVNUX3B0cihtID0gQk5fbmV3KCkpCisgICAg ICAgIHx8ICFURVNUX3B0cihuID0gQk5fbmV3KCkpCisgICAgICAgIHx8ICFURVNUX3B0cihvcmRl ciA9IEJOX25ldygpKQorICAgICAgICB8fCAhVEVTVF9wdHIoeXBsdXNvbmUgPSBCTl9uZXcoKSkK KworICAgICAgICB8fCAhVEVTVF9wdHIoTklTVFAgPSBFQ19HUk9VUF9uZXcodGVzdC0+bWV0aCgp KSkKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShCTl9oZXgyYm4oJnAsIHRlc3QtPnApKQorICAgICAg ICB8fCAhVEVTVF9pbnRfZXEoMSwgQk5faXNfcHJpbWVfZXgocCwgQk5fcHJpbWVfY2hlY2tzLCBj dHgsIE5VTEwpKQorICAgICAgICB8fCAhVEVTVF90cnVlKEJOX2hleDJibigmYSwgdGVzdC0+YSkp CisgICAgICAgIHx8ICFURVNUX3RydWUoQk5faGV4MmJuKCZiLCB0ZXN0LT5iKSkKKyAgICAgICAg fHwgIVRFU1RfdHJ1ZShFQ19HUk9VUF9zZXRfY3VydmVfR0ZwKE5JU1RQLCBwLCBhLCBiLCBjdHgp KQorICAgICAgICB8fCAhVEVTVF9wdHIoRyA9IEVDX1BPSU5UX25ldyhOSVNUUCkpCisgICAgICAg IHx8ICFURVNUX3B0cihQID0gRUNfUE9JTlRfbmV3KE5JU1RQKSkKKyAgICAgICAgfHwgIVRFU1Rf cHRyKFEgPSBFQ19QT0lOVF9uZXcoTklTVFApKQorICAgICAgICB8fCAhVEVTVF9wdHIoUV9DSEVD SyA9IEVDX1BPSU5UX25ldyhOSVNUUCkpCisgICAgICAgIHx8ICFURVNUX3RydWUoQk5faGV4MmJu KCZ4LCB0ZXN0LT5ReCkpCisgICAgICAgIHx8ICFURVNUX3RydWUoQk5faGV4MmJuKCZ5LCB0ZXN0 LT5ReSkpCisgICAgICAgIHx8ICFURVNUX3RydWUoQk5fYWRkKHlwbHVzb25lLCB5LCBCTl92YWx1 ZV9vbmUoKSkpCiAgICAgLyoKICAgICAgKiBXaGVuICh4LCB5KSBpcyBvbiB0aGUgY3VydmUsICh4 LCB5ICsgMSkgaXMsIGFzIGl0IGhhcHBlbnMsIG5vdCwKICAgICAgKiBhbmQgdGhlcmVmb3JlIHNl dHRpbmcgdGhlIGNvb3JkaW5hdGVzIHNob3VsZCBmYWlsLgogICAgICAqLwotICAgIGlmIChFQ19Q T0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcChOSVNUUCwgUV9DSEVDSywgeCwgeXBsdXNv bmUsIGN0eCkpCi0gICAgICAgIEFCT1JUOwotICAgIGlmICghRUNfUE9JTlRfc2V0X2FmZmluZV9j b29yZGluYXRlc19HRnAoTklTVFAsIFFfQ0hFQ0ssIHgsIHksIGN0eCkpCi0gICAgICAgIEFCT1JU OwotICAgIGlmICghQk5faGV4MmJuKCZ4LCB0ZXN0LT5HeCkpCi0gICAgICAgIEFCT1JUOwotICAg IGlmICghQk5faGV4MmJuKCZ5LCB0ZXN0LT5HeSkpCi0gICAgICAgIEFCT1JUOwotICAgIGlmICgh RUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRnAoTklTVFAsIEcsIHgsIHksIGN0eCkp Ci0gICAgICAgIEFCT1JUOwotICAgIGlmICghQk5faGV4MmJuKCZvcmRlciwgdGVzdC0+b3JkZXIp KQotICAgICAgICBBQk9SVDsKLSAgICBpZiAoIUVDX0dST1VQX3NldF9nZW5lcmF0b3IoTklTVFAs IEcsIG9yZGVyLCBCTl92YWx1ZV9vbmUoKSkpCi0gICAgICAgIEFCT1JUOwotCi0gICAgZnByaW50 ZihzdGRvdXQsICJ2ZXJpZnkgZGVncmVlIC4uLiAiKTsKLSAgICBpZiAoRUNfR1JPVVBfZ2V0X2Rl Z3JlZShOSVNUUCkgIT0gdGVzdC0+ZGVncmVlKQotICAgICAgICBBQk9SVDsKLSAgICBmcHJpbnRm KHN0ZG91dCwgIm9rXG4iKTsKLQotICAgIGZwcmludGYoc3Rkb3V0LCAiTklTVCB0ZXN0IHZlY3Rv cnMgLi4uICIpOwotICAgIGlmICghQk5faGV4MmJuKCZuLCB0ZXN0LT5kKSkKLSAgICAgICAgQUJP UlQ7CisgICAgICAgIHx8ICFURVNUX2ZhbHNlKEVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0 ZXNfR0ZwKE5JU1RQLCBRX0NIRUNLLCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5cGx1c29uZSwgY3R4KSkKKyAgICAgICAgfHwg IVRFU1RfdHJ1ZShFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcChOSVNUUCwgUV9D SEVDSywgeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjdHgpKQorICAgICAgICB8fCAhVEVTVF90cnVlKEJOX2hleDJibigmeCwg dGVzdC0+R3gpKQorICAgICAgICB8fCAhVEVTVF90cnVlKEJOX2hleDJibigmeSwgdGVzdC0+R3kp KQorICAgICAgICB8fCAhVEVTVF90cnVlKEVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNf R0ZwKE5JU1RQLCBHLCB4LCB5LCBjdHgpKQorICAgICAgICB8fCAhVEVTVF90cnVlKEJOX2hleDJi bigmb3JkZXIsIHRlc3QtPm9yZGVyKSkKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShFQ19HUk9VUF9z ZXRfZ2VuZXJhdG9yKE5JU1RQLCBHLCBvcmRlciwgQk5fdmFsdWVfb25lKCkpKQorICAgICAgICB8 fCAhVEVTVF9pbnRfZXEoRUNfR1JPVVBfZ2V0X2RlZ3JlZShOSVNUUCksIHRlc3QtPmRlZ3JlZSkp CisgICAgICAgIGdvdG8gZXJyOworCisgICAgVEVTVF9ub3RlKCJOSVNUIHRlc3QgdmVjdG9ycyAu Li4gIik7CisgICAgaWYgKCFURVNUX3RydWUoQk5faGV4MmJuKCZuLCB0ZXN0LT5kKSkpCisgICAg ICAgIGdvdG8gZXJyOwogICAgIC8qIGZpeGVkIHBvaW50IG11bHRpcGxpY2F0aW9uICovCiAgICAg RUNfUE9JTlRfbXVsKE5JU1RQLCBRLCBuLCBOVUxMLCBOVUxMLCBjdHgpOwotICAgIGlmICgwICE9 IEVDX1BPSU5UX2NtcChOSVNUUCwgUSwgUV9DSEVDSywgY3R4KSkKLSAgICAgICAgQUJPUlQ7Cisg ICAgaWYgKCFURVNUX2ludF9lcSgwLCBFQ19QT0lOVF9jbXAoTklTVFAsIFEsIFFfQ0hFQ0ssIGN0 eCkpKQorICAgICAgICBnb3RvIGVycjsKICAgICAvKiByYW5kb20gcG9pbnQgbXVsdGlwbGljYXRp b24gKi8KICAgICBFQ19QT0lOVF9tdWwoTklTVFAsIFEsIE5VTEwsIEcsIG4sIGN0eCk7Ci0gICAg aWYgKDAgIT0gRUNfUE9JTlRfY21wKE5JU1RQLCBRLCBRX0NIRUNLLCBjdHgpKQotICAgICAgICBB Qk9SVDsKLQotICAgIC8qIHNldCBnZW5lcmF0b3IgdG8gUCA9IDIqRywgd2hlcmUgRyBpcyB0aGUg c3RhbmRhcmQgZ2VuZXJhdG9yICovCi0gICAgaWYgKCFFQ19QT0lOVF9kYmwoTklTVFAsIFAsIEcs IGN0eCkpCi0gICAgICAgIEFCT1JUOwotICAgIGlmICghRUNfR1JPVVBfc2V0X2dlbmVyYXRvcihO SVNUUCwgUCwgb3JkZXIsIEJOX3ZhbHVlX29uZSgpKSkKLSAgICAgICAgQUJPUlQ7Ci0gICAgLyog c2V0IHRoZSBzY2FsYXIgdG8gbT1uLzIsIHdoZXJlIG4gaXMgdGhlIE5JU1QgdGVzdCBzY2FsYXIg Ki8KLSAgICBpZiAoIUJOX3JzaGlmdChtLCBuLCAxKSkKLSAgICAgICAgQUJPUlQ7CisgICAgaWYg KCFURVNUX2ludF9lcSgwLCBFQ19QT0lOVF9jbXAoTklTVFAsIFEsIFFfQ0hFQ0ssIGN0eCkpCisK KyAgICAgICAgLyogc2V0IGdlbmVyYXRvciB0byBQID0gMipHLCB3aGVyZSBHIGlzIHRoZSBzdGFu ZGFyZCBnZW5lcmF0b3IgKi8KKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShFQ19QT0lOVF9kYmwoTklT VFAsIFAsIEcsIGN0eCkpCisgICAgICAgIHx8ICFURVNUX3RydWUoRUNfR1JPVVBfc2V0X2dlbmVy YXRvcihOSVNUUCwgUCwgb3JkZXIsIEJOX3ZhbHVlX29uZSgpKSkKKyAgICAgICAgLyogc2V0IHRo ZSBzY2FsYXIgdG8gbT1uLzIsIHdoZXJlIG4gaXMgdGhlIE5JU1QgdGVzdCBzY2FsYXIgKi8KKyAg ICAgICAgfHwgIVRFU1RfdHJ1ZShCTl9yc2hpZnQobSwgbiwgMSkpKQorICAgICAgICBnb3RvIGVy cjsKIAogICAgIC8qIHRlc3QgdGhlIG5vbi1zdGFuZGFyZCBnZW5lcmF0b3IgKi8KICAgICAvKiBm aXhlZCBwb2ludCBtdWx0aXBsaWNhdGlvbiAqLwogICAgIEVDX1BPSU5UX211bChOSVNUUCwgUSwg bSwgTlVMTCwgTlVMTCwgY3R4KTsKLSAgICBpZiAoMCAhPSBFQ19QT0lOVF9jbXAoTklTVFAsIFEs IFFfQ0hFQ0ssIGN0eCkpCi0gICAgICAgIEFCT1JUOworICAgIGlmICghVEVTVF9pbnRfZXEoMCwg RUNfUE9JTlRfY21wKE5JU1RQLCBRLCBRX0NIRUNLLCBjdHgpKSkKKyAgICAgICAgZ290byBlcnI7 CiAgICAgLyogcmFuZG9tIHBvaW50IG11bHRpcGxpY2F0aW9uICovCiAgICAgRUNfUE9JTlRfbXVs KE5JU1RQLCBRLCBOVUxMLCBQLCBtLCBjdHgpOwotICAgIGlmICgwICE9IEVDX1BPSU5UX2NtcChO SVNUUCwgUSwgUV9DSEVDSywgY3R4KSkKLSAgICAgICAgQUJPUlQ7CisgICAgaWYgKCFURVNUX2lu dF9lcSgwLCBFQ19QT0lOVF9jbXAoTklTVFAsIFEsIFFfQ0hFQ0ssIGN0eCkpCiAKICAgICAvKgog ICAgICAqIFdlIGhhdmUgbm90IHBlcmZvcm1lZCBwcmVjb21wdXRhdGlvbiBzbyBoYXZlX3ByZWNv bXB1dGUgbXVsdCBzaG91bGQgYmUKICAgICAgKiBmYWxzZQogICAgICAqLwotICAgIGlmIChFQ19H Uk9VUF9oYXZlX3ByZWNvbXB1dGVfbXVsdChOSVNUUCkpCi0gICAgICAgIEFCT1JUOworICAgICAg ICB8fCAhVEVTVF9mYWxzZShFQ19HUk9VUF9oYXZlX3ByZWNvbXB1dGVfbXVsdChOSVNUUCkpCiAK ICAgICAvKiBub3cgcmVwZWF0IGFsbCB0ZXN0cyB3aXRoIHByZWNvbXB1dGF0aW9uICovCi0gICAg aWYgKCFFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoTklTVFAsIGN0eCkpCi0gICAgICAgIEFCT1JU OwotICAgIGlmICghRUNfR1JPVVBfaGF2ZV9wcmVjb21wdXRlX211bHQoTklTVFApKQotICAgICAg ICBBQk9SVDsKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShFQ19HUk9VUF9wcmVjb21wdXRlX211bHQo TklTVFAsIGN0eCkpCisgICAgICAgIHx8ICFURVNUX3RydWUoRUNfR1JPVVBfaGF2ZV9wcmVjb21w dXRlX211bHQoTklTVFApKSkKKyAgICAgICAgZ290byBlcnI7CiAKICAgICAvKiBmaXhlZCBwb2lu dCBtdWx0aXBsaWNhdGlvbiAqLwogICAgIEVDX1BPSU5UX211bChOSVNUUCwgUSwgbSwgTlVMTCwg TlVMTCwgY3R4KTsKLSAgICBpZiAoMCAhPSBFQ19QT0lOVF9jbXAoTklTVFAsIFEsIFFfQ0hFQ0ss IGN0eCkpCi0gICAgICAgIEFCT1JUOworICAgIGlmICghVEVTVF9pbnRfZXEoMCwgRUNfUE9JTlRf Y21wKE5JU1RQLCBRLCBRX0NIRUNLLCBjdHgpKSkKKyAgICAgICAgZ290byBlcnI7CiAgICAgLyog cmFuZG9tIHBvaW50IG11bHRpcGxpY2F0aW9uICovCiAgICAgRUNfUE9JTlRfbXVsKE5JU1RQLCBR LCBOVUxMLCBQLCBtLCBjdHgpOwotICAgIGlmICgwICE9IEVDX1BPSU5UX2NtcChOSVNUUCwgUSwg UV9DSEVDSywgY3R4KSkKLSAgICAgICAgQUJPUlQ7CisgICAgaWYgKCFURVNUX2ludF9lcSgwLCBF Q19QT0lOVF9jbXAoTklTVFAsIFEsIFFfQ0hFQ0ssIGN0eCkpCiAKICAgICAvKiByZXNldCBnZW5l cmF0b3IgKi8KLSAgICBpZiAoIUVDX0dST1VQX3NldF9nZW5lcmF0b3IoTklTVFAsIEcsIG9yZGVy LCBCTl92YWx1ZV9vbmUoKSkpCi0gICAgICAgIEFCT1JUOworICAgICAgICB8fCAhVEVTVF90cnVl KEVDX0dST1VQX3NldF9nZW5lcmF0b3IoTklTVFAsIEcsIG9yZGVyLCBCTl92YWx1ZV9vbmUoKSkp KQorICAgICAgICBnb3RvIGVycjsKICAgICAvKiBmaXhlZCBwb2ludCBtdWx0aXBsaWNhdGlvbiAq LwogICAgIEVDX1BPSU5UX211bChOSVNUUCwgUSwgbiwgTlVMTCwgTlVMTCwgY3R4KTsKLSAgICBp ZiAoMCAhPSBFQ19QT0lOVF9jbXAoTklTVFAsIFEsIFFfQ0hFQ0ssIGN0eCkpCi0gICAgICAgIEFC T1JUOworICAgIGlmICghVEVTVF9pbnRfZXEoMCwgRUNfUE9JTlRfY21wKE5JU1RQLCBRLCBRX0NI RUNLLCBjdHgpKSkKKyAgICAgICAgZ290byBlcnI7CiAgICAgLyogcmFuZG9tIHBvaW50IG11bHRp cGxpY2F0aW9uICovCiAgICAgRUNfUE9JTlRfbXVsKE5JU1RQLCBRLCBOVUxMLCBHLCBuLCBjdHgp OwotICAgIGlmICgwICE9IEVDX1BPSU5UX2NtcChOSVNUUCwgUSwgUV9DSEVDSywgY3R4KSkKLSAg ICAgICAgQUJPUlQ7Ci0KLSAgICBmcHJpbnRmKHN0ZG91dCwgIm9rXG4iKTsKLSAgICBncm91cF9v cmRlcl90ZXN0cyhOSVNUUCk7CisgICAgaWYgKCFURVNUX2ludF9lcSgwLCBFQ19QT0lOVF9jbXAo TklTVFAsIFEsIFFfQ0hFQ0ssIGN0eCkpKQorICAgICAgICBnb3RvIGVycjsKKworICAgIC8qIHJl Z3Jlc3Npb24gdGVzdCBmb3IgZmVsZW1fbmVnIGJ1ZyAqLworICAgIGlmICghVEVTVF90cnVlKEJO X3NldF93b3JkKG0sIDMyKSkKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShCTl9zZXRfd29yZChuLCAz MSkpCisgICAgICAgIHx8ICFURVNUX3RydWUoRUNfUE9JTlRfY29weShQLCBHKSkKKyAgICAgICAg fHwgIVRFU1RfdHJ1ZShFQ19QT0lOVF9pbnZlcnQoTklTVFAsIFAsIGN0eCkpCisgICAgICAgIHx8 ICFURVNUX3RydWUoRUNfUE9JTlRfbXVsKE5JU1RQLCBRLCBtLCBQLCBuLCBjdHgpKQorICAgICAg ICB8fCAhVEVTVF9pbnRfZXEoMCwgRUNfUE9JTlRfY21wKE5JU1RQLCBRLCBHLCBjdHgpKSkKKyAg ICAgIGdvdG8gZXJyOworCisgICAgciA9IGdyb3VwX29yZGVyX3Rlc3RzKE5JU1RQKTsKK2VycjoK ICAgICBFQ19HUk9VUF9mcmVlKE5JU1RQKTsKICAgICBFQ19QT0lOVF9mcmVlKEcpOwogICAgIEVD X1BPSU5UX2ZyZWUoUCk7CkBAIC05MTEsNzcgKzcxOSwxMjUgQEAgc3RhdGljIHZvaWQgbmlzdHBf c2luZ2xlX3Rlc3QoY29uc3Qgc3RydWN0IG5pc3RwX3Rlc3RfcGFyYW1zICp0ZXN0KQogICAgIEJO X2ZyZWUob3JkZXIpOwogICAgIEJOX2ZyZWUoeXBsdXNvbmUpOwogICAgIEJOX0NUWF9mcmVlKGN0 eCk7CisgICAgcmV0dXJuIHI7CiB9CisjIGVuZGlmCiAKLXN0YXRpYyB2b2lkIG5pc3RwX3Rlc3Rz KCkKLXsKLSAgICB1bnNpZ25lZCBpOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcDUyMV9u YW1lZFtdID0geworICAgIDB4MDYsIDB4MDUsIDB4MmIsIDB4ODEsIDB4MDQsIDB4MDAsIDB4MjMs Cit9OwogCi0gICAgZm9yIChpID0gMDsgaSA8IE9TU0xfTkVMRU0obmlzdHBfdGVzdHNfcGFyYW1z KTsgaSsrKSB7Ci0gICAgICAgIG5pc3RwX3NpbmdsZV90ZXN0KCZuaXN0cF90ZXN0c19wYXJhbXNb aV0pOwotICAgIH0KLX0KLSMgZW5kaWYKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHA1MjFf ZXhwbGljaXRbXSA9IHsKKyAgICAweDMwLCAweDgyLCAweDAxLCAweGMzLCAweDAyLCAweDAxLCAw eDAxLCAweDMwLCAweDRkLCAweDA2LCAweDA3LCAweDJhLAorICAgIDB4ODYsIDB4NDgsIDB4Y2Us IDB4M2QsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDIsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisg ICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwg MHhmZiwgMHhmZiwgMHhmZiwKKyAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZm LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorICAgIDB4ZmYsIDB4ZmYsIDB4 ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYs CisgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhm ZiwgMHhmZiwgMHhmZiwgMHhmZiwKKyAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAw eGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorICAgIDB4ZmYsIDB4ZmYs IDB4MzAsIDB4ODEsIDB4OWYsIDB4MDQsIDB4NDIsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4 ZmYsCisgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwg MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKyAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZm LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorICAgIDB4ZmYsIDB4 ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYs IDB4ZmYsCisgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhm ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKyAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAw eGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorICAgIDB4ZmMs IDB4MDQsIDB4NDIsIDB4MDAsIDB4NTEsIDB4OTUsIDB4M2UsIDB4YjksIDB4NjEsIDB4OGUsIDB4 MWMsIDB4OWEsCisgICAgMHgxZiwgMHg5MiwgMHg5YSwgMHgyMSwgMHhhMCwgMHhiNiwgMHg4NSwg MHg0MCwgMHhlZSwgMHhhMiwgMHhkYSwgMHg3MiwKKyAgICAweDViLCAweDk5LCAweGIzLCAweDE1 LCAweGYzLCAweGI4LCAweGI0LCAweDg5LCAweDkxLCAweDhlLCAweGYxLCAweDA5LAorICAgIDB4 ZTEsIDB4NTYsIDB4MTksIDB4MzksIDB4NTEsIDB4ZWMsIDB4N2UsIDB4OTMsIDB4N2IsIDB4MTYs IDB4NTIsIDB4YzAsCisgICAgMHhiZCwgMHgzYiwgMHhiMSwgMHhiZiwgMHgwNywgMHgzNSwgMHg3 MywgMHhkZiwgMHg4OCwgMHgzZCwgMHgyYywgMHgzNCwKKyAgICAweGYxLCAweGVmLCAweDQ1LCAw eDFmLCAweGQ0LCAweDZiLCAweDUwLCAweDNmLCAweDAwLCAweDAzLCAweDE1LCAweDAwLAorICAg IDB4ZDAsIDB4OWUsIDB4ODgsIDB4MDAsIDB4MjksIDB4MWMsIDB4YjgsIDB4NTMsIDB4OTYsIDB4 Y2MsIDB4NjcsIDB4MTcsCisgICAgMHgzOSwgMHgzMiwgMHg4NCwgMHhhYSwgMHhhMCwgMHhkYSwg MHg2NCwgMHhiYSwgMHgwNCwgMHg4MSwgMHg4NSwgMHgwNCwKKyAgICAweDAwLCAweGM2LCAweDg1 LCAweDhlLCAweDA2LCAweGI3LCAweDA0LCAweDA0LCAweGU5LCAweGNkLCAweDllLCAweDNlLAor ICAgIDB4Y2IsIDB4NjYsIDB4MjMsIDB4OTUsIDB4YjQsIDB4NDIsIDB4OWMsIDB4NjQsIDB4ODEs IDB4MzksIDB4MDUsIDB4M2YsCisgICAgMHhiNSwgMHgyMSwgMHhmOCwgMHgyOCwgMHhhZiwgMHg2 MCwgMHg2YiwgMHg0ZCwgMHgzZCwgMHhiYSwgMHhhMSwgMHg0YiwKKyAgICAweDVlLCAweDc3LCAw eGVmLCAweGU3LCAweDU5LCAweDI4LCAweGZlLCAweDFkLCAweGMxLCAweDI3LCAweGEyLCAweGZm LAorICAgIDB4YTgsIDB4ZGUsIDB4MzMsIDB4NDgsIDB4YjMsIDB4YzEsIDB4ODUsIDB4NmEsIDB4 NDIsIDB4OWIsIDB4ZjksIDB4N2UsCisgICAgMHg3ZSwgMHgzMSwgMHhjMiwgMHhlNSwgMHhiZCwg MHg2NiwgMHgwMSwgMHgxOCwgMHgzOSwgMHgyOSwgMHg2YSwgMHg3OCwKKyAgICAweDlhLCAweDNi LCAweGMwLCAweDA0LCAweDVjLCAweDhhLCAweDVmLCAweGI0LCAweDJjLCAweDdkLCAweDFiLCAw eGQ5LAorICAgIDB4OTgsIDB4ZjUsIDB4NDQsIDB4NDksIDB4NTcsIDB4OWIsIDB4NDQsIDB4Njgs IDB4MTcsIDB4YWYsIDB4YmQsIDB4MTcsCisgICAgMHgyNywgMHgzZSwgMHg2NiwgMHgyYywgMHg5 NywgMHhlZSwgMHg3MiwgMHg5OSwgMHg1ZSwgMHhmNCwgMHgyNiwgMHg0MCwKKyAgICAweGM1LCAw eDUwLCAweGI5LCAweDAxLCAweDNmLCAweGFkLCAweDA3LCAweDYxLCAweDM1LCAweDNjLCAweDcw LCAweDg2LAorICAgIDB4YTIsIDB4NzIsIDB4YzIsIDB4NDAsIDB4ODgsIDB4YmUsIDB4OTQsIDB4 NzYsIDB4OWYsIDB4ZDEsIDB4NjYsIDB4NTAsCisgICAgMHgwMiwgMHg0MiwgMHgwMSwgMHhmZiwg MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKyAgICAweGZm LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAw eGZmLCAweGZmLAorICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYs IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmEsCisgICAgMHg1MSwgMHg4NiwgMHg4NywgMHg4 MywgMHhiZiwgMHgyZiwgMHg5NiwgMHg2YiwgMHg3ZiwgMHhjYywgMHgwMSwgMHg0OCwKKyAgICAw eGY3LCAweDA5LCAweGE1LCAweGQwLCAweDNiLCAweGI1LCAweGM5LCAweGI4LCAweDg5LCAweDlj LCAweDQ3LCAweGFlLAorICAgIDB4YmIsIDB4NmYsIDB4YjcsIDB4MWUsIDB4OTEsIDB4MzgsIDB4 NjQsIDB4MDksIDB4MDIsIDB4MDEsIDB4MDEsCit9OwogCi1zdGF0aWMgdm9pZCBwYXJhbWV0ZXJf dGVzdCh2b2lkKQorc3RhdGljIGludCBwYXJhbWV0ZXJfdGVzdCh2b2lkKQogewotICAgIEVDX0dS T1VQICpncm91cCwgKmdyb3VwMjsKLSAgICBFQ1BBUkFNRVRFUlMgKmVjcGFyYW1ldGVyczsKKyAg ICBFQ19HUk9VUCAqZ3JvdXAgPSBOVUxMLCAqZ3JvdXAyID0gTlVMTDsKKyAgICBFQ1BBUkFNRVRF UlMgKmVjcGFyYW1ldGVycyA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsK KyAgICBpbnQgciA9IDAsIGxlbjsKKworICAgIGlmICghVEVTVF9wdHIoZ3JvdXAgPSBFQ19HUk9V UF9uZXdfYnlfY3VydmVfbmFtZShOSURfc2VjcDM4NHIxKSkKKyAgICAgICAgfHwgIVRFU1RfcHRy KGVjcGFyYW1ldGVycyA9IEVDX0dST1VQX2dldF9lY3BhcmFtZXRlcnMoZ3JvdXAsIE5VTEwpKQor ICAgICAgICB8fCAhVEVTVF9wdHIoZ3JvdXAyID0gRUNfR1JPVVBfbmV3X2Zyb21fZWNwYXJhbWV0 ZXJzKGVjcGFyYW1ldGVycykpCisgICAgICAgIHx8ICFURVNUX2ludF9lcShFQ19HUk9VUF9jbXAo Z3JvdXAsIGdyb3VwMiwgTlVMTCksIDApKQorICAgICAgICBnb3RvIGVycjsKIAotICAgIGZwcmlu dGYoc3RkZXJyLCAiXG50ZXN0aW5nIGVjcGFyYW1ldGVycyBjb252ZXJzaW9uIC4uLiIpOworICAg IEVDX0dST1VQX2ZyZWUoZ3JvdXApOworICAgIGdyb3VwID0gTlVMTDsKIAotICAgIGdyb3VwID0g RUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWUoTklEX3NlY3AzODRyMSk7Ci0gICAgaWYgKCFncm91 cCkKLSAgICAgICAgQUJPUlQ7CisgICAgLyogVGVzdCB0aGUgbmFtZWQgY3VydmUgZW5jb2Rpbmcs IHdoaWNoIHNob3VsZCBiZSBkZWZhdWx0LiAqLworICAgIGlmICghVEVTVF9wdHIoZ3JvdXAgPSBF Q19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZShOSURfc2VjcDUyMXIxKSkKKyAgICAgICAgfHwgIVRF U1RfdHJ1ZSgobGVuID0gaTJkX0VDUEtQYXJhbWV0ZXJzKGdyb3VwLCAmYnVmKSkgPj0gMCkKKyAg ICAgICAgfHwgIVRFU1RfbWVtX2VxKGJ1ZiwgbGVuLCBwNTIxX25hbWVkLCBzaXplb2YocDUyMV9u YW1lZCkpKQorICAgICAgICBnb3RvIGVycjsKIAotICAgIGVjcGFyYW1ldGVycyA9IEVDX0dST1VQ X2dldF9lY3BhcmFtZXRlcnMoZ3JvdXAsIE5VTEwpOwotICAgIGlmICghZWNwYXJhbWV0ZXJzKQot ICAgICAgICBBQk9SVDsKLSAgICBncm91cDIgPSBFQ19HUk9VUF9uZXdfZnJvbV9lY3BhcmFtZXRl cnMoZWNwYXJhbWV0ZXJzKTsKLSAgICBpZiAoIWdyb3VwMikKLSAgICAgICAgQUJPUlQ7Ci0gICAg aWYgKEVDX0dST1VQX2NtcChncm91cCwgZ3JvdXAyLCBOVUxMKSkKLSAgICAgICAgQUJPUlQ7Cisg ICAgT1BFTlNTTF9mcmVlKGJ1Zik7CisgICAgYnVmID0gTlVMTDsKIAotICAgIGZwcmludGYoc3Rk ZXJyLCAiIG9rXG4iKTsKKyAgICAvKgorICAgICAqIFRlc3QgdGhlIGV4cGxpY2l0IGVuY29kaW5n LiBQLTUyMSByZXF1aXJlcyBjb3JyZWN0bHkgemVyby1wYWRkaW5nIHRoZQorICAgICAqIGN1cnZl IGNvZWZmaWNpZW50cy4KKyAgICAgKi8KKyAgICBFQ19HUk9VUF9zZXRfYXNuMV9mbGFnKGdyb3Vw LCBPUEVOU1NMX0VDX0VYUExJQ0lUX0NVUlZFKTsKKyAgICBpZiAoIVRFU1RfdHJ1ZSgobGVuID0g aTJkX0VDUEtQYXJhbWV0ZXJzKGdyb3VwLCAmYnVmKSkgPj0gMCkKKyAgICAgICAgfHwgIVRFU1Rf bWVtX2VxKGJ1ZiwgbGVuLCBwNTIxX2V4cGxpY2l0LCBzaXplb2YocDUyMV9leHBsaWNpdCkpKQor ICAgICAgICBnb3RvIGVycjsKIAorICAgIHIgPSAxOworZXJyOgogICAgIEVDX0dST1VQX2ZyZWUo Z3JvdXApOwogICAgIEVDX0dST1VQX2ZyZWUoZ3JvdXAyKTsKICAgICBFQ1BBUkFNRVRFUlNfZnJl ZShlY3BhcmFtZXRlcnMpOworICAgIE9QRU5TU0xfZnJlZShidWYpOworICAgIHJldHVybiByOwog fQorI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBjaGFyIHJuZF9zZWVkW10gPQotICAgICJzdHJpbmcg dG8gbWFrZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgdGhpbmsgaXQgaGFzIGVudHJvcHki OwotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoraW50IHNldHVwX3Rlc3RzKHZv aWQpCiB7Ci0gICAgY2hhciAqcDsKLQotICAgIHAgPSBnZXRlbnYoIk9QRU5TU0xfREVCVUdfTUVN T1JZIik7Ci0gICAgaWYgKHAgIT0gTlVMTCAmJiBzdHJjbXAocCwgIm9uIikgPT0gMCkKLSAgICAg ICAgQ1JZUFRPX3NldF9tZW1fZGVidWcoMSk7Ci0gICAgQ1JZUFRPX21lbV9jdHJsKENSWVBUT19N RU1fQ0hFQ0tfT04pOwotCi0gICAgUkFORF9zZWVkKHJuZF9zZWVkLCBzaXplb2Yocm5kX3NlZWQp KTsgLyogb3IgQk5fZ2VuZXJhdGVfcHJpbWUgbWF5IGZhaWwgKi8KKyNpZm5kZWYgT1BFTlNTTF9O T19FQworICAgIGNydl9sZW4gPSBFQ19nZXRfYnVpbHRpbl9jdXJ2ZXMoTlVMTCwgMCk7CisgICAg aWYgKCFURVNUX3B0cihjdXJ2ZXMgPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoKmN1cnZlcykgKiBj cnZfbGVuKSkKKyAgICAgICAgfHwgIVRFU1RfdHJ1ZShFQ19nZXRfYnVpbHRpbl9jdXJ2ZXMoY3Vy dmVzLCBjcnZfbGVuKSkpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgcHJpbWVfZmllbGRfdGVz dHMoKTsKLSAgICBwdXRzKCIiKTsKKyAgICBBRERfVEVTVChwYXJhbWV0ZXJfdGVzdCk7CisgICAg QUREX1RFU1QocHJpbWVfZmllbGRfdGVzdHMpOwogIyBpZm5kZWYgT1BFTlNTTF9OT19FQzJNCi0g ICAgY2hhcjJfZmllbGRfdGVzdHMoKTsKKyAgICBBRERfVEVTVChjaGFyMl9maWVsZF90ZXN0cyk7 CisgICAgQUREX0FMTF9URVNUUyhjaGFyMl9jdXJ2ZV90ZXN0LCBPU1NMX05FTEVNKGNoYXIyX2N1 cnZlX3Rlc3RzKSk7CiAjIGVuZGlmCiAjIGlmbmRlZiBPUEVOU1NMX05PX0VDX05JU1RQXzY0X0dD Q18xMjgKLSAgICBuaXN0cF90ZXN0cygpOworICAgIEFERF9BTExfVEVTVFMobmlzdHBfc2luZ2xl X3Rlc3QsIE9TU0xfTkVMRU0obmlzdHBfdGVzdHNfcGFyYW1zKSk7CiAjIGVuZGlmCi0gICAgLyog dGVzdCB0aGUgaW50ZXJuYWwgY3VydmVzICovCi0gICAgaW50ZXJuYWxfY3VydmVfdGVzdCgpOwot Ci0gICAgcGFyYW1ldGVyX3Rlc3QoKTsKLQotI2lmbmRlZiBPUEVOU1NMX05PX0NSWVBUT19NREVC VUcKLSAgICBpZiAoQ1JZUFRPX21lbV9sZWFrc19mcChzdGRlcnIpIDw9IDApCi0gICAgICAgIHJl dHVybiAxOworICAgIEFERF9BTExfVEVTVFMoaW50ZXJuYWxfY3VydmVfdGVzdCwgY3J2X2xlbik7 CisgICAgQUREX0FMTF9URVNUUyhpbnRlcm5hbF9jdXJ2ZV90ZXN0X21ldGhvZCwgY3J2X2xlbik7 CiAjZW5kaWYKLQotICAgIHJldHVybiAwOworICAgIHJldHVybiAxOwogfQorCit2b2lkIGNsZWFu dXBfdGVzdHModm9pZCkKK3sKKyNpZm5kZWYgT1BFTlNTTF9OT19FQworICAgIE9QRU5TU0xfZnJl ZShjdXJ2ZXMpOwogI2VuZGlmCit9CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjEuMC1hbGdvLWRv Yy5wYXRjaCBiL29wZW5zc2wtMS4xLjAtYWxnby1kb2MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDQ2MGQyYzIuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjEuMC1hbGdvLWRv Yy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wt MS4xLjBkL2RvYy9jcnlwdG8vRVZQX0RpZ2VzdEluaXQucG9kLmFsZ28tZG9jIG9wZW5zc2wtMS4x LjBkL2RvYy9jcnlwdG8vRVZQX0RpZ2VzdEluaXQucG9kCi0tLS0gb3BlbnNzbC0xLjEuMGQvZG9j L2NyeXB0by9FVlBfRGlnZXN0SW5pdC5wb2QuYWxnby1kb2MJMjAxNy0wMS0yNiAxNTo0OToxOC43 ODQ5NDcyMjkgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMS4wZC9kb2MvY3J5cHRvL0VWUF9EaWdlc3RJ bml0LnBvZAkyMDE3LTAxLTI2IDE1OjUyOjQ2LjQ1ODU1NjA2OCArMDEwMAotQEAgLTE1Miw3ICsx NTIsNyBAQCBjb3JyZXNwb25kaW5nIE9CSkVDVCBJREVOVElGSUVSIG9yIE5JRF91Ci0gRVZQX01E X3NpemUoKSwgRVZQX01EX2Jsb2NrX3NpemUoKSwgRVZQX01EX0NUWF9zaXplKCkgYW5kCi0gRVZQ X01EX0NUWF9ibG9ja19zaXplKCkgcmV0dXJuIHRoZSBkaWdlc3Qgb3IgYmxvY2sgc2l6ZSBpbiBi eXRlcy4KLSAKLS1FVlBfbWRfbnVsbCgpLCBFVlBfbWQyKCksIEVWUF9tZDUoKSwgRVZQX3NoYTEo KSwKLStFVlBfbWRfbnVsbCgpLCBFVlBfbWQyKCksIEVWUF9tZDUoKSwgRVZQX3NoYTEoKSwgRVZQ X3NoYTIyNCgpLCBFVlBfc2hhMjU2KCksIEVWUF9zaGEzODQoKSwgRVZQX3NoYTUxMigpLAotIEVW UF9tZGMyKCksIEVWUF9yaXBlbWQxNjAoKSwgRVZQX2JsYWtlMmI1MTIoKSwgYW5kIEVWUF9ibGFr ZTJzMjU2KCkgcmV0dXJuCi0gcG9pbnRlcnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgRVZQX01EIHN0 cnVjdHVyZXMuCi0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4wZC9kb2MvY3J5cHRvL0VWUF9FbmNy eXB0SW5pdC5wb2QuYWxnby1kb2Mgb3BlbnNzbC0xLjEuMGQvZG9jL2NyeXB0by9FVlBfRW5jcnlw dEluaXQucG9kCi0tLS0gb3BlbnNzbC0xLjEuMGQvZG9jL2NyeXB0by9FVlBfRW5jcnlwdEluaXQu cG9kLmFsZ28tZG9jCTIwMTctMDEtMjYgMTQ6MTA6MjQuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzbC0xLjEuMGQvZG9jL2NyeXB0by9FVlBfRW5jcnlwdEluaXQucG9kCTIwMTctMDEtMjYgMTU6 NDk6MTguNzg0OTQ3MjI5ICswMTAwCi1AQCAtMTA4LDYgKzEwOCwzMiBAQCBFVlBfY2hhY2hhMjAs IEVWUF9jaGFjaGEyMF9wb2x5MTMwNSAtIEVWCi0gIGludCBFVlBfQ0lQSEVSX3BhcmFtX3RvX2Fz bjEoRVZQX0NJUEhFUl9DVFggKmMsIEFTTjFfVFlQRSAqdHlwZSk7Ci0gIGludCBFVlBfQ0lQSEVS X2FzbjFfdG9fcGFyYW0oRVZQX0NJUEhFUl9DVFggKmMsIEFTTjFfVFlQRSAqdHlwZSk7Ci0gCi0r IGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlMyh2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhF UiAqRVZQX2Rlc19lZGUzX2VjYih2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19l ZGUzX2NmYjY0KHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZTNfY2ZiMSh2 b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19lZGUzX2NmYjgodm9pZCk7Ci0rIGNv bnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlM19vZmIodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBI RVIgKkVWUF9kZXNfZWRlM19jYmModm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNf MTI4X2VjYih2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY2JjKHZvaWQp OwotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9jZmIxKHZvaWQpOwotKyBjb25zdCBF VlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9jZmI4KHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVSICpF VlBfYWVzXzEyOF9jZmIxMjgodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4 X29mYih2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfZWNiKHZvaWQpOwot KyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9jYmModm9pZCk7Ci0rIGNvbnN0IEVWUF9D SVBIRVIgKkVWUF9hZXNfMTkyX2NmYjEodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9h ZXNfMTkyX2NmYjgodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NmYjEy OCh2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfb2ZiKHZvaWQpOwotKyBj b25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9lY2Iodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBI RVIgKkVWUF9hZXNfMjU2X2NiYyh2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18y NTZfY2ZiMSh2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfY2ZiOCh2b2lk KTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfY2ZiMTI4KHZvaWQpOwotKyBjb25z dCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9vZmIodm9pZCk7Ci0rCi0gPWhlYWQxIERFU0NSSVBU SU9OCi0gCi0gVGhlIEVWUCBjaXBoZXIgcm91dGluZXMgYXJlIGEgaGlnaCBsZXZlbCBpbnRlcmZh Y2UgdG8gY2VydGFpbgoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4xLjAtYmlvLWZkLXByZXNlcnZl LW5sLnBhdGNoIGIvb3BlbnNzbC0xLjEuMC1iaW8tZmQtcHJlc2VydmUtbmwucGF0Y2gKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNTAxMTUuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0x LjEuMC1iaW8tZmQtcHJlc2VydmUtbmwucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCww IEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMS4wYy9jcnlwdG8vYmlvL2Jzc19mZC5jLnByZXNlcnZl LW5sIG9wZW5zc2wtMS4xLjBjL2NyeXB0by9iaW8vYnNzX2ZkLmMKLS0tLSBvcGVuc3NsLTEuMS4w Yy9jcnlwdG8vYmlvL2Jzc19mZC5jLnByZXNlcnZlLW5sCTIwMTYtMTEtMTAgMTU6MDM6NDQuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjEuMGMvY3J5cHRvL2Jpby9ic3NfZmQuYwkyMDE2 LTEyLTIyIDE0OjM2OjE2LjczMDc0MDQyMyArMDEwMAotQEAgLTIwMiw4ICsyMDIsMTAgQEAgc3Rh dGljIGludCBmZF9nZXRzKEJJTyAqYnAsIGNoYXIgKmJ1ZiwgaQotICAgICBjaGFyICpwdHIgPSBi dWY7Ci0gICAgIGNoYXIgKmVuZCA9IGJ1ZiArIHNpemUgLSAxOwotIAotLSAgICB3aGlsZSAoKHB0 ciA8IGVuZCkgJiYgKGZkX3JlYWQoYnAsIHB0ciwgMSkgPiAwKSAmJiAocHRyWzBdICE9ICdcbicp KQotLSAgICAgICAgcHRyKys7Ci0rICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgZmRfcmVhZChicCwg cHRyLCAxKSA+IDApIHsKLSsgICAgICAgIGlmICgqcHRyKysgPT0gJ1xuJykKLSsgICAgICAgICAg IGJyZWFrOwotKyAgICB9Ci0gCi0gICAgIHB0clswXSA9ICdcMCc7Ci0gCi1kaWZmIC11cCBvcGVu c3NsLTEuMS4wYy9kb2MvY3J5cHRvL0JJT19yZWFkLnBvZC5wcmVzZXJ2ZS1ubCBvcGVuc3NsLTEu MS4wYy9kb2MvY3J5cHRvL0JJT19yZWFkLnBvZAotLS0tIG9wZW5zc2wtMS4xLjBjL2RvYy9jcnlw dG8vQklPX3JlYWQucG9kLnByZXNlcnZlLW5sCTIwMTYtMTEtMTAgMTU6MDM6NDUuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjEuMGMvZG9jL2NyeXB0by9CSU9fcmVhZC5wb2QJMjAxNi0x Mi0yMiAxNDozNzoyMi43MzEyNDUxOTcgKzAxMDAKLUBAIC0yMyw3ICsyMyw4IEBAIGluIEI8YnVm Pi4gVXN1YWxseSB0aGlzIG9wZXJhdGlvbiB3aWxsIGEKLSBmcm9tIHRoZSBCSU8gb2YgbWF4aW11 bSBsZW5ndGggQjxsZW4tMT4uIFRoZXJlIGFyZSBleGNlcHRpb25zIHRvIHRoaXMsCi0gaG93ZXZl cjsgZm9yIGV4YW1wbGUsIEJJT19nZXRzKCkgb24gYSBkaWdlc3QgQklPIHdpbGwgY2FsY3VsYXRl IGFuZAotIHJldHVybiB0aGUgZGlnZXN0IGFuZCBvdGhlciBCSU9zIG1heSBub3Qgc3VwcG9ydCBC SU9fZ2V0cygpIGF0IGFsbC4KLS1UaGUgcmV0dXJuZWQgc3RyaW5nIGlzIGFsd2F5cyBOVUwtdGVy bWluYXRlZC4KLStUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZCBh bmQgdGhlICdcbicgaXMgcHJlc2VydmVkCi0raWYgcHJlc2VudCBpbiB0aGUgaW5wdXQgZGF0YS4K LSAKLSBCSU9fd3JpdGUoKSBhdHRlbXB0cyB0byB3cml0ZSBCPGxlbj4gYnl0ZXMgZnJvbSBCPGJ1 Zj4gdG8gQklPIEI8Yj4uCi0gCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjEuMC1idWlsZC5wYXRj aCBiL29wZW5zc2wtMS4xLjAtYnVpbGQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDc1NjU2NDIuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjEuMC1idWlsZC5wYXRjaAorKysg L2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMS4wZi9Db25m aWd1cmF0aW9ucy91bml4LU1ha2VmaWxlLnRtcGwuYnVpbGQgb3BlbnNzbC0xLjEuMGYvQ29uZmln dXJhdGlvbnMvdW5peC1NYWtlZmlsZS50bXBsCi0tLS0gb3BlbnNzbC0xLjEuMGYvQ29uZmlndXJh dGlvbnMvdW5peC1NYWtlZmlsZS50bXBsLmJ1aWxkCTIwMTctMDYtMDIgMTM6NTE6MzkuNjIxMjg5 NTA0ICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGYvQ29uZmlndXJhdGlvbnMvdW5peC1NYWtlZmls ZS50bXBsCTIwMTctMDYtMDIgMTM6NTQ6NDUuMjk4NjU0ODEyICswMjAwCi1AQCAtNTUzLDcgKzU1 Myw3IEBAIHVuaW5zdGFsbF9ydW50aW1lOgotIGluc3RhbGxfbWFuX2RvY3M6Ci0gCUBbIC1uICIk KElOU1RBTExUT1ApIiBdIHx8IChlY2hvIElOU1RBTExUT1Agc2hvdWxkIG5vdCBiZSBlbXB0eTsg ZXhpdCAxKQotIAlAZWNobyAiKioqIEluc3RhbGxpbmcgbWFucGFnZXMiCi0tCSQoUEVSTCkgJChT UkNESVIpL3V0aWwvcHJvY2Vzc19kb2NzLnBsIFwKLSsJVFo9VVRDICQoUEVSTCkgJChTUkNESVIp L3V0aWwvcHJvY2Vzc19kb2NzLnBsIFwKLSAJCS0tZGVzdGRpcj0kKERFU1RESVIpJChNQU5ESVIp IC0tdHlwZT1tYW4gLS1zdWZmaXg9JChNQU5TVUZGSVgpCi0gCi0gdW5pbnN0YWxsX21hbl9kb2Nz OgotQEAgLTU2NSw3ICs1NjUsNyBAQCB1bmluc3RhbGxfbWFuX2RvY3M6Ci0gaW5zdGFsbF9odG1s X2RvY3M6Ci0gCUBbIC1uICIkKElOU1RBTExUT1ApIiBdIHx8IChlY2hvIElOU1RBTExUT1Agc2hv dWxkIG5vdCBiZSBlbXB0eTsgZXhpdCAxKQotIAlAZWNobyAiKioqIEluc3RhbGxpbmcgSFRNTCBt YW5wYWdlcyIKLS0JJChQRVJMKSAkKFNSQ0RJUikvdXRpbC9wcm9jZXNzX2RvY3MucGwgXAotKwlU Wj1VVEMgJChQRVJMKSAkKFNSQ0RJUikvdXRpbC9wcm9jZXNzX2RvY3MucGwgXAotIAkJLS1kZXN0 ZGlyPSQoREVTVERJUikkKEhUTUxESVIpIC0tdHlwZT1odG1sCi0gCi0gdW5pbnN0YWxsX2h0bWxf ZG9jczoKLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBmL0NvbmZpZ3VyYXRpb25zLzEwLW1haW4uY29u Zi5idWlsZCBvcGVuc3NsLTEuMS4wZi9Db25maWd1cmF0aW9ucy8xMC1tYWluLmNvbmYKLS0tLSBv cGVuc3NsLTEuMS4wZi9Db25maWd1cmF0aW9ucy8xMC1tYWluLmNvbmYuYnVpbGQJMjAxNy0wNS0y NSAxNDo0NjoxNy4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4wZi9Db25maWd1cmF0 aW9ucy8xMC1tYWluLmNvbmYJMjAxNy0wNi0wMiAxMzo1MTozOS42MjIyODk1MjggKzAyMDAKLUBA IC02NjIsNiArNjYyLDcgQEAgc3ViIHZtc19pbmZvIHsKLSAgICAgICAgIGNmbGFncyAgICAgICAg ICAgPT4gYWRkKCItbTY0IC1ETF9FTkRJQU4iKSwKLSAgICAgICAgIHBlcmxhc21fc2NoZW1lICAg PT4gImxpbnV4NjRsZSIsCi0gICAgICAgICBzaGFyZWRfbGRmbGFnICAgID0+IGFkZCgiLW02NCIp LAotKyAgICAgICAgbXVsdGlsaWIgICAgICAgICA9PiAiNjQiLAotICAgICB9LAotIAotICAgICAi bGludXgtYXJtdjQiID0+IHsKLUBAIC03MDIsNiArNzAzLDcgQEAgc3ViIHZtc19pbmZvIHsKLSAg ICAgImxpbnV4LWFhcmNoNjQiID0+IHsKLSAgICAgICAgIGluaGVyaXRfZnJvbSAgICAgPT4gWyAi bGludXgtZ2VuZXJpYzY0IiwgYXNtKCJhYXJjaDY0X2FzbSIpIF0sCi0gICAgICAgICBwZXJsYXNt X3NjaGVtZSAgID0+ICJsaW51eDY0IiwKLSsgICAgICAgIG11bHRpbGliICAgICAgICAgPT4gIjY0 IiwKLSAgICAgfSwKLSAgICAgImxpbnV4LWFybTY0aWxwMzIiID0+IHsgICMgaHR0cHM6Ly93aWtp LmxpbmFyby5vcmcvUGxhdGZvcm0vYXJtNjQtaWxwMzIKLSAgICAgICAgIGluaGVyaXRfZnJvbSAg ICAgPT4gWyAibGludXgtZ2VuZXJpYzMyIiwgYXNtKCJhYXJjaDY0X2FzbSIpIF0sCi1kaWZmIC11 cCBvcGVuc3NsLTEuMS4waC9lbmdpbmVzL2FmYWxnL2VfYWZhbGcuYy5idWlsZCBvcGVuc3NsLTEu MS4waC9lbmdpbmVzL2FmYWxnL2VfYWZhbGcuYwotLS0tIG9wZW5zc2wtMS4xLjBoL2VuZ2luZXMv YWZhbGcvZV9hZmFsZy5jLmJ1aWxkCTIwMTgtMDMtMjcgMTU6NTA6NDAuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjEuMGgvZW5naW5lcy9hZmFsZy9lX2FmYWxnLmMJMjAxOC0wNi0xOSAx Njo1NjoyMC4xNTA5NTA1MjkgKzAyMDAKLUBAIC0zNiwxNCArMzYsMjUgQEAgdm9pZCBlbmdpbmVf bG9hZF9hZmFsZ19pbnQodm9pZCkKLSB9Ci0gI2Vsc2UKLSAKLS0jIGluY2x1ZGUgPGxpbnV4L2lm X2FsZy5oPgotICMgaW5jbHVkZSA8ZmNudGwuaD4KLSAjIGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+ Ci0gCi0tIyBpbmNsdWRlIDxsaW51eC9haW9fYWJpLmg+Ci0gIyBpbmNsdWRlIDxzeXMvc3lzY2Fs bC5oPgotICMgaW5jbHVkZSA8ZXJybm8uaD4KLSAKLSsjIGRlZmluZSB0aW1lc3BlYyBsaW51eF90 aW1lc3BlYwotKyMgZGVmaW5lIHRpbWV2YWwgbGludXhfdGltZXZhbAotKyMgZGVmaW5lIGl0aW1l cnNwZWMgbGludXhfaXRpbWVyc3BlYwotKyMgZGVmaW5lIHNpZ3NldF90IGxpbnV4X3NpZ3NldF90 eXBlCi0rIyBpbmNsdWRlIDxsaW51eC9pZl9hbGcuaD4KLSsjIGluY2x1ZGUgPGxpbnV4L2Fpb19h YmkuaD4KLSsKLSsjIGlmbmRlZiBfTElOVVhfVElNRV9ICi0rIyB1bmRlZiB0aW1lc3BlYwotKyMg dW5kZWYgdGltZXZhbAotKyMgdW5kZWYgaXRpbWVyc3BlYwotKyMgdW5kZWYgc2lnc2V0X3QKLSsj IGVuZGlmCi0gIyBpbmNsdWRlICJlX2FmYWxnLmgiCi0gCi0gIyBkZWZpbmUgQUZBTEdfTElCX05B TUUgIkFGQUxHIgotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGcvdGVzdC9ldnB0ZXN0cy50eHQuYnVp bGQgb3BlbnNzbC0xLjEuMGcvdGVzdC9ldnB0ZXN0cy50eHQKLS0tLSBvcGVuc3NsLTEuMS4wZy90 ZXN0L2V2cHRlc3RzLnR4dC5idWlsZAkyMDE3LTExLTAyIDE1OjI5OjA1LjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4xLjBnL3Rlc3QvZXZwdGVzdHMudHh0CTIwMTctMTEtMDMgMTY6Mzc6 MDEuMjUzNjcxNDk0ICswMTAwCi1AQCAtMzcwNywxNCArMzcwNyw2IEBAIE1Db3dCUVlESzJWdUF5 RUEzcDdiZlh0OXdiVFRXMkhDN09RMU56K0QKLSAKLSBQcml2UHViS2V5UGFpciA9IEJvYi0yNTUx OTpCb2ItMjU1MTktUFVCTElDCi0gCi0tRGVyaXZlPUFsaWNlLTI1NTE5Ci0tUGVlcktleT1Cb2It MjU1MTktUFVCTElDCi0tU2hhcmVkU2VjcmV0PTRBNUQ5RDVCQTRDRTJERTE3MjhFM0JGNDgwMzUw RjI1RTA3RTIxQzk0N0QxOUUzMzc2RjA5QjNDMUUxNjE3NDIKLS0KLS1EZXJpdmU9Qm9iLTI1NTE5 Ci0tUGVlcktleT1BbGljZS0yNTUxOS1QVUJMSUMKLS1TaGFyZWRTZWNyZXQ9NEE1RDlENUJBNENF MkRFMTcyOEUzQkY0ODAzNTBGMjVFMDdFMjFDOTQ3RDE5RTMzNzZGMDlCM0MxRTE2MTc0MgotLQot ICMgSWxsZWdhbCBzaWduL3ZlcmlmeSBvcGVyYXRpb25zIHdpdGggWDI1NTE5IGtleQotIAotIFNp Z249QWxpY2UtMjU1MTkKLUBAIC0zNzI3LDYgKzM3MTksMTQgQEAgUmVzdWx0ID0gS0VZT1BfSU5J VF9FUlJPUgotIEZ1bmN0aW9uID0gRVZQX1BLRVlfdmVyaWZ5X2luaXQKLSBSZWFzb24gPSBvcGVy YXRpb24gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBrZXl0eXBlCi0gCi0rRGVyaXZlPUFsaWNlLTI1 NTE5Ci0rUGVlcktleT1Cb2ItMjU1MTktUFVCTElDCi0rU2hhcmVkU2VjcmV0PTRBNUQ5RDVCQTRD RTJERTE3MjhFM0JGNDgwMzUwRjI1RTA3RTIxQzk0N0QxOUUzMzc2RjA5QjNDMUUxNjE3NDIKLSsK LStEZXJpdmU9Qm9iLTI1NTE5Ci0rUGVlcktleT1BbGljZS0yNTUxOS1QVUJMSUMKLStTaGFyZWRT ZWNyZXQ9NEE1RDlENUJBNENFMkRFMTcyOEUzQkY0ODAzNTBGMjVFMDdFMjFDOTQ3RDE5RTMzNzZG MDlCM0MxRTE2MTc0MgotKwotICMjIEVDREggVGVzdHM6IHRlc3Qgd2l0aCByYW5kb21seSBnZW5l cmF0ZWQga2V5cyBmb3IgYWxsIHRoZSBsaXN0ZWQgY3VydmVzCi0gCi0gCgpkaWZmIC0tZ2l0IGEv b3BlbnNzbC0xLjEuMC1jYy1yZXFzLnBhdGNoIGIvb3BlbnNzbC0xLjEuMC1jYy1yZXFzLnBhdGNo CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWUwZWRkLi4wMDAwMDAwCi0tLSBhL29w ZW5zc2wtMS4xLjAtY2MtcmVxcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAK LWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9yc2EvcnNhX2dlbi5jLmNjLXJlcXMgb3Bl bnNzbC0xLjEuMGgvY3J5cHRvL3JzYS9yc2FfZ2VuLmMKLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlw dG8vcnNhL3JzYV9nZW4uYy5jYy1yZXFzCTIwMTgtMDMtMjcgMTU6NTA6MzkuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL3JzYS9yc2FfZ2VuLmMJMjAxOC0wMy0yOSAx NDozNzo1My40MDUwNDg1NjIgKzAyMDAKLUBAIC04Niw2ICs4NiwxMiBAQCBzdGF0aWMgaW50IHJz YV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwKLSAgICAgaWYgKCFyc2EtPmlxbXAgJiYgKChyc2Et PmlxbXAgPSBCTl9zZWN1cmVfbmV3KCkpID09IE5VTEwpKQotICAgICAgICAgZ290byBlcnI7Ci0g Ci0rICAgIC8qIHByZXBhcmUgbWluaW11bSBwIGFuZCBxIGRpZmZlcmVuY2UgKi8KLSsgICAgaWYg KCFCTl9vbmUocjMpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmIChiaXRzcCA+IDEwMCAm JiAhQk5fbHNoaWZ0KHIzLCByMywgYml0c3AgLSAxMDApKQotKyAgICAgICAgZ290byBlcnI7Ci0r Ci0gICAgIGlmIChCTl9jb3B5KHJzYS0+ZSwgZV92YWx1ZSkgPT0gTlVMTCkKLSAgICAgICAgIGdv dG8gZXJyOwotIAotQEAgLTExOCw3ICsxMjQsOSBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tl eWdlbihSU0EgKnJzYSwKLSAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICBpZiAoIUJOX2dlbmVy YXRlX3ByaW1lX2V4KHJzYS0+cSwgYml0c3EsIDAsIE5VTEwsIE5VTEwsIGNiKSkKLSAgICAgICAg ICAgICAgICAgZ290byBlcnI7Ci0tICAgICAgICB9IHdoaWxlIChCTl9jbXAocnNhLT5wLCByc2Et PnEpID09IDApOwotKyAgICAgICAgICAgIGlmICghQk5fc3ViKHIyLCByc2EtPnEsIHJzYS0+cCkp Ci0rICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgfSB3aGlsZSAoQk5fdWNtcChy MiwgcjMpIDw9IDApOwotICAgICAgICAgaWYgKCFCTl9zdWIocjIsIHJzYS0+cSwgQk5fdmFsdWVf b25lKCkpKQotICAgICAgICAgICAgIGdvdG8gZXJyOwotICAgICAgICAgRVJSX3NldF9tYXJrKCk7 CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjEuMC1jaGlsLWZpeGVzLnBhdGNoIGIvb3BlbnNzbC0x LjEuMC1jaGlsLWZpeGVzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjNk MDVmLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4xLjAtY2hpbC1maXhlcy5wYXRjaAorKysgL2Rl di9udWxsCkBAIC0xLDE1ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjAtcHJlNi9lbmdp bmVzL2VfY2hpbC5jLmNoaWwgb3BlbnNzbC0xLjEuMC1wcmU2L2VuZ2luZXMvZV9jaGlsLmMKLS0t LSBvcGVuc3NsLTEuMS4wLXByZTYvZW5naW5lcy9lX2NoaWwuYy5jaGlsCTIwMTYtMDgtMDQgMTY6 MDA6NDcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMC1wcmU2L2VuZ2luZXMvZV9j aGlsLmMJMjAxNi0wOC0wNSAxNjo1MDoxMy44NjA1ODg3NzUgKzAyMDAKLUBAIC0xMTk1LDYgKzEx OTUsMTEgQEAgc3RhdGljIGludCBod2NyaGtfaW5zZXJ0X2NhcmQoY29uc3QgY2hhcgotICAgICBV SSAqdWk7Ci0gICAgIHZvaWQgKmNhbGxiYWNrX2RhdGEgPSBOVUxMOwotICAgICBVSV9NRVRIT0Qg KnVpX21ldGhvZCA9IE5VTEw7Ci0rICAgIC8qIERlc3BpdGUgd2hhdCB0aGUgZG9jdW1lbnRhdGlv biBzYXlzIHByb21wdF9pbmZvIGNhbiBiZQotKyAgICAgKiBhbiBlbXB0eSBzdHJpbmcuCi0rICAg ICAqLwotKyAgICBpZiAocHJvbXB0X2luZm8gJiYgISpwcm9tcHRfaW5mbykKLSsgICAgICAgIHBy b21wdF9pbmZvID0gTlVMTDsKLSAKLSAgICAgaWYgKGNhY3R4KSB7Ci0gICAgICAgICBpZiAoY2Fj dHgtPnVpX21ldGhvZCkKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMS4wLWRpc2FibGUtc3NsMy5w YXRjaCBiL29wZW5zc2wtMS4xLjAtZGlzYWJsZS1zc2wzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCA4ZGQ2YWEyLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4xLjAtZGlzYWJs ZS1zc2wzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotZGlmZiAtdXAgb3Bl bnNzbC0xLjEuMGgvYXBwcy9zX2NsaWVudC5jLmRpc2FibGUtc3NsMyBvcGVuc3NsLTEuMS4waC9h cHBzL3NfY2xpZW50LmMKLS0tLSBvcGVuc3NsLTEuMS4waC9hcHBzL3NfY2xpZW50LmMuZGlzYWJs ZS1zc2wzCTIwMTgtMDMtMjkgMTQ6Mzg6MzkuNjEyMTMzNzY1ICswMjAwCi0rKysgb3BlbnNzbC0x LjEuMGgvYXBwcy9zX2NsaWVudC5jCTIwMTgtMDMtMjkgMTQ6NDE6NTEuMzA5NjM1OTA0ICswMjAw Ci1AQCAtMTQ4OSw2ICsxNDg5LDkgQEAgaW50IHNfY2xpZW50X21haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQotICAgICBpZiAoIWNvbmZpZ19jdHgoY2N0eCwgc3NsX2FyZ3MsIGN0eCkpCi0gICAg ICAgICBnb3RvIGVuZDsKLSAKLSsgICAgaWYgKG1pbl92ZXJzaW9uID09IFNTTDNfVkVSU0lPTiAm JiBtYXhfdmVyc2lvbiA9PSBTU0wzX1ZFUlNJT04pCi0rICAgICAgICBTU0xfQ1RYX2NsZWFyX29w dGlvbnMoY3R4LCBTU0xfT1BfTk9fU1NMdjMpOwotKwotICAgICBpZiAoc3NsX2NvbmZpZykgewot ICAgICAgICAgaWYgKFNTTF9DVFhfY29uZmlnKGN0eCwgc3NsX2NvbmZpZykgPT0gMCkgewotICAg ICAgICAgICAgIEJJT19wcmludGYoYmlvX2VyciwgIkVycm9yIHVzaW5nIGNvbmZpZ3VyYXRpb24g XCIlc1wiXG4iLAotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvYXBwcy9zX3NlcnZlci5jLmRpc2Fi bGUtc3NsMyBvcGVuc3NsLTEuMS4waC9hcHBzL3Nfc2VydmVyLmMKLS0tLSBvcGVuc3NsLTEuMS4w aC9hcHBzL3Nfc2VydmVyLmMuZGlzYWJsZS1zc2wzCTIwMTgtMDMtMjkgMTQ6Mzg6MzkuNjEzMTMz Nzg4ICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvYXBwcy9zX3NlcnZlci5jCTIwMTgtMDMtMjkg MTQ6NDI6MjcuMzEzNDgxNDc3ICswMjAwCi1AQCAtMTYxOSw2ICsxNjE5LDkgQEAgaW50IHNfc2Vy dmVyX21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXQotICAgICBpZiAoIWNvbmZpZ19jdHgoY2N0 eCwgc3NsX2FyZ3MsIGN0eCkpCi0gICAgICAgICBnb3RvIGVuZDsKLSAKLSsgICAgaWYgKG1pbl92 ZXJzaW9uID09IFNTTDNfVkVSU0lPTiAmJiBtYXhfdmVyc2lvbiA9PSBTU0wzX1ZFUlNJT04pCi0r ICAgICAgICBTU0xfQ1RYX2NsZWFyX29wdGlvbnMoY3R4LCBTU0xfT1BfTk9fU1NMdjMpOwotKwot ICAgICBpZiAoc3NsX2NvbmZpZykgewotICAgICAgICAgaWYgKFNTTF9DVFhfY29uZmlnKGN0eCwg c3NsX2NvbmZpZykgPT0gMCkgewotICAgICAgICAgICAgIEJJT19wcmludGYoYmlvX2VyciwgIkVy cm9yIHVzaW5nIGNvbmZpZ3VyYXRpb24gXCIlc1wiXG4iLAotZGlmZiAtdXAgb3BlbnNzbC0xLjEu MGgvc3NsL3NzbF9saWIuYy5kaXNhYmxlLXNzbDMgb3BlbnNzbC0xLjEuMGgvc3NsL3NzbF9saWIu YwotLS0tIG9wZW5zc2wtMS4xLjBoL3NzbC9zc2xfbGliLmMuZGlzYWJsZS1zc2wzCTIwMTgtMDMt MjcgMTU6NTA6NDAuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvc3NsL3NzbF9s aWIuYwkyMDE4LTAzLTI5IDE0OjM4OjM5LjYxNDEzMzgxMSArMDIwMAotQEAgLTI2NTMsNiArMjY1 MywxMyBAQCBTU0xfQ1RYICpTU0xfQ1RYX25ldyhjb25zdCBTU0xfTUVUSE9EICptCi0gICAgICAq IG9yIGJ5IHVzaW5nIHRoZSBTU0xfQ09ORiBsaWJyYXJ5LgotICAgICAgKi8KLSAgICAgcmV0LT5v cHRpb25zIHw9IFNTTF9PUF9OT19DT01QUkVTU0lPTjsKLSsgICAgLyoKLSsgICAgICogRGlzYWJs ZSBTU0x2MyBieSBkZWZhdWx0LiAgQXBwbGljYXRpb25zIGNhbgotKyAgICAgKiByZS1lbmFibGUg aXQgYnkgY29uZmlndXJpbmcKLSsgICAgICogU1NMX0NUWF9jbGVhcl9vcHRpb25zKGN0eCwgU1NM X09QX05PX1NTTHYzKTsKLSsgICAgICogb3IgYnkgdXNpbmcgdGhlIFNTTF9DT05GIGxpYnJhcnku Ci0rICAgICAqLwotKyAgICByZXQtPm9wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYzOwotIAotICAg ICByZXQtPnRsc2V4dF9zdGF0dXNfdHlwZSA9IC0xOwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjEu MGgvdGVzdC9zc2xfdGVzdC5jLmRpc2FibGUtc3NsMyBvcGVuc3NsLTEuMS4waC90ZXN0L3NzbF90 ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMS4waC90ZXN0L3NzbF90ZXN0LmMuZGlzYWJsZS1zc2wzCTIw MTgtMDMtMjkgMTQ6Mzg6MzkuNjE1MTMzODM1ICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvdGVz dC9zc2xfdGVzdC5jCTIwMTgtMDMtMjkgMTQ6NDM6MzcuODkzMTM5MDg2ICswMjAwCi1AQCAtMjc3 LDYgKzI3Nyw3IEBAIHN0YXRpYyBpbnQgZXhlY3V0ZV90ZXN0KFNTTF9URVNUX0ZJWFRVUkUKLSAg ICAgICAgICAgICBTU0xfVEVTVF9TRVJWRVJOQU1FX0NCX05PTkUpIHsKLSAgICAgICAgICAgICBz ZXJ2ZXIyX2N0eCA9IFNTTF9DVFhfbmV3KFRMU19zZXJ2ZXJfbWV0aG9kKCkpOwotICAgICAgICAg ICAgIFRFU1RfY2hlY2soc2VydmVyMl9jdHggIT0gTlVMTCk7Ci0rICAgICAgICAgICAgU1NMX0NU WF9jbGVhcl9vcHRpb25zKHNlcnZlcjJfY3R4LCBTU0xfT1BfTk9fU1NMdjMpOwotICAgICAgICAg fQotICAgICAgICAgY2xpZW50X2N0eCA9IFNTTF9DVFhfbmV3KFRMU19jbGllbnRfbWV0aG9kKCkp OwotICAgICAgICAgVEVTVF9jaGVjayhTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbihjbGll bnRfY3R4LCBUTFNfTUFYX1ZFUlNJT04pKTsKLUBAIC0yOTAsMTEgKzI5MSwxNSBAQCBzdGF0aWMg aW50IGV4ZWN1dGVfdGVzdChTU0xfVEVTVF9GSVhUVVJFCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTFNfTUFYX1ZFUlNJT04pKTsKLSAgICAg ICAgICAgICBURVNUX2NoZWNrKHJlc3VtZV9zZXJ2ZXJfY3R4ICE9IE5VTEwpOwotICAgICAgICAg ICAgIFRFU1RfY2hlY2socmVzdW1lX2NsaWVudF9jdHggIT0gTlVMTCk7Ci0rICAgICAgICAgICAg U1NMX0NUWF9jbGVhcl9vcHRpb25zKHJlc3VtZV9zZXJ2ZXJfY3R4LCBTU0xfT1BfTk9fU1NMdjMp OwotKyAgICAgICAgICAgIFNTTF9DVFhfY2xlYXJfb3B0aW9ucyhyZXN1bWVfY2xpZW50X2N0eCwg U1NMX09QX05PX1NTTHYzKTsKLSAgICAgICAgIH0KLSAgICAgfQotIAotICAgICBURVNUX2NoZWNr KHNlcnZlcl9jdHggIT0gTlVMTCk7Ci0gICAgIFRFU1RfY2hlY2soY2xpZW50X2N0eCAhPSBOVUxM KTsKLSsgICAgU1NMX0NUWF9jbGVhcl9vcHRpb25zKHNlcnZlcl9jdHgsIFNTTF9PUF9OT19TU0x2 Myk7Ci0rICAgIFNTTF9DVFhfY2xlYXJfb3B0aW9ucyhjbGllbnRfY3R4LCBTU0xfT1BfTk9fU1NM djMpOwotIAotICAgICBURVNUX2NoZWNrKENPTkZfbW9kdWxlc19sb2FkKGNvbmYsIGZpeHR1cmUu dGVzdF9hcHAsIDApID4gMCk7Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC90ZXN0L3NzbHRl c3Rfb2xkLmMuZGlzYWJsZS1zc2wzIG9wZW5zc2wtMS4xLjBoL3Rlc3Qvc3NsdGVzdF9vbGQuYwot LS0tIG9wZW5zc2wtMS4xLjBoL3Rlc3Qvc3NsdGVzdF9vbGQuYy5kaXNhYmxlLXNzbDMJMjAxOC0w My0yNyAxNTo1MDo0MS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC90ZXN0L3Nz bHRlc3Rfb2xkLmMJMjAxOC0wMy0yOSAxNDozODozOS42MTUxMzM4MzUgKzAyMDAKLUBAIC0xNDYw LDYgKzE0NjAsMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAgICAgICAg IEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0gICAgICAgICBnb3RvIGVuZDsKLSAgICAgfQot KwotKyAgICBTU0xfQ1RYX2NsZWFyX29wdGlvbnMoY19jdHgsIFNTTF9PUF9OT19TU0x2Myk7Ci0r ICAgIFNTTF9DVFhfY2xlYXJfb3B0aW9ucyhzX2N0eCwgU1NMX09QX05PX1NTTHYzKTsKLSsgICAg U1NMX0NUWF9jbGVhcl9vcHRpb25zKHNfY3R4MiwgU1NMX09QX05PX1NTTHYzKTsKLSsKLSAgICAg LyoKLSAgICAgICogU2luY2Ugd2Ugd2lsbCB1c2UgbG93IHNlY3VyaXR5IGNpcGhlcnN1aXRlcyBh bmQga2V5cyBmb3IgdGVzdGluZyBzZXQKLSAgICAgICogc2VjdXJpdHkgbGV2ZWwgdG8gemVybyBi eSBkZWZhdWx0LiBUZXN0cyBjYW4gb3ZlcnJpZGUgdGhpcyBieSBhZGRpbmcKCmRpZmYgLS1naXQg YS9vcGVuc3NsLTEuMS4wLWVjLWN1cnZlcy5wYXRjaCBiL29wZW5zc2wtMS4xLjAtZWMtY3VydmVz LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmJkMDIyLi4wMDAwMDAwCi0t LSBhL29wZW5zc2wtMS4xLjAtZWMtY3VydmVzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsODAg KzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGUvYXBwcy9zcGVlZC5jLmN1cnZlcyBvcGVu c3NsLTEuMS4wZS9hcHBzL3NwZWVkLmMKLS0tLSBvcGVuc3NsLTEuMS4wZS9hcHBzL3NwZWVkLmMu Y3VydmVzCTIwMTctMDItMTYgMTI6NTg6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjEuMGUvYXBwcy9zcGVlZC5jCTIwMTctMDItMTYgMTU6NDY6MjIuMjcxNTA0MzU0ICswMTAwCi1A QCAtNTM2LDQyICs1MzYsMTggQEAgc3RhdGljIE9QVF9QQUlSIHJzYV9jaG9pY2VzW10gPSB7Ci0g I2RlZmluZSBSX0VDX1gyNTUxOSAgMTYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRUMKLSBzdGF0aWMg T1BUX1BBSVIgZWNkc2FfY2hvaWNlc1tdID0gewotLSAgICB7ImVjZHNhcDE2MCIsIFJfRUNfUDE2 MH0sCi0tICAgIHsiZWNkc2FwMTkyIiwgUl9FQ19QMTkyfSwKLSAgICAgeyJlY2RzYXAyMjQiLCBS X0VDX1AyMjR9LAotICAgICB7ImVjZHNhcDI1NiIsIFJfRUNfUDI1Nn0sCi0gICAgIHsiZWNkc2Fw Mzg0IiwgUl9FQ19QMzg0fSwKLSAgICAgeyJlY2RzYXA1MjEiLCBSX0VDX1A1MjF9LAotLSAgICB7 ImVjZHNhazE2MyIsIFJfRUNfSzE2M30sCi0tICAgIHsiZWNkc2FrMjMzIiwgUl9FQ19LMjMzfSwK LS0gICAgeyJlY2RzYWsyODMiLCBSX0VDX0syODN9LAotLSAgICB7ImVjZHNhazQwOSIsIFJfRUNf SzQwOX0sCi0tICAgIHsiZWNkc2FrNTcxIiwgUl9FQ19LNTcxfSwKLS0gICAgeyJlY2RzYWIxNjMi LCBSX0VDX0IxNjN9LAotLSAgICB7ImVjZHNhYjIzMyIsIFJfRUNfQjIzM30sCi0tICAgIHsiZWNk c2FiMjgzIiwgUl9FQ19CMjgzfSwKLS0gICAgeyJlY2RzYWI0MDkiLCBSX0VDX0I0MDl9LAotLSAg ICB7ImVjZHNhYjU3MSIsIFJfRUNfQjU3MX0sCi0gICAgIHtOVUxMfQotIH07Ci0gCi0gc3RhdGlj IE9QVF9QQUlSIGVjZGhfY2hvaWNlc1tdID0gewotLSAgICB7ImVjZGhwMTYwIiwgUl9FQ19QMTYw fSwKLS0gICAgeyJlY2RocDE5MiIsIFJfRUNfUDE5Mn0sCi0gICAgIHsiZWNkaHAyMjQiLCBSX0VD X1AyMjR9LAotICAgICB7ImVjZGhwMjU2IiwgUl9FQ19QMjU2fSwKLSAgICAgeyJlY2RocDM4NCIs IFJfRUNfUDM4NH0sCi0gICAgIHsiZWNkaHA1MjEiLCBSX0VDX1A1MjF9LAotLSAgICB7ImVjZGhr MTYzIiwgUl9FQ19LMTYzfSwKLS0gICAgeyJlY2RoazIzMyIsIFJfRUNfSzIzM30sCi0tICAgIHsi ZWNkaGsyODMiLCBSX0VDX0syODN9LAotLSAgICB7ImVjZGhrNDA5IiwgUl9FQ19LNDA5fSwKLS0g ICAgeyJlY2RoazU3MSIsIFJfRUNfSzU3MX0sCi0tICAgIHsiZWNkaGIxNjMiLCBSX0VDX0IxNjN9 LAotLSAgICB7ImVjZGhiMjMzIiwgUl9FQ19CMjMzfSwKLS0gICAgeyJlY2RoYjI4MyIsIFJfRUNf QjI4M30sCi0tICAgIHsiZWNkaGI0MDkiLCBSX0VDX0I0MDl9LAotLSAgICB7ImVjZGhiNTcxIiwg Ul9FQ19CNTcxfSwKLSAgICAgeyJlY2RoeDI1NTE5IiwgUl9FQ19YMjU1MTl9LAotICAgICB7TlVM TH0KLSB9OwotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGUvY3J5cHRvL2VjL2VjcF9zbXBsLmMuY3Vy dmVzIG9wZW5zc2wtMS4xLjBlL2NyeXB0by9lYy9lY3Bfc21wbC5jCi0tLS0gb3BlbnNzbC0xLjEu MGUvY3J5cHRvL2VjL2VjcF9zbXBsLmMuY3VydmVzCTIwMTctMDItMTYgMTI6NTg6MjEuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjEuMGUvY3J5cHRvL2VjL2VjcF9zbXBsLmMJMjAxNy0w Mi0xNiAxNTo0NjoyMi4yNjQ1MDQxODggKzAxMDAKLUBAIC0xNDQsNiArMTQ0LDExIEBAIGludCBl Y19HRnBfc2ltcGxlX2dyb3VwX3NldF9jdXJ2ZShFQ19HUk8KLSAgICAgICAgIHJldHVybiAwOwot ICAgICB9Ci0gCi0rICAgIGlmIChCTl9udW1fYml0cyhwKSA8IDIyNCkgewotKyAgICAgICAgRUNl cnIoRUNfRl9FQ19HRlBfU0lNUExFX0dST1VQX1NFVF9DVVJWRSwgRUNfUl9VTlNVUFBPUlRFRF9G SUVMRCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKwotICAgICBpZiAoY3R4ID09IE5V TEwpIHsKLSAgICAgICAgIGN0eCA9IG5ld19jdHggPSBCTl9DVFhfbmV3KCk7Ci0gICAgICAgICBp ZiAoY3R4ID09IE5VTEwpCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4wZS90ZXN0L2VjZHNhdGVzdC5j LmN1cnZlcyBvcGVuc3NsLTEuMS4wZS90ZXN0L2VjZHNhdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjEu MGUvdGVzdC9lY2RzYXRlc3QuYy5jdXJ2ZXMJMjAxNy0wMi0xNiAxMjo1ODoyNC4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMS4wZS90ZXN0L2VjZHNhdGVzdC5jCTIwMTctMDItMTYgMTU6 NDY6MjIuMjUwNTAzODU3ICswMTAwCi1AQCAtMjE2LDYgKzIxNiw3IEBAIGludCB4OV82Ml90ZXN0 cyhCSU8gKm91dCkKLSAgICAgaWYgKCFjaGFuZ2VfcmFuZCgpKQotICAgICAgICAgZ290byB4OTYy X2VycjsKLSAKLSsjaWYgMAotICAgICBpZiAoIXg5XzYyX3Rlc3RfaW50ZXJuYWwob3V0LCBOSURf WDlfNjJfcHJpbWUxOTJ2MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzMzQyNDAz NTM2NDA1OTgxNzI5MzkzNDg4MzM0Njk0NjAwNDE1NTk2ODgxODI2ODY5MzUxNjc3NjEzIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1NzM1ODIyMzI4ODg4MTU1MjU0NjgzODk0OTk3 ODk3NTcxOTUxNTY4NTUzNjQyODkyMDI5OTgyMzQyIikpCi1AQCAtMjI2LDYgKzIyNyw3IEBAIGlu dCB4OV82Ml90ZXN0cyhCSU8gKm91dCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIz MjM4MTM1NTMyMDk3OTczNTc3MDgwNzg3NzY4MzEyNTA1MDU5MzE4OTEwNTE3NTUwMDc4NDI3ODE5 IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjc4NTA1MTc5NDQ4NzgzIikpCi0gICAg ICAgICBnb3RvIHg5NjJfZXJyOwotKyNlbmRpZgotICMgaWZuZGVmIE9QRU5TU0xfTk9fRUMyTQot ICAgICBpZiAoIXg5XzYyX3Rlc3RfaW50ZXJuYWwob3V0LCBOSURfWDlfNjJfYzJ0bmIxOTF2MSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI4NzE5NDM4MzE2NDg3MTU0MzM1NTcyMjI4 NDkyNjkwNDQxOTk5NzIzNzU5MTUzNTA2NjUyODA0OCIsCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0x LjEuMC1maXBzLnBhdGNoIGIvb3BlbnNzbC0xLjEuMC1maXBzLnBhdGNoCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCA0ODUwOWRlLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4xLjAtZmlw cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMjUyICswLDAgQEAKLWRpZmYgLXVwIG9wZW5z c2wtMS4xLjBoL2FwcHMvc3BlZWQuYy5maXBzIG9wZW5zc2wtMS4xLjBoL2FwcHMvc3BlZWQuYwot LS0tIG9wZW5zc2wtMS4xLjBoL2FwcHMvc3BlZWQuYy5maXBzCTIwMTgtMDMtMjkgMTQ6NDQ6MjQu NjE3MjM2NDMxICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvYXBwcy9zcGVlZC5jCTIwMTgtMDMt MjkgMTU6MDI6NDIuMTcxOTk2MTkxICswMjAwCi1AQCAtMTQ0Nyw3ICsxNDQ3LDkgQEAgaW50IHNw ZWVkX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotICAgICAgICAgaWYgKHN0cmNtcCgqYXJn diwgIm9wZW5zc2wiKSA9PSAwKQotICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgaWYg KHN0cmNtcCgqYXJndiwgInJzYSIpID09IDApIHsKLS0gICAgICAgICAgICByc2FfZG9pdFtSX1JT QV81MTJdID0gcnNhX2RvaXRbUl9SU0FfMTAyNF0gPQotKyAgICAgICAgICAgIGlmICghRklQU19t b2RlKCkpCi0rICAgICAgICAgICAgICAgIHJzYV9kb2l0W1JfUlNBXzUxMl0gPSAxOwotKyAgICAg ICAgICAgIHJzYV9kb2l0W1JfUlNBXzEwMjRdID0KLSAgICAgICAgICAgICAgICAgcnNhX2RvaXRb Ul9SU0FfMjA0OF0gPSByc2FfZG9pdFtSX1JTQV8zMDcyXSA9Ci0gICAgICAgICAgICAgICAgIHJz YV9kb2l0W1JfUlNBXzQwOTZdID0gcnNhX2RvaXRbUl9SU0FfNzY4MF0gPQotICAgICAgICAgICAg ICAgICByc2FfZG9pdFtSX1JTQV8xNTM2MF0gPSAxOwotQEAgLTE0NjAsNyArMTQ2Miw5IEBAIGlu dCBzcGVlZF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAjZW5kaWYKLSAjaWZuZGVmIE9Q RU5TU0xfTk9fRFNBCi0gICAgICAgICBpZiAoc3RyY21wKCphcmd2LCAiZHNhIikgPT0gMCkgewot LSAgICAgICAgICAgIGRzYV9kb2l0W1JfRFNBXzUxMl0gPSBkc2FfZG9pdFtSX0RTQV8xMDI0XSA9 Ci0rICAgICAgICAgICAgaWYgKCFGSVBTX21vZGUoKSkKLSsgICAgICAgICAgICAgICAgZHNhX2Rv aXRbUl9EU0FfNTEyXSA9IDE7Ci0rICAgICAgICAgICAgZHNhX2RvaXRbUl9EU0FfMTAyNF0gPQot ICAgICAgICAgICAgICAgICBkc2FfZG9pdFtSX0RTQV8yMDQ4XSA9IDE7Ci0gICAgICAgICAgICAg Y29udGludWU7Ci0gICAgICAgICB9Ci1AQCAtMTU0OSwxNSArMTU1MywyMSBAQCBpbnQgc3BlZWRf bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gICAgIC8qIE5vIHBhcmFtZXRlcnM7IHR1cm4g b24gZXZlcnl0aGluZy4gKi8KLSAgICAgaWYgKChhcmdjID09IDApICYmICFkb2l0W0RfRVZQXSkg ewotICAgICAgICAgZm9yIChpID0gMDsgaSA8IEFMR09SX05VTTsgaSsrKQotLSAgICAgICAgICAg IGlmIChpICE9IERfRVZQKQotKyAgICAgICAgICAgIGlmIChpICE9IERfRVZQICYmCi0rICAgICAg ICAgICAgICAgICghRklQU19tb2RlKCkgfHwgKGkgIT0gRF9XSElSTFBPT0wgJiYKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBEX01EMiAmJiBpICE9IERfTUQ0ICYmCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT0gRF9NRDUgJiYgaSAhPSBEX01E QzIgJiYKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBEX1JNRDE2MCkp KQotICAgICAgICAgICAgICAgICBkb2l0W2ldID0gMTsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUlNB Ci0gICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUlNBX05VTTsgaSsrKQotLSAgICAgICAgICAgIHJz YV9kb2l0W2ldID0gMTsKLSsgICAgICAgICAgICBpZiAoIUZJUFNfbW9kZSgpIHx8IGkgIT0gUl9S U0FfNTEyKQotKyAgICAgICAgICAgICAgICByc2FfZG9pdFtpXSA9IDE7Ci0gI2VuZGlmCi0gI2lm bmRlZiBPUEVOU1NMX05PX0RTQQotICAgICAgICAgZm9yIChpID0gMDsgaSA8IERTQV9OVU07IGkr KykKLS0gICAgICAgICAgICBkc2FfZG9pdFtpXSA9IDE7Ci0rICAgICAgICAgICAgaWYgKCFGSVBT X21vZGUoKSB8fCBpICE9IFJfRFNBXzUxMikKLSsgICAgICAgICAgICAgICAgZHNhX2RvaXRbaV0g PSAxOwotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19FQwotICAgICAgICAgZm9yIChsb29w ID0gMDsgbG9vcCA8IE9TU0xfTkVMRU0oZWNkc2FfY2hvaWNlcyk7IGxvb3ArKykKLUBAIC0xNjA2 LDMwICsxNjE2LDQ2IEBAIGludCBzcGVlZF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAg ICAgQUVTX3NldF9lbmNyeXB0X2tleShrZXkyNCwgMTkyLCAmYWVzX2tzMik7Ci0gICAgIEFFU19z ZXRfZW5jcnlwdF9rZXkoa2V5MzIsIDI1NiwgJmFlc19rczMpOwotICNpZm5kZWYgT1BFTlNTTF9O T19DQU1FTExJQQotLSAgICBDYW1lbGxpYV9zZXRfa2V5KGtleTE2LCAxMjgsICZjYW1lbGxpYV9r czEpOwotLSAgICBDYW1lbGxpYV9zZXRfa2V5KGNrZXkyNCwgMTkyLCAmY2FtZWxsaWFfa3MyKTsK LS0gICAgQ2FtZWxsaWFfc2V0X2tleShja2V5MzIsIDI1NiwgJmNhbWVsbGlhX2tzMyk7Ci0rICAg IGlmIChkb2l0W0RfQ0JDXzEyOF9DTUxdIHx8IGRvaXRbRF9DQkNfMTkyX0NNTF0gfHwgZG9pdFtE X0NCQ18yNTZfQ01MXSkgewotKyAgICAgICAgQ2FtZWxsaWFfc2V0X2tleShrZXkxNiwgMTI4LCAm Y2FtZWxsaWFfa3MxKTsKLSsgICAgICAgIENhbWVsbGlhX3NldF9rZXkoY2tleTI0LCAxOTIsICZj YW1lbGxpYV9rczIpOwotKyAgICAgICAgQ2FtZWxsaWFfc2V0X2tleShja2V5MzIsIDI1NiwgJmNh bWVsbGlhX2tzMyk7Ci0rICAgIH0KLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fSURFQQot LSAgICBJREVBX3NldF9lbmNyeXB0X2tleShrZXkxNiwgJmlkZWFfa3MpOwotKyAgICBpZiAoZG9p dFtEX0NCQ19JREVBXSkgewotKyAgICAgICAgSURFQV9zZXRfZW5jcnlwdF9rZXkoa2V5MTYsICZp ZGVhX2tzKTsKLSsgICAgfQotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19TRUVECi0tICAg IFNFRURfc2V0X2tleShrZXkxNiwgJnNlZWRfa3MpOwotKyAgICBpZiAoZG9pdFtEX0NCQ19TRUVE XSkgewotKyAgICAgICAgU0VFRF9zZXRfa2V5KGtleTE2LCAmc2VlZF9rcyk7Ci0rICAgIH0KLSAj ZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUkM0Ci0tICAgIFJDNF9zZXRfa2V5KCZyYzRfa3Ms IDE2LCBrZXkxNik7Ci0rICAgaWYgKGRvaXRbRF9SQzRdKSB7Ci0rICAgICAgICBSQzRfc2V0X2tl eSgmcmM0X2tzLCAxNiwga2V5MTYpOwotKyAgICB9Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NM X05PX1JDMgotLSAgICBSQzJfc2V0X2tleSgmcmMyX2tzLCAxNiwga2V5MTYsIDEyOCk7Ci0rICAg IGlmIChkb2l0W0RfQ0JDX1JDMl0pIHsKLSsgICAgICAgIFJDMl9zZXRfa2V5KCZyYzJfa3MsIDE2 LCBrZXkxNiwgMTI4KTsKLSsgICAgfQotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19SQzUK LS0gICAgUkM1XzMyX3NldF9rZXkoJnJjNV9rcywgMTYsIGtleTE2LCAxMik7Ci0rICAgIGlmIChk b2l0W0RfQ0JDX1JDNV0pIHsKLSsgICAgICAgIFJDNV8zMl9zZXRfa2V5KCZyYzVfa3MsIDE2LCBr ZXkxNiwgMTIpOwotKyAgICB9Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0JGCi0tICAg IEJGX3NldF9rZXkoJmJmX2tzLCAxNiwga2V5MTYpOwotKyAgICBpZiAoZG9pdFtEX0NCQ19CRl0p IHsKLSsgICAgICAgIEJGX3NldF9rZXkoJmJmX2tzLCAxNiwga2V5MTYpOwotKyAgICB9Ci0gI2Vu ZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0NBU1QKLS0gICAgQ0FTVF9zZXRfa2V5KCZjYXN0X2tz LCAxNiwga2V5MTYpOwotKyAgICBpZiAoZG9pdFtEX0NCQ19DQVNUXSkgewotKyAgICAgICAgQ0FT VF9zZXRfa2V5KCZjYXN0X2tzLCAxNiwga2V5MTYpOwotKyAgICB9Ci0gI2VuZGlmCi0gI2lmbmRl ZiBTSUdBTFJNCi0gIyBpZm5kZWYgT1BFTlNTTF9OT19ERVMKLUBAIC0xODkwLDYgKzE5MTYsNyBA QCBpbnQgc3BlZWRfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCi0gICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgbG9vcGFyZ3NfbGVuOyBpKyspIHsKLSAgICAgICAgICAgICBsb29wYXJnc1tp XS5oY3R4ID0gSE1BQ19DVFhfbmV3KCk7Ci0rICAgICAgICAgICAgSE1BQ19DVFhfc2V0X2ZsYWdz KGxvb3BhcmdzW2ldLmhjdHgsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7Ci0gICAg ICAgICAgICAgaWYgKGxvb3BhcmdzW2ldLmhjdHggPT0gTlVMTCkgewotICAgICAgICAgICAgICAg ICBCSU9fcHJpbnRmKGJpb19lcnIsICJITUFDIG1hbGxvYyBmYWlsdXJlLCBleGl0aW5nLi4uIik7 Ci0gICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9Db25m aWd1cmUuZmlwcyBvcGVuc3NsLTEuMS4waC9Db25maWd1cmUKLS0tLSBvcGVuc3NsLTEuMS4waC9D b25maWd1cmUuZmlwcwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYyNDIzNjU5NSArMDIwMAotKysrIG9w ZW5zc2wtMS4xLjBoL0NvbmZpZ3VyZQkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYyODIzNjY4OSArMDIw MAotQEAgLTMxNCw3ICszMTQsNyBAQCAkY29uZmlne3NkaXJzfSA9IFsKLSAgICAgIm1kMiIsICJt ZDQiLCAibWQ1IiwgInNoYSIsICJtZGMyIiwgImhtYWMiLCAicmlwZW1kIiwgIndocmxwb29sIiwg InBvbHkxMzA1IiwgImJsYWtlMiIsCi0gICAgICJkZXMiLCAiYWVzIiwgInJjMiIsICJyYzQiLCAi cmM1IiwgImlkZWEiLCAiYmYiLCAiY2FzdCIsICJjYW1lbGxpYSIsICJzZWVkIiwgImNoYWNoYSIs ICJtb2RlcyIsCi0gICAgICJibiIsICJlYyIsICJyc2EiLCAiZHNhIiwgImRoIiwgImRzbyIsICJl bmdpbmUiLAotLSAgICAiYnVmZmVyIiwgImJpbyIsICJzdGFjayIsICJsaGFzaCIsICJyYW5kIiwg ImVyciIsCi0rICAgICJidWZmZXIiLCAiYmlvIiwgInN0YWNrIiwgImxoYXNoIiwgInJhbmQiLCAi ZXJyIiwgImZpcHMiLAotICAgICAiZXZwIiwgImFzbjEiLCAicGVtIiwgIng1MDkiLCAieDUwOXYz IiwgImNvbmYiLCAidHh0X2RiIiwgInBrY3M3IiwgInBrY3MxMiIsICJjb21wIiwgIm9jc3AiLCAi dWkiLAotICAgICAiY21zIiwgInRzIiwgInNycCIsICJjbWFjIiwgImN0IiwgImFzeW5jIiwgImtk ZiIKLSAgICAgXTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9ibi9ibl9yYW5kLmMu ZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vYm4vYm5fcmFuZC5jCi0tLS0gb3BlbnNzbC0xLjEu MGgvY3J5cHRvL2JuL2JuX3JhbmQuYy5maXBzCTIwMTgtMDMtMjcgMTU6NTA6MzguMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2JuL2JuX3JhbmQuYwkyMDE4LTAzLTI5 IDE0OjQ0OjI0LjYyODIzNjY4OSArMDIwMAotQEAgLTM5LDkgKzM5LDExIEBAIHN0YXRpYyBpbnQg Ym5yYW5kKGludCBwc2V1ZG9yYW5kLCBCSUdOVU0KLSAgICAgICAgIGdvdG8gZXJyOwotICAgICB9 Ci0gCi0tICAgIC8qIG1ha2UgYSByYW5kb20gbnVtYmVyIGFuZCBzZXQgdGhlIHRvcCBhbmQgYm90 dG9tIGJpdHMgKi8KLS0gICAgdGltZSgmdGltKTsKLS0gICAgUkFORF9hZGQoJnRpbSwgc2l6ZW9m KHRpbSksIDAuMCk7Ci0rICAgIGlmICghRklQU19tb2RlKCkpIHsgICAgICAgICAvKiBpbiBGSVBT IG1vZGUgdGhlIFJORyBpcyBhbHdheXMgcHJvcGVybHkgc2VlZGVkIG9yIHRoZSBtb2R1bGUgZmFp bHMgKi8KLSsgICAgICAgIC8qIG1ha2UgYSByYW5kb20gbnVtYmVyIGFuZCBzZXQgdGhlIHRvcCBh bmQgYm90dG9tIGJpdHMgKi8KLSsgICAgICAgIHRpbWUoJnRpbSk7Ci0rICAgICAgICBSQU5EX2Fk ZCgmdGltLCBzaXplb2YodGltKSwgMC4wKTsKLSsgICAgfQotIAotICAgICBpZiAoUkFORF9ieXRl cyhidWYsIGJ5dGVzKSA8PSAwKQotICAgICAgICAgZ290byBlcnI7Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMS4waC9jcnlwdG8vZGgvZGhfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZGgv ZGhfZXJyLmMKLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZGgvZGhfZXJyLmMuZmlwcwkyMDE4 LTAzLTI3IDE1OjUwOjM4LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0 by9kaC9kaF9lcnIuYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYyODIzNjY4OSArMDIwMAotQEAgLTI1 LDYgKzI1LDkgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBESF9zdHJfZnVuY3RzW10gPQotICAg ICB7RVJSX0ZVTkMoREhfRl9ESF9DTVNfREVDUllQVCksICJkaF9jbXNfZGVjcnlwdCJ9LAotICAg ICB7RVJSX0ZVTkMoREhfRl9ESF9DTVNfU0VUX1BFRVJLRVkpLCAiZGhfY21zX3NldF9wZWVya2V5 In0sCi0gICAgIHtFUlJfRlVOQyhESF9GX0RIX0NNU19TRVRfU0hBUkVEX0lORk8pLCAiZGhfY21z X3NldF9zaGFyZWRfaW5mbyJ9LAotKyAgICB7RVJSX0ZVTkMoREhfRl9ESF9DT01QVVRFX0tFWSks ICJESF9jb21wdXRlX2tleSJ9LAotKyAgICB7RVJSX0ZVTkMoREhfRl9ESF9HRU5FUkFURV9LRVkp LCAiREhfZ2VuZXJhdGVfa2V5In0sCi0rICAgIHtFUlJfRlVOQyhESF9GX0RIX0dFTkVSQVRFX1BB UkFNRVRFUlNfRVgpLCAiREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leCJ9LAotICAgICB7RVJSX0ZV TkMoREhfRl9ESF9NRVRIX0RVUCksICJESF9tZXRoX2R1cCJ9LAotICAgICB7RVJSX0ZVTkMoREhf Rl9ESF9NRVRIX05FVyksICJESF9tZXRoX25ldyJ9LAotICAgICB7RVJSX0ZVTkMoREhfRl9ESF9N RVRIX1NFVDFfTkFNRSksICJESF9tZXRoX3NldDFfbmFtZSJ9LAotQEAgLTQ5LDkgKzUyLDExIEBA IHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgREhfc3RyX3JlYXNvbnNbXQotICAgICB7RVJSX1JFQVNP TihESF9SX0lOVkFMSURfUFVCS0VZKSwgImludmFsaWQgcHVibGljIGtleSJ9LAotICAgICB7RVJS X1JFQVNPTihESF9SX0tERl9QQVJBTUVURVJfRVJST1IpLCAia2RmIHBhcmFtZXRlciBlcnJvciJ9 LAotICAgICB7RVJSX1JFQVNPTihESF9SX0tFWVNfTk9UX1NFVCksICJrZXlzIG5vdCBzZXQifSwK LSsgICAge0VSUl9SRUFTT04oREhfUl9LRVlfU0laRV9UT09fU01BTEwpLCAia2V5IHNpemUgdG9v IHNtYWxsIn0sCi0gICAgIHtFUlJfUkVBU09OKERIX1JfTU9EVUxVU19UT09fTEFSR0UpLCAibW9k dWx1cyB0b28gbGFyZ2UifSwKLSAgICAge0VSUl9SRUFTT04oREhfUl9OT19QQVJBTUVURVJTX1NF VCksICJubyBwYXJhbWV0ZXJzIHNldCJ9LAotICAgICB7RVJSX1JFQVNPTihESF9SX05PX1BSSVZB VEVfVkFMVUUpLCAibm8gcHJpdmF0ZSB2YWx1ZSJ9LAotKyAgICB7RVJSX1JFQVNPTihESF9SX05P Tl9GSVBTX01FVEhPRCksICJub24gRklQUyBtZXRob2QifSwKLSAgICAge0VSUl9SRUFTT04oREhf Ul9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IpLCAicGFyYW1ldGVyIGVuY29kaW5nIGVycm9yIn0s Ci0gICAgIHtFUlJfUkVBU09OKERIX1JfUEVFUl9LRVlfRVJST1IpLCAicGVlciBrZXkgZXJyb3Ii fSwKLSAgICAge0VSUl9SRUFTT04oREhfUl9TSEFSRURfSU5GT19FUlJPUiksICJzaGFyZWQgaW5m byBlcnJvciJ9LAotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2RoL2RoX2dlbi5jLmZp cHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2RoL2RoX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjEuMGgv Y3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOC4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZGgvZGhfZ2VuLmMJMjAxOC0wMy0yOSAxNDo0 NDoyNC42MjgyMzY2ODkgKzAyMDAKLUBAIC0xNiw2ICsxNiw5IEBACi0gI2luY2x1ZGUgImludGVy bmFsL2NyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAjaW5jbHVkZSAiZGhf bG9jbC5oIgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKyNlbmRpZgotIAotIHN0YXRpYyBpbnQgZGhfYnVpbHRpbl9nZW5wYXJhbXMoREggKnJldCwg aW50IHByaW1lX2xlbiwgaW50IGdlbmVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEJOX0dFTkNCICpjYik7Ci1AQCAtMjMsNiArMjYsMTMgQEAgc3RhdGljIGludCBkaF9i dWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LAotIGludCBESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4 KERIICpyZXQsIGludCBwcmltZV9sZW4sIGludCBnZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQk5fR0VOQ0IgKmNiKQotIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r ICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKHJldC0+bWV0aC0+ZmxhZ3MgJiBESF9GTEFHX0ZJUFNf TUVUSE9EKQotKyAgICAgICAgJiYgIShyZXQtPmZsYWdzICYgREhfRkxBR19OT05fRklQU19BTExP VykpIHsKLSsgICAgICAgIERIZXJyKERIX0ZfREhfR0VORVJBVEVfUEFSQU1FVEVSU19FWCwgREhf Ul9OT05fRklQU19NRVRIT0QpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsjZW5kaWYK LSAgICAgaWYgKHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKQotICAgICAgICAgcmV0dXJuIHJl dC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNiKTsK LSAgICAgcmV0dXJuIGRoX2J1aWx0aW5fZ2VucGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0 b3IsIGNiKTsKLUBAIC02Miw2ICs3MiwxOCBAQCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFy YW1zKERIICpyZXQsCi0gICAgIGludCBnLCBvayA9IC0xOwotICAgICBCTl9DVFggKmN0eCA9IE5V TEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWls ZWQoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsIEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQot KwotKyAgICBpZiAoRklQU19tb2RlKCkgJiYgKHByaW1lX2xlbiA8IE9QRU5TU0xfREhfRklQU19N SU5fTU9EVUxVU19CSVRTX0dFTikpIHsKLSsgICAgICAgIERIZXJyKERIX0ZfREhfQlVJTFRJTl9H RU5QQVJBTVMsIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsgICAgICAgIGdvdG8gZXJyOwot KyAgICB9Ci0rI2VuZGlmCi0rCi0gICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKLSAgICAgaWYgKGN0 eCA9PSBOVUxMKQotICAgICAgICAgZ290byBlcnI7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9j cnlwdG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZGgvZGhfa2V5LmMK LS0tLSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcwkyMDE4LTAzLTI3IDE1 OjUwOjM4LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9kaC9kaF9r ZXkuYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYyODIzNjY4OSArMDIwMAotQEAgLTExLDYgKzExLDkg QEAKLSAjaW5jbHVkZSAiaW50ZXJuYWwvY3J5cHRsaWIuaCIKLSAjaW5jbHVkZSAiZGhfbG9jbC5o IgotICNpbmNsdWRlICJpbnRlcm5hbC9ibl9pbnQuaCIKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r IyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBzdGF0aWMgaW50IGdlbmVy YXRlX2tleShESCAqZGgpOwotIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAq a2V5LCBjb25zdCBCSUdOVU0gKnB1Yl9rZXksIERIICpkaCk7Ci1AQCAtMjIsMTggKzI1LDMyIEBA IHN0YXRpYyBpbnQgZGhfZmluaXNoKERIICpkaCk7Ci0gCi0gaW50IERIX2dlbmVyYXRlX2tleShE SCAqZGgpCi0gewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgpICYm ICEoZGgtPm1ldGgtPmZsYWdzICYgREhfRkxBR19GSVBTX01FVEhPRCkKLSsgICAgICAgICYmICEo ZGgtPmZsYWdzICYgREhfRkxBR19OT05fRklQU19BTExPVykpIHsKLSsgICAgICAgIERIZXJyKERI X0ZfREhfR0VORVJBVEVfS0VZLCBESF9SX05PTl9GSVBTX01FVEhPRCk7Ci0rICAgICAgICByZXR1 cm4gMDsKLSsgICAgfQotKyNlbmRpZgotICAgICByZXR1cm4gZGgtPm1ldGgtPmdlbmVyYXRlX2tl eShkaCk7Ci0gfQotIAotIGludCBESF9jb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZXksIGNv bnN0IEJJR05VTSAqcHViX2tleSwgREggKmRoKQotIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r ICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKGRoLT5tZXRoLT5mbGFncyAmIERIX0ZMQUdfRklQU19N RVRIT0QpCi0rICAgICAgICAmJiAhKGRoLT5mbGFncyAmIERIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cp KSB7Ci0rICAgICAgICBESGVycihESF9GX0RIX0NPTVBVVEVfS0VZLCBESF9SX05PTl9GSVBTX01F VEhPRCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyNlbmRpZgotICAgICByZXR1cm4g ZGgtPm1ldGgtPmNvbXB1dGVfa2V5KGtleSwgcHViX2tleSwgZGgpOwotIH0KLSAKLSBpbnQgREhf Y29tcHV0ZV9rZXlfcGFkZGVkKHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJf a2V5LCBESCAqZGgpCi0gewotICAgICBpbnQgcnYsIHBhZDsKLS0gICAgcnYgPSBkaC0+bWV0aC0+ Y29tcHV0ZV9rZXkoa2V5LCBwdWJfa2V5LCBkaCk7Ci0rICAgIHJ2ID0gREhfY29tcHV0ZV9rZXko a2V5LCBwdWJfa2V5LCBkaCk7Ci0gICAgIGlmIChydiA8PSAwKQotICAgICAgICAgcmV0dXJuIHJ2 OwotICAgICBwYWQgPSBCTl9udW1fYnl0ZXMoZGgtPnApIC0gcnY7Ci1AQCAtODIsNiArOTksMTQg QEAgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKQotICAgICBCTl9NT05UX0NUWCAqbW9u dCA9IE5VTEw7Ci0gICAgIEJJR05VTSAqcHViX2tleSA9IE5VTEwsICpwcml2X2tleSA9IE5VTEw7 Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19tb2RlKCkKLSsgICAgICAg ICYmIChCTl9udW1fYml0cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklU UykpIHsKLSsgICAgICAgIERIZXJyKERIX0ZfR0VORVJBVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RP T19TTUFMTCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyNlbmRpZgotKwotICAgICBj dHggPSBCTl9DVFhfbmV3KCk7Ci0gICAgIGlmIChjdHggPT0gTlVMTCkKLSAgICAgICAgIGdvdG8g ZXJyOwotQEAgLTE2NSw2ICsxOTAsMTMgQEAgc3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25l ZCBjaGFyICprZQotICAgICAgICAgREhlcnIoREhfRl9DT01QVVRFX0tFWSwgREhfUl9NT0RVTFVT X1RPT19MQVJHRSk7Ci0gICAgICAgICBnb3RvIGVycjsKLSAgICAgfQotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgpCi0rICAgICAgICAmJiAoQk5fbnVtX2JpdHMoZGgt PnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7Ci0rICAgICAgICBESGVy cihESF9GX0NPTVBVVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rICAgICAgICBn b3RvIGVycjsKLSsgICAgfQotKyNlbmRpZgotIAotICAgICBjdHggPSBCTl9DVFhfbmV3KCk7Ci0g ICAgIGlmIChjdHggPT0gTlVMTCkKLUBAIC0yMTYsNiArMjQ4LDkgQEAgc3RhdGljIGludCBkaF9i bl9tb2RfZXhwKGNvbnN0IERIICpkaCwgQgotIAotIHN0YXRpYyBpbnQgZGhfaW5pdChESCAqZGgp Ci0gewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOwot KyNlbmRpZgotICAgICBkaC0+ZmxhZ3MgfD0gREhfRkxBR19DQUNIRV9NT05UX1A7Ci0gICAgIHJl dHVybiAoMSk7Ci0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2RzYS9kc2FfZXJy LmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZHNhL2RzYV9lcnIuYwotLS0tIG9wZW5zc2wt MS4xLjBoL2NyeXB0by9kc2EvZHNhX2Vyci5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOC4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZHNhL2RzYV9lcnIuYwkyMDE4 LTAzLTI5IDE0OjQ0OjI0LjYyODIzNjY4OSArMDIwMAotQEAgLTIxLDEwICsyMSwxMyBAQAotIHN0 YXRpYyBFUlJfU1RSSU5HX0RBVEEgRFNBX3N0cl9mdW5jdHNbXSA9IHsKLSAgICAge0VSUl9GVU5D KERTQV9GX0RTQVBBUkFNU19QUklOVCksICJEU0FwYXJhbXNfcHJpbnQifSwKLSAgICAge0VSUl9G VU5DKERTQV9GX0RTQVBBUkFNU19QUklOVF9GUCksICJEU0FwYXJhbXNfcHJpbnRfZnAifSwKLSsg ICAge0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiksICJkc2FfYnVpbHRpbl9rZXln ZW4ifSwKLSAgICAge0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOKSwgImRzYV9i dWlsdGluX3BhcmFtZ2VuIn0sCi0gICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FfQlVJTFRJTl9QQVJB TUdFTjIpLCAiZHNhX2J1aWx0aW5fcGFyYW1nZW4yIn0sCi0gICAgIHtFUlJfRlVOQyhEU0FfRl9E U0FfRE9fU0lHTiksICJEU0FfZG9fc2lnbiJ9LAotICAgICB7RVJSX0ZVTkMoRFNBX0ZfRFNBX0RP X1ZFUklGWSksICJEU0FfZG9fdmVyaWZ5In0sCi0rICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FfR0VO RVJBVEVfS0VZKSwgIkRTQV9nZW5lcmF0ZV9rZXkifSwKLSsgICAge0VSUl9GVU5DKERTQV9GX0RT QV9HRU5FUkFURV9QQVJBTUVURVJTX0VYKSwgIkRTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4In0s Ci0gICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FfTUVUSF9EVVApLCAiRFNBX21ldGhfZHVwIn0sCi0g ICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FfTUVUSF9ORVcpLCAiRFNBX21ldGhfbmV3In0sCi0gICAg IHtFUlJfRlVOQyhEU0FfRl9EU0FfTUVUSF9TRVQxX05BTUUpLCAiRFNBX21ldGhfc2V0MV9uYW1l In0sCi1AQCAtNTEsOSArNTQsMTIgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX3Jl YXNvbnNbXQotICAgICB7RVJSX1JFQVNPTihEU0FfUl9ERUNPREVfRVJST1IpLCAiZGVjb2RlIGVy cm9yIn0sCi0gICAgIHtFUlJfUkVBU09OKERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUpLCAiaW52 YWxpZCBkaWdlc3QgdHlwZSJ9LAotICAgICB7RVJSX1JFQVNPTihEU0FfUl9JTlZBTElEX1BBUkFN RVRFUlMpLCAiaW52YWxpZCBwYXJhbWV0ZXJzIn0sCi0rICAgIHtFUlJfUkVBU09OKERTQV9SX0tF WV9TSVpFX0lOVkFMSUQpLCAia2V5IHNpemUgaW52YWxpZCJ9LAotKyAgICB7RVJSX1JFQVNPTihE U0FfUl9LRVlfU0laRV9UT09fU01BTEwpLCAia2V5IHNpemUgdG9vIHNtYWxsIn0sCi0gICAgIHtF UlJfUkVBU09OKERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUyksICJtaXNzaW5nIHBhcmFtZXRlcnMi fSwKLSAgICAge0VSUl9SRUFTT04oRFNBX1JfTU9EVUxVU19UT09fTEFSR0UpLCAibW9kdWx1cyB0 b28gbGFyZ2UifSwKLSAgICAge0VSUl9SRUFTT04oRFNBX1JfTk9fUEFSQU1FVEVSU19TRVQpLCAi bm8gcGFyYW1ldGVycyBzZXQifSwKLSsgICAge0VSUl9SRUFTT04oRFNBX1JfTk9OX0ZJUFNfRFNB X01FVEhPRCksICJub24gRklQUyBEU0EgbWV0aG9kIn0sCi0gICAgIHtFUlJfUkVBU09OKERTQV9S X1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUiksICJwYXJhbWV0ZXIgZW5jb2RpbmcgZXJyb3IifSwK LSAgICAge0VSUl9SRUFTT04oRFNBX1JfUV9OT1RfUFJJTUUpLCAicSBub3QgcHJpbWUifSwKLSAg ICAge0VSUl9SRUFTT04oRFNBX1JfU0VFRF9MRU5fU01BTEwpLAotZGlmZiAtdXAgb3BlbnNzbC0x LjEuMGgvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZHNh L2RzYV9nZW4uYwotLS0tIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9kc2EvZHNhX2dlbi5jLmZpcHMJ MjAxOC0wMy0yNyAxNTo1MDozOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9j cnlwdG8vZHNhL2RzYV9nZW4uYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYyODIzNjY4OSArMDIwMAot QEAgLTIyLDEyICsyMiwyMiBAQAotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSAjaW5jbHVk ZSA8b3BlbnNzbC9zaGEuaD4KLSAjaW5jbHVkZSAiZHNhX2xvY2wuaCIKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBpbnQgRFNB X2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBiaXRzLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBpbnQgc2Vl ZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQs IHVuc2lnbmVkIGxvbmcgKmhfcmV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC Tl9HRU5DQiAqY2IpCi0gewotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21v ZGUoKSAmJiAhKHJldC0+bWV0aC0+ZmxhZ3MgJiBEU0FfRkxBR19GSVBTX01FVEhPRCkKLSsgICAg ICAgICYmICEocmV0LT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkgewotKyAgICAg ICAgRFNBZXJyKERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTX0VYLCBEU0FfUl9OT05fRklQ U19EU0FfTUVUSE9EKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rIyBlbmRpZgotICAg ICBpZiAocmV0LT5tZXRoLT5kc2FfcGFyYW1nZW4pCi0gICAgICAgICByZXR1cm4gcmV0LT5tZXRo LT5kc2FfcGFyYW1nZW4ocmV0LCBiaXRzLCBzZWVkX2luLCBzZWVkX2xlbiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKLUBA IC0zNSw5ICs0NSwxNSBAQCBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQs Ci0gICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1kID0gYml0cyA+PSAyMDQ4ID8gRVZQX3NoYTI1 NigpIDogRVZQX3NoYTEoKTsKLSAgICAgICAgIHNpemVfdCBxYml0cyA9IEVWUF9NRF9zaXplKGV2 cG1kKSAqIDg7Ci0gCi0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgICAgIHJldHVybiBkc2Ff YnVpbHRpbl9wYXJhbWdlbjIocmV0LCBiaXRzLCBxYml0cywgZXZwbWQsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWVkX2luLCBzZWVkX2xlbiwgLTEsIE5VTEwsIGNvdW50ZXJfcmV0LAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgaF9yZXQsIGNiKTsKLSsjIGVsc2UKLSAgICAgICAg IHJldHVybiBkc2FfYnVpbHRpbl9wYXJhbWdlbihyZXQsIGJpdHMsIHFiaXRzLCBldnBtZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkX2luLCBzZWVkX2xlbiwgTlVM TCwgY291bnRlcl9yZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaF9y ZXQsIGNiKTsKLSsjIGVuZGlmCi0gICAgIH0KLSB9Ci0gCi1AQCAtMzAzLDcgKzMxOSw3IEBAIGlu dCBkc2FfYnVpbHRpbl9wYXJhbWdlbjIoRFNBICpyZXQsIHNpemUKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgQk5fR0VOQ0IgKmNiKQotIHsKLS0gICAgaW50IG9rID0gLTE7 Ci0rICAgIGludCBvayA9IDA7Ci0gICAgIHVuc2lnbmVkIGNoYXIgKnNlZWQgPSBOVUxMLCAqc2Vl ZF90bXAgPSBOVUxMOwotICAgICB1bnNpZ25lZCBjaGFyIG1kW0VWUF9NQVhfTURfU0laRV07Ci0g ICAgIGludCBtZHNpemU7Ci1AQCAtMzIwLDYgKzMzNiwyMCBAQCBpbnQgZHNhX2J1aWx0aW5fcGFy YW1nZW4yKERTQSAqcmV0LCBzaXplCi0gICAgIGlmIChtY3R4ID09IE5VTEwpCi0gICAgICAgICBn b3RvIGVycjsKLSAKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19zZWxmdGVz dF9mYWlsZWQoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1H RU4yLCBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0r ICAgIH0KLSsKLSsgICAgaWYgKEZJUFNfbW9kZSgpICYmIChMICE9IDEwMjQgfHwgTiAhPSAxNjAp ICYmCi0rICAgICAgICAoTCAhPSAyMDQ4IHx8IE4gIT0gMjI0KSAmJiAoTCAhPSAyMDQ4IHx8IE4g IT0gMjU2KSAmJgotKyAgICAgICAgKEwgIT0gMzA3MiB8fCBOICE9IDI1NikpIHsKLSsgICAgICAg IERTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTjIsIERTQV9SX0tFWV9TSVpFX0lOVkFM SUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsjIGVuZGlmCi0rCi0gICAgIGlmIChl dnBtZCA9PSBOVUxMKSB7Ci0gICAgICAgICBpZiAoTiA9PSAxNjApCi0gICAgICAgICAgICAgZXZw bWQgPSBFVlBfc2hhMSgpOwotQEAgLTQyMCw5ICs0NTAsMTAgQEAgaW50IGRzYV9idWlsdGluX3Bh cmFtZ2VuMihEU0EgKnJldCwgc2l6ZQotICAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSAgICAg ICAgICAgICAvKiBQcm92aWRlZCBzZWVkIGRpZG4ndCBwcm9kdWNlIGEgcHJpbWU6IGVycm9yICov Ci0gICAgICAgICAgICAgaWYgKHNlZWRfaW4pIHsKLS0gICAgICAgICAgICAgICAgb2sgPSAwOwot LSAgICAgICAgICAgICAgICBEU0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4yLCBEU0Ff Ul9RX05PVF9QUklNRSk7Ci0tICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgICAg ICAgICAvKiBEaWZmZXJlbnQgc2VlZF9vdXQgd2lsbCBpbmRpY2F0ZSB0aGF0IHNlZWRfaW4KLSsg ICAgICAgICAgICAgICAgICogZGlkIG5vdCBnZW5lcmF0ZSBwcmltZXMuCi0rICAgICAgICAgICAg ICAgICAqLwotKyAgICAgICAgICAgICAgICBzZWVkX2luID0gTlVMTDsKLSAgICAgICAgICAgICB9 Ci0gCi0gICAgICAgICAgICAgLyogZG8gYSBjYWxsYmFjayBjYWxsICovCi1AQCAtNTA4LDExICs1 MzksMTQgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuMihEU0EgKnJldCwgc2l6ZQotICAgICAg ICAgICAgIGlmIChjb3VudGVyID49IChpbnQpKDQgKiBMKSkKLSAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICB9Ci0rI2lmIDAKLSsgICAgICAgIC8qIENhbm5vdCBoYXBwZW4gKi8KLSAg ICAgICAgIGlmIChzZWVkX2luKSB7Ci0gICAgICAgICAgICAgb2sgPSAwOwotICAgICAgICAgICAg IERTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTjIsIERTQV9SX0lOVkFMSURfUEFSQU1F VEVSUyk7Ci0gICAgICAgICAgICAgZ290byBlcnI7Ci0gICAgICAgICB9Ci0rI2VuZGlmCi0gICAg IH0KLSAgZW5kOgotICAgICBpZiAoIUJOX0dFTkNCX2NhbGwoY2IsIDIsIDEpKQotQEAgLTU4Myw3 ICs2MTcsNyBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4yKERTQSAqcmV0LCBzaXplCi0gICAg ICAgICBCTl9mcmVlKHJldC0+Zyk7Ci0gICAgICAgICByZXQtPmcgPSBCTl9kdXAoZyk7Ci0gICAg ICAgICBpZiAocmV0LT5wID09IE5VTEwgfHwgcmV0LT5xID09IE5VTEwgfHwgcmV0LT5nID09IE5V TEwpIHsKLS0gICAgICAgICAgICBvayA9IC0xOwotKyAgICAgICAgICAgIG9rID0gMDsKLSAgICAg ICAgICAgICBnb3RvIGVycjsKLSAgICAgICAgIH0KLSAgICAgICAgIGlmIChjb3VudGVyX3JldCAh PSBOVUxMKQotQEAgLTYwMSwzICs2MzUsNTMgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuMihE U0EgKnJldCwgc2l6ZQotICAgICBFVlBfTURfQ1RYX2ZyZWUobWN0eCk7Ci0gICAgIHJldHVybiBv azsKLSB9Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBGSVBTX2RzYV9idWlsdGlu X3BhcmFtZ2VuMihEU0EgKnJldCwgc2l6ZV90IEwsIHNpemVfdCBOLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpzZWVkX2luLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2VlZF9s ZW4sIGludCBpZHgsIHVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0LAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk5fR0VOQ0IgKmNiKQotK3sKLSsgICAgcmV0 dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuMihyZXQsIEwsIE4sIGV2cG1kLCBzZWVkX2luLCBzZWVk X2xlbiwKLSsgICAgICAgIGlkeCwgc2VlZF9vdXQsIGNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwot K30KLSsKLStpbnQgRklQU19kc2FfcGFyYW1nZW5fY2hlY2tfZyhEU0EgKmRzYSkKLSt7Ci0rICAg IEJOX0NUWCAqY3R4OwotKyAgICBCSUdOVU0gKnRtcDsKLSsgICAgQk5fTU9OVF9DVFggKm1vbnQg PSBOVUxMOwotKyAgICBpbnQgcnYgPSAtMTsKLSsKLSsgICAgY3R4ID0gQk5fQ1RYX25ldygpOwot KyAgICBpZiAoY3R4ID09IE5VTEwpCi0rICAgICAgICByZXR1cm4gLTE7Ci0rICAgIEJOX0NUWF9z dGFydChjdHgpOwotKyAgICBpZiAoQk5fY21wKGRzYS0+ZywgQk5fdmFsdWVfb25lKCkpIDw9IDAp Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKEJOX2NtcChkc2EtPmcsIGRzYS0+cCkgPj0g MCkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB0bXAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rICAg IGlmICh0bXAgPT0gTlVMTCkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoKG1vbnQ9Qk5f TU9OVF9DVFhfbmV3KCkpID09IE5VTEwpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFC Tl9NT05UX0NUWF9zZXQobW9udCxkc2EtPnAsY3R4KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAg ICAvKiBXb3JrIG91dCBnXnEgbW9kIHAgKi8KLSsgICAgaWYgKCFCTl9tb2RfZXhwX21vbnQodG1w LGRzYS0+Zyxkc2EtPnEsIGRzYS0+cCwgY3R4LCBtb250KSkKLSsgICAgICAgIGdvdG8gZXJyOwot KyAgICBpZiAoIUJOX2NtcCh0bXAsIEJOX3ZhbHVlX29uZSgpKSkKLSsgICAgICAgIHJ2ID0gMTsK LSsgICAgZWxzZQotKyAgICAgICAgcnYgPSAwOwotKyBlcnI6Ci0rICAgIEJOX0NUWF9lbmQoY3R4 KTsKLSsgICAgQk5fTU9OVF9DVFhfZnJlZShtb250KTsKLSsgICAgQk5fQ1RYX2ZyZWUoY3R4KTsK LSsgICAgcmV0dXJuIHJ2OwotK30KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBo L2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2RzYS9kc2Ff a2V5LmMKLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzCTIwMTgt MDMtMjcgMTU6NTA6MzguMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvY3J5cHRv L2RzYS9kc2Ffa2V5LmMJMjAxOC0wMy0yOSAxNDo0NDoyNC42MjgyMzY2ODkgKzAyMDAKLUBAIC0x MywxMCArMTMsNDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlICJkc2Ff bG9jbC5oIgotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGluY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgotKyMgaW5jbHVkZSAiaW50ZXJuYWwvZmlwc19pbnQuaCIKLSsKLStzdGF0aWMgaW50IGZp cHNfY2hlY2tfZHNhKERTQSAqZHNhKQotK3sKLSsgICAgRVZQX1BLRVkgKnBrOwotKyAgICB1bnNp Z25lZCBjaGFyIHRic1tdID0gIkRTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsKLSsgICAgaW50IHJl dCA9IDA7Ci0rCi0rICAgIGlmICgocGsgPSBFVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsgICAg ICAgIGdvdG8gZXJyOwotKwotKyAgICBFVlBfUEtFWV9zZXQxX0RTQShwaywgZHNhKTsKLSsKLSsg ICAgaWYgKGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwgTlVMTCwgMCwgTlVM TCwgMCwgTlVMTCkpCi0rICAgICAgICByZXQgPSAxOwotKwotKyBlcnI6Ci0rICAgIGlmIChyZXQg PT0gMCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19EU0EsIEZJUFNfUl9Q QUlSV0lTRV9URVNUX0ZBSUxFRCk7Ci0rICAgICAgICBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7 Ci0rICAgIH0KLSsKLSsgICAgaWYgKHBrKQotKyAgICAgICAgRVZQX1BLRVlfZnJlZShwayk7Ci0r Ci0rICAgIHJldHVybiByZXQ7Ci0rfQotKwotKyNlbmRpZgotKwotIHN0YXRpYyBpbnQgZHNhX2J1 aWx0aW5fa2V5Z2VuKERTQSAqZHNhKTsKLSAKLSBpbnQgRFNBX2dlbmVyYXRlX2tleShEU0EgKmRz YSkKLSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShk c2EtPm1ldGgtPmZsYWdzICYgRFNBX0ZMQUdfRklQU19NRVRIT0QpCi0rICAgICAgICAmJiAhKGRz YS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykpIHsKLSsgICAgICAgIERTQWVycihE U0FfRl9EU0FfR0VORVJBVEVfS0VZLCBEU0FfUl9OT05fRklQU19EU0FfTUVUSE9EKTsKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICB9Ci0rI2VuZGlmCi0gICAgIGlmIChkc2EtPm1ldGgtPmRzYV9r ZXlnZW4pCi0gICAgICAgICByZXR1cm4gZHNhLT5tZXRoLT5kc2Ffa2V5Z2VuKGRzYSk7Ci0gICAg IHJldHVybiBkc2FfYnVpbHRpbl9rZXlnZW4oZHNhKTsKLUBAIC0yOCw2ICs2NywxNCBAQCBzdGF0 aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSkKLSAgICAgQk5fQ1RYICpjdHggPSBO VUxMOwotICAgICBCSUdOVU0gKnB1Yl9rZXkgPSBOVUxMLCAqcHJpdl9rZXkgPSBOVUxMOwotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFn cyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKyAgICAgICAgJiYgKEJOX251bV9iaXRzKGRz YS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFNfR0VOKSkgewotKyAgICAg ICAgRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NN QUxMKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rI2VuZGlmCi0rCi0gICAgIGlmICgo Y3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKQotICAgICAgICAgZ290byBlcnI7Ci0gCi1AQCAt NjUsNiArMTEyLDEzIEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQot IAotICAgICBkc2EtPnByaXZfa2V5ID0gcHJpdl9rZXk7Ci0gICAgIGRzYS0+cHViX2tleSA9IHB1 Yl9rZXk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIWZp cHNfY2hlY2tfZHNhKGRzYSkpIHsKLSsgICAgICAgIGRzYS0+cHViX2tleSA9IE5VTEw7Ci0rICAg ICAgICBkc2EtPnByaXZfa2V5ID0gTlVMTDsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0r I2VuZGlmCi0gICAgIG9rID0gMTsKLSAKLSAgZXJyOgotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgv Y3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2RzYS9kc2Ff b3NzbC5jCi0tLS0gb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMJMjAx OC0wMy0yNyAxNTo1MDozOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlw dG8vZHNhL2RzYV9vc3NsLmMJMjAxOC0wMy0yOSAxNDo0NDoyNC42MjkyMzY3MTIgKzAyMDAKLUBA IC0xNSw2ICsxNSw5IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0gI2luY2x1ZGUgImRz YV9sb2NsLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHN0YXRpYyBEU0Ff U0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgRFNB ICpkc2EpOwotIHN0YXRpYyBpbnQgZHNhX3NpZ25fc2V0dXBfbm9fZGlnZXN0KERTQSAqZHNhLCBC Tl9DVFggKmN0eF9pbiwgQklHTlVNICoqa2ludnAsCi1AQCAtNjgsNiArNzEsMTkgQEAgc3RhdGlj IERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbgotICAgICBEU0FfU0lHICpyZXQgPSBO VUxMOwotICAgICBpbnQgcnYgPSAwOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYg KEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0RTQV9E T19TSUdOLCBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgcmV0dXJuIE5V TEw7Ci0rICAgIH0KLSsKLSsgICAgaWYgKEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERT QV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKyAgICAgICAgJiYgKEJOX251bV9iaXRzKGRzYS0+cCkg PCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7Ci0rICAgICAgICBEU0FlcnIo RFNBX0ZfRFNBX0RPX1NJR04sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rICAgICAgICBy ZXR1cm4gTlVMTDsKLSsgICAgfQotKyNlbmRpZgotKwotICAgICBtID0gQk5fbmV3KCk7Ci0gICAg IHhyID0gQk5fbmV3KCk7Ci0gICAgIGlmIChtID09IE5VTEwgfHwgeHIgPT0gTlVMTCkKLUBAIC0y NjYsNiArMjgyLDE4IEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAot ICAgICAgICAgRFNBZXJyKERTQV9GX0RTQV9ET19WRVJJRlksIERTQV9SX0JBRF9RX1ZBTFVFKTsK LSAgICAgICAgIHJldHVybiAtMTsKLSAgICAgfQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAg aWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0RT QV9ET19WRVJJRlksIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICByZXR1 cm4gLTE7Ci0rICAgIH0KLSsKLSsgICAgaWYgKEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAm IERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKyAgICAgICAgJiYgKEJOX251bV9iaXRzKGRzYS0+ cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7Ci0rICAgICAgICBEU0Fl cnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsgICAg ICAgIHJldHVybiAtMTsKLSsgICAgfQotKyNlbmRpZgotIAotICAgICBpZiAoQk5fbnVtX2JpdHMo ZHNhLT5wKSA+IE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMpIHsKLSAgICAgICAgIERTQWVy cihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci1AQCAtMzU0 LDYgKzM4Miw5IEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAotIAot IHN0YXRpYyBpbnQgZHNhX2luaXQoRFNBICpkc2EpCi0gewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotICAgICBkc2EtPmZsYWdzIHw9 IERTQV9GTEFHX0NBQ0hFX01PTlRfUDsKLSAgICAgcmV0dXJuICgxKTsKLSB9Ci1kaWZmIC11cCBv cGVuc3NsLTEuMS4waC9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jLmZpcHMgb3BlbnNzbC0xLjEuMGgv Y3J5cHRvL2RzYS9kc2FfcG1ldGguYwotLS0tIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9kc2EvZHNh X3BtZXRoLmMuZmlwcwkyMDE4LTAzLTI3IDE1OjUwOjM4LjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4xLjBoL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMJMjAxOC0wMy0yOSAxNDo0NDoyNC42 MjkyMzY3MTIgKzAyMDAKLUBAIC0yMTIsOCArMjEyLDggQEAgc3RhdGljIGludCBwa2V5X2RzYV9w YXJhbWdlbihFVlBfUEtFWV9DVAotICAgICAgICAgQk5fR0VOQ0JfZnJlZShwY2IpOwotICAgICAg ICAgcmV0dXJuIDA7Ci0gICAgIH0KLS0gICAgcmV0ID0gZHNhX2J1aWx0aW5fcGFyYW1nZW4oZHNh LCBkY3R4LT5uYml0cywgZGN0eC0+cWJpdHMsIGRjdHgtPnBtZCwKLS0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgcGNiKTsKLSsgICAgcmV0 ID0gZHNhX2J1aWx0aW5fcGFyYW1nZW4yKGRzYSwgZGN0eC0+bmJpdHMsIGRjdHgtPnFiaXRzLCBk Y3R4LT5wbWQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIC0xLCBO VUxMLCBOVUxMLCBOVUxMLCBwY2IpOwotICAgICBCTl9HRU5DQl9mcmVlKHBjYik7Ci0gICAgIGlm IChyZXQpCi0gICAgICAgICBFVlBfUEtFWV9hc3NpZ25fRFNBKHBrZXksIGRzYSk7Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZWMvZWNkaF9vc3NsLmMuZmlwcyBvcGVuc3NsLTEuMS4w aC9jcnlwdG8vZWMvZWNkaF9vc3NsLmMKLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZWMvZWNk aF9vc3NsLmMuZmlwcwkyMDE4LTAzLTI3IDE1OjUwOjM4LjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4xLjBoL2NyeXB0by9lYy9lY2RoX29zc2wuYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYy OTIzNjcxMiArMDIwMAotQEAgLTMzLDkgKzMzLDIwIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZWMu aD4KLSAjaW5jbHVkZSAiZWNfbGNsLmgiCi0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gaW50IG9zc2xfZWNkaF9jb21wdXRl X2tleSh1bnNpZ25lZCBjaGFyICoqcHNlYywgc2l6ZV90ICpwc2VjbGVuLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgRUNfUE9JTlQgKnB1Yl9rZXksIGNvbnN0IEVDX0tFWSAqZWNk aCkKLSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWls ZWQoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRUNESF9DT01QVVRFX0tFWSwgRklQU19S X0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIHJldHVybiAtMTsKLSsgICAgfQotKyNl bmRpZgotKwotICAgICBpZiAoZWNkaC0+Z3JvdXAtPm1ldGgtPmVjZGhfY29tcHV0ZV9rZXkgPT0g TlVMTCkgewotICAgICAgICAgRUNlcnIoRUNfRl9PU1NMX0VDREhfQ09NUFVURV9LRVksIEVDX1Jf Q1VSVkVfRE9FU19OT1RfU1VQUE9SVF9FQ0RIKTsKLSAgICAgICAgIHJldHVybiAwOwotZGlmZiAt dXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2VjL2VjZHNhX29zc2wuYy5maXBzIG9wZW5zc2wtMS4x LjBoL2NyeXB0by9lYy9lY2RzYV9vc3NsLmMKLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZWMv ZWNkc2Ffb3NzbC5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOC4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZWMvZWNkc2Ffb3NzbC5jCTIwMTgtMDMtMjkgMTQ6NDQ6 MjQuNjI5MjM2NzEyICswMjAwCi1AQCAtMTUsNiArMTUsMTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNz bC9lYy5oPgotICNpbmNsdWRlICJlY19sY2wuaCIKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r IyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSBpbnQgb3NzbF9lY2RzYV9z aWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwKLSAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZywgdW5zaWduZWQgaW50ICpzaWdsZW4s Ci0gICAgICAgICAgICAgICAgICAgICBjb25zdCBCSUdOVU0gKmtpbnYsIGNvbnN0IEJJR05VTSAq ciwgRUNfS0VZICplY2tleSkKLUBAIC0yMTcsNiArMjIxLDEzIEBAIEVDRFNBX1NJRyAqb3NzbF9l Y2RzYV9zaWduX3NpZyhjb25zdCB1bnMKLSAgICAgRUNEU0FfU0lHICpyZXQ7Ci0gICAgIGNvbnN0 IEJJR05VTSAqcHJpdl9rZXk7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfT1NTTF9FQ0RT QV9TSUdOX1NJRywgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIHJldHVy biBOVUxMOwotKyAgICB9Ci0rI2VuZGlmCi0rCi0gICAgIGdyb3VwID0gRUNfS0VZX2dldDBfZ3Jv dXAoZWNrZXkpOwotICAgICBwcml2X2tleSA9IEVDX0tFWV9nZXQwX3ByaXZhdGVfa2V5KGVja2V5 KTsKLSAKLUBAIC0zNjYsNiArMzc3LDEzIEBAIGludCBvc3NsX2VjZHNhX3ZlcmlmeV9zaWcoY29u c3QgdW5zaWduZWQKLSAgICAgY29uc3QgRUNfR1JPVVAgKmdyb3VwOwotICAgICBjb25zdCBFQ19Q T0lOVCAqcHViX2tleTsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX3Nl bGZ0ZXN0X2ZhaWxlZCgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9PU1NMX0VDRFNBX1ZF UklGWV9TSUcsIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICByZXR1cm4g TlVMTDsKLSsgICAgfQotKyNlbmRpZgotKwotICAgICAvKiBjaGVjayBpbnB1dCB2YWx1ZXMgKi8K LSAgICAgaWYgKGVja2V5ID09IE5VTEwgfHwgKGdyb3VwID0gRUNfS0VZX2dldDBfZ3JvdXAoZWNr ZXkpKSA9PSBOVUxMIHx8Ci0gICAgICAgICAocHViX2tleSA9IEVDX0tFWV9nZXQwX3B1YmxpY19r ZXkoZWNrZXkpKSA9PSBOVUxMIHx8IHNpZyA9PSBOVUxMKSB7Ci1kaWZmIC11cCBvcGVuc3NsLTEu MS4waC9jcnlwdG8vZWMvZWNfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZWMvZWNf a2V5LmMKLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZWMvZWNfa2V5LmMuZmlwcwkyMDE4LTAz LTI3IDE1OjUwOjM4LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9l Yy9lY19rZXkuYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzMDIzNjczNiArMDIwMAotQEAgLTE3Nywx NCArMTc3LDYxIEBAIGludCBFQ19LRVlfdXBfcmVmKEVDX0tFWSAqcikKLSAgICAgcmV0dXJuICgo aSA+IDEpID8gMSA6IDApOwotIH0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rIyBpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjIGluY2x1ZGUgImludGVybmFsL2ZpcHNfaW50LmgiCi0r Ci0rc3RhdGljIGludCBmaXBzX2NoZWNrX2VjKEVDX0tFWSAqa2V5KQotK3sKLSsgICAgRVZQX1BL RVkgKnBrOwotKyAgICB1bnNpZ25lZCBjaGFyIHRic1tdID0gIkVDRFNBIFBhaXJ3aXNlIENoZWNr IERhdGEiOwotKyAgICBpbnQgcmV0ID0gMDsKLSsKLSsgICAgaWYgKCFFQ19LRVlfY2FuX3NpZ24o a2V5KSkgLyogbm8gdGVzdCBmb3Igbm9uLXNpZ25pbmcga2V5cyAqLwotKyAgICAgICAgcmV0dXJu IDE7Ci0rCi0rICAgIGlmICgocGsgPSBFVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsgICAgICAg IGdvdG8gZXJyOwotKwotKyAgICBFVlBfUEtFWV9zZXQxX0VDX0tFWShwaywga2V5KTsKLSsKLSsg ICAgaWYgKGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwgTlVMTCwgMCwgTlVM TCwgMCwgTlVMTCkpCi0rICAgICAgICByZXQgPSAxOwotKwotKyBlcnI6Ci0rICAgIGlmIChyZXQg PT0gMCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19FQywgRklQU19SX1BB SVJXSVNFX1RFU1RfRkFJTEVEKTsKLSsgICAgICAgIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsK LSsgICAgfQotKyAgICBpZiAocGspCi0rICAgICAgICBFVlBfUEtFWV9mcmVlKHBrKTsKLSsgICAg cmV0dXJuIHJldDsKLSt9Ci0rCi0rI2VuZGlmCi0rCi0gaW50IEVDX0tFWV9nZW5lcmF0ZV9rZXko RUNfS0VZICplY2tleSkKLSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19z ZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAgRklQU2VycihFQ19GX0VDX0tFWV9HRU5FUkFU RV9LRVksIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICByZXR1cm4gMDsK LSsgICAgfQotKyNlbmRpZgotICAgICBpZiAoZWNrZXkgPT0gTlVMTCB8fCBlY2tleS0+Z3JvdXAg PT0gTlVMTCkgewotICAgICAgICAgRUNlcnIoRUNfRl9FQ19LRVlfR0VORVJBVEVfS0VZLCBFUlJf Ul9QQVNTRURfTlVMTF9QQVJBTUVURVIpOwotICAgICAgICAgcmV0dXJuIDA7Ci0gICAgIH0KLS0g ICAgaWYgKGVja2V5LT5tZXRoLT5rZXlnZW4gIT0gTlVMTCkKLS0gICAgICAgIHJldHVybiBlY2tl eS0+bWV0aC0+a2V5Z2VuKGVja2V5KTsKLSsgICAgaWYgKGVja2V5LT5tZXRoLT5rZXlnZW4gIT0g TlVMTCkgewotKyAgICAgICAgaW50IHJ2ID0gZWNrZXktPm1ldGgtPmtleWdlbihlY2tleSk7Ci0r I2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICAgICAgaWYgKHJ2ID4gMCAmJiBGSVBTX21vZGUoKSkg ewotKyAgICAgICAgICAgIHJ2ID0gZmlwc19jaGVja19lYyhlY2tleSk7Ci0rICAgICAgICB9Ci0r I2VuZGlmCi0rICAgICAgICByZXR1cm4gcnY7Ci0rICAgIH0KLSAgICAgRUNlcnIoRUNfRl9FQ19L RVlfR0VORVJBVEVfS0VZLCBFQ19SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEKTsKLSAgICAgcmV0 dXJuIDA7Ci0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2Vyci9lcnJfYWxsLmMu ZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZXJyL2Vycl9hbGwuYwotLS0tIG9wZW5zc2wtMS4x LjBoL2NyeXB0by9lcnIvZXJyX2FsbC5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOC4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZXJyL2Vycl9hbGwuYwkyMDE4LTAz LTI5IDE0OjQ0OjI0LjYzMDIzNjczNiArMDIwMAotQEAgLTQzLDkgKzQzLDYgQEAKLSBpbnQgZXJy X2xvYWRfY3J5cHRvX3N0cmluZ3NfaW50KHZvaWQpCi0gewotICAgICBpZiAoCi0tI2lmZGVmIE9Q RU5TU0xfRklQUwotLSAgICAgICAgRklQU19zZXRfZXJyb3JfY2FsbGJhY2tzKEVSUl9wdXRfZXJy b3IsIEVSUl9hZGRfZXJyb3JfdmRhdGEpID09IDAgfHwKLS0jZW5kaWYKLSAjaWZuZGVmIE9QRU5T U0xfTk9fRVJSCi0gICAgICAgICBFUlJfbG9hZF9FUlJfc3RyaW5ncygpID09IDAgfHwgICAgLyog aW5jbHVkZSBlcnJvciBzdHJpbmdzIGZvciBTWVNlcnIgKi8KLSAgICAgICAgIEVSUl9sb2FkX0JO X3N0cmluZ3MoKSA9PSAwIHx8Ci1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZXZwL2Nf YWxsYy5jLmZpcHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2V2cC9jX2FsbGMuYwotLS0tIG9wZW5z c2wtMS4xLjBoL2NyeXB0by9ldnAvY19hbGxjLmMuZmlwcwkyMDE4LTAzLTI3IDE1OjUwOjM4LjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9ldnAvY19hbGxjLmMJMjAx OC0wMy0yOSAxNDo0NDoyNC42MzAyMzY3MzYgKzAyMDAKLUBAIC0xNyw2ICsxNyw5IEBACi0gdm9p ZCBvcGVuc3NsX2FkZF9hbGxfY2lwaGVyc19pbnQodm9pZCkKLSB7Ci0gCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotKyAgICBpZiAoIUZJUFNfbW9kZSgpKSB7Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVO U1NMX05PX0RFUwotICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NmYigpKTsKLSAgICAgRVZQ X2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIxKCkpOwotQEAgLTIxNyw0ICsyMjAsNzAgQEAgdm9pZCBv cGVuc3NsX2FkZF9hbGxfY2lwaGVyc19pbnQodm9pZCkKLSAgICAgRVZQX2FkZF9jaXBoZXIoRVZQ X2NoYWNoYTIwX3BvbHkxMzA1KCkpOwotICMgZW5kaWYKLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rICAgIH0gZWxzZSB7Ci0rIyBpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSsgICAgICAg IEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jZmIoKSk7Ci0rCi0rICAgICAgICBFVlBfYWRk X2NpcGhlcihFVlBfZGVzX2VkZTNfb2ZiKCkpOwotKwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIo RVZQX2Rlc19lZGUzX2NiYygpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rl c19lZGUzX2NiYywgIkRFUzMiKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rl c19lZGUzX2NiYywgImRlczMiKTsKLSsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNf ZWRlMygpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2VjYiwg IkRFUy1FREUzLUVDQiIpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2Vk ZTNfZWNiLCAiZGVzLWVkZTMtZWNiIik7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZTNfd3JhcCgpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2lkX3NtaW1l X2FsZ19DTVMzREVTd3JhcCwgImRlczMtd3JhcCIpOwotKyMgZW5kaWYKLSsKLSsjIGlmbmRlZiBP UEVOU1NMX05PX0FFUwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZWNiKCkp OwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwotKyAgICAgICAg RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xMjhfY2ZiMSgpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTI4X2NmYjgoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9vZmIoKSk7 Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jdHIoKSk7Ci0rICAgICAgICBF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzEyOF94dHMoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEy OF9jY20oKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF93cmFwKCkpOwot KyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05faWRfYWVzMTI4X3dyYXAsICJhZXMxMjgt d3JhcCIpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfd3JhcF9wYWQoKSk7 Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywgIkFFUzEyOCIp OwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMsICJhZXMxMjgi KTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2VjYigpKTsKLSsgICAgICAg IEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMTkyX2NmYigpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTkyX2NmYjEoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmI4KCkp OwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfb2ZiKCkpOwotKyAgICAgICAg RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY3RyKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xOTJfZ2NtKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18x OTJfY2NtKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfd3JhcCgpKTsK LSsgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2lkX2FlczE5Ml93cmFwLCAiYWVzMTky LXdyYXAiKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX3dyYXBfcGFkKCkp OwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMsICJBRVMxOTIi KTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCAiYWVzMTky Iik7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9lY2IoKSk7Ci0rICAgICAg ICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7Ci0rICAgICAgICBFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzI1Nl9jZmIoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9jZmIxKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiOCgp KTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X29mYigpKTsKLSsgICAgICAg IEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2N0cigpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMjU2X2djbSgpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MjU2X3h0cygpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NjbSgpKTsK LSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3dyYXAoKSk7Ci0rICAgICAgICBF VlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9pZF9hZXMyNTZfd3JhcCwgImFlczI1Ni13cmFwIik7Ci0r ICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl93cmFwX3BhZCgpKTsKLSsgICAgICAg IEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCAiQUVTMjU2Iik7Ci0rICAgICAg ICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywgImFlczI1NiIpOwotKyMgZW5k aWYKLSsgICAgfQotKyNlbmRpZgotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9l dnAvY19hbGxkLmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZXZwL2NfYWxsZC5jCi0tLS0g b3BlbnNzbC0xLjEuMGgvY3J5cHRvL2V2cC9jX2FsbGQuYy5maXBzCTIwMTgtMDMtMjcgMTU6NTA6 MzguMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2V2cC9jX2FsbGQu YwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzMDIzNjczNiArMDIwMAotQEAgLTE2LDYgKzE2LDkgQEAK LSAKLSB2b2lkIG9wZW5zc2xfYWRkX2FsbF9kaWdlc3RzX2ludCh2b2lkKQotIHsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rICAgIGlmICghRklQU19tb2RlKCkpIHsKLSsjZW5kaWYKLSAjaWZuZGVm IE9QRU5TU0xfTk9fTUQ0Ci0gICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9tZDQoKSk7Ci0gI2VuZGlm Ci1AQCAtNDYsNCArNDksMTUgQEAgdm9pZCBvcGVuc3NsX2FkZF9hbGxfZGlnZXN0c19pbnQodm9p ZCkKLSAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX2JsYWtlMmI1MTIoKSk7Ci0gICAgIEVWUF9hZGRf ZGlnZXN0KEVWUF9ibGFrZTJzMjU2KCkpOwotICNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsgICAgfSBlbHNlIHsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOwotKyAg ICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwgInNzbDMtc2hhMSIpOwotKyAgICAg ICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLCBTTl9zaGEx V2l0aFJTQSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOwotKyAgICAg ICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0 KEVWUF9zaGEzODQoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOwot KyAgICB9Ci0rI2VuZGlmCi0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2V2cC9k aWdlc3QuYy5maXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9ldnAvZGlnZXN0LmMKLS0tLSBvcGVu c3NsLTEuMS4waC9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOC4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZXZwL2RpZ2VzdC5jCTIw MTgtMDMtMjkgMTQ6NDQ6MjQuNjMwMjM2NzM2ICswMjAwCi1AQCAtMTQsNiArMTQsOSBAQAotICNp bmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgotICNpbmNsdWRlICJpbnRlcm5hbC9ldnBfaW50Lmgi Ci0gI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gLyogVGhpcyBjYWxsIGZyZWVzIHJlc291 cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRleHQgKi8KLSBpbnQgRVZQX01EX0NUWF9yZXNl dChFVlBfTURfQ1RYICpjdHgpCi1AQCAtNjEsNiArNjQsMTIgQEAgaW50IEVWUF9EaWdlc3RJbml0 KEVWUF9NRF9DVFggKmN0eCwgY29ucwotIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RY ICpjdHgsIGNvbnN0IEVWUF9NRCAqdHlwZSwgRU5HSU5FICppbXBsKQotIHsKLSAgICAgRVZQX01E X0NUWF9jbGVhcl9mbGFncyhjdHgsIEVWUF9NRF9DVFhfRkxBR19DTEVBTkVEKTsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7Ci0rICAgICAg ICBGSVBTZXJyKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCwgRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVEKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rI2VuZGlmCi0gI2lmbmRlZiBP UEVOU1NMX05PX0VOR0lORQotICAgICAvKgotICAgICAgKiBXaGV0aGVyIGl0J3MgbmljZSBvciBu b3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzIHNvCi1AQCAtMTE0 LDYgKzEyMywxNSBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCi0g ICAgIH0KLSAjZW5kaWYKLSAgICAgaWYgKGN0eC0+ZGlnZXN0ICE9IHR5cGUpIHsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rICAgICAgICBpZiAoRklQU19tb2RlKCkpIHsKLSsgICAgICAgICAgICBp ZiAoISh0eXBlLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpCi0rICAgICAgICAgICAgICAgICYm ICEoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpIHsKLSsgICAg ICAgICAgICAgICAgRVZQZXJyKEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYLCBFVlBfUl9ESVNBQkxF RF9GT1JfRklQUyk7Ci0rICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgIH0K LSsgICAgICAgIH0KLSsjZW5kaWYKLSAgICAgICAgIGlmIChjdHgtPmRpZ2VzdCAmJiBjdHgtPmRp Z2VzdC0+Y3R4X3NpemUpIHsKLSAgICAgICAgICAgICBPUEVOU1NMX2NsZWFyX2ZyZWUoY3R4LT5t ZF9kYXRhLCBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpOwotICAgICAgICAgICAgIGN0eC0+bWRfZGF0 YSA9IE5VTEw7Ci1AQCAtMTQ1LDYgKzE2Myw5IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBf TURfQ1RYICpjdHgsIGMKLSAKLSBpbnQgRVZQX0RpZ2VzdFVwZGF0ZShFVlBfTURfQ1RYICpjdHgs IGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBjb3VudCkKLSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gICAgIHJldHVybiBjdHgt PnVwZGF0ZShjdHgsIGRhdGEsIGNvdW50KTsKLSB9Ci0gCi1AQCAtMTYyLDYgKzE4Myw5IEBAIGlu dCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LAotIHsKLSAgICAgaW50IHJldDsK LSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsj ZW5kaWYKLSAgICAgT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUgPD0gRVZQX01B WF9NRF9TSVpFKTsKLSAgICAgcmV0ID0gY3R4LT5kaWdlc3QtPmZpbmFsKGN0eCwgbWQpOwotICAg ICBpZiAoc2l6ZSAhPSBOVUxMKQotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2V2cC9l X2Flcy5jLmZpcHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2V2cC9lX2Flcy5jCi0tLS0gb3BlbnNz bC0xLjEuMGgvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOC4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZXZwL2VfYWVzLmMJMjAxOC0w My0yOSAxNDo0NDoyNC42MzEyMzY3NjAgKzAyMDAKLUBAIC0xMjYzLDkgKzEyNjMsOSBAQCBzdGF0 aWMgaW50IGFlc19jdHJfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYCi0gICAgIHJldHVybiAxOwotIH0K LSAKLS1CTE9DS19DSVBIRVJfZ2VuZXJpY19wYWNrKE5JRF9hZXMsIDEyOCwgMCkKLS0gICAgQkxP Q0tfQ0lQSEVSX2dlbmVyaWNfcGFjayhOSURfYWVzLCAxOTIsIDApCi0tICAgIEJMT0NLX0NJUEhF Ul9nZW5lcmljX3BhY2soTklEX2FlcywgMjU2LCAwKQotK0JMT0NLX0NJUEhFUl9nZW5lcmljX3Bh Y2soTklEX2FlcywgMTI4LCBFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rICAgIEJMT0NLX0NJUEhFUl9n ZW5lcmljX3BhY2soTklEX2FlcywgMTkyLCBFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rICAgIEJMT0NL X0NJUEhFUl9nZW5lcmljX3BhY2soTklEX2FlcywgMjU2LCBFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0g Ci0gc3RhdGljIGludCBhZXNfZ2NtX2NsZWFudXAoRVZQX0NJUEhFUl9DVFggKmMpCi0gewotQEAg LTEzMTEsNiArMTMxMSwxMSBAQCBzdGF0aWMgaW50IGFlc19nY21fY3RybChFVlBfQ0lQSEVSX0NU WCAqCi0gICAgIGNhc2UgRVZQX0NUUkxfQUVBRF9TRVRfSVZMRU46Ci0gICAgICAgICBpZiAoYXJn IDw9IDApCi0gICAgICAgICAgICAgcmV0dXJuIDA7Ci0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsg ICAgICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKGMtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05f RklQU19BTExPVykKLSsgICAgICAgICAgICAmJiBhcmcgPCAxMikKLSsgICAgICAgICAgICByZXR1 cm4gMDsKLSsjIGVuZGlmCi0gICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIElWIGlmIG5l ZWRlZCAqLwotICAgICAgICAgaWYgKChhcmcgPiBFVlBfTUFYX0lWX0xFTkdUSCkgJiYgKGFyZyA+ IGdjdHgtPml2bGVuKSkgewotICAgICAgICAgICAgIGlmIChnY3R4LT5pdiAhPSBFVlBfQ0lQSEVS X0NUWF9pdl9ub2NvbnN0KGMpKQotQEAgLTE3NzEsMTEgKzE3NzYsMTQgQEAgc3RhdGljIGludCBh ZXNfZ2NtX2NpcGhlcihFVlBfQ0lQSEVSX0NUWAotICAgICAgICAgICAgICAgICB8IEVWUF9DSVBI X0NVU1RPTV9DT1BZKQotIAotIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywgMTI4LCAxLCAx MiwgZ2NtLCBHQ00sCi0tICAgICAgICAgICAgICAgICAgICBFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQ SEVSIHwgQ1VTVE9NX0ZMQUdTKQotKyAgICAgICAgICAgICAgICAgICAgRVZQX0NJUEhfRkxBR19G SVBTIHwgRVZQX0NJUEhfRkxBR19BRUFEX0NJUEhFUiB8Ci0rICAgICAgICAgICAgICAgICAgICBD VVNUT01fRkxBR1MpCi0gICAgIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywgMTkyLCAxLCAx MiwgZ2NtLCBHQ00sCi0tICAgICAgICAgICAgICAgICAgICBFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQ SEVSIHwgQ1VTVE9NX0ZMQUdTKQotKyAgICAgICAgICAgICAgICAgICAgRVZQX0NJUEhfRkxBR19G SVBTIHwgRVZQX0NJUEhfRkxBR19BRUFEX0NJUEhFUiB8Ci0rICAgICAgICAgICAgICAgICAgICBD VVNUT01fRkxBR1MpCi0gICAgIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywgMjU2LCAxLCAx MiwgZ2NtLCBHQ00sCi0tICAgICAgICAgICAgICAgICAgICBFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQ SEVSIHwgQ1VTVE9NX0ZMQUdTKQotKyAgICAgICAgICAgICAgICAgICAgRVZQX0NJUEhfRkxBR19G SVBTIHwgRVZQX0NJUEhfRkxBR19BRUFEX0NJUEhFUiB8Ci0rICAgICAgICAgICAgICAgICAgICBD VVNUT01fRkxBR1MpCi0gCi0gc3RhdGljIGludCBhZXNfeHRzX2N0cmwoRVZQX0NJUEhFUl9DVFgg KmMsIGludCB0eXBlLCBpbnQgYXJnLCB2b2lkICpwdHIpCi0gewotQEAgLTE5MTAsNiArMTkxOCwx NCBAQCBzdGF0aWMgaW50IGFlc194dHNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYCi0gICAgICAgICBy ZXR1cm4gMDsKLSAgICAgaWYgKCFvdXQgfHwgIWluIHx8IGxlbiA8IEFFU19CTE9DS19TSVpFKQot ICAgICAgICAgcmV0dXJuIDA7Ci0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgLyogUmVxdWly ZW1lbnQgb2YgU1A4MDAtMzhFICovCi0rICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKGN0eC0+Zmxh Z3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSAmJgotKyAgICAgICAgKGxlbiA+ICgx VUwgPDwgMjApICogMTYpKSB7Ci0rICAgICAgICBFVlBlcnIoRVZQX0ZfQUVTX1hUU19DSVBIRVIs IEVWUF9SX1RPT19MQVJHRSk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyMgZW5kaWYK LSAgICAgaWYgKHhjdHgtPnN0cmVhbSkKLSAgICAgICAgICgqeGN0eC0+c3RyZWFtKSAoaW4sIG91 dCwgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICB4Y3R4LT54dHMua2V5MSwgeGN0eC0+ eHRzLmtleTIsCi1AQCAtMTkyNyw4ICsxOTQzLDEwIEBAIHN0YXRpYyBpbnQgYWVzX3h0c19jaXBo ZXIoRVZQX0NJUEhFUl9DVFgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFVlBfQ0lQSF9B TFdBWVNfQ0FMTF9JTklUIHwgRVZQX0NJUEhfQ1RSTF9JTklUIFwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgfCBFVlBfQ0lQSF9DVVNUT01fQ09QWSkKLSAKLS1CTE9DS19DSVBIRVJfY3VzdG9t KE5JRF9hZXMsIDEyOCwgMSwgMTYsIHh0cywgWFRTLCBYVFNfRkxBR1MpCi0tICAgIEJMT0NLX0NJ UEhFUl9jdXN0b20oTklEX2FlcywgMjU2LCAxLCAxNiwgeHRzLCBYVFMsIFhUU19GTEFHUykKLStC TE9DS19DSVBIRVJfY3VzdG9tKE5JRF9hZXMsIDEyOCwgMSwgMTYsIHh0cywgWFRTLAotKyAgICAg ICAgICAgICAgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTIHwgWFRTX0ZMQUdTKQotKyAgICBCTE9D S19DSVBIRVJfY3VzdG9tKE5JRF9hZXMsIDI1NiwgMSwgMTYsIHh0cywgWFRTLAotKyAgICAgICAg ICAgICAgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTIHwgWFRTX0ZMQUdTKQotIAotIHN0YXRpYyBp bnQgYWVzX2NjbV9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjLCBpbnQgdHlwZSwgaW50IGFyZywgdm9p ZCAqcHRyKQotIHsKLUBAIC0yMTkyLDExICsyMjEwLDExIEBAIHN0YXRpYyBpbnQgYWVzX2NjbV9j aXBoZXIoRVZQX0NJUEhFUl9DVFgKLSAjZGVmaW5lIGFlc19jY21fY2xlYW51cCBOVUxMCi0gCi0g QkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLCAxMjgsIDEsIDEyLCBjY20sIENDTSwKLS0gICAg ICAgICAgICAgICAgICAgIEVWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIgfCBDVVNUT01fRkxBR1Mp Ci0rICAgICAgICAgICAgICAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFMgfCBFVlBfQ0lQSF9GTEFH X0FFQURfQ0lQSEVSIHwgQ1VTVE9NX0ZMQUdTKQotICAgICBCTE9DS19DSVBIRVJfY3VzdG9tKE5J RF9hZXMsIDE5MiwgMSwgMTIsIGNjbSwgQ0NNLAotLSAgICAgICAgICAgICAgICAgICAgICAgIEVW UF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIgfCBDVVNUT01fRkxBR1MpCi0rICAgICAgICAgICAgICAg ICAgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTIHwgRVZQX0NJUEhfRkxBR19BRUFEX0NJUEhFUiB8 IENVU1RPTV9GTEFHUykKLSAgICAgQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLCAyNTYsIDEs IDEyLCBjY20sIENDTSwKLS0gICAgICAgICAgICAgICAgICAgICAgICBFVlBfQ0lQSF9GTEFHX0FF QURfQ0lQSEVSIHwgQ1VTVE9NX0ZMQUdTKQotKyAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9D SVBIX0ZMQUdfRklQUyB8IEVWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIgfCBDVVNUT01fRkxBR1Mp Ci0gCi0gdHlwZWRlZiBzdHJ1Y3QgewotICAgICB1bmlvbiB7Ci1AQCAtMjI4OSw3ICsyMzA3LDcg QEAgc3RhdGljIGludCBhZXNfd3JhcF9jaXBoZXIoRVZQX0NJUEhFUl9DVAotICAgICByZXR1cm4g cnYgPyAoaW50KXJ2IDogLTE7Ci0gfQotIAotLSNkZWZpbmUgV1JBUF9GTEFHUyAgICAgIChFVlBf Q0lQSF9XUkFQX01PREUgXAotKyNkZWZpbmUgV1JBUF9GTEFHUyAgICAgIChFVlBfQ0lQSF9XUkFQ X01PREUgfCBFVlBfQ0lQSF9GTEFHX0ZJUFMgXAotICAgICAgICAgICAgICAgICB8IEVWUF9DSVBI X0NVU1RPTV9JViB8IEVWUF9DSVBIX0ZMQUdfQ1VTVE9NX0NJUEhFUiBcCi0gICAgICAgICAgICAg ICAgIHwgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5JVCB8IEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9B U04xKQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2V2cC9lX2RlczMuYy5maXBz IG9wZW5zc2wtMS4xLjBoL2NyeXB0by9ldnAvZV9kZXMzLmMKLS0tLSBvcGVuc3NsLTEuMS4waC9j cnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOC4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZXZwL2VfZGVzMy5jCTIwMTgtMDMtMjkgMTQ6 NDQ6MjQuNjMxMjM2NzYwICswMjAwCi1AQCAtMjExLDE2ICsyMTEsMTkgQEAgQkxPQ0tfQ0lQSEVS X2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksCi0gIyBkZWZpbmUgZGVzX2VkZTNfY2JjX2NpcGhl ciBkZXNfZWRlX2NiY19jaXBoZXIKLSAjIGRlZmluZSBkZXNfZWRlM19lY2JfY2lwaGVyIGRlc19l ZGVfZWNiX2NpcGhlcgotICAgICBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlMywgREVTX0VERV9L RVksIE5JRF9kZXNfZWRlMywgOCwgMjQsIDgsIDY0LAotLSAgICAgICAgICAgICAgICAgIEVWUF9D SVBIX1JBTkRfS0VZIHwgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0tICAgICAgICAgICAg ICAgICAgZGVzX2VkZTNfaW5pdF9rZXksIE5VTEwsIE5VTEwsIE5VTEwsIGRlczNfY3RybCkKLSsg ICAgICAgICAgICAgICAgICBFVlBfQ0lQSF9SQU5EX0tFWSB8IEVWUF9DSVBIX0ZMQUdfRklQUyB8 Ci0rICAgICAgICAgICAgICAgICAgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsIGRlc19lZGUz X2luaXRfa2V5LCBOVUxMLCBOVUxMLCBOVUxMLAotKyAgICAgICAgICAgICAgICAgIGRlczNfY3Ry bCkKLSAKLSAgICAgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsIERFU19FREVfS0VZLCBO SURfZGVzX2VkZTMsIDI0LCA4LCAxLAotLSAgICAgICAgICAgICAgICAgICAgIEVWUF9DSVBIX1JB TkRfS0VZIHwgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0tICAgICAgICAgICAgICAgICAg ICAgZGVzX2VkZTNfaW5pdF9rZXksIE5VTEwsIE5VTEwsIE5VTEwsIGRlczNfY3RybCkKLSsgICAg ICAgICAgICAgICAgICAgICBFVlBfQ0lQSF9SQU5EX0tFWSB8IEVWUF9DSVBIX0ZMQUdfRklQUyB8 Ci0rICAgICAgICAgICAgICAgICAgICAgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsIGRlc19l ZGUzX2luaXRfa2V5LCBOVUxMLCBOVUxMLAotKyAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGRl czNfY3RybCkKLSAKLSAgICAgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsIERFU19FREVf S0VZLCBOSURfZGVzX2VkZTMsIDI0LCA4LCA4LAotLSAgICAgICAgICAgICAgICAgICAgIEVWUF9D SVBIX1JBTkRfS0VZIHwgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0tICAgICAgICAgICAg ICAgICAgICAgZGVzX2VkZTNfaW5pdF9rZXksIE5VTEwsIE5VTEwsIE5VTEwsIGRlczNfY3RybCkK LSsgICAgICAgICAgICAgICAgICAgICBFVlBfQ0lQSF9SQU5EX0tFWSB8IEVWUF9DSVBIX0ZMQUdf RklQUyB8Ci0rICAgICAgICAgICAgICAgICAgICAgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEs IGRlc19lZGUzX2luaXRfa2V5LCBOVUxMLCBOVUxMLAotKyAgICAgICAgICAgICAgICAgICAgIE5V TEwsIGRlczNfY3RybCkKLSAKLSBzdGF0aWMgaW50IGRlc19lZGVfaW5pdF9rZXkoRVZQX0NJUEhF Ul9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKLWRpZmYgLXVwIG9w ZW5zc2wtMS4xLjBoL2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlw dG8vZXZwL2VfbnVsbC5jCi0tLS0gb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2V2cC9lX251bGwuYy5m aXBzCTIwMTgtMDMtMjcgMTU6NTA6MzguMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjEu MGgvY3J5cHRvL2V2cC9lX251bGwuYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzMTIzNjc2MCArMDIw MAotQEAgLTE5LDcgKzE5LDggQEAgc3RhdGljIGludCBudWxsX2NpcGhlcihFVlBfQ0lQSEVSX0NU WCAqYwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNp emVfdCBpbmwpOwotIHN0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIG5fY2lwaGVyID0gewotICAgICBO SURfdW5kZWYsCi0tICAgIDEsIDAsIDAsIDAsCi0rICAgIDEsIDAsIDAsCi0rICAgIEVWUF9DSVBI X0ZMQUdfRklQUywKLSAgICAgbnVsbF9pbml0X2tleSwKLSAgICAgbnVsbF9jaXBoZXIsCi0gICAg IE5VTEwsCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBz IG9wZW5zc2wtMS4xLjBoL2NyeXB0by9ldnAvZXZwX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjEuMGgv Y3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcwkyMDE4LTAzLTI3IDE1OjUwOjM4LjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9ldnAvZXZwX2VuYy5jCTIwMTgtMDMtMjkg MTQ6NDQ6MjQuNjMxMjM2NzYwICswMjAwCi1AQCAtMTYsMTAgKzE2LDE5IEBACi0gI2luY2x1ZGUg PG9wZW5zc2wvZW5naW5lLmg+Ci0gI2luY2x1ZGUgImludGVybmFsL2V2cF9pbnQuaCIKLSAjaW5j bHVkZSAiZXZwX2xvY2wuaCIKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBpbnQgRVZQX0NJUEhFUl9DVFhfcmVzZXQoRVZQX0NJ UEhFUl9DVFggKmMpCi0gewotLSAgICBpZiAoYyA9PSBOVUxMKQotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAgIEZJUFNlcnIo RklQU19GX0VWUF9DSVBIRVJfQ1RYX1JFU0VULCBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQp OwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsjZW5kaWYKLSsgICBpZiAoYyA9PSBOVUxM KQotICAgICAgICAgcmV0dXJuIDE7Ci0gICAgIGlmIChjLT5jaXBoZXIgIT0gTlVMTCkgewotICAg ICAgICAgaWYgKGMtPmNpcGhlci0+Y2xlYW51cCAmJiAhYy0+Y2lwaGVyLT5jbGVhbnVwKGMpKQot QEAgLTM4LDYgKzQ3LDEyIEBAIGludCBFVlBfQ0lQSEVSX0NUWF9yZXNldChFVlBfQ0lQSEVSX0NU WAotIAotIEVWUF9DSVBIRVJfQ1RYICpFVlBfQ0lQSEVSX0NUWF9uZXcodm9pZCkKLSB7Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewotKyAg ICAgICAgRklQU2VycihGSVBTX0ZfRVZQX0NJUEhFUl9DVFhfTkVXLCBGSVBTX1JfRklQU19TRUxG VEVTVF9GQUlMRUQpOwotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSsjZW5kaWYKLSAg ICAgcmV0dXJuIE9QRU5TU0xfemFsbG9jKHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOwotIH0KLSAK LUBAIC02Niw2ICs4MSwxMiBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFgg KmN0Ci0gICAgICAgICAgICAgZW5jID0gMTsKLSAgICAgICAgIGN0eC0+ZW5jcnlwdCA9IGVuYzsK LSAgICAgfQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFp bGVkKCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0VWUF9DSVBIRVJJTklUX0VYLCBGSVBT X1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsj ZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gICAgIC8qCi0gICAgICAqIFdoZXRo ZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29u dGV4dHMgc28KLUBAIC0xMzUsNyArMTU2LDcgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9D SVBIRVJfQ1RYICpjdAotICAgICAgICAgfQotICAgICAgICAgY3R4LT5rZXlfbGVuID0gY2lwaGVy LT5rZXlfbGVuOwotICAgICAgICAgLyogUHJlc2VydmUgd3JhcCBlbmFibGUgZmxhZywgemVybyBl dmVyeXRoaW5nIGVsc2UgKi8KLS0gICAgICAgIGN0eC0+ZmxhZ3MgJj0gRVZQX0NJUEhFUl9DVFhf RkxBR19XUkFQX0FMTE9XOwotKyAgICAgICAgY3R4LT5mbGFncyAmPSBFVlBfQ0lQSEVSX0NUWF9G TEFHX1dSQVBfQUxMT1cgfCBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XOwotICAgICAgICAg aWYgKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0NUUkxfSU5JVCkgewotICAgICAgICAg ICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybChjdHgsIEVWUF9DVFJMX0lOSVQsIDAsIE5VTEwp KSB7Ci0gICAgICAgICAgICAgICAgIGN0eC0+Y2lwaGVyID0gTlVMTDsKLUBAIC0xOTQsNiArMjE1 LDE4IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKLSAgICAgICAg ICAgICByZXR1cm4gMDsKLSAgICAgICAgIH0KLSAgICAgfQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsgICAgLyogQWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1ldGVycyBjaGFuZ2Vz IGFyZSBwZXJtaXNzaWJsZS4KLSsgICAgICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJUFMgZW5h YmxpbmcgYXQgdGhpcyBwb2ludC4KLSsgICAgICovCi0rICAgIGlmIChrZXkgJiYgRklQU19tb2Rl KCkpIHsKLSsgICAgICAgIGlmICghKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdf RklQUykKLSsgICAgICAgICAgICAmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpKSB7Ci0rICAgICAgICAgICAgRVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VY LCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAg ICAgICB9Ci0rICAgIH0KLSsjZW5kaWYKLSAKLSAgICAgaWYgKGtleSB8fCAoY3R4LT5jaXBoZXIt PmZsYWdzICYgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5JVCkpIHsKLSAgICAgICAgIGlmICghY3R4 LT5jaXBoZXItPmluaXQoY3R4LCBrZXksIGl2LCBlbmMpKQotZGlmZiAtdXAgb3BlbnNzbC0xLjEu MGgvY3J5cHRvL2V2cC9ldnBfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZXZwL2V2 cF9lcnIuYwotLS0tIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9ldnAvZXZwX2Vyci5jLmZpcHMJMjAx OC0wMy0yNyAxNTo1MDozOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlw dG8vZXZwL2V2cF9lcnIuYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzMTIzNjc2MCArMDIwMAotQEAg LTI0LDYgKzI0LDcgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBFVlBfc3RyX2Z1bmN0c1tdCi0g ICAgIHtFUlJfRlVOQyhFVlBfRl9BRVNfT0NCX0NJUEhFUiksICJhZXNfb2NiX2NpcGhlciJ9LAot ICAgICB7RVJSX0ZVTkMoRVZQX0ZfQUVTX1Q0X0lOSVRfS0VZKSwgImFlc190NF9pbml0X2tleSJ9 LAotICAgICB7RVJSX0ZVTkMoRVZQX0ZfQUVTX1dSQVBfQ0lQSEVSKSwgImFlc193cmFwX2NpcGhl ciJ9LAotKyAgICB7RVJSX0ZVTkMoRVZQX0ZfQUVTX1hUU19DSVBIRVIpLCAiYWVzX3h0c19jaXBo ZXIifSwKLSAgICAge0VSUl9GVU5DKEVWUF9GX0FMR19NT0RVTEVfSU5JVCksICJhbGdfbW9kdWxl X2luaXQifSwKLSAgICAge0VSUl9GVU5DKEVWUF9GX0NBTUVMTElBX0lOSVRfS0VZKSwgImNhbWVs bGlhX2luaXRfa2V5In0sCi0gICAgIHtFUlJfRlVOQyhFVlBfRl9DSEFDSEEyMF9QT0xZMTMwNV9D VFJMKSwgImNoYWNoYTIwX3BvbHkxMzA1X2N0cmwifSwKLUBAIC0xMTEsNiArMTEyLDcgQEAgc3Rh dGljIEVSUl9TVFJJTkdfREFUQSBFVlBfc3RyX3JlYXNvbnNbXQotICAgICB7RVJSX1JFQVNPTihF VlBfUl9ERUNPREVfRVJST1IpLCAiZGVjb2RlIGVycm9yIn0sCi0gICAgIHtFUlJfUkVBU09OKEVW UF9SX0RJRkZFUkVOVF9LRVlfVFlQRVMpLCAiZGlmZmVyZW50IGtleSB0eXBlcyJ9LAotICAgICB7 RVJSX1JFQVNPTihFVlBfUl9ESUZGRVJFTlRfUEFSQU1FVEVSUyksICJkaWZmZXJlbnQgcGFyYW1l dGVycyJ9LAotKyAgICB7RVJSX1JFQVNPTihFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyksICJkaXNh YmxlZCBmb3IgRklQUyJ9LAotICAgICB7RVJSX1JFQVNPTihFVlBfUl9FUlJPUl9MT0FESU5HX1NF Q1RJT04pLCAiZXJyb3IgbG9hZGluZyBzZWN0aW9uIn0sCi0gICAgIHtFUlJfUkVBU09OKEVWUF9S X0VSUk9SX1NFVFRJTkdfRklQU19NT0RFKSwgImVycm9yIHNldHRpbmcgZmlwcyBtb2RlIn0sCi0g ICAgIHtFUlJfUkVBU09OKEVWUF9SX0VYUEVDVElOR19BTl9ITUFDX0tFWSksICJleHBlY3Rpbmcg YW4gaG1hYyBrZXkifSwKLUBAIC0xNTAsNiArMTUyLDcgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFU QSBFVlBfc3RyX3JlYXNvbnNbXQotICAgICB7RVJSX1JFQVNPTihFVlBfUl9QUklWQVRFX0tFWV9E RUNPREVfRVJST1IpLCAicHJpdmF0ZSBrZXkgZGVjb2RlIGVycm9yIn0sCi0gICAgIHtFUlJfUkVB U09OKEVWUF9SX1BSSVZBVEVfS0VZX0VOQ09ERV9FUlJPUiksICJwcml2YXRlIGtleSBlbmNvZGUg ZXJyb3IifSwKLSAgICAge0VSUl9SRUFTT04oRVZQX1JfUFVCTElDX0tFWV9OT1RfUlNBKSwgInB1 YmxpYyBrZXkgbm90IHJzYSJ9LAotKyAgICB7RVJSX1JFQVNPTihFVlBfUl9UT09fTEFSR0UpLCAi dG9vIGxhcmdlIn0sCi0gICAgIHtFUlJfUkVBU09OKEVWUF9SX1VOS05PV05fQ0lQSEVSKSwgInVu a25vd24gY2lwaGVyIn0sCi0gICAgIHtFUlJfUkVBU09OKEVWUF9SX1VOS05PV05fRElHRVNUKSwg InVua25vd24gZGlnZXN0In0sCi0gICAgIHtFUlJfUkVBU09OKEVWUF9SX1VOS05PV05fT1BUSU9O KSwgInVua25vd24gb3B0aW9uIn0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZXZw L2V2cF9saWIuYy5maXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9ldnAvZXZwX2xpYi5jCi0tLS0g b3BlbnNzbC0xLjEuMGgvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcwkyMDE4LTAzLTI3IDE1OjUw OjM4LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9ldnAvZXZwX2xp Yi5jCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjMxMjM2NzYwICswMjAwCi1AQCAtMTgwLDYgKzE4MCw5 IEBAIGludCBFVlBfQ0lQSEVSX2ltcGxfY3R4X3NpemUoY29uc3QgRVZQX0MKLSBpbnQgRVZQX0Np cGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0gICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCi0gewotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgot ICAgICByZXR1cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCk7Ci0g fQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2V2cC9tX3NoYTEuYy5maXBzIG9w ZW5zc2wtMS4xLjBoL2NyeXB0by9ldnAvbV9zaGExLmMKLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlw dG8vZXZwL21fc2hhMS5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOC4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZXZwL21fc2hhMS5jCTIwMTgtMDMtMjkgMTU6MDQ6 MjMuNTEyMzc1MTc2ICswMjAwCi1AQCAtOTQsNyArOTQsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01E IHNoYTFfbWQgPSB7Ci0gICAgIE5JRF9zaGExLAotICAgICBOSURfc2hhMVdpdGhSU0FFbmNyeXB0 aW9uLAotICAgICBTSEFfRElHRVNUX0xFTkdUSCwKLS0gICAgRVZQX01EX0ZMQUdfRElHQUxHSURf QUJTRU5ULAotKyAgICBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQgfCBFVlBfTURfRkxBR19G SVBTLAotICAgICBpbml0LAotICAgICB1cGRhdGUsCi0gICAgIGZpbmFsLAotQEAgLTE0NCw3ICsx NDQsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTIyNF9tZCA9IHsKLSAgICAgTklEX3NoYTIy NCwKLSAgICAgTklEX3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uLAotICAgICBTSEEyMjRfRElHRVNU X0xFTkdUSCwKLS0gICAgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKyAgICBFVlBfTURf RkxBR19ESUdBTEdJRF9BQlNFTlQgfCBFVlBfTURfRkxBR19GSVBTLAotICAgICBpbml0MjI0LAot ICAgICB1cGRhdGUyMjQsCi0gICAgIGZpbmFsMjI0LAotQEAgLTE2Myw3ICsxNjMsNyBAQCBzdGF0 aWMgY29uc3QgRVZQX01EIHNoYTI1Nl9tZCA9IHsKLSAgICAgTklEX3NoYTI1NiwKLSAgICAgTklE X3NoYTI1NldpdGhSU0FFbmNyeXB0aW9uLAotICAgICBTSEEyNTZfRElHRVNUX0xFTkdUSCwKLS0g ICAgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKyAgICBFVlBfTURfRkxBR19ESUdBTEdJ RF9BQlNFTlQgfCBFVlBfTURfRkxBR19GSVBTLAotICAgICBpbml0MjU2LAotICAgICB1cGRhdGUy NTYsCi0gICAgIGZpbmFsMjU2LAotQEAgLTIxMyw3ICsyMTMsNyBAQCBzdGF0aWMgY29uc3QgRVZQ X01EIHNoYTM4NF9tZCA9IHsKLSAgICAgTklEX3NoYTM4NCwKLSAgICAgTklEX3NoYTM4NFdpdGhS U0FFbmNyeXB0aW9uLAotICAgICBTSEEzODRfRElHRVNUX0xFTkdUSCwKLS0gICAgRVZQX01EX0ZM QUdfRElHQUxHSURfQUJTRU5ULAotKyAgICBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQgfCBF VlBfTURfRkxBR19GSVBTLAotICAgICBpbml0Mzg0LAotICAgICB1cGRhdGUzODQsCi0gICAgIGZp bmFsMzg0LAotQEAgLTIzMiw3ICsyMzIsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTUxMl9t ZCA9IHsKLSAgICAgTklEX3NoYTUxMiwKLSAgICAgTklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9u LAotICAgICBTSEE1MTJfRElHRVNUX0xFTkdUSCwKLS0gICAgRVZQX01EX0ZMQUdfRElHQUxHSURf QUJTRU5ULAotKyAgICBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQgfCBFVlBfTURfRkxBR19G SVBTLAotICAgICBpbml0NTEyLAotICAgICB1cGRhdGU1MTIsCi0gICAgIGZpbmFsNTEyLAotZGlm ZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvYnVpbGQuaW5mby5maXBzIG9wZW5zc2wt MS4xLjBoL2NyeXB0by9maXBzL2J1aWxkLmluZm8KLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlwdG8v Zmlwcy9idWlsZC5pbmZvLmZpcHMJMjAxOC0wMy0yOSAxNDo0NDoyNC42MzIyMzY3ODMgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9idWlsZC5pbmZvCTIwMTgtMDMtMjkgMTQ6 NDQ6MjQuNjMyMjM2NzgzICswMjAwCi1AQCAtMCwwICsxLDE1IEBACi0rTElCUz0uLi8uLi9saWJj cnlwdG8KLStTT1VSQ0VbLi4vLi4vbGliY3J5cHRvXT1cCi0rICAgICAgICBmaXBzX2Flc19zZWxm dGVzdC5jIGZpcHNfZGVzX3NlbGZ0ZXN0LmMgZmlwc19obWFjX3NlbGZ0ZXN0LmMgXAotKyAgICAg ICAgZmlwc19yc2Ffc2VsZnRlc3QuYyBmaXBzX3NoYV9zZWxmdGVzdC5jIGZpcHMuYyBmaXBzX2Rz YV9zZWxmdGVzdC5jIFwKLSsgICAgICAgIGZpcHNfcG9zdC5jIGZpcHNfZHJiZ19jdHIuYyBmaXBz X2RyYmdfaGFzaC5jIGZpcHNfZHJiZ19obWFjLmMgXAotKyAgICAgICAgZmlwc19kcmJnX2xpYi5j IGZpcHNfZHJiZ19yYW5kLmMgZmlwc19kcmJnX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX2xpYi5jIFwK LSsgICAgICAgIGZpcHNfY21hY19zZWxmdGVzdC5jIGZpcHNfZWNkaF9zZWxmdGVzdC5jIGZpcHNf ZWNkc2Ffc2VsZnRlc3QuYyBcCi0rICAgICAgICBmaXBzX2VuYy5jIGZpcHNfbWQuYyBmaXBzX2Ro X3NlbGZ0ZXN0LmMgZmlwc19lcnMuYwotKwotK1BST0dSQU1TX05PX0lOU1Q9XAotKyAgICAgICAg ICBmaXBzX3N0YW5kYWxvbmVfaG1hYwotKwotK1NPVVJDRVtmaXBzX3N0YW5kYWxvbmVfaG1hY109 Zmlwc19zdGFuZGFsb25lX2htYWMuYwotK0lOQ0xVREVbZmlwc19zdGFuZGFsb25lX2htYWNdPS4u Ly4uL2luY2x1ZGUKLStERVBFTkRbZmlwc19zdGFuZGFsb25lX2htYWNdPS4uLy4uL2xpYmNyeXB0 bwotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3Qu Yy5maXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMKLS0t LSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jLmZpcHMJMjAx OC0wMy0yOSAxNDo0NDoyNC42MzIyMzY3ODMgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlw dG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjMyMjM2Nzgz ICswMjAwCi1AQCAtMCwwICsxLDM3MiBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0 IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAq Ci0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu Ci0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0r ICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjIGluY2x1ZGUgImlu dGVybmFsL2ZpcHNfaW50LmgiCi0rI2VuZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgewotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsxNl07Ci0r ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XTsKLSsgICAgY29uc3QgdW5zaWdu ZWQgY2hhciBjaXBoZXJ0ZXh0WzE2XTsKLSt9IHRlc3RzW10gPSB7Ci0rICAgIHsKLSsgICAgICAg IHsKLSsgICAgICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4 MDcsCi0rICAgICAgICAgICAgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQs IDB4MEUsIDB4MEZ9LCB7Ci0rICAgICAgICAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAw eDU1LCAweDY2LCAweDc3LAotKyAgICAgICAgICAgICAgICAweDg4LCAweDk5LCAweEFBLCAweEJC LCAweENDLCAweERELCAweEVFLCAweEZGfSwgewotKzB4NjksIDB4QzQsIDB4RTAsIDB4RDgsIDB4 NkEsIDB4N0IsIDB4MDQsIDB4MzAsCi0rICAgICAgICAgICAgICAgIDB4RDgsIDB4Q0QsIDB4Qjcs IDB4ODAsIDB4NzAsIDB4QjQsIDB4QzUsIDB4NUF9LH0sfTsKLSsKLStpbnQgRklQU19zZWxmdGVz dF9hZXMoKQotK3sKLSsgICAgaW50IG47Ci0rICAgIGludCByZXQgPSAwOwotKyAgICBFVlBfQ0lQ SEVSX0NUWCAqY3R4OwotKwotKyAgICBjdHggPSBFVlBfQ0lQSEVSX0NUWF9uZXcoKTsKLSsgICAg aWYgKGN0eCA9PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGZvciAobiA9IDA7 IG4gPCAxOyArK24pIHsKLSsgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsKLSsgICAg ICAgIG1lbWNweShrZXksIHRlc3RzW25dLmtleSwgc2l6ZW9mKGtleSkpOwotKyAgICAgICAgaWYg KGZpcHNfY2lwaGVyX3Rlc3QoY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGtleSwgTlVMTCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRlc3RzW25dLnBsYWludGV4dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rz W25dLmNpcGhlcnRleHQsIDE2KSA8PSAwKQotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICB9 Ci0rICAgIHJldCA9IDE7Ci0rIGVycjoKLSsgICAgRVZQX0NJUEhFUl9DVFhfZnJlZShjdHgpOwot KyAgICBpZiAocmV0ID09IDApCi0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNU X0FFUywgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rfQotKwot Ky8qIEFFUy1DQ00gdGVzdCBkYXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCi0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2tleVtdID0gewotKyAgICAweGNlLCAw eGIwLCAweDA5LCAweGFlLCAweGE0LCAweDQ1LCAweDQ0LCAweDUxLCAweGZlLCAweGFkLCAweGYw LCAweGU2LAotKyAgICAweGIzLCAweDZmLCAweDQ1LCAweDU1LCAweDVkLCAweGQwLCAweDQ3LCAw eDIzLCAweGJhLCAweGE0LCAweDQ4LCAweGU4Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBjY21fbm9uY2VbXSA9IHsKLSsgICAgMHg3NiwgMHg0MCwgMHg0MywgMHhjNCwgMHg5 NCwgMHg2MCwgMHhiNwotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2Fk YXRhW10gPSB7Ci0rICAgIDB4NmUsIDB4ODAsIDB4ZGQsIDB4N2YsIDB4MWIsIDB4YWQsIDB4ZjMs IDB4YTEsIDB4YzksIDB4YWIsIDB4MjUsIDB4YzcsCi0rICAgIDB4NWYsIDB4MTAsIDB4YmQsIDB4 ZTcsIDB4OGMsIDB4MjMsIDB4ZmEsIDB4MGUsIDB4YjgsIDB4ZjksIDB4YWEsIDB4YTUsCi0rICAg IDB4M2EsIDB4ZGUsIDB4ZmIsIDB4ZjQsIDB4Y2IsIDB4ZjcsIDB4OGYsIDB4ZTQKLSt9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9wdFtdID0gewotKyAgICAweGM4LCAweGQy LCAweDc1LCAweGY5LCAweDE5LCAweGUxLCAweDdkLCAweDdmLCAweGU2LCAweDljLCAweDJhLCAw eDFmLAotKyAgICAweDU4LCAweDkzLCAweDlkLCAweGZlLCAweDRkLCAweDQwLCAweDM3LCAweDkx LCAweGI1LCAweGRmLCAweDEzLCAweDEwCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBjY21fY3RbXSA9IHsKLSsgICAgMHg4YSwgMHgwZiwgMHgzZCwgMHg4MiwgMHgyOSwgMHhl NCwgMHg4ZSwgMHg3NCwgMHg4NywgMHhmZCwgMHg5NSwgMHhhMiwKLSsgICAgMHg4YSwgMHhkMywg MHg5MiwgMHhjOCwgMHgwYiwgMHgzNiwgMHg4MSwgMHhkNCwgMHhmYiwgMHhjNywgMHhiYiwgMHhm ZAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3RhZ1tdID0gewotKyAg ICAweDJkLCAweGQ2LCAweGVmLCAweDFjLCAweDQ1LCAweGQ0LCAweGNjLCAweGI3LCAweDIzLCAw eGRjLCAweDA3LCAweDQ0LAotKyAgICAweDE0LCAweGRiLCAweDUwLCAweDZkCi0rfTsKLSsKLStp bnQgRklQU19zZWxmdGVzdF9hZXNfY2NtKHZvaWQpCi0rewotKyAgICBpbnQgcmV0ID0gMDsKLSsg ICAgdW5zaWduZWQgY2hhciBvdXRbMTI4XSwgdGFnWzE2XTsKLSsgICAgRVZQX0NJUEhFUl9DVFgg KmN0eDsKLSsKLSsgICAgY3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7Ci0rICAgIGlmIChjdHgg PT0gTlVMTCkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBtZW1zZXQob3V0LCAwLCBzaXpl b2Yob3V0KSk7Ci0rICAgIGlmICghRVZQX0NpcGhlckluaXRfZXgoY3R4LCBFVlBfYWVzXzE5Ml9j Y20oKSwgTlVMTCwgTlVMTCwgTlVMTCwgMSkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYg KCFFVlBfQ0lQSEVSX0NUWF9jdHJsKGN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjY21fbm9uY2UpLCBOVUxMKSkKLSsgICAg ICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoY3R4LCBFVlBfQ1RS TF9DQ01fU0VUX1RBRywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjY21f dGFnKSwgTlVMTCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfQ2lwaGVySW5p dF9leChjdHgsIE5VTEwsIE5VTEwsIGNjbV9rZXksIGNjbV9ub25jZSwgMSkpCi0rICAgICAgICBn b3RvIGVycjsKLSsgICAgaWYgKEVWUF9DaXBoZXIoY3R4LCBOVUxMLCBOVUxMLCBzaXplb2YoY2Nt X3B0KSkgIT0gc2l6ZW9mKGNjbV9wdCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKEVW UF9DaXBoZXIoY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDApCi0r ICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKEVWUF9DaXBoZXIoY3R4LCBvdXQsIGNjbV9wdCwg c2l6ZW9mKGNjbV9wdCkpICE9IHNpemVvZihjY21fY3QpKQotKyAgICAgICAgZ290byBlcnI7Ci0r Ci0rICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybChjdHgsIEVWUF9DVFJMX0NDTV9HRVRfVEFH LCAxNiwgdGFnKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAobWVtY21wKHRhZywgY2Nt X3RhZywgc2l6ZW9mKGNjbV90YWcpKQotKyAgICAgICAgfHwgbWVtY21wKG91dCwgY2NtX2N0LCBz aXplb2YoY2NtX2N0KSkpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgbWVtc2V0KG91dCwg MCwgc2l6ZW9mKG91dCkpOwotKwotKyAgICBpZiAoIUVWUF9DaXBoZXJJbml0X2V4KGN0eCwgRVZQ X2Flc18xOTJfY2NtKCksIE5VTEwsIE5VTEwsIE5VTEwsIDApKQotKyAgICAgICAgZ290byBlcnI7 Ci0rICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybChjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZM RU4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2NtX25vbmNlKSwgTlVM TCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKGN0 eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsIDE2LCB0YWcpKQotKyAgICAgICAgZ290byBlcnI7Ci0r ICAgIGlmICghRVZQX0NpcGhlckluaXRfZXgoY3R4LCBOVUxMLCBOVUxMLCBjY21fa2V5LCBjY21f bm9uY2UsIDApKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmIChFVlBfQ2lwaGVyKGN0eCwg TlVMTCwgTlVMTCwgc2l6ZW9mKGNjbV9jdCkpICE9IHNpemVvZihjY21fY3QpKQotKyAgICAgICAg Z290byBlcnI7Ci0rICAgIGlmIChFVlBfQ2lwaGVyKGN0eCwgTlVMTCwgY2NtX2FkYXRhLCBzaXpl b2YoY2NtX2FkYXRhKSkgPCAwKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmIChFVlBfQ2lw aGVyKGN0eCwgb3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2NtX3B0KSkK LSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBpZiAobWVtY21wKG91dCwgY2NtX3B0LCBzaXpl b2YoY2NtX3B0KSkpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgcmV0ID0gMTsKLSsKLSsg ZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9mcmVlKGN0eCk7Ci0rCi0rICAgIGlmIChyZXQgPT0g MCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NNLCBGSVBT X1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9IGVsc2UKLSsg ICAgICAgIHJldHVybiByZXQ7Ci0rCi0rfQotKwotKy8qIEFFUy1HQ00gdGVzdCBkYXRhIGZyb20g TklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgZ2NtX2tleVtdID0gewotKyAgICAweGVlLCAweGJjLCAweDFmLCAweDU3LCAweDQ4LCAweDdm LCAweDUxLCAweDkyLCAweDFjLCAweDA0LCAweDY1LCAweDY2LAotKyAgICAweDVmLCAweDhhLCAw eGU2LCAweGQxLCAweDY1LCAweDhiLCAweGIyLCAweDZkLCAweGU2LCAweGY4LCAweGEwLCAweDY5 LAotKyAgICAweGEzLCAweDUyLCAweDAyLCAweDkzLCAweGE1LCAweDcyLCAweDA3LCAweDhmCi0r fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21faXZbXSA9IHsKLSsgICAgMHg5 OSwgMHhhYSwgMHgzZSwgMHg2OCwgMHhlZCwgMHg4MSwgMHg3MywgMHhhMCwgMHhlZSwgMHhkMCwg MHg2NiwgMHg4NAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX3B0W10g PSB7Ci0rICAgIDB4ZjUsIDB4NmUsIDB4ODcsIDB4MDUsIDB4NWIsIDB4YzMsIDB4MmQsIDB4MGUs IDB4ZWIsIDB4MzEsIDB4YjIsIDB4ZWEsCi0rICAgIDB4Y2MsIDB4MmIsIDB4ZjIsIDB4YTUKLSt9 OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9hYWRbXSA9IHsKLSsgICAgMHg0 ZCwgMHgyMywgMHhjMywgMHhjZSwgMHhjMywgMHgzNCwgMHhiNCwgMHg5YiwgMHhkYiwgMHgzNywg MHgwYywgMHg0MywKLSsgICAgMHg3ZiwgMHhlYywgMHg3OCwgMHhkZQotK307Ci0rCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2N0W10gPSB7Ci0rICAgIDB4ZjcsIDB4MjYsIDB4NDQs IDB4MTMsIDB4YTgsIDB4NGMsIDB4MGUsIDB4N2MsIDB4ZDUsIDB4MzYsIDB4ODYsIDB4N2UsCi0r ICAgIDB4YjksIDB4ZjIsIDB4MTcsIDB4MzYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGdjbV90YWdbXSA9IHsKLSsgICAgMHg2NywgMHhiYSwgMHgwNSwgMHgxMCwgMHgyNiwg MHgyYSwgMHhlNCwgMHg4NywgMHhkNywgMHgzNywgMHhlZSwgMHg2MiwKLSsgICAgMHg5OCwgMHhm NywgMHg3ZSwgMHgwYwotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVzX2djbSh2b2lkKQot K3sKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgb3V0WzEyOF0sIHRhZ1sx Nl07Ci0rICAgIEVWUF9DSVBIRVJfQ1RYICpjdHg7Ci0rCi0rICAgIGN0eCA9IEVWUF9DSVBIRVJf Q1RYX25ldygpOwotKyAgICBpZiAoY3R4ID09IE5VTEwpCi0rICAgICAgICBnb3RvIGVycjsKLSsK LSsgICAgbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOwotKyAgICBtZW1zZXQodGFnLCAwLCBz aXplb2YodGFnKSk7Ci0rICAgIGlmICghRVZQX0NpcGhlckluaXRfZXgoY3R4LCBFVlBfYWVzXzI1 Nl9nY20oKSwgTlVMTCwgTlVMTCwgTlVMTCwgMSkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAg aWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKGN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihnY21faXYpLCBOVUxMKSkKLSsgICAg ICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIUVWUF9DaXBoZXJJbml0X2V4KGN0eCwgTlVMTCwgTlVM TCwgZ2NtX2tleSwgZ2NtX2l2LCAxKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoRVZQ X0NpcGhlcihjdHgsIE5VTEwsIGdjbV9hYWQsIHNpemVvZihnY21fYWFkKSkgPCAwKQotKyAgICAg ICAgZ290byBlcnI7Ci0rICAgIGlmIChFVlBfQ2lwaGVyKGN0eCwgb3V0LCBnY21fcHQsIHNpemVv ZihnY21fcHQpKSAhPSBzaXplb2YoZ2NtX2N0KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBp ZiAoRVZQX0NpcGhlcihjdHgsIE5VTEwsIE5VTEwsIDApIDwgMCkKLSsgICAgICAgIGdvdG8gZXJy OwotKwotKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoY3R4LCBFVlBfQ1RSTF9HQ01fR0VU X1RBRywgMTYsIHRhZykpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgaWYgKG1lbWNtcCh0 YWcsIGdjbV90YWcsIDE2KSB8fCBtZW1jbXAob3V0LCBnY21fY3QsIDE2KSkKLSsgICAgICAgIGdv dG8gZXJyOwotKwotKyAgICBtZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7Ci0rCi0rICAgIGlm ICghRVZQX0NpcGhlckluaXRfZXgoY3R4LCBFVlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwgTlVMTCwg TlVMTCwgMCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9j dHJsKGN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZihnY21faXYpLCBOVUxMKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBp ZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX1RBRywgMTYsIHRh ZykpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leChjdHgs IE5VTEwsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsg ICAgaWYgKEVWUF9DaXBoZXIoY3R4LCBOVUxMLCBnY21fYWFkLCBzaXplb2YoZ2NtX2FhZCkpIDwg MCkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoRVZQX0NpcGhlcihjdHgsIG91dCwgZ2Nt X2N0LCBzaXplb2YoZ2NtX2N0KSkgIT0gc2l6ZW9mKGdjbV9wdCkpCi0rICAgICAgICBnb3RvIGVy cjsKLSsgICAgaWYgKEVWUF9DaXBoZXIoY3R4LCBOVUxMLCBOVUxMLCAwKSA8IDApCi0rICAgICAg ICBnb3RvIGVycjsKLSsKLSsgICAgaWYgKG1lbWNtcChvdXQsIGdjbV9wdCwgMTYpKQotKyAgICAg ICAgZ290byBlcnI7Ci0rCi0rICAgIHJldCA9IDE7Ci0rCi0rIGVycjoKLSsgICAgRVZQX0NJUEhF Ul9DVFhfZnJlZShjdHgpOwotKwotKyAgICBpZiAocmV0ID09IDApIHsKLSsgICAgICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7 Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfSBlbHNlCi0rICAgICAgICByZXR1cm4gcmV0Owot KwotK30KLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2tleVtdID0gewot KyAgICAweGExLCAweGI5LCAweDBjLCAweGJhLCAweDNmLCAweDA2LCAweGFjLCAweDM1LCAweDNi LCAweDJjLCAweDM0LCAweDM4LAotKyAgICAweDc2LCAweDA4LCAweDE3LCAweDYyLCAweDA5LCAw eDA5LCAweDIzLCAweDAyLCAweDZlLCAweDkxLCAweDc3LCAweDE4LAotKyAgICAweDE1LCAweGYy LCAweDlkLCAweGFiLCAweDAxLCAweDkzLCAweDJmLCAweDJmCi0rfTsKLSsKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2lbXSA9IHsKLSsgICAgMHg0ZiwgMHhhZSwgMHhmNywg MHgxMSwgMHg3YywgMHhkYSwgMHg1OSwgMHhjNiwgMHg2ZSwgMHg0YiwgMHg5MiwgMHgwMSwKLSsg ICAgMHgzZSwgMHg3NiwgMHg4YSwgMHhkNQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgWFRTXzEyOF9wdFtdID0gewotKyAgICAweGViLCAweGFiLCAweGNlLCAweDk1LCAweGIx LCAweDRkLCAweDNjLCAweDhkLCAweDZmLCAweGIzLCAweDUwLCAweDM5LAotKyAgICAweDA3LCAw eDkwLCAweDMxLCAweDFjCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNf MTI4X2N0W10gPSB7Ci0rICAgIDB4NzcsIDB4OGEsIDB4ZTgsIDB4YjQsIDB4M2MsIDB4YjksIDB4 OGQsIDB4NWEsIDB4ODIsIDB4NTAsIDB4ODEsIDB4ZDUsCi0rICAgIDB4YmUsIDB4NDcsIDB4MWMs IDB4NjMKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfa2V5W10g PSB7Ci0rICAgIDB4MWUsIDB4YTYsIDB4NjEsIDB4YzUsIDB4OGQsIDB4OTQsIDB4M2EsIDB4MGUs IDB4NDgsIDB4MDEsIDB4ZTQsIDB4MmYsCi0rICAgIDB4NGIsIDB4MDksIDB4NDcsIDB4MTQsIDB4 OWUsIDB4N2YsIDB4OWYsIDB4OGUsIDB4M2UsIDB4NjgsIDB4ZDAsIDB4YzcsCi0rICAgIDB4NTAs IDB4NTIsIDB4MTAsIDB4YmQsIDB4MzEsIDB4MWEsIDB4MGUsIDB4N2MsIDB4ZDYsIDB4ZTEsIDB4 M2YsIDB4ZmQsCi0rICAgIDB4ZjIsIDB4NDEsIDB4OGQsIDB4OGQsIDB4MTksIDB4MTEsIDB4YzAs IDB4MDQsIDB4Y2QsIDB4YTUsIDB4OGQsIDB4YTMsCi0rICAgIDB4ZDYsIDB4MTksIDB4YjcsIDB4 ZTIsIDB4YjksIDB4MTQsIDB4MWUsIDB4NTgsIDB4MzEsIDB4OGUsIDB4ZWEsIDB4MzksCi0rICAg IDB4MmMsIDB4ZjQsIDB4MWIsIDB4MDgKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIFhUU18yNTZfaVtdID0gewotKyAgICAweGFkLCAweGY4LCAweGQ5LCAweDI2LCAweDI3LCAw eDQ2LCAweDRhLCAweGQyLCAweGYwLCAweDQyLCAweDhlLCAweDg0LAotKyAgICAweGE5LCAweGY4 LCAweDc1LCAweDY0Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2 X3B0W10gPSB7Ci0rICAgIDB4MmUsIDB4ZWQsIDB4ZWEsIDB4NTIsIDB4Y2QsIDB4ODIsIDB4MTUs IDB4ZTEsIDB4YWMsIDB4YzYsIDB4NDcsIDB4ZTgsCi0rICAgIDB4MTAsIDB4YmIsIDB4YzMsIDB4 NjQsIDB4MmUsIDB4ODcsIDB4MjgsIDB4N2YsIDB4OGQsIDB4MmUsIDB4NTcsIDB4ZTMsCi0rICAg IDB4NmMsIDB4MGEsIDB4MjQsIDB4ZmIsIDB4YzEsIDB4MmEsIDB4MjAsIDB4MmUKLSt9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfY3RbXSA9IHsKLSsgICAgMHhjYiwg MHhhYSwgMHhkMCwgMHhlMiwgMHhmNiwgMHhjZSwgMHhhMywgMHhmNSwgMHgwYiwgMHgzNywgMHhm OSwgMHgzNCwKLSsgICAgMHhkNCwgMHg2YSwgMHg5YiwgMHgxMywgMHgwYiwgMHg5ZCwgMHg1NCwg MHhmMCwgMHg3ZSwgMHgzNCwgMHhmMywgMHg2YSwKLSsgICAgMHhmNywgMHg5MywgMHhlOCwgMHg2 ZiwgMHg3MywgMHhjNiwgMHhkNywgMHhkYgotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVz X3h0cygpCi0rewotKyAgICBpbnQgcmV0ID0gMTsKLSsgICAgRVZQX0NJUEhFUl9DVFggKmN0eDsK LSsKLSsgICAgY3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7Ci0rICAgIGlmIChjdHggPT0gTlVM TCkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBpZiAoZmlwc19jaXBoZXJfdGVzdChjdHgs IEVWUF9hZXNfMTI4X3h0cygpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBYVFNfMTI4X2tl eSwgWFRTXzEyOF9pLCBYVFNfMTI4X3B0LCBYVFNfMTI4X2N0LAotKyAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2YoWFRTXzEyOF9wdCkpIDw9IDApCi0rICAgICAgICByZXQgPSAwOwotKwot KyAgICBpZiAoZmlwc19jaXBoZXJfdGVzdChjdHgsIEVWUF9hZXNfMjU2X3h0cygpLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICBYVFNfMjU2X2tleSwgWFRTXzI1Nl9pLCBYVFNfMjU2X3B0LCBY VFNfMjU2X2N0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoWFRTXzI1Nl9wdCkp IDw9IDApCi0rICAgICAgICByZXQgPSAwOwotKwotKyAgICBFVlBfQ0lQSEVSX0NUWF9mcmVlKGN0 eCk7Ci0rCi0rIGVycjoKLSsgICAgaWYgKHJldCA9PSAwKQotKyAgICAgICAgRklQU2VycihGSVBT X0ZfRklQU19TRUxGVEVTVF9BRVNfWFRTLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAg cmV0dXJuIHJldDsKLSt9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlw dG8vZmlwcy9maXBzLmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzLmMKLS0t LSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcwkyMDE4LTAzLTI5IDE0OjQ0 OjI0LjYzMjIzNjc4MyArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHMu YwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzMjIzNjc4MyArMDIwMAotQEAgLTAsMCArMSw1MjYgQEAK LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0r ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjZGVmaW5lIF9HTlVfU09VUkNFCi0rCi0r I2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGxpbWl0cy5oPgotKyNpbmNsdWRlIDxkbGZj bi5oPgotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVk ZSA8dW5pc3RkLmg+Ci0rI2luY2x1ZGUgPGVycm5vLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5o IgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKyMgaW5jbHVkZSAiaW50ZXJuYWwvdGhyZWFkX29uY2UuaCIKLSsKLSsjIGlmbmRlZiBQQVRI X01BWAotKyMgIGRlZmluZSBQQVRIX01BWCAxMDI0Ci0rIyBlbmRpZgotKwotK3N0YXRpYyBpbnQg Zmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLStzdGF0aWMgaW50IGZpcHNfbW9kZSA9IDA7Ci0rc3Rh dGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOwotKwotK3N0YXRpYyBpbnQgZmlwc19pc19vd25pbmdf dGhyZWFkKHZvaWQpOwotK3N0YXRpYyBpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKTsK LStzdGF0aWMgaW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKTsKLSsKLStzdGF0aWMg Q1JZUFRPX1JXTE9DSyAqZmlwc19sb2NrID0gTlVMTDsKLStzdGF0aWMgQ1JZUFRPX1JXTE9DSyAq Zmlwc19vd25pbmdfbG9jayA9IE5VTEw7Ci0rc3RhdGljIENSWVBUT19PTkNFIGZpcHNfbG9ja19p bml0ID0gQ1JZUFRPX09OQ0VfU1RBVElDX0lOSVQ7Ci0rCi0rREVGSU5FX1JVTl9PTkNFX1NUQVRJ Qyhkb19maXBzX2xvY2tfaW5pdCkKLSt7Ci0rICAgIGZpcHNfbG9jayA9IENSWVBUT19USFJFQURf bG9ja19uZXcoKTsKLSsgICAgZmlwc19vd25pbmdfbG9jayA9IENSWVBUT19USFJFQURfbG9ja19u ZXcoKTsKLSsgICAgcmV0dXJuIGZpcHNfbG9jayAhPSBOVUxMICYmIGZpcHNfb3duaW5nX2xvY2sg IT0gTlVMTDsKLSt9Ci0rCi0rIyBkZWZpbmUgZmlwc193X2xvY2soKSAgIENSWVBUT19USFJFQURf d3JpdGVfbG9jayhmaXBzX2xvY2spCi0rIyBkZWZpbmUgZmlwc193X3VubG9jaygpIENSWVBUT19U SFJFQURfdW5sb2NrKGZpcHNfbG9jaykKLSsjIGRlZmluZSBmaXBzX3JfbG9jaygpICAgQ1JZUFRP X1RIUkVBRF9yZWFkX2xvY2soZmlwc19sb2NrKQotKyMgZGVmaW5lIGZpcHNfcl91bmxvY2soKSBD UllQVE9fVEhSRUFEX3VubG9jayhmaXBzX2xvY2spCi0rCi0rc3RhdGljIHZvaWQgZmlwc19zZXRf bW9kZShpbnQgb25vZmYpCi0rewotKyAgICBpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3du aW5nX3RocmVhZCgpOwotKwotKyAgICBpZiAoZmlwc19zdGFydGVkKSB7Ci0rICAgICAgICBpZiAo IW93bmluZ190aHJlYWQpCi0rICAgICAgICAgICAgZmlwc193X2xvY2soKTsKLSsgICAgICAgIGZp cHNfbW9kZSA9IG9ub2ZmOwotKyAgICAgICAgaWYgKCFvd25pbmdfdGhyZWFkKQotKyAgICAgICAg ICAgIGZpcHNfd191bmxvY2soKTsKLSsgICAgfQotK30KLSsKLStpbnQgRklQU19tb2R1bGVfbW9k ZSh2b2lkKQotK3sKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIGludCBvd25pbmdfdGhyZWFkID0g Zmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rICAgIGlmIChmaXBzX3N0YXJ0ZWQpIHsKLSsg ICAgICAgIGlmICghb3duaW5nX3RocmVhZCkKLSsgICAgICAgICAgICBmaXBzX3JfbG9jaygpOwot KyAgICAgICAgcmV0ID0gZmlwc19tb2RlOwotKyAgICAgICAgaWYgKCFvd25pbmdfdGhyZWFkKQot KyAgICAgICAgICAgIGZpcHNfcl91bmxvY2soKTsKLSsgICAgfQotKyAgICByZXR1cm4gcmV0Owot K30KLSsKLSsvKiBqdXN0IGEgY29tcGF0IHN5bWJvbCAtIHJldHVybiBOVUxMICovCi0raW50IEZJ UFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpCi0rewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgaWYg KGZpcHNfc3RhcnRlZCkgewotKyAgICAgICAgaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293 bmluZ190aHJlYWQoKTsKLSsKLSsgICAgICAgIGlmICghb3duaW5nX3RocmVhZCkKLSsgICAgICAg ICAgICBmaXBzX3JfbG9jaygpOwotKyAgICAgICAgcmV0ID0gZmlwc19zZWxmdGVzdF9mYWlsOwot KyAgICAgICAgaWYgKCFvd25pbmdfdGhyZWFkKQotKyAgICAgICAgICAgIGZpcHNfcl91bmxvY2so KTsKLSsgICAgfQotKyAgICByZXR1cm4gcmV0OwotK30KLSsKLSsvKiBTZWxmdGVzdCBmYWlsdXJl IGZhdGFsIGV4aXQgcm91dGluZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAotKyAqIGR1cmluZyAqYW55 KiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbi4gSXQgaGFzIHRoZSBtaW5pbXVtCi0rICogb3Zlcmhl YWQgcG9zc2libGUgdG8gYXZvaWQgdG9vIGJpZyBhIHBlcmZvcm1hbmNlIGhpdC4KLSsgKi8KLSsK LSt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCkKLSt7Ci0rICAgIGlmIChmaXBzX3NlbGZ0 ZXN0X2ZhaWwpIHsKLSsgICAgICAgIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCAiRkFU QUwgRklQUyBTRUxGVEVTVCBGQUlMVVJFIik7Ci0rICAgIH0KLSt9Ci0rCi0rdm9pZCBmaXBzX3Nl dF9zZWxmdGVzdF9mYWlsKHZvaWQpCi0rewotKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwot K30KLSsKLSsvKiB3ZSBpbXBsZW1lbnQgd2hhdCBsaWJmaXBzY2hlY2sgZG9lcyBvdXJzZWx2ZXMg Ki8KLSsKLStzdGF0aWMgaW50Ci0rZ2V0X2xpYnJhcnlfcGF0aChjb25zdCBjaGFyICpsaWJuYW1l LCBjb25zdCBjaGFyICpzeW1ib2xuYW1lLCBjaGFyICpwYXRoLAotKyAgICAgICAgICAgICAgICAg c2l6ZV90IHBhdGhsZW4pCi0rewotKyAgICBEbF9pbmZvIGluZm87Ci0rICAgIHZvaWQgKmRsLCAq c3ltOwotKyAgICBpbnQgcnYgPSAtMTsKLSsKLSsgICAgZGwgPSBkbG9wZW4obGlibmFtZSwgUlRM RF9MQVpZKTsKLSsgICAgaWYgKGRsID09IE5VTEwpIHsKLSsgICAgICAgIHJldHVybiAtMTsKLSsg ICAgfQotKwotKyAgICBzeW0gPSBkbHN5bShkbCwgc3ltYm9sbmFtZSk7Ci0rCi0rICAgIGlmIChz eW0gIT0gTlVMTCAmJiBkbGFkZHIoc3ltLCAmaW5mbykpIHsKLSsgICAgICAgIHN0cm5jcHkocGF0 aCwgaW5mby5kbGlfZm5hbWUsIHBhdGhsZW4gLSAxKTsKLSsgICAgICAgIHBhdGhbcGF0aGxlbiAt IDFdID0gJ1wwJzsKLSsgICAgICAgIHJ2ID0gMDsKLSsgICAgfQotKwotKyAgICBkbGNsb3NlKGRs KTsKLSsKLSsgICAgcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0aWMgY29uc3QgY2hhciBjb252W10g PSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0rCi0rc3RhdGljIGNoYXIgKmJpbjJoZXgodm9pZCAqYnVm LCBzaXplX3QgbGVuKQotK3sKLSsgICAgY2hhciAqaGV4LCAqcDsKLSsgICAgdW5zaWduZWQgY2hh ciAqc3JjID0gYnVmOwotKwotKyAgICBoZXggPSBtYWxsb2MobGVuICogMiArIDEpOwotKyAgICBp ZiAoaGV4ID09IE5VTEwpCi0rICAgICAgICByZXR1cm4gTlVMTDsKLSsKLSsgICAgcCA9IGhleDsK LSsKLSsgICAgd2hpbGUgKGxlbiA+IDApIHsKLSsgICAgICAgIHVuc2lnbmVkIGM7Ci0rCi0rICAg ICAgICBjID0gKnNyYzsKLSsgICAgICAgIHNyYysrOwotKwotKyAgICAgICAgKnAgPSBjb252W2Mg Pj4gNF07Ci0rICAgICAgICArK3A7Ci0rICAgICAgICAqcCA9IGNvbnZbYyAmIDB4MGZdOwotKyAg ICAgICAgKytwOwotKyAgICAgICAgLS1sZW47Ci0rICAgIH0KLSsgICAgKnAgPSAnXDAnOwotKyAg ICByZXR1cm4gaGV4OwotK30KLSsKLSsjIGRlZmluZSBITUFDX1BSRUZJWCAiLiIKLSsjIGlmbmRl ZiBITUFDX1NVRkZJWAotKyMgIGRlZmluZSBITUFDX1NVRkZJWCAiLmhtYWMiCi0rIyBlbmRpZgot KyMgZGVmaW5lIFJFQURfQlVGRkVSX0xFTkdUSCAxNjM4NAotKwotK3N0YXRpYyBjaGFyICptYWtl X2htYWNfcGF0aChjb25zdCBjaGFyICpvcmlncGF0aCkKLSt7Ci0rICAgIGNoYXIgKnBhdGgsICpw OwotKyAgICBjb25zdCBjaGFyICpmbjsKLSsKLSsgICAgcGF0aCA9Ci0rICAgICAgICBtYWxsb2Mo c2l6ZW9mKEhNQUNfUFJFRklYKSArIHNpemVvZihITUFDX1NVRkZJWCkgKyBzdHJsZW4ob3JpZ3Bh dGgpKTsKLSsgICAgaWYgKHBhdGggPT0gTlVMTCkgewotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0r ICAgIH0KLSsKLSsgICAgZm4gPSBzdHJyY2hyKG9yaWdwYXRoLCAnLycpOwotKyAgICBpZiAoZm4g PT0gTlVMTCkgewotKyAgICAgICAgZm4gPSBvcmlncGF0aDsKLSsgICAgfSBlbHNlIHsKLSsgICAg ICAgICsrZm47Ci0rICAgIH0KLSsKLSsgICAgc3RybmNweShwYXRoLCBvcmlncGF0aCwgZm4gLSBv cmlncGF0aCk7Ci0rICAgIHAgPSBwYXRoICsgKGZuIC0gb3JpZ3BhdGgpOwotKyAgICBwID0gc3Rw Y3B5KHAsIEhNQUNfUFJFRklYKTsKLSsgICAgcCA9IHN0cGNweShwLCBmbik7Ci0rICAgIHAgPSBz dHBjcHkocCwgSE1BQ19TVUZGSVgpOwotKwotKyAgICByZXR1cm4gcGF0aDsKLSt9Ci0rCi0rc3Rh dGljIGNvbnN0IGNoYXIgaG1hY2tleVtdID0gIm9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2 YXJQIjsKLSsKLStzdGF0aWMgaW50IGNvbXB1dGVfZmlsZV9obWFjKGNvbnN0IGNoYXIgKnBhdGgs IHZvaWQgKipidWYsIHNpemVfdCAqaG1hY2xlbikKLSt7Ci0rICAgIEZJTEUgKmYgPSBOVUxMOwot KyAgICBpbnQgcnYgPSAtMTsKLSsgICAgdW5zaWduZWQgY2hhciByYnVmW1JFQURfQlVGRkVSX0xF TkdUSF07Ci0rICAgIHNpemVfdCBsZW47Ci0rICAgIHVuc2lnbmVkIGludCBobGVuOwotKyAgICBI TUFDX0NUWCAqYzsKLSsKLSsgICAgYyA9IEhNQUNfQ1RYX25ldygpOwotKyAgICBpZiAoYyA9PSBO VUxMKQotKyAgICAgICAgcmV0dXJuIHJ2OwotKwotKyAgICBmID0gZm9wZW4ocGF0aCwgInIiKTsK LSsKLSsgICAgaWYgKGYgPT0gTlVMTCkgewotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsK LSsgICAgaWYgKEhNQUNfSW5pdF9leChjLCBobWFja2V5LCBzaXplb2YoaG1hY2tleSkgLSAxLCBF VlBfc2hhMjU2KCksIE5VTEwpIDw9IDApIHsKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICB9Ci0r Ci0rICAgIHdoaWxlICgobGVuID0gZnJlYWQocmJ1ZiwgMSwgc2l6ZW9mKHJidWYpLCBmKSkgIT0g MCkgewotKyAgICAgICAgaWYgKEhNQUNfVXBkYXRlKGMsIHJidWYsIGxlbikgPD0gMCkgewotKyAg ICAgICAgICAgIGdvdG8gZW5kOwotKyAgICAgICAgfQotKyAgICB9Ci0rCi0rICAgIGxlbiA9IHNp emVvZihyYnVmKTsKLSsgICAgLyogcmV1c2UgcmJ1ZiBmb3IgaG1hYyAqLwotKyAgICBpZiAoSE1B Q19GaW5hbChjLCByYnVmLCAmaGxlbikgPD0gMCkgewotKyAgICAgICAgZ290byBlbmQ7Ci0rICAg IH0KLSsKLSsgICAgKmJ1ZiA9IG1hbGxvYyhobGVuKTsKLSsgICAgaWYgKCpidWYgPT0gTlVMTCkg ewotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsKLSsgICAgKmhtYWNsZW4gPSBobGVuOwot KwotKyAgICBtZW1jcHkoKmJ1ZiwgcmJ1ZiwgaGxlbik7Ci0rCi0rICAgIHJ2ID0gMDsKLSsgZW5k OgotKyAgICBITUFDX0NUWF9mcmVlKGMpOwotKwotKyAgICBpZiAoZikKLSsgICAgICAgIGZjbG9z ZShmKTsKLSsKLSsgICAgcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0aWMgaW50IEZJUFNDSEVDS192 ZXJpZnkoY29uc3QgY2hhciAqcGF0aCkKLSt7Ci0rICAgIGludCBydiA9IDA7Ci0rICAgIEZJTEUg KmhmOwotKyAgICBjaGFyICpobWFjcGF0aCwgKnA7Ci0rICAgIGNoYXIgKmhtYWMgPSBOVUxMOwot KyAgICBzaXplX3QgbjsKLSsKLSsgICAgaG1hY3BhdGggPSBtYWtlX2htYWNfcGF0aChwYXRoKTsK LSsgICAgaWYgKGhtYWNwYXRoID09IE5VTEwpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAg aGYgPSBmb3BlbihobWFjcGF0aCwgInIiKTsKLSsgICAgaWYgKGhmID09IE5VTEwpIHsKLSsgICAg ICAgIGZyZWUoaG1hY3BhdGgpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAg aWYgKGdldGxpbmUoJmhtYWMsICZuLCBoZikgPiAwKSB7Ci0rICAgICAgICB2b2lkICpidWY7Ci0r ICAgICAgICBzaXplX3QgaG1hY2xlbjsKLSsgICAgICAgIGNoYXIgKmhleDsKLSsKLSsgICAgICAg IGlmICgocCA9IHN0cmNocihobWFjLCAnXG4nKSkgIT0gTlVMTCkKLSsgICAgICAgICAgICAqcCA9 ICdcMCc7Ci0rCi0rICAgICAgICBpZiAoY29tcHV0ZV9maWxlX2htYWMocGF0aCwgJmJ1ZiwgJmht YWNsZW4pIDwgMCkgewotKyAgICAgICAgICAgIHJ2ID0gLTQ7Ci0rICAgICAgICAgICAgZ290byBl bmQ7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBpZiAoKGhleCA9IGJpbjJoZXgoYnVmLCBobWFj bGVuKSkgPT0gTlVMTCkgewotKyAgICAgICAgICAgIGZyZWUoYnVmKTsKLSsgICAgICAgICAgICBy diA9IC01OwotKyAgICAgICAgICAgIGdvdG8gZW5kOwotKyAgICAgICAgfQotKwotKyAgICAgICAg aWYgKHN0cmNtcChoZXgsIGhtYWMpICE9IDApIHsKLSsgICAgICAgICAgICBydiA9IC0xOwotKyAg ICAgICAgfQotKyAgICAgICAgZnJlZShidWYpOwotKyAgICAgICAgZnJlZShoZXgpOwotKyAgICB9 IGVsc2UgewotKyAgICAgICAgcnYgPSAtMTsKLSsgICAgfQotKwotKyBlbmQ6Ci0rICAgIGZyZWUo aG1hYyk7Ci0rICAgIGZyZWUoaG1hY3BhdGgpOwotKyAgICBmY2xvc2UoaGYpOwotKwotKyAgICBp ZiAocnYgPCAwKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIC8qIGNoZWNrIHN1Y2Nlc3Nm dWwgKi8KLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgdmVyaWZ5X2NoZWNrc3Vt cyh2b2lkKQotK3sKLSsgICAgaW50IHJ2OwotKyAgICBjaGFyIHBhdGhbUEFUSF9NQVggKyAxXTsK LSsgICAgY2hhciAqcDsKLSsKLSsgICAgLyogd2UgbmVlZCB0byBhdm9pZCBkbG9wZW5pbmcgbGli c3NsLCBhc3N1bWUgYm90aCBsaWJjcnlwdG8gYW5kIGxpYnNzbAotKyAgICAgICBhcmUgaW4gdGhl IHNhbWUgZGlyZWN0b3J5ICovCi0rCi0rICAgIHJ2ID0gZ2V0X2xpYnJhcnlfcGF0aCgibGliY3J5 cHRvLnNvLiIgU0hMSUJfVkVSU0lPTl9OVU1CRVIsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAiRklQU19tb2RlX3NldCIsIHBhdGgsIHNpemVvZihwYXRoKSk7Ci0rICAgIGlmIChydiA8IDAp Ci0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAgcnYgPSBGSVBTQ0hFQ0tfdmVyaWZ5KHBhdGgp OwotKyAgICBpZiAoIXJ2KQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIC8qIHJlcGxhY2Ug bGliY3J5cHRvIHdpdGggbGlic3NsICovCi0rICAgIHdoaWxlICgocCA9IHN0cnN0cihwYXRoLCAi bGliY3J5cHRvLnNvIikpICE9IE5VTEwpIHsKLSsgICAgICAgIHAgPSBzdHBjcHkocCwgImxpYnNz bCIpOwotKyAgICAgICAgbWVtbW92ZShwLCBwICsgMywgc3RybGVuKHAgKyAyKSk7Ci0rICAgIH0K LSsKLSsgICAgcnYgPSBGSVBTQ0hFQ0tfdmVyaWZ5KHBhdGgpOwotKyAgICBpZiAoIXJ2KQotKyAg ICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSsjIGlmbmRlZiBGSVBTX01P RFVMRV9QQVRICi0rIyAgZGVmaW5lIEZJUFNfTU9EVUxFX1BBVEggIi9ldGMvc3lzdGVtLWZpcHMi Ci0rIyBlbmRpZgotKwotK2ludCBGSVBTX21vZHVsZV9pbnN0YWxsZWQodm9pZCkKLSt7Ci0rICAg IGludCBydjsKLSsgICAgcnYgPSBhY2Nlc3MoRklQU19NT0RVTEVfUEFUSCwgRl9PSyk7Ci0rICAg IGlmIChydiA8IDAgJiYgZXJybm8gIT0gRU5PRU5UKQotKyAgICAgICAgcnYgPSAwOwotKwotKyAg ICAvKiBJbnN0YWxsZWQgPT0gdHJ1ZSAqLwotKyAgICByZXR1cm4gIXJ2OwotK30KLSsKLStpbnQg RklQU19tb2R1bGVfbW9kZV9zZXQoaW50IG9ub2ZmKQotK3sKLSsgICAgaW50IHJldCA9IDA7Ci0r Ci0rICAgIGlmICghUlVOX09OQ0UoJmZpcHNfbG9ja19pbml0LCBkb19maXBzX2xvY2tfaW5pdCkp Ci0rICAgICAgICByZXR1cm4gTlVMTDsKLSsKLSsgICAgZmlwc193X2xvY2soKTsKLSsgICAgZmlw c19zdGFydGVkID0gMTsKLSsgICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOwotKwotKyAgICBp ZiAob25vZmYpIHsKLSsKLSsgICAgICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7Ci0rCi0rICAg ICAgICAvKiBEb24ndCBnbyBpbnRvIEZJUFMgbW9kZSB0d2ljZSwganVzdCBzbyB3ZSBjYW4gZG8g YXV0b21hZ2ljCi0rICAgICAgICAgICBzZWVkaW5nICovCi0rICAgICAgICBpZiAoRklQU19tb2R1 bGVfbW9kZSgpKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9E RV9TRVQsCi0rICAgICAgICAgICAgICAgICAgICBGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VU KTsKLSsgICAgICAgICAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKyAgICAgICAgICAgIHJl dCA9IDA7Ci0rICAgICAgICAgICAgZ290byBlbmQ7Ci0rICAgICAgICB9Ci0rIyBpZmRlZiBPUEVO U1NMX0lBMzJfU1NFMgotKyAgICAgICAgewotKyAgICAgICAgICAgIGV4dGVybiB1bnNpZ25lZCBp bnQgT1BFTlNTTF9pYTMyY2FwX1BbMl07Ci0rICAgICAgICAgICAgaWYgKChPUEVOU1NMX2lhMzJj YXBfUFswXSAmICgxIDw8IDI1IHwgMSA8PCAyNikpICE9Ci0rICAgICAgICAgICAgICAgICgxIDw8 IDI1IHwgMSA8PCAyNikpIHsKLSsgICAgICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19N T0RVTEVfTU9ERV9TRVQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgRklQU19SX1VOU1VQUE9S VEVEX1BMQVRGT1JNKTsKLSsgICAgICAgICAgICAgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsK LSsgICAgICAgICAgICAgICAgcmV0ID0gMDsKLSsgICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0r ICAgICAgICAgICAgfQotKyAgICAgICAgfQotKyMgZW5kaWYKLSsKLSsgICAgICAgIGlmICghRklQ U19zZWxmdGVzdCgpKSB7Ci0rICAgICAgICAgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsg ICAgICAgICAgICByZXQgPSAwOwotKyAgICAgICAgICAgIGdvdG8gZW5kOwotKyAgICAgICAgfQot KwotKyAgICAgICAgaWYgKCF2ZXJpZnlfY2hlY2tzdW1zKCkpIHsKLSsgICAgICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCwKLSsgICAgICAgICAgICAgICAgICAgIEZJ UFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCk7Ci0rICAgICAgICAgICAgZmlwc19zZWxm dGVzdF9mYWlsID0gMTsKLSsgICAgICAgICAgICByZXQgPSAwOwotKyAgICAgICAgICAgIGdvdG8g ZW5kOwotKyAgICAgICAgfQotKwotKyAgICAgICAgZmlwc19zZXRfbW9kZShvbm9mZik7Ci0rICAg ICAgICByZXQgPSAxOwotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsgICAgZmlwc19zZXRf bW9kZSgwKTsKLSsgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsgICAgcmV0ID0gMTsKLSsg ZW5kOgotKyAgICBmaXBzX2NsZWFyX293bmluZ190aHJlYWQoKTsKLSsgICAgZmlwc193X3VubG9j aygpOwotKyAgICByZXR1cm4gcmV0OwotK30KLSsKLStzdGF0aWMgQ1JZUFRPX1RIUkVBRF9JRCBm aXBzX3RocmVhZGlkOwotK3N0YXRpYyBpbnQgZmlwc190aHJlYWRfc2V0ID0gMDsKLSsKLStzdGF0 aWMgaW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKQotK3sKLSsgICAgaW50IHJldCA9IDA7 Ci0rCi0rICAgIGlmIChmaXBzX3N0YXJ0ZWQpIHsKLSsgICAgICAgIENSWVBUT19USFJFQURfcmVh ZF9sb2NrKGZpcHNfb3duaW5nX2xvY2spOwotKyAgICAgICAgaWYgKGZpcHNfdGhyZWFkX3NldCkg ewotKyAgICAgICAgICAgIENSWVBUT19USFJFQURfSUQgY3VyID0gQ1JZUFRPX1RIUkVBRF9nZXRf Y3VycmVudF9pZCgpOwotKyAgICAgICAgICAgIGlmIChDUllQVE9fVEhSRUFEX2NvbXBhcmVfaWQo Zmlwc190aHJlYWRpZCwgY3VyKSkKLSsgICAgICAgICAgICAgICAgcmV0ID0gMTsKLSsgICAgICAg IH0KLSsgICAgICAgIENSWVBUT19USFJFQURfdW5sb2NrKGZpcHNfb3duaW5nX2xvY2spOwotKyAg ICB9Ci0rICAgIHJldHVybiByZXQ7Ci0rfQotKwotK2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFk KHZvaWQpCi0rewotKyAgICBpbnQgcmV0ID0gMDsKLSsKLSsgICAgaWYgKGZpcHNfc3RhcnRlZCkg ewotKyAgICAgICAgQ1JZUFRPX1RIUkVBRF93cml0ZV9sb2NrKGZpcHNfb3duaW5nX2xvY2spOwot KyAgICAgICAgaWYgKCFmaXBzX3RocmVhZF9zZXQpIHsKLSsgICAgICAgICAgICBmaXBzX3RocmVh ZGlkID0gQ1JZUFRPX1RIUkVBRF9nZXRfY3VycmVudF9pZCgpOwotKyAgICAgICAgICAgIHJldCA9 IDE7Ci0rICAgICAgICAgICAgZmlwc190aHJlYWRfc2V0ID0gMTsKLSsgICAgICAgIH0KLSsgICAg ICAgIENSWVBUT19USFJFQURfdW5sb2NrKGZpcHNfb3duaW5nX2xvY2spOwotKyAgICB9Ci0rICAg IHJldHVybiByZXQ7Ci0rfQotKwotK2ludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQodm9pZCkK LSt7Ci0rICAgIGludCByZXQgPSAwOwotKwotKyAgICBpZiAoZmlwc19zdGFydGVkKSB7Ci0rICAg ICAgICBDUllQVE9fVEhSRUFEX3dyaXRlX2xvY2soZmlwc19vd25pbmdfbG9jayk7Ci0rICAgICAg ICBpZiAoZmlwc190aHJlYWRfc2V0KSB7Ci0rICAgICAgICAgICAgQ1JZUFRPX1RIUkVBRF9JRCBj dXIgPSBDUllQVE9fVEhSRUFEX2dldF9jdXJyZW50X2lkKCk7Ci0rICAgICAgICAgICAgaWYgKENS WVBUT19USFJFQURfY29tcGFyZV9pZChmaXBzX3RocmVhZGlkLCBjdXIpKQotKyAgICAgICAgICAg ICAgICBmaXBzX3RocmVhZF9zZXQgPSAwOwotKyAgICAgICAgfQotKyAgICAgICAgQ1JZUFRPX1RI UkVBRF91bmxvY2soZmlwc19vd25pbmdfbG9jayk7Ci0rICAgIH0KLSsgICAgcmV0dXJuIHJldDsK LSt9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBz X2NtYWNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfY21h Y19zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3Nl bGZ0ZXN0LmMuZmlwcwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzMjIzNjc4MyArMDIwMAotKysrIG9w ZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jCTIwMTgtMDMtMjkg MTQ6NDQ6MjQuNjMyMjM2NzgzICswMjAwCi1AQCAtMCwwICsxLDE1NiBAQAotKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJl IG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgot KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNv cmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwot KyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgot KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImludGVybmFs L2ZpcHNfaW50LmgiCi0rI2luY2x1ZGUgPG9wZW5zc2wvY21hYy5oPgotKyNpbmNsdWRlICJmaXBz X2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdHlwZWRlZiBzdHJ1Y3QgewotKyAg ICBpbnQgbmlkOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtFVlBfTUFYX0tFWV9MRU5H VEhdOwotKyAgICBzaXplX3Qga2V5c2l6ZTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBtc2db NjRdOwotKyAgICBzaXplX3QgbXNnc2l6ZTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBtYWNb MzJdOwotKyAgICBzaXplX3QgbWFjc2l6ZTsKLSt9IENNQUNfS0FUOwotKwotKy8qIGZyb20gaHR0 cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL25pc3RwdWJzLzgwMC0zOEIvU1BfODAwLTM4 Qi5wZGYgKi8KLStzdGF0aWMgY29uc3QgQ01BQ19LQVQgdmVjdG9yW10gPSB7Ci0rICAgIHtOSURf YWVzXzEyOF9jYmMsICAgICAgICAgICAvKiBDb3VudCA9IDMyIGZyb20gQ01BQ0dlbkFFUzEyOC50 eHQgKi8KLSsgICAgIHsweDc3LCAweGE3LCAweDdmLCAweGFmLCAweDI5LCAweDBjLCAweDFmLCAw eGEzLAotKyAgICAgIDB4MGMsIDB4NjgsIDB4M2QsIDB4ZjEsIDB4NmIsIDB4YTcsIDB4YTcsIDB4 N2IsfSwgMTI4LAotKyAgICAgezB4MDIsIDB4MDYsIDB4ODMsIDB4ZTEsIDB4ZjAsIDB4MzksIDB4 MmYsIDB4NGMsCi0rICAgICAgMHhhYywgMHg1NCwgMHgzMSwgMHg4YiwgMHg2MCwgMHgyOSwgMHgy NSwgMHg5ZSwKLSsgICAgICAweDljLCAweDU1LCAweDNkLCAweGJjLCAweDRiLCAweDZhLCAweGQ5 LCAweDk4LAotKyAgICAgIDB4ZTYsIDB4NGQsIDB4NTgsIDB4ZTQsIDB4ZTcsIDB4ZGMsIDB4MmUs IDB4MTMsfSwgMjU2LAotKyAgICAgezB4ZmIsIDB4ZmUsIDB4YTQsIDB4MWIsfSwgMzJ9LAotKyAg ICB7TklEX2Flc18xOTJfY2JjLCAgICAgICAgICAgLyogQ291bnQgPSAyMyBmcm9tIENNQUNHZW5B RVMxOTIudHh0ICovCi0rICAgICB7MHg3YiwgMHgzMiwgMHgzOSwgMHgxMywgMHg2OSwgMHhhYSwg MHg0YywgMHhhOSwKLSsgICAgICAweDc1LCAweDU4LCAweDA5LCAweDViLCAweGUzLCAweGMzLCAw eGVjLCAweDg2LAotKyAgICAgIDB4MmIsIDB4ZDAsIDB4NTcsIDB4Y2UsIDB4ZjEsIDB4ZTMsIDB4 MmQsIDB4NjIsfSwgMTkyLAotKyAgICAgezB4MH0sIDAsCi0rICAgICB7MHhlNCwgMHhkOSwgMHgz NCwgMHgwYiwgMHgwMywgMHhlNiwgMHg3ZCwgMHhlZiwKLSsgICAgICAweGQ0LCAweDk2LCAweDlj LCAweGMxLCAweGVkLCAweDM3LCAweDM1LCAweGU2LH0sIDEyOCwKLSsgICAgIH0sCi0rICAgIHtO SURfYWVzXzI1Nl9jYmMsICAgICAgICAgICAvKiBDb3VudCA9IDMzIGZyb20gQ01BQ0dlbkFFUzI1 Ni50eHQgKi8KLSsgICAgIHsweDBiLCAweDEyLCAweDJhLCAweGM4LCAweGYzLCAweDRlLCAweGQx LCAweGZlLAotKyAgICAgIDB4MDgsIDB4MmEsIDB4MzYsIDB4MjUsIDB4ZDEsIDB4NTcsIDB4NTYs IDB4MTQsCi0rICAgICAgMHg1NCwgMHgxNiwgMHg3YSwgMHhjMSwgMHg0NSwgMHhhMSwgMHgwYiwg MHhiZiwKLSsgICAgICAweDc3LCAweGM2LCAweGE3LCAweDA1LCAweDk2LCAweGQ1LCAweDc0LCAw eGYxLH0sIDI1NiwKLSsgICAgIHsweDQ5LCAweDhiLCAweDUzLCAweGZkLCAweGVjLCAweDg3LCAw eGVkLCAweGNiLAotKyAgICAgIDB4ZjAsIDB4NzAsIDB4OTcsIDB4ZGMsIDB4Y2QsIDB4ZTksIDB4 M2EsIDB4MDgsCi0rICAgICAgMHg0YiwgMHhhZCwgMHg3NSwgMHgwMSwgMHhhMiwgMHgyNCwgMHhl MywgMHg4OCwKLSsgICAgICAweGRmLCAweDM0LCAweDljLCAweGUxLCAweDg5LCAweDU5LCAweGZl LCAweDg0LAotKyAgICAgIDB4ODUsIDB4ZjgsIDB4YWQsIDB4MTUsIDB4MzcsIDB4ZjAsIDB4ZDgs IDB4OTYsCi0rICAgICAgMHhlYSwgMHg3MywgMHhiZSwgMHhkYywgMHg3MiwgMHgxNCwgMHg3MSwg MHgzZix9LCAzODQsCi0rICAgICB7MHhmNiwgMHgyYywgMHg0NiwgMHgzMiwgMHg5Yix9LCA0MCwK LSsgICAgIH0sCi0rICAgIHtOSURfZGVzX2VkZTNfY2JjLCAgICAgICAgICAvKiBDb3VudCA9IDQx IGZyb20gQ01BQ0dlblRERVMzLnJlcSAqLwotKyAgICAgezB4ODksIDB4YmMsIDB4ZDksIDB4NTIs IDB4YTgsIDB4YzgsIDB4YWIsIDB4MzcsCi0rICAgICAgMHgxYSwgMHhmNCwgMHg4YSwgMHhjNywg MHhkMCwgMHg3MCwgMHg4NSwgMHhkNSwKLSsgICAgICAweGVmLCAweGY3LCAweDAyLCAweGU2LCAw eGQ2LCAweDJjLCAweGRjLCAweDIzLH0sIDE5MiwKLSsgICAgIHsweGZhLCAweDYyLCAweDBjLCAw eDFiLCAweGJlLCAweDk3LCAweDMxLCAweDllLAotKyAgICAgIDB4OWEsIDB4MGMsIDB4ZjAsIDB4 NDksIDB4MjEsIDB4MjEsIDB4ZjcsIDB4YTIsCi0rICAgICAgMHgwZSwgMHhiMCwgMHg4YSwgMHg2 YSwgMHg3MCwgMHg5ZCwgMHhjYiwgMHhkMCwKLSsgICAgICAweDBhLCAweGFmLCAweDM4LCAweGU0 LCAweGY5LCAweDllLCAweDc1LCAweDRlLH0sIDI1NiwKLSsgICAgIHsweDhmLCAweDQ5LCAweGEx LCAweGI3LCAweGQ2LCAweGFhLCAweDIyLCAweDU4LH0sIDY0LAotKyAgICAgfSwKLSt9OwotKwot K2ludCBGSVBTX3NlbGZ0ZXN0X2NtYWMoKQotK3sKLSsgICAgc2l6ZV90IG4sIG91dGxlbjsKLSsg ICAgdW5zaWduZWQgY2hhciBvdXRbMzJdOwotKyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXI7 Ci0rICAgIENNQUNfQ1RYICpjdHggPSBDTUFDX0NUWF9uZXcoKTsKLSsgICAgY29uc3QgQ01BQ19L QVQgKnQ7Ci0rICAgIGludCBydiA9IDE7Ci0rCi0rICAgIGZvciAobiA9IDAsIHQgPSB2ZWN0b3I7 IG4gPCBzaXplb2YodmVjdG9yKSAvIHNpemVvZih2ZWN0b3JbMF0pOyBuKyssIHQrKykgewotKyAg ICAgICAgY2lwaGVyID0gRklQU19nZXRfY2lwaGVyYnluaWQodC0+bmlkKTsKLSsgICAgICAgIGlm ICghY2lwaGVyKSB7Ci0rICAgICAgICAgICAgcnYgPSAtMTsKLSsgICAgICAgICAgICBnb3RvIGVy cjsKLSsgICAgICAgIH0KLSsgICAgICAgIGlmICghQ01BQ19Jbml0KGN0eCwgdC0+a2V5LCB0LT5r ZXlzaXplIC8gOCwgY2lwaGVyLCAwKSkgewotKyAgICAgICAgICAgIHJ2ID0gLTE7Ci0rICAgICAg ICAgICAgZ290byBlcnI7Ci0rICAgICAgICB9Ci0rICAgICAgICBpZiAoIUNNQUNfVXBkYXRlKGN0 eCwgdC0+bXNnLCB0LT5tc2dzaXplIC8gOCkpIHsKLSsgICAgICAgICAgICBydiA9IC0xOwotKyAg ICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgfQotKwotKyAgICAgICAgaWYgKCFDTUFDX0Zp bmFsKGN0eCwgb3V0LCAmb3V0bGVuKSkgewotKyAgICAgICAgICAgIHJ2ID0gLTE7Ci0rICAgICAg ICAgICAgZ290byBlcnI7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBpZiAob3V0bGVuIDwgdC0+ bWFjc2l6ZSAvIDggfHwgbWVtY21wKG91dCwgdC0+bWFjLCB0LT5tYWNzaXplIC8gOCkpIHsKLSsg ICAgICAgICAgICBydiA9IDA7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSsgZXJyOgotKyAgICBD TUFDX0NUWF9mcmVlKGN0eCk7Ci0rCi0rICAgIGlmIChydiA9PSAtMSkgewotKyAgICAgICAgcnYg PSAwOwotKyAgICB9Ci0rICAgIGlmICghcnYpCi0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X1NFTEZURVNUX0NNQUMsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwotKyAgICByZXR1cm4g cnY7Ci0rfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlw c19kZXNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfZGVz X3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxm dGVzdC5jLmZpcHMJMjAxOC0wMy0yOSAxNDo0NDoyNC42MzIyMzY3ODMgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jCTIwMTgtMDMtMjkgMTQ6 NDQ6MjQuNjMyMjM2NzgzICswMjAwCi1AQCAtMCwwICsxLDEzMyBAQAotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVA b3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAq ICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up Ci0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K LSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjIGluY2x1ZGUgImludGVybmFsL2ZpcHNfaW50LmgiCi0rI2VuZGlmCi0rI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGlj IGNvbnN0IHN0cnVjdCB7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsgICAg Y29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgY2lwaGVydGV4dFs4XTsKLSt9IHRlc3RzMltdID0gewotKyAgICB7Ci0rICAgICAgICB7Ci0r ICAgICAgICAweDdjLCAweDRmLCAweDZlLCAweGY3LCAweGEyLCAweDA0LCAweDE2LCAweGVjLAot KyAgICAgICAgICAgICAgICAweDBiLCAweDZiLCAweDdjLCAweDllLCAweDVlLCAweDE5LCAweGE3 LCAweGM0fSwgewotKyAgICAgICAgMHgwNiwgMHhhNywgMHhkOCwgMHg3OSwgMHhhYSwgMHhjZSwg MHg2OSwgMHhlZn0sIHsKLSsgICAgICAgIDB4NGMsIDB4MTEsIDB4MTcsIDB4NTUsIDB4YmYsIDB4 YzQsIDB4NGUsIDB4ZmR9Ci0rICAgIH0sIHsKLSsgICAgICAgIHsKLSsgICAgICAgIDB4NWQsIDB4 OWUsIDB4MDEsIDB4ZDMsIDB4MjUsIDB4YzcsIDB4M2UsIDB4MzQsCi0rICAgICAgICAgICAgICAg IDB4MDEsIDB4MTYsIDB4N2MsIDB4ODUsIDB4MjMsIDB4ZGYsIDB4ZTAsIDB4Njh9LCB7Ci0rICAg ICAgICAweDljLCAweDUwLCAweDA5LCAweDBmLCAweDVlLCAweDdkLCAweDY5LCAweDdlfSwgewot KyAgICAweGQyLCAweDBiLCAweDE4LCAweGRmLCAweGQ5LCAweDBkLCAweDllLCAweGZmfSx9Ci0r fTsKLSsKLStzdGF0aWMgY29uc3Qgc3RydWN0IHsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBr ZXlbMjRdOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsgICAgY29u c3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwotK30gdGVzdHMzW10gPSB7Ci0rICAgIHsK LSsgICAgICAgIHsKLSsgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsCi0rICAgICAgICAgICAgICAgIDB4RkUsIDB4REMsIDB4QkEsIDB4OTgsIDB4 NzYsIDB4NTQsIDB4MzIsIDB4MTAsCi0rICAgICAgICAgICAgICAgIDB4MTIsIDB4MzQsIDB4NTYs IDB4NzgsIDB4OWEsIDB4YmMsIDB4ZGUsIDB4ZjB9LCB7Ci0rICAgICAgICAweDhmLCAweDhmLCAw eGJmLCAweDliLCAweDVkLCAweDQ4LCAweGI0LCAweDFjfSwgewotKyAgICAweDU5LCAweDhjLCAw eGU1LCAweGQzLCAweDZjLCAweGEyLCAweGVhLCAweDFifSx9LCB7Ci0rICAgICAgICB7Ci0rICAg ICAgICAweERDLCAweEJBLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwLCAweEZFLAotKyAg ICAgICAgICAgICAgICAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAw eEVGLAotKyAgICAgICAgICAgICAgICAweEVELCAweDM5LCAweEQ5LCAweDUwLCAweEZBLCAweDc0 LCAweEJDLCAweEM0fSwgewotKyAgICAgICAgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwg MHhBQiwgMHhDRCwgMHhFRn0sIHsKLSsweDExLCAweDI1LCAweGIwLCAweDM1LCAweGJlLCAweGEw LCAweDgyLCAweDg2fSx9LH07Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZGVzKCkKLSt7Ci0rICAg IGludCBuLCByZXQgPSAwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCAqY3R4OwotKwotKyAgICBjdHgg PSBFVlBfQ0lQSEVSX0NUWF9uZXcoKTsKLSsgICAgaWYgKGN0eCA9PSBOVUxMKQotKyAgICAgICAg Z290byBlcnI7Ci0rCi0rICAgIC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDIta2V5IDNERVMgYW5k IGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLwotKyAgICBmb3IgKG4gPSAwOyBuIDwgMjsgKytu KSB7Ci0rICAgICAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsKLSsgICAgICAgIG1l bWNweShwbGFpbnRleHQsIHRlc3RzMltuXS5wbGFpbnRleHQsIHNpemVvZihwbGFpbnRleHQpKTsK LSsgICAgICAgIGlmICghZmlwc19jaXBoZXJfdGVzdChjdHgsIEVWUF9kZXNfZWRlX2VjYigpLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzMltuXS5rZXksIE5VTEwsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW50ZXh0LCB0ZXN0czJbbl0uY2lwaGVydGV4 dCwgOCkpCi0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgLyogRW5jcnlw dC9kZWNyeXB0IHdpdGggM0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCi0rICAg IGZvciAobiA9IDA7IG4gPCAyOyArK24pIHsKLSsgICAgICAgIGlmICghZmlwc19jaXBoZXJfdGVz dChjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0ZXN0czNbbl0ua2V5LCBOVUxMLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl c3RzM1tuXS5wbGFpbnRleHQsIHRlc3RzM1tuXS5jaXBoZXJ0ZXh0LCA4KSkKLSsgICAgICAgICAg ICBnb3RvIGVycjsKLSsgICAgfQotKyAgICByZXQgPSAxOwotKyBlcnI6Ci0rICAgIEVWUF9DSVBI RVJfQ1RYX2ZyZWUoY3R4KTsKLSsgICAgaWYgKHJldCA9PSAwKQotKyAgICAgICAgRklQU2VycihG SVBTX0ZfRklQU19TRUxGVEVTVF9ERVMsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwotKyAg ICByZXR1cm4gcmV0OwotK30KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2NyeXB0 by9maXBzL2ZpcHNfZGhfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBz L2ZpcHNfZGhfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNf ZGhfc2VsZnRlc3QuYy5maXBzCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjMzMjM2ODA3ICswMjAwCi0r Kysgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19kaF9zZWxmdGVzdC5jCTIwMTgtMDMt MjkgMTQ6NDQ6MjQuNjMzMjM2ODA3ICswMjAwCi1AQCAtMCwwICsxLDE4MCBAQAotKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgotKyAqIENvcHlyaWdodCAoYykgMjAxMyBSZWQgSGF0LCBJbmMuCi0r ICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4K LSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0r Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaF90ZXN0XzIwNDhfcFtd ID0gewotKyAgICAweEFFLCAweEVDLCAweEVFLCAweDIyLCAweEZBLCAweDNBLCAweEE1LCAweDIy LCAweEMwLCAweERFLCAweDBGLCAweDA5LAotKyAgICAweDdFLCAweDE3LCAweEMwLCAweDA1LCAw eEY5LCAweEYxLCAweEU3LCAweEM2LCAweDg3LCAweDE0LCAweDZELCAweDExLAotKyAgICAweEU3 LCAweEFFLCAweEVELCAweDJGLCAweDcyLCAweDU5LCAweEM1LCAweEE5LCAweDlCLCAweEI4LCAw eDAyLCAweEE1LAotKyAgICAweEYzLCAweDY5LCAweDcwLCAweEQ2LCAweERELCAweDkwLCAweEY5 LCAweDE5LCAweDc5LCAweEJFLCAweDYwLCAweDhGLAotKyAgICAweDI1LCAweDkyLCAweDMwLCAw eDFDLCAweDUxLCAweDUxLCAweDM4LCAweDI2LCAweDgyLCAweDI1LCAweEU2LCAweEZDLAotKyAg ICAweEVELCAweDY1LCAweDk2LCAweDhGLCAweDU3LCAweEU1LCAweDUzLCAweDhCLCAweDM4LCAw eDYzLCAweEM3LCAweENFLAotKyAgICAweEJDLCAweDFCLCAweDRELCAweDE4LCAweDJBLCAweDVC LCAweDA0LCAweDNGLCAweDZBLCAweDNDLCAweDk0LCAweDM5LAotKyAgICAweEFFLCAweDM2LCAw eEQ2LCAweDVFLCAweDBGLCAweEEyLCAweENDLCAweEQwLCAweEQ0LCAweEQ1LCAweEM2LCAweDFF LAotKyAgICAweEY2LCAweEEwLCAweEY1LCAweDg5LCAweDRFLCAweEI0LCAweDBCLCAweEE0LCAw eEIzLCAweDJCLCAweDNELCAweEUyLAotKyAgICAweDRFLCAweEUxLCAweDQ5LCAweDI1LCAweDk5 LCAweDVGLCAweDMyLCAweDE2LCAweDMzLCAweDMyLCAweDFCLCAweDdBLAotKyAgICAweEE1LCAw eDVDLCAweDZCLCAweDM0LCAweDBELCAweDM5LCAweDk5LCAweERDLCAweEYwLCAweDc2LCAweEU1 LCAweDVBLAotKyAgICAweEQ0LCAweDcxLCAweDAwLCAweEVELCAweDVBLCAweDczLCAweEZCLCAw eEM4LCAweDAxLCAweEFELCAweDk5LCAweENGLAotKyAgICAweDk5LCAweDUyLCAweDdDLCAweDlD LCAweDY0LCAweEM2LCAweDc2LCAweDQwLCAweDU3LCAweEFGLCAweDU5LCAweEQ3LAotKyAgICAw eDM4LCAweDBCLCAweDQwLCAweERFLCAweDMzLCAweDBELCAweEI4LCAweDc2LCAweEVDLCAweEE5 LCAweEQ4LCAweDczLAotKyAgICAweEY4LCAweEVGLCAweDI2LCAweDY2LCAweDA2LCAweDI3LCAw eERELCAweDdDLCAweEE0LCAweDEwLCAweDlDLCAweEE2LAotKyAgICAweEFBLCAweEY5LCAweDUz LCAweDYyLCAweDczLCAweDFELCAweEJBLCAweDFDLCAweEYxLCAweDY3LCAweEY0LCAweDM1LAot KyAgICAweEVELCAweDZGLCAweDM3LCAweDkyLCAweEU4LCAweDRGLCAweDZDLCAweEJBLCAweDUy LCAweDZFLCAweEExLCAweEVELAotKyAgICAweERBLCAweDlGLCAweDg1LCAweDExLCAweDgyLCAw eDUyLCAweDYyLCAweDA4LCAweDQ0LCAweEYxLCAweDMwLCAweDAzLAotKyAgICAweEMzLCAweDM4 LCAweDJDLCAweDc5LCAweEJELCAweEQ0LCAweDQzLCAweDQ1LCAweEVFLCAweDhFLCAweDUwLCAw eEZDLAotKyAgICAweDI5LCAweDQ2LCAweDlBLCAweEZFLCAweDU0LCAweDFBLCAweDE5LCAweDhG LCAweDRCLCAweDg0LCAweDA4LCAweERFLAotKyAgICAweDIwLCAweDYyLCAweDczLCAweENDLCAw eERELCAweDdFLCAweEYwLCAweEVGLCAweEEyLCAweEZELCAweDg2LCAweDU4LAotKyAgICAweDRC LCAweEQ4LCAweDM3LCAweEVCCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBk aF90ZXN0XzIwNDhfZ1tdID0gewotKyAgICAweDAyCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBkaF90ZXN0XzIwNDhfcHViX2tleVtdID0gewotKyAgICAweEEwLCAweDM5LCAw eDExLCAweDc3LCAweDlBLCAweEMxLCAweDMwLCAweDFGLCAweEJFLCAweDQ4LCAweEE3LCAweEFB LAotKyAgICAweEEwLCAweDg0LCAweDU0LCAweDY0LCAweEFELCAweDFCLCAweDcwLCAweEZBLCAw eDEzLCAweDU1LCAweDYzLCAweEQyLAotKyAgICAweDFGLCAweDYyLCAweDMyLCAweDkzLCAweDhF LCAweEM5LCAweDNFLCAweDA5LCAweEE3LCAweDY0LCAweEU0LCAweDEyLAotKyAgICAweDZFLCAw eDFCLCAweEYyLCAweDkyLCAweDNCLCAweEI5LCAweENCLCAweDU2LCAweEVBLCAweDA3LCAweDg4 LCAweEI1LAotKyAgICAweEE2LCAweEJDLCAweDE2LCAweDFGLCAweDI3LCAweEZFLCAweEQ4LCAw eEFBLCAweDQwLCAweEIyLCAweEIwLCAweDJELAotKyAgICAweDM3LCAweDc2LCAweEE2LCAweEE0 LCAweDgyLCAweDJDLCAweDBFLCAweDIyLCAweDY0LCAweDlELCAweENCLCAweEQxLAotKyAgICAw eDAwLCAweEI3LCAweDg5LCAweDE0LCAweDcyLCAweDRFLCAweEJFLCAweDQ4LCAweDQxLCAweEY4 LCAweEIyLCAweDUxLAotKyAgICAweDExLCAweDA5LCAweDRCLCAweDIyLCAweDAxLCAweDIzLCAw eDM5LCAweDk2LCAweEUwLCAweDE1LCAweEQ3LCAweDlGLAotKyAgICAweDYwLCAweEQxLCAweEI3 LCAweEFFLCAweEZFLCAweDVGLCAweERCLCAweEU3LCAweDAzLCAweDE3LCAweDk3LCAweEE2LAot KyAgICAweDE2LCAweDc0LCAweEJELCAweDUzLCAweDgxLCAweDE5LCAweEM1LCAweDQ3LCAweDVF LCAweENFLCAweDhELCAweEVELAotKyAgICAweDQ1LCAweDVELCAweDNDLCAweDAwLCAweEEwLCAw eDBBLCAweDY4LCAweDZBLCAweEUwLCAweDhFLCAweDA2LCAweDQ2LAotKyAgICAweDZGLCAweEQ3 LCAweEY5LCAweERGLCAweDMxLCAweDdFLCAweDc3LCAweDQ0LCAweDBELCAweDk4LCAweEUwLCAw eENBLAotKyAgICAweDk4LCAweDA5LCAweDUyLCAweDA0LCAweDkwLCAweEVBLCAweDZELCAweEY0 LCAweDMwLCAweDY5LCAweDhGLCAweEIxLAotKyAgICAweDlCLCAweEMxLCAweDQzLCAweERCLCAw eEQ1LCAweDhELCAweEM4LCAweDhFLCAweEI2LCAweDBCLCAweDA1LCAweEJFLAotKyAgICAweDBF LCAweEM1LCAweDk5LCAweEM4LCAweDZFLCAweDRFLCAweEYzLCAweENCLCAweEMzLCAweDVFLCAw eDlCLCAweDUzLAotKyAgICAweEY3LCAweDA2LCAweDFDLCAweDRGLCAweEM3LCAweEI4LCAweDZF LCAweDMwLCAweDE4LCAweENBLCAweDlCLCAweEI5LAotKyAgICAweEJDLCAweDVGLCAweDE3LCAw eDcyLCAweDI5LCAweDVBLCAweEU1LCAweEQ5LCAweDk2LCAweEI3LCAweDBCLCAweEYzLAotKyAg ICAweDJELCAweDhDLCAweEYxLCAweEUxLCAweDBFLCAweDBELCAweDc0LCAweEQ1LCAweDlELCAw eEYwLCAweDA2LCAweEE5LAotKyAgICAweEI0LCAweDk1LCAweDYzLCAweDc2LCAweDQ2LCAweDU1 LCAweDQ4LCAweDgyLCAweDM5LCAweDkwLCAweEVGLCAweDU2LAotKyAgICAweDc1LCAweDM0LCAw eEI4LCAweDM0LCAweEMzLCAweDE4LCAweDZFLCAweDFFLCAweEFELCAweEUzLCAweDQ4LCAweDdF LAotKyAgICAweDkzLCAweDJDLCAweDIzLCAweEU3LCAweEY4LCAweDkwLCAweDczLCAweEIxLCAw eDc3LCAweDgwLCAweDY3LCAweEE5LAotKyAgICAweDM2LCAweDlFLCAweERBLCAweEQyCi0rfTsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaF90ZXN0XzIwNDhfcHJpdl9rZXlbXSA9 IHsKLSsgICAgMHgwQywgMHg0QiwgMHgzMCwgMHg4OSwgMHhEMSwgMHhCOCwgMHg2MiwgMHhDQiwg MHgzQywgMHg0MywgMHg2NCwgMHg5MSwKLSsgICAgMHhGMCwgMHg5MSwgMHg1NCwgMHg3MCwgMHhD NSwgMHgyNywgMHg5NiwgMHhFMywgMHhBQywgMHhCRSwgMHhFOCwgMHgwMCwKLSsgICAgMHhFQywg MHg1NSwgMHhGNiwgMHhDQwotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZGgoKQotK3sKLSsg ICAgREggKmRoID0gTlVMTDsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHZvaWQgKnB1Yl9rZXlf YmluID0gTlVMTDsKLSsgICAgaW50IGxlbjsKLSsgICAgQklHTlVNICpwID0gTlVMTCwgKmcgPSBO VUxMLCAqcHJpdl9rZXkgPSBOVUxMLCAqdG1wX3B1Yl9rZXkgPSBOVUxMOwotKyAgICBjb25zdCBC SUdOVU0gKnB1Yl9rZXk7Ci0rCi0rICAgIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KHAsIGRoX3Rl c3RfMjA0OCk7Ci0rICAgIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGcsIGRoX3Rlc3RfMjA0OCk7 Ci0rICAgIC8qIG5vdGUgdGhhdCB0aGUgcHJpdmF0ZSBrZXkgaXMgbXVjaCBzaG9ydGVyIHRoYW4g bm9ybWFsbHkgdXNlZAotKyAgICAgKiBidXQgc3RpbGwgZyAqKiBwcml2X2tleSA+IHAKLSsgICAg ICovCi0rICAgIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KHByaXZfa2V5LCBkaF90ZXN0XzIwNDgp OwotKyAgICBpZiAoKHRtcF9wdWJfa2V5ID0gQk5fbmV3KCkpID09IE5VTEwpCi0rICAgICAgICBn b3RvIGVycjsKLSsKLSsgICAgZGggPSBESF9uZXcoKTsKLSsKLSsgICAgaWYgKGRoID09IE5VTEwp Ci0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgREhfc2V0MF9wcWcoZGgsIHAsIE5VTEwsIGcp OwotKyAgICBESF9zZXQwX2tleShkaCwgdG1wX3B1Yl9rZXksIHByaXZfa2V5KTsKLSsKLSsgICAg aWYgKERIX2dlbmVyYXRlX2tleShkaCkgPD0gMCkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAg ICBESF9nZXQwX2tleShkaCwgJnB1Yl9rZXksIE5VTEwpOwotKwotKyAgICBpZiAocHViX2tleSA9 PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGxlbiA9IEJOX251bV9ieXRlcyhw dWJfa2V5KTsKLSsgICAgaWYgKChwdWJfa2V5X2JpbiA9IE9QRU5TU0xfbWFsbG9jKGxlbikpID09 IE5VTEwpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgQk5fYm4yYmluKHB1Yl9rZXksIHB1Yl9r ZXlfYmluKTsKLSsKLSsgICAgaWYgKGxlbiAhPSBzaXplb2YoZGhfdGVzdF8yMDQ4X3B1Yl9rZXkp IHx8Ci0rICAgICAgICBtZW1jbXAocHViX2tleV9iaW4sIGRoX3Rlc3RfMjA0OF9wdWJfa2V5LCBs ZW4pICE9IDApCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgcmV0ID0gMTsKLSsKLSsgZXJy OgotKyAgICBpZiAoZGgpCi0rICAgICAgICBESF9mcmVlKGRoKTsKLSsgICAgZWxzZSB7Ci0rICAg ICAgICBCTl9mcmVlKHApOwotKyAgICAgICAgQk5fZnJlZShnKTsKLSsgICAgICAgIEJOX2ZyZWUo cHJpdl9rZXkpOwotKyAgICAgICAgQk5fZnJlZSh0bXBfcHViX2tleSk7Ci0rICAgIH0KLSsKLSsg ICAgT1BFTlNTTF9mcmVlKHB1Yl9rZXlfYmluKTsKLSsgICAgcmV0dXJuIHJldDsKLSt9Ci0rI2Vu ZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMu ZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMKLS0tLSBvcGVu c3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMuZmlwcwkyMDE4LTAzLTI5IDE0 OjQ0OjI0LjYzMzIzNjgwNyArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2Zp cHNfZHJiZ19jdHIuYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzMzIzNjgwNyArMDIwMAotQEAgLTAs MCArMSw0MTUgQEAKLSsvKiBmaXBzL3JhbmQvZmlwc19kcmJnX2N0ci5jICovCi0rLyogV3JpdHRl biBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVu U1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAo YykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0r ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0r ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg Ki8KLSsKLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgot KwotK3N0YXRpYyB2b2lkIGluY18xMjgoRFJCR19DVFJfQ1RYICogY2N0eCkKLSt7Ci0rICAgIGlu dCBpOwotKyAgICB1bnNpZ25lZCBjaGFyIGM7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBjY3R4 LT5WICsgMTU7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgICAgICBjID0g KnA7Ci0rICAgICAgICBjKys7Ci0rICAgICAgICAqcCA9IGM7Ci0rICAgICAgICBpZiAoYykKLSsg ICAgICAgICAgICByZXR1cm47Ci0rICAgICAgICBwLS07Ci0rICAgIH0KLSt9Ci0rCi0rc3RhdGlj IHZvaWQgY3RyX1hPUihEUkJHX0NUUl9DVFggKiBjY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpp biwKLSsgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmxlbikKLSt7Ci0rICAgIHNpemVfdCBp LCBuOwotKyAgICAvKiBBbnkgemVybyBwYWRkaW5nIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24gdGhl IHJlc3VsdCBhcyB3ZQotKyAgICAgKiBhcmUgWE9SaW5nLiBTbyBqdXN0IHByb2Nlc3MgaG93ZXZl ciBtdWNoIGlucHV0IHdlIGhhdmUuCi0rICAgICAqLwotKwotKyAgICBpZiAoIWluIHx8ICFpbmxl bikKLSsgICAgICAgIHJldHVybjsKLSsKLSsgICAgaWYgKGlubGVuIDwgY2N0eC0+a2V5bGVuKQot KyAgICAgICAgbiA9IGlubGVuOwotKyAgICBlbHNlCi0rICAgICAgICBuID0gY2N0eC0+a2V5bGVu OwotKwotKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotKyAgICAgICAgY2N0eC0+S1tpXSBe PSBpbltpXTsKLSsgICAgaWYgKGlubGVuIDw9IGNjdHgtPmtleWxlbikKLSsgICAgICAgIHJldHVy bjsKLSsKLSsgICAgbiA9IGlubGVuIC0gY2N0eC0+a2V5bGVuOwotKyAgICAvKiBTaG91bGQgbmV2 ZXIgaGFwcGVuICovCi0rICAgIGlmIChuID4gMTYpCi0rICAgICAgICBuID0gMTY7Ci0rICAgIGZv ciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotKyAgICAgICAgY2N0eC0+VltpXSBePSBpbltpICsgY2N0 eC0+a2V5bGVuXTsKLSt9Ci0rCi0rLyogUHJvY2VzcyBhIGNvbXBsZXRlIGJsb2NrIHVzaW5nIEJD QyBhbGdvcml0aG0gb2YgU1BQIDgwMC05MCAxMC40LjMgKi8KLSsKLStzdGF0aWMgdm9pZCBjdHJf QkNDX2Jsb2NrKERSQkdfQ1RSX0NUWCAqIGNjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluKQotK3sKLSsgICAg aW50IGk7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotKyAgICAgICAgb3V0W2ldIF49 IGluW2ldOwotKyAgICBBRVNfZW5jcnlwdChvdXQsIG91dCwgJmNjdHgtPmRmX2tzKTsKLSsjaWYg MAotKyAgICBmcHJpbnRmKHN0ZGVyciwgIkJDQyBpbitvdXRcbiIpOwotKyAgICBCSU9fZHVtcF9m cChzdGRlcnIsIGluLCAxNik7Ci0rICAgIEJJT19kdW1wX2ZwKHN0ZGVyciwgb3V0LCAxNik7Ci0r I2VuZGlmCi0rfQotKwotKy8qIEhhbmRsZSBzZXZlcmFsIEJDQyBvcGVyYXRpb25zIGZvciBhcyBt dWNoIGRhdGEgYXMgd2UgbmVlZCBmb3IgSyBhbmQgWCAqLwotK3N0YXRpYyB2b2lkIGN0cl9CQ0Nf YmxvY2tzKERSQkdfQ1RSX0NUWCAqIGNjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluKQotK3sK LSsgICAgY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCwgaW4pOwotKyAgICBjdHJfQkNDX2Js b2NrKGNjdHgsIGNjdHgtPktYICsgMTYsIGluKTsKLSsgICAgaWYgKGNjdHgtPmtleWxlbiAhPSAx NikKLSsgICAgICAgIGN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAzMiwgaW4pOwotK30K LSsKLSsvKiBJbml0aWFsaXNlIEJDQyBibG9ja3M6IHRoZXNlIGhhdmUgdGhlIHZhbHVlIDAsMSwy IGluIGxlZnRtb3N0IHBvc2l0aW9uczoKLSsgKiBzZWUgMTAuNC4yIHN0YWdlIDcuCi0rICovCi0r c3RhdGljIHZvaWQgY3RyX0JDQ19pbml0KERSQkdfQ1RSX0NUWCAqIGNjdHgpCi0rewotKyAgICBt ZW1zZXQoY2N0eC0+S1gsIDAsIDQ4KTsKLSsgICAgbWVtc2V0KGNjdHgtPmJsdG1wLCAwLCAxNik7 Ci0rICAgIGN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1gsIGNjdHgtPmJsdG1wKTsKLSsgICAg Y2N0eC0+Ymx0bXBbM10gPSAxOwotKyAgICBjdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsg MTYsIGNjdHgtPmJsdG1wKTsKLSsgICAgaWYgKGNjdHgtPmtleWxlbiAhPSAxNikgewotKyAgICAg ICAgY2N0eC0+Ymx0bXBbM10gPSAyOwotKyAgICAgICAgY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4 LT5LWCArIDMyLCBjY3R4LT5ibHRtcCk7Ci0rICAgIH0KLSt9Ci0rCi0rLyogUHJvY2VzcyBzZXZl cmFsIGJsb2NrcyBpbnRvIEJDQyBhbGdvcml0aG0sIHNvbWUgcG9zc2libHkgcGFydGlhbCAqLwot K3N0YXRpYyB2b2lkIGN0cl9CQ0NfdXBkYXRlKERSQkdfQ1RSX0NUWCAqIGNjdHgsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxl bikKLSt7Ci0rICAgIGlmICghaW4gfHwgIWlubGVuKQotKyAgICAgICAgcmV0dXJuOwotKyAgICAv KiBJZiB3ZSBoYXZlIHBhcnRpYWwgYmxvY2sgaGFuZGxlIGl0IGZpcnN0ICovCi0rICAgIGlmIChj Y3R4LT5ibHRtcF9wb3MpIHsKLSsgICAgICAgIHNpemVfdCBsZWZ0ID0gMTYgLSBjY3R4LT5ibHRt cF9wb3M7Ci0rICAgICAgICAvKiBJZiB3ZSBub3cgaGF2ZSBhIGNvbXBsZXRlIGJsb2NrIHByb2Nl c3MgaXQgKi8KLSsgICAgICAgIGlmIChpbmxlbiA+PSBsZWZ0KSB7Ci0rICAgICAgICAgICAgbWVt Y3B5KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCBpbiwgbGVmdCk7Ci0rICAgICAgICAg ICAgY3RyX0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+Ymx0bXApOwotKyAgICAgICAgICAgIGNjdHgt PmJsdG1wX3BvcyA9IDA7Ci0rICAgICAgICAgICAgaW5sZW4gLT0gbGVmdDsKLSsgICAgICAgICAg ICBpbiArPSBsZWZ0OwotKyAgICAgICAgfQotKyAgICB9Ci0rICAgIC8qIFByb2Nlc3MgemVybyBv ciBtb3JlIGNvbXBsZXRlIGJsb2NrcyAqLwotKyAgICB3aGlsZSAoaW5sZW4gPj0gMTYpIHsKLSsg ICAgICAgIGN0cl9CQ0NfYmxvY2tzKGNjdHgsIGluKTsKLSsgICAgICAgIGluICs9IDE2OwotKyAg ICAgICAgaW5sZW4gLT0gMTY7Ci0rICAgIH0KLSsgICAgLyogQ29weSBhbnkgcmVtYWluaW5nIHBh cnRpYWwgYmxvY2sgdG8gdGhlIHRlbXBvcmFyeSBidWZmZXIgKi8KLSsgICAgaWYgKGlubGVuID4g MCkgewotKyAgICAgICAgbWVtY3B5KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCBpbiwg aW5sZW4pOwotKyAgICAgICAgY2N0eC0+Ymx0bXBfcG9zICs9IGlubGVuOwotKyAgICB9Ci0rfQot KwotK3N0YXRpYyB2b2lkIGN0cl9CQ0NfZmluYWwoRFJCR19DVFJfQ1RYICogY2N0eCkKLSt7Ci0r ICAgIGlmIChjY3R4LT5ibHRtcF9wb3MpIHsKLSsgICAgICAgIG1lbXNldChjY3R4LT5ibHRtcCAr IGNjdHgtPmJsdG1wX3BvcywgMCwgMTYgLSBjY3R4LT5ibHRtcF9wb3MpOwotKyAgICAgICAgY3Ry X0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+Ymx0bXApOwotKyAgICB9Ci0rfQotKwotK3N0YXRpYyB2 b2lkIGN0cl9kZihEUkJHX0NUUl9DVFggKiBjY3R4LAotKyAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCi0rICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKLSsgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuKQotK3sKLSsgICAg c2l6ZV90IGlubGVuOwotKyAgICB1bnNpZ25lZCBjaGFyICpwID0gY2N0eC0+Ymx0bXA7Ci0rICAg IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGM4MCA9IDB4ODA7Ci0rCi0rICAgIGN0cl9CQ0NfaW5pdChj Y3R4KTsKLSsgICAgaWYgKCFpbjEpCi0rICAgICAgICBpbjFsZW4gPSAwOwotKyAgICBpZiAoIWlu MikKLSsgICAgICAgIGluMmxlbiA9IDA7Ci0rICAgIGlmICghaW4zKQotKyAgICAgICAgaW4zbGVu ID0gMDsKLSsgICAgaW5sZW4gPSBpbjFsZW4gKyBpbjJsZW4gKyBpbjNsZW47Ci0rICAgIC8qIElu aXRpYWxpc2UgTHx8TiBpbiB0ZW1wb3JhcnkgYmxvY2sgKi8KLSsgICAgKnArKyA9IChpbmxlbiA+ PiAyNCkgJiAweGZmOwotKyAgICAqcCsrID0gKGlubGVuID4+IDE2KSAmIDB4ZmY7Ci0rICAgICpw KysgPSAoaW5sZW4gPj4gOCkgJiAweGZmOwotKyAgICAqcCsrID0gaW5sZW4gJiAweGZmOwotKyAg ICAvKiBOQiBrZXlsZW4gaXMgYXQgbW9zdCAzMiBieXRlcyAqLwotKyAgICAqcCsrID0gMDsKLSsg ICAgKnArKyA9IDA7Ci0rICAgICpwKysgPSAwOwotKyAgICAqcCA9ICh1bnNpZ25lZCBjaGFyKSgo Y2N0eC0+a2V5bGVuICsgMTYpICYgMHhmZik7Ci0rICAgIGNjdHgtPmJsdG1wX3BvcyA9IDg7Ci0r ICAgIGN0cl9CQ0NfdXBkYXRlKGNjdHgsIGluMSwgaW4xbGVuKTsKLSsgICAgY3RyX0JDQ191cGRh dGUoY2N0eCwgaW4yLCBpbjJsZW4pOwotKyAgICBjdHJfQkNDX3VwZGF0ZShjY3R4LCBpbjMsIGlu M2xlbik7Ci0rICAgIGN0cl9CQ0NfdXBkYXRlKGNjdHgsICZjODAsIDEpOwotKyAgICBjdHJfQkND X2ZpbmFsKGNjdHgpOwotKyAgICAvKiBTZXQgdXAga2V5IEsgKi8KLSsgICAgQUVTX3NldF9lbmNy eXB0X2tleShjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICogOCwgJmNjdHgtPmRmX2t4a3MpOwotKyAg ICAvKiBYIGZvbGxvd3Mga2V5IEsgKi8KLSsgICAgQUVTX2VuY3J5cHQoY2N0eC0+S1ggKyBjY3R4 LT5rZXlsZW4sIGNjdHgtPktYLCAmY2N0eC0+ZGZfa3hrcyk7Ci0rICAgIEFFU19lbmNyeXB0KGNj dHgtPktYLCBjY3R4LT5LWCArIDE2LCAmY2N0eC0+ZGZfa3hrcyk7Ci0rICAgIGlmIChjY3R4LT5r ZXlsZW4gIT0gMTYpCi0rICAgICAgICBBRVNfZW5jcnlwdChjY3R4LT5LWCArIDE2LCBjY3R4LT5L WCArIDMyLCAmY2N0eC0+ZGZfa3hrcyk7Ci0rI2lmIDAKLSsgICAgZnByaW50ZihzdGRlcnIsICJP dXRwdXQgb2YgY3RyX2RmOlxuIik7Ci0rICAgIEJJT19kdW1wX2ZwKHN0ZGVyciwgY2N0eC0+S1gs IGNjdHgtPmtleWxlbiArIDE2KTsKLSsjZW5kaWYKLSt9Ci0rCi0rLyogTkIgdGhlIG5vLWRmICBV cGRhdGUgaW4gU1A4MDAtOTAgc3BlY2lmaWVzIGEgY29uc3RhbnQgaW5wdXQgbGVuZ3RoCi0rICog b2Ygc2VlZGxlbiwgaG93ZXZlciBvdGhlciB1c2VzIG9mIHRoaXMgYWxnb3JpdGhtIHBhZCB0aGUg aW5wdXQgd2l0aAotKyAqIHplcm9lcyBpZiBuZWNlc3NhcnkgYW5kIGhhdmUgdXAgdG8gdHdvIHBh cmFtZXRlcnMgWE9SZWQgdG9nZXRoZXIsCi0rICogaGFuZGxlIGJvdGggY2FzZXMgaW4gdGhpcyBm dW5jdGlvbiBpbnN0ZWFkLgotKyAqLwotKwotK3N0YXRpYyB2b2lkIGN0cl9VcGRhdGUoRFJCR19D VFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpp bjEsIHNpemVfdCBpbjFsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuKQotK3sKLSsgICAgRFJCR19D VFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwotKyAgICAvKiBrcyBpcyBhbHJlYWR5IHNldHVw IGZvciBjb3JyZWN0IGtleSAqLwotKyAgICBpbmNfMTI4KGNjdHgpOwotKyAgICBBRVNfZW5jcnlw dChjY3R4LT5WLCBjY3R4LT5LLCAmY2N0eC0+a3MpOwotKyAgICAvKiBJZiBrZXlsZW4gbG9uZ2Vy IHRoYW4gMTI4IGJpdHMgbmVlZCBleHRyYSBlbmNyeXB0ICovCi0rICAgIGlmIChjY3R4LT5rZXls ZW4gIT0gMTYpIHsKLSsgICAgICAgIGluY18xMjgoY2N0eCk7Ci0rICAgICAgICBBRVNfZW5jcnlw dChjY3R4LT5WLCBjY3R4LT5LICsgMTYsICZjY3R4LT5rcyk7Ci0rICAgIH0KLSsgICAgaW5jXzEy OChjY3R4KTsKLSsgICAgQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+ViwgJmNjdHgtPmtzKTsK LSsgICAgLyogSWYgMTkyIGJpdCBrZXkgcGFydCBvZiBWIGlzIG9uIGVuZCBvZiBLICovCi0rICAg IGlmIChjY3R4LT5rZXlsZW4gPT0gMjQpIHsKLSsgICAgICAgIG1lbWNweShjY3R4LT5WICsgOCwg Y2N0eC0+ViwgOCk7Ci0rICAgICAgICBtZW1jcHkoY2N0eC0+ViwgY2N0eC0+SyArIDI0LCA4KTsK LSsgICAgfQotKwotKyAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYp IHsKLSsgICAgICAgIC8qIElmIG5vIGlucHV0IHJldXNlIGV4aXN0aW5nIGRlcml2ZWQgdmFsdWUg Ki8KLSsgICAgICAgIGlmIChpbjEgfHwgbm9uY2UgfHwgaW4yKQotKyAgICAgICAgICAgIGN0cl9k ZihjY3R4LCBpbjEsIGluMWxlbiwgbm9uY2UsIG5vbmNlbGVuLCBpbjIsIGluMmxlbik7Ci0rICAg ICAgICAvKiBJZiB0aGlzIGEgcmV1c2UgaW5wdXQgaW4xbGVuICE9IDAgKi8KLSsgICAgICAgIGlm IChpbjFsZW4pCi0rICAgICAgICAgICAgY3RyX1hPUihjY3R4LCBjY3R4LT5LWCwgZGN0eC0+c2Vl ZGxlbik7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgICBjdHJfWE9SKGNjdHgsIGluMSwgaW4xbGVu KTsKLSsgICAgICAgIGN0cl9YT1IoY2N0eCwgaW4yLCBpbjJsZW4pOwotKyAgICB9Ci0rCi0rICAg IEFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5rcyk7 Ci0rI2lmIDAKLSsgICAgZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIgdXBkYXRlIGlzOlxuIik7 Ci0rICAgIEJJT19kdW1wX2ZwKHN0ZGVyciwgY2N0eC0+SywgY2N0eC0+a2V5bGVuKTsKLSsgICAg QklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5WLCAxNik7Ci0rI2VuZGlmCi0rfQotKwotK3N0YXRp YyBpbnQgZHJiZ19jdHJfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRs ZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy ICpub25jZSwgc2l6ZV90IG5vbmNlbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pCi0rewotKyAgICBE UkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7Ci0rICAgIG1lbXNldChjY3R4LT5LLCAw LCBzaXplb2YoY2N0eC0+SykpOwotKyAgICBtZW1zZXQoY2N0eC0+ViwgMCwgc2l6ZW9mKGNjdHgt PlYpKTsKLSsgICAgQUVTX3NldF9lbmNyeXB0X2tleShjY3R4LT5LLCBkY3R4LT5zdHJlbmd0aCwg JmNjdHgtPmtzKTsKLSsgICAgY3RyX1VwZGF0ZShkY3R4LCBlbnQsIGVudGxlbiwgcGVycywgcGVy c2xlbiwgbm9uY2UsIG5vbmNlbGVuKTsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBp bnQgZHJiZ19jdHJfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRp bmxlbikKLSt7Ci0rICAgIGN0cl9VcGRhdGUoZGN0eCwgZW50LCBlbnRsZW4sIGFkaW4sIGFkaW5s ZW4sIE5VTEwsIDApOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBkcmJnX2N0 cl9nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotK3sK LSsgICAgRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwotKyAgICBpZiAoYWRpbiAm JiBhZGlubGVuKSB7Ci0rICAgICAgICBjdHJfVXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5sZW4sIE5V TEwsIDAsIE5VTEwsIDApOwotKyAgICAgICAgLyogVGhpcyBtZWFucyB3ZSByZXVzZSBkZXJpdmVk IHZhbHVlICovCi0rICAgICAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0Vf REYpIHsKLSsgICAgICAgICAgICBhZGluID0gTlVMTDsKLSsgICAgICAgICAgICBhZGlubGVuID0g MTsKLSsgICAgICAgIH0KLSsgICAgfSBlbHNlCi0rICAgICAgICBhZGlubGVuID0gMDsKLSsKLSsg ICAgZm9yICg7OykgewotKyAgICAgICAgaW5jXzEyOChjY3R4KTsKLSsgICAgICAgIGlmICghKGRj dHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpIHsKLSsgICAg ICAgICAgICBBRVNfZW5jcnlwdChjY3R4LT5WLCBkY3R4LT5sYiwgJmNjdHgtPmtzKTsKLSsgICAg ICAgICAgICBkY3R4LT5sYl92YWxpZCA9IDE7Ci0rICAgICAgICAgICAgY29udGludWU7Ci0rICAg ICAgICB9Ci0rICAgICAgICBpZiAob3V0bGVuIDwgMTYpIHsKLSsgICAgICAgICAgICAvKiBVc2Ug SyBhcyB0ZW1wIHNwYWNlIGFzIGl0IHdpbGwgYmUgdXBkYXRlZCAqLwotKyAgICAgICAgICAgIEFF U19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPkssICZjY3R4LT5rcyk7Ci0rICAgICAgICAgICAgaWYg KCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBjY3R4LT5LKSkKLSsgICAgICAgICAgICAgICAg cmV0dXJuIDA7Ci0rICAgICAgICAgICAgbWVtY3B5KG91dCwgY2N0eC0+Sywgb3V0bGVuKTsKLSsg ICAgICAgICAgICBicmVhazsKLSsgICAgICAgIH0KLSsgICAgICAgIEFFU19lbmNyeXB0KGNjdHgt PlYsIG91dCwgJmNjdHgtPmtzKTsKLSsgICAgICAgIGlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3Qo ZGN0eCwgb3V0KSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIG91dCArPSAxNjsK LSsgICAgICAgIG91dGxlbiAtPSAxNjsKLSsgICAgICAgIGlmIChvdXRsZW4gPT0gMCkKLSsgICAg ICAgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICBjdHJfVXBkYXRlKGRjdHgsIGFkaW4sIGFk aW5sZW4sIE5VTEwsIDAsIE5VTEwsIDApOwotKwotKyAgICByZXR1cm4gMTsKLSsKLSt9Ci0rCi0r c3RhdGljIGludCBkcmJnX2N0cl91bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQotK3sKLSsg ICAgbWVtc2V0KCZkY3R4LT5kLmN0ciwgMCwgc2l6ZW9mKERSQkdfQ1RSX0NUWCkpOwotKyAgICBy ZXR1cm4gMTsKLSt9Ci0rCi0raW50IGZpcHNfZHJiZ19jdHJfaW5pdChEUkJHX0NUWCAqZGN0eCkK LSt7Ci0rICAgIERSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKLSsKLSsgICAgc2l6 ZV90IGtleWxlbjsKLSsKLSsgICAgc3dpdGNoIChkY3R4LT50eXBlKSB7Ci0rICAgIGNhc2UgTklE X2Flc18xMjhfY3RyOgotKyAgICAgICAga2V5bGVuID0gMTY7Ci0rICAgICAgICBicmVhazsKLSsK LSsgICAgY2FzZSBOSURfYWVzXzE5Ml9jdHI6Ci0rICAgICAgICBrZXlsZW4gPSAyNDsKLSsgICAg ICAgIGJyZWFrOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMjU2X2N0cjoKLSsgICAgICAgIGtleWxl biA9IDMyOwotKyAgICAgICAgYnJlYWs7Ci0rCi0rICAgIGRlZmF1bHQ6Ci0rICAgICAgICByZXR1 cm4gLTI7Ci0rICAgIH0KLSsKLSsgICAgZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2N0cl9pbnN0 YW50aWF0ZTsKLSsgICAgZGN0eC0+cmVzZWVkID0gZHJiZ19jdHJfcmVzZWVkOwotKyAgICBkY3R4 LT5nZW5lcmF0ZSA9IGRyYmdfY3RyX2dlbmVyYXRlOwotKyAgICBkY3R4LT51bmluc3RhbnRpYXRl ID0gZHJiZ19jdHJfdW5pbnN0YW50aWF0ZTsKLSsKLSsgICAgY2N0eC0+a2V5bGVuID0ga2V5bGVu OwotKyAgICBkY3R4LT5zdHJlbmd0aCA9IGtleWxlbiAqIDg7Ci0rICAgIGRjdHgtPmJsb2NrbGVu Z3RoID0gMTY7Ci0rICAgIGRjdHgtPnNlZWRsZW4gPSBrZXlsZW4gKyAxNjsKLSsKLSsgICAgaWYg KGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKSB7Ci0rICAgICAgICAvKiBkZiBp bml0aWFsaXNhdGlvbiAqLwotKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGZfa2V5WzMy XSA9IHsKLSsgICAgICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAw eDA2LCAweDA3LAotKyAgICAgICAgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4 MGQsIDB4MGUsIDB4MGYsCi0rICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgx NCwgMHgxNSwgMHgxNiwgMHgxNywKLSsgICAgICAgICAgICAweDE4LCAweDE5LCAweDFhLCAweDFi LCAweDFjLCAweDFkLCAweDFlLCAweDFmCi0rICAgICAgICB9OwotKyAgICAgICAgLyogU2V0IGtl eSBzY2hlZHVsZSBmb3IgZGZfa2V5ICovCi0rICAgICAgICBBRVNfc2V0X2VuY3J5cHRfa2V5KGRm X2tleSwgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5kZl9rcyk7Ci0rCi0rICAgICAgICBkY3R4LT5t aW5fZW50cm9weSA9IGNjdHgtPmtleWxlbjsKLSsgICAgICAgIGRjdHgtPm1heF9lbnRyb3B5ID0g RFJCR19NQVhfTEVOR1RIOwotKyAgICAgICAgZGN0eC0+bWluX25vbmNlID0gZGN0eC0+bWluX2Vu dHJvcHkgLyAyOwotKyAgICAgICAgZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOwot KyAgICAgICAgZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7Ci0rICAgICAgICBkY3R4 LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIGRj dHgtPm1pbl9lbnRyb3B5ID0gZGN0eC0+c2VlZGxlbjsKLSsgICAgICAgIGRjdHgtPm1heF9lbnRy b3B5ID0gZGN0eC0+c2VlZGxlbjsKLSsgICAgICAgIC8qIE5vbmNlIG5vdCB1c2VkICovCi0rICAg ICAgICBkY3R4LT5taW5fbm9uY2UgPSAwOwotKyAgICAgICAgZGN0eC0+bWF4X25vbmNlID0gMDsK LSsgICAgICAgIGRjdHgtPm1heF9wZXJzID0gZGN0eC0+c2VlZGxlbjsKLSsgICAgICAgIGRjdHgt Pm1heF9hZGluID0gZGN0eC0+c2VlZGxlbjsKLSsgICAgfQotKwotKyAgICBkY3R4LT5tYXhfcmVx dWVzdCA9IDEgPDwgMTY7Ci0rICAgIGRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDEgPDwgMjQ7Ci0r Ci0rICAgIHJldHVybiAxOwotK30KLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBz L2ZpcHNfZHJiZ19oYXNoLmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2Ry YmdfaGFzaC5jCi0tLS0gb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2gu Yy5maXBzCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjMzMjM2ODA3ICswMjAwCi0rKysgb3BlbnNzbC0x LjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYz MzIzNjgwNyArMDIwMAotQEAgLTAsMCArMSwzNjEgQEAKLSsvKiBmaXBzL3JhbmQvZmlwc19kcmJn X2hhc2guYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3Bl bnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBh cmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAq Ci0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2lu Z0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0r ICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0r ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsK LSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAi aW50ZXJuYWwvZmlwc19pbnQuaCIKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsj aW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgotKwotKy8qIFRoaXMgaXMgSGFzaF9kZiBmcm9tIFNQ IDgwMC05MCAxMC40LjEgKi8KLSsKLStzdGF0aWMgaW50IGhhc2hfZGYoRFJCR19DVFggKmRjdHgs IHVuc2lnbmVkIGNoYXIgKm91dCwKLSsgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAotKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCi0rICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmluMywgc2l6ZV90IGluM2xlbiwKLSsgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqaW40LCBzaXplX3QgaW40bGVuKQotK3sKLSsgICAgRVZQX01E X0NUWCAqbWN0eCA9IGRjdHgtPmQuaGFzaC5tY3R4OwotKyAgICB1bnNpZ25lZCBjaGFyICp2dG1w ID0gZGN0eC0+ZC5oYXNoLnZ0bXA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgdG1wWzZdOwotKyAgICAv KiBTdGFuZGFyZCBvbmx5IGV2ZXIgbmVlZHMgc2VlZGxlbiBieXRlcyB3aGljaCBpcyBhbHdheXMg bGVzcyB0aGFuCi0rICAgICAqIG1heGltdW0gcGVybWl0dGVkIHNvIG5vIG5lZWQgdG8gY2hlY2sg bGVuZ3RoLgotKyAgICAgKi8KLSsgICAgc2l6ZV90IG91dGxlbiA9IGRjdHgtPnNlZWRsZW47Ci0r ICAgIHRtcFswXSA9IDE7Ci0rICAgIHRtcFsxXSA9ICgob3V0bGVuICogOCkgPj4gMjQpICYgMHhm ZjsKLSsgICAgdG1wWzJdID0gKChvdXRsZW4gKiA4KSA+PiAxNikgJiAweGZmOwotKyAgICB0bXBb M10gPSAoKG91dGxlbiAqIDgpID4+IDgpICYgMHhmZjsKLSsgICAgdG1wWzRdID0gKG91dGxlbiAq IDgpICYgMHhmZjsKLSsgICAgaWYgKCFpbjEpIHsKLSsgICAgICAgIHRtcFs1XSA9ICh1bnNpZ25l ZCBjaGFyKWluMWxlbjsKLSsgICAgICAgIGluMSA9IHRtcCArIDU7Ci0rICAgICAgICBpbjFsZW4g PSAxOwotKyAgICB9Ci0rICAgIGZvciAoOzspIHsKLSsgICAgICAgIGlmICghRklQU19kaWdlc3Rp bml0KG1jdHgsIGRjdHgtPmQuaGFzaC5tZCkpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAg ICAgICBpZiAoIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIHRtcCwgNSkpCi0rICAgICAgICAgICAg cmV0dXJuIDA7Ci0rICAgICAgICBpZiAoaW4xICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBp bjEsIGluMWxlbikpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICBpZiAoaW4yICYm ICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjIsIGluMmxlbikpCi0rICAgICAgICAgICAgcmV0 dXJuIDA7Ci0rICAgICAgICBpZiAoaW4zICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjMs IGluM2xlbikpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICBpZiAoaW40ICYmICFG SVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjQsIGluNGxlbikpCi0rICAgICAgICAgICAgcmV0dXJu IDA7Ci0rICAgICAgICBpZiAob3V0bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgpIHsKLSsgICAgICAg ICAgICBpZiAoIUZJUFNfZGlnZXN0ZmluYWwobWN0eCwgdnRtcCwgTlVMTCkpCi0rICAgICAgICAg ICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgIG1lbWNweShvdXQsIHZ0bXAsIG91dGxlbik7 Ci0rICAgICAgICAgICAgT1BFTlNTTF9jbGVhbnNlKHZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsK LSsgICAgICAgICAgICByZXR1cm4gMTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIUZJUFNfZGlnZXN0 ZmluYWwobWN0eCwgb3V0LCBOVUxMKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAg ICAgIG91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsgICAgICAgIGlmIChvdXRsZW4gPT0g MCkKLSsgICAgICAgICAgICByZXR1cm4gMTsKLSsgICAgICAgIHRtcFswXSsrOwotKyAgICAgICAg b3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOwotKyAgICB9Ci0rfQotKwotKy8qIEFkZCBhbiB1bnNp Z25lZCBidWZmZXIgdG8gdGhlIGJ1ZiB2YWx1ZSwgc3RvcmluZyB0aGUgcmVzdWx0IGluIGJ1Zi4g Rm9yCi0rICogdGhpcyBhbGdvcml0aG0gdGhlIGxlbmd0aCBvZiBpbnB1dCBuZXZlciBleGNlZWRz IHRoZSBzZWVkIGxlbmd0aC4KLSsgKi8KLSsKLStzdGF0aWMgdm9pZCBjdHhfYWRkX2J1ZihEUkJH X0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqYnVmLAotKyAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCi0rewotKyAgICBzaXplX3QgaSA9IGlu bGVuOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxOwotKyAgICB1bnNpZ25lZCBjaGFyIGMs ICpwOwotKyAgICBwID0gYnVmICsgZGN0eC0+c2VlZGxlbjsKLSsgICAgcSA9IGluICsgaW5sZW47 Ci0rCi0rICAgIE9QRU5TU0xfYXNzZXJ0KGkgPD0gZGN0eC0+c2VlZGxlbik7Ci0rCi0rICAgIC8q IFNwZWNpYWwgY2FzZTogemVybyBsZW5ndGgsIGp1c3QgaW5jcmVtZW50IGJ1ZmZlciAqLwotKyAg ICBpZiAoaSkKLSsgICAgICAgIGMgPSAwOwotKyAgICBlbHNlCi0rICAgICAgICBjID0gMTsKLSsK LSsgICAgd2hpbGUgKGkpIHsKLSsgICAgICAgIGludCByOwotKyAgICAgICAgcC0tOwotKyAgICAg ICAgcS0tOwotKyAgICAgICAgciA9ICpwICsgKnEgKyBjOwotKyAgICAgICAgLyogQ2FycnkgKi8K LSsgICAgICAgIGlmIChyID4gMHhmZikKLSsgICAgICAgICAgICBjID0gMTsKLSsgICAgICAgIGVs c2UKLSsgICAgICAgICAgICBjID0gMDsKLSsgICAgICAgICpwID0gciAmIDB4ZmY7Ci0rICAgICAg ICBpLS07Ci0rICAgIH0KLSsKLSsgICAgaSA9IGRjdHgtPnNlZWRsZW4gLSBpbmxlbjsKLSsKLSsg ICAgLyogSWYgbm90IGFkZGluZyB3aG9sZSBidWZmZXIgaGFuZGxlIGZpbmFsIGNhcnJpZXMgKi8K LSsgICAgaWYgKGMgJiYgaSkgewotKyAgICAgICAgZG8gewotKyAgICAgICAgICAgIHAtLTsKLSsg ICAgICAgICAgICBjID0gKnA7Ci0rICAgICAgICAgICAgYysrOwotKyAgICAgICAgICAgICpwID0g YzsKLSsgICAgICAgICAgICBpZiAoYykKLSsgICAgICAgICAgICAgICAgcmV0dXJuOwotKyAgICAg ICAgfSB3aGlsZSAoaS0tKTsKLSsgICAgfQotK30KLSsKLSsvKiBGaW5hbGlzZSBhbmQgYWRkIGhh c2ggdG8gViAqLwotKwotK3N0YXRpYyBpbnQgY3R4X2FkZF9tZChEUkJHX0NUWCAqZGN0eCkKLSt7 Ci0rICAgIGlmICghRklQU19kaWdlc3RmaW5hbChkY3R4LT5kLmhhc2gubWN0eCwgZGN0eC0+ZC5o YXNoLnZ0bXAsIE5VTEwpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGN0eF9hZGRfYnVmKGRj dHgsIGRjdHgtPmQuaGFzaC5WLCBkY3R4LT5kLmhhc2gudnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgp OwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBoYXNoX2dlbihEUkJHX0NUWCAq ZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuKQotK3sKLSsgICAgRFJCR19I QVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7Ci0rICAgIGlmIChvdXRsZW4gPT0gMCkKLSsg ICAgICAgIHJldHVybiAxOwotKyAgICBtZW1jcHkoaGN0eC0+dnRtcCwgaGN0eC0+ViwgZGN0eC0+ c2VlZGxlbik7Ci0rICAgIGZvciAoOzspIHsKLSsgICAgICAgIEZJUFNfZGlnZXN0aW5pdChoY3R4 LT5tY3R4LCBoY3R4LT5tZCk7Ci0rICAgICAgICBGSVBTX2RpZ2VzdHVwZGF0ZShoY3R4LT5tY3R4 LCBoY3R4LT52dG1wLCBkY3R4LT5zZWVkbGVuKTsKLSsgICAgICAgIGlmICghKGRjdHgtPnhmbGFn cyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpIHsKLSsgICAgICAgICAgICBG SVBTX2RpZ2VzdGZpbmFsKGhjdHgtPm1jdHgsIGRjdHgtPmxiLCBOVUxMKTsKLSsgICAgICAgICAg ICBkY3R4LT5sYl92YWxpZCA9IDE7Ci0rICAgICAgICB9IGVsc2UgaWYgKG91dGxlbiA8IGRjdHgt PmJsb2NrbGVuZ3RoKSB7Ci0rICAgICAgICAgICAgRklQU19kaWdlc3RmaW5hbChoY3R4LT5tY3R4 LCBoY3R4LT52dG1wLCBOVUxMKTsKLSsgICAgICAgICAgICBpZiAoIWZpcHNfZHJiZ19jcHJuZ190 ZXN0KGRjdHgsIGhjdHgtPnZ0bXApKQotKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAg ICAgICAgICBtZW1jcHkob3V0LCBoY3R4LT52dG1wLCBvdXRsZW4pOwotKyAgICAgICAgICAgIHJl dHVybiAxOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICBGSVBTX2RpZ2VzdGZpbmFs KGhjdHgtPm1jdHgsIG91dCwgTlVMTCk7Ci0rICAgICAgICAgICAgaWYgKCFmaXBzX2RyYmdfY3By bmdfdGVzdChkY3R4LCBvdXQpKQotKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAg ICAgICBvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rICAgICAgICAgICAgaWYgKG91dGxl biA9PSAwKQotKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSsgICAgICAgICAgICBvdXQgKz0g ZGN0eC0+YmxvY2tsZW5ndGg7Ci0rICAgICAgICB9Ci0rICAgICAgICBjdHhfYWRkX2J1ZihkY3R4 LCBoY3R4LT52dG1wLCBOVUxMLCAwKTsKLSsgICAgfQotK30KLSsKLStzdGF0aWMgaW50IGRyYmdf aGFzaF9pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNl LCBzaXplX3Qgbm9uY2VfbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBwc3RyX2xlbikKLSt7Ci0rICAgIERSQkdf SEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKyAgICBpZiAoIWhhc2hfZGYoZGN0eCwg aGN0eC0+ViwKLSsgICAgICAgICAgICAgICAgIGVudCwgZW50X2xlbiwgbm9uY2UsIG5vbmNlX2xl biwgcHN0ciwgcHN0cl9sZW4sIE5VTEwsIDApKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlm ICghaGFzaF9kZihkY3R4LCBoY3R4LT5DLAotKyAgICAgICAgICAgICAgICAgTlVMTCwgMCwgaGN0 eC0+ViwgZGN0eC0+c2VlZGxlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCi0rICAgICAgICByZXR1cm4g MDsKLSsKLSsjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCi0rICAgIGZwcmludGYoc3RkZXJyLCAiVitD IGFmdGVyIGluc3RhbnRpYXRlOlxuIik7Ci0rICAgIGhleHByaW50KHN0ZGVyciwgaGN0eC0+Viwg ZGN0eC0+c2VlZGxlbik7Ci0rICAgIGhleHByaW50KHN0ZGVyciwgaGN0eC0+QywgZGN0eC0+c2Vl ZGxlbik7Ci0rI2VuZGlmCi0rICAgIHJldHVybiAxOwotK30KLSsKLStzdGF0aWMgaW50IGRyYmdf aGFzaF9yZXNlZWQoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xl bikKLSt7Ci0rICAgIERSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKyAgICAv KiBWIGFib3V0IHRvIGJlIHVwZGF0ZWQgc28gdXNlIEMgYXMgb3V0cHV0IGluc3RlYWQgKi8KLSsg ICAgaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsCi0rICAgICAgICAgICAgICAgICBOVUxMLCAx LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLAotKyAgICAgICAgICAgICAgICAgZW50LCBlbnRfbGVu LCBhZGluLCBhZGluX2xlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgbWVtY3B5KGhjdHgt PlYsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwotKyAgICBpZiAoIWhhc2hfZGYoZGN0eCwgaGN0 eC0+QywgTlVMTCwgMCwKLSsgICAgICAgICAgICAgICAgIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4s IE5VTEwsIDAsIE5VTEwsIDApKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rI2lmZGVmIEhBU0hfRFJC R19UUkFDRQotKyAgICBmcHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciByZXNlZWQ6XG4iKTsKLSsg ICAgaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKLSsgICAgaGV4cHJp bnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsjZW5kaWYKLSsgICAgcmV0dXJu IDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4 LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6 ZV90IG91dGxlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0rewotKyAgICBEUkJHX0hBU0hfQ1RYICpo Y3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsgICAgRVZQX01EX0NUWCAqbWN0eCA9IGhjdHgtPm1jdHg7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgdG1wWzRdOwotKyAgICBpZiAoYWRpbiAmJiBhZGluX2xlbikg ewotKyAgICAgICAgdG1wWzBdID0gMjsKLSsgICAgICAgIGlmICghRklQU19kaWdlc3Rpbml0KG1j dHgsIGhjdHgtPm1kKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIGlmICghRVZQ X0RpZ2VzdFVwZGF0ZShtY3R4LCB0bXAsIDEpKQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAg ICAgICAgaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4p KQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgaWYgKCFFVlBfRGlnZXN0VXBkYXRl KG1jdHgsIGFkaW4sIGFkaW5fbGVuKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAg IGlmICghY3R4X2FkZF9tZChkY3R4KSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgfQot KyAgICBpZiAoIWhhc2hfZ2VuKGRjdHgsIG91dCwgb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAw OwotKwotKyAgICB0bXBbMF0gPSAzOwotKyAgICBpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBo Y3R4LT5tZCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKCFFVlBfRGlnZXN0VXBkYXRl KG1jdHgsIHRtcCwgMSkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKCFFVlBfRGlnZXN0 VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7 Ci0rCi0rICAgIGlmICghY3R4X2FkZF9tZChkY3R4KSkKLSsgICAgICAgIHJldHVybiAwOwotKwot KyAgICBjdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsK LSsKLSsgICAgdG1wWzBdID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDI0KSAmIDB4ZmY7Ci0r ICAgIHRtcFsxXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiAxNikgJiAweGZmOwotKyAgICB0 bXBbMl0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gOCkgJiAweGZmOwotKyAgICB0bXBbM10g PSBkY3R4LT5yZXNlZWRfY291bnRlciAmIDB4ZmY7Ci0rICAgIGN0eF9hZGRfYnVmKGRjdHgsIGhj dHgtPlYsIHRtcCwgNCk7Ci0rI2lmZGVmIEhBU0hfRFJCR19UUkFDRQotKyAgICBmcHJpbnRmKHN0 ZGVyciwgIlYrQyBhZnRlciBnZW5lcmF0ZTpcbiIpOwotKyAgICBoZXhwcmludChzdGRlcnIsIGhj dHgtPlYsIGRjdHgtPnNlZWRsZW4pOwotKyAgICBoZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRj dHgtPnNlZWRsZW4pOwotKyNlbmRpZgotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGlu dCBkcmJnX2hhc2hfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIEVWUF9N RF9DVFhfZnJlZShkY3R4LT5kLmhhc2gubWN0eCk7Ci0rICAgIE9QRU5TU0xfY2xlYW5zZSgmZGN0 eC0+ZC5oYXNoLCBzaXplb2YoRFJCR19IQVNIX0NUWCkpOwotKyAgICByZXR1cm4gMTsKLSt9Ci0r Ci0raW50IGZpcHNfZHJiZ19oYXNoX2luaXQoRFJCR19DVFggKmRjdHgpCi0rewotKyAgICBjb25z dCBFVlBfTUQgKm1kOwotKyAgICBEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsK LSsgICAgbWQgPSBGSVBTX2dldF9kaWdlc3RieW5pZChkY3R4LT50eXBlKTsKLSsgICAgaWYgKCFt ZCkKLSsgICAgICAgIHJldHVybiAtMjsKLSsgICAgc3dpdGNoIChkY3R4LT50eXBlKSB7Ci0rICAg IGNhc2UgTklEX3NoYTE6Ci0rICAgICAgICBkY3R4LT5zdHJlbmd0aCA9IDEyODsKLSsgICAgICAg IGJyZWFrOwotKwotKyAgICBjYXNlIE5JRF9zaGEyMjQ6Ci0rICAgICAgICBkY3R4LT5zdHJlbmd0 aCA9IDE5MjsKLSsgICAgICAgIGJyZWFrOwotKwotKyAgICBkZWZhdWx0OgotKyAgICAgICAgZGN0 eC0+c3RyZW5ndGggPSAyNTY7Ci0rICAgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICBkY3R4 LT5pbnN0YW50aWF0ZSA9IGRyYmdfaGFzaF9pbnN0YW50aWF0ZTsKLSsgICAgZGN0eC0+cmVzZWVk ID0gZHJiZ19oYXNoX3Jlc2VlZDsKLSsgICAgZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2hhc2hfZ2Vu ZXJhdGU7Ci0rICAgIGRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2hhc2hfdW5pbnN0YW50aWF0 ZTsKLSsKLSsgICAgZGN0eC0+ZC5oYXNoLm1kID0gbWQ7Ci0rICAgIGhjdHgtPm1jdHggPSBFVlBf TURfQ1RYX25ldygpOwotKyAgICBpZiAoaGN0eC0+bWN0eCA9PSBOVUxMKQotKyAgICAgICAgcmV0 dXJuIC0xOwotKwotKyAgICAvKiBUaGVzZSBhcmUgdGFrZW4gZnJvbSBTUCA4MDAtOTAgMTAuMSB0 YWJsZSAyICovCi0rCi0rICAgIGRjdHgtPmJsb2NrbGVuZ3RoID0gRVZQX01EX3NpemUobWQpOwot KyAgICBpZiAoZGN0eC0+YmxvY2tsZW5ndGggPiAzMikKLSsgICAgICAgIGRjdHgtPnNlZWRsZW4g PSAxMTE7Ci0rICAgIGVsc2UKLSsgICAgICAgIGRjdHgtPnNlZWRsZW4gPSA1NTsKLSsKLSsgICAg ZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7Ci0rICAgIGRjdHgtPm1heF9l bnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICBkY3R4LT5taW5fbm9uY2UgPSBkY3R4 LT5taW5fZW50cm9weSAvIDI7Ci0rICAgIGRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdU SDsKLSsKLSsgICAgZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7Ci0rICAgIGRjdHgt Pm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICBkY3R4LT5tYXhfcmVxdWVzdCA9 IDEgPDwgMTY7Ci0rICAgIGRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDEgPDwgMjQ7Ci0rCi0rICAg IHJldHVybiAxOwotK30KLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19obWFjLmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1h Yy5jCi0tLS0gb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYy5maXBz CTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjMzMjM2ODA3ICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgv Y3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzMzIzNjgw NyArMDIwMAotQEAgLTAsMCArMSwyNzIgQEAKLSsvKiBmaXBzL3JhbmQvZmlwc19kcmJnX2htYWMu YyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5v cmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0 OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVu U1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAq ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxz dHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv YWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0rCi0rc3RhdGljIGludCBk cmJnX2htYWNfdXBkYXRlKERSQkdfQ1RYICpkY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxl biwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4z LCBzaXplX3QgaW4zbGVuKQotK3sKLSsgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYzAgPSAwLCBj MSA9IDE7Ci0rICAgIERSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOwotKyAgICBI TUFDX0NUWCAqaGN0eCA9IGhtYWMtPmhjdHg7Ci0rCi0rICAgIGlmICghSE1BQ19Jbml0X2V4KGhj dHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rICAgICAg ICByZXR1cm4gMDsKLSsgICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5i bG9ja2xlbmd0aCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKCFITUFDX1VwZGF0ZSho Y3R4LCAmYzAsIDEpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChpbjFsZW4gJiYgIUhN QUNfVXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBp ZiAoaW4ybGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxlbikpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgaWYgKGluM2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4zLCBpbjNs ZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIGlmICghSE1BQ19GaW5hbChoY3R4LCBo bWFjLT5LLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICBpZiAoIUhNQUNfSW5p dF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+Viwg ZGN0eC0+YmxvY2tsZW5ndGgpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIGlmICghSE1B Q19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAg ICBpZiAoIWluMWxlbiAmJiAhaW4ybGVuICYmICFpbjNsZW4pCi0rICAgICAgICByZXR1cm4gMTsK LSsKLSsgICAgaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5n dGgsIGhtYWMtPm1kLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAoIUhNQUNf VXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsgICAgICAgIHJldHVy biAwOwotKyAgICBpZiAoIUhNQUNfVXBkYXRlKGhjdHgsICZjMSwgMSkpCi0rICAgICAgICByZXR1 cm4gMDsKLSsgICAgaWYgKGluMWxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4xLCBpbjFsZW4p KQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChpbjJsZW4gJiYgIUhNQUNfVXBkYXRlKGhj dHgsIGluMiwgaW4ybGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAoaW4zbGVuICYm ICFITUFDX1VwZGF0ZShoY3R4LCBpbjMsIGluM2xlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsK LSsgICAgaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPkssIE5VTEwpKQotKyAgICAgICAgcmV0 dXJuIDA7Ci0rCi0rICAgIGlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJs b2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYg KCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rICAgICAg ICByZXR1cm4gMDsKLSsKLSsgICAgaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYsIE5VTEwp KQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIHJldHVybiAxOwotKwotK30KLSsKLStzdGF0 aWMgaW50IGRyYmdfaG1hY19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBl bnRfbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VfbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBwc3RyX2xlbikKLSt7 Ci0rICAgIERSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOwotKyAgICBtZW1zZXQo aG1hYy0+SywgMCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKyAgICBtZW1zZXQoaG1hYy0+ViwgMSwg ZGN0eC0+YmxvY2tsZW5ndGgpOwotKyAgICBpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgIGVudCwgZW50X2xlbiwgbm9uY2UsIG5vbmNlX2xlbiwg cHN0ciwgcHN0cl9sZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rI2lmZGVmIEhNQUNfRFJC R19UUkFDRQotKyAgICBmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciBpbnN0YW50aWF0ZTpcbiIp OwotKyAgICBoZXhwcmludChzdGRlcnIsIGhtYWMtPkssIGhtYWMtPmJsb2NrbGVuZ3RoKTsKLSsg ICAgaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9ja2xlbmd0aCk7Ci0rI2VuZGlm Ci0rICAgIHJldHVybiAxOwotK30KLSsKLStzdGF0aWMgaW50IGRyYmdfaG1hY19yZXNlZWQoRFJC R19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKLSt7Ci0rICAgIGlm ICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LCBlbnQsIGVudF9sZW4sIGFkaW4sIGFkaW5fbGVuLCBO VUxMLCAwKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyNpZmRlZiBITUFDX0RSQkdfVFJBQ0UK LSsgICAgewotKyAgICAgICAgRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7Ci0r ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciByZXNlZWQ6XG4iKTsKLSsgICAgICAg IGhleHByaW50KHN0ZGVyciwgaG1hYy0+SywgaG1hYy0+YmxvY2tsZW5ndGgpOwotKyAgICAgICAg aGV4cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9ja2xlbmd0aCk7Ci0rICAgIH0KLSsj ZW5kaWYKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFjX2dlbmVy YXRlKERSQkdfQ1RYICpkY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0rewotKyAg ICBEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKLSsgICAgSE1BQ19DVFggKmhj dHggPSBobWFjLT5oY3R4OwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpWdG1wID0gaG1hYy0+ VjsKLSsgICAgaWYgKGFkaW5fbGVuICYmICFkcmJnX2htYWNfdXBkYXRlKGRjdHgsIGFkaW4sIGFk aW5fbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBmb3Ig KDs7KSB7Ci0rICAgICAgICBpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5i bG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAg ICAgICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBWdG1wLCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0r ICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICBpZiAoIShkY3R4LT54ZmxhZ3MgJiBEUkJH X0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKSB7Ci0rICAgICAgICAgICAgaWYgKCFITUFD X0ZpbmFsKGhjdHgsIGRjdHgtPmxiLCBOVUxMKSkKLSsgICAgICAgICAgICAgICAgcmV0dXJuIDA7 Ci0rICAgICAgICAgICAgZGN0eC0+bGJfdmFsaWQgPSAxOwotKyAgICAgICAgICAgIFZ0bXAgPSBk Y3R4LT5sYjsKLSsgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgICAgIH0gZWxzZSBpZiAob3V0 bGVuID4gZGN0eC0+YmxvY2tsZW5ndGgpIHsKLSsgICAgICAgICAgICBpZiAoIUhNQUNfRmluYWwo aGN0eCwgb3V0LCBOVUxMKSkKLSsgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICAg ICAgaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBvdXQpKQotKyAgICAgICAgICAgICAg ICByZXR1cm4gMDsKLSsgICAgICAgICAgICBWdG1wID0gb3V0OwotKyAgICAgICAgfSBlbHNlIHsK LSsgICAgICAgICAgICBpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCi0rICAg ICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgIGlmICghZmlwc19kcmJnX2Nwcm5n X3Rlc3QoZGN0eCwgaG1hYy0+VikpCi0rICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAg ICAgICAgIG1lbWNweShvdXQsIGhtYWMtPlYsIG91dGxlbik7Ci0rICAgICAgICAgICAgYnJlYWs7 Ci0rICAgICAgICB9Ci0rICAgICAgICBvdXQgKz0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rICAgICAg ICBvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rICAgIH0KLSsgICAgaWYgKCFkcmJnX2ht YWNfdXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKLSsgICAg ICAgIHJldHVybiAwOwotKwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBkcmJn X2htYWNfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIEhNQUNfQ1RYX2Zy ZWUoZGN0eC0+ZC5obWFjLmhjdHgpOwotKyAgICBPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQuaG1h Yywgc2l6ZW9mKERSQkdfSE1BQ19DVFgpKTsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK2ludCBm aXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KQotK3sKLSsgICAgY29uc3QgRVZQX01E ICptZCA9IE5VTEw7Ci0rICAgIERSQkdfSE1BQ19DVFggKmhjdHggPSAmZGN0eC0+ZC5obWFjOwot KyAgICBkY3R4LT5zdHJlbmd0aCA9IDI1NjsKLSsgICAgc3dpdGNoIChkY3R4LT50eXBlKSB7Ci0r ICAgIGNhc2UgTklEX2htYWNXaXRoU0hBMToKLSsgICAgICAgIG1kID0gRVZQX3NoYTEoKTsKLSsg ICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMTI4OwotKyAgICAgICAgYnJlYWs7Ci0rCi0rICAgIGNh c2UgTklEX2htYWNXaXRoU0hBMjI0OgotKyAgICAgICAgbWQgPSBFVlBfc2hhMjI0KCk7Ci0rICAg ICAgICBkY3R4LT5zdHJlbmd0aCA9IDE5MjsKLSsgICAgICAgIGJyZWFrOwotKwotKyAgICBjYXNl IE5JRF9obWFjV2l0aFNIQTI1NjoKLSsgICAgICAgIG1kID0gRVZQX3NoYTI1NigpOwotKyAgICAg ICAgYnJlYWs7Ci0rCi0rICAgIGNhc2UgTklEX2htYWNXaXRoU0hBMzg0OgotKyAgICAgICAgbWQg PSBFVlBfc2hhMzg0KCk7Ci0rICAgICAgICBicmVhazsKLSsKLSsgICAgY2FzZSBOSURfaG1hY1dp dGhTSEE1MTI6Ci0rICAgICAgICBtZCA9IEVWUF9zaGE1MTIoKTsKLSsgICAgICAgIGJyZWFrOwot KwotKyAgICBkZWZhdWx0OgotKyAgICAgICAgZGN0eC0+c3RyZW5ndGggPSAwOwotKyAgICAgICAg cmV0dXJuIC0yOwotKyAgICB9Ci0rICAgIGRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19obWFjX2lu c3RhbnRpYXRlOwotKyAgICBkY3R4LT5yZXNlZWQgPSBkcmJnX2htYWNfcmVzZWVkOwotKyAgICBk Y3R4LT5nZW5lcmF0ZSA9IGRyYmdfaG1hY19nZW5lcmF0ZTsKLSsgICAgZGN0eC0+dW5pbnN0YW50 aWF0ZSA9IGRyYmdfaG1hY191bmluc3RhbnRpYXRlOwotKyAgICBoY3R4LT5oY3R4ID0gSE1BQ19D VFhfbmV3KCk7Ci0rICAgIGlmIChoY3R4LT5oY3R4ID09IE5VTEwpCi0rICAgICAgICByZXR1cm4g LTE7Ci0rICAgIGhjdHgtPm1kID0gbWQ7Ci0rICAgIGRjdHgtPmJsb2NrbGVuZ3RoID0gTV9FVlBf TURfc2l6ZShtZCk7Ci0rICAgIGRjdHgtPnNlZWRsZW4gPSBNX0VWUF9NRF9zaXplKG1kKTsKLSsK LSsgICAgZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7Ci0rICAgIGRjdHgt Pm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICBkY3R4LT5taW5fbm9uY2Ug PSBkY3R4LT5taW5fZW50cm9weSAvIDI7Ci0rICAgIGRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFY X0xFTkdUSDsKLSsKLSsgICAgZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7Ci0rICAg IGRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICBkY3R4LT5tYXhfcmVx dWVzdCA9IDEgPDwgMTY7Ci0rICAgIGRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDEgPDwgMjQ7Ci0r Ci0rICAgIHJldHVybiAxOwotK30KLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBz L2ZpcHNfZHJiZ19saWIuYy5maXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfZHJi Z19saWIuYwotLS0tIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYy5m aXBzCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjMzMjM2ODA3ICswMjAwCi0rKysgb3BlbnNzbC0xLjEu MGgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjMzMjM2 ODA3ICswMjAwCi1AQCAtMCwwICsxLDU1NSBAQAotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBO IEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3Qu Ci0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAg ZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcv KSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoK LSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUg PHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiaW50ZXJu YWwvZmlwc19pbnQuaCIKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVk ZSAiZmlwc19sb2NsLmgiCi0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLSsvKiBTdXBw b3J0IGZyYW1ld29yayBmb3IgU1A4MDAtOTAgRFJCR3MgKi8KLSsKLStpbnQgRklQU19kcmJnX2lu aXQoRFJCR19DVFggKmRjdHgsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi0rewotKyAg ICBpbnQgcnY7Ci0rICAgIG1lbXNldChkY3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKLSsgICAg ZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKLSsgICAgZGN0eC0+eGZs YWdzID0gZmxhZ3M7Ci0rICAgIGRjdHgtPnR5cGUgPSB0eXBlOwotKwotKyAgICBkY3R4LT5pZmxh Z3MgPSAwOwotKyAgICBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuID0gMDsKLSsgICAgZGN0eC0+aGVh bHRoX2NoZWNrX2NudCA9IDA7Ci0rICAgIGRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZhbCA9IERS QkdfSEVBTFRIX0lOVEVSVkFMOwotKwotKyAgICBydiA9IGZpcHNfZHJiZ19oYXNoX2luaXQoZGN0 eCk7Ci0rCi0rICAgIGlmIChydiA9PSAtMikKLSsgICAgICAgIHJ2ID0gZmlwc19kcmJnX2N0cl9p bml0KGRjdHgpOwotKyAgICBpZiAocnYgPT0gLTIpCi0rICAgICAgICBydiA9IGZpcHNfZHJiZ19o bWFjX2luaXQoZGN0eCk7Ci0rCi0rICAgIGlmIChydiA8PSAwKSB7Ci0rICAgICAgICBpZiAocnYg PT0gLTIpCi0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNf Ul9VTlNVUFBPUlRFRF9EUkJHX1RZUEUpOwotKyAgICAgICAgZWxzZQotKyAgICAgICAgICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklULCBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RS QkcpOwotKyAgICB9Ci0rCi0rICAgIC8qIElmIG5vdCBpbiB0ZXN0IG1vZGUgcnVuIHNlbGZ0ZXN0 cyBvbiBEUkJHIG9mIHRoZSBzYW1lIHR5cGUgKi8KLSsKLSsgICAgaWYgKCEoZGN0eC0+eGZsYWdz ICYgRFJCR19GTEFHX1RFU1QpKSB7Ci0rICAgICAgICBpZiAoIUZJUFNfZHJiZ19oZWFsdGhfY2hl Y2soZGN0eCkpIHsKLSsgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwg RklQU19SX1NFTEZURVNUX0ZBSUxVUkUpOwotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAg ICAgfQotKyAgICB9Ci0rCi0rICAgIHJldHVybiBydjsKLSt9Ci0rCi0rRFJCR19DVFggKkZJUFNf ZHJiZ19uZXcoaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncykKLSt7Ci0rICAgIERSQkdfQ1RY ICpkY3R4OwotKyAgICBkY3R4ID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKERSQkdfQ1RYKSk7Ci0r ICAgIGlmICghZGN0eCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX05FVywg RVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSsK LSsgICAgaWYgKHR5cGUgPT0gMCkgewotKyAgICAgICAgbWVtc2V0KGRjdHgsIDAsIHNpemVvZihE UkJHX0NUWCkpOwotKyAgICAgICAgZGN0eC0+dHlwZSA9IDA7Ci0rICAgICAgICBkY3R4LT5zdGF0 dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOwotKyAgICAgICAgcmV0dXJuIGRjdHg7Ci0r ICAgIH0KLSsKLSsgICAgaWYgKEZJUFNfZHJiZ19pbml0KGRjdHgsIHR5cGUsIGZsYWdzKSA8PSAw KSB7Ci0rICAgICAgICBPUEVOU1NMX2ZyZWUoZGN0eCk7Ci0rICAgICAgICByZXR1cm4gTlVMTDsK LSsgICAgfQotKwotKyAgICByZXR1cm4gZGN0eDsKLSt9Ci0rCi0rdm9pZCBGSVBTX2RyYmdfZnJl ZShEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIGlmIChkY3R4LT51bmluc3RhbnRpYXRlKQotKyAg ICAgICAgZGN0eC0+dW5pbnN0YW50aWF0ZShkY3R4KTsKLSsgICAgLyogRG9uJ3QgZnJlZSB1cCBk ZWZhdWx0IERSQkcgKi8KLSsgICAgaWYgKGRjdHggPT0gRklQU19nZXRfZGVmYXVsdF9kcmJnKCkp IHsKLSsgICAgICAgIG1lbXNldChkY3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKLSsgICAgICAg IGRjdHgtPnR5cGUgPSAwOwotKyAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5J TklUSUFMSVNFRDsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIE9QRU5TU0xfY2xlYW5zZSgmZGN0 eC0+ZCwgc2l6ZW9mKGRjdHgtPmQpKTsKLSsgICAgICAgIE9QRU5TU0xfZnJlZShkY3R4KTsKLSsg ICAgfQotK30KLSsKLStzdGF0aWMgc2l6ZV90IGZpcHNfZ2V0X2VudHJvcHkoRFJCR19DVFggKmRj dHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQotK3sKLSsgICAg dW5zaWduZWQgY2hhciAqdG91dCwgKnA7Ci0rICAgIHNpemVfdCBibCA9IGRjdHgtPmVudHJvcHlf YmxvY2tsZW4sIHJ2OwotKyAgICBpZiAoIWRjdHgtPmdldF9lbnRyb3B5KQotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIGlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCB8fCAhYmwpCi0r ICAgICAgICByZXR1cm4gZGN0eC0+Z2V0X2VudHJvcHkoZGN0eCwgcG91dCwgZW50cm9weSwgbWlu X2xlbiwgbWF4X2xlbik7Ci0rICAgIHJ2ID0gZGN0eC0+Z2V0X2VudHJvcHkoZGN0eCwgJnRvdXQs IGVudHJvcHkgKyBibCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fbGVuICsgYmws IG1heF9sZW4gKyBibCk7Ci0rICAgIGlmICh0b3V0ID09IE5VTEwpCi0rICAgICAgICByZXR1cm4g MDsKLSsgICAgKnBvdXQgPSB0b3V0ICsgYmw7Ci0rICAgIGlmIChydiA8IChtaW5fbGVuICsgYmwp IHx8IChydiAlIGJsKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICAvKiBDb21wYXJlIGNvbnNl Y3V0aXZlIGJsb2NrcyBmb3IgY29udGludW91cyBQUk5HIHRlc3QgKi8KLSsgICAgZm9yIChwID0g dG91dDsgcCA8IHRvdXQgKyBydiAtIGJsOyBwICs9IGJsKSB7Ci0rICAgICAgICBpZiAoIW1lbWNt cChwLCBwICsgYmwsIGJsKSkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfR0VU X0VOVFJPUFksIEZJUFNfUl9FTlRST1BZX1NPVVJDRV9TVFVDSyk7Ci0rICAgICAgICAgICAgcmV0 dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsgICAgcnYgLT0gYmw7Ci0rICAgIGlmIChydiA+ IG1heF9sZW4pCi0rICAgICAgICByZXR1cm4gbWF4X2xlbjsKLSsgICAgcmV0dXJuIHJ2OwotK30K LSsKLStzdGF0aWMgdm9pZCBmaXBzX2NsZWFudXBfZW50cm9weShEUkJHX0NUWCAqZGN0eCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVf dCBvbGVuKQotK3sKLSsgICAgc2l6ZV90IGJsOwotKyAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJC R19GTEFHX1RFU1QpCi0rICAgICAgICBibCA9IDA7Ci0rICAgIGVsc2UKLSsgICAgICAgIGJsID0g ZGN0eC0+ZW50cm9weV9ibG9ja2xlbjsKLSsgICAgLyogQ2FsbCBjbGVhbnVwIHdpdGggb3JpZ2lu YWwgYXJndW1lbnRzICovCi0rICAgIGRjdHgtPmNsZWFudXBfZW50cm9weShkY3R4LCBvdXQgLSBi bCwgb2xlbiArIGJsKTsKLSt9Ci0rCi0raW50IEZJUFNfZHJiZ19pbnN0YW50aWF0ZShEUkJHX0NU WCAqZGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KnBlcnMsIHNpemVfdCBwZXJzbGVuKQotK3sKLSsgICAgc2l6ZV90IGVudGxlbiA9IDAsIG5vbmNl bGVuID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciAqbm9uY2UgPSBOVUxMLCAqZW50cm9weSA9IE5V TEw7Ci0rCi0rI2lmIDAKLSsgICAgLyogUHV0IGhlcmUgc28gZXJyb3Igc2NyaXB0IHBpY2tzIHRo ZW0gdXAgKi8KLSsgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLAotKyAg ICAgICAgICAgIEZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HKTsKLSsgICAg RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfSU5fRVJST1JfU1RB VEUpOwotKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9B TFJFQURZX0lOU1RBTlRJQVRFRCk7Ci0rICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNU QU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWSk7Ci0rICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfTk9O Q0UpOwotKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9J TlNUQU5USUFURV9FUlJPUik7Ci0rICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5U SUFURSwgRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VEKTsKLSsjZW5kaWYKLSsKLSsgICAgaW50 IHIgPSAwOwotKwotKyAgICBpZiAocGVyc2xlbiA+IGRjdHgtPm1heF9wZXJzKSB7Ci0rICAgICAg ICByID0gRklQU19SX1BFUlNPTkFMSVNBVElPTl9TVFJJTkdfVE9PX0xPTkc7Ci0rICAgICAgICBn b3RvIGVuZDsKLSsgICAgfQotKwotKyAgICBpZiAoIWRjdHgtPmluc3RhbnRpYXRlKSB7Ci0rICAg ICAgICByID0gRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VEOwotKyAgICAgICAgZ290byBlbmQ7 Ci0rICAgIH0KLSsKLSsgICAgaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJ QUxJU0VEKSB7Ci0rICAgICAgICBpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX0VSUk9S KQotKyAgICAgICAgICAgIHIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7Ci0rICAgICAgICBlbHNl Ci0rICAgICAgICAgICAgciA9IEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRDsKLSsgICAgICAg IGdvdG8gZW5kOwotKyAgICB9Ci0rCi0rICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VS Uk9SOwotKwotKyAgICBlbnRsZW4gPSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5LCBk Y3R4LT5zdHJlbmd0aCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY3R4LT5taW5f ZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOwotKwotKyAgICBpZiAoZW50bGVuIDwgZGN0eC0+ bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4X2VudHJvcHkpIHsKLSsgICAgICAgIHIg PSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZOwotKyAgICAgICAgZ290byBlbmQ7Ci0r ICAgIH0KLSsKLSsgICAgaWYgKGRjdHgtPm1heF9ub25jZSA+IDAgJiYgZGN0eC0+Z2V0X25vbmNl KSB7Ci0rICAgICAgICBub25jZWxlbiA9IGRjdHgtPmdldF9ub25jZShkY3R4LCAmbm9uY2UsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY3R4LT5zdHJlbmd0aCAvIDIsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY3R4LT5taW5fbm9uY2UsIGRjdHgt Pm1heF9ub25jZSk7Ci0rCi0rICAgICAgICBpZiAobm9uY2VsZW4gPCBkY3R4LT5taW5fbm9uY2Ug fHwgbm9uY2VsZW4gPiBkY3R4LT5tYXhfbm9uY2UpIHsKLSsgICAgICAgICAgICByID0gRklQU19S X0VSUk9SX1JFVFJJRVZJTkdfTk9OQ0U7Ci0rICAgICAgICAgICAgZ290byBlbmQ7Ci0rICAgICAg ICB9Ci0rCi0rICAgIH0KLSsKLSsgICAgaWYgKCFkY3R4LT5pbnN0YW50aWF0ZShkY3R4LAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJvcHksIGVudGxlbiwgbm9uY2UsIG5vbmNlbGVu LCBwZXJzLCBwZXJzbGVuKSkgewotKyAgICAgICAgciA9IEZJUFNfUl9FUlJPUl9JTlNUQU5USUFU SU5HX0RSQkc7Ci0rICAgICAgICBnb3RvIGVuZDsKLSsgICAgfQotKwotKyAgICBkY3R4LT5zdGF0 dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsKLSsgICAgaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19D VVNUT01fUkVTRUVEKSkKLSsgICAgICAgIGRjdHgtPnJlc2VlZF9jb3VudGVyID0gMTsKLSsKLSsg ZW5kOgotKwotKyAgICBpZiAoZW50cm9weSAmJiBkY3R4LT5jbGVhbnVwX2VudHJvcHkpCi0rICAg ICAgICBmaXBzX2NsZWFudXBfZW50cm9weShkY3R4LCBlbnRyb3B5LCBlbnRsZW4pOwotKwotKyAg ICBpZiAobm9uY2UgJiYgZGN0eC0+Y2xlYW51cF9ub25jZSkKLSsgICAgICAgIGRjdHgtPmNsZWFu dXBfbm9uY2UoZGN0eCwgbm9uY2UsIG5vbmNlbGVuKTsKLSsKLSsgICAgaWYgKGRjdHgtPnN0YXR1 cyA9PSBEUkJHX1NUQVRVU19SRUFEWSkKLSsgICAgICAgIHJldHVybiAxOwotKwotKyAgICBpZiAo ciAmJiAhKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCi0rICAgICAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIHIpOwotKwotKyAgICByZXR1cm4gMDsKLSsK LSt9Ci0rCi0rc3RhdGljIGludCBkcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVu LCBpbnQgaGNoZWNrKQotK3sKLSsgICAgdW5zaWduZWQgY2hhciAqZW50cm9weSA9IE5VTEw7Ci0r ICAgIHNpemVfdCBlbnRsZW4gPSAwOwotKyAgICBpbnQgciA9IDA7Ci0rCi0rI2lmIDAKLSsgICAg RklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEKTsKLSsg ICAgRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RP T19MT05HKTsKLSsjZW5kaWYKLSsgICAgaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19S RUFEWQotKyAgICAgICAgJiYgZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFU0VFRCkgewot KyAgICAgICAgaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKLSsgICAgICAg ICAgICByID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOwotKyAgICAgICAgZWxzZSBpZiAoZGN0eC0+ c3RhdHVzID09IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCi0rICAgICAgICAgICAgciA9IEZJ UFNfUl9OT1RfSU5TVEFOVElBVEVEOwotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsKLSsg ICAgaWYgKCFhZGluKQotKyAgICAgICAgYWRpbmxlbiA9IDA7Ci0rICAgIGVsc2UgaWYgKGFkaW5s ZW4gPiBkY3R4LT5tYXhfYWRpbikgewotKyAgICAgICAgciA9IEZJUFNfUl9BRERJVElPTkFMX0lO UFVUX1RPT19MT05HOwotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsKLSsgICAgZGN0eC0+ c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7Ci0rICAgIC8qIFBlZm9ybSBoZWFsdGggY2hlY2sg b24gYWxsIHJlc2VlZCBvcGVyYXRpb25zIGlmIG5vdCBhIHByZWRpY3Rpb24KLSsgICAgICogcmVz aXN0YW5jZSByZXF1ZXN0IGFuZCBub3QgaW4gdGVzdCBtb2RlLgotKyAgICAgKi8KLSsgICAgaWYg KGhjaGVjayAmJiAhKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkgewotKyAgICAgICAg aWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKSB7Ci0rICAgICAgICAgICAgciA9IEZJ UFNfUl9TRUxGVEVTVF9GQUlMVVJFOwotKyAgICAgICAgICAgIGdvdG8gZW5kOwotKyAgICAgICAg fQotKyAgICB9Ci0rCi0rICAgIGVudGxlbiA9IGZpcHNfZ2V0X2VudHJvcHkoZGN0eCwgJmVudHJv cHksIGRjdHgtPnN0cmVuZ3RoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjdHgt Pm1pbl9lbnRyb3B5LCBkY3R4LT5tYXhfZW50cm9weSk7Ci0rCi0rICAgIGlmIChlbnRsZW4gPCBk Y3R4LT5taW5fZW50cm9weSB8fCBlbnRsZW4gPiBkY3R4LT5tYXhfZW50cm9weSkgewotKyAgICAg ICAgciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFk7Ci0rICAgICAgICBnb3RvIGVu ZDsKLSsgICAgfQotKwotKyAgICBpZiAoIWRjdHgtPnJlc2VlZChkY3R4LCBlbnRyb3B5LCBlbnRs ZW4sIGFkaW4sIGFkaW5sZW4pKQotKyAgICAgICAgZ290byBlbmQ7Ci0rCi0rICAgIGRjdHgtPnN0 YXR1cyA9IERSQkdfU1RBVFVTX1JFQURZOwotKyAgICBpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJH X0NVU1RPTV9SRVNFRUQpKQotKyAgICAgICAgZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSAxOwotKyBl bmQ6Ci0rCi0rICAgIGlmIChlbnRyb3B5ICYmIGRjdHgtPmNsZWFudXBfZW50cm9weSkKLSsgICAg ICAgIGZpcHNfY2xlYW51cF9lbnRyb3B5KGRjdHgsIGVudHJvcHksIGVudGxlbik7Ci0rCi0rICAg IGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCi0rICAgICAgICByZXR1cm4g MTsKLSsKLSsgICAgaWYgKHIgJiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQot KyAgICAgICAgRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIHIpOwotKwotKyAgICByZXR1cm4g MDsKLSt9Ci0rCi0raW50IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsCi0rICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4p Ci0rewotKyAgICByZXR1cm4gZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxlbiwgMSk7Ci0r fQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2NoZWNrKERSQkdfQ1RYICpkY3R4KQotK3sKLSsg ICAgaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQotKyAgICAgICAgcmV0dXJuIDE7 Ci0rICAgIGRjdHgtPmhlYWx0aF9jaGVja19jbnQrKzsKLSsgICAgaWYgKGRjdHgtPmhlYWx0aF9j aGVja19jbnQgPj0gZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsKSB7Ci0rICAgICAgICBpZiAo IUZJUFNfZHJiZ19oZWFsdGhfY2hlY2soZGN0eCkpIHsKLSsgICAgICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfQ0hFQ0ssIEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFKTsKLSsgICAgICAg ICAgICByZXR1cm4gMDsKLSsgICAgICAgIH0KLSsgICAgfQotKyAgICByZXR1cm4gMTsKLSt9Ci0r Ci0raW50IEZJUFNfZHJiZ19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAq b3V0LCBzaXplX3Qgb3V0bGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWRpY3Rp b25fcmVzaXN0YW5jZSwKLSsgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotK3sKLSsgICAgaW50IHIgPSAwOwotKwotKyAgICBp ZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX0dFTkVSQVRFLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIHJldHVy biAwOwotKyAgICB9Ci0rCi0rICAgIGlmICghZmlwc19kcmJnX2NoZWNrKGRjdHgpKQotKyAgICAg ICAgcmV0dXJuIDA7Ci0rCi0rICAgIGlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVB RFkKLSsgICAgICAgICYmIGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRVNFRUQpIHsKLSsg ICAgICAgIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfRVJST1IpCi0rICAgICAgICAg ICAgciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKLSsgICAgICAgIGVsc2UgaWYgKGRjdHgtPnN0 YXR1cyA9PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQotKyAgICAgICAgICAgIHIgPSBGSVBT X1JfTk9UX0lOU1RBTlRJQVRFRDsKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICB9Ci0rCi0rICAg IGlmIChvdXRsZW4gPiBkY3R4LT5tYXhfcmVxdWVzdCkgewotKyAgICAgICAgciA9IEZJUFNfUl9S RVFVRVNUX1RPT19MQVJHRV9GT1JfRFJCRzsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0r Ci0rICAgIGlmIChhZGlubGVuID4gZGN0eC0+bWF4X2FkaW4pIHsKLSsgICAgICAgIHIgPSBGSVBT X1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICB9 Ci0rCi0rICAgIGlmIChkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpCi0rICAgICAg ICBkY3R4LT5nZW5lcmF0ZShkY3R4LCBOVUxMLCBvdXRsZW4sIE5VTEwsIDApOwotKyAgICBlbHNl IGlmIChkY3R4LT5yZXNlZWRfY291bnRlciA+PSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwpCi0rICAg ICAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRVNFRUQ7Ci0rCi0rICAgIGlmIChkY3R4 LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVTRUVEIHx8IHByZWRpY3Rpb25fcmVzaXN0YW5jZSkg ewotKyAgICAgICAgLyogSWYgcHJlZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3QgZG9uJ3QgZG8g aGVhbHRoIGNoZWNrICovCi0rICAgICAgICBpbnQgaGNoZWNrID0gcHJlZGljdGlvbl9yZXNpc3Rh bmNlID8gMCA6IDE7Ci0rCi0rICAgICAgICBpZiAoIWRyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFk aW5sZW4sIGhjaGVjaykpIHsKLSsgICAgICAgICAgICByID0gRklQU19SX1JFU0VFRF9FUlJPUjsK LSsgICAgICAgICAgICBnb3RvIGVuZDsKLSsgICAgICAgIH0KLSsgICAgICAgIGFkaW4gPSBOVUxM OwotKyAgICAgICAgYWRpbmxlbiA9IDA7Ci0rICAgIH0KLSsKLSsgICAgaWYgKCFkY3R4LT5nZW5l cmF0ZShkY3R4LCBvdXQsIG91dGxlbiwgYWRpbiwgYWRpbmxlbikpIHsKLSsgICAgICAgIHIgPSBG SVBTX1JfR0VORVJBVEVfRVJST1I7Ci0rICAgICAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRV U19FUlJPUjsKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICB9Ci0rICAgIGlmICghKGRjdHgtPmlm bGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpIHsKLSsgICAgICAgIGlmIChkY3R4LT5yZXNlZWRf Y291bnRlciA+PSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwpCi0rICAgICAgICAgICAgZGN0eC0+c3Rh dHVzID0gRFJCR19TVEFUVVNfUkVTRUVEOwotKyAgICAgICAgZWxzZQotKyAgICAgICAgICAgIGRj dHgtPnJlc2VlZF9jb3VudGVyKys7Ci0rICAgIH0KLSsKLSsgZW5kOgotKyAgICBpZiAocikgewot KyAgICAgICAgaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKLSsgICAgICAg ICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfR0VORVJBVEUsIHIpOwotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK2ludCBGSVBTX2RyYmdf dW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIGludCBydjsKLSsgICAgaWYg KCFkY3R4LT51bmluc3RhbnRpYXRlKQotKyAgICAgICAgcnYgPSAxOwotKyAgICBlbHNlCi0rICAg ICAgICBydiA9IGRjdHgtPnVuaW5zdGFudGlhdGUoZGN0eCk7Ci0rICAgIC8qIEFsdGhvdWdoIHdl J2QgbGlrZSB0byBjbGVhbnNlIGhlcmUgd2UgY2FuJ3QgYmVjYXVzZSB3ZSBoYXZlIHRvCi0rICAg ICAqIHRlc3QgdGhlIHVuaW5zdGFudGlhdGUgcmVhbGx5IHplcm9lcyB0aGUgZGF0YS4KLSsgICAg ICovCi0rICAgIG1lbXNldCgmZGN0eC0+ZCwgMCwgc2l6ZW9mKGRjdHgtPmQpKTsKLSsgICAgZGN0 eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKLSsgICAgLyogSWYgbWV0aG9k IGhhcyBwcm9ibGVtcyB1bmluc3RhbnRpYXRpbmcsIHJldHVybiBlcnJvciAqLwotKyAgICByZXR1 cm4gcnY7Ci0rfQotKwotK2ludCBGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0 eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICgqZ2V0X2VudHJvcHkpIChE UkJHX0NUWCAqY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaW5fbGVuLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBt YXhfbGVuKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmNsZWFudXBfZW50 cm9weSkgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xlbiksCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbnRyb3B5X2Jsb2NrbGVuLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKCpnZXRfbm9uY2UpIChEUkJHX0NUWCAqY3R4 LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2xlbiksCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjbGVhbnVwX25vbmNlKSAoRFJCR19DVFgg KmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBjaGFyICpvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4pKQotK3sKLSsgICAgaWYgKGRjdHgtPnN0YXR1 cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAg IGRjdHgtPmVudHJvcHlfYmxvY2tsZW4gPSBlbnRyb3B5X2Jsb2NrbGVuOwotKyAgICBkY3R4LT5n ZXRfZW50cm9weSA9IGdldF9lbnRyb3B5OwotKyAgICBkY3R4LT5jbGVhbnVwX2VudHJvcHkgPSBj bGVhbnVwX2VudHJvcHk7Ci0rICAgIGRjdHgtPmdldF9ub25jZSA9IGdldF9ub25jZTsKLSsgICAg ZGN0eC0+Y2xlYW51cF9ub25jZSA9IGNsZWFudXBfbm9uY2U7Ci0rICAgIHJldHVybiAxOwotK30K LSsKLStpbnQgRklQU19kcmJnX3NldF9yYW5kX2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKCpnZXRfYWRpbikgKERSQkdf Q1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBjaGFyICoqcG91dCksCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAoKmNsZWFudXBfYWRpbikgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo YXIgKm91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IG9sZW4pLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCAoKnJhbmRfc2VlZF9jYikgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBu dW0pLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKnJhbmRfYWRkX2Ni KSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlbnRyb3B5KSkK LSt7Ci0rICAgIGlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkK LSsgICAgICAgIHJldHVybiAwOwotKyAgICBkY3R4LT5nZXRfYWRpbiA9IGdldF9hZGluOwotKyAg ICBkY3R4LT5jbGVhbnVwX2FkaW4gPSBjbGVhbnVwX2FkaW47Ci0rICAgIGRjdHgtPnJhbmRfc2Vl ZF9jYiA9IHJhbmRfc2VlZF9jYjsKLSsgICAgZGN0eC0+cmFuZF9hZGRfY2IgPSByYW5kX2FkZF9j YjsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3ZvaWQgKkZJUFNfZHJiZ19nZXRfYXBwX2RhdGEo RFJCR19DVFggKmRjdHgpCi0rewotKyAgICByZXR1cm4gZGN0eC0+YXBwX2RhdGE7Ci0rfQotKwot K3ZvaWQgRklQU19kcmJnX3NldF9hcHBfZGF0YShEUkJHX0NUWCAqZGN0eCwgdm9pZCAqYXBwX2Rh dGEpCi0rewotKyAgICBkY3R4LT5hcHBfZGF0YSA9IGFwcF9kYXRhOwotK30KLSsKLStzaXplX3Qg RklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIHJldHVy biBkY3R4LT5ibG9ja2xlbmd0aDsKLSt9Ci0rCi0raW50IEZJUFNfZHJiZ19nZXRfc3RyZW5ndGgo RFJCR19DVFggKmRjdHgpCi0rewotKyAgICByZXR1cm4gZGN0eC0+c3RyZW5ndGg7Ci0rfQotKwot K3ZvaWQgRklQU19kcmJnX3NldF9jaGVja19pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGlu dGVydmFsKQotK3sKLSsgICAgZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsID0gaW50ZXJ2YWw7 Ci0rfQotKwotK3ZvaWQgRklQU19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoRFJCR19DVFggKmRj dHgsIGludCBpbnRlcnZhbCkKLSt7Ci0rICAgIGRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IGludGVy dmFsOwotK30KLSsKLStzdGF0aWMgaW50IGRyYmdfc3RpY2sgPSAwOwotKwotK3ZvaWQgRklQU19k cmJnX3N0aWNrKGludCBvbm9mZikKLSt7Ci0rICAgIGRyYmdfc3RpY2sgPSBvbm9mZjsKLSt9Ci0r Ci0rLyogQ29udGludW91cyBEUkJHIHV0aWxpdHkgZnVuY3Rpb24gKi8KLStpbnQgZmlwc19kcmJn X2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm91dCkKLSt7 Ci0rICAgIC8qIE5vIENQUk5HIGluIHRlc3QgbW9kZSAqLwotKyAgICBpZiAoZGN0eC0+eGZsYWdz ICYgRFJCR19GTEFHX1RFU1QpCi0rICAgICAgICByZXR1cm4gMTsKLSsgICAgLyogQ2hlY2sgYmxv Y2sgaXMgdmFsaWQ6IHNob3VsZCBuZXZlciBoYXBwZW4gKi8KLSsgICAgaWYgKGRjdHgtPmxiX3Zh bGlkID09IDApIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNU LCBGSVBTX1JfSU5URVJOQUxfRVJST1IpOwotKyAgICAgICAgZmlwc19zZXRfc2VsZnRlc3RfZmFp bCgpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsgICAgaWYgKGRyYmdfc3RpY2spCi0r ICAgICAgICBtZW1jcHkoZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKyAgICAv KiBDaGVjayBhZ2FpbnN0IGxhc3QgYmxvY2s6IGZhaWwgaWYgbWF0Y2ggKi8KLSsgICAgaWYgKCFt ZW1jbXAoZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpKSB7Ci0rICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0RSQkdfU1RVQ0spOwotKyAg ICAgICAgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAg IH0KLSsgICAgLyogU2F2ZSBsYXN0IGJsb2NrIGZvciBuZXh0IGNvbXBhcmlzb24gKi8KLSsgICAg bWVtY3B5KGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsgICAgcmV0dXJuIDE7 Ci0rfQotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQu Yy5maXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMKLS0tLSBv cGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jLmZpcHMJMjAxOC0wMy0y OSAxNDo0NDoyNC42MzMyMzY4MDcgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlw cy9maXBzX2RyYmdfcmFuZC5jCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjMzMjM2ODA3ICswMjAwCi1A QCAtMCwwICsxLDE4MyBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfcmFuZC5jICovCi0rLyog V3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRo ZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHly aWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgot KyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+Ci0rI2luY2x1ZGUgImludGVybmFsL3RocmVhZF9vbmNlLmgiCi0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAi Zmlwc19yYW5kX2xjbC5oIgotKwotKy8qIE1hcHBpbmcgb2YgU1A4MDAtOTAgRFJCR3MgdG8gT3Bl blNTTCBSQU5EX01FVEhPRCAqLwotKwotKy8qIFNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgZ2xvYmFs IFBSTkcgdXNlZCBhdCBhbnkgdGltZSBpbiBPcGVuU1NMIHVzZSBhIGdsb2JhbAotKyAqIHZhcmlh YmxlIHRvIHN0b3JlIGNvbnRleHQuCi0rICovCi0rCi0rc3RhdGljIERSQkdfQ1RYIG9zc2xfZGN0 eDsKLSsKLStzdGF0aWMgQ1JZUFRPX1JXTE9DSyAqZmlwc19yYW5kX2xvY2sgPSBOVUxMOwotK3N0 YXRpYyBDUllQVE9fT05DRSBmaXBzX3JhbmRfbG9ja19pbml0ID0gQ1JZUFRPX09OQ0VfU1RBVElD X0lOSVQ7Ci0rCi0rREVGSU5FX1JVTl9PTkNFX1NUQVRJQyhkb19maXBzX3JhbmRfbG9ja19pbml0 KQotK3sKLSsgICAgZmlwc19yYW5kX2xvY2sgPSBDUllQVE9fVEhSRUFEX2xvY2tfbmV3KCk7Ci0r ICAgIHJldHVybiBmaXBzX3JhbmRfbG9jayAhPSBOVUxMOwotK30KLSsKLStEUkJHX0NUWCAqRklQ U19nZXRfZGVmYXVsdF9kcmJnKHZvaWQpCi0rewotKyAgICBpZiAoIVJVTl9PTkNFKCZmaXBzX3Jh bmRfbG9ja19pbml0LCBkb19maXBzX3JhbmRfbG9ja19pbml0KSkKLSsgICAgICAgIHJldHVybiBO VUxMOwotKyAgICByZXR1cm4gJm9zc2xfZGN0eDsKLSt9Ci0rCi0rc3RhdGljIGludCBmaXBzX2Ry YmdfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCi0rewotKyAgICBEUkJHX0NU WCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0rICAgIGludCBydiA9IDA7Ci0rICAgIHVuc2lnbmVkIGNo YXIgKmFkaW4gPSBOVUxMOwotKyAgICBzaXplX3QgYWRpbmxlbiA9IDA7Ci0rICAgIENSWVBUT19U SFJFQURfd3JpdGVfbG9jayhmaXBzX3JhbmRfbG9jayk7Ci0rICAgIGRvIHsKLSsgICAgICAgIHNp emVfdCByY250OwotKyAgICAgICAgaWYgKGNvdW50ID4gKGludClkY3R4LT5tYXhfcmVxdWVzdCkK LSsgICAgICAgICAgICByY250ID0gZGN0eC0+bWF4X3JlcXVlc3Q7Ci0rICAgICAgICBlbHNlCi0r ICAgICAgICAgICAgcmNudCA9IGNvdW50OwotKyAgICAgICAgaWYgKGRjdHgtPmdldF9hZGluKSB7 Ci0rICAgICAgICAgICAgYWRpbmxlbiA9IGRjdHgtPmdldF9hZGluKGRjdHgsICZhZGluKTsKLSsg ICAgICAgICAgICBpZiAoYWRpbmxlbiAmJiAhYWRpbikgewotKyAgICAgICAgICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfQllURVMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgRklQ U19SX0VSUk9SX1JFVFJJRVZJTkdfQURESVRJT05BTF9JTlBVVCk7Ci0rICAgICAgICAgICAgICAg IGdvdG8gZXJyOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsgICAgICAgIHJ2ID0gRklQ U19kcmJnX2dlbmVyYXRlKGRjdHgsIG91dCwgcmNudCwgMCwgYWRpbiwgYWRpbmxlbik7Ci0rICAg ICAgICBpZiAoYWRpbikgewotKyAgICAgICAgICAgIGlmIChkY3R4LT5jbGVhbnVwX2FkaW4pCi0r ICAgICAgICAgICAgICAgIGRjdHgtPmNsZWFudXBfYWRpbihkY3R4LCBhZGluLCBhZGlubGVuKTsK LSsgICAgICAgICAgICBhZGluID0gTlVMTDsKLSsgICAgICAgIH0KLSsgICAgICAgIGlmICghcnYp Ci0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICBvdXQgKz0gcmNudDsKLSsgICAgICAg IGNvdW50IC09IHJjbnQ7Ci0rICAgIH0KLSsgICAgd2hpbGUgKGNvdW50KTsKLSsgICAgcnYgPSAx OwotKyBlcnI6Ci0rICAgIENSWVBUT19USFJFQURfdW5sb2NrKGZpcHNfcmFuZF9sb2NrKTsKLSsg ICAgcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19wc2V1ZG8odW5zaWdu ZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCi0rewotKyAgICBpZiAoZmlwc19kcmJnX2J5dGVzKG91 dCwgY291bnQpIDw9IDApCi0rICAgICAgICByZXR1cm4gLTE7Ci0rICAgIHJldHVybiAxOwotK30K LSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19zdGF0dXModm9pZCkKLSt7Ci0rICAgIERSQkdfQ1RY ICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsgICAgaW50IHJ2OwotKyAgICBDUllQVE9fVEhSRUFEX3Jl YWRfbG9jayhmaXBzX3JhbmRfbG9jayk7Ci0rICAgIHJ2ID0gZGN0eC0+c3RhdHVzID09IERSQkdf U1RBVFVTX1JFQURZID8gMSA6IDA7Ci0rICAgIENSWVBUT19USFJFQURfdW5sb2NrKGZpcHNfcmFu ZF9sb2NrKTsKLSsgICAgcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0aWMgdm9pZCBmaXBzX2RyYmdf Y2xlYW51cCh2b2lkKQotK3sKLSsgICAgRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OwotKyAg ICBDUllQVE9fVEhSRUFEX3dyaXRlX2xvY2soZmlwc19yYW5kX2xvY2spOwotKyAgICBGSVBTX2Ry YmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKLSsgICAgQ1JZUFRPX1RIUkVBRF91bmxvY2soZmlwc19y YW5kX2xvY2spOwotK30KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19zZWVkKGNvbnN0IHZvaWQg KnNlZWQsIGludCBzZWVkbGVuKQotK3sKLSsgICAgRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4 OwotKyAgICBDUllQVE9fVEhSRUFEX3dyaXRlX2xvY2soZmlwc19yYW5kX2xvY2spOwotKyAgICBp ZiAoZGN0eC0+cmFuZF9zZWVkX2NiKQotKyAgICAgICAgcmV0dXJuIGRjdHgtPnJhbmRfc2VlZF9j YihkY3R4LCBzZWVkLCBzZWVkbGVuKTsKLSsgICAgQ1JZUFRPX1RIUkVBRF91bmxvY2soZmlwc19y YW5kX2xvY2spOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdf YWRkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuLCBkb3VibGUgYWRkX2VudHJvcHkpCi0r ewotKyAgICBEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0rICAgIENSWVBUT19USFJFQURf d3JpdGVfbG9jayhmaXBzX3JhbmRfbG9jayk7Ci0rICAgIGlmIChkY3R4LT5yYW5kX2FkZF9jYikK LSsgICAgICAgIHJldHVybiBkY3R4LT5yYW5kX2FkZF9jYihkY3R4LCBzZWVkLCBzZWVkbGVuLCBh ZGRfZW50cm9weSk7Ci0rICAgIENSWVBUT19USFJFQURfdW5sb2NrKGZpcHNfcmFuZF9sb2NrKTsK LSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX2Ry YmdfbWV0aCA9IHsKLSsgICAgZmlwc19kcmJnX3NlZWQsCi0rICAgIGZpcHNfZHJiZ19ieXRlcywK LSsgICAgZmlwc19kcmJnX2NsZWFudXAsCi0rICAgIGZpcHNfZHJiZ19hZGQsCi0rICAgIGZpcHNf ZHJiZ19wc2V1ZG8sCi0rICAgIGZpcHNfZHJiZ19zdGF0dXMKLSt9OwotKwotK2NvbnN0IFJBTkRf TUVUSE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpCi0rewotKyAgICByZXR1cm4gJnJhbmRfZHJi Z19tZXRoOwotK30KLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfZHJi Z19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3Nl bGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRl c3QuYy5maXBzCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjM0MjM2ODMwICswMjAwCi0rKysgb3BlbnNz bC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMJMjAxOC0wMy0yOSAxNDo0 NDoyNC42MzQyMzY4MzAgKzAyMDAKLUBAIC0wLDAgKzEsODI4IEBACi0rLyogZmlwcy9yYW5kL2Zp cHNfZHJiZ19zZWxmdGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29u IChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8K LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki Ci0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5n Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNf cmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0rI2luY2x1ZGUgImZpcHNfbG9j bC5oIgotKwotKyNpbmNsdWRlICJmaXBzX2RyYmdfc2VsZnRlc3QuaCIKLSsKLSt0eXBlZGVmIHN0 cnVjdCB7Ci0rICAgIGludCBwb3N0OwotKyAgICBpbnQgbmlkOwotKyAgICB1bnNpZ25lZCBpbnQg ZmxhZ3M7Ci0rCi0rICAgIC8qIEtBVCBkYXRhIGZvciBubyBQUiAqLwotKyAgICBjb25zdCB1bnNp Z25lZCBjaGFyICplbnQ7Ci0rICAgIHNpemVfdCBlbnRsZW47Ci0rICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKm5vbmNlOwotKyAgICBzaXplX3Qgbm9uY2VsZW47Ci0rICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKnBlcnM7Ci0rICAgIHNpemVfdCBwZXJzbGVuOwotKyAgICBjb25zdCB1bnNpZ25lZCBj aGFyICphZGluOwotKyAgICBzaXplX3QgYWRpbmxlbjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqZW50cmVzZWVkOwotKyAgICBzaXplX3QgZW50cmVzZWVkbGVuOwotKyAgICBjb25zdCB1bnNp Z25lZCBjaGFyICphZGlucmVzZWVkOwotKyAgICBzaXplX3QgYWRpbnJlc2VlZGxlbjsKLSsgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqYWRpbjI7Ci0rICAgIHNpemVfdCBhZGluMmxlbjsKLSsgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqa2F0OwotKyAgICBzaXplX3Qga2F0bGVuOwotKyAgICBjb25z dCB1bnNpZ25lZCBjaGFyICprYXQyOwotKyAgICBzaXplX3Qga2F0MmxlbjsKLSsKLSsgICAgLyog S0FUIGRhdGEgZm9yIFBSICovCi0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudF9wcjsKLSsg ICAgc2l6ZV90IGVudGxlbl9wcjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2VfcHI7 Ci0rICAgIHNpemVfdCBub25jZWxlbl9wcjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGVy c19wcjsKLSsgICAgc2l6ZV90IHBlcnNsZW5fcHI7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmFkaW5fcHI7Ci0rICAgIHNpemVfdCBhZGlubGVuX3ByOwotKyAgICBjb25zdCB1bnNpZ25lZCBj aGFyICplbnRwcl9wcjsKLSsgICAgc2l6ZV90IGVudHBybGVuX3ByOwotKyAgICBjb25zdCB1bnNp Z25lZCBjaGFyICphZGluZ19wcjsKLSsgICAgc2l6ZV90IGFkaW5nbGVuX3ByOwotKyAgICBjb25z dCB1bnNpZ25lZCBjaGFyICplbnRnX3ByOwotKyAgICBzaXplX3QgZW50Z2xlbl9wcjsKLSsgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqa2F0X3ByOwotKyAgICBzaXplX3Qga2F0bGVuX3ByOwotKyAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICprYXQyX3ByOwotKyAgICBzaXplX3Qga2F0Mmxlbl9wcjsK LSsKLSt9IERSQkdfU0VMRlRFU1RfREFUQTsKLSsKLSsjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2Rh dGEobmlkLCBmbGFnLCBwciwgcCkge3AsIG5pZCwgZmxhZyB8IERSQkdfRkxBR19URVNULCBcCi0r ICAgICAgICBwciMjX2VudHJvcHlpbnB1dCwgc2l6ZW9mKHByIyNfZW50cm9weWlucHV0KSwgXAot KyAgICAgICAgcHIjI19ub25jZSwgc2l6ZW9mKHByIyNfbm9uY2UpLCBcCi0rICAgICAgICBwciMj X3BlcnNvbmFsaXphdGlvbnN0cmluZywgc2l6ZW9mKHByIyNfcGVyc29uYWxpemF0aW9uc3RyaW5n KSwgXAotKyAgICAgICAgcHIjI19hZGRpdGlvbmFsaW5wdXQsIHNpemVvZihwciMjX2FkZGl0aW9u YWxpbnB1dCksIFwKLSsgICAgICAgIHByIyNfZW50cm9weWlucHV0cmVzZWVkLCBzaXplb2YocHIj I19lbnRyb3B5aW5wdXRyZXNlZWQpLCBcCi0rICAgICAgICBwciMjX2FkZGl0aW9uYWxpbnB1dHJl c2VlZCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0cmVzZWVkKSwgXAotKyAgICAgICAgcHIj I19hZGRpdGlvbmFsaW5wdXQyLCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5wdXQyKSwgXAotKyAg ICAgICAgcHIjI19pbnRfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19pbnRfcmV0dXJuZWRiaXRz KSwgXAotKyAgICAgICAgcHIjI19yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3JldHVybmVkYml0 cyksIFwKLSsgICAgICAgIHByIyNfcHJfZW50cm9weWlucHV0LCBzaXplb2YocHIjI19wcl9lbnRy b3B5aW5wdXQpLCBcCi0rICAgICAgICBwciMjX3ByX25vbmNlLCBzaXplb2YocHIjI19wcl9ub25j ZSksIFwKLSsgICAgICAgIHByIyNfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nLCBzaXplb2YocHIj I19wcl9wZXJzb25hbGl6YXRpb25zdHJpbmcpLCBcCi0rICAgICAgICBwciMjX3ByX2FkZGl0aW9u YWxpbnB1dCwgc2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlucHV0KSwgXAotKyAgICAgICAgcHIj I19wcl9lbnRyb3B5aW5wdXRwciwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0cHIpLCBcCi0r ICAgICAgICBwciMjX3ByX2FkZGl0aW9uYWxpbnB1dDIsIHNpemVvZihwciMjX3ByX2FkZGl0aW9u YWxpbnB1dDIpLCBcCi0rICAgICAgICBwciMjX3ByX2VudHJvcHlpbnB1dHByMiwgc2l6ZW9mKHBy IyNfcHJfZW50cm9weWlucHV0cHIyKSwgXAotKyAgICAgICAgcHIjI19wcl9pbnRfcmV0dXJuZWRi aXRzLCBzaXplb2YocHIjI19wcl9pbnRfcmV0dXJuZWRiaXRzKSwgXAotKyAgICAgICAgcHIjI19w cl9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3ByX3JldHVybmVkYml0cyksIFwKLSsgICAgICAg IH0KLSsKLSsjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGFfZGYobmlkLCBwciwgcCkgXAotKyAg ICAgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIERSQkdfRkxBR19DVFJfVVNFX0RGLCBwciwg cCkKLSsKLSsjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGFfZWMoY3VydmUsIG1kLCBwciwgcCkg XAotKyAgICAgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YSgoY3VydmUgPDwgMTYpIHwgbWQgLCAwLCBw ciwgcCkKLSsKLStzdGF0aWMgRFJCR19TRUxGVEVTVF9EQVRBIGRyYmdfdGVzdFtdID0gewotKyAg ICBtYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5JRF9hZXNfMTI4X2N0ciwgYWVzXzEyOF91c2VfZGYs IDApLAotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5JRF9hZXNfMTkyX2N0ciwgYWVzXzE5 Ml91c2VfZGYsIDApLAotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5JRF9hZXNfMjU2X2N0 ciwgYWVzXzI1Nl91c2VfZGYsIDEpLAotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNf MTI4X2N0ciwgMCwgYWVzXzEyOF9ub19kZiwgMCksCi0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEo TklEX2Flc18xOTJfY3RyLCAwLCBhZXNfMTkyX25vX2RmLCAwKSwKLSsgICAgbWFrZV9kcmJnX3Rl c3RfZGF0YShOSURfYWVzXzI1Nl9jdHIsIDAsIGFlc18yNTZfbm9fZGYsIDEpLAotKyAgICBtYWtl X2RyYmdfdGVzdF9kYXRhKE5JRF9zaGExLCAwLCBzaGExLCAwKSwKLSsgICAgbWFrZV9kcmJnX3Rl c3RfZGF0YShOSURfc2hhMjI0LCAwLCBzaGEyMjQsIDApLAotKyAgICBtYWtlX2RyYmdfdGVzdF9k YXRhKE5JRF9zaGEyNTYsIDAsIHNoYTI1NiwgMSksCi0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEo TklEX3NoYTM4NCwgMCwgc2hhMzg0LCAwKSwKLSsgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURf c2hhNTEyLCAwLCBzaGE1MTIsIDApLAotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFj V2l0aFNIQTEsIDAsIGhtYWNfc2hhMSwgMCksCi0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklE X2htYWNXaXRoU0hBMjI0LCAwLCBobWFjX3NoYTIyNCwgMCksCi0rICAgIG1ha2VfZHJiZ190ZXN0 X2RhdGEoTklEX2htYWNXaXRoU0hBMjU2LCAwLCBobWFjX3NoYTI1NiwgMSksCi0rICAgIG1ha2Vf ZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMzg0LCAwLCBobWFjX3NoYTM4NCwgMCksCi0r ICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBNTEyLCAwLCBobWFjX3NoYTUx MiwgMCksCi0rICAgIHswLCAwLCAwfQotK307Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QgewotKyAgICBj b25zdCB1bnNpZ25lZCBjaGFyICplbnQ7Ci0rICAgIHNpemVfdCBlbnRsZW47Ci0rICAgIGludCBl bnRjbnQ7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlOwotKyAgICBzaXplX3Qgbm9u Y2VsZW47Ci0rICAgIGludCBub25jZWNudDsKLSt9IFRFU1RfRU5UOwotKwotK3N0YXRpYyBzaXpl X3QgdGVzdF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNp emVfdCBtYXhfbGVuKQotK3sKLSsgICAgVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9k YXRhKGRjdHgpOwotKyAgICAqcG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+ZW50OwotKyAgICB0 LT5lbnRjbnQrKzsKLSsgICAgcmV0dXJuIHQtPmVudGxlbjsKLSt9Ci0rCi0rc3RhdGljIHNpemVf dCB0ZXN0X25vbmNlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3Qg bWF4X2xlbikKLSt7Ci0rICAgIFRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShk Y3R4KTsKLSsgICAgKnBvdXQgPSAodW5zaWduZWQgY2hhciAqKXQtPm5vbmNlOwotKyAgICB0LT5u b25jZWNudCsrOwotKyAgICByZXR1cm4gdC0+bm9uY2VsZW47Ci0rfQotKwotK3N0YXRpYyBpbnQg Zmlwc19kcmJnX3NpbmdsZV9rYXQoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAq IHRkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHF1aWNrKQotK3sKLSsg ICAgVEVTVF9FTlQgdDsKLSsgICAgaW50IHJ2ID0gMDsKLSsgICAgc2l6ZV90IGFkaW5sZW47Ci0r ICAgIHVuc2lnbmVkIGNoYXIgcmFuZG91dFsxMDI0XTsKLSsKLSsgICAgLyogSW5pdGlhbCB0ZXN0 IHdpdGhvdXQgUFIgKi8KLSsKLSsgICAgLyogSW5zdGFudGlhdGUgRFJCRyB3aXRoIHRlc3QgZW50 cm9weSwgbm9uY2UgYW5kIHBlcnNvbmFsaXNhdGlvbgotKyAgICAgKiBzdHJpbmcuCi0rICAgICAq LwotKwotKyAgICBpZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykp Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhk Y3R4LCB0ZXN0X2VudHJvcHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQotKyAgICAgICAgcmV0dXJu IDA7Ci0rCi0rICAgIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOwotKwotKyAgICB0 LmVudCA9IHRkLT5lbnQ7Ci0rICAgIHQuZW50bGVuID0gdGQtPmVudGxlbjsKLSsgICAgdC5ub25j ZSA9IHRkLT5ub25jZTsKLSsgICAgdC5ub25jZWxlbiA9IHRkLT5ub25jZWxlbjsKLSsgICAgdC5l bnRjbnQgPSAwOwotKyAgICB0Lm5vbmNlY250ID0gMDsKLSsKLSsgICAgaWYgKCFGSVBTX2RyYmdf aW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSkKLSsgICAgICAgIGdvdG8g ZXJyOwotKwotKyAgICAvKiBOb3RlIGZvciBDVFIgd2l0aG91dCBERiBzb21lIGFkZGl0aW9uYWwg aW5wdXQgdmFsdWVzCi0rICAgICAqIGlnbm9yZSBieXRlcyBhZnRlciB0aGUga2V5bGVuZ3RoOiBz byByZWR1Y2UgYWRpbmxlbgotKyAgICAgKiB0byBoYWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRhdGEg aXMgZmVkIGluLgotKyAgICAgKi8KLSsgICAgaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RF U1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPmlmbGFncykpCi0rICAgICAgICBhZGlubGVuID0g dGQtPmFkaW5sZW4gLyAyOwotKyAgICBlbHNlCi0rICAgICAgICBhZGlubGVuID0gdGQtPmFkaW5s ZW47Ci0rCi0rICAgIC8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5kIHZlcmlmeSBvdXRwdXQgbWF0 Y2hlcyBleHBlY3RlZCBkYXRhICovCi0rICAgIGlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgs IHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsIHRkLT5hZGluLCBhZGlubGVuKSkKLSsgICAgICAgIGdv dG8gZXJyOwotKwotKyAgICBpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQsIHRkLT5rYXRsZW4p KSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19S X05PUFJfVEVTVDFfRkFJTFVSRSk7Ci0rICAgICAgICBnb3RvIGVycjI7Ci0rICAgIH0KLSsgICAg LyogSWYgYWJicmV2aWF0ZWQgUE9TVCBlbmQgb2YgdGVzdCAqLwotKyAgICBpZiAocXVpY2spIHsK LSsgICAgICAgIHJ2ID0gMTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rICAgIC8qIFJl c2VlZCBEUkJHIHdpdGggdGVzdCBlbnRyb3B5IGFuZCBhZGRpdGlvbmFsIGlucHV0ICovCi0rICAg IHQuZW50ID0gdGQtPmVudHJlc2VlZDsKLSsgICAgdC5lbnRsZW4gPSB0ZC0+ZW50cmVzZWVkbGVu OwotKwotKyAgICBpZiAoIUZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW5yZXNlZWQsIHRk LT5hZGlucmVzZWVkbGVuKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICAvKiBHZW5lcmF0 ZSB3aXRoIG5vIFBSIGFuZCB2ZXJpZnkgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YSAqLwot KyAgICBpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0Mmxlbiwg MCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW4yLCB0ZC0+YWRpbjJsZW4p KQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGlmIChtZW1jbXAocmFuZG91dCwgdGQtPmth dDIsIHRkLT5rYXQybGVuKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJ TkdMRV9LQVQsIEZJUFNfUl9OT1BSX1RFU1QyX0ZBSUxVUkUpOwotKyAgICAgICAgZ290byBlcnIy OwotKyAgICB9Ci0rCi0rICAgIEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOwotKwotKyAg ICAvKiBOb3cgdGVzdCB3aXRoIFBSICovCi0rCi0rICAgIC8qIEluc3RhbnRpYXRlIERSQkcgd2l0 aCB0ZXN0IGVudHJvcHksIG5vbmNlIGFuZCBwZXJzb25hbGlzYXRpb24KLSsgICAgICogc3RyaW5n LgotKyAgICAgKi8KLSsgICAgaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ ZmxhZ3MpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmICghRklQU19kcmJnX3NldF9jYWxs YmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKLSsgICAgICAg IHJldHVybiAwOwotKwotKyAgICBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKLSsK LSsgICAgdC5lbnQgPSB0ZC0+ZW50X3ByOwotKyAgICB0LmVudGxlbiA9IHRkLT5lbnRsZW5fcHI7 Ci0rICAgIHQubm9uY2UgPSB0ZC0+bm9uY2VfcHI7Ci0rICAgIHQubm9uY2VsZW4gPSB0ZC0+bm9u Y2VsZW5fcHI7Ci0rICAgIHQuZW50Y250ID0gMDsKLSsgICAgdC5ub25jZWNudCA9IDA7Ci0rCi0r ICAgIGlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzX3ByLCB0ZC0+cGVy c2xlbl9wcikpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgLyogTm93IGdlbmVyYXRlIHdp dGggUFI6IHdlIG5lZWQgdG8gc3VwcGx5IGVudHJvcHkgYXMgdGhpcyB3aWxsCi0rICAgICAqIHBl cmZvcm0gYSByZXNlZWQgb3BlcmF0aW9uLiBDaGVjayBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCB2 YWx1ZS4KLSsgICAgICovCi0rCi0rICAgIHQuZW50ID0gdGQtPmVudHByX3ByOwotKyAgICB0LmVu dGxlbiA9IHRkLT5lbnRwcmxlbl9wcjsKLSsKLSsgICAgLyogTm90ZSBmb3IgQ1RSIHdpdGhvdXQg REYgc29tZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVlcwotKyAgICAgKiBpZ25vcmUgYnl0ZXMgYWZ0 ZXIgdGhlIGtleWxlbmd0aDogc28gcmVkdWNlIGFkaW5sZW4KLSsgICAgICogdG8gaGFsZiB0byBl bnN1cmUgaW52YWxpZCBkYXRhIGlzIGZlZCBpbi4KLSsgICAgICovCi0rICAgIGlmICghZmlwc19w b3N0X2NvcnJ1cHQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT5pZmxhZ3MpKQot KyAgICAgICAgYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByIC8gMjsKLSsgICAgZWxzZQotKyAgICAg ICAgYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByOwotKyAgICBpZiAoIUZJUFNfZHJiZ19nZW5lcmF0 ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuX3ByLCAxLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZC0+YWRpbl9wciwgYWRpbmxlbikpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsg ICAgaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0X3ByLCB0ZC0+a2F0bGVuX3ByKSkgewotKyAg ICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9QUl9URVNU MV9GQUlMVVJFKTsKLSsgICAgICAgIGdvdG8gZXJyMjsKLSsgICAgfQotKwotKyAgICAvKiBOb3cg Z2VuZXJhdGUgYWdhaW4gd2l0aCBQUjogc3VwcGx5IG5ldyBlbnRyb3B5IGFnYWluLgotKyAgICAg KiBDaGVjayBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4KLSsgICAgICovCi0rCi0rICAg IHQuZW50ID0gdGQtPmVudGdfcHI7Ci0rICAgIHQuZW50bGVuID0gdGQtPmVudGdsZW5fcHI7Ci0r Ci0rICAgIGlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXQybGVu X3ByLCAxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZC0+YWRpbmdfcHIsIHRkLT5h ZGluZ2xlbl9wcikpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgaWYgKG1lbWNtcChyYW5k b3V0LCB0ZC0+a2F0Ml9wciwgdGQtPmthdDJsZW5fcHIpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUpOwotKyAg ICAgICAgZ290byBlcnIyOwotKyAgICB9Ci0rICAgIC8qIEFsbCBPSywgdGVzdCBjb21wbGV0ZSAq LwotKyAgICBydiA9IDE7Ci0rCi0rIGVycjoKLSsgICAgaWYgKHJ2ID09IDApCi0rICAgICAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1NFTEZURVNUX0ZBSUxF RCk7Ci0rIGVycjI6Ci0rICAgIEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOwotKwotKyAg ICByZXR1cm4gcnY7Ci0rCi0rfQotKwotKy8qIEluaXRpYWxpc2UgYSBEUkJHIGJhc2VkIG9uIHNl bGZ0ZXN0IGRhdGEgKi8KLSsKLStzdGF0aWMgaW50IGRvX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0 eCwgRFJCR19TRUxGVEVTVF9EQVRBICogdGQsIFRFU1RfRU5UICogdCkKLSt7Ci0rCi0rICAgIGlm ICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5pZCwgdGQtPmZsYWdzKSkKLSsgICAgICAgIHJl dHVybiAwOwotKwotKyAgICBpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3Rf ZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsg ICAgRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCB0KTsKLSsKLSsgICAgdC0+ZW50ID0gdGQt PmVudDsKLSsgICAgdC0+ZW50bGVuID0gdGQtPmVudGxlbjsKLSsgICAgdC0+bm9uY2UgPSB0ZC0+ bm9uY2U7Ci0rICAgIHQtPm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuOwotKyAgICB0LT5lbnRjbnQg PSAwOwotKyAgICB0LT5ub25jZWNudCA9IDA7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSsvKiBJ bml0aWFsaXNlIGFuZCBpbnN0YW50aWF0ZSBEUkJHIGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEgKi8K LStzdGF0aWMgaW50IGRvX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsIERSQkdfU0VM RlRFU1RfREFUQSAqIHRkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0VO VCAqIHQpCi0rewotKyAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgdCkpCi0rICAgICAg ICByZXR1cm4gMDsKLSsgICAgaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBl cnMsIHRkLT5wZXJzbGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICByZXR1cm4gMTsK LSt9Ci0rCi0rLyogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBleHRlbnNpdmUgZXJyb3IgY2hlY2tp bmcgYXMgcmVxdWlyZWQgYnkgU1A4MDAtOTAuCi0rICogSW5kdWNlIHNldmVyYWwgZmFpbHVyZSBt b2RlcyBhbmQgY2hlY2sgYW4gZXJyb3IgY29uZGl0aW9uIGlzIHNldC4KLSsgKiBUaGlzIGZ1bmN0 aW9uIGFsb25nIHdpdGggZmlwc19kcmJnX3NpbmdsZV9rYXQgcGVmb3JtcyB0aGUgaGVhbHRoIGNo ZWNraW5nCi0rICogb3BlcmF0aW9uLgotKyAqLwotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2Vy cm9yX2NoZWNrKERSQkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKiB0ZCkKLSt7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgcmFuZG91dFsxMDI0XTsKLSsgICAgVEVTVF9FTlQgdDsKLSsgICAg c2l6ZV90IGk7Ci0rICAgIHVuc2lnbmVkIGludCByZXNlZWRfY291bnRlcl90bXA7Ci0rICAgIHVu c2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKWRjdHg7Ci0rCi0rICAgIC8qIEluaXRp YWxpc2UgRFJCRyAqLwotKwotKyAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQot KyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIC8qIERvbid0IHJlcG9ydCBpbmR1Y2VkIGVycm9y cyAqLwotKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKyAgICAvKiBQ ZXJzb25hbGlzYXRpb24gc3RyaW5nIHRlc3RzICovCi0rCi0rICAgIC8qIFRlc3QgZGV0ZWN0aW9u IG9mIHRvbyBsYXJnZSBwZXJzb25saXNhdGlvbiBzdHJpbmcgKi8KLSsKLSsgICAgaWYgKEZJUFNf ZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgZGN0eC0+bWF4X3BlcnMgKyAxKSA+IDAp IHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAg ICAgICAgICAgICAgRklQU19SX1BFUlNPTkFMSVNBVElPTl9FUlJPUl9VTkRFVEVDVEVEKTsKLSsg ICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIC8qIEVudHJvcHkgc291cmNlIHRlc3Rz ICovCi0rCi0rICAgIC8qIFRlc3QgZW50cm9weSBzb3VyY2UgZmFpbHVyZSBkZXRlY2lvbjogaS5l LiByZXR1cm5zIG5vIGRhdGEgKi8KLSsKLSsgICAgdC5lbnRsZW4gPSAwOwotKwotKyAgICBpZiAo RklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKSB7 Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAg ICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwotKyAgICAgICAgZ290 byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgLyogVHJ5IHRvIGdlbmVyYXRlIG91dHB1dCBmcm9tIHVu aW5zdGFudGlhdGVkIERSQkcgKi8KLSsgICAgaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCBy YW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkLT5h ZGluLCB0ZC0+YWRpbmxlbikpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywKLSsgICAgICAgICAgICAgICAgRklQU19SX0dFTkVSQVRFX0VSUk9SX1VOREVU RUNURUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgZGN0eC0+aWZsYWdz ICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUo ZGN0eCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywg RklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0K LSsKLSsgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKLSsgICAgICAgIGdvdG8g ZXJyOwotKwotKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKyAgICAv KiBUZXN0IGluc3VmZmljaWVudCBlbnRyb3B5ICovCi0rCi0rICAgIHQuZW50bGVuID0gZGN0eC0+ bWluX2VudHJvcHkgLSAxOwotKwotKyAgICBpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgs IHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VS Uk9SX1VOREVURUNURUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgZGN0 eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rICAgIGlmICghRklQU19kcmJnX3VuaW5z dGFudGlhdGUoZGN0eCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKyAgICAgICAgZ290byBlcnI7 Ci0rICAgIH0KLSsKLSsgICAgLyogVGVzdCB0b28gbXVjaCBlbnRyb3B5ICovCi0rCi0rICAgIGlm ICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsg ICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsgICAgdC5lbnRsZW4gPSBk Y3R4LT5tYXhfZW50cm9weSArIDE7Ci0rCi0rICAgIGlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUo ZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApIHsKLSsgICAgICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAgICAgICAgICAgICAgRklQU19SX0VOVFJP UFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAg ICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsgICAgaWYgKCFGSVBTX2RyYmdf dW5pbnN0YW50aWF0ZShkY3R4KSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rICAgICAgICBnb3Rv IGVycjsKLSsgICAgfQotKwotKyAgICAvKiBOb25jZSB0ZXN0cyAqLwotKwotKyAgICAvKiBUZXN0 IHRvbyBzbWFsbCBub25jZSAqLwotKwotKyAgICBpZiAoZGN0eC0+bWluX25vbmNlKSB7Ci0rCi0r ICAgICAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKyAgICAgICAgICAgIGdv dG8gZXJyOwotKwotKyAgICAgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsK LSsgICAgICAgIHQubm9uY2VsZW4gPSBkY3R4LT5taW5fbm9uY2UgLSAxOwotKwotKyAgICAgICAg aWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4g MCkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywK LSsgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsg ICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIGRjdHgtPmlmbGFn cyAmPSB+RFJCR19GTEFHX05PRVJSOwotKyAgICAgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50 aWF0ZShkY3R4KSkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKyAgICAgICAgICAgIGdvdG8g ZXJyOwotKyAgICAgICAgfQotKwotKyAgICB9Ci0rCi0rICAgIC8qIFRlc3QgdG9vIGxhcmdlIG5v bmNlICovCi0rCi0rICAgIGlmIChkY3R4LT5tYXhfbm9uY2UpIHsKLSsKLSsgICAgICAgIGlmICgh ZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rICAgICAgICAgICAgZ290byBlcnI7Ci0rCi0r ICAgICAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKyAgICAgICAgdC5u b25jZWxlbiA9IGRjdHgtPm1heF9ub25jZSArIDE7Ci0rCi0rICAgICAgICBpZiAoRklQU19kcmJn X2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKSB7Ci0rICAgICAg ICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAg ICAgICAgICAgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQpOwotKyAgICAgICAgICAgIGdv dG8gZXJyOwotKyAgICAgICAgfQotKwotKyAgICAgICAgZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZM QUdfTk9FUlI7Ci0rICAgICAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7 Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBT X1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAg ICB9Ci0rCi0rICAgIH0KLSsKLSsgICAgLyogSW5zdGFudGlhdGUgd2l0aCB2YWxpZCBkYXRhLiAq LwotKyAgICBpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkKLSsgICAgICAg IGdvdG8gZXJyOwotKwotKyAgICAvKiBDaGVjayBnZW5lcmF0aW9uIGlzIG5vdyBPSyAqLwotKyAg ICBpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKyAg ICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7 Ci0rCi0rICAgIC8qIFJlcXVlc3QgdG9vIG11Y2ggZGF0YSBmb3Igb25lIHJlcXVlc3QgKi8KLSsg ICAgaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCBkY3R4LT5tYXhfcmVxdWVz dCArIDEsIDAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5hZGlu bGVuKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAot KyAgICAgICAgICAgICAgICBGSVBTX1JfUkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCk7 Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICAvKiBUcnkgdG9vIGxhcmdlIGFk ZGl0aW9uYWwgaW5wdXQgKi8KLSsgICAgaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5k b3V0LCB0ZC0+a2F0bGVuLCAwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGlu LCBkY3R4LT5tYXhfYWRpbiArIDEpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgIEZJUFNfUl9BRERJVElPTkFMX0lOUFVU X0VSUk9SX1VOREVURUNURUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAg LyogQ2hlY2sgcHJlZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3QgZmFpbHMgaWYgZW50cm9weSBz b3VyY2UKLSsgICAgICogZmFpbHVyZS4KLSsgICAgICovCi0rCi0rICAgIHQuZW50bGVuID0gMDsK LSsKLSsgICAgaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVu LCAxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikp IHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAg ICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAgICBn b3RvIGVycjsKLSsgICAgfQotKwotKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VS UjsKLSsgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgewotKyAgICAgICAg RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFU RV9FUlJPUik7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICAvKiBJbnN0YW50 aWF0ZSBhZ2FpbiB3aXRoIHZhbGlkIGRhdGEgKi8KLSsKLSsgICAgaWYgKCFkb19kcmJnX2luc3Rh bnRpYXRlKGRjdHgsIHRkLCAmdCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgLyogVGVzdCBy ZXNlZWQgY291bnRlciB3b3JrcyAqLwotKyAgICAvKiBTYXZlIGluaXRpYWwgcmVzZWVkIGNvdW50 ZXIgKi8KLSsgICAgcmVzZWVkX2NvdW50ZXJfdG1wID0gZGN0eC0+cmVzZWVkX2NvdW50ZXI7Ci0r ICAgIC8qIFNldCByZXNlZWQgY291bnRlciB0byBiZXlvbmQgaW50ZXJ2YWwgKi8KLSsgICAgZGN0 eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWw7Ci0rCi0rICAgIC8qIEdl bmVyYXRlIG91dHB1dCBhbmQgY2hlY2sgZW50cm9weSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yIHJl c2VlZCAqLwotKyAgICB0LmVudGNudCA9IDA7Ci0rICAgIGlmICghRklQU19kcmJnX2dlbmVyYXRl KGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYg KHQuZW50Y250ICE9IDEpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywKLSsgICAgICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9G T1JfUkVTRUVEKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rICAgIC8qIENoZWNrIHJl c2VlZCBjb3VudGVyIGhhcyBiZWVuIHJlc2V0ICovCi0rICAgIGlmIChkY3R4LT5yZXNlZWRfY291 bnRlciAhPSByZXNlZWRfY291bnRlcl90bXAgKyAxKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUik7Ci0r ICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdf RkxBR19OT0VSUjsKLSsgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgewot KyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5J TlNUQU5USUFURV9FUlJPUik7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICAv KiBDaGVjayBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBmYWlscyBpZiBlbnRyb3B5IHNv dXJjZQotKyAgICAgKiBmYWlsdXJlLgotKyAgICAgKi8KLSsKLSsgICAgdC5lbnRsZW4gPSAwOwot KwotKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKyAgICBpZiAoRklQU19k cmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDEsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkgewotKyAgICAgICAgRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAgICAgICBGSVBTX1Jf RU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0r Ci0rICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKwotKyAgICBpZiAoIUZJ UFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsgICAg ICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIGlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShk Y3R4LCB0ZCwgJnQpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIC8qIFRlc3QgcmVzZWVkIGNv dW50ZXIgd29ya3MgKi8KLSsgICAgLyogU2F2ZSBpbml0aWFsIHJlc2VlZCBjb3VudGVyICovCi0r ICAgIHJlc2VlZF9jb3VudGVyX3RtcCA9IGRjdHgtPnJlc2VlZF9jb3VudGVyOwotKyAgICAvKiBT ZXQgcmVzZWVkIGNvdW50ZXIgdG8gYmV5b25kIGludGVydmFsICovCi0rICAgIGRjdHgtPnJlc2Vl ZF9jb3VudGVyID0gZGN0eC0+cmVzZWVkX2ludGVydmFsOwotKwotKyAgICAvKiBHZW5lcmF0ZSBv dXRwdXQgYW5kIGNoZWNrIGVudHJvcHkgaGFzIGJlZW4gcmVxdWVzdGVkIGZvciByZXNlZWQgKi8K LSsgICAgdC5lbnRjbnQgPSAwOwotKyAgICBpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCBy YW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZC0+ YWRpbiwgdGQtPmFkaW5sZW4pKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICh0LmVudGNu dCAhPSAxKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss Ci0rICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VF RCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKyAgICAvKiBDaGVjayByZXNlZWQgY291 bnRlciBoYXMgYmVlbiByZXNldCAqLwotKyAgICBpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgIT0g cmVzZWVkX2NvdW50ZXJfdG1wICsgMSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUkVTRUVEX0NPVU5URVJfRVJST1IpOwotKyAgICAgICAg Z290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9F UlI7Ci0rICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKLSsgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElB VEVfRVJST1IpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgLyogRXhwbGlj aXQgcmVzZWVkIHRlc3RzICovCi0rCi0rICAgIC8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGgg dG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5wdXQgKi8KLSsgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0 eCwgdGQsICZ0KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBkY3R4LT5pZmxhZ3MgfD0g RFJCR19GTEFHX05PRVJSOwotKwotKyAgICBpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+ YWRpbiwgZGN0eC0+bWF4X2FkaW4gKyAxKSA+IDApIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAgICAgICAgICAgICAgRklQU19SX0FERElUSU9O QUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQot KwotKyAgICAvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIGVudHJvcHkgc291cmNlIGZhaWx1 cmUgKi8KLSsKLSsgICAgdC5lbnRsZW4gPSAwOwotKwotKyAgICBpZiAoRklQU19kcmJnX3Jlc2Vl ZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkgewotKyAgICAgICAgRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAgICAgICBGSVBTX1JfRU5U Uk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0r ICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKLSsgICAgICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJS T1IpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgLyogVGVzdCBleHBsaWNp dCByZXNlZWQgd2l0aCB0b28gbXVjaCBlbnRyb3B5ICovCi0rCi0rICAgIGlmICghZG9fZHJiZ19p bml0KGRjdHgsIHRkLCAmdCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgZGN0eC0+aWZs YWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsgICAgdC5lbnRsZW4gPSBkY3R4LT5tYXhfZW50 cm9weSArIDE7Ci0rCi0rICAgIGlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0 ZC0+YWRpbmxlbikgPiAwKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJS T1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNU RUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgaWYgKCFGSVBTX2RyYmdf dW5pbnN0YW50aWF0ZShkY3R4KSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rICAgICAgICBnb3Rv IGVycjsKLSsgICAgfQotKwotKyAgICAvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBs aXR0bGUgZW50cm9weSAqLwotKwotKyAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQp KQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdf Tk9FUlI7Ci0rCi0rICAgIHQuZW50bGVuID0gZGN0eC0+bWluX2VudHJvcHkgLSAxOwotKwotKyAg ICBpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkg ewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAg ICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsgICAgICAgIGdv dG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0 eCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsK LSsgICAgcCA9ICh1bnNpZ25lZCBjaGFyICopJmRjdHgtPmQ7Ci0rICAgIC8qIFN0YW5kYXJkIHNh eXMgd2UgaGF2ZSB0byBjaGVjayB1bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJvZXMKLSsgICAgICog dGhlIGRhdGEuLi4KLSsgICAgICovCi0rICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGN0eC0+ ZCk7IGkrKykgewotKyAgICAgICAgaWYgKCpwICE9IDApIHsKLSsgICAgICAgICAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgICAgICBGSVBT X1JfVU5JTlNUQU5USUFURV9aRVJPSVNFX0VSUk9SKTsKLSsgICAgICAgICAgICBnb3RvIGVycjsK LSsgICAgICAgIH0KLSsgICAgICAgIHArKzsKLSsgICAgfQotKwotKyAgICByZXR1cm4gMTsKLSsK LSsgZXJyOgotKyAgICAvKiBBIHJlYWwgZXJyb3IgYXMgb3Bwb3NlZCB0byBhbiBpbmR1Y2VkIG9u ZTogdW5kZXJseWluZyBmdW5jdGlvbiB3aWxsCi0rICAgICAqIGluZGljYXRlIHRoZSBlcnJvci4K LSsgICAgICovCi0rICAgIGlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCi0r ICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9GVU5D VElPTl9FUlJPUik7Ci0rICAgIEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOwotKyAgICBy ZXR1cm4gMDsKLSsKLSt9Ci0rCi0raW50IGZpcHNfZHJiZ19rYXQoRFJCR19DVFggKmRjdHgsIGlu dCBuaWQsIHVuc2lnbmVkIGludCBmbGFncykKLSt7Ci0rICAgIERSQkdfU0VMRlRFU1RfREFUQSAq dGQ7Ci0rICAgIGZsYWdzIHw9IERSQkdfRkxBR19URVNUOwotKyAgICBmb3IgKHRkID0gZHJiZ190 ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspIHsKLSsgICAgICAgIGlmICh0ZC0+bmlkID09IG5pZCAm JiB0ZC0+ZmxhZ3MgPT0gZmxhZ3MpIHsKLSsgICAgICAgICAgICBpZiAoIWZpcHNfZHJiZ19zaW5n bGVfa2F0KGRjdHgsIHRkLCAwKSkKLSsgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAg ICAgICAgcmV0dXJuIGZpcHNfZHJiZ19lcnJvcl9jaGVjayhkY3R4LCB0ZCk7Ci0rICAgICAgICB9 Ci0rICAgIH0KLSsgICAgcmV0dXJuIDA7Ci0rfQotKwotK2ludCBGSVBTX2RyYmdfaGVhbHRoX2No ZWNrKERSQkdfQ1RYICpkY3R4KQotK3sKLSsgICAgaW50IHJ2OwotKyAgICBEUkJHX0NUWCAqdGN0 eCA9IE5VTEw7Ci0rICAgIHRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOwotKyAgICBmaXBzX3Bv c3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7Ci0r ICAgIGlmICghdGN0eCkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBydiA9IGZpcHNfZHJiZ19r YXQodGN0eCwgZGN0eC0+dHlwZSwgZGN0eC0+eGZsYWdzKTsKLSsgICAgaWYgKHRjdHgpCi0rICAg ICAgICBGSVBTX2RyYmdfZnJlZSh0Y3R4KTsKLSsgICAgaWYgKHJ2KQotKyAgICAgICAgZmlwc19w b3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54ZmxhZ3MpOwot KyAgICBlbHNlCi0rICAgICAgICBmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCBkY3R4 LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKLSsgICAgaWYgKCFydikKLSsgICAgICAgIGRjdHgtPnN0 YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOwotKyAgICBlbHNlCi0rICAgICAgICBkY3R4LT5oZWFs dGhfY2hlY2tfY250ID0gMDsKLSsgICAgcmV0dXJuIHJ2OwotK30KLSsKLStpbnQgRklQU19zZWxm dGVzdF9kcmJnKHZvaWQpCi0rewotKyAgICBEUkJHX0NUWCAqZGN0eDsKLSsgICAgRFJCR19TRUxG VEVTVF9EQVRBICp0ZDsKLSsgICAgaW50IHJ2ID0gMTsKLSsgICAgZGN0eCA9IEZJUFNfZHJiZ19u ZXcoMCwgMCk7Ci0rICAgIGlmICghZGN0eCkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBmb3Ig KHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspIHsKLSsgICAgICAgIGlmICh0ZC0+ cG9zdCAhPSAxKQotKyAgICAgICAgICAgIGNvbnRpbnVlOwotKyAgICAgICAgaWYgKCFmaXBzX3Bv c3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncykpCi0rICAgICAg ICAgICAgcmV0dXJuIDE7Ci0rICAgICAgICBpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgs IHRkLCAxKSkgewotKyAgICAgICAgICAgIGZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcs IHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOwotKyAgICAgICAgICAgIHJ2ID0gMDsKLSsgICAgICAgICAg ICBjb250aW51ZTsKLSsgICAgICAgIH0KLSsgICAgICAgIGlmICghZmlwc19wb3N0X3N1Y2Nlc3Mo RklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQotKyAgICAgICAgICAgIHJldHVy biAwOwotKyAgICB9Ci0rICAgIEZJUFNfZHJiZ19mcmVlKGRjdHgpOwotKyAgICByZXR1cm4gcnY7 Ci0rfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmdfYWxsKHZvaWQpCi0rewotKyAgICBEUkJH X0NUWCAqZGN0eDsKLSsgICAgRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKLSsgICAgaW50IHJ2ID0g MTsKLSsgICAgZGN0eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7Ci0rICAgIGlmICghZGN0eCkKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICBmb3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7 IHRkKyspIHsKLSsgICAgICAgIGlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcs IHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQotKyAgICAgICAgICAgIHJldHVybiAxOwotKyAgICAgICAg aWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwgMCkpIHsKLSsgICAgICAgICAgICBm aXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKTsKLSsg ICAgICAgICAgICBydiA9IDA7Ci0rICAgICAgICAgICAgY29udGludWU7Ci0rICAgICAgICB9Ci0r ICAgICAgICBpZiAoIWZpcHNfZHJiZ19lcnJvcl9jaGVjayhkY3R4LCB0ZCkpIHsKLSsgICAgICAg ICAgICBmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdz KTsKLSsgICAgICAgICAgICBydiA9IDA7Ci0rICAgICAgICAgICAgY29udGludWU7Ci0rICAgICAg ICB9Ci0rICAgICAgICBpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCB0ZC0+ bmlkLCAmdGQtPmZsYWdzKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICBG SVBTX2RyYmdfZnJlZShkY3R4KTsKLSsgICAgcmV0dXJuIHJ2OwotK30KLWRpZmYgLXVwIG9wZW5z c2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oLmZpcHMgb3BlbnNzbC0x LjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmgKLS0tLSBvcGVuc3NsLTEuMS4w aC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaC5maXBzCTIwMTgtMDMtMjkgMTQ6NDQ6 MjQuNjM0MjM2ODMwICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19k cmJnX3NlbGZ0ZXN0LmgJMjAxOC0wMy0yOSAxNDo0NDoyNC42MzQyMzY4MzAgKzAyMDAKLUBAIC0w LDAgKzEsMTc5MSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmUub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0r ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsg KgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsvKiBTZWxmdGVzdCBhbmQgaGVh bHRoIGNoZWNrIGRhdGEgZm9yIHRoZSBTUDgwMC05MCBEUkJHICovCi0rCi0rI2RlZmluZSBfX2Zp cHNfY29uc3RzZWcKLSsKLSsvKiBBRVMtMTI4IHVzZSBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlu cHV0W10gPSB7Ci0rICAgIDB4NjEsIDB4NTIsIDB4N2MsIDB4ZTMsIDB4MjMsIDB4N2QsIDB4MGEs IDB4MDcsIDB4MTAsIDB4MGMsIDB4NTAsIDB4MzMsCi0rICAgIDB4YzgsIDB4ZGIsIDB4ZmYsIDB4 MTIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X3VzZV9kZl9wcl9ub25jZVtdID0gewotKyAgICAweDUxLCAweDBkLCAweDg1LCAweDc3 LCAweGVkLCAweDIyLCAweDk3LCAweDI4Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfcGVyc29uYWxpemF0 aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4NTksIDB4OWYsIDB4YmIsIDB4Y2QsIDB4ZDUsIDB4MjUs IDB4NjksIDB4YjUsIDB4Y2IsIDB4YjUsIDB4MDMsIDB4ZmUsCi0rICAgIDB4ZDcsIDB4ZDcsIDB4 MDEsIDB4NjcKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAg MHhlZiwgMHg4OCwgMHg3NiwgMHgwMSwgMHhhZiwgMHgzYywgMHhmZSwgMHg4YiwgMHhhZiwgMHgy NiwgMHgwNiwgMHg5ZSwKLSsgICAgMHg5YSwgMHg0NywgMHgwOCwgMHg3NgotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNl X2RmX3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0rICAgIDB4ZTIsIDB4NzYsIDB4ZjksIDB4ZjYs IDB4M2EsIDB4YmEsIDB4MTAsIDB4OWYsIDB4YmYsIDB4NDcsIDB4MGUsIDB4NTEsCi0rICAgIDB4 MDksIDB4ZmIsIDB4YTMsIDB4YjYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPSB7Ci0rICAgIDB4ZDQsIDB4OTgsIDB4OGEsIDB4NDYsIDB4ODAsIDB4NGMsIDB4ZGIsIDB4 YTMsIDB4NTksIDB4MDIsIDB4NTcsIDB4NTIsCi0rICAgIDB4NjYsIDB4MWMsIDB4ZWEsIDB4NWIK LSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTI4X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4ODgsIDB4 OGMsIDB4OTEsIDB4ZDYsIDB4YmUsIDB4NTYsIDB4NmUsIDB4MDgsIDB4OWEsIDB4NjIsIDB4MmIs IDB4MTEsCi0rICAgIDB4M2YsIDB4NWUsIDB4MzEsIDB4MDYKLSt9OwotKwotK19fZmlwc19jb25z dHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9l bnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHhjMCwgMHg1YywgMHg2YiwgMHg5OCwgMHgwMSwg MHgwZCwgMHg1OCwgMHgxOCwgMHg1MSwgMHgxOCwgMHg5NiwgMHhhZSwKLSsgICAgMHhhNywgMHhl MywgMHhhOCwgMHg2NwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0gewotKyAgICAweGNm LCAweDAxLCAweGFjLCAweDIyLCAweDMxLCAweDA2LCAweDhlLCAweGZjLCAweGNlLCAweDU2LCAw eGVhLCAweDI0LAotKyAgICAweDBmLCAweDM4LCAweDQzLCAweGM2Ci0rfTsKLSsKLSsvKiBBRVMt MTI4IHVzZSBkZiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4MWYsIDB4 OGUsIDB4MzQsIDB4ODIsIDB4MGMsIDB4YjcsIDB4YmUsIDB4YzUsIDB4MDEsIDB4M2UsIDB4ZDAs IDB4YTMsCi0rICAgIDB4OWQsIDB4N2QsIDB4MWMsIDB4OWIKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9ub25jZVtdID0g ewotKyAgICAweGQ1LCAweDRkLCAweGJkLCAweDRhLCAweDkzLCAweDdmLCAweGI4LCAweDk2Ci0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF91c2VfZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4YWIsIDB4 ZDYsIDB4M2YsIDB4MDQsIDB4ZmUsIDB4MjcsIDB4NmIsIDB4MmQsIDB4ZDcsIDB4YzMsIDB4MWMs IDB4ZjMsCi0rICAgIDB4MzgsIDB4NjYsIDB4YmEsIDB4MWIKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFs aW5wdXRbXSA9IHsKLSsgICAgMHhmZSwgMHhmNCwgMHgwOSwgMHhhOCwgMHhiNywgMHg3MywgMHgy NywgMHg5YywgMHg1ZiwgMHhhNywgMHhlYSwgMHg0NiwKLSsgICAgMHhiNSwgMHhlMiwgMHhiMiwg MHg0MQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfdXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg0MiwgMHhlNCwg MHg0ZSwgMHg3YiwgMHgyNywgMHhkZCwgMHhjYiwgMHhiYywgMHgwYSwgMHhjZiwgMHhhNiwgMHg2 NywKLSsgICAgMHhlNywgMHg1NywgMHgxMSwgMHhiNAotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2VudHJvcHlp bnB1dHJlc2VlZFtdID0gewotKyAgICAweDE0LCAweDI2LCAweDY5LCAweGQ5LCAweGYzLCAweDY1 LCAweDAzLCAweGQ2LCAweDZiLCAweGI5LCAweDQ0LCAweDBiLAotKyAgICAweGM3LCAweGM0LCAw eDllLCAweDM5Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0r ICAgIDB4NTUsIDB4MmUsIDB4NjAsIDB4OWEsIDB4MDUsIDB4NzIsIDB4OGEsIDB4YTgsIDB4ZWYs IDB4MjIsIDB4ODEsIDB4NWEsCi0rICAgIDB4YzgsIDB4OTMsIDB4ZmEsIDB4ODQKLSt9OwotKwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9k Zl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4M2MsIDB4NDAsIDB4YzgsIDB4YzQsIDB4 MTYsIDB4MGMsIDB4MjEsIDB4YTQsIDB4MzcsIDB4MmMsIDB4OGYsIDB4YTUsCi0rICAgIDB4MDYs IDB4MGMsIDB4MTUsIDB4MmMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhl MSwgMHgzZSwgMHg5OSwgMHg5OCwgMHg4NiwgMHg2NywgMHgwYiwgMHg2MywgMHg3YiwgMHhiZSwg MHgzZiwgMHg4OCwKLSsgICAgMHg0NiwgMHg4MSwgMHhjNywgMHgxOQotK307Ci0rCi0rLyogQUVT LTE5MiB1c2UgZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDJiLCAw eDRlLCAweDhiLCAweGUxLCAweGYxLCAweDM0LCAweDgwLCAweDU2LCAweDgxLCAweGY5LCAweDc0 LCAweGVjLAotKyAgICAweDE3LCAweDQ0LCAweDJhLCAweGYxLCAweDE0LCAweGIwLCAweGJmLCAw eDk3LCAweDM5LCAweGI3LCAweDA0LCAweDdkCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfbm9uY2VbXSA9IHsKLSsg ICAgMHhkNiwgMHg5ZCwgMHhlYiwgMHgxNCwgMHg0ZSwgMHg2YywgMHgzMCwgMHgxZSwgMHgzOSwg MHg1NSwgMHg3MywgMHhkMCwKLSsgICAgMHhkMSwgMHg4MCwgMHg3OCwgMHhmYQotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf dXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweGZjLCAweDQzLCAw eDRhLCAweGY4LCAweDlhLCAweDU1LCAweGIzLCAweDUzLCAweDgzLCAweGUyLCAweDE4LCAweDE2 LAotKyAgICAweDBjLCAweGRjLCAweGNkLCAweDVlLCAweDRmLCAweGEwLCAweDAzLCAweDAxLCAw eDJiLCAweDlmLCAweGU0LCAweGQ1LAotKyAgICAweDdkLCAweDQ5LCAweGYwLCAweDQxLCAweDll LCAweDNkLCAweDk5LCAweDA0Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10g PSB7Ci0rICAgIDB4NWUsIDB4OWYsIDB4NDksIDB4NmYsIDB4MjEsIDB4OGIsIDB4MWQsIDB4MzIs IDB4ZDUsIDB4ODQsIDB4NWMsIDB4YWMsCi0rICAgIDB4YWYsIDB4ZGYsIDB4ZTQsIDB4NzksIDB4 OWUsIDB4YWYsIDB4YTksIDB4ODIsIDB4ZDAsIDB4ZjgsIDB4NGYsIDB4Y2IsCi0rICAgIDB4Njks IDB4MTAsIDB4MGEsIDB4N2UsIDB4ODEsIDB4NTcsIDB4YjUsIDB4MzYKLSt9OwotKwotK19fZmlw c19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9k Zl9wcl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAweGQ0LCAweDgxLCAweDBjLCAweGQ3LCAw eDY2LCAweDM5LCAweGVjLCAweDQyLCAweDUzLCAweDg3LCAweDQxLCAweGE1LAotKyAgICAweDFl LCAweDdkLCAweDgwLCAweDkxLCAweDhlLCAweGJiLCAweGVkLCAweGFjLCAweDE0LCAweDAyLCAw eDFhLCAweGQ1Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0gewotKyAg ICAweGRmLCAweDFkLCAweDM5LCAweDQ1LCAweDdjLCAweDliLCAweGM2LCAweDJiLCAweDdkLCAw eDhjLCAweDkzLCAweGU5LAotKyAgICAweDE5LCAweDMwLCAweDZiLCAweDY3Ci0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91 c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDAwLCAweDcxLCAweDI3LCAw eDRlLCAweGQzLCAweDE0LCAweGYxLCAweDIwLCAweDdmLCAweDRhLCAweDQxLCAweDMyLAotKyAg ICAweDJhLCAweDk3LCAweDExLCAweDQzLCAweDhmLCAweDRhLCAweDE1LCAweDdiLCAweDliLCAw eDUxLCAweDc5LCAweGRhLAotKyAgICAweDQ5LCAweDNkLCAweGRlLCAweGU4LCAweGJjLCAweDkz LCAweDkxLCAweDk5Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10gPSB7Ci0r ICAgIDB4OTAsIDB4ZWUsIDB4NzYsIDB4YTEsIDB4NDUsIDB4OGQsIDB4YjcsIDB4NDAsIDB4YjAs IDB4MTEsIDB4YmYsIDB4ZDAsCi0rICAgIDB4NjUsIDB4ZDcsIDB4M2MsIDB4N2MsIDB4NGYsIDB4 MjAsIDB4M2YsIDB4NGUsIDB4MTEsIDB4OWQsIDB4YjMsIDB4NWUKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9yZXR1 cm5lZGJpdHNbXSA9IHsKLSsgICAgMHgyNCwgMHgzYiwgMHgyMCwgMHhhNCwgMHgzNywgMHg2Niwg MHhiYSwgMHg3MiwgMHgzOSwgMHgzZiwgMHhjZiwgMHgzYywKLSsgICAgMHg3ZSwgMHgxYSwgMHgy YiwgMHg4MwotK307Ci0rCi0rLyogQUVTLTE5MiB1c2UgZGYgTm8gUFIgICovCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2VudHJvcHlp bnB1dFtdID0gewotKyAgICAweDhkLCAweDc0LCAweGE0LCAweDUwLCAweDFhLCAweDAyLCAweDY4 LCAweDBjLCAweDJhLCAweDY5LCAweGM0LCAweDgyLAotKyAgICAweDNiLCAweGJiLCAweGRhLCAw eDBlLCAweDdmLCAweDc3LCAweGEzLCAweDE3LCAweDc4LCAweDU3LCAweGIyLCAweDdiCi0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91 c2VfZGZfbm9uY2VbXSA9IHsKLSsgICAgMHg3NSwgMHhkNSwgMHgxZiwgMHhhYywgMHhhNCwgMHg4 ZCwgMHg0MiwgMHg3OCwgMHhkNywgMHg2OSwgMHg4NiwgMHg5ZCwKLSsgICAgMHg3NywgMHhkNywg MHg0MSwgMHgwZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewot KyAgICAweDRlLCAweDMzLCAweDQxLCAweDNjLCAweDljLCAweGMyLCAweGQyLCAweDUzLCAweGFm LCAweDkwLCAweGVhLCAweGNmLAotKyAgICAweDE5LCAweDUwLCAweDFlLCAweGU2LCAweDZmLCAw eDYzLCAweGM4LCAweDMyLCAweDIyLCAweGRjLCAweDA3LCAweDY1LAotKyAgICAweDljLCAweGQz LCAweGY4LCAweDMwLCAweDllLCAweGVkLCAweDM1LCAweDcwCi0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25h bGlucHV0W10gPSB7Ci0rICAgIDB4NWQsIDB4OGIsIDB4OGMsIDB4YzEsIDB4ZGYsIDB4MGUsIDB4 MDIsIDB4NzgsIDB4ZmIsIDB4MTksIDB4YjgsIDB4NjksCi0rICAgIDB4NzgsIDB4NGUsIDB4OWMs IDB4NTIsIDB4YmMsIDB4YzcsIDB4MjAsIDB4YzksIDB4ZTYsIDB4NWUsIDB4NzcsIDB4MjIsCi0r ICAgIDB4MjgsIDB4M2QsIDB4MGMsIDB4OWUsIDB4NjgsIDB4YTgsIDB4NDUsIDB4ZDcKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3Vz ZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ZDUsIDB4ZTcsIDB4MDgsIDB4YzUs IDB4MTksIDB4OTksIDB4ZDUsIDB4MzEsIDB4MDMsIDB4MGEsIDB4NzQsIDB4YjYsCi0rICAgIDB4 YjcsIDB4ZWQsIDB4ZTksIDB4ZWEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRb XSA9IHsKLSsgICAgMHg5YywgMHgyNiwgMHhkYSwgMHhmMSwgMHhhYywgMHhkOSwgMHg1YSwgMHhk NiwgMHhhOCwgMHg2NSwgMHhmNSwgMHgwMiwKLSsgICAgMHg4ZiwgMHhkYywgMHhhMiwgMHgwOSwg MHg1NCwgMHhhNiwgMHhlMiwgMHhhNCwgMHhkZSwgMHgzMiwgMHhlMCwgMHgwMQotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf dXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDliLCAweDkwLCAweGIw LCAweDNhLCAweDBlLCAweDNhLCAweDgwLCAweDA3LCAweDRhLCAweGY0LCAweGRhLCAweDc2LAot KyAgICAweDI4LCAweDMwLCAweDNjLCAweGVlLCAweDU0LCAweDFiLCAweDk0LCAweDU5LCAweDUx LCAweDQzLCAweDU2LCAweDc3LAotKyAgICAweGFmLCAweDg4LCAweGRkLCAweDYzLCAweDg5LCAw eDQ3LCAweDA2LCAweDY1Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAw eDNjLCAweDExLCAweDY0LCAweDdhLCAweDk2LCAweGY1LCAweGQ4LCAweGI4LCAweGFlLCAweGQ2 LCAweDcwLCAweDRlLAotKyAgICAweDE2LCAweDk2LCAweGRlLCAweGU5LCAweDYyLCAweGJjLCAw eGVlLCAweDI4LCAweDJmLCAweDI2LCAweGE2LCAweGYwLAotKyAgICAweDU2LCAweGVmLCAweGEz LCAweGYxLCAweDZiLCAweGExLCAweGIxLCAweDc3Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcmV0dXJuZWRiaXRzW10g PSB7Ci0rICAgIDB4MGIsIDB4ZTIsIDB4NTYsIDB4MDMsIDB4MWUsIDB4ZGIsIDB4MmMsIDB4NmQs IDB4N2YsIDB4MWIsIDB4MTUsIDB4NTgsCi0rICAgIDB4MWEsIDB4ZjksIDB4MTMsIDB4MjgKLSt9 OwotKwotKy8qIEFFUy0yNTYgdXNlIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsK LSsgICAgMHg2MSwgMHg2OCwgMHhmYywgMHgxYSwgMHhmMCwgMHhiNSwgMHg5NSwgMHg2YiwgMHg4 NSwgMHgwOSwgMHg5YiwgMHg3NCwKLSsgICAgMHgzZiwgMHgxMywgMHg3OCwgMHg0OSwgMHgzYiwg MHg4NSwgMHhlYywgMHg5MywgMHgxMywgMHgzYiwgMHhhOSwgMHg0ZiwKLSsgICAgMHg5NiwgMHhh YiwgMHgyYywgMHhlNCwgMHhjOCwgMHg4ZiwgMHhkZCwgMHg2YQotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX25vbmNl W10gPSB7Ci0rICAgIDB4YWQsIDB4ZDIsIDB4YmIsIDB4YmEsIDB4YjcsIDB4NjUsIDB4ODksIDB4 YzMsIDB4MjEsIDB4NmMsIDB4NTUsIDB4MzMsCi0rICAgIDB4MmIsIDB4MzYsIDB4ZmYsIDB4YTQK LSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHg2 ZSwgMHhjYSwgMHhlNywgMHgyMCwgMHg3MiwgMHhkMywgMHg4NCwgMHg1YSwgMHgzMiwgMHhkMywg MHg0YiwgMHgyNCwKLSsgICAgMHg3MiwgMHhjNCwgMHg2MywgMHgyYiwgMHg5ZCwgMHgxMiwgMHgy NCwgMHgwYywgMHgyMywgMHgyNiwgMHg4ZSwgMHg4MywKLSsgICAgMHgxNiwgMHgzNywgMHgwYiwg MHhkMSwgMHgwNiwgMHg0ZiwgMHg2OCwgMHg2ZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2FkZGl0aW9u YWxpbnB1dFtdID0gewotKyAgICAweDdlLCAweDA4LCAweDRhLCAweGJiLCAweGUzLCAweDIxLCAw eDdjLCAweGM5LCAweDIzLCAweGQyLCAweGY4LCAweGIwLAotKyAgICAweDczLCAweDk4LCAweGJh LCAweDg0LCAweDc0LCAweDIzLCAweGFiLCAweDA2LCAweDhhLCAweGUyLCAweDIyLCAweGQzLAot KyAgICAweDdiLCAweGNlLCAweDliLCAweGQyLCAweDRhLCAweDc2LCAweGI4LCAweGRlCi0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzI1Nl91c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKLSsgICAgMHgwYiwgMHgyMywgMHhh ZiwgMHhkZiwgMHhmMSwgMHg2MiwgMHhkNywgMHhkMywgMHg0MywgMHg5NywgMHhmOCwgMHg3NywK LSsgICAgMHgwNCwgMHhhOCwgMHg0MiwgMHgyMCwgMHhiZCwgMHhmNiwgMHgwZiwgMHhjMSwgMHgx NywgMHgyZiwgMHg5ZiwgMHg1NCwKLSsgICAgMHhiYiwgMHg1NiwgMHgxNywgMHg4NiwgMHg2OCwg MHgwZSwgMHhiYSwgMHhhOQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9 IHsKLSsgICAgMHgzMSwgMHg4ZSwgMHhhZCwgMHhhZiwgMHg0MCwgMHhlYiwgMHg2YiwgMHg3NCwg MHgzMSwgMHg0NiwgMHg4MCwgMHhjNywKLSsgICAgMHgxNywgMHhhYiwgMHgzYywgMHg3YQotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHg5NCwgMHg2Yiwg MHhjOSwgMHg5ZiwgMHhhYiwgMHg4ZCwgMHhjNSwgMHhlYywgMHg3MSwgMHg4OCwgMHgxZCwgMHgw MCwKLSsgICAgMHg4YywgMHg4OSwgMHg2OCwgMHhlNCwgMHhjOCwgMHgwNywgMHg3NywgMHgzNiwg MHgxNywgMHg2ZCwgMHg3OSwgMHg3OCwKLSsgICAgMHhjNywgMHgwNiwgMHg0ZSwgMHg5OSwgMHgw NCwgMHgyOCwgMHgyOSwgMHhjMwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByMltd ID0gewotKyAgICAweGJmLCAweDZjLCAweDU5LCAweDJhLCAweDBkLCAweDQ0LCAweDBmLCAweGFl LCAweDlhLCAweDVlLCAweDAzLCAweDczLAotKyAgICAweGQ4LCAweGE2LCAweGUxLCAweGNmLCAw eDI1LCAweDYxLCAweDM4LCAweDI0LCAweDg2LCAweDllLCAweDUzLCAweGU4LAotKyAgICAweGE0 LCAweGRmLCAweDU2LCAweGY0LCAweDA2LCAweDA3LCAweDljLCAweDBmCi0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJf cmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4MjIsIDB4NGEsIDB4YjQsIDB4YjgsIDB4YjYsIDB4 ZWUsIDB4N2QsIDB4YjEsIDB4OWUsIDB4YzksIDB4ZjksIDB4YTAsCi0rICAgIDB4ZDksIDB4ZTIs IDB4OTcsIDB4MDAKLSt9OwotKwotKy8qIEFFUy0yNTYgdXNlIGRmIE5vIFBSICAqLwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9lbnRy b3B5aW5wdXRbXSA9IHsKLSsgICAgMHhhNSwgMHgzZSwgMHgzNywgMHgxMCwgMHgxNywgMHg0Mywg MHg5MSwgMHg5MywgMHg1OSwgMHgxZSwgMHg0NywgMHg1MCwKLSsgICAgMHg4NywgMHhhYSwgMHhk ZCwgMHhkNSwgMHhjMSwgMHhjMywgMHg4NiwgMHhjZCwgMHhjYSwgMHgwZCwgMHhkYiwgMHg2OCwK LSsgICAgMHhlMCwgMHgwMiwgMHhkOCwgMHgwZiwgMHhkYywgMHg0MCwgMHgxYSwgMHg0NwotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf dXNlX2RmX25vbmNlW10gPSB7Ci0rICAgIDB4YTksIDB4NGQsIDB4YTUsIDB4NWEsIDB4ZmQsIDB4 YzUsIDB4MGMsIDB4ZTUsIDB4MWMsIDB4OWEsIDB4M2IsIDB4OGEsCi0rICAgIDB4NGMsIDB4NDQs IDB4ODQsIDB4NDAKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsK LSsgICAgMHg4YiwgMHg1MiwgMHhhMiwgMHg0YSwgMHg5MywgMHhjMywgMHg0ZSwgMHhhNywgMHgx ZSwgMHgxYywgMHhhNywgMHgwNSwKLSsgICAgMHhlYiwgMHg4MiwgMHg5YiwgMHhhNiwgMHg1ZCwg MHhlNCwgMHhkNCwgMHhlMCwgMHg3ZiwgMHhhMywgMHhkOCwgMHg2YiwKLSsgICAgMHgzNywgMHg4 NCwgMHg1ZiwgMHhmMSwgMHhjNywgMHhkNSwgMHhmNiwgMHhkMgotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9u YWxpbnB1dFtdID0gewotKyAgICAweDIwLCAweGY0LCAweDIyLCAweGVkLCAweGY4LCAweDVjLCAw eGExLCAweDZhLCAweDAxLCAweGNmLCAweGJlLCAweDVmLAotKyAgICAweDhkLCAweDZjLCAweDk0 LCAweDdmLCAweGFlLCAweDEyLCAweGE4LCAweDU3LCAweGRiLCAweDJhLCAweGE5LCAweGJmLAot KyAgICAweGM3LCAweGIzLCAweDY1LCAweDgxLCAweDgwLCAweDhkLCAweDBkLCAweDQ2Ci0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91 c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDRlLCAweDQ0LCAweGZkLCAweGYz LCAweDllLCAweDI5LCAweGEyLCAweGI4LCAweDBmLCAweDVkLCAweDZjLCAweGUxLAotKyAgICAw eDI4LCAweDBjLCAweDNiLCAweGMxCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfZW50cm9weWlucHV0cmVzZWVk W10gPSB7Ci0rICAgIDB4ZGQsIDB4NDAsIDB4ZTUsIDB4OTgsIDB4N2IsIDB4MjcsIDB4MTYsIDB4 NzMsIDB4MTUsIDB4NjgsIDB4ZDIsIDB4NzYsCi0rICAgIDB4YmYsIDB4MGMsIDB4NjcsIDB4MTUs IDB4NzUsIDB4NzksIDB4MDMsIDB4ZDMsIDB4ZGUsIDB4ZGUsIDB4OTEsIDB4NDYsCi0rICAgIDB4 NDIsIDB4ZGQsIDB4ZDQsIDB4NjcsIDB4YzgsIDB4NzksIDB4YzgsIDB4MWUKLSt9OwotKwotK19f Zmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3Vz ZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg3ZiwgMHhkOCwgMHgxZiwg MHhiZCwgMHgyYSwgMHhiNSwgMHgxYywgMHgxMSwgMHg1ZCwgMHg4MywgMHg0ZSwgMHg5OSwKLSsg ICAgMHhmNiwgMHg1YywgMHhhNSwgMHg0MCwgMHgyMCwgMHhlZCwgMHgzOCwgMHg4ZSwgMHhkNSwg MHg5ZSwgMHhlMCwgMHg3NSwKLSsgICAgMHg5MywgMHhmZSwgMHgxMiwgMHg1ZSwgMHg1ZCwgMHg3 MywgMHhmYiwgMHg3NQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHhj ZCwgMHgyYywgMHhmZiwgMHgxNCwgMHg2OSwgMHgzZSwgMHg0YywgMHg5ZSwgMHhmZCwgMHhmZSwg MHgyNiwgMHgwZCwKLSsgICAgMHhlOSwgMHg4NiwgMHgwMCwgMHg0OSwgMHgzMCwgMHhiYSwgMHhi MSwgMHhjNiwgMHg1MCwgMHg1NywgMHg3NywgMHgyYSwKLSsgICAgMHg2MiwgMHgzOSwgMHgyYywg MHgzYiwgMHg3NCwgMHhlYiwgMHhjOSwgMHgwZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3JldHVybmVkYml0c1tdID0g ewotKyAgICAweDRmLCAweDc4LCAweGJlLCAweGI5LCAweDRkLCAweDk3LCAweDhjLCAweGU5LCAw eGQwLCAweDk3LCAweGZlLCAweGFkLAotKyAgICAweGZhLCAweGZkLCAweDM1LCAweDVlCi0rfTsK LSsKLSsvKiBBRVMtMTI4IG5vIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAg ICAweDlhLCAweDI1LCAweDY1LCAweDEwLCAweDY3LCAweGQ1LCAweGI2LCAweDZiLCAweDcwLCAw eGExLCAweGIzLCAweGE0LAotKyAgICAweDQzLCAweDk1LCAweDgwLCAweGMwLCAweDg0LCAweDBh LCAweDc5LCAweGIwLCAweDg4LCAweDc0LCAweGYyLCAweGJmLAotKyAgICAweDMxLCAweDZjLCAw eDMzLCAweDM4LCAweDBiLCAweDAwLCAweGIyLCAweDVhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9ub25jZVtdID0g ewotKyAgICAweDc4LCAweDQ3LCAweDZiLCAweGY3LCAweDkwLCAweDhlLCAweDg3LCAweGYxCi0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHhmNywg MHgyMiwgMHgxZCwgMHgzYSwgMHhiZSwgMHgxZCwgMHhjYSwgMHgzMiwgMHgxYiwgMHhiZCwgMHg4 NywgMHgwYywKLSsgICAgMHg1MSwgMHgyNCwgMHgxOSwgMHhlZSwgMHhhMywgMHgyMywgMHgwOSwg MHg2MywgMHgzMywgMHgzZCwgMHhhOCwgMHgwYywKLSsgICAgMHgxYywgMHhmYSwgMHg0MiwgMHg4 OSwgMHhjYywgMHg2ZiwgMHhhMCwgMHhhOAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfYWRkaXRpb25hbGlu cHV0W10gPSB7Ci0rICAgIDB4YzksIDB4ZTAsIDB4ODAsIDB4YmYsIDB4OGMsIDB4NDUsIDB4NTgs IDB4MzksIDB4ZmYsIDB4MDAsIDB4YWIsIDB4MDIsCi0rICAgIDB4NGMsIDB4M2UsIDB4M2EsIDB4 OTUsIDB4OWIsIDB4ODAsIDB4YTgsIDB4MjEsIDB4MmEsIDB4ZWUsIDB4YmEsIDB4NzMsCi0rICAg IDB4YjEsIDB4ZDksIDB4Y2YsIDB4MjgsIDB4ZjYsIDB4OGYsIDB4OWIsIDB4MTIKLSt9OwotKwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2Rm X3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0rICAgIDB4NGMsIDB4YTgsIDB4YzUsIDB4ZjAsIDB4 NTksIDB4OWUsIDB4YTYsIDB4OGQsIDB4MjYsIDB4NTMsIDB4ZDcsIDB4OGEsCi0rICAgIDB4YTks IDB4ZDgsIDB4ZjcsIDB4ZWQsIDB4YjIsIDB4ZjksIDB4MTIsIDB4NDIsIDB4ZTEsIDB4ZTUsIDB4 YmQsIDB4ZTcsCi0rICAgIDB4ZTcsIDB4MWQsIDB4NzQsIDB4OTksIDB4MDAsIDB4OWQsIDB4MzEs IDB4M2UKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhl MiwgMHhhYywgMHgyMCwgMHhmMCwgMHg4MCwgMHhlNywgMHhiYywgMHg3ZSwgMHg5YywgMHg3Yiwg MHg2NSwgMHg3MSwKLSsgICAgMHhhZiwgMHgxOSwgMHgzMiwgMHgxNgotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZf cHJfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDMyLCAweDdmLCAweDM4LCAweDhiLCAw eDczLCAweDBhLCAweDc4LCAweDgzLCAweGRjLCAweDMwLCAweGJlLCAweDlmLAotKyAgICAweDEw LCAweDFmLCAweGY1LCAweDFmLCAweGNhLCAweDAwLCAweGI1LCAweDBkLCAweGQ2LCAweDlkLCAw eDYwLCAweDgzLAotKyAgICAweDUxLCAweDU0LCAweDdkLCAweDM4LCAweDIzLCAweDNhLCAweDUy LCAweDUwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHgx OCwgMHg2MSwgMHg1MywgMHg1NiwgMHhlZCwgMHhlZCwgMHhkNywgMHgyMCwgMHhmYiwgMHg3MSwg MHgwNCwgMHg3YSwKLSsgICAgMHhiMiwgMHhhYywgMHhjMSwgMHgyOCwgMHhjZCwgMHhmMiwgMHhj MiwgMHhmYywgMHhhYSwgMHhiMSwgMHgwNiwgMHgwNywKLSsgICAgMHhlOSwgMHg0NiwgMHg5NSwg MHgwMiwgMHg0OCwgMHgwMSwgMHg3OCwgMHhmOQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10g PSB7Ci0rICAgIDB4MjksIDB4YzgsIDB4MWIsIDB4MTUsIDB4YjEsIDB4ZDEsIDB4YzIsIDB4ZjYs IDB4NzEsIDB4ODYsIDB4NjgsIDB4MzMsCi0rICAgIDB4NTcsIDB4ODIsIDB4MzMsIDB4YWYKLSt9 OwotKwotKy8qIEFFUy0xMjggbm8gZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfZW50cm9weWlucHV0W10gPSB7Ci0r ICAgIDB4YzksIDB4YzUsIDB4NzksIDB4YmMsIDB4ZTgsIDB4YzUsIDB4MTksIDB4ZDgsIDB4YmMs IDB4NjYsIDB4NzMsIDB4NjcsCi0rICAgIDB4ZjYsIDB4ZDMsIDB4NzIsIDB4YWEsIDB4YTYsIDB4 MTYsIDB4YjgsIDB4NTAsIDB4YjcsIDB4NDcsIDB4M2EsIDB4NDIsCi0rICAgIDB4YWIsIDB4ZjQs IDB4MTYsIDB4YjIsIDB4OTYsIDB4ZDIsIDB4YjYsIDB4NjAKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX25vbmNlW10gPSB7 Ci0rICAgIDB4NWYsIDB4YmYsIDB4OTcsIDB4MGMsIDB4NGIsIDB4YTQsIDB4ODcsIDB4MTMKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweGNlLCAweGZi LCAweDdiLCAweDNmLCAweGQ0LCAweDZiLCAweDI5LCAweDBkLCAweDY5LCAweDA2LCAweGZmLCAw eGJiLAotKyAgICAweGYyLCAweGU1LCAweGM2LCAweDZjLCAweDBhLCAweDEwLCAweGEwLCAweGNm LCAweDFhLCAweDQ4LCAweGM3LCAweDhiLAotKyAgICAweDNjLCAweDE2LCAweDg4LCAweGVkLCAw eDUwLCAweDEzLCAweDgxLCAweGNlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsg ICAgMHg0YiwgMHgyMiwgMHg0NiwgMHgxOCwgMHgwMiwgMHg3YiwgMHhkMiwgMHgxYiwgMHgyMiwg MHg0MiwgMHg3YywgMHgzNywKLSsgICAgMHhkOSwgMHhmNiwgMHhlOCwgMHg5YiwgMHgxMiwgMHgz MCwgMHg1ZiwgMHhlOSwgMHg5MCwgMHhlOCwgMHgwOCwgMHgyNCwKLSsgICAgMHg0ZiwgMHgwNiwg MHg2NiwgMHhkYiwgMHgxOSwgMHgyYiwgMHgxMywgMHg5NQotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfaW50X3JldHVybmVk Yml0c1tdID0gewotKyAgICAweDJlLCAweDk2LCAweDcwLCAweDY0LCAweGZhLCAweGRmLCAweGRm LCAweDU3LCAweGI1LCAweDgyLCAweGVlLCAweGQ2LAotKyAgICAweGVkLCAweDNlLCAweDY1LCAw eGMyCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF9ub19kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHgyNiwg MHhjMCwgMHg3MiwgMHgxNiwgMHgzYSwgMHg0YiwgMHhiNywgMHg5OSwgMHhkNCwgMHgwNywgMHhh ZiwgMHg2NiwKLSsgICAgMHg2MiwgMHgzNiwgMHg5NiwgMHhhNCwgMHg1MSwgMHgxNywgMHhmYSwg MHgwNywgMHg4YiwgMHgxNywgMHg1ZSwgMHhhMSwKLSsgICAgMHgyZiwgMHgzYywgMHgxMCwgMHhl NywgMHg5MCwgMHhkMCwgMHg0NiwgMHgwMAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0 cmVzZWVkW10gPSB7Ci0rICAgIDB4ODMsIDB4MzksIDB4MzcsIDB4N2IsIDB4MDIsIDB4MDYsIDB4 ZDIsIDB4MTIsIDB4MTMsIDB4OGQsIDB4OGIsIDB4ZjIsCi0rICAgIDB4ZjAsIDB4ZjYsIDB4MjYs IDB4ZWIsIDB4YTQsIDB4MjIsIDB4N2IsIDB4YzIsIDB4ZTcsIDB4YmEsIDB4NzksIDB4ZTQsCi0r ICAgIDB4M2IsIDB4NzcsIDB4NWQsIDB4NGQsIDB4NDcsIDB4YjIsIDB4MmQsIDB4YjQKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25v X2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHgwYiwgMHhiOSwgMHg2NywgMHgzNywg MHhkYiwgMHg4MywgMHhkZiwgMHhjYSwgMHg4MSwgMHg4YiwgMHhmOSwgMHgzZiwKLSsgICAgMHhm MSwgMHgxMSwgMHgxYiwgMHgyZiwgMHhmMCwgMHg2MSwgMHhhNiwgMHhkZiwgMHhiYSwgMHhhMywg MHhiMSwgMHhhYywKLSsgICAgMHhkMywgMHhlNiwgMHgwOSwgMHhiOCwgMHgyYywgMHg2YSwgMHg2 NywgMHhkNgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfbm9fZGZfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4MWUsIDB4YTcsIDB4 YTQsIDB4ZTQsIDB4ZTEsIDB4YTYsIDB4N2MsIDB4NjksIDB4OWEsIDB4NDQsIDB4NmMsIDB4MzYs Ci0rICAgIDB4ODEsIDB4MzcsIDB4MTksIDB4ZDQKLSt9OwotKwotKy8qIEFFUy0xOTIgbm8gZGYg UFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4OWQsIDB4MmMsIDB4ZDIsIDB4 NTUsIDB4NjYsIDB4ZWEsIDB4ZTAsIDB4YmUsIDB4MTgsIDB4YjcsIDB4NzYsIDB4ZTcsCi0rICAg IDB4NzMsIDB4MzUsIDB4ZDgsIDB4MWYsIDB4YWQsIDB4M2EsIDB4ZTMsIDB4ODEsIDB4MGUsIDB4 OTIsIDB4ZDAsIDB4NjEsCi0rICAgIDB4YzksIDB4MTIsIDB4MjYsIDB4ZjYsIDB4MWMsIDB4ZGYs IDB4ZmUsIDB4NDcsIDB4YWEsIDB4ZmUsIDB4N2QsIDB4NWEsCi0rICAgIDB4MTcsIDB4MWYsIDB4 OGQsIDB4OWEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX25vX2RmX3ByX25vbmNlW10gPSB7Ci0rICAgIDB4NDQsIDB4ODIsIDB4ZWQs IDB4ZTgsIDB4NGMsIDB4MjgsIDB4NWEsIDB4MTQsIDB4ZmYsIDB4ODgsIDB4OGQsIDB4MTksCi0r ICAgIDB4NjEsIDB4NWMsIDB4ZWUsIDB4MGYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0gewotKyAgICAweDQ3LCAweGQ3LCAweDliLCAweDk5LCAweGFhLCAweGNi LCAweGU3LCAweGQyLCAweDU3LCAweDY2LCAweDJjLCAweGUxLAotKyAgICAweDc4LCAweGQ2LCAw eDJjLCAweGVhLCAweGEzLCAweDIzLCAweDVmLCAweDJhLCAweGMxLCAweDNhLCAweGYwLCAweGE0 LAotKyAgICAweDIwLCAweDNiLCAweGZhLCAweDA3LCAweGQ1LCAweDA1LCAweDAyLCAweGU0LCAw eDU3LCAweDAxLCAweGI2LCAweDEwLAotKyAgICAweDU3LCAweDJlLCAweGU3LCAweDU1Ci0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHg0YiwgMHg3NCwgMHgw YiwgMHg0MCwgMHhjZSwgMHg2YiwgMHhjMiwgMHg2YSwgMHgyNCwgMHhiNCwgMHhmMywgMHhhZCwK LSsgICAgMHg3YSwgMHhhNSwgMHg3YSwgMHhhMiwgMHgxNSwgMHhlMiwgMHhjOCwgMHg2MSwgMHgx NSwgMHhjNiwgMHhiNywgMHg4NSwKLSsgICAgMHg2OSwgMHgxMSwgMHhhZCwgMHg3YiwgMHgxNCwg MHhkMiwgMHhmNiwgMHgxMiwgMHhhMSwgMHg5NSwgMHg1ZCwgMHgzZiwKLSsgICAgMHhlMiwgMHhk MCwgMHgwYywgMHgyZgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKLSsgICAgMHgw YywgMHg5YywgMHhhZCwgMHgwNSwgMHhlZSwgMHhhZSwgMHg0OCwgMHgyMywgMHg4OSwgMHg1OSwg MHhhMSwgMHg5NCwKLSsgICAgMHhkNywgMHhkOCwgMHg3NSwgMHhkNSwgMHg1NCwgMHg5MywgMHhj NywgMHg0YSwgMHhkOSwgMHgyNiwgMHhkZSwgMHhlYiwKLSsgICAgMHhiYSwgMHhiMCwgMHg3ZSwg MHgzMCwgMHgxZCwgMHg1ZiwgMHg2OSwgMHg0MCwgMHg5YywgMHgzYiwgMHgxNywgMHg1OCwKLSsg ICAgMHgxZCwgMHgzMCwgMHhiMywgMHg3OAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfaW50X3JldHVybmVk Yml0c1tdID0gewotKyAgICAweGY3LCAweDkzLCAweGIwLCAweDZkLCAweDc3LCAweDgzLCAweGQ1 LCAweDM4LCAweDAxLCAweGUxLCAweDUyLCAweDQwLAotKyAgICAweDdlLCAweDNlLCAweDBjLCAw eDI2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4YmMs IDB4NGIsIDB4MzcsIDB4NDQsIDB4MWMsIDB4YzUsIDB4NDUsIDB4NWYsIDB4OGYsIDB4NTEsIDB4 NjIsIDB4OGEsCi0rICAgIDB4ODUsIDB4MzAsIDB4MWQsIDB4N2MsIDB4ZTQsIDB4Y2YsIDB4Zjcs IDB4NDQsIDB4Y2UsIDB4MzIsIDB4M2UsIDB4NTcsCi0rICAgIDB4OTUsIDB4YTQsIDB4MmEsIDB4 ZGYsIDB4ZmQsIDB4OWUsIDB4MzgsIDB4NDEsIDB4YjMsIDB4ZjYsIDB4YzUsIDB4ZWUsCi0rICAg IDB4MGMsIDB4NGIsIDB4ZWUsIDB4NmUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dHBy MltdID0gewotKyAgICAweGVjLCAweGFmLCAweGY2LCAweDRmLCAweGIxLCAweGEwLCAweDU0LCAw eGI1LCAweDViLCAweGUzLCAweDQ2LCAweGIwLAotKyAgICAweDc2LCAweDVhLCAweDdjLCAweDNm LCAweDdiLCAweDk0LCAweDY5LCAweDIxLCAweDUxLCAweDAyLCAweGU1LCAweDlmLAotKyAgICAw eDA0LCAweDU5LCAweDAyLCAweDk4LCAweGM2LCAweDQzLCAweDJjLCAweGNjLCAweDI2LCAweDRj LCAweDg3LCAweDZiLAotKyAgICAweDhlLCAweDBhLCAweDgzLCAweGRmCi0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9y ZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg3NCwgMHg0NSwgMHhmYiwgMHg1MywgMHg4NCwgMHg5 NiwgMHhiZSwgMHhmZiwgMHgxNSwgMHhjYywgMHg0MSwgMHg5MSwKLSsgICAgMHhiOSwgMHhhMSwg MHgyMSwgMHg2OAotK307Ci0rCi0rLyogQUVTLTE5MiBubyBkZiBObyBQUiAgKi8KLStfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9lbnRyb3B5 aW5wdXRbXSA9IHsKLSsgICAgMHgzYywgMHg3ZCwgMHhiNSwgMHhlMCwgMHg1NCwgMHhkOSwgMHg2 ZSwgMHg4YywgMHhhOSwgMHg4NiwgMHhjZSwgMHg0ZSwKLSsgICAgMHg2YiwgMHhhZiwgMHhlYiwg MHgyZiwgMHhlNywgMHg3NSwgMHhlMCwgMHg4YiwgMHhhNCwgMHgzYiwgMHgwNywgMHhmZSwKLSsg ICAgMHhiZSwgMHgzMywgMHg3NSwgMHg5MywgMHg4MCwgMHgyNywgMHhiNSwgMHgyOSwgMHg0Nywg MHg4YiwgMHhjNywgMHgyOCwKLSsgICAgMHg5NCwgMHhjMywgMHg1OSwgMHg2MwotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZf bm9uY2VbXSA9IHsKLSsgICAgMHg0MywgMHhmMSwgMHg3ZCwgMHhiOCwgMHhjMywgMHhmZSwgMHhk MCwgMHgyMywgMHg2YiwgMHhiNCwgMHg5MiwgMHhkYiwKLSsgICAgMHgyOSwgMHhmZCwgMHg0NSwg MHg3MQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfbm9fZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4 OWYsIDB4MjQsIDB4MjksIDB4OTksIDB4OWUsIDB4MDEsIDB4YWIsIDB4ZTksIDB4MTksIDB4ZDgs IDB4MjMsIDB4MDgsCi0rICAgIDB4YjcsIDB4ZDYsIDB4N2UsIDB4OGMsIDB4YzAsIDB4OWUsIDB4 N2YsIDB4NmUsIDB4NWIsIDB4MzMsIDB4MjAsIDB4OTYsCi0rICAgIDB4MGIsIDB4MjMsIDB4MmMs IDB4YTUsIDB4NmEsIDB4ZjgsIDB4MWIsIDB4MDQsIDB4MjYsIDB4ZGIsIDB4MmUsIDB4MmIsCi0r ICAgIDB4M2IsIDB4ODgsIDB4Y2UsIDB4MzUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0g ewotKyAgICAweDk0LCAweGU5LCAweDdjLCAweDNkLCAweGE3LCAweGRiLCAweDYwLCAweDgzLCAw eDFmLCAweDk4LCAweDNmLCAweDBiLAotKyAgICAweDg4LCAweDU5LCAweDU3LCAweDUxLCAweDg4 LCAweDlmLCAweDc2LCAweDQ5LCAweDlmLCAweGE2LCAweGRhLCAweDcxLAotKyAgICAweDFkLCAw eDBkLCAweDQ3LCAweDE2LCAweDYzLCAweGM1LCAweDY4LCAweGU0LCAweDVkLCAweDM5LCAweDY5 LCAweGIzLAotKyAgICAweDNlLCAweGJlLCAweGQ0LCAweDhlCi0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9pbnRfcmV0dXJu ZWRiaXRzW10gPSB7Ci0rICAgIDB4ZjksIDB4ZDcsIDB4YWQsIDB4NjksIDB4YWIsIDB4OGYsIDB4 MjMsIDB4NTYsIDB4NzAsIDB4MTcsIDB4NGYsIDB4MmEsCi0rICAgIDB4NDUsIDB4ZTcsIDB4NGEs IDB4YzUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0gewotKyAgICAweGE2 LCAweDcxLCAweDZhLCAweDNkLCAweGJhLCAweGQxLCAweGU4LCAweDY2LCAweGE2LCAweGVmLCAw eGIyLCAweDBlLAotKyAgICAweGE4LCAweDljLCAweGFhLCAweDRlLCAweGFmLCAweDE3LCAweDg5 LCAweDUwLCAweDAwLCAweGRhLCAweGExLCAweGIxLAotKyAgICAweDBiLCAweGE0LCAweGQ5LCAw eDM1LCAweDg5LCAweGM4LCAweGU1LCAweGIwLCAweGQ5LCAweGI3LCAweGM0LCAweDMzLAotKyAg ICAweDliLCAweGNiLCAweDdlLCAweDc1Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXRy ZXNlZWRbXSA9IHsKLSsgICAgMHgyNywgMHgyMSwgMHhmYywgMHhjMiwgMHhiZCwgMHhmMywgMHgz YywgMHhjZSwgMHhjMywgMHhjYSwgMHhjMSwgMHgwMSwKLSsgICAgMHhlMCwgMHhmZiwgMHg5Mywg MHgxMiwgMHg3ZCwgMHg1NCwgMHg0MiwgMHhlMywgMHg5ZiwgMHgwMywgMHhkZiwgMHgyNywKLSsg ICAgMHgwNCwgMHgwNywgMHgzYywgMHg1MywgMHg3ZiwgMHhhOCwgMHg2NiwgMHhjOCwgMHg5Nywg MHg0YiwgMHg2MSwgMHg0MCwKLSsgICAgMHg1ZCwgMHg3YSwgMHgyNSwgMHg3OQotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZf YWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDJkLCAweDhlLCAweDE2LCAweDVkLCAweDBi LCAweDlmLCAweGViLCAweGFhLCAweGQ2LCAweGVjLCAweDI4LCAweDcxLAotKyAgICAweDdjLCAw eDBiLCAweGMxLCAweDFkLCAweGQ0LCAweDQ0LCAweDE5LCAweDQ3LCAweGZkLCAweDFkLCAweDdj LCAweGU1LAotKyAgICAweGYzLCAweDI3LCAweGUxLCAweGI2LCAweDcyLCAweDBhLCAweGUwLCAw eGVjLCAweDBlLCAweGNkLCAweGVmLCAweDFhLAotKyAgICAweDkxLCAweDZhLCAweGUzLCAweDVm Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhlNSwgMHhkYSwgMHhiOCwgMHhl MCwgMHg2MywgMHg1OSwgMHg1YSwgMHhjYywgMHgzZCwgMHhkYywgMHg5ZiwgMHhlOCwKLSsgICAg MHg2NiwgMHg2NywgMHgyYywgMHg5MgotK307Ci0rCi0rLyogQUVTLTI1NiBubyBkZiBQUiAgKi8K LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19k Zl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHgxNSwgMHhjNywgMHg1ZCwgMHhjYiwgMHg0 MSwgMHg0YiwgMHgxNiwgMHgwMSwgMHgzYSwgMHhkMSwgMHg0NCwgMHhlOCwKLSsgICAgMHgyMiwg MHgzMiwgMHhjNiwgMHg5YywgMHgzZiwgMHhlNywgMHg0MywgMHhmNSwgMHg5YSwgMHhkMywgMHhl YSwgMHhmMiwKLSsgICAgMHhkNywgMHg0ZSwgMHg2ZSwgMHg2YSwgMHg1NSwgMHg3MywgMHg0MCwg MHhlZiwgMHg4OSwgMHhhZCwgMHgwZCwgMHgwMywKLSsgICAgMHg5NiwgMHg3ZSwgMHg3OCwgMHg4 MSwgMHgyZiwgMHg5MSwgMHgxYiwgMHg0NCwgMHhiMCwgMHgwMiwgMHhiYSwgMHgxYwotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9f ZGZfcHJfbm9uY2VbXSA9IHsKLSsgICAgMHhkYywgMHhlNCwgMHhkNCwgMHgyNywgMHg3YSwgMHg5 MCwgMHhkNywgMHg5OSwgMHg0MywgMHhhMSwgMHgzYywgMHgzMCwKLSsgICAgMHhjYywgMHg0Yiwg MHhlZSwgMHgyZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7 Ci0rICAgIDB4ZTMsIDB4ZTYsIDB4YjksIDB4MTEsIDB4ZTQsIDB4N2EsIDB4YTQsIDB4NDAsIDB4 NmIsIDB4ZjgsIDB4NzMsIDB4ZjcsCi0rICAgIDB4N2UsIDB4ZWMsIDB4YzcsIDB4YjksIDB4OTcs IDB4YmYsIDB4ZjgsIDB4MjUsIDB4N2IsIDB4YmUsIDB4MTEsIDB4OWIsCi0rICAgIDB4NWIsIDB4 NmEsIDB4MGMsIDB4MmUsIDB4MmIsIDB4MDEsIDB4NTEsIDB4Y2QsIDB4NDEsIDB4NGIsIDB4NmIs IDB4YWMsCi0rICAgIDB4MzEsIDB4YTgsIDB4MGIsIDB4ZjcsIDB4ZTYsIDB4NTksIDB4NDIsIDB4 YjgsIDB4MDMsIDB4MGMsIDB4ZjgsIDB4MDYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2FkZGl0aW9uYWxp bnB1dFtdID0gewotKyAgICAweDZhLCAweDlmLCAweDAwLCAweDkxLCAweGFlLCAweGZlLCAweGNm LCAweDg0LCAweDk5LCAweGNlLCAweGIxLCAweDQwLAotKyAgICAweDZkLCAweDVkLCAweDMzLCAw eDI4LCAweDg0LCAweGY0LCAweDhjLCAweDYzLCAweDRjLCAweDdlLCAweGJkLCAweDJjLAotKyAg ICAweDgwLCAweDc2LCAweGVlLCAweDVhLCAweGFhLCAweDE1LCAweDA3LCAweDMxLCAweGQ4LCAw eGJiLCAweDhjLCAweDY5LAotKyAgICAweDlkLCAweDlkLCAweGJjLCAweDdlLCAweDQ5LCAweGFl LCAweGVjLCAweDM5LCAweDZiLCAweGQxLCAweDFmLCAweDdlCi0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5 aW5wdXRwcltdID0gewotKyAgICAweGYzLCAweGI5LCAweDc1LCAweDljLCAweGJkLCAweDg4LCAw eGVhLCAweGEyLCAweDUwLCAweGFkLCAweGQ2LCAweDE2LAotKyAgICAweDFhLCAweDEyLCAweDNj LCAweDg2LCAweDY4LCAweGFmLCAweDZmLCAweGJlLCAweDE5LCAweGYyLCAweGVlLCAweGNjLAot KyAgICAweGE1LCAweDcwLCAweDg0LCAweDUzLCAweDUwLCAweGNiLCAweDlmLCAweDE0LCAweGE5 LCAweGU1LCAweGVlLCAweGI5LAotKyAgICAweDQ4LCAweDQ1LCAweDQwLCAweGUyLCAweGM3LCAw eGM5LCAweDlhLCAweDc0LCAweGZmLCAweDhjLCAweDk5LCAweDFmCi0rfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9w cl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4MmUsIDB4ZjIsIDB4NDUsIDB4NGMsIDB4 NjIsIDB4MmUsIDB4MGEsIDB4YjksIDB4NmIsIDB4YTIsIDB4ZmQsIDB4NTYsCi0rICAgIDB4Nzks IDB4NjAsIDB4OTMsIDB4Y2YKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9 IHsKLSsgICAgMHhhZiwgMHg2OSwgMHgyMCwgMHhlOSwgMHgzYiwgMHgzNywgMHg5ZCwgMHgzZiwg MHhiNCwgMHg4MCwgMHgwMiwgMHg3YSwKLSsgICAgMHgyNSwgMHg3ZCwgMHhiOCwgMHhkZSwgMHg3 MSwgMHhjNSwgMHgwNiwgMHgwYywgMHhiNCwgMHhlMiwgMHg4ZiwgMHgzNSwKLSsgICAgMHhkOCwg MHgxNCwgMHgwZCwgMHg3ZiwgMHg3NiwgMHg2MywgMHg0ZSwgMHhiNSwgMHhlZSwgMHhlOSwgMHg2 ZiwgMHgzNCwKLSsgICAgMHhjNywgMHg1ZiwgMHg1NiwgMHgxNCwgMHg0YSwgMHhlOCwgMHg3Mywg MHg5NSwgMHg1YiwgMHgxYywgMHhiOSwgMHhjYgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlu cHV0cHIyW10gPSB7Ci0rICAgIDB4ZTUsIDB4YjAsIDB4MmUsIDB4N2UsIDB4NTIsIDB4MzAsIDB4 ZTMsIDB4NjMsIDB4ODIsIDB4YjYsIDB4NDQsIDB4ZDMsCi0rICAgIDB4MjUsIDB4MTksIDB4MDUs IDB4MjQsIDB4OWEsIDB4OWYsIDB4NWYsIDB4MjcsIDB4NmEsIDB4MjksIDB4YWIsIDB4ZmEsCi0r ICAgIDB4MDcsIDB4YTIsIDB4NDIsIDB4MGYsIDB4YzUsIDB4YTgsIDB4OTQsIDB4N2MsIDB4MTcs IDB4N2IsIDB4ODUsIDB4ODMsCi0rICAgIDB4MGMsIDB4MjUsIDB4MGUsIDB4NjMsIDB4MGIsIDB4 ZTksIDB4MTIsIDB4NjAsIDB4Y2QsIDB4ZWYsIDB4ODAsIDB4MGYKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX3JldHVy bmVkYml0c1tdID0gewotKyAgICAweDVlLCAweGYyLCAweDI2LCAweGVmLCAweDlmLCAweDU4LCAw eDVkLCAweGQ1LCAweDRhLCAweDEwLCAweGZlLCAweGE3LAotKyAgICAweDJkLCAweDVmLCAweDRh LCAweDQ2Ci0rfTsKLSsKLSsvKiBBRVMtMjU2IG5vIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2VudHJvcHlpbnB1 dFtdID0gewotKyAgICAweGZiLCAweGNmLCAweDFiLCAweDYxLCAweDE2LCAweDg5LCAweDc4LCAw eDIzLCAweGY1LCAweGQ4LCAweDk2LCAweGUzLAotKyAgICAweDRlLCAweDY0LCAweDBiLCAweDI5 LCAweDlhLCAweDNmLCAweGY4LCAweGE1LCAweGVkLCAweGYyLCAweGZlLCAweGRiLAotKyAgICAw eDE2LCAweGNhLCAweDdmLCAweDEwLCAweGZhLCAweDVlLCAweDE4LCAweDc2LCAweDJjLCAweDYz LCAweDVlLCAweDk2LAotKyAgICAweGNmLCAweGIzLCAweGQ2LCAweGZjLCAweGFmLCAweDk5LCAw eDM5LCAweDI4LCAweDljLCAweDYxLCAweGU4LCAweGIzCi0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9ub25jZVtdID0gewot KyAgICAweDEyLCAweDk2LCAweGYwLCAweDUyLCAweGYzLCAweDhkLCAweDgxLCAweGNmLCAweGRl LCAweDg2LCAweGYyLCAweDk5LAotKyAgICAweDQzLCAweDk2LCAweGI5LCAweGYwCi0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl9ub19kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHg2MywgMHgwZCwgMHg3 OCwgMHhmNSwgMHg5MCwgMHg4ZSwgMHgzMiwgMHg0NywgMHhiMCwgMHg0ZCwgMHgzNywgMHg2MCwK LSsgICAgMHgwOSwgMHg5NiwgMHhiYywgMHhiZiwgMHg5NywgMHg3YSwgMHg2MiwgMHgxNCwgMHg0 NSwgMHhiZCwgMHg4ZCwgMHhjYywKLSsgICAgMHg2OSwgMHhmYiwgMHgwMywgMHhlMSwgMHg4MCwg MHgxYywgMHhjNywgMHhlMiwgMHgyYSwgMHhmOSwgMHgzNywgMHgzZiwKLSsgICAgMHg2NiwgMHg0 ZCwgMHg2MiwgMHhkOSwgMHgxMCwgMHhlMCwgMHhhZCwgMHhjOCwgMHg5YSwgMHhmMCwgMHhhOCwg MHg2ZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4MzYsIDB4YzYsIDB4 MTMsIDB4NjAsIDB4YmIsIDB4MTQsIDB4YWQsIDB4MjIsIDB4YjAsIDB4MzgsIDB4YWMsIDB4YTYs Ci0rICAgIDB4MTgsIDB4MTYsIDB4OTMsIDB4MjUsIDB4ODYsIDB4YjcsIDB4ZGMsIDB4ZGMsIDB4 MzYsIDB4OTgsIDB4MmIsIDB4ZjksCi0rICAgIDB4NjgsIDB4MzMsIDB4ZDMsIDB4YzYsIDB4ZmYs IDB4Y2UsIDB4OGQsIDB4MTUsIDB4NTksIDB4ODIsIDB4NzYsIDB4ZWQsCi0rICAgIDB4NmYsIDB4 OGQsIDB4NDksIDB4NzQsIDB4MmYsIDB4ZGEsIDB4ZGMsIDB4MWYsIDB4MTcsIDB4ZDAsIDB4ZGUs IDB4MTcKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHgxNiwgMHgyZiwg MHg4ZSwgMHgzZiwgMHgyMSwgMHg3YSwgMHgxYywgMHgyMCwgMHg1NiwgMHhkMSwgMHg5MiwgMHhm NiwKLSsgICAgMHhkMiwgMHgyNSwgMHg3NSwgMHgwZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlu cHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4OTEsIDB4NzksIDB4NzYsIDB4ZWUsIDB4ZTAsIDB4Y2Ys IDB4OWUsIDB4YzIsIDB4ZDUsIDB4ZDQsIDB4MjMsIDB4OWIsCi0rICAgIDB4MTIsIDB4OGMsIDB4 N2UsIDB4MGEsIDB4YjcsIDB4ZDIsIDB4OGIsIDB4ZDYsIDB4N2MsIDB4YTMsIDB4YzYsIDB4ZTUs Ci0rICAgIDB4MGUsIDB4YWEsIDB4YzcsIDB4NmIsIDB4YWUsIDB4MGQsIDB4ZmEsIDB4NTMsIDB4 MDYsIDB4NzksIDB4YTEsIDB4ZWQsCi0rICAgIDB4NGQsIDB4NmEsIDB4MGUsIDB4ZDgsIDB4OWQs IDB4YmUsIDB4MWIsIDB4MzEsIDB4OTMsIDB4N2IsIDB4ZWMsIDB4ZmIKLSt9OwotKwotK19fZmlw c19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2Rm X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAweGQyLCAweDQ2LCAweDUwLCAweDIy LCAweDEwLCAweDE0LCAweDYzLCAweGY3LCAweGVhLCAweDBmLCAweGI5LCAweDdlLAotKyAgICAw eDBkLCAweGUxLCAweDk0LCAweDA3LCAweGFmLCAweDA5LCAweDQ0LCAweDMxLCAweGVhLCAweDY0 LCAweGE0LCAweDE4LAotKyAgICAweDViLCAweGY5LCAweGQ4LCAweGMyLCAweGZhLCAweDAzLCAw eDQ3LCAweGM1LCAweDM5LCAweDQzLCAweGQ1LCAweDNiLAotKyAgICAweDYyLCAweDg2LCAweDY0 LCAweGVhLCAweDJjLCAweDczLCAweDhjLCAweGFlLCAweDlkLCAweDk4LCAweDk4LCAweDI5Ci0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4OGMsIDB4YWIsIDB4MTgsIDB4 ZjgsIDB4YzMsIDB4ZWMsIDB4MTgsIDB4NWMsIDB4YjMsIDB4MWUsIDB4OWQsIDB4YmUsCi0rICAg IDB4M2YsIDB4MDMsIDB4YjQsIDB4MDAsIDB4OTgsIDB4OWQsIDB4YWUsIDB4ZWIsIDB4ZjQsIDB4 OTQsIDB4ZjgsIDB4NDIsCi0rICAgIDB4OGYsIDB4ZTMsIDB4MzksIDB4MDcsIDB4ZTEsIDB4Yzks IDB4YWQsIDB4MGIsIDB4MWYsIDB4ZWQsIDB4YzAsIDB4YmEsCi0rICAgIDB4ZjYsIDB4ZDEsIDB4 ZWMsIDB4MjcsIDB4ODYsIDB4N2IsIDB4ZDYsIDB4NTUsIDB4OWIsIDB4NjAsIDB4YTUsIDB4YzYK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X25vX2RmX3JldHVybmVkYml0c1tdID0gewotKyAgICAweGVmLCAweGQyLCAweGQ4LCAweDVj LCAweGRjLCAweDYyLCAweDI1LCAweDlmLCAweGFhLCAweDFlLCAweDJjLCAweDY3LAotKyAgICAw eGY2LCAweDAyLCAweDMyLCAweGUyCi0rfTsKLSsKLSsvKiBTSEEtMSBQUiAgKi8KLStfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRb XSA9IHsKLSsgICAgMHhkMiwgMHgzNiwgMHhhNSwgMHgyNywgMHgzMSwgMHg3MywgMHhkZCwgMHgx MSwgMHg0ZiwgMHg5MywgMHhiZCwgMHhlMiwKLSsgICAgMHgzMSwgMHhhNSwgMHg5MSwgMHgxMwot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFf cHJfbm9uY2VbXSA9IHsKLSsgICAgMHhiNSwgMHhiMywgMHg2MCwgMHhlZiwgMHhmNywgMHg2Mywg MHgzMSwgMHhmMwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTFfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4ZDQsIDB4 YmIsIDB4MDIsIDB4MTAsIDB4YjIsIDB4NzEsIDB4ZGIsIDB4ODEsIDB4ZDYsIDB4ZjAsIDB4NDIs IDB4NjAsCi0rICAgIDB4ZGEsIDB4ZWEsIDB4NzcsIDB4NTIKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2FkZGl0aW9uYWxpbnB1dFtd ID0gewotKyAgICAweDRkLCAweGQyLCAweDZjLCAweDg3LCAweGZiLCAweDJjLCAweDRmLCAweGE2 LCAweDhkLCAweDE2LCAweDYzLCAweDIyLAotKyAgICAweDZhLCAweDUxLCAweGUzLCAweGY4Ci0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9w cl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAweGM5LCAweDgzLCAweDllLCAweDE2LCAweGY2 LCAweDFjLCAweDBmLCAweGIyLCAweGVjLCAweDYwLCAweDMxLCAweGE5LAotKyAgICAweGNiLCAw eGE5LCAweDM2LCAweDdhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMV9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4YTgsIDB4 MTMsIDB4NGYsIDB4ZjQsIDB4MzEsIDB4MDIsIDB4NDQsIDB4ZTMsIDB4ZDMsIDB4M2QsIDB4NjEs IDB4OWUsCi0rICAgIDB4ZTUsIDB4YzYsIDB4M2UsIDB4ODksIDB4YjUsIDB4OWIsIDB4MGYsIDB4 MzUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGExX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHhmOSwgMHhlOCwgMHhkMiwgMHg3 MiwgMHgxMywgMHgzNCwgMHg5NSwgMHg2ZiwgMHgxNSwgMHg0OSwgMHg0NywgMHg5OSwKLSsgICAg MHgxNiwgMHgwMywgMHgxOSwgMHg0NwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0cHIyW10gPSB7Ci0rICAgIDB4 NGUsIDB4OGMsIDB4NDksIDB4OWIsIDB4NGEsIDB4NWMsIDB4OWIsIDB4OWMsIDB4M2EsIDB4ZWUs IDB4ZmIsIDB4ZDIsCi0rICAgIDB4YWUsIDB4Y2QsIDB4OGMsIDB4YzQKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX3JldHVybmVkYml0 c1tdID0gewotKyAgICAweDUwLCAweGI0LCAweGI0LCAweGNkLCAweDY4LCAweDU3LCAweGZjLCAw eDJlLCAweGMxLCAweDUyLCAweGNjLCAweGY2LAotKyAgICAweDY4LCAweGE0LCAweDgxLCAweGVk LCAweDdlLCAweGU0LCAweDFkLCAweDg3Ci0rfTsKLSsKLSsvKiBTSEEtMSBObyBQUiAgKi8KLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9lbnRyb3B5aW5w dXRbXSA9IHsKLSsgICAgMHhhOSwgMHg0NywgMHgxYiwgMHgyOSwgMHgyZCwgMHgxYywgMHgwNSwg MHhkZiwgMHg3NiwgMHhkMCwgMHg2MiwgMHhmOSwKLSsgICAgMHhlMiwgMHg3ZiwgMHg0YywgMHg3 YgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTFfbm9uY2VbXSA9IHsKLSsgICAgMHg1MywgMHgyMywgMHgyNCwgMHhlMywgMHhlYywgMHgwYywg MHg1NCwgMHgxNAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTFfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4N2EsIDB4ODcs IDB4YTEsIDB4YWMsIDB4MWMsIDB4ZmQsIDB4YWIsIDB4YWUsIDB4ZjcsIDB4ZDYsIDB4ZmIsIDB4 NzYsCi0rICAgIDB4MjgsIDB4ZWMsIDB4NmQsIDB4Y2EKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dFtdID0gewot KyAgICAweGZjLCAweDkyLCAweDM1LCAweGQ2LCAweDdlLCAweGI3LCAweDI0LCAweDY1LCAweGZk LCAweDEyLCAweDI3LCAweDM1LAotKyAgICAweGMwLCAweDcyLCAweGNhLCAweDI4Ci0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9pbnRfcmV0 dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4NTcsIDB4ODgsIDB4ODIsIDB4ZTUsIDB4MjUsIDB4YTUs IDB4MmMsIDB4NGEsIDB4MDYsIDB4MjAsIDB4NmMsIDB4NzIsCi0rICAgIDB4NTUsIDB4NjEsIDB4 ZGQsIDB4OTAsIDB4NzEsIDB4OWYsIDB4OTUsIDB4ZWEKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2VudHJvcHlpbnB1dHJlc2VlZFtdID0g ewotKyAgICAweDY5LCAweGE1LCAweDQwLCAweDYyLCAweDk4LCAweDQ3LCAweDU2LCAweDczLCAw eDRhLCAweDhmLCAweDYwLCAweDk2LAotKyAgICAweGQ2LCAweDk5LCAweDI3LCAweGVkCi0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9hZGRp dGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHhlNSwgMHg0MCwgMHg0ZSwgMHhiZCwgMHg1 MCwgMHgwMCwgMHhmNSwgMHgxNSwgMHhhNiwgMHhlZSwgMHg0NSwgMHhkYSwKLSsgICAgMHg4NCwg MHgzZCwgMHhkNCwgMHhjMAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDExLCAweDUx LCAweDE0LCAweGYwLCAweDA5LCAweDFiLCAweDRlLCAweDU2LCAweDBkLCAweGU5LCAweGY2LCAw eDFlLAotKyAgICAweDUyLCAweDY1LCAweGNkLCAweDk2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9yZXR1cm5lZGJpdHNbXSA9IHsKLSsg ICAgMHhhMSwgMHg5YywgMHg5NCwgMHg2ZSwgMHgyOSwgMHhlMSwgMHgzMywgMHgwZCwgMHgzMiwg MHhkNiwgMHhhYSwgMHhjZSwKLSsgICAgMHg3MSwgMHgzZiwgMHg1MiwgMHg3MiwgMHg4YiwgMHg0 MiwgMHhhOCwgMHhkNwotK307Ci0rCi0rLyogU0hBLTIyNCBQUiAgKi8KLStfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJvcHlpbnB1dFtdID0g ewotKyAgICAweDEyLCAweDY5LCAweDMyLCAweDRmLCAweDgzLCAweGE2LCAweGY1LCAweDE0LCAw eGUzLCAweDQ5LCAweDNlLCAweDc1LAotKyAgICAweDNlLCAweGRlLCAweGFkLCAweGExLCAweDI5 LCAweGMzLCAweGYzLCAweDE5LCAweDIwLCAweGI1LCAweDRjLCAweGQ5Ci0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX25vbmNlW10g PSB7Ci0rICAgIDB4NmEsIDB4NzgsIDB4ZDAsIDB4ZWIsIDB4YmIsIDB4NWEsIDB4ZjAsIDB4ZWUs IDB4ZTgsIDB4YzMsIDB4YmEsIDB4NzEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7 Ci0rICAgIDB4ZDUsIDB4YjgsIDB4YjYsIDB4YmMsIDB4YzEsIDB4NWIsIDB4NjAsIDB4MzEsIDB4 M2MsIDB4ZjUsIDB4ZTUsIDB4YzAsCi0rICAgIDB4OGUsIDB4NTIsIDB4N2EsIDB4YmQsIDB4ZWEs IDB4NDcsIDB4YTksIDB4NWYsIDB4OGYsIDB4ZjksIDB4OGIsIDB4YWUKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfYWRkaXRpb25h bGlucHV0W10gPSB7Ci0rICAgIDB4MWYsIDB4NTUsIDB4ZWMsIDB4YWUsIDB4MTYsIDB4MTIsIDB4 ODQsIDB4YmEsIDB4ODQsIDB4MTYsIDB4MTksIDB4ODgsCi0rICAgIDB4OGUsIDB4YjgsIDB4MzMs IDB4MjUsIDB4NTQsIDB4ZmYsIDB4Y2EsIDB4NzksIDB4YWYsIDB4MDcsIDB4MjUsIDB4NTAKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRf cHJfZW50cm9weWlucHV0cHJbXSA9IHsKLSsgICAgMHg5MiwgMHhhMywgMHgzMiwgMHhhOCwgMHg5 YSwgMHgwYSwgMHg1OCwgMHg3YywgMHgxZCwgMHg1YSwgMHg3ZSwgMHhlMSwKLSsgICAgMHhiMiwg MHg3MywgMHhhYiwgMHgwZSwgMHgxNiwgMHg3OSwgMHgyMywgMHhkMywgMHgyOSwgMHg4OSwgMHg4 MSwgMHhlMQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTIyNF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ZjMsIDB4MzgsIDB4 OTEsIDB4NDAsIDB4MzcsIDB4N2EsIDB4NTEsIDB4NzIsIDB4NDIsIDB4NzQsIDB4NzgsIDB4MGEs Ci0rICAgIDB4NjksIDB4ZmQsIDB4YTYsIDB4NDQsIDB4NDMsIDB4NDUsIDB4NmMsIDB4MGMsIDB4 NWEsIDB4MTksIDB4ZmYsIDB4ZjEsCi0rICAgIDB4NTQsIDB4NjAsIDB4ZWUsIDB4NmEKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJf YWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDc1LCAweGYzLCAweDA0LCAweDI1LCAweGRk LCAweDM2LCAweGE4LCAweDM3LCAweDQ2LCAweGFlLCAweDBjLCAweDUyLAotKyAgICAweDA1LCAw eDc5LCAweDRjLCAweDI2LCAweGRiLCAweGU5LCAweDcxLCAweDE2LCAweDRjLCAweDBhLCAweGYy LCAweDYwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByMltdID0gewotKyAgICAweGVhLCAweGM1LCAweDAz LCAweDBhLCAweDRmLCAweGIwLCAweDM4LCAweDhkLCAweDIzLCAweGQ0LCAweGM4LCAweDc3LAot KyAgICAweGUyLCAweDZkLCAweDljLCAweDBiLCAweDQ0LCAweGY3LCAweDJkLCAweDViLCAweGJm LCAweDVkLCAweDJhLCAweDExCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX3JldHVybmVkYml0c1tdID0gewotKyAgICAweDYwLCAw eDUwLCAweDJiLCAweGU3LCAweDg2LCAweGQ4LCAweDI2LCAweDczLCAweGUzLCAweDFkLCAweDk1 LCAweDIwLAotKyAgICAweGIzLCAweDJjLCAweDMyLCAweDFjLCAweGY1LCAweGNlLCAweDU3LCAw eGE2LCAweDY3LCAweDJiLCAweGRjLCAweDRlLAotKyAgICAweGRkLCAweDExLCAweDRjLCAweGM0 Ci0rfTsKLSsKLSsvKiBTSEEtMjI0IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4YjIs IDB4MWMsIDB4NzcsIDB4NGQsIDB4ZjYsIDB4ZDMsIDB4YjYsIDB4NDAsIDB4YjcsIDB4MzAsIDB4 M2UsIDB4MjksCi0rICAgIDB4YjAsIDB4ODUsIDB4MWMsIDB4YmUsIDB4NGEsIDB4ZWEsIDB4NmIs IDB4NWEsIDB4YjUsIDB4OGEsIDB4OTcsIDB4ZWIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfbm9uY2VbXSA9IHsKLSsgICAgMHg0Miwg MHgwMiwgMHgwYSwgMHgxYywgMHg5OCwgMHg5YSwgMHg3NywgMHg5ZSwgMHg5ZiwgMHg4MCwgMHhi YSwgMHhlMAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTIyNF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHg5OCwgMHhiOCwg MHgwNCwgMHg0MSwgMHhmYywgMHhjMSwgMHg1ZCwgMHhjNSwgMHhlOSwgMHhiOSwgMHgwOCwgMHhk YSwKLSsgICAgMHhmOSwgMHhmYSwgMHgwZCwgMHg5MCwgMHhjZSwgMHhkZiwgMHgxZCwgMHgxMCwg MHhhOSwgMHg4ZCwgMHg1MCwgMHgwYwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHg5 YSwgMHg4ZCwgMHgzOSwgMHg0OSwgMHg0MiwgMHhkNSwgMHgwYiwgMHhhZSwgMHhlMSwgMHhhZiwg MHhiNywgMHgwMCwKLSsgICAgMHgwMiwgMHhmYSwgMHg5NiwgMHhiMSwgMHhhNSwgMHgxZCwgMHgy ZCwgMHgyNSwgMHg3OCwgMHhlZSwgMHg4MywgMHgzZgotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9pbnRfcmV0dXJuZWRiaXRzW10gPSB7 Ci0rICAgIDB4ZTQsIDB4ZjUsIDB4NTMsIDB4NzksIDB4NWEsIDB4OTcsIDB4NTgsIDB4MDYsIDB4 MDgsIDB4YmEsIDB4N2IsIDB4ZmEsCi0rICAgIDB4ZjAsIDB4ODMsIDB4MDUsIDB4OGMsIDB4MjIs IDB4YzAsIDB4YzksIDB4ZGIsIDB4MTUsIDB4ZTcsIDB4ZGUsIDB4MjAsCi0rICAgIDB4NTUsIDB4 MjIsIDB4OWEsIDB4YWQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyMjRfZW50cm9weWlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4NjcsIDB4 MDksIDB4NDgsIDB4YWEsIDB4MDcsIDB4MTYsIDB4OTksIDB4ODksIDB4N2YsIDB4NmQsIDB4YTAs IDB4ZTUsCi0rICAgIDB4OGYsIDB4ZGYsIDB4YmMsIDB4ZGIsIDB4ZmUsIDB4ZTUsIDB4NmMsIDB4 N2EsIDB4OTUsIDB4NGEsIDB4NjYsIDB4MTcKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7 Ci0rICAgIDB4MGYsIDB4NGIsIDB4MWMsIDB4NmYsIDB4YjcsIDB4ZTMsIDB4NDcsIDB4ZTUsIDB4 NWQsIDB4N2QsIDB4MzgsIDB4ZDYsCi0rICAgIDB4MjgsIDB4OWIsIDB4ZWIsIDB4NTUsIDB4NjMs IDB4MDksIDB4M2UsIDB4N2MsIDB4NTYsIDB4ZWEsIDB4ZjgsIDB4MTkKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfYWRkaXRpb25hbGlu cHV0MltdID0gewotKyAgICAweDJkLCAweDI2LCAweDdjLCAweDM3LCAweGU0LCAweDdhLCAweDI4 LCAweDVlLCAweDVhLCAweDNjLCAweGFmLCAweDNkLAotKyAgICAweDVhLCAweDhlLCAweDU1LCAw eGEyLCAweDFhLCAweDZlLCAweGMwLCAweGU1LCAweGY2LCAweDIxLCAweGQzLCAweGY2Ci0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3Jl dHVybmVkYml0c1tdID0gewotKyAgICAweDRkLCAweDgzLCAweDM1LCAweGRmLCAweDY3LCAweGE5 LCAweGZjLCAweDE3LCAweGRhLCAweDcwLCAweGNjLCAweDhiLAotKyAgICAweDdmLCAweDc3LCAw eGFlLCAweGEyLCAweDVmLCAweGI5LCAweDdlLCAweDc0LCAweDRjLCAweDI2LCAweGMxLCAweDdh LAotKyAgICAweDNiLCAweGE3LCAweDVjLCAweDkzCi0rfTsKLSsKLSsvKiBTSEEtMjU2IFBSICAq LwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJf ZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4Y2UsIDB4NDksIDB4MDAsIDB4N2EsIDB4NTYsIDB4 ZTMsIDB4NjcsIDB4OGYsIDB4ZTEsIDB4YjYsIDB4YTcsIDB4ZDQsCi0rICAgIDB4NGYsIDB4MDgs IDB4N2EsIDB4MWIsIDB4MDEsIDB4ZjQsIDB4ZmEsIDB4NmIsIDB4ZWYsIDB4YjcsIDB4ZTUsIDB4 ZWIsCi0rICAgIDB4MDcsIDB4M2QsIDB4MTEsIDB4MGQsIDB4YzgsIDB4ZWEsIDB4MmIsIDB4ZmUK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy NTZfcHJfbm9uY2VbXSA9IHsKLSsgICAgMHg3MywgMHg0MSwgMHhjOCwgMHg5MiwgMHg5NCwgMHhl MiwgMHhjNSwgMHg1ZiwgMHg5MywgMHhmZCwgMHgzOSwgMHg1ZCwKLSsgICAgMHgyYiwgMHg5MSwg MHg0ZCwgMHgzOAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTI1Nl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHg1MCwg MHg2ZCwgMHgwMSwgMHgwMSwgMHgwNywgMHg1YSwgMHg4MCwgMHgzNSwgMHg3YSwgMHg1NiwgMHgx YSwgMHg1NiwKLSsgICAgMHgyZiwgMHg5YSwgMHgwYiwgMHgzNSwgMHhiMiwgMHhiMSwgMHhjOSwg MHhlNSwgMHhjYSwgMHg2OSwgMHg2MSwgMHg0OCwKLSsgICAgMHhmZiwgMHhmYiwgMHgwZiwgMHhk OSwgMHg0YiwgMHg3OSwgMHgxZCwgMHhiYQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsg ICAgMHgyMCwgMHhiOCwgMHhkZiwgMHg0NCwgMHg3NywgMHg1YSwgMHhiOCwgMHhkMywgMHhiZiwg MHhmNiwgMHhjZiwgMHhhYywKLSsgICAgMHg1ZSwgMHhhNiwgMHg5NiwgMHg2MiwgMHg3MywgMHg0 NCwgMHg0MCwgMHg0YSwgMHgzMCwgMHhmYiwgMHgzOCwgMHhhNSwKLSsgICAgMHg3YiwgMHgwZCwg MHhlNCwgMHgwZCwgMHhjNiwgMHhlNCwgMHg5YSwgMHgxZgotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcltd ID0gewotKyAgICAweDA0LCAweGM0LCAweDY1LCAweGY0LCAweGQzLCAweGJmLCAweDgzLCAweDRi LCAweGFiLCAweGM4LCAweDQxLCAweGE4LAotKyAgICAweGMyLCAweGUwLCAweDQ0LCAweDYzLCAw eDc3LCAweDRjLCAweDZmLCAweDZjLCAweDQ5LCAweDQ2LCAweGZmLCAweDk0LAotKyAgICAweDE3 LCAweGVhLCAweGU2LCAweDFhLCAweDlkLCAweDVlLCAweDY2LCAweDc4Ci0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2ludF9yZXR1 cm5lZGJpdHNbXSA9IHsKLSsgICAgMHgwNywgMHg0ZCwgMHhhYywgMHg5YiwgMHg4NiwgMHhjYSwg MHg0YSwgMHhhYSwgMHg2ZSwgMHg3YSwgMHgwMywgMHhhMiwKLSsgICAgMHg1ZCwgMHgxMCwgMHhl YSwgMHgwYiwgMHhmOSwgMHg4MywgMHhjYywgMHhkMSwgMHhmYywgMHhlMiwgMHgwNywgMHhjNywK LSsgICAgMHgwNiwgMHgzNCwgMHg2MCwgMHg2ZiwgMHg4MywgMHg5NCwgMHg5OSwgMHg3NgotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9w cl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4ODksIDB4NGUsIDB4NDUsIDB4OGMsIDB4 MTEsIDB4ZjksIDB4YmMsIDB4NWIsIDB4YWMsIDB4NzQsIDB4OGIsIDB4NGIsCi0rICAgIDB4NWYs IDB4ZjcsIDB4MTksIDB4ZjMsIDB4ZjUsIDB4MjQsIDB4NTQsIDB4MTQsIDB4ZDEsIDB4MTUsIDB4 YjEsIDB4NDMsCi0rICAgIDB4MTIsIDB4YTQsIDB4NWYsIDB4ZDQsIDB4ZWMsIDB4ZmMsIDB4Y2Qs IDB4MDkKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyNTZfcHJfZW50cm9weWlucHV0cHIyW10gPSB7Ci0rICAgIDB4MGUsIDB4ZWIsIDB4MWYs IDB4ZDcsIDB4ZmMsIDB4ZDEsIDB4OWQsIDB4ZDQsIDB4MDUsIDB4MzYsIDB4OGIsIDB4YjIsCi0r ICAgIDB4ZmIsIDB4ZTQsIDB4ZjQsIDB4NTEsIDB4MGMsIDB4ODcsIDB4OWIsIDB4MDIsIDB4NDQs IDB4ZDUsIDB4OTIsIDB4NGQsCi0rICAgIDB4NDQsIDB4ZmUsIDB4MWEsIDB4MDMsIDB4NDMsIDB4 NTYsIDB4YmQsIDB4ODYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyNTZfcHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4MDIsIDB4YWEs IDB4YjYsIDB4MWQsIDB4N2UsIDB4MmEsIDB4NDAsIDB4MDMsIDB4NjksIDB4MmQsIDB4NDksIDB4 YTMsCi0rICAgIDB4NDEsIDB4ZTcsIDB4NDQsIDB4MGIsIDB4YWYsIDB4N2IsIDB4ODUsIDB4ZTQs IDB4NWYsIDB4NTMsIDB4M2IsIDB4NjQsCi0rICAgIDB4YmMsIDB4ODksIDB4YzgsIDB4ODIsIDB4 ZDQsIDB4NzgsIDB4MzcsIDB4YTIKLSt9OwotKwotKy8qIFNIQS0yNTYgTm8gUFIgICovCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9lbnRyb3B5aW5w dXRbXSA9IHsKLSsgICAgMHg1YiwgMHgxYiwgMHhlYywgMHg0ZCwgMHhhOSwgMHgzOCwgMHg3NCwg MHg1YSwgMHgzNCwgMHgwYiwgMHg3YiwgMHhjNSwKLSsgICAgMHhlNSwgMHhkNywgMHg2NiwgMHg3 YywgMHhiYywgMHg4MiwgMHhiOSwgMHgwZSwgMHgyZCwgMHgxZiwgMHg5MiwgMHhkNywKLSsgICAg MHhjMSwgMHhiYywgMHg2NywgMHg2OSwgMHhlYywgMHg2YiwgMHgwMywgMHgzYwotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9ub25jZVtd ID0gewotKyAgICAweGE0LCAweDBjLCAweGQ4LCAweDljLCAweDYxLCAweGQ4LCAweGMzLCAweDU0 LCAweGZlLCAweDUzLCAweGM5LCAweGU1LAotKyAgICAweDVkLCAweDZmLCAweDZkLCAweDM1Ci0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2 X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDIyLCAweDVlLCAweDYyLCAweDkz LCAweDQyLCAweDgzLCAweDc4LCAweDI0LCAweGQ4LCAweDQwLCAweDhjLCAweGRlLAotKyAgICAw eDZmLCAweGY5LCAweGE0LCAweDdhLCAweGM1LCAweGE3LCAweDNiLCAweDg4LCAweGEzLCAweGVl LCAweDQyLCAweDIwLAotKyAgICAweGZkLCAweDYxLCAweDU2LCAweGM2LCAweDRjLCAweDEzLCAw eDQxLCAweDljCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweGJmLCAweDc0LCAweDVi LCAweGY2LCAweGM1LCAweDY0LCAweDVlLCAweDk5LCAweDM0LCAweDhmLCAweGJjLCAweGE0LAot KyAgICAweGUyLCAweGJkLCAweGQ4LCAweDg1LCAweDI2LCAweDM3LCAweGVhLCAweGJhLCAweDRm LCAweGYyLCAweDlhLCAweDlhLAotKyAgICAweDY2LCAweGZjLCAweGRmLCAweDYzLCAweDI2LCAw eDI2LCAweDE5LCAweDg3Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjU2X2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhiMywgMHhj NiwgMHgwNywgMHgwNywgMHhkNiwgMHg3NSwgMHhmNiwgMHgyYiwgMHhkNiwgMHgyMSwgMHg5Niwg MHhmMSwKLSsgICAgMHhhZSwgMHhkYiwgMHgyYiwgMHhhYywgMHgyNSwgMHgyYSwgMHhhZSwgMHhh ZSwgMHg0MSwgMHg3MiwgMHgwMywgMHg1ZSwKLSsgICAgMHhiZiwgMHhkMywgMHg2NCwgMHhiYywg MHg1OSwgMHhmOSwgMHhjMCwgMHg3NgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAg MHhiZiwgMHgyMCwgMHgzMywgMHg1NiwgMHgyOSwgMHhhOCwgMHgzNywgMHgwNCwgMHgxZiwgMHg3 OCwgMHgzNCwgMHgzZCwKLSsgICAgMHg4MSwgMHgyYSwgMHhjOSwgMHg4NiwgMHhjNiwgMHg3YSwg MHgyZiwgMHg4OCwgMHg1ZSwgMHhkNSwgMHhiZSwgMHgzNCwKLSsgICAgMHg0NiwgMHgyMCwgMHhh NCwgMHgzNSwgMHhlYiwgMHhjNywgMHhlMiwgMHg5ZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRb XSA9IHsKLSsgICAgMHg5YiwgMHhhZSwgMHgyZCwgMHgyZCwgMHg2MSwgMHhhNCwgMHg4OSwgMHhl YiwgMHg0MywgMHg0NiwgMHhhNywgMHhkYSwKLSsgICAgMHhlZiwgMHg0MCwgMHhjYSwgMHg0YSwg MHg5OSwgMHgxMSwgMHg0MSwgMHhkYywgMHg1YywgMHg5NCwgMHhlOSwgMHhhYywKLSsgICAgMHhk NCwgMHhkMCwgMHhlNiwgMHhiZCwgMHhmYiwgMHgwMywgMHg5YywgMHhhOAotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFs aW5wdXQyW10gPSB7Ci0rICAgIDB4MjMsIDB4YWEsIDB4MGMsIDB4YmQsIDB4MjgsIDB4MzMsIDB4 ZTIsIDB4NTEsIDB4ZmMsIDB4NzEsIDB4ZDIsIDB4MTUsCi0rICAgIDB4MWYsIDB4NzYsIDB4ZmQs IDB4MGQsIDB4ZTAsIDB4YjcsIDB4YjUsIDB4ODQsIDB4NzUsIDB4NWIsIDB4YmUsIDB4ZjMsCi0r ICAgIDB4NWMsIDB4Y2EsIDB4YzUsIDB4MzAsIDB4ZjIsIDB4NzUsIDB4MWYsIDB4ZGEKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcmV0 dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4OTAsIDB4M2MsIDB4YzEsIDB4MTAsIDB4OGMsIDB4MTIs IDB4MDEsIDB4YzYsIDB4YTYsIDB4M2EsIDB4MGYsIDB4NGQsCi0rICAgIDB4YjYsIDB4M2EsIDB4 NGYsIDB4NDEsIDB4OWMsIDB4NjEsIDB4NzUsIDB4ODQsIDB4ZTksIDB4NzQsIDB4NzUsIDB4ZmQs Ci0rICAgIDB4ZmUsIDB4ZjIsIDB4MWYsIDB4NDMsIDB4ZDgsIDB4NWUsIDB4MjQsIDB4YTMKLSt9 OwotKwotKy8qIFNIQS0zODQgUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHg3MSwgMHg5 ZCwgMHhiMiwgMHg1YSwgMHg3MSwgMHg2ZCwgMHgwNCwgMHhlOSwgMHgxZSwgMHhjNywgMHg5Miwg MHgyNCwKLSsgICAgMHg2ZSwgMHgxMiwgMHgzMywgMHhhOSwgMHg1MiwgMHg2NCwgMHgzMSwgMHhl ZiwgMHg3MSwgMHhlYiwgMHgyMiwgMHg1NSwKLSsgICAgMHgyOCwgMHg5NywgMHgwNiwgMHg2YSwg MHhjMCwgMHgwYywgMHhhMCwgMHg3ZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9ub25jZVtdID0gewotKyAgICAweGY1LCAweDBk LCAweGZhLCAweGIwLCAweGVjLCAweDZhLCAweDdjLCAweGQ2LCAweGJkLCAweDliLCAweDA1LCAw eGZkLAotKyAgICAweDM4LCAweDNlLCAweDJlLCAweDU2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0gewotKyAgICAweDc0LCAweGFjLCAweDdlLCAweDZkLCAweGIxLCAweGE0LCAweGU3 LCAweDIxLCAweGQxLCAweDFlLCAweDZlLCAweDk2LAotKyAgICAweDZkLCAweDRkLCAweDUzLCAw eDQ2LCAweDgyLCAweDk2LCAweDZlLCAweGNmLCAweGFhLCAweDgxLCAweDhkLCAweDdkLAotKyAg ICAweDllLCAweGUxLCAweDBmLCAweDE1LCAweGVhLCAweDQxLCAweGJmLCAweGUzCi0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2Fk ZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweGRhLCAweDk1LCAweGQ0LCAweGQwLCAweGI4LCAw eDExLCAweGQzLCAweDQ5LCAweDI3LCAweDVkLCAweGE5LCAweDM5LAotKyAgICAweDY4LCAweGYz LCAweGE4LCAweGU5LCAweDVkLCAweDE5LCAweDhhLCAweDJiLCAweDY2LCAweGU4LCAweDY5LCAw eDA2LAotKyAgICAweDdjLCAweDllLCAweDAzLCAweGExLCAweDhiLCAweDI2LCAweDJkLCAweDZl Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh Mzg0X3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0rICAgIDB4NDksIDB4ZGYsIDB4NDQsIDB4MDAs IDB4ZTQsIDB4MWMsIDB4NzUsIDB4MGIsIDB4MjYsIDB4NWEsIDB4NTksIDB4NjQsCi0rICAgIDB4 MWYsIDB4NGUsIDB4YjEsIDB4YjIsIDB4MTMsIDB4ZjEsIDB4MjIsIDB4NGUsIDB4YjQsIDB4NmQs IDB4OWEsIDB4Y2MsCi0rICAgIDB4YTAsIDB4NDgsIDB4ZTYsIDB4Y2YsIDB4MWQsIDB4ZDEsIDB4 OTIsIDB4MGQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEzODRfcHJfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGM4LCAweDUyLCAw eGFlLCAweGJmLCAweDA0LCAweDNjLCAweDI3LCAweGI3LCAweDc4LCAweDE4LCAweGFhLCAweDhm LAotKyAgICAweGZmLCAweGNmLCAweGE0LCAweGYxLCAweGNjLCAweGU3LCAweDY4LCAweGZhLCAw eDIyLCAweGEyLCAweDEzLCAweDQ1LAotKyAgICAweGU4LCAweGRkLCAweDg3LCAweGU2LCAweGYy LCAweDZlLCAweGRkLCAweGM3LCAweDUyLCAweDkwLCAweDlmLCAweDdiLAotKyAgICAweGZhLCAw eDYxLCAweDJkLCAweDlkLCAweDllLCAweGNmLCAweDk4LCAweGFjLCAweDUyLCAweDQwLCAweGNl LCAweGFmCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHg2MSwgMHg3YywgMHgw MywgMHg5YSwgMHgzZSwgMHg1MCwgMHg1NywgMHg2MCwgMHhjNSwgMHg4MywgMHhjOSwgMHhiMiwK LSsgICAgMHhkMSwgMHg4NywgMHg4NSwgMHg2NiwgMHg5MiwgMHg1ZCwgMHg4NCwgMHgwZSwgMHg1 MywgMHhmYiwgMHg3MCwgMHgwMywKLSsgICAgMHg3MiwgMHhmZCwgMHhiYSwgMHhhZSwgMHg5Yywg MHg4ZiwgMHhmOCwgMHgxOAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHhmOCwg MHhlYiwgMHg4OSwgMHhiMSwgMHg4ZCwgMHg3OCwgMHhiZSwgMHgyMSwgMHhlMCwgMHhiYiwgMHg5 ZCwgMHhiNywKLSsgICAgMHg5NSwgMHgwZSwgMHhkOSwgMHg0NiwgMHgwYywgMHg4YywgMHhlMiwg MHg2MywgMHhiNywgMHg5ZCwgMHg2NywgMHg5MCwKLSsgICAgMHhiZCwgMHhjNywgMHgwYiwgMHhh NSwgMHhjZSwgMHhiMiwgMHg2NSwgMHg4MQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAg MHhlNiwgMHg5ZiwgMHhmZSwgMHg2OCwgMHhkNiwgMHhiNSwgMHg3OSwgMHhmMSwgMHgwNiwgMHg1 ZiwgMHhhMywgMHhiYiwKLSsgICAgMHgyMywgMHg4NSwgMHhkOCwgMHhmMCwgMHgyOSwgMHg1YSwg MHg2OCwgMHg5ZSwgMHhmNSwgMHhmNCwgMHhhNiwgMHgxMiwKLSsgICAgMHhlMCwgMHg5YSwgMHhl MiwgMHhhYywgMHgwMCwgMHgxZCwgMHg5OCwgMHgyNiwgMHhmYywgMHg1MywgMHg5NSwgMHg1MywK LSsgICAgMHhlNCwgMHgzZSwgMHgxNywgMHhkNSwgMHgwOCwgMHgwYiwgMHg3MCwgMHgzZCwgMHg2 NywgMHg5OSwgMHhhYywgMHg2NgotK307Ci0rCi0rLyogU0hBLTM4NCBObyBQUiAgKi8KLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2VudHJvcHlpbnB1 dFtdID0gewotKyAgICAweDA3LCAweDE1LCAweDI3LCAweDJhLCAweGFmLCAweDc0LCAweDI0LCAw eDM3LCAweGJjLCAweGQ1LCAweDE0LCAweDY5LAotKyAgICAweGNlLCAweDExLCAweGZmLCAweGEy LCAweDZiLCAweGI4LCAweDA1LCAweDY3LCAweDM0LCAweGY4LCAweGJkLCAweDZkLAotKyAgICAw eDZhLCAweGNjLCAweGNkLCAweDYwLCAweGEzLCAweDY4LCAweGNhLCAweGY0Ci0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X25vbmNlW10g PSB7Ci0rICAgIDB4NzAsIDB4MTcsIDB4YzIsIDB4NWIsIDB4NWQsIDB4MjIsIDB4MGIsIDB4MDYs IDB4MTUsIDB4NTQsIDB4NzgsIDB4NzcsCi0rICAgIDB4NDQsIDB4YWYsIDB4MmYsIDB4MDkKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4ODksIDB4MzksIDB4MjgsIDB4YjAs IDB4NjAsIDB4ZWIsIDB4M2QsIDB4ZGMsIDB4NTUsIDB4NzUsIDB4ODYsIDB4ZWIsCi0rICAgIDB4 YWUsIDB4YTIsIDB4OGYsIDB4YmMsIDB4MWIsIDB4NzUsIDB4ZDQsIDB4ZTEsIDB4MGYsIDB4YWEs IDB4MzgsIDB4Y2EsCi0rICAgIDB4NjIsIDB4OGIsIDB4Y2IsIDB4MmMsIDB4MjYsIDB4ZjYsIDB4 YmMsIDB4YjEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEzODRfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4MzAsIDB4MmIsIDB4NDIs IDB4MzUsIDB4ZWYsIDB4ZGEsIDB4NDAsIDB4NTUsIDB4MjgsIDB4YzYsIDB4OTUsIDB4ZmIsCi0r ICAgIDB4NTQsIDB4MDEsIDB4NjIsIDB4ZDcsIDB4ODcsIDB4MTQsIDB4NDgsIDB4NmQsIDB4OTAs IDB4NGMsIDB4YTksIDB4MDIsCi0rICAgIDB4NTQsIDB4NDAsIDB4MjIsIDB4YzgsIDB4NjYsIDB4 YTUsIDB4NDgsIDB4NDgKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEzODRfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDgyLCAweGM0 LCAweGExLCAweDljLCAweDIxLCAweGQyLCAweGU3LCAweGE1LCAweGE2LCAweGY2LCAweDVmLCAw eDA0LAotKyAgICAweDVjLCAweGM3LCAweDMxLCAweDlkLCAweDhkLCAweDU5LCAweDc0LCAweDUw LCAweDE5LCAweDg5LCAweDJmLCAweDYzLAotKyAgICAweGQ1LCAweGI3LCAweDdlLCAweGViLCAw eDE1LCAweGUzLCAweDcwLCAweDgzLCAweGExLCAweDI0LCAweDU5LCAweGZhLAotKyAgICAweDJj LCAweDU2LCAweGY2LCAweDg4LCAweDNhLCAweDkyLCAweDkzLCAweGExLCAweGZiLCAweDc5LCAw eGMxLCAweDdhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMzg0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDM5LCAweGE2LCAw eGU4LCAweDVjLCAweDgyLCAweDE3LCAweDcxLCAweDI2LCAweDU3LCAweDRmLCAweDlmLCAweGMy LAotKyAgICAweDU1LCAweGZmLCAweDVjLCAweDliLCAweDUzLCAweDFhLCAweGQxLCAweDVmLCAw eGJjLCAweDYyLCAweGU0LCAweDI3LAotKyAgICAweDJkLCAweDMyLCAweGYwLCAweGU0LCAweDUy LCAweDhjLCAweGM1LCAweDBjCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAw eDhkLCAweGNiLCAweDhkLCAweGNlLCAweDA4LCAweGVhLCAweDgwLCAweGU4LCAweDliLCAweDYx LCAweGE4LCAweDBmLAotKyAgICAweGFmLCAweDQ5LCAweDIwLCAweDllLCAweDc0LCAweGNiLCAw eDU3LCAweDgwLCAweDQyLCAweGIwLCAweDg0LCAweDVlLAotKyAgICAweDMwLCAweDJhLCAweDY3 LCAweDA4LCAweGY0LCAweGUzLCAweDQwLCAweDIyCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsK LSsgICAgMHg3YywgMHg4ZiwgMHhjMiwgMHhhZSwgMHgyMiwgMHg0YSwgMHhkNiwgMHhmNiwgMHgw NSwgMHhhNCwgMHg3YSwgMHhlYSwKLSsgICAgMHhiYiwgMHgyNSwgMHhkMCwgMHhiNywgMHg1YSwg MHhkNiwgMHhjZiwgMHg5ZCwgMHhmMywgMHg2YywgMHhlMiwgMHhiMiwKLSsgICAgMHg0ZSwgMHhi NCwgMHhiZCwgMHhmNCwgMHhlNSwgMHg0MCwgMHg4MCwgMHg5NAotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9yZXR1cm5lZGJpdHNbXSA9 IHsKLSsgICAgMHg5ZSwgMHg3ZSwgMHhmYiwgMHg1OSwgMHhiYiwgMHhhYSwgMHgzYywgMHhmNywg MHhlMSwgMHhmOCwgMHg3NiwgMHhkZCwKLSsgICAgMHg2MywgMHg1ZiwgMHhhZiwgMHgyMywgMHhk NiwgMHg2NCwgMHg2MSwgMHhjMCwgMHg5YSwgMHgwOSwgMHg0NywgMHhjOSwKLSsgICAgMHgzMywg MHhkZiwgMHg2ZCwgMHg1NSwgMHg5MSwgMHgzNCwgMHg3OSwgMHg3MCwgMHhjNCwgMHg5OSwgMHg2 ZSwgMHg1NCwKLSsgICAgMHgwOSwgMHg2NCwgMHgyMSwgMHgxYSwgMHhiZCwgMHgxZSwgMHg4MCwg MHg0MCwgMHgzNCwgMHhhZCwgMHhmYSwgMHhkNwotK307Ci0rCi0rLyogU0hBLTUxMiBQUiAgKi8K LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2Vu dHJvcHlpbnB1dFtdID0gewotKyAgICAweDEzLCAweGY3LCAweDYxLCAweDc1LCAweDY1LCAweDI4 LCAweGEyLCAweDU5LCAweDEzLCAweDVhLCAweDRhLCAweDRmLAotKyAgICAweDU2LCAweDYwLCAw eDhjLCAweDUzLCAweDdkLCAweGIwLCAweGJkLCAweDA2LCAweDRmLCAweGVkLCAweGNjLCAweGQy LAotKyAgICAweGEyLCAweGI1LCAweGZkLCAweDViLCAweDNhLCAweGFiLCAweGVjLCAweDI4Ci0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEy X3ByX25vbmNlW10gPSB7Ci0rICAgIDB4YmUsIDB4YTMsIDB4OTEsIDB4OTMsIDB4MWQsIDB4YzMs IDB4MzEsIDB4M2EsIDB4MjMsIDB4MzMsIDB4NTAsIDB4NjcsCi0rICAgIDB4ODgsIDB4YzcsIDB4 YTIsIDB4YzQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGE1MTJfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4MWYsIDB4 NTksIDB4NGQsIDB4N2IsIDB4ZTYsIDB4NDYsIDB4OTEsIDB4NDgsIDB4YzEsIDB4MjUsIDB4ZmEs IDB4ZmYsCi0rICAgIDB4ODksIDB4MTIsIDB4NzcsIDB4MzUsIDB4ZGYsIDB4M2UsIDB4ZjQsIDB4 ODAsIDB4NWYsIDB4ZDksIDB4YjAsIDB4MDcsCi0rICAgIDB4MjIsIDB4NDEsIDB4ZGQsIDB4NDgs IDB4NzgsIDB4NmIsIDB4NzcsIDB4MmIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAg IDB4MzAsIDB4ZmYsIDB4NjMsIDB4NmYsIDB4YWMsIDB4ZDksIDB4ODQsIDB4MzksIDB4NmYsIDB4 ZTQsIDB4OTksIDB4Y2UsCi0rICAgIDB4OTEsIDB4N2QsIDB4N2UsIDB4YzgsIDB4NTgsIDB4ZjIs IDB4MTIsIDB4YzMsIDB4YjYsIDB4YWQsIDB4ZGEsIDB4MjIsCi0rICAgIDB4MDQsIDB4YTAsIDB4 ZDIsIDB4MjEsIDB4ZmUsIDB4ZjIsIDB4OTUsIDB4MWQKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHJbXSA9 IHsKLSsgICAgMHg2NCwgMHg1NCwgMHgxMywgMHhlYywgMHg0ZiwgMHg3NywgMHhkYSwgMHhiMiwg MHg5MiwgMHgyZSwgMHg1MiwgMHg4MCwKLSsgICAgMHgxMSwgMHgxMCwgMHhjMiwgMHhmOCwgMHhl NiwgMHhhNywgMHhjZCwgMHg0YiwgMHhmYywgMHgzMiwgMHgyZSwgMHg5ZSwKLSsgICAgMHhlYiwg MHhiYiwgMHhiMSwgMHhiZiwgMHgxNSwgMHg1YywgMHg3MywgMHgwOAotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9pbnRfcmV0dXJu ZWRiaXRzW10gPSB7Ci0rICAgIDB4ZWYsIDB4MWUsIDB4ZGMsIDB4MGEsIDB4YTQsIDB4MzYsIDB4 OTEsIDB4OWMsIDB4M2QsIDB4MjcsIDB4OTcsIDB4NTAsCi0rICAgIDB4OGQsIDB4MzYsIDB4Mjks IDB4OGQsIDB4Y2UsIDB4NmEsIDB4MGMsIDB4ZjcsIDB4MjEsIDB4YzAsIDB4OTEsIDB4YWUsCi0r ICAgIDB4MGMsIDB4OTYsIDB4NzIsIDB4YmQsIDB4NTIsIDB4ODEsIDB4NTgsIDB4ZmMsIDB4NmQs IDB4ZTUsIDB4ZjcsIDB4YTUsCi0rICAgIDB4ZmQsIDB4NWQsIDB4YTcsIDB4NTgsIDB4NjgsIDB4 YzgsIDB4OTksIDB4NTgsIDB4OGUsIDB4YzgsIDB4Y2UsIDB4OTUsCi0rICAgIDB4MDEsIDB4N2Qs IDB4ZmYsIDB4YTQsIDB4YzgsIDB4ZjcsIDB4NjMsIDB4ZmUsIDB4NWYsIDB4NjksIDB4ODMsIDB4 NTMsCi0rICAgIDB4ZTIsIDB4YzYsIDB4OGIsIDB4YzMKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0Mltd ID0gewotKyAgICAweGU2LCAweDliLCAweGM0LCAweDg4LCAweDM0LCAweGNhLCAweGVhLCAweDI5 LCAweDJmLCAweDk4LCAweDA1LCAweGE0LAotKyAgICAweGQzLCAweGMwLCAweDdiLCAweDExLCAw eGU4LCAweGJiLCAweDc1LCAweGYyLCAweGJkLCAweDI5LCAweGI3LCAweDQwLAotKyAgICAweDI1 LCAweDdmLCAweGMxLCAweGI3LCAweGIxLCAweGYxLCAweDI1LCAweDYxCi0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlp bnB1dHByMltdID0gewotKyAgICAweDIzLCAweDZkLCAweGZmLCAweGRlLCAweGZiLCAweGQxLCAw eGJhLCAweDMzLCAweDE4LCAweGU2LCAweGJlLCAweGI1LAotKyAgICAweDQ4LCAweDc3LCAweDZk LCAweDdmLCAweGE3LCAweGUxLCAweDRkLCAweDQ4LCAweDFlLCAweDNjLCAweGE3LCAweDM0LAot KyAgICAweDFhLCAweGM4LCAweDYwLCAweGRiLCAweDhmLCAweDk5LCAweDE1LCAweDk5Ci0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3By X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDcwLCAweDI3LCAweDMxLCAweGRiLCAweDkyLCAw eDcwLCAweDIxLCAweGZlLCAweDE2LCAweGI2LCAweGM4LCAweDUxLAotKyAgICAweDM0LCAweDg3 LCAweDY1LCAweGQwLCAweDRlLCAweGZkLCAweGZlLCAweDY4LCAweGVjLCAweGFjLCAweGRjLCAw eDkzLAotKyAgICAweDQxLCAweDM4LCAweDkyLCAweDkwLCAweGI0LCAweDk0LCAweGY5LCAweDBk LCAweGE0LCAweGY3LCAweDRlLCAweDgwLAotKyAgICAweDkyLCAweDY3LCAweDQ4LCAweDQwLCAw eGE3LCAweDA4LCAweGM3LCAweGJjLCAweDY2LCAweDAwLCAweGZkLCAweGY3LAotKyAgICAweDRj LCAweDhiLCAweDE3LCAweDZlLCAweGQxLCAweDhmLCAweDliLCAweGYzLCAweDZmLCAweGY2LCAw eDM0LCAweGRkLAotKyAgICAweDY3LCAweGY3LCAweDY4LCAweGRkCi0rfTsKLSsKLSsvKiBTSEEt NTEyIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGE1MTJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4YjYsIDB4MGIsIDB4YjcsIDB4YmMs IDB4ODQsIDB4NTYsIDB4ZjYsIDB4MTIsIDB4YWYsIDB4NDUsIDB4NjcsIDB4MTcsCi0rICAgIDB4 N2MsIDB4ZDEsIDB4YjIsIDB4NzgsIDB4MmIsIDB4YTAsIDB4ZjIsIDB4YmUsIDB4YjYsIDB4NmQs IDB4OGIsIDB4NTYsCi0rICAgIDB4YzYsIDB4YmMsIDB4NGQsIDB4ZTEsIDB4ZjcsIDB4YmUsIDB4 Y2UsIDB4YmQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGE1MTJfbm9uY2VbXSA9IHsKLSsgICAgMHg5ZCwgMHhlZCwgMHhjMCwgMHhlNSwgMHg1 YSwgMHg5OCwgMHg2YSwgMHhjYiwgMHg1MSwgMHg3ZCwgMHg3NiwgMHgzMSwKLSsgICAgMHg1YSwg MHg2NCwgMHhmMCwgMHhmNwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTUxMl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHhj MiwgMHg2ZCwgMHhhMywgMHhjMywgMHgwNiwgMHg3NCwgMHhlNSwgMHgwMSwgMHg1YywgMHgxMCwg MHgxNywgMHhjNywKLSsgICAgMHhhZiwgMHg4MywgMHg5ZCwgMHg1OSwgMHg4ZCwgMHgyZCwgMHgy OSwgMHgzOCwgMHhjNSwgMHg1OSwgMHg3MCwgMHg4YiwKLSsgICAgMHg0NiwgMHg0OCwgMHgyZCwg MHhjZiwgMHgzNiwgMHg3ZCwgMHg1OSwgMHhjMAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsg ICAgMHhlYywgMHg4YywgMHhkNCwgMHhmNywgMHg2MSwgMHg2ZSwgMHgwZCwgMHg5NSwgMHg3OSwg MHhiNywgMHgyOCwgMHhhZCwKLSsgICAgMHg1ZiwgMHg2OSwgMHg3NCwgMHg1ZiwgMHgyZCwgMHgz NiwgMHgwNiwgMHg4YSwgMHg2YiwgMHhhYywgMHg1NCwgMHg5NywKLSsgICAgMHhjNCwgMHhhMSwg MHgxMiwgMHg4NSwgMHgwYSwgMHhkZiwgMHg0YiwgMHgzNAotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9pbnRfcmV0dXJuZWRiaXRzW10g PSB7Ci0rICAgIDB4ODQsIDB4MmYsIDB4MWYsIDB4NjgsIDB4NmEsIDB4YTMsIDB4YWQsIDB4MWUs IDB4ZmIsIDB4ZjQsIDB4MTUsIDB4YmQsCi0rICAgIDB4ZGUsIDB4MzgsIDB4ZDQsIDB4MzAsIDB4 ODAsIDB4NTEsIDB4ZTksIDB4ZDMsIDB4YzcsIDB4MjAsIDB4ODgsIDB4ZTksCi0rICAgIDB4ZjUs IDB4Y2MsIDB4ZGYsIDB4NTcsIDB4NWMsIDB4NDcsIDB4MmYsIDB4NTcsIDB4M2MsIDB4NWYsIDB4 MTMsIDB4NTYsCi0rICAgIDB4Y2MsIDB4YzUsIDB4NGYsIDB4ODQsIDB4ZjgsIDB4MTAsIDB4NDEs IDB4ZDUsIDB4N2UsIDB4NTgsIDB4NmUsIDB4MTksCi0rICAgIDB4MTksIDB4OWUsIDB4YWYsIDB4 YzIsIDB4MjIsIDB4NTgsIDB4NDEsIDB4NTAsIDB4NzksIDB4YzIsIDB4ZDgsIDB4MDQsCi0rICAg IDB4MjgsIDB4ZDQsIDB4MzksIDB4OWEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfZW50cm9weWlucHV0cmVzZWVkW10gPSB7Ci0rICAg IDB4ZmEsIDB4N2YsIDB4NDYsIDB4NTEsIDB4ODMsIDB4NjIsIDB4OTgsIDB4MTYsIDB4OWEsIDB4 MTksIDB4YTIsIDB4NDksCi0rICAgIDB4YTksIDB4ZTYsIDB4NGEsIDB4ZDgsIDB4ODUsIDB4ZTcs IDB4ZDQsIDB4M2IsIDB4MmMsIDB4ODIsIDB4YzUsIDB4ODIsCi0rICAgIDB4YmYsIDB4MTEsIDB4 ZjksIDB4OWUsIDB4YmMsIDB4ZDAsIDB4MDEsIDB4ZWUKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVk W10gPSB7Ci0rICAgIDB4YjksIDB4MTIsIDB4ZTAsIDB4NGYsIDB4ZjcsIDB4YTcsIDB4YzQsIDB4 ZDgsIDB4ZDAsIDB4OGUsIDB4OTksIDB4MjksCi0rICAgIDB4N2MsIDB4OWEsIDB4ZTksIDB4Y2Ys IDB4YzQsIDB4NmMsIDB4ZjgsIDB4YzMsIDB4YTcsIDB4NDEsIDB4ODMsIDB4ZDYsCi0rICAgIDB4 MmUsIDB4ZmEsIDB4YjgsIDB4NWUsIDB4OGUsIDB4NmIsIDB4NzgsIDB4MjAKLSt9OwotKwotK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25h bGlucHV0MltdID0gewotKyAgICAweGQ3LCAweDA3LCAweDUyLCAweGI5LCAweDgzLCAweDJjLCAw eDAzLCAweDcxLCAweGVlLCAweGM5LCAweGMwLCAweDg1LAotKyAgICAweGUxLCAweDU3LCAweGIy LCAweGNkLCAweDNhLCAweGYwLCAweGM5LCAweDM0LCAweDI0LCAweDQxLCAweDFjLCAweDQyLAot KyAgICAweDk5LCAweGIyLCAweDg0LCAweGU5LCAweDE3LCAweGQyLCAweDc2LCAweDkyCi0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3Jl dHVybmVkYml0c1tdID0gewotKyAgICAweDM2LCAweDE3LCAweDVkLCAweDk4LCAweDJiLCAweDY1 LCAweDI1LCAweDhlLCAweGM4LCAweDI5LCAweGRmLCAweDI3LAotKyAgICAweDA1LCAweDM2LCAw eDI2LCAweDEyLCAweDhhLCAweDY4LCAweDc0LCAweDI3LCAweDM3LCAweGQ0LCAweDdmLCAweDMy LAotKyAgICAweGIxLCAweDEyLCAweGQ2LCAweDg1LCAweDgzLCAweGViLCAweDJlLCAweGEwLCAw eGVkLCAweDRiLCAweGI1LCAweDdiLAotKyAgICAweDZmLCAweDM5LCAweDNjLCAweDcxLCAweDc3 LCAweDAyLCAweDEyLCAweGNjLCAweDJjLCAweDNhLCAweDhlLCAweDYzLAotKyAgICAweGRmLCAw eDRhLCAweGJkLCAweDZmLCAweDZlLCAweDJlLCAweGVkLCAweDBhLCAweDg1LCAweGE1LCAweDJm LCAweGEyLAotKyAgICAweDY4LCAweGRlLCAweDQyLCAweGI1Ci0rfTsKLSsKLSsvKiBITUFDIFNI QS0xIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTFfcHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4MjYsIDB4NWYsIDB4MzYsIDB4 MTQsIDB4ZmYsIDB4M2QsIDB4ODMsIDB4ZmEsIDB4NzMsIDB4NWUsIDB4NzUsIDB4ZGMsCi0rICAg IDB4MmMsIDB4MTgsIDB4MTcsIDB4MWIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfbm9uY2VbXSA9IHsKLSsgICAgMHhjOCwg MHhlMywgMHg1NywgMHhhNSwgMHg3YiwgMHg3NCwgMHg4NiwgMHg2ZQotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHg2ZSwgMHhkYiwgMHgwZCwgMHhmZSwg MHg3ZCwgMHhhYywgMHg3OSwgMHhkMCwgMHhhNSwgMHgzYSwgMHg0OCwgMHg4NSwKLSsgICAgMHg4 MCwgMHhlMiwgMHg3ZiwgMHgyYQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAg MHgzMSwgMHhjZCwgMHg1ZSwgMHg0MywgMHhkYywgMHhmYiwgMHg3YSwgMHg3OSwgMHhjYSwgMHg4 OCwgMHhkZSwgMHgxZiwKLSsgICAgMHhkNywgMHhiYiwgMHg0MiwgMHgwOQotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRy b3B5aW5wdXRwcltdID0gewotKyAgICAweDdjLCAweDIzLCAweDk1LCAweDM4LCAweDAwLCAweDk1 LCAweGMxLCAweDc4LCAweDFmLCAweDhmLCAweGQ3LCAweDYzLAotKyAgICAweDIzLCAweDg3LCAw eDJhLCAweGVkCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGExX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhiYiwgMHgz NCwgMHhlNywgMHg5MywgMHhhMywgMHgwMiwgMHgyYywgMHg0YSwgMHhkMCwgMHg4OSwgMHhkYSwg MHg3ZiwKLSsgICAgMHhlZCwgMHhmNCwgMHg0YywgMHhkZSwgMHgxNywgMHhlYywgMHhlNSwgMHg2 YwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4NDksIDB4YmMsIDB4MmQs IDB4MmMsIDB4YjcsIDB4MzIsIDB4Y2IsIDB4MjAsIDB4ZGYsIDB4ZjUsIDB4NzcsIDB4NTgsCi0r ICAgIDB4YTAsIDB4NGIsIDB4OTMsIDB4NmUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0cHIyW10gPSB7 Ci0rICAgIDB4M2MsIDB4YWEsIDB4YjAsIDB4MjEsIDB4NDIsIDB4YjAsIDB4ZGQsIDB4MzQsIDB4 ZjAsIDB4MTYsIDB4N2YsIDB4MGMsCi0rICAgIDB4MGYsIDB4ZmYsIDB4MmUsIDB4YWYKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFf cHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4OGUsIDB4Y2IsIDB4YTMsIDB4NjQsIDB4YjIs IDB4YjgsIDB4MzMsIDB4NmMsIDB4NjQsIDB4M2IsIDB4NzgsIDB4MTYsCi0rICAgIDB4OTksIDB4 MzUsIDB4YzgsIDB4MzAsIDB4Y2IsIDB4M2UsIDB4YTAsIDB4ZDgKLSt9OwotKwotKy8qIEhNQUMg U0hBLTEgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMV9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHgzMiwgMHg5YSwgMHgyYSwg MHg4NywgMHg3YiwgMHg4OSwgMHg3YywgMHhmNiwgMHhjYiwgMHg5NSwgMHhkNSwgMHg0MCwKLSsg ICAgMHgxNywgMHhmZSwgMHg0NywgMHg3MAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9ub25jZVtdID0gewotKyAgICAweDE2LCAw eGQ4LCAweGUwLCAweGM3LCAweDUyLCAweGNmLCAweDRhLCAweDI1Ci0rfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0gewotKyAgICAweDM1LCAweDM1LCAweGE5LCAweGE1LCAweDQwLCAweGJl LCAweDliLCAweGQxLCAweDU2LCAweGRkLCAweDQ0LCAweDAwLAotKyAgICAweDcyLCAweGY3LCAw eGQzLCAweDVlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDFiLCAweDJjLCAw eDg0LCAweDJkLCAweDRhLCAweDg5LCAweDhmLCAweDY5LCAweDE5LCAweGYxLCAweGYzLCAweGRi LAotKyAgICAweGJiLCAweGUzLCAweGFhLCAweGVhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2ludF9yZXR1cm5lZGJpdHNbXSA9 IHsKLSsgICAgMHhjZiwgMHhmYSwgMHg3ZCwgMHg3MiwgMHgwZiwgMHhlNiwgMHhjNywgMHg5Niwg MHhhMCwgMHg2OSwgMHgzMSwgMHgxMSwKLSsgICAgMHg5YiwgMHgwYiwgMHgxYSwgMHgyMCwgMHgx ZiwgMHgzZiwgMHhhYSwgMHhkMQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAg MHg5MCwgMHg3NSwgMHgxNSwgMHgwNCwgMHg5NSwgMHhmMSwgMHhiYSwgMHg4MSwgMHgwYywgMHgz NywgMHg5NCwgMHg2ZiwKLSsgICAgMHg4NiwgMHg1MiwgMHg2ZCwgMHg5YwotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlv bmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg1YiwgMHg0MCwgMHhiYSwgMHg1ZiwgMHgxNywg MHg3MCwgMHhmMCwgMHg0YiwgMHhkZiwgMHhjOSwgMHg5NywgMHg5MiwKLSsgICAgMHg3OSwgMHhj NSwgMHg4MiwgMHgyOAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4OTcsIDB4 YzgsIDB4ODAsIDB4OTAsIDB4YjMsIDB4YWEsIDB4NmUsIDB4NjAsIDB4ZWEsIDB4ODMsIDB4N2Es IDB4ZTMsCi0rICAgIDB4OGEsIDB4Y2EsIDB4YTQsIDB4N2YKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcmV0dXJuZWRiaXRzW10g PSB7Ci0rICAgIDB4OTAsIDB4YmQsIDB4MDUsIDB4NTYsIDB4NmQsIDB4YjUsIDB4MjIsIDB4ZDUs IDB4YjksIDB4NWEsIDB4MjksIDB4MmQsCi0rICAgIDB4ZTksIDB4MGIsIDB4ZTEsIDB4YWMsIDB4 ZGUsIDB4MjcsIDB4MGIsIDB4YjAKLSt9OwotKwotKy8qIEhNQUMgU0hBLTIyNCBQUiAgKi8KLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJf ZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4MTcsIDB4MzIsIDB4MmIsIDB4MmUsIDB4NmYsIDB4 MWIsIDB4OWMsIDB4NmQsIDB4MzEsIDB4ZTAsIDB4MzQsIDB4MDcsCi0rICAgIDB4Y2YsIDB4ZWQs IDB4ZjYsIDB4YjYsIDB4NWEsIDB4NzYsIDB4NGMsIDB4YmMsIDB4NjIsIDB4ODUsIDB4MDEsIDB4 OTAKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTIyNF9wcl9ub25jZVtdID0gewotKyAgICAweDM4LCAweGJmLCAweDVmLCAweDIwLCAw eGIzLCAweDY4LCAweDJmLCAweDQzLCAweDYxLCAweDA1LCAweDhmLCAweDIzCi0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEy MjRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4YzAsIDB4YzksIDB4NDUs IDB4YWMsIDB4OGQsIDB4MjcsIDB4NzcsIDB4MDgsIDB4MGIsIDB4MTcsIDB4NmQsIDB4ZWQsCi0r ICAgIDB4YzEsIDB4N2QsIDB4ZDUsIDB4MDcsIDB4OWQsIDB4NmUsIDB4ZjgsIDB4MjMsIDB4MmEs IDB4MjIsIDB4MTMsIDB4YmQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAg MHhhNCwgMHgzYywgMHhlNywgMHgzYiwgMHhlYSwgMHgxOSwgMHg0NSwgMHgzMiwgMHhjMiwgMHg4 MywgMHg2ZCwgMHgyMSwKLSsgICAgMHg4YSwgMHhjMCwgMHhlZSwgMHg2NywgMHg0NSwgMHhkZSwg MHgxMywgMHg3ZCwgMHg5ZCwgMHg2MSwgMHgwMCwgMHgzYgotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1 dHByW10gPSB7Ci0rICAgIDB4MTUsIDB4MDUsIDB4NzQsIDB4NGEsIDB4N2YsIDB4OGQsIDB4NWMs IDB4NjAsIDB4MTYsIDB4ZTUsIDB4N2IsIDB4YWQsCi0rICAgIDB4ZjUsIDB4NDEsIDB4OGYsIDB4 NTUsIDB4NjAsIDB4YzQsIDB4MDksIDB4ZWUsIDB4MWUsIDB4MTEsIDB4ODEsIDB4YWIKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIy NF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4NmYsIDB4ZjUsIDB4OWEsIDB4ZTIs IDB4NTQsIDB4NTMsIDB4MzAsIDB4M2QsIDB4NWEsIDB4MjcsIDB4MjksIDB4MzgsCi0rICAgIDB4 MjcsIDB4ZjIsIDB4MGQsIDB4MDUsIDB4ZTksIDB4MjYsIDB4Y2IsIDB4MTYsIDB4YzMsIDB4NTEs IDB4NWYsIDB4MTMsCi0rICAgIDB4NDEsIDB4ZmUsIDB4OTksIDB4ZjIKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9hZGRp dGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4NzMsIDB4ODEsIDB4ODgsIDB4ODQsIDB4OGYsIDB4 ZWQsIDB4NmYsIDB4MTAsIDB4OWYsIDB4OTMsIDB4YmYsIDB4MTcsCi0rICAgIDB4MzUsIDB4N2Ms IDB4ZWYsIDB4ZDUsIDB4OGQsIDB4MjYsIDB4YTYsIDB4N2EsIDB4ZTgsIDB4MDksIDB4MzYsIDB4 NGYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHhlNiwgMHhjZiwgMHhj ZiwgMHg3ZSwgMHgxMiwgMHhlNSwgMHg0MywgMHhkMiwgMHgzOCwgMHhkOCwgMHgyNCwgMHg2ZiwK LSsgICAgMHg1YSwgMHgzNywgMHg2OCwgMHhiZiwgMHg0ZiwgMHhhMCwgMHhmZiwgMHhkNSwgMHg2 MSwgMHg4YSwgMHg5MywgMHhlMAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX3JldHVybmVkYml0c1tdID0gewotKyAgICAw eGFmLCAweGY5LCAweGQ4LCAweDE5LCAweDkxLCAweDMwLCAweDgyLCAweDZmLCAweGE5LCAweDFl LCAweDlkLCAweGQ3LAotKyAgICAweGYzLCAweDUwLCAweGUwLCAweGM3LCAweGQ1LCAweDY0LCAw eDk2LCAweDdkLCAweDRjLCAweDRkLCAweDc4LCAweDAzLAotKyAgICAweDZkLCAweGQ4LCAweDll LCAweDcyCi0rfTsKLSsKLSsvKiBITUFDIFNIQS0yMjQgTm8gUFIgICovCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1dFtd ID0gewotKyAgICAweDExLCAweDgyLCAweGZkLCAweGQ5LCAweDQyLCAweGY0LCAweGZhLCAweGM4 LCAweGYyLCAweDQxLCAweGU2LCAweDU0LAotKyAgICAweDAxLCAweGFlLCAweDIyLCAweDZlLCAw eGM2LCAweGFmLCAweGFmLCAweGQwLCAweGE2LCAweGIyLCAweGUyLCAweDZkCi0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfbm9u Y2VbXSA9IHsKLSsgICAgMHhhOSwgMHg0OCwgMHhkNywgMHg5MiwgMHgzOSwgMHg3ZSwgMHgyYSwg MHhkYywgMHgzMCwgMHgxZiwgMHgwZSwgMHgyYgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0gewotKyAgICAweDExLCAweGQ1LCAweGY0LCAweGJkLCAweDY3LCAweDhjLCAw eDMxLCAweGNmLCAweGEzLCAweDNmLCAweDFlLCAweDZiLAotKyAgICAweGE4LCAweDA3LCAweDAy LCAweDBiLCAweGM4LCAweDJlLCAweDZjLCAweDY0LCAweDQxLCAweDViLCAweGM4LCAweDM3Ci0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyMjRfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4NjgsIDB4MTgsIDB4YzIsIDB4MDYs IDB4ZWIsIDB4M2UsIDB4MDQsIDB4OTUsIDB4NDQsIDB4NWUsIDB4ZmIsIDB4ZTYsCi0rICAgIDB4 NDEsIDB4YzEsIDB4NWMsIDB4Y2MsIDB4NDAsIDB4MmYsIDB4YjcsIDB4ZDIsIDB4MGYsIDB4ZjMs IDB4NmIsIDB4ZTcKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTIyNF9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4N2YsIDB4 NDUsIDB4YzcsIDB4NWQsIDB4MzIsIDB4ZTYsIDB4MTcsIDB4NjAsIDB4YmEsIDB4ZGMsIDB4Yjgs IDB4NDIsCi0rICAgIDB4MWIsIDB4OWMsIDB4ZjEsIDB4ZmEsIDB4M2IsIDB4NGQsIDB4MjksIDB4 NTQsIDB4YzYsIDB4OTAsIDB4ZmYsIDB4NWMsCi0rICAgIDB4Y2QsIDB4ZDYsIDB4YTksIDB4Y2MK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTIyNF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHhjNCwgMHg4ZSwgMHgzNywg MHg5NSwgMHg2OSwgMHg1MywgMHgyOCwgMHhkNywgMHgzNywgMHhiYiwgMHg3MCwgMHg5NSwKLSsg ICAgMHgxYywgMHgwNywgMHgxZCwgMHhkOSwgMHhiNywgMHhlNiwgMHgxYiwgMHhiYiwgMHhmZSwg MHg0MSwgMHhlYiwgMHhjOQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0g ewotKyAgICAweDUzLCAweDE3LCAweGExLCAweDZhLCAweGZhLCAweDc3LCAweDQ3LCAweGIwLCAw eDk1LCAweDU2LCAweDlhLCAweDIwLAotKyAgICAweDU3LCAweGRlLCAweDVjLCAweDg5LCAweDlm LCAweDdmLCAweGUyLCAweGRlLCAweDE3LCAweDNhLCAweDUwLCAweDIzCi0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRp b25hbGlucHV0MltdID0gewotKyAgICAweDNhLCAweDMyLCAweGY5LCAweDg1LCAweDBjLCAweGMx LCAweGVkLCAweDc2LCAweDJkLCAweGRmLCAweDQwLCAweGMzLAotKyAgICAweDA2LCAweDIyLCAw eDY2LCAweGQ0LCAweDlhLCAweDlhLCAweGZmLCAweDVhLCAweDdlLCAweDdhLCAweGYzLCAweDk2 Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyMjRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4NDMsIDB4YjQsIDB4NTcsIDB4NWMs IDB4MzgsIDB4MjUsIDB4OWQsIDB4YWUsIDB4ZWMsIDB4OTYsIDB4ZDEsIDB4ODUsCi0rICAgIDB4 M2EsIDB4ODQsIDB4OGQsIDB4ZmUsIDB4NjgsIDB4ZDUsIDB4MGUsIDB4NWMsIDB4OGYsIDB4NjUs IDB4YTUsIDB4NGUsCi0rICAgIDB4NDUsIDB4ODQsIDB4YTgsIDB4OTQKLSt9OwotKwotKy8qIEhN QUMgU0hBLTI1NiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4NGQsIDB4YjAs IDB4NDMsIDB4ZDgsIDB4MzQsIDB4NGIsIDB4MTAsIDB4NzAsIDB4YjEsIDB4OGIsIDB4ZWQsIDB4 ZWEsCi0rICAgIDB4MDcsIDB4OTIsIDB4OWYsIDB4NmMsIDB4NzksIDB4MzEsIDB4YWYsIDB4ODEs IDB4MjksIDB4ZWIsIDB4NmUsIDB4Y2EsCi0rICAgIDB4MzIsIDB4NDgsIDB4MjgsIDB4ZTcsIDB4 MDIsIDB4NWQsIDB4YTYsIDB4YTYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9ub25jZVtdID0gewotKyAgICAweDNhLCAw eGFlLCAweDE1LCAweGE5LCAweDk5LCAweGRjLCAweGU0LCAweDY3LCAweDM0LCAweDNiLCAweDcw LCAweDE1LAotKyAgICAweGFhLCAweGQzLCAweDMwLCAweDlhCi0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfcGVy c29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4MTMsIDB4MWQsIDB4MjQsIDB4MDQsIDB4 YjAsIDB4MTgsIDB4ODEsIDB4MTUsIDB4MjEsIDB4NTEsIDB4MmEsIDB4MjQsCi0rICAgIDB4NTIs IDB4NjEsIDB4YmUsIDB4NjQsIDB4ODIsIDB4NmIsIDB4NTUsIDB4MmYsIDB4ZTIsIDB4ZjEsIDB4 NDAsIDB4N2QsCi0rICAgIDB4NzEsIDB4ZDgsIDB4MDEsIDB4ODYsIDB4MTUsIDB4YjcsIDB4OGIs IDB4YjUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHg4ZiwgMHhhNiwg MHg1NCwgMHg1ZiwgMHhiMSwgMHhkMCwgMHhkOCwgMHhjMywgMHhlNywgMHgwYywgMHgxNSwgMHhh OSwKLSsgICAgMHgyMywgMHg2ZSwgMHhmZSwgMHhmYiwgMHg5MywgMHhmNywgMHgzYSwgMHhiZCwg MHg1OSwgMHgwMSwgMHhmYSwgMHgxOCwKLSsgICAgMHg4ZSwgMHhlOSwgMHgxYSwgMHhhOSwgMHg3 OCwgMHhmYywgMHg3OSwgMHgwYgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0rICAg IDB4Y2YsIDB4MjQsIDB4YjksIDB4ZWIsIDB4YjMsIDB4ZDQsIDB4Y2QsIDB4MTcsIDB4MzcsIDB4 MzgsIDB4NzUsIDB4NzksCi0rICAgIDB4MTUsIDB4Y2IsIDB4MmQsIDB4NzUsIDB4NTEsIDB4ZjEs IDB4Y2MsIDB4YWEsIDB4MzIsIDB4YTQsIDB4YTcsIDB4MzYsCi0rICAgIDB4N2MsIDB4NWMsIDB4 ZTQsIDB4NDcsIDB4ZjEsIDB4M2UsIDB4MWQsIDB4ZTUKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9pbnRfcmV0dXJuZWRi aXRzW10gPSB7Ci0rICAgIDB4NTIsIDB4NDIsIDB4ZmEsIDB4ZWIsIDB4ODUsIDB4ZTAsIDB4MzAs IDB4MjIsIDB4NzksIDB4MDAsIDB4MTYsIDB4YjIsCi0rICAgIDB4ODgsIDB4MmYsIDB4MTQsIDB4 NmEsIDB4YjcsIDB4ZmMsIDB4YjcsIDB4NTMsIDB4ZGMsIDB4NGEsIDB4MTIsIDB4ZWYsCi0rICAg IDB4NTQsIDB4ZDYsIDB4MzMsIDB4ZTksIDB4MjAsIDB4ZDYsIDB4ZmQsIDB4NTYKLSt9OwotKwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9w cl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4ZjQsIDB4ZjYsIDB4NDksIDB4YTEsIDB4 MmQsIDB4NjQsIDB4MmIsIDB4MzAsIDB4NTgsIDB4ZjgsIDB4YmQsIDB4YjgsCi0rICAgIDB4NzUs IDB4ZWIsIDB4YmIsIDB4NWUsIDB4MWMsIDB4OWIsIDB4ODEsIDB4NmEsIDB4ZGEsIDB4MTQsIDB4 ODYsIDB4NmUsCi0rICAgIDB4ZDAsIDB4ZGEsIDB4MTgsIDB4YjcsIDB4ODgsIDB4ZmIsIDB4NTks IDB4ZjMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHgyMSwgMHhjZCwg MHg2ZSwgMHg0NiwgMHhhZCwgMHg5OSwgMHgwNywgMHgxNywgMHhiNCwgMHgzZCwgMHg3NiwgMHgw YSwKLSsgICAgMHhmZiwgMHg1YiwgMHg1MiwgMHg1MCwgMHg3OCwgMHhkZiwgMHgxZiwgMHgyNCwg MHgwNiwgMHgwZCwgMHgzZiwgMHg3NCwKLSsgICAgMHhhOSwgMHhjOSwgMHgzNywgMHhjZiwgMHhk OCwgMHgyNiwgMHgyNSwgMHg5MQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX3JldHVybmVkYml0c1tdID0gewotKyAgICAw eGE3LCAweGFmLCAweDJmLCAweDI5LCAweGUwLCAweDNhLCAweDcyLCAweDk1LCAweDk2LCAweDFj LCAweGE5LCAweGYwLAotKyAgICAweDRhLCAweDE3LCAweDRkLCAweDY2LCAweDA2LCAweDEwLCAw eGJmLCAweDM5LCAweDg5LCAweDg4LCAweGI4LCAweDkxLAotKyAgICAweDM3LCAweDE4LCAweDk5 LCAweGNmLCAweDhjLCAweDUzLCAweDNiLCAweDdlCi0rfTsKLSsKLSsvKiBITUFDIFNIQS0yNTYg Tm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMjU2X2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDk2LCAweGI3LCAweDUzLCAweDIy LCAweDFlLCAweDUyLCAweDJhLCAweDk2LCAweGIxLCAweDE1LCAweDNjLCAweDM1LAotKyAgICAw eDVhLCAweDhiLCAweGQzLCAweDRhLCAweGE2LCAweDZjLCAweDgzLCAweDBhLCAweDdkLCAweGEz LCAweDIzLCAweDNkLAotKyAgICAweDQzLCAweGExLCAweDA3LCAweDJjLCAweDJkLCAweGUzLCAw eDgxLCAweGNjCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEyNTZfbm9uY2VbXSA9IHsKLSsgICAgMHhmMSwgMHhhYywgMHg5NywgMHhj YiwgMHg1ZSwgMHgwNiwgMHg0OCwgMHhkMiwgMHg5NCwgMHhiZSwgMHgxNSwgMHgyZSwKLSsgICAg MHhjNywgMHhmYywgMHhjMiwgMHgwMQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3BlcnNvbmFsaXphdGlvbnN0cmlu Z1tdID0gewotKyAgICAweDk4LCAweGM1LCAweDFlLCAweDM1LCAweDVlLCAweDg5LCAweDBkLCAw eGNlLCAweDY0LCAweDZkLCAweDE4LCAweGE3LAotKyAgICAweDVhLCAweGM2LCAweGYzLCAweGU3 LCAweGQ2LCAweDllLCAweGMwLCAweGVhLCAweGI3LCAweDNhLCAweDhkLCAweDY1LAotKyAgICAw eGI4LCAweGViLCAweDEwLCAweGQ3LCAweDU3LCAweDE4LCAweGEwLCAweDMyCi0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRk aXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4MWIsIDB4MTAsIDB4YWYsIDB4YWMsIDB4ZDAsIDB4 NjUsIDB4OTUsIDB4YWQsIDB4MDQsIDB4YWQsIDB4MDMsIDB4MWMsCi0rICAgIDB4ZTAsIDB4NDAs IDB4ZDYsIDB4M2UsIDB4MWMsIDB4NDYsIDB4NTMsIDB4MzksIDB4N2MsIDB4ZTIsIDB4YmMsIDB4 ZGEsCi0rICAgIDB4OGMsIDB4YTIsIDB4MzMsIDB4YTcsIDB4OWEsIDB4MjYsIDB4ZDMsIDB4MjcK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTI1Nl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4YmEsIDB4NjEsIDB4MGUsIDB4 NTUsIDB4ZmUsIDB4MTEsIDB4OGEsIDB4OWUsIDB4MGYsIDB4ODAsIDB4ZGYsIDB4MWQsCi0rICAg IDB4MDMsIDB4MGEsIDB4ZmUsIDB4MTUsIDB4OTQsIDB4MjgsIDB4NGIsIDB4YmEsIDB4ZjQsIDB4 OWYsIDB4NTEsIDB4MjUsCi0rICAgIDB4ODgsIDB4ZTUsIDB4NGUsIDB4ZmIsIDB4YWYsIDB4Y2Us IDB4NjksIDB4OTAKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTI1Nl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg2Miwg MHg3ZiwgMHgxZSwgMHg2YiwgMHhlOCwgMHg4ZSwgMHhlMSwgMHgzNSwgMHg3ZCwgMHg5YiwgMHg0 ZiwgMHhjNywKLSsgICAgMHhlYywgMHhjOCwgMHhhYywgMHhlZiwgMHg2YiwgMHgxMywgMHg5ZSwg MHgwNSwgMHg1NiwgMHhjMSwgMHgwOCwgMHhmOSwKLSsgICAgMHgyZiwgMHgwZiwgMHgyNywgMHg5 YywgMHhkNCwgMHgxNSwgMHhlZCwgMHgyZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dHJl c2VlZFtdID0gewotKyAgICAweGM3LCAweDc2LCAweDZlLCAweGE5LCAweGQyLCAweGIyLCAweDc2 LCAweDQwLCAweDgyLCAweDI1LCAweDJjLCAweGIzLAotKyAgICAweDZmLCAweGFjLCAweGU5LCAw eDc0LCAweGVmLCAweDhmLCAweDNjLCAweDhlLCAweGNkLCAweGYxLCAweGJmLCAweGIzLAotKyAg ICAweDQ5LCAweDc3LCAweDM0LCAweDg4LCAweDUyLCAweDM2LCAweGU2LCAweDJlCi0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZf YWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDhkLCAweGI4LCAweDBjLCAweGQxLCAweGJm LCAweDcwLCAweGY2LCAweDE5LCAweGMzLCAweDQxLCAweDgwLCAweDlmLAotKyAgICAweGUxLCAw eGE1LCAweGE0LCAweDFmLCAweDJjLCAweDI2LCAweGIxLCAweGU1LCAweGQ4LCAweGViLCAweGJl LCAweGY4LAotKyAgICAweGRmLCAweDg4LCAweDZhLCAweDg5LCAweGQ2LCAweDA1LCAweGQ4LCAw eDlkCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEyNTZfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4NDMsIDB4MTIsIDB4MmEsIDB4 MmMsIDB4NDAsIDB4NTMsIDB4MmUsIDB4N2MsIDB4NjYsIDB4MzQsIDB4YWMsIDB4YzMsCi0rICAg IDB4NDMsIDB4ZTMsIDB4ZTAsIDB4NmEsIDB4ZmMsIDB4ZmEsIDB4ZWEsIDB4ODcsIDB4MjEsIDB4 MWYsIDB4ZTIsIDB4MjYsCi0rICAgIDB4YzQsIDB4ZjksIDB4MDksIDB4OWEsIDB4MGQsIDB4NmUs IDB4N2YsIDB4ZTAKLSt9OwotKwotKy8qIEhNQUMgU0hBLTM4NCBQUiAgKi8KLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlu cHV0W10gPSB7Ci0rICAgIDB4NjksIDB4ODEsIDB4OTgsIDB4ODgsIDB4NDQsIDB4ZjUsIDB4ZDYs IDB4MmUsIDB4MDAsIDB4MDgsIDB4M2IsIDB4YzUsCi0rICAgIDB4ZmIsIDB4ZDcsIDB4OGUsIDB4 NmYsIDB4MjMsIDB4ZjgsIDB4NmQsIDB4MDksIDB4ZDYsIDB4ODUsIDB4NDksIDB4ZDEsCi0rICAg IDB4ZjgsIDB4NmQsIDB4YTQsIDB4NTgsIDB4NTQsIDB4ZmQsIDB4ODgsIDB4YTkKLSt9OwotKwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9w cl9ub25jZVtdID0gewotKyAgICAweDZlLCAweDM4LCAweDgxLCAweGNhLCAweGI3LCAweGU4LCAw eDZlLCAweDY2LCAweDQ5LCAweDhhLCAweGIyLCAweDU5LAotKyAgICAweGVlLCAweDE2LCAweGM5 LCAweGRlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEzODRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAg IDB4ZmUsIDB4NGMsIDB4ZDksIDB4ZjQsIDB4NzgsIDB4M2IsIDB4MDgsIDB4NDEsIDB4OGQsIDB4 OGYsIDB4NTUsIDB4YzQsCi0rICAgIDB4NDMsIDB4NTYsIDB4YjYsIDB4MTIsIDB4MzYsIDB4NmIs IDB4MzAsIDB4YjcsIDB4NWUsIDB4ZTEsIDB4YjksIDB4NDcsCi0rICAgIDB4MDQsIDB4YjEsIDB4 NGUsIDB4YTksIDB4MDAsIDB4YTEsIDB4NTIsIDB4YTEKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9hZGRpdGlvbmFsaW5w dXRbXSA9IHsKLSsgICAgMHg4OSwgMHhlOSwgMHhjYywgMHg4ZiwgMHgyNywgMHgzYywgMHgyNiwg MHhkMSwgMHg5NSwgMHhjOCwgMHg3ZCwgMHgwZiwKLSsgICAgMHg1YiwgMHgxYSwgMHhmMCwgMHg3 OCwgMHgzOSwgMHg1NiwgMHg2ZiwgMHhhNCwgMHgyMywgMHhlNywgMHhkMSwgMHhkYSwKLSsgICAg MHg3YywgMHg2NiwgMHgzMywgMHhhMCwgMHg5MCwgMHhjOSwgMHg5MiwgMHg4OAotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3By X2VudHJvcHlpbnB1dHByW10gPSB7Ci0rICAgIDB4YmUsIDB4M2QsIDB4N2MsIDB4MGQsIDB4Y2Es IDB4ZGEsIDB4N2MsIDB4NDksIDB4YjgsIDB4MTIsIDB4MzYsIDB4YzAsCi0rICAgIDB4ZGIsIDB4 YWQsIDB4MzUsIDB4YTgsIDB4YzcsIDB4MGIsIDB4MmEsIDB4MmMsIDB4NjksIDB4NmQsIDB4MjUs IDB4NTYsCi0rICAgIDB4NjMsIDB4ODIsIDB4MTEsIDB4M2UsIDB4YTcsIDB4MzMsIDB4NzAsIDB4 NzIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTM4NF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ODIsIDB4M2QsIDB4 ZTYsIDB4NTQsIDB4ODAsIDB4NDIsIDB4ZjgsIDB4YmEsIDB4OTAsIDB4NGYsIDB4MDYsIDB4YTYs Ci0rICAgIDB4ZDIsIDB4N2YsIDB4YmYsIDB4NzksIDB4N2MsIDB4MTIsIDB4N2QsIDB4YTYsIDB4 YTIsIDB4NjYsIDB4ZTgsIDB4YTYsCi0rICAgIDB4YzAsIDB4ZDYsIDB4NGEsIDB4NTUsIDB4YmYs IDB4ZDgsIDB4MGEsIDB4YzUsIDB4ZjgsIDB4MDMsIDB4ODgsIDB4ZGQsCi0rICAgIDB4OGUsIDB4 ODcsIDB4ZDEsIDB4NWEsIDB4NDgsIDB4MjYsIDB4NzIsIDB4MmEsIDB4OGUsIDB4Y2YsIDB4ZWUs IDB4YmEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4OGYsIDB4ZmYs IDB4ZDksIDB4ODQsIDB4YmIsIDB4ODUsIDB4M2EsIDB4NjYsIDB4YTEsIDB4MjEsIDB4Y2UsIDB4 YjIsCi0rICAgIDB4M2EsIDB4M2EsIDB4MTcsIDB4MjIsIDB4MTksIDB4YWUsIDB4YzcsIDB4YjYs IDB4NjMsIDB4ODEsIDB4ZDUsIDB4ZmYsCi0rICAgIDB4MGQsIDB4YzgsIDB4ZTEsIDB4YWYsIDB4 NTcsIDB4ZDIsIDB4Y2IsIDB4NjAKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsg ICAgMHhkNywgMHhmYiwgMHhjOSwgMHhlOCwgMHhlMiwgMHhmMiwgMHhhYSwgMHg0YywgMHhiOCwg MHg1MSwgMHgyZiwgMHhlMSwKLSsgICAgMHgyMiwgMHhiYSwgMHhmMywgMHhkYSwgMHgwYSwgMHgx OSwgMHg3NiwgMHg3MSwgMHg1NywgMHhiMiwgMHgxZCwgMHg5NCwKLSsgICAgMHgwOSwgMHg2OSwg MHg2YywgMHhkMywgMHg5NywgMHg1MSwgMHg4MSwgMHg4NwotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX3JldHVybmVkYml0 c1tdID0gewotKyAgICAweGU2LCAweDE5LCAweDI4LCAweGE4LCAweDIxLCAweGNlLCAweDVlLCAw eGRiLCAweDI0LCAweDc5LCAweDhjLCAweDc2LAotKyAgICAweDVkLCAweDczLCAweGIyLCAweGRm LCAweGFjLCAweGVmLCAweDg1LCAweGE3LCAweDNiLCAweDE5LCAweDA5LCAweDhiLAotKyAgICAw eDdmLCAweDk4LCAweDI4LCAweGE5LCAweDkzLCAweGQ4LCAweDdhLCAweGFkLCAweDU1LCAweDhi LCAweDI0LCAweDlkLAotKyAgICAweGU2LCAweDk4LCAweGZlLCAweDQ3LCAweGQ1LCAweDQ4LCAw eGMxLCAweDIzLCAweGQ4LCAweDFkLCAweDYyLCAweDc1Ci0rfTsKLSsKLSsvKiBITUFDIFNIQS0z ODQgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMzg0X2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweGMzLCAweDU2LCAweDJiLCAw eDFkLCAweGMyLCAweGJiLCAweGE4LCAweGYwLCAweGFlLCAweDFiLCAweDBkLCAweGQzLAotKyAg ICAweDVhLCAweDZjLCAweGRhLCAweDU3LCAweDhlLCAweGE1LCAweDhhLCAweDBkLCAweDZjLCAw eDRiLCAweDE4LCAweGIxLAotKyAgICAweDA0LCAweDNlLCAweGI0LCAweDk5LCAweDM1LCAweGM0 LCAweGMwLCAweDVmCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEzODRfbm9uY2VbXSA9IHsKLSsgICAgMHhjNSwgMHg0OSwgMHgxZSwg MHg2NiwgMHgyNywgMHg5MiwgMHhiZSwgMHhlYywgMHhiNSwgMHgxZSwgMHg0YiwgMHhiMSwKLSsg ICAgMHgzOCwgMHhlMywgMHhlYiwgMHg2MgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0gewotKyAgICAweGJlLCAweGU3LCAweDZiLCAweDU3LCAweGRlLCAweDg4LCAweDEx LCAweDk2LCAweDliLCAweDZlLCAweGVhLCAweGU1LAotKyAgICAweDYzLCAweDgzLCAweDRjLCAw eGI2LCAweDhkLCAweDY2LCAweGFhLCAweDFmLCAweDhiLCAweDU0LCAweGU3LCAweDYyLAotKyAg ICAweDZkLCAweDVhLCAweGZjLCAweGJmLCAweDk3LCAweGJhLCAweGNkLCAweDc3Ci0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf YWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4ZTUsIDB4MjgsIDB4NWYsIDB4NDMsIDB4ZjUs IDB4ODMsIDB4NmUsIDB4MGEsIDB4ODMsIDB4NWMsIDB4ZTMsIDB4ODEsCi0rICAgIDB4MDMsIDB4 ZjIsIDB4ZjgsIDB4NzgsIDB4MDAsIDB4N2MsIDB4OTUsIDB4ODcsIDB4MTYsIDB4ZDYsIDB4NmMs IDB4NTgsCi0rICAgIDB4MzMsIDB4NmMsIDB4NTMsIDB4MzUsIDB4MGQsIDB4NjYsIDB4ZTMsIDB4 Y2UKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTM4NF9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ZTIsIDB4MWYsIDB4ZjMs IDB4ZGEsIDB4MGQsIDB4MTksIDB4OTksIDB4ODcsIDB4YzQsIDB4OTAsIDB4YTIsIDB4MzEsCi0r ICAgIDB4Y2EsIDB4MmEsIDB4ODksIDB4NTgsIDB4NDMsIDB4NDQsIDB4YjgsIDB4ZGUsIDB4Y2Ys IDB4YTQsIDB4YmUsIDB4M2IsCi0rICAgIDB4NTMsIDB4MjYsIDB4MjIsIDB4MzEsIDB4NzYsIDB4 NDEsIDB4MjIsIDB4YjUsIDB4YTgsIDB4NzAsIDB4MmYsIDB4NGIsCi0rICAgIDB4NjQsIDB4OTUs IDB4NGQsIDB4NDgsIDB4OTYsIDB4MzUsIDB4ZTYsIDB4YmQsIDB4M2MsIDB4MzQsIDB4ZGIsIDB4 MWIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTM4NF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg3NywgMHg2MSwgMHhi YSwgMHhiYywgMHhmMiwgMHhjMSwgMHhmMywgMHg0YiwgMHg4NiwgMHg2NSwgMHhmZCwgMHg0OCwK LSsgICAgMHgwZSwgMHgzYywgMHgwMiwgMHg1ZSwgMHhhMiwgMHg3YSwgMHg2YiwgMHg3YywgMHhl ZCwgMHgyMSwgMHg1ZSwgMHhmOSwKLSsgICAgMHhjZCwgMHhjZCwgMHg3NywgMHgwNywgMHgyYiwg MHhiZSwgMHhjNSwgMHg1YwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0g ewotKyAgICAweDE4LCAweDI0LCAweDVmLCAweGM2LCAweDg0LCAweGQxLCAweDY3LCAweGMzLCAw eDlhLCAweDExLCAweGE1LCAweDhjLAotKyAgICAweDA3LCAweDM5LCAweDIxLCAweDgzLCAweDRk LCAweDA0LCAweGM0LCAweDZhLCAweDI4LCAweDE5LCAweGNmLCAweDkyLAotKyAgICAweDIxLCAw eGQ5LCAweDllLCAweDQxLCAweDcyLCAweDZjLCAweDllLCAweDYzCi0rfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRkaXRpb25h bGlucHV0MltdID0gewotKyAgICAweDk2LCAweDY3LCAweDQxLCAweDI4LCAweDliLCAweGI3LCAw eDkyLCAweDhkLCAweDY0LCAweDNiLCAweGU0LCAweGNmLAotKyAgICAweDdlLCAweGFhLCAweDFl LCAweGIxLCAweDRiLCAweDFkLCAweDA5LCAweDU2LCAweDY3LCAweDljLCAweGM2LCAweDZkLAot KyAgICAweDNiLCAweGU4LCAweDkxLCAweDlkLCAweGUxLCAweDhhLCAweGI3LCAweDMyCi0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEz ODRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ZTMsIDB4NTksIDB4NjEsIDB4MzgsIDB4OTIs IDB4ZWMsIDB4ZTIsIDB4M2MsIDB4ZmYsIDB4YjcsIDB4ZGIsIDB4MTksCi0rICAgIDB4MGYsIDB4 NWIsIDB4OTMsIDB4NjgsIDB4MGQsIDB4YTQsIDB4OTQsIDB4NDAsIDB4NzIsIDB4MGIsIDB4ZTAs IDB4ZWQsCi0rICAgIDB4NGQsIDB4Y2QsIDB4NjgsIDB4YTAsIDB4MWUsIDB4ZmUsIDB4NjcsIDB4 YjIsIDB4ZmEsIDB4MjEsIDB4NTYsIDB4NzQsCi0rICAgIDB4YTQsIDB4YWQsIDB4Y2YsIDB4Yjcs IDB4NjAsIDB4NjYsIDB4MmUsIDB4NDAsIDB4ZGUsIDB4ODIsIDB4Y2EsIDB4ZmIKLSt9OwotKwot Ky8qIEhNQUMgU0hBLTUxMiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4YWEs IDB4OWUsIDB4NDUsIDB4NjcsIDB4MGUsIDB4MDAsIDB4MmEsIDB4NjcsIDB4OTgsIDB4ZDYsIDB4 ZGEsIDB4MGIsCi0rICAgIDB4MGYsIDB4MTcsIDB4N2UsIDB4YWMsIDB4ZmQsIDB4MjcsIDB4YzQs IDB4Y2EsIDB4ODQsIDB4ZGYsIDB4ZGUsIDB4YmEsCi0rICAgIDB4ODUsIDB4ZDksIDB4YmUsIDB4 OGYsIDB4ZjMsIDB4ZmYsIDB4OTEsIDB4NGQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9ub25jZVtdID0gewotKyAgICAw eDhjLCAweDQ5LCAweDJmLCAweDU4LCAweDFlLCAweDdhLCAweGRhLCAweDRiLCAweDdlLCAweDhh LCAweDMwLCAweDdiLAotKyAgICAweDg2LCAweGVhLCAweGFmLCAweGEyCi0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJf cHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4NzEsIDB4ZTEsIDB4YmIsIDB4 YWQsIDB4YTcsIDB4NGIsIDB4MmUsIDB4MzEsIDB4M2IsIDB4MGIsIDB4ZWMsIDB4MjQsCi0rICAg IDB4OTksIDB4MzgsIDB4YmMsIDB4YWEsIDB4MDUsIDB4NGMsIDB4NDYsIDB4NDQsIDB4ZmEsIDB4 YWQsIDB4OGUsIDB4MDIsCi0rICAgIDB4YzEsIDB4N2UsIDB4YWQsIDB4ZWMsIDB4NTQsIDB4YTYs IDB4ZDAsIDB4YWQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHgzZCwg MHg2ZSwgMHhhNiwgMHhhOCwgMHgyOSwgMHgyYSwgMHhiMiwgMHhmNSwgMHg5OCwgMHg0MiwgMHhl NCwgMHg5MiwKLSsgICAgMHg3OCwgMHgyMiwgMHg2NywgMHhmZCwgMHgxYiwgMHgxNSwgMHgxZSwg MHgyOSwgMHhhYSwgMHg3MSwgMHgzYywgMHgzYywKLSsgICAgMHhlNywgMHgwNSwgMHgyMCwgMHhh OSwgMHgyOSwgMHhjNiwgMHg3NSwgMHg3MQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByW10gPSB7 Ci0rICAgIDB4YWIsIDB4YjksIDB4MTYsIDB4ZDgsIDB4NTUsIDB4MzUsIDB4NTQsIDB4YjcsIDB4 OTcsIDB4M2YsIDB4OTQsIDB4YmMsCi0rICAgIDB4MmYsIDB4N2MsIDB4NzAsIDB4YzcsIDB4ZDAs IDB4ZWQsIDB4YjcsIDB4NGIsIDB4ZjcsIDB4ZjYsIDB4NmMsIDB4MDMsCi0rICAgIDB4MGMsIDB4 YjAsIDB4MDMsIDB4ZDgsIDB4YmIsIDB4NzEsIDB4ZDksIDB4MTAKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9pbnRfcmV0 dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4OGUsIDB4ZDMsIDB4ZmQsIDB4NTIsIDB4OWUsIDB4ODMs IDB4MDgsIDB4NDksIDB4MTgsIDB4NmUsIDB4MjMsIDB4NTYsCi0rICAgIDB4NWMsIDB4NDUsIDB4 OTMsIDB4MzQsIDB4MDUsIDB4ZTIsIDB4OTgsIDB4OGYsIDB4MGMsIDB4ZDQsIDB4MzIsIDB4MGMs Ci0rICAgIDB4ZmQsIDB4ZGEsIDB4NWYsIDB4OTIsIDB4M2EsIDB4OGMsIDB4ODEsIDB4YmQsIDB4 ZjYsIDB4NmMsIDB4NTUsIDB4ZmQsCi0rICAgIDB4YjgsIDB4MjAsIDB4Y2UsIDB4OGQsIDB4OTcs IDB4MjcsIDB4ZTgsIDB4ZTgsIDB4ZTAsIDB4YjMsIDB4ODUsIDB4NTAsCi0rICAgIDB4YTIsIDB4 YzIsIDB4YjIsIDB4OTUsIDB4MWQsIDB4NDgsIDB4ZDMsIDB4N2IsIDB4NGIsIDB4NzgsIDB4MTMs IDB4MzUsCi0rICAgIDB4MDUsIDB4MTcsIDB4YmUsIDB4MGQKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9hZGRpdGlvbmFs aW5wdXQyW10gPSB7Ci0rICAgIDB4YzMsIDB4ZmMsIDB4OTUsIDB4YWEsIDB4NjksIDB4MDYsIDB4 YWUsIDB4NTksIDB4NDEsIDB4Y2UsIDB4MjYsIDB4MDgsCi0rICAgIDB4MjksIDB4NmQsIDB4NDUs IDB4ZGEsIDB4ZTgsIDB4YjMsIDB4NmMsIDB4OTUsIDB4NjAsIDB4MGYsIDB4NzAsIDB4MmMsCi0r ICAgIDB4MTAsIDB4YmEsIDB4MzgsIDB4OGMsIDB4Y2YsIDB4MjksIDB4OTksIDB4YWEKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUx Ml9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHgzYiwgMHg5YSwgMHgyNSwgMHhjZSwg MHhkNywgMHhmOSwgMHg1YywgMHhkMSwgMHgzYSwgMHgzZSwgMHhhYSwgMHg3MSwKLSsgICAgMHgx NCwgMHgzZSwgMHgxOSwgMHhlOCwgMHhjZSwgMHhlNiwgMHhmZSwgMHg1MSwgMHg4NCwgMHhlOSwg MHgxYiwgMHhmZSwKLSsgICAgMHgzZiwgMHhhNywgMHhmMiwgMHhmZCwgMHg3NiwgMHg1ZiwgMHg2 YSwgMHhlNwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhNTEyX3ByX3JldHVybmVkYml0c1tdID0gewotKyAgICAweGI3LCAweDgyLCAw eGE5LCAweDU3LCAweDgxLCAweDY3LCAweDUzLCAweGI1LCAweGExLCAweGU5LCAweDNkLCAweDM1 LAotKyAgICAweGY5LCAweGU0LCAweDk3LCAweGJlLCAweGE2LCAweGNhLCAweGYxLCAweDAxLCAw eDEzLCAweDA5LCAweGU3LCAweDIxLAotKyAgICAweGMwLCAweGVkLCAweDkzLCAweDVkLCAweDRi LCAweGY0LCAweGViLCAweDhkLCAweDUzLCAweDI1LCAweDhhLCAweGM0LAotKyAgICAweGIxLCAw eDZmLCAweDZlLCAweDM3LCAweGNkLCAweDJlLCAweGFjLCAweDM5LCAweGIyLCAweGI2LCAweDk5 LCAweGEzLAotKyAgICAweDgyLCAweDAwLCAweGIwLCAweDIxLCAweGYwLCAweGM3LCAweDJmLCAw eDRjLCAweDczLCAweDkyLCAweGZkLCAweDAwLAotKyAgICAweGI2LCAweGFmLCAweGJjLCAweGQz Ci0rfTsKLSsKLSsvKiBITUFDIFNIQS01MTIgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2VudHJvcHlpbnB1dFtdID0gewot KyAgICAweDZlLCAweDg1LCAweGU2LCAweDI1LCAweDk2LCAweDI5LCAweGE3LCAweDUyLCAweDVi LCAweDYwLCAweGJhLCAweGFhLAotKyAgICAweGRlLCAweGRiLCAweDM2LCAweDBhLCAweDUxLCAw eDlhLCAweDE1LCAweGFlLCAweDZlLCAweDE4LCAweGQzLCAweGZlLAotKyAgICAweDM5LCAweGI5 LCAweDRhLCAweDk2LCAweGY4LCAweDc3LCAweGNiLCAweDk1Ci0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfbm9uY2VbXSA9IHsK LSsgICAgMHhlMCwgMHhhNiwgMHg1ZCwgMHgwOCwgMHhjMywgMHg3YywgMHhhZSwgMHgyNSwgMHgy ZSwgMHg4MCwgMHhkMSwgMHgzZSwKLSsgICAgMHhkOSwgMHhhZiwgMHg0MywgMHgzYwotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhNTEyX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDUzLCAweDk5LCAweDUy LCAweDVmLCAweDExLCAweGE5LCAweDY0LCAweDY2LCAweDIwLCAweDVlLCAweDFiLCAweDVmLAot KyAgICAweDQyLCAweGIzLCAweGY0LCAweGRhLCAweGVkLCAweGJiLCAweDYzLCAweGMxLCAweDIz LCAweGFmLCAweGQwLCAweDAxLAotKyAgICAweDkwLCAweDNiLCAweGQwLCAweDc4LCAweGU0LCAw eDBiLCAweGE3LCAweDIwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4ODUs IDB4OTAsIDB4ODAsIDB4ZDMsIDB4OTgsIDB4ZjEsIDB4NTMsIDB4NmQsIDB4NjgsIDB4MTUsIDB4 OGYsIDB4ZTUsCi0rICAgIDB4NjAsIDB4M2YsIDB4MTcsIDB4MjksIDB4NTUsIDB4OGQsIDB4MzMs IDB4YjEsIDB4NDUsIDB4NjQsIDB4NjQsIDB4OGQsCi0rICAgIDB4NTAsIDB4MjEsIDB4ODksIDB4 YWUsIDB4ZjYsIDB4ZmQsIDB4MzIsIDB4NzMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7 Ci0rICAgIDB4MjgsIDB4NTYsIDB4MzAsIDB4NmYsIDB4ZjQsIDB4YTEsIDB4NDgsIDB4ZTAsIDB4 YzksIDB4ZjUsIDB4NzUsIDB4OTAsCi0rICAgIDB4Y2MsIDB4ZmIsIDB4ZGYsIDB4ZGYsIDB4NzEs IDB4M2QsIDB4MGEsIDB4OWEsIDB4MDMsIDB4NjUsIDB4M2IsIDB4MTgsCi0rICAgIDB4NjEsIDB4 ZTMsIDB4ZDEsIDB4ZGEsIDB4Y2MsIDB4NGEsIDB4ZmUsIDB4NTUsIDB4MzgsIDB4ZjgsIDB4MjEs IDB4NmIsCi0rICAgIDB4ZmEsIDB4MTgsIDB4MDEsIDB4NDIsIDB4MzksIDB4MmYsIDB4OTksIDB4 NTMsIDB4MzgsIDB4MTUsIDB4ODIsIDB4MzQsCi0rICAgIDB4YzUsIDB4OTMsIDB4OTIsIDB4YmMs IDB4NGQsIDB4NzUsIDB4MWEsIDB4NWYsIDB4MjEsIDB4MjcsIDB4Y2MsIDB4YTEsCi0rICAgIDB4 YjEsIDB4NTcsIDB4NjksIDB4ZTgKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsg ICAgMHg4YywgMHg1MiwgMHg3ZSwgMHg3NywgMHg3MiwgMHgzZiwgMHhhMywgMHgwNCwgMHg5Nywg MHgxMCwgMHg5YiwgMHg0MSwKLSsgICAgMHhiZCwgMHhlOCwgMHhmZiwgMHg4OSwgMHhlZCwgMHg4 MCwgMHhlMywgMHhiZCwgMHhhYSwgMHgxMiwgMHgyZCwgMHhjYSwKLSsgICAgMHg3NSwgMHg4Miwg MHgzNiwgMHg3NywgMHg4OCwgMHhjZCwgMHhhNiwgMHg3MwotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9u YWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDdlLCAweDMyLCAweGUzLCAweDY5LCAweDY5LCAw eDA3LCAweDM0LCAweGEyLCAweDE2LCAweGEyLCAweDVkLCAweDFhLAotKyAgICAweDEwLCAweDkx LCAweGQzLCAweGUyLCAweDIxLCAweGEyLCAweGEzLCAweGRkLCAweGNkLCAweDBjLCAweDA5LCAw eDg2LAotKyAgICAweDExLCAweGUxLCAweDUwLCAweGZmLCAweDVjLCAweGI3LCAweGViLCAweDVj Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGE1MTJfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDdmLCAweDc4LCAweDY2LCAw eGQ4LCAweGZiLCAweDY3LCAweGNmLCAweDhkLCAweDhjLCAweDA4LCAweDMwLCAweGE1LAotKyAg ICAweGY4LCAweDdkLCAweGNmLCAweDQ0LCAweDU5LCAweGNlLCAweGY4LCAweGRmLCAweDU4LCAw eGQzLCAweDYwLCAweGNiLAotKyAgICAweGE4LCAweDYwLCAweGI5LCAweDA3LCAweGM0LCAweGIx LCAweDk1LCAweDQ4Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGE1MTJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ZGYsIDB4YTcs IDB4MzYsIDB4ZDQsIDB4ZGMsIDB4NWQsIDB4NGQsIDB4MzEsIDB4YWQsIDB4NjksIDB4NDYsIDB4 OWYsCi0rICAgIDB4ZjEsIDB4N2MsIDB4ZDcsIDB4M2IsIDB4NGYsIDB4NTUsIDB4ZjIsIDB4ZDcs IDB4YjksIDB4OWQsIDB4YWQsIDB4N2EsCi0rICAgIDB4NzksIDB4MDgsIDB4NTksIDB4YTUsIDB4 ZGMsIDB4NzQsIDB4ZjUsIDB4OWIsIDB4NzMsIDB4ZDIsIDB4MTMsIDB4MjUsCi0rICAgIDB4MGIs IDB4ODEsIDB4MDgsIDB4MDgsIDB4MjUsIDB4ZmIsIDB4MzksIDB4ZjIsIDB4ZjAsIDB4YTMsIDB4 YTQsIDB4OGQsCi0rICAgIDB4ZWYsIDB4MDUsIDB4OWUsIDB4YjgsIDB4YzcsIDB4NTIsIDB4ZTQs IDB4MGUsIDB4NDIsIDB4YWEsIDB4N2MsIDB4NzksCi0rICAgIDB4YzIsIDB4ZDYsIDB4ZmQsIDB4 YTUKLSt9OwotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2Vs ZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0 LmMKLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZp cHMJMjAxOC0wMy0yOSAxNDo0NDoyNC42MzQyMzY4MzAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4w aC9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjM0 MjM2ODMwICswMjAwCi1AQCAtMCwwICsxLDE5NSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29w eXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgot KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwot KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQot KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK LSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAq LwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2luY2x1ZGUgImludGVybmFsL2ZpcHNfaW50LmgiCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsj aW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcFtdID0gewotKyAgICAweGE4LCAw eDUzLCAweDc4LCAweGQ4LCAweGZkLCAweDNmLCAweDhkLCAweDcyLCAweGVjLCAweDc0LCAweDE4 LCAweDA4LAotKyAgICAweDBkLCAweGEyLCAweDEzLCAweDE3LCAweGU0LCAweDNlLCAweGM0LCAw eGI2LCAweDJiLCAweGE4LCAweGM4LCAweDYyLAotKyAgICAweDNiLCAweDdlLCAweDRkLCAweDA0 LCAweDQ0LCAweDFkLCAweGQxLCAweGEwLCAweDY1LCAweDg2LCAweDYyLCAweDU5LAotKyAgICAw eDY0LCAweDkzLCAweGNhLCAweDhlLCAweDllLCAweDhmLCAweGJiLCAweDdlLCAweDM0LCAweGFh LCAweGRkLCAweGI2LAotKyAgICAweDJlLCAweDVkLCAweDY3LCAweGI2LCAweGQwLCAweDlhLCAw eDZlLCAweDYxLCAweGI3LCAweDY5LCAweGU3LCAweGMzLAotKyAgICAweDUyLCAweGFhLCAweDJi LCAweDEwLCAweGUyLCAweDBjLCAweGEwLCAweDYzLCAweDY5LCAweDYzLCAweGI1LCAweDUyLAot KyAgICAweDNlLCAweDg2LCAweDQ3LCAweDBkLCAweGVjLCAweGJiLCAweGVkLCAweGEwLCAweDI3 LCAweGU3LCAweDk3LCAweGU3LAotKyAgICAweGI2LCAweDc2LCAweDM1LCAweGQ0LCAweGQ0LCAw eDljLCAweDMwLCAweDcwLCAweDBlLCAweDc0LCAweGFmLCAweDhhLAotKyAgICAweDBmLCAweGYx LCAweDU2LCAweGE4LCAweDAxLCAweGFmLCAweDU3LCAweGEyLCAweDZlLCAweDcwLCAweDc4LCAw eGYxLAotKyAgICAweGQ4LCAweDJmLCAweDc0LCAweDkwLCAweDhlLCAweGNiLCAweDZkLCAweDA3 LCAweGU3LCAweDBiLCAweDM1LCAweDAzLAotKyAgICAweGVlLCAweGQ5LCAweDRmLCAweGEzLCAw eDJjLCAweGYxLCAweDdhLCAweDdmLCAweGMzLCAweGQ2LCAweGNmLCAweDQwLAotKyAgICAweGRj LCAweDdiLCAweDAwLCAweDgzLCAweDBlLCAweDZhLCAweDI1LCAweDY2LCAweGRjLCAweDA3LCAw eDNlLCAweDM0LAotKyAgICAweDMzLCAweDEyLCAweDUxLCAweDdjLCAweDZhLCAweGE1LCAweDE1 LCAweDJiLCAweDRiLCAweGZlLCAweGNkLCAweDJlLAotKyAgICAweDU1LCAweDFmLCAweGVlLCAw eDM0LCAweDYzLCAweDE4LCAweGExLCAweDUzLCAweDQyLCAweDNjLCAweDk5LCAweDZiLAotKyAg ICAweDBkLCAweDVkLCAweGNiLCAweDkxLCAweDAyLCAweGFlLCAweGRkLCAweDM4LCAweDc5LCAw eDg2LCAweDE2LCAweGYxLAotKyAgICAweGYxLCAweGUwLCAweGQ2LCAweGM0LCAweDAzLCAweDUy LCAweDViLCAweDFmLCAweDliLCAweDNkLCAweDRkLCAweGM3LAotKyAgICAweDY2LCAweGRlLCAw eDJkLCAweGZjLCAweDRhLCAweDU2LCAweGQ3LCAweGI4LCAweGJhLCAweDU5LCAweDYzLCAweGQ2 LAotKyAgICAweDBmLCAweDNlLCAweDE2LCAweDMxLCAweDg4LCAweDcwLCAweGFkLCAweDQzLCAw eDY5LCAweDUyLCAweGU1LCAweDU3LAotKyAgICAweDY1LCAweDM3LCAweDRlLCAweGFiLCAweDg1 LCAweGU4LCAweGVjLCAweDE3LCAweGQ2LCAweGI5LCAweGE0LCAweDU0LAotKyAgICAweDdiLCAw eDliLCAweDVmLCAweDI3LCAweDUyLCAweGYzLCAweDEwLCAweDViLCAweGU4LCAweDA5LCAweGIy LCAweDNhLAotKyAgICAweDJjLCAweDhkLCAweDc0LCAweDY5LCAweGRiLCAweDAyLCAweGUyLCAw eDRkLCAweDU5LCAweDIzLCAweDk0LCAweGE3LAotKyAgICAweGRiLCAweGEwLCAweDY5LCAweGU5 Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3FbXSA9 IHsKLSsgICAgMHhkMiwgMHg3NywgMHgwNCwgMHg0ZSwgMHg1MCwgMHhmNSwgMHhhNCwgMHhlMywg MHhmNSwgMHgxMCwgMHhhNSwgMHgwYSwKLSsgICAgMHgwYiwgMHg4NCwgMHhmZCwgMHhmZiwgMHhi YywgMHhhMCwgMHg0NywgMHhlZCwgMHgyNywgMHg2MCwgMHgyMCwgMHg1NiwKLSsgICAgMHg3NCwg MHg0MSwgMHhhMCwgMHhhNQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNh X3Rlc3RfMjA0OF9nW10gPSB7Ci0rICAgIDB4MTMsIDB4ZDcsIDB4NTQsIDB4ZTIsIDB4MWYsIDB4 ZDIsIDB4NDEsIDB4NjUsIDB4NWQsIDB4YTgsIDB4OTEsIDB4YzUsCi0rICAgIDB4MjIsIDB4YTYs IDB4NWEsIDB4NzIsIDB4YTgsIDB4OWIsIDB4ZGMsIDB4NjQsIDB4ZWMsIDB4OWIsIDB4NTQsIDB4 YTgsCi0rICAgIDB4MjEsIDB4ZWQsIDB4NGEsIDB4ODksIDB4OGIsIDB4NDksIDB4MGUsIDB4MGMs IDB4NGYsIDB4Y2IsIDB4NzIsIDB4MTksCi0rICAgIDB4MmEsIDB4NGEsIDB4MjAsIDB4ZjUsIDB4 NDEsIDB4ZjMsIDB4ZjIsIDB4OTIsIDB4NTMsIDB4OTksIDB4ZjAsIDB4YmEsCi0rICAgIDB4ZWMs IDB4ZjksIDB4MjksIDB4YWEsIDB4ZmIsIDB4ZjcsIDB4OWQsIDB4ZmUsIDB4NDMsIDB4MzIsIDB4 MzksIDB4M2IsCi0rICAgIDB4MzIsIDB4Y2QsIDB4MmUsIDB4MmYsIDB4Y2YsIDB4MjcsIDB4MmYs IDB4MzIsIDB4YTYsIDB4MjcsIDB4NDMsIDB4NGEsCi0rICAgIDB4MGQsIDB4ZjIsIDB4NDIsIDB4 YjcsIDB4NWIsIDB4NDEsIDB4NGQsIDB4ZjMsIDB4NzIsIDB4MTIsIDB4MWUsIDB4NTMsCi0rICAg IDB4YTUsIDB4NTMsIDB4ZjIsIDB4MjIsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDAsIDB4ZjAsIDB4 MTYsIDB4NDgsIDB4NWIsCi0rICAgIDB4NmIsIDB4ZDAsIDB4ODksIDB4ODQsIDB4NTEsIDB4ODAs IDB4MWQsIDB4Y2QsIDB4OGQsIDB4ZTYsIDB4NGMsIDB4ZDUsCi0rICAgIDB4MzYsIDB4NTYsIDB4 OTYsIDB4ZmYsIDB4YzUsIDB4MzIsIDB4ZDUsIDB4MjgsIDB4YzUsIDB4MDYsIDB4NjIsIDB4MGEs Ci0rICAgIDB4OTQsIDB4MmEsIDB4MDMsIDB4MDUsIDB4MDQsIDB4NmQsIDB4OGYsIDB4MTgsIDB4 NzYsIDB4MzQsIDB4MWYsIDB4MWUsCi0rICAgIDB4NTcsIDB4MGIsIDB4YzMsIDB4OTcsIDB4NGIs IDB4YTYsIDB4YjksIDB4YTQsIDB4MzgsIDB4ZTksIDB4NzAsIDB4MjMsCi0rICAgIDB4MDIsIDB4 YTIsIDB4ZTYsIDB4ZTYsIDB4N2IsIDB4ZmQsIDB4MDYsIDB4ZDMsIDB4MmIsIDB4YzYsIDB4Nzks IDB4OTYsCi0rICAgIDB4MjIsIDB4NzEsIDB4ZDcsIDB4YjQsIDB4MGMsIDB4ZDcsIDB4MmYsIDB4 MzgsIDB4NmUsIDB4NjQsIDB4ZTAsIDB4ZDcsCi0rICAgIDB4ZWYsIDB4ODYsIDB4Y2EsIDB4OGMs IDB4YTUsIDB4ZDEsIDB4NDIsIDB4MjgsIDB4ZGMsIDB4MmEsIDB4NGYsIDB4MTYsCi0rICAgIDB4 ZTMsIDB4MTgsIDB4OTgsIDB4ODYsIDB4YjUsIDB4OTksIDB4MDYsIDB4NzQsIDB4ZjQsIDB4MjAs IDB4MGYsIDB4M2EsCi0rICAgIDB4NGMsIDB4ZjYsIDB4NWEsIDB4M2YsIDB4MGQsIDB4ZGIsIDB4 YTEsIDB4ZmEsIDB4NjcsIDB4MmQsIDB4ZmYsIDB4MmYsCi0rICAgIDB4NWUsIDB4MTQsIDB4M2Qs IDB4MTAsIDB4ZTQsIDB4ZTksIDB4N2EsIDB4ZTgsIDB4NGYsIDB4NmQsIDB4YTAsIDB4OTUsCi0r ICAgIDB4MzUsIDB4ZDUsIDB4YjksIDB4ZGYsIDB4MjUsIDB4OTEsIDB4ODEsIDB4YTcsIDB4OWIs IDB4NjMsIDB4YjAsIDB4NjksCi0rICAgIDB4ZTksIDB4NDksIDB4OTcsIDB4MmIsIDB4MDIsIDB4 YmEsIDB4MzYsIDB4YjMsIDB4NTgsIDB4NmEsIDB4YWIsIDB4N2UsCi0rICAgIDB4NDUsIDB4ZjMs IDB4MjIsIDB4ZjgsIDB4MmUsIDB4NGUsIDB4ODUsIDB4Y2EsIDB4M2EsIDB4YjgsIDB4NTUsIDB4 OTEsCi0rICAgIDB4YjMsIDB4YzIsIDB4YTksIDB4NjYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcHViX2tleVtdID0gewotKyAgICAweDI0LCAweDUy LCAweGYzLCAweGNjLCAweGJlLCAweDllLCAweGQ1LCAweGNhLCAweDdkLCAweGM3LCAweDRjLCAw eDYwLAotKyAgICAweDJiLCAweDk5LCAweDIyLCAweDZlLCAweDhmLCAweDJmLCAweGFiLCAweDM4 LCAweGU3LCAweGQ3LCAweGRkLCAweGZiLAotKyAgICAweDc1LCAweDUzLCAweDliLCAweDE3LCAw eDE1LCAweDVlLCAweDlmLCAweGNmLCAweGQxLCAweGFiLCAweGE1LCAweDY0LAotKyAgICAweGVi LCAweDg1LCAweDM1LCAweGQ4LCAweDEyLCAweGM5LCAweGMyLCAweGRjLCAweGY5LCAweDcyLCAw eDg0LCAweDQ0LAotKyAgICAweDFiLCAweGM0LCAweDgyLCAweDI0LCAweDM2LCAweDI0LCAweGM3 LCAweGY0LCAweDU3LCAweDU4LCAweDBjLCAweDFjLAotKyAgICAweDM4LCAweGE1LCAweDdjLCAw eDQ2LCAweGM0LCAweDU3LCAweDM5LCAweDI0LCAweDcwLCAweGVkLCAweGI1LCAweDJjLAotKyAg ICAweGI1LCAweGE2LCAweGUwLCAweDNmLCAweGU2LCAweDI4LCAweDdiLCAweGI2LCAweGY0LCAw eDlhLCAweDQyLCAweGEyLAotKyAgICAweDA2LCAweDVhLCAweDA1LCAweDRmLCAweDAzLCAweDA4 LCAweDM5LCAweGRmLCAweDFmLCAweGQzLCAweDE0LCAweDljLAotKyAgICAweDRjLCAweGEwLCAw eDUzLCAweDFkLCAweGQ4LCAweGNhLCAweDhhLCAweGFhLCAweDljLCAweGM3LCAweDMzLCAweDcx LAotKyAgICAweDkzLCAweDM4LCAweDczLCAweDQ4LCAweDMzLCAweDYxLCAweDE4LCAweDIyLCAw eDQ1LCAweDQ1LCAweGU4LCAweDhjLAotKyAgICAweDgwLCAweGZmLCAweGQ4LCAweDc2LCAweDVk LCAweDc0LCAweDM2LCAweDAzLCAweDMzLCAweGNjLCAweGFiLCAweDk5LAotKyAgICAweDcyLCAw eDc3LCAweDliLCAweDY1LCAweDI1LCAweGE2LCAweDViLCAweGRkLCAweDBkLCAweDEwLCAweGM2 LCAweDc1LAotKyAgICAweGMxLCAweDA5LCAweGJiLCAweGQzLCAweGU1LCAweGJlLCAweDRkLCAw eDcyLCAweGVmLCAweDZlLCAweGJhLCAweDZlLAotKyAgICAweDQzLCAweDhkLCAweDUyLCAweDI2 LCAweDIzLCAweDdkLCAweGI4LCAweDg4LCAweDM3LCAweDljLCAweDVmLCAweGNjLAotKyAgICAw eDQ3LCAweGEzLCAweDg0LCAweDdmLCAweGY2LCAweDM3LCAweDExLCAweGJhLCAweGVkLCAweDZk LCAweDAzLCAweGFmLAotKyAgICAweGU4LCAweDFlLCAweDY5LCAweDRhLCAweDQxLCAweDNiLCAw eDY4LCAweDBiLCAweGQzLCAweDhhLCAweGI0LCAweDkwLAotKyAgICAweDNmLCAweDgzLCAweDcw LCAweGE3LCAweDA3LCAweGVmLCAweDU1LCAweDFkLCAweDQ5LCAweDQxLCAweDAyLCAweDZkLAot KyAgICAweDk1LCAweDc5LCAweGQ2LCAweDkxLCAweGRlLCAweDhlLCAweGRhLCAweGExLCAweDYx LCAweDA1LCAweGViLCAweDlkLAotKyAgICAweGJhLCAweDNjLCAweDJmLCAweDRjLCAweDFiLCAw eGVjLCAweDUwLCAweDgyLCAweDc1LCAweGFhLCAweDAyLCAweDA3LAotKyAgICAweGUyLCAweDUx LCAweGI1LCAweGVjLCAweGNiLCAweDI4LCAweDZhLCAweDRiLCAweDAxLCAweGQ0LCAweDQ5LCAw eGQzLAotKyAgICAweDBhLCAweGNiLCAweDY3LCAweDM3LCAweDE3LCAweGEwLCAweGQyLCAweGZi LCAweDNiLCAweDUwLCAweGM4LCAweDkzLAotKyAgICAweGY3LCAweGRhLCAweGIxLCAweDRmCi0r fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3ByaXZfa2V5 W10gPSB7Ci0rICAgIDB4MGMsIDB4NGIsIDB4MzAsIDB4ODksIDB4ZDEsIDB4YjgsIDB4NjIsIDB4 Y2IsIDB4M2MsIDB4NDMsIDB4NjQsIDB4OTEsCi0rICAgIDB4ZjAsIDB4OTEsIDB4NTQsIDB4NzAs IDB4YzUsIDB4MjcsIDB4OTYsIDB4ZTMsIDB4YWMsIDB4YmUsIDB4ZTgsIDB4MDAsCi0rICAgIDB4 ZWMsIDB4NTUsIDB4ZjYsIDB4Y2MKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSgpCi0r ewotKyAgICBEU0EgKmRzYSA9IE5VTEw7Ci0rICAgIEVWUF9QS0VZICpwayA9IE5VTEw7Ci0rICAg IGludCByZXQgPSAtMTsKLSsgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5V TEwsICpwdWJfa2V5ID0gTlVMTCwgKnByaXZfa2V5ID0gTlVMTDsKLSsKLSsgICAgZmlwc19sb2Fk X2tleV9jb21wb25lbnQocCwgZHNhX3Rlc3RfMjA0OCk7Ci0rICAgIGZpcHNfbG9hZF9rZXlfY29t cG9uZW50KHEsIGRzYV90ZXN0XzIwNDgpOwotKyAgICBmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChn LCBkc2FfdGVzdF8yMDQ4KTsKLSsgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQocHViX2tleSwg ZHNhX3Rlc3RfMjA0OCk7Ci0rICAgIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KHByaXZfa2V5LCBk c2FfdGVzdF8yMDQ4KTsKLSsKLSsgICAgZHNhID0gRFNBX25ldygpOwotKwotKyAgICBpZiAoZHNh ID09IE5VTEwpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgRFNBX3NldDBfcHFnKGRzYSwg cCwgcSwgZyk7Ci0rCi0rICAgIERTQV9zZXQwX2tleShkc2EsIHB1Yl9rZXksIHByaXZfa2V5KTsK LSsKLSsgICAgaWYgKChwayA9IEVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotKyAgICAgICAgZ290 byBlcnI7Ci0rCi0rICAgIEVWUF9QS0VZX2Fzc2lnbl9EU0EocGssIGRzYSk7Ci0rCi0rICAgIGlm ICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBOVUxMLCAwLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBFVlBfc2hhMjU2KCksIDAsICJEU0EgU0hBMjU2 IikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgcmV0ID0gMTsKLSsKLSsgZXJyOgotKyAgICBp ZiAocGspCi0rICAgICAgICBFVlBfUEtFWV9mcmVlKHBrKTsKLSsgICAgZWxzZSBpZiAoZHNhKQot KyAgICAgICAgRFNBX2ZyZWUoZHNhKTsKLSsgICAgZWxzZSB7Ci0rICAgICAgICBCTl9mcmVlKHAp OwotKyAgICAgICAgQk5fZnJlZShxKTsKLSsgICAgICAgIEJOX2ZyZWUoZyk7Ci0rICAgICAgICBC Tl9mcmVlKHB1Yl9rZXkpOwotKyAgICAgICAgQk5fZnJlZShwcml2X2tleSk7Ci0rICAgIH0KLSsg ICAgcmV0dXJuIHJldDsKLSt9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlw dG8vZmlwcy9maXBzX2VjZGhfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9m aXBzL2ZpcHNfZWNkaF9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMv Zmlwc19lY2RoX3NlbGZ0ZXN0LmMuZmlwcwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzNTIzNjg1NCAr MDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfZWNkaF9zZWxmdGVzdC5j CTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjM1MjM2ODU0ICswMjAwCi1AQCAtMCwwICsxLDI0MiBAQAot Ky8qIGZpcHMvZWNkaC9maXBzX2VjZGhfc2VsZnRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIg U3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAq IHByb2plY3QgMjAxMS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykg MjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK LSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgot KyAqLwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2VjLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZWNkaC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjIGlu Y2x1ZGUgImZpcHNfbG9jbC5oIgotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHAyNTZf cWNhdnN4W10gPSB7Ci0rICAgIDB4NTIsIDB4YzYsIDB4YTUsIDB4NzUsIDB4ZjMsIDB4MDQsIDB4 OTgsIDB4YjMsIDB4MjksIDB4NjYsIDB4MGMsIDB4NjIsCi0rICAgIDB4MTgsIDB4NjAsIDB4NTUs IDB4NDEsIDB4NTksIDB4ZDQsIDB4NjAsIDB4ODUsIDB4OTksIDB4YzEsIDB4NTEsIDB4MTMsCi0r ICAgIDB4NmYsIDB4OTcsIDB4ODUsIDB4OTMsIDB4MzMsIDB4MzQsIDB4MDcsIDB4NTAKLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHAyNTZfcWNhdnN5W10gPSB7Ci0rICAgIDB4 NmYsIDB4NjksIDB4MjQsIDB4ZWIsIDB4ZTksIDB4M2IsIDB4YTcsIDB4Y2MsIDB4NDcsIDB4MTcs IDB4YWEsIDB4M2YsCi0rICAgIDB4NzAsIDB4ZmMsIDB4MTAsIDB4NzMsIDB4MGEsIDB4Y2QsIDB4 MjEsIDB4ZWUsIDB4MjksIDB4MTksIDB4MWYsIDB4YWYsCi0rICAgIDB4YjQsIDB4MWMsIDB4MWUs IDB4YzIsIDB4OGUsIDB4OTcsIDB4ODEsIDB4NmUKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHAyNTZfcWl1dHhbXSA9IHsKLSsgICAgMHg3MSwgMHg0NiwgMHg4OCwgMHgwOCwg MHg5MiwgMHgyMSwgMHgxYiwgMHgxMCwgMHgyMSwgMHg3NCwgMHhmZiwgMHgwYywKLSsgICAgMHg5 NCwgMHhkZSwgMHgzNCwgMHg3YywgMHg4NiwgMHg3NCwgMHhiZSwgMHg2NywgMHg0MSwgMHg2OCwg MHhkNCwgMHhjMSwKLSsgICAgMHhlNSwgMHg3NSwgMHg2MywgMHg5YywgMHhhNywgMHg0NiwgMHg5 MywgMHg2ZgotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcDI1Nl9xaXV0eVtd ID0gewotKyAgICAweDMzLCAweDQwLCAweGE5LCAweDZhLCAweGY1LCAweDIwLCAweGI1LCAweDll LCAweGZjLCAweDYwLCAweDFhLCAweGFlLAotKyAgICAweDNkLCAweGY4LCAweDIxLCAweGQyLCAw eGE3LCAweGNhLCAweDUyLCAweDM0LCAweGI5LCAweDVmLCAweDI3LCAweDc1LAotKyAgICAweDZj LCAweDgxLCAweGJlLCAweDMyLCAweDRkLCAweGJhLCAweGJiLCAweGY4Ci0rfTsKLSsKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBwMjU2X3FpdXRkW10gPSB7Ci0rICAgIDB4MWEsIDB4NDgs IDB4NTUsIDB4NmIsIDB4MTEsIDB4YmUsIDB4OTIsIDB4ZDQsIDB4MWMsIDB4ZDcsIDB4NDUsIDB4 YzMsCi0rICAgIDB4ODIsIDB4ODEsIDB4NTEsIDB4ZjEsIDB4MjMsIDB4NDAsIDB4YjcsIDB4ODMs IDB4ZmQsIDB4MDEsIDB4NmQsIDB4YmMsCi0rICAgIDB4YTEsIDB4NjYsIDB4YWYsIDB4MGEsIDB4 MDMsIDB4MjMsIDB4Y2QsIDB4YzgKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHAyNTZfeml1dFtdID0gewotKyAgICAweDc3LCAweDJhLCAweDFlLCAweDM3LCAweGVlLCAweGU2 LCAweDUxLCAweDAyLCAweDcxLCAweDQwLCAweGY4LCAweDZhLAotKyAgICAweDM2LCAweGY4LCAw eDY1LCAweDYxLCAweDJiLCAweDE4LCAweDcxLCAweDgyLCAweDIzLCAweGU2LCAweGYyLCAweDc3 LAotKyAgICAweGNlLCAweGVjLCAweGI4LCAweDQ5LCAweGM3LCAweGJmLCAweDM2LCAweDRmCi0r fTsKLSsKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rICAgIGludCBjdXJ2ZTsKLSsgICAgY29uc3QgdW5z aWduZWQgY2hhciAqeDE7Ci0rICAgIHNpemVfdCB4MWxlbjsKLSsgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqeTE7Ci0rICAgIHNpemVfdCB5MWxlbjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAq ZDE7Ci0rICAgIHNpemVfdCBkMWxlbjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqeDI7Ci0r ICAgIHNpemVfdCB4MmxlbjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqeTI7Ci0rICAgIHNp emVfdCB5MmxlbjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqejsKLSsgICAgc2l6ZV90IHps ZW47Ci0rfSBFQ0RIX1NFTEZURVNUX0RBVEE7Ci0rCi0rIyBkZWZpbmUgbWFrZV9lY2RoX3Rlc3Qo bmlkLCBwcikgeyBuaWQsIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByIyNf cWl1dHgsIHNpemVvZihwciMjX3FpdXR4KSwgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcHIjI19xaXV0eSwgc2l6ZW9mKHByIyNfcWl1dHkpLCBcCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwciMjX3FpdXRkLCBzaXplb2YocHIjI19xaXV0ZCksIFwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByIyNfcWNhdnN4LCBzaXplb2YocHIjI19xY2F2 c3gpLCBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwciMjX3FjYXZzeSwgc2l6 ZW9mKHByIyNfcWNhdnN5KSwgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHIj I196aXV0LCBzaXplb2YocHIjI196aXV0KSB9Ci0rCi0rc3RhdGljIEVDREhfU0VMRlRFU1RfREFU QSB0ZXN0X2VjZGhfZGF0YVtdID0gewotKyAgICBtYWtlX2VjZGhfdGVzdChOSURfWDlfNjJfcHJp bWUyNTZ2MSwgcDI1NiksCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9lY2RoKHZvaWQpCi0r ewotKyAgICBFQ19LRVkgKmVjMSA9IE5VTEwsICplYzIgPSBOVUxMOwotKyAgICBjb25zdCBFQ19Q T0lOVCAqZWNwID0gTlVMTDsKLSsgICAgQklHTlVNICp4ID0gTlVMTCwgKnkgPSBOVUxMLCAqZCA9 IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnp0bXAgPSBOVUxMOwotKyAgICBpbnQgcnYgPSAx OwotKyAgICBzaXplX3QgaTsKLSsKLSsgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZXN0X2Vj ZGhfZGF0YSkgLyBzaXplb2YoRUNESF9TRUxGVEVTVF9EQVRBKTsgaSsrKSB7Ci0rICAgICAgICBF Q0RIX1NFTEZURVNUX0RBVEEgKmVjZCA9IHRlc3RfZWNkaF9kYXRhICsgaTsKLSsgICAgICAgIGlm ICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0VDREgsIGVjZC0+Y3VydmUsIDApKQotKyAg ICAgICAgICAgIGNvbnRpbnVlOwotKyAgICAgICAgenRtcCA9IE9QRU5TU0xfbWFsbG9jKGVjZC0+ emxlbik7Ci0rCi0rICAgICAgICB4ID0gQk5fYmluMmJuKGVjZC0+eDEsIGVjZC0+eDFsZW4sIHgp OwotKyAgICAgICAgeSA9IEJOX2JpbjJibihlY2QtPnkxLCBlY2QtPnkxbGVuLCB5KTsKLSsgICAg ICAgIGQgPSBCTl9iaW4yYm4oZWNkLT5kMSwgZWNkLT5kMWxlbiwgZCk7Ci0rCi0rICAgICAgICBp ZiAoIXggfHwgIXkgfHwgIWQgfHwgIXp0bXApIHsKLSsgICAgICAgICAgICBydiA9IC0xOwotKyAg ICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgfQotKwotKyAgICAgICAgZWMxID0gRUNfS0VZ X25ld19ieV9jdXJ2ZV9uYW1lKGVjZC0+Y3VydmUpOwotKyAgICAgICAgaWYgKCFlYzEpIHsKLSsg ICAgICAgICAgICBydiA9IC0xOwotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgfQot KyAgICAgICAgRUNfS0VZX3NldF9mbGFncyhlYzEsIEVDX0ZMQUdfQ09GQUNUT1JfRUNESCk7Ci0r Ci0rICAgICAgICBpZiAoIUVDX0tFWV9zZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbmF0ZXMo ZWMxLCB4LCB5KSkgewotKyAgICAgICAgICAgIHJ2ID0gLTE7Ci0rICAgICAgICAgICAgZ290byBl cnI7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBpZiAoIUVDX0tFWV9zZXRfcHJpdmF0ZV9rZXko ZWMxLCBkKSkgewotKyAgICAgICAgICAgIHJ2ID0gLTE7Ci0rICAgICAgICAgICAgZ290byBlcnI7 Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICB4ID0gQk5fYmluMmJuKGVjZC0+eDIsIGVjZC0+eDJs ZW4sIHgpOwotKyAgICAgICAgeSA9IEJOX2JpbjJibihlY2QtPnkyLCBlY2QtPnkybGVuLCB5KTsK LSsKLSsgICAgICAgIGlmICgheCB8fCAheSkgewotKyAgICAgICAgICAgIHJ2ID0gLTE7Ci0rICAg ICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBlYzIgPSBFQ19LRVlf bmV3X2J5X2N1cnZlX25hbWUoZWNkLT5jdXJ2ZSk7Ci0rICAgICAgICBpZiAoIWVjMikgewotKyAg ICAgICAgICAgIHJ2ID0gLTE7Ci0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICB9Ci0r ICAgICAgICBFQ19LRVlfc2V0X2ZsYWdzKGVjMSwgRUNfRkxBR19DT0ZBQ1RPUl9FQ0RIKTsKLSsK LSsgICAgICAgIGlmICghRUNfS0VZX3NldF9wdWJsaWNfa2V5X2FmZmluZV9jb29yZGluYXRlcyhl YzIsIHgsIHkpKSB7Ci0rICAgICAgICAgICAgcnYgPSAtMTsKLSsgICAgICAgICAgICBnb3RvIGVy cjsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIGVjcCA9IEVDX0tFWV9nZXQwX3B1YmxpY19rZXko ZWMyKTsKLSsgICAgICAgIGlmICghZWNwKSB7Ci0rICAgICAgICAgICAgcnYgPSAtMTsKLSsgICAg ICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIGlmICghRUNESF9jb21w dXRlX2tleSh6dG1wLCBlY2QtPnpsZW4sIGVjcCwgZWMxLCAwKSkgewotKyAgICAgICAgICAgIHJ2 ID0gLTE7Ci0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBp ZiAoIWZpcHNfcG9zdF9jb3JydXB0KEZJUFNfVEVTVF9FQ0RILCBlY2QtPmN1cnZlLCBOVUxMKSkK LSsgICAgICAgICAgICB6dG1wWzBdIF49IDB4MTsKLSsKLSsgICAgICAgIGlmIChtZW1jbXAoenRt cCwgZWNkLT56LCBlY2QtPnpsZW4pKSB7Ci0rICAgICAgICAgICAgZmlwc19wb3N0X2ZhaWxlZChG SVBTX1RFU1RfRUNESCwgZWNkLT5jdXJ2ZSwgMCk7Ci0rICAgICAgICAgICAgcnYgPSAwOwotKyAg ICAgICAgfSBlbHNlIGlmICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0VDREgsIGVjZC0+ Y3VydmUsIDApKQotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICAgICAgRUNfS0VZX2Zy ZWUoZWMxKTsKLSsgICAgICAgIGVjMSA9IE5VTEw7Ci0rICAgICAgICBFQ19LRVlfZnJlZShlYzIp OwotKyAgICAgICAgZWMyID0gTlVMTDsKLSsgICAgICAgIE9QRU5TU0xfZnJlZSh6dG1wKTsKLSsg ICAgICAgIHp0bXAgPSBOVUxMOwotKyAgICB9Ci0rCi0rIGVycjoKLSsKLSsgICAgaWYgKHgpCi0r ICAgICAgICBCTl9jbGVhcl9mcmVlKHgpOwotKyAgICBpZiAoeSkKLSsgICAgICAgIEJOX2NsZWFy X2ZyZWUoeSk7Ci0rICAgIGlmIChkKQotKyAgICAgICAgQk5fY2xlYXJfZnJlZShkKTsKLSsgICAg aWYgKGVjMSkKLSsgICAgICAgIEVDX0tFWV9mcmVlKGVjMSk7Ci0rICAgIGlmIChlYzIpCi0rICAg ICAgICBFQ19LRVlfZnJlZShlYzIpOwotKyAgICBpZiAoenRtcCkKLSsgICAgICAgIE9QRU5TU0xf ZnJlZSh6dG1wKTsKLSsKLSsgICAgcmV0dXJuIHJ2OwotKwotK30KLSsKLSsjZW5kaWYKLWRpZmYg LXVwIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfZWNkc2Ffc2VsZnRlc3QuYy5maXBz IG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfZWNkc2Ffc2VsZnRlc3QuYwotLS0tIG9w ZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfZWNkc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTgt MDMtMjkgMTQ6NDQ6MjQuNjM1MjM2ODU0ICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvY3J5cHRv L2ZpcHMvZmlwc19lY2RzYV9zZWxmdGVzdC5jCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjM1MjM2ODU0 ICswMjAwCi1AQCAtMCwwICsxLDE2NiBAQAotKy8qIGZpcHMvZWNkc2EvZmlwc19lY2RzYV9zZWxm dGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVu c3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdCAyMDExLgotKyAqLwotKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0r ICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4K LSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNl bnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgot KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICovCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJ UFNBUEkKLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRv Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lY2RzYS5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiaW50ZXJuYWwvZmlwc19p bnQuaCIKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsK LStzdGF0aWMgY29uc3QgY2hhciBQXzI1Nl9uYW1lW10gPSAiRUNEU0EgUC0yNTYiOwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFBfMjU2X2RbXSA9IHsKLSsgICAgMHg1MSwgMHhiZCwg MHgwNiwgMHhhMSwgMHgxYywgMHhkYSwgMHhlMiwgMHgxMiwgMHg5OSwgMHhjOSwgMHg1MiwgMHgz ZiwKLSsgICAgMHhlYSwgMHhhNCwgMHhkMiwgMHhkMSwgMHhmNCwgMHg3ZiwgMHhkNCwgMHgzZSwg MHhiZCwgMHhmOCwgMHhmYywgMHg4NywKLSsgICAgMHhkYywgMHg4MiwgMHg1MywgMHgyMSwgMHhl ZSwgMHhhMCwgMHhkYywgMHg2NAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg UF8yNTZfcXhbXSA9IHsKLSsgICAgMHgyMywgMHg4OSwgMHhlMCwgMHhmNCwgMHg2OSwgMHhlMCwg MHg0OSwgMHhlNSwgMHhjNywgMHhlNSwgMHg0MCwgMHg2ZSwKLSsgICAgMHg4ZiwgMHgyNSwgMHhk ZCwgMHhhZCwgMHgxMSwgMHgxNiwgMHgxNCwgMHg5YiwgMHhhYiwgMHg0NCwgMHgwNiwgMHgzMSwK LSsgICAgMHhiZiwgMHg1ZSwgMHhhNiwgMHg0NCwgMHhhYywgMHg4NiwgMHgwMCwgMHgwNwotK307 Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgUF8yNTZfcXlbXSA9IHsKLSsgICAgMHhi MywgMHgwNSwgMHgwZCwgMHhkMCwgMHhkYywgMHhmNywgMHg0MCwgMHhlNiwgMHhmOSwgMHhkOCwg MHg2ZCwgMHg3YiwKLSsgICAgMHg2MywgMHhjYSwgMHg5NywgMHhlNiwgMHgxMiwgMHhmOSwgMHhk NCwgMHgxOCwgMHg1OSwgMHhiZSwgMHhiMiwgMHg1ZSwKLSsgICAgMHg0YSwgMHg2YSwgMHg3Nywg MHgyMywgMHhmNCwgMHgxMSwgMHg5ZCwgMHhlYgotK307Ci0rCi0rdHlwZWRlZiBzdHJ1Y3Qgewot KyAgICBpbnQgY3VydmU7Ci0rICAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0rICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKng7Ci0rICAgIHNpemVfdCB4bGVuOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy ICp5OwotKyAgICBzaXplX3QgeWxlbjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZDsKLSsg ICAgc2l6ZV90IGRsZW47Ci0rfSBFQ19TRUxGVEVTVF9EQVRBOwotKwotKyMgZGVmaW5lIG1ha2Vf ZWNkc2FfdGVzdChuaWQsIHByKSB7IG5pZCwgcHIjI19uYW1lLCBcCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwciMjX3F4LCBzaXplb2YocHIjI19xeCksIFwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHByIyNfcXksIHNpemVvZihwciMjX3F5KSwgXAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHIjI19kLCBzaXplb2YocHIjI19kKX0KLSsKLStz dGF0aWMgRUNfU0VMRlRFU1RfREFUQSB0ZXN0X2VjX2RhdGFbXSA9IHsKLSsgICAgbWFrZV9lY2Rz YV90ZXN0KE5JRF9YOV82Ml9wcmltZTI1NnYxLCBQXzI1NiksCi0rfTsKLSsKLStpbnQgRklQU19z ZWxmdGVzdF9lY2RzYSgpCi0rewotKyAgICBFQ19LRVkgKmVjID0gTlVMTDsKLSsgICAgQklHTlVN ICp4ID0gTlVMTCwgKnkgPSBOVUxMLCAqZCA9IE5VTEw7Ci0rICAgIEVWUF9QS0VZICpwayA9IE5V TEw7Ci0rICAgIGludCBydiA9IDA7Ci0rICAgIHNpemVfdCBpOwotKwotKyAgICBmb3IgKGkgPSAw OyBpIDwgc2l6ZW9mKHRlc3RfZWNfZGF0YSkgLyBzaXplb2YoRUNfU0VMRlRFU1RfREFUQSk7IGkr KykgewotKyAgICAgICAgRUNfU0VMRlRFU1RfREFUQSAqZWNkID0gdGVzdF9lY19kYXRhICsgaTsK LSsKLSsgICAgICAgIHggPSBCTl9iaW4yYm4oZWNkLT54LCBlY2QtPnhsZW4sIHgpOwotKyAgICAg ICAgeSA9IEJOX2JpbjJibihlY2QtPnksIGVjZC0+eWxlbiwgeSk7Ci0rICAgICAgICBkID0gQk5f YmluMmJuKGVjZC0+ZCwgZWNkLT5kbGVuLCBkKTsKLSsKLSsgICAgICAgIGlmICgheCB8fCAheSB8 fCAhZCkKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgICAgIGVjID0gRUNfS0VZX25l d19ieV9jdXJ2ZV9uYW1lKGVjZC0+Y3VydmUpOwotKyAgICAgICAgaWYgKCFlYykKLSsgICAgICAg ICAgICBnb3RvIGVycjsKLSsKLSsgICAgICAgIGlmICghRUNfS0VZX3NldF9wdWJsaWNfa2V5X2Fm ZmluZV9jb29yZGluYXRlcyhlYywgeCwgeSkpCi0rICAgICAgICAgICAgZ290byBlcnI7Ci0rCi0r ICAgICAgICBpZiAoIUVDX0tFWV9zZXRfcHJpdmF0ZV9rZXkoZWMsIGQpKQotKyAgICAgICAgICAg IGdvdG8gZXJyOwotKwotKyAgICAgICAgaWYgKChwayA9IEVWUF9QS0VZX25ldygpKSA9PSBOVUxM KQotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICAgICAgRVZQX1BLRVlfYXNzaWduX0VD X0tFWShwaywgZWMpOwotKwotKyAgICAgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIE5VTEwsIDAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCAwLCBFVlBfc2hhMjU2KCksIDAsIGVjZC0+bmFtZSkpCi0rICAgICAgICAgICAgZ290byBlcnI7 Ci0rICAgIH0KLSsKLSsgICAgcnYgPSAxOwotKwotKyBlcnI6Ci0rCi0rICAgIGlmICh4KQotKyAg ICAgICAgQk5fY2xlYXJfZnJlZSh4KTsKLSsgICAgaWYgKHkpCi0rICAgICAgICBCTl9jbGVhcl9m cmVlKHkpOwotKyAgICBpZiAoZCkKLSsgICAgICAgIEJOX2NsZWFyX2ZyZWUoZCk7Ci0rICAgIGlm IChwaykKLSsgICAgICAgIEVWUF9QS0VZX2ZyZWUocGspOwotKyAgICBlbHNlIGlmIChlYykKLSsg ICAgICAgIEVDX0tFWV9mcmVlKGVjKTsKLSsKLSsgICAgcmV0dXJuIHJ2OwotKwotK30KLSsKLSsj ZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMuZmlw cyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjEu MGgvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYy5maXBzCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjM1MjM2 ODU0ICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYwkyMDE4 LTAzLTI5IDE0OjQ0OjI0LjYzNTIzNjg1NCArMDIwMAotQEAgLTAsMCArMSwxODkgQEAKLSsvKiBm aXBlL2V2cC9maXBzX2VuYy5jICovCi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZ b3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5 IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24g d2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0r ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFs IHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVk IHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91 bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwg REVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50 YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkg dGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBU aW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFp bnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsg KiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlz IHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlv bgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0r ICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3Jh bSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHBy b3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2Fy ZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRl biBieQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhl IHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9t IHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVs YXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29k ZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0 b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGlt IEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0r ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICog U1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJt cyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZl IG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBz aW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBs aWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsK LSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKwotK2NvbnN0IEVWUF9DSVBIRVIgKkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGlu dCBuaWQpCi0rewotKyAgICBzd2l0Y2ggKG5pZCkgewotKyAgICBjYXNlIE5JRF9hZXNfMTI4X2Ni YzoKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9jYmMoKTsKLSsKLSsgICAgY2FzZSBOSURf YWVzXzEyOF9jY206Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfY2NtKCk7Ci0rCi0rICAg IGNhc2UgTklEX2Flc18xMjhfY2ZiMToKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9jZmIx KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xMjhfY2ZiMTI4OgotKyAgICAgICAgcmV0dXJuIEVW UF9hZXNfMTI4X2NmYjEyOCgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMTI4X2NmYjg6Ci0rICAg ICAgICByZXR1cm4gRVZQX2Flc18xMjhfY2ZiOCgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMTI4 X2N0cjoKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9jdHIoKTsKLSsKLSsgICAgY2FzZSBO SURfYWVzXzEyOF9lY2I6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfZWNiKCk7Ci0rCi0r ICAgIGNhc2UgTklEX2Flc18xMjhfZ2NtOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X2dj bSgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMTI4X29mYjEyODoKLSsgICAgICAgIHJldHVybiBF VlBfYWVzXzEyOF9vZmIoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzEyOF94dHM6Ci0rICAgICAg ICByZXR1cm4gRVZQX2Flc18xMjhfeHRzKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xOTJfY2Jj OgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX2NiYygpOwotKwotKyAgICBjYXNlIE5JRF9h ZXNfMTkyX2NjbToKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9jY20oKTsKLSsKLSsgICAg Y2FzZSBOSURfYWVzXzE5Ml9jZmIxOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjEo KTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzE5Ml9jZmIxMjg6Ci0rICAgICAgICByZXR1cm4gRVZQ X2Flc18xOTJfY2ZiMTI4KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xOTJfY2ZiODoKLSsgICAg ICAgIHJldHVybiBFVlBfYWVzXzE5Ml9jZmI4KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xOTJf Y3RyOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX2N0cigpOwotKwotKyAgICBjYXNlIE5J RF9hZXNfMTkyX2VjYjoKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9lY2IoKTsKLSsKLSsg ICAgY2FzZSBOSURfYWVzXzE5Ml9nY206Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfZ2Nt KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xOTJfb2ZiMTI4OgotKyAgICAgICAgcmV0dXJuIEVW UF9hZXNfMTkyX29mYigpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMjU2X2NiYzoKLSsgICAgICAg IHJldHVybiBFVlBfYWVzXzI1Nl9jYmMoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzI1Nl9jY206 Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfY2NtKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Fl c18yNTZfY2ZiMToKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl9jZmIxKCk7Ci0rCi0rICAg IGNhc2UgTklEX2Flc18yNTZfY2ZiMTI4OgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2Nm YjEyOCgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMjU2X2NmYjg6Ci0rICAgICAgICByZXR1cm4g RVZQX2Flc18yNTZfY2ZiOCgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMjU2X2N0cjoKLSsgICAg ICAgIHJldHVybiBFVlBfYWVzXzI1Nl9jdHIoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzI1Nl9l Y2I6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfZWNiKCk7Ci0rCi0rICAgIGNhc2UgTklE X2Flc18yNTZfZ2NtOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2djbSgpOwotKwotKyAg ICBjYXNlIE5JRF9hZXNfMjU2X29mYjEyODoKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl9v ZmIoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzI1Nl94dHM6Ci0rICAgICAgICByZXR1cm4gRVZQ X2Flc18yNTZfeHRzKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Rlc19lZGVfZWNiOgotKyAgICAgICAg cmV0dXJuIEVWUF9kZXNfZWRlKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Rlc19lZGUzX2VjYjoKLSsg ICAgICAgIHJldHVybiBFVlBfZGVzX2VkZTMoKTsKLSsKLSsgICAgY2FzZSBOSURfZGVzX2VkZTNf Y2JjOgotKyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlM19jYmMoKTsKLSsKLSsgICAgY2FzZSBO SURfZGVzX2VkZTNfY2ZiMToKLSsgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZTNfY2ZiMSgpOwot KwotKyAgICBjYXNlIE5JRF9kZXNfZWRlM19jZmI2NDoKLSsgICAgICAgIHJldHVybiBFVlBfZGVz X2VkZTNfY2ZiNjQoKTsKLSsKLSsgICAgY2FzZSBOSURfZGVzX2VkZTNfY2ZiODoKLSsgICAgICAg IHJldHVybiBFVlBfZGVzX2VkZTNfY2ZiOCgpOwotKwotKyAgICBjYXNlIE5JRF9kZXNfZWRlM19v ZmI2NDoKLSsgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZTNfb2ZiKCk7Ci0rCi0rICAgIGNhc2Ug TklEX2Rlc19lZGVfY2JjOgotKyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlX2NiYygpOwotKwot KyAgICBjYXNlIE5JRF9kZXNfZWRlX2NmYjY0OgotKyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRl X2NmYjY0KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Rlc19lZGVfb2ZiNjQ6Ci0rICAgICAgICByZXR1 cm4gRVZQX2Rlc19lZGVfb2ZiKCk7Ci0rCi0rICAgIGRlZmF1bHQ6Ci0rICAgICAgICByZXR1cm4g TlVMTDsKLSsKLSsgICAgfQotK30KLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBz L2ZpcHNfZXJyLmguZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2Vyci5oCi0t LS0gb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19lcnIuaC5maXBzCTIwMTgtMDMtMjkg MTQ6NDQ6MjQuNjM1MjM2ODU0ICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMv Zmlwc19lcnIuaAkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzNTIzNjg1NCArMDIwMAotQEAgLTAsMCAr MSwxOTYgQEAKLSsvKiBjcnlwdG8vZmlwc19lcnIuaCAqLwotKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICog Q29weXJpZ2h0IChjKSAxOTk5LTIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0 OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQE9w ZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAg ICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0r ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFw aGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNv bSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBI dWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKy8qCi0rICogTk9URTog dGhpcyBmaWxlIHdhcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgbWtlcnIucGwgc2NyaXB0OiBhbnkg Y2hhbmdlcwotKyAqIG1hZGUgdG8gaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3Jp cHQgbmV4dCB1cGRhdGVzIHRoaXMgZmlsZSwKLSsgKiBvbmx5IHJlYXNvbiBzdHJpbmdzIHdpbGwg YmUgcHJlc2VydmVkLgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLSsvKiBCRUdJTiBF UlJPUiBDT0RFUyAqLwotKyNpZm5kZWYgT1BFTlNTTF9OT19FUlIKLSsKLSsjIGRlZmluZSBFUlJf RlVOQyhmdW5jKSBFUlJfUEFDSyhFUlJfTElCX0ZJUFMsZnVuYywwKQotKyMgZGVmaW5lIEVSUl9S RUFTT04ocmVhc29uKSBFUlJfUEFDSyhFUlJfTElCX0ZJUFMsMCxyZWFzb24pCi0rCi0rc3RhdGlj IEVSUl9TVFJJTkdfREFUQSBGSVBTX3N0cl9mdW5jdHNbXSA9IHsKLSsgICAge0VSUl9GVU5DKEZJ UFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyksICJkaF9idWlsdGluX2dlbnBhcmFtcyJ9LAotKyAg ICB7RVJSX0ZVTkMoRklQU19GX0RSQkdfUkVTRUVEKSwgImRyYmdfcmVzZWVkIn0sCi0rICAgIHtF UlJfRlVOQyhGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4yKSwgImRzYV9idWlsdGluX3BhcmFt Z2VuMiJ9LAotKyAgICB7RVJSX0ZVTkMoRklQU19GX0RTQV9ET19TSUdOKSwgIkRTQV9kb19zaWdu In0sCi0rICAgIHtFUlJfRlVOQyhGSVBTX0ZfRFNBX0RPX1ZFUklGWSksICJEU0FfZG9fdmVyaWZ5 In0sCi0rICAgIHtFUlJfRlVOQyhGSVBTX0ZfRUNESF9DT01QVVRFX0tFWSksICJFQ0RIX2NvbXB1 dGVfa2V5In0sCi0rICAgIHtFUlJfRlVOQyhGSVBTX0ZfRVZQX0NJUEhFUl9DVFhfTkVXKSwgIkVW UF9DSVBIRVJfQ1RYX25ldyJ9LAotKyAgICB7RVJSX0ZVTkMoRklQU19GX0VWUF9DSVBIRVJfQ1RY X1JFU0VUKSwgIkVWUF9DSVBIRVJfQ1RYX3Jlc2V0In0sCi0rICAgIHtFUlJfRlVOQyhGSVBTX0Zf RklQU19DSEVDS19EU0EpLCAiZmlwc19jaGVja19kc2EifSwKLSsgICAge0VSUl9GVU5DKEZJUFNf Rl9GSVBTX0NIRUNLX0VDKSwgImZpcHNfY2hlY2tfZWMifSwKLSsgICAge0VSUl9GVU5DKEZJUFNf Rl9GSVBTX0NIRUNLX1JTQSksICJmaXBzX2NoZWNrX3JzYSJ9LAotKyAgICB7RVJSX0ZVTkMoRklQ U19GX0ZJUFNfRFJCR19CWVRFUyksICJmaXBzX2RyYmdfYnl0ZXMifSwKLSsgICAge0VSUl9GVU5D KEZJUFNfRl9GSVBTX0RSQkdfQ0hFQ0spLCAiZmlwc19kcmJnX2NoZWNrIn0sCi0rICAgIHtFUlJf RlVOQyhGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RFU1QpLCAiZmlwc19kcmJnX2Nwcm5nX3Rlc3Qi fSwKLSsgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0spLCAiZmlwc19k cmJnX2Vycm9yX2NoZWNrIn0sCi0rICAgIHtFUlJfRlVOQyhGSVBTX0ZfRklQU19EUkJHX0dFTkVS QVRFKSwgIkZJUFNfZHJiZ19nZW5lcmF0ZSJ9LAotKyAgICB7RVJSX0ZVTkMoRklQU19GX0ZJUFNf RFJCR19JTklUKSwgIkZJUFNfZHJiZ19pbml0In0sCi0rICAgIHtFUlJfRlVOQyhGSVBTX0ZfRklQ U19EUkJHX0lOU1RBTlRJQVRFKSwgIkZJUFNfZHJiZ19pbnN0YW50aWF0ZSJ9LAotKyAgICB7RVJS X0ZVTkMoRklQU19GX0ZJUFNfRFJCR19ORVcpLCAiRklQU19kcmJnX25ldyJ9LAotKyAgICB7RVJS X0ZVTkMoRklQU19GX0ZJUFNfRFJCR19SRVNFRUQpLCAiRklQU19kcmJnX3Jlc2VlZCJ9LAotKyAg ICB7RVJSX0ZVTkMoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FUKSwgIkZJUFNfRFJCR19TSU5H TEVfS0FUIn0sCi0rICAgIHtFUlJfRlVOQyhGSVBTX0ZfRklQU19HRVRfRU5UUk9QWSksICJmaXBz X2dldF9lbnRyb3B5In0sCi0rICAgIHtFUlJfRlVOQyhGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9T RVQpLCAiRklQU19tb2R1bGVfbW9kZV9zZXQifSwKLSsgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBT X1BLRVlfU0lHTkFUVVJFX1RFU1QpLCAiZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0In0sCi0rICAg IHtFUlJfRlVOQyhGSVBTX0ZfRklQU19SQU5EX0JZVEVTKSwgIkZJUFNfcmFuZF9ieXRlcyJ9LAot KyAgICB7RVJSX0ZVTkMoRklQU19GX0ZJUFNfUkFORF9TRUVEKSwgIkZJUFNfcmFuZF9zZWVkIn0s Ci0rICAgIHtFUlJfRlVOQyhGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0QpLCAiRklQU19yYW5k X3NldF9tZXRob2QifSwKLSsgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTKSwg IkZJUFNfcmFuZF9zdGF0dXMifSwKLSsgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBTX1JTQV9CVUlM VElOX0tFWUdFTiksICJmaXBzX3JzYV9idWlsdGluX2tleWdlbiJ9LAotKyAgICB7RVJSX0ZVTkMo RklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTKSwgIkZJUFNfc2VsZnRlc3RfYWVzIn0sCi0rICAgIHtF UlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NNKSwgIkZJUFNfc2VsZnRlc3RfYWVz X2NjbSJ9LAotKyAgICB7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTSksICJG SVBTX3NlbGZ0ZXN0X2Flc19nY20ifSwKLSsgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZU RVNUX0FFU19YVFMpLCAiRklQU19zZWxmdGVzdF9hZXNfeHRzIn0sCi0rICAgIHtFUlJfRlVOQyhG SVBTX0ZfRklQU19TRUxGVEVTVF9DTUFDKSwgIkZJUFNfc2VsZnRlc3RfY21hYyJ9LAotKyAgICB7 RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTKSwgIkZJUFNfc2VsZnRlc3RfZGVzIn0s Ci0rICAgIHtFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EpLCAiRklQU19zZWxmdGVz dF9kc2EifSwKLSsgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0VDRFNBKSwgIkZJ UFNfc2VsZnRlc3RfZWNkc2EifSwKLSsgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNU X0hNQUMpLCAiRklQU19zZWxmdGVzdF9obWFjIn0sCi0rICAgIHtFUlJfRlVOQyhGSVBTX0ZfRklQ U19TRUxGVEVTVF9TSEExKSwgIkZJUFNfc2VsZnRlc3Rfc2hhMSJ9LAotKyAgICB7RVJSX0ZVTkMo RklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMiksICJGSVBTX3NlbGZ0ZXN0X3NoYTIifSwKLSsgICAg e0VSUl9GVU5DKEZJUFNfRl9PU1NMX0VDRFNBX1NJR05fU0lHKSwgIm9zc2xfZWNkc2Ffc2lnbl9z aWcifSwKLSsgICAge0VSUl9GVU5DKEZJUFNfRl9PU1NMX0VDRFNBX1ZFUklGWV9TSUcpLCAib3Nz bF9lY2RzYV92ZXJpZnlfc2lnIn0sCi0rICAgIHtFUlJfRlVOQyhGSVBTX0ZfUlNBX0JVSUxUSU5f S0VZR0VOKSwgInJzYV9idWlsdGluX2tleWdlbiJ9LAotKyAgICB7RVJSX0ZVTkMoRklQU19GX1JT QV9PU1NMX0lOSVQpLCAicnNhX29zc2xfaW5pdCJ9LAotKyAgICB7RVJSX0ZVTkMoRklQU19GX1JT QV9PU1NMX1BSSVZBVEVfREVDUllQVCksICJyc2Ffb3NzbF9wcml2YXRlX2RlY3J5cHQifSwKLSsg ICAge0VSUl9GVU5DKEZJUFNfRl9SU0FfT1NTTF9QUklWQVRFX0VOQ1JZUFQpLCAicnNhX29zc2xf cHJpdmF0ZV9lbmNyeXB0In0sCi0rICAgIHtFUlJfRlVOQyhGSVBTX0ZfUlNBX09TU0xfUFVCTElD X0RFQ1JZUFQpLCAicnNhX29zc2xfcHVibGljX2RlY3J5cHQifSwKLSsgICAge0VSUl9GVU5DKEZJ UFNfRl9SU0FfT1NTTF9QVUJMSUNfRU5DUllQVCksICJyc2Ffb3NzbF9wdWJsaWNfZW5jcnlwdCJ9 LAotKyAgICB7MCwgTlVMTH0KLSt9OwotKwotK3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRklQU19z dHJfcmVhc29uc1tdID0gewotKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfQURESVRJT05BTF9JTlBV VF9FUlJPUl9VTkRFVEVDVEVEKSwKLSsgICAgICJhZGRpdGlvbmFsIGlucHV0IGVycm9yIHVuZGV0 ZWN0ZWQifSwKLSsgICAge0VSUl9SRUFTT04oRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xP TkcpLAotKyAgICAgImFkZGl0aW9uYWwgaW5wdXQgdG9vIGxvbmcifSwKLSsgICAge0VSUl9SRUFT T04oRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVEKSwgImFscmVhZHkgaW5zdGFudGlhdGVkIn0s Ci0rICAgIHtFUlJfUkVBU09OKEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRCksICJkcmJnIG5v dCBpbml0aWFsaXNlZCJ9LAotKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfRFJCR19TVFVDSyksICJk cmJnIHN0dWNrIn0sCi0rICAgIHtFUlJfUkVBU09OKEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVU RUNURUQpLCAiZW50cm9weSBlcnJvciB1bmRldGVjdGVkIn0sCi0rICAgIHtFUlJfUkVBU09OKEZJ UFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRCksCi0rICAgICAiZW50cm9weSBu b3QgcmVxdWVzdGVkIGZvciByZXNlZWQifSwKLSsgICAge0VSUl9SRUFTT04oRklQU19SX0VOVFJP UFlfU09VUkNFX1NUVUNLKSwgImVudHJvcHkgc291cmNlIHN0dWNrIn0sCi0rICAgIHtFUlJfUkVB U09OKEZJUFNfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRyksICJlcnJvciBpbml0aWFsaXNpbmcg ZHJiZyJ9LAotKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJH KSwgImVycm9yIGluc3RhbnRpYXRpbmcgZHJiZyJ9LAotKyAgICB7RVJSX1JFQVNPTihGSVBTX1Jf RVJST1JfUkVUUklFVklOR19BRERJVElPTkFMX0lOUFVUKSwKLSsgICAgICJlcnJvciByZXRyaWV2 aW5nIGFkZGl0aW9uYWwgaW5wdXQifSwKLSsgICAge0VSUl9SRUFTT04oRklQU19SX0VSUk9SX1JF VFJJRVZJTkdfRU5UUk9QWSksICJlcnJvciByZXRyaWV2aW5nIGVudHJvcHkifSwKLSsgICAge0VS Ul9SRUFTT04oRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfTk9OQ0UpLCAiZXJyb3IgcmV0cmlldmlu ZyBub25jZSJ9LAotKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1Rf TUFUQ0gpLAotKyAgICAgImZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIn0sCi0rICAgIHtFUlJf UkVBU09OKEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQpLCAiZmlwcyBtb2RlIGFscmVhZHkg c2V0In0sCi0rICAgIHtFUlJfUkVBU09OKEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCksICJm aXBzIHNlbGZ0ZXN0IGZhaWxlZCJ9LAotKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfRlVOQ1RJT05f RVJST1IpLCAiZnVuY3Rpb24gZXJyb3IifSwKLSsgICAge0VSUl9SRUFTT04oRklQU19SX0dFTkVS QVRFX0VSUk9SKSwgImdlbmVyYXRlIGVycm9yIn0sCi0rICAgIHtFUlJfUkVBU09OKEZJUFNfUl9H RU5FUkFURV9FUlJPUl9VTkRFVEVDVEVEKSwKLSsgICAgICJnZW5lcmF0ZSBlcnJvciB1bmRldGVj dGVkIn0sCi0rICAgIHtFUlJfUkVBU09OKEZJUFNfUl9JTlNUQU5USUFURV9FUlJPUiksICJpbnN0 YW50aWF0ZSBlcnJvciJ9LAotKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfSU5URVJOQUxfRVJST1Ip LCAiaW50ZXJuYWwgZXJyb3IifSwKLSsgICAge0VSUl9SRUFTT04oRklQU19SX0lOVkFMSURfS0VZ X0xFTkdUSCksICJpbnZhbGlkIGtleSBsZW5ndGgifSwKLSsgICAge0VSUl9SRUFTT04oRklQU19S X0lOX0VSUk9SX1NUQVRFKSwgImluIGVycm9yIHN0YXRlIn0sCi0rICAgIHtFUlJfUkVBU09OKEZJ UFNfUl9LRVlfVE9PX1NIT1JUKSwgImtleSB0b28gc2hvcnQifSwKLSsgICAge0VSUl9SRUFTT04o RklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQpLCAibm9uY2UgZXJyb3IgdW5kZXRlY3RlZCJ9 LAotKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKSwgIm5vbiBmaXBzIG1l dGhvZCJ9LAotKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfTk9QUl9URVNUMV9GQUlMVVJFKSwgIm5v cHIgdGVzdDEgZmFpbHVyZSJ9LAotKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfTk9QUl9URVNUMl9G QUlMVVJFKSwgIm5vcHIgdGVzdDIgZmFpbHVyZSJ9LAotKyAgICB7RVJSX1JFQVNPTihGSVBTX1Jf Tk9UX0lOU1RBTlRJQVRFRCksICJub3QgaW5zdGFudGlhdGVkIn0sCi0rICAgIHtFUlJfUkVBU09O KEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCksICJwYWlyd2lzZSB0ZXN0IGZhaWxlZCJ9LAot KyAgICB7RVJSX1JFQVNPTihGSVBTX1JfUEVSU09OQUxJU0FUSU9OX0VSUk9SX1VOREVURUNURUQp LAotKyAgICAgInBlcnNvbmFsaXNhdGlvbiBlcnJvciB1bmRldGVjdGVkIn0sCi0rICAgIHtFUlJf UkVBU09OKEZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HKSwKLSsgICAgICJw ZXJzb25hbGlzYXRpb24gc3RyaW5nIHRvbyBsb25nIn0sCi0rICAgIHtFUlJfUkVBU09OKEZJUFNf Ul9QUl9URVNUMV9GQUlMVVJFKSwgInByIHRlc3QxIGZhaWx1cmUifSwKLSsgICAge0VSUl9SRUFT T04oRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUpLCAicHIgdGVzdDIgZmFpbHVyZSJ9LAotKyAgICB7 RVJSX1JFQVNPTihGSVBTX1JfUkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCksCi0rICAg ICAicmVxdWVzdCBsZW5ndGggZXJyb3IgdW5kZXRlY3RlZCJ9LAotKyAgICB7RVJSX1JFQVNPTihG SVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkcpLAotKyAgICAgInJlcXVlc3QgdG9vIGxh cmdlIGZvciBkcmJnIn0sCi0rICAgIHtFUlJfUkVBU09OKEZJUFNfUl9SRVNFRURfQ09VTlRFUl9F UlJPUiksICJyZXNlZWQgY291bnRlciBlcnJvciJ9LAotKyAgICB7RVJSX1JFQVNPTihGSVBTX1Jf UkVTRUVEX0VSUk9SKSwgInJlc2VlZCBlcnJvciJ9LAotKyAgICB7RVJSX1JFQVNPTihGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKSwgInNlbGZ0ZXN0IGZhaWxlZCJ9LAotKyAgICB7RVJSX1JFQVNPTihG SVBTX1JfU0VMRlRFU1RfRkFJTFVSRSksICJzZWxmdGVzdCBmYWlsdXJlIn0sCi0rICAgIHtFUlJf UkVBU09OKEZJUFNfUl9URVNUX0ZBSUxVUkUpLCAidGVzdCBmYWlsdXJlIn0sCi0rICAgIHtFUlJf UkVBU09OKEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKSwgInVuaW5zdGFudGlhdGUgZXJyb3Ii fSwKLSsgICAge0VSUl9SRUFTT04oRklQU19SX1VOSU5TVEFOVElBVEVfWkVST0lTRV9FUlJPUiks Ci0rICAgICAidW5pbnN0YW50aWF0ZSB6ZXJvaXNlIGVycm9yIn0sCi0rICAgIHtFUlJfUkVBU09O KEZJUFNfUl9VTlNVUFBPUlRFRF9EUkJHX1RZUEUpLCAidW5zdXBwb3J0ZWQgZHJiZyB0eXBlIn0s Ci0rICAgIHtFUlJfUkVBU09OKEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STSksICJ1bnN1cHBv cnRlZCBwbGF0Zm9ybSJ9LAotKyAgICB7MCwgTlVMTH0KLSt9OwotKwotKyNlbmRpZgotKwotK2lu dCBFUlJfbG9hZF9GSVBTX3N0cmluZ3Modm9pZCkKLSt7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0VS UgotKwotKyAgICBpZiAoRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nKEZJUFNfc3RyX2Z1bmN0c1swXS5l cnJvcikgPT0gTlVMTCkgewotKyAgICAgICAgRVJSX2xvYWRfc3RyaW5ncygwLCBGSVBTX3N0cl9m dW5jdHMpOwotKyAgICAgICAgRVJSX2xvYWRfc3RyaW5ncygwLCBGSVBTX3N0cl9yZWFzb25zKTsK LSsgICAgfQotKyNlbmRpZgotKyAgICByZXR1cm4gMTsKLSt9Ci1kaWZmIC11cCBvcGVuc3NsLTEu MS4waC9jcnlwdG8vZmlwcy9maXBzX2Vycy5jLmZpcHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2Zp cHMvZmlwc19lcnMuYwotLS0tIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfZXJzLmMu ZmlwcwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzNTIzNjg1NCArMDIwMAotKysrIG9wZW5zc2wtMS4x LjBoL2NyeXB0by9maXBzL2ZpcHNfZXJzLmMJMjAxOC0wMy0yOSAxNDo0NDoyNC42MzUyMzY4NTQg KzAyMDAKLUBAIC0wLDAgKzEsNyBAQAotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+ Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSAiZmlwc19lcnIuaCIKLSsjZWxz ZQotK3N0YXRpYyB2b2lkICpkdW1teSA9ICZkdW1teTsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5z c2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0x LjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMS4w aC9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBzCTIwMTgtMDMtMjkgMTQ6NDQ6 MjQuNjM1MjM2ODU0ICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19o bWFjX3NlbGZ0ZXN0LmMJMjAxOC0wMy0yOSAxNDo0NDoyNC42MzUyMzY4NTQgKzAyMDAKLUBAIC0w LDAgKzEsMTM0IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0r ICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0 cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3Ns L2htYWMuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdHlwZWRlZiBzdHJ1Y3QgewotKyAg ICBjb25zdCBFVlBfTUQgKigqYWxnKSAodm9pZCk7Ci0rICAgIGNvbnN0IGNoYXIgKmtleSwgKml2 OwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV07Ci0rfSBITUFDX0tB VDsKLSsKLStzdGF0aWMgY29uc3QgSE1BQ19LQVQgdmVjdG9yW10gPSB7Ci0rICAgIHtFVlBfc2hh MSwKLSsgICAgIC8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMv ZmlwczE5OC9maXBzLTE5OGEucGRmICovCi0rICAgICAiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAot KyAgICAgIlNhbXBsZSAjMiIsCi0rICAgICB7MHgwOSwgMHgyMiwgMHhkMywgMHg0MCwgMHg1Ziwg MHhhYSwgMHgzZCwgMHgxOSwKLSsgICAgICAweDRmLCAweDgyLCAweGE0LCAweDU4LCAweDMwLCAw eDczLCAweDdkLCAweDVjLAotKyAgICAgIDB4YzYsIDB4YzcsIDB4NWQsIDB4MjR9Ci0rICAgICB9 LAotKyAgICB7RVZQX3NoYTIyNCwKLSsgICAgIC8qIGp1c3Qga2VlcCBleHRlbmRpbmcgdGhlIGFi b3ZlLi4uICovCi0rICAgICAiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKyAgICAgIlNhbXBsZSAj MiIsCi0rICAgICB7MHhkZCwgMHhlZiwgMHgwYSwgMHg0MCwgMHhjYiwgMHg3ZCwgMHg1MCwgMHhm YiwKLSsgICAgICAweDZlLCAweGU2LCAweGNlLCAweGExLCAweDIwLCAweGJhLCAweDI2LCAweGFh LAotKyAgICAgIDB4MDgsIDB4ZjMsIDB4MDcsIDB4NzUsIDB4ODcsIDB4YjgsIDB4YWQsIDB4MWIs Ci0rICAgICAgMHg4YywgMHg4ZCwgMHgxMiwgMHhjN30KLSsgICAgIH0sCi0rICAgIHtFVlBfc2hh MjU2LAotKyAgICAgIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsgICAgICJTYW1wbGUgIzIiLAot KyAgICAgezB4YjgsIDB4ZjIsIDB4MGQsIDB4YjUsIDB4NDEsIDB4ZWEsIDB4NDMsIDB4MDksCi0r ICAgICAgMHhjYSwgMHg0ZSwgMHhhOSwgMHgzOCwgMHgwYywgMHhkMCwgMHhlOCwgMHgzNCwKLSsg ICAgICAweGY3LCAweDFmLCAweGJlLCAweDkxLCAweDc0LCAweGEyLCAweDYxLCAweDM4LAotKyAg ICAgIDB4MGQsIDB4YzEsIDB4N2UsIDB4YWUsIDB4NmEsIDB4MzQsIDB4NTEsIDB4ZDl9Ci0rICAg ICB9LAotKyAgICB7RVZQX3NoYTM4NCwKLSsgICAgICIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0r ICAgICAiU2FtcGxlICMyIiwKLSsgICAgIHsweDA4LCAweGJjLCAweGIwLCAweGRhLCAweDQ5LCAw eDFlLCAweDg3LCAweGFkLAotKyAgICAgIDB4OWEsIDB4MWQsIDB4NmEsIDB4Y2UsIDB4MjMsIDB4 YzUsIDB4MGIsIDB4ZjYsCi0rICAgICAgMHhiNywgMHgxOCwgMHgwNiwgMHhhNSwgMHg3NywgMHhj ZCwgMHg0OSwgMHgwNCwKLSsgICAgICAweDg5LCAweGYxLCAweGU2LCAweDIzLCAweDQ0LCAweDUx LCAweDUxLCAweDlmLAotKyAgICAgIDB4ODUsIDB4NTYsIDB4ODAsIDB4NzksIDB4MGMsIDB4YmQs IDB4NGQsIDB4NTAsCi0rICAgICAgMHhhNCwgMHg1ZiwgMHgyOSwgMHhlMywgMHg5MywgMHhmMCwg MHhlOCwgMHg3Zn0KLSsgICAgIH0sCi0rICAgIHtFVlBfc2hhNTEyLAotKyAgICAgIjAxMjM0NTY3 ODk6Ozw9Pj9AQUJDIiwKLSsgICAgICJTYW1wbGUgIzIiLAotKyAgICAgezB4ODAsIDB4OWQsIDB4 NDQsIDB4MDUsIDB4N2MsIDB4NWIsIDB4OTUsIDB4NDEsCi0rICAgICAgMHgwNSwgMHhiZCwgMHgw NCwgMHgxMywgMHgxNiwgMHhkYiwgMHgwZiwgMHhhYywKLSsgICAgICAweDQ0LCAweGQ1LCAweGE0 LCAweGQ1LCAweGQwLCAweDg5LCAweDJiLCAweGQwLAotKyAgICAgIDB4NGUsIDB4ODYsIDB4NjQs IDB4MTIsIDB4YzAsIDB4OTAsIDB4NzcsIDB4NjgsCi0rICAgICAgMHhmMSwgMHg4NywgMHhiNywg MHg3YywgMHg0ZiwgMHhhZSwgMHgyYywgMHgyZiwKLSsgICAgICAweDIxLCAweGE1LCAweGI1LCAw eDY1LCAweDlhLCAweDRmLCAweDRiLCAweGE3LAotKyAgICAgIDB4NDcsIDB4MDIsIDB4YTMsIDB4 ZGUsIDB4OWIsIDB4NTEsIDB4ZjEsIDB4NDUsCi0rICAgICAgMHhiZCwgMHg0ZiwgMHgyNSwgMHgy NywgMHg0MiwgMHg5OCwgMHg5OSwgMHgwNX0KLSsgICAgIH0sCi0rfTsKLSsKLStpbnQgRklQU19z ZWxmdGVzdF9obWFjKCkKLSt7Ci0rICAgIGludCBuOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVu OwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICBjb25zdCBF VlBfTUQgKm1kOwotKyAgICBjb25zdCBITUFDX0tBVCAqdDsKLSsKLSsgICAgZm9yIChuID0gMCwg dCA9IHZlY3RvcjsgbiA8IHNpemVvZih2ZWN0b3IpIC8gc2l6ZW9mKHZlY3RvclswXSk7IG4rKywg dCsrKSB7Ci0rICAgICAgICBtZCA9ICgqdC0+YWxnKSAoKTsKLSsgICAgICAgIEhNQUMobWQsIHQt PmtleSwgc3RybGVuKHQtPmtleSksCi0rICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFy ICopdC0+aXYsIHN0cmxlbih0LT5pdiksIG91dCwgJm91dGxlbik7Ci0rCi0rICAgICAgICBpZiAo bWVtY21wKG91dCwgdC0+a2F2YWwsIG91dGxlbikpIHsKLSsgICAgICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX1NFTEZURVNUX0hNQUMsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAg ICAgICAgIHJldHVybiAwOwotKyAgICAgICAgfQotKyAgICB9Ci0rICAgIHJldHVybiAxOwotK30K LSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5o LmZpcHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgKLS0tLSBvcGVuc3Ns LTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaC5maXBzCTIwMTgtMDMtMjkgMTQ6NDQ6MjQu NjM1MjM2ODU0ICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19sb2Ns LmgJMjAxOC0wMy0yOSAxNDo0NDoyNC42MzUyMzY4NTQgKzAyMDAKLUBAIC0wLDAgKzEsNzEgQEAK LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0r ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0r IyBpZmRlZiAgX19jcGx1c3BsdXMKLStleHRlcm4gIkMiIHsKLSsjIGVuZGlmCi0rCi0rIyBkZWZp bmUgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSAgICAgICAzMgotKyMgZGVmaW5lIGZpcHNfbG9h ZF9rZXlfY29tcG9uZW50KGNvbXAsIHByZSkgXAotKyAgICAgICAgY29tcCA9IEJOX2JpbjJibihw cmUjI18jI2NvbXAsIHNpemVvZihwcmUjI18jI2NvbXApLCBOVUxMKTsgXAotKyAgICAgICAgaWYg KCFjb21wKSBcCi0rICAgICAgICAgICAgICAgIGdvdG8gZXJyCi0rCi0rIyBkZWZpbmUgZmlwc19w b3N0X3N0YXJ0ZWQoaWQsIHN1YmlkLCBleCkgMQotKyMgZGVmaW5lIGZpcHNfcG9zdF9zdWNjZXNz KGlkLCBzdWJpZCwgZXgpIDEKLSsjIGRlZmluZSBmaXBzX3Bvc3RfZmFpbGVkKGlkLCBzdWJpZCwg ZXgpIDEKLSsjIGRlZmluZSBmaXBzX3Bvc3RfY29ycnVwdChpZCwgc3ViaWQsIGV4KSAxCi0rIyBk ZWZpbmUgZmlwc19wb3N0X3N0YXR1cygpIDEKLSsKLSsjIGlmZGVmICBfX2NwbHVzcGx1cwotK30K LSsjIGVuZGlmCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9m aXBzX21kLmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX21kLmMKLS0tLSBv cGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX21kLmMuZmlwcwkyMDE4LTAzLTI5IDE0OjQ0 OjI0LjYzNTIzNjg1NCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNf bWQuYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzNTIzNjg1NCArMDIwMAotQEAgLTAsMCArMSwxNDQg QEAKLSsvKiBmaXBzL2V2cC9maXBzX21kLmMgKi8KLSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5 OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVu Ci0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBpbXBsZW1l bnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4K LSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNv bW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl IGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0byBhbGwg Y29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotKyAq IGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wg ZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292 ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0aGUgaG9s ZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5cmln aHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNl cyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlzIHBh Y2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0 dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkg dXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBh dCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4 dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz IHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2Vt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSsg KiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3Vp bmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3Jh cGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVj aWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0aGUgYXBw cyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93 bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRl biBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkgRVhQ UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICogRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0 aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotKyAqIGRl cml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUg Y2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJp YnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQot KyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICog ICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu Ci0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlz IHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMg WW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0r ICoKLSsgKi8KLSsKLSsvKiBNaW5pbWFsIHN0YW5kYWxvbmUgRklQUyB2ZXJzaW9ucyBvZiBEaWdl c3Qgb3BlcmF0aW9ucyAqLwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rCi0rI2luY2x1 ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29i amVjdHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rY29uc3QgRVZQX01EICpGSVBT X2dldF9kaWdlc3RieW5pZChpbnQgbmlkKQotK3sKLSsgICAgc3dpdGNoIChuaWQpIHsKLSsgICAg Y2FzZSBOSURfc2hhMToKLSsgICAgICAgIHJldHVybiBFVlBfc2hhMSgpOwotKwotKyAgICBjYXNl IE5JRF9zaGEyMjQ6Ci0rICAgICAgICByZXR1cm4gRVZQX3NoYTIyNCgpOwotKwotKyAgICBjYXNl IE5JRF9zaGEyNTY6Ci0rICAgICAgICByZXR1cm4gRVZQX3NoYTI1NigpOwotKwotKyAgICBjYXNl IE5JRF9zaGEzODQ6Ci0rICAgICAgICByZXR1cm4gRVZQX3NoYTM4NCgpOwotKwotKyAgICBjYXNl IE5JRF9zaGE1MTI6Ci0rICAgICAgICByZXR1cm4gRVZQX3NoYTUxMigpOwotKwotKyAgICBkZWZh dWx0OgotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSt9Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYy5maXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0 by9maXBzL2ZpcHNfcG9zdC5jCi0tLS0gb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19w b3N0LmMuZmlwcwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzNjIzNjg3NyArMDIwMAotKysrIG9wZW5z c2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjM1 MjM2ODU0ICswMjAwCi1AQCAtMCwwICsxLDIyMiBAQAotKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29w eXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgot KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwot KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQot KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK LSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAq LwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGxpbWl0cy5oPgotKwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsKLSsvKiBQb3dlciBvbiBzZWxmIHRlc3QgKFBPU1QpIHN1cHBvcnQg ZnVuY3Rpb25zICovCi0rCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjIGluY2x1ZGUg ImludGVybmFsL2ZpcHNfaW50LmgiCi0rIyBpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsvKiBS dW4gYWxsIHNlbGZ0ZXN0cyAqLwotK2ludCBGSVBTX3NlbGZ0ZXN0KHZvaWQpCi0rewotKyAgICBp bnQgcnYgPSAxOwotKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfZHJiZygpKQotKyAgICAgICAgcnYg PSAwOwotKyAgICBpZiAoIUZJUFNfc2VsZnRlc3Rfc2hhMSgpKQotKyAgICAgICAgcnYgPSAwOwot KyAgICBpZiAoIUZJUFNfc2VsZnRlc3Rfc2hhMigpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBp ZiAoIUZJUFNfc2VsZnRlc3RfaG1hYygpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBpZiAoIUZJ UFNfc2VsZnRlc3RfY21hYygpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBpZiAoIUZJUFNfc2Vs ZnRlc3RfYWVzKCkpCi0rICAgICAgICBydiA9IDA7Ci0rICAgIGlmICghRklQU19zZWxmdGVzdF9h ZXNfY2NtKCkpCi0rICAgICAgICBydiA9IDA7Ci0rICAgIGlmICghRklQU19zZWxmdGVzdF9hZXNf Z2NtKCkpCi0rICAgICAgICBydiA9IDA7Ci0rICAgIGlmICghRklQU19zZWxmdGVzdF9hZXNfeHRz KCkpCi0rICAgICAgICBydiA9IDA7Ci0rICAgIGlmICghRklQU19zZWxmdGVzdF9kZXMoKSkKLSsg ICAgICAgIHJ2ID0gMDsKLSsgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X3JzYSgpKQotKyAgICAgICAg cnYgPSAwOwotKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfZWNkc2EoKSkKLSsgICAgICAgIHJ2ID0g MDsKLSsgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X2RzYSgpKQotKyAgICAgICAgcnYgPSAwOwotKyAg ICBpZiAoIUZJUFNfc2VsZnRlc3RfZGgoKSkKLSsgICAgICAgIHJ2ID0gMDsKLSsgICAgaWYgKCFG SVBTX3NlbGZ0ZXN0X2VjZGgoKSkKLSsgICAgICAgIHJ2ID0gMDsKLSsgICAgcmV0dXJuIHJ2Owot K30KLSsKLSsvKiBHZW5lcmFsaXplZCBwdWJsaWMga2V5IHRlc3Qgcm91dGluZS4gU2lnbnMgYW5k IHZlcmlmaWVzIHRoZSBkYXRhCi0rICogc3VwcGxpZWQgaW4gdGJzIHVzaW5nIG1lc2FnZSBkaWdl c3QgbWQgYW5kIHNldHRpbmcgb3B0aW9uIGRpZ2VzdAotKyAqIGZsYWdzIG1kX2ZsYWdzLiBJZiB0 aGUgJ2thdCcgcGFyYW1ldGVyIGlzIG5vdCBOVUxMIGl0IHdpbGwKLSsgKiBhZGRpdGlvbmFsbHkg Y2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIGl0OiBhIGtub3duIGFuc3dlciB0ZXN0Ci0rICog VGhlIHN0cmluZyAiZmFpbF9zdHIiIGlzIHVzZWQgZm9yIGlkZW50aWZpY2F0aW9uIHB1cnBvc2Vz IGluIGNhc2UKLSsgKiBvZiBmYWlsdXJlLiBJZiAicGtleSIgaXMgTlVMTCBqdXN0IHBlcmZvcm0g YSBtZXNzYWdlIGRpZ2VzdCBjaGVjay4KLSsgKi8KLSsKLStpbnQgZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KEVWUF9QS0VZICpwa2V5LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVuLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRVZQX01EICpkaWdlc3QsIHVuc2ln bmVkIGludCBmbGFncywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmZhaWxfc3RyKQotK3sKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgc2ln dG1wWzI1Nl0sICpzaWcgPSBzaWd0bXA7Ci0rICAgIHNpemVfdCBzaWdsZW4gPSBzaXplb2Yoc2ln dG1wKTsKLSsgICAgRVZQX01EX0NUWCAqbWN0eDsKLSsgICAgRVZQX1BLRVlfQ1RYICpwY3R4Owot KwotKyAgICBpZiAoZGlnZXN0ID09IE5VTEwpCi0rICAgICAgICBkaWdlc3QgPSBFVlBfc2hhMjU2 KCk7Ci0rCi0rICAgIG1jdHggPSBFVlBfTURfQ1RYX25ldygpOwotKwotKyAgICBpZiAoKEVWUF9Q S0VZX2lkKHBrZXkpID09IEVWUF9QS0VZX1JTQSkKLSsgICAgICAgICYmIChSU0Ffc2l6ZShFVlBf UEtFWV9nZXQwX1JTQShwa2V5KSkgPiBzaXplb2Yoc2lndG1wKSkpIHsKLSsgICAgICAgIHNpZyA9 IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKEVWUF9QS0VZX2dldDBfUlNBKHBrZXkpKSk7Ci0rICAg ICAgICBzaWdsZW4gPSBSU0Ffc2l6ZShFVlBfUEtFWV9nZXQwX1JTQShwa2V5KSk7Ci0rICAgIH0K LSsgICAgaWYgKCFzaWcgfHwgISBtY3R4KSB7Ci0rICAgICAgICBFVlBfTURfQ1RYX2ZyZWUobWN0 eCk7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsIEVS Ul9SX01BTExPQ19GQUlMVVJFKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rICAg IGlmICh0YnNsZW4gPT0gLTEpCi0rICAgICAgICB0YnNsZW4gPSBzdHJsZW4oKGNoYXIgKil0YnMp OwotKwotKyAgICBpZiAoRVZQX0RpZ2VzdFNpZ25Jbml0KG1jdHgsICZwY3R4LCBkaWdlc3QsIE5V TEwsIHBrZXkpIDw9IDApCi0rICAgICAgICBnb3RvIGVycm9yOwotKwotKyAgICBpZiAoZmxhZ3Mg PT0gRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpIHsKLSsgICAgICAgIEVWUF9QS0VZX0NUWF9zZXRf cnNhX3BhZGRpbmcocGN0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKTsKLSsgICAgICAgIEVWUF9Q S0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBjdHgsIDApOwotKyAgICB9Ci0rCi0rICAgIGlm IChFVlBfRGlnZXN0U2lnblVwZGF0ZShtY3R4LCB0YnMsIHRic2xlbikgPD0gMCkKLSsgICAgICAg IGdvdG8gZXJyb3I7Ci0rCi0rICAgIGlmIChFVlBfRGlnZXN0U2lnbkZpbmFsKG1jdHgsIHNpZywg JnNpZ2xlbikgPD0gMCkKLSsgICAgICAgIGdvdG8gZXJyb3I7Ci0rCi0rICAgIGlmIChrYXQgJiYg KChzaWdsZW4gIT0ga2F0bGVuKSB8fCBtZW1jbXAoa2F0LCBzaWcsIGthdGxlbikpKQotKyAgICAg ICAgZ290byBlcnJvcjsKLSsKLSsgICAgaWYgKEVWUF9EaWdlc3RWZXJpZnlJbml0KG1jdHgsICZw Y3R4LCBkaWdlc3QsIE5VTEwsIHBrZXkpIDw9IDApCi0rICAgICAgICBnb3RvIGVycm9yOwotKwot KyAgICBpZiAoZmxhZ3MgPT0gRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpIHsKLSsgICAgICAgIEVW UF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGN0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKTsK LSsgICAgICAgIEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBjdHgsIDApOwotKyAg ICB9Ci0rCi0rICAgIGlmIChFVlBfRGlnZXN0VmVyaWZ5VXBkYXRlKG1jdHgsIHRicywgdGJzbGVu KSA8PSAwKQotKyAgICAgICAgZ290byBlcnJvcjsKLSsKLSsgICAgcmV0ID0gRVZQX0RpZ2VzdFZl cmlmeUZpbmFsKG1jdHgsIHNpZywgc2lnbGVuKTsKLSsKLSsgZXJyb3I6Ci0rICAgIGlmIChzaWcg IT0gc2lndG1wKQotKyAgICAgICAgT1BFTlNTTF9mcmVlKHNpZyk7Ci0rICAgIEVWUF9NRF9DVFhf ZnJlZShtY3R4KTsKLSsgICAgaWYgKHJldCA8PSAwKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsIEZJUFNfUl9URVNUX0ZBSUxVUkUpOwotKyAgICAg ICAgaWYgKGZhaWxfc3RyKQotKyAgICAgICAgICAgIEVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiVHlw ZT0iLCBmYWlsX3N0cik7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICByZXR1cm4g MTsKLSt9Ci0rCi0rLyogR2VuZXJhbGl6ZWQgc3ltbWV0cmljIGNpcGhlciB0ZXN0IHJvdXRpbmUu IEVuY3J5cHQgZGF0YSwgdmVyaWZ5IHJlc3VsdAotKyAqIGFnYWluc3Qga25vd24gYW5zd2VyLCBk ZWNyeXB0IGFuZCBjb21wYXJlIHdpdGggb3JpZ2luYWwgcGxhaW50ZXh0LgotKyAqLwotKwotK2lu dCBmaXBzX2NpcGhlcl90ZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIg KmNpcGhlciwKLSsgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXks Ci0rICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAotKyAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsIGludCBsZW4pCi0r ewotKyAgICB1bnNpZ25lZCBjaGFyIHBsdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOwot KyAgICB1bnNpZ25lZCBjaGFyIGNpdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOwotKwot KyAgICBPUEVOU1NMX2Fzc2VydChsZW4gPD0gRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0r ICAgIG1lbXNldChwbHRtcCwgMCwgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rICAgIG1l bXNldChjaXRtcCwgMCwgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rCi0rICAgIGlmIChF VlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMSkgPD0gMCkKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICBpZiAoRVZQX0NpcGhlcihjdHgsIGNpdG1wLCBwbGFpbnRl eHQsIGxlbikgPD0gMCkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKGNpdG1w LCBjaXBoZXJ0ZXh0LCBsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChFVlBfQ2lw aGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMCkgPD0gMCkKLSsgICAgICAg IHJldHVybiAwOwotKyAgICBpZiAoRVZQX0NpcGhlcihjdHgsIHBsdG1wLCBjaXRtcCwgbGVuKSA8 PSAwKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4 dCwgbGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rI2VuZGlm Ci1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmguZmlw cyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgKLS0tLSBvcGVuc3Ns LTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmguZmlwcwkyMDE4LTAzLTI5IDE0OjQ0 OjI0LjYzNjIzNjg3NyArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNf cmFuZF9sY2wuaAkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzNjIzNjg3NyArMDIwMAotQEAgLTAsMCAr MSwyMDkgQEAKLSsvKiBmaXBzL3JhbmQvZmlwc19yYW5kX2xjbC5oICovCi0rLyogV3JpdHRlbiBi eSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NM Ci0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykg MjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK LSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8K LSsKLSt0eXBlZGVmIHN0cnVjdCBkcmJnX2hhc2hfY3R4X3N0IERSQkdfSEFTSF9DVFg7Ci0rdHlw ZWRlZiBzdHJ1Y3QgZHJiZ19obWFjX2N0eF9zdCBEUkJHX0hNQUNfQ1RYOwotK3R5cGVkZWYgc3Ry dWN0IGRyYmdfY3RyX2N0eF9zdCBEUkJHX0NUUl9DVFg7Ci0rCi0rLyogODg4IGJpdHMgZnJvbSAx MC4xIHRhYmxlIDIgKi8KLSsjZGVmaW5lIEhBU0hfUFJOR19NQVhfU0VFRExFTiAgIDExMQotKwot K3N0cnVjdCBkcmJnX2hhc2hfY3R4X3N0IHsKLSsgICAgY29uc3QgRVZQX01EICptZDsKLSsgICAg RVZQX01EX0NUWCAqbWN0eDsKLSsgICAgdW5zaWduZWQgY2hhciBWW0hBU0hfUFJOR19NQVhfU0VF RExFTl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgQ1tIQVNIX1BSTkdfTUFYX1NFRURMRU5dOwotKyAg ICAvKiBUZW1wb3JhcnkgdmFsdWUgc3RvcmFnZTogc2hvdWxkIGFsd2F5cyBleGNlZWQgbWF4IGRp Z2VzdCBsZW5ndGggKi8KLSsgICAgdW5zaWduZWQgY2hhciB2dG1wW0hBU0hfUFJOR19NQVhfU0VF RExFTl07Ci0rfTsKLSsKLStzdHJ1Y3QgZHJiZ19obWFjX2N0eF9zdCB7Ci0rICAgIGNvbnN0IEVW UF9NRCAqbWQ7Ci0rICAgIEhNQUNfQ1RYICpoY3R4OwotKyAgICB1bnNpZ25lZCBjaGFyIEtbRVZQ X01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgY2hhciBWW0VWUF9NQVhfTURfU0laRV07Ci0r fTsKLSsKLStzdHJ1Y3QgZHJiZ19jdHJfY3R4X3N0IHsKLSsgICAgQUVTX0tFWSBrczsKLSsgICAg c2l6ZV90IGtleWxlbjsKLSsgICAgdW5zaWduZWQgY2hhciBLWzMyXTsKLSsgICAgdW5zaWduZWQg Y2hhciBWWzE2XTsKLSsgICAgLyogVGVtcCB2YXJpYWJsZXMgdXNlZCBieSBkZXJpdmF0aW9uIGZ1 bmN0aW9uICovCi0rICAgIEFFU19LRVkgZGZfa3M7Ci0rICAgIEFFU19LRVkgZGZfa3hrczsKLSsg ICAgLyogVGVtcG9yYXJ5IGJsb2NrIHN0b3JhZ2UgdXNlZCBieSBjdHJfZGYgKi8KLSsgICAgdW5z aWduZWQgY2hhciBibHRtcFsxNl07Ci0rICAgIHNpemVfdCBibHRtcF9wb3M7Ci0rICAgIHVuc2ln bmVkIGNoYXIgS1hbNDhdOwotK307Ci0rCi0rLyogRFJCRyBpbnRlcm5hbCBmbGFncyAqLwotKwot Ky8qIEZ1bmN0aW9ucyBzaG91bGRuJ3QgY2FsbCBlcnIgbGlicmFyeSAqLwotKyNkZWZpbmUgRFJC R19GTEFHX05PRVJSICAgICAgICAgICAgICAgICAweDEKLSsvKiBDdXN0b20gcmVzZWVkIGNoZWNr aW5nICovCi0rI2RlZmluZSBEUkJHX0NVU1RPTV9SRVNFRUQgICAgICAgICAgICAgIDB4MgotKwot Ky8qIERSQkcgc3RhdHVzIHZhbHVlcyAqLwotKy8qIG5vdCBpbml0aWFsaXNlZCAqLwotKyNkZWZp bmUgRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCAgICAgICAwCi0rLyogb2sgYW5kIHJlYWR5IHRv IGdlbmVyYXRlIHJhbmRvbSBiaXRzICovCi0rI2RlZmluZSBEUkJHX1NUQVRVU19SRUFEWSAgICAg ICAgICAgICAgIDEKLSsvKiByZXNlZWQgcmVxdWlyZWQgKi8KLSsjZGVmaW5lIERSQkdfU1RBVFVT X1JFU0VFRCAgICAgICAgICAgICAgMgotKy8qIGZhdGFsIGVycm9yIGNvbmRpdGlvbiAqLwotKyNk ZWZpbmUgRFJCR19TVEFUVVNfRVJST1IgICAgICAgICAgICAgICAzCi0rCi0rLyogQSBkZWZhdWx0 IG1heGltdW0gbGVuZ3RoOiBsYXJnZXIgdGhhbiBhbnkgcmVhc29uYWJsZSB2YWx1ZSB1c2VkIGlu IHByYXRpY2UgKi8KLSsKLSsjZGVmaW5lIERSQkdfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICAg MHg3ZmZmZmZmMAotKy8qIE1heGltdW0gRFJCRyBibG9jayBsZW5ndGg6IGFsbCBtZCBzaXplcyBh cmUgYmlnZ2VyIHRoYW4gY2lwaGVyIGJsb2NrcyBzaXplcwotKyAqIHNvIHVzZSBtYXggZGlnZXN0 IGxlbmd0aC4KLSsgKi8KLSsjZGVmaW5lIERSQkdfTUFYX0JMT0NLICAgICAgICAgICAgICAgICAg RVZQX01BWF9NRF9TSVpFCi0rCi0rI2RlZmluZSBEUkJHX0hFQUxUSF9JTlRFUlZBTCAgICAgICAg ICAgICgxIDw8IDI0KQotKwotKy8qIERSQkcgY29udGV4dCBzdHJ1Y3R1cmUgKi8KLSsKLStzdHJ1 Y3QgZHJiZ19jdHhfc3QgewotKyAgICAvKiBGaXJzdCB0eXBlcyBjb21tb24gdG8gYWxsIGltcGxl bWVudGF0aW9ucyAqLwotKyAgICAvKiBEUkJHIHR5cGU6IGEgTklEIGZvciB0aGUgdW5kZXJseWlu ZyBhbGdvcml0aG0gKi8KLSsgICAgaW50IHR5cGU7Ci0rICAgIC8qIFZhcmlvdXMgZXh0ZXJuYWwg ZmxhZ3MgKi8KLSsgICAgdW5zaWduZWQgaW50IHhmbGFnczsKLSsgICAgLyogVmFyaW91cyBpbnRl cm5hbCB1c2Ugb25seSBmbGFncyAqLwotKyAgICB1bnNpZ25lZCBpbnQgaWZsYWdzOwotKyAgICAv KiBVc2VkIGZvciBwZXJpb2RpYyBoZWFsdGggY2hlY2tzICovCi0rICAgIGludCBoZWFsdGhfY2hl Y2tfY250LCBoZWFsdGhfY2hlY2tfaW50ZXJ2YWw7Ci0rCi0rICAgIC8qIFRoZSBmb2xsb3dpbmcg cGFyYW1ldGVycyBhcmUgc2V0dXAgYnkgbWVjaGFuaXNtIGRyYmdfaW5pdCgpIGNhbGwgKi8KLSsg ICAgaW50IHN0cmVuZ3RoOwotKyAgICBzaXplX3QgYmxvY2tsZW5ndGg7Ci0rICAgIHNpemVfdCBt YXhfcmVxdWVzdDsKLSsKLSsgICAgc2l6ZV90IG1pbl9lbnRyb3B5LCBtYXhfZW50cm9weTsKLSsg ICAgc2l6ZV90IG1pbl9ub25jZSwgbWF4X25vbmNlOwotKyAgICBzaXplX3QgbWF4X3BlcnMsIG1h eF9hZGluOwotKyAgICB1bnNpZ25lZCBpbnQgcmVzZWVkX2NvdW50ZXI7Ci0rICAgIHVuc2lnbmVk IGludCByZXNlZWRfaW50ZXJ2YWw7Ci0rICAgIHNpemVfdCBzZWVkbGVuOwotKyAgICBpbnQgc3Rh dHVzOwotKyAgICAvKiBBcHBsaWNhdGlvbiBkYXRhOiB0eXBpY2FsbHkgdXNlZCBieSB0ZXN0IGdl dF9lbnRyb3B5ICovCi0rICAgIHZvaWQgKmFwcF9kYXRhOwotKyAgICAvKiBJbXBsZW1lbnRhdGlv biBzcGVjaWZpYyBzdHJ1Y3R1cmVzICovCi0rICAgIHVuaW9uIHsKLSsgICAgICAgIERSQkdfSEFT SF9DVFggaGFzaDsKLSsgICAgICAgIERSQkdfSE1BQ19DVFggaG1hYzsKLSsgICAgICAgIERSQkdf Q1RSX0NUWCBjdHI7Ci0rICAgIH0gZDsKLSsgICAgLyogSW5pdGlhbGlhc2UgUFJORyBhbmQgc2V0 dXAgY2FsbGJhY2tzIGJlbG93ICovCi0rICAgIGludCAoKmluaXQpIChEUkJHX0NUWCAqY3R4LCBp bnQgbmlkLCBpbnQgc2VjdXJpdHksIHVuc2lnbmVkIGludCBmbGFncyk7Ci0rICAgIC8qIEludGFu dGlhdGUgUFJORyAqLwotKyAgICBpbnQgKCppbnN0YW50aWF0ZSkgKERSQkdfQ1RYICpjdHgsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3Qg ZW50bGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5v bmNlLCBzaXplX3Qgbm9uY2VsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pOwotKyAgICAvKiByZXNlZWQgKi8KLSsg ICAgaW50ICgqcmVzZWVkKSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAotKyAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7Ci0rICAgIC8qIGdl bmVyYXQgb3V0cHV0ICovCi0rICAgIGludCAoKmdlbmVyYXRlKSAoRFJCR19DVFggKmN0eCwKLSsg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCi0r ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFk aW5sZW4pOwotKyAgICAvKiB1bmluc3RhbnRpYXRlICovCi0rICAgIGludCAoKnVuaW5zdGFudGlh dGUpIChEUkJHX0NUWCAqY3R4KTsKLSsKLSsgICAgLyogRW50cm9weSBzb3VyY2UgYmxvY2sgbGVu Z3RoICovCi0rICAgIHNpemVfdCBlbnRyb3B5X2Jsb2NrbGVuOwotKwotKyAgICAvKiBlbnRyb3B5 IGdhdGhlcmluZyBmdW5jdGlvbiAqLwotKyAgICBzaXplX3QgKCpnZXRfZW50cm9weSkgKERSQkdf Q1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pOwotKyAgICAv KiBJbmRpY2F0ZXMgd2UgaGF2ZSBmaW5pc2hlZCB3aXRoIGVudHJvcHkgYnVmZmVyICovCi0rICAg IHZvaWQgKCpjbGVhbnVwX2VudHJvcHkpIChEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpv dXQsIHNpemVfdCBvbGVuKTsKLSsKLSsgICAgLyogbm9uY2UgZ2F0aGVyaW5nIGZ1bmN0aW9uICov Ci0rICAgIHNpemVfdCAoKmdldF9ub25jZSkgKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIg Kipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1p bl9sZW4sIHNpemVfdCBtYXhfbGVuKTsKLSsgICAgLyogSW5kaWNhdGVzIHdlIGhhdmUgZmluaXNo ZWQgd2l0aCBub25jZSBidWZmZXIgKi8KLSsgICAgdm9pZCAoKmNsZWFudXBfbm9uY2UpIChEUkJH X0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsKLSsKLSsgICAgLyog Q29udGludW91cyByYW5kb20gbnVtYmVyIHRlc3QgdGVtcG9yYXJ5IGFyZWEgKi8KLSsgICAgLyog TGFzdCBibG9jayAqLwotKyAgICB1bnNpZ25lZCBjaGFyIGxiW0VWUF9NQVhfTURfU0laRV07Ci0r ICAgIC8qIHNldCBpZiBsYiBpcyB2YWxpZCAqLwotKyAgICBpbnQgbGJfdmFsaWQ7Ci0rCi0rICAg IC8qIENhbGxiYWNrcyB1c2VkIHdoZW4gY2FsbGVkIHRocm91Z2ggUkFORCBpbnRlcmZhY2UgKi8K LSsgICAgLyogR2V0IGFueSBhZGRpdGlvbmFsIGlucHV0IGZvciBnZW5lcmF0ZSAqLwotKyAgICBz aXplX3QgKCpnZXRfYWRpbikgKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KTsK LSsgICAgdm9pZCAoKmNsZWFudXBfYWRpbikgKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIg Km91dCwgc2l6ZV90IG9sZW4pOwotKyAgICAvKiBDYWxsYmFjayBmb3IgUkFORF9zZWVkKCksIFJB TkRfYWRkKCkgKi8KLSsgICAgaW50ICgqcmFuZF9zZWVkX2NiKSAoRFJCR19DVFggKmN0eCwgY29u c3Qgdm9pZCAqYnVmLCBpbnQgbnVtKTsKLSsgICAgaW50ICgqcmFuZF9hZGRfY2IpIChEUkJHX0NU WCAqY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51 bSwgZG91YmxlIGVudHJvcHkpOwotK307Ci0rCi0raW50IGZpcHNfZHJiZ19jdHJfaW5pdChEUkJH X0NUWCAqZGN0eCk7Ci0raW50IGZpcHNfZHJiZ19oYXNoX2luaXQoRFJCR19DVFggKmRjdHgpOwot K2ludCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KTsKLStpbnQgZmlwc19kcmJn X2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwgdW5zaWduZWQgaW50IGZsYWdzKTsKLStpbnQg Zmlwc19kcmJnX2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIg Km91dCk7Ci0rCi0rI2RlZmluZSBGSVBTX2RpZ2VzdGluaXQgRVZQX0RpZ2VzdEluaXQKLSsjZGVm aW5lIEZJUFNfZGlnZXN0dXBkYXRlIEVWUF9EaWdlc3RVcGRhdGUKLSsjZGVmaW5lIEZJUFNfZGln ZXN0ZmluYWwgRVZQX0RpZ2VzdEZpbmFsCi0rI2RlZmluZSBNX0VWUF9NRF9zaXplIEVWUF9NRF9z aXplCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMu ZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMKLS0tLSBvcGVu c3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMuZmlwcwkyMDE4LTAzLTI5IDE0 OjQ0OjI0LjYzNjIzNjg3NyArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2Zp cHNfcmFuZF9saWIuYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzNjIzNjg3NyArMDIwMAotQEAgLTAs MCArMSwyMzQgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsg KiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0r ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsvKiBJZiB3ZSBkb24n dCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgc3RydWN0IHRpbWV2YWwgd29uJ3QKLSsg ICBiZSBkZWZpbmVkIGFuZCBnZXR0aW1lb2ZkYXkoKSB3b24ndCBiZSBkZWNsYXJlZCB3aXRoIHN0 cmljdCBjb21waWxlcnMKLSsgICBsaWtlIERFQyBDIGluIEFOU0kgQyBtb2RlLiAgKi8KLSsjaWZu ZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKLSsjIGRlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVO REVEIDEKLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJpbnRlcm5hbC9maXBzX2ludC5oIgotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmICEo ZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMikgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktT KSkKLSsjIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0rI2VuZGlmCi0rI2lmIGRlZmluZWQoT1BFTlNT TF9TWVNfVlhXT1JLUykKLSsjIGluY2x1ZGUgPHRpbWUuaD4KLSsjZW5kaWYKLSsjaWZuZGVmIE9Q RU5TU0xfU1lTX1dJTjMyCi0rIyBpZmRlZiBPUEVOU1NMX1VOSVNURAotKyMgIGluY2x1ZGUgT1BF TlNTTF9VTklTVEQKLSsjIGVsc2UKLSsjICBpbmNsdWRlIDx1bmlzdGQuaD4KLSsjIGVuZGlmCi0r I2VuZGlmCi0rCi0rLyogRklQUyBBUEkgZm9yIFBSTkcgdXNlLiBTaW1pbGFyIHRvIFJBTkQgZnVu Y3Rpb25hbGl0eSBidXQgd2l0aG91dAotKyAqIEVOR0lORSBhbmQgYWRkaXRpb25hbCBjaGVja2lu ZyBmb3Igbm9uLUZJUFMgcmFuZCBtZXRob2RzLgotKyAqLwotKwotK3N0YXRpYyBjb25zdCBSQU5E X01FVEhPRCAqZmlwc19yYW5kX21ldGggPSBOVUxMOwotK3N0YXRpYyBpbnQgZmlwc19hcHByb3Zl ZF9yYW5kX21ldGggPSAwOwotK3N0YXRpYyBpbnQgZmlwc19yYW5kX2JpdHMgPSAwOwotKwotKy8q IEFsbG93cyBhcHBsaWNhdGlvbiB0byBvdmVycmlkZSBudW1iZXIgb2YgYml0cyBhbmQgdXNlcyBu b24tRklQUyBtZXRob2RzICovCi0rdm9pZCBGSVBTX3JhbmRfc2V0X2JpdHMoaW50IG5iaXRzKQot K3sKLSsgICAgZmlwc19yYW5kX2JpdHMgPSBuYml0czsKLSt9Ci0rCi0raW50IEZJUFNfcmFuZF9z ZXRfbWV0aG9kKGNvbnN0IFJBTkRfTUVUSE9EICptZXRoKQotK3sKLSsgICAgaWYgKCFmaXBzX3Jh bmRfYml0cykgewotKyAgICAgICAgaWYgKG1ldGggPT0gRklQU19kcmJnX21ldGhvZCgpKQotKyAg ICAgICAgICAgIGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMTsKLSsgICAgICAgIGVsc2Ugewot KyAgICAgICAgICAgIGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMDsKLSsgICAgICAgICAgICBp ZiAoRklQU19tb2R1bGVfbW9kZSgpKSB7Ci0rICAgICAgICAgICAgICAgIEZJUFNlcnIoRklQU19G X0ZJUFNfUkFORF9TRVRfTUVUSE9ELCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsgICAgICAg ICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotKyAgICB9Ci0r ICAgIGZpcHNfcmFuZF9tZXRoID0gbWV0aDsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK2NvbnN0 IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfZ2V0X21ldGhvZCh2b2lkKQotK3sKLSsgICAgcmV0dXJu IGZpcHNfcmFuZF9tZXRoOwotK30KLSsKLSt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKQotK3sK LSsgICAgaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5jbGVhbnVwKQotKyAg ICAgICAgZmlwc19yYW5kX21ldGgtPmNsZWFudXAoKTsKLSt9Ci0rCi0raW50IEZJUFNfcmFuZF9z ZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSkKLSt7Ci0rICAgIGlmICghZmlwc19hcHByb3Zl ZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX1JBTkRfU0VFRCwgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgfQotKyAgICBpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21l dGgtPnNlZWQpCi0rICAgICAgICBmaXBzX3JhbmRfbWV0aC0+c2VlZChidWYsIG51bSk7Ci0rICAg IHJldHVybiAxOwotK30KLSsKLStpbnQgRklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1 ZiwgaW50IG51bSkKLSt7Ci0rICAgIGlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQ U19tb2R1bGVfbW9kZSgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfQllU RVMsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0K LSsgICAgaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5ieXRlcykKLSsgICAg ICAgIHJldHVybiBmaXBzX3JhbmRfbWV0aC0+Ynl0ZXMoYnVmLCBudW0pOwotKyAgICByZXR1cm4g MDsKLSt9Ci0rCi0raW50IEZJUFNfcmFuZF9zdGF0dXModm9pZCkKLSt7Ci0rICAgIGlmICghZmlw c19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKSB7Ci0rICAgICAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsK LSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGlmIChmaXBzX3JhbmRfbWV0aCAmJiBm aXBzX3JhbmRfbWV0aC0+c3RhdHVzKQotKyAgICAgICAgcmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5z dGF0dXMoKTsKLSsgICAgcmV0dXJuIDA7Ci0rfQotKwotKy8qIFJldHVybiBpbnN0YW50aWF0ZWQg c3RyZW5ndGggb2YgUFJORy4gRm9yIERSQkcgdGhpcyBpcyBhbiBpbnRlcm5hbAotKyAqIHBhcmFt ZXRlci4gQW55IG90aGVyIHR5cGUgb2YgUFJORyBpcyBub3QgYXBwcm92ZWQgYW5kIHJldHVybnMg MCBpbgotKyAqIEZJUFMgbW9kZSBhbmQgbWF4aW11bSAyNTYgb3V0c2lkZSBGSVBTIG1vZGUuCi0r ICovCi0rCi0raW50IEZJUFNfcmFuZF9zdHJlbmd0aCh2b2lkKQotK3sKLSsgICAgaWYgKGZpcHNf cmFuZF9iaXRzKQotKyAgICAgICAgcmV0dXJuIGZpcHNfcmFuZF9iaXRzOwotKyAgICBpZiAoZmlw c19hcHByb3ZlZF9yYW5kX21ldGggPT0gMSkKLSsgICAgICAgIHJldHVybiBGSVBTX2RyYmdfZ2V0 X3N0cmVuZ3RoKEZJUFNfZ2V0X2RlZmF1bHRfZHJiZygpKTsKLSsgICAgZWxzZSBpZiAoZmlwc19h cHByb3ZlZF9yYW5kX21ldGggPT0gMCkgewotKyAgICAgICAgaWYgKEZJUFNfbW9kdWxlX21vZGUo KSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIGVsc2UKLSsgICAgICAgICAgICBy ZXR1cm4gMjU2OwotKyAgICB9Ci0rICAgIHJldHVybiAwOwotK30KLSsKLSt2b2lkIEZJUFNfZ2V0 X3RpbWV2ZWModW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nICpwY3RyKQotK3sKLSsj IGlmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rICAgIEZJTEVUSU1FIGZ0OwotKyMgZWxpZiBkZWZp bmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCi0rICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKLSsjIGVs c2UKLSsgICAgc3RydWN0IHRpbWV2YWwgdHY7Ci0rIyBlbmRpZgotKwotKyMgaWZuZGVmIEdFVFBJ RF9JU19NRUFOSU5HTEVTUwotKyAgICB1bnNpZ25lZCBsb25nIHBpZDsKLSsjIGVuZGlmCi0rCi0r IyBpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKyAgICBHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgm ZnQpOwotKyAgICBidWZbMF0gPSAodW5zaWduZWQgY2hhcikoZnQuZHdIaWdoRGF0ZVRpbWUgJiAw eGZmKTsKLSsgICAgYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpKChmdC5kd0hpZ2hEYXRlVGltZSA+ PiA4KSAmIDB4ZmYpOwotKyAgICBidWZbMl0gPSAodW5zaWduZWQgY2hhcikoKGZ0LmR3SGlnaERh dGVUaW1lID4+IDE2KSAmIDB4ZmYpOwotKyAgICBidWZbM10gPSAodW5zaWduZWQgY2hhcikoKGZ0 LmR3SGlnaERhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOwotKyAgICBidWZbNF0gPSAodW5zaWduZWQg Y2hhcikoZnQuZHdMb3dEYXRlVGltZSAmIDB4ZmYpOwotKyAgICBidWZbNV0gPSAodW5zaWduZWQg Y2hhcikoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKLSsgICAgYnVmWzZdID0gKHVu c2lnbmVkIGNoYXIpKChmdC5kd0xvd0RhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOwotKyAgICBidWZb N10gPSAodW5zaWduZWQgY2hhcikoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gMjQpICYgMHhmZik7Ci0r IyBlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKLSsgICAgY2xvY2tfZ2V0dGltZShD TE9DS19SRUFMVElNRSwgJnRzKTsKLSsgICAgYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpKHRzLnR2 X3NlYyAmIDB4ZmYpOwotKyAgICBidWZbMV0gPSAodW5zaWduZWQgY2hhcikoKHRzLnR2X3NlYyA+ PiA4KSAmIDB4ZmYpOwotKyAgICBidWZbMl0gPSAodW5zaWduZWQgY2hhcikoKHRzLnR2X3NlYyA+ PiAxNikgJiAweGZmKTsKLSsgICAgYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh0cy50dl9zZWMg Pj4gMjQpICYgMHhmZik7Ci0rICAgIGJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSh0cy50dl9uc2Vj ICYgMHhmZik7Ci0rICAgIGJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSgodHMudHZfbnNlYyA+PiA4 KSAmIDB4ZmYpOwotKyAgICBidWZbNl0gPSAodW5zaWduZWQgY2hhcikoKHRzLnR2X25zZWMgPj4g MTYpICYgMHhmZik7Ci0rICAgIGJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSgodHMudHZfbnNlYyA+ PiAyNCkgJiAweGZmKTsKLSsjIGVsc2UKLSsgICAgZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0r ICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSh0di50dl9zZWMgJiAweGZmKTsKLSsgICAgYnVm WzFdID0gKHVuc2lnbmVkIGNoYXIpKCh0di50dl9zZWMgPj4gOCkgJiAweGZmKTsKLSsgICAgYnVm WzJdID0gKHVuc2lnbmVkIGNoYXIpKCh0di50dl9zZWMgPj4gMTYpICYgMHhmZik7Ci0rICAgIGJ1 ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSgodHYudHZfc2VjID4+IDI0KSAmIDB4ZmYpOwotKyAgICBi dWZbNF0gPSAodW5zaWduZWQgY2hhcikodHYudHZfdXNlYyAmIDB4ZmYpOwotKyAgICBidWZbNV0g PSAodW5zaWduZWQgY2hhcikoKHR2LnR2X3VzZWMgPj4gOCkgJiAweGZmKTsKLSsgICAgYnVmWzZd ID0gKHVuc2lnbmVkIGNoYXIpKCh0di50dl91c2VjID4+IDE2KSAmIDB4ZmYpOwotKyAgICBidWZb N10gPSAodW5zaWduZWQgY2hhcikoKHR2LnR2X3VzZWMgPj4gMjQpICYgMHhmZik7Ci0rIyBlbmRp ZgotKyAgICBidWZbOF0gPSAodW5zaWduZWQgY2hhcikoKnBjdHIgJiAweGZmKTsKLSsgICAgYnVm WzldID0gKHVuc2lnbmVkIGNoYXIpKCgqcGN0ciA+PiA4KSAmIDB4ZmYpOwotKyAgICBidWZbMTBd ID0gKHVuc2lnbmVkIGNoYXIpKCgqcGN0ciA+PiAxNikgJiAweGZmKTsKLSsgICAgYnVmWzExXSA9 ICh1bnNpZ25lZCBjaGFyKSgoKnBjdHIgPj4gMjQpICYgMHhmZik7Ci0rCi0rICAgICgqcGN0cikr KzsKLSsKLSsjIGlmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKLSsgICAgcGlkID0gKHVuc2ln bmVkIGxvbmcpZ2V0cGlkKCk7Ci0rICAgIGJ1ZlsxMl0gPSAodW5zaWduZWQgY2hhcikocGlkICYg MHhmZik7Ci0rICAgIGJ1ZlsxM10gPSAodW5zaWduZWQgY2hhcikoKHBpZCA+PiA4KSAmIDB4ZmYp OwotKyAgICBidWZbMTRdID0gKHVuc2lnbmVkIGNoYXIpKChwaWQgPj4gMTYpICYgMHhmZik7Ci0r ICAgIGJ1ZlsxNV0gPSAodW5zaWduZWQgY2hhcikoKHBpZCA+PiAyNCkgJiAweGZmKTsKLSsjIGVu ZGlmCi0rfQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19yYW5k dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCi0t LS0gb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMJMjAxOC0w My0yOSAxNDo0NDoyNC42MzYyMzY4NzcgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8v Zmlwcy9maXBzX3JhbmR0ZXN0LmMJMjAxOC0wMy0yOSAxNDo0NDoyNC42MzYyMzY4NzcgKzAyMDAK LUBAIC0wLDAgKzEsMjQ3IEBACi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3Vu ZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVy aWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2Fz IHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICog VGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVz ZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRv LiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQg aW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVT LCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRp b24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhl IHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0g SHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMg RXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0 aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVz ZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgot KyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICog VGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBz dGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3Zp ZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQot KyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBi eQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdv cmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRo ZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRl ZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAo b3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5 IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1 ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs IFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VD SCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBm b3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9m IHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1w bHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNl bmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot KyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24u Ci0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8 c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwot KyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJBTkQgc3Vw cG9ydFxuIik7Ci0rICAgIHJldHVybiAoMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rIyBpbmNsdWRl ICJmaXBzX3V0bC5oIgotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rdHlwZWRlZiBz dHJ1Y3QgewotKyAgICB1bnNpZ25lZCBjaGFyIERUWzE2XTsKLSsgICAgdW5zaWduZWQgY2hhciBW WzE2XTsKLSsgICAgdW5zaWduZWQgY2hhciBSWzE2XTsKLSt9IEFFU19QUk5HX01DVDsKLSsKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X21jdF9rZXlbMTZdID0KLSsgICAgeyAw eDlmLCAweDViLCAweDUxLCAweDIwLCAweDBiLCAweGYzLCAweDM0LCAweGI1LAotKyAgICAweGQ4 LCAweDJiLCAweGU4LCAweGMzLCAweDcyLCAweDU1LCAweGM4LCAweDQ4Ci0rfTsKLSsKLStzdGF0 aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18xMjhfbWN0X3R2ID0gewotKyAgICAvKiBEVCAqLwot KyAgICB7MHg2MywgMHg3NiwgMHhiYiwgMHhlNSwgMHgyOSwgMHgwMiwgMHhiYSwgMHgzYiwKLSsg ICAgIDB4NjcsIDB4YzksIDB4MjUsIDB4ZmEsIDB4NzAsIDB4MWYsIDB4MTEsIDB4YWN9LAotKyAg ICAvKiBWICovCi0rICAgIHsweDU3LCAweDJjLCAweDhlLCAweDc2LCAweDg3LCAweDI2LCAweDQ3 LCAweDk3LAotKyAgICAgMHg3ZSwgMHg3NCwgMHhmYiwgMHhkZCwgMHhjNCwgMHg5NSwgMHgwMSwg MHhkMX0sCi0rICAgIC8qIFIgKi8KLSsgICAgezB4NDgsIDB4ZTksIDB4YmQsIDB4MGQsIDB4MDYs IDB4ZWUsIDB4MTgsIDB4ZmIsCi0rICAgICAweGU0LCAweDU3LCAweDkwLCAweGQ1LCAweGMzLCAw eGZjLCAweDliLCAweDczfQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9tY3Rfa2V5WzI0XSA9Ci0rICAgIHsgMHhiNywgMHg2YywgMHgzNCwgMHhkMSwgMHgwOSwg MHg2NywgMHhhYiwgMHg3MywKLSsgICAgMHg0ZCwgMHg1YSwgMHhkNSwgMHgzNCwgMHg5OCwgMHgx NiwgMHgwYiwgMHg5MSwKLSsgICAgMHhiYywgMHgzNSwgMHg1MSwgMHgxNiwgMHg2YiwgMHhhZSwg MHg5MywgMHg4YQotK307Ci0rCi0rc3RhdGljIGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMTkyX21j dF90diA9IHsKLSsgICAgLyogRFQgKi8KLSsgICAgezB4ODQsIDB4Y2UsIDB4MjIsIDB4N2QsIDB4 OTEsIDB4NWEsIDB4YTMsIDB4YzksCi0rICAgICAweDg0LCAweDNjLCAweDBhLCAweGIzLCAweGE5 LCAweDYzLCAweDE1LCAweDUyfSwKLSsgICAgLyogViAqLwotKyAgICB7MHhiNiwgMHhhZiwgMHhl NiwgMHg4ZiwgMHg5OSwgMHg5ZSwgMHg5MCwgMHg2NCwKLSsgICAgIDB4ZGQsIDB4YzcsIDB4N2Es IDB4YzEsIDB4YmIsIDB4OTAsIDB4M2EsIDB4NmR9LAotKyAgICAvKiBSICovCi0rICAgIHsweGZj LCAweDg1LCAweDYwLCAweDlhLCAweDI5LCAweDZmLCAweGVmLCAweDIxLAotKyAgICAgMHhkZCwg MHg4NiwgMHgyMCwgMHgzMiwgMHg4YSwgMHgyOSwgMHg2ZiwgMHg0N30KLSt9OwotKwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbWN0X2tleVszMl0gPQotKyAgICB7IDB4OWIs IDB4MDUsIDB4YzgsIDB4NjgsIDB4ZmYsIDB4NDcsIDB4ZjgsIDB4M2EsCi0rICAgIDB4YTYsIDB4 M2EsIDB4YTgsIDB4Y2IsIDB4NGUsIDB4NzEsIDB4YjIsIDB4ZTAsCi0rICAgIDB4YjgsIDB4N2Us IDB4ZjEsIDB4MzcsIDB4YjYsIDB4YjQsIDB4ZjYsIDB4NmQsCi0rICAgIDB4ODYsIDB4MzIsIDB4 ZmMsIDB4MWYsIDB4NWUsIDB4MWQsIDB4MWUsIDB4NTAKLSt9OwotKwotK3N0YXRpYyBjb25zdCBB RVNfUFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYgPSB7Ci0rICAgIC8qIERUICovCi0rICAgIHsweDMx LCAweDZlLCAweDM1LCAweDlhLCAweGIxLCAweDQ0LCAweGYwLCAweGVlLAotKyAgICAgMHg2Miwg MHg2ZCwgMHgwNCwgMHg0NiwgMHhlMCwgMHhhMywgMHg5MiwgMHg0Y30sCi0rICAgIC8qIFYgKi8K LSsgICAgezB4NGYsIDB4Y2QsIDB4YzEsIDB4ODcsIDB4ODIsIDB4MWYsIDB4NGQsIDB4YTEsCi0r ICAgICAweDNlLCAweDBlLCAweDU2LCAweDQ0LCAweDU5LCAweGU4LCAweDgzLCAweGNhfSwKLSsg ICAgLyogUiAqLwotKyAgICB7MHhjOCwgMHg4NywgMHhjMiwgMHg2MSwgMHg1YiwgMHhkMCwgMHhi OSwgMHhlMSwKLSsgICAgIDB4ZTcsIDB4ZjMsIDB4OGIsIDB4ZDcsIDB4NWIsIDB4ZDUsIDB4ZjEs IDB4OGR9Ci0rfTsKLSsKLStzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIs IGludCBuKQotK3sKLSsgICAgd2hpbGUgKG4tLSA+IDApIHsKLSsgICAgICAgIHByaW50ZigiICUw MngiLCAqYisrKTsKLSsgICAgfQotK30KLSsKLStzdGF0aWMgdm9pZCBjb21wYXJlKGNvbnN0IHVu c2lnbmVkIGNoYXIgKnJlc3VsdCwKLSsgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmV4cGVjdGVkLCBpbnQgbikKLSt7Ci0rICAgIGludCBpOwotKwotKyAgICBmb3IgKGkg PSAwOyBpIDwgbjsgKytpKQotKyAgICAgICAgaWYgKHJlc3VsdFtpXSAhPSBleHBlY3RlZFtpXSkg ewotKyAgICAgICAgICAgIHB1dHMoIlJhbmRvbSB0ZXN0IGZhaWxlZCwgZ290OiIpOwotKyAgICAg ICAgICAgIGR1bXAocmVzdWx0LCBuKTsKLSsgICAgICAgICAgICBwdXRzKCJcbiAgICAgICAgICAg ICAgIGV4cGVjdGVkOiIpOwotKyAgICAgICAgICAgIGR1bXAoZXhwZWN0ZWQsIG4pOwotKyAgICAg ICAgICAgIHB1dGNoYXIoJ1xuJyk7Ci0rICAgICAgICAgICAgRVhJVCgxKTsKLSsgICAgICAgIH0K LSt9Ci0rCi0rc3RhdGljIHZvaWQgcnVuX3Rlc3QoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBp bnQga2V5bGVuLAotKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFFU19QUk5HX01DVCAqIHR2 KQotK3sKLSsgICAgdW5zaWduZWQgY2hhciBidWZbMTZdLCBkdFsxNl07Ci0rICAgIGludCBpLCBq OwotKyAgICBGSVBTX3g5MzFfcmVzZXQoKTsKLSsgICAgRklQU194OTMxX3Rlc3RfbW9kZSgpOwot KyAgICBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7Ci0rICAgIEZJUFNfeDkzMV9zZWVk KHR2LT5WLCAxNik7Ci0rICAgIG1lbWNweShkdCwgdHYtPkRULCAxNik7Ci0rICAgIGZvciAoaSA9 IDA7IGkgPCAxMDAwMDsgaSsrKSB7Ci0rICAgICAgICBGSVBTX3g5MzFfc2V0X2R0KGR0KTsKLSsg ICAgICAgIEZJUFNfeDkzMV9ieXRlcyhidWYsIDE2KTsKLSsgICAgICAgIC8qIEluY3JlbWVudCBE VCAqLwotKyAgICAgICAgZm9yIChqID0gMTU7IGogPj0gMDsgai0tKSB7Ci0rICAgICAgICAgICAg ZHRbal0rKzsKLSsgICAgICAgICAgICBpZiAoZHRbal0pCi0rICAgICAgICAgICAgICAgIGJyZWFr OwotKyAgICAgICAgfQotKyAgICB9Ci0rCi0rICAgIGNvbXBhcmUoYnVmLCB0di0+UiwgMTYpOwot K30KLSsKLStpbnQgbWFpbigpCi0rewotKyAgICBydW5fdGVzdChhZXNfMTI4X21jdF9rZXksIDE2 LCAmYWVzXzEyOF9tY3RfdHYpOwotKyAgICBwcmludGYoIkZJUFMgUFJORyB0ZXN0IDEgZG9uZVxu Iik7Ci0rICAgIHJ1bl90ZXN0KGFlc18xOTJfbWN0X2tleSwgMjQsICZhZXNfMTkyX21jdF90dik7 Ci0rICAgIHByaW50ZigiRklQUyBQUk5HIHRlc3QgMiBkb25lXG4iKTsKLSsgICAgcnVuX3Rlc3Qo YWVzXzI1Nl9tY3Rfa2V5LCAzMiwgJmFlc18yNTZfbWN0X3R2KTsKLSsgICAgcHJpbnRmKCJGSVBT IFBSTkcgdGVzdCAzIGRvbmVcbiIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rCi0rI2VuZGlmCi1k aWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZp cHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwotLS0tIG9w ZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDE4LTAz LTI5IDE0OjQ0OjI0LjYzNjIzNjg3NyArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9m aXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMJMjAxOC0wMy0yOSAxNDo0NDoyNC42MzYyMzY4NzcgKzAy MDAKLUBAIC0wLDAgKzEsNTc4IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMDMtMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsg KgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgot KyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsK LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rIyBpbmNsdWRlICJp bnRlcm5hbC9maXBzX2ludC5oIgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0r Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5 KQotK3sKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5ZGF0YV9uW10gPSB7Ci0r ICAgICAgICAweDAwLCAweGM5LCAweGQ1LCAweDZkLCAweDlkLCAweDkwLCAweGRiLCAweDQzLCAw eGQ2LCAweDAyLCAweGVkLCAweDk2LCAweDg4LCAweDEzLCAweDhhLAotKyAgICAgICAgMHhiMiwg MHhiZiwgMHg2ZSwgMHhhMSwgMHgwNiwgMHgxMCwgMHhiMiwgMHg3OCwgMHgzNywgMHhhNywgMHgx NCwgMHhhOCwgMHhmZiwgMHhkZCwgMHgwMCwKLSsgICAgICAgIDB4ZGQsIDB4YjQsIDB4OTMsIDB4 YTAsIDB4NDUsIDB4Y2MsIDB4OTYsIDB4OTAsIDB4ZWQsIDB4YWQsIDB4YTksIDB4ZGQsIDB4YzQs IDB4ZDYsIDB4Y2EsCi0rICAgICAgICAweDBjLCAweGYwLCAweGVkLCAweDRmLCAweDcyLCAweDVl LCAweDIxLCAweDQ5LCAweDlhLCAweDE4LCAweDEyLCAweDE1LCAweDhmLCAweDkwLCAweDVhLAot KyAgICAgICAgMHhkYiwgMHhiNiwgMHgzMywgMHg5OSwgMHhhMywgMHhlNiwgMHhiNCwgMHhmMCwg MHhjNCwgMHg5NywgMHgyMSwgMHgyNiwgMHhiYiwgMHhlMywgMHhiYSwKLSsgICAgICAgIDB4ZjIs IDB4ZmYsIDB4YTAsIDB4NzIsIDB4ZGEsIDB4ODksIDB4NjMsIDB4OGUsIDB4OGIsIDB4M2UsIDB4 MDgsIDB4OWQsIDB4OTIsIDB4MmEsIDB4YmUsCi0rICAgICAgICAweDE2LCAweGUxLCAweDQzLCAw eDE1LCAweGZjLCAweDU3LCAweGM3LCAweDFmLCAweDA5LCAweDExLCAweDY3LCAweDFjLCAweGE5 LCAweDk2LCAweGQxLAotKyAgICAgICAgMHg4YiwgMHgzZSwgMHg4MCwgMHg5MywgMHhjMSwgMHg1 OSwgMHhkMCwgMHg2ZCwgMHgzOSwgMHhmMiwgMHhhYywgMHg5NSwgMHhjYywgMHgxMCwgMHg3NSwK LSsgICAgICAgIDB4ZTksIDB4MzEsIDB4MjQsIDB4ZDEsIDB4NDMsIDB4YWYsIDB4NjgsIDB4NTIs IDB4NGIsIDB4ZTcsIDB4MTYsIDB4ZDcsIDB4NDksIDB4NjUsIDB4NmYsCi0rICAgICAgICAweDI2 LCAweGMwLCAweDg2LCAweGFkLCAweGMwLCAweDA3LCAweDBhLCAweGMxLCAweGUxLCAweDJmLCAw eDg3LCAweDg1LCAweDg2LCAweDNiLCAweGRjLAotKyAgICAgICAgMHg1YSwgMHg5OSwgMHhiZSwg MHhlOSwgMHhmOSwgMHhiOSwgMHhlOSwgMHg4MiwgMHgyNywgMHg1MSwgMHgwNCwgMHgxNSwgMHhh YiwgMHgwNiwgMHgwZSwKLSsgICAgICAgIDB4NzYsIDB4NWEsIDB4MjgsIDB4OGQsIDB4OTIsIDB4 YmQsIDB4YzUsIDB4YjUsIDB4N2IsIDB4YTgsIDB4ZGYsIDB4NGUsIDB4NDcsIDB4YTIsIDB4YzEs Ci0rICAgICAgICAweGU3LCAweDUyLCAweGJmLCAweDQ3LCAweGY3LCAweDYyLCAweGUwLCAweDNh LCAweDZmLCAweDRkLCAweDZhLCAweDRkLCAweDRlLCAweGQ0LCAweGI5LAotKyAgICAgICAgMHg1 OSwgMHg2OSwgMHhmYSwgMHhiMiwgMHgxNCwgMHhjMSwgMHhlZSwgMHhlNiwgMHgyZiwgMHg5NSwg MHhjZCwgMHg5NCwgMHg3MiwgMHhhZSwgMHhlNCwKLSsgICAgICAgIDB4ZGIsIDB4MTgsIDB4OWEs IDB4YzQsIDB4Y2QsIDB4NzAsIDB4YmQsIDB4ZWUsIDB4MzEsIDB4MTYsIDB4YjcsIDB4NDksIDB4 NjUsIDB4YWMsIDB4NDAsCi0rICAgICAgICAweDE5LCAweDBlLCAweGI1LCAweDZkLCAweDgzLCAw eGYxLCAweDM2LCAweGJiLCAweDA4LCAweDJmLCAweDJlLCAweDRlLCAweDkyLCAweDYyLCAweGE0 LAotKyAgICAgICAgMHhmZiwgMHg1MCwgMHhkYiwgMHgyMCwgMHg0NSwgMHhhMiwgMHhlYiwgMHgx NiwgMHg3YSwgMHhmMiwgMHhkNSwgMHgyOCwgMHhjMSwgMHhmZCwgMHg0ZSwKLSsgICAgICAgIDB4 MDMsIDB4NzEKLSsgICAgfTsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5 ZGF0YV9lW10gPSB7IDB4MDEsIDB4MDAsIDB4MDEgfTsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIga2V5ZGF0YV9kW10gPSB7Ci0rICAgICAgICAweDM2LCAweDI3LCAweDNkLCAw eGIxLCAweGY5LCAweDFiLCAweGRiLCAweGE3LCAweGEwLCAweDQxLCAweDdmLCAweDEyLCAweDIz LCAweGFjLCAweDIzLAotKyAgICAgICAgMHgyOSwgMHg5OSwgMHhkNSwgMHgzYSwgMHg3YiwgMHg2 MCwgMHg2NywgMHg0MSwgMHgwNywgMHg2MywgMHg1MywgMHhiNCwgMHhkMiwgMHhlNywgMHg1OCwK LSsgICAgICAgIDB4OTUsIDB4MGEsIDB4YzcsIDB4MDUsIDB4ZjMsIDB4NGUsIDB4YjIsIDB4YjQs IDB4MTIsIDB4ZDQsIDB4NzAsIDB4ZGMsIDB4NGYsIDB4ODUsIDB4MDYsCi0rICAgICAgICAweGQz LCAweGRkLCAweGQ4LCAweDYzLCAweDI3LCAweDNlLCAweDY3LCAweDMxLCAweDIxLCAweDI0LCAw eDM5LCAweDA0LCAweGJjLCAweDA2LCAweGE0LAotKyAgICAgICAgMHhjYywgMHhjZSwgMHgyYiwg MHg3YSwgMHhmZSwgMHg3YiwgMHhhZCwgMHhkZSwgMHgxMSwgMHg2ZSwgMHhhMywgMHhhNSwgMHhl NiwgMHgwNCwgMHg1MywKLSsgICAgICAgIDB4MGUsIDB4YTMsIDB4NGUsIDB4MmQsIDB4YjQsIDB4 OGYsIDB4MzEsIDB4YmYsIDB4Y2EsIDB4NzUsIDB4MjUsIDB4NTIsIDB4MDIsIDB4ODUsIDB4ZGUs Ci0rICAgICAgICAweDNkLCAweGIyLCAweDcyLCAweDQzLCAweGIyLCAweDg5LCAweDhhLCAweDlh LCAweDM0LCAweDQxLCAweDI2LCAweDNmLCAweDlhLCAweDY3LCAweGJlLAotKyAgICAgICAgMHhh NCwgMHg5NiwgMHg3YiwgMHgwZSwgMHg3NSwgMHhiYSwgMHhhNiwgMHg5MywgMHhkNSwgMHhiOCwg MHhkOCwgMHhiOCwgMHg1NywgMHhmMiwgMHg0YiwKLSsgICAgICAgIDB4MGYsIDB4MTQsIDB4ODEs IDB4ZDEsIDB4NTcsIDB4NGUsIDB4ZjYsIDB4NDUsIDB4NGMsIDB4YTYsIDB4M2IsIDB4ZDAsIDB4 NzAsIDB4Y2EsIDB4ZDMsCi0rICAgICAgICAweDlkLCAweDU1LCAweGRlLCAweDIyLCAweDA1LCAw eGU3LCAweDhlLCAweDI4LCAweDRkLCAweGVlLCAweDExLCAweGNmLCAweGI2LCAweDY3LCAweDc2 LAotKyAgICAgICAgMHgwOSwgMHhkMywgMHhlMywgMHgzYywgMHgxMywgMHhmOSwgMHg5OSwgMHgz NCwgMHgxMCwgMHg3YiwgMHhlYywgMHg4MSwgMHgzOCwgMHhmMCwgMHhiNiwKLSsgICAgICAgIDB4 MzQsIDB4OWMsIDB4OWIsIDB4NTAsIDB4NmYsIDB4MGIsIDB4OTEsIDB4ODEsIDB4NGQsIDB4ODks IDB4OTQsIDB4MDQsIDB4N2IsIDB4ZjAsIDB4M2MsCi0rICAgICAgICAweGY0LCAweGIxLCAweGIy LCAweDAwLCAweDQ4LCAweDhkLCAweDVhLCAweDhmLCAweDg4LCAweDllLCAweGM1LCAweGFiLCAw eDNhLCAweDllLCAweDQ0LAotKyAgICAgICAgMHgzZiwgMHg1NCwgMHhlNywgMHhkOSwgMHg2ZSwg MHg0NywgMHhhYSwgMHhhMSwgMHhiZCwgMHg0MCwgMHg0NiwgMHgzMSwgMHhmOSwgMHhmMCwgMHgz NCwKLSsgICAgICAgIDB4YjYsIDB4MDQsIDB4ZTEsIDB4MmIsIDB4NWIsIDB4NzMsIDB4ODYsIDB4 ZGQsIDB4M2EsIDB4OTIsIDB4MWIsIDB4NzEsIDB4YzcsIDB4M2YsIDB4MzIsCi0rICAgICAgICAw eGU1LCAweGMzLCAweGMyLCAweGFiLCAweGExLCAweDdlLCAweGJmLCAweGE0LCAweDUyLCAweGEw LCAweGIwLCAweDY4LCAweDkwLCAweGQxLCAweDIwLAotKyAgICAgICAgMHgxMiwgMHg3OSwgMHhl OSwgMHhkNywgMHhjOSwgMHg0MCwgMHhiYSwgMHhmMiwgMHgxOSwgMHhjNywgMHhhNSwgMHgwMCwg MHg5MiwgMHg4NiwgMHgwZCwKLSsgICAgICAgIDB4MDEKLSsgICAgfTsKLSsKLSsgICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5ZGF0YV9wW10gPSB7Ci0rICAgICAgICAweDAwLCAweGZj LCAweDVjLCAweDZlLCAweDE2LCAweGNlLCAweDFmLCAweDAzLCAweDdiLCAweGNkLCAweGY3LCAw eGIzLCAweDcyLCAweGIyLCAweDhmLAotKyAgICAgICAgMHgxNiwgMHg3MiwgMHhiOCwgMHg1Niwg MHhhZSwgMHhmNywgMHhjZCwgMHg2NywgMHhkOCwgMHg0ZSwgMHg3ZCwgMHgwNywgMHhhZiwgMHhk NSwgMHg0MywKLSsgICAgICAgIDB4MjYsIDB4YzMsIDB4MzUsIDB4YmUsIDB4NDMsIDB4OGYsIDB4 NGUsIDB4MmYsIDB4MWMsIDB4NDMsIDB4NGUsIDB4NmIsIDB4ZDIsIDB4YjIsIDB4ZWMsCi0rICAg ICAgICAweDUyLCAweDZkLCAweDk3LCAweDUyLCAweDJiLCAweGNjLCAweDVjLCAweDNhLCAweDZi LCAweGY0LCAweDE0LCAweGM2LCAweDc0LCAweGRhLCAweDY2LAotKyAgICAgICAgMHgzOCwgMHgx YywgMHg3YSwgMHgzZiwgMHg4NCwgMHgyZiwgMHhlMywgMHhmOSwgMHg1YSwgMHhiOCwgMHg2NSwg MHg2OSwgMHg0NiwgMHgwNiwgMHhhMywKLSsgICAgICAgIDB4MzcsIDB4NzksIDB4YjIsIDB4YTEs IDB4NWIsIDB4NTgsIDB4ZWQsIDB4NWUsIDB4YTcsIDB4NWYsIDB4OGMsIDB4NjUsIDB4NjYsIDB4 YmIsIDB4ZDEsCi0rICAgICAgICAweDI0LCAweDM2LCAweGU2LCAweDM3LCAweGE3LCAweDNkLCAw eDQ5LCAweDc3LCAweDhhLCAweDhjLCAweDM0LCAweGQ4LCAweDY5LCAweDI5LCAweGYzLAotKyAg ICAgICAgMHg0ZCwgMHg1OCwgMHgyMiwgMHhiMCwgMHg1MSwgMHgyNCwgMHhiNiwgMHg0MCwgMHhh OCwgMHg4NiwgMHg1OSwgMHgwYSwgMHhiNywgMHhiYSwgMHg1YywKLSsgICAgICAgIDB4OTcsIDB4 ZGEsIDB4NTcsIDB4ZTgsIDB4MzYsIDB4ZGEsIDB4N2EsIDB4OWMsIDB4YWQKLSsgICAgfTsKLSsK LSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5ZGF0YV9xW10gPSB7Ci0rICAgICAg ICAweDAwLCAweGNjLCAweGJlLCAweDdiLCAweDA5LCAweDY5LCAweDA2LCAweGVlLCAweDQ1LCAw eGJmLCAweDg4LCAweDQ3LCAweDM4LCAweGE4LCAweGY4LAotKyAgICAgICAgMHgxNywgMHhlNSwg MHhiNiwgMHhiYSwgMHg2NywgMHg1NSwgMHhlMywgMHhlOCwgMHgwNSwgMHg4YiwgMHhiOCwgMHhl MiwgMHg1MywgMHhkNiwgMHg4ZSwKLSsgICAgICAgIDB4ZWYsIDB4MmMsIDB4ZTcsIDB4NGYsIDB4 NGEsIDB4ZjcsIDB4NGUsIDB4MjYsIDB4OGQsIDB4ODUsIDB4MGIsIDB4M2YsIDB4ZWMsIDB4YzMs IDB4MWMsCi0rICAgICAgICAweGQ0LCAweGViLCAweGVjLCAweDZhLCAweGM4LCAweDcyLCAweDJh LCAweDI1LCAweDdkLCAweGZkLCAweGE2LCAweDc3LCAweDk2LCAweGYwLCAweDFlLAotKyAgICAg ICAgMHhjZCwgMHgyOCwgMHg1NywgMHhmOCwgMHgzNywgMHgzMCwgMHg3NSwgMHg2YiwgMHhiZCwg MHhkNCwgMHg3YiwgMHgwYywgMHg4NywgMHhjNSwgMHg2YywKLSsgICAgICAgIDB4ODcsIDB4NDAs IDB4YTUsIDB4YmIsIDB4MjcsIDB4MmMsIDB4NzgsIDB4YzksIDB4NzQsIDB4NWEsIDB4NTQsIDB4 NWIsIDB4MGIsIDB4MzAsIDB4NmYsCi0rICAgICAgICAweDQ0LCAweDRhLCAweGZhLCAweDcxLCAw eGU0LCAweDIxLCAweDYxLCAweDY2LCAweGY5LCAweGVlLCAweDY1LCAweGRlLCAweDdjLCAweDA0 LCAweGQ3LAotKyAgICAgICAgMHhmZCwgMHhhOSwgMHgxNSwgMHg1YiwgMHg3ZiwgMHhlMiwgMHg3 YSwgMHhiYSwgMHg2OSwgMHg4NiwgMHg3MiwgMHhhNiwgMHgwNiwgMHg4ZCwgMHg5YiwKLSsgICAg ICAgIDB4OTAsIDB4NTUsIDB4NjAsIDB4OWUsIDB4NGMsIDB4NWQsIDB4YTksIDB4YjYsIDB4NTUK LSsgICAgfTsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5ZGF0YV9kbXAx W10gPSB7Ci0rICAgICAgICAweDdhLCAweGQ2LCAweDEyLCAweGQwLCAweDBlLCAweGVjLCAweDkx LCAweGE5LCAweDg1LCAweDhiLCAweGY4LCAweDUwLCAweGYwLCAweDExLCAweDJlLAotKyAgICAg ICAgMHgwMCwgMHgxMSwgMHgzMiwgMHg0MCwgMHg2MCwgMHg2NiwgMHgxZiwgMHgxMSwgMHhlZSwg MHhjMiwgMHg3NSwgMHgyNywgMHg2NSwgMHg0YiwgMHgxNiwKLSsgICAgICAgIDB4NjcsIDB4MTYs IDB4OTUsIDB4ZDIsIDB4MTQsIDB4YzMsIDB4MWQsIDB4YjMsIDB4NDgsIDB4MWYsIDB4YjcsIDB4 ZTQsIDB4MGIsIDB4MmIsIDB4NzQsCi0rICAgICAgICAweGMzLCAweGRiLCAweDUwLCAweDI3LCAw eGY5LCAweDg1LCAweDNhLCAweGZhLCAweGE5LCAweDA4LCAweDIzLCAweGMxLCAweDY1LCAweDNk LCAweDM0LAotKyAgICAgICAgMHgzYSwgMHhjOCwgMHg1NiwgMHg3YSwgMHg2NSwgMHg0NSwgMHgz NiwgMHg2ZSwgMHhhZSwgMHgyYSwgMHhjZSwgMHg5ZiwgMHg0MywgMHg0MywgMHhkNywKLSsgICAg ICAgIDB4MTAsIDB4ZTksIDB4OWUsIDB4MTgsIDB4ZjQsIDB4YTQsIDB4MzUsIDB4ZGEsIDB4OGEs IDB4NmIsIDB4YjAsIDB4M2YsIDB4ZGQsIDB4NTMsIDB4ZTMsCi0rICAgICAgICAweGE4LCAweGM1 LCAweDRlLCAweDc5LCAweDlkLCAweDFmLCAweDUxLCAweDhjLCAweGEyLCAweGNhLCAweDY2LCAw eDNjLCAweDZhLCAweDJhLCAweGZmLAotKyAgICAgICAgMHg4ZSwgMHhkMiwgMHhmMywgMHhiNywg MHhjYiwgMHg4MiwgMHhkYSwgMHhkZSwgMHgyYywgMHhlNiwgMHhkMiwgMHg4YywgMHhiMywgMHhh ZCwgMHhiNiwKLSsgICAgICAgIDB4NGMsIDB4OTUsIDB4NTUsIDB4NzYsIDB4YmQsIDB4YzksIDB4 YzgsIDB4ZDEKLSsgICAgfTsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5 ZGF0YV9kbXExW10gPSB7Ci0rICAgICAgICAweDAwLCAweDgzLCAweDIzLCAweDFkLCAweGJiLCAw eDExLCAweDQyLCAweDE3LCAweDJiLCAweDI1LCAweDVhLCAweDJjLCAweDAzLCAweGU2LCAweDc1 LAotKyAgICAgICAgMHhjMSwgMHgxOCwgMHhhOCwgMHhjOSwgMHgwYiwgMHg5NiwgMHhiZiwgMHhi YSwgMHhjNCwgMHg5MiwgMHg5MSwgMHg4MCwgMHhhNSwgMHgyMiwgMHgyZiwKLSsgICAgICAgIDB4 YmEsIDB4OTEsIDB4OTAsIDB4MzYsIDB4MDEsIDB4NTYsIDB4MTUsIDB4MDAsIDB4MmMsIDB4NzQs IDB4YTIsIDB4OTcsIDB4ZjcsIDB4MTUsIDB4YTEsCi0rICAgICAgICAweDQ5LCAweGRmLCAweDMy LCAweDM1LCAweGQyLCAweGRkLCAweDBjLCAweDkxLCAweGE2LCAweGY4LCAweGU3LCAweGJlLCAw eDgxLCAweDM2LCAweDliLAotKyAgICAgICAgMHgwMywgMHhkYywgMHg2YiwgMHgzYiwgMHhkOCwg MHg1ZCwgMHg3OSwgMHg1NywgMHhlMCwgMHhlNiwgMHg0ZiwgMHg0OSwgMHhkZiwgMHg0YywgMHg1 YywKLSsgICAgICAgIDB4MGUsIDB4ZTUsIDB4MjEsIDB4NDEsIDB4OTUsIDB4ZmQsIDB4YWQsIDB4 ZmYsIDB4OWEsIDB4M2UsIDB4YTAsIDB4ZjksIDB4MGYsIDB4NTksIDB4OWUsCi0rICAgICAgICAw eDZhLCAweGE3LCAweDdiLCAweDcxLCAweGE3LCAweDI0LCAweDlhLCAweDM2LCAweDUyLCAweGFl LCAweDk3LCAweDIwLCAweGMxLCAweDVlLCAweDc4LAotKyAgICAgICAgMHhkOSwgMHg0NywgMHg4 YiwgMHgxZSwgMHg2NywgMHhmMiwgMHhhZiwgMHg5OCwgMHhlNiwgMHgyZCwgMHhlZiwgMHgxMCwg MHhkNywgMHhmMSwgMHhhYiwKLSsgICAgICAgIDB4NDksIDB4ZWUsIDB4ZTUsIDB4NGIsIDB4N2Us IDB4YWUsIDB4MWYsIDB4MWQsIDB4NjEKLSsgICAgfTsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIga2V5ZGF0YV9pcW1wW10gPSB7Ci0rICAgICAgICAweDIzLCAweDk2LCAweGMx LCAweDkxLCAweDE3LCAweDVlLCAweDBhLCAweDgzLCAweGQyLCAweGRjLCAweDdiLCAweDY5LCAw eGIyLCAweDU5LCAweDFkLAotKyAgICAgICAgMHgzMywgMHg1OCwgMHg1MiwgMHgzZiwgMHgxOCwg MHhjNywgMHgwOSwgMHg1MCwgMHgxYywgMHhiOSwgMHhhMSwgMHhiYiwgMHg0YywgMHhhMiwgMHgz OCwKLSsgICAgICAgIDB4NDAsIDB4NGMsIDB4OWEsIDB4OGUsIDB4ZmUsIDB4OWMsIDB4OTAsIDB4 OTIsIDB4ZDAsIDB4NzEsIDB4OWYsIDB4ODksIDB4OTksIDB4NTAsIDB4OTEsCi0rICAgICAgICAw eDFmLCAweDM0LCAweDhiLCAweDc0LCAweDUzLCAweDExLCAweDExLCAweDRhLCAweDcwLCAweGUy LCAweGY3LCAweDMwLCAweGQ4LCAweDhjLCAweDgwLAotKyAgICAgICAgMHhlMSwgMHhjYywgMHg5 ZiwgMHhmMSwgMHg2MywgMHgxNywgMHgxYSwgMHg3ZCwgMHg2NywgMHgyOSwgMHg0YywgMHhjYiwg MHg0ZSwgMHg3NCwgMHg3YiwKLSsgICAgICAgIDB4ZTAsIDB4M2UsIDB4OWUsIDB4MmYsIDB4ZjQs IDB4NjcsIDB4OGYsIDB4ZWMsIDB4YjksIDB4NWMsIDB4MDAsIDB4MWUsIDB4N2UsIDB4YTIsIDB4 N2IsCi0rICAgICAgICAweDkyLCAweGM5LCAweDZmLCAweDRjLCAweGU0LCAweDBlLCAweGY5LCAw eDQ4LCAweDYzLCAweGNkLCAweDUwLCAweDIyLCAweDVkLCAweGJmLCAweGI2LAotKyAgICAgICAg MHg5ZCwgMHgwMSwgMHgzMywgMHg2YSwgMHhmNCwgMHg1MCwgMHhiZSwgMHg4NiwgMHg5OCwgMHg0 ZiwgMHhjYSwgMHgzZiwgMHgzYSwgMHhmYSwgMHhjZiwKLSsgICAgICAgIDB4MDcsIDB4NDAsIDB4 YzQsIDB4YWEsIDB4YWQsIDB4YWUsIDB4YmUsIDB4YmYKLSsgICAgfTsKLSsKLSsgICAgaW50IHJ2 ID0gMDsKLSsgICAgQklHTlVNICpuID0gTlVMTCwgKmUgPSBOVUxMLCAqZCA9IE5VTEwsICpwID0g TlVMTCwgKnEgPSBOVUxMLCAqZG1wMSA9IE5VTEwsICpkbXExID0gTlVMTCwgKmlxbXAgPSBOVUxM OwotKwotKyAgICBmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChuLCBrZXlkYXRhKTsKLSsgICAgZmlw c19sb2FkX2tleV9jb21wb25lbnQoZSwga2V5ZGF0YSk7Ci0rICAgIGZpcHNfbG9hZF9rZXlfY29t cG9uZW50KGQsIGtleWRhdGEpOwotKyAgICBmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChwLCBrZXlk YXRhKTsKLSsgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQocSwga2V5ZGF0YSk7Ci0rICAgIGZp cHNfbG9hZF9rZXlfY29tcG9uZW50KGRtcDEsIGtleWRhdGEpOwotKyAgICBmaXBzX2xvYWRfa2V5 X2NvbXBvbmVudChkbXExLCBrZXlkYXRhKTsKLSsgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQo aXFtcCwga2V5ZGF0YSk7Ci0rCi0rICAgIFJTQV9zZXQwX2tleShrZXksIG4sIGUsIGQpOwotKyAg ICBSU0Ffc2V0MF9mYWN0b3JzKGtleSwgcCwgcSk7Ci0rICAgIFJTQV9zZXQwX2NydF9wYXJhbXMo a2V5LCBkbXAxLCBkbXExLCBpcW1wKTsKLSsKLSsgICAgcnYgPSAxOwotK2VycjoKLSsgICAgaWYg KCFydikgewotKyAgICAgICAgQk5fZnJlZShuKTsKLSsgICAgICAgIEJOX2ZyZWUoZSk7Ci0rICAg ICAgICBCTl9mcmVlKGQpOwotKyAgICAgICAgQk5fZnJlZShwKTsKLSsgICAgICAgIEJOX2ZyZWUo cSk7Ci0rICAgICAgICBCTl9mcmVlKGRtcDEpOwotKyAgICAgICAgQk5fZnJlZShkbXExKTsKLSsg ICAgICAgIEJOX2ZyZWUoaXFtcCk7Ci0rICAgIH0KLSsgICAgcmV0dXJuIHJ2OwotK30KLSsKLSsv KiBLbm93biBBbnN3ZXIgVGVzdCAoS0FUKSBkYXRhIGZvciB0aGUgYWJvdmUgUlNBIHByaXZhdGUg a2V5IHNpZ25pbmcKLSsgKiBrYXRfdGJzLgotKyAqLwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGthdF90YnNbXSA9Ci0rICAgICJPcGVuU1NMIEZJUFMgMTQwLTIgUHVibGljIEtleSBS U0EgS0FUIjsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEx W10gPSB7Ci0rICAgIDB4QzIsIDB4ODAsIDB4ODIsIDB4NTYsIDB4RDgsIDB4QTcsIDB4QjIsIDB4 OUMsIDB4RjUsIDB4RDYsIDB4M0MsIDB4RTMsCi0rICAgIDB4QkYsIDB4RTksIDB4M0EsIDB4NTMs IDB4NDAsIDB4QUUsIDB4RjIsIDB4QTksIDB4NkEsIDB4MzksIDB4NDksIDB4NUIsCi0rICAgIDB4 MDUsIDB4N0YsIDB4NjcsIDB4MzgsIDB4MkUsIDB4MUQsIDB4RTEsIDB4OTMsIDB4MjIsIDB4NjUs IDB4NzksIDB4ODQsCi0rICAgIDB4NjgsIDB4RkEsIDB4RDgsIDB4QUYsIDB4QTEsIDB4OTgsIDB4 NjEsIDB4NkYsIDB4NDQsIDB4MjcsIDB4QTYsIDB4OEIsCi0rICAgIDB4Q0YsIDB4MEUsIDB4MTMs IDB4QTksIDB4Q0UsIDB4RDcsIDB4NkMsIDB4RDIsIDB4MzgsIDB4QjUsIDB4MTYsIDB4QjksCi0r ICAgIDB4NjYsIDB4OTQsIDB4NDgsIDB4REUsIDB4OUUsIDB4MTksIDB4M0QsIDB4NkYsIDB4QjMs IDB4QTEsIDB4OUEsIDB4MTksCi0rICAgIDB4REYsIDB4RkIsIDB4QUIsIDB4QTUsIDB4OUYsIDB4 MzgsIDB4REEsIDB4QzksIDB4MjEsIDB4OEYsIDB4Q0UsIDB4OTgsCi0rICAgIDB4MDEsIDB4M0Es IDB4QzgsIDB4RTAsIDB4REYsIDB4REEsIDB4RkMsIDB4RjAsIDB4QTYsIDB4ODYsIDB4MjksIDB4 QjUsCi0rICAgIDB4N0YsIDB4NjEsIDB4RkIsIDB4QkEsIDB4QzUsIDB4NDksIDB4QjIsIDB4N0Ms IDB4NkEsIDB4MjYsIDB4ODIsIDB4QzQsCi0rICAgIDB4OEYsIDB4QUEsIDB4NUIsIDB4MTAsIDB4 RDUsIDB4RUUsIDB4QTAsIDB4NTUsIDB4NDIsIDB4RUYsIDB4MzIsIDB4NUEsCi0rICAgIDB4M0Ys IDB4NTUsIDB4QjMsIDB4MkMsIDB4MjIsIDB4RTksIDB4NjUsIDB4REEsIDB4OEQsIDB4MEEsIDB4 QjksIDB4NzAsCi0rICAgIDB4NDMsIDB4Q0MsIDB4M0YsIDB4NjQsIDB4OUMsIDB4QjUsIDB4NjUs IDB4NDksIDB4QkQsIDB4N0YsIDB4MzUsIDB4QzEsCi0rICAgIDB4MjAsIDB4ODUsIDB4MjQsIDB4 RkUsIDB4QUEsIDB4NkIsIDB4MzcsIDB4MDQsIDB4QTEsIDB4MEUsIDB4OUQsIDB4NUMsCi0rICAg IDB4QkEsIDB4N0YsIDB4MTQsIDB4NjksIDB4QzUsIDB4OTMsIDB4QjIsIDB4MzMsIDB4QzIsIDB4 QzAsIDB4QzcsIDB4REYsCi0rICAgIDB4N0UsIDB4OUUsIDB4QTQsIDB4QjAsIDB4QTAsIDB4NjQs IDB4RDIsIDB4QUMsIDB4RkMsIDB4RkQsIDB4RkQsIDB4OTksCi0rICAgIDB4OEYsIDB4NkEsIDB4 NDAsIDB4MjYsIDB4QzEsIDB4MkUsIDB4NEUsIDB4OEIsIDB4MzMsIDB4QkUsIDB4RjEsIDB4NDUs Ci0rICAgIDB4NTksIDB4OEYsIDB4MzMsIDB4NDAsIDB4MUQsIDB4MkEsIDB4RDIsIDB4RjcsIDB4 NTAsIDB4ODMsIDB4ODksIDB4Q0YsCi0rICAgIDB4OTQsIDB4QzYsIDB4RjgsIDB4MzYsIDB4RjAs IDB4ODQsIDB4MEIsIDB4ODUsIDB4QTUsIDB4MDIsIDB4QTksIDB4MEYsCi0rICAgIDB4NDEsIDB4 N0EsIDB4NzcsIDB4QTMsIDB4MkYsIDB4NDcsIDB4MUUsIDB4MUQsIDB4RUMsIDB4RTYsIDB4RDMs IDB4MDEsCi0rICAgIDB4MUUsIDB4NkYsIDB4N0EsIDB4OTYsIDB4NTAsIDB4MzcsIDB4MzcsIDB4 NEIsIDB4MjcsIDB4NTIsIDB4MEIsIDB4REMsCi0rICAgIDB4REIsIDB4QzcsIDB4QTksIDB4MzEs IDB4QjIsIDB4NDAsIDB4RUUsIDB4NjAsIDB4NDEsIDB4MjYsIDB4NkEsIDB4MDUsCi0rICAgIDB4 Q0UsIDB4MDgsIDB4MUQsIDB4ODkKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGthdF9SU0FfUFNTX1NIQTIyNFtdID0gewotKyAgICAweEI0LCAweDAxLCAweDkzLCAweDE2LCAw eDA1LCAweEY2LCAweEVCLCAweEUyLCAweEE0LCAweEVCLCAweDQ4LCAweEFBLAotKyAgICAweDAw LCAweEY0LCAweEExLCAweDk5LCAweDBBLCAweEI0LCAweEI2LCAweDYzLCAweEU5LCAweDY4LCAw eENBLCAweEIzLAotKyAgICAweDEzLCAweEQ3LCAweDY2LCAweDZBLCAweENELCAweENCLCAweDMz LCAweDlGLCAweEU1LCAweDg0LCAweEUyLCAweEMzLAotKyAgICAweDBCLCAweDUzLCAweEU1LCAw eDhCLCAweDk2LCAweDRCLCAweERCLCAweDJELCAweDgwLCAweEE0LCAweDFELCAweEUzLAotKyAg ICAweDgxLCAweERDLCAweDUyLCAweDk5LCAweEJBLCAweDlCLCAweDZBLCAweDlELCAweDQ4LCAw eDFGLCAweDczLCAweEY3LAotKyAgICAweEFDLCAweDA5LCAweDEzLCAweEExLCAweDE2LCAweDJD LCAweDYwLCAweEZCLCAweEJDLCAweDI1LCAweEY3LCAweDUzLAotKyAgICAweEQxLCAweDA0LCAw eDVBLCAweDNGLCAweDk1LCAweDA5LCAweDVFLCAweEU1LCAweEEyLCAweDdELCAweEZDLCAweDJB LAotKyAgICAweDUxLCAweDFELCAweDIxLCAweENFLCAweDJCLCAweDRFLCAweDFCLCAweEI4LCAw eENCLCAweERELCAweDI0LCAweEVFLAotKyAgICAweDk5LCAweDFELCAweDM3LCAweERDLCAweEVE LCAweDVGLCAweDJGLCAweDQ4LCAweDVFLCAweDMzLCAweDk0LCAweDA2LAotKyAgICAweDE5LCAw eENELCAweDVBLCAweDI2LCAweDg1LCAweDc3LCAweDlELCAweEFGLCAweDg2LCAweDk3LCAweEM5 LCAweDA4LAotKyAgICAweEQ1LCAweDgxLCAweDBFLCAweEI4LCAweDlGLCAweEI2LCAweEFGLCAw eDIwLCAweDcyLCAweERDLCAweDEzLCAweDRELAotKyAgICAweDdBLCAweEU0LCAweDVDLCAweDgx LCAweERFLCAweEMwLCAweDNELCAweDE5LCAweDlDLCAweDMzLCAweDExLCAweDA3LAotKyAgICAw eEQ1LCAweEE5LCAweDUxLCAweDY3LCAweENELCAweEZELCAweDM3LCAweDYxLCAweDE0LCAweDlG LCAweEU3LCAweDcwLAotKyAgICAweDE4LCAweDMyLCAweEMzLCAweDM0LCAweDU0LCAweDBELCAw eDRGLCAweEI0LCAweEFFLCAweDlGLCAweEVDLCAweDY0LAotKyAgICAweEQ4LCAweEIyLCAweDE2 LCAweEE0LCAweEIyLCAweDk5LCAweDkyLCAweENCLCAweDdGLCAweDFGLCAweDA2LCAweDE3LAot KyAgICAweDVGLCAweEExLCAweDA3LCAweDY4LCAweEFFLCAweEE3LCAweDJELCAweDAzLCAweDkx LCAweDJBLCAweDlELCAweDY5LAotKyAgICAweEMyLCAweDlELCAweDkwLCAweEY3LCAweEY5LCAw eDY2LCAweDVELCAweDEzLCAweEI3LCAweDdGLCAweEQzLCAweDk3LAotKyAgICAweDQ1LCAweDk3 LCAweDQzLCAweEQ4LCAweENFLCAweDNDLCAweEYyLCAweDk4LCAweDk4LCAweERELCAweEUyLCAw eDJELAotKyAgICAweENGLCAweEExLCAweEM0LCAweDI1LCAweDQ2LCAweDJFLCAweEQyLCAweEU1 LCAweDVGLCAweEM2LCAweDAxLCAweEM1LAotKyAgICAweDRGLCAweDQyLCAweDJCLCAweERFLCAw eDBGLCAweEVBLCAweDRBLCAweDRGLCAweEMzLCAweDVCLCAweERGLCAweDlCLAotKyAgICAweDVE LCAweDMwLCAweDE4LCAweDkzLCAweEQwLCAweERFLCAweEM1LCAweDA5LCAweEFBLCAweDU3LCAw eDU3LCAweEJELAotKyAgICAweDJELCAweDg0LCAweDAzLCAweEI3Ci0rfTsKLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyNTZbXSA9IHsKLSsgICAgMHgzOCwg MHhEQSwgMHg5OSwgMHg1MSwgMHgyNiwgMHgzOCwgMHhDNiwgMHg3RiwgMHhDNCwgMHg4MSwgMHg1 NywgMHgxOSwKLSsgICAgMHgzNSwgMHhDNiwgMHhGNiwgMHgxRSwgMHg5MCwgMHg0NywgMHgyMCwg MHg1NSwgMHg0NywgMHg1NiwgMHgyNiwgMHhFOSwKLSsgICAgMHhGMiwgMHhBOCwgMHgzOSwgMHg2 QywgMHhENSwgMHhDRCwgMHhDQiwgMHg1NSwgMHhGQywgMHgwQywgMHhDNSwgMHhDQiwKLSsgICAg MHhGNywgMHg0MCwgMHgxNywgMHgzQiwgMHhDRiwgMHhFNCwgMHgwNSwgMHgwMywgMHgzQiwgMHhB MCwgMHhCMiwgMHhDOSwKLSsgICAgMHgwRCwgMHg1RSwgMHg0OCwgMHgzQSwgMHhFOSwgMHhBRCwg MHgyOCwgMHg3MSwgMHg3RCwgMHg4RiwgMHg4OSwgMHgxNiwKLSsgICAgMHg1OSwgMHg5MywgMHgz NSwgMHhEQywgMHg0RCwgMHg3QiwgMHhERiwgMHg4NCwgMHhFNCwgMHg2OCwgMHhBQSwgMHgzMywK LSsgICAgMHhBQSwgMHhEQywgMHg2NiwgMHg1MCwgMHhDOCwgMHhBOSwgMHgzMiwgMHgxMiwgMHhE QywgMHhDNiwgMHg5MCwgMHg0OSwKLSsgICAgMHgwQiwgMHg3NSwgMHhGRiwgMHg5QiwgMHg5NSwg MHgwMCwgMHg5QSwgMHg5MCwgMHhFMCwgMHhENCwgMHgwRSwgMHg2NywKLSsgICAgMHhBQiwgMHgz QywgMHg0NywgMHgzNiwgMHhDNSwgMHgyRSwgMHgxQywgMHg0NiwgMHhGMCwgMHgyRCwgMHhEMywg MHg4QiwKLSsgICAgMHg0MiwgMHgwOCwgMHhERSwgMHgwRCwgMHhCNiwgMHgyQywgMHg4NiwgMHhC MCwgMHgzNSwgMHg3MSwgMHgxOCwgMHg2QiwKLSsgICAgMHg4OSwgMHg2NywgMHhDMCwgMHgwNSwg MHhBRCwgMHhGNCwgMHgxRCwgMHg2MiwgMHg0RSwgMHg3NSwgMHhFQywgMHhENiwKLSsgICAgMHhD MiwgMHhEQiwgMHgwNywgMHhCMCwgMHhCNiwgMHg4RCwgMHgxNSwgMHhBRCwgMHhDRCwgMHhCRiwg MHhGNSwgMHg2MCwKLSsgICAgMHg3NiwgMHhBRSwgMHg0OCwgMHhCOCwgMHg3NywgMHg3RiwgMHhD NSwgMHgwMSwgMHhEOSwgMHgyOSwgMHhCQiwgMHhENiwKLSsgICAgMHgxNywgMHhBMiwgMHgyMCwg MHg1QSwgMHhDMCwgMHg0QSwgMHgzQiwgMHgzNCwgMHhDOCwgMHhCOSwgMHgzOSwgMHhDRiwKLSsg ICAgMHgwNiwgMHg4OSwgMHg5NSwgMHg2RiwgMHhDNywgMHhDQSwgMHhDNCwgMHhFNCwgMHg0Mywg MHhERiwgMHg1QSwgMHgyMywKLSsgICAgMHhFMiwgMHg4OSwgMHhBMywgMHgzOCwgMHg3OCwgMHgz MSwgMHgzOCwgMHhDNiwgMHhBNCwgMHg2RiwgMHg1RiwgMHg3MywKLSsgICAgMHg1QSwgMHhFNSwg MHg5RSwgMHgwOSwgMHhFNywgMHg2RiwgMHhENCwgMHhGOCwgMHgzRSwgMHhCNywgMHhCMCwgMHg1 NiwKLSsgICAgMHg5QSwgMHhGMywgMHg2NSwgMHhGMCwgMHhDMiwgMHhBNiwgMHg4QSwgMHgwOCwg MHhCQSwgMHg0NCwgMHhBQywgMHg5NywKLSsgICAgMHhERSwgMHhCNCwgMHgxNiwgMHg4MywgMHhE RiwgMHhFMywgMHhFRSwgMHg3MSwgMHhGQSwgMHhGOSwgMHg1MSwgMHg1MCwKLSsgICAgMHgxNCwg MHhEQywgMHhGRCwgMHg2QSwgMHg4MiwgMHgyMCwgMHg2OCwgMHg2NCwgMHg3RCwgMHg0RSwgMHg4 MiwgMHg2OCwKLSsgICAgMHhENywgMHg0NSwgMHhGQSwgMHg2QSwgMHhFNCwgMHhFNSwgMHgyOSwg MHgzQSwgMHg3MCwgMHhGQiwgMHhFNCwgMHg2MiwKLSsgICAgMHgyQiwgMHgzMSwgMHhCOSwgMHg3 RAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMzg0 W10gPSB7Ci0rICAgIDB4OTksIDB4MDIsIDB4QzksIDB4MUUsIDB4MzEsIDB4ODIsIDB4QjQsIDB4 RTYsIDB4MUIsIDB4MzIsIDB4Q0UsIDB4NUQsCi0rICAgIDB4NDEsIDB4MUQsIDB4MDAsIDB4MkYs IDB4MDQsIDB4OEIsIDB4QkQsIDB4MzcsIDB4NzksIDB4Q0YsIDB4NzcsIDB4MDMsCi0rICAgIDB4 MDUsIDB4NkEsIDB4MjEsIDB4QzcsIDB4OEQsIDB4MjQsIDB4NjAsIDB4NDksIDB4MzksIDB4NTgs IDB4QzUsIDB4MjcsCi0rICAgIDB4OEYsIDB4QzUsIDB4OTcsIDB4NEEsIDB4QjIsIDB4RTEsIDB4 RDQsIDB4MzYsIDB4NTcsIDB4QkQsIDB4NDMsIDB4Q0MsCi0rICAgIDB4N0IsIDB4Q0UsIDB4RjIs IDB4QTUsIDB4MzAsIDB4RjgsIDB4NzIsIDB4MTQsIDB4QkIsIDB4RDAsIDB4OUYsIDB4QzEsCi0r ICAgIDB4NDksIDB4QzgsIDB4MUMsIDB4QUYsIDB4Q0QsIDB4OTUsIDB4NzgsIDB4NzIsIDB4MjUs IDB4RjksIDB4NDUsIDB4QzYsCi0rICAgIDB4NUIsIDB4NjIsIDB4NUUsIDB4MDEsIDB4RDcsIDB4 NDAsIDB4NUUsIDB4QzgsIDB4Q0EsIDB4MEEsIDB4RjMsIDB4QkEsCi0rICAgIDB4MDgsIDB4MDcs IDB4ODgsIDB4Q0EsIDB4NDksIDB4MzYsIDB4ODQsIDB4N0QsIDB4RjYsIDB4RkMsIDB4NUEsIDB4 REIsCi0rICAgIDB4RkMsIDB4NTAsIDB4RDMsIDB4RUIsIDB4M0QsIDB4ODMsIDB4QjAsIDB4RjUs IDB4OTQsIDB4NUUsIDB4ODgsIDB4QzMsCi0rICAgIDB4ODIsIDB4Q0QsIDB4NTMsIDB4NDAsIDB4 OTYsIDB4MTgsIDB4NkIsIDB4NEEsIDB4NkMsIDB4OUMsIDB4RkUsIDB4RTUsCi0rICAgIDB4M0Is IDB4NzUsIDB4RjksIDB4RUIsIDB4QTUsIDB4NzcsIDB4MTEsIDB4RUYsIDB4ODgsIDB4MUMsIDB4 MjUsIDB4NzAsCi0rICAgIDB4N0QsIDB4ODgsIDB4NUQsIDB4QzMsIDB4Q0EsIDB4RTEsIDB4NDks IDB4MTQsIDB4OTAsIDB4QUQsIDB4RjIsIDB4NUUsCi0rICAgIDB4NDksIDB4RDcsIDB4OTksIDB4 QTUsIDB4N0IsIDB4NzcsIDB4M0IsIDB4OEUsIDB4QjgsIDB4REIsIDB4RjEsIDB4NEMsCi0rICAg IDB4RDYsIDB4OUEsIDB4REMsIDB4RTUsIDB4N0EsIDB4MUMsIDB4RTEsIDB4Q0UsIDB4OUQsIDB4 RjEsIDB4RjMsIDB4QTAsCi0rICAgIDB4MEEsIDB4MzUsIDB4NTIsIDB4OUQsIDB4QjksIDB4NDYs IDB4OTQsIDB4ODIsIDB4MEYsIDB4RjcsIDB4QjIsIDB4NjIsCi0rICAgIDB4NTEsIDB4NzAsIDB4 NzUsIDB4RDIsIDB4MzcsIDB4OTYsIDB4NjcsIDB4MkYsIDB4RDAsIDB4MjIsIDB4RDgsIDB4MDcs Ci0rICAgIDB4OEQsIDB4NjksIDB4OUUsIDB4NkQsIDB4MEIsIDB4NDAsIDB4NEYsIDB4NzAsIDB4 RUMsIDB4MEIsIDB4Q0EsIDB4ODgsCi0rICAgIDB4ODAsIDB4OEQsIDB4OUEsIDB4RjQsIDB4Rjks IDB4MTgsIDB4NTAsIDB4MjcsIDB4MDgsIDB4RkEsIDB4Q0MsIDB4QzcsCi0rICAgIDB4M0YsIDB4 RTQsIDB4ODQsIDB4ODMsIDB4QTEsIDB4QjYsIDB4MUQsIDB4MjMsIDB4MzQsIDB4RkUsIDB4NDgs IDB4RTUsCi0rICAgIDB4RTMsIDB4QUUsIDB4NEQsIDB4OTgsIDB4QkMsIDB4QTYsIDB4OEEsIDB4 OUYsIDB4RkQsIDB4NEQsIDB4REIsIDB4OUQsCi0rICAgIDB4RjcsIDB4RUIsIDB4NEUsIDB4QjYs IDB4NkYsIDB4MjUsIDB4RUEsIDB4N0EsIDB4RTksIDB4ODUsIDB4QjIsIDB4RUYsCi0rICAgIDB4 OTAsIDB4RDIsIDB4QTYsIDB4MkIKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGthdF9SU0FfUFNTX1NIQTUxMltdID0gewotKyAgICAweDNGLCAweDgzLCAweDQzLCAweDc4LCAw eDI1LCAweEJFLCAweDgxLCAweEIyLCAweDZFLCAweDc4LCAweDExLCAweDMyLAotKyAgICAweEQw LCAweDg4LCAweDA1LCAweDUzLCAweDk1LCAweEVELCAweDgxLCAweDEyLCAweENFLCAweDUwLCAw eEQ5LCAweDA2LAotKyAgICAweDQyLCAweDg5LCAweEEwLCAweDU1LCAweDdBLCAweDA1LCAweDEz LCAweDk0LCAweDM1LCAweDlCLCAweENBLCAweDVELAotKyAgICAweENCLCAweEIyLCAweDMyLCAw eEUxLCAweDA0LCAweDk5LCAweEVDLCAweEU3LCAweEE2LCAweDY5LCAweDRELCAweDJCLAotKyAg ICAweEMxLCAweDU3LCAweDEzLCAweDQ4LCAweDBELCAweDZCLCAweDRELCAweDgzLCAweDI4LCAw eDA2LCAweDc5LCAweDlELAotKyAgICAweEI0LCAweDcwLCAweENFLCAweEMwLCAweEZDLCAweDNC LCAweDY5LCAweEIzLCAweDkxLCAweDU0LCAweEE5LCAweDQ0LAotKyAgICAweDJFLCAweERBLCAw eDRBLCAweEM1LCAweEMyLCAweDk5LCAweEYwLCAweERFLCAweENBLCAweDc3LCAweDk5LCAweDZC LAotKyAgICAweDBDLCAweDc5LCAweEU1LCAweDI5LCAweDc0LCAweDgzLCAweDY5LCAweEVBLCAw eEI4LCAweDcyLCAweDMwLCAweDNELAotKyAgICAweDdBLCAweDMwLCAweEUxLCAweDAzLCAweDdC LCAweDA5LCAweEU2LCAweDExLCAweEMwLCAweERDLCAweEZGLCAweEZELAotKyAgICAweEJELCAw eEVDLCAweDlDLCAweENDLCAweDQ2LCAweDdCLCAweDRDLCAweDRDLCAweDU5LCAweEJFLCAweDgy LCAweDdDLAotKyAgICAweEY1LCAweDYwLCAweDVBLCAweEMzLCAweEU4LCAweEE4LCAweDhBLCAw eDM4LCAweDlFLCAweDAxLCAweDU3LCAweEYxLAotKyAgICAweDc5LCAweDNBLCAweDdDLCAweEEz LCAweDlGLCAweDEyLCAweDFBLCAweDRGLCAweDJFLCAweEEyLCAweEU1LCAweDBBLAotKyAgICAw eEFCLCAweEMwLCAweEY0LCAweEE1LCAweEUzLCAweDVGLCAweDg5LCAweDFDLCAweDhGLCAweEE0 LCAweDVFLCAweENFLAotKyAgICAweDBELCAweDkxLCAweDA1LCAweDFCLCAweDE3LCAweDYyLCAw eDQ4LCAweEZFLCAweEE1LCAweDRDLCAweEVGLCAweDJELAotKyAgICAweDI4LCAweEYxLCAweDVF LCAweEU2LCAweEQxLCAweDMwLCAweDg5LCAweDBBLCAweEFELCAweDE4LCAweEFGLCAweDZGLAot KyAgICAweDA0LCAweDA5LCAweDM2LCAweDlBLCAweEZGLCAweENBLCAweEExLCAweEE3LCAweDA1 LCAweDdGLCAweEQ0LCAweEJGLAotKyAgICAweDNBLCAweEI1LCAweDQyLCAweDZELCAweEU5LCAw eDA3LCAweDI5LCAweDY1LCAweDhCLCAweEFELCAweDRELCAweDBGLAotKyAgICAweDIyLCAweEUx LCAweDU5LCAweDQzLCAweDY4LCAweDg3LCAweEE4LCAweDhCLCAweEJDLCAweDY5LCAweEExLCAw eDk0LAotKyAgICAweDIyLCAweDNFLCAweDhBLCAweDQ5LCAweEU4LCAweEEzLCAweDZGLCAweEMy LCAweDkzLCAweDU4LCAweEU3LCAweEFFLAotKyAgICAweEM5LCAweDFGLCAweENGLCAweDYxLCAw eDkzLCAweEZDLCAweEMxLCAweEY2LCAweEYzLCAweDI3LCAweDdGLCAweDBBLAotKyAgICAweDkw LCAweEUwLCAweDY1LCAweDMyLCAweDU3LCAweDQ3LCAweEUyLCAweEVELCAweDA4LCAweDU5LCAw eEE2LCAweEYwLAotKyAgICAweDE3LCAweDJDLCAweDEzLCAweEUwCi0rfTsKLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTFbXSA9IHsKLSsgICAgMHgzQiwgMHg2MCwg MHg0QiwgMHhGQywgMHg1NCwgMHgyOCwgMHgyMywgMHhFNiwgMHgyRiwgMHgwNSwgMHgwNCwgMHhC QSwKLSsgICAgMHg5RCwgMHhFNCwgMHgzQywgMHhCOCwgMHg1QiwgMHg2MCwgMHg1QywgMHhDRCwg MHg5RCwgMHhFQSwgMHhDMywgMHg0QywKLSsgICAgMHhDMiwgMHgzMywgMHhFNiwgMHhDNiwgMHgy MSwgMHg0OCwgMHg3NiwgMHhFQywgMHhCMiwgMHhGNSwgMHgxMSwgMHhERSwKLSsgICAgMHg0NCwg MHhCNCwgMHhBRiwgMHgxNiwgMHgxMSwgMHhDMywgMHgxOCwgMHgxNiwgMHhCMywgMHg2OSwgMHhC QiwgMHg5NCwKLSsgICAgMHhFRCwgMHhFOCwgMHhCMywgMHg5RSwgMHhCMSwgMHg0MywgMHg4RSwg MHhDRSwgMHhCNCwgMHgzNCwgMHg5QiwgMHgwOCwKLSsgICAgMHgyMiwgMHhBRiwgMHgzMSwgMHg3 MywgMHhCNSwgMHhGQSwgMHgxMSwgMHg3RSwgMHg4RiwgMHgxMywgMHg1MiwgMHhFQywKLSsgICAg MHhDOSwgMHgwMywgMHhFRSwgMHgwRCwgMHgyQiwgMHg5MSwgMHgzMiwgMHhGMiwgMHg4RSwgMHhE RiwgMHgwMiwgMHhFMCwKLSsgICAgMHgwQSwgMHg0NywgMHhEMiwgMHgwQSwgMHg1MSwgMHgwMCwg MHgxQSwgMHgzMCwgMHg2RiwgMHgwQywgMHhCMywgMHg1NCwKLSsgICAgMHg2NCwgMHgyMCwgMHg5 MCwgMHgwQywgMHgwMSwgMHhCRSwgMHhDMCwgMHg0MiwgMHg4QywgMHg1RCwgMHgxOCwgMHg2RiwK LSsgICAgMHgzMiwgMHg3NSwgMHg0NSwgMHg3QiwgMHgxQywgMHgwNCwgMHhBMiwgMHg5RiwgMHg4 NCwgMHhENywgMHhGNSwgMHgzQSwKLSsgICAgMHg5NSwgMHhENCwgMHhFOCwgMHg4RCwgMHhFQywg MHg5OSwgMHhFRiwgMHgxOCwgMHg1RSwgMHg2NCwgMHhEMywgMHhBRiwKLSsgICAgMHhGOCwgMHhE NCwgMHhGRiwgMHgzQywgMHg4NywgMHhBMCwgMHgzRiwgMHhDNywgMHgyMiwgMHgwNSwgMHhGRCwg MHhGRCwKLSsgICAgMHgyOSwgMHg4QSwgMHgyOCwgMHhEQSwgMHhBOSwgMHg4QSwgMHg4QiwgMHgy MywgMHg2MiwgMHg5RCwgMHg0MiwgMHhCOCwKLSsgICAgMHg0QSwgMHg3NiwgMHgwRCwgMHg5Riwg MHg5QSwgMHhFMCwgMHhFNiwgMHhERCwgMHhBRCwgMHg1RSwgMHg1RiwgMHhENSwKLSsgICAgMHgz MiwgMHhFOSwgMHg0QiwgMHg5NywgMHg3RCwgMHg2MiwgMHgwQSwgMHhCMywgMHhCRSwgMHhGMiwg MHg4QywgMHgxRiwKLSsgICAgMHgyQiwgMHgyMiwgMHgwNiwgMHgxNSwgMHgzMywgMHg3MSwgMHhF RCwgMHg5QiwgMHhBMCwgMHg4MiwgMHhDRSwgMHhCRiwKLSsgICAgMHgzQiwgMHgwOCwgMHg1Riwg MHhBNywgMHgyMCwgMHg5NCwgMHgwOSwgMHhFQiwgMHg4MiwgMHhBNSwgMHg0MSwgMHg2MCwKLSsg ICAgMHhGMSwgMHgwOCwgMHhFQiwgMHg4RCwgMHhDQywgMHg4RCwgMHhDOSwgMHg1MiwgMHgwQSwg MHhBRiwgMHhGNCwgMHhGOSwKLSsgICAgMHg5RiwgMHg4MiwgMHhEOCwgMHgwQiwgMHg3NSwgMHg1 RSwgMHhFNCwgMHhBRiwgMHg2NSwgMHg5NiwgMHhBRiwgMHhGQywKLSsgICAgMHgzMywgMHhCRiwg MHg5RiwgMHgzRSwgMHhBNCwgMHg3QiwgMHg4NiwgMHhDNywgMHhGNywgMHg0NywgMHhBQiwgMHgz NywKLSsgICAgMHgwNSwgMHhENiwgMHgwRCwgMHgzMSwgMHg3MiwgMHg4QywgMHg4MCwgMHgxRSwg MHhBOSwgMHg1NCwgMHhGQywgMHhERiwKLSsgICAgMHgyNywgMHg5MCwgMHhFMiwgMHgwMQotK307 Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyMjRbXSA9IHsKLSsg ICAgMHhBMiwgMHhEOCwgMHg0MiwgMHg1MywgMHhERCwgMHhCRiwgMHgxRiwgMHg2QiwgMHgwNywg MHhFMCwgMHg2MCwgMHg4NiwKLSsgICAgMHg1QSwgMHg2MCwgMHgwNiwgMHg4RiwgMHg0NCwgMHhE OSwgMHhCMCwgMHg0QSwgMHhBQSwgMHg5MCwgMHg3MSwgMHhCOCwKLSsgICAgMHhCMiwgMHhCQywg MHgzMCwgMHg0MSwgMHg1MCwgMHhCQiwgMHhGRCwgMHg0NiwgMHg5OCwgMHg0RCwgMHhDMCwgMHg4 OSwKLSsgICAgMHg1NywgMHg4NSwgMHg4QSwgMHg5NywgMHg0OSwgMHgyNSwgMHhBOCwgMHgwQywg MHg2OSwgMHg3MCwgMHgxOSwgMHgzOSwKLSsgICAgMHg2NiwgMHgyNCwgMHhCNCwgMHg2OSwgMHg0 NywgMHhEMiwgMHg3QywgMHhERSwgMHgyRCwgMHgzNywgMHg1OSwgMHhCMywKLSsgICAgMHhFMywg MHhDNywgMHg2QiwgMHhERCwgMHhCRSwgMHhFMSwgMHhFNiwgMHgyOCwgMHg5QSwgMHg4RCwgMHg0 MiwgMHgzRSwKLSsgICAgMHgyOCwgMHgwMSwgMHhENywgMHgwMywgMHhDOSwgMHg3MywgMHhDMywg MHg2QiwgMHgwMywgMHhFQywgMHgxRSwgMHhGOCwKLSsgICAgMHg1MywgMHg4QiwgMHg1MiwgMHg0 MiwgMHg4OSwgMHg1NSwgMHhCNywgMHg4NywgMHhBOSwgMHg5NCwgMHhDMiwgMHhCNCwKLSsgICAg MHg0QiwgMHg3NiwgMHhGNSwgMHg2MSwgMHg0NywgMHhFMSwgMHg0NCwgMHg3QiwgMHhFQywgMHhC NCwgMHgyNSwgMHg2NiwKLSsgICAgMHhDMCwgMHhGRiwgMHhFQiwgMHg4NiwgMHgyNCwgMHhBQSwg MHhBOCwgMHg3MiwgMHhDNywgMHhGQiwgMHhGQiwgMHhGNiwKLSsgICAgMHg4NCwgMHhBNywgMHg1 QiwgMHhENCwgMHg4NywgMHhFNSwgMHg4NCwgMHg1NiwgMHgxRSwgMHg0QywgMHhFNSwgMHhCQywK LSsgICAgMHg4NywgMHg5NCwgMHhBQywgMHg5QywgMHgxQiwgMHgzRCwgMHhGNywgMHhENCwgMHgz NiwgMHg4NSwgMHg5RiwgMHhDOSwKLSsgICAgMHhGNiwgMHg0MywgMHgzRiwgMHhCNiwgMHgyNSwg MHgzMywgMHg0OCwgMHgwRiwgMHhFNSwgMHg3QywgMHhDRCwgMHg1MywKLSsgICAgMHg0OCwgMHhF QiwgMHgwMiwgMHgxMSwgMHhCOSwgMHg5RSwgMHhDMywgMHhCNCwgMHhFMSwgMHg1NCwgMHhENiwg MHhBQSwKLSsgICAgMHgxQSwgMHg5RSwgMHgxMCwgMHhFMSwgMHgyNywgMHgyNSwgMHhGMiwgMHhF MSwgMHhBQiwgMHhBQiwgMHg2QywgMHg0NSwKLSsgICAgMHg2MSwgMHhENSwgMHhBMywgMHg2Qywg MHhCNiwgMHgzMywgMHg1MiwgMHhBRSwgMHgzRCwgMHhGRCwgMHgyMiwgMHhGQywKLSsgICAgMHgz QSwgMHhBQiwgMHg2MywgMHg5NCwgMHhCNSwgMHgzQSwgMHg2OSwgMHgxMSwgMHhBQywgMHg5OSwg MHg0RiwgMHgzMywKLSsgICAgMHg2NywgMHgwQSwgMHgxQSwgMHg3MCwgMHgxRSwgMHhCOSwgMHhF MiwgMHgyNiwgMHgyNywgMHg2OCwgMHhFQSwgMHhGNSwKLSsgICAgMHg5NywgMHg1NSwgMHhBQywg MHg4MywgMHg2QSwgMHg0MCwgMHgzQiwgMHg1NiwgMHhBRSwgMHgxMywgMHg4OCwgMHhFOCwKLSsg ICAgMHg5OCwgMHg3MiwgMHg1MiwgMHg5MSwgMHg3RiwgMHg3OCwgMHgwQSwgMHgxOCwgMHhENCwg MHg0NCwgMHg3OCwgMHg4MywKLSsgICAgMHgwRCwgMHg0NCwgMHg3NywgMHhBNiwgMHhGMywgMHgw NCwgMHhGMSwgMHg4QywgMHhCQywgMHgyRiwgMHhGOSwgMHg1QiwKLSsgICAgMHhEQiwgMHg3MCwg MHgwMCwgMHhGNgotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9T SEEyNTZbXSA9IHsKLSsgICAgMHhDMiwgMHhCMSwgMHg5NywgMHgwMCwgMHg5QSwgMHhFNSwgMHg4 MCwgMHg2QSwgMHhFMiwgMHg1MSwgMHg2OCwgMHhCOSwKLSsgICAgMHg3QSwgMHgwQywgMHhGMiwg MHhCNCwgMHg3NywgMHhFRCwgMHgxNSwgMHgwQywgMHg0RSwgMHhFMSwgMHhEQywgMHhGRiwKLSsg ICAgMHg4RSwgMHhCQywgMHhERSwgMHhDNywgMHg5QSwgMHg5NiwgMHhGMSwgMHg0NywgMHg0NSwg MHgyNCwgMHg5RCwgMHg2RiwKLSsgICAgMHhBNiwgMHhGMywgMHgxRCwgMHgwRCwgMHgzNSwgMHg0 QywgMHgxQSwgMHhGMywgMHg1OCwgMHgyQywgMHg2QywgMHgwNiwKLSsgICAgMHhENiwgMHgyMiwg MHgzNywgMHg3NywgMHg4QywgMHgzMywgMHhFNSwgMHgwNywgMHg1MywgMHg5MywgMHgyOCwgMHhD RiwKLSsgICAgMHg2NywgMHhGQSwgMHhDNCwgMHgxRiwgMHgxQiwgMHgyNCwgMHhEQiwgMHg0Qywg MHhDNSwgMHgyQSwgMHg1MSwgMHhBMiwKLSsgICAgMHg2MCwgMHgxNSwgMHg4QywgMHg1NCwgMHhC NCwgMHgzMCwgMHhFMiwgMHgyNCwgMHg0NywgMHg4NiwgMHhGMiwgMHhGOCwKLSsgICAgMHg2Qywg MHhENiwgMHgxMiwgMHg1OSwgMHgyQywgMHg3NCwgMHg5QSwgMHgzNywgMHhGMywgMHhDNCwgMHhB MiwgMHhENSwKLSsgICAgMHg0RSwgMHgxRiwgMHg3NywgMHhGMCwgMHgyNywgMHhDRSwgMHg3Nywg MHhGOCwgMHg0QSwgMHg3OSwgMHgwMywgMHhCRSwKLSsgICAgMHhDOCwgMHgwNiwgMHgyRCwgMHhB NywgMHhBNiwgMHg0NiwgMHhGNSwgMHg1NSwgMHg3OSwgMHhENywgMHg1QywgMHhDNiwKLSsgICAg MHg1QiwgMHhCMSwgMHgwMCwgMHg0RSwgMHg3QywgMHhEOSwgMHgxMSwgMHg4NSwgMHhFMCwgMHhC MSwgMHg0RCwgMHgyRCwKLSsgICAgMHgxMywgMHhENywgMHhBQywgMHhFQSwgMHg2NCwgMHhEMSwg MHhBQywgMHg4RiwgMHg4RCwgMHg4RiwgMHhFQSwgMHg0MiwKLSsgICAgMHg3RiwgMHhGOSwgMHhC NywgMHg3RCwgMHgyQywgMHg2OCwgMHg0OSwgMHgwNywgMHg3QSwgMHg3NCwgMHhFRiwgMHhCNCwK LSsgICAgMHhDOSwgMHg5NywgMHgxNiwgMHg1QywgMHg2QywgMHg2RSwgMHg1QywgMHgwOSwgMHgy RSwgMHg4RSwgMHgxMywgMHgyRSwKLSsgICAgMHgxQSwgMHg4RCwgMHhBNiwgMHgwQywgMHg2RSwg MHgwQywgMHgxQywgMHgwRiwgMHhDQywgMHhCMiwgMHg3OCwgMHg4QSwKLSsgICAgMHgwNywgMHhG QywgMHg1QywgMHhDMiwgMHhGNSwgMHg2NSwgMHhFQywgMHhBQiwgMHg4QiwgMHgzQywgMHhDQSwg MHg5MSwKLSsgICAgMHg2RiwgMHg4NCwgMHg3QywgMHgyMSwgMHgwRSwgMHhCOCwgMHhEQSwgMHg3 QiwgMHg2QywgMHhGNywgMHhERiwgMHhBQiwKLSsgICAgMHg3RSwgMHgxNSwgMHhGRCwgMHg4NSwg MHgwQiwgMHgzMywgMHg5QiwgMHg2QSwgMHgzQSwgMHhDMywgMHhFRiwgMHg2NSwKLSsgICAgMHgw NCwgMHg2RSwgMHhCMiwgMHhBQywgMHg5OCwgMHhGRCwgMHhFQiwgMHgwMiwgMHhGNSwgMHhDMCwg MHgwQiwgMHg1RSwKLSsgICAgMHhDQiwgMHhENCwgMHg4MywgMHg4MiwgMHgxOCwgMHgxQiwgMHhE QSwgMHhCNCwgMHhDRCwgMHhFOCwgMHg3MSwgMHg2QiwKLSsgICAgMHgxRCwgMHhCNSwgMHg0Riwg MHhFOSwgMHhENiwgMHg0MywgMHhBMCwgMHgwQSwgMHgxNCwgMHhBMCwgMHhFNywgMHg1RCwKLSsg ICAgMHg0NywgMHg5RCwgMHgxOCwgMHhENwotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsKLSsgICAgMHgxMSwgMHg1RSwgMHg2MywgMHhGRSwg MHg0NywgMHhBQSwgMHg2QSwgMHg4NCwgMHhFQiwgMHg0NCwgMHg5QSwgMHgwMCwKLSsgICAgMHg5 NiwgMHg0QSwgMHhFRCwgMHhEMiwgMHhBNywgMHg2NywgMHgzQSwgMHg2NCwgMHg4MiwgMHgzMCwg MHg2MSwgMHgyRCwKLSsgICAgMHhFMywgMHhGNSwgMHg0OSwgMHg2OCwgMHg1RSwgMHg2MCwgMHhE MiwgMHg0RCwgMHhFRiwgMHhGMiwgMHhBNCwgMHhCMiwKLSsgICAgMHg5QSwgMHg4MSwgMHgxRCwg MHg0MSwgMHhBNSwgMHg3MywgMHg1OSwgMHhFQiwgMHhCQiwgMHhDNCwgMHg5RSwgMHgyQiwKLSsg ICAgMHhFQiwgMHhDMywgMHhERSwgMHgzQSwgMHhFQSwgMHhGNSwgMHhBRCwgMHhEQSwgMHg4Nywg MHgwOCwgMHg2OCwgMHhDRiwKLSsgICAgMHgxMiwgMHg5QiwgMHhDMSwgMHhFNCwgMHhBNywgMHg3 MSwgMHhGOCwgMHhCRCwgMHg2QiwgMHg2RiwgMHg1MCwgMHhGMSwKLSsgICAgMHhEMSwgMHhGRiwg MHhDRSwgMHg2QywgMHhEOSwgMHhCRSwgMHhEQSwgMHg3NiwgMHhGMywgMHhFQiwgMHhBQiwgMHg5 QywKLSsgICAgMHg0MSwgMHg2RSwgMHg0RiwgMHgzNSwgMHg3QSwgMHg2MSwgMHgyNywgMHhCQywg MHgwMywgMHgzRSwgMHhBRSwgMHgzRSwKLSsgICAgMHgxQiwgMHhERCwgMHhBQywgMHhEOSwgMHgx QSwgMHhGRiwgMHhEMywgMHhGNSwgMHg2NiwgMHg0MywgMHgwNywgMHg3NiwKLSsgICAgMHg4QSwg MHg2OSwgMHgyRCwgMHgxNCwgMHhCMSwgMHhCRSwgMHg1NSwgMHg0OSwgMHg5MCwgMHg4OSwgMHg0 QiwgMHhDNCwKLSsgICAgMHgxMSwgMHg2NywgMHhENSwgMHg5RCwgMHhCMCwgMHhCMiwgMHhFRSwg MHg4RCwgMHgwQSwgMHg0NywgMHg0QSwgMHhEOSwKLSsgICAgMHgwRSwgMHhEMSwgMHgyNCwgMHhG MCwgMHgzMCwgMHgyQiwgMHhGMiwgMHg3OSwgMHg0NywgMHhEQiwgMHg3MCwgMHhCNCwKLSsgICAg MHg0NiwgMHhGMiwgMHhGOCwgMHhCNywgMHhCNCwgMHhGNiwgMHgzNCwgMHg3OSwgMHhBOCwgMHgy RCwgMHgzRCwgMHg1NiwKLSsgICAgMHhENSwgMHg5QSwgMHg2MCwgMHg3QSwgMHgwNCwgMHhDNywg MHg2NiwgMHgxRCwgMHhDRCwgMHgzQywgMHhENSwgMHgzOSwKLSsgICAgMHgzNywgMHgxMiwgMHg1 MSwgMHg1RSwgMHg5RiwgMHhGOCwgMHgxQSwgMHhBRiwgMHgxMywgMHhDMSwgMHgxMywgMHgwMCwK LSsgICAgMHgzNSwgMHhENSwgMHg4RCwgMHgxNywgMHhFMywgMHgwMiwgMHgyOCwgMHhEOSwgMHhF QywgMHhERSwgMHhEMSwgMHgyRiwKLSsgICAgMHg5MywgMHg0OSwgMHgwMywgMHgxMSwgMHgzRSwg MHg1NiwgMHg5RCwgMHhDMiwgMHgzMSwgMHhGOCwgMHhBRiwgMHgyRCwKLSsgICAgMHhEOSwgMHg5 OSwgMHhCNywgMHg4QSwgMHhBQywgMHg1QSwgMHg4NiwgMHgyMCwgMHgzQSwgMHg4MywgMHgyOSwg MHgyNiwKLSsgICAgMHg5RCwgMHgwMywgMHg1MiwgMHgyQiwgMHgzNCwgMHg1NiwgMHg0MCwgMHgx NiwgMHg1MywgMHg1MCwgMHg4MiwgMHhDOSwKLSsgICAgMHhDNywgMHhENSwgMHg1MSwgMHg0Qywg MHhFRCwgMHhCMywgMHhFMiwgMHhFMSwgMHhDRiwgMHhBOCwgMHhDRSwgMHhCRCwKLSsgICAgMHhC MSwgMHg0OCwgMHhBNiwgMHg4QSwgMHg3OSwgMHgxNywgMHg1NSwgMHgxMSwgMHhFRiwgMHhFOCwg MHgxNCwgMHhGNCwKLSsgICAgMHg3RSwgMHgzNywgMHgxRCwgMHg5NgotK307Ci0rCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEE1MTJbXSA9IHsKLSsgICAgMHgzNSwgMHg2 RCwgMHhGMSwgMHg5RSwgMHhDRiwgMHhCMSwgMHhGNiwgMHgwQywgMHgwNCwgMHgyMSwgMHgxNywg MHhCMywKLSsgICAgMHhDNCwgMHg5RCwgMHhGRSwgMHg2MiwgMHgxQywgMHgxQSwgMHg0NSwgMHgw MCwgMHgyRSwgMHg2QiwgMHhCNiwgMHg5RiwKLSsgICAgMHg1QywgMHhCMSwgMHhDQiwgMHhDRiwg MHhGOSwgMHg2NywgMHhFQSwgMHg2MiwgMHg4QSwgMHhFQiwgMHg3NywgMHgwMiwKLSsgICAgMHg0 MiwgMHgzMCwgMHg4OCwgMHhCMSwgMHg0OCwgMHhERiwgMHgxMiwgMHg2MCwgMHg2RSwgMHg5Miwg MHhCQiwgMHg0QiwKLSsgICAgMHgwOSwgMHg2OCwgMHhEMSwgMHg3MCwgMHgyQiwgMHg1OSwgMHhF RSwgMHg1NywgMHg5NiwgMHhGOSwgMHhFQSwgMHhBMywKLSsgICAgMHg0QywgMHhFOSwgMHhDOSwg MHhCRCwgMHgyNSwgMHgzNCwgMHg2NiwgMHgxNSwgMHg2QywgMHhDOSwgMHg4MSwgMHhEMSwKLSsg ICAgMHg0OCwgMHgwRiwgMHgzMywgMHg1RiwgMHgwNSwgMHg0RiwgMHhDMiwgMHhDNCwgMHhERCwg MHgwOSwgMHg1NCwgMHg3OSwKLSsgICAgMHhBMSwgMHg1NywgMHgwNywgMHg3MCwgMHhBMCwgMHgz MywgMHgwMiwgMHg0RCwgMHg1RCwgMHhFOSwgMHgyNCwgMHhEMSwKLSsgICAgMHhFRiwgMHhGMCwg MHg2MSwgMHhEMCwgMHgxRCwgMHg0MSwgMHhFMiwgMHg5QiwgMHgyQiwgMHg3QywgMHhEMCwgMHg0 RSwKLSsgICAgMHg1NSwgMHhEOSwgMHg2RCwgMHhBMSwgMHgxNiwgMHg5RiwgMHhEQSwgMHhDMywg MHgzQiwgMHhGMSwgMHg3NCwgMHhEMSwKLSsgICAgMHg5OSwgMHhGMSwgMHg2MywgMHg1NywgMHhB RCwgMHhDNywgMHg1NSwgMHhGNCwgMHg5NywgMHg0MywgMHgxQywgMHhFRCwKLSsgICAgMHgxQiwg MHg3QSwgMHgzMiwgMHhDQiwgMHgyNCwgMHhBNiwgMHgzRCwgMHg5MywgMHgzNywgMHg5MCwgMHg3 NCwgMHhFRSwKLSsgICAgMHhEMiwgMHg4RCwgMHg0QiwgMHhCQywgMHg3MiwgMHhEQSwgMHgyNSwg MHgyQiwgMHg2NCwgMHhFOSwgMHhDQSwgMHg2OSwKLSsgICAgMHgzNiwgMHhCNiwgMHhFQywgMHg2 RSwgMHg4RiwgMHgzMywgMHgwRSwgMHg3NCwgMHg0MCwgMHg0OCwgMHg1MSwgMHhFMiwKLSsgICAg MHg1NCwgMHg2RiwgMHhBRiwgMHg2RSwgMHgzNiwgMHg1NCwgMHgzQSwgMHhFQywgMHg3OCwgMHgz NywgMHhFNiwgMHgxRiwKLSsgICAgMHg3NiwgMHhBNSwgMHg0RCwgMHhBNiwgMHhEOSwgMHhCMywg MHg2QiwgMHgxNywgMHg2RCwgMHg2MSwgMHhGQywgMHhBMywKLSsgICAgMHg4NSwgMHg0QSwgMHhD QywgMHhEQSwgMHg1MiwgMHhBQywgMHg1QiwgMHhEQSwgMHg1MSwgMHhFNSwgMHg3RiwgMHg1QiwK LSsgICAgMHg1MiwgMHg4QiwgMHg3NCwgMHg3NSwgMHg5OSwgMHg1QywgMHgwMSwgMHhGRCwgMHgy NSwgMHgzRSwgMHhDRCwgMHg4NiwKLSsgICAgMHg2RiwgMHg3QSwgMHhDMCwgMHhEOCwgMHgxNywg MHg2RiwgMHhEMSwgMHhEMiwgMHg2QiwgMHhBQiwgMHgxNCwgMHgxRiwKLSsgICAgMHgzQiwgMHhC OCwgMHgxNSwgMHgwNSwgMHg4NiwgMHg0MCwgMHgzNiwgMHhDRiwgMHhEQSwgMHg1OSwgMHgyQiwg MHg5QSwKLSsgICAgMHhFOSwgMHgxRSwgMHg2RSwgMHhEMywgMHg2QiwgMHhBMSwgMHgxOSwgMHhD NSwgMHhFNiwgMHgzRiwgMHhFOSwgMHgyRSwKLSsgICAgMHg0MywgMHhBOCwgMHgzNCwgMHgwQQot K307Ci0rCi0rc3RhdGljIGludCBmaXBzX3JzYV9lbmNyeXB0X3Rlc3QoUlNBICpyc2EsIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgcHRsZW4pCi0rewotKyAgICB1bnNpZ25lZCBjaGFyICpjdGJ1ZiA9IE5VTEwsICpw dGJ1ZiA9IE5VTEw7Ci0rICAgIGludCByZXQgPSAwOwotKyAgICBpbnQgbGVuOwotKwotKyAgICBj dGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOwotKyAgICBpZiAoIWN0YnVmKQot KyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGxlbiA9IFJTQV9wdWJsaWNfZW5jcnlwdChwdGxl biwgcGxhaW50ZXh0LCBjdGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7Ci0rICAgIGlmIChs ZW4gPD0gMCkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICAvKiBDaGVjayBjaXBoZXJ0ZXh0IGRv ZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0ICovCi0rICAgIGlmIChsZW4gPj0gcHRsZW4gJiYgIW1lbWNt cChwbGFpbnRleHQsIGN0YnVmLCBwdGxlbikpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAg cHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKLSsgICAgaWYgKCFwdGJ1ZikK LSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBsZW4gPSBSU0FfcHJpdmF0ZV9kZWNyeXB0KGxl biwgY3RidWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKLSsgICAgaWYgKGxlbiAh PSBwdGxlbikKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAobWVtY21wKHB0YnVmLCBwbGFp bnRleHQsIGxlbikpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgcmV0ID0gMTsKLSsKLSsg ZXJyOgotKyAgICBpZiAoY3RidWYpCi0rICAgICAgICBPUEVOU1NMX2ZyZWUoY3RidWYpOwotKyAg ICBpZiAocHRidWYpCi0rICAgICAgICBPUEVOU1NMX2ZyZWUocHRidWYpOwotKyAgICByZXR1cm4g cmV0OwotK30KLSsKLStpbnQgRklQU19zZWxmdGVzdF9yc2EoKQotK3sKLSsgICAgaW50IHJldCA9 IDA7Ci0rICAgIFJTQSAqa2V5OwotKyAgICBFVlBfUEtFWSAqcGsgPSBOVUxMOwotKwotKyAgICBp ZiAoKGtleSA9IFJTQV9uZXcoKSkgPT0gTlVMTCkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAg ICBpZiAoIXNldHJzYWtleShrZXkpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGlmICgo cGsgPSBFVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAg ICBFVlBfUEtFWV9zZXQxX1JTQShwaywga2V5KTsKLSsKLSsgICAgaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfU0hBMSwgc2l6ZW9mKGthdF9SU0FfU0hB MSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9zaGExKCksIEVWUF9N RF9DVFhfRkxBR19QQURfUEtDUzEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJSU0EgU0hBMSBQS0NTIzEiKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIWZpcHNf cGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9TSEEyMjQsIHNpemVvZihr YXRfUlNBX1NIQTIyNCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9z aGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlJTQSBTSEEyMjQgUEtDUyMxIikpCi0rICAgICAgICBnb3RvIGVycjsK LSsgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihr YXRfdGJzKSAtIDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0Ff U0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9TSEEyNTYpLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hBMjU2IFBLQ1MjMSIpKQotKyAg ICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBr YXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBrYXRfUlNBX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfU0hBMzg0KSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdf UEFEX1BLQ1MxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlNBIFNIQTM4 NCBQS0NTIzEiKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1NI QTUxMiksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9zaGE1MTIoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlJTQSBTSEE1MTIgUEtDUyMxIikpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAg aWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJz KSAtIDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfUFNTX1NI QTEsIHNpemVvZihrYXRfUlNBX1BTU19TSEExKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hBMSBQU1MiKSkKLSsgICAgICAgIGdvdG8g ZXJyOwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0 X1JTQV9QU1NfU0hBMjI0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2Yoa2F0X1JTQV9QU1NfU0hBMjI0KSwgRVZQX3NoYTIyNCgpLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgIlJTQSBTSEEyMjQgUFNT IikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGthdF9SU0FfUFNTX1NIQTI1NiwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTI1NiksIEVWUF9zaGEyNTYoKSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9GTEFHX1BBRF9Q U1MsICJSU0EgU0hBMjU2IFBTUyIpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1BTU19TSEEzODQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrYXRfUlNBX1BTU19TSEEz ODQpLCBFVlBfc2hhMzg0KCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVW UF9NRF9DVFhfRkxBR19QQURfUFNTLCAiUlNBIFNIQTM4NCBQU1MiKSkKLSsgICAgICAgIGdvdG8g ZXJyOwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0 X1JTQV9QU1NfU0hBNTEyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2Yoa2F0X1JTQV9QU1NfU0hBNTEyKSwgRVZQX3NoYTUxMigpLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgIlJTQSBTSEE1MTIgUFNT IikpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgaWYgKCFmaXBzX3JzYV9lbmNyeXB0X3Rl c3Qoa2V5LCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxKSkKLSsgICAgICAgIGdvdG8gZXJy OwotKwotKyAgICByZXQgPSAxOwotKwotKyBlcnI6Ci0rICAgIGlmIChwaykKLSsgICAgICAgIEVW UF9QS0VZX2ZyZWUocGspOwotKyAgICBpZiAoa2V5KQotKyAgICAgICAgUlNBX2ZyZWUoa2V5KTsK LSsgICAgcmV0dXJuIHJldDsKLSt9Ci0rCi0rI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBkZWYgT1BFTlNTTF9GSVBTICovCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8v Zmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2ZpcHMv Zmlwc19zaGFfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNf c2hhX3NlbGZ0ZXN0LmMuZmlwcwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzNjIzNjg3NyArMDIwMAot KysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMJMjAxOC0w My0yOSAxNDo0NDoyNC42MzYyMzY4NzcgKzAyMDAKLUBAIC0wLDAgKzEsMTM4IEBACi0rLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsg KiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgot KyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAot KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGluY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL3NoYS5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMgY29uc3QgY2hh ciB0ZXN0W11bNjBdID0gewotKyAgICAiIiwKLSsgICAgImFiYyIsCi0rICAgICJhYmNkYmNkZWNk ZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIKLSt9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJldFtdW1NIQV9ESUdFU1RfTEVOR1RIXSA9IHsK LSsgICAgezB4ZGEsIDB4MzksIDB4YTMsIDB4ZWUsIDB4NWUsIDB4NmIsIDB4NGIsIDB4MGQsIDB4 MzIsIDB4NTUsCi0rICAgICAweGJmLCAweGVmLCAweDk1LCAweDYwLCAweDE4LCAweDkwLCAweGFm LCAweGQ4LCAweDA3LCAweDA5fSwKLSsgICAgezB4YTksIDB4OTksIDB4M2UsIDB4MzYsIDB4NDcs IDB4MDYsIDB4ODEsIDB4NmEsIDB4YmEsIDB4M2UsCi0rICAgICAweDI1LCAweDcxLCAweDc4LCAw eDUwLCAweGMyLCAweDZjLCAweDljLCAweGQwLCAweGQ4LCAweDlkfSwKLSsgICAgezB4ODQsIDB4 OTgsIDB4M2UsIDB4NDQsIDB4MWMsIDB4M2IsIDB4ZDIsIDB4NmUsIDB4YmEsIDB4YWUsCi0rICAg ICAweDRhLCAweGExLCAweGY5LCAweDUxLCAweDI5LCAweGU1LCAweGU1LCAweDQ2LCAweDcwLCAw eGYxfSwKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQotK3sKLSsgICAgaW50IG47 Ci0rCi0rICAgIGZvciAobiA9IDA7IG4gPCBzaXplb2YodGVzdCkgLyBzaXplb2YodGVzdFswXSk7 ICsrbikgewotKyAgICAgICAgdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07Ci0r Ci0rICAgICAgICBFVlBfRGlnZXN0KHRlc3Rbbl0sIHN0cmxlbih0ZXN0W25dKSwgbWQsIE5VTEws Ci0rICAgICAgICAgICAgICAgICAgIEVWUF9zaGExKCksIE5VTEwpOwotKyAgICAgICAgaWYgKG1l bWNtcChtZCwgcmV0W25dLCBzaXplb2YgbWQpKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBT X0ZfRklQU19TRUxGVEVTVF9TSEExLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAg ICAgICByZXR1cm4gMDsKLSsgICAgICAgIH0KLSsgICAgfQotKyAgICByZXR1cm4gMTsKLSt9Ci0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnX3NoYTI1NltdID0KLSsgICAgeyAweGZh LCAweDQ4LCAweDU5LCAweDJhLCAweGUxLCAweGFlLCAweDFmLCAweDMwLAotKyAgICAweGZjCi0r fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaWdfc2hhMjU2W10gPQotKyAgICB7 IDB4ZjcsIDB4MjYsIDB4ZDgsIDB4OTgsIDB4NDcsIDB4OTEsIDB4NjgsIDB4NWIsCi0rICAgIDB4 OWUsIDB4MzksIDB4YjIsIDB4NTgsIDB4YmIsIDB4NzUsIDB4YmYsIDB4MDEsCi0rICAgIDB4MTcs IDB4MGMsIDB4ODQsIDB4MDAsIDB4MDEsIDB4N2EsIDB4OTQsIDB4ODMsCi0rICAgIDB4ZjMsIDB4 MGIsIDB4MTUsIDB4ODQsIDB4NGIsIDB4NjksIDB4ODgsIDB4OGEKLSt9OwotKwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIG1zZ19zaGE1MTJbXSA9Ci0rICAgIHsgMHgzNywgMHhkMSwgMHgz NSwgMHg5ZCwgMHgxOCwgMHg0MSwgMHhlOSwgMHhiNywKLSsgICAgMHg2ZCwgMHg5YSwgMHgxMywg MHhkYSwgMHg1ZiwgMHhmMywgMHhiZAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgZGlnX3NoYTUxMltdID0KLSsgICAgeyAweDExLCAweDEzLCAweGM0LCAweDE5LCAweGVkLCAw eDJiLCAweDFkLCAweDE2LAotKyAgICAweDExLCAweGViLCAweDliLCAweGJlLCAweGYwLCAweDdm LCAweGNmLCAweDQ0LAotKyAgICAweDhiLCAweGQ3LCAweDU3LCAweGJkLCAweDhkLCAweGE5LCAw eDI1LCAweGIwLAotKyAgICAweDQ3LCAweDI1LCAweGQ2LCAweDZjLCAweDlhLCAweDU0LCAweDdm LCAweDhmLAotKyAgICAweDBiLCAweDUzLCAweDFhLCAweDEwLCAweDY4LCAweDMyLCAweDAzLCAw eDM4LAotKyAgICAweDgyLCAweGM0LCAweDg3LCAweGM0LCAweGVhLCAweDBlLCAweGQxLCAweDA0 LAotKyAgICAweGE5LCAweDk4LCAweGMxLCAweDA1LCAweGEzLCAweGYzLCAweGY4LCAweGIxLAot KyAgICAweGFmLCAweGJjLCAweGQ5LCAweDc4LCAweDdlLCAweGVlLCAweDNkLCAweDQzCi0rfTsK LSsKLStpbnQgRklQU19zZWxmdGVzdF9zaGEyKHZvaWQpCi0rewotKyAgICB1bnNpZ25lZCBjaGFy IG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAgRVZQX0RpZ2VzdChtc2dfc2hhMjU2 LCBzaXplb2YobXNnX3NoYTI1NiksIG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5VTEwpOwotKyAg ICBpZiAobWVtY21wKGRpZ19zaGEyNTYsIG1kLCBzaXplb2YoZGlnX3NoYTI1NikpKSB7Ci0rICAg ICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTIsIEZJUFNfUl9TRUxGVEVTVF9G QUlMRUQpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAgRVZQX0RpZ2VzdCht c2dfc2hhNTEyLCBzaXplb2YobXNnX3NoYTUxMiksIG1kLCBOVUxMLCBFVlBfc2hhNTEyKCksIE5V TEwpOwotKyAgICBpZiAobWVtY21wKGRpZ19zaGE1MTIsIG1kLCBzaXplb2YoZGlnX3NoYTUxMikp KSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTIsIEZJUFNfUl9T RUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAgcmV0 dXJuIDE7Ci0rfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2Zp cHMvZmlwc19zdGFuZGFsb25lX2htYWMuYy5maXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9maXBz L2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMKLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9m aXBzX3N0YW5kYWxvbmVfaG1hYy5jLmZpcHMJMjAxOC0wMy0yOSAxNDo0NDoyNC42MzYyMzY4Nzcg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1h Yy5jCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjM2MjM2ODc3ICswMjAwCi1AQCAtMCwwICsxLDEyNyBA QAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsg KgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3Ry aWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsg KiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0r ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK LSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNp bmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbGNvbmYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvc2hhLmg+Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIHN0YXRpYyBjaGFyIGtleVtdID0gIm9yYm9EZUpJ VElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsKLSsgICAgaW50IG4sIGJpbmFyeSA9IDA7Ci0rCi0r ICAgIGlmIChhcmdjIDwgMikgewotKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBbPGZpbGU+ XStcbiIsIGFyZ3ZbMF0pOwotKyAgICAgICAgZXhpdCgxKTsKLSsgICAgfQotKwotKyAgICBuID0g MTsKLSsgICAgaWYgKCFzdHJjbXAoYXJndltuXSwgIi1iaW5hcnkiKSkgewotKyAgICAgICAgbisr OwotKyAgICAgICAgYmluYXJ5ID0gMTsgICAgICAgICAgICAgLyogZW1pdCBiaW5hcnkgZmluZ2Vy cHJpbnQuLi4gKi8KLSsgICAgfQotKwotKyAgICBmb3IgKDsgbiA8IGFyZ2M7ICsrbikgewotKyAg ICAgICAgRklMRSAqZiA9IGZvcGVuKGFyZ3Zbbl0sICJyYiIpOwotKyAgICAgICAgSE1BQ19DVFgg KmhtYWNfY3R4OwotKyAgICAgICAgdW5zaWduZWQgY2hhciBtYWNbRVZQX01BWF9NRF9TSVpFXTsK LSsgICAgICAgIHVuc2lnbmVkIGludCBsZW47Ci0rICAgICAgICB1bnNpZ25lZCBpbnQgaTsKLSsK LSsgICAgICAgIGlmICghZikgewotKyAgICAgICAgICAgIHBlcnJvcihhcmd2W25dKTsKLSsgICAg ICAgICAgICBleGl0KDIpOwotKyAgICAgICAgfQotKyAgICAgICAgaG1hY19jdHggPSBITUFDX0NU WF9uZXcoKTsKLSsgICAgICAgIGlmICghaG1hY19jdHgpCi0rICAgICAgICAgICAgZXhpdCgzKTsK LSsKLSsgICAgICAgIGlmIChITUFDX0luaXRfZXgoaG1hY19jdHgsIGtleSwgc3RybGVuKGtleSks IEVWUF9zaGEyNTYoKSwgTlVMTCkgPD0gMCkgewotKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAiSE1BQyBTSEEyNTYgaW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7Ci0rICAgICAgICAgICAg ZXhpdCg0KTsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIGZvciAoOzspIHsKLSsgICAgICAgICAg ICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgICAgICAgICBzaXplX3QgbCA9IGZyZWFkKGJ1ZiwgMSwg c2l6ZW9mIGJ1ZiwgZik7Ci0rCi0rICAgICAgICAgICAgaWYgKGwgPT0gMCkgewotKyAgICAgICAg ICAgICAgICBpZiAoZmVycm9yKGYpKSB7Ci0rICAgICAgICAgICAgICAgICAgICBwZXJyb3IoYXJn dltuXSk7Ci0rICAgICAgICAgICAgICAgICAgICBleGl0KDMpOwotKyAgICAgICAgICAgICAgICB9 IGVsc2UKLSsgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgICAgIH0KLSsgICAg ICAgICAgICBpZiAoSE1BQ19VcGRhdGUoaG1hY19jdHgsIGJ1ZiwgbCkgPD0gMCkgewotKyAgICAg ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkhNQUNfVXBkYXRlKCkgZmFpbGVkLlxuIik7Ci0r ICAgICAgICAgICAgICAgIGV4aXQoNCk7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotKyAg ICAgICAgaWYgKEhNQUNfRmluYWwoaG1hY19jdHgsIG1hYywgJmxlbikgPD0gMCkgewotKyAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiSE1BQ19GaW5hbCgpIGZhaWxlZC5cbiIpOwotKyAgICAg ICAgICAgIGV4aXQoNCk7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBpZiAoYmluYXJ5KSB7Ci0r ICAgICAgICAgICAgZndyaXRlKG1hYywgbGVuLCAxLCBzdGRvdXQpOwotKyAgICAgICAgICAgIGJy ZWFrOyAgICAgICAgICAgICAgLyogLi4uIGZvciBzaW5nbGUoISkgZmlsZSAqLwotKyAgICAgICAg fQotKwotKy8qICAgICAgcHJpbnRmKCJITUFDLVNIQTEoJXMpPSAiLGFyZ3Zbbl0pOyAqLwotKyAg ICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQotKyAgICAgICAgICAgIHByaW50ZigiJTAy eCIsIG1hY1tpXSk7Ci0rICAgICAgICBwcmludGYoIlxuIik7Ci0rICAgIH0KLSsjZW5kaWYKLSsg ICAgcmV0dXJuIDA7Ci0rfQotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2htYWMvaG1h Yy5jLmZpcHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2htYWMvaG1hYy5jCi0tLS0gb3BlbnNzbC0x LjEuMGgvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOC4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vaG1hYy9obWFjLmMJMjAxOC0wMy0y OSAxNDo0NDoyNC42MzYyMzY4NzcgKzAyMDAKLUBAIC0zNSw2ICszNSwxMyBAQCBpbnQgSE1BQ19J bml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvCi0gICAgIH0KLSAKLSAgICAgaWYgKGtleSAh PSBOVUxMKSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICAgICAgaWYgKEZJUFNfbW9kZSgp ICYmICEoRVZQX01EX2ZsYWdzKG1kKSAmIEVWUF9NRF9GTEFHX0ZJUFMpCi0rICAgICAgICAgICAg JiYgKCFFVlBfTURfQ1RYX3Rlc3RfZmxhZ3MoY3R4LT5tZF9jdHgsIEVWUF9NRF9DVFhfRkxBR19O T05fRklQU19BTExPVykKLSsgICAgICAgICAgICAgICAgfHwgIUVWUF9NRF9DVFhfdGVzdF9mbGFn cyhjdHgtPmlfY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rICAgICAgICAg ICAgICAgIHx8ICFFVlBfTURfQ1RYX3Rlc3RfZmxhZ3MoY3R4LT5vX2N0eCwgRVZQX01EX0NUWF9G TEFHX05PTl9GSVBTX0FMTE9XKSkpCi0rICAgICAgICAgICAgZ290byBlcnI7Ci0rI2VuZGlmCi0g ICAgICAgICByZXNldCA9IDE7Ci0gICAgICAgICBqID0gRVZQX01EX2Jsb2NrX3NpemUobWQpOwot ICAgICAgICAgT1BFTlNTTF9hc3NlcnQoaiA8PSAoaW50KXNpemVvZihjdHgtPmtleSkpOwotZGlm ZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL2luY2x1ZGUvaW50ZXJuYWwvZmlwc19pbnQuaC5m aXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9pbmNsdWRlL2ludGVybmFsL2ZpcHNfaW50LmgKLS0t LSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vaW5jbHVkZS9pbnRlcm5hbC9maXBzX2ludC5oLmZpcHMJ MjAxOC0wMy0yOSAxNDo0NDoyNC42MzcyMzY5MDEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9j cnlwdG8vaW5jbHVkZS9pbnRlcm5hbC9maXBzX2ludC5oCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjM3 MjM2OTAxICswMjAwCi1AQCAtMCwwICsxLDEwMSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29w eXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgot KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwot KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQot KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK LSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAq LwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGVycm9yIEZJUFMgaXMgZGlz YWJsZWQuCi0rI2VuZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBGSVBTX21v ZHVsZV9tb2RlX3NldChpbnQgb25vZmYpOwotK2ludCBGSVBTX21vZHVsZV9tb2RlKHZvaWQpOwot K2ludCBGSVBTX21vZHVsZV9pbnN0YWxsZWQodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rfc2hh MSh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9zaGEyKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0 ZXN0X2Flc19jY20odm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfYWVzX2djbSh2b2lkKTsKLStp bnQgRklQU19zZWxmdGVzdF9hZXNfeHRzKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flcyh2 b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9kZXModm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rf cnNhKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSh2b2lkKTsKLStpbnQgRklQU19zZWxm dGVzdF9lY2RzYSh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9lY2RoKHZvaWQpOwotK2ludCBG SVBTX3NlbGZ0ZXN0X2RoKHZvaWQpOwotK3ZvaWQgRklQU19kcmJnX3N0aWNrKGludCBvbm9mZik7 Ci0raW50IEZJUFNfc2VsZnRlc3RfaG1hYyh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9kcmJn KHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2NtYWModm9pZCk7Ci0rCi0raW50IGZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChFVlBfUEtFWSAqcGtleSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrYXRsZW4sCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRVZQX01EICpkaWdlc3QsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1kX2ZsYWdzLCBjb25z dCBjaGFyICpmYWlsX3N0cik7Ci0rCi0raW50IGZpcHNfY2lwaGVyX3Rlc3QoRVZQX0NJUEhFUl9D VFggKmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lw aGVyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXks Ci0rICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAotKyAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQs IGludCBsZW4pOwotKwotK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKLSsKLStj b25zdCBFVlBfTUQgKkZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGludCBuaWQpOwotKwotK2NvbnN0IEVW UF9DSVBIRVIgKkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpOwotKwotK3ZvaWQgRklQU19n ZXRfdGltZXZlYyh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgKnBjdHIpOwotKwot KyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL29fZmlwcy5jLmZpcHMgb3Bl bnNzbC0xLjEuMGgvY3J5cHRvL29fZmlwcy5jCi0tLS0gb3BlbnNzbC0xLjEuMGgvY3J5cHRvL29f Zmlwcy5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMS4waC9jcnlwdG8vb19maXBzLmMJMjAxOC0wMy0yOSAxNDo0NDoyNC42MzcyMzY5MDEg KzAyMDAKLUBAIC05LDcgKzksMTAgQEAKLSAKLSAjaW5jbHVkZSAiaW50ZXJuYWwvY3J5cHRsaWIu aCIKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSAj IGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQu aD4KLSsjIGluY2x1ZGUgImludGVybmFsL2ZpcHNfaW50LmgiCi0gI2VuZGlmCi0gCi0gaW50IEZJ UFNfbW9kZSh2b2lkKQotQEAgLTI0LDcgKzI3LDE1IEBAIGludCBGSVBTX21vZGUodm9pZCkKLSBp bnQgRklQU19tb2RlX3NldChpbnQgcikKLSB7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBy ZXR1cm4gRklQU19tb2R1bGVfbW9kZV9zZXQocik7Ci0rICAgIGlmIChyICYmIEZJUFNfbW9kdWxl X21vZGUoKSkgLyogY2FuIGJlIGltcGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnkgT1BFTlNTTF9pbml0 KCkgKi8KLSsgICAgICAgIHJldHVybiAxOwotKyAgICBpZiAoIUZJUFNfbW9kdWxlX21vZGVfc2V0 KHIpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChyKQotKyAgICAgICAgUkFORF9zZXRf cmFuZF9tZXRob2QoRklQU19yYW5kX2dldF9tZXRob2QoKSk7Ci0rICAgIGVsc2UKLSsgICAgICAg IFJBTkRfc2V0X3JhbmRfbWV0aG9kKE5VTEwpOwotKyAgICByZXR1cm4gMTsKLSAjZWxzZQotICAg ICBpZiAociA9PSAwKQotICAgICAgICAgcmV0dXJuIDE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMS4w aC9jcnlwdG8vb19pbml0LmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vb19pbml0LmMKLS0t LSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vb19pbml0LmMuZmlwcwkyMDE4LTAzLTI3IDE1OjUwOjM4 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9vX2luaXQuYwkyMDE4 LTAzLTI5IDE0OjQ0OjI0LjYzNzIzNjkwMSArMDIwMAotQEAgLTcsMTEgKzcsNTAgQEAKLSAgKiBo dHRwczovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2UvbGljZW5zZS5odG1sCi0gICovCi0gCi0rLyog Zm9yIHNlY3VyZV9nZXRlbnYgKi8KLSsjZGVmaW5lIF9HTlVfU09VUkNFCi0gI2luY2x1ZGUgPGVf b3MuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0t IyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgotKyMg aW5jbHVkZSA8c3lzL3N0YXQuaD4KLSsjIGluY2x1ZGUgPGZjbnRsLmg+Ci0rIyBpbmNsdWRlIDx1 bmlzdGQuaD4KLSsjIGluY2x1ZGUgPGVycm5vLmg+Ci0rIyBpbmNsdWRlIDxzdGRsaWIuaD4KLSAj IGluY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r IyBpbmNsdWRlICJpbnRlcm5hbC9maXBzX2ludC5oIgotKwotKyMgZGVmaW5lIEZJUFNfTU9ERV9T V0lUQ0hfRklMRSAiL3Byb2Mvc3lzL2NyeXB0by9maXBzX2VuYWJsZWQiCi0rCi0rc3RhdGljIHZv aWQgaW5pdF9maXBzX21vZGUodm9pZCkKLSt7Ci0rICAgIGNoYXIgYnVmWzJdID0gIjAiOwotKyAg ICBpbnQgZmQ7Ci0rCi0rICAgIC8qIEVuc3VyZSB0aGUgc2VsZnRlc3RzIGFsd2F5cyBydW4gKi8K LSsgICAgRklQU19tb2RlX3NldCgxKTsKLSsKLSsgICAgaWYgKHNlY3VyZV9nZXRlbnYoIk9QRU5T U0xfRk9SQ0VfRklQU19NT0RFIikgIT0gTlVMTCkgewotKyAgICAgICAgYnVmWzBdID0gJzEnOwot KyAgICB9IGVsc2UgaWYgKChmZCA9IG9wZW4oRklQU19NT0RFX1NXSVRDSF9GSUxFLCBPX1JET05M WSkpID49IDApIHsKLSsgICAgICAgIHdoaWxlIChyZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSA8 IDAgJiYgZXJybm8gPT0gRUlOVFIpIDsKLSsgICAgICAgIGNsb3NlKGZkKTsKLSsgICAgfQotKyAg ICAvKiBGYWlsdXJlIHJlYWRpbmcgdGhlIGZpcHMgbW9kZSBzd2l0Y2ggZmlsZSBtZWFucyBqdXN0 IG5vdAotKyAgICAgKiBzd2l0Y2hpbmcgaW50byBGSVBTIG1vZGUuIFdlIHdvdWxkIGJyZWFrIHRv byBtYW55IHRoaW5ncwotKyAgICAgKiBvdGhlcndpc2UuLgotKyAgICAgKi8KLSsKLSsgICAgaWYg KGJ1ZlswXSAhPSAnMScpIHsKLSsgICAgICAgIC8qIGRyb3AgZG93biB0byBub24tRklQUyBtb2Rl IGlmIGl0IGlzIG5vdCByZXF1ZXN0ZWQgKi8KLSsgICAgICAgIEZJUFNfbW9kZV9zZXQoMCk7Ci0r ICAgIH0gZWxzZSB7Ci0rICAgICAgICAvKiBhYm9ydCBpZiBzZWxmdGVzdCBmYWlsZWQgKi8KLSsg ICAgICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsgICAgfQotK30KLSAjZW5kaWYKLSAKLSAv KgotQEAgLTE5LDE2ICs1OCwyOSBAQAotICAqIHNldHMgRklQUyBjYWxsYmFja3MKLSAgKi8KLSAK LS12b2lkIE9QRU5TU0xfaW5pdCh2b2lkKQotK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKGNvbnN0cnVj dG9yKSkgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCkKLSB7Ci0gICAgIHN0YXRpYyBpbnQgZG9u ZSA9IDA7Ci0gICAgIGlmIChkb25lKQotICAgICAgICAgcmV0dXJuOwotICAgICBkb25lID0gMTsK LSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIEZJUFNfc2V0X2xvY2tpbmdfY2FsbGJhY2tzKENS WVBUT19sb2NrLCBDUllQVE9fYWRkX2xvY2spOwotLSAgICBGSVBTX3NldF9lcnJvcl9jYWxsYmFj a3MoRVJSX3B1dF9lcnJvciwgRVJSX2FkZF9lcnJvcl92ZGF0YSk7Ci0tICAgIEZJUFNfc2V0X21h bGxvY19jYWxsYmFja3MoQ1JZUFRPX21hbGxvYywgQ1JZUFRPX2ZyZWUpOwotKyAgICBpZiAoIUZJ UFNfbW9kdWxlX2luc3RhbGxlZCgpKSB7Ci0rICAgICAgICByZXR1cm47Ci0rICAgIH0KLSAgICAg UkFORF9pbml0X2ZpcHMoKTsKLSsgICAgaW5pdF9maXBzX21vZGUoKTsKLSsgICAgaWYgKCFGSVBT X21vZGUoKSkgewotKyAgICAgICAgLyogQ2xlYW4gdXAgcHJlbWF0dXJlbHkgc2V0IGRlZmF1bHQg cmFuZCBtZXRob2QgKi8KLSsgICAgICAgIFJBTkRfc2V0X3JhbmRfbWV0aG9kKE5VTEwpOwotKyAg ICB9Ci0rI2VuZGlmCi0rI2lmIDAKLSsgICAgZnByaW50ZihzdGRlcnIsICJDYWxsZWQgT1BFTlNT TF9pbml0XG4iKTsKLSAjZW5kaWYKLSB9Ci0rCi0rdm9pZCBPUEVOU1NMX2luaXQodm9pZCkKLSt7 Ci0rICAgIE9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Ci0rfQotZGlmZiAtdXAgb3BlbnNzbC0xLjEu MGgvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL3JhbmQv bWRfcmFuZC5jCi0tLS0gb3BlbnNzbC0xLjEuMGgvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMJ MjAxOC0wMy0yNyAxNTo1MDozOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9j cnlwdG8vcmFuZC9tZF9yYW5kLmMJMjAxOC0wMy0yOSAxNDo0NDoyNC42MzcyMzY5MDEgKzAyMDAK LUBAIC0zNjAsNyArMzYwLDcgQEAgc3RhdGljIGludCByYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIg KmJ1ZgotICAgICBDUllQVE9fVEhSRUFEX3VubG9jayhyYW5kX3RtcF9sb2NrKTsKLSAgICAgY3J5 cHRvX2xvY2tfcmFuZCA9IDE7Ci0gCi0tICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSsgICAgaWYg KCFpbml0aWFsaXplZCB8fCBGSVBTX21vZGUoKSkgewotICAgICAgICAgUkFORF9wb2xsKCk7Ci0g ICAgICAgICBpbml0aWFsaXplZCA9IDE7Ci0gICAgIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBo L2NyeXB0by9yYW5kL3JhbmRfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vcmFuZC9y YW5kX2Vyci5jCi0tLS0gb3BlbnNzbC0xLjEuMGgvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYy5maXBz CTIwMTgtMDMtMjcgMTU6NTA6MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgv Y3J5cHRvL3JhbmQvcmFuZF9lcnIuYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYzNzIzNjkwMSArMDIw MAotQEAgLTIwLDEwICsyMCwxMyBAQAotIAotIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUkFORF9z dHJfZnVuY3RzW10gPSB7Ci0gICAgIHtFUlJfRlVOQyhSQU5EX0ZfUkFORF9CWVRFUyksICJSQU5E X2J5dGVzIn0sCi0rICAgIHtFUlJfRlVOQyhSQU5EX0ZfUkFORF9JTklUX0ZJUFMpLCAiUkFORF9p bml0X2ZpcHMifSwKLSAgICAgezAsIE5VTEx9Ci0gfTsKLSAKLSBzdGF0aWMgRVJSX1NUUklOR19E QVRBIFJBTkRfc3RyX3JlYXNvbnNbXSA9IHsKLSsgICAge0VSUl9SRUFTT04oUkFORF9SX0VSUk9S X0lOSVRJQUxJU0lOR19EUkJHKSwgImVycm9yIGluaXRpYWxpc2luZyBEUkJHIn0sCi0rICAgIHtF UlJfUkVBU09OKFJBTkRfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcpLCAiZXJyb3IgaW5zdGFu dGlhdGluZyBEUkJHIn0sCi0gICAgIHtFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9TRUVERUQp LCAiUFJORyBub3Qgc2VlZGVkIn0sCi0gICAgIHswLCBOVUxMfQotIH07Ci1kaWZmIC11cCBvcGVu c3NsLTEuMS4waC9jcnlwdG8vcmFuZC9yYW5kX2xjbC5oLmZpcHMgb3BlbnNzbC0xLjEuMGgvY3J5 cHRvL3JhbmQvcmFuZF9sY2wuaAotLS0tIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9yYW5kL3JhbmRf bGNsLmguZmlwcwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjM1OTIzMDM3MSArMDIwMAotKysrIG9wZW5z c2wtMS4xLjBoL2NyeXB0by9yYW5kL3JhbmRfbGNsLmgJMjAxOC0wMy0yOSAxNDo0NDoyNC42Mzcy MzY5MDEgKzAyMDAKLUBAIC0xMCw3ICsxMCw3IEBACi0gI2lmbmRlZiBIRUFERVJfUkFORF9MQ0xf SAotICMgZGVmaW5lIEhFQURFUl9SQU5EX0xDTF9ICi0gCi0tIyBkZWZpbmUgRU5UUk9QWV9ORUVE RUQgMzIgICAgICAvKiByZXF1aXJlIDI1NiBiaXRzID0gMzIgYnl0ZXMgb2YgcmFuZG9tbmVzcyAq LwotKyMgZGVmaW5lIEVOVFJPUFlfTkVFREVEIDQ4ICAgICAgLyogcmVxdWlyZSAzODQgYml0cyA9 IDQ4IGJ5dGVzIG9mIHJhbmRvbW5lc3MgKi8KLSAKLSAjIGlmICFkZWZpbmVkKFVTRV9NRDVfUkFO RCkgJiYgIWRlZmluZWQoVVNFX1NIQTFfUkFORCkgJiYgIWRlZmluZWQoVVNFX01EQzJfUkFORCkg JiYgIWRlZmluZWQoVVNFX01EMl9SQU5EKQotICMgIGRlZmluZSBVU0VfU0hBMV9SQU5ECi1kaWZm IC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jLmZpcHMgb3BlbnNzbC0x LjEuMGgvY3J5cHRvL3JhbmQvcmFuZF9saWIuYwotLS0tIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9y YW5kL3JhbmRfbGliLmMuZmlwcwkyMDE4LTAzLTI3IDE1OjUwOjM5LjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9yYW5kL3JhbmRfbGliLmMJMjAxOC0wMy0yOSAxNDo0 NDoyNC42MzcyMzY5MDEgKzAyMDAKLUBAIC0xOCw2ICsxOCw4IEBACi0gI2lmZGVmIE9QRU5TU0xf RklQUwotICMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0gIyBpbmNsdWRlIDxvcGVuc3NsL2Zp cHNfcmFuZC5oPgotKyMgaW5jbHVkZSAicmFuZF9sY2wuaCIKLSsjIGluY2x1ZGUgImludGVybmFs L2ZpcHNfaW50LmgiCi0gI2VuZGlmCi0gCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotQEAg LTE2MiwzICsxNjQsMTI3IEBAIGludCBSQU5EX3N0YXR1cyh2b2lkKQotICAgICAgICAgcmV0dXJu IG1ldGgtPnN0YXR1cygpOwotICAgICByZXR1cm4gMDsKLSB9Ci0rCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwotKy8qCi0rICogRklQUyBEUkJHIGluaXRpYWxpc2F0aW9uIGNvZGUuIFRoaXMgc2V0 cyB1cCB0aGUgRFJCRyBmb3IgdXNlIGJ5IHRoZSByZXN0Ci0rICogb2YgT3BlblNTTC4KLSsgKi8K LSsKLSsvKgotKyAqIEVudHJvcHkgZ2F0aGVyZXI6IHVzZSBzdGFuZGFyZCBPcGVuU1NMIFBSTkcg dG8gc2VlZCAodGhpcyB3aWxsIGdhdGhlcgotKyAqIGVudHJvcHkgaW50ZXJuYWxseSB0aHJvdWdo IFJBTkRfcG9sbCgpLgotKyAqLwotKwotK3N0YXRpYyBzaXplX3QgZHJiZ19nZXRfZW50cm9weShE UkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikK LSt7Ci0rICAgIC8qIFJvdW5kIHVwIHJlcXVlc3QgdG8gbXVsdGlwbGUgb2YgYmxvY2sgc2l6ZSAq LwotKyAgICBtaW5fbGVuID0gKChtaW5fbGVuICsgMTkpIC8gMjApICogMjA7Ci0rICAgICpwb3V0 ID0gT1BFTlNTTF9tYWxsb2MobWluX2xlbik7Ci0rICAgIGlmICghKnBvdXQpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgaWYgKFJBTkRfT3BlblNTTCgpLT5ieXRlcygqcG91dCwgbWluX2xlbikg PD0gMCkgewotKyAgICAgICAgT1BFTlNTTF9mcmVlKCpwb3V0KTsKLSsgICAgICAgICpwb3V0ID0g TlVMTDsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIHJldHVybiBtaW5fbGVuOwot K30KLSsKLStzdGF0aWMgdm9pZCBkcmJnX2ZyZWVfZW50cm9weShEUkJHX0NUWCAqY3R4LCB1bnNp Z25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKQotK3sKLSsgICAgaWYgKG91dCkgewotKyAgICAg ICAgT1BFTlNTTF9jbGVhbnNlKG91dCwgb2xlbik7Ci0rICAgICAgICBPUEVOU1NMX2ZyZWUob3V0 KTsKLSsgICAgfQotK30KLSsKLSsvKgotKyAqIFNldCAiYWRkaXRpb25hbCBpbnB1dCIgd2hlbiBn ZW5lcmF0aW5nIHJhbmRvbSBkYXRhLiBUaGlzIHVzZXMgdGhlIGN1cnJlbnQKLSsgKiBQSUQsIGEg dGltZSB2YWx1ZSBhbmQgYSBjb3VudGVyLgotKyAqLwotKwotK3N0YXRpYyBzaXplX3QgZHJiZ19n ZXRfYWRpbihEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCkKLSt7Ci0rICAgIC8q IFVzZSBvZiBzdGF0aWMgdmFyaWFibGVzIGlzIE9LIGFzIHRoaXMgaGFwcGVucyB1bmRlciBhIGxv Y2sgKi8KLSsgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYnVmWzE2XTsKLSsgICAgc3RhdGljIHVu c2lnbmVkIGxvbmcgY291bnRlcjsKLSsgICAgRklQU19nZXRfdGltZXZlYyhidWYsICZjb3VudGVy KTsKLSsgICAgKnBvdXQgPSBidWY7Ci0rICAgIHJldHVybiBzaXplb2YoYnVmKTsKLSt9Ci0rCi0r LyoKLSsgKiBSQU5EX2FkZCgpIGFuZCBSQU5EX3NlZWQoKSBwYXNzIHRocm91Z2ggdG8gT3BlblNT TCBQUk5HIHNvIGl0IGlzCi0rICogY29ycmVjdGx5IHNlZWRlZCBieSBSQU5EX3BvbGwoKS4KLSsg Ki8KLSsKLStzdGF0aWMgaW50IGRyYmdfcmFuZF9hZGQoRFJCR19DVFggKmN0eCwgY29uc3Qgdm9p ZCAqaW4sIGludCBpbmxlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVudHJv cHkpCi0rewotKyAgICBSQU5EX09wZW5TU0woKS0+YWRkKGluLCBpbmxlbiwgZW50cm9weSk7Ci0r ICAgIGlmIChGSVBTX3JhbmRfc3RhdHVzKCkpIHsKLSsgICAgICAgIEZJUFNfZHJiZ19yZXNlZWQo Y3R4LCBOVUxMLCAwKTsKLSsgICAgfQotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGlu dCBkcmJnX3JhbmRfc2VlZChEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICppbiwgaW50IGlubGVu KQotK3sKLSsgICAgUkFORF9PcGVuU1NMKCktPnNlZWQoaW4sIGlubGVuKTsKLSsgICAgaWYgKEZJ UFNfcmFuZF9zdGF0dXMoKSkgewotKyAgICAgICAgRklQU19kcmJnX3Jlc2VlZChjdHgsIE5VTEws IDApOwotKyAgICB9Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSsjIGlmbmRlZiBPUEVOU1NMX0RS QkdfREVGQVVMVF9UWVBFCi0rIyAgZGVmaW5lIE9QRU5TU0xfRFJCR19ERUZBVUxUX1RZUEUgICAg ICAgTklEX2Flc18yNTZfY3RyCi0rIyBlbmRpZgotKyMgaWZuZGVmIE9QRU5TU0xfRFJCR19ERUZB VUxUX0ZMQUdTCi0rIyAgZGVmaW5lIE9QRU5TU0xfRFJCR19ERUZBVUxUX0ZMQUdTICAgICAgRFJC R19GTEFHX0NUUl9VU0VfREYKLSsjIGVuZGlmCi0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfdHlw ZSA9IE9QRU5TU0xfRFJCR19ERUZBVUxUX1RZUEU7Ci0rc3RhdGljIGludCBmaXBzX2RyYmdfZmxh Z3MgPSBPUEVOU1NMX0RSQkdfREVGQVVMVF9GTEFHUzsKLSsKLSt2b2lkIFJBTkRfc2V0X2ZpcHNf ZHJiZ190eXBlKGludCB0eXBlLCBpbnQgZmxhZ3MpCi0rewotKyAgICBmaXBzX2RyYmdfdHlwZSA9 IHR5cGU7Ci0rICAgIGZpcHNfZHJiZ19mbGFncyA9IGZsYWdzOwotK30KLSsKLStpbnQgUkFORF9p bml0X2ZpcHModm9pZCkKLSt7Ci0rICAgIERSQkdfQ1RYICpkY3R4OwotKyAgICBzaXplX3QgcGxl bjsKLSsgICAgdW5zaWduZWQgY2hhciBwZXJzWzMyXSwgKnA7Ci0rCi0rICAgIGRjdHggPSBGSVBT X2dldF9kZWZhdWx0X2RyYmcoKTsKLSsgICAgaWYgKGRjdHggPT0gTlVMTCB8fAotKyAgICAgICAg RklQU19kcmJnX2luaXQoZGN0eCwgZmlwc19kcmJnX3R5cGUsIGZpcHNfZHJiZ19mbGFncykgPD0g MCkgewotKyAgICAgICAgUkFORGVycihSQU5EX0ZfUkFORF9JTklUX0ZJUFMsIFJBTkRfUl9FUlJP Ul9JTklUSUFMSVNJTkdfRFJCRyk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyAg ICBGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkcmJnX2dldF9lbnRyb3B5LCBkcmJnX2ZyZWVfZW50cm9weSwgMjAsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRyYmdfZ2V0X2VudHJvcHksIGRyYmdfZnJlZV9lbnRyb3B5KTsK LSsgICAgRklQU19kcmJnX3NldF9yYW5kX2NhbGxiYWNrcyhkY3R4LCBkcmJnX2dldF9hZGluLCAw LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYmdfcmFuZF9zZWVkLCBkcmJn X3JhbmRfYWRkKTsKLSsgICAgLyogUGVyc29uYWxpc2F0aW9uIHN0cmluZzogYSBzdHJpbmcgZm9s bG93ZWQgYnkgZGF0ZSB0aW1lIHZlY3RvciAqLwotKyAgICBzdHJjcHkoKGNoYXIgKilwZXJzLCAi T3BlblNTTCBEUkJHMi4wIik7Ci0rICAgIHBsZW4gPSBkcmJnX2dldF9hZGluKGRjdHgsICZwKTsK LSsgICAgbWVtY3B5KHBlcnMgKyAxNiwgcCwgcGxlbik7Ci0rCi0rICAgIGlmIChGSVBTX2RyYmdf aW5zdGFudGlhdGUoZGN0eCwgcGVycywgc2l6ZW9mKHBlcnMpKSA8PSAwKSB7Ci0rICAgICAgICBS QU5EZXJyKFJBTkRfRl9SQU5EX0lOSVRfRklQUywgUkFORF9SX0VSUk9SX0lOU1RBTlRJQVRJTkdf RFJCRyk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICBGSVBTX3JhbmRfc2V0X21l dGhvZChGSVBTX2RyYmdfbWV0aG9kKCkpOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rI2VuZGlm Ci1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vcnNhL3JzYV9jcnB0LmMuZmlwcyBvcGVu c3NsLTEuMS4waC9jcnlwdG8vcnNhL3JzYV9jcnB0LmMKLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlw dG8vcnNhL3JzYV9jcnB0LmMuZmlwcwkyMDE4LTAzLTI3IDE1OjUwOjM5LjAwMDAwMDAwMCArMDIw MAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9yc2EvcnNhX2NycHQuYwkyMDE4LTAzLTI5IDE0 OjQ0OjI0LjYzNzIzNjkwMSArMDIwMAotQEAgLTI4LDI0ICsyOCw1MiBAQCBpbnQgUlNBX3NpemUo Y29uc3QgUlNBICpyKQotIGludCBSU0FfcHVibGljX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAotICAgICAgICAgICAgICAgICAg ICAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQotIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r ICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBT X01FVEhPRCkKLSsgICAgICAgICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FM TE9XKSkgewotKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfRU5DUllQVCwgUlNBX1Jf Tk9OX0ZJUFNfUlNBX01FVEhPRCk7Ci0rICAgICAgICByZXR1cm4gLTE7Ci0rICAgIH0KLSsjZW5k aWYKLSAgICAgcmV0dXJuIChyc2EtPm1ldGgtPnJzYV9wdWJfZW5jKGZsZW4sIGZyb20sIHRvLCBy c2EsIHBhZGRpbmcpKTsKLSB9Ci0gCi0gaW50IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50IGZsZW4s IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY2hhciAqdG8sIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKLSB7Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cpKSB7Ci0rICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5D UllQVCwKLSsgICAgICAgICAgICAgICBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQ U19NT0RFKTsKLSsgICAgICAgIHJldHVybiAtMTsKLSsgICAgfQotKyNlbmRpZgotICAgICByZXR1 cm4gKHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGZsZW4sIGZyb20sIHRvLCByc2EsIHBhZGRpbmcp KTsKLSB9Ci0gCi0gaW50IFJTQV9wcml2YXRlX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAq dG8sIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKLSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAg ICBpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19N RVRIT0QpCi0rICAgICAgICAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExP VykpIHsKLSsgICAgICAgIFJTQWVycihSU0FfRl9SU0FfUFJJVkFURV9ERUNSWVBULCBSU0FfUl9O T05fRklQU19SU0FfTUVUSE9EKTsKLSsgICAgICAgIHJldHVybiAtMTsKLSsgICAgfQotKyNlbmRp ZgotICAgICByZXR1cm4gKHJzYS0+bWV0aC0+cnNhX3ByaXZfZGVjKGZsZW4sIGZyb20sIHRvLCBy c2EsIHBhZGRpbmcpKTsKLSB9Ci0gCi0gaW50IFJTQV9wdWJsaWNfZGVjcnlwdChpbnQgZmxlbiwg Y29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8sCi0gICAgICAgICAg ICAgICAgICAgICAgICBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCi0gewotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05P Tl9GSVBTX0FMTE9XKSkgewotKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQ VCwKLSsgICAgICAgICAgICAgICBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19N T0RFKTsKLSsgICAgICAgIHJldHVybiAtMTsKLSsgICAgfQotKyNlbmRpZgotICAgICByZXR1cm4g KHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoZmxlbiwgZnJvbSwgdG8sIHJzYSwgcGFkZGluZykpOwot IH0KLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMg b3BlbnNzbC0xLjEuMGgvY3J5cHRvL3JzYS9yc2FfZXJyLmMKLS0tLSBvcGVuc3NsLTEuMS4waC9j cnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzCTIwMTgtMDMtMjcgMTU6NTA6MzkuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL3JzYS9yc2FfZXJyLmMJMjAxOC0wMy0yOSAx NDo0NDoyNC42MzgyMzY5MjQgKzAyMDAKLUBAIC0yMSw2ICsyMSw3IEBACi0gc3RhdGljIEVSUl9T VFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1tdID0gewotICAgICB7RVJSX0ZVTkMoUlNBX0ZfQ0hF Q0tfUEFERElOR19NRCksICJjaGVja19wYWRkaW5nX21kIn0sCi0gICAgIHtFUlJfRlVOQyhSU0Ff Rl9FTkNPREVfUEtDUzEpLCAiZW5jb2RlX3BrY3MxIn0sCi0rICAgIHtFUlJfRlVOQyhSU0FfRl9G SVBTX1JTQV9CVUlMVElOX0tFWUdFTiksICJmaXBzX3JzYV9idWlsdGluX2tleWdlbiJ9LAotICAg ICB7RVJSX0ZVTkMoUlNBX0ZfSU5UX1JTQV9WRVJJRlkpLCAiaW50X3JzYV92ZXJpZnkifSwKLSAg ICAge0VSUl9GVU5DKFJTQV9GX09MRF9SU0FfUFJJVl9ERUNPREUpLCAib2xkX3JzYV9wcml2X2Rl Y29kZSJ9LAotICAgICB7RVJSX0ZVTkMoUlNBX0ZfUEtFWV9SU0FfQ1RSTCksICJwa2V5X3JzYV9j dHJsIn0sCi1AQCAtMzMsNiArMzQsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJf ZnVuY3RzW10KLSAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9DSEVDS19LRVkpLCAiUlNBX2NoZWNr X2tleSJ9LAotICAgICB7RVJSX0ZVTkMoUlNBX0ZfUlNBX0NIRUNLX0tFWV9FWCksICJSU0FfY2hl Y2tfa2V5X2V4In0sCi0gICAgIHtFUlJfRlVOQyhSU0FfRl9SU0FfQ01TX0RFQ1JZUFQpLCAicnNh X2Ntc19kZWNyeXB0In0sCi0rICAgIHtFUlJfRlVOQyhSU0FfRl9SU0FfR0VORVJBVEVfS0VZX0VY KSwgIlJTQV9nZW5lcmF0ZV9rZXlfZXgifSwKLSAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9JVEVN X1ZFUklGWSksICJyc2FfaXRlbV92ZXJpZnkifSwKLSAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9N RVRIX0RVUCksICJSU0FfbWV0aF9kdXAifSwKLSAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9NRVRI X05FVyksICJSU0FfbWV0aF9uZXcifSwKLUBAIC03Niw4ICs3OCwxNCBAQCBzdGF0aWMgRVJSX1NU UklOR19EQVRBIFJTQV9zdHJfZnVuY3RzW10KLSAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9QUklO VCksICJSU0FfcHJpbnQifSwKLSAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9QUklOVF9GUCksICJS U0FfcHJpbnRfZnAifSwKLSAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9QUklWX0VOQ09ERSksICJy c2FfcHJpdl9lbmNvZGUifSwKLSsgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9QUklWQVRFX0RFQ1JZ UFQpLCAiUlNBX3ByaXZhdGVfZGVjcnlwdCJ9LAotKyAgICB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BS SVZBVEVfRU5DUllQVCksICJSU0FfcHJpdmF0ZV9lbmNyeXB0In0sCi0gICAgIHtFUlJfRlVOQyhS U0FfRl9SU0FfUFNTX1RPX0NUWCksICJyc2FfcHNzX3RvX2N0eCJ9LAotICAgICB7RVJSX0ZVTkMo UlNBX0ZfUlNBX1BVQl9ERUNPREUpLCAicnNhX3B1Yl9kZWNvZGUifSwKLSsgICAge0VSUl9GVU5D KFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCksICJSU0FfcHVibGljX2RlY3J5cHQifSwKLSsgICAg e0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJMSUNfRU5DUllQVCksICJSU0FfcHVibGljX2VuY3J5cHQi fSwKLSsgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfTUVUSE9EKSwgIlJTQV9zZXRfbWV0aG9k In0sCi0rICAgIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9EKSwgIlJTQV9z ZXRfZGVmYXVsdF9tZXRob2QifSwKLSAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRVUF9CTElO RElORyksICJSU0Ffc2V0dXBfYmxpbmRpbmcifSwKLSAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9T SUdOKSwgIlJTQV9zaWduIn0sCi0gICAgIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTl9BU04xX09D VEVUX1NUUklORyksCi1AQCAtMTM1LDEwICsxNDMsMTMgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFU QSBSU0Ffc3RyX3JlYXNvbnNbXQotICAgICB7RVJSX1JFQVNPTihSU0FfUl9MQVNUX09DVEVUX0lO VkFMSUQpLCAibGFzdCBvY3RldCBpbnZhbGlkIn0sCi0gICAgIHtFUlJfUkVBU09OKFJTQV9SX01P RFVMVVNfVE9PX0xBUkdFKSwgIm1vZHVsdXMgdG9vIGxhcmdlIn0sCi0gICAgIHtFUlJfUkVBU09O KFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVCksICJubyBwdWJsaWMgZXhwb25lbnQifSwKLSsgICAg e0VSUl9SRUFTT04oUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCksICJub24gRklQUyByc2EgbWV0 aG9kIn0sCi0gICAgIHtFUlJfUkVBU09OKFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcp LAotICAgICAgIm51bGwgYmVmb3JlIGJsb2NrIG1pc3NpbmcifSwKLSAgICAge0VSUl9SRUFTT04o UlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EpLCAibiBkb2VzIG5vdCBlcXVhbCBwIHEifSwKLSAg ICAge0VSUl9SRUFTT04oUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUiksICJvYWVwIGRlY29kaW5n IGVycm9yIn0sCi0rICAgIHtFUlJfUkVBU09OKFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9J Tl9GSVBTX01PREUpLAotKyAgICAgIm9wZXJhdGlvbiBub3QgYWxsb3dlZCBpbiBGSVBTIG1vZGUi fSwKLSAgICAge0VSUl9SRUFTT04oUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RI SVNfS0VZVFlQRSksCi0gICAgICAib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMga2V5 dHlwZSJ9LAotICAgICB7RVJSX1JFQVNPTihSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRCksICJw YWRkaW5nIGNoZWNrIGZhaWxlZCJ9LAotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL3Jz YS9yc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vcnNhL3JzYV9nZW4uYwotLS0t IG9wZW5zc2wtMS4xLjBoL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMJMjAxOC0wNi0wOCAxNDo1 NjozMi40MTM0MTE1ODUgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vcnNhL3JzYV9n ZW4uYwkyMDE4LTA2LTE4IDE0OjUxOjU3Ljc3Mzg0NjM1NCArMDIwMAotQEAgLTE4LDYgKzE4LDc1 IEBACi0gI2luY2x1ZGUgImludGVybmFsL2NyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KLSAjaW5jbHVkZSAicnNhX2xvY2wuaCIKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjIGluY2x1ZGUgImludGVybmFsL2ZpcHNfaW50Lmgi Ci0rCi0raW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKQotK3sKLSsgICAgY29uc3QgdW5zaWdu ZWQgY2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7Ci0rICAgIHVuc2lnbmVk IGNoYXIgKmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKLSsgICAgaW50IGxlbiwgcmV0ID0g MDsKLSsgICAgRVZQX1BLRVkgKnBrOwotKwotKyAgICBpZiAoKHBrID0gRVZQX1BLRVlfbmV3KCkp ID09IE5VTEwpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgRVZQX1BLRVlfc2V0MV9SU0Eo cGssIHJzYSk7Ci0rCi0rICAgIC8qIFBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgc2lnbmF0 dXJlIHRlc3QgKi8KLSsgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywg LTEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIEVWUF9zaGEx KCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19Q QURfUEtDUzEsIE5VTEwpCi0rICAgICAgICB8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBr LCB0YnMsIC0xLCBOVUxMLCAwLCBFVlBfc2hhMSgpLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsIE5VTEwpCi0rICAgICAgICB8 fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLCBOVUxMLCAwLCBFVlBfc2hh MSgpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZM QUdfUEFEX1BTUywgTlVMTCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgLyogTm93IHBlcmZv cm0gcGFpcndpc2UgY29uc2lzdGVuY3kgZW5jcnlwdC9kZWNyeXB0IHRlc3QgKi8KLSsgICAgY3Ri dWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKLSsgICAgaWYgKCFjdGJ1ZikKLSsg ICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBsZW4gPQotKyAgICAgICAgUlNBX3B1YmxpY19lbmNy eXB0KHNpemVvZih0YnMpIC0gMSwgdGJzLCBjdGJ1ZiwgcnNhLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJTQV9QS0NTMV9QQURESU5HKTsKLSsgICAgaWYgKGxlbiA8PSAwKQotKyAgICAg ICAgZ290byBlcnI7Ci0rICAgIC8qIENoZWNrIGNpcGhlcnRleHQgZG9lc24ndCBtYXRjaCBwbGFp bnRleHQgKi8KLSsgICAgaWYgKChsZW4gPT0gKHNpemVvZih0YnMpIC0gMSkpICYmICFtZW1jbXAo dGJzLCBjdGJ1ZiwgbGVuKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBwdGJ1ZiA9IE9QRU5T U0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOwotKwotKyAgICBpZiAoIXB0YnVmKQotKyAgICAgICAg Z290byBlcnI7Ci0rICAgIGxlbiA9IFJTQV9wcml2YXRlX2RlY3J5cHQobGVuLCBjdGJ1ZiwgcHRi dWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOwotKyAgICBpZiAobGVuICE9IChzaXplb2YodGJz KSAtIDEpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmIChtZW1jbXAocHRidWYsIHRicywg bGVuKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICByZXQgPSAxOwotKwotKyAgICBpZiAo IXB0YnVmKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rIGVycjoKLSsgICAgaWYgKHJldCA9PSAw KSB7Ci0rICAgICAgICBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rICAgICAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX0NIRUNLX1JTQSwgRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKLSsg ICAgfQotKwotKyAgICBpZiAoY3RidWYpCi0rICAgICAgICBPUEVOU1NMX2ZyZWUoY3RidWYpOwot KyAgICBpZiAocHRidWYpCi0rICAgICAgICBPUEVOU1NMX2ZyZWUocHRidWYpOwotKyAgICBpZiAo cGspCi0rICAgICAgICBFVlBfUEtFWV9mcmVlKHBrKTsKLSsKLSsgICAgcmV0dXJuIHJldDsKLSt9 Ci0rI2VuZGlmCi0gCi0gc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIGlu dCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Qk5fR0VOQ0IgKmNiKTsKLUBAIC0zMSwxMSArMTAwLDI4MSBAQCBzdGF0aWMgaW50IHJzYV9idWls dGluX2tleWdlbihSU0EgKnJzYSwKLSAgKi8KLSBpbnQgUlNBX2dlbmVyYXRlX2tleV9leChSU0Eg KnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwgQk5fR0VOQ0IgKmNiKQotIHsKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+Zmxh Z3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKLSsgICAgICAgICYmICEocnNhLT5mbGFncyAmIFJT QV9GTEFHX05PTl9GSVBTX0FMTE9XKSkgewotKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9HRU5F UkFURV9LRVlfRVgsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOwotKyAgICAgICAgcmV0dXJu IDA7Ci0rICAgIH0KLSsjZW5kaWYKLSAgICAgaWYgKHJzYS0+bWV0aC0+cnNhX2tleWdlbikKLSAg ICAgICAgIHJldHVybiByc2EtPm1ldGgtPnJzYV9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBj Yik7Ci0gICAgIHJldHVybiByc2FfYnVpbHRpbl9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBj Yik7Ci0gfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMgaW50IGZpcHNfcnNhX2J1 aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk5fR0VOQ0IgKmNiKQotK3sKLSsgICAgQklH TlVNICpyMCA9IE5VTEwsICpyMSA9IE5VTEwsICpyMiA9IE5VTEwsICpyMyA9IE5VTEwsICp0bXA7 Ci0rICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLSsgICAgaW50IG9rID0gLTE7Ci0rICAgIGludCBp OwotKyAgICBpbnQgbiA9IDA7Ci0rICAgIGludCB0ZXN0ID0gMDsKLSsgICAgaW50IHBiaXRzID0g Yml0cyAvIDI7Ci0rICAgIHVuc2lnbmVkIGxvbmcgZXJyb3IgPSAwOwotKwotKyAgICBpZiAoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19SU0Ff QlVJTFRJTl9LRVlHRU4sIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgfQotKwotKyAgICBpZiAoKHBiaXRzICYgMHhGRikKLSsgICAgICAgIHx8 IChnZXRlbnYoIk9QRU5TU0xfRU5GT1JDRV9NT0RVTFVTX0JJVFMiKSAmJiBiaXRzIDwgMjA0OCkp IHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfUlNBX0JVSUxUSU5fS0VZR0VOLCBGSVBT X1JfSU5WQUxJRF9LRVlfTEVOR1RIKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0r ICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKLSsgICAgaWYgKGN0eCA9PSBOVUxMKQotKyAgICAgICAg Z290byBlcnI7Ci0rICAgIEJOX0NUWF9zdGFydChjdHgpOwotKyAgICByMCA9IEJOX0NUWF9nZXQo Y3R4KTsKLSsgICAgcjEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rICAgIHIyID0gQk5fQ1RYX2dldChj dHgpOwotKyAgICByMyA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsgICAgaWYgKHIzID09IE5VTEwp Ci0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgLyogV2UgbmVlZCB0aGUgUlNBIGNvbXBvbmVu dHMgbm9uLU5VTEwgKi8KLSsgICAgaWYgKCFyc2EtPm4gJiYgKChyc2EtPm4gPSBCTl9uZXcoKSkg PT0gTlVMTCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFyc2EtPmQgJiYgKChyc2Et PmQgPSBCTl9zZWN1cmVfbmV3KCkpID09IE5VTEwpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAg IGlmICghcnNhLT5lICYmICgocnNhLT5lID0gQk5fbmV3KCkpID09IE5VTEwpKQotKyAgICAgICAg Z290byBlcnI7Ci0rICAgIGlmICghcnNhLT5wICYmICgocnNhLT5wID0gQk5fc2VjdXJlX25ldygp KSA9PSBOVUxMKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIXJzYS0+cSAmJiAoKHJz YS0+cSA9IEJOX3NlY3VyZV9uZXcoKSkgPT0gTlVMTCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsg ICAgaWYgKCFyc2EtPmRtcDEgJiYgKChyc2EtPmRtcDEgPSBCTl9zZWN1cmVfbmV3KCkpID09IE5V TEwpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghcnNhLT5kbXExICYmICgocnNhLT5k bXExID0gQk5fc2VjdXJlX25ldygpKSA9PSBOVUxMKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAg ICBpZiAoIXJzYS0+aXFtcCAmJiAoKHJzYS0+aXFtcCA9IEJOX3NlY3VyZV9uZXcoKSkgPT0gTlVM TCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgaWYgKCFCTl9zZXRfd29yZChyMCwgUlNB X0Y0KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoQk5fY21wKGVfdmFsdWUsIHIwKSA8 IDAgfHwgQk5fbnVtX2JpdHMoZV92YWx1ZSkgPiAyNTYpIHsKLSsgICAgICAgIG9rID0gMDsgICAg ICAgICAgICAgICAgIC8qIHdlIHNldCBvdXIgb3duIGVyciAqLwotKyAgICAgICAgUlNBZXJyKFJT QV9GX0ZJUFNfUlNBX0JVSUxUSU5fS0VZR0VOLCBSU0FfUl9CQURfRV9WQUxVRSk7Ci0rICAgICAg ICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICAvKiBwcmVwYXJlIGFwcHJveGltYXRlIG1pbmlt dW0gcCBhbmQgcSAqLwotKyAgICBpZiAoIUJOX3NldF93b3JkKHIwLCAweEI1MDRGMzM0KSkKLSsg ICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIUJOX2xzaGlmdChyMCwgcjAsIHBiaXRzIC0gMzIp KQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIC8qIHByZXBhcmUgbWluaW11bSBwIGFuZCBx IGRpZmZlcmVuY2UgKi8KLSsgICAgaWYgKCFCTl9vbmUocjMpKQotKyAgICAgICAgZ290byBlcnI7 Ci0rICAgIGlmICghQk5fbHNoaWZ0KHIzLCByMywgcGJpdHMgLSAxMDApKQotKyAgICAgICAgZ290 byBlcnI7Ci0rCi0rICAgIEJOX2NvcHkocnNhLT5lLCBlX3ZhbHVlKTsKLSsKLSsgICAgaWYgKCFC Tl9pc196ZXJvKHJzYS0+cCkgJiYgIUJOX2lzX3plcm8ocnNhLT5xKSkKLSsgICAgICAgIHRlc3Qg PSAxOwotKwotKyAgICBCTl9zZXRfZmxhZ3MocjAsIEJOX0ZMR19DT05TVFRJTUUpOwotKyAgICBC Tl9zZXRfZmxhZ3MocjEsIEJOX0ZMR19DT05TVFRJTUUpOwotKyAgICBCTl9zZXRfZmxhZ3MocjIs IEJOX0ZMR19DT05TVFRJTUUpOwotKyAgICBCTl9zZXRfZmxhZ3MocnNhLT5wLCBCTl9GTEdfQ09O U1RUSU1FKTsKLSsgICAgQk5fc2V0X2ZsYWdzKHJzYS0+cSwgQk5fRkxHX0NPTlNUVElNRSk7Ci0r Ci0rIHJldHJ5OgotKyAgICAvKiBnZW5lcmF0ZSBwIGFuZCBxICovCi0rICAgIGZvciAoaSA9IDA7 IGkgPCA1ICogcGJpdHM7IGkrKykgewotKyBwbG9vcDoKLSsgICAgICAgIGlmICghdGVzdCkKLSsg ICAgICAgICAgICBpZiAoIUJOX3JhbmQocnNhLT5wLCBwYml0cywgMCwgMSkpCi0rICAgICAgICAg ICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgaWYgKEJOX2NtcChyc2EtPnAsIHIwKSA8IDApIHsK LSsgICAgICAgICAgICBpZiAodGVzdCkKLSsgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0rICAg ICAgICAgICAgZ290byBwbG9vcDsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIGlmICghQk5fc3Vi KHIyLCByc2EtPnAsIEJOX3ZhbHVlX29uZSgpKSkKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsg ICAgICAgIEVSUl9zZXRfbWFyaygpOwotKyAgICAgICAgaWYgKEJOX21vZF9pbnZlcnNlKHIxLCBy MiwgcnNhLT5lLCBjdHgpICE9IE5VTEwpIHsKLSsgICAgICAgICAgICAvKiBHQ0QgPT0gMSBzaW5j ZSBpbnZlcnNlIGV4aXN0cyAqLwotKyAgICAgICAgICAgIGludCByOwotKyAgICAgICAgICAgIHIg PSBCTl9pc19wcmltZV9mYXN0dGVzdF9leChyc2EtPnAsIHBiaXRzID4gMTAyNCA/IDQgOiA1LCBj dHgsIDAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiKTsKLSsg ICAgICAgICAgICBpZiAociA9PSAtMSB8fCAodGVzdCAmJiByIDw9IDApKQotKyAgICAgICAgICAg ICAgICBnb3RvIGVycjsKLSsgICAgICAgICAgICBpZiAociA+IDApCi0rICAgICAgICAgICAgICAg IGJyZWFrOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICBlcnJvciA9IEVSUl9wZWVr X2xhc3RfZXJyb3IoKTsKLSsgICAgICAgICAgICBpZiAoRVJSX0dFVF9MSUIoZXJyb3IpID09IEVS Ul9MSUJfQk4KLSsgICAgICAgICAgICAgICAgJiYgRVJSX0dFVF9SRUFTT04oZXJyb3IpID09IEJO X1JfTk9fSU5WRVJTRSkgewotKyAgICAgICAgICAgICAgICAvKiBHQ0QgIT0gMSAqLwotKyAgICAg ICAgICAgICAgICBFUlJfcG9wX3RvX21hcmsoKTsKLSsgICAgICAgICAgICB9IGVsc2UgewotKyAg ICAgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rICAg ICAgICBpZiAoIUJOX0dFTkNCX2NhbGwoY2IsIDIsIG4rKykpCi0rICAgICAgICAgICAgZ290byBl cnI7Ci0rICAgIH0KLSsKLSsgICAgaWYgKCFCTl9HRU5DQl9jYWxsKGNiLCAzLCAwKSkKLSsgICAg ICAgIGdvdG8gZXJyOwotKwotKyAgICBpZiAoaSA+PSA1ICogcGJpdHMpCi0rICAgICAgICAvKiBw cmltZSBub3QgZm91bmQgKi8KLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBmb3IgKGkgPSAw OyBpIDwgNSAqIHBiaXRzOyBpKyspIHsKLSsgcWxvb3A6Ci0rICAgICAgICBpZiAoIXRlc3QpCi0r ICAgICAgICAgICAgaWYgKCFCTl9yYW5kKHJzYS0+cSwgcGJpdHMsIDAsIDEpKQotKyAgICAgICAg ICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgIGlmIChCTl9jbXAocnNhLT5xLCByMCkgPCAwKSB7 Ci0rICAgICAgICAgICAgaWYgKHRlc3QpCi0rICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotKyAg ICAgICAgICAgIGdvdG8gcWxvb3A7Ci0rICAgICAgICB9Ci0rICAgICAgICBpZiAoIUJOX3N1Yihy MiwgcnNhLT5xLCByc2EtPnApKQotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgaWYg KEJOX3VjbXAocjIsIHIzKSA8PSAwKSB7Ci0rICAgICAgICAgICAgaWYgKHRlc3QpCi0rICAgICAg ICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgICAgIGdvdG8gcWxvb3A7Ci0rICAgICAgICB9 Ci0rCi0rICAgICAgICBpZiAoIUJOX3N1YihyMiwgcnNhLT5xLCBCTl92YWx1ZV9vbmUoKSkpCi0r ICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICBFUlJfc2V0X21hcmsoKTsKLSsgICAgICAg IGlmIChCTl9tb2RfaW52ZXJzZShyMSwgcjIsIHJzYS0+ZSwgY3R4KSAhPSBOVUxMKSB7Ci0rICAg ICAgICAgICAgLyogR0NEID09IDEgc2luY2UgaW52ZXJzZSBleGlzdHMgKi8KLSsgICAgICAgICAg ICBpbnQgcjsKLSsgICAgICAgICAgICByID0gQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocnNhLT5x LCBwYml0cyA+IDEwMjQgPyA0IDogNSwgY3R4LCAwLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjYik7Ci0rICAgICAgICAgICAgaWYgKHIgPT0gLTEgfHwgKHRlc3Qg JiYgciA8PSAwKSkKLSsgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICAgICAgaWYg KHIgPiAwKQotKyAgICAgICAgICAgICAgICBicmVhazsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAg ICAgICAgICAgZXJyb3IgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7Ci0rICAgICAgICAgICAgaWYg KEVSUl9HRVRfTElCKGVycm9yKSA9PSBFUlJfTElCX0JOCi0rICAgICAgICAgICAgICAgICYmIEVS Ul9HRVRfUkVBU09OKGVycm9yKSA9PSBCTl9SX05PX0lOVkVSU0UpIHsKLSsgICAgICAgICAgICAg ICAgLyogR0NEICE9IDEgKi8KLSsgICAgICAgICAgICAgICAgRVJSX3BvcF90b19tYXJrKCk7Ci0r ICAgICAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAg ICAgICAgfQotKyAgICAgICAgfQotKyAgICAgICAgaWYgKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCBu KyspKQotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIGlmICghQk5fR0VO Q0JfY2FsbChjYiwgMywgMSkpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgaWYgKGkgPj0g NSAqIHBiaXRzKQotKyAgICAgICAgLyogcHJpbWUgbm90IGZvdW5kICovCi0rICAgICAgICBnb3Rv IGVycjsKLSsKLSsgICAgaWYgKHRlc3QpIHsKLSsgICAgICAgIC8qIGRvIG5vdCB0cnkgdG8gY2Fs Y3VsYXRlIHRoZSByZW1haW5pbmcga2V5IHZhbHVlcyAqLwotKyAgICAgICAgQk5fY2xlYXIocnNh LT5uKTsKLSsgICAgICAgIG9rID0gMTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0r ICAgIGlmIChCTl9jbXAocnNhLT5wLCByc2EtPnEpIDwgMCkgewotKyAgICAgICAgdG1wID0gcnNh LT5wOwotKyAgICAgICAgcnNhLT5wID0gcnNhLT5xOwotKyAgICAgICAgcnNhLT5xID0gdG1wOwot KyAgICB9Ci0rCi0rICAgIC8qIGNhbGN1bGF0ZSBuICovCi0rICAgIGlmICghQk5fbXVsKHJzYS0+ biwgcnNhLT5wLCByc2EtPnEsIGN0eCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgLyog Y2FsY3VsYXRlIGQgKi8KLSsgICAgaWYgKCFCTl9zdWIocjEsIHJzYS0+cCwgQk5fdmFsdWVfb25l KCkpKQotKyAgICAgICAgZ290byBlcnI7ICAgICAgICAgICAgICAgLyogcC0xICovCi0rICAgIGlm ICghQk5fc3ViKHIyLCByc2EtPnEsIEJOX3ZhbHVlX29uZSgpKSkKLSsgICAgICAgIGdvdG8gZXJy OyAgICAgICAgICAgICAgIC8qIHEtMSAqLwotKwotKyAgICAvKiBub3RlIHRoYXQgY29tcHV0aW5n IGdjZCBpcyBub3Qgc2FmZSB0byB0aW1pbmcgYXR0YWNrcyAqLwotKyAgICBpZiAoIUJOX2djZChy MCwgcjEsIHIyLCBjdHgpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIHsKLSsgICAgICAg IGlmICghQk5fZGl2KHIwLCBOVUxMLCByMSwgcjAsIGN0eCkpCi0rICAgICAgICAgICAgZ290byBl cnI7Ci0rCi0rICAgICAgICBpZiAoIUJOX211bChyMCwgcjAsIHIyLCBjdHgpKSAvKiBsY20ocC0x LCBxLTEpICovCi0rICAgICAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgICAgICBpZiAoIUJOX21v ZF9pbnZlcnNlKHJzYS0+ZCwgcnNhLT5lLCByMCwgY3R4KSkgLyogZCAqLwotKyAgICAgICAgICAg IGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIGlmIChCTl9udW1fYml0cyhyc2EtPmQpIDwgcGJp dHMpCi0rICAgICAgICBnb3RvIHJldHJ5OyAgICAgICAgICAgICAvKiBkIGlzIHRvbyBzbWFsbCAq LwotKwotKyAgICB7Ci0rICAgICAgICBCSUdOVU0gKmQgPSBCTl9uZXcoKTsKLSsKLSsgICAgICAg IGlmIChkID09IE5VTEwpCi0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICBCTl93aXRo X2ZsYWdzKGQsIHJzYS0+ZCwgQk5fRkxHX0NPTlNUVElNRSk7Ci0rCi0rICAgICAgICBpZiAoLyog Y2FsY3VsYXRlIGQgbW9kIChwLTEpICovCi0rICAgICAgICAgICAgIUJOX21vZChyc2EtPmRtcDEs IGQsIHIxLCBjdHgpCi0rICAgICAgICAgICAgLyogY2FsY3VsYXRlIGQgbW9kIChxLTEpICovCi0r ICAgICAgICAgICAgfHwgIUJOX21vZChyc2EtPmRtcTEsIGQsIHIyLCBjdHgpKSB7Ci0rICAgICAg ICAgICAgQk5fZnJlZShkKTsKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgIH0KLSsg ICAgICAgIC8qIFdlIE1VU1QgZnJlZSBkIGJlZm9yZSBhbnkgZnVydGhlciB1c2Ugb2YgcnNhLT5k ICovCi0rICAgICAgICBCTl9mcmVlKGQpOwotKyAgICB9Ci0rCi0rICAgIC8qIGNhbGN1bGF0ZSBp bnZlcnNlIG9mIHEgbW9kIHAgKi8KLSsgICAgaWYgKCFCTl9tb2RfaW52ZXJzZShyc2EtPmlxbXAs IHJzYS0+cSwgcnNhLT5wLCBjdHgpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGlmICgh Zmlwc19jaGVja19yc2EocnNhKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBvayA9IDE7 Ci0rIGVycjoKLSsgICAgaWYgKG9rID09IC0xKSB7Ci0rICAgICAgICBSU0FlcnIoUlNBX0ZfRklQ U19SU0FfQlVJTFRJTl9LRVlHRU4sIEVSUl9MSUJfQk4pOwotKyAgICAgICAgb2sgPSAwOwotKyAg ICB9Ci0rICAgIGlmIChjdHggIT0gTlVMTCkgewotKyAgICAgICAgQk5fQ1RYX2VuZChjdHgpOwot KyAgICAgICAgQk5fQ1RYX2ZyZWUoY3R4KTsKLSsgICAgfQotKwotKyAgICByZXR1cm4gb2s7Ci0r fQotKyNlbmRpZgotKwotIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBp bnQgYml0cywgQklHTlVNICplX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEJOX0dFTkNCICpjYikKLSB7Ci1AQCAtNDQsNiArMzgzLDE2IEBAIHN0YXRpYyBpbnQgcnNhX2J1 aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAotICAgICBCTl9DVFggKmN0eCA9IE5VTEw7Ci0gICAgIHVu c2lnbmVkIGxvbmcgZXJyb3IgPSAwOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYg KEZJUFNfbW9kZSgpKSB7Ci0rICAgICAgICBpZiAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlO X01PRFVMVVNfQklUUykgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElO X0tFWUdFTiwgRklQU19SX0tFWV9UT09fU0hPUlQpOwotKyAgICAgICAgICAgIHJldHVybiAwOwot KyAgICAgICAgfQotKyAgICAgICAgcmV0dXJuIGZpcHNfcnNhX2J1aWx0aW5fa2V5Z2VuKHJzYSwg Yml0cywgZV92YWx1ZSwgY2IpOwotKyAgICB9Ci0rI2VuZGlmCi0rCi0gICAgIC8qCi0gICAgICAq IFdoZW4gZ2VuZXJhdGluZyByaWRpY3Vsb3VzbHkgc21hbGwga2V5cywgd2UgY2FuIGdldCBzdHVj awotICAgICAgKiBjb250aW51YWxseSByZWdlbmVyYXRpbmcgdGhlIHNhbWUgcHJpbWUgdmFsdWVz LgotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcyBvcGVu c3NsLTEuMS4waC9jcnlwdG8vcnNhL3JzYV9saWIuYwotLS0tIG9wZW5zc2wtMS4xLjBoL2NyeXB0 by9yc2EvcnNhX2xpYi5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOS4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vcnNhL3JzYV9saWIuYwkyMDE4LTAzLTI5IDE0OjQ0 OjI0LjYzODIzNjkyNCArMDIwMAotQEAgLTMyLDYgKzMyLDEyIEBAIGludCBSU0Ffc2V0X21ldGhv ZChSU0EgKnJzYSwgY29uc3QgUlNBX00KLSAgICAgICogdG8gZGVhbCB3aXRoIHdoaWNoIEVOR0lO RSBpdCBjb21lcyBmcm9tLgotICAgICAgKi8KLSAgICAgY29uc3QgUlNBX01FVEhPRCAqbXRtcDsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZs YWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKSB7Ci0rICAgICAgICBSU0FlcnIoUlNBX0ZfUlNB X1NFVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOwotKyAgICAgICAgcmV0dXJu IDA7Ci0rICAgIH0KLSsjZW5kaWYKLSAgICAgbXRtcCA9IHJzYS0+bWV0aDsKLSAgICAgaWYgKG10 bXAtPmZpbmlzaCkKLSAgICAgICAgIG10bXAtPmZpbmlzaChyc2EpOwotQEAgLTY0LDcgKzcwLDYg QEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKLSAKLSAgICAgcmV0LT5tZXRo ID0gUlNBX2dldF9kZWZhdWx0X21ldGhvZCgpOwotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUK LS0gICAgcmV0LT5mbGFncyA9IHJldC0+bWV0aC0+ZmxhZ3MgJiB+UlNBX0ZMQUdfTk9OX0ZJUFNf QUxMT1c7Ci0gICAgIGlmIChlbmdpbmUpIHsKLSAgICAgICAgIGlmICghRU5HSU5FX2luaXQoZW5n aW5lKSkgewotICAgICAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfTkVXX01FVEhPRCwgRVJSX1Jf RU5HSU5FX0xJQik7Ci1AQCAtODEsOCArODYsMTkgQEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJ TkUgKmVuZ2luZSkKLSAgICAgICAgIH0KLSAgICAgfQotICNlbmRpZgotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgpICYmICEocmV0LT5tZXRoLT5mbGFncyAmIFJTQV9G TEFHX0ZJUFNfTUVUSE9EKSkgewotKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9ORVdfTUVUSE9E LCBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsKLSsjIGlmbmRlZiBPUEVOU1NMX05PX0VOR0lO RQotKyAgICAgICAgaWYgKHJldC0+ZW5naW5lKQotKyAgICAgICAgICAgIEVOR0lORV9maW5pc2go cmV0LT5lbmdpbmUpOwotKyMgZW5kaWYKLSsgICAgICAgIE9QRU5TU0xfZnJlZShyZXQpOwotKyAg ICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSsjZW5kaWYKLSAKLS0gICAgcmV0LT5mbGFncyA9 IHJldC0+bWV0aC0+ZmxhZ3MgJiB+UlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1c7Ci0rICAgIHJldC0+ ZmxhZ3MgPSByZXQtPm1ldGgtPmZsYWdzOwotICAgICBpZiAoIUNSWVBUT19uZXdfZXhfZGF0YShD UllQVE9fRVhfSU5ERVhfUlNBLCByZXQsICZyZXQtPmV4X2RhdGEpKSB7Ci0gICAgICAgICBnb3Rv IGVycjsKLSAgICAgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL3JzYS9yc2Ffb3Nz bC5jLmZpcHMgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL3JzYS9yc2Ffb3NzbC5jCi0tLS0gb3BlbnNz bC0xLjEuMGgvY3J5cHRvL3JzYS9yc2Ffb3NzbC5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOS4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vcnNhL3JzYV9vc3NsLmMJ MjAxOC0wMy0yOSAxNDo0NDoyNC42MzgyMzY5MjQgKzAyMDAKLUBAIC0xMSw2ICsxMSwxMCBAQAot ICNpbmNsdWRlICJpbnRlcm5hbC9ibl9pbnQuaCIKLSAjaW5jbHVkZSAicnNhX2xvY2wuaCIKLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5k aWYKLSsKLSBzdGF0aWMgaW50IHJzYV9vc3NsX3B1YmxpY19lbmNyeXB0KGludCBmbGVuLCBjb25z dCB1bnNpZ25lZCBjaGFyICpmcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBjaGFyICp0bywgUlNBICpyc2EsIGludCBwYWRkaW5nKTsKLSBzdGF0aWMgaW50 IHJzYV9vc3NsX3ByaXZhdGVfZW5jcnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAq ZnJvbSwKLUBAIC00NSw2ICs0OSwxMiBAQCBzdGF0aWMgY29uc3QgUlNBX01FVEhPRCAqZGVmYXVs dF9SU0FfbWV0Ci0gCi0gdm9pZCBSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kKGNvbnN0IFJTQV9NRVRI T0QgKm1ldGgpCi0gewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgp ICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpIHsKLSsgICAgICAgIFJT QWVycihSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19SU0FfTUVU SE9EKTsKLSsgICAgICAgIHJldHVybjsKLSsgICAgfQotKyNlbmRpZgotICAgICBkZWZhdWx0X1JT QV9tZXRoID0gbWV0aDsKLSB9Ci0gCi1AQCAtNjYsNiArNzYsMjIgQEAgc3RhdGljIGludCByc2Ff b3NzbF9wdWJsaWNfZW5jcnlwdChpbnQgZgotICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxM OwotICAgICBCTl9DVFggKmN0eCA9IE5VTEw7Ci0gCi0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsg ICAgaWYgKEZJUFNfbW9kZSgpKSB7Ci0rICAgICAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQo KSkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX1JTQV9PU1NMX1BVQkxJQ19FTkNSWVBU LAotKyAgICAgICAgICAgICAgICAgICAgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsg ICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIGlmICghKHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKLSsgICAgICAgICAgICAmJiAoQk5fbnVt X2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKLSsg ICAgICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX09TU0xfUFVCTElDX0VOQ1JZUFQsIFJTQV9SX0tF WV9TSVpFX1RPT19TTUFMTCk7Ci0rICAgICAgICAgICAgcmV0dXJuIC0xOwotKyAgICAgICAgfQot KyAgICB9Ci0rIyBlbmRpZgotKwotICAgICBpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5T U0xfUlNBX01BWF9NT0RVTFVTX0JJVFMpIHsKLSAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfT1NT TF9QVUJMSUNfRU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOwotICAgICAgICAgcmV0 dXJuIC0xOwotQEAgLTI0NSw2ICsyNzEsMjIgQEAgc3RhdGljIGludCByc2Ffb3NzbF9wcml2YXRl X2VuY3J5cHQoaW50Ci0gICAgIEJJR05VTSAqdW5ibGluZCA9IE5VTEw7Ci0gICAgIEJOX0JMSU5E SU5HICpibGluZGluZyA9IE5VTEw7Ci0gCi0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYg KEZJUFNfbW9kZSgpKSB7Ci0rICAgICAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewot KyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX1JTQV9PU1NMX1BSSVZBVEVfRU5DUllQVCwKLSsg ICAgICAgICAgICAgICAgICAgIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAg ICAgICAgcmV0dXJuIC0xOwotKyAgICAgICAgfQotKwotKyAgICAgICAgaWYgKCEocnNhLT5mbGFn cyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKyAgICAgICAgICAgICYmIChCTl9udW1fYml0 cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkgewotKyAgICAg ICAgICAgIFJTQWVycihSU0FfRl9SU0FfT1NTTF9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX0tFWV9T SVpFX1RPT19TTUFMTCk7Ci0rICAgICAgICAgICAgcmV0dXJuIC0xOwotKyAgICAgICAgfQotKyAg ICB9Ci0rIyBlbmRpZgotKwotICAgICBpZiAoKGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkK LSAgICAgICAgIGdvdG8gZXJyOwotICAgICBCTl9DVFhfc3RhcnQoY3R4KTsKLUBAIC0zODAsNiAr NDIyLDIyIEBAIHN0YXRpYyBpbnQgcnNhX29zc2xfcHJpdmF0ZV9kZWNyeXB0KGludAotICAgICBC SUdOVU0gKnVuYmxpbmQgPSBOVUxMOwotICAgICBCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxM OwotIAotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKSkgewotKyAg ICAgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAgICAgICBGSVBTZXJy KEZJUFNfRl9SU0FfT1NTTF9QUklWQVRFX0RFQ1JZUFQsCi0rICAgICAgICAgICAgICAgICAgICBG SVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgICAgIHJldHVybiAtMTsKLSsg ICAgICAgIH0KLSsKLSsgICAgICAgIGlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQ U19BTExPVykKLSsgICAgICAgICAgICAmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xf UlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKLSsgICAgICAgICAgICBSU0FlcnIoUlNBX0Zf UlNBX09TU0xfUFJJVkFURV9ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKyAg ICAgICAgICAgIHJldHVybiAtMTsKLSsgICAgICAgIH0KLSsgICAgfQotKyMgZW5kaWYKLSsKLSAg ICAgaWYgKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCi0gICAgICAgICBnb3RvIGVycjsK LSAgICAgQk5fQ1RYX3N0YXJ0KGN0eCk7Ci1AQCAtNTA0LDYgKzU2MiwyMiBAQCBzdGF0aWMgaW50 IHJzYV9vc3NsX3B1YmxpY19kZWNyeXB0KGludCBmCi0gICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9 IE5VTEw7Ci0gICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLSAKLSsjIGlmZGVmIE9QRU5TU0xfRklQ UwotKyAgICBpZiAoRklQU19tb2RlKCkpIHsKLSsgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX09TU0xfUFVCTElDX0RF Q1JZUFQsCi0rICAgICAgICAgICAgICAgICAgICBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQp OwotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgfQotKwotKyAgICAgICAgaWYgKCEo cnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKyAgICAgICAgICAgICYmIChC Tl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkg ewotKyAgICAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfT1NTTF9QVUJMSUNfREVDUllQVCwgUlNB X1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsgICAgICAgICAgICByZXR1cm4gLTE7Ci0rICAgICAg ICB9Ci0rICAgIH0KLSsjIGVuZGlmCi0rCi0gICAgIGlmIChCTl9udW1fYml0cyhyc2EtPm4pID4g T1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykgewotICAgICAgICAgUlNBZXJyKFJTQV9GX1JT QV9PU1NMX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci0gICAgICAg ICByZXR1cm4gLTE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vcnNhL3JzYV9zaWdu LmMuZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vcnNhL3JzYV9zaWduLmMKLS0tLSBvcGVuc3Ns LTEuMS4waC9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDE4LTAzLTI3IDE1OjUwOjM5LjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9yc2EvcnNhX3NpZ24uYwky MDE4LTAzLTI5IDE0OjQ0OjI0LjYzODIzNjkyNCArMDIwMAotQEAgLTczLDYgKzczLDEzIEBAIGlu dCBSU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKLSAgICAgdW5zaWduZWQgY2hh ciAqdG1wcyA9IE5VTEw7Ci0gICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuY29kZWQgPSBOVUxM OwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgpICYmICEocnNh LT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQotKyAgICAgICAgJiYgIShyc2Et PmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSB7Ci0rICAgICAgICBSU0FlcnIoUlNB X0ZfUlNBX1NJR04sIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOwotKyAgICAgICAgcmV0dXJu IDA7Ci0rICAgIH0KLSsjZW5kaWYKLSAgICAgaWYgKHJzYS0+bWV0aC0+cnNhX3NpZ24pIHsKLSAg ICAgICAgIHJldHVybiByc2EtPm1ldGgtPnJzYV9zaWduKHR5cGUsIG0sIG1fbGVuLCBzaWdyZXQs IHNpZ2xlbiwgcnNhKTsKLSAgICAgfQotQEAgLTEwMCw4ICsxMDcsOSBAQCBpbnQgUlNBX3NpZ24o aW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoCi0gICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX1NJ R04sIFJTQV9SX0RJR0VTVF9UT09fQklHX0ZPUl9SU0FfS0VZKTsKLSAgICAgICAgIGdvdG8gZXJy OwotICAgICB9Ci0tICAgIGVuY3J5cHRfbGVuID0gUlNBX3ByaXZhdGVfZW5jcnlwdChlbmNvZGVk X2xlbiwgZW5jb2RlZCwgc2lncmV0LCByc2EsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSU0FfUEtDUzFfUEFERElORyk7Ci0rICAgIC8qIE5COiBjYWxsIHVuZGVybHlp bmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tpbmcgKi8KLSsgICAgZW5jcnlw dF9sZW4gPSByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5j KGVuY29kZWRfbGVuLCBlbmNvZGVkLCBzaWdyZXQsIHJzYSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTQV9QS0NT MV9QQURESU5HKSA6IDA7Ci0gICAgIGlmIChlbmNyeXB0X2xlbiA8PSAwKQotICAgICAgICAgZ290 byBlcnI7Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9jcnlwdG8vc2hhL3NoYV9sb2NsLmgu ZmlwcyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vc2hhL3NoYV9sb2NsLmgKLS0tLSBvcGVuc3NsLTEu MS4waC9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjIzNzIy NzUwNiArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9zaGEvc2hhX2xvY2wuaAkyMDE4 LTAzLTI5IDE0OjQ0OjI0LjYzODIzNjkyNCArMDIwMAotQEAgLTUyLDYgKzUyLDkgQEAgdm9pZCBz aGExX2Jsb2NrX2RhdGFfb3JkZXIoU0hBX0NUWCAqYywgYwotIAotIGludCBIQVNIX0lOSVQoU0hB X0NUWCAqYykKLSB7Ci0rI2lmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQotKyAgICBGSVBTX3NlbGZ0 ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gICAgIG1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKLSAg ICAgYy0+aDAgPSBJTklUX0RBVEFfaDA7Ci0gICAgIGMtPmgxID0gSU5JVF9EQVRBX2gxOwotZGlm ZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzIG9wZW5zc2wtMS4x LjBoL2NyeXB0by9zaGEvc2hhMjU2LmMKLS0tLSBvcGVuc3NsLTEuMS4waC9jcnlwdG8vc2hhL3No YTI1Ni5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMS4waC9jcnlwdG8vc2hhL3NoYTI1Ni5jCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjM5MjM2 OTQ4ICswMjAwCi1AQCAtMTgsNiArMTgsOSBAQAotIAotIGludCBTSEEyMjRfSW5pdChTSEEyNTZf Q1RYICpjKQotIHsKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICBGSVBTX3NlbGZ0ZXN0X2No ZWNrKCk7Ci0rIyBlbmRpZgotICAgICBtZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7Ci0gICAgIGMt PmhbMF0gPSAweGMxMDU5ZWQ4VUw7Ci0gICAgIGMtPmhbMV0gPSAweDM2N2NkNTA3VUw7Ci1AQCAt MzMsNiArMzYsOSBAQCBpbnQgU0hBMjI0X0luaXQoU0hBMjU2X0NUWCAqYykKLSAKLSBpbnQgU0hB MjU2X0luaXQoU0hBMjU2X0NUWCAqYykKLSB7Ci0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAg RklQU19zZWxmdGVzdF9jaGVjaygpOwotKyMgZW5kaWYKLSAgICAgbWVtc2V0KGMsIDAsIHNpemVv ZigqYykpOwotICAgICBjLT5oWzBdID0gMHg2YTA5ZTY2N1VMOwotICAgICBjLT5oWzFdID0gMHhi YjY3YWU4NVVMOwotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvY3J5cHRvL3NoYS9zaGE1MTIuYy5m aXBzIG9wZW5zc2wtMS4xLjBoL2NyeXB0by9zaGEvc2hhNTEyLmMKLS0tLSBvcGVuc3NsLTEuMS4w aC9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDozOS4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9jcnlwdG8vc2hhL3NoYTUxMi5jCTIwMTgtMDMtMjkg MTQ6NDQ6MjQuNjM5MjM2OTQ4ICswMjAwCi1AQCAtNjIsNiArNjIsOSBAQAotIAotIGludCBTSEEz ODRfSW5pdChTSEE1MTJfQ1RYICpjKQotIHsKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICBG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rIyBlbmRpZgotICAgICBjLT5oWzBdID0gVTY0KDB4Y2Ji YjlkNWRjMTA1OWVkOCk7Ci0gICAgIGMtPmhbMV0gPSBVNjQoMHg2MjlhMjkyYTM2N2NkNTA3KTsK LSAgICAgYy0+aFsyXSA9IFU2NCgweDkxNTkwMTVhMzA3MGRkMTcpOwotQEAgLTgwLDYgKzgzLDkg QEAgaW50IFNIQTM4NF9Jbml0KFNIQTUxMl9DVFggKmMpCi0gCi0gaW50IFNIQTUxMl9Jbml0KFNI QTUxMl9DVFggKmMpCi0gewotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIEZJUFNfc2VsZnRl c3RfY2hlY2soKTsKLSsjIGVuZGlmCi0gICAgIGMtPmhbMF0gPSBVNjQoMHg2YTA5ZTY2N2YzYmNj OTA4KTsKLSAgICAgYy0+aFsxXSA9IFU2NCgweGJiNjdhZTg1ODRjYWE3M2IpOwotICAgICBjLT5o WzJdID0gVTY0KDB4M2M2ZWYzNzJmZTk0ZjgyYik7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9k b2MvY3J5cHRvL0RTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzLnBvZC5maXBzIG9wZW5zc2wtMS4xLjBo L2RvYy9jcnlwdG8vRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnMucG9kCi0tLS0gb3BlbnNzbC0xLjEu MGgvZG9jL2NyeXB0by9EU0FfZ2VuZXJhdGVfcGFyYW1ldGVycy5wb2QuZmlwcwkyMDE4LTAzLTI3 IDE1OjUwOjM5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2RvYy9jcnlwdG8v RFNBX2dlbmVyYXRlX3BhcmFtZXRlcnMucG9kCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjM5MjM2OTQ4 ICswMjAwCi1AQCAtMjksOCArMjksMTAgQEAgQjxiaXRzPiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBw cmltZSBwIHRvCi0gRm9yIGxlbmd0aHMgdW5kZXIgMjA0OCBiaXRzLCB0aGUgbGVuZ3RoIG9mIHEg aXMgMTYwIGJpdHM7IGZvciBsZW5ndGhzCi0gZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDIwNDgg Yml0cywgdGhlIGxlbmd0aCBvZiBxIGlzIHNldCB0byAyNTYgYml0cy4KLSAKLS1JZiBCPHNlZWQ+ IGlzIE5VTEwsIHRoZSBwcmltZXMgd2lsbCBiZSBnZW5lcmF0ZWQgYXQgcmFuZG9tLgotLUlmIEI8 c2VlZF9sZW4+IGlzIGxlc3MgdGhhbiB0aGUgbGVuZ3RoIG9mIHEsIGFuIGVycm9yIGlzIHJldHVy bmVkLgotK0lmIEI8c2VlZD4gaXMgTlVMTCwgb3IgaXQgZG9lcyBub3QgZ2VuZXJhdGUgcHJpbWVz LCB0aGUgcHJpbWVzIHdpbGwgYmUKLStnZW5lcmF0ZWQgYXQgcmFuZG9tLgotK0lmIEI8c2VlZF9s ZW4+IGlzIGxlc3MgdGhhbiB0aGUgbGVuZ3RoIG9mIHEsIGFuIGVycm9yIGlzIHJldHVybmVkCi0r aWYgb2xkIERTQSBwYXJhbWV0ZXIgZ2VuZXJhdGlvbiBtZXRob2QgaXMgdXNlZCBhcyBhIGJhY2tl bmQuCi0gCi0gRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoKSBwbGFjZXMgdGhlIGl0ZXJhdGlv biBjb3VudCBpbgotICpCPGNvdW50ZXJfcmV0PiBhbmQgYSBjb3VudGVyIHVzZWQgZm9yIGZpbmRp bmcgYSBnZW5lcmF0b3IgaW4KLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2luY2x1ZGUvb3BlbnNz bC9jcnlwdG8uaC5maXBzIG9wZW5zc2wtMS4xLjBoL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAot LS0tIG9wZW5zc2wtMS4xLjBoL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaC5maXBzCTIwMTgtMDMt MjcgMTU6NTA6NDAuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oCTIwMTgtMDMtMjkgMTQ6NDQ6MjQuNjQwMjM2OTcxICswMjAwCi1AQCAt MzM2LDYgKzMzNiwxMSBAQCBpbnQgT1BFTlNTTF9pc3NlcnZpY2Uodm9pZCk7Ci0gaW50IEZJUFNf bW9kZSh2b2lkKTsKLSBpbnQgRklQU19tb2RlX3NldChpbnQgcik7Ci0gCi0rIyBpZmRlZiBPUEVO U1NMX0ZJUFMKLSsvKiBkaWUgaWYgRklQUyBzZWxmdGVzdCBmYWlsZWQgKi8KLSt2b2lkIEZJUFNf c2VsZnRlc3RfY2hlY2sodm9pZCk7Ci0rIyBlbmRpZgotKwotIHZvaWQgT1BFTlNTTF9pbml0KHZv aWQpOwotIAotIHN0cnVjdCB0bSAqT1BFTlNTTF9nbXRpbWUoY29uc3QgdGltZV90ICp0aW1lciwg c3RydWN0IHRtICpyZXN1bHQpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvaW5jbHVkZS9vcGVu c3NsL2RoLmguZmlwcyBvcGVuc3NsLTEuMS4waC9pbmNsdWRlL29wZW5zc2wvZGguaAotLS0tIG9w ZW5zc2wtMS4xLjBoL2luY2x1ZGUvb3BlbnNzbC9kaC5oLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDo0 MC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9pbmNsdWRlL29wZW5zc2wvZGgu aAkyMDE4LTAzLTI5IDE0OjQ0OjI0LjY0MDIzNjk3MSArMDIwMAotQEAgLTMwLDYgKzMwLDcgQEAg ZXh0ZXJuICJDIiB7Ci0gIyBlbmRpZgotIAotICMgZGVmaW5lIE9QRU5TU0xfREhfRklQU19NSU5f TU9EVUxVU19CSVRTIDEwMjQKLSsjIGRlZmluZSBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNf QklUU19HRU4gMjA0OAotIAotICMgZGVmaW5lIERIX0ZMQUdfQ0FDSEVfTU9OVF9QICAgICAweDAx Ci0gCi1AQCAtMzI1LDYgKzMyNiw5IEBAIGludCBFUlJfbG9hZF9ESF9zdHJpbmdzKHZvaWQpOwot ICMgZGVmaW5lIERIX0ZfREhfQ01TX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxMTQKLSAjIGRlZmluZSBESF9GX0RIX0NNU19TRVRfUEVFUktFWSAgICAgICAgICAgICAgICAg ICAgICAgICAgMTE1Ci0gIyBkZWZpbmUgREhfRl9ESF9DTVNfU0VUX1NIQVJFRF9JTkZPICAgICAg ICAgICAgICAgICAgICAgIDExNgotKyMgZGVmaW5lIERIX0ZfREhfQ09NUFVURV9LRVkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAyMDMKLSsjIGRlZmluZSBESF9GX0RIX0dFTkVSQVRFX0tF WSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAyCi0rIyBkZWZpbmUgREhfRl9ESF9HRU5F UkFURV9QQVJBTUVURVJTX0VYICAgICAgICAgICAgICAgICAgIDIwMQotICMgZGVmaW5lIERIX0Zf REhfTUVUSF9EVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTcKLSAjIGRlZmlu ZSBESF9GX0RIX01FVEhfTkVXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE4Ci0g IyBkZWZpbmUgREhfRl9ESF9NRVRIX1NFVDFfTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAg IDExOQotQEAgLTM0NiwxMCArMzUwLDEyIEBAIGludCBFUlJfbG9hZF9ESF9zdHJpbmdzKHZvaWQp OwotICMgZGVmaW5lIERIX1JfREVDT0RFX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxMDQKLSAjIGRlZmluZSBESF9SX0lOVkFMSURfUFVCS0VZICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTAyCi0gIyBkZWZpbmUgREhfUl9LREZfUEFSQU1FVEVSX0VSUk9SICAgICAg ICAgICAgICAgICAgICAgICAgIDExMgotKyMgZGVmaW5lIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxM ICAgICAgICAgICAgICAgICAgICAgICAgICAyMDEKLSAjIGRlZmluZSBESF9SX0tFWVNfTk9UX1NF VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4Ci0gIyBkZWZpbmUgREhfUl9NT0RV TFVTX1RPT19MQVJHRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMwotICMgZGVmaW5lIERI X1JfTk9fUEFSQU1FVEVSU19TRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDcKLSAjIGRl ZmluZSBESF9SX05PX1BSSVZBVEVfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAw Ci0rIyBkZWZpbmUgREhfUl9OT05fRklQU19NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDIwMgotICMgZGVmaW5lIERIX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SICAgICAgICAg ICAgICAgICAgICAxMDUKLSAjIGRlZmluZSBESF9SX1BFRVJfS0VZX0VSUk9SICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMTExCi0gIyBkZWZpbmUgREhfUl9TSEFSRURfSU5GT19FUlJPUiAg ICAgICAgICAgICAgICAgICAgICAgICAgIDExMwotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvaW5j bHVkZS9vcGVuc3NsL2RzYS5oLmZpcHMgb3BlbnNzbC0xLjEuMGgvaW5jbHVkZS9vcGVuc3NsL2Rz YS5oCi0tLS0gb3BlbnNzbC0xLjEuMGgvaW5jbHVkZS9vcGVuc3NsL2RzYS5oLmZpcHMJMjAxOC0w My0yNyAxNTo1MDo0MC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9pbmNsdWRl L29wZW5zc2wvZHNhLmgJMjAxOC0wMy0yOSAxNDo0NDoyNC42NDEyMzY5OTQgKzAyMDAKLUBAIC0z Niw2ICszNiw3IEBAIGV4dGVybiAiQyIgewotICMgZW5kaWYKLSAKLSAjIGRlZmluZSBPUEVOU1NM X0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAotKyMgZGVmaW5lIE9QRU5TU0xfRFNBX0ZJ UFNfTUlOX01PRFVMVVNfQklUU19HRU4gMjA0OAotIAotICMgZGVmaW5lIERTQV9GTEFHX0NBQ0hF X01PTlRfUCAgIDB4MDEKLSAjIGlmIE9QRU5TU0xfQVBJX0NPTVBBVCA8IDB4MTAxMDAwMDBMCi1A QCAtMTQ2LDkgKzE0Nyw5IEBAIGludCBEU0FwYXJhbXNfcHJpbnRfZnAoRklMRSAqZnAsIGNvbnN0 IEQKLSBpbnQgRFNBX3ByaW50X2ZwKEZJTEUgKmJwLCBjb25zdCBEU0EgKngsIGludCBvZmYpOwot ICMgZW5kaWYKLSAKLS0jIGRlZmluZSBEU1NfcHJpbWVfY2hlY2tzIDUwCi0rIyBkZWZpbmUgRFNT X3ByaW1lX2NoZWNrcyA2NAotIC8qCi0tICogUHJpbWFsaXR5IHRlc3QgYWNjb3JkaW5nIHRvIEZJ UFMgUFVCIDE4NlstMV0sIEFwcGVuZGl4IDIuMTogNTAgcm91bmRzIG9mCi0rICogUHJpbWFsaXR5 IHRlc3QgYWNjb3JkaW5nIHRvIEZJUFMgUFVCIDE4Ni00LCBBcHBlbmRpeCAyLjE6IDY0IHJvdW5k cyBvZgotICAqIFJhYmluLU1pbGxlcgotICAqLwotICMgZGVmaW5lIERTQV9pc19wcmltZShuLCBj YWxsYmFjaywgY2JfYXJnKSBcCi1AQCAtMjQxLDggKzI0MiwxMSBAQCBpbnQgRVJSX2xvYWRfRFNB X3N0cmluZ3Modm9pZCk7Ci0gLyogRnVuY3Rpb24gY29kZXMuICovCi0gIyBkZWZpbmUgRFNBX0Zf RFNBUEFSQU1TX1BSSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMAotICMgZGVmaW5l IERTQV9GX0RTQVBBUkFNU19QUklOVF9GUCAgICAgICAgICAgICAgICAgICAgICAgICAxMDEKLSsj IGRlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4gICAgICAgICAgICAgICAgICAgICAgICAg MjAyCi0gIyBkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4gICAgICAgICAgICAgICAg ICAgICAgIDEyNQotICMgZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOMiAgICAgICAg ICAgICAgICAgICAgICAxMjYKLSsjIGRlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfS0VZICAgICAg ICAgICAgICAgICAgICAgICAgICAgMjAxCi0rIyBkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BB UkFNRVRFUlNfRVggICAgICAgICAgICAgICAgIDIwMAotICMgZGVmaW5lIERTQV9GX0RTQV9ET19T SUdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTIKLSAjIGRlZmluZSBEU0FfRl9E U0FfRE9fVkVSSUZZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEzCi0gIyBkZWZpbmUg RFNBX0ZfRFNBX01FVEhfRFVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNwotQEAg LTI2OSw5ICsyNzMsMTIgQEAgaW50IEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQpOwotICMgZGVm aW5lIERTQV9SX0RFQ09ERV9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQK LSAjIGRlZmluZSBEU0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFICAgICAgICAgICAgICAgICAgICAg ICAgMTA2Ci0gIyBkZWZpbmUgRFNBX1JfSU5WQUxJRF9QQVJBTUVURVJTICAgICAgICAgICAgICAg ICAgICAgICAgIDExMgotKyMgZGVmaW5lIERTQV9SX0tFWV9TSVpFX0lOVkFMSUQgICAgICAgICAg ICAgICAgICAgICAgICAgICAyMDEKLSsjIGRlZmluZSBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwg ICAgICAgICAgICAgICAgICAgICAgICAgMjAyCi0gIyBkZWZpbmUgRFNBX1JfTUlTU0lOR19QQVJB TUVURVJTICAgICAgICAgICAgICAgICAgICAgICAgIDEwMQotICMgZGVmaW5lIERTQV9SX01PRFVM VVNfVE9PX0xBUkdFICAgICAgICAgICAgICAgICAgICAgICAgICAxMDMKLSAjIGRlZmluZSBEU0Ff Ul9OT19QQVJBTUVURVJTX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMTA3Ci0rIyBkZWZp bmUgRFNBX1JfTk9OX0ZJUFNfRFNBX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgIDIwMAot ICMgZGVmaW5lIERTQV9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUiAgICAgICAgICAgICAgICAg ICAxMDUKLSAjIGRlZmluZSBEU0FfUl9RX05PVF9QUklNRSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTEzCi0gIyBkZWZpbmUgRFNBX1JfU0VFRF9MRU5fU01BTEwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDExMAotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvaW5jbHVkZS9vcGVu c3NsL2V2cC5oLmZpcHMgb3BlbnNzbC0xLjEuMGgvaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0tLS0g b3BlbnNzbC0xLjEuMGgvaW5jbHVkZS9vcGVuc3NsL2V2cC5oLmZpcHMJMjAxOC0wMy0yNyAxNTo1 MDo0MC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9pbmNsdWRlL29wZW5zc2wv ZXZwLmgJMjAxOC0wMy0yOSAxNDo0NDoyNC42NDEyMzY5OTQgKzAyMDAKLUBAIC0xNDYxLDYgKzE0 NjEsNyBAQCBpbnQgRVJSX2xvYWRfRVZQX3N0cmluZ3Modm9pZCk7Ci0gIyBkZWZpbmUgRVZQX0Zf QUVTX09DQl9DSVBIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OQotICMgZGVmaW5l IEVWUF9GX0FFU19UNF9JTklUX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzgKLSAj IGRlZmluZSBFVlBfRl9BRVNfV1JBUF9DSVBIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAg MTcwCi0rIyBkZWZpbmUgRVZQX0ZfQUVTX1hUU19DSVBIRVIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDIwMAotICMgZGVmaW5lIEVWUF9GX0FMR19NT0RVTEVfSU5JVCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxNzcKLSAjIGRlZmluZSBFVlBfRl9DQU1FTExJQV9JTklUX0tFWSAgICAg ICAgICAgICAgICAgICAgICAgICAgMTU5Ci0gIyBkZWZpbmUgRVZQX0ZfQ0hBQ0hBMjBfUE9MWTEz MDVfQ1RSTCAgICAgICAgICAgICAgICAgICAgIDE4MgotQEAgLTE1MzksNiArMTU0MCw3IEBAIGlu dCBFUlJfbG9hZF9FVlBfc3RyaW5ncyh2b2lkKTsKLSAjIGRlZmluZSBFVlBfUl9DVFJMX09QRVJB VElPTl9OT1RfSU1QTEVNRU5URUQgICAgICAgICAgICAgMTMzCi0gIyBkZWZpbmUgRVZQX1JfREFU QV9OT1RfTVVMVElQTEVfT0ZfQkxPQ0tfTEVOR1RIICAgICAgICAgIDEzOAotICMgZGVmaW5lIEVW UF9SX0RFQ09ERV9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTQKLSsjIGRl ZmluZSBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyAgICAgICAgICAgICAgICAgICAgICAgICAgMjAw Ci0gIyBkZWZpbmUgRVZQX1JfRElGRkVSRU5UX0tFWV9UWVBFUyAgICAgICAgICAgICAgICAgICAg ICAgIDEwMQotICMgZGVmaW5lIEVWUF9SX0RJRkZFUkVOVF9QQVJBTUVURVJTICAgICAgICAgICAg ICAgICAgICAgICAxNTMKLSAjIGRlZmluZSBFVlBfUl9FUlJPUl9MT0FESU5HX1NFQ1RJT04gICAg ICAgICAgICAgICAgICAgICAgMTY1Ci1AQCAtMTU3NSw2ICsxNTc3LDcgQEAgaW50IEVSUl9sb2Fk X0VWUF9zdHJpbmdzKHZvaWQpOwotICMgZGVmaW5lIEVWUF9SX1BSSVZBVEVfS0VZX0RFQ09ERV9F UlJPUiAgICAgICAgICAgICAgICAgICAxNDUKLSAjIGRlZmluZSBFVlBfUl9QUklWQVRFX0tFWV9F TkNPREVfRVJST1IgICAgICAgICAgICAgICAgICAgMTQ2Ci0gIyBkZWZpbmUgRVZQX1JfUFVCTElD X0tFWV9OT1RfUlNBICAgICAgICAgICAgICAgICAgICAgICAgIDEwNgotKyMgZGVmaW5lIEVWUF9S X1RPT19MQVJHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDEKLSAjIGRlZmlu ZSBFVlBfUl9VTktOT1dOX0NJUEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYwCi0g IyBkZWZpbmUgRVZQX1JfVU5LTk9XTl9ESUdFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDE2MQotICMgZGVmaW5lIEVWUF9SX1VOS05PV05fT1BUSU9OICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxNjkKLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2luY2x1ZGUvb3BlbnNzbC9maXBz LmguZmlwcyBvcGVuc3NsLTEuMS4waC9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0tLS0gb3BlbnNz bC0xLjEuMGgvaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaC5maXBzCTIwMTgtMDMtMjkgMTQ6NDQ6MjQu NjQxMjM2OTk0ICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aAkyMDE4LTAzLTI5IDE0OjQ0OjI0LjY0MTIzNjk5NCArMDIwMAotQEAgLTAsMCArMSwxODYgQEAK LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0r ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Ns Y29uZi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMK LSsjIGVycm9yIEZJUFMgaXMgZGlzYWJsZWQuCi0rI2VuZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwotKyMgaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rIyBlbmRpZgot KwotKyAgICBpbnQgRklQU19zZWxmdGVzdCh2b2lkKTsKLSsgICAgaW50IEZJUFNfc2VsZnRlc3Rf ZmFpbGVkKHZvaWQpOwotKyAgICBpbnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2b2lkKTsKLSsK LSsgICAgaW50IEZJUFNfZHNhX2J1aWx0aW5fcGFyYW1nZW4yKERTQSAqcmV0LCBzaXplX3QgTCwg c2l6ZV90IE4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9NRCAq ZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBzZWVkX2xlbiwgaW50IGlkeCwgdW5zaWduZWQgY2hhciAqc2Vl ZF9vdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQs IHVuc2lnbmVkIGxvbmcgKmhfcmV0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC Tl9HRU5DQiAqY2IpOwotKyAgICBpbnQgRklQU19kc2FfcGFyYW1nZW5fY2hlY2tfZyhEU0EgKmRz YSk7Ci0rCi0rLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KLSsvKiBUaGUgZm9sbG93aW5nIGxpbmVz IGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwot KyAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2Ny aXB0IGlzIG5leHQgcnVuLgotKyAqLwotKyAgICBpbnQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZv aWQpOwotKwotKy8qIEVycm9yIGNvZGVzIGZvciB0aGUgRklQUyBmdW5jdGlvbnMuICovCi0rCi0r LyogRnVuY3Rpb24gY29kZXMuICovCi0rIyBkZWZpbmUgRklQU19GX0RIX0JVSUxUSU5fR0VOUEFS QU1TICAgICAgICAgICAgICAgICAgICAgIDEwMAotKyMgZGVmaW5lIEZJUFNfRl9EUkJHX1JFU0VF RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjEKLSsjIGRlZmluZSBGSVBTX0ZfRFNB X0JVSUxUSU5fUEFSQU1HRU4yICAgICAgICAgICAgICAgICAgICAgMTA3Ci0rIyBkZWZpbmUgRklQ U19GX0RTQV9ET19TSUdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMgotKyMgZGVm aW5lIEZJUFNfRl9EU0FfRE9fVkVSSUZZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDMK LSsjIGRlZmluZSBGSVBTX0ZfRVZQX0NJUEhFUl9DVFhfTkVXICAgICAgICAgICAgICAgICAgICAg ICAgMTM3Ci0rIyBkZWZpbmUgRklQU19GX0VWUF9DSVBIRVJfQ1RYX1JFU0VUICAgICAgICAgICAg ICAgICAgICAgIDEyMgotKyMgZGVmaW5lIEZJUFNfRl9FQ0RIX0NPTVBVVEVfS0VZICAgICAgICAg ICAgICAgICAgICAgICAgICAxMjMKLSsjIGRlZmluZSBGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgg ICAgICAgICAgICAgICAgICAgICAgICAgMTI0Ci0rIyBkZWZpbmUgRklQU19GX0VWUF9ESUdFU1RJ TklUX0VYICAgICAgICAgICAgICAgICAgICAgICAgIDEyNQotKyMgZGVmaW5lIEZJUFNfRl9GSVBT X0NIRUNLX0RTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQKLSsjIGRlZmluZSBGSVBT X0ZfRklQU19DSEVDS19FQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQyCi0rIyBkZWZp bmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNgot KyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQllURVMgICAgICAgICAgICAgICAgICAgICAgICAg ICAxMzEKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX0NIRUNLICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTQ2Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNUICAgICAg ICAgICAgICAgICAgICAgIDEzMgotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hF Q0sgICAgICAgICAgICAgICAgICAgICAxMzYKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX0dF TkVSQVRFICAgICAgICAgICAgICAgICAgICAgICAgMTM0Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNf RFJCR19JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNQotKyMgZGVmaW5lIEZJUFNf Rl9GSVBTX0RSQkdfSU5TVEFOVElBVEUgICAgICAgICAgICAgICAgICAgICAxMzgKLSsjIGRlZmlu ZSBGSVBTX0ZfRklQU19EUkJHX05FVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM5Ci0r IyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19SRVNFRUQgICAgICAgICAgICAgICAgICAgICAgICAg IDE0MAotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCAgICAgICAgICAgICAg ICAgICAgICAxNDEKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19HRVRfRU5UUk9QWSAgICAgICAgICAg ICAgICAgICAgICAgICAgMTQ3Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VU ICAgICAgICAgICAgICAgICAgICAgIDEwOAotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1BLRVlfU0lH TkFUVVJFX1RFU1QgICAgICAgICAgICAgICAgICAxMDkKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19S QU5EX0JZVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE0Ci0rIyBkZWZpbmUgRklQU19G X0ZJUFNfUkFORF9TRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOAotKyMgZGVmaW5l IEZJUFNfRl9GSVBTX1JBTkRfU0VUX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAxMjYKLSsj IGRlZmluZSBGSVBTX0ZfRklQU19SQU5EX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAg MTI3Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfUlNBX0JVSUxUSU5fS0VZR0VOICAgICAgICAgICAg ICAgICAgIDEwMQotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUyAgICAgICAgICAg ICAgICAgICAgICAgICAxMTAKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NN ICAgICAgICAgICAgICAgICAgICAgMTQ1Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1Rf QUVTX0dDTSAgICAgICAgICAgICAgICAgICAgIDEyOQotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NF TEZURVNUX0FFU19YVFMgICAgICAgICAgICAgICAgICAgICAxNDQKLSsjIGRlZmluZSBGSVBTX0Zf RklQU19TRUxGVEVTVF9DTUFDICAgICAgICAgICAgICAgICAgICAgICAgMTMwCi0rIyBkZWZpbmUg RklQU19GX0ZJUFNfU0VMRlRFU1RfREVTICAgICAgICAgICAgICAgICAgICAgICAgIDExMQotKyMg ZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RTQSAgICAgICAgICAgICAgICAgICAgICAgICAx MTIKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9FQ0RTQSAgICAgICAgICAgICAgICAg ICAgICAgMTMzCi0rIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQyAgICAgICAgICAg ICAgICAgICAgICAgIDExMwotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEgICAg ICAgICAgICAgICAgICAgICAgICAxMTUKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9T SEEyICAgICAgICAgICAgICAgICAgICAgICAgMTA1Ci0rIyBkZWZpbmUgRklQU19GX09TU0xfRUNE U0FfU0lHTl9TSUcgICAgICAgICAgICAgICAgICAgICAgIDE0MwotKyMgZGVmaW5lIEZJUFNfRl9P U1NMX0VDRFNBX1ZFUklGWV9TSUcgICAgICAgICAgICAgICAgICAgICAxNDgKLSsjIGRlZmluZSBG SVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOICAgICAgICAgICAgICAgICAgICAgICAgMTE2Ci0rIyBk ZWZpbmUgRklQU19GX1JTQV9PU1NMX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0 OQotKyMgZGVmaW5lIEZJUFNfRl9SU0FfT1NTTF9QUklWQVRFX0RFQ1JZUFQgICAgICAgICAgICAg ICAgICAxMTcKLSsjIGRlZmluZSBGSVBTX0ZfUlNBX09TU0xfUFJJVkFURV9FTkNSWVBUICAgICAg ICAgICAgICAgICAgMTE4Ci0rIyBkZWZpbmUgRklQU19GX1JTQV9PU1NMX1BVQkxJQ19ERUNSWVBU ICAgICAgICAgICAgICAgICAgIDExOQotKyMgZGVmaW5lIEZJUFNfRl9SU0FfT1NTTF9QVUJMSUNf RU5DUllQVCAgICAgICAgICAgICAgICAgICAxMjAKLSsKLSsvKiBSZWFzb24gY29kZXMuICovCi0r IyBkZWZpbmUgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRCAgICAgICAg IDE1MAotKyMgZGVmaW5lIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HICAgICAgICAg ICAgICAgICAxMjUKLSsjIGRlZmluZSBGSVBTX1JfQUxSRUFEWV9JTlNUQU5USUFURUQgICAgICAg ICAgICAgICAgICAgICAgMTM0Ci0rIyBkZWZpbmUgRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VE ICAgICAgICAgICAgICAgICAgICAgIDE1MgotKyMgZGVmaW5lIEZJUFNfUl9EUkJHX1NUVUNLICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDMKLSsjIGRlZmluZSBGSVBTX1JfRU5UUk9Q WV9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgICAgICAgICAgMTA0Ci0rIyBkZWZpbmUgRklQU19S X0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEICAgICAgICAgIDEwNQotKyMgZGVmaW5l IEZJUFNfUl9FTlRST1BZX1NPVVJDRV9TVFVDSyAgICAgICAgICAgICAgICAgICAgICAxNDIKLSsj IGRlZmluZSBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcgICAgICAgICAgICAgICAgICAg MTE1Ci0rIyBkZWZpbmUgRklQU19SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRyAgICAgICAgICAg ICAgICAgIDEyNwotKyMgZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0FERElUSU9OQUxf SU5QVVQgICAgICAgICAxMjQKLSsjIGRlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRS T1BZICAgICAgICAgICAgICAgICAgMTIyCi0rIyBkZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJRVZJ TkdfTk9OQ0UgICAgICAgICAgICAgICAgICAgIDE0MAotKyMgZGVmaW5lIEZJUFNfUl9GSU5HRVJQ UklOVF9ET0VTX05PVF9NQVRDSCAgICAgICAgICAgICAgICAxMTAKLSsjIGRlZmluZSBGSVBTX1Jf RklQU19NT0RFX0FMUkVBRFlfU0VUICAgICAgICAgICAgICAgICAgICAgMTAyCi0rIyBkZWZpbmUg RklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgIDEwNgotKyMg ZGVmaW5lIEZJUFNfUl9GVU5DVElPTl9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAx MTYKLSsjIGRlZmluZSBGSVBTX1JfR0VORVJBVEVfRVJST1IgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTM3Ci0rIyBkZWZpbmUgRklQU19SX0dFTkVSQVRFX0VSUk9SX1VOREVURUNURUQgICAg ICAgICAgICAgICAgIDExOAotKyMgZGVmaW5lIEZJUFNfUl9JTlNUQU5USUFURV9FUlJPUiAgICAg ICAgICAgICAgICAgICAgICAgICAxMTkKLSsjIGRlZmluZSBGSVBTX1JfSU5URVJOQUxfRVJST1Ig ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIxCi0rIyBkZWZpbmUgRklQU19SX0lOVkFMSURf S0VZX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgIDEwOQotKyMgZGVmaW5lIEZJUFNfUl9J Tl9FUlJPUl9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjMKLSsjIGRlZmluZSBG SVBTX1JfS0VZX1RPT19TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4Ci0rIyBk ZWZpbmUgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQgICAgICAgICAgICAgICAgICAgIDE0 OQotKyMgZGVmaW5lIEZJUFNfUl9OT05fRklQU19NRVRIT0QgICAgICAgICAgICAgICAgICAgICAg ICAgICAxMDAKLSsjIGRlZmluZSBGSVBTX1JfTk9QUl9URVNUMV9GQUlMVVJFICAgICAgICAgICAg ICAgICAgICAgICAgMTQ1Ci0rIyBkZWZpbmUgRklQU19SX05PUFJfVEVTVDJfRkFJTFVSRSAgICAg ICAgICAgICAgICAgICAgICAgIDE0NgotKyMgZGVmaW5lIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVE ICAgICAgICAgICAgICAgICAgICAgICAgICAxMjYKLSsjIGRlZmluZSBGSVBTX1JfUEFJUldJU0Vf VEVTVF9GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgMTA3Ci0rIyBkZWZpbmUgRklQU19SX1BF UlNPTkFMSVNBVElPTl9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgIDEyOAotKyMgZGVmaW5lIEZJ UFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HICAgICAgICAgICAxMjkKLSsjIGRl ZmluZSBGSVBTX1JfUFJfVEVTVDFfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ3 Ci0rIyBkZWZpbmUgRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAg ICAgIDE0OAotKyMgZGVmaW5lIEZJUFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVE ICAgICAgICAgICAxMzAKLSsjIGRlZmluZSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RS QkcgICAgICAgICAgICAgICAgMTMxCi0rIyBkZWZpbmUgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VS Uk9SICAgICAgICAgICAgICAgICAgICAgIDEzMgotKyMgZGVmaW5lIEZJUFNfUl9SRVNFRURfRVJS T1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzMKLSsjIGRlZmluZSBGSVBTX1JfU0VM RlRFU1RfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAxCi0rIyBkZWZpbmUgRklQ U19SX1NFTEZURVNUX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNQotKyMgZGVm aW5lIEZJUFNfUl9URVNUX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTcK LSsjIGRlZmluZSBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUiAgICAgICAgICAgICAgICAgICAg ICAgMTQxCi0rIyBkZWZpbmUgRklQU19SX1VOSU5TVEFOVElBVEVfWkVST0lTRV9FUlJPUiAgICAg ICAgICAgICAgIDEzOAotKyMgZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9EUkJHX1RZUEUgICAg ICAgICAgICAgICAgICAgICAxMzkKLSsjIGRlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfUExBVEZP Uk0gICAgICAgICAgICAgICAgICAgICAgMTEzCi0rCi0rIyBpZmRlZiAgX19jcGx1c3BsdXMKLSt9 Ci0rIyBlbmRpZgotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvaW5jbHVkZS9vcGVu c3NsL2ZpcHNfcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjEuMGgvaW5jbHVkZS9vcGVuc3NsL2ZpcHNf cmFuZC5oCi0tLS0gb3BlbnNzbC0xLjEuMGgvaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oLmZp cHMJMjAxOC0wMy0yOSAxNDo0NDoyNC42NDEyMzY5OTQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4w aC9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgJMjAxOC0wMy0yOSAxNDo0NDoyNC42NDEyMzY5 OTQgKzAyMDAKLUBAIC0wLDAgKzEsMTQ1IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmln aHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0r ICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4K LSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0r Ci0rI2lmbmRlZiBIRUFERVJfRklQU19SQU5EX0gKLSsjIGRlZmluZSBIRUFERVJfRklQU19SQU5E X0gKLSsKLSsjIGluY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rIyBpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgotKyMgaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rIyBpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KLSsKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKwotKyMgIGlmZGVmICBfX2NwbHVzcGx1 cwotK2V4dGVybiAiQyIgewotKyMgIGVuZGlmCi0rICAgIHR5cGVkZWYgc3RydWN0IGRyYmdfY3R4 X3N0IERSQkdfQ1RYOwotKy8qIERSQkcgZXh0ZXJuYWwgZmxhZ3MgKi8KLSsvKiBGbGFnIGZvciBD VFIgbW9kZSBvbmx5OiB1c2UgZGVyaXZhdGlvbiBmdW5jdGlvbiBjdHJfZGYgKi8KLSsjICBkZWZp bmUgRFJCR19GTEFHX0NUUl9VU0VfREYgICAgICAgICAgICAweDEKLSsvKiBQUk5HIGlzIGluIHRl c3Qgc3RhdGUgKi8KLSsjICBkZWZpbmUgRFJCR19GTEFHX1RFU1QgICAgICAgICAgICAgICAgICAw eDIKLSsKLSsgICAgRFJCR19DVFggKkZJUFNfZHJiZ19uZXcoaW50IHR5cGUsIHVuc2lnbmVkIGlu dCBmbGFncyk7Ci0rICAgIGludCBGSVBTX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0eCwgaW50IHR5 cGUsIHVuc2lnbmVkIGludCBmbGFncyk7Ci0rICAgIGludCBGSVBTX2RyYmdfaW5zdGFudGlhdGUo RFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pOwotKyAgICBpbnQgRklQU19kcmJnX3Jl c2VlZChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IGFkaW5sZW4pOwotKyAgICBpbnQgRklQU19kcmJnX2dl bmVyYXRlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWRpY3Rpb25fcmVzaXN0YW5jZSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBz aXplX3QgYWRpbmxlbik7Ci0rCi0rICAgIGludCBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShEUkJH X0NUWCAqZGN0eCk7Ci0rICAgIHZvaWQgRklQU19kcmJnX2ZyZWUoRFJCR19DVFggKmRjdHgpOwot KwotKyAgICBpbnQgRklQU19kcmJnX3NldF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKCpnZXRfZW50cm9weSkgKERSQkdf Q1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1pbl9s ZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBtYXhfbGVuKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKCpjbGVhbnVwX2VudHJvcHkpIChEUkJHX0NUWCAqY3R4LAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91 dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3Qgb2xlbiksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgZW50cm9weV9ibG9ja2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCAoKmdldF9ub25jZSkgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBl bnRyb3B5LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IG1pbl9sZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2xlbiksCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICgqY2xlYW51cF9ub25jZSkgKERSQkdfQ1RYICpjdHgsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgKm91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4pKTsKLSsKLSsgICAgaW50IEZJUFNfZHJiZ19zZXRf cmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCAoKmdldF9hZGluKSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBjaGFyCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKipwb3V0KSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAoKmNsZWFudXBfYWRpbikgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpv dXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3Qgb2xlbiksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAoKnJhbmRfc2VlZF9jYikgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1 ZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IG51bSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAoKnJhbmRfYWRkX2NiKSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IG51bSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkb3VibGUgZW50cm9weSkpOwotKwotKyAgICB2b2lkICpGSVBTX2RyYmdfZ2V0X2Fw cF9kYXRhKERSQkdfQ1RYICpjdHgpOwotKyAgICB2b2lkIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEo RFJCR19DVFggKmN0eCwgdm9pZCAqYXBwX2RhdGEpOwotKyAgICBzaXplX3QgRklQU19kcmJnX2dl dF9ibG9ja2xlbmd0aChEUkJHX0NUWCAqZGN0eCk7Ci0rICAgIGludCBGSVBTX2RyYmdfZ2V0X3N0 cmVuZ3RoKERSQkdfQ1RYICpkY3R4KTsKLSsgICAgdm9pZCBGSVBTX2RyYmdfc2V0X2NoZWNrX2lu dGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpOwotKyAgICB2b2lkIEZJUFNfZHJi Z19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpOwotKwot KyAgICBpbnQgRklQU19kcmJnX2hlYWx0aF9jaGVjayhEUkJHX0NUWCAqZGN0eCk7Ci0rCi0rICAg IERSQkdfQ1RYICpGSVBTX2dldF9kZWZhdWx0X2RyYmcodm9pZCk7Ci0rICAgIGNvbnN0IFJBTkRf TUVUSE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpOwotKwotKyAgICBpbnQgRklQU19yYW5kX3Nl dF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgpOwotKyAgICBjb25zdCBSQU5EX01FVEhP RCAqRklQU19yYW5kX2dldF9tZXRob2Qodm9pZCk7Ci0rCi0rICAgIHZvaWQgRklQU19yYW5kX3Nl dF9iaXRzKGludCBuYml0cyk7Ci0rCi0rICAgIGludCBGSVBTX3JhbmRfc3RyZW5ndGgodm9pZCk7 Ci0rCi0rLyogMS4wLjAgY29tcGF0IGZ1bmN0aW9ucyAqLwotKyAgICBpbnQgRklQU19yYW5kX3Nl ZWQoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKTsKLSsgICAgaW50IEZJUFNfcmFuZF9ieXRlcyh1 bnNpZ25lZCBjaGFyICpvdXQsIGludCBvdXRsZW4pOwotKyAgICB2b2lkIEZJUFNfcmFuZF9yZXNl dCh2b2lkKTsKLSsgICAgaW50IEZJUFNfcmFuZF9zdGF0dXModm9pZCk7Ci0rIyAgaWZkZWYgIF9f Y3BsdXNwbHVzCi0rfQotKyMgIGVuZGlmCi0rIyBlbmRpZgotKyNlbmRpZgotZGlmZiAtdXAgb3Bl bnNzbC0xLjEuMGgvaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmguaW4uZmlwcyBvcGVuc3Ns LTEuMS4waC9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaC5pbgotLS0tIG9wZW5zc2wtMS4x LjBoL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oLmluLmZpcHMJMjAxOC0wMy0yNyAxNTo1 MDo0MC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaC5pbgkyMDE4LTAzLTI5IDE0OjQ0OjI0LjY0MjIzNzAxOCArMDIwMAotQEAg LTEzNiw2ICsxMzYsMTEgQEAgZXh0ZXJuICJDIiB7Ci0gCi0gI2RlZmluZSBSQzRfSU5UIHstICRj b25maWd7cmM0X2ludH0gLX0KLSAKLSsvKiBBbHdheXMgYnVpbGQgRklQUyBtb2R1bGUgKi8KLSsj aWZuZGVmIE9QRU5TU0xfRklQUwotKyMgZGVmaW5lIE9QRU5TU0xfRklQUwotKyNlbmRpZgotKwot ICNpZmRlZiAgX19jcGx1c3BsdXMKLSB9Ci0gI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4w aC9pbmNsdWRlL29wZW5zc2wvcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjEuMGgvaW5jbHVkZS9vcGVu c3NsL3JhbmQuaAotLS0tIG9wZW5zc2wtMS4xLjBoL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmguZmlw cwkyMDE4LTAzLTI3IDE1OjUwOjQwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBo L2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgJMjAxOC0wMy0yOSAxNDo0NDoyNC42NDIyMzcwMTggKzAy MDAKLUBAIC02Nyw2ICs2NywxMSBAQCBERVBSRUNBVEVESU5fMV8xXzAodm9pZCBSQU5EX3NjcmVl bih2b2lkCi0gREVQUkVDQVRFRElOXzFfMV8wKGludCBSQU5EX2V2ZW50KFVJTlQsIFdQQVJBTSwg TFBBUkFNKSkKLSAjZW5kaWYKLSAKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotK3ZvaWQgUkFORF9z ZXRfZmlwc19kcmJnX3R5cGUoaW50IHR5cGUsIGludCBmbGFncyk7Ci0raW50IFJBTkRfaW5pdF9m aXBzKHZvaWQpOwotKyMgZW5kaWYKLSsKLSAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwotIC8qCi0g ICogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBt a2Vyci5wbC4gQW55IGNoYW5nZXMKLUBAIC03OSw4ICs4NCwxMSBAQCBpbnQgRVJSX2xvYWRfUkFO RF9zdHJpbmdzKHZvaWQpOwotIAotIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwotICMgZGVmaW5lIFJB TkRfRl9SQU5EX0JZVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAKLSsjIGRl ZmluZSBSQU5EX0ZfUkFORF9JTklUX0ZJUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAw Ci0gCi0gLyogUmVhc29uIGNvZGVzLiAqLwotKyMgZGVmaW5lIFJBTkRfUl9FUlJPUl9JTklUSUFM SVNJTkdfRFJCRyAgICAgICAgICAgICAgICAgICAyMDAKLSsjIGRlZmluZSBSQU5EX1JfRVJST1Jf SU5TVEFOVElBVElOR19EUkJHICAgICAgICAgICAgICAgICAgMjAxCi0gIyBkZWZpbmUgUkFORF9S X1BSTkdfTk9UX1NFRURFRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMAotIAotICMgaWZk ZWYgIF9fY3BsdXNwbHVzCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9pbmNsdWRlL29wZW5zc2wv cnNhLmguZmlwcyBvcGVuc3NsLTEuMS4waC9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLS0tLSBvcGVu c3NsLTEuMS4waC9pbmNsdWRlL29wZW5zc2wvcnNhLmguZmlwcwkyMDE4LTAzLTI3IDE1OjUwOjQw LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL2luY2x1ZGUvb3BlbnNzbC9yc2Eu aAkyMDE4LTAzLTI5IDE0OjQ0OjI0LjY0MjIzNzAxOCArMDIwMAotQEAgLTQ2Myw2ICs0NjMsNyBA QCBpbnQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Ci0gLyogRnVuY3Rpb24gY29kZXMuICov Ci0gIyBkZWZpbmUgUlNBX0ZfQ0hFQ0tfUEFERElOR19NRCAgICAgICAgICAgICAgICAgICAgICAg ICAgIDE0MAotICMgZGVmaW5lIFJTQV9GX0VOQ09ERV9QS0NTMSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxNDYKLSsjIGRlZmluZSBSU0FfRl9GSVBTX1JTQV9CVUlMVElOX0tFWUdFTiAg ICAgICAgICAgICAgICAgICAgMjA2Ci0gIyBkZWZpbmUgUlNBX0ZfSU5UX1JTQV9WRVJJRlkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDE0NQotICMgZGVmaW5lIFJTQV9GX09MRF9SU0FfUFJJ Vl9ERUNPREUgICAgICAgICAgICAgICAgICAgICAgICAxNDcKLSAjIGRlZmluZSBSU0FfRl9QS0VZ X1JTQV9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQzCi1AQCAtNDc1LDYgKzQ3 Niw3IEBAIGludCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAjIGRlZmluZSBSU0FfRl9S U0FfQ0hFQ0tfS0VZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIzCi0gIyBkZWZpbmUg UlNBX0ZfUlNBX0NIRUNLX0tFWV9FWCAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MAotICMg ZGVmaW5lIFJTQV9GX1JTQV9DTVNfREVDUllQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAx NTkKLSsjIGRlZmluZSBSU0FfRl9SU0FfR0VORVJBVEVfS0VZX0VYICAgICAgICAgICAgICAgICAg ICAgICAgMjA0Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX0lURU1fVkVSSUZZICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDE0OAotICMgZGVmaW5lIFJTQV9GX1JTQV9NRVRIX0RVUCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxNjEKLSAjIGRlZmluZSBSU0FfRl9SU0FfTUVUSF9ORVcgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYyCi1AQCAtNTA5LDkgKzUxMSwxNSBAQCBpbnQg RVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNQotICMgZGVmaW5lIFJTQV9GX1JTQV9Q UklOVF9GUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTYKLSAjIGRlZmluZSBSU0Ff Rl9SU0FfUFJJVl9FTkNPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM4Ci0rIyBkZWZp bmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVCAgICAgICAgICAgICAgICAgICAgICAgIDIwMAot KyMgZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQgICAgICAgICAgICAgICAgICAgICAg ICAyMDEKLSAjIGRlZmluZSBSU0FfRl9SU0FfUFNTX1RPX0NUWCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTU1Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX1BVQl9ERUNPREUgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDEzOQotKyMgZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCAg ICAgICAgICAgICAgICAgICAgICAgICAyMDIKLSsjIGRlZmluZSBSU0FfRl9SU0FfUFVCTElDX0VO Q1JZUFQgICAgICAgICAgICAgICAgICAgICAgICAgMjAzCi0gIyBkZWZpbmUgUlNBX0ZfUlNBX1NF VFVQX0JMSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgIDEzNgotKyMgZGVmaW5lIFJTQV9G X1JTQV9TRVRfREVGQVVMVF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAyMDUKLSsjIGRlZmlu ZSBSU0FfRl9SU0FfU0VUX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA0Ci0g IyBkZWZpbmUgUlNBX0ZfUlNBX1NJR04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDExNwotICMgZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HICAgICAgICAg ICAgICAgICAxMTgKLSAjIGRlZmluZSBSU0FfRl9SU0FfVkVSSUZZICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMTE5Ci1AQCAtNTU4LDkgKzU2NiwxMSBAQCBpbnQgRVJSX2xvYWRfUlNB X3N0cmluZ3Modm9pZCk7Ci0gIyBkZWZpbmUgUlNBX1JfTEFTVF9PQ1RFVF9JTlZBTElEICAgICAg ICAgICAgICAgICAgICAgICAgIDEzNAotICMgZGVmaW5lIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdF ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDUKLSAjIGRlZmluZSBSU0FfUl9OT19QVUJMSUNf RVhQT05FTlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQwCi0rIyBkZWZpbmUgUlNBX1JfTk9O X0ZJUFNfUlNBX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgIDIwMAotICMgZGVmaW5lIFJT QV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcgICAgICAgICAgICAgICAgICAxMTMKLSAjIGRl ZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUSAgICAgICAgICAgICAgICAgICAgICAgMTI3 Ci0gIyBkZWZpbmUgUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUiAgICAgICAgICAgICAgICAgICAg ICAgIDEyMQotKyMgZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01P REUgICAgICAgICAyMDEKLSAjIGRlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9G T1JfVEhJU19LRVlUWVBFICAgMTQ4Ci0gIyBkZWZpbmUgUlNBX1JfUEFERElOR19DSEVDS19GQUlM RUQgICAgICAgICAgICAgICAgICAgICAgIDExNAotICMgZGVmaW5lIFJTQV9SX1BLQ1NfREVDT0RJ TkdfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAxNTkKLWRpZmYgLXVwIG9wZW5zc2wtMS4x LjBoL3NzbC9zc2xfY2lwaC5jLmZpcHMgb3BlbnNzbC0xLjEuMGgvc3NsL3NzbF9jaXBoLmMKLS0t LSBvcGVuc3NsLTEuMS4waC9zc2wvc3NsX2NpcGguYy5maXBzCTIwMTgtMDMtMjkgMTQ6NDQ6MjQu NjI1MjM2NjE5ICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvc3NsL3NzbF9jaXBoLmMJMjAxOC0w My0yOSAxNDo0NDoyNC42NDMyMzcwNDIgKzAyMDAKLUBAIC00MDQsNyArNDA0LDggQEAgdm9pZCBz c2xfbG9hZF9jaXBoZXJzKHZvaWQpCi0gICAgICAgICB9Ci0gICAgIH0KLSAgICAgLyogTWFrZSBz dXJlIHdlIGNhbiBhY2Nlc3MgTUQ1IGFuZCBTSEExICovCi0tICAgIE9QRU5TU0xfYXNzZXJ0KHNz bF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfTUQ1X0lEWF0gIT0gTlVMTCk7Ci0rICAgIGlmICghRklQ U19tb2RlKCkpCi0rICAgICAgICBPUEVOU1NMX2Fzc2VydChzc2xfZGlnZXN0X21ldGhvZHNbU1NM X01EX01ENV9JRFhdICE9IE5VTEwpOwotICAgICBPUEVOU1NMX2Fzc2VydChzc2xfZGlnZXN0X21l dGhvZHNbU1NMX01EX1NIQTFfSURYXSAhPSBOVUxMKTsKLSAKLSAgICAgZGlzYWJsZWRfbWtleV9t YXNrID0gMDsKLUBAIC02ODcsNyArNjg4LDcgQEAgc3RhdGljIHZvaWQgc3NsX2NpcGhlcl9jb2xs ZWN0X2NpcGhlcnMoYwotICAgICAgICAgLyogZHJvcCB0aG9zZSB0aGF0IHVzZSBhbnkgb2YgdGhh dCBpcyBub3QgYXZhaWxhYmxlICovCi0gICAgICAgICBpZiAoYyA9PSBOVUxMIHx8ICFjLT52YWxp ZCkKLSAgICAgICAgICAgICBjb250aW51ZTsKLS0gICAgICAgIGlmIChGSVBTX21vZGUoKSAmJiAo Yy0+YWxnb19zdHJlbmd0aCAmIFNTTF9GSVBTKSkKLSsgICAgICAgIGlmIChGSVBTX21vZGUoKSAm JiAhKGMtPmFsZ29fc3RyZW5ndGggJiBTU0xfRklQUykpCi0gICAgICAgICAgICAgY29udGludWU7 Ci0gICAgICAgICBpZiAoKGMtPmFsZ29yaXRobV9ta2V5ICYgZGlzYWJsZWRfbWtleSkgfHwKLSAg ICAgICAgICAgICAoYy0+YWxnb3JpdGhtX2F1dGggJiBkaXNhYmxlZF9hdXRoKSB8fAotZGlmZiAt dXAgb3BlbnNzbC0xLjEuMGgvc3NsL3NzbF9pbml0LmMuZmlwcyBvcGVuc3NsLTEuMS4waC9zc2wv c3NsX2luaXQuYwotLS0tIG9wZW5zc2wtMS4xLjBoL3NzbC9zc2xfaW5pdC5jLmZpcHMJMjAxOC0w My0yNyAxNTo1MDo0MC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC9zc2wvc3Ns X2luaXQuYwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjY0MzIzNzA0MiArMDIwMAotQEAgLTI4LDYgKzI4 LDEwIEBAIERFRklORV9SVU5fT05DRV9TVEFUSUMob3NzbF9pbml0X3NzbF9iYXMKLSAgICAgZnBy aW50ZihzdGRlcnIsICJPUEVOU1NMX0lOSVQ6IG9zc2xfaW5pdF9zc2xfYmFzZTogIgotICAgICAg ICAgICAgICJBZGRpbmcgU1NMIGNpcGhlcnMgYW5kIGRpZ2VzdHNcbiIpOwotICNlbmRpZgotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKCFGSVBTX21vZGUoKSkgewotKyNlbmRpZgotKwot ICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jYmMo KSk7Ci0gICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7Ci1AQCAtODQsNiAr ODgsMzEgQEAgREVGSU5FX1JVTl9PTkNFX1NUQVRJQyhvc3NsX2luaXRfc3NsX2JhcwotICAgICBF VlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOwotICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hh Mzg0KCkpOwotICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsgICAgfSBlbHNlIHsKLSsjIGlmbmRlZiBPUEVOU1NMX05PX0RFUwotKyAgICAg ICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKLSsjIGVuZGlmCi0rICAgICAg ICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7Ci0rICAgICAgICBFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzE5Ml9jYmMoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9jYmMoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7 Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7Ci0rICAgICAgICBF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jY20oKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzI1Nl9jY20oKSk7Ci0rIyBpZm5kZWYgT1BFTlNTTF9OT19NRDUKLSsgICAgICAg IC8qIG5lZWRlZCBldmVuIGluIHRoZSBGSVBTIG1vZGUgZm9yIFRMUy0xLjAgKi8KLSsgICAgICAg IEVWUF9hZGRfZGlnZXN0KEVWUF9tZDVfc2hhMSgpKTsKLSsjIGVuZGlmCi0rICAgICAgICBFVlBf YWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsgLyogUlNBIHdpdGggc2hhMSAqLwotKyAgICAgICAgRVZQ X2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwgInNzbDMtc2hhMSIpOwotKyAgICAgICAgRVZQX2Fk ZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLCBTTl9zaGExV2l0aFJTQSk7 Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOwotKyAgICAgICAgRVZQX2Fk ZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEz ODQoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOwotKyAgICB9Ci0r I2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKLSAjIGlmZGVmIE9QRU5TU0xfSU5JVF9E RUJVRwotICAgICBmcHJpbnRmKHN0ZGVyciwgIk9QRU5TU0xfSU5JVDogb3NzbF9pbml0X3NzbF9i YXNlOiAiCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC9zc2wvc3NsX2xpYi5jLmZpcHMgb3BlbnNz bC0xLjEuMGgvc3NsL3NzbF9saWIuYwotLS0tIG9wZW5zc2wtMS4xLjBoL3NzbC9zc2xfbGliLmMu ZmlwcwkyMDE4LTAzLTI5IDE0OjQ0OjI0LjYyNTIzNjYxOSArMDIwMAotKysrIG9wZW5zc2wtMS4x LjBoL3NzbC9zc2xfbGliLmMJMjAxOC0wMy0yOSAxNDo0NDoyNC42NDMyMzcwNDIgKzAyMDAKLUBA IC0yNTg4LDEzICsyNTg4LDE3IEBAIFNTTF9DVFggKlNTTF9DVFhfbmV3KGNvbnN0IFNTTF9NRVRI T0QgKm0KLSAgICAgaWYgKHJldC0+cGFyYW0gPT0gTlVMTCkKLSAgICAgICAgIGdvdG8gZXJyOwot IAotLSAgICBpZiAoKHJldC0+bWQ1ID0gRVZQX2dldF9kaWdlc3RieW5hbWUoInNzbDMtbWQ1Iikp ID09IE5VTEwpIHsKLS0gICAgICAgIFNTTGVycihTU0xfRl9TU0xfQ1RYX05FVywgU1NMX1JfVU5B QkxFX1RPX0xPQURfU1NMM19NRDVfUk9VVElORVMpOwotLSAgICAgICAgZ290byBlcnIyOwotLSAg ICB9Ci0tICAgIGlmICgocmV0LT5zaGExID0gRVZQX2dldF9kaWdlc3RieW5hbWUoInNzbDMtc2hh MSIpKSA9PSBOVUxMKSB7Ci0tICAgICAgICBTU0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsIFNTTF9S X1VOQUJMRV9UT19MT0FEX1NTTDNfU0hBMV9ST1VUSU5FUyk7Ci0tICAgICAgICBnb3RvIGVycjI7 Ci0rICAgIGlmICghRklQU19tb2RlKCkpIHsKLSsgICAgICAgIGlmICgocmV0LT5tZDUgPSBFVlBf Z2V0X2RpZ2VzdGJ5bmFtZSgic3NsMy1tZDUiKSkgPT0gTlVMTCkgewotKyAgICAgICAgICAgIFNT TGVycihTU0xfRl9TU0xfQ1RYX05FVywgU1NMX1JfVU5BQkxFX1RPX0xPQURfU1NMM19NRDVfUk9V VElORVMpOwotKyAgICAgICAgICAgIGdvdG8gZXJyMjsKLSsgICAgICAgIH0KLSsgICAgICAgIGlm ICgocmV0LT5zaGExID0gRVZQX2dldF9kaWdlc3RieW5hbWUoInNzbDMtc2hhMSIpKSA9PSBOVUxM KSB7Ci0rICAgICAgICAgICAgU1NMZXJyKFNTTF9GX1NTTF9DVFhfTkVXLCBTU0xfUl9VTkFCTEVf VE9fTE9BRF9TU0wzX1NIQTFfUk9VVElORVMpOwotKyAgICAgICAgICAgIGdvdG8gZXJyMjsKLSsg ICAgICAgIH0KLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIHJldC0+bWluX3Byb3RvX3ZlcnNpb24g PSBUTFMxX1ZFUlNJT047Ci0gICAgIH0KLSAKLSAgICAgaWYgKChyZXQtPmNsaWVudF9DQSA9IHNr X1g1MDlfTkFNRV9uZXdfbnVsbCgpKSA9PSBOVUxMKQotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgv dGVzdC9kc2F0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMS4waC90ZXN0L2RzYXRlc3QuYwotLS0tIG9w ZW5zc2wtMS4xLjBoL3Rlc3QvZHNhdGVzdC5jLmZpcHMJMjAxOC0wMy0yNyAxNTo1MDo0MS4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMS4waC90ZXN0L2RzYXRlc3QuYwkyMDE4LTAzLTI5 IDE0OjQ0OjI0LjY0NDIzNzA2NSArMDIwMAotQEAgLTMyLDQxICszMiw0MiBAQCBpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQotIAotIHN0YXRpYyBpbnQgZHNhX2NiKGludCBwLCBpbnQg biwgQk5fR0VOQ0IgKmFyZyk7Ci0gCi0tLyoKLS0gKiBzZWVkLCBvdXRfcCwgb3V0X3EsIG91dF9n IGFyZSB0YWtlbiBmcm9tIHRoZSB1cGRhdGVkIEFwcGVuZGl4IDUgdG8gRklQUwotLSAqIFBVQiAx ODYgYW5kIGFsc28gYXBwZWFyIGluIEFwcGVuZGl4IDUgdG8gRklQUyBQSUIgMTg2LTEKLS0gKi8K LSBzdGF0aWMgdW5zaWduZWQgY2hhciBzZWVkWzIwXSA9IHsKLS0gICAgMHhkNSwgMHgwMSwgMHg0 ZSwgMHg0YiwgMHg2MCwgMHhlZiwgMHgyYiwgMHhhOCwgMHhiNiwgMHgyMSwgMHgxYiwgMHg0MCwK LS0gICAgMHg2MiwgMHhiYSwgMHgzMiwgMHgyNCwgMHhlMCwgMHg0MiwgMHg3ZCwgMHhkMywKLSsg ICAgMHgwMiwgMHg0NywgMHgxMSwgMHg5MiwgMHgxMSwgMHg4OCwgMHhDOCwgMHhGQiwgMHhBRiwg MHg0OCwgMHg0QywgMHg2MiwKLSsgICAgMHhERiwgMHhBNSwgMHhCRSwgMHhBMCwgMHhBNCwgMHgz QywgMHg1NiwgMHhFMywKLSB9OwotIAotIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9wW10gPSB7 Ci0tICAgIDB4OGQsIDB4ZjIsIDB4YTQsIDB4OTQsIDB4NDksIDB4MjIsIDB4NzYsIDB4YWEsCi0t ICAgIDB4M2QsIDB4MjUsIDB4NzUsIDB4OWIsIDB4YjAsIDB4NjgsIDB4NjksIDB4Y2IsCi0tICAg IDB4ZWEsIDB4YzAsIDB4ZDgsIDB4M2EsIDB4ZmIsIDB4OGQsIDB4MGMsIDB4ZjcsCi0tICAgIDB4 Y2IsIDB4YjgsIDB4MzIsIDB4NGYsIDB4MGQsIDB4NzgsIDB4ODIsIDB4ZTUsCi0tICAgIDB4ZDAs IDB4NzYsIDB4MmYsIDB4YzUsIDB4YjcsIDB4MjEsIDB4MGUsIDB4YWYsCi0tICAgIDB4YzIsIDB4 ZTksIDB4YWQsIDB4YWMsIDB4MzIsIDB4YWIsIDB4N2EsIDB4YWMsCi0tICAgIDB4NDksIDB4Njks IDB4M2QsIDB4ZmIsIDB4ZjgsIDB4MzcsIDB4MjQsIDB4YzIsCi0tICAgIDB4ZWMsIDB4MDcsIDB4 MzYsIDB4ZWUsIDB4MzEsIDB4YzgsIDB4MDIsIDB4OTEsCi0rICAgIDB4QUMsIDB4Q0IsIDB4MUUs IDB4NjMsIDB4NjAsIDB4NjksIDB4MEMsIDB4RkIsIDB4MDYsIDB4MTksIDB4NjgsIDB4M0UsCi0r ICAgIDB4QTUsIDB4MDEsIDB4NUEsIDB4QTIsIDB4MTUsIDB4NUMsIDB4RTIsIDB4OTksIDB4MkQs IDB4RDUsIDB4MzAsIDB4OTksCi0rICAgIDB4N0UsIDB4NUYsIDB4OEQsIDB4RTIsIDB4RjcsIDB4 QzYsIDB4MkUsIDB4OEQsIDB4QTMsIDB4OUYsIDB4NTgsIDB4QUQsCi0rICAgIDB4RDYsIDB4QTks IDB4N0QsIDB4MEUsIDB4MEQsIDB4OTUsIDB4NTMsIDB4QTYsIDB4NzEsIDB4M0EsIDB4REUsIDB4 QUIsCi0rICAgIDB4QUMsIDB4RTksIDB4RjQsIDB4MzYsIDB4NTUsIDB4OUUsIDB4QjksIDB4RDYs IDB4OTMsIDB4QkYsIDB4RjMsIDB4MTgsCi0rICAgIDB4MUMsIDB4MTQsIDB4N0IsIDB4QTUsIDB4 NDIsIDB4MkUsIDB4Q0QsIDB4MDAsIDB4RUIsIDB4MzUsIDB4M0IsIDB4MUIsCi0rICAgIDB4QTgs IDB4NTEsIDB4QkIsIDB4RTEsIDB4NTgsIDB4NDIsIDB4ODUsIDB4ODQsIDB4MjIsIDB4QTcsIDB4 OTcsIDB4NUUsCi0rICAgIDB4OTksIDB4NkYsIDB4MzgsIDB4MjAsIDB4QkQsIDB4OUQsIDB4QjYs IDB4RDksIDB4MzMsIDB4MzcsIDB4MkEsIDB4RkQsCi0rICAgIDB4QkIsIDB4RDQsIDB4QkMsIDB4 MEMsIDB4MkEsIDB4NjcsIDB4Q0IsIDB4OUYsIDB4QkIsIDB4REYsIDB4RjksIDB4OTMsCi0rICAg IDB4QUEsIDB4RDYsIDB4RjAsIDB4RDYsIDB4OTUsIDB4MEIsIDB4NUQsIDB4NjUsIDB4MTQsIDB4 RDAsIDB4MTgsIDB4OUQsCi0rICAgIDB4QzYsIDB4QUYsIDB4RjAsIDB4QzYsIDB4MzcsIDB4N0Ms IDB4RjMsIDB4NUYsCi0gfTsKLSAKLSBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcVtdID0gewot LSAgICAweGM3LCAweDczLCAweDIxLCAweDhjLCAweDczLCAweDdlLCAweGM4LCAweGVlLAotLSAg ICAweDk5LCAweDNiLCAweDRmLCAweDJkLCAweGVkLCAweDMwLCAweGY0LCAweDhlLAotLSAgICAw eGRhLCAweGNlLCAweDkxLCAweDVmLAotKyAgICAweEUzLCAweDhFLCAweDVFLCAweDZELCAweEJG LCAweDJCLCAweDc5LCAweEY4LCAweEM1LCAweDRCLCAweDg5LCAweDhCLAotKyAgICAweEJBLCAw eDJELCAweDkxLCAweEMzLCAweDZDLCAweDgwLCAweEFDLCAweDg3LAotIH07Ci0gCi0gc3RhdGlj IHVuc2lnbmVkIGNoYXIgb3V0X2dbXSA9IHsKLS0gICAgMHg2MiwgMHg2ZCwgMHgwMiwgMHg3OCwg MHgzOSwgMHhlYSwgMHgwYSwgMHgxMywKLS0gICAgMHg0MSwgMHgzMSwgMHg2MywgMHhhNSwgMHg1 YiwgMHg0YywgMHhiNSwgMHgwMCwKLS0gICAgMHgyOSwgMHg5ZCwgMHg1NSwgMHgyMiwgMHg5NSwg MHg2YywgMHhlZiwgMHhjYiwKLS0gICAgMHgzYiwgMHhmZiwgMHgxMCwgMHhmMywgMHg5OSwgMHhj ZSwgMHgyYywgMHgyZSwKLS0gICAgMHg3MSwgMHhjYiwgMHg5ZCwgMHhlNSwgMHhmYSwgMHgyNCwg MHhiYSwgMHhiZiwKLS0gICAgMHg1OCwgMHhlNSwgMHhiNywgMHg5NSwgMHgyMSwgMHg5MiwgMHg1 YywgMHg5YywKLS0gICAgMHhjNCwgMHgyZSwgMHg5ZiwgMHg2ZiwgMHg0NiwgMHg0YiwgMHgwOCwg MHg4YywKLS0gICAgMHhjNSwgMHg3MiwgMHhhZiwgMHg1MywgMHhlNiwgMHhkNywgMHg4OCwgMHgw MiwKLSsgICAgMHg0MiwgMHg0QSwgMHgwNCwgMHg0RSwgMHg3OSwgMHhCNCwgMHg5OSwgMHg3Riwg MHhGRCwgMHg1OCwgMHgzNiwgMHgyQywKLSsgICAgMHgxQiwgMHg1RiwgMHgxOCwgMHg3RSwgMHgw RCwgMHhDQywgMHhBQiwgMHg4MSwgMHhDOSwgMHg1RCwgMHgxMCwgMHhDRSwKLSsgICAgMHg0RSwg MHg4MCwgMHg3RSwgMHg1OCwgMHhCNCwgMHgzNCwgMHgzRiwgMHhBNywgMHg0NSwgMHhDNywgMHhB QSwgMHgzNiwKLSsgICAgMHgyNCwgMHg0MiwgMHhBOSwgMHgzQiwgMHhFOCwgMHgwRSwgMHgwNCwg MHgwMiwgMHgyRCwgMHhGQiwgMHhBNiwgMHgxMywKLSsgICAgMHhCOSwgMHhCNSwgMHgxNSwgMHhB NSwgMHg1NiwgMHgwNywgMHgzNSwgMHhFNCwgMHgwMywgMHhCNiwgMHg3OSwgMHg3QywKLSsgICAg MHg2MiwgMHhERCwgMHhERiwgMHgzRiwgMHg3MSwgMHgzQSwgMHg5RCwgMHg4QiwgMHhDNCwgMHhG NiwgMHhFNywgMHgxRCwKLSsgICAgMHg1MiwgMHhBOCwgMHhBOSwgMHg0MywgMHgxRCwgMHgzMywg MHg1MSwgMHg4OCwgMHgzOSwgMHhCRCwgMHg3MywgMHhFOSwKLSsgICAgMHg1RiwgMHhCRSwgMHg4 MiwgMHg0OSwgMHgyNywgMHhFNiwgMHhCNSwgMHg1MywgMHhDMSwgMHgzOCwgMHhBQywgMHgyRiwK LSsgICAgMHg2RCwgMHg5NywgMHg2QywgMHhFQiwgMHg2NywgMHhDMSwgMHg1RiwgMHg2NywgMHhG OCwgMHgzNSwgMHgwNSwgMHg1RSwKLSsgICAgMHhENSwgMHg2OCwgMHg4MCwgMHhBQSwgMHg5Niwg MHhDQSwgMHgwQiwgMHg4QSwgMHhFNiwgMHhGMSwgMHhCMSwgMHg0MSwKLSsgICAgMHhDNiwgMHg3 NSwgMHg5NCwgMHgwQSwgMHgwQSwgMHgyQSwgMHhGQSwgMHgyOSwKLSB9OwotIAotIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHN0cjFbXSA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MCI7Ci1AQCAt MTAyLDcgKzEwMyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAgICAgICAg IGdvdG8gZW5kOwotIAotICAgICBCTl9HRU5DQl9zZXQoY2IsIGRzYV9jYiwgYmlvX2Vycik7Ci0t ICAgIGlmICgoKGRzYSA9IERTQV9uZXcoKSkgPT0gTlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJh bWV0ZXJzX2V4KGRzYSwgNTEyLAotKyAgICBpZiAoKChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwp IHx8ICFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl ZWQsIDIwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmY291bnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmgsIGNiKSkKLUBAIC0x MTYsOCArMTE3LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotICAgICBCSU9f cHJpbnRmKGJpb19lcnIsICJcbmNvdW50ZXI9JWQgaD0lbGRcbiIsIGNvdW50ZXIsIGgpOwotIAot ICAgICBEU0FfcHJpbnQoYmlvX2VyciwgZHNhLCAwKTsKLS0gICAgaWYgKGNvdW50ZXIgIT0gMTA1 KSB7Ci0tICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsICJjb3VudGVyIHNob3VsZCBiZSAxMDVc biIpOwotKyAgICBpZiAoY291bnRlciAhPSAyMzkpIHsKLSsgICAgICAgIEJJT19wcmludGYoYmlv X2VyciwgImNvdW50ZXIgc2hvdWxkIGJlIDIzOVxuIik7Ci0gICAgICAgICBnb3RvIGVuZDsKLSAg ICAgfQotICAgICBpZiAoaCAhPSAyKSB7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMS4waC91dGlsL2xp YmNyeXB0by5udW0uZmlwcyBvcGVuc3NsLTEuMS4waC91dGlsL2xpYmNyeXB0by5udW0KLS0tLSBv cGVuc3NsLTEuMS4waC91dGlsL2xpYmNyeXB0by5udW0uZmlwcwkyMDE4LTAzLTI3IDE1OjUwOjQx LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL3V0aWwvbGliY3J5cHRvLm51bQky MDE4LTAzLTI5IDE4OjA2OjI2Ljk2MjY1MTY2MiArMDIwMAotQEAgLTQyMzIsNSArNDIzMiw0MCBA QCBaSU5UNjRfaXQKLSBaSU5UNjRfaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDIx NQkxXzFfMGYJRVhJU1Q6RVhQT1JUX1ZBUl9BU19GVU5DVElPTjpGVU5DVElPTjoKLSBDUllQVE9f c2VjdXJlX2NsZWFyX2ZyZWUgICAgICAgICAgICAgICAgNDMxNQkxXzFfMGcJRVhJU1Q6OkZVTkNU SU9OOgotIEVWUF9QS0VZX3NldDFfZW5naW5lICAgICAgICAgICAgICAgICAgICA0MzQ3CTFfMV8w ZwlFWElTVDo6RlVOQ1RJT046RU5HSU5FCi0tT0NTUF9yZXNwX2dldDBfc2lnbmVyICAgICAgICAg ICAgICAgICAgIDQzNzQJMV8xXzBoCUVYSVNUOjpGVU5DVElPTjpPQ1NQCi0rRklQU19kcmJnX3Jl c2VlZCAgICAgICAgICAgICAgICAgICAgICAgIDQzNDgJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoK LStGSVBTX3NlbGZ0ZXN0X2NoZWNrICAgICAgICAgICAgICAgICAgICAgNDM0OQkxXzFfMGcJRVhJ U1Q6OkZVTkNUSU9OOgotK0ZJUFNfcmFuZF9zZXRfbWV0aG9kICAgICAgICAgICAgICAgICAgICA0 MzUwCTFfMV8wZwlFWElTVDo6RlVOQ1RJT046Ci0rRklQU19nZXRfZGVmYXVsdF9kcmJnICAgICAg ICAgICAgICAgICAgIDQzNTEJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKLStGSVBTX2RyYmdfc2V0 X3Jlc2VlZF9pbnRlcnZhbCAgICAgICAgICAgNDM1MgkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgot K0ZJUFNfZHJiZ19zZXRfYXBwX2RhdGEgICAgICAgICAgICAgICAgICA0MzUzCTFfMV8wZwlFWElT VDo6RlVOQ1RJT046Ci0rRklQU19kcmJnX21ldGhvZCAgICAgICAgICAgICAgICAgICAgICAgIDQz NTQJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKLStGSVBTX3JhbmRfc3RhdHVzICAgICAgICAgICAg ICAgICAgICAgICAgNDM1NQkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgotK0ZJUFNfZHJiZ19pbnN0 YW50aWF0ZSAgICAgICAgICAgICAgICAgICA0MzU2CTFfMV8wZwlFWElTVDo6RlVOQ1RJT046Ci0r RklQU19kcmJnX3NldF9jYWxsYmFja3MgICAgICAgICAgICAgICAgIDQzNTcJMV8xXzBnCUVYSVNU OjpGVU5DVElPTjoKLStGSVBTX2RyYmdfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgNDM1 OAkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgotK0ZJUFNfZHNhX3BhcmFtZ2VuX2NoZWNrX2cgICAg ICAgICAgICAgICA0MzU5CTFfMV8wZwlFWElTVDo6RlVOQ1RJT046Ci0rRklQU19zZWxmdGVzdCAg ICAgICAgICAgICAgICAgICAgICAgICAgIDQzNjAJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKLStG SVBTX3JhbmRfc2V0X2JpdHMgICAgICAgICAgICAgICAgICAgICAgNDM2MQkxXzFfMGcJRVhJU1Q6 OkZVTkNUSU9OOgotK0ZJUFNfcmFuZF9ieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICA0MzYy CTFfMV8wZwlFWElTVDo6RlVOQ1RJT046Ci0rRklQU19kcmJnX2dldF9hcHBfZGF0YSAgICAgICAg ICAgICAgICAgIDQzNjMJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKLStGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCAgICAgICAgICAgICAgICAgICAgNDM2NAkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgotK0ZJ UFNfZHNhX2J1aWx0aW5fcGFyYW1nZW4yICAgICAgICAgICAgICA0MzY1CTFfMV8wZwlFWElTVDo6 RlVOQ1RJT046Ci0rRklQU19yYW5kX3Jlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgIDQzNjYJ MV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKLStFUlJfbG9hZF9GSVBTX3N0cmluZ3MgICAgICAgICAg ICAgICAgICAgNDM2NwkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgotK0ZJUFNfZHJiZ19nZW5lcmF0 ZSAgICAgICAgICAgICAgICAgICAgICA0MzY4CTFfMV8wZwlFWElTVDo6RlVOQ1RJT046Ci0rRklQ U19kcmJnX3VuaW5zdGFudGlhdGUgICAgICAgICAgICAgICAgIDQzNjkJMV8xXzBnCUVYSVNUOjpG VU5DVElPTjoKLStGSVBTX2RyYmdfc2V0X2NoZWNrX2ludGVydmFsICAgICAgICAgICAgNDM3MAkx XzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgotK0ZJUFNfZHJiZ19mcmVlICAgICAgICAgICAgICAgICAg ICAgICAgICA0MzcxCTFfMV8wZwlFWElTVDo6RlVOQ1RJT046Ci0rRklQU19zZWxmdGVzdF9kcmJn X2FsbCAgICAgICAgICAgICAgICAgIDQzNzIJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKLStGSVBT X3JhbmRfZ2V0X21ldGhvZCAgICAgICAgICAgICAgICAgICAgNDM3MwkxXzFfMGcJRVhJU1Q6OkZV TkNUSU9OOgotK1JBTkRfc2V0X2ZpcHNfZHJiZ190eXBlICAgICAgICAgICAgICAgICA0Mzc0CTFf MV8wZwlFWElTVDo6RlVOQ1RJT046Ci0rRklQU19kcmJnX2hlYWx0aF9jaGVjayAgICAgICAgICAg ICAgICAgIDQzNzUJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKLStSQU5EX2luaXRfZmlwcyAgICAg ICAgICAgICAgICAgICAgICAgICAgNDM3NgkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgotK0ZJUFNf ZHJiZ19zZXRfcmFuZF9jYWxsYmFja3MgICAgICAgICAgICA0Mzc3CTFfMV8wZwlFWElTVDo6RlVO Q1RJT046Ci0rRklQU19yYW5kX3NlZWQgICAgICAgICAgICAgICAgICAgICAgICAgIDQzNzgJMV8x XzBnCUVYSVNUOjpGVU5DVElPTjoKLStGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoICAgICAgICAgICAg ICAgICAgNDM3OQkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgotK0ZJUFNfcmFuZF9zdHJlbmd0aCAg ICAgICAgICAgICAgICAgICAgICA0MzgwCTFfMV8wZwlFWElTVDo6RlVOQ1RJT046Ci0rRklQU19k cmJnX2dldF9ibG9ja2xlbmd0aCAgICAgICAgICAgICAgIDQzODEJMV8xXzBnCUVYSVNUOjpGVU5D VElPTjoKLStGSVBTX2RyYmdfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgNDM4MgkxXzFf MGcJRVhJU1Q6OkZVTkNUSU9OOgotK09DU1BfcmVzcF9nZXQwX3NpZ25lciAgICAgICAgICAgICAg ICAgICA0Mzg0CTFfMV8waAlFWElTVDo6RlVOQ1RJT046T0NTUAotIFg1MDlfZ2V0MF9hdXRob3Jp dHlfa2V5X2lkICAgICAgICAgICAgICA0NDQ4CTFfMV8waAlFWElTVDo6RlVOQ1RJT046Ci1kaWZm IC11cCBvcGVuc3NsLTEuMS4waC91dGlsL21rZGVmLnBsLmZpcHMgb3BlbnNzbC0xLjEuMGgvdXRp bC9ta2RlZi5wbAotLS0tIG9wZW5zc2wtMS4xLjBoL3V0aWwvbWtkZWYucGwuZmlwcwkyMDE4LTAz LTI3IDE1OjUwOjQxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL3V0aWwvbWtk ZWYucGwJMjAxOC0wMy0yOSAxNDo0NDoyNC42NDQyMzcwNjUgKzAyMDAKLUBAIC0zMTEsNiArMzEx LDggQEAgJGNyeXB0by49IiBpbmNsdWRlL29wZW5zc2wvbW9kZXMuaCI7Ci0gJGNyeXB0by49IiBp bmNsdWRlL29wZW5zc2wvYXN5bmMuaCI7Ci0gJGNyeXB0by49IiBpbmNsdWRlL29wZW5zc2wvY3Qu aCI7Ci0gJGNyeXB0by49IiBpbmNsdWRlL29wZW5zc2wva2RmLmgiOwotKyRjcnlwdG8uPSIgaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaCI7Ci0rJGNyeXB0by49IiBpbmNsdWRlL29wZW5zc2wvZmlwc19y YW5kLmgiOwotIAotIG15ICRzeW1oYWNrcz0iaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgiOwot IAoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4xLjAtbWFuZml4LnBhdGNoIGIvb3BlbnNzbC0xLjEu MC1tYW5maXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZmM2MDMuLjAw MDAwMDAKLS0tIGEvb3BlbnNzbC0xLjEuMC1tYW5maXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAt MSw1MSArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMS4wZy9kb2MvYXBwcy9lYy5wb2QubWFu Zml4IG9wZW5zc2wtMS4xLjBnL2RvYy9hcHBzL2VjLnBvZAotLS0tIG9wZW5zc2wtMS4xLjBnL2Rv Yy9hcHBzL2VjLnBvZC5tYW5maXgJMjAxNy0xMS0wMiAxNToyOTowNC4wMDAwMDAwMDAgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMS4wZy9kb2MvYXBwcy9lYy5wb2QJMjAxNy0xMS0wMyAxNjowOTozMS43 MTQwMjcxNDUgKzAxMDAKLUBAIC0xMDEsMTAgKzEwMSw2IEBAIHByaW50cyBvdXQgdGhlIHB1Ymxp YywgcHJpdmF0ZSBrZXkgY29tcG8KLSAKLSB0aGlzIG9wdGlvbiBwcmV2ZW50cyBvdXRwdXQgb2Yg dGhlIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUga2V5LgotIAotLT1pdGVtIEI8LW1vZHVsdXM+Ci0t Ci0tdGhpcyBvcHRpb24gcHJpbnRzIG91dCB0aGUgdmFsdWUgb2YgdGhlIHB1YmxpYyBrZXkgY29t cG9uZW50IG9mIHRoZSBrZXkuCi0tCi0gPWl0ZW0gQjwtcHViaW4+Ci0gCi0gYnkgZGVmYXVsdCBh IHByaXZhdGUga2V5IGlzIHJlYWQgZnJvbSB0aGUgaW5wdXQgZmlsZTogd2l0aCB0aGlzIG9wdGlv biBhCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4wZy9kb2MvYXBwcy9vcGVuc3NsLnBvZC5tYW5maXgg b3BlbnNzbC0xLjEuMGcvZG9jL2FwcHMvb3BlbnNzbC5wb2QKLS0tLSBvcGVuc3NsLTEuMS4wZy9k b2MvYXBwcy9vcGVuc3NsLnBvZC5tYW5maXgJMjAxNy0xMS0wMiAxNToyOTowNC4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMS4wZy9kb2MvYXBwcy9vcGVuc3NsLnBvZAkyMDE3LTExLTAz IDE2OjExOjQ4LjQ3ODI0NTMxMSArMDEwMAotQEAgLTE3MCw3ICsxNzAsNyBAQCBDcmVhdGUgb3Ig ZXhhbWluZSBhIE5ldHNjYXBlIGNlcnRpZmljYXRlCi0gCi0gT25saW5lIENlcnRpZmljYXRlIFN0 YXR1cyBQcm90b2NvbCB1dGlsaXR5LgotIAotLT1pdGVtIEw8QjxwYXNzd2Q+fHBhc3N3ZCgxKT4K LSs9aXRlbSBMPEI8cGFzc3dkPnxzc2xwYXNzd2QoMSk+Ci0gCi0gR2VuZXJhdGlvbiBvZiBoYXNo ZWQgcGFzc3dvcmRzLgotIAotQEAgLTE5OCw3ICsxOTgsNyBAQCBQdWJsaWMga2V5IGFsZ29yaXRo bSBwYXJhbWV0ZXIgbWFuYWdlbWVuCi0gCi0gUHVibGljIGtleSBhbGdvcml0aG0gY3J5cHRvZ3Jh cGhpYyBvcGVyYXRpb24gdXRpbGl0eS4KLSAKLS09aXRlbSBMPEI8cmFuZD58cmFuZCgxKT4KLSs9 aXRlbSBMPEI8cmFuZD58c3NscmFuZCgxKT4KLSAKLSBHZW5lcmF0ZSBwc2V1ZG8tcmFuZG9tIGJ5 dGVzLgotIAotQEAgLTQzMiwxMyArNDMyLDEzIEBAIEw8ZGhwYXJhbSgxKT4sIEw8ZHNhKDEpPiwg TDxkc2FwYXJhbSgxKT4KLSBMPGVjKDEpPiwgTDxlY3BhcmFtKDEpPiwKLSBMPGVuYygxKT4sIEw8 ZW5naW5lKDEpPiwgTDxlcnJzdHIoMSk+LCBMPGdlbmRzYSgxKT4sIEw8Z2VucGtleSgxKT4sCi0g TDxnZW5yc2EoMSk+LCBMPG5zZXEoMSk+LCBMPG9jc3AoMSk+LAotLUw8cGFzc3dkKDEpPiwKLSBM PHBrY3MxMigxKT4sIEw8cGtjczcoMSk+LCBMPHBrY3M4KDEpPiwKLSBMPHBrZXkoMSk+LCBMPHBr ZXlwYXJhbSgxKT4sIEw8cGtleXV0bCgxKT4sCi0tTDxyYW5kKDEpPiwgTDxyZWhhc2goMSk+LCBM PHJlcSgxKT4sIEw8cnNhKDEpPiwKLStMPHJlaGFzaCgxKT4sIEw8cmVxKDEpPiwgTDxyc2EoMSk+ LAotIEw8cnNhdXRsKDEpPiwgTDxzX2NsaWVudCgxKT4sCi0gTDxzX3NlcnZlcigxKT4sIEw8c190 aW1lKDEpPiwgTDxzZXNzX2lkKDEpPiwKLSBMPHNtaW1lKDEpPiwgTDxzcGVlZCgxKT4sIEw8c3Br YWMoMSk+LAotK0w8c3NscGFzc3dkKDEpPiwgTDxzc2xyYW5kKDEpPiwKLSBMPHRzKDEpPiwKLSBM PHZlcmlmeSgxKT4sIEw8dmVyc2lvbigxKT4sIEw8eDUwOSgxKT4sCi0gTDxjcnlwdG8oNyk+LCBM PHNzbCg3KT4sIEw8eDUwOXYzX2NvbmZpZyg1KT4KCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMS4w LW1pc3NpbmctcXVvdGVzLnBhdGNoIGIvb3BlbnNzbC0xLjEuMC1taXNzaW5nLXF1b3Rlcy5wYXRj aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZiODc4NC4uMDAwMDAwMAotLS0gYS9v cGVuc3NsLTEuMS4wLW1pc3NpbmctcXVvdGVzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTUg KzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGgvdXRpbC9kb2ZpbGUucGwubWlzc2luZy1x dW90ZXMgb3BlbnNzbC0xLjEuMGgvdXRpbC9kb2ZpbGUucGwKLS0tLSBvcGVuc3NsLTEuMS4waC91 dGlsL2RvZmlsZS5wbC5taXNzaW5nLXF1b3RlcwkyMDE4LTAzLTI3IDE1OjUwOjQxLjAwMDAwMDAw MCArMDIwMAotKysrIG9wZW5zc2wtMS4xLjBoL3V0aWwvZG9maWxlLnBsCTIwMTgtMDQtMDMgMTE6 NTk6MzYuNzQyMDkxNzQyICswMjAwCi1AQCAtOTksOSArOTksOSBAQCBwYWNrYWdlIG1haW47Ci0g IyBUaGlzIGFkZHMgcXVvdGVzICgiKSBhcm91bmQgdGhlIGdpdmVuIHN0cmluZywgYW5kIGVzY2Fw ZXMgYW55ICQsIEAsIFwsCi0gIyAiIGFuZCAnIGJ5IHByZXBlbmRpbmcgYSBcIHRvIHRoZW0uCi0g c3ViIHF1b3RpZnkxIHsKLS0gICAgbXkgJHMgPSBteSAkb3JpZyA9IHNoaWZ0IEBfOwotKyAgICBt eSAkcyA9IHNoaWZ0IEBfOwotICAgICAkcyA9fiBzLyhbXCRcQFxcIiddKS9cXCQxL2c7Ci0tICAg ICRzIG5lICRvcmlnIHx8ICRzID1+IC9ccy8gPyAnIicuJHMuJyInIDogJHM7Ci0rICAgICciJy4k cy4nIic7Ci0gfQotIAotICMgcXVvdGlmeV9sIExJU1QKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEu MS4wLXNlY3VyZS1nZXRlbnYucGF0Y2ggYi9vcGVuc3NsLTEuMS4wLXNlY3VyZS1nZXRlbnYucGF0 Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYjhhZTYuLjAwMDAwMDAKLS0tIGEv b3BlbnNzbC0xLjEuMC1zZWN1cmUtZ2V0ZW52LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTM5 ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBnL2NyeXB0by9jb25mL2NvbmZfYXBpLmMu c2VjdXJlLWdldGVudiBvcGVuc3NsLTEuMS4wZy9jcnlwdG8vY29uZi9jb25mX2FwaS5jCi0tLS0g b3BlbnNzbC0xLjEuMGcvY3J5cHRvL2NvbmYvY29uZl9hcGkuYy5zZWN1cmUtZ2V0ZW52CTIwMTct MTEtMDIgMTU6Mjk6MDIuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjEuMGcvY3J5cHRv L2NvbmYvY29uZl9hcGkuYwkyMDE3LTExLTAzIDE2OjEyOjMxLjgyNjI2NTMyMyArMDEwMAotQEAg LTksNiArOSw4IEBACi0gCi0gLyogUGFydCBvZiB0aGUgY29kZSBpbiBoZXJlIHdhcyBvcmlnaW5h bGx5IGluIGNvbmYuYywgd2hpY2ggaXMgbm93IHJlbW92ZWQgKi8KLSAKLSsvKiBmb3Igc2VjdXJl X2dldGVudiAqLwotKyNkZWZpbmUgX0dOVV9TT1VSQ0UKLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0g I2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2NvbmYuaD4KLUBAIC04Miw3 ICs4NCw3IEBAIGNoYXIgKl9DT05GX2dldF9zdHJpbmcoY29uc3QgQ09ORiAqY29uZiwKLSAgICAg ICAgICAgICBpZiAodiAhPSBOVUxMKQotICAgICAgICAgICAgICAgICByZXR1cm4gKHYtPnZhbHVl KTsKLSAgICAgICAgICAgICBpZiAoc3RyY21wKHNlY3Rpb24sICJFTlYiKSA9PSAwKSB7Ci0tICAg ICAgICAgICAgICAgIHAgPSBnZXRlbnYobmFtZSk7Ci0rICAgICAgICAgICAgICAgIHAgPSBzZWN1 cmVfZ2V0ZW52KG5hbWUpOwotICAgICAgICAgICAgICAgICBpZiAocCAhPSBOVUxMKQotICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIChwKTsKLSAgICAgICAgICAgICB9Ci1AQCAtOTUsNyArOTcs NyBAQCBjaGFyICpfQ09ORl9nZXRfc3RyaW5nKGNvbnN0IENPTkYgKmNvbmYsCi0gICAgICAgICBl bHNlCi0gICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKLSAgICAgfSBlbHNlCi0tICAgICAgICBy ZXR1cm4gKGdldGVudihuYW1lKSk7Ci0rICAgICAgICByZXR1cm4gKHNlY3VyZV9nZXRlbnYobmFt ZSkpOwotIH0KLSAKLSBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb25mX3ZhbHVlX2hhc2goY29uc3Qg Q09ORl9WQUxVRSAqdikKLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBnL2NyeXB0by9jb25mL2NvbmZf bW9kLmMuc2VjdXJlLWdldGVudiBvcGVuc3NsLTEuMS4wZy9jcnlwdG8vY29uZi9jb25mX21vZC5j Ci0tLS0gb3BlbnNzbC0xLjEuMGcvY3J5cHRvL2NvbmYvY29uZl9tb2QuYy5zZWN1cmUtZ2V0ZW52 CTIwMTctMTEtMDIgMTU6Mjk6MDIuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjEuMGcv Y3J5cHRvL2NvbmYvY29uZl9tb2QuYwkyMDE3LTExLTAzIDE2OjEyOjMxLjgyNzI2NTM0NyArMDEw MAotQEAgLTcsNiArNyw4IEBACi0gICogaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL2xp Y2Vuc2UuaHRtbAotICAqLwotIAotKy8qIGZvciBzZWN1cmVfZ2V0ZW52ICovCi0rI2RlZmluZSBf R05VX1NPVVJDRQotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxjdHlwZS5oPgotICNp bmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotQEAgLTQ3OCw3ICs0ODAsNyBAQCBjaGFyICpDT05G X2dldDFfZGVmYXVsdF9jb25maWdfZmlsZSh2b2lkCi0gICAgIGNoYXIgKmZpbGU7Ci0gICAgIGlu dCBsZW47Ci0gCi0tICAgIGZpbGUgPSBnZXRlbnYoIk9QRU5TU0xfQ09ORiIpOwotKyAgICBmaWxl ID0gc2VjdXJlX2dldGVudigiT1BFTlNTTF9DT05GIik7Ci0gICAgIGlmIChmaWxlKQotICAgICAg ICAgcmV0dXJuIE9QRU5TU0xfc3RyZHVwKGZpbGUpOwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjEu MGcvY3J5cHRvL2VuZ2luZS9lbmdfbGlzdC5jLnNlY3VyZS1nZXRlbnYgb3BlbnNzbC0xLjEuMGcv Y3J5cHRvL2VuZ2luZS9lbmdfbGlzdC5jCi0tLS0gb3BlbnNzbC0xLjEuMGcvY3J5cHRvL2VuZ2lu ZS9lbmdfbGlzdC5jLnNlY3VyZS1nZXRlbnYJMjAxNy0xMS0wMiAxNToyOTowMy4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMS4wZy9jcnlwdG8vZW5naW5lL2VuZ19saXN0LmMJMjAxNy0x MS0wMyAxNjoxMjozMS44MjcyNjUzNDcgKzAxMDAKLUBAIC0xMyw2ICsxMyw4IEBACi0gICogU1VO IE1JQ1JPU1lTVEVNUywgSU5DLiwgYW5kIGNvbnRyaWJ1dGVkIHRvIHRoZSBPcGVuU1NMIHByb2pl Y3QuCi0gICovCi0gCi0rLyogZm9yIHNlY3VyZV9nZXRlbnYgKi8KLSsjZGVmaW5lIF9HTlVfU09V UkNFCi0gI2luY2x1ZGUgImVuZ19pbnQuaCIKLSAKLSAvKgotQEAgLTMyMiw3ICszMjQsNyBAQCBF TkdJTkUgKkVOR0lORV9ieV9pZChjb25zdCBjaGFyICppZCkKLSAgICAgICogUHJldmVudCBpbmZp bml0ZSByZWN1cnNpb24gaWYgd2UncmUgbG9va2luZyBmb3IgdGhlIGR5bmFtaWMgZW5naW5lLgot ICAgICAgKi8KLSAgICAgaWYgKHN0cmNtcChpZCwgImR5bmFtaWMiKSkgewotLSAgICAgICAgaWYg KChsb2FkX2RpciA9IGdldGVudigiT1BFTlNTTF9FTkdJTkVTIikpID09IDApCi0rICAgICAgICBp ZiAoKGxvYWRfZGlyID0gc2VjdXJlX2dldGVudigiT1BFTlNTTF9FTkdJTkVTIikpID09IDApCi0g ICAgICAgICAgICAgbG9hZF9kaXIgPSBFTkdJTkVTRElSOwotICAgICAgICAgaXRlcmF0b3IgPSBF TkdJTkVfYnlfaWQoImR5bmFtaWMiKTsKLSAgICAgICAgIGlmICghaXRlcmF0b3IgfHwgIUVOR0lO RV9jdHJsX2NtZF9zdHJpbmcoaXRlcmF0b3IsICJJRCIsIGlkLCAwKSB8fAotZGlmZiAtdXAgb3Bl bnNzbC0xLjEuMGcvY3J5cHRvL3JhbmQvcmFuZGZpbGUuYy5zZWN1cmUtZ2V0ZW52IG9wZW5zc2wt MS4xLjBnL2NyeXB0by9yYW5kL3JhbmRmaWxlLmMKLS0tLSBvcGVuc3NsLTEuMS4wZy9jcnlwdG8v cmFuZC9yYW5kZmlsZS5jLnNlY3VyZS1nZXRlbnYJMjAxNy0xMS0wMiAxNToyOTowMy4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMS4wZy9jcnlwdG8vcmFuZC9yYW5kZmlsZS5jCTIwMTct MTEtMDMgMTY6MTI6MzEuODI3MjY1MzQ3ICswMTAwCi1AQCAtNyw2ICs3LDggQEAKLSAgKiBodHRw czovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2UvbGljZW5zZS5odG1sCi0gICovCi0gCi0rLyogZm9y IHNlY3VyZV9nZXRlbnYgKi8KLSsjZGVmaW5lIF9HTlVfU09VUkNFCi0gI2luY2x1ZGUgImludGVy bmFsL2NyeXB0bGliLmgiCi0gCi0gI2luY2x1ZGUgPGVycm5vLmg+Ci1AQCAtMzE3LDEwICszMTks MTAgQEAgY29uc3QgY2hhciAqUkFORF9maWxlX25hbWUoY2hhciAqYnVmLCBzaQotICAgICBpZiAo T1BFTlNTTF9pc3NldHVnaWQoKSAhPSAwKSB7Ci0gICAgICAgICB1c2VfcmFuZGZpbGUgPSAwOwot ICAgICB9IGVsc2UgewotLSAgICAgICAgcyA9IGdldGVudigiUkFOREZJTEUiKTsKLSsgICAgICAg IHMgPSBzZWN1cmVfZ2V0ZW52KCJSQU5ERklMRSIpOwotICAgICAgICAgaWYgKHMgPT0gTlVMTCB8 fCAqcyA9PSAnXDAnKSB7Ci0gICAgICAgICAgICAgdXNlX3JhbmRmaWxlID0gMDsKLS0gICAgICAg ICAgICBzID0gZ2V0ZW52KCJIT01FIik7Ci0rICAgICAgICAgICAgcyA9IHNlY3VyZV9nZXRlbnYo IkhPTUUiKTsKLSAgICAgICAgIH0KLSAgICAgfQotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0x LjEuMGcvY3J5cHRvL3g1MDkvYnlfZGlyLmMuc2VjdXJlLWdldGVudiBvcGVuc3NsLTEuMS4wZy9j cnlwdG8veDUwOS9ieV9kaXIuYwotLS0tIG9wZW5zc2wtMS4xLjBnL2NyeXB0by94NTA5L2J5X2Rp ci5jLnNlY3VyZS1nZXRlbnYJMjAxNy0xMS0wMiAxNToyOTowNC4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMS4wZy9jcnlwdG8veDUwOS9ieV9kaXIuYwkyMDE3LTExLTAzIDE2OjEyOjMx LjgyNzI2NTM0NyArMDEwMAotQEAgLTcsNiArNyw4IEBACi0gICogaHR0cHM6Ly93d3cub3BlbnNz bC5vcmcvc291cmNlL2xpY2Vuc2UuaHRtbAotICAqLwotIAotKy8qIGZvciBzZWN1cmVfZ2V0ZW52 ICovCi0rI2RlZmluZSBfR05VX1NPVVJDRQotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRl IDx0aW1lLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci1AQCAtNzgsNyArODAsNyBAQCBzdGF0aWMg aW50IGRpcl9jdHJsKFg1MDlfTE9PS1VQICpjdHgsIGluCi0gICAgIHN3aXRjaCAoY21kKSB7Ci0g ICAgIGNhc2UgWDUwOV9MX0FERF9ESVI6Ci0gICAgICAgICBpZiAoYXJnbCA9PSBYNTA5X0ZJTEVU WVBFX0RFRkFVTFQpIHsKLS0gICAgICAgICAgICBkaXIgPSAoY2hhciAqKWdldGVudihYNTA5X2dl dF9kZWZhdWx0X2NlcnRfZGlyX2VudigpKTsKLSsgICAgICAgICAgICBkaXIgPSAoY2hhciAqKXNl Y3VyZV9nZXRlbnYoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2Rpcl9lbnYoKSk7Ci0gICAgICAgICAg ICAgaWYgKGRpcikKLSAgICAgICAgICAgICAgICAgcmV0ID0gYWRkX2NlcnRfZGlyKGxkLCBkaXIs IFg1MDlfRklMRVRZUEVfUEVNKTsKLSAgICAgICAgICAgICBlbHNlCi1kaWZmIC11cCBvcGVuc3Ns LTEuMS4wZy9jcnlwdG8veDUwOS9ieV9maWxlLmMuc2VjdXJlLWdldGVudiBvcGVuc3NsLTEuMS4w Zy9jcnlwdG8veDUwOS9ieV9maWxlLmMKLS0tLSBvcGVuc3NsLTEuMS4wZy9jcnlwdG8veDUwOS9i eV9maWxlLmMuc2VjdXJlLWdldGVudgkyMDE3LTExLTAyIDE1OjI5OjA0LjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4xLjBnL2NyeXB0by94NTA5L2J5X2ZpbGUuYwkyMDE3LTExLTAzIDE2 OjE0OjEzLjIzMDY0OTY4NiArMDEwMAotQEAgLTcsNiArNyw4IEBACi0gICogaHR0cHM6Ly93d3cu b3BlbnNzbC5vcmcvc291cmNlL2xpY2Vuc2UuaHRtbAotICAqLwotIAotKy8qIGZvciBzZWN1cmVf Z2V0ZW52ICovCi0rI2RlZmluZSBfR05VX1NPVVJDRQotICNpbmNsdWRlIDxzdGRpby5oPgotICNp bmNsdWRlIDx0aW1lLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci1AQCAtNDcsNyArNDksNyBAQCBz dGF0aWMgaW50IGJ5X2ZpbGVfY3RybChYNTA5X0xPT0tVUCAqY3R4Ci0gICAgIHN3aXRjaCAoY21k KSB7Ci0gICAgIGNhc2UgWDUwOV9MX0ZJTEVfTE9BRDoKLSAgICAgICAgIGlmIChhcmdsID09IFg1 MDlfRklMRVRZUEVfREVGQVVMVCkgewotLSAgICAgICAgICAgIGZpbGUgPSBnZXRlbnYoWDUwOV9n ZXRfZGVmYXVsdF9jZXJ0X2ZpbGVfZW52KCkpOwotKyAgICAgICAgICAgIGZpbGUgPSBzZWN1cmVf Z2V0ZW52KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlX2VudigpKTsKLSAgICAgICAgICAgICBp ZiAoZmlsZSkKLSAgICAgICAgICAgICAgICAgb2sgPSAoWDUwOV9sb2FkX2NlcnRfY3JsX2ZpbGUo Y3R4LCBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBYNTA5X0ZJTEVUWVBFX1BFTSkgIT0gMCk7CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjEuMC1z aWxlbnQtcm5kLXdyaXRlLnBhdGNoIGIvb3BlbnNzbC0xLjEuMC1zaWxlbnQtcm5kLXdyaXRlLnBh dGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTQxMzdjLi4wMDAwMDAwCi0tLSBh L29wZW5zc2wtMS4xLjAtc2lsZW50LXJuZC13cml0ZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0x LDI0ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4xLjBoL2FwcHMvYXBwX3JhbmQuYy5zaWxl bnQtcm5kLXdyaXRlIG9wZW5zc2wtMS4xLjBoL2FwcHMvYXBwX3JhbmQuYwotLS0tIG9wZW5zc2wt MS4xLjBoL2FwcHMvYXBwX3JhbmQuYy5zaWxlbnQtcm5kLXdyaXRlCTIwMTgtMDMtMjcgMTU6NTA6 MzcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjEuMGgvYXBwcy9hcHBfcmFuZC5jCTIw MTgtMDMtMjkgMTU6Mjc6MjQuNTk3ODkxMDkxICswMjAwCi1AQCAtOTEsNiArOTEsNyBAQCBsb25n IGFwcF9SQU5EX2xvYWRfZmlsZXMoY2hhciAqbmFtZSkKLSBpbnQgYXBwX1JBTkRfd3JpdGVfZmls ZShjb25zdCBjaGFyICpmaWxlKQotIHsKLSAgICAgY2hhciBidWZmZXJbMjAwXTsKLSsgICAgY29u c3QgY2hhciAqb3JpZ2ZpbGUgPSBmaWxlOwotIAotICAgICBpZiAoZWdkc29ja2V0IHx8ICFzZWVk ZWQpCi0gICAgICAgICAvKgotQEAgLTEwMyw4ICsxMDQsMTAgQEAgaW50IGFwcF9SQU5EX3dyaXRl X2ZpbGUoY29uc3QgY2hhciAqZmlsZQotICAgICBpZiAoZmlsZSA9PSBOVUxMKQotICAgICAgICAg ZmlsZSA9IFJBTkRfZmlsZV9uYW1lKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotICAgICBpZiAo ZmlsZSA9PSBOVUxMIHx8ICFSQU5EX3dyaXRlX2ZpbGUoZmlsZSkpIHsKLS0gICAgICAgIEJJT19w cmludGYoYmlvX2VyciwgInVuYWJsZSB0byB3cml0ZSAncmFuZG9tIHN0YXRlJ1xuIik7Ci0tICAg ICAgICByZXR1cm4gMDsKLSsgICAgICAgIGlmIChvcmlnZmlsZSAhPSBOVUxMKSB7Ci0rICAgICAg ICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCAidW5hYmxlIHRvIHdyaXRlICdyYW5kb20gc3RhdGUn XG4iKTsKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIH0KLSAgICAgfQotICAgICBy ZXR1cm4gMTsKLSB9CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjEuMC1zeXN0ZW0tY2lwaGVybGlz dC5wYXRjaCBiL29wZW5zc2wtMS4xLjAtc3lzdGVtLWNpcGhlcmxpc3QucGF0Y2gKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNjMxNjIuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjEu MC1zeXN0ZW0tY2lwaGVybGlzdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMxNyArMCwwIEBA Ci1kaWZmIC11cCBvcGVuc3NsLTEuMS4wZS9Db25maWd1cmF0aW9ucy91bml4LU1ha2VmaWxlLnRt cGwuc3lzdGVtLWNpcGhlcmxpc3Qgb3BlbnNzbC0xLjEuMGUvQ29uZmlndXJhdGlvbnMvdW5peC1N YWtlZmlsZS50bXBsCi0tLS0gb3BlbnNzbC0xLjEuMGUvQ29uZmlndXJhdGlvbnMvdW5peC1NYWtl ZmlsZS50bXBsLnN5c3RlbS1jaXBoZXJsaXN0CTIwMTctMDItMTYgMTY6MTU6MzguNjU4OTMxNDEz ICswMTAwCi0rKysgb3BlbnNzbC0xLjEuMGUvQ29uZmlndXJhdGlvbnMvdW5peC1NYWtlZmlsZS50 bXBsCTIwMTctMDItMTYgMTY6MTU6MzguNjc1OTMxODA2ICswMTAwCi1AQCAtMTYxLDYgKzE2MSwx MCBAQCBNQU5ESVI9JChJTlNUQUxMVE9QKS9zaGFyZS9tYW4KLSBET0NESVI9JChJTlNUQUxMVE9Q KS9zaGFyZS9kb2MvJChCQVNFTkFNRSkKLSBIVE1MRElSPSQoRE9DRElSKS9odG1sCi0gCi0rey0g b3V0cHV0X29mZigpIGlmICRjb25maWd7c3lzdGVtX2NpcGhlcnNfZmlsZX0gZXEgIiI7ICIiIC19 Ci0rU1lTVEVNX0NJUEhFUlNfRklMRV9ERUZJTkU9LURTWVNURU1fQ0lQSEVSU19GSUxFPSJcInst ICRjb25maWd7c3lzdGVtX2NpcGhlcnNfZmlsZX0gLX1cIiIKLSt7LSBvdXRwdXRfb24oKSBpZiAk Y29uZmlne3N5c3RlbV9jaXBoZXJzX2ZpbGV9IGVxICIiOyAiIiAtfQotKwotICMgTUFOU1VGRklY IGlzIGZvciB0aGUgYmVuZWZpdCBvZiBhbnlvbmUgd2hvIG1heSB3YW50IHRvIGhhdmUgYSBzdWZm aXgKLSAjIGFwcGVuZGVkIGFmdGVyIHRoZSBtYW5wYWdlIGZpbGUgc2VjdGlvbiBudW1iZXIuICAi c3NsIiBpcyBwb3B1bGFyLAotICMgcmVzdWx0aW5nIGluIGZpbGVzIHN1Y2ggYXMgY29uZmlnLjVz c2wgcmF0aGVyIHRoYW4gY29uZmlnLjUuCi1AQCAtMTcxLDcgKzE3NSw3IEBAIEhUTUxTVUZGSVg9 aHRtbAotIAotIENST1NTX0NPTVBJTEU9IHstICRjb25maWd7Y3Jvc3NfY29tcGlsZV9wcmVmaXh9 IC19Ci0gQ0M9ICQoQ1JPU1NfQ09NUElMRSl7LSAkdGFyZ2V0e2NjfSAtfQotLUNGTEFHUz17LSBv dXIgJGNmbGFnczIgPSBqb2luKCIgIiwobWFwIHsgIi1EIi4kX30gQHskdGFyZ2V0e2RlZmluZXN9 fSwgQHskY29uZmlne2RlZmluZXN9fSksIi1ET1BFTlNTTERJUj1cIlxcXCJcJChPUEVOU1NMRElS KVxcXCJcIiIsIi1ERU5HSU5FU0RJUj1cIlxcXCJcJChFTkdJTkVTRElSKVxcXCJcIiIpIC19IHst ICR0YXJnZXR7Y2ZsYWdzfSAtfSB7LSAkY29uZmlne2NmbGFnc30gLX0KLStDRkxBR1M9ey0gb3Vy ICRjZmxhZ3MyID0gam9pbigiICIsKG1hcCB7ICItRCIuJF99IEB7JHRhcmdldHtkZWZpbmVzfX0s IEB7JGNvbmZpZ3tkZWZpbmVzfX0pLCJcJChTWVNURU1fQ0lQSEVSU19GSUxFX0RFRklORSkiLCIt RE9QRU5TU0xESVI9XCJcXFwiXCQoT1BFTlNTTERJUilcXFwiXCIiLCItREVOR0lORVNESVI9XCJc XFwiXCQoRU5HSU5FU0RJUilcXFwiXCIiKSAtfSB7LSAkdGFyZ2V0e2NmbGFnc30gLX0gey0gJGNv bmZpZ3tjZmxhZ3N9IC19Ci0gQ0ZMQUdTX1E9ey0gJGNmbGFnczIgPX4gc3woW1xcIl0pfFxcJDF8 ZzsgJGNmbGFnczIgLX0gey0gJGNvbmZpZ3tjZmxhZ3N9IC19Ci0gTERGTEFHUz0gey0gJHRhcmdl dHtsZmxhZ3N9IC19Ci0gUExJQl9MREZMQUdTPSB7LSAkdGFyZ2V0e3BsaWJfbGZsYWdzfSAtfQot ZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGUvQ29uZmlndXJlLnN5c3RlbS1jaXBoZXJsaXN0IG9wZW5z c2wtMS4xLjBlL0NvbmZpZ3VyZQotLS0tIG9wZW5zc2wtMS4xLjBlL0NvbmZpZ3VyZS5zeXN0ZW0t Y2lwaGVybGlzdAkyMDE3LTAyLTE2IDEyOjU4OjIwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4xLjBlL0NvbmZpZ3VyZQkyMDE3LTAyLTE2IDE2OjE1OjM4LjY3OTkzMTg5OSArMDEwMAot QEAgLTE4LDcgKzE4LDcgQEAgdXNlIGlmICReTyBuZSAiVk1TIiwgJ0ZpbGU6Okdsb2InID0+IHF3 LwotIAotICMgc2VlIElOU1RBTEwgZm9yIGluc3RydWN0aW9ucy4KLSAKLS1teSAkdXNhZ2U9IlVz YWdlOiBDb25maWd1cmUgW25vLTxjaXBoZXI+IC4uLl0gW2VuYWJsZS08Y2lwaGVyPiAuLi5dIFst RHh4eF0gWy1seHh4XSBbLUx4eHhdIFstZnh4eF0gWy1LeHh4XSBbbm8taHcteHh4fG5vLWh3XSBb W25vLV10aHJlYWRzXSBbW25vLV1zaGFyZWRdIFtbbm8tXXpsaWJ8emxpYi1keW5hbWljXSBbbm8t YXNtXSBbbm8tZHNvXSBbbm8tZWdkXSBbc2N0cF0gWzM4Nl0gWy0tcHJlZml4PURJUl0gWy0tb3Bl bnNzbGRpcj1PUEVOU1NMRElSXSBbLS13aXRoLXh4eFs9dnZ2XV0gWy0tY29uZmlnPUZJTEVdIG9z L2NvbXBpbGVyWzpmbGFnc11cbiI7Ci0rbXkgJHVzYWdlPSJVc2FnZTogQ29uZmlndXJlIFtuby08 Y2lwaGVyPiAuLi5dIFtlbmFibGUtPGNpcGhlcj4gLi4uXSBbLUR4eHhdIFstbHh4eF0gWy1MeHh4 XSBbLWZ4eHhdIFstS3h4eF0gW25vLWh3LXh4eHxuby1od10gW1tuby1ddGhyZWFkc10gW1tuby1d c2hhcmVkXSBbW25vLV16bGlifHpsaWItZHluYW1pY10gW25vLWFzbV0gW25vLWRzb10gW25vLWVn ZF0gW3NjdHBdIFszODZdIFstLXByZWZpeD1ESVJdIFstLW9wZW5zc2xkaXI9T1BFTlNTTERJUl0g Wy0tc3lzdGVtLWNpcGhlcnMtZmlsZT1TWVNURU1DSVBIRVJGSUxFXSBbLS13aXRoLXh4eFs9dnZ2 XV0gWy0tY29uZmlnPUZJTEVdIG9zL2NvbXBpbGVyWzpmbGFnc11cbiI7Ci0gCi0gIyBPcHRpb25z OgotICMKLUBAIC0zNSw2ICszNSw5IEBAIG15ICR1c2FnZT0iVXNhZ2U6IENvbmZpZ3VyZSBbbm8t PGNpcGhlcj4KLSAjICAgICAgICAgICAgICAgVGhpcyBiZWNvbWVzIHRoZSB2YWx1ZSBvZiBPUEVO U1NMRElSIGluIE1ha2VmaWxlIGFuZCBpbiBDLgotICMgICAgICAgICAgICAgICAoRGVmYXVsdDog UFJFRklYL3NzbCkKLSAjCi0rIyAtLXN5c3RlbS1jaXBoZXJzLWZpbGUgIEEgZmlsZSB0byByZWFk IGNpcGhlciBzdHJpbmcgZnJvbSB3aGVuIHRoZSBQUk9GSUxFPVNZU1RFTQotKyMJCWNpcGhlciBp cyBzcGVjaWZpZWQgKGRlZmF1bHQpLgotKyMKLSAjIC0tY3Jvc3MtY29tcGlsZS1wcmVmaXggQWRk IHNwZWNpZmllZCBwcmVmaXggdG8gYmludXRpbHMgY29tcG9uZW50cy4KLSAjCi0gIyAtLWFwaSAg ICAgICAgIE9uZSBvZiAwLjkuOCwgMS4wLjAgb3IgMS4xLjAuICBEbyBub3QgY29tcGlsZSBzdXBw b3J0IGZvcgotQEAgLTI5Myw2ICsyOTYsNyBAQCAkY29uZmlne29wZW5zc2xkaXJ9PSIiOwotICRj b25maWd7cHJvY2Vzc29yfT0iIjsKLSAkY29uZmlne2xpYmRpcn09IiI7Ci0gJGNvbmZpZ3tjcm9z c19jb21waWxlX3ByZWZpeH09IiI7Ci0rJGNvbmZpZ3tzeXN0ZW1fY2lwaGVyc19maWxlfT0iIjsK LSAkY29uZmlne2ZpcHNsaWJkaXJ9PSIvdXNyL2xvY2FsL3NzbC9maXBzLTIuMC9saWIvIjsKLSBt eSAkbm9maXBzY2FuaXN0ZXJjaGVjaz0wOwotICRjb25maWd7YmFzZWFkZHJ9PSIweEZCMDAwMDAi OwotQEAgLTcxOCw2ICs3MjIsMTAgQEAgd2hpbGUgKEBhcmd2Y29weSkKLSAJCQl7Ci0gCQkJJGNv bmZpZ3tiYXNlYWRkcn09IiQxIjsKLSAJCQl9Ci0rCQllbHNpZiAoL14tLXN5c3RlbS1jaXBoZXJz LWZpbGU9KC4qKSQvKQotKwkJCXsKLSsJCQkkY29uZmlne3N5c3RlbV9jaXBoZXJzX2ZpbGV9PSQx OwotKwkJCX0KLSAJCWVsc2lmICgvXi0tY3Jvc3MtY29tcGlsZS1wcmVmaXg9KC4qKSQvKQotIAkJ CXsKLSAJCQkkY29uZmlne2Nyb3NzX2NvbXBpbGVfcHJlZml4fT0kMTsKLUBAIC04NTEsNiArODU5 LDggQEAgaWYgKCR0YXJnZXQgPX4gbS9eQ3lnV2luMzIoLS4qKSQvKSB7Ci0gICAgICR0YXJnZXQg PSAiQ3lnd2luIi4kMTsKLSB9Ci0gCi0rY2hvcCAkY29uZmlne3N5c3RlbV9jaXBoZXJzX2ZpbGV9 IGlmICRjb25maWd7c3lzdGVtX2NpcGhlcnNfZmlsZX0gPX4gL1wvJC87Ci0rCi0gZm9yZWFjaCAo c29ydCAoa2V5cyAlZGlzYWJsZWQpKQotIAl7Ci0gCSRjb25maWd7b3B0aW9uc30gLj0gIiBuby0k XyI7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMS4wZS9kb2MvYXBwcy9jaXBoZXJzLnBvZC5zeXN0ZW0t Y2lwaGVybGlzdCBvcGVuc3NsLTEuMS4wZS9kb2MvYXBwcy9jaXBoZXJzLnBvZAotLS0tIG9wZW5z c2wtMS4xLjBlL2RvYy9hcHBzL2NpcGhlcnMucG9kLnN5c3RlbS1jaXBoZXJsaXN0CTIwMTctMDIt MTYgMTI6NTg6MjIuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjEuMGUvZG9jL2FwcHMv Y2lwaGVycy5wb2QJMjAxNy0wMi0xNiAxNjozNzoxNC4wNDMyMTk5NTMgKzAxMDAKLUBAIC0xODEs NiArMTgxLDE1IEBAIEFzIG9mIE9wZW5TU0wgMS4wLjAsIHRoZSBCPEFMTD4gY2lwaGVyIHMKLSAK LSBUaGUgY2lwaGVyIHN1aXRlcyBub3QgZW5hYmxlZCBieSBCPEFMTD4sIGN1cnJlbnRseSBCPGVO VUxMPi4KLSAKLSs9aXRlbSBCPFBST0ZJTEU9U1lTVEVNPgotKwotK1RoZSBsaXN0IG9mIGVuYWJs ZWQgY2lwaGVyIHN1aXRlcyB3aWxsIGJlIGxvYWRlZCBmcm9tIHRoZSBzeXN0ZW0gY3J5cHRvIHBv bGljeQotK2NvbmZpZ3VyYXRpb24gZmlsZSBCPC9ldGMvY3J5cHRvLXBvbGljaWVzL2JhY2stZW5k cy9vcGVuc3NsLmNvbmZpZz4uCi0rU2VlIGFsc28gTDx1cGRhdGUtY3J5cHRvLXBvbGljaWVzKDgp Pi4KLStUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHVubGVzcyBhbiBhcHBsaWNhdGlvbiBl eHBsaWNpdGx5IHNldHMgYSBjaXBoZXIKLStsaXN0LiBJZiB1c2VkIGluIGEgY2lwaGVyIGxpc3Qg Y29uZmlndXJhdGlvbiB2YWx1ZSB0aGlzIHN0cmluZyBtdXN0IGJlIGF0IHRoZQotK2JlZ2lubmlu ZyBvZiB0aGUgY2lwaGVyIGxpc3QsIG90aGVyd2lzZSBpdCB3aWxsIG5vdCBiZSByZWNvZ25pemVk LgotKwotID1pdGVtIEI8SElHSD4KLSAKLSAiaGlnaCIgZW5jcnlwdGlvbiBjaXBoZXIgc3VpdGVz LiBUaGlzIGN1cnJlbnRseSBtZWFucyB0aG9zZSB3aXRoIGtleSBsZW5ndGhzCi1kaWZmIC11cCBv cGVuc3NsLTEuMS4wZS9pbmNsdWRlL29wZW5zc2wvc3NsLmguc3lzdGVtLWNpcGhlcmxpc3Qgb3Bl bnNzbC0xLjEuMGUvaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi0tLS0gb3BlbnNzbC0xLjEuMGUvaW5j bHVkZS9vcGVuc3NsL3NzbC5oLnN5c3RlbS1jaXBoZXJsaXN0CTIwMTctMDItMTYgMTI6NTg6MjMu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjEuMGUvaW5jbHVkZS9vcGVuc3NsL3NzbC5o CTIwMTctMDItMTYgMTY6MTU6MzguNjc2OTMxODMwICswMTAwCi1AQCAtMjAxLDYgKzIwMSwxMSBA QCBleHRlcm4gIkMiIHsKLSAgKiB0aHJvd2luZyBvdXQgYW5vbnltb3VzIGFuZCB1bmVuY3J5cHRl ZCBjaXBoZXJzdWl0ZXMhIChUaGUgbGF0dGVyIGFyZSBub3QKLSAgKiBhY3R1YWxseSBlbmFibGVk IGJ5IEFMTCwgYnV0ICJBTEw6UlNBIiB3b3VsZCBlbmFibGUgc29tZSBvZiB0aGVtLikKLSAgKi8K LSsjIGlmZGVmIFNZU1RFTV9DSVBIRVJTX0ZJTEUKLSsjICBkZWZpbmUgU1NMX1NZU1RFTV9ERUZB VUxUX0NJUEhFUl9MSVNUICJQUk9GSUxFPVNZU1RFTSIKLSsjIGVsc2UKLSsjICBkZWZpbmUgU1NM X1NZU1RFTV9ERUZBVUxUX0NJUEhFUl9MSVNUIFNTTF9ERUZBVUxUX0NJUEhFUl9MSVNUCi0rIyBl bmRpZgotIAotIC8qIFVzZWQgaW4gU1NMX3NldF9zaHV0ZG93bigpL1NTTF9nZXRfc2h1dGRvd24o KTsgKi8KLSAjIGRlZmluZSBTU0xfU0VOVF9TSFVURE9XTiAgICAgICAxCi1kaWZmIC11cCBvcGVu c3NsLTEuMS4wZS9zc2wvc3NsX2NpcGguYy5zeXN0ZW0tY2lwaGVybGlzdCBvcGVuc3NsLTEuMS4w ZS9zc2wvc3NsX2NpcGguYwotLS0tIG9wZW5zc2wtMS4xLjBlL3NzbC9zc2xfY2lwaC5jLnN5c3Rl bS1jaXBoZXJsaXN0CTIwMTctMDItMTYgMTI6NTg6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzbC0xLjEuMGUvc3NsL3NzbF9jaXBoLmMJMjAxNy0wMi0xNiAxNjoxNTozOC42OTE5MzIxNzcg KzAxMDAKLUBAIC0xMjg5LDYgKzEyODksNTAgQEAgc3RhdGljIGludCBjaGVja19zdWl0ZWJfY2lw aGVyX2xpc3QoY29ucwotIH0KLSAjZW5kaWYKLSAKLSsjaWZkZWYgU1lTVEVNX0NJUEhFUlNfRklM RQotK3N0YXRpYyBjaGFyICpsb2FkX3N5c3RlbV9zdHIoY29uc3QgY2hhciAqc3VmZml4KQotK3sK LSsgICAgRklMRSAqZnA7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyICpuZXdfcnVs ZXM7Ci0rICAgIHVuc2lnbmVkIGxlbiwgc2xlbjsKLSsKLSsgICAgZnAgPSBmb3BlbihTWVNURU1f Q0lQSEVSU19GSUxFLCAiciIpOwotKyAgICBpZiAoZnAgPT0gTlVMTCB8fCBmZ2V0cyhidWYsIHNp emVvZihidWYpLCBmcCkgPT0gTlVMTCkgewotKyAgICAgICAgLyogY2Fubm90IG9wZW4gb3IgZmls ZSBpcyBlbXB0eSAqLwotKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwg U1NMX0RFRkFVTFRfQ0lQSEVSX0xJU1QpOwotKyAgICB9Ci0rCi0rICAgIGlmIChmcCkKLSsgICAg ICAgIGZjbG9zZShmcCk7Ci0rCi0rICAgIHNsZW4gPSBzdHJsZW4oc3VmZml4KTsKLSsgICAgbGVu ID0gc3RybGVuKGJ1Zik7Ci0rCi0rICAgIGlmIChidWZbbGVuIC0gMV0gPT0gJ1xuJykgewotKyAg ICAgICAgbGVuLS07Ci0rICAgICAgICBidWZbbGVuXSA9IDA7Ci0rICAgIH0KLSsgICAgaWYgKGJ1 ZltsZW4gLSAxXSA9PSAnXHInKSB7Ci0rICAgICAgICBsZW4tLTsKLSsgICAgICAgIGJ1ZltsZW5d ID0gMDsKLSsgICAgfQotKwotKyAgICBuZXdfcnVsZXMgPSBPUEVOU1NMX21hbGxvYyhsZW4gKyBz bGVuICsgMSk7Ci0rICAgIGlmIChuZXdfcnVsZXMgPT0gMCkKLSsgICAgICAgIHJldHVybiBOVUxM OwotKwotKyAgICBtZW1jcHkobmV3X3J1bGVzLCBidWYsIGxlbik7Ci0rICAgIGlmIChzbGVuID4g MCkgewotKyAgICAgICAgbWVtY3B5KCZuZXdfcnVsZXNbbGVuXSwgc3VmZml4LCBzbGVuKTsKLSsg ICAgICAgIGxlbiArPSBzbGVuOwotKyAgICB9Ci0rICAgIG5ld19ydWxlc1tsZW5dID0gMDsKLSsK LSsgICAgcmV0dXJuIG5ld19ydWxlczsKLSt9Ci0rI2VuZGlmCi0rCi0gU1RBQ0tfT0YoU1NMX0NJ UEhFUikgKnNzbF9jcmVhdGVfY2lwaGVyX2xpc3QoY29uc3QgU1NMX01FVEhPRCAqc3NsX21ldGhv ZCwgU1RBQ0tfT0YoU1NMX0NJUEhFUikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqKmNpcGhlcl9saXN0LCBTVEFDS19PRihTU0xfQ0lQSEVSKQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqY2lwaGVyX2xpc3RfYnlf aWQsCi1AQCAtMTI5NiwxOSArMTM0MSwyOSBAQCBTVEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2Ny ZWF0ZV9jaXBoZXJfCi0gewotICAgICBpbnQgb2ssIG51bV9vZl9jaXBoZXJzLCBudW1fb2ZfYWxp YXNfbWF4LCBudW1fb2ZfZ3JvdXBfYWxpYXNlczsKLSAgICAgdWludDMyX3QgZGlzYWJsZWRfbWtl eSwgZGlzYWJsZWRfYXV0aCwgZGlzYWJsZWRfZW5jLCBkaXNhYmxlZF9tYWM7Ci0tICAgIFNUQUNL X09GKFNTTF9DSVBIRVIpICpjaXBoZXJzdGFjaywgKnRtcF9jaXBoZXJfbGlzdDsKLSsgICAgU1RB Q0tfT0YoU1NMX0NJUEhFUikgKmNpcGhlcnN0YWNrID0gTlVMTCwgKnRtcF9jaXBoZXJfbGlzdDsK LSAgICAgY29uc3QgY2hhciAqcnVsZV9wOwotICAgICBDSVBIRVJfT1JERVIgKmNvX2xpc3QgPSBO VUxMLCAqaGVhZCA9IE5VTEwsICp0YWlsID0gTlVMTCwgKmN1cnI7Ci0gICAgIGNvbnN0IFNTTF9D SVBIRVIgKipjYV9saXN0ID0gTlVMTDsKLSsjaWZkZWYgU1lTVEVNX0NJUEhFUlNfRklMRQotKyAg ICBjaGFyICpuZXdfcnVsZXMgPSBOVUxMOwotKwotKyAgICBpZiAocnVsZV9zdHIgIT0gTlVMTCAm JiBzdHJuY21wKHJ1bGVfc3RyLCAiUFJPRklMRT1TWVNURU0iLCAxNCkgPT0gMCkgewotKyAgICAg ICAgY2hhciAqcCA9IHJ1bGVfc3RyICsgMTQ7Ci0rICAgIAotKyAgICAgICAgbmV3X3J1bGVzID0g bG9hZF9zeXN0ZW1fc3RyKHApOwotKyAgICAgICAgcnVsZV9zdHIgPSBuZXdfcnVsZXM7Ci0rICAg IH0KLSsjZW5kaWYKLSAKLSAgICAgLyoKLSAgICAgICogUmV0dXJuIHdpdGggZXJyb3IgaWYgbm90 aGluZyB0byBkby4KLSAgICAgICovCi0gICAgIGlmIChydWxlX3N0ciA9PSBOVUxMIHx8IGNpcGhl cl9saXN0ID09IE5VTEwgfHwgY2lwaGVyX2xpc3RfYnlfaWQgPT0gTlVMTCkKLS0gICAgICAgIHJl dHVybiBOVUxMOwotKyAgICAgICAgZ290byBlbmQ7Ci0gI2lmbmRlZiBPUEVOU1NMX05PX0VDCi0g ICAgIGlmICghY2hlY2tfc3VpdGViX2NpcGhlcl9saXN0KHNzbF9tZXRob2QsIGMsICZydWxlX3N0 cikpCi0tICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgICAgIGdvdG8gZW5kOwotICNlbmRpZgot IAotICAgICAvKgotQEAgLTEzMzEsNyArMTM4Niw3IEBAIFNUQUNLX09GKFNTTF9DSVBIRVIpICpz c2xfY3JlYXRlX2NpcGhlcl8KLSAgICAgY29fbGlzdCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZigq Y29fbGlzdCkgKiBudW1fb2ZfY2lwaGVycyk7Ci0gICAgIGlmIChjb19saXN0ID09IE5VTEwpIHsK LSAgICAgICAgIFNTTGVycihTU0xfRl9TU0xfQ1JFQVRFX0NJUEhFUl9MSVNULCBFUlJfUl9NQUxM T0NfRkFJTFVSRSk7Ci0tICAgICAgICByZXR1cm4gKE5VTEwpOyAgICAgICAgICAvKiBGYWlsdXJl ICovCi0rICAgICAgICBnb3RvIGVuZDsKLSAgICAgfQotIAotICAgICBzc2xfY2lwaGVyX2NvbGxl Y3RfY2lwaGVycyhzc2xfbWV0aG9kLCBudW1fb2ZfY2lwaGVycywKLUBAIC0xNDAxLDggKzE0NTYs NyBAQCBTVEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2NyZWF0ZV9jaXBoZXJfCi0gICAgICAqIGlu IGZvcmNlIHdpdGhpbiBlYWNoIGNsYXNzCi0gICAgICAqLwotICAgICBpZiAoIXNzbF9jaXBoZXJf c3RyZW5ndGhfc29ydCgmaGVhZCwgJnRhaWwpKSB7Ci0tICAgICAgICBPUEVOU1NMX2ZyZWUoY29f bGlzdCk7Ci0tICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgICAgIGdvdG8gZW5kOwotICAgICB9 Ci0gCi0gICAgIC8qCi1AQCAtMTQ0Nyw5ICsxNTAxLDggQEAgU1RBQ0tfT0YoU1NMX0NJUEhFUikg KnNzbF9jcmVhdGVfY2lwaGVyXwotICAgICBudW1fb2ZfYWxpYXNfbWF4ID0gbnVtX29mX2NpcGhl cnMgKyBudW1fb2ZfZ3JvdXBfYWxpYXNlcyArIDE7Ci0gICAgIGNhX2xpc3QgPSBPUEVOU1NMX21h bGxvYyhzaXplb2YoKmNhX2xpc3QpICogbnVtX29mX2FsaWFzX21heCk7Ci0gICAgIGlmIChjYV9s aXN0ID09IE5VTEwpIHsKLS0gICAgICAgIE9QRU5TU0xfZnJlZShjb19saXN0KTsKLSAgICAgICAg IFNTTGVycihTU0xfRl9TU0xfQ1JFQVRFX0NJUEhFUl9MSVNULCBFUlJfUl9NQUxMT0NfRkFJTFVS RSk7Ci0tICAgICAgICByZXR1cm4gKE5VTEwpOyAgICAgICAgICAvKiBGYWlsdXJlICovCi0rICAg ICAgICBnb3RvIGVuZDsKLSAgICAgfQotICAgICBzc2xfY2lwaGVyX2NvbGxlY3RfYWxpYXNlcyhj YV9saXN0LCBudW1fb2ZfZ3JvdXBfYWxpYXNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGlzYWJsZWRfbWtleSwgZGlzYWJsZWRfYXV0aCwgZGlzYWJsZWRfZW5jLAotQEAgLTE0 NzUsOCArMTUyOCw3IEBAIFNUQUNLX09GKFNTTF9DSVBIRVIpICpzc2xfY3JlYXRlX2NpcGhlcl8K LSAgICAgT1BFTlNTTF9mcmVlKGNhX2xpc3QpOyAgICAgIC8qIE5vdCBuZWVkZWQgYW55bW9yZSAq LwotIAotICAgICBpZiAoIW9rKSB7ICAgICAgICAgICAgICAgICAgLyogUnVsZSBwcm9jZXNzaW5n IGZhaWx1cmUgKi8KLS0gICAgICAgIE9QRU5TU0xfZnJlZShjb19saXN0KTsKLS0gICAgICAgIHJl dHVybiAoTlVMTCk7Ci0rICAgICAgICBnb3RvIGVuZDsKLSAgICAgfQotIAotICAgICAvKgotQEAg LTE0ODQsOCArMTUzNiw3IEBAIFNUQUNLX09GKFNTTF9DSVBIRVIpICpzc2xfY3JlYXRlX2NpcGhl cl8KLSAgICAgICogaWYgd2UgY2Fubm90IGdldCBvbmUuCi0gICAgICAqLwotICAgICBpZiAoKGNp cGhlcnN0YWNrID0gc2tfU1NMX0NJUEhFUl9uZXdfbnVsbCgpKSA9PSBOVUxMKSB7Ci0tICAgICAg ICBPUEVOU1NMX2ZyZWUoY29fbGlzdCk7Ci0tICAgICAgICByZXR1cm4gKE5VTEwpOwotKyAgICAg ICAgZ290byBlbmQ7Ci0gICAgIH0KLSAKLSAgICAgLyoKLUBAIC0xNDk2LDIxICsxNTQ3LDIxIEBA IFNUQUNLX09GKFNTTF9DSVBIRVIpICpzc2xfY3JlYXRlX2NpcGhlcl8KLSAgICAgICAgIGlmIChj dXJyLT5hY3RpdmUKLSAgICAgICAgICAgICAmJiAoIUZJUFNfbW9kZSgpIHx8IGN1cnItPmNpcGhl ci0+YWxnb19zdHJlbmd0aCAmIFNTTF9GSVBTKSkgewotICAgICAgICAgICAgIGlmICghc2tfU1NM X0NJUEhFUl9wdXNoKGNpcGhlcnN0YWNrLCBjdXJyLT5jaXBoZXIpKSB7Ci0tICAgICAgICAgICAg ICAgIE9QRU5TU0xfZnJlZShjb19saXN0KTsKLSAgICAgICAgICAgICAgICAgc2tfU1NMX0NJUEhF Ul9mcmVlKGNpcGhlcnN0YWNrKTsKLS0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAg ICAgICAgICAgICAgIGNpcGhlcnN0YWNrID0gTlVMTDsKLSsgICAgICAgICAgICAgICAgZ290byBl bmQ7Ci0gICAgICAgICAgICAgfQotICNpZmRlZiBDSVBIRVJfREVCVUcKLSAgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIjwlcz5cbiIsIGN1cnItPmNpcGhlci0+bmFtZSk7Ci0gI2VuZGlmCi0g ICAgICAgICB9Ci0gICAgIH0KLS0gICAgT1BFTlNTTF9mcmVlKGNvX2xpc3QpOyAgICAgIC8qIE5v dCBuZWVkZWQgYW55IGxvbmdlciAqLwotIAotICAgICB0bXBfY2lwaGVyX2xpc3QgPSBza19TU0xf Q0lQSEVSX2R1cChjaXBoZXJzdGFjayk7Ci0gICAgIGlmICh0bXBfY2lwaGVyX2xpc3QgPT0gTlVM TCkgewotICAgICAgICAgc2tfU1NMX0NJUEhFUl9mcmVlKGNpcGhlcnN0YWNrKTsKLS0gICAgICAg IHJldHVybiBOVUxMOwotKyAgICAgICAgY2lwaGVyc3RhY2sgPSBOVUxMOwotKyAgICAgICAgZ290 byBlbmQ7Ci0gICAgIH0KLSAgICAgc2tfU1NMX0NJUEhFUl9mcmVlKCpjaXBoZXJfbGlzdCk7Ci0g ICAgICpjaXBoZXJfbGlzdCA9IGNpcGhlcnN0YWNrOwotQEAgLTE1MjAsNiArMTU3MSwxMiBAQCBT VEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2NyZWF0ZV9jaXBoZXJfCi0gICAgICh2b2lkKXNrX1NT TF9DSVBIRVJfc2V0X2NtcF9mdW5jKCpjaXBoZXJfbGlzdF9ieV9pZCwgc3NsX2NpcGhlcl9wdHJf aWRfY21wKTsKLSAKLSAgICAgc2tfU1NMX0NJUEhFUl9zb3J0KCpjaXBoZXJfbGlzdF9ieV9pZCk7 Ci0rCi0rIGVuZDoKLSsgICAgT1BFTlNTTF9mcmVlKGNvX2xpc3QpOwotKyNpZmRlZiBTWVNURU1f Q0lQSEVSU19GSUxFCi0rICAgIE9QRU5TU0xfZnJlZShuZXdfcnVsZXMpOwotKyNlbmRpZgotICAg ICByZXR1cm4gKGNpcGhlcnN0YWNrKTsKLSB9Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMS4wZS9z c2wvc3NsX2xpYi5jLnN5c3RlbS1jaXBoZXJsaXN0IG9wZW5zc2wtMS4xLjBlL3NzbC9zc2xfbGli LmMKLS0tLSBvcGVuc3NsLTEuMS4wZS9zc2wvc3NsX2xpYi5jLnN5c3RlbS1jaXBoZXJsaXN0CTIw MTctMDItMTYgMTY6MTU6MzguNjczOTMxNzYwICswMTAwCi0rKysgb3BlbnNzbC0xLjEuMGUvc3Ns L3NzbF9saWIuYwkyMDE3LTAyLTE2IDE2OjE1OjM4LjY5MjkzMjIwMCArMDEwMAotQEAgLTUwOSw3 ICs1MDksNyBAQCBpbnQgU1NMX0NUWF9zZXRfc3NsX3ZlcnNpb24oU1NMX0NUWCAqY3R4Ci0gCi0g ICAgIHNrID0gc3NsX2NyZWF0ZV9jaXBoZXJfbGlzdChjdHgtPm1ldGhvZCwgJihjdHgtPmNpcGhl cl9saXN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoY3R4LT5jaXBoZXJf bGlzdF9ieV9pZCksCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfREVGQVVM VF9DSVBIRVJfTElTVCwgY3R4LT5jZXJ0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNTTF9TWVNURU1fREVGQVVMVF9DSVBIRVJfTElTVCwgY3R4LT5jZXJ0KTsKLSAgICAgaWYg KChzayA9PSBOVUxMKSB8fCAoc2tfU1NMX0NJUEhFUl9udW0oc2spIDw9IDApKSB7Ci0gICAgICAg ICBTU0xlcnIoU1NMX0ZfU1NMX0NUWF9TRVRfU1NMX1ZFUlNJT04sIFNTTF9SX1NTTF9MSUJSQVJZ X0hBU19OT19DSVBIRVJTKTsKLSAgICAgICAgIHJldHVybiAoMCk7Ci1AQCAtMjQwMyw3ICsyNDAz LDcgQEAgU1NMX0NUWCAqU1NMX0NUWF9uZXcoY29uc3QgU1NMX01FVEhPRCAqbQotICNlbmRpZgot ICAgICBpZiAoIXNzbF9jcmVhdGVfY2lwaGVyX2xpc3QocmV0LT5tZXRob2QsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmcmV0LT5jaXBoZXJfbGlzdCwgJnJldC0+Y2lwaGVyX2xp c3RfYnlfaWQsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfREVGQVVMVF9D SVBIRVJfTElTVCwgcmV0LT5jZXJ0KQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U1NMX1NZU1RFTV9ERUZBVUxUX0NJUEhFUl9MSVNULCByZXQtPmNlcnQpCi0gICAgICAgICB8fCBz a19TU0xfQ0lQSEVSX251bShyZXQtPmNpcGhlcl9saXN0KSA8PSAwKSB7Ci0gICAgICAgICBTU0xl cnIoU1NMX0ZfU1NMX0NUWF9ORVcsIFNTTF9SX0xJQlJBUllfSEFTX05PX0NJUEhFUlMpOwotICAg ICAgICAgZ290byBlcnIyOwotZGlmZiAtdXAgb3BlbnNzbC0xLjEuMGUvdGVzdC9jaXBoZXJsaXN0 X3Rlc3QuYy5zeXN0ZW0tY2lwaGVybGlzdCBvcGVuc3NsLTEuMS4wZS90ZXN0L2NpcGhlcmxpc3Rf dGVzdC5jCi0tLS0gb3BlbnNzbC0xLjEuMGUvdGVzdC9jaXBoZXJsaXN0X3Rlc3QuYy5zeXN0ZW0t Y2lwaGVybGlzdAkyMDE3LTAyLTE2IDEyOjU4OjI0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4xLjBlL3Rlc3QvY2lwaGVybGlzdF90ZXN0LmMJMjAxNy0wMi0xNiAxNjoxNTozOC42Nzc5 MzE4NTMgKzAxMDAKLUBAIC0xOTAsNyArMTkwLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQotIHsKLSAgICAgaW50IHJlc3VsdCA9IDA7Ci0gCi0rI2lmbmRlZiBTWVNURU1fQ0lQ SEVSU19GSUxFCi0gICAgIEFERF9URVNUKHRlc3RfZGVmYXVsdF9jaXBoZXJsaXN0X2ltcGxpY2l0 KTsKLSsjZW5kaWYKLSAgICAgQUREX1RFU1QodGVzdF9kZWZhdWx0X2NpcGhlcmxpc3RfZXhwbGlj aXQpOwotIAotICAgICByZXN1bHQgPSBydW5fdGVzdHMoYXJndlswXSk7CgpkaWZmIC0tZ2l0IGEv b3BlbnNzbC0xLjEuMC12ZXJzaW9uLWFkZC1lbmdpbmVzLnBhdGNoIGIvb3BlbnNzbC0xLjEuMC12 ZXJzaW9uLWFkZC1lbmdpbmVzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm NGI3Y2Y5Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4xLjAtdmVyc2lvbi1hZGQtZW5naW5lcy5w YXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4x LjBoL2FwcHMvdmVyc2lvbi5jLnZlcnNpb24tYWRkLWVuZ2luZXMgb3BlbnNzbC0xLjEuMGgvYXBw cy92ZXJzaW9uLmMKLS0tLSBvcGVuc3NsLTEuMS4waC9hcHBzL3ZlcnNpb24uYy52ZXJzaW9uLWFk ZC1lbmdpbmVzCTIwMTgtMDMtMjcgMTU6NTA6MzcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNz bC0xLjEuMGgvYXBwcy92ZXJzaW9uLmMJMjAxOC0wMy0yOSAxNDozMzozMC43MzI4Nzk1MzcgKzAy MDAKLUBAIC01Miw3ICs1Miw3IEBAIGludCB2ZXJzaW9uX21haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQotIHsKLSAgICAgaW50IHJldCA9IDEsIGRpcnR5ID0gMDsKLSAgICAgaW50IGNmbGFncyA9 IDAsIHZlcnNpb24gPSAwLCBkYXRlID0gMCwgb3B0aW9ucyA9IDAsIHBsYXRmb3JtID0gMCwgZGly ID0gMDsKLS0gICAgaW50IGVuZ2RpciA9IDA7Ci0rICAgIGludCBlbmdkaXIgPSAwLCBlbmdpbmVz ID0gMDsKLSAgICAgY2hhciAqcHJvZzsKLSAgICAgT1BUSU9OX0NIT0lDRSBvOwotIAotQEAgLTkw LDcgKzkwLDcgQEAgb3B0aGVscDoKLSAgICAgICAgICAgICBkaXJ0eSA9IHZlcnNpb24gPSAxOwot ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgY2FzZSBPUFRfQToKLS0gICAgICAgICAgICBv cHRpb25zID0gY2ZsYWdzID0gdmVyc2lvbiA9IGRhdGUgPSBwbGF0Zm9ybSA9IGRpciA9IGVuZ2Rp ciA9IDE7Ci0rICAgICAgICAgICAgb3B0aW9ucyA9IGNmbGFncyA9IHZlcnNpb24gPSBkYXRlID0g cGxhdGZvcm0gPSBkaXIgPSBlbmdkaXIgPSBlbmdpbmVzID0gMTsKLSAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgIH0KLSAgICAgfQotQEAgLTEzOSw2ICsxMzksMTYgQEAgb3B0aGVscDoKLSAg ICAgICAgIHByaW50ZigiJXNcbiIsIE9wZW5TU0xfdmVyc2lvbihPUEVOU1NMX0RJUikpOwotICAg ICBpZiAoZW5nZGlyKQotICAgICAgICAgcHJpbnRmKCIlc1xuIiwgT3BlblNTTF92ZXJzaW9uKE9Q RU5TU0xfRU5HSU5FU19ESVIpKTsKLSsgICAgaWYgKGVuZ2luZXMpIHsKLSsgICAgICAgIEVOR0lO RSAqZTsKLSsgICAgICAgIHByaW50ZigiZW5naW5lczogICIpOwotKyAgICAgICAgZSA9IEVOR0lO RV9nZXRfZmlyc3QoKTsKLSsgICAgICAgIHdoaWxlIChlKSB7Ci0rICAgICAgICAgICAgcHJpbnRm KCIlcyAiLCBFTkdJTkVfZ2V0X2lkKGUpKTsKLSsgICAgICAgICAgICBlID0gRU5HSU5FX2dldF9u ZXh0KGUpOwotKyAgICAgICAgfQotKyAgICAgICAgcHJpbnRmKCJcbiIpOwotKyAgICB9Ci0gICAg IHJldCA9IDA7Ci0gIGVuZDoKLSAgICAgcmV0dXJuIChyZXQpOwoKZGlmZiAtLWdpdCBhL29wZW5z c2wtMS4xLjEtYnVpbGQucGF0Y2ggYi9vcGVuc3NsLTEuMS4xLWJ1aWxkLnBhdGNoCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZTIwZjYKLS0tIC9kZXYvbnVsbAorKysgYi9v cGVuc3NsLTEuMS4xLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK2RpZmYgLXVwIG9wZW5z c2wtMS4xLjEtcHJlOC9Db25maWd1cmF0aW9ucy91bml4LU1ha2VmaWxlLnRtcGwuYnVpbGQgb3Bl bnNzbC0xLjEuMS1wcmU4L0NvbmZpZ3VyYXRpb25zL3VuaXgtTWFrZWZpbGUudG1wbAorLS0tIG9w ZW5zc2wtMS4xLjEtcHJlOC9Db25maWd1cmF0aW9ucy91bml4LU1ha2VmaWxlLnRtcGwuYnVpbGQJ MjAxOC0wNi0yMCAxNjo0ODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXBy ZTgvQ29uZmlndXJhdGlvbnMvdW5peC1NYWtlZmlsZS50bXBsCTIwMTgtMDctMTYgMTc6MTU6Mzgu MTA4ODMxMDMxICswMjAwCitAQCAtNjgwLDcgKzY4MCw3IEBAIHVuaW5zdGFsbF9ydW50aW1lOgor IGluc3RhbGxfbWFuX2RvY3M6CisgCUBbIC1uICIkKElOU1RBTExUT1ApIiBdIHx8IChlY2hvIElO U1RBTExUT1Agc2hvdWxkIG5vdCBiZSBlbXB0eTsgZXhpdCAxKQorIAlAJChFQ0hPKSAiKioqIElu c3RhbGxpbmcgbWFucGFnZXMiCistCSQoUEVSTCkgJChTUkNESVIpL3V0aWwvcHJvY2Vzc19kb2Nz LnBsIFwKKysJVFo9VVRDICQoUEVSTCkgJChTUkNESVIpL3V0aWwvcHJvY2Vzc19kb2NzLnBsIFwK KyAJCS0tZGVzdGRpcj0kKERFU1RESVIpJChNQU5ESVIpIC0tdHlwZT1tYW4gLS1zdWZmaXg9JChN QU5TVUZGSVgpCisgCisgdW5pbnN0YWxsX21hbl9kb2NzOgorQEAgLTY5Miw3ICs2OTIsNyBAQCB1 bmluc3RhbGxfbWFuX2RvY3M6CisgaW5zdGFsbF9odG1sX2RvY3M6CisgCUBbIC1uICIkKElOU1RB TExUT1ApIiBdIHx8IChlY2hvIElOU1RBTExUT1Agc2hvdWxkIG5vdCBiZSBlbXB0eTsgZXhpdCAx KQorIAlAJChFQ0hPKSAiKioqIEluc3RhbGxpbmcgSFRNTCBtYW5wYWdlcyIKKy0JJChQRVJMKSAk KFNSQ0RJUikvdXRpbC9wcm9jZXNzX2RvY3MucGwgXAorKwlUWj1VVEMgJChQRVJMKSAkKFNSQ0RJ UikvdXRpbC9wcm9jZXNzX2RvY3MucGwgXAorIAkJLS1kZXN0ZGlyPSQoREVTVERJUikkKEhUTUxE SVIpIC0tdHlwZT1odG1sCisgCisgdW5pbnN0YWxsX2h0bWxfZG9jczoKK2RpZmYgLXVwIG9wZW5z c2wtMS4xLjEtcHJlOC9Db25maWd1cmF0aW9ucy8xMC1tYWluLmNvbmYuYnVpbGQgb3BlbnNzbC0x LjEuMS1wcmU4L0NvbmZpZ3VyYXRpb25zLzEwLW1haW4uY29uZgorLS0tIG9wZW5zc2wtMS4xLjEt cHJlOC9Db25maWd1cmF0aW9ucy8xMC1tYWluLmNvbmYuYnVpbGQJMjAxOC0wNi0yMCAxNjo0ODow OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvQ29uZmlndXJhdGlvbnMv MTAtbWFpbi5jb25mCTIwMTgtMDctMTYgMTc6MTc6MTAuMzEyMDQ1MjAzICswMjAwCitAQCAtNjkz LDYgKzY5Myw3IEBAIG15ICV0YXJnZXRzID0gKAorICAgICAgICAgY3h4ZmxhZ3MgICAgICAgICA9 PiBhZGQoIi1tNjQiKSwKKyAgICAgICAgIGxpYl9jcHBmbGFncyAgICAgPT4gYWRkKCItRExfRU5E SUFOIiksCisgICAgICAgICBwZXJsYXNtX3NjaGVtZSAgID0+ICJsaW51eDY0bGUiLAorKyAgICAg ICAgbXVsdGlsaWIgICAgICAgICA9PiAiNjQiLAorICAgICB9LAorIAorICAgICAibGludXgtYXJt djQiID0+IHsKK0BAIC03MzMsNiArNzM0LDcgQEAgbXkgJXRhcmdldHMgPSAoCisgICAgICJsaW51 eC1hYXJjaDY0IiA9PiB7CisgICAgICAgICBpbmhlcml0X2Zyb20gICAgID0+IFsgImxpbnV4LWdl bmVyaWM2NCIsIGFzbSgiYWFyY2g2NF9hc20iKSBdLAorICAgICAgICAgcGVybGFzbV9zY2hlbWUg ICA9PiAibGludXg2NCIsCisrICAgICAgICBtdWx0aWxpYiAgICAgICAgID0+ICI2NCIsCisgICAg IH0sCisgICAgICJsaW51eC1hcm02NGlscDMyIiA9PiB7ICAjIGh0dHBzOi8vd2lraS5saW5hcm8u b3JnL1BsYXRmb3JtL2FybTY0LWlscDMyCisgICAgICAgICBpbmhlcml0X2Zyb20gICAgID0+IFsg ImxpbnV4LWdlbmVyaWMzMiIsIGFzbSgiYWFyY2g2NF9hc20iKSBdLAoKZGlmZiAtLWdpdCBhL29w ZW5zc2wtMS4xLjEtZGlzYWJsZS1zc2wzLnBhdGNoIGIvb3BlbnNzbC0xLjEuMS1kaXNhYmxlLXNz bDMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhY2RkMQotLS0g L2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4xLjEtZGlzYWJsZS1zc2wzLnBhdGNoCkBAIC0wLDAg KzEsODkgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9hcHBzL3NfY2xpZW50LmMuZGlz YWJsZS1zc2wzIG9wZW5zc2wtMS4xLjEtcHJlOC9hcHBzL3NfY2xpZW50LmMKKy0tLSBvcGVuc3Ns LTEuMS4xLXByZTgvYXBwcy9zX2NsaWVudC5jLmRpc2FibGUtc3NsMwkyMDE4LTA3LTE2IDE4OjA4 OjIwLjAwMDQ4NzYyOCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9hcHBzL3NfY2xpZW50 LmMJMjAxOC0wNy0xNiAxODoxNjo0MC4wNzAxODYzMjMgKzAyMDAKK0BAIC0xNjgxLDYgKzE2ODEs OSBAQCBpbnQgc19jbGllbnRfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgIGlmIChz ZGVidWcpCisgICAgICAgICBzc2xfY3R4X3NlY3VyaXR5X2RlYnVnKGN0eCwgc2RlYnVnKTsKKyAK KysgICAgaWYgKG1pbl92ZXJzaW9uID09IFNTTDNfVkVSU0lPTiAmJiBtYXhfdmVyc2lvbiA9PSBT U0wzX1ZFUlNJT04pCisrICAgICAgICBTU0xfQ1RYX2NsZWFyX29wdGlvbnMoY3R4LCBTU0xfT1Bf Tk9fU1NMdjMpOworKworICAgICBpZiAoIWNvbmZpZ19jdHgoY2N0eCwgc3NsX2FyZ3MsIGN0eCkp CisgICAgICAgICBnb3RvIGVuZDsKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9hcHBz L3Nfc2VydmVyLmMuZGlzYWJsZS1zc2wzIG9wZW5zc2wtMS4xLjEtcHJlOC9hcHBzL3Nfc2VydmVy LmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvYXBwcy9zX3NlcnZlci5jLmRpc2FibGUtc3NsMwky MDE4LTA3LTE2IDE4OjA4OjIwLjAwMDQ4NzYyOCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJl OC9hcHBzL3Nfc2VydmVyLmMJMjAxOC0wNy0xNiAxODoxNzoxNy4zMDAwNTU1NTEgKzAyMDAKK0BA IC0xNzYwLDYgKzE3NjAsOSBAQCBpbnQgc19zZXJ2ZXJfbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdCisgICAgIGlmIChzZGVidWcpCisgICAgICAgICBzc2xfY3R4X3NlY3VyaXR5X2RlYnVnKGN0 eCwgc2RlYnVnKTsKKyAKKysgICAgaWYgKG1pbl92ZXJzaW9uID09IFNTTDNfVkVSU0lPTiAmJiBt YXhfdmVyc2lvbiA9PSBTU0wzX1ZFUlNJT04pCisrICAgICAgICBTU0xfQ1RYX2NsZWFyX29wdGlv bnMoY3R4LCBTU0xfT1BfTk9fU1NMdjMpOworKworICAgICBpZiAoIWNvbmZpZ19jdHgoY2N0eCwg c3NsX2FyZ3MsIGN0eCkpCisgICAgICAgICBnb3RvIGVuZDsKKyAKK2RpZmYgLXVwIG9wZW5zc2wt MS4xLjEtcHJlOC9zc2wvc3NsX2xpYi5jLmRpc2FibGUtc3NsMyBvcGVuc3NsLTEuMS4xLXByZTgv c3NsL3NzbF9saWIuYworLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9zc2wvc3NsX2xpYi5jLmRpc2Fi bGUtc3NsMwkyMDE4LTA2LTIwIDE2OjQ4OjEzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4xLjEtcHJlOC9zc2wvc3NsX2xpYi5jCTIwMTgtMDctMTYgMTg6MDg6MjAuMDAxNDg3NjUyICsw MjAwCitAQCAtMzAxNiw2ICszMDE2LDE0IEBAIFNTTF9DVFggKlNTTF9DVFhfbmV3KGNvbnN0IFNT TF9NRVRIT0QgKm0KKyAgICAgICovCisgICAgIHJldC0+b3B0aW9ucyB8PSBTU0xfT1BfTk9fQ09N UFJFU1NJT04gfCBTU0xfT1BfRU5BQkxFX01JRERMRUJPWF9DT01QQVQ7CisgCisrICAgIC8qCisr ICAgICAqIERpc2FibGUgU1NMdjMgYnkgZGVmYXVsdC4gIEFwcGxpY2F0aW9ucyBjYW4KKysgICAg ICogcmUtZW5hYmxlIGl0IGJ5IGNvbmZpZ3VyaW5nCisrICAgICAqIFNTTF9DVFhfY2xlYXJfb3B0 aW9ucyhjdHgsIFNTTF9PUF9OT19TU0x2Myk7CisrICAgICAqIG9yIGJ5IHVzaW5nIHRoZSBTU0xf Q09ORiBBUEkuCisrICAgICAqLworKyAgICByZXQtPm9wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYz OworKworICAgICByZXQtPmV4dC5zdGF0dXNfdHlwZSA9IFRMU0VYVF9TVEFUVVNUWVBFX25vdGhp bmc7CisgCisgICAgIC8qCitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvdGVzdC9zc2xfdGVz dC5jLmRpc2FibGUtc3NsMyBvcGVuc3NsLTEuMS4xLXByZTgvdGVzdC9zc2xfdGVzdC5jCistLS0g b3BlbnNzbC0xLjEuMS1wcmU4L3Rlc3Qvc3NsX3Rlc3QuYy5kaXNhYmxlLXNzbDMJMjAxOC0wNi0y MCAxNjo0ODoxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvdGVzdC9z c2xfdGVzdC5jCTIwMTgtMDctMTYgMTg6MTg6MzQuODA2ODY1MTIxICswMjAwCitAQCAtNDQzLDYg KzQ0Myw3IEBAIHN0YXRpYyBpbnQgdGVzdF9oYW5kc2hha2UoaW50IGlkeCkKKyAgICAgICAgICAg ICBTU0xfVEVTVF9TRVJWRVJOQU1FX0NCX05PTkUpIHsKKyAgICAgICAgICAgICBpZiAoIVRFU1Rf cHRyKHNlcnZlcjJfY3R4ID0gU1NMX0NUWF9uZXcoVExTX3NlcnZlcl9tZXRob2QoKSkpKQorICAg ICAgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgICAgICBTU0xfQ1RYX2NsZWFyX29wdGlv bnMoc2VydmVyMl9jdHgsIFNTTF9PUF9OT19TU0x2Myk7CisgICAgICAgICAgICAgaWYgKCFURVNU X3RydWUoU1NMX0NUWF9zZXRfbWF4X3Byb3RvX3ZlcnNpb24oc2VydmVyMl9jdHgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExTX01B WF9WRVJTSU9OKSkpCisgICAgICAgICAgICAgICAgIGdvdG8gZXJyOworQEAgLTQ2NCw2ICs0NjUs OCBAQCBzdGF0aWMgaW50IHRlc3RfaGFuZHNoYWtlKGludCBpZHgpCisgICAgICAgICAgICAgaWYg KCFURVNUX3B0cihyZXN1bWVfc2VydmVyX2N0eCkKKyAgICAgICAgICAgICAgICAgICAgIHx8ICFU RVNUX3B0cihyZXN1bWVfY2xpZW50X2N0eCkpCisgICAgICAgICAgICAgICAgIGdvdG8gZXJyOwor KyAgICAgICAgICAgIFNTTF9DVFhfY2xlYXJfb3B0aW9ucyhyZXN1bWVfc2VydmVyX2N0eCwgU1NM X09QX05PX1NTTHYzKTsKKysgICAgICAgICAgICBTU0xfQ1RYX2NsZWFyX29wdGlvbnMocmVzdW1l X2NsaWVudF9jdHgsIFNTTF9PUF9OT19TU0x2Myk7CisgICAgICAgICB9CisgICAgIH0KKyAKK0BA IC00NzcsNiArNDgwLDkgQEAgc3RhdGljIGludCB0ZXN0X2hhbmRzaGFrZShpbnQgaWR4KQorICAg ICAgICAgICAgIHx8ICFURVNUX2ludF9ndChDT05GX21vZHVsZXNfbG9hZChjb25mLCB0ZXN0X2Fw cCwgMCksICAwKSkKKyAgICAgICAgIGdvdG8gZXJyOworIAorKyAgICBTU0xfQ1RYX2NsZWFyX29w dGlvbnMoc2VydmVyX2N0eCwgU1NMX09QX05PX1NTTHYzKTsKKysgICAgU1NMX0NUWF9jbGVhcl9v cHRpb25zKGNsaWVudF9jdHgsIFNTTF9PUF9OT19TU0x2Myk7CisrCisgICAgIGlmICghU1NMX0NU WF9jb25maWcoc2VydmVyX2N0eCwgInNlcnZlciIpCisgICAgICAgICB8fCAhU1NMX0NUWF9jb25m aWcoY2xpZW50X2N0eCwgImNsaWVudCIpKSB7CisgICAgICAgICBnb3RvIGVycjsKK2RpZmYgLXVw IG9wZW5zc2wtMS4xLjEtcHJlOC90ZXN0L3NzbHRlc3Rfb2xkLmMuZGlzYWJsZS1zc2wzIG9wZW5z c2wtMS4xLjEtcHJlOC90ZXN0L3NzbHRlc3Rfb2xkLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgv dGVzdC9zc2x0ZXN0X29sZC5jLmRpc2FibGUtc3NsMwkyMDE4LTA2LTIwIDE2OjQ4OjE1LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC90ZXN0L3NzbHRlc3Rfb2xkLmMJMjAx OC0wNy0xNiAxODowODoyMC4wMDI0ODc2NzYgKzAyMDAKK0BAIC0xMzU4LDYgKzEzNTgsMTEgQEAg aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICAgIEVSUl9wcmludF9lcnJv cnMoYmlvX2Vycik7CisgICAgICAgICBnb3RvIGVuZDsKKyAgICAgfQorKworKyAgICBTU0xfQ1RY X2NsZWFyX29wdGlvbnMoY19jdHgsIFNTTF9PUF9OT19TU0x2Myk7CisrICAgIFNTTF9DVFhfY2xl YXJfb3B0aW9ucyhzX2N0eCwgU1NMX09QX05PX1NTTHYzKTsKKysgICAgU1NMX0NUWF9jbGVhcl9v cHRpb25zKHNfY3R4MiwgU1NMX09QX05PX1NTTHYzKTsKKysKKyAgICAgLyoKKyAgICAgICogU2lu Y2Ugd2Ugd2lsbCB1c2UgbG93IHNlY3VyaXR5IGNpcGhlcnN1aXRlcyBhbmQga2V5cyBmb3IgdGVz dGluZyBzZXQKKyAgICAgICogc2VjdXJpdHkgbGV2ZWwgdG8gemVybyBieSBkZWZhdWx0LiBUZXN0 cyBjYW4gb3ZlcnJpZGUgdGhpcyBieSBhZGRpbmcKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMS4x LWVjLWN1cnZlcy5wYXRjaCBiL29wZW5zc2wtMS4xLjEtZWMtY3VydmVzLnBhdGNoCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNjI2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9v cGVuc3NsLTEuMS4xLWVjLWN1cnZlcy5wYXRjaApAQCAtMCwwICsxLDk0IEBACitkaWZmIC11cCBv cGVuc3NsLTEuMS4xLXByZTgvYXBwcy9zcGVlZC5jLmN1cnZlcyBvcGVuc3NsLTEuMS4xLXByZTgv YXBwcy9zcGVlZC5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2FwcHMvc3BlZWQuYy5jdXJ2ZXMJ MjAxOC0wNy0xNyAwODo0ODo1Ni4xMDY2MjUwMjAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXBy ZTgvYXBwcy9zcGVlZC5jCTIwMTgtMDctMTcgMDg6NTA6MDcuNTI2NTIxODA5ICswMjAwCitAQCAt NTExLDU2ICs1MTEsMjAgQEAgc3RhdGljIGRvdWJsZSByc2FfcmVzdWx0c1tSU0FfTlVNXVsyXTsK KyAjZGVmaW5lIFJfRUNfWDQ0OCAgICAyMworICNpZm5kZWYgT1BFTlNTTF9OT19FQworIHN0YXRp YyBPUFRfUEFJUiBlY2RzYV9jaG9pY2VzW10gPSB7CistICAgIHsiZWNkc2FwMTYwIiwgUl9FQ19Q MTYwfSwKKy0gICAgeyJlY2RzYXAxOTIiLCBSX0VDX1AxOTJ9LAorICAgICB7ImVjZHNhcDIyNCIs IFJfRUNfUDIyNH0sCisgICAgIHsiZWNkc2FwMjU2IiwgUl9FQ19QMjU2fSwKKyAgICAgeyJlY2Rz YXAzODQiLCBSX0VDX1AzODR9LAorICAgICB7ImVjZHNhcDUyMSIsIFJfRUNfUDUyMX0sCistICAg IHsiZWNkc2FrMTYzIiwgUl9FQ19LMTYzfSwKKy0gICAgeyJlY2RzYWsyMzMiLCBSX0VDX0syMzN9 LAorLSAgICB7ImVjZHNhazI4MyIsIFJfRUNfSzI4M30sCistICAgIHsiZWNkc2FrNDA5IiwgUl9F Q19LNDA5fSwKKy0gICAgeyJlY2RzYWs1NzEiLCBSX0VDX0s1NzF9LAorLSAgICB7ImVjZHNhYjE2 MyIsIFJfRUNfQjE2M30sCistICAgIHsiZWNkc2FiMjMzIiwgUl9FQ19CMjMzfSwKKy0gICAgeyJl Y2RzYWIyODMiLCBSX0VDX0IyODN9LAorLSAgICB7ImVjZHNhYjQwOSIsIFJfRUNfQjQwOX0sCist ICAgIHsiZWNkc2FiNTcxIiwgUl9FQ19CNTcxfSwKKy0gICAgeyJlY2RzYWJycDI1NnIxIiwgUl9F Q19CUlAyNTZSMX0sCistICAgIHsiZWNkc2FicnAyNTZ0MSIsIFJfRUNfQlJQMjU2VDF9LAorLSAg ICB7ImVjZHNhYnJwMzg0cjEiLCBSX0VDX0JSUDM4NFIxfSwKKy0gICAgeyJlY2RzYWJycDM4NHQx IiwgUl9FQ19CUlAzODRUMX0sCistICAgIHsiZWNkc2FicnA1MTJyMSIsIFJfRUNfQlJQNTEyUjF9 LAorLSAgICB7ImVjZHNhYnJwNTEydDEiLCBSX0VDX0JSUDUxMlQxfQorIH07CisgIyBkZWZpbmUg RUNEU0FfTlVNICAgICAgIE9TU0xfTkVMRU0oZWNkc2FfY2hvaWNlcykKKyAKKyBzdGF0aWMgZG91 YmxlIGVjZHNhX3Jlc3VsdHNbRUNEU0FfTlVNXVsyXTsgICAgLyogMiBvcHM6IHNpZ24gdGhlbiB2 ZXJpZnkgKi8KKyAKKyBzdGF0aWMgY29uc3QgT1BUX1BBSVIgZWNkaF9jaG9pY2VzW10gPSB7Cist ICAgIHsiZWNkaHAxNjAiLCBSX0VDX1AxNjB9LAorLSAgICB7ImVjZGhwMTkyIiwgUl9FQ19QMTky fSwKKyAgICAgeyJlY2RocDIyNCIsIFJfRUNfUDIyNH0sCisgICAgIHsiZWNkaHAyNTYiLCBSX0VD X1AyNTZ9LAorICAgICB7ImVjZGhwMzg0IiwgUl9FQ19QMzg0fSwKKyAgICAgeyJlY2RocDUyMSIs IFJfRUNfUDUyMX0sCistICAgIHsiZWNkaGsxNjMiLCBSX0VDX0sxNjN9LAorLSAgICB7ImVjZGhr MjMzIiwgUl9FQ19LMjMzfSwKKy0gICAgeyJlY2RoazI4MyIsIFJfRUNfSzI4M30sCistICAgIHsi ZWNkaGs0MDkiLCBSX0VDX0s0MDl9LAorLSAgICB7ImVjZGhrNTcxIiwgUl9FQ19LNTcxfSwKKy0g ICAgeyJlY2RoYjE2MyIsIFJfRUNfQjE2M30sCistICAgIHsiZWNkaGIyMzMiLCBSX0VDX0IyMzN9 LAorLSAgICB7ImVjZGhiMjgzIiwgUl9FQ19CMjgzfSwKKy0gICAgeyJlY2RoYjQwOSIsIFJfRUNf QjQwOX0sCistICAgIHsiZWNkaGI1NzEiLCBSX0VDX0I1NzF9LAorLSAgICB7ImVjZGhicnAyNTZy MSIsIFJfRUNfQlJQMjU2UjF9LAorLSAgICB7ImVjZGhicnAyNTZ0MSIsIFJfRUNfQlJQMjU2VDF9 LAorLSAgICB7ImVjZGhicnAzODRyMSIsIFJfRUNfQlJQMzg0UjF9LAorLSAgICB7ImVjZGhicnAz ODR0MSIsIFJfRUNfQlJQMzg0VDF9LAorLSAgICB7ImVjZGhicnA1MTJyMSIsIFJfRUNfQlJQNTEy UjF9LAorLSAgICB7ImVjZGhicnA1MTJ0MSIsIFJfRUNfQlJQNTEyVDF9LAorICAgICB7ImVjZGh4 MjU1MTkiLCBSX0VDX1gyNTUxOX0sCisgICAgIHsiZWNkaHg0NDgiLCBSX0VDX1g0NDh9CisgfTsK K2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZWMvZWNwX3NtcGwuYy5jdXJ2ZXMg b3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9lYy9lY3Bfc21wbC5jCistLS0gb3BlbnNzbC0xLjEu MS1wcmU4L2NyeXB0by9lYy9lY3Bfc21wbC5jLmN1cnZlcwkyMDE4LTA2LTIwIDE2OjQ4OjEwLjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZWMvZWNwX3NtcGwu YwkyMDE4LTA3LTE3IDA4OjQ4OjU2LjEwNzYyNTA0NCArMDIwMAorQEAgLTE0MSw2ICsxNDEsMTEg QEAgaW50IGVjX0dGcF9zaW1wbGVfZ3JvdXBfc2V0X2N1cnZlKEVDX0dSTworICAgICAgICAgcmV0 dXJuIDA7CisgICAgIH0KKyAKKysgICAgaWYgKEJOX251bV9iaXRzKHApIDwgMjI0KSB7CisrICAg ICAgICBFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfR1JPVVBfU0VUX0NVUlZFLCBFQ19SX1VOU1VQ UE9SVEVEX0ZJRUxEKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrCisgICAgIGlmIChj dHggPT0gTlVMTCkgeworICAgICAgICAgY3R4ID0gbmV3X2N0eCA9IEJOX0NUWF9uZXcoKTsKKyAg ICAgICAgIGlmIChjdHggPT0gTlVMTCkKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC90ZXN0 L2VjZHNhdGVzdC5jLmN1cnZlcyBvcGVuc3NsLTEuMS4xLXByZTgvdGVzdC9lY2RzYXRlc3QuYwor LS0tIG9wZW5zc2wtMS4xLjEtcHJlOC90ZXN0L2VjZHNhdGVzdC5jLmN1cnZlcwkyMDE4LTA2LTIw IDE2OjQ4OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC90ZXN0L2Vj ZHNhdGVzdC5jCTIwMTgtMDctMTcgMDg6NDg6NTYuMTA3NjI1MDQ0ICswMjAwCitAQCAtMTczLDYg KzE3Myw3IEBAIHN0YXRpYyBpbnQgeDlfNjJfdGVzdHModm9pZCkKKyAgICAgaWYgKCFjaGFuZ2Vf cmFuZCgpKQorICAgICAgICAgZ290byB4OTYyX2VycjsKKyAKKysjaWYgMAorICAgICBpZiAoIVRF U1RfdHJ1ZSh4OV82Ml90ZXN0X2ludGVybmFsKE5JRF9YOV82Ml9wcmltZTE5MnYxLAorICAgICAg ICAgICAgICAgICAgIjMzNDI0MDM1MzY0MDU5ODE3MjkzOTM0ODgzMzQ2OTQ2MDA0MTU1OTY4ODE4 MjY4NjkzNTE2Nzc2MTMiLAorICAgICAgICAgICAgICAgICAgIjU3MzU4MjIzMjg4ODgxNTUyNTQ2 ODM4OTQ5OTc4OTc1NzE5NTE1Njg1NTM2NDI4OTIwMjk5ODIzNDIiKSkpCitAQCAtMTgzLDYgKzE4 NCw3IEBAIHN0YXRpYyBpbnQgeDlfNjJfdGVzdHModm9pZCkKKyAgICAgICAgICAgICAgICAgICIz MjM4MTM1NTMyMDk3OTczNTc3MDgwNzg3NzY4MzEyNTA1MDU5MzE4OTEwNTE3NTUwMDc4NDI3ODE5 IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjc4NTA1MTc5NDQ4NzgzIikpKQorICAg ICAgICAgZ290byB4OTYyX2VycjsKKysjZW5kaWYKKyAKKyAjIGlmbmRlZiBPUEVOU1NMX05PX0VD Mk0KKyAgICAgaWYgKCFURVNUX3RydWUoeDlfNjJfdGVzdF9pbnRlcm5hbChOSURfWDlfNjJfYzJ0 bmIxOTF2MSwKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMS4xLWZpcHMucGF0Y2ggYi9vcGVuc3Ns LTEuMS4xLWZpcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYz MmIwMwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4xLjEtZmlwcy5wYXRjaApAQCAtMCww ICsxLDEyMTUzIEBACitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvYXBwcy9zcGVlZC5jLmZp cHMgb3BlbnNzbC0xLjEuMS1wcmU4L2FwcHMvc3BlZWQuYworLS0tIG9wZW5zc2wtMS4xLjEtcHJl OC9hcHBzL3NwZWVkLmMuZmlwcwkyMDE4LTA3LTI1IDE3OjI2OjU4LjM5MzYyNDQxNiArMDIwMAor KysrIG9wZW5zc2wtMS4xLjEtcHJlOC9hcHBzL3NwZWVkLmMJMjAxOC0wNy0yNSAxNzoyNjo1OC40 MDI2MjQ2MzIgKzAyMDAKK0BAIC0xNTUwLDcgKzE1NTAsOCBAQCBpbnQgc3BlZWRfbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICBpZiAo c3RyY21wKCphcmd2LCAicnNhIikgPT0gMCkgeworICAgICAgICAgICAgIGZvciAobG9vcCA9IDA7 IGxvb3AgPCBPU1NMX05FTEVNKHJzYV9kb2l0KTsgbG9vcCsrKQorLSAgICAgICAgICAgICAgICBy c2FfZG9pdFtsb29wXSA9IDE7CisrCQlpZiAoIUZJUFNfbW9kZSgpIHx8IGxvb3AgIT0gUl9SU0Ff NTEyKQorKyAgICAgICAgICAgICAgICAgICAgcnNhX2RvaXRbbG9vcF0gPSAxOworICAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICAgfQorICAgICAgICAgaWYgKGZvdW5kKCphcmd2LCByc2Ff Y2hvaWNlcywgJmkpKSB7CitAQCAtMTU2MCw3ICsxNTYxLDkgQEAgaW50IHNwZWVkX21haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19EU0EKKyAg ICAgICAgIGlmIChzdHJjbXAoKmFyZ3YsICJkc2EiKSA9PSAwKSB7CistICAgICAgICAgICAgZHNh X2RvaXRbUl9EU0FfNTEyXSA9IGRzYV9kb2l0W1JfRFNBXzEwMjRdID0KKysgICAgICAgICAgICBp ZiAoIUZJUFNfbW9kZSgpKQorKyAgICAgICAgICAgICAgICBkc2FfZG9pdFtSX0RTQV81MTJdID0g MTsKKysgICAgICAgICAgICBkc2FfZG9pdFtSX0RTQV8xMDI0XSA9CisgICAgICAgICAgICAgICAg IGRzYV9kb2l0W1JfRFNBXzIwNDhdID0gMTsKKyAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg ICAgIH0KK0BAIC0xNjgzLDE1ICsxNjg2LDIxIEBAIGludCBzcGVlZF9tYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKKyAgICAgLyogTm8gcGFyYW1ldGVyczsgdHVybiBvbiBldmVyeXRoaW5nLiAq LworICAgICBpZiAoKGFyZ2MgPT0gMCkgJiYgIWRvaXRbRF9FVlBdKSB7CisgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgQUxHT1JfTlVNOyBpKyspCistICAgICAgICAgICAgaWYgKGkgIT0gRF9FVlAp CisrICAgICAgICAgICAgaWYgKGkgIT0gRF9FVlAgJiYKKysgICAgICAgICAgICAgICAgKCFGSVBT X21vZGUoKSB8fCAoaSAhPSBEX1dISVJMUE9PTCAmJgorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpICE9IERfTUQyICYmIGkgIT0gRF9NRDQgJiYKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaSAhPSBEX01ENSAmJiBpICE9IERfTURDMiAmJgorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9IERfUk1EMTYwKSkpCisgICAgICAgICAgICAg ICAgIGRvaXRbaV0gPSAxOworICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKKyAgICAgICAgIGZvciAo aSA9IDA7IGkgPCBSU0FfTlVNOyBpKyspCistICAgICAgICAgICAgcnNhX2RvaXRbaV0gPSAxOwor KyAgICAgICAgICAgIGlmICghRklQU19tb2RlKCkgfHwgaSAhPSBSX1JTQV81MTIpCisrICAgICAg ICAgICAgICAgIHJzYV9kb2l0W2ldID0gMTsKKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9f RFNBCisgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRFNBX05VTTsgaSsrKQorLSAgICAgICAgICAg IGRzYV9kb2l0W2ldID0gMTsKKysgICAgICAgICAgICBpZiAoIUZJUFNfbW9kZSgpIHx8IGkgIT0g Ul9EU0FfNTEyKQorKyAgICAgICAgICAgICAgICBkc2FfZG9pdFtpXSA9IDE7CisgI2VuZGlmCisg I2lmbmRlZiBPUEVOU1NMX05PX0VDCisgICAgICAgICBmb3IgKGxvb3AgPSAwOyBsb29wIDwgT1NT TF9ORUxFTShlY2RzYV9kb2l0KTsgbG9vcCsrKQorQEAgLTE3NDUsMzAgKzE3NTQsNDYgQEAgaW50 IHNwZWVkX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICBBRVNfc2V0X2VuY3J5cHRf a2V5KGtleTI0LCAxOTIsICZhZXNfa3MyKTsKKyAgICAgQUVTX3NldF9lbmNyeXB0X2tleShrZXkz MiwgMjU2LCAmYWVzX2tzMyk7CisgI2lmbmRlZiBPUEVOU1NMX05PX0NBTUVMTElBCistICAgIENh bWVsbGlhX3NldF9rZXkoa2V5MTYsIDEyOCwgJmNhbWVsbGlhX2tzMSk7CistICAgIENhbWVsbGlh X3NldF9rZXkoY2tleTI0LCAxOTIsICZjYW1lbGxpYV9rczIpOworLSAgICBDYW1lbGxpYV9zZXRf a2V5KGNrZXkzMiwgMjU2LCAmY2FtZWxsaWFfa3MzKTsKKysgICAgaWYgKGRvaXRbRF9DQkNfMTI4 X0NNTF0gfHwgZG9pdFtEX0NCQ18xOTJfQ01MXSB8fCBkb2l0W0RfQ0JDXzI1Nl9DTUxdKSB7Cisr ICAgICAgICBDYW1lbGxpYV9zZXRfa2V5KGtleTE2LCAxMjgsICZjYW1lbGxpYV9rczEpOworKyAg ICAgICAgQ2FtZWxsaWFfc2V0X2tleShja2V5MjQsIDE5MiwgJmNhbWVsbGlhX2tzMik7CisrICAg ICAgICBDYW1lbGxpYV9zZXRfa2V5KGNrZXkzMiwgMjU2LCAmY2FtZWxsaWFfa3MzKTsKKysgICAg fQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19JREVBCistICAgIElERUFfc2V0X2VuY3J5 cHRfa2V5KGtleTE2LCAmaWRlYV9rcyk7CisrICAgIGlmIChkb2l0W0RfQ0JDX0lERUFdKSB7Cisr ICAgICAgICBJREVBX3NldF9lbmNyeXB0X2tleShrZXkxNiwgJmlkZWFfa3MpOworKyAgICB9Cisg I2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX1NFRUQKKy0gICAgU0VFRF9zZXRfa2V5KGtleTE2 LCAmc2VlZF9rcyk7CisrICAgIGlmIChkb2l0W0RfQ0JDX1NFRURdKSB7CisrICAgICAgICBTRUVE X3NldF9rZXkoa2V5MTYsICZzZWVkX2tzKTsKKysgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BF TlNTTF9OT19SQzQKKy0gICAgUkM0X3NldF9rZXkoJnJjNF9rcywgMTYsIGtleTE2KTsKKysgICBp ZiAoZG9pdFtEX1JDNF0pIHsKKysgICAgICAgIFJDNF9zZXRfa2V5KCZyYzRfa3MsIDE2LCBrZXkx Nik7CisrICAgIH0KKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fUkMyCistICAgIFJDMl9z ZXRfa2V5KCZyYzJfa3MsIDE2LCBrZXkxNiwgMTI4KTsKKysgICAgaWYgKGRvaXRbRF9DQkNfUkMy XSkgeworKyAgICAgICAgUkMyX3NldF9rZXkoJnJjMl9rcywgMTYsIGtleTE2LCAxMjgpOworKyAg ICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX1JDNQorLSAgICBSQzVfMzJfc2V0X2tl eSgmcmM1X2tzLCAxNiwga2V5MTYsIDEyKTsKKysgICAgaWYgKGRvaXRbRF9DQkNfUkM1XSkgewor KyAgICAgICAgUkM1XzMyX3NldF9rZXkoJnJjNV9rcywgMTYsIGtleTE2LCAxMik7CisrICAgIH0K KyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fQkYKKy0gICAgQkZfc2V0X2tleSgmYmZfa3Ms IDE2LCBrZXkxNik7CisrICAgIGlmIChkb2l0W0RfQ0JDX0JGXSkgeworKyAgICAgICAgQkZfc2V0 X2tleSgmYmZfa3MsIDE2LCBrZXkxNik7CisrICAgIH0KKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5T U0xfTk9fQ0FTVAorLSAgICBDQVNUX3NldF9rZXkoJmNhc3Rfa3MsIDE2LCBrZXkxNik7CisrICAg IGlmIChkb2l0W0RfQ0JDX0NBU1RdKSB7CisrICAgICAgICBDQVNUX3NldF9rZXkoJmNhc3Rfa3Ms IDE2LCBrZXkxNik7CisrICAgIH0KKyAjZW5kaWYKKyAjaWZuZGVmIFNJR0FMUk0KKyAjIGlmbmRl ZiBPUEVOU1NMX05PX0RFUworQEAgLTIwNTksNiArMjA4NCw3IEBAIGludCBzcGVlZF9tYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKKyAKKyAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsb29wYXJn c19sZW47IGkrKykgeworICAgICAgICAgICAgIGxvb3BhcmdzW2ldLmhjdHggPSBITUFDX0NUWF9u ZXcoKTsKKysgICAgICAgICAgICBITUFDX0NUWF9zZXRfZmxhZ3MobG9vcGFyZ3NbaV0uaGN0eCwg RVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKyAgICAgICAgICAgICBpZiAobG9vcGFy Z3NbaV0uaGN0eCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgIEJJT19wcmludGYoYmlvX2Vy ciwgIkhNQUMgbWFsbG9jIGZhaWx1cmUsIGV4aXRpbmcuLi4iKTsKKyAgICAgICAgICAgICAgICAg ZXhpdCgxKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9Db25maWd1cmUuZmlwcyBvcGVu c3NsLTEuMS4xLXByZTgvQ29uZmlndXJlCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L0NvbmZpZ3Vy ZS5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTguMzk5NjI0NTYwICswMjAwCisrKysgb3BlbnNzbC0x LjEuMS1wcmU4L0NvbmZpZ3VyZQkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwMjYyNDYzMiArMDIwMAor QEAgLTMwNiw3ICszMDYsNyBAQCAkY29uZmlne3NkaXJzfSA9IFsKKyAgICAgIm1kMiIsICJtZDQi LCAibWQ1IiwgInNoYSIsICJtZGMyIiwgImhtYWMiLCAicmlwZW1kIiwgIndocmxwb29sIiwgInBv bHkxMzA1IiwgImJsYWtlMiIsICJzaXBoYXNoIiwgInNtMyIsCisgICAgICJkZXMiLCAiYWVzIiwg InJjMiIsICJyYzQiLCAicmM1IiwgImlkZWEiLCAiYXJpYSIsICJiZiIsICJjYXN0IiwgImNhbWVs bGlhIiwgInNlZWQiLCAic200IiwgImNoYWNoYSIsICJtb2RlcyIsCisgICAgICJibiIsICJlYyIs ICJyc2EiLCAiZHNhIiwgImRoIiwgInNtMiIsICJkc28iLCAiZW5naW5lIiwKKy0gICAgImJ1ZmZl ciIsICJiaW8iLCAic3RhY2siLCAibGhhc2giLCAicmFuZCIsICJlcnIiLAorKyAgICAiYnVmZmVy IiwgImJpbyIsICJzdGFjayIsICJsaGFzaCIsICJyYW5kIiwgImVyciIsICJmaXBzIiwKKyAgICAg ImV2cCIsICJhc24xIiwgInBlbSIsICJ4NTA5IiwgIng1MDl2MyIsICJjb25mIiwgInR4dF9kYiIs ICJwa2NzNyIsICJwa2NzMTIiLCAiY29tcCIsICJvY3NwIiwgInVpIiwKKyAgICAgImNtcyIsICJ0 cyIsICJzcnAiLCAiY21hYyIsICJjdCIsICJhc3luYyIsICJrZGYiLCAic3RvcmUiCisgICAgIF07 CitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2RoL2RoX2Vyci5jLmZpcHMgb3Bl bnNzbC0xLjEuMS1wcmU4L2NyeXB0by9kaC9kaF9lcnIuYworLS0tIG9wZW5zc2wtMS4xLjEtcHJl OC9jcnlwdG8vZGgvZGhfZXJyLmMuZmlwcwkyMDE4LTA2LTIwIDE2OjQ4OjEwLjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZGgvZGhfZXJyLmMJMjAxOC0wNy0y NSAxNzoyNjo1OC40MDI2MjQ2MzIgKzAyMDAKK0BAIC0yNSw2ICsyNSw5IEBAIHN0YXRpYyBjb25z dCBFUlJfU1RSSU5HX0RBVEEgREhfc3RyX2Z1bmMKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJfREgs IERIX0ZfREhfQ01TX1NFVF9QRUVSS0VZLCAwKSwgImRoX2Ntc19zZXRfcGVlcmtleSJ9LAorICAg ICB7RVJSX1BBQ0soRVJSX0xJQl9ESCwgREhfRl9ESF9DTVNfU0VUX1NIQVJFRF9JTkZPLCAwKSwK KyAgICAgICJkaF9jbXNfc2V0X3NoYXJlZF9pbmZvIn0sCisrICAgIHtFUlJfUEFDSyhFUlJfTElC X0RILCBESF9GX0RIX0NPTVBVVEVfS0VZLCAwKSwgIkRIX2NvbXB1dGVfa2V5In0sCisrICAgIHtF UlJfUEFDSyhFUlJfTElCX0RILCBESF9GX0RIX0dFTkVSQVRFX0tFWSwgMCksICJESF9nZW5lcmF0 ZV9rZXkifSwKKysgICAge0VSUl9QQUNLKEVSUl9MSUJfREgsIERIX0ZfREhfR0VORVJBVEVfUEFS QU1FVEVSU19FWCwgMCksICJESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4In0sCisgICAgIHtFUlJf UEFDSyhFUlJfTElCX0RILCBESF9GX0RIX01FVEhfRFVQLCAwKSwgIkRIX21ldGhfZHVwIn0sCisg ICAgIHtFUlJfUEFDSyhFUlJfTElCX0RILCBESF9GX0RIX01FVEhfTkVXLCAwKSwgIkRIX21ldGhf bmV3In0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElCX0RILCBESF9GX0RIX01FVEhfU0VUMV9OQU1F LCAwKSwgIkRIX21ldGhfc2V0MV9uYW1lIn0sCitAQCAtNzIsMTIgKzc1LDE0IEBAIHN0YXRpYyBj b25zdCBFUlJfU1RSSU5HX0RBVEEgREhfc3RyX3JlYXMKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJf REgsIDAsIERIX1JfSU5WQUxJRF9QVUJLRVkpLCAiaW52YWxpZCBwdWJsaWMga2V5In0sCisgICAg IHtFUlJfUEFDSyhFUlJfTElCX0RILCAwLCBESF9SX0tERl9QQVJBTUVURVJfRVJST1IpLCAia2Rm IHBhcmFtZXRlciBlcnJvciJ9LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9ESCwgMCwgREhfUl9L RVlTX05PVF9TRVQpLCAia2V5cyBub3Qgc2V0In0sCisrICAgIHtFUlJfUEFDSyhFUlJfTElCX0RI LCAwLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCksICJrZXkgc2l6ZSB0b28gc21hbGwifSwKKyAg ICAge0VSUl9QQUNLKEVSUl9MSUJfREgsIDAsIERIX1JfTUlTU0lOR19QVUJLRVkpLCAibWlzc2lu ZyBwdWJrZXkifSwKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJfREgsIDAsIERIX1JfTU9EVUxVU19U T09fTEFSR0UpLCAibW9kdWx1cyB0b28gbGFyZ2UifSwKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJf REgsIDAsIERIX1JfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUiksCisgICAgICJub3Qgc3VpdGFibGUg Z2VuZXJhdG9yIn0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElCX0RILCAwLCBESF9SX05PX1BBUkFN RVRFUlNfU0VUKSwgIm5vIHBhcmFtZXRlcnMgc2V0In0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElC X0RILCAwLCBESF9SX05PX1BSSVZBVEVfVkFMVUUpLCAibm8gcHJpdmF0ZSB2YWx1ZSJ9LAorKyAg ICB7RVJSX1BBQ0soRVJSX0xJQl9ESCwgMCwgREhfUl9OT05fRklQU19NRVRIT0QpLCAibm9uIEZJ UFMgbWV0aG9kIn0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElCX0RILCAwLCBESF9SX1BBUkFNRVRF Ul9FTkNPRElOR19FUlJPUiksCisgICAgICJwYXJhbWV0ZXIgZW5jb2RpbmcgZXJyb3IifSwKKyAg ICAge0VSUl9QQUNLKEVSUl9MSUJfREgsIDAsIERIX1JfUEVFUl9LRVlfRVJST1IpLCAicGVlciBr ZXkgZXJyb3IifSwKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZGgvZGhfZ2Vu LmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2RoL2RoX2dlbi5jCistLS0gb3BlbnNz bC0xLjEuMS1wcmU4L2NyeXB0by9kaC9kaF9nZW4uYy5maXBzCTIwMTgtMDYtMjAgMTY6NDg6MTAu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9kaC9kaF9nZW4u YwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwMjYyNDYzMiArMDIwMAorQEAgLTE2LDYgKzE2LDkgQEAK KyAjaW5jbHVkZSAiaW50ZXJuYWwvY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9ibi5o PgorICNpbmNsdWRlICJkaF9sb2NsLmgiCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3RhdGljIGludCBkaF9idWlsdGluX2dl bnBhcmFtcyhESCAqcmV0LCBpbnQgcHJpbWVfbGVuLCBpbnQgZ2VuZXJhdG9yLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQk5fR0VOQ0IgKmNiKTsKK0BAIC0yMyw2ICsyNiwxMyBA QCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQsCisgaW50IERIX2dlbmVy YXRlX3BhcmFtZXRlcnNfZXgoREggKnJldCwgaW50IHByaW1lX2xlbiwgaW50IGdlbmVyYXRvciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTl9HRU5DQiAqY2IpCisgeworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgpICYmICEocmV0LT5tZXRoLT5mbGFn cyAmIERIX0ZMQUdfRklQU19NRVRIT0QpCisrICAgICAgICAmJiAhKHJldC0+ZmxhZ3MgJiBESF9G TEFHX05PTl9GSVBTX0FMTE9XKSkgeworKyAgICAgICAgREhlcnIoREhfRl9ESF9HRU5FUkFURV9Q QVJBTUVURVJTX0VYLCBESF9SX05PTl9GSVBTX01FVEhPRCk7CisrICAgICAgICByZXR1cm4gMDsK KysgICAgfQorKyNlbmRpZgorICAgICBpZiAocmV0LT5tZXRoLT5nZW5lcmF0ZV9wYXJhbXMpCisg ICAgICAgICByZXR1cm4gcmV0LT5tZXRoLT5nZW5lcmF0ZV9wYXJhbXMocmV0LCBwcmltZV9sZW4s IGdlbmVyYXRvciwgY2IpOworICAgICByZXR1cm4gZGhfYnVpbHRpbl9nZW5wYXJhbXMocmV0LCBw cmltZV9sZW4sIGdlbmVyYXRvciwgY2IpOworQEAgLTYyLDYgKzcyLDE4IEBAIHN0YXRpYyBpbnQg ZGhfYnVpbHRpbl9nZW5wYXJhbXMoREggKnJldCwKKyAgICAgaW50IGcsIG9rID0gLTE7CisgICAg IEJOX0NUWCAqY3R4ID0gTlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChG SVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9ESF9CVUlM VElOX0dFTlBBUkFNUywgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgIHJl dHVybiAwOworKyAgICB9CisrCisrICAgIGlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVfbGVuIDwg T1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFNfR0VOKSkgeworKyAgICAgICAgREhlcnIo REhfRl9ESF9CVUlMVElOX0dFTlBBUkFNUywgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKyAg ICAgICAgZ290byBlcnI7CisrICAgIH0KKysjZW5kaWYKKysKKyAgICAgY3R4ID0gQk5fQ1RYX25l dygpOworICAgICBpZiAoY3R4ID09IE5VTEwpCisgICAgICAgICBnb3RvIGVycjsKK2RpZmYgLXVw IG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMS4x LXByZTgvY3J5cHRvL2RoL2RoX2tleS5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9k aC9kaF9rZXkuYy5maXBzCTIwMTgtMDYtMjAgMTY6NDg6MTAuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9kaC9kaF9rZXkuYwkyMDE4LTA3LTI1IDE3OjI2OjU4 LjQwMjYyNDYzMiArMDIwMAorQEAgLTExLDYgKzExLDkgQEAKKyAjaW5jbHVkZSAiaW50ZXJuYWwv Y3J5cHRsaWIuaCIKKyAjaW5jbHVkZSAiZGhfbG9jbC5oIgorICNpbmNsdWRlICJpbnRlcm5hbC9i bl9pbnQuaCIKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjZW5kaWYKKyAKKyBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpOworIHN0YXRp YyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCBCSUdOVU0gKnB1Yl9r ZXksIERIICpkaCk7CitAQCAtMjIsMTggKzI1LDMyIEBAIHN0YXRpYyBpbnQgZGhfZmluaXNoKERI ICpkaCk7CisgCisgaW50IERIX2dlbmVyYXRlX2tleShESCAqZGgpCisgeworKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgpICYmICEoZGgtPm1ldGgtPmZsYWdzICYgREhf RkxBR19GSVBTX01FVEhPRCkKKysgICAgICAgICYmICEoZGgtPmZsYWdzICYgREhfRkxBR19OT05f RklQU19BTExPVykpIHsKKysgICAgICAgIERIZXJyKERIX0ZfREhfR0VORVJBVEVfS0VZLCBESF9S X05PTl9GSVBTX01FVEhPRCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyNlbmRpZgor ICAgICByZXR1cm4gZGgtPm1ldGgtPmdlbmVyYXRlX2tleShkaCk7CisgfQorIAorIGludCBESF9j b21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IEJJR05VTSAqcHViX2tleSwgREgg KmRoKQorIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX21vZGUoKSAmJiAh KGRoLT5tZXRoLT5mbGFncyAmIERIX0ZMQUdfRklQU19NRVRIT0QpCisrICAgICAgICAmJiAhKGRo LT5mbGFncyAmIERIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSB7CisrICAgICAgICBESGVycihESF9G X0RIX0NPTVBVVEVfS0VZLCBESF9SX05PTl9GSVBTX01FVEhPRCk7CisrICAgICAgICByZXR1cm4g MDsKKysgICAgfQorKyNlbmRpZgorICAgICByZXR1cm4gZGgtPm1ldGgtPmNvbXB1dGVfa2V5KGtl eSwgcHViX2tleSwgZGgpOworIH0KKyAKKyBpbnQgREhfY29tcHV0ZV9rZXlfcGFkZGVkKHVuc2ln bmVkIGNoYXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJfa2V5LCBESCAqZGgpCisgeworICAgICBp bnQgcnYsIHBhZDsKKy0gICAgcnYgPSBkaC0+bWV0aC0+Y29tcHV0ZV9rZXkoa2V5LCBwdWJfa2V5 LCBkaCk7CisrICAgIHJ2ID0gREhfY29tcHV0ZV9rZXkoa2V5LCBwdWJfa2V5LCBkaCk7CisgICAg IGlmIChydiA8PSAwKQorICAgICAgICAgcmV0dXJuIHJ2OworICAgICBwYWQgPSBCTl9udW1fYnl0 ZXMoZGgtPnApIC0gcnY7CitAQCAtODIsNiArOTksMTQgQEAgc3RhdGljIGludCBnZW5lcmF0ZV9r ZXkoREggKmRoKQorICAgICBCTl9NT05UX0NUWCAqbW9udCA9IE5VTEw7CisgICAgIEJJR05VTSAq cHViX2tleSA9IE5VTEwsICpwcml2X2tleSA9IE5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQ UworKyAgICBpZiAoRklQU19tb2RlKCkKKysgICAgICAgICYmIChCTl9udW1fYml0cyhkaC0+cCkg PCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKKysgICAgICAgIERIZXJyKERI X0ZfR0VORVJBVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrICAgICAgICByZXR1 cm4gMDsKKysgICAgfQorKyNlbmRpZgorKworICAgICBpZiAoQk5fbnVtX2JpdHMoZGgtPnApID4g T1BFTlNTTF9ESF9NQVhfTU9EVUxVU19CSVRTKSB7CisgICAgICAgICBESGVycihESF9GX0dFTkVS QVRFX0tFWSwgREhfUl9NT0RVTFVTX1RPT19MQVJHRSk7CisgICAgICAgICByZXR1cm4gMDsKK0BA IC0xNzAsNiArMTk1LDEzIEBAIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAq a2UKKyAgICAgICAgIERIZXJyKERIX0ZfQ09NUFVURV9LRVksIERIX1JfTU9EVUxVU19UT09fTEFS R0UpOworICAgICAgICAgZ290byBlcnI7CisgICAgIH0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr ICAgIGlmIChGSVBTX21vZGUoKQorKyAgICAgICAgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9Q RU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkgeworKyAgICAgICAgREhlcnIoREhfRl9D T01QVVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKyAgICAgICAgZ290byBlcnI7 CisrICAgIH0KKysjZW5kaWYKKyAKKyAgICAgY3R4ID0gQk5fQ1RYX25ldygpOworICAgICBpZiAo Y3R4ID09IE5VTEwpCitAQCAtMjIxLDYgKzI1Myw5IEBAIHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4 cChjb25zdCBESCAqZGgsIEIKKyAKKyBzdGF0aWMgaW50IGRoX2luaXQoREggKmRoKQorIHsKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYK KyAgICAgZGgtPmZsYWdzIHw9IERIX0ZMQUdfQ0FDSEVfTU9OVF9QOworICAgICByZXR1cm4gMTsK KyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlw cyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2RzYS9kc2FfZXJyLmMKKy0tLSBvcGVuc3NsLTEu MS4xLXByZTgvY3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlwcwkyMDE4LTA2LTIwIDE2OjQ4OjEwLjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZHNhL2RzYV9lcnIu YwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwMjYyNDYzMiArMDIwMAorQEAgLTE2LDEyICsxNiwxNSBA QAorIHN0YXRpYyBjb25zdCBFUlJfU1RSSU5HX0RBVEEgRFNBX3N0cl9mdW5jdHNbXSA9IHsKKyAg ICAge0VSUl9QQUNLKEVSUl9MSUJfRFNBLCBEU0FfRl9EU0FQQVJBTVNfUFJJTlQsIDApLCAiRFNB cGFyYW1zX3ByaW50In0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElCX0RTQSwgRFNBX0ZfRFNBUEFS QU1TX1BSSU5UX0ZQLCAwKSwgIkRTQXBhcmFtc19wcmludF9mcCJ9LAorKyAgICB7RVJSX1BBQ0so RVJSX0xJQl9EU0EsIERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgMCksICJkc2FfYnVpbHRpbl9r ZXlnZW4ifSwKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJfRFNBLCBEU0FfRl9EU0FfQlVJTFRJTl9Q QVJBTUdFTiwgMCksCisgICAgICAiZHNhX2J1aWx0aW5fcGFyYW1nZW4ifSwKKyAgICAge0VSUl9Q QUNLKEVSUl9MSUJfRFNBLCBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTjIsIDApLAorICAgICAg ImRzYV9idWlsdGluX3BhcmFtZ2VuMiJ9LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9EU0EsIERT QV9GX0RTQV9ET19TSUdOLCAwKSwgIkRTQV9kb19zaWduIn0sCisgICAgIHtFUlJfUEFDSyhFUlJf TElCX0RTQSwgRFNBX0ZfRFNBX0RPX1ZFUklGWSwgMCksICJEU0FfZG9fdmVyaWZ5In0sCisrICAg IHtFUlJfUEFDSyhFUlJfTElCX0RTQSwgRFNBX0ZfRFNBX0dFTkVSQVRFX0tFWSwgMCksICJEU0Ff Z2VuZXJhdGVfa2V5In0sCisrICAgIHtFUlJfUEFDSyhFUlJfTElCX0RTQSwgRFNBX0ZfRFNBX0dF TkVSQVRFX1BBUkFNRVRFUlNfRVgsIDApLCAiRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgifSwK KyAgICAge0VSUl9QQUNLKEVSUl9MSUJfRFNBLCBEU0FfRl9EU0FfTUVUSF9EVVAsIDApLCAiRFNB X21ldGhfZHVwIn0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElCX0RTQSwgRFNBX0ZfRFNBX01FVEhf TkVXLCAwKSwgIkRTQV9tZXRoX25ldyJ9LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9EU0EsIERT QV9GX0RTQV9NRVRIX1NFVDFfTkFNRSwgMCksICJEU0FfbWV0aF9zZXQxX25hbWUifSwKK0BAIC01 MSw5ICs1NCwxMiBAQCBzdGF0aWMgY29uc3QgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfcmVhCisg ICAgIHtFUlJfUEFDSyhFUlJfTElCX0RTQSwgMCwgRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRSks CisgICAgICJpbnZhbGlkIGRpZ2VzdCB0eXBlIn0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElCX0RT QSwgMCwgRFNBX1JfSU5WQUxJRF9QQVJBTUVURVJTKSwgImludmFsaWQgcGFyYW1ldGVycyJ9LAor KyAgICB7RVJSX1BBQ0soRVJSX0xJQl9EU0EsIDAsIERTQV9SX0tFWV9TSVpFX0lOVkFMSUQpLCAi a2V5IHNpemUgaW52YWxpZCJ9LAorKyAgICB7RVJSX1BBQ0soRVJSX0xJQl9EU0EsIDAsIERTQV9S X0tFWV9TSVpFX1RPT19TTUFMTCksICJrZXkgc2l6ZSB0b28gc21hbGwifSwKKyAgICAge0VSUl9Q QUNLKEVSUl9MSUJfRFNBLCAwLCBEU0FfUl9NSVNTSU5HX1BBUkFNRVRFUlMpLCAibWlzc2luZyBw YXJhbWV0ZXJzIn0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElCX0RTQSwgMCwgRFNBX1JfTU9EVUxV U19UT09fTEFSR0UpLCAibW9kdWx1cyB0b28gbGFyZ2UifSwKKyAgICAge0VSUl9QQUNLKEVSUl9M SUJfRFNBLCAwLCBEU0FfUl9OT19QQVJBTUVURVJTX1NFVCksICJubyBwYXJhbWV0ZXJzIHNldCJ9 LAorKyAgICB7RVJSX1BBQ0soRVJSX0xJQl9EU0EsIDAsIERTQV9SX05PTl9GSVBTX0RTQV9NRVRI T0QpLCAibm9uIEZJUFMgRFNBIG1ldGhvZCJ9LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9EU0Es IDAsIERTQV9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUiksCisgICAgICJwYXJhbWV0ZXIgZW5j b2RpbmcgZXJyb3IifSwKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJfRFNBLCAwLCBEU0FfUl9RX05P VF9QUklNRSksICJxIG5vdCBwcmltZSJ9LAorZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2Ny eXB0by9kc2EvZHNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9kc2EvZHNh X2dlbi5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9kc2EvZHNhX2dlbi5jLmZpcHMJ MjAxOC0wNi0yMCAxNjo0ODoxMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXBy ZTgvY3J5cHRvL2RzYS9kc2FfZ2VuLmMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MDM2MjQ2NTYgKzAy MDAKK0BAIC0yMiwxMiArMjIsMjIgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisgI2lu Y2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisgI2luY2x1ZGUgImRzYV9sb2NsLmgiCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgaW50 IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0LCBpbnQgYml0cywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgaW50 IHNlZWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvdW50ZXJf cmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQk5fR0VOQ0IgKmNiKQorIHsKKysjIGlmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQ U19tb2RlKCkgJiYgIShyZXQtPm1ldGgtPmZsYWdzICYgRFNBX0ZMQUdfRklQU19NRVRIT0QpCisr ICAgICAgICAmJiAhKHJldC0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykpIHsKKysg ICAgICAgIERTQWVycihEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSU19FWCwgRFNBX1JfTk9O X0ZJUFNfRFNBX01FVEhPRCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyMgZW5kaWYK KyAgICAgaWYgKHJldC0+bWV0aC0+ZHNhX3BhcmFtZ2VuKQorICAgICAgICAgcmV0dXJuIHJldC0+ bWV0aC0+ZHNhX3BhcmFtZ2VuKHJldCwgYml0cywgc2VlZF9pbiwgc2VlZF9sZW4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcl9yZXQsIGhfcmV0LCBjYik7 CitAQCAtMzUsOSArNDUsMTUgQEAgaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAq cmV0LAorICAgICAgICAgY29uc3QgRVZQX01EICpldnBtZCA9IGJpdHMgPj0gMjA0OCA/IEVWUF9z aGEyNTYoKSA6IEVWUF9zaGExKCk7CisgICAgICAgICBzaXplX3QgcWJpdHMgPSBFVlBfTURfc2l6 ZShldnBtZCkgKiA4OworIAorKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgICAgICByZXR1cm4g ZHNhX2J1aWx0aW5fcGFyYW1nZW4yKHJldCwgYml0cywgcWJpdHMsIGV2cG1kLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgc2VlZF9pbiwgc2VlZF9sZW4sIC0xLCBOVUxMLCBjb3VudGVyX3Jl dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGhfcmV0LCBjYik7CisrIyBlbHNlCisgICAg ICAgICByZXR1cm4gZHNhX2J1aWx0aW5fcGFyYW1nZW4ocmV0LCBiaXRzLCBxYml0cywgZXZwbWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZF9pbiwgc2VlZF9sZW4s IE5VTEwsIGNvdW50ZXJfcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhfcmV0LCBjYik7CisrIyBlbmRpZgorICAgICB9CisgfQorIAorQEAgLTMxMCw3ICszMjYsNyBA QCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4yKERTQSAqcmV0LCBzaXplCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYikKKyB7CistICAgIGludCBvayA9 IC0xOworKyAgICBpbnQgb2sgPSAwOworICAgICB1bnNpZ25lZCBjaGFyICpzZWVkID0gTlVMTCwg KnNlZWRfdG1wID0gTlVMTDsKKyAgICAgdW5zaWduZWQgY2hhciBtZFtFVlBfTUFYX01EX1NJWkVd OworICAgICBpbnQgbWRzaXplOworQEAgLTMyNyw2ICszNDMsMjAgQEAgaW50IGRzYV9idWlsdGlu X3BhcmFtZ2VuMihEU0EgKnJldCwgc2l6ZQorICAgICBpZiAobWN0eCA9PSBOVUxMKQorICAgICAg ICAgZ290byBlcnI7CisgCisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0RTQV9CVUlMVElOX1BB UkFNR0VOMiwgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgIGdvdG8gZXJy OworKyAgICB9CisrCisrICAgIGlmIChGSVBTX21vZGUoKSAmJiAoTCAhPSAxMDI0IHx8IE4gIT0g MTYwKSAmJgorKyAgICAgICAgKEwgIT0gMjA0OCB8fCBOICE9IDIyNCkgJiYgKEwgIT0gMjA0OCB8 fCBOICE9IDI1NikgJiYKKysgICAgICAgIChMICE9IDMwNzIgfHwgTiAhPSAyNTYpKSB7CisrICAg ICAgICBEU0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4yLCBEU0FfUl9LRVlfU0laRV9J TlZBTElEKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrIyBlbmRpZgorKworICAgICBp ZiAoZXZwbWQgPT0gTlVMTCkgeworICAgICAgICAgaWYgKE4gPT0gMTYwKQorICAgICAgICAgICAg IGV2cG1kID0gRVZQX3NoYTEoKTsKK0BAIC00MjcsOSArNDU3LDEwIEBAIGludCBkc2FfYnVpbHRp bl9wYXJhbWdlbjIoRFNBICpyZXQsIHNpemUKKyAgICAgICAgICAgICAgICAgZ290byBlcnI7Cisg ICAgICAgICAgICAgLyogUHJvdmlkZWQgc2VlZCBkaWRuJ3QgcHJvZHVjZSBhIHByaW1lOiBlcnJv ciAqLworICAgICAgICAgICAgIGlmIChzZWVkX2luKSB7CistICAgICAgICAgICAgICAgIG9rID0g MDsKKy0gICAgICAgICAgICAgICAgRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOMiwg RFNBX1JfUV9OT1RfUFJJTUUpOworLSAgICAgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAg ICAgICAgICAgLyogRGlmZmVyZW50IHNlZWRfb3V0IHdpbGwgaW5kaWNhdGUgdGhhdCBzZWVkX2lu CisrICAgICAgICAgICAgICAgICAqIGRpZCBub3QgZ2VuZXJhdGUgcHJpbWVzLgorKyAgICAgICAg ICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgc2VlZF9pbiA9IE5VTEw7CisgICAgICAgICAg ICAgfQorIAorICAgICAgICAgICAgIC8qIGRvIGEgY2FsbGJhY2sgY2FsbCAqLworQEAgLTUxNSwx MSArNTQ2LDE0IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbjIoRFNBICpyZXQsIHNpemUKKyAg ICAgICAgICAgICBpZiAoY291bnRlciA+PSAoaW50KSg0ICogTCkpCisgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgfQorKyNpZiAwCisrICAgICAgICAvKiBDYW5ub3QgaGFwcGVuICov CisgICAgICAgICBpZiAoc2VlZF9pbikgeworICAgICAgICAgICAgIG9rID0gMDsKKyAgICAgICAg ICAgICBEU0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4yLCBEU0FfUl9JTlZBTElEX1BB UkFNRVRFUlMpOworICAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICAgfQorKyNlbmRpZgor ICAgICB9CisgIGVuZDoKKyAgICAgaWYgKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCAxKSkKK0BAIC01 OTAsNyArNjI0LDcgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuMihEU0EgKnJldCwgc2l6ZQor ICAgICAgICAgQk5fZnJlZShyZXQtPmcpOworICAgICAgICAgcmV0LT5nID0gQk5fZHVwKGcpOwor ICAgICAgICAgaWYgKHJldC0+cCA9PSBOVUxMIHx8IHJldC0+cSA9PSBOVUxMIHx8IHJldC0+ZyA9 PSBOVUxMKSB7CistICAgICAgICAgICAgb2sgPSAtMTsKKysgICAgICAgICAgICBvayA9IDA7Cisg ICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICB9CisgICAgICAgICBpZiAoY291bnRlcl9y ZXQgIT0gTlVMTCkKK0BAIC02MDgsMyArNjQyLDUzIEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdl bjIoRFNBICpyZXQsIHNpemUKKyAgICAgRVZQX01EX0NUWF9mcmVlKG1jdHgpOworICAgICByZXR1 cm4gb2s7CisgfQorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgRklQU19kc2FfYnVp bHRpbl9wYXJhbWdlbjIoRFNBICpyZXQsIHNpemVfdCBMLCBzaXplX3QgTiwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQg Y2hhciAqc2VlZF9pbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNl ZWRfbGVuLCBpbnQgaWR4LCB1bnNpZ25lZCBjaGFyICpzZWVkX291dCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYikKKyt7CisrICAg IHJldHVybiBkc2FfYnVpbHRpbl9wYXJhbWdlbjIocmV0LCBMLCBOLCBldnBtZCwgc2VlZF9pbiwg c2VlZF9sZW4sCisrICAgICAgICBpZHgsIHNlZWRfb3V0LCBjb3VudGVyX3JldCwgaF9yZXQsIGNi KTsKKyt9CisrCisraW50IEZJUFNfZHNhX3BhcmFtZ2VuX2NoZWNrX2coRFNBICpkc2EpCisrewor KyAgICBCTl9DVFggKmN0eDsKKysgICAgQklHTlVNICp0bXA7CisrICAgIEJOX01PTlRfQ1RYICpt b250ID0gTlVMTDsKKysgICAgaW50IHJ2ID0gLTE7CisrCisrICAgIGN0eCA9IEJOX0NUWF9uZXco KTsKKysgICAgaWYgKGN0eCA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIC0xOworKyAgICBCTl9D VFhfc3RhcnQoY3R4KTsKKysgICAgaWYgKEJOX2NtcChkc2EtPmcsIEJOX3ZhbHVlX29uZSgpKSA8 PSAwKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmIChCTl9jbXAoZHNhLT5nLCBkc2EtPnAp ID49IDApCisrICAgICAgICByZXR1cm4gMDsKKysgICAgdG1wID0gQk5fQ1RYX2dldChjdHgpOwor KyAgICBpZiAodG1wID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKChtb250 PUJOX01PTlRfQ1RYX25ldygpKSA9PSBOVUxMKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlm ICghQk5fTU9OVF9DVFhfc2V0KG1vbnQsZHNhLT5wLGN0eCkpCisrICAgICAgICBnb3RvIGVycjsK KysgICAgLyogV29yayBvdXQgZ15xIG1vZCBwICovCisrICAgIGlmICghQk5fbW9kX2V4cF9tb250 KHRtcCxkc2EtPmcsZHNhLT5xLCBkc2EtPnAsIGN0eCwgbW9udCkpCisrICAgICAgICBnb3RvIGVy cjsKKysgICAgaWYgKCFCTl9jbXAodG1wLCBCTl92YWx1ZV9vbmUoKSkpCisrICAgICAgICBydiA9 IDE7CisrICAgIGVsc2UKKysgICAgICAgIHJ2ID0gMDsKKysgZXJyOgorKyAgICBCTl9DVFhfZW5k KGN0eCk7CisrICAgIEJOX01PTlRfQ1RYX2ZyZWUobW9udCk7CisrICAgIEJOX0NUWF9mcmVlKGN0 eCk7CisrICAgIHJldHVybiBydjsKKyt9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEu MS4xLXByZTgvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5 cHRvL2RzYS9kc2Ffa2V5LmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2RzYS9kc2Ff a2V5LmMuZmlwcwkyMDE4LTA2LTIwIDE2OjQ4OjEwLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4xLjEtcHJlOC9jcnlwdG8vZHNhL2RzYV9rZXkuYwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQw MzYyNDY1NiArMDIwMAorQEAgLTEzLDEwICsxMyw0OSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+CisgI2luY2x1ZGUgImRzYV9sb2NsLmgiCisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMg aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrIyBpbmNsdWRlICJpbnRlcm5hbC9maXBzX2ludC5o IgorKworK3N0YXRpYyBpbnQgZmlwc19jaGVja19kc2EoRFNBICpkc2EpCisreworKyAgICBFVlBf UEtFWSAqcGs7CisrICAgIHVuc2lnbmVkIGNoYXIgdGJzW10gPSAiRFNBIFBhaXJ3aXNlIENoZWNr IERhdGEiOworKyAgICBpbnQgcmV0ID0gMDsKKysKKysgICAgaWYgKChwayA9IEVWUF9QS0VZX25l dygpKSA9PSBOVUxMKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIEVWUF9QS0VZX3NldDFf RFNBKHBrLCBkc2EpOworKworKyAgICBpZiAoZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0 YnMsIC0xLCBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMKSkKKysgICAgICAgIHJldCA9IDE7CisrCisr IGVycjoKKysgICAgaWYgKHJldCA9PSAwKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X0NIRUNLX0RTQSwgRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKKysgICAgICAgIGZpcHNf c2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysgICAgfQorKworKyAgICBpZiAocGspCisrICAgICAgICBF VlBfUEtFWV9mcmVlKHBrKTsKKysKKysgICAgcmV0dXJuIHJldDsKKyt9CisrCisrI2VuZGlmCisr Cisgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpOworIAorIGludCBEU0Ff Z2VuZXJhdGVfa2V5KERTQSAqZHNhKQorIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlm IChGSVBTX21vZGUoKSAmJiAhKGRzYS0+bWV0aC0+ZmxhZ3MgJiBEU0FfRkxBR19GSVBTX01FVEhP RCkKKysgICAgICAgICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkg eworKyAgICAgICAgRFNBZXJyKERTQV9GX0RTQV9HRU5FUkFURV9LRVksIERTQV9SX05PTl9GSVBT X0RTQV9NRVRIT0QpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysjZW5kaWYKKyAgICAg aWYgKGRzYS0+bWV0aC0+ZHNhX2tleWdlbikKKyAgICAgICAgIHJldHVybiBkc2EtPm1ldGgtPmRz YV9rZXlnZW4oZHNhKTsKKyAgICAgcmV0dXJuIGRzYV9idWlsdGluX2tleWdlbihkc2EpOworQEAg LTI4LDYgKzY3LDE0IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQor ICAgICBCTl9DVFggKmN0eCA9IE5VTEw7CisgICAgIEJJR05VTSAqcHViX2tleSA9IE5VTEwsICpw cml2X2tleSA9IE5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19t b2RlKCkgJiYgIShkc2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrICAgICAg ICAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNf QklUU19HRU4pKSB7CisrICAgICAgICBEU0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOLCBE U0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysj ZW5kaWYKKysKKyAgICAgaWYgKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCisgICAgICAg ICBnb3RvIGVycjsKKyAKK0BAIC02NSw2ICsxMTIsMTMgQEAgc3RhdGljIGludCBkc2FfYnVpbHRp bl9rZXlnZW4oRFNBICpkc2EpCisgCisgICAgIGRzYS0+cHJpdl9rZXkgPSBwcml2X2tleTsKKyAg ICAgZHNhLT5wdWJfa2V5ID0gcHViX2tleTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlm IChGSVBTX21vZGUoKSAmJiAhZmlwc19jaGVja19kc2EoZHNhKSkgeworKyAgICAgICAgZHNhLT5w dWJfa2V5ID0gTlVMTDsKKysgICAgICAgIGRzYS0+cHJpdl9rZXkgPSBOVUxMOworKyAgICAgICAg Z290byBlcnI7CisrICAgIH0KKysjZW5kaWYKKyAgICAgb2sgPSAxOworIAorICBlcnI6CitkaWZm IC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMgb3BlbnNz bC0xLjEuMS1wcmU4L2NyeXB0by9kc2EvZHNhX29zc2wuYworLS0tIG9wZW5zc2wtMS4xLjEtcHJl OC9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcwkyMDE4LTA2LTIwIDE2OjQ4OjEwLjAwMDAwMDAw MCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZHNhL2RzYV9vc3NsLmMJMjAx OC0wNy0yNSAxNzoyNjo1OC40MDM2MjQ2NTYgKzAyMDAKK0BAIC0xMyw2ICsxMyw5IEBACisgI2lu Y2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisgI2luY2x1ZGUgImRzYV9sb2NsLmgiCisgI2luY2x1ZGUg PG9wZW5zc2wvYXNuMS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25z dCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgRFNBICpkc2EpOworIHN0YXRpYyBpbnQg ZHNhX3NpZ25fc2V0dXBfbm9fZGlnZXN0KERTQSAqZHNhLCBCTl9DVFggKmN0eF9pbiwgQklHTlVN ICoqa2ludnAsCitAQCAtNjYsNiArNjksMTkgQEAgc3RhdGljIERTQV9TSUcgKmRzYV9kb19zaWdu KGNvbnN0IHVuc2lnbgorICAgICBEU0FfU0lHICpyZXQgPSBOVUxMOworICAgICBpbnQgcnYgPSAw OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVk KCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19TSUdOLCBGSVBTX1JfRklQU19T RUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgICAg aWYgKEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9X KQorKyAgICAgICAgJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01J Tl9NT0RVTFVTX0JJVFMpKSB7CisrICAgICAgICBEU0FlcnIoRFNBX0ZfRFNBX0RPX1NJR04sIERT QV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQor KyNlbmRpZgorKworICAgICBtID0gQk5fbmV3KCk7CisgICAgIHhyID0gQk5fbmV3KCk7CisgICAg IGlmIChtID09IE5VTEwgfHwgeHIgPT0gTlVMTCkKK0BAIC0yNjQsNiArMjgwLDE4IEBAIHN0YXRp YyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAorICAgICAgICAgRFNBZXJyKERTQV9G X0RTQV9ET19WRVJJRlksIERTQV9SX0JBRF9RX1ZBTFVFKTsKKyAgICAgICAgIHJldHVybiAtMTsK KyAgICAgfQorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFp bGVkKCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksIEZJUFNfUl9G SVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysKKysg ICAgaWYgKEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FM TE9XKQorKyAgICAgICAgJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKSB7CisrICAgICAgICBEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklG WSwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAg fQorKyNlbmRpZgorIAorICAgICBpZiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA+IE9QRU5TU0xfRFNB X01BWF9NT0RVTFVTX0JJVFMpIHsKKyAgICAgICAgIERTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZ LCBEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7CitAQCAtMzUyLDYgKzM4MCw5IEBAIHN0YXRpYyBp bnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAorIAorIHN0YXRpYyBpbnQgZHNhX2luaXQo RFNBICpkc2EpCisgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgRklQU19zZWxmdGVzdF9j aGVjaygpOworKyNlbmRpZgorICAgICBkc2EtPmZsYWdzIHw9IERTQV9GTEFHX0NBQ0hFX01PTlRf UDsKKyAgICAgcmV0dXJuIDE7CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0 by9kc2EvZHNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2RzYS9kc2Ff cG1ldGguYworLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jLmZp cHMJMjAxOC0wNi0yMCAxNjo0ODoxMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4x LXByZTgvY3J5cHRvL2RzYS9kc2FfcG1ldGguYwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwMzYyNDY1 NiArMDIwMAorQEAgLTIyMSw4ICsyMjEsOCBAQCBzdGF0aWMgaW50IHBrZXlfZHNhX3BhcmFtZ2Vu KEVWUF9QS0VZX0NUCisgICAgICAgICBCTl9HRU5DQl9mcmVlKHBjYik7CisgICAgICAgICByZXR1 cm4gMDsKKyAgICAgfQorLSAgICByZXQgPSBkc2FfYnVpbHRpbl9wYXJhbWdlbihkc2EsIGRjdHgt Pm5iaXRzLCBkY3R4LT5xYml0cywgZGN0eC0+cG1kLAorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBwY2IpOworKyAgICByZXQgPSBkc2Ff YnVpbHRpbl9wYXJhbWdlbjIoZHNhLCBkY3R4LT5uYml0cywgZGN0eC0+cWJpdHMsIGRjdHgtPnBt ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgLTEsIE5VTEwsIE5V TEwsIE5VTEwsIHBjYik7CisgICAgIEJOX0dFTkNCX2ZyZWUocGNiKTsKKyAgICAgaWYgKHJldCkK KyAgICAgICAgIEVWUF9QS0VZX2Fzc2lnbl9EU0EocGtleSwgZHNhKTsKK2RpZmYgLXVwIG9wZW5z c2wtMS4xLjEtcHJlOC9jcnlwdG8vZWMvZWNkaF9vc3NsLmMuZmlwcyBvcGVuc3NsLTEuMS4xLXBy ZTgvY3J5cHRvL2VjL2VjZGhfb3NzbC5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9l Yy9lY2RoX29zc2wuYy5maXBzCTIwMTgtMDYtMjAgMTY6NDg6MTAuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9lYy9lY2RoX29zc2wuYwkyMDE4LTA3LTI1IDE3 OjI2OjU4LjQwMzYyNDY1NiArMDIwMAorQEAgLTE5LDkgKzE5LDIwIEBACisgI2luY2x1ZGUgPG9w ZW5zc2wvZWMuaD4KKyAjaW5jbHVkZSAiZWNfbGNsLmgiCisgCisrI2lmZGVmIE9QRU5TU0xfRklQ UworKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgaW50IG9zc2xfZWNk aF9jb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICoqcHNlYywgc2l6ZV90ICpwc2VjbGVuLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRUNfUE9JTlQgKnB1Yl9rZXksIGNvbnN0IEVD X0tFWSAqZWNkaCkKKyB7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRUNESF9DT01QVVRFX0tF WSwgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgIHJldHVybiAtMTsKKysg ICAgfQorKyNlbmRpZgorKworICAgICBpZiAoZWNkaC0+Z3JvdXAtPm1ldGgtPmVjZGhfY29tcHV0 ZV9rZXkgPT0gTlVMTCkgeworICAgICAgICAgRUNlcnIoRUNfRl9PU1NMX0VDREhfQ09NUFVURV9L RVksIEVDX1JfQ1VSVkVfRE9FU19OT1RfU1VQUE9SVF9FQ0RIKTsKKyAgICAgICAgIHJldHVybiAw OworZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9lYy9lY2RzYV9vc3NsLmMuZmlw cyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2VjL2VjZHNhX29zc2wuYworLS0tIG9wZW5zc2wt MS4xLjEtcHJlOC9jcnlwdG8vZWMvZWNkc2Ffb3NzbC5jLmZpcHMJMjAxOC0wNi0yMCAxNjo0ODox MC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2VjL2VjZHNh X29zc2wuYwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwMzYyNDY1NiArMDIwMAorQEAgLTE1LDYgKzE1 LDEwIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZWMuaD4KKyAjaW5jbHVkZSAiZWNfbGNsLmgiCisg CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2Vu ZGlmCisrCisgaW50IG9zc2xfZWNkc2Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2hh ciAqZGdzdCwgaW50IGRsZW4sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpz aWcsIHVuc2lnbmVkIGludCAqc2lnbGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgQklH TlVNICpraW52LCBjb25zdCBCSUdOVU0gKnIsIEVDX0tFWSAqZWNrZXkpCitAQCAtMjA0LDYgKzIw OCwxMyBAQCBFQ0RTQV9TSUcgKm9zc2xfZWNkc2Ffc2lnbl9zaWcoY29uc3QgdW5zCisgICAgIEVD RFNBX1NJRyAqcmV0OworICAgICBjb25zdCBCSUdOVU0gKnByaXZfa2V5OworIAorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKKysgICAgICAg IEZJUFNlcnIoRklQU19GX09TU0xfRUNEU0FfU0lHTl9TSUcsIEZJUFNfUl9GSVBTX1NFTEZURVNU X0ZBSUxFRCk7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKyNlbmRpZgorKworICAg ICBncm91cCA9IEVDX0tFWV9nZXQwX2dyb3VwKGVja2V5KTsKKyAgICAgcHJpdl9rZXkgPSBFQ19L RVlfZ2V0MF9wcml2YXRlX2tleShlY2tleSk7CisgCitAQCAtNDA4LDYgKzQxOSwxMyBAQCBpbnQg b3NzbF9lY2RzYV92ZXJpZnlfc2lnKGNvbnN0IHVuc2lnbmVkCisgICAgIGNvbnN0IEVDX0dST1VQ ICpncm91cDsKKyAgICAgY29uc3QgRUNfUE9JTlQgKnB1Yl9rZXk7CisgCisrI2lmZGVmIE9QRU5T U0xfRklQUworKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgRklQ U2VycihGSVBTX0ZfT1NTTF9FQ0RTQV9WRVJJRllfU0lHLCBGSVBTX1JfRklQU19TRUxGVEVTVF9G QUlMRUQpOworKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysjZW5kaWYKKysKKyAgICAg LyogY2hlY2sgaW5wdXQgdmFsdWVzICovCisgICAgIGlmIChlY2tleSA9PSBOVUxMIHx8IChncm91 cCA9IEVDX0tFWV9nZXQwX2dyb3VwKGVja2V5KSkgPT0gTlVMTCB8fAorICAgICAgICAgKHB1Yl9r ZXkgPSBFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KGVja2V5KSkgPT0gTlVMTCB8fCBzaWcgPT0gTlVM TCkgeworZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9lYy9lY19rZXkuYy5maXBz IG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZWMvZWNfa2V5LmMKKy0tLSBvcGVuc3NsLTEuMS4x LXByZTgvY3J5cHRvL2VjL2VjX2tleS5jLmZpcHMJMjAxOC0wNi0yMCAxNjo0ODoxMC4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2VjL2VjX2tleS5jCTIwMTgt MDctMjUgMTc6MjY6NTguNDAzNjI0NjU2ICswMjAwCitAQCAtMTc4LDE0ICsxNzgsNjIgQEAgRU5H SU5FICpFQ19LRVlfZ2V0MF9lbmdpbmUoY29uc3QgRUNfS0VZCisgICAgIHJldHVybiBlY2tleS0+ ZW5naW5lOworIH0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrIyBpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjIGluY2x1ZGUgImludGVybmFsL2ZpcHNfaW50LmgiCisrCisrc3RhdGlj IGludCBmaXBzX2NoZWNrX2VjKEVDX0tFWSAqa2V5KQorK3sKKysgICAgRVZQX1BLRVkgKnBrOwor KyAgICB1bnNpZ25lZCBjaGFyIHRic1tdID0gIkVDRFNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOwor KyAgICBpbnQgcmV0ID0gMDsKKysKKysgICAgaWYgKCFFQ19LRVlfY2FuX3NpZ24oa2V5KSkgLyog bm8gdGVzdCBmb3Igbm9uLXNpZ25pbmcga2V5cyAqLworKyAgICAgICAgcmV0dXJuIDE7CisrCisr ICAgIGlmICgocGsgPSBFVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJy OworKworKyAgICBFVlBfUEtFWV9zZXQxX0VDX0tFWShwaywga2V5KTsKKysKKysgICAgaWYgKGZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwgTlVMTCwgMCwgTlVMTCwgMCwgTlVM TCkpCisrICAgICAgICByZXQgPSAxOworKworKyBlcnI6CisrICAgIGlmIChyZXQgPT0gMCkgewor KyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19FQywgRklQU19SX1BBSVJXSVNFX1RF U1RfRkFJTEVEKTsKKysgICAgICAgIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysgICAgfQor KyAgICBpZiAocGspCisrICAgICAgICBFVlBfUEtFWV9mcmVlKHBrKTsKKysgICAgcmV0dXJuIHJl dDsKKyt9CisrCisrI2VuZGlmCisrCisgaW50IEVDX0tFWV9nZW5lcmF0ZV9rZXkoRUNfS0VZICpl Y2tleSkKKyB7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19zZWxmdGVzdF9m YWlsZWQoKSkgeworKyAgICAgICAgRUNlcnIoRUNfRl9FQ19LRVlfR0VORVJBVEVfS0VZLCBFQ19S X05PVF9JTklUSUFMSVpFRCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyNlbmRpZgor ICAgICBpZiAoZWNrZXkgPT0gTlVMTCB8fCBlY2tleS0+Z3JvdXAgPT0gTlVMTCkgeworICAgICAg ICAgRUNlcnIoRUNfRl9FQ19LRVlfR0VORVJBVEVfS0VZLCBFUlJfUl9QQVNTRURfTlVMTF9QQVJB TUVURVIpOworICAgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKy0gICAgaWYgKGVja2V5LT5tZXRo LT5rZXlnZW4gIT0gTlVMTCkKKy0gICAgICAgIHJldHVybiBlY2tleS0+bWV0aC0+a2V5Z2VuKGVj a2V5KTsKKysgICAgaWYgKGVja2V5LT5tZXRoLT5rZXlnZW4gIT0gTlVMTCkgeworKyAgICAgICAg aW50IHJ2ID0gZWNrZXktPm1ldGgtPmtleWdlbihlY2tleSk7CisrCisrI2lmZGVmIE9QRU5TU0xf RklQUworKyAgICAgICAgaWYgKHJ2ID4gMCAmJiBGSVBTX21vZGUoKSkgeworKyAgICAgICAgICAg IHJ2ID0gZmlwc19jaGVja19lYyhlY2tleSk7CisrICAgICAgICB9CisrI2VuZGlmCisrICAgICAg ICByZXR1cm4gcnY7CisrICAgIH0KKyAgICAgRUNlcnIoRUNfRl9FQ19LRVlfR0VORVJBVEVfS0VZ LCBFQ19SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEKTsKKyAgICAgcmV0dXJuIDA7CisgfQorZGlm ZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9ldnAvY19hbGxjLmMuZmlwcyBvcGVuc3Ns LTEuMS4xLXByZTgvY3J5cHRvL2V2cC9jX2FsbGMuYworLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9j cnlwdG8vZXZwL2NfYWxsYy5jLmZpcHMJMjAxOC0wNi0yMCAxNjo0ODoxMC4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDE4LTA3LTI1 IDE3OjI2OjU4LjQwNDYyNDY4MCArMDIwMAorQEAgLTE3LDYgKzE3LDkgQEAKKyB2b2lkIG9wZW5z c2xfYWRkX2FsbF9jaXBoZXJzX2ludCh2b2lkKQorIHsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrICAgIGlmICghRklQU19tb2RlKCkpIHsKKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9f REVTCisgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2ZiKCkpOworICAgICBFVlBfYWRkX2Np cGhlcihFVlBfZGVzX2NmYjEoKSk7CitAQCAtMjYzLDQgKzI2Niw3MCBAQCB2b2lkIG9wZW5zc2xf YWRkX2FsbF9jaXBoZXJzX2ludCh2b2lkKQorICAgICBFVlBfYWRkX2NpcGhlcihFVlBfY2hhY2hh MjBfcG9seTEzMDUoKSk7CisgIyBlbmRpZgorICNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysgICAgfSBlbHNlIHsKKysjIGlmbmRlZiBPUEVOU1NMX05PX0RFUworKyAgICAgICAgRVZQX2Fk ZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NmYigpKTsKKysKKysgICAgICAgIEVWUF9hZGRfY2lwaGVy KEVWUF9kZXNfZWRlM19vZmIoKSk7CisrCisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZTNfY2JjKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2VkZTNf Y2JjLCAiREVTMyIpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2VkZTNf Y2JjLCAiZGVzMyIpOworKworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzKCkp OworKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2VkZTNfZWNiLCAiREVTLUVE RTMtRUNCIik7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9kZXNfZWRlM19lY2Is ICJkZXMtZWRlMy1lY2IiKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM193 cmFwKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05faWRfc21pbWVfYWxnX0NN UzNERVN3cmFwLCAiZGVzMy13cmFwIik7CisrIyBlbmRpZgorKworKyMgaWZuZGVmIE9QRU5TU0xf Tk9fQUVTCisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9lY2IoKSk7CisrICAg ICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7CisrICAgICAgICBFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzEyOF9jZmIoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzEyOF9jZmIxKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2Zi OCgpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X29mYigpKTsKKysgICAg ICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2N0cigpKTsKKysgICAgICAgIEVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMTI4X2djbSgpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMTI4X3h0cygpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NjbSgp KTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3dyYXAoKSk7CisrICAgICAg ICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9pZF9hZXMxMjhfd3JhcCwgImFlczEyOC13cmFwIik7 CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF93cmFwX3BhZCgpKTsKKysgICAg ICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCAiQUVTMTI4Iik7CisrICAg ICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywgImFlczEyOCIpOworKyAg ICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfZWNiKCkpOworKyAgICAgICAgRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18xOTJfY2ZiKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2Zi MSgpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYjgoKSk7CisrICAg ICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9vZmIoKSk7CisrICAgICAgICBFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzE5Ml9jdHIoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzE5Ml9nY20oKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jY20o KSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml93cmFwKCkpOworKyAgICAg ICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05faWRfYWVzMTkyX3dyYXAsICJhZXMxOTItd3JhcCIp OworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfd3JhcF9wYWQoKSk7CisrICAg ICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywgIkFFUzE5MiIpOworKyAg ICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMsICJhZXMxOTIiKTsKKysg ICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2VjYigpKTsKKysgICAgICAgIEVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMjU2X2NmYigpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2Nm YjEoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmI4KCkpOworKyAg ICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfb2ZiKCkpOworKyAgICAgICAgRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18yNTZfY3RyKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18yNTZfZ2NtKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfeHRz KCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2NtKCkpOworKyAgICAg ICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfd3JhcCgpKTsKKysgICAgICAgIEVWUF9hZGRf Y2lwaGVyX2FsaWFzKFNOX2lkX2FlczI1Nl93cmFwLCAiYWVzMjU2LXdyYXAiKTsKKysgICAgICAg IEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3dyYXBfcGFkKCkpOworKyAgICAgICAgRVZQX2Fk ZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsICJBRVMyNTYiKTsKKysgICAgICAgIEVWUF9h ZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCAiYWVzMjU2Iik7CisrIyBlbmRpZgorKyAg ICB9CisrI2VuZGlmCisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9ldnAv Y19hbGxkLmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2V2cC9jX2FsbGQuYworLS0t IG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZXZwL2NfYWxsZC5jLmZpcHMJMjAxOC0wNi0yMCAx Njo0ODoxMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2V2 cC9jX2FsbGQuYwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwNDYyNDY4MCArMDIwMAorQEAgLTE2LDYg KzE2LDkgQEAKKyAKKyB2b2lkIG9wZW5zc2xfYWRkX2FsbF9kaWdlc3RzX2ludCh2b2lkKQorIHsK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmICghRklQU19tb2RlKCkpIHsKKysjZW5kaWYK KyAjaWZuZGVmIE9QRU5TU0xfTk9fTUQ0CisgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9tZDQoKSk7 CisgI2VuZGlmCitAQCAtNTcsNCArNjAsMjQgQEAgdm9pZCBvcGVuc3NsX2FkZF9hbGxfZGlnZXN0 c19pbnQodm9pZCkKKyAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTNfNTEyKCkpOworICAgICBF VlBfYWRkX2RpZ2VzdChFVlBfc2hha2UxMjgoKSk7CisgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9z aGFrZTI1NigpKTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIH0gZWxzZSB7CisrICAgICAg ICBFVlBfYWRkX2RpZ2VzdChFVlBfbWQ1X3NoYTEoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2Vz dChFVlBfc2hhMSgpKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEsICJz c2wzLXNoYTEiKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNB RW5jcnlwdGlvbiwgU05fc2hhMVdpdGhSU0EpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQ X3NoYTIyNCgpKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7CisrICAg ICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdl c3QoRVZQX3NoYTUxMigpKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1MTJfMjI0 KCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMl8yNTYoKSk7CisrICAgICAg ICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhM18yMjQoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2Vz dChFVlBfc2hhM18yNTYoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhM18zODQo KSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhM181MTIoKSk7CisrICAgICAgICBF VlBfYWRkX2RpZ2VzdChFVlBfc2hha2UxMjgoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChF VlBfc2hha2UyNTYoKSk7CisrICAgIH0KKysjZW5kaWYKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEu MS4xLXByZTgvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlw dG8vZXZwL2RpZ2VzdC5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9ldnAvZGlnZXN0 LmMuZmlwcwkyMDE4LTA2LTIwIDE2OjQ4OjEwLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4xLjEtcHJlOC9jcnlwdG8vZXZwL2RpZ2VzdC5jCTIwMTgtMDctMjUgMTc6MjY6NTguNDA0NjI0 NjgwICswMjAwCitAQCAtMTQsNiArMTQsOSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5o PgorICNpbmNsdWRlICJpbnRlcm5hbC9ldnBfaW50LmgiCisgI2luY2x1ZGUgImV2cF9sb2NsLmgi CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2Vu ZGlmCisgCisgLyogVGhpcyBjYWxsIGZyZWVzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhl IGNvbnRleHQgKi8KKyBpbnQgRVZQX01EX0NUWF9yZXNldChFVlBfTURfQ1RYICpjdHgpCitAQCAt NjEsNiArNjQsMTIgQEAgaW50IEVWUF9EaWdlc3RJbml0KEVWUF9NRF9DVFggKmN0eCwgY29ucwor IGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IEVWUF9NRCAqdHlw ZSwgRU5HSU5FICppbXBsKQorIHsKKyAgICAgRVZQX01EX0NUWF9jbGVhcl9mbGFncyhjdHgsIEVW UF9NRF9DVFhfRkxBR19DTEVBTkVEKTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChG SVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9FVlBfRElH RVNUSU5JVF9FWCwgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgIHJldHVy biAwOworKyAgICB9CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorICAgICAv KgorICAgICAgKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQg b24gIkZpbmFsIidkIGNvbnRleHRzIHNvCitAQCAtMTE0LDYgKzEyMywxNSBAQCBpbnQgRVZQX0Rp Z2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCisgICAgIH0KKyAjZW5kaWYKKyAgICAgaWYg KGN0eC0+ZGlnZXN0ICE9IHR5cGUpIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgICAgICBp ZiAoRklQU19tb2RlKCkpIHsKKysgICAgICAgICAgICBpZiAoISh0eXBlLT5mbGFncyAmIEVWUF9N RF9GTEFHX0ZJUFMpCisrICAgICAgICAgICAgICAgICYmICEoY3R4LT5mbGFncyAmIEVWUF9NRF9D VFhfRkxBR19OT05fRklQU19BTExPVykpIHsKKysgICAgICAgICAgICAgICAgRVZQZXJyKEVWUF9G X0VWUF9ESUdFU1RJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7CisrICAgICAgICAg ICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysjZW5kaWYKKyAg ICAgICAgIGlmIChjdHgtPmRpZ2VzdCAmJiBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpIHsKKyAgICAg ICAgICAgICBPUEVOU1NMX2NsZWFyX2ZyZWUoY3R4LT5tZF9kYXRhLCBjdHgtPmRpZ2VzdC0+Y3R4 X3NpemUpOworICAgICAgICAgICAgIGN0eC0+bWRfZGF0YSA9IE5VTEw7CitAQCAtMTQ1LDYgKzE2 Myw5IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKKyAKKyBpbnQg RVZQX0RpZ2VzdFVwZGF0ZShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVf dCBjb3VudCkKKyB7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBGSVBTX3NlbGZ0ZXN0X2No ZWNrKCk7CisrI2VuZGlmCisgICAgIHJldHVybiBjdHgtPnVwZGF0ZShjdHgsIGRhdGEsIGNvdW50 KTsKKyB9CisgCitAQCAtMTYyLDYgKzE4Myw5IEBAIGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQ X01EX0NUWCAqY3R4LAorIHsKKyAgICAgaW50IHJldDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAgICAgT1BFTlNTTF9hc3Nl cnQoY3R4LT5kaWdlc3QtPm1kX3NpemUgPD0gRVZQX01BWF9NRF9TSVpFKTsKKyAgICAgcmV0ID0g Y3R4LT5kaWdlc3QtPmZpbmFsKGN0eCwgbWQpOworICAgICBpZiAoc2l6ZSAhPSBOVUxMKQorZGlm ZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9ldnAvZV9hZXMuYy5maXBzIG9wZW5zc2wt MS4xLjEtcHJlOC9jcnlwdG8vZXZwL2VfYWVzLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5 cHRvL2V2cC9lX2Flcy5jLmZpcHMJMjAxOC0wNi0yMCAxNjo0ODoxMC4wMDAwMDAwMDAgKzAyMDAK KysrKyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2V2cC9lX2Flcy5jCTIwMTgtMDctMjUgMTc6 MjY6NTguNDA0NjI0NjgwICswMjAwCitAQCAtMjc3Niw5ICsyNzc2LDkgQEAgc3RhdGljIGludCBh ZXNfY3RyX2NpcGhlcihFVlBfQ0lQSEVSX0NUWAorICAgICByZXR1cm4gMTsKKyB9CisgCistQkxP Q0tfQ0lQSEVSX2dlbmVyaWNfcGFjayhOSURfYWVzLCAxMjgsIDApCistICAgIEJMT0NLX0NJUEhF Ul9nZW5lcmljX3BhY2soTklEX2FlcywgMTkyLCAwKQorLSAgICBCTE9DS19DSVBIRVJfZ2VuZXJp Y19wYWNrKE5JRF9hZXMsIDI1NiwgMCkKKytCTE9DS19DSVBIRVJfZ2VuZXJpY19wYWNrKE5JRF9h ZXMsIDEyOCwgRVZQX0NJUEhfRkxBR19GSVBTKQorKyAgICBCTE9DS19DSVBIRVJfZ2VuZXJpY19w YWNrKE5JRF9hZXMsIDE5MiwgRVZQX0NJUEhfRkxBR19GSVBTKQorKyAgICBCTE9DS19DSVBIRVJf Z2VuZXJpY19wYWNrKE5JRF9hZXMsIDI1NiwgRVZQX0NJUEhfRkxBR19GSVBTKQorIAorIHN0YXRp YyBpbnQgYWVzX2djbV9jbGVhbnVwKEVWUF9DSVBIRVJfQ1RYICpjKQorIHsKK0BAIC0yODI0LDYg KzI4MjQsMTEgQEAgc3RhdGljIGludCBhZXNfZ2NtX2N0cmwoRVZQX0NJUEhFUl9DVFggKgorICAg ICBjYXNlIEVWUF9DVFJMX0FFQURfU0VUX0lWTEVOOgorICAgICAgICAgaWYgKGFyZyA8PSAwKQor ICAgICAgICAgICAgIHJldHVybiAwOworKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgICAgICBp ZiAoRklQU19tb2RlKCkgJiYgIShjLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpCisrICAgICAgICAgICAgJiYgYXJnIDwgMTIpCisrICAgICAgICAgICAgcmV0dXJuIDA7Cisr IyBlbmRpZgorICAgICAgICAgLyogQWxsb2NhdGUgbWVtb3J5IGZvciBJViBpZiBuZWVkZWQgKi8K KyAgICAgICAgIGlmICgoYXJnID4gRVZQX01BWF9JVl9MRU5HVEgpICYmIChhcmcgPiBnY3R4LT5p dmxlbikpIHsKKyAgICAgICAgICAgICBpZiAoZ2N0eC0+aXYgIT0gYy0+aXYpCitAQCAtMzI3Mywx MSArMzI3OCwxNCBAQCBzdGF0aWMgaW50IGFlc19nY21fY2lwaGVyKEVWUF9DSVBIRVJfQ1RYCisg ICAgICAgICAgICAgICAgIHwgRVZQX0NJUEhfQ1VTVE9NX0NPUFkpCisgCisgQkxPQ0tfQ0lQSEVS X2N1c3RvbShOSURfYWVzLCAxMjgsIDEsIDEyLCBnY20sIEdDTSwKKy0gICAgICAgICAgICAgICAg ICAgIEVWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIgfCBDVVNUT01fRkxBR1MpCisrICAgICAgICAg ICAgICAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFMgfCBFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQSEVS IHwKKysgICAgICAgICAgICAgICAgICAgIENVU1RPTV9GTEFHUykKKyAgICAgQkxPQ0tfQ0lQSEVS X2N1c3RvbShOSURfYWVzLCAxOTIsIDEsIDEyLCBnY20sIEdDTSwKKy0gICAgICAgICAgICAgICAg ICAgIEVWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIgfCBDVVNUT01fRkxBR1MpCisrICAgICAgICAg ICAgICAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFMgfCBFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQSEVS IHwKKysgICAgICAgICAgICAgICAgICAgIENVU1RPTV9GTEFHUykKKyAgICAgQkxPQ0tfQ0lQSEVS X2N1c3RvbShOSURfYWVzLCAyNTYsIDEsIDEyLCBnY20sIEdDTSwKKy0gICAgICAgICAgICAgICAg ICAgIEVWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIgfCBDVVNUT01fRkxBR1MpCisrICAgICAgICAg ICAgICAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFMgfCBFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQSEVS IHwKKysgICAgICAgICAgICAgICAgICAgIENVU1RPTV9GTEFHUykKKyAKKyBzdGF0aWMgaW50IGFl c194dHNfY3RybChFVlBfQ0lQSEVSX0NUWCAqYywgaW50IHR5cGUsIGludCBhcmcsIHZvaWQgKnB0 cikKKyB7CitAQCAtMzQxMiw2ICszNDIwLDE0IEBAIHN0YXRpYyBpbnQgYWVzX3h0c19jaXBoZXIo RVZQX0NJUEhFUl9DVFgKKyAgICAgICAgIHJldHVybiAwOworICAgICBpZiAoIW91dCB8fCAhaW4g fHwgbGVuIDwgQUVTX0JMT0NLX1NJWkUpCisgICAgICAgICByZXR1cm4gMDsKKysjIGlmZGVmIE9Q RU5TU0xfRklQUworKyAgICAvKiBSZXF1aXJlbWVudCBvZiBTUDgwMC0zOEUgKi8KKysgICAgaWYg KEZJUFNfbW9kZSgpICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpICYmCisrICAgICAgICAobGVuID4gKDFVTCA8PCAyMCkgKiAxNikpIHsKKysgICAgICAgIEVW UGVycihFVlBfRl9BRVNfWFRTX0NJUEhFUiwgRVZQX1JfVE9PX0xBUkdFKTsKKysgICAgICAgIHJl dHVybiAwOworKyAgICB9CisrIyBlbmRpZgorICAgICBpZiAoeGN0eC0+c3RyZWFtKQorICAgICAg ICAgKCp4Y3R4LT5zdHJlYW0pIChpbiwgb3V0LCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHhjdHgtPnh0cy5rZXkxLCB4Y3R4LT54dHMua2V5MiwKK0BAIC0zNDI5LDggKzM0NDUsMTAg QEAgc3RhdGljIGludCBhZXNfeHRzX2NpcGhlcihFVlBfQ0lQSEVSX0NUWAorICAgICAgICAgICAg ICAgICAgICAgICAgICB8IEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQgfCBFVlBfQ0lQSF9DVFJM X0lOSVQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVWUF9DSVBIX0NVU1RPTV9DT1BZ KQorIAorLUJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywgMTI4LCAxLCAxNiwgeHRzLCBYVFMs IFhUU19GTEFHUykKKy0gICAgQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLCAyNTYsIDEsIDE2 LCB4dHMsIFhUUywgWFRTX0ZMQUdTKQorK0JMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywgMTI4 LCAxLCAxNiwgeHRzLCBYVFMsCisrICAgICAgICAgICAgICAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJ UFMgfCBYVFNfRkxBR1MpCisrICAgIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywgMjU2LCAx LCAxNiwgeHRzLCBYVFMsCisrICAgICAgICAgICAgICAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFMg fCBYVFNfRkxBR1MpCisgCisgc3RhdGljIGludCBhZXNfY2NtX2N0cmwoRVZQX0NJUEhFUl9DVFgg KmMsIGludCB0eXBlLCBpbnQgYXJnLCB2b2lkICpwdHIpCisgeworQEAgLTM2OTUsMTEgKzM3MTMs MTEgQEAgc3RhdGljIGludCBhZXNfY2NtX2NpcGhlcihFVlBfQ0lQSEVSX0NUWAorICNkZWZpbmUg YWVzX2NjbV9jbGVhbnVwIE5VTEwKKyAKKyBCTE9DS19DSVBIRVJfY3VzdG9tKE5JRF9hZXMsIDEy OCwgMSwgMTIsIGNjbSwgQ0NNLAorLSAgICAgICAgICAgICAgICAgICAgRVZQX0NJUEhfRkxBR19B RUFEX0NJUEhFUiB8IENVU1RPTV9GTEFHUykKKysgICAgICAgICAgICAgICAgICAgIEVWUF9DSVBI X0ZMQUdfRklQUyB8IEVWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIgfCBDVVNUT01fRkxBR1MpCisg ICAgIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywgMTkyLCAxLCAxMiwgY2NtLCBDQ00sCist ICAgICAgICAgICAgICAgICAgICAgICAgRVZQX0NJUEhfRkxBR19BRUFEX0NJUEhFUiB8IENVU1RP TV9GTEFHUykKKysgICAgICAgICAgICAgICAgICAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFMgfCBF VlBfQ0lQSF9GTEFHX0FFQURfQ0lQSEVSIHwgQ1VTVE9NX0ZMQUdTKQorICAgICBCTE9DS19DSVBI RVJfY3VzdG9tKE5JRF9hZXMsIDI1NiwgMSwgMTIsIGNjbSwgQ0NNLAorLSAgICAgICAgICAgICAg ICAgICAgICAgIEVWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIgfCBDVVNUT01fRkxBR1MpCisrICAg ICAgICAgICAgICAgICAgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTIHwgRVZQX0NJUEhfRkxBR19B RUFEX0NJUEhFUiB8IENVU1RPTV9GTEFHUykKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CisgICAgIHVu aW9uIHsKK0BAIC0zNzkyLDcgKzM4MTAsNyBAQCBzdGF0aWMgaW50IGFlc193cmFwX2NpcGhlcihF VlBfQ0lQSEVSX0NUCisgICAgIHJldHVybiBydiA/IChpbnQpcnYgOiAtMTsKKyB9CisgCistI2Rl ZmluZSBXUkFQX0ZMQUdTICAgICAgKEVWUF9DSVBIX1dSQVBfTU9ERSBcCisrI2RlZmluZSBXUkFQ X0ZMQUdTICAgICAgKEVWUF9DSVBIX1dSQVBfTU9ERSB8IEVWUF9DSVBIX0ZMQUdfRklQUyBcCisg ICAgICAgICAgICAgICAgIHwgRVZQX0NJUEhfQ1VTVE9NX0lWIHwgRVZQX0NJUEhfRkxBR19DVVNU T01fQ0lQSEVSIFwKKyAgICAgICAgICAgICAgICAgfCBFVlBfQ0lQSF9BTFdBWVNfQ0FMTF9JTklU IHwgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCisgCitkaWZmIC11cCBvcGVuc3NsLTEuMS4x LXByZTgvY3J5cHRvL2V2cC9lX2RlczMuYy5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8v ZXZwL2VfZGVzMy5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9ldnAvZV9kZXMzLmMu ZmlwcwkyMDE4LTA2LTIwIDE2OjQ4OjEwLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4x LjEtcHJlOC9jcnlwdG8vZXZwL2VfZGVzMy5jCTIwMTgtMDctMjUgMTc6MjY6NTguNDA1NjI0NzA0 ICswMjAwCitAQCAtMjExLDE2ICsyMTEsMTkgQEAgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwg REVTX0VERV9LRVksCisgIyBkZWZpbmUgZGVzX2VkZTNfY2JjX2NpcGhlciBkZXNfZWRlX2NiY19j aXBoZXIKKyAjIGRlZmluZSBkZXNfZWRlM19lY2JfY2lwaGVyIGRlc19lZGVfZWNiX2NpcGhlcgor ICAgICBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlMywgREVTX0VERV9LRVksIE5JRF9kZXNfZWRl MywgOCwgMjQsIDgsIDY0LAorLSAgICAgICAgICAgICAgICAgIEVWUF9DSVBIX1JBTkRfS0VZIHwg RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCistICAgICAgICAgICAgICAgICAgZGVzX2VkZTNf aW5pdF9rZXksIE5VTEwsIE5VTEwsIE5VTEwsIGRlczNfY3RybCkKKysgICAgICAgICAgICAgICAg ICBFVlBfQ0lQSF9SQU5EX0tFWSB8IEVWUF9DSVBIX0ZMQUdfRklQUyB8CisrICAgICAgICAgICAg ICAgICAgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsIGRlc19lZGUzX2luaXRfa2V5LCBOVUxM LCBOVUxMLCBOVUxMLAorKyAgICAgICAgICAgICAgICAgIGRlczNfY3RybCkKKyAKKyAgICAgQkxP Q0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsIERFU19FREVfS0VZLCBOSURfZGVzX2VkZTMsIDI0 LCA4LCAxLAorLSAgICAgICAgICAgICAgICAgICAgIEVWUF9DSVBIX1JBTkRfS0VZIHwgRVZQX0NJ UEhfRkxBR19ERUZBVUxUX0FTTjEsCistICAgICAgICAgICAgICAgICAgICAgZGVzX2VkZTNfaW5p dF9rZXksIE5VTEwsIE5VTEwsIE5VTEwsIGRlczNfY3RybCkKKysgICAgICAgICAgICAgICAgICAg ICBFVlBfQ0lQSF9SQU5EX0tFWSB8IEVWUF9DSVBIX0ZMQUdfRklQUyB8CisrICAgICAgICAgICAg ICAgICAgICAgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsIGRlc19lZGUzX2luaXRfa2V5LCBO VUxMLCBOVUxMLAorKyAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGRlczNfY3RybCkKKyAKKyAg ICAgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsIERFU19FREVfS0VZLCBOSURfZGVzX2Vk ZTMsIDI0LCA4LCA4LAorLSAgICAgICAgICAgICAgICAgICAgIEVWUF9DSVBIX1JBTkRfS0VZIHwg RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCistICAgICAgICAgICAgICAgICAgICAgZGVzX2Vk ZTNfaW5pdF9rZXksIE5VTEwsIE5VTEwsIE5VTEwsIGRlczNfY3RybCkKKysgICAgICAgICAgICAg ICAgICAgICBFVlBfQ0lQSF9SQU5EX0tFWSB8IEVWUF9DSVBIX0ZMQUdfRklQUyB8CisrICAgICAg ICAgICAgICAgICAgICAgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsIGRlc19lZGUzX2luaXRf a2V5LCBOVUxMLCBOVUxMLAorKyAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGRlczNfY3RybCkK KyAKKyBzdGF0aWMgaW50IGRlc19lZGVfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29u c3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJl OC9jcnlwdG8vZXZwL2VfbnVsbC5jLmZpcHMgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9ldnAv ZV9udWxsLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2V2cC9lX251bGwuYy5maXBz CTIwMTgtMDYtMjAgMTY6NDg6MTAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1w cmU4L2NyeXB0by9ldnAvZV9udWxsLmMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MDU2MjQ3MDQgKzAy MDAKK0BAIC0xOSw3ICsxOSw4IEBAIHN0YXRpYyBpbnQgbnVsbF9jaXBoZXIoRVZQX0NJUEhFUl9D VFggKmMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBz aXplX3QgaW5sKTsKKyBzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBuX2NpcGhlciA9IHsKKyAgICAg TklEX3VuZGVmLAorLSAgICAxLCAwLCAwLCAwLAorKyAgICAxLCAwLCAwLAorKyAgICBFVlBfQ0lQ SF9GTEFHX0ZJUFMsCisgICAgIG51bGxfaW5pdF9rZXksCisgICAgIG51bGxfY2lwaGVyLAorICAg ICBOVUxMLAorZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9ldnAvZXZwX2VuYy5j LmZpcHMgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9ldnAvZXZwX2VuYy5jCistLS0gb3BlbnNz bC0xLjEuMS1wcmU4L2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMJMjAxOC0wNi0yMCAxNjo0ODox MC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2V2cC9ldnBf ZW5jLmMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MDU2MjQ3MDQgKzAyMDAKK0BAIC0xNywxMCArMTcs MTkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KKyAjaW5jbHVkZSAiaW50ZXJuYWwv ZXZwX2ludC5oIgorICNpbmNsdWRlICJldnBfbG9jbC5oIgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIGludCBFVlBfQ0lQSEVS X0NUWF9yZXNldChFVlBfQ0lQSEVSX0NUWCAqYykKKyB7CistICAgIGlmIChjID09IE5VTEwpCisr I2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewor KyAgICAgICAgRklQU2VycihGSVBTX0ZfRVZQX0NJUEhFUl9DVFhfUkVTRVQsIEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyNlbmRpZgor KyAgIGlmIChjID09IE5VTEwpCisgICAgICAgICByZXR1cm4gMTsKKyAgICAgaWYgKGMtPmNpcGhl ciAhPSBOVUxMKSB7CisgICAgICAgICBpZiAoYy0+Y2lwaGVyLT5jbGVhbnVwICYmICFjLT5jaXBo ZXItPmNsZWFudXAoYykpCitAQCAtMzksNiArNDgsMTIgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX3Jl c2V0KEVWUF9DSVBIRVJfQ1RYCisgCisgRVZQX0NJUEhFUl9DVFggKkVWUF9DSVBIRVJfQ1RYX25l dyh2b2lkKQorIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX3NlbGZ0ZXN0 X2ZhaWxlZCgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9FVlBfQ0lQSEVSX0NUWF9ORVcs IEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysg ICAgfQorKyNlbmRpZgorICAgICByZXR1cm4gT1BFTlNTTF96YWxsb2Moc2l6ZW9mKEVWUF9DSVBI RVJfQ1RYKSk7CisgfQorIAorQEAgLTY3LDYgKzgyLDEyIEBAIGludCBFVlBfQ2lwaGVySW5pdF9l eChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAgICAgICAgICAgICBlbmMgPSAxOworICAgICAgICAgY3R4 LT5lbmNyeXB0ID0gZW5jOworICAgICB9CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAo RklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRVZQX0NJ UEhFUklOSVRfRVgsIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1 cm4gMDsKKysgICAgfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAgICAg LyoKKyAgICAgICogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2Vk IG9uICJGaW5hbCInZCBjb250ZXh0cyBzbworQEAgLTEzNiw3ICsxNTcsNyBAQCBpbnQgRVZQX0Np cGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0CisgICAgICAgICB9CisgICAgICAgICBjdHgt PmtleV9sZW4gPSBjaXBoZXItPmtleV9sZW47CisgICAgICAgICAvKiBQcmVzZXJ2ZSB3cmFwIGVu YWJsZSBmbGFnLCB6ZXJvIGV2ZXJ5dGhpbmcgZWxzZSAqLworLSAgICAgICAgY3R4LT5mbGFncyAm PSBFVlBfQ0lQSEVSX0NUWF9GTEFHX1dSQVBfQUxMT1c7CisrICAgICAgICBjdHgtPmZsYWdzICY9 IEVWUF9DSVBIRVJfQ1RYX0ZMQUdfV1JBUF9BTExPVyB8IEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNf QUxMT1c7CisgICAgICAgICBpZiAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQ1RSTF9J TklUKSB7CisgICAgICAgICAgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKGN0eCwgRVZQX0NU UkxfSU5JVCwgMCwgTlVMTCkpIHsKKyAgICAgICAgICAgICAgICAgY3R4LT5jaXBoZXIgPSBOVUxM OworQEAgLTE5NSw2ICsyMTYsMTggQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJf Q1RYICpjdAorICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgfQorICAgICB9CisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyAgICAvKiBBZnRlciAna2V5JyBpcyBzZXQgbm8gZnVydGhlciBw YXJhbWV0ZXJzIGNoYW5nZXMgYXJlIHBlcm1pc3NpYmxlLgorKyAgICAgKiBTbyBvbmx5IGNoZWNr IGZvciBub24gRklQUyBlbmFibGluZyBhdCB0aGlzIHBvaW50LgorKyAgICAgKi8KKysgICAgaWYg KGtleSAmJiBGSVBTX21vZGUoKSkgeworKyAgICAgICAgaWYgKCEoY3R4LT5jaXBoZXItPmZsYWdz ICYgRVZQX0NJUEhfRkxBR19GSVBTKQorKyAgICAgICAgICAgICYgIShjdHgtPmZsYWdzICYgRVZQ X0NJUEhfRkxBR19OT05fRklQU19BTExPVykpIHsKKysgICAgICAgICAgICBFVlBlcnIoRVZQX0Zf RVZQX0NJUEhFUklOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKysgICAgICAgICAg ICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgfQorKyNlbmRpZgorIAorICAgICBpZiAoa2V5 IHx8IChjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9BTFdBWVNfQ0FMTF9JTklUKSkgewor ICAgICAgICAgaWYgKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsIGtleSwgaXYsIGVuYykpCitkaWZm IC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2V2cC9ldnBfZXJyLmMuZmlwcyBvcGVuc3Ns LTEuMS4xLXByZTgvY3J5cHRvL2V2cC9ldnBfZXJyLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgv Y3J5cHRvL2V2cC9ldnBfZXJyLmMuZmlwcwkyMDE4LTA2LTIwIDE2OjQ4OjEwLjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZXZwL2V2cF9lcnIuYwkyMDE4LTA3 LTI1IDE3OjI2OjU4LjQwNTYyNDcwNCArMDIwMAorQEAgLTIwLDYgKzIwLDcgQEAgc3RhdGljIGNv bnN0IEVSUl9TVFJJTkdfREFUQSBFVlBfc3RyX2Z1bgorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9F VlAsIEVWUF9GX0FFU19PQ0JfQ0lQSEVSLCAwKSwgImFlc19vY2JfY2lwaGVyIn0sCisgICAgIHtF UlJfUEFDSyhFUlJfTElCX0VWUCwgRVZQX0ZfQUVTX1Q0X0lOSVRfS0VZLCAwKSwgImFlc190NF9p bml0X2tleSJ9LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9FVlAsIEVWUF9GX0FFU19XUkFQX0NJ UEhFUiwgMCksICJhZXNfd3JhcF9jaXBoZXIifSwKKysgICAge0VSUl9QQUNLKEVSUl9MSUJfRVZQ LCBFVlBfRl9BRVNfWFRTX0NJUEhFUiwgMCksICJhZXNfeHRzX2NpcGhlciJ9LAorICAgICB7RVJS X1BBQ0soRVJSX0xJQl9FVlAsIEVWUF9GX0FMR19NT0RVTEVfSU5JVCwgMCksICJhbGdfbW9kdWxl X2luaXQifSwKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJfRVZQLCBFVlBfRl9BUklBX0NDTV9JTklU X0tFWSwgMCksICJhcmlhX2NjbV9pbml0X2tleSJ9LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9F VlAsIEVWUF9GX0FSSUFfR0NNX0NUUkwsIDApLCAiYXJpYV9nY21fY3RybCJ9LAorQEAgLTE3Nyw2 ICsxNzgsNyBAQCBzdGF0aWMgY29uc3QgRVJSX1NUUklOR19EQVRBIEVWUF9zdHJfcmVhCisgICAg ICJkaWZmZXJlbnQga2V5IHR5cGVzIn0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElCX0VWUCwgMCwg RVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMpLAorICAgICAiZGlmZmVyZW50IHBhcmFtZXRlcnMi fSwKKysgICAge0VSUl9QQUNLKEVSUl9MSUJfRVZQLCAwLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQ UyksICJkaXNhYmxlZCBmb3IgRklQUyJ9LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9FVlAsIDAs IEVWUF9SX0VSUk9SX0xPQURJTkdfU0VDVElPTiksCisgICAgICJlcnJvciBsb2FkaW5nIHNlY3Rp b24ifSwKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJfRVZQLCAwLCBFVlBfUl9FUlJPUl9TRVRUSU5H X0ZJUFNfTU9ERSksCitAQCAtMjM5LDYgKzI0MSw3IEBAIHN0YXRpYyBjb25zdCBFUlJfU1RSSU5H X0RBVEEgRVZQX3N0cl9yZWEKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJfRVZQLCAwLCBFVlBfUl9Q UklWQVRFX0tFWV9FTkNPREVfRVJST1IpLAorICAgICAicHJpdmF0ZSBrZXkgZW5jb2RlIGVycm9y In0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElCX0VWUCwgMCwgRVZQX1JfUFVCTElDX0tFWV9OT1Rf UlNBKSwgInB1YmxpYyBrZXkgbm90IHJzYSJ9LAorKyAgICB7RVJSX1BBQ0soRVJSX0xJQl9FVlAs IDAsIEVWUF9SX1RPT19MQVJHRSksICJ0b28gbGFyZ2UifSwKKyAgICAge0VSUl9QQUNLKEVSUl9M SUJfRVZQLCAwLCBFVlBfUl9VTktOT1dOX0NJUEhFUiksICJ1bmtub3duIGNpcGhlciJ9LAorICAg ICB7RVJSX1BBQ0soRVJSX0xJQl9FVlAsIDAsIEVWUF9SX1VOS05PV05fRElHRVNUKSwgInVua25v d24gZGlnZXN0In0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElCX0VWUCwgMCwgRVZQX1JfVU5LTk9X Tl9PUFRJT04pLCAidW5rbm93biBvcHRpb24ifSwKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJl OC9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZXZw L2V2cF9saWIuYworLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZXZwL2V2cF9saWIuYy5m aXBzCTIwMTgtMDYtMjAgMTY6NDg6MTAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjEu MS1wcmU4L2NyeXB0by9ldnAvZXZwX2xpYi5jCTIwMTgtMDctMjUgMTc6MjY6NTguNDA1NjI0NzA0 ICswMjAwCitAQCAtMTkyLDYgKzE5Miw5IEBAIGludCBFVlBfQ0lQSEVSX2ltcGxfY3R4X3NpemUo Y29uc3QgRVZQX0MKKyBpbnQgRVZQX0NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25l ZCBjaGFyICpvdXQsCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVu c2lnbmVkIGludCBpbmwpCisgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgRklQU19zZWxm dGVzdF9jaGVjaygpOworKyNlbmRpZgorICAgICByZXR1cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhl cihjdHgsIG91dCwgaW4sIGlubCk7CisgfQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4 L2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2V2cC9t X3NoYTEuYworLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJ MjAxOC0wNi0yMCAxNjo0ODoxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXBy ZTgvY3J5cHRvL2V2cC9tX3NoYTEuYwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwNTYyNDcwNCArMDIw MAorQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGExX21kID0geworICAg ICBOSURfc2hhMSwKKyAgICAgTklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwKKyAgICAgU0hBX0RJ R0VTVF9MRU5HVEgsCistICAgIEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysgICAgRVZQ X01EX0ZMQUdfRElHQUxHSURfQUJTRU5UIHwgRVZQX01EX0ZMQUdfRklQUywKKyAgICAgaW5pdCwK KyAgICAgdXBkYXRlLAorICAgICBmaW5hbCwKK0BAIC0xNDUsNyArMTQ1LDcgQEAgc3RhdGljIGNv bnN0IEVWUF9NRCBzaGEyMjRfbWQgPSB7CisgICAgIE5JRF9zaGEyMjQsCisgICAgIE5JRF9zaGEy MjRXaXRoUlNBRW5jcnlwdGlvbiwKKyAgICAgU0hBMjI0X0RJR0VTVF9MRU5HVEgsCistICAgIEVW UF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysgICAgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJT RU5UIHwgRVZQX01EX0ZMQUdfRklQUywKKyAgICAgaW5pdDIyNCwKKyAgICAgdXBkYXRlMjI0LAor ICAgICBmaW5hbDIyNCwKK0BAIC0xNjQsNyArMTY0LDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBz aGEyNTZfbWQgPSB7CisgICAgIE5JRF9zaGEyNTYsCisgICAgIE5JRF9zaGEyNTZXaXRoUlNBRW5j cnlwdGlvbiwKKyAgICAgU0hBMjU2X0RJR0VTVF9MRU5HVEgsCistICAgIEVWUF9NRF9GTEFHX0RJ R0FMR0lEX0FCU0VOVCwKKysgICAgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UIHwgRVZQX01E X0ZMQUdfRklQUywKKyAgICAgaW5pdDI1NiwKKyAgICAgdXBkYXRlMjU2LAorICAgICBmaW5hbDI1 NiwKK0BAIC0yMjQsNyArMjI0LDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGE1MTJfMjI0X21k ID0geworICAgICBOSURfc2hhNTEyXzIyNCwKKyAgICAgTklEX3NoYTUxMl8yMjRXaXRoUlNBRW5j cnlwdGlvbiwKKyAgICAgU0hBMjI0X0RJR0VTVF9MRU5HVEgsCistICAgIEVWUF9NRF9GTEFHX0RJ R0FMR0lEX0FCU0VOVCwKKysgICAgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UIHwgRVZQX01E X0ZMQUdfRklQUywKKyAgICAgaW5pdDUxMl8yMjQsCisgICAgIHVwZGF0ZTUxMiwKKyAgICAgZmlu YWw1MTIsCitAQCAtMjQzLDcgKzI0Myw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhNTEyXzI1 Nl9tZCA9IHsKKyAgICAgTklEX3NoYTUxMl8yNTYsCisgICAgIE5JRF9zaGE1MTJfMjU2V2l0aFJT QUVuY3J5cHRpb24sCisgICAgIFNIQTI1Nl9ESUdFU1RfTEVOR1RILAorLSAgICBFVlBfTURfRkxB R19ESUdBTEdJRF9BQlNFTlQsCisrICAgIEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCB8IEVW UF9NRF9GTEFHX0ZJUFMsCisgICAgIGluaXQ1MTJfMjU2LAorICAgICB1cGRhdGU1MTIsCisgICAg IGZpbmFsNTEyLAorQEAgLTI2Miw3ICsyNjIsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTM4 NF9tZCA9IHsKKyAgICAgTklEX3NoYTM4NCwKKyAgICAgTklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0 aW9uLAorICAgICBTSEEzODRfRElHRVNUX0xFTkdUSCwKKy0gICAgRVZQX01EX0ZMQUdfRElHQUxH SURfQUJTRU5ULAorKyAgICBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQgfCBFVlBfTURfRkxB R19GSVBTLAorICAgICBpbml0Mzg0LAorICAgICB1cGRhdGUzODQsCisgICAgIGZpbmFsMzg0LAor QEAgLTI4MSw3ICsyODEsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTUxMl9tZCA9IHsKKyAg ICAgTklEX3NoYTUxMiwKKyAgICAgTklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uLAorICAgICBT SEE1MTJfRElHRVNUX0xFTkdUSCwKKy0gICAgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAor KyAgICBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQgfCBFVlBfTURfRkxBR19GSVBTLAorICAg ICBpbml0NTEyLAorICAgICB1cGRhdGU1MTIsCisgICAgIGZpbmFsNTEyLAorZGlmZiAtdXAgb3Bl bnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2J1aWxkLmluZm8uZmlwcyBvcGVuc3NsLTEuMS4x LXByZTgvY3J5cHRvL2ZpcHMvYnVpbGQuaW5mbworLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlw dG8vZmlwcy9idWlsZC5pbmZvLmZpcHMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MDU2MjQ3MDQgKzAy MDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvYnVpbGQuaW5mbwkyMDE4LTA3 LTI1IDE3OjI2OjU4LjQwNTYyNDcwNCArMDIwMAorQEAgLTAsMCArMSwxNSBAQAorK0xJQlM9Li4v Li4vbGliY3J5cHRvCisrU09VUkNFWy4uLy4uL2xpYmNyeXB0b109XAorKyAgICAgICAgZmlwc19h ZXNfc2VsZnRlc3QuYyBmaXBzX2Rlc19zZWxmdGVzdC5jIGZpcHNfaG1hY19zZWxmdGVzdC5jIFwK KysgICAgICAgIGZpcHNfcnNhX3NlbGZ0ZXN0LmMgZmlwc19zaGFfc2VsZnRlc3QuYyBmaXBzLmMg Zmlwc19kc2Ffc2VsZnRlc3QuYyBcCisrICAgICAgICBmaXBzX3Bvc3QuYyBmaXBzX2RyYmdfY3Ry LmMgZmlwc19kcmJnX2hhc2guYyBmaXBzX2RyYmdfaG1hYy5jIFwKKysgICAgICAgIGZpcHNfZHJi Z19saWIuYyBmaXBzX2RyYmdfcmFuZC5jIGZpcHNfZHJiZ19zZWxmdGVzdC5jIGZpcHNfcmFuZF9s aWIuYyBcCisrICAgICAgICBmaXBzX2NtYWNfc2VsZnRlc3QuYyBmaXBzX2VjZGhfc2VsZnRlc3Qu YyBmaXBzX2VjZHNhX3NlbGZ0ZXN0LmMgXAorKyAgICAgICAgZmlwc19lbmMuYyBmaXBzX21kLmMg Zmlwc19kaF9zZWxmdGVzdC5jIGZpcHNfZXJzLmMKKysKKytQUk9HUkFNU19OT19JTlNUPVwKKysg ICAgICAgICAgZmlwc19zdGFuZGFsb25lX2htYWMKKysKKytTT1VSQ0VbZmlwc19zdGFuZGFsb25l X2htYWNdPWZpcHNfc3RhbmRhbG9uZV9obWFjLmMKKytJTkNMVURFW2ZpcHNfc3RhbmRhbG9uZV9o bWFjXT0uLi8uLi9pbmNsdWRlCisrREVQRU5EW2ZpcHNfc3RhbmRhbG9uZV9obWFjXT0uLi8uLi9s aWJjcnlwdG8KK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2Fl c19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfYWVz X3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19hZXNf c2VsZnRlc3QuYy5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTguNDA2NjI0NzI4ICswMjAwCisrKysg b3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMJMjAxOC0w Ny0yNSAxNzoyNjo1OC40MDU2MjQ3MDQgKzAyMDAKK0BAIC0wLDAgKzEsMzcyIEBACisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKyMgaW5jbHVkZSAiaW50ZXJuYWwvZmlwc19pbnQuaCIKKysjZW5kaWYKKysKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljIGNvbnN0IHN0cnVjdCB7CisrICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIga2V5WzE2XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRb MTZdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMTZdOworK30gdGVzdHNb XSA9IHsKKysgICAgeworKyAgICAgICAgeworKyAgICAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgw MywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKysgICAgICAgICAgICAgICAgMHgwOCwgMHgwOSwg MHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRn0sIHsKKysgICAgICAgIDB4MDAsIDB4 MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsCisrICAgICAgICAgICAgICAg IDB4ODgsIDB4OTksIDB4QUEsIDB4QkIsIDB4Q0MsIDB4REQsIDB4RUUsIDB4RkZ9LCB7CisrMHg2 OSwgMHhDNCwgMHhFMCwgMHhEOCwgMHg2QSwgMHg3QiwgMHgwNCwgMHgzMCwKKysgICAgICAgICAg ICAgICAgMHhEOCwgMHhDRCwgMHhCNywgMHg4MCwgMHg3MCwgMHhCNCwgMHhDNSwgMHg1QX0sfSx9 OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2FlcygpCisreworKyAgICBpbnQgbjsKKysgICAgaW50 IHJldCA9IDA7CisrICAgIEVWUF9DSVBIRVJfQ1RYICpjdHg7CisrCisrICAgIGN0eCA9IEVWUF9D SVBIRVJfQ1RYX25ldygpOworKyAgICBpZiAoY3R4ID09IE5VTEwpCisrICAgICAgICBnb3RvIGVy cjsKKysKKysgICAgZm9yIChuID0gMDsgbiA8IDE7ICsrbikgeworKyAgICAgICAgdW5zaWduZWQg Y2hhciBrZXlbMTZdOworKworKyAgICAgICAgbWVtY3B5KGtleSwgdGVzdHNbbl0ua2V5LCBzaXpl b2Yoa2V5KSk7CisrICAgICAgICBpZiAoZmlwc19jaXBoZXJfdGVzdChjdHgsIEVWUF9hZXNfMTI4 X2VjYigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCBOVUxMLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNbbl0ucGxhaW50ZXh0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGVzdHNbbl0uY2lwaGVydGV4dCwgMTYpIDw9IDApCisrICAgICAg ICAgICAgZ290byBlcnI7CisrICAgIH0KKysgICAgcmV0ID0gMTsKKysgZXJyOgorKyAgICBFVlBf Q0lQSEVSX0NUWF9mcmVlKGN0eCk7CisrICAgIGlmIChyZXQgPT0gMCkKKysgICAgICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysg ICAgcmV0dXJuIHJldDsKKyt9CisrCisrLyogQUVTLUNDTSB0ZXN0IGRhdGEgZnJvbSBOSVNUIHB1 YmxpYyB0ZXN0IHZlY3RvcnMgKi8KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21f a2V5W10gPSB7CisrICAgIDB4Y2UsIDB4YjAsIDB4MDksIDB4YWUsIDB4YTQsIDB4NDUsIDB4NDQs IDB4NTEsIDB4ZmUsIDB4YWQsIDB4ZjAsIDB4ZTYsCisrICAgIDB4YjMsIDB4NmYsIDB4NDUsIDB4 NTUsIDB4NWQsIDB4ZDAsIDB4NDcsIDB4MjMsIDB4YmEsIDB4YTQsIDB4NDgsIDB4ZTgKKyt9Owor KworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9ub25jZVtdID0geworKyAgICAweDc2 LCAweDQwLCAweDQzLCAweGM0LCAweDk0LCAweDYwLCAweGI3CisrfTsKKysKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBjY21fYWRhdGFbXSA9IHsKKysgICAgMHg2ZSwgMHg4MCwgMHhkZCwg MHg3ZiwgMHgxYiwgMHhhZCwgMHhmMywgMHhhMSwgMHhjOSwgMHhhYiwgMHgyNSwgMHhjNywKKysg ICAgMHg1ZiwgMHgxMCwgMHhiZCwgMHhlNywgMHg4YywgMHgyMywgMHhmYSwgMHgwZSwgMHhiOCwg MHhmOSwgMHhhYSwgMHhhNSwKKysgICAgMHgzYSwgMHhkZSwgMHhmYiwgMHhmNCwgMHhjYiwgMHhm NywgMHg4ZiwgMHhlNAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3B0 W10gPSB7CisrICAgIDB4YzgsIDB4ZDIsIDB4NzUsIDB4ZjksIDB4MTksIDB4ZTEsIDB4N2QsIDB4 N2YsIDB4ZTYsIDB4OWMsIDB4MmEsIDB4MWYsCisrICAgIDB4NTgsIDB4OTMsIDB4OWQsIDB4ZmUs IDB4NGQsIDB4NDAsIDB4MzcsIDB4OTEsIDB4YjUsIDB4ZGYsIDB4MTMsIDB4MTAKKyt9OworKwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9jdFtdID0geworKyAgICAweDhhLCAweDBm LCAweDNkLCAweDgyLCAweDI5LCAweGU0LCAweDhlLCAweDc0LCAweDg3LCAweGZkLCAweDk1LCAw eGEyLAorKyAgICAweDhhLCAweGQzLCAweDkyLCAweGM4LCAweDBiLCAweDM2LCAweDgxLCAweGQ0 LCAweGZiLCAweGM3LCAweGJiLCAweGZkCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBjY21fdGFnW10gPSB7CisrICAgIDB4MmQsIDB4ZDYsIDB4ZWYsIDB4MWMsIDB4NDUsIDB4 ZDQsIDB4Y2MsIDB4YjcsIDB4MjMsIDB4ZGMsIDB4MDcsIDB4NDQsCisrICAgIDB4MTQsIDB4ZGIs IDB4NTAsIDB4NmQKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19jY20odm9pZCkKKyt7 CisrICAgIGludCByZXQgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIG91dFsxMjhdLCB0YWdbMTZd OworKyAgICBFVlBfQ0lQSEVSX0NUWCAqY3R4OworKworKyAgICBjdHggPSBFVlBfQ0lQSEVSX0NU WF9uZXcoKTsKKysgICAgaWYgKGN0eCA9PSBOVUxMKQorKyAgICAgICAgZ290byBlcnI7CisrCisr ICAgIG1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKKysgICAgaWYgKCFFVlBfQ2lwaGVySW5p dF9leChjdHgsIEVWUF9hZXNfMTkyX2NjbSgpLCBOVUxMLCBOVUxMLCBOVUxMLCAxKSkKKysgICAg ICAgIGdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoY3R4LCBFVlBfQ1RS TF9DQ01fU0VUX0lWTEVOLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNj bV9ub25jZSksIE5VTEwpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghRVZQX0NJUEhF Ul9DVFhfY3RybChjdHgsIEVWUF9DVFJMX0NDTV9TRVRfVEFHLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKGNjbV90YWcpLCBOVUxMKSkKKysgICAgICAgIGdvdG8gZXJyOwor KyAgICBpZiAoIUVWUF9DaXBoZXJJbml0X2V4KGN0eCwgTlVMTCwgTlVMTCwgY2NtX2tleSwgY2Nt X25vbmNlLCAxKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhlcihjdHgs IE5VTEwsIE5VTEwsIHNpemVvZihjY21fcHQpKSAhPSBzaXplb2YoY2NtX3B0KSkKKysgICAgICAg IGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhlcihjdHgsIE5VTEwsIGNjbV9hZGF0YSwgc2l6 ZW9mKGNjbV9hZGF0YSkpIDwgMCkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0Np cGhlcihjdHgsIG91dCwgY2NtX3B0LCBzaXplb2YoY2NtX3B0KSkgIT0gc2l6ZW9mKGNjbV9jdCkp CisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKGN0 eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcsIDE2LCB0YWcpKQorKyAgICAgICAgZ290byBlcnI7Cisr ICAgIGlmIChtZW1jbXAodGFnLCBjY21fdGFnLCBzaXplb2YoY2NtX3RhZykpCisrICAgICAgICB8 fCBtZW1jbXAob3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSkKKysgICAgICAgIGdvdG8gZXJy OworKworKyAgICBtZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7CisrCisrICAgIGlmICghRVZQ X0NpcGhlckluaXRfZXgoY3R4LCBFVlBfYWVzXzE5Ml9jY20oKSwgTlVMTCwgTlVMTCwgTlVMTCwg MCkpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKGN0 eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZihjY21fbm9uY2UpLCBOVUxMKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAo IUVWUF9DSVBIRVJfQ1RYX2N0cmwoY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgMTYsIHRhZykp CisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leChjdHgsIE5V TEwsIE5VTEwsIGNjbV9rZXksIGNjbV9ub25jZSwgMCkpCisrICAgICAgICBnb3RvIGVycjsKKysg ICAgaWYgKEVWUF9DaXBoZXIoY3R4LCBOVUxMLCBOVUxMLCBzaXplb2YoY2NtX2N0KSkgIT0gc2l6 ZW9mKGNjbV9jdCkpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKEVWUF9DaXBoZXIoY3R4 LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDApCisrICAgICAgICBnb3Rv IGVycjsKKysgICAgaWYgKEVWUF9DaXBoZXIoY3R4LCBvdXQsIGNjbV9jdCwgc2l6ZW9mKGNjbV9j dCkpICE9IHNpemVvZihjY21fcHQpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGlmICht ZW1jbXAob3V0LCBjY21fcHQsIHNpemVvZihjY21fcHQpKSkKKysgICAgICAgIGdvdG8gZXJyOwor KworKyAgICByZXQgPSAxOworKworKyBlcnI6CisrICAgIEVWUF9DSVBIRVJfQ1RYX2ZyZWUoY3R4 KTsKKysKKysgICAgaWYgKHJldCA9PSAwKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X1NFTEZURVNUX0FFU19DQ00sIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgcmV0 dXJuIDA7CisrICAgIH0gZWxzZQorKyAgICAgICAgcmV0dXJuIHJldDsKKysKKyt9CisrCisrLyog QUVTLUdDTSB0ZXN0IGRhdGEgZnJvbSBOSVNUIHB1YmxpYyB0ZXN0IHZlY3RvcnMgKi8KKysKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fa2V5W10gPSB7CisrICAgIDB4ZWUsIDB4YmMs IDB4MWYsIDB4NTcsIDB4NDgsIDB4N2YsIDB4NTEsIDB4OTIsIDB4MWMsIDB4MDQsIDB4NjUsIDB4 NjYsCisrICAgIDB4NWYsIDB4OGEsIDB4ZTYsIDB4ZDEsIDB4NjUsIDB4OGIsIDB4YjIsIDB4NmQs IDB4ZTYsIDB4ZjgsIDB4YTAsIDB4NjksCisrICAgIDB4YTMsIDB4NTIsIDB4MDIsIDB4OTMsIDB4 YTUsIDB4NzIsIDB4MDcsIDB4OGYKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGdjbV9pdltdID0geworKyAgICAweDk5LCAweGFhLCAweDNlLCAweDY4LCAweGVkLCAweDgxLCAw eDczLCAweGEwLCAweGVlLCAweGQwLCAweDY2LCAweDg0CisrfTsKKysKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBnY21fcHRbXSA9IHsKKysgICAgMHhmNSwgMHg2ZSwgMHg4NywgMHgwNSwg MHg1YiwgMHhjMywgMHgyZCwgMHgwZSwgMHhlYiwgMHgzMSwgMHhiMiwgMHhlYSwKKysgICAgMHhj YywgMHgyYiwgMHhmMiwgMHhhNQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg Z2NtX2FhZFtdID0geworKyAgICAweDRkLCAweDIzLCAweGMzLCAweGNlLCAweGMzLCAweDM0LCAw eGI0LCAweDliLCAweGRiLCAweDM3LCAweDBjLCAweDQzLAorKyAgICAweDdmLCAweGVjLCAweDc4 LCAweGRlCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fY3RbXSA9IHsK KysgICAgMHhmNywgMHgyNiwgMHg0NCwgMHgxMywgMHhhOCwgMHg0YywgMHgwZSwgMHg3YywgMHhk NSwgMHgzNiwgMHg4NiwgMHg3ZSwKKysgICAgMHhiOSwgMHhmMiwgMHgxNywgMHgzNgorK307Cisr Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX3RhZ1tdID0geworKyAgICAweDY3LCAw eGJhLCAweDA1LCAweDEwLCAweDI2LCAweDJhLCAweGU0LCAweDg3LCAweGQ3LCAweDM3LCAweGVl LCAweDYyLAorKyAgICAweDk4LCAweGY3LCAweDdlLCAweDBjCisrfTsKKysKKytpbnQgRklQU19z ZWxmdGVzdF9hZXNfZ2NtKHZvaWQpCisreworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgdW5zaWdu ZWQgY2hhciBvdXRbMTI4XSwgdGFnWzE2XTsKKysgICAgRVZQX0NJUEhFUl9DVFggKmN0eDsKKysK KysgICAgY3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7CisrICAgIGlmIChjdHggPT0gTlVMTCkK KysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBtZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7 CisrICAgIG1lbXNldCh0YWcsIDAsIHNpemVvZih0YWcpKTsKKysgICAgaWYgKCFFVlBfQ2lwaGVy SW5pdF9leChjdHgsIEVWUF9hZXNfMjU2X2djbSgpLCBOVUxMLCBOVUxMLCBOVUxMLCAxKSkKKysg ICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoY3R4LCBFVlBf Q1RSTF9HQ01fU0VUX0lWTEVOLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m KGdjbV9pdiksIE5VTEwpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghRVZQX0NpcGhl ckluaXRfZXgoY3R4LCBOVUxMLCBOVUxMLCBnY21fa2V5LCBnY21faXYsIDEpKQorKyAgICAgICAg Z290byBlcnI7CisrICAgIGlmIChFVlBfQ2lwaGVyKGN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9m KGdjbV9hYWQpKSA8IDApCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKEVWUF9DaXBoZXIo Y3R4LCBvdXQsIGdjbV9wdCwgc2l6ZW9mKGdjbV9wdCkpICE9IHNpemVvZihnY21fY3QpKQorKyAg ICAgICAgZ290byBlcnI7CisrICAgIGlmIChFVlBfQ2lwaGVyKGN0eCwgTlVMTCwgTlVMTCwgMCkg PCAwKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3Ry bChjdHgsIEVWUF9DVFJMX0dDTV9HRVRfVEFHLCAxNiwgdGFnKSkKKysgICAgICAgIGdvdG8gZXJy OworKworKyAgICBpZiAobWVtY21wKHRhZywgZ2NtX3RhZywgMTYpIHx8IG1lbWNtcChvdXQsIGdj bV9jdCwgMTYpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIG1lbXNldChvdXQsIDAsIHNp emVvZihvdXQpKTsKKysKKysgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leChjdHgsIEVWUF9hZXNf MjU2X2djbSgpLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAg ICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGdjbV9pdiksIE5VTEwpKQorKyAg ICAgICAgZ290byBlcnI7CisrICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybChjdHgsIEVWUF9D VFJMX0dDTV9TRVRfVEFHLCAxNiwgdGFnKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAo IUVWUF9DaXBoZXJJbml0X2V4KGN0eCwgTlVMTCwgTlVMTCwgZ2NtX2tleSwgZ2NtX2l2LCAwKSkK KysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhlcihjdHgsIE5VTEwsIGdjbV9h YWQsIHNpemVvZihnY21fYWFkKSkgPCAwKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmIChF VlBfQ2lwaGVyKGN0eCwgb3V0LCBnY21fY3QsIHNpemVvZihnY21fY3QpKSAhPSBzaXplb2YoZ2Nt X3B0KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhlcihjdHgsIE5VTEws IE5VTEwsIDApIDwgMCkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBpZiAobWVtY21wKG91 dCwgZ2NtX3B0LCAxNikpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgcmV0ID0gMTsKKysK KysgZXJyOgorKyAgICBFVlBfQ0lQSEVSX0NUWF9mcmVlKGN0eCk7CisrCisrICAgIGlmIChyZXQg PT0gMCkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfR0NNLCBG SVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9IGVsc2UK KysgICAgICAgIHJldHVybiByZXQ7CisrCisrfQorKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIFhUU18xMjhfa2V5W10gPSB7CisrICAgIDB4YTEsIDB4YjksIDB4MGMsIDB4YmEsIDB4M2Ys IDB4MDYsIDB4YWMsIDB4MzUsIDB4M2IsIDB4MmMsIDB4MzQsIDB4MzgsCisrICAgIDB4NzYsIDB4 MDgsIDB4MTcsIDB4NjIsIDB4MDksIDB4MDksIDB4MjMsIDB4MDIsIDB4NmUsIDB4OTEsIDB4Nzcs IDB4MTgsCisrICAgIDB4MTUsIDB4ZjIsIDB4OWQsIDB4YWIsIDB4MDEsIDB4OTMsIDB4MmYsIDB4 MmYKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfaVtdID0gewor KyAgICAweDRmLCAweGFlLCAweGY3LCAweDExLCAweDdjLCAweGRhLCAweDU5LCAweGM2LCAweDZl LCAweDRiLCAweDkyLCAweDAxLAorKyAgICAweDNlLCAweDc2LCAweDhhLCAweGQ1CisrfTsKKysK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X3B0W10gPSB7CisrICAgIDB4ZWIs IDB4YWIsIDB4Y2UsIDB4OTUsIDB4YjEsIDB4NGQsIDB4M2MsIDB4OGQsIDB4NmYsIDB4YjMsIDB4 NTAsIDB4MzksCisrICAgIDB4MDcsIDB4OTAsIDB4MzEsIDB4MWMKKyt9OworKworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfY3RbXSA9IHsKKysgICAgMHg3NywgMHg4YSwgMHhl OCwgMHhiNCwgMHgzYywgMHhiOSwgMHg4ZCwgMHg1YSwgMHg4MiwgMHg1MCwgMHg4MSwgMHhkNSwK KysgICAgMHhiZSwgMHg0NywgMHgxYywgMHg2MworK307CisrCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgWFRTXzI1Nl9rZXlbXSA9IHsKKysgICAgMHgxZSwgMHhhNiwgMHg2MSwgMHhjNSwg MHg4ZCwgMHg5NCwgMHgzYSwgMHgwZSwgMHg0OCwgMHgwMSwgMHhlNCwgMHgyZiwKKysgICAgMHg0 YiwgMHgwOSwgMHg0NywgMHgxNCwgMHg5ZSwgMHg3ZiwgMHg5ZiwgMHg4ZSwgMHgzZSwgMHg2OCwg MHhkMCwgMHhjNywKKysgICAgMHg1MCwgMHg1MiwgMHgxMCwgMHhiZCwgMHgzMSwgMHgxYSwgMHgw ZSwgMHg3YywgMHhkNiwgMHhlMSwgMHgzZiwgMHhmZCwKKysgICAgMHhmMiwgMHg0MSwgMHg4ZCwg MHg4ZCwgMHgxOSwgMHgxMSwgMHhjMCwgMHgwNCwgMHhjZCwgMHhhNSwgMHg4ZCwgMHhhMywKKysg ICAgMHhkNiwgMHgxOSwgMHhiNywgMHhlMiwgMHhiOSwgMHgxNCwgMHgxZSwgMHg1OCwgMHgzMSwg MHg4ZSwgMHhlYSwgMHgzOSwKKysgICAgMHgyYywgMHhmNCwgMHgxYiwgMHgwOAorK307CisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9pW10gPSB7CisrICAgIDB4YWQsIDB4 ZjgsIDB4ZDksIDB4MjYsIDB4MjcsIDB4NDYsIDB4NGEsIDB4ZDIsIDB4ZjAsIDB4NDIsIDB4OGUs IDB4ODQsCisrICAgIDB4YTksIDB4ZjgsIDB4NzUsIDB4NjQKKyt9OworKworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfcHRbXSA9IHsKKysgICAgMHgyZSwgMHhlZCwgMHhlYSwg MHg1MiwgMHhjZCwgMHg4MiwgMHgxNSwgMHhlMSwgMHhhYywgMHhjNiwgMHg0NywgMHhlOCwKKysg ICAgMHgxMCwgMHhiYiwgMHhjMywgMHg2NCwgMHgyZSwgMHg4NywgMHgyOCwgMHg3ZiwgMHg4ZCwg MHgyZSwgMHg1NywgMHhlMywKKysgICAgMHg2YywgMHgwYSwgMHgyNCwgMHhmYiwgMHhjMSwgMHgy YSwgMHgyMCwgMHgyZQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1 Nl9jdFtdID0geworKyAgICAweGNiLCAweGFhLCAweGQwLCAweGUyLCAweGY2LCAweGNlLCAweGEz LCAweGY1LCAweDBiLCAweDM3LCAweGY5LCAweDM0LAorKyAgICAweGQ0LCAweDZhLCAweDliLCAw eDEzLCAweDBiLCAweDlkLCAweDU0LCAweGYwLCAweDdlLCAweDM0LCAweGYzLCAweDZhLAorKyAg ICAweGY3LCAweDkzLCAweGU4LCAweDZmLCAweDczLCAweGM2LCAweGQ3LCAweGRiCisrfTsKKysK KytpbnQgRklQU19zZWxmdGVzdF9hZXNfeHRzKCkKKyt7CisrICAgIGludCByZXQgPSAxOworKyAg ICBFVlBfQ0lQSEVSX0NUWCAqY3R4OworKworKyAgICBjdHggPSBFVlBfQ0lQSEVSX0NUWF9uZXco KTsKKysgICAgaWYgKGN0eCA9PSBOVUxMKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGlm IChmaXBzX2NpcGhlcl90ZXN0KGN0eCwgRVZQX2Flc18xMjhfeHRzKCksCisrICAgICAgICAgICAg ICAgICAgICAgICAgIFhUU18xMjhfa2V5LCBYVFNfMTI4X2ksIFhUU18xMjhfcHQsIFhUU18xMjhf Y3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihYVFNfMTI4X3B0KSkgPD0gMCkK KysgICAgICAgIHJldCA9IDA7CisrCisrICAgIGlmIChmaXBzX2NpcGhlcl90ZXN0KGN0eCwgRVZQ X2Flc18yNTZfeHRzKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgIFhUU18yNTZfa2V5LCBY VFNfMjU2X2ksIFhUU18yNTZfcHQsIFhUU18yNTZfY3QsCisrICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZihYVFNfMjU2X3B0KSkgPD0gMCkKKysgICAgICAgIHJldCA9IDA7CisrCisrICAg IEVWUF9DSVBIRVJfQ1RYX2ZyZWUoY3R4KTsKKysKKysgZXJyOgorKyAgICBpZiAocmV0ID09IDAp CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19YVFMsIEZJUFNfUl9T RUxGVEVTVF9GQUlMRUQpOworKyAgICByZXR1cm4gcmV0OworK30KKysKKysjZW5kaWYKK2RpZmYg LXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcyBvcGVuc3NsLTEu MS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwcy5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0 by9maXBzL2ZpcHMuYy5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTguNDA2NjI0NzI4ICswMjAwCisr Kysgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHMuYwkyMDE4LTA3LTI1IDE3OjI2 OjU4LjQwNjYyNDcyOCArMDIwMAorQEAgLTAsMCArMSw1MjYgQEAKKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9w ZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAg ICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisr ICoKKysgKi8KKysKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+ CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpbmNsdWRlIDxkbGZjbi5oPgorKyNpbmNsdWRlIDxz dGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2lu Y2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysKKysjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyMgaW5jbHVkZSAiaW50 ZXJuYWwvdGhyZWFkX29uY2UuaCIKKysKKysjIGlmbmRlZiBQQVRIX01BWAorKyMgIGRlZmluZSBQ QVRIX01BWCAxMDI0CisrIyBlbmRpZgorKworK3N0YXRpYyBpbnQgZmlwc19zZWxmdGVzdF9mYWls ID0gMDsKKytzdGF0aWMgaW50IGZpcHNfbW9kZSA9IDA7Cisrc3RhdGljIGludCBmaXBzX3N0YXJ0 ZWQgPSAwOworKworK3N0YXRpYyBpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpOworK3N0 YXRpYyBpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKTsKKytzdGF0aWMgaW50IGZpcHNf Y2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKTsKKysKKytzdGF0aWMgQ1JZUFRPX1JXTE9DSyAqZmlw c19sb2NrID0gTlVMTDsKKytzdGF0aWMgQ1JZUFRPX1JXTE9DSyAqZmlwc19vd25pbmdfbG9jayA9 IE5VTEw7Cisrc3RhdGljIENSWVBUT19PTkNFIGZpcHNfbG9ja19pbml0ID0gQ1JZUFRPX09OQ0Vf U1RBVElDX0lOSVQ7CisrCisrREVGSU5FX1JVTl9PTkNFX1NUQVRJQyhkb19maXBzX2xvY2tfaW5p dCkKKyt7CisrICAgIGZpcHNfbG9jayA9IENSWVBUT19USFJFQURfbG9ja19uZXcoKTsKKysgICAg Zmlwc19vd25pbmdfbG9jayA9IENSWVBUT19USFJFQURfbG9ja19uZXcoKTsKKysgICAgcmV0dXJu IGZpcHNfbG9jayAhPSBOVUxMICYmIGZpcHNfb3duaW5nX2xvY2sgIT0gTlVMTDsKKyt9CisrCisr IyBkZWZpbmUgZmlwc193X2xvY2soKSAgIENSWVBUT19USFJFQURfd3JpdGVfbG9jayhmaXBzX2xv Y2spCisrIyBkZWZpbmUgZmlwc193X3VubG9jaygpIENSWVBUT19USFJFQURfdW5sb2NrKGZpcHNf bG9jaykKKysjIGRlZmluZSBmaXBzX3JfbG9jaygpICAgQ1JZUFRPX1RIUkVBRF9yZWFkX2xvY2so Zmlwc19sb2NrKQorKyMgZGVmaW5lIGZpcHNfcl91bmxvY2soKSBDUllQVE9fVEhSRUFEX3VubG9j ayhmaXBzX2xvY2spCisrCisrc3RhdGljIHZvaWQgZmlwc19zZXRfbW9kZShpbnQgb25vZmYpCisr eworKyAgICBpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKwor KyAgICBpZiAoZmlwc19zdGFydGVkKSB7CisrICAgICAgICBpZiAoIW93bmluZ190aHJlYWQpCisr ICAgICAgICAgICAgZmlwc193X2xvY2soKTsKKysgICAgICAgIGZpcHNfbW9kZSA9IG9ub2ZmOwor KyAgICAgICAgaWYgKCFvd25pbmdfdGhyZWFkKQorKyAgICAgICAgICAgIGZpcHNfd191bmxvY2so KTsKKysgICAgfQorK30KKysKKytpbnQgRklQU19tb2R1bGVfbW9kZSh2b2lkKQorK3sKKysgICAg aW50IHJldCA9IDA7CisrICAgIGludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhy ZWFkKCk7CisrCisrICAgIGlmIChmaXBzX3N0YXJ0ZWQpIHsKKysgICAgICAgIGlmICghb3duaW5n X3RocmVhZCkKKysgICAgICAgICAgICBmaXBzX3JfbG9jaygpOworKyAgICAgICAgcmV0ID0gZmlw c19tb2RlOworKyAgICAgICAgaWYgKCFvd25pbmdfdGhyZWFkKQorKyAgICAgICAgICAgIGZpcHNf cl91bmxvY2soKTsKKysgICAgfQorKyAgICByZXR1cm4gcmV0OworK30KKysKKysvKiBqdXN0IGEg Y29tcGF0IHN5bWJvbCAtIHJldHVybiBOVUxMICovCisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVk KHZvaWQpCisreworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgaWYgKGZpcHNfc3RhcnRlZCkgewor KyAgICAgICAgaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysK KysgICAgICAgIGlmICghb3duaW5nX3RocmVhZCkKKysgICAgICAgICAgICBmaXBzX3JfbG9jaygp OworKyAgICAgICAgcmV0ID0gZmlwc19zZWxmdGVzdF9mYWlsOworKyAgICAgICAgaWYgKCFvd25p bmdfdGhyZWFkKQorKyAgICAgICAgICAgIGZpcHNfcl91bmxvY2soKTsKKysgICAgfQorKyAgICBy ZXR1cm4gcmV0OworK30KKysKKysvKiBTZWxmdGVzdCBmYWlsdXJlIGZhdGFsIGV4aXQgcm91dGlu ZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAorKyAqIGR1cmluZyAqYW55KiBjcnlwdG9ncmFwaGljIG9w ZXJhdGlvbi4gSXQgaGFzIHRoZSBtaW5pbXVtCisrICogb3ZlcmhlYWQgcG9zc2libGUgdG8gYXZv aWQgdG9vIGJpZyBhIHBlcmZvcm1hbmNlIGhpdC4KKysgKi8KKysKKyt2b2lkIEZJUFNfc2VsZnRl c3RfY2hlY2sodm9pZCkKKyt7CisrICAgIGlmIChmaXBzX3NlbGZ0ZXN0X2ZhaWwpIHsKKysgICAg ICAgIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCAiRkFUQUwgRklQUyBTRUxGVEVTVCBG QUlMVVJFIik7CisrICAgIH0KKyt9CisrCisrdm9pZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZv aWQpCisreworKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworK30KKysKKysvKiB3ZSBpbXBs ZW1lbnQgd2hhdCBsaWJmaXBzY2hlY2sgZG9lcyBvdXJzZWx2ZXMgKi8KKysKKytzdGF0aWMgaW50 CisrZ2V0X2xpYnJhcnlfcGF0aChjb25zdCBjaGFyICpsaWJuYW1lLCBjb25zdCBjaGFyICpzeW1i b2xuYW1lLCBjaGFyICpwYXRoLAorKyAgICAgICAgICAgICAgICAgc2l6ZV90IHBhdGhsZW4pCisr eworKyAgICBEbF9pbmZvIGluZm87CisrICAgIHZvaWQgKmRsLCAqc3ltOworKyAgICBpbnQgcnYg PSAtMTsKKysKKysgICAgZGwgPSBkbG9wZW4obGlibmFtZSwgUlRMRF9MQVpZKTsKKysgICAgaWYg KGRsID09IE5VTEwpIHsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAgICBzeW0g PSBkbHN5bShkbCwgc3ltYm9sbmFtZSk7CisrCisrICAgIGlmIChzeW0gIT0gTlVMTCAmJiBkbGFk ZHIoc3ltLCAmaW5mbykpIHsKKysgICAgICAgIHN0cm5jcHkocGF0aCwgaW5mby5kbGlfZm5hbWUs IHBhdGhsZW4gLSAxKTsKKysgICAgICAgIHBhdGhbcGF0aGxlbiAtIDFdID0gJ1wwJzsKKysgICAg ICAgIHJ2ID0gMDsKKysgICAgfQorKworKyAgICBkbGNsb3NlKGRsKTsKKysKKysgICAgcmV0dXJu IHJ2OworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciBjb252W10gPSAiMDEyMzQ1Njc4OWFiY2Rl ZiI7CisrCisrc3RhdGljIGNoYXIgKmJpbjJoZXgodm9pZCAqYnVmLCBzaXplX3QgbGVuKQorK3sK KysgICAgY2hhciAqaGV4LCAqcDsKKysgICAgdW5zaWduZWQgY2hhciAqc3JjID0gYnVmOworKwor KyAgICBoZXggPSBtYWxsb2MobGVuICogMiArIDEpOworKyAgICBpZiAoaGV4ID09IE5VTEwpCisr ICAgICAgICByZXR1cm4gTlVMTDsKKysKKysgICAgcCA9IGhleDsKKysKKysgICAgd2hpbGUgKGxl biA+IDApIHsKKysgICAgICAgIHVuc2lnbmVkIGM7CisrCisrICAgICAgICBjID0gKnNyYzsKKysg ICAgICAgIHNyYysrOworKworKyAgICAgICAgKnAgPSBjb252W2MgPj4gNF07CisrICAgICAgICAr K3A7CisrICAgICAgICAqcCA9IGNvbnZbYyAmIDB4MGZdOworKyAgICAgICAgKytwOworKyAgICAg ICAgLS1sZW47CisrICAgIH0KKysgICAgKnAgPSAnXDAnOworKyAgICByZXR1cm4gaGV4OworK30K KysKKysjIGRlZmluZSBITUFDX1BSRUZJWCAiLiIKKysjIGlmbmRlZiBITUFDX1NVRkZJWAorKyMg IGRlZmluZSBITUFDX1NVRkZJWCAiLmhtYWMiCisrIyBlbmRpZgorKyMgZGVmaW5lIFJFQURfQlVG RkVSX0xFTkdUSCAxNjM4NAorKworK3N0YXRpYyBjaGFyICptYWtlX2htYWNfcGF0aChjb25zdCBj aGFyICpvcmlncGF0aCkKKyt7CisrICAgIGNoYXIgKnBhdGgsICpwOworKyAgICBjb25zdCBjaGFy ICpmbjsKKysKKysgICAgcGF0aCA9CisrICAgICAgICBtYWxsb2Moc2l6ZW9mKEhNQUNfUFJFRklY KSArIHNpemVvZihITUFDX1NVRkZJWCkgKyBzdHJsZW4ob3JpZ3BhdGgpKTsKKysgICAgaWYgKHBh dGggPT0gTlVMTCkgeworKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgICAgZm4g PSBzdHJyY2hyKG9yaWdwYXRoLCAnLycpOworKyAgICBpZiAoZm4gPT0gTlVMTCkgeworKyAgICAg ICAgZm4gPSBvcmlncGF0aDsKKysgICAgfSBlbHNlIHsKKysgICAgICAgICsrZm47CisrICAgIH0K KysKKysgICAgc3RybmNweShwYXRoLCBvcmlncGF0aCwgZm4gLSBvcmlncGF0aCk7CisrICAgIHAg PSBwYXRoICsgKGZuIC0gb3JpZ3BhdGgpOworKyAgICBwID0gc3RwY3B5KHAsIEhNQUNfUFJFRklY KTsKKysgICAgcCA9IHN0cGNweShwLCBmbik7CisrICAgIHAgPSBzdHBjcHkocCwgSE1BQ19TVUZG SVgpOworKworKyAgICByZXR1cm4gcGF0aDsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgaG1h Y2tleVtdID0gIm9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsKKysKKytzdGF0aWMg aW50IGNvbXB1dGVfZmlsZV9obWFjKGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKipidWYsIHNpemVf dCAqaG1hY2xlbikKKyt7CisrICAgIEZJTEUgKmYgPSBOVUxMOworKyAgICBpbnQgcnYgPSAtMTsK KysgICAgdW5zaWduZWQgY2hhciByYnVmW1JFQURfQlVGRkVSX0xFTkdUSF07CisrICAgIHNpemVf dCBsZW47CisrICAgIHVuc2lnbmVkIGludCBobGVuOworKyAgICBITUFDX0NUWCAqYzsKKysKKysg ICAgYyA9IEhNQUNfQ1RYX25ldygpOworKyAgICBpZiAoYyA9PSBOVUxMKQorKyAgICAgICAgcmV0 dXJuIHJ2OworKworKyAgICBmID0gZm9wZW4ocGF0aCwgInIiKTsKKysKKysgICAgaWYgKGYgPT0g TlVMTCkgeworKyAgICAgICAgZ290byBlbmQ7CisrICAgIH0KKysKKysgICAgaWYgKEhNQUNfSW5p dF9leChjLCBobWFja2V5LCBzaXplb2YoaG1hY2tleSkgLSAxLCBFVlBfc2hhMjU2KCksIE5VTEwp IDw9IDApIHsKKysgICAgICAgIGdvdG8gZW5kOworKyAgICB9CisrCisrICAgIHdoaWxlICgobGVu ID0gZnJlYWQocmJ1ZiwgMSwgc2l6ZW9mKHJidWYpLCBmKSkgIT0gMCkgeworKyAgICAgICAgaWYg KEhNQUNfVXBkYXRlKGMsIHJidWYsIGxlbikgPD0gMCkgeworKyAgICAgICAgICAgIGdvdG8gZW5k OworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGxlbiA9IHNpemVvZihyYnVmKTsKKysgICAg LyogcmV1c2UgcmJ1ZiBmb3IgaG1hYyAqLworKyAgICBpZiAoSE1BQ19GaW5hbChjLCByYnVmLCAm aGxlbikgPD0gMCkgeworKyAgICAgICAgZ290byBlbmQ7CisrICAgIH0KKysKKysgICAgKmJ1ZiA9 IG1hbGxvYyhobGVuKTsKKysgICAgaWYgKCpidWYgPT0gTlVMTCkgeworKyAgICAgICAgZ290byBl bmQ7CisrICAgIH0KKysKKysgICAgKmhtYWNsZW4gPSBobGVuOworKworKyAgICBtZW1jcHkoKmJ1 ZiwgcmJ1ZiwgaGxlbik7CisrCisrICAgIHJ2ID0gMDsKKysgZW5kOgorKyAgICBITUFDX0NUWF9m cmVlKGMpOworKworKyAgICBpZiAoZikKKysgICAgICAgIGZjbG9zZShmKTsKKysKKysgICAgcmV0 dXJuIHJ2OworK30KKysKKytzdGF0aWMgaW50IEZJUFNDSEVDS192ZXJpZnkoY29uc3QgY2hhciAq cGF0aCkKKyt7CisrICAgIGludCBydiA9IDA7CisrICAgIEZJTEUgKmhmOworKyAgICBjaGFyICpo bWFjcGF0aCwgKnA7CisrICAgIGNoYXIgKmhtYWMgPSBOVUxMOworKyAgICBzaXplX3QgbjsKKysK KysgICAgaG1hY3BhdGggPSBtYWtlX2htYWNfcGF0aChwYXRoKTsKKysgICAgaWYgKGhtYWNwYXRo ID09IE5VTEwpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgaGYgPSBmb3BlbihobWFjcGF0 aCwgInIiKTsKKysgICAgaWYgKGhmID09IE5VTEwpIHsKKysgICAgICAgIGZyZWUoaG1hY3BhdGgp OworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgICAgaWYgKGdldGxpbmUoJmhtYWMs ICZuLCBoZikgPiAwKSB7CisrICAgICAgICB2b2lkICpidWY7CisrICAgICAgICBzaXplX3QgaG1h Y2xlbjsKKysgICAgICAgIGNoYXIgKmhleDsKKysKKysgICAgICAgIGlmICgocCA9IHN0cmNociho bWFjLCAnXG4nKSkgIT0gTlVMTCkKKysgICAgICAgICAgICAqcCA9ICdcMCc7CisrCisrICAgICAg ICBpZiAoY29tcHV0ZV9maWxlX2htYWMocGF0aCwgJmJ1ZiwgJmhtYWNsZW4pIDwgMCkgeworKyAg ICAgICAgICAgIHJ2ID0gLTQ7CisrICAgICAgICAgICAgZ290byBlbmQ7CisrICAgICAgICB9Cisr CisrICAgICAgICBpZiAoKGhleCA9IGJpbjJoZXgoYnVmLCBobWFjbGVuKSkgPT0gTlVMTCkgewor KyAgICAgICAgICAgIGZyZWUoYnVmKTsKKysgICAgICAgICAgICBydiA9IC01OworKyAgICAgICAg ICAgIGdvdG8gZW5kOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHN0cmNtcChoZXgsIGht YWMpICE9IDApIHsKKysgICAgICAgICAgICBydiA9IC0xOworKyAgICAgICAgfQorKyAgICAgICAg ZnJlZShidWYpOworKyAgICAgICAgZnJlZShoZXgpOworKyAgICB9IGVsc2UgeworKyAgICAgICAg cnYgPSAtMTsKKysgICAgfQorKworKyBlbmQ6CisrICAgIGZyZWUoaG1hYyk7CisrICAgIGZyZWUo aG1hY3BhdGgpOworKyAgICBmY2xvc2UoaGYpOworKworKyAgICBpZiAocnYgPCAwKQorKyAgICAg ICAgcmV0dXJuIDA7CisrCisrICAgIC8qIGNoZWNrIHN1Y2Nlc3NmdWwgKi8KKysgICAgcmV0dXJu IDE7CisrfQorKworK3N0YXRpYyBpbnQgdmVyaWZ5X2NoZWNrc3Vtcyh2b2lkKQorK3sKKysgICAg aW50IHJ2OworKyAgICBjaGFyIHBhdGhbUEFUSF9NQVggKyAxXTsKKysgICAgY2hhciAqcDsKKysK KysgICAgLyogd2UgbmVlZCB0byBhdm9pZCBkbG9wZW5pbmcgbGlic3NsLCBhc3N1bWUgYm90aCBs aWJjcnlwdG8gYW5kIGxpYnNzbAorKyAgICAgICBhcmUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5ICov CisrCisrICAgIHJ2ID0gZ2V0X2xpYnJhcnlfcGF0aCgibGliY3J5cHRvLnNvLiIgU0hMSUJfVkVS U0lPTl9OVU1CRVIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAiRklQU19tb2RlX3NldCIs IHBhdGgsIHNpemVvZihwYXRoKSk7CisrICAgIGlmIChydiA8IDApCisrICAgICAgICByZXR1cm4g MDsKKysKKysgICAgcnYgPSBGSVBTQ0hFQ0tfdmVyaWZ5KHBhdGgpOworKyAgICBpZiAoIXJ2KQor KyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIC8qIHJlcGxhY2UgbGliY3J5cHRvIHdpdGggbGli c3NsICovCisrICAgIHdoaWxlICgocCA9IHN0cnN0cihwYXRoLCAibGliY3J5cHRvLnNvIikpICE9 IE5VTEwpIHsKKysgICAgICAgIHAgPSBzdHBjcHkocCwgImxpYnNzbCIpOworKyAgICAgICAgbWVt bW92ZShwLCBwICsgMywgc3RybGVuKHAgKyAyKSk7CisrICAgIH0KKysKKysgICAgcnYgPSBGSVBT Q0hFQ0tfdmVyaWZ5KHBhdGgpOworKyAgICBpZiAoIXJ2KQorKyAgICAgICAgcmV0dXJuIDA7Cisr ICAgIHJldHVybiAxOworK30KKysKKysjIGlmbmRlZiBGSVBTX01PRFVMRV9QQVRICisrIyAgZGVm aW5lIEZJUFNfTU9EVUxFX1BBVEggIi9ldGMvc3lzdGVtLWZpcHMiCisrIyBlbmRpZgorKworK2lu dCBGSVBTX21vZHVsZV9pbnN0YWxsZWQodm9pZCkKKyt7CisrICAgIGludCBydjsKKysgICAgcnYg PSBhY2Nlc3MoRklQU19NT0RVTEVfUEFUSCwgRl9PSyk7CisrICAgIGlmIChydiA8IDAgJiYgZXJy bm8gIT0gRU5PRU5UKQorKyAgICAgICAgcnYgPSAwOworKworKyAgICAvKiBJbnN0YWxsZWQgPT0g dHJ1ZSAqLworKyAgICByZXR1cm4gIXJ2OworK30KKysKKytpbnQgRklQU19tb2R1bGVfbW9kZV9z ZXQoaW50IG9ub2ZmKQorK3sKKysgICAgaW50IHJldCA9IDA7CisrCisrICAgIGlmICghUlVOX09O Q0UoJmZpcHNfbG9ja19pbml0LCBkb19maXBzX2xvY2tfaW5pdCkpCisrICAgICAgICByZXR1cm4g TlVMTDsKKysKKysgICAgZmlwc193X2xvY2soKTsKKysgICAgZmlwc19zdGFydGVkID0gMTsKKysg ICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOworKworKyAgICBpZiAob25vZmYpIHsKKysKKysg ICAgICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7CisrCisrICAgICAgICAvKiBEb24ndCBnbyBp bnRvIEZJUFMgbW9kZSB0d2ljZSwganVzdCBzbyB3ZSBjYW4gZG8gYXV0b21hZ2ljCisrICAgICAg ICAgICBzZWVkaW5nICovCisrICAgICAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgpKSB7CisrICAg ICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsCisrICAgICAgICAg ICAgICAgICAgICBGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUKTsKKysgICAgICAgICAgICBm aXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKyAgICAgICAgICAgIHJldCA9IDA7CisrICAgICAgICAg ICAgZ290byBlbmQ7CisrICAgICAgICB9CisrIyBpZmRlZiBPUEVOU1NMX0lBMzJfU1NFMgorKyAg ICAgICAgeworKyAgICAgICAgICAgIGV4dGVybiB1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2Fw X1BbMl07CisrICAgICAgICAgICAgaWYgKChPUEVOU1NMX2lhMzJjYXBfUFswXSAmICgxIDw8IDI1 IHwgMSA8PCAyNikpICE9CisrICAgICAgICAgICAgICAgICgxIDw8IDI1IHwgMSA8PCAyNikpIHsK KysgICAgICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsCisr ICAgICAgICAgICAgICAgICAgICAgICAgRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JNKTsKKysg ICAgICAgICAgICAgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysgICAgICAgICAgICAgICAg cmV0ID0gMDsKKysgICAgICAgICAgICAgICAgZ290byBlbmQ7CisrICAgICAgICAgICAgfQorKyAg ICAgICAgfQorKyMgZW5kaWYKKysKKysgICAgICAgIGlmICghRklQU19zZWxmdGVzdCgpKSB7Cisr ICAgICAgICAgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysgICAgICAgICAgICByZXQgPSAw OworKyAgICAgICAgICAgIGdvdG8gZW5kOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKCF2 ZXJpZnlfY2hlY2tzdW1zKCkpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01P RFVMRV9NT0RFX1NFVCwKKysgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9GSU5HRVJQUklOVF9E T0VTX05PVF9NQVRDSCk7CisrICAgICAgICAgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysg ICAgICAgICAgICByZXQgPSAwOworKyAgICAgICAgICAgIGdvdG8gZW5kOworKyAgICAgICAgfQor KworKyAgICAgICAgZmlwc19zZXRfbW9kZShvbm9mZik7CisrICAgICAgICByZXQgPSAxOworKyAg ICAgICAgZ290byBlbmQ7CisrICAgIH0KKysgICAgZmlwc19zZXRfbW9kZSgwKTsKKysgICAgZmlw c19zZWxmdGVzdF9mYWlsID0gMDsKKysgICAgcmV0ID0gMTsKKysgZW5kOgorKyAgICBmaXBzX2Ns ZWFyX293bmluZ190aHJlYWQoKTsKKysgICAgZmlwc193X3VubG9jaygpOworKyAgICByZXR1cm4g cmV0OworK30KKysKKytzdGF0aWMgQ1JZUFRPX1RIUkVBRF9JRCBmaXBzX3RocmVhZGlkOworK3N0 YXRpYyBpbnQgZmlwc190aHJlYWRfc2V0ID0gMDsKKysKKytzdGF0aWMgaW50IGZpcHNfaXNfb3du aW5nX3RocmVhZCh2b2lkKQorK3sKKysgICAgaW50IHJldCA9IDA7CisrCisrICAgIGlmIChmaXBz X3N0YXJ0ZWQpIHsKKysgICAgICAgIENSWVBUT19USFJFQURfcmVhZF9sb2NrKGZpcHNfb3duaW5n X2xvY2spOworKyAgICAgICAgaWYgKGZpcHNfdGhyZWFkX3NldCkgeworKyAgICAgICAgICAgIENS WVBUT19USFJFQURfSUQgY3VyID0gQ1JZUFRPX1RIUkVBRF9nZXRfY3VycmVudF9pZCgpOworKyAg ICAgICAgICAgIGlmIChDUllQVE9fVEhSRUFEX2NvbXBhcmVfaWQoZmlwc190aHJlYWRpZCwgY3Vy KSkKKysgICAgICAgICAgICAgICAgcmV0ID0gMTsKKysgICAgICAgIH0KKysgICAgICAgIENSWVBU T19USFJFQURfdW5sb2NrKGZpcHNfb3duaW5nX2xvY2spOworKyAgICB9CisrICAgIHJldHVybiBy ZXQ7CisrfQorKworK2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCisreworKyAgICBp bnQgcmV0ID0gMDsKKysKKysgICAgaWYgKGZpcHNfc3RhcnRlZCkgeworKyAgICAgICAgQ1JZUFRP X1RIUkVBRF93cml0ZV9sb2NrKGZpcHNfb3duaW5nX2xvY2spOworKyAgICAgICAgaWYgKCFmaXBz X3RocmVhZF9zZXQpIHsKKysgICAgICAgICAgICBmaXBzX3RocmVhZGlkID0gQ1JZUFRPX1RIUkVB RF9nZXRfY3VycmVudF9pZCgpOworKyAgICAgICAgICAgIHJldCA9IDE7CisrICAgICAgICAgICAg Zmlwc190aHJlYWRfc2V0ID0gMTsKKysgICAgICAgIH0KKysgICAgICAgIENSWVBUT19USFJFQURf dW5sb2NrKGZpcHNfb3duaW5nX2xvY2spOworKyAgICB9CisrICAgIHJldHVybiByZXQ7CisrfQor KworK2ludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQodm9pZCkKKyt7CisrICAgIGludCByZXQg PSAwOworKworKyAgICBpZiAoZmlwc19zdGFydGVkKSB7CisrICAgICAgICBDUllQVE9fVEhSRUFE X3dyaXRlX2xvY2soZmlwc19vd25pbmdfbG9jayk7CisrICAgICAgICBpZiAoZmlwc190aHJlYWRf c2V0KSB7CisrICAgICAgICAgICAgQ1JZUFRPX1RIUkVBRF9JRCBjdXIgPSBDUllQVE9fVEhSRUFE X2dldF9jdXJyZW50X2lkKCk7CisrICAgICAgICAgICAgaWYgKENSWVBUT19USFJFQURfY29tcGFy ZV9pZChmaXBzX3RocmVhZGlkLCBjdXIpKQorKyAgICAgICAgICAgICAgICBmaXBzX3RocmVhZF9z ZXQgPSAwOworKyAgICAgICAgfQorKyAgICAgICAgQ1JZUFRPX1RIUkVBRF91bmxvY2soZmlwc19v d25pbmdfbG9jayk7CisrICAgIH0KKysgICAgcmV0dXJuIHJldDsKKyt9CisrCisrI2VuZGlmCitk aWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0 LmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0 LmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0 LmMuZmlwcwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwNjYyNDcyOCArMDIwMAorKysrIG9wZW5zc2wt MS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYwkyMDE4LTA3LTI1IDE3 OjI2OjU4LjQwNjYyNDcyOCArMDIwMAorQEAgLTAsMCArMSwxNTYgQEAKKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBt ZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysg KiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu CisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJpbnRlcm5hbC9m aXBzX2ludC5oIgorKyNpbmNsdWRlIDxvcGVuc3NsL2NtYWMuaD4KKysjaW5jbHVkZSAiZmlwc19s b2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3R5cGVkZWYgc3RydWN0IHsKKysgICAg aW50IG5pZDsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbRVZQX01BWF9LRVlfTEVOR1RI XTsKKysgICAgc2l6ZV90IGtleXNpemU7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnWzY0 XTsKKysgICAgc2l6ZV90IG1zZ3NpemU7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWFjWzMy XTsKKysgICAgc2l6ZV90IG1hY3NpemU7CisrfSBDTUFDX0tBVDsKKysKKysvKiBmcm9tIGh0dHA6 Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9uaXN0cHVicy84MDAtMzhCL1NQXzgwMC0zOEIu cGRmICovCisrc3RhdGljIGNvbnN0IENNQUNfS0FUIHZlY3RvcltdID0geworKyAgICB7TklEX2Fl c18xMjhfY2JjLCAgICAgICAgICAgLyogQ291bnQgPSAzMiBmcm9tIENNQUNHZW5BRVMxMjgudHh0 ICovCisrICAgICB7MHg3NywgMHhhNywgMHg3ZiwgMHhhZiwgMHgyOSwgMHgwYywgMHgxZiwgMHhh MywKKysgICAgICAweDBjLCAweDY4LCAweDNkLCAweGYxLCAweDZiLCAweGE3LCAweGE3LCAweDdi LH0sIDEyOCwKKysgICAgIHsweDAyLCAweDA2LCAweDgzLCAweGUxLCAweGYwLCAweDM5LCAweDJm LCAweDRjLAorKyAgICAgIDB4YWMsIDB4NTQsIDB4MzEsIDB4OGIsIDB4NjAsIDB4MjksIDB4MjUs IDB4OWUsCisrICAgICAgMHg5YywgMHg1NSwgMHgzZCwgMHhiYywgMHg0YiwgMHg2YSwgMHhkOSwg MHg5OCwKKysgICAgICAweGU2LCAweDRkLCAweDU4LCAweGU0LCAweGU3LCAweGRjLCAweDJlLCAw eDEzLH0sIDI1NiwKKysgICAgIHsweGZiLCAweGZlLCAweGE0LCAweDFiLH0sIDMyfSwKKysgICAg e05JRF9hZXNfMTkyX2NiYywgICAgICAgICAgIC8qIENvdW50ID0gMjMgZnJvbSBDTUFDR2VuQUVT MTkyLnR4dCAqLworKyAgICAgezB4N2IsIDB4MzIsIDB4MzksIDB4MTMsIDB4NjksIDB4YWEsIDB4 NGMsIDB4YTksCisrICAgICAgMHg3NSwgMHg1OCwgMHgwOSwgMHg1YiwgMHhlMywgMHhjMywgMHhl YywgMHg4NiwKKysgICAgICAweDJiLCAweGQwLCAweDU3LCAweGNlLCAweGYxLCAweGUzLCAweDJk LCAweDYyLH0sIDE5MiwKKysgICAgIHsweDB9LCAwLAorKyAgICAgezB4ZTQsIDB4ZDksIDB4MzQs IDB4MGIsIDB4MDMsIDB4ZTYsIDB4N2QsIDB4ZWYsCisrICAgICAgMHhkNCwgMHg5NiwgMHg5Yywg MHhjMSwgMHhlZCwgMHgzNywgMHgzNSwgMHhlNix9LCAxMjgsCisrICAgICB9LAorKyAgICB7TklE X2Flc18yNTZfY2JjLCAgICAgICAgICAgLyogQ291bnQgPSAzMyBmcm9tIENNQUNHZW5BRVMyNTYu dHh0ICovCisrICAgICB7MHgwYiwgMHgxMiwgMHgyYSwgMHhjOCwgMHhmMywgMHg0ZSwgMHhkMSwg MHhmZSwKKysgICAgICAweDA4LCAweDJhLCAweDM2LCAweDI1LCAweGQxLCAweDU3LCAweDU2LCAw eDE0LAorKyAgICAgIDB4NTQsIDB4MTYsIDB4N2EsIDB4YzEsIDB4NDUsIDB4YTEsIDB4MGIsIDB4 YmYsCisrICAgICAgMHg3NywgMHhjNiwgMHhhNywgMHgwNSwgMHg5NiwgMHhkNSwgMHg3NCwgMHhm MSx9LCAyNTYsCisrICAgICB7MHg0OSwgMHg4YiwgMHg1MywgMHhmZCwgMHhlYywgMHg4NywgMHhl ZCwgMHhjYiwKKysgICAgICAweGYwLCAweDcwLCAweDk3LCAweGRjLCAweGNkLCAweGU5LCAweDNh LCAweDA4LAorKyAgICAgIDB4NGIsIDB4YWQsIDB4NzUsIDB4MDEsIDB4YTIsIDB4MjQsIDB4ZTMs IDB4ODgsCisrICAgICAgMHhkZiwgMHgzNCwgMHg5YywgMHhlMSwgMHg4OSwgMHg1OSwgMHhmZSwg MHg4NCwKKysgICAgICAweDg1LCAweGY4LCAweGFkLCAweDE1LCAweDM3LCAweGYwLCAweGQ4LCAw eDk2LAorKyAgICAgIDB4ZWEsIDB4NzMsIDB4YmUsIDB4ZGMsIDB4NzIsIDB4MTQsIDB4NzEsIDB4 M2YsfSwgMzg0LAorKyAgICAgezB4ZjYsIDB4MmMsIDB4NDYsIDB4MzIsIDB4OWIsfSwgNDAsCisr ICAgICB9LAorKyAgICB7TklEX2Rlc19lZGUzX2NiYywgICAgICAgICAgLyogQ291bnQgPSA0MSBm cm9tIENNQUNHZW5UREVTMy5yZXEgKi8KKysgICAgIHsweDg5LCAweGJjLCAweGQ5LCAweDUyLCAw eGE4LCAweGM4LCAweGFiLCAweDM3LAorKyAgICAgIDB4MWEsIDB4ZjQsIDB4OGEsIDB4YzcsIDB4 ZDAsIDB4NzAsIDB4ODUsIDB4ZDUsCisrICAgICAgMHhlZiwgMHhmNywgMHgwMiwgMHhlNiwgMHhk NiwgMHgyYywgMHhkYywgMHgyMyx9LCAxOTIsCisrICAgICB7MHhmYSwgMHg2MiwgMHgwYywgMHgx YiwgMHhiZSwgMHg5NywgMHgzMSwgMHg5ZSwKKysgICAgICAweDlhLCAweDBjLCAweGYwLCAweDQ5 LCAweDIxLCAweDIxLCAweGY3LCAweGEyLAorKyAgICAgIDB4MGUsIDB4YjAsIDB4OGEsIDB4NmEs IDB4NzAsIDB4OWQsIDB4Y2IsIDB4ZDAsCisrICAgICAgMHgwYSwgMHhhZiwgMHgzOCwgMHhlNCwg MHhmOSwgMHg5ZSwgMHg3NSwgMHg0ZSx9LCAyNTYsCisrICAgICB7MHg4ZiwgMHg0OSwgMHhhMSwg MHhiNywgMHhkNiwgMHhhYSwgMHgyMiwgMHg1OCx9LCA2NCwKKysgICAgIH0sCisrfTsKKysKKytp bnQgRklQU19zZWxmdGVzdF9jbWFjKCkKKyt7CisrICAgIHNpemVfdCBuLCBvdXRsZW47CisrICAg IHVuc2lnbmVkIGNoYXIgb3V0WzMyXTsKKysgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyOwor KyAgICBDTUFDX0NUWCAqY3R4ID0gQ01BQ19DVFhfbmV3KCk7CisrICAgIGNvbnN0IENNQUNfS0FU ICp0OworKyAgICBpbnQgcnYgPSAxOworKworKyAgICBmb3IgKG4gPSAwLCB0ID0gdmVjdG9yOyBu IDwgc2l6ZW9mKHZlY3RvcikgLyBzaXplb2YodmVjdG9yWzBdKTsgbisrLCB0KyspIHsKKysgICAg ICAgIGNpcGhlciA9IEZJUFNfZ2V0X2NpcGhlcmJ5bmlkKHQtPm5pZCk7CisrICAgICAgICBpZiAo IWNpcGhlcikgeworKyAgICAgICAgICAgIHJ2ID0gLTE7CisrICAgICAgICAgICAgZ290byBlcnI7 CisrICAgICAgICB9CisrICAgICAgICBpZiAoIUNNQUNfSW5pdChjdHgsIHQtPmtleSwgdC0+a2V5 c2l6ZSAvIDgsIGNpcGhlciwgMCkpIHsKKysgICAgICAgICAgICBydiA9IC0xOworKyAgICAgICAg ICAgIGdvdG8gZXJyOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKCFDTUFDX1VwZGF0ZShjdHgs IHQtPm1zZywgdC0+bXNnc2l6ZSAvIDgpKSB7CisrICAgICAgICAgICAgcnYgPSAtMTsKKysgICAg ICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghQ01BQ19GaW5h bChjdHgsIG91dCwgJm91dGxlbikpIHsKKysgICAgICAgICAgICBydiA9IC0xOworKyAgICAgICAg ICAgIGdvdG8gZXJyOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKG91dGxlbiA8IHQtPm1h Y3NpemUgLyA4IHx8IG1lbWNtcChvdXQsIHQtPm1hYywgdC0+bWFjc2l6ZSAvIDgpKSB7CisrICAg ICAgICAgICAgcnYgPSAwOworKyAgICAgICAgfQorKyAgICB9CisrCisrIGVycjoKKysgICAgQ01B Q19DVFhfZnJlZShjdHgpOworKworKyAgICBpZiAocnYgPT0gLTEpIHsKKysgICAgICAgIHJ2ID0g MDsKKysgICAgfQorKyAgICBpZiAoIXJ2KQorKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19T RUxGVEVTVF9DTUFDLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysKKysgICAgcmV0dXJuIHJ2 OworK30KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9m aXBzX2Rlc19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2Zp cHNfZGVzX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlw c19kZXNfc2VsZnRlc3QuYy5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTguNDA2NjI0NzI4ICswMjAw CisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMJ MjAxOC0wNy0yNSAxNzoyNjo1OC40MDY2MjQ3MjggKzAyMDAKK0BAIC0wLDAgKzEsMTMzIEBACisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKyMgaW5jbHVkZSAiaW50ZXJuYWwvZmlwc19pbnQuaCIKKysjZW5kaWYK KysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IHsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBr ZXlbMTZdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKKysgICAgY29u c3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOworK30gdGVzdHMyW10gPSB7CisrICAgIHsK KysgICAgICAgIHsKKysgICAgICAgIDB4N2MsIDB4NGYsIDB4NmUsIDB4ZjcsIDB4YTIsIDB4MDQs IDB4MTYsIDB4ZWMsCisrICAgICAgICAgICAgICAgIDB4MGIsIDB4NmIsIDB4N2MsIDB4OWUsIDB4 NWUsIDB4MTksIDB4YTcsIDB4YzR9LCB7CisrICAgICAgICAweDA2LCAweGE3LCAweGQ4LCAweDc5 LCAweGFhLCAweGNlLCAweDY5LCAweGVmfSwgeworKyAgICAgICAgMHg0YywgMHgxMSwgMHgxNywg MHg1NSwgMHhiZiwgMHhjNCwgMHg0ZSwgMHhmZH0KKysgICAgfSwgeworKyAgICAgICAgeworKyAg ICAgICAgMHg1ZCwgMHg5ZSwgMHgwMSwgMHhkMywgMHgyNSwgMHhjNywgMHgzZSwgMHgzNCwKKysg ICAgICAgICAgICAgICAgMHgwMSwgMHgxNiwgMHg3YywgMHg4NSwgMHgyMywgMHhkZiwgMHhlMCwg MHg2OH0sIHsKKysgICAgICAgIDB4OWMsIDB4NTAsIDB4MDksIDB4MGYsIDB4NWUsIDB4N2QsIDB4 NjksIDB4N2V9LCB7CisrICAgIDB4ZDIsIDB4MGIsIDB4MTgsIDB4ZGYsIDB4ZDksIDB4MGQsIDB4 OWUsIDB4ZmZ9LH0KKyt9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworKyAgICBjb25zdCB1 bnNpZ25lZCBjaGFyIGtleVsyNF07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0 WzhdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07CisrfSB0ZXN0czNb XSA9IHsKKysgICAgeworKyAgICAgICAgeworKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysgICAgICAgICAgICAgICAgMHhGRSwgMHhEQywg MHhCQSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCwKKysgICAgICAgICAgICAgICAgMHgx MiwgMHgzNCwgMHg1NiwgMHg3OCwgMHg5YSwgMHhiYywgMHhkZSwgMHhmMH0sIHsKKysgICAgICAg IDB4OGYsIDB4OGYsIDB4YmYsIDB4OWIsIDB4NWQsIDB4NDgsIDB4YjQsIDB4MWN9LCB7CisrICAg IDB4NTksIDB4OGMsIDB4ZTUsIDB4ZDMsIDB4NmMsIDB4YTIsIDB4ZWEsIDB4MWJ9LH0sIHsKKysg ICAgICAgIHsKKysgICAgICAgIDB4REMsIDB4QkEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4 MTAsIDB4RkUsCisrICAgICAgICAgICAgICAgIDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODks IDB4QUIsIDB4Q0QsIDB4RUYsCisrICAgICAgICAgICAgICAgIDB4RUQsIDB4MzksIDB4RDksIDB4 NTAsIDB4RkEsIDB4NzQsIDB4QkMsIDB4QzR9LCB7CisrICAgICAgICAweDAxLCAweDIzLCAweDQ1 LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGfSwgeworKzB4MTEsIDB4MjUsIDB4YjAsIDB4 MzUsIDB4YmUsIDB4YTAsIDB4ODIsIDB4ODZ9LH0sfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9k ZXMoKQorK3sKKysgICAgaW50IG4sIHJldCA9IDA7CisrICAgIEVWUF9DSVBIRVJfQ1RYICpjdHg7 CisrCisrICAgIGN0eCA9IEVWUF9DSVBIRVJfQ1RYX25ldygpOworKyAgICBpZiAoY3R4ID09IE5V TEwpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGgg Mi1rZXkgM0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCisrICAgIGZvciAobiA9 IDA7IG4gPCAyOyArK24pIHsKKysgICAgICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOwor KworKyAgICAgICAgbWVtY3B5KHBsYWludGV4dCwgdGVzdHMyW25dLnBsYWludGV4dCwgc2l6ZW9m KHBsYWludGV4dCkpOworKyAgICAgICAgaWYgKCFmaXBzX2NpcGhlcl90ZXN0KGN0eCwgRVZQX2Rl c19lZGVfZWNiKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMyW25dLmtl eSwgTlVMTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbnRleHQsIHRlc3Rz MltuXS5jaXBoZXJ0ZXh0LCA4KSkKKysgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKwor KyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFu c3dlcnMgKi8KKysgICAgZm9yIChuID0gMDsgbiA8IDI7ICsrbikgeworKyAgICAgICAgaWYgKCFm aXBzX2NpcGhlcl90ZXN0KGN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRlc3RzM1tuXS5rZXksIE5VTEwsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGVzdHMzW25dLnBsYWludGV4dCwgdGVzdHMzW25dLmNpcGhlcnRleHQsIDgp KQorKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrICAgIHJldCA9IDE7CisrIGVycjoK KysgICAgRVZQX0NJUEhFUl9DVFhfZnJlZShjdHgpOworKyAgICBpZiAocmV0ID09IDApCisrICAg ICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUywgRklQU19SX1NFTEZURVNUX0ZB SUxFRCk7CisrCisrICAgIHJldHVybiByZXQ7CisrfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNz bC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZGhfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wt MS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2RoX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEu MS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19kaF9zZWxmdGVzdC5jLmZpcHMJMjAxOC0wNy0yNSAx NzoyNjo1OC40MDY2MjQ3MjggKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2Zp cHMvZmlwc19kaF9zZWxmdGVzdC5jCTIwMTgtMDctMjUgMTc6MjY6NTguNDA2NjI0NzI4ICswMjAw CitAQCAtMCwwICsxLDE4MCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqIENvcHly aWdodCAoYykgMjAxMyBSZWQgSGF0LCBJbmMuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAq CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJp YnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysg KgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUg ImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBkaF90ZXN0XzIwNDhfcFtdID0geworKyAgICAweEFFLCAweEVDLCAweEVF LCAweDIyLCAweEZBLCAweDNBLCAweEE1LCAweDIyLCAweEMwLCAweERFLCAweDBGLCAweDA5LAor KyAgICAweDdFLCAweDE3LCAweEMwLCAweDA1LCAweEY5LCAweEYxLCAweEU3LCAweEM2LCAweDg3 LCAweDE0LCAweDZELCAweDExLAorKyAgICAweEU3LCAweEFFLCAweEVELCAweDJGLCAweDcyLCAw eDU5LCAweEM1LCAweEE5LCAweDlCLCAweEI4LCAweDAyLCAweEE1LAorKyAgICAweEYzLCAweDY5 LCAweDcwLCAweEQ2LCAweERELCAweDkwLCAweEY5LCAweDE5LCAweDc5LCAweEJFLCAweDYwLCAw eDhGLAorKyAgICAweDI1LCAweDkyLCAweDMwLCAweDFDLCAweDUxLCAweDUxLCAweDM4LCAweDI2 LCAweDgyLCAweDI1LCAweEU2LCAweEZDLAorKyAgICAweEVELCAweDY1LCAweDk2LCAweDhGLCAw eDU3LCAweEU1LCAweDUzLCAweDhCLCAweDM4LCAweDYzLCAweEM3LCAweENFLAorKyAgICAweEJD LCAweDFCLCAweDRELCAweDE4LCAweDJBLCAweDVCLCAweDA0LCAweDNGLCAweDZBLCAweDNDLCAw eDk0LCAweDM5LAorKyAgICAweEFFLCAweDM2LCAweEQ2LCAweDVFLCAweDBGLCAweEEyLCAweEND LCAweEQwLCAweEQ0LCAweEQ1LCAweEM2LCAweDFFLAorKyAgICAweEY2LCAweEEwLCAweEY1LCAw eDg5LCAweDRFLCAweEI0LCAweDBCLCAweEE0LCAweEIzLCAweDJCLCAweDNELCAweEUyLAorKyAg ICAweDRFLCAweEUxLCAweDQ5LCAweDI1LCAweDk5LCAweDVGLCAweDMyLCAweDE2LCAweDMzLCAw eDMyLCAweDFCLCAweDdBLAorKyAgICAweEE1LCAweDVDLCAweDZCLCAweDM0LCAweDBELCAweDM5 LCAweDk5LCAweERDLCAweEYwLCAweDc2LCAweEU1LCAweDVBLAorKyAgICAweEQ0LCAweDcxLCAw eDAwLCAweEVELCAweDVBLCAweDczLCAweEZCLCAweEM4LCAweDAxLCAweEFELCAweDk5LCAweENG LAorKyAgICAweDk5LCAweDUyLCAweDdDLCAweDlDLCAweDY0LCAweEM2LCAweDc2LCAweDQwLCAw eDU3LCAweEFGLCAweDU5LCAweEQ3LAorKyAgICAweDM4LCAweDBCLCAweDQwLCAweERFLCAweDMz LCAweDBELCAweEI4LCAweDc2LCAweEVDLCAweEE5LCAweEQ4LCAweDczLAorKyAgICAweEY4LCAw eEVGLCAweDI2LCAweDY2LCAweDA2LCAweDI3LCAweERELCAweDdDLCAweEE0LCAweDEwLCAweDlD LCAweEE2LAorKyAgICAweEFBLCAweEY5LCAweDUzLCAweDYyLCAweDczLCAweDFELCAweEJBLCAw eDFDLCAweEYxLCAweDY3LCAweEY0LCAweDM1LAorKyAgICAweEVELCAweDZGLCAweDM3LCAweDky LCAweEU4LCAweDRGLCAweDZDLCAweEJBLCAweDUyLCAweDZFLCAweEExLCAweEVELAorKyAgICAw eERBLCAweDlGLCAweDg1LCAweDExLCAweDgyLCAweDUyLCAweDYyLCAweDA4LCAweDQ0LCAweEYx LCAweDMwLCAweDAzLAorKyAgICAweEMzLCAweDM4LCAweDJDLCAweDc5LCAweEJELCAweEQ0LCAw eDQzLCAweDQ1LCAweEVFLCAweDhFLCAweDUwLCAweEZDLAorKyAgICAweDI5LCAweDQ2LCAweDlB LCAweEZFLCAweDU0LCAweDFBLCAweDE5LCAweDhGLCAweDRCLCAweDg0LCAweDA4LCAweERFLAor KyAgICAweDIwLCAweDYyLCAweDczLCAweENDLCAweERELCAweDdFLCAweEYwLCAweEVGLCAweEEy LCAweEZELCAweDg2LCAweDU4LAorKyAgICAweDRCLCAweEQ4LCAweDM3LCAweEVCCisrfTsKKysK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaF90ZXN0XzIwNDhfZ1tdID0geworKyAgICAw eDAyCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaF90ZXN0XzIwNDhfcHVi X2tleVtdID0geworKyAgICAweEEwLCAweDM5LCAweDExLCAweDc3LCAweDlBLCAweEMxLCAweDMw LCAweDFGLCAweEJFLCAweDQ4LCAweEE3LCAweEFBLAorKyAgICAweEEwLCAweDg0LCAweDU0LCAw eDY0LCAweEFELCAweDFCLCAweDcwLCAweEZBLCAweDEzLCAweDU1LCAweDYzLCAweEQyLAorKyAg ICAweDFGLCAweDYyLCAweDMyLCAweDkzLCAweDhFLCAweEM5LCAweDNFLCAweDA5LCAweEE3LCAw eDY0LCAweEU0LCAweDEyLAorKyAgICAweDZFLCAweDFCLCAweEYyLCAweDkyLCAweDNCLCAweEI5 LCAweENCLCAweDU2LCAweEVBLCAweDA3LCAweDg4LCAweEI1LAorKyAgICAweEE2LCAweEJDLCAw eDE2LCAweDFGLCAweDI3LCAweEZFLCAweEQ4LCAweEFBLCAweDQwLCAweEIyLCAweEIwLCAweDJE LAorKyAgICAweDM3LCAweDc2LCAweEE2LCAweEE0LCAweDgyLCAweDJDLCAweDBFLCAweDIyLCAw eDY0LCAweDlELCAweENCLCAweEQxLAorKyAgICAweDAwLCAweEI3LCAweDg5LCAweDE0LCAweDcy LCAweDRFLCAweEJFLCAweDQ4LCAweDQxLCAweEY4LCAweEIyLCAweDUxLAorKyAgICAweDExLCAw eDA5LCAweDRCLCAweDIyLCAweDAxLCAweDIzLCAweDM5LCAweDk2LCAweEUwLCAweDE1LCAweEQ3 LCAweDlGLAorKyAgICAweDYwLCAweEQxLCAweEI3LCAweEFFLCAweEZFLCAweDVGLCAweERCLCAw eEU3LCAweDAzLCAweDE3LCAweDk3LCAweEE2LAorKyAgICAweDE2LCAweDc0LCAweEJELCAweDUz LCAweDgxLCAweDE5LCAweEM1LCAweDQ3LCAweDVFLCAweENFLCAweDhELCAweEVELAorKyAgICAw eDQ1LCAweDVELCAweDNDLCAweDAwLCAweEEwLCAweDBBLCAweDY4LCAweDZBLCAweEUwLCAweDhF LCAweDA2LCAweDQ2LAorKyAgICAweDZGLCAweEQ3LCAweEY5LCAweERGLCAweDMxLCAweDdFLCAw eDc3LCAweDQ0LCAweDBELCAweDk4LCAweEUwLCAweENBLAorKyAgICAweDk4LCAweDA5LCAweDUy LCAweDA0LCAweDkwLCAweEVBLCAweDZELCAweEY0LCAweDMwLCAweDY5LCAweDhGLCAweEIxLAor KyAgICAweDlCLCAweEMxLCAweDQzLCAweERCLCAweEQ1LCAweDhELCAweEM4LCAweDhFLCAweEI2 LCAweDBCLCAweDA1LCAweEJFLAorKyAgICAweDBFLCAweEM1LCAweDk5LCAweEM4LCAweDZFLCAw eDRFLCAweEYzLCAweENCLCAweEMzLCAweDVFLCAweDlCLCAweDUzLAorKyAgICAweEY3LCAweDA2 LCAweDFDLCAweDRGLCAweEM3LCAweEI4LCAweDZFLCAweDMwLCAweDE4LCAweENBLCAweDlCLCAw eEI5LAorKyAgICAweEJDLCAweDVGLCAweDE3LCAweDcyLCAweDI5LCAweDVBLCAweEU1LCAweEQ5 LCAweDk2LCAweEI3LCAweDBCLCAweEYzLAorKyAgICAweDJELCAweDhDLCAweEYxLCAweEUxLCAw eDBFLCAweDBELCAweDc0LCAweEQ1LCAweDlELCAweEYwLCAweDA2LCAweEE5LAorKyAgICAweEI0 LCAweDk1LCAweDYzLCAweDc2LCAweDQ2LCAweDU1LCAweDQ4LCAweDgyLCAweDM5LCAweDkwLCAw eEVGLCAweDU2LAorKyAgICAweDc1LCAweDM0LCAweEI4LCAweDM0LCAweEMzLCAweDE4LCAweDZF LCAweDFFLCAweEFELCAweEUzLCAweDQ4LCAweDdFLAorKyAgICAweDkzLCAweDJDLCAweDIzLCAw eEU3LCAweEY4LCAweDkwLCAweDczLCAweEIxLCAweDc3LCAweDgwLCAweDY3LCAweEE5LAorKyAg ICAweDM2LCAweDlFLCAweERBLCAweEQyCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBkaF90ZXN0XzIwNDhfcHJpdl9rZXlbXSA9IHsKKysgICAgMHgwQywgMHg0QiwgMHgzMCwg MHg4OSwgMHhEMSwgMHhCOCwgMHg2MiwgMHhDQiwgMHgzQywgMHg0MywgMHg2NCwgMHg5MSwKKysg ICAgMHhGMCwgMHg5MSwgMHg1NCwgMHg3MCwgMHhDNSwgMHgyNywgMHg5NiwgMHhFMywgMHhBQywg MHhCRSwgMHhFOCwgMHgwMCwKKysgICAgMHhFQywgMHg1NSwgMHhGNiwgMHhDQworK307CisrCisr aW50IEZJUFNfc2VsZnRlc3RfZGgoKQorK3sKKysgICAgREggKmRoID0gTlVMTDsKKysgICAgaW50 IHJldCA9IDA7CisrICAgIHZvaWQgKnB1Yl9rZXlfYmluID0gTlVMTDsKKysgICAgaW50IGxlbjsK KysgICAgQklHTlVNICpwID0gTlVMTCwgKmcgPSBOVUxMLCAqcHJpdl9rZXkgPSBOVUxMLCAqdG1w X3B1Yl9rZXkgPSBOVUxMOworKyAgICBjb25zdCBCSUdOVU0gKnB1Yl9rZXk7CisrCisrICAgIGZp cHNfbG9hZF9rZXlfY29tcG9uZW50KHAsIGRoX3Rlc3RfMjA0OCk7CisrICAgIGZpcHNfbG9hZF9r ZXlfY29tcG9uZW50KGcsIGRoX3Rlc3RfMjA0OCk7CisrICAgIC8qIG5vdGUgdGhhdCB0aGUgcHJp dmF0ZSBrZXkgaXMgbXVjaCBzaG9ydGVyIHRoYW4gbm9ybWFsbHkgdXNlZAorKyAgICAgKiBidXQg c3RpbGwgZyAqKiBwcml2X2tleSA+IHAKKysgICAgICovCisrICAgIGZpcHNfbG9hZF9rZXlfY29t cG9uZW50KHByaXZfa2V5LCBkaF90ZXN0XzIwNDgpOworKyAgICBpZiAoKHRtcF9wdWJfa2V5ID0g Qk5fbmV3KCkpID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgZGggPSBESF9u ZXcoKTsKKysKKysgICAgaWYgKGRoID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysKKysg ICAgREhfc2V0MF9wcWcoZGgsIHAsIE5VTEwsIGcpOworKyAgICBESF9zZXQwX2tleShkaCwgdG1w X3B1Yl9rZXksIHByaXZfa2V5KTsKKysKKysgICAgaWYgKERIX2dlbmVyYXRlX2tleShkaCkgPD0g MCkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBESF9nZXQwX2tleShkaCwgJnB1Yl9rZXks IE5VTEwpOworKworKyAgICBpZiAocHViX2tleSA9PSBOVUxMKQorKyAgICAgICAgZ290byBlcnI7 CisrCisrICAgIGxlbiA9IEJOX251bV9ieXRlcyhwdWJfa2V5KTsKKysgICAgaWYgKChwdWJfa2V5 X2JpbiA9IE9QRU5TU0xfbWFsbG9jKGxlbikpID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsK KysgICAgQk5fYm4yYmluKHB1Yl9rZXksIHB1Yl9rZXlfYmluKTsKKysKKysgICAgaWYgKGxlbiAh PSBzaXplb2YoZGhfdGVzdF8yMDQ4X3B1Yl9rZXkpIHx8CisrICAgICAgICBtZW1jbXAocHViX2tl eV9iaW4sIGRoX3Rlc3RfMjA0OF9wdWJfa2V5LCBsZW4pICE9IDApCisrICAgICAgICBnb3RvIGVy cjsKKysKKysgICAgcmV0ID0gMTsKKysKKysgZXJyOgorKyAgICBpZiAoZGgpCisrICAgICAgICBE SF9mcmVlKGRoKTsKKysgICAgZWxzZSB7CisrICAgICAgICBCTl9mcmVlKHApOworKyAgICAgICAg Qk5fZnJlZShnKTsKKysgICAgICAgIEJOX2ZyZWUocHJpdl9rZXkpOworKyAgICAgICAgQk5fZnJl ZSh0bXBfcHViX2tleSk7CisrICAgIH0KKysKKysgICAgT1BFTlNTTF9mcmVlKHB1Yl9rZXlfYmlu KTsKKysgICAgcmV0dXJuIHJldDsKKyt9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMS4x LXByZTgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jLmZpcHMgb3BlbnNzbC0xLjEuMS1wcmU4 L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIuYworLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlw dG8vZmlwcy9maXBzX2RyYmdfY3RyLmMuZmlwcwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwNjYyNDcy OCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3Ry LmMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MDY2MjQ3MjggKzAyMDAKK0BAIC0wLDAgKzEsNDE1IEBA CisrLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19jdHIuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3Rl cGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHBy b2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisr ICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu CisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKKysKKytzdGF0aWMg dm9pZCBpbmNfMTI4KERSQkdfQ1RSX0NUWCAqIGNjdHgpCisreworKyAgICBpbnQgaTsKKysgICAg dW5zaWduZWQgY2hhciBjOworKyAgICB1bnNpZ25lZCBjaGFyICpwID0gY2N0eC0+ViArIDE1Owor KyAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgYyA9ICpwOworKyAgICAg ICAgYysrOworKyAgICAgICAgKnAgPSBjOworKyAgICAgICAgaWYgKGMpCisrICAgICAgICAgICAg cmV0dXJuOworKyAgICAgICAgcC0tOworKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkIGN0cl9Y T1IoRFJCR19DVFJfQ1RYICogY2N0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisrICAgICAg ICAgICAgICAgICAgICBzaXplX3QgaW5sZW4pCisreworKyAgICBzaXplX3QgaSwgbjsKKysgICAg LyogQW55IHplcm8gcGFkZGluZyB3aWxsIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSByZXN1bHQgYXMg d2UKKysgICAgICogYXJlIFhPUmluZy4gU28ganVzdCBwcm9jZXNzIGhvd2V2ZXIgbXVjaCBpbnB1 dCB3ZSBoYXZlLgorKyAgICAgKi8KKysKKysgICAgaWYgKCFpbiB8fCAhaW5sZW4pCisrICAgICAg ICByZXR1cm47CisrCisrICAgIGlmIChpbmxlbiA8IGNjdHgtPmtleWxlbikKKysgICAgICAgIG4g PSBpbmxlbjsKKysgICAgZWxzZQorKyAgICAgICAgbiA9IGNjdHgtPmtleWxlbjsKKysKKysgICAg Zm9yIChpID0gMDsgaSA8IG47IGkrKykKKysgICAgICAgIGNjdHgtPktbaV0gXj0gaW5baV07Cisr ICAgIGlmIChpbmxlbiA8PSBjY3R4LT5rZXlsZW4pCisrICAgICAgICByZXR1cm47CisrCisrICAg IG4gPSBpbmxlbiAtIGNjdHgtPmtleWxlbjsKKysgICAgLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAq LworKyAgICBpZiAobiA+IDE2KQorKyAgICAgICAgbiA9IDE2OworKyAgICBmb3IgKGkgPSAwOyBp IDwgMTY7IGkrKykKKysgICAgICAgIGNjdHgtPlZbaV0gXj0gaW5baSArIGNjdHgtPmtleWxlbl07 CisrfQorKworKy8qIFByb2Nlc3MgYSBjb21wbGV0ZSBibG9jayB1c2luZyBCQ0MgYWxnb3JpdGht IG9mIFNQUCA4MDAtOTAgMTAuNC4zICovCisrCisrc3RhdGljIHZvaWQgY3RyX0JDQ19ibG9jayhE UkJHX0NUUl9DVFggKiBjY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbikKKyt7CisrICAgIGludCBpOworKyAg ICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKysgICAgICAgIG91dFtpXSBePSBpbltpXTsKKysg ICAgQUVTX2VuY3J5cHQob3V0LCBvdXQsICZjY3R4LT5kZl9rcyk7CisrI2lmIDAKKysgICAgZnBy aW50ZihzdGRlcnIsICJCQ0MgaW4rb3V0XG4iKTsKKysgICAgQklPX2R1bXBfZnAoc3RkZXJyLCBp biwgMTYpOworKyAgICBCSU9fZHVtcF9mcChzdGRlcnIsIG91dCwgMTYpOworKyNlbmRpZgorK30K KysKKysvKiBIYW5kbGUgc2V2ZXJhbCBCQ0Mgb3BlcmF0aW9ucyBmb3IgYXMgbXVjaCBkYXRhIGFz IHdlIG5lZWQgZm9yIEsgYW5kIFggKi8KKytzdGF0aWMgdm9pZCBjdHJfQkNDX2Jsb2NrcyhEUkJH X0NUUl9DVFggKiBjY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbikKKyt7CisrICAgIGN0cl9C Q0NfYmxvY2soY2N0eCwgY2N0eC0+S1gsIGluKTsKKysgICAgY3RyX0JDQ19ibG9jayhjY3R4LCBj Y3R4LT5LWCArIDE2LCBpbik7CisrICAgIGlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCisrICAgICAg ICBjdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMzIsIGluKTsKKyt9CisrCisrLyogSW5p dGlhbGlzZSBCQ0MgYmxvY2tzOiB0aGVzZSBoYXZlIHRoZSB2YWx1ZSAwLDEsMiBpbiBsZWZ0bW9z dCBwb3NpdGlvbnM6CisrICogc2VlIDEwLjQuMiBzdGFnZSA3LgorKyAqLworK3N0YXRpYyB2b2lk IGN0cl9CQ0NfaW5pdChEUkJHX0NUUl9DVFggKiBjY3R4KQorK3sKKysgICAgbWVtc2V0KGNjdHgt PktYLCAwLCA0OCk7CisrICAgIG1lbXNldChjY3R4LT5ibHRtcCwgMCwgMTYpOworKyAgICBjdHJf QkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYLCBjY3R4LT5ibHRtcCk7CisrICAgIGNjdHgtPmJsdG1w WzNdID0gMTsKKysgICAgY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDE2LCBjY3R4LT5i bHRtcCk7CisrICAgIGlmIChjY3R4LT5rZXlsZW4gIT0gMTYpIHsKKysgICAgICAgIGNjdHgtPmJs dG1wWzNdID0gMjsKKysgICAgICAgIGN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAzMiwg Y2N0eC0+Ymx0bXApOworKyAgICB9CisrfQorKworKy8qIFByb2Nlc3Mgc2V2ZXJhbCBibG9ja3Mg aW50byBCQ0MgYWxnb3JpdGhtLCBzb21lIHBvc3NpYmx5IHBhcnRpYWwgKi8KKytzdGF0aWMgdm9p ZCBjdHJfQkNDX3VwZGF0ZShEUkJHX0NUUl9DVFggKiBjY3R4LAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCisreworKyAg ICBpZiAoIWluIHx8ICFpbmxlbikKKysgICAgICAgIHJldHVybjsKKysgICAgLyogSWYgd2UgaGF2 ZSBwYXJ0aWFsIGJsb2NrIGhhbmRsZSBpdCBmaXJzdCAqLworKyAgICBpZiAoY2N0eC0+Ymx0bXBf cG9zKSB7CisrICAgICAgICBzaXplX3QgbGVmdCA9IDE2IC0gY2N0eC0+Ymx0bXBfcG9zOworKyAg ICAgICAgLyogSWYgd2Ugbm93IGhhdmUgYSBjb21wbGV0ZSBibG9jayBwcm9jZXNzIGl0ICovCisr ICAgICAgICBpZiAoaW5sZW4gPj0gbGVmdCkgeworKyAgICAgICAgICAgIG1lbWNweShjY3R4LT5i bHRtcCArIGNjdHgtPmJsdG1wX3BvcywgaW4sIGxlZnQpOworKyAgICAgICAgICAgIGN0cl9CQ0Nf YmxvY2tzKGNjdHgsIGNjdHgtPmJsdG1wKTsKKysgICAgICAgICAgICBjY3R4LT5ibHRtcF9wb3Mg PSAwOworKyAgICAgICAgICAgIGlubGVuIC09IGxlZnQ7CisrICAgICAgICAgICAgaW4gKz0gbGVm dDsKKysgICAgICAgIH0KKysgICAgfQorKyAgICAvKiBQcm9jZXNzIHplcm8gb3IgbW9yZSBjb21w bGV0ZSBibG9ja3MgKi8KKysgICAgd2hpbGUgKGlubGVuID49IDE2KSB7CisrICAgICAgICBjdHJf QkNDX2Jsb2NrcyhjY3R4LCBpbik7CisrICAgICAgICBpbiArPSAxNjsKKysgICAgICAgIGlubGVu IC09IDE2OworKyAgICB9CisrICAgIC8qIENvcHkgYW55IHJlbWFpbmluZyBwYXJ0aWFsIGJsb2Nr IHRvIHRoZSB0ZW1wb3JhcnkgYnVmZmVyICovCisrICAgIGlmIChpbmxlbiA+IDApIHsKKysgICAg ICAgIG1lbWNweShjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgaW4sIGlubGVuKTsKKysg ICAgICAgIGNjdHgtPmJsdG1wX3BvcyArPSBpbmxlbjsKKysgICAgfQorK30KKysKKytzdGF0aWMg dm9pZCBjdHJfQkNDX2ZpbmFsKERSQkdfQ1RSX0NUWCAqIGNjdHgpCisreworKyAgICBpZiAoY2N0 eC0+Ymx0bXBfcG9zKSB7CisrICAgICAgICBtZW1zZXQoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRt cF9wb3MsIDAsIDE2IC0gY2N0eC0+Ymx0bXBfcG9zKTsKKysgICAgICAgIGN0cl9CQ0NfYmxvY2tz KGNjdHgsIGNjdHgtPmJsdG1wKTsKKysgICAgfQorK30KKysKKytzdGF0aWMgdm9pZCBjdHJfZGYo RFJCR19DVFJfQ1RYICogY2N0eCwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCisrICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmluMywgc2l6ZV90IGluM2xlbikKKyt7CisrICAgIHNpemVfdCBpbmxl bjsKKysgICAgdW5zaWduZWQgY2hhciAqcCA9IGNjdHgtPmJsdG1wOworKyAgICBzdGF0aWMgdW5z aWduZWQgY2hhciBjODAgPSAweDgwOworKworKyAgICBjdHJfQkNDX2luaXQoY2N0eCk7CisrICAg IGlmICghaW4xKQorKyAgICAgICAgaW4xbGVuID0gMDsKKysgICAgaWYgKCFpbjIpCisrICAgICAg ICBpbjJsZW4gPSAwOworKyAgICBpZiAoIWluMykKKysgICAgICAgIGluM2xlbiA9IDA7CisrICAg IGlubGVuID0gaW4xbGVuICsgaW4ybGVuICsgaW4zbGVuOworKyAgICAvKiBJbml0aWFsaXNlIEx8 fE4gaW4gdGVtcG9yYXJ5IGJsb2NrICovCisrICAgICpwKysgPSAoaW5sZW4gPj4gMjQpICYgMHhm ZjsKKysgICAgKnArKyA9IChpbmxlbiA+PiAxNikgJiAweGZmOworKyAgICAqcCsrID0gKGlubGVu ID4+IDgpICYgMHhmZjsKKysgICAgKnArKyA9IGlubGVuICYgMHhmZjsKKysgICAgLyogTkIga2V5 bGVuIGlzIGF0IG1vc3QgMzIgYnl0ZXMgKi8KKysgICAgKnArKyA9IDA7CisrICAgICpwKysgPSAw OworKyAgICAqcCsrID0gMDsKKysgICAgKnAgPSAodW5zaWduZWQgY2hhcikoKGNjdHgtPmtleWxl biArIDE2KSAmIDB4ZmYpOworKyAgICBjY3R4LT5ibHRtcF9wb3MgPSA4OworKyAgICBjdHJfQkND X3VwZGF0ZShjY3R4LCBpbjEsIGluMWxlbik7CisrICAgIGN0cl9CQ0NfdXBkYXRlKGNjdHgsIGlu MiwgaW4ybGVuKTsKKysgICAgY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4zLCBpbjNsZW4pOworKyAg ICBjdHJfQkNDX3VwZGF0ZShjY3R4LCAmYzgwLCAxKTsKKysgICAgY3RyX0JDQ19maW5hbChjY3R4 KTsKKysgICAgLyogU2V0IHVwIGtleSBLICovCisrICAgIEFFU19zZXRfZW5jcnlwdF9rZXkoY2N0 eC0+S1gsIGNjdHgtPmtleWxlbiAqIDgsICZjY3R4LT5kZl9reGtzKTsKKysgICAgLyogWCBmb2xs b3dzIGtleSBLICovCisrICAgIEFFU19lbmNyeXB0KGNjdHgtPktYICsgY2N0eC0+a2V5bGVuLCBj Y3R4LT5LWCwgJmNjdHgtPmRmX2t4a3MpOworKyAgICBBRVNfZW5jcnlwdChjY3R4LT5LWCwgY2N0 eC0+S1ggKyAxNiwgJmNjdHgtPmRmX2t4a3MpOworKyAgICBpZiAoY2N0eC0+a2V5bGVuICE9IDE2 KQorKyAgICAgICAgQUVTX2VuY3J5cHQoY2N0eC0+S1ggKyAxNiwgY2N0eC0+S1ggKyAzMiwgJmNj dHgtPmRmX2t4a3MpOworKyNpZiAwCisrICAgIGZwcmludGYoc3RkZXJyLCAiT3V0cHV0IG9mIGN0 cl9kZjpcbiIpOworKyAgICBCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPktYLCBjY3R4LT5rZXls ZW4gKyAxNik7CisrI2VuZGlmCisrfQorKworKy8qIE5CIHRoZSBuby1kZiAgVXBkYXRlIGluIFNQ ODAwLTkwIHNwZWNpZmllcyBhIGNvbnN0YW50IGlucHV0IGxlbmd0aAorKyAqIG9mIHNlZWRsZW4s IGhvd2V2ZXIgb3RoZXIgdXNlcyBvZiB0aGlzIGFsZ29yaXRobSBwYWQgdGhlIGlucHV0IHdpdGgK KysgKiB6ZXJvZXMgaWYgbmVjZXNzYXJ5IGFuZCBoYXZlIHVwIHRvIHR3byBwYXJhbWV0ZXJzIFhP UmVkIHRvZ2V0aGVyLAorKyAqIGhhbmRsZSBib3RoIGNhc2VzIGluIHRoaXMgZnVuY3Rpb24gaW5z dGVhZC4KKysgKi8KKysKKytzdGF0aWMgdm9pZCBjdHJfVXBkYXRlKERSQkdfQ1RYICpkY3R4LAor KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4xLCBzaXplX3Qg aW4xbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4y LCBzaXplX3QgaW4ybGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbikKKyt7CisrICAgIERSQkdfQ1RSX0NUWCAqY2N0 eCA9ICZkY3R4LT5kLmN0cjsKKysgICAgLyoga3MgaXMgYWxyZWFkeSBzZXR1cCBmb3IgY29ycmVj dCBrZXkgKi8KKysgICAgaW5jXzEyOChjY3R4KTsKKysgICAgQUVTX2VuY3J5cHQoY2N0eC0+Viwg Y2N0eC0+SywgJmNjdHgtPmtzKTsKKysgICAgLyogSWYga2V5bGVuIGxvbmdlciB0aGFuIDEyOCBi aXRzIG5lZWQgZXh0cmEgZW5jcnlwdCAqLworKyAgICBpZiAoY2N0eC0+a2V5bGVuICE9IDE2KSB7 CisrICAgICAgICBpbmNfMTI4KGNjdHgpOworKyAgICAgICAgQUVTX2VuY3J5cHQoY2N0eC0+Viwg Y2N0eC0+SyArIDE2LCAmY2N0eC0+a3MpOworKyAgICB9CisrICAgIGluY18xMjgoY2N0eCk7Cisr ICAgIEFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPlYsICZjY3R4LT5rcyk7CisrICAgIC8qIElm IDE5MiBiaXQga2V5IHBhcnQgb2YgViBpcyBvbiBlbmQgb2YgSyAqLworKyAgICBpZiAoY2N0eC0+ a2V5bGVuID09IDI0KSB7CisrICAgICAgICBtZW1jcHkoY2N0eC0+ViArIDgsIGNjdHgtPlYsIDgp OworKyAgICAgICAgbWVtY3B5KGNjdHgtPlYsIGNjdHgtPksgKyAyNCwgOCk7CisrICAgIH0KKysK KysgICAgaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKSB7CisrICAgICAg ICAvKiBJZiBubyBpbnB1dCByZXVzZSBleGlzdGluZyBkZXJpdmVkIHZhbHVlICovCisrICAgICAg ICBpZiAoaW4xIHx8IG5vbmNlIHx8IGluMikKKysgICAgICAgICAgICBjdHJfZGYoY2N0eCwgaW4x LCBpbjFsZW4sIG5vbmNlLCBub25jZWxlbiwgaW4yLCBpbjJsZW4pOworKyAgICAgICAgLyogSWYg dGhpcyBhIHJldXNlIGlucHV0IGluMWxlbiAhPSAwICovCisrICAgICAgICBpZiAoaW4xbGVuKQor KyAgICAgICAgICAgIGN0cl9YT1IoY2N0eCwgY2N0eC0+S1gsIGRjdHgtPnNlZWRsZW4pOworKyAg ICB9IGVsc2UgeworKyAgICAgICAgY3RyX1hPUihjY3R4LCBpbjEsIGluMWxlbik7CisrICAgICAg ICBjdHJfWE9SKGNjdHgsIGluMiwgaW4ybGVuKTsKKysgICAgfQorKworKyAgICBBRVNfc2V0X2Vu Y3J5cHRfa2V5KGNjdHgtPkssIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+a3MpOworKyNpZiAwCisr ICAgIGZwcmludGYoc3RkZXJyLCAiSytWIGFmdGVyIHVwZGF0ZSBpczpcbiIpOworKyAgICBCSU9f ZHVtcF9mcChzdGRlcnIsIGNjdHgtPkssIGNjdHgtPmtleWxlbik7CisrICAgIEJJT19kdW1wX2Zw KHN0ZGVyciwgY2N0eC0+ViwgMTYpOworKyNlbmRpZgorK30KKysKKytzdGF0aWMgaW50IGRyYmdf Y3RyX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNp emVfdCBub25jZWxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKQorK3sKKysgICAgRFJCR19DVFJfQ1RY ICpjY3R4ID0gJmRjdHgtPmQuY3RyOworKyAgICBtZW1zZXQoY2N0eC0+SywgMCwgc2l6ZW9mKGNj dHgtPkspKTsKKysgICAgbWVtc2V0KGNjdHgtPlYsIDAsIHNpemVvZihjY3R4LT5WKSk7CisrICAg IEFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5rcyk7 CisrICAgIGN0cl9VcGRhdGUoZGN0eCwgZW50LCBlbnRsZW4sIHBlcnMsIHBlcnNsZW4sIG5vbmNl LCBub25jZWxlbik7CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50IGRyYmdfY3Ry X3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCisrewor KyAgICBjdHJfVXBkYXRlKGRjdHgsIGVudCwgZW50bGVuLCBhZGluLCBhZGlubGVuLCBOVUxMLCAw KTsKKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQgZHJiZ19jdHJfZ2VuZXJhdGUo RFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj aGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKKyt7CisrICAgIERSQkdf Q1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKKysgICAgaWYgKGFkaW4gJiYgYWRpbmxlbikg eworKyAgICAgICAgY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVuLCBOVUxMLCAwLCBOVUxM LCAwKTsKKysgICAgICAgIC8qIFRoaXMgbWVhbnMgd2UgcmV1c2UgZGVyaXZlZCB2YWx1ZSAqLwor KyAgICAgICAgaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKSB7CisrICAg ICAgICAgICAgYWRpbiA9IE5VTEw7CisrICAgICAgICAgICAgYWRpbmxlbiA9IDE7CisrICAgICAg ICB9CisrICAgIH0gZWxzZQorKyAgICAgICAgYWRpbmxlbiA9IDA7CisrCisrICAgIGZvciAoOzsp IHsKKysgICAgICAgIGluY18xMjgoY2N0eCk7CisrICAgICAgICBpZiAoIShkY3R4LT54ZmxhZ3Mg JiBEUkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKSB7CisrICAgICAgICAgICAgQUVT X2VuY3J5cHQoY2N0eC0+ViwgZGN0eC0+bGIsICZjY3R4LT5rcyk7CisrICAgICAgICAgICAgZGN0 eC0+bGJfdmFsaWQgPSAxOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAg ICAgICAgaWYgKG91dGxlbiA8IDE2KSB7CisrICAgICAgICAgICAgLyogVXNlIEsgYXMgdGVtcCBz cGFjZSBhcyBpdCB3aWxsIGJlIHVwZGF0ZWQgKi8KKysgICAgICAgICAgICBBRVNfZW5jcnlwdChj Y3R4LT5WLCBjY3R4LT5LLCAmY2N0eC0+a3MpOworKyAgICAgICAgICAgIGlmICghZmlwc19kcmJn X2Nwcm5nX3Rlc3QoZGN0eCwgY2N0eC0+SykpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOwor KyAgICAgICAgICAgIG1lbWNweShvdXQsIGNjdHgtPkssIG91dGxlbik7CisrICAgICAgICAgICAg YnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBBRVNfZW5jcnlwdChjY3R4LT5WLCBvdXQsICZj Y3R4LT5rcyk7CisrICAgICAgICBpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91dCkp CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBvdXQgKz0gMTY7CisrICAgICAgICBv dXRsZW4gLT0gMTY7CisrICAgICAgICBpZiAob3V0bGVuID09IDApCisrICAgICAgICAgICAgYnJl YWs7CisrICAgIH0KKysKKysgICAgY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVuLCBOVUxM LCAwLCBOVUxMLCAwKTsKKysKKysgICAgcmV0dXJuIDE7CisrCisrfQorKworK3N0YXRpYyBpbnQg ZHJiZ19jdHJfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKKyt7CisrICAgIG1lbXNldCgm ZGN0eC0+ZC5jdHIsIDAsIHNpemVvZihEUkJHX0NUUl9DVFgpKTsKKysgICAgcmV0dXJuIDE7Cisr fQorKworK2ludCBmaXBzX2RyYmdfY3RyX2luaXQoRFJCR19DVFggKmRjdHgpCisreworKyAgICBE UkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7CisrCisrICAgIHNpemVfdCBrZXlsZW47 CisrCisrICAgIHN3aXRjaCAoZGN0eC0+dHlwZSkgeworKyAgICBjYXNlIE5JRF9hZXNfMTI4X2N0 cjoKKysgICAgICAgIGtleWxlbiA9IDE2OworKyAgICAgICAgYnJlYWs7CisrCisrICAgIGNhc2Ug TklEX2Flc18xOTJfY3RyOgorKyAgICAgICAga2V5bGVuID0gMjQ7CisrICAgICAgICBicmVhazsK KysKKysgICAgY2FzZSBOSURfYWVzXzI1Nl9jdHI6CisrICAgICAgICBrZXlsZW4gPSAzMjsKKysg ICAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgICAgcmV0dXJuIC0yOworKyAg ICB9CisrCisrICAgIGRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19jdHJfaW5zdGFudGlhdGU7Cisr ICAgIGRjdHgtPnJlc2VlZCA9IGRyYmdfY3RyX3Jlc2VlZDsKKysgICAgZGN0eC0+Z2VuZXJhdGUg PSBkcmJnX2N0cl9nZW5lcmF0ZTsKKysgICAgZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfY3Ry X3VuaW5zdGFudGlhdGU7CisrCisrICAgIGNjdHgtPmtleWxlbiA9IGtleWxlbjsKKysgICAgZGN0 eC0+c3RyZW5ndGggPSBrZXlsZW4gKiA4OworKyAgICBkY3R4LT5ibG9ja2xlbmd0aCA9IDE2Owor KyAgICBkY3R4LT5zZWVkbGVuID0ga2V5bGVuICsgMTY7CisrCisrICAgIGlmIChkY3R4LT54Zmxh Z3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikgeworKyAgICAgICAgLyogZGYgaW5pdGlhbGlzYXRp b24gKi8KKysgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRmX2tleVszMl0gPSB7CisrICAg ICAgICAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywK KysgICAgICAgICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAw eDBmLAorKyAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4 MTYsIDB4MTcsCisrICAgICAgICAgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgx ZCwgMHgxZSwgMHgxZgorKyAgICAgICAgfTsKKysgICAgICAgIC8qIFNldCBrZXkgc2NoZWR1bGUg Zm9yIGRmX2tleSAqLworKyAgICAgICAgQUVTX3NldF9lbmNyeXB0X2tleShkZl9rZXksIGRjdHgt PnN0cmVuZ3RoLCAmY2N0eC0+ZGZfa3MpOworKworKyAgICAgICAgZGN0eC0+bWluX2VudHJvcHkg PSBjY3R4LT5rZXlsZW47CisrICAgICAgICBkY3R4LT5tYXhfZW50cm9weSA9IERSQkdfTUFYX0xF TkdUSDsKKysgICAgICAgIGRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsK KysgICAgICAgIGRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsKKysgICAgICAgIGRj dHgtPm1heF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOworKyAgICAgICAgZGN0eC0+bWF4X2FkaW4g PSBEUkJHX01BWF9MRU5HVEg7CisrICAgIH0gZWxzZSB7CisrICAgICAgICBkY3R4LT5taW5fZW50 cm9weSA9IGRjdHgtPnNlZWRsZW47CisrICAgICAgICBkY3R4LT5tYXhfZW50cm9weSA9IGRjdHgt PnNlZWRsZW47CisrICAgICAgICAvKiBOb25jZSBub3QgdXNlZCAqLworKyAgICAgICAgZGN0eC0+ bWluX25vbmNlID0gMDsKKysgICAgICAgIGRjdHgtPm1heF9ub25jZSA9IDA7CisrICAgICAgICBk Y3R4LT5tYXhfcGVycyA9IGRjdHgtPnNlZWRsZW47CisrICAgICAgICBkY3R4LT5tYXhfYWRpbiA9 IGRjdHgtPnNlZWRsZW47CisrICAgIH0KKysKKysgICAgZGN0eC0+bWF4X3JlcXVlc3QgPSAxIDw8 IDE2OworKyAgICBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxIDw8IDI0OworKworKyAgICByZXR1 cm4gMTsKKyt9CitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19k cmJnX2hhc2guYy5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2RyYmdf aGFzaC5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19oYXNo LmMuZmlwcwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwNjYyNDcyOCArMDIwMAorKysrIG9wZW5zc2wt MS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jCTIwMTgtMDctMjUgMTc6MjY6 NTguNDA2NjI0NzI4ICswMjAwCitAQCAtMCwwICsxLDM2MSBAQAorKy8qIGZpcHMvcmFuZC9maXBz X2RyYmdfaGFzaC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2 ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24u CisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGlj ZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisr ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjZGVmaW5lIE9QRU5TU0xfRklQU0FQ SQorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNs dWRlICJpbnRlcm5hbC9maXBzX2ludC5oIgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5o PgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisrLyogVGhpcyBpcyBIYXNoX2RmIGZy b20gU1AgODAwLTkwIDEwLjQuMSAqLworKworK3N0YXRpYyBpbnQgaGFzaF9kZihEUkJHX0NUWCAq ZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCisrICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKKysgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuLAorKyAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjQsIHNpemVfdCBpbjRsZW4pCisreworKyAgICBF VlBfTURfQ1RYICptY3R4ID0gZGN0eC0+ZC5oYXNoLm1jdHg7CisrICAgIHVuc2lnbmVkIGNoYXIg KnZ0bXAgPSBkY3R4LT5kLmhhc2gudnRtcDsKKysgICAgdW5zaWduZWQgY2hhciB0bXBbNl07Cisr ICAgIC8qIFN0YW5kYXJkIG9ubHkgZXZlciBuZWVkcyBzZWVkbGVuIGJ5dGVzIHdoaWNoIGlzIGFs d2F5cyBsZXNzIHRoYW4KKysgICAgICogbWF4aW11bSBwZXJtaXR0ZWQgc28gbm8gbmVlZCB0byBj aGVjayBsZW5ndGguCisrICAgICAqLworKyAgICBzaXplX3Qgb3V0bGVuID0gZGN0eC0+c2VlZGxl bjsKKysgICAgdG1wWzBdID0gMTsKKysgICAgdG1wWzFdID0gKChvdXRsZW4gKiA4KSA+PiAyNCkg JiAweGZmOworKyAgICB0bXBbMl0gPSAoKG91dGxlbiAqIDgpID4+IDE2KSAmIDB4ZmY7CisrICAg IHRtcFszXSA9ICgob3V0bGVuICogOCkgPj4gOCkgJiAweGZmOworKyAgICB0bXBbNF0gPSAob3V0 bGVuICogOCkgJiAweGZmOworKyAgICBpZiAoIWluMSkgeworKyAgICAgICAgdG1wWzVdID0gKHVu c2lnbmVkIGNoYXIpaW4xbGVuOworKyAgICAgICAgaW4xID0gdG1wICsgNTsKKysgICAgICAgIGlu MWxlbiA9IDE7CisrICAgIH0KKysgICAgZm9yICg7OykgeworKyAgICAgICAgaWYgKCFGSVBTX2Rp Z2VzdGluaXQobWN0eCwgZGN0eC0+ZC5oYXNoLm1kKSkKKysgICAgICAgICAgICByZXR1cm4gMDsK KysgICAgICAgIGlmICghRklQU19kaWdlc3R1cGRhdGUobWN0eCwgdG1wLCA1KSkKKysgICAgICAg ICAgICByZXR1cm4gMDsKKysgICAgICAgIGlmIChpbjEgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1j dHgsIGluMSwgaW4xbGVuKSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGlmIChp bjIgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluMiwgaW4ybGVuKSkKKysgICAgICAgICAg ICByZXR1cm4gMDsKKysgICAgICAgIGlmIChpbjMgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgs IGluMywgaW4zbGVuKSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGlmIChpbjQg JiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluNCwgaW40bGVuKSkKKysgICAgICAgICAgICBy ZXR1cm4gMDsKKysgICAgICAgIGlmIChvdXRsZW4gPCBkY3R4LT5ibG9ja2xlbmd0aCkgeworKyAg ICAgICAgICAgIGlmICghRklQU19kaWdlc3RmaW5hbChtY3R4LCB2dG1wLCBOVUxMKSkKKysgICAg ICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICAgbWVtY3B5KG91dCwgdnRtcCwgb3V0 bGVuKTsKKysgICAgICAgICAgICBPUEVOU1NMX2NsZWFuc2UodnRtcCwgZGN0eC0+YmxvY2tsZW5n dGgpOworKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfSBlbHNlIGlmICghRklQU19k aWdlc3RmaW5hbChtY3R4LCBvdXQsIE5VTEwpKQorKyAgICAgICAgICAgIHJldHVybiAwOworKwor KyAgICAgICAgb3V0bGVuIC09IGRjdHgtPmJsb2NrbGVuZ3RoOworKyAgICAgICAgaWYgKG91dGxl biA9PSAwKQorKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgdG1wWzBdKys7CisrICAg ICAgICBvdXQgKz0gZGN0eC0+YmxvY2tsZW5ndGg7CisrICAgIH0KKyt9CisrCisrLyogQWRkIGFu IHVuc2lnbmVkIGJ1ZmZlciB0byB0aGUgYnVmIHZhbHVlLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4g YnVmLiBGb3IKKysgKiB0aGlzIGFsZ29yaXRobSB0aGUgbGVuZ3RoIG9mIGlucHV0IG5ldmVyIGV4 Y2VlZHMgdGhlIHNlZWQgbGVuZ3RoLgorKyAqLworKworK3N0YXRpYyB2b2lkIGN0eF9hZGRfYnVm KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsCisrICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikKKyt7CisrICAgIHNpemVfdCBp ID0gaW5sZW47CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnE7CisrICAgIHVuc2lnbmVkIGNo YXIgYywgKnA7CisrICAgIHAgPSBidWYgKyBkY3R4LT5zZWVkbGVuOworKyAgICBxID0gaW4gKyBp bmxlbjsKKysKKysgICAgT1BFTlNTTF9hc3NlcnQoaSA8PSBkY3R4LT5zZWVkbGVuKTsKKysKKysg ICAgLyogU3BlY2lhbCBjYXNlOiB6ZXJvIGxlbmd0aCwganVzdCBpbmNyZW1lbnQgYnVmZmVyICov CisrICAgIGlmIChpKQorKyAgICAgICAgYyA9IDA7CisrICAgIGVsc2UKKysgICAgICAgIGMgPSAx OworKworKyAgICB3aGlsZSAoaSkgeworKyAgICAgICAgaW50IHI7CisrICAgICAgICBwLS07Cisr ICAgICAgICBxLS07CisrICAgICAgICByID0gKnAgKyAqcSArIGM7CisrICAgICAgICAvKiBDYXJy eSAqLworKyAgICAgICAgaWYgKHIgPiAweGZmKQorKyAgICAgICAgICAgIGMgPSAxOworKyAgICAg ICAgZWxzZQorKyAgICAgICAgICAgIGMgPSAwOworKyAgICAgICAgKnAgPSByICYgMHhmZjsKKysg ICAgICAgIGktLTsKKysgICAgfQorKworKyAgICBpID0gZGN0eC0+c2VlZGxlbiAtIGlubGVuOwor KworKyAgICAvKiBJZiBub3QgYWRkaW5nIHdob2xlIGJ1ZmZlciBoYW5kbGUgZmluYWwgY2Fycmll cyAqLworKyAgICBpZiAoYyAmJiBpKSB7CisrICAgICAgICBkbyB7CisrICAgICAgICAgICAgcC0t OworKyAgICAgICAgICAgIGMgPSAqcDsKKysgICAgICAgICAgICBjKys7CisrICAgICAgICAgICAg KnAgPSBjOworKyAgICAgICAgICAgIGlmIChjKQorKyAgICAgICAgICAgICAgICByZXR1cm47Cisr ICAgICAgICB9IHdoaWxlIChpLS0pOworKyAgICB9CisrfQorKworKy8qIEZpbmFsaXNlIGFuZCBh ZGQgaGFzaCB0byBWICovCisrCisrc3RhdGljIGludCBjdHhfYWRkX21kKERSQkdfQ1RYICpkY3R4 KQorK3sKKysgICAgaWYgKCFGSVBTX2RpZ2VzdGZpbmFsKGRjdHgtPmQuaGFzaC5tY3R4LCBkY3R4 LT5kLmhhc2gudnRtcCwgTlVMTCkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgY3R4X2FkZF9i dWYoZGN0eCwgZGN0eC0+ZC5oYXNoLlYsIGRjdHgtPmQuaGFzaC52dG1wLCBkY3R4LT5ibG9ja2xl bmd0aCk7CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50IGhhc2hfZ2VuKERSQkdf Q1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4pCisreworKyAgICBE UkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKKysgICAgaWYgKG91dGxlbiA9PSAw KQorKyAgICAgICAgcmV0dXJuIDE7CisrICAgIG1lbWNweShoY3R4LT52dG1wLCBoY3R4LT5WLCBk Y3R4LT5zZWVkbGVuKTsKKysgICAgZm9yICg7OykgeworKyAgICAgICAgRklQU19kaWdlc3Rpbml0 KGhjdHgtPm1jdHgsIGhjdHgtPm1kKTsKKysgICAgICAgIEZJUFNfZGlnZXN0dXBkYXRlKGhjdHgt Pm1jdHgsIGhjdHgtPnZ0bXAsIGRjdHgtPnNlZWRsZW4pOworKyAgICAgICAgaWYgKCEoZGN0eC0+ eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkgeworKyAgICAgICAg ICAgIEZJUFNfZGlnZXN0ZmluYWwoaGN0eC0+bWN0eCwgZGN0eC0+bGIsIE5VTEwpOworKyAgICAg ICAgICAgIGRjdHgtPmxiX3ZhbGlkID0gMTsKKysgICAgICAgIH0gZWxzZSBpZiAob3V0bGVuIDwg ZGN0eC0+YmxvY2tsZW5ndGgpIHsKKysgICAgICAgICAgICBGSVBTX2RpZ2VzdGZpbmFsKGhjdHgt Pm1jdHgsIGhjdHgtPnZ0bXAsIE5VTEwpOworKyAgICAgICAgICAgIGlmICghZmlwc19kcmJnX2Nw cm5nX3Rlc3QoZGN0eCwgaGN0eC0+dnRtcCkpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOwor KyAgICAgICAgICAgIG1lbWNweShvdXQsIGhjdHgtPnZ0bXAsIG91dGxlbik7CisrICAgICAgICAg ICAgcmV0dXJuIDE7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIEZJUFNfZGlnZXN0 ZmluYWwoaGN0eC0+bWN0eCwgb3V0LCBOVUxMKTsKKysgICAgICAgICAgICBpZiAoIWZpcHNfZHJi Z19jcHJuZ190ZXN0KGRjdHgsIG91dCkpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAg ICAgICAgICAgIG91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysgICAgICAgICAgICBpZiAo b3V0bGVuID09IDApCisrICAgICAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgICAgIG91 dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysgICAgICAgIH0KKysgICAgICAgIGN0eF9hZGRfYnVm KGRjdHgsIGhjdHgtPnZ0bXAsIE5VTEwsIDApOworKyAgICB9CisrfQorKworK3N0YXRpYyBpbnQg ZHJiZ19oYXNoX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4s CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAq bm9uY2UsIHNpemVfdCBub25jZV9sZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6ZV90IHBzdHJfbGVuKQorK3sKKysgICAg RFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7CisrICAgIGlmICghaGFzaF9kZihk Y3R4LCBoY3R4LT5WLAorKyAgICAgICAgICAgICAgICAgZW50LCBlbnRfbGVuLCBub25jZSwgbm9u Y2VfbGVuLCBwc3RyLCBwc3RyX2xlbiwgTlVMTCwgMCkpCisrICAgICAgICByZXR1cm4gMDsKKysg ICAgaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsCisrICAgICAgICAgICAgICAgICBOVUxMLCAw LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKKysgICAgICAgIHJl dHVybiAwOworKworKyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UKKysgICAgZnByaW50ZihzdGRlcnIs ICJWK0MgYWZ0ZXIgaW5zdGFudGlhdGU6XG4iKTsKKysgICAgaGV4cHJpbnQoc3RkZXJyLCBoY3R4 LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysgICAgaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4 LT5zZWVkbGVuKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQg ZHJiZ19oYXNoX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFk aW5fbGVuKQorK3sKKysgICAgRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7Cisr ICAgIC8qIFYgYWJvdXQgdG8gYmUgdXBkYXRlZCBzbyB1c2UgQyBhcyBvdXRwdXQgaW5zdGVhZCAq LworKyAgICBpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywKKysgICAgICAgICAgICAgICAgIE5V TEwsIDEsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4sCisrICAgICAgICAgICAgICAgICBlbnQsIGVu dF9sZW4sIGFkaW4sIGFkaW5fbGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBtZW1jcHko aGN0eC0+ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7CisrICAgIGlmICghaGFzaF9kZihkY3R4 LCBoY3R4LT5DLCBOVUxMLCAwLAorKyAgICAgICAgICAgICAgICAgaGN0eC0+ViwgZGN0eC0+c2Vl ZGxlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCisrICAgICAgICByZXR1cm4gMDsKKysjaWZkZWYgSEFT SF9EUkJHX1RSQUNFCisrICAgIGZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIHJlc2VlZDpcbiIp OworKyAgICBoZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOworKyAgICBo ZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOworKyNlbmRpZgorKyAgICBy ZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludCBkcmJnX2hhc2hfZ2VuZXJhdGUoRFJCR19DVFgg KmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0 LCBzaXplX3Qgb3V0bGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKKyt7CisrICAgIERSQkdfSEFTSF9D VFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKyAgICBFVlBfTURfQ1RYICptY3R4ID0gaGN0eC0+ bWN0eDsKKysgICAgdW5zaWduZWQgY2hhciB0bXBbNF07CisrICAgIGlmIChhZGluICYmIGFkaW5f bGVuKSB7CisrICAgICAgICB0bXBbMF0gPSAyOworKyAgICAgICAgaWYgKCFGSVBTX2RpZ2VzdGlu aXQobWN0eCwgaGN0eC0+bWQpKQorKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgaWYg KCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkpCisrICAgICAgICAgICAgcmV0dXJuIDA7 CisrICAgICAgICBpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgaGN0eC0+ViwgZGN0eC0+c2Vl ZGxlbikpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAoIUVWUF9EaWdlc3RV cGRhdGUobWN0eCwgYWRpbiwgYWRpbl9sZW4pKQorKyAgICAgICAgICAgIHJldHVybiAwOworKyAg ICAgICAgaWYgKCFjdHhfYWRkX21kKGRjdHgpKQorKyAgICAgICAgICAgIHJldHVybiAwOworKyAg ICB9CisrICAgIGlmICghaGFzaF9nZW4oZGN0eCwgb3V0LCBvdXRsZW4pKQorKyAgICAgICAgcmV0 dXJuIDA7CisrCisrICAgIHRtcFswXSA9IDM7CisrICAgIGlmICghRklQU19kaWdlc3Rpbml0KG1j dHgsIGhjdHgtPm1kKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoIUVWUF9EaWdlc3RV cGRhdGUobWN0eCwgdG1wLCAxKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoIUVWUF9E aWdlc3RVcGRhdGUobWN0eCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbikpCisrICAgICAgICByZXR1 cm4gMDsKKysKKysgICAgaWYgKCFjdHhfYWRkX21kKGRjdHgpKQorKyAgICAgICAgcmV0dXJuIDA7 CisrCisrICAgIGN0eF9hZGRfYnVmKGRjdHgsIGhjdHgtPlYsIGhjdHgtPkMsIGRjdHgtPnNlZWRs ZW4pOworKworKyAgICB0bXBbMF0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gMjQpICYgMHhm ZjsKKysgICAgdG1wWzFdID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDE2KSAmIDB4ZmY7Cisr ICAgIHRtcFsyXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiA4KSAmIDB4ZmY7CisrICAgIHRt cFszXSA9IGRjdHgtPnJlc2VlZF9jb3VudGVyICYgMHhmZjsKKysgICAgY3R4X2FkZF9idWYoZGN0 eCwgaGN0eC0+ViwgdG1wLCA0KTsKKysjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCisrICAgIGZwcmlu dGYoc3RkZXJyLCAiVitDIGFmdGVyIGdlbmVyYXRlOlxuIik7CisrICAgIGhleHByaW50KHN0ZGVy ciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7CisrICAgIGhleHByaW50KHN0ZGVyciwgaGN0eC0+ QywgZGN0eC0+c2VlZGxlbik7CisrI2VuZGlmCisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0 aWMgaW50IGRyYmdfaGFzaF91bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQorK3sKKysgICAg RVZQX01EX0NUWF9mcmVlKGRjdHgtPmQuaGFzaC5tY3R4KTsKKysgICAgT1BFTlNTTF9jbGVhbnNl KCZkY3R4LT5kLmhhc2gsIHNpemVvZihEUkJHX0hBU0hfQ1RYKSk7CisrICAgIHJldHVybiAxOwor K30KKysKKytpbnQgZmlwc19kcmJnX2hhc2hfaW5pdChEUkJHX0NUWCAqZGN0eCkKKyt7CisrICAg IGNvbnN0IEVWUF9NRCAqbWQ7CisrICAgIERSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5o YXNoOworKyAgICBtZCA9IEZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGRjdHgtPnR5cGUpOworKyAgICBp ZiAoIW1kKQorKyAgICAgICAgcmV0dXJuIC0yOworKyAgICBzd2l0Y2ggKGRjdHgtPnR5cGUpIHsK KysgICAgY2FzZSBOSURfc2hhMToKKysgICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMTI4OworKyAg ICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgTklEX3NoYTIyNDoKKysgICAgICAgIGRjdHgtPnN0 cmVuZ3RoID0gMTkyOworKyAgICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAg ICBkY3R4LT5zdHJlbmd0aCA9IDI1NjsKKysgICAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAg IGRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX2luc3RhbnRpYXRlOworKyAgICBkY3R4LT5y ZXNlZWQgPSBkcmJnX2hhc2hfcmVzZWVkOworKyAgICBkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfaGFz aF9nZW5lcmF0ZTsKKysgICAgZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaGFzaF91bmluc3Rh bnRpYXRlOworKworKyAgICBkY3R4LT5kLmhhc2gubWQgPSBtZDsKKysgICAgaGN0eC0+bWN0eCA9 IEVWUF9NRF9DVFhfbmV3KCk7CisrICAgIGlmIChoY3R4LT5tY3R4ID09IE5VTEwpCisrICAgICAg ICByZXR1cm4gLTE7CisrCisrICAgIC8qIFRoZXNlIGFyZSB0YWtlbiBmcm9tIFNQIDgwMC05MCAx MC4xIHRhYmxlIDIgKi8KKysKKysgICAgZGN0eC0+YmxvY2tsZW5ndGggPSBFVlBfTURfc2l6ZSht ZCk7CisrICAgIGlmIChkY3R4LT5ibG9ja2xlbmd0aCA+IDMyKQorKyAgICAgICAgZGN0eC0+c2Vl ZGxlbiA9IDExMTsKKysgICAgZWxzZQorKyAgICAgICAgZGN0eC0+c2VlZGxlbiA9IDU1OworKwor KyAgICBkY3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnN0cmVuZ3RoIC8gODsKKysgICAgZGN0eC0+ bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7CisrCisrICAgIGRjdHgtPm1pbl9ub25jZSA9 IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKKysgICAgZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhf TEVOR1RIOworKworKyAgICBkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsKKysgICAg ZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7CisrCisrICAgIGRjdHgtPm1heF9yZXF1 ZXN0ID0gMSA8PCAxNjsKKysgICAgZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMSA8PCAyNDsKKysK KysgICAgcmV0dXJuIDE7CisrfQorZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19obWFjLmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX2htYWMuYworLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBz X2RyYmdfaG1hYy5jLmZpcHMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MDc2MjQ3NTIgKzAyMDAKKysr KyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYwkyMDE4LTA3 LTI1IDE3OjI2OjU4LjQwNzYyNDc1MiArMDIwMAorQEAgLTAsMCArMSwyNzIgQEAKKysvKiBmaXBz L3JhbmQvZmlwc19kcmJnX2htYWMuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhl bnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisr ICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor KyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlz dHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIK KysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAor KyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0 ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNs LmgiCisrCisrc3RhdGljIGludCBkcmJnX2htYWNfdXBkYXRlKERSQkdfQ1RYICpkY3R4LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVf dCBpbjFsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmluMiwgc2l6ZV90IGluMmxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuKQorK3sKKysgICAgc3RhdGljIHVu c2lnbmVkIGNoYXIgYzAgPSAwLCBjMSA9IDE7CisrICAgIERSQkdfSE1BQ19DVFggKmhtYWMgPSAm ZGN0eC0+ZC5obWFjOworKyAgICBITUFDX0NUWCAqaGN0eCA9IGhtYWMtPmhjdHg7CisrCisrICAg IGlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFj LT5tZCwgTlVMTCkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKCFITUFDX1VwZGF0ZSho Y3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCisrICAgICAgICByZXR1cm4gMDsKKysg ICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCAmYzAsIDEpKQorKyAgICAgICAgcmV0dXJuIDA7Cisr ICAgIGlmIChpbjFsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKKysgICAg ICAgIHJldHVybiAwOworKyAgICBpZiAoaW4ybGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjIs IGluMmxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKGluM2xlbiAmJiAhSE1BQ19V cGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIGlm ICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5LLCBOVUxMKSkKKysgICAgICAgIHJldHVybiAwOwor KworKyAgICBpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0 aCwgaG1hYy0+bWQsIE5VTEwpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICghSE1BQ19V cGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKyAgICAgICAgcmV0dXJu IDA7CisrCisrICAgIGlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKKysgICAg ICAgIHJldHVybiAwOworKworKyAgICBpZiAoIWluMWxlbiAmJiAhaW4ybGVuICYmICFpbjNsZW4p CisrICAgICAgICByZXR1cm4gMTsKKysKKysgICAgaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1h Yy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKKysgICAgICAgIHJldHVy biAwOworKyAgICBpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVu Z3RoKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoIUhNQUNfVXBkYXRlKGhjdHgsICZj MSwgMSkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKGluMWxlbiAmJiAhSE1BQ19VcGRh dGUoaGN0eCwgaW4xLCBpbjFsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmIChpbjJs ZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMiwgaW4ybGVuKSkKKysgICAgICAgIHJldHVybiAw OworKyAgICBpZiAoaW4zbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjMsIGluM2xlbikpCisr ICAgICAgICByZXR1cm4gMDsKKysKKysgICAgaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPkss IE5VTEwpKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIGlmICghSE1BQ19Jbml0X2V4KGhj dHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCisrICAgICAg ICByZXR1cm4gMDsKKysgICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5i bG9ja2xlbmd0aCkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgaWYgKCFITUFDX0ZpbmFs KGhjdHgsIGhtYWMtPlYsIE5VTEwpKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIHJldHVy biAxOworKworK30KKysKKytzdGF0aWMgaW50IGRyYmdfaG1hY19pbnN0YW50aWF0ZShEUkJHX0NU WCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VfbGVuLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIs IHNpemVfdCBwc3RyX2xlbikKKyt7CisrICAgIERSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ ZC5obWFjOworKyAgICBtZW1zZXQoaG1hYy0+SywgMCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKyAg ICBtZW1zZXQoaG1hYy0+ViwgMSwgZGN0eC0+YmxvY2tsZW5ndGgpOworKyAgICBpZiAoIWRyYmdf aG1hY191cGRhdGUoZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGVudCwgZW50X2xl biwgbm9uY2UsIG5vbmNlX2xlbiwgcHN0ciwgcHN0cl9sZW4pKQorKyAgICAgICAgcmV0dXJuIDA7 CisrCisrI2lmZGVmIEhNQUNfRFJCR19UUkFDRQorKyAgICBmcHJpbnRmKHN0ZGVyciwgIksrViBh ZnRlciBpbnN0YW50aWF0ZTpcbiIpOworKyAgICBoZXhwcmludChzdGRlcnIsIGhtYWMtPkssIGht YWMtPmJsb2NrbGVuZ3RoKTsKKysgICAgaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5i bG9ja2xlbmd0aCk7CisrI2VuZGlmCisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50 IGRyYmdfaG1hY19yZXNlZWQoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBh ZGluX2xlbikKKyt7CisrICAgIGlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LCBlbnQsIGVudF9s ZW4sIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwKSkKKysgICAgICAgIHJldHVybiAwOworKworKyNp ZmRlZiBITUFDX0RSQkdfVFJBQ0UKKysgICAgeworKyAgICAgICAgRFJCR19ITUFDX0NUWCAqaG1h YyA9ICZkY3R4LT5kLmhtYWM7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciBy ZXNlZWQ6XG4iKTsKKysgICAgICAgIGhleHByaW50KHN0ZGVyciwgaG1hYy0+SywgaG1hYy0+Ymxv Y2tsZW5ndGgpOworKyAgICAgICAgaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9j a2xlbmd0aCk7CisrICAgIH0KKysjZW5kaWYKKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRp YyBpbnQgZHJiZ19obWFjX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXpl X3QgYWRpbl9sZW4pCisreworKyAgICBEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1h YzsKKysgICAgSE1BQ19DVFggKmhjdHggPSBobWFjLT5oY3R4OworKyAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICpWdG1wID0gaG1hYy0+VjsKKysgICAgaWYgKGFkaW5fbGVuICYmICFkcmJnX2htYWNf dXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKKysgICAgICAg IHJldHVybiAwOworKyAgICBmb3IgKDs7KSB7CisrICAgICAgICBpZiAoIUhNQUNfSW5pdF9leCho Y3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQorKyAgICAg ICAgICAgIHJldHVybiAwOworKyAgICAgICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBWdG1wLCBk Y3R4LT5ibG9ja2xlbmd0aCkpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAo IShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKSB7Cisr ICAgICAgICAgICAgaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGRjdHgtPmxiLCBOVUxMKSkKKysgICAg ICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICAgZGN0eC0+bGJfdmFsaWQgPSAxOwor KyAgICAgICAgICAgIFZ0bXAgPSBkY3R4LT5sYjsKKysgICAgICAgICAgICBjb250aW51ZTsKKysg ICAgICAgIH0gZWxzZSBpZiAob3V0bGVuID4gZGN0eC0+YmxvY2tsZW5ndGgpIHsKKysgICAgICAg ICAgICBpZiAoIUhNQUNfRmluYWwoaGN0eCwgb3V0LCBOVUxMKSkKKysgICAgICAgICAgICAgICAg cmV0dXJuIDA7CisrICAgICAgICAgICAgaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBv dXQpKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICBWdG1wID0gb3V0 OworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBpZiAoIUhNQUNfRmluYWwoaGN0eCwg aG1hYy0+ViwgTlVMTCkpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAg IGlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgaG1hYy0+VikpCisrICAgICAgICAgICAg ICAgIHJldHVybiAwOworKyAgICAgICAgICAgIG1lbWNweShvdXQsIGhtYWMtPlYsIG91dGxlbik7 CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBvdXQgKz0gZGN0eC0+ YmxvY2tsZW5ndGg7CisrICAgICAgICBvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7CisrICAg IH0KKysgICAgaWYgKCFkcmJnX2htYWNfdXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVuLCBOVUxM LCAwLCBOVUxMLCAwKSkKKysgICAgICAgIHJldHVybiAwOworKworKyAgICByZXR1cm4gMTsKKyt9 CisrCisrc3RhdGljIGludCBkcmJnX2htYWNfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkK Kyt7CisrICAgIEhNQUNfQ1RYX2ZyZWUoZGN0eC0+ZC5obWFjLmhjdHgpOworKyAgICBPUEVOU1NM X2NsZWFuc2UoJmRjdHgtPmQuaG1hYywgc2l6ZW9mKERSQkdfSE1BQ19DVFgpKTsKKysgICAgcmV0 dXJuIDE7CisrfQorKworK2ludCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KQor K3sKKysgICAgY29uc3QgRVZQX01EICptZCA9IE5VTEw7CisrICAgIERSQkdfSE1BQ19DVFggKmhj dHggPSAmZGN0eC0+ZC5obWFjOworKyAgICBkY3R4LT5zdHJlbmd0aCA9IDI1NjsKKysgICAgc3dp dGNoIChkY3R4LT50eXBlKSB7CisrICAgIGNhc2UgTklEX2htYWNXaXRoU0hBMToKKysgICAgICAg IG1kID0gRVZQX3NoYTEoKTsKKysgICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMTI4OworKyAgICAg ICAgYnJlYWs7CisrCisrICAgIGNhc2UgTklEX2htYWNXaXRoU0hBMjI0OgorKyAgICAgICAgbWQg PSBFVlBfc2hhMjI0KCk7CisrICAgICAgICBkY3R4LT5zdHJlbmd0aCA9IDE5MjsKKysgICAgICAg IGJyZWFrOworKworKyAgICBjYXNlIE5JRF9obWFjV2l0aFNIQTI1NjoKKysgICAgICAgIG1kID0g RVZQX3NoYTI1NigpOworKyAgICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgTklEX2htYWNXaXRo U0hBMzg0OgorKyAgICAgICAgbWQgPSBFVlBfc2hhMzg0KCk7CisrICAgICAgICBicmVhazsKKysK KysgICAgY2FzZSBOSURfaG1hY1dpdGhTSEE1MTI6CisrICAgICAgICBtZCA9IEVWUF9zaGE1MTIo KTsKKysgICAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgICAgZGN0eC0+c3Ry ZW5ndGggPSAwOworKyAgICAgICAgcmV0dXJuIC0yOworKyAgICB9CisrICAgIGRjdHgtPmluc3Rh bnRpYXRlID0gZHJiZ19obWFjX2luc3RhbnRpYXRlOworKyAgICBkY3R4LT5yZXNlZWQgPSBkcmJn X2htYWNfcmVzZWVkOworKyAgICBkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfaG1hY19nZW5lcmF0ZTsK KysgICAgZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaG1hY191bmluc3RhbnRpYXRlOworKyAg ICBoY3R4LT5oY3R4ID0gSE1BQ19DVFhfbmV3KCk7CisrICAgIGlmIChoY3R4LT5oY3R4ID09IE5V TEwpCisrICAgICAgICByZXR1cm4gLTE7CisrICAgIGhjdHgtPm1kID0gbWQ7CisrICAgIGRjdHgt PmJsb2NrbGVuZ3RoID0gTV9FVlBfTURfc2l6ZShtZCk7CisrICAgIGRjdHgtPnNlZWRsZW4gPSBN X0VWUF9NRF9zaXplKG1kKTsKKysKKysgICAgZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zdHJl bmd0aCAvIDg7CisrICAgIGRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOworKwor KyAgICBkY3R4LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAvIDI7CisrICAgIGRjdHgt Pm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsKKysKKysgICAgZGN0eC0+bWF4X3BlcnMgPSBE UkJHX01BWF9MRU5HVEg7CisrICAgIGRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOwor KworKyAgICBkY3R4LT5tYXhfcmVxdWVzdCA9IDEgPDwgMTY7CisrICAgIGRjdHgtPnJlc2VlZF9p bnRlcnZhbCA9IDEgPDwgMjQ7CisrCisrICAgIHJldHVybiAxOworK30KK2RpZmYgLXVwIG9wZW5z c2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMuZmlwcyBvcGVuc3NsLTEu MS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jCistLS0gb3BlbnNzbC0xLjEuMS1w cmU4L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYy5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTgu NDA3NjI0NzUyICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19saWIuYwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwNzYyNDc1MiArMDIwMAorQEAgLTAsMCAr MSw1NTUgQEAKKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5z c2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJl IG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgor KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdA T3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAq ICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up CisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K KysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImludGVybmFsL2ZpcHNfaW50LmgiCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKyNp bmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisrLyogU3VwcG9ydCBmcmFtZXdvcmsgZm9yIFNQ ODAwLTkwIERSQkdzICovCisrCisraW50IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBp bnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKQorK3sKKysgICAgaW50IHJ2OworKyAgICBtZW1z ZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7CisrICAgIGRjdHgtPnN0YXR1cyA9IERSQkdf U1RBVFVTX1VOSU5JVElBTElTRUQ7CisrICAgIGRjdHgtPnhmbGFncyA9IGZsYWdzOworKyAgICBk Y3R4LT50eXBlID0gdHlwZTsKKysKKysgICAgZGN0eC0+aWZsYWdzID0gMDsKKysgICAgZGN0eC0+ ZW50cm9weV9ibG9ja2xlbiA9IDA7CisrICAgIGRjdHgtPmhlYWx0aF9jaGVja19jbnQgPSAwOwor KyAgICBkY3R4LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwgPSBEUkJHX0hFQUxUSF9JTlRFUlZBTDsK KysKKysgICAgcnYgPSBmaXBzX2RyYmdfaGFzaF9pbml0KGRjdHgpOworKworKyAgICBpZiAocnYg PT0gLTIpCisrICAgICAgICBydiA9IGZpcHNfZHJiZ19jdHJfaW5pdChkY3R4KTsKKysgICAgaWYg KHJ2ID09IC0yKQorKyAgICAgICAgcnYgPSBmaXBzX2RyYmdfaG1hY19pbml0KGRjdHgpOworKwor KyAgICBpZiAocnYgPD0gMCkgeworKyAgICAgICAgaWYgKHJ2ID09IC0yKQorKyAgICAgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklULCBGSVBTX1JfVU5TVVBQT1JURURfRFJCR19U WVBFKTsKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfSU5JVCwgRklQU19SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHKTsKKysgICAgfQorKworKyAg ICAvKiBJZiBub3QgaW4gdGVzdCBtb2RlIHJ1biBzZWxmdGVzdHMgb24gRFJCRyBvZiB0aGUgc2Ft ZSB0eXBlICovCisrCisrICAgIGlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkg eworKyAgICAgICAgaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKSB7CisrICAgICAg ICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlM VVJFKTsKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgfQorKworKyAg ICByZXR1cm4gcnY7CisrfQorKworK0RSQkdfQ1RYICpGSVBTX2RyYmdfbmV3KGludCB0eXBlLCB1 bnNpZ25lZCBpbnQgZmxhZ3MpCisreworKyAgICBEUkJHX0NUWCAqZGN0eDsKKysgICAgZGN0eCA9 IE9QRU5TU0xfbWFsbG9jKHNpemVvZihEUkJHX0NUWCkpOworKyAgICBpZiAoIWRjdHgpIHsKKysg ICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19ORVcsIEVSUl9SX01BTExPQ19GQUlMVVJF KTsKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrCisrICAgIGlmICh0eXBlID09IDAp IHsKKysgICAgICAgIG1lbXNldChkY3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKKysgICAgICAg IGRjdHgtPnR5cGUgPSAwOworKyAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5J TklUSUFMSVNFRDsKKysgICAgICAgIHJldHVybiBkY3R4OworKyAgICB9CisrCisrICAgIGlmIChG SVBTX2RyYmdfaW5pdChkY3R4LCB0eXBlLCBmbGFncykgPD0gMCkgeworKyAgICAgICAgT1BFTlNT TF9mcmVlKGRjdHgpOworKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgICAgcmV0 dXJuIGRjdHg7CisrfQorKworK3ZvaWQgRklQU19kcmJnX2ZyZWUoRFJCR19DVFggKmRjdHgpCisr eworKyAgICBpZiAoZGN0eC0+dW5pbnN0YW50aWF0ZSkKKysgICAgICAgIGRjdHgtPnVuaW5zdGFu dGlhdGUoZGN0eCk7CisrICAgIC8qIERvbid0IGZyZWUgdXAgZGVmYXVsdCBEUkJHICovCisrICAg IGlmIChkY3R4ID09IEZJUFNfZ2V0X2RlZmF1bHRfZHJiZygpKSB7CisrICAgICAgICBtZW1zZXQo ZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7CisrICAgICAgICBkY3R4LT50eXBlID0gMDsKKysg ICAgICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7CisrICAgIH0g ZWxzZSB7CisrICAgICAgICBPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQsIHNpemVvZihkY3R4LT5k KSk7CisrICAgICAgICBPUEVOU1NMX2ZyZWUoZGN0eCk7CisrICAgIH0KKyt9CisrCisrc3RhdGlj IHNpemVfdCBmaXBzX2dldF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoq cG91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVf dCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIgKnRvdXQs ICpwOworKyAgICBzaXplX3QgYmwgPSBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuLCBydjsKKysgICAg aWYgKCFkY3R4LT5nZXRfZW50cm9weSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoZGN0 eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QgfHwgIWJsKQorKyAgICAgICAgcmV0dXJuIGRjdHgt PmdldF9lbnRyb3B5KGRjdHgsIHBvdXQsIGVudHJvcHksIG1pbl9sZW4sIG1heF9sZW4pOworKyAg ICBydiA9IGRjdHgtPmdldF9lbnRyb3B5KGRjdHgsICZ0b3V0LCBlbnRyb3B5ICsgYmwsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWluX2xlbiArIGJsLCBtYXhfbGVuICsgYmwpOworKyAg ICBpZiAodG91dCA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgICpwb3V0ID0gdG91 dCArIGJsOworKyAgICBpZiAocnYgPCAobWluX2xlbiArIGJsKSB8fCAocnYgJSBibCkpCisrICAg ICAgICByZXR1cm4gMDsKKysgICAgLyogQ29tcGFyZSBjb25zZWN1dGl2ZSBibG9ja3MgZm9yIGNv bnRpbnVvdXMgUFJORyB0ZXN0ICovCisrICAgIGZvciAocCA9IHRvdXQ7IHAgPCB0b3V0ICsgcnYg LSBibDsgcCArPSBibCkgeworKyAgICAgICAgaWYgKCFtZW1jbXAocCwgcCArIGJsLCBibCkpIHsK KysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0dFVF9FTlRST1BZLCBGSVBTX1JfRU5U Uk9QWV9TT1VSQ0VfU1RVQ0spOworKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQor KyAgICB9CisrICAgIHJ2IC09IGJsOworKyAgICBpZiAocnYgPiBtYXhfbGVuKQorKyAgICAgICAg cmV0dXJuIG1heF9sZW47CisrICAgIHJldHVybiBydjsKKyt9CisrCisrc3RhdGljIHZvaWQgZmlw c19jbGVhbnVwX2VudHJvcHkoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbikKKyt7CisrICAgIHNp emVfdCBibDsKKysgICAgaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQorKyAgICAg ICAgYmwgPSAwOworKyAgICBlbHNlCisrICAgICAgICBibCA9IGRjdHgtPmVudHJvcHlfYmxvY2ts ZW47CisrICAgIC8qIENhbGwgY2xlYW51cCB3aXRoIG9yaWdpbmFsIGFyZ3VtZW50cyAqLworKyAg ICBkY3R4LT5jbGVhbnVwX2VudHJvcHkoZGN0eCwgb3V0IC0gYmwsIG9sZW4gKyBibCk7CisrfQor KworK2ludCBGSVBTX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xl bikKKyt7CisrICAgIHNpemVfdCBlbnRsZW4gPSAwLCBub25jZWxlbiA9IDA7CisrICAgIHVuc2ln bmVkIGNoYXIgKm5vbmNlID0gTlVMTCwgKmVudHJvcHkgPSBOVUxMOworKworKyNpZiAwCisrICAg IC8qIFB1dCBoZXJlIHNvIGVycm9yIHNjcmlwdCBwaWNrcyB0aGVtIHVwICovCisrICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwKKysgICAgICAgICAgICBGSVBTX1JfUEVS U09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORyk7CisrICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19JTlNUQU5USUFURSwgRklQU19SX0lOX0VSUk9SX1NUQVRFKTsKKysgICAgRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfQUxSRUFEWV9JTlNUQU5USUFURUQp OworKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9FUlJP Ul9SRVRSSUVWSU5HX0VOVFJPUFkpOworKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5T VEFOVElBVEUsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFKTsKKysgICAgRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfSU5TVEFOVElBVEVfRVJST1IpOwor KyAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9EUkJHX05P VF9JTklUSUFMSVNFRCk7CisrI2VuZGlmCisrCisrICAgIGludCByID0gMDsKKysKKysgICAgaWYg KHBlcnNsZW4gPiBkY3R4LT5tYXhfcGVycykgeworKyAgICAgICAgciA9IEZJUFNfUl9QRVJTT05B TElTQVRJT05fU1RSSU5HX1RPT19MT05HOworKyAgICAgICAgZ290byBlbmQ7CisrICAgIH0KKysK KysgICAgaWYgKCFkY3R4LT5pbnN0YW50aWF0ZSkgeworKyAgICAgICAgciA9IEZJUFNfUl9EUkJH X05PVF9JTklUSUFMSVNFRDsKKysgICAgICAgIGdvdG8gZW5kOworKyAgICB9CisrCisrICAgIGlm IChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkgeworKyAgICAgICAg aWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKKysgICAgICAgICAgICByID0g RklQU19SX0lOX0VSUk9SX1NUQVRFOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHIgPSBG SVBTX1JfQUxSRUFEWV9JTlNUQU5USUFURUQ7CisrICAgICAgICBnb3RvIGVuZDsKKysgICAgfQor KworKyAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKKysKKysgICAgZW50bGVu ID0gZmlwc19nZXRfZW50cm9weShkY3R4LCAmZW50cm9weSwgZGN0eC0+c3RyZW5ndGgsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9l bnRyb3B5KTsKKysKKysgICAgaWYgKGVudGxlbiA8IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxl biA+IGRjdHgtPm1heF9lbnRyb3B5KSB7CisrICAgICAgICByID0gRklQU19SX0VSUk9SX1JFVFJJ RVZJTkdfRU5UUk9QWTsKKysgICAgICAgIGdvdG8gZW5kOworKyAgICB9CisrCisrICAgIGlmIChk Y3R4LT5tYXhfbm9uY2UgPiAwICYmIGRjdHgtPmdldF9ub25jZSkgeworKyAgICAgICAgbm9uY2Vs ZW4gPSBkY3R4LT5nZXRfbm9uY2UoZGN0eCwgJm5vbmNlLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGN0eC0+c3RyZW5ndGggLyAyLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGN0eC0+bWluX25vbmNlLCBkY3R4LT5tYXhfbm9uY2UpOworKworKyAg ICAgICAgaWYgKG5vbmNlbGVuIDwgZGN0eC0+bWluX25vbmNlIHx8IG5vbmNlbGVuID4gZGN0eC0+ bWF4X25vbmNlKSB7CisrICAgICAgICAgICAgciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05P TkNFOworKyAgICAgICAgICAgIGdvdG8gZW5kOworKyAgICAgICAgfQorKworKyAgICB9CisrCisr ICAgIGlmICghZGN0eC0+aW5zdGFudGlhdGUoZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbnRyb3B5LCBlbnRsZW4sIG5vbmNlLCBub25jZWxlbiwgcGVycywgcGVyc2xlbikpIHsK KysgICAgICAgIHIgPSBGSVBTX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHOworKyAgICAgICAg Z290byBlbmQ7CisrICAgIH0KKysKKysgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVB RFk7CisrICAgIGlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCisrICAg ICAgICBkY3R4LT5yZXNlZWRfY291bnRlciA9IDE7CisrCisrIGVuZDoKKysKKysgICAgaWYgKGVu dHJvcHkgJiYgZGN0eC0+Y2xlYW51cF9lbnRyb3B5KQorKyAgICAgICAgZmlwc19jbGVhbnVwX2Vu dHJvcHkoZGN0eCwgZW50cm9weSwgZW50bGVuKTsKKysKKysgICAgaWYgKG5vbmNlICYmIGRjdHgt PmNsZWFudXBfbm9uY2UpCisrICAgICAgICBkY3R4LT5jbGVhbnVwX25vbmNlKGRjdHgsIG5vbmNl LCBub25jZWxlbik7CisrCisrICAgIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVB RFkpCisrICAgICAgICByZXR1cm4gMTsKKysKKysgICAgaWYgKHIgJiYgIShkY3R4LT5pZmxhZ3Mg JiBEUkJHX0ZMQUdfTk9FUlIpKQorKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lO U1RBTlRJQVRFLCByKTsKKysKKysgICAgcmV0dXJuIDA7CisrCisrfQorKworK3N0YXRpYyBpbnQg ZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbiwgaW50IGhjaGVjaykKKyt7Cisr ICAgIHVuc2lnbmVkIGNoYXIgKmVudHJvcHkgPSBOVUxMOworKyAgICBzaXplX3QgZW50bGVuID0g MDsKKysgICAgaW50IHIgPSAwOworKworKyNpZiAwCisrICAgIEZJUFNlcnIoRklQU19GX0RSQkdf UkVTRUVELCBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRCk7CisrICAgIEZJUFNlcnIoRklQU19GX0RS QkdfUkVTRUVELCBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORyk7CisrI2VuZGlmCisr ICAgIGlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVBRFkKKysgICAgICAgICYmIGRj dHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRVNFRUQpIHsKKysgICAgICAgIGlmIChkY3R4LT5z dGF0dXMgPT0gRFJCR19TVEFUVVNfRVJST1IpCisrICAgICAgICAgICAgciA9IEZJUFNfUl9JTl9F UlJPUl9TVEFURTsKKysgICAgICAgIGVsc2UgaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRV U19VTklOSVRJQUxJU0VEKQorKyAgICAgICAgICAgIHIgPSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRF RDsKKysgICAgICAgIGdvdG8gZW5kOworKyAgICB9CisrCisrICAgIGlmICghYWRpbikKKysgICAg ICAgIGFkaW5sZW4gPSAwOworKyAgICBlbHNlIGlmIChhZGlubGVuID4gZGN0eC0+bWF4X2FkaW4p IHsKKysgICAgICAgIHIgPSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsKKysgICAg ICAgIGdvdG8gZW5kOworKyAgICB9CisrCisrICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVT X0VSUk9SOworKyAgICAvKiBQZWZvcm0gaGVhbHRoIGNoZWNrIG9uIGFsbCByZXNlZWQgb3BlcmF0 aW9ucyBpZiBub3QgYSBwcmVkaWN0aW9uCisrICAgICAqIHJlc2lzdGFuY2UgcmVxdWVzdCBhbmQg bm90IGluIHRlc3QgbW9kZS4KKysgICAgICovCisrICAgIGlmIChoY2hlY2sgJiYgIShkY3R4LT54 ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkpIHsKKysgICAgICAgIGlmICghRklQU19kcmJnX2hlYWx0 aF9jaGVjayhkY3R4KSkgeworKyAgICAgICAgICAgIHIgPSBGSVBTX1JfU0VMRlRFU1RfRkFJTFVS RTsKKysgICAgICAgICAgICBnb3RvIGVuZDsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBl bnRsZW4gPSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5LCBkY3R4LT5zdHJlbmd0aCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY3R4LT5taW5fZW50cm9weSwgZGN0eC0+ bWF4X2VudHJvcHkpOworKworKyAgICBpZiAoZW50bGVuIDwgZGN0eC0+bWluX2VudHJvcHkgfHwg ZW50bGVuID4gZGN0eC0+bWF4X2VudHJvcHkpIHsKKysgICAgICAgIHIgPSBGSVBTX1JfRVJST1Jf UkVUUklFVklOR19FTlRST1BZOworKyAgICAgICAgZ290byBlbmQ7CisrICAgIH0KKysKKysgICAg aWYgKCFkY3R4LT5yZXNlZWQoZGN0eCwgZW50cm9weSwgZW50bGVuLCBhZGluLCBhZGlubGVuKSkK KysgICAgICAgIGdvdG8gZW5kOworKworKyAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19S RUFEWTsKKysgICAgaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKSkKKysg ICAgICAgIGRjdHgtPnJlc2VlZF9jb3VudGVyID0gMTsKKysgZW5kOgorKworKyAgICBpZiAoZW50 cm9weSAmJiBkY3R4LT5jbGVhbnVwX2VudHJvcHkpCisrICAgICAgICBmaXBzX2NsZWFudXBfZW50 cm9weShkY3R4LCBlbnRyb3B5LCBlbnRsZW4pOworKworKyAgICBpZiAoZGN0eC0+c3RhdHVzID09 IERSQkdfU1RBVFVTX1JFQURZKQorKyAgICAgICAgcmV0dXJuIDE7CisrCisrICAgIGlmIChyICYm ICEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKKysgICAgICAgIEZJUFNlcnIoRklQ U19GX0RSQkdfUkVTRUVELCByKTsKKysKKysgICAgcmV0dXJuIDA7CisrfQorKworK2ludCBGSVBT X2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQorK3sKKysgICAgcmV0dXJuIGRy YmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4sIDEpOworK30KKysKKytzdGF0aWMgaW50IGZp cHNfZHJiZ19jaGVjayhEUkJHX0NUWCAqZGN0eCkKKyt7CisrICAgIGlmIChkY3R4LT54ZmxhZ3Mg JiBEUkJHX0ZMQUdfVEVTVCkKKysgICAgICAgIHJldHVybiAxOworKyAgICBkY3R4LT5oZWFsdGhf Y2hlY2tfY250Kys7CisrICAgIGlmIChkY3R4LT5oZWFsdGhfY2hlY2tfY250ID49IGRjdHgtPmhl YWx0aF9jaGVja19pbnRlcnZhbCkgeworKyAgICAgICAgaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2No ZWNrKGRjdHgpKSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NIRUNL LCBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRSk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAg ICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIDE7CisrfQorKworK2ludCBGSVBTX2RyYmdfZ2Vu ZXJhdGUoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwK KysgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UsCisrICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRp bmxlbikKKyt7CisrICAgIGludCByID0gMDsKKysKKysgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFp bGVkKCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSwgRklQ U19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAg ICBpZiAoIWZpcHNfZHJiZ19jaGVjayhkY3R4KSkKKysgICAgICAgIHJldHVybiAwOworKworKyAg ICBpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFQURZCisrICAgICAgICAmJiBkY3R4 LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVTRUVEKSB7CisrICAgICAgICBpZiAoZGN0eC0+c3Rh dHVzID09IERSQkdfU1RBVFVTX0VSUk9SKQorKyAgICAgICAgICAgIHIgPSBGSVBTX1JfSU5fRVJS T1JfU1RBVEU7CisrICAgICAgICBlbHNlIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNf VU5JTklUSUFMSVNFRCkKKysgICAgICAgICAgICByID0gRklQU19SX05PVF9JTlNUQU5USUFURUQ7 CisrICAgICAgICBnb3RvIGVuZDsKKysgICAgfQorKworKyAgICBpZiAob3V0bGVuID4gZGN0eC0+ bWF4X3JlcXVlc3QpIHsKKysgICAgICAgIHIgPSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9S X0RSQkc7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICBpZiAoYWRpbmxlbiA+ IGRjdHgtPm1heF9hZGluKSB7CisrICAgICAgICByID0gRklQU19SX0FERElUSU9OQUxfSU5QVVRf VE9PX0xPTkc7CisrICAgICAgICBnb3RvIGVuZDsKKysgICAgfQorKworKyAgICBpZiAoZGN0eC0+ aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKQorKyAgICAgICAgZGN0eC0+Z2VuZXJhdGUoZGN0 eCwgTlVMTCwgb3V0bGVuLCBOVUxMLCAwKTsKKysgICAgZWxzZSBpZiAoZGN0eC0+cmVzZWVkX2Nv dW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQorKyAgICAgICAgZGN0eC0+c3RhdHVzID0g RFJCR19TVEFUVVNfUkVTRUVEOworKworKyAgICBpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RB VFVTX1JFU0VFRCB8fCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UpIHsKKysgICAgICAgIC8qIElmIHBy ZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0IGRvbid0IGRvIGhlYWx0aCBjaGVjayAqLworKyAg ICAgICAgaW50IGhjaGVjayA9IHByZWRpY3Rpb25fcmVzaXN0YW5jZSA/IDAgOiAxOworKworKyAg ICAgICAgaWYgKCFkcmJnX3Jlc2VlZChkY3R4LCBhZGluLCBhZGlubGVuLCBoY2hlY2spKSB7Cisr ICAgICAgICAgICAgciA9IEZJUFNfUl9SRVNFRURfRVJST1I7CisrICAgICAgICAgICAgZ290byBl bmQ7CisrICAgICAgICB9CisrICAgICAgICBhZGluID0gTlVMTDsKKysgICAgICAgIGFkaW5sZW4g PSAwOworKyAgICB9CisrCisrICAgIGlmICghZGN0eC0+Z2VuZXJhdGUoZGN0eCwgb3V0LCBvdXRs ZW4sIGFkaW4sIGFkaW5sZW4pKSB7CisrICAgICAgICByID0gRklQU19SX0dFTkVSQVRFX0VSUk9S OworKyAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7CisrICAgICAgICBn b3RvIGVuZDsKKysgICAgfQorKyAgICBpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9S RVNFRUQpKSB7CisrICAgICAgICBpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj0gZGN0eC0+cmVz ZWVkX2ludGVydmFsKQorKyAgICAgICAgICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JF U0VFRDsKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBkY3R4LT5yZXNlZWRfY291bnRlcisr OworKyAgICB9CisrCisrIGVuZDoKKysgICAgaWYgKHIpIHsKKysgICAgICAgIGlmICghKGRjdHgt PmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCisrICAgICAgICAgICAgRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0dFTkVSQVRFLCByKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrCisr ICAgIHJldHVybiAxOworK30KKysKKytpbnQgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoRFJCR19D VFggKmRjdHgpCisreworKyAgICBpbnQgcnY7CisrICAgIGlmICghZGN0eC0+dW5pbnN0YW50aWF0 ZSkKKysgICAgICAgIHJ2ID0gMTsKKysgICAgZWxzZQorKyAgICAgICAgcnYgPSBkY3R4LT51bmlu c3RhbnRpYXRlKGRjdHgpOworKyAgICAvKiBBbHRob3VnaCB3ZSdkIGxpa2UgdG8gY2xlYW5zZSBo ZXJlIHdlIGNhbid0IGJlY2F1c2Ugd2UgaGF2ZSB0bworKyAgICAgKiB0ZXN0IHRoZSB1bmluc3Rh bnRpYXRlIHJlYWxseSB6ZXJvZXMgdGhlIGRhdGEuCisrICAgICAqLworKyAgICBtZW1zZXQoJmRj dHgtPmQsIDAsIHNpemVvZihkY3R4LT5kKSk7CisrICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RB VFVTX1VOSU5JVElBTElTRUQ7CisrICAgIC8qIElmIG1ldGhvZCBoYXMgcHJvYmxlbXMgdW5pbnN0 YW50aWF0aW5nLCByZXR1cm4gZXJyb3IgKi8KKysgICAgcmV0dXJuIHJ2OworK30KKysKKytpbnQg RklQU19kcmJnX3NldF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCAoKmdldF9lbnRyb3B5KSAoRFJCR19DVFggKmN0eCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj aGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgZW50cm9weSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgbWluX2xlbiwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2xlbiksCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjbGVhbnVwX2VudHJvcHkpIChEUkJHX0NUWCAqY3R4 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgY2hhciAqb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4pLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgZW50cm9weV9ibG9ja2xlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90ICgqZ2V0X25vbmNlKSAoRFJCR19DVFggKmN0eCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnBvdXQsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRy b3B5LCBzaXplX3QgbWluX2xlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IG1heF9sZW4pLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICgqY2xlYW51cF9ub25jZSkgKERSQkdfQ1RYICpjdHgsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBvbGVuKSkKKyt7CisrICAgIGlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfVU5J TklUSUFMSVNFRCkKKysgICAgICAgIHJldHVybiAwOworKyAgICBkY3R4LT5lbnRyb3B5X2Jsb2Nr bGVuID0gZW50cm9weV9ibG9ja2xlbjsKKysgICAgZGN0eC0+Z2V0X2VudHJvcHkgPSBnZXRfZW50 cm9weTsKKysgICAgZGN0eC0+Y2xlYW51cF9lbnRyb3B5ID0gY2xlYW51cF9lbnRyb3B5OworKyAg ICBkY3R4LT5nZXRfbm9uY2UgPSBnZXRfbm9uY2U7CisrICAgIGRjdHgtPmNsZWFudXBfbm9uY2Ug PSBjbGVhbnVwX25vbmNlOworKyAgICByZXR1cm4gMTsKKyt9CisrCisraW50IEZJUFNfZHJiZ19z ZXRfcmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90ICgqZ2V0X2FkaW4pIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh ciAqKnBvdXQpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjbGVh bnVwX2FkaW4pIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGVu KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpyYW5kX3NlZWRfY2Ip IChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtKSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKCpyYW5kX2FkZF9jYikgKERSQkdfQ1RYICpjdHgsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB2b2lkICpidWYsIGludCBudW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkb3VibGUgZW50cm9weSkpCisreworKyAgICBpZiAoZGN0eC0+ c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCisrICAgICAgICByZXR1cm4gMDsK KysgICAgZGN0eC0+Z2V0X2FkaW4gPSBnZXRfYWRpbjsKKysgICAgZGN0eC0+Y2xlYW51cF9hZGlu ID0gY2xlYW51cF9hZGluOworKyAgICBkY3R4LT5yYW5kX3NlZWRfY2IgPSByYW5kX3NlZWRfY2I7 CisrICAgIGRjdHgtPnJhbmRfYWRkX2NiID0gcmFuZF9hZGRfY2I7CisrICAgIHJldHVybiAxOwor K30KKysKKyt2b2lkICpGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4KQorK3sK KysgICAgcmV0dXJuIGRjdHgtPmFwcF9kYXRhOworK30KKysKKyt2b2lkIEZJUFNfZHJiZ19zZXRf YXBwX2RhdGEoRFJCR19DVFggKmRjdHgsIHZvaWQgKmFwcF9kYXRhKQorK3sKKysgICAgZGN0eC0+ YXBwX2RhdGEgPSBhcHBfZGF0YTsKKyt9CisrCisrc2l6ZV90IEZJUFNfZHJiZ19nZXRfYmxvY2ts ZW5ndGgoRFJCR19DVFggKmRjdHgpCisreworKyAgICByZXR1cm4gZGN0eC0+YmxvY2tsZW5ndGg7 CisrfQorKworK2ludCBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKERSQkdfQ1RYICpkY3R4KQorK3sK KysgICAgcmV0dXJuIGRjdHgtPnN0cmVuZ3RoOworK30KKysKKyt2b2lkIEZJUFNfZHJiZ19zZXRf Y2hlY2tfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCkKKyt7CisrICAgIGRj dHgtPmhlYWx0aF9jaGVja19pbnRlcnZhbCA9IGludGVydmFsOworK30KKysKKyt2b2lkIEZJUFNf ZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpCisr eworKyAgICBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyt9CisrCisrc3RhdGlj IGludCBkcmJnX3N0aWNrID0gMDsKKysKKyt2b2lkIEZJUFNfZHJiZ19zdGljayhpbnQgb25vZmYp CisreworKyAgICBkcmJnX3N0aWNrID0gb25vZmY7CisrfQorKworKy8qIENvbnRpbnVvdXMgRFJC RyB1dGlsaXR5IGZ1bmN0aW9uICovCisraW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RY ICpkY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvdXQpCisreworKyAgICAvKiBObyBDUFJORyBp biB0ZXN0IG1vZGUgKi8KKysgICAgaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQor KyAgICAgICAgcmV0dXJuIDE7CisrICAgIC8qIENoZWNrIGJsb2NrIGlzIHZhbGlkOiBzaG91bGQg bmV2ZXIgaGFwcGVuICovCisrICAgIGlmIChkY3R4LT5sYl92YWxpZCA9PSAwKSB7CisrICAgICAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0lOVEVSTkFMX0VS Uk9SKTsKKysgICAgICAgIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysgICAgICAgIHJldHVy biAwOworKyAgICB9CisrICAgIGlmIChkcmJnX3N0aWNrKQorKyAgICAgICAgbWVtY3B5KGRjdHgt PmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysgICAgLyogQ2hlY2sgYWdhaW5zdCBsYXN0 IGJsb2NrOiBmYWlsIGlmIG1hdGNoICovCisrICAgIGlmICghbWVtY21wKGRjdHgtPmxiLCBvdXQs IGRjdHgtPmJsb2NrbGVuZ3RoKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0NQUk5HX1RFU1QsIEZJUFNfUl9EUkJHX1NUVUNLKTsKKysgICAgICAgIGZpcHNfc2V0X3NlbGZ0 ZXN0X2ZhaWwoKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIC8qIFNhdmUgbGFz dCBibG9jayBmb3IgbmV4dCBjb21wYXJpc29uICovCisrICAgIG1lbWNweShkY3R4LT5sYiwgb3V0 LCBkY3R4LT5ibG9ja2xlbmd0aCk7CisrICAgIHJldHVybiAxOworK30KK2RpZmYgLXVwIG9wZW5z c2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jLmZpcHMgb3BlbnNzbC0x LjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMKKy0tLSBvcGVuc3NsLTEuMS4x LXByZTgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYy5maXBzCTIwMTgtMDctMjUgMTc6MjY6 NTguNDA3NjI0NzUyICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2Zp cHNfZHJiZ19yYW5kLmMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MDc2MjQ3NTIgKzAyMDAKK0BAIC0w LDAgKzEsMTgzIEBACisrLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19yYW5kLmMgKi8KKysvKiBXcml0 dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9w ZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0 IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAq CisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu CisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoK KysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK KysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAor KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KKysjaW5jbHVkZSAiaW50ZXJuYWwvdGhyZWFkX29uY2UuaCIKKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBz X3JhbmRfbGNsLmgiCisrCisrLyogTWFwcGluZyBvZiBTUDgwMC05MCBEUkJHcyB0byBPcGVuU1NM IFJBTkRfTUVUSE9EICovCisrCisrLyogU2luY2Ugd2Ugb25seSBoYXZlIG9uZSBnbG9iYWwgUFJO RyB1c2VkIGF0IGFueSB0aW1lIGluIE9wZW5TU0wgdXNlIGEgZ2xvYmFsCisrICogdmFyaWFibGUg dG8gc3RvcmUgY29udGV4dC4KKysgKi8KKysKKytzdGF0aWMgRFJCR19DVFggb3NzbF9kY3R4Owor KworK3N0YXRpYyBDUllQVE9fUldMT0NLICpmaXBzX3JhbmRfbG9jayA9IE5VTEw7Cisrc3RhdGlj IENSWVBUT19PTkNFIGZpcHNfcmFuZF9sb2NrX2luaXQgPSBDUllQVE9fT05DRV9TVEFUSUNfSU5J VDsKKysKKytERUZJTkVfUlVOX09OQ0VfU1RBVElDKGRvX2ZpcHNfcmFuZF9sb2NrX2luaXQpCisr eworKyAgICBmaXBzX3JhbmRfbG9jayA9IENSWVBUT19USFJFQURfbG9ja19uZXcoKTsKKysgICAg cmV0dXJuIGZpcHNfcmFuZF9sb2NrICE9IE5VTEw7CisrfQorKworK0RSQkdfQ1RYICpGSVBTX2dl dF9kZWZhdWx0X2RyYmcodm9pZCkKKyt7CisrICAgIGlmICghUlVOX09OQ0UoJmZpcHNfcmFuZF9s b2NrX2luaXQsIGRvX2ZpcHNfcmFuZF9sb2NrX2luaXQpKQorKyAgICAgICAgcmV0dXJuIE5VTEw7 CisrICAgIHJldHVybiAmb3NzbF9kY3R4OworK30KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19i eXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkKKyt7CisrICAgIERSQkdfQ1RYICpk Y3R4ID0gJm9zc2xfZGN0eDsKKysgICAgaW50IHJ2ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciAq YWRpbiA9IE5VTEw7CisrICAgIHNpemVfdCBhZGlubGVuID0gMDsKKysgICAgQ1JZUFRPX1RIUkVB RF93cml0ZV9sb2NrKGZpcHNfcmFuZF9sb2NrKTsKKysgICAgZG8geworKyAgICAgICAgc2l6ZV90 IHJjbnQ7CisrICAgICAgICBpZiAoY291bnQgPiAoaW50KWRjdHgtPm1heF9yZXF1ZXN0KQorKyAg ICAgICAgICAgIHJjbnQgPSBkY3R4LT5tYXhfcmVxdWVzdDsKKysgICAgICAgIGVsc2UKKysgICAg ICAgICAgICByY250ID0gY291bnQ7CisrICAgICAgICBpZiAoZGN0eC0+Z2V0X2FkaW4pIHsKKysg ICAgICAgICAgICBhZGlubGVuID0gZGN0eC0+Z2V0X2FkaW4oZGN0eCwgJmFkaW4pOworKyAgICAg ICAgICAgIGlmIChhZGlubGVuICYmICFhZGluKSB7CisrICAgICAgICAgICAgICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19CWVRFUywKKysgICAgICAgICAgICAgICAgICAgICAgICBGSVBTX1Jf RVJST1JfUkVUUklFVklOR19BRERJVElPTkFMX0lOUFVUKTsKKysgICAgICAgICAgICAgICAgZ290 byBlcnI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgcnYgPSBGSVBTX2Ry YmdfZ2VuZXJhdGUoZGN0eCwgb3V0LCByY250LCAwLCBhZGluLCBhZGlubGVuKTsKKysgICAgICAg IGlmIChhZGluKSB7CisrICAgICAgICAgICAgaWYgKGRjdHgtPmNsZWFudXBfYWRpbikKKysgICAg ICAgICAgICAgICAgZGN0eC0+Y2xlYW51cF9hZGluKGRjdHgsIGFkaW4sIGFkaW5sZW4pOworKyAg ICAgICAgICAgIGFkaW4gPSBOVUxMOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKCFydikKKysg ICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIG91dCArPSByY250OworKyAgICAgICAgY291 bnQgLT0gcmNudDsKKysgICAgfQorKyAgICB3aGlsZSAoY291bnQpOworKyAgICBydiA9IDE7Cisr IGVycjoKKysgICAgQ1JZUFRPX1RIUkVBRF91bmxvY2soZmlwc19yYW5kX2xvY2spOworKyAgICBy ZXR1cm4gcnY7CisrfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX3BzZXVkbyh1bnNpZ25lZCBj aGFyICpvdXQsIGludCBjb3VudCkKKyt7CisrICAgIGlmIChmaXBzX2RyYmdfYnl0ZXMob3V0LCBj b3VudCkgPD0gMCkKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgcmV0dXJuIDE7CisrfQorKwor K3N0YXRpYyBpbnQgZmlwc19kcmJnX3N0YXR1cyh2b2lkKQorK3sKKysgICAgRFJCR19DVFggKmRj dHggPSAmb3NzbF9kY3R4OworKyAgICBpbnQgcnY7CisrICAgIENSWVBUT19USFJFQURfcmVhZF9s b2NrKGZpcHNfcmFuZF9sb2NrKTsKKysgICAgcnYgPSBkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFU VVNfUkVBRFkgPyAxIDogMDsKKysgICAgQ1JZUFRPX1RIUkVBRF91bmxvY2soZmlwc19yYW5kX2xv Y2spOworKyAgICByZXR1cm4gcnY7CisrfQorKworK3N0YXRpYyB2b2lkIGZpcHNfZHJiZ19jbGVh bnVwKHZvaWQpCisreworKyAgICBEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7CisrICAgIENS WVBUT19USFJFQURfd3JpdGVfbG9jayhmaXBzX3JhbmRfbG9jayk7CisrICAgIEZJUFNfZHJiZ191 bmluc3RhbnRpYXRlKGRjdHgpOworKyAgICBDUllQVE9fVEhSRUFEX3VubG9jayhmaXBzX3JhbmRf bG9jayk7CisrfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX3NlZWQoY29uc3Qgdm9pZCAqc2Vl ZCwgaW50IHNlZWRsZW4pCisreworKyAgICBEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Cisr ICAgIENSWVBUT19USFJFQURfd3JpdGVfbG9jayhmaXBzX3JhbmRfbG9jayk7CisrICAgIGlmIChk Y3R4LT5yYW5kX3NlZWRfY2IpCisrICAgICAgICByZXR1cm4gZGN0eC0+cmFuZF9zZWVkX2NiKGRj dHgsIHNlZWQsIHNlZWRsZW4pOworKyAgICBDUllQVE9fVEhSRUFEX3VubG9jayhmaXBzX3JhbmRf bG9jayk7CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19hZGQo Y29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4sIGRvdWJsZSBhZGRfZW50cm9weSkKKyt7Cisr ICAgIERSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysgICAgQ1JZUFRPX1RIUkVBRF93cml0 ZV9sb2NrKGZpcHNfcmFuZF9sb2NrKTsKKysgICAgaWYgKGRjdHgtPnJhbmRfYWRkX2NiKQorKyAg ICAgICAgcmV0dXJuIGRjdHgtPnJhbmRfYWRkX2NiKGRjdHgsIHNlZWQsIHNlZWRsZW4sIGFkZF9l bnRyb3B5KTsKKysgICAgQ1JZUFRPX1RIUkVBRF91bmxvY2soZmlwc19yYW5kX2xvY2spOworKyAg ICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfZHJiZ19t ZXRoID0geworKyAgICBmaXBzX2RyYmdfc2VlZCwKKysgICAgZmlwc19kcmJnX2J5dGVzLAorKyAg ICBmaXBzX2RyYmdfY2xlYW51cCwKKysgICAgZmlwc19kcmJnX2FkZCwKKysgICAgZmlwc19kcmJn X3BzZXVkbywKKysgICAgZmlwc19kcmJnX3N0YXR1cworK307CisrCisrY29uc3QgUkFORF9NRVRI T0QgKkZJUFNfZHJiZ19tZXRob2Qodm9pZCkKKyt7CisrICAgIHJldHVybiAmcmFuZF9kcmJnX21l dGg7CisrfQorZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZHJi Z19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZHJi Z19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZHJi Z19zZWxmdGVzdC5jLmZpcHMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MDc2MjQ3NTIgKzAyMDAKKysr KyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMJMjAx OC0wNy0yNSAxNzoyNjo1OC40MDc2MjQ3NTIgKzAyMDAKK0BAIC0wLDAgKzEsODI4IEBACisrLyog Zmlwcy9yYW5kL2ZpcHNfZHJiZ19zZWxmdGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVw aGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJv amVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysg KiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi CisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K KysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrI2luY2x1 ZGUgImZpcHNfbG9jbC5oIgorKworKyNpbmNsdWRlICJmaXBzX2RyYmdfc2VsZnRlc3QuaCIKKysK Kyt0eXBlZGVmIHN0cnVjdCB7CisrICAgIGludCBwb3N0OworKyAgICBpbnQgbmlkOworKyAgICB1 bnNpZ25lZCBpbnQgZmxhZ3M7CisrCisrICAgIC8qIEtBVCBkYXRhIGZvciBubyBQUiAqLworKyAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQ7CisrICAgIHNpemVfdCBlbnRsZW47CisrICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlOworKyAgICBzaXplX3Qgbm9uY2VsZW47CisrICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKnBlcnM7CisrICAgIHNpemVfdCBwZXJzbGVuOworKyAgICBjb25z dCB1bnNpZ25lZCBjaGFyICphZGluOworKyAgICBzaXplX3QgYWRpbmxlbjsKKysgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqZW50cmVzZWVkOworKyAgICBzaXplX3QgZW50cmVzZWVkbGVuOworKyAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGlucmVzZWVkOworKyAgICBzaXplX3QgYWRpbnJlc2Vl ZGxlbjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbjI7CisrICAgIHNpemVfdCBhZGlu MmxlbjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2F0OworKyAgICBzaXplX3Qga2F0bGVu OworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYXQyOworKyAgICBzaXplX3Qga2F0MmxlbjsK KysKKysgICAgLyogS0FUIGRhdGEgZm9yIFBSICovCisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmVudF9wcjsKKysgICAgc2l6ZV90IGVudGxlbl9wcjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqbm9uY2VfcHI7CisrICAgIHNpemVfdCBub25jZWxlbl9wcjsKKysgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqcGVyc19wcjsKKysgICAgc2l6ZV90IHBlcnNsZW5fcHI7CisrICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmFkaW5fcHI7CisrICAgIHNpemVfdCBhZGlubGVuX3ByOworKyAgICBjb25z dCB1bnNpZ25lZCBjaGFyICplbnRwcl9wcjsKKysgICAgc2l6ZV90IGVudHBybGVuX3ByOworKyAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluZ19wcjsKKysgICAgc2l6ZV90IGFkaW5nbGVuX3By OworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnRnX3ByOworKyAgICBzaXplX3QgZW50Z2xl bl9wcjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2F0X3ByOworKyAgICBzaXplX3Qga2F0 bGVuX3ByOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYXQyX3ByOworKyAgICBzaXplX3Qg a2F0Mmxlbl9wcjsKKysKKyt9IERSQkdfU0VMRlRFU1RfREFUQTsKKysKKysjZGVmaW5lIG1ha2Vf ZHJiZ190ZXN0X2RhdGEobmlkLCBmbGFnLCBwciwgcCkge3AsIG5pZCwgZmxhZyB8IERSQkdfRkxB R19URVNULCBcCisrICAgICAgICBwciMjX2VudHJvcHlpbnB1dCwgc2l6ZW9mKHByIyNfZW50cm9w eWlucHV0KSwgXAorKyAgICAgICAgcHIjI19ub25jZSwgc2l6ZW9mKHByIyNfbm9uY2UpLCBcCisr ICAgICAgICBwciMjX3BlcnNvbmFsaXphdGlvbnN0cmluZywgc2l6ZW9mKHByIyNfcGVyc29uYWxp emF0aW9uc3RyaW5nKSwgXAorKyAgICAgICAgcHIjI19hZGRpdGlvbmFsaW5wdXQsIHNpemVvZihw ciMjX2FkZGl0aW9uYWxpbnB1dCksIFwKKysgICAgICAgIHByIyNfZW50cm9weWlucHV0cmVzZWVk LCBzaXplb2YocHIjI19lbnRyb3B5aW5wdXRyZXNlZWQpLCBcCisrICAgICAgICBwciMjX2FkZGl0 aW9uYWxpbnB1dHJlc2VlZCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0cmVzZWVkKSwgXAor KyAgICAgICAgcHIjI19hZGRpdGlvbmFsaW5wdXQyLCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5w dXQyKSwgXAorKyAgICAgICAgcHIjI19pbnRfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19pbnRf cmV0dXJuZWRiaXRzKSwgXAorKyAgICAgICAgcHIjI19yZXR1cm5lZGJpdHMsIHNpemVvZihwciMj X3JldHVybmVkYml0cyksIFwKKysgICAgICAgIHByIyNfcHJfZW50cm9weWlucHV0LCBzaXplb2Yo cHIjI19wcl9lbnRyb3B5aW5wdXQpLCBcCisrICAgICAgICBwciMjX3ByX25vbmNlLCBzaXplb2Yo cHIjI19wcl9ub25jZSksIFwKKysgICAgICAgIHByIyNfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5n LCBzaXplb2YocHIjI19wcl9wZXJzb25hbGl6YXRpb25zdHJpbmcpLCBcCisrICAgICAgICBwciMj X3ByX2FkZGl0aW9uYWxpbnB1dCwgc2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlucHV0KSwgXAor KyAgICAgICAgcHIjI19wcl9lbnRyb3B5aW5wdXRwciwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlu cHV0cHIpLCBcCisrICAgICAgICBwciMjX3ByX2FkZGl0aW9uYWxpbnB1dDIsIHNpemVvZihwciMj X3ByX2FkZGl0aW9uYWxpbnB1dDIpLCBcCisrICAgICAgICBwciMjX3ByX2VudHJvcHlpbnB1dHBy Miwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0cHIyKSwgXAorKyAgICAgICAgcHIjI19wcl9p bnRfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19wcl9pbnRfcmV0dXJuZWRiaXRzKSwgXAorKyAg ICAgICAgcHIjI19wcl9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3ByX3JldHVybmVkYml0cyks IFwKKysgICAgICAgIH0KKysKKysjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGFfZGYobmlkLCBw ciwgcCkgXAorKyAgICAgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIERSQkdfRkxBR19DVFJf VVNFX0RGLCBwciwgcCkKKysKKysjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGFfZWMoY3VydmUs IG1kLCBwciwgcCkgXAorKyAgICAgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YSgoY3VydmUgPDwgMTYp IHwgbWQgLCAwLCBwciwgcCkKKysKKytzdGF0aWMgRFJCR19TRUxGVEVTVF9EQVRBIGRyYmdfdGVz dFtdID0geworKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5JRF9hZXNfMTI4X2N0ciwgYWVz XzEyOF91c2VfZGYsIDApLAorKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5JRF9hZXNfMTky X2N0ciwgYWVzXzE5Ml91c2VfZGYsIDApLAorKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5J RF9hZXNfMjU2X2N0ciwgYWVzXzI1Nl91c2VfZGYsIDEpLAorKyAgICBtYWtlX2RyYmdfdGVzdF9k YXRhKE5JRF9hZXNfMTI4X2N0ciwgMCwgYWVzXzEyOF9ub19kZiwgMCksCisrICAgIG1ha2VfZHJi Z190ZXN0X2RhdGEoTklEX2Flc18xOTJfY3RyLCAwLCBhZXNfMTkyX25vX2RmLCAwKSwKKysgICAg bWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzI1Nl9jdHIsIDAsIGFlc18yNTZfbm9fZGYsIDEp LAorKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGExLCAwLCBzaGExLCAwKSwKKysgICAg bWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMjI0LCAwLCBzaGEyMjQsIDApLAorKyAgICBtYWtl X2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEyNTYsIDAsIHNoYTI1NiwgMSksCisrICAgIG1ha2VfZHJi Z190ZXN0X2RhdGEoTklEX3NoYTM4NCwgMCwgc2hhMzg0LCAwKSwKKysgICAgbWFrZV9kcmJnX3Rl c3RfZGF0YShOSURfc2hhNTEyLCAwLCBzaGE1MTIsIDApLAorKyAgICBtYWtlX2RyYmdfdGVzdF9k YXRhKE5JRF9obWFjV2l0aFNIQTEsIDAsIGhtYWNfc2hhMSwgMCksCisrICAgIG1ha2VfZHJiZ190 ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMjI0LCAwLCBobWFjX3NoYTIyNCwgMCksCisrICAgIG1h a2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMjU2LCAwLCBobWFjX3NoYTI1NiwgMSks CisrICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMzg0LCAwLCBobWFjX3No YTM4NCwgMCksCisrICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBNTEyLCAw LCBobWFjX3NoYTUxMiwgMCksCisrICAgIHswLCAwLCAwfQorK307CisrCisrdHlwZWRlZiBzdHJ1 Y3QgeworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQ7CisrICAgIHNpemVfdCBlbnRsZW47 CisrICAgIGludCBlbnRjbnQ7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlOworKyAg ICBzaXplX3Qgbm9uY2VsZW47CisrICAgIGludCBub25jZWNudDsKKyt9IFRFU1RfRU5UOworKwor K3N0YXRpYyBzaXplX3QgdGVzdF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFy ICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90 IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQorK3sKKysgICAgVEVTVF9FTlQgKnQgPSBGSVBTX2Ry YmdfZ2V0X2FwcF9kYXRhKGRjdHgpOworKyAgICAqcG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+ ZW50OworKyAgICB0LT5lbnRjbnQrKzsKKysgICAgcmV0dXJuIHQtPmVudGxlbjsKKyt9CisrCisr c3RhdGljIHNpemVfdCB0ZXN0X25vbmNlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoq cG91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5f bGVuLCBzaXplX3QgbWF4X2xlbikKKyt7CisrICAgIFRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dl dF9hcHBfZGF0YShkY3R4KTsKKysgICAgKnBvdXQgPSAodW5zaWduZWQgY2hhciAqKXQtPm5vbmNl OworKyAgICB0LT5ub25jZWNudCsrOworKyAgICByZXR1cm4gdC0+bm9uY2VsZW47CisrfQorKwor K3N0YXRpYyBpbnQgZmlwc19kcmJnX3NpbmdsZV9rYXQoRFJCR19DVFggKmRjdHgsIERSQkdfU0VM RlRFU1RfREFUQSAqIHRkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHF1 aWNrKQorK3sKKysgICAgVEVTVF9FTlQgdDsKKysgICAgaW50IHJ2ID0gMDsKKysgICAgc2l6ZV90 IGFkaW5sZW47CisrICAgIHVuc2lnbmVkIGNoYXIgcmFuZG91dFsxMDI0XTsKKysKKysgICAgLyog SW5pdGlhbCB0ZXN0IHdpdGhvdXQgUFIgKi8KKysKKysgICAgLyogSW5zdGFudGlhdGUgRFJCRyB3 aXRoIHRlc3QgZW50cm9weSwgbm9uY2UgYW5kIHBlcnNvbmFsaXNhdGlvbgorKyAgICAgKiBzdHJp bmcuCisrICAgICAqLworKworKyAgICBpZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQs IHRkLT5mbGFncykpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKCFGSVBTX2RyYmdfc2V0 X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQorKyAg ICAgICAgcmV0dXJuIDA7CisrCisrICAgIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQp OworKworKyAgICB0LmVudCA9IHRkLT5lbnQ7CisrICAgIHQuZW50bGVuID0gdGQtPmVudGxlbjsK KysgICAgdC5ub25jZSA9IHRkLT5ub25jZTsKKysgICAgdC5ub25jZWxlbiA9IHRkLT5ub25jZWxl bjsKKysgICAgdC5lbnRjbnQgPSAwOworKyAgICB0Lm5vbmNlY250ID0gMDsKKysKKysgICAgaWYg KCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSkKKysg ICAgICAgIGdvdG8gZXJyOworKworKyAgICAvKiBOb3RlIGZvciBDVFIgd2l0aG91dCBERiBzb21l IGFkZGl0aW9uYWwgaW5wdXQgdmFsdWVzCisrICAgICAqIGlnbm9yZSBieXRlcyBhZnRlciB0aGUg a2V5bGVuZ3RoOiBzbyByZWR1Y2UgYWRpbmxlbgorKyAgICAgKiB0byBoYWxmIHRvIGVuc3VyZSBp bnZhbGlkIGRhdGEgaXMgZmVkIGluLgorKyAgICAgKi8KKysgICAgaWYgKCFmaXBzX3Bvc3RfY29y cnVwdChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPmlmbGFncykpCisrICAgICAg ICBhZGlubGVuID0gdGQtPmFkaW5sZW4gLyAyOworKyAgICBlbHNlCisrICAgICAgICBhZGlubGVu ID0gdGQtPmFkaW5sZW47CisrCisrICAgIC8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5kIHZlcmlm eSBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCBkYXRhICovCisrICAgIGlmICghRklQU19kcmJnX2dl bmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsIHRkLT5hZGluLCBhZGlubGVuKSkK KysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQs IHRkLT5rYXRsZW4pKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xF X0tBVCwgRklQU19SX05PUFJfVEVTVDFfRkFJTFVSRSk7CisrICAgICAgICBnb3RvIGVycjI7Cisr ICAgIH0KKysgICAgLyogSWYgYWJicmV2aWF0ZWQgUE9TVCBlbmQgb2YgdGVzdCAqLworKyAgICBp ZiAocXVpY2spIHsKKysgICAgICAgIHJ2ID0gMTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9 CisrICAgIC8qIFJlc2VlZCBEUkJHIHdpdGggdGVzdCBlbnRyb3B5IGFuZCBhZGRpdGlvbmFsIGlu cHV0ICovCisrICAgIHQuZW50ID0gdGQtPmVudHJlc2VlZDsKKysgICAgdC5lbnRsZW4gPSB0ZC0+ ZW50cmVzZWVkbGVuOworKworKyAgICBpZiAoIUZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFk aW5yZXNlZWQsIHRkLT5hZGlucmVzZWVkbGVuKSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAg ICAvKiBHZW5lcmF0ZSB3aXRoIG5vIFBSIGFuZCB2ZXJpZnkgb3V0cHV0IG1hdGNoZXMgZXhwZWN0 ZWQgZGF0YSAqLworKyAgICBpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0 ZC0+a2F0MmxlbiwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW4yLCB0 ZC0+YWRpbjJsZW4pKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGlmIChtZW1jbXAocmFu ZG91dCwgdGQtPmthdDIsIHRkLT5rYXQybGVuKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0Zf RklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9OT1BSX1RFU1QyX0ZBSUxVUkUpOworKyAgICAg ICAgZ290byBlcnIyOworKyAgICB9CisrCisrICAgIEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRj dHgpOworKworKyAgICAvKiBOb3cgdGVzdCB3aXRoIFBSICovCisrCisrICAgIC8qIEluc3RhbnRp YXRlIERSQkcgd2l0aCB0ZXN0IGVudHJvcHksIG5vbmNlIGFuZCBwZXJzb25hbGlzYXRpb24KKysg ICAgICogc3RyaW5nLgorKyAgICAgKi8KKysgICAgaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0 ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICghRklQU19k cmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAw KSkKKysgICAgICAgIHJldHVybiAwOworKworKyAgICBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRj dHgsICZ0KTsKKysKKysgICAgdC5lbnQgPSB0ZC0+ZW50X3ByOworKyAgICB0LmVudGxlbiA9IHRk LT5lbnRsZW5fcHI7CisrICAgIHQubm9uY2UgPSB0ZC0+bm9uY2VfcHI7CisrICAgIHQubm9uY2Vs ZW4gPSB0ZC0+bm9uY2VsZW5fcHI7CisrICAgIHQuZW50Y250ID0gMDsKKysgICAgdC5ub25jZWNu dCA9IDA7CisrCisrICAgIGlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJz X3ByLCB0ZC0+cGVyc2xlbl9wcikpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgLyogTm93 IGdlbmVyYXRlIHdpdGggUFI6IHdlIG5lZWQgdG8gc3VwcGx5IGVudHJvcHkgYXMgdGhpcyB3aWxs CisrICAgICAqIHBlcmZvcm0gYSByZXNlZWQgb3BlcmF0aW9uLiBDaGVjayBvdXRwdXQgbWF0Y2hl cyBleHBlY3RlZCB2YWx1ZS4KKysgICAgICovCisrCisrICAgIHQuZW50ID0gdGQtPmVudHByX3By OworKyAgICB0LmVudGxlbiA9IHRkLT5lbnRwcmxlbl9wcjsKKysKKysgICAgLyogTm90ZSBmb3Ig Q1RSIHdpdGhvdXQgREYgc29tZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVlcworKyAgICAgKiBpZ25v cmUgYnl0ZXMgYWZ0ZXIgdGhlIGtleWxlbmd0aDogc28gcmVkdWNlIGFkaW5sZW4KKysgICAgICog dG8gaGFsZiB0byBlbnN1cmUgaW52YWxpZCBkYXRhIGlzIGZlZCBpbi4KKysgICAgICovCisrICAg IGlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4 LT5pZmxhZ3MpKQorKyAgICAgICAgYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByIC8gMjsKKysgICAg ZWxzZQorKyAgICAgICAgYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByOworKyAgICBpZiAoIUZJUFNf ZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuX3ByLCAxLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0ZC0+YWRpbl9wciwgYWRpbmxlbikpCisrICAgICAgICBnb3Rv IGVycjsKKysKKysgICAgaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0X3ByLCB0ZC0+a2F0bGVu X3ByKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJ UFNfUl9QUl9URVNUMV9GQUlMVVJFKTsKKysgICAgICAgIGdvdG8gZXJyMjsKKysgICAgfQorKwor KyAgICAvKiBOb3cgZ2VuZXJhdGUgYWdhaW4gd2l0aCBQUjogc3VwcGx5IG5ldyBlbnRyb3B5IGFn YWluLgorKyAgICAgKiBDaGVjayBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4KKysgICAg ICovCisrCisrICAgIHQuZW50ID0gdGQtPmVudGdfcHI7CisrICAgIHQuZW50bGVuID0gdGQtPmVu dGdsZW5fcHI7CisrCisrICAgIGlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQs IHRkLT5rYXQybGVuX3ByLCAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZC0+YWRp bmdfcHIsIHRkLT5hZGluZ2xlbl9wcikpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgaWYg KG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0Ml9wciwgdGQtPmthdDJsZW5fcHIpKSB7CisrICAgICAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1BSX1RFU1QyX0ZB SUxVUkUpOworKyAgICAgICAgZ290byBlcnIyOworKyAgICB9CisrICAgIC8qIEFsbCBPSywgdGVz dCBjb21wbGV0ZSAqLworKyAgICBydiA9IDE7CisrCisrIGVycjoKKysgICAgaWYgKHJ2ID09IDAp CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7CisrIGVycjI6CisrICAgIEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRj dHgpOworKworKyAgICByZXR1cm4gcnY7CisrCisrfQorKworKy8qIEluaXRpYWxpc2UgYSBEUkJH IGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEgKi8KKysKKytzdGF0aWMgaW50IGRvX2RyYmdfaW5pdChE UkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICogdGQsIFRFU1RfRU5UICogdCkKKyt7 CisrCisrICAgIGlmICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5pZCwgdGQtPmZsYWdzKSkK KysgICAgICAgIHJldHVybiAwOworKworKyAgICBpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tz KGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCisrICAgICAgICByZXR1 cm4gMDsKKysKKysgICAgRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCB0KTsKKysKKysgICAg dC0+ZW50ID0gdGQtPmVudDsKKysgICAgdC0+ZW50bGVuID0gdGQtPmVudGxlbjsKKysgICAgdC0+ bm9uY2UgPSB0ZC0+bm9uY2U7CisrICAgIHQtPm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuOworKyAg ICB0LT5lbnRjbnQgPSAwOworKyAgICB0LT5ub25jZWNudCA9IDA7CisrICAgIHJldHVybiAxOwor K30KKysKKysvKiBJbml0aWFsaXNlIGFuZCBpbnN0YW50aWF0ZSBEUkJHIGJhc2VkIG9uIHNlbGZ0 ZXN0IGRhdGEgKi8KKytzdGF0aWMgaW50IGRvX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRj dHgsIERSQkdfU0VMRlRFU1RfREFUQSAqIHRkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBURVNUX0VOVCAqIHQpCisreworKyAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwg dCkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUo ZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSkKKysgICAgICAgIHJldHVybiAwOworKworKyAg ICByZXR1cm4gMTsKKyt9CisrCisrLyogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBleHRlbnNpdmUg ZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQgYnkgU1A4MDAtOTAuCisrICogSW5kdWNlIHNldmVy YWwgZmFpbHVyZSBtb2RlcyBhbmQgY2hlY2sgYW4gZXJyb3IgY29uZGl0aW9uIGlzIHNldC4KKysg KiBUaGlzIGZ1bmN0aW9uIGFsb25nIHdpdGggZmlwc19kcmJnX3NpbmdsZV9rYXQgcGVmb3JtcyB0 aGUgaGVhbHRoIGNoZWNraW5nCisrICogb3BlcmF0aW9uLgorKyAqLworKworK3N0YXRpYyBpbnQg Zmlwc19kcmJnX2Vycm9yX2NoZWNrKERSQkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEg KiB0ZCkKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIgcmFuZG91dFsxMDI0XTsKKysgICAgVEVTVF9F TlQgdDsKKysgICAgc2l6ZV90IGk7CisrICAgIHVuc2lnbmVkIGludCByZXNlZWRfY291bnRlcl90 bXA7CisrICAgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKWRjdHg7CisrCisr ICAgIC8qIEluaXRpYWxpc2UgRFJCRyAqLworKworKyAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4 LCB0ZCwgJnQpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIC8qIERvbid0IHJlcG9ydCBp bmR1Y2VkIGVycm9ycyAqLworKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwor KworKyAgICAvKiBQZXJzb25hbGlzYXRpb24gc3RyaW5nIHRlc3RzICovCisrCisrICAgIC8qIFRl c3QgZGV0ZWN0aW9uIG9mIHRvbyBsYXJnZSBwZXJzb25saXNhdGlvbiBzdHJpbmcgKi8KKysKKysg ICAgaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgZGN0eC0+bWF4X3Bl cnMgKyAxKSA+IDApIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywKKysgICAgICAgICAgICAgICAgRklQU19SX1BFUlNPTkFMSVNBVElPTl9FUlJPUl9VTkRF VEVDVEVEKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIC8qIEVudHJvcHkg c291cmNlIHRlc3RzICovCisrCisrICAgIC8qIFRlc3QgZW50cm9weSBzb3VyY2UgZmFpbHVyZSBk ZXRlY2lvbjogaS5lLiByZXR1cm5zIG5vIGRhdGEgKi8KKysKKysgICAgdC5lbnRsZW4gPSAwOwor KworKyAgICBpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVy c2xlbikgPiAwKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hF Q0ssCisrICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwor KyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgLyogVHJ5IHRvIGdlbmVyYXRlIG91 dHB1dCBmcm9tIHVuaW5zdGFudGlhdGVkIERSQkcgKi8KKysgICAgaWYgKEZJUFNfZHJiZ19nZW5l cmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAgRklQU19SX0dFTkVSQVRF X0VSUk9SX1VOREVURUNURUQpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAg ZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrICAgIGlmICghRklQU19kcmJnX3Vu aW5zdGFudGlhdGUoZGN0eCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKyAgICAgICAgZ290byBl cnI7CisrICAgIH0KKysKKysgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysg ICAgICAgIGdvdG8gZXJyOworKworKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJS OworKworKyAgICAvKiBUZXN0IGluc3VmZmljaWVudCBlbnRyb3B5ICovCisrCisrICAgIHQuZW50 bGVuID0gZGN0eC0+bWluX2VudHJvcHkgLSAxOworKworKyAgICBpZiAoRklQU19kcmJnX2luc3Rh bnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKSB7CisrICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgIEZJUFNf Ul9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0K KysKKysgICAgZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrICAgIGlmICghRklQ U19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKyAgICAg ICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgLyogVGVzdCB0b28gbXVjaCBlbnRyb3B5ICov CisrCisrICAgIGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrICAgICAgICBnb3Rv IGVycjsKKysKKysgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysgICAg dC5lbnRsZW4gPSBkY3R4LT5tYXhfZW50cm9weSArIDE7CisrCisrICAgIGlmIChGSVBTX2RyYmdf aW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApIHsKKysgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAg RklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICBnb3RvIGVycjsKKysg ICAgfQorKworKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysgICAgaWYg KCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgeworKyAgICAgICAgRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Cisr ICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICAvKiBOb25jZSB0ZXN0cyAqLworKwor KyAgICAvKiBUZXN0IHRvbyBzbWFsbCBub25jZSAqLworKworKyAgICBpZiAoZGN0eC0+bWluX25v bmNlKSB7CisrCisrICAgICAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKyAg ICAgICAgICAgIGdvdG8gZXJyOworKworKyAgICAgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxB R19OT0VSUjsKKysKKysgICAgICAgIHQubm9uY2VsZW4gPSBkY3R4LT5taW5fbm9uY2UgLSAxOwor KworKyAgICAgICAgaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQt PnBlcnNsZW4pID4gMCkgeworKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRF VEVDVEVEKTsKKysgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIH0KKysKKysgICAgICAg IGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKyAgICAgICAgaWYgKCFGSVBTX2Ry YmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgeworKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKyAgICAg ICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgfQorKworKyAgICB9CisrCisrICAgIC8qIFRlc3Qg dG9vIGxhcmdlIG5vbmNlICovCisrCisrICAgIGlmIChkY3R4LT5tYXhfbm9uY2UpIHsKKysKKysg ICAgICAgIGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrICAgICAgICAgICAgZ290 byBlcnI7CisrCisrICAgICAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKwor KyAgICAgICAgdC5ub25jZWxlbiA9IGRjdHgtPm1heF9ub25jZSArIDE7CisrCisrICAgICAgICBp ZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAw KSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAor KyAgICAgICAgICAgICAgICAgICAgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQpOworKyAg ICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgfQorKworKyAgICAgICAgZGN0eC0+aWZsYWdz ICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrICAgICAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRp YXRlKGRjdHgpKSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrICAgICAgICAgICAgZ290byBl cnI7CisrICAgICAgICB9CisrCisrICAgIH0KKysKKysgICAgLyogSW5zdGFudGlhdGUgd2l0aCB2 YWxpZCBkYXRhLiAqLworKyAgICBpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0 KSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICAvKiBDaGVjayBnZW5lcmF0aW9uIGlzIG5v dyBPSyAqLworKyAgICBpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+ a2F0bGVuLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZC0+YWRpbiwgdGQtPmFk aW5sZW4pKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGRjdHgtPmlmbGFncyB8PSBEUkJH X0ZMQUdfTk9FUlI7CisrCisrICAgIC8qIFJlcXVlc3QgdG9vIG11Y2ggZGF0YSBmb3Igb25lIHJl cXVlc3QgKi8KKysgICAgaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCBkY3R4 LT5tYXhfcmVxdWVzdCArIDEsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFk aW4sIHRkLT5hZGlubGVuKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLAorKyAgICAgICAgICAgICAgICBGSVBTX1JfUkVRVUVTVF9MRU5HVEhfRVJST1Jf VU5ERVRFQ1RFRCk7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICAvKiBUcnkg dG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5wdXQgKi8KKysgICAgaWYgKEZJUFNfZHJiZ19nZW5lcmF0 ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkLT5hZGluLCBkY3R4LT5tYXhfYWRpbiArIDEpKSB7CisrICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgIEZJUFNfUl9BRERJ VElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNURUQpOworKyAgICAgICAgZ290byBlcnI7CisrICAg IH0KKysKKysgICAgLyogQ2hlY2sgcHJlZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3QgZmFpbHMg aWYgZW50cm9weSBzb3VyY2UKKysgICAgICogZmFpbHVyZS4KKysgICAgICovCisrCisrICAgIHQu ZW50bGVuID0gMDsKKysKKysgICAgaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0 LCB0ZC0+a2F0bGVuLCAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGluLCB0 ZC0+YWRpbmxlbikpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywKKysgICAgICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7 CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRS QkdfRkxBR19OT0VSUjsKKysgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkg eworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1Jf VU5JTlNUQU5USUFURV9FUlJPUik7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAg ICAvKiBJbnN0YW50aWF0ZSBhZ2FpbiB3aXRoIHZhbGlkIGRhdGEgKi8KKysKKysgICAgaWYgKCFk b19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLCAmdCkpCisrICAgICAgICBnb3RvIGVycjsKKysg ICAgLyogVGVzdCByZXNlZWQgY291bnRlciB3b3JrcyAqLworKyAgICAvKiBTYXZlIGluaXRpYWwg cmVzZWVkIGNvdW50ZXIgKi8KKysgICAgcmVzZWVkX2NvdW50ZXJfdG1wID0gZGN0eC0+cmVzZWVk X2NvdW50ZXI7CisrICAgIC8qIFNldCByZXNlZWQgY291bnRlciB0byBiZXlvbmQgaW50ZXJ2YWwg Ki8KKysgICAgZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWw7Cisr CisrICAgIC8qIEdlbmVyYXRlIG91dHB1dCBhbmQgY2hlY2sgZW50cm9weSBoYXMgYmVlbiByZXF1 ZXN0ZWQgZm9yIHJlc2VlZCAqLworKyAgICB0LmVudGNudCA9IDA7CisrICAgIGlmICghRklQU19k cmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrICAgICAgICBnb3RvIGVy cjsKKysgICAgaWYgKHQuZW50Y250ICE9IDEpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfTk9U X1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrICAg IC8qIENoZWNrIHJlc2VlZCBjb3VudGVyIGhhcyBiZWVuIHJlc2V0ICovCisrICAgIGlmIChkY3R4 LT5yZXNlZWRfY291bnRlciAhPSByZXNlZWRfY291bnRlcl90bXAgKyAxKSB7CisrICAgICAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9SRVNFRURfQ09VTlRF Ul9FUlJPUik7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICBkY3R4LT5pZmxh Z3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0 ZShkY3R4KSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNL LCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrICAgICAgICBnb3RvIGVycjsKKysgICAg fQorKworKyAgICAvKiBDaGVjayBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBmYWlscyBp ZiBlbnRyb3B5IHNvdXJjZQorKyAgICAgKiBmYWlsdXJlLgorKyAgICAgKi8KKysKKysgICAgdC5l bnRsZW4gPSAwOworKworKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKyAg ICBpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDEsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkgeworKyAg ICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAgICAg ICAgICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysgICAgICAgIGdvdG8gZXJy OworKyAgICB9CisrCisrICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKwor KyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7CisrICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VS Uk9SKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIGlmICghZG9fZHJiZ19p bnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIC8qIFRl c3QgcmVzZWVkIGNvdW50ZXIgd29ya3MgKi8KKysgICAgLyogU2F2ZSBpbml0aWFsIHJlc2VlZCBj b3VudGVyICovCisrICAgIHJlc2VlZF9jb3VudGVyX3RtcCA9IGRjdHgtPnJlc2VlZF9jb3VudGVy OworKyAgICAvKiBTZXQgcmVzZWVkIGNvdW50ZXIgdG8gYmV5b25kIGludGVydmFsICovCisrICAg IGRjdHgtPnJlc2VlZF9jb3VudGVyID0gZGN0eC0+cmVzZWVkX2ludGVydmFsOworKworKyAgICAv KiBHZW5lcmF0ZSBvdXRwdXQgYW5kIGNoZWNrIGVudHJvcHkgaGFzIGJlZW4gcmVxdWVzdGVkIGZv ciByZXNlZWQgKi8KKysgICAgdC5lbnRjbnQgPSAwOworKyAgICBpZiAoIUZJUFNfZHJiZ19nZW5l cmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQorKyAgICAgICAgZ290byBlcnI7CisrICAg IGlmICh0LmVudGNudCAhPSAxKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX05PVF9SRVFVRVNU RURfRk9SX1JFU0VFRCk7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKyAgICAvKiBDaGVj ayByZXNlZWQgY291bnRlciBoYXMgYmVlbiByZXNldCAqLworKyAgICBpZiAoZGN0eC0+cmVzZWVk X2NvdW50ZXIgIT0gcmVzZWVkX2NvdW50ZXJfdG1wICsgMSkgeworKyAgICAgICAgRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUkVTRUVEX0NPVU5URVJfRVJST1Ip OworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgZGN0eC0+aWZsYWdzICY9IH5E UkJHX0ZMQUdfTk9FUlI7CisrICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkp IHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19S X1VOSU5TVEFOVElBVEVfRVJST1IpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysg ICAgLyogRXhwbGljaXQgcmVzZWVkIHRlc3RzICovCisrCisrICAgIC8qIFRlc3QgZXhwbGljaXQg cmVzZWVkIHdpdGggdG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5wdXQgKi8KKysgICAgaWYgKCFkb19k cmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBkY3R4 LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKyAgICBpZiAoRklQU19kcmJnX3Jlc2Vl ZChkY3R4LCB0ZC0+YWRpbiwgZGN0eC0+bWF4X2FkaW4gKyAxKSA+IDApIHsKKysgICAgICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAgRklQ U19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICBnb3RvIGVy cjsKKysgICAgfQorKworKyAgICAvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIGVudHJvcHkg c291cmNlIGZhaWx1cmUgKi8KKysKKysgICAgdC5lbnRsZW4gPSAwOworKworKyAgICBpZiAoRklQ U19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkgeworKyAgICAg ICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAgICAgICAg ICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysgICAgICAgIGdvdG8gZXJyOwor KyAgICB9CisrCisrICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKKysg ICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5T VEFOVElBVEVfRVJST1IpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgLyog VGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbXVjaCBlbnRyb3B5ICovCisrCisrICAgIGlm ICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrICAgICAgICBnb3RvIGVycjsKKysKKysg ICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysgICAgdC5lbnRsZW4gPSBk Y3R4LT5tYXhfZW50cm9weSArIDE7CisrCisrICAgIGlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgs IHRkLT5hZGluLCB0ZC0+YWRpbmxlbikgPiAwKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VS Uk9SX1VOREVURUNURUQpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgaWYg KCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgeworKyAgICAgICAgRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Cisr ICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICAvKiBUZXN0IGV4cGxpY2l0IHJlc2Vl ZCB3aXRoIHRvbyBsaXR0bGUgZW50cm9weSAqLworKworKyAgICBpZiAoIWRvX2RyYmdfaW5pdChk Y3R4LCB0ZCwgJnQpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGRjdHgtPmlmbGFncyB8 PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrICAgIHQuZW50bGVuID0gZGN0eC0+bWluX2VudHJvcHkg LSAxOworKworKyAgICBpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFk aW5sZW4pID4gMCkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLAorKyAgICAgICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsK KysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIGlmICghRklQU19kcmJnX3VuaW5z dGFudGlhdGUoZGN0eCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKyAgICAgICAgZ290byBlcnI7 CisrICAgIH0KKysKKysgICAgcCA9ICh1bnNpZ25lZCBjaGFyICopJmRjdHgtPmQ7CisrICAgIC8q IFN0YW5kYXJkIHNheXMgd2UgaGF2ZSB0byBjaGVjayB1bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJv ZXMKKysgICAgICogdGhlIGRhdGEuLi4KKysgICAgICovCisrICAgIGZvciAoaSA9IDA7IGkgPCBz aXplb2YoZGN0eC0+ZCk7IGkrKykgeworKyAgICAgICAgaWYgKCpwICE9IDApIHsKKysgICAgICAg ICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAg ICAgICAgICBGSVBTX1JfVU5JTlNUQU5USUFURV9aRVJPSVNFX0VSUk9SKTsKKysgICAgICAgICAg ICBnb3RvIGVycjsKKysgICAgICAgIH0KKysgICAgICAgIHArKzsKKysgICAgfQorKworKyAgICBy ZXR1cm4gMTsKKysKKysgZXJyOgorKyAgICAvKiBBIHJlYWwgZXJyb3IgYXMgb3Bwb3NlZCB0byBh biBpbmR1Y2VkIG9uZTogdW5kZXJseWluZyBmdW5jdGlvbiB3aWxsCisrICAgICAqIGluZGljYXRl IHRoZSBlcnJvci4KKysgICAgICovCisrICAgIGlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfRkxB R19OT0VSUikpCisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss IEZJUFNfUl9GVU5DVElPTl9FUlJPUik7CisrICAgIEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRj dHgpOworKyAgICByZXR1cm4gMDsKKysKKyt9CisrCisraW50IGZpcHNfZHJiZ19rYXQoRFJCR19D VFggKmRjdHgsIGludCBuaWQsIHVuc2lnbmVkIGludCBmbGFncykKKyt7CisrICAgIERSQkdfU0VM RlRFU1RfREFUQSAqdGQ7CisrICAgIGZsYWdzIHw9IERSQkdfRkxBR19URVNUOworKyAgICBmb3Ig KHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspIHsKKysgICAgICAgIGlmICh0ZC0+ bmlkID09IG5pZCAmJiB0ZC0+ZmxhZ3MgPT0gZmxhZ3MpIHsKKysgICAgICAgICAgICBpZiAoIWZp cHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAwKSkKKysgICAgICAgICAgICAgICAgcmV0dXJu IDA7CisrICAgICAgICAgICAgcmV0dXJuIGZpcHNfZHJiZ19lcnJvcl9jaGVjayhkY3R4LCB0ZCk7 CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIDA7CisrfQorKworK2ludCBGSVBTX2Ry YmdfaGVhbHRoX2NoZWNrKERSQkdfQ1RYICpkY3R4KQorK3sKKysgICAgaW50IHJ2OworKyAgICBE UkJHX0NUWCAqdGN0eCA9IE5VTEw7CisrICAgIHRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOwor KyAgICBmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgt PnhmbGFncyk7CisrICAgIGlmICghdGN0eCkKKysgICAgICAgIHJldHVybiAwOworKyAgICBydiA9 IGZpcHNfZHJiZ19rYXQodGN0eCwgZGN0eC0+dHlwZSwgZGN0eC0+eGZsYWdzKTsKKysgICAgaWYg KHRjdHgpCisrICAgICAgICBGSVBTX2RyYmdfZnJlZSh0Y3R4KTsKKysgICAgaWYgKHJ2KQorKyAg ICAgICAgZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4 LT54ZmxhZ3MpOworKyAgICBlbHNlCisrICAgICAgICBmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVT VF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKKysgICAgaWYgKCFydikKKysgICAg ICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOworKyAgICBlbHNlCisrICAgICAg ICBkY3R4LT5oZWFsdGhfY2hlY2tfY250ID0gMDsKKysgICAgcmV0dXJuIHJ2OworK30KKysKKytp bnQgRklQU19zZWxmdGVzdF9kcmJnKHZvaWQpCisreworKyAgICBEUkJHX0NUWCAqZGN0eDsKKysg ICAgRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKKysgICAgaW50IHJ2ID0gMTsKKysgICAgZGN0eCA9 IEZJUFNfZHJiZ19uZXcoMCwgMCk7CisrICAgIGlmICghZGN0eCkKKysgICAgICAgIHJldHVybiAw OworKyAgICBmb3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspIHsKKysgICAg ICAgIGlmICh0ZC0+cG9zdCAhPSAxKQorKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAg aWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFn cykpCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICBpZiAoIWZpcHNfZHJiZ19zaW5n bGVfa2F0KGRjdHgsIHRkLCAxKSkgeworKyAgICAgICAgICAgIGZpcHNfcG9zdF9mYWlsZWQoRklQ U19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOworKyAgICAgICAgICAgIHJ2ID0gMDsK KysgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgIH0KKysgICAgICAgIGlmICghZmlwc19w b3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQorKyAgICAg ICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIEZJUFNfZHJiZ19mcmVlKGRjdHgpOworKyAg ICByZXR1cm4gcnY7CisrfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmdfYWxsKHZvaWQpCisr eworKyAgICBEUkJHX0NUWCAqZGN0eDsKKysgICAgRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKKysg ICAgaW50IHJ2ID0gMTsKKysgICAgZGN0eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7CisrICAgIGlm ICghZGN0eCkKKysgICAgICAgIHJldHVybiAwOworKyAgICBmb3IgKHRkID0gZHJiZ190ZXN0OyB0 ZC0+bmlkICE9IDA7IHRkKyspIHsKKysgICAgICAgIGlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQ U19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQorKyAgICAgICAgICAgIHJldHVybiAx OworKyAgICAgICAgaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwgMCkpIHsKKysg ICAgICAgICAgICBmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQt PmZsYWdzKTsKKysgICAgICAgICAgICBydiA9IDA7CisrICAgICAgICAgICAgY29udGludWU7Cisr ICAgICAgICB9CisrICAgICAgICBpZiAoIWZpcHNfZHJiZ19lcnJvcl9jaGVjayhkY3R4LCB0ZCkp IHsKKysgICAgICAgICAgICBmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlk LCAmdGQtPmZsYWdzKTsKKysgICAgICAgICAgICBydiA9IDA7CisrICAgICAgICAgICAgY29udGlu dWU7CisrICAgICAgICB9CisrICAgICAgICBpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVT VF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysg ICAgfQorKyAgICBGSVBTX2RyYmdfZnJlZShkY3R4KTsKKysgICAgcmV0dXJuIHJ2OworK30KK2Rp ZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3Qu aC5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3Qu aAorLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3Qu aC5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTguNDA4NjI0Nzc2ICswMjAwCisrKysgb3BlbnNzbC0x LjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oCTIwMTgtMDctMjUgMTc6 MjY6NTguNDA4NjI0Nzc2ICswMjAwCitAQCAtMCwwICsxLDE3OTEgQEAKKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBt ZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3Jl Lm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z CisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisr ICovCisrCisrLyogU2VsZnRlc3QgYW5kIGhlYWx0aCBjaGVjayBkYXRhIGZvciB0aGUgU1A4MDAt OTAgRFJCRyAqLworKworKyNkZWZpbmUgX19maXBzX2NvbnN0c2VnCisrCisrLyogQUVTLTEyOCB1 c2UgZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDYxLCAweDUyLCAw eDdjLCAweGUzLCAweDIzLCAweDdkLCAweDBhLCAweDA3LCAweDEwLCAweDBjLCAweDUwLCAweDMz LAorKyAgICAweGM4LCAweGRiLCAweGZmLCAweDEyCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfbm9uY2VbXSA9IHsK KysgICAgMHg1MSwgMHgwZCwgMHg4NSwgMHg3NywgMHhlZCwgMHgyMiwgMHg5NywgMHgyOAorK307 CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweDU5LCAw eDlmLCAweGJiLCAweGNkLCAweGQ1LCAweDI1LCAweDY5LCAweGI1LCAweGNiLCAweGI1LCAweDAz LCAweGZlLAorKyAgICAweGQ3LCAweGQ3LCAweDAxLCAweDY3CisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJf YWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4ZWYsIDB4ODgsIDB4NzYsIDB4MDEsIDB4YWYs IDB4M2MsIDB4ZmUsIDB4OGIsIDB4YWYsIDB4MjYsIDB4MDYsIDB4OWUsCisrICAgIDB4OWEsIDB4 NDcsIDB4MDgsIDB4NzYKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0gewor KyAgICAweGUyLCAweDc2LCAweGY5LCAweGY2LCAweDNhLCAweGJhLCAweDEwLCAweDlmLCAweGJm LCAweDQ3LCAweDBlLCAweDUxLAorKyAgICAweDA5LCAweGZiLCAweGEzLCAweGI2CisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweGQ0LCAweDk4LCAweDhh LCAweDQ2LCAweDgwLCAweDRjLCAweGRiLCAweGEzLCAweDU5LCAweDAyLCAweDU3LCAweDUyLAor KyAgICAweDY2LCAweDFjLCAweGVhLCAweDViCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysg ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfYWRkaXRpb25h bGlucHV0MltdID0geworKyAgICAweDg4LCAweDhjLCAweDkxLCAweGQ2LCAweGJlLCAweDU2LCAw eDZlLCAweDA4LCAweDlhLCAweDYyLCAweDJiLCAweDExLAorKyAgICAweDNmLCAweDVlLCAweDMx LCAweDA2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10gPSB7CisrICAgIDB4 YzAsIDB4NWMsIDB4NmIsIDB4OTgsIDB4MDEsIDB4MGQsIDB4NTgsIDB4MTgsIDB4NTEsIDB4MTgs IDB4OTYsIDB4YWUsCisrICAgIDB4YTcsIDB4ZTMsIDB4YTgsIDB4NjcKKyt9OworKworK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9y ZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhjZiwgMHgwMSwgMHhhYywgMHgyMiwgMHgzMSwgMHgw NiwgMHg4ZSwgMHhmYywgMHhjZSwgMHg1NiwgMHhlYSwgMHgyNCwKKysgICAgMHgwZiwgMHgzOCwg MHg0MywgMHhjNgorK307CisrCisrLyogQUVTLTEyOCB1c2UgZGYgTm8gUFIgICovCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2VudHJv cHlpbnB1dFtdID0geworKyAgICAweDFmLCAweDhlLCAweDM0LCAweDgyLCAweDBjLCAweGI3LCAw eGJlLCAweGM1LCAweDAxLCAweDNlLCAweGQwLCAweGEzLAorKyAgICAweDlkLCAweDdkLCAweDFj LCAweDliCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF91c2VfZGZfbm9uY2VbXSA9IHsKKysgICAgMHhkNSwgMHg0ZCwgMHhiZCwgMHg0 YSwgMHg5MywgMHg3ZiwgMHhiOCwgMHg5NgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0geworKyAgICAweGFiLCAweGQ2LCAweDNmLCAweDA0LCAweGZlLCAweDI3LCAw eDZiLCAweDJkLCAweGQ3LCAweGMzLCAweDFjLCAweGYzLAorKyAgICAweDM4LCAweDY2LCAweGJh LCAweDFiCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4ZmUsIDB4ZjQs IDB4MDksIDB4YTgsIDB4YjcsIDB4NzMsIDB4MjcsIDB4OWMsIDB4NWYsIDB4YTcsIDB4ZWEsIDB4 NDYsCisrICAgIDB4YjUsIDB4ZTIsIDB4YjIsIDB4NDEKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9pbnRfcmV0dXJuZWRi aXRzW10gPSB7CisrICAgIDB4NDIsIDB4ZTQsIDB4NGUsIDB4N2IsIDB4MjcsIDB4ZGQsIDB4Y2Is IDB4YmMsIDB4MGEsIDB4Y2YsIDB4YTYsIDB4NjcsCisrICAgIDB4ZTcsIDB4NTcsIDB4MTEsIDB4 YjQKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTI4X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHgxNCwg MHgyNiwgMHg2OSwgMHhkOSwgMHhmMywgMHg2NSwgMHgwMywgMHhkNiwgMHg2YiwgMHhiOSwgMHg0 NCwgMHgwYiwKKysgICAgMHhjNywgMHhjNCwgMHg5ZSwgMHgzOQorK307CisrCisrX19maXBzX2Nv bnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2Fk ZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0geworKyAgICAweDU1LCAweDJlLCAweDYwLCAweDlhLCAw eDA1LCAweDcyLCAweDhhLCAweGE4LCAweGVmLCAweDIyLCAweDgxLCAweDVhLAorKyAgICAweGM4 LCAweDkzLCAweGZhLCAweDg0CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0geworKyAg ICAweDNjLCAweDQwLCAweGM4LCAweGM0LCAweDE2LCAweDBjLCAweDIxLCAweGE0LCAweDM3LCAw eDJjLCAweDhmLCAweGE1LAorKyAgICAweDA2LCAweDBjLCAweDE1LCAweDJjCisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZf cmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4ZTEsIDB4M2UsIDB4OTksIDB4OTgsIDB4ODYsIDB4 NjcsIDB4MGIsIDB4NjMsIDB4N2IsIDB4YmUsIDB4M2YsIDB4ODgsCisrICAgIDB4NDYsIDB4ODEs IDB4YzcsIDB4MTkKKyt9OworKworKy8qIEFFUy0xOTIgdXNlIGRmIFBSICAqLworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9lbnRy b3B5aW5wdXRbXSA9IHsKKysgICAgMHgyYiwgMHg0ZSwgMHg4YiwgMHhlMSwgMHhmMSwgMHgzNCwg MHg4MCwgMHg1NiwgMHg4MSwgMHhmOSwgMHg3NCwgMHhlYywKKysgICAgMHgxNywgMHg0NCwgMHgy YSwgMHhmMSwgMHgxNCwgMHhiMCwgMHhiZiwgMHg5NywgMHgzOSwgMHhiNywgMHgwNCwgMHg3ZAor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfdXNlX2RmX3ByX25vbmNlW10gPSB7CisrICAgIDB4ZDYsIDB4OWQsIDB4ZWIsIDB4MTQsIDB4 NGUsIDB4NmMsIDB4MzAsIDB4MWUsIDB4MzksIDB4NTUsIDB4NzMsIDB4ZDAsCisrICAgIDB4ZDEs IDB4ODAsIDB4NzgsIDB4ZmEKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9IHsKKysgICAgMHhmYywgMHg0MywgMHg0YSwgMHhmOCwgMHg5YSwgMHg1NSwgMHhiMywg MHg1MywgMHg4MywgMHhlMiwgMHgxOCwgMHgxNiwKKysgICAgMHgwYywgMHhkYywgMHhjZCwgMHg1 ZSwgMHg0ZiwgMHhhMCwgMHgwMywgMHgwMSwgMHgyYiwgMHg5ZiwgMHhlNCwgMHhkNSwKKysgICAg MHg3ZCwgMHg0OSwgMHhmMCwgMHg0MSwgMHg5ZSwgMHgzZCwgMHg5OSwgMHgwNAorK307CisrCisr X19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf dXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDVlLCAweDlmLCAweDQ5LCAw eDZmLCAweDIxLCAweDhiLCAweDFkLCAweDMyLCAweGQ1LCAweDg0LCAweDVjLCAweGFjLAorKyAg ICAweGFmLCAweGRmLCAweGU0LCAweDc5LCAweDllLCAweGFmLCAweGE5LCAweDgyLCAweGQwLCAw eGY4LCAweDRmLCAweGNiLAorKyAgICAweDY5LCAweDEwLCAweDBhLCAweDdlLCAweDgxLCAweDU3 LCAweGI1LCAweDM2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysg ICAgMHhkNCwgMHg4MSwgMHgwYywgMHhkNywgMHg2NiwgMHgzOSwgMHhlYywgMHg0MiwgMHg1Mywg MHg4NywgMHg0MSwgMHhhNSwKKysgICAgMHgxZSwgMHg3ZCwgMHg4MCwgMHg5MSwgMHg4ZSwgMHhi YiwgMHhlZCwgMHhhYywgMHgxNCwgMHgwMiwgMHgxYSwgMHhkNQorK307CisrCisrX19maXBzX2Nv bnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3By X2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhkZiwgMHgxZCwgMHgzOSwgMHg0NSwgMHg3 YywgMHg5YiwgMHhjNiwgMHgyYiwgMHg3ZCwgMHg4YywgMHg5MywgMHhlOSwKKysgICAgMHgxOSwg MHgzMCwgMHg2YiwgMHg2NworK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9 IHsKKysgICAgMHgwMCwgMHg3MSwgMHgyNywgMHg0ZSwgMHhkMywgMHgxNCwgMHhmMSwgMHgyMCwg MHg3ZiwgMHg0YSwgMHg0MSwgMHgzMiwKKysgICAgMHgyYSwgMHg5NywgMHgxMSwgMHg0MywgMHg4 ZiwgMHg0YSwgMHgxNSwgMHg3YiwgMHg5YiwgMHg1MSwgMHg3OSwgMHhkYSwKKysgICAgMHg0OSwg MHgzZCwgMHhkZSwgMHhlOCwgMHhiYywgMHg5MywgMHg5MSwgMHg5OQorK307CisrCisrX19maXBz X2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2Rm X3ByX2VudHJvcHlpbnB1dHByMltdID0geworKyAgICAweDkwLCAweGVlLCAweDc2LCAweGExLCAw eDQ1LCAweDhkLCAweGI3LCAweDQwLCAweGIwLCAweDExLCAweGJmLCAweGQwLAorKyAgICAweDY1 LCAweGQ3LCAweDNjLCAweDdjLCAweDRmLCAweDIwLCAweDNmLCAweDRlLCAweDExLCAweDlkLCAw eGIzLCAweDVlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4MjQsIDB4 M2IsIDB4MjAsIDB4YTQsIDB4MzcsIDB4NjYsIDB4YmEsIDB4NzIsIDB4MzksIDB4M2YsIDB4Y2Ys IDB4M2MsCisrICAgIDB4N2UsIDB4MWEsIDB4MmIsIDB4ODMKKyt9OworKworKy8qIEFFUy0xOTIg dXNlIGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX3VzZV9kZl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHg4ZCwgMHg3NCwg MHhhNCwgMHg1MCwgMHgxYSwgMHgwMiwgMHg2OCwgMHgwYywgMHgyYSwgMHg2OSwgMHhjNCwgMHg4 MiwKKysgICAgMHgzYiwgMHhiYiwgMHhkYSwgMHgwZSwgMHg3ZiwgMHg3NywgMHhhMywgMHgxNywg MHg3OCwgMHg1NywgMHhiMiwgMHg3YgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX25vbmNlW10gPSB7CisrICAgIDB4NzUs IDB4ZDUsIDB4MWYsIDB4YWMsIDB4YTQsIDB4OGQsIDB4NDIsIDB4NzgsIDB4ZDcsIDB4NjksIDB4 ODYsIDB4OWQsCisrICAgIDB4NzcsIDB4ZDcsIDB4NDEsIDB4MGUKKyt9OworKworK19fZmlwc19j b25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHg0ZSwgMHgzMywgMHg0MSwgMHgzYywg MHg5YywgMHhjMiwgMHhkMiwgMHg1MywgMHhhZiwgMHg5MCwgMHhlYSwgMHhjZiwKKysgICAgMHgx OSwgMHg1MCwgMHgxZSwgMHhlNiwgMHg2ZiwgMHg2MywgMHhjOCwgMHgzMiwgMHgyMiwgMHhkYywg MHgwNywgMHg2NSwKKysgICAgMHg5YywgMHhkMywgMHhmOCwgMHgzMCwgMHg5ZSwgMHhlZCwgMHgz NSwgMHg3MAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDVkLCAweDhi LCAweDhjLCAweGMxLCAweGRmLCAweDBlLCAweDAyLCAweDc4LCAweGZiLCAweDE5LCAweGI4LCAw eDY5LAorKyAgICAweDc4LCAweDRlLCAweDljLCAweDUyLCAweGJjLCAweGM3LCAweDIwLCAweGM5 LCAweGU2LCAweDVlLCAweDc3LCAweDIyLAorKyAgICAweDI4LCAweDNkLCAweDBjLCAweDllLCAw eDY4LCAweGE4LCAweDQ1LCAweGQ3CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0gewor KyAgICAweGQ1LCAweGU3LCAweDA4LCAweGM1LCAweDE5LCAweDk5LCAweGQ1LCAweDMxLCAweDAz LCAweDBhLCAweDc0LCAweGI2LAorKyAgICAweGI3LCAweGVkLCAweGU5LCAweGVhCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4OWMsIDB4MjYsIDB4ZGEs IDB4ZjEsIDB4YWMsIDB4ZDksIDB4NWEsIDB4ZDYsIDB4YTgsIDB4NjUsIDB4ZjUsIDB4MDIsCisr ICAgIDB4OGYsIDB4ZGMsIDB4YTIsIDB4MDksIDB4NTQsIDB4YTYsIDB4ZTIsIDB4YTQsIDB4ZGUs IDB4MzIsIDB4ZTAsIDB4MDEKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRb XSA9IHsKKysgICAgMHg5YiwgMHg5MCwgMHhiMCwgMHgzYSwgMHgwZSwgMHgzYSwgMHg4MCwgMHgw NywgMHg0YSwgMHhmNCwgMHhkYSwgMHg3NiwKKysgICAgMHgyOCwgMHgzMCwgMHgzYywgMHhlZSwg MHg1NCwgMHgxYiwgMHg5NCwgMHg1OSwgMHg1MSwgMHg0MywgMHg1NiwgMHg3NywKKysgICAgMHhh ZiwgMHg4OCwgMHhkZCwgMHg2MywgMHg4OSwgMHg0NywgMHgwNiwgMHg2NQorK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2Fk ZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHgzYywgMHgxMSwgMHg2NCwgMHg3YSwgMHg5Niwg MHhmNSwgMHhkOCwgMHhiOCwgMHhhZSwgMHhkNiwgMHg3MCwgMHg0ZSwKKysgICAgMHgxNiwgMHg5 NiwgMHhkZSwgMHhlOSwgMHg2MiwgMHhiYywgMHhlZSwgMHgyOCwgMHgyZiwgMHgyNiwgMHhhNiwg MHhmMCwKKysgICAgMHg1NiwgMHhlZiwgMHhhMywgMHhmMSwgMHg2YiwgMHhhMSwgMHhiMSwgMHg3 NworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xOTJfdXNlX2RmX3JldHVybmVkYml0c1tdID0geworKyAgICAweDBiLCAweGUyLCAweDU2LCAw eDAzLCAweDFlLCAweGRiLCAweDJjLCAweDZkLCAweDdmLCAweDFiLCAweDE1LCAweDU4LAorKyAg ICAweDFhLCAweGY5LCAweDEzLCAweDI4CisrfTsKKysKKysvKiBBRVMtMjU2IHVzZSBkZiBQUiAg Ki8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91 c2VfZGZfcHJfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4NjEsIDB4NjgsIDB4ZmMsIDB4MWEs IDB4ZjAsIDB4YjUsIDB4OTUsIDB4NmIsIDB4ODUsIDB4MDksIDB4OWIsIDB4NzQsCisrICAgIDB4 M2YsIDB4MTMsIDB4NzgsIDB4NDksIDB4M2IsIDB4ODUsIDB4ZWMsIDB4OTMsIDB4MTMsIDB4M2Is IDB4YTksIDB4NGYsCisrICAgIDB4OTYsIDB4YWIsIDB4MmMsIDB4ZTQsIDB4YzgsIDB4OGYsIDB4 ZGQsIDB4NmEKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X3VzZV9kZl9wcl9ub25jZVtdID0geworKyAgICAweGFkLCAweGQyLCAweGJi LCAweGJhLCAweGI3LCAweDY1LCAweDg5LCAweGMzLCAweDIxLCAweDZjLCAweDU1LCAweDMzLAor KyAgICAweDJiLCAweDM2LCAweGZmLCAweGE0CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysg ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4NmUsIDB4Y2EsIDB4ZTcsIDB4MjAsIDB4NzIsIDB4 ZDMsIDB4ODQsIDB4NWEsIDB4MzIsIDB4ZDMsIDB4NGIsIDB4MjQsCisrICAgIDB4NzIsIDB4YzQs IDB4NjMsIDB4MmIsIDB4OWQsIDB4MTIsIDB4MjQsIDB4MGMsIDB4MjMsIDB4MjYsIDB4OGUsIDB4 ODMsCisrICAgIDB4MTYsIDB4MzcsIDB4MGIsIDB4ZDEsIDB4MDYsIDB4NGYsIDB4NjgsIDB4NmQK Kyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHg3ZSwgMHgw OCwgMHg0YSwgMHhiYiwgMHhlMywgMHgyMSwgMHg3YywgMHhjOSwgMHgyMywgMHhkMiwgMHhmOCwg MHhiMCwKKysgICAgMHg3MywgMHg5OCwgMHhiYSwgMHg4NCwgMHg3NCwgMHgyMywgMHhhYiwgMHgw NiwgMHg4YSwgMHhlMiwgMHgyMiwgMHhkMywKKysgICAgMHg3YiwgMHhjZSwgMHg5YiwgMHhkMiwg MHg0YSwgMHg3NiwgMHhiOCwgMHhkZQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHBy W10gPSB7CisrICAgIDB4MGIsIDB4MjMsIDB4YWYsIDB4ZGYsIDB4ZjEsIDB4NjIsIDB4ZDcsIDB4 ZDMsIDB4NDMsIDB4OTcsIDB4ZjgsIDB4NzcsCisrICAgIDB4MDQsIDB4YTgsIDB4NDIsIDB4MjAs IDB4YmQsIDB4ZjYsIDB4MGYsIDB4YzEsIDB4MTcsIDB4MmYsIDB4OWYsIDB4NTQsCisrICAgIDB4 YmIsIDB4NTYsIDB4MTcsIDB4ODYsIDB4NjgsIDB4MGUsIDB4YmEsIDB4YTkKKyt9OworKworK19f Zmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3Vz ZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4MzEsIDB4OGUsIDB4YWQsIDB4 YWYsIDB4NDAsIDB4ZWIsIDB4NmIsIDB4NzQsIDB4MzEsIDB4NDYsIDB4ODAsIDB4YzcsCisrICAg IDB4MTcsIDB4YWIsIDB4M2MsIDB4N2EKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5w dXQyW10gPSB7CisrICAgIDB4OTQsIDB4NmIsIDB4YzksIDB4OWYsIDB4YWIsIDB4OGQsIDB4YzUs IDB4ZWMsIDB4NzEsIDB4ODgsIDB4MWQsIDB4MDAsCisrICAgIDB4OGMsIDB4ODksIDB4NjgsIDB4 ZTQsIDB4YzgsIDB4MDcsIDB4NzcsIDB4MzYsIDB4MTcsIDB4NmQsIDB4NzksIDB4NzgsCisrICAg IDB4YzcsIDB4MDYsIDB4NGUsIDB4OTksIDB4MDQsIDB4MjgsIDB4MjksIDB4YzMKKyt9OworKwor K19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2 X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKKysgICAgMHhiZiwgMHg2YywgMHg1OSwg MHgyYSwgMHgwZCwgMHg0NCwgMHgwZiwgMHhhZSwgMHg5YSwgMHg1ZSwgMHgwMywgMHg3MywKKysg ICAgMHhkOCwgMHhhNiwgMHhlMSwgMHhjZiwgMHgyNSwgMHg2MSwgMHgzOCwgMHgyNCwgMHg4Niwg MHg5ZSwgMHg1MywgMHhlOCwKKysgICAgMHhhNCwgMHhkZiwgMHg1NiwgMHhmNCwgMHgwNiwgMHgw NywgMHg5YywgMHgwZgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0geworKyAgICAweDIy LCAweDRhLCAweGI0LCAweGI4LCAweGI2LCAweGVlLCAweDdkLCAweGIxLCAweDllLCAweGM5LCAw eGY5LCAweGEwLAorKyAgICAweGQ5LCAweGUyLCAweDk3LCAweDAwCisrfTsKKysKKysvKiBBRVMt MjU2IHVzZSBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4YTUsIDB4 M2UsIDB4MzcsIDB4MTAsIDB4MTcsIDB4NDMsIDB4OTEsIDB4OTMsIDB4NTksIDB4MWUsIDB4NDcs IDB4NTAsCisrICAgIDB4ODcsIDB4YWEsIDB4ZGQsIDB4ZDUsIDB4YzEsIDB4YzMsIDB4ODYsIDB4 Y2QsIDB4Y2EsIDB4MGQsIDB4ZGIsIDB4NjgsCisrICAgIDB4ZTAsIDB4MDIsIDB4ZDgsIDB4MGYs IDB4ZGMsIDB4NDAsIDB4MWEsIDB4NDcKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9ub25jZVtdID0geworKyAgICAweGE5 LCAweDRkLCAweGE1LCAweDVhLCAweGZkLCAweGM1LCAweDBjLCAweGU1LCAweDFjLCAweDlhLCAw eDNiLCAweDhhLAorKyAgICAweDRjLCAweDQ0LCAweDg0LCAweDQwCisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4OGIsIDB4NTIsIDB4YTIsIDB4NGEs IDB4OTMsIDB4YzMsIDB4NGUsIDB4YTcsIDB4MWUsIDB4MWMsIDB4YTcsIDB4MDUsCisrICAgIDB4 ZWIsIDB4ODIsIDB4OWIsIDB4YTYsIDB4NWQsIDB4ZTQsIDB4ZDQsIDB4ZTAsIDB4N2YsIDB4YTMs IDB4ZDgsIDB4NmIsCisrICAgIDB4MzcsIDB4ODQsIDB4NWYsIDB4ZjEsIDB4YzcsIDB4ZDUsIDB4 ZjYsIDB4ZDIKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHgyMCwgMHhm NCwgMHgyMiwgMHhlZCwgMHhmOCwgMHg1YywgMHhhMSwgMHg2YSwgMHgwMSwgMHhjZiwgMHhiZSwg MHg1ZiwKKysgICAgMHg4ZCwgMHg2YywgMHg5NCwgMHg3ZiwgMHhhZSwgMHgxMiwgMHhhOCwgMHg1 NywgMHhkYiwgMHgyYSwgMHhhOSwgMHhiZiwKKysgICAgMHhjNywgMHhiMywgMHg2NSwgMHg4MSwg MHg4MCwgMHg4ZCwgMHgwZCwgMHg0NgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsK KysgICAgMHg0ZSwgMHg0NCwgMHhmZCwgMHhmMywgMHg5ZSwgMHgyOSwgMHhhMiwgMHhiOCwgMHgw ZiwgMHg1ZCwgMHg2YywgMHhlMSwKKysgICAgMHgyOCwgMHgwYywgMHgzYiwgMHhjMQorK307Cisr CisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18y NTZfdXNlX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0geworKyAgICAweGRkLCAweDQwLCAweGU1 LCAweDk4LCAweDdiLCAweDI3LCAweDE2LCAweDczLCAweDE1LCAweDY4LCAweGQyLCAweDc2LAor KyAgICAweGJmLCAweDBjLCAweDY3LCAweDE1LCAweDc1LCAweDc5LCAweDAzLCAweGQzLCAweGRl LCAweGRlLCAweDkxLCAweDQ2LAorKyAgICAweDQyLCAweGRkLCAweGQ0LCAweDY3LCAweGM4LCAw eDc5LCAweGM4LCAweDFlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10g PSB7CisrICAgIDB4N2YsIDB4ZDgsIDB4MWYsIDB4YmQsIDB4MmEsIDB4YjUsIDB4MWMsIDB4MTEs IDB4NWQsIDB4ODMsIDB4NGUsIDB4OTksCisrICAgIDB4ZjYsIDB4NWMsIDB4YTUsIDB4NDAsIDB4 MjAsIDB4ZWQsIDB4MzgsIDB4OGUsIDB4ZDUsIDB4OWUsIDB4ZTAsIDB4NzUsCisrICAgIDB4OTMs IDB4ZmUsIDB4MTIsIDB4NWUsIDB4NWQsIDB4NzMsIDB4ZmIsIDB4NzUKKyt9OworKworK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9hZGRp dGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4Y2QsIDB4MmMsIDB4ZmYsIDB4MTQsIDB4NjksIDB4 M2UsIDB4NGMsIDB4OWUsIDB4ZmQsIDB4ZmUsIDB4MjYsIDB4MGQsCisrICAgIDB4ZTksIDB4ODYs IDB4MDAsIDB4NDksIDB4MzAsIDB4YmEsIDB4YjEsIDB4YzYsIDB4NTAsIDB4NTcsIDB4NzcsIDB4 MmEsCisrICAgIDB4NjIsIDB4MzksIDB4MmMsIDB4M2IsIDB4NzQsIDB4ZWIsIDB4YzksIDB4MGQK Kyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg0ZiwgMHg3OCwgMHhiZSwgMHhi OSwgMHg0ZCwgMHg5NywgMHg4YywgMHhlOSwgMHhkMCwgMHg5NywgMHhmZSwgMHhhZCwKKysgICAg MHhmYSwgMHhmZCwgMHgzNSwgMHg1ZQorK307CisrCisrLyogQUVTLTEyOCBubyBkZiBQUiAgKi8K KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19k Zl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHg5YSwgMHgyNSwgMHg2NSwgMHgxMCwgMHg2 NywgMHhkNSwgMHhiNiwgMHg2YiwgMHg3MCwgMHhhMSwgMHhiMywgMHhhNCwKKysgICAgMHg0Mywg MHg5NSwgMHg4MCwgMHhjMCwgMHg4NCwgMHgwYSwgMHg3OSwgMHhiMCwgMHg4OCwgMHg3NCwgMHhm MiwgMHhiZiwKKysgICAgMHgzMSwgMHg2YywgMHgzMywgMHgzOCwgMHgwYiwgMHgwMCwgMHhiMiwg MHg1YQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfbm9fZGZfcHJfbm9uY2VbXSA9IHsKKysgICAgMHg3OCwgMHg0NywgMHg2YiwgMHhm NywgMHg5MCwgMHg4ZSwgMHg4NywgMHhmMQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfcGVyc29uYWxpemF0 aW9uc3RyaW5nW10gPSB7CisrICAgIDB4ZjcsIDB4MjIsIDB4MWQsIDB4M2EsIDB4YmUsIDB4MWQs IDB4Y2EsIDB4MzIsIDB4MWIsIDB4YmQsIDB4ODcsIDB4MGMsCisrICAgIDB4NTEsIDB4MjQsIDB4 MTksIDB4ZWUsIDB4YTMsIDB4MjMsIDB4MDksIDB4NjMsIDB4MzMsIDB4M2QsIDB4YTgsIDB4MGMs CisrICAgIDB4MWMsIDB4ZmEsIDB4NDIsIDB4ODksIDB4Y2MsIDB4NmYsIDB4YTAsIDB4YTgKKyt9 OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweGM5LCAweGUwLCAw eDgwLCAweGJmLCAweDhjLCAweDQ1LCAweDU4LCAweDM5LCAweGZmLCAweDAwLCAweGFiLCAweDAy LAorKyAgICAweDRjLCAweDNlLCAweDNhLCAweDk1LCAweDliLCAweDgwLCAweGE4LCAweDIxLCAw eDJhLCAweGVlLCAweGJhLCAweDczLAorKyAgICAweGIxLCAweGQ5LCAweGNmLCAweDI4LCAweGY2 LCAweDhmLCAweDliLCAweDEyCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0geworKyAg ICAweDRjLCAweGE4LCAweGM1LCAweGYwLCAweDU5LCAweDllLCAweGE2LCAweDhkLCAweDI2LCAw eDUzLCAweGQ3LCAweDhhLAorKyAgICAweGE5LCAweGQ4LCAweGY3LCAweGVkLCAweGIyLCAweGY5 LCAweDEyLCAweDQyLCAweGUxLCAweGU1LCAweGJkLCAweGU3LAorKyAgICAweGU3LCAweDFkLCAw eDc0LCAweDk5LCAweDAwLCAweDlkLCAweDMxLCAweDNlCisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9pbnRf cmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4ZTIsIDB4YWMsIDB4MjAsIDB4ZjAsIDB4ODAsIDB4 ZTcsIDB4YmMsIDB4N2UsIDB4OWMsIDB4N2IsIDB4NjUsIDB4NzEsCisrICAgIDB4YWYsIDB4MTks IDB4MzIsIDB4MTYKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysg ICAgMHgzMiwgMHg3ZiwgMHgzOCwgMHg4YiwgMHg3MywgMHgwYSwgMHg3OCwgMHg4MywgMHhkYywg MHgzMCwgMHhiZSwgMHg5ZiwKKysgICAgMHgxMCwgMHgxZiwgMHhmNSwgMHgxZiwgMHhjYSwgMHgw MCwgMHhiNSwgMHgwZCwgMHhkNiwgMHg5ZCwgMHg2MCwgMHg4MywKKysgICAgMHg1MSwgMHg1NCwg MHg3ZCwgMHgzOCwgMHgyMywgMHgzYSwgMHg1MiwgMHg1MAorK307CisrCisrX19maXBzX2NvbnN0 c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50 cm9weWlucHV0cHIyW10gPSB7CisrICAgIDB4MTgsIDB4NjEsIDB4NTMsIDB4NTYsIDB4ZWQsIDB4 ZWQsIDB4ZDcsIDB4MjAsIDB4ZmIsIDB4NzEsIDB4MDQsIDB4N2EsCisrICAgIDB4YjIsIDB4YWMs IDB4YzEsIDB4MjgsIDB4Y2QsIDB4ZjIsIDB4YzIsIDB4ZmMsIDB4YWEsIDB4YjEsIDB4MDYsIDB4 MDcsCisrICAgIDB4ZTksIDB4NDYsIDB4OTUsIDB4MDIsIDB4NDgsIDB4MDEsIDB4NzgsIDB4ZjkK Kyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X25vX2RmX3ByX3JldHVybmVkYml0c1tdID0geworKyAgICAweDI5LCAweGM4LCAweDFiLCAw eDE1LCAweGIxLCAweGQxLCAweGMyLCAweGY2LCAweDcxLCAweDg2LCAweDY4LCAweDMzLAorKyAg ICAweDU3LCAweDgyLCAweDMzLCAweGFmCisrfTsKKysKKysvKiBBRVMtMTI4IG5vIGRmIE5vIFBS ICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X25vX2RmX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweGM5LCAweGM1LCAweDc5LCAweGJjLCAw eGU4LCAweGM1LCAweDE5LCAweGQ4LCAweGJjLCAweDY2LCAweDczLCAweDY3LAorKyAgICAweGY2 LCAweGQzLCAweDcyLCAweGFhLCAweGE2LCAweDE2LCAweGI4LCAweDUwLCAweGI3LCAweDQ3LCAw eDNhLCAweDQyLAorKyAgICAweGFiLCAweGY0LCAweDE2LCAweGIyLCAweDk2LCAweGQyLCAweGI2 LCAweDYwCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF9ub19kZl9ub25jZVtdID0geworKyAgICAweDVmLCAweGJmLCAweDk3LCAweDBj LCAweDRiLCAweGE0LCAweDg3LCAweDEzCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wZXJzb25hbGl6YXRpb25z dHJpbmdbXSA9IHsKKysgICAgMHhjZSwgMHhmYiwgMHg3YiwgMHgzZiwgMHhkNCwgMHg2YiwgMHgy OSwgMHgwZCwgMHg2OSwgMHgwNiwgMHhmZiwgMHhiYiwKKysgICAgMHhmMiwgMHhlNSwgMHhjNiwg MHg2YywgMHgwYSwgMHgxMCwgMHhhMCwgMHhjZiwgMHgxYSwgMHg0OCwgMHhjNywgMHg4YiwKKysg ICAgMHgzYywgMHgxNiwgMHg4OCwgMHhlZCwgMHg1MCwgMHgxMywgMHg4MSwgMHhjZQorK307Cisr CisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9f ZGZfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4NGIsIDB4MjIsIDB4NDYsIDB4MTgsIDB4 MDIsIDB4N2IsIDB4ZDIsIDB4MWIsIDB4MjIsIDB4NDIsIDB4N2MsIDB4MzcsCisrICAgIDB4ZDks IDB4ZjYsIDB4ZTgsIDB4OWIsIDB4MTIsIDB4MzAsIDB4NWYsIDB4ZTksIDB4OTAsIDB4ZTgsIDB4 MDgsIDB4MjQsCisrICAgIDB4NGYsIDB4MDYsIDB4NjYsIDB4ZGIsIDB4MTksIDB4MmIsIDB4MTMs IDB4OTUKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTI4X25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHgyZSwgMHg5Niwg MHg3MCwgMHg2NCwgMHhmYSwgMHhkZiwgMHhkZiwgMHg1NywgMHhiNSwgMHg4MiwgMHhlZSwgMHhk NiwKKysgICAgMHhlZCwgMHgzZSwgMHg2NSwgMHhjMgorK307CisrCisrX19maXBzX2NvbnN0c2Vn CisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfZW50cm9weWlu cHV0cmVzZWVkW10gPSB7CisrICAgIDB4MjYsIDB4YzAsIDB4NzIsIDB4MTYsIDB4M2EsIDB4NGIs IDB4YjcsIDB4OTksIDB4ZDQsIDB4MDcsIDB4YWYsIDB4NjYsCisrICAgIDB4NjIsIDB4MzYsIDB4 OTYsIDB4YTQsIDB4NTEsIDB4MTcsIDB4ZmEsIDB4MDcsIDB4OGIsIDB4MTcsIDB4NWUsIDB4YTEs CisrICAgIDB4MmYsIDB4M2MsIDB4MTAsIDB4ZTcsIDB4OTAsIDB4ZDAsIDB4NDYsIDB4MDAKKyt9 OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0geworKyAgICAweDgzLCAweDM5 LCAweDM3LCAweDdiLCAweDAyLCAweDA2LCAweGQyLCAweDEyLCAweDEzLCAweDhkLCAweDhiLCAw eGYyLAorKyAgICAweGYwLCAweGY2LCAweDI2LCAweGViLCAweGE0LCAweDIyLCAweDdiLCAweGMy LCAweGU3LCAweGJhLCAweDc5LCAweGU0LAorKyAgICAweDNiLCAweDc3LCAweDVkLCAweDRkLCAw eDQ3LCAweGIyLCAweDJkLCAweGI0CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Cisr ICAgIDB4MGIsIDB4YjksIDB4NjcsIDB4MzcsIDB4ZGIsIDB4ODMsIDB4ZGYsIDB4Y2EsIDB4ODEs IDB4OGIsIDB4ZjksIDB4M2YsCisrICAgIDB4ZjEsIDB4MTEsIDB4MWIsIDB4MmYsIDB4ZjAsIDB4 NjEsIDB4YTYsIDB4ZGYsIDB4YmEsIDB4YTMsIDB4YjEsIDB4YWMsCisrICAgIDB4ZDMsIDB4ZTYs IDB4MDksIDB4YjgsIDB4MmMsIDB4NmEsIDB4NjcsIDB4ZDYKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3JldHVybmVkYml0 c1tdID0geworKyAgICAweDFlLCAweGE3LCAweGE0LCAweGU0LCAweGUxLCAweGE2LCAweDdjLCAw eDY5LCAweDlhLCAweDQ0LCAweDZjLCAweDM2LAorKyAgICAweDgxLCAweDM3LCAweDE5LCAweGQ0 CisrfTsKKysKKysvKiBBRVMtMTkyIG5vIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0g eworKyAgICAweDlkLCAweDJjLCAweGQyLCAweDU1LCAweDY2LCAweGVhLCAweGUwLCAweGJlLCAw eDE4LCAweGI3LCAweDc2LCAweGU3LAorKyAgICAweDczLCAweDM1LCAweGQ4LCAweDFmLCAweGFk LCAweDNhLCAweGUzLCAweDgxLCAweDBlLCAweDkyLCAweGQwLCAweDYxLAorKyAgICAweGM5LCAw eDEyLCAweDI2LCAweGY2LCAweDFjLCAweGRmLCAweGZlLCAweDQ3LCAweGFhLCAweGZlLCAweDdk LCAweDVhLAorKyAgICAweDE3LCAweDFmLCAweDhkLCAweDlhCisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9ub25jZVtd ID0geworKyAgICAweDQ0LCAweDgyLCAweGVkLCAweGU4LCAweDRjLCAweDI4LCAweDVhLCAweDE0 LCAweGZmLCAweDg4LCAweDhkLCAweDE5LAorKyAgICAweDYxLCAweDVjLCAweGVlLCAweDBmCisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzE5Ml9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHg0Nywg MHhkNywgMHg5YiwgMHg5OSwgMHhhYSwgMHhjYiwgMHhlNywgMHhkMiwgMHg1NywgMHg2NiwgMHgy YywgMHhlMSwKKysgICAgMHg3OCwgMHhkNiwgMHgyYywgMHhlYSwgMHhhMywgMHgyMywgMHg1Ziwg MHgyYSwgMHhjMSwgMHgzYSwgMHhmMCwgMHhhNCwKKysgICAgMHgyMCwgMHgzYiwgMHhmYSwgMHgw NywgMHhkNSwgMHgwNSwgMHgwMiwgMHhlNCwgMHg1NywgMHgwMSwgMHhiNiwgMHgxMCwKKysgICAg MHg1NywgMHgyZSwgMHhlNywgMHg1NQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0 W10gPSB7CisrICAgIDB4NGIsIDB4NzQsIDB4MGIsIDB4NDAsIDB4Y2UsIDB4NmIsIDB4YzIsIDB4 NmEsIDB4MjQsIDB4YjQsIDB4ZjMsIDB4YWQsCisrICAgIDB4N2EsIDB4YTUsIDB4N2EsIDB4YTIs IDB4MTUsIDB4ZTIsIDB4YzgsIDB4NjEsIDB4MTUsIDB4YzYsIDB4YjcsIDB4ODUsCisrICAgIDB4 NjksIDB4MTEsIDB4YWQsIDB4N2IsIDB4MTQsIDB4ZDIsIDB4ZjYsIDB4MTIsIDB4YTEsIDB4OTUs IDB4NWQsIDB4M2YsCisrICAgIDB4ZTIsIDB4ZDAsIDB4MGMsIDB4MmYKKyt9OworKworK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2Vu dHJvcHlpbnB1dHByW10gPSB7CisrICAgIDB4MGMsIDB4OWMsIDB4YWQsIDB4MDUsIDB4ZWUsIDB4 YWUsIDB4NDgsIDB4MjMsIDB4ODksIDB4NTksIDB4YTEsIDB4OTQsCisrICAgIDB4ZDcsIDB4ZDgs IDB4NzUsIDB4ZDUsIDB4NTQsIDB4OTMsIDB4YzcsIDB4NGEsIDB4ZDksIDB4MjYsIDB4ZGUsIDB4 ZWIsCisrICAgIDB4YmEsIDB4YjAsIDB4N2UsIDB4MzAsIDB4MWQsIDB4NWYsIDB4NjksIDB4NDAs IDB4OWMsIDB4M2IsIDB4MTcsIDB4NTgsCisrICAgIDB4MWQsIDB4MzAsIDB4YjMsIDB4NzgKKyt9 OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhmNywgMHg5Mywg MHhiMCwgMHg2ZCwgMHg3NywgMHg4MywgMHhkNSwgMHgzOCwgMHgwMSwgMHhlMSwgMHg1MiwgMHg0 MCwKKysgICAgMHg3ZSwgMHgzZSwgMHgwYywgMHgyNgorK307CisrCisrX19maXBzX2NvbnN0c2Vn CisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRkaXRp b25hbGlucHV0MltdID0geworKyAgICAweGJjLCAweDRiLCAweDM3LCAweDQ0LCAweDFjLCAweGM1 LCAweDQ1LCAweDVmLCAweDhmLCAweDUxLCAweDYyLCAweDhhLAorKyAgICAweDg1LCAweDMwLCAw eDFkLCAweDdjLCAweGU0LCAweGNmLCAweGY3LCAweDQ0LCAweGNlLCAweDMyLCAweDNlLCAweDU3 LAorKyAgICAweDk1LCAweGE0LCAweDJhLCAweGRmLCAweGZkLCAweDllLCAweDM4LCAweDQxLCAw eGIzLCAweGY2LCAweGM1LCAweGVlLAorKyAgICAweDBjLCAweDRiLCAweGVlLCAweDZlCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKKysgICAgMHhlYywgMHhhZiwgMHhm NiwgMHg0ZiwgMHhiMSwgMHhhMCwgMHg1NCwgMHhiNSwgMHg1YiwgMHhlMywgMHg0NiwgMHhiMCwK KysgICAgMHg3NiwgMHg1YSwgMHg3YywgMHgzZiwgMHg3YiwgMHg5NCwgMHg2OSwgMHgyMSwgMHg1 MSwgMHgwMiwgMHhlNSwgMHg5ZiwKKysgICAgMHgwNCwgMHg1OSwgMHgwMiwgMHg5OCwgMHhjNiwg MHg0MywgMHgyYywgMHhjYywgMHgyNiwgMHg0YywgMHg4NywgMHg2YiwKKysgICAgMHg4ZSwgMHgw YSwgMHg4MywgMHhkZgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4NzQs IDB4NDUsIDB4ZmIsIDB4NTMsIDB4ODQsIDB4OTYsIDB4YmUsIDB4ZmYsIDB4MTUsIDB4Y2MsIDB4 NDEsIDB4OTEsCisrICAgIDB4YjksIDB4YTEsIDB4MjEsIDB4NjgKKyt9OworKworKy8qIEFFUy0x OTIgbm8gZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfbm9fZGZfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4M2MsIDB4N2Qs IDB4YjUsIDB4ZTAsIDB4NTQsIDB4ZDksIDB4NmUsIDB4OGMsIDB4YTksIDB4ODYsIDB4Y2UsIDB4 NGUsCisrICAgIDB4NmIsIDB4YWYsIDB4ZWIsIDB4MmYsIDB4ZTcsIDB4NzUsIDB4ZTAsIDB4OGIs IDB4YTQsIDB4M2IsIDB4MDcsIDB4ZmUsCisrICAgIDB4YmUsIDB4MzMsIDB4NzUsIDB4OTMsIDB4 ODAsIDB4MjcsIDB4YjUsIDB4MjksIDB4NDcsIDB4OGIsIDB4YzcsIDB4MjgsCisrICAgIDB4OTQs IDB4YzMsIDB4NTksIDB4NjMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX25vbmNlW10gPSB7CisrICAgIDB4NDMsIDB4ZjEs IDB4N2QsIDB4YjgsIDB4YzMsIDB4ZmUsIDB4ZDAsIDB4MjMsIDB4NmIsIDB4YjQsIDB4OTIsIDB4 ZGIsCisrICAgIDB4MjksIDB4ZmQsIDB4NDUsIDB4NzEKKyt9OworKworK19fZmlwc19jb25zdHNl ZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0geworKyAgICAweDlmLCAweDI0LCAweDI5LCAweDk5LCAweDllLCAw eDAxLCAweGFiLCAweGU5LCAweDE5LCAweGQ4LCAweDIzLCAweDA4LAorKyAgICAweGI3LCAweGQ2 LCAweDdlLCAweDhjLCAweGMwLCAweDllLCAweDdmLCAweDZlLCAweDViLCAweDMzLCAweDIwLCAw eDk2LAorKyAgICAweDBiLCAweDIzLCAweDJjLCAweGE1LCAweDZhLCAweGY4LCAweDFiLCAweDA0 LCAweDI2LCAweGRiLCAweDJlLCAweDJiLAorKyAgICAweDNiLCAweDg4LCAweGNlLCAweDM1Cisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHg5NCwgMHhlOSwgMHg3YywgMHgz ZCwgMHhhNywgMHhkYiwgMHg2MCwgMHg4MywgMHgxZiwgMHg5OCwgMHgzZiwgMHgwYiwKKysgICAg MHg4OCwgMHg1OSwgMHg1NywgMHg1MSwgMHg4OCwgMHg5ZiwgMHg3NiwgMHg0OSwgMHg5ZiwgMHhh NiwgMHhkYSwgMHg3MSwKKysgICAgMHgxZCwgMHgwZCwgMHg0NywgMHgxNiwgMHg2MywgMHhjNSwg MHg2OCwgMHhlNCwgMHg1ZCwgMHgzOSwgMHg2OSwgMHhiMywKKysgICAgMHgzZSwgMHhiZSwgMHhk NCwgMHg4ZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweGY5LCAweGQ3 LCAweGFkLCAweDY5LCAweGFiLCAweDhmLCAweDIzLCAweDU2LCAweDcwLCAweDE3LCAweDRmLCAw eDJhLAorKyAgICAweDQ1LCAweGU3LCAweDRhLCAweGM1CisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9lbnRyb3B5 aW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHhhNiwgMHg3MSwgMHg2YSwgMHgzZCwgMHhiYSwgMHhk MSwgMHhlOCwgMHg2NiwgMHhhNiwgMHhlZiwgMHhiMiwgMHgwZSwKKysgICAgMHhhOCwgMHg5Yywg MHhhYSwgMHg0ZSwgMHhhZiwgMHgxNywgMHg4OSwgMHg1MCwgMHgwMCwgMHhkYSwgMHhhMSwgMHhi MSwKKysgICAgMHgwYiwgMHhhNCwgMHhkOSwgMHgzNSwgMHg4OSwgMHhjOCwgMHhlNSwgMHhiMCwg MHhkOSwgMHhiNywgMHhjNCwgMHgzMywKKysgICAgMHg5YiwgMHhjYiwgMHg3ZSwgMHg3NQorK307 CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4MjcsIDB4MjEs IDB4ZmMsIDB4YzIsIDB4YmQsIDB4ZjMsIDB4M2MsIDB4Y2UsIDB4YzMsIDB4Y2EsIDB4YzEsIDB4 MDEsCisrICAgIDB4ZTAsIDB4ZmYsIDB4OTMsIDB4MTIsIDB4N2QsIDB4NTQsIDB4NDIsIDB4ZTMs IDB4OWYsIDB4MDMsIDB4ZGYsIDB4MjcsCisrICAgIDB4MDQsIDB4MDcsIDB4M2MsIDB4NTMsIDB4 N2YsIDB4YTgsIDB4NjYsIDB4YzgsIDB4OTcsIDB4NGIsIDB4NjEsIDB4NDAsCisrICAgIDB4NWQs IDB4N2EsIDB4MjUsIDB4NzkKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAg MHgyZCwgMHg4ZSwgMHgxNiwgMHg1ZCwgMHgwYiwgMHg5ZiwgMHhlYiwgMHhhYSwgMHhkNiwgMHhl YywgMHgyOCwgMHg3MSwKKysgICAgMHg3YywgMHgwYiwgMHhjMSwgMHgxZCwgMHhkNCwgMHg0NCwg MHgxOSwgMHg0NywgMHhmZCwgMHgxZCwgMHg3YywgMHhlNSwKKysgICAgMHhmMywgMHgyNywgMHhl MSwgMHhiNiwgMHg3MiwgMHgwYSwgMHhlMCwgMHhlYywgMHgwZSwgMHhjZCwgMHhlZiwgMHgxYSwK KysgICAgMHg5MSwgMHg2YSwgMHhlMywgMHg1ZgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcmV0dXJuZWRiaXRzW10gPSB7 CisrICAgIDB4ZTUsIDB4ZGEsIDB4YjgsIDB4ZTAsIDB4NjMsIDB4NTksIDB4NWEsIDB4Y2MsIDB4 M2QsIDB4ZGMsIDB4OWYsIDB4ZTgsCisrICAgIDB4NjYsIDB4NjcsIDB4MmMsIDB4OTIKKyt9Owor KworKy8qIEFFUy0yNTYgbm8gZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPSB7CisrICAg IDB4MTUsIDB4YzcsIDB4NWQsIDB4Y2IsIDB4NDEsIDB4NGIsIDB4MTYsIDB4MDEsIDB4M2EsIDB4 ZDEsIDB4NDQsIDB4ZTgsCisrICAgIDB4MjIsIDB4MzIsIDB4YzYsIDB4OWMsIDB4M2YsIDB4ZTcs IDB4NDMsIDB4ZjUsIDB4OWEsIDB4ZDMsIDB4ZWEsIDB4ZjIsCisrICAgIDB4ZDcsIDB4NGUsIDB4 NmUsIDB4NmEsIDB4NTUsIDB4NzMsIDB4NDAsIDB4ZWYsIDB4ODksIDB4YWQsIDB4MGQsIDB4MDMs CisrICAgIDB4OTYsIDB4N2UsIDB4NzgsIDB4ODEsIDB4MmYsIDB4OTEsIDB4MWIsIDB4NDQsIDB4 YjAsIDB4MDIsIDB4YmEsIDB4MWMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX25vbmNlW10gPSB7CisrICAgIDB4ZGMs IDB4ZTQsIDB4ZDQsIDB4MjcsIDB4N2EsIDB4OTAsIDB4ZDcsIDB4OTksIDB4NDMsIDB4YTEsIDB4 M2MsIDB4MzAsCisrICAgIDB4Y2MsIDB4NGIsIDB4ZWUsIDB4MmUKKyt9OworKworK19fZmlwc19j b25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3By X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweGUzLCAweGU2LCAweGI5LCAweDEx LCAweGU0LCAweDdhLCAweGE0LCAweDQwLCAweDZiLCAweGY4LCAweDczLCAweGY3LAorKyAgICAw eDdlLCAweGVjLCAweGM3LCAweGI5LCAweDk3LCAweGJmLCAweGY4LCAweDI1LCAweDdiLCAweGJl LCAweDExLCAweDliLAorKyAgICAweDViLCAweDZhLCAweDBjLCAweDJlLCAweDJiLCAweDAxLCAw eDUxLCAweGNkLCAweDQxLCAweDRiLCAweDZiLCAweGFjLAorKyAgICAweDMxLCAweGE4LCAweDBi LCAweGY3LCAweGU2LCAweDU5LCAweDQyLCAweGI4LCAweDAzLCAweDBjLCAweGY4LCAweDA2Cisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHg2YSwgMHg5Ziwg MHgwMCwgMHg5MSwgMHhhZSwgMHhmZSwgMHhjZiwgMHg4NCwgMHg5OSwgMHhjZSwgMHhiMSwgMHg0 MCwKKysgICAgMHg2ZCwgMHg1ZCwgMHgzMywgMHgyOCwgMHg4NCwgMHhmNCwgMHg4YywgMHg2Mywg MHg0YywgMHg3ZSwgMHhiZCwgMHgyYywKKysgICAgMHg4MCwgMHg3NiwgMHhlZSwgMHg1YSwgMHhh YSwgMHgxNSwgMHgwNywgMHgzMSwgMHhkOCwgMHhiYiwgMHg4YywgMHg2OSwKKysgICAgMHg5ZCwg MHg5ZCwgMHhiYywgMHg3ZSwgMHg0OSwgMHhhZSwgMHhlYywgMHgzOSwgMHg2YiwgMHhkMSwgMHgx ZiwgMHg3ZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAgMHhmMywgMHhi OSwgMHg3NSwgMHg5YywgMHhiZCwgMHg4OCwgMHhlYSwgMHhhMiwgMHg1MCwgMHhhZCwgMHhkNiwg MHgxNiwKKysgICAgMHgxYSwgMHgxMiwgMHgzYywgMHg4NiwgMHg2OCwgMHhhZiwgMHg2ZiwgMHhi ZSwgMHgxOSwgMHhmMiwgMHhlZSwgMHhjYywKKysgICAgMHhhNSwgMHg3MCwgMHg4NCwgMHg1Mywg MHg1MCwgMHhjYiwgMHg5ZiwgMHgxNCwgMHhhOSwgMHhlNSwgMHhlZSwgMHhiOSwKKysgICAgMHg0 OCwgMHg0NSwgMHg0MCwgMHhlMiwgMHhjNywgMHhjOSwgMHg5YSwgMHg3NCwgMHhmZiwgMHg4Yywg MHg5OSwgMHgxZgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAg ICAweDJlLCAweGYyLCAweDQ1LCAweDRjLCAweDYyLCAweDJlLCAweDBhLCAweGI5LCAweDZiLCAw eGEyLCAweGZkLCAweDU2LAorKyAgICAweDc5LCAweDYwLCAweDkzLCAweGNmCisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9u b19kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4YWYsIDB4NjksIDB4MjAsIDB4 ZTksIDB4M2IsIDB4MzcsIDB4OWQsIDB4M2YsIDB4YjQsIDB4ODAsIDB4MDIsIDB4N2EsCisrICAg IDB4MjUsIDB4N2QsIDB4YjgsIDB4ZGUsIDB4NzEsIDB4YzUsIDB4MDYsIDB4MGMsIDB4YjQsIDB4 ZTIsIDB4OGYsIDB4MzUsCisrICAgIDB4ZDgsIDB4MTQsIDB4MGQsIDB4N2YsIDB4NzYsIDB4NjMs IDB4NGUsIDB4YjUsIDB4ZWUsIDB4ZTksIDB4NmYsIDB4MzQsCisrICAgIDB4YzcsIDB4NWYsIDB4 NTYsIDB4MTQsIDB4NGEsIDB4ZTgsIDB4NzMsIDB4OTUsIDB4NWIsIDB4MWMsIDB4YjksIDB4Y2IK Kyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0geworKyAgICAweGU1LCAweGIw LCAweDJlLCAweDdlLCAweDUyLCAweDMwLCAweGUzLCAweDYzLCAweDgyLCAweGI2LCAweDQ0LCAw eGQzLAorKyAgICAweDI1LCAweDE5LCAweDA1LCAweDI0LCAweDlhLCAweDlmLCAweDVmLCAweDI3 LCAweDZhLCAweDI5LCAweGFiLCAweGZhLAorKyAgICAweDA3LCAweGEyLCAweDQyLCAweDBmLCAw eGM1LCAweGE4LCAweDk0LCAweDdjLCAweDE3LCAweDdiLCAweDg1LCAweDgzLAorKyAgICAweDBj LCAweDI1LCAweDBlLCAweDYzLCAweDBiLCAweGU5LCAweDEyLCAweDYwLCAweGNkLCAweGVmLCAw eDgwLCAweDBmCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg1ZSwgMHhm MiwgMHgyNiwgMHhlZiwgMHg5ZiwgMHg1OCwgMHg1ZCwgMHhkNSwgMHg0YSwgMHgxMCwgMHhmZSwg MHhhNywKKysgICAgMHgyZCwgMHg1ZiwgMHg0YSwgMHg0NgorK307CisrCisrLyogQUVTLTI1NiBu byBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHhmYiwgMHhjZiwgMHgx YiwgMHg2MSwgMHgxNiwgMHg4OSwgMHg3OCwgMHgyMywgMHhmNSwgMHhkOCwgMHg5NiwgMHhlMywK KysgICAgMHg0ZSwgMHg2NCwgMHgwYiwgMHgyOSwgMHg5YSwgMHgzZiwgMHhmOCwgMHhhNSwgMHhl ZCwgMHhmMiwgMHhmZSwgMHhkYiwKKysgICAgMHgxNiwgMHhjYSwgMHg3ZiwgMHgxMCwgMHhmYSwg MHg1ZSwgMHgxOCwgMHg3NiwgMHgyYywgMHg2MywgMHg1ZSwgMHg5NiwKKysgICAgMHhjZiwgMHhi MywgMHhkNiwgMHhmYywgMHhhZiwgMHg5OSwgMHgzOSwgMHgyOCwgMHg5YywgMHg2MSwgMHhlOCwg MHhiMworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfbm9fZGZfbm9uY2VbXSA9IHsKKysgICAgMHgxMiwgMHg5NiwgMHhmMCwgMHg1Miwg MHhmMywgMHg4ZCwgMHg4MSwgMHhjZiwgMHhkZSwgMHg4NiwgMHhmMiwgMHg5OSwKKysgICAgMHg0 MywgMHg5NiwgMHhiOSwgMHhmMAorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcGVyc29uYWxpemF0aW9uc3RyaW5n W10gPSB7CisrICAgIDB4NjMsIDB4MGQsIDB4NzgsIDB4ZjUsIDB4OTAsIDB4OGUsIDB4MzIsIDB4 NDcsIDB4YjAsIDB4NGQsIDB4MzcsIDB4NjAsCisrICAgIDB4MDksIDB4OTYsIDB4YmMsIDB4YmYs IDB4OTcsIDB4N2EsIDB4NjIsIDB4MTQsIDB4NDUsIDB4YmQsIDB4OGQsIDB4Y2MsCisrICAgIDB4 NjksIDB4ZmIsIDB4MDMsIDB4ZTEsIDB4ODAsIDB4MWMsIDB4YzcsIDB4ZTIsIDB4MmEsIDB4Zjks IDB4MzcsIDB4M2YsCisrICAgIDB4NjYsIDB4NGQsIDB4NjIsIDB4ZDksIDB4MTAsIDB4ZTAsIDB4 YWQsIDB4YzgsIDB4OWEsIDB4ZjAsIDB4YTgsIDB4NmQKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxpbnB1 dFtdID0geworKyAgICAweDM2LCAweGM2LCAweDEzLCAweDYwLCAweGJiLCAweDE0LCAweGFkLCAw eDIyLCAweGIwLCAweDM4LCAweGFjLCAweGE2LAorKyAgICAweDE4LCAweDE2LCAweDkzLCAweDI1 LCAweDg2LCAweGI3LCAweGRjLCAweGRjLCAweDM2LCAweDk4LCAweDJiLCAweGY5LAorKyAgICAw eDY4LCAweDMzLCAweGQzLCAweGM2LCAweGZmLCAweGNlLCAweDhkLCAweDE1LCAweDU5LCAweDgy LCAweDc2LCAweGVkLAorKyAgICAweDZmLCAweDhkLCAweDQ5LCAweDc0LCAweDJmLCAweGRhLCAw eGRjLCAweDFmLCAweDE3LCAweGQwLCAweGRlLCAweDE3CisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9pbnRfcmV0dXJuZWRi aXRzW10gPSB7CisrICAgIDB4MTYsIDB4MmYsIDB4OGUsIDB4M2YsIDB4MjEsIDB4N2EsIDB4MWMs IDB4MjAsIDB4NTYsIDB4ZDEsIDB4OTIsIDB4ZjYsCisrICAgIDB4ZDIsIDB4MjUsIDB4NzUsIDB4 MGUKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0geworKyAgICAweDkxLCAw eDc5LCAweDc2LCAweGVlLCAweGUwLCAweGNmLCAweDllLCAweGMyLCAweGQ1LCAweGQ0LCAweDIz LCAweDliLAorKyAgICAweDEyLCAweDhjLCAweDdlLCAweDBhLCAweGI3LCAweGQyLCAweDhiLCAw eGQ2LCAweDdjLCAweGEzLCAweGM2LCAweGU1LAorKyAgICAweDBlLCAweGFhLCAweGM3LCAweDZi LCAweGFlLCAweDBkLCAweGZhLCAweDUzLCAweDA2LCAweDc5LCAweGExLCAweGVkLAorKyAgICAw eDRkLCAweDZhLCAweDBlLCAweGQ4LCAweDlkLCAweGJlLCAweDFiLCAweDMxLCAweDkzLCAweDdi LCAweGVjLCAweGZiCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsK KysgICAgMHhkMiwgMHg0NiwgMHg1MCwgMHgyMiwgMHgxMCwgMHgxNCwgMHg2MywgMHhmNywgMHhl YSwgMHgwZiwgMHhiOSwgMHg3ZSwKKysgICAgMHgwZCwgMHhlMSwgMHg5NCwgMHgwNywgMHhhZiwg MHgwOSwgMHg0NCwgMHgzMSwgMHhlYSwgMHg2NCwgMHhhNCwgMHgxOCwKKysgICAgMHg1YiwgMHhm OSwgMHhkOCwgMHhjMiwgMHhmYSwgMHgwMywgMHg0NywgMHhjNSwgMHgzOSwgMHg0MywgMHhkNSwg MHgzYiwKKysgICAgMHg2MiwgMHg4NiwgMHg2NCwgMHhlYSwgMHgyYywgMHg3MywgMHg4YywgMHhh ZSwgMHg5ZCwgMHg5OCwgMHg5OCwgMHgyOQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0g eworKyAgICAweDhjLCAweGFiLCAweDE4LCAweGY4LCAweGMzLCAweGVjLCAweDE4LCAweDVjLCAw eGIzLCAweDFlLCAweDlkLCAweGJlLAorKyAgICAweDNmLCAweDAzLCAweGI0LCAweDAwLCAweDk4 LCAweDlkLCAweGFlLCAweGViLCAweGY0LCAweDk0LCAweGY4LCAweDQyLAorKyAgICAweDhmLCAw eGUzLCAweDM5LCAweDA3LCAweGUxLCAweGM5LCAweGFkLCAweDBiLCAweDFmLCAweGVkLCAweGMw LCAweGJhLAorKyAgICAweGY2LCAweGQxLCAweGVjLCAweDI3LCAweDg2LCAweDdiLCAweGQ2LCAw eDU1LCAweDliLCAweDYwLCAweGE1LCAweGM2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9yZXR1cm5lZGJpdHNbXSA9IHsK KysgICAgMHhlZiwgMHhkMiwgMHhkOCwgMHg1YywgMHhkYywgMHg2MiwgMHgyNSwgMHg5ZiwgMHhh YSwgMHgxZSwgMHgyYywgMHg2NywKKysgICAgMHhmNiwgMHgwMiwgMHgzMiwgMHhlMgorK307Cisr CisrLyogU0hBLTEgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4ZDIsIDB4MzYsIDB4YTUs IDB4MjcsIDB4MzEsIDB4NzMsIDB4ZGQsIDB4MTEsIDB4NGYsIDB4OTMsIDB4YmQsIDB4ZTIsCisr ICAgIDB4MzEsIDB4YTUsIDB4OTEsIDB4MTMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX25vbmNlW10gPSB7CisrICAgIDB4YjUsIDB4 YjMsIDB4NjAsIDB4ZWYsIDB4ZjcsIDB4NjMsIDB4MzEsIDB4ZjMKKyt9OworKworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0geworKyAgICAweGQ0LCAweGJiLCAweDAyLCAweDEwLCAweGIyLCAweDcxLCAw eGRiLCAweDgxLCAweGQ2LCAweGYwLCAweDQyLCAweDYwLAorKyAgICAweGRhLCAweGVhLCAweDc3 LCAweDUyCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHg0ZCwgMHhkMiwgMHg2Yywg MHg4NywgMHhmYiwgMHgyYywgMHg0ZiwgMHhhNiwgMHg4ZCwgMHgxNiwgMHg2MywgMHgyMiwKKysg ICAgMHg2YSwgMHg1MSwgMHhlMywgMHhmOAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAg MHhjOSwgMHg4MywgMHg5ZSwgMHgxNiwgMHhmNiwgMHgxYywgMHgwZiwgMHhiMiwgMHhlYywgMHg2 MCwgMHgzMSwgMHhhOSwKKysgICAgMHhjYiwgMHhhOSwgMHgzNiwgMHg3YQorK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfaW50X3JldHVy bmVkYml0c1tdID0geworKyAgICAweGE4LCAweDEzLCAweDRmLCAweGY0LCAweDMxLCAweDAyLCAw eDQ0LCAweGUzLCAweGQzLCAweDNkLCAweDYxLCAweDllLAorKyAgICAweGU1LCAweGM2LCAweDNl LCAweDg5LCAweGI1LCAweDliLCAweDBmLCAweDM1CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7 CisrICAgIDB4ZjksIDB4ZTgsIDB4ZDIsIDB4NzIsIDB4MTMsIDB4MzQsIDB4OTUsIDB4NmYsIDB4 MTUsIDB4NDksIDB4NDcsIDB4OTksCisrICAgIDB4MTYsIDB4MDMsIDB4MTksIDB4NDcKKyt9Owor KworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2Vu dHJvcHlpbnB1dHByMltdID0geworKyAgICAweDRlLCAweDhjLCAweDQ5LCAweDliLCAweDRhLCAw eDVjLCAweDliLCAweDljLCAweDNhLCAweGVlLCAweGZiLCAweGQyLAorKyAgICAweGFlLCAweGNk LCAweDhjLCAweGM0CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMV9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg1MCwgMHhiNCwgMHhi NCwgMHhjZCwgMHg2OCwgMHg1NywgMHhmYywgMHgyZSwgMHhjMSwgMHg1MiwgMHhjYywgMHhmNiwK KysgICAgMHg2OCwgMHhhNCwgMHg4MSwgMHhlZCwgMHg3ZSwgMHhlNCwgMHgxZCwgMHg4NworK307 CisrCisrLyogU0hBLTEgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTFfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4YTksIDB4NDcsIDB4 MWIsIDB4MjksIDB4MmQsIDB4MWMsIDB4MDUsIDB4ZGYsIDB4NzYsIDB4ZDAsIDB4NjIsIDB4Zjks CisrICAgIDB4ZTIsIDB4N2YsIDB4NGMsIDB4N2IKKyt9OworKworK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX25vbmNlW10gPSB7CisrICAgIDB4NTMsIDB4 MjMsIDB4MjQsIDB4ZTMsIDB4ZWMsIDB4MGMsIDB4NTQsIDB4MTQKKyt9OworKworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0geworKyAgICAweDdhLCAweDg3LCAweGExLCAweGFjLCAweDFjLCAweGZkLCAweGFi LCAweGFlLCAweGY3LCAweGQ2LCAweGZiLCAweDc2LAorKyAgICAweDI4LCAweGVjLCAweDZkLCAw eGNhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHhmYywgMHg5MiwgMHgzNSwgMHhkNiwg MHg3ZSwgMHhiNywgMHgyNCwgMHg2NSwgMHhmZCwgMHgxMiwgMHgyNywgMHgzNSwKKysgICAgMHhj MCwgMHg3MiwgMHhjYSwgMHgyOAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTFfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweDU3LCAw eDg4LCAweDgyLCAweGU1LCAweDI1LCAweGE1LCAweDJjLCAweDRhLCAweDA2LCAweDIwLCAweDZj LCAweDcyLAorKyAgICAweDU1LCAweDYxLCAweGRkLCAweDkwLCAweDcxLCAweDlmLCAweDk1LCAw eGVhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMV9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHg2OSwgMHhhNSwgMHg0MCwgMHg2 MiwgMHg5OCwgMHg0NywgMHg1NiwgMHg3MywgMHg0YSwgMHg4ZiwgMHg2MCwgMHg5NiwKKysgICAg MHhkNiwgMHg5OSwgMHgyNywgMHhlZAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAg IDB4ZTUsIDB4NDAsIDB4NGUsIDB4YmQsIDB4NTAsIDB4MDAsIDB4ZjUsIDB4MTUsIDB4YTYsIDB4 ZWUsIDB4NDUsIDB4ZGEsCisrICAgIDB4ODQsIDB4M2QsIDB4ZDQsIDB4YzAKKyt9OworKworK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxp bnB1dDJbXSA9IHsKKysgICAgMHgxMSwgMHg1MSwgMHgxNCwgMHhmMCwgMHgwOSwgMHgxYiwgMHg0 ZSwgMHg1NiwgMHgwZCwgMHhlOSwgMHhmNiwgMHgxZSwKKysgICAgMHg1MiwgMHg2NSwgMHhjZCwg MHg5NgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTFfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4YTEsIDB4OWMsIDB4OTQsIDB4NmUsIDB4 MjksIDB4ZTEsIDB4MzMsIDB4MGQsIDB4MzIsIDB4ZDYsIDB4YWEsIDB4Y2UsCisrICAgIDB4NzEs IDB4M2YsIDB4NTIsIDB4NzIsIDB4OGIsIDB4NDIsIDB4YTgsIDB4ZDcKKyt9OworKworKy8qIFNI QS0yMjQgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHgxMiwgMHg2OSwgMHgzMiwgMHg0 ZiwgMHg4MywgMHhhNiwgMHhmNSwgMHgxNCwgMHhlMywgMHg0OSwgMHgzZSwgMHg3NSwKKysgICAg MHgzZSwgMHhkZSwgMHhhZCwgMHhhMSwgMHgyOSwgMHhjMywgMHhmMywgMHgxOSwgMHgyMCwgMHhi NSwgMHg0YywgMHhkOQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTIyNF9wcl9ub25jZVtdID0geworKyAgICAweDZhLCAweDc4LCAweGQwLCAw eGViLCAweGJiLCAweDVhLCAweGYwLCAweGVlLCAweGU4LCAweGMzLCAweGJhLCAweDcxCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3By X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweGQ1LCAweGI4LCAweGI2LCAweGJj LCAweGMxLCAweDViLCAweDYwLCAweDMxLCAweDNjLCAweGY1LCAweGU1LCAweGMwLAorKyAgICAw eDhlLCAweDUyLCAweDdhLCAweGJkLCAweGVhLCAweDQ3LCAweGE5LCAweDVmLCAweDhmLCAweGY5 LCAweDhiLCAweGFlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDFmLCAweDU1 LCAweGVjLCAweGFlLCAweDE2LCAweDEyLCAweDg0LCAweGJhLCAweDg0LCAweDE2LCAweDE5LCAw eDg4LAorKyAgICAweDhlLCAweGI4LCAweDMzLCAweDI1LCAweDU0LCAweGZmLCAweGNhLCAweDc5 LCAweGFmLCAweDA3LCAweDI1LCAweDUwCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByW10gPSB7CisrICAg IDB4OTIsIDB4YTMsIDB4MzIsIDB4YTgsIDB4OWEsIDB4MGEsIDB4NTgsIDB4N2MsIDB4MWQsIDB4 NWEsIDB4N2UsIDB4ZTEsCisrICAgIDB4YjIsIDB4NzMsIDB4YWIsIDB4MGUsIDB4MTYsIDB4Nzks IDB4MjMsIDB4ZDMsIDB4MjksIDB4ODksIDB4ODEsIDB4ZTEKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfaW50X3JldHVybmVkYml0 c1tdID0geworKyAgICAweGYzLCAweDM4LCAweDkxLCAweDQwLCAweDM3LCAweDdhLCAweDUxLCAw eDcyLCAweDQyLCAweDc0LCAweDc4LCAweDBhLAorKyAgICAweDY5LCAweGZkLCAweGE2LCAweDQ0 LCAweDQzLCAweDQ1LCAweDZjLCAweDBjLCAweDVhLCAweDE5LCAweGZmLCAweGYxLAorKyAgICAw eDU0LCAweDYwLCAweGVlLCAweDZhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAg MHg3NSwgMHhmMywgMHgwNCwgMHgyNSwgMHhkZCwgMHgzNiwgMHhhOCwgMHgzNywgMHg0NiwgMHhh ZSwgMHgwYywgMHg1MiwKKysgICAgMHgwNSwgMHg3OSwgMHg0YywgMHgyNiwgMHhkYiwgMHhlOSwg MHg3MSwgMHgxNiwgMHg0YywgMHgwYSwgMHhmMiwgMHg2MAorK307CisrCisrX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcjJb XSA9IHsKKysgICAgMHhlYSwgMHhjNSwgMHgwMywgMHgwYSwgMHg0ZiwgMHhiMCwgMHgzOCwgMHg4 ZCwgMHgyMywgMHhkNCwgMHhjOCwgMHg3NywKKysgICAgMHhlMiwgMHg2ZCwgMHg5YywgMHgwYiwg MHg0NCwgMHhmNywgMHgyZCwgMHg1YiwgMHhiZiwgMHg1ZCwgMHgyYSwgMHgxMQorK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9yZXR1 cm5lZGJpdHNbXSA9IHsKKysgICAgMHg2MCwgMHg1MCwgMHgyYiwgMHhlNywgMHg4NiwgMHhkOCwg MHgyNiwgMHg3MywgMHhlMywgMHgxZCwgMHg5NSwgMHgyMCwKKysgICAgMHhiMywgMHgyYywgMHgz MiwgMHgxYywgMHhmNSwgMHhjZSwgMHg1NywgMHhhNiwgMHg2NywgMHgyYiwgMHhkYywgMHg0ZSwK KysgICAgMHhkZCwgMHgxMSwgMHg0YywgMHhjNAorK307CisrCisrLyogU0hBLTIyNCBObyBQUiAg Ki8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2Vu dHJvcHlpbnB1dFtdID0geworKyAgICAweGIyLCAweDFjLCAweDc3LCAweDRkLCAweGY2LCAweGQz LCAweGI2LCAweDQwLCAweGI3LCAweDMwLCAweDNlLCAweDI5LAorKyAgICAweGIwLCAweDg1LCAw eDFjLCAweGJlLCAweDRhLCAweGVhLCAweDZiLCAweDVhLCAweGI1LCAweDhhLCAweDk3LCAweGVi CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MjI0X25vbmNlW10gPSB7CisrICAgIDB4NDIsIDB4MDIsIDB4MGEsIDB4MWMsIDB4OTgsIDB4OWEs IDB4NzcsIDB4OWUsIDB4OWYsIDB4ODAsIDB4YmEsIDB4ZTAKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPSB7CisrICAgIDB4OTgsIDB4YjgsIDB4MDQsIDB4NDEsIDB4ZmMsIDB4YzEsIDB4NWQs IDB4YzUsIDB4ZTksIDB4YjksIDB4MDgsIDB4ZGEsCisrICAgIDB4ZjksIDB4ZmEsIDB4MGQsIDB4 OTAsIDB4Y2UsIDB4ZGYsIDB4MWQsIDB4MTAsIDB4YTksIDB4OGQsIDB4NTAsIDB4MGMKKyt9Owor KworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfYWRk aXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4OWEsIDB4OGQsIDB4MzksIDB4NDksIDB4NDIsIDB4 ZDUsIDB4MGIsIDB4YWUsIDB4ZTEsIDB4YWYsIDB4YjcsIDB4MDAsCisrICAgIDB4MDIsIDB4ZmEs IDB4OTYsIDB4YjEsIDB4YTUsIDB4MWQsIDB4MmQsIDB4MjUsIDB4NzgsIDB4ZWUsIDB4ODMsIDB4 M2YKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyMjRfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweGU0LCAweGY1LCAweDUzLCAweDc5 LCAweDVhLCAweDk3LCAweDU4LCAweDA2LCAweDA4LCAweGJhLCAweDdiLCAweGZhLAorKyAgICAw eGYwLCAweDgzLCAweDA1LCAweDhjLCAweDIyLCAweGMwLCAweGM5LCAweGRiLCAweDE1LCAweGU3 LCAweGRlLCAweDIwLAorKyAgICAweDU1LCAweDIyLCAweDlhLCAweGFkCisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2VudHJvcHlpbnB1 dHJlc2VlZFtdID0geworKyAgICAweDY3LCAweDA5LCAweDQ4LCAweGFhLCAweDA3LCAweDE2LCAw eDk5LCAweDg5LCAweDdmLCAweDZkLCAweGEwLCAweGU1LAorKyAgICAweDhmLCAweGRmLCAweGJj LCAweGRiLCAweGZlLCAweGU1LCAweDZjLCAweDdhLCAweDk1LCAweDRhLCAweDY2LCAweDE3Cisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0 X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0geworKyAgICAweDBmLCAweDRiLCAweDFjLCAweDZm LCAweGI3LCAweGUzLCAweDQ3LCAweGU1LCAweDVkLCAweDdkLCAweDM4LCAweGQ2LAorKyAgICAw eDI4LCAweDliLCAweGViLCAweDU1LCAweDYzLCAweDA5LCAweDNlLCAweDdjLCAweDU2LCAweGVh LCAweGY4LCAweDE5CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHgyZCwgMHgyNiwg MHg3YywgMHgzNywgMHhlNCwgMHg3YSwgMHgyOCwgMHg1ZSwgMHg1YSwgMHgzYywgMHhhZiwgMHgz ZCwKKysgICAgMHg1YSwgMHg4ZSwgMHg1NSwgMHhhMiwgMHgxYSwgMHg2ZSwgMHhjMCwgMHhlNSwg MHhmNiwgMHgyMSwgMHhkMywgMHhmNgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg0ZCwg MHg4MywgMHgzNSwgMHhkZiwgMHg2NywgMHhhOSwgMHhmYywgMHgxNywgMHhkYSwgMHg3MCwgMHhj YywgMHg4YiwKKysgICAgMHg3ZiwgMHg3NywgMHhhZSwgMHhhMiwgMHg1ZiwgMHhiOSwgMHg3ZSwg MHg3NCwgMHg0YywgMHgyNiwgMHhjMSwgMHg3YSwKKysgICAgMHgzYiwgMHhhNywgMHg1YywgMHg5 MworK307CisrCisrLyogU0hBLTI1NiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweGNl LCAweDQ5LCAweDAwLCAweDdhLCAweDU2LCAweGUzLCAweDY3LCAweDhmLCAweGUxLCAweGI2LCAw eGE3LCAweGQ0LAorKyAgICAweDRmLCAweDA4LCAweDdhLCAweDFiLCAweDAxLCAweGY0LCAweGZh LCAweDZiLCAweGVmLCAweGI3LCAweGU1LCAweGViLAorKyAgICAweDA3LCAweDNkLCAweDExLCAw eDBkLCAweGM4LCAweGVhLCAweDJiLCAweGZlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX25vbmNlW10gPSB7CisrICAgIDB4NzMs IDB4NDEsIDB4YzgsIDB4OTIsIDB4OTQsIDB4ZTIsIDB4YzUsIDB4NWYsIDB4OTMsIDB4ZmQsIDB4 MzksIDB4NWQsCisrICAgIDB4MmIsIDB4OTEsIDB4NGQsIDB4MzgKKyt9OworKworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfcGVyc29uYWxpemF0 aW9uc3RyaW5nW10gPSB7CisrICAgIDB4NTAsIDB4NmQsIDB4MDEsIDB4MDEsIDB4MDcsIDB4NWEs IDB4ODAsIDB4MzUsIDB4N2EsIDB4NTYsIDB4MWEsIDB4NTYsCisrICAgIDB4MmYsIDB4OWEsIDB4 MGIsIDB4MzUsIDB4YjIsIDB4YjEsIDB4YzksIDB4ZTUsIDB4Y2EsIDB4NjksIDB4NjEsIDB4NDgs CisrICAgIDB4ZmYsIDB4ZmIsIDB4MGYsIDB4ZDksIDB4NGIsIDB4NzksIDB4MWQsIDB4YmEKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZf cHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4MjAsIDB4YjgsIDB4ZGYsIDB4NDQsIDB4 NzcsIDB4NWEsIDB4YjgsIDB4ZDMsIDB4YmYsIDB4ZjYsIDB4Y2YsIDB4YWMsCisrICAgIDB4NWUs IDB4YTYsIDB4OTYsIDB4NjIsIDB4NzMsIDB4NDQsIDB4NDAsIDB4NGEsIDB4MzAsIDB4ZmIsIDB4 MzgsIDB4YTUsCisrICAgIDB4N2IsIDB4MGQsIDB4ZTQsIDB4MGQsIDB4YzYsIDB4ZTQsIDB4OWEs IDB4MWYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyNTZfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAgMHgwNCwgMHhjNCwgMHg2NSwg MHhmNCwgMHhkMywgMHhiZiwgMHg4MywgMHg0YiwgMHhhYiwgMHhjOCwgMHg0MSwgMHhhOCwKKysg ICAgMHhjMiwgMHhlMCwgMHg0NCwgMHg2MywgMHg3NywgMHg0YywgMHg2ZiwgMHg2YywgMHg0OSwg MHg0NiwgMHhmZiwgMHg5NCwKKysgICAgMHgxNywgMHhlYSwgMHhlNiwgMHgxYSwgMHg5ZCwgMHg1 ZSwgMHg2NiwgMHg3OAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTI1Nl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4MDcsIDB4 NGQsIDB4YWMsIDB4OWIsIDB4ODYsIDB4Y2EsIDB4NGEsIDB4YWEsIDB4NmUsIDB4N2EsIDB4MDMs IDB4YTIsCisrICAgIDB4NWQsIDB4MTAsIDB4ZWEsIDB4MGIsIDB4ZjksIDB4ODMsIDB4Y2MsIDB4 ZDEsIDB4ZmMsIDB4ZTIsIDB4MDcsIDB4YzcsCisrICAgIDB4MDYsIDB4MzQsIDB4NjAsIDB4NmYs IDB4ODMsIDB4OTQsIDB4OTksIDB4NzYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0MltdID0geworKyAg ICAweDg5LCAweDRlLCAweDQ1LCAweDhjLCAweDExLCAweGY5LCAweGJjLCAweDViLCAweGFjLCAw eDc0LCAweDhiLCAweDRiLAorKyAgICAweDVmLCAweGY3LCAweDE5LCAweGYzLCAweGY1LCAweDI0 LCAweDU0LCAweDE0LCAweGQxLCAweDE1LCAweGIxLCAweDQzLAorKyAgICAweDEyLCAweGE0LCAw eDVmLCAweGQ0LCAweGVjLCAweGZjLCAweGNkLCAweDA5CisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByMltd ID0geworKyAgICAweDBlLCAweGViLCAweDFmLCAweGQ3LCAweGZjLCAweGQxLCAweDlkLCAweGQ0 LCAweDA1LCAweDM2LCAweDhiLCAweGIyLAorKyAgICAweGZiLCAweGU0LCAweGY0LCAweDUxLCAw eDBjLCAweDg3LCAweDliLCAweDAyLCAweDQ0LCAweGQ1LCAweDkyLCAweDRkLAorKyAgICAweDQ0 LCAweGZlLCAweDFhLCAweDAzLCAweDQzLCAweDU2LCAweGJkLCAweDg2CisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX3JldHVybmVk Yml0c1tdID0geworKyAgICAweDAyLCAweGFhLCAweGI2LCAweDFkLCAweDdlLCAweDJhLCAweDQw LCAweDAzLCAweDY5LCAweDJkLCAweDQ5LCAweGEzLAorKyAgICAweDQxLCAweGU3LCAweDQ0LCAw eDBiLCAweGFmLCAweDdiLCAweDg1LCAweGU0LCAweDVmLCAweDUzLCAweDNiLCAweDY0LAorKyAg ICAweGJjLCAweDg5LCAweGM4LCAweDgyLCAweGQ0LCAweDc4LCAweDM3LCAweGEyCisrfTsKKysK KysvKiBTSEEtMjU2IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyNTZfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4NWIsIDB4MWIsIDB4 ZWMsIDB4NGQsIDB4YTksIDB4MzgsIDB4NzQsIDB4NWEsIDB4MzQsIDB4MGIsIDB4N2IsIDB4YzUs CisrICAgIDB4ZTUsIDB4ZDcsIDB4NjYsIDB4N2MsIDB4YmMsIDB4ODIsIDB4YjksIDB4MGUsIDB4 MmQsIDB4MWYsIDB4OTIsIDB4ZDcsCisrICAgIDB4YzEsIDB4YmMsIDB4NjcsIDB4NjksIDB4ZWMs IDB4NmIsIDB4MDMsIDB4M2MKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyNTZfbm9uY2VbXSA9IHsKKysgICAgMHhhNCwgMHgwYywgMHhkOCwg MHg5YywgMHg2MSwgMHhkOCwgMHhjMywgMHg1NCwgMHhmZSwgMHg1MywgMHhjOSwgMHhlNSwKKysg ICAgMHg1ZCwgMHg2ZiwgMHg2ZCwgMHgzNQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsK KysgICAgMHgyMiwgMHg1ZSwgMHg2MiwgMHg5MywgMHg0MiwgMHg4MywgMHg3OCwgMHgyNCwgMHhk OCwgMHg0MCwgMHg4YywgMHhkZSwKKysgICAgMHg2ZiwgMHhmOSwgMHhhNCwgMHg3YSwgMHhjNSwg MHhhNywgMHgzYiwgMHg4OCwgMHhhMywgMHhlZSwgMHg0MiwgMHgyMCwKKysgICAgMHhmZCwgMHg2 MSwgMHg1NiwgMHhjNiwgMHg0YywgMHgxMywgMHg0MSwgMHg5YworK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXRb XSA9IHsKKysgICAgMHhiZiwgMHg3NCwgMHg1YiwgMHhmNiwgMHhjNSwgMHg2NCwgMHg1ZSwgMHg5 OSwgMHgzNCwgMHg4ZiwgMHhiYywgMHhhNCwKKysgICAgMHhlMiwgMHhiZCwgMHhkOCwgMHg4NSwg MHgyNiwgMHgzNywgMHhlYSwgMHhiYSwgMHg0ZiwgMHhmMiwgMHg5YSwgMHg5YSwKKysgICAgMHg2 NiwgMHhmYywgMHhkZiwgMHg2MywgMHgyNiwgMHgyNiwgMHgxOSwgMHg4NworK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9pbnRfcmV0dXJu ZWRiaXRzW10gPSB7CisrICAgIDB4YjMsIDB4YzYsIDB4MDcsIDB4MDcsIDB4ZDYsIDB4NzUsIDB4 ZjYsIDB4MmIsIDB4ZDYsIDB4MjEsIDB4OTYsIDB4ZjEsCisrICAgIDB4YWUsIDB4ZGIsIDB4MmIs IDB4YWMsIDB4MjUsIDB4MmEsIDB4YWUsIDB4YWUsIDB4NDEsIDB4NzIsIDB4MDMsIDB4NWUsCisr ICAgIDB4YmYsIDB4ZDMsIDB4NjQsIDB4YmMsIDB4NTksIDB4ZjksIDB4YzAsIDB4NzYKKyt9Owor KworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfZW50 cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4YmYsIDB4MjAsIDB4MzMsIDB4NTYsIDB4Mjks IDB4YTgsIDB4MzcsIDB4MDQsIDB4MWYsIDB4NzgsIDB4MzQsIDB4M2QsCisrICAgIDB4ODEsIDB4 MmEsIDB4YzksIDB4ODYsIDB4YzYsIDB4N2EsIDB4MmYsIDB4ODgsIDB4NWUsIDB4ZDUsIDB4YmUs IDB4MzQsCisrICAgIDB4NDYsIDB4MjAsIDB4YTQsIDB4MzUsIDB4ZWIsIDB4YzcsIDB4ZTIsIDB4 OWQKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyNTZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4OWIsIDB4YWUsIDB4MmQs IDB4MmQsIDB4NjEsIDB4YTQsIDB4ODksIDB4ZWIsIDB4NDMsIDB4NDYsIDB4YTcsIDB4ZGEsCisr ICAgIDB4ZWYsIDB4NDAsIDB4Y2EsIDB4NGEsIDB4OTksIDB4MTEsIDB4NDEsIDB4ZGMsIDB4NWMs IDB4OTQsIDB4ZTksIDB4YWMsCisrICAgIDB4ZDQsIDB4ZDAsIDB4ZTYsIDB4YmQsIDB4ZmIsIDB4 MDMsIDB4OWMsIDB4YTgKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAweDIzLCAweGFh LCAweDBjLCAweGJkLCAweDI4LCAweDMzLCAweGUyLCAweDUxLCAweGZjLCAweDcxLCAweGQyLCAw eDE1LAorKyAgICAweDFmLCAweDc2LCAweGZkLCAweDBkLCAweGUwLCAweGI3LCAweGI1LCAweDg0 LCAweDc1LCAweDViLCAweGJlLCAweGYzLAorKyAgICAweDVjLCAweGNhLCAweGM1LCAweDMwLCAw eGYyLCAweDc1LCAweDFmLCAweGRhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3JldHVybmVkYml0c1tdID0geworKyAgICAweDkwLCAw eDNjLCAweGMxLCAweDEwLCAweDhjLCAweDEyLCAweDAxLCAweGM2LCAweGE2LCAweDNhLCAweDBm LCAweDRkLAorKyAgICAweGI2LCAweDNhLCAweDRmLCAweDQxLCAweDljLCAweDYxLCAweDc1LCAw eDg0LCAweGU5LCAweDc0LCAweDc1LCAweGZkLAorKyAgICAweGZlLCAweGYyLCAweDFmLCAweDQz LCAweGQ4LCAweDVlLCAweDI0LCAweGEzCisrfTsKKysKKysvKiBTSEEtMzg0IFBSICAqLworK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9w eWlucHV0W10gPSB7CisrICAgIDB4NzEsIDB4OWQsIDB4YjIsIDB4NWEsIDB4NzEsIDB4NmQsIDB4 MDQsIDB4ZTksIDB4MWUsIDB4YzcsIDB4OTIsIDB4MjQsCisrICAgIDB4NmUsIDB4MTIsIDB4MzMs IDB4YTksIDB4NTIsIDB4NjQsIDB4MzEsIDB4ZWYsIDB4NzEsIDB4ZWIsIDB4MjIsIDB4NTUsCisr ICAgIDB4MjgsIDB4OTcsIDB4MDYsIDB4NmEsIDB4YzAsIDB4MGMsIDB4YTAsIDB4N2UKKyt9Owor KworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJf bm9uY2VbXSA9IHsKKysgICAgMHhmNSwgMHgwZCwgMHhmYSwgMHhiMCwgMHhlYywgMHg2YSwgMHg3 YywgMHhkNiwgMHhiZCwgMHg5YiwgMHgwNSwgMHhmZCwKKysgICAgMHgzOCwgMHgzZSwgMHgyZSwg MHg1NgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTM4NF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHg3NCwgMHhhYywg MHg3ZSwgMHg2ZCwgMHhiMSwgMHhhNCwgMHhlNywgMHgyMSwgMHhkMSwgMHgxZSwgMHg2ZSwgMHg5 NiwKKysgICAgMHg2ZCwgMHg0ZCwgMHg1MywgMHg0NiwgMHg4MiwgMHg5NiwgMHg2ZSwgMHhjZiwg MHhhYSwgMHg4MSwgMHg4ZCwgMHg3ZCwKKysgICAgMHg5ZSwgMHhlMSwgMHgwZiwgMHgxNSwgMHhl YSwgMHg0MSwgMHhiZiwgMHhlMworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHhk YSwgMHg5NSwgMHhkNCwgMHhkMCwgMHhiOCwgMHgxMSwgMHhkMywgMHg0OSwgMHgyNywgMHg1ZCwg MHhhOSwgMHgzOSwKKysgICAgMHg2OCwgMHhmMywgMHhhOCwgMHhlOSwgMHg1ZCwgMHgxOSwgMHg4 YSwgMHgyYiwgMHg2NiwgMHhlOCwgMHg2OSwgMHgwNiwKKysgICAgMHg3YywgMHg5ZSwgMHgwMywg MHhhMSwgMHg4YiwgMHgyNiwgMHgyZCwgMHg2ZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0gewor KyAgICAweDQ5LCAweGRmLCAweDQ0LCAweDAwLCAweGU0LCAweDFjLCAweDc1LCAweDBiLCAweDI2 LCAweDVhLCAweDU5LCAweDY0LAorKyAgICAweDFmLCAweDRlLCAweGIxLCAweGIyLCAweDEzLCAw eGYxLCAweDIyLCAweDRlLCAweGI0LCAweDZkLCAweDlhLCAweGNjLAorKyAgICAweGEwLCAweDQ4 LCAweGU2LCAweGNmLCAweDFkLCAweGQxLCAweDkyLCAweDBkCisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2ludF9yZXR1cm5lZGJp dHNbXSA9IHsKKysgICAgMHhjOCwgMHg1MiwgMHhhZSwgMHhiZiwgMHgwNCwgMHgzYywgMHgyNywg MHhiNywgMHg3OCwgMHgxOCwgMHhhYSwgMHg4ZiwKKysgICAgMHhmZiwgMHhjZiwgMHhhNCwgMHhm MSwgMHhjYywgMHhlNywgMHg2OCwgMHhmYSwgMHgyMiwgMHhhMiwgMHgxMywgMHg0NSwKKysgICAg MHhlOCwgMHhkZCwgMHg4NywgMHhlNiwgMHhmMiwgMHg2ZSwgMHhkZCwgMHhjNywgMHg1MiwgMHg5 MCwgMHg5ZiwgMHg3YiwKKysgICAgMHhmYSwgMHg2MSwgMHgyZCwgMHg5ZCwgMHg5ZSwgMHhjZiwg MHg5OCwgMHhhYywgMHg1MiwgMHg0MCwgMHhjZSwgMHhhZgorK307CisrCisrX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXQy W10gPSB7CisrICAgIDB4NjEsIDB4N2MsIDB4MDMsIDB4OWEsIDB4M2UsIDB4NTAsIDB4NTcsIDB4 NjAsIDB4YzUsIDB4ODMsIDB4YzksIDB4YjIsCisrICAgIDB4ZDEsIDB4ODcsIDB4ODUsIDB4NjYs IDB4OTIsIDB4NWQsIDB4ODQsIDB4MGUsIDB4NTMsIDB4ZmIsIDB4NzAsIDB4MDMsCisrICAgIDB4 NzIsIDB4ZmQsIDB4YmEsIDB4YWUsIDB4OWMsIDB4OGYsIDB4ZjgsIDB4MTgKKyt9OworKworK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9w eWlucHV0cHIyW10gPSB7CisrICAgIDB4ZjgsIDB4ZWIsIDB4ODksIDB4YjEsIDB4OGQsIDB4Nzgs IDB4YmUsIDB4MjEsIDB4ZTAsIDB4YmIsIDB4OWQsIDB4YjcsCisrICAgIDB4OTUsIDB4MGUsIDB4 ZDksIDB4NDYsIDB4MGMsIDB4OGMsIDB4ZTIsIDB4NjMsIDB4YjcsIDB4OWQsIDB4NjcsIDB4OTAs CisrICAgIDB4YmQsIDB4YzcsIDB4MGIsIDB4YTUsIDB4Y2UsIDB4YjIsIDB4NjUsIDB4ODEKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRf cHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4ZTYsIDB4OWYsIDB4ZmUsIDB4NjgsIDB4ZDYs IDB4YjUsIDB4NzksIDB4ZjEsIDB4MDYsIDB4NWYsIDB4YTMsIDB4YmIsCisrICAgIDB4MjMsIDB4 ODUsIDB4ZDgsIDB4ZjAsIDB4MjksIDB4NWEsIDB4NjgsIDB4OWUsIDB4ZjUsIDB4ZjQsIDB4YTYs IDB4MTIsCisrICAgIDB4ZTAsIDB4OWEsIDB4ZTIsIDB4YWMsIDB4MDAsIDB4MWQsIDB4OTgsIDB4 MjYsIDB4ZmMsIDB4NTMsIDB4OTUsIDB4NTMsCisrICAgIDB4ZTQsIDB4M2UsIDB4MTcsIDB4ZDUs IDB4MDgsIDB4MGIsIDB4NzAsIDB4M2QsIDB4NjcsIDB4OTksIDB4YWMsIDB4NjYKKyt9OworKwor Ky8qIFNIQS0zODQgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHgwNywgMHgxNSwgMHgy NywgMHgyYSwgMHhhZiwgMHg3NCwgMHgyNCwgMHgzNywgMHhiYywgMHhkNSwgMHgxNCwgMHg2OSwK KysgICAgMHhjZSwgMHgxMSwgMHhmZiwgMHhhMiwgMHg2YiwgMHhiOCwgMHgwNSwgMHg2NywgMHgz NCwgMHhmOCwgMHhiZCwgMHg2ZCwKKysgICAgMHg2YSwgMHhjYywgMHhjZCwgMHg2MCwgMHhhMywg MHg2OCwgMHhjYSwgMHhmNAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTM4NF9ub25jZVtdID0geworKyAgICAweDcwLCAweDE3LCAweGMyLCAw eDViLCAweDVkLCAweDIyLCAweDBiLCAweDA2LCAweDE1LCAweDU0LCAweDc4LCAweDc3LAorKyAg ICAweDQ0LCAweGFmLCAweDJmLCAweDA5CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewor KyAgICAweDg5LCAweDM5LCAweDI4LCAweGIwLCAweDYwLCAweGViLCAweDNkLCAweGRjLCAweDU1 LCAweDc1LCAweDg2LCAweGViLAorKyAgICAweGFlLCAweGEyLCAweDhmLCAweGJjLCAweDFiLCAw eDc1LCAweGQ0LCAweGUxLCAweDBmLCAweGFhLCAweDM4LCAweGNhLAorKyAgICAweDYyLCAweDhi LCAweGNiLCAweDJjLCAweDI2LCAweGY2LCAweGJjLCAweGIxCisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1dFtd ID0geworKyAgICAweDMwLCAweDJiLCAweDQyLCAweDM1LCAweGVmLCAweGRhLCAweDQwLCAweDU1 LCAweDI4LCAweGM2LCAweDk1LCAweGZiLAorKyAgICAweDU0LCAweDAxLCAweDYyLCAweGQ3LCAw eDg3LCAweDE0LCAweDQ4LCAweDZkLCAweDkwLCAweDRjLCAweGE5LCAweDAyLAorKyAgICAweDU0 LCAweDQwLCAweDIyLCAweGM4LCAweDY2LCAweGE1LCAweDQ4LCAweDQ4CisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2ludF9yZXR1cm5l ZGJpdHNbXSA9IHsKKysgICAgMHg4MiwgMHhjNCwgMHhhMSwgMHg5YywgMHgyMSwgMHhkMiwgMHhl NywgMHhhNSwgMHhhNiwgMHhmNiwgMHg1ZiwgMHgwNCwKKysgICAgMHg1YywgMHhjNywgMHgzMSwg MHg5ZCwgMHg4ZCwgMHg1OSwgMHg3NCwgMHg1MCwgMHgxOSwgMHg4OSwgMHgyZiwgMHg2MywKKysg ICAgMHhkNSwgMHhiNywgMHg3ZSwgMHhlYiwgMHgxNSwgMHhlMywgMHg3MCwgMHg4MywgMHhhMSwg MHgyNCwgMHg1OSwgMHhmYSwKKysgICAgMHgyYywgMHg1NiwgMHhmNiwgMHg4OCwgMHgzYSwgMHg5 MiwgMHg5MywgMHhhMSwgMHhmYiwgMHg3OSwgMHhjMSwgMHg3YQorK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRyZXNl ZWRbXSA9IHsKKysgICAgMHgzOSwgMHhhNiwgMHhlOCwgMHg1YywgMHg4MiwgMHgxNywgMHg3MSwg MHgyNiwgMHg1NywgMHg0ZiwgMHg5ZiwgMHhjMiwKKysgICAgMHg1NSwgMHhmZiwgMHg1YywgMHg5 YiwgMHg1MywgMHgxYSwgMHhkMSwgMHg1ZiwgMHhiYywgMHg2MiwgMHhlNCwgMHgyNywKKysgICAg MHgyZCwgMHgzMiwgMHhmMCwgMHhlNCwgMHg1MiwgMHg4YywgMHhjNSwgMHgwYworK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlv bmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHg4ZCwgMHhjYiwgMHg4ZCwgMHhjZSwgMHgwOCwg MHhlYSwgMHg4MCwgMHhlOCwgMHg5YiwgMHg2MSwgMHhhOCwgMHgwZiwKKysgICAgMHhhZiwgMHg0 OSwgMHgyMCwgMHg5ZSwgMHg3NCwgMHhjYiwgMHg1NywgMHg4MCwgMHg0MiwgMHhiMCwgMHg4NCwg MHg1ZSwKKysgICAgMHgzMCwgMHgyYSwgMHg2NywgMHgwOCwgMHhmNCwgMHhlMywgMHg0MCwgMHgy MgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTM4NF9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4N2MsIDB4OGYsIDB4YzIsIDB4YWUs IDB4MjIsIDB4NGEsIDB4ZDYsIDB4ZjYsIDB4MDUsIDB4YTQsIDB4N2EsIDB4ZWEsCisrICAgIDB4 YmIsIDB4MjUsIDB4ZDAsIDB4YjcsIDB4NWEsIDB4ZDYsIDB4Y2YsIDB4OWQsIDB4ZjMsIDB4NmMs IDB4ZTIsIDB4YjIsCisrICAgIDB4NGUsIDB4YjQsIDB4YmQsIDB4ZjQsIDB4ZTUsIDB4NDAsIDB4 ODAsIDB4OTQKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEzODRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4OWUsIDB4N2UsIDB4ZmIsIDB4 NTksIDB4YmIsIDB4YWEsIDB4M2MsIDB4ZjcsIDB4ZTEsIDB4ZjgsIDB4NzYsIDB4ZGQsCisrICAg IDB4NjMsIDB4NWYsIDB4YWYsIDB4MjMsIDB4ZDYsIDB4NjQsIDB4NjEsIDB4YzAsIDB4OWEsIDB4 MDksIDB4NDcsIDB4YzksCisrICAgIDB4MzMsIDB4ZGYsIDB4NmQsIDB4NTUsIDB4OTEsIDB4MzQs IDB4NzksIDB4NzAsIDB4YzQsIDB4OTksIDB4NmUsIDB4NTQsCisrICAgIDB4MDksIDB4NjQsIDB4 MjEsIDB4MWEsIDB4YmQsIDB4MWUsIDB4ODAsIDB4NDAsIDB4MzQsIDB4YWQsIDB4ZmEsIDB4ZDcK Kyt9OworKworKy8qIFNIQS01MTIgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHgxMywg MHhmNywgMHg2MSwgMHg3NSwgMHg2NSwgMHgyOCwgMHhhMiwgMHg1OSwgMHgxMywgMHg1YSwgMHg0 YSwgMHg0ZiwKKysgICAgMHg1NiwgMHg2MCwgMHg4YywgMHg1MywgMHg3ZCwgMHhiMCwgMHhiZCwg MHgwNiwgMHg0ZiwgMHhlZCwgMHhjYywgMHhkMiwKKysgICAgMHhhMiwgMHhiNSwgMHhmZCwgMHg1 YiwgMHgzYSwgMHhhYiwgMHhlYywgMHgyOAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9ub25jZVtdID0geworKyAgICAweGJlLCAw eGEzLCAweDkxLCAweDkzLCAweDFkLCAweGMzLCAweDMxLCAweDNhLCAweDIzLCAweDMzLCAweDUw LCAweDY3LAorKyAgICAweDg4LCAweGM3LCAweGEyLCAweGM0CisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0geworKyAgICAweDFmLCAweDU5LCAweDRkLCAweDdiLCAweGU2LCAweDQ2LCAw eDkxLCAweDQ4LCAweGMxLCAweDI1LCAweGZhLCAweGZmLAorKyAgICAweDg5LCAweDEyLCAweDc3 LCAweDM1LCAweGRmLCAweDNlLCAweGY0LCAweDgwLCAweDVmLCAweGQ5LCAweGIwLCAweDA3LAor KyAgICAweDIyLCAweDQxLCAweGRkLCAweDQ4LCAweDc4LCAweDZiLCAweDc3LCAweDJiCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3By X2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDMwLCAweGZmLCAweDYzLCAweDZmLCAweGFj LCAweGQ5LCAweDg0LCAweDM5LCAweDZmLCAweGU0LCAweDk5LCAweGNlLAorKyAgICAweDkxLCAw eDdkLCAweDdlLCAweGM4LCAweDU4LCAweGYyLCAweDEyLCAweGMzLCAweGI2LCAweGFkLCAweGRh LCAweDIyLAorKyAgICAweDA0LCAweGEwLCAweGQyLCAweDIxLCAweGZlLCAweGYyLCAweDk1LCAw eDFkCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhNTEyX3ByX2VudHJvcHlpbnB1dHByW10gPSB7CisrICAgIDB4NjQsIDB4NTQsIDB4MTMsIDB4 ZWMsIDB4NGYsIDB4NzcsIDB4ZGEsIDB4YjIsIDB4OTIsIDB4MmUsIDB4NTIsIDB4ODAsCisrICAg IDB4MTEsIDB4MTAsIDB4YzIsIDB4ZjgsIDB4ZTYsIDB4YTcsIDB4Y2QsIDB4NGIsIDB4ZmMsIDB4 MzIsIDB4MmUsIDB4OWUsCisrICAgIDB4ZWIsIDB4YmIsIDB4YjEsIDB4YmYsIDB4MTUsIDB4NWMs IDB4NzMsIDB4MDgKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGE1MTJfcHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweGVmLCAweDFl LCAweGRjLCAweDBhLCAweGE0LCAweDM2LCAweDkxLCAweDljLCAweDNkLCAweDI3LCAweDk3LCAw eDUwLAorKyAgICAweDhkLCAweDM2LCAweDI5LCAweDhkLCAweGNlLCAweDZhLCAweDBjLCAweGY3 LCAweDIxLCAweGMwLCAweDkxLCAweGFlLAorKyAgICAweDBjLCAweDk2LCAweDcyLCAweGJkLCAw eDUyLCAweDgxLCAweDU4LCAweGZjLCAweDZkLCAweGU1LCAweGY3LCAweGE1LAorKyAgICAweGZk LCAweDVkLCAweGE3LCAweDU4LCAweDY4LCAweGM4LCAweDk5LCAweDU4LCAweDhlLCAweGM4LCAw eGNlLCAweDk1LAorKyAgICAweDAxLCAweDdkLCAweGZmLCAweGE0LCAweGM4LCAweGY3LCAweDYz LCAweGZlLCAweDVmLCAweDY5LCAweDgzLCAweDUzLAorKyAgICAweGUyLCAweGM2LCAweDhiLCAw eGMzCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHhlNiwgMHg5YiwgMHhjNCwg MHg4OCwgMHgzNCwgMHhjYSwgMHhlYSwgMHgyOSwgMHgyZiwgMHg5OCwgMHgwNSwgMHhhNCwKKysg ICAgMHhkMywgMHhjMCwgMHg3YiwgMHgxMSwgMHhlOCwgMHhiYiwgMHg3NSwgMHhmMiwgMHhiZCwg MHgyOSwgMHhiNywgMHg0MCwKKysgICAgMHgyNSwgMHg3ZiwgMHhjMSwgMHhiNywgMHhiMSwgMHhm MSwgMHgyNSwgMHg2MQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKKysgICAgMHgyMywgMHg2 ZCwgMHhmZiwgMHhkZSwgMHhmYiwgMHhkMSwgMHhiYSwgMHgzMywgMHgxOCwgMHhlNiwgMHhiZSwg MHhiNSwKKysgICAgMHg0OCwgMHg3NywgMHg2ZCwgMHg3ZiwgMHhhNywgMHhlMSwgMHg0ZCwgMHg0 OCwgMHgxZSwgMHgzYywgMHhhNywgMHgzNCwKKysgICAgMHgxYSwgMHhjOCwgMHg2MCwgMHhkYiwg MHg4ZiwgMHg5OSwgMHgxNSwgMHg5OQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg3 MCwgMHgyNywgMHgzMSwgMHhkYiwgMHg5MiwgMHg3MCwgMHgyMSwgMHhmZSwgMHgxNiwgMHhiNiwg MHhjOCwgMHg1MSwKKysgICAgMHgzNCwgMHg4NywgMHg2NSwgMHhkMCwgMHg0ZSwgMHhmZCwgMHhm ZSwgMHg2OCwgMHhlYywgMHhhYywgMHhkYywgMHg5MywKKysgICAgMHg0MSwgMHgzOCwgMHg5Miwg MHg5MCwgMHhiNCwgMHg5NCwgMHhmOSwgMHgwZCwgMHhhNCwgMHhmNywgMHg0ZSwgMHg4MCwKKysg ICAgMHg5MiwgMHg2NywgMHg0OCwgMHg0MCwgMHhhNywgMHgwOCwgMHhjNywgMHhiYywgMHg2Niwg MHgwMCwgMHhmZCwgMHhmNywKKysgICAgMHg0YywgMHg4YiwgMHgxNywgMHg2ZSwgMHhkMSwgMHg4 ZiwgMHg5YiwgMHhmMywgMHg2ZiwgMHhmNiwgMHgzNCwgMHhkZCwKKysgICAgMHg2NywgMHhmNywg MHg2OCwgMHhkZAorK307CisrCisrLyogU0hBLTUxMiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2VudHJvcHlpbnB1dFtdID0gewor KyAgICAweGI2LCAweDBiLCAweGI3LCAweGJjLCAweDg0LCAweDU2LCAweGY2LCAweDEyLCAweGFm LCAweDQ1LCAweDY3LCAweDE3LAorKyAgICAweDdjLCAweGQxLCAweGIyLCAweDc4LCAweDJiLCAw eGEwLCAweGYyLCAweGJlLCAweGI2LCAweDZkLCAweDhiLCAweDU2LAorKyAgICAweGM2LCAweGJj LCAweDRkLCAweGUxLCAweGY3LCAweGJlLCAweGNlLCAweGJkCisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX25vbmNlW10gPSB7CisrICAg IDB4OWQsIDB4ZWQsIDB4YzAsIDB4ZTUsIDB4NWEsIDB4OTgsIDB4NmEsIDB4Y2IsIDB4NTEsIDB4 N2QsIDB4NzYsIDB4MzEsCisrICAgIDB4NWEsIDB4NjQsIDB4ZjAsIDB4ZjcKKyt9OworKworK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4YzIsIDB4NmQsIDB4YTMsIDB4YzMsIDB4MDYsIDB4 NzQsIDB4ZTUsIDB4MDEsIDB4NWMsIDB4MTAsIDB4MTcsIDB4YzcsCisrICAgIDB4YWYsIDB4ODMs IDB4OWQsIDB4NTksIDB4OGQsIDB4MmQsIDB4MjksIDB4MzgsIDB4YzUsIDB4NTksIDB4NzAsIDB4 OGIsCisrICAgIDB4NDYsIDB4NDgsIDB4MmQsIDB4Y2YsIDB4MzYsIDB4N2QsIDB4NTksIDB4YzAK Kyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1 MTJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4ZWMsIDB4OGMsIDB4ZDQsIDB4ZjcsIDB4 NjEsIDB4NmUsIDB4MGQsIDB4OTUsIDB4NzksIDB4YjcsIDB4MjgsIDB4YWQsCisrICAgIDB4NWYs IDB4NjksIDB4NzQsIDB4NWYsIDB4MmQsIDB4MzYsIDB4MDYsIDB4OGEsIDB4NmIsIDB4YWMsIDB4 NTQsIDB4OTcsCisrICAgIDB4YzQsIDB4YTEsIDB4MTIsIDB4ODUsIDB4MGEsIDB4ZGYsIDB4NGIs IDB4MzQKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGE1MTJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweDg0LCAweDJmLCAweDFmLCAw eDY4LCAweDZhLCAweGEzLCAweGFkLCAweDFlLCAweGZiLCAweGY0LCAweDE1LCAweGJkLAorKyAg ICAweGRlLCAweDM4LCAweGQ0LCAweDMwLCAweDgwLCAweDUxLCAweGU5LCAweGQzLCAweGM3LCAw eDIwLCAweDg4LCAweGU5LAorKyAgICAweGY1LCAweGNjLCAweGRmLCAweDU3LCAweDVjLCAweDQ3 LCAweDJmLCAweDU3LCAweDNjLCAweDVmLCAweDEzLCAweDU2LAorKyAgICAweGNjLCAweGM1LCAw eDRmLCAweDg0LCAweGY4LCAweDEwLCAweDQxLCAweGQ1LCAweDdlLCAweDU4LCAweDZlLCAweDE5 LAorKyAgICAweDE5LCAweDllLCAweGFmLCAweGMyLCAweDIyLCAweDU4LCAweDQxLCAweDUwLCAw eDc5LCAweGMyLCAweGQ4LCAweDA0LAorKyAgICAweDI4LCAweGQ0LCAweDM5LCAweDlhCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2Vu dHJvcHlpbnB1dHJlc2VlZFtdID0geworKyAgICAweGZhLCAweDdmLCAweDQ2LCAweDUxLCAweDgz LCAweDYyLCAweDk4LCAweDE2LCAweDlhLCAweDE5LCAweGEyLCAweDQ5LAorKyAgICAweGE5LCAw eGU2LCAweDRhLCAweGQ4LCAweDg1LCAweGU3LCAweGQ0LCAweDNiLCAweDJjLCAweDgyLCAweGM1 LCAweDgyLAorKyAgICAweGJmLCAweDExLCAweGY5LCAweDllLCAweGJjLCAweGQwLCAweDAxLCAw eGVlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhNTEyX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0geworKyAgICAweGI5LCAweDEyLCAweGUw LCAweDRmLCAweGY3LCAweGE3LCAweGM0LCAweGQ4LCAweGQwLCAweDhlLCAweDk5LCAweDI5LAor KyAgICAweDdjLCAweDlhLCAweGU5LCAweGNmLCAweGM0LCAweDZjLCAweGY4LCAweGMzLCAweGE3 LCAweDQxLCAweDgzLCAweGQ2LAorKyAgICAweDJlLCAweGZhLCAweGI4LCAweDVlLCAweDhlLCAw eDZiLCAweDc4LCAweDIwCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHhkNywgMHgw NywgMHg1MiwgMHhiOSwgMHg4MywgMHgyYywgMHgwMywgMHg3MSwgMHhlZSwgMHhjOSwgMHhjMCwg MHg4NSwKKysgICAgMHhlMSwgMHg1NywgMHhiMiwgMHhjZCwgMHgzYSwgMHhmMCwgMHhjOSwgMHgz NCwgMHgyNCwgMHg0MSwgMHgxYywgMHg0MiwKKysgICAgMHg5OSwgMHhiMiwgMHg4NCwgMHhlOSwg MHgxNywgMHhkMiwgMHg3NiwgMHg5MgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHgzNiwg MHgxNywgMHg1ZCwgMHg5OCwgMHgyYiwgMHg2NSwgMHgyNSwgMHg4ZSwgMHhjOCwgMHgyOSwgMHhk ZiwgMHgyNywKKysgICAgMHgwNSwgMHgzNiwgMHgyNiwgMHgxMiwgMHg4YSwgMHg2OCwgMHg3NCwg MHgyNywgMHgzNywgMHhkNCwgMHg3ZiwgMHgzMiwKKysgICAgMHhiMSwgMHgxMiwgMHhkNiwgMHg4 NSwgMHg4MywgMHhlYiwgMHgyZSwgMHhhMCwgMHhlZCwgMHg0YiwgMHhiNSwgMHg3YiwKKysgICAg MHg2ZiwgMHgzOSwgMHgzYywgMHg3MSwgMHg3NywgMHgwMiwgMHgxMiwgMHhjYywgMHgyYywgMHgz YSwgMHg4ZSwgMHg2MywKKysgICAgMHhkZiwgMHg0YSwgMHhiZCwgMHg2ZiwgMHg2ZSwgMHgyZSwg MHhlZCwgMHgwYSwgMHg4NSwgMHhhNSwgMHgyZiwgMHhhMiwKKysgICAgMHg2OCwgMHhkZSwgMHg0 MiwgMHhiNQorK307CisrCisrLyogSE1BQyBTSEEtMSBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dFtdID0g eworKyAgICAweDI2LCAweDVmLCAweDM2LCAweDE0LCAweGZmLCAweDNkLCAweDgzLCAweGZhLCAw eDczLCAweDVlLCAweDc1LCAweGRjLAorKyAgICAweDJjLCAweDE4LCAweDE3LCAweDFiCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEx X3ByX25vbmNlW10gPSB7CisrICAgIDB4YzgsIDB4ZTMsIDB4NTcsIDB4YTUsIDB4N2IsIDB4NzQs IDB4ODYsIDB4NmUKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Cisr ICAgIDB4NmUsIDB4ZGIsIDB4MGQsIDB4ZmUsIDB4N2QsIDB4YWMsIDB4NzksIDB4ZDAsIDB4YTUs IDB4M2EsIDB4NDgsIDB4ODUsCisrICAgIDB4ODAsIDB4ZTIsIDB4N2YsIDB4MmEKKyt9OworKwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJf YWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4MzEsIDB4Y2QsIDB4NWUsIDB4NDMsIDB4ZGMs IDB4ZmIsIDB4N2EsIDB4NzksIDB4Y2EsIDB4ODgsIDB4ZGUsIDB4MWYsCisrICAgIDB4ZDcsIDB4 YmIsIDB4NDIsIDB4MDkKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAgMHg3Yywg MHgyMywgMHg5NSwgMHgzOCwgMHgwMCwgMHg5NSwgMHhjMSwgMHg3OCwgMHgxZiwgMHg4ZiwgMHhk NywgMHg2MywKKysgICAgMHgyMywgMHg4NywgMHgyYSwgMHhlZAorK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9pbnRfcmV0dXJu ZWRiaXRzW10gPSB7CisrICAgIDB4YmIsIDB4MzQsIDB4ZTcsIDB4OTMsIDB4YTMsIDB4MDIsIDB4 MmMsIDB4NGEsIDB4ZDAsIDB4ODksIDB4ZGEsIDB4N2YsCisrICAgIDB4ZWQsIDB4ZjQsIDB4NGMs IDB4ZGUsIDB4MTcsIDB4ZWMsIDB4ZTUsIDB4NmMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfYWRkaXRpb25hbGlucHV0Mltd ID0geworKyAgICAweDQ5LCAweGJjLCAweDJkLCAweDJjLCAweGI3LCAweDMyLCAweGNiLCAweDIw LCAweGRmLCAweGY1LCAweDc3LCAweDU4LAorKyAgICAweGEwLCAweDRiLCAweDkzLCAweDZlCisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGExX3ByX2VudHJvcHlpbnB1dHByMltdID0geworKyAgICAweDNjLCAweGFhLCAweGIwLCAweDIx LCAweDQyLCAweGIwLCAweGRkLCAweDM0LCAweGYwLCAweDE2LCAweDdmLCAweDBjLAorKyAgICAw eDBmLCAweGZmLCAweDJlLCAweGFmCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX3JldHVybmVkYml0c1tdID0geworKyAgICAw eDhlLCAweGNiLCAweGEzLCAweDY0LCAweGIyLCAweGI4LCAweDMzLCAweDZjLCAweDY0LCAweDNi LCAweDc4LCAweDE2LAorKyAgICAweDk5LCAweDM1LCAweGM4LCAweDMwLCAweGNiLCAweDNlLCAw eGEwLCAweGQ4CisrfTsKKysKKysvKiBITUFDIFNIQS0xIE5vIFBSICAqLworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfZW50cm9weWlucHV0W10g PSB7CisrICAgIDB4MzIsIDB4OWEsIDB4MmEsIDB4ODcsIDB4N2IsIDB4ODksIDB4N2MsIDB4ZjYs IDB4Y2IsIDB4OTUsIDB4ZDUsIDB4NDAsCisrICAgIDB4MTcsIDB4ZmUsIDB4NDcsIDB4NzAKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTFfbm9uY2VbXSA9IHsKKysgICAgMHgxNiwgMHhkOCwgMHhlMCwgMHhjNywgMHg1MiwgMHhjZiwg MHg0YSwgMHgyNQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMV9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHgzNSwg MHgzNSwgMHhhOSwgMHhhNSwgMHg0MCwgMHhiZSwgMHg5YiwgMHhkMSwgMHg1NiwgMHhkZCwgMHg0 NCwgMHgwMCwKKysgICAgMHg3MiwgMHhmNywgMHhkMywgMHg1ZQorK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlvbmFsaW5w dXRbXSA9IHsKKysgICAgMHgxYiwgMHgyYywgMHg4NCwgMHgyZCwgMHg0YSwgMHg4OSwgMHg4Ziwg MHg2OSwgMHgxOSwgMHhmMSwgMHhmMywgMHhkYiwKKysgICAgMHhiYiwgMHhlMywgMHhhYSwgMHhl YQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMV9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4Y2YsIDB4ZmEsIDB4N2QsIDB4 NzIsIDB4MGYsIDB4ZTYsIDB4YzcsIDB4OTYsIDB4YTAsIDB4NjksIDB4MzEsIDB4MTEsCisrICAg IDB4OWIsIDB4MGIsIDB4MWEsIDB4MjAsIDB4MWYsIDB4M2YsIDB4YWEsIDB4ZDEKKyt9OworKwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfZW50 cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4OTAsIDB4NzUsIDB4MTUsIDB4MDQsIDB4OTUs IDB4ZjEsIDB4YmEsIDB4ODEsIDB4MGMsIDB4MzcsIDB4OTQsIDB4NmYsCisrICAgIDB4ODYsIDB4 NTIsIDB4NmQsIDB4OWMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4 NWIsIDB4NDAsIDB4YmEsIDB4NWYsIDB4MTcsIDB4NzAsIDB4ZjAsIDB4NGIsIDB4ZGYsIDB4Yzks IDB4OTcsIDB4OTIsCisrICAgIDB4NzksIDB4YzUsIDB4ODIsIDB4MjgKKyt9OworKworK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25h bGlucHV0MltdID0geworKyAgICAweDk3LCAweGM4LCAweDgwLCAweDkwLCAweGIzLCAweGFhLCAw eDZlLCAweDYwLCAweGVhLCAweDgzLCAweDdhLCAweGUzLAorKyAgICAweDhhLCAweGNhLCAweGE0 LCAweDdmCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGExX3JldHVybmVkYml0c1tdID0geworKyAgICAweDkwLCAweGJkLCAweDA1LCAw eDU2LCAweDZkLCAweGI1LCAweDIyLCAweGQ1LCAweGI5LCAweDVhLCAweDI5LCAweDJkLAorKyAg ICAweGU5LCAweDBiLCAweGUxLCAweGFjLCAweGRlLCAweDI3LCAweDBiLCAweGIwCisrfTsKKysK KysvKiBITUFDIFNIQS0yMjQgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDE3 LCAweDMyLCAweDJiLCAweDJlLCAweDZmLCAweDFiLCAweDljLCAweDZkLCAweDMxLCAweGUwLCAw eDM0LCAweDA3LAorKyAgICAweGNmLCAweGVkLCAweGY2LCAweGI2LCAweDVhLCAweDc2LCAweDRj LCAweGJjLCAweDYyLCAweDg1LCAweDAxLCAweDkwCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfbm9uY2VbXSA9IHsKKysg ICAgMHgzOCwgMHhiZiwgMHg1ZiwgMHgyMCwgMHhiMywgMHg2OCwgMHgyZiwgMHg0MywgMHg2MSwg MHgwNSwgMHg4ZiwgMHgyMworK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0geworKyAgICAweGMwLCAweGM5LCAweDQ1LCAweGFjLCAweDhkLCAweDI3LCAweDc3LCAweDA4 LCAweDBiLCAweDE3LCAweDZkLCAweGVkLAorKyAgICAweGMxLCAweDdkLCAweGQ1LCAweDA3LCAw eDlkLCAweDZlLCAweGY4LCAweDIzLCAweDJhLCAweDIyLCAweDEzLCAweGJkCisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJf YWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4YTQsIDB4M2MsIDB4ZTcsIDB4M2IsIDB4ZWEs IDB4MTksIDB4NDUsIDB4MzIsIDB4YzIsIDB4ODMsIDB4NmQsIDB4MjEsCisrICAgIDB4OGEsIDB4 YzAsIDB4ZWUsIDB4NjcsIDB4NDUsIDB4ZGUsIDB4MTMsIDB4N2QsIDB4OWQsIDB4NjEsIDB4MDAs IDB4M2IKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcltdID0geworKyAgICAweDE1LCAweDA1LCAw eDc0LCAweDRhLCAweDdmLCAweDhkLCAweDVjLCAweDYwLCAweDE2LCAweGU1LCAweDdiLCAweGFk LAorKyAgICAweGY1LCAweDQxLCAweDhmLCAweDU1LCAweDYwLCAweGM0LCAweDA5LCAweGVlLCAw eDFlLCAweDExLCAweDgxLCAweGFiCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfaW50X3JldHVybmVkYml0c1tdID0gewor KyAgICAweDZmLCAweGY1LCAweDlhLCAweGUyLCAweDU0LCAweDUzLCAweDMwLCAweDNkLCAweDVh LCAweDI3LCAweDI5LCAweDM4LAorKyAgICAweDI3LCAweGYyLCAweDBkLCAweDA1LCAweGU5LCAw eDI2LCAweGNiLCAweDE2LCAweGMzLCAweDUxLCAweDVmLCAweDEzLAorKyAgICAweDQxLCAweGZl LCAweDk5LCAweGYyCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAweDcz LCAweDgxLCAweDg4LCAweDg0LCAweDhmLCAweGVkLCAweDZmLCAweDEwLCAweDlmLCAweDkzLCAw eGJmLCAweDE3LAorKyAgICAweDM1LCAweDdjLCAweGVmLCAweGQ1LCAweDhkLCAweDI2LCAweGE2 LCAweDdhLCAweGU4LCAweDA5LCAweDM2LCAweDRmCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0cHIy W10gPSB7CisrICAgIDB4ZTYsIDB4Y2YsIDB4Y2YsIDB4N2UsIDB4MTIsIDB4ZTUsIDB4NDMsIDB4 ZDIsIDB4MzgsIDB4ZDgsIDB4MjQsIDB4NmYsCisrICAgIDB4NWEsIDB4MzcsIDB4NjgsIDB4YmYs IDB4NGYsIDB4YTAsIDB4ZmYsIDB4ZDUsIDB4NjEsIDB4OGEsIDB4OTMsIDB4ZTAKKyt9OworKwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9w cl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhhZiwgMHhmOSwgMHhkOCwgMHgxOSwgMHg5MSwg MHgzMCwgMHg4MiwgMHg2ZiwgMHhhOSwgMHgxZSwgMHg5ZCwgMHhkNywKKysgICAgMHhmMywgMHg1 MCwgMHhlMCwgMHhjNywgMHhkNSwgMHg2NCwgMHg5NiwgMHg3ZCwgMHg0YywgMHg0ZCwgMHg3OCwg MHgwMywKKysgICAgMHg2ZCwgMHhkOCwgMHg5ZSwgMHg3MgorK307CisrCisrLyogSE1BQyBTSEEt MjI0IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTIyNF9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHgxMSwgMHg4MiwgMHhmZCwg MHhkOSwgMHg0MiwgMHhmNCwgMHhmYSwgMHhjOCwgMHhmMiwgMHg0MSwgMHhlNiwgMHg1NCwKKysg ICAgMHgwMSwgMHhhZSwgMHgyMiwgMHg2ZSwgMHhjNiwgMHhhZiwgMHhhZiwgMHhkMCwgMHhhNiwg MHhiMiwgMHhlMiwgMHg2ZAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X25vbmNlW10gPSB7CisrICAgIDB4YTksIDB4NDgsIDB4 ZDcsIDB4OTIsIDB4MzksIDB4N2UsIDB4MmEsIDB4ZGMsIDB4MzAsIDB4MWYsIDB4MGUsIDB4MmIK Kyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTIyNF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHgxMSwgMHhk NSwgMHhmNCwgMHhiZCwgMHg2NywgMHg4YywgMHgzMSwgMHhjZiwgMHhhMywgMHgzZiwgMHgxZSwg MHg2YiwKKysgICAgMHhhOCwgMHgwNywgMHgwMiwgMHgwYiwgMHhjOCwgMHgyZSwgMHg2YywgMHg2 NCwgMHg0MSwgMHg1YiwgMHhjOCwgMHgzNworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dFtdID0gewor KyAgICAweDY4LCAweDE4LCAweGMyLCAweDA2LCAweGViLCAweDNlLCAweDA0LCAweDk1LCAweDQ0 LCAweDVlLCAweGZiLCAweGU2LAorKyAgICAweDQxLCAweGMxLCAweDVjLCAweGNjLCAweDQwLCAw eDJmLCAweGI3LCAweGQyLCAweDBmLCAweGYzLCAweDZiLCAweGU3CisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfaW50X3JldHVy bmVkYml0c1tdID0geworKyAgICAweDdmLCAweDQ1LCAweGM3LCAweDVkLCAweDMyLCAweGU2LCAw eDE3LCAweDYwLCAweGJhLCAweGRjLCAweGI4LCAweDQyLAorKyAgICAweDFiLCAweDljLCAweGYx LCAweGZhLCAweDNiLCAweDRkLCAweDI5LCAweDU0LCAweGM2LCAweDkwLCAweGZmLCAweDVjLAor KyAgICAweGNkLCAweGQ2LCAweGE5LCAweGNjCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfZW50cm9weWlucHV0cmVzZWVkW10g PSB7CisrICAgIDB4YzQsIDB4OGUsIDB4MzcsIDB4OTUsIDB4NjksIDB4NTMsIDB4MjgsIDB4ZDcs IDB4MzcsIDB4YmIsIDB4NzAsIDB4OTUsCisrICAgIDB4MWMsIDB4MDcsIDB4MWQsIDB4ZDksIDB4 YjcsIDB4ZTYsIDB4MWIsIDB4YmIsIDB4ZmUsIDB4NDEsIDB4ZWIsIDB4YzkKKyt9OworKworK19f Zmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIy NF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHg1MywgMHgxNywgMHhhMSwgMHg2 YSwgMHhmYSwgMHg3NywgMHg0NywgMHhiMCwgMHg5NSwgMHg1NiwgMHg5YSwgMHgyMCwKKysgICAg MHg1NywgMHhkZSwgMHg1YywgMHg4OSwgMHg5ZiwgMHg3ZiwgMHhlMiwgMHhkZSwgMHgxNywgMHgz YSwgMHg1MCwgMHgyMworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHgzYSwg MHgzMiwgMHhmOSwgMHg4NSwgMHgwYywgMHhjMSwgMHhlZCwgMHg3NiwgMHgyZCwgMHhkZiwgMHg0 MCwgMHhjMywKKysgICAgMHgwNiwgMHgyMiwgMHg2NiwgMHhkNCwgMHg5YSwgMHg5YSwgMHhmZiwg MHg1YSwgMHg3ZSwgMHg3YSwgMHhmMywgMHg5NgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3JldHVybmVkYml0c1tdID0gewor KyAgICAweDQzLCAweGI0LCAweDU3LCAweDVjLCAweDM4LCAweDI1LCAweDlkLCAweGFlLCAweGVj LCAweDk2LCAweGQxLCAweDg1LAorKyAgICAweDNhLCAweDg0LCAweDhkLCAweGZlLCAweDY4LCAw eGQ1LCAweDBlLCAweDVjLCAweDhmLCAweDY1LCAweGE1LCAweDRlLAorKyAgICAweDQ1LCAweDg0 LCAweGE4LCAweDk0CisrfTsKKysKKysvKiBITUFDIFNIQS0yNTYgUFIgICovCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlp bnB1dFtdID0geworKyAgICAweDRkLCAweGIwLCAweDQzLCAweGQ4LCAweDM0LCAweDRiLCAweDEw LCAweDcwLCAweGIxLCAweDhiLCAweGVkLCAweGVhLAorKyAgICAweDA3LCAweDkyLCAweDlmLCAw eDZjLCAweDc5LCAweDMxLCAweGFmLCAweDgxLCAweDI5LCAweGViLCAweDZlLCAweGNhLAorKyAg ICAweDMyLCAweDQ4LCAweDI4LCAweGU3LCAweDAyLCAweDVkLCAweGE2LCAweGE2CisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZf cHJfbm9uY2VbXSA9IHsKKysgICAgMHgzYSwgMHhhZSwgMHgxNSwgMHhhOSwgMHg5OSwgMHhkYywg MHhlNCwgMHg2NywgMHgzNCwgMHgzYiwgMHg3MCwgMHgxNSwKKysgICAgMHhhYSwgMHhkMywgMHgz MCwgMHg5YQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAg ICAweDEzLCAweDFkLCAweDI0LCAweDA0LCAweGIwLCAweDE4LCAweDgxLCAweDE1LCAweDIxLCAw eDUxLCAweDJhLCAweDI0LAorKyAgICAweDUyLCAweDYxLCAweGJlLCAweDY0LCAweDgyLCAweDZi LCAweDU1LCAweDJmLCAweGUyLCAweGYxLCAweDQwLCAweDdkLAorKyAgICAweDcxLCAweGQ4LCAw eDAxLCAweDg2LCAweDE1LCAweGI3LCAweDhiLCAweGI1CisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRkaXRpb25hbGlu cHV0W10gPSB7CisrICAgIDB4OGYsIDB4YTYsIDB4NTQsIDB4NWYsIDB4YjEsIDB4ZDAsIDB4ZDgs IDB4YzMsIDB4ZTcsIDB4MGMsIDB4MTUsIDB4YTksCisrICAgIDB4MjMsIDB4NmUsIDB4ZmUsIDB4 ZmIsIDB4OTMsIDB4ZjcsIDB4M2EsIDB4YmQsIDB4NTksIDB4MDEsIDB4ZmEsIDB4MTgsCisrICAg IDB4OGUsIDB4ZTksIDB4MWEsIDB4YTksIDB4NzgsIDB4ZmMsIDB4NzksIDB4MGIKKyt9OworKwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9w cl9lbnRyb3B5aW5wdXRwcltdID0geworKyAgICAweGNmLCAweDI0LCAweGI5LCAweGViLCAweGIz LCAweGQ0LCAweGNkLCAweDE3LCAweDM3LCAweDM4LCAweDc1LCAweDc5LAorKyAgICAweDE1LCAw eGNiLCAweDJkLCAweDc1LCAweDUxLCAweGYxLCAweGNjLCAweGFhLCAweDMyLCAweGE0LCAweGE3 LCAweDM2LAorKyAgICAweDdjLCAweDVjLCAweGU0LCAweDQ3LCAweGYxLCAweDNlLCAweDFkLCAw eGU1CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEyNTZfcHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweDUyLCAweDQyLCAw eGZhLCAweGViLCAweDg1LCAweGUwLCAweDMwLCAweDIyLCAweDc5LCAweDAwLCAweDE2LCAweGIy LAorKyAgICAweDg4LCAweDJmLCAweDE0LCAweDZhLCAweGI3LCAweGZjLCAweGI3LCAweDUzLCAw eGRjLCAweDRhLCAweDEyLCAweGVmLAorKyAgICAweDU0LCAweGQ2LCAweDMzLCAweGU5LCAweDIw LCAweGQ2LCAweGZkLCAweDU2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0MltdID0geworKyAg ICAweGY0LCAweGY2LCAweDQ5LCAweGExLCAweDJkLCAweDY0LCAweDJiLCAweDMwLCAweDU4LCAw eGY4LCAweGJkLCAweGI4LAorKyAgICAweDc1LCAweGViLCAweGJiLCAweDVlLCAweDFjLCAweDli LCAweDgxLCAweDZhLCAweGRhLCAweDE0LCAweDg2LCAweDZlLAorKyAgICAweGQwLCAweGRhLCAw eDE4LCAweGI3LCAweDg4LCAweGZiLCAweDU5LCAweGYzCisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0 cHIyW10gPSB7CisrICAgIDB4MjEsIDB4Y2QsIDB4NmUsIDB4NDYsIDB4YWQsIDB4OTksIDB4MDcs IDB4MTcsIDB4YjQsIDB4M2QsIDB4NzYsIDB4MGEsCisrICAgIDB4ZmYsIDB4NWIsIDB4NTIsIDB4 NTAsIDB4NzgsIDB4ZGYsIDB4MWYsIDB4MjQsIDB4MDYsIDB4MGQsIDB4M2YsIDB4NzQsCisrICAg IDB4YTksIDB4YzksIDB4MzcsIDB4Y2YsIDB4ZDgsIDB4MjYsIDB4MjUsIDB4OTEKKyt9OworKwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9w cl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhhNywgMHhhZiwgMHgyZiwgMHgyOSwgMHhlMCwg MHgzYSwgMHg3MiwgMHg5NSwgMHg5NiwgMHgxYywgMHhhOSwgMHhmMCwKKysgICAgMHg0YSwgMHgx NywgMHg0ZCwgMHg2NiwgMHgwNiwgMHgxMCwgMHhiZiwgMHgzOSwgMHg4OSwgMHg4OCwgMHhiOCwg MHg5MSwKKysgICAgMHgzNywgMHgxOCwgMHg5OSwgMHhjZiwgMHg4YywgMHg1MywgMHgzYiwgMHg3 ZQorK307CisrCisrLyogSE1BQyBTSEEtMjU2IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9lbnRyb3B5aW5wdXRbXSA9IHsK KysgICAgMHg5NiwgMHhiNywgMHg1MywgMHgyMiwgMHgxZSwgMHg1MiwgMHgyYSwgMHg5NiwgMHhi MSwgMHgxNSwgMHgzYywgMHgzNSwKKysgICAgMHg1YSwgMHg4YiwgMHhkMywgMHg0YSwgMHhhNiwg MHg2YywgMHg4MywgMHgwYSwgMHg3ZCwgMHhhMywgMHgyMywgMHgzZCwKKysgICAgMHg0MywgMHhh MSwgMHgwNywgMHgyYywgMHgyZCwgMHhlMywgMHg4MSwgMHhjYworK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X25vbmNlW10gPSB7 CisrICAgIDB4ZjEsIDB4YWMsIDB4OTcsIDB4Y2IsIDB4NWUsIDB4MDYsIDB4NDgsIDB4ZDIsIDB4 OTQsIDB4YmUsIDB4MTUsIDB4MmUsCisrICAgIDB4YzcsIDB4ZmMsIDB4YzIsIDB4MDEKKyt9Owor KworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTI1Nl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHg5OCwgMHhjNSwgMHgx ZSwgMHgzNSwgMHg1ZSwgMHg4OSwgMHgwZCwgMHhjZSwgMHg2NCwgMHg2ZCwgMHgxOCwgMHhhNywK KysgICAgMHg1YSwgMHhjNiwgMHhmMywgMHhlNywgMHhkNiwgMHg5ZSwgMHhjMCwgMHhlYSwgMHhi NywgMHgzYSwgMHg4ZCwgMHg2NSwKKysgICAgMHhiOCwgMHhlYiwgMHgxMCwgMHhkNywgMHg1Nywg MHgxOCwgMHhhMCwgMHgzMgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDFi LCAweDEwLCAweGFmLCAweGFjLCAweGQwLCAweDY1LCAweDk1LCAweGFkLCAweDA0LCAweGFkLCAw eDAzLCAweDFjLAorKyAgICAweGUwLCAweDQwLCAweGQ2LCAweDNlLCAweDFjLCAweDQ2LCAweDUz LCAweDM5LCAweDdjLCAweGUyLCAweGJjLCAweGRhLAorKyAgICAweDhjLCAweGEyLCAweDMzLCAw eGE3LCAweDlhLCAweDI2LCAweGQzLCAweDI3CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfaW50X3JldHVybmVkYml0c1tdID0g eworKyAgICAweGJhLCAweDYxLCAweDBlLCAweDU1LCAweGZlLCAweDExLCAweDhhLCAweDllLCAw eDBmLCAweDgwLCAweGRmLCAweDFkLAorKyAgICAweDAzLCAweDBhLCAweGZlLCAweDE1LCAweDk0 LCAweDI4LCAweDRiLCAweGJhLCAweGY0LCAweDlmLCAweDUxLCAweDI1LAorKyAgICAweDg4LCAw eGU1LCAweDRlLCAweGZiLCAweGFmLCAweGNlLCAweDY5LCAweDkwCisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfZW50cm9weWlu cHV0cmVzZWVkW10gPSB7CisrICAgIDB4NjIsIDB4N2YsIDB4MWUsIDB4NmIsIDB4ZTgsIDB4OGUs IDB4ZTEsIDB4MzUsIDB4N2QsIDB4OWIsIDB4NGYsIDB4YzcsCisrICAgIDB4ZWMsIDB4YzgsIDB4 YWMsIDB4ZWYsIDB4NmIsIDB4MTMsIDB4OWUsIDB4MDUsIDB4NTYsIDB4YzEsIDB4MDgsIDB4Zjks CisrICAgIDB4MmYsIDB4MGYsIDB4MjcsIDB4OWMsIDB4ZDQsIDB4MTUsIDB4ZWQsIDB4MmQKKyt9 OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHhjNywgMHg3Niwg MHg2ZSwgMHhhOSwgMHhkMiwgMHhiMiwgMHg3NiwgMHg0MCwgMHg4MiwgMHgyNSwgMHgyYywgMHhi MywKKysgICAgMHg2ZiwgMHhhYywgMHhlOSwgMHg3NCwgMHhlZiwgMHg4ZiwgMHgzYywgMHg4ZSwg MHhjZCwgMHhmMSwgMHhiZiwgMHhiMywKKysgICAgMHg0OSwgMHg3NywgMHgzNCwgMHg4OCwgMHg1 MiwgMHgzNiwgMHhlNiwgMHgyZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAg MHg4ZCwgMHhiOCwgMHgwYywgMHhkMSwgMHhiZiwgMHg3MCwgMHhmNiwgMHgxOSwgMHhjMywgMHg0 MSwgMHg4MCwgMHg5ZiwKKysgICAgMHhlMSwgMHhhNSwgMHhhNCwgMHgxZiwgMHgyYywgMHgyNiwg MHhiMSwgMHhlNSwgMHhkOCwgMHhlYiwgMHhiZSwgMHhmOCwKKysgICAgMHhkZiwgMHg4OCwgMHg2 YSwgMHg4OSwgMHhkNiwgMHgwNSwgMHhkOCwgMHg5ZAorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3JldHVybmVkYml0c1tdID0g eworKyAgICAweDQzLCAweDEyLCAweDJhLCAweDJjLCAweDQwLCAweDUzLCAweDJlLCAweDdjLCAw eDY2LCAweDM0LCAweGFjLCAweGMzLAorKyAgICAweDQzLCAweGUzLCAweGUwLCAweDZhLCAweGZj LCAweGZhLCAweGVhLCAweDg3LCAweDIxLCAweDFmLCAweGUyLCAweDI2LAorKyAgICAweGM0LCAw eGY5LCAweDA5LCAweDlhLCAweDBkLCAweDZlLCAweDdmLCAweGUwCisrfTsKKysKKysvKiBITUFD IFNIQS0zODQgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDY5LCAweDgxLCAw eDk4LCAweDg4LCAweDQ0LCAweGY1LCAweGQ2LCAweDJlLCAweDAwLCAweDA4LCAweDNiLCAweGM1 LAorKyAgICAweGZiLCAweGQ3LCAweDhlLCAweDZmLCAweDIzLCAweGY4LCAweDZkLCAweDA5LCAw eGQ2LCAweDg1LCAweDQ5LCAweGQxLAorKyAgICAweGY4LCAweDZkLCAweGE0LCAweDU4LCAweDU0 LCAweGZkLCAweDg4LCAweGE5CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfbm9uY2VbXSA9IHsKKysgICAgMHg2ZSwgMHgz OCwgMHg4MSwgMHhjYSwgMHhiNywgMHhlOCwgMHg2ZSwgMHg2NiwgMHg0OSwgMHg4YSwgMHhiMiwg MHg1OSwKKysgICAgMHhlZSwgMHgxNiwgMHhjOSwgMHhkZQorK307CisrCisrX19maXBzX2NvbnN0 c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweGZlLCAweDRjLCAweGQ5LCAweGY0LCAweDc4 LCAweDNiLCAweDA4LCAweDQxLCAweDhkLCAweDhmLCAweDU1LCAweGM0LAorKyAgICAweDQzLCAw eDU2LCAweGI2LCAweDEyLCAweDM2LCAweDZiLCAweDMwLCAweGI3LCAweDVlLCAweGUxLCAweGI5 LCAweDQ3LAorKyAgICAweDA0LCAweGIxLCAweDRlLCAweGE5LCAweDAwLCAweGExLCAweDUyLCAw eGExCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEzODRfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4ODksIDB4ZTksIDB4 Y2MsIDB4OGYsIDB4MjcsIDB4M2MsIDB4MjYsIDB4ZDEsIDB4OTUsIDB4YzgsIDB4N2QsIDB4MGYs CisrICAgIDB4NWIsIDB4MWEsIDB4ZjAsIDB4NzgsIDB4MzksIDB4NTYsIDB4NmYsIDB4YTQsIDB4 MjMsIDB4ZTcsIDB4ZDEsIDB4ZGEsCisrICAgIDB4N2MsIDB4NjYsIDB4MzMsIDB4YTAsIDB4OTAs IDB4YzksIDB4OTIsIDB4ODgKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0geworKyAgICAw eGJlLCAweDNkLCAweDdjLCAweDBkLCAweGNhLCAweGRhLCAweDdjLCAweDQ5LCAweGI4LCAweDEy LCAweDM2LCAweGMwLAorKyAgICAweGRiLCAweGFkLCAweDM1LCAweGE4LCAweGM3LCAweDBiLCAw eDJhLCAweDJjLCAweDY5LCAweDZkLCAweDI1LCAweDU2LAorKyAgICAweDYzLCAweDgyLCAweDEx LCAweDNlLCAweGE3LCAweDMzLCAweDcwLCAweDcyCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfaW50X3JldHVybmVkYml0 c1tdID0geworKyAgICAweDgyLCAweDNkLCAweGU2LCAweDU0LCAweDgwLCAweDQyLCAweGY4LCAw eGJhLCAweDkwLCAweDRmLCAweDA2LCAweGE2LAorKyAgICAweGQyLCAweDdmLCAweGJmLCAweDc5 LCAweDdjLCAweDEyLCAweDdkLCAweGE2LCAweGEyLCAweDY2LCAweGU4LCAweGE2LAorKyAgICAw eGMwLCAweGQ2LCAweDRhLCAweDU1LCAweGJmLCAweGQ4LCAweDBhLCAweGM1LCAweGY4LCAweDAz LCAweDg4LCAweGRkLAorKyAgICAweDhlLCAweDg3LCAweGQxLCAweDVhLCAweDQ4LCAweDI2LCAw eDcyLCAweDJhLCAweDhlLCAweGNmLCAweGVlLCAweGJhCisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfYWRkaXRpb25hbGlu cHV0MltdID0geworKyAgICAweDhmLCAweGZmLCAweGQ5LCAweDg0LCAweGJiLCAweDg1LCAweDNh LCAweDY2LCAweGExLCAweDIxLCAweGNlLCAweGIyLAorKyAgICAweDNhLCAweDNhLCAweDE3LCAw eDIyLCAweDE5LCAweGFlLCAweGM3LCAweGI2LCAweDYzLCAweDgxLCAweGQ1LCAweGZmLAorKyAg ICAweDBkLCAweGM4LCAweGUxLCAweGFmLCAweDU3LCAweGQyLCAweGNiLCAweDYwCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf cHJfZW50cm9weWlucHV0cHIyW10gPSB7CisrICAgIDB4ZDcsIDB4ZmIsIDB4YzksIDB4ZTgsIDB4 ZTIsIDB4ZjIsIDB4YWEsIDB4NGMsIDB4YjgsIDB4NTEsIDB4MmYsIDB4ZTEsCisrICAgIDB4MjIs IDB4YmEsIDB4ZjMsIDB4ZGEsIDB4MGEsIDB4MTksIDB4NzYsIDB4NzEsIDB4NTcsIDB4YjIsIDB4 MWQsIDB4OTQsCisrICAgIDB4MDksIDB4NjksIDB4NmMsIDB4ZDMsIDB4OTcsIDB4NTEsIDB4ODEs IDB4ODcKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTM4NF9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhlNiwgMHgxOSwgMHgy OCwgMHhhOCwgMHgyMSwgMHhjZSwgMHg1ZSwgMHhkYiwgMHgyNCwgMHg3OSwgMHg4YywgMHg3NiwK KysgICAgMHg1ZCwgMHg3MywgMHhiMiwgMHhkZiwgMHhhYywgMHhlZiwgMHg4NSwgMHhhNywgMHgz YiwgMHgxOSwgMHgwOSwgMHg4YiwKKysgICAgMHg3ZiwgMHg5OCwgMHgyOCwgMHhhOSwgMHg5Mywg MHhkOCwgMHg3YSwgMHhhZCwgMHg1NSwgMHg4YiwgMHgyNCwgMHg5ZCwKKysgICAgMHhlNiwgMHg5 OCwgMHhmZSwgMHg0NywgMHhkNSwgMHg0OCwgMHhjMSwgMHgyMywgMHhkOCwgMHgxZCwgMHg2Miwg MHg3NQorK307CisrCisrLyogSE1BQyBTSEEtMzg0IE5vIFBSICAqLworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9lbnRyb3B5aW5wdXRbXSA9 IHsKKysgICAgMHhjMywgMHg1NiwgMHgyYiwgMHgxZCwgMHhjMiwgMHhiYiwgMHhhOCwgMHhmMCwg MHhhZSwgMHgxYiwgMHgwZCwgMHhkMywKKysgICAgMHg1YSwgMHg2YywgMHhkYSwgMHg1NywgMHg4 ZSwgMHhhNSwgMHg4YSwgMHgwZCwgMHg2YywgMHg0YiwgMHgxOCwgMHhiMSwKKysgICAgMHgwNCwg MHgzZSwgMHhiNCwgMHg5OSwgMHgzNSwgMHhjNCwgMHhjMCwgMHg1ZgorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X25vbmNlW10g PSB7CisrICAgIDB4YzUsIDB4NDksIDB4MWUsIDB4NjYsIDB4MjcsIDB4OTIsIDB4YmUsIDB4ZWMs IDB4YjUsIDB4MWUsIDB4NGIsIDB4YjEsCisrICAgIDB4MzgsIDB4ZTMsIDB4ZWIsIDB4NjIKKyt9 OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTM4NF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHhiZSwgMHhlNywg MHg2YiwgMHg1NywgMHhkZSwgMHg4OCwgMHgxMSwgMHg5NiwgMHg5YiwgMHg2ZSwgMHhlYSwgMHhl NSwKKysgICAgMHg2MywgMHg4MywgMHg0YywgMHhiNiwgMHg4ZCwgMHg2NiwgMHhhYSwgMHgxZiwg MHg4YiwgMHg1NCwgMHhlNywgMHg2MiwKKysgICAgMHg2ZCwgMHg1YSwgMHhmYywgMHhiZiwgMHg5 NywgMHhiYSwgMHhjZCwgMHg3NworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAw eGU1LCAweDI4LCAweDVmLCAweDQzLCAweGY1LCAweDgzLCAweDZlLCAweDBhLCAweDgzLCAweDVj LCAweGUzLCAweDgxLAorKyAgICAweDAzLCAweGYyLCAweGY4LCAweDc4LCAweDAwLCAweDdjLCAw eDk1LCAweDg3LCAweDE2LCAweGQ2LCAweDZjLCAweDU4LAorKyAgICAweDMzLCAweDZjLCAweDUz LCAweDM1LCAweDBkLCAweDY2LCAweGUzLCAweGNlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfaW50X3JldHVybmVkYml0c1td ID0geworKyAgICAweGUyLCAweDFmLCAweGYzLCAweGRhLCAweDBkLCAweDE5LCAweDk5LCAweDg3 LCAweGM0LCAweDkwLCAweGEyLCAweDMxLAorKyAgICAweGNhLCAweDJhLCAweDg5LCAweDU4LCAw eDQzLCAweDQ0LCAweGI4LCAweGRlLCAweGNmLCAweGE0LCAweGJlLCAweDNiLAorKyAgICAweDUz LCAweDI2LCAweDIyLCAweDMxLCAweDc2LCAweDQxLCAweDIyLCAweGI1LCAweGE4LCAweDcwLCAw eDJmLCAweDRiLAorKyAgICAweDY0LCAweDk1LCAweDRkLCAweDQ4LCAweDk2LCAweDM1LCAweGU2 LCAweGJkLCAweDNjLCAweDM0LCAweGRiLCAweDFiCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfZW50cm9weWlucHV0cmVzZWVk W10gPSB7CisrICAgIDB4NzcsIDB4NjEsIDB4YmEsIDB4YmMsIDB4ZjIsIDB4YzEsIDB4ZjMsIDB4 NGIsIDB4ODYsIDB4NjUsIDB4ZmQsIDB4NDgsCisrICAgIDB4MGUsIDB4M2MsIDB4MDIsIDB4NWUs IDB4YTIsIDB4N2EsIDB4NmIsIDB4N2MsIDB4ZWQsIDB4MjEsIDB4NWUsIDB4ZjksCisrICAgIDB4 Y2QsIDB4Y2QsIDB4NzcsIDB4MDcsIDB4MmIsIDB4YmUsIDB4YzUsIDB4NWMKKyt9OworKworK19f Zmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4 NF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHgxOCwgMHgyNCwgMHg1ZiwgMHhj NiwgMHg4NCwgMHhkMSwgMHg2NywgMHhjMywgMHg5YSwgMHgxMSwgMHhhNSwgMHg4YywKKysgICAg MHgwNywgMHgzOSwgMHgyMSwgMHg4MywgMHg0ZCwgMHgwNCwgMHhjNCwgMHg2YSwgMHgyOCwgMHgx OSwgMHhjZiwgMHg5MiwKKysgICAgMHgyMSwgMHhkOSwgMHg5ZSwgMHg0MSwgMHg3MiwgMHg2Yywg MHg5ZSwgMHg2MworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHg5NiwgMHg2 NywgMHg0MSwgMHgyOCwgMHg5YiwgMHhiNywgMHg5MiwgMHg4ZCwgMHg2NCwgMHgzYiwgMHhlNCwg MHhjZiwKKysgICAgMHg3ZSwgMHhhYSwgMHgxZSwgMHhiMSwgMHg0YiwgMHgxZCwgMHgwOSwgMHg1 NiwgMHg2NywgMHg5YywgMHhjNiwgMHg2ZCwKKysgICAgMHgzYiwgMHhlOCwgMHg5MSwgMHg5ZCwg MHhlMSwgMHg4YSwgMHhiNywgMHgzMgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3JldHVybmVkYml0c1tdID0geworKyAgICAw eGUzLCAweDU5LCAweDYxLCAweDM4LCAweDkyLCAweGVjLCAweGUyLCAweDNjLCAweGZmLCAweGI3 LCAweGRiLCAweDE5LAorKyAgICAweDBmLCAweDViLCAweDkzLCAweDY4LCAweDBkLCAweGE0LCAw eDk0LCAweDQwLCAweDcyLCAweDBiLCAweGUwLCAweGVkLAorKyAgICAweDRkLCAweGNkLCAweDY4 LCAweGEwLCAweDFlLCAweGZlLCAweDY3LCAweGIyLCAweGZhLCAweDIxLCAweDU2LCAweDc0LAor KyAgICAweGE0LCAweGFkLCAweGNmLCAweGI3LCAweDYwLCAweDY2LCAweDJlLCAweDQwLCAweGRl LCAweDgyLCAweGNhLCAweGZiCisrfTsKKysKKysvKiBITUFDIFNIQS01MTIgUFIgICovCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2Vu dHJvcHlpbnB1dFtdID0geworKyAgICAweGFhLCAweDllLCAweDQ1LCAweDY3LCAweDBlLCAweDAw LCAweDJhLCAweDY3LCAweDk4LCAweGQ2LCAweGRhLCAweDBiLAorKyAgICAweDBmLCAweDE3LCAw eDdlLCAweGFjLCAweGZkLCAweDI3LCAweGM0LCAweGNhLCAweDg0LCAweGRmLCAweGRlLCAweGJh LAorKyAgICAweDg1LCAweGQ5LCAweGJlLCAweDhmLCAweGYzLCAweGZmLCAweDkxLCAweDRkCisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGE1MTJfcHJfbm9uY2VbXSA9IHsKKysgICAgMHg4YywgMHg0OSwgMHgyZiwgMHg1OCwgMHgxZSwg MHg3YSwgMHhkYSwgMHg0YiwgMHg3ZSwgMHg4YSwgMHgzMCwgMHg3YiwKKysgICAgMHg4NiwgMHhl YSwgMHhhZiwgMHhhMgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0g eworKyAgICAweDcxLCAweGUxLCAweGJiLCAweGFkLCAweGE3LCAweDRiLCAweDJlLCAweDMxLCAw eDNiLCAweDBiLCAweGVjLCAweDI0LAorKyAgICAweDk5LCAweDM4LCAweGJjLCAweGFhLCAweDA1 LCAweDRjLCAweDQ2LCAweDQ0LCAweGZhLCAweGFkLCAweDhlLCAweDAyLAorKyAgICAweGMxLCAw eDdlLCAweGFkLCAweGVjLCAweDU0LCAweGE2LCAweGQwLCAweGFkCisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfYWRkaXRp b25hbGlucHV0W10gPSB7CisrICAgIDB4M2QsIDB4NmUsIDB4YTYsIDB4YTgsIDB4MjksIDB4MmEs IDB4YjIsIDB4ZjUsIDB4OTgsIDB4NDIsIDB4ZTQsIDB4OTIsCisrICAgIDB4NzgsIDB4MjIsIDB4 NjcsIDB4ZmQsIDB4MWIsIDB4MTUsIDB4MWUsIDB4MjksIDB4YWEsIDB4NzEsIDB4M2MsIDB4M2Ms CisrICAgIDB4ZTcsIDB4MDUsIDB4MjAsIDB4YTksIDB4MjksIDB4YzYsIDB4NzUsIDB4NzEKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9wcl9lbnRyb3B5aW5wdXRwcltdID0geworKyAgICAweGFiLCAweGI5LCAweDE2LCAweGQ4 LCAweDU1LCAweDM1LCAweDU0LCAweGI3LCAweDk3LCAweDNmLCAweDk0LCAweGJjLAorKyAgICAw eDJmLCAweDdjLCAweDcwLCAweGM3LCAweGQwLCAweGVkLCAweGI3LCAweDRiLCAweGY3LCAweGY2 LCAweDZjLCAweDAzLAorKyAgICAweDBjLCAweGIwLCAweDAzLCAweGQ4LCAweGJiLCAweDcxLCAw eGQ5LCAweDEwCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGE1MTJfcHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweDhlLCAw eGQzLCAweGZkLCAweDUyLCAweDllLCAweDgzLCAweDA4LCAweDQ5LCAweDE4LCAweDZlLCAweDIz LCAweDU2LAorKyAgICAweDVjLCAweDQ1LCAweDkzLCAweDM0LCAweDA1LCAweGUyLCAweDk4LCAw eDhmLCAweDBjLCAweGQ0LCAweDMyLCAweDBjLAorKyAgICAweGZkLCAweGRhLCAweDVmLCAweDky LCAweDNhLCAweDhjLCAweDgxLCAweGJkLCAweGY2LCAweDZjLCAweDU1LCAweGZkLAorKyAgICAw eGI4LCAweDIwLCAweGNlLCAweDhkLCAweDk3LCAweDI3LCAweGU4LCAweGU4LCAweGUwLCAweGIz LCAweDg1LCAweDUwLAorKyAgICAweGEyLCAweGMyLCAweGIyLCAweDk1LCAweDFkLCAweDQ4LCAw eGQzLCAweDdiLCAweDRiLCAweDc4LCAweDEzLCAweDM1LAorKyAgICAweDA1LCAweDE3LCAweGJl LCAweDBkCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAweGMzLCAweGZj LCAweDk1LCAweGFhLCAweDY5LCAweDA2LCAweGFlLCAweDU5LCAweDQxLCAweGNlLCAweDI2LCAw eDA4LAorKyAgICAweDI5LCAweDZkLCAweDQ1LCAweGRhLCAweGU4LCAweGIzLCAweDZjLCAweDk1 LCAweDYwLCAweDBmLCAweDcwLCAweDJjLAorKyAgICAweDEwLCAweGJhLCAweDM4LCAweDhjLCAw eGNmLCAweDI5LCAweDk5LCAweGFhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9weWlucHV0cHIyW10gPSB7Cisr ICAgIDB4M2IsIDB4OWEsIDB4MjUsIDB4Y2UsIDB4ZDcsIDB4ZjksIDB4NWMsIDB4ZDEsIDB4M2Es IDB4M2UsIDB4YWEsIDB4NzEsCisrICAgIDB4MTQsIDB4M2UsIDB4MTksIDB4ZTgsIDB4Y2UsIDB4 ZTYsIDB4ZmUsIDB4NTEsIDB4ODQsIDB4ZTksIDB4MWIsIDB4ZmUsCisrICAgIDB4M2YsIDB4YTcs IDB4ZjIsIDB4ZmQsIDB4NzYsIDB4NWYsIDB4NmEsIDB4ZTcKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9yZXR1cm5lZGJp dHNbXSA9IHsKKysgICAgMHhiNywgMHg4MiwgMHhhOSwgMHg1NywgMHg4MSwgMHg2NywgMHg1Mywg MHhiNSwgMHhhMSwgMHhlOSwgMHgzZCwgMHgzNSwKKysgICAgMHhmOSwgMHhlNCwgMHg5NywgMHhi ZSwgMHhhNiwgMHhjYSwgMHhmMSwgMHgwMSwgMHgxMywgMHgwOSwgMHhlNywgMHgyMSwKKysgICAg MHhjMCwgMHhlZCwgMHg5MywgMHg1ZCwgMHg0YiwgMHhmNCwgMHhlYiwgMHg4ZCwgMHg1MywgMHgy NSwgMHg4YSwgMHhjNCwKKysgICAgMHhiMSwgMHg2ZiwgMHg2ZSwgMHgzNywgMHhjZCwgMHgyZSwg MHhhYywgMHgzOSwgMHhiMiwgMHhiNiwgMHg5OSwgMHhhMywKKysgICAgMHg4MiwgMHgwMCwgMHhi MCwgMHgyMSwgMHhmMCwgMHhjNywgMHgyZiwgMHg0YywgMHg3MywgMHg5MiwgMHhmZCwgMHgwMCwK KysgICAgMHhiNiwgMHhhZiwgMHhiYywgMHhkMworK307CisrCisrLyogSE1BQyBTSEEtNTEyIE5v IFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTUxMl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHg2ZSwgMHg4NSwgMHhlNiwgMHgyNSwg MHg5NiwgMHgyOSwgMHhhNywgMHg1MiwgMHg1YiwgMHg2MCwgMHhiYSwgMHhhYSwKKysgICAgMHhk ZSwgMHhkYiwgMHgzNiwgMHgwYSwgMHg1MSwgMHg5YSwgMHgxNSwgMHhhZSwgMHg2ZSwgMHgxOCwg MHhkMywgMHhmZSwKKysgICAgMHgzOSwgMHhiOSwgMHg0YSwgMHg5NiwgMHhmOCwgMHg3NywgMHhj YiwgMHg5NQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhNTEyX25vbmNlW10gPSB7CisrICAgIDB4ZTAsIDB4YTYsIDB4NWQsIDB4MDgs IDB4YzMsIDB4N2MsIDB4YWUsIDB4MjUsIDB4MmUsIDB4ODAsIDB4ZDEsIDB4M2UsCisrICAgIDB4 ZDksIDB4YWYsIDB4NDMsIDB4M2MKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9IHsKKysgICAgMHg1MywgMHg5OSwgMHg1MiwgMHg1ZiwgMHgxMSwgMHhhOSwgMHg2NCwgMHg2 NiwgMHgyMCwgMHg1ZSwgMHgxYiwgMHg1ZiwKKysgICAgMHg0MiwgMHhiMywgMHhmNCwgMHhkYSwg MHhlZCwgMHhiYiwgMHg2MywgMHhjMSwgMHgyMywgMHhhZiwgMHhkMCwgMHgwMSwKKysgICAgMHg5 MCwgMHgzYiwgMHhkMCwgMHg3OCwgMHhlNCwgMHgwYiwgMHhhNywgMHgyMAorK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0 aW9uYWxpbnB1dFtdID0geworKyAgICAweDg1LCAweDkwLCAweDgwLCAweGQzLCAweDk4LCAweGYx LCAweDUzLCAweDZkLCAweDY4LCAweDE1LCAweDhmLCAweGU1LAorKyAgICAweDYwLCAweDNmLCAw eDE3LCAweDI5LCAweDU1LCAweDhkLCAweDMzLCAweGIxLCAweDQ1LCAweDY0LCAweDY0LCAweDhk LAorKyAgICAweDUwLCAweDIxLCAweDg5LCAweGFlLCAweGY2LCAweGZkLCAweDMyLCAweDczCisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGE1MTJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweDI4LCAweDU2LCAweDMwLCAweDZm LCAweGY0LCAweGExLCAweDQ4LCAweGUwLCAweGM5LCAweGY1LCAweDc1LCAweDkwLAorKyAgICAw eGNjLCAweGZiLCAweGRmLCAweGRmLCAweDcxLCAweDNkLCAweDBhLCAweDlhLCAweDAzLCAweDY1 LCAweDNiLCAweDE4LAorKyAgICAweDYxLCAweGUzLCAweGQxLCAweGRhLCAweGNjLCAweDRhLCAw eGZlLCAweDU1LCAweDM4LCAweGY4LCAweDIxLCAweDZiLAorKyAgICAweGZhLCAweDE4LCAweDAx LCAweDQyLCAweDM5LCAweDJmLCAweDk5LCAweDUzLCAweDM4LCAweDE1LCAweDgyLCAweDM0LAor KyAgICAweGM1LCAweDkzLCAweDkyLCAweGJjLCAweDRkLCAweDc1LCAweDFhLCAweDVmLCAweDIx LCAweDI3LCAweGNjLCAweGExLAorKyAgICAweGIxLCAweDU3LCAweDY5LCAweGU4CisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJf ZW50cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4OGMsIDB4NTIsIDB4N2UsIDB4NzcsIDB4 NzIsIDB4M2YsIDB4YTMsIDB4MDQsIDB4OTcsIDB4MTAsIDB4OWIsIDB4NDEsCisrICAgIDB4YmQs IDB4ZTgsIDB4ZmYsIDB4ODksIDB4ZWQsIDB4ODAsIDB4ZTMsIDB4YmQsIDB4YWEsIDB4MTIsIDB4 MmQsIDB4Y2EsCisrICAgIDB4NzUsIDB4ODIsIDB4MzYsIDB4NzcsIDB4ODgsIDB4Y2QsIDB4YTYs IDB4NzMKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHg3 ZSwgMHgzMiwgMHhlMywgMHg2OSwgMHg2OSwgMHgwNywgMHgzNCwgMHhhMiwgMHgxNiwgMHhhMiwg MHg1ZCwgMHgxYSwKKysgICAgMHgxMCwgMHg5MSwgMHhkMywgMHhlMiwgMHgyMSwgMHhhMiwgMHhh MywgMHhkZCwgMHhjZCwgMHgwYywgMHgwOSwgMHg4NiwKKysgICAgMHgxMSwgMHhlMSwgMHg1MCwg MHhmZiwgMHg1YywgMHhiNywgMHhlYiwgMHg1YworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9 IHsKKysgICAgMHg3ZiwgMHg3OCwgMHg2NiwgMHhkOCwgMHhmYiwgMHg2NywgMHhjZiwgMHg4ZCwg MHg4YywgMHgwOCwgMHgzMCwgMHhhNSwKKysgICAgMHhmOCwgMHg3ZCwgMHhjZiwgMHg0NCwgMHg1 OSwgMHhjZSwgMHhmOCwgMHhkZiwgMHg1OCwgMHhkMywgMHg2MCwgMHhjYiwKKysgICAgMHhhOCwg MHg2MCwgMHhiOSwgMHgwNywgMHhjNCwgMHhiMSwgMHg5NSwgMHg0OAorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3JldHVybmVk Yml0c1tdID0geworKyAgICAweGRmLCAweGE3LCAweDM2LCAweGQ0LCAweGRjLCAweDVkLCAweDRk LCAweDMxLCAweGFkLCAweDY5LCAweDQ2LCAweDlmLAorKyAgICAweGYxLCAweDdjLCAweGQ3LCAw eDNiLCAweDRmLCAweDU1LCAweGYyLCAweGQ3LCAweGI5LCAweDlkLCAweGFkLCAweDdhLAorKyAg ICAweDc5LCAweDA4LCAweDU5LCAweGE1LCAweGRjLCAweDc0LCAweGY1LCAweDliLCAweDczLCAw eGQyLCAweDEzLCAweDI1LAorKyAgICAweDBiLCAweDgxLCAweDA4LCAweDA4LCAweDI1LCAweGZi LCAweDM5LCAweGYyLCAweGYwLCAweGEzLCAweGE0LCAweDhkLAorKyAgICAweGVmLCAweDA1LCAw eDllLCAweGI4LCAweGM3LCAweDUyLCAweGU0LCAweDBlLCAweDQyLCAweGFhLCAweDdjLCAweDc5 LAorKyAgICAweGMyLCAweGQ2LCAweGZkLCAweGE1CisrfTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4x LjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjEu MS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMS4x LXByZTgvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTgtMDctMjUgMTc6 MjY6NTguNDA4NjI0Nzc2ICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBz L2ZpcHNfZHNhX3NlbGZ0ZXN0LmMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MDg2MjQ3NzYgKzAyMDAK K0BAIC0wLDAgKzEsMTk1IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIw MTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Cisr ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1 ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiaW50 ZXJuYWwvZmlwc19pbnQuaCIKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlICJmaXBz X2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wW10gPSB7CisrICAgIDB4YTgsIDB4NTMsIDB4NzgsIDB4 ZDgsIDB4ZmQsIDB4M2YsIDB4OGQsIDB4NzIsIDB4ZWMsIDB4NzQsIDB4MTgsIDB4MDgsCisrICAg IDB4MGQsIDB4YTIsIDB4MTMsIDB4MTcsIDB4ZTQsIDB4M2UsIDB4YzQsIDB4YjYsIDB4MmIsIDB4 YTgsIDB4YzgsIDB4NjIsCisrICAgIDB4M2IsIDB4N2UsIDB4NGQsIDB4MDQsIDB4NDQsIDB4MWQs IDB4ZDEsIDB4YTAsIDB4NjUsIDB4ODYsIDB4NjIsIDB4NTksCisrICAgIDB4NjQsIDB4OTMsIDB4 Y2EsIDB4OGUsIDB4OWUsIDB4OGYsIDB4YmIsIDB4N2UsIDB4MzQsIDB4YWEsIDB4ZGQsIDB4YjYs CisrICAgIDB4MmUsIDB4NWQsIDB4NjcsIDB4YjYsIDB4ZDAsIDB4OWEsIDB4NmUsIDB4NjEsIDB4 YjcsIDB4NjksIDB4ZTcsIDB4YzMsCisrICAgIDB4NTIsIDB4YWEsIDB4MmIsIDB4MTAsIDB4ZTIs IDB4MGMsIDB4YTAsIDB4NjMsIDB4NjksIDB4NjMsIDB4YjUsIDB4NTIsCisrICAgIDB4M2UsIDB4 ODYsIDB4NDcsIDB4MGQsIDB4ZWMsIDB4YmIsIDB4ZWQsIDB4YTAsIDB4MjcsIDB4ZTcsIDB4OTcs IDB4ZTcsCisrICAgIDB4YjYsIDB4NzYsIDB4MzUsIDB4ZDQsIDB4ZDQsIDB4OWMsIDB4MzAsIDB4 NzAsIDB4MGUsIDB4NzQsIDB4YWYsIDB4OGEsCisrICAgIDB4MGYsIDB4ZjEsIDB4NTYsIDB4YTgs IDB4MDEsIDB4YWYsIDB4NTcsIDB4YTIsIDB4NmUsIDB4NzAsIDB4NzgsIDB4ZjEsCisrICAgIDB4 ZDgsIDB4MmYsIDB4NzQsIDB4OTAsIDB4OGUsIDB4Y2IsIDB4NmQsIDB4MDcsIDB4ZTcsIDB4MGIs IDB4MzUsIDB4MDMsCisrICAgIDB4ZWUsIDB4ZDksIDB4NGYsIDB4YTMsIDB4MmMsIDB4ZjEsIDB4 N2EsIDB4N2YsIDB4YzMsIDB4ZDYsIDB4Y2YsIDB4NDAsCisrICAgIDB4ZGMsIDB4N2IsIDB4MDAs IDB4ODMsIDB4MGUsIDB4NmEsIDB4MjUsIDB4NjYsIDB4ZGMsIDB4MDcsIDB4M2UsIDB4MzQsCisr ICAgIDB4MzMsIDB4MTIsIDB4NTEsIDB4N2MsIDB4NmEsIDB4YTUsIDB4MTUsIDB4MmIsIDB4NGIs IDB4ZmUsIDB4Y2QsIDB4MmUsCisrICAgIDB4NTUsIDB4MWYsIDB4ZWUsIDB4MzQsIDB4NjMsIDB4 MTgsIDB4YTEsIDB4NTMsIDB4NDIsIDB4M2MsIDB4OTksIDB4NmIsCisrICAgIDB4MGQsIDB4NWQs IDB4Y2IsIDB4OTEsIDB4MDIsIDB4YWUsIDB4ZGQsIDB4MzgsIDB4NzksIDB4ODYsIDB4MTYsIDB4 ZjEsCisrICAgIDB4ZjEsIDB4ZTAsIDB4ZDYsIDB4YzQsIDB4MDMsIDB4NTIsIDB4NWIsIDB4MWYs IDB4OWIsIDB4M2QsIDB4NGQsIDB4YzcsCisrICAgIDB4NjYsIDB4ZGUsIDB4MmQsIDB4ZmMsIDB4 NGEsIDB4NTYsIDB4ZDcsIDB4YjgsIDB4YmEsIDB4NTksIDB4NjMsIDB4ZDYsCisrICAgIDB4MGYs IDB4M2UsIDB4MTYsIDB4MzEsIDB4ODgsIDB4NzAsIDB4YWQsIDB4NDMsIDB4NjksIDB4NTIsIDB4 ZTUsIDB4NTcsCisrICAgIDB4NjUsIDB4MzcsIDB4NGUsIDB4YWIsIDB4ODUsIDB4ZTgsIDB4ZWMs IDB4MTcsIDB4ZDYsIDB4YjksIDB4YTQsIDB4NTQsCisrICAgIDB4N2IsIDB4OWIsIDB4NWYsIDB4 MjcsIDB4NTIsIDB4ZjMsIDB4MTAsIDB4NWIsIDB4ZTgsIDB4MDksIDB4YjIsIDB4M2EsCisrICAg IDB4MmMsIDB4OGQsIDB4NzQsIDB4NjksIDB4ZGIsIDB4MDIsIDB4ZTIsIDB4NGQsIDB4NTksIDB4 MjMsIDB4OTQsIDB4YTcsCisrICAgIDB4ZGIsIDB4YTAsIDB4NjksIDB4ZTkKKyt9OworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcVtdID0geworKyAgICAweGQy LCAweDc3LCAweDA0LCAweDRlLCAweDUwLCAweGY1LCAweGE0LCAweGUzLCAweGY1LCAweDEwLCAw eGE1LCAweDBhLAorKyAgICAweDBiLCAweDg0LCAweGZkLCAweGZmLCAweGJjLCAweGEwLCAweDQ3 LCAweGVkLCAweDI3LCAweDYwLCAweDIwLCAweDU2LAorKyAgICAweDc0LCAweDQxLCAweGEwLCAw eGE1CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X2db XSA9IHsKKysgICAgMHgxMywgMHhkNywgMHg1NCwgMHhlMiwgMHgxZiwgMHhkMiwgMHg0MSwgMHg2 NSwgMHg1ZCwgMHhhOCwgMHg5MSwgMHhjNSwKKysgICAgMHgyMiwgMHhhNiwgMHg1YSwgMHg3Miwg MHhhOCwgMHg5YiwgMHhkYywgMHg2NCwgMHhlYywgMHg5YiwgMHg1NCwgMHhhOCwKKysgICAgMHgy MSwgMHhlZCwgMHg0YSwgMHg4OSwgMHg4YiwgMHg0OSwgMHgwZSwgMHgwYywgMHg0ZiwgMHhjYiwg MHg3MiwgMHgxOSwKKysgICAgMHgyYSwgMHg0YSwgMHgyMCwgMHhmNSwgMHg0MSwgMHhmMywgMHhm MiwgMHg5MiwgMHg1MywgMHg5OSwgMHhmMCwgMHhiYSwKKysgICAgMHhlYywgMHhmOSwgMHgyOSwg MHhhYSwgMHhmYiwgMHhmNywgMHg5ZCwgMHhmZSwgMHg0MywgMHgzMiwgMHgzOSwgMHgzYiwKKysg ICAgMHgzMiwgMHhjZCwgMHgyZSwgMHgyZiwgMHhjZiwgMHgyNywgMHgyZiwgMHgzMiwgMHhhNiwg MHgyNywgMHg0MywgMHg0YSwKKysgICAgMHgwZCwgMHhmMiwgMHg0MiwgMHhiNywgMHg1YiwgMHg0 MSwgMHg0ZCwgMHhmMywgMHg3MiwgMHgxMiwgMHgxZSwgMHg1MywKKysgICAgMHhhNSwgMHg1Mywg MHhmMiwgMHgyMiwgMHhmOCwgMHgzNiwgMHhiMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHg0OCwgMHg1 YiwKKysgICAgMHg2YiwgMHhkMCwgMHg4OSwgMHg4NCwgMHg1MSwgMHg4MCwgMHgxZCwgMHhjZCwg MHg4ZCwgMHhlNiwgMHg0YywgMHhkNSwKKysgICAgMHgzNiwgMHg1NiwgMHg5NiwgMHhmZiwgMHhj NSwgMHgzMiwgMHhkNSwgMHgyOCwgMHhjNSwgMHgwNiwgMHg2MiwgMHgwYSwKKysgICAgMHg5NCwg MHgyYSwgMHgwMywgMHgwNSwgMHgwNCwgMHg2ZCwgMHg4ZiwgMHgxOCwgMHg3NiwgMHgzNCwgMHgx ZiwgMHgxZSwKKysgICAgMHg1NywgMHgwYiwgMHhjMywgMHg5NywgMHg0YiwgMHhhNiwgMHhiOSwg MHhhNCwgMHgzOCwgMHhlOSwgMHg3MCwgMHgyMywKKysgICAgMHgwMiwgMHhhMiwgMHhlNiwgMHhl NiwgMHg3YiwgMHhmZCwgMHgwNiwgMHhkMywgMHgyYiwgMHhjNiwgMHg3OSwgMHg5NiwKKysgICAg MHgyMiwgMHg3MSwgMHhkNywgMHhiNCwgMHgwYywgMHhkNywgMHgyZiwgMHgzOCwgMHg2ZSwgMHg2 NCwgMHhlMCwgMHhkNywKKysgICAgMHhlZiwgMHg4NiwgMHhjYSwgMHg4YywgMHhhNSwgMHhkMSwg MHg0MiwgMHgyOCwgMHhkYywgMHgyYSwgMHg0ZiwgMHgxNiwKKysgICAgMHhlMywgMHgxOCwgMHg5 OCwgMHg4NiwgMHhiNSwgMHg5OSwgMHgwNiwgMHg3NCwgMHhmNCwgMHgyMCwgMHgwZiwgMHgzYSwK KysgICAgMHg0YywgMHhmNiwgMHg1YSwgMHgzZiwgMHgwZCwgMHhkYiwgMHhhMSwgMHhmYSwgMHg2 NywgMHgyZCwgMHhmZiwgMHgyZiwKKysgICAgMHg1ZSwgMHgxNCwgMHgzZCwgMHgxMCwgMHhlNCwg MHhlOSwgMHg3YSwgMHhlOCwgMHg0ZiwgMHg2ZCwgMHhhMCwgMHg5NSwKKysgICAgMHgzNSwgMHhk NSwgMHhiOSwgMHhkZiwgMHgyNSwgMHg5MSwgMHg4MSwgMHhhNywgMHg5YiwgMHg2MywgMHhiMCwg MHg2OSwKKysgICAgMHhlOSwgMHg0OSwgMHg5NywgMHgyYiwgMHgwMiwgMHhiYSwgMHgzNiwgMHhi MywgMHg1OCwgMHg2YSwgMHhhYiwgMHg3ZSwKKysgICAgMHg0NSwgMHhmMywgMHgyMiwgMHhmOCwg MHgyZSwgMHg0ZSwgMHg4NSwgMHhjYSwgMHgzYSwgMHhiOCwgMHg1NSwgMHg5MSwKKysgICAgMHhi MywgMHhjMiwgMHhhOSwgMHg2NgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg ZHNhX3Rlc3RfMjA0OF9wdWJfa2V5W10gPSB7CisrICAgIDB4MjQsIDB4NTIsIDB4ZjMsIDB4Y2Ms IDB4YmUsIDB4OWUsIDB4ZDUsIDB4Y2EsIDB4N2QsIDB4YzcsIDB4NGMsIDB4NjAsCisrICAgIDB4 MmIsIDB4OTksIDB4MjIsIDB4NmUsIDB4OGYsIDB4MmYsIDB4YWIsIDB4MzgsIDB4ZTcsIDB4ZDcs IDB4ZGQsIDB4ZmIsCisrICAgIDB4NzUsIDB4NTMsIDB4OWIsIDB4MTcsIDB4MTUsIDB4NWUsIDB4 OWYsIDB4Y2YsIDB4ZDEsIDB4YWIsIDB4YTUsIDB4NjQsCisrICAgIDB4ZWIsIDB4ODUsIDB4MzUs IDB4ZDgsIDB4MTIsIDB4YzksIDB4YzIsIDB4ZGMsIDB4ZjksIDB4NzIsIDB4ODQsIDB4NDQsCisr ICAgIDB4MWIsIDB4YzQsIDB4ODIsIDB4MjQsIDB4MzYsIDB4MjQsIDB4YzcsIDB4ZjQsIDB4NTcs IDB4NTgsIDB4MGMsIDB4MWMsCisrICAgIDB4MzgsIDB4YTUsIDB4N2MsIDB4NDYsIDB4YzQsIDB4 NTcsIDB4MzksIDB4MjQsIDB4NzAsIDB4ZWQsIDB4YjUsIDB4MmMsCisrICAgIDB4YjUsIDB4YTYs IDB4ZTAsIDB4M2YsIDB4ZTYsIDB4MjgsIDB4N2IsIDB4YjYsIDB4ZjQsIDB4OWEsIDB4NDIsIDB4 YTIsCisrICAgIDB4MDYsIDB4NWEsIDB4MDUsIDB4NGYsIDB4MDMsIDB4MDgsIDB4MzksIDB4ZGYs IDB4MWYsIDB4ZDMsIDB4MTQsIDB4OWMsCisrICAgIDB4NGMsIDB4YTAsIDB4NTMsIDB4MWQsIDB4 ZDgsIDB4Y2EsIDB4OGEsIDB4YWEsIDB4OWMsIDB4YzcsIDB4MzMsIDB4NzEsCisrICAgIDB4OTMs IDB4MzgsIDB4NzMsIDB4NDgsIDB4MzMsIDB4NjEsIDB4MTgsIDB4MjIsIDB4NDUsIDB4NDUsIDB4 ZTgsIDB4OGMsCisrICAgIDB4ODAsIDB4ZmYsIDB4ZDgsIDB4NzYsIDB4NWQsIDB4NzQsIDB4MzYs IDB4MDMsIDB4MzMsIDB4Y2MsIDB4YWIsIDB4OTksCisrICAgIDB4NzIsIDB4NzcsIDB4OWIsIDB4 NjUsIDB4MjUsIDB4YTYsIDB4NWIsIDB4ZGQsIDB4MGQsIDB4MTAsIDB4YzYsIDB4NzUsCisrICAg IDB4YzEsIDB4MDksIDB4YmIsIDB4ZDMsIDB4ZTUsIDB4YmUsIDB4NGQsIDB4NzIsIDB4ZWYsIDB4 NmUsIDB4YmEsIDB4NmUsCisrICAgIDB4NDMsIDB4OGQsIDB4NTIsIDB4MjYsIDB4MjMsIDB4N2Qs IDB4YjgsIDB4ODgsIDB4MzcsIDB4OWMsIDB4NWYsIDB4Y2MsCisrICAgIDB4NDcsIDB4YTMsIDB4 ODQsIDB4N2YsIDB4ZjYsIDB4MzcsIDB4MTEsIDB4YmEsIDB4ZWQsIDB4NmQsIDB4MDMsIDB4YWYs CisrICAgIDB4ZTgsIDB4MWUsIDB4NjksIDB4NGEsIDB4NDEsIDB4M2IsIDB4NjgsIDB4MGIsIDB4 ZDMsIDB4OGEsIDB4YjQsIDB4OTAsCisrICAgIDB4M2YsIDB4ODMsIDB4NzAsIDB4YTcsIDB4MDcs IDB4ZWYsIDB4NTUsIDB4MWQsIDB4NDksIDB4NDEsIDB4MDIsIDB4NmQsCisrICAgIDB4OTUsIDB4 NzksIDB4ZDYsIDB4OTEsIDB4ZGUsIDB4OGUsIDB4ZGEsIDB4YTEsIDB4NjEsIDB4MDUsIDB4ZWIs IDB4OWQsCisrICAgIDB4YmEsIDB4M2MsIDB4MmYsIDB4NGMsIDB4MWIsIDB4ZWMsIDB4NTAsIDB4 ODIsIDB4NzUsIDB4YWEsIDB4MDIsIDB4MDcsCisrICAgIDB4ZTIsIDB4NTEsIDB4YjUsIDB4ZWMs IDB4Y2IsIDB4MjgsIDB4NmEsIDB4NGIsIDB4MDEsIDB4ZDQsIDB4NDksIDB4ZDMsCisrICAgIDB4 MGEsIDB4Y2IsIDB4NjcsIDB4MzcsIDB4MTcsIDB4YTAsIDB4ZDIsIDB4ZmIsIDB4M2IsIDB4NTAs IDB4YzgsIDB4OTMsCisrICAgIDB4ZjcsIDB4ZGEsIDB4YjEsIDB4NGYKKyt9OworKworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcHJpdl9rZXlbXSA9IHsKKysgICAg MHgwYywgMHg0YiwgMHgzMCwgMHg4OSwgMHhkMSwgMHhiOCwgMHg2MiwgMHhjYiwgMHgzYywgMHg0 MywgMHg2NCwgMHg5MSwKKysgICAgMHhmMCwgMHg5MSwgMHg1NCwgMHg3MCwgMHhjNSwgMHgyNywg MHg5NiwgMHhlMywgMHhhYywgMHhiZSwgMHhlOCwgMHgwMCwKKysgICAgMHhlYywgMHg1NSwgMHhm NiwgMHhjYworK307CisrCisraW50IEZJUFNfc2VsZnRlc3RfZHNhKCkKKyt7CisrICAgIERTQSAq ZHNhID0gTlVMTDsKKysgICAgRVZQX1BLRVkgKnBrID0gTlVMTDsKKysgICAgaW50IHJldCA9IC0x OworKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTCwgKnB1Yl9rZXkg PSBOVUxMLCAqcHJpdl9rZXkgPSBOVUxMOworKworKyAgICBmaXBzX2xvYWRfa2V5X2NvbXBvbmVu dChwLCBkc2FfdGVzdF8yMDQ4KTsKKysgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQocSwgZHNh X3Rlc3RfMjA0OCk7CisrICAgIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGcsIGRzYV90ZXN0XzIw NDgpOworKyAgICBmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChwdWJfa2V5LCBkc2FfdGVzdF8yMDQ4 KTsKKysgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQocHJpdl9rZXksIGRzYV90ZXN0XzIwNDgp OworKworKyAgICBkc2EgPSBEU0FfbmV3KCk7CisrCisrICAgIGlmIChkc2EgPT0gTlVMTCkKKysg ICAgICAgIGdvdG8gZXJyOworKworKyAgICBEU0Ffc2V0MF9wcWcoZHNhLCBwLCBxLCBnKTsKKysK KysgICAgRFNBX3NldDBfa2V5KGRzYSwgcHViX2tleSwgcHJpdl9rZXkpOworKworKyAgICBpZiAo KHBrID0gRVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysKKysg ICAgRVZQX1BLRVlfYXNzaWduX0RTQShwaywgZHNhKTsKKysKKysgICAgaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIE5VTEwsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsIDAsIEVWUF9zaGEyNTYoKSwgMCwgIkRTQSBTSEEyNTYiKSkKKysgICAgICAg IGdvdG8gZXJyOworKyAgICByZXQgPSAxOworKworKyBlcnI6CisrICAgIGlmIChwaykKKysgICAg ICAgIEVWUF9QS0VZX2ZyZWUocGspOworKyAgICBlbHNlIGlmIChkc2EpCisrICAgICAgICBEU0Ff ZnJlZShkc2EpOworKyAgICBlbHNlIHsKKysgICAgICAgIEJOX2ZyZWUocCk7CisrICAgICAgICBC Tl9mcmVlKHEpOworKyAgICAgICAgQk5fZnJlZShnKTsKKysgICAgICAgIEJOX2ZyZWUocHViX2tl eSk7CisrICAgICAgICBCTl9mcmVlKHByaXZfa2V5KTsKKysgICAgfQorKyAgICByZXR1cm4gcmV0 OworK30KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9m aXBzX2VjZGhfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9m aXBzX2VjZGhfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9m aXBzX2VjZGhfc2VsZnRlc3QuYy5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTguNDA4NjI0Nzc2ICsw MjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZWNkaF9zZWxmdGVz dC5jCTIwMTgtMDctMjUgMTc6MjY6NTguNDA4NjI0Nzc2ICswMjAwCitAQCAtMCwwICsxLDI0MiBA QAorKy8qIGZpcHMvZWNkaC9maXBzX2VjZGhfc2VsZnRlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkg RHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAor KyAqIHByb2plY3QgMjAxMS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAo YykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgor KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgor KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisr ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisr ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg KgorKyAqLworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrCisrI2luY2x1ZGUgPHN0cmlu Zy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vj Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZWNkaC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysj IGluY2x1ZGUgImZpcHNfbG9jbC5oIgorKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHAy NTZfcWNhdnN4W10gPSB7CisrICAgIDB4NTIsIDB4YzYsIDB4YTUsIDB4NzUsIDB4ZjMsIDB4MDQs IDB4OTgsIDB4YjMsIDB4MjksIDB4NjYsIDB4MGMsIDB4NjIsCisrICAgIDB4MTgsIDB4NjAsIDB4 NTUsIDB4NDEsIDB4NTksIDB4ZDQsIDB4NjAsIDB4ODUsIDB4OTksIDB4YzEsIDB4NTEsIDB4MTMs CisrICAgIDB4NmYsIDB4OTcsIDB4ODUsIDB4OTMsIDB4MzMsIDB4MzQsIDB4MDcsIDB4NTAKKyt9 OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHAyNTZfcWNhdnN5W10gPSB7CisrICAg IDB4NmYsIDB4NjksIDB4MjQsIDB4ZWIsIDB4ZTksIDB4M2IsIDB4YTcsIDB4Y2MsIDB4NDcsIDB4 MTcsIDB4YWEsIDB4M2YsCisrICAgIDB4NzAsIDB4ZmMsIDB4MTAsIDB4NzMsIDB4MGEsIDB4Y2Qs IDB4MjEsIDB4ZWUsIDB4MjksIDB4MTksIDB4MWYsIDB4YWYsCisrICAgIDB4YjQsIDB4MWMsIDB4 MWUsIDB4YzIsIDB4OGUsIDB4OTcsIDB4ODEsIDB4NmUKKyt9OworKworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHAyNTZfcWl1dHhbXSA9IHsKKysgICAgMHg3MSwgMHg0NiwgMHg4OCwgMHgw OCwgMHg5MiwgMHgyMSwgMHgxYiwgMHgxMCwgMHgyMSwgMHg3NCwgMHhmZiwgMHgwYywKKysgICAg MHg5NCwgMHhkZSwgMHgzNCwgMHg3YywgMHg4NiwgMHg3NCwgMHhiZSwgMHg2NywgMHg0MSwgMHg2 OCwgMHhkNCwgMHhjMSwKKysgICAgMHhlNSwgMHg3NSwgMHg2MywgMHg5YywgMHhhNywgMHg0Niwg MHg5MywgMHg2ZgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcDI1Nl9xaXV0 eVtdID0geworKyAgICAweDMzLCAweDQwLCAweGE5LCAweDZhLCAweGY1LCAweDIwLCAweGI1LCAw eDllLCAweGZjLCAweDYwLCAweDFhLCAweGFlLAorKyAgICAweDNkLCAweGY4LCAweDIxLCAweGQy LCAweGE3LCAweGNhLCAweDUyLCAweDM0LCAweGI5LCAweDVmLCAweDI3LCAweDc1LAorKyAgICAw eDZjLCAweDgxLCAweGJlLCAweDMyLCAweDRkLCAweGJhLCAweGJiLCAweGY4CisrfTsKKysKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwMjU2X3FpdXRkW10gPSB7CisrICAgIDB4MWEsIDB4 NDgsIDB4NTUsIDB4NmIsIDB4MTEsIDB4YmUsIDB4OTIsIDB4ZDQsIDB4MWMsIDB4ZDcsIDB4NDUs IDB4YzMsCisrICAgIDB4ODIsIDB4ODEsIDB4NTEsIDB4ZjEsIDB4MjMsIDB4NDAsIDB4YjcsIDB4 ODMsIDB4ZmQsIDB4MDEsIDB4NmQsIDB4YmMsCisrICAgIDB4YTEsIDB4NjYsIDB4YWYsIDB4MGEs IDB4MDMsIDB4MjMsIDB4Y2QsIDB4YzgKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHAyNTZfeml1dFtdID0geworKyAgICAweDc3LCAweDJhLCAweDFlLCAweDM3LCAweGVlLCAw eGU2LCAweDUxLCAweDAyLCAweDcxLCAweDQwLCAweGY4LCAweDZhLAorKyAgICAweDM2LCAweGY4 LCAweDY1LCAweDYxLCAweDJiLCAweDE4LCAweDcxLCAweDgyLCAweDIzLCAweGU2LCAweGYyLCAw eDc3LAorKyAgICAweGNlLCAweGVjLCAweGI4LCAweDQ5LCAweGM3LCAweGJmLCAweDM2LCAweDRm CisrfTsKKysKKyt0eXBlZGVmIHN0cnVjdCB7CisrICAgIGludCBjdXJ2ZTsKKysgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqeDE7CisrICAgIHNpemVfdCB4MWxlbjsKKysgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqeTE7CisrICAgIHNpemVfdCB5MWxlbjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqZDE7CisrICAgIHNpemVfdCBkMWxlbjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqeDI7 CisrICAgIHNpemVfdCB4MmxlbjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqeTI7CisrICAg IHNpemVfdCB5MmxlbjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqejsKKysgICAgc2l6ZV90 IHpsZW47CisrfSBFQ0RIX1NFTEZURVNUX0RBVEE7CisrCisrIyBkZWZpbmUgbWFrZV9lY2RoX3Rl c3QobmlkLCBwcikgeyBuaWQsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy IyNfcWl1dHgsIHNpemVvZihwciMjX3FpdXR4KSwgXAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHIjI19xaXV0eSwgc2l6ZW9mKHByIyNfcWl1dHkpLCBcCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwciMjX3FpdXRkLCBzaXplb2YocHIjI19xaXV0ZCksIFwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByIyNfcWNhdnN4LCBzaXplb2YocHIjI19x Y2F2c3gpLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwciMjX3FjYXZzeSwg c2l6ZW9mKHByIyNfcWNhdnN5KSwgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHIjI196aXV0LCBzaXplb2YocHIjI196aXV0KSB9CisrCisrc3RhdGljIEVDREhfU0VMRlRFU1Rf REFUQSB0ZXN0X2VjZGhfZGF0YVtdID0geworKyAgICBtYWtlX2VjZGhfdGVzdChOSURfWDlfNjJf cHJpbWUyNTZ2MSwgcDI1NiksCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9lY2RoKHZvaWQp CisreworKyAgICBFQ19LRVkgKmVjMSA9IE5VTEwsICplYzIgPSBOVUxMOworKyAgICBjb25zdCBF Q19QT0lOVCAqZWNwID0gTlVMTDsKKysgICAgQklHTlVNICp4ID0gTlVMTCwgKnkgPSBOVUxMLCAq ZCA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgKnp0bXAgPSBOVUxMOworKyAgICBpbnQgcnYg PSAxOworKyAgICBzaXplX3QgaTsKKysKKysgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZXN0 X2VjZGhfZGF0YSkgLyBzaXplb2YoRUNESF9TRUxGVEVTVF9EQVRBKTsgaSsrKSB7CisrICAgICAg ICBFQ0RIX1NFTEZURVNUX0RBVEEgKmVjZCA9IHRlc3RfZWNkaF9kYXRhICsgaTsKKysgICAgICAg IGlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0VDREgsIGVjZC0+Y3VydmUsIDApKQor KyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgenRtcCA9IE9QRU5TU0xfbWFsbG9jKGVj ZC0+emxlbik7CisrCisrICAgICAgICB4ID0gQk5fYmluMmJuKGVjZC0+eDEsIGVjZC0+eDFsZW4s IHgpOworKyAgICAgICAgeSA9IEJOX2JpbjJibihlY2QtPnkxLCBlY2QtPnkxbGVuLCB5KTsKKysg ICAgICAgIGQgPSBCTl9iaW4yYm4oZWNkLT5kMSwgZWNkLT5kMWxlbiwgZCk7CisrCisrICAgICAg ICBpZiAoIXggfHwgIXkgfHwgIWQgfHwgIXp0bXApIHsKKysgICAgICAgICAgICBydiA9IC0xOwor KyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgfQorKworKyAgICAgICAgZWMxID0gRUNf S0VZX25ld19ieV9jdXJ2ZV9uYW1lKGVjZC0+Y3VydmUpOworKyAgICAgICAgaWYgKCFlYzEpIHsK KysgICAgICAgICAgICBydiA9IC0xOworKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAg fQorKyAgICAgICAgRUNfS0VZX3NldF9mbGFncyhlYzEsIEVDX0ZMQUdfQ09GQUNUT1JfRUNESCk7 CisrCisrICAgICAgICBpZiAoIUVDX0tFWV9zZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbmF0 ZXMoZWMxLCB4LCB5KSkgeworKyAgICAgICAgICAgIHJ2ID0gLTE7CisrICAgICAgICAgICAgZ290 byBlcnI7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIUVDX0tFWV9zZXRfcHJpdmF0ZV9r ZXkoZWMxLCBkKSkgeworKyAgICAgICAgICAgIHJ2ID0gLTE7CisrICAgICAgICAgICAgZ290byBl cnI7CisrICAgICAgICB9CisrCisrICAgICAgICB4ID0gQk5fYmluMmJuKGVjZC0+eDIsIGVjZC0+ eDJsZW4sIHgpOworKyAgICAgICAgeSA9IEJOX2JpbjJibihlY2QtPnkyLCBlY2QtPnkybGVuLCB5 KTsKKysKKysgICAgICAgIGlmICgheCB8fCAheSkgeworKyAgICAgICAgICAgIHJ2ID0gLTE7Cisr ICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAgICB9CisrCisrICAgICAgICBlYzIgPSBFQ19L RVlfbmV3X2J5X2N1cnZlX25hbWUoZWNkLT5jdXJ2ZSk7CisrICAgICAgICBpZiAoIWVjMikgewor KyAgICAgICAgICAgIHJ2ID0gLTE7CisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAgICB9 CisrICAgICAgICBFQ19LRVlfc2V0X2ZsYWdzKGVjMSwgRUNfRkxBR19DT0ZBQ1RPUl9FQ0RIKTsK KysKKysgICAgICAgIGlmICghRUNfS0VZX3NldF9wdWJsaWNfa2V5X2FmZmluZV9jb29yZGluYXRl cyhlYzIsIHgsIHkpKSB7CisrICAgICAgICAgICAgcnYgPSAtMTsKKysgICAgICAgICAgICBnb3Rv IGVycjsKKysgICAgICAgIH0KKysKKysgICAgICAgIGVjcCA9IEVDX0tFWV9nZXQwX3B1YmxpY19r ZXkoZWMyKTsKKysgICAgICAgIGlmICghZWNwKSB7CisrICAgICAgICAgICAgcnYgPSAtMTsKKysg ICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghRUNESF9j b21wdXRlX2tleSh6dG1wLCBlY2QtPnpsZW4sIGVjcCwgZWMxLCAwKSkgeworKyAgICAgICAgICAg IHJ2ID0gLTE7CisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAgICB9CisrCisrICAgICAg ICBpZiAoIWZpcHNfcG9zdF9jb3JydXB0KEZJUFNfVEVTVF9FQ0RILCBlY2QtPmN1cnZlLCBOVUxM KSkKKysgICAgICAgICAgICB6dG1wWzBdIF49IDB4MTsKKysKKysgICAgICAgIGlmIChtZW1jbXAo enRtcCwgZWNkLT56LCBlY2QtPnpsZW4pKSB7CisrICAgICAgICAgICAgZmlwc19wb3N0X2ZhaWxl ZChGSVBTX1RFU1RfRUNESCwgZWNkLT5jdXJ2ZSwgMCk7CisrICAgICAgICAgICAgcnYgPSAwOwor KyAgICAgICAgfSBlbHNlIGlmICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0VDREgsIGVj ZC0+Y3VydmUsIDApKQorKyAgICAgICAgICAgIGdvdG8gZXJyOworKworKyAgICAgICAgRUNfS0VZ X2ZyZWUoZWMxKTsKKysgICAgICAgIGVjMSA9IE5VTEw7CisrICAgICAgICBFQ19LRVlfZnJlZShl YzIpOworKyAgICAgICAgZWMyID0gTlVMTDsKKysgICAgICAgIE9QRU5TU0xfZnJlZSh6dG1wKTsK KysgICAgICAgIHp0bXAgPSBOVUxMOworKyAgICB9CisrCisrIGVycjoKKysKKysgICAgaWYgKHgp CisrICAgICAgICBCTl9jbGVhcl9mcmVlKHgpOworKyAgICBpZiAoeSkKKysgICAgICAgIEJOX2Ns ZWFyX2ZyZWUoeSk7CisrICAgIGlmIChkKQorKyAgICAgICAgQk5fY2xlYXJfZnJlZShkKTsKKysg ICAgaWYgKGVjMSkKKysgICAgICAgIEVDX0tFWV9mcmVlKGVjMSk7CisrICAgIGlmIChlYzIpCisr ICAgICAgICBFQ19LRVlfZnJlZShlYzIpOworKyAgICBpZiAoenRtcCkKKysgICAgICAgIE9QRU5T U0xfZnJlZSh6dG1wKTsKKysKKysgICAgcmV0dXJuIHJ2OworKworK30KKysKKysjZW5kaWYKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2VjZHNhX3NlbGZ0ZXN0 LmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19lY2RzYV9zZWxmdGVz dC5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZWNkc2Ffc2VsZnRl c3QuYy5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTguNDA4NjI0Nzc2ICswMjAwCisrKysgb3BlbnNz bC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZWNkc2Ffc2VsZnRlc3QuYwkyMDE4LTA3LTI1 IDE3OjI2OjU4LjQwODYyNDc3NiArMDIwMAorQEAgLTAsMCArMSwxNjYgQEAKKysvKiBmaXBzL2Vj ZHNhL2ZpcHNfZWNkc2Ffc2VsZnRlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBO IEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3Qg MjAxMS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysg KiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi CisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K KysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqLworKwor KyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2VjLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZWNkc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1 ZGUgImludGVybmFsL2ZpcHNfaW50LmgiCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0IGNoYXIgUF8yNTZfbmFtZVtdID0gIkVD RFNBIFAtMjU2IjsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBQXzI1Nl9kW10gPSB7 CisrICAgIDB4NTEsIDB4YmQsIDB4MDYsIDB4YTEsIDB4MWMsIDB4ZGEsIDB4ZTIsIDB4MTIsIDB4 OTksIDB4YzksIDB4NTIsIDB4M2YsCisrICAgIDB4ZWEsIDB4YTQsIDB4ZDIsIDB4ZDEsIDB4ZjQs IDB4N2YsIDB4ZDQsIDB4M2UsIDB4YmQsIDB4ZjgsIDB4ZmMsIDB4ODcsCisrICAgIDB4ZGMsIDB4 ODIsIDB4NTMsIDB4MjEsIDB4ZWUsIDB4YTAsIDB4ZGMsIDB4NjQKKyt9OworKworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIFBfMjU2X3F4W10gPSB7CisrICAgIDB4MjMsIDB4ODksIDB4ZTAs IDB4ZjQsIDB4NjksIDB4ZTAsIDB4NDksIDB4ZTUsIDB4YzcsIDB4ZTUsIDB4NDAsIDB4NmUsCisr ICAgIDB4OGYsIDB4MjUsIDB4ZGQsIDB4YWQsIDB4MTEsIDB4MTYsIDB4MTQsIDB4OWIsIDB4YWIs IDB4NDQsIDB4MDYsIDB4MzEsCisrICAgIDB4YmYsIDB4NWUsIDB4YTYsIDB4NDQsIDB4YWMsIDB4 ODYsIDB4MDAsIDB4MDcKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFBfMjU2 X3F5W10gPSB7CisrICAgIDB4YjMsIDB4MDUsIDB4MGQsIDB4ZDAsIDB4ZGMsIDB4ZjcsIDB4NDAs IDB4ZTYsIDB4ZjksIDB4ZDgsIDB4NmQsIDB4N2IsCisrICAgIDB4NjMsIDB4Y2EsIDB4OTcsIDB4 ZTYsIDB4MTIsIDB4ZjksIDB4ZDQsIDB4MTgsIDB4NTksIDB4YmUsIDB4YjIsIDB4NWUsCisrICAg IDB4NGEsIDB4NmEsIDB4NzcsIDB4MjMsIDB4ZjQsIDB4MTEsIDB4OWQsIDB4ZWIKKyt9OworKwor K3R5cGVkZWYgc3RydWN0IHsKKysgICAgaW50IGN1cnZlOworKyAgICBjb25zdCBjaGFyICpuYW1l OworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp4OworKyAgICBzaXplX3QgeGxlbjsKKysgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqeTsKKysgICAgc2l6ZV90IHlsZW47CisrICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmQ7CisrICAgIHNpemVfdCBkbGVuOworK30gRUNfU0VMRlRFU1RfREFUQTsK KysKKysjIGRlZmluZSBtYWtlX2VjZHNhX3Rlc3QobmlkLCBwcikgeyBuaWQsIHByIyNfbmFtZSwg XAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHIjI19xeCwgc2l6ZW9mKHByIyNf cXgpLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwciMjX3F5LCBzaXplb2Yo cHIjI19xeSksIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByIyNfZCwgc2l6 ZW9mKHByIyNfZCl9CisrCisrc3RhdGljIEVDX1NFTEZURVNUX0RBVEEgdGVzdF9lY19kYXRhW10g PSB7CisrICAgIG1ha2VfZWNkc2FfdGVzdChOSURfWDlfNjJfcHJpbWUyNTZ2MSwgUF8yNTYpLAor K307CisrCisraW50IEZJUFNfc2VsZnRlc3RfZWNkc2EoKQorK3sKKysgICAgRUNfS0VZICplYyA9 IE5VTEw7CisrICAgIEJJR05VTSAqeCA9IE5VTEwsICp5ID0gTlVMTCwgKmQgPSBOVUxMOworKyAg ICBFVlBfUEtFWSAqcGsgPSBOVUxMOworKyAgICBpbnQgcnYgPSAwOworKyAgICBzaXplX3QgaTsK KysKKysgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZXN0X2VjX2RhdGEpIC8gc2l6ZW9mKEVD X1NFTEZURVNUX0RBVEEpOyBpKyspIHsKKysgICAgICAgIEVDX1NFTEZURVNUX0RBVEEgKmVjZCA9 IHRlc3RfZWNfZGF0YSArIGk7CisrCisrICAgICAgICB4ID0gQk5fYmluMmJuKGVjZC0+eCwgZWNk LT54bGVuLCB4KTsKKysgICAgICAgIHkgPSBCTl9iaW4yYm4oZWNkLT55LCBlY2QtPnlsZW4sIHkp OworKyAgICAgICAgZCA9IEJOX2JpbjJibihlY2QtPmQsIGVjZC0+ZGxlbiwgZCk7CisrCisrICAg ICAgICBpZiAoIXggfHwgIXkgfHwgIWQpCisrICAgICAgICAgICAgZ290byBlcnI7CisrCisrICAg ICAgICBlYyA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShlY2QtPmN1cnZlKTsKKysgICAgICAg IGlmICghZWMpCisrICAgICAgICAgICAgZ290byBlcnI7CisrCisrICAgICAgICBpZiAoIUVDX0tF WV9zZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbmF0ZXMoZWMsIHgsIHkpKQorKyAgICAgICAg ICAgIGdvdG8gZXJyOworKworKyAgICAgICAgaWYgKCFFQ19LRVlfc2V0X3ByaXZhdGVfa2V5KGVj LCBkKSkKKysgICAgICAgICAgICBnb3RvIGVycjsKKysKKysgICAgICAgIGlmICgocGsgPSBFVlBf UEtFWV9uZXcoKSkgPT0gTlVMTCkKKysgICAgICAgICAgICBnb3RvIGVycjsKKysKKysgICAgICAg IEVWUF9QS0VZX2Fzc2lnbl9FQ19LRVkocGssIGVjKTsKKysKKysgICAgICAgIGlmICghZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBOVUxMLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCwgMCwgRVZQX3NoYTI1NigpLCAwLCBlY2QtPm5hbWUpKQorKyAg ICAgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIHJ2ID0gMTsKKysKKysgZXJyOgor KworKyAgICBpZiAoeCkKKysgICAgICAgIEJOX2NsZWFyX2ZyZWUoeCk7CisrICAgIGlmICh5KQor KyAgICAgICAgQk5fY2xlYXJfZnJlZSh5KTsKKysgICAgaWYgKGQpCisrICAgICAgICBCTl9jbGVh cl9mcmVlKGQpOworKyAgICBpZiAocGspCisrICAgICAgICBFVlBfUEtFWV9mcmVlKHBrKTsKKysg ICAgZWxzZSBpZiAoZWMpCisrICAgICAgICBFQ19LRVlfZnJlZShlYyk7CisrCisrICAgIHJldHVy biBydjsKKysKKyt9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5 cHRvL2ZpcHMvZmlwc19lbmMuYy5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9m aXBzX2VuYy5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZW5jLmMu ZmlwcwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwODYyNDc3NiArMDIwMAorKysrIG9wZW5zc2wtMS4x LjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2VuYy5jCTIwMTgtMDctMjUgMTc6MjY6NTguNDA4NjI0 Nzc2ICswMjAwCitAQCAtMCwwICsxLDE4OSBAQAorKy8qIGZpcGUvZXZwL2ZpcHNfZW5jLmMgKi8K KysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNv bSkKKysgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFu IFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0 c29mdC5jb20pLgorKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBj b25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJl ZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKysgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlv biwgYmUgaXQgdGhlIFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBq dXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdp dGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVy bXMKKysgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNv ZnQuY29tKS4KKysgKiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBh cyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8g YmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVy aWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBv ZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUg Zm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBk b2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2Fn ZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAq ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91 bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycg Y2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBi ZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5 b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhl cmVvZikgZnJvbSAKKysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUp IHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0 LmNvbSkiCisrICogCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5H IGBgQVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUworKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysg KiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBh dmFpbGFibGUgdmVyc2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBi ZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBh bmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5n IHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrY29uc3Qg RVZQX0NJUEhFUiAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCkKKyt7CisrICAgIHN3aXRj aCAobmlkKSB7CisrICAgIGNhc2UgTklEX2Flc18xMjhfY2JjOgorKyAgICAgICAgcmV0dXJuIEVW UF9hZXNfMTI4X2NiYygpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTI4X2NjbToKKysgICAgICAg IHJldHVybiBFVlBfYWVzXzEyOF9jY20oKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzEyOF9jZmIx OgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X2NmYjEoKTsKKysKKysgICAgY2FzZSBOSURf YWVzXzEyOF9jZmIxMjg6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfY2ZiMTI4KCk7Cisr CisrICAgIGNhc2UgTklEX2Flc18xMjhfY2ZiODoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzEy OF9jZmI4KCk7CisrCisrICAgIGNhc2UgTklEX2Flc18xMjhfY3RyOgorKyAgICAgICAgcmV0dXJu IEVWUF9hZXNfMTI4X2N0cigpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTI4X2VjYjoKKysgICAg ICAgIHJldHVybiBFVlBfYWVzXzEyOF9lY2IoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzEyOF9n Y206CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfZ2NtKCk7CisrCisrICAgIGNhc2UgTklE X2Flc18xMjhfb2ZiMTI4OgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X29mYigpOworKwor KyAgICBjYXNlIE5JRF9hZXNfMTI4X3h0czoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF94 dHMoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzE5Ml9jYmM6CisrICAgICAgICByZXR1cm4gRVZQ X2Flc18xOTJfY2JjKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18xOTJfY2NtOgorKyAgICAgICAg cmV0dXJuIEVWUF9hZXNfMTkyX2NjbSgpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTkyX2NmYjE6 CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfY2ZiMSgpOworKworKyAgICBjYXNlIE5JRF9h ZXNfMTkyX2NmYjEyODoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9jZmIxMjgoKTsKKysK KysgICAgY2FzZSBOSURfYWVzXzE5Ml9jZmI4OgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTky X2NmYjgoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzE5Ml9jdHI6CisrICAgICAgICByZXR1cm4g RVZQX2Flc18xOTJfY3RyKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18xOTJfZWNiOgorKyAgICAg ICAgcmV0dXJuIEVWUF9hZXNfMTkyX2VjYigpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTkyX2dj bToKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9nY20oKTsKKysKKysgICAgY2FzZSBOSURf YWVzXzE5Ml9vZmIxMjg6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfb2ZiKCk7CisrCisr ICAgIGNhc2UgTklEX2Flc18yNTZfY2JjOgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2Ni YygpOworKworKyAgICBjYXNlIE5JRF9hZXNfMjU2X2NjbToKKysgICAgICAgIHJldHVybiBFVlBf YWVzXzI1Nl9jY20oKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzI1Nl9jZmIxOgorKyAgICAgICAg cmV0dXJuIEVWUF9hZXNfMjU2X2NmYjEoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzI1Nl9jZmIx Mjg6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfY2ZiMTI4KCk7CisrCisrICAgIGNhc2Ug TklEX2Flc18yNTZfY2ZiODoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl9jZmI4KCk7Cisr CisrICAgIGNhc2UgTklEX2Flc18yNTZfY3RyOgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2 X2N0cigpOworKworKyAgICBjYXNlIE5JRF9hZXNfMjU2X2VjYjoKKysgICAgICAgIHJldHVybiBF VlBfYWVzXzI1Nl9lY2IoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzI1Nl9nY206CisrICAgICAg ICByZXR1cm4gRVZQX2Flc18yNTZfZ2NtKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18yNTZfb2Zi MTI4OgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X29mYigpOworKworKyAgICBjYXNlIE5J RF9hZXNfMjU2X3h0czoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl94dHMoKTsKKysKKysg ICAgY2FzZSBOSURfZGVzX2VkZV9lY2I6CisrICAgICAgICByZXR1cm4gRVZQX2Rlc19lZGUoKTsK KysKKysgICAgY2FzZSBOSURfZGVzX2VkZTNfZWNiOgorKyAgICAgICAgcmV0dXJuIEVWUF9kZXNf ZWRlMygpOworKworKyAgICBjYXNlIE5JRF9kZXNfZWRlM19jYmM6CisrICAgICAgICByZXR1cm4g RVZQX2Rlc19lZGUzX2NiYygpOworKworKyAgICBjYXNlIE5JRF9kZXNfZWRlM19jZmIxOgorKyAg ICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlM19jZmIxKCk7CisrCisrICAgIGNhc2UgTklEX2Rlc19l ZGUzX2NmYjY0OgorKyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlM19jZmI2NCgpOworKworKyAg ICBjYXNlIE5JRF9kZXNfZWRlM19jZmI4OgorKyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlM19j ZmI4KCk7CisrCisrICAgIGNhc2UgTklEX2Rlc19lZGUzX29mYjY0OgorKyAgICAgICAgcmV0dXJu IEVWUF9kZXNfZWRlM19vZmIoKTsKKysKKysgICAgY2FzZSBOSURfZGVzX2VkZV9jYmM6CisrICAg ICAgICByZXR1cm4gRVZQX2Rlc19lZGVfY2JjKCk7CisrCisrICAgIGNhc2UgTklEX2Rlc19lZGVf Y2ZiNjQ6CisrICAgICAgICByZXR1cm4gRVZQX2Rlc19lZGVfY2ZiNjQoKTsKKysKKysgICAgY2Fz ZSBOSURfZGVzX2VkZV9vZmI2NDoKKysgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZV9vZmIoKTsK KysKKysgICAgZGVmYXVsdDoKKysgICAgICAgIHJldHVybiBOVUxMOworKworKyAgICB9CisrfQor ZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfZXJyLmguZmlwcyBv cGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19lcnIuaAorLS0tIG9wZW5zc2wtMS4x LjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2Vyci5oLmZpcHMJMjAxOC0wNy0yNSAxNzoyNjo1OC40 MDg2MjQ3NzYgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19l cnIuaAkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwODYyNDc3NiArMDIwMAorQEAgLTAsMCArMSwxOTYg QEAKKysvKiBjcnlwdG8vZmlwc19lcnIuaCAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJp Z2h0IChjKSAxOTk5LTIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK KysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisr ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQE9wZW5TU0wu b3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK KysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws CisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24g KHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKy8qCisrICogTk9URTogdGhpcyBm aWxlIHdhcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgbWtlcnIucGwgc2NyaXB0OiBhbnkgY2hhbmdl cworKyAqIG1hZGUgdG8gaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgbmV4 dCB1cGRhdGVzIHRoaXMgZmlsZSwKKysgKiBvbmx5IHJlYXNvbiBzdHJpbmdzIHdpbGwgYmUgcHJl c2VydmVkLgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKysvKiBCRUdJTiBFUlJPUiBD T0RFUyAqLworKyNpZm5kZWYgT1BFTlNTTF9OT19FUlIKKysKKysjIGRlZmluZSBFUlJfRlVOQyhm dW5jKSBFUlJfUEFDSyhFUlJfTElCX0ZJUFMsZnVuYywwKQorKyMgZGVmaW5lIEVSUl9SRUFTT04o cmVhc29uKSBFUlJfUEFDSyhFUlJfTElCX0ZJUFMsMCxyZWFzb24pCisrCisrc3RhdGljIEVSUl9T VFJJTkdfREFUQSBGSVBTX3N0cl9mdW5jdHNbXSA9IHsKKysgICAge0VSUl9GVU5DKEZJUFNfRl9E SF9CVUlMVElOX0dFTlBBUkFNUyksICJkaF9idWlsdGluX2dlbnBhcmFtcyJ9LAorKyAgICB7RVJS X0ZVTkMoRklQU19GX0RSQkdfUkVTRUVEKSwgImRyYmdfcmVzZWVkIn0sCisrICAgIHtFUlJfRlVO QyhGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4yKSwgImRzYV9idWlsdGluX3BhcmFtZ2VuMiJ9 LAorKyAgICB7RVJSX0ZVTkMoRklQU19GX0RTQV9ET19TSUdOKSwgIkRTQV9kb19zaWduIn0sCisr ICAgIHtFUlJfRlVOQyhGSVBTX0ZfRFNBX0RPX1ZFUklGWSksICJEU0FfZG9fdmVyaWZ5In0sCisr ICAgIHtFUlJfRlVOQyhGSVBTX0ZfRUNESF9DT01QVVRFX0tFWSksICJFQ0RIX2NvbXB1dGVfa2V5 In0sCisrICAgIHtFUlJfRlVOQyhGSVBTX0ZfRVZQX0NJUEhFUl9DVFhfTkVXKSwgIkVWUF9DSVBI RVJfQ1RYX25ldyJ9LAorKyAgICB7RVJSX0ZVTkMoRklQU19GX0VWUF9DSVBIRVJfQ1RYX1JFU0VU KSwgIkVWUF9DSVBIRVJfQ1RYX3Jlc2V0In0sCisrICAgIHtFUlJfRlVOQyhGSVBTX0ZfRklQU19D SEVDS19EU0EpLCAiZmlwc19jaGVja19kc2EifSwKKysgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBT X0NIRUNLX0VDKSwgImZpcHNfY2hlY2tfZWMifSwKKysgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBT X0NIRUNLX1JTQSksICJmaXBzX2NoZWNrX3JzYSJ9LAorKyAgICB7RVJSX0ZVTkMoRklQU19GX0ZJ UFNfRFJCR19CWVRFUyksICJmaXBzX2RyYmdfYnl0ZXMifSwKKysgICAge0VSUl9GVU5DKEZJUFNf Rl9GSVBTX0RSQkdfQ0hFQ0spLCAiZmlwc19kcmJnX2NoZWNrIn0sCisrICAgIHtFUlJfRlVOQyhG SVBTX0ZfRklQU19EUkJHX0NQUk5HX1RFU1QpLCAiZmlwc19kcmJnX2Nwcm5nX3Rlc3QifSwKKysg ICAge0VSUl9GVU5DKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0spLCAiZmlwc19kcmJnX2Vy cm9yX2NoZWNrIn0sCisrICAgIHtFUlJfRlVOQyhGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFKSwg IkZJUFNfZHJiZ19nZW5lcmF0ZSJ9LAorKyAgICB7RVJSX0ZVTkMoRklQU19GX0ZJUFNfRFJCR19J TklUKSwgIkZJUFNfZHJiZ19pbml0In0sCisrICAgIHtFUlJfRlVOQyhGSVBTX0ZfRklQU19EUkJH X0lOU1RBTlRJQVRFKSwgIkZJUFNfZHJiZ19pbnN0YW50aWF0ZSJ9LAorKyAgICB7RVJSX0ZVTkMo RklQU19GX0ZJUFNfRFJCR19ORVcpLCAiRklQU19kcmJnX25ldyJ9LAorKyAgICB7RVJSX0ZVTkMo RklQU19GX0ZJUFNfRFJCR19SRVNFRUQpLCAiRklQU19kcmJnX3Jlc2VlZCJ9LAorKyAgICB7RVJS X0ZVTkMoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FUKSwgIkZJUFNfRFJCR19TSU5HTEVfS0FU In0sCisrICAgIHtFUlJfRlVOQyhGSVBTX0ZfRklQU19HRVRfRU5UUk9QWSksICJmaXBzX2dldF9l bnRyb3B5In0sCisrICAgIHtFUlJfRlVOQyhGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQpLCAi RklQU19tb2R1bGVfbW9kZV9zZXQifSwKKysgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBTX1BLRVlf U0lHTkFUVVJFX1RFU1QpLCAiZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0In0sCisrICAgIHtFUlJf RlVOQyhGSVBTX0ZfRklQU19SQU5EX0JZVEVTKSwgIkZJUFNfcmFuZF9ieXRlcyJ9LAorKyAgICB7 RVJSX0ZVTkMoRklQU19GX0ZJUFNfUkFORF9TRUVEKSwgIkZJUFNfcmFuZF9zZWVkIn0sCisrICAg IHtFUlJfRlVOQyhGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0QpLCAiRklQU19yYW5kX3NldF9t ZXRob2QifSwKKysgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTKSwgIkZJUFNf cmFuZF9zdGF0dXMifSwKKysgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBTX1JTQV9CVUlMVElOX0tF WUdFTiksICJmaXBzX3JzYV9idWlsdGluX2tleWdlbiJ9LAorKyAgICB7RVJSX0ZVTkMoRklQU19G X0ZJUFNfU0VMRlRFU1RfQUVTKSwgIkZJUFNfc2VsZnRlc3RfYWVzIn0sCisrICAgIHtFUlJfRlVO QyhGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NNKSwgIkZJUFNfc2VsZnRlc3RfYWVzX2NjbSJ9 LAorKyAgICB7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTSksICJGSVBTX3Nl bGZ0ZXN0X2Flc19nY20ifSwKKysgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FF U19YVFMpLCAiRklQU19zZWxmdGVzdF9hZXNfeHRzIn0sCisrICAgIHtFUlJfRlVOQyhGSVBTX0Zf RklQU19TRUxGVEVTVF9DTUFDKSwgIkZJUFNfc2VsZnRlc3RfY21hYyJ9LAorKyAgICB7RVJSX0ZV TkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTKSwgIkZJUFNfc2VsZnRlc3RfZGVzIn0sCisrICAg IHtFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EpLCAiRklQU19zZWxmdGVzdF9kc2Ei fSwKKysgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0VDRFNBKSwgIkZJUFNfc2Vs ZnRlc3RfZWNkc2EifSwKKysgICAge0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMp LCAiRklQU19zZWxmdGVzdF9obWFjIn0sCisrICAgIHtFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxG VEVTVF9TSEExKSwgIkZJUFNfc2VsZnRlc3Rfc2hhMSJ9LAorKyAgICB7RVJSX0ZVTkMoRklQU19G X0ZJUFNfU0VMRlRFU1RfU0hBMiksICJGSVBTX3NlbGZ0ZXN0X3NoYTIifSwKKysgICAge0VSUl9G VU5DKEZJUFNfRl9PU1NMX0VDRFNBX1NJR05fU0lHKSwgIm9zc2xfZWNkc2Ffc2lnbl9zaWcifSwK KysgICAge0VSUl9GVU5DKEZJUFNfRl9PU1NMX0VDRFNBX1ZFUklGWV9TSUcpLCAib3NzbF9lY2Rz YV92ZXJpZnlfc2lnIn0sCisrICAgIHtFUlJfRlVOQyhGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VO KSwgInJzYV9idWlsdGluX2tleWdlbiJ9LAorKyAgICB7RVJSX0ZVTkMoRklQU19GX1JTQV9PU1NM X0lOSVQpLCAicnNhX29zc2xfaW5pdCJ9LAorKyAgICB7RVJSX0ZVTkMoRklQU19GX1JTQV9PU1NM X1BSSVZBVEVfREVDUllQVCksICJyc2Ffb3NzbF9wcml2YXRlX2RlY3J5cHQifSwKKysgICAge0VS Ul9GVU5DKEZJUFNfRl9SU0FfT1NTTF9QUklWQVRFX0VOQ1JZUFQpLCAicnNhX29zc2xfcHJpdmF0 ZV9lbmNyeXB0In0sCisrICAgIHtFUlJfRlVOQyhGSVBTX0ZfUlNBX09TU0xfUFVCTElDX0RFQ1JZ UFQpLCAicnNhX29zc2xfcHVibGljX2RlY3J5cHQifSwKKysgICAge0VSUl9GVU5DKEZJUFNfRl9S U0FfT1NTTF9QVUJMSUNfRU5DUllQVCksICJyc2Ffb3NzbF9wdWJsaWNfZW5jcnlwdCJ9LAorKyAg ICB7MCwgTlVMTH0KKyt9OworKworK3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRklQU19zdHJfcmVh c29uc1tdID0geworKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJP Ul9VTkRFVEVDVEVEKSwKKysgICAgICJhZGRpdGlvbmFsIGlucHV0IGVycm9yIHVuZGV0ZWN0ZWQi fSwKKysgICAge0VSUl9SRUFTT04oRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkcpLAor KyAgICAgImFkZGl0aW9uYWwgaW5wdXQgdG9vIGxvbmcifSwKKysgICAge0VSUl9SRUFTT04oRklQ U19SX0FMUkVBRFlfSU5TVEFOVElBVEVEKSwgImFscmVhZHkgaW5zdGFudGlhdGVkIn0sCisrICAg IHtFUlJfUkVBU09OKEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRCksICJkcmJnIG5vdCBpbml0 aWFsaXNlZCJ9LAorKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfRFJCR19TVFVDSyksICJkcmJnIHN0 dWNrIn0sCisrICAgIHtFUlJfUkVBU09OKEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQp LCAiZW50cm9weSBlcnJvciB1bmRldGVjdGVkIn0sCisrICAgIHtFUlJfUkVBU09OKEZJUFNfUl9F TlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRCksCisrICAgICAiZW50cm9weSBub3QgcmVx dWVzdGVkIGZvciByZXNlZWQifSwKKysgICAge0VSUl9SRUFTT04oRklQU19SX0VOVFJPUFlfU09V UkNFX1NUVUNLKSwgImVudHJvcHkgc291cmNlIHN0dWNrIn0sCisrICAgIHtFUlJfUkVBU09OKEZJ UFNfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRyksICJlcnJvciBpbml0aWFsaXNpbmcgZHJiZyJ9 LAorKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHKSwgImVy cm9yIGluc3RhbnRpYXRpbmcgZHJiZyJ9LAorKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfRVJST1Jf UkVUUklFVklOR19BRERJVElPTkFMX0lOUFVUKSwKKysgICAgICJlcnJvciByZXRyaWV2aW5nIGFk ZGl0aW9uYWwgaW5wdXQifSwKKysgICAge0VSUl9SRUFTT04oRklQU19SX0VSUk9SX1JFVFJJRVZJ TkdfRU5UUk9QWSksICJlcnJvciByZXRyaWV2aW5nIGVudHJvcHkifSwKKysgICAge0VSUl9SRUFT T04oRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfTk9OQ0UpLCAiZXJyb3IgcmV0cmlldmluZyBub25j ZSJ9LAorKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gp LAorKyAgICAgImZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIn0sCisrICAgIHtFUlJfUkVBU09O KEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQpLCAiZmlwcyBtb2RlIGFscmVhZHkgc2V0In0s CisrICAgIHtFUlJfUkVBU09OKEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCksICJmaXBzIHNl bGZ0ZXN0IGZhaWxlZCJ9LAorKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfRlVOQ1RJT05fRVJST1Ip LCAiZnVuY3Rpb24gZXJyb3IifSwKKysgICAge0VSUl9SRUFTT04oRklQU19SX0dFTkVSQVRFX0VS Uk9SKSwgImdlbmVyYXRlIGVycm9yIn0sCisrICAgIHtFUlJfUkVBU09OKEZJUFNfUl9HRU5FUkFU RV9FUlJPUl9VTkRFVEVDVEVEKSwKKysgICAgICJnZW5lcmF0ZSBlcnJvciB1bmRldGVjdGVkIn0s CisrICAgIHtFUlJfUkVBU09OKEZJUFNfUl9JTlNUQU5USUFURV9FUlJPUiksICJpbnN0YW50aWF0 ZSBlcnJvciJ9LAorKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfSU5URVJOQUxfRVJST1IpLCAiaW50 ZXJuYWwgZXJyb3IifSwKKysgICAge0VSUl9SRUFTT04oRklQU19SX0lOVkFMSURfS0VZX0xFTkdU SCksICJpbnZhbGlkIGtleSBsZW5ndGgifSwKKysgICAge0VSUl9SRUFTT04oRklQU19SX0lOX0VS Uk9SX1NUQVRFKSwgImluIGVycm9yIHN0YXRlIn0sCisrICAgIHtFUlJfUkVBU09OKEZJUFNfUl9L RVlfVE9PX1NIT1JUKSwgImtleSB0b28gc2hvcnQifSwKKysgICAge0VSUl9SRUFTT04oRklQU19S X05PTkNFX0VSUk9SX1VOREVURUNURUQpLCAibm9uY2UgZXJyb3IgdW5kZXRlY3RlZCJ9LAorKyAg ICB7RVJSX1JFQVNPTihGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKSwgIm5vbiBmaXBzIG1ldGhvZCJ9 LAorKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfTk9QUl9URVNUMV9GQUlMVVJFKSwgIm5vcHIgdGVz dDEgZmFpbHVyZSJ9LAorKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfTk9QUl9URVNUMl9GQUlMVVJF KSwgIm5vcHIgdGVzdDIgZmFpbHVyZSJ9LAorKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfTk9UX0lO U1RBTlRJQVRFRCksICJub3QgaW5zdGFudGlhdGVkIn0sCisrICAgIHtFUlJfUkVBU09OKEZJUFNf Ul9QQUlSV0lTRV9URVNUX0ZBSUxFRCksICJwYWlyd2lzZSB0ZXN0IGZhaWxlZCJ9LAorKyAgICB7 RVJSX1JFQVNPTihGSVBTX1JfUEVSU09OQUxJU0FUSU9OX0VSUk9SX1VOREVURUNURUQpLAorKyAg ICAgInBlcnNvbmFsaXNhdGlvbiBlcnJvciB1bmRldGVjdGVkIn0sCisrICAgIHtFUlJfUkVBU09O KEZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HKSwKKysgICAgICJwZXJzb25h bGlzYXRpb24gc3RyaW5nIHRvbyBsb25nIn0sCisrICAgIHtFUlJfUkVBU09OKEZJUFNfUl9QUl9U RVNUMV9GQUlMVVJFKSwgInByIHRlc3QxIGZhaWx1cmUifSwKKysgICAge0VSUl9SRUFTT04oRklQ U19SX1BSX1RFU1QyX0ZBSUxVUkUpLCAicHIgdGVzdDIgZmFpbHVyZSJ9LAorKyAgICB7RVJSX1JF QVNPTihGSVBTX1JfUkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCksCisrICAgICAicmVx dWVzdCBsZW5ndGggZXJyb3IgdW5kZXRlY3RlZCJ9LAorKyAgICB7RVJSX1JFQVNPTihGSVBTX1Jf UkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkcpLAorKyAgICAgInJlcXVlc3QgdG9vIGxhcmdlIGZv ciBkcmJnIn0sCisrICAgIHtFUlJfUkVBU09OKEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUiks ICJyZXNlZWQgY291bnRlciBlcnJvciJ9LAorKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfUkVTRUVE X0VSUk9SKSwgInJlc2VlZCBlcnJvciJ9LAorKyAgICB7RVJSX1JFQVNPTihGSVBTX1JfU0VMRlRF U1RfRkFJTEVEKSwgInNlbGZ0ZXN0IGZhaWxlZCJ9LAorKyAgICB7RVJSX1JFQVNPTihGSVBTX1Jf U0VMRlRFU1RfRkFJTFVSRSksICJzZWxmdGVzdCBmYWlsdXJlIn0sCisrICAgIHtFUlJfUkVBU09O KEZJUFNfUl9URVNUX0ZBSUxVUkUpLCAidGVzdCBmYWlsdXJlIn0sCisrICAgIHtFUlJfUkVBU09O KEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKSwgInVuaW5zdGFudGlhdGUgZXJyb3IifSwKKysg ICAge0VSUl9SRUFTT04oRklQU19SX1VOSU5TVEFOVElBVEVfWkVST0lTRV9FUlJPUiksCisrICAg ICAidW5pbnN0YW50aWF0ZSB6ZXJvaXNlIGVycm9yIn0sCisrICAgIHtFUlJfUkVBU09OKEZJUFNf Ul9VTlNVUFBPUlRFRF9EUkJHX1RZUEUpLCAidW5zdXBwb3J0ZWQgZHJiZyB0eXBlIn0sCisrICAg IHtFUlJfUkVBU09OKEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STSksICJ1bnN1cHBvcnRlZCBw bGF0Zm9ybSJ9LAorKyAgICB7MCwgTlVMTH0KKyt9OworKworKyNlbmRpZgorKworK2ludCBFUlJf bG9hZF9GSVBTX3N0cmluZ3Modm9pZCkKKyt7CisrI2lmbmRlZiBPUEVOU1NMX05PX0VSUgorKwor KyAgICBpZiAoRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nKEZJUFNfc3RyX2Z1bmN0c1swXS5lcnJvcikg PT0gTlVMTCkgeworKyAgICAgICAgRVJSX2xvYWRfc3RyaW5ncygwLCBGSVBTX3N0cl9mdW5jdHMp OworKyAgICAgICAgRVJSX2xvYWRfc3RyaW5ncygwLCBGSVBTX3N0cl9yZWFzb25zKTsKKysgICAg fQorKyNlbmRpZgorKyAgICByZXR1cm4gMTsKKyt9CitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXBy ZTgvY3J5cHRvL2ZpcHMvZmlwc19lcnMuYy5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8v Zmlwcy9maXBzX2Vycy5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNf ZXJzLmMuZmlwcwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwODYyNDc3NiArMDIwMAorKysrIG9wZW5z c2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2Vycy5jCTIwMTgtMDctMjUgMTc6MjY6NTgu NDA4NjI0Nzc2ICswMjAwCitAQCAtMCwwICsxLDcgQEAKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgImZpcHNfZXJy LmgiCisrI2Vsc2UKKytzdGF0aWMgdm9pZCAqZHVtbXkgPSAmZHVtbXk7CisrI2VuZGlmCitkaWZm IC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMK Ky0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMu ZmlwcwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwOTYyNDgwMCArMDIwMAorKysrIG9wZW5zc2wtMS4x LjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYwkyMDE4LTA3LTI1IDE3OjI2 OjU4LjQwOTYyNDgwMCArMDIwMAorQEAgLTAsMCArMSwxMzQgQEAKKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9w ZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAg ICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisr ICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKyt0eXBlZGVmIHN0cnVjdCB7CisrICAgIGNvbnN0IEVWUF9NRCAqKCphbGcpICh2b2lkKTsK KysgICAgY29uc3QgY2hhciAqa2V5LCAqaXY7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQ X01BWF9NRF9TSVpFXTsKKyt9IEhNQUNfS0FUOworKworK3N0YXRpYyBjb25zdCBITUFDX0tBVCB2 ZWN0b3JbXSA9IHsKKysgICAge0VWUF9zaGExLAorKyAgICAgLyogZnJvbSBodHRwOi8vY3NyYy5u aXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9maXBzMTk4L2ZpcHMtMTk4YS5wZGYgKi8KKysgICAg ICIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrICAgICAiU2FtcGxlICMyIiwKKysgICAgIHsweDA5 LCAweDIyLCAweGQzLCAweDQwLCAweDVmLCAweGFhLCAweDNkLCAweDE5LAorKyAgICAgIDB4NGYs IDB4ODIsIDB4YTQsIDB4NTgsIDB4MzAsIDB4NzMsIDB4N2QsIDB4NWMsCisrICAgICAgMHhjNiwg MHhjNywgMHg1ZCwgMHgyNH0KKysgICAgIH0sCisrICAgIHtFVlBfc2hhMjI0LAorKyAgICAgLyog anVzdCBrZWVwIGV4dGVuZGluZyB0aGUgYWJvdmUuLi4gKi8KKysgICAgICIwMTIzNDU2Nzg5Ojs8 PT4/QEFCQyIsCisrICAgICAiU2FtcGxlICMyIiwKKysgICAgIHsweGRkLCAweGVmLCAweDBhLCAw eDQwLCAweGNiLCAweDdkLCAweDUwLCAweGZiLAorKyAgICAgIDB4NmUsIDB4ZTYsIDB4Y2UsIDB4 YTEsIDB4MjAsIDB4YmEsIDB4MjYsIDB4YWEsCisrICAgICAgMHgwOCwgMHhmMywgMHgwNywgMHg3 NSwgMHg4NywgMHhiOCwgMHhhZCwgMHgxYiwKKysgICAgICAweDhjLCAweDhkLCAweDEyLCAweGM3 fQorKyAgICAgfSwKKysgICAge0VWUF9zaGEyNTYsCisrICAgICAiMDEyMzQ1Njc4OTo7PD0+P0BB QkMiLAorKyAgICAgIlNhbXBsZSAjMiIsCisrICAgICB7MHhiOCwgMHhmMiwgMHgwZCwgMHhiNSwg MHg0MSwgMHhlYSwgMHg0MywgMHgwOSwKKysgICAgICAweGNhLCAweDRlLCAweGE5LCAweDM4LCAw eDBjLCAweGQwLCAweGU4LCAweDM0LAorKyAgICAgIDB4ZjcsIDB4MWYsIDB4YmUsIDB4OTEsIDB4 NzQsIDB4YTIsIDB4NjEsIDB4MzgsCisrICAgICAgMHgwZCwgMHhjMSwgMHg3ZSwgMHhhZSwgMHg2 YSwgMHgzNCwgMHg1MSwgMHhkOX0KKysgICAgIH0sCisrICAgIHtFVlBfc2hhMzg0LAorKyAgICAg IjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysgICAgICJTYW1wbGUgIzIiLAorKyAgICAgezB4MDgs IDB4YmMsIDB4YjAsIDB4ZGEsIDB4NDksIDB4MWUsIDB4ODcsIDB4YWQsCisrICAgICAgMHg5YSwg MHgxZCwgMHg2YSwgMHhjZSwgMHgyMywgMHhjNSwgMHgwYiwgMHhmNiwKKysgICAgICAweGI3LCAw eDE4LCAweDA2LCAweGE1LCAweDc3LCAweGNkLCAweDQ5LCAweDA0LAorKyAgICAgIDB4ODksIDB4 ZjEsIDB4ZTYsIDB4MjMsIDB4NDQsIDB4NTEsIDB4NTEsIDB4OWYsCisrICAgICAgMHg4NSwgMHg1 NiwgMHg4MCwgMHg3OSwgMHgwYywgMHhiZCwgMHg0ZCwgMHg1MCwKKysgICAgICAweGE0LCAweDVm LCAweDI5LCAweGUzLCAweDkzLCAweGYwLCAweGU4LCAweDdmfQorKyAgICAgfSwKKysgICAge0VW UF9zaGE1MTIsCisrICAgICAiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKyAgICAgIlNhbXBsZSAj MiIsCisrICAgICB7MHg4MCwgMHg5ZCwgMHg0NCwgMHgwNSwgMHg3YywgMHg1YiwgMHg5NSwgMHg0 MSwKKysgICAgICAweDA1LCAweGJkLCAweDA0LCAweDEzLCAweDE2LCAweGRiLCAweDBmLCAweGFj LAorKyAgICAgIDB4NDQsIDB4ZDUsIDB4YTQsIDB4ZDUsIDB4ZDAsIDB4ODksIDB4MmIsIDB4ZDAs CisrICAgICAgMHg0ZSwgMHg4NiwgMHg2NCwgMHgxMiwgMHhjMCwgMHg5MCwgMHg3NywgMHg2OCwK KysgICAgICAweGYxLCAweDg3LCAweGI3LCAweDdjLCAweDRmLCAweGFlLCAweDJjLCAweDJmLAor KyAgICAgIDB4MjEsIDB4YTUsIDB4YjUsIDB4NjUsIDB4OWEsIDB4NGYsIDB4NGIsIDB4YTcsCisr ICAgICAgMHg0NywgMHgwMiwgMHhhMywgMHhkZSwgMHg5YiwgMHg1MSwgMHhmMSwgMHg0NSwKKysg ICAgICAweGJkLCAweDRmLCAweDI1LCAweDI3LCAweDQyLCAweDk4LCAweDk5LCAweDA1fQorKyAg ICAgfSwKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWMoKQorK3sKKysgICAgaW50IG47 CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9N QVhfTURfU0laRV07CisrICAgIGNvbnN0IEVWUF9NRCAqbWQ7CisrICAgIGNvbnN0IEhNQUNfS0FU ICp0OworKworKyAgICBmb3IgKG4gPSAwLCB0ID0gdmVjdG9yOyBuIDwgc2l6ZW9mKHZlY3Rvcikg LyBzaXplb2YodmVjdG9yWzBdKTsgbisrLCB0KyspIHsKKysgICAgICAgIG1kID0gKCp0LT5hbGcp ICgpOworKyAgICAgICAgSE1BQyhtZCwgdC0+a2V5LCBzdHJsZW4odC0+a2V5KSwKKysgICAgICAg ICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKil0LT5pdiwgc3RybGVuKHQtPml2KSwgb3V0LCAm b3V0bGVuKTsKKysKKysgICAgICAgIGlmIChtZW1jbXAob3V0LCB0LT5rYXZhbCwgb3V0bGVuKSkg eworKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQywgRklQU19S X1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9Cisr ICAgIH0KKysgICAgcmV0dXJuIDE7CisrfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjEu MS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjEuMS1wcmU4L2Ny eXB0by9maXBzL2ZpcHNfbG9jbC5oCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBz L2ZpcHNfbG9jbC5oLmZpcHMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MDk2MjQ4MDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgJMjAxOC0wNy0yNSAx NzoyNjo1OC40MDk2MjQ4MDAgKzAyMDAKK0BAIC0wLDAgKzEsNzEgQEAKKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBt ZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysg KiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu CisrICoKKysgKi8KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrIyBpZmRlZiAgX19jcGx1 c3BsdXMKKytleHRlcm4gIkMiIHsKKysjIGVuZGlmCisrCisrIyBkZWZpbmUgRklQU19NQVhfQ0lQ SEVSX1RFU1RfU0laRSAgICAgICAzMgorKyMgZGVmaW5lIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50 KGNvbXAsIHByZSkgXAorKyAgICAgICAgY29tcCA9IEJOX2JpbjJibihwcmUjI18jI2NvbXAsIHNp emVvZihwcmUjI18jI2NvbXApLCBOVUxMKTsgXAorKyAgICAgICAgaWYgKCFjb21wKSBcCisrICAg ICAgICAgICAgICAgIGdvdG8gZXJyCisrCisrIyBkZWZpbmUgZmlwc19wb3N0X3N0YXJ0ZWQoaWQs IHN1YmlkLCBleCkgMQorKyMgZGVmaW5lIGZpcHNfcG9zdF9zdWNjZXNzKGlkLCBzdWJpZCwgZXgp IDEKKysjIGRlZmluZSBmaXBzX3Bvc3RfZmFpbGVkKGlkLCBzdWJpZCwgZXgpIDEKKysjIGRlZmlu ZSBmaXBzX3Bvc3RfY29ycnVwdChpZCwgc3ViaWQsIGV4KSAxCisrIyBkZWZpbmUgZmlwc19wb3N0 X3N0YXR1cygpIDEKKysKKysjIGlmZGVmICBfX2NwbHVzcGx1cworK30KKysjIGVuZGlmCisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19tZC5jLmZp cHMgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfbWQuYworLS0tIG9wZW5zc2wt MS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX21kLmMuZmlwcwkyMDE4LTA3LTI1IDE3OjI2OjU4 LjQwOTYyNDgwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBz X21kLmMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MDk2MjQ4MDAgKzAyMDAKK0BAIC0wLDAgKzEsMTQ0 IEBACisrLyogZmlwcy9ldnAvZmlwc19tZC5jICovCisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5 OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRl bgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1wbGVt ZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wu CisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1j b21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy ZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8gYWxs IGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKysg KiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NM IGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNv dmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhlIGhv bGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29weXJp Z2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGlj ZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhpcyBw YWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBh dHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5 IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2Ug YXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRl eHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdl bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdh cmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisr ICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91 aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dy YXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3Bl Y2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisrICogICAgdGhlIGFw cHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25v d2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisrICogQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAqIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1 dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysgKiBk ZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2Rl IGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3Ry aWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0K KysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAq ICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhp cyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmlj IFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgor KyAqCisrICovCisrCisrLyogTWluaW1hbCBzdGFuZGFsb25lIEZJUFMgdmVyc2lvbnMgb2YgRGln ZXN0IG9wZXJhdGlvbnMgKi8KKysKKysjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQorKworKyNpbmNs dWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9v YmplY3RzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworK2NvbnN0IEVWUF9NRCAqRklQ U19nZXRfZGlnZXN0YnluaWQoaW50IG5pZCkKKyt7CisrICAgIHN3aXRjaCAobmlkKSB7CisrICAg IGNhc2UgTklEX3NoYTE6CisrICAgICAgICByZXR1cm4gRVZQX3NoYTEoKTsKKysKKysgICAgY2Fz ZSBOSURfc2hhMjI0OgorKyAgICAgICAgcmV0dXJuIEVWUF9zaGEyMjQoKTsKKysKKysgICAgY2Fz ZSBOSURfc2hhMjU2OgorKyAgICAgICAgcmV0dXJuIEVWUF9zaGEyNTYoKTsKKysKKysgICAgY2Fz ZSBOSURfc2hhMzg0OgorKyAgICAgICAgcmV0dXJuIEVWUF9zaGEzODQoKTsKKysKKysgICAgY2Fz ZSBOSURfc2hhNTEyOgorKyAgICAgICAgcmV0dXJuIEVWUF9zaGE1MTIoKTsKKysKKysgICAgZGVm YXVsdDoKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrfQorZGlmZiAtdXAgb3BlbnNz bC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMgb3BlbnNzbC0xLjEuMS1w cmU4L2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0 by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MDk2MjQ4MDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMJMjAxOC0w Ny0yNSAxNzoyNjo1OC40MDk2MjQ4MDAgKzAyMDAKK0BAIC0wLDAgKzEsMjIyIEBACisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqCisrICovCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysKKysjaW5j bHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8bGlt aXRzLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIFBvd2VyIG9uIHNlbGYgdGVz dCAoUE9TVCkgc3VwcG9ydCBmdW5jdGlvbnMgKi8KKysKKysjIGluY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyMgaW5jbHVkZSAiaW50ZXJuYWwvZmlwc19pbnQuaCIKKysjIGluY2x1ZGUgImZpcHNf bG9jbC5oIgorKworKy8qIFJ1biBhbGwgc2VsZnRlc3RzICovCisraW50IEZJUFNfc2VsZnRlc3Qo dm9pZCkKKyt7CisrICAgIGludCBydiA9IDE7CisrICAgIGlmICghRklQU19zZWxmdGVzdF9kcmJn KCkpCisrICAgICAgICBydiA9IDA7CisrICAgIGlmICghRklQU19zZWxmdGVzdF9zaGExKCkpCisr ICAgICAgICBydiA9IDA7CisrICAgIGlmICghRklQU19zZWxmdGVzdF9zaGEyKCkpCisrICAgICAg ICBydiA9IDA7CisrICAgIGlmICghRklQU19zZWxmdGVzdF9obWFjKCkpCisrICAgICAgICBydiA9 IDA7CisrICAgIGlmICghRklQU19zZWxmdGVzdF9jbWFjKCkpCisrICAgICAgICBydiA9IDA7Cisr ICAgIGlmICghRklQU19zZWxmdGVzdF9hZXMoKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgaWYg KCFGSVBTX3NlbGZ0ZXN0X2Flc19jY20oKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgaWYgKCFG SVBTX3NlbGZ0ZXN0X2Flc19nY20oKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgaWYgKCFGSVBT X3NlbGZ0ZXN0X2Flc194dHMoKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgaWYgKCFGSVBTX3Nl bGZ0ZXN0X2RlcygpKQorKyAgICAgICAgcnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3Rf cnNhKCkpCisrICAgICAgICBydiA9IDA7CisrICAgIGlmICghRklQU19zZWxmdGVzdF9lY2RzYSgp KQorKyAgICAgICAgcnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfZHNhKCkpCisrICAg ICAgICBydiA9IDA7CisrICAgIGlmICghRklQU19zZWxmdGVzdF9kaCgpKQorKyAgICAgICAgcnYg PSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfZWNkaCgpKQorKyAgICAgICAgcnYgPSAwOwor KyAgICByZXR1cm4gcnY7CisrfQorKworKy8qIEdlbmVyYWxpemVkIHB1YmxpYyBrZXkgdGVzdCBy b3V0aW5lLiBTaWducyBhbmQgdmVyaWZpZXMgdGhlIGRhdGEKKysgKiBzdXBwbGllZCBpbiB0YnMg dXNpbmcgbWVzYWdlIGRpZ2VzdCBtZCBhbmQgc2V0dGluZyBvcHRpb24gZGlnZXN0CisrICogZmxh Z3MgbWRfZmxhZ3MuIElmIHRoZSAna2F0JyBwYXJhbWV0ZXIgaXMgbm90IE5VTEwgaXQgd2lsbAor KyAqIGFkZGl0aW9uYWxseSBjaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgaXQ6IGEga25vd24g YW5zd2VyIHRlc3QKKysgKiBUaGUgc3RyaW5nICJmYWlsX3N0ciIgaXMgdXNlZCBmb3IgaWRlbnRp ZmljYXRpb24gcHVycG9zZXMgaW4gY2FzZQorKyAqIG9mIGZhaWx1cmUuIElmICJwa2V5IiBpcyBO VUxMIGp1c3QgcGVyZm9ybSBhIG1lc3NhZ2UgZGlnZXN0IGNoZWNrLgorKyAqLworKworK2ludCBm aXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBrZXksCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2ln bmVkIGludCBrYXRsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBf TUQgKmRpZ2VzdCwgdW5zaWduZWQgaW50IGZsYWdzLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqZmFpbF9zdHIpCisreworKyAgICBpbnQgcmV0ID0gMDsKKysgICAg dW5zaWduZWQgY2hhciBzaWd0bXBbMjU2XSwgKnNpZyA9IHNpZ3RtcDsKKysgICAgc2l6ZV90IHNp Z2xlbiA9IHNpemVvZihzaWd0bXApOworKyAgICBFVlBfTURfQ1RYICptY3R4OworKyAgICBFVlBf UEtFWV9DVFggKnBjdHg7CisrCisrICAgIGlmIChkaWdlc3QgPT0gTlVMTCkKKysgICAgICAgIGRp Z2VzdCA9IEVWUF9zaGEyNTYoKTsKKysKKysgICAgbWN0eCA9IEVWUF9NRF9DVFhfbmV3KCk7Cisr CisrICAgIGlmICgoRVZQX1BLRVlfaWQocGtleSkgPT0gRVZQX1BLRVlfUlNBKQorKyAgICAgICAg JiYgKFJTQV9zaXplKEVWUF9QS0VZX2dldDBfUlNBKHBrZXkpKSA+IHNpemVvZihzaWd0bXApKSkg eworKyAgICAgICAgc2lnID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUoRVZQX1BLRVlfZ2V0MF9S U0EocGtleSkpKTsKKysgICAgICAgIHNpZ2xlbiA9IFJTQV9zaXplKEVWUF9QS0VZX2dldDBfUlNB KHBrZXkpKTsKKysgICAgfQorKyAgICBpZiAoIXNpZyB8fCAhIG1jdHgpIHsKKysgICAgICAgIEVW UF9NRF9DVFhfZnJlZShtY3R4KTsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9T SUdOQVRVUkVfVEVTVCwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworKyAgICAgICAgcmV0dXJuIDA7 CisrICAgIH0KKysKKysgICAgaWYgKHRic2xlbiA9PSAtMSkKKysgICAgICAgIHRic2xlbiA9IHN0 cmxlbigoY2hhciAqKXRicyk7CisrCisrICAgIGlmIChFVlBfRGlnZXN0U2lnbkluaXQobWN0eCwg JnBjdHgsIGRpZ2VzdCwgTlVMTCwgcGtleSkgPD0gMCkKKysgICAgICAgIGdvdG8gZXJyb3I7Cisr CisrICAgIGlmIChmbGFncyA9PSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykgeworKyAgICAgICAg RVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcp OworKyAgICAgICAgRVZQX1BLRVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRsZW4ocGN0eCwgMCk7Cisr ICAgIH0KKysKKysgICAgaWYgKEVWUF9EaWdlc3RTaWduVXBkYXRlKG1jdHgsIHRicywgdGJzbGVu KSA8PSAwKQorKyAgICAgICAgZ290byBlcnJvcjsKKysKKysgICAgaWYgKEVWUF9EaWdlc3RTaWdu RmluYWwobWN0eCwgc2lnLCAmc2lnbGVuKSA8PSAwKQorKyAgICAgICAgZ290byBlcnJvcjsKKysK KysgICAgaWYgKGthdCAmJiAoKHNpZ2xlbiAhPSBrYXRsZW4pIHx8IG1lbWNtcChrYXQsIHNpZywg a2F0bGVuKSkpCisrICAgICAgICBnb3RvIGVycm9yOworKworKyAgICBpZiAoRVZQX0RpZ2VzdFZl cmlmeUluaXQobWN0eCwgJnBjdHgsIGRpZ2VzdCwgTlVMTCwgcGtleSkgPD0gMCkKKysgICAgICAg IGdvdG8gZXJyb3I7CisrCisrICAgIGlmIChmbGFncyA9PSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BT UykgeworKyAgICAgICAgRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwY3R4LCBSU0FfUEtD UzFfUFNTX1BBRERJTkcpOworKyAgICAgICAgRVZQX1BLRVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRs ZW4ocGN0eCwgMCk7CisrICAgIH0KKysKKysgICAgaWYgKEVWUF9EaWdlc3RWZXJpZnlVcGRhdGUo bWN0eCwgdGJzLCB0YnNsZW4pIDw9IDApCisrICAgICAgICBnb3RvIGVycm9yOworKworKyAgICBy ZXQgPSBFVlBfRGlnZXN0VmVyaWZ5RmluYWwobWN0eCwgc2lnLCBzaWdsZW4pOworKworKyBlcnJv cjoKKysgICAgaWYgKHNpZyAhPSBzaWd0bXApCisrICAgICAgICBPUEVOU1NMX2ZyZWUoc2lnKTsK KysgICAgRVZQX01EX0NUWF9mcmVlKG1jdHgpOworKyAgICBpZiAocmV0IDw9IDApIHsKKysgICAg ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCwgRklQU19SX1RFU1Rf RkFJTFVSRSk7CisrICAgICAgICBpZiAoZmFpbF9zdHIpCisrICAgICAgICAgICAgRVJSX2FkZF9l cnJvcl9kYXRhKDIsICJUeXBlPSIsIGZhaWxfc3RyKTsKKysgICAgICAgIHJldHVybiAwOworKyAg ICB9CisrICAgIHJldHVybiAxOworK30KKysKKysvKiBHZW5lcmFsaXplZCBzeW1tZXRyaWMgY2lw aGVyIHRlc3Qgcm91dGluZS4gRW5jcnlwdCBkYXRhLCB2ZXJpZnkgcmVzdWx0CisrICogYWdhaW5z dCBrbm93biBhbnN3ZXIsIGRlY3J5cHQgYW5kIGNvbXBhcmUgd2l0aCBvcmlnaW5hbCBwbGFpbnRl eHQuCisrICovCisrCisraW50IGZpcHNfY2lwaGVyX3Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwg Y29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAorKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmtleSwKKysgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyICppdiwKKysgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwbGFp bnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVy dGV4dCwgaW50IGxlbikKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIgcGx0bXBbRklQU19NQVhfQ0lQ SEVSX1RFU1RfU0laRV07CisrICAgIHVuc2lnbmVkIGNoYXIgY2l0bXBbRklQU19NQVhfQ0lQSEVS X1RFU1RfU0laRV07CisrCisrICAgIE9QRU5TU0xfYXNzZXJ0KGxlbiA8PSBGSVBTX01BWF9DSVBI RVJfVEVTVF9TSVpFKTsKKysgICAgbWVtc2V0KHBsdG1wLCAwLCBGSVBTX01BWF9DSVBIRVJfVEVT VF9TSVpFKTsKKysgICAgbWVtc2V0KGNpdG1wLCAwLCBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpF KTsKKysKKysgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXks IGl2LCAxKSA8PSAwKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmIChFVlBfQ2lwaGVyKGN0 eCwgY2l0bXAsIHBsYWludGV4dCwgbGVuKSA8PSAwKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAg IGlmIChtZW1jbXAoY2l0bXAsIGNpcGhlcnRleHQsIGxlbikpCisrICAgICAgICByZXR1cm4gMDsK KysgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2LCAw KSA8PSAwKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmIChFVlBfQ2lwaGVyKGN0eCwgcGx0 bXAsIGNpdG1wLCBsZW4pIDw9IDApCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNt cChwbHRtcCwgcGxhaW50ZXh0LCBsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVy biAxOworK30KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlw cy9maXBzX3JhbmRfbGNsLmguZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlw c19yYW5kX2xjbC5oCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfcmFu ZF9sY2wuaC5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTguNDA5NjI0ODAwICswMjAwCisrKysgb3Bl bnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaAkyMDE4LTA3LTI1IDE3 OjI2OjU4LjQwOTYyNDgwMCArMDIwMAorQEAgLTAsMCArMSwyMDkgQEAKKysvKiBmaXBzL3JhbmQv Zmlwc19yYW5kX2xjbC5oICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChz dGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRp b24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisr ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAg bGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgor KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisr ICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs CisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKyt0eXBlZGVmIHN0cnVjdCBkcmJn X2hhc2hfY3R4X3N0IERSQkdfSEFTSF9DVFg7CisrdHlwZWRlZiBzdHJ1Y3QgZHJiZ19obWFjX2N0 eF9zdCBEUkJHX0hNQUNfQ1RYOworK3R5cGVkZWYgc3RydWN0IGRyYmdfY3RyX2N0eF9zdCBEUkJH X0NUUl9DVFg7CisrCisrLyogODg4IGJpdHMgZnJvbSAxMC4xIHRhYmxlIDIgKi8KKysjZGVmaW5l IEhBU0hfUFJOR19NQVhfU0VFRExFTiAgIDExMQorKworK3N0cnVjdCBkcmJnX2hhc2hfY3R4X3N0 IHsKKysgICAgY29uc3QgRVZQX01EICptZDsKKysgICAgRVZQX01EX0NUWCAqbWN0eDsKKysgICAg dW5zaWduZWQgY2hhciBWW0hBU0hfUFJOR19NQVhfU0VFRExFTl07CisrICAgIHVuc2lnbmVkIGNo YXIgQ1tIQVNIX1BSTkdfTUFYX1NFRURMRU5dOworKyAgICAvKiBUZW1wb3JhcnkgdmFsdWUgc3Rv cmFnZTogc2hvdWxkIGFsd2F5cyBleGNlZWQgbWF4IGRpZ2VzdCBsZW5ndGggKi8KKysgICAgdW5z aWduZWQgY2hhciB2dG1wW0hBU0hfUFJOR19NQVhfU0VFRExFTl07CisrfTsKKysKKytzdHJ1Y3Qg ZHJiZ19obWFjX2N0eF9zdCB7CisrICAgIGNvbnN0IEVWUF9NRCAqbWQ7CisrICAgIEhNQUNfQ1RY ICpoY3R4OworKyAgICB1bnNpZ25lZCBjaGFyIEtbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5z aWduZWQgY2hhciBWW0VWUF9NQVhfTURfU0laRV07CisrfTsKKysKKytzdHJ1Y3QgZHJiZ19jdHJf Y3R4X3N0IHsKKysgICAgQUVTX0tFWSBrczsKKysgICAgc2l6ZV90IGtleWxlbjsKKysgICAgdW5z aWduZWQgY2hhciBLWzMyXTsKKysgICAgdW5zaWduZWQgY2hhciBWWzE2XTsKKysgICAgLyogVGVt cCB2YXJpYWJsZXMgdXNlZCBieSBkZXJpdmF0aW9uIGZ1bmN0aW9uICovCisrICAgIEFFU19LRVkg ZGZfa3M7CisrICAgIEFFU19LRVkgZGZfa3hrczsKKysgICAgLyogVGVtcG9yYXJ5IGJsb2NrIHN0 b3JhZ2UgdXNlZCBieSBjdHJfZGYgKi8KKysgICAgdW5zaWduZWQgY2hhciBibHRtcFsxNl07Cisr ICAgIHNpemVfdCBibHRtcF9wb3M7CisrICAgIHVuc2lnbmVkIGNoYXIgS1hbNDhdOworK307Cisr CisrLyogRFJCRyBpbnRlcm5hbCBmbGFncyAqLworKworKy8qIEZ1bmN0aW9ucyBzaG91bGRuJ3Qg Y2FsbCBlcnIgbGlicmFyeSAqLworKyNkZWZpbmUgRFJCR19GTEFHX05PRVJSICAgICAgICAgICAg ICAgICAweDEKKysvKiBDdXN0b20gcmVzZWVkIGNoZWNraW5nICovCisrI2RlZmluZSBEUkJHX0NV U1RPTV9SRVNFRUQgICAgICAgICAgICAgIDB4MgorKworKy8qIERSQkcgc3RhdHVzIHZhbHVlcyAq LworKy8qIG5vdCBpbml0aWFsaXNlZCAqLworKyNkZWZpbmUgRFJCR19TVEFUVVNfVU5JTklUSUFM SVNFRCAgICAgICAwCisrLyogb2sgYW5kIHJlYWR5IHRvIGdlbmVyYXRlIHJhbmRvbSBiaXRzICov CisrI2RlZmluZSBEUkJHX1NUQVRVU19SRUFEWSAgICAgICAgICAgICAgIDEKKysvKiByZXNlZWQg cmVxdWlyZWQgKi8KKysjZGVmaW5lIERSQkdfU1RBVFVTX1JFU0VFRCAgICAgICAgICAgICAgMgor Ky8qIGZhdGFsIGVycm9yIGNvbmRpdGlvbiAqLworKyNkZWZpbmUgRFJCR19TVEFUVVNfRVJST1Ig ICAgICAgICAgICAgICAzCisrCisrLyogQSBkZWZhdWx0IG1heGltdW0gbGVuZ3RoOiBsYXJnZXIg dGhhbiBhbnkgcmVhc29uYWJsZSB2YWx1ZSB1c2VkIGluIHByYXRpY2UgKi8KKysKKysjZGVmaW5l IERSQkdfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICAgMHg3ZmZmZmZmMAorKy8qIE1heGltdW0g RFJCRyBibG9jayBsZW5ndGg6IGFsbCBtZCBzaXplcyBhcmUgYmlnZ2VyIHRoYW4gY2lwaGVyIGJs b2NrcyBzaXplcworKyAqIHNvIHVzZSBtYXggZGlnZXN0IGxlbmd0aC4KKysgKi8KKysjZGVmaW5l IERSQkdfTUFYX0JMT0NLICAgICAgICAgICAgICAgICAgRVZQX01BWF9NRF9TSVpFCisrCisrI2Rl ZmluZSBEUkJHX0hFQUxUSF9JTlRFUlZBTCAgICAgICAgICAgICgxIDw8IDI0KQorKworKy8qIERS QkcgY29udGV4dCBzdHJ1Y3R1cmUgKi8KKysKKytzdHJ1Y3QgZHJiZ19jdHhfc3QgeworKyAgICAv KiBGaXJzdCB0eXBlcyBjb21tb24gdG8gYWxsIGltcGxlbWVudGF0aW9ucyAqLworKyAgICAvKiBE UkJHIHR5cGU6IGEgTklEIGZvciB0aGUgdW5kZXJseWluZyBhbGdvcml0aG0gKi8KKysgICAgaW50 IHR5cGU7CisrICAgIC8qIFZhcmlvdXMgZXh0ZXJuYWwgZmxhZ3MgKi8KKysgICAgdW5zaWduZWQg aW50IHhmbGFnczsKKysgICAgLyogVmFyaW91cyBpbnRlcm5hbCB1c2Ugb25seSBmbGFncyAqLwor KyAgICB1bnNpZ25lZCBpbnQgaWZsYWdzOworKyAgICAvKiBVc2VkIGZvciBwZXJpb2RpYyBoZWFs dGggY2hlY2tzICovCisrICAgIGludCBoZWFsdGhfY2hlY2tfY250LCBoZWFsdGhfY2hlY2tfaW50 ZXJ2YWw7CisrCisrICAgIC8qIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgc2V0dXAgYnkg bWVjaGFuaXNtIGRyYmdfaW5pdCgpIGNhbGwgKi8KKysgICAgaW50IHN0cmVuZ3RoOworKyAgICBz aXplX3QgYmxvY2tsZW5ndGg7CisrICAgIHNpemVfdCBtYXhfcmVxdWVzdDsKKysKKysgICAgc2l6 ZV90IG1pbl9lbnRyb3B5LCBtYXhfZW50cm9weTsKKysgICAgc2l6ZV90IG1pbl9ub25jZSwgbWF4 X25vbmNlOworKyAgICBzaXplX3QgbWF4X3BlcnMsIG1heF9hZGluOworKyAgICB1bnNpZ25lZCBp bnQgcmVzZWVkX2NvdW50ZXI7CisrICAgIHVuc2lnbmVkIGludCByZXNlZWRfaW50ZXJ2YWw7Cisr ICAgIHNpemVfdCBzZWVkbGVuOworKyAgICBpbnQgc3RhdHVzOworKyAgICAvKiBBcHBsaWNhdGlv biBkYXRhOiB0eXBpY2FsbHkgdXNlZCBieSB0ZXN0IGdldF9lbnRyb3B5ICovCisrICAgIHZvaWQg KmFwcF9kYXRhOworKyAgICAvKiBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBzdHJ1Y3R1cmVzICov CisrICAgIHVuaW9uIHsKKysgICAgICAgIERSQkdfSEFTSF9DVFggaGFzaDsKKysgICAgICAgIERS QkdfSE1BQ19DVFggaG1hYzsKKysgICAgICAgIERSQkdfQ1RSX0NUWCBjdHI7CisrICAgIH0gZDsK KysgICAgLyogSW5pdGlhbGlhc2UgUFJORyBhbmQgc2V0dXAgY2FsbGJhY2tzIGJlbG93ICovCisr ICAgIGludCAoKmluaXQpIChEUkJHX0NUWCAqY3R4LCBpbnQgbmlkLCBpbnQgc2VjdXJpdHksIHVu c2lnbmVkIGludCBmbGFncyk7CisrICAgIC8qIEludGFudGlhdGUgUFJORyAqLworKyAgICBpbnQg KCppbnN0YW50aWF0ZSkgKERSQkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAorKyAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4sCisr ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90 IHBlcnNsZW4pOworKyAgICAvKiByZXNlZWQgKi8KKysgICAgaW50ICgqcmVzZWVkKSAoRFJCR19D VFggKmN0eCwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBz aXplX3QgZW50bGVuLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICph ZGluLCBzaXplX3QgYWRpbmxlbik7CisrICAgIC8qIGdlbmVyYXQgb3V0cHV0ICovCisrICAgIGlu dCAoKmdlbmVyYXRlKSAoRFJCR19DVFggKmN0eCwKKysgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOworKyAgICAvKiB1bmluc3Rh bnRpYXRlICovCisrICAgIGludCAoKnVuaW5zdGFudGlhdGUpIChEUkJHX0NUWCAqY3R4KTsKKysK KysgICAgLyogRW50cm9weSBzb3VyY2UgYmxvY2sgbGVuZ3RoICovCisrICAgIHNpemVfdCBlbnRy b3B5X2Jsb2NrbGVuOworKworKyAgICAvKiBlbnRyb3B5IGdhdGhlcmluZyBmdW5jdGlvbiAqLwor KyAgICBzaXplX3QgKCpnZXRfZW50cm9weSkgKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIg Kipwb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3Qg bWluX2xlbiwgc2l6ZV90IG1heF9sZW4pOworKyAgICAvKiBJbmRpY2F0ZXMgd2UgaGF2ZSBmaW5p c2hlZCB3aXRoIGVudHJvcHkgYnVmZmVyICovCisrICAgIHZvaWQgKCpjbGVhbnVwX2VudHJvcHkp IChEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsKKysKKysg ICAgLyogbm9uY2UgZ2F0aGVyaW5nIGZ1bmN0aW9uICovCisrICAgIHNpemVfdCAoKmdldF9ub25j ZSkgKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKTsK KysgICAgLyogSW5kaWNhdGVzIHdlIGhhdmUgZmluaXNoZWQgd2l0aCBub25jZSBidWZmZXIgKi8K KysgICAgdm9pZCAoKmNsZWFudXBfbm9uY2UpIChEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFy ICpvdXQsIHNpemVfdCBvbGVuKTsKKysKKysgICAgLyogQ29udGludW91cyByYW5kb20gbnVtYmVy IHRlc3QgdGVtcG9yYXJ5IGFyZWEgKi8KKysgICAgLyogTGFzdCBibG9jayAqLworKyAgICB1bnNp Z25lZCBjaGFyIGxiW0VWUF9NQVhfTURfU0laRV07CisrICAgIC8qIHNldCBpZiBsYiBpcyB2YWxp ZCAqLworKyAgICBpbnQgbGJfdmFsaWQ7CisrCisrICAgIC8qIENhbGxiYWNrcyB1c2VkIHdoZW4g Y2FsbGVkIHRocm91Z2ggUkFORCBpbnRlcmZhY2UgKi8KKysgICAgLyogR2V0IGFueSBhZGRpdGlv bmFsIGlucHV0IGZvciBnZW5lcmF0ZSAqLworKyAgICBzaXplX3QgKCpnZXRfYWRpbikgKERSQkdf Q1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KTsKKysgICAgdm9pZCAoKmNsZWFudXBfYWRp bikgKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pOworKyAg ICAvKiBDYWxsYmFjayBmb3IgUkFORF9zZWVkKCksIFJBTkRfYWRkKCkgKi8KKysgICAgaW50ICgq cmFuZF9zZWVkX2NiKSAoRFJCR19DVFggKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKTsK KysgICAgaW50ICgqcmFuZF9hZGRfY2IpIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpOworK307 CisrCisraW50IGZpcHNfZHJiZ19jdHJfaW5pdChEUkJHX0NUWCAqZGN0eCk7CisraW50IGZpcHNf ZHJiZ19oYXNoX2luaXQoRFJCR19DVFggKmRjdHgpOworK2ludCBmaXBzX2RyYmdfaG1hY19pbml0 KERSQkdfQ1RYICpkY3R4KTsKKytpbnQgZmlwc19kcmJnX2thdChEUkJHX0NUWCAqZGN0eCwgaW50 IG5pZCwgdW5zaWduZWQgaW50IGZsYWdzKTsKKytpbnQgZmlwc19kcmJnX2Nwcm5nX3Rlc3QoRFJC R19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm91dCk7CisrCisrI2RlZmluZSBGSVBT X2RpZ2VzdGluaXQgRVZQX0RpZ2VzdEluaXQKKysjZGVmaW5lIEZJUFNfZGlnZXN0dXBkYXRlIEVW UF9EaWdlc3RVcGRhdGUKKysjZGVmaW5lIEZJUFNfZGlnZXN0ZmluYWwgRVZQX0RpZ2VzdEZpbmFs CisrI2RlZmluZSBNX0VWUF9NRF9zaXplIEVWUF9NRF9zaXplCitkaWZmIC11cCBvcGVuc3NsLTEu MS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjEuMS1w cmU4L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYworLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9j cnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMuZmlwcwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwOTYy NDgwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX3JhbmRf bGliLmMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MDk2MjQ4MDAgKzAyMDAKK0BAIC0wLDAgKzEsMjM0 IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor KyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlz dHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK KysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAor KyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoK KysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrLyogSWYgd2UgZG9uJ3QgZGVmaW5l IF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQsIHN0cnVjdCB0aW1ldmFsIHdvbid0CisrICAgYmUgZGVm aW5lZCBhbmQgZ2V0dGltZW9mZGF5KCkgd29uJ3QgYmUgZGVjbGFyZWQgd2l0aCBzdHJpY3QgY29t cGlsZXJzCisrICAgbGlrZSBERUMgQyBpbiBBTlNJIEMgbW9kZS4gICovCisrI2lmbmRlZiBfWE9Q RU5fU09VUkNFX0VYVEVOREVECisrIyBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAxCisr I2VuZGlmCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjaW5jbHVkZSAiaW50ZXJuYWwvZmlwc19pbnQuaCIKKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNpZiAhKGRlZmluZWQo T1BFTlNTTF9TWVNfV0lOMzIpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykpCisrIyBp bmNsdWRlIDxzeXMvdGltZS5oPgorKyNlbmRpZgorKyNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZY V09SS1MpCisrIyBpbmNsdWRlIDx0aW1lLmg+CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX1NZ U19XSU4zMgorKyMgaWZkZWYgT1BFTlNTTF9VTklTVEQKKysjICBpbmNsdWRlIE9QRU5TU0xfVU5J U1RECisrIyBlbHNlCisrIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisrIyBlbmRpZgorKyNlbmRpZgor KworKy8qIEZJUFMgQVBJIGZvciBQUk5HIHVzZS4gU2ltaWxhciB0byBSQU5EIGZ1bmN0aW9uYWxp dHkgYnV0IHdpdGhvdXQKKysgKiBFTkdJTkUgYW5kIGFkZGl0aW9uYWwgY2hlY2tpbmcgZm9yIG5v bi1GSVBTIHJhbmQgbWV0aG9kcy4KKysgKi8KKysKKytzdGF0aWMgY29uc3QgUkFORF9NRVRIT0Qg KmZpcHNfcmFuZF9tZXRoID0gTlVMTDsKKytzdGF0aWMgaW50IGZpcHNfYXBwcm92ZWRfcmFuZF9t ZXRoID0gMDsKKytzdGF0aWMgaW50IGZpcHNfcmFuZF9iaXRzID0gMDsKKysKKysvKiBBbGxvd3Mg YXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgbnVtYmVyIG9mIGJpdHMgYW5kIHVzZXMgbm9uLUZJUFMg bWV0aG9kcyAqLworK3ZvaWQgRklQU19yYW5kX3NldF9iaXRzKGludCBuYml0cykKKyt7CisrICAg IGZpcHNfcmFuZF9iaXRzID0gbmJpdHM7CisrfQorKworK2ludCBGSVBTX3JhbmRfc2V0X21ldGhv ZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCkKKyt7CisrICAgIGlmICghZmlwc19yYW5kX2JpdHMp IHsKKysgICAgICAgIGlmIChtZXRoID09IEZJUFNfZHJiZ19tZXRob2QoKSkKKysgICAgICAgICAg ICBmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDE7CisrICAgICAgICBlbHNlIHsKKysgICAgICAg ICAgICBmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDA7CisrICAgICAgICAgICAgaWYgKEZJUFNf bW9kdWxlX21vZGUoKSkgeworKyAgICAgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JB TkRfU0VUX01FVEhPRCwgRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrICAgICAgICAgICAgICAg IHJldHVybiAwOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKyAgICBmaXBz X3JhbmRfbWV0aCA9IG1ldGg7CisrICAgIHJldHVybiAxOworK30KKysKKytjb25zdCBSQU5EX01F VEhPRCAqRklQU19yYW5kX2dldF9tZXRob2Qodm9pZCkKKyt7CisrICAgIHJldHVybiBmaXBzX3Jh bmRfbWV0aDsKKyt9CisrCisrdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCkKKyt7CisrICAgIGlm IChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+Y2xlYW51cCkKKysgICAgICAgIGZp cHNfcmFuZF9tZXRoLT5jbGVhbnVwKCk7CisrfQorKworK2ludCBGSVBTX3JhbmRfc2VlZChjb25z dCB2b2lkICpidWYsIGludCBudW0pCisreworKyAgICBpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9t ZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQ U19SQU5EX1NFRUQsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOworKyAgICAgICAgcmV0dXJuIDA7 CisrICAgIH0KKysgICAgaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5zZWVk KQorKyAgICAgICAgZmlwc19yYW5kX21ldGgtPnNlZWQoYnVmLCBudW0pOworKyAgICByZXR1cm4g MTsKKyt9CisrCisraW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIGludCBu dW0pCisreworKyAgICBpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxl X21vZGUoKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19SQU5EX0JZVEVTLCBGSVBT X1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIGlm IChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+Ynl0ZXMpCisrICAgICAgICByZXR1 cm4gZmlwc19yYW5kX21ldGgtPmJ5dGVzKGJ1ZiwgbnVtKTsKKysgICAgcmV0dXJuIDA7CisrfQor KworK2ludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpCisreworKyAgICBpZiAoIWZpcHNfYXBwcm92 ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkgeworKyAgICAgICAgRklQU2VycihG SVBTX0ZfRklQU19SQU5EX1NUQVRVUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrICAgICAg ICByZXR1cm4gMDsKKysgICAgfQorKyAgICBpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5k X21ldGgtPnN0YXR1cykKKysgICAgICAgIHJldHVybiBmaXBzX3JhbmRfbWV0aC0+c3RhdHVzKCk7 CisrICAgIHJldHVybiAwOworK30KKysKKysvKiBSZXR1cm4gaW5zdGFudGlhdGVkIHN0cmVuZ3Ro IG9mIFBSTkcuIEZvciBEUkJHIHRoaXMgaXMgYW4gaW50ZXJuYWwKKysgKiBwYXJhbWV0ZXIuIEFu eSBvdGhlciB0eXBlIG9mIFBSTkcgaXMgbm90IGFwcHJvdmVkIGFuZCByZXR1cm5zIDAgaW4KKysg KiBGSVBTIG1vZGUgYW5kIG1heGltdW0gMjU2IG91dHNpZGUgRklQUyBtb2RlLgorKyAqLworKwor K2ludCBGSVBTX3JhbmRfc3RyZW5ndGgodm9pZCkKKyt7CisrICAgIGlmIChmaXBzX3JhbmRfYml0 cykKKysgICAgICAgIHJldHVybiBmaXBzX3JhbmRfYml0czsKKysgICAgaWYgKGZpcHNfYXBwcm92 ZWRfcmFuZF9tZXRoID09IDEpCisrICAgICAgICByZXR1cm4gRklQU19kcmJnX2dldF9zdHJlbmd0 aChGSVBTX2dldF9kZWZhdWx0X2RyYmcoKSk7CisrICAgIGVsc2UgaWYgKGZpcHNfYXBwcm92ZWRf cmFuZF9tZXRoID09IDApIHsKKysgICAgICAgIGlmIChGSVBTX21vZHVsZV9tb2RlKCkpCisrICAg ICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgcmV0dXJuIDI1 NjsKKysgICAgfQorKyAgICByZXR1cm4gMDsKKyt9CisrCisrdm9pZCBGSVBTX2dldF90aW1ldmVj KHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqcGN0cikKKyt7CisrIyBpZmRlZiBP UEVOU1NMX1NZU19XSU4zMgorKyAgICBGSUxFVElNRSBmdDsKKysjIGVsaWYgZGVmaW5lZChPUEVO U1NMX1NZU19WWFdPUktTKQorKyAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisrIyBlbHNlCisrICAg IHN0cnVjdCB0aW1ldmFsIHR2OworKyMgZW5kaWYKKysKKysjIGlmbmRlZiBHRVRQSURfSVNfTUVB TklOR0xFU1MKKysgICAgdW5zaWduZWQgbG9uZyBwaWQ7CisrIyBlbmRpZgorKworKyMgaWZkZWYg T1BFTlNTTF9TWVNfV0lOMzIKKysgICAgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0KTsKKysg ICAgYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpKGZ0LmR3SGlnaERhdGVUaW1lICYgMHhmZik7Cisr ICAgIGJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gOCkgJiAw eGZmKTsKKysgICAgYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpKChmdC5kd0hpZ2hEYXRlVGltZSA+ PiAxNikgJiAweGZmKTsKKysgICAgYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpKChmdC5kd0hpZ2hE YXRlVGltZSA+PiAyNCkgJiAweGZmKTsKKysgICAgYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpKGZ0 LmR3TG93RGF0ZVRpbWUgJiAweGZmKTsKKysgICAgYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpKChm dC5kd0xvd0RhdGVUaW1lID4+IDgpICYgMHhmZik7CisrICAgIGJ1Zls2XSA9ICh1bnNpZ25lZCBj aGFyKSgoZnQuZHdMb3dEYXRlVGltZSA+PiAxNikgJiAweGZmKTsKKysgICAgYnVmWzddID0gKHVu c2lnbmVkIGNoYXIpKChmdC5kd0xvd0RhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOworKyMgZWxpZiBk ZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCisrICAgIGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVB TFRJTUUsICZ0cyk7CisrICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSh0cy50dl9zZWMgJiAw eGZmKTsKKysgICAgYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpKCh0cy50dl9zZWMgPj4gOCkgJiAw eGZmKTsKKysgICAgYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpKCh0cy50dl9zZWMgPj4gMTYpICYg MHhmZik7CisrICAgIGJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSgodHMudHZfc2VjID4+IDI0KSAm IDB4ZmYpOworKyAgICBidWZbNF0gPSAodW5zaWduZWQgY2hhcikodHMudHZfbnNlYyAmIDB4ZmYp OworKyAgICBidWZbNV0gPSAodW5zaWduZWQgY2hhcikoKHRzLnR2X25zZWMgPj4gOCkgJiAweGZm KTsKKysgICAgYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpKCh0cy50dl9uc2VjID4+IDE2KSAmIDB4 ZmYpOworKyAgICBidWZbN10gPSAodW5zaWduZWQgY2hhcikoKHRzLnR2X25zZWMgPj4gMjQpICYg MHhmZik7CisrIyBlbHNlCisrICAgIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworKyAgICBidWZb MF0gPSAodW5zaWduZWQgY2hhcikodHYudHZfc2VjICYgMHhmZik7CisrICAgIGJ1ZlsxXSA9ICh1 bnNpZ25lZCBjaGFyKSgodHYudHZfc2VjID4+IDgpICYgMHhmZik7CisrICAgIGJ1ZlsyXSA9ICh1 bnNpZ25lZCBjaGFyKSgodHYudHZfc2VjID4+IDE2KSAmIDB4ZmYpOworKyAgICBidWZbM10gPSAo dW5zaWduZWQgY2hhcikoKHR2LnR2X3NlYyA+PiAyNCkgJiAweGZmKTsKKysgICAgYnVmWzRdID0g KHVuc2lnbmVkIGNoYXIpKHR2LnR2X3VzZWMgJiAweGZmKTsKKysgICAgYnVmWzVdID0gKHVuc2ln bmVkIGNoYXIpKCh0di50dl91c2VjID4+IDgpICYgMHhmZik7CisrICAgIGJ1Zls2XSA9ICh1bnNp Z25lZCBjaGFyKSgodHYudHZfdXNlYyA+PiAxNikgJiAweGZmKTsKKysgICAgYnVmWzddID0gKHVu c2lnbmVkIGNoYXIpKCh0di50dl91c2VjID4+IDI0KSAmIDB4ZmYpOworKyMgZW5kaWYKKysgICAg YnVmWzhdID0gKHVuc2lnbmVkIGNoYXIpKCpwY3RyICYgMHhmZik7CisrICAgIGJ1Zls5XSA9ICh1 bnNpZ25lZCBjaGFyKSgoKnBjdHIgPj4gOCkgJiAweGZmKTsKKysgICAgYnVmWzEwXSA9ICh1bnNp Z25lZCBjaGFyKSgoKnBjdHIgPj4gMTYpICYgMHhmZik7CisrICAgIGJ1ZlsxMV0gPSAodW5zaWdu ZWQgY2hhcikoKCpwY3RyID4+IDI0KSAmIDB4ZmYpOworKworKyAgICAoKnBjdHIpKys7CisrCisr IyBpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCisrICAgIHBpZCA9ICh1bnNpZ25lZCBsb25n KWdldHBpZCgpOworKyAgICBidWZbMTJdID0gKHVuc2lnbmVkIGNoYXIpKHBpZCAmIDB4ZmYpOwor KyAgICBidWZbMTNdID0gKHVuc2lnbmVkIGNoYXIpKChwaWQgPj4gOCkgJiAweGZmKTsKKysgICAg YnVmWzE0XSA9ICh1bnNpZ25lZCBjaGFyKSgocGlkID4+IDE2KSAmIDB4ZmYpOworKyAgICBidWZb MTVdID0gKHVuc2lnbmVkIGNoYXIpKChwaWQgPj4gMjQpICYgMHhmZik7CisrIyBlbmRpZgorK30K KysKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0 LmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCist LS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzCTIw MTgtMDctMjUgMTc6MjY6NTguNDA5NjI0ODAwICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4 L2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwOTYyNDgw MCArMDIwMAorQEAgLTAsMCArMSwyNDcgQEAKKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBF cmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor KyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisr ICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBpbXBsZW1lbnRh dGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKysg KiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1l cmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFo ZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0byBhbGwgY29k ZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorKyAqIGxo YXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9j dW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJl ZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVy IGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBDb3B5cmlnaHQg cmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBp bgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBhY2th Z2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJp YnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNl ZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBw cm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVh bCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNv ZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3 cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKysgKiAg ICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVz IGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhp YyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZp YyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0aGUgYXBwcyBk aXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVk Z2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBi eSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQUkVT UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisrICogRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK KysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9u IHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorKyAqIGRlcml2 YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fu bm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0 aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorKyAq LworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysg KgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3Ry aWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisr ICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysg KiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisr ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNp bmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBl Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNf cmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+CisrCisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMg UkFORCBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuICgwKTsKKyt9CisrCisrI2Vsc2UKKysKKysj IGluY2x1ZGUgImZpcHNfdXRsLmgiCisrIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKyt0 eXBlZGVmIHN0cnVjdCB7CisrICAgIHVuc2lnbmVkIGNoYXIgRFRbMTZdOworKyAgICB1bnNpZ25l ZCBjaGFyIFZbMTZdOworKyAgICB1bnNpZ25lZCBjaGFyIFJbMTZdOworK30gQUVTX1BSTkdfTUNU OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbWN0X2tleVsxNl0gPQor KyAgICB7IDB4OWYsIDB4NWIsIDB4NTEsIDB4MjAsIDB4MGIsIDB4ZjMsIDB4MzQsIDB4YjUsCisr ICAgIDB4ZDgsIDB4MmIsIDB4ZTgsIDB4YzMsIDB4NzIsIDB4NTUsIDB4YzgsIDB4NDgKKyt9Owor KworK3N0YXRpYyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzEyOF9tY3RfdHYgPSB7CisrICAgIC8q IERUICovCisrICAgIHsweDYzLCAweDc2LCAweGJiLCAweGU1LCAweDI5LCAweDAyLCAweGJhLCAw eDNiLAorKyAgICAgMHg2NywgMHhjOSwgMHgyNSwgMHhmYSwgMHg3MCwgMHgxZiwgMHgxMSwgMHhh Y30sCisrICAgIC8qIFYgKi8KKysgICAgezB4NTcsIDB4MmMsIDB4OGUsIDB4NzYsIDB4ODcsIDB4 MjYsIDB4NDcsIDB4OTcsCisrICAgICAweDdlLCAweDc0LCAweGZiLCAweGRkLCAweGM0LCAweDk1 LCAweDAxLCAweGQxfSwKKysgICAgLyogUiAqLworKyAgICB7MHg0OCwgMHhlOSwgMHhiZCwgMHgw ZCwgMHgwNiwgMHhlZSwgMHgxOCwgMHhmYiwKKysgICAgIDB4ZTQsIDB4NTcsIDB4OTAsIDB4ZDUs IDB4YzMsIDB4ZmMsIDB4OWIsIDB4NzN9CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX21jdF9rZXlbMjRdID0KKysgICAgeyAweGI3LCAweDZjLCAweDM0LCAweGQx LCAweDA5LCAweDY3LCAweGFiLCAweDczLAorKyAgICAweDRkLCAweDVhLCAweGQ1LCAweDM0LCAw eDk4LCAweDE2LCAweDBiLCAweDkxLAorKyAgICAweGJjLCAweDM1LCAweDUxLCAweDE2LCAweDZi LCAweGFlLCAweDkzLCAweDhhCisrfTsKKysKKytzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFl c18xOTJfbWN0X3R2ID0geworKyAgICAvKiBEVCAqLworKyAgICB7MHg4NCwgMHhjZSwgMHgyMiwg MHg3ZCwgMHg5MSwgMHg1YSwgMHhhMywgMHhjOSwKKysgICAgIDB4ODQsIDB4M2MsIDB4MGEsIDB4 YjMsIDB4YTksIDB4NjMsIDB4MTUsIDB4NTJ9LAorKyAgICAvKiBWICovCisrICAgIHsweGI2LCAw eGFmLCAweGU2LCAweDhmLCAweDk5LCAweDllLCAweDkwLCAweDY0LAorKyAgICAgMHhkZCwgMHhj NywgMHg3YSwgMHhjMSwgMHhiYiwgMHg5MCwgMHgzYSwgMHg2ZH0sCisrICAgIC8qIFIgKi8KKysg ICAgezB4ZmMsIDB4ODUsIDB4NjAsIDB4OWEsIDB4MjksIDB4NmYsIDB4ZWYsIDB4MjEsCisrICAg ICAweGRkLCAweDg2LCAweDIwLCAweDMyLCAweDhhLCAweDI5LCAweDZmLCAweDQ3fQorK307Cisr Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9tY3Rfa2V5WzMyXSA9CisrICAg IHsgMHg5YiwgMHgwNSwgMHhjOCwgMHg2OCwgMHhmZiwgMHg0NywgMHhmOCwgMHgzYSwKKysgICAg MHhhNiwgMHgzYSwgMHhhOCwgMHhjYiwgMHg0ZSwgMHg3MSwgMHhiMiwgMHhlMCwKKysgICAgMHhi OCwgMHg3ZSwgMHhmMSwgMHgzNywgMHhiNiwgMHhiNCwgMHhmNiwgMHg2ZCwKKysgICAgMHg4Niwg MHgzMiwgMHhmYywgMHgxZiwgMHg1ZSwgMHgxZCwgMHgxZSwgMHg1MAorK307CisrCisrc3RhdGlj IGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMjU2X21jdF90diA9IHsKKysgICAgLyogRFQgKi8KKysg ICAgezB4MzEsIDB4NmUsIDB4MzUsIDB4OWEsIDB4YjEsIDB4NDQsIDB4ZjAsIDB4ZWUsCisrICAg ICAweDYyLCAweDZkLCAweDA0LCAweDQ2LCAweGUwLCAweGEzLCAweDkyLCAweDRjfSwKKysgICAg LyogViAqLworKyAgICB7MHg0ZiwgMHhjZCwgMHhjMSwgMHg4NywgMHg4MiwgMHgxZiwgMHg0ZCwg MHhhMSwKKysgICAgIDB4M2UsIDB4MGUsIDB4NTYsIDB4NDQsIDB4NTksIDB4ZTgsIDB4ODMsIDB4 Y2F9LAorKyAgICAvKiBSICovCisrICAgIHsweGM4LCAweDg3LCAweGMyLCAweDYxLCAweDViLCAw eGQwLCAweGI5LCAweGUxLAorKyAgICAgMHhlNywgMHhmMywgMHg4YiwgMHhkNywgMHg1YiwgMHhk NSwgMHhmMSwgMHg4ZH0KKyt9OworKworK3N0YXRpYyB2b2lkIGR1bXAoY29uc3QgdW5zaWduZWQg Y2hhciAqYiwgaW50IG4pCisreworKyAgICB3aGlsZSAobi0tID4gMCkgeworKyAgICAgICAgcHJp bnRmKCIgJTAyeCIsICpiKyspOworKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkIGNvbXBhcmUo Y29uc3QgdW5zaWduZWQgY2hhciAqcmVzdWx0LAorKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqZXhwZWN0ZWQsIGludCBuKQorK3sKKysgICAgaW50IGk7CisrCisrICAg IGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisrICAgICAgICBpZiAocmVzdWx0W2ldICE9IGV4cGVj dGVkW2ldKSB7CisrICAgICAgICAgICAgcHV0cygiUmFuZG9tIHRlc3QgZmFpbGVkLCBnb3Q6Iik7 CisrICAgICAgICAgICAgZHVtcChyZXN1bHQsIG4pOworKyAgICAgICAgICAgIHB1dHMoIlxuICAg ICAgICAgICAgICAgZXhwZWN0ZWQ6Iik7CisrICAgICAgICAgICAgZHVtcChleHBlY3RlZCwgbik7 CisrICAgICAgICAgICAgcHV0Y2hhcignXG4nKTsKKysgICAgICAgICAgICBFWElUKDEpOworKyAg ICAgICAgfQorK30KKysKKytzdGF0aWMgdm9pZCBydW5fdGVzdChjb25zdCB1bnNpZ25lZCBjaGFy ICprZXksIGludCBrZXlsZW4sCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUVTX1BSTkdf TUNUICogdHYpCisreworKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNl0sIGR0WzE2XTsKKysgICAg aW50IGksIGo7CisrICAgIEZJUFNfeDkzMV9yZXNldCgpOworKyAgICBGSVBTX3g5MzFfdGVzdF9t b2RlKCk7CisrICAgIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKKysgICAgRklQU194 OTMxX3NlZWQodHYtPlYsIDE2KTsKKysgICAgbWVtY3B5KGR0LCB0di0+RFQsIDE2KTsKKysgICAg Zm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKysgICAgICAgIEZJUFNfeDkzMV9zZXRfZHQo ZHQpOworKyAgICAgICAgRklQU194OTMxX2J5dGVzKGJ1ZiwgMTYpOworKyAgICAgICAgLyogSW5j cmVtZW50IERUICovCisrICAgICAgICBmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pIHsKKysgICAg ICAgICAgICBkdFtqXSsrOworKyAgICAgICAgICAgIGlmIChkdFtqXSkKKysgICAgICAgICAgICAg ICAgYnJlYWs7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgY29tcGFyZShidWYsIHR2LT5S LCAxNik7CisrfQorKworK2ludCBtYWluKCkKKyt7CisrICAgIHJ1bl90ZXN0KGFlc18xMjhfbWN0 X2tleSwgMTYsICZhZXNfMTI4X21jdF90dik7CisrICAgIHByaW50ZigiRklQUyBQUk5HIHRlc3Qg MSBkb25lXG4iKTsKKysgICAgcnVuX3Rlc3QoYWVzXzE5Ml9tY3Rfa2V5LCAyNCwgJmFlc18xOTJf bWN0X3R2KTsKKysgICAgcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAyIGRvbmVcbiIpOworKyAgICBy dW5fdGVzdChhZXNfMjU2X21jdF9rZXksIDMyLCAmYWVzXzI1Nl9tY3RfdHYpOworKyAgICBwcmlu dGYoIkZJUFMgUFJORyB0ZXN0IDMgZG9uZVxuIik7CisrICAgIHJldHVybiAwOworK30KKysKKysj ZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX3JzYV9z ZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfcnNhX3Nl bGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2Vs ZnRlc3QuYy5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTguNDEwNjI0ODI0ICswMjAwCisrKysgb3Bl bnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMJMjAxOC0wNy0y NSAxNzoyNjo1OC40MTA2MjQ4MjQgKzAyMDAKK0BAIC0wLDAgKzEsNTc4IEBACisrLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24u CisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgor KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisr ICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs CisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrIyBpbmNsdWRlICJpbnRlcm5hbC9maXBzX2ludC5oIgorKyNlbmRpZgorKyNp bmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysj aW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworK3N0YXRp YyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5KQorK3sKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2V5ZGF0YV9uW10gPSB7CisrICAgICAgICAweDAwLCAweGM5LCAweGQ1LCAweDZkLCAw eDlkLCAweDkwLCAweGRiLCAweDQzLCAweGQ2LCAweDAyLCAweGVkLCAweDk2LCAweDg4LCAweDEz LCAweDhhLAorKyAgICAgICAgMHhiMiwgMHhiZiwgMHg2ZSwgMHhhMSwgMHgwNiwgMHgxMCwgMHhi MiwgMHg3OCwgMHgzNywgMHhhNywgMHgxNCwgMHhhOCwgMHhmZiwgMHhkZCwgMHgwMCwKKysgICAg ICAgIDB4ZGQsIDB4YjQsIDB4OTMsIDB4YTAsIDB4NDUsIDB4Y2MsIDB4OTYsIDB4OTAsIDB4ZWQs IDB4YWQsIDB4YTksIDB4ZGQsIDB4YzQsIDB4ZDYsIDB4Y2EsCisrICAgICAgICAweDBjLCAweGYw LCAweGVkLCAweDRmLCAweDcyLCAweDVlLCAweDIxLCAweDQ5LCAweDlhLCAweDE4LCAweDEyLCAw eDE1LCAweDhmLCAweDkwLCAweDVhLAorKyAgICAgICAgMHhkYiwgMHhiNiwgMHgzMywgMHg5OSwg MHhhMywgMHhlNiwgMHhiNCwgMHhmMCwgMHhjNCwgMHg5NywgMHgyMSwgMHgyNiwgMHhiYiwgMHhl MywgMHhiYSwKKysgICAgICAgIDB4ZjIsIDB4ZmYsIDB4YTAsIDB4NzIsIDB4ZGEsIDB4ODksIDB4 NjMsIDB4OGUsIDB4OGIsIDB4M2UsIDB4MDgsIDB4OWQsIDB4OTIsIDB4MmEsIDB4YmUsCisrICAg ICAgICAweDE2LCAweGUxLCAweDQzLCAweDE1LCAweGZjLCAweDU3LCAweGM3LCAweDFmLCAweDA5 LCAweDExLCAweDY3LCAweDFjLCAweGE5LCAweDk2LCAweGQxLAorKyAgICAgICAgMHg4YiwgMHgz ZSwgMHg4MCwgMHg5MywgMHhjMSwgMHg1OSwgMHhkMCwgMHg2ZCwgMHgzOSwgMHhmMiwgMHhhYywg MHg5NSwgMHhjYywgMHgxMCwgMHg3NSwKKysgICAgICAgIDB4ZTksIDB4MzEsIDB4MjQsIDB4ZDEs IDB4NDMsIDB4YWYsIDB4NjgsIDB4NTIsIDB4NGIsIDB4ZTcsIDB4MTYsIDB4ZDcsIDB4NDksIDB4 NjUsIDB4NmYsCisrICAgICAgICAweDI2LCAweGMwLCAweDg2LCAweGFkLCAweGMwLCAweDA3LCAw eDBhLCAweGMxLCAweGUxLCAweDJmLCAweDg3LCAweDg1LCAweDg2LCAweDNiLCAweGRjLAorKyAg ICAgICAgMHg1YSwgMHg5OSwgMHhiZSwgMHhlOSwgMHhmOSwgMHhiOSwgMHhlOSwgMHg4MiwgMHgy NywgMHg1MSwgMHgwNCwgMHgxNSwgMHhhYiwgMHgwNiwgMHgwZSwKKysgICAgICAgIDB4NzYsIDB4 NWEsIDB4MjgsIDB4OGQsIDB4OTIsIDB4YmQsIDB4YzUsIDB4YjUsIDB4N2IsIDB4YTgsIDB4ZGYs IDB4NGUsIDB4NDcsIDB4YTIsIDB4YzEsCisrICAgICAgICAweGU3LCAweDUyLCAweGJmLCAweDQ3 LCAweGY3LCAweDYyLCAweGUwLCAweDNhLCAweDZmLCAweDRkLCAweDZhLCAweDRkLCAweDRlLCAw eGQ0LCAweGI5LAorKyAgICAgICAgMHg1OSwgMHg2OSwgMHhmYSwgMHhiMiwgMHgxNCwgMHhjMSwg MHhlZSwgMHhlNiwgMHgyZiwgMHg5NSwgMHhjZCwgMHg5NCwgMHg3MiwgMHhhZSwgMHhlNCwKKysg ICAgICAgIDB4ZGIsIDB4MTgsIDB4OWEsIDB4YzQsIDB4Y2QsIDB4NzAsIDB4YmQsIDB4ZWUsIDB4 MzEsIDB4MTYsIDB4YjcsIDB4NDksIDB4NjUsIDB4YWMsIDB4NDAsCisrICAgICAgICAweDE5LCAw eDBlLCAweGI1LCAweDZkLCAweDgzLCAweGYxLCAweDM2LCAweGJiLCAweDA4LCAweDJmLCAweDJl LCAweDRlLCAweDkyLCAweDYyLCAweGE0LAorKyAgICAgICAgMHhmZiwgMHg1MCwgMHhkYiwgMHgy MCwgMHg0NSwgMHhhMiwgMHhlYiwgMHgxNiwgMHg3YSwgMHhmMiwgMHhkNSwgMHgyOCwgMHhjMSwg MHhmZCwgMHg0ZSwKKysgICAgICAgIDB4MDMsIDB4NzEKKysgICAgfTsKKysKKysgICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5ZGF0YV9lW10gPSB7IDB4MDEsIDB4MDAsIDB4MDEgfTsK KysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5ZGF0YV9kW10gPSB7CisrICAg ICAgICAweDM2LCAweDI3LCAweDNkLCAweGIxLCAweGY5LCAweDFiLCAweGRiLCAweGE3LCAweGEw LCAweDQxLCAweDdmLCAweDEyLCAweDIzLCAweGFjLCAweDIzLAorKyAgICAgICAgMHgyOSwgMHg5 OSwgMHhkNSwgMHgzYSwgMHg3YiwgMHg2MCwgMHg2NywgMHg0MSwgMHgwNywgMHg2MywgMHg1Mywg MHhiNCwgMHhkMiwgMHhlNywgMHg1OCwKKysgICAgICAgIDB4OTUsIDB4MGEsIDB4YzcsIDB4MDUs IDB4ZjMsIDB4NGUsIDB4YjIsIDB4YjQsIDB4MTIsIDB4ZDQsIDB4NzAsIDB4ZGMsIDB4NGYsIDB4 ODUsIDB4MDYsCisrICAgICAgICAweGQzLCAweGRkLCAweGQ4LCAweDYzLCAweDI3LCAweDNlLCAw eDY3LCAweDMxLCAweDIxLCAweDI0LCAweDM5LCAweDA0LCAweGJjLCAweDA2LCAweGE0LAorKyAg ICAgICAgMHhjYywgMHhjZSwgMHgyYiwgMHg3YSwgMHhmZSwgMHg3YiwgMHhhZCwgMHhkZSwgMHgx MSwgMHg2ZSwgMHhhMywgMHhhNSwgMHhlNiwgMHgwNCwgMHg1MywKKysgICAgICAgIDB4MGUsIDB4 YTMsIDB4NGUsIDB4MmQsIDB4YjQsIDB4OGYsIDB4MzEsIDB4YmYsIDB4Y2EsIDB4NzUsIDB4MjUs IDB4NTIsIDB4MDIsIDB4ODUsIDB4ZGUsCisrICAgICAgICAweDNkLCAweGIyLCAweDcyLCAweDQz LCAweGIyLCAweDg5LCAweDhhLCAweDlhLCAweDM0LCAweDQxLCAweDI2LCAweDNmLCAweDlhLCAw eDY3LCAweGJlLAorKyAgICAgICAgMHhhNCwgMHg5NiwgMHg3YiwgMHgwZSwgMHg3NSwgMHhiYSwg MHhhNiwgMHg5MywgMHhkNSwgMHhiOCwgMHhkOCwgMHhiOCwgMHg1NywgMHhmMiwgMHg0YiwKKysg ICAgICAgIDB4MGYsIDB4MTQsIDB4ODEsIDB4ZDEsIDB4NTcsIDB4NGUsIDB4ZjYsIDB4NDUsIDB4 NGMsIDB4YTYsIDB4M2IsIDB4ZDAsIDB4NzAsIDB4Y2EsIDB4ZDMsCisrICAgICAgICAweDlkLCAw eDU1LCAweGRlLCAweDIyLCAweDA1LCAweGU3LCAweDhlLCAweDI4LCAweDRkLCAweGVlLCAweDEx LCAweGNmLCAweGI2LCAweDY3LCAweDc2LAorKyAgICAgICAgMHgwOSwgMHhkMywgMHhlMywgMHgz YywgMHgxMywgMHhmOSwgMHg5OSwgMHgzNCwgMHgxMCwgMHg3YiwgMHhlYywgMHg4MSwgMHgzOCwg MHhmMCwgMHhiNiwKKysgICAgICAgIDB4MzQsIDB4OWMsIDB4OWIsIDB4NTAsIDB4NmYsIDB4MGIs IDB4OTEsIDB4ODEsIDB4NGQsIDB4ODksIDB4OTQsIDB4MDQsIDB4N2IsIDB4ZjAsIDB4M2MsCisr ICAgICAgICAweGY0LCAweGIxLCAweGIyLCAweDAwLCAweDQ4LCAweDhkLCAweDVhLCAweDhmLCAw eDg4LCAweDllLCAweGM1LCAweGFiLCAweDNhLCAweDllLCAweDQ0LAorKyAgICAgICAgMHgzZiwg MHg1NCwgMHhlNywgMHhkOSwgMHg2ZSwgMHg0NywgMHhhYSwgMHhhMSwgMHhiZCwgMHg0MCwgMHg0 NiwgMHgzMSwgMHhmOSwgMHhmMCwgMHgzNCwKKysgICAgICAgIDB4YjYsIDB4MDQsIDB4ZTEsIDB4 MmIsIDB4NWIsIDB4NzMsIDB4ODYsIDB4ZGQsIDB4M2EsIDB4OTIsIDB4MWIsIDB4NzEsIDB4Yzcs IDB4M2YsIDB4MzIsCisrICAgICAgICAweGU1LCAweGMzLCAweGMyLCAweGFiLCAweGExLCAweDdl LCAweGJmLCAweGE0LCAweDUyLCAweGEwLCAweGIwLCAweDY4LCAweDkwLCAweGQxLCAweDIwLAor KyAgICAgICAgMHgxMiwgMHg3OSwgMHhlOSwgMHhkNywgMHhjOSwgMHg0MCwgMHhiYSwgMHhmMiwg MHgxOSwgMHhjNywgMHhhNSwgMHgwMCwgMHg5MiwgMHg4NiwgMHgwZCwKKysgICAgICAgIDB4MDEK KysgICAgfTsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5ZGF0YV9wW10g PSB7CisrICAgICAgICAweDAwLCAweGZjLCAweDVjLCAweDZlLCAweDE2LCAweGNlLCAweDFmLCAw eDAzLCAweDdiLCAweGNkLCAweGY3LCAweGIzLCAweDcyLCAweGIyLCAweDhmLAorKyAgICAgICAg MHgxNiwgMHg3MiwgMHhiOCwgMHg1NiwgMHhhZSwgMHhmNywgMHhjZCwgMHg2NywgMHhkOCwgMHg0 ZSwgMHg3ZCwgMHgwNywgMHhhZiwgMHhkNSwgMHg0MywKKysgICAgICAgIDB4MjYsIDB4YzMsIDB4 MzUsIDB4YmUsIDB4NDMsIDB4OGYsIDB4NGUsIDB4MmYsIDB4MWMsIDB4NDMsIDB4NGUsIDB4NmIs IDB4ZDIsIDB4YjIsIDB4ZWMsCisrICAgICAgICAweDUyLCAweDZkLCAweDk3LCAweDUyLCAweDJi LCAweGNjLCAweDVjLCAweDNhLCAweDZiLCAweGY0LCAweDE0LCAweGM2LCAweDc0LCAweGRhLCAw eDY2LAorKyAgICAgICAgMHgzOCwgMHgxYywgMHg3YSwgMHgzZiwgMHg4NCwgMHgyZiwgMHhlMywg MHhmOSwgMHg1YSwgMHhiOCwgMHg2NSwgMHg2OSwgMHg0NiwgMHgwNiwgMHhhMywKKysgICAgICAg IDB4MzcsIDB4NzksIDB4YjIsIDB4YTEsIDB4NWIsIDB4NTgsIDB4ZWQsIDB4NWUsIDB4YTcsIDB4 NWYsIDB4OGMsIDB4NjUsIDB4NjYsIDB4YmIsIDB4ZDEsCisrICAgICAgICAweDI0LCAweDM2LCAw eGU2LCAweDM3LCAweGE3LCAweDNkLCAweDQ5LCAweDc3LCAweDhhLCAweDhjLCAweDM0LCAweGQ4 LCAweDY5LCAweDI5LCAweGYzLAorKyAgICAgICAgMHg0ZCwgMHg1OCwgMHgyMiwgMHhiMCwgMHg1 MSwgMHgyNCwgMHhiNiwgMHg0MCwgMHhhOCwgMHg4NiwgMHg1OSwgMHgwYSwgMHhiNywgMHhiYSwg MHg1YywKKysgICAgICAgIDB4OTcsIDB4ZGEsIDB4NTcsIDB4ZTgsIDB4MzYsIDB4ZGEsIDB4N2Es IDB4OWMsIDB4YWQKKysgICAgfTsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg a2V5ZGF0YV9xW10gPSB7CisrICAgICAgICAweDAwLCAweGNjLCAweGJlLCAweDdiLCAweDA5LCAw eDY5LCAweDA2LCAweGVlLCAweDQ1LCAweGJmLCAweDg4LCAweDQ3LCAweDM4LCAweGE4LCAweGY4 LAorKyAgICAgICAgMHgxNywgMHhlNSwgMHhiNiwgMHhiYSwgMHg2NywgMHg1NSwgMHhlMywgMHhl OCwgMHgwNSwgMHg4YiwgMHhiOCwgMHhlMiwgMHg1MywgMHhkNiwgMHg4ZSwKKysgICAgICAgIDB4 ZWYsIDB4MmMsIDB4ZTcsIDB4NGYsIDB4NGEsIDB4ZjcsIDB4NGUsIDB4MjYsIDB4OGQsIDB4ODUs IDB4MGIsIDB4M2YsIDB4ZWMsIDB4YzMsIDB4MWMsCisrICAgICAgICAweGQ0LCAweGViLCAweGVj LCAweDZhLCAweGM4LCAweDcyLCAweDJhLCAweDI1LCAweDdkLCAweGZkLCAweGE2LCAweDc3LCAw eDk2LCAweGYwLCAweDFlLAorKyAgICAgICAgMHhjZCwgMHgyOCwgMHg1NywgMHhmOCwgMHgzNywg MHgzMCwgMHg3NSwgMHg2YiwgMHhiZCwgMHhkNCwgMHg3YiwgMHgwYywgMHg4NywgMHhjNSwgMHg2 YywKKysgICAgICAgIDB4ODcsIDB4NDAsIDB4YTUsIDB4YmIsIDB4MjcsIDB4MmMsIDB4NzgsIDB4 YzksIDB4NzQsIDB4NWEsIDB4NTQsIDB4NWIsIDB4MGIsIDB4MzAsIDB4NmYsCisrICAgICAgICAw eDQ0LCAweDRhLCAweGZhLCAweDcxLCAweGU0LCAweDIxLCAweDYxLCAweDY2LCAweGY5LCAweGVl LCAweDY1LCAweGRlLCAweDdjLCAweDA0LCAweGQ3LAorKyAgICAgICAgMHhmZCwgMHhhOSwgMHgx NSwgMHg1YiwgMHg3ZiwgMHhlMiwgMHg3YSwgMHhiYSwgMHg2OSwgMHg4NiwgMHg3MiwgMHhhNiwg MHgwNiwgMHg4ZCwgMHg5YiwKKysgICAgICAgIDB4OTAsIDB4NTUsIDB4NjAsIDB4OWUsIDB4NGMs IDB4NWQsIDB4YTksIDB4YjYsIDB4NTUKKysgICAgfTsKKysKKysgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIga2V5ZGF0YV9kbXAxW10gPSB7CisrICAgICAgICAweDdhLCAweGQ2LCAweDEy LCAweGQwLCAweDBlLCAweGVjLCAweDkxLCAweGE5LCAweDg1LCAweDhiLCAweGY4LCAweDUwLCAw eGYwLCAweDExLCAweDJlLAorKyAgICAgICAgMHgwMCwgMHgxMSwgMHgzMiwgMHg0MCwgMHg2MCwg MHg2NiwgMHgxZiwgMHgxMSwgMHhlZSwgMHhjMiwgMHg3NSwgMHgyNywgMHg2NSwgMHg0YiwgMHgx NiwKKysgICAgICAgIDB4NjcsIDB4MTYsIDB4OTUsIDB4ZDIsIDB4MTQsIDB4YzMsIDB4MWQsIDB4 YjMsIDB4NDgsIDB4MWYsIDB4YjcsIDB4ZTQsIDB4MGIsIDB4MmIsIDB4NzQsCisrICAgICAgICAw eGMzLCAweGRiLCAweDUwLCAweDI3LCAweGY5LCAweDg1LCAweDNhLCAweGZhLCAweGE5LCAweDA4 LCAweDIzLCAweGMxLCAweDY1LCAweDNkLCAweDM0LAorKyAgICAgICAgMHgzYSwgMHhjOCwgMHg1 NiwgMHg3YSwgMHg2NSwgMHg0NSwgMHgzNiwgMHg2ZSwgMHhhZSwgMHgyYSwgMHhjZSwgMHg5Ziwg MHg0MywgMHg0MywgMHhkNywKKysgICAgICAgIDB4MTAsIDB4ZTksIDB4OWUsIDB4MTgsIDB4ZjQs IDB4YTQsIDB4MzUsIDB4ZGEsIDB4OGEsIDB4NmIsIDB4YjAsIDB4M2YsIDB4ZGQsIDB4NTMsIDB4 ZTMsCisrICAgICAgICAweGE4LCAweGM1LCAweDRlLCAweDc5LCAweDlkLCAweDFmLCAweDUxLCAw eDhjLCAweGEyLCAweGNhLCAweDY2LCAweDNjLCAweDZhLCAweDJhLCAweGZmLAorKyAgICAgICAg MHg4ZSwgMHhkMiwgMHhmMywgMHhiNywgMHhjYiwgMHg4MiwgMHhkYSwgMHhkZSwgMHgyYywgMHhl NiwgMHhkMiwgMHg4YywgMHhiMywgMHhhZCwgMHhiNiwKKysgICAgICAgIDB4NGMsIDB4OTUsIDB4 NTUsIDB4NzYsIDB4YmQsIDB4YzksIDB4YzgsIDB4ZDEKKysgICAgfTsKKysKKysgICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5ZGF0YV9kbXExW10gPSB7CisrICAgICAgICAweDAwLCAw eDgzLCAweDIzLCAweDFkLCAweGJiLCAweDExLCAweDQyLCAweDE3LCAweDJiLCAweDI1LCAweDVh LCAweDJjLCAweDAzLCAweGU2LCAweDc1LAorKyAgICAgICAgMHhjMSwgMHgxOCwgMHhhOCwgMHhj OSwgMHgwYiwgMHg5NiwgMHhiZiwgMHhiYSwgMHhjNCwgMHg5MiwgMHg5MSwgMHg4MCwgMHhhNSwg MHgyMiwgMHgyZiwKKysgICAgICAgIDB4YmEsIDB4OTEsIDB4OTAsIDB4MzYsIDB4MDEsIDB4NTYs IDB4MTUsIDB4MDAsIDB4MmMsIDB4NzQsIDB4YTIsIDB4OTcsIDB4ZjcsIDB4MTUsIDB4YTEsCisr ICAgICAgICAweDQ5LCAweGRmLCAweDMyLCAweDM1LCAweGQyLCAweGRkLCAweDBjLCAweDkxLCAw eGE2LCAweGY4LCAweGU3LCAweGJlLCAweDgxLCAweDM2LCAweDliLAorKyAgICAgICAgMHgwMywg MHhkYywgMHg2YiwgMHgzYiwgMHhkOCwgMHg1ZCwgMHg3OSwgMHg1NywgMHhlMCwgMHhlNiwgMHg0 ZiwgMHg0OSwgMHhkZiwgMHg0YywgMHg1YywKKysgICAgICAgIDB4MGUsIDB4ZTUsIDB4MjEsIDB4 NDEsIDB4OTUsIDB4ZmQsIDB4YWQsIDB4ZmYsIDB4OWEsIDB4M2UsIDB4YTAsIDB4ZjksIDB4MGYs IDB4NTksIDB4OWUsCisrICAgICAgICAweDZhLCAweGE3LCAweDdiLCAweDcxLCAweGE3LCAweDI0 LCAweDlhLCAweDM2LCAweDUyLCAweGFlLCAweDk3LCAweDIwLCAweGMxLCAweDVlLCAweDc4LAor KyAgICAgICAgMHhkOSwgMHg0NywgMHg4YiwgMHgxZSwgMHg2NywgMHhmMiwgMHhhZiwgMHg5OCwg MHhlNiwgMHgyZCwgMHhlZiwgMHgxMCwgMHhkNywgMHhmMSwgMHhhYiwKKysgICAgICAgIDB4NDks IDB4ZWUsIDB4ZTUsIDB4NGIsIDB4N2UsIDB4YWUsIDB4MWYsIDB4MWQsIDB4NjEKKysgICAgfTsK KysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5ZGF0YV9pcW1wW10gPSB7Cisr ICAgICAgICAweDIzLCAweDk2LCAweGMxLCAweDkxLCAweDE3LCAweDVlLCAweDBhLCAweDgzLCAw eGQyLCAweGRjLCAweDdiLCAweDY5LCAweGIyLCAweDU5LCAweDFkLAorKyAgICAgICAgMHgzMywg MHg1OCwgMHg1MiwgMHgzZiwgMHgxOCwgMHhjNywgMHgwOSwgMHg1MCwgMHgxYywgMHhiOSwgMHhh MSwgMHhiYiwgMHg0YywgMHhhMiwgMHgzOCwKKysgICAgICAgIDB4NDAsIDB4NGMsIDB4OWEsIDB4 OGUsIDB4ZmUsIDB4OWMsIDB4OTAsIDB4OTIsIDB4ZDAsIDB4NzEsIDB4OWYsIDB4ODksIDB4OTks IDB4NTAsIDB4OTEsCisrICAgICAgICAweDFmLCAweDM0LCAweDhiLCAweDc0LCAweDUzLCAweDEx LCAweDExLCAweDRhLCAweDcwLCAweGUyLCAweGY3LCAweDMwLCAweGQ4LCAweDhjLCAweDgwLAor KyAgICAgICAgMHhlMSwgMHhjYywgMHg5ZiwgMHhmMSwgMHg2MywgMHgxNywgMHgxYSwgMHg3ZCwg MHg2NywgMHgyOSwgMHg0YywgMHhjYiwgMHg0ZSwgMHg3NCwgMHg3YiwKKysgICAgICAgIDB4ZTAs IDB4M2UsIDB4OWUsIDB4MmYsIDB4ZjQsIDB4NjcsIDB4OGYsIDB4ZWMsIDB4YjksIDB4NWMsIDB4 MDAsIDB4MWUsIDB4N2UsIDB4YTIsIDB4N2IsCisrICAgICAgICAweDkyLCAweGM5LCAweDZmLCAw eDRjLCAweGU0LCAweDBlLCAweGY5LCAweDQ4LCAweDYzLCAweGNkLCAweDUwLCAweDIyLCAweDVk LCAweGJmLCAweGI2LAorKyAgICAgICAgMHg5ZCwgMHgwMSwgMHgzMywgMHg2YSwgMHhmNCwgMHg1 MCwgMHhiZSwgMHg4NiwgMHg5OCwgMHg0ZiwgMHhjYSwgMHgzZiwgMHgzYSwgMHhmYSwgMHhjZiwK KysgICAgICAgIDB4MDcsIDB4NDAsIDB4YzQsIDB4YWEsIDB4YWQsIDB4YWUsIDB4YmUsIDB4YmYK KysgICAgfTsKKysKKysgICAgaW50IHJ2ID0gMDsKKysgICAgQklHTlVNICpuID0gTlVMTCwgKmUg PSBOVUxMLCAqZCA9IE5VTEwsICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZG1wMSA9IE5VTEwsICpk bXExID0gTlVMTCwgKmlxbXAgPSBOVUxMOworKworKyAgICBmaXBzX2xvYWRfa2V5X2NvbXBvbmVu dChuLCBrZXlkYXRhKTsKKysgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQoZSwga2V5ZGF0YSk7 CisrICAgIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGQsIGtleWRhdGEpOworKyAgICBmaXBzX2xv YWRfa2V5X2NvbXBvbmVudChwLCBrZXlkYXRhKTsKKysgICAgZmlwc19sb2FkX2tleV9jb21wb25l bnQocSwga2V5ZGF0YSk7CisrICAgIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRtcDEsIGtleWRh dGEpOworKyAgICBmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkbXExLCBrZXlkYXRhKTsKKysgICAg Zmlwc19sb2FkX2tleV9jb21wb25lbnQoaXFtcCwga2V5ZGF0YSk7CisrCisrICAgIFJTQV9zZXQw X2tleShrZXksIG4sIGUsIGQpOworKyAgICBSU0Ffc2V0MF9mYWN0b3JzKGtleSwgcCwgcSk7Cisr ICAgIFJTQV9zZXQwX2NydF9wYXJhbXMoa2V5LCBkbXAxLCBkbXExLCBpcW1wKTsKKysKKysgICAg cnYgPSAxOworK2VycjoKKysgICAgaWYgKCFydikgeworKyAgICAgICAgQk5fZnJlZShuKTsKKysg ICAgICAgIEJOX2ZyZWUoZSk7CisrICAgICAgICBCTl9mcmVlKGQpOworKyAgICAgICAgQk5fZnJl ZShwKTsKKysgICAgICAgIEJOX2ZyZWUocSk7CisrICAgICAgICBCTl9mcmVlKGRtcDEpOworKyAg ICAgICAgQk5fZnJlZShkbXExKTsKKysgICAgICAgIEJOX2ZyZWUoaXFtcCk7CisrICAgIH0KKysg ICAgcmV0dXJuIHJ2OworK30KKysKKysvKiBLbm93biBBbnN3ZXIgVGVzdCAoS0FUKSBkYXRhIGZv ciB0aGUgYWJvdmUgUlNBIHByaXZhdGUga2V5IHNpZ25pbmcKKysgKiBrYXRfdGJzLgorKyAqLwor KworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF90YnNbXSA9CisrICAgICJPcGVuU1NM IEZJUFMgMTQwLTIgUHVibGljIEtleSBSU0EgS0FUIjsKKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1BTU19TSEExW10gPSB7CisrICAgIDB4QzIsIDB4ODAsIDB4ODIsIDB4 NTYsIDB4RDgsIDB4QTcsIDB4QjIsIDB4OUMsIDB4RjUsIDB4RDYsIDB4M0MsIDB4RTMsCisrICAg IDB4QkYsIDB4RTksIDB4M0EsIDB4NTMsIDB4NDAsIDB4QUUsIDB4RjIsIDB4QTksIDB4NkEsIDB4 MzksIDB4NDksIDB4NUIsCisrICAgIDB4MDUsIDB4N0YsIDB4NjcsIDB4MzgsIDB4MkUsIDB4MUQs IDB4RTEsIDB4OTMsIDB4MjIsIDB4NjUsIDB4NzksIDB4ODQsCisrICAgIDB4NjgsIDB4RkEsIDB4 RDgsIDB4QUYsIDB4QTEsIDB4OTgsIDB4NjEsIDB4NkYsIDB4NDQsIDB4MjcsIDB4QTYsIDB4OEIs CisrICAgIDB4Q0YsIDB4MEUsIDB4MTMsIDB4QTksIDB4Q0UsIDB4RDcsIDB4NkMsIDB4RDIsIDB4 MzgsIDB4QjUsIDB4MTYsIDB4QjksCisrICAgIDB4NjYsIDB4OTQsIDB4NDgsIDB4REUsIDB4OUUs IDB4MTksIDB4M0QsIDB4NkYsIDB4QjMsIDB4QTEsIDB4OUEsIDB4MTksCisrICAgIDB4REYsIDB4 RkIsIDB4QUIsIDB4QTUsIDB4OUYsIDB4MzgsIDB4REEsIDB4QzksIDB4MjEsIDB4OEYsIDB4Q0Us IDB4OTgsCisrICAgIDB4MDEsIDB4M0EsIDB4QzgsIDB4RTAsIDB4REYsIDB4REEsIDB4RkMsIDB4 RjAsIDB4QTYsIDB4ODYsIDB4MjksIDB4QjUsCisrICAgIDB4N0YsIDB4NjEsIDB4RkIsIDB4QkEs IDB4QzUsIDB4NDksIDB4QjIsIDB4N0MsIDB4NkEsIDB4MjYsIDB4ODIsIDB4QzQsCisrICAgIDB4 OEYsIDB4QUEsIDB4NUIsIDB4MTAsIDB4RDUsIDB4RUUsIDB4QTAsIDB4NTUsIDB4NDIsIDB4RUYs IDB4MzIsIDB4NUEsCisrICAgIDB4M0YsIDB4NTUsIDB4QjMsIDB4MkMsIDB4MjIsIDB4RTksIDB4 NjUsIDB4REEsIDB4OEQsIDB4MEEsIDB4QjksIDB4NzAsCisrICAgIDB4NDMsIDB4Q0MsIDB4M0Ys IDB4NjQsIDB4OUMsIDB4QjUsIDB4NjUsIDB4NDksIDB4QkQsIDB4N0YsIDB4MzUsIDB4QzEsCisr ICAgIDB4MjAsIDB4ODUsIDB4MjQsIDB4RkUsIDB4QUEsIDB4NkIsIDB4MzcsIDB4MDQsIDB4QTEs IDB4MEUsIDB4OUQsIDB4NUMsCisrICAgIDB4QkEsIDB4N0YsIDB4MTQsIDB4NjksIDB4QzUsIDB4 OTMsIDB4QjIsIDB4MzMsIDB4QzIsIDB4QzAsIDB4QzcsIDB4REYsCisrICAgIDB4N0UsIDB4OUUs IDB4QTQsIDB4QjAsIDB4QTAsIDB4NjQsIDB4RDIsIDB4QUMsIDB4RkMsIDB4RkQsIDB4RkQsIDB4 OTksCisrICAgIDB4OEYsIDB4NkEsIDB4NDAsIDB4MjYsIDB4QzEsIDB4MkUsIDB4NEUsIDB4OEIs IDB4MzMsIDB4QkUsIDB4RjEsIDB4NDUsCisrICAgIDB4NTksIDB4OEYsIDB4MzMsIDB4NDAsIDB4 MUQsIDB4MkEsIDB4RDIsIDB4RjcsIDB4NTAsIDB4ODMsIDB4ODksIDB4Q0YsCisrICAgIDB4OTQs IDB4QzYsIDB4RjgsIDB4MzYsIDB4RjAsIDB4ODQsIDB4MEIsIDB4ODUsIDB4QTUsIDB4MDIsIDB4 QTksIDB4MEYsCisrICAgIDB4NDEsIDB4N0EsIDB4NzcsIDB4QTMsIDB4MkYsIDB4NDcsIDB4MUUs IDB4MUQsIDB4RUMsIDB4RTYsIDB4RDMsIDB4MDEsCisrICAgIDB4MUUsIDB4NkYsIDB4N0EsIDB4 OTYsIDB4NTAsIDB4MzcsIDB4MzcsIDB4NEIsIDB4MjcsIDB4NTIsIDB4MEIsIDB4REMsCisrICAg IDB4REIsIDB4QzcsIDB4QTksIDB4MzEsIDB4QjIsIDB4NDAsIDB4RUUsIDB4NjAsIDB4NDEsIDB4 MjYsIDB4NkEsIDB4MDUsCisrICAgIDB4Q0UsIDB4MDgsIDB4MUQsIDB4ODkKKyt9OworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTIyNFtdID0geworKyAgICAw eEI0LCAweDAxLCAweDkzLCAweDE2LCAweDA1LCAweEY2LCAweEVCLCAweEUyLCAweEE0LCAweEVC LCAweDQ4LCAweEFBLAorKyAgICAweDAwLCAweEY0LCAweEExLCAweDk5LCAweDBBLCAweEI0LCAw eEI2LCAweDYzLCAweEU5LCAweDY4LCAweENBLCAweEIzLAorKyAgICAweDEzLCAweEQ3LCAweDY2 LCAweDZBLCAweENELCAweENCLCAweDMzLCAweDlGLCAweEU1LCAweDg0LCAweEUyLCAweEMzLAor KyAgICAweDBCLCAweDUzLCAweEU1LCAweDhCLCAweDk2LCAweDRCLCAweERCLCAweDJELCAweDgw LCAweEE0LCAweDFELCAweEUzLAorKyAgICAweDgxLCAweERDLCAweDUyLCAweDk5LCAweEJBLCAw eDlCLCAweDZBLCAweDlELCAweDQ4LCAweDFGLCAweDczLCAweEY3LAorKyAgICAweEFDLCAweDA5 LCAweDEzLCAweEExLCAweDE2LCAweDJDLCAweDYwLCAweEZCLCAweEJDLCAweDI1LCAweEY3LCAw eDUzLAorKyAgICAweEQxLCAweDA0LCAweDVBLCAweDNGLCAweDk1LCAweDA5LCAweDVFLCAweEU1 LCAweEEyLCAweDdELCAweEZDLCAweDJBLAorKyAgICAweDUxLCAweDFELCAweDIxLCAweENFLCAw eDJCLCAweDRFLCAweDFCLCAweEI4LCAweENCLCAweERELCAweDI0LCAweEVFLAorKyAgICAweDk5 LCAweDFELCAweDM3LCAweERDLCAweEVELCAweDVGLCAweDJGLCAweDQ4LCAweDVFLCAweDMzLCAw eDk0LCAweDA2LAorKyAgICAweDE5LCAweENELCAweDVBLCAweDI2LCAweDg1LCAweDc3LCAweDlE LCAweEFGLCAweDg2LCAweDk3LCAweEM5LCAweDA4LAorKyAgICAweEQ1LCAweDgxLCAweDBFLCAw eEI4LCAweDlGLCAweEI2LCAweEFGLCAweDIwLCAweDcyLCAweERDLCAweDEzLCAweDRELAorKyAg ICAweDdBLCAweEU0LCAweDVDLCAweDgxLCAweERFLCAweEMwLCAweDNELCAweDE5LCAweDlDLCAw eDMzLCAweDExLCAweDA3LAorKyAgICAweEQ1LCAweEE5LCAweDUxLCAweDY3LCAweENELCAweEZE LCAweDM3LCAweDYxLCAweDE0LCAweDlGLCAweEU3LCAweDcwLAorKyAgICAweDE4LCAweDMyLCAw eEMzLCAweDM0LCAweDU0LCAweDBELCAweDRGLCAweEI0LCAweEFFLCAweDlGLCAweEVDLCAweDY0 LAorKyAgICAweEQ4LCAweEIyLCAweDE2LCAweEE0LCAweEIyLCAweDk5LCAweDkyLCAweENCLCAw eDdGLCAweDFGLCAweDA2LCAweDE3LAorKyAgICAweDVGLCAweEExLCAweDA3LCAweDY4LCAweEFF LCAweEE3LCAweDJELCAweDAzLCAweDkxLCAweDJBLCAweDlELCAweDY5LAorKyAgICAweEMyLCAw eDlELCAweDkwLCAweEY3LCAweEY5LCAweDY2LCAweDVELCAweDEzLCAweEI3LCAweDdGLCAweEQz LCAweDk3LAorKyAgICAweDQ1LCAweDk3LCAweDQzLCAweEQ4LCAweENFLCAweDNDLCAweEYyLCAw eDk4LCAweDk4LCAweERELCAweEUyLCAweDJELAorKyAgICAweENGLCAweEExLCAweEM0LCAweDI1 LCAweDQ2LCAweDJFLCAweEQyLCAweEU1LCAweDVGLCAweEM2LCAweDAxLCAweEM1LAorKyAgICAw eDRGLCAweDQyLCAweDJCLCAweERFLCAweDBGLCAweEVBLCAweDRBLCAweDRGLCAweEMzLCAweDVC LCAweERGLCAweDlCLAorKyAgICAweDVELCAweDMwLCAweDE4LCAweDkzLCAweEQwLCAweERFLCAw eEM1LCAweDA5LCAweEFBLCAweDU3LCAweDU3LCAweEJELAorKyAgICAweDJELCAweDg0LCAweDAz LCAweEI3CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19T SEEyNTZbXSA9IHsKKysgICAgMHgzOCwgMHhEQSwgMHg5OSwgMHg1MSwgMHgyNiwgMHgzOCwgMHhD NiwgMHg3RiwgMHhDNCwgMHg4MSwgMHg1NywgMHgxOSwKKysgICAgMHgzNSwgMHhDNiwgMHhGNiwg MHgxRSwgMHg5MCwgMHg0NywgMHgyMCwgMHg1NSwgMHg0NywgMHg1NiwgMHgyNiwgMHhFOSwKKysg ICAgMHhGMiwgMHhBOCwgMHgzOSwgMHg2QywgMHhENSwgMHhDRCwgMHhDQiwgMHg1NSwgMHhGQywg MHgwQywgMHhDNSwgMHhDQiwKKysgICAgMHhGNywgMHg0MCwgMHgxNywgMHgzQiwgMHhDRiwgMHhF NCwgMHgwNSwgMHgwMywgMHgzQiwgMHhBMCwgMHhCMiwgMHhDOSwKKysgICAgMHgwRCwgMHg1RSwg MHg0OCwgMHgzQSwgMHhFOSwgMHhBRCwgMHgyOCwgMHg3MSwgMHg3RCwgMHg4RiwgMHg4OSwgMHgx NiwKKysgICAgMHg1OSwgMHg5MywgMHgzNSwgMHhEQywgMHg0RCwgMHg3QiwgMHhERiwgMHg4NCwg MHhFNCwgMHg2OCwgMHhBQSwgMHgzMywKKysgICAgMHhBQSwgMHhEQywgMHg2NiwgMHg1MCwgMHhD OCwgMHhBOSwgMHgzMiwgMHgxMiwgMHhEQywgMHhDNiwgMHg5MCwgMHg0OSwKKysgICAgMHgwQiwg MHg3NSwgMHhGRiwgMHg5QiwgMHg5NSwgMHgwMCwgMHg5QSwgMHg5MCwgMHhFMCwgMHhENCwgMHgw RSwgMHg2NywKKysgICAgMHhBQiwgMHgzQywgMHg0NywgMHgzNiwgMHhDNSwgMHgyRSwgMHgxQywg MHg0NiwgMHhGMCwgMHgyRCwgMHhEMywgMHg4QiwKKysgICAgMHg0MiwgMHgwOCwgMHhERSwgMHgw RCwgMHhCNiwgMHgyQywgMHg4NiwgMHhCMCwgMHgzNSwgMHg3MSwgMHgxOCwgMHg2QiwKKysgICAg MHg4OSwgMHg2NywgMHhDMCwgMHgwNSwgMHhBRCwgMHhGNCwgMHgxRCwgMHg2MiwgMHg0RSwgMHg3 NSwgMHhFQywgMHhENiwKKysgICAgMHhDMiwgMHhEQiwgMHgwNywgMHhCMCwgMHhCNiwgMHg4RCwg MHgxNSwgMHhBRCwgMHhDRCwgMHhCRiwgMHhGNSwgMHg2MCwKKysgICAgMHg3NiwgMHhBRSwgMHg0 OCwgMHhCOCwgMHg3NywgMHg3RiwgMHhDNSwgMHgwMSwgMHhEOSwgMHgyOSwgMHhCQiwgMHhENiwK KysgICAgMHgxNywgMHhBMiwgMHgyMCwgMHg1QSwgMHhDMCwgMHg0QSwgMHgzQiwgMHgzNCwgMHhD OCwgMHhCOSwgMHgzOSwgMHhDRiwKKysgICAgMHgwNiwgMHg4OSwgMHg5NSwgMHg2RiwgMHhDNywg MHhDQSwgMHhDNCwgMHhFNCwgMHg0MywgMHhERiwgMHg1QSwgMHgyMywKKysgICAgMHhFMiwgMHg4 OSwgMHhBMywgMHgzOCwgMHg3OCwgMHgzMSwgMHgzOCwgMHhDNiwgMHhBNCwgMHg2RiwgMHg1Riwg MHg3MywKKysgICAgMHg1QSwgMHhFNSwgMHg5RSwgMHgwOSwgMHhFNywgMHg2RiwgMHhENCwgMHhG OCwgMHgzRSwgMHhCNywgMHhCMCwgMHg1NiwKKysgICAgMHg5QSwgMHhGMywgMHg2NSwgMHhGMCwg MHhDMiwgMHhBNiwgMHg4QSwgMHgwOCwgMHhCQSwgMHg0NCwgMHhBQywgMHg5NywKKysgICAgMHhE RSwgMHhCNCwgMHgxNiwgMHg4MywgMHhERiwgMHhFMywgMHhFRSwgMHg3MSwgMHhGQSwgMHhGOSwg MHg1MSwgMHg1MCwKKysgICAgMHgxNCwgMHhEQywgMHhGRCwgMHg2QSwgMHg4MiwgMHgyMCwgMHg2 OCwgMHg2NCwgMHg3RCwgMHg0RSwgMHg4MiwgMHg2OCwKKysgICAgMHhENywgMHg0NSwgMHhGQSwg MHg2QSwgMHhFNCwgMHhFNSwgMHgyOSwgMHgzQSwgMHg3MCwgMHhGQiwgMHhFNCwgMHg2MiwKKysg ICAgMHgyQiwgMHgzMSwgMHhCOSwgMHg3RAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9QU1NfU0hBMzg0W10gPSB7CisrICAgIDB4OTksIDB4MDIsIDB4QzksIDB4 MUUsIDB4MzEsIDB4ODIsIDB4QjQsIDB4RTYsIDB4MUIsIDB4MzIsIDB4Q0UsIDB4NUQsCisrICAg IDB4NDEsIDB4MUQsIDB4MDAsIDB4MkYsIDB4MDQsIDB4OEIsIDB4QkQsIDB4MzcsIDB4NzksIDB4 Q0YsIDB4NzcsIDB4MDMsCisrICAgIDB4MDUsIDB4NkEsIDB4MjEsIDB4QzcsIDB4OEQsIDB4MjQs IDB4NjAsIDB4NDksIDB4MzksIDB4NTgsIDB4QzUsIDB4MjcsCisrICAgIDB4OEYsIDB4QzUsIDB4 OTcsIDB4NEEsIDB4QjIsIDB4RTEsIDB4RDQsIDB4MzYsIDB4NTcsIDB4QkQsIDB4NDMsIDB4Q0Ms CisrICAgIDB4N0IsIDB4Q0UsIDB4RjIsIDB4QTUsIDB4MzAsIDB4RjgsIDB4NzIsIDB4MTQsIDB4 QkIsIDB4RDAsIDB4OUYsIDB4QzEsCisrICAgIDB4NDksIDB4QzgsIDB4MUMsIDB4QUYsIDB4Q0Qs IDB4OTUsIDB4NzgsIDB4NzIsIDB4MjUsIDB4RjksIDB4NDUsIDB4QzYsCisrICAgIDB4NUIsIDB4 NjIsIDB4NUUsIDB4MDEsIDB4RDcsIDB4NDAsIDB4NUUsIDB4QzgsIDB4Q0EsIDB4MEEsIDB4RjMs IDB4QkEsCisrICAgIDB4MDgsIDB4MDcsIDB4ODgsIDB4Q0EsIDB4NDksIDB4MzYsIDB4ODQsIDB4 N0QsIDB4RjYsIDB4RkMsIDB4NUEsIDB4REIsCisrICAgIDB4RkMsIDB4NTAsIDB4RDMsIDB4RUIs IDB4M0QsIDB4ODMsIDB4QjAsIDB4RjUsIDB4OTQsIDB4NUUsIDB4ODgsIDB4QzMsCisrICAgIDB4 ODIsIDB4Q0QsIDB4NTMsIDB4NDAsIDB4OTYsIDB4MTgsIDB4NkIsIDB4NEEsIDB4NkMsIDB4OUMs IDB4RkUsIDB4RTUsCisrICAgIDB4M0IsIDB4NzUsIDB4RjksIDB4RUIsIDB4QTUsIDB4NzcsIDB4 MTEsIDB4RUYsIDB4ODgsIDB4MUMsIDB4MjUsIDB4NzAsCisrICAgIDB4N0QsIDB4ODgsIDB4NUQs IDB4QzMsIDB4Q0EsIDB4RTEsIDB4NDksIDB4MTQsIDB4OTAsIDB4QUQsIDB4RjIsIDB4NUUsCisr ICAgIDB4NDksIDB4RDcsIDB4OTksIDB4QTUsIDB4N0IsIDB4NzcsIDB4M0IsIDB4OEUsIDB4Qjgs IDB4REIsIDB4RjEsIDB4NEMsCisrICAgIDB4RDYsIDB4OUEsIDB4REMsIDB4RTUsIDB4N0EsIDB4 MUMsIDB4RTEsIDB4Q0UsIDB4OUQsIDB4RjEsIDB4RjMsIDB4QTAsCisrICAgIDB4MEEsIDB4MzUs IDB4NTIsIDB4OUQsIDB4QjksIDB4NDYsIDB4OTQsIDB4ODIsIDB4MEYsIDB4RjcsIDB4QjIsIDB4 NjIsCisrICAgIDB4NTEsIDB4NzAsIDB4NzUsIDB4RDIsIDB4MzcsIDB4OTYsIDB4NjcsIDB4MkYs IDB4RDAsIDB4MjIsIDB4RDgsIDB4MDcsCisrICAgIDB4OEQsIDB4NjksIDB4OUUsIDB4NkQsIDB4 MEIsIDB4NDAsIDB4NEYsIDB4NzAsIDB4RUMsIDB4MEIsIDB4Q0EsIDB4ODgsCisrICAgIDB4ODAs IDB4OEQsIDB4OUEsIDB4RjQsIDB4RjksIDB4MTgsIDB4NTAsIDB4MjcsIDB4MDgsIDB4RkEsIDB4 Q0MsIDB4QzcsCisrICAgIDB4M0YsIDB4RTQsIDB4ODQsIDB4ODMsIDB4QTEsIDB4QjYsIDB4MUQs IDB4MjMsIDB4MzQsIDB4RkUsIDB4NDgsIDB4RTUsCisrICAgIDB4RTMsIDB4QUUsIDB4NEQsIDB4 OTgsIDB4QkMsIDB4QTYsIDB4OEEsIDB4OUYsIDB4RkQsIDB4NEQsIDB4REIsIDB4OUQsCisrICAg IDB4RjcsIDB4RUIsIDB4NEUsIDB4QjYsIDB4NkYsIDB4MjUsIDB4RUEsIDB4N0EsIDB4RTksIDB4 ODUsIDB4QjIsIDB4RUYsCisrICAgIDB4OTAsIDB4RDIsIDB4QTYsIDB4MkIKKyt9OworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTUxMltdID0geworKyAgICAw eDNGLCAweDgzLCAweDQzLCAweDc4LCAweDI1LCAweEJFLCAweDgxLCAweEIyLCAweDZFLCAweDc4 LCAweDExLCAweDMyLAorKyAgICAweEQwLCAweDg4LCAweDA1LCAweDUzLCAweDk1LCAweEVELCAw eDgxLCAweDEyLCAweENFLCAweDUwLCAweEQ5LCAweDA2LAorKyAgICAweDQyLCAweDg5LCAweEEw LCAweDU1LCAweDdBLCAweDA1LCAweDEzLCAweDk0LCAweDM1LCAweDlCLCAweENBLCAweDVELAor KyAgICAweENCLCAweEIyLCAweDMyLCAweEUxLCAweDA0LCAweDk5LCAweEVDLCAweEU3LCAweEE2 LCAweDY5LCAweDRELCAweDJCLAorKyAgICAweEMxLCAweDU3LCAweDEzLCAweDQ4LCAweDBELCAw eDZCLCAweDRELCAweDgzLCAweDI4LCAweDA2LCAweDc5LCAweDlELAorKyAgICAweEI0LCAweDcw LCAweENFLCAweEMwLCAweEZDLCAweDNCLCAweDY5LCAweEIzLCAweDkxLCAweDU0LCAweEE5LCAw eDQ0LAorKyAgICAweDJFLCAweERBLCAweDRBLCAweEM1LCAweEMyLCAweDk5LCAweEYwLCAweERF LCAweENBLCAweDc3LCAweDk5LCAweDZCLAorKyAgICAweDBDLCAweDc5LCAweEU1LCAweDI5LCAw eDc0LCAweDgzLCAweDY5LCAweEVBLCAweEI4LCAweDcyLCAweDMwLCAweDNELAorKyAgICAweDdB LCAweDMwLCAweEUxLCAweDAzLCAweDdCLCAweDA5LCAweEU2LCAweDExLCAweEMwLCAweERDLCAw eEZGLCAweEZELAorKyAgICAweEJELCAweEVDLCAweDlDLCAweENDLCAweDQ2LCAweDdCLCAweDRD LCAweDRDLCAweDU5LCAweEJFLCAweDgyLCAweDdDLAorKyAgICAweEY1LCAweDYwLCAweDVBLCAw eEMzLCAweEU4LCAweEE4LCAweDhBLCAweDM4LCAweDlFLCAweDAxLCAweDU3LCAweEYxLAorKyAg ICAweDc5LCAweDNBLCAweDdDLCAweEEzLCAweDlGLCAweDEyLCAweDFBLCAweDRGLCAweDJFLCAw eEEyLCAweEU1LCAweDBBLAorKyAgICAweEFCLCAweEMwLCAweEY0LCAweEE1LCAweEUzLCAweDVG LCAweDg5LCAweDFDLCAweDhGLCAweEE0LCAweDVFLCAweENFLAorKyAgICAweDBELCAweDkxLCAw eDA1LCAweDFCLCAweDE3LCAweDYyLCAweDQ4LCAweEZFLCAweEE1LCAweDRDLCAweEVGLCAweDJE LAorKyAgICAweDI4LCAweEYxLCAweDVFLCAweEU2LCAweEQxLCAweDMwLCAweDg5LCAweDBBLCAw eEFELCAweDE4LCAweEFGLCAweDZGLAorKyAgICAweDA0LCAweDA5LCAweDM2LCAweDlBLCAweEZG LCAweENBLCAweEExLCAweEE3LCAweDA1LCAweDdGLCAweEQ0LCAweEJGLAorKyAgICAweDNBLCAw eEI1LCAweDQyLCAweDZELCAweEU5LCAweDA3LCAweDI5LCAweDY1LCAweDhCLCAweEFELCAweDRE LCAweDBGLAorKyAgICAweDIyLCAweEUxLCAweDU5LCAweDQzLCAweDY4LCAweDg3LCAweEE4LCAw eDhCLCAweEJDLCAweDY5LCAweEExLCAweDk0LAorKyAgICAweDIyLCAweDNFLCAweDhBLCAweDQ5 LCAweEU4LCAweEEzLCAweDZGLCAweEMyLCAweDkzLCAweDU4LCAweEU3LCAweEFFLAorKyAgICAw eEM5LCAweDFGLCAweENGLCAweDYxLCAweDkzLCAweEZDLCAweEMxLCAweEY2LCAweEYzLCAweDI3 LCAweDdGLCAweDBBLAorKyAgICAweDkwLCAweEUwLCAweDY1LCAweDMyLCAweDU3LCAweDQ3LCAw eEUyLCAweEVELCAweDA4LCAweDU5LCAweEE2LCAweEYwLAorKyAgICAweDE3LCAweDJDLCAweDEz LCAweEUwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTFb XSA9IHsKKysgICAgMHgzQiwgMHg2MCwgMHg0QiwgMHhGQywgMHg1NCwgMHgyOCwgMHgyMywgMHhF NiwgMHgyRiwgMHgwNSwgMHgwNCwgMHhCQSwKKysgICAgMHg5RCwgMHhFNCwgMHgzQywgMHhCOCwg MHg1QiwgMHg2MCwgMHg1QywgMHhDRCwgMHg5RCwgMHhFQSwgMHhDMywgMHg0QywKKysgICAgMHhD MiwgMHgzMywgMHhFNiwgMHhDNiwgMHgyMSwgMHg0OCwgMHg3NiwgMHhFQywgMHhCMiwgMHhGNSwg MHgxMSwgMHhERSwKKysgICAgMHg0NCwgMHhCNCwgMHhBRiwgMHgxNiwgMHgxMSwgMHhDMywgMHgx OCwgMHgxNiwgMHhCMywgMHg2OSwgMHhCQiwgMHg5NCwKKysgICAgMHhFRCwgMHhFOCwgMHhCMywg MHg5RSwgMHhCMSwgMHg0MywgMHg4RSwgMHhDRSwgMHhCNCwgMHgzNCwgMHg5QiwgMHgwOCwKKysg ICAgMHgyMiwgMHhBRiwgMHgzMSwgMHg3MywgMHhCNSwgMHhGQSwgMHgxMSwgMHg3RSwgMHg4Riwg MHgxMywgMHg1MiwgMHhFQywKKysgICAgMHhDOSwgMHgwMywgMHhFRSwgMHgwRCwgMHgyQiwgMHg5 MSwgMHgzMiwgMHhGMiwgMHg4RSwgMHhERiwgMHgwMiwgMHhFMCwKKysgICAgMHgwQSwgMHg0Nywg MHhEMiwgMHgwQSwgMHg1MSwgMHgwMCwgMHgxQSwgMHgzMCwgMHg2RiwgMHgwQywgMHhCMywgMHg1 NCwKKysgICAgMHg2NCwgMHgyMCwgMHg5MCwgMHgwQywgMHgwMSwgMHhCRSwgMHhDMCwgMHg0Miwg MHg4QywgMHg1RCwgMHgxOCwgMHg2RiwKKysgICAgMHgzMiwgMHg3NSwgMHg0NSwgMHg3QiwgMHgx QywgMHgwNCwgMHhBMiwgMHg5RiwgMHg4NCwgMHhENywgMHhGNSwgMHgzQSwKKysgICAgMHg5NSwg MHhENCwgMHhFOCwgMHg4RCwgMHhFQywgMHg5OSwgMHhFRiwgMHgxOCwgMHg1RSwgMHg2NCwgMHhE MywgMHhBRiwKKysgICAgMHhGOCwgMHhENCwgMHhGRiwgMHgzQywgMHg4NywgMHhBMCwgMHgzRiwg MHhDNywgMHgyMiwgMHgwNSwgMHhGRCwgMHhGRCwKKysgICAgMHgyOSwgMHg4QSwgMHgyOCwgMHhE QSwgMHhBOSwgMHg4QSwgMHg4QiwgMHgyMywgMHg2MiwgMHg5RCwgMHg0MiwgMHhCOCwKKysgICAg MHg0QSwgMHg3NiwgMHgwRCwgMHg5RiwgMHg5QSwgMHhFMCwgMHhFNiwgMHhERCwgMHhBRCwgMHg1 RSwgMHg1RiwgMHhENSwKKysgICAgMHgzMiwgMHhFOSwgMHg0QiwgMHg5NywgMHg3RCwgMHg2Miwg MHgwQSwgMHhCMywgMHhCRSwgMHhGMiwgMHg4QywgMHgxRiwKKysgICAgMHgyQiwgMHgyMiwgMHgw NiwgMHgxNSwgMHgzMywgMHg3MSwgMHhFRCwgMHg5QiwgMHhBMCwgMHg4MiwgMHhDRSwgMHhCRiwK KysgICAgMHgzQiwgMHgwOCwgMHg1RiwgMHhBNywgMHgyMCwgMHg5NCwgMHgwOSwgMHhFQiwgMHg4 MiwgMHhBNSwgMHg0MSwgMHg2MCwKKysgICAgMHhGMSwgMHgwOCwgMHhFQiwgMHg4RCwgMHhDQywg MHg4RCwgMHhDOSwgMHg1MiwgMHgwQSwgMHhBRiwgMHhGNCwgMHhGOSwKKysgICAgMHg5RiwgMHg4 MiwgMHhEOCwgMHgwQiwgMHg3NSwgMHg1RSwgMHhFNCwgMHhBRiwgMHg2NSwgMHg5NiwgMHhBRiwg MHhGQywKKysgICAgMHgzMywgMHhCRiwgMHg5RiwgMHgzRSwgMHhBNCwgMHg3QiwgMHg4NiwgMHhD NywgMHhGNywgMHg0NywgMHhBQiwgMHgzNywKKysgICAgMHgwNSwgMHhENiwgMHgwRCwgMHgzMSwg MHg3MiwgMHg4QywgMHg4MCwgMHgxRSwgMHhBOSwgMHg1NCwgMHhGQywgMHhERiwKKysgICAgMHgy NywgMHg5MCwgMHhFMiwgMHgwMQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg a2F0X1JTQV9TSEEyMjRbXSA9IHsKKysgICAgMHhBMiwgMHhEOCwgMHg0MiwgMHg1MywgMHhERCwg MHhCRiwgMHgxRiwgMHg2QiwgMHgwNywgMHhFMCwgMHg2MCwgMHg4NiwKKysgICAgMHg1QSwgMHg2 MCwgMHgwNiwgMHg4RiwgMHg0NCwgMHhEOSwgMHhCMCwgMHg0QSwgMHhBQSwgMHg5MCwgMHg3MSwg MHhCOCwKKysgICAgMHhCMiwgMHhCQywgMHgzMCwgMHg0MSwgMHg1MCwgMHhCQiwgMHhGRCwgMHg0 NiwgMHg5OCwgMHg0RCwgMHhDMCwgMHg4OSwKKysgICAgMHg1NywgMHg4NSwgMHg4QSwgMHg5Nywg MHg0OSwgMHgyNSwgMHhBOCwgMHgwQywgMHg2OSwgMHg3MCwgMHgxOSwgMHgzOSwKKysgICAgMHg2 NiwgMHgyNCwgMHhCNCwgMHg2OSwgMHg0NywgMHhEMiwgMHg3QywgMHhERSwgMHgyRCwgMHgzNywg MHg1OSwgMHhCMywKKysgICAgMHhFMywgMHhDNywgMHg2QiwgMHhERCwgMHhCRSwgMHhFMSwgMHhF NiwgMHgyOCwgMHg5QSwgMHg4RCwgMHg0MiwgMHgzRSwKKysgICAgMHgyOCwgMHgwMSwgMHhENywg MHgwMywgMHhDOSwgMHg3MywgMHhDMywgMHg2QiwgMHgwMywgMHhFQywgMHgxRSwgMHhGOCwKKysg ICAgMHg1MywgMHg4QiwgMHg1MiwgMHg0MiwgMHg4OSwgMHg1NSwgMHhCNywgMHg4NywgMHhBOSwg MHg5NCwgMHhDMiwgMHhCNCwKKysgICAgMHg0QiwgMHg3NiwgMHhGNSwgMHg2MSwgMHg0NywgMHhF MSwgMHg0NCwgMHg3QiwgMHhFQywgMHhCNCwgMHgyNSwgMHg2NiwKKysgICAgMHhDMCwgMHhGRiwg MHhFQiwgMHg4NiwgMHgyNCwgMHhBQSwgMHhBOCwgMHg3MiwgMHhDNywgMHhGQiwgMHhGQiwgMHhG NiwKKysgICAgMHg4NCwgMHhBNywgMHg1QiwgMHhENCwgMHg4NywgMHhFNSwgMHg4NCwgMHg1Niwg MHgxRSwgMHg0QywgMHhFNSwgMHhCQywKKysgICAgMHg4NywgMHg5NCwgMHhBQywgMHg5QywgMHgx QiwgMHgzRCwgMHhGNywgMHhENCwgMHgzNiwgMHg4NSwgMHg5RiwgMHhDOSwKKysgICAgMHhGNiwg MHg0MywgMHgzRiwgMHhCNiwgMHgyNSwgMHgzMywgMHg0OCwgMHgwRiwgMHhFNSwgMHg3QywgMHhD RCwgMHg1MywKKysgICAgMHg0OCwgMHhFQiwgMHgwMiwgMHgxMSwgMHhCOSwgMHg5RSwgMHhDMywg MHhCNCwgMHhFMSwgMHg1NCwgMHhENiwgMHhBQSwKKysgICAgMHgxQSwgMHg5RSwgMHgxMCwgMHhF MSwgMHgyNywgMHgyNSwgMHhGMiwgMHhFMSwgMHhBQiwgMHhBQiwgMHg2QywgMHg0NSwKKysgICAg MHg2MSwgMHhENSwgMHhBMywgMHg2QywgMHhCNiwgMHgzMywgMHg1MiwgMHhBRSwgMHgzRCwgMHhG RCwgMHgyMiwgMHhGQywKKysgICAgMHgzQSwgMHhBQiwgMHg2MywgMHg5NCwgMHhCNSwgMHgzQSwg MHg2OSwgMHgxMSwgMHhBQywgMHg5OSwgMHg0RiwgMHgzMywKKysgICAgMHg2NywgMHgwQSwgMHgx QSwgMHg3MCwgMHgxRSwgMHhCOSwgMHhFMiwgMHgyNiwgMHgyNywgMHg2OCwgMHhFQSwgMHhGNSwK KysgICAgMHg5NywgMHg1NSwgMHhBQywgMHg4MywgMHg2QSwgMHg0MCwgMHgzQiwgMHg1NiwgMHhB RSwgMHgxMywgMHg4OCwgMHhFOCwKKysgICAgMHg5OCwgMHg3MiwgMHg1MiwgMHg5MSwgMHg3Riwg MHg3OCwgMHgwQSwgMHgxOCwgMHhENCwgMHg0NCwgMHg3OCwgMHg4MywKKysgICAgMHgwRCwgMHg0 NCwgMHg3NywgMHhBNiwgMHhGMywgMHgwNCwgMHhGMSwgMHg4QywgMHhCQywgMHgyRiwgMHhGOSwg MHg1QiwKKysgICAgMHhEQiwgMHg3MCwgMHgwMCwgMHhGNgorK307CisrCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyNTZbXSA9IHsKKysgICAgMHhDMiwgMHhCMSwgMHg5 NywgMHgwMCwgMHg5QSwgMHhFNSwgMHg4MCwgMHg2QSwgMHhFMiwgMHg1MSwgMHg2OCwgMHhCOSwK KysgICAgMHg3QSwgMHgwQywgMHhGMiwgMHhCNCwgMHg3NywgMHhFRCwgMHgxNSwgMHgwQywgMHg0 RSwgMHhFMSwgMHhEQywgMHhGRiwKKysgICAgMHg4RSwgMHhCQywgMHhERSwgMHhDNywgMHg5QSwg MHg5NiwgMHhGMSwgMHg0NywgMHg0NSwgMHgyNCwgMHg5RCwgMHg2RiwKKysgICAgMHhBNiwgMHhG MywgMHgxRCwgMHgwRCwgMHgzNSwgMHg0QywgMHgxQSwgMHhGMywgMHg1OCwgMHgyQywgMHg2Qywg MHgwNiwKKysgICAgMHhENiwgMHgyMiwgMHgzNywgMHg3NywgMHg4QywgMHgzMywgMHhFNSwgMHgw NywgMHg1MywgMHg5MywgMHgyOCwgMHhDRiwKKysgICAgMHg2NywgMHhGQSwgMHhDNCwgMHgxRiwg MHgxQiwgMHgyNCwgMHhEQiwgMHg0QywgMHhDNSwgMHgyQSwgMHg1MSwgMHhBMiwKKysgICAgMHg2 MCwgMHgxNSwgMHg4QywgMHg1NCwgMHhCNCwgMHgzMCwgMHhFMiwgMHgyNCwgMHg0NywgMHg4Niwg MHhGMiwgMHhGOCwKKysgICAgMHg2QywgMHhENiwgMHgxMiwgMHg1OSwgMHgyQywgMHg3NCwgMHg5 QSwgMHgzNywgMHhGMywgMHhDNCwgMHhBMiwgMHhENSwKKysgICAgMHg0RSwgMHgxRiwgMHg3Nywg MHhGMCwgMHgyNywgMHhDRSwgMHg3NywgMHhGOCwgMHg0QSwgMHg3OSwgMHgwMywgMHhCRSwKKysg ICAgMHhDOCwgMHgwNiwgMHgyRCwgMHhBNywgMHhBNiwgMHg0NiwgMHhGNSwgMHg1NSwgMHg3OSwg MHhENywgMHg1QywgMHhDNiwKKysgICAgMHg1QiwgMHhCMSwgMHgwMCwgMHg0RSwgMHg3QywgMHhE OSwgMHgxMSwgMHg4NSwgMHhFMCwgMHhCMSwgMHg0RCwgMHgyRCwKKysgICAgMHgxMywgMHhENywg MHhBQywgMHhFQSwgMHg2NCwgMHhEMSwgMHhBQywgMHg4RiwgMHg4RCwgMHg4RiwgMHhFQSwgMHg0 MiwKKysgICAgMHg3RiwgMHhGOSwgMHhCNywgMHg3RCwgMHgyQywgMHg2OCwgMHg0OSwgMHgwNywg MHg3QSwgMHg3NCwgMHhFRiwgMHhCNCwKKysgICAgMHhDOSwgMHg5NywgMHgxNiwgMHg1QywgMHg2 QywgMHg2RSwgMHg1QywgMHgwOSwgMHgyRSwgMHg4RSwgMHgxMywgMHgyRSwKKysgICAgMHgxQSwg MHg4RCwgMHhBNiwgMHgwQywgMHg2RSwgMHgwQywgMHgxQywgMHgwRiwgMHhDQywgMHhCMiwgMHg3 OCwgMHg4QSwKKysgICAgMHgwNywgMHhGQywgMHg1QywgMHhDMiwgMHhGNSwgMHg2NSwgMHhFQywg MHhBQiwgMHg4QiwgMHgzQywgMHhDQSwgMHg5MSwKKysgICAgMHg2RiwgMHg4NCwgMHg3QywgMHgy MSwgMHgwRSwgMHhCOCwgMHhEQSwgMHg3QiwgMHg2QywgMHhGNywgMHhERiwgMHhBQiwKKysgICAg MHg3RSwgMHgxNSwgMHhGRCwgMHg4NSwgMHgwQiwgMHgzMywgMHg5QiwgMHg2QSwgMHgzQSwgMHhD MywgMHhFRiwgMHg2NSwKKysgICAgMHgwNCwgMHg2RSwgMHhCMiwgMHhBQywgMHg5OCwgMHhGRCwg MHhFQiwgMHgwMiwgMHhGNSwgMHhDMCwgMHgwQiwgMHg1RSwKKysgICAgMHhDQiwgMHhENCwgMHg4 MywgMHg4MiwgMHgxOCwgMHgxQiwgMHhEQSwgMHhCNCwgMHhDRCwgMHhFOCwgMHg3MSwgMHg2QiwK KysgICAgMHgxRCwgMHhCNSwgMHg0RiwgMHhFOSwgMHhENiwgMHg0MywgMHhBMCwgMHgwQSwgMHgx NCwgMHhBMCwgMHhFNywgMHg1RCwKKysgICAgMHg0NywgMHg5RCwgMHgxOCwgMHhENworK307Cisr Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsKKysgICAg MHgxMSwgMHg1RSwgMHg2MywgMHhGRSwgMHg0NywgMHhBQSwgMHg2QSwgMHg4NCwgMHhFQiwgMHg0 NCwgMHg5QSwgMHgwMCwKKysgICAgMHg5NiwgMHg0QSwgMHhFRCwgMHhEMiwgMHhBNywgMHg2Nywg MHgzQSwgMHg2NCwgMHg4MiwgMHgzMCwgMHg2MSwgMHgyRCwKKysgICAgMHhFMywgMHhGNSwgMHg0 OSwgMHg2OCwgMHg1RSwgMHg2MCwgMHhEMiwgMHg0RCwgMHhFRiwgMHhGMiwgMHhBNCwgMHhCMiwK KysgICAgMHg5QSwgMHg4MSwgMHgxRCwgMHg0MSwgMHhBNSwgMHg3MywgMHg1OSwgMHhFQiwgMHhC QiwgMHhDNCwgMHg5RSwgMHgyQiwKKysgICAgMHhFQiwgMHhDMywgMHhERSwgMHgzQSwgMHhFQSwg MHhGNSwgMHhBRCwgMHhEQSwgMHg4NywgMHgwOCwgMHg2OCwgMHhDRiwKKysgICAgMHgxMiwgMHg5 QiwgMHhDMSwgMHhFNCwgMHhBNywgMHg3MSwgMHhGOCwgMHhCRCwgMHg2QiwgMHg2RiwgMHg1MCwg MHhGMSwKKysgICAgMHhEMSwgMHhGRiwgMHhDRSwgMHg2QywgMHhEOSwgMHhCRSwgMHhEQSwgMHg3 NiwgMHhGMywgMHhFQiwgMHhBQiwgMHg5QywKKysgICAgMHg0MSwgMHg2RSwgMHg0RiwgMHgzNSwg MHg3QSwgMHg2MSwgMHgyNywgMHhCQywgMHgwMywgMHgzRSwgMHhBRSwgMHgzRSwKKysgICAgMHgx QiwgMHhERCwgMHhBQywgMHhEOSwgMHgxQSwgMHhGRiwgMHhEMywgMHhGNSwgMHg2NiwgMHg0Mywg MHgwNywgMHg3NiwKKysgICAgMHg4QSwgMHg2OSwgMHgyRCwgMHgxNCwgMHhCMSwgMHhCRSwgMHg1 NSwgMHg0OSwgMHg5MCwgMHg4OSwgMHg0QiwgMHhDNCwKKysgICAgMHgxMSwgMHg2NywgMHhENSwg MHg5RCwgMHhCMCwgMHhCMiwgMHhFRSwgMHg4RCwgMHgwQSwgMHg0NywgMHg0QSwgMHhEOSwKKysg ICAgMHgwRSwgMHhEMSwgMHgyNCwgMHhGMCwgMHgzMCwgMHgyQiwgMHhGMiwgMHg3OSwgMHg0Nywg MHhEQiwgMHg3MCwgMHhCNCwKKysgICAgMHg0NiwgMHhGMiwgMHhGOCwgMHhCNywgMHhCNCwgMHhG NiwgMHgzNCwgMHg3OSwgMHhBOCwgMHgyRCwgMHgzRCwgMHg1NiwKKysgICAgMHhENSwgMHg5QSwg MHg2MCwgMHg3QSwgMHgwNCwgMHhDNywgMHg2NiwgMHgxRCwgMHhDRCwgMHgzQywgMHhENSwgMHgz OSwKKysgICAgMHgzNywgMHgxMiwgMHg1MSwgMHg1RSwgMHg5RiwgMHhGOCwgMHgxQSwgMHhBRiwg MHgxMywgMHhDMSwgMHgxMywgMHgwMCwKKysgICAgMHgzNSwgMHhENSwgMHg4RCwgMHgxNywgMHhF MywgMHgwMiwgMHgyOCwgMHhEOSwgMHhFQywgMHhERSwgMHhEMSwgMHgyRiwKKysgICAgMHg5Mywg MHg0OSwgMHgwMywgMHgxMSwgMHgzRSwgMHg1NiwgMHg5RCwgMHhDMiwgMHgzMSwgMHhGOCwgMHhB RiwgMHgyRCwKKysgICAgMHhEOSwgMHg5OSwgMHhCNywgMHg4QSwgMHhBQywgMHg1QSwgMHg4Niwg MHgyMCwgMHgzQSwgMHg4MywgMHgyOSwgMHgyNiwKKysgICAgMHg5RCwgMHgwMywgMHg1MiwgMHgy QiwgMHgzNCwgMHg1NiwgMHg0MCwgMHgxNiwgMHg1MywgMHg1MCwgMHg4MiwgMHhDOSwKKysgICAg MHhDNywgMHhENSwgMHg1MSwgMHg0QywgMHhFRCwgMHhCMywgMHhFMiwgMHhFMSwgMHhDRiwgMHhB OCwgMHhDRSwgMHhCRCwKKysgICAgMHhCMSwgMHg0OCwgMHhBNiwgMHg4QSwgMHg3OSwgMHgxNywg MHg1NSwgMHgxMSwgMHhFRiwgMHhFOCwgMHgxNCwgMHhGNCwKKysgICAgMHg3RSwgMHgzNywgMHgx RCwgMHg5NgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEE1 MTJbXSA9IHsKKysgICAgMHgzNSwgMHg2RCwgMHhGMSwgMHg5RSwgMHhDRiwgMHhCMSwgMHhGNiwg MHgwQywgMHgwNCwgMHgyMSwgMHgxNywgMHhCMywKKysgICAgMHhDNCwgMHg5RCwgMHhGRSwgMHg2 MiwgMHgxQywgMHgxQSwgMHg0NSwgMHgwMCwgMHgyRSwgMHg2QiwgMHhCNiwgMHg5RiwKKysgICAg MHg1QywgMHhCMSwgMHhDQiwgMHhDRiwgMHhGOSwgMHg2NywgMHhFQSwgMHg2MiwgMHg4QSwgMHhF QiwgMHg3NywgMHgwMiwKKysgICAgMHg0MiwgMHgzMCwgMHg4OCwgMHhCMSwgMHg0OCwgMHhERiwg MHgxMiwgMHg2MCwgMHg2RSwgMHg5MiwgMHhCQiwgMHg0QiwKKysgICAgMHgwOSwgMHg2OCwgMHhE MSwgMHg3MCwgMHgyQiwgMHg1OSwgMHhFRSwgMHg1NywgMHg5NiwgMHhGOSwgMHhFQSwgMHhBMywK KysgICAgMHg0QywgMHhFOSwgMHhDOSwgMHhCRCwgMHgyNSwgMHgzNCwgMHg2NiwgMHgxNSwgMHg2 QywgMHhDOSwgMHg4MSwgMHhEMSwKKysgICAgMHg0OCwgMHgwRiwgMHgzMywgMHg1RiwgMHgwNSwg MHg0RiwgMHhDMiwgMHhDNCwgMHhERCwgMHgwOSwgMHg1NCwgMHg3OSwKKysgICAgMHhBMSwgMHg1 NywgMHgwNywgMHg3MCwgMHhBMCwgMHgzMywgMHgwMiwgMHg0RCwgMHg1RCwgMHhFOSwgMHgyNCwg MHhEMSwKKysgICAgMHhFRiwgMHhGMCwgMHg2MSwgMHhEMCwgMHgxRCwgMHg0MSwgMHhFMiwgMHg5 QiwgMHgyQiwgMHg3QywgMHhEMCwgMHg0RSwKKysgICAgMHg1NSwgMHhEOSwgMHg2RCwgMHhBMSwg MHgxNiwgMHg5RiwgMHhEQSwgMHhDMywgMHgzQiwgMHhGMSwgMHg3NCwgMHhEMSwKKysgICAgMHg5 OSwgMHhGMSwgMHg2MywgMHg1NywgMHhBRCwgMHhDNywgMHg1NSwgMHhGNCwgMHg5NywgMHg0Mywg MHgxQywgMHhFRCwKKysgICAgMHgxQiwgMHg3QSwgMHgzMiwgMHhDQiwgMHgyNCwgMHhBNiwgMHgz RCwgMHg5MywgMHgzNywgMHg5MCwgMHg3NCwgMHhFRSwKKysgICAgMHhEMiwgMHg4RCwgMHg0Qiwg MHhCQywgMHg3MiwgMHhEQSwgMHgyNSwgMHgyQiwgMHg2NCwgMHhFOSwgMHhDQSwgMHg2OSwKKysg ICAgMHgzNiwgMHhCNiwgMHhFQywgMHg2RSwgMHg4RiwgMHgzMywgMHgwRSwgMHg3NCwgMHg0MCwg MHg0OCwgMHg1MSwgMHhFMiwKKysgICAgMHg1NCwgMHg2RiwgMHhBRiwgMHg2RSwgMHgzNiwgMHg1 NCwgMHgzQSwgMHhFQywgMHg3OCwgMHgzNywgMHhFNiwgMHgxRiwKKysgICAgMHg3NiwgMHhBNSwg MHg0RCwgMHhBNiwgMHhEOSwgMHhCMywgMHg2QiwgMHgxNywgMHg2RCwgMHg2MSwgMHhGQywgMHhB MywKKysgICAgMHg4NSwgMHg0QSwgMHhDQywgMHhEQSwgMHg1MiwgMHhBQywgMHg1QiwgMHhEQSwg MHg1MSwgMHhFNSwgMHg3RiwgMHg1QiwKKysgICAgMHg1MiwgMHg4QiwgMHg3NCwgMHg3NSwgMHg5 OSwgMHg1QywgMHgwMSwgMHhGRCwgMHgyNSwgMHgzRSwgMHhDRCwgMHg4NiwKKysgICAgMHg2Riwg MHg3QSwgMHhDMCwgMHhEOCwgMHgxNywgMHg2RiwgMHhEMSwgMHhEMiwgMHg2QiwgMHhBQiwgMHgx NCwgMHgxRiwKKysgICAgMHgzQiwgMHhCOCwgMHgxNSwgMHgwNSwgMHg4NiwgMHg0MCwgMHgzNiwg MHhDRiwgMHhEQSwgMHg1OSwgMHgyQiwgMHg5QSwKKysgICAgMHhFOSwgMHgxRSwgMHg2RSwgMHhE MywgMHg2QiwgMHhBMSwgMHgxOSwgMHhDNSwgMHhFNiwgMHgzRiwgMHhFOSwgMHgyRSwKKysgICAg MHg0MywgMHhBOCwgMHgzNCwgMHgwQQorK307CisrCisrc3RhdGljIGludCBmaXBzX3JzYV9lbmNy eXB0X3Rlc3QoUlNBICpyc2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHRsZW4pCisreworKyAgICB1bnNpZ25l ZCBjaGFyICpjdGJ1ZiA9IE5VTEwsICpwdGJ1ZiA9IE5VTEw7CisrICAgIGludCByZXQgPSAwOwor KyAgICBpbnQgbGVuOworKworKyAgICBjdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJz YSkpOworKyAgICBpZiAoIWN0YnVmKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGxlbiA9 IFJTQV9wdWJsaWNfZW5jcnlwdChwdGxlbiwgcGxhaW50ZXh0LCBjdGJ1ZiwgcnNhLCBSU0FfUEtD UzFfUEFERElORyk7CisrICAgIGlmIChsZW4gPD0gMCkKKysgICAgICAgIGdvdG8gZXJyOworKyAg ICAvKiBDaGVjayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0ICovCisrICAgIGlm IChsZW4gPj0gcHRsZW4gJiYgIW1lbWNtcChwbGFpbnRleHQsIGN0YnVmLCBwdGxlbikpCisrICAg ICAgICBnb3RvIGVycjsKKysKKysgICAgcHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShy c2EpKTsKKysgICAgaWYgKCFwdGJ1ZikKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBsZW4g PSBSU0FfcHJpdmF0ZV9kZWNyeXB0KGxlbiwgY3RidWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9Q QURESU5HKTsKKysgICAgaWYgKGxlbiAhPSBwdGxlbikKKysgICAgICAgIGdvdG8gZXJyOworKyAg ICBpZiAobWVtY21wKHB0YnVmLCBwbGFpbnRleHQsIGxlbikpCisrICAgICAgICBnb3RvIGVycjsK KysKKysgICAgcmV0ID0gMTsKKysKKysgZXJyOgorKyAgICBpZiAoY3RidWYpCisrICAgICAgICBP UEVOU1NMX2ZyZWUoY3RidWYpOworKyAgICBpZiAocHRidWYpCisrICAgICAgICBPUEVOU1NMX2Zy ZWUocHRidWYpOworKyAgICByZXR1cm4gcmV0OworK30KKysKKytpbnQgRklQU19zZWxmdGVzdF9y c2EoKQorK3sKKysgICAgaW50IHJldCA9IDA7CisrICAgIFJTQSAqa2V5OworKyAgICBFVlBfUEtF WSAqcGsgPSBOVUxMOworKworKyAgICBpZiAoKGtleSA9IFJTQV9uZXcoKSkgPT0gTlVMTCkKKysg ICAgICAgIGdvdG8gZXJyOworKworKyAgICBpZiAoIXNldHJzYWtleShrZXkpKQorKyAgICAgICAg Z290byBlcnI7CisrCisrICAgIGlmICgocGsgPSBFVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysg ICAgICAgIGdvdG8gZXJyOworKworKyAgICBFVlBfUEtFWV9zZXQxX1JTQShwaywga2V5KTsKKysK KysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihr YXRfdGJzKSAtIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0Ff U0hBMSwgc2l6ZW9mKGthdF9SU0FfU0hBMSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hBMSBQS0NTIzEiKSkKKysgICAgICAgIGdv dG8gZXJyOworKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywg c2l6ZW9mKGthdF90YnMpIC0gMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg a2F0X1JTQV9TSEEyMjQsIHNpemVvZihrYXRfUlNBX1NIQTIyNCksCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEVWUF9zaGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NT MSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJTQSBTSEEyMjQgUEtDUyMx IikpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGthdF9SU0FfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9TSEEyNTYpLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfc2hhMjU2KCksIEVWUF9NRF9D VFhfRkxBR19QQURfUEtDUzEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJS U0EgU0hBMjU2IFBLQ1MjMSIpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1NIQTM4NCwgc2l6ZW9mKGth dF9SU0FfU0hBMzg0KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX3No YTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUlNBIFNIQTM4NCBQS0NTIzEiKSkKKysgICAgICAgIGdvdG8gZXJyOwor KyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGth dF90YnMpIC0gMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9T SEE1MTIsIHNpemVvZihrYXRfUlNBX1NIQTUxMiksCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJTQSBTSEE1MTIgUEtDUyMxIikpCisrICAg ICAgICBnb3RvIGVycjsKKysKKysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGss IGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGthdF9SU0FfUFNTX1NIQTEsIHNpemVvZihrYXRfUlNBX1BTU19TSEExKSwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9G TEFHX1BBRF9QU1MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hB MSBQU1MiKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9QU1NfU0hBMjI0LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjI0KSwgRVZQX3NoYTIy NCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdf UEFEX1BTUywgIlJTQSBTSEEyMjQgUFNTIikpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYg KCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAt IDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfUFNTX1NIQTI1 NiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGthdF9SU0FfUFNT X1NIQTI1NiksIEVWUF9zaGEyNTYoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsICJSU0EgU0hBMjU2IFBTUyIpKQorKyAgICAgICAg Z290byBlcnI7CisrICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBrYXRfUlNBX1BTU19TSEEzODQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZihrYXRfUlNBX1BTU19TSEEzODQpLCBFVlBfc2hhMzg0KCksCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLCAiUlNBIFNIQTM4 NCBQU1MiKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9QU1NfU0hBNTEyLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBNTEyKSwgRVZQX3NoYTUx MigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdf UEFEX1BTUywgIlJTQSBTSEE1MTIgUFNTIikpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAg aWYgKCFmaXBzX3JzYV9lbmNyeXB0X3Rlc3Qoa2V5LCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ricykg LSAxKSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICByZXQgPSAxOworKworKyBlcnI6Cisr ICAgIGlmIChwaykKKysgICAgICAgIEVWUF9QS0VZX2ZyZWUocGspOworKyAgICBpZiAoa2V5KQor KyAgICAgICAgUlNBX2ZyZWUoa2V5KTsKKysgICAgcmV0dXJuIHJldDsKKyt9CisrCisrI2VuZGlm ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWYgT1BFTlNTTF9GSVBTICovCitkaWZmIC11 cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYy5maXBz IG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jCistLS0g b3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMuZmlwcwky MDE4LTA3LTI1IDE3OjI2OjU4LjQxMDYyNDgyNCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJl OC9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jCTIwMTgtMDctMjUgMTc6MjY6NTguNDEw NjI0ODI0ICswMjAwCitAQCAtMCwwICsxLDEzOCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgor KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwor KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQor KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK KysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAq LworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYK KysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljIGNvbnN0IGNoYXIgdGVzdFtdWzYwXSA9IHsK KysgICAgIiIsCisrICAgICJhYmMiLAorKyAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hp amhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciByZXRbXVtTSEFfRElHRVNUX0xFTkdUSF0gPSB7CisrICAgIHsweGRhLCAweDM5 LCAweGEzLCAweGVlLCAweDVlLCAweDZiLCAweDRiLCAweDBkLCAweDMyLCAweDU1LAorKyAgICAg MHhiZiwgMHhlZiwgMHg5NSwgMHg2MCwgMHgxOCwgMHg5MCwgMHhhZiwgMHhkOCwgMHgwNywgMHgw OX0sCisrICAgIHsweGE5LCAweDk5LCAweDNlLCAweDM2LCAweDQ3LCAweDA2LCAweDgxLCAweDZh LCAweGJhLCAweDNlLAorKyAgICAgMHgyNSwgMHg3MSwgMHg3OCwgMHg1MCwgMHhjMiwgMHg2Yywg MHg5YywgMHhkMCwgMHhkOCwgMHg5ZH0sCisrICAgIHsweDg0LCAweDk4LCAweDNlLCAweDQ0LCAw eDFjLCAweDNiLCAweGQyLCAweDZlLCAweGJhLCAweGFlLAorKyAgICAgMHg0YSwgMHhhMSwgMHhm OSwgMHg1MSwgMHgyOSwgMHhlNSwgMHhlNSwgMHg0NiwgMHg3MCwgMHhmMX0sCisrfTsKKysKKytp bnQgRklQU19zZWxmdGVzdF9zaGExKCkKKyt7CisrICAgIGludCBuOworKworKyAgICBmb3IgKG4g PSAwOyBuIDwgc2l6ZW9mKHRlc3QpIC8gc2l6ZW9mKHRlc3RbMF0pOyArK24pIHsKKysgICAgICAg IHVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOworKworKyAgICAgICAgRVZQX0Rp Z2VzdCh0ZXN0W25dLCBzdHJsZW4odGVzdFtuXSksIG1kLCBOVUxMLAorKyAgICAgICAgICAgICAg ICAgICBFVlBfc2hhMSgpLCBOVUxMKTsKKysgICAgICAgIGlmIChtZW1jbXAobWQsIHJldFtuXSwg c2l6ZW9mIG1kKSkgeworKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1Rf U0hBMSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICAgICAgcmV0dXJuIDA7Cisr ICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIG1zZ19zaGEyNTZbXSA9CisrICAgIHsgMHhmYSwgMHg0OCwgMHg1OSwgMHgy YSwgMHhlMSwgMHhhZSwgMHgxZiwgMHgzMCwKKysgICAgMHhmYworK307CisrCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZGlnX3NoYTI1NltdID0KKysgICAgeyAweGY3LCAweDI2LCAweGQ4 LCAweDk4LCAweDQ3LCAweDkxLCAweDY4LCAweDViLAorKyAgICAweDllLCAweDM5LCAweGIyLCAw eDU4LCAweGJiLCAweDc1LCAweGJmLCAweDAxLAorKyAgICAweDE3LCAweDBjLCAweDg0LCAweDAw LCAweDAxLCAweDdhLCAweDk0LCAweDgzLAorKyAgICAweGYzLCAweDBiLCAweDE1LCAweDg0LCAw eDRiLCAweDY5LCAweDg4LCAweDhhCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBtc2dfc2hhNTEyW10gPQorKyAgICB7IDB4MzcsIDB4ZDEsIDB4MzUsIDB4OWQsIDB4MTgsIDB4 NDEsIDB4ZTksIDB4YjcsCisrICAgIDB4NmQsIDB4OWEsIDB4MTMsIDB4ZGEsIDB4NWYsIDB4ZjMs IDB4YmQKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ19zaGE1MTJbXSA9 CisrICAgIHsgMHgxMSwgMHgxMywgMHhjNCwgMHgxOSwgMHhlZCwgMHgyYiwgMHgxZCwgMHgxNiwK KysgICAgMHgxMSwgMHhlYiwgMHg5YiwgMHhiZSwgMHhmMCwgMHg3ZiwgMHhjZiwgMHg0NCwKKysg ICAgMHg4YiwgMHhkNywgMHg1NywgMHhiZCwgMHg4ZCwgMHhhOSwgMHgyNSwgMHhiMCwKKysgICAg MHg0NywgMHgyNSwgMHhkNiwgMHg2YywgMHg5YSwgMHg1NCwgMHg3ZiwgMHg4ZiwKKysgICAgMHgw YiwgMHg1MywgMHgxYSwgMHgxMCwgMHg2OCwgMHgzMiwgMHgwMywgMHgzOCwKKysgICAgMHg4Miwg MHhjNCwgMHg4NywgMHhjNCwgMHhlYSwgMHgwZSwgMHhkMSwgMHgwNCwKKysgICAgMHhhOSwgMHg5 OCwgMHhjMSwgMHgwNSwgMHhhMywgMHhmMywgMHhmOCwgMHhiMSwKKysgICAgMHhhZiwgMHhiYywg MHhkOSwgMHg3OCwgMHg3ZSwgMHhlZSwgMHgzZCwgMHg0MworK307CisrCisraW50IEZJUFNfc2Vs ZnRlc3Rfc2hhMih2b2lkKQorK3sKKysgICAgdW5zaWduZWQgY2hhciBtZFtTSEE1MTJfRElHRVNU X0xFTkdUSF07CisrCisrICAgIEVWUF9EaWdlc3QobXNnX3NoYTI1Niwgc2l6ZW9mKG1zZ19zaGEy NTYpLCBtZCwgTlVMTCwgRVZQX3NoYTI1NigpLCBOVUxMKTsKKysgICAgaWYgKG1lbWNtcChkaWdf c2hhMjU2LCBtZCwgc2l6ZW9mKGRpZ19zaGEyNTYpKSkgeworKyAgICAgICAgRklQU2VycihGSVBT X0ZfRklQU19TRUxGVEVTVF9TSEEyLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAg IHJldHVybiAwOworKyAgICB9CisrCisrICAgIEVWUF9EaWdlc3QobXNnX3NoYTUxMiwgc2l6ZW9m KG1zZ19zaGE1MTIpLCBtZCwgTlVMTCwgRVZQX3NoYTUxMigpLCBOVUxMKTsKKysgICAgaWYgKG1l bWNtcChkaWdfc2hhNTEyLCBtZCwgc2l6ZW9mKGRpZ19zaGE1MTIpKSkgeworKyAgICAgICAgRklQ U2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEEyLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsK KysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAgIHJldHVybiAxOworK30KKysKKysj ZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZmlwcy9maXBzX3N0YW5k YWxvbmVfaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfc3Rh bmRhbG9uZV9obWFjLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2ZpcHMvZmlwc19z dGFuZGFsb25lX2htYWMuYy5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTguNDEwNjI0ODI0ICswMjAw CisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFj LmMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MTA2MjQ4MjQgKzAyMDAKK0BAIC0wLDAgKzEsMTI3IEBA CisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAq CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJp YnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysg KgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9vcGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9zaGEuaD4KKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrewor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgc3RhdGljIGNoYXIga2V5W10gPSAib3Jib0RlSklU SVRlanNpcnBBRE9OaXZpcnBVa3ZhclAiOworKyAgICBpbnQgbiwgYmluYXJ5ID0gMDsKKysKKysg ICAgaWYgKGFyZ2MgPCAyKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIFs8ZmlsZT5d K1xuIiwgYXJndlswXSk7CisrICAgICAgICBleGl0KDEpOworKyAgICB9CisrCisrICAgIG4gPSAx OworKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCAiLWJpbmFyeSIpKSB7CisrICAgICAgICBuKys7 CisrICAgICAgICBiaW5hcnkgPSAxOyAgICAgICAgICAgICAvKiBlbWl0IGJpbmFyeSBmaW5nZXJw cmludC4uLiAqLworKyAgICB9CisrCisrICAgIGZvciAoOyBuIDwgYXJnYzsgKytuKSB7CisrICAg ICAgICBGSUxFICpmID0gZm9wZW4oYXJndltuXSwgInJiIik7CisrICAgICAgICBITUFDX0NUWCAq aG1hY19jdHg7CisrICAgICAgICB1bnNpZ25lZCBjaGFyIG1hY1tFVlBfTUFYX01EX1NJWkVdOwor KyAgICAgICAgdW5zaWduZWQgaW50IGxlbjsKKysgICAgICAgIHVuc2lnbmVkIGludCBpOworKwor KyAgICAgICAgaWYgKCFmKSB7CisrICAgICAgICAgICAgcGVycm9yKGFyZ3Zbbl0pOworKyAgICAg ICAgICAgIGV4aXQoMik7CisrICAgICAgICB9CisrICAgICAgICBobWFjX2N0eCA9IEhNQUNfQ1RY X25ldygpOworKyAgICAgICAgaWYgKCFobWFjX2N0eCkKKysgICAgICAgICAgICBleGl0KDMpOwor KworKyAgICAgICAgaWYgKEhNQUNfSW5pdF9leChobWFjX2N0eCwga2V5LCBzdHJsZW4oa2V5KSwg RVZQX3NoYTI1NigpLCBOVUxMKSA8PSAwKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJITUFDIFNIQTI1NiBpbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKKysgICAgICAgICAgICBl eGl0KDQpOworKyAgICAgICAgfQorKworKyAgICAgICAgZm9yICg7OykgeworKyAgICAgICAgICAg IGNoYXIgYnVmWzEwMjRdOworKyAgICAgICAgICAgIHNpemVfdCBsID0gZnJlYWQoYnVmLCAxLCBz aXplb2YgYnVmLCBmKTsKKysKKysgICAgICAgICAgICBpZiAobCA9PSAwKSB7CisrICAgICAgICAg ICAgICAgIGlmIChmZXJyb3IoZikpIHsKKysgICAgICAgICAgICAgICAgICAgIHBlcnJvcihhcmd2 W25dKTsKKysgICAgICAgICAgICAgICAgICAgIGV4aXQoMyk7CisrICAgICAgICAgICAgICAgIH0g ZWxzZQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAg ICAgICAgIGlmIChITUFDX1VwZGF0ZShobWFjX2N0eCwgYnVmLCBsKSA8PSAwKSB7CisrICAgICAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSE1BQ19VcGRhdGUoKSBmYWlsZWQuXG4iKTsKKysg ICAgICAgICAgICAgICAgZXhpdCg0KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAg ICAgICBpZiAoSE1BQ19GaW5hbChobWFjX2N0eCwgbWFjLCAmbGVuKSA8PSAwKSB7CisrICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsICJITUFDX0ZpbmFsKCkgZmFpbGVkLlxuIik7CisrICAgICAg ICAgICAgZXhpdCg0KTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChiaW5hcnkpIHsKKysg ICAgICAgICAgICBmd3JpdGUobWFjLCBsZW4sIDEsIHN0ZG91dCk7CisrICAgICAgICAgICAgYnJl YWs7ICAgICAgICAgICAgICAvKiAuLi4gZm9yIHNpbmdsZSghKSBmaWxlICovCisrICAgICAgICB9 CisrCisrLyogICAgICBwcmludGYoIkhNQUMtU0hBMSglcyk9ICIsYXJndltuXSk7ICovCisrICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCisrICAgICAgICAgICAgcHJpbnRmKCIlMDJ4 IiwgbWFjW2ldKTsKKysgICAgICAgIHByaW50ZigiXG4iKTsKKysgICAgfQorKyNlbmRpZgorKyAg ICByZXR1cm4gMDsKKyt9CitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2htYWMv aG1hYy5jLmZpcHMgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9obWFjL2htYWMuYworLS0tIG9w ZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcwkyMDE4LTA2LTIwIDE2OjQ4 OjExLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vaG1hYy9o bWFjLmMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MTA2MjQ4MjQgKzAyMDAKK0BAIC0zNSw2ICszNSwx MyBAQCBpbnQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvCisgICAgIH0KKyAK KyAgICAgaWYgKGtleSAhPSBOVUxMKSB7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICAgICAg aWYgKEZJUFNfbW9kZSgpICYmICEoRVZQX01EX2ZsYWdzKG1kKSAmIEVWUF9NRF9GTEFHX0ZJUFMp CisrICAgICAgICAgICAgJiYgKCFFVlBfTURfQ1RYX3Rlc3RfZmxhZ3MoY3R4LT5tZF9jdHgsIEVW UF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKKysgICAgICAgICAgICAgICAgfHwgIUVWUF9N RF9DVFhfdGVzdF9mbGFncyhjdHgtPmlfY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpCisrICAgICAgICAgICAgICAgIHx8ICFFVlBfTURfQ1RYX3Rlc3RfZmxhZ3MoY3R4LT5vX2N0 eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkpCisrICAgICAgICAgICAgZ290byBl cnI7CisrI2VuZGlmCisgICAgICAgICByZXNldCA9IDE7CisgICAgICAgICBqID0gRVZQX01EX2Js b2NrX3NpemUobWQpOworICAgICAgICAgaWYgKCFvc3NsX2Fzc2VydChqIDw9IChpbnQpc2l6ZW9m KGN0eC0+a2V5KSkpCitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2luY2x1ZGUv aW50ZXJuYWwvZmlwc19pbnQuaC5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vaW5jbHVk ZS9pbnRlcm5hbC9maXBzX2ludC5oCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9pbmNs dWRlL2ludGVybmFsL2ZpcHNfaW50LmguZmlwcwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQxMDYyNDgy NCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vaW5jbHVkZS9pbnRlcm5hbC9m aXBzX2ludC5oCTIwMTgtMDctMjUgMTc6MjY6NTguNDEwNjI0ODI0ICswMjAwCitAQCAtMCwwICsx LDEwMSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxvcGVuc3Ns L29wZW5zc2xjb25mLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrCisrI2lmbmRlZiBP UEVOU1NMX0ZJUFMKKysjIGVycm9yIEZJUFMgaXMgZGlzYWJsZWQuCisrI2VuZGlmCisrCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKworK2ludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYp OworK2ludCBGSVBTX21vZHVsZV9tb2RlKHZvaWQpOworK2ludCBGSVBTX21vZHVsZV9pbnN0YWxs ZWQodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3Rfc2hhMSh2b2lkKTsKKytpbnQgRklQU19zZWxm dGVzdF9zaGEyKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19jY20odm9pZCk7CisraW50 IEZJUFNfc2VsZnRlc3RfYWVzX2djbSh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXNfeHRz KHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flcyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVz dF9kZXModm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfcnNhKHZvaWQpOworK2ludCBGSVBTX3Nl bGZ0ZXN0X2RzYSh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9lY2RzYSh2b2lkKTsKKytpbnQg RklQU19zZWxmdGVzdF9lY2RoKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2RoKHZvaWQpOwor K3ZvaWQgRklQU19kcmJnX3N0aWNrKGludCBvbm9mZik7CisraW50IEZJUFNfc2VsZnRlc3RfaG1h Yyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9kcmJnKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0 ZXN0X2NtYWModm9pZCk7CisrCisraW50IGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChFVlBfUEtF WSAqcGtleSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBrYXRsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgRVZQX01EICpkaWdlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IG1kX2ZsYWdzLCBjb25zdCBjaGFyICpmYWlsX3N0cik7CisrCisr aW50IGZpcHNfY2lwaGVyX3Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisrICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsIGludCBsZW4pOworKworK3ZvaWQgZmlw c19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKKysKKytjb25zdCBFVlBfTUQgKkZJUFNfZ2V0X2Rp Z2VzdGJ5bmlkKGludCBuaWQpOworKworK2NvbnN0IEVWUF9DSVBIRVIgKkZJUFNfZ2V0X2NpcGhl cmJ5bmlkKGludCBuaWQpOworKworK3ZvaWQgRklQU19nZXRfdGltZXZlYyh1bnNpZ25lZCBjaGFy ICpidWYsIHVuc2lnbmVkIGxvbmcgKnBjdHIpOworKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNz bC0xLjEuMS1wcmU4L2NyeXB0by9vX2ZpcHMuYy5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlw dG8vb19maXBzLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL29fZmlwcy5jLmZpcHMJ MjAxOC0wNi0yMCAxNjo0ODoxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXBy ZTgvY3J5cHRvL29fZmlwcy5jCTIwMTgtMDctMjUgMTc6MjY6NTguNDEwNjI0ODI0ICswMjAwCitA QCAtMTEsMTQgKzExLDI1IEBACisgCisgaW50IEZJUFNfbW9kZSh2b2lkKQorIHsKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrICAgIHJldHVybiBGSVBTX21vZHVsZV9tb2RlKCk7CisrI2Vsc2UKKyAg ICAgLyogVGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGRvZXMgbm90IHN1cHBvcnQgRklQUyBt b2RlLiAqLworICAgICByZXR1cm4gMDsKKysjZW5kaWYKKyB9CisgCisgaW50IEZJUFNfbW9kZV9z ZXQoaW50IHIpCisgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKHIgJiYgRklQU19t b2R1bGVfbW9kZSgpKSAvKiBjYW4gYmUgaW1wbGljaXRseSBpbml0aWFsaXplZCBieSBPUEVOU1NM X2luaXQoKSAqLworKyAgICAgICAgcmV0dXJuIDE7CisrICAgIGlmICghRklQU19tb2R1bGVfbW9k ZV9zZXQocikpCisrICAgICAgICByZXR1cm4gMDsKKysjZWxzZQorICAgICBpZiAociA9PSAwKQor ICAgICAgICAgcmV0dXJuIDE7CisgICAgIENSWVBUT2VycihDUllQVE9fRl9GSVBTX01PREVfU0VU LCBDUllQVE9fUl9GSVBTX01PREVfTk9UX1NVUFBPUlRFRCk7CisgICAgIHJldHVybiAwOworKyNl bmRpZgorIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vb19pbml0LmMuZmlw cyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL29faW5pdC5jCistLS0gb3BlbnNzbC0xLjEuMS1w cmU4L2NyeXB0by9vX2luaXQuYy5maXBzCTIwMTgtMDYtMjAgMTY6NDg6MTEuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9vX2luaXQuYwkyMDE4LTA3LTI1IDE3 OjI2OjU4LjQxMDYyNDgyNCArMDIwMAorQEAgLTcsOCArNyw2OCBAQAorICAqIGh0dHBzOi8vd3d3 Lm9wZW5zc2wub3JnL3NvdXJjZS9saWNlbnNlLmh0bWwKKyAgKi8KKyAKKysvKiBmb3Igc2VjdXJl X2dldGVudiAqLworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSAiZV9vcy5oIgorICNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUg PHN5cy90eXBlcy5oPgorKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysjIGluY2x1ZGUgPGZjbnRs Lmg+CisrIyBpbmNsdWRlIDx1bmlzdGQuaD4KKysjIGluY2x1ZGUgPGVycm5vLmg+CisrIyBpbmNs dWRlIDxzdGRsaWIuaD4KKysjIGluY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyMgaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+CisrIyBpbmNsdWRlICJpbnRlcm5hbC9maXBzX2ludC5oIgorKworKyMg ZGVmaW5lIEZJUFNfTU9ERV9TV0lUQ0hfRklMRSAiL3Byb2Mvc3lzL2NyeXB0by9maXBzX2VuYWJs ZWQiCisrCisrc3RhdGljIHZvaWQgaW5pdF9maXBzX21vZGUodm9pZCkKKyt7CisrICAgIGNoYXIg YnVmWzJdID0gIjAiOworKyAgICBpbnQgZmQ7CisrCisrICAgIC8qIEVuc3VyZSB0aGUgc2VsZnRl c3RzIGFsd2F5cyBydW4gKi8KKysgICAgLyogWFhYOiBUTyBTT0xWRSAtIHByZW1hdHVyZSBpbml0 aWFsaXphdGlvbiBkdWUgdG8gc2VsZnRlc3RzICovCisrICAgIEZJUFNfbW9kZV9zZXQoMSk7Cisr CisrICAgIGlmIChzZWN1cmVfZ2V0ZW52KCJPUEVOU1NMX0ZPUkNFX0ZJUFNfTU9ERSIpICE9IE5V TEwpIHsKKysgICAgICAgIGJ1ZlswXSA9ICcxJzsKKysgICAgfSBlbHNlIGlmICgoZmQgPSBvcGVu KEZJUFNfTU9ERV9TV0lUQ0hfRklMRSwgT19SRE9OTFkpKSA+PSAwKSB7CisrICAgICAgICB3aGls ZSAocmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPCAwICYmIGVycm5vID09IEVJTlRSKSA7Cisr ICAgICAgICBjbG9zZShmZCk7CisrICAgIH0KKysgICAgLyogRmFpbHVyZSByZWFkaW5nIHRoZSBm aXBzIG1vZGUgc3dpdGNoIGZpbGUgbWVhbnMganVzdCBub3QKKysgICAgICogc3dpdGNoaW5nIGlu dG8gRklQUyBtb2RlLiBXZSB3b3VsZCBicmVhayB0b28gbWFueSB0aGluZ3MKKysgICAgICogb3Ro ZXJ3aXNlLi4KKysgICAgICovCisrCisrICAgIGlmIChidWZbMF0gIT0gJzEnKSB7CisrICAgICAg ICAvKiBkcm9wIGRvd24gdG8gbm9uLUZJUFMgbW9kZSBpZiBpdCBpcyBub3QgcmVxdWVzdGVkICov CisrICAgICAgICBGSVBTX21vZGVfc2V0KDApOworKyAgICB9IGVsc2UgeworKyAgICAgICAgLyog YWJvcnQgaWYgc2VsZnRlc3QgZmFpbGVkICovCisrICAgICAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNr KCk7CisrICAgIH0KKyt9CisrCisrLyoKKysgKiBQZXJmb3JtIEZJUFMgbW9kdWxlIHBvd2VyIG9u IHNlbGZ0ZXN0IGFuZCBhdXRvbWF0aWMgRklQUyBtb2RlIHN3aXRjaC4KKysgKi8KKysKKyt2b2lk IF9fYXR0cmlidXRlX18gKChjb25zdHJ1Y3RvcikpIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQp CisreworKyAgICBzdGF0aWMgaW50IGRvbmUgPSAwOworKyAgICBpZiAoZG9uZSkKKysgICAgICAg IHJldHVybjsKKysgICAgZG9uZSA9IDE7CisrICAgIGlmICghRklQU19tb2R1bGVfaW5zdGFsbGVk KCkpIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBpbml0X2ZpcHNfbW9kZSgpOwor K30KKysjZW5kaWYKKyAKKyAvKgorICAqIFBlcmZvcm0gYW55IGVzc2VudGlhbCBPcGVuU1NMIGlu aXRpYWxpemF0aW9uIG9wZXJhdGlvbnMuIEN1cnJlbnRseSBkb2VzCitkaWZmIC11cCBvcGVuc3Ns LTEuMS4xLXByZTgvY3J5cHRvL3JhbmQvcmFuZF9saWIuYy5maXBzIG9wZW5zc2wtMS4xLjEtcHJl OC9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9y YW5kL3JhbmRfbGliLmMuZmlwcwkyMDE4LTA2LTIwIDE2OjQ4OjExLjAwMDAwMDAwMCArMDIwMAor KysrIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jCTIwMTgtMDctMjUg MTc6MjY6NTguNDEwNjI0ODI0ICswMjAwCitAQCAtMTYsNiArMTYsMTAgQEAKKyAjaW5jbHVkZSAi aW50ZXJuYWwvdGhyZWFkX29uY2UuaCIKKyAjaW5jbHVkZSAicmFuZF9sY2wuaCIKKyAjaW5jbHVk ZSAiZV9vcy5oIgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjZW5kaWYKKyAKKyAjaWZu ZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgLyogbm9uLU5VTEwgaWYgZGVmYXVsdF9SQU5EX21ldGgg aXMgRU5HSU5FLXByb3ZpZGVkICovCitAQCAtNzc4LDMgKzc4MiwxNSBAQCBpbnQgUkFORF9zdGF0 dXModm9pZCkKKyAgICAgICAgIHJldHVybiBtZXRoLT5zdGF0dXMoKTsKKyAgICAgcmV0dXJuIDA7 CisgfQorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt2b2lkIFJBTkRfc2V0X2ZpcHNfZHJiZ190 eXBlKGludCB0eXBlLCBpbnQgZmxhZ3MpCisreyAgIC8qIGp1c3QgYSBzdHViIGZvciBBQkkgY29t cGF0aWJpbGl0eSAqLworK30KKysKKytpbnQgUkFORF9pbml0X2ZpcHModm9pZCkKKyt7CisrICAg LyoganVzdCBhIHN0dWIgZm9yIEFCSSBjb21wYXRpYmlsaXR5ICovCisrICAgIHJldHVybiAxOwor K30KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vcnNhL3JzYV9j cnB0LmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL3JzYS9yc2FfY3JwdC5jCistLS0g b3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9yc2EvcnNhX2NycHQuYy5maXBzCTIwMTgtMDYtMjAg MTY6NDg6MTEuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9y c2EvcnNhX2NycHQuYwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQxMTYyNDg0OCArMDIwMAorQEAgLTI3 LDI0ICsyNyw1MiBAQCBpbnQgUlNBX3NpemUoY29uc3QgUlNBICpyKQorIGludCBSU0FfcHVibGlj X2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNo YXIgKnRvLAorICAgICAgICAgICAgICAgICAgICAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQor IHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+ bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKysgICAgICAgICYmICEocnNhLT5m bGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkgeworKyAgICAgICAgUlNBZXJyKFJTQV9G X1JTQV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisrICAgICAg ICByZXR1cm4gLTE7CisrICAgIH0KKysjZW5kaWYKKyAgICAgcmV0dXJuIHJzYS0+bWV0aC0+cnNh X3B1Yl9lbmMoZmxlbiwgZnJvbSwgdG8sIHJzYSwgcGFkZGluZyk7CisgfQorIAorIGludCBSU0Ff cHJpdmF0ZV9lbmNyeXB0KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLAorICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRvLCBSU0EgKnJzYSwgaW50IHBh ZGRpbmcpCisgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgpICYm ICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkgeworKyAgICAgICAgUlNB ZXJyKFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQsCisrICAgICAgICAgICAgICAgUlNBX1JfT1BF UkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisrICAgICAgICByZXR1cm4gLTE7Cisr ICAgIH0KKysjZW5kaWYKKyAgICAgcmV0dXJuIHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGZsZW4s IGZyb20sIHRvLCByc2EsIHBhZGRpbmcpOworIH0KKyAKKyBpbnQgUlNBX3ByaXZhdGVfZGVjcnlw dChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBjaGFyICp0bywgUlNBICpyc2EsIGludCBwYWRkaW5nKQorIHsKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKysgICAgICAgICYmICEocnNhLT5mbGFncyAm IFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkgeworKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9Q UklWQVRFX0RFQ1JZUFQsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOworKyAgICAgICAgcmV0 dXJuIC0xOworKyAgICB9CisrI2VuZGlmCisgICAgIHJldHVybiByc2EtPm1ldGgtPnJzYV9wcml2 X2RlYyhmbGVuLCBmcm9tLCB0bywgcnNhLCBwYWRkaW5nKTsKKyB9CisgCisgaW50IFJTQV9wdWJs aWNfZGVjcnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQg Y2hhciAqdG8sCisgICAgICAgICAgICAgICAgICAgICAgICBSU0EgKnJzYSwgaW50IHBhZGRpbmcp CisgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgpICYmICEocnNh LT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkgeworKyAgICAgICAgUlNBZXJyKFJT QV9GX1JTQV9QVUJMSUNfREVDUllQVCwKKysgICAgICAgICAgICAgICBSU0FfUl9PUEVSQVRJT05f Tk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgfQor KyNlbmRpZgorICAgICByZXR1cm4gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyhmbGVuLCBmcm9tLCB0 bywgcnNhLCBwYWRkaW5nKTsKKyB9CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5 cHRvL3JzYS9yc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL3JzYS9yc2Ff ZXJyLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcwky MDE4LTA2LTIwIDE2OjQ4OjExLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJl OC9jcnlwdG8vcnNhL3JzYV9lcnIuYwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQxMTYyNDg0OCArMDIw MAorQEAgLTE2LDYgKzE2LDggQEAKKyBzdGF0aWMgY29uc3QgRVJSX1NUUklOR19EQVRBIFJTQV9z dHJfZnVuY3RzW10gPSB7CisgICAgIHtFUlJfUEFDSyhFUlJfTElCX1JTQSwgUlNBX0ZfQ0hFQ0tf UEFERElOR19NRCwgMCksICJjaGVja19wYWRkaW5nX21kIn0sCisgICAgIHtFUlJfUEFDSyhFUlJf TElCX1JTQSwgUlNBX0ZfRU5DT0RFX1BLQ1MxLCAwKSwgImVuY29kZV9wa2NzMSJ9LAorKyAgICB7 RVJSX1BBQ0soRVJSX0xJQl9SU0EsIFJTQV9GX0ZJUFNfUlNBX0JVSUxUSU5fS0VZR0VOLCAwKSwK KysgICAgICJmaXBzX3JzYV9idWlsdGluX2tleWdlbiJ9LAorICAgICB7RVJSX1BBQ0soRVJSX0xJ Ql9SU0EsIFJTQV9GX0lOVF9SU0FfVkVSSUZZLCAwKSwgImludF9yc2FfdmVyaWZ5In0sCisgICAg IHtFUlJfUEFDSyhFUlJfTElCX1JTQSwgUlNBX0ZfT0xEX1JTQV9QUklWX0RFQ09ERSwgMCksCisg ICAgICAib2xkX3JzYV9wcml2X2RlY29kZSJ9LAorQEAgLTMyLDYgKzM0LDkgQEAgc3RhdGljIGNv bnN0IEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1bgorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9S U0EsIFJTQV9GX1JTQV9DSEVDS19LRVlfRVgsIDApLCAiUlNBX2NoZWNrX2tleV9leCJ9LAorICAg ICB7RVJSX1BBQ0soRVJSX0xJQl9SU0EsIFJTQV9GX1JTQV9DTVNfREVDUllQVCwgMCksICJyc2Ff Y21zX2RlY3J5cHQifSwKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJfUlNBLCBSU0FfRl9SU0FfQ01T X1ZFUklGWSwgMCksICJyc2FfY21zX3ZlcmlmeSJ9LAorKyAgICB7RVJSX1BBQ0soRVJSX0xJQl9S U0EsIFJTQV9GX1JTQV9HRU5FUkFURV9LRVlfRVgsIDApLCAiUlNBX2dlbmVyYXRlX2tleV9leCJ9 LAorKyAgICB7RVJSX1BBQ0soRVJSX0xJQl9SU0EsIFJTQV9GX1JTQV9HRU5FUkFURV9NVUxUSV9Q UklNRV9LRVksIDApLAorKyAgICAgIlJTQV9nZW5lcmF0ZV9tdWx0aV9wcmltZV9rZXkifSwKKyAg ICAge0VSUl9QQUNLKEVSUl9MSUJfUlNBLCBSU0FfRl9SU0FfSVRFTV9WRVJJRlksIDApLCAicnNh X2l0ZW1fdmVyaWZ5In0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElCX1JTQSwgUlNBX0ZfUlNBX01F VEhfRFVQLCAwKSwgIlJTQV9tZXRoX2R1cCJ9LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9SU0Es IFJTQV9GX1JTQV9NRVRIX05FVywgMCksICJSU0FfbWV0aF9uZXcifSwKK0BAIC05MCw5ICs5NSwx MyBAQCBzdGF0aWMgY29uc3QgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJfZnVuCisgICAgIHtFUlJf UEFDSyhFUlJfTElCX1JTQSwgUlNBX0ZfUlNBX1BSSU5UX0ZQLCAwKSwgIlJTQV9wcmludF9mcCJ9 LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9SU0EsIFJTQV9GX1JTQV9QUklWX0RFQ09ERSwgMCks ICJyc2FfcHJpdl9kZWNvZGUifSwKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJfUlNBLCBSU0FfRl9S U0FfUFJJVl9FTkNPREUsIDApLCAicnNhX3ByaXZfZW5jb2RlIn0sCisrICAgIHtFUlJfUEFDSyhF UlJfTElCX1JTQSwgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVCwgMCksICJSU0FfcHJpdmF0ZV9k ZWNyeXB0In0sCisrICAgIHtFUlJfUEFDSyhFUlJfTElCX1JTQSwgUlNBX0ZfUlNBX1BSSVZBVEVf RU5DUllQVCwgMCksICJSU0FfcHJpdmF0ZV9lbmNyeXB0In0sCisgICAgIHtFUlJfUEFDSyhFUlJf TElCX1JTQSwgUlNBX0ZfUlNBX1BTU19HRVRfUEFSQU0sIDApLCAicnNhX3Bzc19nZXRfcGFyYW0i fSwKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJfUlNBLCBSU0FfRl9SU0FfUFNTX1RPX0NUWCwgMCks ICJyc2FfcHNzX3RvX2N0eCJ9LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9SU0EsIFJTQV9GX1JT QV9QVUJfREVDT0RFLCAwKSwgInJzYV9wdWJfZGVjb2RlIn0sCisrICAgIHtFUlJfUEFDSyhFUlJf TElCX1JTQSwgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCAwKSwgIlJTQV9wdWJsaWNfZGVjcnlw dCJ9LAorKyAgICB7RVJSX1BBQ0soRVJSX0xJQl9SU0EsIFJTQV9GX1JTQV9QVUJMSUNfRU5DUllQ VCwgMCksICJSU0FfcHVibGljX2VuY3J5cHQifSwKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJfUlNB LCBSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcsIDApLCAiUlNBX3NldHVwX2JsaW5kaW5nIn0sCisg ICAgIHtFUlJfUEFDSyhFUlJfTElCX1JTQSwgUlNBX0ZfUlNBX1NJR04sIDApLCAiUlNBX3NpZ24i fSwKKyAgICAge0VSUl9QQUNLKEVSUl9MSUJfUlNBLCBSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVU X1NUUklORywgMCksCitAQCAtMTAyLDYgKzExMSw4IEBAIHN0YXRpYyBjb25zdCBFUlJfU1RSSU5H X0RBVEEgUlNBX3N0cl9mdW4KKyAgICAgICJSU0FfdmVyaWZ5X0FTTjFfT0NURVRfU1RSSU5HIn0s CisgICAgIHtFUlJfUEFDSyhFUlJfTElCX1JTQSwgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1Nf TUdGMSwgMCksCisgICAgICAiUlNBX3ZlcmlmeV9QS0NTMV9QU1NfbWdmMSJ9LAorKyAgICB7RVJS X1BBQ0soRVJSX0xJQl9SU0EsIFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QsIDApLCAiUlNB X3NldF9kZWZhdWx0X21ldGhvZCJ9LAorKyAgICB7RVJSX1BBQ0soRVJSX0xJQl9SU0EsIFJTQV9G X1JTQV9TRVRfTUVUSE9ELCAwKSwgIlJTQV9zZXRfbWV0aG9kIn0sCisgICAgIHtFUlJfUEFDSyhF UlJfTElCX1JTQSwgUlNBX0ZfU0VUVVBfVEJVRiwgMCksICJzZXR1cF90YnVmIn0sCisgICAgIHsw LCBOVUxMfQorIH07CitAQCAtMTgxLDYgKzE5Miw3IEBAIHN0YXRpYyBjb25zdCBFUlJfU1RSSU5H X0RBVEEgUlNBX3N0cl9yZWEKKyAgICAgIm1wIGV4cG9uZW50IG5vdCBjb25ncnVlbnQgdG8gZCJ9 LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9SU0EsIDAsIFJTQV9SX01QX1JfTk9UX1BSSU1FKSwg Im1wIHIgbm90IHByaW1lIn0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElCX1JTQSwgMCwgUlNBX1Jf Tk9fUFVCTElDX0VYUE9ORU5UKSwgIm5vIHB1YmxpYyBleHBvbmVudCJ9LAorKyAgICB7RVJSX1BB Q0soRVJSX0xJQl9SU0EsIDAsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpLCAibm9uIEZJUFMg cnNhIG1ldGhvZCJ9LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9SU0EsIDAsIFJTQV9SX05VTExf QkVGT1JFX0JMT0NLX01JU1NJTkcpLAorICAgICAibnVsbCBiZWZvcmUgYmxvY2sgbWlzc2luZyJ9 LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9SU0EsIDAsIFJTQV9SX05fRE9FU19OT1RfRVFVQUxf UFJPRFVDVF9PRl9QUklNRVMpLAorQEAgLTE4OSw2ICsyMDEsOCBAQCBzdGF0aWMgY29uc3QgRVJS X1NUUklOR19EQVRBIFJTQV9zdHJfcmVhCisgICAgICJuIGRvZXMgbm90IGVxdWFsIHAgcSJ9LAor ICAgICB7RVJSX1BBQ0soRVJSX0xJQl9SU0EsIDAsIFJTQV9SX09BRVBfREVDT0RJTkdfRVJST1Ip LAorICAgICAib2FlcCBkZWNvZGluZyBlcnJvciJ9LAorKyAgICB7RVJSX1BBQ0soRVJSX0xJQl9S U0EsIDAsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpLAorKyAgICAi b3BlcmF0aW9uIG5vdCBhbGxvd2VkIGluIEZJUFMgbW9kZSJ9LAorICAgICB7RVJSX1BBQ0soRVJS X0xJQl9SU0EsIDAsIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZ UEUpLAorICAgICAib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMga2V5dHlwZSJ9LAor ICAgICB7RVJSX1BBQ0soRVJSX0xJQl9SU0EsIDAsIFJTQV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVE KSwKK0BAIC0yMjQsNiArMjM4LDggQEAgc3RhdGljIGNvbnN0IEVSUl9TVFJJTkdfREFUQSBSU0Ff c3RyX3JlYQorICAgICAidW5zdXBwb3J0ZWQgbWFzayBhbGdvcml0aG0ifSwKKyAgICAge0VSUl9Q QUNLKEVSUl9MSUJfUlNBLCAwLCBSU0FfUl9VTlNVUFBPUlRFRF9NQVNLX1BBUkFNRVRFUiksCisg ICAgICJ1bnN1cHBvcnRlZCBtYXNrIHBhcmFtZXRlciJ9LAorKyAgICB7RVJSX1BBQ0soRVJSX0xJ Ql9SU0EsIDAsIFJTQV9SX1VOU1VQUE9SVEVEX1BBUkFNRVRFUlMpLAorKyAgICAidW5zdXBwb3J0 ZWQgcGFyYW1ldGVycyJ9LAorICAgICB7RVJSX1BBQ0soRVJSX0xJQl9SU0EsIDAsIFJTQV9SX1VO U1VQUE9SVEVEX1NJR05BVFVSRV9UWVBFKSwKKyAgICAgInVuc3VwcG9ydGVkIHNpZ25hdHVyZSB0 eXBlIn0sCisgICAgIHtFUlJfUEFDSyhFUlJfTElCX1JTQSwgMCwgUlNBX1JfVkFMVUVfTUlTU0lO RyksICJ2YWx1ZSBtaXNzaW5nIn0sCitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRv L3JzYS9yc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL3JzYS9yc2FfZ2Vu LmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcwkyMDE4 LTA2LTIwIDE2OjQ4OjExLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9j cnlwdG8vcnNhL3JzYV9nZW4uYwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQxMTYyNDg0OCArMDIwMAor QEAgLTE4LDYgKzE4LDc4IEBACisgI2luY2x1ZGUgImludGVybmFsL2NyeXB0bGliLmgiCisgI2lu Y2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSAicnNhX2xvY2wuaCIKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjIGluY2x1ZGUgImludGVy bmFsL2ZpcHNfaW50LmgiCisrCisraW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKQorK3sKKysg ICAgY29uc3QgdW5zaWduZWQgY2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7 CisrICAgIHVuc2lnbmVkIGNoYXIgKmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKKysgICAg aW50IGxlbiwgcmV0ID0gMDsKKysgICAgRVZQX1BLRVkgKnBrOworKworKyAgICBpZiAoKHBrID0g RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgRVZQ X1BLRVlfc2V0MV9SU0EocGssIHJzYSk7CisrCisrICAgIC8qIFBlcmZvcm0gcGFpcndpc2UgY29u c2lzdGVuY3kgc2lnbmF0dXJlIHRlc3QgKi8KKysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIHRicywgLTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwsIDAsIEVWUF9zaGExKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVW UF9NRF9DVFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCisrICAgICAgICB8fCAhZmlwc19wa2V5X3Np Z25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLCBOVUxMLCAwLCBFVlBfc2hhMSgpLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsIE5V TEwpCisrICAgICAgICB8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLCBO VUxMLCAwLCBFVlBfc2hhMSgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgTlVMTCkpCisrICAgICAgICBnb3RvIGVycjsKKysg ICAgLyogTm93IHBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgZW5jcnlwdC9kZWNyeXB0IHRl c3QgKi8KKysgICAgY3RidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKKysgICAg aWYgKCFjdGJ1ZikKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBsZW4gPQorKyAgICAgICAg UlNBX3B1YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwgdGJzLCBjdGJ1ZiwgcnNhLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJTQV9QS0NTMV9QQURESU5HKTsKKysgICAgaWYgKGxl biA8PSAwKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIC8qIENoZWNrIGNpcGhlcnRleHQgZG9l c24ndCBtYXRjaCBwbGFpbnRleHQgKi8KKysgICAgaWYgKChsZW4gPT0gKHNpemVvZih0YnMpIC0g MSkpICYmICFtZW1jbXAodGJzLCBjdGJ1ZiwgbGVuKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAg ICBwdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOworKworKyAgICBpZiAoIXB0 YnVmKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGxlbiA9IFJTQV9wcml2YXRlX2RlY3J5cHQo bGVuLCBjdGJ1ZiwgcHRidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOworKyAgICBpZiAobGVu ICE9IChzaXplb2YodGJzKSAtIDEpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmIChtZW1j bXAocHRidWYsIHRicywgbGVuKSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICByZXQgPSAx OworKworKyAgICBpZiAoIXB0YnVmKQorKyAgICAgICAgZ290byBlcnI7CisrCisrIGVycjoKKysg ICAgaWYgKHJldCA9PSAwKSB7CisrICAgICAgICBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Cisr ICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSwgRklQU19SX1BBSVJXSVNFX1RF U1RfRkFJTEVEKTsKKysgICAgfQorKworKyAgICBpZiAoY3RidWYpCisrICAgICAgICBPUEVOU1NM X2ZyZWUoY3RidWYpOworKyAgICBpZiAocHRidWYpCisrICAgICAgICBPUEVOU1NMX2ZyZWUocHRi dWYpOworKyAgICBpZiAocGspCisrICAgICAgICBFVlBfUEtFWV9mcmVlKHBrKTsKKysKKysgICAg cmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCBmaXBzX3JzYV9idWlsdGluX2tleWdlbihS U0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYik7CisrI2VuZGlmCisgCisgc3RhdGljIGludCBy c2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIGludCBiaXRzLCBpbnQgcHJpbWVzLCBCSUdOVU0g KmVfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk5fR0VOQ0IgKmNiKTsK K0BAIC0zMSw2ICsxMDMsMTMgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpy c2EsCisgICovCisgaW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBC SUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYikKKyB7CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQ U19NRVRIT0QpCisrICAgICAgICAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19B TExPVykpIHsKKysgICAgICAgIFJTQWVycihSU0FfRl9SU0FfR0VORVJBVEVfS0VZX0VYLCBSU0Ff Ul9OT05fRklQU19SU0FfTUVUSE9EKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrI2Vu ZGlmCisgICAgIGlmIChyc2EtPm1ldGgtPnJzYV9rZXlnZW4gIT0gTlVMTCkKKyAgICAgICAgIHJl dHVybiByc2EtPm1ldGgtPnJzYV9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CisgCitA QCAtNDEsNiArMTIwLDEzIEBAIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQg YmkKKyBpbnQgUlNBX2dlbmVyYXRlX211bHRpX3ByaW1lX2tleShSU0EgKnJzYSwgaW50IGJpdHMs IGludCBwcmltZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklHTlVNICpl X3ZhbHVlLCBCTl9HRU5DQiAqY2IpCisgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYg KEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9E KQorKyAgICAgICAgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSB7 CisrICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX0dFTkVSQVRFX01VTFRJX1BSSU1FX0tFWSwgUlNB X1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyNl bmRpZgorICAgICAvKiBtdWx0aS1wcmltZSBpcyBvbmx5IHN1cHBvcnRlZCB3aXRoIHRoZSBidWls dGluIGtleSBnZW5lcmF0aW9uICovCisgICAgIGlmIChyc2EtPm1ldGgtPnJzYV9tdWx0aV9wcmlt ZV9rZXlnZW4gIT0gTlVMTCkgeworICAgICAgICAgcmV0dXJuIHJzYS0+bWV0aC0+cnNhX211bHRp X3ByaW1lX2tleWdlbihyc2EsIGJpdHMsIHByaW1lcywKK0BAIC01NywxMCArMTQzLDI4NSBAQCBp bnQgUlNBX2dlbmVyYXRlX211bHRpX3ByaW1lX2tleShSU0EgKnJzCisgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKy0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr ICAgIGlmIChGSVBTX21vZGUoKSkgeworKyAgICAgICAgaWYgKHByaW1lcyAhPSAyKSB7CisrICAg ICAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9HRU5FUkFURV9NVUxUSV9QUklNRV9LRVksIFJTQV9S X1VOU1VQUE9SVEVEX1BBUkFNRVRFUlMpOworKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAg ICAgfQorKyAgICAgICAgcmV0dXJuIGZpcHNfcnNhX2J1aWx0aW5fa2V5Z2VuKHJzYSwgYml0cywg ZV92YWx1ZSwgY2IpOworKyAgICB9CisrI2VuZGlmCisgICAgIHJldHVybiByc2FfYnVpbHRpbl9r ZXlnZW4ocnNhLCBiaXRzLCBwcmltZXMsIGVfdmFsdWUsIGNiKTsKKyB9CisgCisrI2lmZGVmIE9Q RU5TU0xfRklQUworK3N0YXRpYyBpbnQgZmlwc19yc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2Es IGludCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBCTl9HRU5DQiAqY2IpCisreworKyAgICBCSUdOVU0gKnIwID0gTlVMTCwgKnIxID0g TlVMTCwgKnIyID0gTlVMTCwgKnIzID0gTlVMTCwgKnRtcDsKKysgICAgQk5fQ1RYICpjdHggPSBO VUxMOworKyAgICBpbnQgb2sgPSAtMTsKKysgICAgaW50IGk7CisrICAgIGludCBuID0gMDsKKysg ICAgaW50IHRlc3QgPSAwOworKyAgICBpbnQgcGJpdHMgPSBiaXRzIC8gMjsKKysgICAgdW5zaWdu ZWQgbG9uZyBlcnJvciA9IDA7CisrCisrICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7 CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JTQV9CVUlMVElOX0tFWUdFTiwgRklQU19S X0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrCisr ICAgIGlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTCisrICAgICAg ICB8fCAoZ2V0ZW52KCJPUEVOU1NMX0VORk9SQ0VfTU9EVUxVU19CSVRTIikgJiYgYml0cyA8IDIw NDgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JTQV9CVUlMVElOX0tFWUdFTiwg RklQU19SX0tFWV9UT09fU0hPUlQpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAg aWYgKChwYml0cyAmIDB4RkYpICE9IDApIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf UlNBX0JVSUxUSU5fS0VZR0VOLCBGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKTsKKysgICAgICAg IHJldHVybiAwOworKyAgICB9CisrCisrICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKKysgICAgaWYg KGN0eCA9PSBOVUxMKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIEJOX0NUWF9zdGFydChjdHgp OworKyAgICByMCA9IEJOX0NUWF9nZXQoY3R4KTsKKysgICAgcjEgPSBCTl9DVFhfZ2V0KGN0eCk7 CisrICAgIHIyID0gQk5fQ1RYX2dldChjdHgpOworKyAgICByMyA9IEJOX0NUWF9nZXQoY3R4KTsK KysKKysgICAgaWYgKHIzID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgLyog V2UgbmVlZCB0aGUgUlNBIGNvbXBvbmVudHMgbm9uLU5VTEwgKi8KKysgICAgaWYgKCFyc2EtPm4g JiYgKChyc2EtPm4gPSBCTl9uZXcoKSkgPT0gTlVMTCkpCisrICAgICAgICBnb3RvIGVycjsKKysg ICAgaWYgKCFyc2EtPmQgJiYgKChyc2EtPmQgPSBCTl9zZWN1cmVfbmV3KCkpID09IE5VTEwpKQor KyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghcnNhLT5lICYmICgocnNhLT5lID0gQk5fbmV3 KCkpID09IE5VTEwpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghcnNhLT5wICYmICgo cnNhLT5wID0gQk5fc2VjdXJlX25ldygpKSA9PSBOVUxMKSkKKysgICAgICAgIGdvdG8gZXJyOwor KyAgICBpZiAoIXJzYS0+cSAmJiAoKHJzYS0+cSA9IEJOX3NlY3VyZV9uZXcoKSkgPT0gTlVMTCkp CisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFyc2EtPmRtcDEgJiYgKChyc2EtPmRtcDEg PSBCTl9zZWN1cmVfbmV3KCkpID09IE5VTEwpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlm ICghcnNhLT5kbXExICYmICgocnNhLT5kbXExID0gQk5fc2VjdXJlX25ldygpKSA9PSBOVUxMKSkK KysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIXJzYS0+aXFtcCAmJiAoKHJzYS0+aXFtcCA9 IEJOX3NlY3VyZV9uZXcoKSkgPT0gTlVMTCkpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAg aWYgKCFCTl9zZXRfd29yZChyMCwgUlNBX0Y0KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBp ZiAoQk5fY21wKGVfdmFsdWUsIHIwKSA8IDAgfHwgQk5fbnVtX2JpdHMoZV92YWx1ZSkgPiAyNTYp IHsKKysgICAgICAgIG9rID0gMDsgICAgICAgICAgICAgICAgIC8qIHdlIHNldCBvdXIgb3duIGVy ciAqLworKyAgICAgICAgUlNBZXJyKFJTQV9GX0ZJUFNfUlNBX0JVSUxUSU5fS0VZR0VOLCBSU0Ff Ul9CQURfRV9WQUxVRSk7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICAvKiBw cmVwYXJlIGFwcHJveGltYXRlIG1pbmltdW0gcCBhbmQgcSAqLworKyAgICBpZiAoIUJOX3NldF93 b3JkKHIwLCAweEI1MDRGMzM0KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIUJOX2xz aGlmdChyMCwgcjAsIHBiaXRzIC0gMzIpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIC8q IHByZXBhcmUgbWluaW11bSBwIGFuZCBxIGRpZmZlcmVuY2UgKi8KKysgICAgaWYgKCFCTl9vbmUo cjMpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghQk5fbHNoaWZ0KHIzLCByMywgcGJp dHMgLSAxMDApKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIEJOX2NvcHkocnNhLT5lLCBl X3ZhbHVlKTsKKysKKysgICAgaWYgKCFCTl9pc196ZXJvKHJzYS0+cCkgJiYgIUJOX2lzX3plcm8o cnNhLT5xKSkKKysgICAgICAgIHRlc3QgPSAxOworKworKyAgICBCTl9zZXRfZmxhZ3MocjAsIEJO X0ZMR19DT05TVFRJTUUpOworKyAgICBCTl9zZXRfZmxhZ3MocjEsIEJOX0ZMR19DT05TVFRJTUUp OworKyAgICBCTl9zZXRfZmxhZ3MocjIsIEJOX0ZMR19DT05TVFRJTUUpOworKyAgICBCTl9zZXRf ZmxhZ3MocnNhLT5wLCBCTl9GTEdfQ09OU1RUSU1FKTsKKysgICAgQk5fc2V0X2ZsYWdzKHJzYS0+ cSwgQk5fRkxHX0NPTlNUVElNRSk7CisrCisrIHJldHJ5OgorKyAgICAvKiBnZW5lcmF0ZSBwIGFu ZCBxICovCisrICAgIGZvciAoaSA9IDA7IGkgPCA1ICogcGJpdHM7IGkrKykgeworKyBwbG9vcDoK KysgICAgICAgIGlmICghdGVzdCkKKysgICAgICAgICAgICBpZiAoIUJOX3JhbmQocnNhLT5wLCBw Yml0cywgMCwgMSkpCisrICAgICAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgaWYgKEJO X2NtcChyc2EtPnAsIHIwKSA8IDApIHsKKysgICAgICAgICAgICBpZiAodGVzdCkKKysgICAgICAg ICAgICAgICAgZ290byBlcnI7CisrICAgICAgICAgICAgZ290byBwbG9vcDsKKysgICAgICAgIH0K KysKKysgICAgICAgIGlmICghQk5fc3ViKHIyLCByc2EtPnAsIEJOX3ZhbHVlX29uZSgpKSkKKysg ICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIEVSUl9zZXRfbWFyaygpOworKyAgICAgICAg aWYgKEJOX21vZF9pbnZlcnNlKHIxLCByMiwgcnNhLT5lLCBjdHgpICE9IE5VTEwpIHsKKysgICAg ICAgICAgICAvKiBHQ0QgPT0gMSBzaW5jZSBpbnZlcnNlIGV4aXN0cyAqLworKyAgICAgICAgICAg IGludCByOworKyAgICAgICAgICAgIHIgPSBCTl9pc19wcmltZV9mYXN0dGVzdF9leChyc2EtPnAs IHBiaXRzID4gMTAyNCA/IDQgOiA1LCBjdHgsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNiKTsKKysgICAgICAgICAgICBpZiAociA9PSAtMSB8fCAodGVzdCAm JiByIDw9IDApKQorKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgICAgICBpZiAo ciA+IDApCisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfSBlbHNlIHsKKysgICAg ICAgICAgICBlcnJvciA9IEVSUl9wZWVrX2xhc3RfZXJyb3IoKTsKKysgICAgICAgICAgICBpZiAo RVJSX0dFVF9MSUIoZXJyb3IpID09IEVSUl9MSUJfQk4KKysgICAgICAgICAgICAgICAgJiYgRVJS X0dFVF9SRUFTT04oZXJyb3IpID09IEJOX1JfTk9fSU5WRVJTRSkgeworKyAgICAgICAgICAgICAg ICAvKiBHQ0QgIT0gMSAqLworKyAgICAgICAgICAgICAgICBFUlJfcG9wX3RvX21hcmsoKTsKKysg ICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAg ICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAoIUJOX0dFTkNCX2NhbGwoY2IsIDIsIG4r KykpCisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgaWYgKCFCTl9HRU5D Ql9jYWxsKGNiLCAzLCAwKSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBpZiAoaSA+PSA1 ICogcGJpdHMpCisrICAgICAgICAvKiBwcmltZSBub3QgZm91bmQgKi8KKysgICAgICAgIGdvdG8g ZXJyOworKworKyAgICBmb3IgKGkgPSAwOyBpIDwgNSAqIHBiaXRzOyBpKyspIHsKKysgcWxvb3A6 CisrICAgICAgICBpZiAoIXRlc3QpCisrICAgICAgICAgICAgaWYgKCFCTl9yYW5kKHJzYS0+cSwg cGJpdHMsIDAsIDEpKQorKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIGlmIChC Tl9jbXAocnNhLT5xLCByMCkgPCAwKSB7CisrICAgICAgICAgICAgaWYgKHRlc3QpCisrICAgICAg ICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgICAgIGdvdG8gcWxvb3A7CisrICAgICAgICB9 CisrICAgICAgICBpZiAoIUJOX3N1YihyMiwgcnNhLT5xLCByc2EtPnApKQorKyAgICAgICAgICAg IGdvdG8gZXJyOworKyAgICAgICAgaWYgKEJOX3VjbXAocjIsIHIzKSA8PSAwKSB7CisrICAgICAg ICAgICAgaWYgKHRlc3QpCisrICAgICAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgICAg IGdvdG8gcWxvb3A7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIUJOX3N1YihyMiwgcnNh LT5xLCBCTl92YWx1ZV9vbmUoKSkpCisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAgICBF UlJfc2V0X21hcmsoKTsKKysgICAgICAgIGlmIChCTl9tb2RfaW52ZXJzZShyMSwgcjIsIHJzYS0+ ZSwgY3R4KSAhPSBOVUxMKSB7CisrICAgICAgICAgICAgLyogR0NEID09IDEgc2luY2UgaW52ZXJz ZSBleGlzdHMgKi8KKysgICAgICAgICAgICBpbnQgcjsKKysgICAgICAgICAgICByID0gQk5faXNf cHJpbWVfZmFzdHRlc3RfZXgocnNhLT5xLCBwYml0cyA+IDEwMjQgPyA0IDogNSwgY3R4LCAwLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYik7CisrICAgICAgICAg ICAgaWYgKHIgPT0gLTEgfHwgKHRlc3QgJiYgciA8PSAwKSkKKysgICAgICAgICAgICAgICAgZ290 byBlcnI7CisrICAgICAgICAgICAgaWYgKHIgPiAwKQorKyAgICAgICAgICAgICAgICBicmVhazsK KysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgZXJyb3IgPSBFUlJfcGVla19sYXN0X2Vy cm9yKCk7CisrICAgICAgICAgICAgaWYgKEVSUl9HRVRfTElCKGVycm9yKSA9PSBFUlJfTElCX0JO CisrICAgICAgICAgICAgICAgICYmIEVSUl9HRVRfUkVBU09OKGVycm9yKSA9PSBCTl9SX05PX0lO VkVSU0UpIHsKKysgICAgICAgICAgICAgICAgLyogR0NEICE9IDEgKi8KKysgICAgICAgICAgICAg ICAgRVJSX3BvcF90b19tYXJrKCk7CisrICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAg ICAgICAgZ290byBlcnI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYg KCFCTl9HRU5DQl9jYWxsKGNiLCAyLCBuKyspKQorKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAg ICB9CisrCisrICAgIGlmICghQk5fR0VOQ0JfY2FsbChjYiwgMywgMSkpCisrICAgICAgICBnb3Rv IGVycjsKKysKKysgICAgaWYgKGkgPj0gNSAqIHBiaXRzKQorKyAgICAgICAgLyogcHJpbWUgbm90 IGZvdW5kICovCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgaWYgKHRlc3QpIHsKKysgICAg ICAgIC8qIGRvIG5vdCB0cnkgdG8gY2FsY3VsYXRlIHRoZSByZW1haW5pbmcga2V5IHZhbHVlcyAq LworKyAgICAgICAgQk5fY2xlYXIocnNhLT5uKTsKKysgICAgICAgIG9rID0gMTsKKysgICAgICAg IGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIGlmIChCTl9jbXAocnNhLT5wLCByc2EtPnEpIDwg MCkgeworKyAgICAgICAgdG1wID0gcnNhLT5wOworKyAgICAgICAgcnNhLT5wID0gcnNhLT5xOwor KyAgICAgICAgcnNhLT5xID0gdG1wOworKyAgICB9CisrCisrICAgIC8qIGNhbGN1bGF0ZSBuICov CisrICAgIGlmICghQk5fbXVsKHJzYS0+biwgcnNhLT5wLCByc2EtPnEsIGN0eCkpCisrICAgICAg ICBnb3RvIGVycjsKKysKKysgICAgLyogY2FsY3VsYXRlIGQgKi8KKysgICAgaWYgKCFCTl9zdWIo cjEsIHJzYS0+cCwgQk5fdmFsdWVfb25lKCkpKQorKyAgICAgICAgZ290byBlcnI7ICAgICAgICAg ICAgICAgLyogcC0xICovCisrICAgIGlmICghQk5fc3ViKHIyLCByc2EtPnEsIEJOX3ZhbHVlX29u ZSgpKSkKKysgICAgICAgIGdvdG8gZXJyOyAgICAgICAgICAgICAgIC8qIHEtMSAqLworKworKyAg ICAvKiBub3RlIHRoYXQgY29tcHV0aW5nIGdjZCBpcyBub3Qgc2FmZSB0byB0aW1pbmcgYXR0YWNr cyAqLworKyAgICBpZiAoIUJOX2djZChyMCwgcjEsIHIyLCBjdHgpKQorKyAgICAgICAgZ290byBl cnI7CisrCisrICAgIHsKKysgICAgICAgIGlmICghQk5fZGl2KHIwLCBOVUxMLCByMSwgcjAsIGN0 eCkpCisrICAgICAgICAgICAgZ290byBlcnI7CisrCisrICAgICAgICBpZiAoIUJOX211bChyMCwg cjAsIHIyLCBjdHgpKSAvKiBsY20ocC0xLCBxLTEpICovCisrICAgICAgICAgICAgZ290byBlcnI7 CisrCisrICAgICAgICBpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+ZCwgcnNhLT5lLCByMCwgY3R4 KSkgLyogZCAqLworKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIGlmIChC Tl9udW1fYml0cyhyc2EtPmQpIDwgcGJpdHMpCisrICAgICAgICBnb3RvIHJldHJ5OyAgICAgICAg ICAgICAvKiBkIGlzIHRvbyBzbWFsbCAqLworKworKyAgICB7CisrICAgICAgICBCSUdOVU0gKmQg PSBCTl9uZXcoKTsKKysKKysgICAgICAgIGlmIChkID09IE5VTEwpCisrICAgICAgICAgICAgZ290 byBlcnI7CisrICAgICAgICBCTl93aXRoX2ZsYWdzKGQsIHJzYS0+ZCwgQk5fRkxHX0NPTlNUVElN RSk7CisrCisrICAgICAgICBpZiAoLyogY2FsY3VsYXRlIGQgbW9kIChwLTEpICovCisrICAgICAg ICAgICAgIUJOX21vZChyc2EtPmRtcDEsIGQsIHIxLCBjdHgpCisrICAgICAgICAgICAgLyogY2Fs Y3VsYXRlIGQgbW9kIChxLTEpICovCisrICAgICAgICAgICAgfHwgIUJOX21vZChyc2EtPmRtcTEs IGQsIHIyLCBjdHgpKSB7CisrICAgICAgICAgICAgQk5fZnJlZShkKTsKKysgICAgICAgICAgICBn b3RvIGVycjsKKysgICAgICAgIH0KKysgICAgICAgIC8qIFdlIE1VU1QgZnJlZSBkIGJlZm9yZSBh bnkgZnVydGhlciB1c2Ugb2YgcnNhLT5kICovCisrICAgICAgICBCTl9mcmVlKGQpOworKyAgICB9 CisrCisrICAgIC8qIGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAgKi8KKysgICAgaWYgKCFC Tl9tb2RfaW52ZXJzZShyc2EtPmlxbXAsIHJzYS0+cSwgcnNhLT5wLCBjdHgpKQorKyAgICAgICAg Z290byBlcnI7CisrCisrICAgIGlmICghZmlwc19jaGVja19yc2EocnNhKSkKKysgICAgICAgIGdv dG8gZXJyOworKworKyAgICBvayA9IDE7CisrIGVycjoKKysgICAgaWYgKG9rID09IC0xKSB7Cisr ICAgICAgICBSU0FlcnIoUlNBX0ZfRklQU19SU0FfQlVJTFRJTl9LRVlHRU4sIEVSUl9MSUJfQk4p OworKyAgICAgICAgb2sgPSAwOworKyAgICB9CisrICAgIGlmIChjdHggIT0gTlVMTCkgeworKyAg ICAgICAgQk5fQ1RYX2VuZChjdHgpOworKyAgICAgICAgQk5fQ1RYX2ZyZWUoY3R4KTsKKysgICAg fQorKworKyAgICByZXR1cm4gb2s7CisrfQorKyNlbmRpZgorKworIHN0YXRpYyBpbnQgcnNhX2J1 aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBpbnQgYml0cywgaW50IHByaW1lcywgQklHTlVNICplX3Zh bHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYikKKyB7Citk aWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcyBvcGVu c3NsLTEuMS4xLXByZTgvY3J5cHRvL3JzYS9yc2FfbGliLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXBy ZTgvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcwkyMDE4LTA2LTIwIDE2OjQ4OjExLjAwMDAwMDAw MCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vcnNhL3JzYV9saWIuYwkyMDE4 LTA3LTI1IDE3OjI2OjU4LjQxMTYyNDg0OCArMDIwMAorQEAgLTM0LDYgKzM0LDEyIEBAIGludCBS U0Ffc2V0X21ldGhvZChSU0EgKnJzYSwgY29uc3QgUlNBX00KKyAgICAgICogdG8gZGVhbCB3aXRo IHdoaWNoIEVOR0lORSBpdCBjb21lcyBmcm9tLgorICAgICAgKi8KKyAgICAgY29uc3QgUlNBX01F VEhPRCAqbXRtcDsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX21vZGUoKSAm JiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKSB7CisrICAgICAgICBSU0Fl cnIoUlNBX0ZfUlNBX1NFVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOworKyAg ICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysjZW5kaWYKKyAgICAgbXRtcCA9IHJzYS0+bWV0aDsK KyAgICAgaWYgKG10bXAtPmZpbmlzaCkKKyAgICAgICAgIG10bXAtPmZpbmlzaChyc2EpOworQEAg LTY2LDcgKzcyLDYgQEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKKyAKKyAg ICAgcmV0LT5tZXRoID0gUlNBX2dldF9kZWZhdWx0X21ldGhvZCgpOworICNpZm5kZWYgT1BFTlNT TF9OT19FTkdJTkUKKy0gICAgcmV0LT5mbGFncyA9IHJldC0+bWV0aC0+ZmxhZ3MgJiB+UlNBX0ZM QUdfTk9OX0ZJUFNfQUxMT1c7CisgICAgIGlmIChlbmdpbmUpIHsKKyAgICAgICAgIGlmICghRU5H SU5FX2luaXQoZW5naW5lKSkgeworICAgICAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfTkVXX01F VEhPRCwgRVJSX1JfRU5HSU5FX0xJQik7CitAQCAtODQsOCArODksMTkgQEAgUlNBICpSU0FfbmV3 X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKKyAgICAgICAgIH0KKyAgICAgfQorICNlbmRpZgorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgpICYmICEocmV0LT5tZXRoLT5m bGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkgeworKyAgICAgICAgUlNBZXJyKFJTQV9GX1JT QV9ORVdfTUVUSE9ELCBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsKKysjIGlmbmRlZiBPUEVO U1NMX05PX0VOR0lORQorKyAgICAgICAgaWYgKHJldC0+ZW5naW5lKQorKyAgICAgICAgICAgIEVO R0lORV9maW5pc2gocmV0LT5lbmdpbmUpOworKyMgZW5kaWYKKysgICAgICAgIE9QRU5TU0xfZnJl ZShyZXQpOworKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysjZW5kaWYKKyAKKy0gICAg cmV0LT5mbGFncyA9IHJldC0+bWV0aC0+ZmxhZ3MgJiB+UlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1c7 CisrICAgIHJldC0+ZmxhZ3MgPSByZXQtPm1ldGgtPmZsYWdzOworICAgICBpZiAoIUNSWVBUT19u ZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfUlNBLCByZXQsICZyZXQtPmV4X2RhdGEpKSB7Cisg ICAgICAgICBnb3RvIGVycjsKKyAgICAgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2Ny eXB0by9yc2EvcnNhX29zc2wuYy5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vcnNhL3Jz YV9vc3NsLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL3JzYS9yc2Ffb3NzbC5jLmZp cHMJMjAxOC0wNi0yMCAxNjo0ODoxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4x LXByZTgvY3J5cHRvL3JzYS9yc2Ffb3NzbC5jCTIwMTgtMDctMjUgMTc6MjY6NTguNDExNjI0ODQ4 ICswMjAwCitAQCAtMTEsNiArMTEsMTAgQEAKKyAjaW5jbHVkZSAiaW50ZXJuYWwvYm5faW50Lmgi CisgI2luY2x1ZGUgInJzYV9sb2NsLmgiCisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgc3RhdGljIGludCByc2Ffb3NzbF9w dWJsaWNfZW5jcnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdG8sIFJTQSAqcnNh LCBpbnQgcGFkZGluZyk7Cisgc3RhdGljIGludCByc2Ffb3NzbF9wcml2YXRlX2VuY3J5cHQoaW50 IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sCitAQCAtNDYsNiArNTAsMTIgQEAgc3Rh dGljIGNvbnN0IFJTQV9NRVRIT0QgKmRlZmF1bHRfUlNBX21ldAorIAorIHZvaWQgUlNBX3NldF9k ZWZhdWx0X21ldGhvZChjb25zdCBSU0FfTUVUSE9EICptZXRoKQorIHsKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdf RklQU19NRVRIT0QpKSB7CisrICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01F VEhPRCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisrICAgICAgICByZXR1cm47CisrICAg IH0KKysjZW5kaWYKKyAgICAgZGVmYXVsdF9SU0FfbWV0aCA9IG1ldGg7CisgfQorIAorQEAgLTcy LDYgKzgyLDIyIEBAIHN0YXRpYyBpbnQgcnNhX29zc2xfcHVibGljX2VuY3J5cHQoaW50IGYKKyAg ICAgdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKyAgICAgQk5fQ1RYICpjdHggPSBOVUxMOwor IAorKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX21vZGUoKSkgeworKyAgICAg ICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJ UFNfRl9SU0FfT1NTTF9QVUJMSUNfRU5DUllQVCwKKysgICAgICAgICAgICAgICAgICAgIEZJUFNf Ul9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAg ICB9CisrCisrICAgICAgICBpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpCisrICAgICAgICAgICAgJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9G SVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7CisrICAgICAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9P U1NMX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKyAgICAgICAg ICAgIHJldHVybiAtMTsKKysgICAgICAgIH0KKysgICAgfQorKyMgZW5kaWYKKysKKyAgICAgaWYg KEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTKSB7Cisg ICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX09TU0xfUFVCTElDX0VOQ1JZUFQsIFJTQV9SX01PRFVM VVNfVE9PX0xBUkdFKTsKKyAgICAgICAgIHJldHVybiAtMTsKK0BAIC0yNTEsNiArMjc3LDIyIEBA IHN0YXRpYyBpbnQgcnNhX29zc2xfcHJpdmF0ZV9lbmNyeXB0KGludAorICAgICBCSUdOVU0gKnVu YmxpbmQgPSBOVUxMOworICAgICBCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOworIAorKyMg aWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX21vZGUoKSkgeworKyAgICAgICAgaWYg KEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9S U0FfT1NTTF9QUklWQVRFX0VOQ1JZUFQsCisrICAgICAgICAgICAgICAgICAgICBGSVBTX1JfRklQ U19TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgIH0K KysKKysgICAgICAgIGlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykK KysgICAgICAgICAgICAmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUykpIHsKKysgICAgICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX09TU0xf UFJJVkFURV9FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKyAgICAgICAgICAg IHJldHVybiAtMTsKKysgICAgICAgIH0KKysgICAgfQorKyMgZW5kaWYKKysKKyAgICAgaWYgKChj dHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCisgICAgICAgICBnb3RvIGVycjsKKyAgICAgQk5f Q1RYX3N0YXJ0KGN0eCk7CitAQCAtMzg4LDYgKzQzMCwyMiBAQCBzdGF0aWMgaW50IHJzYV9vc3Ns X3ByaXZhdGVfZGVjcnlwdChpbnQKKyAgICAgQklHTlVNICp1bmJsaW5kID0gTlVMTDsKKyAgICAg Qk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKKyAKKysjIGlmZGVmIE9QRU5TU0xfRklQUwor KyAgICBpZiAoRklQU19tb2RlKCkpIHsKKysgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxl ZCgpKSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX09TU0xfUFJJVkFURV9ERUNS WVBULAorKyAgICAgICAgICAgICAgICAgICAgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsK KysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIShy c2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrICAgICAgICAgICAgJiYgKEJO X251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7 CisrICAgICAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9PU1NMX1BSSVZBVEVfREVDUllQVCwgUlNB X1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAg ICB9CisrICAgIH0KKysjIGVuZGlmCisrCisgICAgIGlmICgoY3R4ID0gQk5fQ1RYX25ldygpKSA9 PSBOVUxMKQorICAgICAgICAgZ290byBlcnI7CisgICAgIEJOX0NUWF9zdGFydChjdHgpOworQEAg LTUxMyw2ICs1NzEsMjIgQEAgc3RhdGljIGludCByc2Ffb3NzbF9wdWJsaWNfZGVjcnlwdChpbnQg ZgorICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOworICAgICBCTl9DVFggKmN0eCA9IE5V TEw7CisgCisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgpKSB7Cisr ICAgICAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgICAgIEZJUFNl cnIoRklQU19GX1JTQV9PU1NMX1BVQkxJQ19ERUNSWVBULAorKyAgICAgICAgICAgICAgICAgICAg RklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgICAgICBnb3RvIGVycjsKKysg ICAgICAgIH0KKysKKysgICAgICAgIGlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQ U19BTExPVykKKysgICAgICAgICAgICAmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xf UlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKKysgICAgICAgICAgICBSU0FlcnIoUlNBX0Zf UlNBX09TU0xfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrICAg ICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICB9CisrIyBlbmRpZgorKworICAg ICBpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMp IHsKKyAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfT1NTTF9QVUJMSUNfREVDUllQVCwgUlNBX1Jf TU9EVUxVU19UT09fTEFSR0UpOworICAgICAgICAgcmV0dXJuIC0xOworZGlmZiAtdXAgb3BlbnNz bC0xLjEuMS1wcmU4L2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4xLjEtcHJl OC9jcnlwdG8vcnNhL3JzYV9zaWduLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL3Jz YS9yc2Ffc2lnbi5jLmZpcHMJMjAxOC0wNi0yMCAxNjo0ODoxMS4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCTIwMTgtMDctMjUgMTc6 MjY6NTguNDExNjI0ODQ4ICswMjAwCitAQCAtNzMsNiArNzMsMTMgQEAgaW50IFJTQV9zaWduKGlu dCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaAorICAgICB1bnNpZ25lZCBjaGFyICp0bXBzID0gTlVM TDsKKyAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5jb2RlZCA9IE5VTEw7CisgCisrI2lmZGVm IE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdz ICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCisrICAgICAgICAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0Ff RkxBR19OT05fRklQU19BTExPVykpIHsKKysgICAgICAgIFJTQWVycihSU0FfRl9SU0FfU0lHTiwg UlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQor KyNlbmRpZgorICAgICBpZiAocnNhLT5tZXRoLT5yc2Ffc2lnbikgeworICAgICAgICAgcmV0dXJu IHJzYS0+bWV0aC0+cnNhX3NpZ24odHlwZSwgbSwgbV9sZW4sIHNpZ3JldCwgc2lnbGVuLCByc2Ep OworICAgICB9CitAQCAtMTAwLDggKzEwNyw5IEBAIGludCBSU0Ffc2lnbihpbnQgdHlwZSwgY29u c3QgdW5zaWduZWQgY2gKKyAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfU0lHTiwgUlNBX1JfRElH RVNUX1RPT19CSUdfRk9SX1JTQV9LRVkpOworICAgICAgICAgZ290byBlcnI7CisgICAgIH0KKy0g ICAgZW5jcnlwdF9sZW4gPSBSU0FfcHJpdmF0ZV9lbmNyeXB0KGVuY29kZWRfbGVuLCBlbmNvZGVk LCBzaWdyZXQsIHJzYSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJT QV9QS0NTMV9QQURESU5HKTsKKysgICAgLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGly ZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLworKyAgICBlbmNyeXB0X2xlbiA9IHJzYS0+ bWV0aC0+cnNhX3ByaXZfZW5jID8gcnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMoZW5jb2RlZF9sZW4s IGVuY29kZWQsIHNpZ3JldCwgcnNhLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNBX1BLQ1MxX1BBRERJTkcpIDog MDsKKyAgICAgaWYgKGVuY3J5cHRfbGVuIDw9IDApCisgICAgICAgICBnb3RvIGVycjsKKyAKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcyBvcGVu c3NsLTEuMS4xLXByZTgvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCistLS0gb3BlbnNzbC0xLjEuMS1w cmU4L2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTcuODg1NjEy MjQyICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9zaGEvc2hhX2xvY2wuaAky MDE4LTA3LTI1IDE3OjI2OjU4LjQxMjYyNDg3MiArMDIwMAorQEAgLTUyLDYgKzUyLDkgQEAgdm9p ZCBzaGExX2Jsb2NrX2RhdGFfb3JkZXIoU0hBX0NUWCAqYywgYworIAorIGludCBIQVNIX0lOSVQo U0hBX0NUWCAqYykKKyB7CisrI2lmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQorKyAgICBGSVBTX3Nl bGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgICAgIG1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsK KyAgICAgYy0+aDAgPSBJTklUX0RBVEFfaDA7CisgICAgIGMtPmgxID0gSU5JVF9EQVRBX2gxOwor ZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcyBvcGVu c3NsLTEuMS4xLXByZTgvY3J5cHRvL3NoYS9zaGEyNTYuYworLS0tIG9wZW5zc2wtMS4xLjEtcHJl OC9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMJMjAxOC0wNi0yMCAxNjo0ODoxMS4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL3NoYS9zaGEyNTYuYwkyMDE4LTA3 LTI1IDE3OjI2OjU4LjQxMjYyNDg3MiArMDIwMAorQEAgLTE4LDYgKzE4LDkgQEAKKyAKKyBpbnQg U0hBMjI0X0luaXQoU0hBMjU2X0NUWCAqYykKKyB7CisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysg ICAgRklQU19zZWxmdGVzdF9jaGVjaygpOworKyMgZW5kaWYKKyAgICAgbWVtc2V0KGMsIDAsIHNp emVvZigqYykpOworICAgICBjLT5oWzBdID0gMHhjMTA1OWVkOFVMOworICAgICBjLT5oWzFdID0g MHgzNjdjZDUwN1VMOworQEAgLTMzLDYgKzM2LDkgQEAgaW50IFNIQTIyNF9Jbml0KFNIQTI1Nl9D VFggKmMpCisgCisgaW50IFNIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmMpCisgeworKyMgaWZkZWYg T1BFTlNTTF9GSVBTCisrICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjIGVuZGlmCisgICAg IG1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKyAgICAgYy0+aFswXSA9IDB4NmEwOWU2NjdVTDsK KyAgICAgYy0+aFsxXSA9IDB4YmI2N2FlODVVTDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJl OC9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9zaGEv c2hhNTEyLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBz CTIwMTgtMDYtMjAgMTY6NDg6MTEuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1w cmU4L2NyeXB0by9zaGEvc2hhNTEyLmMJMjAxOC0wNy0yNSAxNzoyNjo1OC40MTI2MjQ4NzIgKzAy MDAKK0BAIC05OCw2ICs5OCw5IEBAIGludCBzaGE1MTJfMjU2X2luaXQoU0hBNTEyX0NUWCAqYykK KyAKKyBpbnQgU0hBMzg0X0luaXQoU0hBNTEyX0NUWCAqYykKKyB7CisrIyBpZmRlZiBPUEVOU1NM X0ZJUFMKKysgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOworKyMgZW5kaWYKKyAgICAgYy0+aFsw XSA9IFU2NCgweGNiYmI5ZDVkYzEwNTllZDgpOworICAgICBjLT5oWzFdID0gVTY0KDB4NjI5YTI5 MmEzNjdjZDUwNyk7CisgICAgIGMtPmhbMl0gPSBVNjQoMHg5MTU5MDE1YTMwNzBkZDE3KTsKK0BA IC0xMTYsNiArMTE5LDkgQEAgaW50IFNIQTM4NF9Jbml0KFNIQTUxMl9DVFggKmMpCisgCisgaW50 IFNIQTUxMl9Jbml0KFNIQTUxMl9DVFggKmMpCisgeworKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisr ICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjIGVuZGlmCisgICAgIGMtPmhbMF0gPSBVNjQo MHg2YTA5ZTY2N2YzYmNjOTA4KTsKKyAgICAgYy0+aFsxXSA9IFU2NCgweGJiNjdhZTg1ODRjYWE3 M2IpOworICAgICBjLT5oWzJdID0gVTY0KDB4M2M2ZWYzNzJmZTk0ZjgyYik7CitkaWZmIC11cCBv cGVuc3NsLTEuMS4xLXByZTgvZG9jL21hbjMvRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnMucG9kLmZp cHMgb3BlbnNzbC0xLjEuMS1wcmU4L2RvYy9tYW4zL0RTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzLnBv ZAorLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9kb2MvbWFuMy9EU0FfZ2VuZXJhdGVfcGFyYW1ldGVy cy5wb2QuZmlwcwkyMDE4LTA2LTIwIDE2OjQ4OjEyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4xLjEtcHJlOC9kb2MvbWFuMy9EU0FfZ2VuZXJhdGVfcGFyYW1ldGVycy5wb2QJMjAxOC0w Ny0yNSAxNzoyNjo1OC40MTI2MjQ4NzIgKzAyMDAKK0BAIC0zMCw4ICszMCwxMCBAQCBCPGJpdHM+ IGlzIHRoZSBsZW5ndGggb2YgdGhlIHByaW1lIHAgdG8KKyBGb3IgbGVuZ3RocyB1bmRlciAyMDQ4 IGJpdHMsIHRoZSBsZW5ndGggb2YgcSBpcyAxNjAgYml0czsgZm9yIGxlbmd0aHMKKyBncmVhdGVy IHRoYW4gb3IgZXF1YWwgdG8gMjA0OCBiaXRzLCB0aGUgbGVuZ3RoIG9mIHEgaXMgc2V0IHRvIDI1 NiBiaXRzLgorIAorLUlmIEI8c2VlZD4gaXMgTlVMTCwgdGhlIHByaW1lcyB3aWxsIGJlIGdlbmVy YXRlZCBhdCByYW5kb20uCistSWYgQjxzZWVkX2xlbj4gaXMgbGVzcyB0aGFuIHRoZSBsZW5ndGgg b2YgcSwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuCisrSWYgQjxzZWVkPiBpcyBOVUxMLCBvciBpdCBk b2VzIG5vdCBnZW5lcmF0ZSBwcmltZXMsIHRoZSBwcmltZXMgd2lsbCBiZQorK2dlbmVyYXRlZCBh dCByYW5kb20uCisrSWYgQjxzZWVkX2xlbj4gaXMgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgcSwg YW4gZXJyb3IgaXMgcmV0dXJuZWQKKytpZiBvbGQgRFNBIHBhcmFtZXRlciBnZW5lcmF0aW9uIG1l dGhvZCBpcyB1c2VkIGFzIGEgYmFja2VuZC4KKyAKKyBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19l eCgpIHBsYWNlcyB0aGUgaXRlcmF0aW9uIGNvdW50IGluCisgKkI8Y291bnRlcl9yZXQ+IGFuZCBh IGNvdW50ZXIgdXNlZCBmb3IgZmluZGluZyBhIGdlbmVyYXRvciBpbgorZGlmZiAtdXAgb3BlbnNz bC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaC5maXBzIG9wZW5zc2wtMS4xLjEt cHJlOC9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oLmZpcHMJMjAxOC0wNi0yMCAxNjo0ODoxMy4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCTIw MTgtMDctMjUgMTc6MjY6NTguNDEyNjI0ODcyICswMjAwCitAQCAtMzM4LDYgKzMzOCwxMSBAQCBp bnQgT1BFTlNTTF9pc3NlcnZpY2Uodm9pZCk7CisgaW50IEZJUFNfbW9kZSh2b2lkKTsKKyBpbnQg RklQU19tb2RlX3NldChpbnQgcik7CisgCisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysvKiBkaWUg aWYgRklQUyBzZWxmdGVzdCBmYWlsZWQgKi8KKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9p ZCk7CisrIyBlbmRpZgorKworIHZvaWQgT1BFTlNTTF9pbml0KHZvaWQpOworICMgaWZkZWYgT1BF TlNTTF9TWVNfVU5JWAorIHZvaWQgT1BFTlNTTF9mb3JrX3ByZXBhcmUodm9pZCk7CitkaWZmIC11 cCBvcGVuc3NsLTEuMS4xLXByZTgvaW5jbHVkZS9vcGVuc3NsL2RoZXJyLmguZmlwcyBvcGVuc3Ns LTEuMS4xLXByZTgvaW5jbHVkZS9vcGVuc3NsL2RoZXJyLmgKKy0tLSBvcGVuc3NsLTEuMS4xLXBy ZTgvaW5jbHVkZS9vcGVuc3NsL2RoZXJyLmguZmlwcwkyMDE4LTA2LTIwIDE2OjQ4OjEzLjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9pbmNsdWRlL29wZW5zc2wvZGhlcnIu aAkyMDE4LTA3LTI1IDE3OjI2OjU4LjQxMjYyNDg3MiArMDIwMAorQEAgLTMyLDYgKzMyLDkgQEAg aW50IEVSUl9sb2FkX0RIX3N0cmluZ3Modm9pZCk7CisgIyAgZGVmaW5lIERIX0ZfREhfQ01TX0RF Q1JZUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTQKKyAjICBkZWZpbmUgREhfRl9E SF9DTVNfU0VUX1BFRVJLRVkgICAgICAgICAgICAgICAgICAgICAgICAgIDExNQorICMgIGRlZmlu ZSBESF9GX0RIX0NNU19TRVRfU0hBUkVEX0lORk8gICAgICAgICAgICAgICAgICAgICAgMTE2Cisr IyAgZGVmaW5lIERIX0ZfREhfQ09NUFVURV9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAyMDMKKysjICBkZWZpbmUgREhfRl9ESF9HRU5FUkFURV9LRVkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDIwMgorKyMgIGRlZmluZSBESF9GX0RIX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVgg ICAgICAgICAgICAgICAgICAgMjAxCisgIyAgZGVmaW5lIERIX0ZfREhfTUVUSF9EVVAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxMTcKKyAjICBkZWZpbmUgREhfRl9ESF9NRVRIX05F VyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOAorICMgIGRlZmluZSBESF9GX0RI X01FVEhfU0VUMV9OQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE5CitAQCAtNjksMTIg KzcyLDE0IEBAIGludCBFUlJfbG9hZF9ESF9zdHJpbmdzKHZvaWQpOworICMgIGRlZmluZSBESF9S X0lOVkFMSURfUEFSQU1FVEVSX05JRCAgICAgICAgICAgICAgICAgICAgICAgMTE0CisgIyAgZGVm aW5lIERIX1JfSU5WQUxJRF9QVUJLRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDIK KyAjICBkZWZpbmUgREhfUl9LREZfUEFSQU1FVEVSX0VSUk9SICAgICAgICAgICAgICAgICAgICAg ICAgIDExMgorKyMgIGRlZmluZSBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCAgICAgICAgICAgICAg ICAgICAgICAgICAgMjAxCisgIyAgZGVmaW5lIERIX1JfS0VZU19OT1RfU0VUICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxMDgKKyAjICBkZWZpbmUgREhfUl9NSVNTSU5HX1BVQktFWSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNQorICMgIGRlZmluZSBESF9SX01PRFVMVVNf VE9PX0xBUkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAzCisgIyAgZGVmaW5lIERIX1Jf Tk9UX1NVSVRBQkxFX0dFTkVSQVRPUiAgICAgICAgICAgICAgICAgICAgICAxMjAKKyAjICBkZWZp bmUgREhfUl9OT19QQVJBTUVURVJTX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNwor ICMgIGRlZmluZSBESF9SX05PX1BSSVZBVEVfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTAwCisrIyAgZGVmaW5lIERIX1JfTk9OX0ZJUFNfTUVUSE9EICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAyMDIKKyAjICBkZWZpbmUgREhfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1Ig ICAgICAgICAgICAgICAgICAgIDEwNQorICMgIGRlZmluZSBESF9SX1BFRVJfS0VZX0VSUk9SICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTExCisgIyAgZGVmaW5lIERIX1JfU0hBUkVEX0lO Rk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTMKK2RpZmYgLXVwIG9wZW5zc2wt MS4xLjEtcHJlOC9pbmNsdWRlL29wZW5zc2wvZGguaC5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9p bmNsdWRlL29wZW5zc2wvZGguaAorLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9pbmNsdWRlL29wZW5z c2wvZGguaC5maXBzCTIwMTgtMDYtMjAgMTY6NDg6MTMuMDAwMDAwMDAwICswMjAwCisrKysgb3Bl bnNzbC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9kaC5oCTIwMTgtMDctMjUgMTc6MjY6NTgu NDEyNjI0ODcyICswMjAwCitAQCAtMzEsNiArMzEsNyBAQCBleHRlcm4gIkMiIHsKKyAjIGVuZGlm CisgCisgIyBkZWZpbmUgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAorKyMg ZGVmaW5lIE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTX0dFTiAyMDQ4CisgCisgIyBk ZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKKyAKK2RpZmYgLXVwIG9wZW5zc2wt MS4xLjEtcHJlOC9pbmNsdWRlL29wZW5zc2wvZHNhZXJyLmguZmlwcyBvcGVuc3NsLTEuMS4xLXBy ZTgvaW5jbHVkZS9vcGVuc3NsL2RzYWVyci5oCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2luY2x1 ZGUvb3BlbnNzbC9kc2FlcnIuaC5maXBzCTIwMTgtMDYtMjAgMTY6NDg6MTMuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9kc2FlcnIuaAkyMDE4 LTA3LTI1IDE3OjI2OjU4LjQxMjYyNDg3MiArMDIwMAorQEAgLTI1LDggKzI1LDExIEBAIGludCBF UlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKKyAgKi8KKyAjICBkZWZpbmUgRFNBX0ZfRFNBUEFS QU1TX1BSSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMAorICMgIGRlZmluZSBEU0Ff Rl9EU0FQQVJBTVNfUFJJTlRfRlAgICAgICAgICAgICAgICAgICAgICAgICAgMTAxCisrIyAgZGVm aW5lIERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiAgICAgICAgICAgICAgICAgICAgICAgICAyMDIK KyAjICBkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4gICAgICAgICAgICAgICAgICAg ICAgIDEyNQorICMgIGRlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTjIgICAgICAgICAg ICAgICAgICAgICAgMTI2CisrIyAgZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9LRVkgICAgICAg ICAgICAgICAgICAgICAgICAgICAyMDEKKysjICBkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BB UkFNRVRFUlNfRVggICAgICAgICAgICAgICAgIDIwMAorICMgIGRlZmluZSBEU0FfRl9EU0FfRE9f U0lHTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEyCisgIyAgZGVmaW5lIERTQV9G X0RTQV9ET19WRVJJRlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTMKKyAjICBkZWZp bmUgRFNBX0ZfRFNBX01FVEhfRFVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNwor QEAgLTU2LDkgKzU5LDEyIEBAIGludCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKKyAjICBk ZWZpbmUgRFNBX1JfREVDT0RFX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEw NAorICMgIGRlZmluZSBEU0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFICAgICAgICAgICAgICAgICAg ICAgICAgMTA2CisgIyAgZGVmaW5lIERTQV9SX0lOVkFMSURfUEFSQU1FVEVSUyAgICAgICAgICAg ICAgICAgICAgICAgICAxMTIKKysjICBkZWZpbmUgRFNBX1JfS0VZX1NJWkVfSU5WQUxJRCAgICAg ICAgICAgICAgICAgICAgICAgICAgIDIwMQorKyMgIGRlZmluZSBEU0FfUl9LRVlfU0laRV9UT09f U01BTEwgICAgICAgICAgICAgICAgICAgICAgICAgMjAyCisgIyAgZGVmaW5lIERTQV9SX01JU1NJ TkdfUEFSQU1FVEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAxMDEKKyAjICBkZWZpbmUgRFNB X1JfTU9EVUxVU19UT09fTEFSR0UgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMworICMgIGRl ZmluZSBEU0FfUl9OT19QQVJBTUVURVJTX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMTA3 CisrIyAgZGVmaW5lIERTQV9SX05PTl9GSVBTX0RTQV9NRVRIT0QgICAgICAgICAgICAgICAgICAg ICAgICAyMDAKKyAjICBkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SICAgICAg ICAgICAgICAgICAgIDEwNQorICMgIGRlZmluZSBEU0FfUl9RX05PVF9QUklNRSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTEzCisgIyAgZGVmaW5lIERTQV9SX1NFRURfTEVOX1NNQUxM ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTAKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEt cHJlOC9pbmNsdWRlL29wZW5zc2wvZHNhLmguZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvaW5jbHVk ZS9vcGVuc3NsL2RzYS5oCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9k c2EuaC5maXBzCTIwMTgtMDYtMjAgMTY6NDg6MTMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9kc2EuaAkyMDE4LTA3LTI1IDE3OjI2OjU4LjQx MzYyNDg5NSArMDIwMAorQEAgLTMxLDYgKzMxLDcgQEAgZXh0ZXJuICJDIiB7CisgIyBlbmRpZgor IAorICMgZGVmaW5lIE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0CisrIyBk ZWZpbmUgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTX0dFTiAyMDQ4CisgCisgIyBk ZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QICAgMHgwMQorICMgaWYgT1BFTlNTTF9BUElfQ09N UEFUIDwgMHgxMDEwMDAwMEwKK0BAIC0xNDEsOSArMTQyLDkgQEAgaW50IERTQXBhcmFtc19wcmlu dF9mcChGSUxFICpmcCwgY29uc3QgRAorIGludCBEU0FfcHJpbnRfZnAoRklMRSAqYnAsIGNvbnN0 IERTQSAqeCwgaW50IG9mZik7CisgIyBlbmRpZgorIAorLSMgZGVmaW5lIERTU19wcmltZV9jaGVj a3MgNTAKKysjIGRlZmluZSBEU1NfcHJpbWVfY2hlY2tzIDY0CisgLyoKKy0gKiBQcmltYWxpdHkg dGVzdCBhY2NvcmRpbmcgdG8gRklQUyBQVUIgMTg2Wy0xXSwgQXBwZW5kaXggMi4xOiA1MCByb3Vu ZHMgb2YKKysgKiBQcmltYWxpdHkgdGVzdCBhY2NvcmRpbmcgdG8gRklQUyBQVUIgMTg2LTQsIEFw cGVuZGl4IDIuMTogNjQgcm91bmRzIG9mCisgICogUmFiaW4tTWlsbGVyCisgICovCisgIyBkZWZp bmUgRFNBX2lzX3ByaW1lKG4sIGNhbGxiYWNrLCBjYl9hcmcpIFwKK2RpZmYgLXVwIG9wZW5zc2wt MS4xLjEtcHJlOC9pbmNsdWRlL29wZW5zc2wvZXZwZXJyLmguZmlwcyBvcGVuc3NsLTEuMS4xLXBy ZTgvaW5jbHVkZS9vcGVuc3NsL2V2cGVyci5oCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2luY2x1 ZGUvb3BlbnNzbC9ldnBlcnIuaC5maXBzCTIwMTgtMDYtMjAgMTY6NDg6MTMuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9ldnBlcnIuaAkyMDE4 LTA3LTI1IDE3OjI2OjU4LjQxMzYyNDg5NSArMDIwMAorQEAgLTI1LDYgKzI1LDcgQEAgaW50IEVS Ul9sb2FkX0VWUF9zdHJpbmdzKHZvaWQpOworICMgZGVmaW5lIEVWUF9GX0FFU19PQ0JfQ0lQSEVS ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjkKKyAjIGRlZmluZSBFVlBfRl9BRVNfVDRf SU5JVF9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc4CisgIyBkZWZpbmUgRVZQX0Zf QUVTX1dSQVBfQ0lQSEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3MAorKyMgZGVmaW5l IEVWUF9GX0FFU19YVFNfQ0lQSEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDAKKyAj IGRlZmluZSBFVlBfRl9BTEdfTU9EVUxFX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAg MTc3CisgIyBkZWZpbmUgRVZQX0ZfQVJJQV9DQ01fSU5JVF9LRVkgICAgICAgICAgICAgICAgICAg ICAgICAgIDE3NQorICMgZGVmaW5lIEVWUF9GX0FSSUFfR0NNX0NUUkwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxOTcKK0BAIC0xMzIsNiArMTMzLDcgQEAgaW50IEVSUl9sb2FkX0VWUF9z dHJpbmdzKHZvaWQpOworICMgZGVmaW5lIEVWUF9SX0NUUkxfT1BFUkFUSU9OX05PVF9JTVBMRU1F TlRFRCAgICAgICAgICAgICAxMzMKKyAjIGRlZmluZSBFVlBfUl9EQVRBX05PVF9NVUxUSVBMRV9P Rl9CTE9DS19MRU5HVEggICAgICAgICAgMTM4CisgIyBkZWZpbmUgRVZQX1JfREVDT0RFX0VSUk9S ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNAorKyMgZGVmaW5lIEVWUF9SX0RJU0FC TEVEX0ZPUl9GSVBTICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAKKyAjIGRlZmluZSBFVlBf Ul9ESUZGRVJFTlRfS0VZX1RZUEVTICAgICAgICAgICAgICAgICAgICAgICAgMTAxCisgIyBkZWZp bmUgRVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAgIDE1Mwor ICMgZGVmaW5lIEVWUF9SX0VSUk9SX0xPQURJTkdfU0VDVElPTiAgICAgICAgICAgICAgICAgICAg ICAxNjUKK0BAIC0xNzQsNiArMTc2LDcgQEAgaW50IEVSUl9sb2FkX0VWUF9zdHJpbmdzKHZvaWQp OworICMgZGVmaW5lIEVWUF9SX1BSSVZBVEVfS0VZX0RFQ09ERV9FUlJPUiAgICAgICAgICAgICAg ICAgICAxNDUKKyAjIGRlZmluZSBFVlBfUl9QUklWQVRFX0tFWV9FTkNPREVfRVJST1IgICAgICAg ICAgICAgICAgICAgMTQ2CisgIyBkZWZpbmUgRVZQX1JfUFVCTElDX0tFWV9OT1RfUlNBICAgICAg ICAgICAgICAgICAgICAgICAgIDEwNgorKyMgZGVmaW5lIEVWUF9SX1RPT19MQVJHRSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAyMDEKKyAjIGRlZmluZSBFVlBfUl9VTktOT1dOX0NJ UEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYwCisgIyBkZWZpbmUgRVZQX1JfVU5L Tk9XTl9ESUdFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MQorICMgZGVmaW5lIEVW UF9SX1VOS05PV05fT1BUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjkKK2RpZmYg LXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9pbmNsdWRlL29wZW5zc2wvZmlwcy5oLmZpcHMgb3BlbnNz bC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKy0tLSBvcGVuc3NsLTEuMS4xLXBy ZTgvaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaC5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTguNDEzNjI0 ODk1ICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9maXBzLmgJ MjAxOC0wNy0yNSAxNzoyNjo1OC40MTM2MjQ4OTUgKzAyMDAKK0BAIC0wLDAgKzEsMTg2IEBACisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNv bmYuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisr IyBlcnJvciBGSVBTIGlzIGRpc2FibGVkLgorKyNlbmRpZgorKworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysKKysjIGlmZGVmICBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyMgZW5kaWYKKysK KysgICAgaW50IEZJUFNfc2VsZnRlc3Qodm9pZCk7CisrICAgIGludCBGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCh2b2lkKTsKKysgICAgaW50IEZJUFNfc2VsZnRlc3RfZHJiZ19hbGwodm9pZCk7CisrCisr ICAgIGludCBGSVBTX2RzYV9idWlsdGluX3BhcmFtZ2VuMihEU0EgKnJldCwgc2l6ZV90IEwsIHNp emVfdCBOLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2 cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3Qgc2VlZF9sZW4sIGludCBpZHgsIHVuc2lnbmVkIGNoYXIgKnNlZWRf b3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvdW50ZXJfcmV0LCB1 bnNpZ25lZCBsb25nICpoX3JldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk5f R0VOQ0IgKmNiKTsKKysgICAgaW50IEZJUFNfZHNhX3BhcmFtZ2VuX2NoZWNrX2coRFNBICpkc2Ep OworKworKy8qIEJFR0lOIEVSUk9SIENPREVTICovCisrLyogVGhlIGZvbGxvd2luZyBsaW5lcyBh cmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKKysg KiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlw dCBpcyBuZXh0IHJ1bi4KKysgKi8KKysgICAgaW50IEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lk KTsKKysKKysvKiBFcnJvciBjb2RlcyBmb3IgdGhlIEZJUFMgZnVuY3Rpb25zLiAqLworKworKy8q IEZ1bmN0aW9uIGNvZGVzLiAqLworKyMgZGVmaW5lIEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFN UyAgICAgICAgICAgICAgICAgICAgICAxMDAKKysjIGRlZmluZSBGSVBTX0ZfRFJCR19SRVNFRUQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIxCisrIyBkZWZpbmUgRklQU19GX0RTQV9C VUlMVElOX1BBUkFNR0VOMiAgICAgICAgICAgICAgICAgICAgIDEwNworKyMgZGVmaW5lIEZJUFNf Rl9EU0FfRE9fU0lHTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDIKKysjIGRlZmlu ZSBGSVBTX0ZfRFNBX0RPX1ZFUklGWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAzCisr IyBkZWZpbmUgRklQU19GX0VWUF9DSVBIRVJfQ1RYX05FVyAgICAgICAgICAgICAgICAgICAgICAg IDEzNworKyMgZGVmaW5lIEZJUFNfRl9FVlBfQ0lQSEVSX0NUWF9SRVNFVCAgICAgICAgICAgICAg ICAgICAgICAxMjIKKysjIGRlZmluZSBGSVBTX0ZfRUNESF9DT01QVVRFX0tFWSAgICAgICAgICAg ICAgICAgICAgICAgICAgMTIzCisrIyBkZWZpbmUgRklQU19GX0VWUF9DSVBIRVJJTklUX0VYICAg ICAgICAgICAgICAgICAgICAgICAgIDEyNAorKyMgZGVmaW5lIEZJUFNfRl9FVlBfRElHRVNUSU5J VF9FWCAgICAgICAgICAgICAgICAgICAgICAgICAxMjUKKysjIGRlZmluZSBGSVBTX0ZfRklQU19D SEVDS19EU0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA0CisrIyBkZWZpbmUgRklQU19G X0ZJUFNfQ0hFQ0tfRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MgorKyMgZGVmaW5l IEZJUFNfRl9GSVBTX0NIRUNLX1JTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDYKKysj IGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX0JZVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAg MTMxCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19DSEVDSyAgICAgICAgICAgICAgICAgICAg ICAgICAgIDE0NgorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCAgICAgICAg ICAgICAgICAgICAgICAxMzIKKysjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNL ICAgICAgICAgICAgICAgICAgICAgMTM2CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19HRU5F UkFURSAgICAgICAgICAgICAgICAgICAgICAgIDEzNAorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RS QkdfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzUKKysjIGRlZmluZSBGSVBTX0Zf RklQU19EUkJHX0lOU1RBTlRJQVRFICAgICAgICAgICAgICAgICAgICAgMTM4CisrIyBkZWZpbmUg RklQU19GX0ZJUFNfRFJCR19ORVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOQorKyMg ZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfUkVTRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAx NDAKKysjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQgICAgICAgICAgICAgICAg ICAgICAgMTQxCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfR0VUX0VOVFJPUFkgICAgICAgICAgICAg ICAgICAgICAgICAgIDE0NworKyMgZGVmaW5lIEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCAg ICAgICAgICAgICAgICAgICAgICAxMDgKKysjIGRlZmluZSBGSVBTX0ZfRklQU19QS0VZX1NJR05B VFVSRV9URVNUICAgICAgICAgICAgICAgICAgMTA5CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfUkFO RF9CWVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNAorKyMgZGVmaW5lIEZJUFNfRl9G SVBTX1JBTkRfU0VFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjgKKysjIGRlZmluZSBG SVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgMTI2CisrIyBk ZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIDEy NworKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1JTQV9CVUlMVElOX0tFWUdFTiAgICAgICAgICAgICAg ICAgICAxMDEKKysjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMgICAgICAgICAgICAg ICAgICAgICAgICAgMTEwCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0NDTSAg ICAgICAgICAgICAgICAgICAgIDE0NQorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FF U19HQ00gICAgICAgICAgICAgICAgICAgICAxMjkKKysjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxG VEVTVF9BRVNfWFRTICAgICAgICAgICAgICAgICAgICAgMTQ0CisrIyBkZWZpbmUgRklQU19GX0ZJ UFNfU0VMRlRFU1RfQ01BQyAgICAgICAgICAgICAgICAgICAgICAgIDEzMAorKyMgZGVmaW5lIEZJ UFNfRl9GSVBTX1NFTEZURVNUX0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAxMTEKKysjIGRl ZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EgICAgICAgICAgICAgICAgICAgICAgICAgMTEy CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRUNEU0EgICAgICAgICAgICAgICAgICAg ICAgIDEzMworKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMgICAgICAgICAgICAg ICAgICAgICAgICAxMTMKKysjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExICAgICAg ICAgICAgICAgICAgICAgICAgMTE1CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hB MiAgICAgICAgICAgICAgICAgICAgICAgIDEwNQorKyMgZGVmaW5lIEZJUFNfRl9PU1NMX0VDRFNB X1NJR05fU0lHICAgICAgICAgICAgICAgICAgICAgICAxNDMKKysjIGRlZmluZSBGSVBTX0ZfT1NT TF9FQ0RTQV9WRVJJRllfU0lHICAgICAgICAgICAgICAgICAgICAgMTQ4CisrIyBkZWZpbmUgRklQ U19GX1JTQV9CVUlMVElOX0tFWUdFTiAgICAgICAgICAgICAgICAgICAgICAgIDExNgorKyMgZGVm aW5lIEZJUFNfRl9SU0FfT1NTTF9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDkK KysjIGRlZmluZSBGSVBTX0ZfUlNBX09TU0xfUFJJVkFURV9ERUNSWVBUICAgICAgICAgICAgICAg ICAgMTE3CisrIyBkZWZpbmUgRklQU19GX1JTQV9PU1NMX1BSSVZBVEVfRU5DUllQVCAgICAgICAg ICAgICAgICAgIDExOAorKyMgZGVmaW5lIEZJUFNfRl9SU0FfT1NTTF9QVUJMSUNfREVDUllQVCAg ICAgICAgICAgICAgICAgICAxMTkKKysjIGRlZmluZSBGSVBTX0ZfUlNBX09TU0xfUFVCTElDX0VO Q1JZUFQgICAgICAgICAgICAgICAgICAgMTIwCisrCisrLyogUmVhc29uIGNvZGVzLiAqLworKyMg ZGVmaW5lIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNURUQgICAgICAgICAx NTAKKysjIGRlZmluZSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORyAgICAgICAgICAg ICAgICAgMTI1CisrIyBkZWZpbmUgRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVEICAgICAgICAg ICAgICAgICAgICAgIDEzNAorKyMgZGVmaW5lIEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRCAg ICAgICAgICAgICAgICAgICAgICAxNTIKKysjIGRlZmluZSBGSVBTX1JfRFJCR19TVFVDSyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAzCisrIyBkZWZpbmUgRklQU19SX0VOVFJPUFlf RVJST1JfVU5ERVRFQ1RFRCAgICAgICAgICAgICAgICAgIDEwNAorKyMgZGVmaW5lIEZJUFNfUl9F TlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRCAgICAgICAgICAxMDUKKysjIGRlZmluZSBG SVBTX1JfRU5UUk9QWV9TT1VSQ0VfU1RVQ0sgICAgICAgICAgICAgICAgICAgICAgMTQyCisrIyBk ZWZpbmUgRklQU19SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHICAgICAgICAgICAgICAgICAgIDEx NQorKyMgZGVmaW5lIEZJUFNfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcgICAgICAgICAgICAg ICAgICAxMjcKKysjIGRlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19BRERJVElPTkFMX0lO UFVUICAgICAgICAgMTI0CisrIyBkZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9Q WSAgICAgICAgICAgICAgICAgIDEyMgorKyMgZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5H X05PTkNFICAgICAgICAgICAgICAgICAgICAxNDAKKysjIGRlZmluZSBGSVBTX1JfRklOR0VSUFJJ TlRfRE9FU19OT1RfTUFUQ0ggICAgICAgICAgICAgICAgMTEwCisrIyBkZWZpbmUgRklQU19SX0ZJ UFNfTU9ERV9BTFJFQURZX1NFVCAgICAgICAgICAgICAgICAgICAgIDEwMgorKyMgZGVmaW5lIEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAxMDYKKysjIGRl ZmluZSBGSVBTX1JfRlVOQ1RJT05fRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE2 CisrIyBkZWZpbmUgRklQU19SX0dFTkVSQVRFX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEzNworKyMgZGVmaW5lIEZJUFNfUl9HRU5FUkFURV9FUlJPUl9VTkRFVEVDVEVEICAgICAg ICAgICAgICAgICAxMTgKKysjIGRlZmluZSBGSVBTX1JfSU5TVEFOVElBVEVfRVJST1IgICAgICAg ICAgICAgICAgICAgICAgICAgMTE5CisrIyBkZWZpbmUgRklQU19SX0lOVEVSTkFMX0VSUk9SICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEyMQorKyMgZGVmaW5lIEZJUFNfUl9JTlZBTElEX0tF WV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAxMDkKKysjIGRlZmluZSBGSVBTX1JfSU5f RVJST1JfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIzCisrIyBkZWZpbmUgRklQ U19SX0tFWV9UT09fU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOAorKyMgZGVm aW5lIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgICAgICAgICAgICAxNDkK KysjIGRlZmluZSBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTAwCisrIyBkZWZpbmUgRklQU19SX05PUFJfVEVTVDFfRkFJTFVSRSAgICAgICAgICAgICAg ICAgICAgICAgIDE0NQorKyMgZGVmaW5lIEZJUFNfUl9OT1BSX1RFU1QyX0ZBSUxVUkUgICAgICAg ICAgICAgICAgICAgICAgICAxNDYKKysjIGRlZmluZSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRCAg ICAgICAgICAgICAgICAgICAgICAgICAgMTI2CisrIyBkZWZpbmUgRklQU19SX1BBSVJXSVNFX1RF U1RfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgIDEwNworKyMgZGVmaW5lIEZJUFNfUl9QRVJT T05BTElTQVRJT05fRVJST1JfVU5ERVRFQ1RFRCAgICAgICAgICAxMjgKKysjIGRlZmluZSBGSVBT X1JfUEVSU09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORyAgICAgICAgICAgMTI5CisrIyBkZWZp bmUgRklQU19SX1BSX1RFU1QxX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Nwor KyMgZGVmaW5lIEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAg ICAxNDgKKysjIGRlZmluZSBGSVBTX1JfUkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCAg ICAgICAgICAgMTMwCisrIyBkZWZpbmUgRklQU19SX1JFUVVFU1RfVE9PX0xBUkdFX0ZPUl9EUkJH ICAgICAgICAgICAgICAgIDEzMQorKyMgZGVmaW5lIEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJP UiAgICAgICAgICAgICAgICAgICAgICAxMzIKKysjIGRlZmluZSBGSVBTX1JfUkVTRUVEX0VSUk9S ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMzCisrIyBkZWZpbmUgRklQU19SX1NFTEZU RVNUX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMQorKyMgZGVmaW5lIEZJUFNf Ul9TRUxGVEVTVF9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAxMzUKKysjIGRlZmlu ZSBGSVBTX1JfVEVTVF9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE3Cisr IyBkZWZpbmUgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IgICAgICAgICAgICAgICAgICAgICAg IDE0MQorKyMgZGVmaW5lIEZJUFNfUl9VTklOU1RBTlRJQVRFX1pFUk9JU0VfRVJST1IgICAgICAg ICAgICAgICAxMzgKKysjIGRlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfRFJCR19UWVBFICAgICAg ICAgICAgICAgICAgICAgMTM5CisrIyBkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JN ICAgICAgICAgICAgICAgICAgICAgIDExMworKworKyMgaWZkZWYgIF9fY3BsdXNwbHVzCisrfQor KyMgZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9pbmNsdWRlL29w ZW5zc2wvZmlwc19yYW5kLmguZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvaW5jbHVkZS9vcGVuc3Ns L2ZpcHNfcmFuZC5oCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9maXBz X3JhbmQuaC5maXBzCTIwMTgtMDctMjUgMTc6MjY6NTguNDEzNjI0ODk1ICswMjAwCisrKysgb3Bl bnNzbC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAkyMDE4LTA3LTI1IDE3 OjI2OjU4LjQxMzYyNDg5NSArMDIwMAorQEAgLTAsMCArMSwxNDUgQEAKKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBt ZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysg KiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu CisrICoKKysgKi8KKysKKysjaWZuZGVmIEhFQURFUl9GSVBTX1JBTkRfSAorKyMgZGVmaW5lIEhF QURFUl9GSVBTX1JBTkRfSAorKworKyMgaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjIGluY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+CisrIyBpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjIGluY2x1 ZGUgPG9wZW5zc2wvcmFuZC5oPgorKworKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrIyAgaWZk ZWYgIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrIyAgZW5kaWYKKysgICAgdHlwZWRlZiBz dHJ1Y3QgZHJiZ19jdHhfc3QgRFJCR19DVFg7CisrLyogRFJCRyBleHRlcm5hbCBmbGFncyAqLwor Ky8qIEZsYWcgZm9yIENUUiBtb2RlIG9ubHk6IHVzZSBkZXJpdmF0aW9uIGZ1bmN0aW9uIGN0cl9k ZiAqLworKyMgIGRlZmluZSBEUkJHX0ZMQUdfQ1RSX1VTRV9ERiAgICAgICAgICAgIDB4MQorKy8q IFBSTkcgaXMgaW4gdGVzdCBzdGF0ZSAqLworKyMgIGRlZmluZSBEUkJHX0ZMQUdfVEVTVCAgICAg ICAgICAgICAgICAgIDB4MgorKworKyAgICBEUkJHX0NUWCAqRklQU19kcmJnX25ldyhpbnQgdHlw ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKysgICAgaW50IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RY ICpkY3R4LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKysgICAgaW50IEZJUFNfZHJi Z19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbik7CisrICAgIGlu dCBGSVBTX2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICph ZGluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWRpbmxlbik7CisrICAgIGlu dCBGSVBTX2RyYmdfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwg c2l6ZV90IG91dGxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlZGljdGlv bl9yZXNpc3RhbmNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKKysKKysgICAgaW50IEZJUFNfZHJiZ191bmlu c3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KTsKKysgICAgdm9pZCBGSVBTX2RyYmdfZnJlZShEUkJH X0NUWCAqZGN0eCk7CisrCisrICAgIGludCBGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhEUkJHX0NU WCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAoKmdldF9l bnRyb3B5KSAoRFJCR19DVFggKmN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgbWluX2xlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heF9sZW4pLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAoKmNsZWFudXBfZW50cm9weSkgKERSQkdfQ1RYICpjdHgsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY2hhciAqb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGVuKSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBlbnRyb3B5X2Jsb2NrbGVuLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90ICgqZ2V0X25vbmNlKSAoRFJCR19DVFggKmN0eCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo YXIgKipwb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGVudHJvcHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWluX2xlbiwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfbGVuKSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjbGVhbnVwX25vbmNlKSAoRFJCR19D VFggKmN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xlbikpOworKworKyAgICBpbnQg RklQU19kcmJnX3NldF9yYW5kX2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICgqZ2V0X2FkaW4pIChEUkJHX0NUWCAq Y3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGNoYXIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqKnBvdXQpLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICgqY2xlYW51cF9hZGluKSAoRFJCR19DVFggKmN0eCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGNoYXIgKm91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGVuKSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICgqcmFuZF9zZWVkX2NiKSAoRFJCR19DVFggKmN0eCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgdm9pZCAqYnVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgbnVtKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50ICgqcmFuZF9hZGRfY2IpIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZv aWQgKmJ1ZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgbnVtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlbnRyb3B5KSk7CisrCisrICAgIHZvaWQgKkZJ UFNfZHJiZ19nZXRfYXBwX2RhdGEoRFJCR19DVFggKmN0eCk7CisrICAgIHZvaWQgRklQU19kcmJn X3NldF9hcHBfZGF0YShEUkJHX0NUWCAqY3R4LCB2b2lkICphcHBfZGF0YSk7CisrICAgIHNpemVf dCBGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKERSQkdfQ1RYICpkY3R4KTsKKysgICAgaW50IEZJ UFNfZHJiZ19nZXRfc3RyZW5ndGgoRFJCR19DVFggKmRjdHgpOworKyAgICB2b2lkIEZJUFNfZHJi Z19zZXRfY2hlY2tfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCk7CisrICAg IHZvaWQgRklQU19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBp bnRlcnZhbCk7CisrCisrICAgIGludCBGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKERSQkdfQ1RYICpk Y3R4KTsKKysKKysgICAgRFJCR19DVFggKkZJUFNfZ2V0X2RlZmF1bHRfZHJiZyh2b2lkKTsKKysg ICAgY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfZHJiZ19tZXRob2Qodm9pZCk7CisrCisrICAgIGlu dCBGSVBTX3JhbmRfc2V0X21ldGhvZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCk7CisrICAgIGNv bnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfZ2V0X21ldGhvZCh2b2lkKTsKKysKKysgICAgdm9p ZCBGSVBTX3JhbmRfc2V0X2JpdHMoaW50IG5iaXRzKTsKKysKKysgICAgaW50IEZJUFNfcmFuZF9z dHJlbmd0aCh2b2lkKTsKKysKKysvKiAxLjAuMCBjb21wYXQgZnVuY3Rpb25zICovCisrICAgIGlu dCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpidWYsIGludCBudW0pOworKyAgICBpbnQgRklQ U19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IG91dGxlbik7CisrICAgIHZvaWQg RklQU19yYW5kX3Jlc2V0KHZvaWQpOworKyAgICBpbnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKTsK KysjICBpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlm CitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmguaW4uZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmguaW4KKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmguaW4uZmlwcwkyMDE4LTA2LTIwIDE2OjQ4OjEzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4xLjEtcHJlOC9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaC5pbgkyMDE4LTA3LTI1 IDE3OjI2OjU4LjQxMzYyNDg5NSArMDIwMAorQEAgLTEzOCw2ICsxMzgsMTEgQEAgZXh0ZXJuICJD IiB7CisgCisgI2RlZmluZSBSQzRfSU5UIHstICRjb25maWd7cmM0X2ludH0gLX0KKyAKKysvKiBB bHdheXMgYnVpbGQgRklQUyBtb2R1bGUgKi8KKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyMgZGVm aW5lIE9QRU5TU0xfRklQUworKyNlbmRpZgorKworICNpZmRlZiAgX19jcGx1c3BsdXMKKyB9Cisg I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvaW5jbHVkZS9vcGVuc3NsL3JhbmRl cnIuaC5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9pbmNsdWRlL29wZW5zc2wvcmFuZGVyci5oCist LS0gb3BlbnNzbC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9yYW5kZXJyLmguZmlwcwkyMDE4 LTA2LTIwIDE2OjQ4OjEzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9p bmNsdWRlL29wZW5zc2wvcmFuZGVyci5oCTIwMTgtMDctMjUgMTc6MjY6NTguNDEzNjI0ODk1ICsw MjAwCitAQCAtMzUsNiArMzUsNyBAQCBpbnQgRVJSX2xvYWRfUkFORF9zdHJpbmdzKHZvaWQpOwor ICMgZGVmaW5lIFJBTkRfRl9SQU5EX0RSQkdfU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxMDQKKyAjIGRlZmluZSBSQU5EX0ZfUkFORF9EUkJHX1NFVF9ERUZBVUxUUyAgICAgICAgICAg ICAgICAgICAgMTIxCisgIyBkZWZpbmUgUkFORF9GX1JBTkRfRFJCR19VTklOU1RBTlRJQVRFICAg ICAgICAgICAgICAgICAgIDExOAorKyMgZGVmaW5lIFJBTkRfRl9SQU5EX0lOSVRfRklQUyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAyMDAKKyAjIGRlZmluZSBSQU5EX0ZfUkFORF9MT0FEX0ZJ TEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTExCisgIyBkZWZpbmUgUkFORF9GX1JBTkRf UE9PTF9BQ1FVSVJFX0VOVFJPUFkgICAgICAgICAgICAgICAgIDEyMgorICMgZGVmaW5lIFJBTkRf Rl9SQU5EX1BPT0xfQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDMKK2RpZmYgLXVw IG9wZW5zc2wtMS4xLjEtcHJlOC9pbmNsdWRlL29wZW5zc2wvcmFuZC5oLmZpcHMgb3BlbnNzbC0x LjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgv aW5jbHVkZS9vcGVuc3NsL3JhbmQuaC5maXBzCTIwMTgtMDYtMjAgMTY6NDg6MTMuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgJMjAx OC0wNy0yNSAxNzoyNjo1OC40MTM2MjQ4OTUgKzAyMDAKK0BAIC02OCw2ICs2OCwxMSBAQCBERVBS RUNBVEVESU5fMV8xXzAodm9pZCBSQU5EX3NjcmVlbih2b2lkCisgREVQUkVDQVRFRElOXzFfMV8w KGludCBSQU5EX2V2ZW50KFVJTlQsIFdQQVJBTSwgTFBBUkFNKSkKKyAjIGVuZGlmCisgCisrIyBp ZmRlZiBPUEVOU1NMX0ZJUFMKKysvKiBqdXN0IHN0dWJzIGZvciBBUEkgY29tcGF0aWJpbGl0eSAq LworK3ZvaWQgUkFORF9zZXRfZmlwc19kcmJnX3R5cGUoaW50IHR5cGUsIGludCBmbGFncyk7Cisr aW50IFJBTkRfaW5pdF9maXBzKHZvaWQpOworKyMgZW5kaWYKKyAKKyAjaWZkZWYgIF9fY3BsdXNw bHVzCisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9yc2Fl cnIuaC5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9pbmNsdWRlL29wZW5zc2wvcnNhZXJyLmgKKy0t LSBvcGVuc3NsLTEuMS4xLXByZTgvaW5jbHVkZS9vcGVuc3NsL3JzYWVyci5oLmZpcHMJMjAxOC0w Ni0yMCAxNjo0ODoxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvaW5j bHVkZS9vcGVuc3NsL3JzYWVyci5oCTIwMTgtMDctMjUgMTc6MjY6NTguNDEzNjI0ODk1ICswMjAw CitAQCAtMjEsNiArMjEsNyBAQCBpbnQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgICov CisgIyBkZWZpbmUgUlNBX0ZfQ0hFQ0tfUEFERElOR19NRCAgICAgICAgICAgICAgICAgICAgICAg ICAgIDE0MAorICMgZGVmaW5lIFJTQV9GX0VOQ09ERV9QS0NTMSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxNDYKKysjIGRlZmluZSBSU0FfRl9GSVBTX1JTQV9CVUlMVElOX0tFWUdFTiAg ICAgICAgICAgICAgICAgICAgMjA2CisgIyBkZWZpbmUgUlNBX0ZfSU5UX1JTQV9WRVJJRlkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDE0NQorICMgZGVmaW5lIFJTQV9GX09MRF9SU0FfUFJJ Vl9ERUNPREUgICAgICAgICAgICAgICAgICAgICAgICAxNDcKKyAjIGRlZmluZSBSU0FfRl9QS0VZ X1BTU19JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY1CitAQCAtMzUsNiArMzYs OCBAQCBpbnQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgIyBkZWZpbmUgUlNBX0ZfUlNB X0NIRUNLX0tFWV9FWCAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MAorICMgZGVmaW5lIFJT QV9GX1JTQV9DTVNfREVDUllQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTkKKyAjIGRl ZmluZSBSU0FfRl9SU0FfQ01TX1ZFUklGWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU4 CisrIyBkZWZpbmUgUlNBX0ZfUlNBX0dFTkVSQVRFX0tFWV9FWCAgICAgICAgICAgICAgICAgICAg ICAgIDIwNAorKyMgZGVmaW5lIFJTQV9GX1JTQV9HRU5FUkFURV9NVUxUSV9QUklNRV9LRVkgICAg ICAgICAgICAgICAyMDcKKyAjIGRlZmluZSBSU0FfRl9SU0FfSVRFTV9WRVJJRlkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMTQ4CisgIyBkZWZpbmUgUlNBX0ZfUlNBX01FVEhfRFVQICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDE2MQorICMgZGVmaW5lIFJTQV9GX1JTQV9NRVRIX05F VyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjIKK0BAIC03MiwxMCArNzUsMTYgQEAg aW50IEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOworICMgZGVmaW5lIFJTQV9GX1JTQV9QUklO VF9GUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTYKKyAjIGRlZmluZSBSU0FfRl9S U0FfUFJJVl9ERUNPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUwCisgIyBkZWZpbmUg UlNBX0ZfUlNBX1BSSVZfRU5DT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOAorKyMg ZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgICAgICAy MDAKKysjIGRlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUICAgICAgICAgICAgICAgICAg ICAgICAgMjAxCisgIyBkZWZpbmUgUlNBX0ZfUlNBX1BTU19HRVRfUEFSQU0gICAgICAgICAgICAg ICAgICAgICAgICAgIDE1MQorICMgZGVmaW5lIFJTQV9GX1JTQV9QU1NfVE9fQ1RYICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxNTUKKyAjIGRlZmluZSBSU0FfRl9SU0FfUFVCX0RFQ09ERSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM5CisrIyBkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJ Q19ERUNSWVBUICAgICAgICAgICAgICAgICAgICAgICAgIDIwMgorKyMgZGVmaW5lIFJTQV9GX1JT QV9QVUJMSUNfRU5DUllQVCAgICAgICAgICAgICAgICAgICAgICAgICAyMDMKKyAjIGRlZmluZSBS U0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgMTM2CisrIyBk ZWZpbmUgUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCAgICAgICAgICAgICAgICAgICAgIDIw NQorKyMgZGVmaW5lIFJTQV9GX1JTQV9TRVRfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAyMDQKKyAjIGRlZmluZSBSU0FfRl9SU0FfU0lHTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTE3CisgIyBkZWZpbmUgUlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJ TkcgICAgICAgICAgICAgICAgIDExOAorICMgZGVmaW5lIFJTQV9GX1JTQV9WRVJJRlkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxMTkKK0BAIC0xMzIsMTAgKzE0MSwxMiBAQCBpbnQg RVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgIyBkZWZpbmUgUlNBX1JfTVBfRVhQT05FTlRf Tk9UX0NPTkdSVUVOVF9UT19EICAgICAgICAgICAgIDE2OQorICMgZGVmaW5lIFJTQV9SX01QX1Jf Tk9UX1BSSU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzAKKyAjIGRlZmluZSBSU0Ff Ul9OT19QVUJMSUNfRVhQT05FTlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQwCisrIyBkZWZp bmUgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgIDIwMAor ICMgZGVmaW5lIFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcgICAgICAgICAgICAgICAg ICAxMTMKKyAjIGRlZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BST0RVQ1RfT0ZfUFJJTUVT ICAgICAgICAgMTcyCisgIyBkZWZpbmUgUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EgICAgICAg ICAgICAgICAgICAgICAgIDEyNworICMgZGVmaW5lIFJTQV9SX09BRVBfREVDT0RJTkdfRVJST1Ig ICAgICAgICAgICAgICAgICAgICAgICAxMjEKKysjIGRlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9U X0FMTE9XRURfSU5fRklQU19NT0RFICAgICAgICAgMjAxCisgIyBkZWZpbmUgUlNBX1JfT1BFUkFU SU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRSAgIDE0OAorICMgZGVmaW5lIFJTQV9S X1BBRERJTkdfQ0hFQ0tfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAxMTQKKyAjIGRlZmlu ZSBSU0FfUl9QS0NTX0RFQ09ESU5HX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgMTU5CitA QCAtMTU1LDYgKzE2Niw3IEBAIGludCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKKyAjIGRl ZmluZSBSU0FfUl9VTlNVUFBPUlRFRF9MQUJFTF9TT1VSQ0UgICAgICAgICAgICAgICAgICAgMTYz CisgIyBkZWZpbmUgUlNBX1JfVU5TVVBQT1JURURfTUFTS19BTEdPUklUSE0gICAgICAgICAgICAg ICAgIDE1MworICMgZGVmaW5lIFJTQV9SX1VOU1VQUE9SVEVEX01BU0tfUEFSQU1FVEVSICAgICAg ICAgICAgICAgICAxNTQKKysjIGRlZmluZSBSU0FfUl9VTlNVUFBPUlRFRF9QQVJBTUVURVJTICAg ICAgICAgICAgICAgICAgICAgMjAyCisgIyBkZWZpbmUgUlNBX1JfVU5TVVBQT1JURURfU0lHTkFU VVJFX1RZUEUgICAgICAgICAgICAgICAgIDE1NQorICMgZGVmaW5lIFJTQV9SX1ZBTFVFX01JU1NJ TkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDcKKyAjIGRlZmluZSBSU0FfUl9XUk9O R19TSUdOQVRVUkVfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgMTE5CitkaWZmIC11cCBvcGVu c3NsLTEuMS4xLXByZTgvc3NsL3NzbF9jaXBoLmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvc3Ns L3NzbF9jaXBoLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvc3NsL3NzbF9jaXBoLmMuZmlwcwky MDE4LTA3LTI1IDE3OjI2OjU4LjQwMDYyNDU4NCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJl OC9zc2wvc3NsX2NpcGguYwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQxNDYyNDkxOSArMDIwMAorQEAg LTM4NSw3ICszODUsNyBAQCBpbnQgc3NsX2xvYWRfY2lwaGVycyh2b2lkKQorICAgICAgICAgfQor ICAgICB9CisgICAgIC8qIE1ha2Ugc3VyZSB3ZSBjYW4gYWNjZXNzIE1ENSBhbmQgU0hBMSAqLwor LSAgICBpZiAoIW9zc2xfYXNzZXJ0KHNzbF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfTUQ1X0lEWF0g IT0gTlVMTCkpCisrICAgIGlmICghRklQU19tb2RlKCkgJiYgIW9zc2xfYXNzZXJ0KHNzbF9kaWdl c3RfbWV0aG9kc1tTU0xfTURfTUQ1X0lEWF0gIT0gTlVMTCkpCisgICAgICAgICByZXR1cm4gMDsK KyAgICAgaWYgKCFvc3NsX2Fzc2VydChzc2xfZGlnZXN0X21ldGhvZHNbU1NMX01EX1NIQTFfSURY XSAhPSBOVUxMKSkKKyAgICAgICAgIHJldHVybiAwOworQEAgLTU2MCw2ICs1NjAsOSBAQCBpbnQg c3NsX2NpcGhlcl9nZXRfZXZwKGNvbnN0IFNTTF9TRVNTSU9OCisgICAgICAgICAgICAgcy0+c3Ns X3ZlcnNpb24gPCBUTFMxX1ZFUlNJT04pCisgICAgICAgICAgICAgcmV0dXJuIDE7CisgCisrICAg ICAgICBpZiAoRklQU19tb2RlKCkpCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrCisgICAgICAg ICBpZiAoYy0+YWxnb3JpdGhtX2VuYyA9PSBTU0xfUkM0ICYmCisgICAgICAgICAgICAgYy0+YWxn b3JpdGhtX21hYyA9PSBTU0xfTUQ1ICYmCisgICAgICAgICAgICAgKGV2cCA9IEVWUF9nZXRfY2lw aGVyYnluYW1lKCJSQzQtSE1BQy1NRDUiKSkpCitAQCAtNjY4LDYgKzY3MSw4IEBAIHN0YXRpYyB2 b2lkIHNzbF9jaXBoZXJfY29sbGVjdF9jaXBoZXJzKGMKKyAgICAgICAgIC8qIGRyb3AgdGhvc2Ug dGhhdCB1c2UgYW55IG9mIHRoYXQgaXMgbm90IGF2YWlsYWJsZSAqLworICAgICAgICAgaWYgKGMg PT0gTlVMTCB8fCAhYy0+dmFsaWQpCisgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICBp ZiAoRklQU19tb2RlKCkgJiYgIShjLT5hbGdvX3N0cmVuZ3RoICYgU1NMX0ZJUFMpKQorKyAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgaWYgKChjLT5hbGdvcml0aG1fbWtleSAmIGRpc2Fi bGVkX21rZXkpIHx8CisgICAgICAgICAgICAgKGMtPmFsZ29yaXRobV9hdXRoICYgZGlzYWJsZWRf YXV0aCkgfHwKKyAgICAgICAgICAgICAoYy0+YWxnb3JpdGhtX2VuYyAmIGRpc2FibGVkX2VuYykg fHwKK0BAIC0xNjcxLDcgKzE2NzYsOCBAQCBTVEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2NyZWF0 ZV9jaXBoZXJfCisgICAgICAqIHRvIHRoZSByZXN1bHRpbmcgcHJlY2VkZW5jZSB0byB0aGUgU1RB Q0tfT0YoU1NMX0NJUEhFUikuCisgICAgICAqLworICAgICBmb3IgKGN1cnIgPSBoZWFkOyBjdXJy ICE9IE5VTEw7IGN1cnIgPSBjdXJyLT5uZXh0KSB7CistICAgICAgICBpZiAoY3Vyci0+YWN0aXZl KSB7CisrICAgICAgICBpZiAoY3Vyci0+YWN0aXZlCisrICAgICAgICAgICAgJiYgKCFGSVBTX21v ZGUoKSB8fCBjdXJyLT5jaXBoZXItPmFsZ29fc3RyZW5ndGggJiBTU0xfRklQUykpIHsKKyAgICAg ICAgICAgICBpZiAoIXNrX1NTTF9DSVBIRVJfcHVzaChjaXBoZXJzdGFjaywgY3Vyci0+Y2lwaGVy KSkgeworICAgICAgICAgICAgICAgICBPUEVOU1NMX2ZyZWUoY29fbGlzdCk7CisgICAgICAgICAg ICAgICAgIHNrX1NTTF9DSVBIRVJfZnJlZShjaXBoZXJzdGFjayk7CitkaWZmIC11cCBvcGVuc3Ns LTEuMS4xLXByZTgvc3NsL3NzbF9pbml0LmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvc3NsL3Nz bF9pbml0LmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvc3NsL3NzbF9pbml0LmMuZmlwcwkyMDE4 LTA2LTIwIDE2OjQ4OjEzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9z c2wvc3NsX2luaXQuYwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQxNDYyNDkxOSArMDIwMAorQEAgLTI3 LDYgKzI3LDEwIEBAIERFRklORV9SVU5fT05DRV9TVEFUSUMob3NzbF9pbml0X3NzbF9iYXMKKyAg ICAgZnByaW50ZihzdGRlcnIsICJPUEVOU1NMX0lOSVQ6IG9zc2xfaW5pdF9zc2xfYmFzZTogIgor ICAgICAgICAgICAgICJBZGRpbmcgU1NMIGNpcGhlcnMgYW5kIGRpZ2VzdHNcbiIpOworICNlbmRp ZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKCFGSVBTX21vZGUoKSkgeworKyNlbmRp ZgorKworICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKKyAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rl c19jYmMoKSk7CisgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7CitAQCAt ODcsNiArOTEsMzEgQEAgREVGSU5FX1JVTl9PTkNFX1NUQVRJQyhvc3NsX2luaXRfc3NsX2Jhcwor ICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOworICAgICBFVlBfYWRkX2RpZ2VzdChF VlBfc2hhMzg0KCkpOworICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysgICAgfSBlbHNlIHsKKysjIGlmbmRlZiBPUEVOU1NMX05PX0RFUwor KyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKKysjIGVuZGlmCisr ICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7CisrICAgICAgICBFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jYmMoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzI1Nl9jYmMoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9n Y20oKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7CisrICAg ICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jY20oKSk7CisrICAgICAgICBFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzI1Nl9jY20oKSk7CisrIyBpZm5kZWYgT1BFTlNTTF9OT19NRDUKKysg ICAgICAgIC8qIG5lZWRlZCBldmVuIGluIHRoZSBGSVBTIG1vZGUgZm9yIFRMUy0xLjAgKi8KKysg ICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9tZDVfc2hhMSgpKTsKKysjIGVuZGlmCisrICAgICAg ICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsgLyogUlNBIHdpdGggc2hhMSAqLworKyAgICAg ICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwgInNzbDMtc2hhMSIpOworKyAgICAgICAg RVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLCBTTl9zaGExV2l0 aFJTQSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOworKyAgICAgICAg RVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVW UF9zaGEzODQoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOworKyAg ICB9CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKKyAjIGlmZGVmIE9QRU5TU0xf SU5JVF9ERUJVRworICAgICBmcHJpbnRmKHN0ZGVyciwgIk9QRU5TU0xfSU5JVDogb3NzbF9pbml0 X3NzbF9iYXNlOiAiCitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvc3NsL3NzbF9saWIuYy5m aXBzIG9wZW5zc2wtMS4xLjEtcHJlOC9zc2wvc3NsX2xpYi5jCistLS0gb3BlbnNzbC0xLjEuMS1w cmU4L3NzbC9zc2xfbGliLmMuZmlwcwkyMDE4LTA3LTI1IDE3OjI2OjU4LjQwMDYyNDU4NCArMDIw MAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9zc2wvc3NsX2xpYi5jCTIwMTgtMDctMjUgMTc6MjY6 NTguNDE0NjI0OTE5ICswMjAwCitAQCAtMjg4NSw2ICsyODg1LDExIEBAIFNTTF9DVFggKlNTTF9D VFhfbmV3KGNvbnN0IFNTTF9NRVRIT0QgKm0KKyAgICAgaWYgKCFPUEVOU1NMX2luaXRfc3NsKE9Q RU5TU0xfSU5JVF9MT0FEX1NTTF9TVFJJTkdTLCBOVUxMKSkKKyAgICAgICAgIHJldHVybiBOVUxM OworIAorKyAgICBpZiAoRklQU19tb2RlKCkgJiYgKG1ldGgtPnZlcnNpb24gPCBUTFMxX1ZFUlNJ T04pKSB7CisrICAgICAgICBTU0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsIFNTTF9SX0FUX0xFQVNU X1RMU18xXzBfTkVFREVEX0lOX0ZJUFNfTU9ERSk7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysg ICAgfQorKworICAgICBpZiAoU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeCgpIDwg MCkgeworICAgICAgICAgU1NMZXJyKFNTTF9GX1NTTF9DVFhfTkVXLCBTU0xfUl9YNTA5X1ZFUklG SUNBVElPTl9TRVRVUF9QUk9CTEVNUyk7CisgICAgICAgICBnb3RvIGVycjsKK0BAIC0yOTQxLDEz ICsyOTQ2LDE3IEBAIFNTTF9DVFggKlNTTF9DVFhfbmV3KGNvbnN0IFNTTF9NRVRIT0QgKm0KKyAg ICAgaWYgKHJldC0+cGFyYW0gPT0gTlVMTCkKKyAgICAgICAgIGdvdG8gZXJyOworIAorLSAgICBp ZiAoKHJldC0+bWQ1ID0gRVZQX2dldF9kaWdlc3RieW5hbWUoInNzbDMtbWQ1IikpID09IE5VTEwp IHsKKy0gICAgICAgIFNTTGVycihTU0xfRl9TU0xfQ1RYX05FVywgU1NMX1JfVU5BQkxFX1RPX0xP QURfU1NMM19NRDVfUk9VVElORVMpOworLSAgICAgICAgZ290byBlcnIyOworLSAgICB9CistICAg IGlmICgocmV0LT5zaGExID0gRVZQX2dldF9kaWdlc3RieW5hbWUoInNzbDMtc2hhMSIpKSA9PSBO VUxMKSB7CistICAgICAgICBTU0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsIFNTTF9SX1VOQUJMRV9U T19MT0FEX1NTTDNfU0hBMV9ST1VUSU5FUyk7CistICAgICAgICBnb3RvIGVycjI7CisrICAgIGlm ICghRklQU19tb2RlKCkpIHsKKysgICAgICAgIGlmICgocmV0LT5tZDUgPSBFVlBfZ2V0X2RpZ2Vz dGJ5bmFtZSgic3NsMy1tZDUiKSkgPT0gTlVMTCkgeworKyAgICAgICAgICAgIFNTTGVycihTU0xf Rl9TU0xfQ1RYX05FVywgU1NMX1JfVU5BQkxFX1RPX0xPQURfU1NMM19NRDVfUk9VVElORVMpOwor KyAgICAgICAgICAgIGdvdG8gZXJyMjsKKysgICAgICAgIH0KKysgICAgICAgIGlmICgocmV0LT5z aGExID0gRVZQX2dldF9kaWdlc3RieW5hbWUoInNzbDMtc2hhMSIpKSA9PSBOVUxMKSB7CisrICAg ICAgICAgICAgU1NMZXJyKFNTTF9GX1NTTF9DVFhfTkVXLCBTU0xfUl9VTkFCTEVfVE9fTE9BRF9T U0wzX1NIQTFfUk9VVElORVMpOworKyAgICAgICAgICAgIGdvdG8gZXJyMjsKKysgICAgICAgIH0K KysgICAgfSBlbHNlIHsKKysgICAgICAgIHJldC0+bWluX3Byb3RvX3ZlcnNpb24gPSBUTFMxX1ZF UlNJT047CisgICAgIH0KKyAKKyAgICAgaWYgKChyZXQtPmNhX25hbWVzID0gc2tfWDUwOV9OQU1F X25ld19udWxsKCkpID09IE5VTEwpCitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvdGVzdC9k c2F0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMS4xLXByZTgvdGVzdC9kc2F0ZXN0LmMKKy0tLSBvcGVu c3NsLTEuMS4xLXByZTgvdGVzdC9kc2F0ZXN0LmMuZmlwcwkyMDE4LTA2LTIwIDE2OjQ4OjE0LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC90ZXN0L2RzYXRlc3QuYwkyMDE4 LTA3LTI1IDE3OjI2OjU4LjQxNTYyNDk0MyArMDIwMAorQEAgLTI0LDQxICsyNCw0MiBAQAorICNp Zm5kZWYgT1BFTlNTTF9OT19EU0EKKyBzdGF0aWMgaW50IGRzYV9jYihpbnQgcCwgaW50IG4sIEJO X0dFTkNCICphcmcpOworIAorLS8qCistICogc2VlZCwgb3V0X3AsIG91dF9xLCBvdXRfZyBhcmUg dGFrZW4gZnJvbSB0aGUgdXBkYXRlZCBBcHBlbmRpeCA1IHRvIEZJUFMKKy0gKiBQVUIgMTg2IGFu ZCBhbHNvIGFwcGVhciBpbiBBcHBlbmRpeCA1IHRvIEZJUFMgUElCIDE4Ni0xCistICovCisgc3Rh dGljIHVuc2lnbmVkIGNoYXIgc2VlZFsyMF0gPSB7CistICAgIDB4ZDUsIDB4MDEsIDB4NGUsIDB4 NGIsIDB4NjAsIDB4ZWYsIDB4MmIsIDB4YTgsIDB4YjYsIDB4MjEsIDB4MWIsIDB4NDAsCistICAg IDB4NjIsIDB4YmEsIDB4MzIsIDB4MjQsIDB4ZTAsIDB4NDIsIDB4N2QsIDB4ZDMsCisrICAgIDB4 MDIsIDB4NDcsIDB4MTEsIDB4OTIsIDB4MTEsIDB4ODgsIDB4QzgsIDB4RkIsIDB4QUYsIDB4NDgs IDB4NEMsIDB4NjIsCisrICAgIDB4REYsIDB4QTUsIDB4QkUsIDB4QTAsIDB4QTQsIDB4M0MsIDB4 NTYsIDB4RTMsCisgfTsKKyAKKyBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcFtdID0geworLSAg ICAweDhkLCAweGYyLCAweGE0LCAweDk0LCAweDQ5LCAweDIyLCAweDc2LCAweGFhLAorLSAgICAw eDNkLCAweDI1LCAweDc1LCAweDliLCAweGIwLCAweDY4LCAweDY5LCAweGNiLAorLSAgICAweGVh LCAweGMwLCAweGQ4LCAweDNhLCAweGZiLCAweDhkLCAweDBjLCAweGY3LAorLSAgICAweGNiLCAw eGI4LCAweDMyLCAweDRmLCAweDBkLCAweDc4LCAweDgyLCAweGU1LAorLSAgICAweGQwLCAweDc2 LCAweDJmLCAweGM1LCAweGI3LCAweDIxLCAweDBlLCAweGFmLAorLSAgICAweGMyLCAweGU5LCAw eGFkLCAweGFjLCAweDMyLCAweGFiLCAweDdhLCAweGFjLAorLSAgICAweDQ5LCAweDY5LCAweDNk LCAweGZiLCAweGY4LCAweDM3LCAweDI0LCAweGMyLAorLSAgICAweGVjLCAweDA3LCAweDM2LCAw eGVlLCAweDMxLCAweGM4LCAweDAyLCAweDkxLAorKyAgICAweEFDLCAweENCLCAweDFFLCAweDYz LCAweDYwLCAweDY5LCAweDBDLCAweEZCLCAweDA2LCAweDE5LCAweDY4LCAweDNFLAorKyAgICAw eEE1LCAweDAxLCAweDVBLCAweEEyLCAweDE1LCAweDVDLCAweEUyLCAweDk5LCAweDJELCAweEQ1 LCAweDMwLCAweDk5LAorKyAgICAweDdFLCAweDVGLCAweDhELCAweEUyLCAweEY3LCAweEM2LCAw eDJFLCAweDhELCAweEEzLCAweDlGLCAweDU4LCAweEFELAorKyAgICAweEQ2LCAweEE5LCAweDdE LCAweDBFLCAweDBELCAweDk1LCAweDUzLCAweEE2LCAweDcxLCAweDNBLCAweERFLCAweEFCLAor KyAgICAweEFDLCAweEU5LCAweEY0LCAweDM2LCAweDU1LCAweDlFLCAweEI5LCAweEQ2LCAweDkz LCAweEJGLCAweEYzLCAweDE4LAorKyAgICAweDFDLCAweDE0LCAweDdCLCAweEE1LCAweDQyLCAw eDJFLCAweENELCAweDAwLCAweEVCLCAweDM1LCAweDNCLCAweDFCLAorKyAgICAweEE4LCAweDUx LCAweEJCLCAweEUxLCAweDU4LCAweDQyLCAweDg1LCAweDg0LCAweDIyLCAweEE3LCAweDk3LCAw eDVFLAorKyAgICAweDk5LCAweDZGLCAweDM4LCAweDIwLCAweEJELCAweDlELCAweEI2LCAweEQ5 LCAweDMzLCAweDM3LCAweDJBLCAweEZELAorKyAgICAweEJCLCAweEQ0LCAweEJDLCAweDBDLCAw eDJBLCAweDY3LCAweENCLCAweDlGLCAweEJCLCAweERGLCAweEY5LCAweDkzLAorKyAgICAweEFB LCAweEQ2LCAweEYwLCAweEQ2LCAweDk1LCAweDBCLCAweDVELCAweDY1LCAweDE0LCAweEQwLCAw eDE4LCAweDlELAorKyAgICAweEM2LCAweEFGLCAweEYwLCAweEM2LCAweDM3LCAweDdDLCAweEYz LCAweDVGLAorIH07CisgCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3FbXSA9IHsKKy0gICAg MHhjNywgMHg3MywgMHgyMSwgMHg4YywgMHg3MywgMHg3ZSwgMHhjOCwgMHhlZSwKKy0gICAgMHg5 OSwgMHgzYiwgMHg0ZiwgMHgyZCwgMHhlZCwgMHgzMCwgMHhmNCwgMHg4ZSwKKy0gICAgMHhkYSwg MHhjZSwgMHg5MSwgMHg1ZiwKKysgICAgMHhFMywgMHg4RSwgMHg1RSwgMHg2RCwgMHhCRiwgMHgy QiwgMHg3OSwgMHhGOCwgMHhDNSwgMHg0QiwgMHg4OSwgMHg4QiwKKysgICAgMHhCQSwgMHgyRCwg MHg5MSwgMHhDMywgMHg2QywgMHg4MCwgMHhBQywgMHg4NywKKyB9OworIAorIHN0YXRpYyB1bnNp Z25lZCBjaGFyIG91dF9nW10gPSB7CistICAgIDB4NjIsIDB4NmQsIDB4MDIsIDB4NzgsIDB4Mzks IDB4ZWEsIDB4MGEsIDB4MTMsCistICAgIDB4NDEsIDB4MzEsIDB4NjMsIDB4YTUsIDB4NWIsIDB4 NGMsIDB4YjUsIDB4MDAsCistICAgIDB4MjksIDB4OWQsIDB4NTUsIDB4MjIsIDB4OTUsIDB4NmMs IDB4ZWYsIDB4Y2IsCistICAgIDB4M2IsIDB4ZmYsIDB4MTAsIDB4ZjMsIDB4OTksIDB4Y2UsIDB4 MmMsIDB4MmUsCistICAgIDB4NzEsIDB4Y2IsIDB4OWQsIDB4ZTUsIDB4ZmEsIDB4MjQsIDB4YmEs IDB4YmYsCistICAgIDB4NTgsIDB4ZTUsIDB4YjcsIDB4OTUsIDB4MjEsIDB4OTIsIDB4NWMsIDB4 OWMsCistICAgIDB4YzQsIDB4MmUsIDB4OWYsIDB4NmYsIDB4NDYsIDB4NGIsIDB4MDgsIDB4OGMs CistICAgIDB4YzUsIDB4NzIsIDB4YWYsIDB4NTMsIDB4ZTYsIDB4ZDcsIDB4ODgsIDB4MDIsCisr ICAgIDB4NDIsIDB4NEEsIDB4MDQsIDB4NEUsIDB4NzksIDB4QjQsIDB4OTksIDB4N0YsIDB4RkQs IDB4NTgsIDB4MzYsIDB4MkMsCisrICAgIDB4MUIsIDB4NUYsIDB4MTgsIDB4N0UsIDB4MEQsIDB4 Q0MsIDB4QUIsIDB4ODEsIDB4QzksIDB4NUQsIDB4MTAsIDB4Q0UsCisrICAgIDB4NEUsIDB4ODAs IDB4N0UsIDB4NTgsIDB4QjQsIDB4MzQsIDB4M0YsIDB4QTcsIDB4NDUsIDB4QzcsIDB4QUEsIDB4 MzYsCisrICAgIDB4MjQsIDB4NDIsIDB4QTksIDB4M0IsIDB4RTgsIDB4MEUsIDB4MDQsIDB4MDIs IDB4MkQsIDB4RkIsIDB4QTYsIDB4MTMsCisrICAgIDB4QjksIDB4QjUsIDB4MTUsIDB4QTUsIDB4 NTYsIDB4MDcsIDB4MzUsIDB4RTQsIDB4MDMsIDB4QjYsIDB4NzksIDB4N0MsCisrICAgIDB4NjIs IDB4REQsIDB4REYsIDB4M0YsIDB4NzEsIDB4M0EsIDB4OUQsIDB4OEIsIDB4QzQsIDB4RjYsIDB4 RTcsIDB4MUQsCisrICAgIDB4NTIsIDB4QTgsIDB4QTksIDB4NDMsIDB4MUQsIDB4MzMsIDB4NTEs IDB4ODgsIDB4MzksIDB4QkQsIDB4NzMsIDB4RTksCisrICAgIDB4NUYsIDB4QkUsIDB4ODIsIDB4 NDksIDB4MjcsIDB4RTYsIDB4QjUsIDB4NTMsIDB4QzEsIDB4MzgsIDB4QUMsIDB4MkYsCisrICAg IDB4NkQsIDB4OTcsIDB4NkMsIDB4RUIsIDB4NjcsIDB4QzEsIDB4NUYsIDB4NjcsIDB4RjgsIDB4 MzUsIDB4MDUsIDB4NUUsCisrICAgIDB4RDUsIDB4NjgsIDB4ODAsIDB4QUEsIDB4OTYsIDB4Q0Es IDB4MEIsIDB4OEEsIDB4RTYsIDB4RjEsIDB4QjEsIDB4NDEsCisrICAgIDB4QzYsIDB4NzUsIDB4 OTQsIDB4MEEsIDB4MEEsIDB4MkEsIDB4RkEsIDB4MjksCisgfTsKKyAKKyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzdHIxW10gPSAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOworQEAgLTc5LDEx ICs4MCwxMSBAQCBzdGF0aWMgaW50IGRzYV90ZXN0KHZvaWQpCisgCisgICAgIEJOX0dFTkNCX3Nl dChjYiwgZHNhX2NiLCBOVUxMKTsKKyAgICAgaWYgKCFURVNUX3B0cihkc2EgPSBEU0FfbmV3KCkp CistICAgICAgICB8fCAhVEVTVF90cnVlKERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwg NTEyLCBzZWVkLCAyMCwKKysgICAgICAgIHx8ICFURVNUX3RydWUoRFNBX2dlbmVyYXRlX3BhcmFt ZXRlcnNfZXgoZHNhLCAxMDI0LCBzZWVkLCAyMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmY291bnRlciwgJmgsIGNiKSkpCisgICAgICAgICBnb3Rv IGVuZDsKKyAKKy0gICAgaWYgKCFURVNUX2ludF9lcShjb3VudGVyLCAxMDUpKQorKyAgICBpZiAo IVRFU1RfaW50X2VxKGNvdW50ZXIsIDIzOSkpCisgICAgICAgICBnb3RvIGVuZDsKKyAgICAgaWYg KCFURVNUX2ludF9lcShoLCAyKSkKKyAgICAgICAgIGdvdG8gZW5kOworZGlmZiAtdXAgb3BlbnNz bC0xLjEuMS1wcmU4L3V0aWwvbGliY3J5cHRvLm51bS5maXBzIG9wZW5zc2wtMS4xLjEtcHJlOC91 dGlsL2xpYmNyeXB0by5udW0KKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvdXRpbC9saWJjcnlwdG8u bnVtLmZpcHMJMjAxOC0wNi0yMCAxNjo0ODoxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMS4xLXByZTgvdXRpbC9saWJjcnlwdG8ubnVtCTIwMTgtMDctMjUgMTc6NDk6MzEuOTA5MDQz MDQ5ICswMjAwCitAQCAtNDU2OCwzICs0NTY4LDM4IEBAIEVWUF9QS0VZX2dldF9yYXdfcHJpdmF0 ZV9rZXkKKyBFVlBfUEtFWV9hc24xX3NldF9nZXRfcHJpdl9rZXkgICAgICAgICAgNDUyMAkxXzFf MQlFWElTVDo6RlVOQ1RJT046CisgRVZQX1BLRVlfYXNuMV9zZXRfZ2V0X3B1Yl9rZXkgICAgICAg ICAgIDQ1MjEJMV8xXzEJRVhJU1Q6OkZVTkNUSU9OOgorIEVWUF9QS0VZX3NldF9hbGlhc190eXBl ICAgICAgICAgICAgICAgICA0NTIyCTFfMV8xCUVYSVNUOjpGVU5DVElPTjoKKytGSVBTX2RyYmdf cmVzZWVkICAgICAgICAgICAgICAgICAgICAgICAgNjM0OAkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9O OgorK0ZJUFNfc2VsZnRlc3RfY2hlY2sgICAgICAgICAgICAgICAgICAgICA2MzQ5CTFfMV8wZwlF WElTVDo6RlVOQ1RJT046CisrRklQU19yYW5kX3NldF9tZXRob2QgICAgICAgICAgICAgICAgICAg IDYzNTAJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKKytGSVBTX2dldF9kZWZhdWx0X2RyYmcgICAg ICAgICAgICAgICAgICAgNjM1MQkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgorK0ZJUFNfZHJiZ19z ZXRfcmVzZWVkX2ludGVydmFsICAgICAgICAgICA2MzUyCTFfMV8wZwlFWElTVDo6RlVOQ1RJT046 CisrRklQU19kcmJnX3NldF9hcHBfZGF0YSAgICAgICAgICAgICAgICAgIDYzNTMJMV8xXzBnCUVY SVNUOjpGVU5DVElPTjoKKytGSVBTX2RyYmdfbWV0aG9kICAgICAgICAgICAgICAgICAgICAgICAg NjM1NAkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgorK0ZJUFNfcmFuZF9zdGF0dXMgICAgICAgICAg ICAgICAgICAgICAgICA2MzU1CTFfMV8wZwlFWElTVDo6RlVOQ1RJT046CisrRklQU19kcmJnX2lu c3RhbnRpYXRlICAgICAgICAgICAgICAgICAgIDYzNTYJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoK KytGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyAgICAgICAgICAgICAgICAgNjM1NwkxXzFfMGcJRVhJ U1Q6OkZVTkNUSU9OOgorK0ZJUFNfZHJiZ19uZXcgICAgICAgICAgICAgICAgICAgICAgICAgICA2 MzU4CTFfMV8wZwlFWElTVDo6RlVOQ1RJT046CisrRklQU19kc2FfcGFyYW1nZW5fY2hlY2tfZyAg ICAgICAgICAgICAgIDYzNTkJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKKytGSVBTX3NlbGZ0ZXN0 ICAgICAgICAgICAgICAgICAgICAgICAgICAgNjM2MAkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgor K0ZJUFNfcmFuZF9zZXRfYml0cyAgICAgICAgICAgICAgICAgICAgICA2MzYxCTFfMV8wZwlFWElT VDo6RlVOQ1RJT046CisrRklQU19yYW5kX2J5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIDYz NjIJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKKytGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhICAgICAg ICAgICAgICAgICAgNjM2MwkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgorK0ZJUFNfc2VsZnRlc3Rf ZmFpbGVkICAgICAgICAgICAgICAgICAgICA2MzY0CTFfMV8wZwlFWElTVDo6RlVOQ1RJT046Cisr RklQU19kc2FfYnVpbHRpbl9wYXJhbWdlbjIgICAgICAgICAgICAgIDYzNjUJMV8xXzBnCUVYSVNU OjpGVU5DVElPTjoKKytGSVBTX3JhbmRfcmVzZXQgICAgICAgICAgICAgICAgICAgICAgICAgNjM2 NgkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgorK0VSUl9sb2FkX0ZJUFNfc3RyaW5ncyAgICAgICAg ICAgICAgICAgICA2MzY3CTFfMV8wZwlFWElTVDo6RlVOQ1RJT046CisrRklQU19kcmJnX2dlbmVy YXRlICAgICAgICAgICAgICAgICAgICAgIDYzNjgJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKKytG SVBTX2RyYmdfdW5pbnN0YW50aWF0ZSAgICAgICAgICAgICAgICAgNjM2OQkxXzFfMGcJRVhJU1Q6 OkZVTkNUSU9OOgorK0ZJUFNfZHJiZ19zZXRfY2hlY2tfaW50ZXJ2YWwgICAgICAgICAgICA2Mzcw CTFfMV8wZwlFWElTVDo6RlVOQ1RJT046CisrRklQU19kcmJnX2ZyZWUgICAgICAgICAgICAgICAg ICAgICAgICAgIDYzNzEJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKKytGSVBTX3NlbGZ0ZXN0X2Ry YmdfYWxsICAgICAgICAgICAgICAgICAgNjM3MgkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgorK0ZJ UFNfcmFuZF9nZXRfbWV0aG9kICAgICAgICAgICAgICAgICAgICA2MzczCTFfMV8wZwlFWElTVDo6 RlVOQ1RJT046CisrUkFORF9zZXRfZmlwc19kcmJnX3R5cGUgICAgICAgICAgICAgICAgIDYzNzQJ MV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKKytGSVBTX2RyYmdfaGVhbHRoX2NoZWNrICAgICAgICAg ICAgICAgICAgNjM3NQkxXzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgorK1JBTkRfaW5pdF9maXBzICAg ICAgICAgICAgICAgICAgICAgICAgICA2Mzc2CTFfMV8wZwlFWElTVDo6RlVOQ1RJT046CisrRklQ U19kcmJnX3NldF9yYW5kX2NhbGxiYWNrcyAgICAgICAgICAgIDYzNzcJMV8xXzBnCUVYSVNUOjpG VU5DVElPTjoKKytGSVBTX3JhbmRfc2VlZCAgICAgICAgICAgICAgICAgICAgICAgICAgNjM3OAkx XzFfMGcJRVhJU1Q6OkZVTkNUSU9OOgorK0ZJUFNfZHJiZ19nZXRfc3RyZW5ndGggICAgICAgICAg ICAgICAgICA2Mzc5CTFfMV8wZwlFWElTVDo6RlVOQ1RJT046CisrRklQU19yYW5kX3N0cmVuZ3Ro ICAgICAgICAgICAgICAgICAgICAgIDYzODAJMV8xXzBnCUVYSVNUOjpGVU5DVElPTjoKKytGSVBT X2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoICAgICAgICAgICAgICAgNjM4MQkxXzFfMGcJRVhJU1Q6OkZV TkNUSU9OOgorK0ZJUFNfZHJiZ19pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICA2MzgyCTFf MV8wZwlFWElTVDo6RlVOQ1RJT046CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjEuMS1tYW4tcmVu YW1lLnBhdGNoIGIvb3BlbnNzbC0xLjEuMS1tYW4tcmVuYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZWY1NDkKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3Ns LTEuMS4xLW1hbi1yZW5hbWUucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorZGlmZiAtdXAgb3BlbnNz bC0xLjEuMS1wcmUyL2RvYy9tYW4xL29wZW5zc2wucG9kLm1hbi1yZW5hbWUgb3BlbnNzbC0xLjEu MS1wcmUyL2RvYy9tYW4xL29wZW5zc2wucG9kCistLS0gb3BlbnNzbC0xLjEuMS1wcmUyL2RvYy9t YW4xL29wZW5zc2wucG9kLm1hbi1yZW5hbWUJMjAxOC0wMi0yNyAxNDo0MDo0My4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTIvZG9jL21hbjEvb3BlbnNzbC5wb2QJMjAxOC0w My0wNiAxNTozMjo0NC43Mzc2NTI5MzkgKzAxMDAKK0BAIC0xNzAsNyArMTcwLDcgQEAgQ3JlYXRl IG9yIGV4YW1pbmUgYSBOZXRzY2FwZSBjZXJ0aWZpY2F0ZQorIAorIE9ubGluZSBDZXJ0aWZpY2F0 ZSBTdGF0dXMgUHJvdG9jb2wgdXRpbGl0eS4KKyAKKy09aXRlbSBMPEI8cGFzc3dkPnxwYXNzd2Qo MSk+CisrPWl0ZW0gTDxCPHBhc3N3ZD58c3NscGFzc3dkKDEpPgorIAorIEdlbmVyYXRpb24gb2Yg aGFzaGVkIHBhc3N3b3Jkcy4KKyAKK0BAIC0yMDIsNyArMjAyLDcgQEAgUHVibGljIGtleSBhbGdv cml0aG0gY3J5cHRvZ3JhcGhpYyBvcGVyYQorIAorIENvbXB1dGUgcHJpbWUgbnVtYmVycy4KKyAK Ky09aXRlbSBMPEI8cmFuZD58cmFuZCgxKT4KKys9aXRlbSBMPEI8cmFuZD58c3NscmFuZCgxKT4K KyAKKyBHZW5lcmF0ZSBwc2V1ZG8tcmFuZG9tIGJ5dGVzLgorIAorQEAgLTQ0NCwxMyArNDQ0LDEz IEBAIEw8ZGhwYXJhbSgxKT4sIEw8ZHNhKDEpPiwgTDxkc2FwYXJhbSgxKT4KKyBMPGVjKDEpPiwg TDxlY3BhcmFtKDEpPiwKKyBMPGVuYygxKT4sIEw8ZW5naW5lKDEpPiwgTDxlcnJzdHIoMSk+LCBM PGdlbmRzYSgxKT4sIEw8Z2VucGtleSgxKT4sCisgTDxnZW5yc2EoMSk+LCBMPG5zZXEoMSk+LCBM PG9jc3AoMSk+LAorLUw8cGFzc3dkKDEpPiwKKyBMPHBrY3MxMigxKT4sIEw8cGtjczcoMSk+LCBM PHBrY3M4KDEpPiwKKyBMPHBrZXkoMSk+LCBMPHBrZXlwYXJhbSgxKT4sIEw8cGtleXV0bCgxKT4s IEw8cHJpbWUoMSk+LAorLUw8cmFuZCgxKT4sIEw8cmVoYXNoKDEpPiwgTDxyZXEoMSk+LCBMPHJz YSgxKT4sCisrTDxyZWhhc2goMSk+LCBMPHJlcSgxKT4sIEw8cnNhKDEpPiwKKyBMPHJzYXV0bCgx KT4sIEw8c19jbGllbnQoMSk+LAorIEw8c19zZXJ2ZXIoMSk+LCBMPHNfdGltZSgxKT4sIEw8c2Vz c19pZCgxKT4sCisgTDxzbWltZSgxKT4sIEw8c3BlZWQoMSk+LCBMPHNwa2FjKDEpPiwgTDxzcnAo MSk+LCBMPHN0b3JldXRsKDEpPiwKKytMPHNzbHBhc3N3ZCgxKT4sIEw8c3NscmFuZCgxKT4sCisg TDx0cygxKT4sCisgTDx2ZXJpZnkoMSk+LCBMPHZlcnNpb24oMSk+LCBMPHg1MDkoMSk+LAorIEw8 Y3J5cHRvKDcpPiwgTDxzc2woNyk+LCBMPHg1MDl2M19jb25maWcoNSk+CgpkaWZmIC0tZ2l0IGEv b3BlbnNzbC0xLjEuMS1zZWN1cmUtZ2V0ZW52LnBhdGNoIGIvb3BlbnNzbC0xLjEuMS1zZWN1cmUt Z2V0ZW52LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZDE0YTEK LS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMS4xLXNlY3VyZS1nZXRlbnYucGF0Y2gKQEAg LTAsMCArMSwxNzMgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vY29uZi9j b25mX2FwaS5jLnNlY3VyZS1nZXRlbnYgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9jb25mL2Nv bmZfYXBpLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2NvbmYvY29uZl9hcGkuYy5z ZWN1cmUtZ2V0ZW52CTIwMTgtMDYtMjAgMTY6NDg6MTAuMDAwMDAwMDAwICswMjAwCisrKysgb3Bl bnNzbC0xLjEuMS1wcmU4L2NyeXB0by9jb25mL2NvbmZfYXBpLmMJMjAxOC0wNy0xNiAxODowMTox MS43MDgzNTk3NjYgKzAyMDAKK0BAIC05LDYgKzksOCBAQAorIAorIC8qIFBhcnQgb2YgdGhlIGNv ZGUgaW4gaGVyZSB3YXMgb3JpZ2luYWxseSBpbiBjb25mLmMsIHdoaWNoIGlzIG5vdyByZW1vdmVk ICovCisgCisrLyogZm9yIHNlY3VyZV9nZXRlbnYgKi8KKysjZGVmaW5lIF9HTlVfU09VUkNFCisg I2luY2x1ZGUgImVfb3MuaCIKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmlu Zy5oPgorQEAgLTgyLDcgKzg0LDcgQEAgY2hhciAqX0NPTkZfZ2V0X3N0cmluZyhjb25zdCBDT05G ICpjb25mLAorICAgICAgICAgICAgIGlmICh2ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgIHJl dHVybiB2LT52YWx1ZTsKKyAgICAgICAgICAgICBpZiAoc3RyY21wKHNlY3Rpb24sICJFTlYiKSA9 PSAwKSB7CistICAgICAgICAgICAgICAgIHAgPSBnZXRlbnYobmFtZSk7CisrICAgICAgICAgICAg ICAgIHAgPSBzZWN1cmVfZ2V0ZW52KG5hbWUpOworICAgICAgICAgICAgICAgICBpZiAocCAhPSBO VUxMKQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgICAgICAgfQorZGlm ZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9jb25mL2NvbmZfbW9kLmMuc2VjdXJlLWdl dGVudiBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2NvbmYvY29uZl9tb2QuYworLS0tIG9wZW5z c2wtMS4xLjEtcHJlOC9jcnlwdG8vY29uZi9jb25mX21vZC5jLnNlY3VyZS1nZXRlbnYJMjAxOC0w Ni0yMCAxNjo0ODoxMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvY3J5 cHRvL2NvbmYvY29uZl9tb2QuYwkyMDE4LTA3LTE2IDE4OjAyOjM3LjMwODM4Mzk1NSArMDIwMAor QEAgLTcsNiArNyw4IEBACisgICogaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL2xpY2Vu c2UuaHRtbAorICAqLworIAorKy8qIGZvciBzZWN1cmVfZ2V0ZW52ICovCisrI2RlZmluZSBfR05V X1NPVVJDRQorICNpbmNsdWRlICJpbnRlcm5hbC9jcnlwdGxpYi5oIgorICNpbmNsdWRlIDxzdGRp by5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorQEAgLTQ4MSw3ICs0ODMsNyBAQCBjaGFyICpDT05G X2dldDFfZGVmYXVsdF9jb25maWdfZmlsZSh2b2lkCisgICAgIGludCBsZW47CisgCisgICAgIGlm ICghT1BFTlNTTF9pc3NldHVnaWQoKSkgeworLSAgICAgICAgZmlsZSA9IGdldGVudigiT1BFTlNT TF9DT05GIik7CisrICAgICAgICBmaWxlID0gc2VjdXJlX2dldGVudigiT1BFTlNTTF9DT05GIik7 CisgICAgICAgICBpZiAoZmlsZSkKKyAgICAgICAgICAgICByZXR1cm4gT1BFTlNTTF9zdHJkdXAo ZmlsZSk7CisgICAgIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vY3QvY3Rf bG9nLmMuc2VjdXJlLWdldGVudiBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2N0L2N0X2xvZy5j CistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9jdC9jdF9sb2cuYy5zZWN1cmUtZ2V0ZW52 CTIwMTgtMDYtMjAgMTY6NDg6MTAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1w cmU4L2NyeXB0by9jdC9jdF9sb2cuYwkyMDE4LTA3LTE2IDE4OjAxOjExLjcwODM1OTc2NiArMDIw MAorQEAgLTcsNiArNyw4IEBACisgICogaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL2xp Y2Vuc2UuaHRtbAorICAqLworIAorKy8qIGZvciBzZWN1cmVfZ2V0ZW52ICovCisrI2RlZmluZSBf R05VX1NPVVJDRQorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+Cisg CitAQCAtMTM3LDcgKzEzOSw3IEBAIHN0YXRpYyBpbnQgY3Rsb2dfbmV3X2Zyb21fY29uZihDVExP RyAqKmMKKyAKKyBpbnQgQ1RMT0dfU1RPUkVfbG9hZF9kZWZhdWx0X2ZpbGUoQ1RMT0dfU1RPUkUg KnN0b3JlKQorIHsKKy0gICAgY29uc3QgY2hhciAqZnBhdGggPSBnZXRlbnYoQ1RMT0dfRklMRV9F VlApOworKyAgICBjb25zdCBjaGFyICpmcGF0aCA9IHNlY3VyZV9nZXRlbnYoQ1RMT0dfRklMRV9F VlApOworIAorICAgICBpZiAoZnBhdGggPT0gTlVMTCkKKyAgICAgICBmcGF0aCA9IENUTE9HX0ZJ TEU7CitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL2VuZ2luZS9lbmdfbGlzdC5j LnNlY3VyZS1nZXRlbnYgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9lbmdpbmUvZW5nX2xpc3Qu YworLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vZW5naW5lL2VuZ19saXN0LmMuc2VjdXJl LWdldGVudgkyMDE4LTA2LTIwIDE2OjQ4OjEwLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4xLjEtcHJlOC9jcnlwdG8vZW5naW5lL2VuZ19saXN0LmMJMjAxOC0wNy0xNiAxODowMzowMy4x OTA5OTYwMDQgKzAyMDAKK0BAIC04LDYgKzgsOCBAQAorICAqIGh0dHBzOi8vd3d3Lm9wZW5zc2wu b3JnL3NvdXJjZS9saWNlbnNlLmh0bWwKKyAgKi8KKyAKKysvKiBmb3Igc2VjdXJlX2dldGVudiAq LworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSAiZW5nX2ludC5oIgorIAorIC8qCitA QCAtMzE4LDcgKzMyMCw3IEBAIEVOR0lORSAqRU5HSU5FX2J5X2lkKGNvbnN0IGNoYXIgKmlkKQor ICAgICAgKi8KKyAgICAgaWYgKHN0cmNtcChpZCwgImR5bmFtaWMiKSkgeworICAgICAgICAgaWYg KE9QRU5TU0xfaXNzZXR1Z2lkKCkKKy0gICAgICAgICAgICAgICAgfHwgKGxvYWRfZGlyID0gZ2V0 ZW52KCJPUEVOU1NMX0VOR0lORVMiKSkgPT0gTlVMTCkKKysgICAgICAgICAgICAgICAgfHwgKGxv YWRfZGlyID0gc2VjdXJlX2dldGVudigiT1BFTlNTTF9FTkdJTkVTIikpID09IE5VTEwpCisgICAg ICAgICAgICAgbG9hZF9kaXIgPSBFTkdJTkVTRElSOworICAgICAgICAgaXRlcmF0b3IgPSBFTkdJ TkVfYnlfaWQoImR5bmFtaWMiKTsKKyAgICAgICAgIGlmICghaXRlcmF0b3IgfHwgIUVOR0lORV9j dHJsX2NtZF9zdHJpbmcoaXRlcmF0b3IsICJJRCIsIGlkLCAwKSB8fAorZGlmZiAtdXAgb3BlbnNz bC0xLjEuMS1wcmU4L2NyeXB0by9tZW0uYy5zZWN1cmUtZ2V0ZW52IG9wZW5zc2wtMS4xLjEtcHJl OC9jcnlwdG8vbWVtLmMKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL21lbS5jLnNlY3Vy ZS1nZXRlbnYJMjAxOC0wNi0yMCAxNjo0ODoxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMS4xLXByZTgvY3J5cHRvL21lbS5jCTIwMTgtMDctMTYgMTg6MDE6MTEuNzA5MzU5NzkwICsw MjAwCitAQCAtNyw2ICs3LDggQEAKKyAgKiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2Uv bGljZW5zZS5odG1sCisgICovCisgCisrLyogZm9yIHNlY3VyZV9nZXRlbnYgKi8KKysjZGVmaW5l IF9HTlVfU09VUkNFCisgI2luY2x1ZGUgImVfb3MuaCIKKyAjaW5jbHVkZSAiaW50ZXJuYWwvY3J5 cHRsaWIuaCIKKyAjaW5jbHVkZSAiaW50ZXJuYWwvY3J5cHRsaWJfaW50LmgiCitAQCAtMTgwLDEx ICsxODIsMTEgQEAgc3RhdGljIGludCBzaG91bGRmYWlsKHZvaWQpCisgCisgdm9pZCBvc3NsX21h bGxvY19zZXR1cF9mYWlsdXJlcyh2b2lkKQorIHsKKy0gICAgY29uc3QgY2hhciAqY3AgPSBnZXRl bnYoIk9QRU5TU0xfTUFMTE9DX0ZBSUxVUkVTIik7CisrICAgIGNvbnN0IGNoYXIgKmNwID0gc2Vj dXJlX2dldGVudigiT1BFTlNTTF9NQUxMT0NfRkFJTFVSRVMiKTsKKyAKKyAgICAgaWYgKGNwICE9 IE5VTEwgJiYgKG1kX2ZhaWxzdHJpbmcgPSBzdHJkdXAoY3ApKSAhPSBOVUxMKQorICAgICAgICAg cGFyc2VpdCgpOworLSAgICBpZiAoKGNwID0gZ2V0ZW52KCJPUEVOU1NMX01BTExPQ19GRCIpKSAh PSBOVUxMKQorKyAgICBpZiAoKGNwID0gc2VjdXJlX2dldGVudigiT1BFTlNTTF9NQUxMT0NfRkQi KSkgIT0gTlVMTCkKKyAgICAgICAgIG1kX3RyYWNlZmQgPSBhdG9pKGNwKTsKKyB9CisgI2VuZGlm CitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvY3J5cHRvL3JhbmQvcmFuZGZpbGUuYy5zZWN1 cmUtZ2V0ZW52IG9wZW5zc2wtMS4xLjEtcHJlOC9jcnlwdG8vcmFuZC9yYW5kZmlsZS5jCistLS0g b3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by9yYW5kL3JhbmRmaWxlLmMuc2VjdXJlLWdldGVudgky MDE4LTA2LTIwIDE2OjQ4OjExLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJl OC9jcnlwdG8vcmFuZC9yYW5kZmlsZS5jCTIwMTgtMDctMTYgMTg6MDE6MTEuNzA5MzU5NzkwICsw MjAwCitAQCAtNyw2ICs3LDggQEAKKyAgKiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2Uv bGljZW5zZS5odG1sCisgICovCisgCisrLyogZm9yIHNlY3VyZV9nZXRlbnYgKi8KKysjZGVmaW5l IF9HTlVfU09VUkNFCisgI2luY2x1ZGUgImludGVybmFsL2NyeXB0bGliLmgiCisgCisgI2luY2x1 ZGUgPGVycm5vLmg+CitAQCAtMjY0LDcgKzI2Niw3IEBAIGNvbnN0IGNoYXIgKlJBTkRfZmlsZV9u YW1lKGNoYXIgKmJ1Ziwgc2kKKyAjZWxzZQorICAgICBpZiAoT1BFTlNTTF9pc3NldHVnaWQoKSAh PSAwKSB7CisgICAgICAgICB1c2VfcmFuZGZpbGUgPSAwOworLSAgICB9IGVsc2UgaWYgKChzID0g Z2V0ZW52KCJSQU5ERklMRSIpKSA9PSBOVUxMIHx8ICpzID09ICdcMCcpIHsKKysgICAgfSBlbHNl IGlmICgocyA9IHNlY3VyZV9nZXRlbnYoIlJBTkRGSUxFIikpID09IE5VTEwgfHwgKnMgPT0gJ1ww JykgeworICAgICAgICAgdXNlX3JhbmRmaWxlID0gMDsKKyAgICAgICAgIHMgPSBnZXRlbnYoIkhP TUUiKTsKKyAgICAgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by94NTA5L2J5 X2Rpci5jLnNlY3VyZS1nZXRlbnYgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by94NTA5L2J5X2Rp ci5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by94NTA5L2J5X2Rpci5jLnNlY3VyZS1n ZXRlbnYJMjAxOC0wNi0yMCAxNjo0ODoxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEu MS4xLXByZTgvY3J5cHRvL3g1MDkvYnlfZGlyLmMJMjAxOC0wNy0xNiAxODowMzo0My4zNTU5NDU3 ODYgKzAyMDAKK0BAIC03LDYgKzcsOCBAQAorICAqIGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnL3Nv dXJjZS9saWNlbnNlLmh0bWwKKyAgKi8KKyAKKysvKiBmb3Igc2VjdXJlX2dldGVudiAqLworKyNk ZWZpbmUgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSAiZV9vcy5oIgorICNpbmNsdWRlICJpbnRlcm5h bC9jcnlwdGxpYi5oIgorICNpbmNsdWRlIDxzdGRpby5oPgorQEAgLTczLDcgKzc1LDcgQEAgc3Rh dGljIGludCBkaXJfY3RybChYNTA5X0xPT0tVUCAqY3R4LCBpbgorICAgICBzd2l0Y2ggKGNtZCkg eworICAgICBjYXNlIFg1MDlfTF9BRERfRElSOgorICAgICAgICAgaWYgKGFyZ2wgPT0gWDUwOV9G SUxFVFlQRV9ERUZBVUxUKSB7CistICAgICAgICAgICAgY29uc3QgY2hhciAqZGlyID0gZ2V0ZW52 KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXJfZW52KCkpOworKyAgICAgICAgICAgIGNvbnN0IGNo YXIgKmRpciA9IHNlY3VyZV9nZXRlbnYoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2Rpcl9lbnYoKSk7 CisgCisgICAgICAgICAgICAgaWYgKGRpcikKKyAgICAgICAgICAgICAgICAgcmV0ID0gYWRkX2Nl cnRfZGlyKGxkLCBkaXIsIFg1MDlfRklMRVRZUEVfUEVNKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4x LjEtcHJlOC9jcnlwdG8veDUwOS9ieV9maWxlLmMuc2VjdXJlLWdldGVudiBvcGVuc3NsLTEuMS4x LXByZTgvY3J5cHRvL3g1MDkvYnlfZmlsZS5jCistLS0gb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0 by94NTA5L2J5X2ZpbGUuYy5zZWN1cmUtZ2V0ZW52CTIwMTgtMDYtMjAgMTY6NDg6MTEuMDAwMDAw MDAwICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2NyeXB0by94NTA5L2J5X2ZpbGUuYwky MDE4LTA3LTE2IDE4OjAxOjExLjcwOTM1OTc5MCArMDIwMAorQEAgLTcsNiArNyw4IEBACisgICog aHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL2xpY2Vuc2UuaHRtbAorICAqLworIAorKy8q IGZvciBzZWN1cmVfZ2V0ZW52ICovCisrI2RlZmluZSBfR05VX1NPVVJDRQorICNpbmNsdWRlIDxz dGRpby5oPgorICNpbmNsdWRlIDx0aW1lLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CitAQCAtNDYs NyArNDgsNyBAQCBzdGF0aWMgaW50IGJ5X2ZpbGVfY3RybChYNTA5X0xPT0tVUCAqY3R4CisgICAg IHN3aXRjaCAoY21kKSB7CisgICAgIGNhc2UgWDUwOV9MX0ZJTEVfTE9BRDoKKyAgICAgICAgIGlm IChhcmdsID09IFg1MDlfRklMRVRZUEVfREVGQVVMVCkgeworLSAgICAgICAgICAgIGZpbGUgPSBn ZXRlbnYoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGVfZW52KCkpOworKyAgICAgICAgICAgIGZp bGUgPSBzZWN1cmVfZ2V0ZW52KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlX2VudigpKTsKKyAg ICAgICAgICAgICBpZiAoZmlsZSkKKyAgICAgICAgICAgICAgICAgb2sgPSAoWDUwOV9sb2FkX2Nl cnRfY3JsX2ZpbGUoY3R4LCBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSkgIT0gMCk7CgpkaWZmIC0tZ2l0IGEvb3Bl bnNzbC0xLjEuMS1zeXN0ZW0tY2lwaGVybGlzdC5wYXRjaCBiL29wZW5zc2wtMS4xLjEtc3lzdGVt LWNpcGhlcmxpc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThj MDg1MQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4xLjEtc3lzdGVtLWNpcGhlcmxpc3Qu cGF0Y2gKQEAgLTAsMCArMSwzMTAgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9Db25m aWd1cmF0aW9ucy91bml4LU1ha2VmaWxlLnRtcGwuc3lzdGVtLWNpcGhlcmxpc3Qgb3BlbnNzbC0x LjEuMS1wcmU4L0NvbmZpZ3VyYXRpb25zL3VuaXgtTWFrZWZpbGUudG1wbAorLS0tIG9wZW5zc2wt MS4xLjEtcHJlOC9Db25maWd1cmF0aW9ucy91bml4LU1ha2VmaWxlLnRtcGwuc3lzdGVtLWNpcGhl cmxpc3QJMjAxOC0wNy0yNSAxMDoxMzowNi4zMjUyMzIzNTYgKzAyMDAKKysrKyBvcGVuc3NsLTEu MS4xLXByZTgvQ29uZmlndXJhdGlvbnMvdW5peC1NYWtlZmlsZS50bXBsCTIwMTgtMDctMjUgMTA6 MTg6MjcuMDY3ODYzMjUxICswMjAwCitAQCAtMTc2LDYgKzE3NiwxMCBAQCBNQU5ESVI9JChJTlNU QUxMVE9QKS9zaGFyZS9tYW4KKyBET0NESVI9JChJTlNUQUxMVE9QKS9zaGFyZS9kb2MvJChCQVNF TkFNRSkKKyBIVE1MRElSPSQoRE9DRElSKS9odG1sCisgCisrey0gb3V0cHV0X29mZigpIGlmICRj b25maWd7c3lzdGVtX2NpcGhlcnNfZmlsZX0gZXEgIiI7ICIiIC19CisrU1lTVEVNX0NJUEhFUlNf RklMRV9ERUZJTkU9LURTWVNURU1fQ0lQSEVSU19GSUxFPSJcInstICRjb25maWd7c3lzdGVtX2Np cGhlcnNfZmlsZX0gLX1cIiIKKyt7LSBvdXRwdXRfb24oKSBpZiAkY29uZmlne3N5c3RlbV9jaXBo ZXJzX2ZpbGV9IGVxICIiOyAiIiAtfQorKworICMgTUFOU1VGRklYIGlzIGZvciB0aGUgYmVuZWZp dCBvZiBhbnlvbmUgd2hvIG1heSB3YW50IHRvIGhhdmUgYSBzdWZmaXgKKyAjIGFwcGVuZGVkIGFm dGVyIHRoZSBtYW5wYWdlIGZpbGUgc2VjdGlvbiBudW1iZXIuICAic3NsIiBpcyBwb3B1bGFyLAor ICMgcmVzdWx0aW5nIGluIGZpbGVzIHN1Y2ggYXMgY29uZmlnLjVzc2wgcmF0aGVyIHRoYW4gY29u ZmlnLjUuCitAQCAtMTk5LDYgKzIwMyw3IEBAIENDPSQoQ1JPU1NfQ09NUElMRSl7LSAkY29uZmln e0NDfSAtfQorIENYWD17LSAkY29uZmlne0NYWH0gPyAiXCQoQ1JPU1NfQ09NUElMRSkkY29uZmln e0NYWH0iIDogJycgLX0KKyBDUFBGTEFHUz17LSBvdXIgJGNwcGZsYWdzMSA9IGpvaW4oIiAiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFwIHsgIi1EIi4kX30gQHskY29u Zmlne0NQUERFRklORVN9fSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJc JChTWVNURU1fQ0lQSEVSU19GSUxFX0RFRklORSkiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobWFwIHsgIi1JIi4kX30gQHskY29uZmlne0NQUElOQ0xVREVTfX0pLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAeyRjb25maWd7Q1BQRkxBR1N9fSkgLX0K KyBDRkxBR1M9ey0gam9pbignICcsIEB7JGNvbmZpZ3tDRkxBR1N9fSkgLX0KK2RpZmYgLXVwIG9w ZW5zc2wtMS4xLjEtcHJlOC9Db25maWd1cmUuc3lzdGVtLWNpcGhlcmxpc3Qgb3BlbnNzbC0xLjEu MS1wcmU4L0NvbmZpZ3VyZQorLS0tIG9wZW5zc2wtMS4xLjEtcHJlOC9Db25maWd1cmUuc3lzdGVt LWNpcGhlcmxpc3QJMjAxOC0wNi0yMCAxNjo0ODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMS4xLXByZTgvQ29uZmlndXJlCTIwMTgtMDctMjUgMTA6MTM6MDYuMzQ2MjMyODU2ICsw MjAwCitAQCAtMjEsNyArMjEsNyBAQCB1c2UgT3BlblNTTDo6R2xvYjsKKyAKKyAjIHNlZSBJTlNU QUxMIGZvciBpbnN0cnVjdGlvbnMuCisgCistbXkgJHVzYWdlPSJVc2FnZTogQ29uZmlndXJlIFtu by08Y2lwaGVyPiAuLi5dIFtlbmFibGUtPGNpcGhlcj4gLi4uXSBbLUR4eHhdIFstbHh4eF0gWy1M eHh4XSBbLWZ4eHhdIFstS3h4eF0gW25vLWh3LXh4eHxuby1od10gW1tuby1ddGhyZWFkc10gW1tu by1dc2hhcmVkXSBbW25vLV16bGlifHpsaWItZHluYW1pY10gW25vLWFzbV0gW25vLWRzb10gW25v LWVnZF0gW3NjdHBdIFszODZdIFstLXByZWZpeD1ESVJdIFstLW9wZW5zc2xkaXI9T1BFTlNTTERJ Ul0gWy0td2l0aC14eHhbPXZ2dl1dIFstLWNvbmZpZz1GSUxFXSBvcy9jb21waWxlcls6ZmxhZ3Nd XG4iOworK215ICR1c2FnZT0iVXNhZ2U6IENvbmZpZ3VyZSBbbm8tPGNpcGhlcj4gLi4uXSBbZW5h YmxlLTxjaXBoZXI+IC4uLl0gWy1EeHh4XSBbLWx4eHhdIFstTHh4eF0gWy1meHh4XSBbLUt4eHhd IFtuby1ody14eHh8bm8taHddIFtbbm8tXXRocmVhZHNdIFtbbm8tXXNoYXJlZF0gW1tuby1demxp Ynx6bGliLWR5bmFtaWNdIFtuby1hc21dIFtuby1kc29dIFtuby1lZ2RdIFtzY3RwXSBbMzg2XSBb LS1wcmVmaXg9RElSXSBbLS1vcGVuc3NsZGlyPU9QRU5TU0xESVJdIFstLXN5c3RlbS1jaXBoZXJz LWZpbGU9U1lTVEVNQ0lQSEVSRklMRV0gWy0td2l0aC14eHhbPXZ2dl1dIFstLWNvbmZpZz1GSUxF XSBvcy9jb21waWxlcls6ZmxhZ3NdXG4iOworIAorICMgT3B0aW9uczoKKyAjCitAQCAtMzgsNiAr MzgsOSBAQCBteSAkdXNhZ2U9IlVzYWdlOiBDb25maWd1cmUgW25vLTxjaXBoZXI+CisgIyAgICAg ICAgICAgICAgIFRoaXMgYmVjb21lcyB0aGUgdmFsdWUgb2YgT1BFTlNTTERJUiBpbiBNYWtlZmls ZSBhbmQgaW4gQy4KKyAjICAgICAgICAgICAgICAgKERlZmF1bHQ6IFBSRUZJWC9zc2wpCisgIwor KyMgLS1zeXN0ZW0tY2lwaGVycy1maWxlICBBIGZpbGUgdG8gcmVhZCBjaXBoZXIgc3RyaW5nIGZy b20gd2hlbiB0aGUgUFJPRklMRT1TWVNURU0KKysjCQljaXBoZXIgaXMgc3BlY2lmaWVkIChkZWZh dWx0KS4KKysjCisgIyAtLWNyb3NzLWNvbXBpbGUtcHJlZml4IEFkZCBzcGVjaWZpZWQgcHJlZml4 IHRvIGJpbnV0aWxzIGNvbXBvbmVudHMuCisgIworICMgLS1hcGkgICAgICAgICBPbmUgb2YgMC45 LjgsIDEuMC4wIG9yIDEuMS4wLiAgRG8gbm90IGNvbXBpbGUgc3VwcG9ydCBmb3IKK0BAIC0yOTEs NiArMjk0LDcgQEAgJGNvbmZpZ3twcmVmaXh9PSIiOworICRjb25maWd7b3BlbnNzbGRpcn09IiI7 CisgJGNvbmZpZ3twcm9jZXNzb3J9PSIiOworICRjb25maWd7bGliZGlyfT0iIjsKKyskY29uZmln e3N5c3RlbV9jaXBoZXJzX2ZpbGV9PSIiOworIG15ICRhdXRvX3RocmVhZHM9MTsgICAgIyBlbmFi bGUgdGhyZWFkcyBhdXRvbWF0aWNhbGx5PyB0cnVlIGJ5IGRlZmF1bHQKKyBteSAkZGVmYXVsdF9y YW5saWI7CisgCitAQCAtODE0LDYgKzgxOCwxMCBAQCB3aGlsZSAoQGFyZ3Zjb3B5KQorIAkJCSAg ICBwdXNoIEBzZWVkX3NvdXJjZXMsICR4OworIAkJCSAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICAgfQorKwkJZWxzaWYgKC9eLS1zeXN0ZW0tY2lwaGVycy1maWxlPSguKikkLykKKysJCQl7 CisrCQkJJGNvbmZpZ3tzeXN0ZW1fY2lwaGVyc19maWxlfT0kMTsKKysJCQl9CisgCQllbHNpZiAo L14tLWNyb3NzLWNvbXBpbGUtcHJlZml4PSguKikkLykKKyAJCQl7CisgCQkJJHVzZXJ7Q1JPU1Nf Q09NUElMRX09JDE7CitAQCAtMTAwMCw2ICsxMDA4LDggQEAgaWYgKCR0YXJnZXQgZXEgIkhBU0gi KSB7CisgICAgIGV4aXQgMDsKKyB9CisgCisrY2hvcCAkY29uZmlne3N5c3RlbV9jaXBoZXJzX2Zp bGV9IGlmICRjb25maWd7c3lzdGVtX2NpcGhlcnNfZmlsZX0gPX4gL1wvJC87CisrCisgcHJpbnQg IkNvbmZpZ3VyaW5nIE9wZW5TU0wgdmVyc2lvbiAkY29uZmlne3ZlcnNpb259ICgkY29uZmlne3Zl cnNpb25fbnVtfSkgIjsKKyBwcmludCAiZm9yICR0YXJnZXRcbiI7CisgCitkaWZmIC11cCBvcGVu c3NsLTEuMS4xLXByZTgvZG9jL21hbjEvY2lwaGVycy5wb2Quc3lzdGVtLWNpcGhlcmxpc3Qgb3Bl bnNzbC0xLjEuMS1wcmU4L2RvYy9tYW4xL2NpcGhlcnMucG9kCistLS0gb3BlbnNzbC0xLjEuMS1w cmU4L2RvYy9tYW4xL2NpcGhlcnMucG9kLnN5c3RlbS1jaXBoZXJsaXN0CTIwMTgtMDYtMjAgMTY6 NDg6MTIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2RvYy9tYW4xL2Np cGhlcnMucG9kCTIwMTgtMDctMjUgMTA6MTM6MDYuMzQ2MjMyODU2ICswMjAwCitAQCAtMjAwLDYg KzIwMCwxNSBAQCBBcyBvZiBPcGVuU1NMIDEuMC4wLCB0aGUgQjxBTEw+IGNpcGhlciBzCisgCisg VGhlIGNpcGhlciBzdWl0ZXMgbm90IGVuYWJsZWQgYnkgQjxBTEw+LCBjdXJyZW50bHkgQjxlTlVM TD4uCisgCisrPWl0ZW0gQjxQUk9GSUxFPVNZU1RFTT4KKysKKytUaGUgbGlzdCBvZiBlbmFibGVk IGNpcGhlciBzdWl0ZXMgd2lsbCBiZSBsb2FkZWQgZnJvbSB0aGUgc3lzdGVtIGNyeXB0byBwb2xp Y3kKKytjb25maWd1cmF0aW9uIGZpbGUgQjwvZXRjL2NyeXB0by1wb2xpY2llcy9iYWNrLWVuZHMv b3BlbnNzbC5jb25maWc+LgorK1NlZSBhbHNvIEw8dXBkYXRlLWNyeXB0by1wb2xpY2llcyg4KT4u CisrVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciB1bmxlc3MgYW4gYXBwbGljYXRpb24gZXhw bGljaXRseSBzZXRzIGEgY2lwaGVyCisrbGlzdC4gSWYgdXNlZCBpbiBhIGNpcGhlciBsaXN0IGNv bmZpZ3VyYXRpb24gdmFsdWUgdGhpcyBzdHJpbmcgbXVzdCBiZSBhdCB0aGUKKytiZWdpbm5pbmcg b2YgdGhlIGNpcGhlciBsaXN0LCBvdGhlcndpc2UgaXQgd2lsbCBub3QgYmUgcmVjb2duaXplZC4K KysKKyA9aXRlbSBCPEhJR0g+CisgCisgIkhpZ2giIGVuY3J5cHRpb24gY2lwaGVyIHN1aXRlcy4g VGhpcyBjdXJyZW50bHkgbWVhbnMgdGhvc2Ugd2l0aCBrZXkgbGVuZ3RocworZGlmZiAtdXAgb3Bl bnNzbC0xLjEuMS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9zc2wuaC5zeXN0ZW0tY2lwaGVybGlzdCBv cGVuc3NsLTEuMS4xLXByZTgvaW5jbHVkZS9vcGVuc3NsL3NzbC5oCistLS0gb3BlbnNzbC0xLjEu MS1wcmU4L2luY2x1ZGUvb3BlbnNzbC9zc2wuaC5zeXN0ZW0tY2lwaGVybGlzdAkyMDE4LTA2LTIw IDE2OjQ4OjEzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9pbmNsdWRl L29wZW5zc2wvc3NsLmgJMjAxOC0wNy0yNSAxMDoxMzowNi4zNDYyMzI4NTYgKzAyMDAKK0BAIC0x ODYsNiArMTg2LDExIEBAIGV4dGVybiAiQyIgeworICAqIHRocm93aW5nIG91dCBhbm9ueW1vdXMg YW5kIHVuZW5jcnlwdGVkIGNpcGhlcnN1aXRlcyEgKFRoZSBsYXR0ZXIgYXJlIG5vdAorICAqIGFj dHVhbGx5IGVuYWJsZWQgYnkgQUxMLCBidXQgIkFMTDpSU0EiIHdvdWxkIGVuYWJsZSBzb21lIG9m IHRoZW0uKQorICAqLworKyMgaWZkZWYgU1lTVEVNX0NJUEhFUlNfRklMRQorKyMgIGRlZmluZSBT U0xfU1lTVEVNX0RFRkFVTFRfQ0lQSEVSX0xJU1QgIlBST0ZJTEU9U1lTVEVNIgorKyMgZWxzZQor KyMgIGRlZmluZSBTU0xfU1lTVEVNX0RFRkFVTFRfQ0lQSEVSX0xJU1QgU1NMX0RFRkFVTFRfQ0lQ SEVSX0xJU1QKKysjIGVuZGlmCisgCisgLyogVXNlZCBpbiBTU0xfc2V0X3NodXRkb3duKCkvU1NM X2dldF9zaHV0ZG93bigpOyAqLworICMgZGVmaW5lIFNTTF9TRU5UX1NIVVRET1dOICAgICAgIDEK K2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9zc2wvc3NsX2NpcGguYy5zeXN0ZW0tY2lwaGVy bGlzdCBvcGVuc3NsLTEuMS4xLXByZTgvc3NsL3NzbF9jaXBoLmMKKy0tLSBvcGVuc3NsLTEuMS4x LXByZTgvc3NsL3NzbF9jaXBoLmMuc3lzdGVtLWNpcGhlcmxpc3QJMjAxOC0wNi0yMCAxNjo0ODox My4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvc3NsL3NzbF9jaXBoLmMJ MjAxOC0wNy0yNSAxMDozNjozNi40NzU4OTY4NjYgKzAyMDAKK0BAIC05LDYgKzksOCBAQAorICAq IGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9saWNlbnNlLmh0bWwKKyAgKi8KKyAKKysv KiBmb3Igc2VjdXJlX2dldGVudiAqLworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSA8 c3RkaW8uaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3Rz Lmg+CitAQCAtMTQwMCw2ICsxNDAyLDUzIEBAIGludCBTU0xfc2V0X2NpcGhlcnN1aXRlcyhTU0wg KnMsIGNvbnN0IGMKKyAgICAgcmV0dXJuIHJldDsKKyB9CisgCisrI2lmZGVmIFNZU1RFTV9DSVBI RVJTX0ZJTEUKKytzdGF0aWMgY2hhciAqbG9hZF9zeXN0ZW1fc3RyKGNvbnN0IGNoYXIgKnN1ZmZp eCkKKyt7CisrICAgIEZJTEUgKmZwOworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciAq bmV3X3J1bGVzOworKyAgICBjb25zdCBjaGFyICpjaXBoZXJzX3BhdGg7CisrICAgIHVuc2lnbmVk IGxlbiwgc2xlbjsKKysKKysgICAgaWYgKChjaXBoZXJzX3BhdGggPSBzZWN1cmVfZ2V0ZW52KCJP UEVOU1NMX1NZU1RFTV9DSVBIRVJTX09WRVJSSURFIikpID09IE5VTEwpCisrICAgICAgICBjaXBo ZXJzX3BhdGggPSBTWVNURU1fQ0lQSEVSU19GSUxFOworKyAgICBmcCA9IGZvcGVuKGNpcGhlcnNf cGF0aCwgInIiKTsKKysgICAgaWYgKGZwID09IE5VTEwgfHwgZmdldHMoYnVmLCBzaXplb2YoYnVm KSwgZnApID09IE5VTEwpIHsKKysgICAgICAgIC8qIGNhbm5vdCBvcGVuIG9yIGZpbGUgaXMgZW1w dHkgKi8KKysgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsIFNTTF9ERUZB VUxUX0NJUEhFUl9MSVNUKTsKKysgICAgfQorKworKyAgICBpZiAoZnApCisrICAgICAgICBmY2xv c2UoZnApOworKworKyAgICBzbGVuID0gc3RybGVuKHN1ZmZpeCk7CisrICAgIGxlbiA9IHN0cmxl bihidWYpOworKworKyAgICBpZiAoYnVmW2xlbiAtIDFdID09ICdcbicpIHsKKysgICAgICAgIGxl bi0tOworKyAgICAgICAgYnVmW2xlbl0gPSAwOworKyAgICB9CisrICAgIGlmIChidWZbbGVuIC0g MV0gPT0gJ1xyJykgeworKyAgICAgICAgbGVuLS07CisrICAgICAgICBidWZbbGVuXSA9IDA7Cisr ICAgIH0KKysKKysgICAgbmV3X3J1bGVzID0gT1BFTlNTTF9tYWxsb2MobGVuICsgc2xlbiArIDEp OworKyAgICBpZiAobmV3X3J1bGVzID09IDApCisrICAgICAgICByZXR1cm4gTlVMTDsKKysKKysg ICAgbWVtY3B5KG5ld19ydWxlcywgYnVmLCBsZW4pOworKyAgICBpZiAoc2xlbiA+IDApIHsKKysg ICAgICAgIG1lbWNweSgmbmV3X3J1bGVzW2xlbl0sIHN1ZmZpeCwgc2xlbik7CisrICAgICAgICBs ZW4gKz0gc2xlbjsKKysgICAgfQorKyAgICBuZXdfcnVsZXNbbGVuXSA9IDA7CisrCisrICAgIHJl dHVybiBuZXdfcnVsZXM7CisrfQorKyNlbmRpZgorKworIFNUQUNLX09GKFNTTF9DSVBIRVIpICpz c2xfY3JlYXRlX2NpcGhlcl9saXN0KGNvbnN0IFNTTF9NRVRIT0QgKnNzbF9tZXRob2QsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfT0YoU1NMX0NJ UEhFUikgKnRsczEzX2NpcGhlcnN1aXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTVEFDS19PRihTU0xfQ0lQSEVSKSAqKmNpcGhlcl9saXN0LAorQEAg LTE0MTMsMTUgKzE0NjIsMjUgQEAgU1RBQ0tfT0YoU1NMX0NJUEhFUikgKnNzbF9jcmVhdGVfY2lw aGVyXworICAgICBjb25zdCBjaGFyICpydWxlX3A7CisgICAgIENJUEhFUl9PUkRFUiAqY29fbGlz dCA9IE5VTEwsICpoZWFkID0gTlVMTCwgKnRhaWwgPSBOVUxMLCAqY3VycjsKKyAgICAgY29uc3Qg U1NMX0NJUEhFUiAqKmNhX2xpc3QgPSBOVUxMOworKyNpZmRlZiBTWVNURU1fQ0lQSEVSU19GSUxF CisrICAgIGNoYXIgKm5ld19ydWxlcyA9IE5VTEw7CisrCisrICAgIGlmIChydWxlX3N0ciAhPSBO VUxMICYmIHN0cm5jbXAocnVsZV9zdHIsICJQUk9GSUxFPVNZU1RFTSIsIDE0KSA9PSAwKSB7Cisr ICAgICAgICBjaGFyICpwID0gcnVsZV9zdHIgKyAxNDsKKysgICAgCisrICAgICAgICBuZXdfcnVs ZXMgPSBsb2FkX3N5c3RlbV9zdHIocCk7CisrICAgICAgICBydWxlX3N0ciA9IG5ld19ydWxlczsK KysgICAgfQorKyNlbmRpZgorIAorICAgICAvKgorICAgICAgKiBSZXR1cm4gd2l0aCBlcnJvciBp ZiBub3RoaW5nIHRvIGRvLgorICAgICAgKi8KKyAgICAgaWYgKHJ1bGVfc3RyID09IE5VTEwgfHwg Y2lwaGVyX2xpc3QgPT0gTlVMTCB8fCBjaXBoZXJfbGlzdF9ieV9pZCA9PSBOVUxMKQorLSAgICAg ICAgcmV0dXJuIE5VTEw7CisrICAgICAgICBnb3RvIGVycjsKKyAjaWZuZGVmIE9QRU5TU0xfTk9f RUMKKyAgICAgaWYgKCFjaGVja19zdWl0ZWJfY2lwaGVyX2xpc3Qoc3NsX21ldGhvZCwgYywgJnJ1 bGVfc3RyKSkKKy0gICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgZ290byBlcnI7CisgI2Vu ZGlmCisgCisgICAgIC8qCitAQCAtMTQ0NCw3ICsxNTAzLDcgQEAgU1RBQ0tfT0YoU1NMX0NJUEhF UikgKnNzbF9jcmVhdGVfY2lwaGVyXworICAgICBjb19saXN0ID0gT1BFTlNTTF9tYWxsb2Moc2l6 ZW9mKCpjb19saXN0KSAqIG51bV9vZl9jaXBoZXJzKTsKKyAgICAgaWYgKGNvX2xpc3QgPT0gTlVM TCkgeworICAgICAgICAgU1NMZXJyKFNTTF9GX1NTTF9DUkVBVEVfQ0lQSEVSX0xJU1QsIEVSUl9S X01BTExPQ19GQUlMVVJFKTsKKy0gICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAvKiBGYWls dXJlICovCisrICAgICAgICBnb3RvIGVycjsKKyAgICAgfQorIAorICAgICBzc2xfY2lwaGVyX2Nv bGxlY3RfY2lwaGVycyhzc2xfbWV0aG9kLCBudW1fb2ZfY2lwaGVycywKK0BAIC0xNTEwLDggKzE1 NjksNyBAQCBTVEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2NyZWF0ZV9jaXBoZXJfCisgICAgICAq IGluIGZvcmNlIHdpdGhpbiBlYWNoIGNsYXNzCisgICAgICAqLworICAgICBpZiAoIXNzbF9jaXBo ZXJfc3RyZW5ndGhfc29ydCgmaGVhZCwgJnRhaWwpKSB7CistICAgICAgICBPUEVOU1NMX2ZyZWUo Y29fbGlzdCk7CistICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgICAgIGdvdG8gZXJyOworICAg ICB9CisgCisgICAgIC8qCitAQCAtMTU1Niw5ICsxNjE0LDggQEAgU1RBQ0tfT0YoU1NMX0NJUEhF UikgKnNzbF9jcmVhdGVfY2lwaGVyXworICAgICBudW1fb2ZfYWxpYXNfbWF4ID0gbnVtX29mX2Np cGhlcnMgKyBudW1fb2ZfZ3JvdXBfYWxpYXNlcyArIDE7CisgICAgIGNhX2xpc3QgPSBPUEVOU1NM X21hbGxvYyhzaXplb2YoKmNhX2xpc3QpICogbnVtX29mX2FsaWFzX21heCk7CisgICAgIGlmIChj YV9saXN0ID09IE5VTEwpIHsKKy0gICAgICAgIE9QRU5TU0xfZnJlZShjb19saXN0KTsKKyAgICAg ICAgIFNTTGVycihTU0xfRl9TU0xfQ1JFQVRFX0NJUEhFUl9MSVNULCBFUlJfUl9NQUxMT0NfRkFJ TFVSRSk7CistICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgLyogRmFpbHVyZSAqLworKyAg ICAgICAgZ290byBlcnI7CisgICAgIH0KKyAgICAgc3NsX2NpcGhlcl9jb2xsZWN0X2FsaWFzZXMo Y2FfbGlzdCwgbnVtX29mX2dyb3VwX2FsaWFzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRpc2FibGVkX21rZXksIGRpc2FibGVkX2F1dGgsIGRpc2FibGVkX2VuYywKK0BAIC0x NTg0LDggKzE2NDEsNyBAQCBTVEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2NyZWF0ZV9jaXBoZXJf CisgICAgIE9QRU5TU0xfZnJlZShjYV9saXN0KTsgICAgICAvKiBOb3QgbmVlZGVkIGFueW1vcmUg Ki8KKyAKKyAgICAgaWYgKCFvaykgeyAgICAgICAgICAgICAgICAgIC8qIFJ1bGUgcHJvY2Vzc2lu ZyBmYWlsdXJlICovCistICAgICAgICBPUEVOU1NMX2ZyZWUoY29fbGlzdCk7CistICAgICAgICBy ZXR1cm4gTlVMTDsKKysgICAgICAgIGdvdG8gZXJyOworICAgICB9CisgCisgICAgIC8qCitAQCAt MTU5MywxNCArMTY0OSwxOCBAQCBTVEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2NyZWF0ZV9jaXBo ZXJfCisgICAgICAqIGlmIHdlIGNhbm5vdCBnZXQgb25lLgorICAgICAgKi8KKyAgICAgaWYgKChj aXBoZXJzdGFjayA9IHNrX1NTTF9DSVBIRVJfbmV3X251bGwoKSkgPT0gTlVMTCkgeworLSAgICAg ICAgT1BFTlNTTF9mcmVlKGNvX2xpc3QpOworLSAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAg ICBnb3RvIGVycjsKKyAgICAgfQorIAorKyNpZmRlZiBTWVNURU1fQ0lQSEVSU19GSUxFCisrICAg IE9QRU5TU0xfZnJlZShuZXdfcnVsZXMpOyAgICAvKiBOb3QgbmVlZGVkIGFueW1vcmUgKi8KKysj ZW5kaWYKKysKKyAgICAgLyogQWRkIFRMU3YxLjMgY2lwaGVycyBmaXJzdCAtIHdlIGFsd2F5cyBw cmVmZXIgdGhvc2UgaWYgcG9zc2libGUgKi8KKyAgICAgZm9yIChpID0gMDsgaSA8IHNrX1NTTF9D SVBIRVJfbnVtKHRsczEzX2NpcGhlcnN1aXRlcyk7IGkrKykgeworICAgICAgICAgaWYgKCFza19T U0xfQ0lQSEVSX3B1c2goY2lwaGVyc3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBza19TU0xfQ0lQSEVSX3ZhbHVlKHRsczEzX2NpcGhlcnN1aXRlcywgaSkpKSB7CisrICAg ICAgICAgICAgT1BFTlNTTF9mcmVlKGNvX2xpc3QpOworICAgICAgICAgICAgIHNrX1NTTF9DSVBI RVJfZnJlZShjaXBoZXJzdGFjayk7CisgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAg ICB9CitAQCAtMTYzMiw2ICsxNjkyLDE0IEBAIFNUQUNLX09GKFNTTF9DSVBIRVIpICpzc2xfY3Jl YXRlX2NpcGhlcl8KKyAgICAgKmNpcGhlcl9saXN0ID0gY2lwaGVyc3RhY2s7CisgCisgICAgIHJl dHVybiBjaXBoZXJzdGFjazsKKysKKytlcnI6CisrICAgIE9QRU5TU0xfZnJlZShjb19saXN0KTsK KysjaWZkZWYgU1lTVEVNX0NJUEhFUlNfRklMRQorKyAgICBPUEVOU1NMX2ZyZWUobmV3X3J1bGVz KTsKKysjZW5kaWYKKysgICAgcmV0dXJuIE5VTEw7CisrICAKKyB9CisgCisgY2hhciAqU1NMX0NJ UEhFUl9kZXNjcmlwdGlvbihjb25zdCBTU0xfQ0lQSEVSICpjaXBoZXIsIGNoYXIgKmJ1ZiwgaW50 IGxlbikKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9zc2wvc3NsX2xpYi5jLnN5c3RlbS1j aXBoZXJsaXN0IG9wZW5zc2wtMS4xLjEtcHJlOC9zc2wvc3NsX2xpYi5jCistLS0gb3BlbnNzbC0x LjEuMS1wcmU4L3NzbC9zc2xfbGliLmMuc3lzdGVtLWNpcGhlcmxpc3QJMjAxOC0wNy0yNSAxMDox MzowNi4zNDcyMzI4ODAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvc3NsL3NzbF9saWIu YwkyMDE4LTA3LTI1IDEwOjM3OjM4LjcxNTM5NDk4OSArMDIwMAorQEAgLTY1OCw3ICs2NTgsNyBA QCBpbnQgU1NMX0NUWF9zZXRfc3NsX3ZlcnNpb24oU1NMX0NUWCAqY3R4CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjdHgtPnRsczEzX2NpcGhlcnN1aXRlcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICYoY3R4LT5jaXBoZXJfbGlzdCksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmKGN0eC0+Y2lwaGVyX2xpc3RfYnlfaWQpLAorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0RFRkFVTFRfQ0lQSEVSX0xJU1QsIGN0eC0+Y2Vy dCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfU1lTVEVNX0RFRkFVTFRf Q0lQSEVSX0xJU1QsIGN0eC0+Y2VydCk7CisgICAgIGlmICgoc2sgPT0gTlVMTCkgfHwgKHNrX1NT TF9DSVBIRVJfbnVtKHNrKSA8PSAwKSkgeworICAgICAgICAgU1NMZXJyKFNTTF9GX1NTTF9DVFhf U0VUX1NTTF9WRVJTSU9OLCBTU0xfUl9TU0xfTElCUkFSWV9IQVNfTk9fQ0lQSEVSUyk7CisgICAg ICAgICByZXR1cm4gMDsKK0BAIC0yOTMxLDcgKzI5MzEsNyBAQCBTU0xfQ1RYICpTU0xfQ1RYX25l dyhjb25zdCBTU0xfTUVUSE9EICptCisgICAgIGlmICghc3NsX2NyZWF0ZV9jaXBoZXJfbGlzdChy ZXQtPm1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC0+dGxzMTNf Y2lwaGVyc3VpdGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJldC0+Y2lw aGVyX2xpc3QsICZyZXQtPmNpcGhlcl9saXN0X2J5X2lkLAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU1NMX0RFRkFVTFRfQ0lQSEVSX0xJU1QsIHJldC0+Y2VydCkKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9TWVNURU1fREVGQVVMVF9DSVBIRVJfTElTVCwg cmV0LT5jZXJ0KQorICAgICAgICAgfHwgc2tfU1NMX0NJUEhFUl9udW0ocmV0LT5jaXBoZXJfbGlz dCkgPD0gMCkgeworICAgICAgICAgU1NMZXJyKFNTTF9GX1NTTF9DVFhfTkVXLCBTU0xfUl9MSUJS QVJZX0hBU19OT19DSVBIRVJTKTsKKyAgICAgICAgIGdvdG8gZXJyMjsKK2RpZmYgLXVwIG9wZW5z c2wtMS4xLjEtcHJlOC90ZXN0L2NpcGhlcmxpc3RfdGVzdC5jLnN5c3RlbS1jaXBoZXJsaXN0IG9w ZW5zc2wtMS4xLjEtcHJlOC90ZXN0L2NpcGhlcmxpc3RfdGVzdC5jCistLS0gb3BlbnNzbC0xLjEu MS1wcmU4L3Rlc3QvY2lwaGVybGlzdF90ZXN0LmMuc3lzdGVtLWNpcGhlcmxpc3QJMjAxOC0wNy0y NSAxMDoxMzowNi4zNDgyMzI5MDMgKzAyMDAKKysrKyBvcGVuc3NsLTEuMS4xLXByZTgvdGVzdC9j aXBoZXJsaXN0X3Rlc3QuYwkyMDE4LTA3LTI1IDEwOjM5OjA4Ljg4NzU1MjgxNCArMDIwMAorQEAg LTIxNyw3ICsyMTcsOSBAQCBzdGF0aWMgaW50IHRlc3RfZGVmYXVsdF9jaXBoZXJsaXN0X2V4cGxp CisgCisgaW50IHNldHVwX3Rlc3RzKHZvaWQpCisgeworKyNpZm5kZWYgU1lTVEVNX0NJUEhFUlNf RklMRQorICAgICBBRERfVEVTVCh0ZXN0X2RlZmF1bHRfY2lwaGVybGlzdF9pbXBsaWNpdCk7Cisr I2VuZGlmCisgICAgIEFERF9URVNUKHRlc3RfZGVmYXVsdF9jaXBoZXJsaXN0X2V4cGxpY2l0KTsK KyAgICAgcmV0dXJuIDE7CisgfQoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4xLjEtdmVyc2lvbi1h ZGQtZW5naW5lcy5wYXRjaCBiL29wZW5zc2wtMS4xLjEtdmVyc2lvbi1hZGQtZW5naW5lcy5wYXRj aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzNmNThlCi0tLSAvZGV2L251 bGwKKysrIGIvb3BlbnNzbC0xLjEuMS12ZXJzaW9uLWFkZC1lbmdpbmVzLnBhdGNoCkBAIC0wLDAg KzEsMzggQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4xLjEtcHJlOC9hcHBzL3ZlcnNpb24uYy52ZXJz aW9uLWFkZC1lbmdpbmVzIG9wZW5zc2wtMS4xLjEtcHJlOC9hcHBzL3ZlcnNpb24uYworLS0tIG9w ZW5zc2wtMS4xLjEtcHJlOC9hcHBzL3ZlcnNpb24uYy52ZXJzaW9uLWFkZC1lbmdpbmVzCTIwMTgt MDYtMjAgMTY6NDg6MDkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjEuMS1wcmU4L2Fw cHMvdmVyc2lvbi5jCTIwMTgtMDctMTYgMTg6MDA6NDAuNjA4NjI0MzQ2ICswMjAwCitAQCAtNjQs NyArNjQsNyBAQCBpbnQgdmVyc2lvbl9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7Cisg ICAgIGludCByZXQgPSAxLCBkaXJ0eSA9IDAsIHNlZWQgPSAwOworICAgICBpbnQgY2ZsYWdzID0g MCwgdmVyc2lvbiA9IDAsIGRhdGUgPSAwLCBvcHRpb25zID0gMCwgcGxhdGZvcm0gPSAwLCBkaXIg PSAwOworLSAgICBpbnQgZW5nZGlyID0gMDsKKysgICAgaW50IGVuZ2RpciA9IDAsIGVuZ2luZXMg PSAwOworICAgICBjaGFyICpwcm9nOworICAgICBPUFRJT05fQ0hPSUNFIG87CisgCitAQCAtMTA2 LDcgKzEwNiw3IEBAIG9wdGhlbHA6CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNl IE9QVF9BOgorICAgICAgICAgICAgIHNlZWQgPSBvcHRpb25zID0gY2ZsYWdzID0gdmVyc2lvbiA9 IGRhdGUgPSBwbGF0Zm9ybSA9IGRpciA9IGVuZ2RpcgorLSAgICAgICAgICAgICAgICA9IDE7Cisr ICAgICAgICAgICAgICAgID0gZW5naW5lcyA9IDE7CisgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICB9CisgICAgIH0KK0BAIC0xODgsNiArMTg4LDE2IEBAIG9wdGhlbHA6CisgI2VuZGlmCisg ICAgICAgICBwcmludGYoIlxuIik7CisgICAgIH0KKysgICAgaWYgKGVuZ2luZXMpIHsKKysgICAg ICAgIEVOR0lORSAqZTsKKysgICAgICAgIHByaW50ZigiZW5naW5lczogICIpOworKyAgICAgICAg ZSA9IEVOR0lORV9nZXRfZmlyc3QoKTsKKysgICAgICAgIHdoaWxlIChlKSB7CisrICAgICAgICAg ICAgcHJpbnRmKCIlcyAiLCBFTkdJTkVfZ2V0X2lkKGUpKTsKKysgICAgICAgICAgICBlID0gRU5H SU5FX2dldF9uZXh0KGUpOworKyAgICAgICAgfQorKyAgICAgICAgcHJpbnRmKCJcbiIpOworKyAg ICB9CisgICAgIHJldCA9IDA7CisgIGVuZDoKKyAgICAgcmV0dXJuIHJldDsKCmRpZmYgLS1naXQg YS9vcGVuc3NsLTEuMS4xLXZlcnNpb24tb3ZlcnJpZGUucGF0Y2ggYi9vcGVuc3NsLTEuMS4xLXZl cnNpb24tb3ZlcnJpZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZGFlNjNmOQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4xLjEtdmVyc2lvbi1vdmVycmlk ZS5wYXRjaApAQCAtMCwwICsxLDE0IEBACitkaWZmIC11cCBvcGVuc3NsLTEuMS4xLXByZTgvaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmgudmVyc2lvbi1vdmVycmlkZSBvcGVuc3NsLTEuMS4xLXBy ZTgvaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKy0tLSBvcGVuc3NsLTEuMS4xLXByZTgvaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmgudmVyc2lvbi1vdmVycmlkZQkyMDE4LTA2LTIwIDE2OjQ4 OjEzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4xLjEtcHJlOC9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbHYuaAkyMDE4LTA3LTI1IDExOjAzOjI5LjI5NzU0MzM5MiArMDIwMAorQEAgLTM5 LDggKzM5LDggQEAgZXh0ZXJuICJDIiB7CisgICogKFByaW9yIHRvIDAuOS41YSBiZXRhMSwgYSBk aWZmZXJlbnQgc2NoZW1lIHdhcyB1c2VkOiBNTU5ORkZSQkIgZm9yCisgICogIG1ham9yIG1pbm9y IGZpeCBmaW5hbCBwYXRjaC9iZXRhKQorICAqLworLSMgZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9O VU1CRVIgIDB4MTAxMDEwMDhMCistIyBkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX1RFWFQgICAgIk9w ZW5TU0wgMS4xLjEtcHJlOCAoYmV0YSkgMjAgSnVuIDIwMTgiCisrIyBkZWZpbmUgT1BFTlNTTF9W RVJTSU9OX05VTUJFUiAgMHgxMDEwMTAwZkwKKysjIGRlZmluZSBPUEVOU1NMX1ZFUlNJT05fVEVY VCAgICAiT3BlblNTTCAxLjEuMS1wcmU4IChiZXRhKSBGSVBTIDIwIEp1biAyMDE4IgorIAorIC8q LQorICAqIFRoZSBtYWNyb3MgYmVsb3cgYXJlIHRvIGJlIHVzZWQgZm9yIHNoYXJlZCBsaWJyYXJ5 ICguc28sIC5kbGwsIC4uLikKCmRpZmYgLS1naXQgYS9vcGVuc3NsLnNwZWMgYi9vcGVuc3NsLnNw ZWMKaW5kZXggODI3ZjcyNy4uZmY5ZTJmNCAxMDA2NDQKLS0tIGEvb3BlbnNzbC5zcGVjCisrKyBi L29wZW5zc2wuc3BlYwpAQCAtMTksMTUgKzE5LDE3IEBACiAKICVnbG9iYWwgX3BlcmZvcm1hbmNl X2J1aWxkIDEKIAorJWdsb2JhbCBwcmVyZWxlYXNlIHByZTgKKwogU3VtbWFyeTogVXRpbGl0aWVz IGZyb20gdGhlIGdlbmVyYWwgcHVycG9zZSBjcnlwdG9ncmFwaHkgbGlicmFyeSB3aXRoIFRMUyBp bXBsZW1lbnRhdGlvbgogTmFtZTogb3BlbnNzbAotVmVyc2lvbjogMS4xLjBoCi1SZWxlYXNlOiA2 JXs/ZGlzdH0KK1ZlcnNpb246IDEuMS4xCitSZWxlYXNlOiAwLiV7cHJlcmVsZWFzZX0lez9kaXN0 fQogRXBvY2g6IDEKICMgV2UgaGF2ZSB0byByZW1vdmUgY2VydGFpbiBwYXRlbnRlZCBhbGdvcml0 aG1zIGZyb20gdGhlIG9wZW5zc2wgc291cmNlCiAjIHRhcmJhbGwgd2l0aCB0aGUgaG9iYmxlLW9w ZW5zc2wgc2NyaXB0IHdoaWNoIGlzIGluY2x1ZGVkIGJlbG93LgogIyBUaGUgb3JpZ2luYWwgb3Bl bnNzbCB1cHN0cmVhbSB0YXJiYWxsIGNhbm5vdCBiZSBzaGlwcGVkIGluIHRoZSAuc3JjLnJwbS4K LVNvdXJjZTogb3BlbnNzbC0le3ZlcnNpb259LWhvYmJsZWQudGFyLnh6CitTb3VyY2U6IG9wZW5z c2wtJXt2ZXJzaW9ufS0le3ByZXJlbGVhc2V9LWhvYmJsZWQudGFyLnh6CiBTb3VyY2UxOiBob2Ji bGUtb3BlbnNzbAogU291cmNlMjogTWFrZWZpbGUuY2VydGlmaWNhdGUKIFNvdXJjZTY6IG1ha2Ut ZHVtbXktY2VydApAQCAtMzgsMzAgKzQwLDI1IEBAIFNvdXJjZTExOiBSRUFETUUuRklQUwogU291 cmNlMTI6IGVjX2N1cnZlLmMKIFNvdXJjZTEzOiBlY3Rlc3QuYwogIyBCdWlsZCBjaGFuZ2VzCi1Q YXRjaDE6IG9wZW5zc2wtMS4xLjAtYnVpbGQucGF0Y2gKK1BhdGNoMTogb3BlbnNzbC0xLjEuMS1i dWlsZC5wYXRjaAogUGF0Y2gyOiBvcGVuc3NsLTEuMS4wLWRlZmF1bHRzLnBhdGNoCiBQYXRjaDM6 IG9wZW5zc2wtMS4xLjAtbm8taHRtbC5wYXRjaAorUGF0Y2g0OiBvcGVuc3NsLTEuMS4xLW1hbi1y ZW5hbWUucGF0Y2gKICMgQnVnIGZpeGVzCiBQYXRjaDIxOiBvcGVuc3NsLTEuMS4wLWlzc3Vlci1o YXNoLnBhdGNoCi1QYXRjaDIyOiBvcGVuc3NsLTEuMS4wLWFsZ28tZG9jLnBhdGNoCi1QYXRjaDIz OiBvcGVuc3NsLTEuMS4wLW1hbmZpeC5wYXRjaAogIyBGdW5jdGlvbmFsaXR5IGNoYW5nZXMKIFBh dGNoMzE6IG9wZW5zc2wtMS4xLjAtY2EtZGlyLnBhdGNoCi1QYXRjaDMyOiBvcGVuc3NsLTEuMS4w LXZlcnNpb24tYWRkLWVuZ2luZXMucGF0Y2gKK1BhdGNoMzI6IG9wZW5zc2wtMS4xLjEtdmVyc2lv bi1hZGQtZW5naW5lcy5wYXRjaAogUGF0Y2gzMzogb3BlbnNzbC0xLjEuMC1hcHBzLWRnc3QucGF0 Y2gKLVBhdGNoMzU6IG9wZW5zc2wtMS4xLjAtY2hpbC1maXhlcy5wYXRjaAotUGF0Y2gzNjogb3Bl bnNzbC0xLjEuMC1zZWN1cmUtZ2V0ZW52LnBhdGNoCi1QYXRjaDM3OiBvcGVuc3NsLTEuMS4wLWVj LWN1cnZlcy5wYXRjaAorUGF0Y2gzNjogb3BlbnNzbC0xLjEuMS1zZWN1cmUtZ2V0ZW52LnBhdGNo CitQYXRjaDM3OiBvcGVuc3NsLTEuMS4xLWVjLWN1cnZlcy5wYXRjaAogUGF0Y2gzODogb3BlbnNz bC0xLjEuMC1uby13ZWFrLXZlcmlmeS5wYXRjaAotUGF0Y2gzOTogb3BlbnNzbC0xLjEuMC1jYy1y ZXFzLnBhdGNoCi1QYXRjaDQwOiBvcGVuc3NsLTEuMS4wLWRpc2FibGUtc3NsMy5wYXRjaAotUGF0 Y2g0MTogb3BlbnNzbC0xLjEuMC1zeXN0ZW0tY2lwaGVybGlzdC5wYXRjaAotUGF0Y2g0Mjogb3Bl bnNzbC0xLjEuMC1maXBzLnBhdGNoCi1QYXRjaDQ0OiBvcGVuc3NsLTEuMS4wLWJpby1mZC1wcmVz ZXJ2ZS1ubC5wYXRjaAorUGF0Y2g0MDogb3BlbnNzbC0xLjEuMS1kaXNhYmxlLXNzbDMucGF0Y2gK K1BhdGNoNDE6IG9wZW5zc2wtMS4xLjEtc3lzdGVtLWNpcGhlcmxpc3QucGF0Y2gKK1BhdGNoNDI6 IG9wZW5zc2wtMS4xLjEtZmlwcy5wYXRjaAorUGF0Y2g0NDogb3BlbnNzbC0xLjEuMS12ZXJzaW9u LW92ZXJyaWRlLnBhdGNoCiBQYXRjaDQ1OiBvcGVuc3NsLTEuMS4wLXdlYWstY2lwaGVycy5wYXRj aAotUGF0Y2g0Njogb3BlbnNzbC0xLjEuMC1zaWxlbnQtcm5kLXdyaXRlLnBhdGNoCiAjIEJhY2tw b3J0ZWQgZml4ZXMgaW5jbHVkaW5nIHNlY3VyaXR5IGZpeGVzCi1QYXRjaDcwOiBvcGVuc3NsLTEu MS4wLW1pc3NpbmctcXVvdGVzLnBhdGNoCiAKIExpY2Vuc2U6IE9wZW5TU0wKIEdyb3VwOiBTeXN0 ZW0gRW52aXJvbm1lbnQvTGlicmFyaWVzCkBAIC03MSw2ICs2OCw3IEBAIEJ1aWxkUmVxdWlyZXM6 IGNvcmV1dGlscywga3JiNS1kZXZlbCwgcGVybC1pbnRlcnByZXRlciwgc2VkLCB6bGliLWRldmVs LCAvdXNyL2JpCiBCdWlsZFJlcXVpcmVzOiBsa3NjdHAtdG9vbHMtZGV2ZWwKIEJ1aWxkUmVxdWly ZXM6IC91c3IvYmluL3JlbmFtZQogQnVpbGRSZXF1aXJlczogL3Vzci9iaW4vcG9kMm1hbgorQnVp bGRSZXF1aXJlczogL3Vzci9zYmluL3N5c2N0bAogQnVpbGRSZXF1aXJlczogcGVybChUZXN0OjpI YXJuZXNzKSwgcGVybChUZXN0OjpNb3JlKSwgcGVybChNYXRoOjpCaWdJbnQpCiBCdWlsZFJlcXVp cmVzOiBwZXJsKE1vZHVsZTo6TG9hZDo6Q29uZGl0aW9uYWwpLCBwZXJsKEZpbGU6OlRlbXApCiBC dWlsZFJlcXVpcmVzOiBwZXJsKFRpbWU6OkhpUmVzKQpAQCAtMTM0LDcgKzEzMiw3IEBAIHBhY2th Z2UgcHJvdmlkZXMgUGVybCBzY3JpcHRzIGZvciBjb252ZXJ0aW5nIGNlcnRpZmljYXRlcyBhbmQg a2V5cwogZnJvbSBvdGhlciBmb3JtYXRzIHRvIHRoZSBmb3JtYXRzIHVzZWQgYnkgdGhlIE9wZW5T U0wgdG9vbGtpdC4KIAogJXByZXAKLSVzZXR1cCAtcSAtbiAle25hbWV9LSV7dmVyc2lvbn0KKyVz ZXR1cCAtcSAtbiAle25hbWV9LSV7dmVyc2lvbn0tJXtwcmVyZWxlYXNlfQogCiAjIFRoZSBob2Ji bGVfb3BlbnNzbCBpcyBjYWxsZWQgaGVyZSByZWR1bmRhbnRseSwganVzdCB0byBiZSBzdXJlLgog IyBUaGUgdGFyYmFsbCBoYXMgYWxyZWFkeSB0aGUgc291cmNlcyByZW1vdmVkLgpAQCAtMTQ2LDI3 ICsxNDQsMjIgQEAgY3AgJXtTT1VSQ0UxM30gdGVzdC8KICVwYXRjaDEgLXAxIC1iIC5idWlsZCAg ICV7P19yYXdidWlsZH0KICVwYXRjaDIgLXAxIC1iIC5kZWZhdWx0cwogJXBhdGNoMyAtcDEgLWIg Lm5vLWh0bWwgICV7P19yYXdidWlsZH0KKyVwYXRjaDQgLXAxIC1iIC5tYW4tcmVuYW1lCiAKICVw YXRjaDIxIC1wMSAtYiAuaXNzdWVyLWhhc2gKLSVwYXRjaDIyIC1wMSAtYiAuYWxnby1kb2MKLSVw YXRjaDIzIC1wMSAtYiAubWFuZml4CiAKICVwYXRjaDMxIC1wMSAtYiAuY2EtZGlyCiAlcGF0Y2gz MiAtcDEgLWIgLnZlcnNpb24tYWRkLWVuZ2luZXMKICVwYXRjaDMzIC1wMSAtYiAuZGdzdAotJXBh dGNoMzUgLXAxIC1iIC5jaGlsCiAlcGF0Y2gzNiAtcDEgLWIgLnNlY3VyZS1nZXRlbnYKICVwYXRj aDM3IC1wMSAtYiAuY3VydmVzCiAlcGF0Y2gzOCAtcDEgLWIgLm5vLXdlYWstdmVyaWZ5Ci0lcGF0 Y2gzOSAtcDEgLWIgLmNjLXJlcXMKICVwYXRjaDQwIC1wMSAtYiAuZGlzYWJsZS1zc2wzCiAlcGF0 Y2g0MSAtcDEgLWIgLnN5c3RlbS1jaXBoZXJsaXN0CiAlcGF0Y2g0MiAtcDEgLWIgLmZpcHMKLSVw YXRjaDQ0IC1wMSAtYiAucHJlc2VydmUtbmwKKyVwYXRjaDQ0IC1wMSAtYiAudmVyc2lvbi1vdmVy cmlkZQogJXBhdGNoNDUgLXAxIC1iIC53ZWFrLWNpcGhlcnMKLSVwYXRjaDQ2IC1wMSAtYiAuc2ls ZW50LXJuZC13cml0ZQogCi0lcGF0Y2g3MCAtcDEgLWIgLm1pc3NpbmctcXVvdGVzCiAKICVidWls ZAogIyBGaWd1cmUgb3V0IHdoaWNoIGZsYWdzIHdlIHdhbnQgdG8gdXNlLgpAQCAtMjQ2LDcgKzIz OSw3IEBAIGV4cG9ydCBIQVNIQkFOR1BFUkw9L3Vzci9iaW4vcGVybAogCXpsaWIgZW5hYmxlLWNh bWVsbGlhIGVuYWJsZS1zZWVkIGVuYWJsZS1yZmMzNzc5IGVuYWJsZS1zY3RwIFwKIAllbmFibGUt Y21zIGVuYWJsZS1tZDIgZW5hYmxlLXJjNSBlbmFibGUtc3NsMyBlbmFibGUtc3NsMy1tZXRob2Qg XAogCWVuYWJsZS13ZWFrLXNzbC1jaXBoZXJzIFwKLQluby1tZGMyIG5vLWVjMm0gXAorCW5vLW1k YzIgbm8tZWMybSBuby1zbTIgXAogCXNoYXJlZCAgJHtzc2xhcmNofSAkUlBNX09QVF9GTEFHUwog CiAjIERvIG5vdCBydW4gdGhpcyBpbiBhIHByb2R1Y3Rpb24gcGFja2FnZSB0aGUgRklQUyBzeW1i b2xzIG11c3QgYmUgcGF0Y2hlZC1pbgpAQCAtMjY1LDYgKzI1OCwxMyBAQCBkb25lCiAlY2hlY2sK ICMgVmVyaWZ5IHRoYXQgd2hhdCB3YXMgY29tcGlsZWQgYWN0dWFsbHkgd29ya3MuCiAKKyMgSGFj ayAtIGVpdGhlciBlbmFibGUgU0NUUCBBVVRIIGNodW5rcyBpbiBrZXJuZWwgb3IgZGlzYWJsZSBz Y3RwIGZvciBjaGVjaworKHN5c2N0bCBuZXQuc2N0cC5hZGRpcF9lbmFibGU9MSAmJiBzeXNjdGwg bmV0LnNjdHAuYXV0aF9lbmFibGU9MSkgfHwgXAorKGVjaG8gJ0ZhaWxlZCB0byBlbmFibGUgU0NU UCBBVVRIIGNodW5rcywgZGlzYWJsaW5nIFNDVFAgZm9yIHRlc3RzLi4uJyAmJgorIHNlZCAnLyJ6 bGliLWR5bmFtaWMiID0+ICJkZWZhdWx0IiwvYVwgXCAic2N0cCIgPT4gImRlZmF1bHQiLCcgY29u ZmlnZGF0YS5wbSA+IGNvbmZpZ2RhdGEucG0ubmV3ICYmIFwKKyB0b3VjaCAtciBjb25maWdkYXRh LnBtIGNvbmZpZ2RhdGEucG0ubmV3ICYmIFwKKyBtdiAtZiBjb25maWdkYXRhLnBtLm5ldyBjb25m aWdkYXRhLnBtKQorCiAjIFdlIG11c3QgcmV2ZXJ0IHBhdGNoMzEgYmVmb3JlIHRlc3RzIG90aGVy d2lzZSB0aGV5IHdpbGwgZmFpbAogcGF0Y2ggLXAxIC1SIDwgJXtQQVRDSDMxfQogCkBAIC0yNzYs NiArMjc2LDggQEAgY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMgbGlic3NsLnNvLiV7 c292ZXJzaW9ufSA+LmxpYnNzbC5zby4le3NvdmVyc2lvbn0KIGxuIC1zIC5saWJzc2wuc28uJXtz b3ZlcnNpb259LmhtYWMgLmxpYnNzbC5zby5obWFjCiBPUEVOU1NMX0VOQUJMRV9NRDVfVkVSSUZZ PQogZXhwb3J0IE9QRU5TU0xfRU5BQkxFX01ENV9WRVJJRlkKK09QRU5TU0xfU1lTVEVNX0NJUEhF UlNfT1ZFUlJJREU9eHl6X25vbmV4aXN0ZW50X2ZpbGUKK2V4cG9ydCBPUEVOU1NMX1NZU1RFTV9D SVBIRVJTX09WRVJSSURFCiBtYWtlIHRlc3QKIAogIyBBZGQgZ2VuZXJhdGlvbiBvZiBITUFDIGNo ZWNrc3VtIG9mIHRoZSBmaW5hbCBzdHJpcHBlZCBsaWJyYXJ5CkBAIC0zNDQsMTEgKzM0NiwxMyBA QCBta2RpciAtbTc1NSAkUlBNX0JVSUxEX1JPT1Qle19zeXNjb25mZGlyfS9wa2kvQ0EvY2VydHMK IG1rZGlyIC1tNzU1ICRSUE1fQlVJTERfUk9PVCV7X3N5c2NvbmZkaXJ9L3BraS9DQS9jcmwKIG1r ZGlyIC1tNzU1ICRSUE1fQlVJTERfUk9PVCV7X3N5c2NvbmZkaXJ9L3BraS9DQS9uZXdjZXJ0cwog Ci0jIEVuc3VyZSB0aGUgb3BlbnNzbC5jbmYgdGltZXN0YW1wIGlzIGlkZW50aWNhbCBhY3Jvc3Mg YnVpbGRzIHRvIGF2b2lkCisjIEVuc3VyZSB0aGUgY29uZmlnIGZpbGUgdGltZXN0YW1wcyBhcmUg aWRlbnRpY2FsIGFjcm9zcyBidWlsZHMgdG8gYXZvaWQKICMgbXVsaXRsaWIgY29uZmxpY3RzIGFu ZCB1bm5lY2Vzc2FyeSByZW5hbWVzIG9uIHVwZ3JhZGUKIHRvdWNoIC1yICV7U09VUkNFMn0gJFJQ TV9CVUlMRF9ST09UJXtfc3lzY29uZmRpcn0vcGtpL3Rscy9vcGVuc3NsLmNuZgordG91Y2ggLXIg JXtTT1VSQ0UyfSAkUlBNX0JVSUxEX1JPT1Qle19zeXNjb25mZGlyfS9wa2kvdGxzL2N0X2xvZ19s aXN0LmNuZgogCiBybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19zeXNjb25mZGlyfS9wa2kvdGxzL29w ZW5zc2wuY25mLmRpc3QKK3JtIC1mICRSUE1fQlVJTERfUk9PVCV7X3N5c2NvbmZkaXJ9L3BraS90 bHMvY3RfbG9nX2xpc3QuY25mLmRpc3QKIAogIyBEZXRlcm1pbmUgd2hpY2ggYXJjaCBvcGVuc3Ns Y29uZi5oIGlzIGdvaW5nIHRvIHRyeSB0byAjaW5jbHVkZS4KIGJhc2VhcmNoPSV7X2FyY2h9CkBA IC0zOTksNiArNDAzLDcgQEAgZXhwb3J0IExEX0xJQlJBUllfUEFUSAogJWRpciAle19zeXNjb25m ZGlyfS9wa2kvdGxzL21pc2MKICVkaXIgJXtfc3lzY29uZmRpcn0vcGtpL3Rscy9wcml2YXRlCiAl Y29uZmlnKG5vcmVwbGFjZSkgJXtfc3lzY29uZmRpcn0vcGtpL3Rscy9vcGVuc3NsLmNuZgorJWNv bmZpZyhub3JlcGxhY2UpICV7X3N5c2NvbmZkaXJ9L3BraS90bHMvY3RfbG9nX2xpc3QuY25mCiAl YXR0cigwNzU1LHJvb3Qscm9vdCkgJXtfbGliZGlyfS9saWJjcnlwdG8uc28uJXt2ZXJzaW9ufQog JWF0dHIoMDc1NSxyb290LHJvb3QpICV7X2xpYmRpcn0vbGliY3J5cHRvLnNvLiV7c292ZXJzaW9u fQogJWF0dHIoMDc1NSxyb290LHJvb3QpICV7X2xpYmRpcn0vbGlic3NsLnNvLiV7dmVyc2lvbn0K QEAgLTQzNSw2ICs0NDAsOSBAQCBleHBvcnQgTERfTElCUkFSWV9QQVRICiAlcG9zdHVuIGxpYnMg LXAgL3NiaW4vbGRjb25maWcKIAogJWNoYW5nZWxvZworKiBXZWQgSnVsIDI1IDIwMTggVG9tw6HF oSBNcsOheiA8dG1yYXpAcmVkaGF0LmNvbT4gMS4xLjEtMC5wcmU4LjEKKy0gdXBkYXRlIHRvIHRo ZSBsYXRlc3QgMS4xLjEgYmV0YSB2ZXJzaW9uCisKICogRnJpIEp1bCAxMyAyMDE4IEZlZG9yYSBS ZWxlYXNlIEVuZ2luZWVyaW5nIDxyZWxlbmdAZmVkb3JhcHJvamVjdC5vcmc+IC0gMToxLjEuMGgt NgogLSBSZWJ1aWx0IGZvciBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRmVkb3JhXzI5 X01hc3NfUmVidWlsZAogCgpkaWZmIC0tZ2l0IGEvc291cmNlcyBiL3NvdXJjZXMKaW5kZXggYjhm YjEyMS4uMWUwZDgxYSAxMDA2NDQKLS0tIGEvc291cmNlcworKysgYi9zb3VyY2VzCkBAIC0xICsx IEBACi1TSEE1MTIgKG9wZW5zc2wtMS4xLjBoLWhvYmJsZWQudGFyLnh6KSA9IGNiYTQ2NDE5NTZk NjU5M2Y1Y2Y1MTY0YmVkMTJmYjNhY2ZhYTljMjRhNjlkNTY0MmNjMDI2N2QwOTE4NTU1NDUwYTEy ZGRlYWM2ZTAyYjI0NmFmYTY0ZTcwMTlmMzViYWEwZDkzMDJkMWYwNmUzYmU1NTU1ZDgzNDAzMTlj NWU0CitTSEE1MTIgKG9wZW5zc2wtMS4xLjEtcHJlOC1ob2JibGVkLnRhci54eikgPSBlY2EwYzg4 NDNjNjlmYzNkY2QxYTI3ZDU2MTA3MzY4NTQ4ZjU2NzRhNjRkZWNjNjJmZjQ4MTk2ZDMwNDg1ZjI4 NzU1MGJiNjcxY2E4YmM0OGFlZWY0ODJhODQxOTQ2MjYzOGJmMTUyODUwYzc0MWU0NTU0MjE5MjMw ZjRjNDU4Mgo=