From mboxrd@z Thu Jan 1 00:00:00 1970 From: radiotap-owner-sUITvd46vNxg9hUCZPvPmw@public.gmane.org Subject: BOUNCE radiotap-sUITvd46vNxg9hUCZPvPmw@public.gmane.org: Message too long (>40000 chars) Date: Thu, 26 Nov 2009 22:38:07 -0600 Message-ID: <20091127043806.GQ6179@ojctech.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline Sender: radiotap-owner-sUITvd46vNxg9hUCZPvPmw@public.gmane.org To: radiotap-sUITvd46vNxg9hUCZPvPmw@public.gmane.org List-Id: radiotap@radiotap.org Return-Path: Received: from sipsolutions.net (xc.sipsolutions.net [IPv6:2a02:790:1:6::1:2]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by mail.netbsd.org (Postfix) with ESMTPS id 56EEB63B116 for ; Thu, 26 Nov 2009 17:56:08 +0000 (UTC) Received: by sipsolutions.net with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69) (envelope-from ) id 1NDiZP-0006qS-SK; Thu, 26 Nov 2009 18:56:05 +0100 Subject: [RFA] namespaces and vendor extensions From: Johannes Berg To: Radiotap Cc: Gerald Combs Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-BoTShiWGOhneCqohXLBK" Date: Thu, 26 Nov 2009 18:55:52 +0100 Message-ID: <1259258152.32372.90.camel-YfaajirXv2244ywRPIzf9A@public.gmane.org> Mime-Version: 1.0 X-Mailer: Evolution 2.28.1 --=-BoTShiWGOhneCqohXLBK Content-Type: multipart/mixed; boundary="=-Itg9672XATyA12h1SH3I" --=-Itg9672XATyA12h1SH3I Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable [Gerald: I'm copying you directly because I have a question about this patch, please see at the end of the email] This is a request for adoption of the previously discussed namespace proposal from David. Namespaces in radiotap serve two different use cases: 1) vendor extensions and 2) multiple uses of a single radiotap field. Vendor extensions allows data from any number of different vendors to be present in a single radiotap header. Each vendor namespace contains present bits just like regular radiotap, but these bits are under the control of the vendor. To allow compliant parsers to read past vendor extensions, they also contain the data length. Resetting the radiotap namespace when extending the present bitmap serves to allow a radiotap field be specified multiple times. An example for that would be specifying multi-rate retries during injection or for TX status. In the current radiotap header, the IEEE80211_RADIOTAP_EXT bit (bit 31) is reserved in any it_present bitmap and indicates that the bitmap continues. This shall be true for bit 29 (reset radiotap namespace) and bit 30 (vendor namespace) as well. This proposal differs from David's original one by using different alignment and size for the vendor data specification, I have opted to use 16 bits for the vendor data length since some people want to put a lot of data like raw TX/RX hardware descriptors into vendor fields. I have also clarified the data length variable to specify the fact that when switching away from a vendor namespace to another vendor namespace, the vendor namespace data is not part of the vendor namespace data length ("If a radiotap header changes from a vendor namespace to another vendor namespace, the 6-byte data describing the new vendor namespace shall not be accounted for in skip_length.") The text describing that the two fields are mutually exclusive is also new. Correct, existing radiotap implementations are compatible with this proposal because they will stop parsing the radiotap header at bit 29/30 since even though they do not know that these bits are reserved in all namespaces and it_present words they do know that they cannot understand these bits, regardless of which it_present they encounter them in, because they were not previously defined. [It seems to me that the existing wireshark implementation is not correct -- it doesn't properly skip over extended present bitmap words.] Note that before this proposal the bits 63, 95, (31+n*32) were reserved due to overlaying the extension bit, this proposal also reserves the bits 29+n*32 and 30+n*32 in all namespaces due to overlapping with the namespace changes bits. The normative text of this proposal follows (minus formatting): --- begin normative text --- Vendor Namespace Bit Number not applicable, bit 30 in every it_present word=20 Structure u8 OUI[3], u8 sub_namespace, __le16 skip_length=20 Required Alignment 2=20 This field is reserved in all namespaces and every it_present word, the standard radiotap namespace as well as all vendor namespaces. It is mutually exclusive with the "Reset to Radiotap Namespace" field, setting both is undefined. The Vendor Namespace Field contains three sub-fields. The first sub-field is 3 bytes long. It contains the vendor's IEEE 802 Organizationally Unique Identifier (OUI). The fourth byte is a vendor-specific "namespace selector."=20 Before it resumes interpretation of presence bits in the following 32-bit presence words, if any, the interpreter shall reset its presence-bitmap index to 0, and change to the vendor namespace specified by the OUI and selector.=20 The fifth and sixth bytes, skip_length, comprise a 16 bit little-endian value that tells the interpreter how many bytes of data after the end of the Vendor Namespace Field can only be interpreted according to the vendor namespace. If a radiotap header changes to a namespace that the interpreter does not understand, and back, the interpreter may resume interpretation in the new namespace by skipping skip_length data bytes after the end of the Vendor Namespace Field. If a radiotap header changes from a vendor namespace to another vendor namespace, the 6-byte data describing the new vendor namespace shall not be accounted for in skip_length. Reset to Radiotap Namespace Bit Number not applicable, bit 29 in every it_present word=20 Structure no contents=20 Required Alignment N/A This field is reserved in all namespaces and every it_present word, the standard radiotap namespace as well as all vendor namespaces. It is mutually exclusive with the "Vendor Namespace" field, setting both is undefined. Upon interpreting this field, the interpreter shall reset its presence-bitmap index to 0 and its namespace to the default radiotap namespace, and change to the default radiotap namespace, before it interprets subsequent presence-bitmap words.=20 --- end normative text --- I have implemented this proposal in Andy Green's and my stand-alone radiotap parser library available on http://git.sipsolutions.net/radiotap.git/ (git clone http://git.sipsolutions.net/radiotap.git/ to get it, the web interface can also generate tarballs). I have additionally implemented this proposal in wireshark, without any vendor extension parsing, by making wireshark use a copy of the above library. Gerald: Here's where I have a question -- is that acceptable to you? The files are licensed properly, but it does require pulling the entire radiotap header into memory with ep_tvb_memdup(). Are you ok with that? Everything else would be rather complicated, requiring a complete re-implementation of the parser which doesn't seem all that helpful. johannes --=-Itg9672XATyA12h1SH3I Content-Disposition: attachment; filename="radiotap-lib.patch" Content-Type: text/x-patch; name="radiotap-lib.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 LS0tDQogZXBhbi9kaXNzZWN0b3JzL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgIHwgICAgMiAN CiBlcGFuL2Rpc3NlY3RvcnMvTWFrZWZpbGUuY29tbW9uICAgICAgICAgICAgfCAgICAzIA0KIGVw YW4vZGlzc2VjdG9ycy9NYWtlZmlsZS5ubWFrZSAgICAgICAgICAgICB8ICAgIDIgDQogZXBhbi9k aXNzZWN0b3JzL3BhY2tldC1yYWRpb3RhcC1kZWZzLmggICAgIHwgIDI0NSArKysrKysNCiBlcGFu L2Rpc3NlY3RvcnMvcGFja2V0LXJhZGlvdGFwLWl0ZXIuYyAgICAgfCAgMzc4ICsrKysrKysrKysN CiBlcGFuL2Rpc3NlY3RvcnMvcGFja2V0LXJhZGlvdGFwLWl0ZXIuaCAgICAgfCAgIDk2ICsrDQog ZXBhbi9kaXNzZWN0b3JzL3BhY2tldC1yYWRpb3RhcC1wbGF0Zm9ybS5oIHwgICAgOSANCiBlcGFu L2Rpc3NlY3RvcnMvcGFja2V0LXJhZGlvdGFwLmMgICAgICAgICAgfCAxMDY5ICsrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tDQogOCBmaWxlcyBjaGFuZ2VkLCAxMjI0IGluc2VydGlvbnMoKyks IDU4MCBkZWxldGlvbnMoLSkNCg0KLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAw MDAwMDAwMCArMDAwMA0KKysrIHRydW5rL2VwYW4vZGlzc2VjdG9ycy9wYWNrZXQtcmFkaW90YXAt ZGVmcy5oCTIwMDktMTEtMjYgMTg6NTM6NTMuMDAwMDAwMDAwICswMTAwDQpAQCAtMCwwICsxLDI0 NSBAQA0KKy8qLQ0KKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBEYXZpZCBZb3VuZy4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCisg KiBhcmUgbWV0Og0KKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQor ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluIHRoZQ0KKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICogMy4gVGhlIG5hbWUgb2Yg RGF2aWQgWW91bmcgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQ0KKyAqICAg IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp b3INCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIERBVklEIFlPVU5HIGBgQVMgSVMnJyBBTkQgQU5ZDQorICogRVhQUkVTUyBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLA0KKyAq IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBDQorICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgREFWSUQNCisgKiBZT1VORyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLCBTUEVDSUFMLA0KKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRA0KKyAqIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORA0K KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ Q1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZDQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWQ0KKyAqIE9GIFNVQ0ggREFN QUdFLg0KKyAqLw0KKw0KKy8qDQorICogTW9kaWZpY2F0aW9ucyB0byBmaXQgaW50byB0aGUgbGlu dXggSUVFRSA4MDIuMTEgc3RhY2ssDQorICogTWlrZSBLZXJzaGF3IChkcmFnb3JuQGtpc21ldHdp cmVsZXNzLm5ldCkNCisgKi8NCisNCisjaWZuZGVmIElFRUU4MDIxMVJBRElPVEFQX0gNCisjZGVm aW5lIElFRUU4MDIxMVJBRElPVEFQX0gNCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorDQorLyog QmFzZSB2ZXJzaW9uIG9mIHRoZSByYWRpb3RhcCBwYWNrZXQgaGVhZGVyIGRhdGEgKi8NCisjZGVm aW5lIFBLVEhEUl9SQURJT1RBUF9WRVJTSU9OCQkwDQorDQorLyogQSBnZW5lcmljIHJhZGlvIGNh cHR1cmUgZm9ybWF0IGlzIGRlc2lyYWJsZS4gVGhlcmUgaXMgb25lIGZvcg0KKyAqIExpbnV4LCBi dXQgaXQgaXMgbmVpdGhlciByaWdpZGx5IGRlZmluZWQgKHRoZXJlIHdlcmUgbm90IGV2ZW4NCisg KiB1bml0cyBnaXZlbiBmb3Igc29tZSBmaWVsZHMpIG5vciBlYXNpbHkgZXh0ZW5zaWJsZS4NCisg Kg0KKyAqIEkgc3VnZ2VzdCB0aGUgZm9sbG93aW5nIGV4dGVuc2libGUgcmFkaW8gY2FwdHVyZSBm b3JtYXQuIEl0IGlzDQorICogYmFzZWQgb24gYSBiaXRtYXAgaW5kaWNhdGluZyB3aGljaCBmaWVs ZHMgYXJlIHByZXNlbnQuDQorICoNCisgKiBJIGFtIHRyeWluZyB0byBkZXNjcmliZSBwcmVjaXNl bHkgd2hhdCB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lcg0KKyAqIHNob3VsZCBleHBlY3QgaW4g dGhlIGZvbGxvd2luZywgYW5kIGZvciB0aGF0IHJlYXNvbiBJIHRlbGwgdGhlDQorICogdW5pdHMg YW5kIG9yaWdpbiBvZiBlYWNoIG1lYXN1cmVtZW50ICh3aGVyZSBpdCBhcHBsaWVzKSwgb3IgZWxz ZSBJDQorICogdXNlIHN1ZmZpY2llbnRseSB3ZWFzZWxseSBsYW5ndWFnZSAoImlzIGEgbW9ub3Rv bmljYWxseSBub25kZWNyZWFzaW5nDQorICogZnVuY3Rpb24gb2YuLi4iKSB0aGF0IEkgY2Fubm90 IHNldCBmYWxzZSBleHBlY3RhdGlvbnMgZm9yIGxhd3llcmx5DQorICogcmVhZGVycy4NCisgKi8N CisNCisvKiBUaGUgcmFkaW8gY2FwdHVyZSBoZWFkZXIgcHJlY2VkZXMgdGhlIDgwMi4xMSBoZWFk ZXIuDQorICogQWxsIGRhdGEgaW4gdGhlIGhlYWRlciBpcyBsaXR0bGUgZW5kaWFuIG9uIGFsbCBw bGF0Zm9ybXMuDQorICovDQorc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgew0KKwl1 aW50OF90IGl0X3ZlcnNpb247CS8qIFZlcnNpb24gMC4gT25seSBpbmNyZWFzZXMNCisJCQkJICog Zm9yIGRyYXN0aWMgY2hhbmdlcywNCisJCQkJICogaW50cm9kdWN0aW9uIG9mIGNvbXBhdGlibGUN CisJCQkJICogbmV3IGZpZWxkcyBkb2VzIG5vdCBjb3VudC4NCisJCQkJICovDQorCXVpbnQ4X3Qg aXRfcGFkOw0KKwl1aW50MTZfdCBpdF9sZW47CS8qIGxlbmd0aCBvZiB0aGUgd2hvbGUNCisJCQkJ ICogaGVhZGVyIGluIGJ5dGVzLCBpbmNsdWRpbmcNCisJCQkJICogaXRfdmVyc2lvbiwgaXRfcGFk LA0KKwkJCQkgKiBpdF9sZW4sIGFuZCBkYXRhIGZpZWxkcy4NCisJCQkJICovDQorCXVpbnQzMl90 IGl0X3ByZXNlbnQ7CS8qIEEgYml0bWFwIHRlbGxpbmcgd2hpY2gNCisJCQkJICogZmllbGRzIGFy ZSBwcmVzZW50LiBTZXQgYml0IDMxDQorCQkJCSAqICgweDgwMDAwMDAwKSB0byBleHRlbmQgdGhl DQorCQkJCSAqIGJpdG1hcCBieSBhbm90aGVyIDMyIGJpdHMuDQorCQkJCSAqIEFkZGl0aW9uYWwg ZXh0ZW5zaW9ucyBhcmUgbWFkZQ0KKwkJCQkgKiBieSBzZXR0aW5nIGJpdCAzMS4NCisJCQkJICov DQorfTsNCisNCisvKiBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSB0 eXBlICAgIFVuaXRzDQorICogLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0t LS0tLS0tLSAgICAtLS0tLQ0KKyAqDQorICogSUVFRTgwMjExX1JBRElPVEFQX1RTRlQgICAgICAg ICAgICAgIF9fbGU2NCAgICAgICBtaWNyb3NlY29uZHMNCisgKg0KKyAqICAgICAgVmFsdWUgaW4g bWljcm9zZWNvbmRzIG9mIHRoZSBNQUMncyA2NC1iaXQgODAyLjExIFRpbWUNCisgKiAgICAgIFN5 bmNocm9uaXphdGlvbiBGdW5jdGlvbiB0aW1lciB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgdGhlDQor ICogICAgICBNUERVIGFycml2ZWQgYXQgdGhlIE1BQy4gRm9yIHJlY2VpdmVkIGZyYW1lcywgb25s eS4NCisgKg0KKyAqIElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMICAgICAgICAgICAyIHggdWlu dDE2X3QgICBNSHosIGJpdG1hcA0KKyAqDQorICogICAgICBUeC9SeCBmcmVxdWVuY3kgaW4gTUh6 LCBmb2xsb3dlZCBieSBmbGFncyAoc2VlIGJlbG93KS4NCisgKg0KKyAqIElFRUU4MDIxMV9SQURJ T1RBUF9GSFNTICAgICAgICAgICAgICB1aW50MTZfdCAgICAgICBzZWUgYmVsb3cNCisgKg0KKyAq ICAgICAgRm9yIGZyZXF1ZW5jeS1ob3BwaW5nIHJhZGlvcywgdGhlIGhvcCBzZXQgKGZpcnN0IGJ5 dGUpDQorICogICAgICBhbmQgcGF0dGVybiAoc2Vjb25kIGJ5dGUpLg0KKyAqDQorICogSUVFRTgw MjExX1JBRElPVEFQX1JBVEUgICAgICAgICAgICAgIHU4ICAgICAgICAgICA1MDBrYi9zDQorICoN CisgKiAgICAgIFR4L1J4IGRhdGEgcmF0ZQ0KKyAqDQorICogSUVFRTgwMjExX1JBRElPVEFQX0RC TV9BTlRTSUdOQUwgICAgIHM4ICAgICAgICAgICBkZWNpYmVscyBmcm9tDQorICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgbWlsbGl3YXR0IChk Qm0pDQorICoNCisgKiAgICAgIFJGIHNpZ25hbCBwb3dlciBhdCB0aGUgYW50ZW5uYSwgZGVjaWJl bCBkaWZmZXJlbmNlIGZyb20NCisgKiAgICAgIG9uZSBtaWxsaXdhdHQuDQorICoNCisgKiBJRUVF ODAyMTFfUkFESU9UQVBfREJNX0FOVE5PSVNFICAgICAgczggICAgICAgICAgIGRlY2liZWxzIGZy b20NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG9uZSBtaWxsaXdhdHQgKGRCbSkNCisgKg0KKyAqICAgICAgUkYgbm9pc2UgcG93ZXIgYXQgdGhl IGFudGVubmEsIGRlY2liZWwgZGlmZmVyZW5jZSBmcm9tIG9uZQ0KKyAqICAgICAgbWlsbGl3YXR0 Lg0KKyAqDQorICogSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVFNJR05BTCAgICAgIHU4ICAgICAg ICAgICBkZWNpYmVsIChkQikNCisgKg0KKyAqICAgICAgUkYgc2lnbmFsIHBvd2VyIGF0IHRoZSBh bnRlbm5hLCBkZWNpYmVsIGRpZmZlcmVuY2UgZnJvbSBhbg0KKyAqICAgICAgYXJiaXRyYXJ5LCBm aXhlZCByZWZlcmVuY2UuDQorICoNCisgKiBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UTk9JU0Ug ICAgICAgdTggICAgICAgICAgIGRlY2liZWwgKGRCKQ0KKyAqDQorICogICAgICBSRiBub2lzZSBw b3dlciBhdCB0aGUgYW50ZW5uYSwgZGVjaWJlbCBkaWZmZXJlbmNlIGZyb20gYW4NCisgKiAgICAg IGFyYml0cmFyeSwgZml4ZWQgcmVmZXJlbmNlIHBvaW50Lg0KKyAqDQorICogSUVFRTgwMjExX1JB RElPVEFQX0xPQ0tfUVVBTElUWSAgICAgIHVpbnQxNl90ICAgICAgIHVuaXRsZXNzDQorICoNCisg KiAgICAgIFF1YWxpdHkgb2YgQmFya2VyIGNvZGUgbG9jay4gVW5pdGxlc3MuIE1vbm90b25pY2Fs bHkNCisgKiAgICAgIG5vbmRlY3JlYXNpbmcgd2l0aCAiYmV0dGVyIiBsb2NrIHN0cmVuZ3RoLiBD YWxsZWQgIlNpZ25hbA0KKyAqICAgICAgUXVhbGl0eSIgaW4gZGF0YXNoZWV0cy4gIChJcyB0aGVy ZSBhIHN0YW5kYXJkIHdheSB0byBtZWFzdXJlDQorICogICAgICB0aGlzPykNCisgKg0KKyAqIElF RUU4MDIxMV9SQURJT1RBUF9UWF9BVFRFTlVBVElPTiAgICB1aW50MTZfdCAgICAgICB1bml0bGVz cw0KKyAqDQorICogICAgICBUcmFuc21pdCBwb3dlciBleHByZXNzZWQgYXMgdW5pdGxlc3MgZGlz dGFuY2UgZnJvbSBtYXgNCisgKiAgICAgIHBvd2VyIHNldCBhdCBmYWN0b3J5IGNhbGlicmF0aW9u LiAgMCBpcyBtYXggcG93ZXIuDQorICogICAgICBNb25vdG9uaWNhbGx5IG5vbmRlY3JlYXNpbmcg d2l0aCBsb3dlciBwb3dlciBsZXZlbHMuDQorICoNCisgKiBJRUVFODAyMTFfUkFESU9UQVBfREJf VFhfQVRURU5VQVRJT04gdWludDE2X3QgICAgICAgZGVjaWJlbHMgKGRCKQ0KKyAqDQorICogICAg ICBUcmFuc21pdCBwb3dlciBleHByZXNzZWQgYXMgZGVjaWJlbCBkaXN0YW5jZSBmcm9tIG1heCBw b3dlcg0KKyAqICAgICAgc2V0IGF0IGZhY3RvcnkgY2FsaWJyYXRpb24uICAwIGlzIG1heCBwb3dl ci4gIE1vbm90b25pY2FsbHkNCisgKiAgICAgIG5vbmRlY3JlYXNpbmcgd2l0aCBsb3dlciBwb3dl ciBsZXZlbHMuDQorICoNCisgKiBJRUVFODAyMTFfUkFESU9UQVBfREJNX1RYX1BPV0VSICAgICAg czggICAgICAgICAgIGRlY2liZWxzIGZyb20NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBtaWxsaXdhdHQgKGRCbSkNCisgKg0KKyAqICAg ICAgVHJhbnNtaXQgcG93ZXIgZXhwcmVzc2VkIGFzIGRCbSAoZGVjaWJlbHMgZnJvbSBhIDEgbWls bGl3YXR0DQorICogICAgICByZWZlcmVuY2UpLiBUaGlzIGlzIHRoZSBhYnNvbHV0ZSBwb3dlciBs ZXZlbCBtZWFzdXJlZCBhdA0KKyAqICAgICAgdGhlIGFudGVubmEgcG9ydC4NCisgKg0KKyAqIElF RUU4MDIxMV9SQURJT1RBUF9GTEFHUyAgICAgICAgICAgICB1OCAgICAgICAgICAgYml0bWFwDQor ICoNCisgKiAgICAgIFByb3BlcnRpZXMgb2YgdHJhbnNtaXR0ZWQgYW5kIHJlY2VpdmVkIGZyYW1l cy4gU2VlIGZsYWdzDQorICogICAgICBkZWZpbmVkIGJlbG93Lg0KKyAqDQorICogSUVFRTgwMjEx X1JBRElPVEFQX0FOVEVOTkEgICAgICAgICAgIHU4ICAgICAgICAgICBhbnRlbm5hIGluZGV4DQor ICoNCisgKiAgICAgIFVuaXRsZXNzIGluZGljYXRpb24gb2YgdGhlIFJ4L1R4IGFudGVubmEgZm9y IHRoaXMgcGFja2V0Lg0KKyAqICAgICAgVGhlIGZpcnN0IGFudGVubmEgaXMgYW50ZW5uYSAwLg0K KyAqDQorICogSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTICAgICAgICAgIHVpbnQxNl90ICAg ICAgIGJpdG1hcA0KKyAqDQorICogICAgIFByb3BlcnRpZXMgb2YgcmVjZWl2ZWQgZnJhbWVzLiBT ZWUgZmxhZ3MgZGVmaW5lZCBiZWxvdy4NCisgKg0KKyAqIElFRUU4MDIxMV9SQURJT1RBUF9UWF9G TEFHUyAgICAgICAgICB1aW50MTZfdCAgICAgICBiaXRtYXANCisgKg0KKyAqICAgICBQcm9wZXJ0 aWVzIG9mIHRyYW5zbWl0dGVkIGZyYW1lcy4gU2VlIGZsYWdzIGRlZmluZWQgYmVsb3cuDQorICoN CisgKiBJRUVFODAyMTFfUkFESU9UQVBfUlRTX1JFVFJJRVMgICAgICAgdTggICAgICAgICAgIGRh dGENCisgKg0KKyAqICAgICBOdW1iZXIgb2YgcnRzIHJldHJpZXMgYSB0cmFuc21pdHRlZCBmcmFt ZSB1c2VkLg0KKyAqDQorICogSUVFRTgwMjExX1JBRElPVEFQX0RBVEFfUkVUUklFUyAgICAgIHU4 ICAgICAgICAgICBkYXRhDQorICoNCisgKiAgICAgTnVtYmVyIG9mIHVuaWNhc3QgcmV0cmllcyBh IHRyYW5zbWl0dGVkIGZyYW1lIHVzZWQuDQorICoNCisgKi8NCitlbnVtIGllZWU4MDIxMV9yYWRp b3RhcF90eXBlIHsNCisJSUVFRTgwMjExX1JBRElPVEFQX1RTRlQgPSAwLA0KKwlJRUVFODAyMTFf UkFESU9UQVBfRkxBR1MgPSAxLA0KKwlJRUVFODAyMTFfUkFESU9UQVBfUkFURSA9IDIsDQorCUlF RUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMID0gMywNCisJSUVFRTgwMjExX1JBRElPVEFQX0ZIU1Mg PSA0LA0KKwlJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCA9IDUsDQorCUlFRUU4MDIx MV9SQURJT1RBUF9EQk1fQU5UTk9JU0UgPSA2LA0KKwlJRUVFODAyMTFfUkFESU9UQVBfTE9DS19R VUFMSVRZID0gNywNCisJSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVOVUFUSU9OID0gOCwNCisJ SUVFRTgwMjExX1JBRElPVEFQX0RCX1RYX0FUVEVOVUFUSU9OID0gOSwNCisJSUVFRTgwMjExX1JB RElPVEFQX0RCTV9UWF9QT1dFUiA9IDEwLA0KKwlJRUVFODAyMTFfUkFESU9UQVBfQU5URU5OQSA9 IDExLA0KKwlJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMID0gMTIsDQorCUlFRUU4MDIx MV9SQURJT1RBUF9EQl9BTlROT0lTRSA9IDEzLA0KKwlJRUVFODAyMTFfUkFESU9UQVBfUlhfRkxB R1MgPSAxNCwNCisJSUVFRTgwMjExX1JBRElPVEFQX1RYX0ZMQUdTID0gMTUsDQorCUlFRUU4MDIx MV9SQURJT1RBUF9SVFNfUkVUUklFUyA9IDE2LA0KKwlJRUVFODAyMTFfUkFESU9UQVBfREFUQV9S RVRSSUVTID0gMTcsDQorDQorCS8qIHZhbGlkIGluIGV2ZXJ5IGl0X3ByZXNlbnQgYml0bWFwLCBl dmVuIHZlbmRvciBuYW1lc3BhY2VzICovDQorCUlFRUU4MDIxMV9SQURJT1RBUF9SQURJT1RBUF9O QU1FU1BBQ0UgPSAyOSwNCisJSUVFRTgwMjExX1JBRElPVEFQX1ZFTkRPUl9OQU1FU1BBQ0UgPSAz MCwNCisJSUVFRTgwMjExX1JBRElPVEFQX0VYVCA9IDMxDQorfTsNCisNCisvKiBDaGFubmVsIGZs YWdzLiAqLw0KKyNkZWZpbmUJSUVFRTgwMjExX0NIQU5fVFVSQk8JMHgwMDEwCS8qIFR1cmJvIGNo YW5uZWwgKi8NCisjZGVmaW5lCUlFRUU4MDIxMV9DSEFOX0NDSwkweDAwMjAJLyogQ0NLIGNoYW5u ZWwgKi8NCisjZGVmaW5lCUlFRUU4MDIxMV9DSEFOX09GRE0JMHgwMDQwCS8qIE9GRE0gY2hhbm5l bCAqLw0KKyNkZWZpbmUJSUVFRTgwMjExX0NIQU5fMkdIWgkweDAwODAJLyogMiBHSHogc3BlY3Ry dW0gY2hhbm5lbC4gKi8NCisjZGVmaW5lCUlFRUU4MDIxMV9DSEFOXzVHSFoJMHgwMTAwCS8qIDUg R0h6IHNwZWN0cnVtIGNoYW5uZWwgKi8NCisjZGVmaW5lCUlFRUU4MDIxMV9DSEFOX1BBU1NJVkUJ MHgwMjAwCS8qIE9ubHkgcGFzc2l2ZSBzY2FuIGFsbG93ZWQgKi8NCisjZGVmaW5lCUlFRUU4MDIx MV9DSEFOX0RZTgkweDA0MDAJLyogRHluYW1pYyBDQ0stT0ZETSBjaGFubmVsICovDQorI2RlZmlu ZQlJRUVFODAyMTFfQ0hBTl9HRlNLCTB4MDgwMAkvKiBHRlNLIGNoYW5uZWwgKEZIU1MgUEhZKSAq Lw0KKw0KKy8qIEZvciBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1MgKi8NCisjZGVmaW5lCUlFRUU4 MDIxMV9SQURJT1RBUF9GX0NGUAkweDAxCS8qIHNlbnQvcmVjZWl2ZWQNCisJCQkJCQkgKiBkdXJp bmcgQ0ZQDQorCQkJCQkJICovDQorI2RlZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9TSE9SVFBS RQkweDAyCS8qIHNlbnQvcmVjZWl2ZWQNCisJCQkJCQkgKiB3aXRoIHNob3J0DQorCQkJCQkJICog cHJlYW1ibGUNCisJCQkJCQkgKi8NCisjZGVmaW5lCUlFRUU4MDIxMV9SQURJT1RBUF9GX1dFUAkw eDA0CS8qIHNlbnQvcmVjZWl2ZWQNCisJCQkJCQkgKiB3aXRoIFdFUCBlbmNyeXB0aW9uDQorCQkJ CQkJICovDQorI2RlZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9GUkFHCTB4MDgJLyogc2VudC9y ZWNlaXZlZA0KKwkJCQkJCSAqIHdpdGggZnJhZ21lbnRhdGlvbg0KKwkJCQkJCSAqLw0KKyNkZWZp bmUJSUVFRTgwMjExX1JBRElPVEFQX0ZfRkNTCTB4MTAJLyogZnJhbWUgaW5jbHVkZXMgRkNTICov DQorI2RlZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9EQVRBUEFECTB4MjAJLyogZnJhbWUgaGFz IHBhZGRpbmcgYmV0d2Vlbg0KKwkJCQkJCSAqIDgwMi4xMSBoZWFkZXIgYW5kIHBheWxvYWQNCisJ CQkJCQkgKiAodG8gMzItYml0IGJvdW5kYXJ5KQ0KKwkJCQkJCSAqLw0KKyNkZWZpbmUgSUVFRTgw MjExX1JBRElPVEFQX0ZfQkFERkNTCTB4NDAJLyogZnJhbWUgZmFpbGVkIEZDUyBjaGVjayAqLw0K Kw0KKy8qIEZvciBJRUVFODAyMTFfUkFESU9UQVBfUlhfRkxBR1MgKi8NCisjZGVmaW5lIElFRUU4 MDIxMV9SQURJT1RBUF9GX1JYX0JBRFBMQ1AJMHgwMDAyIC8qIGJhZCBQTENQICovDQorDQorLyog Rm9yIElFRUU4MDIxMV9SQURJT1RBUF9UWF9GTEFHUyAqLw0KKyNkZWZpbmUgSUVFRTgwMjExX1JB RElPVEFQX0ZfVFhfRkFJTAkweDAwMDEJLyogZmFpbGVkIGR1ZSB0byBleGNlc3NpdmUNCisJCQkJ CQkgKiByZXRyaWVzICovDQorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfRl9UWF9DVFMJMHgw MDAyCS8qIHVzZWQgY3RzICdwcm90ZWN0aW9uJyAqLw0KKyNkZWZpbmUgSUVFRTgwMjExX1JBRElP VEFQX0ZfVFhfUlRTCTB4MDAwNAkvKiB1c2VkIHJ0cy9jdHMgaGFuZHNoYWtlICovDQorDQorI2Vu ZGlmCQkJCS8qIElFRUU4MDIxMV9SQURJT1RBUF9IICovDQotLS0gL2Rldi9udWxsCTE5NzAtMDEt MDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwDQorKysgdHJ1bmsvZXBhbi9kaXNzZWN0b3JzL3Bh Y2tldC1yYWRpb3RhcC1pdGVyLmMJMjAwOS0xMS0yNiAxODo1Mzo1My4wMDAwMDAwMDAgKzAxMDAN CkBAIC0wLDAgKzEsMzc4IEBADQorLyoNCisgKiBSYWRpb3RhcCBwYXJzZXINCisgKg0KKyAqIENv cHlyaWdodCAyMDA3CQlBbmR5IEdyZWVuIDxhbmR5QHdhcm1jYXQuY29tPg0KKyAqIENvcHlyaWdo dCAyMDA5CQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0Pg0KKyAqDQor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkNCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcw0KKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLg0KKyAqDQorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2Fy ZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEJTRA0KKyAqIGxpY2Vuc2Uu DQorICoNCisgKiBTZWUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqLw0KKyNpbmNsdWRl ICJwYWNrZXQtcmFkaW90YXAtaXRlci5oIg0KKyNpbmNsdWRlICJwYWNrZXQtcmFkaW90YXAtcGxh dGZvcm0uaCINCisNCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCByZWxhdGVkIGRlZnMgYXJl IGluIHJhZGlvdGFwX2l0ZXIuaCAqLw0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmFkaW90YXBf YWxpZ25fc2l6ZSBydGFwX25hbWVzcGFjZV9zaXplc1tdID0gew0KKwlbSUVFRTgwMjExX1JBRElP VEFQX1RTRlRdID0geyAuYWxpZ24gPSA4LCAuc2l6ZSA9IDgsIH0sDQorCVtJRUVFODAyMTFfUkFE SU9UQVBfRkxBR1NdID0geyAuYWxpZ24gPSAxLCAuc2l6ZSA9IDEsIH0sDQorCVtJRUVFODAyMTFf UkFESU9UQVBfUkFURV0gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0gMSwgfSwNCisJW0lFRUU4MDIx MV9SQURJT1RBUF9DSEFOTkVMXSA9IHsgLmFsaWduID0gMiwgLnNpemUgPSA0LCB9LA0KKwlbSUVF RTgwMjExX1JBRElPVEFQX0ZIU1NdID0geyAuYWxpZ24gPSAyLCAuc2l6ZSA9IDIsIH0sDQorCVtJ RUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTF0gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0g MSwgfSwNCisJW0lFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UTk9JU0VdID0geyAuYWxpZ24gPSAx LCAuc2l6ZSA9IDEsIH0sDQorCVtJRUVFODAyMTFfUkFESU9UQVBfTE9DS19RVUFMSVRZXSA9IHsg LmFsaWduID0gMiwgLnNpemUgPSAyLCB9LA0KKwlbSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVO VUFUSU9OXSA9IHsgLmFsaWduID0gMiwgLnNpemUgPSAyLCB9LA0KKwlbSUVFRTgwMjExX1JBRElP VEFQX0RCX1RYX0FUVEVOVUFUSU9OXSA9IHsgLmFsaWduID0gMiwgLnNpemUgPSAyLCB9LA0KKwlb SUVFRTgwMjExX1JBRElPVEFQX0RCTV9UWF9QT1dFUl0gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0g MSwgfSwNCisJW0lFRUU4MDIxMV9SQURJT1RBUF9BTlRFTk5BXSA9IHsgLmFsaWduID0gMSwgLnNp emUgPSAxLCB9LA0KKwlbSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVFNJR05BTF0gPSB7IC5hbGln biA9IDEsIC5zaXplID0gMSwgfSwNCisJW0lFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlROT0lTRV0g PSB7IC5hbGlnbiA9IDEsIC5zaXplID0gMSwgfSwNCisJW0lFRUU4MDIxMV9SQURJT1RBUF9SWF9G TEFHU10gPSB7IC5hbGlnbiA9IDIsIC5zaXplID0gMiwgfSwNCisJW0lFRUU4MDIxMV9SQURJT1RB UF9UWF9GTEFHU10gPSB7IC5hbGlnbiA9IDIsIC5zaXplID0gMiwgfSwNCisJW0lFRUU4MDIxMV9S QURJT1RBUF9SVFNfUkVUUklFU10gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0gMSwgfSwNCisJW0lF RUU4MDIxMV9SQURJT1RBUF9EQVRBX1JFVFJJRVNdID0geyAuYWxpZ24gPSAxLCAuc2l6ZSA9IDEs IH0sDQorCS8qDQorCSAqIGFkZCBtb3JlIGhlcmUgYXMgdGhleSBhcmUgZGVmaW5lZCBpbg0KKwkg KiBpbmNsdWRlL25ldC9pZWVlODAyMTFfcmFkaW90YXAuaA0KKwkgKi8NCit9Ow0KKw0KK3N0YXRp YyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX25hbWVzcGFjZSByYWRpb3RhcF9ucyA9 IHsNCisJLm5fYml0cyA9IHNpemVvZihydGFwX25hbWVzcGFjZV9zaXplcykgLyBzaXplb2YocnRh cF9uYW1lc3BhY2Vfc2l6ZXNbMF0pLA0KKwkuYWxpZ25fc2l6ZSA9IHJ0YXBfbmFtZXNwYWNlX3Np emVzLA0KK307DQorDQorLyoqDQorICogaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX2luaXQg LSByYWRpb3RhcCBwYXJzZXIgaXRlcmF0b3IgaW5pdGlhbGl6YXRpb24NCisgKiBAaXRlcmF0b3I6 IHJhZGlvdGFwX2l0ZXJhdG9yIHRvIGluaXRpYWxpemUNCisgKiBAcmFkaW90YXBfaGVhZGVyOiBy YWRpb3RhcCBoZWFkZXIgdG8gcGFyc2UNCisgKiBAbWF4X2xlbmd0aDogdG90YWwgbGVuZ3RoIHdl IGNhbiBwYXJzZSBpbnRvIChlZywgd2hvbGUgcGFja2V0IGxlbmd0aCkNCisgKg0KKyAqIFJldHVy bnM6IDAgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGEgcHJvYmxlbS4NCisg Kg0KKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYW4gb3BhcXVlIGl0ZXJhdG9yIHN0cnVj dCB3aGljaCBjYW4gdGhlbg0KKyAqIGJlIHBhc3NlZCB0byBpZWVlODAyMTFfcmFkaW90YXBfaXRl cmF0b3JfbmV4dCgpIHRvIHZpc2l0IGV2ZXJ5IHJhZGlvdGFwDQorICogYXJndW1lbnQgd2hpY2gg aXMgcHJlc2VudCBpbiB0aGUgaGVhZGVyLiAgSXQga25vd3MgYWJvdXQgZXh0ZW5kZWQNCisgKiBw cmVzZW50IGhlYWRlcnMgYW5kIGhhbmRsZXMgdGhlbS4NCisgKg0KKyAqIEhvdyB0byB1c2U6DQor ICogY2FsbCBfX2llZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9pbml0KCkgdG8gaW5pdCBhIHNl bWktb3BhcXVlIGl0ZXJhdG9yDQorICogc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRv ciAobm8gbmVlZCB0byBpbml0IHRoZSBzdHJ1Y3QgYmVmb3JlaGFuZCkNCisgKiBjaGVja2luZyBm b3IgYSBnb29kIDAgcmV0dXJuIGNvZGUuICBUaGVuIGxvb3AgY2FsbGluZw0KKyAqIF9faWVlZTgw MjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQoKS4uLiBpdCByZXR1cm5zIGVpdGhlciAwLA0KKyAq IC1FTk9FTlQgaWYgdGhlcmUgYXJlIG5vIG1vcmUgYXJncyB0byBwYXJzZSwgb3IgLUVJTlZBTCBp ZiB0aGVyZSBpcyBhIHByb2JsZW0uDQorICogVGhlIGl0ZXJhdG9yJ3MgQHRoaXNfYXJnIG1lbWJl ciBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBhcmd1bWVudA0KKyAqIGFzc29jaWF0ZWQgd2l0 aCB0aGUgY3VycmVudCBhcmd1bWVudCBpbmRleCB0aGF0IGlzIHByZXNlbnQsIHdoaWNoIGNhbiBi ZQ0KKyAqIGZvdW5kIGluIHRoZSBpdGVyYXRvcidzIEB0aGlzX2FyZ19pbmRleCBtZW1iZXIuICBU aGlzIGFyZyBpbmRleCBjb3JyZXNwb25kcw0KKyAqIHRvIHRoZSBJRUVFODAyMTFfUkFESU9UQVBf Li4uIGRlZmluZXMuDQorICoNCisgKiBSYWRpb3RhcCBoZWFkZXIgbGVuZ3RoOg0KKyAqIFlvdSBj YW4gZmluZCB0aGUgQ1BVLWVuZGlhbiB0b3RhbCByYWRpb3RhcCBoZWFkZXIgbGVuZ3RoIGluDQor ICogaXRlcmF0b3ItPm1heF9sZW5ndGggYWZ0ZXIgZXhlY3V0aW5nIGllZWU4MDIxMV9yYWRpb3Rh cF9pdGVyYXRvcl9pbml0KCkNCisgKiBzdWNjZXNzZnVsbHkuDQorICoNCisgKiBBbGlnbm1lbnQg R290Y2hhOg0KKyAqIFlvdSBtdXN0IHRha2UgY2FyZSB3aGVuIGRlcmVmZXJlbmNpbmcgaXRlcmF0 b3IudGhpc19hcmcNCisgKiBmb3IgbXVsdGlieXRlIHR5cGVzLi4uIHRoZSBwb2ludGVyIGlzIG5v dCBhbGlnbmVkLiAgVXNlDQorICogZ2V0X3VuYWxpZ25lZCgodHlwZSAqKWl0ZXJhdG9yLnRoaXNf YXJnKSB0byBkZXJlZmVyZW5jZQ0KKyAqIGl0ZXJhdG9yLnRoaXNfYXJnIGZvciB0eXBlICJ0eXBl IiBzYWZlbHkgb24gYWxsIGFyY2hlcy4NCisgKg0KKyAqIEV4YW1wbGUgY29kZToNCisgKiBTZWUg RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JhZGlvdGFwLWhlYWRlcnMudHh0DQorICovDQorDQor aW50IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9pbml0KA0KKwlzdHJ1Y3QgaWVlZTgwMjEx X3JhZGlvdGFwX2l0ZXJhdG9yICppdGVyYXRvciwNCisJc3RydWN0IGllZWU4MDIxMV9yYWRpb3Rh cF9oZWFkZXIgKnJhZGlvdGFwX2hlYWRlciwNCisJaW50IG1heF9sZW5ndGgsIGNvbnN0IHN0cnVj dCBpZWVlODAyMTFfcmFkaW90YXBfdmVuZG9yX25hbWVzcGFjZXMgKnZucykNCit7DQorCS8qIExp bnV4IG9ubHkgc3VwcG9ydHMgdmVyc2lvbiAwIHJhZGlvdGFwIGZvcm1hdCAqLw0KKwlpZiAocmFk aW90YXBfaGVhZGVyLT5pdF92ZXJzaW9uKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCS8qIHNh bml0eSBjaGVjayBmb3IgYWxsb3dlZCBsZW5ndGggYW5kIHJhZGlvdGFwIGxlbmd0aCBmaWVsZCAq Lw0KKwlpZiAobWF4X2xlbmd0aCA8IGdldF91bmFsaWduZWRfbGUxNigmcmFkaW90YXBfaGVhZGVy LT5pdF9sZW4pKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWl0ZXJhdG9yLT5fcnRoZWFkZXIg PSByYWRpb3RhcF9oZWFkZXI7DQorCWl0ZXJhdG9yLT5fbWF4X2xlbmd0aCA9IGdldF91bmFsaWdu ZWRfbGUxNigmcmFkaW90YXBfaGVhZGVyLT5pdF9sZW4pOw0KKwlpdGVyYXRvci0+X2FyZ19pbmRl eCA9IDA7DQorCWl0ZXJhdG9yLT5fYml0bWFwX3NoaWZ0ZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIo JnJhZGlvdGFwX2hlYWRlci0+aXRfcHJlc2VudCk7DQorCWl0ZXJhdG9yLT5fYXJnID0gKHVpbnQ4 X3QgKilyYWRpb3RhcF9oZWFkZXIgKyBzaXplb2YoKnJhZGlvdGFwX2hlYWRlcik7DQorCWl0ZXJh dG9yLT5fcmVzZXRfb25fZXh0ID0gMDsNCisJaXRlcmF0b3ItPl9uZXh0X2JpdG1hcCA9ICZyYWRp b3RhcF9oZWFkZXItPml0X3ByZXNlbnQ7DQorCWl0ZXJhdG9yLT5fbmV4dF9iaXRtYXArKzsNCisJ aXRlcmF0b3ItPl92bnMgPSB2bnM7DQorCWl0ZXJhdG9yLT5jdXJyZW50X25hbWVzcGFjZSA9ICZy YWRpb3RhcF9uczsNCisJaXRlcmF0b3ItPmlzX3JhZGlvdGFwX25zID0gMTsNCisjaWZkZWYgUkFE SU9UQVBfU1VQUE9SVF9PVkVSUklERVMNCisJaXRlcmF0b3ItPm5fb3ZlcnJpZGVzID0gMDsNCisJ aXRlcmF0b3ItPm92ZXJyaWRlcyA9IE5VTEw7DQorI2VuZGlmDQorDQorCS8qIGZpbmQgcGF5bG9h ZCBzdGFydCBhbGxvd2luZyBmb3IgZXh0ZW5kZWQgYml0bWFwKHMpICovDQorDQorCWlmIChpdGVy YXRvci0+X2JpdG1hcF9zaGlmdGVyICYgKDE8PElFRUU4MDIxMV9SQURJT1RBUF9FWFQpKSB7DQor CQl3aGlsZSAoZ2V0X3VuYWxpZ25lZF9sZTMyKGl0ZXJhdG9yLT5fYXJnKSAmDQorCQkJCQkoMSA8 PCBJRUVFODAyMTFfUkFESU9UQVBfRVhUKSkgew0KKwkJCWl0ZXJhdG9yLT5fYXJnICs9IHNpemVv Zih1aW50MzJfdCk7DQorDQorCQkJLyoNCisJCQkgKiBjaGVjayBmb3IgaW5zYW5pdHkgd2hlcmUg dGhlIHByZXNlbnQgYml0bWFwcw0KKwkJCSAqIGtlZXAgY2xhaW1pbmcgdG8gZXh0ZW5kIHVwIHRv IG9yIGV2ZW4gYmV5b25kIHRoZQ0KKwkJCSAqIHN0YXRlZCByYWRpb3RhcCBoZWFkZXIgbGVuZ3Ro DQorCQkJICovDQorDQorCQkJaWYgKCh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT5fYXJnIC0NCisJ CQkgICAgKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9ydGhlYWRlciA+DQorCQkJICAgICh1bnNp Z25lZCBsb25nKWl0ZXJhdG9yLT5fbWF4X2xlbmd0aCkNCisJCQkJcmV0dXJuIC1FSU5WQUw7DQor CQl9DQorDQorCQlpdGVyYXRvci0+X2FyZyArPSBzaXplb2YodWludDMyX3QpOw0KKw0KKwkJLyoN CisJCSAqIG5vIG5lZWQgdG8gY2hlY2sgYWdhaW4gZm9yIGJsb3dpbmcgcGFzdCBzdGF0ZWQgcmFk aW90YXANCisJCSAqIGhlYWRlciBsZW5ndGgsIGJlY2F1c2UgaWVlZTgwMjExX3JhZGlvdGFwX2l0 ZXJhdG9yX25leHQNCisJCSAqIGNoZWNrcyBpdCBiZWZvcmUgaXQgaXMgZGVyZWZlcmVuY2VkDQor CQkgKi8NCisJfQ0KKw0KKwlpdGVyYXRvci0+dGhpc19hcmcgPSBpdGVyYXRvci0+X2FyZzsNCisN CisJLyogd2UgYXJlIGFsbCBpbml0aWFsaXplZCBoYXBwaWx5ICovDQorDQorCXJldHVybiAwOw0K K30NCisNCitzdGF0aWMgdm9pZCBmaW5kX25zKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRl cmF0b3IgKml0ZXJhdG9yLA0KKwkJICAgIHVpbnQzMl90IG91aSwgdWludDhfdCBzdWJucykNCit7 DQorCWludCBpOw0KKw0KKwlpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2UgPSBOVUxMOw0KKw0K KwlpZiAoIWl0ZXJhdG9yLT5fdm5zKQ0KKwkJcmV0dXJuOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwg aXRlcmF0b3ItPl92bnMtPm5fbnM7IGkrKykgew0KKwkJaWYgKGl0ZXJhdG9yLT5fdm5zLT5uc1tp XS5vdWkgIT0gb3VpKQ0KKwkJCWNvbnRpbnVlOw0KKwkJaWYgKGl0ZXJhdG9yLT5fdm5zLT5uc1tp XS5zdWJucyAhPSBzdWJucykNCisJCQljb250aW51ZTsNCisNCisJCWl0ZXJhdG9yLT5jdXJyZW50 X25hbWVzcGFjZSA9ICZpdGVyYXRvci0+X3Zucy0+bnNbaV07DQorCQlicmVhazsNCisJfQ0KK30N CisNCisjaWZkZWYgUkFESU9UQVBfU1VQUE9SVF9PVkVSUklERVMNCitzdGF0aWMgaW50IGZpbmRf b3ZlcnJpZGUoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvciAqaXRlcmF0b3IsDQor CQkJIGludCAqYWxpZ24sIGludCAqc2l6ZSkNCit7DQorCWludCBpOw0KKw0KKwlpZiAoIWl0ZXJh dG9yLT5vdmVycmlkZXMpDQorCQlyZXR1cm4gMDsNCisNCisJZm9yIChpID0gMDsgaSA8IGl0ZXJh dG9yLT5uX292ZXJyaWRlczsgaSsrKSB7DQorCQlpZiAoaXRlcmF0b3ItPl9hcmdfaW5kZXggPT0g aXRlcmF0b3ItPm92ZXJyaWRlc1tpXS5maWVsZCkgew0KKwkJCSphbGlnbiA9IGl0ZXJhdG9yLT5v dmVycmlkZXNbaV0uYWxpZ247DQorCQkJKnNpemUgPSBpdGVyYXRvci0+b3ZlcnJpZGVzW2ldLnNp emU7DQorCQkJaWYgKCEqYWxpZ24pIC8qIGVycm9uZW91cyBvdmVycmlkZSAqLw0KKwkJCQlyZXR1 cm4gMDsNCisJCQlyZXR1cm4gMTsNCisJCX0NCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorI2Vu ZGlmDQorDQorDQorLyoqDQorICogaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQgLSBy ZXR1cm4gbmV4dCByYWRpb3RhcCBwYXJzZXIgaXRlcmF0b3IgYXJnDQorICogQGl0ZXJhdG9yOiBy YWRpb3RhcF9pdGVyYXRvciB0byBtb3ZlIHRvIG5leHQgYXJnIChpZiBhbnkpDQorICoNCisgKiBS ZXR1cm5zOiAwIGlmIHRoZXJlIGlzIGFuIGFyZ3VtZW50IHRvIGhhbmRsZSwNCisgKiAtRU5PRU5U IGlmIHRoZXJlIGFyZSBubyBtb3JlIGFyZ3Mgb3IgLUVJTlZBTA0KKyAqIGlmIHRoZXJlIGlzIHNv bWV0aGluZyBlbHNlIHdyb25nLg0KKyAqDQorICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyB0aGUg bmV4dCByYWRpb3RhcCBhcmcgaW5kZXggKElFRUU4MDIxMV9SQURJT1RBUF8qKQ0KKyAqIGluIEB0 aGlzX2FyZ19pbmRleCBhbmQgc2V0cyBAdGhpc19hcmcgdG8gcG9pbnQgdG8gdGhlDQorICogcGF5 bG9hZCBmb3IgdGhlIGZpZWxkLiAgSXQgdGFrZXMgY2FyZSBvZiBhbGlnbm1lbnQgaGFuZGxpbmcg YW5kIGV4dGVuZGVkDQorICogcHJlc2VudCBmaWVsZHMuICBAdGhpc19hcmcgY2FuIGJlIGNoYW5n ZWQgYnkgdGhlIGNhbGxlciAoZWcsDQorICogaW5jcmVtZW50ZWQgdG8gbW92ZSBpbnNpZGUgYSBj b21wb3VuZCBhcmd1bWVudCBsaWtlDQorICogSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUwpLiAg VGhlIGFyZ3MgcG9pbnRlZCB0byBhcmUgaW4NCisgKiBsaXR0bGUtZW5kaWFuIGZvcm1hdCB3aGF0 ZXZlciB0aGUgZW5kaWFuZXNzIG9mIHlvdXIgQ1BVLg0KKyAqDQorICogQWxpZ25tZW50IEdvdGNo YToNCisgKiBZb3UgbXVzdCB0YWtlIGNhcmUgd2hlbiBkZXJlZmVyZW5jaW5nIGl0ZXJhdG9yLnRo aXNfYXJnDQorICogZm9yIG11bHRpYnl0ZSB0eXBlcy4uLiB0aGUgcG9pbnRlciBpcyBub3QgYWxp Z25lZC4gIFVzZQ0KKyAqIGdldF91bmFsaWduZWQoKHR5cGUgKilpdGVyYXRvci50aGlzX2FyZykg dG8gZGVyZWZlcmVuY2UNCisgKiBpdGVyYXRvci50aGlzX2FyZyBmb3IgdHlwZSAidHlwZSIgc2Fm ZWx5IG9uIGFsbCBhcmNoZXMuDQorICovDQorDQoraW50IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVy YXRvcl9uZXh0KA0KKwlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yICppdGVyYXRv cikNCit7DQorCXdoaWxlICgxKSB7DQorCQlpbnQgaGl0ID0gMDsNCisJCWludCBwYWQsIGFsaWdu LCBzaXplLCBzdWJucywgdm5zbGVuOw0KKwkJdWludDMyX3Qgb3VpOw0KKw0KKwkJLyogaWYgbm8g bW9yZSBFWFQgYml0cywgdGhhdCdzIGl0ICovDQorCQlpZiAoKGl0ZXJhdG9yLT5fYXJnX2luZGV4 ICUgMzIpID09IElFRUU4MDIxMV9SQURJT1RBUF9FWFQgJiYNCisJCSAgICAhKGl0ZXJhdG9yLT5f Yml0bWFwX3NoaWZ0ZXIgJiAxKSkNCisJCQlyZXR1cm4gLUVOT0VOVDsNCisNCisJCWlmICghKGl0 ZXJhdG9yLT5fYml0bWFwX3NoaWZ0ZXIgJiAxKSkNCisJCQlnb3RvIG5leHRfZW50cnk7IC8qIGFy ZyBub3QgcHJlc2VudCAqLw0KKw0KKwkJLyogZ2V0IGFsaWdubWVudC9zaXplIG9mIGRhdGEgKi8N CisJCXN3aXRjaCAoaXRlcmF0b3ItPl9hcmdfaW5kZXggJSAzMikgew0KKwkJY2FzZSBJRUVFODAy MTFfUkFESU9UQVBfUkFESU9UQVBfTkFNRVNQQUNFOg0KKwkJY2FzZSBJRUVFODAyMTFfUkFESU9U QVBfRVhUOg0KKwkJCWFsaWduID0gMTsNCisJCQlzaXplID0gMDsNCisJCQlicmVhazsNCisJCWNh c2UgSUVFRTgwMjExX1JBRElPVEFQX1ZFTkRPUl9OQU1FU1BBQ0U6DQorCQkJYWxpZ24gPSAyOw0K KwkJCXNpemUgPSA2Ow0KKwkJCWJyZWFrOw0KKwkJZGVmYXVsdDoNCisjaWZkZWYgUkFESU9UQVBf U1VQUE9SVF9PVkVSUklERVMNCisJCQlpZiAoZmluZF9vdmVycmlkZShpdGVyYXRvciwgJmFsaWdu LCAmc2l6ZSkpIHsNCisJCQkJLyogYWxsIHNldCAqLw0KKwkJCX0gZWxzZQ0KKyNlbmRpZg0KKwkJ CWlmICghaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlIHx8DQorCQkJICAgIGl0ZXJhdG9yLT5f YXJnX2luZGV4ID49IGl0ZXJhdG9yLT5jdXJyZW50X25hbWVzcGFjZS0+bl9iaXRzKSB7DQorCQkJ CWlmIChpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2UgPT0gJnJhZGlvdGFwX25zKQ0KKwkJCQkJ cmV0dXJuIC1FTk9FTlQ7DQorCQkJCWFsaWduID0gMDsNCisJCQl9IGVsc2Ugew0KKwkJCQlhbGln biA9IGl0ZXJhdG9yLT5jdXJyZW50X25hbWVzcGFjZS0+YWxpZ25fc2l6ZVtpdGVyYXRvci0+X2Fy Z19pbmRleF0uYWxpZ247DQorCQkJCXNpemUgPSBpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2Ut PmFsaWduX3NpemVbaXRlcmF0b3ItPl9hcmdfaW5kZXhdLnNpemU7DQorCQkJfQ0KKwkJCWlmICgh YWxpZ24pIHsNCisJCQkJLyogc2tpcCBhbGwgc3Vic2VxdWVudCBkYXRhICovDQorCQkJCWl0ZXJh dG9yLT5fYXJnID0gaXRlcmF0b3ItPl9uZXh0X25zX2RhdGE7DQorCQkJCS8qIGdpdmUgdXAgb24g dGhpcyBuYW1lc3BhY2UgKi8NCisJCQkJaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlID0gTlVM TDsNCisJCQkJZ290byBuZXh0X2VudHJ5Ow0KKwkJCX0NCisJCQlicmVhazsNCisJCX0NCisNCisJ CS8qDQorCQkgKiBhcmcgaXMgcHJlc2VudCwgYWNjb3VudCBmb3IgYWxpZ25tZW50IHBhZGRpbmcN CisJCSAqDQorCQkgKiBOb3RlIHRoYXQgdGhlc2UgYWxpZ25tZW50cyBhcmUgcmVsYXRpdmUgdG8g dGhlIHN0YXJ0DQorCQkgKiBvZiB0aGUgcmFkaW90YXAgaGVhZGVyLiAgVGhlcmUgaXMgbm8gZ3Vh cmFudGVlDQorCQkgKiB0aGF0IHRoZSByYWRpb3RhcCBoZWFkZXIgaXRzZWxmIGlzIGFsaWduZWQg b24gYW55DQorCQkgKiBraW5kIG9mIGJvdW5kYXJ5Lg0KKwkJICoNCisJCSAqIFRoZSBhYm92ZSBp cyB3aHkgZ2V0X3VuYWxpZ25lZCgpIGlzIHVzZWQgdG8gZGVyZWZlcmVuY2UNCisJCSAqIG11bHRp Ynl0ZSBlbGVtZW50cyBmcm9tIHRoZSByYWRpb3RhcCBhcmVhLg0KKwkJICovDQorDQorCQlwYWQg PSAoKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9hcmcgLQ0KKwkJICAgICAgICh1bnNpZ25lZCBs b25nKWl0ZXJhdG9yLT5fcnRoZWFkZXIpICYgKGFsaWduIC0gMSk7DQorDQorCQlpZiAocGFkKQ0K KwkJCWl0ZXJhdG9yLT5fYXJnICs9IGFsaWduIC0gcGFkOw0KKw0KKwkJLyoNCisJCSAqIHRoaXMg aXMgd2hhdCB3ZSB3aWxsIHJldHVybiB0byB1c2VyLCBidXQgd2UgbmVlZCB0bw0KKwkJICogbW92 ZSBvbiBmaXJzdCBzbyBuZXh0IGNhbGwgaGFzIHNvbWV0aGluZyBmcmVzaCB0byB0ZXN0DQorCQkg Ki8NCisJCWl0ZXJhdG9yLT50aGlzX2FyZ19pbmRleCA9IGl0ZXJhdG9yLT5fYXJnX2luZGV4Ow0K KwkJaXRlcmF0b3ItPnRoaXNfYXJnID0gaXRlcmF0b3ItPl9hcmc7DQorCQlpdGVyYXRvci0+dGhp c19hcmdfc2l6ZSA9IHNpemU7DQorDQorCQkvKiBpbnRlcm5hbGx5IG1vdmUgb24gdGhlIHNpemUg b2YgdGhpcyBhcmcgKi8NCisJCWl0ZXJhdG9yLT5fYXJnICs9IHNpemU7DQorDQorCQkvKg0KKwkJ ICogY2hlY2sgZm9yIGluc2FuaXR5IHdoZXJlIHdlIGFyZSBnaXZlbiBhIGJpdG1hcCB0aGF0DQor CQkgKiBjbGFpbXMgdG8gaGF2ZSBtb3JlIGFyZyBjb250ZW50IHRoYW4gdGhlIGxlbmd0aCBvZiB0 aGUNCisJCSAqIHJhZGlvdGFwIHNlY3Rpb24uICBXZSB3aWxsIG5vcm1hbGx5IGVuZCB1cCBlcXVh bGxpbmcgdGhpcw0KKwkJICogbWF4X2xlbmd0aCBvbiB0aGUgbGFzdCBhcmcsIG5ldmVyIGV4Y2Vl ZGluZyBpdC4NCisJCSAqLw0KKw0KKwkJaWYgKCh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT5fYXJn IC0NCisJCSAgICAodW5zaWduZWQgbG9uZylpdGVyYXRvci0+X3J0aGVhZGVyID4NCisJCSAgICAo dW5zaWduZWQgbG9uZylpdGVyYXRvci0+X21heF9sZW5ndGgpDQorCQkJcmV0dXJuIC1FSU5WQUw7 DQorDQorCQkvKiB0aGVzZSBzcGVjaWFsIG9uZXMgYXJlIHZhbGlkIGluIGVhY2ggYml0bWFwIHdv cmQgKi8NCisJCXN3aXRjaCAoaXRlcmF0b3ItPl9hcmdfaW5kZXggJSAzMikgew0KKwkJY2FzZSBJ RUVFODAyMTFfUkFESU9UQVBfVkVORE9SX05BTUVTUEFDRToNCisJCQlpdGVyYXRvci0+X2JpdG1h cF9zaGlmdGVyID4+PSAxOw0KKwkJCWl0ZXJhdG9yLT5fYXJnX2luZGV4Kys7DQorDQorCQkJaXRl cmF0b3ItPl9yZXNldF9vbl9leHQgPSAxOw0KKw0KKwkJCXZuc2xlbiA9IGdldF91bmFsaWduZWRf bGUxNihpdGVyYXRvci0+dGhpc19hcmcgKyA0KTsNCisJCQlpdGVyYXRvci0+X25leHRfbnNfZGF0 YSA9IGl0ZXJhdG9yLT5fYXJnICsgdm5zbGVuOw0KKwkJCW91aSA9ICgqaXRlcmF0b3ItPnRoaXNf YXJnIDw8IDE2KSB8DQorCQkJCSgqKGl0ZXJhdG9yLT50aGlzX2FyZyArIDEpIDw8IDgpIHwNCisJ CQkJKihpdGVyYXRvci0+dGhpc19hcmcgKyAyKTsNCisJCQlzdWJucyA9ICooaXRlcmF0b3ItPnRo aXNfYXJnICsgMyk7DQorDQorCQkJZmluZF9ucyhpdGVyYXRvciwgb3VpLCBzdWJucyk7DQorDQor CQkJaXRlcmF0b3ItPmlzX3JhZGlvdGFwX25zID0gMDsNCisJCQkvKiBhbGxvdyBwYXJzZXJzIHRv IHNob3cgdGhpcyBpbmZvcm1hdGlvbiAqLw0KKwkJCWl0ZXJhdG9yLT50aGlzX2FyZ19pbmRleCA9 DQorCQkJCUlFRUU4MDIxMV9SQURJT1RBUF9WRU5ET1JfTkFNRVNQQUNFOw0KKwkJCWl0ZXJhdG9y LT50aGlzX2FyZ19zaXplICs9IHZuc2xlbjsNCisJCQlpZiAoKHVuc2lnbmVkIGxvbmcpaXRlcmF0 b3ItPnRoaXNfYXJnICsNCisJCQkgICAgaXRlcmF0b3ItPnRoaXNfYXJnX3NpemUgLQ0KKwkJCSAg ICAodW5zaWduZWQgbG9uZylpdGVyYXRvci0+X3J0aGVhZGVyID4NCisJCQkgICAgKHVuc2lnbmVk IGxvbmcpKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9tYXhfbGVuZ3RoKQ0KKwkJCQlyZXR1cm4g LUVJTlZBTDsNCisJCQloaXQgPSAxOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBJRUVFODAyMTFfUkFE SU9UQVBfUkFESU9UQVBfTkFNRVNQQUNFOg0KKwkJCWl0ZXJhdG9yLT5fYml0bWFwX3NoaWZ0ZXIg Pj49IDE7DQorCQkJaXRlcmF0b3ItPl9hcmdfaW5kZXgrKzsNCisNCisJCQlpdGVyYXRvci0+X3Jl c2V0X29uX2V4dCA9IDE7DQorCQkJaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlID0gJnJhZGlv dGFwX25zOw0KKwkJCWl0ZXJhdG9yLT5pc19yYWRpb3RhcF9ucyA9IDE7DQorCQkJYnJlYWs7DQor CQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9FWFQ6DQorCQkJLyoNCisJCQkgKiBiaXQgMzEgd2Fz IHNldCwgdGhlcmUgaXMgbW9yZQ0KKwkJCSAqIC0tIG1vdmUgdG8gbmV4dCB1MzIgYml0bWFwDQor CQkJICovDQorCQkJaXRlcmF0b3ItPl9iaXRtYXBfc2hpZnRlciA9DQorCQkJCWdldF91bmFsaWdu ZWRfbGUzMihpdGVyYXRvci0+X25leHRfYml0bWFwKTsNCisJCQlpdGVyYXRvci0+X25leHRfYml0 bWFwKys7DQorCQkJaWYgKGl0ZXJhdG9yLT5fcmVzZXRfb25fZXh0KQ0KKwkJCQlpdGVyYXRvci0+ X2FyZ19pbmRleCA9IDA7DQorCQkJZWxzZQ0KKwkJCQlpdGVyYXRvci0+X2FyZ19pbmRleCsrOw0K KwkJCWl0ZXJhdG9yLT5fcmVzZXRfb25fZXh0ID0gMDsNCisJCQlicmVhazsNCisJCWRlZmF1bHQ6 DQorCQkJLyogd2UndmUgZ290IGEgaGl0ISAqLw0KKwkJCWhpdCA9IDE7DQorIG5leHRfZW50cnk6 DQorCQkJaXRlcmF0b3ItPl9iaXRtYXBfc2hpZnRlciA+Pj0gMTsNCisJCQlpdGVyYXRvci0+X2Fy Z19pbmRleCsrOw0KKwkJfQ0KKw0KKwkJLyogaWYgd2UgZm91bmQgYSB2YWxpZCBhcmcgZWFybGll ciwgcmV0dXJuIGl0IG5vdyAqLw0KKwkJaWYgKGhpdCkNCisJCQlyZXR1cm4gMDsNCisJfQ0KK30N Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDANCisrKyB0 cnVuay9lcGFuL2Rpc3NlY3RvcnMvcGFja2V0LXJhZGlvdGFwLWl0ZXIuaAkyMDA5LTExLTI2IDE4 OjUzOjUzLjAwMDAwMDAwMCArMDEwMA0KQEAgLTAsMCArMSw5NiBAQA0KKyNpZm5kZWYgX19SQURJ T1RBUF9JVEVSX0gNCisjZGVmaW5lIF9fUkFESU9UQVBfSVRFUl9IDQorDQorI2luY2x1ZGUgPHN0 ZGludC5oPg0KKyNpbmNsdWRlICJwYWNrZXQtcmFkaW90YXAtZGVmcy5oIg0KKw0KKy8qIFJhZGlv dGFwIGhlYWRlciBpdGVyYXRpb24NCisgKiAgIGltcGxlbWVudGVkIGluIHJhZGlvdGFwLmMNCisg Ki8NCisNCitzdHJ1Y3QgcmFkaW90YXBfb3ZlcnJpZGUgew0KKwl1aW50OF90IGZpZWxkOw0KKwl1 aW50OF90IGFsaWduOjQsIHNpemU6NDsNCit9Ow0KKw0KK3N0cnVjdCByYWRpb3RhcF9hbGlnbl9z aXplIHsNCisJdWludDhfdCBhbGlnbjo0LCBzaXplOjQ7DQorfTsNCisNCitzdHJ1Y3QgaWVlZTgw MjExX3JhZGlvdGFwX25hbWVzcGFjZSB7DQorCWNvbnN0IHN0cnVjdCByYWRpb3RhcF9hbGlnbl9z aXplICphbGlnbl9zaXplOw0KKwlpbnQgbl9iaXRzOw0KKwl1aW50MzJfdCBvdWk7DQorCXVpbnQ4 X3Qgc3VibnM7DQorfTsNCisNCitzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX3ZlbmRvcl9uYW1l c3BhY2VzIHsNCisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9uYW1lc3BhY2UgKm5z Ow0KKwlpbnQgbl9uczsNCit9Ow0KKw0KKy8qKg0KKyAqIHN0cnVjdCBpZWVlODAyMTFfcmFkaW90 YXBfaXRlcmF0b3IgLSB0cmFja3Mgd2FsayB0aHJ1IHByZXNlbnQgcmFkaW90YXAgYXJncw0KKyAq IEB0aGlzX2FyZ19pbmRleDogaW5kZXggb2YgY3VycmVudCBhcmcsIHZhbGlkIGFmdGVyIGVhY2gg c3VjY2Vzc2Z1bCBjYWxsDQorICoJdG8gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQo KQ0KKyAqIEB0aGlzX2FyZzogcG9pbnRlciB0byBjdXJyZW50IHJhZGlvdGFwIGFyZzsgaXQgaXMg dmFsaWQgYWZ0ZXIgZWFjaA0KKyAqCWNhbGwgdG8gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9y X25leHQoKSBidXQgYWxzbyBhZnRlcg0KKyAqCWllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9p bml0KCkgd2hlcmUgaXQgd2lsbCBwb2ludCB0bw0KKyAqCXRoZSBiZWdpbm5pbmcgb2YgdGhlIGFj dHVhbCBkYXRhIHBvcnRpb24NCisgKiBAdGhpc19hcmdfc2l6ZTogbGVuZ3RoIG9mIHRoZSBjdXJy ZW50IGFyZywgZm9yIGNvbnZlbmllbmNlDQorICogQGN1cnJlbnRfbmFtZXNwYWNlOiBwb2ludGVy IHRvIHRoZSBjdXJyZW50IG5hbWVzcGFjZSBkZWZpbml0aW9uDQorICoJKG9yIGludGVybmFsbHkg JU5VTEwgaWYgdGhlIGN1cnJlbnQgbmFtZXNwYWNlIGlzIHVua25vd24pDQorICogQGlzX3JhZGlv dGFwX25zOiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY3VycmVudCBuYW1lc3BhY2UgaXMgdGhlIGRl ZmF1bHQNCisgKglyYWRpb3RhcCBuYW1lc3BhY2Ugb3Igbm90DQorICoNCisgKiBAb3ZlcnJpZGVz OiBvdmVycmlkZSBzdGFuZGFyZCByYWRpb3RhcCBmaWVsZHMNCisgKiBAbl9vdmVycmlkZXM6IG51 bWJlciBvZiBvdmVycmlkZXMNCisgKg0KKyAqIEBfcnRoZWFkZXI6IHBvaW50ZXIgdG8gdGhlIHJh ZGlvdGFwIGhlYWRlciB3ZSBhcmUgd2Fsa2luZyB0aHJvdWdoDQorICogQF9tYXhfbGVuZ3RoOiBs ZW5ndGggb2YgcmFkaW90YXAgaGVhZGVyIGluIGNwdSBieXRlIG9yZGVyaW5nDQorICogQF9hcmdf aW5kZXg6IG5leHQgYXJndW1lbnQgaW5kZXgNCisgKiBAX2FyZzogbmV4dCBhcmd1bWVudCBwb2lu dGVyDQorICogQF9uZXh0X2JpdG1hcDogaW50ZXJuYWwgcG9pbnRlciB0byBuZXh0IHByZXNlbnQg dTMyDQorICogQF9iaXRtYXBfc2hpZnRlcjogaW50ZXJuYWwgc2hpZnRlciBmb3IgY3VyciB1MzIg Yml0bWFwLCBiMCBzZXQgPT0gYXJnIHByZXNlbnQNCisgKiBAX3ZuczogdmVuZG9yIG5hbWVzcGFj ZSBkZWZpbml0aW9ucw0KKyAqIEBfbmV4dF9uc19kYXRhOiBiZWdpbm5pbmcgb2YgdGhlIG5leHQg bmFtZXNwYWNlJ3MgZGF0YQ0KKyAqIEBfcmVzZXRfb25fZXh0OiBpbnRlcm5hbDsgcmVzZXQgdGhl IGFyZyBpbmRleCB0byAwIHdoZW4gZ29pbmcgdG8gdGhlDQorICoJbmV4dCBiaXRtYXAgd29yZA0K KyAqDQorICogRGVzY3JpYmVzIHRoZSByYWRpb3RhcCBwYXJzZXIgc3RhdGUuIEZpZWxkcyBwcmVm aXhlZCB3aXRoIGFuIHVuZGVyc2NvcmUNCisgKiBtdXN0IG5vdCBiZSB1c2VkIGJ5IHVzZXJzIG9m IHRoZSBwYXJzZXIsIG9ubHkgYnkgdGhlIHBhcnNlciBpbnRlcm5hbGx5Lg0KKyAqLw0KKw0KK3N0 cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3Igew0KKwlzdHJ1Y3QgaWVlZTgwMjExX3Jh ZGlvdGFwX2hlYWRlciAqX3J0aGVhZGVyOw0KKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlv dGFwX3ZlbmRvcl9uYW1lc3BhY2VzICpfdm5zOw0KKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Jh ZGlvdGFwX25hbWVzcGFjZSAqY3VycmVudF9uYW1lc3BhY2U7DQorDQorCXVuc2lnbmVkIGNoYXIg Kl9hcmcsICpfbmV4dF9uc19kYXRhOw0KKwl1aW50MzJfdCAqX25leHRfYml0bWFwOw0KKw0KKwl1 bnNpZ25lZCBjaGFyICp0aGlzX2FyZzsNCisjaWZkZWYgUkFESU9UQVBfU1VQUE9SVF9PVkVSUklE RVMNCisJY29uc3Qgc3RydWN0IHJhZGlvdGFwX292ZXJyaWRlICpvdmVycmlkZXM7DQorCWludCBu X292ZXJyaWRlczsNCisjZW5kaWYNCisJaW50IHRoaXNfYXJnX2luZGV4Ow0KKwlpbnQgdGhpc19h cmdfc2l6ZTsNCisNCisJaW50IGlzX3JhZGlvdGFwX25zOw0KKw0KKwlpbnQgX21heF9sZW5ndGg7 DQorCWludCBfYXJnX2luZGV4Ow0KKwl1aW50MzJfdCBfYml0bWFwX3NoaWZ0ZXI7DQorCWludCBf cmVzZXRfb25fZXh0Ow0KK307DQorDQorZXh0ZXJuIGludCBpZWVlODAyMTFfcmFkaW90YXBfaXRl cmF0b3JfaW5pdCgNCisJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvciAqaXRlcmF0 b3IsDQorCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpyYWRpb3RhcF9oZWFkZXIs DQorCWludCBtYXhfbGVuZ3RoLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX3ZlbmRv cl9uYW1lc3BhY2VzICp2bnMpOw0KKw0KK2V4dGVybiBpbnQgaWVlZTgwMjExX3JhZGlvdGFwX2l0 ZXJhdG9yX25leHQoDQorCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJh dG9yKTsNCisNCisjZW5kaWYgLyogX19SQURJT1RBUF9JVEVSX0ggKi8NCi0tLSB0cnVuay5vcmln L2VwYW4vZGlzc2VjdG9ycy9NYWtlZmlsZS5hbQkyMDA5LTExLTI2IDE4OjUwOjUxLjAwMDAwMDAw MCArMDEwMA0KKysrIHRydW5rL2VwYW4vZGlzc2VjdG9ycy9NYWtlZmlsZS5hbQkyMDA5LTExLTI2 IDE4OjUzOjUzLjAwMDAwMDAwMCArMDEwMA0KQEAgLTQwLDcgKzQwLDcgQEAgbGliZGlzc2VjdG9y c19sYV9TT1VSQ0VTID0gXA0KIAkkKEFTTjFfRElTU0VDVE9SX1NSQykgXA0KIAkkKFBJRExfRElT U0VDVE9SX1NSQykgXA0KIAkkKERJU1NFQ1RPUl9TVVBQT1JUX1NSQykNCi1saWJkaXNzZWN0b3Jz X2xhX0NGTEFHUyA9ICQoQU1fQ0xFQU5fQ0ZMQUdTKQ0KK2xpYmRpc3NlY3RvcnNfbGFfQ0ZMQUdT ID0gJChBTV9DTEVBTl9DRkxBR1MpIC1EUkFESU9UQVBfU1VQUE9SVF9PVkVSUklERVMNCiANCiAN CiBFWFRSQV9ESVNUID0gXA0KLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAw MDAwMCArMDAwMA0KKysrIHRydW5rL2VwYW4vZGlzc2VjdG9ycy9wYWNrZXQtcmFkaW90YXAtcGxh dGZvcm0uaAkyMDA5LTExLTI2IDE4OjUzOjUzLjAwMDAwMDAwMCArMDEwMA0KQEAgLTAsMCArMSw5 IEBADQorI2luY2x1ZGUgPHN0ZGRlZi5oPg0KKyNpbmNsdWRlIDxlcnJuby5oPg0KKyNpbmNsdWRl IDxnbGliLmg+DQorI2luY2x1ZGUgInBpbnQuaCINCisNCisjZGVmaW5lIGxlMTZfdG9fY3B1CQlH SU5UMTZfRlJPTV9MRQ0KKyNkZWZpbmUgbGUzMl90b19jcHUJCUdJTlQzMl9GUk9NX0xFDQorI2Rl ZmluZSBnZXRfdW5hbGlnbmVkX2xlMTYJcGxldG9ocw0KKyNkZWZpbmUgZ2V0X3VuYWxpZ25lZF9s ZTMyCXBsZXRvaGwNCi0tLSB0cnVuay5vcmlnL2VwYW4vZGlzc2VjdG9ycy9wYWNrZXQtcmFkaW90 YXAuYwkyMDA5LTExLTI2IDE4OjUwOjUxLjAwMDAwMDAwMCArMDEwMA0KKysrIHRydW5rL2VwYW4v ZGlzc2VjdG9ycy9wYWNrZXQtcmFkaW90YXAuYwkyMDA5LTExLTI2IDE4OjUzOjUzLjAwMDAwMDAw MCArMDEwMA0KQEAgLTI5LDggKzI5LDExIEBADQogIyBpbmNsdWRlICJjb25maWcuaCINCiAjZW5k aWYNCiANCisjaW5jbHVkZSA8c3RkaW8uaD4NCisNCiAjaW5jbHVkZSA8Z2xpYi5oPg0KICNpbmNs dWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSA8ZXJybm8uaD4NCiANCiAjaW5jbHVkZSA8ZXBhbi9w YWNrZXQuaD4NCiAjaW5jbHVkZSA8ZXBhbi9jcmMzMi5oPg0KQEAgLTM5LDYgKzQyLDE1IEBADQog I2luY2x1ZGUgPGVwYW4vcHJlZnMuaD4NCiAjaW5jbHVkZSAicGFja2V0LWllZWU4MDIxMS5oIg0K ICNpbmNsdWRlICJwYWNrZXQtcmFkaW90YXAuaCINCisjaW5jbHVkZSAicGFja2V0LXJhZGlvdGFw LWl0ZXIuaCINCisjaW5jbHVkZSAicGFja2V0LXJhZGlvdGFwLWRlZnMuaCINCisNCisvKiBub3Qg b2ZmaWNpYWxseSBkZWZpbmVkICh5ZXQpICovDQorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBf Rl9TSE9SVEdJCTB4ODANCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9YQ0hBTk5FTAkxOA0K KyNkZWZpbmUgSUVFRTgwMjExX0NIQU5fSFQyMAkJMHgxMDAwMAkvKiBIVCAyMCBjaGFubmVsICov DQorI2RlZmluZSBJRUVFODAyMTFfQ0hBTl9IVDQwVQkJMHgyMDAwMAkvKiBIVCA0MCBjaGFubmVs IHcvIGV4dCBhYm92ZSAqLw0KKyNkZWZpbmUgSUVFRTgwMjExX0NIQU5fSFQ0MEQJCTB4NDAwMDAJ LyogSFQgNDAgY2hhbm5lbCB3LyBleHQgYmVsb3cgKi8NCiANCiAvKiBPZmZpY2lhbCBzcGVjaWZj YXRpb246DQogICoNCkBAIC00OSw3MCArNjEsNiBAQA0KICAqIE5ldEJTRCdzIGllZWU4MDIxMV9y YWRpb3RhcC5oIGZpbGUNCiAgKi8NCiANCi1zdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRl ciB7DQotICAgIGd1aW50OAlpdF92ZXJzaW9uOwkvKiBWZXJzaW9uIDAuIE9ubHkgaW5jcmVhc2Vz DQotCQkJCSAqIGZvciBkcmFzdGljIGNoYW5nZXMsDQotCQkJCSAqIGludHJvZHVjdGlvbiBvZiBj b21wYXRpYmxlDQotCQkJCSAqIG5ldyBmaWVsZHMgZG9lcyBub3QgY291bnQuDQotCQkJCSAqLw0K LSAgICBndWludDgJaXRfcGFkOw0KLSAgICBndWludDE2ICAgICBpdF9sZW47ICAgICAgICAgLyog bGVuZ3RoIG9mIHRoZSB3aG9sZQ0KLQkJCQkgKiBoZWFkZXIgaW4gYnl0ZXMsIGluY2x1ZGluZw0K LQkJCQkgKiBpdF92ZXJzaW9uLCBpdF9wYWQsDQotCQkJCSAqIGl0X2xlbiwgYW5kIGRhdGEgZmll bGRzLg0KLQkJCQkgKi8NCi0jZGVmaW5lIE1BWF9QUkVTRU5UIDENCi0gICAgZ3VpbnQzMiAgIGl0 X3ByZXNlbnRbTUFYX1BSRVNFTlRdOwkvKiBBIGJpdG1hcCB0ZWxsaW5nIHdoaWNoDQotCQkJCQkg KiBmaWVsZHMgYXJlIHByZXNlbnQuIFNldCBiaXQgMzENCi0JCQkJCSAqICgweDgwMDAwMDAwKSB0 byBleHRlbmQgdGhlDQotCQkJCQkgKiBiaXRtYXAgYnkgYW5vdGhlciAzMiBiaXRzLg0KLQkJCQkJ ICogQWRkaXRpb25hbCBleHRlbnNpb25zIGFyZSBtYWRlDQotCQkJCQkgKiBieSBzZXR0aW5nIGJp dCAzMS4NCi0JCQkJCSAqLw0KLX07DQotDQotI2RlZmluZSBSQURJT1RBUF9NSU5fSEVBREVSX0xF Tgk4CS8qIG1pbmltdW0gaGVhZGVyIGxlbmd0aCAqLw0KLSNkZWZpbmUgUkFESU9UQVBfVkVSU0lP Tl9PRkZTRVQJMAkvKiBvZmZzZXQgb2YgdmVyc2lvbiBmaWVsZCAqLw0KLSNkZWZpbmUgUkFESU9U QVBfTEVOR1RIX09GRlNFVAkyCS8qIG9mZnNldCBvZiBsZW5ndGggZmllbGQgKi8NCi0jZGVmaW5l IFJBRElPVEFQX1BSRVNFTlRfT0ZGU0VUCTQJLyogb2Zmc2V0IG9mICJwcmVzZW50IiBmaWVsZCAq Lw0KLQ0KLWVudW0gaWVlZTgwMjExX3JhZGlvdGFwX3R5cGUgew0KLSAgICBJRUVFODAyMTFfUkFE SU9UQVBfVFNGVCA9IDAsDQotICAgIElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUyA9IDEsDQotICAg IElFRUU4MDIxMV9SQURJT1RBUF9SQVRFID0gMiwNCi0gICAgSUVFRTgwMjExX1JBRElPVEFQX0NI QU5ORUwgPSAzLA0KLSAgICBJRUVFODAyMTFfUkFESU9UQVBfRkhTUyA9IDQsDQotICAgIElFRUU4 MDIxMV9SQURJT1RBUF9EQk1fQU5UU0lHTkFMID0gNSwNCi0gICAgSUVFRTgwMjExX1JBRElPVEFQ X0RCTV9BTlROT0lTRSA9IDYsDQotICAgIElFRUU4MDIxMV9SQURJT1RBUF9MT0NLX1FVQUxJVFkg PSA3LA0KLSAgICBJRUVFODAyMTFfUkFESU9UQVBfVFhfQVRURU5VQVRJT04gPSA4LA0KLSAgICBJ RUVFODAyMTFfUkFESU9UQVBfREJfVFhfQVRURU5VQVRJT04gPSA5LA0KLSAgICBJRUVFODAyMTFf UkFESU9UQVBfREJNX1RYX1BPV0VSID0gMTAsDQotICAgIElFRUU4MDIxMV9SQURJT1RBUF9BTlRF Tk5BID0gMTEsDQotICAgIElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlRTSUdOQUwgPSAxMiwNCi0g ICAgSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVE5PSVNFID0gMTMsDQotICAgIElFRUU4MDIxMV9S QURJT1RBUF9SWF9GTEFHUyA9IDE0LA0KLSAgICBJRUVFODAyMTFfUkFESU9UQVBfWENIQU5ORUwg PSAxOCwNCi0gICAgSUVFRTgwMjExX1JBRElPVEFQX0VYVCA9IDMxDQotfTsNCi0NCi0vKiBDaGFu bmVsIGZsYWdzLiAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fVFVSQk8JMHgwMDAxMAkvKiBU dXJibyBjaGFubmVsICovDQotI2RlZmluZQlJRUVFODAyMTFfQ0hBTl9DQ0sJMHgwMDAyMAkvKiBD Q0sgY2hhbm5lbCAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fT0ZETQkweDAwMDQwCS8qIE9G RE0gY2hhbm5lbCAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fMkdIWgkweDAwMDgwCS8qIDIg R0h6IHNwZWN0cnVtIGNoYW5uZWwuICovDQotI2RlZmluZQlJRUVFODAyMTFfQ0hBTl81R0haCTB4 MDAxMDAJLyogNSBHSHogc3BlY3RydW0gY2hhbm5lbCAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX0NI QU5fUEFTU0lWRQkweDAwMjAwCS8qIE9ubHkgcGFzc2l2ZSBzY2FuIGFsbG93ZWQgKi8NCi0jZGVm aW5lCUlFRUU4MDIxMV9DSEFOX0RZTgkweDAwNDAwCS8qIER5bmFtaWMgQ0NLLU9GRE0gY2hhbm5l bCAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fR0ZTSwkweDAwODAwCS8qIEdGU0sgY2hhbm5l bCAoRkhTUyBQSFkpICovDQotI2RlZmluZQlJRUVFODAyMTFfQ0hBTl9HU00JMHgwMTAwMAkvKiA5 MDAgTUh6IHNwZWN0cnVtIGNoYW5uZWwgKi8NCi0jZGVmaW5lCUlFRUU4MDIxMV9DSEFOX1NUVVJC TwkweDAyMDAwCS8qIDExYSBzdGF0aWMgdHVyYm8gY2hhbm5lbCBvbmx5ICovDQotI2RlZmluZQlJ RUVFODAyMTFfQ0hBTl9IQUxGCTB4MDQwMDAJLyogSGFsZiByYXRlIGNoYW5uZWwgKi8NCi0jZGVm aW5lCUlFRUU4MDIxMV9DSEFOX1FVQVJURVIJMHgwODAwMAkvKiBRdWFydGVyIHJhdGUgY2hhbm5l bCAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fSFQyMAkweDEwMDAwCS8qIEhUIDIwIGNoYW5u ZWwgKi8NCi0jZGVmaW5lCUlFRUU4MDIxMV9DSEFOX0hUNDBVCTB4MjAwMDAJLyogSFQgNDAgY2hh bm5lbCB3LyBleHQgYWJvdmUgKi8NCi0jZGVmaW5lCUlFRUU4MDIxMV9DSEFOX0hUNDBECTB4NDAw MDAJLyogSFQgNDAgY2hhbm5lbCB3LyBleHQgYmVsb3cgKi8NCi0NCiAvKg0KICAqIFVzZWZ1bCBj b21iaW5hdGlvbnMgb2YgY2hhbm5lbCBjaGFyYWN0ZXJpc3RpY3MuDQogICovDQpAQCAtMTMzLDMx ICs4MSw2IEBAIGVudW0gaWVlZTgwMjExX3JhZGlvdGFwX3R5cGUgew0KICNkZWZpbmUJSUVFRTgw MjExX0NIQU5fMTA4UFVSRUcgXA0KIAkoSUVFRTgwMjExX0NIQU5fUFVSRUcgfCBJRUVFODAyMTFf Q0hBTl9UVVJCTykNCiANCi0vKiBGb3IgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTICovDQotI2Rl ZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9DRlAJMHgwMQkvKiBzZW50L3JlY2VpdmVkDQotCQkJ CQkJICogZHVyaW5nIENGUA0KLQkJCQkJCSAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX1JBRElPVEFQ X0ZfU0hPUlRQUkUJMHgwMgkvKiBzZW50L3JlY2VpdmVkDQotCQkJCQkJICogd2l0aCBzaG9ydA0K LQkJCQkJCSAqIHByZWFtYmxlDQotCQkJCQkJICovDQotI2RlZmluZQlJRUVFODAyMTFfUkFESU9U QVBfRl9XRVAJMHgwNAkvKiBzZW50L3JlY2VpdmVkDQotCQkJCQkJICogd2l0aCBXRVAgZW5jcnlw dGlvbg0KLQkJCQkJCSAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX1JBRElPVEFQX0ZfRlJBRwkweDA4 CS8qIHNlbnQvcmVjZWl2ZWQNCi0JCQkJCQkgKiB3aXRoIGZyYWdtZW50YXRpb24NCi0JCQkJCQkg Ki8NCi0jZGVmaW5lCUlFRUU4MDIxMV9SQURJT1RBUF9GX0ZDUwkweDEwCS8qIGZyYW1lIGluY2x1 ZGVzIEZDUyAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX1JBRElPVEFQX0ZfREFUQVBBRAkweDIwCS8q IGZyYW1lIGhhcyBwYWRkaW5nIGJldHdlZW4NCi0JCQkJCQkgKiA4MDIuMTEgaGVhZGVyIGFuZCBw YXlsb2FkDQotCQkJCQkJICogKHRvIDMyLWJpdCBib3VuZGFyeSkNCi0JCQkJCQkgKi8NCi0jZGVm aW5lCUlFRUU4MDIxMV9SQURJT1RBUF9GX0JBREZDUwkweDQwCS8qIGRvZXMgbm90IHBhc3MgRkNT IGNoZWNrICovDQotI2RlZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9TSE9SVEdJCTB4ODAJLyog SFQgc2hvcnQgR0kgKi8NCi0NCi0vKiBGb3IgSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTICov DQotI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfRl9SWF9CQURQTENQCQkweDAwMDIgLyogYmFk IFBMQ1AgKi8NCi0NCiAvKiBYWFggbmVlZCBtYXggYXJyYXkgc2l6ZSAqLw0KIHN0YXRpYyBjb25z dCBpbnQgaWVlZTgwMjExX2h0cmF0ZXNbMTZdID0gew0KIAkxMywJCS8qIElGTV9JRUVFODAyMTFf TUNTMCAqLw0KQEAgLTIyMSw5ICsxNDQsNiBAQCBzdGF0aWMgaW50IGhmX3JhZGlvdGFwX3hjaGFu bmVsX2ZsYWdzX3F1DQogc3RhdGljIGludCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19odDIw ID0gLTE7DQogc3RhdGljIGludCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19odDQwdSA9IC0x Ow0KIHN0YXRpYyBpbnQgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3NfaHQ0MGQgPSAtMTsNCi0j aWYgMA0KLXN0YXRpYyBpbnQgaGZfcmFkaW90YXBfeGNoYW5uZWxfbWF4cG93ZXIgPSAtMTsNCi0j ZW5kaWYNCiBzdGF0aWMgaW50IGhmX3JhZGlvdGFwX2Zoc3NfaG9wc2V0ID0gLTE7DQogc3RhdGlj IGludCBoZl9yYWRpb3RhcF9maHNzX3BhdHRlcm4gPSAtMTsNCiBzdGF0aWMgaW50IGhmX3JhZGlv dGFwX2RhdGFyYXRlID0gLTE7DQpAQCAtMjM1LDYgKzE1NSwxMSBAQCBzdGF0aWMgaW50IGhmX3Jh ZGlvdGFwX2RiX2FudG5vaXNlID0gLTE7DQogc3RhdGljIGludCBoZl9yYWRpb3RhcF90eF9hdHRl bnVhdGlvbiA9IC0xOw0KIHN0YXRpYyBpbnQgaGZfcmFkaW90YXBfZGJfdHhfYXR0ZW51YXRpb24g PSAtMTsNCiBzdGF0aWMgaW50IGhmX3JhZGlvdGFwX3R4cG93ZXIgPSAtMTsNCitzdGF0aWMgaW50 IGhmX3JhZGlvdGFwX3ZlbmRvcl9ucyA9IC0xOw0KK3N0YXRpYyBpbnQgaGZfcmFkaW90YXBfdmVu X291aSA9IC0xOw0KK3N0YXRpYyBpbnQgaGZfcmFkaW90YXBfdmVuX3N1Ym5zID0gLTE7DQorc3Rh dGljIGludCBoZl9yYWRpb3RhcF92ZW5fc2tpcCA9IC0xOw0KK3N0YXRpYyBpbnQgaGZfcmFkaW90 YXBfdmVuX2RhdGEgPSAtMTsNCiANCiAvKiAiUHJlc2VudCIgZmxhZ3MgKi8NCiBzdGF0aWMgaW50 IGhmX3JhZGlvdGFwX3ByZXNlbnRfdHNmdCA9IC0xOw0KQEAgLTI1NCw2ICsxNzksOCBAQCBzdGF0 aWMgaW50IGhmX3JhZGlvdGFwX3ByZXNlbnRfZGJfYW50bm9pDQogc3RhdGljIGludCBoZl9yYWRp b3RhcF9wcmVzZW50X2hkcmZjcyA9IC0xOw0KIHN0YXRpYyBpbnQgaGZfcmFkaW90YXBfcHJlc2Vu dF9yeGZsYWdzID0gLTE7DQogc3RhdGljIGludCBoZl9yYWRpb3RhcF9wcmVzZW50X3hjaGFubmVs ID0gLTE7DQorc3RhdGljIGludCBoZl9yYWRpb3RhcF9wcmVzZW50X3J0YXBfbnMgPSAtMTsNCitz dGF0aWMgaW50IGhmX3JhZGlvdGFwX3ByZXNlbnRfdmVuZG9yX25zID0gLTE7DQogc3RhdGljIGlu dCBoZl9yYWRpb3RhcF9wcmVzZW50X2V4dCA9IC0xOw0KIA0KIC8qICJwcmVzZW50LmZsYWdzIiBm bGFncyAqLw0KQEAgLTI3Nyw2ICsyMDQsNyBAQCBzdGF0aWMgZ2ludCBldHRfcmFkaW90YXBfZmxh Z3MgPSAtMTsNCiBzdGF0aWMgZ2ludCBldHRfcmFkaW90YXBfcnhmbGFncyA9IC0xOw0KIHN0YXRp YyBnaW50IGV0dF9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzID0gLTE7DQogc3RhdGljIGdpbnQgZXR0 X3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzID0gLTE7DQorc3RhdGljIGdpbnQgZXR0X3JhZGlvdGFw X3ZlbmRvciA9IC0xOw0KIA0KIHN0YXRpYyBkaXNzZWN0b3JfaGFuZGxlX3QgaWVlZTgwMjExX2hh bmRsZTsNCiBzdGF0aWMgZGlzc2VjdG9yX2hhbmRsZV90IGllZWU4MDIxMV9kYXRhcGFkX2hhbmRs ZTsNCkBAIC0zMDksMjUgKzIzNywyMSBAQCBkaXNzZWN0X3JhZGlvdGFwKHR2YnVmZl90ICp0dmIs IHBhY2tldF9pDQogICogICAgZGlzc2VjdG9ycywgc3VjaCBhcyB0Y3BkdW1wKDgpLCBleHBlY3Qg dGhlIHBhZGRpbmcuDQogICovDQogDQotLyoNCi0gKiBSZXR1cm5zIHRoZSBhbW91bnQgcmVxdWly ZWQgdG8gYWxpZ24gIm9mZnNldCIgd2l0aCAid2lkdGgiDQotICovDQotI2RlZmluZSBBTElHTl9P RkZTRVQob2Zmc2V0LCB3aWR0aCkgXA0KLSAgICAoICgoKG9mZnNldCkgKyAoKHdpZHRoKSAtIDEp KSAmICh+KCh3aWR0aCkgLSAxKSkpIC0gb2Zmc2V0ICkNCi0NCiANCiB2b2lkDQogY2FwdHVyZV9y YWRpb3RhcChjb25zdCBndWNoYXIgKnBkLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBwYWNrZXRfY291 bnRzICpsZCkNCiB7DQogICAgIGd1aW50MTYgaXRfbGVuOw0KLSAgICBndWludDMyIHByZXNlbnQ7 DQorICAgIGd1aW50MzIgcHJlc2VudCwgeHByZXNlbnQ7DQogICAgIGd1aW50OCByZmxhZ3M7DQor ICAgIHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpoZHI7DQogDQotICAgIGlmKCFC WVRFU19BUkVfSU5fRlJBTUUob2Zmc2V0LCBsZW4sIFJBRElPVEFQX01JTl9IRUFERVJfTEVOKSkg ew0KKyAgICBpZighQllURVNfQVJFX0lOX0ZSQU1FKG9mZnNldCwgbGVuLCBzaXplb2Yoc3RydWN0 IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIpKSkgew0KICAgICAgICAgbGQtPm90aGVyICsrOw0K ICAgICAgICAgcmV0dXJuOw0KICAgICB9DQotICAgIGl0X2xlbiA9IHBsZXRvaHMoJnBkW1JBRElP VEFQX0xFTkdUSF9PRkZTRVRdKTsNCisgICAgaGRyID0gKHZvaWQgKilwZDsNCisgICAgaXRfbGVu ID0gcGxldG9ocygmaGRyLT5pdF9sZW4pOw0KICAgICBpZighQllURVNfQVJFX0lOX0ZSQU1FKG9m ZnNldCwgbGVuLCBpdF9sZW4pKSB7DQogICAgICAgICBsZC0+b3RoZXIgKys7DQogICAgICAgICBy ZXR1cm47DQpAQCAtMzM5LDI4ICsyNjMsNDggQEAgY2FwdHVyZV9yYWRpb3RhcChjb25zdCBndWNo YXIgKnBkLCBpbnQgbw0KICAgICAgICAgcmV0dXJuOw0KICAgICB9DQogDQotICAgIGlmKGl0X2xl biA8IFJBRElPVEFQX01JTl9IRUFERVJfTEVOKSB7DQorICAgIGlmKGl0X2xlbiA8IHNpemVvZihz dHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlcikpIHsNCiAgICAgICAgIC8qIEhlYWRlciBs ZW5ndGggaXMgc2hvcnRlciB0aGFuIGZpeGVkLWxlbmd0aCBwb3J0aW9uIG9mIGhlYWRlciAqLw0K ICAgICAgICAgbGQtPm90aGVyICsrOw0KICAgICAgICAgcmV0dXJuOw0KICAgICB9DQogDQotICAg IHByZXNlbnQgPSBwbGV0b2hsKCZwZFtSQURJT1RBUF9QUkVTRU5UX09GRlNFVF0pOw0KLSAgICBv ZmZzZXQgKz0gUkFESU9UQVBfTUlOX0hFQURFUl9MRU47DQotICAgIGl0X2xlbiAtPSBSQURJT1RB UF9NSU5fSEVBREVSX0xFTjsNCisgICAgcHJlc2VudCA9IHBsZXRvaGwoJmhkci0+aXRfcHJlc2Vu dCk7DQorICAgIG9mZnNldCArPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFk ZXIpOw0KKyAgICBpdF9sZW4gLT0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVh ZGVyKTsNCisNCisgICAgLyogc2tpcCBvdmVyIG90aGVyIHByZXNlbnQgYml0bWFwcyAqLw0KKyAg ICB4cHJlc2VudCA9IHByZXNlbnQ7DQorICAgIHdoaWxlICh4cHJlc2VudCAmIEJJVChJRUVFODAy MTFfUkFESU9UQVBfRVhUKSkgew0KKyAgICAgICAgaWYgKCFCWVRFU19BUkVfSU5fRlJBTUUob2Zm c2V0LCA0LCBpdF9sZW4pKSB7DQorICAgICAgICAgICAgbGQtPm90aGVyICsrOw0KKyAgICAgICAg ICAgIHJldHVybjsNCisgICAgICAgIH0NCisgICAgICAgIHhwcmVzZW50ID0gcGxldG9obChwZCAr IG9mZnNldCk7DQorICAgICAgICBvZmZzZXQgKz0gNDsNCisgICAgICAgIGl0X2xlbiAtPSA0Ow0K KyAgICB9DQogDQogICAgIHJmbGFncyA9IDA7DQogDQogICAgIC8qDQotICAgICAqIElFRUU4MDIx MV9SQURJT1RBUF9UU0ZUIGlzIHRoZSBsb3dlc3Qtb3JkZXIgYml0Lg0KKyAgICAgKiBJRUVFODAy MTFfUkFESU9UQVBfVFNGVCBpcyB0aGUgbG93ZXN0LW9yZGVyIGJpdCwNCisgICAgICoganVzdCBz a2lwIG92ZXIgaXQuDQogICAgICAqLw0KICAgICBpZiAocHJlc2VudCAmIEJJVChJRUVFODAyMTFf UkFESU9UQVBfVFNGVCkpIHsNCisgICAgICAgIC8qIGFsaWduIGl0IHByb3Blcmx5ICovDQorICAg ICAgICBpZiAob2Zmc2V0ICYgNykgew0KKyAgICAgICAgICAgIGludCBwYWQgPSA4IC0gKG9mZnNl dCAmIDcpOw0KKyAgICAgICAgICAgIG9mZnNldCArPSBwYWQ7DQorICAgICAgICAgICAgaXRfbGVu IC09IHBhZDsNCisgICAgICAgIH0NCisNCiAgICAgCWlmIChpdF9sZW4gPCA4KSB7DQogCSAgICAv KiBObyByb29tIGluIGhlYWRlciBmb3IgdGhpcyBmaWVsZC4gKi8NCiAJICAgIGxkLT5vdGhlciAr KzsNCiAJICAgIHJldHVybjsNCiAJfQ0KLQkvKiBUaGF0IGZpZWxkIGlzIHByZXNlbnQsIGFuZCBp dCdzIDggYml0cyBsb25nLiAqLw0KKwkvKiBUaGF0IGZpZWxkIGlzIHByZXNlbnQsIGFuZCBpdCdz IDggYnl0ZXMgbG9uZy4gKi8NCiAJb2Zmc2V0ICs9IDg7DQogCWl0X2xlbiAtPSA4Ow0KICAgICB9 DQpAQCAtNDMxLDExNSArMzc1LDEwOSBAQCBwcm90b19yZWdpc3Rlcl9yYWRpb3RhcCh2b2lkKQ0K IAkgIkxlbmd0aCBvZiBoZWFkZXIgaW5jbHVkaW5nIHZlcnNpb24sIHBhZCwgbGVuZ3RoIGFuZCBk YXRhIGZpZWxkcyIsIEhGSUxMIH0gfSwNCiAgICAgeyAmaGZfcmFkaW90YXBfcHJlc2VudCwNCiAg ICAgICAgeyAiUHJlc2VudCBmbGFncyIsICJyYWRpb3RhcC5wcmVzZW50IiwNCi0JIEZUX1VJTlQz MiwgQkFTRV9IRVgsIE5VTEwsIDB4MCwgIkJpdG1hc2sgaW5kaWNhdGluZyB3aGljaCBmaWVsZHMg YXJlIHByZXNlbnQiLCBIRklMTCB9IH0sDQorCSBGVF9OT05FLCBCQVNFX05PTkUsIE5VTEwsIDB4 MCwgIkJpdG1hc2sgaW5kaWNhdGluZyB3aGljaCBmaWVsZHMgYXJlIHByZXNlbnQiLCBIRklMTCB9 IH0sDQogDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX1RTRlQgICAgICAgICAgICAgICAgICAweDAw MDAwMDAxDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0ZMQUdTICAgICAgICAgICAgICAgICAweDAw MDAwMDAyDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX1JBVEUgICAgICAgICAgICAgICAgICAweDAw MDAwMDA0DQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0NIQU5ORUwgICAgICAgICAgICAgICAweDAw MDAwMDA4DQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0ZIU1MgICAgICAgICAgICAgICAgICAweDAw MDAwMDEwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0RCTV9BTlRTSUdOQUwgICAgICAgICAweDAw MDAwMDIwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0RCTV9BTlROT0lTRSAgICAgICAgICAweDAw MDAwMDQwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0xPQ0tfUVVBTElUWSAgICAgICAgICAweDAw MDAwMDgwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX1RYX0FUVEVOVUFUSU9OICAgICAgICAweDAw MDAwMTAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0RCX1RYX0FUVEVOVUFUSU9OICAgICAweDAw MDAwMjAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0RCTV9UWF9BVFRFTlVBVElPTiAgICAweDAw MDAwNDAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0FOVEVOTkEgICAgICAgICAgICAgICAweDAw MDAwODAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0RCX0FOVFNJR05BTCAgICAgICAgICAweDAw MDAxMDAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0RCX0FOVE5PSVNFICAgICAgICAgICAweDAw MDAyMDAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX1JYX0ZMQUdTICAgICAgICAgICAgICAweDAw MDA0MDAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX1hDSEFOTkVMICAgICAgICAgICAgICAweDAw MDQwMDAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0VYVCAgICAgICAgICAgICAgICAgICAweDgw MDAwMDAwDQorI2RlZmluZSBSQURJT1RBUF9NQVNLKG5hbWUpCUJJVChJRUVFODAyMTFfUkFESU9U QVBfICMjbmFtZSkNCiANCiAgICAgLyogQm9vbGVhbiAncHJlc2VudCcgZmxhZ3MgKi8NCiAgICAg eyAmaGZfcmFkaW90YXBfcHJlc2VudF90c2Z0LA0KICAgICAgIHsgIlRTRlQiLCAicmFkaW90YXAu cHJlc2VudC50c2Z0IiwNCi0JRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0tfVFNG VCwNCisJRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0soVFNGVCksDQogCSJTcGVj aWZpZXMgaWYgdGhlIFRpbWUgU3luY2hyb25pemF0aW9uIEZ1bmN0aW9uIFRpbWVyIGZpZWxkIGlz IHByZXNlbnQiLCBIRklMTCB9IH0sDQogDQogICAgIHsgJmhmX3JhZGlvdGFwX3ByZXNlbnRfZmxh Z3MsDQogICAgICAgeyAiRmxhZ3MiLCAicmFkaW90YXAucHJlc2VudC5mbGFncyIsDQotCUZUX0JP T0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNLX0ZMQUdTLA0KKwlGVF9CT09MRUFOLCAzMiwg TlVMTCwgUkFESU9UQVBfTUFTSyhGTEFHUyksDQogCSJTcGVjaWZpZXMgaWYgdGhlIGNoYW5uZWwg ZmxhZ3MgZmllbGQgaXMgcHJlc2VudCIsIEhGSUxMIH0gfSwNCiANCiAgICAgeyAmaGZfcmFkaW90 YXBfcHJlc2VudF9yYXRlLA0KICAgICAgIHsgIlJhdGUiLCAicmFkaW90YXAucHJlc2VudC5yYXRl IiwNCi0JRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0tfUkFURSwNCisJRlRfQk9P TEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0soUkFURSksDQogCSJTcGVjaWZpZXMgaWYgdGhl IHRyYW5zbWl0L3JlY2VpdmUgcmF0ZSBmaWVsZCBpcyBwcmVzZW50IiwgSEZJTEwgfSB9LA0KIA0K ICAgICB7ICZoZl9yYWRpb3RhcF9wcmVzZW50X2NoYW5uZWwsDQogICAgICAgeyAiQ2hhbm5lbCIs ICJyYWRpb3RhcC5wcmVzZW50LmNoYW5uZWwiLA0KLQlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFE SU9UQVBfTUFTS19DSEFOTkVMLA0KKwlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBfTUFT SyhDSEFOTkVMKSwNCiAJIlNwZWNpZmllcyBpZiB0aGUgdHJhbnNtaXQvcmVjZWl2ZSBmcmVxdWVu Y3kgZmllbGQgaXMgcHJlc2VudCIsIEhGSUxMIH0gfSwNCiANCiAgICAgeyAmaGZfcmFkaW90YXBf cHJlc2VudF9maHNzLA0KICAgICAgIHsgIkZIU1MiLCAicmFkaW90YXAucHJlc2VudC5maHNzIiwN Ci0JRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0tfRkhTUywNCisJRlRfQk9PTEVB TiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0soRkhTUyksDQogCSJTcGVjaWZpZXMgaWYgdGhlIGhv cCBzZXQgYW5kIHBhdHRlcm4gaXMgcHJlc2VudCBmb3IgZnJlcXVlbmN5IGhvcHBpbmcgcmFkaW9z IiwgSEZJTEwgfSB9LA0KIA0KICAgICB7ICZoZl9yYWRpb3RhcF9wcmVzZW50X2RibV9hbnRzaWdu YWwsDQogICAgICAgeyAiREJNIEFudGVubmEgU2lnbmFsIiwgInJhZGlvdGFwLnByZXNlbnQuZGJt X2FudHNpZ25hbCIsDQotCUZUX0JPT0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNLX0RCTV9B TlRTSUdOQUwsDQorCUZUX0JPT0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNLKERCTV9BTlRT SUdOQUwpLA0KIAkiU3BlY2lmaWVzIGlmIHRoZSBhbnRlbm5hIHNpZ25hbCBzdHJlbmd0aCBpbiBk Qm0gaXMgcHJlc2VudCIsIEhGSUxMIH0gfSwNCiANCiAgICAgeyAmaGZfcmFkaW90YXBfcHJlc2Vu dF9kYm1fYW50bm9pc2UsDQogICAgICAgeyAiREJNIEFudGVubmEgTm9pc2UiLCAicmFkaW90YXAu cHJlc2VudC5kYm1fYW50bm9pc2UiLA0KLQlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBf TUFTS19EQk1fQU5UTk9JU0UsDQorCUZUX0JPT0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNL KERCTV9BTlROT0lTRSksDQogCSJTcGVjaWZpZXMgaWYgdGhlIFJGIG5vaXNlIHBvd2VyIGF0IGFu dGVubmEgZmllbGQgaXMgcHJlc2VudCIsIEhGSUxMIH0gfSwNCiANCiAgICAgeyAmaGZfcmFkaW90 YXBfcHJlc2VudF9sb2NrX3F1YWxpdHksDQogICAgICAgeyAiTG9jayBRdWFsaXR5IiwgInJhZGlv dGFwLnByZXNlbnQubG9ja19xdWFsaXR5IiwNCi0JRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElP VEFQX01BU0tfTE9DS19RVUFMSVRZLA0KKwlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBf TUFTSyhMT0NLX1FVQUxJVFkpLA0KIAkiU3BlY2lmaWVzIGlmIHRoZSBzaWduYWwgcXVhbGl0eSBm aWVsZCBpcyBwcmVzZW50IiwgSEZJTEwgfSB9LA0KIA0KICAgICB7ICZoZl9yYWRpb3RhcF9wcmVz ZW50X3R4X2F0dGVudWF0aW9uLA0KICAgICAgIHsgIlRYIEF0dGVudWF0aW9uIiwgInJhZGlvdGFw LnByZXNlbnQudHhfYXR0ZW51YXRpb24iLA0KLQlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9U QVBfTUFTS19UWF9BVFRFTlVBVElPTiwNCisJRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQ X01BU0soVFhfQVRURU5VQVRJT04pLA0KIAkiU3BlY2lmaWVzIGlmIHRoZSB0cmFuc21pdCBwb3dl ciBmcm9tIG1heCBwb3dlciBmaWVsZCBpcyBwcmVzZW50IiwgSEZJTEwgfSB9LA0KIA0KICAgICB7 ICZoZl9yYWRpb3RhcF9wcmVzZW50X2RiX3R4X2F0dGVudWF0aW9uLA0KICAgICAgIHsgIkRCIFRY IEF0dGVudWF0aW9uIiwgInJhZGlvdGFwLnByZXNlbnQuZGJfdHhfYXR0ZW51YXRpb24iLA0KLQlG VF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBfTUFTS19EQl9UWF9BVFRFTlVBVElPTiwNCisJ RlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0soREJfVFhfQVRURU5VQVRJT04pLA0K IAkiU3BlY2lmaWVzIGlmIHRoZSB0cmFuc21pdCBwb3dlciBmcm9tIG1heCBwb3dlciAoaW4gZEIp IGZpZWxkIGlzIHByZXNlbnQiLCBIRklMTCB9IH0sDQogDQogICAgIHsgJmhmX3JhZGlvdGFwX3By ZXNlbnRfZGJtX3R4X2F0dGVudWF0aW9uLA0KICAgICAgIHsgIkRCTSBUWCBBdHRlbnVhdGlvbiIs ICJyYWRpb3RhcC5wcmVzZW50LmRibV90eF9hdHRlbnVhdGlvbiIsDQotCUZUX0JPT0xFQU4sIDMy LCBOVUxMLCBSQURJT1RBUF9NQVNLX0RCTV9UWF9BVFRFTlVBVElPTiwNCisJRlRfQk9PTEVBTiwg MzIsIE5VTEwsIFJBRElPVEFQX01BU0soREJfVFhfQVRURU5VQVRJT04pLA0KIAkiU3BlY2lmaWVz IGlmIHRoZSB0cmFuc21pdCBwb3dlciBmcm9tIG1heCBwb3dlciAoaW4gZEJtKSBmaWVsZCBpcyBw cmVzZW50IiwgSEZJTEwgfSB9LA0KIA0KICAgICB7ICZoZl9yYWRpb3RhcF9wcmVzZW50X2FudGVu bmEsDQogICAgICAgeyAiQW50ZW5uYSIsICJyYWRpb3RhcC5wcmVzZW50LmFudGVubmEiLA0KLQlG VF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBfTUFTS19BTlRFTk5BLA0KKwlGVF9CT09MRUFO LCAzMiwgTlVMTCwgUkFESU9UQVBfTUFTSyhBTlRFTk5BKSwNCiAJIlNwZWNpZmllcyBpZiB0aGUg YW50ZW5uYSBudW1iZXIgZmllbGQgaXMgcHJlc2VudCIsIEhGSUxMIH0gfSwNCiANCiAgICAgeyAm aGZfcmFkaW90YXBfcHJlc2VudF9kYl9hbnRzaWduYWwsDQogICAgICAgeyAiREIgQW50ZW5uYSBT aWduYWwiLCAicmFkaW90YXAucHJlc2VudC5kYl9hbnRzaWduYWwiLA0KLQlGVF9CT09MRUFOLCAz MiwgTlVMTCwgUkFESU9UQVBfTUFTS19EQl9BTlRTSUdOQUwsDQorCUZUX0JPT0xFQU4sIDMyLCBO VUxMLCBSQURJT1RBUF9NQVNLKERCX0FOVFNJR05BTCksDQogCSJTcGVjaWZpZXMgaWYgdGhlIFJG IHNpZ25hbCBwb3dlciBhdCBhbnRlbm5hIGluIGRCIGZpZWxkIGlzIHByZXNlbnQiLCBIRklMTCB9 IH0sDQogDQogICAgIHsgJmhmX3JhZGlvdGFwX3ByZXNlbnRfZGJfYW50bm9pc2UsDQogICAgICAg eyAiREIgQW50ZW5uYSBOb2lzZSIsICJyYWRpb3RhcC5wcmVzZW50LmRiX2FudG5vaXNlIiwNCi0J RlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0tfREJfQU5UTk9JU0UsDQorCUZUX0JP T0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNLKERCX0FOVE5PSVNFKSwNCiAJIlNwZWNpZmll cyBpZiB0aGUgUkYgc2lnbmFsIHBvd2VyIGF0IGFudGVubmEgaW4gZEJtIGZpZWxkIGlzIHByZXNl bnQiLCBIRklMTCB9IH0sDQogDQogICAgIHsgJmhmX3JhZGlvdGFwX3ByZXNlbnRfcnhmbGFncywN CiAgICAgICB7ICJSWCBmbGFncyIsICJyYWRpb3RhcC5wcmVzZW50LnJ4ZmxhZ3MiLA0KLQlGVF9C T09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBfTUFTS19SWF9GTEFHUywNCisJRlRfQk9PTEVBTiwg MzIsIE5VTEwsIFJBRElPVEFQX01BU0soUlhfRkxBR1MpLA0KIAkiU3BlY2lmaWVzIGlmIHRoZSBS WCBmbGFncyBmaWVsZCBpcyBwcmVzZW50IiwgSEZJTEwgfSB9LA0KIA0KICAgICB7ICZoZl9yYWRp b3RhcF9wcmVzZW50X2hkcmZjcywNCiAgICAgICB7ICJGQ1MgaW4gaGVhZGVyIiwgInJhZGlvdGFw LnByZXNlbnQuZmNzIiwNCi0JRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0tfUlhf RkxBR1MsDQorCUZUX0JPT0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNLKFJYX0ZMQUdTKSwN CiAJIlNwZWNpZmllcyBpZiB0aGUgRkNTIGZpZWxkIGlzIHByZXNlbnQiLCBIRklMTCB9IH0sDQog DQogICAgIHsgJmhmX3JhZGlvdGFwX3ByZXNlbnRfeGNoYW5uZWwsDQogICAgICAgeyAiQ2hhbm5l bCsiLCAicmFkaW90YXAucHJlc2VudC54Y2hhbm5lbCIsDQotCUZUX0JPT0xFQU4sIDMyLCBOVUxM LCBSQURJT1RBUF9NQVNLX1hDSEFOTkVMLA0KKwlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9U QVBfTUFTSyhYQ0hBTk5FTCksDQogCSJTcGVjaWZpZXMgaWYgdGhlIGV4dGVuZGVkIGNoYW5uZWwg aW5mbyBmaWVsZCBpcyBwcmVzZW50IiwgSEZJTEwgfSB9LA0KIA0KKyAgICB7ICZoZl9yYWRpb3Rh cF9wcmVzZW50X3J0YXBfbnMsDQorICAgICAgeyAiUmFkaW90YXAgTlMgbmV4dCIsICJyYWRpb3Rh cC5wcmVzZW50LnJ0YXBfbnMiLA0KKwlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBfTUFT SyhSQURJT1RBUF9OQU1FU1BBQ0UpLA0KKwkiU3BlY2lmaWVzIGEgcmVzZXQgdG8gdGhlIHJhZGlv dGFwIG5hbWVzcGFjZSIsIEhGSUxMIH0gfSwNCisNCisgICAgeyAmaGZfcmFkaW90YXBfcHJlc2Vu dF92ZW5kb3JfbnMsDQorICAgICAgeyAiVmVuZG9yIE5TIG5leHQiLCAicmFkaW90YXAucHJlc2Vu dC52ZW5kb3JfbnMiLA0KKwlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBfTUFTSyhWRU5E T1JfTkFNRVNQQUNFKSwNCisJIlNwZWNpZmllcyB0aGF0IHRoZSBuZXh0IGJpdG1hcCBpcyBpbiBh IHZlbmRvciBuYW1lc3BhY2UiLCBIRklMTCB9IH0sDQorDQogICAgIHsgJmhmX3JhZGlvdGFwX3By ZXNlbnRfZXh0LA0KICAgICAgIHsgIkV4dCIsICJyYWRpb3RhcC5wcmVzZW50LmV4dCIsDQotCUZU X0JPT0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNLX0VYVCwNCisJRlRfQk9PTEVBTiwgMzIs IE5VTEwsIFJBRElPVEFQX01BU0soRVhUKSwNCiAJIlNwZWNpZmllcyBpZiB0aGVyZSBhcmUgYW55 IGV4dGVuc2lvbnMgdG8gdGhlIGhlYWRlciBwcmVzZW50IiwgSEZJTEwgfSB9LA0KIA0KICAgICAv KiBCb29sZWFuICdwcmVzZW50LmZsYWdzJyBmbGFncyAqLw0KQEAgLTcxOSwxMSArNjU3LDYgQEAg cHJvdG9fcmVnaXN0ZXJfcmFkaW90YXAodm9pZCkNCiAgICAgeyAmaGZfcmFkaW90YXBfeGNoYW5u ZWxfZmxhZ3NfaHQ0MGQsDQogICAgICAgIHsgIkhUIENoYW5uZWwgKDQwTUh6IENoYW5uZWwgV2lk dGggd2l0aCBFeHRlbnNpb24gY2hhbm5lbCBiZWxvdykiLCAicmFkaW90YXAueGNoYW5uZWwudHlw ZS5odDQwZCIsDQogCSBGVF9CT09MRUFOLCAyNCwgTlVMTCwgMHg0MDAwMCwgIkNoYW5uZWwgVHlw ZSBIVC80MC0iLCBIRklMTCB9IH0sDQotI2lmIDANCi0gICAgeyAmaGZfcmFkaW90YXBfeGNoYW5u ZWxfbWF4cG93ZXIsDQotICAgICAgeyAiTWF4IHRyYW5zbWl0IHBvd2VyIiwgInJhZGlvdGFwLnhj aGFubmVsLm1heHBvd2VyIiwNCi0JRlRfVUlOVDMyLCBCQVNFX0RFQywgTlVMTCwgMHgwLCAiIiwg SEZJTEwgfSB9LA0KLSNlbmRpZg0KICAgICB7ICZoZl9yYWRpb3RhcF9maHNzX2hvcHNldCwNCiAg ICAgICB7ICJGSFNTIEhvcCBTZXQiLCAicmFkaW90YXAuZmhzcy5ob3BzZXQiLA0KIAlGVF9VSU5U OCwgQkFTRV9ERUMsIE5VTEwsICAweDAsDQpAQCAtNzc5LDYgKzcxMiwzMSBAQCBwcm90b19yZWdp c3Rlcl9yYWRpb3RhcCh2b2lkKQ0KIAlGVF9JTlQzMiwgQkFTRV9ERUMsIE5VTEwsIDB4MCwNCiAJ IlRyYW5zbWl0IHBvd2VyIGluIGRlY2liZWxzIHBlciBvbmUgbWlsbGl3YXR0IChkQm0pIiwgSEZJ TEwgfSB9LA0KIA0KKyAgICB7ICZoZl9yYWRpb3RhcF92ZW5kb3JfbnMsDQorICAgICAgeyAiVmVu ZG9yIG5hbWVzcGFjZSIsICJyYWRpb3RhcC52ZW5kb3JfbnMiLA0KKwlGVF9OT05FLCBCQVNFX05P TkUsIE5VTEwsIDB4MCwNCisJIlZlbmRvciBuYW1lc3BhY2UiLCBIRklMTCB9IH0sDQorDQorICAg IHsgJmhmX3JhZGlvdGFwX3Zlbl9vdWksDQorICAgICAgeyAiVmVuZG9yIE9VSSIsICJyYWRpb3Rh cC52ZW5kb3Jfb3VpIiwNCisJRlRfQllURVMsIEJBU0VfTk9ORSwgTlVMTCwgMHgwLA0KKwkiVmVu ZG9yIE9VSSIsIEhGSUxMIH0gfSwNCisNCisgICAgeyAmaGZfcmFkaW90YXBfdmVuX3N1Ym5zLA0K KyAgICAgIHsgIlZlbmRvciBzdWIgbmFtZXNwYWNlIiwgInJhZGlvdGFwLnZlbmRvcl9zdWJucyIs DQorCUZUX1VJTlQ4LCBCQVNFX0RFQywgTlVMTCwgMHgwLA0KKwkiVmVuZG9yLXNwZWNpZmllZCBz dWIgbmFtZXNwYWNlIiwgSEZJTEwgfSB9LA0KKw0KKyAgICB7ICZoZl9yYWRpb3RhcF92ZW5fc2tp cCwNCisgICAgICB7ICJWZW5kb3IgZGF0YSBsZW5ndGgiLCAicmFkaW90YXAudmVuZG9yX2RhdGFf bGVuIiwNCisJRlRfVUlOVDE2LCBCQVNFX0RFQywgTlVMTCwgMHgwLA0KKwkiTGVuZ3RoIG9mIHZl bmRvci1zcGVjaWZpZWQgZGF0YSIsIEhGSUxMIH0gfSwNCisNCisgICAgeyAmaGZfcmFkaW90YXBf dmVuX2RhdGEsDQorICAgICAgeyAiVmVuZG9yIGRhdGEiLCAicmFkaW90YXAudmVuZG9yX2RhdGEi LA0KKwlGVF9OT05FLCBCQVNFX05PTkUsIE5VTEwsIDB4MCwNCisJIlZlbmRvci1zcGVjaWZpZWQg ZGF0YSIsIEhGSUxMIH0gfSwNCisNCiAgICAgLyogU3BlY2lhbCB2YXJpYWJsZXMgKi8NCiAgICAg eyAmaGZfcmFkaW90YXBfZmNzX2JhZCwNCiAgICAgICB7ICJCYWQgRkNTIiwgInJhZGlvdGFwLmZj c19iYWQiLA0KQEAgLTc5Miw3ICs3NTAsOCBAQCBwcm90b19yZWdpc3Rlcl9yYWRpb3RhcCh2b2lk KQ0KICAgICAmZXR0X3JhZGlvdGFwX2ZsYWdzLA0KICAgICAmZXR0X3JhZGlvdGFwX3J4ZmxhZ3Ms DQogICAgICZldHRfcmFkaW90YXBfY2hhbm5lbF9mbGFncywNCi0gICAgJmV0dF9yYWRpb3RhcF94 Y2hhbm5lbF9mbGFncw0KKyAgICAmZXR0X3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzLA0KKyAgICAm ZXR0X3JhZGlvdGFwX3ZlbmRvciwNCiAgIH07DQogICBtb2R1bGVfdCAqcmFkaW90YXBfbW9kdWxl Ow0KIA0KQEAgLTgxOCwzNCArNzc3LDQ1IEBAIGRpc3NlY3RfcmFkaW90YXAodHZidWZmX3QgKnR2 YiwgcGFja2V0X2kNCiAgICAgcHJvdG9fdHJlZSAqcmFkaW90YXBfdHJlZSA9IE5VTEw7DQogICAg IHByb3RvX3RyZWUgKnB0LCAqcHJlc2VudF90cmVlID0gTlVMTDsNCiAgICAgcHJvdG9fdHJlZSAq ZnQsICpmbGFnc190cmVlID0gTlVMTDsNCi0gICAgcHJvdG9faXRlbSAqdGkgPSBOVUxMLCAqaGlk ZGVuX2l0ZW07DQotICAgIGludCBhbGlnbl9vZmZzZXQsIG9mZnNldDsNCisgICAgcHJvdG9faXRl bSAqdGkgPSBOVUxMOw0KKyAgICBwcm90b19pdGVtICpoaWRkZW5faXRlbTsNCisgICAgaW50IG9m ZnNldDsNCiAgICAgdHZidWZmX3QgKm5leHRfdHZiOw0KLSAgICBndWludDMyIHZlcnNpb247DQot ICAgIGd1aW50IGxlbmd0aCwgbGVuZ3RoX3JlbWFpbmluZzsNCisgICAgZ3VpbnQ4IHZlcnNpb247 DQorICAgIGd1aW50IGxlbmd0aDsNCiAgICAgZ3VpbnQzMiByYXRlLCBmcmVxLCBmbGFnczsNCi0g ICAgZ2ludDggZGJtOw0KLSAgICBndWludDggZGIsIHJmbGFnczsNCi0gICAgZ3VpbnQzMiBwcmVz ZW50LCBuZXh0X3ByZXNlbnQ7DQotICAgIGludCBiaXQ7DQorICAgIGdpbnQ4IGRibSwgZGI7DQor ICAgIGd1aW50OCByZmxhZ3MgPSAwOw0KICAgICAvKiBiYWNrd2FyZCBjb21wYXQgd2l0aCBiaXQg MTQgPT0gZmNzIGluIGhlYWRlciAqLw0KICAgICBwcm90b19pdGVtICpoZHJfZmNzX3RpID0gTlVM TDsNCiAgICAgaW50IGhkcl9mY3Nfb2Zmc2V0ID0gMDsNCiAgICAgZ3VpbnQzMiBzZW50X2ZjcyA9 IDA7DQogICAgIGd1aW50MzIgY2FsY19mY3M7DQotDQorICAgIGdpbnQgZXJyOw0KKyAgICBzdHJ1 Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yIGl0ZXI7DQorICAgIHZvaWQgKmRhdGE7DQog ICAgIHN0cnVjdCBfcmFkaW90YXBfaW5mbyAqcmFkaW90YXBfaW5mbzsNCi0gICAgc3RhdGljIHN0 cnVjdCBfcmFkaW90YXBfaW5mbyBydHBfaW5mb19hcnJbMV07DQotICAgIA0KLSAgICByYWRpb3Rh cF9pbmZvID0gJnJ0cF9pbmZvX2FyclswXTsNCisgICAgc3RhdGljIHN0cnVjdCBfcmFkaW90YXBf aW5mbyBydHBfaW5mb19hcnI7DQorDQorICAgIC8qIG91ciBub24tc3RhbmRhcmQgb3ZlcnJpZGVz ICovDQorICAgIHN0YXRpYyBzdHJ1Y3QgcmFkaW90YXBfb3ZlcnJpZGUgb3ZlcnJpZGVzW10gPSB7 DQorICAgIAl7IElFRUU4MDIxMV9SQURJT1RBUF9YQ0hBTk5FTCwgNCwgOCB9LCAvKiB4Y2hhbm5l bCAqLw0KKw0KKyAgICAgICAgLyoga2VlcCBsYXN0ICovDQorICAgIAl7IDE0LCA0LCA0IH0sIC8q IEZDUyBpbiBoZWFkZXIgKi8NCisgICAgfTsNCisgICAgZ3VpbnQgbl9vdmVycmlkZXMgPSBhcnJh eV9sZW5ndGgob3ZlcnJpZGVzKTsNCisNCisgICAgaWYgKCFyYWRpb3RhcF9iaXQxNF9mY3MpDQor ICAgICAgICBuX292ZXJyaWRlcy0tOw0KKw0KKyAgICByYWRpb3RhcF9pbmZvID0gJnJ0cF9pbmZv X2FycjsNCiANCiAgICAgY29sX3NldF9zdHIocGluZm8tPmNpbmZvLCBDT0xfUFJPVE9DT0wsICJX TEFOIik7DQogICAgIGNvbF9jbGVhcihwaW5mby0+Y2luZm8sIENPTF9JTkZPKTsNCi0gICAgb2Zm c2V0ID0gMDsNCiANCi0gICAgdmVyc2lvbiA9IHR2Yl9nZXRfZ3VpbnQ4KHR2Yiwgb2Zmc2V0KTsN Ci0gICAgbGVuZ3RoID0gdHZiX2dldF9sZXRvaHModHZiLCBvZmZzZXQrMik7DQotICAgIHByZXNl bnQgPSB0dmJfZ2V0X2xldG9obCh0dmIsIG9mZnNldCs0KTsNCisgICAgdmVyc2lvbiA9IHR2Yl9n ZXRfZ3VpbnQ4KHR2YiwgMCk7DQorICAgIGxlbmd0aCA9IHR2Yl9nZXRfbGV0b2hzKHR2YiwgMik7 DQogICAgIA0KICAgICByYWRpb3RhcF9pbmZvLT5yYWRpb3RhcF9sZW5ndGggPSBsZW5ndGg7DQog DQpAQCAtODU4LDQ0MSArODI4LDM4NCBAQCBkaXNzZWN0X3JhZGlvdGFwKHR2YnVmZl90ICp0dmIs IHBhY2tldF9pDQogCQl0dmIsIDAsIGxlbmd0aCwgIlJhZGlvdGFwIEhlYWRlciB2JXUsIExlbmd0 aCAldSIsIHZlcnNpb24sIGxlbmd0aCk7DQogCXJhZGlvdGFwX3RyZWUgPSBwcm90b19pdGVtX2Fk ZF9zdWJ0cmVlKHRpLCBldHRfcmFkaW90YXApOw0KIAlwcm90b190cmVlX2FkZF91aW50KHJhZGlv dGFwX3RyZWUsIGhmX3JhZGlvdGFwX3ZlcnNpb24sDQotCQl0dmIsIG9mZnNldCwgMSwgdmVyc2lv bik7DQorCQl0dmIsIDAsIDEsIHZlcnNpb24pOw0KIAlwcm90b190cmVlX2FkZF9pdGVtKHJhZGlv dGFwX3RyZWUsIGhmX3JhZGlvdGFwX3BhZCwNCi0JCXR2Yiwgb2Zmc2V0ICsgMSwgMSwgRkFMU0Up Ow0KLQl0aSA9IHByb3RvX3RyZWVfYWRkX3VpbnQocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBf bGVuZ3RoLA0KLQkJdHZiLCBvZmZzZXQgKyAyLCAyLCBsZW5ndGgpOw0KKwkJdHZiLCAxLCAxLCBG QUxTRSk7DQorCXByb3RvX3RyZWVfYWRkX3VpbnQocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBf bGVuZ3RoLA0KKwkJdHZiLCAyLCAyLCBsZW5ndGgpOw0KICAgICB9DQotICAgIGxlbmd0aF9yZW1h aW5pbmcgPSBsZW5ndGg7DQogDQotICAgIC8qDQotICAgICAqIEZJWE1FOiBUaGlzIG9ubHkgd29y a3MgaWYgdGhlcmUgaXMgZXhhY3RseSAxIGl0X3ByZXNlbnQNCi0gICAgICogICAgICAgIGZpZWxk IGluIHRoZSBoZWFkZXINCi0gICAgICovDQotICAgIGlmIChsZW5ndGhfcmVtYWluaW5nIDwgUkFE SU9UQVBfTUlOX0hFQURFUl9MRU4pIHsNCi0JLyoNCi0JICogUmFkaW90YXAgaGVhZGVyIGlzIHNo b3J0ZXIgdGhhbiB0aGUgZml4ZWQtbGVuZ3RoIHBvcnRpb24NCi0JICogcGx1cyBvbmUgInByZXNl bnQiIGJpdHNldC4NCi0JICovDQotCWlmICh0cmVlKQ0KLQkgICAgcHJvdG9faXRlbV9hcHBlbmRf dGV4dCh0aSwgIiAoYm9ndXMgLSBtaW5pbXVtIGxlbmd0aCBpcyA4KSIpOw0KLQlyZXR1cm47DQor ICAgIGRhdGEgPSBlcF90dmJfbWVtZHVwKHR2YiwgMCwgbGVuZ3RoKTsNCisgICAgaWYgKCFkYXRh KQ0KKyAgICAgICAgcmV0dXJuOw0KKw0KKyAgICBpZiAoaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJh dG9yX2luaXQoJml0ZXIsIGRhdGEsIGxlbmd0aCwgTlVMTCkpIHsNCisgICAgICAgIGlmICh0cmVl KQ0KKyAgICAgICAgICAgIHByb3RvX2l0ZW1fYXBwZW5kX3RleHQodGksICIgKGludmFsaWQpIik7 DQorICAgICAgICAvKiBtYXliZSB0aGUgbGVuZ3RoIHdhcyBjb3JyZWN0IGFueXdheSAuLi4gKi8N CisgICAgICAgIGdvdG8gaGFuZF9vZmZfdG9fODAyMTE7DQogICAgIH0NCi0gICAgLyogU3VidHJl ZSBmb3IgdGhlICJwcmVzZW50IGZsYWdzIiBiaXRmaWVsZC4gKi8NCisNCisgICAgaXRlci5vdmVy cmlkZXMgPSBvdmVycmlkZXM7DQorICAgIGl0ZXIubl9vdmVycmlkZXMgPSBuX292ZXJyaWRlczsN CisNCisgICAgLyogQWRkIHRoZSAicHJlc2VudCBmbGFncyIgYml0bWFwcy4gKi8NCiAgICAgaWYg KHRyZWUpIHsNCi0JcHQgPSBwcm90b190cmVlX2FkZF91aW50KHJhZGlvdGFwX3RyZWUsIGhmX3Jh ZGlvdGFwX3ByZXNlbnQsDQotCSAgICB0dmIsIG9mZnNldCArIDQsIDQsIHByZXNlbnQpOw0KLQlw cmVzZW50X3RyZWUgPSBwcm90b19pdGVtX2FkZF9zdWJ0cmVlKHB0LCBldHRfcmFkaW90YXBfcHJl c2VudCk7DQotDQotCXByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3Rh cF9wcmVzZW50X3RzZnQsDQotCSAgICB0dmIsIDQsIDQsIFRSVUUpOw0KLQlwcm90b190cmVlX2Fk ZF9pdGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9mbGFncywNCi0JICAgIHR2 YiwgNCwgNCwgVFJVRSk7DQotCXByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9y YWRpb3RhcF9wcmVzZW50X3JhdGUsDQotCSAgICB0dmIsIDQsIDQsIFRSVUUpOw0KLQlwcm90b190 cmVlX2FkZF9pdGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9jaGFubmVsLA0K LQkgICAgdHZiLCA0LCA0LCBUUlVFKTsNCi0JcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3Ry ZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfZmhzcywNCi0JICAgIHR2YiwgNCwgNCwgVFJVRSk7DQot CXByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2Ri bV9hbnRzaWduYWwsDQotCSAgICB0dmIsIDQsIDQsIFRSVUUpOw0KLQlwcm90b190cmVlX2FkZF9p dGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9kYm1fYW50bm9pc2UsDQotCSAg ICB0dmIsIDQsIDQsIFRSVUUpOw0KLQlwcm90b190cmVlX2FkZF9pdGVtKHByZXNlbnRfdHJlZSwg aGZfcmFkaW90YXBfcHJlc2VudF9sb2NrX3F1YWxpdHksDQotCSAgICB0dmIsIDQsIDQsIFRSVUUp Ow0KLQlwcm90b190cmVlX2FkZF9pdGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2Vu dF90eF9hdHRlbnVhdGlvbiwNCi0JICAgIHR2YiwgNCwgNCwgVFJVRSk7DQotCXByb3RvX3RyZWVf YWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2RiX3R4X2F0dGVudWF0 aW9uLA0KLQkgICAgdHZiLCA0LCA0LCBUUlVFKTsNCi0JcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVz ZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfZGJtX3R4X2F0dGVudWF0aW9uLA0KLQkgICAg dHZiLCA0LCA0LCBUUlVFKTsNCi0JcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhm X3JhZGlvdGFwX3ByZXNlbnRfYW50ZW5uYSwNCi0JICAgIHR2YiwgNCwgNCwgVFJVRSk7DQotCXBy b3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2RiX2Fu dHNpZ25hbCwNCi0JICAgIHR2YiwgNCwgNCwgVFJVRSk7DQotCXByb3RvX3RyZWVfYWRkX2l0ZW0o cHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2RiX2FudG5vaXNlLA0KLQkgICAgdHZi LCA0LCA0LCBUUlVFKTsNCi0JaWYgKHJhZGlvdGFwX2JpdDE0X2Zjcykgew0KLQkJcHJvdG9fdHJl ZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfaGRyZmNzLA0KLQkJ CXR2YiwgNCwgNCwgVFJVRSk7DQotCX0gZWxzZSB7DQotCQlwcm90b190cmVlX2FkZF9pdGVtKHBy ZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9yeGZsYWdzLA0KLQkJCXR2YiwgNCwgNCwg VFJVRSk7DQotCX0NCi0JcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlv dGFwX3ByZXNlbnRfeGNoYW5uZWwsDQotCSAgICB0dmIsIDQsIDQsIFRSVUUpOw0KLQlwcm90b190 cmVlX2FkZF9pdGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9leHQsDQotCSAg ICB0dmIsIDQsIDQsIFRSVUUpOw0KKyAgICAgICAgZ3VjaGFyICpibWFwX3N0YXJ0ID0gKGd1Y2hh ciAqKWRhdGEgKyA0Ow0KKyAgICAgICAgZ3VpbnQgbl9iaXRtYXBzID0gKGl0ZXIudGhpc19hcmcg LSBibWFwX3N0YXJ0KSAvIDQ7DQorICAgICAgICBndWludCBpOw0KKyAgICAgICAgZ2Jvb2xlYW4g cnRhcF9ucyA9IFRSVUU7DQorICAgICAgICBndWludCBydGFwX25zX29mZnNldCwgcnRhcF9uc19v ZmZzZXRfbmV4dCA9IDA7DQorDQorICAgICAgICBwdCA9IHByb3RvX3RyZWVfYWRkX2l0ZW0ocmFk aW90YXBfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudCwNCisgICAgICAgICAgICB0dmIsIDQsIG5f Yml0bWFwcyAqIDQsIEZBTFNFIC8qID8/ICovKTsNCisNCisgICAgICAgIGZvciAoaSA9IDA7IGkg PCBuX2JpdG1hcHM7IGkrKykgew0KKyAgICAgICAgICAgIGd1aW50MzIgYm1hcCA9IHBsZXRvaGwo Ym1hcF9zdGFydCArIDQgKiBpKTsNCisNCisgICAgICAgICAgICBydGFwX25zX29mZnNldCA9IHJ0 YXBfbnNfb2Zmc2V0X25leHQ7DQorICAgICAgICAgICAgcnRhcF9uc19vZmZzZXRfbmV4dCArPSA0 Ow0KKw0KKyAgICAgICAgICAgIGlmIChibWFwICYgQklUKElFRUU4MDIxMV9SQURJT1RBUF9SQURJ T1RBUF9OQU1FU1BBQ0UpKSB7DQorICAgICAgICAgICAgICAgIHJ0YXBfbnMgPSBUUlVFOw0KKyAg ICAgICAgICAgICAgICBydGFwX25zX29mZnNldF9uZXh0ID0gMDsNCisgICAgICAgICAgICB9DQor ICAgICAgICAgICAgaWYgKGJtYXAgJiBCSVQoSUVFRTgwMjExX1JBRElPVEFQX1ZFTkRPUl9OQU1F U1BBQ0UpKQ0KKyAgICAgICAgICAgICAgICBydGFwX25zID0gRkFMU0U7DQorDQorICAgICAgICAg ICAgcHJlc2VudF90cmVlID0gcHJvdG9faXRlbV9hZGRfc3VidHJlZShwdCwgZXR0X3JhZGlvdGFw X3ByZXNlbnQpOw0KKw0KKyAgICAgICAgICAgIG9mZnNldCA9IDQgKiBpOw0KKw0KKyAgICAgICAg ICAgIGlmICghcnRhcF9ucykNCisgICAgICAgICAgICAgICAgZ290byBhbHdheXNfYml0czsNCisN CisgICAgICAgICAgICBpZiAocnRhcF9uc19vZmZzZXQpDQorICAgICAgICAgICAgICAgIGdvdG8g YWx3YXlzX2JpdHM7DQorDQorICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50 X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfdHNmdCwNCisgICAgICAgICAgICAgICAgdHZiLCBv ZmZzZXQgKyA0LCA0LCBUUlVFKTsNCisgICAgICAgICAgICBwcm90b190cmVlX2FkZF9pdGVtKHBy ZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9mbGFncywNCisgICAgICAgICAgICAgICAg dHZiLCBvZmZzZXQgKyA0LCA0LCBUUlVFKTsNCisgICAgICAgICAgICBwcm90b190cmVlX2FkZF9p dGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9yYXRlLA0KKyAgICAgICAgICAg ICAgICB0dmIsIG9mZnNldCArIDQsIDQsIFRSVUUpOw0KKyAgICAgICAgICAgIHByb3RvX3RyZWVf YWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2NoYW5uZWwsDQorICAg ICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJVRSk7DQorICAgICAgICAgICAgcHJv dG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfZmhzcywN CisgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQgKyA0LCA0LCBUUlVFKTsNCisgICAgICAgICAg ICBwcm90b190cmVlX2FkZF9pdGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9k Ym1fYW50c2lnbmFsLA0KKyAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCArIDQsIDQsIFRSVUUp Ow0KKyAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRp b3RhcF9wcmVzZW50X2RibV9hbnRub2lzZSwNCisgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQg KyA0LCA0LCBUUlVFKTsNCisgICAgICAgICAgICBwcm90b190cmVlX2FkZF9pdGVtKHByZXNlbnRf dHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9sb2NrX3F1YWxpdHksDQorICAgICAgICAgICAgICAg IHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJVRSk7DQorICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRf aXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfdHhfYXR0ZW51YXRpb24sDQor ICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJVRSk7DQorICAgICAgICAgICAg cHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfZGJf dHhfYXR0ZW51YXRpb24sDQorICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJV RSk7DQorICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3Jh ZGlvdGFwX3ByZXNlbnRfZGJtX3R4X2F0dGVudWF0aW9uLA0KKyAgICAgICAgICAgICAgICB0dmIs IG9mZnNldCArIDQsIDQsIFRSVUUpOw0KKyAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0o cHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2FudGVubmEsDQorICAgICAgICAgICAg ICAgIHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJVRSk7DQorICAgICAgICAgICAgcHJvdG9fdHJlZV9h ZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfZGJfYW50c2lnbmFsLA0K KyAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCArIDQsIDQsIFRSVUUpOw0KKyAgICAgICAgICAg IHByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2Ri X2FudG5vaXNlLA0KKyAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCArIDQsIDQsIFRSVUUpOw0K KyAgICAgICAgICAgIGlmIChyYWRpb3RhcF9iaXQxNF9mY3MpIHsNCisgICAgICAgICAgICAgICAg ICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50 X2hkcmZjcywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQgKyA0LCA0 LCBUUlVFKTsNCisgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgcHJv dG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfcnhmbGFn cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQgKyA0LCA0LCBUUlVF KTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVz ZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfeGNoYW5uZWwsDQorICAgICAgICAgICAgICAg IHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJVRSk7DQorDQorIGFsd2F5c19iaXRzOg0KKyAgICAgICAg ICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50 X3J0YXBfbnMsDQorICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJVRSk7DQor ICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFw X3ByZXNlbnRfdmVuZG9yX25zLA0KKyAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCArIDQsIDQs IFRSVUUpOw0KKyAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBo Zl9yYWRpb3RhcF9wcmVzZW50X2V4dCwNCisgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQgKyA0 LCA0LCBUUlVFKTsNCisgICAgICAgIH0NCiAgICAgfQ0KLSAgICBvZmZzZXQgKz0gUkFESU9UQVBf TUlOX0hFQURFUl9MRU47DQotICAgIGxlbmd0aF9yZW1haW5pbmcgLT0gUkFESU9UQVBfTUlOX0hF QURFUl9MRU47DQogDQotICAgIHJmbGFncyA9IDA7DQotICAgIGZvciAoOyBwcmVzZW50OyBwcmVz ZW50ID0gbmV4dF9wcmVzZW50KSB7DQotCS8qIGNsZWFyIHRoZSBsZWFzdCBzaWduaWZpY2FudCBi aXQgdGhhdCBpcyBzZXQgKi8NCi0JbmV4dF9wcmVzZW50ID0gcHJlc2VudCAmIChwcmVzZW50IC0g MSk7DQotDQotCS8qIGV4dHJhY3QgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCB0aGF0IGlzIHNl dCAqLw0KLQliaXQgPSBCSVROT18zMihwcmVzZW50IF4gbmV4dF9wcmVzZW50KTsNCi0NCi0Jc3dp dGNoIChiaXQpIHsNCi0JY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1M6DQotCSAgICBpZiAo bGVuZ3RoX3JlbWFpbmluZyA8IDEpDQotCQlicmVhazsNCi0JICAgIHJmbGFncyA9IHR2Yl9nZXRf Z3VpbnQ4KHR2Yiwgb2Zmc2V0KTsNCi0JICAgIGlmICh0cmVlKSB7DQotICAgICAgICBmdCA9IHBy b3RvX3RyZWVfYWRkX2l0ZW0ocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBfZmxhZ3MsDQotICAg ICAgICAgICAgdHZiLCBvZmZzZXQsIDEsIEZBTFNFKTsNCi0gICAgICAgIGZsYWdzX3RyZWUgPSBw cm90b19pdGVtX2FkZF9zdWJ0cmVlKGZ0LCBldHRfcmFkaW90YXBfZmxhZ3MpOw0KLQ0KLQkJcHJv dG9fdHJlZV9hZGRfaXRlbShmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9mbGFnc19jZnAsDQotCQkJ dHZiLCBvZmZzZXQsIDEsIEZBTFNFKTsNCi0JCXByb3RvX3RyZWVfYWRkX2l0ZW0oZmxhZ3NfdHJl ZSwgaGZfcmFkaW90YXBfZmxhZ3NfcHJlYW1ibGUsDQotCQkJdHZiLCBvZmZzZXQsIDEsIEZBTFNF KTsNCi0JCXByb3RvX3RyZWVfYWRkX2l0ZW0oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfZmxhZ3Nf d2VwLA0KLQkJCXR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQotCQlwcm90b190cmVlX2FkZF9pdGVt KGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2ZsYWdzX2ZyYWcsDQotCQkJdHZiLCBvZmZzZXQsIDEs IEZBTFNFKTsNCi0JCXByb3RvX3RyZWVfYWRkX2l0ZW0oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBf ZmxhZ3NfZmNzLA0KLQkJCXR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQotCQlwcm90b190cmVlX2Fk ZF9pdGVtKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2ZsYWdzX2RhdGFwYWQsDQotCQkJdHZiLCBv ZmZzZXQsIDEsIEZBTFNFKTsNCi0JCXByb3RvX3RyZWVfYWRkX2l0ZW0oZmxhZ3NfdHJlZSwgaGZf cmFkaW90YXBfZmxhZ3NfYmFkZmNzLA0KLQkJCXR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQotCQlw cm90b190cmVlX2FkZF9pdGVtKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2ZsYWdzX3Nob3J0Z2ks DQotCQkJdHZiLCBvZmZzZXQsIDEsIEZBTFNFKTsNCi0JICAgIH0NCi0JICAgIG9mZnNldCsrOw0K LQkgICAgbGVuZ3RoX3JlbWFpbmluZy0tOw0KLQkgICAgYnJlYWs7DQotDQotCWNhc2UgSUVFRTgw MjExX1JBRElPVEFQX1JBVEU6DQotCSAgICBpZiAobGVuZ3RoX3JlbWFpbmluZyA8IDEpDQotCQli cmVhazsNCi0JICAgIHJhdGUgPSB0dmJfZ2V0X2d1aW50OCh0dmIsIG9mZnNldCk7DQotCSAgICBp ZiAocmF0ZSAmIDB4ODApIHsNCi0JCS8qIFhYWCBhZGp1c3QgYnkgQ1cgYW5kIHNob3J0IEdJIGxp a2Ugb3RoZXIgc25pZmZlcnM/ICovDQotCQlyYXRlID0gaWVlZTgwMjExX2h0cmF0ZXNbcmF0ZSAm IDB4Zl07DQotCSAgICB9DQotCSAgICBjb2xfYWRkX2ZzdHIocGluZm8tPmNpbmZvLCBDT0xfVFhf UkFURSwgIiVkLiVkIiwNCi0JCXJhdGUgLyAyLCByYXRlICYgMSA/IDUgOiAwKTsNCi0JICAgIGlm ICh0cmVlKSB7DQotCQlwcm90b190cmVlX2FkZF91aW50X2Zvcm1hdChyYWRpb3RhcF90cmVlLCBo Zl9yYWRpb3RhcF9kYXRhcmF0ZSwNCi0JCQl0dmIsIG9mZnNldCwgMSwgcmF0ZSwNCi0JCQkiRGF0 YSBSYXRlOiAlZC4lZCBNYi9zIiwgcmF0ZSAvIDIsIHJhdGUgJiAxID8gNSA6IDApOw0KLQkgICAg fQ0KLQkgICAgb2Zmc2V0Kys7DQotCSAgICBsZW5ndGhfcmVtYWluaW5nLS07DQorICAgIHdoaWxl ICghKGVyciA9IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9uZXh0KCZpdGVyKSkpIHsNCisg ICAgICAgIG9mZnNldCA9IChndWNoYXIgKilpdGVyLnRoaXNfYXJnIC0gKGd1Y2hhciAqKWRhdGE7 DQorDQorICAgICAgICBpZiAoaXRlci50aGlzX2FyZ19pbmRleCA9PSBJRUVFODAyMTFfUkFESU9U QVBfVkVORE9SX05BTUVTUEFDRSAmJiB0cmVlKSB7DQorICAgICAgICAgICAgcHJvdG9fdHJlZSAq dnQsICp2ZW5fdHJlZSA9IE5VTEw7DQorICAgICAgICAgICAgdnQgPSBwcm90b190cmVlX2FkZF9p dGVtKHJhZGlvdGFwX3RyZWUsIGhmX3JhZGlvdGFwX3ZlbmRvcl9ucywNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQsIGl0ZXIudGhpc19hcmdfc2l6ZSwg RkFMU0UpOw0KKyAgICAgICAgICAgIHZlbl90cmVlID0gcHJvdG9faXRlbV9hZGRfc3VidHJlZSh2 dCwgZXR0X3JhZGlvdGFwX3ZlbmRvcik7DQorICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRl bSh2ZW5fdHJlZSwgaGZfcmFkaW90YXBfdmVuX291aSwgdHZiLCBvZmZzZXQsDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAzLCBGQUxTRSk7DQorICAgICAgICAgICAgcHJvdG9fdHJl ZV9hZGRfaXRlbSh2ZW5fdHJlZSwgaGZfcmFkaW90YXBfdmVuX3N1Ym5zLCB0dmIsIG9mZnNldCAr IDMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBGQUxTRSk7DQorICAgICAg ICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbSh2ZW5fdHJlZSwgaGZfcmFkaW90YXBfdmVuX3NraXAs IHR2Yiwgb2Zmc2V0ICsgNCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsIFRS VUUpOw0KKyAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0odmVuX3RyZWUsIGhmX3JhZGlv dGFwX3Zlbl9kYXRhLCB0dmIsIG9mZnNldCArIDYsDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpdGVyLnRoaXNfYXJnX3NpemUgLSA2LCBUUlVFKTsNCisgICAgICAgIH0NCisNCisg ICAgICAgIGlmICghaXRlci5pc19yYWRpb3RhcF9ucykNCisgICAgICAgICAgICBjb250aW51ZTsN CisNCisgICAgICAgIHN3aXRjaCAoaXRlci50aGlzX2FyZ19pbmRleCkgew0KKyAgICAgICAgY2Fz ZSBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1M6DQorICAgICAgICAgICAgcmZsYWdzID0gdHZiX2dl dF9ndWludDgodHZiLCBvZmZzZXQpOw0KKyAgICAgICAgICAgIGlmICh0cmVlKSB7DQorICAgICAg ICAgICAgICAgIGZ0ID0gcHJvdG9fdHJlZV9hZGRfaXRlbShyYWRpb3RhcF90cmVlLCBoZl9yYWRp b3RhcF9mbGFncywNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7 DQorICAgICAgICAgICAgICAgIGZsYWdzX3RyZWUgPSBwcm90b19pdGVtX2FkZF9zdWJ0cmVlKGZ0 LCBldHRfcmFkaW90YXBfZmxhZ3MpOw0KKw0KKyAgICAgICAgICAgICAgICBwcm90b190cmVlX2Fk ZF9pdGVtKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2ZsYWdzX2NmcCwNCisgICAgICAgICAgICAg ICAgICAgIHR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQorICAgICAgICAgICAgICAgIHByb3RvX3Ry ZWVfYWRkX2l0ZW0oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfZmxhZ3NfcHJlYW1ibGUsDQorICAg ICAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCwgMSwgRkFMU0UpOw0KKyAgICAgICAgICAgICAg ICBwcm90b190cmVlX2FkZF9pdGVtKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2ZsYWdzX3dlcCwN CisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQorICAgICAgICAg ICAgICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfZmxhZ3Nf ZnJhZywNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQorICAg ICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBf ZmxhZ3NfZmNzLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQsIDEsIEZBTFNFKTsN CisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShmbGFnc190cmVlLCBoZl9yYWRp b3RhcF9mbGFnc19kYXRhcGFkLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQsIDEs IEZBTFNFKTsNCisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShmbGFnc190cmVl LCBoZl9yYWRpb3RhcF9mbGFnc19iYWRmY3MsDQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9m ZnNldCwgMSwgRkFMU0UpOw0KKyAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9pdGVtKGZs YWdzX3RyZWUsIGhmX3JhZGlvdGFwX2ZsYWdzX3Nob3J0Z2ksDQorICAgICAgICAgICAgICAgICAg ICB0dmIsIG9mZnNldCwgMSwgRkFMU0UpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBi cmVhazsNCisgICAgICAgIGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1JBVEU6DQorICAgICAgICAg ICAgcmF0ZSA9IHR2Yl9nZXRfZ3VpbnQ4KHR2Yiwgb2Zmc2V0KTsNCisgICAgICAgICAgICBpZiAo cmF0ZSAmIDB4ODApIHsNCisgICAgICAgICAgICAgICAgLyogWFhYIGFkanVzdCBieSBDVyBhbmQg c2hvcnQgR0kgbGlrZSBvdGhlciBzbmlmZmVycz8gKi8NCisgICAgICAgICAgICAgICAgcmF0ZSA9 IGllZWU4MDIxMV9odHJhdGVzW3JhdGUgJiAweGZdOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg ICAgICBjb2xfYWRkX2ZzdHIocGluZm8tPmNpbmZvLCBDT0xfVFhfUkFURSwgIiVkLiVkIiwNCisg ICAgICAgICAgICByYXRlIC8gMiwgcmF0ZSAmIDEgPyA1IDogMCk7DQorICAgICAgICAgICAgaWYg KHRyZWUpIHsNCisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfdWludF9mb3JtYXQocmFk aW90YXBfdHJlZSwgaGZfcmFkaW90YXBfZGF0YXJhdGUsDQorICAgICAgICAgICAgICAgICAgICB0 dmIsIG9mZnNldCwgMSwgcmF0ZSwNCisgICAgICAgICAgICAgICAgICAgICJEYXRhIFJhdGU6ICVk LiVkIE1iL3MiLCByYXRlIC8gMiwgcmF0ZSAmIDEgPyA1IDogMCk7DQorICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgIHJhZGlvdGFwX2luZm8tPnJhdGUgPSByYXRlOw0KLQkgICAgYnJlYWs7DQot CWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUw6DQotCSAgICBpZiAobGVuZ3Ro X3JlbWFpbmluZyA8IDEpDQotCQlicmVhazsNCi0JICAgIGRibSA9IChnaW50OCkgdHZiX2dldF9n dWludDgodHZiLCBvZmZzZXQpOw0KLQkgICAgY29sX2FkZF9mc3RyKHBpbmZvLT5jaW5mbywgQ09M X1JTU0ksICIlZCBkQm0iLCBkYm0pOw0KLQkgICAgaWYgKHRyZWUpIHsNCi0JCXByb3RvX3RyZWVf YWRkX2ludF9mb3JtYXQocmFkaW90YXBfdHJlZSwNCi0JCQkJCSAgaGZfcmFkaW90YXBfZGJtX2Fu dHNpZ25hbCwNCi0JCQkJCSAgdHZiLCBvZmZzZXQsIDEsIGRibSwNCi0JCQkJCSAgIlNTSSBTaWdu YWw6ICVkIGRCbSIsIGRibSk7DQotCSAgICB9DQotCSAgICBvZmZzZXQrKzsNCi0JICAgIGxlbmd0 aF9yZW1haW5pbmctLTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgSUVFRTgw MjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUw6DQorICAgICAgICAgICAgZGJtID0gKGdpbnQ4KSB0 dmJfZ2V0X2d1aW50OCh0dmIsIG9mZnNldCk7DQorICAgICAgICAgICAgY29sX2FkZF9mc3RyKHBp bmZvLT5jaW5mbywgQ09MX1JTU0ksICIlZCBkQm0iLCBkYm0pOw0KKyAgICAgICAgICAgIGlmICh0 cmVlKSB7DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2ludF9mb3JtYXQocmFkaW90 YXBfdHJlZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZl9yYWRpb3RhcF9kYm1f YW50c2lnbmFsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAx LCBkYm0sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNTSSBTaWduYWw6ICVkIGRC bSIsIGRibSk7DQorICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIHJhZGlvdGFwX2luZm8tPmRi bV9hbnRzaWduYWw9ZGJtOw0KLQkgICAgYnJlYWs7DQotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQ X0RCX0FOVFNJR05BTDoNCi0JICAgIGlmIChsZW5ndGhfcmVtYWluaW5nIDwgMSkNCi0JCWJyZWFr Ow0KLQkgICAgZGIgPSB0dmJfZ2V0X2d1aW50OCh0dmIsIG9mZnNldCk7DQotCSAgICBjb2xfYWRk X2ZzdHIocGluZm8tPmNpbmZvLCBDT0xfUlNTSSwgIiV1IGRCIiwgZGIpOw0KLQkgICAgaWYgKHRy ZWUpIHsNCi0JCXByb3RvX3RyZWVfYWRkX3VpbnRfZm9ybWF0KHJhZGlvdGFwX3RyZWUsDQotCQkJ CQkgICBoZl9yYWRpb3RhcF9kYl9hbnRzaWduYWwsDQotCQkJCQkgICB0dmIsIG9mZnNldCwgMSwg ZGIsDQotCQkJCQkgICAiU1NJIFNpZ25hbDogJXUgZEIiLCBkYik7DQotCSAgICB9DQotCSAgICBv ZmZzZXQrKzsNCi0JICAgIGxlbmd0aF9yZW1haW5pbmctLTsNCi0JICAgIGJyZWFrOw0KLQljYXNl IElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UTk9JU0U6DQotCSAgICBpZiAobGVuZ3RoX3JlbWFp bmluZyA8IDEpDQotCQlicmVhazsNCi0JICAgIGRibSA9IChnaW50OCkgdHZiX2dldF9ndWludDgo dHZiLCBvZmZzZXQpOw0KLQkgICAgaWYgKHRyZWUpIHsNCi0JCXByb3RvX3RyZWVfYWRkX2ludF9m b3JtYXQocmFkaW90YXBfdHJlZSwNCi0JCQkJCSAgaGZfcmFkaW90YXBfZGJtX2FudG5vaXNlLA0K LQkJCQkJICB0dmIsIG9mZnNldCwgMSwgZGJtLA0KLQkJCQkJICAiU1NJIE5vaXNlOiAlZCBkQm0i LCBkYm0pOw0KLQkgICAgfQ0KLQkgICAgb2Zmc2V0Kys7DQotCSAgICBsZW5ndGhfcmVtYWluaW5n LS07DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlIElFRUU4MDIxMV9SQURJT1RB UF9EQl9BTlRTSUdOQUw6DQorICAgICAgICAgICAgZGIgPSB0dmJfZ2V0X2d1aW50OCh0dmIsIG9m ZnNldCk7DQorICAgICAgICAgICAgY29sX2FkZF9mc3RyKHBpbmZvLT5jaW5mbywgQ09MX1JTU0ks ICIldSBkQiIsIGRiKTsNCisgICAgICAgICAgICBpZiAodHJlZSkgew0KKyAgICAgICAgICAgICAg ICBwcm90b190cmVlX2FkZF91aW50X2Zvcm1hdChyYWRpb3RhcF90cmVlLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBoZl9yYWRpb3RhcF9kYl9hbnRzaWduYWwsDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAxLCBkYiwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlNTSSBTaWduYWw6ICV1IGRCIiwgZGIpOw0KKyAgICAgICAgICAg IH0NCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgSUVFRTgwMjExX1JBRElPVEFQ X0RCTV9BTlROT0lTRToNCisgICAgICAgICAgICBkYm0gPSAoZ2ludDgpIHR2Yl9nZXRfZ3VpbnQ4 KHR2Yiwgb2Zmc2V0KTsNCisgICAgICAgICAgICBpZiAodHJlZSkgew0KKyAgICAgICAgICAgICAg ICBwcm90b190cmVlX2FkZF9pbnRfZm9ybWF0KHJhZGlvdGFwX3RyZWUsDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaGZfcmFkaW90YXBfZGJtX2FudG5vaXNlLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAxLCBkYm0sDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlNTSSBOb2lzZTogJWQgZEJtIiwgZGJtKTsNCisgICAgICAgICAgICB9 DQogICAgICAgICAgICAgcmFkaW90YXBfaW5mby0+ZGJtX2FudG5vaXNlPWRibTsNCi0JICAgIGJy ZWFrOw0KLQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlROT0lTRToNCi0JICAgIGlmIChs ZW5ndGhfcmVtYWluaW5nIDwgMSkNCi0JCWJyZWFrOw0KLQkgICAgZGIgPSB0dmJfZ2V0X2d1aW50 OCh0dmIsIG9mZnNldCk7DQotCSAgICBpZiAodHJlZSkgew0KLQkJcHJvdG9fdHJlZV9hZGRfdWlu dF9mb3JtYXQocmFkaW90YXBfdHJlZSwNCi0JCQkJCSAgIGhmX3JhZGlvdGFwX2RiX2FudG5vaXNl LA0KLQkJCQkJICAgdHZiLCBvZmZzZXQsIDEsIGRiLA0KLQkJCQkJICAgIlNTSSBOb2lzZTogJXUg ZEIiLCBkYik7DQotCSAgICB9DQotCSAgICBvZmZzZXQrKzsNCi0JICAgIGxlbmd0aF9yZW1haW5p bmctLTsNCi0JICAgIGJyZWFrOw0KLQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9BTlRFTk5BOg0K LQkgICAgaWYgKGxlbmd0aF9yZW1haW5pbmcgPCAxKQ0KLQkJYnJlYWs7DQotCSAgICBpZiAodHJl ZSkgew0KLQkJcHJvdG9fdHJlZV9hZGRfdWludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF9h bnRlbm5hLA0KLQkJCQkgICB0dmIsIG9mZnNldCwgMSwgdHZiX2dldF9ndWludDgodHZiLCBvZmZz ZXQpKTsNCi0JICAgIH0NCi0JICAgIG9mZnNldCsrOw0KLQkgICAgbGVuZ3RoX3JlbWFpbmluZy0t Ow0KLQkgICAgYnJlYWs7DQotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9UWF9QT1dFUjoN Ci0JICAgIGlmIChsZW5ndGhfcmVtYWluaW5nIDwgMSkNCi0JCWJyZWFrOw0KLQkgICAgaWYgKHRy ZWUpIHsNCi0JCXByb3RvX3RyZWVfYWRkX2ludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF90 eHBvd2VyLA0KLQkJCQkgICB0dmIsIG9mZnNldCwgMSwgdHZiX2dldF9ndWludDgodHZiLCBvZmZz ZXQpKTsNCi0JICAgIH0NCi0JICAgIG9mZnNldCsrOw0KLQkgICAgbGVuZ3RoX3JlbWFpbmluZy0t Ow0KLQkgICAgYnJlYWs7DQotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUw6DQotCXsN Ci0JICAgIHByb3RvX2l0ZW0gKml0Ow0KLQkgICAgcHJvdG9fdHJlZSAqZmxhZ3NfdHJlZTsNCi0J ICAgIGdjaGFyICpjaGFuX3N0cjsNCi0NCi0JICAgIGFsaWduX29mZnNldCA9IEFMSUdOX09GRlNF VChvZmZzZXQsIDIpOw0KLQkgICAgb2Zmc2V0ICs9IGFsaWduX29mZnNldDsNCi0JICAgIGxlbmd0 aF9yZW1haW5pbmcgLT0gYWxpZ25fb2Zmc2V0Ow0KLQkgICAgaWYgKGxlbmd0aF9yZW1haW5pbmcg PCAyKQ0KLQkJYnJlYWs7DQotCSAgICBpZiAodHJlZSkgew0KLQkJZnJlcSA9IHR2Yl9nZXRfbGV0 b2hzKHR2Yiwgb2Zmc2V0KTsNCi0JCWZsYWdzID0gdHZiX2dldF9sZXRvaHModHZiLCBvZmZzZXQr Mik7DQotCQljaGFuX3N0ciA9IGllZWU4MDIxMV9taHpfdG9fc3RyKGZyZXEpOw0KLQkJY29sX2Fk ZF9mc3RyKHBpbmZvLT5jaW5mbywgQ09MX0ZSRVFfQ0hBTiwgIiVzIiwgY2hhbl9zdHIpOw0KLQkJ cHJvdG9fdHJlZV9hZGRfdWludF9mb3JtYXQocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBfY2hh bm5lbF9mcmVxdWVuY3ksDQotCQkJCXR2Yiwgb2Zmc2V0LCAyLCBmcmVxLA0KLQkJCQkiQ2hhbm5l bCBmcmVxdWVuY3k6ICVzIiwgY2hhbl9zdHIpOw0KLQkJZ19mcmVlKGNoYW5fc3RyKTsNCi0JCS8q IFdlJ3JlIGFscmVhZHkgMi1ieXRlIGFsaWduZWQuICovDQotCQlpdCA9IHByb3RvX3RyZWVfYWRk X3VpbnQocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFncywNCi0JCQl0dmIs IG9mZnNldCsyLCAyLCBmbGFncyk7DQotCQlmbGFnc190cmVlID0gcHJvdG9faXRlbV9hZGRfc3Vi dHJlZShpdCwgZXR0X3JhZGlvdGFwX2NoYW5uZWxfZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRf Ym9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzX3R1cmJvLA0KLQkJ CXR2Yiwgb2Zmc2V0KzIsIDEsIGZsYWdzKTsNCi0JCXByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxh Z3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19jY2ssDQotCQkJdHZiLCBvZmZzZXQr MiwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9y YWRpb3RhcF9jaGFubmVsX2ZsYWdzX29mZG0sDQotCQkJdHZiLCBvZmZzZXQrMiwgMSwgZmxhZ3Mp Ow0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9jaGFu bmVsX2ZsYWdzXzJnaHosDQotCQkJdHZiLCBvZmZzZXQrMiwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9f dHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzXzVn aHosDQotCQkJdHZiLCBvZmZzZXQrMywgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9v bGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzX3Bhc3NpdmUsDQotCQkJ dHZiLCBvZmZzZXQrMywgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFn c190cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzX2R5bmFtaWMsDQotCQkJdHZiLCBvZmZz ZXQrMywgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBo Zl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzX2dmc2ssDQotCQkJdHZiLCBvZmZzZXQrMywgMSwgZmxh Z3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9j aGFubmVsX2ZsYWdzX2dzbSwNCi0JCQl0dmIsIG9mZnNldCszLCAxLCBmbGFncyk7DQotCQlwcm90 b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2NoYW5uZWxfZmxhZ3Nf c3R1cmJvLA0KLQkJCXR2Yiwgb2Zmc2V0KzMsIDEsIGZsYWdzKTsNCi0JCXByb3RvX3RyZWVfYWRk X2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19oYWxmLA0KLQkJ CXR2Yiwgb2Zmc2V0KzMsIDEsIGZsYWdzKTsNCi0JCXByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxh Z3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19xdWFydGVyLA0KLQkJCXR2Yiwgb2Zm c2V0KzMsIDEsIGZsYWdzKTsNCi0JCXJhZGlvdGFwX2luZm8tPmZyZXE9ZnJlcTsNCi0JCXJhZGlv dGFwX2luZm8tPmZsYWdzPWZsYWdzOw0KLQkgICAgfQ0KLQkgICAgb2Zmc2V0Kz00IC8qIENoYW5u ZWwgKyBmbGFncyAqLzsNCi0JICAgIGxlbmd0aF9yZW1haW5pbmctPTQ7DQotCSAgICBicmVhazsN Ci0JfQ0KLQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9YQ0hBTk5FTDogew0KLQkgICAgcHJvdG9f aXRlbSAqaXQ7DQotCSAgICBwcm90b190cmVlICpmbGFnc190cmVlOw0KLQ0KLQkgICAgYWxpZ25f b2Zmc2V0ID0gQUxJR05fT0ZGU0VUKG9mZnNldCwgNCk7DQotCSAgICBvZmZzZXQgKz0gYWxpZ25f b2Zmc2V0Ow0KLQkgICAgbGVuZ3RoX3JlbWFpbmluZyAtPSBhbGlnbl9vZmZzZXQ7DQotCSAgICBp ZiAobGVuZ3RoX3JlbWFpbmluZyA8IDgpDQotCQlicmVhazsNCi0JICAgIGlmICh0cmVlKSB7DQot CSAgICAgICAgaW50IGNoYW5uZWw7DQotCSAgICAgICAgZ3VpbnQ4IG1heHBvd2VyOw0KLQ0KLQkJ ZmxhZ3MgPSB0dmJfZ2V0X2xldG9obCh0dmIsIG9mZnNldCk7DQotCQlmcmVxID0gdHZiX2dldF9s ZXRvaHModHZiLCBvZmZzZXQrNCk7DQotCQljaGFubmVsID0gdHZiX2dldF9ndWludDgodHZiLCBv ZmZzZXQrNik7DQotCQltYXhwb3dlciA9IHR2Yl9nZXRfZ3VpbnQ4KHR2Yiwgb2Zmc2V0KzcpOw0K LQkJcHJvdG9fdHJlZV9hZGRfdWludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5l bCwNCi0JCQl0dmIsIG9mZnNldCs2LCAxLCAoZ3VpbnQzMikgY2hhbm5lbCk7DQotCQlwcm90b190 cmVlX2FkZF91aW50KHJhZGlvdGFwX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2ZyZXF1ZW5j eSwNCi0JCQl0dmIsIG9mZnNldCs0LCAyLCBmcmVxKTsNCi0JCWl0ID0gcHJvdG9fdHJlZV9hZGRf dWludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFncywNCi0JCQl0dmIs IG9mZnNldCswLCA0LCBmbGFncyk7DQotCQlmbGFnc190cmVlID0gcHJvdG9faXRlbV9hZGRfc3Vi dHJlZShpdCwgZXR0X3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzKTsNCi0JCXByb3RvX3RyZWVfYWRk X2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3NfdHVyYm8sDQot CQkJdHZiLCBvZmZzZXQrMCwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihm bGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19jY2ssDQotCQkJdHZiLCBvZmZz ZXQrMCwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBo Zl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19vZmRtLA0KLQkJCXR2Yiwgb2Zmc2V0KzAsIDEsIGZs YWdzKTsNCi0JCXByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBf eGNoYW5uZWxfZmxhZ3NfMmdoeiwNCi0JCQl0dmIsIG9mZnNldCswLCAxLCBmbGFncyk7DQotCQlw cm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2Zs YWdzXzVnaHosDQotCQkJdHZiLCBvZmZzZXQrMSwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9h ZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19wYXNzaXZl LA0KLQkJCXR2Yiwgb2Zmc2V0KzEsIDEsIGZsYWdzKTsNCi0JCXByb3RvX3RyZWVfYWRkX2Jvb2xl YW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3NfZHluYW1pYywNCi0JCQl0 dmIsIG9mZnNldCsxLCAxLCBmbGFncyk7DQotCQlwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdz X3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzX2dmc2ssDQotCQkJdHZiLCBvZmZzZXQr MSwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9y YWRpb3RhcF94Y2hhbm5lbF9mbGFnc19nc20sDQotCQkJdHZiLCBvZmZzZXQrMSwgMSwgZmxhZ3Mp Ow0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hh bm5lbF9mbGFnc19zdHVyYm8sDQotCQkJdHZiLCBvZmZzZXQrMSwgMSwgZmxhZ3MpOw0KLQkJcHJv dG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFn c19oYWxmLA0KLQkJCXR2Yiwgb2Zmc2V0KzEsIDEsIGZsYWdzKTsNCi0JCXByb3RvX3RyZWVfYWRk X2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3NfcXVhcnRlciwN Ci0JCQl0dmIsIG9mZnNldCsxLCAxLCBmbGFncyk7DQotCQlwcm90b190cmVlX2FkZF9ib29sZWFu KGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzX2h0MjAsDQotCQkJdHZiLCBv ZmZzZXQrMiwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVl LCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19odDQwdSwNCi0JCQl0dmIsIG9mZnNldCsyLCAx LCBmbGFncyk7DQotCQlwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlv dGFwX3hjaGFubmVsX2ZsYWdzX2h0NDBkLA0KLQkJCXR2Yiwgb2Zmc2V0KzIsIDEsIGZsYWdzKTsN Ci0jaWYgMA0KLQkJcHJvdG9fdHJlZV9hZGRfdWludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3Rh cF94Y2hhbm5lbF9tYXhwb3dlciwNCi0JCQl0dmIsIG9mZnNldCs3LCAxLCBtYXhwb3dlcik7DQot I2VuZGlmDQotCSAgICB9DQotCSAgICBvZmZzZXQrPTggLyogZmxhZ3MgKyBmcmVxICsgaWVlZSAr IG1heHJlZ3Bvd2VyICovOw0KLQkgICAgbGVuZ3RoX3JlbWFpbmluZy09ODsNCi0JICAgIGJyZWFr Ow0KLQl9DQotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0ZIU1M6DQotCSAgICBhbGlnbl9vZmZz ZXQgPSBBTElHTl9PRkZTRVQob2Zmc2V0LCAyKTsNCi0JICAgIG9mZnNldCArPSBhbGlnbl9vZmZz ZXQ7DQotCSAgICBsZW5ndGhfcmVtYWluaW5nIC09IGFsaWduX29mZnNldDsNCi0JICAgIGlmIChs ZW5ndGhfcmVtYWluaW5nIDwgMikNCi0JCWJyZWFrOw0KLQkgICAgcHJvdG9fdHJlZV9hZGRfaXRl bShyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF9maHNzX2hvcHNldCwNCi0JCXR2Yiwgb2Zmc2V0 LCAxLCBGQUxTRSk7DQotCSAgICBwcm90b190cmVlX2FkZF9pdGVtKHJhZGlvdGFwX3RyZWUsIGhm X3JhZGlvdGFwX2Zoc3NfcGF0dGVybiwNCi0JCXR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQotCSAg ICBvZmZzZXQrPTI7DQotCSAgICBsZW5ndGhfcmVtYWluaW5nLT0yOw0KLQkgICAgYnJlYWs7DQot CWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVOVUFUSU9OOg0KLQkgICAgYWxpZ25fb2Zm c2V0ID0gQUxJR05fT0ZGU0VUKG9mZnNldCwgMik7DQotCSAgICBvZmZzZXQgKz0gYWxpZ25fb2Zm c2V0Ow0KLQkgICAgbGVuZ3RoX3JlbWFpbmluZyAtPSBhbGlnbl9vZmZzZXQ7DQotCSAgICBpZiAo bGVuZ3RoX3JlbWFpbmluZyA8IDIpDQotCQlicmVhazsNCi0JICAgIHByb3RvX3RyZWVfYWRkX2l0 ZW0ocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBfdHhfYXR0ZW51YXRpb24sDQotCQl0dmIsIG9m ZnNldCwgMiwgRkFMU0UpOw0KLQkgICAgb2Zmc2V0Kz0yOw0KLQkgICAgbGVuZ3RoX3JlbWFpbmlu Zy09MjsNCi0JICAgIGJyZWFrOw0KLQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9EQl9UWF9BVFRF TlVBVElPTjoNCi0JICAgIGFsaWduX29mZnNldCA9IEFMSUdOX09GRlNFVChvZmZzZXQsIDIpOw0K LQkgICAgb2Zmc2V0ICs9IGFsaWduX29mZnNldDsNCi0JICAgIGxlbmd0aF9yZW1haW5pbmcgLT0g YWxpZ25fb2Zmc2V0Ow0KLQkgICAgaWYgKGxlbmd0aF9yZW1haW5pbmcgPCAyKQ0KLQkJYnJlYWs7 DQotCSAgICBwcm90b190cmVlX2FkZF9pdGVtKHJhZGlvdGFwX3RyZWUsIGhmX3JhZGlvdGFwX2Ri X3R4X2F0dGVudWF0aW9uLA0KLQkJdHZiLCBvZmZzZXQsIDIsIEZBTFNFKTsNCi0JICAgIG9mZnNl dCs9MjsNCi0JICAgIGxlbmd0aF9yZW1haW5pbmctPTI7DQotCSAgICBicmVhazsNCi0JY2FzZSBJ RUVFODAyMTFfUkFESU9UQVBfVFNGVDoNCi0JICAgIGFsaWduX29mZnNldCA9IEFMSUdOX09GRlNF VChvZmZzZXQsIDgpOw0KLQkgICAgb2Zmc2V0ICs9IGFsaWduX29mZnNldDsNCi0JICAgIGxlbmd0 aF9yZW1haW5pbmcgLT0gYWxpZ25fb2Zmc2V0Ow0KLQkgICAgaWYgKGxlbmd0aF9yZW1haW5pbmcg PCA4KQ0KLQkJYnJlYWs7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlIElFRUU4 MDIxMV9SQURJT1RBUF9EQl9BTlROT0lTRToNCisgICAgICAgICAgICBkYiA9IHR2Yl9nZXRfZ3Vp bnQ4KHR2Yiwgb2Zmc2V0KTsNCisgICAgICAgICAgICBpZiAodHJlZSkgew0KKyAgICAgICAgICAg ICAgICBwcm90b190cmVlX2FkZF91aW50X2Zvcm1hdChyYWRpb3RhcF90cmVlLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBoZl9yYWRpb3RhcF9kYl9hbnRub2lzZSwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQsIDEsIGRiLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiU1NJIE5vaXNlOiAldSBkQiIsIGRiKTsNCisgICAgICAgICAg ICB9DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlIElFRUU4MDIxMV9SQURJT1RB UF9BTlRFTk5BOg0KKyAgICAgICAgICAgIGlmICh0cmVlKSB7DQorICAgICAgICAgICAgICAgIHBy b3RvX3RyZWVfYWRkX3VpbnQocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBfYW50ZW5uYSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCwgMSwgdHZiX2dldF9ndWludDgo dHZiLCBvZmZzZXQpKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgYnJlYWs7DQorICAg ICAgICBjYXNlIElFRUU4MDIxMV9SQURJT1RBUF9EQk1fVFhfUE9XRVI6DQorICAgICAgICAgICAg aWYgKHRyZWUpIHsNCisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaW50KHJhZGlvdGFw X3RyZWUsIGhmX3JhZGlvdGFwX3R4cG93ZXIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg dHZiLCBvZmZzZXQsIDEsIHR2Yl9nZXRfZ3VpbnQ4KHR2Yiwgb2Zmc2V0KSk7DQorICAgICAgICAg ICAgfQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgY2FzZSBJRUVFODAyMTFfUkFESU9U QVBfQ0hBTk5FTDoNCisgICAgICAgIHsNCisgICAgICAgICAgICBwcm90b19pdGVtICppdDsNCisg ICAgICAgICAgICBwcm90b190cmVlICpmbGFnc190cmVlOw0KKyAgICAgICAgICAgIGdjaGFyICpj aGFuX3N0cjsNCisNCisgICAgICAgICAgICBpZiAodHJlZSkgew0KKyAgICAgICAgICAgICAgICBm cmVxID0gdHZiX2dldF9sZXRvaHModHZiLCBvZmZzZXQpOw0KKyAgICAgICAgICAgICAgICBmbGFn cyA9IHR2Yl9nZXRfbGV0b2hzKHR2Yiwgb2Zmc2V0KzIpOw0KKyAgICAgICAgICAgICAgICBjaGFu X3N0ciA9IGllZWU4MDIxMV9taHpfdG9fc3RyKGZyZXEpOw0KKyAgICAgICAgICAgICAgICBjb2xf YWRkX2ZzdHIocGluZm8tPmNpbmZvLCBDT0xfRlJFUV9DSEFOLCAiJXMiLCBjaGFuX3N0cik7DQor ICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX3VpbnRfZm9ybWF0KHJhZGlvdGFwX3RyZWUs IGhmX3JhZGlvdGFwX2NoYW5uZWxfZnJlcXVlbmN5LA0KKyAgICAgICAgICAgICAgICAgICAgICAg IHR2Yiwgb2Zmc2V0LCAyLCBmcmVxLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICJDaGFubmVs IGZyZXF1ZW5jeTogJXMiLCBjaGFuX3N0cik7DQorICAgICAgICAgICAgICAgIGdfZnJlZShjaGFu X3N0cik7DQorICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGFscmVhZHkgMi1ieXRlIGFsaWduZWQu ICovDQorICAgICAgICAgICAgICAgIGl0ID0gcHJvdG9fdHJlZV9hZGRfdWludChyYWRpb3RhcF90 cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzLA0KKyAgICAgICAgICAgICAgICAgICAgdHZi LCBvZmZzZXQrMiwgMiwgZmxhZ3MpOw0KKyAgICAgICAgICAgICAgICBmbGFnc190cmVlID0gcHJv dG9faXRlbV9hZGRfc3VidHJlZShpdCwgZXR0X3JhZGlvdGFwX2NoYW5uZWxfZmxhZ3MpOw0KKyAg ICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlv dGFwX2NoYW5uZWxfZmxhZ3NfdHVyYm8sDQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNl dCsyLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2Jvb2xlYW4o ZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19jY2ssDQorICAgICAgICAgICAg ICAgICAgICB0dmIsIG9mZnNldCsyLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAgIHByb3Rv X3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19v ZmRtLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQrMiwgMSwgZmxhZ3MpOw0KKyAg ICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlv dGFwX2NoYW5uZWxfZmxhZ3NfMmdoeiwNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0 KzIsIDEsIGZsYWdzKTsNCisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihm bGFnc190cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzXzVnaHosDQorICAgICAgICAgICAg ICAgICAgICB0dmIsIG9mZnNldCszLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAgIHByb3Rv X3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19w YXNzaXZlLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQrMywgMSwgZmxhZ3MpOw0K KyAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3Jh ZGlvdGFwX2NoYW5uZWxfZmxhZ3NfZHluYW1pYywNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwg b2Zmc2V0KzMsIDEsIGZsYWdzKTsNCisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfYm9v bGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzX2dmc2ssDQorICAgICAg ICAgICAgICAgICAgICB0dmIsIG9mZnNldCszLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAg IHByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9m bGFnc19nc20sDQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCszLCAxLCBmbGFncyk7 DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZf cmFkaW90YXBfY2hhbm5lbF9mbGFnc19zdHVyYm8sDQorICAgICAgICAgICAgICAgICAgICB0dmIs IG9mZnNldCszLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2Jv b2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19oYWxmLA0KKyAgICAg ICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQrMywgMSwgZmxhZ3MpOw0KKyAgICAgICAgICAgICAg ICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2NoYW5uZWxf ZmxhZ3NfcXVhcnRlciwNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0KzMsIDEsIGZs YWdzKTsNCisgICAgICAgICAgICAgICAgcmFkaW90YXBfaW5mby0+ZnJlcT1mcmVxOw0KKyAgICAg ICAgICAgICAgICByYWRpb3RhcF9pbmZvLT5mbGFncz1mbGFnczsNCisgICAgICAgICAgICB9DQor ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgICAgICBjYXNlIElFRUU4MDIxMV9S QURJT1RBUF9YQ0hBTk5FTDogew0KKyAgICAgICAgICAgIHByb3RvX2l0ZW0gKml0Ow0KKyAgICAg ICAgICAgIHByb3RvX3RyZWUgKmZsYWdzX3RyZWU7DQorDQorICAgICAgICAgICAgaWYgKHRyZWUp IHsNCisgICAgICAgICAgICAgICAgaW50IGNoYW5uZWw7DQorICAgICAgICAgICAgICAgIGd1aW50 OCBtYXhwb3dlcjsNCisNCisgICAgICAgICAgICAgICAgZmxhZ3MgPSB0dmJfZ2V0X2xldG9obCh0 dmIsIG9mZnNldCk7DQorICAgICAgICAgICAgICAgIGZyZXEgPSB0dmJfZ2V0X2xldG9ocyh0dmIs IG9mZnNldCs0KTsNCisgICAgICAgICAgICAgICAgY2hhbm5lbCA9IHR2Yl9nZXRfZ3VpbnQ4KHR2 Yiwgb2Zmc2V0KzYpOw0KKyAgICAgICAgICAgICAgICBtYXhwb3dlciA9IHR2Yl9nZXRfZ3VpbnQ4 KHR2Yiwgb2Zmc2V0KzcpOw0KKyAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF91aW50KHJh ZGlvdGFwX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsLA0KKyAgICAgICAgICAgICAgICAgICAg dHZiLCBvZmZzZXQrNiwgMSwgKGd1aW50MzIpIGNoYW5uZWwpOw0KKyAgICAgICAgICAgICAgICBw cm90b190cmVlX2FkZF91aW50KHJhZGlvdGFwX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2Zy ZXF1ZW5jeSwNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0KzQsIDIsIGZyZXEpOw0K KyAgICAgICAgICAgICAgICBpdCA9IHByb3RvX3RyZWVfYWRkX3VpbnQocmFkaW90YXBfdHJlZSwg aGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3MsDQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9m ZnNldCswLCA0LCBmbGFncyk7DQorICAgICAgICAgICAgICAgIGZsYWdzX3RyZWUgPSBwcm90b19p dGVtX2FkZF9zdWJ0cmVlKGl0LCBldHRfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3MpOw0KKyAgICAg ICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFw X3hjaGFubmVsX2ZsYWdzX3R1cmJvLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQr MCwgMSwgZmxhZ3MpOw0KKyAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZs YWdzX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzX2NjaywNCisgICAgICAgICAgICAg ICAgICAgIHR2Yiwgb2Zmc2V0KzAsIDEsIGZsYWdzKTsNCisgICAgICAgICAgICAgICAgcHJvdG9f dHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19v ZmRtLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQrMCwgMSwgZmxhZ3MpOw0KKyAg ICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlv dGFwX3hjaGFubmVsX2ZsYWdzXzJnaHosDQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNl dCswLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2Jvb2xlYW4o ZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3NfNWdoeiwNCisgICAgICAgICAg ICAgICAgICAgIHR2Yiwgb2Zmc2V0KzEsIDEsIGZsYWdzKTsNCisgICAgICAgICAgICAgICAgcHJv dG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFn c19wYXNzaXZlLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQrMSwgMSwgZmxhZ3Mp Ow0KKyAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhm X3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzX2R5bmFtaWMsDQorICAgICAgICAgICAgICAgICAgICB0 dmIsIG9mZnNldCsxLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRk X2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3NfZ2ZzaywNCisg ICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0KzEsIDEsIGZsYWdzKTsNCisgICAgICAgICAg ICAgICAgcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hh bm5lbF9mbGFnc19nc20sDQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCsxLCAxLCBm bGFncyk7DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJl ZSwgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3Nfc3R1cmJvLA0KKyAgICAgICAgICAgICAgICAg ICAgdHZiLCBvZmZzZXQrMSwgMSwgZmxhZ3MpOw0KKyAgICAgICAgICAgICAgICBwcm90b190cmVl X2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzX2hhbGYs DQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCsxLCAxLCBmbGFncyk7DQorICAgICAg ICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBf eGNoYW5uZWxfZmxhZ3NfcXVhcnRlciwNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0 KzEsIDEsIGZsYWdzKTsNCisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihm bGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19odDIwLA0KKyAgICAgICAgICAg ICAgICAgICAgdHZiLCBvZmZzZXQrMiwgMSwgZmxhZ3MpOw0KKyAgICAgICAgICAgICAgICBwcm90 b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdz X2h0NDB1LA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQrMiwgMSwgZmxhZ3MpOw0K KyAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3Jh ZGlvdGFwX3hjaGFubmVsX2ZsYWdzX2h0NDBkLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBv ZmZzZXQrMiwgMSwgZmxhZ3MpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBicmVhazsN CisgICAgICAgIH0NCisgICAgICAgIGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0ZIU1M6DQorICAg ICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF9m aHNzX2hvcHNldCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0 LCAxLCBGQUxTRSk7DQorICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShyYWRpb3RhcF90 cmVlLCBoZl9yYWRpb3RhcF9maHNzX3BhdHRlcm4sDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0dmIsIG9mZnNldCwgMSwgRkFMU0UpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAg ICAgICAgY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfVFhfQVRURU5VQVRJT046DQorICAgICAgICAg ICAgcHJvdG9fdHJlZV9hZGRfaXRlbShyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF90eF9hdHRl bnVhdGlvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAy LCBGQUxTRSk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlIElFRUU4MDIxMV9S QURJT1RBUF9EQl9UWF9BVFRFTlVBVElPTjoNCisgICAgICAgICAgICBwcm90b190cmVlX2FkZF9p dGVtKHJhZGlvdGFwX3RyZWUsIGhmX3JhZGlvdGFwX2RiX3R4X2F0dGVudWF0aW9uLA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQsIDIsIEZBTFNFKTsNCisgICAg ICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1RTRlQ6DQog ICAgICAgICAgICAgcmFkaW90YXBfaW5mby0+dHNmdD10dmJfZ2V0X2xldG9oNjQodHZiLCBvZmZz ZXQpOw0KLQkgICAgaWYgKHRyZWUpIHsNCi0JCXByb3RvX3RyZWVfYWRkX3VpbnQ2NChyYWRpb3Rh cF90cmVlLCBoZl9yYWRpb3RhcF9tYWN0aW1lLA0KLQkJCQl0dmIsIG9mZnNldCwgOCxyYWRpb3Rh cF9pbmZvLT50c2Z0ICk7DQotCSAgICB9DQotCSAgICBvZmZzZXQrPTg7DQotCSAgICBsZW5ndGhf cmVtYWluaW5nLT04Ow0KLQkgICAgYnJlYWs7DQotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0xP Q0tfUVVBTElUWToNCi0JICAgIGFsaWduX29mZnNldCA9IEFMSUdOX09GRlNFVChvZmZzZXQsIDIp Ow0KLQkgICAgb2Zmc2V0ICs9IGFsaWduX29mZnNldDsNCi0JICAgIGxlbmd0aF9yZW1haW5pbmcg LT0gYWxpZ25fb2Zmc2V0Ow0KLQkgICAgaWYgKGxlbmd0aF9yZW1haW5pbmcgPCAyKQ0KLQkJYnJl YWs7DQotCSAgICBpZiAodHJlZSkgew0KLQkJcHJvdG9fdHJlZV9hZGRfdWludChyYWRpb3RhcF90 cmVlLCBoZl9yYWRpb3RhcF9xdWFsaXR5LA0KLQkJCQl0dmIsIG9mZnNldCwgMiwgdHZiX2dldF9s ZXRvaHModHZiLCBvZmZzZXQpKTsNCi0JICAgIH0NCi0JICAgIG9mZnNldCs9MjsNCi0JICAgIGxl bmd0aF9yZW1haW5pbmctPTI7DQotCSAgICBicmVhazsNCi0JY2FzZSBJRUVFODAyMTFfUkFESU9U QVBfUlhfRkxBR1M6DQotCSAgICBpZiAocmFkaW90YXBfYml0MTRfZmNzKSB7DQotCSAgICAgICAg YWxpZ25fb2Zmc2V0ID0gQUxJR05fT0ZGU0VUKG9mZnNldCwgNCk7DQotCSAgICAgICAgb2Zmc2V0 ICs9IGFsaWduX29mZnNldDsNCi0JICAgICAgICBsZW5ndGhfcmVtYWluaW5nIC09IGFsaWduX29m ZnNldDsNCi0JICAgICAgICBpZiAobGVuZ3RoX3JlbWFpbmluZyA8IDQpDQotCSAgICAgICAgICAg IGJyZWFrOw0KKyAgICAgICAgICAgIGlmICh0cmVlKSB7DQorICAgICAgICAgICAgICAgIHByb3Rv X3RyZWVfYWRkX3VpbnQ2NChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF9tYWN0aW1lLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCA4LHJhZGlvdGFwX2luZm8tPnRzZnQg KTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlIElF RUU4MDIxMV9SQURJT1RBUF9MT0NLX1FVQUxJVFk6DQorICAgICAgICAgICAgaWYgKHRyZWUpIHsN CisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfdWludChyYWRpb3RhcF90cmVlLCBoZl9y YWRpb3RhcF9xdWFsaXR5LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAy LCB0dmJfZ2V0X2xldG9ocyh0dmIsIG9mZnNldCkpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg ICAgICBicmVhazsNCisgICAgICAgIGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTOg0K KyAgICAgICAgICAgIGlmIChyYWRpb3RhcF9iaXQxNF9mY3MpIHsNCiAgICAgICAgICAgICAgICAg aWYgKHRyZWUpIHsNCi0gICAgICAgICAgICAgICAgICAgIHNlbnRfZmNzID0gdHZiX2dldF9udG9o bCh0dmIsIG9mZnNldCk7DQotICAgICAgICAgICAgICAgICAgICBoZHJfZmNzX3RpID0gcHJvdG9f dHJlZV9hZGRfdWludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF9mY3MsDQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCwg NCwgc2VudF9mY3MpOw0KLSAgICAgICAgICAgICAgICAgICAgaGRyX2Zjc19vZmZzZXQgPSBvZmZz ZXQ7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2VudF9mY3MgPSB0dmJfZ2V0X250b2hsKHR2 Yiwgb2Zmc2V0KTsNCisgICAgICAgICAgICAgICAgICAgICAgICBoZHJfZmNzX3RpID0gcHJvdG9f dHJlZV9hZGRfdWludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF9mY3MsDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZz ZXQsIDQsIHNlbnRfZmNzKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBoZHJfZmNzX29mZnNl dCA9IG9mZnNldDsNCiAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBvZmZzZXQr PTQ7DQotICAgICAgICAgICAgICAgIGxlbmd0aF9yZW1haW5pbmctPTQ7DQotCSAgICB9IGVsc2Ug ew0KLQkgICAgICAgIHByb3RvX2l0ZW0gKml0Ow0KLQ0KLSAgICAgICAgICAgICAgICBhbGlnbl9v ZmZzZXQgPSBBTElHTl9PRkZTRVQob2Zmc2V0LCAyKTsNCi0gICAgICAgICAgICAgICAgb2Zmc2V0 ICs9IGFsaWduX29mZnNldDsNCi0gICAgICAgICAgICAgICAgbGVuZ3RoX3JlbWFpbmluZyAtPSBh bGlnbl9vZmZzZXQ7DQotICAgICAgICAgICAgICAgIGlmIChsZW5ndGhfcmVtYWluaW5nIDwgMikN Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAg ICAgICAgICAgICAgIHByb3RvX2l0ZW0gKml0Ow0KKw0KICAgICAgICAgICAgICAgICBpZiAodHJl ZSkgew0KLSAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSB0dmJfZ2V0X2xldG9ocyh0dmIsIG9m ZnNldCk7DQotICAgICAgICAgICAgICAgICAgICBpdCA9IHByb3RvX3RyZWVfYWRkX3VpbnQocmFk aW90YXBfdHJlZSwgaGZfcmFkaW90YXBfcnhmbGFncywNCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgdHZiLCBvZmZzZXQsIDIsIGZsYWdzKTsNCi0gICAgICAgICAgICAgICAgICAgIGZsYWdz X3RyZWUgPSBwcm90b19pdGVtX2FkZF9zdWJ0cmVlKGl0LCBldHRfcmFkaW90YXBfcnhmbGFncyk7 DQotICAgICAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUs IGhmX3JhZGlvdGFwX3J4ZmxhZ3NfYmFkcGxjcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHZiLCBvZmZzZXQsIDEsIGZsYWdzKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBmbGFn cyA9IHR2Yl9nZXRfbGV0b2hzKHR2Yiwgb2Zmc2V0KTsNCisgICAgICAgICAgICAgICAgICAgICAg ICBpdCA9IHByb3RvX3RyZWVfYWRkX3VpbnQocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBfcnhm bGFncywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAyLCBm bGFncyk7DQorICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3NfdHJlZSA9IHByb3RvX2l0ZW1f YWRkX3N1YnRyZWUoaXQsIGV0dF9yYWRpb3RhcF9yeGZsYWdzKTsNCisgICAgICAgICAgICAgICAg ICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX3J4 ZmxhZ3NfYmFkcGxjcCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zm c2V0LCAxLCBmbGFncyk7DQogICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgb2Zm c2V0Kz0yOw0KLSAgICAgICAgICAgICAgICBsZW5ndGhfcmVtYWluaW5nLT0yOw0KICAgICAgICAg ICAgIH0NCi0JICAgIGJyZWFrOw0KLQlkZWZhdWx0Og0KLQkgICAgLyoNCi0JICAgICAqIFRoaXMg aW5kaWNhdGVzIGEgZmllbGQgd2hvc2Ugc2l6ZSB3ZSBkbyBub3QNCi0JICAgICAqIGtub3csIHNv IHdlIGNhbm5vdCBwcm9jZWVkLg0KLQkgICAgICovDQotCSAgICBuZXh0X3ByZXNlbnQgPSAwOw0K LQkgICAgY29udGludWU7DQotCX0NCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCiAg ICAgfQ0KIA0KKyAgICBpZiAoZXJyICE9IC1FTk9FTlQgJiYgdHJlZSkNCisgICAgICAgIHByb3Rv X2l0ZW1fYXBwZW5kX3RleHQodGksICIgKG1hbGZvcm1lZCkiKTsNCisNCiAgICAgLyogVGhpcyBo YW5kbGVzIHRoZSBjYXNlIG9mIGFuIEZDUyBleGl0aW5nIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1l LiAqLw0KICAgICBpZiAocmZsYWdzICYgSUVFRTgwMjExX1JBRElPVEFQX0ZfRkNTKQ0KLQlwaW5m by0+cHNldWRvX2hlYWRlci0+aWVlZV84MDJfMTEuZmNzX2xlbiA9IDQ7DQorICAgICAgICBwaW5m by0+cHNldWRvX2hlYWRlci0+aWVlZV84MDJfMTEuZmNzX2xlbiA9IDQ7DQogICAgIGVsc2UNCi0J cGluZm8tPnBzZXVkb19oZWFkZXItPmllZWVfODAyXzExLmZjc19sZW4gPSAwOw0KKyAgICAgICAg cGluZm8tPnBzZXVkb19oZWFkZXItPmllZWVfODAyXzExLmZjc19sZW4gPSAwOw0KIA0KK2hhbmRf b2ZmX3RvXzgwMjExOg0KICAgICAvKiBHcmFiIHRoZSByZXN0IG9mIHRoZSBmcmFtZS4gKi8NCiAg ICAgbmV4dF90dmIgPSB0dmJfbmV3X3N1YnNldF9yZW1haW5pbmcodHZiLCBsZW5ndGgpOw0KIA0K LS0tIHRydW5rLm9yaWcvZXBhbi9kaXNzZWN0b3JzL01ha2VmaWxlLmNvbW1vbgkyMDA5LTExLTI2 IDE4OjUwOjUxLjAwMDAwMDAwMCArMDEwMA0KKysrIHRydW5rL2VwYW4vZGlzc2VjdG9ycy9NYWtl ZmlsZS5jb21tb24JMjAwOS0xMS0yNiAxODo1Mzo1My4wMDAwMDAwMDAgKzAxMDANCkBAIC03NDAs NiArNzQwLDcgQEAgRElTU0VDVE9SX1NSQyA9IFwNCiAJcGFja2V0LXJhZGl1cy5jCQlcDQogCXBh Y2tldC1yYWRpdXNfcGFja2V0Y2FibGUuYwlcDQogCXBhY2tldC1yYWRpb3RhcC5jCVwNCisJcGFj a2V0LXJhZGlvdGFwLWl0ZXIuYwlcDQogCXBhY2tldC1yYXcuYwkJXA0KIAlwYWNrZXQtcmRtLmMJ CVwNCiAJcGFja2V0LXJkdC5jCQlcDQpAQCAtMTE2OCw2ICsxMTY5LDggQEAgRElTU0VDVE9SX0lO Q0xVREVTID0JXA0KIAlwYWNrZXQtcTkzMi5oCVwNCiAJcGFja2V0LXFzaWcuaAlcDQogCXBhY2tl dC1yYWRpb3RhcC5oCVwNCisJcGFja2V0LXJhZGlvdGFwLWl0ZXIuaAlcDQorCXBhY2tldC1yYWRp b3RhcC1kZWZzLmgJXA0KIAlwYWNrZXQtcmFkaXVzLmgJXA0KIAlwYWNrZXQtcmFuYXAuaAlcDQog CXBhY2tldC1yYXcuaAlcDQotLS0gdHJ1bmsub3JpZy9lcGFuL2Rpc3NlY3RvcnMvTWFrZWZpbGUu bm1ha2UJMjAwOS0xMS0yNiAxODo1MDo1MS4wMDAwMDAwMDAgKzAxMDANCisrKyB0cnVuay9lcGFu L2Rpc3NlY3RvcnMvTWFrZWZpbGUubm1ha2UJMjAwOS0xMS0yNiAxODo1Mzo1My4wMDAwMDAwMDAg KzAxMDANCkBAIC0xMiw3ICsxMiw3IEBAIGluY2x1ZGUgQ3VzdG9tLm5tYWtlDQogaW5jbHVkZSBN YWtlZmlsZS5jb21tb24NCiANCiBDRkxBR1M9LVdYIC1ESEFWRV9DT05GSUdfSCAvSS4gL0kuLiAv SS4uLy4uICQoR0xJQl9DRkxBR1MpIFwNCi0JJChaTElCX0NGTEFHUykgXA0KKwkkKFpMSUJfQ0ZM QUdTKSAtRFJBRElPVEFQX1NVUFBPUlRfT1ZFUlJJREVTIFwNCiAJJChQQ1JFX0NGTEFHUykgJChH TlVUTFNfQ0ZMQUdTKSAkKE5FVFRMRV9DRkxBR1MpIFwNCiAJJChLRldfQ0ZMQUdTKSAkKEFJUlBD QVBfQ0ZMQUdTKSAkKEdFT0lQX0NGTEFHUykgXA0KIAkvSSQoUENBUF9ESVIpXGluY2x1ZGUgLURf VV89IiIgJChMT0NBTF9DRkxBR1MpDQo= --=-Itg9672XATyA12h1SH3I-- --=-BoTShiWGOhneCqohXLBK Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJLDsEjAAoJEODzc/N7+QmabF4P/3F3bQK3vqI+ASY/DuWJ9rVF NniUGO4IK7pYbYvzh7BGYfCbOR8Nt9NTx+5VaDfoL1op2OjFtShvVYbL/1MxgIHo 1P6kscUTiu37+lotakwPCZqToI85mIePZnYWRUOrZeSM/TtJbNU1Mm3WaYcBiYet ophf6pIVBGIsRLYBp2ALKmJmCThxKwJiGPMIPoihtvFrBZ8Lsl0N/+ZDbhXmTSud ShIUq5PNgyGEaqTw3kc1wP16Eaeq9c7cOlY/kwQheW+N1VRstGSnSf4JzJHBl7GI yUddKMHyZJxC69AMe8V2oSqGcq9hA7mLzwVsKyD7cyJb+4yNeeDwoRk0dOnN3Qpy NUV2Md5aas2UwJo9jxXoceWawrm1uNasP2gEwGpYx8o0/pVOAf0sJtIfJ/mDIj4b 651MXDIYUdlUI2WuyJNOKFSDT9FIIxtSCqkHMG5xMNeYM0XusDlC4i8BQeQa3aZ3 3wlVnsVXsvuq2KJvyTb/cOzwUM54PILbcryDqiDi38LyebcWTjsN+3IPcpFvU58u 10q7xbjVkKP9RB+2ecdl/1pYWT49YmeDjqMj4aWPhJ1Vm08NpyS1kEw1Sxp+VP8b Co515a2w9L9EE4zkcno9+wGaxIIa3wtdLjrHY5kz897KE+hkIaUQVDqqwRYT+HTs wVwyK2OCFqHjQLuKNDBD =JSK0 -----END PGP SIGNATURE----- --=-BoTShiWGOhneCqohXLBK--