From owner-freebsd-ports@FreeBSD.ORG Wed Sep 1 09:56:11 2004 Return-Path: Delivered-To: freebsd-ports@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B82A516A4CE for ; Wed, 1 Sep 2004 09:56:11 +0000 (GMT) Received: from vsmtp2.tin.it (vsmtp2alice.tin.it [212.216.176.142]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9D30543D60 for ; Wed, 1 Sep 2004 09:56:10 +0000 (GMT) (envelope-from l.pizzira@virgilio.it) Received: from worklab (82.50.21.22) by vsmtp2.tin.it (7.0.027) id 4134B3C80001CD66 for freebsd-ports@freebsd.org; Wed, 1 Sep 2004 11:53:02 +0200 Date: Wed, 1 Sep 2004 11:52:56 +0200 From: Luigi Pizzirani To: freebsd-ports@freebsd.org Message-ID: <20040901115256.1562d3cd@worklab> X-Mailer: Sylpheed-Claws 0.9.12a (GTK+ 1.2.10; i386-portbld-freebsd5.3) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Wed__1_Sep_2004_11_52_56_+0200_DH4peUQqccNZ_Pmi" Subject: proposal of ports X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Sep 2004 09:56:11 -0000 This is a multi-part message in MIME format. --Multipart=_Wed__1_Sep_2004_11_52_56_+0200_DH4peUQqccNZ_Pmi Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi, my name is Luigi . I would like to show you two codes of mine : the first is a spoofed portscanner that uses Antirez ID bug (i.e. incremental ID field of certain TCP/IP stacks of some zombie machine) to forge the source IP address (you can find a paper of this at http://www.securitydate.it/SD2004/ -sorry, it's in Italian, but if you are interested I can translate it- ). Here is an example of this tool: worklab# ./spoofscan -a www.kernel.org -s 62.211.32.82 -l 78 -h 82 -n 6 -t 300000 Stealth Scan by Luigi Pizzirani. Warning!!! This is a stealth portscanner based on the requirements that the host we are using for our spoof has no traffic, has not random IP id and we have all firewalls down. Anyway, being this scanner stealth, it is far from being 100% reliable. Enjoy it. DISCLAIMER!!! IP SPOOFING, AS ANY KIND OF FORGEMENT IS AN ILLEGAL PRACTICE. USE THIS SCANNER ONLY FOR TESTING PURPOSES AND ON YOUR LOCAL AREA NETWORK. IN NO EVENT I CONSIDER MYSELF LIABLE FOR ANY ABUSE OF THIS PROGRAM. Id sequence relative to 62.211.32.82: 564 565 566 567 568 569 It seems that host 62.211.32.82 has no traffic: excellent!!! Id sequence relative to port 78 of host www.kernel.org via 62.211.32.82: 570 571 572 573 574 575 Hmmm...looks like 78 is closed. Id sequence relative to port 79 of host www.kernel.org via 62.211.32.82: 576 577 579 581 583 585 Hmmm...looks like 79 is OPEN. Id sequence relative to port 80 of host www.kernel.org via 62.211.32.82: 594 595 597 599 600 602 Hmmm...looks like 80 is OPEN. Id sequence relative to port 81 of host www.kernel.org via 62.211.32.82: 612 613 614 615 616 617 Hmmm...looks like 81 is closed. Id sequence relative to port 82 of host www.kernel.org via 62.211.32.82: 618 619 620 621 622 623 Hmmm...looks like 82 is closed. Ports of www.kernel.org that look like open: 79(finger), 80(http). worklab# The second one is a tool that uses ARP poisoning that I presented at the MOCA (http://camp.olografix.org) to have a scenario like this: we have a LAN and we want offer connectivity to everyone coming here with his laptop for example. It could happen that our customer has his network parameters already configured to work correctly in his own LAN, but not working here. We can have then this scenario: Customer's host (10.0.0.2/8 and default gateway set to 10.0.0.1) Our LAN (192.168.0.0/24 with real gateway 192.168.0.254). All that we want is that our customer plugs his laptop and join the internet without changing nothing of his network parameters. Here comes this tool installed in my real gw(192.168.0.254) It's a sort of sniffer, because it sniffs broadcast ARP requests for the gateway and answers that the gateway is itself In our example our customer's laptop send this request: arp who-has 10.0.0.1 tell 10.0.0.2 Now our gateway does the following: 1) Sends back this reply to 10.0.0.2: arp reply 10.0.0.1 is-at his_mac_address 2)Create the alias 10.0.0.254 (ARP is not routable so we need one alias for each subnet that is not our one) 3)Sends itself an ARP reply to refresh his ARP cache It is different from proxy arp for two reasons: first it runs in user space, then in this case we can plug machines belonging to whatever subnet, while proxy arp is used in the case of only two different ones. Hoping that this stuffs may be of our interest I am looking forward to have some answers and comments about this codes and the eventual inclusion of them in the ports collection. Best regards Luigi (sviat). --Multipart=_Wed__1_Sep_2004_11_52_56_+0200_DH4peUQqccNZ_Pmi Content-Type: application/octet-stream; name="spoofscan.c" Content-Disposition: attachment; filename="spoofscan.c" Content-Transfer-Encoding: base64 LyoKICogJElkOiBzcG9vZnNjYW4uYyx2IDAuOSAyMDA0LzAzLzA2IDE3OjI5OjE3IHN2aWF0IEV4 cCAkCiAqIDxzcG9vZmVkIHN0ZWFsdGggcG9ydHNjYW5uZXI+CiAqCiAqIENvcHlyaWdodCAoYykg MjAwMiBMdWlnaSBQaXp6aXJhbmkgPGwucGl6emlyYUB2aXJnaWxpby5pdD4KICoKICogQWxsIHJp Z2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICogbWV0OiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAogKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIDIuCiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKICogdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv bgogKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv bi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAogKiBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQVJFCiAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCiAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IKICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkKICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRgogKiBTVUNIIERBTUFHRS4KICoKICoKICovCgojaW5jbHVkZQk8 c3lzL3R5cGVzLmg+CiNpbmNsdWRlIAk8c3lzL3NvY2tldC5oPgojaW5jbHVkZSAJPG5ldGluZXQv aW4uaD4KI2luY2x1ZGUgCTxuZXRpbmV0L2luX3N5c3RtLmg+CgojaWZuZGVmIAlfX1VTRV9CU0QK I2RlZmluZSAJX19VU0VfQlNECiNlbmRpZgoKI2luY2x1ZGUJIDxuZXRpbmV0L2lwLmg+CgojaWZu ZGVmIAlfX0ZBVk9SX0JTRAojZGVmaW5lIAlfX0ZBVk9SX0JTRAojZW5kaWYKCiNpbmNsdWRlCTxu ZXRpbmV0L3RjcC5oPgojaW5jbHVkZQk8bmV0aW5ldC9pcF9pY21wLmg+CiNpbmNsdWRlCTxhcnBh L2luZXQuaD4KI2luY2x1ZGUJPG5ldGRiLmg+CiNpbmNsdWRlCTxzdGRpby5oPgojaW5jbHVkZQk8 c3RkbGliLmg+CiNpbmNsdWRlCTxzdHJpbmcuaD4KI2luY2x1ZGUJPHVuaXN0ZC5oPgoKI2RlZmlu ZSAJTUFYTlVNUE9SVFMgCTY1NTM1CgovKiBwc2V1ZG90Y3Agc3RydWN0dXJlIHRvIGNhbGN1bGF0 ZSB0Y3AgY2hlY2tzdW0gYXMgc3BlY2lmaWVkIGluIFJGQyA3OTMgKi8Kc3RydWN0IHBzZXVkbyB7 Cgl1aW50MzJfdCBzYWRkcjsKCXVpbnQzMl90IGRhZGRyOwoJY2hhciB1bnVzZWQ7CgljaGFyIHBy b3RvOwoJdWludDE2X3QgbGVuZ3RoOwp9OwoKY2hhciBwYWNrZXRbMjU2XSwgcGFja2V0MlsyNTZd LCBwYWNrZXQzWzI1Nl0sIGJ1ZlsyNTZdOwpzdHJ1Y3QgaXAgKmlwID0gKHN0cnVjdCBpcCAqKSBw YWNrZXQ7IApzdHJ1Y3QgdGNwaGRyICp0Y3AgPSAoc3RydWN0IHRjcGhkciAqKSAocGFja2V0ICsg c2l6ZW9mKHN0cnVjdCBpcCkpOwpzdHJ1Y3QgcHNldWRvICpwc2V1ZG8gPSAoc3RydWN0IHBzZXVk byAqKSBwYWNrZXQzOwpzdHJ1Y3QgaXAgKmlwMiA9IChzdHJ1Y3QgaXAgKikgcGFja2V0MjsKc3Ry dWN0IGljbXAgKmljbXAgPSAoc3RydWN0IGljbXAgKikgKHBhY2tldDIgKyBzaXplb2Yoc3RydWN0 IGlwKSk7CmNoYXIgKmRhdGEgPSBwYWNrZXQgKyBzaXplb2Yoc3RydWN0IGlwKSArIHNpemVvZihz dHJ1Y3QgdGNwaGRyKTsKY2hhciAqZGF0YTIgPSBwYWNrZXQyICsgc2l6ZW9mKHN0cnVjdCBpcCkg KyBzaXplb2Yoc3RydWN0IGljbXApOwpzdHJ1Y3QgaXAgKmlwcmVjdiA9IChzdHJ1Y3QgaXAgKikg YnVmOwoKdm9pZAkJdXNhZ2UoY2hhciAqKTsKdm9pZAkJcHJpbnRfc2VydmljZSh1aW50MTZfdCk7 CnVpbnQxNl90CWNoZWNrc3VtKHVpbnQxNl90KiwgaW50KTsKdWludDE2X3QJc2VuZF9pY21wKGlu dCwgaW50LCBzdHJ1Y3QgaXAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW4sIHN0cnVjdCBzb2NrYWRkcl9p bik7CnZvaWQgCQlzZW5kX3RjcChpbnQsIHN0cnVjdCBpcCosIHN0cnVjdCBzb2NrYWRkcl9pbiwg c3RydWN0IHNvY2thZGRyX2luLCBpbnQpOwppbnQgCQljaGVja190cmFmZmljKGludCwgaW50LCBz dHJ1Y3Qgc29ja2FkZHJfaW4sIHN0cnVjdCBzb2NrYWRkcl9pbiwgaW50LCBjaGFyKik7CgppbnQK bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCWludCBzLCBzMiwgczMsIGNoLCBvcGVuX3Bv cnRzW01BWE5VTVBPUlRTXTsKCXJlZ2lzdGVyIGludCBpLCBqLCBoLCBrOwoJdWludDE2X3QgaWRb MTAwXSwgYVsxMDBdLCBiWzEwMF07CglpbnQgb24gPSAxOwoJaW50ICpwID0gb3Blbl9wb3J0czsK CXJlZ2lzdGVyIGludCB0ID0gMDsJCgljb25zdCBpbnQgKm9wdHZhbCA9ICZvbjsKCWNoYXIgKnRh cmdldF9ob3N0LCAqc2lsZW50X2hvc3QsICpsb3dfcG9ydCwgKmhpZ2hfcG9ydCwgKm51bV9wYWNr ZXRzLCAqdGltZW91dDsKCXN0cnVjdCBob3N0ZW50ICpob3N0ZW50LCAqaG9zdGVudDI7CglzdHJ1 Y3Qgc29ja2FkZHJfaW4gc2luLCBzaW4yLCBzaW4zOwoKCSAvKiBTZWN1cml0eSAqLwoKICAgICAg ICBpZiAoZ2V0dWlkKCkgIT0gZ2V0ZXVpZCgpKSB7CiAgICAgICAgICAgICAgICBwdXRzKCJTdGVh bHRoIFNjYW4gZG9lc24ndCBydW4gd2l0aCArcyBiaXQgc2V0LiIpOwoJCWV4aXQoMSk7Cgl9CgoJ aWYgKGdldHVpZCgpICE9IDApIHsgCiAgICAgICAgICAgICAgICBwdXRzKCJTdGVhbHRoIFNjYW4g bXVzdCBydW4gYXMgcm9vdC4iKTsKCQlleGl0KDEpOwoJfQkKCQoJcHV0cygiXG5TdGVhbHRoIFNj YW4gYnkgTHVpZ2kgUGl6emlyYW5pLlxuIik7CglwdXRzKCJXYXJuaW5nISEhIFRoaXMgaXMgYSBz dGVhbHRoIHBvcnRzY2FubmVyIGJhc2VkIG9uIHRoZSByZXF1aXJlbWVudHMgdGhhdCB0aGUgaG9z dCB3ZSBhcmUgdXNpbmcgZm9yIG91ciBzcG9vZiIpOwoJcHV0cygiaGFzIG5vIHRyYWZmaWMsIGhh cyBub3QgcmFuZG9tIElQIGlkIGFuZCB3ZSBoYXZlIGFsbCBmaXJld2FsbHMgZG93bi4gQW55d2F5 LCBiZWluZyB0aGlzIHNjYW5uZXIgc3RlYWx0aCwgaXQiKTsKIAlwdXRzKCJpcyBmYXIgZnJvbSBi ZWluZyAxMDAlIHJlbGlhYmxlLiBFbmpveSBpdC5cbiIpOwoJcHV0cygiRElTQ0xBSU1FUiEhISBJ UCBTUE9PRklORywgQVMgQU5ZIEtJTkQgT0YgRk9SR0VNRU5UIElTIEFOIElMTEVHQUwgUFJBQ1RJ Q0UuIFVTRSIpOwoJcHV0cygiVEhJUyBTQ0FOTkVSIE9OTFkgRk9SIFRFU1RJTkcgUFVSUE9TRVMg QU5EIE9OIFlPVVIgTE9DQUwgQVJFQSBORVRXT1JLLiBJTiBOTyBFVkVOVCIpOwoJcHV0cygiSSBD T05TSURFUiBNWVNFTEYgTElBQkxFIEZPUiBBTlkgQUJVU0UgT0YgVEhJUyBQUk9HUkFNLlxuIik7 CgoJaWYgKGFyZ2MgIT0gMTMpCgkJdXNhZ2UoYXJndlswXSk7CgoJd2hpbGUgKCAoY2ggPSBnZXRv cHQoYXJnYywgYXJndiwgImE6czpsOmg6bjp0OiIpKSAhPSAtMSkgCiAgICAgICAgICAgICAgICBz d2l0Y2goY2gpIHsKICAgICAgICAgICAgICAgIGNhc2UgJ2EnOgogICAgICAgICAgICAgICAgICAg ICAgICB0YXJnZXRfaG9zdCA9IGFyZ3Zbb3B0aW5kIC0gMV07CiAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOyAgCgogICAgICAgICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICAgICAg ICAgICAgIHNpbGVudF9ob3N0ID0gYXJndltvcHRpbmQgLSAxXTsKCQkJYnJlYWs7CiAgICAgICAg ICAgICAgICBjYXNlICdsJzoKICAgICAgICAgICAgICAgICAgICAgICAgbG93X3BvcnQgPSBhcmd2 W29wdGluZCAtIDFdOwoJCQlicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgogICAgICAg ICAgICAgICAgICAgICAgICBoaWdoX3BvcnQgPSBhcmd2W29wdGluZCAtIDFdOwoJCQlicmVhazsK CQljYXNlICduJzogCgkJCW51bV9wYWNrZXRzID0gYXJndltvcHRpbmQgLSAxXTsKCQkJaWYgKGF0 b2kobnVtX3BhY2tldHMpID4gMTAwKSB7CgkJCQlwdXRzKCJZb3UgY2Fubm90IHNlbmQgbW9yZSB0 aGFuIDEwMCBwYWNrZXRzLlxuIik7CgkJCQlleGl0KDEpOwoJCQl9IAoJCQlicmVhazsKICAgICAg ICAgICAgICAgIGNhc2UgJ3QnOgogICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gYXJn dltvcHRpbmQgLSAxXTsKCQkJYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICc/JzoKICAgICAg ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UoYXJndlswXSk7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg IH0KCgkqcCA9IDA7CgoJaWYgKCAocyA9IHNvY2tldChQRl9JTkVULCBTT0NLX1JBVywgSVBQUk9U T19SQVcpKSA8IDApIHsKICAgICAgICAgICAgICAgIHBlcnJvcigic29ja2V0Iik7CiAgICAgICAg ICAgICAgICBleGl0KDEpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAoczIgPSBzb2NrZXQoUEZf SU5FVCwgU09DS19SQVcsIElQUFJPVE9fUkFXKSkgPCAwKSB7CiAgICAgICAgICAgICAgICBwZXJy b3IoInNvY2tldCIpOwogICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICB9CgoJIGlmICgg KHMzID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfUkFXLCBJUFBST1RPX0lDTVApKSA8IDApIHsKICAg ICAgICAgICAgICAgIHBlcnJvcigic29ja2V0Iik7CiAgICAgICAgICAgICAgICBleGl0KDEpOwog ICAgICAgIH0KCglzZXRzb2Nrb3B0KHMsIElQUFJPVE9fSVAsIElQX0hEUklOQ0wsIG9wdHZhbCwg c2l6ZW9mKG9uKSk7CglzZXRzb2Nrb3B0KHMyLCBJUFBST1RPX0lQLCBJUF9IRFJJTkNMLCBvcHR2 YWwsIHNpemVvZihvbikpOwoKCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc2luKSk7CgltZW1zZXQo JnNpbjIsIDAsIHNpemVvZihzaW4pKTsKCW1lbXNldCgmc2luMywgMCwgc2l6ZW9mKHNpbikpOwoK CW1lbXNldChpcCwgMCwgc2l6ZW9mKHN0cnVjdCBpcCkpOwoJbWVtc2V0KGlwMiwgMCwgc2l6ZW9m KHN0cnVjdCBpcCkpOwoKCW1lbXNldChpY21wLCAwLCBzaXplb2Yoc3RydWN0IGljbXApKTsKCglt ZW1zZXQoaXByZWN2LCAwLCBzaXplb2Yoc3RydWN0IGlwKSk7CgoJc2luLnNpbl9mYW1pbHkgPSBz aW4yLnNpbl9mYW1pbHkgPSBzaW4zLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwoKCSAvKiB0YXJnZXQg aG9zdCdzIGlwIGFkZHJlc3MgKi8KICAgICAgICBpZiAoIChob3N0ZW50ID0gZ2V0aG9zdGJ5bmFt ZSh0YXJnZXRfaG9zdCkpKSAKICAgICAgICAgICAgICAgIG1lbWNweSAoJnNpbi5zaW5fYWRkciwg aG9zdGVudC0+aF9hZGRyLCBob3N0ZW50LT5oX2xlbmd0aCk7CiAgICAgICAgZWxzZSBpZiAoIChp bmV0X3B0b24oQUZfSU5FVCwgdGFyZ2V0X2hvc3QsICZzaW4uc2luX2FkZHIpKSAhPSBJTkFERFJf Tk9ORSkgewogICAgICAgICAgICAgICAgaGVycm9yKCJnZXRob3N0YnluYW1lIik7ICAKICAgICAg ICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgfQoKICAgICAgICAvKiBzaWxlbnQgaG9zdCdzIGlw IGFkZHJlc3MgKi8KICAgICAgICBpZiAoIChob3N0ZW50MiA9IGdldGhvc3RieW5hbWUoc2lsZW50 X2hvc3QpKSkgCiAgICAgICAgICAgICAgICBtZW1jcHkgKCZzaW4yLnNpbl9hZGRyLCBob3N0ZW50 Mi0+aF9hZGRyLCBob3N0ZW50Mi0+aF9sZW5ndGgpOwogICAgICAgIGVsc2UgaWYgKCAoaW5ldF9w dG9uKEFGX0lORVQsIHNpbGVudF9ob3N0LCAmc2luMi5zaW5fYWRkcikpICE9IElOQUREUl9OT05F KSB7CiAgICAgICAgICAgICAgICBoZXJyb3IoImdldGhvc3RieW5hbWUiKTsKICAgICAgICAgICAg ICAgIGV4aXQoMSk7Cgl9CgoJc2luMy5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5Z KTsgIC8qbXkgb3duIGlwIGFkZHJlc3MgKi8KCglpZiAoY2hlY2tfdHJhZmZpYyhzMiwgczMsIHNp bjMsIHNpbjIsIGF0b2kobnVtX3BhY2tldHMpLCBzaWxlbnRfaG9zdCkpCgkJZXhpdCgxKTsgCgoJ Lyogc2VuZHMgaWNtcCBwYWNrZXRzIHRvIHRoZSBkdW1iIGhvc3QgYW5kIHRjcCBwYWNrZXRzIHdp dGggU1lOIGZsYWcgc2V0IHRvIHRoZSB0YXJnZXQgaG9zdCAqLwogCWZvciAoaSA9IGF0b2kobG93 X3BvcnQpOyBpIDw9IGF0b2koaGlnaF9wb3J0KTsgaSsrKSB7CgkJdXNsZWVwKGF0b2kodGltZW91 dCkpOwoKCQlwcmludGYoIklkIHNlcXVlbmNlIHJlbGF0aXZlIHRvIHBvcnQgJWQgb2YgaG9zdCAl cyB2aWEgJXM6XHRcdCIsIGksIHRhcmdldF9ob3N0LCBzaWxlbnRfaG9zdCk7CgoJCXRjcC0+dGhf ZHBvcnQgPSBzaW4uc2luX3BvcnQgPSBzaW4yLnNpbl9wb3J0ID0gKHVpbnQxNl90KSBpOwoKCQlm b3IgKGogPSAwOyBqIDwgYXRvaShudW1fcGFja2V0cyk7IGorKykgewoJCQlpY21wLT5pY21wX3Nl cSA9IGh0b25zKCh1aW50MTZfdCkgaik7CgkJCWlkW2pdID0gc2VuZF9pY21wKHMyLCBzMyAsIGlw Miwgc2luMywgc2luMik7CgkJCXNlbmRfdGNwKHMsIGlwLCAgc2luMiwgc2luLCBpKTsKCQkJcHJp bnRmKCIlZFx0IiwgaWRbal0pOwoJCX0KCQkKCQlrID0gMTsKCQkKCQlmb3IgKGogPSAwOyBqIDwg YXRvaShudW1fcGFja2V0cykgLSAxOyBqKyspIAogICAgICAgIAkgICAgICAgIGFbal0gPSBpZFtq ICsgMV0gLSBpZFtqXTsKCgkJZm9yIChqID0gMDsgaiA8IGF0b2kobnVtX3BhY2tldHMpIC0gMjsg aisrKSB7CgkJCWJbal0gPSAoYVtqICsgMV0gPT0gYVtqXSk7CgkJCWsgPSAoayAmJiBiW2pdKTsK CQl9CgkKCS8qIGlmIGlkIGZpZWxkIGluY3JlYXNlcyBjb25zdGFudGx5IGFuZCB0aGUgc2lsZW50 IGhvc3QgaGFzIHN0aWxsIG5vIHRyYWZmaWMgdGhlIHBvcnQgbXVzdCBiZSBjbG9zZWQsIG90aGVy d2lzZSBpdCBtdXN0IGJlIG9wZW4gKi8KCgkJZm9yIChqID0gMDsgaiA8IGF0b2kobnVtX3BhY2tl dHMpIC0gMTsgaisrICkgCiAgICAgICAgICAgICAgIAkJaWYgKCFpZFtqXSkgewogICAgICAgICAg ICAgICAgICAgICAgICAJcHV0cygiXG5JZCBmaWVsZCBtdXN0IG5vdCBiZSAwLiBQbGVhc2UgdHJ5 IGFub3RoZXIgaG9zdC5cbiIpOwoJCQkJcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAJfQoKICAg ICAgICAgICAgICAgaWYgKCFrKSB7IAoJCQl1c2xlZXAoYXRvaSh0aW1lb3V0KSk7CgoJCQlmb3Ig KGggPSAwOyBoIDwgYXRvaShudW1fcGFja2V0cyk7IGgrKykgCiAgICAgICAgICAgICAgICAgICAg ICAgCQlpZFtoXSA9IHNlbmRfaWNtcChzMiwgczMsIGlwMiwgc2luMywgc2luMik7CgoJCQlrID0g MTsKCQkJCQoJCQlmb3IgKGogPSAwOyBqIDwgYXRvaShudW1fcGFja2V0cykgLSAxOyBqKyspIAog CSAgICAgICAgICAgICAgICAgICAgICAgYVtqXSA9IGlkW2ogKyAxXSAtIGlkW2pdOwoKCQkJZm9y IChqID0gMDsgaiA8IGF0b2kobnVtX3BhY2tldHMpIC0gMjsgaisrKSB7CiAgICAgICAgICAgICAg IAkJICAgICAgIGJbal0gPSAoYVtqICsgMV0gPT0gYVtqXSk7CiAgICAgICAgICAgICAgICAJICAg ICAgIGsgPSAoayAmJiBiW2pdKTsKCQkJfQoKCQkJaWYgKGspIHsKCQkJCXByaW50ZigiXGFIbW1t Li4ubG9va3MgbGlrZSAlZCBpcyBPUEVOLlxuIiwgaSk7CgkJCQlvcGVuX3BvcnRzW3QrK10gPSBp OwoJCQl9CgkJCWVsc2UgewoJCQkJcHJpbnRmKCJcbkhvc3QgJXMgbm93IGhhcyB0b28gbXVjaCB0 cmFmZmljLiBQbGVhc2UgY2hhbmdlIGl0IG9yIHJldHJ5IGxhdGVyLlN0b3AgYXQgcG9ydCAlZC5c biIsIHNpbGVudF9ob3N0LCBpKTsKCQkJCXByaW50ZigiXG5Qb3J0cyBvZiAlcyB0aGF0IGxvb2sg bGlrZSBvcGVuOlx0IiwgdGFyZ2V0X2hvc3QpOwoJCQkJd2hpbGUgKCpwKQogICAgICAgICAgICAg ICAgCQkJcHJpbnRfc2VydmljZSgodWludDE2X3QpICpwKyspOwoJCQkJcHV0cygiXGJcYi4iKTsK ICAgICAgCQkgICAgICAgICAJZXhpdCgxKTsKCQkJfQoJCX0gCgkJZWxzZSAKCQkJcHJpbnRmKCJI bW1tLi4ubG9va3MgbGlrZSAlZCBpcyBjbG9zZWQuXG4iLCBpKTsKCX0KCQoJcHJpbnRmKCJcblBv cnRzIG9mICVzIHRoYXQgbG9vayBsaWtlIG9wZW46XHQiLCB0YXJnZXRfaG9zdCk7CgoJd2hpbGUg KCpwKSAKCQlwcmludF9zZXJ2aWNlKCh1aW50MTZfdCkgKnArKyk7CgkKCXB1dHMoIlxiXGIuIik7 CgoJY2xvc2Uocyk7CgljbG9zZShzMik7CgljbG9zZShzMyk7CgoJZXhpdCgwKTsKfQkKCnZvaWQK dXNhZ2UoY2hhciAqaG93KQp7CiAgICAgICAgcHJpbnRmKCJVc2FnZTogJXMgLWEgdGFyZ2V0X2hv c3QgLXMgc2lsZW50X2hvc3QgLWwgbG93X3BvcnQgLWggaGlnaF9wb3J0IC1uIG51bV9wYWNrZXRz IC10IHRpbWVvdXQoaW4gbWljcm9zZWNvbmRzKS5cbiIsIGhvdyk7CiAgICAgICAgZXhpdCgxKTsK fQoKdm9pZApwcmludF9zZXJ2aWNlKHVpbnQxNl90IHBvcnQpCnsKICAgICAgICBzdHJ1Y3Qgc2Vy dmVudCAqc2VydmVudDsKCiAgICAgICAgaWYgKCAoc2VydmVudCA9IGdldHNlcnZieXBvcnQoaHRv bnMocG9ydCksICJ0Y3AiKSkpCiAgICAgICAgICAgICAgICBwcmludGYoIiVkKCVzKSwgIiwgcG9y dCwgc2VydmVudC0+c19uYW1lKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwcmludGYo IiVkLCAiLCBwb3J0KTsKfQoKICAgICAgICAvKiB1c3VhbCBjaGVja3N1bSAqLwp1aW50MTZfdApj aGVja3N1bSh1aW50MTZfdCAqYWRkciwgaW50IGxlbikKewogICAgICAgIHJlZ2lzdGVyIGludCBz dW0gPSAwOwogICAgICAgIHVpbnQxNl90IGFuc3dlciA9IDA7CiAgICAgICAgcmVnaXN0ZXIgdWlu dDE2X3QgKncgPSBhZGRyOwogICAgICAgIHJlZ2lzdGVyIGludCBubGVmdCA9IGxlbjsKICAgICAg ICB3aGlsZSAobmxlZnQgPiAxKSB7CiAgICAgICAgICAgICAgICBzdW0gKz0gKncrKzsKICAgICAg ICAgICAgICAgIG5sZWZ0IC09IDI7CiAgICAgICAgfQoKICAgICAgICBpZiAobmxlZnQgPT0gMSkg ewogICAgICAgICAgICAgICAgKih1aW50MTZfdCAqKSAoJmFuc3dlcikgPSAqKHVpbnQxNl90ICop IHc7CiAgICAgICAgICAgICAgICBzdW0gKz0gYW5zd2VyOwogICAgICAgIH0KCiAgICAgICAgLyog YWRkIGJhY2sgY2Fycnkgb3V0cyBmcm9tIHRvcCAxNiBiaXRzIHRvIGxvdyAxNiBiaXRzICovCiAg ICAgICAgc3VtID0gKHN1bSA+PiAxNikgKyAoc3VtICYgMHhmZmZmKTsgLyogYWRkIGhpIDE2IHRv IGxvdyAxNiAqLwogICAgICAgIHN1bSArPSAoc3VtID4+IDE2KTsgLyogYWRkIGNhcnJ5ICovCiAg ICAgICAgYW5zd2VyID0gfnN1bTsgLyogdHJ1bmNhdGUgdG8gMTYgYml0cyAqLwogICAgICAgIHJl dHVybiAoYW5zd2VyKTsKfQoKLyogc2VuZHMgaWNtcCBwYWNrZXRzIHRvIHNpbGVudCBob3N0ICov CnVpbnQxNl90CnNlbmRfaWNtcChpbnQgc2VuZHNvY2ssIGludCByZWN2c29jaywgc3RydWN0IGlw ICppcCwgc3RydWN0IHNvY2thZGRyX2luIG15c2luLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gZHVtYnNp bikKewogICAgICAgIGludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CiAgICAg ICAgcmVnaXN0ZXIgaW50IGk7CiAgICAgICAgdWludDE2X3QgaWQ7CgogICAgICAgIGlwLT5pcF9o bCA9IDU7CiAgICAgICAgaXAtPmlwX3YgPSA0OwogICAgICAgIGlwLT5pcF90b3MgPSAwOwogICAg ICAgIGlwLT5pcF9sZW4gPSBzaXplb2Yoc3RydWN0IGlwKSArIHNpemVvZihzdHJ1Y3QgaWNtcCkg KyA0ODsKICAgICAgICBpcC0+aXBfaWQgPSBodG9ucygodWludDE2X3QpIHJhbmRvbSgpKTsKICAg ICAgICBpcC0+aXBfb2ZmID0gIDA7CiAgICAgICAgaXAtPmlwX3R0bCA9IDI1NTsKICAgICAgICBp cC0+aXBfcCA9IElQUFJPVE9fSUNNUDsKICAgICAgICBpcC0+aXBfc3VtID0gMDsKICAgICAgICBp cC0+aXBfc3JjID0gbXlzaW4uc2luX2FkZHI7CiAgICAgICAgaXAtPmlwX2RzdCA9IGR1bWJzaW4u c2luX2FkZHI7CiAKICAgICAgICBpY21wLT5pY21wX3R5cGUgPSA4OyAvKiBlY2hvIHJlcXVlc3Qg Ki8KICAgICAgICBpY21wLT5pY21wX2NvZGUgPSAwOwogICAgICAgIGljbXAtPmljbXBfY2tzdW0g PSAwOwogICAgICAgIGljbXAtPmljbXBfaWQgPSBodG9ucygodWludDE2X3QpIHJhbmRvbSgpKTsg LyogdGh4IGF3Z24gZm9yIGhhdmluZyB0b2xkIG1lIGhvdyB0byBmaWxsIHRoaXMgZmllbGQgKi8K IAogICAgICAgIC8qIHRoeCBhZ2FpbiwgbWFuIGZvciB0aGlzIHRvbyAqLwogICAgICAgIGZvciAo aSA9IDA7IGkgPCA0ODsgaSsrKQogICAgICAgICAgICAgICAgZGF0YTJbaV0gPSBpICsgODsKICAg ICAgICAKICAgICAgICBpY21wLT5pY21wX2Nrc3VtID0gY2hlY2tzdW0oKHVpbnQxNl90ICopIGlj bXAsIChzaXplb2Yoc3RydWN0IGljbXApICsgNDgpICYgfjEpOwogICAgICAgICAgICAgICAgCiAg ICAgICAgc2VuZHRvKHNlbmRzb2NrLCBwYWNrZXQyLCBpcC0+aXBfbGVuLCAwLCAoc3RydWN0IHNv Y2thZGRyICopICZkdW1ic2luLCBzaXplKTsKICAgICAgICByZWN2ZnJvbShyZWN2c29jaywgYnVm LCBzaXplb2Yoc3RydWN0IGlwKSArIHNpemVvZihzdHJ1Y3QgaWNtcCkgKyBzaXplb2YoZGF0YSks IDAsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmR1bWJzaW4sICZzaXplKTsKICAgICAgICBpZCA9IG50 b2hzKGlwcmVjdi0+aXBfaWQpOwogIAogICAgICAgIHJldHVybiAoaWQpOwp9CgovKiBzZW5kcyB0 Y3Agc3Bvb2ZlZCBwYWNrZXRzIHRvIHRhcmdldCBob3N0IHdpdGggc2lsZW50J3MgaG9zdCBzb3Vy Y2UgaXAgKi8Kdm9pZApzZW5kX3RjcChpbnQgc29jaywgc3RydWN0IGlwICppcCwgc3RydWN0IHNv Y2thZGRyX2luIGR1bWJzaW4sIHN0cnVjdCBzb2NrYWRkcl9pbiB0YXJnZXRzaW4sIGludCBpKQp7 CiAgICAgICAgbWVtc2V0KHBzZXVkbywgMCwgc2l6ZW9mKHN0cnVjdCBwc2V1ZG8pKTsKCiAgICAg ICAgaXAtPmlwX2hsID0gNTsKICAgICAgICBpcC0+aXBfdiA9IDQ7CiAgICAgICAgaXAtPmlwX3Rv cyA9IDA7CiAgICAgICAgaXAtPmlwX2xlbiA9IHNpemVvZihzdHJ1Y3QgaXApICsgc2l6ZW9mKHN0 cnVjdCB0Y3BoZHIpOwogICAgICAgIGlwLT5pcF9pZCA9IGh0b25zKCh1aW50MTZfdCkgcmFuZG9t KCkpOwogICAgICAgIGlwLT5pcF9vZmYgPSAgMDsKICAgICAgICBpcC0+aXBfdHRsID0gMjU1Owog ICAgICAgIGlwLT5pcF9wID0gSVBQUk9UT19UQ1A7CiAgICAgICAgaXAtPmlwX3N1bSA9IDA7CiAg ICAgICAgaXAtPmlwX3NyYyA9IGR1bWJzaW4uc2luX2FkZHI7CiAgICAgICAgaXAtPmlwX2RzdCA9 IHRhcmdldHNpbi5zaW5fYWRkcjsKCiAgICAgICAgcHNldWRvLT5zYWRkciA9IGlwLT5pcF9zcmMu c19hZGRyOwogICAgICAgIHBzZXVkby0+ZGFkZHIgPSBpcC0+aXBfZHN0LnNfYWRkcjsKICAgICAg ICBwc2V1ZG8tPnVudXNlZCA9IDA7CiAgICAgICAgcHNldWRvLT5wcm90byA9IElQUFJPVE9fVENQ OwogICAgICAgIHBzZXVkby0+bGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKTsK CiAgICAgICAgdGNwLT50aF9zcG9ydCA9IGh0b25zKHJhbmQoKSk7CiAgICAgICAgdGNwLT50aF9k cG9ydCA9IGh0b25zKCh1aW50MTZfdClpKTsKICAgICAgICB0Y3AtPnRoX3NlcSA9IGh0b25sKHJh bmRvbSgpKTsKICAgICAgICB0Y3AtPnRoX2FjayA9IDA7CiAgICAgICAgdGNwLT50aF9vZmYgPSA1 OwogICAgICAgIHRjcC0+dGhfZmxhZ3MgPSBUSF9TWU47CiAgICAgICAgdGNwLT50aF93aW4gPSBo dG9ucyg2NTUzNSk7CiAgICAgICAgdGNwLT50aF9zdW0gPSAwOwogICAgICAgIHRjcC0+dGhfdXJw ID0wOwoKICAgICAgICBtZW1jcHkocGFja2V0MywgcHNldWRvLCBzaXplb2Yoc3RydWN0IHBzZXVk bykpOwogICAgICAgIG1lbWNweShwYWNrZXQzICsgc2l6ZW9mKHN0cnVjdCBwc2V1ZG8pLCB0Y3As IHNpemVvZihzdHJ1Y3QgdGNwaGRyKSk7CiAgICAgICAgbWVtc2V0KHBhY2tldDMgKyBzaXplb2Yo c3RydWN0IHBzZXVkbykgKyBzaXplb2Yoc3RydWN0IHRjcGhkciksIDAsIDEyKTsKCiAgICAgICAg dGNwLT50aF9zdW0gPSBjaGVja3N1bSgodWludDE2X3QgKikgcGFja2V0MywgKHNpemVvZihzdHJ1 Y3QgcHNldWRvKSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSArIDEyKSAmIH4xKTsKCiAgICAgICAg c2VuZHRvKHNvY2ssIHBhY2tldCwgaXAtPmlwX2xlbiwgMCwgKHN0cnVjdCBzb2NrYWRkciAqKSAm dGFyZ2V0c2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Cn0KCi8qIHZlcmlmaWVzIGlm IHRoZSBzaWxlbnQgaG9zdCBpcyByZWFsbHkgc2lsZW50OikgKi8KaW50CmNoZWNrX3RyYWZmaWMo aW50IHNlbmRzb2NrLCBpbnQgcmVjdnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9pbiBteXNpbiwgc3Ry dWN0IHNvY2thZGRyX2luIGR1bWJzaW4sIGludCBucGFjaywgY2hhciogaG9zdCkKeyAgIAogICAg ICAgIGludCBrOwogICAgICAgIHJlZ2lzdGVyIGludCBpOwogICAgICAgIHVpbnQxNl90IGlkWzEw MF0sIGFbMTAwXSwgYlsxMDBdOwogICAgICAgIAogICAgICAgIHByaW50ZigiSWQgc2VxdWVuY2Ug cmVsYXRpdmUgdG8gJXM6XHRcdCIsIGhvc3QpOwoKICAgICAgICBrID0gMTsKICAgICAgICAKICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgbnBhY2s7IGkrKykgewogICAgICAgICAgICAgICAgaWNtcC0+ aWNtcF9zZXEgPSBodG9ucygodWludDE2X3QpaSk7CiAgICAgICAgICAgICAgICBpZFtpXSA9IHNl bmRfaWNtcChzZW5kc29jaywgcmVjdnNvY2ssIGlwMiwgbXlzaW4sIGR1bWJzaW4pOwogICAgICAg ICAgICAgICAgcHJpbnRmKCIlZFx0IiwgaWRbaV0pOwogICAgICAgIH0KICAgICAgICAKICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgbnBhY2sgLSAxOyBpKyspIAogICAgICAgICAgICAgICAgYVtpXSA9 IGlkW2kgKyAxXSAtIGlkW2ldOwoKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnBhY2sgLSAyOyBp KyspIHsgCiAgICAgICAgICAgICAgICBiW2ldID0gKGFbaSArIDFdID09IGFbaV0pOwogICAgICAg ICAgICAgICAgayA9ICAoayAmJiBiW2ldKTsKICAgICAgICB9CgogICAgICAgIGlmICghaWRbaV0p IHsKICAgICAgICAgICAgICAgIHB1dHMoIlxuSWQgZmllbGQgbXVzdCBub3QgYmUgMC4gUGxlYXNl IHRyeSBhbm90aGVyIGhvc3QuXG4iKTsKICAgICAgICAgICAgICAgIHJldHVybiAoMSk7CiAgICAg ICAgfQoKICAgICAgICBpZiAoaykgewogICAgICAgICAgICAgICAgcHJpbnRmKCJcbkl0IHNlZW1z IHRoYXQgaG9zdCAlcyBoYXMgbm8gdHJhZmZpYzogZXhjZWxsZW50ISEhXG5cbiIsIGhvc3QpOwog ICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAg ICAgICAgICAgICBwcmludGYoIlxuSG9zdCAlcyBoYXMgdG9vIG11Y2ggdHJhZmZpYzogcGxlYXNl IHRyeSBhbm90aGVyIG9uZS5cblxuIiwgaG9zdCk7CiAgICAgICAgICAgICAgICByZXR1cm4gKDEp OwogICAgICAgIH0KfQoJCg== --Multipart=_Wed__1_Sep_2004_11_52_56_+0200_DH4peUQqccNZ_Pmi Content-Type: application/octet-stream; name="sasp.c" Content-Disposition: attachment; filename="sasp.c" Content-Transfer-Encoding: base64 LyoKKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQKKiAgICAgICAgTHVpZ2kgUGl6emlyYW5pIFZp YSBNYXNzYXJlbnRpLCAzOTAvYyA0MDEzOCBCb2xvZ25hIChJdGFseSkgPGwucGl6emlyYUB2aXJn aWxpby5pdD4gCiogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKgoqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAoqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwoqIGFyZSBtZXQ6CiogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgYXMKKiAgICB0aGUgZmlyc3QgbGlu ZXMgb2YgdGhpcyBmaWxlIHVubW9kaWZpZWQuCiogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl CiogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlIGRpc3RyaWJ1dGlvbi4KKgoqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgJSV5b3Vy X25hbWVfaGVyZSUlIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U SUVTCiogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4KKiBJTiBOTyBFVkVOVCBTSEFMTCAlJXlvdXJfbmFtZV9oZXJl JSUgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKiBJTkNJREVOVEFMLCBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsgTE9TUyBPRiBVU0UsCiogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCiogVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAoqIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRgoqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuIAoqCiogICAgICAgICRpZCBzYXNwLmMsdiAwLjEgMjAwNC8wOC8z MCAxNDoxNToxNyBzdmlhdCBFeHAgJCAKKi8KCiNkZWZpbmUgICAgICAgICBfQlNEX1NPVVJDRSAg ICAgMQoKI2luY2x1ZGUgICAgICAgIDxwY2FwLmg+CiNpbmNsdWRlICAgICAgICA8bGlibmV0Lmg+ CiNpbmNsdWRlCTxuZXRpbmV0L2lmX2V0aGVyLmg+CiNpbmNsdWRlCTxzdGRsaWIuaD4KI2luY2x1 ZGUJPHN0cmluZy5oPgoKI2RlZmluZQkJSEFTSFNJWkUJNjU1MzUKI2RlZmluZSAJRk5WX3ByaW1l IAkxNjc3NzYxOQoKc3RydWN0IGlmcmVxbGlzdCB7CglzdHJ1Y3QgaWZhbGlhc3JlcSByZXE7Cglz dHJ1Y3QgaWZyZXFsaXN0ICppZmxfbmV4dDsKfSAqaGFzaHRhYmxlW0hBU0hTSVpFXTsKCnVuc2ln bmVkIGxvbmcgcG9zLCBwb3NfdGFibGVbSEFTSFNJWkVdOwppbnQgaywgZW50cmllczsJCgpzdHJ1 Y3QgaWZyZXFsaXN0ICoJYWxpYXMoY2hhciosIHN0cnVjdCBzb2NrYWRkcl9pbiwgc3RydWN0IHNv Y2thZGRyX2luLCBzdHJ1Y3Qgc29ja2FkZHJfaW4pOwp2b2lkICAgICAgICAgICAJCWluamVjdF9w YWNrZXQobGlibmV0X3QgKiwgdV9jaGFyICosIHVfY2hhciAqLCB1X2NoYXIgKiwgdV9jaGFyICop Owp1bnNpZ25lZCBsb25nIAkJaGFzaChjb25zdCBjaGFyICosIGludCk7CnZvaWQJCQlpbml0aWFs aXNlX2hhc2hfdGFibGUodm9pZCk7CnZvaWQJCQlpbml0aWFsaXNlX3Bvc190YWJsZSh2b2lkKTsK dm9pZAkJCWNyZWF0ZV9oYXNoX3RhYmxlKGNoYXIgKiwgc3RydWN0IGlmcmVxbGlzdCAqKTsKc3Ry dWN0IGlmcmVxbGlzdCAqCWlmYWRkcnMoc3RydWN0IGlmcmVxbGlzdCAqKTsKdm9pZAkJCXJlbW92 ZV9hbGlhcyh2b2lkKTsKCmludAptYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewogICAgICAg IGJwZl91X2ludDMyIG5ldCwgdGhlaXJfbmV0LCBhbGlhc19uZXQsIGFsaWFzX2Jyb2FkbmV0LCBt YXNrLCBhbGlhc19tYXNrLCBhbGlhc19icm9hZG1hc2ssIGlwLCBteWlwLCB0aGVpcl9pcDsKICAg ICAgICBwY2FwX3QgKmhhbmRsZTsKICAgICAgICBjaGFyIGRldmljZVtJRk5BTVNJWl0sIGVycmJ1 ZltQQ0FQX0VSUkJVRl9TSVpFXSwgZXJyX2J1ZltMSUJORVRfRVJSQlVGX1NJWkVdLCBidWZbMTZd OwoJY29uc3QgdV9jaGFyICpwYWNrZXQ7CiAgICAgICAgc3RydWN0IGJwZl9wcm9ncmFtIGZpbHRl cjsKICAgICAgICBzdHJ1Y3QgcGNhcF9wa3RoZHIgcGt0aGRyOwogICAgICAgIGNvbnN0IHN0cnVj dCAgbGlibmV0X2V0aGVybmV0X2hkciAqZXRoZXJfaGVhZGVyOwogICAgICAgIHN0cnVjdCBldGhl cl9hcnAgKmFycGhkcjsKICAgICAgICBzdHJ1Y3QgbGlibmV0X2V0aGVybmV0X2hkciAqZXRoZXJf aGVhZGVyMjsKICAgICAgICBsaWJuZXRfdCAqbHQ7CiAgICAgICAgc3RydWN0IGxpYm5ldF9ldGhl cl9hZGRyICpldGhlcl9hZGRyOwogICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW4sIHNpbjIs IHNpbjM7CglzdHJ1Y3QgaWZyZXFsaXN0ICpyZXF1ZXN0LCBpZnJlcXVlc3Q7Cgl1bnNpZ25lZCBs b25nICpwdHI7CiAgICAgICAgY2hhciBhbGlhc21hc2tbXSA9IjAuMC4wLjI1NCI7CgljaGFyIGFs aWFzYnJvYWRtYXNrW10gPSAiMC4wLjAuMjU1IjsKICAgICAgICBjaGFyIGZpbFtdID0gImFycCI7 CglpbnQgb24gPSAxOwoKICAgICAgICBpZiAoYXJnYyAhPSAyKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICBwcmludGYoIlVzYWdlOiAlcyBpbnRlcmZhY2UuXG4iLCBh cmd2WzBdKTsKICAgICAgICAgICAgICAgIGV4aXQoMSk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICB9CgoKICAgICAgICBzdHJsY3B5KGRldmljZSwgYXJndlsxXSwgSUZOQU1TSVop OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg IAlpZiAocGNhcF9sb29rdXBuZXQoZGV2aWNlLCAmbmV0LCAmbWFzaywgZXJyYnVmKSA9PSAtMSkg ewogICAgICAgICAgICAgICAJcHJpbnRmKCJwY2FwX2xvb2t1cG5ldCgpOiAlc1xuIiwgZXJyYnVm KTsKICAgICAgICAgICAgICAgCWV4aXQoMSk7ICAKICAgICAgIAl9CgoJaW5pdGlhbGlzZV9oYXNo X3RhYmxlKCk7Cglpbml0aWFsaXNlX3Bvc190YWJsZSgpOwoJCglyZXF1ZXN0ID0gTlVMTDsKCglm b3IoIDsgOyApIHsKCQlpZiAoZW50cmllcyA+IEhBU0hTSVpFKQoJCQlyZW1vdmVfYWxpYXMoKTsK CgkJaWYgKCAoaGFuZGxlID0gcGNhcF9vcGVuX2xpdmUoZGV2aWNlLCAyMDAsIDAsIDEwMCwgZXJy YnVmKSkgPT0gTlVMTCkgewogICAgICAgIAkgICAgICAJIHByaW50ZigicGNhcF9vcGVuX2xpdmUo KTogJXNcbiIsIGVycmJ1Zik7CiAgICAgICAgICAgICAgICAJZXhpdCgxKTsKCQl9CgoJCWlmIChp b2N0bChwY2FwX2ZpbGVubyhoYW5kbGUpLCBCSU9DSU1NRURJQVRFLCAmb24pID09IC0xKSB7CgkJ CXBlcnJvcigiaW9jdGwiKTsKCQkJZXhpdCgxKTsKCQl9CgoJCWlmIChwY2FwX2NvbXBpbGUoaGFu ZGxlLCAmZmlsdGVyLCBmaWwsIDAsIG5ldCkgPT0gLTEpIHsKICAgICAgICAJICAgICAgICBwcmlu dGYoInBjYXBfY29tcGlsZSgpOiAlc1xuIiwgcGNhcF9nZXRlcnIoaGFuZGxlKSk7CiAgICAgICAg ICAgICAgICAgICAgICAgIGV4aXQoMSk7CgkJfQoKCQlpZiAocGNhcF9zZXRmaWx0ZXIoaGFuZGxl LCAmZmlsdGVyKSA9PSAtMSkgewogICAgICAgIAkgICAgICAgIHByaW50ZigicGNhcF9zZXRmaWx0 ZXIoKTogJXNcbiIsIHBjYXBfZ2V0ZXJyKGhhbmRsZSkpOwogICAgICAgIAkgICAgICAgIGV4aXQo MSk7CgkJfSAKCiAgICAgICAgICAgICAgICBtZW1zZXQoJnNpbi5zaW5fYWRkciwgMCwgc2l6ZW9m KHNpbi5zaW5fYWRkcikpOwoJCW1lbXNldCgmc2luMi5zaW5fYWRkciwgMCwgc2l6ZW9mKHNpbjIu c2luX2FkZHIpKTsKCQltZW1zZXQoJnNpbjMuc2luX2FkZHIsIDAsIHNpemVvZihzaW4zLnNpbl9h ZGRyKSk7IAoKCQlzaW4uc2luX2xlbiA9IHNpbjIuc2luX2xlbiA9IHNpbjMuc2luX2xlbiA9IHNp emVvZihzdHJ1Y3Qgc29ja2FkZHIpOwoJCXNpbi5zaW5fZmFtaWx5ID0gc2luMi5zaW5fZmFtaWx5 ID0gc2luMy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKCgkJd2hpbGUgKCAocGFja2V0ID0gcGNhcF9u ZXh0KGhhbmRsZSwgJnBrdGhkcikpID09IE5VTEwpIDsKCgkJbHQgPSBsaWJuZXRfaW5pdChMSUJO RVRfTElOSywgZGV2aWNlLCBlcnJfYnVmKTsKCgkJZXRoZXJfYWRkciA9IGxpYm5ldF9nZXRfaHdh ZGRyKGx0KTsKICAgICAgICAJbXlpcCAgPSBsaWJuZXRfZ2V0X2lwYWRkcjQobHQpOwogICAgICAg IAlpcCA9IG50b2hsKG15aXApOwogICAgICAgICAgICAgICAgZXRoZXJfaGVhZGVyID0gKHN0cnVj dCBsaWJuZXRfZXRoZXJuZXRfaGRyICopIHBhY2tldDsKICAgICAgICAgICAgICAgIGFycGhkciA9 IChzdHJ1Y3QgZXRoZXJfYXJwICopIChwYWNrZXQgKyBzaXplb2Yoc3RydWN0IGxpYm5ldF9ldGhl cm5ldF9oZHIpKTsKCiAgICAgICAgICAgICAgICBpZiAoYXJwaGRyLT5hcnBfdHBhWzNdICE9IGFy cGhkci0+YXJwX3NwYVszXSkgewogICAgICAgICAgICAgICAgICAgICAgICBzbnByaW50ZihidWYs IHNpemVvZihidWYpLCAiJWQuJWQuJWQuJWQiLCBhcnBoZHItPmFycF9zcGFbMF0sICBhcnBoZHIt PmFycF9zcGFbMV0sICBhcnBoZHItPmFycF9zcGFbMl0sICBhcnBoZHItPmFycF9zcGFbM10pOwoK ICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9wdG9uKEFGX0lORVQsIGJ1ZiwgJnNpbi5zaW5f YWRkcik7CgogICAgICAgICAgICAgICAgICAgICAgICB0aGVpcl9pcCA9IHNpbi5zaW5fYWRkci5z X2FkZHI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyX25ldCA9IHRoZWlyX2lwICYgbWFz azsKCgkJCWluZXRfcHRvbihBRl9JTkVULCBhbGlhc21hc2ssICZzaW4uc2luX2FkZHIpOwoJCQlp bmV0X3B0b24oQUZfSU5FVCwgYWxpYXNicm9hZG1hc2ssICZzaW4yLnNpbl9hZGRyKTsKCiAgICAg ICAgICAgICAgICAgICAgICAgIGFsaWFzX21hc2sgPSBzaW4uc2luX2FkZHIuc19hZGRyOwoJCQlh bGlhc19icm9hZG1hc2sgPSBzaW4yLnNpbl9hZGRyLnNfYWRkcjsKICAgICAgICAgICAgICAgICAg ICAgICAgYWxpYXNfbmV0ID0gYWxpYXNfbWFzayB8IHRoZWlyX25ldDsKCQkJYWxpYXNfYnJvYWRu ZXQgPSBhbGlhc19icm9hZG1hc2sgfCB0aGVpcl9uZXQ7CgogICAgICAgICAgICAgICAgICAgICAg ICBzaW4uc2luX2FkZHIuc19hZGRyID0gYWxpYXNfbmV0OwoJCQlzaW4yLnNpbl9hZGRyLnNfYWRk ciA9IGFsaWFzX2Jyb2FkbmV0OwoJCQlzaW4zLnNpbl9hZGRyLnNfYWRkciA9IG1hc2s7CgoJCQlp ZiAodGhlaXJfbmV0ID09IG5ldCkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5q ZWN0X3BhY2tldChsdCwgZXRoZXJfYWRkci0+ZXRoZXJfYWRkcl9vY3RldCxhcnBoZHItPmFycF90 cGEsIGFycGhkci0+YXJwX3NoYSwgYXJwaGRyLT5hcnBfc3BhKTsKCQkJZWxzZSB7CgkJCQlyZXF1 ZXN0ID0gYWxpYXMoZGV2aWNlLCBzaW4sIHNpbjIsIHNpbjMpOyAKCQkJCWNyZWF0ZV9oYXNoX3Rh YmxlKHJlcXVlc3QtPnJlcS5pZnJhX2FkZHIuc2FfZGF0YSwgcmVxdWVzdCk7CgkJCQlpbmplY3Rf cGFja2V0KGx0LCBldGhlcl9hZGRyLT5ldGhlcl9hZGRyX29jdGV0LCBhcnBoZHItPmFycF90cGEs IGFycGhkci0+YXJwX3NoYSwgYXJwaGRyLT5hcnBfc3BhKTsKCQkJCWluamVjdF9wYWNrZXQobHQs IGFycGhkci0+YXJwX3NoYSwgYXJwaGRyLT5hcnBfc3BhLCBldGhlcl9hZGRyLT5ldGhlcl9hZGRy X29jdGV0LCAodV9jaGFyICopICZteWlwKTsKCQkJfQoJCX0KCQkJcGNhcF9jbG9zZShoYW5kbGUp OwoJCQlsaWJuZXRfZGVzdHJveShsdCk7Cgl9Cn0JCgpzdHJ1Y3QgaWZyZXFsaXN0ICoKYWxpYXMo Y2hhciAqaWZkZXZpY2UsIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW4sIHN0cnVjdCBzb2NrYWRkcl9p biBzaW4yLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luMykKewoJaW50IHNvY2tmZDsKCXN0cnVjdCBp ZmFsaWFzcmVxIGFsaWFzcmVxOwoJc3RydWN0IGlmcmVxbGlzdCAqcmVxbGlzdDsKCQoJaWYgKCAo cmVxbGlzdCA9IChzdHJ1Y3QgaWZyZXFsaXN0ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IGlmcmVx bGlzdCkpKSA9PSBOVUxMKSB7CgkJcGVycm9yKCJtYWxsb2MiKTsKCQlleGl0KDEpOwoJfSAKCiAg ICAgICAgbWVtc2V0KCZhbGlhc3JlcSwgMCwgc2l6ZW9mKGFsaWFzcmVxKSk7CgogICAgICAgIHN0 cmxjcHkoYWxpYXNyZXEuaWZyYV9uYW1lLCBpZmRldmljZSwgSUZOQU1TSVopOwoJbWVtY3B5KCZh bGlhc3JlcS5pZnJhX2FkZHIsICZzaW4sIHNpemVvZihzaW4pKTsKCW1lbWNweSgmYWxpYXNyZXEu aWZyYV9icm9hZGFkZHIsICZzaW4yLCBzaXplb2Yoc2luMikpOwoJbWVtY3B5KCZhbGlhc3JlcS5p ZnJhX21hc2ssICZzaW4zLCBzaXplb2Yoc2luMykpOwoKCW1lbXNldCgmcmVxbGlzdC0+cmVxLCAw LCBzaXplb2YocmVxbGlzdC0+cmVxKSk7CgoJbWVtY3B5KCZyZXFsaXN0LT5yZXEsICZhbGlhc3Jl cSwgc2l6ZW9mKGFsaWFzcmVxKSk7IAoKICAgICAgICBpZiAoIChzb2NrZmQgPSBzb2NrZXQoUEZf SU5FVCwgU09DS19ER1JBTSwgMCkpID09IC0xKSB7CiAgICAgICAgICAgICAgICBwZXJyb3IoInNv Y2tldCIpOwogICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICB9CgogICAgICAgIGlmIChp b2N0bChzb2NrZmQsIFNJT0NBSUZBRERSLCAmYWxpYXNyZXEpID09IC0xKSB7CiAgICAgICAgICAg ICAgICBwZXJyb3IoImlvY3RsIik7CiAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgIH0K CgljbG9zZShzb2NrZmQpOwoJcmV0dXJuIHJlcWxpc3Q7Cn0KCnZvaWQKaW5qZWN0X3BhY2tldChs aWJuZXRfdCAqbHQsIHVfY2hhciAqaHdzcmMsIHVfY2hhciAqcHNyYywgdV9jaGFyICpod2RzdCwg dV9jaGFyICpwZHN0KQp7CglpbnQgdzsKCiAgICAgICAgbGlibmV0X2J1aWxkX2FycChBUlBIUkRf RVRIRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICBFVEhFUlRZUEVfSVAsCiAgICAgICAgICAg ICAgICAgICAgICAgICA2LAogICAgICAgICAgICAgICAgICAgICAgICAgNCwKICAgICAgICAgICAg ICAgICAgICAgICAgIEFSUE9QX1JFUExZLAogICAgICAgICAgICAgICAgICAgICAgICAgaHdzcmMs CiAgICAgICAgICAgICAgICAgICAgICAgICBwc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAg aHdkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBwZHN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwKCQkJIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBsdCwKICAgICAgICAg ICAgICAgICAgICAgICAgIDApOwoKCWxpYm5ldF9idWlsZF9ldGhlcm5ldChod2RzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaHdzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEVUSEVSVFlQRV9BUlAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCgkJ CSAgICAgIDAsCQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMCk7CgoKCXcgPSBsaWJuZXRfd3JpdGUobHQpOwoKCWlmICh3ID09 IC0xKSB7CgkJcHJpbnRmKCJsaWJuZXRfd3JpdGUoKTogJXNcbiIsIGxpYm5ldF9nZXRlcnJvcihs dCkpOwoJCWV4aXQoMSk7Cgl9Cn0KCnZvaWQKY3JlYXRlX2hhc2hfdGFibGUoY2hhciAqa2V5LCBz dHJ1Y3QgaWZyZXFsaXN0ICpzdHJ1Y3R1cmUpCnsKCWlmIChpZmFkZHJzKHN0cnVjdHVyZSkgPT0g TlVMTCkgewoJCXN0cnVjdCBpZnJlcWxpc3QgKnByZXZpb3VzX3B0ciwgKmN1cnJlbnRfcHRyLCAq bmV4dF9wdHI7IAoKCQluZXh0X3B0ciA9IHN0cnVjdHVyZTsKICAgICAgICAJcG9zID0gaGFzaChr ZXksIHN0cmxlbihrZXkpKTsKCiAgICAgICAgCWlmIChoYXNodGFibGVbcG9zXSA9PSBOVUxMKSB7 IAoJCQloYXNodGFibGVbcG9zXSA9IG5leHRfcHRyOwoJCQlwb3NfdGFibGVbaysrXSA9IHBvczsK CQl9CiAgICAgICAgCWVsc2UgewogICAgICAgICAgICAgICAgCWN1cnJlbnRfcHRyID0gaGFzaHRh YmxlW3Bvc107CiAgICAgICAgICAgICAgICAJd2hpbGUgKGN1cnJlbnRfcHRyICE9IE5VTEwpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgCXByZXZpb3VzX3B0ciA9IGN1cnJlbnRfcHRyOwogICAg ICAgICAgICAgICAgICAgICAgICAJY3VycmVudF9wdHIgPSBjdXJyZW50X3B0ci0+aWZsX25leHQ7 CiAgICAgICAgICAgICAgICAJfQoJCQlwcmV2aW91c19wdHItPmlmbF9uZXh0ID0gbmV4dF9wdHI7 CiAgICAgICAgCX0KCQluZXh0X3B0ci0+aWZsX25leHQgPSBOVUxMOwoJCSsrZW50cmllczsKCX0K fQoKc3RydWN0IGlmcmVxbGlzdCAqCmlmYWRkcnMoc3RydWN0IGlmcmVxbGlzdCAqc3RydWN0dXJl KQp7CglpbnQgc29ja2ZkOwogICAgICAgIHJlZ2lzdGVyIGludCBpID0gMDsKICAgICAgICBzdHJ1 Y3QgaWZyZXFsaXN0ICpsaXN0OwoJc3RydWN0IGlmcmVxIGRlbHJlcTsKCgogICAgICAgICAgICAg ICAgZm9yIChsaXN0ID0gaGFzaHRhYmxlW2hhc2goc3RydWN0dXJlLT5yZXEuaWZyYV9hZGRyLnNh X2RhdGEsIHN0cmxlbihzdHJ1Y3R1cmUtPnJlcS5pZnJhX2FkZHIuc2FfZGF0YSkpXTsgbGlzdCAh PSBOVUxMOyBsaXN0ID0gbGlzdC0+aWZsX25leHQpIHsKCQkJbWVtc2V0KCZkZWxyZXEsIDAsIHNp emVvZihkZWxyZXEpKTsKCQkJbWVtY3B5KGRlbHJlcS5pZnJfbmFtZSwgbGlzdC0+cmVxLmlmcmFf bmFtZSwgSUZOQU1TSVopOwoJCQltZW1jcHkoJmRlbHJlcS5pZnJfYWRkciwgJmxpc3QtPnJlcS5p ZnJhX2FkZHIsIHNpemVvZihsaXN0LT5yZXEuaWZyYV9hZGRyKSk7CiAKICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCAoc29ja2ZkID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfREdSQU0sIDApKSA9 PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvcigic29ja2V0Iik7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChpb2N0bChzb2NrZmQsIFNJ T0NHSUZBRERSLCAmZGVscmVxKSkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZXJyb3IoImlvY3RsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhp dCgxKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoJCQljbG9zZShzb2NrZmQpOwoJCQlpZiAo IXN0cm5jbXAoc3RydWN0dXJlLT5yZXEuaWZyYV9hZGRyLnNhX2RhdGEsIGRlbHJlcS5pZnJfYWRk ci5zYV9kYXRhLCBzaXplb2YoZGVscmVxLmlmcl9hZGRyLnNhX2RhdGEpKSkgCgkJCQlyZXR1cm4g c3RydWN0dXJlOwoJCX0KCXJldHVybiBOVUxMOwp9Cgp2b2lkCnJlbW92ZV9hbGlhcyh2b2lkKQp7 CglpbnQgc29ja2ZkOwoJcmVnaXN0ZXIgaW50IGkgPSAwOwoJc3RydWN0IGlmcmVxbGlzdCAqbGlz dCwgKnB0cjsgCgoJd2hpbGUoaSA8IEhBU0hTSVpFKSB7IAoJCWZvciAobGlzdCA9IGhhc2h0YWJs ZVtwb3NfdGFibGVbaV1dOyBsaXN0ICE9IE5VTEw7IGxpc3QgPSBwdHIpIHsKICAgICAgICAJICAg ICAgICBpZiAoIChzb2NrZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgMCkpID09IC0x KSB7CiAgICAgICAgICAgICAgICAJICAgICAgICBwZXJyb3IoInNvY2tldCIpOwogICAgICAgICAg ICAgICAgICAgICAgICAJZXhpdCgxKTsKICAgICAgICAgICAgICAgIAl9CgoJCQlpZiAoIChpb2N0 bChzb2NrZmQsIFNJT0NESUZBRERSLCAmbGlzdC0+cmVxKSkgPT0gLTEpIHsKCQkJCXBlcnJvcigi aW9jdGwiKTsKCQkJCWV4aXQoMSk7CgkJCX0KCgkgICAgICAgICAgICAgICAgY2xvc2Uoc29ja2Zk KTsKCQkJcHRyID0gbGlzdC0+aWZsX25leHQ7CgkJCWZyZWUobGlzdCk7CgkJfQoJCSsraTsKCX0K Cglpbml0aWFsaXNlX2hhc2hfdGFibGUoKTsKCWluaXRpYWxpc2VfcG9zX3RhYmxlKCk7CgllbnRy aWVzID0gMDsKCWsgPSAwOwp9CgovKiBGb3dsZXIgLyBOb2xsIC8gVm8gKEZOVikgSGFzaCBhbGdv cnl0aG0gKi8KCnVuc2lnbmVkIGxvbmcKaGFzaChjb25zdCBjaGFyICpwLCBpbnQgcykKewoJdW5z aWduZWQgbG9uZyBoID0gMjE2NjEzNjI2MVVMOy8qIEZOVi0xYSBoYXNoICovCglpbnQgaSA9IDA7 CgoJZm9yICg7IGkgPCBzOyBpKyspCgloID0gKChoIF4gcFtpXSkgKiBGTlZfcHJpbWUpOwoKCXJl dHVybiAoaCAlIEhBU0hTSVpFKTsKfQoKdm9pZAppbml0aWFsaXNlX2hhc2hfdGFibGUodm9pZCkK ewoJcmVnaXN0ZXIgaW50IGNvdW50OwoJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgSEFTSFNJWkU7 IGNvdW50KyspIAoJCWhhc2h0YWJsZVtjb3VudF0gPSBOVUxMOwp9CiAKdm9pZAppbml0aWFsaXNl X3Bvc190YWJsZSh2b2lkKQp7CglyZWdpc3RlciBpbnQgY291bnQ7Cglmb3IgKGNvdW50ID0gMDsg Y291bnQgPCBIQVNIU0laRTsgY291bnQrKykKCQlwb3NfdGFibGVbY291bnRdID0gLTE7Cn0gCgo= --Multipart=_Wed__1_Sep_2004_11_52_56_+0200_DH4peUQqccNZ_Pmi--