From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 8886948291 for ; Wed, 15 Nov 2023 20:39:00 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3439468CBFE; Wed, 15 Nov 2023 22:38:58 +0200 (EET) Received: from mail-vs1-f53.google.com (mail-vs1-f53.google.com [209.85.217.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4B7F568CAEE for ; Wed, 15 Nov 2023 22:38:51 +0200 (EET) Received: by mail-vs1-f53.google.com with SMTP id ada2fe7eead31-45d8c405696so8699137.3 for ; Wed, 15 Nov 2023 12:38:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700080729; x=1700685529; darn=ffmpeg.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=z+xm6FfTWlcycNer5K0IkT8s3Lc1lcFyU8zDMl23xoM=; b=UQCZ+6vEukdOMG2/hdoOovIFpIMiQLsLVu6tXPlrmNhlT3nnGJvs3HpweAeXJBdfFd Wvis9Vr48cBr5M399Btx151WAql2ao60Toc7Fzr2RRH0LPCXWT7QGaxfWbo0ecLehmmi w1hxC/KitOwmpSApvkmM3cdWW3H05y3HqbWPU6UWbznEMlmsLvqg9lyZWvqZgkUUAS3v tpKQjyHHAIupccEjN78k7eAPdZESbrB5Lh+rmJ4nYgIyXNCeTJNoiSX5qeGXqR9STKNI 0NCNP338YZJ5kI54qTvLPlhewSgJzuSGBu7HCtbg/iS0ow037QzoAHwzKRAKlx6gXWI+ aFaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700080729; x=1700685529; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=z+xm6FfTWlcycNer5K0IkT8s3Lc1lcFyU8zDMl23xoM=; b=GRKD4OaavYM4ADE6BpJERLLCyYx0Vk1rm0wDF1n0bAybvbP/4ID1iFbInvjv003JgM BdhTovRY0wh+HagrME7LvTRjRvRzJFk4KQuQDvgQq/31b678o0OLeXd2iaCx/3YrKlAM TxpFkIefd4QssURXlsv10RYeHxXMYaEOTTMEJotnp1KCqVjiavtRd7syQIULOkojCnDx VEl9wHJKlqt9w5GpFoQdlbd2py8H2XaJR5QjaEF0qaQj5bl65972sj+BuYeuGD6UZs7f M2TVGFugnlr1a+BnmQfAF/sx4NMyvbiOd1dysWo7+FezkSBUWtwomWt/irhd2J4lkVxt HA0A== X-Gm-Message-State: AOJu0YySEjyeWK/XqyycZEJ+gHN3DTH2YhPdyxmBycr68s0uJ6wuecsd gDM+2VN3sqGAxG1jdQIjBSfhxP/uxrkcQ9dTKOfnic/T X-Google-Smtp-Source: AGHT+IFaBTo+ELsPYJ88hAw0Y0hvVQOZUNfW7OX5iP9QT1SWXvxDkNndRIzt3IpgRXdjbtrABAQP9RG6pCKBvn7rEzE= X-Received: by 2002:a67:cc16:0:b0:45c:c42d:87cb with SMTP id q22-20020a67cc16000000b0045cc42d87cbmr13482199vsl.24.1700080728992; Wed, 15 Nov 2023 12:38:48 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Paul B Mahol Date: Wed, 15 Nov 2023 21:46:54 +0100 Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="000000000000f1370f060a36e39f" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH] avfilter: merge loudnorm filter functionality into f_ebur128.c X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --000000000000f1370f060a36e39f Content-Type: text/plain; charset="UTF-8" Attached. --000000000000f1370f060a36e39f Content-Type: text/x-patch; charset="UTF-8"; name="0001-avfilter-merge-loudnorm-filter-functionality-into-f_.patch" Content-Disposition: attachment; filename="0001-avfilter-merge-loudnorm-filter-functionality-into-f_.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lp08fx150 RnJvbSA0MzMyOTZkOGFhZjJkZTA2YTM0YTFmN2RlYWFjYTcyYzI1Yzg5NjJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEIgTWFob2wgPG9uZW1kYUBnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjkgU2VwIDIwMjMgMjA6NTM6NTEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBhdmZpbHRl cjogbWVyZ2UgbG91ZG5vcm0gZmlsdGVyIGZ1bmN0aW9uYWxpdHkgaW50bwogZl9lYnVyMTI4LmMK ClNpZ25lZC1vZmYtYnk6IFBhdWwgQiBNYWhvbCA8b25lbWRhQGdtYWlsLmNvbT4KLS0tCiBsaWJh dmZpbHRlci9NYWtlZmlsZSAgICAgIHwgICAxIC0KIGxpYmF2ZmlsdGVyL2FmX2xvdWRub3JtLmMg fCA5NDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpYmF2ZmlsdGVy L2VidXIxMjguYyAgICAgfCA3MjUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpYmF2 ZmlsdGVyL2VidXIxMjguaCAgICAgfCAyMjkgLS0tLS0tLS0tLQogbGliYXZmaWx0ZXIvZl9lYnVy MTI4LmMgICB8IDkxNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIDUgZmls ZXMgY2hhbmdlZCwgNzUyIGluc2VydGlvbnMoKyksIDIwNTggZGVsZXRpb25zKC0pCiBkZWxldGUg bW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvYWZfbG91ZG5vcm0uYwogZGVsZXRlIG1vZGUgMTAwNjQ0 IGxpYmF2ZmlsdGVyL2VidXIxMjguYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL2Vi dXIxMjguaAoKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlIGIvbGliYXZmaWx0ZXIv TWFrZWZpbGUKaW5kZXggYWJkYzQzMDcyMy4uMjYzMjU2MDNhYiAxMDA2NDQKLS0tIGEvbGliYXZm aWx0ZXIvTWFrZWZpbGUKKysrIGIvbGliYXZmaWx0ZXIvTWFrZWZpbGUKQEAgLTE1MCw3ICsxNTAs NiBAQCBPQkpTLSQoQ09ORklHX0hJR0hQQVNTX0ZJTFRFUikgICAgICAgICAgICAgICArPSBhZl9i aXF1YWRzLm8KIE9CSlMtJChDT05GSUdfSElHSFNIRUxGX0ZJTFRFUikgICAgICAgICAgICAgICs9 IGFmX2JpcXVhZHMubwogT0JKUy0kKENPTkZJR19KT0lOX0ZJTFRFUikgICAgICAgICAgICAgICAg ICAgKz0gYWZfam9pbi5vCiBPQkpTLSQoQ09ORklHX0xBRFNQQV9GSUxURVIpICAgICAgICAgICAg ICAgICArPSBhZl9sYWRzcGEubwotT0JKUy0kKENPTkZJR19MT1VETk9STV9GSUxURVIpICAgICAg ICAgICAgICAgKz0gYWZfbG91ZG5vcm0ubyBlYnVyMTI4Lm8KIE9CSlMtJChDT05GSUdfTE9XUEFT U19GSUxURVIpICAgICAgICAgICAgICAgICs9IGFmX2JpcXVhZHMubwogT0JKUy0kKENPTkZJR19M T1dTSEVMRl9GSUxURVIpICAgICAgICAgICAgICAgKz0gYWZfYmlxdWFkcy5vCiBPQkpTLSQoQ09O RklHX0xWMl9GSUxURVIpICAgICAgICAgICAgICAgICAgICArPSBhZl9sdjIubwpkaWZmIC0tZ2l0 IGEvbGliYXZmaWx0ZXIvYWZfbG91ZG5vcm0uYyBiL2xpYmF2ZmlsdGVyL2FmX2xvdWRub3JtLmMK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MzM5OGFlMmEuLjAwMDAwMDAwMDAKLS0t IGEvbGliYXZmaWx0ZXIvYWZfbG91ZG5vcm0uYworKysgL2Rldi9udWxsCkBAIC0xLDk0MSArMCww IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2IEt5bGUgU3dhbnNvbiA8a0B5bG8ucGg+Lgot ICoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK LSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK LSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0vKiBodHRwOi8vay55bG8u cGgvMjAxNi8wNC8wNC9sb3Vkbm9ybS5odG1sICovCi0KLSNpbmNsdWRlICJsaWJhdnV0aWwvb3B0 LmgiCi0jaW5jbHVkZSAiYXZmaWx0ZXIuaCIKLSNpbmNsdWRlICJmaWx0ZXJzLmgiCi0jaW5jbHVk ZSAiZm9ybWF0cy5oIgotI2luY2x1ZGUgImludGVybmFsLmgiCi0jaW5jbHVkZSAiYXVkaW8uaCIK LSNpbmNsdWRlICJlYnVyMTI4LmgiCi0KLWVudW0gRnJhbWVUeXBlIHsKLSAgICBGSVJTVF9GUkFN RSwKLSAgICBJTk5FUl9GUkFNRSwKLSAgICBGSU5BTF9GUkFNRSwKLSAgICBMSU5FQVJfTU9ERSwK LSAgICBGUkFNRV9OQgotfTsKLQotZW51bSBMaW1pdGVyU3RhdGUgewotICAgIE9VVCwKLSAgICBB VFRBQ0ssCi0gICAgU1VTVEFJTiwKLSAgICBSRUxFQVNFLAotICAgIFNUQVRFX05CCi19OwotCi1l bnVtIFByaW50Rm9ybWF0IHsKLSAgICBOT05FLAotICAgIEpTT04sCi0gICAgU1VNTUFSWSwKLSAg ICBQRl9OQgotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgTG91ZE5vcm1Db250ZXh0IHsKLSAgICBjb25z dCBBVkNsYXNzICpjbGFzczsKLSAgICBkb3VibGUgdGFyZ2V0X2k7Ci0gICAgZG91YmxlIHRhcmdl dF9scmE7Ci0gICAgZG91YmxlIHRhcmdldF90cDsKLSAgICBkb3VibGUgbWVhc3VyZWRfaTsKLSAg ICBkb3VibGUgbWVhc3VyZWRfbHJhOwotICAgIGRvdWJsZSBtZWFzdXJlZF90cDsKLSAgICBkb3Vi bGUgbWVhc3VyZWRfdGhyZXNoOwotICAgIGRvdWJsZSBvZmZzZXQ7Ci0gICAgaW50IGxpbmVhcjsK LSAgICBpbnQgZHVhbF9tb25vOwotICAgIGVudW0gUHJpbnRGb3JtYXQgcHJpbnRfZm9ybWF0Owot Ci0gICAgZG91YmxlICpidWY7Ci0gICAgaW50IGJ1Zl9zaXplOwotICAgIGludCBidWZfaW5kZXg7 Ci0gICAgaW50IHByZXZfYnVmX2luZGV4OwotCi0gICAgZG91YmxlIGRlbHRhWzMwXTsKLSAgICBk b3VibGUgd2VpZ2h0c1syMV07Ci0gICAgZG91YmxlIHByZXZfZGVsdGE7Ci0gICAgaW50IGluZGV4 OwotCi0gICAgZG91YmxlIGdhaW5fcmVkdWN0aW9uWzJdOwotICAgIGRvdWJsZSAqbGltaXRlcl9i dWY7Ci0gICAgZG91YmxlICpwcmV2X3NtcDsKLSAgICBpbnQgbGltaXRlcl9idWZfaW5kZXg7Ci0g ICAgaW50IGxpbWl0ZXJfYnVmX3NpemU7Ci0gICAgZW51bSBMaW1pdGVyU3RhdGUgbGltaXRlcl9z dGF0ZTsKLSAgICBpbnQgcGVha19pbmRleDsKLSAgICBpbnQgZW52X2luZGV4OwotICAgIGludCBl bnZfY250OwotICAgIGludCBhdHRhY2tfbGVuZ3RoOwotICAgIGludCByZWxlYXNlX2xlbmd0aDsK LQotICAgIGludDY0X3QgcHRzWzMwXTsKLSAgICBlbnVtIEZyYW1lVHlwZSBmcmFtZV90eXBlOwot ICAgIGludCBhYm92ZV90aHJlc2hvbGQ7Ci0gICAgaW50IHByZXZfbmJfc2FtcGxlczsKLSAgICBp bnQgY2hhbm5lbHM7Ci0KLSAgICBGRkVCVVIxMjhTdGF0ZSAqcjEyOF9pbjsKLSAgICBGRkVCVVIx MjhTdGF0ZSAqcjEyOF9vdXQ7Ci19IExvdWROb3JtQ29udGV4dDsKLQotI2RlZmluZSBPRkZTRVQo eCkgb2Zmc2V0b2YoTG91ZE5vcm1Db250ZXh0LCB4KQotI2RlZmluZSBGTEFHUyBBVl9PUFRfRkxB R19BVURJT19QQVJBTXxBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0KLQotc3RhdGljIGNvbnN0 IEFWT3B0aW9uIGxvdWRub3JtX29wdGlvbnNbXSA9IHsKLSAgICB7ICJJIiwgICAgICAgICAgICAg ICAgInNldCBpbnRlZ3JhdGVkIGxvdWRuZXNzIHRhcmdldCIsICAgIE9GRlNFVCh0YXJnZXRfaSks ICAgICAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAtMjQufSwgICAtNzAuLCAgICAg ICAtNS4sICBGTEFHUyB9LAotICAgIHsgImkiLCAgICAgICAgICAgICAgICAic2V0IGludGVncmF0 ZWQgbG91ZG5lc3MgdGFyZ2V0IiwgICAgT0ZGU0VUKHRhcmdldF9pKSwgICAgICAgICBBVl9PUFRf VFlQRV9ET1VCTEUsICB7LmRibCA9IC0yNC59LCAgIC03MC4sICAgICAgIC01LiwgIEZMQUdTIH0s Ci0gICAgeyAiTFJBIiwgICAgICAgICAgICAgICJzZXQgbG91ZG5lc3MgcmFuZ2UgdGFyZ2V0Iiwg ICAgICAgICBPRkZTRVQodGFyZ2V0X2xyYSksICAgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsu ZGJsID0gIDcufSwgICAgIDEuLCAgICAgICAgNTAuLCAgRkxBR1MgfSwKLSAgICB7ICJscmEiLCAg ICAgICAgICAgICAgInNldCBsb3VkbmVzcyByYW5nZSB0YXJnZXQiLCAgICAgICAgIE9GRlNFVCh0 YXJnZXRfbHJhKSwgICAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAgNy59LCAgICAg MS4sICAgICAgICA1MC4sICBGTEFHUyB9LAotICAgIHsgIlRQIiwgICAgICAgICAgICAgICAic2V0 IG1heGltdW0gdHJ1ZSBwZWFrIiwgICAgICAgICAgICAgT0ZGU0VUKHRhcmdldF90cCksICAgICAg ICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9IC0yLn0sICAgIC05LiwgICAgICAgICAwLiwg IEZMQUdTIH0sCi0gICAgeyAidHAiLCAgICAgICAgICAgICAgICJzZXQgbWF4aW11bSB0cnVlIHBl YWsiLCAgICAgICAgICAgICBPRkZTRVQodGFyZ2V0X3RwKSwgICAgICAgIEFWX09QVF9UWVBFX0RP VUJMRSwgIHsuZGJsID0gLTIufSwgICAgLTkuLCAgICAgICAgIDAuLCAgRkxBR1MgfSwKLSAgICB7 ICJtZWFzdXJlZF9JIiwgICAgICAgIm1lYXN1cmVkIElMIG9mIGlucHV0IGZpbGUiLCAgICAgICAg IE9GRlNFVChtZWFzdXJlZF9pKSwgICAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAg MC59LCAgICAtOTkuLCAgICAgICAgMC4sICBGTEFHUyB9LAotICAgIHsgIm1lYXN1cmVkX2kiLCAg ICAgICAibWVhc3VyZWQgSUwgb2YgaW5wdXQgZmlsZSIsICAgICAgICAgT0ZGU0VUKG1lYXN1cmVk X2kpLCAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9ICAwLn0sICAgIC05OS4sICAg ICAgICAwLiwgIEZMQUdTIH0sCi0gICAgeyAibWVhc3VyZWRfTFJBIiwgICAgICJtZWFzdXJlZCBM UkEgb2YgaW5wdXQgZmlsZSIsICAgICAgICBPRkZTRVQobWVhc3VyZWRfbHJhKSwgICAgIEFWX09Q VF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gIDAufSwgICAgIDAuLCAgICAgICAgOTkuLCAgRkxBR1Mg fSwKLSAgICB7ICJtZWFzdXJlZF9scmEiLCAgICAgIm1lYXN1cmVkIExSQSBvZiBpbnB1dCBmaWxl IiwgICAgICAgIE9GRlNFVChtZWFzdXJlZF9scmEpLCAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAg ey5kYmwgPSAgMC59LCAgICAgMC4sICAgICAgICA5OS4sICBGTEFHUyB9LAotICAgIHsgIm1lYXN1 cmVkX1RQIiwgICAgICAibWVhc3VyZWQgdHJ1ZSBwZWFrIG9mIGlucHV0IGZpbGUiLCAgT0ZGU0VU KG1lYXN1cmVkX3RwKSwgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9ICA5OS59LCAg IC05OS4sICAgICAgIDk5LiwgIEZMQUdTIH0sCi0gICAgeyAibWVhc3VyZWRfdHAiLCAgICAgICJt ZWFzdXJlZCB0cnVlIHBlYWsgb2YgaW5wdXQgZmlsZSIsICBPRkZTRVQobWVhc3VyZWRfdHApLCAg ICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gIDk5Ln0sICAgLTk5LiwgICAgICAgOTku LCAgRkxBR1MgfSwKLSAgICB7ICJtZWFzdXJlZF90aHJlc2giLCAgIm1lYXN1cmVkIHRocmVzaG9s ZCBvZiBpbnB1dCBmaWxlIiwgIE9GRlNFVChtZWFzdXJlZF90aHJlc2gpLCAgQVZfT1BUX1RZUEVf RE9VQkxFLCAgey5kYmwgPSAtNzAufSwgICAtOTkuLCAgICAgICAgMC4sICBGTEFHUyB9LAotICAg IHsgIm9mZnNldCIsICAgICAgICAgICAic2V0IG9mZnNldCBnYWluIiwgICAgICAgICAgICAgICAg ICAgT0ZGU0VUKG9mZnNldCksICAgICAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9 ICAwLn0sICAgIC05OS4sICAgICAgIDk5LiwgIEZMQUdTIH0sCi0gICAgeyAibGluZWFyIiwgICAg ICAgICAgICJub3JtYWxpemUgbGluZWFybHkgaWYgcG9zc2libGUiLCAgICBPRkZTRVQobGluZWFy KSwgICAgICAgICAgIEFWX09QVF9UWVBFX0JPT0wsICAgIHsuaTY0ID0gIDF9LCAgICAgICAgMCwg ICAgICAgICAxLCAgRkxBR1MgfSwKLSAgICB7ICJkdWFsX21vbm8iLCAgICAgICAgInRyZWF0IG1v bm8gaW5wdXQgYXMgZHVhbC1tb25vIiwgICAgIE9GRlNFVChkdWFsX21vbm8pLCAgICAgICAgQVZf T1BUX1RZUEVfQk9PTCwgICAgey5pNjQgPSAgMH0sICAgICAgICAwLCAgICAgICAgIDEsICBGTEFH UyB9LAotICAgIHsgInByaW50X2Zvcm1hdCIsICAgICAic2V0IHByaW50IGZvcm1hdCBmb3Igc3Rh dHMiLCAgICAgICAgT0ZGU0VUKHByaW50X2Zvcm1hdCksICAgICBBVl9PUFRfVFlQRV9JTlQsICAg ICB7Lmk2NCA9ICBOT05FfSwgIE5PTkUsICBQRl9OQiAtMSwgIEZMQUdTLCAicHJpbnRfZm9ybWF0 IiB9LAotICAgIHsgICAgICJub25lIiwgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwg ICB7Lmk2NCA9ICBOT05FfSwgICAgIDAsICAgICAgICAgMCwgIEZMQUdTLCAicHJpbnRfZm9ybWF0 IiB9LAotICAgIHsgICAgICJqc29uIiwgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwg ICB7Lmk2NCA9ICBKU09OfSwgICAgIDAsICAgICAgICAgMCwgIEZMQUdTLCAicHJpbnRfZm9ybWF0 IiB9LAotICAgIHsgICAgICJzdW1tYXJ5IiwgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwg ICB7Lmk2NCA9ICBTVU1NQVJZfSwgIDAsICAgICAgICAgMCwgIEZMQUdTLCAicHJpbnRfZm9ybWF0 IiB9LAotICAgIHsgTlVMTCB9Ci19OwotCi1BVkZJTFRFUl9ERUZJTkVfQ0xBU1MobG91ZG5vcm0p OwotCi1zdGF0aWMgaW5saW5lIGludCBmcmFtZV9zaXplKGludCBzYW1wbGVfcmF0ZSwgaW50IGZy YW1lX2xlbl9tc2VjKQotewotICAgIGNvbnN0IGludCBmcmFtZV9zaXplID0gcm91bmQoKGRvdWJs ZSlzYW1wbGVfcmF0ZSAqIChmcmFtZV9sZW5fbXNlYyAvIDEwMDAuMCkpOwotICAgIHJldHVybiBm cmFtZV9zaXplICsgKGZyYW1lX3NpemUgJSAyKTsKLX0KLQotc3RhdGljIHZvaWQgaW5pdF9nYXVz c2lhbl9maWx0ZXIoTG91ZE5vcm1Db250ZXh0ICpzKQotewotICAgIGRvdWJsZSB0b3RhbF93ZWln aHQgPSAwLjA7Ci0gICAgY29uc3QgZG91YmxlIHNpZ21hID0gMy41OwotICAgIGRvdWJsZSBhZGp1 c3Q7Ci0gICAgaW50IGk7Ci0KLSAgICBjb25zdCBpbnQgb2Zmc2V0ID0gMjEgLyAyOwotICAgIGNv bnN0IGRvdWJsZSBjMSA9IDEuMCAvIChzaWdtYSAqIHNxcnQoMi4wICogTV9QSSkpOwotICAgIGNv bnN0IGRvdWJsZSBjMiA9IDIuMCAqIHBvdyhzaWdtYSwgMi4wKTsKLQotICAgIGZvciAoaSA9IDA7 IGkgPCAyMTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IGludCB4ID0gaSAtIG9mZnNldDsKLSAgICAg ICAgcy0+d2VpZ2h0c1tpXSA9IGMxICogZXhwKC0ocG93KHgsIDIuMCkgLyBjMikpOwotICAgICAg ICB0b3RhbF93ZWlnaHQgKz0gcy0+d2VpZ2h0c1tpXTsKLSAgICB9Ci0KLSAgICBhZGp1c3QgPSAx LjAgLyB0b3RhbF93ZWlnaHQ7Ci0gICAgZm9yIChpID0gMDsgaSA8IDIxOyBpKyspCi0gICAgICAg IHMtPndlaWdodHNbaV0gKj0gYWRqdXN0OwotfQotCi1zdGF0aWMgZG91YmxlIGdhdXNzaWFuX2Zp bHRlcihMb3VkTm9ybUNvbnRleHQgKnMsIGludCBpbmRleCkKLXsKLSAgICBkb3VibGUgcmVzdWx0 ID0gMC47Ci0gICAgaW50IGk7Ci0KLSAgICBpbmRleCA9IGluZGV4IC0gMTAgPiAwID8gaW5kZXgg LSAxMCA6IGluZGV4ICsgMjA7Ci0gICAgZm9yIChpID0gMDsgaSA8IDIxOyBpKyspCi0gICAgICAg IHJlc3VsdCArPSBzLT5kZWx0YVsoKGluZGV4ICsgaSkgPCAzMCkgPyAoaW5kZXggKyBpKSA6IChp bmRleCArIGkgLSAzMCldICogcy0+d2VpZ2h0c1tpXTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19 Ci0KLXN0YXRpYyB2b2lkIGRldGVjdF9wZWFrKExvdWROb3JtQ29udGV4dCAqcywgaW50IG9mZnNl dCwgaW50IG5iX3NhbXBsZXMsIGludCBjaGFubmVscywgaW50ICpwZWFrX2RlbHRhLCBkb3VibGUg KnBlYWtfdmFsdWUpCi17Ci0gICAgaW50IG4sIGMsIGksIGluZGV4OwotICAgIGRvdWJsZSBjZWls aW5nOwotICAgIGRvdWJsZSAqYnVmOwotCi0gICAgKnBlYWtfZGVsdGEgPSAtMTsKLSAgICBidWYg PSBzLT5saW1pdGVyX2J1ZjsKLSAgICBjZWlsaW5nID0gcy0+dGFyZ2V0X3RwOwotCi0gICAgaW5k ZXggPSBzLT5saW1pdGVyX2J1Zl9pbmRleCArIChvZmZzZXQgKiBjaGFubmVscykgKyAoMTkyMCAq IGNoYW5uZWxzKTsKLSAgICBpZiAoaW5kZXggPj0gcy0+bGltaXRlcl9idWZfc2l6ZSkKLSAgICAg ICAgaW5kZXggLT0gcy0+bGltaXRlcl9idWZfc2l6ZTsKLQotICAgIGlmIChzLT5mcmFtZV90eXBl ID09IEZJUlNUX0ZSQU1FKSB7Ci0gICAgICAgIGZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysr KQotICAgICAgICAgICAgcy0+cHJldl9zbXBbY10gPSBmYWJzKGJ1ZltpbmRleCArIGMgLSBjaGFu bmVsc10pOwotICAgIH0KLQotICAgIGZvciAobiA9IDA7IG4gPCBuYl9zYW1wbGVzOyBuKyspIHsK LSAgICAgICAgZm9yIChjID0gMDsgYyA8IGNoYW5uZWxzOyBjKyspIHsKLSAgICAgICAgICAgIGRv dWJsZSB0aGlzLCBuZXh0LCBtYXhfcGVhazsKLQotICAgICAgICAgICAgdGhpcyA9IGZhYnMoYnVm WyhpbmRleCArIGMpIDwgcy0+bGltaXRlcl9idWZfc2l6ZSA/IChpbmRleCArIGMpIDogKGluZGV4 ICsgYyAtIHMtPmxpbWl0ZXJfYnVmX3NpemUpXSk7Ci0gICAgICAgICAgICBuZXh0ID0gZmFicyhi dWZbKGluZGV4ICsgYyArIGNoYW5uZWxzKSA8IHMtPmxpbWl0ZXJfYnVmX3NpemUgPyAoaW5kZXgg KyBjICsgY2hhbm5lbHMpIDogKGluZGV4ICsgYyArIGNoYW5uZWxzIC0gcy0+bGltaXRlcl9idWZf c2l6ZSldKTsKLQotICAgICAgICAgICAgaWYgKChzLT5wcmV2X3NtcFtjXSA8PSB0aGlzKSAmJiAo bmV4dCA8PSB0aGlzKSAmJiAodGhpcyA+IGNlaWxpbmcpICYmIChuID4gMCkpIHsKLSAgICAgICAg ICAgICAgICBpbnQgZGV0ZWN0ZWQ7Ci0KLSAgICAgICAgICAgICAgICBkZXRlY3RlZCA9IDE7Ci0g ICAgICAgICAgICAgICAgZm9yIChpID0gMjsgaSA8IDEyOyBpKyspIHsKLSAgICAgICAgICAgICAg ICAgICAgbmV4dCA9IGZhYnMoYnVmWyhpbmRleCArIGMgKyAoaSAqIGNoYW5uZWxzKSkgPCBzLT5s aW1pdGVyX2J1Zl9zaXplID8gKGluZGV4ICsgYyArIChpICogY2hhbm5lbHMpKSA6IChpbmRleCAr IGMgKyAoaSAqIGNoYW5uZWxzKSAtIHMtPmxpbWl0ZXJfYnVmX3NpemUpXSk7Ci0gICAgICAgICAg ICAgICAgICAgIGlmIChuZXh0ID4gdGhpcykgewotICAgICAgICAgICAgICAgICAgICAgICAgZGV0 ZWN0ZWQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWRldGVj dGVkKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIGZv ciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj ID09IDAgfHwgZmFicyhidWZbaW5kZXggKyBjXSkgPiBtYXhfcGVhaykKLSAgICAgICAgICAgICAg ICAgICAgICAgIG1heF9wZWFrID0gZmFicyhidWZbaW5kZXggKyBjXSk7Ci0KLSAgICAgICAgICAg ICAgICAgICAgcy0+cHJldl9zbXBbY10gPSBmYWJzKGJ1ZlsoaW5kZXggKyBjKSA8IHMtPmxpbWl0 ZXJfYnVmX3NpemUgPyAoaW5kZXggKyBjKSA6IChpbmRleCArIGMgLSBzLT5saW1pdGVyX2J1Zl9z aXplKV0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICpwZWFrX2RlbHRh ID0gbjsKLSAgICAgICAgICAgICAgICBzLT5wZWFrX2luZGV4ID0gaW5kZXg7Ci0gICAgICAgICAg ICAgICAgKnBlYWtfdmFsdWUgPSBtYXhfcGVhazsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHMtPnByZXZfc21wW2NdID0gdGhpczsKLSAgICAg ICAgfQotCi0gICAgICAgIGluZGV4ICs9IGNoYW5uZWxzOwotICAgICAgICBpZiAoaW5kZXggPj0g cy0+bGltaXRlcl9idWZfc2l6ZSkKLSAgICAgICAgICAgIGluZGV4IC09IHMtPmxpbWl0ZXJfYnVm X3NpemU7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB0cnVlX3BlYWtfbGltaXRlcihMb3VkTm9y bUNvbnRleHQgKnMsIGRvdWJsZSAqb3V0LCBpbnQgbmJfc2FtcGxlcywgaW50IGNoYW5uZWxzKQot ewotICAgIGludCBuLCBjLCBpbmRleCwgcGVha19kZWx0YSwgc21wX2NudDsKLSAgICBkb3VibGUg Y2VpbGluZywgcGVha192YWx1ZTsKLSAgICBkb3VibGUgKmJ1ZjsKLQotICAgIGJ1ZiA9IHMtPmxp bWl0ZXJfYnVmOwotICAgIGNlaWxpbmcgPSBzLT50YXJnZXRfdHA7Ci0gICAgaW5kZXggPSBzLT5s aW1pdGVyX2J1Zl9pbmRleDsKLSAgICBzbXBfY250ID0gMDsKLQotICAgIGlmIChzLT5mcmFtZV90 eXBlID09IEZJUlNUX0ZSQU1FKSB7Ci0gICAgICAgIGRvdWJsZSBtYXg7Ci0KLSAgICAgICAgbWF4 ID0gMC47Ci0gICAgICAgIGZvciAobiA9IDA7IG4gPCAxOTIwOyBuKyspIHsKLSAgICAgICAgICAg IGZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAgICAgIG1heCA9IGZh YnMoYnVmW2NdKSA+IG1heCA/IGZhYnMoYnVmW2NdKSA6IG1heDsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGJ1ZiArPSBjaGFubmVsczsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXgg PiBjZWlsaW5nKSB7Ci0gICAgICAgICAgICBzLT5nYWluX3JlZHVjdGlvblsxXSA9IGNlaWxpbmcg LyBtYXg7Ci0gICAgICAgICAgICBzLT5saW1pdGVyX3N0YXRlID0gU1VTVEFJTjsKLSAgICAgICAg ICAgIGJ1ZiA9IHMtPmxpbWl0ZXJfYnVmOwotCi0gICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwg MTkyMDsgbisrKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IGNoYW5uZWxzOyBj KyspIHsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVudjsKLSAgICAgICAgICAgICAgICAg ICAgZW52ID0gcy0+Z2Fpbl9yZWR1Y3Rpb25bMV07Ci0gICAgICAgICAgICAgICAgICAgIGJ1Zltj XSAqPSBlbnY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJ1ZiArPSBjaGFu bmVsczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGJ1ZiA9IHMtPmxpbWl0 ZXJfYnVmOwotICAgIH0KLQotICAgIGRvIHsKLQotICAgICAgICBzd2l0Y2gocy0+bGltaXRlcl9z dGF0ZSkgewotICAgICAgICBjYXNlIE9VVDoKLSAgICAgICAgICAgIGRldGVjdF9wZWFrKHMsIHNt cF9jbnQsIG5iX3NhbXBsZXMgLSBzbXBfY250LCBjaGFubmVscywgJnBlYWtfZGVsdGEsICZwZWFr X3ZhbHVlKTsKLSAgICAgICAgICAgIGlmIChwZWFrX2RlbHRhICE9IC0xKSB7Ci0gICAgICAgICAg ICAgICAgcy0+ZW52X2NudCA9IDA7Ci0gICAgICAgICAgICAgICAgc21wX2NudCArPSAocGVha19k ZWx0YSAtIHMtPmF0dGFja19sZW5ndGgpOwotICAgICAgICAgICAgICAgIHMtPmdhaW5fcmVkdWN0 aW9uWzBdID0gMS47Ci0gICAgICAgICAgICAgICAgcy0+Z2Fpbl9yZWR1Y3Rpb25bMV0gPSBjZWls aW5nIC8gcGVha192YWx1ZTsKLSAgICAgICAgICAgICAgICBzLT5saW1pdGVyX3N0YXRlID0gQVRU QUNLOwotCi0gICAgICAgICAgICAgICAgcy0+ZW52X2luZGV4ID0gcy0+cGVha19pbmRleCAtIChz LT5hdHRhY2tfbGVuZ3RoICogY2hhbm5lbHMpOwotICAgICAgICAgICAgICAgIGlmIChzLT5lbnZf aW5kZXggPCAwKQotICAgICAgICAgICAgICAgICAgICBzLT5lbnZfaW5kZXggKz0gcy0+bGltaXRl cl9idWZfc2l6ZTsKLQotICAgICAgICAgICAgICAgIHMtPmVudl9pbmRleCArPSAocy0+ZW52X2Nu dCAqIGNoYW5uZWxzKTsKLSAgICAgICAgICAgICAgICBpZiAocy0+ZW52X2luZGV4ID4gcy0+bGlt aXRlcl9idWZfc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcy0+ZW52X2luZGV4IC09IHMtPmxp bWl0ZXJfYnVmX3NpemU7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg c21wX2NudCA9IG5iX3NhbXBsZXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK LQotICAgICAgICBjYXNlIEFUVEFDSzoKLSAgICAgICAgICAgIGZvciAoOyBzLT5lbnZfY250IDwg cy0+YXR0YWNrX2xlbmd0aDsgcy0+ZW52X2NudCsrKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChj ID0gMDsgYyA8IGNoYW5uZWxzOyBjKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVu djsKLSAgICAgICAgICAgICAgICAgICAgZW52ID0gcy0+Z2Fpbl9yZWR1Y3Rpb25bMF0gLSAoKGRv dWJsZSkgcy0+ZW52X2NudCAvIChzLT5hdHRhY2tfbGVuZ3RoIC0gMSkgKiAocy0+Z2Fpbl9yZWR1 Y3Rpb25bMF0gLSBzLT5nYWluX3JlZHVjdGlvblsxXSkpOwotICAgICAgICAgICAgICAgICAgICBi dWZbcy0+ZW52X2luZGV4ICsgY10gKj0gZW52OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg ICAgICAgICAgIHMtPmVudl9pbmRleCArPSBjaGFubmVsczsKLSAgICAgICAgICAgICAgICBpZiAo cy0+ZW52X2luZGV4ID49IHMtPmxpbWl0ZXJfYnVmX3NpemUpCi0gICAgICAgICAgICAgICAgICAg IHMtPmVudl9pbmRleCAtPSBzLT5saW1pdGVyX2J1Zl9zaXplOwotCi0gICAgICAgICAgICAgICAg c21wX2NudCsrOwotICAgICAgICAgICAgICAgIGlmIChzbXBfY250ID49IG5iX3NhbXBsZXMpIHsK LSAgICAgICAgICAgICAgICAgICAgcy0+ZW52X2NudCsrOwotICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm IChzbXBfY250IDwgbmJfc2FtcGxlcykgewotICAgICAgICAgICAgICAgIHMtPmVudl9jbnQgPSAw OwotICAgICAgICAgICAgICAgIHMtPmF0dGFja19sZW5ndGggPSAxOTIwOwotICAgICAgICAgICAg ICAgIHMtPmxpbWl0ZXJfc3RhdGUgPSBTVVNUQUlOOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTVVNUQUlOOgotICAgICAgICAgICAgZGV0ZWN0X3Bl YWsocywgc21wX2NudCwgbmJfc2FtcGxlcywgY2hhbm5lbHMsICZwZWFrX2RlbHRhLCAmcGVha192 YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocGVha19kZWx0YSA9PSAtMSkgewotICAgICAgICAgICAg ICAgIHMtPmxpbWl0ZXJfc3RhdGUgPSBSRUxFQVNFOwotICAgICAgICAgICAgICAgIHMtPmdhaW5f cmVkdWN0aW9uWzBdID0gcy0+Z2Fpbl9yZWR1Y3Rpb25bMV07Ci0gICAgICAgICAgICAgICAgcy0+ Z2Fpbl9yZWR1Y3Rpb25bMV0gPSAxLjsKLSAgICAgICAgICAgICAgICBzLT5lbnZfY250ID0gMDsK LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgZG91YmxlIGdhaW5fcmVkdWN0aW9uOwotICAgICAgICAgICAgICAgIGdhaW5fcmVkdWN0 aW9uID0gY2VpbGluZyAvIHBlYWtfdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ2Fpbl9y ZWR1Y3Rpb24gPCBzLT5nYWluX3JlZHVjdGlvblsxXSkgewotICAgICAgICAgICAgICAgICAgICBz LT5saW1pdGVyX3N0YXRlID0gQVRUQUNLOwotCi0gICAgICAgICAgICAgICAgICAgIHMtPmF0dGFj a19sZW5ndGggPSBwZWFrX2RlbHRhOwotICAgICAgICAgICAgICAgICAgICBpZiAocy0+YXR0YWNr X2xlbmd0aCA8PSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgcy0+YXR0YWNrX2xlbmd0aCA9 ICAyOwotCi0gICAgICAgICAgICAgICAgICAgIHMtPmdhaW5fcmVkdWN0aW9uWzBdID0gcy0+Z2Fp bl9yZWR1Y3Rpb25bMV07Ci0gICAgICAgICAgICAgICAgICAgIHMtPmdhaW5fcmVkdWN0aW9uWzFd ID0gZ2Fpbl9yZWR1Y3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIHMtPmVudl9jbnQgPSAwOwot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg ICAgICAgICBmb3IgKHMtPmVudl9jbnQgPSAwOyBzLT5lbnZfY250IDwgcGVha19kZWx0YTsgcy0+ ZW52X2NudCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCBjaGFubmVs czsgYysrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZW52OwotICAgICAgICAg ICAgICAgICAgICAgICAgZW52ID0gcy0+Z2Fpbl9yZWR1Y3Rpb25bMV07Ci0gICAgICAgICAgICAg ICAgICAgICAgICBidWZbcy0+ZW52X2luZGV4ICsgY10gKj0gZW52OwotICAgICAgICAgICAgICAg ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcy0+ZW52X2luZGV4ICs9IGNoYW5uZWxzOwot ICAgICAgICAgICAgICAgICAgICBpZiAocy0+ZW52X2luZGV4ID49IHMtPmxpbWl0ZXJfYnVmX3Np emUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzLT5lbnZfaW5kZXggLT0gcy0+bGltaXRlcl9i dWZfc2l6ZTsKLQotICAgICAgICAgICAgICAgICAgICBzbXBfY250Kys7Ci0gICAgICAgICAgICAg ICAgICAgIGlmIChzbXBfY250ID49IG5iX3NhbXBsZXMpIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHMtPmVudl9jbnQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBSRUxFQVNFOgotICAgICAgICAgICAgZm9yICg7 IHMtPmVudl9jbnQgPCBzLT5yZWxlYXNlX2xlbmd0aDsgcy0+ZW52X2NudCsrKSB7Ci0gICAgICAg ICAgICAgICAgZm9yIChjID0gMDsgYyA8IGNoYW5uZWxzOyBjKyspIHsKLSAgICAgICAgICAgICAg ICAgICAgZG91YmxlIGVudjsKLSAgICAgICAgICAgICAgICAgICAgZW52ID0gcy0+Z2Fpbl9yZWR1 Y3Rpb25bMF0gKyAoKChkb3VibGUpIHMtPmVudl9jbnQgLyAocy0+cmVsZWFzZV9sZW5ndGggLSAx KSkgKiAocy0+Z2Fpbl9yZWR1Y3Rpb25bMV0gLSBzLT5nYWluX3JlZHVjdGlvblswXSkpOwotICAg ICAgICAgICAgICAgICAgICBidWZbcy0+ZW52X2luZGV4ICsgY10gKj0gZW52OwotICAgICAgICAg ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHMtPmVudl9pbmRleCArPSBjaGFubmVsczsKLSAg ICAgICAgICAgICAgICBpZiAocy0+ZW52X2luZGV4ID49IHMtPmxpbWl0ZXJfYnVmX3NpemUpCi0g ICAgICAgICAgICAgICAgICAgIHMtPmVudl9pbmRleCAtPSBzLT5saW1pdGVyX2J1Zl9zaXplOwot Ci0gICAgICAgICAgICAgICAgc21wX2NudCsrOwotICAgICAgICAgICAgICAgIGlmIChzbXBfY250 ID49IG5iX3NhbXBsZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgcy0+ZW52X2NudCsrOwotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9 Ci0KLSAgICAgICAgICAgIGlmIChzbXBfY250IDwgbmJfc2FtcGxlcykgewotICAgICAgICAgICAg ICAgIHMtPmVudl9jbnQgPSAwOwotICAgICAgICAgICAgICAgIHMtPmxpbWl0ZXJfc3RhdGUgPSBP VVQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg ICB9IHdoaWxlIChzbXBfY250IDwgbmJfc2FtcGxlcyk7Ci0KLSAgICBmb3IgKG4gPSAwOyBuIDwg bmJfc2FtcGxlczsgbisrKSB7Ci0gICAgICAgIGZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysr KSB7Ci0gICAgICAgICAgICBvdXRbY10gPSBidWZbaW5kZXggKyBjXTsKLSAgICAgICAgICAgIGlm IChmYWJzKG91dFtjXSkgPiBjZWlsaW5nKSB7Ci0gICAgICAgICAgICAgICAgb3V0W2NdID0gY2Vp bGluZyAqIChvdXRbY10gPCAwID8gLTEgOiAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgICAgICBvdXQgKz0gY2hhbm5lbHM7Ci0gICAgICAgIGluZGV4ICs9IGNoYW5uZWxzOwotICAg ICAgICBpZiAoaW5kZXggPj0gcy0+bGltaXRlcl9idWZfc2l6ZSkKLSAgICAgICAgICAgIGluZGV4 IC09IHMtPmxpbWl0ZXJfYnVmX3NpemU7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IGZpbHRlcl9m cmFtZShBVkZpbHRlckxpbmsgKmlubGluaywgQVZGcmFtZSAqaW4pCi17Ci0gICAgQVZGaWx0ZXJD b250ZXh0ICpjdHggPSBpbmxpbmstPmRzdDsKLSAgICBMb3VkTm9ybUNvbnRleHQgKnMgPSBjdHgt PnByaXY7Ci0gICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOwotICAg IEFWRnJhbWUgKm91dDsKLSAgICBjb25zdCBkb3VibGUgKnNyYzsKLSAgICBkb3VibGUgKmRzdDsK LSAgICBkb3VibGUgKmJ1ZjsKLSAgICBkb3VibGUgKmxpbWl0ZXJfYnVmOwotICAgIGludCBpLCBu LCBjLCBzdWJmcmFtZV9sZW5ndGgsIHNyY19pbmRleDsKLSAgICBkb3VibGUgZ2FpbiwgZ2Fpbl9u ZXh0LCBlbnZfZ2xvYmFsLCBlbnZfc2hvcnR0ZXJtLAotICAgIGdsb2JhbCwgc2hvcnR0ZXJtLCBs cmEsIHJlbGF0aXZlX3RocmVzaG9sZDsKLQotICAgIGlmIChhdl9mcmFtZV9pc193cml0YWJsZShp bikpIHsKLSAgICAgICAgb3V0ID0gaW47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgb3V0ID0gZmZf Z2V0X2F1ZGlvX2J1ZmZlcihvdXRsaW5rLCBpbi0+bmJfc2FtcGxlcyk7Ci0gICAgICAgIGlmICgh b3V0KSB7Ci0gICAgICAgICAgICBhdl9mcmFtZV9mcmVlKCZpbik7Ci0gICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICB9Ci0gICAgICAgIGF2X2ZyYW1lX2NvcHlfcHJv cHMob3V0LCBpbik7Ci0gICAgfQotCi0gICAgb3V0LT5wdHMgPSBzLT5wdHNbMF07Ci0gICAgbWVt bW92ZShzLT5wdHMsICZzLT5wdHNbMV0sIChGRl9BUlJBWV9FTEVNUyhzLT5wdHMpIC0gMSkgKiBz aXplb2Yocy0+cHRzWzBdKSk7Ci0KLSAgICBzcmMgPSAoY29uc3QgZG91YmxlICopaW4tPmRhdGFb MF07Ci0gICAgZHN0ID0gKGRvdWJsZSAqKW91dC0+ZGF0YVswXTsKLSAgICBidWYgPSBzLT5idWY7 Ci0gICAgbGltaXRlcl9idWYgPSBzLT5saW1pdGVyX2J1ZjsKLQotICAgIGZmX2VidXIxMjhfYWRk X2ZyYW1lc19kb3VibGUocy0+cjEyOF9pbiwgc3JjLCBpbi0+bmJfc2FtcGxlcyk7Ci0KLSAgICBp ZiAocy0+ZnJhbWVfdHlwZSA9PSBGSVJTVF9GUkFNRSAmJiBpbi0+bmJfc2FtcGxlcyA8IGZyYW1l X3NpemUoaW5saW5rLT5zYW1wbGVfcmF0ZSwgMzAwMCkpIHsKLSAgICAgICAgZG91YmxlIG9mZnNl dCwgb2Zmc2V0X3RwLCB0cnVlX3BlYWs7Ci0KLSAgICAgICAgZmZfZWJ1cjEyOF9sb3VkbmVzc19n bG9iYWwocy0+cjEyOF9pbiwgJmdsb2JhbCk7Ci0gICAgICAgIGZvciAoYyA9IDA7IGMgPCBpbmxp bmstPmNoX2xheW91dC5uYl9jaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAgICBkb3VibGUgdG1w OwotICAgICAgICAgICAgZmZfZWJ1cjEyOF9zYW1wbGVfcGVhayhzLT5yMTI4X2luLCBjLCAmdG1w KTsKLSAgICAgICAgICAgIGlmIChjID09IDAgfHwgdG1wID4gdHJ1ZV9wZWFrKQotICAgICAgICAg ICAgICAgIHRydWVfcGVhayA9IHRtcDsKLSAgICAgICAgfQotCi0gICAgICAgIG9mZnNldCAgICA9 IHBvdygxMC4sIChzLT50YXJnZXRfaSAtIGdsb2JhbCkgLyAyMC4pOwotICAgICAgICBvZmZzZXRf dHAgPSB0cnVlX3BlYWsgKiBvZmZzZXQ7Ci0gICAgICAgIHMtPm9mZnNldCA9IG9mZnNldF90cCA8 IHMtPnRhcmdldF90cCA/IG9mZnNldCA6IHMtPnRhcmdldF90cCAvIHRydWVfcGVhazsKLSAgICAg ICAgcy0+ZnJhbWVfdHlwZSA9IExJTkVBUl9NT0RFOwotICAgIH0KLQotICAgIHN3aXRjaCAocy0+ ZnJhbWVfdHlwZSkgewotICAgIGNhc2UgRklSU1RfRlJBTUU6Ci0gICAgICAgIGZvciAobiA9IDA7 IG4gPCBpbi0+bmJfc2FtcGxlczsgbisrKSB7Ci0gICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwg aW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7IGMrKykgewotICAgICAgICAgICAgICAgIGJ1 ZltzLT5idWZfaW5kZXggKyBjXSA9IHNyY1tjXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IHNyYyArPSBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgICAgIHMtPmJ1 Zl9pbmRleCArPSBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgfQotCi0g ICAgICAgIGZmX2VidXIxMjhfbG91ZG5lc3Nfc2hvcnR0ZXJtKHMtPnIxMjhfaW4sICZzaG9ydHRl cm0pOwotCi0gICAgICAgIGlmIChzaG9ydHRlcm0gPCBzLT5tZWFzdXJlZF90aHJlc2gpIHsKLSAg ICAgICAgICAgIHMtPmFib3ZlX3RocmVzaG9sZCA9IDA7Ci0gICAgICAgICAgICBlbnZfc2hvcnR0 ZXJtID0gc2hvcnR0ZXJtIDw9IC03MC4gPyAwLiA6IHMtPnRhcmdldF9pIC0gcy0+bWVhc3VyZWRf aTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHMtPmFib3ZlX3RocmVzaG9sZCA9IDE7 Ci0gICAgICAgICAgICBlbnZfc2hvcnR0ZXJtID0gc2hvcnR0ZXJtIDw9IC03MC4gPyAwLiA6IHMt PnRhcmdldF9pIC0gc2hvcnR0ZXJtOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChuID0gMDsg biA8IDMwOyBuKyspCi0gICAgICAgICAgICBzLT5kZWx0YVtuXSA9IHBvdygxMC4sIGVudl9zaG9y dHRlcm0gLyAyMC4pOwotICAgICAgICBzLT5wcmV2X2RlbHRhID0gcy0+ZGVsdGFbcy0+aW5kZXhd OwotCi0gICAgICAgIHMtPmJ1Zl9pbmRleCA9Ci0gICAgICAgIHMtPmxpbWl0ZXJfYnVmX2luZGV4 ID0gMDsKLQotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgKHMtPmxpbWl0ZXJfYnVmX3NpemUgLyBp bmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVscyk7IG4rKykgewotICAgICAgICAgICAgZm9yIChj ID0gMDsgYyA8IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOyBjKyspIHsKLSAgICAgICAg ICAgICAgICBsaW1pdGVyX2J1ZltzLT5saW1pdGVyX2J1Zl9pbmRleCArIGNdID0gYnVmW3MtPmJ1 Zl9pbmRleCArIGNdICogcy0+ZGVsdGFbcy0+aW5kZXhdICogcy0+b2Zmc2V0OwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgcy0+bGltaXRlcl9idWZfaW5kZXggKz0gaW5saW5rLT5jaF9sYXlv dXQubmJfY2hhbm5lbHM7Ci0gICAgICAgICAgICBpZiAocy0+bGltaXRlcl9idWZfaW5kZXggPj0g cy0+bGltaXRlcl9idWZfc2l6ZSkKLSAgICAgICAgICAgICAgICBzLT5saW1pdGVyX2J1Zl9pbmRl eCAtPSBzLT5saW1pdGVyX2J1Zl9zaXplOwotCi0gICAgICAgICAgICBzLT5idWZfaW5kZXggKz0g aW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7Ci0gICAgICAgIH0KLQotICAgICAgICBzdWJm cmFtZV9sZW5ndGggPSBmcmFtZV9zaXplKGlubGluay0+c2FtcGxlX3JhdGUsIDEwMCk7Ci0gICAg ICAgIHRydWVfcGVha19saW1pdGVyKHMsIGRzdCwgc3ViZnJhbWVfbGVuZ3RoLCBpbmxpbmstPmNo X2xheW91dC5uYl9jaGFubmVscyk7Ci0gICAgICAgIGZmX2VidXIxMjhfYWRkX2ZyYW1lc19kb3Vi bGUocy0+cjEyOF9vdXQsIGRzdCwgc3ViZnJhbWVfbGVuZ3RoKTsKLQotICAgICAgICBvdXQtPm5i X3NhbXBsZXMgPSBzdWJmcmFtZV9sZW5ndGg7Ci0KLSAgICAgICAgcy0+ZnJhbWVfdHlwZSA9IElO TkVSX0ZSQU1FOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSU5ORVJfRlJBTUU6Ci0gICAg ICAgIGdhaW4gICAgICA9IGdhdXNzaWFuX2ZpbHRlcihzLCBzLT5pbmRleCArIDEwIDwgMzAgPyBz LT5pbmRleCArIDEwIDogcy0+aW5kZXggKyAxMCAtIDMwKTsKLSAgICAgICAgZ2Fpbl9uZXh0ID0g Z2F1c3NpYW5fZmlsdGVyKHMsIHMtPmluZGV4ICsgMTEgPCAzMCA/IHMtPmluZGV4ICsgMTEgOiBz LT5pbmRleCArIDExIC0gMzApOwotCi0gICAgICAgIGZvciAobiA9IDA7IG4gPCBpbi0+bmJfc2Ft cGxlczsgbisrKSB7Ci0gICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgaW5saW5rLT5jaF9sYXlv dXQubmJfY2hhbm5lbHM7IGMrKykgewotICAgICAgICAgICAgICAgIGJ1ZltzLT5wcmV2X2J1Zl9p bmRleCArIGNdID0gc3JjW2NdOwotICAgICAgICAgICAgICAgIGxpbWl0ZXJfYnVmW3MtPmxpbWl0 ZXJfYnVmX2luZGV4ICsgY10gPSBidWZbcy0+YnVmX2luZGV4ICsgY10gKiAoZ2FpbiArICgoKGRv dWJsZSkgbiAvIGluLT5uYl9zYW1wbGVzKSAqIChnYWluX25leHQgLSBnYWluKSkpICogcy0+b2Zm c2V0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3JjICs9IGlubGluay0+Y2hfbGF5b3V0 Lm5iX2NoYW5uZWxzOwotCi0gICAgICAgICAgICBzLT5saW1pdGVyX2J1Zl9pbmRleCArPSBpbmxp bmstPmNoX2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgICAgIGlmIChzLT5saW1pdGVyX2J1 Zl9pbmRleCA+PSBzLT5saW1pdGVyX2J1Zl9zaXplKQotICAgICAgICAgICAgICAgIHMtPmxpbWl0 ZXJfYnVmX2luZGV4IC09IHMtPmxpbWl0ZXJfYnVmX3NpemU7Ci0KLSAgICAgICAgICAgIHMtPnBy ZXZfYnVmX2luZGV4ICs9IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwotICAgICAgICAg ICAgaWYgKHMtPnByZXZfYnVmX2luZGV4ID49IHMtPmJ1Zl9zaXplKQotICAgICAgICAgICAgICAg IHMtPnByZXZfYnVmX2luZGV4IC09IHMtPmJ1Zl9zaXplOwotCi0gICAgICAgICAgICBzLT5idWZf aW5kZXggKz0gaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7Ci0gICAgICAgICAgICBpZiAo cy0+YnVmX2luZGV4ID49IHMtPmJ1Zl9zaXplKQotICAgICAgICAgICAgICAgIHMtPmJ1Zl9pbmRl eCAtPSBzLT5idWZfc2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHN1YmZyYW1lX2xlbmd0aCA9 IChmcmFtZV9zaXplKGlubGluay0+c2FtcGxlX3JhdGUsIDEwMCkgLSBpbi0+bmJfc2FtcGxlcykg KiBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgcy0+bGltaXRlcl9idWZf aW5kZXggPSBzLT5saW1pdGVyX2J1Zl9pbmRleCArIHN1YmZyYW1lX2xlbmd0aCA8IHMtPmxpbWl0 ZXJfYnVmX3NpemUgPyBzLT5saW1pdGVyX2J1Zl9pbmRleCArIHN1YmZyYW1lX2xlbmd0aCA6IHMt PmxpbWl0ZXJfYnVmX2luZGV4ICsgc3ViZnJhbWVfbGVuZ3RoIC0gcy0+bGltaXRlcl9idWZfc2l6 ZTsKLQotICAgICAgICB0cnVlX3BlYWtfbGltaXRlcihzLCBkc3QsIGluLT5uYl9zYW1wbGVzLCBp bmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVscyk7Ci0gICAgICAgIGZmX2VidXIxMjhfYWRkX2Zy YW1lc19kb3VibGUocy0+cjEyOF9vdXQsIGRzdCwgaW4tPm5iX3NhbXBsZXMpOwotCi0gICAgICAg IGZmX2VidXIxMjhfbG91ZG5lc3NfcmFuZ2Uocy0+cjEyOF9pbiwgJmxyYSk7Ci0gICAgICAgIGZm X2VidXIxMjhfbG91ZG5lc3NfZ2xvYmFsKHMtPnIxMjhfaW4sICZnbG9iYWwpOwotICAgICAgICBm Zl9lYnVyMTI4X2xvdWRuZXNzX3Nob3J0dGVybShzLT5yMTI4X2luLCAmc2hvcnR0ZXJtKTsKLSAg ICAgICAgZmZfZWJ1cjEyOF9yZWxhdGl2ZV90aHJlc2hvbGQocy0+cjEyOF9pbiwgJnJlbGF0aXZl X3RocmVzaG9sZCk7Ci0KLSAgICAgICAgaWYgKHMtPmFib3ZlX3RocmVzaG9sZCA9PSAwKSB7Ci0g ICAgICAgICAgICBkb3VibGUgc2hvcnR0ZXJtX291dDsKLQotICAgICAgICAgICAgaWYgKHNob3J0 dGVybSA+IHMtPm1lYXN1cmVkX3RocmVzaCkKLSAgICAgICAgICAgICAgICBzLT5wcmV2X2RlbHRh ICo9IDEuMDA1ODsKLQotICAgICAgICAgICAgZmZfZWJ1cjEyOF9sb3VkbmVzc19zaG9ydHRlcm0o cy0+cjEyOF9vdXQsICZzaG9ydHRlcm1fb3V0KTsKLSAgICAgICAgICAgIGlmIChzaG9ydHRlcm1f b3V0ID49IHMtPnRhcmdldF9pKQotICAgICAgICAgICAgICAgIHMtPmFib3ZlX3RocmVzaG9sZCA9 IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2hvcnR0ZXJtIDwgcmVsYXRpdmVfdGhyZXNo b2xkIHx8IHNob3J0dGVybSA8PSAtNzAuIHx8IHMtPmFib3ZlX3RocmVzaG9sZCA9PSAwKSB7Ci0g ICAgICAgICAgICBzLT5kZWx0YVtzLT5pbmRleF0gPSBzLT5wcmV2X2RlbHRhOwotICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgZW52X2dsb2JhbCA9IGZhYnMoc2hvcnR0ZXJtIC0gZ2xvYmFs KSA8IChzLT50YXJnZXRfbHJhIC8gMi4pID8gc2hvcnR0ZXJtIC0gZ2xvYmFsIDogKHMtPnRhcmdl dF9scmEgLyAyLikgKiAoKHNob3J0dGVybSAtIGdsb2JhbCkgPCAwID8gLTEgOiAxKTsKLSAgICAg ICAgICAgIGVudl9zaG9ydHRlcm0gPSBzLT50YXJnZXRfaSAtIHNob3J0dGVybTsKLSAgICAgICAg ICAgIHMtPmRlbHRhW3MtPmluZGV4XSA9IHBvdygxMC4sIChlbnZfZ2xvYmFsICsgZW52X3Nob3J0 dGVybSkgLyAyMC4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcy0+cHJldl9kZWx0YSA9IHMtPmRl bHRhW3MtPmluZGV4XTsKLSAgICAgICAgcy0+aW5kZXgrKzsKLSAgICAgICAgaWYgKHMtPmluZGV4 ID49IDMwKQotICAgICAgICAgICAgcy0+aW5kZXggLT0gMzA7Ci0gICAgICAgIHMtPnByZXZfbmJf c2FtcGxlcyA9IGluLT5uYl9zYW1wbGVzOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRklO QUxfRlJBTUU6Ci0gICAgICAgIGdhaW4gPSBnYXVzc2lhbl9maWx0ZXIocywgcy0+aW5kZXggKyAx MCA8IDMwID8gcy0+aW5kZXggKyAxMCA6IHMtPmluZGV4ICsgMTAgLSAzMCk7Ci0gICAgICAgIHMt PmxpbWl0ZXJfYnVmX2luZGV4ID0gMDsKLSAgICAgICAgc3JjX2luZGV4ID0gMDsKLQotICAgICAg ICBmb3IgKG4gPSAwOyBuIDwgcy0+bGltaXRlcl9idWZfc2l6ZSAvIGlubGluay0+Y2hfbGF5b3V0 Lm5iX2NoYW5uZWxzOyBuKyspIHsKLSAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCBpbmxpbmst PmNoX2xheW91dC5uYl9jaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAgICAgICAgcy0+bGltaXRl cl9idWZbcy0+bGltaXRlcl9idWZfaW5kZXggKyBjXSA9IHNyY1tzcmNfaW5kZXggKyBjXSAqIGdh aW4gKiBzLT5vZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzcmNfaW5kZXggKz0g aW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7Ci0KLSAgICAgICAgICAgIHMtPmxpbWl0ZXJf YnVmX2luZGV4ICs9IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwotICAgICAgICAgICAg aWYgKHMtPmxpbWl0ZXJfYnVmX2luZGV4ID49IHMtPmxpbWl0ZXJfYnVmX3NpemUpCi0gICAgICAg ICAgICAgICAgcy0+bGltaXRlcl9idWZfaW5kZXggLT0gcy0+bGltaXRlcl9idWZfc2l6ZTsKLSAg ICAgICAgfQotCi0gICAgICAgIHN1YmZyYW1lX2xlbmd0aCA9IGZyYW1lX3NpemUoaW5saW5rLT5z YW1wbGVfcmF0ZSwgMTAwKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGluLT5uYl9zYW1wbGVz IC8gc3ViZnJhbWVfbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHRydWVfcGVha19saW1pdGVy KHMsIGRzdCwgc3ViZnJhbWVfbGVuZ3RoLCBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVscyk7 Ci0KLSAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBzdWJmcmFtZV9sZW5ndGg7IG4rKykgewot ICAgICAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFu bmVsczsgYysrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzcmNfaW5kZXggPCAoaW4tPm5i X3NhbXBsZXMgKiBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVscykpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGxpbWl0ZXJfYnVmW3MtPmxpbWl0ZXJfYnVmX2luZGV4ICsgY10gPSBzcmNb c3JjX2luZGV4ICsgY10gKiBnYWluICogcy0+b2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRlcl9idWZbcy0+bGltaXRlcl9i dWZfaW5kZXggKyBjXSA9IDAuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHNyY19pbmRleCA8IChpbi0+bmJfc2FtcGxlcyAq IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzKSkKLSAgICAgICAgICAgICAgICAgICAgc3Jj X2luZGV4ICs9IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwotCi0gICAgICAgICAgICAg ICAgcy0+bGltaXRlcl9idWZfaW5kZXggKz0gaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7 Ci0gICAgICAgICAgICAgICAgaWYgKHMtPmxpbWl0ZXJfYnVmX2luZGV4ID49IHMtPmxpbWl0ZXJf YnVmX3NpemUpCi0gICAgICAgICAgICAgICAgICAgIHMtPmxpbWl0ZXJfYnVmX2luZGV4IC09IHMt PmxpbWl0ZXJfYnVmX3NpemU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRzdCArPSAo c3ViZnJhbWVfbGVuZ3RoICogaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMpOwotICAgICAg ICB9Ci0KLSAgICAgICAgZHN0ID0gKGRvdWJsZSAqKW91dC0+ZGF0YVswXTsKLSAgICAgICAgZmZf ZWJ1cjEyOF9hZGRfZnJhbWVzX2RvdWJsZShzLT5yMTI4X291dCwgZHN0LCBpbi0+bmJfc2FtcGxl cyk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBMSU5FQVJfTU9ERToKLSAgICAgICAgZm9y IChuID0gMDsgbiA8IGluLT5uYl9zYW1wbGVzOyBuKyspIHsKLSAgICAgICAgICAgIGZvciAoYyA9 IDA7IGMgPCBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAg ICAgICAgZHN0W2NdID0gc3JjW2NdICogcy0+b2Zmc2V0OwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgc3JjICs9IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwotICAgICAgICAgICAg ZHN0ICs9IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwotICAgICAgICB9Ci0KLSAgICAg ICAgZHN0ID0gKGRvdWJsZSAqKW91dC0+ZGF0YVswXTsKLSAgICAgICAgZmZfZWJ1cjEyOF9hZGRf ZnJhbWVzX2RvdWJsZShzLT5yMTI4X291dCwgZHN0LCBpbi0+bmJfc2FtcGxlcyk7Ci0gICAgICAg IGJyZWFrOwotICAgIH0KLQotICAgIGlmIChpbiAhPSBvdXQpCi0gICAgICAgIGF2X2ZyYW1lX2Zy ZWUoJmluKTsKLSAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIG91dCk7Ci19Ci0K LXN0YXRpYyBpbnQgZmx1c2hfZnJhbWUoQVZGaWx0ZXJMaW5rICpvdXRsaW5rKQotewotICAgIEFW RmlsdGVyQ29udGV4dCAqY3R4ID0gb3V0bGluay0+c3JjOwotICAgIEFWRmlsdGVyTGluayAqaW5s aW5rID0gY3R4LT5pbnB1dHNbMF07Ci0gICAgTG91ZE5vcm1Db250ZXh0ICpzID0gY3R4LT5wcml2 OwotICAgIGludCByZXQgPSAwOwotCi0gICAgaWYgKHMtPmZyYW1lX3R5cGUgPT0gSU5ORVJfRlJB TUUpIHsKLSAgICAgICAgZG91YmxlICpzcmM7Ci0gICAgICAgIGRvdWJsZSAqYnVmOwotICAgICAg ICBpbnQgbmJfc2FtcGxlcywgbiwgYywgb2Zmc2V0OwotICAgICAgICBBVkZyYW1lICpmcmFtZTsK LQotICAgICAgICBuYl9zYW1wbGVzICA9IChzLT5idWZfc2l6ZSAvIGlubGluay0+Y2hfbGF5b3V0 Lm5iX2NoYW5uZWxzKSAtIHMtPnByZXZfbmJfc2FtcGxlczsKLSAgICAgICAgbmJfc2FtcGxlcyAt PSAoZnJhbWVfc2l6ZShpbmxpbmstPnNhbXBsZV9yYXRlLCAxMDApIC0gcy0+cHJldl9uYl9zYW1w bGVzKTsKLQotICAgICAgICBmcmFtZSA9IGZmX2dldF9hdWRpb19idWZmZXIob3V0bGluaywgbmJf c2FtcGxlcyk7Ci0gICAgICAgIGlmICghZnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwotICAgICAgICBmcmFtZS0+bmJfc2FtcGxlcyA9IG5iX3NhbXBsZXM7Ci0KLSAg ICAgICAgYnVmID0gcy0+YnVmOwotICAgICAgICBzcmMgPSAoZG91YmxlICopZnJhbWUtPmRhdGFb MF07Ci0KLSAgICAgICAgb2Zmc2V0ICA9ICgocy0+bGltaXRlcl9idWZfc2l6ZSAvIGlubGluay0+ Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzKSAtIHMtPnByZXZfbmJfc2FtcGxlcykgKiBpbmxpbmstPmNo X2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgb2Zmc2V0IC09IChmcmFtZV9zaXplKGlubGlu ay0+c2FtcGxlX3JhdGUsIDEwMCkgLSBzLT5wcmV2X25iX3NhbXBsZXMpICogaW5saW5rLT5jaF9s YXlvdXQubmJfY2hhbm5lbHM7Ci0gICAgICAgIHMtPmJ1Zl9pbmRleCA9IHMtPmJ1Zl9pbmRleCAt IG9mZnNldCA8IDAgPyBzLT5idWZfaW5kZXggLSBvZmZzZXQgKyBzLT5idWZfc2l6ZSA6IHMtPmJ1 Zl9pbmRleCAtIG9mZnNldDsKLQotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbmJfc2FtcGxlczsg bisrKSB7Ci0gICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgaW5saW5rLT5jaF9sYXlvdXQubmJf Y2hhbm5lbHM7IGMrKykgewotICAgICAgICAgICAgICAgIHNyY1tjXSA9IGJ1ZltzLT5idWZfaW5k ZXggKyBjXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNyYyArPSBpbmxpbmstPmNoX2xh eW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgICAgIHMtPmJ1Zl9pbmRleCArPSBpbmxpbmstPmNo X2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgICAgIGlmIChzLT5idWZfaW5kZXggPj0gcy0+ YnVmX3NpemUpCi0gICAgICAgICAgICAgICAgcy0+YnVmX2luZGV4IC09IHMtPmJ1Zl9zaXplOwot ICAgICAgICB9Ci0KLSAgICAgICAgcy0+ZnJhbWVfdHlwZSA9IEZJTkFMX0ZSQU1FOwotICAgICAg ICByZXQgPSBmaWx0ZXJfZnJhbWUoaW5saW5rLCBmcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBy ZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYWN0aXZhdGUoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCi17Ci0g ICAgQVZGaWx0ZXJMaW5rICppbmxpbmsgPSBjdHgtPmlucHV0c1swXTsKLSAgICBBVkZpbHRlckxp bmsgKm91dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07Ci0gICAgTG91ZE5vcm1Db250ZXh0ICpzID0g Y3R4LT5wcml2OwotICAgIEFWRnJhbWUgKmluID0gTlVMTDsKLSAgICBpbnQgcmV0ID0gMCwgc3Rh dHVzOwotICAgIGludDY0X3QgcHRzOwotCi0gICAgRkZfRklMVEVSX0ZPUldBUkRfU1RBVFVTX0JB Q0sob3V0bGluaywgaW5saW5rKTsKLQotICAgIGlmIChzLT5mcmFtZV90eXBlICE9IExJTkVBUl9N T0RFKSB7Ci0gICAgICAgIGludCBuYl9zYW1wbGVzOwotCi0gICAgICAgIGlmIChzLT5mcmFtZV90 eXBlID09IEZJUlNUX0ZSQU1FKSB7Ci0gICAgICAgICAgICBuYl9zYW1wbGVzID0gZnJhbWVfc2l6 ZShpbmxpbmstPnNhbXBsZV9yYXRlLCAzMDAwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIG5iX3NhbXBsZXMgPSBmcmFtZV9zaXplKGlubGluay0+c2FtcGxlX3JhdGUsIDEwMCk7Ci0g ICAgICAgIH0KLQotICAgICAgICByZXQgPSBmZl9pbmxpbmtfY29uc3VtZV9zYW1wbGVzKGlubGlu aywgbmJfc2FtcGxlcywgbmJfc2FtcGxlcywgJmluKTsKLSAgICB9IGVsc2UgewotICAgICAgICBy ZXQgPSBmZl9pbmxpbmtfY29uc3VtZV9mcmFtZShpbmxpbmssICZpbik7Ci0gICAgfQotCi0gICAg aWYgKHJldCA8IDApCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgaWYgKHJldCA+IDApIHsKLSAg ICAgICAgaWYgKHMtPmZyYW1lX3R5cGUgPT0gRklSU1RfRlJBTUUpIHsKLSAgICAgICAgICAgIGNv bnN0IGludCBuYl9zYW1wbGVzID0gZnJhbWVfc2l6ZShpbmxpbmstPnNhbXBsZV9yYXRlLCAxMDAp OwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHMtPnB0 cyk7IGkrKykKLSAgICAgICAgICAgICAgICBzLT5wdHNbaV0gPSBpbi0+cHRzICsgaSAqIG5iX3Nh bXBsZXM7Ci0gICAgICAgIH0gZWxzZSBpZiAocy0+ZnJhbWVfdHlwZSA9PSBMSU5FQVJfTU9ERSkg ewotICAgICAgICAgICAgcy0+cHRzWzBdID0gaW4tPnB0czsKLSAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgIHMtPnB0c1tGRl9BUlJBWV9FTEVNUyhzLT5wdHMpIC0gMV0gPSBpbi0+cHRzOwot ICAgICAgICB9Ci0gICAgICAgIHJldCA9IGZpbHRlcl9mcmFtZShpbmxpbmssIGluKTsKLSAgICB9 Ci0gICAgaWYgKHJldCA8IDApCi0gICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICBpZiAoZmZfaW5s aW5rX2Fja25vd2xlZGdlX3N0YXR1cyhpbmxpbmssICZzdGF0dXMsICZwdHMpKSB7Ci0gICAgICAg IGZmX291dGxpbmtfc2V0X3N0YXR1cyhvdXRsaW5rLCBzdGF0dXMsIHB0cyk7Ci0gICAgICAgIHJl dHVybiBmbHVzaF9mcmFtZShvdXRsaW5rKTsKLSAgICB9Ci0KLSAgICBGRl9GSUxURVJfRk9SV0FS RF9XQU5URUQob3V0bGluaywgaW5saW5rKTsKLQotICAgIHJldHVybiBGRkVSUk9SX05PVF9SRUFE WTsKLX0KLQotc3RhdGljIGludCBxdWVyeV9mb3JtYXRzKEFWRmlsdGVyQ29udGV4dCAqY3R4KQot ewotICAgIExvdWROb3JtQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBzdGF0aWMgY29uc3Qg aW50IGlucHV0X3NyYXRlW10gPSB7MTkyMDAwLCAtMX07Ci0gICAgc3RhdGljIGNvbnN0IGVudW0g QVZTYW1wbGVGb3JtYXQgc2FtcGxlX2ZtdHNbXSA9IHsKLSAgICAgICAgICAgIEFWX1NBTVBMRV9G TVRfREJMLAotICAgICAgICAgICAgQVZfU0FNUExFX0ZNVF9OT05FCi0gICAgfTsKLSAgICBpbnQg cmV0ID0gZmZfc2V0X2NvbW1vbl9hbGxfY2hhbm5lbF9jb3VudHMoY3R4KTsKLSAgICBpZiAocmV0 IDwgMCkKLSAgICAgICAgcmV0dXJuIHJldDsKLQotICAgIHJldCA9IGZmX3NldF9jb21tb25fZm9y bWF0c19mcm9tX2xpc3QoY3R4LCBzYW1wbGVfZm10cyk7Ci0gICAgaWYgKHJldCA8IDApCi0gICAg ICAgIHJldHVybiByZXQ7Ci0KLSAgICBpZiAocy0+ZnJhbWVfdHlwZSA9PSBMSU5FQVJfTU9ERSkg ewotICAgICAgICByZXR1cm4gZmZfc2V0X2NvbW1vbl9hbGxfc2FtcGxlcmF0ZXMoY3R4KTsKLSAg ICB9IGVsc2UgewotICAgICAgICByZXR1cm4gZmZfc2V0X2NvbW1vbl9zYW1wbGVyYXRlc19mcm9t X2xpc3QoY3R4LCBpbnB1dF9zcmF0ZSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IGNvbmZpZ19p bnB1dChBVkZpbHRlckxpbmsgKmlubGluaykKLXsKLSAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9 IGlubGluay0+ZHN0OwotICAgIExvdWROb3JtQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLQotICAg IHMtPnIxMjhfaW4gPSBmZl9lYnVyMTI4X2luaXQoaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5l bHMsIGlubGluay0+c2FtcGxlX3JhdGUsIDAsIEZGX0VCVVIxMjhfTU9ERV9JIHwgRkZfRUJVUjEy OF9NT0RFX1MgfCBGRl9FQlVSMTI4X01PREVfTFJBIHwgRkZfRUJVUjEyOF9NT0RFX1NBTVBMRV9Q RUFLKTsKLSAgICBpZiAoIXMtPnIxMjhfaW4pCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7Ci0KLSAgICBzLT5yMTI4X291dCA9IGZmX2VidXIxMjhfaW5pdChpbmxpbmstPmNoX2xheW91 dC5uYl9jaGFubmVscywgaW5saW5rLT5zYW1wbGVfcmF0ZSwgMCwgRkZfRUJVUjEyOF9NT0RFX0kg fCBGRl9FQlVSMTI4X01PREVfUyB8IEZGX0VCVVIxMjhfTU9ERV9MUkEgfCBGRl9FQlVSMTI4X01P REVfU0FNUExFX1BFQUspOwotICAgIGlmICghcy0+cjEyOF9vdXQpCi0gICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7Ci0KLSAgICBpZiAoaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMg PT0gMSAmJiBzLT5kdWFsX21vbm8pIHsKLSAgICAgICAgZmZfZWJ1cjEyOF9zZXRfY2hhbm5lbChz LT5yMTI4X2luLCAgMCwgRkZfRUJVUjEyOF9EVUFMX01PTk8pOwotICAgICAgICBmZl9lYnVyMTI4 X3NldF9jaGFubmVsKHMtPnIxMjhfb3V0LCAwLCBGRl9FQlVSMTI4X0RVQUxfTU9OTyk7Ci0gICAg fQotCi0gICAgcy0+YnVmX3NpemUgPSBmcmFtZV9zaXplKGlubGluay0+c2FtcGxlX3JhdGUsIDMw MDApICogaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7Ci0gICAgcy0+YnVmID0gYXZfbWFs bG9jX2FycmF5KHMtPmJ1Zl9zaXplLCBzaXplb2YoKnMtPmJ1ZikpOwotICAgIGlmICghcy0+YnVm KQotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgcy0+bGltaXRlcl9idWZf c2l6ZSA9IGZyYW1lX3NpemUoaW5saW5rLT5zYW1wbGVfcmF0ZSwgMjEwKSAqIGlubGluay0+Y2hf bGF5b3V0Lm5iX2NoYW5uZWxzOwotICAgIHMtPmxpbWl0ZXJfYnVmID0gYXZfbWFsbG9jX2FycmF5 KHMtPmJ1Zl9zaXplLCBzaXplb2YoKnMtPmxpbWl0ZXJfYnVmKSk7Ci0gICAgaWYgKCFzLT5saW1p dGVyX2J1ZikKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgIHMtPnByZXZf c21wID0gYXZfbWFsbG9jX2FycmF5KGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzLCBzaXpl b2YoKnMtPnByZXZfc21wKSk7Ci0gICAgaWYgKCFzLT5wcmV2X3NtcCkKLSAgICAgICAgcmV0dXJu IEFWRVJST1IoRU5PTUVNKTsKLQotICAgIGluaXRfZ2F1c3NpYW5fZmlsdGVyKHMpOwotCi0gICAg cy0+YnVmX2luZGV4ID0KLSAgICBzLT5wcmV2X2J1Zl9pbmRleCA9Ci0gICAgcy0+bGltaXRlcl9i dWZfaW5kZXggPSAwOwotICAgIHMtPmNoYW5uZWxzID0gaW5saW5rLT5jaF9sYXlvdXQubmJfY2hh bm5lbHM7Ci0gICAgcy0+aW5kZXggPSAxOwotICAgIHMtPmxpbWl0ZXJfc3RhdGUgPSBPVVQ7Ci0g ICAgcy0+b2Zmc2V0ID0gcG93KDEwLiwgcy0+b2Zmc2V0IC8gMjAuKTsKLSAgICBzLT50YXJnZXRf dHAgPSBwb3coMTAuLCBzLT50YXJnZXRfdHAgLyAyMC4pOwotICAgIHMtPmF0dGFja19sZW5ndGgg PSBmcmFtZV9zaXplKGlubGluay0+c2FtcGxlX3JhdGUsIDEwKTsKLSAgICBzLT5yZWxlYXNlX2xl bmd0aCA9IGZyYW1lX3NpemUoaW5saW5rLT5zYW1wbGVfcmF0ZSwgMTAwKTsKLQotICAgIHJldHVy biAwOwotfQotCi1zdGF0aWMgYXZfY29sZCBpbnQgaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkK LXsKLSAgICBMb3VkTm9ybUNvbnRleHQgKnMgPSBjdHgtPnByaXY7Ci0gICAgcy0+ZnJhbWVfdHlw ZSA9IEZJUlNUX0ZSQU1FOwotCi0gICAgaWYgKHMtPmxpbmVhcikgewotICAgICAgICBkb3VibGUg b2Zmc2V0LCBvZmZzZXRfdHA7Ci0gICAgICAgIG9mZnNldCAgICA9IHMtPnRhcmdldF9pIC0gcy0+ bWVhc3VyZWRfaTsKLSAgICAgICAgb2Zmc2V0X3RwID0gcy0+bWVhc3VyZWRfdHAgKyBvZmZzZXQ7 Ci0KLSAgICAgICAgaWYgKHMtPm1lYXN1cmVkX3RwICE9IDk5ICYmIHMtPm1lYXN1cmVkX3RocmVz aCAhPSAtNzAgJiYgcy0+bWVhc3VyZWRfbHJhICE9IDAgJiYgcy0+bWVhc3VyZWRfaSAhPSAwKSB7 Ci0gICAgICAgICAgICBpZiAoKG9mZnNldF90cCA8PSBzLT50YXJnZXRfdHApICYmIChzLT5tZWFz dXJlZF9scmEgPD0gcy0+dGFyZ2V0X2xyYSkpIHsKLSAgICAgICAgICAgICAgICBzLT5mcmFtZV90 eXBlID0gTElORUFSX01PREU7Ci0gICAgICAgICAgICAgICAgcy0+b2Zmc2V0ID0gb2Zmc2V0Owot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBhdl9jb2xkIHZvaWQgdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQotewotICAgIExv dWROb3JtQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBkb3VibGUgaV9pbiwgaV9vdXQsIGxy YV9pbiwgbHJhX291dCwgdGhyZXNoX2luLCB0aHJlc2hfb3V0LCB0cF9pbiwgdHBfb3V0OwotICAg IGludCBjOwotCi0gICAgaWYgKCFzLT5yMTI4X2luIHx8ICFzLT5yMTI4X291dCkKLSAgICAgICAg Z290byBlbmQ7Ci0KLSAgICBmZl9lYnVyMTI4X2xvdWRuZXNzX3JhbmdlKHMtPnIxMjhfaW4sICZs cmFfaW4pOwotICAgIGZmX2VidXIxMjhfbG91ZG5lc3NfZ2xvYmFsKHMtPnIxMjhfaW4sICZpX2lu KTsKLSAgICBmZl9lYnVyMTI4X3JlbGF0aXZlX3RocmVzaG9sZChzLT5yMTI4X2luLCAmdGhyZXNo X2luKTsKLSAgICBmb3IgKGMgPSAwOyBjIDwgcy0+Y2hhbm5lbHM7IGMrKykgewotICAgICAgICBk b3VibGUgdG1wOwotICAgICAgICBmZl9lYnVyMTI4X3NhbXBsZV9wZWFrKHMtPnIxMjhfaW4sIGMs ICZ0bXApOwotICAgICAgICBpZiAoKGMgPT0gMCkgfHwgKHRtcCA+IHRwX2luKSkKLSAgICAgICAg ICAgIHRwX2luID0gdG1wOwotICAgIH0KLQotICAgIGZmX2VidXIxMjhfbG91ZG5lc3NfcmFuZ2Uo cy0+cjEyOF9vdXQsICZscmFfb3V0KTsKLSAgICBmZl9lYnVyMTI4X2xvdWRuZXNzX2dsb2JhbChz LT5yMTI4X291dCwgJmlfb3V0KTsKLSAgICBmZl9lYnVyMTI4X3JlbGF0aXZlX3RocmVzaG9sZChz LT5yMTI4X291dCwgJnRocmVzaF9vdXQpOwotICAgIGZvciAoYyA9IDA7IGMgPCBzLT5jaGFubmVs czsgYysrKSB7Ci0gICAgICAgIGRvdWJsZSB0bXA7Ci0gICAgICAgIGZmX2VidXIxMjhfc2FtcGxl X3BlYWsocy0+cjEyOF9vdXQsIGMsICZ0bXApOwotICAgICAgICBpZiAoKGMgPT0gMCkgfHwgKHRt cCA+IHRwX291dCkpCi0gICAgICAgICAgICB0cF9vdXQgPSB0bXA7Ci0gICAgfQotCi0gICAgc3dp dGNoKHMtPnByaW50X2Zvcm1hdCkgewotICAgIGNhc2UgTk9ORToKLSAgICAgICAgYnJlYWs7Ci0K LSAgICBjYXNlIEpTT046Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLAotICAgICAg ICAgICAgIlxue1xuIgotICAgICAgICAgICAgIlx0XCJpbnB1dF9pXCIgOiBcIiUuMmZcIixcbiIK LSAgICAgICAgICAgICJcdFwiaW5wdXRfdHBcIiA6IFwiJS4yZlwiLFxuIgotICAgICAgICAgICAg Ilx0XCJpbnB1dF9scmFcIiA6IFwiJS4yZlwiLFxuIgotICAgICAgICAgICAgIlx0XCJpbnB1dF90 aHJlc2hcIiA6IFwiJS4yZlwiLFxuIgotICAgICAgICAgICAgIlx0XCJvdXRwdXRfaVwiIDogXCIl LjJmXCIsXG4iCi0gICAgICAgICAgICAiXHRcIm91dHB1dF90cFwiIDogXCIlKy4yZlwiLFxuIgot ICAgICAgICAgICAgIlx0XCJvdXRwdXRfbHJhXCIgOiBcIiUuMmZcIixcbiIKLSAgICAgICAgICAg ICJcdFwib3V0cHV0X3RocmVzaFwiIDogXCIlLjJmXCIsXG4iCi0gICAgICAgICAgICAiXHRcIm5v cm1hbGl6YXRpb25fdHlwZVwiIDogXCIlc1wiLFxuIgotICAgICAgICAgICAgIlx0XCJ0YXJnZXRf b2Zmc2V0XCIgOiBcIiUuMmZcIlxuIgotICAgICAgICAgICAgIn1cbiIsCi0gICAgICAgICAgICBp X2luLAotICAgICAgICAgICAgMjAuICogbG9nMTAodHBfaW4pLAotICAgICAgICAgICAgbHJhX2lu LAotICAgICAgICAgICAgdGhyZXNoX2luLAotICAgICAgICAgICAgaV9vdXQsCi0gICAgICAgICAg ICAyMC4gKiBsb2cxMCh0cF9vdXQpLAotICAgICAgICAgICAgbHJhX291dCwKLSAgICAgICAgICAg IHRocmVzaF9vdXQsCi0gICAgICAgICAgICBzLT5mcmFtZV90eXBlID09IExJTkVBUl9NT0RFID8g ImxpbmVhciIgOiAiZHluYW1pYyIsCi0gICAgICAgICAgICBzLT50YXJnZXRfaSAtIGlfb3V0Ci0g ICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTVU1NQVJZOgotICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfSU5GTywKLSAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICJJ bnB1dCBJbnRlZ3JhdGVkOiAgICUrNi4xZiBMVUZTXG4iCi0gICAgICAgICAgICAiSW5wdXQgVHJ1 ZSBQZWFrOiAgICAlKzYuMWYgZEJUUFxuIgotICAgICAgICAgICAgIklucHV0IExSQTogICAgICAg ICAgJTYuMWYgTFVcbiIKLSAgICAgICAgICAgICJJbnB1dCBUaHJlc2hvbGQ6ICAgICUrNi4xZiBM VUZTXG4iCi0gICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAiT3V0cHV0IEludGVncmF0ZWQ6 ICAlKzYuMWYgTFVGU1xuIgotICAgICAgICAgICAgIk91dHB1dCBUcnVlIFBlYWs6ICAgJSs2LjFm IGRCVFBcbiIKLSAgICAgICAgICAgICJPdXRwdXQgTFJBOiAgICAgICAgICU2LjFmIExVXG4iCi0g ICAgICAgICAgICAiT3V0cHV0IFRocmVzaG9sZDogICAlKzYuMWYgTFVGU1xuIgotICAgICAgICAg ICAgIlxuIgotICAgICAgICAgICAgIk5vcm1hbGl6YXRpb24gVHlwZTogICAlc1xuIgotICAgICAg ICAgICAgIlRhcmdldCBPZmZzZXQ6ICAgICAgJSs2LjFmIExVXG4iLAotICAgICAgICAgICAgaV9p biwKLSAgICAgICAgICAgIDIwLiAqIGxvZzEwKHRwX2luKSwKLSAgICAgICAgICAgIGxyYV9pbiwK LSAgICAgICAgICAgIHRocmVzaF9pbiwKLSAgICAgICAgICAgIGlfb3V0LAotICAgICAgICAgICAg MjAuICogbG9nMTAodHBfb3V0KSwKLSAgICAgICAgICAgIGxyYV9vdXQsCi0gICAgICAgICAgICB0 aHJlc2hfb3V0LAotICAgICAgICAgICAgcy0+ZnJhbWVfdHlwZSA9PSBMSU5FQVJfTU9ERSA/ICJM aW5lYXIiIDogIkR5bmFtaWMiLAotICAgICAgICAgICAgcy0+dGFyZ2V0X2kgLSBpX291dAotICAg ICAgICApOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLWVuZDoKLSAgICBpZiAocy0+cjEyOF9p bikKLSAgICAgICAgZmZfZWJ1cjEyOF9kZXN0cm95KCZzLT5yMTI4X2luKTsKLSAgICBpZiAocy0+ cjEyOF9vdXQpCi0gICAgICAgIGZmX2VidXIxMjhfZGVzdHJveSgmcy0+cjEyOF9vdXQpOwotICAg IGF2X2ZyZWVwKCZzLT5saW1pdGVyX2J1Zik7Ci0gICAgYXZfZnJlZXAoJnMtPnByZXZfc21wKTsK LSAgICBhdl9mcmVlcCgmcy0+YnVmKTsKLX0KLQotc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIGF2 ZmlsdGVyX2FmX2xvdWRub3JtX2lucHV0c1tdID0gewotICAgIHsKLSAgICAgICAgLm5hbWUgICAg ICAgICA9ICJkZWZhdWx0IiwKLSAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9B VURJTywKLSAgICAgICAgLmNvbmZpZ19wcm9wcyA9IGNvbmZpZ19pbnB1dCwKLSAgICB9LAotfTsK LQotY29uc3QgQVZGaWx0ZXIgZmZfYWZfbG91ZG5vcm0gPSB7Ci0gICAgLm5hbWUgICAgICAgICAg PSAibG91ZG5vcm0iLAotICAgIC5kZXNjcmlwdGlvbiAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwo IkVCVSBSMTI4IGxvdWRuZXNzIG5vcm1hbGl6YXRpb24iKSwKLSAgICAucHJpdl9zaXplICAgICA9 IHNpemVvZihMb3VkTm9ybUNvbnRleHQpLAotICAgIC5wcml2X2NsYXNzICAgID0gJmxvdWRub3Jt X2NsYXNzLAotICAgIC5pbml0ICAgICAgICAgID0gaW5pdCwKLSAgICAuYWN0aXZhdGUgICAgICA9 IGFjdGl2YXRlLAotICAgIC51bmluaXQgICAgICAgID0gdW5pbml0LAotICAgIEZJTFRFUl9JTlBV VFMoYXZmaWx0ZXJfYWZfbG91ZG5vcm1faW5wdXRzKSwKLSAgICBGSUxURVJfT1VUUFVUUyhmZl9h dWRpb19kZWZhdWx0X2ZpbHRlcnBhZCksCi0gICAgRklMVEVSX1FVRVJZX0ZVTkMocXVlcnlfZm9y bWF0cyksCi19OwpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvZWJ1cjEyOC5jIGIvbGliYXZmaWx0 ZXIvZWJ1cjEyOC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjIwOTllMjA2Li4w MDAwMDAwMDAwCi0tLSBhL2xpYmF2ZmlsdGVyL2VidXIxMjguYworKysgL2Rldi9udWxsCkBAIC0x LDcyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDExIEphbiBLb2tlbcO8bGxlcgot ICoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK LSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK LSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqCi0gKiBUaGlzIGZpbGUgaXMgYmFz ZWQgb24gbGliZWJ1cjEyOCB3aGljaCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHBzOi8vZ2l0aHVi LmNvbS9qaWl4eWovbGliZWJ1cjEyOC8KLSAqCi0gKiBMaWJlYnVyMTI4IGhhcyB0aGUgZm9sbG93 aW5nIGNvcHlyaWdodDoKLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAot ICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUK LSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0qLwotCi0jaW5jbHVkZSAiZWJ1cjEyOC5oIgotCi0j aW5jbHVkZSA8ZmxvYXQuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxtYXRoLmg+ ICAgICAgICAgICAgICAgLyogWW91IG1heSBoYXZlIHRvIGRlZmluZSBfVVNFX01BVEhfREVGSU5F UyBpZiB5b3UgdXNlIE1TVkMgKi8KLQotI2luY2x1ZGUgImxpYmF2dXRpbC9lcnJvci5oIgotI2lu Y2x1ZGUgImxpYmF2dXRpbC9tYWNyb3MuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCi0j aW5jbHVkZSAibGliYXZ1dGlsL21lbV9pbnRlcm5hbC5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC90 aHJlYWQuaCIKLQotI2RlZmluZSBDSEVDS19FUlJPUihjb25kaXRpb24sIGVycm9yY29kZSwgZ290 b19wb2ludCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGNvbmRpdGlvbikp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgICAgIGVycmNvZGUgPSAoZXJyb3Jjb2RlKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIGdvdG9fcG9pbnQ7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICB9Ci0KLSNkZWZpbmUgQUxNT1NUX1pFUk8gMC4wMDAwMDEKLQotI2RlZmluZSBSRUxBVElWRV9H QVRFICAgICAgICAgKC0xMC4wKQotI2RlZmluZSBSRUxBVElWRV9HQVRFX0ZBQ1RPUiAgcG93KDEw LjAsIFJFTEFUSVZFX0dBVEUgLyAxMC4wKQotI2RlZmluZSBNSU5VU18yMERCICAgICAgICAgICAg cG93KDEwLjAsIC0yMC4wIC8gMTAuMCkKLQotc3RydWN0IEZGRUJVUjEyOFN0YXRlSW50ZXJuYWwg ewotICAgIC8qKiBGaWx0ZXJlZCBhdWRpbyBkYXRhICh1c2VkIGFzIHJpbmcgYnVmZmVyKS4gKi8K LSAgICBkb3VibGUgKmF1ZGlvX2RhdGE7Ci0gICAgLyoqIFNpemUgb2YgYXVkaW9fZGF0YSBhcnJh eS4gKi8KLSAgICBzaXplX3QgYXVkaW9fZGF0YV9mcmFtZXM7Ci0gICAgLyoqIEN1cnJlbnQgaW5k ZXggZm9yIGF1ZGlvX2RhdGEuICovCi0gICAgc2l6ZV90IGF1ZGlvX2RhdGFfaW5kZXg7Ci0gICAg LyoqIEhvdyBtYW55IGZyYW1lcyBhcmUgbmVlZGVkIGZvciBhIGdhdGluZyBibG9jay4gV2lsbCBj b3JyZXNwb25kIHRvIDQwMG1zCi0gICAgICogIG9mIGF1ZGlvIGF0IGluaXRpYWxpemF0aW9uLCBh bmQgMTAwbXMgYWZ0ZXIgdGhlIGZpcnN0IGJsb2NrICg3NSUgb3ZlcmxhcAotICAgICAqICBhcyBz cGVjaWZpZWQgaW4gdGhlIDIwMTEgcmV2aXNpb24gb2YgQlMxNzcwKS4gKi8KLSAgICB1bnNpZ25l ZCBsb25nIG5lZWRlZF9mcmFtZXM7Ci0gICAgLyoqIFRoZSBjaGFubmVsIG1hcC4gSGFzIGFzIG1h bnkgZWxlbWVudHMgYXMgdGhlcmUgYXJlIGNoYW5uZWxzLiAqLwotICAgIGludCAqY2hhbm5lbF9t YXA7Ci0gICAgLyoqIEhvdyBtYW55IHNhbXBsZXMgZml0IGluIDEwMG1zIChyb3VuZGVkKS4gKi8K LSAgICB1bnNpZ25lZCBsb25nIHNhbXBsZXNfaW5fMTAwbXM7Ci0gICAgLyoqIEJTLjE3NzAgZmls dGVyIGNvZWZmaWNpZW50cyAobm9taW5hdG9yKS4gKi8KLSAgICBkb3VibGUgYls1XTsKLSAgICAv KiogQlMuMTc3MCBmaWx0ZXIgY29lZmZpY2llbnRzIChkZW5vbWluYXRvcikuICovCi0gICAgZG91 YmxlIGFbNV07Ci0gICAgLyoqIEJTLjE3NzAgZmlsdGVyIHN0YXRlLiAqLwotICAgIGRvdWJsZSB2 WzVdWzVdOwotICAgIC8qKiBIaXN0b2dyYW1zLCB1c2VkIHRvIGNhbGN1bGF0ZSBMUkEuICovCi0g ICAgdW5zaWduZWQgbG9uZyAqYmxvY2tfZW5lcmd5X2hpc3RvZ3JhbTsKLSAgICB1bnNpZ25lZCBs b25nICpzaG9ydF90ZXJtX2Jsb2NrX2VuZXJneV9oaXN0b2dyYW07Ci0gICAgLyoqIEtlZXBzIHRy YWNrIG9mIHdoZW4gYSBuZXcgc2hvcnQgdGVybSBibG9jayBpcyBuZWVkZWQuICovCi0gICAgc2l6 ZV90IHNob3J0X3Rlcm1fZnJhbWVfY291bnRlcjsKLSAgICAvKiogTWF4aW11bSBzYW1wbGUgcGVh aywgb25lIHBlciBjaGFubmVsICovCi0gICAgZG91YmxlICpzYW1wbGVfcGVhazsKLSAgICAvKiog VGhlIG1heGltdW0gd2luZG93IGR1cmF0aW9uIGluIG1zLiAqLwotICAgIHVuc2lnbmVkIGxvbmcg d2luZG93OwotICAgIC8qKiBEYXRhIHBvaW50ZXIgYXJyYXkgZm9yIGludGVybGVhdmVkIGRhdGEg Ki8KLSAgICB2b2lkICoqZGF0YV9wdHJzOwotfTsKLQotc3RhdGljIEFWT25jZSBoaXN0b2dyYW1f aW5pdCA9IEFWX09OQ0VfSU5JVDsKLXN0YXRpYyBERUNMQVJFX0FMSUdORUQoMzIsIGRvdWJsZSwg aGlzdG9ncmFtX2VuZXJnaWVzKVsxMDAwXTsKLXN0YXRpYyBERUNMQVJFX0FMSUdORUQoMzIsIGRv dWJsZSwgaGlzdG9ncmFtX2VuZXJneV9ib3VuZGFyaWVzKVsxMDAxXTsKLQotc3RhdGljIHZvaWQg ZWJ1cjEyOF9pbml0X2ZpbHRlcihGRkVCVVIxMjhTdGF0ZSAqIHN0KQotewotICAgIGludCBpLCBq OwotCi0gICAgZG91YmxlIGYwID0gMTY4MS45NzQ0NTA5NTU1MzM7Ci0gICAgZG91YmxlIEcgPSAz Ljk5OTg0Mzg1Mzk3MzM0NzsKLSAgICBkb3VibGUgUSA9IDAuNzA3MTc1MjM2OTU1NDE5NjsKLQot ICAgIGRvdWJsZSBLID0gdGFuKE1fUEkgKiBmMCAvIChkb3VibGUpIHN0LT5zYW1wbGVyYXRlKTsK LSAgICBkb3VibGUgVmggPSBwb3coMTAuMCwgRyAvIDIwLjApOwotICAgIGRvdWJsZSBWYiA9IHBv dyhWaCwgMC40OTk2NjY3NzQxNTQ1NDE2KTsKLQotICAgIGRvdWJsZSBwYlszXSA9IHsgMC4wLCAw LjAsIDAuMCB9OwotICAgIGRvdWJsZSBwYVszXSA9IHsgMS4wLCAwLjAsIDAuMCB9OwotICAgIGRv dWJsZSByYlszXSA9IHsgMS4wLCAtMi4wLCAxLjAgfTsKLSAgICBkb3VibGUgcmFbM10gPSB7IDEu MCwgMC4wLCAwLjAgfTsKLQotICAgIGRvdWJsZSBhMCA9IDEuMCArIEsgLyBRICsgSyAqIEs7Ci0g ICAgcGJbMF0gPSAoVmggKyBWYiAqIEsgLyBRICsgSyAqIEspIC8gYTA7Ci0gICAgcGJbMV0gPSAy LjAgKiAoSyAqIEsgLSBWaCkgLyBhMDsKLSAgICBwYlsyXSA9IChWaCAtIFZiICogSyAvIFEgKyBL ICogSykgLyBhMDsKLSAgICBwYVsxXSA9IDIuMCAqIChLICogSyAtIDEuMCkgLyBhMDsKLSAgICBw YVsyXSA9ICgxLjAgLSBLIC8gUSArIEsgKiBLKSAvIGEwOwotCi0gICAgZjAgPSAzOC4xMzU0NzA4 NzYwMjQ0NDsKLSAgICBRID0gMC41MDAzMjcwMzczMjM4NzczOwotICAgIEsgPSB0YW4oTV9QSSAq IGYwIC8gKGRvdWJsZSkgc3QtPnNhbXBsZXJhdGUpOwotCi0gICAgcmFbMV0gPSAyLjAgKiAoSyAq IEsgLSAxLjApIC8gKDEuMCArIEsgLyBRICsgSyAqIEspOwotICAgIHJhWzJdID0gKDEuMCAtIEsg LyBRICsgSyAqIEspIC8gKDEuMCArIEsgLyBRICsgSyAqIEspOwotCi0gICAgc3QtPmQtPmJbMF0g PSBwYlswXSAqIHJiWzBdOwotICAgIHN0LT5kLT5iWzFdID0gcGJbMF0gKiByYlsxXSArIHBiWzFd ICogcmJbMF07Ci0gICAgc3QtPmQtPmJbMl0gPSBwYlswXSAqIHJiWzJdICsgcGJbMV0gKiByYlsx XSArIHBiWzJdICogcmJbMF07Ci0gICAgc3QtPmQtPmJbM10gPSBwYlsxXSAqIHJiWzJdICsgcGJb Ml0gKiByYlsxXTsKLSAgICBzdC0+ZC0+Yls0XSA9IHBiWzJdICogcmJbMl07Ci0KLSAgICBzdC0+ ZC0+YVswXSA9IHBhWzBdICogcmFbMF07Ci0gICAgc3QtPmQtPmFbMV0gPSBwYVswXSAqIHJhWzFd ICsgcGFbMV0gKiByYVswXTsKLSAgICBzdC0+ZC0+YVsyXSA9IHBhWzBdICogcmFbMl0gKyBwYVsx XSAqIHJhWzFdICsgcGFbMl0gKiByYVswXTsKLSAgICBzdC0+ZC0+YVszXSA9IHBhWzFdICogcmFb Ml0gKyBwYVsyXSAqIHJhWzFdOwotICAgIHN0LT5kLT5hWzRdID0gcGFbMl0gKiByYVsyXTsKLQot ICAgIGZvciAoaSA9IDA7IGkgPCA1OyArK2kpIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IDU7 ICsraikgewotICAgICAgICAgICAgc3QtPmQtPnZbaV1bal0gPSAwLjA7Ci0gICAgICAgIH0KLSAg ICB9Ci19Ci0KLXN0YXRpYyBpbnQgZWJ1cjEyOF9pbml0X2NoYW5uZWxfbWFwKEZGRUJVUjEyOFN0 YXRlICogc3QpCi17Ci0gICAgc2l6ZV90IGk7Ci0gICAgc3QtPmQtPmNoYW5uZWxfbWFwID0KLSAg ICAgICAgKGludCAqKSBhdl9tYWxsb2NfYXJyYXkoc3QtPmNoYW5uZWxzLCBzaXplb2YoKnN0LT5k LT5jaGFubmVsX21hcCkpOwotICAgIGlmICghc3QtPmQtPmNoYW5uZWxfbWFwKQotICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotICAgIGlmIChzdC0+Y2hhbm5lbHMgPT0gNCkgewotICAg ICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBbMF0gPSBGRl9FQlVSMTI4X0xFRlQ7Ci0gICAgICAgIHN0 LT5kLT5jaGFubmVsX21hcFsxXSA9IEZGX0VCVVIxMjhfUklHSFQ7Ci0gICAgICAgIHN0LT5kLT5j aGFubmVsX21hcFsyXSA9IEZGX0VCVVIxMjhfTEVGVF9TVVJST1VORDsKLSAgICAgICAgc3QtPmQt PmNoYW5uZWxfbWFwWzNdID0gRkZfRUJVUjEyOF9SSUdIVF9TVVJST1VORDsKLSAgICB9IGVsc2Ug aWYgKHN0LT5jaGFubmVscyA9PSA1KSB7Ci0gICAgICAgIHN0LT5kLT5jaGFubmVsX21hcFswXSA9 IEZGX0VCVVIxMjhfTEVGVDsKLSAgICAgICAgc3QtPmQtPmNoYW5uZWxfbWFwWzFdID0gRkZfRUJV UjEyOF9SSUdIVDsKLSAgICAgICAgc3QtPmQtPmNoYW5uZWxfbWFwWzJdID0gRkZfRUJVUjEyOF9D RU5URVI7Ci0gICAgICAgIHN0LT5kLT5jaGFubmVsX21hcFszXSA9IEZGX0VCVVIxMjhfTEVGVF9T VVJST1VORDsKLSAgICAgICAgc3QtPmQtPmNoYW5uZWxfbWFwWzRdID0gRkZfRUJVUjEyOF9SSUdI VF9TVVJST1VORDsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3QtPmNo YW5uZWxzOyArK2kpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoaSkgewotICAgICAgICAgICAgY2Fz ZSAwOgotICAgICAgICAgICAgICAgIHN0LT5kLT5jaGFubmVsX21hcFtpXSA9IEZGX0VCVVIxMjhf TEVGVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAg ICAgICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBbaV0gPSBGRl9FQlVSMTI4X1JJR0hUOwotICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAg IHN0LT5kLT5jaGFubmVsX21hcFtpXSA9IEZGX0VCVVIxMjhfQ0VOVEVSOwotICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIHN0LT5kLT5j aGFubmVsX21hcFtpXSA9IEZGX0VCVVIxMjhfVU5VU0VEOwotICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgIHN0LT5kLT5jaGFubmVsX21h cFtpXSA9IEZGX0VCVVIxMjhfTEVGVF9TVVJST1VORDsKLSAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBb aV0gPSBGRl9FQlVSMTI4X1JJR0hUX1NVUlJPVU5EOwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBb aV0gPSBGRl9FQlVSMTI4X1VOVVNFRDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGlu ZSB2b2lkIGluaXRfaGlzdG9ncmFtKHZvaWQpCi17Ci0gICAgaW50IGk7Ci0gICAgLyogaW5pdGlh bGl6ZSBzdGF0aWMgY29uc3RhbnRzICovCi0gICAgaGlzdG9ncmFtX2VuZXJneV9ib3VuZGFyaWVz WzBdID0gcG93KDEwLjAsICgtNzAuMCArIDAuNjkxKSAvIDEwLjApOwotICAgIGZvciAoaSA9IDA7 IGkgPCAxMDAwOyArK2kpIHsKLSAgICAgICAgaGlzdG9ncmFtX2VuZXJnaWVzW2ldID0KLSAgICAg ICAgICAgIHBvdygxMC4wLCAoKGRvdWJsZSkgaSAvIDEwLjAgLSA2OS45NSArIDAuNjkxKSAvIDEw LjApOwotICAgIH0KLSAgICBmb3IgKGkgPSAxOyBpIDwgMTAwMTsgKytpKSB7Ci0gICAgICAgIGhp c3RvZ3JhbV9lbmVyZ3lfYm91bmRhcmllc1tpXSA9Ci0gICAgICAgICAgICBwb3coMTAuMCwgKChk b3VibGUpIGkgLyAxMC4wIC0gNzAuMCArIDAuNjkxKSAvIDEwLjApOwotICAgIH0KLX0KLQotRkZF QlVSMTI4U3RhdGUgKmZmX2VidXIxMjhfaW5pdCh1bnNpZ25lZCBpbnQgY2hhbm5lbHMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2FtcGxlcmF0ZSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB3aW5kb3csIGludCBt b2RlKQotewotICAgIGludCBlcnJjb2RlOwotICAgIEZGRUJVUjEyOFN0YXRlICpzdDsKLQotICAg IHN0ID0gKEZGRUJVUjEyOFN0YXRlICopIGF2X21hbGxvYyhzaXplb2YoKnN0KSk7Ci0gICAgQ0hF Q0tfRVJST1IoIXN0LCAwLCBleGl0KQotICAgIHN0LT5kID0gKHN0cnVjdCBGRkVCVVIxMjhTdGF0 ZUludGVybmFsICopCi0gICAgICAgIGF2X21hbGxvYyhzaXplb2YoKnN0LT5kKSk7Ci0gICAgQ0hF Q0tfRVJST1IoIXN0LT5kLCAwLCBmcmVlX3N0YXRlKQotICAgIHN0LT5jaGFubmVscyA9IGNoYW5u ZWxzOwotICAgIGVycmNvZGUgPSBlYnVyMTI4X2luaXRfY2hhbm5lbF9tYXAoc3QpOwotICAgIENI RUNLX0VSUk9SKGVycmNvZGUsIDAsIGZyZWVfaW50ZXJuYWwpCi0KLSAgICBzdC0+ZC0+c2FtcGxl X3BlYWsgPQotICAgICAgICAoZG91YmxlICopIGF2X2NhbGxvYyhjaGFubmVscywgc2l6ZW9mKCpz dC0+ZC0+c2FtcGxlX3BlYWspKTsKLSAgICBDSEVDS19FUlJPUighc3QtPmQtPnNhbXBsZV9wZWFr LCAwLCBmcmVlX2NoYW5uZWxfbWFwKQotCi0gICAgc3QtPnNhbXBsZXJhdGUgPSBzYW1wbGVyYXRl OwotICAgIHN0LT5kLT5zYW1wbGVzX2luXzEwMG1zID0gKHN0LT5zYW1wbGVyYXRlICsgNSkgLyAx MDsKLSAgICBzdC0+bW9kZSA9IG1vZGU7Ci0gICAgaWYgKChtb2RlICYgRkZfRUJVUjEyOF9NT0RF X1MpID09IEZGX0VCVVIxMjhfTU9ERV9TKSB7Ci0gICAgICAgIHN0LT5kLT53aW5kb3cgPSBGRk1B WCh3aW5kb3csIDMwMDApOwotICAgIH0gZWxzZSBpZiAoKG1vZGUgJiBGRl9FQlVSMTI4X01PREVf TSkgPT0gRkZfRUJVUjEyOF9NT0RFX00pIHsKLSAgICAgICAgc3QtPmQtPndpbmRvdyA9IEZGTUFY KHdpbmRvdywgNDAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBnb3RvIGZyZWVfc2FtcGxlX3Bl YWs7Ci0gICAgfQotICAgIHN0LT5kLT5hdWRpb19kYXRhX2ZyYW1lcyA9IHN0LT5zYW1wbGVyYXRl ICogc3QtPmQtPndpbmRvdyAvIDEwMDA7Ci0gICAgaWYgKHN0LT5kLT5hdWRpb19kYXRhX2ZyYW1l cyAlIHN0LT5kLT5zYW1wbGVzX2luXzEwMG1zKSB7Ci0gICAgICAgIC8qIHJvdW5kIHVwIHRvIG11 bHRpcGxlIG9mIHNhbXBsZXNfaW5fMTAwbXMgKi8KLSAgICAgICAgc3QtPmQtPmF1ZGlvX2RhdGFf ZnJhbWVzID0gc3QtPmQtPmF1ZGlvX2RhdGFfZnJhbWVzCi0gICAgICAgICAgICArIHN0LT5kLT5z YW1wbGVzX2luXzEwMG1zCi0gICAgICAgICAgICAtIChzdC0+ZC0+YXVkaW9fZGF0YV9mcmFtZXMg JSBzdC0+ZC0+c2FtcGxlc19pbl8xMDBtcyk7Ci0gICAgfQotICAgIHN0LT5kLT5hdWRpb19kYXRh ID0KLSAgICAgICAgKGRvdWJsZSAqKSBhdl9jYWxsb2Moc3QtPmQtPmF1ZGlvX2RhdGFfZnJhbWVz LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+Y2hhbm5lbHMgKiBzaXplb2YoKnN0 LT5kLT5hdWRpb19kYXRhKSk7Ci0gICAgQ0hFQ0tfRVJST1IoIXN0LT5kLT5hdWRpb19kYXRhLCAw LCBmcmVlX3NhbXBsZV9wZWFrKQotCi0gICAgZWJ1cjEyOF9pbml0X2ZpbHRlcihzdCk7Ci0KLSAg ICBzdC0+ZC0+YmxvY2tfZW5lcmd5X2hpc3RvZ3JhbSA9Ci0gICAgICAgIGF2X21hbGxvY3ooMTAw MCAqIHNpemVvZigqc3QtPmQtPmJsb2NrX2VuZXJneV9oaXN0b2dyYW0pKTsKLSAgICBDSEVDS19F UlJPUighc3QtPmQtPmJsb2NrX2VuZXJneV9oaXN0b2dyYW0sIDAsIGZyZWVfYXVkaW9fZGF0YSkK LSAgICBzdC0+ZC0+c2hvcnRfdGVybV9ibG9ja19lbmVyZ3lfaGlzdG9ncmFtID0KLSAgICAgICAg YXZfbWFsbG9jeigxMDAwICogc2l6ZW9mKCpzdC0+ZC0+c2hvcnRfdGVybV9ibG9ja19lbmVyZ3lf aGlzdG9ncmFtKSk7Ci0gICAgQ0hFQ0tfRVJST1IoIXN0LT5kLT5zaG9ydF90ZXJtX2Jsb2NrX2Vu ZXJneV9oaXN0b2dyYW0sIDAsCi0gICAgICAgICAgICAgICAgZnJlZV9ibG9ja19lbmVyZ3lfaGlz dG9ncmFtKQotICAgIHN0LT5kLT5zaG9ydF90ZXJtX2ZyYW1lX2NvdW50ZXIgPSAwOwotCi0gICAg LyogdGhlIGZpcnN0IGJsb2NrIG5lZWRzIDQwMG1zIG9mIGF1ZGlvIGRhdGEgKi8KLSAgICBzdC0+ ZC0+bmVlZGVkX2ZyYW1lcyA9IHN0LT5kLT5zYW1wbGVzX2luXzEwMG1zICogNDsKLSAgICAvKiBz dGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KLSAgICBzdC0+ZC0+YXVkaW9f ZGF0YV9pbmRleCA9IDA7Ci0KLSAgICBpZiAoZmZfdGhyZWFkX29uY2UoJmhpc3RvZ3JhbV9pbml0 LCAmaW5pdF9oaXN0b2dyYW0pICE9IDApCi0gICAgICAgIGdvdG8gZnJlZV9zaG9ydF90ZXJtX2Js b2NrX2VuZXJneV9oaXN0b2dyYW07Ci0KLSAgICBzdC0+ZC0+ZGF0YV9wdHJzID0gYXZfbWFsbG9j X2FycmF5KGNoYW5uZWxzLCBzaXplb2YoKnN0LT5kLT5kYXRhX3B0cnMpKTsKLSAgICBDSEVDS19F UlJPUighc3QtPmQtPmRhdGFfcHRycywgMCwKLSAgICAgICAgICAgICAgICBmcmVlX3Nob3J0X3Rl cm1fYmxvY2tfZW5lcmd5X2hpc3RvZ3JhbSk7Ci0KLSAgICByZXR1cm4gc3Q7Ci0KLWZyZWVfc2hv cnRfdGVybV9ibG9ja19lbmVyZ3lfaGlzdG9ncmFtOgotICAgIGF2X2ZyZWUoc3QtPmQtPnNob3J0 X3Rlcm1fYmxvY2tfZW5lcmd5X2hpc3RvZ3JhbSk7Ci1mcmVlX2Jsb2NrX2VuZXJneV9oaXN0b2dy YW06Ci0gICAgYXZfZnJlZShzdC0+ZC0+YmxvY2tfZW5lcmd5X2hpc3RvZ3JhbSk7Ci1mcmVlX2F1 ZGlvX2RhdGE6Ci0gICAgYXZfZnJlZShzdC0+ZC0+YXVkaW9fZGF0YSk7Ci1mcmVlX3NhbXBsZV9w ZWFrOgotICAgIGF2X2ZyZWUoc3QtPmQtPnNhbXBsZV9wZWFrKTsKLWZyZWVfY2hhbm5lbF9tYXA6 Ci0gICAgYXZfZnJlZShzdC0+ZC0+Y2hhbm5lbF9tYXApOwotZnJlZV9pbnRlcm5hbDoKLSAgICBh dl9mcmVlKHN0LT5kKTsKLWZyZWVfc3RhdGU6Ci0gICAgYXZfZnJlZShzdCk7Ci1leGl0OgotICAg IHJldHVybiBOVUxMOwotfQotCi12b2lkIGZmX2VidXIxMjhfZGVzdHJveShGRkVCVVIxMjhTdGF0 ZSAqKiBzdCkKLXsKLSAgICBhdl9mcmVlKCgqc3QpLT5kLT5ibG9ja19lbmVyZ3lfaGlzdG9ncmFt KTsKLSAgICBhdl9mcmVlKCgqc3QpLT5kLT5zaG9ydF90ZXJtX2Jsb2NrX2VuZXJneV9oaXN0b2dy YW0pOwotICAgIGF2X2ZyZWUoKCpzdCktPmQtPmF1ZGlvX2RhdGEpOwotICAgIGF2X2ZyZWUoKCpz dCktPmQtPmNoYW5uZWxfbWFwKTsKLSAgICBhdl9mcmVlKCgqc3QpLT5kLT5zYW1wbGVfcGVhayk7 Ci0gICAgYXZfZnJlZSgoKnN0KS0+ZC0+ZGF0YV9wdHJzKTsKLSAgICBhdl9mcmVlKCgqc3QpLT5k KTsKLSAgICBhdl9mcmVlKCpzdCk7Ci0gICAgKnN0ID0gTlVMTDsKLX0KLQotI2RlZmluZSBFQlVS MTI4X0ZJTFRFUih0eXBlLCBzY2FsaW5nX2ZhY3RvcikgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi1zdGF0aWMgdm9pZCBlYnVyMTI4X2ZpbHRlcl8jI3R5cGUoRkZFQlVS MTI4U3RhdGUqIHN0LCBjb25zdCB0eXBlKiogc3JjcywgICAgICAgICAgIFwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3JjX2luZGV4LCBzaXplX3QgZnJhbWVzLCAg ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBz dHJpZGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG91Ymxl KiBhdWRpb19kYXRhID0gc3QtPmQtPmF1ZGlvX2RhdGEgKyBzdC0+ZC0+YXVkaW9fZGF0YV9pbmRl eDsgICAgICAgICAgICAgIFwKLSAgICBzaXplX3QgaSwgYzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChzdC0+bW9kZSAmIEZGX0VCVVIxMjhfTU9ERV9T QU1QTEVfUEVBSykgPT0gRkZfRUJVUjEyOF9NT0RFX1NBTVBMRV9QRUFLKSB7IFwKLSAgICAgICAg Zm9yIChjID0gMDsgYyA8IHN0LT5jaGFubmVsczsgKytjKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZG91YmxlIG1heCA9IDAuMDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0eXBlIHYgPSBzcmNzW2NdW3Ny Y19pbmRleCArIGkgKiBzdHJpZGVdOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICAgICAgICAgIGlmICh2ID4gbWF4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIG1heCA9ICAgICAgICB2 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKC12ID4gbWF4KSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBtYXggPSAtMS4wICog djsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg ICAgICAgICAgbWF4IC89IHNjYWxpbmdfZmFjdG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAobWF4ID4gc3QtPmQtPnNh bXBsZV9wZWFrW2NdKSBzdC0+ZC0+c2FtcGxlX3BlYWtbY10gPSBtYXg7ICAgICAgICAgIFwKLSAg ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgZm9yIChjID0gMDsgYyA8IHN0LT5jaGFubmVsczsgKytjKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaW50IGNpID0gc3QtPmQtPmNoYW5u ZWxfbWFwW2NdIC0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgICBpZiAoY2kgPCAwKSBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVsc2UgaWYgKGNpID09IEZGX0VC VVIxMjhfRFVBTF9NT05PIC0gMSkgY2kgPSAwOyAvKmR1YWwgbW9ubyAqLyAgICAgICAgICAgIFwK LSAgICAgICAgZm9yIChpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgc3QtPmQtPnZbY2ldWzBd ID0gKGRvdWJsZSkgKHNyY3NbY11bc3JjX2luZGV4ICsgaSAqIHN0cmlkZV0gLyBzY2FsaW5nX2Zh Y3RvcikgXAotICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3QtPmQtPmFbMV0gKiBzdC0+ZC0+ dltjaV1bMV0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAg ICAgICAgLSBzdC0+ZC0+YVsyXSAqIHN0LT5kLT52W2NpXVsyXSAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0LT5kLT5hWzNdICogc3QtPmQt PnZbY2ldWzNdICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAg ICAgICAgIC0gc3QtPmQtPmFbNF0gKiBzdC0+ZC0+dltjaV1bNF07ICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgICAgICAgICBhdWRpb19kYXRhW2kgKiBzdC0+Y2hhbm5lbHMgKyBjXSA9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0LT5kLT5iWzBdICogc3QtPmQtPnZbY2ldWzBdICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICsgc3QtPmQtPmJbMV0gKiBzdC0+ ZC0+dltjaV1bMV0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg ICAgICAgICAgKyBzdC0+ZC0+YlsyXSAqIHN0LT5kLT52W2NpXVsyXSAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICArIHN0LT5kLT5iWzNdICogc3Qt PmQtPnZbY2ldWzNdICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg ICAgICAgICAgICsgc3QtPmQtPmJbNF0gKiBzdC0+ZC0+dltjaV1bNF07ICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgICAgICAgICBzdC0+ZC0+dltjaV1bNF0gPSBzdC0+ZC0+dltjaV1b M107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHN0 LT5kLT52W2NpXVszXSA9IHN0LT5kLT52W2NpXVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICAgICAgc3QtPmQtPnZbY2ldWzJdID0gc3QtPmQtPnZbY2ld WzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBz dC0+ZC0+dltjaV1bMV0gPSBzdC0+ZC0+dltjaV1bMF07ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBzdC0+ ZC0+dltjaV1bNF0gPSBmYWJzKHN0LT5kLT52W2NpXVs0XSkgPCBEQkxfTUlOID8gMC4wIDogc3Qt PmQtPnZbY2ldWzRdOyBcCi0gICAgICAgIHN0LT5kLT52W2NpXVszXSA9IGZhYnMoc3QtPmQtPnZb Y2ldWzNdKSA8IERCTF9NSU4gPyAwLjAgOiBzdC0+ZC0+dltjaV1bM107IFwKLSAgICAgICAgc3Qt PmQtPnZbY2ldWzJdID0gZmFicyhzdC0+ZC0+dltjaV1bMl0pIDwgREJMX01JTiA/IDAuMCA6IHN0 LT5kLT52W2NpXVsyXTsgXAotICAgICAgICBzdC0+ZC0+dltjaV1bMV0gPSBmYWJzKHN0LT5kLT52 W2NpXVsxXSkgPCBEQkxfTUlOID8gMC4wIDogc3QtPmQtPnZbY2ldWzFdOyBcCi0gICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLX0KLUVCVVIxMjhfRklMVEVSKGRvdWJsZSwgMS4wKQotCi1zdGF0 aWMgZG91YmxlIGVidXIxMjhfZW5lcmd5X3RvX2xvdWRuZXNzKGRvdWJsZSBlbmVyZ3kpCi17Ci0g ICAgcmV0dXJuIDEwICogbG9nMTAoZW5lcmd5KSAtIDAuNjkxOwotfQotCi1zdGF0aWMgc2l6ZV90 IGZpbmRfaGlzdG9ncmFtX2luZGV4KGRvdWJsZSBlbmVyZ3kpCi17Ci0gICAgc2l6ZV90IGluZGV4 X21pbiA9IDA7Ci0gICAgc2l6ZV90IGluZGV4X21heCA9IDEwMDA7Ci0gICAgc2l6ZV90IGluZGV4 X21pZDsKLQotICAgIGRvIHsKLSAgICAgICAgaW5kZXhfbWlkID0gKGluZGV4X21pbiArIGluZGV4 X21heCkgLyAyOwotICAgICAgICBpZiAoZW5lcmd5ID49IGhpc3RvZ3JhbV9lbmVyZ3lfYm91bmRh cmllc1tpbmRleF9taWRdKSB7Ci0gICAgICAgICAgICBpbmRleF9taW4gPSBpbmRleF9taWQ7Ci0g ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbmRleF9tYXggPSBpbmRleF9taWQ7Ci0gICAg ICAgIH0KLSAgICB9IHdoaWxlIChpbmRleF9tYXggLSBpbmRleF9taW4gIT0gMSk7Ci0KLSAgICBy ZXR1cm4gaW5kZXhfbWluOwotfQotCi1zdGF0aWMgdm9pZCBlYnVyMTI4X2NhbGNfZ2F0aW5nX2Js b2NrKEZGRUJVUjEyOFN0YXRlICogc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBmcmFtZXNfcGVyX2Jsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkb3VibGUgKm9wdGlvbmFsX291dHB1dCkKLXsKLSAgICBzaXplX3QgaSwg YzsKLSAgICBkb3VibGUgc3VtID0gMC4wOwotICAgIGRvdWJsZSBjaGFubmVsX3N1bTsKLSAgICBm b3IgKGMgPSAwOyBjIDwgc3QtPmNoYW5uZWxzOyArK2MpIHsKLSAgICAgICAgaWYgKHN0LT5kLT5j aGFubmVsX21hcFtjXSA9PSBGRl9FQlVSMTI4X1VOVVNFRCkKLSAgICAgICAgICAgIGNvbnRpbnVl OwotICAgICAgICBjaGFubmVsX3N1bSA9IDAuMDsKLSAgICAgICAgaWYgKHN0LT5kLT5hdWRpb19k YXRhX2luZGV4IDwgZnJhbWVzX3Blcl9ibG9jayAqIHN0LT5jaGFubmVscykgewotICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IHN0LT5kLT5hdWRpb19kYXRhX2luZGV4IC8gc3QtPmNoYW5uZWxz OyArK2kpIHsKLSAgICAgICAgICAgICAgICBjaGFubmVsX3N1bSArPSBzdC0+ZC0+YXVkaW9fZGF0 YVtpICogc3QtPmNoYW5uZWxzICsgY10gKgotICAgICAgICAgICAgICAgICAgICBzdC0+ZC0+YXVk aW9fZGF0YVtpICogc3QtPmNoYW5uZWxzICsgY107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBmb3IgKGkgPSBzdC0+ZC0+YXVkaW9fZGF0YV9mcmFtZXMgLQotICAgICAgICAgICAgICAgICAo ZnJhbWVzX3Blcl9ibG9jayAtCi0gICAgICAgICAgICAgICAgICBzdC0+ZC0+YXVkaW9fZGF0YV9p bmRleCAvIHN0LT5jaGFubmVscyk7Ci0gICAgICAgICAgICAgICAgIGkgPCBzdC0+ZC0+YXVkaW9f ZGF0YV9mcmFtZXM7ICsraSkgewotICAgICAgICAgICAgICAgIGNoYW5uZWxfc3VtICs9IHN0LT5k LT5hdWRpb19kYXRhW2kgKiBzdC0+Y2hhbm5lbHMgKyBjXSAqCi0gICAgICAgICAgICAgICAgICAg IHN0LT5kLT5hdWRpb19kYXRhW2kgKiBzdC0+Y2hhbm5lbHMgKyBjXTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaSA9Ci0gICAgICAgICAgICAgICAg IHN0LT5kLT5hdWRpb19kYXRhX2luZGV4IC8gc3QtPmNoYW5uZWxzIC0gZnJhbWVzX3Blcl9ibG9j azsKLSAgICAgICAgICAgICAgICAgaSA8IHN0LT5kLT5hdWRpb19kYXRhX2luZGV4IC8gc3QtPmNo YW5uZWxzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBjaGFubmVsX3N1bSArPQotICAgICAgICAg ICAgICAgICAgICBzdC0+ZC0+YXVkaW9fZGF0YVtpICogc3QtPmNoYW5uZWxzICsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY10gKiBzdC0+ZC0+YXVkaW9fZGF0YVtpICoK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdC0+Y2hhbm5lbHMgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgICAgIGlmIChzdC0+ZC0+Y2hhbm5lbF9tYXBbY10gPT0gRkZfRUJVUjEyOF9NcDExMCB8fAot ICAgICAgICAgICAgc3QtPmQtPmNoYW5uZWxfbWFwW2NdID09IEZGX0VCVVIxMjhfTW0xMTAgfHwK LSAgICAgICAgICAgIHN0LT5kLT5jaGFubmVsX21hcFtjXSA9PSBGRl9FQlVSMTI4X01wMDYwIHx8 Ci0gICAgICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBbY10gPT0gRkZfRUJVUjEyOF9NbTA2MCB8 fAotICAgICAgICAgICAgc3QtPmQtPmNoYW5uZWxfbWFwW2NdID09IEZGX0VCVVIxMjhfTXAwOTAg fHwKLSAgICAgICAgICAgIHN0LT5kLT5jaGFubmVsX21hcFtjXSA9PSBGRl9FQlVSMTI4X01tMDkw KSB7Ci0gICAgICAgICAgICBjaGFubmVsX3N1bSAqPSAxLjQxOwotICAgICAgICB9IGVsc2UgaWYg KHN0LT5kLT5jaGFubmVsX21hcFtjXSA9PSBGRl9FQlVSMTI4X0RVQUxfTU9OTykgewotICAgICAg ICAgICAgY2hhbm5lbF9zdW0gKj0gMi4wOwotICAgICAgICB9Ci0gICAgICAgIHN1bSArPSBjaGFu bmVsX3N1bTsKLSAgICB9Ci0gICAgc3VtIC89IChkb3VibGUpIGZyYW1lc19wZXJfYmxvY2s7Ci0g ICAgaWYgKG9wdGlvbmFsX291dHB1dCkgewotICAgICAgICAqb3B0aW9uYWxfb3V0cHV0ID0gc3Vt OwotICAgIH0gZWxzZSBpZiAoc3VtID49IGhpc3RvZ3JhbV9lbmVyZ3lfYm91bmRhcmllc1swXSkg ewotICAgICAgICArK3N0LT5kLT5ibG9ja19lbmVyZ3lfaGlzdG9ncmFtW2ZpbmRfaGlzdG9ncmFt X2luZGV4KHN1bSldOwotICAgIH0KLX0KLQotaW50IGZmX2VidXIxMjhfc2V0X2NoYW5uZWwoRkZF QlVSMTI4U3RhdGUgKiBzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBjaGFubmVsX251bWJlciwgaW50IHZhbHVlKQotewotICAgIGlmIChjaGFubmVsX251bWJlciA+ PSBzdC0+Y2hhbm5lbHMpIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIGlmICh2YWx1 ZSA9PSBGRl9FQlVSMTI4X0RVQUxfTU9OTyAmJgotICAgICAgICAoc3QtPmNoYW5uZWxzICE9IDEg fHwgY2hhbm5lbF9udW1iZXIgIT0gMCkpIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAg IHN0LT5kLT5jaGFubmVsX21hcFtjaGFubmVsX251bWJlcl0gPSB2YWx1ZTsKLSAgICByZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBlYnVyMTI4X2VuZXJneV9zaG9ydHRlcm0oRkZFQlVSMTI4U3Rh dGUgKiBzdCwgZG91YmxlICpvdXQpOwotI2RlZmluZSBFQlVSMTI4X0FERF9GUkFNRVNfUExBTkFS KHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot c3RhdGljIHZvaWQgZWJ1cjEyOF9hZGRfZnJhbWVzX3BsYW5hcl8jI3R5cGUoRkZFQlVSMTI4U3Rh dGUqIHN0LCBjb25zdCB0eXBlKiogc3JjcywgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IGZyYW1lcywgaW50IHN0cmlkZSkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIHNpemVfdCBzcmNfaW5kZXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChmcmFt ZXMgPiAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoZnJhbWVzID49IHN0LT5kLT5uZWVkZWRfZnJh bWVzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICAgICAgZWJ1cjEyOF9maWx0ZXJfIyN0eXBlKHN0LCBzcmNzLCBzcmNfaW5kZXgsIHN0LT5kLT5u ZWVkZWRfZnJhbWVzLCBzdHJpZGUpOyAgXAotICAgICAgICAgICAgc3JjX2luZGV4ICs9IHN0LT5k LT5uZWVkZWRfZnJhbWVzICogc3RyaWRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotICAgICAgICAgICAgZnJhbWVzIC09IHN0LT5kLT5uZWVkZWRfZnJhbWVzOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgc3QtPmQtPmF1 ZGlvX2RhdGFfaW5kZXggKz0gc3QtPmQtPm5lZWRlZF9mcmFtZXMgKiBzdC0+Y2hhbm5lbHM7ICAg ICAgICAgICAgXAotICAgICAgICAgICAgLyogY2FsY3VsYXRlIHRoZSBuZXcgZ2F0aW5nIGJsb2Nr ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg aWYgKChzdC0+bW9kZSAmIEZGX0VCVVIxMjhfTU9ERV9JKSA9PSBGRl9FQlVSMTI4X01PREVfSSkg eyAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGVidXIxMjhfY2FsY19nYXRpbmdf YmxvY2soc3QsIHN0LT5kLT5zYW1wbGVzX2luXzEwMG1zICogNCwgTlVMTCk7ICAgICAgXAotICAg ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKChzdC0+bW9kZSAm IEZGX0VCVVIxMjhfTU9ERV9MUkEpID09IEZGX0VCVVIxMjhfTU9ERV9MUkEpIHsgICAgICAgICAg ICAgXAotICAgICAgICAgICAgICAgIHN0LT5kLT5zaG9ydF90ZXJtX2ZyYW1lX2NvdW50ZXIgKz0g c3QtPmQtPm5lZWRlZF9mcmFtZXM7ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlm IChzdC0+ZC0+c2hvcnRfdGVybV9mcmFtZV9jb3VudGVyID09IHN0LT5kLT5zYW1wbGVzX2luXzEw MG1zICogMzApIHsgXAotICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3RfZW5lcmd5OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg ICAgICAgICAgICBlYnVyMTI4X2VuZXJneV9zaG9ydHRlcm0oc3QsICZzdF9lbmVyZ3kpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBpZiAoc3RfZW5lcmd5 ID49IGhpc3RvZ3JhbV9lbmVyZ3lfYm91bmRhcmllc1swXSkgeyAgICAgICAgICAgICAgICAgXAot ICAgICAgICAgICAgICAgICAgICAgICAgKytzdC0+ZC0+c2hvcnRfdGVybV9ibG9ja19lbmVyZ3lf aGlzdG9ncmFtWyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRfaGlzdG9ncmFtX2luZGV4KHN0X2VuZXJn eSldOyAgXAotICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg ICAgICBzdC0+ZC0+c2hvcnRfdGVybV9mcmFtZV9jb3VudGVyID0gc3QtPmQtPnNhbXBsZXNfaW5f MTAwbXMgKiAyMDsgICAgXAotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgLyogMTAwbXMgYXJlIG5lZWRl ZCBmb3IgYWxsIGJsb2NrcyBiZXNpZGVzIHRoZSBmaXJzdCBvbmUgKi8gICAgICAgICAgICAgICAg XAotICAgICAgICAgICAgc3QtPmQtPm5lZWRlZF9mcmFtZXMgPSBzdC0+ZC0+c2FtcGxlc19pbl8x MDBtczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgLyogcmVzZXQg YXVkaW9fZGF0YV9pbmRleCB3aGVuIGJ1ZmZlciBmdWxsICovICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICAgICAgaWYgKHN0LT5kLT5hdWRpb19kYXRhX2luZGV4ID09IHN0 LT5kLT5hdWRpb19kYXRhX2ZyYW1lcyAqIHN0LT5jaGFubmVscykgeyAgXAotICAgICAgICAgICAg ICAgIHN0LT5kLT5hdWRpb19kYXRhX2luZGV4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZWJ1cjEyOF9maWx0ZXJf IyN0eXBlKHN0LCBzcmNzLCBzcmNfaW5kZXgsIGZyYW1lcywgc3RyaWRlKTsgICAgICAgICAgICAg ICAgXAotICAgICAgICAgICAgc3QtPmQtPmF1ZGlvX2RhdGFfaW5kZXggKz0gZnJhbWVzICogc3Qt PmNoYW5uZWxzOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKChz dC0+bW9kZSAmIEZGX0VCVVIxMjhfTU9ERV9MUkEpID09IEZGX0VCVVIxMjhfTU9ERV9MUkEpIHsg ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHN0LT5kLT5zaG9ydF90ZXJtX2ZyYW1lX2Nv dW50ZXIgKz0gZnJhbWVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgc3QtPmQtPm5lZWRlZF9mcmFtZXMg LT0gZnJhbWVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgICAgICAgZnJhbWVzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotRUJVUjEyOF9BRERf RlJBTUVTX1BMQU5BUihkb3VibGUpCi0jZGVmaW5lIEZGX0VCVVIxMjhfQUREX0ZSQU1FUyh0eXBl KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotdm9pZCBmZl9l YnVyMTI4X2FkZF9mcmFtZXNfIyN0eXBlKEZGRUJVUjEyOFN0YXRlKiBzdCwgY29uc3QgdHlwZSog c3JjLCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBmcmFtZXMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGludCBpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICBjb25zdCB0eXBlICoqYnVmID0gKGNvbnN0IHR5cGUqKilzdC0+ZC0+ZGF0YV9w dHJzOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZm9yIChpID0gMDsgaSA8IHN0LT5j aGFubmVsczsgaSsrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0gICAgYnVmW2ldID0gc3JjICsgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBlYnVyMTI4X2FkZF9mcmFtZXNfcGxhbmFyXyMj dHlwZShzdCwgYnVmLCBmcmFtZXMsIHN0LT5jaGFubmVscyk7ICAgICAgICAgICAgIFwKLX0KLUZG X0VCVVIxMjhfQUREX0ZSQU1FUyhkb3VibGUpCi0KLXN0YXRpYyBpbnQgZWJ1cjEyOF9jYWxjX3Jl bGF0aXZlX3RocmVzaG9sZChGRkVCVVIxMjhTdGF0ZSAqKnN0cywgc2l6ZV90IHNpemUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpyZWxhdGl2ZV90 aHJlc2hvbGQpCi17Ci0gICAgc2l6ZV90IGksIGo7Ci0gICAgaW50IGFib3ZlX3RocmVzaF9jb3Vu dGVyID0gMDsKLSAgICAqcmVsYXRpdmVfdGhyZXNob2xkID0gMC4wOwotCi0gICAgZm9yIChpID0g MDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICB1bnNpZ25lZCBsb25nICpibG9ja19lbmVyZ3lf aGlzdG9ncmFtID0gc3RzW2ldLT5kLT5ibG9ja19lbmVyZ3lfaGlzdG9ncmFtOwotICAgICAgICBm b3IgKGogPSAwOyBqIDwgMTAwMDsgKytqKSB7Ci0gICAgICAgICAgICAqcmVsYXRpdmVfdGhyZXNo b2xkICs9IGJsb2NrX2VuZXJneV9oaXN0b2dyYW1bal0gKiBoaXN0b2dyYW1fZW5lcmdpZXNbal07 Ci0gICAgICAgICAgICBhYm92ZV90aHJlc2hfY291bnRlciArPSBibG9ja19lbmVyZ3lfaGlzdG9n cmFtW2pdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFib3ZlX3RocmVzaF9jb3VudGVy ICE9IDApIHsKLSAgICAgICAgKnJlbGF0aXZlX3RocmVzaG9sZCAvPSAoZG91YmxlKWFib3ZlX3Ro cmVzaF9jb3VudGVyOwotICAgICAgICAqcmVsYXRpdmVfdGhyZXNob2xkICo9IFJFTEFUSVZFX0dB VEVfRkFDVE9SOwotICAgIH0KLQotICAgIHJldHVybiBhYm92ZV90aHJlc2hfY291bnRlcjsKLX0K LQotc3RhdGljIGludCBlYnVyMTI4X2dhdGVkX2xvdWRuZXNzKEZGRUJVUjEyOFN0YXRlICoqIHN0 cywgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl ICpvdXQpCi17Ci0gICAgZG91YmxlIGdhdGVkX2xvdWRuZXNzID0gMC4wOwotICAgIGRvdWJsZSBy ZWxhdGl2ZV90aHJlc2hvbGQ7Ci0gICAgc2l6ZV90IGFib3ZlX3RocmVzaF9jb3VudGVyOwotICAg IHNpemVfdCBpLCBqLCBzdGFydF9pbmRleDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBp KyspCi0gICAgICAgIGlmICgoc3RzW2ldLT5tb2RlICYgRkZfRUJVUjEyOF9NT0RFX0kpICE9IEZG X0VCVVIxMjhfTU9ERV9JKQotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLQot ICAgIGlmICghZWJ1cjEyOF9jYWxjX3JlbGF0aXZlX3RocmVzaG9sZChzdHMsIHNpemUsICZyZWxh dGl2ZV90aHJlc2hvbGQpKSB7Ci0gICAgICAgICpvdXQgPSAtSFVHRV9WQUw7Ci0gICAgICAgIHJl dHVybiAwOwotICAgIH0KLQotICAgIGFib3ZlX3RocmVzaF9jb3VudGVyID0gMDsKLSAgICBpZiAo cmVsYXRpdmVfdGhyZXNob2xkIDwgaGlzdG9ncmFtX2VuZXJneV9ib3VuZGFyaWVzWzBdKSB7Ci0g ICAgICAgIHN0YXJ0X2luZGV4ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGFydF9pbmRl eCA9IGZpbmRfaGlzdG9ncmFtX2luZGV4KHJlbGF0aXZlX3RocmVzaG9sZCk7Ci0gICAgICAgIGlm IChyZWxhdGl2ZV90aHJlc2hvbGQgPiBoaXN0b2dyYW1fZW5lcmdpZXNbc3RhcnRfaW5kZXhdKSB7 Ci0gICAgICAgICAgICArK3N0YXJ0X2luZGV4OwotICAgICAgICB9Ci0gICAgfQotICAgIGZvciAo aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgZm9yIChqID0gc3RhcnRfaW5kZXg7IGog PCAxMDAwOyArK2opIHsKLSAgICAgICAgICAgIGdhdGVkX2xvdWRuZXNzICs9IHN0c1tpXS0+ZC0+ YmxvY2tfZW5lcmd5X2hpc3RvZ3JhbVtqXSAqCi0gICAgICAgICAgICAgICAgaGlzdG9ncmFtX2Vu ZXJnaWVzW2pdOwotICAgICAgICAgICAgYWJvdmVfdGhyZXNoX2NvdW50ZXIgKz0gc3RzW2ldLT5k LT5ibG9ja19lbmVyZ3lfaGlzdG9ncmFtW2pdOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgh YWJvdmVfdGhyZXNoX2NvdW50ZXIpIHsKLSAgICAgICAgKm91dCA9IC1IVUdFX1ZBTDsKLSAgICAg ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGdhdGVkX2xvdWRuZXNzIC89IChkb3VibGUpIGFib3Zl X3RocmVzaF9jb3VudGVyOwotICAgICpvdXQgPSBlYnVyMTI4X2VuZXJneV90b19sb3VkbmVzcyhn YXRlZF9sb3VkbmVzcyk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBmZl9lYnVyMTI4X3JlbGF0 aXZlX3RocmVzaG9sZChGRkVCVVIxMjhTdGF0ZSAqIHN0LCBkb3VibGUgKm91dCkKLXsKLSAgICBk b3VibGUgcmVsYXRpdmVfdGhyZXNob2xkOwotCi0gICAgaWYgKChzdC0+bW9kZSAmIEZGX0VCVVIx MjhfTU9ERV9JKSAhPSBGRl9FQlVSMTI4X01PREVfSSkKLSAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKLQotICAgIGlmICghZWJ1cjEyOF9jYWxjX3JlbGF0aXZlX3RocmVzaG9sZCgmc3Qs IDEsICZyZWxhdGl2ZV90aHJlc2hvbGQpKSB7Ci0gICAgICAgICpvdXQgPSAtNzAuMDsKLSAgICAg ICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgKm91dCA9IGVidXIxMjhfZW5lcmd5X3RvX2xvdWRu ZXNzKHJlbGF0aXZlX3RocmVzaG9sZCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBmZl9lYnVy MTI4X2xvdWRuZXNzX2dsb2JhbChGRkVCVVIxMjhTdGF0ZSAqIHN0LCBkb3VibGUgKm91dCkKLXsK LSAgICByZXR1cm4gZWJ1cjEyOF9nYXRlZF9sb3VkbmVzcygmc3QsIDEsIG91dCk7Ci19Ci0KLXN0 YXRpYyBpbnQgZWJ1cjEyOF9lbmVyZ3lfaW5faW50ZXJ2YWwoRkZFQlVSMTI4U3RhdGUgKiBzdCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGludGVydmFsX2Zy YW1lcywgZG91YmxlICpvdXQpCi17Ci0gICAgaWYgKGludGVydmFsX2ZyYW1lcyA+IHN0LT5kLT5h dWRpb19kYXRhX2ZyYW1lcykgewotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAg IH0KLSAgICBlYnVyMTI4X2NhbGNfZ2F0aW5nX2Jsb2NrKHN0LCBpbnRlcnZhbF9mcmFtZXMsIG91 dCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZWJ1cjEyOF9lbmVyZ3lfc2hvcnR0 ZXJtKEZGRUJVUjEyOFN0YXRlICogc3QsIGRvdWJsZSAqb3V0KQotewotICAgIHJldHVybiBlYnVy MTI4X2VuZXJneV9pbl9pbnRlcnZhbChzdCwgc3QtPmQtPnNhbXBsZXNfaW5fMTAwbXMgKiAzMCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0KTsKLX0KLQotaW50IGZm X2VidXIxMjhfbG91ZG5lc3Nfc2hvcnR0ZXJtKEZGRUJVUjEyOFN0YXRlICogc3QsIGRvdWJsZSAq b3V0KQotewotICAgIGRvdWJsZSBlbmVyZ3k7Ci0gICAgaW50IGVycm9yID0gZWJ1cjEyOF9lbmVy Z3lfc2hvcnR0ZXJtKHN0LCAmZW5lcmd5KTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgcmV0 dXJuIGVycm9yOwotICAgIH0gZWxzZSBpZiAoZW5lcmd5IDw9IDAuMCkgewotICAgICAgICAqb3V0 ID0gLUhVR0VfVkFMOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgKm91dCA9IGVidXIx MjhfZW5lcmd5X3RvX2xvdWRuZXNzKGVuZXJneSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIEVC VSAtIFRFQ0ggMzM0MiAqLwotaW50IGZmX2VidXIxMjhfbG91ZG5lc3NfcmFuZ2VfbXVsdGlwbGUo RkZFQlVSMTI4U3RhdGUgKiogc3RzLCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqb3V0KQotewotICAgIHNpemVfdCBpLCBqOwotICAg IHNpemVfdCBzdGxfc2l6ZTsKLSAgICBkb3VibGUgc3RsX3Bvd2VyLCBzdGxfaW50ZWdyYXRlZDsK LSAgICAvKiBIaWdoIGFuZCBsb3cgcGVyY2VudGlsZSBlbmVyZ3kgKi8KLSAgICBkb3VibGUgaF9l biwgbF9lbjsKLSAgICB1bnNpZ25lZCBsb25nIGhpc3RbMTAwMF0gPSB7IDAgfTsKLSAgICBzaXpl X3QgcGVyY2VudGlsZV9sb3csIHBlcmNlbnRpbGVfaGlnaDsKLSAgICBzaXplX3QgaW5kZXg7Ci0K LSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChzdHNbaV0pIHsK LSAgICAgICAgICAgIGlmICgoc3RzW2ldLT5tb2RlICYgRkZfRUJVUjEyOF9NT0RFX0xSQSkgIT0K LSAgICAgICAgICAgICAgICBGRl9FQlVSMTI4X01PREVfTFJBKSB7Ci0gICAgICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K LQotICAgIHN0bF9zaXplID0gMDsKLSAgICBzdGxfcG93ZXIgPSAwLjA7Ci0gICAgZm9yIChpID0g MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoIXN0c1tpXSkKLSAgICAgICAgICAgIGNv bnRpbnVlOwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgMTAwMDsgKytqKSB7Ci0gICAgICAgICAg ICBoaXN0W2pdICs9IHN0c1tpXS0+ZC0+c2hvcnRfdGVybV9ibG9ja19lbmVyZ3lfaGlzdG9ncmFt W2pdOwotICAgICAgICAgICAgc3RsX3NpemUgKz0gc3RzW2ldLT5kLT5zaG9ydF90ZXJtX2Jsb2Nr X2VuZXJneV9oaXN0b2dyYW1bal07Ci0gICAgICAgICAgICBzdGxfcG93ZXIgKz0gc3RzW2ldLT5k LT5zaG9ydF90ZXJtX2Jsb2NrX2VuZXJneV9oaXN0b2dyYW1bal0KLSAgICAgICAgICAgICAgICAq IGhpc3RvZ3JhbV9lbmVyZ2llc1tqXTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIXN0bF9z aXplKSB7Ci0gICAgICAgICpvdXQgPSAwLjA7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot ICAgIHN0bF9wb3dlciAvPSBzdGxfc2l6ZTsKLSAgICBzdGxfaW50ZWdyYXRlZCA9IE1JTlVTXzIw REIgKiBzdGxfcG93ZXI7Ci0KLSAgICBpZiAoc3RsX2ludGVncmF0ZWQgPCBoaXN0b2dyYW1fZW5l cmd5X2JvdW5kYXJpZXNbMF0pIHsKLSAgICAgICAgaW5kZXggPSAwOwotICAgIH0gZWxzZSB7Ci0g ICAgICAgIGluZGV4ID0gZmluZF9oaXN0b2dyYW1faW5kZXgoc3RsX2ludGVncmF0ZWQpOwotICAg ICAgICBpZiAoc3RsX2ludGVncmF0ZWQgPiBoaXN0b2dyYW1fZW5lcmdpZXNbaW5kZXhdKSB7Ci0g ICAgICAgICAgICArK2luZGV4OwotICAgICAgICB9Ci0gICAgfQotICAgIHN0bF9zaXplID0gMDsK LSAgICBmb3IgKGogPSBpbmRleDsgaiA8IDEwMDA7ICsraikgewotICAgICAgICBzdGxfc2l6ZSAr PSBoaXN0W2pdOwotICAgIH0KLSAgICBpZiAoIXN0bF9zaXplKSB7Ci0gICAgICAgICpvdXQgPSAw LjA7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHBlcmNlbnRpbGVfbG93ID0gKHNp emVfdCkgKChzdGxfc2l6ZSAtIDEpICogMC4xICsgMC41KTsKLSAgICBwZXJjZW50aWxlX2hpZ2gg PSAoc2l6ZV90KSAoKHN0bF9zaXplIC0gMSkgKiAwLjk1ICsgMC41KTsKLQotICAgIHN0bF9zaXpl ID0gMDsKLSAgICBqID0gaW5kZXg7Ci0gICAgd2hpbGUgKHN0bF9zaXplIDw9IHBlcmNlbnRpbGVf bG93KSB7Ci0gICAgICAgIHN0bF9zaXplICs9IGhpc3RbaisrXTsKLSAgICB9Ci0gICAgbF9lbiA9 IGhpc3RvZ3JhbV9lbmVyZ2llc1tqIC0gMV07Ci0gICAgd2hpbGUgKHN0bF9zaXplIDw9IHBlcmNl bnRpbGVfaGlnaCkgewotICAgICAgICBzdGxfc2l6ZSArPSBoaXN0W2orK107Ci0gICAgfQotICAg IGhfZW4gPSBoaXN0b2dyYW1fZW5lcmdpZXNbaiAtIDFdOwotICAgICpvdXQgPQotICAgICAgICBl YnVyMTI4X2VuZXJneV90b19sb3VkbmVzcyhoX2VuKSAtCi0gICAgICAgIGVidXIxMjhfZW5lcmd5 X3RvX2xvdWRuZXNzKGxfZW4pOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgZmZfZWJ1cjEyOF9s b3VkbmVzc19yYW5nZShGRkVCVVIxMjhTdGF0ZSAqIHN0LCBkb3VibGUgKm91dCkKLXsKLSAgICBy ZXR1cm4gZmZfZWJ1cjEyOF9sb3VkbmVzc19yYW5nZV9tdWx0aXBsZSgmc3QsIDEsIG91dCk7Ci19 Ci0KLWludCBmZl9lYnVyMTI4X3NhbXBsZV9wZWFrKEZGRUJVUjEyOFN0YXRlICogc3QsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbF9udW1iZXIsIGRvdWJs ZSAqb3V0KQotewotICAgIGlmICgoc3QtPm1vZGUgJiBGRl9FQlVSMTI4X01PREVfU0FNUExFX1BF QUspICE9Ci0gICAgICAgIEZGX0VCVVIxMjhfTU9ERV9TQU1QTEVfUEVBSykgewotICAgICAgICBy ZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgIH0gZWxzZSBpZiAoY2hhbm5lbF9udW1iZXIgPj0g c3QtPmNoYW5uZWxzKSB7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgfQot ICAgICpvdXQgPSBzdC0+ZC0+c2FtcGxlX3BlYWtbY2hhbm5lbF9udW1iZXJdOwotICAgIHJldHVy biAwOwotfQpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvZWJ1cjEyOC5oIGIvbGliYXZmaWx0ZXIv ZWJ1cjEyOC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTczODVlMDQ0Li4wMDAw MDAwMDAwCi0tLSBhL2xpYmF2ZmlsdGVyL2VidXIxMjguaAorKysgL2Rldi9udWxsCkBAIC0xLDIy OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDExIEphbiBLb2tlbcO8bGxlcgotICoK LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq IExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqCi0gKiBUaGlzIGZpbGUgaXMgYmFzZWQg b24gbGliZWJ1cjEyOCB3aGljaCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHBzOi8vZ2l0aHViLmNv bS9qaWl4eWovbGliZWJ1cjEyOC8KLSAqCi0qLwotCi0jaWZuZGVmIEFWRklMVEVSX0VCVVIxMjhf SAotI2RlZmluZSBBVkZJTFRFUl9FQlVSMTI4X0gKLQotLyoqIFxmaWxlIGVidXIxMjguaAotICog IFxicmllZiBsaWJlYnVyMTI4IC0gYSBsaWJyYXJ5IGZvciBsb3VkbmVzcyBtZWFzdXJlbWVudCBh Y2NvcmRpbmcgdG8KLSAqICAgICAgICAgdGhlIEVCVSBSMTI4IHN0YW5kYXJkLgotICovCi0KLSNp bmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAgICAgLyogZm9yIHNpemVfdCAqLwotCi0vKiogXGVu dW0gY2hhbm5lbAotICogIFVzZSB0aGVzZSB2YWx1ZXMgd2hlbiBzZXR0aW5nIHRoZSBjaGFubmVs IG1hcCB3aXRoIGVidXIxMjhfc2V0X2NoYW5uZWwoKS4KLSAqICBTZWUgZGVmaW5pdGlvbnMgaW4g SVRVIFItUkVDLUJTIDE3NzAtNAotICovCi1lbnVtIGNoYW5uZWwgewotICAgIEZGX0VCVVIxMjhf VU5VU0VEID0gMCwgICAvKio8IHVudXNlZCBjaGFubmVsIChmb3IgZXhhbXBsZSBMRkUgY2hhbm5l bCkgKi8KLSAgICBGRl9FQlVSMTI4X0xFRlQsCi0gICAgRkZfRUJVUjEyOF9NcDAzMCA9IDEsICAg IC8qKjwgaXR1IE0rMDMwICovCi0gICAgRkZfRUJVUjEyOF9SSUdIVCwKLSAgICBGRl9FQlVSMTI4 X01tMDMwID0gMiwgICAgLyoqPCBpdHUgTS0wMzAgKi8KLSAgICBGRl9FQlVSMTI4X0NFTlRFUiwK LSAgICBGRl9FQlVSMTI4X01wMDAwID0gMywgICAgLyoqPCBpdHUgTSswMDAgKi8KLSAgICBGRl9F QlVSMTI4X0xFRlRfU1VSUk9VTkQsCi0gICAgRkZfRUJVUjEyOF9NcDExMCA9IDQsICAgIC8qKjwg aXR1IE0rMTEwICovCi0gICAgRkZfRUJVUjEyOF9SSUdIVF9TVVJST1VORCwKLSAgICBGRl9FQlVS MTI4X01tMTEwID0gNSwgICAgLyoqPCBpdHUgTS0xMTAgKi8KLSAgICBGRl9FQlVSMTI4X0RVQUxf TU9OTywgICAgLyoqPCBhIGNoYW5uZWwgdGhhdCBpcyBjb3VudGVkIHR3aWNlICovCi0gICAgRkZf RUJVUjEyOF9NcFNDLCAgICAgICAgIC8qKjwgaXR1IE0rU0MgKi8KLSAgICBGRl9FQlVSMTI4X01t U0MsICAgICAgICAgLyoqPCBpdHUgTS1TQyAqLwotICAgIEZGX0VCVVIxMjhfTXAwNjAsICAgICAg ICAvKio8IGl0dSBNKzA2MCAqLwotICAgIEZGX0VCVVIxMjhfTW0wNjAsICAgICAgICAvKio8IGl0 dSBNLTA2MCAqLwotICAgIEZGX0VCVVIxMjhfTXAwOTAsICAgICAgICAvKio8IGl0dSBNKzA5MCAq LwotICAgIEZGX0VCVVIxMjhfTW0wOTAsICAgICAgICAvKio8IGl0dSBNLTA5MCAqLwotICAgIEZG X0VCVVIxMjhfTXAxMzUsICAgICAgICAvKio8IGl0dSBNKzEzNSAqLwotICAgIEZGX0VCVVIxMjhf TW0xMzUsICAgICAgICAvKio8IGl0dSBNLTEzNSAqLwotICAgIEZGX0VCVVIxMjhfTXAxODAsICAg ICAgICAvKio8IGl0dSBNKzE4MCAqLwotICAgIEZGX0VCVVIxMjhfVXAwMDAsICAgICAgICAvKio8 IGl0dSBVKzAwMCAqLwotICAgIEZGX0VCVVIxMjhfVXAwMzAsICAgICAgICAvKio8IGl0dSBVKzAz MCAqLwotICAgIEZGX0VCVVIxMjhfVW0wMzAsICAgICAgICAvKio8IGl0dSBVLTAzMCAqLwotICAg IEZGX0VCVVIxMjhfVXAwNDUsICAgICAgICAvKio8IGl0dSBVKzA0NSAqLwotICAgIEZGX0VCVVIx MjhfVW0wNDUsICAgICAgICAvKio8IGl0dSBVLTAzMCAqLwotICAgIEZGX0VCVVIxMjhfVXAwOTAs ICAgICAgICAvKio8IGl0dSBVKzA5MCAqLwotICAgIEZGX0VCVVIxMjhfVW0wOTAsICAgICAgICAv Kio8IGl0dSBVLTA5MCAqLwotICAgIEZGX0VCVVIxMjhfVXAxMTAsICAgICAgICAvKio8IGl0dSBV KzExMCAqLwotICAgIEZGX0VCVVIxMjhfVW0xMTAsICAgICAgICAvKio8IGl0dSBVLTExMCAqLwot ICAgIEZGX0VCVVIxMjhfVXAxMzUsICAgICAgICAvKio8IGl0dSBVKzEzNSAqLwotICAgIEZGX0VC VVIxMjhfVW0xMzUsICAgICAgICAvKio8IGl0dSBVLTEzNSAqLwotICAgIEZGX0VCVVIxMjhfVXAx ODAsICAgICAgICAvKio8IGl0dSBVKzE4MCAqLwotICAgIEZGX0VCVVIxMjhfVHAwMDAsICAgICAg ICAvKio8IGl0dSBUKzAwMCAqLwotICAgIEZGX0VCVVIxMjhfQnAwMDAsICAgICAgICAvKio8IGl0 dSBCKzAwMCAqLwotICAgIEZGX0VCVVIxMjhfQnAwNDUsICAgICAgICAvKio8IGl0dSBCKzA0NSAq LwotICAgIEZGX0VCVVIxMjhfQm0wNDUgICAgICAgICAvKio8IGl0dSBCLTA0NSAqLwotfTsKLQot LyoqIFxlbnVtIG1vZGUKLSAqICBVc2UgdGhlc2UgdmFsdWVzIGluIGVidXIxMjhfaW5pdCAob3In ZWQpLiBUcnkgdG8gdXNlIHRoZSBsb3dlc3QgcG9zc2libGUKLSAqICBtb2RlcyB0aGF0IHN1aXQg eW91ciBuZWVkcywgYXMgcGVyZm9ybWFuY2Ugd2lsbCBiZSBiZXR0ZXIuCi0gKi8KLWVudW0gbW9k ZSB7Ci0gIC8qKiBjYW4gcmVzdXJycmVjdCBhbmQgY2FsbCBmZl9lYnVyMTI4X2xvdWRuZXNzX21v bWVudGFyeSAqLwotICAgIEZGX0VCVVIxMjhfTU9ERV9NID0gKDEgPDwgMCksCi0gIC8qKiBjYW4g Y2FsbCBmZl9lYnVyMTI4X2xvdWRuZXNzX3Nob3J0dGVybSAqLwotICAgIEZGX0VCVVIxMjhfTU9E RV9TID0gKDEgPDwgMSkgfCBGRl9FQlVSMTI4X01PREVfTSwKLSAgLyoqIGNhbiBjYWxsIGZmX2Vi dXIxMjhfbG91ZG5lc3NfZ2xvYmFsXyogYW5kIGZmX2VidXIxMjhfcmVsYXRpdmVfdGhyZXNob2xk ICovCi0gICAgRkZfRUJVUjEyOF9NT0RFX0kgPSAoMSA8PCAyKSB8IEZGX0VCVVIxMjhfTU9ERV9N LAotICAvKiogY2FuIGNhbGwgZmZfZWJ1cjEyOF9sb3VkbmVzc19yYW5nZSAqLwotICAgIEZGX0VC VVIxMjhfTU9ERV9MUkEgPSAoMSA8PCAzKSB8IEZGX0VCVVIxMjhfTU9ERV9TLAotICAvKiogY2Fu IGNhbGwgZmZfZWJ1cjEyOF9zYW1wbGVfcGVhayAqLwotICAgIEZGX0VCVVIxMjhfTU9ERV9TQU1Q TEVfUEVBSyA9ICgxIDw8IDQpIHwgRkZfRUJVUjEyOF9NT0RFX00sCi19OwotCi0vKiogZm9yd2Fy ZCBkZWNsYXJhdGlvbiBvZiBGRkVCVVIxMjhTdGF0ZUludGVybmFsICovCi1zdHJ1Y3QgRkZFQlVS MTI4U3RhdGVJbnRlcm5hbDsKLQotLyoqIFxicmllZiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91 dCB0aGUgc3RhdGUgb2YgYSBsb3VkbmVzcyBtZWFzdXJlbWVudC4KLSAqCi0gKiAgWW91IHNob3Vs ZCBub3QgbmVlZCB0byBtb2RpZnkgdGhpcyBzdHJ1Y3QgZGlyZWN0bHkuCi0gKi8KLXR5cGVkZWYg c3RydWN0IEZGRUJVUjEyOFN0YXRlIHsKLSAgICBpbnQgbW9kZTsgICAgICAgICAgICAgICAgICAg ICAgICAgLyoqPCBUaGUgY3VycmVudCBtb2RlLiAqLwotICAgIHVuc2lnbmVkIGludCBjaGFubmVs czsgICAgICAgICAgICAvKio8IFRoZSBudW1iZXIgb2YgY2hhbm5lbHMuICovCi0gICAgdW5zaWdu ZWQgbG9uZyBzYW1wbGVyYXRlOyAgICAgICAgIC8qKjwgVGhlIHNhbXBsZSByYXRlLiAqLwotICAg IHN0cnVjdCBGRkVCVVIxMjhTdGF0ZUludGVybmFsICpkOyAvKio8IEludGVybmFsIHN0YXRlLiAq LwotfSBGRkVCVVIxMjhTdGF0ZTsKLQotLyoqIFxicmllZiBJbml0aWFsaXplIGxpYnJhcnkgc3Rh dGUuCi0gKgotICogIEBwYXJhbSBjaGFubmVscyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLgotICog IEBwYXJhbSBzYW1wbGVyYXRlIHRoZSBzYW1wbGUgcmF0ZS4KLSAqICBAcGFyYW0gd2luZG93IHNl dCB0aGUgbWF4aW11bSB3aW5kb3cgc2l6ZSBpbiBtcywgc2V0IHRvIDAgZm9yIGF1dG8uCi0gKiAg QHBhcmFtIG1vZGUgc2VlIHRoZSBtb2RlIGVudW0gZm9yIHBvc3NpYmxlIHZhbHVlcy4KLSAqICBA cmV0dXJuIGFuIGluaXRpYWxpemVkIGxpYnJhcnkgc3RhdGUuCi0gKi8KLUZGRUJVUjEyOFN0YXRl ICpmZl9lYnVyMTI4X2luaXQodW5zaWduZWQgaW50IGNoYW5uZWxzLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNhbXBsZXJhdGUsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgd2luZG93LCBpbnQgbW9kZSk7Ci0KLS8q KiBcYnJpZWYgRGVzdHJveSBsaWJyYXJ5IHN0YXRlLgotICoKLSAqICBAcGFyYW0gc3QgcG9pbnRl ciB0byBhIGxpYnJhcnkgc3RhdGUuCi0gKi8KLXZvaWQgZmZfZWJ1cjEyOF9kZXN0cm95KEZGRUJV UjEyOFN0YXRlICoqIHN0KTsKLQotLyoqIFxicmllZiBTZXQgY2hhbm5lbCB0eXBlLgotICoKLSAq ICBUaGUgZGVmYXVsdCBpczoKLSAqICAtIDAgLT4gRkZfRUJVUjEyOF9MRUZUCi0gKiAgLSAxIC0+ IEZGX0VCVVIxMjhfUklHSFQKLSAqICAtIDIgLT4gRkZfRUJVUjEyOF9DRU5URVIKLSAqICAtIDMg LT4gRkZfRUJVUjEyOF9VTlVTRUQKLSAqICAtIDQgLT4gRkZfRUJVUjEyOF9MRUZUX1NVUlJPVU5E Ci0gKiAgLSA1IC0+IEZGX0VCVVIxMjhfUklHSFRfU1VSUk9VTkQKLSAqCi0gKiAgQHBhcmFtIHN0 IGxpYnJhcnkgc3RhdGUuCi0gKiAgQHBhcmFtIGNoYW5uZWxfbnVtYmVyIHplcm8gYmFzZWQgY2hh bm5lbCBpbmRleC4KLSAqICBAcGFyYW0gdmFsdWUgY2hhbm5lbCB0eXBlIGZyb20gdGhlICJjaGFu bmVsIiBlbnVtLgotICogIEByZXR1cm4KLSAqICAgIC0gMCBvbiBzdWNjZXNzLgotICogICAgLSBB VkVSUk9SKEVJTlZBTCkgaWYgaW52YWxpZCBjaGFubmVsIGluZGV4LgotICovCi1pbnQgZmZfZWJ1 cjEyOF9zZXRfY2hhbm5lbChGRkVCVVIxMjhTdGF0ZSAqIHN0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWxfbnVtYmVyLCBpbnQgdmFsdWUpOwotCi0vKiog XGJyaWVmIEFkZCBmcmFtZXMgdG8gYmUgcHJvY2Vzc2VkLgotICoKLSAqICBAcGFyYW0gc3QgbGli cmFyeSBzdGF0ZS4KLSAqICBAcGFyYW0gc3JjIGFycmF5IG9mIHNvdXJjZSBmcmFtZXMuIENoYW5u ZWxzIG11c3QgYmUgaW50ZXJsZWF2ZWQuCi0gKiAgQHBhcmFtIGZyYW1lcyBudW1iZXIgb2YgZnJh bWVzLiBOb3QgbnVtYmVyIG9mIHNhbXBsZXMhCi0gKi8KLXZvaWQgZmZfZWJ1cjEyOF9hZGRfZnJh bWVzX2RvdWJsZShGRkVCVVIxMjhTdGF0ZSAqIHN0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGRvdWJsZSAqc3JjLCBzaXplX3QgZnJhbWVzKTsKLQotLyoqIFxicmll ZiBHZXQgZ2xvYmFsIGludGVncmF0ZWQgbG91ZG5lc3MgaW4gTFVGUy4KLSAqCi0gKiAgQHBhcmFt IHN0IGxpYnJhcnkgc3RhdGUuCi0gKiAgQHBhcmFtIG91dCBpbnRlZ3JhdGVkIGxvdWRuZXNzIGlu IExVRlMuIC1IVUdFX1ZBTCBpZiByZXN1bHQgaXMgbmVnYXRpdmUKLSAqICAgICAgICAgICAgIGlu ZmluaXR5LgotICogIEByZXR1cm4KLSAqICAgIC0gMCBvbiBzdWNjZXNzLgotICogICAgLSBBVkVS Uk9SKEVJTlZBTCkgaWYgbW9kZSAiRkZfRUJVUjEyOF9NT0RFX0kiIGhhcyBub3QgYmVlbiBzZXQu Ci0gKi8KLWludCBmZl9lYnVyMTI4X2xvdWRuZXNzX2dsb2JhbChGRkVCVVIxMjhTdGF0ZSAqIHN0 LCBkb3VibGUgKm91dCk7Ci0KLS8qKiBcYnJpZWYgR2V0IHNob3J0LXRlcm0gbG91ZG5lc3MgKGxh c3QgM3MpIGluIExVRlMuCi0gKgotICogIEBwYXJhbSBzdCBsaWJyYXJ5IHN0YXRlLgotICogIEBw YXJhbSBvdXQgc2hvcnQtdGVybSBsb3VkbmVzcyBpbiBMVUZTLiAtSFVHRV9WQUwgaWYgcmVzdWx0 IGlzIG5lZ2F0aXZlCi0gKiAgICAgICAgICAgICBpbmZpbml0eS4KLSAqICBAcmV0dXJuCi0gKiAg ICAtIDAgb24gc3VjY2Vzcy4KLSAqICAgIC0gQVZFUlJPUihFSU5WQUwpIGlmIG1vZGUgIkZGX0VC VVIxMjhfTU9ERV9TIiBoYXMgbm90IGJlZW4gc2V0LgotICovCi1pbnQgZmZfZWJ1cjEyOF9sb3Vk bmVzc19zaG9ydHRlcm0oRkZFQlVSMTI4U3RhdGUgKiBzdCwgZG91YmxlICpvdXQpOwotCi0vKiog XGJyaWVmIEdldCBsb3VkbmVzcyByYW5nZSAoTFJBKSBvZiBwcm9ncmFtbWUgaW4gTFUuCi0gKgot ICogIENhbGN1bGF0ZXMgbG91ZG5lc3MgcmFuZ2UgYWNjb3JkaW5nIHRvIEVCVSAzMzQyLgotICoK LSAqICBAcGFyYW0gc3QgbGlicmFyeSBzdGF0ZS4KLSAqICBAcGFyYW0gb3V0IGxvdWRuZXNzIHJh bmdlIChMUkEpIGluIExVLiBXaWxsIG5vdCBiZSBjaGFuZ2VkIGluIGNhc2Ugb2YKLSAqICAgICAg ICAgICAgIGVycm9yLiBBVkVSUk9SKEVJTlZBTCkgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGlzIGNh c2UuCi0gKiAgQHJldHVybgotICogICAgLSAwIG9uIHN1Y2Nlc3MuCi0gKiAgICAtIEFWRVJST1Io RUlOVkFMKSBpZiBtb2RlICJGRl9FQlVSMTI4X01PREVfTFJBIiBoYXMgbm90IGJlZW4gc2V0Lgot ICovCi1pbnQgZmZfZWJ1cjEyOF9sb3VkbmVzc19yYW5nZShGRkVCVVIxMjhTdGF0ZSAqIHN0LCBk b3VibGUgKm91dCk7Ci0vKiogXGJyaWVmIEdldCBsb3VkbmVzcyByYW5nZSAoTFJBKSBpbiBMVSBh Y3Jvc3MgbXVsdGlwbGUgaW5zdGFuY2VzLgotICoKLSAqICBDYWxjdWxhdGVzIGxvdWRuZXNzIHJh bmdlIGFjY29yZGluZyB0byBFQlUgMzM0Mi4KLSAqCi0gKiAgQHBhcmFtIHN0cyBhcnJheSBvZiBs aWJyYXJ5IHN0YXRlcy4KLSAqICBAcGFyYW0gc2l6ZSBsZW5ndGggb2Ygc3RzCi0gKiAgQHBhcmFt IG91dCBsb3VkbmVzcyByYW5nZSAoTFJBKSBpbiBMVS4gV2lsbCBub3QgYmUgY2hhbmdlZCBpbiBj YXNlIG9mCi0gKiAgICAgICAgICAgICBlcnJvci4gQVZFUlJPUihFSU5WQUwpIHdpbGwgYmUgcmV0 dXJuZWQgaW4gdGhpcyBjYXNlLgotICogIEByZXR1cm4KLSAqICAgIC0gMCBvbiBzdWNjZXNzLgot ICogICAgLSBBVkVSUk9SKEVJTlZBTCkgaWYgbW9kZSAiRkZfRUJVUjEyOF9NT0RFX0xSQSIgaGFz IG5vdCBiZWVuIHNldC4KLSAqLwotaW50IGZmX2VidXIxMjhfbG91ZG5lc3NfcmFuZ2VfbXVsdGlw bGUoRkZFQlVSMTI4U3RhdGUgKiogc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IHNpemUsIGRvdWJsZSAqb3V0KTsKLQotLyoqIFxicmllZiBHZXQgbWF4 aW11bSBzYW1wbGUgcGVhayBvZiBzZWxlY3RlZCBjaGFubmVsIGluIGZsb2F0IGZvcm1hdC4KLSAq Ci0gKiAgQHBhcmFtIHN0IGxpYnJhcnkgc3RhdGUKLSAqICBAcGFyYW0gY2hhbm5lbF9udW1iZXIg Y2hhbm5lbCB0byBhbmFseXNlCi0gKiAgQHBhcmFtIG91dCBtYXhpbXVtIHNhbXBsZSBwZWFrIGlu IGZsb2F0IGZvcm1hdCAoMS4wIGlzIDAgZEJGUykKLSAqICBAcmV0dXJuCi0gKiAgICAtIDAgb24g c3VjY2Vzcy4KLSAqICAgIC0gQVZFUlJPUihFSU5WQUwpIGlmIG1vZGUgIkZGX0VCVVIxMjhfTU9E RV9TQU1QTEVfUEVBSyIgaGFzIG5vdCBiZWVuIHNldC4KLSAqICAgIC0gQVZFUlJPUihFSU5WQUwp IGlmIGludmFsaWQgY2hhbm5lbCBpbmRleC4KLSAqLwotaW50IGZmX2VidXIxMjhfc2FtcGxlX3Bl YWsoRkZFQlVSMTI4U3RhdGUgKiBzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBjaGFubmVsX251bWJlciwgZG91YmxlICpvdXQpOwotCi0vKiogXGJyaWVmIEdldCBy ZWxhdGl2ZSB0aHJlc2hvbGQgaW4gTFVGUy4KLSAqCi0gKiAgQHBhcmFtIHN0IGxpYnJhcnkgc3Rh dGUKLSAqICBAcGFyYW0gb3V0IHJlbGF0aXZlIHRocmVzaG9sZCBpbiBMVUZTLgotICogIEByZXR1 cm4KLSAqICAgIC0gMCBvbiBzdWNjZXNzLgotICogICAgLSBBVkVSUk9SKEVJTlZBTCkgaWYgbW9k ZSAiRkZfRUJVUjEyOF9NT0RFX0kiIGhhcyBub3QgYmVlbiBzZXQuCi0gKi8KLWludCBmZl9lYnVy MTI4X3JlbGF0aXZlX3RocmVzaG9sZChGRkVCVVIxMjhTdGF0ZSAqIHN0LCBkb3VibGUgKm91dCk7 Ci0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQVZGSUxURVJfRUJVUjEyOF9I ICovCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9mX2VidXIxMjguYyBiL2xpYmF2ZmlsdGVyL2Zf ZWJ1cjEyOC5jCmluZGV4IGE5MjE2MDJiNDQuLmFhNDQyNmQ0ZGEgMTAwNjQ0Ci0tLSBhL2xpYmF2 ZmlsdGVyL2ZfZWJ1cjEyOC5jCisrKyBiL2xpYmF2ZmlsdGVyL2ZfZWJ1cjEyOC5jCkBAIC03NSw2 ICs3NSwxMyBAQCBzdHJ1Y3QgaW50ZWdyYXRvciB7CiAgICAgc3RydWN0IGhpc3RfZW50cnkgKmhp c3RvZ3JhbTsgICAvLy88IGhpc3RvZ3JhbSBvZiB0aGUgcG93ZXJzLCB1c2VkIHRvIGNvbXB1dGUg TFJBIGFuZCBJCiB9OwogCitlbnVtIFByaW50Rm9ybWF0IHsKKyAgICBOT05FLAorICAgIEpTT04s CisgICAgU1VNTUFSWSwKKyAgICBQRl9OQgorfTsKKwogc3RydWN0IHJlY3QgeyBpbnQgeCwgeSwg dywgaDsgfTsKIAogdHlwZWRlZiBzdHJ1Y3QgRUJVUjEyOENvbnRleHQgewpAQCAtODUsOCArOTIs MTAgQEAgdHlwZWRlZiBzdHJ1Y3QgRUJVUjEyOENvbnRleHQgewogICAgIGRvdWJsZSB0cnVlX3Bl YWs7ICAgICAgICAgICAgICAgLy8vPCBnbG9iYWwgdHJ1ZSBwZWFrCiAgICAgZG91YmxlICp0cnVl X3BlYWtzOyAgICAgICAgICAgICAvLy88IHRydWUgcGVha3MgcGVyIGNoYW5uZWwKICAgICBkb3Vi bGUgc2FtcGxlX3BlYWs7ICAgICAgICAgICAgIC8vLzwgZ2xvYmFsIHNhbXBsZSBwZWFrCisgICAg ZG91YmxlIGZyYW1lX3NhbXBsZV9wZWFrOyAgICAgICAvLy88IGZyYW1lIHNhbXBsZSBwZWFrCiAg ICAgZG91YmxlICpzYW1wbGVfcGVha3M7ICAgICAgICAgICAvLy88IHNhbXBsZSBwZWFrcyBwZXIg Y2hhbm5lbAogICAgIGRvdWJsZSAqdHJ1ZV9wZWFrc19wZXJfZnJhbWU7ICAgLy8vPCB0cnVlIHBl YWtzIGluIGEgZnJhbWUgcGVyIGNoYW5uZWwKKyAgICBkb3VibGUgKnNhbXBsZV9wZWFrc19wZXJf ZnJhbWU7IC8vLzwgc2FtcGxlIHBlYWtzIGluIGEgZnJhbWUgcGVyIGNoYW5uZWwKICNpZiBDT05G SUdfU1dSRVNBTVBMRQogICAgIFN3ckNvbnRleHQgKnN3cl9jdHg7ICAgICAgICAgICAgLy8vPCBv dmVyLXNhbXBsaW5nIGNvbnRleHQgZm9yIHRydWUgcGVhayBtZXRlcmluZwogICAgIGRvdWJsZSAq c3dyX2J1ZjsgICAgICAgICAgICAgICAgLy8vPCByZXNhbXBsZWQgYXVkaW8gZGF0YSBmb3IgdHJ1 ZSBwZWFrIG1ldGVyaW5nCkBAIC0zODksMTEgKzM5OCw4IEBAIHN0YXRpYyBpbnQgY29uZmlnX3Zp ZGVvX291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0 YXRpYyBpbnQgY29uZmlnX2F1ZGlvX2lucHV0KEFWRmlsdGVyTGluayAqaW5saW5rKQorc3RhdGlj IGludCBjb25maWdfYXVkaW9faW4oQVZGaWx0ZXJMaW5rICppbmxpbmssIEVCVVIxMjhDb250ZXh0 ICplYnVyMTI4KQogewotICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gaW5saW5rLT5kc3Q7Ci0g ICAgRUJVUjEyOENvbnRleHQgKmVidXIxMjggPSBjdHgtPnByaXY7Ci0KICAgICAvKiBVbm9mZmlj aWFsIHJldmVyc2VkIHBhcmFtZXRyaXphdGlvbiBvZiBQUkUKICAgICAgKiBhbmQgUkxCIGZyb20g NDhrSHogKi8KIApAQCAtNDM0LDExICs0NDAsMTYgQEAgc3RhdGljIGludCBjb25maWdfYXVkaW9f aW5wdXQoQVZGaWx0ZXJMaW5rICppbmxpbmspCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBp bnQgY29uZmlnX2F1ZGlvX291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCitzdGF0aWMgaW50 IGNvbmZpZ19hdWRpb19pbnB1dChBVkZpbHRlckxpbmsgKmlubGluaykKIHsKLSAgICBpbnQgaTsK LSAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IG91dGxpbmstPnNyYzsKKyAgICBBVkZpbHRlckNv bnRleHQgKmN0eCA9IGlubGluay0+ZHN0OwogICAgIEVCVVIxMjhDb250ZXh0ICplYnVyMTI4ID0g Y3R4LT5wcml2OworICAgIHJldHVybiBjb25maWdfYXVkaW9faW4oaW5saW5rLCBlYnVyMTI4KTsK K30KKworc3RhdGljIGludCBjb25maWdfYXVkaW9fb3V0KEFWRmlsdGVyTGluayAqb3V0bGluaywg RUJVUjEyOENvbnRleHQgKmVidXIxMjgpCit7CisgICAgaW50IGk7CiAgICAgY29uc3QgaW50IG5i X2NoYW5uZWxzID0gb3V0bGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwogCiAjZGVmaW5lIEJB Q0tfTUFTSyAoQVZfQ0hfQkFDS19MRUZUICAgIHxBVl9DSF9CQUNLX0NFTlRFUiAgICB8QVZfQ0hf QkFDS19SSUdIVHwgXApAQCAtNTE1LDE0ICs1MjYsMjIgQEAgc3RhdGljIGludCBjb25maWdfYXVk aW9fb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGluaykKICNlbmRpZgogCiAgICAgaWYgKGVidXIx MjgtPnBlYWtfbW9kZSAmIFBFQUtfTU9ERV9TQU1QTEVTX1BFQUtTKSB7CisgICAgICAgIGVidXIx MjgtPnNhbXBsZV9wZWFrc19wZXJfZnJhbWUgPSBhdl9jYWxsb2MobmJfY2hhbm5lbHMsIHNpemVv ZigqZWJ1cjEyOC0+c2FtcGxlX3BlYWtzX3Blcl9mcmFtZSkpOwogICAgICAgICBlYnVyMTI4LT5z YW1wbGVfcGVha3MgPSBhdl9jYWxsb2MobmJfY2hhbm5lbHMsIHNpemVvZigqZWJ1cjEyOC0+c2Ft cGxlX3BlYWtzKSk7Ci0gICAgICAgIGlmICghZWJ1cjEyOC0+c2FtcGxlX3BlYWtzKQorICAgICAg ICBpZiAoIWVidXIxMjgtPnNhbXBsZV9wZWFrcyB8fCAhZWJ1cjEyOC0+c2FtcGxlX3BlYWtzX3Bl cl9mcmFtZSkKICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CiAgICAgfQogCiAg ICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY29uZmlnX2F1ZGlvX291dHB1dChBVkZpbHRl ckxpbmsgKm91dGxpbmspCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBvdXRsaW5rLT5z cmM7CisgICAgRUJVUjEyOENvbnRleHQgKmVidXIxMjggPSBjdHgtPnByaXY7CisgICAgcmV0dXJu IGNvbmZpZ19hdWRpb19vdXQob3V0bGluaywgZWJ1cjEyOCk7Cit9CisKICNkZWZpbmUgRU5FUkdZ KGxvdWRuZXNzKSAoZmZfZXhwMTAoKChsb3VkbmVzcykgKyAwLjY5MSkgLyAxMC4pKQogI2RlZmlu ZSBMT1VETkVTUyhlbmVyZ3kpICgtMC42OTEgKyAxMCAqIGxvZzEwKGVuZXJneSkpCiAjZGVmaW5l IERCRlMoZW5lcmd5KSAoMjAgKiBsb2cxMChlbmVyZ3kpKQpAQCAtNTQxLDkgKzU2MCw4IEBAIHN0 YXRpYyBzdHJ1Y3QgaGlzdF9lbnRyeSAqZ2V0X2hpc3RvZ3JhbSh2b2lkKQogICAgIHJldHVybiBo OwogfQogCi1zdGF0aWMgYXZfY29sZCBpbnQgaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKK3N0 YXRpYyBhdl9jb2xkIGludCBpbml0X2VidXIxMjgoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEVCVVIx MjhDb250ZXh0ICplYnVyMTI4KQogewotICAgIEVCVVIxMjhDb250ZXh0ICplYnVyMTI4ID0gY3R4 LT5wcml2OwogICAgIEFWRmlsdGVyUGFkIHBhZDsKICAgICBpbnQgcmV0OwogCkBAIC01NzQsNiAr NTkyLDkgQEAgc3RhdGljIGF2X2NvbGQgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiAg ICAgZWJ1cjEyOC0+aW50ZWdyYXRlZF9sb3VkbmVzcyA9IEFCU19USFJFUzsKICAgICBlYnVyMTI4 LT5sb3VkbmVzc19yYW5nZSA9IDA7CiAKKyAgICBpZiAoc3RyY21wKGN0eC0+ZmlsdGVyLT5uYW1l LCAiZWJ1cjEyOCIpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIC8qIGluc2VydCBvdXRwdXQg cGFkcyAqLwogICAgIGlmIChlYnVyMTI4LT5kb192aWRlbykgewogICAgICAgICBwYWQgPSAoQVZG aWx0ZXJQYWQpewpAQCAtNjAwLDYgKzYyMSwxMiBAQCBzdGF0aWMgYXZfY29sZCBpbnQgaW5pdChB VkZpbHRlckNvbnRleHQgKmN0eCkKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGF2X2NvbGQg aW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgRUJVUjEyOENvbnRleHQgKmVi dXIxMjggPSBjdHgtPnByaXY7CisgICAgcmV0dXJuIGluaXRfZWJ1cjEyOChjdHgsIGVidXIxMjgp OworfQorCiAjZGVmaW5lIEhJU1RfUE9TKHBvd2VyKSAoaW50KSgoKHBvd2VyKSAtIEFCU19USFJF UykgKiBISVNUX0dSQUlOKQogCiAvKiBsb3VkbmVzcyBhbmQgcG93ZXIgc2hvdWxkIGJlIHNldCBz dWNoIGFzIGxvdWRuZXNzID0gLTAuNjkxICsKQEAgLTYyNywyNyArNjU0LDIxIEBAIHN0YXRpYyBp bnQgZ2F0ZV91cGRhdGUoc3RydWN0IGludGVncmF0b3IgKmludGVnLCBkb3VibGUgcG93ZXIsCiAg ICAgcmV0dXJuIGdhdGVfaGlzdF9wb3M7CiB9CiAKLXN0YXRpYyBpbnQgZmlsdGVyX2ZyYW1lKEFW RmlsdGVyTGluayAqaW5saW5rLCBBVkZyYW1lICppbnNhbXBsZXMpCitzdGF0aWMgaW50IHRydWVf cGVha3NfZWJ1cjEyOChFQlVSMTI4Q29udGV4dCAqZWJ1cjEyOCwgY29uc3QgdWludDhfdCAqKnNh bXBsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJfc2FtcGxlcykKIHsK LSAgICBpbnQgaSwgY2gsIGlkeF9pbnNhbXBsZSwgcmV0OwotICAgIEFWRmlsdGVyQ29udGV4dCAq Y3R4ID0gaW5saW5rLT5kc3Q7Ci0gICAgRUJVUjEyOENvbnRleHQgKmVidXIxMjggPSBjdHgtPnBy aXY7Ci0gICAgY29uc3QgaW50IG5iX2NoYW5uZWxzID0gZWJ1cjEyOC0+bmJfY2hhbm5lbHM7Ci0g ICAgY29uc3QgaW50IG5iX3NhbXBsZXMgID0gaW5zYW1wbGVzLT5uYl9zYW1wbGVzOwotICAgIGNv bnN0IGRvdWJsZSAqc2FtcGxlcyA9IChkb3VibGUgKilpbnNhbXBsZXMtPmRhdGFbMF07Ci0gICAg QVZGcmFtZSAqcGljOwotCiAjaWYgQ09ORklHX1NXUkVTQU1QTEUKICAgICBpZiAoZWJ1cjEyOC0+ cGVha19tb2RlICYgUEVBS19NT0RFX1RSVUVfUEVBS1MgJiYgZWJ1cjEyOC0+aWR4X2luc2FtcGxl ID09IDApIHsKICAgICAgICAgY29uc3QgZG91YmxlICpzd3Jfc2FtcGxlcyA9IGVidXIxMjgtPnN3 cl9idWY7CisgICAgICAgIGNvbnN0IGludCBuYl9jaGFubmVscyA9IGVidXIxMjgtPm5iX2NoYW5u ZWxzOwogICAgICAgICBpbnQgcmV0ID0gc3dyX2NvbnZlcnQoZWJ1cjEyOC0+c3dyX2N0eCwgKHVp bnQ4X3QqKikmZWJ1cjEyOC0+c3dyX2J1ZiwgMTkyMDAsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY29uc3QgdWludDhfdCAqKilpbnNhbXBsZXMtPmRhdGEsIG5iX3NhbXBsZXMpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcywgbmJfc2FtcGxlcyk7CiAgICAg ICAgIGlmIChyZXQgPCAwKQogICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgZm9yIChj aCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspCisgICAgICAgIGZvciAoaW50IGNoID0gMDsg Y2ggPCBuYl9jaGFubmVsczsgY2grKykKICAgICAgICAgICAgIGVidXIxMjgtPnRydWVfcGVha3Nf cGVyX2ZyYW1lW2NoXSA9IDAuMDsKLSAgICAgICAgZm9yIChpZHhfaW5zYW1wbGUgPSAwOyBpZHhf aW5zYW1wbGUgPCByZXQ7IGlkeF9pbnNhbXBsZSsrKSB7Ci0gICAgICAgICAgICBmb3IgKGNoID0g MDsgY2ggPCBuYl9jaGFubmVsczsgY2grKykgeworICAgICAgICBmb3IgKGludCBpZHhfaW5zYW1w bGUgPSAwOyBpZHhfaW5zYW1wbGUgPCByZXQ7IGlkeF9pbnNhbXBsZSsrKSB7CisgICAgICAgICAg ICBmb3IgKGludCBjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKICAgICAgICAgICAg ICAgICBlYnVyMTI4LT50cnVlX3BlYWtzW2NoXSA9IEZGTUFYKGVidXIxMjgtPnRydWVfcGVha3Nb Y2hdLCBmYWJzKCpzd3Jfc2FtcGxlcykpOwogICAgICAgICAgICAgICAgIGVidXIxMjgtPnRydWVf cGVha3NfcGVyX2ZyYW1lW2NoXSA9IEZGTUFYKGVidXIxMjgtPnRydWVfcGVha3NfcGVyX2ZyYW1l W2NoXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmYWJzKCpzd3Jfc2FtcGxlcykpOwpAQCAtNjU2LDEwICs2NzcsMTQgQEAgc3RhdGlj IGludCBmaWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICppbmxpbmssIEFWRnJhbWUgKmluc2FtcGxl cykKICAgICAgICAgfQogICAgIH0KICNlbmRpZgorICAgIHJldHVybiAwOworfQogCi0gICAgZm9y IChpZHhfaW5zYW1wbGUgPSBlYnVyMTI4LT5pZHhfaW5zYW1wbGU7IGlkeF9pbnNhbXBsZSA8IG5i X3NhbXBsZXM7IGlkeF9pbnNhbXBsZSsrKSB7Ci0gICAgICAgIGNvbnN0IGludCBiaW5faWRfNDAw ICA9IGVidXIxMjgtPmk0MDAuY2FjaGVfcG9zOwotICAgICAgICBjb25zdCBpbnQgYmluX2lkXzMw MDAgPSBlYnVyMTI4LT5pMzAwMC5jYWNoZV9wb3M7CitzdGF0aWMgdm9pZCBwcm9jZXNzX2VidXIx MjgoRUJVUjEyOENvbnRleHQgKmVidXIxMjgsIGNvbnN0IGRvdWJsZSAqc2FtcGxlcykKK3sKKyAg ICBjb25zdCBpbnQgbmJfY2hhbm5lbHMgPSBlYnVyMTI4LT5uYl9jaGFubmVsczsKKyAgICBjb25z dCBpbnQgYmluX2lkXzQwMCAgPSBlYnVyMTI4LT5pNDAwLmNhY2hlX3BvczsKKyAgICBjb25zdCBp bnQgYmluX2lkXzMwMDAgPSBlYnVyMTI4LT5pMzAwMC5jYWNoZV9wb3M7CiAKICNkZWZpbmUgTU9W RV9UT19ORVhUX0NBQ0hFRF9FTlRSWSh0aW1lKSBkbyB7ICAgICAgICAgICAgICAgIFwKICAgICBl YnVyMTI4LT5pIyN0aW1lLmNhY2hlX3BvcysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK QEAgLTY3MCw0NyArNjk1LDQ5IEBAIHN0YXRpYyBpbnQgZmlsdGVyX2ZyYW1lKEFWRmlsdGVyTGlu ayAqaW5saW5rLCBBVkZyYW1lICppbnNhbXBsZXMpCiAgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogCi0gICAg ICAgIE1PVkVfVE9fTkVYVF9DQUNIRURfRU5UUlkoNDAwKTsKLSAgICAgICAgTU9WRV9UT19ORVhU X0NBQ0hFRF9FTlRSWSgzMDAwKTsKKyAgICBNT1ZFX1RPX05FWFRfQ0FDSEVEX0VOVFJZKDQwMCk7 CisgICAgTU9WRV9UT19ORVhUX0NBQ0hFRF9FTlRSWSgzMDAwKTsKIAotICAgICAgICBmb3IgKGNo ID0gMDsgY2ggPCBuYl9jaGFubmVsczsgY2grKykgewotICAgICAgICAgICAgZG91YmxlIGJpbjsK KyAgICBmb3IgKGludCBjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKKyAgICAgICAg ZG91YmxlIGJpbjsKIAotICAgICAgICAgICAgaWYgKGVidXIxMjgtPnBlYWtfbW9kZSAmIFBFQUtf TU9ERV9TQU1QTEVTX1BFQUtTKQotICAgICAgICAgICAgICAgIGVidXIxMjgtPnNhbXBsZV9wZWFr c1tjaF0gPSBGRk1BWChlYnVyMTI4LT5zYW1wbGVfcGVha3NbY2hdLCBmYWJzKHNhbXBsZXNbaWR4 X2luc2FtcGxlICogbmJfY2hhbm5lbHMgKyBjaF0pKTsKKyAgICAgICAgaWYgKGVidXIxMjgtPnBl YWtfbW9kZSAmIFBFQUtfTU9ERV9TQU1QTEVTX1BFQUtTKSB7CisgICAgICAgICAgICBlYnVyMTI4 LT5zYW1wbGVfcGVha3NbY2hdID0gRkZNQVgoZWJ1cjEyOC0+c2FtcGxlX3BlYWtzW2NoXSwgZmFi cyhzYW1wbGVzW2NoXSkpOworICAgICAgICAgICAgZWJ1cjEyOC0+c2FtcGxlX3BlYWtzX3Blcl9m cmFtZVtjaF0gPSBGRk1BWChlYnVyMTI4LT5zYW1wbGVfcGVha3NfcGVyX2ZyYW1lW2NoXSwgZmFi cyhzYW1wbGVzW2NoXSkpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGVidXIxMjgtPnhbY2gg KiAzXSA9IHNhbXBsZXNbaWR4X2luc2FtcGxlICogbmJfY2hhbm5lbHMgKyBjaF07IC8vIHNldCBY W2ldCisgICAgICAgIGVidXIxMjgtPnhbY2ggKiAzXSA9IHNhbXBsZXNbY2hdOyAvLyBzZXQgWFtp XQogCi0gICAgICAgICAgICBpZiAoIWVidXIxMjgtPmNoX3dlaWdodGluZ1tjaF0pCi0gICAgICAg ICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghZWJ1cjEyOC0+Y2hfd2VpZ2h0aW5nW2No XSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAvKiBZW2ldID0gWFtpXSpi MCArIFhbaS0xXSpiMSArIFhbaS0yXSpiMiAtIFlbaS0xXSphMSAtIFlbaS0yXSphMiAqLwotI2Rl ZmluZSBGSUxURVIoWSwgWCwgTlVNLCBERU4pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBkb3VibGUgKmRzdCA9IGVidXIxMjgt PlkgKyBjaCozOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg ICAgIGRvdWJsZSAqc3JjID0gZWJ1cjEyOC0+WCArIGNoKjM7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZHN0WzJdID0gZHN0WzFdOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBk c3RbMV0gPSBkc3RbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgICAgIGRzdFswXSA9IHNyY1swXSpOVU1bMF0gKyBzcmNbMV0q TlVNWzFdICsgc3JjWzJdKk5VTVsyXSAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtIGRzdFsxXSpERU5bMV0gLSBkc3RbMl0qREVOWzJdOyAgICAgICAg ICAgICBcCisgICAgICAgIC8qIFlbaV0gPSBYW2ldKmIwICsgWFtpLTFdKmIxICsgWFtpLTJdKmIy IC0gWVtpLTFdKmExIC0gWVtpLTJdKmEyICovCisjZGVmaW5lIEZJTFRFUihZLCBYLCBOVU0sIERF TikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICBkb3VibGUgKmRzdCA9IGVidXIxMjgtPlkgKyBjaCozOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgZG91YmxlICpzcmMgPSBlYnVyMTI4LT5YICsgY2gqMzsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRzdFsyXSA9IGRz dFsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICBkc3RbMV0gPSBkc3RbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZHN0WzBdID0gc3JjWzBdKk5VTVswXSAr IHNyY1sxXSpOVU1bMV0gKyBzcmNbMl0qTlVNWzJdICAgICAgICAgICAgICBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLSBkc3RbMV0qREVOWzFdIC0gZHN0WzJdKkRFTlsyXTsgICAg ICAgICAgICAgXAogfSB3aGlsZSAoMCkKIAotICAgICAgICAgICAgLy8gVE9ETzogbWVyZ2UgYm90 aCBmaWx0ZXJzIGluIG9uZT8KLSAgICAgICAgICAgIEZJTFRFUih5LCB4LCBlYnVyMTI4LT5wcmVf YiwgZWJ1cjEyOC0+cHJlX2EpOyAgLy8gYXBwbHkgcHJlLWZpbHRlcgotICAgICAgICAgICAgZWJ1 cjEyOC0+eFtjaCAqIDMgKyAyXSA9IGVidXIxMjgtPnhbY2ggKiAzICsgMV07Ci0gICAgICAgICAg ICBlYnVyMTI4LT54W2NoICogMyArIDFdID0gZWJ1cjEyOC0+eFtjaCAqIDMgICAgXTsKLSAgICAg ICAgICAgIEZJTFRFUih6LCB5LCBlYnVyMTI4LT5ybGJfYiwgZWJ1cjEyOC0+cmxiX2EpOyAgLy8g YXBwbHkgUkxCLWZpbHRlcgorICAgICAgICAvLyBUT0RPOiBtZXJnZSBib3RoIGZpbHRlcnMgaW4g b25lPworICAgICAgICBGSUxURVIoeSwgeCwgZWJ1cjEyOC0+cHJlX2IsIGVidXIxMjgtPnByZV9h KTsgIC8vIGFwcGx5IHByZS1maWx0ZXIKKyAgICAgICAgZWJ1cjEyOC0+eFtjaCAqIDMgKyAyXSA9 IGVidXIxMjgtPnhbY2ggKiAzICsgMV07CisgICAgICAgIGVidXIxMjgtPnhbY2ggKiAzICsgMV0g PSBlYnVyMTI4LT54W2NoICogMyAgICBdOworICAgICAgICBGSUxURVIoeiwgeSwgZWJ1cjEyOC0+ cmxiX2IsIGVidXIxMjgtPnJsYl9hKTsgIC8vIGFwcGx5IFJMQi1maWx0ZXIKIAotICAgICAgICAg ICAgYmluID0gZWJ1cjEyOC0+eltjaCAqIDNdICogZWJ1cjEyOC0+eltjaCAqIDNdOworICAgICAg ICBiaW4gPSBlYnVyMTI4LT56W2NoICogM10gKiBlYnVyMTI4LT56W2NoICogM107CiAKLSAgICAg ICAgICAgIC8qIGFkZCB0aGUgbmV3IHZhbHVlLCBhbmQgbGltaXQgdGhlIHN1bSB0byB0aGUgY2Fj aGUgc2l6ZSAoNDAwbXMgb3IgM3MpCi0gICAgICAgICAgICAgKiBieSByZW1vdmluZyB0aGUgb2xk ZXN0IG9uZSAqLwotICAgICAgICAgICAgZWJ1cjEyOC0+aTQwMC5zdW0gW2NoXSA9IGVidXIxMjgt Pmk0MDAuc3VtIFtjaF0gKyBiaW4gLSBlYnVyMTI4LT5pNDAwLmNhY2hlIFtjaF1bYmluX2lkXzQw MF07Ci0gICAgICAgICAgICBlYnVyMTI4LT5pMzAwMC5zdW1bY2hdID0gZWJ1cjEyOC0+aTMwMDAu c3VtW2NoXSArIGJpbiAtIGVidXIxMjgtPmkzMDAwLmNhY2hlW2NoXVtiaW5faWRfMzAwMF07Cisg ICAgICAgIC8qIGFkZCB0aGUgbmV3IHZhbHVlLCBhbmQgbGltaXQgdGhlIHN1bSB0byB0aGUgY2Fj aGUgc2l6ZSAoNDAwbXMgb3IgM3MpCisgICAgICAgICAqIGJ5IHJlbW92aW5nIHRoZSBvbGRlc3Qg b25lICovCisgICAgICAgIGVidXIxMjgtPmk0MDAuc3VtIFtjaF0gPSBlYnVyMTI4LT5pNDAwLnN1 bSBbY2hdICsgYmluIC0gZWJ1cjEyOC0+aTQwMC5jYWNoZSBbY2hdW2Jpbl9pZF80MDBdOworICAg ICAgICBlYnVyMTI4LT5pMzAwMC5zdW1bY2hdID0gZWJ1cjEyOC0+aTMwMDAuc3VtW2NoXSArIGJp biAtIGVidXIxMjgtPmkzMDAwLmNhY2hlW2NoXVtiaW5faWRfMzAwMF07CiAKLSAgICAgICAgICAg IC8qIG92ZXJyaWRlIG9sZCBjYWNoZSBlbnRyeSB3aXRoIHRoZSBuZXcgdmFsdWUgKi8KLSAgICAg ICAgICAgIGVidXIxMjgtPmk0MDAuY2FjaGUgW2NoXVtiaW5faWRfNDAwIF0gPSBiaW47Ci0gICAg ICAgICAgICBlYnVyMTI4LT5pMzAwMC5jYWNoZVtjaF1bYmluX2lkXzMwMDBdID0gYmluOwotICAg ICAgICB9CisgICAgICAgIC8qIG92ZXJyaWRlIG9sZCBjYWNoZSBlbnRyeSB3aXRoIHRoZSBuZXcg dmFsdWUgKi8KKyAgICAgICAgZWJ1cjEyOC0+aTQwMC5jYWNoZSBbY2hdW2Jpbl9pZF80MDAgXSA9 IGJpbjsKKyAgICAgICAgZWJ1cjEyOC0+aTMwMDAuY2FjaGVbY2hdW2Jpbl9pZF8zMDAwXSA9IGJp bjsKKyAgICB9CiAKICNkZWZpbmUgRklORF9QRUFLKGdsb2JhbCwgc3AsIHB0eXBlKSBkbyB7ICAg ICAgICAgICAgICAgICAgICAgICAgXAogICAgIGludCBjaDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC03MjMsMTEwICs3NTAsMTQ5IEBA IHN0YXRpYyBpbnQgZmlsdGVyX2ZyYW1lKEFWRmlsdGVyTGluayAqaW5saW5rLCBBVkZyYW1lICpp bnNhbXBsZXMpCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUgKDApCiAKLSAgICAgICAgRklORF9QRUFLKGVi dXIxMjgtPnNhbXBsZV9wZWFrLCBlYnVyMTI4LT5zYW1wbGVfcGVha3MsIFNBTVBMRVMpOwotICAg ICAgICBGSU5EX1BFQUsoZWJ1cjEyOC0+dHJ1ZV9wZWFrLCAgIGVidXIxMjgtPnRydWVfcGVha3Ms ICAgVFJVRSk7CisgICAgRklORF9QRUFLKGVidXIxMjgtPmZyYW1lX3NhbXBsZV9wZWFrLCBlYnVy MTI4LT5zYW1wbGVfcGVha3NfcGVyX2ZyYW1lLCBTQU1QTEVTKTsKKyAgICBGSU5EX1BFQUsoZWJ1 cjEyOC0+c2FtcGxlX3BlYWssIGVidXIxMjgtPnNhbXBsZV9wZWFrcywgU0FNUExFUyk7CisgICAg RklORF9QRUFLKGVidXIxMjgtPnRydWVfcGVhaywgICBlYnVyMTI4LT50cnVlX3BlYWtzLCAgIFRS VUUpOworfQogCi0gICAgICAgIC8qIEZvciBpbnRlZ3JhdGVkIGxvdWRuZXNzLCBnYXRpbmcgYmxv Y2tzIGFyZSA0MDBtcyBsb25nIHdpdGggNzUlCi0gICAgICAgICAqIG92ZXJsYXAgKHNlZSBCUy4x NzcwLTIgcDUpLCBzbyBhIHJlLWNvbXB1dGF0aW9uIGlzIG5lZWRlZCBlYWNoIDEwMG1zCi0gICAg ICAgICAqICg0ODAwIHNhbXBsZXMgYXQgNDhrSHopLiAqLwotICAgICAgICBpZiAoKytlYnVyMTI4 LT5zYW1wbGVfY291bnQgPT0gaW5saW5rLT5zYW1wbGVfcmF0ZSAvIDEwKSB7Ci0gICAgICAgICAg ICBkb3VibGUgbG91ZG5lc3NfNDAwLCBsb3VkbmVzc18zMDAwOwotICAgICAgICAgICAgZG91Ymxl IHBvd2VyXzQwMCA9IDFlLTEyLCBwb3dlcl8zMDAwID0gMWUtMTI7Ci0gICAgICAgICAgICBBVkZp bHRlckxpbmsgKm91dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07Ci0gICAgICAgICAgICBjb25zdCBp bnQ2NF90IHB0cyA9IGluc2FtcGxlcy0+cHRzICsKLSAgICAgICAgICAgICAgICBhdl9yZXNjYWxl X3EoaWR4X2luc2FtcGxlLCAoQVZSYXRpb25hbCl7IDEsIGlubGluay0+c2FtcGxlX3JhdGUgfSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5vdXRwdXRzW2VidXIxMjgtPmRvX3Zp ZGVvXS0+dGltZV9iYXNlKTsKK3N0YXRpYyB2b2lkIGVidXIxMjhfbG91ZG5lc3MoQVZGaWx0ZXJM aW5rICppbmxpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVCVVIxMjhDb250ZXh0 ICplYnVyMTI4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKmw0MDAsIGRv dWJsZSAqbDMwMDAsIGRvdWJsZSAqaW50ZWdyYXRlZCwgZG91YmxlICpwZWFrKQoreworICAgIGNv bnN0IGludCBuYl9jaGFubmVscyA9IGVidXIxMjgtPm5iX2NoYW5uZWxzOworICAgIGRvdWJsZSBw b3dlcl80MDAgPSAxZS0xMiwgcG93ZXJfMzAwMCA9IDFlLTEyOworICAgIGRvdWJsZSBsb3VkbmVz c180MDAsIGxvdWRuZXNzXzMwMDA7CiAKLSAgICAgICAgICAgIGVidXIxMjgtPnNhbXBsZV9jb3Vu dCA9IDA7CisgICAgZWJ1cjEyOC0+c2FtcGxlX2NvdW50ID0gMDsKIAogI2RlZmluZSBDT01QVVRF X0xPVURORVNTKG0sIHRpbWUpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAogICAgIGlmIChlYnVyMTI4LT5pIyN0aW1lLmZpbGxlZCkgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAvKiB3 ZWlnaHRpbmcgc3VtIG9mIHRoZSBsYXN0IDx0aW1lPiBtcyAqLyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgICAgICBmb3IgKGNoID0gMDsgY2ggPCBuYl9jaGFubmVsczsg Y2grKykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBm b3IgKGludCBjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgcG93ZXJfIyN0aW1lICs9IGVidXIxMjgt PmNoX3dlaWdodGluZ1tjaF0gKiBlYnVyMTI4LT5pIyN0aW1lLnN1bVtjaF07ICAgXAogICAgICAg ICBwb3dlcl8jI3RpbWUgLz0gSSMjdGltZSMjX0JJTlMoaW5saW5rLT5zYW1wbGVfcmF0ZSk7ICAg ICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg IGxvdWRuZXNzXyMjdGltZSA9IExPVURORVNTKHBvd2VyXyMjdGltZSk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoMCkKIAotICAgICAgICAgICAgQ09N UFVURV9MT1VETkVTUyhNLCAgNDAwKTsKLSAgICAgICAgICAgIENPTVBVVEVfTE9VRE5FU1MoUywg MzAwMCk7CisgICAgQ09NUFVURV9MT1VETkVTUyhNLCAgNDAwKTsKKyAgICBDT01QVVRFX0xPVURO RVNTKFMsIDMwMDApOwogCi0gICAgICAgICAgICAvKiBJbnRlZ3JhdGVkIGxvdWRuZXNzICovCisg ICAgLyogSW50ZWdyYXRlZCBsb3VkbmVzcyAqLwogI2RlZmluZSBJX0dBVEVfVEhSRVMgLTEwICAv LyBpbml0aWFsbHkgZGVmaW5lZCB0byAtOCBMVSBpbiB0aGUgZmlyc3QgRUJVIHN0YW5kYXJkCiAK LSAgICAgICAgICAgIGlmIChsb3VkbmVzc180MDAgPj0gQUJTX1RIUkVTKSB7Ci0gICAgICAgICAg ICAgICAgZG91YmxlIGludGVncmF0ZWRfc3VtID0gMC4wOwotICAgICAgICAgICAgICAgIHVpbnQ2 NF90IG5iX2ludGVncmF0ZWQgPSAwOwotICAgICAgICAgICAgICAgIGludCBnYXRlX2hpc3RfcG9z ID0gZ2F0ZV91cGRhdGUoJmVidXIxMjgtPmk0MDAsIHBvd2VyXzQwMCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdWRuZXNzXzQwMCwgSV9HQVRFX1RI UkVTKTsKLQotICAgICAgICAgICAgICAgIC8qIGNvbXB1dGUgaW50ZWdyYXRlZCBsb3VkbmVzcyBi eSBzdW1taW5nIHRoZSBoaXN0b2dyYW0gdmFsdWVzCi0gICAgICAgICAgICAgICAgICogYWJvdmUg dGhlIHJlbGF0aXZlIHRocmVzaG9sZCAqLwotICAgICAgICAgICAgICAgIGZvciAoaSA9IGdhdGVf aGlzdF9wb3M7IGkgPCBISVNUX1NJWkU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBuYl92ID0gZWJ1cjEyOC0+aTQwMC5oaXN0b2dyYW1baV0uY291bnQ7Ci0gICAg ICAgICAgICAgICAgICAgIG5iX2ludGVncmF0ZWQgICs9IG5iX3Y7Ci0gICAgICAgICAgICAgICAg ICAgIGludGVncmF0ZWRfc3VtICs9IG5iX3YgKiBlYnVyMTI4LT5pNDAwLmhpc3RvZ3JhbVtpXS5l bmVyZ3k7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChuYl9pbnRlZ3Jh dGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVidXIxMjgtPmludGVncmF0ZWRfbG91ZG5lc3Mg PSBMT1VETkVTUyhpbnRlZ3JhdGVkX3N1bSAvIG5iX2ludGVncmF0ZWQpOwotICAgICAgICAgICAg ICAgICAgICAvKiBkdWFsLW1vbm8gY29ycmVjdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICBp ZiAobmJfY2hhbm5lbHMgPT0gMSAmJiBlYnVyMTI4LT5kdWFsX21vbm8pIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGVidXIxMjgtPmludGVncmF0ZWRfbG91ZG5lc3MgLT0gZWJ1cjEyOC0+cGFu X2xhdzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICBpZiAo bG91ZG5lc3NfNDAwID49IEFCU19USFJFUykgeworICAgICAgICBkb3VibGUgaW50ZWdyYXRlZF9z dW0gPSAwLjA7CisgICAgICAgIHVpbnQ2NF90IG5iX2ludGVncmF0ZWQgPSAwOworICAgICAgICBp bnQgZ2F0ZV9oaXN0X3BvcyA9IGdhdGVfdXBkYXRlKCZlYnVyMTI4LT5pNDAwLCBwb3dlcl80MDAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG91ZG5lc3NfNDAwLCBJ X0dBVEVfVEhSRVMpOworCisgICAgICAgIC8qIGNvbXB1dGUgaW50ZWdyYXRlZCBsb3VkbmVzcyBi eSBzdW1taW5nIHRoZSBoaXN0b2dyYW0gdmFsdWVzCisgICAgICAgICAqIGFib3ZlIHRoZSByZWxh dGl2ZSB0aHJlc2hvbGQgKi8KKyAgICAgICAgZm9yIChpbnQgaSA9IGdhdGVfaGlzdF9wb3M7IGkg PCBISVNUX1NJWkU7IGkrKykgeworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbmJfdiA9IGVi dXIxMjgtPmk0MDAuaGlzdG9ncmFtW2ldLmNvdW50OworICAgICAgICAgICAgbmJfaW50ZWdyYXRl ZCAgKz0gbmJfdjsKKyAgICAgICAgICAgIGludGVncmF0ZWRfc3VtICs9IG5iX3YgKiBlYnVyMTI4 LT5pNDAwLmhpc3RvZ3JhbVtpXS5lbmVyZ3k7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5iX2lu dGVncmF0ZWQpIHsKKyAgICAgICAgICAgIGVidXIxMjgtPmludGVncmF0ZWRfbG91ZG5lc3MgPSBM T1VETkVTUyhpbnRlZ3JhdGVkX3N1bSAvIG5iX2ludGVncmF0ZWQpOworICAgICAgICAgICAgLyog ZHVhbC1tb25vIGNvcnJlY3Rpb24gKi8KKyAgICAgICAgICAgIGlmIChuYl9jaGFubmVscyA9PSAx ICYmIGVidXIxMjgtPmR1YWxfbW9ubykgeworICAgICAgICAgICAgICAgIGVidXIxMjgtPmludGVn cmF0ZWRfbG91ZG5lc3MgLT0gZWJ1cjEyOC0+cGFuX2xhdzsKICAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIH0KIAotICAgICAgICAgICAgLyogTFJBICovCisgICAgLyogTFJBICovCiAjZGVm aW5lIExSQV9HQVRFX1RIUkVTIC0yMAogI2RlZmluZSBMUkFfTE9XRVJfUFJDICAgMTAKICNkZWZp bmUgTFJBX0hJR0hFUl9QUkMgIDk1CiAKLSAgICAgICAgICAgIC8qIFhYWDogZXhhbXBsZSBjb2Rl IGluIEVCVSAzMzQyIGlzICI+PSIgYnV0IGZvcm11bGEgaW4gQlMuMTc3MAotICAgICAgICAgICAg ICogc3BlY3MgaXMgIj4iICovCi0gICAgICAgICAgICBpZiAobG91ZG5lc3NfMzAwMCA+PSBBQlNf VEhSRVMpIHsKLSAgICAgICAgICAgICAgICB1aW50NjRfdCBuYl9wb3dlcnMgPSAwOwotICAgICAg ICAgICAgICAgIGludCBnYXRlX2hpc3RfcG9zID0gZ2F0ZV91cGRhdGUoJmVidXIxMjgtPmkzMDAw LCBwb3dlcl8zMDAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbG91ZG5lc3NfMzAwMCwgTFJBX0dBVEVfVEhSRVMpOwotCi0gICAgICAgICAgICAgICAg Zm9yIChpID0gZ2F0ZV9oaXN0X3BvczsgaSA8IEhJU1RfU0laRTsgaSsrKQotICAgICAgICAgICAg ICAgICAgICBuYl9wb3dlcnMgKz0gZWJ1cjEyOC0+aTMwMDAuaGlzdG9ncmFtW2ldLmNvdW50Owot ICAgICAgICAgICAgICAgIGlmIChuYl9wb3dlcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgdWlu dDY0X3QgbiwgbmJfcG93OwotCi0gICAgICAgICAgICAgICAgICAgIC8qIGdldCBsb3dlciBsb3Vk bmVzcyB0byBjb25zaWRlciAqLwotICAgICAgICAgICAgICAgICAgICBuID0gMDsKLSAgICAgICAg ICAgICAgICAgICAgbmJfcG93ID0gTFJBX0xPV0VSX1BSQyAqIG5iX3Bvd2VycyAqIDAuMDEgKyAw LjU7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGdhdGVfaGlzdF9wb3M7IGkgPCBISVNU X1NJWkU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgbiArPSBlYnVyMTI4LT5pMzAw MC5oaXN0b2dyYW1baV0uY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA+PSBu Yl9wb3cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYnVyMTI4LT5scmFfbG93ID0g ZWJ1cjEyOC0+aTMwMDAuaGlzdG9ncmFtW2ldLmxvdWRuZXNzOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLyogZ2V0IGhpZ2hlciBsb3VkbmVzcyB0 byBjb25zaWRlciAqLwotICAgICAgICAgICAgICAgICAgICBuID0gbmJfcG93ZXJzOwotICAgICAg ICAgICAgICAgICAgICBuYl9wb3cgPSBMUkFfSElHSEVSX1BSQyAqIG5iX3Bvd2VycyAqIDAuMDEg KyAwLjU7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IEhJU1RfU0laRSAtIDE7IGkgPj0g MDsgaS0tKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuIC09IEZGTUlOKG4sIGVidXIxMjgt PmkzMDAwLmhpc3RvZ3JhbVtpXS5jb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo biA8IG5iX3BvdykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVidXIxMjgtPmxyYV9o aWdoID0gZWJ1cjEyOC0+aTMwMDAuaGlzdG9ncmFtW2ldLmxvdWRuZXNzOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gWFhYOiBzaG93IGxvdyAm IGhpZ2ggb24gdGhlIGdyYXBoPwotICAgICAgICAgICAgICAgICAgICBlYnVyMTI4LT5sb3VkbmVz c19yYW5nZSA9IGVidXIxMjgtPmxyYV9oaWdoIC0gZWJ1cjEyOC0+bHJhX2xvdzsKKyAgICAvKiBY WFg6IGV4YW1wbGUgY29kZSBpbiBFQlUgMzM0MiBpcyAiPj0iIGJ1dCBmb3JtdWxhIGluIEJTLjE3 NzAKKyAgICAgKiBzcGVjcyBpcyAiPiIgKi8KKyAgICBpZiAobG91ZG5lc3NfMzAwMCA+PSBBQlNf VEhSRVMpIHsKKyAgICAgICAgdWludDY0X3QgbmJfcG93ZXJzID0gMDsKKyAgICAgICAgaW50IGdh dGVfaGlzdF9wb3MgPSBnYXRlX3VwZGF0ZSgmZWJ1cjEyOC0+aTMwMDAsIHBvd2VyXzMwMDAsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG91ZG5lc3NfMzAwMCwgTFJB X0dBVEVfVEhSRVMpOworCisgICAgICAgIGZvciAoaW50IGkgPSBnYXRlX2hpc3RfcG9zOyBpIDwg SElTVF9TSVpFOyBpKyspCisgICAgICAgICAgICBuYl9wb3dlcnMgKz0gZWJ1cjEyOC0+aTMwMDAu aGlzdG9ncmFtW2ldLmNvdW50OworICAgICAgICBpZiAobmJfcG93ZXJzKSB7CisgICAgICAgICAg ICB1aW50NjRfdCBuLCBuYl9wb3c7CisKKyAgICAgICAgICAgIC8qIGdldCBsb3dlciBsb3VkbmVz cyB0byBjb25zaWRlciAqLworICAgICAgICAgICAgbiA9IDA7CisgICAgICAgICAgICBuYl9wb3cg PSBMUkFfTE9XRVJfUFJDICogbmJfcG93ZXJzICogMC4wMSArIDAuNTsKKyAgICAgICAgICAgIGZv ciAoaW50IGkgPSBnYXRlX2hpc3RfcG9zOyBpIDwgSElTVF9TSVpFOyBpKyspIHsKKyAgICAgICAg ICAgICAgICBuICs9IGVidXIxMjgtPmkzMDAwLmhpc3RvZ3JhbVtpXS5jb3VudDsKKyAgICAgICAg ICAgICAgICBpZiAobiA+PSBuYl9wb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgZWJ1cjEyOC0+ bHJhX2xvdyA9IGVidXIxMjgtPmkzMDAwLmhpc3RvZ3JhbVtpXS5sb3VkbmVzczsKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0g ICAgICAgICAgICAvKiBkdWFsLW1vbm8gY29ycmVjdGlvbiAqLwotICAgICAgICAgICAgaWYgKG5i X2NoYW5uZWxzID09IDEgJiYgZWJ1cjEyOC0+ZHVhbF9tb25vKSB7Ci0gICAgICAgICAgICAgICAg bG91ZG5lc3NfNDAwIC09IGVidXIxMjgtPnBhbl9sYXc7Ci0gICAgICAgICAgICAgICAgbG91ZG5l c3NfMzAwMCAtPSBlYnVyMTI4LT5wYW5fbGF3OworICAgICAgICAgICAgLyogZ2V0IGhpZ2hlciBs b3VkbmVzcyB0byBjb25zaWRlciAqLworICAgICAgICAgICAgbiA9IG5iX3Bvd2VyczsKKyAgICAg ICAgICAgIG5iX3BvdyA9IExSQV9ISUdIRVJfUFJDICogbmJfcG93ZXJzICogMC4wMSArIDAuNTsK KyAgICAgICAgICAgIGZvciAoaW50IGkgPSBISVNUX1NJWkUgLSAxOyBpID49IDA7IGktLSkgewor ICAgICAgICAgICAgICAgIG4gLT0gRkZNSU4obiwgZWJ1cjEyOC0+aTMwMDAuaGlzdG9ncmFtW2ld LmNvdW50KTsKKyAgICAgICAgICAgICAgICBpZiAobiA8IG5iX3BvdykgeworICAgICAgICAgICAg ICAgICAgICBlYnVyMTI4LT5scmFfaGlnaCA9IGVidXIxMjgtPmkzMDAwLmhpc3RvZ3JhbVtpXS5s b3VkbmVzczsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvLyBYWFg6IHNob3cgbG93ICYgaGlnaCBvbiB0 aGUgZ3JhcGg/CisgICAgICAgICAgICBlYnVyMTI4LT5sb3VkbmVzc19yYW5nZSA9IGVidXIxMjgt PmxyYV9oaWdoIC0gZWJ1cjEyOC0+bHJhX2xvdzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8q IGR1YWwtbW9ubyBjb3JyZWN0aW9uICovCisgICAgaWYgKG5iX2NoYW5uZWxzID09IDEgJiYgZWJ1 cjEyOC0+ZHVhbF9tb25vKSB7CisgICAgICAgIGxvdWRuZXNzXzQwMCAtPSBlYnVyMTI4LT5wYW5f bGF3OworICAgICAgICBsb3VkbmVzc18zMDAwIC09IGVidXIxMjgtPnBhbl9sYXc7CisgICAgfQor CisgICAgaWYgKGVidXIxMjgtPnBlYWtfbW9kZSAmIFBFQUtfTU9ERV9TQU1QTEVTX1BFQUtTKSB7 CisgICAgICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBuYl9jaGFubmVsczsgY2grKykKKyAgICAg ICAgICAgIGVidXIxMjgtPnNhbXBsZV9wZWFrc19wZXJfZnJhbWVbY2hdID0gMC4wOworICAgIH0K KworICAgICpsNDAwICA9IGxvdWRuZXNzXzQwMDsKKyAgICAqbDMwMDAgPSBsb3VkbmVzc18zMDAw OworICAgICppbnRlZ3JhdGVkID0gZWJ1cjEyOC0+aW50ZWdyYXRlZF9sb3VkbmVzczsKKyAgICAq cGVhayA9IGVidXIxMjgtPmZyYW1lX3NhbXBsZV9wZWFrOworfQorCitzdGF0aWMgaW50IGZpbHRl cl9mcmFtZShBVkZpbHRlckxpbmsgKmlubGluaywgQVZGcmFtZSAqaW5zYW1wbGVzKQoreworICAg IGludCBpZHhfaW5zYW1wbGUsIHJldDsKKyAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IGlubGlu ay0+ZHN0OworICAgIEVCVVIxMjhDb250ZXh0ICplYnVyMTI4ID0gY3R4LT5wcml2OworICAgIGNv bnN0IGludCBuYl9jaGFubmVscyA9IGVidXIxMjgtPm5iX2NoYW5uZWxzOworICAgIGNvbnN0IGlu dCBuYl9zYW1wbGVzICA9IGluc2FtcGxlcy0+bmJfc2FtcGxlczsKKyAgICBjb25zdCBkb3VibGUg KnNhbXBsZXMgPSAoY29uc3QgZG91YmxlICopaW5zYW1wbGVzLT5kYXRhWzBdOworICAgIEFWRnJh bWUgKnBpYzsKKworICAgIHJldCA9IHRydWVfcGVha3NfZWJ1cjEyOChlYnVyMTI4LCAoY29uc3Qg dWludDhfdCAqKilpbnNhbXBsZXMtPmRhdGEsIG5iX3NhbXBsZXMpOworICAgIGlmIChyZXQgPCAw KQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgZm9yIChpZHhfaW5zYW1wbGUgPSBlYnVyMTI4 LT5pZHhfaW5zYW1wbGU7IGlkeF9pbnNhbXBsZSA8IG5iX3NhbXBsZXM7IGlkeF9pbnNhbXBsZSsr KSB7CisgICAgICAgIHByb2Nlc3NfZWJ1cjEyOChlYnVyMTI4LCBzYW1wbGVzICsgaWR4X2luc2Ft cGxlICogbmJfY2hhbm5lbHMpOworCisgICAgICAgIC8qIEZvciBpbnRlZ3JhdGVkIGxvdWRuZXNz LCBnYXRpbmcgYmxvY2tzIGFyZSA0MDBtcyBsb25nIHdpdGggNzUlCisgICAgICAgICAqIG92ZXJs YXAgKHNlZSBCUy4xNzcwLTIgcDUpLCBzbyBhIHJlLWNvbXB1dGF0aW9uIGlzIG5lZWRlZCBlYWNo IDEwMG1zCisgICAgICAgICAqICg0ODAwIHNhbXBsZXMgYXQgNDhrSHopLiAqLworICAgICAgICBp ZiAoKytlYnVyMTI4LT5zYW1wbGVfY291bnQgPT0gaW5saW5rLT5zYW1wbGVfcmF0ZSAvIDEwKSB7 CisgICAgICAgICAgICBkb3VibGUgbG91ZG5lc3NfNDAwLCBsb3VkbmVzc18zMDAwLCBsb3VkbmVz c19pbnRlZ3JhdGVkLCBwZWFrOworICAgICAgICAgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0g Y3R4LT5vdXRwdXRzWzBdOworICAgICAgICAgICAgY29uc3QgaW50NjRfdCBwdHMgPSBpbnNhbXBs ZXMtPnB0cyArCisgICAgICAgICAgICAgICAgYXZfcmVzY2FsZV9xKGlkeF9pbnNhbXBsZSwgKEFW UmF0aW9uYWwpeyAxLCBpbmxpbmstPnNhbXBsZV9yYXRlIH0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGN0eC0+b3V0cHV0c1tlYnVyMTI4LT5kb192aWRlb10tPnRpbWVfYmFzZSk7CisK KyAgICAgICAgICAgIGVidXIxMjhfbG91ZG5lc3MoaW5saW5rLCBlYnVyMTI4LCAmbG91ZG5lc3Nf NDAwLCAmbG91ZG5lc3NfMzAwMCwgJmxvdWRuZXNzX2ludGVncmF0ZWQsICZwZWFrKTsKKwogI2Rl ZmluZSBMT0dfRk1UICJUQVJHRVQ6JWQgTFVGUyAgICBNOiU2LjFmIFM6JTYuMWYgICAgIEk6JTYu MWYgJXMgICAgICAgTFJBOiU2LjFmIExVIgogCiAgICAgICAgICAgICAvKiBwdXNoIG9uZSB2aWRl byBmcmFtZSAqLwpAQCAtOTEwLDcgKzk3Niw3IEBAIHN0YXRpYyBpbnQgZmlsdGVyX2ZyYW1lKEFW RmlsdGVyTGluayAqaW5saW5rLCBBVkZyYW1lICppbnNhbXBsZXMpCiAgICAgaWYgKGVidXIxMjgt PnBlYWtfbW9kZSAmIFBFQUtfTU9ERV8gIyMgcHR5cGUgIyMgX1BFQUtTKSB7ICAgICAgICAgICAg ICAgXAogICAgICAgICBkb3VibGUgbWF4X3BlYWsgPSAwLjA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2hhciBrZXlbNjRdOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg IGZvciAoY2ggPSAwOyBjaCA8IG5iX2NoYW5uZWxzOyBjaCsrKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICBmb3IgKGludCBjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7 IGNoKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHNucHJpbnRm KGtleSwgc2l6ZW9mKGtleSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CiAgICAgICAgICAgICAgICAgICAgICBNRVRBX1BSRUZJWCBBVl9TVFJJTkdJRlkobmFtZSkgIl9w ZWFrc19jaCVkIiwgY2gpOyAgICAgXAogICAgICAgICAgICAgbWF4X3BlYWsgPSBmbWF4KG1heF9w ZWFrLCBlYnVyMTI4LT5uYW1lIyNfcGVha3NbY2hdKTsgICAgICAgICAgIFwKQEAgLTk0OSw3ICsx MDE1LDcgQEAgc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICppbmxpbmssIEFW RnJhbWUgKmluc2FtcGxlcykKICNkZWZpbmUgUFJJTlRfUEVBS1Moc3RyLCBzcCwgcHR5cGUpIGRv IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmIChlYnVyMTI4LT5wZWFrX21v ZGUgJiBQRUFLX01PREVfICMjIHB0eXBlICMjIF9QRUFLUykgeyAgICAgICBcCiAgICAgICAgIGF2 X2xvZyhjdHgsIGVidXIxMjgtPmxvZ2xldmVsLCAiICAiIHN0ciAiOiIpOyAgICAgICAgICAgICAg IFwKLSAgICAgICAgZm9yIChjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICBmb3IgKGludCBjaCA9IDA7IGNoIDwgbmJfY2hhbm5l bHM7IGNoKyspICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBhdl9sb2coY3R4LCBl YnVyMTI4LT5sb2dsZXZlbCwgIiAlNS4xZiIsIERCRlMoc3BbY2hdKSk7IFwKICAgICAgICAgYXZf bG9nKGN0eCwgZWJ1cjEyOC0+bG9nbGV2ZWwsICIgZEJGUyIpOyAgICAgICAgICAgICAgICAgICAg XAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCkBAIC0xMDQ3LDYgKzExMTMsMzYgQEAgc3RhdGljIGludCBxdWVyeV9m b3JtYXRzKEFWRmlsdGVyQ29udGV4dCAqY3R4KQogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMg YXZfY29sZCB2b2lkIHVuaW5pdF9lYnVyMTI4KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBFQlVSMTI4 Q29udGV4dCAqZWJ1cjEyOCkKK3sKKyAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+eV9saW5lX3JlZik7 CisgICAgYXZfZnJlZXAoJmVidXIxMjgtPngpOworICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT55KTsK KyAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+eik7CisgICAgYXZfZnJlZXAoJmVidXIxMjgtPmNoX3dl aWdodGluZyk7CisgICAgYXZfZnJlZXAoJmVidXIxMjgtPnRydWVfcGVha3MpOworICAgIGF2X2Zy ZWVwKCZlYnVyMTI4LT5zYW1wbGVfcGVha3MpOworICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT50cnVl X3BlYWtzX3Blcl9mcmFtZSk7CisgICAgYXZfZnJlZXAoJmVidXIxMjgtPnNhbXBsZV9wZWFrc19w ZXJfZnJhbWUpOworICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT5pNDAwLnN1bSk7CisgICAgYXZfZnJl ZXAoJmVidXIxMjgtPmkzMDAwLnN1bSk7CisgICAgYXZfZnJlZXAoJmVidXIxMjgtPmk0MDAuaGlz dG9ncmFtKTsKKyAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+aTMwMDAuaGlzdG9ncmFtKTsKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IGVidXIxMjgtPm5iX2NoYW5uZWxzOyBpKyspIHsKKyAgICAgICAg aWYgKGVidXIxMjgtPmk0MDAuY2FjaGUpCisgICAgICAgICAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+ aTQwMC5jYWNoZVtpXSk7CisgICAgICAgIGlmIChlYnVyMTI4LT5pMzAwMC5jYWNoZSkKKyAgICAg ICAgICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT5pMzAwMC5jYWNoZVtpXSk7CisgICAgfQorICAgIGF2 X2ZyZWVwKCZlYnVyMTI4LT5pNDAwLmNhY2hlKTsKKyAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+aTMw MDAuY2FjaGUpOworICAgIGF2X2ZyYW1lX2ZyZWUoJmVidXIxMjgtPm91dHBpY3JlZik7CisjaWYg Q09ORklHX1NXUkVTQU1QTEUKKyAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+c3dyX2J1Zik7CisgICAg c3dyX2ZyZWUoJmVidXIxMjgtPnN3cl9jdHgpOworI2VuZGlmCit9CisKIHN0YXRpYyBhdl9jb2xk IHZvaWQgdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQogewogICAgIEVCVVIxMjhDb250ZXh0 ICplYnVyMTI4ID0gY3R4LT5wcml2OwpAQCAtMTA4NSwzMSArMTE4MSw3IEBAIHN0YXRpYyBhdl9j b2xkIHZvaWQgdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQogICAgIGF2X2xvZyhjdHgsIEFW X0xPR19JTkZPLCAiXG4iKTsKICAgICB9CiAKLSAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+eV9saW5l X3JlZik7Ci0gICAgYXZfZnJlZXAoJmVidXIxMjgtPngpOwotICAgIGF2X2ZyZWVwKCZlYnVyMTI4 LT55KTsKLSAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+eik7Ci0gICAgYXZfZnJlZXAoJmVidXIxMjgt PmNoX3dlaWdodGluZyk7Ci0gICAgYXZfZnJlZXAoJmVidXIxMjgtPnRydWVfcGVha3MpOwotICAg IGF2X2ZyZWVwKCZlYnVyMTI4LT5zYW1wbGVfcGVha3MpOwotICAgIGF2X2ZyZWVwKCZlYnVyMTI4 LT50cnVlX3BlYWtzX3Blcl9mcmFtZSk7Ci0gICAgYXZfZnJlZXAoJmVidXIxMjgtPmk0MDAuc3Vt KTsKLSAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+aTMwMDAuc3VtKTsKLSAgICBhdl9mcmVlcCgmZWJ1 cjEyOC0+aTQwMC5oaXN0b2dyYW0pOwotICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT5pMzAwMC5oaXN0 b2dyYW0pOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWJ1cjEyOC0+bmJfY2hhbm5lbHM7IGkr KykgewotICAgICAgICBpZiAoZWJ1cjEyOC0+aTQwMC5jYWNoZSkKLSAgICAgICAgICAgIGF2X2Zy ZWVwKCZlYnVyMTI4LT5pNDAwLmNhY2hlW2ldKTsKLSAgICAgICAgaWYgKGVidXIxMjgtPmkzMDAw LmNhY2hlKQotICAgICAgICAgICAgYXZfZnJlZXAoJmVidXIxMjgtPmkzMDAwLmNhY2hlW2ldKTsK LSAgICB9Ci0gICAgYXZfZnJlZXAoJmVidXIxMjgtPmk0MDAuY2FjaGUpOwotICAgIGF2X2ZyZWVw KCZlYnVyMTI4LT5pMzAwMC5jYWNoZSk7Ci0gICAgYXZfZnJhbWVfZnJlZSgmZWJ1cjEyOC0+b3V0 cGljcmVmKTsKLSNpZiBDT05GSUdfU1dSRVNBTVBMRQotICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT5z d3JfYnVmKTsKLSAgICBzd3JfZnJlZSgmZWJ1cjEyOC0+c3dyX2N0eCk7Ci0jZW5kaWYKKyAgICB1 bmluaXRfZWJ1cjEyOChjdHgsIGVidXIxMjgpOwogfQogCiBzdGF0aWMgY29uc3QgQVZGaWx0ZXJQ YWQgZWJ1cjEyOF9pbnB1dHNbXSA9IHsKQEAgLTExMzMsMyArMTIwNSw1MjEgQEAgY29uc3QgQVZG aWx0ZXIgZmZfYWZfZWJ1cjEyOCA9IHsKICAgICAucHJpdl9jbGFzcyAgICA9ICZlYnVyMTI4X2Ns YXNzLAogICAgIC5mbGFncyAgICAgICAgID0gQVZGSUxURVJfRkxBR19EWU5BTUlDX09VVFBVVFMs CiB9OworCisjZGVmaW5lIEZJRk9fU0laRSAzMAorCitlbnVtIER5bmFtaWNNb2RlIHsKKyAgICBE TV9NT01FTlRBUlkgID0gMSA8PCAwLAorICAgIERNX1NIT1JUVEVSTSAgPSAxIDw8IDEsCisgICAg RE1fSU5URUdSQVRFRCA9IDEgPDwgMiwKK307CisKK2VudW0gTWVhbk1vZGUgeworICAgIE1NX0FS SVRITUVUSUMsCisgICAgTU1fSEFSTU9OSUMsCisgICAgTU1fR0VPTUVUUklDLAorICAgIE1NX01B WElNVU0sCisgICAgTU1fTU9ERVMKK307CisKK3R5cGVkZWYgc3RydWN0IExvdWROb3JtQ29udGV4 dCB7CisgICAgY29uc3QgQVZDbGFzcyAqY2xhc3M7CisgICAgZG91YmxlIHRhcmdldF9pOworICAg IGRvdWJsZSB0YXJnZXRfbHJhOworICAgIGRvdWJsZSB0YXJnZXRfdHA7CisgICAgZG91YmxlIG1l YXN1cmVkX2k7CisgICAgZG91YmxlIG1lYXN1cmVkX2xyYTsKKyAgICBkb3VibGUgbWVhc3VyZWRf dHA7CisgICAgZG91YmxlIG1lYXN1cmVkX3RocmVzaDsKKyAgICBkb3VibGUgb2Zmc2V0OworICAg IGludCBsaW5lYXJfbW9kZTsKKyAgICBpbnQgZHVhbF9tb25vOworICAgIGVudW0gUHJpbnRGb3Jt YXQgcHJpbnRfZm9ybWF0OworICAgIGludCBkeW5hbWljX21vZGU7CisgICAgaW50IG1lYW5fbW9k ZTsKKyAgICBkb3VibGUgcmFuZ2V1cDsKKyAgICBkb3VibGUgcmFuZ2Vkb3duOworICAgIGRvdWJs ZSBhdHRhY2s7CisgICAgZG91YmxlIHJlbGVhc2U7CisgICAgZG91YmxlIGF0dGFja19jb2VmZjsK KyAgICBkb3VibGUgcmVsZWFzZV9jb2VmZjsKKworICAgIGludCBlb2Y7CisgICAgaW50NjRfdCBl b2ZfcHRzOworICAgIGludCBuYl9jaGFubmVsczsKKyAgICBpbnQgbmJfc2FtcGxlczsKKworICAg IEFWRnJhbWUgKmluc2FtcGxlczsKKyAgICBBVkZyYW1lICpmcmFtZXNbRklGT19TSVpFXTsKKyAg ICBkb3VibGUgaTQwMDsKKyAgICBkb3VibGUgaTMwMDA7CisgICAgZG91YmxlIGludGVncmF0ZWQ7 CisgICAgZG91YmxlIHBlYWtzW0ZJRk9fU0laRV07CisgICAgZG91YmxlIHByZXZfb2Zmc2V0Owor CisgICAgRUJVUjEyOENvbnRleHQgcjEyOF9pbjsKKyAgICBFQlVSMTI4Q29udGV4dCByMTI4X291 dDsKK30gTG91ZE5vcm1Db250ZXh0OworCitzdGF0aWMgYXZfY29sZCBpbnQgbG91ZG5vcm1faW5p dChBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBMb3VkTm9ybUNvbnRleHQgKnMgPSBjdHgt PnByaXY7CisgICAgaW50IHJldDsKKworICAgIHJldCA9IGluaXRfZWJ1cjEyOChjdHgsICZzLT5y MTI4X2luKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICByZXQg PSBpbml0X2VidXIxMjgoY3R4LCAmcy0+cjEyOF9vdXQpOworICAgIGlmIChyZXQgPCAwKQorICAg ICAgICByZXR1cm4gcmV0OworCisgICAgcy0+cjEyOF9pbi5kdWFsX21vbm8gPSBzLT5kdWFsX21v bm87CisgICAgcy0+cjEyOF9vdXQuZHVhbF9tb25vID0gcy0+ZHVhbF9tb25vOworCisgICAgaWYg KHMtPmxpbmVhcl9tb2RlKSB7CisgICAgICAgIGRvdWJsZSBvZmZzZXQsIG9mZnNldF90cDsKKyAg ICAgICAgb2Zmc2V0ICAgID0gcy0+dGFyZ2V0X2kgLSBzLT5tZWFzdXJlZF9pOworICAgICAgICBv ZmZzZXRfdHAgPSBzLT5tZWFzdXJlZF90cCArIG9mZnNldDsKKworICAgICAgICBpZiAocy0+bWVh c3VyZWRfdHAgIT0gOTkgJiYgcy0+bWVhc3VyZWRfdGhyZXNoICE9IC03MCAmJiBzLT5tZWFzdXJl ZF9scmEgIT0gMCAmJiBzLT5tZWFzdXJlZF9pICE9IDApIHsKKyAgICAgICAgICAgIGlmICgob2Zm c2V0X3RwIDw9IHMtPnRhcmdldF90cCkgJiYgKHMtPm1lYXN1cmVkX2xyYSA8PSBzLT50YXJnZXRf bHJhKSkgeworICAgICAgICAgICAgICAgIHMtPm9mZnNldCA9IHBvdygxMC4sIG9mZnNldCAvIDIw Lik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzLT5saW5l YXJfbW9kZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBsb3Vkbm9ybV9xdWVyeV9mb3JtYXRzKEFWRmlsdGVyQ29udGV4dCAqY3R4KQorewor ICAgIExvdWROb3JtQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBzdGF0aWMgY29uc3QgaW50 IGlucHV0X3NyYXRlW10gPSB7MTkyMDAwLCAtMX07CisgICAgc3RhdGljIGNvbnN0IGVudW0gQVZT YW1wbGVGb3JtYXQgc2FtcGxlX2ZtdHNbXSA9IHsKKyAgICAgICAgICAgIEFWX1NBTVBMRV9GTVRf REJMLAorICAgICAgICAgICAgQVZfU0FNUExFX0ZNVF9OT05FCisgICAgfTsKKyAgICBpbnQgcmV0 ID0gZmZfc2V0X2NvbW1vbl9hbGxfY2hhbm5lbF9jb3VudHMoY3R4KTsKKyAgICBpZiAocmV0IDwg MCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCA9IGZmX3NldF9jb21tb25fZm9ybWF0 c19mcm9tX2xpc3QoY3R4LCBzYW1wbGVfZm10cyk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAg IHJldHVybiByZXQ7CisKKyAgICBpZiAocy0+bGluZWFyX21vZGUpIHsKKyAgICAgICAgcmV0dXJu IGZmX3NldF9jb21tb25fYWxsX3NhbXBsZXJhdGVzKGN0eCk7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgcmV0dXJuIGZmX3NldF9jb21tb25fc2FtcGxlcmF0ZXNfZnJvbV9saXN0KGN0eCwgaW5wdXRf c3JhdGUpOworICAgIH0KK30KKworc3RhdGljIGF2X2NvbGQgdm9pZCBsb3Vkbm9ybV91bmluaXQo QVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgTG91ZE5vcm1Db250ZXh0ICpzID0gY3R4LT5w cml2OworICAgIEVCVVIxMjhDb250ZXh0ICpyMTI4X291dCA9ICZzLT5yMTI4X291dDsKKyAgICBF QlVSMTI4Q29udGV4dCAqcjEyOF9pbiA9ICZzLT5yMTI4X2luOworCisgICAgaWYgKHMtPm5iX2No YW5uZWxzID4gMCkgeworICAgIHN3aXRjaCAocy0+cHJpbnRfZm9ybWF0KSB7CisgICAgY2FzZSBO T05FOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgSlNPTjoKKyAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0lORk8sCisgICAgICAgICAgICAiXG57XG4iCisgICAgICAgICAgICAiXHRcImlu cHV0X2lcIiA6IFwiJS4yZlwiLFxuIgorICAgICAgICAgICAgIlx0XCJpbnB1dF90cFwiIDogXCIl LjJmXCIsXG4iCisgICAgICAgICAgICAiXHRcImlucHV0X2xyYVwiIDogXCIlLjJmXCIsXG4iCisg ICAgICAgICAgICAiXHRcImlucHV0X3RocmVzaFwiIDogXCIlLjJmXCIsXG4iCisgICAgICAgICAg ICAiXHRcIm91dHB1dF9pXCIgOiBcIiUuMmZcIixcbiIKKyAgICAgICAgICAgICJcdFwib3V0cHV0 X3RwXCIgOiBcIiUrLjJmXCIsXG4iCisgICAgICAgICAgICAiXHRcIm91dHB1dF9scmFcIiA6IFwi JS4yZlwiLFxuIgorICAgICAgICAgICAgIlx0XCJvdXRwdXRfdGhyZXNoXCIgOiBcIiUuMmZcIixc biIKKyAgICAgICAgICAgICJcdFwibm9ybWFsaXphdGlvbl90eXBlXCIgOiBcIiVzXCIsXG4iCisg ICAgICAgICAgICAiXHRcInRhcmdldF9vZmZzZXRcIiA6IFwiJS4yZlwiXG4iCisgICAgICAgICAg ICAifVxuIiwKKyAgICAgICAgICAgIHIxMjhfaW4tPmludGVncmF0ZWRfbG91ZG5lc3MsCisgICAg ICAgICAgICByMTI4X2luLT50cnVlX3BlYWssCisgICAgICAgICAgICByMTI4X2luLT5sb3VkbmVz c19yYW5nZSwKKyAgICAgICAgICAgIHIxMjhfaW4tPmkzMDAwLnJlbF90aHJlc2hvbGQsCisgICAg ICAgICAgICByMTI4X291dC0+aW50ZWdyYXRlZF9sb3VkbmVzcywKKyAgICAgICAgICAgIHIxMjhf b3V0LT50cnVlX3BlYWssCisgICAgICAgICAgICByMTI4X291dC0+bG91ZG5lc3NfcmFuZ2UsCisg ICAgICAgICAgICByMTI4X291dC0+aTMwMDAucmVsX3RocmVzaG9sZCwKKyAgICAgICAgICAgIHMt PmxpbmVhcl9tb2RlID8gImxpbmVhciIgOiAiZHluYW1pYyIsCisgICAgICAgICAgICBzLT50YXJn ZXRfaSAtIHIxMjhfb3V0LT5pbnRlZ3JhdGVkX2xvdWRuZXNzCisgICAgICAgICk7CisgICAgICAg IGJyZWFrOworCisgICAgY2FzZSBTVU1NQVJZOgorICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df SU5GTywKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJJbnB1dCBJbnRlZ3JhdGVkOiAg ICUrNi4xZiBMVUZTXG4iCisgICAgICAgICAgICAiSW5wdXQgVHJ1ZSBQZWFrOiAgICAlKzYuMWYg ZEJUUFxuIgorICAgICAgICAgICAgIklucHV0IExSQTogICAgICAgICAgJTYuMWYgTFVcbiIKKyAg ICAgICAgICAgICJJbnB1dCBUaHJlc2hvbGQ6ICAgICUrNi4xZiBMVUZTXG4iCisgICAgICAgICAg ICAiXG4iCisgICAgICAgICAgICAiT3V0cHV0IEludGVncmF0ZWQ6ICAlKzYuMWYgTFVGU1xuIgor ICAgICAgICAgICAgIk91dHB1dCBUcnVlIFBlYWs6ICAgJSs2LjFmIGRCVFBcbiIKKyAgICAgICAg ICAgICJPdXRwdXQgTFJBOiAgICAgICAgICU2LjFmIExVXG4iCisgICAgICAgICAgICAiT3V0cHV0 IFRocmVzaG9sZDogICAlKzYuMWYgTFVGU1xuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAg ICAgIk5vcm1hbGl6YXRpb24gVHlwZTogICAlc1xuIgorICAgICAgICAgICAgIlRhcmdldCBPZmZz ZXQ6ICAgICAgJSs2LjFmIExVXG4iLAorICAgICAgICAgICAgcjEyOF9pbi0+aW50ZWdyYXRlZF9s b3VkbmVzcywKKyAgICAgICAgICAgIHIxMjhfaW4tPnRydWVfcGVhaywKKyAgICAgICAgICAgIHIx MjhfaW4tPmxvdWRuZXNzX3JhbmdlLAorICAgICAgICAgICAgcjEyOF9pbi0+aTMwMDAucmVsX3Ro cmVzaG9sZCwKKyAgICAgICAgICAgIHIxMjhfb3V0LT5pbnRlZ3JhdGVkX2xvdWRuZXNzLAorICAg ICAgICAgICAgcjEyOF9vdXQtPnRydWVfcGVhaywKKyAgICAgICAgICAgIHIxMjhfb3V0LT5sb3Vk bmVzc19yYW5nZSwKKyAgICAgICAgICAgIHIxMjhfb3V0LT5pMzAwMC5yZWxfdGhyZXNob2xkLAor ICAgICAgICAgICAgcy0+bGluZWFyX21vZGUgPyAiTGluZWFyIiA6ICJEeW5hbWljIiwKKyAgICAg ICAgICAgIHMtPnRhcmdldF9pIC0gcjEyOF9vdXQtPmludGVncmF0ZWRfbG91ZG5lc3MKKyAgICAg ICAgKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSAw OyBpIDwgRklGT19TSVpFOyBpKyspCisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPmZyYW1lc1tp XSk7CisKKyAgICB1bmluaXRfZWJ1cjEyOChjdHgsICZzLT5yMTI4X2luKTsKKyAgICB1bmluaXRf ZWJ1cjEyOChjdHgsICZzLT5yMTI4X291dCk7Cit9CisKK3N0YXRpYyBpbnQgbG91ZG5vcm1fY29u ZmlnX2lucHV0KEFWRmlsdGVyTGluayAqaW5saW5rKQoreworICAgIEFWRmlsdGVyQ29udGV4dCAq Y3R4ID0gaW5saW5rLT5kc3Q7CisgICAgTG91ZE5vcm1Db250ZXh0ICpzID0gY3R4LT5wcml2Owor ICAgIGludCByZXQ7CisKKyAgICBzLT5uYl9zYW1wbGVzID0gRkZNQVgoaW5saW5rLT5zYW1wbGVf cmF0ZSAvIDEwLCAxKTsKKworICAgIHJldCA9IGNvbmZpZ19hdWRpb19pbihpbmxpbmssICZzLT5y MTI4X2luKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJl dCA9IGNvbmZpZ19hdWRpb19pbihpbmxpbmssICZzLT5yMTI4X291dCk7CisgICAgaWYgKHJldCA8 IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGRv dWJsZSBnZXRfY29lZmYoZG91YmxlIHgsIGRvdWJsZSBzcikKK3sKKyAgICByZXR1cm4gMS4wIC0g ZXhwKC0xLjAgLyAoMC4wMDEgKiB4ICogc3IpKTsKK30KKworc3RhdGljIGludCBsb3Vkbm9ybV9j b25maWdfb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGluaykKK3sKKyAgICBBVkZpbHRlckNvbnRl eHQgKmN0eCA9IG91dGxpbmstPnNyYzsKKyAgICBMb3VkTm9ybUNvbnRleHQgKnMgPSBjdHgtPnBy aXY7CisgICAgaW50IHJldDsKKworICAgIHMtPmF0dGFja19jb2VmZiA9IGdldF9jb2VmZihzLT5h dHRhY2ssIG91dGxpbmstPnNhbXBsZV9yYXRlKTsKKyAgICBzLT5yZWxlYXNlX2NvZWZmID0gZ2V0 X2NvZWZmKHMtPnJlbGVhc2UsIG91dGxpbmstPnNhbXBsZV9yYXRlKTsKKyAgICBzLT5wcmV2X29m ZnNldCA9IDEuMDsKKworICAgIHMtPm5iX2NoYW5uZWxzID0gb3V0bGluay0+Y2hfbGF5b3V0Lm5i X2NoYW5uZWxzOworICAgIHMtPnIxMjhfb3V0LnBlYWtfbW9kZSA9IFBFQUtfTU9ERV9UUlVFX1BF QUtTfFBFQUtfTU9ERV9TQU1QTEVTX1BFQUtTOworICAgIHMtPnIxMjhfaW4ucGVha19tb2RlID0g UEVBS19NT0RFX1RSVUVfUEVBS1N8UEVBS19NT0RFX1NBTVBMRVNfUEVBS1M7CisKKyAgICByZXQg PSBjb25maWdfYXVkaW9fb3V0KG91dGxpbmssICZzLT5yMTI4X2luKTsKKyAgICBpZiAocmV0IDwg MCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCA9IGNvbmZpZ19hdWRpb19vdXQob3V0 bGluaywgJnMtPnIxMjhfb3V0KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJl dDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgZG91YmxlIGFkZF9pdGVtKGludCBtb2Rl LCBkb3VibGUgb2Zmc2V0LCBkb3VibGUgaXRlbSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg ICBjYXNlIE1NX01BWElNVU06CisgICAgICAgIG9mZnNldCA9IGZtYXgob2Zmc2V0LCBpdGVtKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNTV9HRU9NRVRSSUM6CisgICAgICAgIG9mZnNldCAq PSBpdGVtOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1NX0hBUk1PTklDOgorICAgICAgICBv ZmZzZXQgKz0gMS4wIC8gaXRlbTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNTV9BUklUSE1F VElDOgorICAgICAgICBvZmZzZXQgKz0gaXRlbTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg ICAgcmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIGRvdWJsZSBnZXRfbG91ZG5lc3MoTG91ZE5v cm1Db250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR5bmFtaWNfbW9k ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZWFuX21vZGUpCit7CisgICAgZG91 YmxlIG9mZnNldCwgcCA9IDAuMDsKKworICAgIGlmIChtZWFuX21vZGUgPT0gTU1fR0VPTUVUUklD KQorICAgICAgICBvZmZzZXQgPSAxLjA7CisgICAgZWxzZSBpZiAobWVhbl9tb2RlID09IE1NX01B WElNVU0pCisgICAgICAgIG9mZnNldCA9IC03MC4wOworICAgIGVsc2UKKyAgICAgICAgb2Zmc2V0 ID0gMC4wOworCisgICAgaWYgKGR5bmFtaWNfbW9kZSAmIERNX0lOVEVHUkFURUQpIHsKKyAgICAg ICAgb2Zmc2V0ID0gYWRkX2l0ZW0obWVhbl9tb2RlLCBvZmZzZXQsIHMtPmludGVncmF0ZWQpOwor ICAgICAgICBwICs9IDEuMDsKKyAgICB9CisKKyAgICBpZiAoZHluYW1pY19tb2RlICYgRE1fU0hP UlRURVJNKSB7CisgICAgICAgIG9mZnNldCA9IGFkZF9pdGVtKG1lYW5fbW9kZSwgb2Zmc2V0LCBz LT5pMzAwMCk7CisgICAgICAgIHAgKz0gMS4wOworICAgIH0KKworICAgIGlmIChzLT5keW5hbWlj X21vZGUgJiBETV9NT01FTlRBUlkpIHsKKyAgICAgICAgb2Zmc2V0ID0gYWRkX2l0ZW0obWVhbl9t b2RlLCBvZmZzZXQsIHMtPmk0MDApOworICAgICAgICBwICs9IDEuMDsKKyAgICB9CisKKyAgICBz d2l0Y2ggKHMtPm1lYW5fbW9kZSkgeworICAgIGNhc2UgTU1fTUFYSU1VTToKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBNTV9HRU9NRVRSSUM6CisgICAgICAgIG9mZnNldCA9IC1wb3coZmFicyhv ZmZzZXQpLCAxLjAgLyBwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNTV9IQVJNT05JQzoK KyAgICAgICAgb2Zmc2V0ID0gcCAvIG9mZnNldDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBN TV9BUklUSE1FVElDOgorICAgICAgICBvZmZzZXQgLz0gcDsKKyAgICAgICAgYnJlYWs7CisgICAg fQorCisgICAgcmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIGludCBsb3Vkbm9ybV9maWx0ZXJf ZnJhbWUoQVZGaWx0ZXJMaW5rICppbmxpbmssIEFWRnJhbWUgKmluKQoreworICAgIEFWRmlsdGVy Q29udGV4dCAqY3R4ID0gaW5saW5rLT5kc3Q7CisgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0g Y3R4LT5vdXRwdXRzWzBdOworICAgIExvdWROb3JtQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAg ICBFQlVSMTI4Q29udGV4dCAqcjEyOF9vdXQgPSAmcy0+cjEyOF9vdXQ7CisgICAgRUJVUjEyOENv bnRleHQgKnIxMjhfaW4gPSAmcy0+cjEyOF9pbjsKKyAgICBjb25zdCBpbnQgbmJfY2hhbm5lbHMg PSBzLT5uYl9jaGFubmVsczsKKyAgICBpbnQgbmJfc2FtcGxlcyA9IGluID8gaW4tPm5iX3NhbXBs ZXMgOiAwOworICAgIGNvbnN0IGRvdWJsZSAqc2FtcGxlcyA9IGluID8gKGNvbnN0IGRvdWJsZSAq KWluLT5kYXRhWzBdIDogTlVMTDsKKyAgICBBVkZyYW1lICpvdXQ7CisgICAgaW50IHJldDsKKwor ICAgIGlmIChpbikgeworICAgICAgICByZXQgPSB0cnVlX3BlYWtzX2VidXIxMjgocjEyOF9pbiwg KGNvbnN0IHVpbnQ4X3QgKiopaW4tPmRhdGEsIG5iX3NhbXBsZXMpOworICAgICAgICBpZiAocmV0 IDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgZm9yIChpbnQgaWR4 X2luc2FtcGxlID0gcjEyOF9pbi0+aWR4X2luc2FtcGxlOyBpZHhfaW5zYW1wbGUgPCBuYl9zYW1w bGVzOyBpZHhfaW5zYW1wbGUrKykgeworICAgICAgICBwcm9jZXNzX2VidXIxMjgocjEyOF9pbiwg c2FtcGxlcyArIGlkeF9pbnNhbXBsZSAqIG5iX2NoYW5uZWxzKTsKKyAgICAgICAgaWYgKCsrcjEy OF9pbi0+c2FtcGxlX2NvdW50ID09IGlubGluay0+c2FtcGxlX3JhdGUgLyAxMCkgeworICAgICAg ICAgICAgZG91YmxlIHBlYWs7CisKKyAgICAgICAgICAgIGVidXIxMjhfbG91ZG5lc3MoaW5saW5r LCByMTI4X2luLCAmcy0+aTQwMCwgJnMtPmkzMDAwLCAmcy0+aW50ZWdyYXRlZCwgJnBlYWspOwor ICAgICAgICAgICAgbWVtbW92ZSgmcy0+cGVha3NbMF0sICZzLT5wZWFrc1sxXSwgc2l6ZW9mKHMt PnBlYWtzKSAtIHNpemVvZihzLT5wZWFrc1swXSkpOworICAgICAgICAgICAgcy0+cGVha3NbRklG T19TSVpFLTFdID0gcGVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHIxMjhfaW4tPmlkeF9p bnNhbXBsZSA9IDA7CisgICAgcy0+aW5zYW1wbGVzID0gTlVMTDsKKworICAgIGlmIChzLT5saW5l YXJfbW9kZSkgeworICAgICAgICBvdXQgPSBmZl9nZXRfYXVkaW9fYnVmZmVyKG91dGxpbmssIG5i X3NhbXBsZXMpOworICAgICAgICBpZiAoIW91dCkgeworICAgICAgICAgICAgaWYgKHMtPmxpbmVh cl9tb2RlKQorICAgICAgICAgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKyAgICAgICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBj b25zdCBkb3VibGUgKnNyYyA9IChjb25zdCBkb3VibGUgKilpbi0+ZGF0YVswXTsKKyAgICAgICAg ICAgIGRvdWJsZSAqZHN0ID0gKGRvdWJsZSAqKW91dC0+ZGF0YVswXTsKKyAgICAgICAgICAgIGNv bnN0IGRvdWJsZSBvZmZzZXQgPSBzLT5vZmZzZXQ7CisKKyAgICAgICAgICAgIGZvciAoaW50IG4g PSAwOyBuIDwgbmJfc2FtcGxlcyAqIG5iX2NoYW5uZWxzOyBuKyspCisgICAgICAgICAgICAgICAg ZHN0W25dID0gc3JjW25dICogb2Zmc2V0OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg ICAgYXZfZnJhbWVfZnJlZSgmcy0+ZnJhbWVzWzBdKTsKKyAgICAgICAgbWVtbW92ZSgmcy0+ZnJh bWVzWzBdLCAmcy0+ZnJhbWVzWzFdLCBzaXplb2Yocy0+ZnJhbWVzKSAtIHNpemVvZihzLT5mcmFt ZXNbMF0pKTsKKyAgICAgICAgcy0+ZnJhbWVzW0ZJRk9fU0laRS0xXSA9IGluOworICAgICAgICBp biA9IHMtPmZyYW1lc1swXTsKKyAgICAgICAgaWYgKGluKSB7CisgICAgICAgICAgICBuYl9zYW1w bGVzID0gaW4tPm5iX3NhbXBsZXM7CisgICAgICAgICAgICBvdXQgPSBmZl9nZXRfYXVkaW9fYnVm ZmVyKG91dGxpbmssIG5iX3NhbXBsZXMpOworICAgICAgICAgICAgaWYgKCFvdXQpIHsKKyAgICAg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgcmVsZWFzZSA9IHMtPnJlbGVhc2VfY29lZmY7 CisgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIGF0dGFjayA9IHMtPmF0dGFja19jb2VmZjsK KyAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgKnNyYyA9IChjb25zdCBkb3VibGUgKilpbi0+ ZGF0YVswXTsKKyAgICAgICAgICAgICAgICBkb3VibGUgKmRzdCA9IChkb3VibGUgKilvdXQtPmRh dGFbMF07CisgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIG1lYXN1cmVkID0gZ2V0X2xvdWRu ZXNzKHMsIHMtPmR5bmFtaWNfbW9kZSwgcy0+bWVhbl9tb2RlKTsKKyAgICAgICAgICAgICAgICBj b25zdCBkb3VibGUgbGltaXQgPSBzLT50YXJnZXRfdHAgLSBmbWF4KHMtPnBlYWtzWzBdLCBzLT5w ZWFrc1sxXSk7CisgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHJhbmdlbWluID0gLXMtPnJh bmdlZG93bjsKKyAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgcmFuZ2VtYXggPSBmbWluKHMt PnJhbmdldXAsIGxpbWl0KTsKKyAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgdGFyZ2V0ID0g YXZfY2xpcGQocy0+dGFyZ2V0X2kgLSBtZWFzdXJlZCwgcmFuZ2VtaW4sIHJhbmdlbWF4KTsKKyAg ICAgICAgICAgICAgICBjb25zdCBkb3VibGUgbmV3X29mZnNldCA9IHBvdygxMC4sIHRhcmdldCAv IDIwLik7CisgICAgICAgICAgICAgICAgZG91YmxlIHByZXZfb2Zmc2V0ID0gcy0+cHJldl9vZmZz ZXQ7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IG5iX3NhbXBsZXMgKiBu Yl9jaGFubmVsczsgbiArPSBuYl9jaGFubmVscykgeworICAgICAgICAgICAgICAgICAgICBjb25z dCBkb3VibGUgZiA9IChuZXdfb2Zmc2V0ID4gcHJldl9vZmZzZXQpICogYXR0YWNrICsgKG5ld19v ZmZzZXQgPD0gcHJldl9vZmZzZXQpICogcmVsZWFzZTsKKyAgICAgICAgICAgICAgICAgICAgY29u c3QgZG91YmxlIG9mZnNldCA9IGYgKiBuZXdfb2Zmc2V0ICsgKDEuMCAtIGYpICogcHJldl9vZmZz ZXQ7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGMgPSBuOyBjIDwgbiArIG5iX2NoYW5u ZWxzOyBjKyspCisgICAgICAgICAgICAgICAgICAgICAgICBkc3RbY10gPSBzcmNbY10gKiBvZmZz ZXQ7CisgICAgICAgICAgICAgICAgICAgIHByZXZfb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHMtPnByZXZfb2Zmc2V0ID0gcHJldl9vZmZzZXQ7 CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmZl9maWx0ZXJf c2V0X3JlYWR5KGN0eCwgMTAwKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg ICAgfQorCisgICAgcmV0ID0gdHJ1ZV9wZWFrc19lYnVyMTI4KHIxMjhfb3V0LCAoY29uc3QgdWlu dDhfdCAqKilvdXQtPmRhdGEsIG5iX3NhbXBsZXMpOworICAgIGlmIChyZXQgPCAwKQorICAgICAg ICByZXR1cm4gcmV0OworCisgICAgc2FtcGxlcyA9IChjb25zdCBkb3VibGUgKilvdXQtPmRhdGFb MF07CisgICAgZm9yIChpbnQgaWR4X2luc2FtcGxlID0gcjEyOF9vdXQtPmlkeF9pbnNhbXBsZTsg aWR4X2luc2FtcGxlIDwgbmJfc2FtcGxlczsgaWR4X2luc2FtcGxlKyspIHsKKyAgICAgICAgcHJv Y2Vzc19lYnVyMTI4KHIxMjhfb3V0LCBzYW1wbGVzICsgaWR4X2luc2FtcGxlICogbmJfY2hhbm5l bHMpOworICAgICAgICBpZiAoKytyMTI4X291dC0+c2FtcGxlX2NvdW50ID09IGlubGluay0+c2Ft cGxlX3JhdGUgLyAxMCkgeworICAgICAgICAgICAgZG91YmxlIGxvdWRuZXNzXzQwMCwgbG91ZG5l c3NfMzAwMCwgbG91ZG5lc3NfaW50ZWdyYXRlZCwgcGVhazsKKyAgICAgICAgICAgIGVidXIxMjhf bG91ZG5lc3MoaW5saW5rLCByMTI4X291dCwgJmxvdWRuZXNzXzQwMCwgJmxvdWRuZXNzXzMwMDAs ICZsb3VkbmVzc19pbnRlZ3JhdGVkLCAmcGVhayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy MTI4X291dC0+aWR4X2luc2FtcGxlID0gMDsKKyAgICBhdl9mcmFtZV9jb3B5X3Byb3BzKG91dCwg aW4pOworICAgIGlmIChzLT5saW5lYXJfbW9kZSkKKyAgICAgICAgYXZfZnJhbWVfZnJlZSgmaW4p OworCisgICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBvdXQpOworfQorCitzdGF0 aWMgaW50IGxvdWRub3JtX2FjdGl2YXRlKEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIEFW RmlsdGVyTGluayAqb3V0bGluayA9IGN0eC0+b3V0cHV0c1swXTsKKyAgICBBVkZpbHRlckxpbmsg KmlubGluayA9IGN0eC0+aW5wdXRzWzBdOworICAgIExvdWROb3JtQ29udGV4dCAqcyA9IGN0eC0+ cHJpdjsKKyAgICBpbnQgcmV0LCBzdGF0dXM7CisKKyAgICBGRl9GSUxURVJfRk9SV0FSRF9TVEFU VVNfQkFDSyhvdXRsaW5rLCBpbmxpbmspOworCisgICAgaWYgKCFzLT5pbnNhbXBsZXMgJiYgIXMt PmVvZikgeworICAgICAgICBBVkZyYW1lICppbjsKKworICAgICAgICByZXQgPSBmZl9pbmxpbmtf Y29uc3VtZV9zYW1wbGVzKGlubGluaywgcy0+bmJfc2FtcGxlcywgcy0+bmJfc2FtcGxlcywgJmlu KTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAg ICBpZiAocmV0ID4gMCkKKyAgICAgICAgICAgIHMtPmluc2FtcGxlcyA9IGluOworICAgIH0KKwor ICAgIGlmIChzLT5pbnNhbXBsZXMpCisgICAgICAgIHJldHVybiBsb3Vkbm9ybV9maWx0ZXJfZnJh bWUoaW5saW5rLCBzLT5pbnNhbXBsZXMpOworCisgICAgaWYgKCFzLT5lb2YgJiYgZmZfaW5saW5r X2Fja25vd2xlZGdlX3N0YXR1cyhpbmxpbmssICZzdGF0dXMsICZzLT5lb2ZfcHRzKSkgeworICAg ICAgICBpZiAoc3RhdHVzID09IEFWRVJST1JfRU9GKQorICAgICAgICAgICAgcy0+ZW9mID0gMTsK KyAgICB9CisKKyAgICBpZiAocy0+ZW9mICYmICFzLT5mcmFtZXNbMF0pCisgICAgICAgIGZmX291 dGxpbmtfc2V0X3N0YXR1cyhvdXRsaW5rLCBBVkVSUk9SX0VPRiwgcy0+ZW9mX3B0cyk7CisKKyAg ICBpZiAocy0+ZW9mKQorICAgICAgICByZXR1cm4gbG91ZG5vcm1fZmlsdGVyX2ZyYW1lKGlubGlu aywgTlVMTCk7CisKKyAgICBGRl9GSUxURVJfRk9SV0FSRF9XQU5URUQob3V0bGluaywgaW5saW5r KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKyN1bmRlZiBPRkZTRVQKKyN1bmRlZiBGTEFHUwor CisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihMb3VkTm9ybUNvbnRleHQsIHgpCisjZGVmaW5l IEZMQUdTIEFWX09QVF9GTEFHX0FVRElPX1BBUkFNfEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJB TQorCitzdGF0aWMgY29uc3QgQVZPcHRpb24gbG91ZG5vcm1fb3B0aW9uc1tdID0geworICAgIHsg IkkiLCAgICAgICAgICAgICAgICAic2V0IGludGVncmF0ZWQgbG91ZG5lc3MgdGFyZ2V0IiwgICAg T0ZGU0VUKHRhcmdldF9pKSwgICAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9IC0y NC59LCAgIC03MC4sICAgICAgIC01LiwgIEZMQUdTIH0sCisgICAgeyAiaSIsICAgICAgICAgICAg ICAgICJzZXQgaW50ZWdyYXRlZCBsb3VkbmVzcyB0YXJnZXQiLCAgICBPRkZTRVQodGFyZ2V0X2kp LCAgICAgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gLTI0Ln0sICAgLTcwLiwgICAg ICAgLTUuLCAgRkxBR1MgfSwKKyAgICB7ICJMUkEiLCAgICAgICAgICAgICAgInNldCBsb3VkbmVz cyByYW5nZSB0YXJnZXQiLCAgICAgICAgIE9GRlNFVCh0YXJnZXRfbHJhKSwgICAgICAgQVZfT1BU X1RZUEVfRE9VQkxFLCAgey5kYmwgPSAgNy59LCAgICAgMS4sICAgICAgICA1MC4sICBGTEFHUyB9 LAorICAgIHsgImxyYSIsICAgICAgICAgICAgICAic2V0IGxvdWRuZXNzIHJhbmdlIHRhcmdldCIs ICAgICAgICAgT0ZGU0VUKHRhcmdldF9scmEpLCAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7 LmRibCA9ICA3Ln0sICAgICAxLiwgICAgICAgIDUwLiwgIEZMQUdTIH0sCisgICAgeyAiVFAiLCAg ICAgICAgICAgICAgICJzZXQgbWF4aW11bSB0cnVlIHBlYWsiLCAgICAgICAgICAgICBPRkZTRVQo dGFyZ2V0X3RwKSwgICAgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gLTIufSwgICAg LTkuLCAgICAgICAgIDAuLCAgRkxBR1MgfSwKKyAgICB7ICJ0cCIsICAgICAgICAgICAgICAgInNl dCBtYXhpbXVtIHRydWUgcGVhayIsICAgICAgICAgICAgIE9GRlNFVCh0YXJnZXRfdHApLCAgICAg ICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAtMi59LCAgICAtOS4sICAgICAgICAgMC4s ICBGTEFHUyB9LAorICAgIHsgIm1lYXN1cmVkX0kiLCAgICAgICAibWVhc3VyZWQgSUwgb2YgaW5w dXQgZmlsZSIsICAgICAgICAgT0ZGU0VUKG1lYXN1cmVkX2kpLCAgICAgICBBVl9PUFRfVFlQRV9E T1VCTEUsICB7LmRibCA9ICAwLn0sICAgIC05OS4sICAgICAgICAwLiwgIEZMQUdTIH0sCisgICAg eyAibWVhc3VyZWRfaSIsICAgICAgICJtZWFzdXJlZCBJTCBvZiBpbnB1dCBmaWxlIiwgICAgICAg ICBPRkZTRVQobWVhc3VyZWRfaSksICAgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0g IDAufSwgICAgLTk5LiwgICAgICAgIDAuLCAgRkxBR1MgfSwKKyAgICB7ICJtZWFzdXJlZF9MUkEi LCAgICAgIm1lYXN1cmVkIExSQSBvZiBpbnB1dCBmaWxlIiwgICAgICAgIE9GRlNFVChtZWFzdXJl ZF9scmEpLCAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAgMC59LCAgICAgMC4sICAg ICAgICA5OS4sICBGTEFHUyB9LAorICAgIHsgIm1lYXN1cmVkX2xyYSIsICAgICAibWVhc3VyZWQg TFJBIG9mIGlucHV0IGZpbGUiLCAgICAgICAgT0ZGU0VUKG1lYXN1cmVkX2xyYSksICAgICBBVl9P UFRfVFlQRV9ET1VCTEUsICB7LmRibCA9ICAwLn0sICAgICAwLiwgICAgICAgIDk5LiwgIEZMQUdT IH0sCisgICAgeyAibWVhc3VyZWRfVFAiLCAgICAgICJtZWFzdXJlZCB0cnVlIHBlYWsgb2YgaW5w dXQgZmlsZSIsICBPRkZTRVQobWVhc3VyZWRfdHApLCAgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwg IHsuZGJsID0gIDk5Ln0sICAgLTk5LiwgICAgICAgOTkuLCAgRkxBR1MgfSwKKyAgICB7ICJtZWFz dXJlZF90cCIsICAgICAgIm1lYXN1cmVkIHRydWUgcGVhayBvZiBpbnB1dCBmaWxlIiwgIE9GRlNF VChtZWFzdXJlZF90cCksICAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAgOTkufSwg ICAtOTkuLCAgICAgICA5OS4sICBGTEFHUyB9LAorICAgIHsgIm1lYXN1cmVkX3RocmVzaCIsICAi bWVhc3VyZWQgdGhyZXNob2xkIG9mIGlucHV0IGZpbGUiLCAgT0ZGU0VUKG1lYXN1cmVkX3RocmVz aCksICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9IC03MC59LCAgIC05OS4sICAgICAgICAw LiwgIEZMQUdTIH0sCisgICAgeyAib2Zmc2V0IiwgICAgICAgICAgICJzZXQgb2Zmc2V0IGdhaW4i LCAgICAgICAgICAgICAgICAgICBPRkZTRVQob2Zmc2V0KSwgICAgICAgICAgIEFWX09QVF9UWVBF X0RPVUJMRSwgIHsuZGJsID0gIDAufSwgICAgLTk5LiwgICAgICAgOTkuLCAgRkxBR1MgfSwKKyAg ICB7ICJsaW5lYXIiLCAgICAgICAgICAgIm5vcm1hbGl6ZSBsaW5lYXJseSBpZiBwb3NzaWJsZSIs ICAgIE9GRlNFVChsaW5lYXJfbW9kZSksICAgICAgQVZfT1BUX1RZUEVfQk9PTCwgICAgey5pNjQg PSAgMX0sICAgICAgICAwLCAgICAgICAgIDEsICBGTEFHUyB9LAorICAgIHsgImR1YWxfbW9ubyIs ICAgICAgICAidHJlYXQgbW9ubyBpbnB1dCBhcyBkdWFsLW1vbm8iLCAgICAgT0ZGU0VUKGR1YWxf bW9ubyksICAgICAgICBBVl9PUFRfVFlQRV9CT09MLCAgICB7Lmk2NCA9ICAwfSwgICAgICAgIDAs ICAgICAgICAgMSwgIEZMQUdTIH0sCisgICAgeyAicHJpbnRfZm9ybWF0IiwgICAgICJzZXQgcHJp bnQgZm9ybWF0IGZvciBzdGF0cyIsICAgICAgICBPRkZTRVQocHJpbnRfZm9ybWF0KSwgICAgIEFW X09QVF9UWVBFX0lOVCwgICAgIHsuaTY0ID0gIE5PTkV9LCAgTk9ORSwgIFBGX05CIC0xLCAgRkxB R1MsICJwcmludF9mb3JtYXQiIH0sCisgICAgeyAgICAgIm5vbmUiLCAgICAgICAgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgIEFW X09QVF9UWVBFX0NPTlNULCAgIHsuaTY0ID0gIE5PTkV9LCAgICAgMCwgICAgICAgICAwLCAgRkxB R1MsICJwcmludF9mb3JtYXQiIH0sCisgICAgeyAgICAgImpzb24iLCAgICAgICAgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgIEFW X09QVF9UWVBFX0NPTlNULCAgIHsuaTY0ID0gIEpTT059LCAgICAgMCwgICAgICAgICAwLCAgRkxB R1MsICJwcmludF9mb3JtYXQiIH0sCisgICAgeyAgICAgInN1bW1hcnkiLCAgICAgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgIEFW X09QVF9UWVBFX0NPTlNULCAgIHsuaTY0ID0gIFNVTU1BUll9LCAgMCwgICAgICAgICAwLCAgRkxB R1MsICJwcmludF9mb3JtYXQiIH0sCisgICAgeyAiZHluYW1pY19tb2RlIiwgICAgICJzZXQgZHlu YW1pYyBtb2RlIiwgICAgICAgICAgICAgICAgICBPRkZTRVQoZHluYW1pY19tb2RlKSwgICAgIEFW X09QVF9UWVBFX0ZMQUdTLCAgIHsuaTY0ID0gIERNX0lOVEVHUkFURUR8RE1fU0hPUlRURVJNfSww LElOVDMyX01BWCxGTEFHUywiZHluYW1pY19tb2RlIiB9LAorICAgIHsgICJpIiwgICAgICAgICAg ICAgICAiaW50ZWdyYXRlZCIsICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAg ICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgICB7Lmk2NCA9ICBETV9JTlRFR1JBVEVEfSwg ICAgMCwgMCwgIEZMQUdTLCAiZHluYW1pY19tb2RlIiB9LAorICAgIHsgICJtIiwgICAgICAgICAg ICAgICAibW9tZW50YXJ5IiwgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAg ICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgICB7Lmk2NCA9ICBETV9NT01FTlRBUll9LCAg ICAgMCwgMCwgIEZMQUdTLCAiZHluYW1pY19tb2RlIiB9LAorICAgIHsgICJzIiwgICAgICAgICAg ICAgICAic2hvcnR0ZXJtIiwgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAg ICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgICB7Lmk2NCA9ICBETV9TSE9SVFRFUk19LCAg ICAgMCwgMCwgIEZMQUdTLCAiZHluYW1pY19tb2RlIiB9LAorICAgIHsgIm1lYW5fbW9kZSIsICAg ICAgICAic2V0IG1lYW4gbW9kZSIsICAgICAgICAgICAgICAgICAgICAgT0ZGU0VUKG1lYW5fbW9k ZSksICAgICAgICBBVl9PUFRfVFlQRV9JTlQsICAgICB7Lmk2NCA9ICBNTV9HRU9NRVRSSUN9LCAg ICAgMCwgTU1fTU9ERVMtMSwgIEZMQUdTLCJtZWFuX21vZGUiIH0sCisgICAgeyAgImEiLCAgICAg ICAgICAgICAgICJhcml0aG1ldGljIiwgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAg ICAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX0NPTlNULCAgIHsuaTY0ID0gIE1NX0FSSVRITUVU SUN9LCAgICAwLCAwLCAgRkxBR1MsICJtZWFuX21vZGUiIH0sCisgICAgeyAgImgiLCAgICAgICAg ICAgICAgICJoYXJtb25pYyIsICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAg ICAgICAgICAgICAgIEFWX09QVF9UWVBFX0NPTlNULCAgIHsuaTY0ID0gIE1NX0hBUk1PTklDfSwg ICAgICAwLCAwLCAgRkxBR1MsICJtZWFuX21vZGUiIH0sCisgICAgeyAgImciLCAgICAgICAgICAg ICAgICJnZW9tZXRyaWMiLCAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAg ICAgICAgICAgIEFWX09QVF9UWVBFX0NPTlNULCAgIHsuaTY0ID0gIE1NX0dFT01FVFJJQ30sICAg ICAwLCAwLCAgRkxBR1MsICJtZWFuX21vZGUiIH0sCisgICAgeyAgIm0iLCAgICAgICAgICAgICAg ICJtYXhpbXVtIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAg ICAgICAgIEFWX09QVF9UWVBFX0NPTlNULCAgIHsuaTY0ID0gIE1NX01BWElNVU19LCAgICAgICAw LCAwLCAgRkxBR1MsICJtZWFuX21vZGUiIH0sCisgICAgeyAicmFuZ2V1cCIsICAgICAgICAgICJz ZXQgbWF4IGV4cGFuc2lvbiIsICAgICAgICAgICAgICAgICBPRkZTRVQocmFuZ2V1cCksICAgICAg ICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gIDB9LCAgICAgICAgMCwgICAgICA3MCwg ICAgRkxBR1MgfSwKKyAgICB7ICJyYW5nZWRvd24iLCAgICAgICAgInNldCBtYXggY29tcHJlc3Np b24iLCAgICAgICAgICAgICAgIE9GRlNFVChyYW5nZWRvd24pLCAgICAgICAgQVZfT1BUX1RZUEVf RE9VQkxFLCAgey5kYmwgPSAgNzB9LCAgICAgICAwLCAgICAgIDcwLCAgICBGTEFHUyB9LAorICAg IHsgImF0dGFjayIsICAgICAgICAgICAic2V0IGF0dGFjayIsICAgICAgICAgICAgICAgICAgICAg ICAgT0ZGU0VUKGF0dGFjayksICAgICAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9 ICAxfSwgICAgICAgIDEsICAgICAgMjAwMCwgIEZMQUdTIH0sCisgICAgeyAicmVsZWFzZSIsICAg ICAgICAgICJzZXQgcmVsZWFzZSIsICAgICAgICAgICAgICAgICAgICAgICBPRkZTRVQocmVsZWFz ZSksICAgICAgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gIDF9LCAgICAgICAgMSwg ICAgICAyMDAwLCAgRkxBR1MgfSwKKyAgICB7IE5VTEwgfQorfTsKKworQVZGSUxURVJfREVGSU5F X0NMQVNTKGxvdWRub3JtKTsKKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIGxvdWRub3JtX2lu cHV0c1tdID0geworICAgIHsKKyAgICAgICAgLm5hbWUgICAgICAgICA9ICJkZWZhdWx0IiwKKyAg ICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9BVURJTywKKyAgICAgICAgLmNvbmZp Z19wcm9wcyA9IGxvdWRub3JtX2NvbmZpZ19pbnB1dCwKKyAgICB9LAorfTsKKworc3RhdGljIGNv bnN0IEFWRmlsdGVyUGFkIGxvdWRub3JtX291dHB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5u YW1lICAgICAgICAgPSAiZGVmYXVsdCIsCisgICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElB X1RZUEVfQVVESU8sCisgICAgICAgIC5jb25maWdfcHJvcHMgPSBsb3Vkbm9ybV9jb25maWdfb3V0 cHV0LAorICAgIH0sCit9OworCitjb25zdCBBVkZpbHRlciBmZl9hZl9sb3Vkbm9ybSA9IHsKKyAg ICAubmFtZSAgICAgICAgICA9ICJsb3Vkbm9ybSIsCisgICAgLmRlc2NyaXB0aW9uICAgPSBOVUxM X0lGX0NPTkZJR19TTUFMTCgiRUJVIFIxMjggbG91ZG5lc3Mgbm9ybWFsaXphdGlvbiIpLAorICAg IC5wcml2X3NpemUgICAgID0gc2l6ZW9mKExvdWROb3JtQ29udGV4dCksCisgICAgLnByaXZfY2xh c3MgICAgPSAmbG91ZG5vcm1fY2xhc3MsCisgICAgLmluaXQgICAgICAgICAgPSBsb3Vkbm9ybV9p bml0LAorICAgIC5hY3RpdmF0ZSAgICAgID0gbG91ZG5vcm1fYWN0aXZhdGUsCisgICAgLnVuaW5p dCAgICAgICAgPSBsb3Vkbm9ybV91bmluaXQsCisgICAgRklMVEVSX0lOUFVUUyhsb3Vkbm9ybV9p bnB1dHMpLAorICAgIEZJTFRFUl9PVVRQVVRTKGxvdWRub3JtX291dHB1dHMpLAorICAgIEZJTFRF Ul9RVUVSWV9GVU5DKGxvdWRub3JtX3F1ZXJ5X2Zvcm1hdHMpLAorfTsKLS0gCjIuNDIuMAoK --000000000000f1370f060a36e39f Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --000000000000f1370f060a36e39f--