Received: from localhost (unknown [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id 6C0E764FCBA for ; Fri, 5 Sep 2008 16:13:12 -0300 (ADT) Received: from postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 28112-03 for ; Fri, 5 Sep 2008 16:13:06 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail.esilo.com (manager.esilo.com [63.150.152.211]) by postgresql.org (Postfix) with ESMTP id 6C3D6650078 for ; Fri, 5 Sep 2008 16:13:06 -0300 (ADT) Received: from [10.0.0.2] (fwext-esilo-jupiter.esilo.com [64.135.45.146]) (authenticated bits=0) by mail.esilo.com (8.13.1/8.13.1) with ESMTP id m85JD2bd030794; Fri, 5 Sep 2008 15:13:02 -0400 Message-ID: <48C18533.2000204@esilo.com> Date: Fri, 05 Sep 2008 15:14:59 -0400 From: Andrew Chernow User-Agent: Thunderbird 2.0.0.16 (Windows/20080708) MIME-Version: 1.0 To: "Patches (PostgreSQL)" CC: Merlin Moncure Subject: libpq events patch (with sgml docs) Content-Type: multipart/mixed; boundary="------------040001010206070103060003" X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200809/60 X-Sequence-Number: 7075 This is a multi-part message in MIME format. --------------040001010206070103060003 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit - Added sgml docs. - Removed the PQpassThroughData and PQresultPassThroughData functions. - Added an argument to PGEventProc, the passThrough pointer. - fixed some errors in the code comments due to code shuffles. -- Andrew Chernow eSilo, LLC every bit counts http://www.esilo.com/ --------------040001010206070103060003 Content-Type: application/x-compressed; name="libpq-events.tgz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="libpq-events.tgz" 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 --------------040001010206070103060003 Content-Type: text/plain; name="libpq-events.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="libpq-events.patch" SW5kZXg6IGRvYy9zcmMvc2dtbC9saWJwcS5zZ21sCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjI2MApkaWZmIC1DNiAtcjEuMjYwIGxpYnBxLnNnbWwKKioq IGRvYy9zcmMvc2dtbC9saWJwcS5zZ21sCTI3IEp1biAyMDA4IDAyOjQ0OjMxIC0wMDAwCTEu MjYwCi0tLSBkb2Mvc3JjL3NnbWwvbGlicHEuc2dtbAk1IFNlcCAyMDA4IDE5OjAwOjU2IC0w MDAwCioqKioqKioqKioqKioqKgoqKiogMjA5MiwyMTAzICoqKioKLS0tIDIwOTIsMjIyMiAt LS0tCiAgICAgICAgICBOb3RlIHRoYXQgPGZ1bmN0aW9uPlBRY2xlYXI8L2Z1bmN0aW9uPiBz aG91bGQgZXZlbnR1YWxseSBiZSBjYWxsZWQKICAgICAgICAgIG9uIHRoZSBvYmplY3QsIGp1 c3QgYXMgd2l0aCBhIDxzdHJ1Y3RuYW1lPlBHcmVzdWx0PC9zdHJ1Y3RuYW1lPgogICAgICAg ICAgcmV0dXJuZWQgYnkgPGFwcGxpY2F0aW9uPmxpYnBxPC9hcHBsaWNhdGlvbj4gaXRzZWxm LgogICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlz dGVudHJ5PgorIAorICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT4KKyAgICAg ICAgPGZ1bmN0aW9uPlBRY29weVJlc3VsdDwvZnVuY3Rpb24+CisgICAgICAgIDxpbmRleHRl cm0+CisgICAgICAgICA8cHJpbWFyeT5QUWNvcHlSZXN1bHQ8L3ByaW1hcnk+CisgICAgICAg IDwvaW5kZXh0ZXJtPgorICAgICAgIDwvdGVybT4KKyAKKyAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgIDxwYXJhPgorICAgICAgICAgTWFrZXMgYSBjb3B5IG9mIGEgPHN0cnVjdG5hbWU+ UEdyZXN1bHQ8L3N0cnVjdG5hbWU+IG9iamVjdC4KKyAgICAgICAgIDxzeW5vcHNpcz4KKyAg ICAgICAgICBQR3Jlc3VsdCAqUFFjb3B5UmVzdWx0KGNvbnN0IFBHcmVzdWx0ICpzcmMsIGlu dCBmbGFncyk7CisgICAgICAgICA8L3N5bm9wc2lzPgorICAgICAgICA8L3BhcmE+CisgCisg ICAgICAgIDxwYXJhPgorICAgICAgICAgVGhlIHJldHVybmVkIHJlc3VsdCBpcyBhbHdheXMg cHV0IGludG8gPGxpdGVyYWw+UEdSRVNfVFVQTEVTX09LPC9saXRlcmFsPiBzdGF0dXMuCisg ICAgICAgICBJdCBpcyBub3QgbGlua2VkIHRvIHRoZSBzb3VyY2UgcmVzdWx0IGluIGFueSB3 YXkgYW5kCisgICAgICAgICA8ZnVuY3Rpb24+UFFjbGVhcjwvZnVuY3Rpb24+IG11c3QgYmUg Y2FsbGVkIHdoZW4gdGhlIHJlc3VsdCBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAg SWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBOVUxMIGlzIHJldHVybmVkLgorICAgICAgICA8L3Bh cmE+CisgCisgICAgICAgIDxwYXJhPgorICAgICAgICAgT3B0aW9uYWxseSwgdGhlIDxwYXJh bWV0ZXI+ZmxhZ3M8L3BhcmFtZXRlcj4gYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gY29weQor ICAgICAgICAgbW9yZSBwYXJ0cyBvZiB0aGUgcmVzdWx0LiAgPGxpdGVyYWw+UEdfQ09QWVJF U19BVFRSUzwvbGl0ZXJhbD4gd2lsbCBjb3B5IHRoZQorICAgICAgICAgc291cmNlIHJlc3Vs dCdzIGF0dHJpYnV0ZXMuICA8bGl0ZXJhbD5QR19DT1BZUkVTX1RVUExFUzwvbGl0ZXJhbD4g d2lsbCBjb3B5CisgICAgICAgICB0aGUgc291cmNlIHJlc3VsdCdzIHR1cGxlcy4gIFRoaXMg aW1wbGllcyBjb3B5aW5nIHRoZSBhdHRycywgYmVpbmcgaG93IHRoZQorICAgICAgICAgYXR0 cnMgYXJlIG5lZWRlZCBieSB0aGUgdHVwbGVzLiAgPGxpdGVyYWw+UEdfQ09QWVJFU19FVkVO VFM8L2xpdGVyYWw+IHdpbGwKKyAgICAgICAgIGNvcHkgdGhlIHNvdXJjZSByZXN1bHQncyBl dmVudHMuICA8bGl0ZXJhbD5QR19DT1BZUkVTX05PVElDRUhPT0tTPC9saXRlcmFsPgorICAg ICAgICAgd2lsbCBjb3B5IHRoZSBzb3VyY2UgcmVzdWx0J3Mgbm90aWZ5IGhvb2tzLgorICAg ICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5 PgorIAorICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT4KKyAgICAgICAgPGZ1 bmN0aW9uPlBRc2V0UmVzdWx0QXR0cnM8L2Z1bmN0aW9uPgorICAgICAgICA8aW5kZXh0ZXJt PgorICAgICAgICAgPHByaW1hcnk+UFFzZXRSZXN1bHRBdHRyczwvcHJpbWFyeT4KKyAgICAg ICAgPC9pbmRleHRlcm0+CisgICAgICAgPC90ZXJtPgorIAorICAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgPHBhcmE+CisgICAgICAgICBTZXRzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgPHN0 cnVjdG5hbWU+UEdyZXN1bHQ8L3N0cnVjdG5hbWU+IG9iamVjdC4KKyAgICAgICAgIDxzeW5v cHNpcz4KKyAgICAgICAgICBpbnQgUFFzZXRSZXN1bHRBdHRycyhQR3Jlc3VsdCAqcmVzLCBp bnQgbnVtQXR0cmlidXRlcywgUEdyZXNBdHREZXNjICphdHREZXNjcyk7CisgICAgICAgICA8 L3N5bm9wc2lzPgorICAgICAgICA8L3BhcmE+CisgCisgICAgICAgIDxwYXJhPgorICAgICAg ICAgVGhlIHByb3ZpZGVkIDxwYXJhbWV0ZXI+YXR0RGVzY3M8L3BhcmFtZXRlcj4gYXJlIGNv cGllZCBpbnRvIHRoZSByZXN1bHQsIHRodXMgdGhlCisgICAgICAgICA8cGFyYW1ldGVyPmF0 dERlc2NzPC9wYXJhbWV0ZXI+IGFyZSBubyBsb25nZXIgbmVlZGVkIGJ5IDxwYXJhbWV0ZXI+ cmVzPC9wYXJhbWV0ZXI+IGFmdGVyCisgICAgICAgICB0aGUgZnVuY3Rpb24gcmV0dXJucy4g IElmIHRoZSA8cGFyYW1ldGVyPmF0dERlc2NzPC9wYXJhbWV0ZXI+IGFyZSBOVUxMIG9yCisg ICAgICAgICA8cGFyYW1ldGVyPm51bUF0dHJpYnV0ZXM8L3BhcmFtZXRlcj4gaXMgbGVzcyB0 aGFuIG9uZSwgdGhlIHJlcXVlc3QgaXMgaWdub3JlZCBhbmQKKyAgICAgICAgIHRoZSBmdW5j dGlvbiBzdWNjZWVkcy4gIElmIDxwYXJhbWV0ZXI+cmVzPC9wYXJhbWV0ZXI+IGFscmVhZHkg Y29udGFpbnMgYXR0cmlidXRlcywKKyAgICAgICAgIHRoZSBmdW5jdGlvbiB3aWxsIGZhaWwu ICBJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4gIElm IHRoZQorICAgICAgICAgZnVuY3Rpb24gc3VjY2VlZHMsIHRoZSByZXR1cm4gdmFsdWUgaXMg bm9uLXplcm8uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAg PC92YXJsaXN0ZW50cnk+CisgCisgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgIDx0ZXJt PgorICAgICAgICA8ZnVuY3Rpb24+UFFzZXR2YWx1ZTwvZnVuY3Rpb24+CisgICAgICAgIDxp bmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5QUXNldHZhbHVlPC9wcmltYXJ5PgorICAg ICAgICA8L2luZGV4dGVybT4KKyAgICAgICA8L3Rlcm0+CisgCisgICAgICAgPGxpc3RpdGVt PgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIFNldHMgYSB0dXBsZSBmaWVsZCB2YWx1ZSBv ZiBhIDxzdHJ1Y3RuYW1lPlBHcmVzdWx0PC9zdHJ1Y3RuYW1lPiBvYmplY3QuCisgICAgICAg ICA8c3lub3BzaXM+CisgICAgICAgICAgaW50IFBRc2V0dmFsdWUoUEdyZXN1bHQgKnJlcywg aW50IHR1cF9udW0sIGludCBmaWVsZF9udW0sIGNoYXIgKnZhbHVlLCBpbnQgbGVuKTsKKyAg ICAgICAgIDwvc3lub3BzaXM+CisgICAgICAgIDwvcGFyYT4KKyAKKyAgICAgICAgPHBhcmE+ CisgICAgICAgICBUaGUgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGdyb3cgdGhlIHJl c3VsdCdzIGludGVybmFsIHR1cGxlcyBhcnJheSBhcyBuZWVkZWQuCisgICAgICAgICBUaGUg PHBhcmFtZXRlcj50dXBfbnVtPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IG11c3QgYmUgbGVzcyB0 aGFuIG9yIGVxdWFsIHRvCisgICAgICAgICA8ZnVuY3Rpb24+UFFudHVwbGVzPC9mdW5jdGlv bj4sIG1lYW5pbmcgdGhpcyBmdW5jdGlvbiBjYW4gb25seSBncm93IHRoZQorICAgICAgICAg dHVwbGVzIGFycmF5IGluIG9yZGVyIG9uZSB0dXBsZSBhdCBhIHRpbWUuICBBbHRob3VnaCwg YW55IGZpZWxkIGZyb20gYW55CisgICAgICAgICBleGlzdGluZyB0dXBsZSBjYW4gYmUgbW9k aWZpZWQgaW4gYW55IG9yZGVyLiAgSWYgYSB2YWx1ZSBhdCA8cGFyYW1ldGVyPmZpZWxkX251 bTwvcGFyYW1ldGVyPgorICAgICAgICAgYWxyZWFkeSBlaXhzdHMsIGl0IHdpbGwgYmUgb3Zl cndyaXR0ZW4uICBJZiA8cGFyYW1ldGVyPmxlbjwvcGFyYW1ldGVyPiBpcyA8bGl0ZXJhbD4t MTwvbGl0ZXJhbD4gb3IKKyAgICAgICAgIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4g aXMgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4sIHRoZSBmaWVsZCB2YWx1ZSB3aWxsCisgICAg ICAgICBiZSBzZXQgdG8gYW4gU1FMIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LiAgVGhlIDxw YXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gaXMgY29waWVkCisgICAgICAgICBpbnRvIHJl c3VsdCdzIHByaXZhdGUgc3RvcmFnZSwgdGh1cyBubyBsb25nZXIgbmVlZGVkIGJ5IDxwYXJh bWV0ZXI+cmVzPC9wYXJhbWV0ZXI+IGFmdGVyCisgICAgICAgICB0aGUgZnVuY3Rpb24gcmV0 dXJucy4gIElmIHRoZSBmdW5jdGlvbiBmYWlscywgdGhlIHJldHVybiB2YWx1ZQorICAgICAg ICAgaXMgemVyby4gIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcywgdGhlIHJldHVybiB2YWx1 ZSBpcyBub24temVyby4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAg PHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5QUXJlc3VsdEFsbG9jPC9mdW5jdGlvbj4KKyAg ICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PlBRcmVzdWx0QWxsb2M8L3By aW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgIDwvdGVybT4KKyAKKyAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgQWxsb2NhdGUgc3Vic2lk aWFyeSBzdG9yYWdlIGZvciBhIDxzdHJ1Y3RuYW1lPlBHcmVzdWx0PC9zdHJ1Y3RuYW1lPiBv YmplY3QuCisgICAgICAgICA8c3lub3BzaXM+CisgICAgICAgICAgdm9pZCAqUFFyZXN1bHRB bGxvYyhQR3Jlc3VsdCAqcmVzLCBzaXplX3QgbkJ5dGVzKTsKKyAgICAgICAgIDwvc3lub3Bz aXM+CisgICAgICAgIDwvcGFyYT4KKyAKKyAgICAgICAgPHBhcmE+CisgICAgICAgICBBbnkg bWVtb3J5IGFsbG9jYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24sIHdpbGwgYmUgZnJlZWQgd2hl bgorICAgICAgICAgPHBhcmFtZXRlcj5yZXM8L3BhcmFtZXRlcj4gaXMgY2xlYXJlZC4gIElm IHRoZSBmdW5jdGlvbiBmYWlscywKKyAgICAgICAgIHRoZSByZXR1cm4gdmFsdWUgaXMgPGxp dGVyYWw+TlVMTDwvbGl0ZXJhbD4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3Rp dGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAg IDwvcGFyYT4KICAgIDwvc2VjdDI+CiAgCiAgICA8c2VjdDIgaWQ9ImxpYnBxLWV4ZWMtc2Vs ZWN0LWluZm8iPgogICAgIDx0aXRsZT5SZXRyaWV2aW5nIFF1ZXJ5IFJlc3VsdCBJbmZvcm1h dGlvbjwvdGl0bGU+CioqKioqKioqKioqKioqKgoqKiogNDU1OCw0NTY5ICoqKioKLS0tIDQ2 NzcsNTE1OCAtLS0tCiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC92YXJsaXN0ZW50cnk+CiAg ICA8L3ZhcmlhYmxlbGlzdD4KICAKICAgPC9zZWN0MT4KICAKKyAgPHNlY3QxIGlkPSJsaWJw cS1ldmVudHMiPgorICAgPHRpdGxlPkV2ZW50IFN5c3RlbTwvdGl0bGU+CisgCisgICA8cGFy YT4KKyAgICBUaGUgZXZlbnQgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIG5vdGlmeSByZWdpc3Rl cmVkIGV2ZW50IGhhbmRsZXJzCisgICAgYWJvdXQgcGFydGljdWxhciBsaWJwcSBldmVudHM7 IHN1Y2ggYXMgdGhlIGNyZWF0aW9uIG9yIGRlc3RydWN0aW9uCisgICAgb2YgPHN0cnVjdG5h bWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBhbmQgPHN0cnVjdG5hbWU+UEdyZXN1bHQ8L3N0cnVj dG5hbWU+CisgICAgb2JqZWN0cy4gIE9uZSB1c2UgY2FzZSBpcyB0aGF0IHRoaXMgYWxsb3dz IGFwcGxpY2F0aW9ucyB0byBhc3NvY2lhdGUKKyAgICB0aGVpciBvd24gZGF0YSB3aXRoIGEg PHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBhbmQKKyAgICA8c3RydWN0bmFtZT5Q R3Jlc3VsdDwvc3RydWN0bmFtZT4sIHRoYXQgY2FuIHJldHJpZXZlZCB2aWEKKyAgICA8ZnVu Y3Rpb24+UFFpbnN0YW5jZURhdGE8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPlBRcmVzdWx0 SW5zdGFuY2VEYXRhPC9mdW5jdGlvbj4uCisgICAgQmFzaWNhbGx5LCBpdHMgbGlrZSBhZGRp bmcgbWVtYmVycyB0byB0aGUgb3BhcXVlIGNvbm4gb3IgcmVzdWx0CisgICAgc3RydWN0dXJl cyBhdCBydW50aW1lLgorICAgPC9wYXJhPgorIAorICAgPHBhcmE+CisgICAgQmVsb3cgaXMg YSBsaXN0IG9mIGV2ZW50IHN5c3RlbSBjb25jZXB0czoKKyAgICA8aXRlbWl6ZWRsaXN0IG1h cms9J2J1bGxldCc+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgIDxs aXRlcmFsPmV2ZW50SWQ8L2xpdGVyYWw+IC0gSWRlbnRpZmllcyB3aGljaCBldmVudCB3YXMg ZmlyZWQgYnkgbGlicHEuICBBbGwKKyAgICAgICBldmVudHMgYmVnaW4gd2l0aCA8bGl0ZXJh bD5QR0VWVF88L2xpdGVyYWw+LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgor ICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICA8bGl0ZXJhbD5ldmVudElu Zm88L2xpdGVyYWw+IC0gRXZlcnkgPGxpdGVyYWw+ZXZlbnRJZDwvbGl0ZXJhbD4gaGFzIGEg Y29ycmVzcG9uZGluZworICAgICAgIGV2ZW50IGluZm8gc3RydWN0dXJlLCB0aGF0IGNvbnRh aW5zIGRhdGEgdG8gYWlkIGluIHByb2Nlc3NpbmcgdGhlIGV2ZW50LgorICAgICAgPC9wYXJh PgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAg ICAgICA8bGl0ZXJhbD5pbnN0YW5jZURhdGE8L2xpdGVyYWw+IC0gVGhlIGluc3RhbmNlIGRh dGEgaXMgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhCisgICAgICAgPHN0cnVjdG5hbWU+UEdj b25uPC9zdHJ1Y3RuYW1lPiBvciA8c3RydWN0bmFtZT5QR3Jlc3VsdDwvc3RydWN0bmFtZT4u ICBUaGUgZGF0YSBpcworICAgICAgIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBhbG9uZyB3aXRo IHdpdGggdGhlIGNvbm5lY3Rpb24gb3IgcmVzdWx0LgorICAgICAgIFR5cGljYWxseSwgaW5z dGFuY2UgZGF0YSBpcyBjcmVhdGVkIGluIHJlc3BvbnNlIHRvCisgICAgICAgYSA8bGl0ZXJh bD5QR0VWVF9SRUdJU1RFUjwvbGl0ZXJhbD4gZXZlbnQsIGJ1dCBjYW4gYmUgY3JlYXRlZCBh dCBhbnkgdGltZSBvcgorICAgICAgIG5vdCBhdCBhbGwuICBNYW5hZ2VtZW50IG9mIGluc3Rh bmNlIGRhdGEgaXMgZG9uZSB1c2luZyB0aGUgPGZ1bmN0aW9uPlBRaW5zdGFuY2VEYXRhPC9m dW5jdGlvbj4sCisgICAgICAgPGZ1bmN0aW9uPlBRc2V0SW5zdGFuY2VEYXRhPC9mdW5jdGlv bj4sIDxmdW5jdGlvbj5QUXJlc3VsdEluc3RhbmNlRGF0YTwvZnVuY3Rpb24+IGFuZAorICAg ICAgIDxmdW5jdGlvbj5QUXNldFJlc3VsdEluc3RhbmNlRGF0YTwvZnVuY3Rpb24+IGZ1bmN0 aW9ucy4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVk bGlzdD4KKyAgIDwvcGFyYT4KKyAKKyAKKyAgIDxzZWN0MiBpZD0ibGlicHEtZXZlbnRzLXR5 cGVzIj4KKyAgICA8dGl0bGU+RXZlbnQgVHlwZXM8L3RpdGxlPgorICAgICA8cGFyYT4KKyAg ICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgPHRl cm0+PGxpdGVyYWw+UEdFVlRfUkVHSVNURVI8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgcmVnaXN0ZXIgZXZl bnQgb2NjdXJzIHdoZW4gPGZ1bmN0aW9uPlBRcmVnaXN0ZXJFdmVudFByb2M8L2Z1bmN0aW9u PiBpcworICAgICAgICAgIGNhbGxlZC4gIEl0IGlzIHRoZSBpZGVhbCB0aW1lIHRvIGluaXRp YWxpemUgYW55IDxsaXRlcmFsPmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4KKyAgICAgICAgICBh biBldmVudCBwcm9jZWR1cmUgbWF5IG5lZWQuICBPbmx5IG9uZSByZWdpc3RlciBldmVudCB3 aWxsIGJlIGZpcmVkIHBlciBjb25uZWN0aW9uLgorICAgICAgICAgIElmIHRoZSBldmVudCBw cm9jZWR1cmUgZmFpbHMsIHRoZSByZWdpc3RyYXRpb24gaXMgYWJvcnRlZC4KKyAKKyAgICAg ICAgIDxzeW5vcHNpcz4KKyB0eXBlZGVmIHN0cnVjdAorIHsKKyAgICAgY29uc3QgUEdjb25u ICpjb25uOworIH0gUEdFdmVudFJlZ2lzdGVyOzwvc3lub3BzaXM+CisgCisgICAgICAgICAg V2hlbiBhIDxsaXRlcmFsPlBHRVZUX1JFR0lTVEVSPC9saXRlcmFsPiBldmVudCBpcyByZWNl aXZlZCwgdGhlIDxwYXJhbWV0ZXI+ZXZ0SW5mbzwvcGFyYW1ldGVyPgorICAgICAgICAgIHBv aW50ZXIgc2hvdWxkIGJlIGNhc3RlZCB0byBhIDxzdHJ1Y3RuYW1lPlBHRXZlbnRSZWdpc3Rl cio8L3N0cnVjdG5hbWU+LiAgVGhpcyBzdHJ1Y3R1cmUKKyAgICAgICAgICBjb250YWlucyBh IDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4gdGhhdCBzaG91bGQgYmUgaW4gdGhl IDxsaXRlcmFsPkNPTk5FQ1RJT05fT0s8L2xpdGVyYWw+CisgICAgICAgICAgc3RhdHVzOyBn dWFyYW50ZWVkIGlmIG9uZSBjYWxscyA8ZnVuY3Rpb24+UFFyZWdpc3RlckV2ZW50UHJvYzwv ZnVuY3Rpb24+IHJpZ2h0IGFmdGVyIG9idGFpbmluZworICAgICAgICAgIGEgZ29vZCA8c3Ry dWN0bmFtZT5QR2Nvbm48L3N0cnVjdG5hbWU+LiAgVGhlIGNvbm5lY3Rpb24gY2FuIGJlIHVz ZWQgdG8gaW5pdGlhbGl6ZSBhbnkKKyAgICAgICAgICBhcHBsaWNhdGlvbiBzcGVjaWZpYyBu ZWVkczogbGlrZSBhbGxvY2F0aW5nIHN0cnVjdHVyZXMgYXMgdGhlIGV2ZW50IDxsaXRlcmFs Pmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4KKyAgICAgICAgICBvciBleGVjdXRpbmcgU1FMIHN0 YXRlbWVudHMuCisgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAg ICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAg PHRlcm0+PGxpdGVyYWw+UEdFVlRfQ09OTlJFU0VUPC9saXRlcmFsPjwvdGVybT4KKyAgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGNvbm5lY3Rp b24gcmVzZXQgZXZlbnQgaXMgZmlyZWQgaW4gcmVzcG9uc2UgdG8gYSA8ZnVuY3Rpb24+UFFy ZXNldDwvZnVuY3Rpb24+IG9yIDxmdW5jdGlvbj5QUXJlc2V0UG9sbDwvZnVuY3Rpb24+Lgor ICAgICAgICAgIEluIGJvdGggY2FzZXMsIHRoZSBldmVudCBpcyBvbmx5IGZpcmVkIGlmIHRo ZSByZXNldCB3YXMgc3VjY2Vzc2Z1bC4gIElmIHRoZSBldmVudCBwcm9jZWR1cmUgZmFpbHMs CisgICAgICAgICAgdGhlIGVudGlyZSBjb25uZWN0aW9uIHJlc2V0IHdpbGwgZmFpbDsgdGhl IDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4gaXMgcHV0IGludG8KKyAgICAgICAg ICA8bGl0ZXJhbD5DT05ORUNUSU9OX0JBRDwvbGl0ZXJhbD4gc3RhdHVzIGFuZCA8ZnVuY3Rp b24+UFFyZXNldFBvbGw8L2Z1bmN0aW9uPiB3aWxsIHJldHVybgorICAgICAgICAgIDxsaXRl cmFsPlBHUkVTX1BPTExJTkdfRkFJTEVEPC9saXRlcmFsPi4KKyAgICAgICAgIDxzeW5vcHNp cz4KKyB0eXBlZGVmIHN0cnVjdAorIHsKKyAgICAgY29uc3QgUEdjb25uICpjb25uOworIH0g UEdFdmVudFJlc2V0Ozwvc3lub3BzaXM+CisgCisgICAgICAgICAgV2hlbiBhIDxsaXRlcmFs PlBHRVZUX0NPTk5SRVNFVDwvbGl0ZXJhbD4gZXZlbnQgaXMgcmVjZWl2ZWQsIHRoZSA8cGFy YW1ldGVyPmV2dEluZm88L3BhcmFtZXRlcj4KKyAgICAgICAgICBwb2ludGVyIHNob3VsZCBi ZSBjYXN0ZWQgdG8gYSA8c3RydWN0bmFtZT5QR0V2ZW50UmVzZXQqPC9zdHJ1Y3RuYW1lPi4g IEFsdGhvdWdoIHRoZSBjb250YWluZWQKKyAgICAgICAgICA8c3RydWN0bmFtZT5QR2Nvbm48 L3N0cnVjdG5hbWU+IHdhcyBqdXN0IHJlc2V0LCBhbGwgZXZlbnQgZGF0YSByZW1haW5zIHVu Y2hhbmdlZC4gIFRoaXMgZXZlbnQKKyAgICAgICAgICBzaG91bGQgYmUgdXNlZCB0byByZXNl dC9yZWxvYWQvcmVxdWVyeSBhbnkgYXNzb2NhaXRlZCA8bGl0ZXJhbD5pbnN0YW5jZURhdGE8 L2xpdGVyYWw+LgorICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAg ICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAg IDx0ZXJtPjxsaXRlcmFsPlBHRVZUX0NPTk5ERVNUUk9ZPC9saXRlcmFsPjwvdGVybT4KKyAg ICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGNvbm5l Y3Rpb24gZGVzdHJveSBldmVudCBpcyBmaXJlZCBpbiByZXNwb25zZSB0byBhIDxmdW5jdGlv bj5QUWZpbmlzaDwvZnVuY3Rpb24+LgorICAgICAgICAgIEl0IGlzIHRoZSBldmVudCBwcm9j ZWR1cmUncyByZXNwb25zaWJpbGl0eSB0byBwcm9wZXJseSBjbGVhbnVwIGl0cyBldmVudCBk YXRhIGFzIGxpYnBxCisgICAgICAgICAgaGFzIG5vIGFiaWxpdHkgdG8gbWFuYWdlIHRoaXMg bWVtb3J5LiAgRmFpbHVyZSB0byBwcm9wZXJseSBjbGVhbnVwIHdpbGwgbGVhZCB0byBtZW1v cnkKKyAgICAgICAgICBsZWFrcy4KKyAgICAgICAgIDxzeW5vcHNpcz4KKyB0eXBlZGVmIHN0 cnVjdAorIHsKKyAgICAgY29uc3QgUEdjb25uICpjb25uOworIH0gUEdFdmVudENvbm5EZXN0 cm95Ozwvc3lub3BzaXM+CisgCisgICAgICAgICAgV2hlbiBhIDxsaXRlcmFsPlBHRVZUX0NP Tk5ERVNUUk9ZPC9saXRlcmFsPiBldmVudCBpcyByZWNlaXZlZCwgdGhlIDxwYXJhbWV0ZXI+ ZXZ0SW5mbzwvcGFyYW1ldGVyPgorICAgICAgICAgIHBvaW50ZXIgc2hvdWxkIGJlIGNhc3Rl ZCB0byBhIDxzdHJ1Y3RuYW1lPlBHRXZlbnRDb25uRGVzdHJveSo8L3N0cnVjdG5hbWU+LiAg VGhpcyBldmVudCBpcyBmaXJlZAorICAgICAgICAgIHByaW9yIHRvIDxmdW5jdGlvbj5QUWZp bmlzaDwvZnVuY3Rpb24+IHBlcmZvcm1pbmcgYW55IGNsZWFudXAuICBUaGUgcmV0dXJuIHZh bHVlIG9mIHRoZSBldmVudAorICAgICAgICAgIHByb2NlZHVyZSBpcyBpZ25vcmVkIHNpbmNl IHRoZXJlIGlzIG5vIHdheSBvZiBpbmRpY2F0aW5nIGEgZmFpbHVyZSBmcm9tIDxmdW5jdGlv bj5QUWZpbmlzaDwvZnVuY3Rpb24+LgorICAgICAgICAgIEFsc28sIGFuIGV2ZW50IHByb2Nl ZHVyZSBmYWlsdXJlIHNob3VsZCBub3QgYWJvcnQgdGhlIHByb2Nlc3Mgb2YgY2xlYW5pbmcg dXAgdW53YW50ZWQgbWVtb3J5LgorICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3Rp dGVtPgorICAgICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICAgIDx0ZXJtPjxsaXRlcmFsPlBHRVZUX1JFU1VMVENSRUFURTwvbGl0ZXJhbD48 L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAg IFRoZSByZXN1bHQgY3JlYXRlIGV2ZW50IGlzIGZpcmVkIGluIHJlc3BvbnNlIHRvIGFueSBl eGVjIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIGEgcmVzdWx0LAorICAgICAgICAgIGluY2x1 ZGluZyA8ZnVuY3Rpb24+UFFnZXRSZXN1bHQ8L2Z1bmN0aW9uPi4gIFRoaXMgZXZlbnQgd2ls bCBvbmx5IGJlIGZpcmVkIGFmdGVyIHRoZSByZXN1bHQKKyAgICAgICAgICBoYXMgYmVlbiBj cmVhdGVkIHN1Y2Nlc3NmdWxseSwgd2l0aCBhIHJlc3VsdCBzdGF0dXMgb2YgZWl0aGVyIDxs aXRlcmFsPlBHUkVTX0NPTU1BTkRfT0s8L2xpdGVyYWw+LAorICAgICAgICAgIDxsaXRlcmFs PlBHUkVTX1RVUExFU19PSzwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+UEdSRVNfRU1QVFlfUVVF Ulk8L2xpdGVyYWw+LgorICAgICAgICAgPHN5bm9wc2lzPgorIHR5cGVkZWYgc3RydWN0Cisg eworICAgICBjb25zdCBQR2Nvbm4gKmNvbm47CisgICAgIGNvbnN0IFBHcmVzdWx0ICpyZXN1 bHQ7CisgfSBQR0V2ZW50UmVzdWx0Q3JlYXRlOzwvc3lub3BzaXM+CisgCisgICAgICAgICAg V2hlbiBhIDxsaXRlcmFsPlBHRVZUX1JFU1VMVENSRUFURTwvbGl0ZXJhbD4gZXZlbnQgaXMg cmVjZWl2ZWQsIHRoZSA8cGFyYW1ldGVyPmV2dEluZm88L3BhcmFtZXRlcj4KKyAgICAgICAg ICBwb2ludGVyIHNob3VsZCBiZSBjYXN0ZWQgdG8gYSA8c3RydWN0bmFtZT5QR0V2ZW50UmVz dWx0Q3JlYXRlKjwvc3RydWN0bmFtZT4uICBUaGUgPHBhcmFtZXRlcj5jb25uPC9wYXJhbWV0 ZXI+CisgICAgICAgICAgd2FzIHRoZSBjb25uZWN0aW9uIHVzZWQgdG8gZ2VuZXJhdGUgdGhl IHJlc3VsdC4gIFRoaXMgaXMgdGhlIGlkZWFsIHBsYWNlIHRvIGluaXRpYWxpemUKKyAgICAg ICAgICBhbnkgPGxpdGVyYWw+aW5zdGFuY2VEYXRhPC9saXRlcmFsPiB0aGF0IG5lZWRzIHRv IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzdWx0LiAgSWYgdGhlIGV2ZW50IHByb2NlZHVy ZSBmYWlscywKKyAgICAgICAgICB0aGUgcmVzdWx0IHdpbGwgYmUgY2xlYXJlZCBhbmQgdGhl IGZhaWx1cmUgd2lsbCBiZSBwcm9wYWdhdGVkLiAgRG8gbm90IGF0dGVtcHQgdG8KKyAgICAg ICAgICBjbGVhciB0aGUgcmVzdWx0IG9iamVjdCBjb250YWluZWQgaW4gdGhlIDxzdHJ1Y3Ru YW1lPlBHRXZlbnRSZXN1bHRDcmVhdGU8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZS4KKyAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICA8L3Zhcmxpc3RlbnRy eT4KKyAKKyAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICA8dGVybT48bGl0ZXJhbD5Q R0VWVF9SRVNVTFRDT1BZPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIHJlc3VsdCBjb3B5IGV2ZW50IGlzIGZp cmVkIGluIHJlc3BvbnNlIHRvIDxmdW5jdGlvbj5QUWNvcHlSZXN1bHQ8L2Z1bmN0aW9uPi4K KyAgICAgICAgICBUaGlzIGV2ZW50IHdpbGwgb25seSBiZSBmaXJlZCBhZnRlciB0aGUgY29w eSBpcyBjb21wbGV0ZS4KKyAgICAgICAgIDxzeW5vcHNpcz4KKyB0eXBlZGVmIHN0cnVjdAor IHsKKyAgICAgY29uc3QgUEdyZXN1bHQgKnNyYzsKKyAgICAgUEdyZXN1bHQgKmRlc3Q7Cisg fSBQR0V2ZW50UmVzdWx0Q29weTs8L3N5bm9wc2lzPgorIAorICAgICAgICAgIFdoZW4gYSA8 bGl0ZXJhbD5QR0VWVF9SRVNVTFRDT1BZPC9saXRlcmFsPiBldmVudCBpcyByZWNlaXZlZCwg dGhlIDxwYXJhbWV0ZXI+ZXZ0SW5mbzwvcGFyYW1ldGVyPgorICAgICAgICAgIHBvaW50ZXIg c2hvdWxkIGJlIGNhc3RlZCB0byBhIDxzdHJ1Y3RuYW1lPlBHRXZlbnRSZXN1bHRDb3B5Kjwv c3RydWN0bmFtZT4uICBUaGUgPHBhcmFtZXRlcj5zcmM8L3BhcmFtZXRlcj4KKyAgICAgICAg ICByZXN1bHQgaXMgd2hhdCBpcyBiZWluZyBjb3BpZWQgd2hpbGUgdGhlIDxwYXJhbWV0ZXI+ ZGVzdDwvcGFyYW1ldGVyPiByZXN1bHQgaXMgdGhlIGNvcHkgZGVzdGluYXRpb24uCisgICAg ICAgICAgVGhpcyBldmVudCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgZGVlcCBjb3B5IG9m IDxsaXRlcmFsPmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4sIHNpbmNlCisgICAgICAgICAgPGxp dGVyYWw+UFFjb3B5UmVzdWx0PC9saXRlcmFsPiBjYW5ub3QgZG8gdGhhdC4gIElmIHRoZSBl dmVudCBwcm9jZWR1cmUgZmFpbHMsIHRoZSBlbnRpcmUgY29weSBvcGVyYXRpb24KKyAgICAg ICAgICB3aWxsIGZhaWwgYW5kIHRoZSA8cGFyYW1ldGVyPmRlc3Q8L3BhcmFtZXRlcj4gcmVz dWx0IHdpbGwgYmUgY2xlYXJlZC4KKyAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgICA8dGVybT48bGl0ZXJhbD5QR0VWVF9SRVNVTFRERVNUUk9ZPC9saXRlcmFs PjwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAg ICAgVGhlIHJlc3VsdCBkZXN0cm95IGV2ZW50IGlzIGZpcmVkIGluIHJlc3BvbnNlIHRvIGEg PGZ1bmN0aW9uPlBRY2xlYXI8L2Z1bmN0aW9uPi4KKyAgICAgICAgICBJdCBpcyB0aGUgZXZl bnQgcHJvY2VkdXJlJ3MgcmVzcG9uc2liaWxpdHkgdG8gcHJvcGVybHkgY2xlYW51cCBpdHMg ZXZlbnQgZGF0YSBhcyBsaWJwcQorICAgICAgICAgIGhhcyBubyBhYmlsaXR5IHRvIG1hbmFn ZSB0aGlzIG1lbW9yeS4gIEZhaWx1cmUgdG8gcHJvcGVybHkgY2xlYW51cCB3aWxsIGxlYWQg dG8gbWVtb3J5CisgICAgICAgICAgbGVha3MuCisgICAgICAgICA8c3lub3BzaXM+CisgdHlw ZWRlZiBzdHJ1Y3QKKyB7CisgICAgIGNvbnN0IFBHcmVzdWx0ICpyZXN1bHQ7CisgfSBQR0V2 ZW50UmVzdWx0RGVzdHJveTs8L3N5bm9wc2lzPgorIAorICAgICAgICAgIFdoZW4gYSA8bGl0 ZXJhbD5QR0VWVF9SRVNVTFRERVNUUk9ZPC9saXRlcmFsPiBldmVudCBpcyByZWNlaXZlZCwg dGhlIDxwYXJhbWV0ZXI+ZXZ0SW5mbzwvcGFyYW1ldGVyPgorICAgICAgICAgIHBvaW50ZXIg c2hvdWxkIGJlIGNhc3RlZCB0byBhIDxzdHJ1Y3RuYW1lPlBHRXZlbnRSZXN1bHREZXN0cm95 Kjwvc3RydWN0bmFtZT4uICBUaGlzIGV2ZW50IGlzIGZpcmVkCisgICAgICAgICAgcHJpb3Ig dG8gPGZ1bmN0aW9uPlBRY2xlYXI8L2Z1bmN0aW9uPiBwZXJmb3JtaW5nIGFueSBjbGVhbnVw LiAgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZXZlbnQKKyAgICAgICAgICBwcm9jZWR1cmUg aXMgaWdub3JlZCBzaW5jZSB0aGVyZSBpcyBubyB3YXkgb2YgaW5kaWNhdGluZyBhIGZhaWx1 cmUgZnJvbSA8ZnVuY3Rpb24+UFFjbGVhcjwvZnVuY3Rpb24+LgorICAgICAgICAgIEFsc28s IGFuIGV2ZW50IHByb2NlZHVyZSBmYWlsdXJlIHNob3VsZCBub3QgYWJvcnQgdGhlIHByb2Nl c3Mgb2YgY2xlYW5pbmcgdXAgdW53YW50ZWQgbWVtb3J5LgorICAgICAgICAgPC9wYXJhPgor ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPC92 YXJpYWJsZWxpc3Q+CisgICAgPC9wYXJhPgorICAgPC9zZWN0Mj4KKyAKKyAgIDxzZWN0MiBp ZD0ibGlicHEtZXZlbnRzLXByb2MiPgorICAgIDx0aXRsZT5FdmVudCBDYWxsYmFjayBQcm9j ZWR1cmU8L3RpdGxlPgorICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICA8dGVybT4KKyAgICAgICA8ZnVuY3Rpb24+UEdFdmVudFByb2M8L2Z1bmN0aW9u PgorICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgIDxwcmltYXJ5PlBHRXZlbnRQcm9jPC9w cmltYXJ5PgorICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorIAorICAgICAg PGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBVc2VyIGNhbGxiYWNrIGZ1bmN0 aW9uIHRoYXQgcmVjZWl2ZXMgZXZlbnRzIGZyb20gbGlicHEuIFRoZSBhZGRyZXNzIG9mIHRo ZSBldmVudAorICAgICAgICBwcm9jIGlzIGFsc28gdXNlZCB0byBsb29rdXAgdGhlIDxsaXRl cmFsPmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4KKyAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGEg PHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBvciA8c3RydWN0bmFtZT5QR3Jlc3Vs dDwvc3RydWN0bmFtZT4uCisgICAgICAgIDxzeW5vcHNpcz50eXBlZGVmIGludCAoKlBHRXZl bnRQcm9jKShQR0V2ZW50SWQgZXZ0SWQsIHZvaWQgKmV2dEluZm8sIHZvaWQgKnBhc3NUaHJv dWdoKTs8L3N5bm9wc2lzPgorICAgICAgIDwvcGFyYT4KKyAKKyAgICAgICA8cGFyYT4KKyAg ICAgICAgVGhlIDxwYXJhbWV0ZXI+ZXZ0SWQ8L3BhcmFtZXRlcj4gaW5pZGNhdGVzIHdoaWNo IDxsaXRlcmFsPlBHRVZUXzwvbGl0ZXJhbD4gZXZlbnQgb2NjdXJyZWQuCisgICAgICAgIFRo ZSA8cGFyYW1ldGVyPmV2dEluZm88L3BhcmFtZXRlcj4gbXVzdCBiZSBjYXN0ZWQgdG8gdGhl IGFwcHJvcHJpYXRlIHN0cnVjdHVyZTogZXguIFBHRVZUX1JFR0lTVEVSCisgICAgICAgIG1l YW5zIGNhc3QgZXZ0SW5mbyB0byBhIFBHRXZlbnRSZWdpc3RlciBwb2ludGVyLiAgVGhlIDxw YXJhbWV0ZXI+cGFzc1Rocm91Z2g8L3BhcmFtZXRlcj4gaXMgdGhlCisgICAgICAgIHBvaW50 ZXIgcHJvdmlkZWQgdG8gdGhlIDxmdW5jdGlvbj5QUXJlZ2lzdGVyRXZlbnRQcm9jPC9mdW5j dGlvbj4sIHdoaWNoIGNhbiBiZSBOVUxMLiAgVGhlIGZ1bmN0aW9uCisgICAgICAgIHNob3Vs ZCByZXR1cm4gYSBub24temVybyB2YWx1ZSBpZiBpdCBzdWNjZWVkcyBhbmQgemVybyBpZiBp dCBmYWlscy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zh cmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgIDwvc2VjdDI+CisgCisgICA8 c2VjdDIgaWQ9ImxpYnBxLWV2ZW50cy1mdW5jcyI+CisgICAgPHRpdGxlPkV2ZW50IEZ1bmN0 aW9uczwvdGl0bGU+CisgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICA8dGVybT4KKyAgICAgICA8ZnVuY3Rpb24+UFFyZWdpc3RlckV2ZW50UHJvYzwv ZnVuY3Rpb24+CisgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgPHByaW1hcnk+UFFyZWdp c3RlckV2ZW50UHJvYzwvcHJpbWFyeT4KKyAgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwv dGVybT4KKyAKKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVn aXN0ZXJzIGFuIGV2ZW50IGNhbGxiYWNrIHByb2NlZHVyZSB3aXRoIGxpYnBxLgorICAgICAg ICA8c3lub3BzaXM+aW50IFBRcmVnaXN0ZXJFdmVudFByb2MoUEdjb25uICpjb25uLCBQR0V2 ZW50UHJvYyBwcm9jLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpwYXNzVGhyb3VnaCk7PC9z eW5vcHNpcz4KKyAgICAgICA8L3BhcmE+CisgCisgICAgICAgPHBhcmE+CisgICAgICAgIFJl Z2lzdHJhdGlvbiBtdXN0IGJlIGNhbGxlZCBvbmNlIG9uIGV2ZXJ5IFBHY29ubiB5b3Ugd2Fu dCB0byByZWNlaXZlIGV2ZW50cyBhYm91dC4KKyAgICAgICAgVGhlcmUgaXMgbm8gbGltaXQg b24gdGhlIG51bWJlciBvZiBldmVudCBwcm9jZWR1cmVzIHRoYXQgY2FuIGJlIHJlZ2lzdGVy ZWQgd2l0aCBhIGNvbm5lY3Rpb24uCisgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEg bm9uLXplcm8gdmFsdWUgaWYgaXQgc3VjY2VlZHMgYW5kIHplcm8gaWYgaXQgZmFpbHMuCisg ICAgICAgPC9wYXJhPgorIAorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHBhcmFtZXRl cj5wcm9jPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBsaWJw cSBldmVudCBpcyBmaXJlZC4gIEl0cworICAgICAgICBtZW1vcnkgYWRkcmVzcyBpcyBhbHNv IHVzZWQgdG8gbG9va3VwIDxsaXRlcmFsPmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4uCisgICAg ICAgIFRoZSA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj4gYXJndW1lbnQgaXMgdXNlZCB0 byBjb250cnVjdCBlcnJvciBtZXNzYWdlcyB0byBhaWQKKyAgICAgICAgaW4gZGVidWdnaW5n LiAgVGhpcyB2YWx1ZSBjYW4gYmUgTlVMTCBpZiBub3QgbmVlZGVkLCBpbiB3aGljaCBjYXNl IHRoZSA8cGFyYW1ldGVyPnByb2M8L3BhcmFtZXRlcj4KKyAgICAgICAgYWRkcmVzcyB3aWxs IGJlIHVzZWQgaW4gZXJyb3IgbWVzc2FnZXMuCisgICAgICAgIFRoZSA8cGFyYW1ldGVyPnBh c3NUaHJvdWdoPC9wYXJhbWV0ZXI+IHBvaW50ZXIgaXMgcGFzc2VkIHRvIHRoZSA8cGFyYW1l dGVyPnByb2M8L3BhcmFtZXRlcj4gd2hlbmV2ZXIKKyAgICAgICAgYW4gZXZlbnQgb2NjdXJz LiBUaGlzIGFyZ3VtZW50IGNhbiBiZSBOVUxMLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwv bGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgPHRlcm0+CisgICAgICAgPGZ1bmN0aW9uPlBRaW5zdGFuY2VEYXRhPC9mdW5j dGlvbj4KKyAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICA8cHJpbWFyeT5QUWluc3RhbmNl RGF0YTwvcHJpbWFyeT4KKyAgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmV0dXJucyB0aGUgY29u bidzIGluc3RhbmNlRGF0YSBhc3NvY2lhdGVkIHdpdGggcHJvYy4KKyAgICAgICAgPHN5bm9w c2lzPnZvaWQgKlBRaW5zdGFuY2VEYXRhKGNvbnN0IFBHY29ubiAqY29ubiwgUEdFdmVudFBy b2MgcHJvYyk7PC9zeW5vcHNpcz4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVt PgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAg IDx0ZXJtPgorICAgICAgIDxmdW5jdGlvbj5QUXNldEluc3RhbmNlRGF0YTwvZnVuY3Rpb24+ CisgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgPHByaW1hcnk+UFFzZXRJbnN0YW5jZURh dGE8L3ByaW1hcnk+CisgICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFNldHMgdGhlIGNvbm4ncyBp bnN0YW5jZURhdGEgZm9yIHByb2MgdG8gZGF0YS4gIFRoaXMgcmV1dHJucyBub24temVybyBm b3IKKyAgICAgICAgc3VjY2VlcyBhbmQgemVybyBmb3IgZmFpbHVyZS4KKyAgICAgICAgPHN5 bm9wc2lzPmludCBQUXNldEluc3RhbmNlRGF0YShQR2Nvbm4gKmNvbm4sIFBHRXZlbnRQcm9j IHByb2MsIHZvaWQgKmRhdGEpOzwvc3lub3BzaXM+CisgICAgICAgPC9wYXJhPgorICAgICAg PC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgIDx2YXJsaXN0ZW50 cnk+CisgICAgICA8dGVybT4KKyAgICAgICA8ZnVuY3Rpb24+UFFyZXN1bHRJbnN0YW5jZURh dGE8L2Z1bmN0aW9uPgorICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgIDxwcmltYXJ5PlBR cmVzdWx0SW5zdGFuY2VEYXRhPC9wcmltYXJ5PgorICAgICAgIDwvaW5kZXh0ZXJtPgorICAg ICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBS ZXR1cm5zIHRoZSByZXN1bHQncyBpbnN0YW5jZURhdGEgYXNzb2NpYXRlZCBieSBwcm9jLgor ICAgICAgICA8c3lub3BzaXM+dm9pZCAqUFFyZXN1bHRJbnN0YW5jZURhdGEoY29uc3QgUEdy ZXN1bHQgKnJlcywgUEdFdmVudFByb2MgcHJvYyk7PC9zeW5vcHNpcz4KKyAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICAg PHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPgorICAgICAgIDxmdW5jdGlvbj5QUXJlc3Vs dFNldEluc3RhbmNlRGF0YTwvZnVuY3Rpb24+CisgICAgICAgPGluZGV4dGVybT4KKyAgICAg ICAgPHByaW1hcnk+UFFyZXN1bHRTZXRJbnN0YW5jZURhdGE8L3ByaW1hcnk+CisgICAgICAg PC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAg PHBhcmE+CisgICAgICAgIFNldHMgdGhlIHJlc3VsdCdzIGluc3RhbmNlRGF0YSBmb3IgcHJv YyB0byBkYXRhLiAgVGhpcyByZXV0cm5zIG5vbi16ZXJvIGZvcgorICAgICAgICBzdWNjZWVz IGFuZCB6ZXJvIGZvciBmYWlsdXJlLgorICAgICAgICA8c3lub3BzaXM+aW50IFBRcmVzdWx0 U2V0SW5zdGFuY2VEYXRhKFBHcmVzdWx0ICpyZXMsIFBHRXZlbnRQcm9jIHByb2MsIHZvaWQg KmRhdGEpOzwvc3lub3BzaXM+CisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4K KyAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgICA8L3NlY3Qy PgorIAorICAgPHNlY3QyIGlkPSJsaWJwcS1ldmVudHMtZXhhbXBsZSI+CisgICAgPHRpdGxl PkV2ZW50IEV4YW1wbGU8L3RpdGxlPgorICAgIDxwcm9ncmFtbGlzdGluZz4KKyAvKiByZXF1 aXJlZCBoZWFkZXIgZm9yIGxpYnBxIGV2ZW50cyAobm90ZTogaW5jbHVkZXMgbGlicHEtZmUu aCkqLworICNpbmNsdWRlICZsdDtsaWJwcS1ldmVudHMuaCZndDsKKyAKKyAvKiBUaGUgaW5z dGFuY2VEYXRhICovCisgdHlwZWRlZiBzdHJ1Y3QKKyB7CisgICAgIGludCBuOworICAgICBj aGFyICpzdHI7CisgfSBteWRhdGE7CisgCisgLyogUEdFdmVudFByb2MgKi8KKyBpbnQgbXlF dmVudFByb2MoUEdFdmVudElkIGV2dElkLCB2b2lkICpldnRJbmZvLCB2b2lkICpwYXNzVGhy b3VnaCk7CisgCisgaW50IG1haW4odm9pZCkKKyB7CisgICAgIG15ZGF0YSAqZGF0YTsKKyAg ICAgUEdyZXN1bHQgKnJlczsKKyAgICAgUEdjb25uICpjb25uID0gUFFjb25uZWN0ZGIoImRi bmFtZSA9IHBvc3RncmVzIik7CisgCisgICAgIGlmIChQUXN0YXR1cyhjb25uKSAhPSBDT05O RUNUSU9OX09LKQorICAgICB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbm5lY3Rp b24gdG8gZGF0YWJhc2UgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgUFFlcnJvck1lc3Nh Z2UoY29ubikpOworICAgICAgICAgUFFmaW5pc2goY29ubik7CisgICAgICAgICByZXR1cm4g MTsKKyAgICAgfQorIAorICAgICAvKiBjYWxsZWQgb25jZSBvbiBhbnkgY29ubmVjdGlvbiB0 aGF0IHNob3VsZCByZWNlaXZlIGV2ZW50cy4KKyAgICAgICogU2VuZHMgYSBQR0VWVF9SRUdJ U1RFUiB0byBteUV2ZW50UHJvYy4KKyAgICAgICovCisgICAgIGlmICghUFFyZWdpc3RlckV2 ZW50UHJvYyhjb25uLCBteUV2ZW50UHJvYywgIm15ZGF0YV9wcm9jIiwgTlVMTCkpCisgICAg IHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IHJlZ2lzdGVyIFBHRXZlbnRQ cm9jXG4iKTsKKyAgICAgICAgIFBRZmluaXNoKGNvbm4pOworICAgICAgICAgcmV0dXJuIDE7 CisgICAgIH0KKyAKKyAgICAgLyogY29ubiBpbnN0YW5jZURhdGEgaXMgYXZhaWxhYmxlICov CisgICAgIGRhdGEgPSBQUWluc3RhbmNlRGF0YShjb25uLCBteUV2ZW50UHJvYyk7CisgCisg ICAgIC8qIFNlbmRzIGEgUEdFVlRfUkVTVUxUQ1JFQVRFIHRvIG15RXZlbnRQcm9jICovCisg ICAgIHJlcyA9IFBRZXhlYyhjb25uLCAiU0VMRUNUIDEgKyAxIik7CisgCisgICAgIC8qIHJl c3VsdCBpbnN0YW5jZURhdGEgaXMgYXZhaWxhYmxlICovCisgICAgIGRhdGEgPSBQUXJlc3Vs dEluc3RhbmNlRGF0YShyZXMsIG15RXZlbnRQcm9jKTsKKyAKKyAgICAgLyogSWYgUEdfQ09Q WVJFU19FVkVOVFMgaXMgdXNlZCwgc2VuZHMgYSBQR0VWVF9SRVNVTFRDT1BZIHRvIG15RXZl bnRQcm9jICovCisgICAgIHJlc19jb3B5ID0gUFFjb3B5UmVzdWx0KHJlcywgUEdfQ09QWVJF U19UVVBMRVMgfCBQR19DT1BZUkVTX0VWRU5UUyk7CisgCisgICAgIC8qIHJlc3VsdCBpbnN0 YW5jZURhdGEgaXMgYXZhaWxhYmxlIGlmIFBHX0NPUFlSRVNfRVZFTlRTIHdhcworICAgICAg KiB1c2VkIGR1cmluZyB0aGUgUFFjb3B5UmVzdWx0IGNhbGwuCisgICAgICAqLworICAgICBk YXRhID0gUFFyZXN1bHRJbnN0YW5jZURhdGEocmVzX2NvcHksIG15RXZlbnRQcm9jKTsKKyAK KyAgICAgLyogQm90aCBjbGVhcnMgc2VuZCBhIFBHRVZUX1JFU1VMVERFU1RPUlkgdG8gbXlF dmVudFByb2MgKi8KKyAgICAgUFFjbGVhcihyZXMpOworICAgICBQUWNsZWFyKHJlc19jb3B5 KTsKKyAKKyAgICAgLyogU2VuZHMgYSBQR0VWVF9DT05OREVTVFJPWSB0byBteUV2ZW50UHJv YyAqLworICAgICBQUWZpbmlzaChjb25uKTsKKyAKKyAgICAgcmV0dXJuIDA7CisgfQorIAor IGludCBteUV2ZW50UHJvYyhQR0V2ZW50SWQgZXZ0SWQsIHZvaWQgKmV2dEluZm8sIHZvaWQg KnBhc3NUaHJvdWdoKQorIHsKKyAgICAgc3dpdGNoIChldnRJZCkKKyAgICAgeworICAgICAg ICAgY2FzZSBQR0VWVF9SRUdJU1RFUjoKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBQR0V2 ZW50UmVnaXN0ZXIgKmUgPSAoUEdFdmVudFJlZ2lzdGVyICopZXZ0SW5mbzsKKyAgICAgICAg ICAgICBteWRhdGEgKmRhdGEgPSBnZXRfbXlkYXRhKGUtPmNvbm4pOworIAorICAgICAgICAg ICAgIC8qIGFzc29jaWF0ZSBhcHAgc3BlY2lmaWMgZGF0YSB3aXRoIGNvbm5lY3Rpb24gKi8K KyAgICAgICAgICAgICBQUXNldEluc3RhbmNlRGF0YShlLT5jb25uLCBteUV2ZW50UHJvYywg ZGF0YSk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgCisgICAgICAgICBj YXNlIFBHRVZUX0NPTk5SRVNFVDoKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBQR0V2ZW50 Q29ublJlc2V0ICplID0gKFBHRXZlbnRDb25uUmVzZXQgKilldnRJbmZvOworICAgICAgICAg ICAgIG15ZGF0YSAqZGF0YSA9IFBRaW5zdGFuY2VEYXRhKGUtPmNvbm4sIG15RXZlbnRQcm9j KTsKKyAgICAgICAgICAgICBpZiAoZGF0YSkKKyAgICAgICAgICAgICAgIG1lbXNldChkYXRh LCAwLCBzaXplb2YobXlkYXRhKSk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9 CisgCisgICAgICAgICBjYXNlIFBHRVZUX0NPTk5ERVNUUk9ZOgorICAgICAgICAgeworICAg ICAgICAgICAgIFBHRXZlbnRDb25uRGVzdHJveSAqZSA9IChQR0V2ZW50Q29ubkRlc3Ryb3kg KilldnRJbmZvOworICAgICAgICAgICAgIG15ZGF0YSAqZGF0YSA9IFBRaW5zdGFuY2VEYXRh KGUtPmNvbm4sIG15RXZlbnRQcm9jKTsKKyAKKyAgICAgICAgICAgICAvKiBmcmVlIGluc3Rh bmNlIGRhdGEgYmVjYXVzZSB0aGUgY29ubiBpcyBiZWluZyBkZXN0cm95ZWQgKi8KKyAgICAg ICAgICAgICBpZiAoZGF0YSkKKyAgICAgICAgICAgICAgIGZyZWVfbXlkYXRhKGRhdGEpOwor ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorIAorICAgICAgICAgY2FzZSBQR0VW VF9SRVNVTFRDUkVBVEU6CisgICAgICAgICB7CisgICAgICAgICAgICAgUEdFdmVudFJlc3Vs dENyZWF0ZSAqZSA9IChQR0V2ZW50UmVzdWx0Q3JlYXRlICopZXZ0SW5mbzsKKyAgICAgICAg ICAgICBteWRhdGEgKmNvbm5fZGF0YSA9IFBRaW5zdGFuY2VEYXRhKGUtPmNvbm4sIG15RXZl bnRQcm9jKTsKKyAgICAgICAgICAgICBteWRhdGEgKnJlc19kYXRhID0gZHVwX215ZGF0YShj b25uX2RhdGEpOworIAorICAgICAgICAgICAgIC8qIGFzc29jaWF0ZSBhcHAgc3BlY2lmaWMg ZGF0YSB3aXRoIHJlc3VsdCAoY29weSBpdCBmcm9tIGNvbm4pICovCisgICAgICAgICAgICAg UFFzZXRSZXN1bHRJbnN0YW5jZURhdGEoZS0+cmVzdWx0LCBteUV2ZW50UHJvYywgcmVzX2Rh dGEpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorIAorICAgICAgICAgY2Fz ZSBQR0VWVF9SRVNVTFRDT1BZOgorICAgICAgICAgeworICAgICAgICAgICAgIFBHRXZlbnRS ZXN1bHRDb3B5ICplID0gKFBHRXZlbnRSZXN1bHRDb3B5ICopZXZ0SW5mbzsKKyAgICAgICAg ICAgICBteWRhdGEgKnNyY19kYXRhID0gUFFyZXN1bHRJbnN0YW5jZURhdGEoZS0+c3JjLCBt eUV2ZW50UHJvYyk7CisgICAgICAgICAgICAgbXlkYXRhICpkZXN0X2RhdGEgPSBkdXBfbXlk YXRhKHNyY19kYXRhKTsKKyAKKyAgICAgICAgICAgICAvKiBhc3NvY2lhdGUgYXBwIHNwZWNp ZmljIGRhdGEgd2l0aCByZXN1bHQgKGNvcHkgaXQgZnJvbSBhIHJlc3VsdCkgKi8KKyAgICAg ICAgICAgICBQUXNldFJlc3VsdEluc3RhbmNlRGF0YShlLT5kZXN0LCBteUV2ZW50UHJvYywg ZGVzdF9kYXRhKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAKKyAgICAg ICAgIGNhc2UgUEdFVlRfUkVTVUxUREVTVFJPWToKKyAgICAgICAgIHsKKyAgICAgICAgICAg ICBQR0V2ZW50UmVzdWx0RGVzdHJveSAqZSA9IChQR0V2ZW50UmVzdWx0RGVzdHJveSAqKWV2 dEluZm87CisgICAgICAgICAgICAgbXlkYXRhICpkYXRhID0gUFFyZXN1bHRJbnN0YW5jZURh dGEoZS0+cmVzdWx0LCBteUV2ZW50UHJvYyk7CisgCisgICAgICAgICAgICAgLyogZnJlZSBp bnN0YW5jZSBkYXRhIGJlY2F1c2UgdGhlIHJlc3VsdCBpcyBiZWluZyBkZXN0cm95ZWQgKi8K KyAgICAgICAgICAgICBpZiggZGF0YSkKKyAgICAgICAgICAgICAgIGZyZWVfbXlkYXRhKGRh dGEpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorIAorICAgICAgICAgLyog dW5rbm93biBldmVudCBpZCwganVzdCByZXR1cm4gVFJVRS4gKi8KKyAgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAKKyAgICAgcmV0dXJuIFRSVUU7 IC8qIGV2ZW50IHByb2Nlc3Npbmcgc3VjY2VlZGVkICovCisgfSAgPC9wcm9ncmFtbGlzdGlu Zz4KKyAgIDwvc2VjdDI+CisgIDwvc2VjdDE+CisgCiAgIDxzZWN0MSBpZD0ibGlicHEtbWlz YyI+CiAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBGdW5jdGlvbnM8L3RpdGxlPgogIAogICAg PHBhcmE+CiAgICAgQXMgYWx3YXlzLCB0aGVyZSBhcmUgc29tZSBmdW5jdGlvbnMgdGhhdCBq dXN0IGRvbid0IGZpdCBhbnl3aGVyZS4KICAgIDwvcGFyYT4KSW5kZXg6IHNyYy9pbnRlcmZh Y2VzL2xpYnBxL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9wcm9qZWN0cy9j dnNyb290L3Bnc3FsL3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjE2NgpkaWZmIC1DNiAtcjEuMTY2IE1ha2VmaWxlCioqKiBzcmMvaW50 ZXJmYWNlcy9saWJwcS9NYWtlZmlsZQkxNiBBcHIgMjAwOCAxNDoxOTo1NiAtMDAwMAkxLjE2 NgotLS0gc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUJNSBTZXAgMjAwOCAxOTowMDo1 NiAtMDAwMAoqKioqKioqKioqKioqKioKKioqIDI5LDQxICoqKioKICAjIHRoZSBvYmplY3Qg ZmlsZXMgZnJvbSBsaWJwZ3BvcnQsIHRoaXMgd291bGQgbm90IGJlIHRydWUgb24gYWxsCiAg IyBwbGF0Zm9ybXMuCiAgTElCUyA6PSAkKExJQlM6LWxwZ3BvcnQ9KQogIAogIE9CSlM9CWZl LWF1dGgubyBmZS1jb25uZWN0Lm8gZmUtZXhlYy5vIGZlLW1pc2MubyBmZS1wcmludC5vIGZl LWxvYmoubyBcCiAgCWZlLXByb3RvY29sMi5vIGZlLXByb3RvY29sMy5vIHBxZXhwYnVmZmVy Lm8gcHFzaWduYWwubyBmZS1zZWN1cmUubyBcCiEgCW1kNS5vIGlwLm8gd2NoYXIubyBlbmNu YW1lcy5vIG5vYmxvY2subyBwZ3N0cmNhc2VjbXAubyB0aHJlYWQubyBcCiAgCSQoZmlsdGVy IGNyeXB0Lm8gZ2V0YWRkcmluZm8ubyBpbmV0X2F0b24ubyBvcGVuLm8gc25wcmludGYubyBz dHJlcnJvci5vIHN0cmxjcHkubyB3aW4zMmVycm9yLm8sICQoTElCT0JKUykpCiAgCiAgaWZl cSAoJChQT1JUTkFNRSksIGN5Z3dpbikKICBvdmVycmlkZSBzaGxpYiA9IGN5ZyQoTkFNRSkk KERMU1VGRklYKQogIGVuZGlmCiAgCi0tLSAyOSw0MSAtLS0tCiAgIyB0aGUgb2JqZWN0IGZp bGVzIGZyb20gbGlicGdwb3J0LCB0aGlzIHdvdWxkIG5vdCBiZSB0cnVlIG9uIGFsbAogICMg cGxhdGZvcm1zLgogIExJQlMgOj0gJChMSUJTOi1scGdwb3J0PSkKICAKICBPQkpTPQlmZS1h dXRoLm8gZmUtY29ubmVjdC5vIGZlLWV4ZWMubyBmZS1taXNjLm8gZmUtcHJpbnQubyBmZS1s b2JqLm8gXAogIAlmZS1wcm90b2NvbDIubyBmZS1wcm90b2NvbDMubyBwcWV4cGJ1ZmZlci5v IHBxc2lnbmFsLm8gZmUtc2VjdXJlLm8gXAohIAltZDUubyBpcC5vIHdjaGFyLm8gZW5jbmFt ZXMubyBub2Jsb2NrLm8gcGdzdHJjYXNlY21wLm8gdGhyZWFkLm8gbGlicHEtZXZlbnRzLm8g XAogIAkkKGZpbHRlciBjcnlwdC5vIGdldGFkZHJpbmZvLm8gaW5ldF9hdG9uLm8gb3Blbi5v IHNucHJpbnRmLm8gc3RyZXJyb3IubyBzdHJsY3B5Lm8gd2luMzJlcnJvci5vLCAkKExJQk9C SlMpKQogIAogIGlmZXEgKCQoUE9SVE5BTUUpLCBjeWd3aW4pCiAgb3ZlcnJpZGUgc2hsaWIg PSBjeWckKE5BTUUpJChETFNVRkZJWCkKICBlbmRpZgogIAoqKioqKioqKioqKioqKioKKioq IDEwMywxMjMgKioqKgogIAogICQodG9wX2J1aWxkZGlyKS9zcmMvcG9ydC9wZ19jb25maWdf cGF0aHMuaDoKICAJJChNQUtFKSAtQyAkKHRvcF9idWlsZGRpcikvc3JjL3BvcnQgcGdfY29u ZmlnX3BhdGhzLmgKICAKICBpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMgaW5zdGFsbC1saWIK ICAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9saWJwcS1mZS5oICckKERFU1RESVIpJChp bmNsdWRlZGlyKScKICAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9saWJwcS1pbnQuaCAn JChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCknCiAgCSQoSU5TVEFMTF9EQVRBKSAk KHNyY2RpcikvcHFleHBidWZmZXIuaCAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5h bCknCiAgCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvcGdfc2VydmljZS5jb25mLnNhbXBs ZSAnJChERVNURElSKSQoZGF0YWRpcikvcGdfc2VydmljZS5jb25mLnNhbXBsZScKICAKICBp bnN0YWxsZGlyczogaW5zdGFsbGRpcnMtbGliCiAgCSQobWtpbnN0YWxsZGlycykgJyQoREVT VERJUikkKGluY2x1ZGVkaXIpJyAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCkn CiAgCiAgdW5pbnN0YWxsOiB1bmluc3RhbGwtbGliCiEgCXJtIC1mICckKERFU1RESVIpJChp bmNsdWRlZGlyKS9saWJwcS1mZS5oJyAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5h bCkvbGlicHEtaW50LmgnICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKS9wcWV4 cGJ1ZmZlci5oJyAnJChERVNURElSKSQoZGF0YWRpcikvcGdfc2VydmljZS5jb25mLnNhbXBs ZScKICAKICBjbGVhbiBkaXN0Y2xlYW46IGNsZWFuLWxpYgogIAlybSAtZiAkKE9CSlMpIHBn X2NvbmZpZ19wYXRocy5oIGNyeXB0LmMgZ2V0YWRkcmluZm8uYyBpbmV0X2F0b24uYyBub2Js b2NrLmMgb3Blbi5jIHBnc3RyY2FzZWNtcC5jIHNucHJpbnRmLmMgc3RyZXJyb3IuYyBzdHJs Y3B5LmMgdGhyZWFkLmMgbWQ1LmMgaXAuYyBlbmNuYW1lcy5jIHdjaGFyLmMgd2luMzJlcnJv ci5jIHBnc2xlZXAuYyBwdGhyZWFkLmggbGlicHEucmMKICAjIE1pZ2h0IGJlIGxlZnQgb3Zl ciBmcm9tIGEgV2luMzIgY2xpZW50LW9ubHkgYnVpbGQKICAJcm0gLWYgcGdfY29uZmlnX3Bh dGhzLmgKICAKLS0tIDEwMywxMjQgLS0tLQogIAogICQodG9wX2J1aWxkZGlyKS9zcmMvcG9y dC9wZ19jb25maWdfcGF0aHMuaDoKICAJJChNQUtFKSAtQyAkKHRvcF9idWlsZGRpcikvc3Jj L3BvcnQgcGdfY29uZmlnX3BhdGhzLmgKICAKICBpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMg aW5zdGFsbC1saWIKICAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9saWJwcS1mZS5oICck KERFU1RESVIpJChpbmNsdWRlZGlyKScKKyAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9s aWJwcS1ldmVudHMuaCAnJChERVNURElSKSQoaW5jbHVkZWRpciknCiAgCSQoSU5TVEFMTF9E QVRBKSAkKHNyY2RpcikvbGlicHEtaW50LmggJyQoREVTVERJUikkKGluY2x1ZGVkaXJfaW50 ZXJuYWwpJwogIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3BxZXhwYnVmZmVyLmggJyQo REVTVERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpJwogIAkkKElOU1RBTExfREFUQSkgJChz cmNkaXIpL3BnX3NlcnZpY2UuY29uZi5zYW1wbGUgJyQoREVTVERJUikkKGRhdGFkaXIpL3Bn X3NlcnZpY2UuY29uZi5zYW1wbGUnCiAgCiAgaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLWxp YgogIAkkKG1raW5zdGFsbGRpcnMpICckKERFU1RESVIpJChpbmNsdWRlZGlyKScgJyQoREVT VERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpJwogIAogIHVuaW5zdGFsbDogdW5pbnN0YWxs LWxpYgohIAlybSAtZiAnJChERVNURElSKSQoaW5jbHVkZWRpcikvbGlicHEtZmUuaCcgJyQo REVTVERJUikkKGluY2x1ZGVkaXIpL2xpYnBxLWV2ZW50cy5oJyAnJChERVNURElSKSQoaW5j bHVkZWRpcl9pbnRlcm5hbCkvbGlicHEtaW50LmgnICckKERFU1RESVIpJChpbmNsdWRlZGly X2ludGVybmFsKS9wcWV4cGJ1ZmZlci5oJyAnJChERVNURElSKSQoZGF0YWRpcikvcGdfc2Vy dmljZS5jb25mLnNhbXBsZScKICAKICBjbGVhbiBkaXN0Y2xlYW46IGNsZWFuLWxpYgogIAly bSAtZiAkKE9CSlMpIHBnX2NvbmZpZ19wYXRocy5oIGNyeXB0LmMgZ2V0YWRkcmluZm8uYyBp bmV0X2F0b24uYyBub2Jsb2NrLmMgb3Blbi5jIHBnc3RyY2FzZWNtcC5jIHNucHJpbnRmLmMg c3RyZXJyb3IuYyBzdHJsY3B5LmMgdGhyZWFkLmMgbWQ1LmMgaXAuYyBlbmNuYW1lcy5jIHdj aGFyLmMgd2luMzJlcnJvci5jIHBnc2xlZXAuYyBwdGhyZWFkLmggbGlicHEucmMKICAjIE1p Z2h0IGJlIGxlZnQgb3ZlciBmcm9tIGEgV2luMzIgY2xpZW50LW9ubHkgYnVpbGQKICAJcm0g LWYgcGdfY29uZmlnX3BhdGhzLmgKICAKSW5kZXg6IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2V4 cG9ydHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bn c3FsL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0LHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjE5CmRpZmYgLUM2IC1yMS4xOSBleHBvcnRzLnR4dAoqKiogc3JjL2ludGVyZmFj ZXMvbGlicHEvZXhwb3J0cy50eHQJMTkgTWFyIDIwMDggMDA6Mzk6MzMgLTAwMDAJMS4xOQot LS0gc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQJNSBTZXAgMjAwOCAxOTowMDo1 NiAtMDAwMAoqKioqKioqKioqKioqKioKKioqIDEzOCwxNDMgKioqKgotLS0gMTM4LDE1MiAt LS0tCiAgUFFzZW5kRGVzY3JpYmVQb3J0YWwgICAgICAxMzYKICBsb190cnVuY2F0ZSAgICAg ICAgICAgICAgIDEzNwogIFBRY29ubmVjdGlvblVzZWRQYXNzd29yZCAgMTM4CiAgcGdfdmFs aWRfc2VydmVyX2VuY29kaW5nX2lkIDEzOQogIFBRY29ubmVjdGlvbk5lZWRzUGFzc3dvcmQg MTQwCiAgbG9faW1wb3J0X3dpdGhfb2lkCQkgIDE0MQorIFBRY29weVJlc3VsdCAgICAgICAg ICAgICAgMTQyCisgUFFzZXRSZXN1bHRBdHRycyAgICAgICAgICAxNDMKKyBQUXNldHZhbHVl ICAgICAgICAgICAgICAgIDE0NAorIFBRcmVzdWx0QWxsb2MgICAgICAgICAgICAgMTQ1Cisg UFFyZWdpc3RlckV2ZW50UHJvYyAgICAgICAxNDYKKyBQUWluc3RhbmNlRGF0YSAgICAgICAg ICAgIDE0NworIFBRc2V0SW5zdGFuY2VEYXRhICAgICAgICAgMTQ4CisgUFFyZXN1bHRJbnN0 YW5jZURhdGEgICAgICAxNDkKKyBQUXJlc3VsdFNldEluc3RhbmNlRGF0YSAgIDE1MApcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWNvbm5lY3QuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9w Z3NxbC9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMsdgpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuMzU5CmRpZmYgLUM2IC1yMS4zNTkgZmUtY29ubmVjdC5jCioqKiBzcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMJMjkgTWF5IDIwMDggMjI6MDI6NDQgLTAwMDAJ MS4zNTkKLS0tIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwk1IFNlcCAyMDA4 IDE5OjAwOjU3IC0wMDAwCioqKioqKioqKioqKioqKgoqKiogMTk3MSwxOTgyICoqKioKLS0t IDE5NzEsMjAwMiAtLS0tCiAgICogcmVsZWFzZSBkYXRhIHRoYXQgaXMgdG8gYmUgaGVsZCBm b3IgdGhlIGxpZmUgb2YgdGhlIFBHY29ubiBzdHJ1Y3R1cmUuCiAgICogSWYgYSB2YWx1ZSBv dWdodCB0byBiZSBjbGVhcmVkL2ZyZWVkIGR1cmluZyBQUXJlc2V0KCksIGRvIGl0IHRoZXJl IG5vdCBoZXJlLgogICAqLwogIHN0YXRpYyB2b2lkCiAgZnJlZVBHY29ubihQR2Nvbm4gKmNv bm4pCiAgeworIAlpbnQgaTsKKyAJUEdFdmVudENvbm5EZXN0cm95IGV2dDsKKyAKKyAJLyog TGV0IHRoZSBldmVudCBwcm9jcyBjbGVhbnVwIHRoZWlyIHN0YXRlIGRhdGEgKi8KKyAJZm9y IChpID0gMDsgaSA8IGNvbm4tPm5FdmVudHM7IGkrKykKKyAJeworIAkJZXZ0LmNvbm4gPSBj b25uOworIAkJKHZvaWQpY29ubi0+ZXZlbnRzW2ldLnByb2MoUEdFVlRfQ09OTkRFU1RST1ks ICZldnQsIGNvbm4tPmV2ZW50c1tpXS5wYXNzVGhyb3VnaCk7CisgCQlpZiAoY29ubi0+ZXZl bnRzW2ldLm5hbWUpCisgCQkJZnJlZShjb25uLT5ldmVudHNbaV0ubmFtZSk7CisgCX0KKyAK KyAJLyogZnJlZSB0aGUgUEdFdmVudCBhcnJheSAqLworIAlpZiAoY29ubi0+ZXZlbnRzKQor IAl7CisgCQlmcmVlKGNvbm4tPmV2ZW50cyk7CisgCQljb25uLT5ldmVudHMgPSBOVUxMOwor IAkJY29ubi0+bkV2ZW50cyA9IGNvbm4tPmV2ZW50QXJyU2l6ZSA9IDA7CisgCX0KKyAKICAJ aWYgKGNvbm4tPnBnaG9zdCkKICAJCWZyZWUoY29ubi0+cGdob3N0KTsKICAJaWYgKGNvbm4t PnBnaG9zdGFkZHIpCiAgCQlmcmVlKGNvbm4tPnBnaG9zdGFkZHIpOwogIAlpZiAoY29ubi0+ cGdwb3J0KQogIAkJZnJlZShjb25uLT5wZ3BvcnQpOwoqKioqKioqKioqKioqKioKKioqIDIx NTIsMjE2NSAqKioqCiAgUFFyZXNldChQR2Nvbm4gKmNvbm4pCiAgewogIAlpZiAoY29ubikK ICAJewogIAkJY2xvc2VQR2Nvbm4oY29ubik7CiAgCiEgCQlpZiAoY29ubmVjdERCU3RhcnQo Y29ubikpCiEgCQkJKHZvaWQpIGNvbm5lY3REQkNvbXBsZXRlKGNvbm4pOwogIAl9CiAgfQog IAogIAogIC8qCiAgICogUFFyZXNldFN0YXJ0OgotLS0gMjE3MiwyMjA3IC0tLS0KICBQUXJl c2V0KFBHY29ubiAqY29ubikKICB7CiAgCWlmIChjb25uKQogIAl7CiAgCQljbG9zZVBHY29u bihjb25uKTsKICAKISAJCWlmIChjb25uZWN0REJTdGFydChjb25uKSAmJiBjb25uZWN0REJD b21wbGV0ZShjb25uKSkKISAJCXsKISAJCQlpbnQgaTsKISAJCQlQR0V2ZW50Q29ublJlc2V0 IGV2dDsKISAKISAJCQlmb3IgKGkgPSAwOyBpIDwgY29ubi0+bkV2ZW50czsgaSsrKQohIAkJ CXsKISAJCQkJZXZ0LmNvbm4gPSBjb25uOwohIAohIAkJCQlpZiAoIWNvbm4tPmV2ZW50c1tp XS5wcm9jKFBHRVZUX0NPTk5SRVNFVCwgJmV2dCwgY29ubi0+ZXZlbnRzW2ldLnBhc3NUaHJv dWdoKSkKISAJCQkJewohIAkJCQkJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9CQUQ7CiEg CQkJCQlpZiAoY29ubi0+ZXZlbnRzW2ldLm5hbWUpCiEgCQkJCQkJcHJpbnRmUFFFeHBCdWZm ZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKISAJCQkJCQkJbGlicHFfZ2V0dGV4dCgiUEdFdmVu dFByb2MgXCIlc1wiIGZhaWxlZCBkdXJpbmcgUEdFVlRfQ09OTlJFU0VUIGV2ZW50XG4iKSwK ISAJCQkJCQkJY29ubi0+ZXZlbnRzW2ldLm5hbWUpOwohIAkJCQkJZWxzZQohIAkJCQkJCXBy aW50ZlBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCiEgCQkJCQkJCWxpYnBxX2dl dHRleHQoIlBHRXZlbnRQcm9jIFwiYWRkcjolcFwiIGZhaWxlZCBkdXJpbmcgUEdFVlRfQ09O TlJFU0VUIGV2ZW50XG4iKSwKISAJCQkJCQkJY29ubi0+ZXZlbnRzW2ldLnByb2MpOwohIAkJ CQkJYnJlYWs7CiEgCQkJCX0KISAJCQl9CiEgCQl9CiAgCX0KICB9CiAgCiAgCiAgLyoKICAg KiBQUXJlc2V0U3RhcnQ6CioqKioqKioqKioqKioqKgoqKiogMjE4NywyMTk5ICoqKioKICAg KiBjbG9zZXMgdGhlIGV4aXN0aW5nIGNvbm5lY3Rpb24gYW5kIG1ha2VzIGEgbmV3IG9uZQog ICAqLwogIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUKICBQUXJlc2V0UG9sbChQR2Nvbm4g KmNvbm4pCiAgewogIAlpZiAoY29ubikKISAJCXJldHVybiBQUWNvbm5lY3RQb2xsKGNvbm4p OwogIAogIAlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CiAgfQogIAogIC8qCiAgICog UFFjYW5jZWxHZXQ6IGdldCBhIFBHY2FuY2VsIHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nIHRv IGEgY29ubmVjdGlvbi4KLS0tIDIyMjksMjI3MCAtLS0tCiAgICogY2xvc2VzIHRoZSBleGlz dGluZyBjb25uZWN0aW9uIGFuZCBtYWtlcyBhIG5ldyBvbmUKICAgKi8KICBQb3N0Z3Jlc1Bv bGxpbmdTdGF0dXNUeXBlCiAgUFFyZXNldFBvbGwoUEdjb25uICpjb25uKQogIHsKICAJaWYg KGNvbm4pCiEgCXsKISAJCVBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgc3RhdHVzID0gUFFj b25uZWN0UG9sbChjb25uKTsKISAKISAJCWlmIChzdGF0dXMgPT0gUEdSRVNfUE9MTElOR19P SykKISAJCXsKISAJCQlpbnQgaTsKISAJCQlQR0V2ZW50Q29ublJlc2V0IGV2dDsKISAKISAJ CQlmb3IgKGkgPSAwOyBpIDwgY29ubi0+bkV2ZW50czsgaSsrKQohIAkJCXsKISAJCQkJZXZ0 LmNvbm4gPSBjb25uOwohIAohIAkJCQlpZiAoIWNvbm4tPmV2ZW50c1tpXS5wcm9jKFBHRVZU X0NPTk5SRVNFVCwgJmV2dCwgY29ubi0+ZXZlbnRzW2ldLnBhc3NUaHJvdWdoKSkKISAJCQkJ ewohIAkJCQkJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9CQUQ7CiEgCQkJCQlpZiAoY29u bi0+ZXZlbnRzW2ldLm5hbWUpCiEgCQkJCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmNvbm4tPmVy cm9yTWVzc2FnZSwKISAJCQkJCQkJbGlicHFfZ2V0dGV4dCgiUEdFdmVudFByb2MgXCIlc1wi IGZhaWxlZCBkdXJpbmcgUEdFVlRfQ09OTlJFU0VUIGV2ZW50XG4iKSwKISAJCQkJCQkJY29u bi0+ZXZlbnRzW2ldLm5hbWUpOwohIAkJCQkJZWxzZQohIAkJCQkJCXByaW50ZlBRRXhwQnVm ZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCiEgCQkJCQkJCWxpYnBxX2dldHRleHQoIlBHRXZl bnRQcm9jIFwiYWRkcjolcFwiIGZhaWxlZCBkdXJpbmcgUEdFVlRfQ09OTlJFU0VUIGV2ZW50 XG4iKSwKISAJCQkJCQkJY29ubi0+ZXZlbnRzW2ldLnByb2MpOwohIAkJCQkJcmV0dXJuIFBH UkVTX1BPTExJTkdfRkFJTEVEOwohIAkJCQl9CiEgCQkJfQohIAkJfQohIAohIAkJcmV0dXJu IHN0YXR1czsKISAJfQogIAogIAlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CiAgfQog IAogIC8qCiAgICogUFFjYW5jZWxHZXQ6IGdldCBhIFBHY2FuY2VsIHN0cnVjdHVyZSBjb3Jy ZXNwb25kaW5nIHRvIGEgY29ubmVjdGlvbi4KSW5kZXg6IHNyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWV4ZWMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9w Z3NxbC9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1leGVjLmMsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMTk2CmRpZmYgLUM2IC1yMS4xOTYgZmUtZXhlYy5jCioqKiBzcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1leGVjLmMJMjMgSnVuIDIwMDggMjE6MTA6NDkgLTAwMDAJMS4xOTYKLS0t IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWV4ZWMuYwk1IFNlcCAyMDA4IDE5OjAwOjU3IC0w MDAwCioqKioqKioqKioqKioqKgoqKiogNjAsNzIgKioqKgogIAkJCQlpbnQgcmVzdWx0Rm9y bWF0KTsKICBzdGF0aWMgdm9pZCBwYXJzZUlucHV0KFBHY29ubiAqY29ubik7CiAgc3RhdGlj IGJvb2wgUFFleGVjU3RhcnQoUEdjb25uICpjb25uKTsKICBzdGF0aWMgUEdyZXN1bHQgKlBR ZXhlY0ZpbmlzaChQR2Nvbm4gKmNvbm4pOwogIHN0YXRpYyBpbnQgUFFzZW5kRGVzY3JpYmUo UEdjb25uICpjb25uLCBjaGFyIGRlc2NfdHlwZSwKICAJCQkgICBjb25zdCBjaGFyICpkZXNj X3RhcmdldCk7CiEgCiAgCiAgLyogLS0tLS0tLS0tLS0tLS0tLQogICAqIFNwYWNlIG1hbmFn ZW1lbnQgZm9yIFBHcmVzdWx0LgogICAqCiAgICogRm9ybWVybHksIGxpYnBxIGRpZCBhIHNl cGFyYXRlIG1hbGxvYygpIGZvciBlYWNoIGZpZWxkIG9mIGVhY2ggdHVwbGUKICAgKiByZXR1 cm5lZCBieSBhIHF1ZXJ5LiAgVGhpcyB3YXMgcmVtYXJrYWJseSBleHBlbnNpdmUgLS0tIG1h bGxvYy9mcmVlCi0tLSA2MCw3MiAtLS0tCiAgCQkJCWludCByZXN1bHRGb3JtYXQpOwogIHN0 YXRpYyB2b2lkIHBhcnNlSW5wdXQoUEdjb25uICpjb25uKTsKICBzdGF0aWMgYm9vbCBQUWV4 ZWNTdGFydChQR2Nvbm4gKmNvbm4pOwogIHN0YXRpYyBQR3Jlc3VsdCAqUFFleGVjRmluaXNo KFBHY29ubiAqY29ubik7CiAgc3RhdGljIGludCBQUXNlbmREZXNjcmliZShQR2Nvbm4gKmNv bm4sIGNoYXIgZGVzY190eXBlLAogIAkJCSAgIGNvbnN0IGNoYXIgKmRlc2NfdGFyZ2V0KTsK ISBzdGF0aWMgaW50IGNoZWNrX2ZpZWxkX251bWJlcihjb25zdCBQR3Jlc3VsdCAqcmVzLCBp bnQgZmllbGRfbnVtKTsKICAKICAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgICogU3BhY2UgbWFu YWdlbWVudCBmb3IgUEdyZXN1bHQuCiAgICoKICAgKiBGb3JtZXJseSwgbGlicHEgZGlkIGEg c2VwYXJhdGUgbWFsbG9jKCkgZm9yIGVhY2ggZmllbGQgb2YgZWFjaCB0dXBsZQogICAqIHJl dHVybmVkIGJ5IGEgcXVlcnkuICBUaGlzIHdhcyByZW1hcmthYmx5IGV4cGVuc2l2ZSAtLS0g bWFsbG9jL2ZyZWUKKioqKioqKioqKioqKioqCioqKiAxMjEsMTQxICoqKioKLS0tIDEyMSwx NzEgLS0tLQogICNkZWZpbmUgUEdSRVNVTFRfREFUQV9CTE9DS1NJWkUJCTIwNDgKICAjZGVm aW5lIFBHUkVTVUxUX0FMSUdOX0JPVU5EQVJZCQlNQVhJTVVNX0FMSUdOT0YJCS8qIGZyb20g Y29uZmlndXJlICovCiAgI2RlZmluZSBQR1JFU1VMVF9CTE9DS19PVkVSSEVBRAkJTWF4KHNp emVvZihQR3Jlc3VsdF9kYXRhKSwgUEdSRVNVTFRfQUxJR05fQk9VTkRBUlkpCiAgI2RlZmlu ZSBQR1JFU1VMVF9TRVBfQUxMT0NfVEhSRVNIT0xECShQR1JFU1VMVF9EQVRBX0JMT0NLU0la RSAvIDIpCiAgCiAgCisgLyogRG9lcyBub3QgZHVwbGljYXRlIHRoZSBldmVudCBpbnN0YW5j ZSBkYXRhLCBzZXRzIHRoaXMgdG8gTlVMTCAqLworIHN0YXRpYyBQR0V2ZW50ICoKKyBkdXBF dmVudHMoUEdFdmVudCAqZXZlbnRzLCBpbnQgY291bnQpCisgeworIAlpbnQgaTsKKyAJUEdF dmVudCAqbmV3RXZlbnRzOworIAorIAlpZiAoIWV2ZW50cyB8fCBjb3VudCA8PSAwKQorIAkJ cmV0dXJuIE5VTEw7CisgCisgCW5ld0V2ZW50cyA9IChQR0V2ZW50ICopIG1hbGxvYyhjb3Vu dCAqIHNpemVvZihQR0V2ZW50KSk7CisgCWlmICghbmV3RXZlbnRzKQorIAkJcmV0dXJuIE5V TEw7CisgCisgCW1lbWNweShuZXdFdmVudHMsIGV2ZW50cywgY291bnQgKiBzaXplb2YoUEdF dmVudCkpOworIAorIAkvKiBOVUxMIG91dCB0aGUgZGF0YSBwb2ludGVyIGFuZCBkZWVwIGNv cHkgbmFtZSAqLworIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAJeworIAkJaWYg KG5ld0V2ZW50c1tpXS5uYW1lKQorIAkJCW5ld0V2ZW50c1tpXS5uYW1lID0gc3RyZHVwKG5l d0V2ZW50c1tpXS5uYW1lKTsKKyAJCW5ld0V2ZW50c1tpXS5kYXRhID0gTlVMTDsKKyAJfQor IAorIAlyZXR1cm4gbmV3RXZlbnRzOworIH0KKyAKICAvKgogICAqIFBRbWFrZUVtcHR5UEdy ZXN1bHQKICAgKgkgcmV0dXJucyBhIG5ld2x5IGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQgUEdy ZXN1bHQgd2l0aCBnaXZlbiBzdGF0dXMuCiAgICoJIElmIGNvbm4gaXMgbm90IE5VTEwgYW5k IHN0YXR1cyBpbmRpY2F0ZXMgYW4gZXJyb3IsIHRoZSBjb25uJ3MKICAgKgkgZXJyb3JNZXNz YWdlIGlzIGNvcGllZC4KICAgKgogICAqIE5vdGUgdGhpcyBpcyBleHBvcnRlZCAtLS0geW91 IHdvdWxkbid0IHRoaW5rIGFuIGFwcGxpY2F0aW9uIHdvdWxkIG5lZWQKICAgKiB0byBidWls ZCBpdHMgb3duIFBHcmVzdWx0cywgYnV0IHRoaXMgaGFzIHByb3ZlbiB1c2VmdWwgaW4gYm90 aCBsaWJwZ3RjbAogICAqIGFuZCB0aGUgUGVybDUgaW50ZXJmYWNlLCBzbyBtYXliZSBpdCdz IG5vdCBzbyB1bnJlYXNvbmFibGUuCisgICoKKyAgKiBVcGRhdGVkIEFwcmlsIDIwMDggLSBJ ZiBjb25uIGlzIG5vdCBOVUxMLCBldmVudCBzdGF0ZXMgd2lsbCBiZSBjb3BpZWQKKyAgKiBm cm9tIHRoZSBQR2Nvbm4gdG8gdGhlIGNyZWF0ZWQgUEdyZXN1bHQuCiAgICovCiAgCiAgUEdy ZXN1bHQgKgogIFBRbWFrZUVtcHR5UEdyZXN1bHQoUEdjb25uICpjb25uLCBFeGVjU3RhdHVz VHlwZSBzdGF0dXMpCiAgewogIAlQR3Jlc3VsdCAgICpyZXN1bHQ7CioqKioqKioqKioqKioq KgoqKiogMTU3LDE3NSAqKioqCi0tLSAxODcsMjIwIC0tLS0KICAJcmVzdWx0LT5lcnJNc2cg PSBOVUxMOwogIAlyZXN1bHQtPmVyckZpZWxkcyA9IE5VTEw7CiAgCXJlc3VsdC0+bnVsbF9m aWVsZFswXSA9ICdcMCc7CiAgCXJlc3VsdC0+Y3VyQmxvY2sgPSBOVUxMOwogIAlyZXN1bHQt PmN1ck9mZnNldCA9IDA7CiAgCXJlc3VsdC0+c3BhY2VMZWZ0ID0gMDsKKyAJcmVzdWx0LT5u RXZlbnRzID0gMDsKKyAJcmVzdWx0LT5ldmVudHMgPSBOVUxMOwogIAogIAlpZiAoY29ubikK ICAJewogIAkJLyogY29weSBjb25uZWN0aW9uIGRhdGEgd2UgbWlnaHQgbmVlZCBmb3Igb3Bl cmF0aW9ucyBvbiBQR3Jlc3VsdCAqLwogIAkJcmVzdWx0LT5ub3RpY2VIb29rcyA9IGNvbm4t Pm5vdGljZUhvb2tzOwogIAkJcmVzdWx0LT5jbGllbnRfZW5jb2RpbmcgPSBjb25uLT5jbGll bnRfZW5jb2Rpbmc7CiAgCisgCQkvKiBjb3B5IGV2ZW50cyBmcm9tIGNvbm5lY3Rpb24gKi8K KyAJCWlmIChjb25uLT5uRXZlbnRzID4gMCkKKyAJCXsKKyAJCQlyZXN1bHQtPmV2ZW50cyA9 IGR1cEV2ZW50cyhjb25uLT5ldmVudHMsIGNvbm4tPm5FdmVudHMpOworIAkJCWlmICghcmVz dWx0LT5ldmVudHMpCisgCQkJeworIAkJCQlQUWNsZWFyKHJlc3VsdCk7CisgCQkJCXJldHVy biBOVUxMOworIAkJCX0KKyAKKyAJCQlyZXN1bHQtPm5FdmVudHMgPSBjb25uLT5uRXZlbnRz OworIAkJfQorIAogIAkJLyogY29uc2lkZXIgY29weWluZyBjb25uJ3MgZXJyb3JNZXNzYWdl ICovCiAgCQlzd2l0Y2ggKHN0YXR1cykKICAJCXsKICAJCQljYXNlIFBHUkVTX0VNUFRZX1FV RVJZOgogIAkJCWNhc2UgUEdSRVNfQ09NTUFORF9PSzoKICAJCQljYXNlIFBHUkVTX1RVUExF U19PSzoKKioqKioqKioqKioqKioqCioqKiAxOTIsMjAzICoqKioKLS0tIDIzNyw0OTUgLS0t LQogIAkJcmVzdWx0LT5jbGllbnRfZW5jb2RpbmcgPSBQR19TUUxfQVNDSUk7CiAgCX0KICAK ICAJcmV0dXJuIHJlc3VsdDsKICB9CiAgCisgLyogUFFzZXRSZXN1bHRBdHRycworICAqIFNl dCB0aGUgYXR0cmlidXRlcyBmb3IgYSBnaXZlbiByZXN1bHQuICBUaGlzIGZ1bmN0aW9uIGZh aWxzIGlmIHRoZXJlIGFyZQorICAqIGFscmVhZHkgYXR0cmlidXRlcyBjb250YWluZWQgaW4g dGhlIHByb3ZpZGVkIHJlc3VsdC4gIFRoZSBjYWxsIGlzCisgICogaWdub3JlZCBpZiBudW1B dHRyaWJ1dGVzIGlzIGlzIHplcm8gb3IgYXR0RGVzY3MgaXMgTlVMTC4gIElmIHRoZQorICAq IGZ1bmN0aW9uIGZhaWxzLCBpdCByZXR1cm5zIHplcm8uICBJZiB0aGUgZnVuY3Rpb24gc3Vj Y2VlZHMsIGl0CisgICogcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLgorICAqLworIGludAor IFBRc2V0UmVzdWx0QXR0cnMoUEdyZXN1bHQgKnJlcywgaW50IG51bUF0dHJpYnV0ZXMsIFBH cmVzQXR0RGVzYyAqYXR0RGVzY3MpCisgeworIAlpbnQgaTsKKyAKKyAJLyogSWYgYXR0cnMg YWxyZWFkeSBleGlzdCwgdGhleSBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uICovCisgCWlmICgh cmVzIHx8IHJlcy0+bnVtQXR0cmlidXRlcyA+IDApCisgCQlyZXR1cm4gRkFMU0U7CisgCisg CS8qIGlnbm9yZSByZXF1ZXN0ICovCisgCWlmIChudW1BdHRyaWJ1dGVzIDw9IDAgfHwgIWF0 dERlc2NzKQorIAkJcmV0dXJuIFRSVUU7CisgCisgCXJlcy0+YXR0RGVzY3MgPSAoUEdyZXNB dHREZXNjICopIFBRcmVzdWx0QWxsb2MocmVzLAorIAkJbnVtQXR0cmlidXRlcyAqIHNpemVv ZihQR3Jlc0F0dERlc2MpKTsKKyAKKyAJaWYgKCFyZXMtPmF0dERlc2NzKQorIAkJcmV0dXJu IEZBTFNFOworIAorIAlyZXMtPm51bUF0dHJpYnV0ZXMgPSBudW1BdHRyaWJ1dGVzOworIAlt ZW1jcHkocmVzLT5hdHREZXNjcywgYXR0RGVzY3MsCisgCQludW1BdHRyaWJ1dGVzICogc2l6 ZW9mKFBHcmVzQXR0RGVzYykpOworIAorIAkvKiByZXN1bHRhbGxvYyB0aGUgYXR0cmlidXRl IG5hbWVzLiAgVGhlIGFib3ZlIG1lbWNweSBoYXMgdGhlIGF0dHIKKyAJICogbmFtZXMgcG9p bnRpbmcgYXQgdGhlIGNhbGxlcnMgcHJvdmlkZWQgYXR0RGVzY3MgbWVtb3J5LgorIAkgKi8K KyAJcmVzLT5iaW5hcnkgPSAxOworIAlmb3IgKGkgPSAwOyBpIDwgcmVzLT5udW1BdHRyaWJ1 dGVzOyBpKyspCisgCXsKKyAJCWlmIChyZXMtPmF0dERlc2NzW2ldLm5hbWUpCisgCQkJcmVz LT5hdHREZXNjc1tpXS5uYW1lID0gcHFSZXN1bHRTdHJkdXAocmVzLCByZXMtPmF0dERlc2Nz W2ldLm5hbWUpOworIAkJZWxzZQorIAkJCXJlcy0+YXR0RGVzY3NbaV0ubmFtZSA9IHJlcy0+ bnVsbF9maWVsZDsKKyAKKyAJCWlmICghcmVzLT5hdHREZXNjc1tpXS5uYW1lKQorIAkJCXJl dHVybiBGQUxTRTsKKyAKKyAJCS8qIEFsdGhvdWdoIGRlcHJlY2F0ZWQsIGJlY2F1c2UgcmVz dWx0cyBjYW4gaGF2ZSB0ZXh0K2JpbmFyeSBjb2x1bW5zLAorIAkJICogaXRzIGVhc3kgZW5v dWdoIHRvIGRlZHVjZSBzbyBzZXQgaXQgZm9yIGNvbXBsZXRlbmVzcy4KKyAJCSAqLworIAkJ aWYgKHJlcy0+YXR0RGVzY3NbaV0uZm9ybWF0ID09IDApCisgCQkJcmVzLT5iaW5hcnkgPSAw OworIAl9CisgCisgCXJldHVybiBUUlVFOworIH0KKyAKKyAvKgorICAqIFBRY29weVJlc3Vs dAorICAqIFJldHVybnMgYSBkZWVwIGNvcHkgb2YgdGhlIHByb3ZpZGVkICdzcmMnIFBHcmVz dWx0LCB3aGljaCBjYW5ub3QgYmUgTlVMTC4KKyAgKiBUaGUgJ2ZsYWdzJyBhcmd1bWVudCBj b250cm9scyB3aGljaCBwb3J0aW9ucyBvZiB0aGUgcmVzdWx0IHdpbGwgb3Igd2lsbAorICAq IE5PVCBiZSBjb3BpZWQuICBUaGUgY3JlYXRlZCByZXN1bHQgaXMgYWx3YXlzIHB1dCBpbnRv IHRoZQorICAqIFBHUkVTX1RVUExFU19PSyBzdGF0dXMuICBUaGUgc291cmNlIHJlc3VsdCBl cnJvciBtZXNzYWdlIGlzIG5vdCBjb3BpZWQsCisgICogYWx0aG91Z2ggY21kU3RhdHVzIGlz LgorICAqCisgICogVG8gc2V0IGN1c3RvbSBhdHRyaWJ1dGVzLCBzZWUgUFFzZXRSZXN1bHRB dHRycy4gIFRoYXQgZnVuY3Rpb24gcmVxdWlyZXMKKyAgKiB0aGF0IHRoZXJlIGFyZSBubyBh dHRycyBjb250YWluZWQgaW4gdGhlIHJlc3VsdCwgc28gdG8gdXNlIHRoYXQKKyAgKiBmdW5j dGlvbiB5b3UgY2Fubm90IHVzZSB0aGUgUEdfQ09QWVJFU19BVFRSUyBvciBQR19DT1BZUkVT X1RVUExFUworICAqIG9wdGlvbnMgd2l0aCB0aGlzIGZ1bmN0aW9uLgorICAqCisgICogT3B0 aW9uczoKKyAgKiAgIFBHX0NPUFlSRVNfQVRUUlMgLSBDb3B5IHRoZSBzb3VyY2UgcmVzdWx0 J3MgYXR0cmlidXRlcworICAqCisgICogICBQR19DT1BZUkVTX1RVUExFUyAtIENvcHkgdGhl IHNvdXJjZSByZXN1bHQncyB0dXBsZXMuICBUaGlzIGltcGxpZXMKKyAgKiAgIGNvcHlpbmcg dGhlIGF0dHJzLCBiZWluZyBob3cgdGhlIGF0dHJzIGFyZSBuZWVkZWQgYnkgdGhlIHR1cGxl cy4KKyAgKgorICAqICAgUEdfQ09QWVJFU19FVkVOVFMgLSBDb3B5IHRoZSBzb3VyY2UgcmVz dWx0J3MgZXZlbnRzLgorICAqCisgICogICBQR19DT1BZUkVTX05PVElDRUhPT0tTIC0gQ29w eSB0aGUgc291cmNlIHJlc3VsdCdzIG5vdGljZSBob29rcy4KKyAgKi8KKyAKKyBQR3Jlc3Vs dCAqCisgUFFjb3B5UmVzdWx0KGNvbnN0IFBHcmVzdWx0ICpzcmMsIGludCBmbGFncykKKyB7 CisgCWludCBpOworIAlQR3Jlc3VsdCAqZGVzdDsKKyAJUEdFdmVudFJlc3VsdENvcHkgZXZ0 OworIAorIAlpZiAoIXNyYykKKyAJCXJldHVybiBOVUxMOworIAorIAkvKiBBdXRvbWF0aWNh bGx5IHR1cm4gb24gYXR0cnMgZmxhZ3MgYmVjYXVzZSB5b3UgY2FuJ3QgY29weSB0dXBsZXMK KyAJICogd2l0aG91dCBjb3B5aW5nIHRoZSBhdHRycy4gIF9UVVBMRVMgaW1wbGllcyBfQVRU UlMuCisgCSAqLworIAlpZiAoZmxhZ3MgJiBQR19DT1BZUkVTX1RVUExFUykKKyAJCWZsYWdz IHw9IFBHX0NPUFlSRVNfQVRUUlM7CisgCisgCWRlc3QgPSBQUW1ha2VFbXB0eVBHcmVzdWx0 KChQR2Nvbm4gKilOVUxMLCBQR1JFU19UVVBMRVNfT0spOworIAlpZiAoIWRlc3QpCisgCQly ZXR1cm4gTlVMTDsKKyAKKyAJLyogYWx3YXlzIGNvcHkgdGhlc2Ugb3Zlci4gIElzIGNtZFN0 YXR1cyB1c2VmdWwgaGVyZT8gKi8KKyAJZGVzdC0+Y2xpZW50X2VuY29kaW5nID0gc3JjLT5j bGllbnRfZW5jb2Rpbmc7CisgCXN0cmNweShkZXN0LT5jbWRTdGF0dXMsIHNyYy0+Y21kU3Rh dHVzKTsKKyAKKyAJLyogV2FudHMgdG8gY29weSBub3RpY2UgaG9va3MgKi8KKyAJaWYgKGZs YWdzICYgUEdfQ09QWVJFU19OT1RJQ0VIT09LUykKKyAJCWRlc3QtPm5vdGljZUhvb2tzID0g c3JjLT5ub3RpY2VIb29rczsKKyAKKyAJLyogV2FudHMgYXR0cnMgKi8KKyAJaWYgKChmbGFn cyAmIFBHX0NPUFlSRVNfQVRUUlMpICYmCisgCQkgIVBRc2V0UmVzdWx0QXR0cnMoZGVzdCwg c3JjLT5udW1BdHRyaWJ1dGVzLCBzcmMtPmF0dERlc2NzKSkKKyAJeworIAkJUFFjbGVhcihk ZXN0KTsKKyAJCXJldHVybiBOVUxMOworIAl9CisgCisgCS8qIFdhbnRzIHRvIGNvcHkgcmVz dWx0IHR1cGxlczogdXNlIFBRc2V0dmFsdWUoKS4gKi8KKyAJaWYgKChmbGFncyAmIFBHX0NP UFlSRVNfVFVQTEVTKSAmJiBzcmMtPm50dXBzID4gMCkKKyAJeworIAkJaW50IHR1cCwgZmll bGQ7CisgCQlmb3IgKHR1cCA9IDA7IHR1cCA8IHNyYy0+bnR1cHM7IHR1cCsrKQorIAkJCWZv ciAoZmllbGQgPSAwOyBmaWVsZCA8IHNyYy0+bnVtQXR0cmlidXRlczsgZmllbGQrKykKKyAJ CQkJUFFzZXR2YWx1ZShkZXN0LCB0dXAsIGZpZWxkLCBzcmMtPnR1cGxlc1t0dXBdW2ZpZWxk XS52YWx1ZSwKKyAJCQkJCXNyYy0+dHVwbGVzW3R1cF1bZmllbGRdLmxlbik7CisgCX0KKyAK KyAJLyogV2FudHMgdG8gY29weSBQR0V2ZW50cy4gKi8KKyAJaWYgKChmbGFncyAmIFBHX0NP UFlSRVNfRVZFTlRTKSAmJiBzcmMtPm5FdmVudHMgPiAwKQorIAl7CisgCQlkZXN0LT5ldmVu dHMgPSBkdXBFdmVudHMoc3JjLT5ldmVudHMsIHNyYy0+bkV2ZW50cyk7CisgCQlpZiAoIWRl c3QtPmV2ZW50cykKKyAJCXsKKyAJCQlQUWNsZWFyKGRlc3QpOworIAkJCXJldHVybiBOVUxM OworIAkJfQorIAorIAkJZGVzdC0+bkV2ZW50cyA9IHNyYy0+bkV2ZW50czsKKyAJfQorIAor IAkvKiBUcmlnZ2VyIFBHRVZUX1JFU1VMVENPUFkgZXZlbnQgKi8KKyAJZm9yIChpID0gMDsg aSA8IGRlc3QtPm5FdmVudHM7IGkrKykKKyAJeworIAkJZXZ0LnNyYyA9IHNyYzsKKyAJCWV2 dC5kZXN0ID0gZGVzdDsKKyAJCWlmICghZGVzdC0+ZXZlbnRzW2ldLnByb2MoUEdFVlRfUkVT VUxUQ09QWSwgJmV2dCwgZGVzdC0+ZXZlbnRzW2ldLnBhc3NUaHJvdWdoKSkKKyAJCXsKKyAJ CQlQUWNsZWFyKGRlc3QpOworIAkJCXJldHVybiBOVUxMOworIAkJfQorIAl9CisgCisgCXJl dHVybiBkZXN0OworIH0KKyAKKyBpbnQKKyBQUXNldHZhbHVlKFBHcmVzdWx0ICpyZXMsIGlu dCB0dXBfbnVtLCBpbnQgZmllbGRfbnVtLAorIAljaGFyICp2YWx1ZSwgaW50IGxlbikKKyB7 CisgCVBHcmVzQXR0VmFsdWUgKmF0dHZhbDsKKyAKKyAJaWYgKCFjaGVja19maWVsZF9udW1i ZXIocmVzLCBmaWVsZF9udW0pKQorIAkJcmV0dXJuIEZBTFNFOworIAorIAkvKiBJbnZhbGlk IHR1cF9udW0sIG11c3QgYmUgPD0gbnR1cHMgKi8KKyAJaWYgKHR1cF9udW0gPiByZXMtPm50 dXBzKQorIAkJcmV0dXJuIEZBTFNFOworIAorIAkvKiBuZWVkIHRvIGdyb3cgdGhlIHR1cGxl IHRhYmxlICovCisgCWlmIChyZXMtPm50dXBzID49IHJlcy0+dHVwQXJyU2l6ZSkKKyAJewor IAkJaW50IG4gPSByZXMtPnR1cEFyclNpemUgPyByZXMtPnR1cEFyclNpemUgKiAyIDogMTI4 OworIAkJUEdyZXNBdHRWYWx1ZSAqKnR1cHM7CisgCisgCQlpZiAocmVzLT50dXBsZXMpCisg CQkJdHVwcyA9IChQR3Jlc0F0dFZhbHVlICoqKSByZWFsbG9jKHJlcy0+dHVwbGVzLCBuICog c2l6ZW9mKFBHcmVzQXR0VmFsdWUgKikpOworIAkJZWxzZQorIAkJCXR1cHMgPSAoUEdyZXNB dHRWYWx1ZSAqKikgbWFsbG9jKG4gKiBzaXplb2YoUEdyZXNBdHRWYWx1ZSAqKSk7CisgCisg CQlpZiAoIXR1cHMpCisgCQkJcmV0dXJuIEZBTFNFOworIAorIAkJbWVtc2V0KHR1cHMgKyBy ZXMtPnR1cEFyclNpemUsIDAsCisgCQkJKG4gLSByZXMtPnR1cEFyclNpemUpICogc2l6ZW9m KFBHcmVzQXR0VmFsdWUgKikpOworIAkJcmVzLT50dXBsZXMgPSB0dXBzOworIAkJcmVzLT50 dXBBcnJTaXplID0gbjsKKyAJfQorIAorIAkvKiBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IHR1 cGxlICovCisgCWlmICh0dXBfbnVtID09IHJlcy0+bnR1cHMgJiYgIXJlcy0+dHVwbGVzW3R1 cF9udW1dKQorIAl7CisgCQlpbnQgaTsKKyAJCVBHcmVzQXR0VmFsdWUgKnR1cDsKKyAKKyAJ CXR1cCA9IChQR3Jlc0F0dFZhbHVlICopIHBxUmVzdWx0QWxsb2MocmVzLAorIAkJCXJlcy0+ bnVtQXR0cmlidXRlcyAqIHNpemVvZihQR3Jlc0F0dFZhbHVlKSwgVFJVRSk7CisgCisgCQlp ZiAoIXR1cCkKKyAJCQlyZXR1cm4gRkFMU0U7CisgCisgCQkvKiBpbml0aWFsaXplIGVhY2gg Y29sdW1uIHRvIE5VTEwgKi8KKyAJCWZvciAoaSA9IDA7IGkgPCByZXMtPm51bUF0dHJpYnV0 ZXM7IGkrKykKKyAJCXsKKyAJCQl0dXBbaV0ubGVuID0gTlVMTF9MRU47CisgCQkJdHVwW2ld LnZhbHVlID0gcmVzLT5udWxsX2ZpZWxkOworIAkJfQorIAorIAkJcmVzLT50dXBsZXNbdHVw X251bV0gPSB0dXA7CisgCQlyZXMtPm50dXBzKys7CisgCX0KKyAKKyAJYXR0dmFsID0gJnJl cy0+dHVwbGVzW3R1cF9udW1dW2ZpZWxkX251bV07CisgCisgCS8qIE9uIHRvcCBvZiBOVUxM X0xFTiwgdHJlYXQgYSBOVUxMIHZhbHVlIGFzIGEgTlVMTCBmaWVsZCAqLworIAlpZiAobGVu ID09IE5VTExfTEVOIHx8IHZhbHVlID09IE5VTEwpCisgCXsKKyAJCWF0dHZhbC0+bGVuID0g TlVMTF9MRU47CisgCQlhdHR2YWwtPnZhbHVlID0gcmVzLT5udWxsX2ZpZWxkOworIAl9Cisg CWVsc2UKKyAJeworIAkJaWYgKGxlbiA8IDApCisgCQkJbGVuID0gMDsKKyAKKyAJCWlmIChs ZW4gPT0gMCkKKyAJCXsKKyAJCQlhdHR2YWwtPmxlbiA9IDA7CisgCQkJYXR0dmFsLT52YWx1 ZSA9IHJlcy0+bnVsbF9maWVsZDsKKyAJCX0KKyAJCWVsc2UKKyAJCXsKKyAJCQlhdHR2YWwt PnZhbHVlID0gKGNoYXIgKikgUFFyZXN1bHRBbGxvYyhyZXMsIGxlbiArIDEpOworIAkJCWlm ICghYXR0dmFsLT52YWx1ZSkKKyAJCQkJcmV0dXJuIEZBTFNFOworIAorIAkJCWF0dHZhbC0+ bGVuID0gbGVuOworIAkJCW1lbWNweShhdHR2YWwtPnZhbHVlLCB2YWx1ZSwgbGVuKTsKKyAJ CQlhdHR2YWwtPnZhbHVlW2xlbl0gPSAnXDAnOworIAkJfQorIAl9CisgCisgCXJldHVybiBU UlVFOworIH0KKyAKKyB2b2lkICoKKyBQUXJlc3VsdEFsbG9jKFBHcmVzdWx0ICpyZXMsIHNp emVfdCBuQnl0ZXMpCisgeworIAlyZXR1cm4gcHFSZXN1bHRBbGxvYyhyZXMsIG5CeXRlcywg VFJVRSk7CisgfQorIAogIC8qCiAgICogcHFSZXN1bHRBbGxvYyAtCiAgICoJCUFsbG9jYXRl IHN1YnNpZGlhcnkgc3RvcmFnZSBmb3IgYSBQR3Jlc3VsdC4KICAgKgogICAqIG5CeXRlcyBp cyB0aGUgYW1vdW50IG9mIHNwYWNlIG5lZWRlZCBmb3IgdGhlIG9iamVjdC4KICAgKiBJZiBp c0JpbmFyeSBpcyB0cnVlLCB3ZSBhc3N1bWUgdGhhdCB3ZSBuZWVkIHRvIGFsaWduIHRoZSBv YmplY3Qgb24KKioqKioqKioqKioqKioqCioqKiAzNDksMzY1ICoqKioKLS0tIDY0MSw2NzQg LS0tLQogICAqIFBRY2xlYXIgLQogICAqCSAgZnJlZSdzIHRoZSBtZW1vcnkgYXNzb2NpYXRl ZCB3aXRoIGEgUEdyZXN1bHQKICAgKi8KICB2b2lkCiAgUFFjbGVhcihQR3Jlc3VsdCAqcmVz KQogIHsKKyAJaW50IGk7CiAgCVBHcmVzdWx0X2RhdGEgKmJsb2NrOworIAlQR0V2ZW50UmVz dWx0RGVzdHJveSBldnQ7CiAgCiAgCWlmICghcmVzKQogIAkJcmV0dXJuOwogIAorIAlmb3Ig KGkgPSAwOyBpIDwgcmVzLT5uRXZlbnRzOyBpKyspCisgCXsKKyAJCWV2dC5yZXN1bHQgPSBy ZXM7CisgCQkodm9pZClyZXMtPmV2ZW50c1tpXS5wcm9jKFBHRVZUX1JFU1VMVERFU1RST1ks ICZldnQsIHJlcy0+ZXZlbnRzW2ldLnBhc3NUaHJvdWdoKTsKKyAJCWlmIChyZXMtPmV2ZW50 c1tpXS5uYW1lKQorIAkJCWZyZWUocmVzLT5ldmVudHNbaV0ubmFtZSk7CisgCX0KKyAKKyAJ aWYgKHJlcy0+ZXZlbnRzKQorIAl7CisgCQlmcmVlKHJlcy0+ZXZlbnRzKTsKKyAJCXJlcy0+ ZXZlbnRzID0gTlVMTDsKKyAJCXJlcy0+bkV2ZW50cyA9IDA7CisgCX0KKyAKICAJLyogRnJl ZSBhbGwgdGhlIHN1YnNpZGlhcnkgYmxvY2tzICovCiAgCXdoaWxlICgoYmxvY2sgPSByZXMt PmN1ckJsb2NrKSAhPSBOVUxMKQogIAl7CiAgCQlyZXMtPmN1ckJsb2NrID0gYmxvY2stPm5l eHQ7CiAgCQlmcmVlKGJsb2NrKTsKICAJfQoqKioqKioqKioqKioqKioKKioqIDExOTIsMTIw NCAqKioqCiAgICoJICBtZW1vcnkpLgogICAqLwogIAogIFBHcmVzdWx0ICoKICBQUWdldFJl c3VsdChQR2Nvbm4gKmNvbm4pCiAgewohIAlQR3Jlc3VsdCAgICpyZXM7CiAgCiAgCWlmICgh Y29ubikKICAJCXJldHVybiBOVUxMOwogIAogIAkvKiBQYXJzZSBhbnkgYXZhaWxhYmxlIGRh dGEsIGlmIG91ciBzdGF0ZSBwZXJtaXRzLiAqLwogIAlwYXJzZUlucHV0KGNvbm4pOwotLS0g MTUwMSwxNTEzIC0tLS0KICAgKgkgIG1lbW9yeSkuCiAgICovCiAgCiAgUEdyZXN1bHQgKgog IFBRZ2V0UmVzdWx0KFBHY29ubiAqY29ubikKICB7CiEgCVBHcmVzdWx0ICAgKnJlcz1OVUxM OwogIAogIAlpZiAoIWNvbm4pCiAgCQlyZXR1cm4gTlVMTDsKICAKICAJLyogUGFyc2UgYW55 IGF2YWlsYWJsZSBkYXRhLCBpZiBvdXIgc3RhdGUgcGVybWl0cy4gKi8KICAJcGFyc2VJbnB1 dChjb25uKTsKKioqKioqKioqKioqKioqCioqKiAxMjY3LDEyNzggKioqKgotLS0gMTU3Niwx NjIwIC0tLS0KICAJCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJ1bmV4cGVjdGVkIGFzeW5jU3Rh dHVzOiAlZFxuIiksCiAgCQkJCQkJCSAgKGludCkgY29ubi0+YXN5bmNTdGF0dXMpOwogIAkJ CXJlcyA9IFBRbWFrZUVtcHR5UEdyZXN1bHQoY29ubiwgUEdSRVNfRkFUQUxfRVJST1IpOwog IAkJCWJyZWFrOwogIAl9CiAgCisgCWlmIChyZXMgJiYgcmVzLT5uRXZlbnRzID4gMCAmJgor IAkJKHJlcy0+cmVzdWx0U3RhdHVzID09IFBHUkVTX0NPTU1BTkRfT0sgfHwKKyAJCSByZXMt PnJlc3VsdFN0YXR1cyA9PSBQR1JFU19UVVBMRVNfT0sgfHwKKyAJCSByZXMtPnJlc3VsdFN0 YXR1cyA9PSBQR1JFU19FTVBUWV9RVUVSWSkpCisgCXsKKyAJCWludCBpOworIAkJUEdFdmVu dFJlc3VsdENyZWF0ZSBldnQ7CisgCisgCQlmb3IgKGkgPSAwOyBpIDwgcmVzLT5uRXZlbnRz OyBpKyspCisgCQl7CisgCQkJZXZ0LmNvbm4gPSBjb25uOworIAkJCWV2dC5yZXN1bHQgPSBy ZXM7CisgCisgCQkJaWYgKCFyZXMtPmV2ZW50c1tpXS5wcm9jKFBHRVZUX1JFU1VMVENSRUFU RSwgJmV2dCwgcmVzLT5ldmVudHNbaV0ucGFzc1Rocm91Z2gpKQorIAkJCXsKKyAJCQkJY2hh ciBtc2dbMjU2XTsKKyAKKyAJCQkJaWYgKHJlcy0+ZXZlbnRzW2ldLm5hbWUpCisgCQkJCQlz cHJpbnRmKG1zZywKKyAJCQkJCQkiUEdFdmVudFByb2MgXCIlc1wiIGZhaWxlZCBkdXJpbmcg UEdFVlRfUkVTVUxUQ1JFQVRFIGV2ZW50IiwKKyAJCQkJCQlyZXMtPmV2ZW50c1tpXS5uYW1l KTsKKyAJCQkJZWxzZQorIAkJCQkJc3ByaW50Zihtc2csCisgCQkJCQkJIlBHRXZlbnRQcm9j IFwiYWRkcjolcFwiIGZhaWxlZCBkdXJpbmcgUEdFVlRfUkVTVUxUQ1JFQVRFIGV2ZW50IiwK KyAJCQkJCQlyZXMtPmV2ZW50c1tpXS5wcm9jKTsKKyAKKyAJCQkJcHFTZXRSZXN1bHRFcnJv cihyZXMsIG1zZyk7CisgCQkJCXJlcy0+cmVzdWx0U3RhdHVzID0gUEdSRVNfRkFUQUxfRVJS T1I7CisgCQkJCWJyZWFrOworIAkJCX0KKyAJCX0KKyAJfQorIAogIAlyZXR1cm4gcmVzOwog IH0KICAKICAKICAvKgogICAqIFBRZXhlYwpJbmRleDogc3JjL2ludGVyZmFjZXMvbGlicHEv bGlicHEtZmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9w Z3NxbC9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjE0MgpkaWZmIC1DNiAtcjEuMTQyIGxpYnBxLWZlLmgKKioqIHNyYy9pbnRlcmZh Y2VzL2xpYnBxL2xpYnBxLWZlLmgJMTkgTWFyIDIwMDggMDA6Mzk6MzMgLTAwMDAJMS4xNDIK LS0tIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgJNSBTZXAgMjAwOCAxOTowMDo1 NyAtMDAwMAoqKioqKioqKioqKioqKioKKioqIDI1LDM2ICoqKioKLS0tIDI1LDQ1IC0tLS0K ICAvKgogICAqIHBvc3RncmVzX2V4dC5oIGRlZmluZXMgdGhlIGJhY2tlbmQncyBleHRlcm5h bGx5IHZpc2libGUgdHlwZXMsCiAgICogc3VjaCBhcyBPaWQuCiAgICovCiAgI2luY2x1ZGUg InBvc3RncmVzX2V4dC5oIgogIAorIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICog T3B0aW9ucyBmb3IgUFFjb3B5UmVzdWx0CisgICovCisgCisgI2RlZmluZSBQR19DT1BZUkVT X0FUVFJTICAgICAgICAgIDB4MDEKKyAjZGVmaW5lIFBHX0NPUFlSRVNfVFVQTEVTICAgICAg ICAgMHgwMiAvKiBJbXBsaWVzIFBHX0NPUFlSRVNfQVRUUlMgKi8KKyAjZGVmaW5lIFBHX0NP UFlSRVNfRVZFTlRTICAgICAgICAgMHgwNAorICNkZWZpbmUgUEdfQ09QWVJFU19OT1RJQ0VI T09LUyAgICAweDA4CisgCiAgLyogQXBwbGljYXRpb24tdmlzaWJsZSBlbnVtIHR5cGVzICov CiAgCiAgdHlwZWRlZiBlbnVtCiAgewogIAkvKgogIAkgKiBBbHRob3VnaCBpdCBpcyBva2F5 IHRvIGFkZCB0byB0aGlzIGxpc3QsIHZhbHVlcyB3aGljaCBiZWNvbWUgdW51c2VkCioqKioq KioqKioqKioqKgoqKiogMTkwLDIwMSAqKioqCi0tLSAxOTksMjI1IC0tLS0KICAJCWludAkJ ICAgKnB0cjsJCS8qIGNhbid0IHVzZSB2b2lkIChkZWMgY29tcGlsZXIgYmFyZnMpCSAqLwog IAkJaW50CQkJaW50ZWdlcjsKICAJfQkJCXU7CiAgfSBQUUFyZ0Jsb2NrOwogIAogIC8qIC0t LS0tLS0tLS0tLS0tLS0KKyAgKiBQR3Jlc0F0dERlc2MgLS0gRGF0YSBhYm91dCBhIHNpbmds ZSBhdHRyaWJ1dGUgKGNvbHVtbikgb2YgYSBxdWVyeSByZXN1bHQKKyAgKiAtLS0tLS0tLS0t LS0tLS0tCisgICovCisgdHlwZWRlZiBzdHJ1Y3QgcGdyZXNBdHREZXNjCisgeworIAljaGFy CSAgICpuYW1lOwkJCS8qIGNvbHVtbiBuYW1lICovCisgCU9pZAkJCXRhYmxlaWQ7CQkvKiBz b3VyY2UgdGFibGUsIGlmIGtub3duICovCisgCWludAkJCWNvbHVtbmlkOwkJLyogc291cmNl IGNvbHVtbiwgaWYga25vd24gKi8KKyAJaW50CQkJZm9ybWF0OwkJCS8qIGZvcm1hdCBjb2Rl IGZvciB2YWx1ZSAodGV4dC9iaW5hcnkpICovCisgCU9pZAkJCXR5cGlkOwkJCS8qIHR5cGUg aWQgKi8KKyAJaW50CQkJdHlwbGVuOwkJCS8qIHR5cGUgc2l6ZSAqLworIAlpbnQJCQlhdHR0 eXBtb2Q7ICAvKiB0eXBlLXNwZWNpZmljIG1vZGlmaWVyIGluZm8gKi8KKyB9IFBHcmVzQXR0 RGVzYzsKKyAKKyAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgICogRXhwb3J0ZWQgZnVuY3Rpb25z IG9mIGxpYnBxCiAgICogLS0tLS0tLS0tLS0tLS0tLQogICAqLwogIAogIC8qID09PQlpbiBm ZS1jb25uZWN0LmMgPT09ICovCiAgCioqKioqKioqKioqKioqKgoqKiogNDM0LDQ0NSAqKioq Ci0tLSA0NTgsNDg3IC0tLS0KICAgKiBNYWtlIGFuIGVtcHR5IFBHcmVzdWx0IHdpdGggZ2l2 ZW4gc3RhdHVzIChzb21lIGFwcHMgZmluZCB0aGlzCiAgICogdXNlZnVsKS4gSWYgY29ubiBp cyBub3QgTlVMTCBhbmQgc3RhdHVzIGluZGljYXRlcyBhbiBlcnJvciwgdGhlCiAgICogY29u bidzIGVycm9yTWVzc2FnZSBpcyBjb3BpZWQuCiAgICovCiAgZXh0ZXJuIFBHcmVzdWx0ICpQ UW1ha2VFbXB0eVBHcmVzdWx0KFBHY29ubiAqY29ubiwgRXhlY1N0YXR1c1R5cGUgc3RhdHVz KTsKICAKKyAvKiBtYWtlcyBhIGNvcHkgb2YgYSByZXN1bHQgKi8KKyBleHRlcm4gUEdyZXN1 bHQgKlBRY29weVJlc3VsdChjb25zdCBQR3Jlc3VsdCAqc3JjLCBpbnQgZmxhZ3MpOworIAor IC8qIFNldHMgdGhlIGF0dHJpYnV0ZXMgb2YgYSByZXN1bHQsIG5vIGF0dHJpYnV0ZXMgY2Fu IGFscmVhZHkgZXhpc3QuICovCisgZXh0ZXJuIGludCBQUXNldFJlc3VsdEF0dHJzKFBHcmVz dWx0ICpyZXMsIGludCBudW1BdHRyaWJ1dGVzLCBQR3Jlc0F0dERlc2MgKmF0dERlc2NzKTsK KyAKKyAvKiBBbGxvY2F0ZSBzdWJzaWRpYXJ5IHN0b3JhZ2UgZm9yIGEgUEdyZXN1bHQuICov CisgZXh0ZXJuIHZvaWQgKlBRcmVzdWx0QWxsb2MoUEdyZXN1bHQgKnJlcywgc2l6ZV90IG5C eXRlcyk7CisgCisgLyoKKyAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSB0dXBsZSBmaWVsZC4g IFRoZSB0dXBfbnVtIG11c3QgYmUgbGVzcyB0aGFuIG9yCisgICogZXF1YWwgdG8gUFFudHVw bGVzKHJlcykuICBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2VuZXJhdGUgdHVwbGVzIGFzIG5lZWRl ZC4KKyAgKiBBIG5ldyB0dXBsZSBpcyBnZW5lcmF0ZWQgd2hlbiB0dXBfbnVtIGVxdWFscyBQ UW50dXBsZXMocmVzKSBhbmQgdGhlcmUKKyAgKiBhcmUgbm8gZmllbGRzIGRlZmluZWQgZm9y IHRoYXQgdHVwbGUuCisgICoKKyAgKiBSZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUgZm9yIHN1 Y2Nlc3MgYW5kIHplcm8gZm9yIGZhaWx1cmUuCisgICovCisgZXh0ZXJuIGludCBQUXNldHZh bHVlKFBHcmVzdWx0ICpyZXMsIGludCB0dXBfbnVtLCBpbnQgZmllbGRfbnVtLCBjaGFyICp2 YWx1ZSwgaW50IGxlbik7CiAgCiAgLyogUXVvdGluZyBzdHJpbmdzIGJlZm9yZSBpbmNsdXNp b24gaW4gcXVlcmllcy4gKi8KICBleHRlcm4gc2l6ZV90IFBRZXNjYXBlU3RyaW5nQ29ubihQ R2Nvbm4gKmNvbm4sCiAgCQkJCSAgIGNoYXIgKnRvLCBjb25zdCBjaGFyICpmcm9tLCBzaXpl X3QgbGVuZ3RoLAogIAkJCQkgICBpbnQgKmVycm9yKTsKICBleHRlcm4gdW5zaWduZWQgY2hh ciAqUFFlc2NhcGVCeXRlYUNvbm4oUEdjb25uICpjb25uLApJbmRleDogc3JjL2ludGVyZmFj ZXMvbGlicHEvbGlicHEtaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Byb2plY3Rz L2N2c3Jvb3QvcGdzcWwvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmgsdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMTMxCmRpZmYgLUM2IC1yMS4xMzEgbGlicHEtaW50LmgKKioq IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCTI5IE1heSAyMDA4IDIyOjAyOjQ0 IC0wMDAwCTEuMTMxCi0tLSBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaAk1IFNl cCAyMDA4IDE5OjAwOjU3IC0wMDAwCioqKioqKioqKioqKioqKgoqKiogMTksMzAgKioqKgot LS0gMTksMzEgLS0tLQogIAogICNpZm5kZWYgTElCUFFfSU5UX0gKICAjZGVmaW5lIExJQlBR X0lOVF9ICiAgCiAgLyogV2UgYXNzdW1lIGxpYnBxLWZlLmggaGFzIGFscmVhZHkgYmVlbiBp bmNsdWRlZC4gKi8KICAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyAjaW5jbHVkZSAibGli cHEtZXZlbnRzLmgiCiAgCiAgI2luY2x1ZGUgPHRpbWUuaD4KICAjaW5jbHVkZSA8c3lzL3R5 cGVzLmg+CiAgI2lmbmRlZiBXSU4zMgogICNpbmNsdWRlIDxzeXMvdGltZS5oPgogICNlbmRp ZgoqKioqKioqKioqKioqKioKKioqIDk3LDEyMSAqKioqCiAgdW5pb24gcGdyZXN1bHRfZGF0 YQogIHsKICAJUEdyZXN1bHRfZGF0YSAqbmV4dDsJCS8qIGxpbmsgdG8gbmV4dCBibG9jaywg b3IgTlVMTCAqLwogIAljaGFyCQlzcGFjZVsxXTsJCS8qIGR1bW15IGZvciBhY2Nlc3Npbmcg YmxvY2sgYXMgYnl0ZXMgKi8KICB9OwogIAotIC8qIERhdGEgYWJvdXQgYSBzaW5nbGUgYXR0 cmlidXRlIChjb2x1bW4pIG9mIGEgcXVlcnkgcmVzdWx0ICovCi0gCi0gdHlwZWRlZiBzdHJ1 Y3QgcGdyZXNBdHREZXNjCi0gewotIAljaGFyCSAgICpuYW1lOwkJCS8qIGNvbHVtbiBuYW1l ICovCi0gCU9pZAkJCXRhYmxlaWQ7CQkvKiBzb3VyY2UgdGFibGUsIGlmIGtub3duICovCi0g CWludAkJCWNvbHVtbmlkOwkJLyogc291cmNlIGNvbHVtbiwgaWYga25vd24gKi8KLSAJaW50 CQkJZm9ybWF0OwkJCS8qIGZvcm1hdCBjb2RlIGZvciB2YWx1ZSAodGV4dC9iaW5hcnkpICov Ci0gCU9pZAkJCXR5cGlkOwkJCS8qIHR5cGUgaWQgKi8KLSAJaW50CQkJdHlwbGVuOwkJCS8q IHR5cGUgc2l6ZSAqLwotIAlpbnQJCQlhdHR0eXBtb2Q7CQkvKiB0eXBlLXNwZWNpZmljIG1v ZGlmaWVyIGluZm8gKi8KLSB9IFBHcmVzQXR0RGVzYzsKLSAKICAvKiBEYXRhIGFib3V0IGEg c2luZ2xlIHBhcmFtZXRlciBvZiBhIHByZXBhcmVkIHN0YXRlbWVudCAqLwogIHR5cGVkZWYg c3RydWN0IHBncmVzUGFyYW1EZXNjCiAgewogIAlPaWQJCQl0eXBpZDsJCQkvKiB0eXBlIGlk ICovCiAgfSBQR3Jlc1BhcmFtRGVzYzsKICAKLS0tIDk4LDEwOSAtLS0tCioqKioqKioqKioq KioqKgoqKiogMTU5LDE3MCAqKioqCi0tLSAxNDcsMTY2IC0tLS0KICAJUFFub3RpY2VSZWNl aXZlciBub3RpY2VSZWM7IC8qIG5vdGljZSBtZXNzYWdlIHJlY2VpdmVyICovCiAgCXZvaWQJ ICAgKm5vdGljZVJlY0FyZzsKICAJUFFub3RpY2VQcm9jZXNzb3Igbm90aWNlUHJvYzsJCS8q IG5vdGljZSBtZXNzYWdlIHByb2Nlc3NvciAqLwogIAl2b2lkCSAgICpub3RpY2VQcm9jQXJn OwogIH0gUEdOb3RpY2VIb29rczsKICAKKyB0eXBlZGVmIHN0cnVjdAorIHsKKyAJY2hhcgkg ICAqbmFtZTsJLyogZm9yIGVycm9yIG1lc3NhZ2VzICovCisgCXZvaWQJICAgKnBhc3NUaHJv dWdoOyAvKiBwb2ludGVyIHN1cHBsaWVkIGJ5IHVzZXIgKi8KKyAJdm9pZAkgICAqZGF0YTsg Lyogc3RhdGUgKGluc3RhbmNlKSBkYXRhLCBvcHRpb25hbGx5IGdlbmVyYXRlZCBieSBldmVu dCBwcm9jICovCisgCVBHRXZlbnRQcm9jIHByb2M7IC8qIHRoZSBmdW5jdGlvbiB0byBjYWxs IG9uIGV2ZW50cyAqLworIH0gUEdFdmVudDsKKyAKICBzdHJ1Y3QgcGdfcmVzdWx0CiAgewog IAlpbnQJCQludHVwczsKICAJaW50CQkJbnVtQXR0cmlidXRlczsKICAJUEdyZXNBdHREZXNj ICphdHREZXNjczsKICAJUEdyZXNBdHRWYWx1ZSAqKnR1cGxlczsJCS8qIGVhY2ggUEdyZXNU dXBsZSBpcyBhbiBhcnJheSBvZgoqKioqKioqKioqKioqKioKKioqIDE4MSwxOTIgKioqKgot LS0gMTc3LDE5MiAtLS0tCiAgCSAqIFRoZXNlIGZpZWxkcyBhcmUgY29waWVkIGZyb20gdGhl IG9yaWdpbmF0aW5nIFBHY29ubiwgc28gdGhhdCBvcGVyYXRpb25zCiAgCSAqIG9uIHRoZSBQ R3Jlc3VsdCBkb24ndCBoYXZlIHRvIHJlZmVyZW5jZSB0aGUgUEdjb25uLgogIAkgKi8KICAJ UEdOb3RpY2VIb29rcyBub3RpY2VIb29rczsKICAJaW50CQkJY2xpZW50X2VuY29kaW5nOwkv KiBlbmNvZGluZyBpZCAqLwogIAorIAkvKiByZWdpc3RlcmVkIGV2ZW50cywgY29waWVkIGZy b20gY29ubiAqLworIAlpbnQgbkV2ZW50czsKKyAJUEdFdmVudCAqZXZlbnRzOworIAogIAkv KgogIAkgKiBFcnJvciBpbmZvcm1hdGlvbiAoYWxsIE5VTEwgaWYgbm90IGFuIGVycm9yIHJl c3VsdCkuICBlcnJNc2cgaXMgdGhlCiAgCSAqICJvdmVyYWxsIiBlcnJvciBtZXNzYWdlIHJl dHVybmVkIGJ5IFBRcmVzdWx0RXJyb3JNZXNzYWdlLiAgSWYgd2UgaGF2ZQogIAkgKiBwZXIt ZmllbGQgaW5mbyB0aGVuIGl0IGlzIHN0b3JlZCBpbiBhIGxpbmtlZCBsaXN0LgogIAkgKi8K ICAJY2hhcgkgICAqZXJyTXNnOwkJCS8qIGVycm9yIG1lc3NhZ2UsIG9yIE5VTEwgaWYgbm8g ZXJyb3IgKi8KKioqKioqKioqKioqKioqCioqKiAzMDAsMzExICoqKioKLS0tIDMwMCwzMTYg LS0tLQogIAkvKiBPcHRpb25hbCBmaWxlIHRvIHdyaXRlIHRyYWNlIGluZm8gdG8gKi8KICAJ RklMRQkgICAqUGZkZWJ1ZzsKICAKICAJLyogQ2FsbGJhY2sgcHJvY2VkdXJlcyBmb3Igbm90 aWNlIG1lc3NhZ2UgcHJvY2Vzc2luZyAqLwogIAlQR05vdGljZUhvb2tzIG5vdGljZUhvb2tz OwogIAorIAkvKiByZWdpc3RlcmVkIGV2ZW50cyB2aWEgUFFyZWdpc3RlckV2ZW50UHJvYyAq LworIAlpbnQgbkV2ZW50czsKKyAJaW50IGV2ZW50QXJyU2l6ZTsKKyAJUEdFdmVudCAqZXZl bnRzOworIAogIAkvKiBTdGF0dXMgaW5kaWNhdG9ycyAqLwogIAlDb25uU3RhdHVzVHlwZSBz dGF0dXM7CiAgCVBHQXN5bmNTdGF0dXNUeXBlIGFzeW5jU3RhdHVzOwogIAlQR1RyYW5zYWN0 aW9uU3RhdHVzVHlwZSB4YWN0U3RhdHVzOyAvKiBuZXZlciBjaGFuZ2VzIHRvIEFDVElWRSAq LwogIAlQR1F1ZXJ5Q2xhc3MgcXVlcnljbGFzczsKICAJY2hhcgkgICAqbGFzdF9xdWVyeTsJ CS8qIGxhc3QgU1FMIGNvbW1hbmQsIG9yIE5VTEwgaWYgdW5rbm93biAqLwo= --------------040001010206070103060003--