From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ozlabs.org (ozlabs.org [203.10.76.45]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mx.ozlabs.org", Issuer "CA Cert Signing Authority" (verified OK)) by bilbo.ozlabs.org (Postfix) with ESMTPS id 0E4C7B6F34 for ; Fri, 11 Sep 2009 03:24:26 +1000 (EST) MIME-Version: 1.0 Date: Fri, 11 Sep 2009 01:24:20 +0800 Message-ID: <8abf57fa0909101024n668ad353kf8be038898305c28@mail.gmail.com> Subject: How to access DCR registers in powerpc440gx? Got err when use macro def in Linux kernel From: g r1x To: Linuxppc-dev@ozlabs.org Content-Type: multipart/mixed; boundary=001485e9a60548c38f04733c78c7 List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , --001485e9a60548c38f04733c78c7 Content-Type: text/plain; charset=ISO-8859-1 Now, I'm writing a DMA driver on powerpc 440gx platform(2.6.26.5), as the only way to set up DMA Controller is to access it's dcr registers with 'mfdcr' and 'mtdcr'. I've found some dma code in Linux kernel 2.6.26.5, so I copy the code u wrote to my driver module directory, and include them, but when I compile my driver, gcc complains following err messages: -------------------------------------------------------- {standard input}: Assembler messages: {standard input}:83: Error: unsupported relocation against dmanr --------------------------------------------------------- code I copy from kernel 2.6.26.5 (arch/ppc/syslib/ppc4xx_dma.c) -------------------------------------------- #include "dcr.h" /* #inlcude */ ppc_dma_ch_t dma_channels[MAX_PPC4xx_DMA_CHANNELS]; int ppc4xx_get_dma_status(void) { return (mfdcr(DCRN_DMASR)); } void ppc4xx_enable_dma(unsigned int dmanr) { unsigned int control; ppc_dma_ch_t *p_dma_ch = &dma_channels[dmanr]; ......... / * for other xfer modes, the addresses are already set */ control = mfdcr(DCRN_DMACR0 + (dmanr * 0x8)); <----------------err } void ppc4xx_set_src_addr(int dmanr, phys_addr_t src_addr) { if (dmanr >= MAX_PPC4xx_DMA_CHANNELS) { printk("set_src_addr: bad channel: %d\n", dmanr); return; } #ifdef PPC4xx_DMA_64BIT mtdcr(DCRN_DMASAH0 + dmanr*2, (u32)(src_addr >> 32)); #else mtdcr(DCRN_DMASA0 + dmanr*2, (u32)src_addr); #endif } -------------------------------------------------- DCR access micro I copied: ---------------------------------- #define mfdcr(rn) \ ({ \ unsigned long rval; \ asm volatile("mfdcr %0,%1" : "=r"(rval) : "i"(rn)); \ rval; \ }) #define mtdcr(rn, val) \ asm volatile("mtdcr %0,%1" : : "i"(rn), "r"(val)) ----------------------------------------------------- Makefile I worte ------------------------- obj-m := dmatest.o dmatest-objs += dma.o core.o KBUILD_CFLAGS += -m440 -mregnames -Wa, -booke KBUILD_ASFAGS += -m440 -mregnames -Wa, -booke --------- KBUILD_CFLAGS += -m440 -mregnames -Wa, -booke KBUILD_ASFAGS += -m440 -mregnames -Wa, -booke I add these two sentences when I read these http://sourceware.org/ml/binutils/2004-09/msg00161.html. When I change it to mfdcr(DCRN_DMACR0); then everything is fine. but from the result I got when I insmod my module driver, dcr reg is not changed. It seems that it's the problem with gnu assembler, my GNU assembler ver is 2.17 The attachments are the c source file I copy from linux 2.6.26.5, and I use these dma function to directly manipulate dcr registers, but when I make my driver module outside kernel source tree, it complains the error I mentioned above. Thanks! --001485e9a60548c38f04733c78c7 Content-Type: application/octet-stream; name="ppc4xx_dma.c" Content-Disposition: attachment; filename="ppc4xx_dma.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fzfrp9ac0 LyoKICogSUJNIFBQQzR4eCBETUEgZW5naW5lIGNvcmUgbGlicmFyeQogKgogKiBDb3B5cmlnaHQg MjAwMC0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgogKgogKiBDbGVhbmVkIHVwIGFuZCBj b252ZXJ0ZWQgdG8gbmV3IERDUiBhY2Nlc3MKICogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVs LmNyYXNoaW5nLm9yZz4KICoKICogT3JpZ2luYWwgY29kZSBieSBBcm1pbiBLdXN0ZXIgPGFrdXN0 ZXJAbXZpc3RhLmNvbT4KICogYW5kIFBldGUgUG9wb3YgPHBwb3BvdkBtdmlzdGEuY29tPgogKgog KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0 IGFuZC9vciBtb2RpZnkgaXQKICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFs ICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAqIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgog KiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKICogd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4sCiAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgog Ki8KCiNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KI2luY2x1ZGUgPGxpbnV4L21tLmg+CiNpbmNs dWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KCiNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiNpbmNsdWRlIDxhc20v aW8uaD4KI2luY2x1ZGUgPGFzbS9kbWEuaD4KI2luY2x1ZGUgPGFzbS9wcGM0eHhfZG1hLmg+Cgpw cGNfZG1hX2NoX3QgZG1hX2NoYW5uZWxzW01BWF9QUEM0eHhfRE1BX0NIQU5ORUxTXTsKCmludApw cGM0eHhfZ2V0X2RtYV9zdGF0dXModm9pZCkKewoJcmV0dXJuIChtZmRjcihEQ1JOX0RNQVNSKSk7 Cn0KCnZvaWQKcHBjNHh4X3NldF9zcmNfYWRkcihpbnQgZG1hbnIsIHBoeXNfYWRkcl90IHNyY19h ZGRyKQp7CglpZiAoZG1hbnIgPj0gTUFYX1BQQzR4eF9ETUFfQ0hBTk5FTFMpIHsKCQlwcmludGso InNldF9zcmNfYWRkcjogYmFkIGNoYW5uZWw6ICVkXG4iLCBkbWFucik7CgkJcmV0dXJuOwoJfQoK I2lmZGVmIFBQQzR4eF9ETUFfNjRCSVQKCW10ZGNyKERDUk5fRE1BU0FIMCArIGRtYW5yKjIsICh1 MzIpKHNyY19hZGRyID4+IDMyKSk7CiNlbHNlCgltdGRjcihEQ1JOX0RNQVNBMCArIGRtYW5yKjIs ICh1MzIpc3JjX2FkZHIpOwojZW5kaWYKfQoKdm9pZApwcGM0eHhfc2V0X2RzdF9hZGRyKGludCBk bWFuciwgcGh5c19hZGRyX3QgZHN0X2FkZHIpCnsKCWlmIChkbWFuciA+PSBNQVhfUFBDNHh4X0RN QV9DSEFOTkVMUykgewoJCXByaW50aygic2V0X2RzdF9hZGRyOiBiYWQgY2hhbm5lbDogJWRcbiIs IGRtYW5yKTsKCQlyZXR1cm47Cgl9CgojaWZkZWYgUFBDNHh4X0RNQV82NEJJVAoJbXRkY3IoRENS Tl9ETUFEQUgwICsgZG1hbnIqMiwgKHUzMikoZHN0X2FkZHIgPj4gMzIpKTsKI2Vsc2UKCW10ZGNy KERDUk5fRE1BREEwICsgZG1hbnIqMiwgKHUzMilkc3RfYWRkcik7CiNlbmRpZgp9Cgp2b2lkCnBw YzR4eF9lbmFibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKewoJdW5zaWduZWQgaW50IGNvbnRy b2w7CglwcGNfZG1hX2NoX3QgKnBfZG1hX2NoID0gJmRtYV9jaGFubmVsc1tkbWFucl07Cgl1bnNp Z25lZCBpbnQgc3RhdHVzX2JpdHNbXSA9IHsgRE1BX0NTMCB8IERNQV9UUzAgfCBETUFfQ0gwX0VS UiwKCQkJCSAgICAgICBETUFfQ1MxIHwgRE1BX1RTMSB8IERNQV9DSDFfRVJSLAoJCQkJICAgICAg IERNQV9DUzIgfCBETUFfVFMyIHwgRE1BX0NIMl9FUlIsCgkJCQkgICAgICAgRE1BX0NTMyB8IERN QV9UUzMgfCBETUFfQ0gzX0VSUn07CgoJaWYgKHBfZG1hX2NoLT5pbl91c2UpIHsKCQlwcmludGso ImVuYWJsZV9kbWE6IGNoYW5uZWwgJWQgaW4gdXNlXG4iLCBkbWFucik7CgkJcmV0dXJuOwoJfQoK CWlmIChkbWFuciA+PSBNQVhfUFBDNHh4X0RNQV9DSEFOTkVMUykgewoJCXByaW50aygiZW5hYmxl X2RtYTogYmFkIGNoYW5uZWw6ICVkXG4iLCBkbWFucik7CgkJcmV0dXJuOwoJfQoKCWlmIChwX2Rt YV9jaC0+bW9kZSA9PSBETUFfTU9ERV9SRUFEKSB7CgkJLyogcGVyaXBoZXJhbCB0byBtZW1vcnkg Ki8KCQlwcGM0eHhfc2V0X3NyY19hZGRyKGRtYW5yLCAwKTsKCQlwcGM0eHhfc2V0X2RzdF9hZGRy KGRtYW5yLCBwX2RtYV9jaC0+YWRkcik7Cgl9IGVsc2UgaWYgKHBfZG1hX2NoLT5tb2RlID09IERN QV9NT0RFX1dSSVRFKSB7CgkJLyogbWVtb3J5IHRvIHBlcmlwaGVyYWwgKi8KCQlwcGM0eHhfc2V0 X3NyY19hZGRyKGRtYW5yLCBwX2RtYV9jaC0+YWRkcik7CgkJcHBjNHh4X3NldF9kc3RfYWRkcihk bWFuciwgMCk7Cgl9CgoJLyogZm9yIG90aGVyIHhmZXIgbW9kZXMsIHRoZSBhZGRyZXNzZXMgYXJl IGFscmVhZHkgc2V0ICovCgljb250cm9sID0gbWZkY3IoRENSTl9ETUFDUjAgKyAoZG1hbnIgKiAw eDgpKTsKCgljb250cm9sICY9IH4oRE1BX1RNX01BU0sgfCBETUFfVEQpOwkvKiBjbGVhciBhbGwg bW9kZSBiaXRzICovCglpZiAocF9kbWFfY2gtPm1vZGUgPT0gRE1BX01PREVfTU0pIHsKCQkvKiBz b2Z0d2FyZSBpbml0aWF0ZWQgbWVtb3J5IHRvIG1lbW9yeSAqLwoJCWNvbnRyb2wgfD0gRE1BX0VU RF9PVVRQVVQgfCBETUFfVENFX0VOQUJMRTsKCX0KCgltdGRjcihEQ1JOX0RNQUNSMCArIChkbWFu ciAqIDB4OCksIGNvbnRyb2wpOwoKCS8qCgkgKiBDbGVhciB0aGUgQ1MsIFRTLCBSSSBiaXRzIGZv ciB0aGUgY2hhbm5lbCBmcm9tIERNQVNSLiAgVGhpcwoJICogaGFzIGJlZW4gb2JzZXJ2ZWQgdG8g aGFwcGVuIGNvcnJlY3RseSBvbmx5IGFmdGVyIHRoZSBtb2RlIGFuZAoJICogRVREL0RDRSBiaXRz IGluIERNQUNSeCBhcmUgc2V0IGFib3ZlLiAgTXVzdCBkbyB0aGlzIGJlZm9yZQoJICogZW5hYmxp bmcgdGhlIGNoYW5uZWwuCgkgKi8KCgltdGRjcihEQ1JOX0RNQVNSLCBzdGF0dXNfYml0c1tkbWFu cl0pOwoKCS8qCgkgKiBGb3IgZGV2aWNlLXBhY2VkIHRyYW5zZmVycywgVGVybWluYWwgQ291bnQg RW5hYmxlIGFwcGFyZW50bHkKCSAqIG11c3QgYmUgb24sIGFuZCB0aGlzIG11c3QgYmUgdHVybmVk IG9uIGFmdGVyIHRoZSBtb2RlLCBldGMuCgkgKiBiaXRzIGFyZSBjbGVhcmVkIGFib3ZlIChhdCBs ZWFzdCBvbiBSZWR3b29kLTYpLgoJICovCgoJaWYgKChwX2RtYV9jaC0+bW9kZSA9PSBETUFfTU9E RV9NTV9ERVZBVERTVCkgfHwKCSAgICAocF9kbWFfY2gtPm1vZGUgPT0gRE1BX01PREVfTU1fREVW QVRTUkMpKQoJCWNvbnRyb2wgfD0gRE1BX1RDRV9FTkFCTEU7CgoJLyoKCSAqIE5vdyBlbmFibGUg dGhlIGNoYW5uZWwuCgkgKi8KCgljb250cm9sIHw9IChwX2RtYV9jaC0+bW9kZSB8IERNQV9DRV9F TkFCTEUpOwoKCW10ZGNyKERDUk5fRE1BQ1IwICsgKGRtYW5yICogMHg4KSwgY29udHJvbCk7CgoJ cF9kbWFfY2gtPmluX3VzZSA9IDE7Cn0KCnZvaWQKcHBjNHh4X2Rpc2FibGVfZG1hKHVuc2lnbmVk IGludCBkbWFucikKewoJdW5zaWduZWQgaW50IGNvbnRyb2w7CglwcGNfZG1hX2NoX3QgKnBfZG1h X2NoID0gJmRtYV9jaGFubmVsc1tkbWFucl07CgoJaWYgKCFwX2RtYV9jaC0+aW5fdXNlKSB7CgkJ cHJpbnRrKCJkaXNhYmxlX2RtYTogY2hhbm5lbCAlZCBub3QgaW4gdXNlXG4iLCBkbWFucik7CgkJ cmV0dXJuOwoJfQoKCWlmIChkbWFuciA+PSBNQVhfUFBDNHh4X0RNQV9DSEFOTkVMUykgewoJCXBy aW50aygiZGlzYWJsZV9kbWE6IGJhZCBjaGFubmVsOiAlZFxuIiwgZG1hbnIpOwoJCXJldHVybjsK CX0KCgljb250cm9sID0gbWZkY3IoRENSTl9ETUFDUjAgKyAoZG1hbnIgKiAweDgpKTsKCWNvbnRy b2wgJj0gfkRNQV9DRV9FTkFCTEU7CgltdGRjcihEQ1JOX0RNQUNSMCArIChkbWFuciAqIDB4OCks IGNvbnRyb2wpOwoKCXBfZG1hX2NoLT5pbl91c2UgPSAwOwp9CgovKgogKiBTZXRzIHRoZSBkbWEg bW9kZSBmb3Igc2luZ2xlIERNQSB0cmFuc2ZlcnMgb25seS4KICogRm9yIHNjYXR0ZXIvZ2F0aGVy IHRyYW5zZmVycywgdGhlIG1vZGUgaXMgcGFzc2VkIHRvIHRoZQogKiBhbGxvY19kbWFfaGFuZGxl KCkgZnVuY3Rpb24gYXMgb25lIG9mIHRoZSBwYXJhbWV0ZXJzLgogKgogKiBUaGUgbW9kZSBpcyBz aW1wbHkgc2F2ZWQgYW5kIHVzZWQgbGF0ZXIuICBUaGlzIGFsbG93cwogKiB0aGUgZHJpdmVyIHRv IGNhbGwgc2V0X2RtYV9tb2RlKCkgYW5kIHNldF9kbWFfYWRkcigpIGluCiAqIGFueSBvcmRlci4K ICoKICogVmFsaWQgbW9kZSB2YWx1ZXMgYXJlOgogKgogKiBETUFfTU9ERV9SRUFEICAgICAgICAg IHBlcmlwaGVyYWwgdG8gbWVtb3J5CiAqIERNQV9NT0RFX1dSSVRFICAgICAgICAgbWVtb3J5IHRv IHBlcmlwaGVyYWwKICogRE1BX01PREVfTU0gICAgICAgICAgICBtZW1vcnkgdG8gbWVtb3J5CiAq IERNQV9NT0RFX01NX0RFVkFUU1JDICAgZGV2aWNlLXBhY2VkIG1lbW9yeSB0byBtZW1vcnksIGRl dmljZSBhdCBzcmMKICogRE1BX01PREVfTU1fREVWQVREU1QgICBkZXZpY2UtcGFjZWQgbWVtb3J5 IHRvIG1lbW9yeSwgZGV2aWNlIGF0IGRzdAogKi8KaW50CnBwYzR4eF9zZXRfZG1hX21vZGUodW5z aWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgbW9kZSkKewoJcHBjX2RtYV9jaF90ICpwX2Rt YV9jaCA9ICZkbWFfY2hhbm5lbHNbZG1hbnJdOwoKCWlmIChkbWFuciA+PSBNQVhfUFBDNHh4X0RN QV9DSEFOTkVMUykgewoJCXByaW50aygic2V0X2RtYV9tb2RlOiBiYWQgY2hhbm5lbCAweCV4XG4i LCBkbWFucik7CgkJcmV0dXJuIERNQV9TVEFUVVNfQkFEX0NIQU5ORUw7Cgl9CgoJcF9kbWFfY2gt Pm1vZGUgPSBtb2RlOwoKCXJldHVybiBETUFfU1RBVFVTX0dPT0Q7Cn0KCi8qCiAqIFNldHMgdGhl IERNQSBDb3VudCByZWdpc3Rlci4gTm90ZSB0aGF0ICdjb3VudCcgaXMgaW4gYnl0ZXMuCiAqIEhv d2V2ZXIsIHRoZSBETUEgQ291bnQgcmVnaXN0ZXIgY291bnRzIHRoZSBudW1iZXIgb2YgInRyYW5z ZmVycyIsCiAqIHdoZXJlIGVhY2ggdHJhbnNmZXIgaXMgZXF1YWwgdG8gdGhlIGJ1cyB3aWR0aC4g IFRodXMsIGNvdW50CiAqIE1VU1QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYnVzIHdpZHRoLgogKi8K dm9pZApwcGM0eHhfc2V0X2RtYV9jb3VudCh1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGlu dCBjb3VudCkKewoJcHBjX2RtYV9jaF90ICpwX2RtYV9jaCA9ICZkbWFfY2hhbm5lbHNbZG1hbnJd OwoKI2lmZGVmIERFQlVHXzR4eERNQQoJewoJCWludCBlcnJvciA9IDA7CgkJc3dpdGNoIChwX2Rt YV9jaC0+cHdpZHRoKSB7CgkJY2FzZSBQV184OgoJCQlicmVhazsKCQljYXNlIFBXXzE2OgoJCQlp ZiAoY291bnQgJiAweDEpCgkJCQllcnJvciA9IDE7CgkJCWJyZWFrOwoJCWNhc2UgUFdfMzI6CgkJ CWlmIChjb3VudCAmIDB4MykKCQkJCWVycm9yID0gMTsKCQkJYnJlYWs7CgkJY2FzZSBQV182NDoK CQkJaWYgKGNvdW50ICYgMHg3KQoJCQkJZXJyb3IgPSAxOwoJCQlicmVhazsKCQlkZWZhdWx0OgoJ CQlwcmludGsoInNldF9kbWFfY291bnQ6IGludmFsaWQgYnVzIHdpZHRoOiAweCV4XG4iLAoJCQkg ICAgICAgcF9kbWFfY2gtPnB3aWR0aCk7CgkJCXJldHVybjsKCQl9CgkJaWYgKGVycm9yKQoJCQlw cmludGsKCQkJICAgICgiV2FybmluZzogc2V0X2RtYV9jb3VudCBjb3VudCAweCV4IGJ1cyB3aWR0 aCAlZFxuIiwKCQkJICAgICBjb3VudCwgcF9kbWFfY2gtPnB3aWR0aCk7Cgl9CiNlbmRpZgoKCWNv dW50ID0gY291bnQgPj4gcF9kbWFfY2gtPnNoaWZ0OwoKCW10ZGNyKERDUk5fRE1BQ1QwICsgKGRt YW5yICogMHg4KSwgY291bnQpOwp9CgovKgogKiAgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRl cyBsZWZ0IHRvIGJlIHRyYW5zZmVycmVkLgogKiAgIEFmdGVyIGEgRE1BIHRyYW5zZmVyLCB0aGlz IHNob3VsZCByZXR1cm4gemVyby4KICogICBSZWFkaW5nIHRoaXMgd2hpbGUgYSBETUEgdHJhbnNm ZXIgaXMgc3RpbGwgaW4gcHJvZ3Jlc3Mgd2lsbCByZXR1cm4KICogICB1bnByZWRpY3RhYmxlIHJl c3VsdHMuCiAqLwppbnQKcHBjNHh4X2dldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZG1hbnIp CnsKCXVuc2lnbmVkIGludCBjb3VudDsKCXBwY19kbWFfY2hfdCAqcF9kbWFfY2ggPSAmZG1hX2No YW5uZWxzW2RtYW5yXTsKCglpZiAoZG1hbnIgPj0gTUFYX1BQQzR4eF9ETUFfQ0hBTk5FTFMpIHsK CQlwcmludGsoInBwYzR4eF9nZXRfZG1hX3Jlc2lkdWU6IGJhZCBjaGFubmVsIDB4JXhcbiIsIGRt YW5yKTsKCQlyZXR1cm4gRE1BX1NUQVRVU19CQURfQ0hBTk5FTDsKCX0KCgljb3VudCA9IG1mZGNy KERDUk5fRE1BQ1QwICsgKGRtYW5yICogMHg4KSk7CgoJcmV0dXJuIChjb3VudCA8PCBwX2RtYV9j aC0+c2hpZnQpOwp9CgovKgogKiBTZXRzIHRoZSBETUEgYWRkcmVzcyBmb3IgYSBtZW1vcnkgdG8g cGVyaXBoZXJhbCBvciBwZXJpcGhlcmFsCiAqIHRvIG1lbW9yeSB0cmFuc2Zlci4gIFRoZSBhZGRy ZXNzIGlzIGp1c3Qgc2F2ZWQgaW4gdGhlIGNoYW5uZWwKICogc3RydWN0dXJlIGZvciBub3cgYW5k IHVzZWQgbGF0ZXIgaW4gZW5hYmxlX2RtYSgpLgogKi8Kdm9pZApwcGM0eHhfc2V0X2RtYV9hZGRy KHVuc2lnbmVkIGludCBkbWFuciwgcGh5c19hZGRyX3QgYWRkcikKewoJcHBjX2RtYV9jaF90ICpw X2RtYV9jaCA9ICZkbWFfY2hhbm5lbHNbZG1hbnJdOwoKCWlmIChkbWFuciA+PSBNQVhfUFBDNHh4 X0RNQV9DSEFOTkVMUykgewoJCXByaW50aygicHBjNHh4X3NldF9kbWFfYWRkcjogYmFkIGNoYW5u ZWw6ICVkXG4iLCBkbWFucik7CgkJcmV0dXJuOwoJfQoKI2lmZGVmIERFQlVHXzR4eERNQQoJewoJ CWludCBlcnJvciA9IDA7CgkJc3dpdGNoIChwX2RtYV9jaC0+cHdpZHRoKSB7CgkJY2FzZSBQV184 OgoJCQlicmVhazsKCQljYXNlIFBXXzE2OgoJCQlpZiAoKHVuc2lnbmVkKSBhZGRyICYgMHgxKQoJ CQkJZXJyb3IgPSAxOwoJCQlicmVhazsKCQljYXNlIFBXXzMyOgoJCQlpZiAoKHVuc2lnbmVkKSBh ZGRyICYgMHgzKQoJCQkJZXJyb3IgPSAxOwoJCQlicmVhazsKCQljYXNlIFBXXzY0OgoJCQlpZiAo KHVuc2lnbmVkKSBhZGRyICYgMHg3KQoJCQkJZXJyb3IgPSAxOwoJCQlicmVhazsKCQlkZWZhdWx0 OgoJCQlwcmludGsoInBwYzR4eF9zZXRfZG1hX2FkZHI6IGludmFsaWQgYnVzIHdpZHRoOiAweCV4 XG4iLAoJCQkgICAgICAgcF9kbWFfY2gtPnB3aWR0aCk7CgkJCXJldHVybjsKCQl9CgkJaWYgKGVy cm9yKQoJCQlwcmludGsoIldhcm5pbmc6IHBwYzR4eF9zZXRfZG1hX2FkZHIgYWRkciAweCV4IGJ1 cyB3aWR0aCAlZFxuIiwKCQkJICAgICAgIGFkZHIsIHBfZG1hX2NoLT5wd2lkdGgpOwoJfQojZW5k aWYKCgkvKiBzYXZlIGRtYSBhZGRyZXNzIGFuZCBwcm9ncmFtIGl0IGxhdGVyIGFmdGVyIHdlIGtu b3cgdGhlIHhmZXIgbW9kZSAqLwoJcF9kbWFfY2gtPmFkZHIgPSBhZGRyOwp9CgovKgogKiBTZXRz IGJvdGggRE1BIGFkZHJlc3NlcyBmb3IgYSBtZW1vcnkgdG8gbWVtb3J5IHRyYW5zZmVyLgogKiBG b3IgbWVtb3J5IHRvIHBlcmlwaGVyYWwgb3IgcGVyaXBoZXJhbCB0byBtZW1vcnkgdHJhbnNmZXJz CiAqIHRoZSBmdW5jdGlvbiBzZXRfZG1hX2FkZHIoKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgog Ki8Kdm9pZApwcGM0eHhfc2V0X2RtYV9hZGRyMih1bnNpZ25lZCBpbnQgZG1hbnIsIHBoeXNfYWRk cl90IHNyY19kbWFfYWRkciwKCQkgICAgIHBoeXNfYWRkcl90IGRzdF9kbWFfYWRkcikKewoJaWYg KGRtYW5yID49IE1BWF9QUEM0eHhfRE1BX0NIQU5ORUxTKSB7CgkJcHJpbnRrKCJwcGM0eHhfc2V0 X2RtYV9hZGRyMjogYmFkIGNoYW5uZWw6ICVkXG4iLCBkbWFucik7CgkJcmV0dXJuOwoJfQoKI2lm ZGVmIERFQlVHXzR4eERNQQoJewoJCXBwY19kbWFfY2hfdCAqcF9kbWFfY2ggPSAmZG1hX2NoYW5u ZWxzW2RtYW5yXTsKCQlpbnQgZXJyb3IgPSAwOwoJCXN3aXRjaCAocF9kbWFfY2gtPnB3aWR0aCkg ewoJCQljYXNlIFBXXzg6CgkJCQlicmVhazsKCQkJY2FzZSBQV18xNjoKCQkJCWlmICgoKHVuc2ln bmVkKSBzcmNfZG1hX2FkZHIgJiAweDEpIHx8CgkJCQkJCSgodW5zaWduZWQpIGRzdF9kbWFfYWRk ciAmIDB4MSkKCQkJCSAgICkKCQkJCQllcnJvciA9IDE7CgkJCQlicmVhazsKCQkJY2FzZSBQV18z MjoKCQkJCWlmICgoKHVuc2lnbmVkKSBzcmNfZG1hX2FkZHIgJiAweDMpIHx8CgkJCQkJCSgodW5z aWduZWQpIGRzdF9kbWFfYWRkciAmIDB4MykKCQkJCSAgICkKCQkJCQllcnJvciA9IDE7CgkJCQli cmVhazsKCQkJY2FzZSBQV182NDoKCQkJCWlmICgoKHVuc2lnbmVkKSBzcmNfZG1hX2FkZHIgJiAw eDcpIHx8CgkJCQkJCSgodW5zaWduZWQpIGRzdF9kbWFfYWRkciAmIDB4NykKCQkJCSAgICkKCQkJ CQllcnJvciA9IDE7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCXByaW50aygicHBjNHh4X3Nl dF9kbWFfYWRkcjI6IGludmFsaWQgYnVzIHdpZHRoOiAweCV4XG4iLAoJCQkJCQlwX2RtYV9jaC0+ cHdpZHRoKTsKCQkJCXJldHVybjsKCQl9CgkJaWYgKGVycm9yKQoJCQlwcmludGsKCQkJCSgiV2Fy bmluZzogcHBjNHh4X3NldF9kbWFfYWRkcjIgc3JjIDB4JXggZHN0IDB4JXggYnVzIHdpZHRoICVk XG4iLAoJCQkJIHNyY19kbWFfYWRkciwgZHN0X2RtYV9hZGRyLCBwX2RtYV9jaC0+cHdpZHRoKTsK CX0KI2VuZGlmCgoJcHBjNHh4X3NldF9zcmNfYWRkcihkbWFuciwgc3JjX2RtYV9hZGRyKTsKCXBw YzR4eF9zZXRfZHN0X2FkZHIoZG1hbnIsIGRzdF9kbWFfYWRkcik7Cn0KCi8qCiAqIEVuYWJsZXMg dGhlIGNoYW5uZWwgaW50ZXJydXB0LgogKgogKiBJZiBwZXJmb3JtaW5nIGEgc2NhdHRlci9nYXR0 ZXIgdHJhbnNmZXIsIHRoaXMgZnVuY3Rpb24KICogTVVTVCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxp bmcgYWxsb2NfZG1hX2hhbmRsZSgpIGFuZCBidWlsZGluZwogKiB0aGUgc2dsIGxpc3QuICBPdGhl cndpc2UsIGludGVycnVwdHMgd2lsbCBub3QgYmUgZW5hYmxlZCwgaWYKICogdGhleSB3ZXJlIHBy ZXZpb3VzbHkgZGlzYWJsZWQuCiAqLwppbnQKcHBjNHh4X2VuYWJsZV9kbWFfaW50ZXJydXB0KHVu c2lnbmVkIGludCBkbWFucikKewoJdW5zaWduZWQgaW50IGNvbnRyb2w7CglwcGNfZG1hX2NoX3Qg KnBfZG1hX2NoID0gJmRtYV9jaGFubmVsc1tkbWFucl07CgoJaWYgKGRtYW5yID49IE1BWF9QUEM0 eHhfRE1BX0NIQU5ORUxTKSB7CgkJcHJpbnRrKCJwcGM0eHhfZW5hYmxlX2RtYV9pbnRlcnJ1cHQ6 IGJhZCBjaGFubmVsOiAlZFxuIiwgZG1hbnIpOwoJCXJldHVybiBETUFfU1RBVFVTX0JBRF9DSEFO TkVMOwoJfQoKCXBfZG1hX2NoLT5pbnRfZW5hYmxlID0gMTsKCgljb250cm9sID0gbWZkY3IoRENS Tl9ETUFDUjAgKyAoZG1hbnIgKiAweDgpKTsKCWNvbnRyb2wgfD0gRE1BX0NJRV9FTkFCTEU7CS8q IENoYW5uZWwgSW50ZXJydXB0IEVuYWJsZSAqLwoJbXRkY3IoRENSTl9ETUFDUjAgKyAoZG1hbnIg KiAweDgpLCBjb250cm9sKTsKCglyZXR1cm4gRE1BX1NUQVRVU19HT09EOwp9CgovKgogKiBEaXNh YmxlcyB0aGUgY2hhbm5lbCBpbnRlcnJ1cHQuCiAqCiAqIElmIHBlcmZvcm1pbmcgYSBzY2F0dGVy L2dhdHRlciB0cmFuc2ZlciwgdGhpcyBmdW5jdGlvbgogKiBNVVNUIGJlIGNhbGxlZCBiZWZvcmUg Y2FsbGluZyBhbGxvY19kbWFfaGFuZGxlKCkgYW5kIGJ1aWxkaW5nCiAqIHRoZSBzZ2wgbGlzdC4g IE90aGVyd2lzZSwgaW50ZXJydXB0cyB3aWxsIG5vdCBiZSBkaXNhYmxlZCwgaWYKICogdGhleSB3 ZXJlIHByZXZpb3VzbHkgZW5hYmxlZC4KICovCmludApwcGM0eHhfZGlzYWJsZV9kbWFfaW50ZXJy dXB0KHVuc2lnbmVkIGludCBkbWFucikKewoJdW5zaWduZWQgaW50IGNvbnRyb2w7CglwcGNfZG1h X2NoX3QgKnBfZG1hX2NoID0gJmRtYV9jaGFubmVsc1tkbWFucl07CgoJaWYgKGRtYW5yID49IE1B WF9QUEM0eHhfRE1BX0NIQU5ORUxTKSB7CgkJcHJpbnRrKCJwcGM0eHhfZGlzYWJsZV9kbWFfaW50 ZXJydXB0OiBiYWQgY2hhbm5lbDogJWRcbiIsIGRtYW5yKTsKCQlyZXR1cm4gRE1BX1NUQVRVU19C QURfQ0hBTk5FTDsKCX0KCglwX2RtYV9jaC0+aW50X2VuYWJsZSA9IDA7CgoJY29udHJvbCA9IG1m ZGNyKERDUk5fRE1BQ1IwICsgKGRtYW5yICogMHg4KSk7Cgljb250cm9sICY9IH5ETUFfQ0lFX0VO QUJMRTsJLyogQ2hhbm5lbCBJbnRlcnJ1cHQgRW5hYmxlICovCgltdGRjcihEQ1JOX0RNQUNSMCAr IChkbWFuciAqIDB4OCksIGNvbnRyb2wpOwoKCXJldHVybiBETUFfU1RBVFVTX0dPT0Q7Cn0KCi8q CiAqIENvbmZpZ3VyZXMgYSBETUEgY2hhbm5lbCwgaW5jbHVkaW5nIHRoZSBwZXJpcGhlcmFsIGJ1 cyB3aWR0aCwgaWYgYQogKiBwZXJpcGhlcmFsIGlzIGF0dGFjaGVkIHRvIHRoZSBjaGFubmVsLCB0 aGUgcG9sYXJpdHkgb2YgdGhlIERNQVJlcSBhbmQKICogRE1BQWNrIHNpZ25hbHMsIGV0Yy4gIFRo aXMgaW5mb3JtYXRpb24gc2hvdWxkIHJlYWxseSBiZSBzZXR1cCBieSB0aGUgYm9vdAogKiBjb2Rl LCBzaW5jZSBtb3N0IGxpa2VseSB0aGUgY29uZmlndXJhdGlvbiB3b24ndCBjaGFuZ2UgZHluYW1p Y2FsbHkuCiAqIElmIHRoZSBrZXJuZWwgaGFzIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiwgaXQncyBy ZWNvbW1lbmRlZCB0aGF0IGl0J3MKICogY2FsbGVkIGZyb20gcGxhdGZvcm0gc3BlY2lmaWMgaW5p dCBjb2RlLiAgVGhlIGRyaXZlciBzaG91bGQgbm90IG5lZWQgdG8KICogY2FsbCB0aGlzIGZ1bmN0 aW9uLgogKi8KaW50CnBwYzR4eF9pbml0X2RtYV9jaGFubmVsKHVuc2lnbmVkIGludCBkbWFuciwg cHBjX2RtYV9jaF90ICogcF9pbml0KQp7Cgl1bnNpZ25lZCBpbnQgcG9sYXJpdHk7Cgl1aW50MzJf dCBjb250cm9sID0gMDsKCXBwY19kbWFfY2hfdCAqcF9kbWFfY2ggPSAmZG1hX2NoYW5uZWxzW2Rt YW5yXTsKCglETUFfTU9ERV9SRUFEID0gKHVuc2lnbmVkIGxvbmcpIERNQV9URDsJLyogUGVyaXBo ZXJhbCB0byBNZW1vcnkgKi8KCURNQV9NT0RFX1dSSVRFID0gMDsJLyogTWVtb3J5IHRvIFBlcmlw aGVyYWwgKi8KCglpZiAoIXBfaW5pdCkgewoJCXByaW50aygicHBjNHh4X2luaXRfZG1hX2NoYW5u ZWw6IE5VTEwgcF9pbml0XG4iKTsKCQlyZXR1cm4gRE1BX1NUQVRVU19OVUxMX1BPSU5URVI7Cgl9 CgoJaWYgKGRtYW5yID49IE1BWF9QUEM0eHhfRE1BX0NIQU5ORUxTKSB7CgkJcHJpbnRrKCJwcGM0 eHhfaW5pdF9kbWFfY2hhbm5lbDogYmFkIGNoYW5uZWwgJWRcbiIsIGRtYW5yKTsKCQlyZXR1cm4g RE1BX1NUQVRVU19CQURfQ0hBTk5FTDsKCX0KCiNpZiBEQ1JOX1BPTCA+IDAKCXBvbGFyaXR5ID0g bWZkY3IoRENSTl9QT0wpOwojZWxzZQoJcG9sYXJpdHkgPSAwOwojZW5kaWYKCgkvKiBTZXR1cCB0 aGUgY29udHJvbCByZWdpc3RlciBiYXNlZCBvbiB0aGUgdmFsdWVzIHBhc3NlZCB0bwoJICogdXMg aW4gcF9pbml0LiAgVGhlbiwgb3Zlci13cml0ZSB0aGUgY29udHJvbCByZWdpc3RlciB3aXRoIHRo aXMKCSAqIG5ldyB2YWx1ZS4KCSAqLwoJY29udHJvbCB8PSBTRVRfRE1BX0NPTlRST0w7CgoJLyog Y2xlYXIgYWxsIHBvbGFyaXR5IHNpZ25hbHMgYW5kIHRoZW4gIm9yIiBpbiBuZXcgc2lnbmFsIGxl dmVscyAqLwoJcG9sYXJpdHkgJj0gfkdFVF9ETUFfUE9MQVJJVFkoZG1hbnIpOwoJcG9sYXJpdHkg fD0gcF9pbml0LT5wb2xhcml0eTsKI2lmIERDUk5fUE9MID4gMAoJbXRkY3IoRENSTl9QT0wsIHBv bGFyaXR5KTsKI2VuZGlmCgltdGRjcihEQ1JOX0RNQUNSMCArIChkbWFuciAqIDB4OCksIGNvbnRy b2wpOwoKCS8qIHNhdmUgdGhlc2UgdmFsdWVzIGluIG91ciBkbWEgY2hhbm5lbCBzdHJ1Y3R1cmUg Ki8KCW1lbWNweShwX2RtYV9jaCwgcF9pbml0LCBzaXplb2YgKHBwY19kbWFfY2hfdCkpOwoKCS8q CgkgKiBUaGUgcGVyaXBoZXJhbCB3aWR0aCB2YWx1ZXMgd3JpdHRlbiBpbiB0aGUgY29udHJvbCBy ZWdpc3RlciBhcmU6CgkgKiAgIFBXXzggICAgICAgICAgICAgICAgIDAKCSAqICAgUFdfMTYgICAg ICAgICAgICAgICAgMQoJICogICBQV18zMiAgICAgICAgICAgICAgICAyCgkgKiAgIFBXXzY0ICAg ICAgICAgICAgICAgIDMKCSAqCgkgKiAgIFNpbmNlIHRoZSBETUEgY291bnQgcmVnaXN0ZXIgdGFr ZXMgdGhlIG51bWJlciBvZiAidHJhbnNmZXJzIiwKCSAqICAgd2UgbmVlZCB0byBkaXZpZGUgdGhl IGNvdW50IHNlbnQgdG8gdXMgaW4gY2VydGFpbgoJICogICBmdW5jdGlvbnMgYnkgdGhlIGFwcHJv cHJpYXRlIG51bWJlci4gIEl0IHNvIGhhcHBlbnMgdGhhdCBvdXIKCSAqICAgcmlnaHQgc2hpZnQg dmFsdWUgaXMgZXF1YWwgdG8gdGhlIHBlcmlwaGVyYWwgd2lkdGggdmFsdWUuCgkgKi8KCXBfZG1h X2NoLT5zaGlmdCA9IHBfaW5pdC0+cHdpZHRoOwoKCS8qCgkgKiBTYXZlIHRoZSBjb250cm9sIHdv cmQgZm9yIGVhc3kgYWNjZXNzLgoJICovCglwX2RtYV9jaC0+Y29udHJvbCA9IGNvbnRyb2w7CgoJ bXRkY3IoRENSTl9ETUFTUiwgMHhmZmZmZmZmZik7CS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciAq LwoJcmV0dXJuIERNQV9TVEFUVVNfR09PRDsKfQoKLyoKICogVGhpcyBmdW5jdGlvbiByZXR1cm5z IHRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24uCiAqLwppbnQKcHBjNHh4X2dldF9jaGFubmVsX2Nv bmZpZyh1bnNpZ25lZCBpbnQgZG1hbnIsIHBwY19kbWFfY2hfdCAqIHBfZG1hX2NoKQp7Cgl1bnNp Z25lZCBpbnQgcG9sYXJpdHk7Cgl1bnNpZ25lZCBpbnQgY29udHJvbDsKCglpZiAoZG1hbnIgPj0g TUFYX1BQQzR4eF9ETUFfQ0hBTk5FTFMpIHsKCQlwcmludGsoInBwYzR4eF9nZXRfY2hhbm5lbF9j b25maWc6IGJhZCBjaGFubmVsICVkXG4iLCBkbWFucik7CgkJcmV0dXJuIERNQV9TVEFUVVNfQkFE X0NIQU5ORUw7Cgl9CgoJbWVtY3B5KHBfZG1hX2NoLCAmZG1hX2NoYW5uZWxzW2RtYW5yXSwgc2l6 ZW9mIChwcGNfZG1hX2NoX3QpKTsKCiNpZiBEQ1JOX1BPTCA+IDAKCXBvbGFyaXR5ID0gbWZkY3Io RENSTl9QT0wpOwojZWxzZQoJcG9sYXJpdHkgPSAwOwojZW5kaWYKCglwX2RtYV9jaC0+cG9sYXJp dHkgPSBwb2xhcml0eSAmIEdFVF9ETUFfUE9MQVJJVFkoZG1hbnIpOwoJY29udHJvbCA9IG1mZGNy KERDUk5fRE1BQ1IwICsgKGRtYW5yICogMHg4KSk7CgoJcF9kbWFfY2gtPmNwID0gR0VUX0RNQV9Q UklPUklUWShjb250cm9sKTsKCXBfZG1hX2NoLT5wd2lkdGggPSBHRVRfRE1BX1BXKGNvbnRyb2wp OwoJcF9kbWFfY2gtPnBzYyA9IEdFVF9ETUFfUFNDKGNvbnRyb2wpOwoJcF9kbWFfY2gtPnB3YyA9 IEdFVF9ETUFfUFdDKGNvbnRyb2wpOwoJcF9kbWFfY2gtPnBoYyA9IEdFVF9ETUFfUEhDKGNvbnRy b2wpOwoJcF9kbWFfY2gtPmNlID0gR0VUX0RNQV9DRV9FTkFCTEUoY29udHJvbCk7CglwX2RtYV9j aC0+aW50X2VuYWJsZSA9IEdFVF9ETUFfQ0lFX0VOQUJMRShjb250cm9sKTsKCXBfZG1hX2NoLT5z aGlmdCA9IEdFVF9ETUFfUFcoY29udHJvbCk7CgojaWZkZWYgQ09ORklHX1BQQzR4eF9FRE1BCglw X2RtYV9jaC0+cGYgPSBHRVRfRE1BX1BSRUZFVENIKGNvbnRyb2wpOwojZWxzZQoJcF9kbWFfY2gt PmNoX2VuYWJsZSA9IEdFVF9ETUFfQ0goY29udHJvbCk7CglwX2RtYV9jaC0+ZWNlX2VuYWJsZSA9 IEdFVF9ETUFfRUNFKGNvbnRyb2wpOwoJcF9kbWFfY2gtPnRjZF9kaXNhYmxlID0gR0VUX0RNQV9U Q0QoY29udHJvbCk7CiNlbmRpZgoJcmV0dXJuIERNQV9TVEFUVVNfR09PRDsKfQoKLyoKICogU2V0 cyB0aGUgcHJpb3JpdHkgZm9yIHRoZSBETUEgY2hhbm5lbCBkbWFuci4KICogU2luY2UgdGhpcyBp cyBzZXR1cCBieSB0aGUgaGFyZHdhcmUgaW5pdCBmdW5jdGlvbiwgdGhpcyBmdW5jdGlvbgogKiBj YW4gYmUgdXNlZCB0byBkeW5hbWljYWxseSBjaGFuZ2UgdGhlIHByaW9yaXR5IG9mIGEgY2hhbm5l bC4KICoKICogQWNjZXB0YWJsZSBwcmlvcml0aWVzOgogKgogKiBQUklPUklUWV9MT1cKICogUFJJ T1JJVFlfTUlEX0xPVwogKiBQUklPUklUWV9NSURfSElHSAogKiBQUklPUklUWV9ISUdICiAqCiAq LwppbnQKcHBjNHh4X3NldF9jaGFubmVsX3ByaW9yaXR5KHVuc2lnbmVkIGludCBkbWFuciwgdW5z aWduZWQgaW50IHByaW9yaXR5KQp7Cgl1bnNpZ25lZCBpbnQgY29udHJvbDsKCglpZiAoZG1hbnIg Pj0gTUFYX1BQQzR4eF9ETUFfQ0hBTk5FTFMpIHsKCQlwcmludGsoInBwYzR4eF9zZXRfY2hhbm5l bF9wcmlvcml0eTogYmFkIGNoYW5uZWwgJWRcbiIsIGRtYW5yKTsKCQlyZXR1cm4gRE1BX1NUQVRV U19CQURfQ0hBTk5FTDsKCX0KCglpZiAoKHByaW9yaXR5ICE9IFBSSU9SSVRZX0xPVykgJiYKCSAg ICAocHJpb3JpdHkgIT0gUFJJT1JJVFlfTUlEX0xPVykgJiYKCSAgICAocHJpb3JpdHkgIT0gUFJJ T1JJVFlfTUlEX0hJR0gpICYmIChwcmlvcml0eSAhPSBQUklPUklUWV9ISUdIKSkgewoJCXByaW50 aygicHBjNHh4X3NldF9jaGFubmVsX3ByaW9yaXR5OiBiYWQgcHJpb3JpdHk6IDB4JXhcbiIsIHBy aW9yaXR5KTsKCX0KCgljb250cm9sID0gbWZkY3IoRENSTl9ETUFDUjAgKyAoZG1hbnIgKiAweDgp KTsKCWNvbnRyb2wgfD0gU0VUX0RNQV9QUklPUklUWShwcmlvcml0eSk7CgltdGRjcihEQ1JOX0RN QUNSMCArIChkbWFuciAqIDB4OCksIGNvbnRyb2wpOwoKCXJldHVybiBETUFfU1RBVFVTX0dPT0Q7 Cn0KCi8qCiAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBwZXJpcGhlcmFsIGF0dGFjaGVkIHRv IHRoaXMgY2hhbm5lbC4gVGhpcyBhc3N1bWVzCiAqIHRoYXQgc29tZW9uZSB3aG8ga25vd3MgdGhl IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGJvb3QgY29kZSBvciBzb21lIG90aGVyCiAqIGluaXQg Y29kZSwgYWxyZWFkeSBzZXQgdGhlIHdpZHRoLgogKgogKiBUaGUgcmV0dXJuIHZhbHVlIGlzIG9u ZSBvZjoKICogICBQV184CiAqICAgUFdfMTYKICogICBQV18zMgogKiAgIFBXXzY0CiAqCiAqICAg VGhlIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBlcnJvci4KICovCnVuc2lnbmVkIGludApwcGM0eHhf Z2V0X3BlcmlwaGVyYWxfd2lkdGgodW5zaWduZWQgaW50IGRtYW5yKQp7Cgl1bnNpZ25lZCBpbnQg Y29udHJvbDsKCglpZiAoZG1hbnIgPj0gTUFYX1BQQzR4eF9ETUFfQ0hBTk5FTFMpIHsKCQlwcmlu dGsoInBwYzR4eF9nZXRfcGVyaXBoZXJhbF93aWR0aDogYmFkIGNoYW5uZWwgJWRcbiIsIGRtYW5y KTsKCQlyZXR1cm4gRE1BX1NUQVRVU19CQURfQ0hBTk5FTDsKCX0KCgljb250cm9sID0gbWZkY3Io RENSTl9ETUFDUjAgKyAoZG1hbnIgKiAweDgpKTsKCglyZXR1cm4gKEdFVF9ETUFfUFcoY29udHJv bCkpOwp9CgovKgogKiBDbGVhcnMgdGhlIGNoYW5uZWwgc3RhdHVzIGJpdHMKICovCmludApwcGM0 eHhfY2xyX2RtYV9zdGF0dXModW5zaWduZWQgaW50IGRtYW5yKQp7CglpZiAoZG1hbnIgPj0gTUFY X1BQQzR4eF9ETUFfQ0hBTk5FTFMpIHsKCQlwcmludGsoS0VSTl9FUlIgInBwYzR4eF9jbHJfZG1h X3N0YXR1czogYmFkIGNoYW5uZWw6ICVkXG4iLCBkbWFucik7CgkJcmV0dXJuIERNQV9TVEFUVVNf QkFEX0NIQU5ORUw7Cgl9CgltdGRjcihEQ1JOX0RNQVNSLCAoKHUzMilETUFfQ0gwX0VSUiB8ICh1 MzIpRE1BX0NTMCB8ICh1MzIpRE1BX1RTMCkgPj4gZG1hbnIpOwoJcmV0dXJuIERNQV9TVEFUVVNf R09PRDsKfQoKI2lmZGVmIENPTkZJR19QUEM0eHhfRURNQQovKgogKiBFbmFibGVzIHRoZSBidXJz dCBvbiB0aGUgY2hhbm5lbCAoQlRFTiBiaXQgaW4gdGhlIGNvbnRyb2wvY291bnQgcmVnaXN0ZXIp CiAqIE5vdGU6CiAqIEZvciBzY2F0dGVyL2dhdGhlciBkbWEsIHRoaXMgZnVuY3Rpb24gTVVTVCBi ZSBjYWxsZWQgYmVmb3JlIHRoZQogKiBwcGM0eHhfYWxsb2NfZG1hX2hhbmRsZSgpIGZ1bmMgYXMg dGhlIGNoYW4gY291bnQgcmVnaXN0ZXIgaXMgY29waWVkIGludG8gdGhlCiAqIHNnbCBsaXN0IGFu ZCB1c2VkIGFzIGVhY2ggc2dsIGVsZW1lbnQgaXMgYWRkZWQuCiAqLwppbnQKcHBjNHh4X2VuYWJs ZV9idXJzdCh1bnNpZ25lZCBpbnQgZG1hbnIpCnsKCXVuc2lnbmVkIGludCBjdGM7CglpZiAoZG1h bnIgPj0gTUFYX1BQQzR4eF9ETUFfQ0hBTk5FTFMpIHsKCQlwcmludGsoS0VSTl9FUlIgInBwYzR4 eF9lbmFibGVfYnVyc3Q6IGJhZCBjaGFubmVsOiAlZFxuIiwgZG1hbnIpOwoJCXJldHVybiBETUFf U1RBVFVTX0JBRF9DSEFOTkVMOwoJfQogICAgICAgIGN0YyA9IG1mZGNyKERDUk5fRE1BQ1QwICsg KGRtYW5yICogMHg4KSkgfCBETUFfQ1RDX0JURU47CgltdGRjcihEQ1JOX0RNQUNUMCArIChkbWFu ciAqIDB4OCksIGN0Yyk7CglyZXR1cm4gRE1BX1NUQVRVU19HT09EOwp9Ci8qCiAqIERpc2FibGVz IHRoZSBidXJzdCBvbiB0aGUgY2hhbm5lbCAoQlRFTiBiaXQgaW4gdGhlIGNvbnRyb2wvY291bnQg cmVnaXN0ZXIpCiAqIE5vdGU6CiAqIEZvciBzY2F0dGVyL2dhdGhlciBkbWEsIHRoaXMgZnVuY3Rp b24gTVVTVCBiZSBjYWxsZWQgYmVmb3JlIHRoZQogKiBwcGM0eHhfYWxsb2NfZG1hX2hhbmRsZSgp IGZ1bmMgYXMgdGhlIGNoYW4gY291bnQgcmVnaXN0ZXIgaXMgY29waWVkIGludG8gdGhlCiAqIHNn bCBsaXN0IGFuZCB1c2VkIGFzIGVhY2ggc2dsIGVsZW1lbnQgaXMgYWRkZWQuCiAqLwppbnQKcHBj NHh4X2Rpc2FibGVfYnVyc3QodW5zaWduZWQgaW50IGRtYW5yKQp7Cgl1bnNpZ25lZCBpbnQgY3Rj OwoJaWYgKGRtYW5yID49IE1BWF9QUEM0eHhfRE1BX0NIQU5ORUxTKSB7CgkJcHJpbnRrKEtFUk5f RVJSICJwcGM0eHhfZGlzYWJsZV9idXJzdDogYmFkIGNoYW5uZWw6ICVkXG4iLCBkbWFucik7CgkJ cmV0dXJuIERNQV9TVEFUVVNfQkFEX0NIQU5ORUw7Cgl9CgljdGMgPSBtZmRjcihEQ1JOX0RNQUNU MCArIChkbWFuciAqIDB4OCkpICZ+IERNQV9DVENfQlRFTjsKCW10ZGNyKERDUk5fRE1BQ1QwICsg KGRtYW5yICogMHg4KSwgY3RjKTsKCXJldHVybiBETUFfU1RBVFVTX0dPT0Q7Cn0KLyoKICogU2V0 cyB0aGUgYnVyc3Qgc2l6ZSAobnVtYmVyIG9mIHBlcmlwaGVyYWwgd2lkdGhzKSBmb3IgdGhlIGNo YW5uZWwKICogKEJTSVogYml0cyBpbiB0aGUgY29udHJvbC9jb3VudCByZWdpc3RlcikpCiAqIG11 c3QgYmUgb25lIG9mOgogKiAgICBETUFfQ1RDX0JTSVpfMgogKiAgICBETUFfQ1RDX0JTSVpfNAog KiAgICBETUFfQ1RDX0JTSVpfOAogKiAgICBETUFfQ1RDX0JTSVpfMTYKICogTm90ZToKICogRm9y IHNjYXR0ZXIvZ2F0aGVyIGRtYSwgdGhpcyBmdW5jdGlvbiBNVVNUIGJlIGNhbGxlZCBiZWZvcmUg dGhlCiAqIHBwYzR4eF9hbGxvY19kbWFfaGFuZGxlKCkgZnVuYyBhcyB0aGUgY2hhbiBjb3VudCBy ZWdpc3RlciBpcyBjb3BpZWQgaW50byB0aGUKICogc2dsIGxpc3QgYW5kIHVzZWQgYXMgZWFjaCBz Z2wgZWxlbWVudCBpcyBhZGRlZC4KICovCmludApwcGM0eHhfc2V0X2J1cnN0X3NpemUodW5zaWdu ZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgYnNpemUpCnsKCXVuc2lnbmVkIGludCBjdGM7Cglp ZiAoZG1hbnIgPj0gTUFYX1BQQzR4eF9ETUFfQ0hBTk5FTFMpIHsKCQlwcmludGsoS0VSTl9FUlIg InBwYzR4eF9zZXRfYnVyc3Rfc2l6ZTogYmFkIGNoYW5uZWw6ICVkXG4iLCBkbWFucik7CgkJcmV0 dXJuIERNQV9TVEFUVVNfQkFEX0NIQU5ORUw7Cgl9CgljdGMgPSBtZmRjcihEQ1JOX0RNQUNUMCAr IChkbWFuciAqIDB4OCkpICZ+IERNQV9DVENfQlNJWl9NU0s7CgljdGMgfD0gKGJzaXplICYgRE1B X0NUQ19CU0laX01TSyk7CgltdGRjcihEQ1JOX0RNQUNUMCArIChkbWFuciAqIDB4OCksIGN0Yyk7 CglyZXR1cm4gRE1BX1NUQVRVU19HT09EOwp9CgpFWFBPUlRfU1lNQk9MKHBwYzR4eF9lbmFibGVf YnVyc3QpOwpFWFBPUlRfU1lNQk9MKHBwYzR4eF9kaXNhYmxlX2J1cnN0KTsKRVhQT1JUX1NZTUJP TChwcGM0eHhfc2V0X2J1cnN0X3NpemUpOwojZW5kaWYgLyogQ09ORklHX1BQQzR4eF9FRE1BICov CgpFWFBPUlRfU1lNQk9MKHBwYzR4eF9pbml0X2RtYV9jaGFubmVsKTsKRVhQT1JUX1NZTUJPTChw cGM0eHhfZ2V0X2NoYW5uZWxfY29uZmlnKTsKRVhQT1JUX1NZTUJPTChwcGM0eHhfc2V0X2NoYW5u ZWxfcHJpb3JpdHkpOwpFWFBPUlRfU1lNQk9MKHBwYzR4eF9nZXRfcGVyaXBoZXJhbF93aWR0aCk7 CkVYUE9SVF9TWU1CT0woZG1hX2NoYW5uZWxzKTsKRVhQT1JUX1NZTUJPTChwcGM0eHhfc2V0X3Ny Y19hZGRyKTsKRVhQT1JUX1NZTUJPTChwcGM0eHhfc2V0X2RzdF9hZGRyKTsKRVhQT1JUX1NZTUJP TChwcGM0eHhfc2V0X2RtYV9hZGRyKTsKRVhQT1JUX1NZTUJPTChwcGM0eHhfc2V0X2RtYV9hZGRy Mik7CkVYUE9SVF9TWU1CT0wocHBjNHh4X2VuYWJsZV9kbWEpOwpFWFBPUlRfU1lNQk9MKHBwYzR4 eF9kaXNhYmxlX2RtYSk7CkVYUE9SVF9TWU1CT0wocHBjNHh4X3NldF9kbWFfbW9kZSk7CkVYUE9S VF9TWU1CT0wocHBjNHh4X3NldF9kbWFfY291bnQpOwpFWFBPUlRfU1lNQk9MKHBwYzR4eF9nZXRf ZG1hX3Jlc2lkdWUpOwpFWFBPUlRfU1lNQk9MKHBwYzR4eF9lbmFibGVfZG1hX2ludGVycnVwdCk7 CkVYUE9SVF9TWU1CT0wocHBjNHh4X2Rpc2FibGVfZG1hX2ludGVycnVwdCk7CkVYUE9SVF9TWU1C T0wocHBjNHh4X2dldF9kbWFfc3RhdHVzKTsKRVhQT1JUX1NZTUJPTChwcGM0eHhfY2xyX2RtYV9z dGF0dXMpOwoK --001485e9a60548c38f04733c78c7 Content-Type: application/octet-stream; name="dcr-native.h" Content-Disposition: attachment; filename="dcr-native.h" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fzfrpb0q1 LyoKICogKGMpIENvcHlyaWdodCAyMDA2IEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3Jw LgogKiAgICAgICAgICAgICAgICAgICAgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KICoKICog ICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAqICAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK ICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUKICogICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KICoKICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl bXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKI2lm bmRlZiBfQVNNX1BPV0VSUENfRENSX05BVElWRV9ICiNkZWZpbmUgX0FTTV9QT1dFUlBDX0RDUl9O QVRJVkVfSAojaWZkZWYgX19LRVJORUxfXwojaWZuZGVmIF9fQVNTRU1CTFlfXwoKI2luY2x1ZGUg PGxpbnV4L3NwaW5sb2NrLmg+Cgp0eXBlZGVmIHN0cnVjdCB7Cgl1bnNpZ25lZCBpbnQgYmFzZTsK fSBkY3JfaG9zdF90OwoKI2RlZmluZSBEQ1JfTUFQX09LKGhvc3QpCSgxKQoKI2RlZmluZSBkY3Jf bWFwKGRldiwgZGNyX24sIGRjcl9jKQkoKGRjcl9ob3N0X3QpeyAuYmFzZSA9IChkY3JfbikgfSkK I2RlZmluZSBkY3JfdW5tYXAoaG9zdCwgZGNyX2MpCQlkbyB7fSB3aGlsZSAoMCkKI2RlZmluZSBk Y3JfcmVhZChob3N0LCBkY3JfbikJCW1mZGNyKGRjcl9uICsgaG9zdC5iYXNlKQojZGVmaW5lIGRj cl93cml0ZShob3N0LCBkY3JfbiwgdmFsdWUpCW10ZGNyKGRjcl9uICsgaG9zdC5iYXNlLCB2YWx1 ZSkKCi8qIERldmljZSBDb250cm9sIFJlZ2lzdGVycyAqLwp2b2lkIF9fbXRkY3IoaW50IHJlZywg dW5zaWduZWQgaW50IHZhbCk7CnVuc2lnbmVkIGludCBfX21mZGNyKGludCByZWcpOwojZGVmaW5l IG1mZGNyKHJuKQkJCQkJCVwKCSh7dW5zaWduZWQgaW50IHJ2YWw7CQkJCQlcCglpZiAoX19idWls dGluX2NvbnN0YW50X3Aocm4pKQkJCQlcCgkJYXNtIHZvbGF0aWxlKCJtZmRjciAlMCwiIF9fc3Ry aW5naWZ5KHJuKQlcCgkJICAgICAgICAgICAgICA6ICI9ciIgKHJ2YWwpKTsJCQlcCgllbHNlCQkJ CQkJCVwKCQlydmFsID0gX19tZmRjcihybik7CQkJCVwKCXJ2YWw7fSkKCiNkZWZpbmUgbXRkY3Io cm4sIHYpCQkJCQkJXApkbyB7CQkJCQkJCQlcCglpZiAoX19idWlsdGluX2NvbnN0YW50X3Aocm4p KQkJCQlcCgkJYXNtIHZvbGF0aWxlKCJtdGRjciAiIF9fc3RyaW5naWZ5KHJuKSAiLCUwIglcCgkJ CSAgICAgIDogOiAiciIgKHYpKTsgCQkJXAoJZWxzZQkJCQkJCQlcCgkJX19tdGRjcihybiwgdik7 CQkJCQlcCn0gd2hpbGUgKDApCgovKiBSL1cgb2YgaW5kaXJlY3QgRENScyBtYWtlIHVzZSBvZiBz dGFuZGFyZCBuYW1pbmcgY29udmVudGlvbnMgZm9yIERDUnMgKi8KZXh0ZXJuIHNwaW5sb2NrX3Qg ZGNyX2luZF9sb2NrOwoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBfX21mZGNyaShpbnQgYmFzZV9h ZGRyLCBpbnQgYmFzZV9kYXRhLCBpbnQgcmVnKQp7Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoJdW5z aWduZWQgaW50IHZhbDsKCglzcGluX2xvY2tfaXJxc2F2ZSgmZGNyX2luZF9sb2NrLCBmbGFncyk7 CglfX210ZGNyKGJhc2VfYWRkciwgcmVnKTsKCXZhbCA9IF9fbWZkY3IoYmFzZV9kYXRhKTsKCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmRjcl9pbmRfbG9jaywgZmxhZ3MpOwoJcmV0dXJuIHZhbDsK fQoKc3RhdGljIGlubGluZSB2b2lkIF9fbXRkY3JpKGludCBiYXNlX2FkZHIsIGludCBiYXNlX2Rh dGEsIGludCByZWcsCgkJCSAgICB1bnNpZ25lZCB2YWwpCnsKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 CgoJc3Bpbl9sb2NrX2lycXNhdmUoJmRjcl9pbmRfbG9jaywgZmxhZ3MpOwoJX19tdGRjcihiYXNl X2FkZHIsIHJlZyk7CglfX210ZGNyKGJhc2VfZGF0YSwgdmFsKTsKCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmRjcl9pbmRfbG9jaywgZmxhZ3MpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgX19kY3Jp X2NscnNldChpbnQgYmFzZV9hZGRyLCBpbnQgYmFzZV9kYXRhLCBpbnQgcmVnLAoJCQkJIHVuc2ln bmVkIGNsciwgdW5zaWduZWQgc2V0KQp7Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoJdW5zaWduZWQg aW50IHZhbDsKCglzcGluX2xvY2tfaXJxc2F2ZSgmZGNyX2luZF9sb2NrLCBmbGFncyk7CglfX210 ZGNyKGJhc2VfYWRkciwgcmVnKTsKCXZhbCA9IChfX21mZGNyKGJhc2VfZGF0YSkgJiB+Y2xyKSB8 IHNldDsKCV9fbXRkY3IoYmFzZV9kYXRhLCB2YWwpOwoJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZGNyX2luZF9sb2NrLCBmbGFncyk7Cn0KCiNkZWZpbmUgbWZkY3JpKGJhc2UsIHJlZykJX19tZmRj cmkoRENSTl8gIyMgYmFzZSAjIyBfQ09ORklHX0FERFIsCVwKCQkJCQkgRENSTl8gIyMgYmFzZSAj IyBfQ09ORklHX0RBVEEsCVwKCQkJCQkgcmVnKQoKI2RlZmluZSBtdGRjcmkoYmFzZSwgcmVnLCBk YXRhKQlfX210ZGNyaShEQ1JOXyAjIyBiYXNlICMjIF9DT05GSUdfQUREUiwJXAoJCQkJCSBEQ1JO XyAjIyBiYXNlICMjIF9DT05GSUdfREFUQSwJXAoJCQkJCSByZWcsIGRhdGEpCgojZGVmaW5lIGRj cmlfY2xyc2V0KGJhc2UsIHJlZywgY2xyLCBzZXQpCV9fZGNyaV9jbHJzZXQoRENSTl8gIyMgYmFz ZSAjIyBfQ09ORklHX0FERFIsCVwKCQkJCQkJCSAgICAgIERDUk5fICMjIGJhc2UgIyMgX0NPTkZJ R19EQVRBLAlcCgkJCQkJCQkgICAgICByZWcsIGNsciwgc2V0KQoKI2VuZGlmIC8qIF9fQVNTRU1C TFlfXyAqLwojZW5kaWYgLyogX19LRVJORUxfXyAqLwojZW5kaWYgLyogX0FTTV9QT1dFUlBDX0RD Ul9OQVRJVkVfSCAqLwo= --001485e9a60548c38f04733c78c7 Content-Type: application/octet-stream; name="dcr.h" Content-Disposition: attachment; filename="dcr.h" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fzfrqh672 I2lmbmRlZiBfUFBDX0JPT1RfRENSX0hfCiNkZWZpbmUgX1BQQ19CT09UX0RDUl9IXwoKI2RlZmlu ZSBtZmRjcihybikgXAoJKHsJXAoJCXVuc2lnbmVkIGxvbmcgcnZhbDsgXAoJCWFzbSB2b2xhdGls ZSgibWZkY3IgJTAsJTEiIDogIj1yIihydmFsKSA6ICJpIihybikpOyBcCgkJcnZhbDsgXAoJfSkK I2RlZmluZSBtdGRjcihybiwgdmFsKSBcCglhc20gdm9sYXRpbGUoIm10ZGNyICUwLCUxIiA6IDog ImkiKHJuKSwgInIiKHZhbCkpCgovKiA0NDBHUC80NDBHWCBTRFJBTSBjb250cm9sbGVyIERDUnMg Ki8KI2RlZmluZSBEQ1JOX1NEUkFNMF9DRkdBRERSCQkJCTB4MDEwCiNkZWZpbmUgRENSTl9TRFJB TTBfQ0ZHREFUQQkJCQkweDAxMQoKI2RlZmluZSBTRFJBTTBfUkVBRChvZmZzZXQpICh7XAoJbXRk Y3IoRENSTl9TRFJBTTBfQ0ZHQUREUiwgb2Zmc2V0KTsgXAoJbWZkY3IoRENSTl9TRFJBTTBfQ0ZH REFUQSk7IH0pCiNkZWZpbmUgU0RSQU0wX1dSSVRFKG9mZnNldCwgZGF0YSkgKHtcCgltdGRjcihE Q1JOX1NEUkFNMF9DRkdBRERSLCBvZmZzZXQpOyBcCgltdGRjcihEQ1JOX1NEUkFNMF9DRkdEQVRB LCBkYXRhKTsgfSkKCiNkZWZpbmUgCVNEUkFNMF9CMENSCQkJCTB4NDAKI2RlZmluZSAJU0RSQU0w X0IxQ1IJCQkJMHg0NAojZGVmaW5lIAlTRFJBTTBfQjJDUgkJCQkweDQ4CiNkZWZpbmUgCVNEUkFN MF9CM0NSCQkJCTB4NGMKCnN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHNkcmFtX2J4Y3JbXSA9 IHsgU0RSQU0wX0IwQ1IsIFNEUkFNMF9CMUNSLAoJCQkJCSAgICBTRFJBTTBfQjJDUiwgU0RSQU0w X0IzQ1IgfTsKCiNkZWZpbmUJCQlTRFJBTV9DT05GSUdfQkFOS19FTkFCTEUgICAgICAgIDB4MDAw MDAwMDEKI2RlZmluZQkJCVNEUkFNX0NPTkZJR19TSVpFX01BU0sgICAgICAgICAgMHgwMDBlMDAw MAojZGVmaW5lCQkJU0RSQU1fQ09ORklHX0JBTktfU0laRShyZWcpCVwKCSgweDAwNDAwMDAwIDw8 ICgocmVnICYgU0RSQU1fQ09ORklHX1NJWkVfTUFTSykgPj4gMTcpKQoKLyogNDQwR1AgRXh0ZXJu YWwgQnVzIENvbnRyb2xsZXIgKEVCQykgKi8KI2RlZmluZSBEQ1JOX0VCQzBfQ0ZHQUREUgkJCQkw eDAxMgojZGVmaW5lIERDUk5fRUJDMF9DRkdEQVRBCQkJCTB4MDEzCiNkZWZpbmUgICBFQkNfTlVN X0JBTktTCQkJCQkgIDgKI2RlZmluZSAgIEVCQ19CMENSCQkJCQkgIDB4MDAKI2RlZmluZSAgIEVC Q19CMUNSCQkJCQkgIDB4MDEKI2RlZmluZSAgIEVCQ19CMkNSCQkJCQkgIDB4MDIKI2RlZmluZSAg IEVCQ19CM0NSCQkJCQkgIDB4MDMKI2RlZmluZSAgIEVCQ19CNENSCQkJCQkgIDB4MDQKI2RlZmlu ZSAgIEVCQ19CNUNSCQkJCQkgIDB4MDUKI2RlZmluZSAgIEVCQ19CNkNSCQkJCQkgIDB4MDYKI2Rl ZmluZSAgIEVCQ19CN0NSCQkJCQkgIDB4MDcKI2RlZmluZSAgIEVCQ19CWENSKG4pCQkJCQkgIChu KQojZGVmaW5lCSAgICBFQkNfQlhDUl9CQVMJCQkJICAgIDB4ZmZmMDAwMDAKI2RlZmluZQkgICAg RUJDX0JYQ1JfQlMJCQkJICAJICAgIDB4MDAwZTAwMDAKI2RlZmluZQkgICAgRUJDX0JYQ1JfQkFO S19TSVpFKHJlZykgXAoJKDB4MTAwMDAwIDw8ICgoKHJlZykgJiBFQkNfQlhDUl9CUykgPj4gMTcp KQojZGVmaW5lCSAgICBFQkNfQlhDUl9CVQkJCQkgIAkgICAgMHgwMDAxODAwMAojZGVmaW5lCSAg ICAgIEVCQ19CWENSX0JVX09GRgkJCSAgCSAgICAgIDB4MDAwMDAwMDAKI2RlZmluZQkgICAgICBF QkNfQlhDUl9CVV9STwkJCSAgCSAgICAgIDB4MDAwMDgwMDAKI2RlZmluZQkgICAgICBFQkNfQlhD Ul9CVV9XTwkJCSAgCSAgICAgIDB4MDAwMTAwMDAKI2RlZmluZQkgICAgICBFQkNfQlhDUl9CVV9S VwkJCSAgCSAgICAgIDB4MDAwMTgwMDAKI2RlZmluZQkgICAgRUJDX0JYQ1JfQlcJCQkJICAJICAg IDB4MDAwMDYwMDAKI2RlZmluZSAgIEVCQ19CMEFQCQkJCQkgIDB4MTAKI2RlZmluZSAgIEVCQ19C MUFQCQkJCQkgIDB4MTEKI2RlZmluZSAgIEVCQ19CMkFQCQkJCQkgIDB4MTIKI2RlZmluZSAgIEVC Q19CM0FQCQkJCQkgIDB4MTMKI2RlZmluZSAgIEVCQ19CNEFQCQkJCQkgIDB4MTQKI2RlZmluZSAg IEVCQ19CNUFQCQkJCQkgIDB4MTUKI2RlZmluZSAgIEVCQ19CNkFQCQkJCQkgIDB4MTYKI2RlZmlu ZSAgIEVCQ19CN0FQCQkJCQkgIDB4MTcKI2RlZmluZSAgIEVCQ19CWEFQKG4pCQkJCQkgICgweDEw KyhuKSkKI2RlZmluZSAgIEVCQ19CRUFSCQkJCQkgIDB4MjAKI2RlZmluZSAgIEVCQ19CRVNSCQkJ CQkgIDB4MjEKI2RlZmluZSAgIEVCQ19DRkcJCQkJCSAgMHgyMwojZGVmaW5lICAgRUJDX0NJRAkJ CQkJICAweDI0CgovKiA0NDBHUCBDbG9jaywgUE0sIGNoaXAgY29udHJvbCAqLwojZGVmaW5lIERD Uk5fQ1BDMF9TUgkJCQkJMHgwYjAKI2RlZmluZSBEQ1JOX0NQQzBfRVIJCQkJCTB4MGIxCiNkZWZp bmUgRENSTl9DUEMwX0ZSCQkJCQkweDBiMgojZGVmaW5lIERDUk5fQ1BDMF9TWVMwCQkJCQkweDBl MAojZGVmaW5lCSAgQ1BDMF9TWVMwX1RVTkUJCQkJICAweGZmYzAwMDAwCiNkZWZpbmUJICBDUEMw X1NZUzBfRkJEVl9NQVNLCQkJCSAgMHgwMDNjMDAwMAojZGVmaW5lCSAgQ1BDMF9TWVMwX0ZXRFZB X01BU0sJCQkJICAweDAwMDM4MDAwCiNkZWZpbmUJICBDUEMwX1NZUzBfRldEVkJfTUFTSwkJCQkg IDB4MDAwMDcwMDAKI2RlZmluZQkgIENQQzBfU1lTMF9PUERWX01BU0sJCQkJICAweDAwMDAwYzAw CiNkZWZpbmUJICBDUEMwX1NZUzBfRVBEVl9NQVNLCQkJCSAgMHgwMDAwMDMwMAovKiBIZWxwZXIg bWFjcm9zIHRvIGNvbXB1dGUgdGhlIGFjdHVhbCBjbG9jayBkaXZpZGVyIHZhbHVlcyBmcm9tIHRo ZQogKiBlbmNvZGluZ3MgaW4gdGhlIENQQzAgcmVnaXN0ZXIgKi8KI2RlZmluZQkgIENQQzBfU1lT MF9GQkRWKHJlZykgXAoJCSgoKCgoKHJlZykgJiBDUEMwX1NZUzBfRkJEVl9NQVNLKSA+PiAxOCkg LSAxKSAmIDB4ZikgKyAxKQojZGVmaW5lCSAgQ1BDMF9TWVMwX0ZXRFZBKHJlZykgXAoJCSg4IC0g KCgocmVnKSAmIENQQzBfU1lTMF9GV0RWQV9NQVNLKSA+PiAxNSkpCiNkZWZpbmUJICBDUEMwX1NZ UzBfRldEVkIocmVnKSBcCgkJKDggLSAoKChyZWcpICYgQ1BDMF9TWVMwX0ZXRFZCX01BU0spID4+ IDEyKSkKI2RlZmluZQkgIENQQzBfU1lTMF9PUERWKHJlZykgXAoJCSgoKChyZWcpICYgQ1BDMF9T WVMwX09QRFZfTUFTSykgPj4gMTApICsgMSkKI2RlZmluZQkgIENQQzBfU1lTMF9FUERWKHJlZykg XAoJCSgoKChyZWcpICYgQ1BDMF9TWVMwX0VQRFZfTUFTSykgPj4gOCkgKyAxKQojZGVmaW5lCSAg Q1BDMF9TWVMwX0VYVFNMCQkJCSAgMHgwMDAwMDA4MAojZGVmaW5lCSAgQ1BDMF9TWVMwX1JXX01B U0sJCQkJICAweDAwMDAwMDYwCiNkZWZpbmUJICBDUEMwX1NZUzBfUkwJCQkJCSAgMHgwMDAwMDAx MAojZGVmaW5lCSAgQ1BDMF9TWVMwX1pNSUlTTF9NQVNLCQkJCSAgMHgwMDAwMDAwYwojZGVmaW5l CSAgQ1BDMF9TWVMwX0JZUEFTUwkJCQkgIDB4MDAwMDAwMDIKI2RlZmluZQkgIENQQzBfU1lTMF9O VE8xCQkJCSAgMHgwMDAwMDAwMQojZGVmaW5lIERDUk5fQ1BDMF9TWVMxCQkJCQkweDBlMQojZGVm aW5lIERDUk5fQ1BDMF9DVVNUMAkJCQkJMHgwZTIKI2RlZmluZSBEQ1JOX0NQQzBfQ1VTVDEJCQkJ CTB4MGUzCiNkZWZpbmUgRENSTl9DUEMwX1NUUlAwCQkJCQkweDBlNAojZGVmaW5lIERDUk5fQ1BD MF9TVFJQMQkJCQkJMHgwZTUKI2RlZmluZSBEQ1JOX0NQQzBfU1RSUDIJCQkJCTB4MGU2CiNkZWZp bmUgRENSTl9DUEMwX1NUUlAzCQkJCQkweDBlNwojZGVmaW5lIERDUk5fQ1BDMF9HUElPCQkJCQkw eDBlOAojZGVmaW5lIERDUk5fQ1BDMF9QTEIJCQkJCTB4MGU5CiNkZWZpbmUgRENSTl9DUEMwX0NS MQkJCQkJMHgwZWEKI2RlZmluZSBEQ1JOX0NQQzBfQ1IwCQkJCQkweDBlYgojZGVmaW5lCSAgQ1BD MF9DUjBfU1dFCQkJCQkgIDB4ODAwMDAwMDAKI2RlZmluZQkgIENQQzBfQ1IwX0NFVEUJCQkJCSAg MHg0MDAwMDAwMAojZGVmaW5lCSAgQ1BDMF9DUjBfVTFGQ1MJCQkJICAweDIwMDAwMDAwCiNkZWZp bmUJICBDUEMwX0NSMF9VMERURQkJCQkgIDB4MTAwMDAwMDAKI2RlZmluZQkgIENQQzBfQ1IwX1Uw RFJFCQkJCSAgMHgwODAwMDAwMAojZGVmaW5lCSAgQ1BDMF9DUjBfVTBEQwkJCQkJICAweDA0MDAw MDAwCiNkZWZpbmUJICBDUEMwX0NSMF9VMURURQkJCQkgIDB4MDIwMDAwMDAKI2RlZmluZQkgIENQ QzBfQ1IwX1UxRFJFCQkJCSAgMHgwMTAwMDAwMAojZGVmaW5lCSAgQ1BDMF9DUjBfVTFEQwkJCQkJ ICAweDAwODAwMDAwCiNkZWZpbmUJICBDUEMwX0NSMF9VMEVDCQkJCQkgIDB4MDA0MDAwMDAKI2Rl ZmluZQkgIENQQzBfQ1IwX1UxRUMJCQkJCSAgMHgwMDIwMDAwMAojZGVmaW5lCSAgQ1BDMF9DUjBf VURJVl9NQVNLCQkJCSAgMHgwMDFmMDAwMAojZGVmaW5lCSAgQ1BDMF9DUjBfVURJVihyZWcpIFwK CQkoKCgocmVnKSAmIENQQzBfQ1IwX1VESVZfTUFTSykgPj4gMTYpICsgMSkKI2RlZmluZSBEQ1JO X0NQQzBfTUlSUTAJCQkJCTB4MGVjCiNkZWZpbmUgRENSTl9DUEMwX01JUlExCQkJCQkweDBlZAoj ZGVmaW5lIERDUk5fQ1BDMF9KVEFHSUQJCQkJMHgwZWYKCiNkZWZpbmUgRENSTl9NQUwwX0NGRwkJ CQkJMHgxODAKI2RlZmluZSBNQUxfUkVTRVQgMHg4MDAwMDAwMAoKLyogNDQwRVAgQ2xvY2svUG93 ZXItb24gUmVzZXQgcmVncyAqLwojZGVmaW5lIERDUk5fQ1BSMF9BRERSCTB4YwojZGVmaW5lIERD Uk5fQ1BSMF9EQVRBCTB4ZAojZGVmaW5lIENQUjBfUExMRDAJMHg2MAojZGVmaW5lIENQUjBfT1BC RDAJMHhjMAojZGVmaW5lIENQUjBfUEVSRDAJMHhlMAojZGVmaW5lIENQUjBfUFJJTUJEMAkweGEw CiNkZWZpbmUgQ1BSMF9TQ1BJRAkweDEyMAojZGVmaW5lIENQUjBfUExMQzAJMHg0MAoKLyogNDA1 R1AgQ2xvY2tpbmcvUG93ZXIgTWFuYWdlbWVudC9DaGlwIENvbnRyb2wgcmVncyAqLwojZGVmaW5l IERDUk5fQ1BDMF9QTExNUiAweGIwCiNkZWZpbmUgRENSTl80MDVfQ1BDMF9DUjAgMHhiMQojZGVm aW5lIERDUk5fNDA1X0NQQzBfQ1IxIDB4YjIKI2RlZmluZSBEQ1JOXzQwNV9DUEMwX1BTUiAweGI0 CgovKiA0MDVFUCBDbG9ja2luZy9Qb3dlciBNYW5hZ2VtZW50L0NoaXAgQ29udHJvbCByZWdzICov CiNkZWZpbmUgRENSTl9DUEMwX1BMTE1SMCAgMHhmMAojZGVmaW5lIERDUk5fQ1BDMF9QTExNUjEg IDB4ZjQKI2RlZmluZSBEQ1JOX0NQQzBfVUNSICAgICAweGY1CgovKiA0NDBHWCBDbG9jayBjb250 cm9sIGV0YyAqLwoKCiNkZWZpbmUgRENSTl9DUFIwX0NMS1VQRAkJCQkweDAyMAojZGVmaW5lIERD Uk5fQ1BSMF9QTExDCQkJCQkweDA0MAojZGVmaW5lIERDUk5fQ1BSMF9QTExECQkJCQkweDA2MAoj ZGVmaW5lIERDUk5fQ1BSMF9QUklNQUQJCQkJMHgwODAKI2RlZmluZSBEQ1JOX0NQUjBfUFJJTUJE CQkJCTB4MGEwCiNkZWZpbmUgRENSTl9DUFIwX09QQkQJCQkJCTB4MGMwCiNkZWZpbmUgRENSTl9D UFIwX1BFUkQJCQkJCTB4MGUwCiNkZWZpbmUgRENSTl9DUFIwX01BTEQJCQkJCTB4MTAwCgojZGVm aW5lIERDUk5fU0RSMF9DT05GSUdfQUREUiAJMHhlCiNkZWZpbmUgRENSTl9TRFIwX0NPTkZJR19E QVRBCTB4ZgoKLyogU0RSIHJlYWQvd3JpdGUgaGVscGVyIG1hY3JvcyAqLwojZGVmaW5lIFNEUjBf UkVBRChvZmZzZXQpICh7XAoJbXRkY3IoRENSTl9TRFIwX0NPTkZJR19BRERSLCBvZmZzZXQpOyBc CgltZmRjcihEQ1JOX1NEUjBfQ09ORklHX0RBVEEpOyB9KQojZGVmaW5lIFNEUjBfV1JJVEUob2Zm c2V0LCBkYXRhKSAoe1wKCW10ZGNyKERDUk5fU0RSMF9DT05GSUdfQUREUiwgb2Zmc2V0KTsgXAoJ bXRkY3IoRENSTl9TRFIwX0NPTkZJR19EQVRBLCBkYXRhKTsgfSkKCiNkZWZpbmUgRENSTl9TRFIw X1VBUlQwCQkweDAxMjAKI2RlZmluZSBEQ1JOX1NEUjBfVUFSVDEJCTB4MDEyMQojZGVmaW5lIERD Uk5fU0RSMF9VQVJUMgkJMHgwMTIyCiNkZWZpbmUgRENSTl9TRFIwX1VBUlQzCQkweDAxMjMKCgov KiBDUFJzIHJlYWQvd3JpdGUgaGVscGVyIG1hY3JvcyAtIGJhc2VkIG9mZiBpbmNsdWRlL2FzbS1w cGMvaWJtNDR4LmggKi8KCiNkZWZpbmUgRENSTl9DUFIwX0NGR0FERFIJCQkJMHhjCiNkZWZpbmUg RENSTl9DUFIwX0NGR0RBVEEJCQkJMHhkCgojZGVmaW5lIENQUjBfUkVBRChvZmZzZXQpICh7XAoJ bXRkY3IoRENSTl9DUFIwX0NGR0FERFIsIG9mZnNldCk7IFwKCW1mZGNyKERDUk5fQ1BSMF9DRkdE QVRBKTsgfSkKI2RlZmluZSBDUFIwX1dSSVRFKG9mZnNldCwgZGF0YSkgKHtcCgltdGRjcihEQ1JO X0NQUjBfQ0ZHQUREUiwgb2Zmc2V0KTsgXAoJbXRkY3IoRENSTl9DUFIwX0NGR0RBVEEsIGRhdGEp OyB9KQoKCgojZW5kaWYJLyogX1BQQ19CT09UX0RDUl9IXyAqLwo= --001485e9a60548c38f04733c78c7--