From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from web33612.mail.mud.yahoo.com ([68.142.198.158]) by bombadil.infradead.org with smtp (Exim 4.68 #1 (Red Hat Linux)) id 1KNtTP-0008Jl-EC for linux-mtd@lists.infradead.org; Tue, 29 Jul 2008 17:59:03 +0000 Date: Tue, 29 Jul 2008 10:58:58 -0700 (PDT) From: Frans Meulenbroeks Subject: [RESUBMIT] [PATCH] [MTD] NAND nand_ecc.c: rewrite for improved performance To: linux-mtd@lists.infradead.org Message-ID: <445284.23881.qm@web33612.mail.mud.yahoo.com> List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-415199513-1217354338=:23881" --0-415199513-1217354338=:23881 Content-Type: text/plain; charset=us-ascii Dear all, A resubmit of my patch, with all comments from Thomas addressed. This patch improves the performance of the ecc generation code by a factor of 18 on an INTEL D920 CPU, by a factor of 7 on MIPS and by a factor of 5 on ARM (NSLU2). As my email client wraps lines at 79 chars I've added the patch as an attachement instead of inlining it (the line with the filenames created by diff exceeds 79 chars). Please let me know if additional changes are needed. Best regards, Frans. --0-415199513-1217354338=:23881 Content-Type: text/x-patch; name="ecc.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ecc.patch" ZGlmZiAtdXJOIGxpbnV4LTIuNi4yNS4xMC9Eb2N1bWVudGF0aW9uL25hbmQv ZWNjLnR4dCBsaW51eC0yLjYuMjUuMTAud29yay9Eb2N1bWVudGF0aW9uL25h bmQvZWNjLnR4dAotLS0gbGludXgtMi42LjI1LjEwL0RvY3VtZW50YXRpb24v bmFuZC9lY2MudHh0CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw MTAwCisrKyBsaW51eC0yLjYuMjUuMTAud29yay9Eb2N1bWVudGF0aW9uL25h bmQvZWNjLnR4dAkyMDA4LTA3LTI5IDE5OjI1OjE5LjAwMDAwMDAwMCArMDIw MApAQCAtMCwwICsxLDcxNCBAQAorSW50cm9kdWN0aW9uCis9PT09PT09PT09 PT0KKworSGF2aW5nIGxvb2tlZCBhdCB0aGUgbGludXggbXRkL25hbmQgZHJp dmVyIGFuZCBtb3JlIHNwZWNpZmljIGF0IG5hbmRfZWNjLmMgCitJIGZlbHQg dGhlcmUgd2FzIHJvb20gZm9yIG9wdGltaXNhdGlvbi4gSSBiYXNoZWQgdGhl IGNvZGUgZm9yIGEgZmV3IGhvdXJzCitwZXJmb3JtaW5nIHRyaWNrcyBsaWtl IHRhYmxlIGxvb2t1cCByZW1vdmluZyBzdXBlcmZsdW91cyBjb2RlIGV0Yy4g CitBZnRlciB0aGF0IHRoZSBzcGVlZCB3YXMgaW5jcmVhc2VkIGJ5IDM1LTQw JS4gCitTdGlsbCBJIHdhcyBub3QgdG9vIGhhcHB5IGFzIEkgZmVsdCB0aGVy ZSB3YXMgYWRkaXRpb25hbCByb29tIGZvciBpbXByb3ZlbWVudC4KKworQmFk ISBJIHdhcyBob29rZWQuCitJIGRlY2lkZWQgdG8gYW5ub3RhdGUgbXkgc3Rl cHMgaW4gdGhpcyBmaWxlLiBQZXJoYXBzIGl0IGlzIHVzZWZ1bCB0byBzb21l b25lCitvciBzb21lb25lIGxlYXJucyBzb21ldGhpbmcgZnJvbSBpdC4KKwor CitUaGUgcHJvYmxlbQorPT09PT09PT09PT0KKworTkFORCBmbGFzaCAoYXQg bGVhc3QgU0xDIG9uZSkgdHlwaWNhbGx5IGhhcyBzZWN0b3JzIG9mIDI1NiBi eXRlcy4KK0hvd2V2ZXIgTkFORCBmbGFzaCBpcyBub3QgZXh0cmVtZWx5IHJl bGlhYmxlIHNvIHNvbWUgZXJyb3IgZGV0ZWN0aW9uCisoYW5kIHNvbWV0aW1l cyBjb3JyZWN0aW9uKSBpcyBuZWVkZWQuCisKK1RoaXMgaXMgZG9uZSBieSBt ZWFucyBvZiBhIEhhbW1pbmcgY29kZS4gSSdsbCB0cnkgdG8gZXhwbGFpbiBp dCBpbgorbGF5bWFucyB0ZXJtcyAoYW5kIGFwb2xvZ2llcyB0byBhbGwgdGhl IHBybydzIGluIHRoZSBmaWVsZCBpbiBjYXNlIEkgZG8KK25vdCB1c2UgdGhl IHJpZ2h0IHRlcm1pbm9sb2d5LCBteSBjb2RpbmcgdGhlb3J5IGNsYXNzIHdh cyBhbG1vc3QgMzAKK3llYXJzIGFnbywgYW5kIEkgbXVzdCBhZG1pdCBpdCB3 YXMgbm90IG9uZSBvZiBteSBmYXZvdXJpdGVzKS4KKworQXMgSSBzYWlkIGJl Zm9yZSB0aGUgZWNjIGNhbGN1bGF0aW9uIGlzIHBlcmZvcm1lZCBvbiBzZWN0 b3JzIG9mIDI1NgorYnl0ZXMuIFRoaXMgaXMgZG9uZSBieSBjYWxjdWxhdGlu ZyBzZXZlcmFsIHBhcml0eSBiaXRzIG92ZXIgdGhlIHJvd3MgYW5kCitjb2x1 bW5zLiBUaGUgcGFyaXR5IHVzZWQgaXMgZXZlbiBwYXJpdHkgd2hpY2ggbWVh bnMgdGhhdCB0aGUgcGFyaXR5IGJpdCA9IDEKK2lmIHRoZSBkYXRhIG92ZXIg d2hpY2ggdGhlIHBhcml0eSBpcyBjYWxjdWxhdGVkIGlzIDEgYW5kIHRoZSBw YXJpdHkgYml0ID0gMAoraWYgdGhlIGRhdGEgb3ZlciB3aGljaCB0aGUgcGFy aXR5IGlzIGNhbGN1bGF0ZWQgaXMgMC4gU28gdGhlIHRvdGFsCitudW1iZXIg b2YgYml0cyBvdmVyIHRoZSBkYXRhIG92ZXIgd2hpY2ggdGhlIHBhcml0eSBp cyBjYWxjdWxhdGVkICsgdGhlCitwYXJpdHkgYml0IGlzIGV2ZW4uIChzZWUg d2lraXBlZGlhIGlmIHlvdSBjYW4ndCBmb2xsb3cgdGhpcykuCitQYXJpdHkg aXMgb2Z0ZW4gY2FsY3VsYXRlZCBieSBtZWFucyBvZiBhbiBleGNsdXNpdmUg b3Igb3BlcmF0aW9uLAorc29tZXRpbWVzIGFsc28gcmVmZXJyZWQgdG8gYXMg eG9yLiBJbiBDIHRoZSBvcGVyYXRvciBmb3IgeG9yIGlzIF4KKworQmFjayB0 byBlY2MuCitMZXQncyBnaXZlIGEgc21hbGwgZmlndXJlOgorCitieXRlICAg MDogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAg IHJwMCBycDIgcnA0IC4uLiBycDE0CitieXRlICAgMTogIGJpdDcgYml0NiBi aXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMSBycDIgcnA0IC4u LiBycDE0CitieXRlICAgMjogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBi aXQyIGJpdDEgYml0MCAgIHJwMCBycDMgcnA0IC4uLiBycDE0CitieXRlICAg MzogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAg IHJwMSBycDMgcnA0IC4uLiBycDE0CitieXRlICAgNDogIGJpdDcgYml0NiBi aXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMCBycDIgcnA1IC4u LiBycDE0CisuLi4uCitieXRlIDI1NDogIGJpdDcgYml0NiBiaXQ1IGJpdDQg Yml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMCBycDMgcnA1IC4uLiBycDE1Citi eXRlIDI1NTogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEg Yml0MCAgIHJwMSBycDMgcnA1IC4uLiBycDE1CisgICAgICAgICAgIGNwMSAg Y3AwICBjcDEgIGNwMCAgY3AxICBjcDAgIGNwMSAgY3AwCisgICAgICAgICAg IGNwMyAgY3AzICBjcDIgIGNwMiAgY3AzICBjcDMgIGNwMiAgY3AyCisgICAg ICAgICAgIGNwNSAgY3A1ICBjcDUgIGNwNSAgY3A0ICBjcDQgIGNwNCAgY3A0 CisKK1RoaXMgZmlndXJlIHJlcHJlc2VudHMgYSBzZWN0b3Igb2YgMjU2IGJ5 dGVzLgorY3AgaXMgbXkgYWJicmV2aWF0b24gZm9yIGNvbHVtbiBwYXJpdHks IHJwIGZvciByb3cgcGFyaXR5LgorCitMZXQncyBzdGFydCB0byBleHBsYWlu IGNvbHVtbiBwYXJpdHkuCitjcDAgaXMgdGhlIHBhcml0eSB0aGF0IGJlbG9u Z3MgdG8gYWxsIGJpdDAsIGJpdDIsIGJpdDQsIGJpdDYuCitzbyB0aGUgc3Vt IG9mIGFsbCBiaXQwLCBiaXQyLCBiaXQ0IGFuZCBiaXQ2IHZhbHVlcyArIGNw MCBpdHNlbGYgaXMgZXZlbi4KK1NpbWlsYXJseSBjcDEgaXMgdGhlIHN1bSBv ZiBhbGwgYml0MSwgYml0MywgYml0NSBhbmQgYml0Ny4KK2NwMiBpcyB0aGUg cGFyaXR5IG92ZXIgYml0MCwgYml0MSwgYml0NCBhbmQgYml0NQorY3AzIGlz IHRoZSBwYXJpdHkgb3ZlciBiaXQyLCBiaXQzLCBiaXQ2IGFuZCBiaXQ3Lgor Y3A0IGlzIHRoZSBwYXJpdHkgb3ZlciBiaXQwLCBiaXQxLCBiaXQyIGFuZCBi aXQzLgorY3A1IGlzIHRoZSBwYXJpdHkgb3ZlciBiaXQ0LCBiaXQ1LCBiaXQ2 IGFuZCBiaXQ3LgorTm90ZSB0aGF0IGVhY2ggb2YgY3AwIC4uIGNwNSBpcyBl eGFjdGx5IG9uZSBiaXQuCisKK1JvdyBwYXJpdHkgYWN0dWFsbHkgd29ya3Mg YWxtb3N0IHRoZSBzYW1lLgorcnAwIGlzIHRoZSBwYXJpdHkgb2YgYWxsIGV2 ZW4gYnl0ZXMgKDAsIDIsIDQsIDYsIC4uLiAyNTIsIDI1NCkKK3JwMSBpcyB0 aGUgcGFyaXR5IG9mIGFsbCBvZGQgYnl0ZXMgKDEsIDMsIDUsIDcsIC4uLiwg MjUzLCAyNTUpCitycDIgaXMgdGhlIHBhcml0eSBvZiBhbGwgYnl0ZXMgMCwg MSwgNCwgNSwgOCwgOSwgLi4uIAorKHNvIGhhbmRsZSB0d28gYnl0ZXMsIHRo ZW4gc2tpcCAyIGJ5dGVzKS4KK3JwMyBpcyBjb3ZlcnMgdGhlIGhhbGYgcnAy IGRvZXMgbm90IGNvdmVyIChieXRlcyAyLCAzLCA2LCA3LCAxMCwgMTEsIC4u LikKK2ZvciBycDQgdGhlIHJ1bGUgaXMgY292ZXIgNCBieXRlcywgc2tpcCA0 IGJ5dGVzLCBjb3ZlciA0IGJ5dGVzLCBza2lwIDQgZXRjLgorc28gcnA0IGNh bGN1bGF0ZXMgcGFyaXR5IG92ZXIgYnl0ZXMgMCwgMSwgMiwgMywgOCwgOSwg MTAsIDExLCAxNiwgLi4uKQorYW5kIHJwNSBjb3ZlcnMgdGhlIG90aGVyIGhh bGYsIHNvIGJ5dGVzIDQsIDUsIDYsIDcsIDEyLCAxMywgMTQsIDE1LCAyMCwg Li4KK1RoZSBzdG9yeSBub3cgYmVjb21lcyBxdWl0ZSBib3JpbmcuIEkgZ3Vl c3MgeW91IGdldCB0aGUgaWRlYS4KK3JwNiBjb3ZlcnMgOCBieXRlcyB0aGVu IHNraXBzIDggZXRjCitycDcgc2tpcHMgOCBieXRlcyB0aGVuIGNvdmVycyA4 IGV0YworcnA4IGNvdmVycyAxNiBieXRlcyB0aGVuIHNraXBzIDE2IGV0Ywor cnA5IHNraXBzIDE2IGJ5dGVzIHRoZW4gY292ZXJzIDE2IGV0YworcnAxMCBj b3ZlcnMgMzIgYnl0ZXMgdGhlbiBza2lwcyAzMiBldGMKK3JwMTEgc2tpcHMg MzIgYnl0ZXMgdGhlbiBjb3ZlcnMgMzIgZXRjCitycDEyIGNvdmVycyA2NCBi eXRlcyB0aGVuIHNraXBzIDY0IGV0YworcnAxMyBza2lwcyA2NCBieXRlcyB0 aGVuIGNvdmVycyA2NCBldGMKK3JwMTQgY292ZXJzIDEyOCBieXRlcyB0aGVu IHNraXBzIDEyOAorcnAxNSBza2lwcyAxMjggYnl0ZXMgdGhlbiBjb3ZlcnMg MTI4IAorCitJbiB0aGUgZW5kIHRoZSBwYXJpdHkgYml0cyBhcmUgZ3JvdXBl ZCB0b2dldGhlciBpbiB0aHJlZSBieXRlcyBhcworZm9sbG93czoKK0VDQyAg ICBCaXQgNyBCaXQgNiBCaXQgNSBCaXQgNCBCaXQgMyBCaXQgMiBCaXQgMSBC aXQgMAorRUNDIDAgICBycDA3ICBycDA2ICBycDA1ICBycDA0ICBycDAzICBy cDAyICBycDAxICBycDAwCitFQ0MgMSAgIHJwMTUgIHJwMTQgIHJwMTMgIHJw MTIgIHJwMTEgIHJwMTAgIHJwMDkgIHJwMDgKK0VDQyAyICAgY3A1ICAgY3A0 ICAgY3AzICAgY3AyICAgY3AxICAgY3AwICAgICAgMSAgICAgMQorCitJIGRl dGVjdGVkIGFmdGVyIHdyaXRpbmcgdGhpcyB0aGF0IFNUIGFwcGxpY2F0aW9u IG5vdGUgQU4xODIzCisoaHR0cDovL3d3dy5zdC5jb20vc3RvbmxpbmUvYm9v a3MvcGRmL2RvY3MvMTAxMjMucGRmKSBnaXZlcyBhIG11Y2gKK25pY2VyIHBp Y3R1cmUuKGJ1dCB0aGV5IHVzZSBsaW5lIHBhcml0eSBhcyB0ZXJtIHdoZXJl IEkgdXNlIHJvdyBwYXJpdHkpCitPaCB3ZWxsLCBJJ20gZ3JhcGhpY2FsbHkg Y2hhbGxlbmdlZCwgc28gc3VmZmVyIHdpdGggbWUgZm9yIGEgbW9tZW50IDot KQorQW5kIEkgY291bGQgbm90IHJldXNlIHRoZSBTVCBwaWN0dXJlIGFueXdh eSBmb3IgY29weXJpZ2h0IHJlYXNvbnMuCisKKworQXR0ZW1wdCAwCis9PT09 PT09PT0KKworSW1wbGVtZW50aW5nIHRoZSBwYXJpdHkgY2FsY3VsYXRpb24g aXMgcHJldHR5IHNpbXBsZS4KK0luIEMgcHNldWRvY29kZToKK2ZvciAoaSA9 IDA7IGkgPCAyNTY7IGkrKykKK3sKKyAgICBpZiAoaSAmIDB4MDEpCisgICAg ICAgcnAxID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBi aXQyIF4gYml0MSBeIGJpdDAgXiBycDE7CisgICAgZWxzZQorICAgICAgIHJw MCA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBe IGJpdDEgXiBiaXQwIF4gcnAxOworICAgIGlmIChpICYgMHgwMikKKyAgICAg ICBycDMgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJp dDIgXiBiaXQxIF4gYml0MCBeIHJwMzsKKyAgICBlbHNlCisgICAgICAgcnAy ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4g Yml0MSBeIGJpdDAgXiBycDI7CisgICAgaWYgKGkgJiAweDA0KQorICAgICAg cnA1ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQy IF4gYml0MSBeIGJpdDAgXiBycDU7CisgICAgZWxzZQorICAgICAgcnA0ID0g Yml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0 MSBeIGJpdDAgXiBycDQ7CisgICAgaWYgKGkgJiAweDA4KQorICAgICAgcnA3 ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4g Yml0MSBeIGJpdDAgXiBycDc7CisgICAgZWxzZQorICAgICAgcnA2ID0gYml0 NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBe IGJpdDAgXiBycDY7CisgICAgaWYgKGkgJiAweDEwKQorICAgICAgcnA5ID0g Yml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0 MSBeIGJpdDAgXiBycDk7CisgICAgZWxzZQorICAgICAgcnA4ID0gYml0NyBe IGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJp dDAgXiBycDg7CisgICAgaWYgKGkgJiAweDIwKQorICAgICAgcnAxMSA9IGJp dDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEg XiBiaXQwIF4gcnAxMTsKKyAgICBlbHNlCisgICAgcnAxMCA9IGJpdDcgXiBi aXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQw IF4gcnAxMDsKKyAgICBpZiAoaSAmIDB4NDApCisgICAgICBycDEzID0gYml0 NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBe IGJpdDAgXiBycDEzOworICAgIGVsc2UKKyAgICAgIHJwMTIgPSBiaXQ3IF4g Yml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0 MCBeIHJwMTI7CisgICAgaWYgKGkgJiAweDgwKQorICAgICAgcnAxNSA9IGJp dDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEg XiBiaXQwIF4gcnAxNTsKKyAgICBlbHNlCisgICAgICBycDE0ID0gYml0NyBe IGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJp dDAgXiBycDE0OworICAgIGNwMCA9IGJpdDYgXiBiaXQ0IF4gYml0MiBeIGJp dDAgXiBjcDA7CisgICAgY3AxID0gYml0NyBeIGJpdDUgXiBiaXQzIF4gYml0 MSBeIGNwMTsKKyAgICBjcDIgPSBiaXQ1IF4gYml0NCBeIGJpdDEgXiBiaXQw IF4gY3AyOworICAgIGNwMyA9IGJpdDcgXiBiaXQ2IF4gYml0MyBeIGJpdDIg XiBjcDMKKyAgICBjcDQgPSBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4g Y3A0CisgICAgY3A1ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGNw NQorfQorCisKK0FuYWx5c2lzIDAKKz09PT09PT09PT0KKworQyBkb2VzIGhh dmUgYml0d2lzZSBvcGVyYXRvcnMgYnV0IG5vdCByZWFsbHkgb3BlcmF0b3Jz IHRvIGRvIHRoZSBhYm92ZQorZWZmaWNpZW50bHkgKGFuZCBtb3N0IGhhcmR3 YXJlIGhhcyBubyBzdWNoIGluc3RydWN0aW9ucyBlaXRoZXIpLgorVGhlcmVm b3JlIHdpdGhvdXQgaW1wbGVtZW50aW5nIHRoaXMgaXQgd2FzIGNsZWFyIHRo YXQgdGhlIGNvZGUgYWJvdmUgd2FzCitub3QgZ29pbmcgdG8gYnJpbmcgbWUg YSBOb2JlbCBwcml6ZSA6LSkKKworRm9ydHVuYXRlbHkgdGhlIGV4Y2x1c2l2 ZSBvciBvcGVyYXRpb24gaXMgY29tbXV0YXRpdmUsIHNvIHdlIGNhbiBjb21i aW5lCit0aGUgdmFsdWVzIGluIGFueSBvcmRlci4gU28gaW5zdGVhZCBvZiBj YWxjdWxhdGluZyBhbGwgdGhlIGJpdHMKK2luZGl2aWR1YWxseSwgbGV0IHVz IHRyeSB0byByZWFycmFuZ2UgdGhpbmdzLgorRm9yIHRoZSBjb2x1bW4gcGFy aXR5IHRoaXMgaXMgZWFzeS4gV2UgY2FuIGp1c3QgeG9yIHRoZSBieXRlcyBh bmQgaW4gdGhlCitlbmQgZmlsdGVyIG91dCB0aGUgcmVsZXZhbnQgYml0cy4g VGhpcyBpcyBwcmV0dHkgbmljZSBhcyBpdCB3aWxsIGJyaW5nCithbGwgY3Ag Y2FsY3VsYXRpb24gb3V0IG9mIHRoZSBpZiBsb29wLgorCitTaW1pbGFybHkg d2UgY2FuIGZpcnN0IHhvciB0aGUgYnl0ZXMgZm9yIHRoZSB2YXJpb3VzIHJv d3MuCitUaGlzIGxlYWRzIHRvOgorCisKK0F0dGVtcHQgMQorPT09PT09PT09 CisKK2NvbnN0IGNoYXIgcGFyaXR5WzI1Nl0gPSB7CisgICAgMCwgMSwgMSwg MCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgCisgICAg MSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwg MSwgCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwg MSwgMCwgMCwgMSwgCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwg MCwgMCwgMSwgMCwgMSwgMSwgMCwgCisgICAgMSwgMCwgMCwgMSwgMCwgMSwg MSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgCisgICAgMCwgMSwgMSwg MCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgCisgICAg MCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwg MCwgCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwg MSwgMCwgMCwgMSwgCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwg MSwgMSwgMCwgMSwgMCwgMCwgMSwgCisgICAgMCwgMSwgMSwgMCwgMSwgMCwg MCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgCisgICAgMCwgMSwgMSwg MCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgCisgICAg MSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwg MSwgCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwg MCwgMSwgMSwgMCwgCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwg MSwgMSwgMCwgMSwgMCwgMCwgMSwgCisgICAgMSwgMCwgMCwgMSwgMCwgMSwg MSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgCisgICAgMCwgMSwgMSwg MCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMAorfTsKKwor dm9pZCBlY2MxKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQg Y2hhciAqY29kZSkKK3sKKyAgICBpbnQgaTsKKyAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICpicCA9IGJ1ZjsKKyAgICB1bnNpZ25lZCBjaGFyIGN1cjsKKyAg ICB1bnNpZ25lZCBjaGFyIHJwMCwgcnAxLCBycDIsIHJwMywgcnA0LCBycDUs IHJwNiwgcnA3OworICAgIHVuc2lnbmVkIGNoYXIgcnA4LCBycDksIHJwMTAs IHJwMTEsIHJwMTIsIHJwMTMsIHJwMTQsIHJwMTU7CisgICAgdW5zaWduZWQg Y2hhciBwYXI7CisKKyAgICBwYXIgPSAwOworICAgIHJwMCA9IDA7IHJwMSA9 IDA7IHJwMiA9IDA7IHJwMyA9IDA7CisgICAgcnA0ID0gMDsgcnA1ID0gMDsg cnA2ID0gMDsgcnA3ID0gMDsKKyAgICBycDggPSAwOyBycDkgPSAwOyBycDEw ID0gMDsgcnAxMSA9IDA7CisgICAgcnAxMiA9IDA7IHJwMTMgPSAwOyBycDE0 ID0gMDsgcnAxNSA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBp KyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsKKyAgICAgICAgcGFy IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDEgXj0gY3VyOyBl bHNlIHJwMCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMikgcnAzIF49 IGN1cjsgZWxzZSBycDIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDQp IHJwNSBePSBjdXI7IGVsc2UgcnA0IF49IGN1cjsKKyAgICAgICAgaWYgKGkg JiAweDA4KSBycDcgXj0gY3VyOyBlbHNlIHJwNiBePSBjdXI7CisgICAgICAg IGlmIChpICYgMHgxMCkgcnA5IF49IGN1cjsgZWxzZSBycDggXj0gY3VyOwor ICAgICAgICBpZiAoaSAmIDB4MjApIHJwMTEgXj0gY3VyOyBlbHNlIHJwMTAg Xj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4NDApIHJwMTMgXj0gY3VyOyBl bHNlIHJwMTIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4ODApIHJwMTUg Xj0gY3VyOyBlbHNlIHJwMTQgXj0gY3VyOworICAgIH0KKyAgICBjb2RlWzBd ID0KKyAgICAgICAgKHBhcml0eVtycDddIDw8IDcpIHwKKyAgICAgICAgKHBh cml0eVtycDZdIDw8IDYpIHwKKyAgICAgICAgKHBhcml0eVtycDVdIDw8IDUp IHwKKyAgICAgICAgKHBhcml0eVtycDRdIDw8IDQpIHwKKyAgICAgICAgKHBh cml0eVtycDNdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtycDJdIDw8IDIp IHwKKyAgICAgICAgKHBhcml0eVtycDFdIDw8IDEpIHwKKyAgICAgICAgKHBh cml0eVtycDBdKTsKKyAgICBjb2RlWzFdID0KKyAgICAgICAgKHBhcml0eVty cDE1XSA8PCA3KSB8CisgICAgICAgIChwYXJpdHlbcnAxNF0gPDwgNikgfAor ICAgICAgICAocGFyaXR5W3JwMTNdIDw8IDUpIHwKKyAgICAgICAgKHBhcml0 eVtycDEyXSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcnAxMV0gPDwgMykg fAorICAgICAgICAocGFyaXR5W3JwMTBdIDw8IDIpIHwKKyAgICAgICAgKHBh cml0eVtycDldICA8PCAxKSB8CisgICAgICAgIChwYXJpdHlbcnA4XSk7Cisg ICAgY29kZVsyXSA9CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhmMF0gPDwg NykgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4MGZdIDw8IDYpIHwKKyAg ICAgICAgKHBhcml0eVtwYXIgJiAweGNjXSA8PCA1KSB8CisgICAgICAgIChw YXJpdHlbcGFyICYgMHgzM10gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3Bh ciAmIDB4YWFdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweDU1 XSA8PCAyKTsKKyAgICBjb2RlWzBdID0gfmNvZGVbMF07CisgICAgY29kZVsx XSA9IH5jb2RlWzFdOworICAgIGNvZGVbMl0gPSB+Y29kZVsyXTsKK30KKwor U3RpbGwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGxhc3QgdGhyZWUg aW52ZXJ0IHN0YXRlbWVudHMgYXJlIHRoZXJlIHRvIAorZ2l2ZSBhIGNoZWNr c3VtIG9mIDB4ZmYgMHhmZiAweGZmIGZvciBhbiBlbXB0eSBmbGFzaC4gSW4g YW4gZW1wdHkgZmxhc2gKK2FsbCBkYXRhIGlzIDB4ZmYsIHNvIHRoZSBjaGVj a3N1bSB0aGVuIG1hdGNoZXMuCisKK0kgYWxzbyBpbnRyb2R1Y2VkIHRoZSBw YXJpdHkgbG9va3VwLiBJIGV4cGVjdGVkIHRoaXMgdG8gYmUgdGhlIGZhc3Rl c3QKK3dheSB0byBjYWxjdWxhdGUgdGhlIHBhcml0eSwgYnV0IEkgd2lsbCBp bnZlc3RpZ2F0ZSBhbHRlcm5hdGl2ZXMgbGF0ZXIKK29uLgorCisKK0FuYWx5 c2lzIDEKKz09PT09PT09PT0KKworVGhlIGNvZGUgd29ya3MsIGJ1dCBpcyBu b3QgdGVycmlibHkgZWZmaWNpZW50LiBPbiBteSBzeXN0ZW0gaXQgdG9vawor YWxtb3N0IDQgdGltZXMgYXMgbXVjaCB0aW1lIGFzIHRoZSBsaW51eCBkcml2 ZXIgY29kZS4gQnV0IGhleSwgaWYgaXQgd2FzCisqdGhhdCogZWFzeSB0aGlz IHdvdWxkIGhhdmUgYmVlbiBkb25lIGxvbmcgYmVmb3JlLgorTm8gcGFpbi4g bm8gZ2Fpbi4KKworRm9ydHVuYXRlbHkgdGhlcmUgaXMgcGxlbnR5IG9mIHJv b20gZm9yIGltcHJvdmVtZW50LgorCitJbiBzdGVwIDEgd2UgbW92ZWQgZnJv bSBiaXQtd2lzZSBjYWxjdWxhdGlvbiB0byBieXRlLXdpc2UgY2FsY3VsYXRp b24uCitIb3dldmVyIGluIEMgd2UgY2FuIGFsc28gdXNlIHRoZSB1bnNpZ25l ZCBsb25nIGRhdGEgdHlwZSBhbmQgdmlydHVhbGx5CitldmVyeSBtb2Rlcm4g bWljcm9wcm9jZXNzb3Igc3VwcG9ydHMgMzIgYml0IG9wZXJhdGlvbnMsIHNv IHdoeSBub3QgdHJ5Cit0byB3cml0ZSBvdXIgY29kZSBpbiBzdWNoIGEgd2F5 IHRoYXQgd2UgcHJvY2VzcyBkYXRhIGluIDMyIGJpdCBjaHVua3MuCisKK09m IGNvdXJzZSB0aGlzIG1lYW5zIHNvbWUgbW9kaWZpY2F0aW9uIGFzIHRoZSBy b3cgcGFyaXR5IGlzIGJ5dGUgYnkKK2J5dGUuIEEgcXVpY2sgYW5hbHlzaXM6 Citmb3IgdGhlIGNvbHVtbiBwYXJpdHkgd2UgdXNlIHRoZSBwYXIgdmFyaWFi bGUuIFdoZW4gZXh0ZW5kaW5nIHRvIDMyIGJpdHMgCit3ZSBjYW4gaW4gdGhl IGVuZCBlYXNpbHkgY2FsY3VsYXRlIHAwIGFuZCBwMSBmcm9tIGl0LgorKGJl Y2F1c2UgcGFyIG5vdyBjb25zaXN0cyBvZiA0IGJ5dGVzLCBjb250cmlidXRp bmcgdG8gcnAxLCBycDAsIHJwMSwgcnAwCityZXNwZWN0aXZlbHkpCithbHNv IHJwMiBhbmQgcnAzIGNhbiBiZSBlYXNpbHkgcmV0cmlldmVkIGZyb20gcGFy IGFzIHJwMyBjb3ZlcnMgdGhlCitmaXJzdCB0d28gYnl0ZXMgYW5kIHJwMiB0 aGUgbGFzdCB0d28gYnl0ZXMuCisKK05vdGUgdGhhdCBvZiBjb3Vyc2Ugbm93 IHRoZSBsb29wIGlzIGV4ZWN1dGVkIG9ubHkgNjQgdGltZXMgKDI1Ni80KS4g CitBbmQgbm90ZSB0aGF0IGNhcmUgbXVzdCB0YWtlbiB3cnQgYnl0ZSBvcmRl cmluZy4gVGhlIHdheSBieXRlcyBhcmUKK29yZGVyZWQgaW4gYSBsb25nIGlz IG1hY2hpbmUgZGVwZW5kZW50LCBhbmQgbWlnaHQgYWZmZWN0IHVzLiAKK0Fu eXdheSwgaWYgdGhlcmUgaXMgYW4gaXNzdWU6IHRoaXMgY29kZSBpcyBkZXZl bG9wZWQgb24geDg2ICh0byBiZQorcHJlY2lzZTogYSBERUxMIFBDIHdpdGgg YSBEOTIwIEludGVsIENQVSkKKworQW5kIG9mIGNvdXJzZSB0aGUgcGVyZm9y bWFuY2UgbWlnaHQgZGVwZW5kIG9uIGFsaWdubWVudCwgYnV0IEkgZXhwZWN0 Cit0aGF0IHRoZSBJL08gYnVmZmVycyBpbiB0aGUgbmFuZCBkcml2ZXIgYXJl IGFsaWduZWQgcHJvcGVybHkgKGFuZAorb3RoZXJ3aXNlIHRoYXQgc2hvdWxk IGJlIGZpeGVkIHRvIGdldCBtYXhpbXVtIHBlcmZvcm1hbmNlKS4KKworTGV0 J3MgZ2l2ZSBpdCBhIHRyeS4uLgorCisKK0F0dGVtcHQgMgorPT09PT09PT09 CisKK2V4dGVybiBjb25zdCBjaGFyIHBhcml0eVsyNTZdOworCit2b2lkIGVj YzIoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpj b2RlKQoreworICAgIGludCBpOworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcg KmJwID0gKHVuc2lnbmVkIGxvbmcgKilidWY7CisgICAgdW5zaWduZWQgbG9u ZyBjdXI7CisgICAgdW5zaWduZWQgbG9uZyBycDAsIHJwMSwgcnAyLCBycDMs IHJwNCwgcnA1LCBycDYsIHJwNzsKKyAgICB1bnNpZ25lZCBsb25nIHJwOCwg cnA5LCBycDEwLCBycDExLCBycDEyLCBycDEzLCBycDE0LCBycDE1OworICAg IHVuc2lnbmVkIGxvbmcgcGFyOworCisgICAgcGFyID0gMDsKKyAgICBycDAg PSAwOyBycDEgPSAwOyBycDIgPSAwOyBycDMgPSAwOworICAgIHJwNCA9IDA7 IHJwNSA9IDA7IHJwNiA9IDA7IHJwNyA9IDA7CisgICAgcnA4ID0gMDsgcnA5 ID0gMDsgcnAxMCA9IDA7IHJwMTEgPSAwOworICAgIHJwMTIgPSAwOyBycDEz ID0gMDsgcnAxNCA9IDA7IHJwMTUgPSAwOworCisgICAgZm9yIChpID0gMDsg aSA8IDY0OyBpKyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsKKyAg ICAgICAgcGFyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDUg Xj0gY3VyOyBlbHNlIHJwNCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgw MikgcnA3IF49IGN1cjsgZWxzZSBycDYgXj0gY3VyOworICAgICAgICBpZiAo aSAmIDB4MDQpIHJwOSBePSBjdXI7IGVsc2UgcnA4IF49IGN1cjsKKyAgICAg ICAgaWYgKGkgJiAweDA4KSBycDExIF49IGN1cjsgZWxzZSBycDEwIF49IGN1 cjsKKyAgICAgICAgaWYgKGkgJiAweDEwKSBycDEzIF49IGN1cjsgZWxzZSBy cDEyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIwKSBycDE1IF49IGN1 cjsgZWxzZSBycDE0IF49IGN1cjsKKyAgICB9CisgICAgLyoKKyAgICAgICB3 ZSBuZWVkIHRvIGFkYXB0IHRoZSBjb2RlIGdlbmVyYXRpb24gZm9yIHRoZSBm YWN0IHRoYXQgcnAgdmFycyBhcmUgbm93CisgICAgICAgbG9uZzsgYWxzbyB0 aGUgY29sdW1uIHBhcml0eSBjYWxjdWxhdGlvbiBuZWVkcyB0byBiZSBjaGFu Z2VkLgorICAgICAgIHdlJ2xsIGJyaW5nIHJwNCB0byAxNSBiYWNrIHRvIHNp bmdsZSBieXRlIGVudGl0aWVzIGJ5IHNoaWZ0aW5nIGFuZAorICAgICAgIHhv cmluZworICAgICovCisgICAgcnA0IF49IChycDQgPj4gMTYpOyBycDQgXj0g KHJwNCA+PiA4KTsgcnA0ICY9IDB4ZmY7CisgICAgcnA1IF49IChycDUgPj4g MTYpOyBycDUgXj0gKHJwNSA+PiA4KTsgcnA1ICY9IDB4ZmY7CisgICAgcnA2 IF49IChycDYgPj4gMTYpOyBycDYgXj0gKHJwNiA+PiA4KTsgcnA2ICY9IDB4 ZmY7CisgICAgcnA3IF49IChycDcgPj4gMTYpOyBycDcgXj0gKHJwNyA+PiA4 KTsgcnA3ICY9IDB4ZmY7CisgICAgcnA4IF49IChycDggPj4gMTYpOyBycDgg Xj0gKHJwOCA+PiA4KTsgcnA4ICY9IDB4ZmY7CisgICAgcnA5IF49IChycDkg Pj4gMTYpOyBycDkgXj0gKHJwOSA+PiA4KTsgcnA5ICY9IDB4ZmY7CisgICAg cnAxMCBePSAocnAxMCA+PiAxNik7IHJwMTAgXj0gKHJwMTAgPj4gOCk7IHJw MTAgJj0gMHhmZjsKKyAgICBycDExIF49IChycDExID4+IDE2KTsgcnAxMSBe PSAocnAxMSA+PiA4KTsgcnAxMSAmPSAweGZmOworICAgIHJwMTIgXj0gKHJw MTIgPj4gMTYpOyBycDEyIF49IChycDEyID4+IDgpOyBycDEyICY9IDB4ZmY7 CisgICAgcnAxMyBePSAocnAxMyA+PiAxNik7IHJwMTMgXj0gKHJwMTMgPj4g OCk7IHJwMTMgJj0gMHhmZjsKKyAgICBycDE0IF49IChycDE0ID4+IDE2KTsg cnAxNCBePSAocnAxNCA+PiA4KTsgcnAxNCAmPSAweGZmOworICAgIHJwMTUg Xj0gKHJwMTUgPj4gMTYpOyBycDE1IF49IChycDE1ID4+IDgpOyBycDE1ICY9 IDB4ZmY7CisgICAgcnAzID0gKHBhciA+PiAxNik7IHJwMyBePSAocnAzID4+ IDgpOyBycDMgJj0gMHhmZjsKKyAgICBycDIgPSBwYXIgJiAweGZmZmY7IHJw MiBePSAocnAyID4+IDgpOyBycDIgJj0gMHhmZjsKKyAgICBwYXIgXj0gKHBh ciA+PiAxNik7CisgICAgcnAxID0gKHBhciA+PiA4KTsgcnAxICY9IDB4ZmY7 CisgICAgcnAwID0gKHBhciAmIDB4ZmYpOworICAgIHBhciBePSAocGFyID4+ IDgpOyBwYXIgJj0gMHhmZjsKKworICAgIGNvZGVbMF0gPQorICAgICAgICAo cGFyaXR5W3JwN10gPDwgNykgfAorICAgICAgICAocGFyaXR5W3JwNl0gPDwg NikgfAorICAgICAgICAocGFyaXR5W3JwNV0gPDwgNSkgfAorICAgICAgICAo cGFyaXR5W3JwNF0gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3JwM10gPDwg MykgfAorICAgICAgICAocGFyaXR5W3JwMl0gPDwgMikgfAorICAgICAgICAo cGFyaXR5W3JwMV0gPDwgMSkgfAorICAgICAgICAocGFyaXR5W3JwMF0pOwor ICAgIGNvZGVbMV0gPQorICAgICAgICAocGFyaXR5W3JwMTVdIDw8IDcpIHwK KyAgICAgICAgKHBhcml0eVtycDE0XSA8PCA2KSB8CisgICAgICAgIChwYXJp dHlbcnAxM10gPDwgNSkgfAorICAgICAgICAocGFyaXR5W3JwMTJdIDw8IDQp IHwKKyAgICAgICAgKHBhcml0eVtycDExXSA8PCAzKSB8CisgICAgICAgIChw YXJpdHlbcnAxMF0gPDwgMikgfAorICAgICAgICAocGFyaXR5W3JwOV0gIDw8 IDEpIHwKKyAgICAgICAgKHBhcml0eVtycDhdKTsKKyAgICBjb2RlWzJdID0K KyAgICAgICAgKHBhcml0eVtwYXIgJiAweGYwXSA8PCA3KSB8CisgICAgICAg IChwYXJpdHlbcGFyICYgMHgwZl0gPDwgNikgfAorICAgICAgICAocGFyaXR5 W3BhciAmIDB4Y2NdIDw8IDUpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAw eDMzXSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhhYV0gPDwg MykgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4NTVdIDw8IDIpOworICAg IGNvZGVbMF0gPSB+Y29kZVswXTsKKyAgICBjb2RlWzFdID0gfmNvZGVbMV07 CisgICAgY29kZVsyXSA9IH5jb2RlWzJdOworfQorCitUaGUgcGFyaXR5IGFy cmF5IGlzIG5vdCBzaG93biBhbnkgbW9yZS4gTm90ZSBhbHNvIHRoYXQgZm9y IHRoZXNlCitleGFtcGxlcyBJIGtpbmRhIGRldmlhdGVkIGZyb20gbXkgcmVn dWxhciBwcm9ncmFtbWluZyBzdHlsZSBieSBhbGxvd2luZworbXVsdGlwbGUg c3RhdGVtZW50cyBvbiBhIGxpbmUsIG5vdCB1c2luZyB7IH0gaW4gdGhlbiBh bmQgZWxzZSBibG9ja3MKK3dpdGggb25seSBhIHNpbmdsZSBzdGF0ZW1lbnQg YW5kIGJ5IHVzaW5nIG9wZXJhdG9ycyBsaWtlIF49CisKKworQW5hbHlzaXMg MgorPT09PT09PT09PQorCitUaGUgY29kZSAob2YgY291cnNlKSB3b3Jrcywg YW5kIGh1cnJheTogd2UgYXJlIGEgbGl0dGxlIGJpdCBmYXN0ZXIgdGhhbgor dGhlIGxpbnV4IGRyaXZlciBjb2RlIChhYm91dCAxNSUpLiBCdXQgd2FpdCwg ZG9uJ3QgY2hlZXIgdG9vIHF1aWNrbHkuCitUSGVyZSBpcyBtb3JlIHRvIGJl IGdhaW5lZC4KK0lmIHdlIGxvb2sgYXQgZS5nLiBycDE0IGFuZCBycDE1IHdl IHNlZSB0aGF0IHdlIGVpdGhlciB4b3Igb3VyIGRhdGEgd2l0aAorcnAxNCBv ciB3aXRoIHJwMTUuIEhvd2V2ZXIgd2UgYWxzbyBoYXZlIHBhciB3aGljaCBn b2VzIG92ZXIgYWxsIGRhdGEuCitUaGlzIG1lYW5zIHRoZXJlIGlzIG5vIG5l ZWQgdG8gY2FsY3VsYXRlIHJwMTQgYXMgaXQgY2FuIGJlIGNhbGN1bGF0ZWQg ZnJvbQorcnAxNSB0aHJvdWdoIHJwMTQgPSBwYXIgXiBycDE1OworKG9yIGlm IGRlc2lyZWQgd2UgY2FuIGF2b2lkIGNhbGN1bGF0aW5nIHJwMTUgYW5kIGNh bGN1bGF0ZSBpdCBmcm9tCitycDE0KS4gIFRoYXQgaXMgd2h5IHNvbWUgcGxh Y2VzIHJlZmVyIHRvIGludmVyc2UgcGFyaXR5LgorT2YgY291cnNlIHRoZSBz YW1lIHRoaW5nIGhvbGRzIGZvciBycDQvNSwgcnA2LzcsIHJwOC85LCBycDEw LzExIGFuZCBycDEyLzEzLgorRWZmZWN0aXZlbHkgdGhpcyBtZWFucyB3ZSBj YW4gZWxpbWluYXRlIHRoZSBlbHNlIGNsYXVzZSBmcm9tIHRoZSBpZgorc3Rh dGVtZW50cy4gQWxzbyB3ZSBjYW4gb3B0aW1pc2UgdGhlIGNhbGN1bGF0aW9u IGluIHRoZSBlbmQgYSBsaXR0bGUgYml0CitieSBnb2luZyBmcm9tIGxvbmcg dG8gYnl0ZSBmaXJzdC4gQWN0dWFsbHkgd2UgY2FuIGV2ZW4gYXZvaWQgdGhl IHRhYmxlCitsb29rdXBzCisKK0F0dGVtcHQgMworPT09PT09PT09CisKK09k ZCByZXBsYWNlZDoKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDUgXj0gY3Vy OyBlbHNlIHJwNCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMikgcnA3 IF49IGN1cjsgZWxzZSBycDYgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4 MDQpIHJwOSBePSBjdXI7IGVsc2UgcnA4IF49IGN1cjsKKyAgICAgICAgaWYg KGkgJiAweDA4KSBycDExIF49IGN1cjsgZWxzZSBycDEwIF49IGN1cjsKKyAg ICAgICAgaWYgKGkgJiAweDEwKSBycDEzIF49IGN1cjsgZWxzZSBycDEyIF49 IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIwKSBycDE1IF49IGN1cjsgZWxz ZSBycDE0IF49IGN1cjsKK3dpdGgKKyAgICAgICAgaWYgKGkgJiAweDAxKSBy cDUgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDIpIHJwNyBePSBjdXI7 CisgICAgICAgIGlmIChpICYgMHgwNCkgcnA5IF49IGN1cjsgCisgICAgICAg IGlmIChpICYgMHgwOCkgcnAxMSBePSBjdXI7CisgICAgICAgIGlmIChpICYg MHgxMCkgcnAxMyBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgyMCkgcnAx NSBePSBjdXI7CisKKyAgICAgICAgYW5kIG91dHNpZGUgdGhlIGxvb3AgYWRk ZWQ6CisgICAgcnA0ICA9IHBhciBeIHJwNTsKKyAgICBycDYgID0gcGFyIF4g cnA3OworICAgIHJwOCAgPSBwYXIgXiBycDk7CisgICAgcnAxMCAgPSBwYXIg XiBycDExOworICAgIHJwMTIgID0gcGFyIF4gcnAxMzsKKyAgICBycDE0ICA9 IHBhciBeIHJwMTU7CisKK0FuZCBhZnRlciB0aGF0IHRoZSBjb2RlIHRha2Vz IGFib3V0IDMwJSBtb3JlIHRpbWUsIGFsdGhvdWdoIHRoZSBudW1iZXIgb2YK K3N0YXRlbWVudHMgaXMgcmVkdWNlZC4gVGhpcyBpcyBhbHNvIHJlZmxlY3Rl ZCBpbiB0aGUgYXNzZW1ibHkgY29kZS4KKworCitBbmFseXNpcyAzCis9PT09 PT09PT09CisKK1Zlcnkgd2VpcmQuIEd1ZXNzIGl0IGhhcyB0byBkbyB3aXRo IGNhY2hpbmcgb3IgaW5zdHJ1Y3Rpb24gcGFyYWxsZWxsaXNtCitvciBzby4g SSBhbHNvIHRyaWVkIG9uIGFuIGVlZVBDIChDZWxlcm9uLCBjbG9ja2VkIGF0 IDkwMCBNaHopLiBJbnRlcmVzdGluZworb2JzZXJ2YXRpb24gd2FzIHRoYXQg dGhpcyBvbmUgaXMgb25seSAzMCUgc2xvd2VyIChhY2NvcmRpbmcgdG8gdGlt ZSkKK2V4ZWN1dGluZyB0aGUgY29kZSBhcyBteSAzR2h6IEQ5MjAgcHJvY2Vz c29yLgorCitXZWxsLCBpdCB3YXMgZXhwZWN0ZWQgbm90IHRvIGJlIGVhc3kg c28gbWF5YmUgaW5zdGVhZCBtb3ZlIHRvIGEKK2RpZmZlcmVudCB0cmFjazog bGV0J3MgbW92ZSBiYWNrIHRvIHRoZSBjb2RlIGZyb20gYXR0ZW1wdDIgYW5k IGRvIHNvbWUKK2xvb3AgdW5yb2xsaW5nLiBUaGlzIHdpbGwgZWxpbWluYXRl IGEgZmV3IGlmIHN0YXRlbWVudHMuIEknbGwgdHJ5CitkaWZmZXJlbnQgYW1v dW50cyBvZiB1bnJvbGxpbmcgdG8gc2VlIHdoYXQgd29ya3MgYmVzdC4KKwor CitBdHRlbXB0IDQKKz09PT09PT09PQorCitVbnJvbGxlZCB0aGUgbG9vcCAx LCAyLCAzIGFuZCA0IHRpbWVzLgorRm9yIDQgdGhlIGNvZGUgc3RhcnRzIHdp dGg6CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAgIHsKKyAg ICAgICAgY3VyID0gKmJwKys7CisgICAgICAgIHBhciBePSBjdXI7CisgICAg ICAgIHJwNCBePSBjdXI7CisgICAgICAgIHJwNiBePSBjdXI7CisgICAgICAg IHJwOCBePSBjdXI7CisgICAgICAgIHJwMTAgXj0gY3VyOworICAgICAgICBp ZiAoaSAmIDB4MSkgcnAxMyBePSBjdXI7IGVsc2UgcnAxMiBePSBjdXI7Cisg ICAgICAgIGlmIChpICYgMHgyKSBycDE1IF49IGN1cjsgZWxzZSBycDE0IF49 IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7CisgICAgICAgIHBhciBePSBj dXI7CisgICAgICAgIHJwNSBePSBjdXI7CisgICAgICAgIHJwNiBePSBjdXI7 CisgICAgICAgIC4uLgorCisKK0FuYWx5c2lzIDQKKz09PT09PT09PT0KKwor VW5yb2xsaW5nIG9uY2UgZ2FpbnMgYWJvdXQgMTUlCitVbnJvbGxpbmcgdHdp Y2Uga2VlcHMgdGhlIGdhaW4gYXQgYWJvdXQgMTUlCitVbnJvbGxpbmcgdGhy ZWUgdGltZXMgZ2l2ZXMgYSBnYWluIG9mIDMwJSBjb21wYXJlZCB0byBhdHRl bXB0IDIuCitVbnJvbGxpbmcgZm91ciB0aW1lcyBnaXZlcyBhIG1hcmdpbmFs IGltcHJvdmVtZW50IGNvbXBhcmVkIHRvIHVucm9sbGluZwordGhyZWUgdGlt ZXMuCisKK0kgZGVjaWRlZCB0byBwcm9jZWVkIHdpdGggYSBmb3VyIHRpbWUg dW5yb2xsZWQgbG9vcCBhbnl3YXkuIEl0IHdhcyBteSBndXQKK2ZlZWxpbmcg dGhhdCBpbiB0aGUgbmV4dCBzdGVwcyBJIHdvdWxkIG9idGFpbiBhZGRpdGlv bmFsIGdhaW4gZnJvbSBpdC4KKworVGhlIG5leHQgc3RlcCB3YXMgdHJpZ2dl cmVkIGJ5IHRoZSBmYWN0IHRoYXQgcGFyIGNvbnRhaW5zIHRoZSB4b3Igb2Yg YWxsCitieXRlcyBhbmQgcnA0IGFuZCBycDUgZWFjaCBjb250YWluIHRoZSB4 b3Igb2YgaGFsZiBvZiB0aGUgYnl0ZXMuCitTbyBpbiBlZmZlY3QgcGFyID0g cnA0IF4gcnA1LiBCdXQgYXMgeG9yIGlzIGNvbW11dGF0aXZlIHdlIGNhbiBh bHNvIHNheQordGhhdCBycDUgPSBwYXIgXiBycDQuIFNvIG5vIG5lZWQgdG8g a2VlcCBib3RoIHJwNCBhbmQgcnA1IGFyb3VuZC4gV2UgY2FuCitlbGltaW5h dGUgcnA1IChvciBycDQsIGJ1dCBJIGFscmVhZHkgZm9yZXNhdyBhbm90aGVy IG9wdGltaXNhdGlvbikuCitUaGUgc2FtZSBob2xkcyBmb3IgcnA2LzcsIHJw OC85LCBycDEwLzExIHJwMTIvMTMgYW5kIHJwMTQvMTUuCisKKworQXR0ZW1w dCA1Cis9PT09PT09PT0KKworRWZmZWN0aXZlbHkgc28gYWxsIG9kZCBkaWdp dCBycCBhc3NpZ25tZW50cyBpbiB0aGUgbG9vcCB3ZXJlIHJlbW92ZWQuCitU aGlzIGluY2x1ZGVkIHRoZSBlbHNlIGNsYXVzZSBvZiB0aGUgaWYgc3RhdGVt ZW50cy4KK09mIGNvdXJzZSBhZnRlciB0aGUgbG9vcCB3ZSBuZWVkIHRvIGNv cnJlY3QgdGhpbmdzIGJ5IGFkZGluZyBjb2RlIGxpa2U6CisgICAgcnA1ID0g cGFyIF4gcnA0OworQWxzbyB0aGUgaW5pdGlhbCBhc3NpZ25tZW50cyAocnA1 ID0gMDsgZXRjKSBjb3VsZCBiZSByZW1vdmVkLgorQWxvbmcgdGhlIGxpbmUg SSBhbHNvIHJlbW92ZWQgdGhlIGluaXRpYWxpc2F0aW9uIG9mIHJwMC8xLzIv My4KKworCitBbmFseXNpcyA1Cis9PT09PT09PT09CisKK01lYXN1cmVtZW50 cyBzaG93ZWQgdGhpcyB3YXMgYSBnb29kIG1vdmUuIFRoZSBydW4tdGltZSBy b3VnaGx5IGhhbHZlZAorY29tcGFyZWQgd2l0aCBhdHRlbXB0IDQgd2l0aCA0 IHRpbWVzIHVucm9sbGVkLCBhbmQgd2Ugb25seSByZXF1aXJlIDEvM3JkCitv ZiB0aGUgcHJvY2Vzc29yIHRpbWUgY29tcGFyZWQgdG8gdGhlIGN1cnJlbnQg Y29kZSBpbiB0aGUgbGludXgga2VybmVsLgorCitIb3dldmVyLCBzdGlsbCBJ IHRob3VnaHQgdGhlcmUgd2FzIG1vcmUuIEkgZGlkbid0IGxpa2UgYWxsIHRo ZSBpZgorc3RhdGVtZW50cy4gV2h5IG5vdCBrZWVwIGEgcnVubmluZyBwYXJp dHkgYW5kIG9ubHkga2VlcCB0aGUgbGFzdCBpZgorc3RhdGVtZW50LiBUaW1l IGZvciB5ZXQgYW5vdGhlciB2ZXJzaW9uIQorCisKK0F0dGVtcHQgNgorPT09 PT09PT09CisKK1RIZSBjb2RlIHdpdGhpbiB0aGUgZm9yIGxvb3Agd2FzIGNo YW5nZWQgdG86CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAg IHsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciAgPSBjdXI7IHJwNCBe PSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBy cDYgXj0gdG1wcGFyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49 IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBh ciBePSBjdXI7IHJwOCBePSB0bXBwYXI7CisKKyAgICAgICAgY3VyID0gKmJw Kys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7IHJwNiBePSBjdXI7Cisg ICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gY3Vy OworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1 cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwMTAgXj0g dG1wcGFyOworCisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBy cDQgXj0gY3VyOyBycDYgXj0gY3VyOyBycDggXj0gY3VyOworICAgICAgICBj dXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsgcnA4IF49 IGN1cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBe PSBjdXI7IHJwOCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBw YXIgXj0gY3VyOyBycDggXj0gY3VyOworCisgICAgICAgIGN1ciA9ICpicCsr OyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOyBycDYgXj0gY3VyOworICAg ICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsK KyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBj dXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOworCisJ ICAgIHBhciBePSB0bXBwYXI7CisgICAgICAgIGlmICgoaSAmIDB4MSkgPT0g MCkgcnAxMiBePSB0bXBwYXI7CisgICAgICAgIGlmICgoaSAmIDB4MikgPT0g MCkgcnAxNCBePSB0bXBwYXI7CisgICAgfQorCitBcyB5b3UgY2FuIHNlZSB0 bXBwYXIgaXMgdXNlZCB0byBhY2N1bXVsYXRlIHRoZSBwYXJpdHkgd2l0aGlu IGEgZm9yCitpdGVyYXRpb24uIEluIHRoZSBsYXN0IDMgc3RhdGVtZW50cyBp cyBpcyBhZGRlZCB0byBwYXIgYW5kLCBpZiBuZWVkZWQsCit0byBycDEyIGFu ZCBycDE0LgorCitXaGlsZSBtYWtpbmcgdGhlIGNoYW5nZXMgSSBhbHNvIGZv dW5kIHRoYXQgSSBjb3VsZCBleHBsb2l0IHRoYXQgdG1wcGFyCitjb250YWlu cyB0aGUgcnVubmluZyBwYXJpdHkgZm9yIHRoaXMgaXRlcmF0aW9uLiBTbyBp bnN0ZWFkIG9mIGhhdmluZzoKK3JwNCBePSBjdXI7IHJwNiA9IGN1cjsKK0kg cmVtb3ZlZCB0aGUgcnA2ID0gY3VyOyBzdGF0ZW1lbnQgYW5kIGRpZCBycDYg Xj0gdG1wcGFyOyBvbiBuZXh0CitzdGF0ZW1lbnQuIEEgc2ltaWxhciBjaGFu Z2Ugd2FzIGRvbmUgZm9yIHJwOCBhbmQgcnAxMAorCisKK0FuYWx5c2lzIDYK Kz09PT09PT09PT0KKworTWVhc3VyaW5nIHRoaXMgY29kZSBhZ2FpbiBzaG93 ZWQgYmlnIGdhaW4uIFdoZW4gZXhlY3V0aW5nIHRoZSBvcmlnaW5hbAorbGlu dXggY29kZSAxIG1pbGxpb24gdGltZXMsIHRoaXMgdG9vayBhYm91dCAxIHNl Y29uZCBvbiBteSBzeXN0ZW0uCisodXNpbmcgdGltZSB0byBtZWFzdXJlIHRo ZSBwZXJmb3JtYW5jZSkuIEFmdGVyIHRoaXMgaXRlcmF0aW9uIEkgd2FzIGJh Y2sKK3RvIDAuMDc1IHNlYy4gQWN0dWFsbHkgSSBoYWQgdG8gZGVjaWRlIHRv IHN0YXJ0IG1lYXN1cmluZyBvdmVyIDEwCittaWxsaW9uIGludGVyYXRpb25z IGluIG9yZGVyIG5vdCB0byBsb29zZSB0b28gbXVjaCBhY2N1cmFjeS4gVGhp cyBvbmUKK2RlZmluaXRlbHkgc2VlbWVkIHRvIGJlIHRoZSBqYWNrcG90IQor CitUaGVyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSByb29tIGZvciBpbXByb3Zl bWVudCB0aG91Z2guIFRoZXJlIGFyZSB0aHJlZQorcGxhY2VzIHdpdGggc3Rh dGVtZW50czoKK3JwNCBePSBjdXI7IHJwNiBePSBjdXI7CitJdCBzZWVtcyBt b3JlIGVmZmljaWVudCB0byBhbHNvIG1haW50YWluIGEgdmFyaWFibGUgcnA0 XzYgaW4gdGhlIHdoaWxlCitsb29wOyBUaGlzIGVsaW1pbmF0ZXMgMyBzdGF0 ZW1lbnRzIHBlciBsb29wLiBPZiBjb3Vyc2UgYWZ0ZXIgdGhlIGxvb3Agd2UK K25lZWQgdG8gY29ycmVjdCBieSBhZGRpbmc6CisgICAgcnA0IF49IHJwNF82 OworICAgIHJwNiBePSBycDRfNgorRnVydGhlcm1vcmUgdGhlcmUgYXJlIDQg c2VxdWVudGlhbCBhc3NpbmdtZW50cyB0byBycDguIFRoaXMgY2FuIGJlCitl bmNvZGVkIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50IGJ5IHNhdmluZyB0bXBw YXIgYmVmb3JlIHRob3NlIDQgbGluZXMKK2FuZCBsYXRlciBkbyBycDggPSBy cDggXiB0bXBwYXIgXiBub3RycDg7Cisod2hlcmUgbm90cnA4IGlzIHRoZSB2 YWx1ZSBvZiBycDggYmVmb3JlIHRob3NlIDQgbGluZXMpLgorQWdhaW4gYSB1 c2Ugb2YgdGhlIGNvbW11dGF0aXZlIHByb3BlcnR5IG9mIHhvci4KK1RpbWUg Zm9yIGEgbmV3IHRlc3QhCisKKworQXR0ZW1wdCA3Cis9PT09PT09PT0KKwor VGhlIG5ldyBjb2RlIG5vdyBsb29rcyBsaWtlOgorCisgICAgZm9yIChpID0g MDsgaSA8IDQ7IGkrKykKKyAgICB7CisgICAgICAgIGN1ciA9ICpicCsrOyB0 bXBwYXIgID0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnAr KzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IHRtcHBhcjsKKyAgICAgICAgY3Vy ID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisgICAgICAg IGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDggXj0gdG1wcGFyOwor CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDRfNiBe PSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBy cDYgXj0gY3VyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsg cnA0IF49IGN1cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7 IHJwMTAgXj0gdG1wcGFyOworCisJICAgIG5vdHJwOCA9IHRtcHBhcjsKKwkg ICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNF82IF49IGN1cjsK KyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSBj dXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0g Y3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsKKwkg ICAgcnA4ID0gcnA4IF4gdG1wcGFyIF4gbm90cnA4OworCisgICAgICAgIGN1 ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDRfNiBePSBjdXI7CisgICAg ICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gY3VyOwor ICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1 cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7CisKKwkg ICAgcGFyIF49IHRtcHBhcjsKKyAgICAgICAgaWYgKChpICYgMHgxKSA9PSAw KSBycDEyIF49IHRtcHBhcjsKKyAgICAgICAgaWYgKChpICYgMHgyKSA9PSAw KSBycDE0IF49IHRtcHBhcjsKKyAgICB9CisgICAgcnA0IF49IHJwNF82Owor ICAgIHJwNiBePSBycDRfNjsKKworCitOb3QgYSBiaWcgY2hhbmdlLCBidXQg ZXZlcnkgcGVubnkgY291bnRzIDotKQorCisKK0FuYWx5c2lzIDcKKz09PT09 PT09PT0KKworQWN1dGFsbHkgdGhpcyBtYWRlIHRoaW5ncyB3b3JzZS4gTm90 IHZlcnkgbXVjaCwgYnV0IEkgZG9uJ3Qgd2FudCB0byBtb3ZlCitpbnRvIHRo ZSB3cm9uZyBkaXJlY3Rpb24uIE1heWJlIHNvbWV0aGluZyB0byBpbnZlc3Rp Z2F0ZSBsYXRlci4gQ291bGQKK2hhdmUgdG8gZG8gd2l0aCBjYWNoaW5nIGFn YWluLgorCitHdWVzcyB0aGF0IGlzIHdoYXQgdGhlcmUgaXMgdG8gd2luIHdp dGhpbiB0aGUgbG9vcC4gTWF5YmUgdW5yb2xsaW5nIG9uZQorbW9yZSB0aW1l IHdpbGwgaGVscC4gSSdsbCBrZWVwIHRoZSBvcHRpbWlzYXRpb25zIGZyb20g NyBmb3Igbm93LgorCisKK0F0dGVtcHQgOAorPT09PT09PT09CisKK1Vucm9s bGVkIHRoZSBsb29wIG9uZSBtb3JlIHRpbWUuCisKKworQW5hbHlzaXMgOAor PT09PT09PT09PQorCitUaGlzIG1ha2VzIHRoaW5ncyB3b3JzZS4gTGV0J3Mg c3RpY2sgd2l0aCBhdHRlbXB0IDYgYW5kIGNvbnRpbnVlIGZyb20gdGhlcmUu CitBbHRob3VnaCBpdCBzZWVtcyB0aGF0IHRoZSBjb2RlIHdpdGhpbiB0aGUg bG9vcCBjYW5ub3QgYmUgb3B0aW1pc2VkCitmdXJ0aGVyIHRoZXJlIGlzIHN0 aWxsIHJvb20gdG8gb3B0aW1pemUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGVj YyBjb2Rlcy4KK1dlIGNhbiBzaW1wbHkgY2FsY3VhbGF0ZSB0aGUgdG90YWwg cGFyaXR5LiBJZiB0aGlzIGlzIDAgdGhlbiBycDQgPSBycDUKK2V0Yy4gSWYg dGhlIHBhcml0eSBpcyAxLCB0aGVuIHJwNCA9ICFycDU7CitCdXQgaWYgcnA0 ID0gcnA1IHdlIGRvIG5vdCBuZWVkIHJwNSBldGMuIFdlIGNhbiBqdXN0IHdy aXRlIHRoZSBldmVuIGJpdHMKK2luIHRoZSByZXN1bHQgYnl0ZSBhbmQgdGhl biBkbyBzb21ldGhpbmcgbGlrZQorICAgIGNvZGVbMF0gfD0gKGNvZGVbMF0g PDwgMSk7CitMZXRzIHRlc3QgdGhpcy4KKworCitBdHRlbXB0IDkKKz09PT09 PT09PQorCitDaGFuZ2VkIHRoZSBjb2RlIGJ1dCBhZ2FpbiB0aGlzIHNsaWdo dGx5IGRlZ3JhZGVzIHBlcmZvcm1hbmNlLiBUcmllZCBhbGwKK2tpbmQgb2Yg b3RoZXIgdGhpbmdzLCBsaWtlIGhhdmluZyBkZWRpY2F0ZWQgcGFyaXR5IGFy cmF5cyB0byBhdm9pZCB0aGUKK3NoaWZ0IGFmdGVyIHBhcml0eVtycDddIDw8 IDc7IE5vIGdhaW4uCitDaGFuZ2UgdGhlIGxvb2t1cCB1c2luZyB0aGUgcGFy aXR5IGFycmF5IGJ5IHVzaW5nIHNoaWZ0IG9wZXJhdG9ycyAoZS5nLgorcmVw bGFjZSBwYXJpdHlbcnA3XSA8PCA3IHdpdGg6CitycDcgXj0gKHJwNyA8PCA0 KTsKK3JwNyBePSAocnA3IDw8IDIpOworcnA3IF49IChycDcgPDwgMSk7City cDcgJj0gMHg4MDsKK05vIGdhaW4uCisKK1RoZSBvbmx5IG1hcmdpbmFsIGNo YW5nZSB3YXMgaW52ZXJ0aW5nIHRoZSBwYXJpdHkgYml0cywgc28gd2UgY2Fu IHJlbW92ZQordGhlIGxhc3QgdGhyZWUgaW52ZXJ0IHN0YXRlbWVudHMuCisK K0FoIHdlbGwsIHBpdHkgdGhpcyBkb2VzIG5vdCBkZWxpdmVyIG1vcmUuIFRo ZW4gYWdhaW4gMTAgbWlsbGlvbgoraXRlcmF0aW9ucyB1c2luZyB0aGUgbGlu dXggZHJpdmVyIGNvZGUgdGFrZXMgYmV0d2VlbiAxMyBhbmQgMTMuNQorc2Vj b25kcywgd2hlcmVhcyBteSBjb2RlIG5vdyB0YWtlcyBhYm91dCAwLjczIHNl Y29uZHMgZm9yIHRob3NlIDEwCittaWxsaW9uIGl0ZXJhdGlvbnMuIFNvIGJh c2ljYWxseSBJJ3ZlIGltcHJvdmVkIHRoZSBwZXJmb3JtYW5jZSBieSBhCitm YWN0b3IgMTggb24gbXkgc3lzdGVtLiBOb3QgdGhhdCBiYWQuIE9mIGNvdXJz ZSBvbiBkaWZmZXJlbnQgaGFyZHdhcmUKK3lvdSB3aWxsIGdldCBkaWZmZXJl bnQgcmVzdWx0cy4gTm8gd2FycmFudGllcyEKKworQnV0IG9mIGNvdXJzZSB0 aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGEgZnJlZSBsdW5jaC4gVGhlIGNv ZGVzaXplIGFsbW9zdAordHJpcGxlZCAoZnJvbSA1NjIgYnl0ZXMgdG8gMTQz NCBieXRlcykuIFRoZW4gYWdhaW4sIGl0IGlzIG5vdCB0aGF0IG11Y2guCisK KworQ29ycmVjdGluZyBlcnJvcnMKKz09PT09PT09PT09PT09PT09CisKK0Zv ciBjb3JyZWN0aW5nIGVycm9ycyBJIGFnYWluIHVzZWQgdGhlIFNUIGFwcGxp Y2F0aW9uIG5vdGUgYXMgYSBzdGFydGVyLAorYnV0IEkgYWxzbyBwZWVrZWQg YXQgdGhlIGV4aXN0aW5nIGNvZGUuCitUaGUgYWxnb3JpdGhtIGl0c2VsZiBp cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBKdXN0IHhvciB0aGUgZ2l2ZW4g YW5kCit0aGUgY2FsY3VsYXRlZCBlY2MuIElmIGFsbCBieXRlcyBhcmUgMCB0 aGVyZSBpcyBubyBwcm9ibGVtLiBJZiAxMSBiaXRzCithcmUgMSB3ZSBoYXZl IG9uZSBjb3JyZWN0YWJsZSBiaXQgZXJyb3IuIElmIHRoZXJlIGlzIDEgYml0 IDEsIHdlIGhhdmUgYW4KK2Vycm9yIGluIHRoZSBnaXZlbiBlY2MgY29kZS4g CitJdCBwcm92ZWQgdG8gYmUgZmFzdGVzdCB0byBkbyBzb21lIHRhYmxlIGxv b2t1cHMuIFBlcmZvcm1hbmNlIGdhaW4KK2ludHJvZHVjZWQgYnkgdGhpcyBp cyBhYm91dCBhIGZhY3RvciAyIG9uIG15IHN5c3RlbSB3aGVuIGEgcmVwYWly IGhhZCB0bworYmUgZG9uZSwgYW5kIDElIG9yIHNvIGlmIG5vIHJlcGFpciBo YWQgdG8gYmUgZG9uZS4KK0NvZGUgc2l6ZSBpbmNyZWFzZWQgZnJvbSAzMzAg Ynl0ZXMgdG8gNjg2IGJ5dGVzIGZvciB0aGlzIGZ1bmN0aW9uLgorKGdjYyA0 LjIsIC1PMykKKworCitDb25jbHVzaW9uCis9PT09PT09PT09CisKK1RoZSBn YWluIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGVjYyBpcyB0cmVtZW5kb3VzLiBP bSBteSBkZXZlbG9wbWVudCBoYXJkd2FyZSAKK2Egc3BlZWR1cCBvZiBhIGZh Y3RvciBvZiAxOCBmb3IgZWNjIGNhbGN1bGF0aW9uIHdhcyBhY2hpZXZlZC4g T24gYSB0ZXN0IG9uIGFuCitlbWJlZGRlZCBzeXN0ZW0gd2l0aCBhIE1JUFMg Y29yZSBhIGZhY3RvciA3IHdhcyBvYnRhaW5lZC4KK09uICBhIHRlc3Qgd2l0 aCBhIExpbmtzeXMgTlNMVTIgKEFSTXY1VEUgcHJvY2Vzc29yKSB0aGUgc3Bl ZWR1cCB3YXMgYSBmYWN0b3IKKzUgKGJpZyBlbmRpYW4gbW9kZSwgZ2NjIDQu MS4yLCAtTzMpCitGb3IgY29ycmVjdGlvbiBub3QgbXVjaCBnYWluIGNvdWxk IGJlIG9idGFpbmVkIChhcyBiaXRmbGlwcyBhcmUgcmFyZSkuIFRoZW4KK2Fn YWluIHRoZXJlIGFyZSBhbHNvIG11Y2ggbGVzcyBjeWNsZXMgc3BlbnQgdGhl cmUuCisKK0l0IHNlZW1zIHRoZXJlIGlzIG5vdCBtdWNoIG1vcmUgZ2FpbiBw b3NzaWJsZSBpbiB0aGlzLCBhdCBsZWFzdCB3aGVuCitwcm9ncmFtbWVkIGlu IEMuIE9mIGNvdXJzZSBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBzcXVlZXpl IHNvbWV0aGluZyBtb3JlCitvdXQgb2YgaXQgd2l0aCBhbiBhc3NlbWJsZXIg cHJvZ3JhbSwgYnV0IGR1ZSB0byBwaXBlbGluZSBiZWhhdmlvdXIgZXRjCit0 aGlzIGlzIHZlcnkgdHJpY2t5IChhdCBsZWFzdCBmb3IgaW50ZWwgaHcpLgor CitBdXRob3I6IEZyYW5zIE1ldWxlbmJyb2VrcworQ29weXJpZ2h0IChDKSAy MDA4IEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTlYuCmRpZmYg LXVyTiBsaW51eC0yLjYuMjUuMTAvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Vj Yy5jIGxpbnV4LTIuNi4yNS4xMC53b3JrL2RyaXZlcnMvbXRkL25hbmQvbmFu ZF9lY2MuYwotLS0gbGludXgtMi42LjI1LjEwL2RyaXZlcnMvbXRkL25hbmQv bmFuZF9lY2MuYwkyMDA4LTA3LTAzIDA1OjQ2OjQ3LjAwMDAwMDAwMCArMDIw MAorKysgbGludXgtMi42LjI1LjEwLndvcmsvZHJpdmVycy9tdGQvbmFuZC9u YW5kX2VjYy5jCTIwMDgtMDctMjkgMTk6MzM6MTkuMDAwMDAwMDAwICswMjAw CkBAIC0xLDE1ICsxLDE4IEBACiAvKgotICogVGhpcyBmaWxlIGNvbnRhaW5z IGFuIEVDQyBhbGdvcml0aG0gZnJvbSBUb3NoaWJhIHRoYXQgZGV0ZWN0cyBh bmQKLSAqIGNvcnJlY3RzIDEgYml0IGVycm9ycyBpbiBhIDI1NiBieXRlIGJs b2NrIG9mIGRhdGEuCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYW4gRUNDIGFs Z29yaXRobSB0aGF0IGRldGVjdHMgYW5kIGNvcnJlY3RzIDEgYml0CisgKiBl cnJvcnMgaW4gYSAyNTYgYnl0ZSBibG9jayBvZiBkYXRhLgogICoKICAqIGRy aXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYwogICoKLSAqIENvcHlyaWdodCAo QykgMjAwMC0yMDA0IFN0ZXZlbiBKLiBIaWxsIChzamhpbGxAcmVhbGl0eWRp bHV0ZWQuY29tKQotICogICAgICAgICAgICAgICAgICAgICAgICAgVG9zaGli YSBBbWVyaWNhIEVsZWN0cm9uaWNzIENvbXBvbmVudHMsIEluYy4KKyAqIENv cHlyaWdodCAoQykgMjAwOCBLb25pbmtsaWprZSBQaGlsaXBzIEVsZWN0cm9u aWNzIE5WLgorICogICAgICAgICAgICAgICAgICAgIEF1dGhvcjogRnJhbnMg TWV1bGVuYnJvZWtzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21h cyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICogQ29tcGxldGVs eSByZXBsYWNlcyB0aGUgcHJldmlvdXMgRUNDIGltcGxlbWVudGF0aW9uIHdo aWNoIHdhcyB3cml0dGVuIGJ5OgorICogICBTdGV2ZW4gSi4gSGlsbCAoc2po aWxsQHJlYWxpdHlkaWx1dGVkLmNvbSkKKyAqICAgVGhvbWFzIEdsZWl4bmVy ICh0Z2x4QGxpbnV0cm9uaXguZGUpCiAgKgotICogJElkOiBuYW5kX2VjYy5j LHYgMS4xNSAyMDA1LzExLzA3IDExOjE0OjMwIGdsZWl4bmVyIEV4cCAkCisg KiBJbmZvcm1hdGlvbiBvbiBob3cgdGhpcyBhbGdvcml0aG0gd29ya3MgYW5k IGhvdyBpdCB3YXMgZGV2ZWxvcGVkCisgKiBjYW4gYmUgZm91bmQgaW4gRG9j dW1lbnRhdGlvbi9uYW5kL2VjYy50eHQKICAqCiAgKiBUaGlzIGZpbGUgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0y NSwxNzQgKzI4LDQxNiBAQAogICogd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwK ICAqIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAy MTExLTEzMDcgVVNBLgogICoKLSAqIEFzIGEgc3BlY2lhbCBleGNlcHRpb24s IGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UK LSAqIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhlc2UgZmls ZXMsIG9yIHlvdSBjb21waWxlIHRoZXNlCi0gKiBmaWxlcyBhbmQgbGluayB0 aGVtIHdpdGggb3RoZXIgd29ya3MgdG8gcHJvZHVjZSBhIHdvcmsgYmFzZWQg b24gdGhlc2UKLSAqIGZpbGVzLCB0aGVzZSBmaWxlcyBkbyBub3QgYnkgdGhl bXNlbHZlcyBjYXVzZSB0aGUgcmVzdWx0aW5nIHdvcmsgdG8gYmUKLSAqIGNv dmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBIb3dl dmVyIHRoZSBzb3VyY2UgY29kZSBmb3IKLSAqIHRoZXNlIGZpbGVzIG11c3Qg c3RpbGwgYmUgbWFkZSBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHNl Y3Rpb24gKDMpCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UuCi0gKgotICogVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaW52YWxpZGF0 ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgYSB3b3JrIGJhc2VkIG9uCi0gKiB0 aGlzIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UuCiAgKi8KIAorLyoKKyAqIFRoZSBTVEFOREFMT05F IG1hY3JvIGlzIHVzZWZ1bCB3aGVuIHJ1bm5pbmcgdGhlIGNvZGUgb3V0c2lk ZSB0aGUga2VybmVsCisgKiBlLmcuIHdoZW4gcnVubmluZyB0aGUgY29kZSBp biBhIHRlc3RiZWQgb3IgYSBiZW5jaG1hcmsgcHJvZ3JhbS4KKyAqIFdoZW4g U1RBTkRBTE9ORSBpcyB1c2VkLCB0aGUgbW9kdWxlIHJlbGF0ZWQgbWFjcm9z IGFyZSBjb21tZW50ZWQgb3V0CisgKiBhcyB3ZWxsIGFzIHRoZSBsaW51eCBp bmNsdWRlIGZpbGVzLgorICogSW5zdGVhZCBhIHByaXZhdGUgZGVmaW5pdGlv biBvZiBtdGRfaW50byBpcyBnaXZlbiB0byBzYXRpc2Z5IHRoZSBjb21waWxl cgorICogKHRoZSBjb2RlIGRvZXMgbm90IHVzZSBtdGRfaW5mbywgc28gdGhl IGNvZGUgZG9lcyBub3QgY2FyZSkKKyAqLworI2lmbmRlZiBTVEFOREFMT05F CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRl IDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KKyNlbHNlCitzdHJ1Y3QgbXRkX2lu Zm8geworCWludCBkdW1teTsKK307CisjZW5kaWYKIAogLyoKLSAqIFByZS1j YWxjdWxhdGVkIDI1Ni13YXkgMSBieXRlIGNvbHVtbiBwYXJpdHkKKyAqIGlu dnBhcml0eSBpcyBhIDI1NiBieXRlIHRhYmxlIHRoYXQgY29udGFpbnMgdGhl IG9kZCBwYXJpdHkKKyAqIGZvciBlYWNoIGJ5dGUuIFNvIGlmIHRoZSBudW1i ZXIgb2YgYml0cyBpbiBhIGJ5dGUgaXMgZXZlbiwKKyAqIHRoZSBhcnJheSBl bGVtZW50IGlzIDEsIGFuZCB3aGVuIHRoZSBudW1iZXIgb2YgYml0cyBpcyBv ZGQKKyAqIHRoZSBhcnJheSBlbGVlbW50IGlzIDAuCiAgKi8KLXN0YXRpYyBj b25zdCB1X2NoYXIgbmFuZF9lY2NfcHJlY2FsY190YWJsZVtdID0gewotCTB4 MDAsIDB4NTUsIDB4NTYsIDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEs IDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4 MDAsCi0JMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwgMHgzYywgMHg2OSwgMHg2 YSwgMHgzZiwgMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHg2NiwgMHgzMywg MHgzMCwgMHg2NSwKLQkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAw eDZhLCAweDY5LCAweDNjLCAweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDY1 LCAweDMwLCAweDMzLCAweDY2LAotCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAs IDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4NTksIDB4MGMsIDB4MGYsIDB4 NWEsIDB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsCi0JMHg2OSwgMHgzYywgMHgz ZiwgMHg2YSwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHgzMywgMHg2Niwg MHg2NSwgMHgzMCwgMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwKLQkweDBjLCAw eDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDU2 LCAweDAzLCAweDAwLCAweDU1LCAweDBmLCAweDVhLCAweDU5LCAweDBjLAot CTB4MGYsIDB4NWEsIDB4NTksIDB4MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4 NTUsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4MGMsIDB4NTksIDB4NWEs IDB4MGYsCi0JMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwgMHgzMywgMHg2Niwg MHg2NSwgMHgzMCwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHg2OSwgMHgz YywgMHgzZiwgMHg2YSwKLQkweDZhLCAweDNmLCAweDNjLCAweDY5LCAweDMz LCAweDY2LCAweDY1LCAweDMwLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAw eDY5LCAweDNjLCAweDNmLCAweDZhLAotCTB4MGYsIDB4NWEsIDB4NTksIDB4 MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4NTUsIDB4MDAsIDB4MDMs IDB4NTYsIDB4MGMsIDB4NTksIDB4NWEsIDB4MGYsCi0JMHgwYywgMHg1OSwg MHg1YSwgMHgwZiwgMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwgMHg1NiwgMHgw MywgMHgwMCwgMHg1NSwgMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywKLQkweDY5 LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAw eDMzLCAweDY2LCAweDY1LCAweDMwLCAweDZhLCAweDNmLCAweDNjLCAweDY5 LAotCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsIDB4NWEsIDB4MGYsIDB4MGMs IDB4NTksIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4MDAsIDB4NTUsIDB4 NTYsIDB4MDMsCi0JMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwgMHgzZiwgMHg2 YSwgMHg2OSwgMHgzYywgMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHg2NSwg MHgzMCwgMHgzMywgMHg2NiwKLQkweDY1LCAweDMwLCAweDMzLCAweDY2LCAw eDNjLCAweDY5LCAweDZhLCAweDNmLCAweDNmLCAweDZhLCAweDY5LCAweDNj LCAweDY2LCAweDMzLCAweDMwLCAweDY1LAotCTB4MDAsIDB4NTUsIDB4NTYs IDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4NWEsIDB4MGYsIDB4 MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4MDAKK3N0YXRpYyBjb25z dCBjaGFyIGludnBhcml0eVsyNTZdID0geworCTEsIDAsIDAsIDEsIDAsIDEs IDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwg MSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkwLCAxLCAx LCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEs IDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEs CisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwg MSwgMCwKKwkxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAx LCAwLCAwLCAxLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEs IDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwg MCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAx LCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEs IDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMSwgMCwgMCwgMSwg MCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkwLCAxLCAx LCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEs IDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEs CisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwg MSwgMCwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAw LCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEs IDAsIDEsIDAsIDAsIDEKK307CisKKy8qCisgKiBiaXRzcGVyYnl0ZSBjb250 YWlucyB0aGUgbnVtYmVyIG9mIGJpdHMgcGVyIGJ5dGUKKyAqIHRoaXMgaXMg b25seSB1c2VkIGZvciB0ZXN0aW5nIGFuZCByZXBhaXJpbmcgcGFyaXR5Cisg KiAoYSBwcmVjYWxjdWxhdGVkIHZhbHVlIHNsaWdodGx5IGltcHJvdmVzIHBl cmZvcm1hbmNlKQorICovCitzdGF0aWMgY29uc3QgY2hhciBiaXRzcGVyYnl0 ZVsyNTZdID0geworCTAsIDEsIDEsIDIsIDEsIDIsIDIsIDMsIDEsIDIsIDIs IDMsIDIsIDMsIDMsIDQsCisJMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwg MywgMywgNCwgMywgNCwgNCwgNSwKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0 LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQs IDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMSwgMiwgMiwgMywg MiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSwKKwkyLCAzLCAz LCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorCTIs IDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYs CisJMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwg NiwgNywKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAz LCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQs IDUsIDQsIDUsIDUsIDYsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywg NCwgNCwgNSwgNCwgNSwgNSwgNiwKKwkzLCA0LCA0LCA1LCA0LCA1LCA1LCA2 LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTIsIDMsIDMsIDQsIDMsIDQs IDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMywgNCwgNCwgNSwg NCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywKKwkzLCA0LCA0 LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTQs IDUsIDUsIDYsIDUsIDYsIDYsIDcsIDUsIDYsIDYsIDcsIDYsIDcsIDcsIDgs Cit9OworCisvKgorICogYWRkcmVzc2JpdHMgaXMgYSBsb29rdXAgdGFibGUg dG8gZmlsdGVyIG91dCB0aGUgYml0cyBmcm9tIHRoZSB4b3ItZWQKKyAqIGVj YyBkYXRhIHRoYXQgaWRlbnRpZnkgdGhlIGZhdWx0eSBsb2NhdGlvbi4KKyAq IHRoaXMgaXMgb25seSB1c2VkIGZvciByZXBhaXJpbmcgcGFyaXR5CisgKiBz ZWUgdGhlIGNvbW1lbnRzIGluIG5hbmRfY29ycmVjdF9kYXRhIGZvciBtb3Jl IGRldGFpbHMKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgYWRkcmVzc2JpdHNb MjU2XSA9IHsKKwkweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDAw LCAweDAxLCAweDAxLAorCTB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDIs IDB4MDIsIDB4MDMsIDB4MDMsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwg MHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwKKwkweDAyLCAweDAyLCAweDAzLCAw eDAzLCAweDAyLCAweDAyLCAweDAzLCAweDAzLAorCTB4MDQsIDB4MDQsIDB4 MDUsIDB4MDUsIDB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsCisJMHgwNiwgMHgw NiwgMHgwNywgMHgwNywgMHgwNiwgMHgwNiwgMHgwNywgMHgwNywKKwkweDA0 LCAweDA0LCAweDA1LCAweDA1LCAweDA0LCAweDA0LCAweDA1LCAweDA1LAor CTB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsIDB4MDYsIDB4MDYsIDB4MDcsIDB4 MDcsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgw MSwgMHgwMSwKKwkweDAyLCAweDAyLCAweDAzLCAweDAzLCAweDAyLCAweDAy LCAweDAzLCAweDAzLAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAs IDB4MDAsIDB4MDEsIDB4MDEsCisJMHgwMiwgMHgwMiwgMHgwMywgMHgwMywg MHgwMiwgMHgwMiwgMHgwMywgMHgwMywKKwkweDA0LCAweDA0LCAweDA1LCAw eDA1LCAweDA0LCAweDA0LCAweDA1LCAweDA1LAorCTB4MDYsIDB4MDYsIDB4 MDcsIDB4MDcsIDB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsCisJMHgwNCwgMHgw NCwgMHgwNSwgMHgwNSwgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwKKwkweDA2 LCAweDA2LCAweDA3LCAweDA3LCAweDA2LCAweDA2LCAweDA3LCAweDA3LAor CTB4MDgsIDB4MDgsIDB4MDksIDB4MDksIDB4MDgsIDB4MDgsIDB4MDksIDB4 MDksCisJMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwgMHgwYSwgMHgwYSwgMHgw YiwgMHgwYiwKKwkweDA4LCAweDA4LCAweDA5LCAweDA5LCAweDA4LCAweDA4 LCAweDA5LCAweDA5LAorCTB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsIDB4MGEs IDB4MGEsIDB4MGIsIDB4MGIsCisJMHgwYywgMHgwYywgMHgwZCwgMHgwZCwg MHgwYywgMHgwYywgMHgwZCwgMHgwZCwKKwkweDBlLCAweDBlLCAweDBmLCAw eDBmLCAweDBlLCAweDBlLCAweDBmLCAweDBmLAorCTB4MGMsIDB4MGMsIDB4 MGQsIDB4MGQsIDB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsCisJMHgwZSwgMHgw ZSwgMHgwZiwgMHgwZiwgMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwKKwkweDA4 LCAweDA4LCAweDA5LCAweDA5LCAweDA4LCAweDA4LCAweDA5LCAweDA5LAor CTB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsIDB4MGEsIDB4MGEsIDB4MGIsIDB4 MGIsCisJMHgwOCwgMHgwOCwgMHgwOSwgMHgwOSwgMHgwOCwgMHgwOCwgMHgw OSwgMHgwOSwKKwkweDBhLCAweDBhLCAweDBiLCAweDBiLCAweDBhLCAweDBh LCAweDBiLCAweDBiLAorCTB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsIDB4MGMs IDB4MGMsIDB4MGQsIDB4MGQsCisJMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwg MHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwKKwkweDBjLCAweDBjLCAweDBkLCAw eDBkLCAweDBjLCAweDBjLCAweDBkLCAweDBkLAorCTB4MGUsIDB4MGUsIDB4 MGYsIDB4MGYsIDB4MGUsIDB4MGUsIDB4MGYsIDB4MGYKIH07CiAKIC8qKgog ICogbmFuZF9jYWxjdWxhdGVfZWNjIC0gW05BTkQgSW50ZXJmYWNlXSBDYWxj dWxhdGUgMy1ieXRlIEVDQyBmb3IgMjU2LWJ5dGUgYmxvY2sKLSAqIEBtdGQ6 CU1URCBibG9jayBzdHJ1Y3R1cmUKKyAqIEBtdGQ6CU1URCBibG9jayBzdHJ1 Y3R1cmUgKHVudXNlZCkKICAqIEBkYXQ6CXJhdyBkYXRhCiAgKiBAZWNjX2Nv ZGU6CWJ1ZmZlciBmb3IgRUNDCiAgKi8KLWludCBuYW5kX2NhbGN1bGF0ZV9l Y2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LAot CQkgICAgICAgdV9jaGFyICplY2NfY29kZSkKK2ludCBuYW5kX2NhbGN1bGF0 ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmJ1ZiwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmNvZGUpCiB7Ci0J dWludDhfdCBpZHgsIHJlZzEsIHJlZzIsIHJlZzMsIHRtcDEsIHRtcDI7CiAJ aW50IGk7Ci0KLQkvKiBJbml0aWFsaXplIHZhcmlhYmxlcyAqLwotCXJlZzEg PSByZWcyID0gcmVnMyA9IDA7Ci0KLQkvKiBCdWlsZCB1cCBjb2x1bW4gcGFy aXR5ICovCi0JZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJLyogR2V0 IENQMCAtIENQNSBmcm9tIHRhYmxlICovCi0JCWlkeCA9IG5hbmRfZWNjX3By ZWNhbGNfdGFibGVbKmRhdCsrXTsKLQkJcmVnMSBePSAoaWR4ICYgMHgzZik7 Ci0KLQkJLyogQWxsIGJpdCBYT1IgPSAxID8gKi8KLQkJaWYgKGlkeCAmIDB4 NDApIHsKLQkJCXJlZzMgXj0gKHVpbnQ4X3QpIGk7Ci0JCQlyZWcyIF49IH4o KHVpbnQ4X3QpIGkpOwotCQl9CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYnAg PSAodW5zaWduZWQgbG9uZyAqKWJ1ZjsKKwl1bnNpZ25lZCBsb25nIGN1cjsJ LyogY3VycmVudCB2YWx1ZSBpbiBidWZmZXIgKi8KKwkvKiBycDAuLnJwMTUg YXJlIHRoZSB2YXJpb3VzIGFjY3VtdWxhdGVkIHBhcml0aWVzIChwZXIgYnl0 ZSkgKi8KKwl1bnNpZ25lZCBsb25nIHJwMCwgcnAxLCBycDIsIHJwMywgcnA0 LCBycDUsIHJwNiwgcnA3OworCXVuc2lnbmVkIGxvbmcgcnA4LCBycDksIHJw MTAsIHJwMTEsIHJwMTIsIHJwMTMsIHJwMTQsIHJwMTU7CisJdW5zaWduZWQg bG9uZyBwYXI7CS8qIHRoZSBjdW11bGF0aXZlIHBhcml0eSBmb3IgYWxsIGRh dGEgKi8KKwl1bnNpZ25lZCBsb25nIHRtcHBhcjsJLyogdGhlIGN1bXVsYXRp dmUgcGFyaXR5IGZvciB0aGlzIGl0ZXJhdGlvbjsKKwkJCQkgICBmb3IgcnAx MiBhbmQgcnAxNCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wICovCisKKwlwYXIg PSAwOworCXJwNCA9IDA7CisJcnA2ID0gMDsKKwlycDggPSAwOworCXJwMTAg PSAwOworCXJwMTIgPSAwOworCXJwMTQgPSAwOworCisJLyoKKwkgKiBUaGUg bG9vcCBpcyB1bnJvbGxlZCBhIG51bWJlciBvZiB0aW1lczsKKwkgKiBUaGlz IGF2b2lkcyBpZiBzdGF0ZW1lbnRzIHRvIGRlY2lkZSBvbiB3aGljaCBycCB2 YWx1ZSB0byB1cGRhdGUKKwkgKiBBbHNvIHdlIHByb2Nlc3MgdGhlIGRhdGEg YnkgbG9uZ3dvcmRzLgorCSAqIE5vdGU6IHBhc3NpbmcgdW5hbGlnbmVkIGRh dGEgbWlnaHQgZ2l2ZSBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuCisJICogSXQg aXMgYXNzdW1lZCB0aGF0IHRoZSBidWZmZXJzIGFyZSBhbGlnbmVkLgorCSAq IHRtcHBhciBpcyB0aGUgY3VtdWxhdGl2ZSBzdW0gb2YgdGhpcyBpdGVyYXRp b24uCisJICogbmVlZGVkIGZvciBjYWxjdWxhdGluZyBycDEyLCBycDE0IGFu ZCBwYXIKKwkgKiBhbHNvIHVzZWQgYXMgYSBwZXJmb3JtYW5jZSBpbXByb3Zl bWVudCBmb3IgcnA2LCBycDggYW5kIHJwMTAKKwkgKi8KKwlmb3IgKGkgPSAw OyBpIDwgNDsgaSsrKSB7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgPSBj dXI7CisJCXJwNCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIg Xj0gY3VyOworCQlycDYgXj0gdG1wcGFyOworCQljdXIgPSAqYnArKzsKKwkJ dG1wcGFyIF49IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJY3VyID0gKmJwKys7 CisJCXRtcHBhciBePSBjdXI7CisJCXJwOCBePSB0bXBwYXI7CisKKwkJY3Vy ID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJ CXJwNiBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3Vy OworCQlycDYgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49 IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBh ciBePSBjdXI7CisJCXJwMTAgXj0gdG1wcGFyOworCisJCWN1ciA9ICpicCsr OworCQl0bXBwYXIgXj0gY3VyOworCQlycDQgXj0gY3VyOworCQlycDYgXj0g Y3VyOworCQlycDggXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFy IF49IGN1cjsKKwkJcnA2IF49IGN1cjsKKwkJcnA4IF49IGN1cjsKKwkJY3Vy ID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJ CXJwOCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3Vy OworCQlycDggXj0gY3VyOworCisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIg Xj0gY3VyOworCQlycDQgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQljdXIg PSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA2IF49IGN1cjsKKwkJ Y3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7 CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCisJCXBhciBe PSB0bXBwYXI7CisJCWlmICgoaSAmIDB4MSkgPT0gMCkKKwkJCXJwMTIgXj0g dG1wcGFyOworCQlpZiAoKGkgJiAweDIpID09IDApCisJCQlycDE0IF49IHRt cHBhcjsKIAl9CiAKLQkvKiBDcmVhdGUgbm9uLWludmVydGVkIEVDQyBjb2Rl IGZyb20gbGluZSBwYXJpdHkgKi8KLQl0bXAxICA9IChyZWczICYgMHg4MCkg Pj4gMDsgLyogQjcgLT4gQjcgKi8KLQl0bXAxIHw9IChyZWcyICYgMHg4MCkg Pj4gMTsgLyogQjcgLT4gQjYgKi8KLQl0bXAxIHw9IChyZWczICYgMHg0MCkg Pj4gMTsgLyogQjYgLT4gQjUgKi8KLQl0bXAxIHw9IChyZWcyICYgMHg0MCkg Pj4gMjsgLyogQjYgLT4gQjQgKi8KLQl0bXAxIHw9IChyZWczICYgMHgyMCkg Pj4gMjsgLyogQjUgLT4gQjMgKi8KLQl0bXAxIHw9IChyZWcyICYgMHgyMCkg Pj4gMzsgLyogQjUgLT4gQjIgKi8KLQl0bXAxIHw9IChyZWczICYgMHgxMCkg Pj4gMzsgLyogQjQgLT4gQjEgKi8KLQl0bXAxIHw9IChyZWcyICYgMHgxMCkg Pj4gNDsgLyogQjQgLT4gQjAgKi8KLQotCXRtcDIgID0gKHJlZzMgJiAweDA4 KSA8PCA0OyAvKiBCMyAtPiBCNyAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDA4 KSA8PCAzOyAvKiBCMyAtPiBCNiAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDA0 KSA8PCAzOyAvKiBCMiAtPiBCNSAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDA0 KSA8PCAyOyAvKiBCMiAtPiBCNCAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDAy KSA8PCAyOyAvKiBCMSAtPiBCMyAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDAy KSA8PCAxOyAvKiBCMSAtPiBCMiAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDAx KSA8PCAxOyAvKiBCMCAtPiBCMSAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDAx KSA8PCAwOyAvKiBCNyAtPiBCMCAqLwotCi0JLyogQ2FsY3VsYXRlIGZpbmFs IEVDQyBjb2RlICovCisJLyoKKwkgKiBoYW5kbGUgdGhlIGZhY3QgdGhhdCB3 ZSB1c2UgbG9uZ3dvcmQgb3BlcmF0aW9ucworCSAqIHdlJ2xsIGJyaW5nIHJw NC4ucnAxNCBiYWNrIHRvIHNpbmdsZSBieXRlIGVudGl0aWVzIGJ5IHNoaWZ0 aW5nIGFuZAorCSAqIHhvcmluZyBmaXJzdCBmb2xkIHRoZSB1cHBlciBhbmQg bG93ZXIgMTYgYml0cywKKwkgKiB0aGVuIHRoZSB1cHBlciBhbmQgbG93ZXIg OCBiaXRzLgorCSAqLworCXJwNCBePSAocnA0ID4+IDE2KTsKKwlycDQgXj0g KHJwNCA+PiA4KTsKKwlycDQgJj0gMHhmZjsKKwlycDYgXj0gKHJwNiA+PiAx Nik7CisJcnA2IF49IChycDYgPj4gOCk7CisJcnA2ICY9IDB4ZmY7CisJcnA4 IF49IChycDggPj4gMTYpOworCXJwOCBePSAocnA4ID4+IDgpOworCXJwOCAm PSAweGZmOworCXJwMTAgXj0gKHJwMTAgPj4gMTYpOworCXJwMTAgXj0gKHJw MTAgPj4gOCk7CisJcnAxMCAmPSAweGZmOworCXJwMTIgXj0gKHJwMTIgPj4g MTYpOworCXJwMTIgXj0gKHJwMTIgPj4gOCk7CisJcnAxMiAmPSAweGZmOwor CXJwMTQgXj0gKHJwMTQgPj4gMTYpOworCXJwMTQgXj0gKHJwMTQgPj4gOCk7 CisJcnAxNCAmPSAweGZmOworCisJLyoKKwkgKiB3ZSBhbHNvIG5lZWQgdG8g Y2FsY3VsYXRlIHRoZSByb3cgcGFyaXR5IGZvciBycDAuLnJwMworCSAqIFRo aXMgaXMgcHJlc2VudCBpbiBwYXIsIGJlY2F1c2UgcGFyIGlzIG5vdworCSAq IHJwMyBycDMgcnAyIHJwMgorCSAqIGFzIHdlbGwgYXMKKwkgKiBycDEgcnAw IHJwMSBycDAKKwkgKiBGaXJzdCBjYWxjdWxhdGUgcnAyIGFuZCBycDMKKwkg KiAoYW5kIHllczogcnAyID0gKHBhciBeIHJwMykgJiAweGZmOyBidXQgZG9p bmcgdGhhdCBkaWQgbm90CisJICogZ2l2ZSBhIHBlcmZvcm1hbmNlIGltcHJv dmVtZW50KQorCSAqLworCXJwMyA9IChwYXIgPj4gMTYpOworCXJwMyBePSAo cnAzID4+IDgpOworCXJwMyAmPSAweGZmOworCXJwMiA9IHBhciAmIDB4ZmZm ZjsKKwlycDIgXj0gKHJwMiA+PiA4KTsKKwlycDIgJj0gMHhmZjsKKworCS8q IHJlZHVjZSBwYXIgdG8gMTYgYml0cyB0aGVuIGNhbGN1bGF0ZSBycDEgYW5k IHJwMCAqLworCXBhciBePSAocGFyID4+IDE2KTsKKwlycDEgPSAocGFyID4+ IDgpICYgMHhmZjsKKwlycDAgPSAocGFyICYgMHhmZik7CisKKwkvKiBmaW5h bGx5IHJlZHVjZSBwYXIgdG8gOCBiaXRzICovCisJcGFyIF49IChwYXIgPj4g OCk7CisJcGFyICY9IDB4ZmY7CisKKwkvKgorCSAqIGFuZCBjYWxjdWxhdGUg cnA1Li5ycDE1CisJICogbm90ZSB0aGF0IHBhciA9IHJwNCBeIHJwNSBhbmQg ZHVlIHRvIHRoZSBjb21tdXRhdGl2ZSBwcm9wZXJ0eQorCSAqIG9mIHRoZSBe IG9wZXJhdG9yIHdlIGNhbiBzYXk6CisJICogcnA1ID0gKHBhciBeIHJwNCk7 CisJICogVGhlICYgMHhmZiBzZWVtcyBzdXBlcmZsdW91cywgYnV0IGJlbmNo bWFya2luZyBsZWFybmVkIHRoYXQKKwkgKiBsZWF2aW5nIGl0IG91dCBnaXZl cyBzbGlnaHRseSB3b3JzZSByZXN1bHRzLiBObyBpZGVhIHdoeSwgcHJvYmFi bHkKKwkgKiBpdCBoYXMgdG8gZG8gd2l0aCB0aGUgd2F5IHRoZSBwaXBlbGlu ZSBpbiBwZW50aXVtIGlzIG9yZ2FuaXplZC4KKwkgKi8KKwlycDUgPSAocGFy IF4gcnA0KSAmIDB4ZmY7CisJcnA3ID0gKHBhciBeIHJwNikgJiAweGZmOwor CXJwOSA9IChwYXIgXiBycDgpICYgMHhmZjsKKwlycDExID0gKHBhciBeIHJw MTApICYgMHhmZjsKKwlycDEzID0gKHBhciBeIHJwMTIpICYgMHhmZjsKKwly cDE1ID0gKHBhciBeIHJwMTQpICYgMHhmZjsKKworCS8qCisJICogRmluYWxs eSBjYWxjdWxhdGUgdGhlIGVjYyBiaXRzLgorCSAqIEFnYWluIGhlcmUgaXQg bWlnaHQgc2VlbSB0aGF0IHRoZXJlIGFyZSBwZXJmb3JtYW5jZSBvcHRpbWlz YXRpb25zCisJICogcG9zc2libGUsIGJ1dCBiZW5jaG1hcmtzIHNob3dlZCB0 aGF0IG9uIHRoZSBzeXN0ZW0gdGhpcyBpcyBkZXZlbG9wZWQKKwkgKiB0aGUg Y29kZSBiZWxvdyBpcyB0aGUgZmFzdGVzdAorCSAqLwogI2lmZGVmIENPTkZJ R19NVERfTkFORF9FQ0NfU01DCi0JZWNjX2NvZGVbMF0gPSB+dG1wMjsKLQll Y2NfY29kZVsxXSA9IH50bXAxOworCWNvZGVbMF0gPQorCSAgICAoaW52cGFy aXR5W3JwN10gPDwgNykgfAorCSAgICAoaW52cGFyaXR5W3JwNl0gPDwgNikg fAorCSAgICAoaW52cGFyaXR5W3JwNV0gPDwgNSkgfAorCSAgICAoaW52cGFy aXR5W3JwNF0gPDwgNCkgfAorCSAgICAoaW52cGFyaXR5W3JwM10gPDwgMykg fAorCSAgICAoaW52cGFyaXR5W3JwMl0gPDwgMikgfAorCSAgICAoaW52cGFy aXR5W3JwMV0gPDwgMSkgfAorCSAgICAoaW52cGFyaXR5W3JwMF0pOworCWNv ZGVbMV0gPQorCSAgICAoaW52cGFyaXR5W3JwMTVdIDw8IDcpIHwKKwkgICAg KGludnBhcml0eVtycDE0XSA8PCA2KSB8CisJICAgIChpbnZwYXJpdHlbcnAx M10gPDwgNSkgfAorCSAgICAoaW52cGFyaXR5W3JwMTJdIDw8IDQpIHwKKwkg ICAgKGludnBhcml0eVtycDExXSA8PCAzKSB8CisJICAgIChpbnZwYXJpdHlb cnAxMF0gPDwgMikgfAorCSAgICAoaW52cGFyaXR5W3JwOV0gPDwgMSkgIHwK KwkgICAgKGludnBhcml0eVtycDhdKTsKICNlbHNlCi0JZWNjX2NvZGVbMF0g PSB+dG1wMTsKLQllY2NfY29kZVsxXSA9IH50bXAyOworCWNvZGVbMV0gPQor CSAgICAoaW52cGFyaXR5W3JwN10gPDwgNykgfAorCSAgICAoaW52cGFyaXR5 W3JwNl0gPDwgNikgfAorCSAgICAoaW52cGFyaXR5W3JwNV0gPDwgNSkgfAor CSAgICAoaW52cGFyaXR5W3JwNF0gPDwgNCkgfAorCSAgICAoaW52cGFyaXR5 W3JwM10gPDwgMykgfAorCSAgICAoaW52cGFyaXR5W3JwMl0gPDwgMikgfAor CSAgICAoaW52cGFyaXR5W3JwMV0gPDwgMSkgfAorCSAgICAoaW52cGFyaXR5 W3JwMF0pOworCWNvZGVbMF0gPQorCSAgICAoaW52cGFyaXR5W3JwMTVdIDw8 IDcpIHwKKwkgICAgKGludnBhcml0eVtycDE0XSA8PCA2KSB8CisJICAgIChp bnZwYXJpdHlbcnAxM10gPDwgNSkgfAorCSAgICAoaW52cGFyaXR5W3JwMTJd IDw8IDQpIHwKKwkgICAgKGludnBhcml0eVtycDExXSA8PCAzKSB8CisJICAg IChpbnZwYXJpdHlbcnAxMF0gPDwgMikgfAorCSAgICAoaW52cGFyaXR5W3Jw OV0gPDwgMSkgIHwKKwkgICAgKGludnBhcml0eVtycDhdKTsKICNlbmRpZgot CWVjY19jb2RlWzJdID0gKCh+cmVnMSkgPDwgMikgfCAweDAzOwotCi0JcmV0 dXJuIDA7CisJY29kZVsyXSA9CisJICAgIChpbnZwYXJpdHlbcGFyICYgMHhm MF0gPDwgNykgfAorCSAgICAoaW52cGFyaXR5W3BhciAmIDB4MGZdIDw8IDYp IHwKKwkgICAgKGludnBhcml0eVtwYXIgJiAweGNjXSA8PCA1KSB8CisJICAg IChpbnZwYXJpdHlbcGFyICYgMHgzM10gPDwgNCkgfAorCSAgICAoaW52cGFy aXR5W3BhciAmIDB4YWFdIDw8IDMpIHwKKwkgICAgKGludnBhcml0eVtwYXIg JiAweDU1XSA8PCAyKSB8CisJICAgIDM7CiB9Ci1FWFBPUlRfU1lNQk9MKG5h bmRfY2FsY3VsYXRlX2VjYyk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNvdW50 Yml0cyh1aW50MzJfdCBieXRlKQotewotCWludCByZXMgPSAwOwogCi0JZm9y ICg7Ynl0ZTsgYnl0ZSA+Pj0gMSkKLQkJcmVzICs9IGJ5dGUgJiAweDAxOwot CXJldHVybiByZXM7Ci19CisjaWZuZGVmIFNUQU5EQUxPTkUKK0VYUE9SVF9T WU1CT0wobmFuZF9jYWxjdWxhdGVfZWNjKTsKKyNlbmRpZgogCiAvKioKICAq IG5hbmRfY29ycmVjdF9kYXRhIC0gW05BTkQgSW50ZXJmYWNlXSBEZXRlY3Qg YW5kIGNvcnJlY3QgYml0IGVycm9yKHMpCi0gKiBAbXRkOglNVEQgYmxvY2sg c3RydWN0dXJlCisgKiBAbXRkOglNVEQgYmxvY2sgc3RydWN0dXJlICh1bnVz ZWQpCiAgKiBAZGF0OglyYXcgZGF0YSByZWFkIGZyb20gdGhlIGNoaXAKICAq IEByZWFkX2VjYzoJRUNDIGZyb20gdGhlIGNoaXAKICAqIEBjYWxjX2VjYzoJ dGhlIEVDQyBjYWxjdWxhdGVkIGZyb20gcmF3IGRhdGEKICAqCiAgKiBEZXRl Y3QgYW5kIGNvcnJlY3QgYSAxIGJpdCBlcnJvciBmb3IgMjU2IGJ5dGUgYmxv Y2sKICAqLwotaW50IG5hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5m byAqbXRkLCB1X2NoYXIgKmRhdCwKLQkJICAgICAgdV9jaGFyICpyZWFkX2Vj YywgdV9jaGFyICpjYWxjX2VjYykKK2ludCBuYW5kX2NvcnJlY3RfZGF0YShz dHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkg ICAgICB1bnNpZ25lZCBjaGFyICpyZWFkX2VjYywgdW5zaWduZWQgY2hhciAq Y2FsY19lY2MpCiB7Ci0JdWludDhfdCBzMCwgczEsIHMyOwotCisJaW50IG5y X2JpdHM7CisJdW5zaWduZWQgY2hhciBiMCwgYjEsIGIyOworCXVuc2lnbmVk IGNoYXIgYnl0ZV9hZGRyLCBiaXRfYWRkcjsKKworCS8qCisJICogYjAgdG8g YjIgaW5kaWNhdGUgd2hpY2ggYml0IGlzIGZhdWx0eSAoaWYgYW55KQorCSAq IHdlIG1pZ2h0IG5lZWQgdGhlIHhvciByZXN1bHQgIG1vcmUgdGhhbiBvbmNl LAorCSAqIHNvIGtlZXAgdGhlbSBpbiBhIGxvY2FsIHZhcgorCSovCiAjaWZk ZWYgQ09ORklHX01URF9OQU5EX0VDQ19TTUMKLQlzMCA9IGNhbGNfZWNjWzBd IF4gcmVhZF9lY2NbMF07Ci0JczEgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNj WzFdOwotCXMyID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKKwliMCA9 IHJlYWRfZWNjWzBdIF4gY2FsY19lY2NbMF07CisJYjEgPSByZWFkX2VjY1sx XSBeIGNhbGNfZWNjWzFdOwogI2Vsc2UKLQlzMSA9IGNhbGNfZWNjWzBdIF4g cmVhZF9lY2NbMF07Ci0JczAgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNjWzFd OwotCXMyID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKKwliMCA9IHJl YWRfZWNjWzFdIF4gY2FsY19lY2NbMV07CisJYjEgPSByZWFkX2VjY1swXSBe IGNhbGNfZWNjWzBdOwogI2VuZGlmCi0JaWYgKChzMCB8IHMxIHwgczIpID09 IDApCi0JCXJldHVybiAwOworCWIyID0gcmVhZF9lY2NbMl0gXiBjYWxjX2Vj Y1syXTsKIAotCS8qIENoZWNrIGZvciBhIHNpbmdsZSBiaXQgZXJyb3IgKi8K LQlpZiggKChzMCBeIChzMCA+PiAxKSkgJiAweDU1KSA9PSAweDU1ICYmCi0J ICAgICgoczEgXiAoczEgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSAmJgotCSAg ICAoKHMyIF4gKHMyID4+IDEpKSAmIDB4NTQpID09IDB4NTQpIHsKKwkvKiBj aGVjayBpZiB0aGVyZSBhcmUgYW55IGJpdGZhdWx0cyAqLwogCi0JCXVpbnQz Ml90IGJ5dGVvZmZzLCBiaXRudW07CisJLyogY291bnQgbnIgb2YgYml0czsg dXNlIHRhYmxlIGxvb2t1cCwgZmFzdGVyIHRoYW4gY2FsY3VsYXRpbmcgaXQg Ki8KKwlucl9iaXRzID0gYml0c3BlcmJ5dGVbYjBdICsgYml0c3BlcmJ5dGVb YjFdICsgYml0c3BlcmJ5dGVbYjJdOwogCi0JCWJ5dGVvZmZzID0gKHMxIDw8 IDApICYgMHg4MDsKLQkJYnl0ZW9mZnMgfD0gKHMxIDw8IDEpICYgMHg0MDsK LQkJYnl0ZW9mZnMgfD0gKHMxIDw8IDIpICYgMHgyMDsKLQkJYnl0ZW9mZnMg fD0gKHMxIDw8IDMpICYgMHgxMDsKLQotCQlieXRlb2ZmcyB8PSAoczAgPj4g NCkgJiAweDA4OwotCQlieXRlb2ZmcyB8PSAoczAgPj4gMykgJiAweDA0Owot CQlieXRlb2ZmcyB8PSAoczAgPj4gMikgJiAweDAyOwotCQlieXRlb2ZmcyB8 PSAoczAgPj4gMSkgJiAweDAxOwotCi0JCWJpdG51bSA9IChzMiA+PiA1KSAm IDB4MDQ7Ci0JCWJpdG51bSB8PSAoczIgPj4gNCkgJiAweDAyOwotCQliaXRu dW0gfD0gKHMyID4+IDMpICYgMHgwMTsKLQotCQlkYXRbYnl0ZW9mZnNdIF49 ICgxIDw8IGJpdG51bSk7Ci0KLQkJcmV0dXJuIDE7CisJLyogcmVwZWF0ZWQg aWYgc3RhdGVtZW50cyBhcmUgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgdGhh biBzd2l0Y2ggLi4uICovCisJLyogb3JkZXJlZCBpbiBvcmRlciBvZiBsaWtl bGlob29kICovCisJaWYgKG5yX2JpdHMgPT0gMCkKKwkJcmV0dXJuICgwKTsJ Lyogbm8gZXJyb3IgKi8KKwlpZiAobnJfYml0cyA9PSAxMSkgewkvKiBjb3Jy ZWN0YWJsZSBlcnJvciAqLworCQkvKgorCQkgKiBycDE1LzEzLzExLzkvNy81 LzMvMSBpbmRpY2F0ZSB3aGljaCBieXRlIGlzIHRoZSBmYXVsdHkgYnl0ZQor CQkgKiBjcCA1LzMvMSBpbmRpY2F0ZSB0aGUgZmF1bHR5IGJpdC4KKwkJICog QSBsb29rdXAgdGFibGUgKGNhbGxlZCBhZGRyZXNzYml0cykgaXMgdXNlZCB0 byBmaWx0ZXIKKwkJICogdGhlIGJpdHMgZnJvbSB0aGUgYnl0ZSB0aGV5IGFy ZSBpbi4KKwkJICogQSBtYXJnaW5hbCBvcHRpbWlzYXRpb24gaXMgcG9zc2li bGUgYnkgaGF2aW5nIHRocmVlCisJCSAqIGRpZmZlcmVudCBsb29rdXAgdGFi bGVzLgorCQkgKiBPbmUgYXMgd2UgaGF2ZSBub3cgKGZvciBiMCksIG9uZSBm b3IgYjIKKwkJICogKHRoYXQgd291bGQgYXZvaWQgdGhlID4+IDEpLCBhbmQg b25lIGZvciBiMSAod2l0aCBhbGwgdmFsdWVzCisJCSAqIDw8IDQpLiBIb3dl dmVyIGl0IHdhcyBmZWx0IHRoYXQgaW50cm9kdWNpbmcgdHdvIG1vcmUgdGFi bGVzCisJCSAqIGhhcmRseSBqdXN0aWZ5IHRoZSBnYWluLgorCQkgKgorCQkg KiBUaGUgYjIgc2hpZnQgaXMgdGhlcmUgdG8gZ2V0IHJpZCBvZiB0aGUgbG93 ZXN0IHR3byBiaXRzLgorCQkgKiBXZSBjb3VsZCBhbHNvIGRvIGFkZHJlc3Ni aXRzW2IyXSA+PiAxIGJ1dCBmb3IgdGhlCisJCSAqIHBlcmZvcm1hY2UgaXQg ZG9lcyBub3QgbWFrZSBhbnkgZGlmZmVyZW5jZQorCQkgKi8KKwkJYnl0ZV9h ZGRyID0gKGFkZHJlc3NiaXRzW2IxXSA8PCA0KSArIGFkZHJlc3NiaXRzW2Iw XTsKKwkJYml0X2FkZHIgPSBhZGRyZXNzYml0c1tiMiA+PiAyXTsKKwkJLyog ZmxpcCB0aGUgYml0ICovCisJCWJ1ZltieXRlX2FkZHJdIF49ICgxIDw8IGJp dF9hZGRyKTsKKwkJcmV0dXJuICgxKTsKIAl9Ci0KLQlpZihjb3VudGJpdHMo czAgfCAoKHVpbnQzMl90KXMxIDw8IDgpIHwgKCh1aW50MzJfdClzMiA8PDE2 KSkgPT0gMSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gLUVCQURNU0c7CisJ aWYgKG5yX2JpdHMgPT0gMSkKKwkJcmV0dXJuICgxKTsJLyogZXJyb3IgaW4g ZWNjIGRhdGE7IG5vIGFjdGlvbiBuZWVkZWQgKi8KKwlyZXR1cm4gLTE7CiB9 CisKKyNpZm5kZWYgU1RBTkRBTE9ORQogRVhQT1JUX1NZTUJPTChuYW5kX2Nv cnJlY3RfZGF0YSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVM RV9BVVRIT1IoIlN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0 ZWQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiRnJhbnMgTWV1bGVuYnJvZWtz Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgTkFORCBFQ0Mgc3Vw cG9ydCIpOworI2VuZGlmClNpZ25lZC1vZmYtYnk6IEZyYW5zIE1ldWxlbmJy b2Vrcwo= --0-415199513-1217354338=:23881--