Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sgfUt-005vqO-LZ for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Aug 2024 07:11:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sgfUr-007ia9-Q8 for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Aug 2024 07:11:10 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sgfUr-007iZk-7O for pgsql-hackers@lists.postgresql.org; Wed, 21 Aug 2024 07:11:09 +0000 Received: from mail-yw1-x1130.google.com ([2607:f8b0:4864:20::1130]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sgfUn-000jpQ-5V for pgsql-hackers@lists.postgresql.org; Wed, 21 Aug 2024 07:11:09 +0000 Received: by mail-yw1-x1130.google.com with SMTP id 00721157ae682-6c0e22218d0so5350287b3.0 for ; Wed, 21 Aug 2024 00:11:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724224264; x=1724829064; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=2uxj3d3c8/2vDFbAwfvX3Zh7tQ+8CxRxm42+rCIsY7Q=; b=RkFvA4tQBJhqzGul7Gv7i8x2iSfEn8K6pasdqs7Ir1a4+YVcG3QGc+6zCo6aqpeMvu bnBI2Dzsz52g8RMcI8iCuvg1JNGiVMd964noACejClzvvZnNqNvrkW6Kmu9V9JB1cRkl ak23+dyPVcxciMx97gJnbNaMy5YkrRNBidkQ+E+YFQeDZj0JzLNPl+buw87DpaDWeaxj yBRCtaB3bxfRWrwEUlYzYHY06YDz80jFgX7sH7WMpxUagmCJlMtEAIp89h0fQDE8XwrV J5Kb9sdxpXgt4LnGLikFclATRgFFwUYmjCe1UbRdUrjtK2CquLXHKB/XydkWd5zs6zIE 0Yjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724224264; x=1724829064; h=cc: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=2uxj3d3c8/2vDFbAwfvX3Zh7tQ+8CxRxm42+rCIsY7Q=; b=aPGqy017UAUNrZyPV4uEElGX09mVckBb2YL+xEw8zVPV0x/Giy/wdKrdZOCNJqvu7u Fx3P4aqykqGUm+SMAI3ZPCXIU6GE2YjQTDP6VQjW3bbqsE8beDcME7ES/JEpA0ZOkgJM xMn0jG6Xo9jOZF/BTipv0u+i9qMbyTd7WXLtUT04Tda6kObB1DY6xiYPd0JhEmHr0rI+ dSSOLdSF6ziltFDZg7h2kK2ynJO9jvTNGltovPFGI63s/w9BYUfe5dnq0iDkz8shqJpn gBonUBhZ8E1LTEz/6QJIu+dauLG0COAN7EPKS2MK4Bx4fpG6xErVOtYtYwY6g0KHo8Kp MYLA== X-Forwarded-Encrypted: i=1; AJvYcCWZFkGWwaXS4PeOhPtKYeX5bujQVVUxVX6aWiuusfTFpyELFkSFC6KzfjNVDKKgJBjHPiwg48gUZt8srw0f@lists.postgresql.org X-Gm-Message-State: AOJu0YzFMVxnh0p/8LnlwL5FsSuDoxJexq+kSYAOAScJ/rfQLORYWiXk YHNSAJYHdr0EfpM6cl8xJQ0odINfJgQlcuKeCnPQluT99LSRhTN0QxEK7RPqYaxJa/T1rBNjNj3 ala2LB7W/uOFokXx09sTGWxBGP+A= X-Google-Smtp-Source: AGHT+IHODioGldDLsmezbrAAjPjfdXTbt0n7GtXV9lI4WdHRiYpyg5hukdpxCj6fqQuiylBTe7brRckD1mqUo+hFW6Y= X-Received: by 2002:a05:690c:6611:b0:6ad:f6ae:7685 with SMTP id 00721157ae682-6c09d315943mr18862267b3.20.1724224264434; Wed, 21 Aug 2024 00:11:04 -0700 (PDT) MIME-Version: 1.0 References: <87il22cj51.fsf@163.com> In-Reply-To: From: Richard Guo Date: Wed, 21 Aug 2024 15:10:51 +0800 Message-ID: Subject: Re: Eager aggregation, take 3 To: Paul George Cc: Andy Fan , PostgreSQL-development , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000cbbc8f06202c3e36" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cbbc8f06202c3e36 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Aug 16, 2024 at 4:14=E2=80=AFPM Richard Guo wrote: > I had a self-review of this patchset and made some refactoring, > especially to the function that creates the RelAggInfo structure for a > given relation. While there were no major changes, the code should > now be simpler. I found a bug in v10 patchset: when we generate the GROUP BY clauses for the partial aggregation that is pushed down to a non-aggregated relation, we may produce a clause with a tleSortGroupRef that duplicates one already present in the query's groupClause, which would cause problems. Attached is the updated version of the patchset that fixes this bug and includes further code refactoring. Thanks Richard --000000000000cbbc8f06202c3e36 Content-Type: application/octet-stream; name="v11-0001-Introduce-RelInfoList-structure.patch" Content-Disposition: attachment; filename="v11-0001-Introduce-RelInfoList-structure.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m03ikpi60 RnJvbSA3ZWJmYjY0Y2QyOGUwYWRhM2NjNjIwNjViZmU4ZTljZGY2ODViNDk3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNTo1OToxOSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEx IDEvMl0gSW50cm9kdWNlIFJlbEluZm9MaXN0IHN0cnVjdHVyZQoKVGhpcyBjb21taXQgaW50cm9k dWNlcyB0aGUgUmVsSW5mb0xpc3Qgc3RydWN0dXJlLCB3aGljaCBlbmNhcHN1bGF0ZXMKYm90aCBh IGxpc3QgYW5kIGEgaGFzaCB0YWJsZSwgc28gdGhhdCB3ZSBjYW4gbGV2ZXJhZ2UgdGhlIGhhc2gg dGFibGUgZm9yCmZhc3RlciBsb29rdXBzIG5vdCBvbmx5IGZvciBqb2luIHJlbGF0aW9ucyBidXQg YWxzbyBmb3IgdXBwZXIgcmVsYXRpb25zLgotLS0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3Rn cmVzX2Zkdy5jICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2 YWwuYyB8ICAyMCArLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgIHwg ICA3ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jICB8ICAgNSArLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jICAgfCAxNjQgKysrKysrKysrKysr KystLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgfCAg MzIgKysrLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgIHwgICAzICst CiA3IGZpbGVzIGNoYW5nZWQsIDEzNiBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IGZjNjVkODFlMjEuLmJlNDAzOGY2NGYg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCisrKyBiL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCkBAIC02MDc5LDcgKzYwNzksOCBAQCBm b3JlaWduX2pvaW5fb2soUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsIEpv aW5UeXBlIGpvaW50eXBlLAogCSAqLwogCUFzc2VydChmcGluZm8tPnJlbGF0aW9uX2luZGV4ID09 IDApOwkvKiBzaG91bGRuJ3QgYmUgc2V0IHlldCAqLwogCWZwaW5mby0+cmVsYXRpb25faW5kZXgg PQotCQlsaXN0X2xlbmd0aChyb290LT5wYXJzZS0+cnRhYmxlKSArIGxpc3RfbGVuZ3RoKHJvb3Qt PmpvaW5fcmVsX2xpc3QpOworCQlsaXN0X2xlbmd0aChyb290LT5wYXJzZS0+cnRhYmxlKSArCisJ CWxpc3RfbGVuZ3RoKHJvb3QtPmpvaW5fcmVsX2xpc3QtPml0ZW1zKTsKIAogCXJldHVybiB0cnVl OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2YWwuYwppbmRleCBkMmY3ZjRlNWYz Li4xMTQxMTU2ODk5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFv X2V2YWwuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2YWwuYwpAQCAt ODUsMTggKzg1LDE4IEBAIGdlcW9fZXZhbChQbGFubmVySW5mbyAqcm9vdCwgR2VuZSAqdG91ciwg aW50IG51bV9nZW5lKQogCSAqIHRydW5jYXRpbmcgdGhlIGxpc3QgdG8gaXRzIG9yaWdpbmFsIGxl bmd0aC4gIE5PVEUgdGhpcyBhc3N1bWVzIHRoYXQgYW55CiAJICogYWRkZWQgZW50cmllcyBhcmUg YXBwZW5kZWQgYXQgdGhlIGVuZCEKIAkgKgotCSAqIFdlIGFsc28gbXVzdCB0YWtlIGNhcmUgbm90 IHRvIG1lc3MgdXAgdGhlIG91dGVyIGpvaW5fcmVsX2hhc2gsIGlmIHRoZXJlCi0JICogaXMgb25l LiAgV2UgY2FuIGRvIHRoaXMgYnkganVzdCB0ZW1wb3JhcmlseSBzZXR0aW5nIHRoZSBsaW5rIHRv IE5VTEwuCi0JICogKElmIHdlIGFyZSBkZWFsaW5nIHdpdGggZW5vdWdoIGpvaW4gcmVscywgd2hp Y2ggd2UgdmVyeSBsaWtlbHkgYXJlLCBhCi0JICogbmV3IGhhc2ggdGFibGUgd2lsbCBnZXQgYnVp bHQgYW5kIHVzZWQgbG9jYWxseS4pCisJICogV2UgYWxzbyBtdXN0IHRha2UgY2FyZSBub3QgdG8g bWVzcyB1cCB0aGUgb3V0ZXIgam9pbl9yZWxfbGlzdC0+aGFzaCwgaWYKKwkgKiB0aGVyZSBpcyBv bmUuICBXZSBjYW4gZG8gdGhpcyBieSBqdXN0IHRlbXBvcmFyaWx5IHNldHRpbmcgdGhlIGxpbmsg dG8KKwkgKiBOVUxMLiAgKElmIHdlIGFyZSBkZWFsaW5nIHdpdGggZW5vdWdoIGpvaW4gcmVscywg d2hpY2ggd2UgdmVyeSBsaWtlbHkKKwkgKiBhcmUsIGEgbmV3IGhhc2ggdGFibGUgd2lsbCBnZXQg YnVpbHQgYW5kIHVzZWQgbG9jYWxseS4pCiAJICoKIAkgKiBqb2luX3JlbF9sZXZlbFtdIHNob3Vs ZG4ndCBiZSBpbiB1c2UsIHNvIGp1c3QgQXNzZXJ0IGl0IGlzbid0LgogCSAqLwotCXNhdmVsZW5n dGggPSBsaXN0X2xlbmd0aChyb290LT5qb2luX3JlbF9saXN0KTsKLQlzYXZlaGFzaCA9IHJvb3Qt PmpvaW5fcmVsX2hhc2g7CisJc2F2ZWxlbmd0aCA9IGxpc3RfbGVuZ3RoKHJvb3QtPmpvaW5fcmVs X2xpc3QtPml0ZW1zKTsKKwlzYXZlaGFzaCA9IHJvb3QtPmpvaW5fcmVsX2xpc3QtPmhhc2g7CiAJ QXNzZXJ0KHJvb3QtPmpvaW5fcmVsX2xldmVsID09IE5VTEwpOwogCi0Jcm9vdC0+am9pbl9yZWxf aGFzaCA9IE5VTEw7CisJcm9vdC0+am9pbl9yZWxfbGlzdC0+aGFzaCA9IE5VTEw7CiAKIAkvKiBj b25zdHJ1Y3QgdGhlIGJlc3QgcGF0aCBmb3IgdGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIHJlbGF0 aW9ucyAqLwogCWpvaW5yZWwgPSBnaW1tZV90cmVlKHJvb3QsIHRvdXIsIG51bV9nZW5lKTsKQEAg LTEyMSw5ICsxMjEsOSBAQCBnZXFvX2V2YWwoUGxhbm5lckluZm8gKnJvb3QsIEdlbmUgKnRvdXIs IGludCBudW1fZ2VuZSkKIAkgKiBSZXN0b3JlIGpvaW5fcmVsX2xpc3QgdG8gaXRzIGZvcm1lciBz dGF0ZSwgYW5kIHB1dCBiYWNrIG9yaWdpbmFsCiAJICogaGFzaHRhYmxlIGlmIGFueS4KIAkgKi8K LQlyb290LT5qb2luX3JlbF9saXN0ID0gbGlzdF90cnVuY2F0ZShyb290LT5qb2luX3JlbF9saXN0 LAotCQkJCQkJCQkJCXNhdmVsZW5ndGgpOwotCXJvb3QtPmpvaW5fcmVsX2hhc2ggPSBzYXZlaGFz aDsKKwlyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyA9IGxpc3RfdHJ1bmNhdGUocm9vdC0+am9p bl9yZWxfbGlzdC0+aXRlbXMsCisJCQkJCQkJCQkJCSAgIHNhdmVsZW5ndGgpOworCXJvb3QtPmpv aW5fcmVsX2xpc3QtPmhhc2ggPSBzYXZlaGFzaDsKIAogCS8qIHJlbGVhc2UgYWxsIHRoZSBtZW1v cnkgYWNxdWlyZWQgd2l0aGluIGdpbW1lX3RyZWUgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IDA1N2I0Yjc5 ZWIuLmI1NTBlNzA3YTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Fs bHBhdGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAt MzQxMCw5ICszNDEwLDEwIEBAIG1ha2VfcmVsX2Zyb21fam9pbmxpc3QoUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKmpvaW5saXN0KQogICogbmVlZGVkIGZvciB0aGVzZSBwYXRocyBuZWVkIGhhdmUg YmVlbiBpbnN0YW50aWF0ZWQuCiAgKgogICogTm90ZSB0byBwbHVnaW4gYXV0aG9yczogdGhlIGZ1 bmN0aW9ucyBpbnZva2VkIGR1cmluZyBzdGFuZGFyZF9qb2luX3NlYXJjaCgpCi0gKiBtb2RpZnkg cm9vdC0+am9pbl9yZWxfbGlzdCBhbmQgcm9vdC0+am9pbl9yZWxfaGFzaC4gIElmIHlvdSB3YW50 IHRvIGRvIG1vcmUKLSAqIHRoYW4gb25lIGpvaW4tb3JkZXIgc2VhcmNoLCB5b3UnbGwgcHJvYmFi bHkgbmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIHRoZQotICogb3JpZ2luYWwgc3RhdGVzIG9mIHRo b3NlIGRhdGEgc3RydWN0dXJlcy4gIFNlZSBnZXFvX2V2YWwoKSBmb3IgYW4gZXhhbXBsZS4KKyAq IG1vZGlmeSByb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyBhbmQgcm9vdC0+am9pbl9yZWxfbGlz dC0+aGFzaC4gIElmIHlvdQorICogd2FudCB0byBkbyBtb3JlIHRoYW4gb25lIGpvaW4tb3JkZXIg c2VhcmNoLCB5b3UnbGwgcHJvYmFibHkgbmVlZCB0byBzYXZlIGFuZAorICogcmVzdG9yZSB0aGUg b3JpZ2luYWwgc3RhdGVzIG9mIHRob3NlIGRhdGEgc3RydWN0dXJlcy4gIFNlZSBnZXFvX2V2YWwo KSBmb3IKKyAqIGFuIGV4YW1wbGUuCiAgKi8KIFJlbE9wdEluZm8gKgogc3RhbmRhcmRfam9pbl9z ZWFyY2goUGxhbm5lckluZm8gKnJvb3QsIGludCBsZXZlbHNfbmVlZGVkLCBMaXN0ICppbml0aWFs X3JlbHMpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYwppbmRleCBlMTdkMzFhNWMz Li5mZDhiMmIwY2EzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFu bWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKQEAgLTY0 LDggKzY0LDkgQEAgcXVlcnlfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwKIAkgKiBOT1RFOiBh cHBlbmRfcmVsX2xpc3Qgd2FzIHNldCB1cCBieSBzdWJxdWVyeV9wbGFubmVyLCBzbyBkbyBub3Qg dG91Y2gKIAkgKiBoZXJlLgogCSAqLwotCXJvb3QtPmpvaW5fcmVsX2xpc3QgPSBOSUw7Ci0Jcm9v dC0+am9pbl9yZWxfaGFzaCA9IE5VTEw7CisJcm9vdC0+am9pbl9yZWxfbGlzdCA9IG1ha2VOb2Rl KFJlbEluZm9MaXN0KTsKKwlyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyA9IE5JTDsKKwlyb290 LT5qb2luX3JlbF9saXN0LT5oYXNoID0gTlVMTDsKIAlyb290LT5qb2luX3JlbF9sZXZlbCA9IE5V TEw7CiAJcm9vdC0+am9pbl9jdXJfbGV2ZWwgPSAwOwogCXJvb3QtPmNhbm9uX3BhdGhrZXlzID0g TklMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCmluZGV4IGQ3MjY2ZTRjZGIuLjc2 ZTEzOTcxZjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUu YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTM1LDExICsz NSwxNSBAQAogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogCiAKLXR5cGVkZWYgc3RydWN0 IEpvaW5IYXNoRW50cnkKKy8qCisgKiBBbiBlbnRyeSBvZiBhIGhhc2ggdGFibGUgdGhhdCB3ZSB1 c2UgdG8gbWFrZSBsb29rdXAgZm9yIFJlbE9wdEluZm8KKyAqIHN0cnVjdHVyZXMgbW9yZSBlZmZp Y2llbnQuCisgKi8KK3R5cGVkZWYgc3RydWN0IFJlbEluZm9FbnRyeQogewotCVJlbGlkcwkJam9p bl9yZWxpZHM7CS8qIGhhc2gga2V5IC0tLSBNVVNUIEJFIEZJUlNUICovCi0JUmVsT3B0SW5mbyAq am9pbl9yZWw7Ci19IEpvaW5IYXNoRW50cnk7CisJUmVsaWRzCQlyZWxpZHM7CQkJLyogaGFzaCBr ZXkgLS0tIE1VU1QgQkUgRklSU1QgKi8KKwlSZWxPcHRJbmZvICpyZWw7Cit9IFJlbEluZm9FbnRy eTsKIAogc3RhdGljIHZvaWQgYnVpbGRfam9pbnJlbF90bGlzdChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqam9pbnJlbCwKIAkJCQkJCQkJUmVsT3B0SW5mbyAqaW5wdXRfcmVsLApAQCAt NDc5LDExICs0ODMsMTEgQEAgZmluZF9iYXNlX3JlbF9pZ25vcmVfam9pbihQbGFubmVySW5mbyAq cm9vdCwgaW50IHJlbGlkKQogfQogCiAvKgotICogYnVpbGRfam9pbl9yZWxfaGFzaAotICoJICBD b25zdHJ1Y3QgdGhlIGF1eGlsaWFyeSBoYXNoIHRhYmxlIGZvciBqb2luIHJlbGF0aW9ucy4KKyAq IGJ1aWxkX3JlbF9oYXNoCisgKgkgIENvbnN0cnVjdCB0aGUgYXV4aWxpYXJ5IGhhc2ggdGFibGUg Zm9yIHJlbGF0aW9ucy4KICAqLwogc3RhdGljIHZvaWQKLWJ1aWxkX2pvaW5fcmVsX2hhc2goUGxh bm5lckluZm8gKnJvb3QpCitidWlsZF9yZWxfaGFzaChSZWxJbmZvTGlzdCAqbGlzdCkKIHsKIAlI VEFCCSAgICpoYXNodGFiOwogCUhBU0hDVEwJCWhhc2hfY3RsOwpAQCAtNDkxLDQ3ICs0OTUsNDkg QEAgYnVpbGRfam9pbl9yZWxfaGFzaChQbGFubmVySW5mbyAqcm9vdCkKIAogCS8qIENyZWF0ZSB0 aGUgaGFzaCB0YWJsZSAqLwogCWhhc2hfY3RsLmtleXNpemUgPSBzaXplb2YoUmVsaWRzKTsKLQlo YXNoX2N0bC5lbnRyeXNpemUgPSBzaXplb2YoSm9pbkhhc2hFbnRyeSk7CisJaGFzaF9jdGwuZW50 cnlzaXplID0gc2l6ZW9mKFJlbEluZm9FbnRyeSk7CiAJaGFzaF9jdGwuaGFzaCA9IGJpdG1hcF9o YXNoOwogCWhhc2hfY3RsLm1hdGNoID0gYml0bWFwX21hdGNoOwogCWhhc2hfY3RsLmhjeHQgPSBD dXJyZW50TWVtb3J5Q29udGV4dDsKLQloYXNodGFiID0gaGFzaF9jcmVhdGUoIkpvaW5SZWxIYXNo VGFibGUiLAorCWhhc2h0YWIgPSBoYXNoX2NyZWF0ZSgiUmVsSGFzaFRhYmxlIiwKIAkJCQkJCSAg MjU2TCwKIAkJCQkJCSAgJmhhc2hfY3RsLAogCQkJCQkJICBIQVNIX0VMRU0gfCBIQVNIX0ZVTkNU SU9OIHwgSEFTSF9DT01QQVJFIHwgSEFTSF9DT05URVhUKTsKIAotCS8qIEluc2VydCBhbGwgdGhl IGFscmVhZHktZXhpc3Rpbmcgam9pbnJlbHMgKi8KLQlmb3JlYWNoKGwsIHJvb3QtPmpvaW5fcmVs X2xpc3QpCisJLyogSW5zZXJ0IGFsbCB0aGUgYWxyZWFkeS1leGlzdGluZyByZWxhdGlvbnMgKi8K Kwlmb3JlYWNoKGwsIGxpc3QtPml0ZW1zKQogCXsKIAkJUmVsT3B0SW5mbyAqcmVsID0gKFJlbE9w dEluZm8gKikgbGZpcnN0KGwpOwotCQlKb2luSGFzaEVudHJ5ICpoZW50cnk7CisJCVJlbEluZm9F bnRyeSAqaGVudHJ5OwogCQlib29sCQlmb3VuZDsKIAotCQloZW50cnkgPSAoSm9pbkhhc2hFbnRy eSAqKSBoYXNoX3NlYXJjaChoYXNodGFiLAotCQkJCQkJCQkJCQkgICAmKHJlbC0+cmVsaWRzKSwK LQkJCQkJCQkJCQkJICAgSEFTSF9FTlRFUiwKLQkJCQkJCQkJCQkJICAgJmZvdW5kKTsKKwkJaGVu dHJ5ID0gKFJlbEluZm9FbnRyeSAqKSBoYXNoX3NlYXJjaChoYXNodGFiLAorCQkJCQkJCQkJCQkg ICYocmVsLT5yZWxpZHMpLAorCQkJCQkJCQkJCQkgIEhBU0hfRU5URVIsCisJCQkJCQkJCQkJCSAg JmZvdW5kKTsKIAkJQXNzZXJ0KCFmb3VuZCk7Ci0JCWhlbnRyeS0+am9pbl9yZWwgPSByZWw7CisJ CWhlbnRyeS0+cmVsID0gcmVsOwogCX0KIAotCXJvb3QtPmpvaW5fcmVsX2hhc2ggPSBoYXNodGFi OworCWxpc3QtPmhhc2ggPSBoYXNodGFiOwogfQogCiAvKgotICogZmluZF9qb2luX3JlbAotICoJ ICBSZXR1cm5zIHJlbGF0aW9uIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gJ3JlbGlkcycgKGEgc2V0 IG9mIFJUIGluZGV4ZXMpLAotICoJICBvciBOVUxMIGlmIG5vbmUgZXhpc3RzLiAgVGhpcyBpcyBm b3Igam9pbiByZWxhdGlvbnMuCisgKiBmaW5kX3JlbF9pbmZvCisgKgkgIEZpbmQgYW4gUmVsT3B0 SW5mbyBlbnRyeS4KICAqLwotUmVsT3B0SW5mbyAqCi1maW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxpZHMgcmVsaWRzKQorc3RhdGljIFJlbE9wdEluZm8gKgorZmluZF9yZWxfaW5m byhSZWxJbmZvTGlzdCAqbGlzdCwgUmVsaWRzIHJlbGlkcykKIHsKKwlpZiAobGlzdCA9PSBOVUxM KQorCQlyZXR1cm4gTlVMTDsKKwogCS8qCiAJICogU3dpdGNoIHRvIHVzaW5nIGhhc2ggbG9va3Vw IHdoZW4gbGlzdCBncm93cyAidG9vIGxvbmciLiAgVGhlIHRocmVzaG9sZAogCSAqIGlzIGFyYml0 cmFyeSBhbmQgaXMga25vd24gb25seSBoZXJlLgogCSAqLwotCWlmICghcm9vdC0+am9pbl9yZWxf aGFzaCAmJiBsaXN0X2xlbmd0aChyb290LT5qb2luX3JlbF9saXN0KSA+IDMyKQotCQlidWlsZF9q b2luX3JlbF9oYXNoKHJvb3QpOworCWlmICghbGlzdC0+aGFzaCAmJiBsaXN0X2xlbmd0aChsaXN0 LT5pdGVtcykgPiAzMikKKwkJYnVpbGRfcmVsX2hhc2gobGlzdCk7CiAKIAkvKgogCSAqIFVzZSBl aXRoZXIgaGFzaHRhYmxlIGxvb2t1cCBvciBsaW5lYXIgc2VhcmNoLCBhcyBhcHByb3ByaWF0ZS4K QEAgLTU0MSwyMyArNTQ3LDIzIEBAIGZpbmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJl bGlkcyByZWxpZHMpCiAJICogc28gd291bGQgZm9yY2UgcmVsaWRzIG91dCBvZiBhIHJlZ2lzdGVy IGFuZCB0aHVzIHByb2JhYmx5IHNsb3cgZG93biB0aGUKIAkgKiBsaXN0LXNlYXJjaCBjYXNlLgog CSAqLwotCWlmIChyb290LT5qb2luX3JlbF9oYXNoKQorCWlmIChsaXN0LT5oYXNoKQogCXsKIAkJ UmVsaWRzCQloYXNoa2V5ID0gcmVsaWRzOwotCQlKb2luSGFzaEVudHJ5ICpoZW50cnk7CisJCVJl bEluZm9FbnRyeSAqaGVudHJ5OwogCi0JCWhlbnRyeSA9IChKb2luSGFzaEVudHJ5ICopIGhhc2hf c2VhcmNoKHJvb3QtPmpvaW5fcmVsX2hhc2gsCi0JCQkJCQkJCQkJCSAgICZoYXNoa2V5LAotCQkJ CQkJCQkJCQkgICBIQVNIX0ZJTkQsCi0JCQkJCQkJCQkJCSAgIE5VTEwpOworCQloZW50cnkgPSAo UmVsSW5mb0VudHJ5ICopIGhhc2hfc2VhcmNoKGxpc3QtPmhhc2gsCisJCQkJCQkJCQkJCSAgJmhh c2hrZXksCisJCQkJCQkJCQkJCSAgSEFTSF9GSU5ELAorCQkJCQkJCQkJCQkgIE5VTEwpOwogCQlp ZiAoaGVudHJ5KQotCQkJcmV0dXJuIGhlbnRyeS0+am9pbl9yZWw7CisJCQlyZXR1cm4gaGVudHJ5 LT5yZWw7CiAJfQogCWVsc2UKIAl7CiAJCUxpc3RDZWxsICAgKmw7CiAKLQkJZm9yZWFjaChsLCBy b290LT5qb2luX3JlbF9saXN0KQorCQlmb3JlYWNoKGwsIGxpc3QtPml0ZW1zKQogCQl7CiAJCQlS ZWxPcHRJbmZvICpyZWwgPSAoUmVsT3B0SW5mbyAqKSBsZmlyc3QobCk7CiAKQEAgLTU2OSw2ICs1 NzUsNTQgQEAgZmluZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcykK IAlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIGZpbmRfam9pbl9yZWwKKyAqCSAgUmV0dXJucyBy ZWxhdGlvbiBlbnRyeSBjb3JyZXNwb25kaW5nIHRvICdyZWxpZHMnIChhIHNldCBvZiBSVCBpbmRl eGVzKSwKKyAqCSAgb3IgTlVMTCBpZiBub25lIGV4aXN0cy4gIFRoaXMgaXMgZm9yIGpvaW4gcmVs YXRpb25zLgorICovCitSZWxPcHRJbmZvICoKK2ZpbmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbGlkcyByZWxpZHMpCit7CisJcmV0dXJuIGZpbmRfcmVsX2luZm8ocm9vdC0+am9pbl9y ZWxfbGlzdCwgcmVsaWRzKTsKK30KKworLyoKKyAqIGFkZF9yZWxfaW5mbworICoJCUFkZCBnaXZl biByZWxhdGlvbiB0byB0aGUgZ2l2ZW4gbGlzdC4gQWxzbyBhZGQgaXQgdG8gdGhlIGF1eGlsaWFy eQorICoJCWhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUuCisgKi8KK3N0YXRpYyB2b2lkCithZGRf cmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwkvKiBHRVFP IHJlcXVpcmVzIHVzIHRvIGFwcGVuZCB0aGUgbmV3IHJlbGF0aW9uIHRvIHRoZSBlbmQgb2YgdGhl IGxpc3QhICovCisJbGlzdC0+aXRlbXMgPSBsYXBwZW5kKGxpc3QtPml0ZW1zLCByZWwpOworCisJ Lyogc3RvcmUgaXQgaW50byB0aGUgYXV4aWxpYXJ5IGhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUu ICovCisJaWYgKGxpc3QtPmhhc2gpCisJeworCQlSZWxJbmZvRW50cnkgKmhlbnRyeTsKKwkJYm9v bAkJZm91bmQ7CisKKwkJaGVudHJ5ID0gKFJlbEluZm9FbnRyeSAqKSBoYXNoX3NlYXJjaChsaXN0 LT5oYXNoLAorCQkJCQkJCQkJCQkgICYocmVsLT5yZWxpZHMpLAorCQkJCQkJCQkJCQkgIEhBU0hf RU5URVIsCisJCQkJCQkJCQkJCSAgJmZvdW5kKTsKKwkJQXNzZXJ0KCFmb3VuZCk7CisJCWhlbnRy eS0+cmVsID0gcmVsOworCX0KK30KKworLyoKKyAqIGFkZF9qb2luX3JlbAorICoJCUFkZCBnaXZl biBqb2luIHJlbGF0aW9uIHRvIHRoZSBsaXN0IG9mIGpvaW4gcmVsYXRpb25zIGluIHRoZSBnaXZl bgorICoJCVBsYW5uZXJJbmZvLgorICovCitzdGF0aWMgdm9pZAorYWRkX2pvaW5fcmVsKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsKQoreworCWFkZF9yZWxfaW5mbyhyb290 LT5qb2luX3JlbF9saXN0LCBqb2lucmVsKTsKK30KKwogLyoKICAqIHNldF9mb3JlaWduX3JlbF9w cm9wZXJ0aWVzCiAgKgkJU2V0IHVwIGZvcmVpZ24tam9pbiBmaWVsZHMgaWYgb3V0ZXIgYW5kIGlu bmVyIHJlbGF0aW9uIGFyZSBmb3JlaWduCkBAIC02MTgsMzIgKzY3Miw2IEBAIHNldF9mb3JlaWdu X3JlbF9wcm9wZXJ0aWVzKFJlbE9wdEluZm8gKmpvaW5yZWwsIFJlbE9wdEluZm8gKm91dGVyX3Jl bCwKIAl9CiB9CiAKLS8qCi0gKiBhZGRfam9pbl9yZWwKLSAqCQlBZGQgZ2l2ZW4gam9pbiByZWxh dGlvbiB0byB0aGUgbGlzdCBvZiBqb2luIHJlbGF0aW9ucyBpbiB0aGUgZ2l2ZW4KLSAqCQlQbGFu bmVySW5mby4gQWxzbyBhZGQgaXQgdG8gdGhlIGF1eGlsaWFyeSBoYXNodGFibGUgaWYgdGhlcmUg aXMgb25lLgotICovCi1zdGF0aWMgdm9pZAotYWRkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpqb2lucmVsKQotewotCS8qIEdFUU8gcmVxdWlyZXMgdXMgdG8gYXBwZW5k IHRoZSBuZXcgam9pbnJlbCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0ISAqLwotCXJvb3QtPmpvaW5f cmVsX2xpc3QgPSBsYXBwZW5kKHJvb3QtPmpvaW5fcmVsX2xpc3QsIGpvaW5yZWwpOwotCi0JLyog c3RvcmUgaXQgaW50byB0aGUgYXV4aWxpYXJ5IGhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUuICov Ci0JaWYgKHJvb3QtPmpvaW5fcmVsX2hhc2gpCi0JewotCQlKb2luSGFzaEVudHJ5ICpoZW50cnk7 Ci0JCWJvb2wJCWZvdW5kOwotCi0JCWhlbnRyeSA9IChKb2luSGFzaEVudHJ5ICopIGhhc2hfc2Vh cmNoKHJvb3QtPmpvaW5fcmVsX2hhc2gsCi0JCQkJCQkJCQkJCSAgICYoam9pbnJlbC0+cmVsaWRz KSwKLQkJCQkJCQkJCQkJICAgSEFTSF9FTlRFUiwKLQkJCQkJCQkJCQkJICAgJmZvdW5kKTsKLQkJ QXNzZXJ0KCFmb3VuZCk7Ci0JCWhlbnRyeS0+am9pbl9yZWwgPSBqb2lucmVsOwotCX0KLX0KLQog LyoKICAqIGJ1aWxkX2pvaW5fcmVsCiAgKgkgIFJldHVybnMgcmVsYXRpb24gZW50cnkgY29ycmVz cG9uZGluZyB0byB0aGUgdW5pb24gb2YgdHdvIGdpdmVuIHJlbHMsCkBAIC0xNDU3LDIyICsxNDg1 LDE0IEBAIHN1YmJ1aWxkX2pvaW5yZWxfam9pbmxpc3QoUmVsT3B0SW5mbyAqam9pbnJlbCwKIFJl bE9wdEluZm8gKgogZmV0Y2hfdXBwZXJfcmVsKFBsYW5uZXJJbmZvICpyb290LCBVcHBlclJlbGF0 aW9uS2luZCBraW5kLCBSZWxpZHMgcmVsaWRzKQogeworCVJlbEluZm9MaXN0ICpsaXN0ID0gJnJv b3QtPnVwcGVyX3JlbHNba2luZF07CiAJUmVsT3B0SW5mbyAqdXBwZXJyZWw7Ci0JTGlzdENlbGwg ICAqbGM7Ci0KLQkvKgotCSAqIEZvciB0aGUgbW9tZW50LCBvdXIgaW5kZXhpbmcgZGF0YSBzdHJ1 Y3R1cmUgaXMganVzdCBhIExpc3QgZm9yIGVhY2gKLQkgKiByZWxhdGlvbiBraW5kLiAgSWYgd2Ug ZXZlciBnZXQgc28gbWFueSBvZiBvbmUga2luZCB0aGF0IHRoaXMgc3RvcHMKLQkgKiB3b3JraW5n IHdlbGwsIHdlIGNhbiBpbXByb3ZlIGl0LiAgTm8gY29kZSBvdXRzaWRlIHRoaXMgZnVuY3Rpb24g c2hvdWxkCi0JICogYXNzdW1lIGFueXRoaW5nIGFib3V0IGhvdyB0byBmaW5kIGEgcGFydGljdWxh ciB1cHBlcnJlbC4KLQkgKi8KIAogCS8qIElmIHdlIGFscmVhZHkgbWFkZSB0aGlzIHVwcGVycmVs IGZvciB0aGUgcXVlcnksIHJldHVybiBpdCAqLwotCWZvcmVhY2gobGMsIHJvb3QtPnVwcGVyX3Jl bHNba2luZF0pCisJaWYgKGxpc3QpCiAJewotCQl1cHBlcnJlbCA9IChSZWxPcHRJbmZvICopIGxm aXJzdChsYyk7Ci0KLQkJaWYgKGJtc19lcXVhbCh1cHBlcnJlbC0+cmVsaWRzLCByZWxpZHMpKQor CQl1cHBlcnJlbCA9IGZpbmRfcmVsX2luZm8obGlzdCwgcmVsaWRzKTsKKwkJaWYgKHVwcGVycmVs KQogCQkJcmV0dXJuIHVwcGVycmVsOwogCX0KIApAQCAtMTQ5MSw3ICsxNTExLDcgQEAgZmV0Y2hf dXBwZXJfcmVsKFBsYW5uZXJJbmZvICpyb290LCBVcHBlclJlbGF0aW9uS2luZCBraW5kLCBSZWxp ZHMgcmVsaWRzKQogCXVwcGVycmVsLT5jaGVhcGVzdF91bmlxdWVfcGF0aCA9IE5VTEw7CiAJdXBw ZXJyZWwtPmNoZWFwZXN0X3BhcmFtZXRlcml6ZWRfcGF0aHMgPSBOSUw7CiAKLQlyb290LT51cHBl cl9yZWxzW2tpbmRdID0gbGFwcGVuZChyb290LT51cHBlcl9yZWxzW2tpbmRdLCB1cHBlcnJlbCk7 CisJYWRkX3JlbF9pbmZvKCZyb290LT51cHBlcl9yZWxzW2tpbmRdLCB1cHBlcnJlbCk7CiAKIAly ZXR1cm4gdXBwZXJyZWw7CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDE0Y2NmYzFhYzEuLjE5 NTFhZTdjMTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC04MCw2ICs4MCwyNiBAQCB0eXBlZGVm IGVudW0gVXBwZXJSZWxhdGlvbktpbmQKIAkvKiBOQjogVVBQRVJSRUxfRklOQUwgbXVzdCBiZSBs YXN0IGVudW0gZW50cnk7IGl0J3MgdXNlZCB0byBzaXplIGFycmF5cyAqLwogfSBVcHBlclJlbGF0 aW9uS2luZDsKIAorLyoKKyAqIEEgc3RydWN0dXJlIGNvbnNpc3Rpbmcgb2YgYSBsaXN0IGFuZCBh IGhhc2ggdGFibGUgdG8gc3RvcmUgcmVsYXRpb24tc3BlY2lmaWMKKyAqIGluZm9ybWF0aW9uLgor ICoKKyAqIEZvciBzbWFsbCBwcm9ibGVtcyB3ZSBqdXN0IHNjYW4gdGhlIGxpc3QgdG8gZG8gbG9v a3VwcywgYnV0IHdoZW4gdGhlcmUgYXJlCisgKiBtYW55IHJlbGF0aW9ucyB3ZSBidWlsZCBhIGhh c2ggdGFibGUgZm9yIGZhc3RlciBsb29rdXBzLiAgVGhlIGhhc2ggdGFibGUgaXMKKyAqIHByZXNl bnQgYW5kIHZhbGlkIHdoZW4gJ2hhc2gnIGlzIG5vdCBOVUxMLiAgTm90ZSB0aGF0IHdlIHN0aWxs IG1haW50YWluIHRoZQorICogbGlzdCBldmVuIHdoZW4gdXNpbmcgdGhlIGhhc2ggdGFibGUgZm9y IGxvb2t1cHM7IHRoaXMgc2ltcGxpZmllcyBsaWZlIGZvcgorICogR0VRTy4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgUmVsSW5mb0xpc3QKK3sKKwlwZ19ub2RlX2F0dHIobm9fY29weV9lcXVhbCwgbm9f cmVhZCkKKworCU5vZGVUYWcJCXR5cGU7CisKKwlMaXN0CSAgICppdGVtczsKKwlzdHJ1Y3QgSFRB QiAqaGFzaCBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOworfSBSZWxJbmZvTGlzdDsK KwogLyotLS0tLS0tLS0tCiAgKiBQbGFubmVyR2xvYmFsCiAgKgkJR2xvYmFsIGluZm9ybWF0aW9u IGZvciBwbGFubmluZy9vcHRpbWl6YXRpb24KQEAgLTI3MCwxNSArMjkwLDkgQEAgc3RydWN0IFBs YW5uZXJJbmZvCiAKIAkvKgogCSAqIGpvaW5fcmVsX2xpc3QgaXMgYSBsaXN0IG9mIGFsbCBqb2lu LXJlbGF0aW9uIFJlbE9wdEluZm9zIHdlIGhhdmUKLQkgKiBjb25zaWRlcmVkIGluIHRoaXMgcGxh bm5pbmcgcnVuLiAgRm9yIHNtYWxsIHByb2JsZW1zIHdlIGp1c3Qgc2NhbiB0aGUKLQkgKiBsaXN0 IHRvIGRvIGxvb2t1cHMsIGJ1dCB3aGVuIHRoZXJlIGFyZSBtYW55IGpvaW4gcmVsYXRpb25zIHdl IGJ1aWxkIGEKLQkgKiBoYXNoIHRhYmxlIGZvciBmYXN0ZXIgbG9va3Vwcy4gIFRoZSBoYXNoIHRh YmxlIGlzIHByZXNlbnQgYW5kIHZhbGlkCi0JICogd2hlbiBqb2luX3JlbF9oYXNoIGlzIG5vdCBO VUxMLiAgTm90ZSB0aGF0IHdlIHN0aWxsIG1haW50YWluIHRoZSBsaXN0Ci0JICogZXZlbiB3aGVu IHVzaW5nIHRoZSBoYXNoIHRhYmxlIGZvciBsb29rdXBzOyB0aGlzIHNpbXBsaWZpZXMgbGlmZSBm b3IKLQkgKiBHRVFPLgorCSAqIGNvbnNpZGVyZWQgaW4gdGhpcyBwbGFubmluZyBydW4uCiAJICov Ci0JTGlzdAkgICAqam9pbl9yZWxfbGlzdDsKLQlzdHJ1Y3QgSFRBQiAqam9pbl9yZWxfaGFzaCBw Z19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOworCVJlbEluZm9MaXN0ICpqb2luX3JlbF9s aXN0OyAvKiBsaXN0IG9mIGpvaW4tcmVsYXRpb24gUmVsT3B0SW5mb3MgKi8KIAogCS8qCiAJICog V2hlbiBkb2luZyBhIGR5bmFtaWMtcHJvZ3JhbW1pbmctc3R5bGUgam9pbiBzZWFyY2gsIGpvaW5f cmVsX2xldmVsW2tdCkBAIC00MTMsNyArNDI3LDcgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAJICog VXBwZXItcmVsIFJlbE9wdEluZm9zLiBVc2UgZmV0Y2hfdXBwZXJfcmVsKCkgdG8gZ2V0IGFueSBw YXJ0aWN1bGFyCiAJICogdXBwZXIgcmVsLgogCSAqLwotCUxpc3QJICAgKnVwcGVyX3JlbHNbVVBQ RVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOworCVJlbElu Zm9MaXN0IHVwcGVyX3JlbHNbVVBQRVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93 cml0ZV9pZ25vcmUpOwogCiAJLyogUmVzdWx0IHRsaXN0cyBjaG9zZW4gYnkgZ3JvdXBpbmdfcGxh bm5lciBmb3IgdXBwZXItc3RhZ2UgcHJvY2Vzc2luZyAqLwogCXN0cnVjdCBQYXRoVGFyZ2V0ICp1 cHBlcl90YXJnZXRzW1VQUEVSUkVMX0ZJTkFMICsgMV0gcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVf aWdub3JlKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNmQ0MjRjODkxOC4uNTAyYzc0 OGVjZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyOTIsNyArMTI5Miw2IEBAIEpv aW4KIEpvaW5Db3N0V29ya3NwYWNlCiBKb2luRG9tYWluCiBKb2luRXhwcgotSm9pbkhhc2hFbnRy eQogSm9pblBhdGgKIEpvaW5QYXRoRXh0cmFEYXRhCiBKb2luU3RhdGUKQEAgLTIzNzgsNiArMjM3 Nyw4IEBAIFJlbEZpbGVOdW1iZXIKIFJlbElkQ2FjaGVFbnQKIFJlbEluZm8KIFJlbEluZm9BcnIK K1JlbEluZm9FbnRyeQorUmVsSW5mb0xpc3QKIFJlbE1hcEZpbGUKIFJlbE1hcHBpbmcKIFJlbE9w dEluZm8KLS0gCjIuNDMuMAoK --000000000000cbbc8f06202c3e36 Content-Type: application/octet-stream; name="v11-0002-Implement-Eager-Aggregation.patch" Content-Disposition: attachment; filename="v11-0002-Implement-Eager-Aggregation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m03ilbzf1 RnJvbSAyYWY1MTk3NmIzM2VkZmJlN2QzYzI4ZDg0YzI3MDM2NjcxOGU0YTA2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNjowMToyNiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEx IDIvMl0gSW1wbGVtZW50IEVhZ2VyIEFnZ3JlZ2F0aW9uCgpFYWdlciBhZ2dyZWdhdGlvbiBpcyBh IHF1ZXJ5IG9wdGltaXphdGlvbiB0ZWNobmlxdWUgdGhhdCBwYXJ0aWFsbHkKcHVzaGVzIGFnZ3Jl Z2F0aW9uIHBhc3QgYSBqb2luLCBhbmQgZmluYWxpemVzIGl0IG9uY2UgYWxsIHRoZQpyZWxhdGlv bnMgYXJlIGpvaW5lZC4gIEVhZ2VyIGFnZ3JlZ2F0aW9uIG1heSByZWR1Y2UgdGhlIG51bWJlciBv ZgppbnB1dCByb3dzIHRvIHRoZSBqb2luIGFuZCB0aHVzIGNvdWxkIHJlc3VsdCBpbiBhIGJldHRl ciBvdmVyYWxsIHBsYW4uCgpBIHBsYW4gd2l0aCBlYWdlciBhZ2dyZWdhdGlvbiBsb29rcyBsaWtl OgoKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBhLmksIGF2ZyhiLnkpCiBGUk9NIGEgSk9J TiBiIE9OIGEuaSA9IGIuagogR1JPVVAgQlkgYS5pOwoKIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUK ICAgR3JvdXAgS2V5OiBhLmkKICAgLT4gIE5lc3RlZCBMb29wCiAgICAgICAgIC0+ICBQYXJ0aWFs IEhhc2hBZ2dyZWdhdGUKICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBiLmoKICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGIKICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBh X3BrZXkgb24gYQogICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaSA9IGIuaikKCkR1cmluZyB0 aGUgY29uc3RydWN0aW9uIG9mIHRoZSBqb2luIHRyZWUsIHdlIGV2YWx1YXRlIGVhY2ggYmFzZSBv cgpqb2luIHJlbGF0aW9uIHRvIGRldGVybWluZSBpZiBlYWdlciBhZ2dyZWdhdGlvbiBjYW4gYmUg YXBwbGllZC4gIElmCmZlYXNpYmxlLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBSZWxPcHRJbmZvIGNh bGxlZCBhICJncm91cGVkIHJlbGF0aW9uIgphbmQgc3RvcmUgaXQgaW4gcm9vdC0+dXBwZXJfcmVs c1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10uCgpHcm91cGVkIHJlbGF0aW9uIHBhdGhzIGNh biBiZSBnZW5lcmF0ZWQgaW4gdHdvIHdheXMuICBUaGUgZmlyc3QgbWV0aG9kCmludm9sdmVzIGFk ZGluZyBzb3J0ZWQgYW5kIGhhc2hlZCBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBv Zgp0aGUgbm9uLWdyb3VwZWQgcGF0aHMuICBUbyBsaW1pdCBwbGFubmluZyB0aW1lLCB3ZSBvbmx5 IGNvbnNpZGVyIHRoZQpjaGVhcGVzdCBvciBzdWl0YWJseS1zb3J0ZWQgbm9uLWdyb3VwZWQgcGF0 aHMgZHVyaW5nIHRoaXMgcGhhc2UuCgpBbHRlcm5hdGl2ZWx5LCBncm91cGVkIHBhdGhzIGNhbiBi ZSBnZW5lcmF0ZWQgYnkgam9pbmluZyBhIGdyb3VwZWQKcmVsYXRpb24gd2l0aCBhIG5vbi1ncm91 cGVkIHJlbGF0aW9uLiAgSm9pbmluZyB0d28gZ3JvdXBlZCByZWxhdGlvbnMKZG9lcyBub3Qgc2Vl bSB0byBiZSB2ZXJ5IHVzZWZ1bCBhbmQgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCgpGb3Ig dGhlIHBhcnRpYWwgYWdncmVnYXRpb24gdGhhdCBpcyBwdXNoZWQgZG93biB0byBhIG5vbi1hZ2dy ZWdhdGVkCnJlbGF0aW9uLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBleHByZXNzaW9ucyBmcm9t IHRoaXMgcmVsYXRpb24gdGhhdAphcmUgaW52b2x2ZWQgaW4gdXBwZXIgam9pbiBjbGF1c2VzIGFu ZCBpbmNsdWRlIHRoZW0gaW4gdGhlIGdyb3VwaW5nCmtleXMuICBUaGlzIGVuc3VyZXMgdGhhdCB3 ZSBoYXZlIHRoZSBjb3JyZWN0IGlucHV0IGZvciB0aGUgdXBwZXIgam9pbnMKYW5kIHRoYXQgYW4g YWdncmVnYXRlZCByb3cgZnJvbSB0aGUgcGFydGlhbCBhZ2dyZWdhdGlvbiBtYXRjaGVzIHRoZQpv dGhlciBzaWRlIG9mIHRoZSBqb2luIGlmIGFuZCBvbmx5IGlmIGVhY2ggcm93IGluIHRoZSBwYXJ0 aWFsIGdyb3VwCmRvZXMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIG1haW50YWluaW5nIGNvcnJlY3Ru ZXNzLgoKT25lIHJlc3RyaWN0aW9uIGlzIHRoYXQgd2UgY2Fubm90IHB1c2ggcGFydGlhbCBhZ2dy ZWdhdGlvbiBkb3duIHRvIGEKcmVsYXRpb24gdGhhdCBpcyBpbiB0aGUgbnVsbGFibGUgc2lkZSBv ZiBhbiBvdXRlciBqb2luLCBiZWNhdXNlIHRoZQpOVUxMLWV4dGVuZGVkIHJvd3MgcHJvZHVjZWQg YnkgdGhlIG91dGVyIGpvaW4gd291bGQgbm90IGJlIGF2YWlsYWJsZQp3aGVuIHdlIHBlcmZvcm0g dGhlIHBhcnRpYWwgYWdncmVnYXRpb24sIHdoaWxlIHdpdGggYQpub24tZWFnZXItYWdncmVnYXRp b24gcGxhbiB0aGVzZSByb3dzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSB0b3AtbGV2ZWwKYWdncmVn YXRpb24uICBQdXNoaW5nIHBhcnRpYWwgYWdncmVnYXRpb24gaW4gdGhpcyBjYXNlIG1heSByZXN1 bHQgaW4KdGhlIHJvd3MgYmVpbmcgZ3JvdXBlZCBkaWZmZXJlbnRseSB0aGFuIGV4cGVjdGVkLCBv ciBwcm9kdWNlIGluY29ycmVjdAp2YWx1ZXMgZnJvbSB0aGUgYWdncmVnYXRlIGZ1bmN0aW9ucy4K CklmIHdlIGhhdmUgZ2VuZXJhdGVkIGEgZ3JvdXBlZCByZWxhdGlvbiBmb3IgdGhlIHRvcG1vc3Qg am9pbiByZWxhdGlvbiwKd2UgZmluYWxpemUgaXRzIHBhdGhzIGF0IHRoZSBlbmQuICBUaGUgZmlu YWwgcGF0aCB3aWxsIGNvbXBldGUgaW4gdGhlCnVzdWFsIHdheSB3aXRoIHBhdGhzIGJ1aWx0IGZy b20gcmVndWxhciBwbGFubmluZy4KClNpbmNlIGVhZ2VyIGFnZ3JlZ2F0aW9uIGNhbiBnZW5lcmF0 ZSBtYW55IHVwcGVyIHJlbGF0aW9ucyBvZiBwYXJ0aWFsCmFnZ3JlZ2F0aW9uLCB3ZSBpbnRyb2R1 Y2UgYSBSZWxJbmZvTGlzdCBzdHJ1Y3R1cmUsIHdoaWNoIGVuY2Fwc3VsYXRlcwpib3RoIGEgbGlz dCBhbmQgYSBoYXNoIHRhYmxlLCBzbyB0aGF0IHdlIGNhbiBsZXZlcmFnZSB0aGUgaGFzaCB0YWJs ZQpmb3IgZmFzdGVyIGxvb2t1cHMgbm90IG9ubHkgZm9yIGpvaW4gcmVsYXRpb25zIGJ1dCBhbHNv IGZvciB1cHBlcgpyZWxhdGlvbnMuCgpFYWdlciBhZ2dyZWdhdGlvbiBjYW4gdXNlIHNpZ25pZmlj YW50bHkgbW9yZSBDUFUgdGltZSBhbmQgbWVtb3J5IHRoYW4KcmVndWxhciBwbGFubmluZyB3aGVu IHRoZSBxdWVyeSBpbnZvbHZlcyBhZ2dyZWdhdGVzIGFuZCBtYW55IGpvaW5pbmcKcmVsYXRpb25z LiAgSG93ZXZlciwgaW4gc29tZSBjYXNlcywgdGhlIHJlc3VsdGluZyBwbGFuIGNhbiBiZSBtdWNo CmJldHRlciwganVzdGlmeWluZyB0aGUgYWRkaXRpb25hbCBwbGFubmluZyBlZmZvcnQuICBBbGwg dGhlIHNhbWUsIGZvcgpub3csIHR1cm4gdGhpcyBmZWF0dXJlIG9mZiBieSBkZWZhdWx0LgotLS0K IHNyYy9iYWNrZW5kL29wdGltaXplci9SRUFETUUgICAgICAgICAgICAgICAgICB8ICAgNzkgKwog c3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMgICAgICAgIHwgIDEwNCArLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgICAgICAgIHwgIDQ0MSArKysr KysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMgICAgICAgICB8ICAxMzUg KysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jICAgICAgICB8ICAyNTIg KysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYyAgICAgICAgIHwgICAx MiArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgICAgICAgfCAgIDk5 ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMgICAgICAgfCAgIDYw ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgICAgICAgICB8ICAgMTIg Ky0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyAgICAgICAgICB8ICA3Mzcg KysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAg IHwgICAxMCArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUg fCAgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8 ICAxMDAgKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oICAgICAgICAgICAgICB8 ICAgIDkgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggICAgICAgICAgICAgICAgIHwg ICAgNSArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaCAgICAgICAgICAgICAgfCAg ICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZWFnZXJfYWdncmVnYXRlLm91dCB8IDEz MDggKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mu b3V0ICAgICAgICB8ICAgIDMgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUg ICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VhZ2VyX2FnZ3JlZ2F0 ZS5zcWwgICAgICB8ICAxOTIgKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAg ICAgICAgICAgICAgfCAgICA0ICsKIDIxIGZpbGVzIGNoYW5nZWQsIDM0NjcgaW5zZXJ0aW9ucygr KSwgOTkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9lYWdlcl9hZ2dyZWdhdGUub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv cmVncmVzcy9zcWwvZWFnZXJfYWdncmVnYXRlLnNxbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9SRUFETUUgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvUkVBRE1FCmluZGV4IDJh YjRmM2RiZjMuLjZmNzllZjUzMWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9S RUFETUUKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL1JFQURNRQpAQCAtMTQ5NywzICsxNDk3 LDgyIEBAIGJyZWFraW5nIGRvd24gYWdncmVnYXRpb24gb3IgZ3JvdXBpbmcgb3ZlciBhIHBhcnRp dGlvbmVkIHJlbGF0aW9uIGludG8KIGFnZ3JlZ2F0aW9uIG9yIGdyb3VwaW5nIG92ZXIgaXRzIHBh cnRpdGlvbnMgaXMgY2FsbGVkIHBhcnRpdGlvbndpc2UKIGFnZ3JlZ2F0aW9uLiAgRXNwZWNpYWxs eSB3aGVuIHRoZSBwYXJ0aXRpb24ga2V5cyBtYXRjaCB0aGUgR1JPVVAgQlkgY2xhdXNlLAogdGhp cyBjYW4gYmUgc2lnbmlmaWNhbnRseSBmYXN0ZXIgdGhhbiB0aGUgcmVndWxhciBtZXRob2QuCisK K0VhZ2VyIGFnZ3JlZ2F0aW9uCistLS0tLS0tLS0tLS0tLS0tLQorCitFYWdlciBhZ2dyZWdhdGlv biBpcyBhIHF1ZXJ5IG9wdGltaXphdGlvbiB0ZWNobmlxdWUgdGhhdCBwYXJ0aWFsbHkgcHVzaGVz CithZ2dyZWdhdGlvbiBwYXN0IGEgam9pbiwgYW5kIGZpbmFsaXplcyBpdCBvbmNlIGFsbCB0aGUg cmVsYXRpb25zIGFyZSBqb2luZWQuCitFYWdlciBhZ2dyZWdhdGlvbiBtYXkgcmVkdWNlIHRoZSBu dW1iZXIgb2YgaW5wdXQgcm93cyB0byB0aGUgam9pbiBhbmQgdGh1cworY291bGQgcmVzdWx0IGlu IGEgYmV0dGVyIG92ZXJhbGwgcGxhbi4KKworRm9yIGV4YW1wbGU6CisKKyBFWFBMQUlOIChDT1NU UyBPRkYpCisgU0VMRUNUIGEuaSwgYXZnKGIueSkKKyBGUk9NIGEgSk9JTiBiIE9OIGEuaSA9IGIu agorIEdST1VQIEJZIGEuaTsKKworIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtl eTogYS5pCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogYi5qCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gYgorICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBhX3BrZXkg b24gYQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGkgPSBiLmopCisKK0lmIHRoZSBwYXJ0 aWFsIGFnZ3JlZ2F0aW9uIG9uIHRhYmxlIEIgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRoZSBudW1i ZXIgb2YKK2lucHV0IHJvd3MsIHRoZSBqb2luIGFib3ZlIHdpbGwgYmUgbXVjaCBjaGVhcGVyLCBs ZWFkaW5nIHRvIGEgbW9yZSBlZmZpY2llbnQKK2ZpbmFsIHBsYW4uCisKK0ZvciB0aGUgcGFydGlh bCBhZ2dyZWdhdGlvbiB0aGF0IGlzIHB1c2hlZCBkb3duIHRvIGEgbm9uLWFnZ3JlZ2F0ZWQgcmVs YXRpb24sCit3ZSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBleHByZXNzaW9ucyBmcm9tIHRoaXMgcmVs YXRpb24gdGhhdCBhcmUgaW52b2x2ZWQgaW4KK3VwcGVyIGpvaW4gY2xhdXNlcyBhbmQgaW5jbHVk ZSB0aGVtIGluIHRoZSBncm91cGluZyBrZXlzLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2UKK2hhdmUg dGhlIGNvcnJlY3QgaW5wdXQgZm9yIHRoZSB1cHBlciBqb2lucyBhbmQgdGhhdCBhbiBhZ2dyZWdh dGVkIHJvdyBmcm9tIHRoZQorcGFydGlhbCBhZ2dyZWdhdGlvbiBtYXRjaGVzIHRoZSBvdGhlciBz aWRlIG9mIHRoZSBqb2luIGlmIGFuZCBvbmx5IGlmIGVhY2ggcm93CitpbiB0aGUgcGFydGlhbCBn cm91cCBkb2VzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyBjb3JyZWN0bmVzcy4K KworT25lIHJlc3RyaWN0aW9uIGlzIHRoYXQgd2UgY2Fubm90IHB1c2ggcGFydGlhbCBhZ2dyZWdh dGlvbiBkb3duIHRvIGEgcmVsYXRpb24KK3RoYXQgaXMgaW4gdGhlIG51bGxhYmxlIHNpZGUgb2Yg YW4gb3V0ZXIgam9pbiwgYmVjYXVzZSB0aGUgTlVMTC1leHRlbmRlZCByb3dzCitwcm9kdWNlZCBi eSB0aGUgb3V0ZXIgam9pbiB3b3VsZCBub3QgYmUgYXZhaWxhYmxlIHdoZW4gd2UgcGVyZm9ybSB0 aGUgcGFydGlhbAorYWdncmVnYXRpb24sIHdoaWxlIHdpdGggYSBub24tZWFnZXItYWdncmVnYXRp b24gcGxhbiB0aGVzZSByb3dzIGFyZSBhdmFpbGFibGUKK2ZvciB0aGUgdG9wLWxldmVsIGFnZ3Jl Z2F0aW9uLiAgUHVzaGluZyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGluIHRoaXMgY2FzZSBtYXkKK3Jl c3VsdCBpbiB0aGUgcm93cyBiZWluZyBncm91cGVkIGRpZmZlcmVudGx5IHRoYW4gZXhwZWN0ZWQs IG9yIHByb2R1Y2UKK2luY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgYWdncmVnYXRlIGZ1bmN0aW9u cy4KKworV2UgY2FuIGFsc28gYXBwbHkgZWFnZXIgYWdncmVnYXRpb24gdG8gYSBqb2luOgorCisg RVhQTEFJTiAoQ09TVFMgT0ZGKQorIFNFTEVDVCBhLmksIGF2ZyhiLnkgKyBjLnopCisgRlJPTSBh IEpPSU4gYiBPTiBhLmkgPSBiLmoKKyAgICAgICAgSk9JTiBjIE9OIGIuaiA9IGMuaQorIEdST1VQ IEJZIGEuaTsKKworIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogYS5pCisg ICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAg ICAgICAgICAgICAgIEdyb3VwIEtleTogYi5qCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChiLmogPSBjLmkpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYgorICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBjCisgICAgICAg ICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGFfcGtleSBvbiBhCisgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAoaSA9IGIuaikKKworRHVyaW5nIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIGpv aW4gdHJlZSwgd2UgZXZhbHVhdGUgZWFjaCBiYXNlIG9yIGpvaW4KK3JlbGF0aW9uIHRvIGRldGVy bWluZSBpZiBlYWdlciBhZ2dyZWdhdGlvbiBjYW4gYmUgYXBwbGllZC4gIElmIGZlYXNpYmxlLCB3 ZQorY3JlYXRlIGEgc2VwYXJhdGUgUmVsT3B0SW5mbyBjYWxsZWQgYSAiZ3JvdXBlZCByZWxhdGlv biIgYW5kIGdlbmVyYXRlIGdyb3VwZWQKK3BhdGhzIGJ5IGFkZGluZyBzb3J0ZWQgYW5kIGhhc2hl ZCBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBvZiB0aGUKK25vbi1ncm91cGVkIHBh dGhzLiAgVG8gbGltaXQgcGxhbm5pbmcgdGltZSwgd2UgY29uc2lkZXIgb25seSB0aGUgY2hlYXBl c3QKK25vbi1ncm91cGVkIHBhdGhzIGluIHRoaXMgc3RlcC4KKworQW5vdGhlciB3YXkgdG8gZ2Vu ZXJhdGUgZ3JvdXBlZCBwYXRocyBpcyB0byBqb2luIGEgZ3JvdXBlZCByZWxhdGlvbiB3aXRoIGEK K25vbi1ncm91cGVkIHJlbGF0aW9uLiAgSm9pbmluZyB0d28gZ3JvdXBlZCByZWxhdGlvbnMgZG9l cyBub3Qgc2VlbSB0byBiZSB2ZXJ5Cit1c2VmdWwgYW5kIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9y dGVkLgorCitJZiB3ZSBoYXZlIGdlbmVyYXRlZCBhIGdyb3VwZWQgcmVsYXRpb24gZm9yIHRoZSB0 b3Btb3N0IGpvaW4gcmVsYXRpb24sIHdlIG5lZWQKK3RvIGZpbmFsaXplIGl0cyBwYXRocyBhdCB0 aGUgZW5kLiAgVGhlIGZpbmFsIHBhdGggd2lsbCBjb21wZXRlIGluIHRoZSB1c3VhbCB3YXkKK3dp dGggcGF0aHMgYnVpbHQgZnJvbSByZWd1bGFyIHBsYW5uaW5nLgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv Z2Vxby9nZXFvX2V2YWwuYwppbmRleCAxMTQxMTU2ODk5Li5iNzc4MDVkMjdkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2YWwuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2YWwuYwpAQCAtMzksMTAgKzM5LDIwIEBAIHR5cGVkZWYg c3RydWN0CiAJaW50CQkJc2l6ZTsJCQkvKiBudW1iZXIgb2YgaW5wdXQgcmVsYXRpb25zIGluIGNs dW1wICovCiB9IENsdW1wOwogCisvKiBUaGUgb3JpZ2luYWwgbGVuZ3RoIGFuZCBoYXNodGFibGUg b2YgYSBSZWxJbmZvTGlzdCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlpbnQJCQlzYXZlbGVuZ3Ro OworCXN0cnVjdCBIVEFCICpzYXZlaGFzaDsKK30gUmVsSW5mb0xpc3RJbmZvOworCiBzdGF0aWMg TGlzdCAqbWVyZ2VfY2x1bXAoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsdW1wcywgQ2x1bXAg Km5ld19jbHVtcCwKIAkJCQkJCSBpbnQgbnVtX2dlbmUsIGJvb2wgZm9yY2UpOwogc3RhdGljIGJv b2wgZGVzaXJhYmxlX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkgICBSZWxPcHRJbmZv ICpvdXRlcl9yZWwsIFJlbE9wdEluZm8gKmlubmVyX3JlbCk7CitzdGF0aWMgUmVsSW5mb0xpc3RJ bmZvIHNhdmVfcmVsaW5mb2xpc3QoUmVsSW5mb0xpc3QgKnJlbGluZm9fbGlzdCk7CitzdGF0aWMg dm9pZCByZXN0b3JlX3JlbGluZm9saXN0KFJlbEluZm9MaXN0ICpyZWxpbmZvX2xpc3QsCisJCQkJ CQkJCVJlbEluZm9MaXN0SW5mbyAqaW5mbyk7CiAKIAogLyoKQEAgLTYwLDggKzcwLDkgQEAgZ2Vx b19ldmFsKFBsYW5uZXJJbmZvICpyb290LCBHZW5lICp0b3VyLCBpbnQgbnVtX2dlbmUpCiAJTWVt b3J5Q29udGV4dCBvbGRjeHQ7CiAJUmVsT3B0SW5mbyAqam9pbnJlbDsKIAlDb3N0CQlmaXRuZXNz OwotCWludAkJCXNhdmVsZW5ndGg7Ci0Jc3RydWN0IEhUQUIgKnNhdmVoYXNoOworCVJlbEluZm9M aXN0SW5mbyBzYXZlX2pvaW5fcmVsOworCVJlbEluZm9MaXN0SW5mbyBzYXZlX2dyb3VwZWRfcmVs OworCVJlbEluZm9MaXN0SW5mbyBzYXZlX2dyb3VwZWRfaW5mbzsKIAogCS8qCiAJICogQ3JlYXRl IGEgcHJpdmF0ZSBtZW1vcnkgY29udGV4dCB0aGF0IHdpbGwgaG9sZCBhbGwgdGVtcCBzdG9yYWdl CkBAIC03OCwyNSArODksMzMgQEAgZ2Vxb19ldmFsKFBsYW5uZXJJbmZvICpyb290LCBHZW5lICp0 b3VyLCBpbnQgbnVtX2dlbmUpCiAJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKG15Y29u dGV4dCk7CiAKIAkvKgotCSAqIGdpbW1lX3RyZWUgd2lsbCBhZGQgZW50cmllcyB0byByb290LT5q b2luX3JlbF9saXN0LCB3aGljaCBtYXkgb3IgbWF5Ci0JICogbm90IGFscmVhZHkgY29udGFpbiBz b21lIGVudHJpZXMuICBUaGUgbmV3bHkgYWRkZWQgZW50cmllcyB3aWxsIGJlCi0JICogcmVjeWNs ZWQgYnkgdGhlIE1lbW9yeUNvbnRleHREZWxldGUgYmVsb3csIHNvIHdlIG11c3QgZW5zdXJlIHRo YXQgdGhlCi0JICogbGlzdCBpcyByZXN0b3JlZCB0byBpdHMgZm9ybWVyIHN0YXRlIGJlZm9yZSBl eGl0aW5nLiAgV2UgY2FuIGRvIHRoaXMgYnkKLQkgKiB0cnVuY2F0aW5nIHRoZSBsaXN0IHRvIGl0 cyBvcmlnaW5hbCBsZW5ndGguICBOT1RFIHRoaXMgYXNzdW1lcyB0aGF0IGFueQotCSAqIGFkZGVk IGVudHJpZXMgYXJlIGFwcGVuZGVkIGF0IHRoZSBlbmQhCisJICogZ2ltbWVfdHJlZSB3aWxsIGFk ZCBlbnRyaWVzIHRvIHJvb3QtPmpvaW5fcmVsX2xpc3QsIHJvb3QtPmFnZ19pbmZvX2xpc3QKKwkg KiBhbmQgcm9vdC0+dXBwZXJfcmVsc1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10sIHdoaWNo IG1heSBvciBtYXkgbm90CisJICogYWxyZWFkeSBjb250YWluIHNvbWUgZW50cmllcy4gIFRoZSBu ZXdseSBhZGRlZCBlbnRyaWVzIHdpbGwgYmUgcmVjeWNsZWQKKwkgKiBieSB0aGUgTWVtb3J5Q29u dGV4dERlbGV0ZSBiZWxvdywgc28gd2UgbXVzdCBlbnN1cmUgdGhhdCBlYWNoIGxpc3Qgb2YKKwkg KiB0aGUgUmVsSW5mb0xpc3Qgc3RydWN0dXJlcyBpcyByZXN0b3JlZCB0byBpdHMgZm9ybWVyIHN0 YXRlIGJlZm9yZQorCSAqIGV4aXRpbmcuICBXZSBjYW4gZG8gdGhpcyBieSB0cnVuY2F0aW5nIGVh Y2ggbGlzdCB0byBpdHMgb3JpZ2luYWwKKwkgKiBsZW5ndGguIE5PVEUgdGhpcyBhc3N1bWVzIHRo YXQgYW55IGFkZGVkIGVudHJpZXMgYXJlIGFwcGVuZGVkIGF0IHRoZQorCSAqIGVuZCEKIAkgKgot CSAqIFdlIGFsc28gbXVzdCB0YWtlIGNhcmUgbm90IHRvIG1lc3MgdXAgdGhlIG91dGVyIGpvaW5f cmVsX2xpc3QtPmhhc2gsIGlmCi0JICogdGhlcmUgaXMgb25lLiAgV2UgY2FuIGRvIHRoaXMgYnkg anVzdCB0ZW1wb3JhcmlseSBzZXR0aW5nIHRoZSBsaW5rIHRvCi0JICogTlVMTC4gIChJZiB3ZSBh cmUgZGVhbGluZyB3aXRoIGVub3VnaCBqb2luIHJlbHMsIHdoaWNoIHdlIHZlcnkgbGlrZWx5Ci0J ICogYXJlLCBhIG5ldyBoYXNoIHRhYmxlIHdpbGwgZ2V0IGJ1aWx0IGFuZCB1c2VkIGxvY2FsbHku KQorCSAqIFdlIGFsc28gbXVzdCB0YWtlIGNhcmUgbm90IHRvIG1lc3MgdXAgdGhlIG91dGVyIGhh c2ggdGFibGVzIG9mIHRoZQorCSAqIFJlbEluZm9MaXN0IHN0cnVjdHVyZXMsIGlmIGFueS4gIFdl IGNhbiBkbyB0aGlzIGJ5IGp1c3QgdGVtcG9yYXJpbHkKKwkgKiBzZXR0aW5nIGVhY2ggbGluayB0 byBOVUxMLiAgKElmIHdlIGFyZSBkZWFsaW5nIHdpdGggZW5vdWdoIGpvaW4gcmVscywKKwkgKiB3 aGljaCB3ZSB2ZXJ5IGxpa2VseSBhcmUsIG5ldyBoYXNoIHRhYmxlcyB3aWxsIGdldCBidWlsdCBh bmQgdXNlZAorCSAqIGxvY2FsbHkuKQogCSAqCiAJICogam9pbl9yZWxfbGV2ZWxbXSBzaG91bGRu J3QgYmUgaW4gdXNlLCBzbyBqdXN0IEFzc2VydCBpdCBpc24ndC4KIAkgKi8KLQlzYXZlbGVuZ3Ro ID0gbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMpOwotCXNhdmVoYXNoID0g cm9vdC0+am9pbl9yZWxfbGlzdC0+aGFzaDsKKwlzYXZlX2pvaW5fcmVsID0gc2F2ZV9yZWxpbmZv bGlzdChyb290LT5qb2luX3JlbF9saXN0KTsKKwlzYXZlX2dyb3VwZWRfcmVsID0KKwkJc2F2ZV9y ZWxpbmZvbGlzdCgmcm9vdC0+dXBwZXJfcmVsc1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10p OworCXNhdmVfZ3JvdXBlZF9pbmZvID0gc2F2ZV9yZWxpbmZvbGlzdChyb290LT5hZ2dfaW5mb19s aXN0KTsKKwogCUFzc2VydChyb290LT5qb2luX3JlbF9sZXZlbCA9PSBOVUxMKTsKIAogCXJvb3Qt PmpvaW5fcmVsX2xpc3QtPmhhc2ggPSBOVUxMOworCXJvb3QtPnVwcGVyX3JlbHNbVVBQRVJSRUxf UEFSVElBTF9HUk9VUF9BR0ddLmhhc2ggPSBOVUxMOworCXJvb3QtPmFnZ19pbmZvX2xpc3QtPmhh c2ggPSBOVUxMOwogCiAJLyogY29uc3RydWN0IHRoZSBiZXN0IHBhdGggZm9yIHRoZSBnaXZlbiBj b21iaW5hdGlvbiBvZiByZWxhdGlvbnMgKi8KIAlqb2lucmVsID0gZ2ltbWVfdHJlZShyb290LCB0 b3VyLCBudW1fZ2VuZSk7CkBAIC0xMTgsMTIgKzEzNywxNCBAQCBnZXFvX2V2YWwoUGxhbm5lcklu Zm8gKnJvb3QsIEdlbmUgKnRvdXIsIGludCBudW1fZ2VuZSkKIAkJZml0bmVzcyA9IERCTF9NQVg7 CiAKIAkvKgotCSAqIFJlc3RvcmUgam9pbl9yZWxfbGlzdCB0byBpdHMgZm9ybWVyIHN0YXRlLCBh bmQgcHV0IGJhY2sgb3JpZ2luYWwKLQkgKiBoYXNodGFibGUgaWYgYW55LgorCSAqIFJlc3RvcmUg ZWFjaCBvZiB0aGUgbGlzdCBpbiBqb2luX3JlbF9saXN0LCBhZ2dfaW5mb19saXN0IGFuZAorCSAq IHVwcGVyX3JlbHNbVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9BR0ddIHRvIGl0cyBmb3JtZXIgc3Rh dGUsIGFuZCBwdXQKKwkgKiBiYWNrIG9yaWdpbmFsIGhhc2h0YWJsZSBpZiBhbnkuCiAJICovCi0J cm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMgPSBsaXN0X3RydW5jYXRlKHJvb3QtPmpvaW5fcmVs X2xpc3QtPml0ZW1zLAotCQkJCQkJCQkJCQkgICBzYXZlbGVuZ3RoKTsKLQlyb290LT5qb2luX3Jl bF9saXN0LT5oYXNoID0gc2F2ZWhhc2g7CisJcmVzdG9yZV9yZWxpbmZvbGlzdChyb290LT5qb2lu X3JlbF9saXN0LCAmc2F2ZV9qb2luX3JlbCk7CisJcmVzdG9yZV9yZWxpbmZvbGlzdCgmcm9vdC0+ dXBwZXJfcmVsc1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10sCisJCQkJCQkmc2F2ZV9ncm91 cGVkX3JlbCk7CisJcmVzdG9yZV9yZWxpbmZvbGlzdChyb290LT5hZ2dfaW5mb19saXN0LCAmc2F2 ZV9ncm91cGVkX2luZm8pOwogCiAJLyogcmVsZWFzZSBhbGwgdGhlIG1lbW9yeSBhY3F1aXJlZCB3 aXRoaW4gZ2ltbWVfdHJlZSAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwpAQCAt Mjc5LDYgKzMwMCwyNyBAQCBtZXJnZV9jbHVtcChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2x1 bXBzLCBDbHVtcCAqbmV3X2NsdW1wLCBpbnQgbnVtX2dlbmUsCiAJCQkJLyogRmluZCBhbmQgc2F2 ZSB0aGUgY2hlYXBlc3QgcGF0aHMgZm9yIHRoaXMgam9pbnJlbCAqLwogCQkJCXNldF9jaGVhcGVz dChqb2lucmVsKTsKIAorCQkJCS8qCisJCQkJICogRXhjZXB0IGZvciB0aGUgdG9wbW9zdCBzY2Fu L2pvaW4gcmVsLCBjb25zaWRlciBnZW5lcmF0aW5nCisJCQkJICogcGFydGlhbCBhZ2dyZWdhdGlv biBwYXRocyBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24gb24gdG9wCisJCQkJICogb2YgdGhlIHBh dGhzIG9mIHRoaXMgcmVsLiAgQWZ0ZXIgdGhhdCwgd2UncmUgZG9uZSBjcmVhdGluZworCQkJCSAq IHBhdGhzIGZvciB0aGUgZ3JvdXBlZCByZWxhdGlvbiwgc28gcnVuIHNldF9jaGVhcGVzdCgpLgor CQkJCSAqLworCQkJCWlmICghYm1zX2VxdWFsKGpvaW5yZWwtPnJlbGlkcywgcm9vdC0+YWxsX3F1 ZXJ5X3JlbHMpKQorCQkJCXsKKwkJCQkJUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisJCQkJCVJl bEFnZ0luZm8gKmFnZ19pbmZvOworCisJCQkJCXJlbF9ncm91cGVkID0gZmluZF9ncm91cGVkX3Jl bChyb290LCBqb2lucmVsLT5yZWxpZHMsCisJCQkJCQkJCQkJCQkgICAmYWdnX2luZm8pOworCQkJ CQlpZiAocmVsX2dyb3VwZWQpCisJCQkJCXsKKwkJCQkJCWdlbmVyYXRlX2dyb3VwZWRfcGF0aHMo cm9vdCwgcmVsX2dyb3VwZWQsIGpvaW5yZWwsCisJCQkJCQkJCQkJCSAgIGFnZ19pbmZvKTsKKwkJ CQkJCXNldF9jaGVhcGVzdChyZWxfZ3JvdXBlZCk7CisJCQkJCX0KKwkJCQl9CisKIAkJCQkvKiBB YnNvcmIgbmV3IGNsdW1wIGludG8gb2xkICovCiAJCQkJb2xkX2NsdW1wLT5qb2lucmVsID0gam9p bnJlbDsKIAkJCQlvbGRfY2x1bXAtPnNpemUgKz0gbmV3X2NsdW1wLT5zaXplOwpAQCAtMzM2LDMg KzM3OCwyNyBAQCBkZXNpcmFibGVfam9pbihQbGFubmVySW5mbyAqcm9vdCwKIAkvKiBPdGhlcndp c2UgcG9zdHBvbmUgdGhlIGpvaW4gdGlsbCBsYXRlci4gKi8KIAlyZXR1cm4gZmFsc2U7CiB9CisK Ky8qCisgKiBTYXZlIHRoZSBvcmlnaW5hbCBsZW5ndGggYW5kIGhhc2h0YWJsZSBvZiBhIFJlbElu Zm9MaXN0LgorICovCitzdGF0aWMgUmVsSW5mb0xpc3RJbmZvCitzYXZlX3JlbGluZm9saXN0KFJl bEluZm9MaXN0ICpyZWxpbmZvX2xpc3QpCit7CisJUmVsSW5mb0xpc3RJbmZvIGluZm87CisKKwlp bmZvLnNhdmVsZW5ndGggPSBsaXN0X2xlbmd0aChyZWxpbmZvX2xpc3QtPml0ZW1zKTsKKwlpbmZv LnNhdmVoYXNoID0gcmVsaW5mb19saXN0LT5oYXNoOworCisJcmV0dXJuIGluZm87Cit9CisKKy8q CisgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBsZW5ndGggYW5kIGhhc2h0YWJsZSBvZiBhIFJlbElu Zm9MaXN0LgorICovCitzdGF0aWMgdm9pZAorcmVzdG9yZV9yZWxpbmZvbGlzdChSZWxJbmZvTGlz dCAqcmVsaW5mb19saXN0LCBSZWxJbmZvTGlzdEluZm8gKmluZm8pCit7CisJcmVsaW5mb19saXN0 LT5pdGVtcyA9IGxpc3RfdHJ1bmNhdGUocmVsaW5mb19saXN0LT5pdGVtcywgaW5mby0+c2F2ZWxl bmd0aCk7CisJcmVsaW5mb19saXN0LT5oYXNoID0gaW5mby0+c2F2ZWhhc2g7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCBiNTUwZTcwN2E0Li4wMzc5NWEwZWM0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNp bmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5o IgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3By ZXAuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvdGxpc3QuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFy c2VfY2xhdXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgpAQCAtNDcsNiArNDgs NyBAQAogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jl d3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0 aWxzL3NlbGZ1bmNzLmgiCiAKIAogLyogQml0bWFzayBmbGFncyBmb3IgcHVzaGRvd25fc2FmZXR5 X2luZm8udW5zYWZlRmxhZ3MgKi8KQEAgLTc3LDYgKzc5LDcgQEAgdHlwZWRlZiBlbnVtIHB1c2hk b3duX3NhZmVfdHlwZQogCiAvKiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYnkgR1VDICovCiBi b29sCQllbmFibGVfZ2VxbyA9IGZhbHNlOwkvKiBqdXN0IGluIGNhc2UgR1VDIGRvZXNuJ3Qgc2V0 IGl0ICovCitib29sCQllbmFibGVfZWFnZXJfYWdncmVnYXRlID0gZmFsc2U7CiBpbnQJCQlnZXFv X3RocmVzaG9sZDsKIGludAkJCW1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemU7CiBpbnQJCQlt aW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9zaXplOwpAQCAtOTAsNiArOTMsNyBAQCBqb2luX3NlYXJj aF9ob29rX3R5cGUgam9pbl9zZWFyY2hfaG9vayA9IE5VTEw7CiAKIHN0YXRpYyB2b2lkIHNldF9i YXNlX3JlbF9jb25zaWRlcl9zdGFydHVwKFBsYW5uZXJJbmZvICpyb290KTsKIHN0YXRpYyB2b2lk IHNldF9iYXNlX3JlbF9zaXplcyhQbGFubmVySW5mbyAqcm9vdCk7CitzdGF0aWMgdm9pZCBzZXR1 cF9iYXNlX2dyb3VwZWRfcmVscyhQbGFubmVySW5mbyAqcm9vdCk7CiBzdGF0aWMgdm9pZCBzZXRf YmFzZV9yZWxfcGF0aGxpc3RzKFBsYW5uZXJJbmZvICpyb290KTsKIHN0YXRpYyB2b2lkIHNldF9y ZWxfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJIEluZGV4 IHJ0aSwgUmFuZ2VUYmxFbnRyeSAqcnRlKTsKQEAgLTExNCw2ICsxMTgsNyBAQCBzdGF0aWMgdm9p ZCBzZXRfYXBwZW5kX3JlbF9zaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJCQkJCQkJCUluZGV4IHJ0aSwgUmFuZ2VUYmxFbnRyeSAqcnRlKTsKIHN0YXRpYyB2b2lkIHNl dF9hcHBlbmRfcmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJCQkJCQkJCQlJbmRleCBydGksIFJhbmdlVGJsRW50cnkgKnJ0ZSk7CitzdGF0aWMgdm9pZCBz ZXRfZ3JvdXBlZF9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCk7CiBzdGF0aWMgdm9pZCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJIExpc3QgKmxpdmVfY2hpbGRyZWxz LAogCQkJCQkJCQkJCSBMaXN0ICphbGxfY2hpbGRfcGF0aGtleXMpOwpAQCAtMTgyLDYgKzE4Nywx MSBAQCBtYWtlX29uZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmpvaW5saXN0KQogCSAq LwogCXNldF9iYXNlX3JlbF9zaXplcyhyb290KTsKIAorCS8qCisJICogQnVpbGQgZ3JvdXBlZCBi YXNlIHJlbGF0aW9ucyBmb3IgZWFjaCBiYXNlIHJlbCBpZiBwb3NzaWJsZS4KKwkgKi8KKwlzZXR1 cF9iYXNlX2dyb3VwZWRfcmVscyhyb290KTsKKwogCS8qCiAJICogV2Ugc2hvdWxkIG5vdyBoYXZl IHNpemUgZXN0aW1hdGVzIGZvciBldmVyeSBhY3R1YWwgdGFibGUgaW52b2x2ZWQgaW4KIAkgKiB0 aGUgcXVlcnksIGFuZCB3ZSBhbHNvIGtub3cgd2hpY2ggaWYgYW55IGhhdmUgYmVlbiBkZWxldGVk IGZyb20gdGhlCkBAIC0zMjMsNiArMzMzLDUzIEBAIHNldF9iYXNlX3JlbF9zaXplcyhQbGFubmVy SW5mbyAqcm9vdCkKIAl9CiB9CiAKKy8qCisgKiBzZXR1cF9iYXNlX2dyb3VwZWRfcmVscworICoJ ICBGb3IgZWFjaCAicGxhaW4iIGJhc2UgcmVsYXRpb24sIGJ1aWxkIGEgZ3JvdXBlZCBiYXNlIHJl bGF0aW9uIGlmIGVhZ2VyCisgKgkgIGFnZ3JlZ2F0aW9uIGlzIHBvc3NpYmxlIGFuZCBpZiB0aGlz IHJlbGF0aW9uIGNhbiBwcm9kdWNlIGdyb3VwZWQgcGF0aHMuCisgKi8KK3N0YXRpYyB2b2lkCitz ZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhQbGFubmVySW5mbyAqcm9vdCkKK3sKKwlJbmRleAkJcnRp OworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gYWdncmVnYXRlIGV4cHJlc3Npb25zIG9yIGdy b3VwaW5nIGV4cHJlc3Npb25zLCBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uIGlzIG5vdCBwb3NzaWJs ZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdnX2NsYXVzZV9saXN0ID09IE5JTCB8fAorCQlyb290LT5n cm91cF9leHByX2xpc3QgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEVhZ2VyIGFnZ3Jl Z2F0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGJhc2UgcmVscyBp bgorCSAqIHRoZSBxdWVyeS4KKwkgKi8KKwlpZiAoYm1zX21lbWJlcnNoaXAocm9vdC0+YWxsX2Jh c2VyZWxzKSAhPSBCTVNfTVVMVElQTEUpCisJCXJldHVybjsKKworCWZvciAocnRpID0gMTsgcnRp IDwgcm9vdC0+c2ltcGxlX3JlbF9hcnJheV9zaXplOyBydGkrKykKKwl7CisJCVJlbE9wdEluZm8g KnJlbCA9IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbcnRpXTsKKwkJUmVsT3B0SW5mbyAqcmVsX2dy b3VwZWQ7CisJCVJlbEFnZ0luZm8gKmFnZ19pbmZvOworCisJCS8qIHRoZXJlIG1heSBiZSBlbXB0 eSBzbG90cyBjb3JyZXNwb25kaW5nIHRvIG5vbi1iYXNlcmVsIFJURXMgKi8KKwkJaWYgKHJlbCA9 PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJQXNzZXJ0KHJlbC0+cmVsaWQgPT0gcnRpKTsJLyog c2FuaXR5IGNoZWNrIG9uIGFycmF5ICovCisJCUFzc2VydChJU19TSU1QTEVfUkVMKHJlbCkpOyAv KiBzYW5pdHkgY2hlY2sgb24gcmVsICovCisKKwkJcmVsX2dyb3VwZWQgPSBidWlsZF9zaW1wbGVf Z3JvdXBlZF9yZWwocm9vdCwgcmVsLT5yZWxpZCwgJmFnZ19pbmZvKTsKKwkJaWYgKHJlbF9ncm91 cGVkKQorCQl7CisJCQkvKiBNYWtlIHRoZSBncm91cGVkIHJlbGF0aW9uIGF2YWlsYWJsZSBmb3Ig am9pbmluZy4gKi8KKwkJCWFkZF9ncm91cGVkX3JlbChyb290LCByZWxfZ3JvdXBlZCwgYWdnX2lu Zm8pOworCQl9CisJfQorfQorCiAvKgogICogc2V0X2Jhc2VfcmVsX3BhdGhsaXN0cwogICoJICBG aW5kcyBhbGwgcGF0aHMgYXZhaWxhYmxlIGZvciBzY2FubmluZyBlYWNoIGJhc2UtcmVsYXRpb24g ZW50cnkuCkBAIC01NTksNiArNjE2LDE1IEBAIHNldF9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkvKiBOb3cgZmluZCB0aGUgY2hlYXBlc3Qgb2YgdGhl IHBhdGhzIGZvciB0aGlzIHJlbCAqLwogCXNldF9jaGVhcGVzdChyZWwpOwogCisJLyoKKwkgKiBJ ZiBhIGdyb3VwZWQgcmVsYXRpb24gZm9yIHRoaXMgcmVsIGV4aXN0cywgYnVpbGQgcGFydGlhbCBh Z2dyZWdhdGlvbgorCSAqIHBhdGhzIGZvciBpdC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGlzIGNh biBvbmx5IGhhcHBlbiBhZnRlciB3ZSd2ZSBjYWxsZWQgc2V0X2NoZWFwZXN0KCkgZm9yCisJICog dGhpcyBiYXNlIHJlbCwgYmVjYXVzZSB3ZSBuZWVkIGl0cyBjaGVhcGVzdCBwYXRocy4KKwkgKi8K KwlzZXRfZ3JvdXBlZF9yZWxfcGF0aGxpc3Qocm9vdCwgcmVsKTsKKwogI2lmZGVmIE9QVElNSVpF Ul9ERUJVRwogCXBwcmludChyZWwpOwogI2VuZGlmCkBAIC0xMjk0LDYgKzEzNjAsMjggQEAgc2V0 X2FwcGVuZF9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAlhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChyb290LCByZWwsIGxpdmVfY2hpbGRyZWxzKTsKIH0K IAorLyoKKyAqIHNldF9ncm91cGVkX3JlbF9wYXRobGlzdAorICoJICBJZiBhIGdyb3VwZWQgcmVs YXRpb24gZm9yIHRoZSBnaXZlbiAncmVsJyBleGlzdHMsIGJ1aWxkIHBhcnRpYWwKKyAqCSAgYWdn cmVnYXRpb24gcGF0aHMgZm9yIGl0LgorICovCitzdGF0aWMgdm9pZAorc2V0X2dyb3VwZWRfcmVs X3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpCit7CisJUmVsT3B0 SW5mbyAqcmVsX2dyb3VwZWQ7CisJUmVsQWdnSW5mbyAqYWdnX2luZm87CisKKwkvKiBBZGQgcGF0 aHMgdG8gdGhlIGdyb3VwZWQgYmFzZSByZWxhdGlvbiBpZiBvbmUgZXhpc3RzLiAqLworCXJlbF9n cm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCByZWwtPnJlbGlkcywKKwkJCQkJCQkJICAg JmFnZ19pbmZvKTsKKwlpZiAocmVsX2dyb3VwZWQpCisJeworCQlnZW5lcmF0ZV9ncm91cGVkX3Bh dGhzKHJvb3QsIHJlbF9ncm91cGVkLCByZWwsCisJCQkJCQkJICAgYWdnX2luZm8pOworCQlzZXRf Y2hlYXBlc3QocmVsX2dyb3VwZWQpOworCX0KK30KKwogCiAvKgogICogYWRkX3BhdGhzX3RvX2Fw cGVuZF9yZWwKQEAgLTMzMDIsNiArMzM5MCwzMTEgQEAgZ2VuZXJhdGVfdXNlZnVsX2dhdGhlcl9w YXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBib29sIG92ZXJyaWRlX3IK IAl9CiB9CiAKKy8qCisgKiBnZW5lcmF0ZV9ncm91cGVkX3BhdGhzCisgKgkJR2VuZXJhdGUgcGF0 aHMgZm9yIGEgZ3JvdXBlZCByZWxhdGlvbiBieSBhZGRpbmcgc29ydGVkIGFuZCBoYXNoZWQKKyAq CQlwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBvZiBwYXRocyBvZiB0aGUgcGxhaW4g YmFzZSBvciBqb2luCisgKgkJcmVsYXRpb24uCisgKgorICogVGhlIGluZm9ybWF0aW9uIG5lZWRl ZCBhcmUgcHJvdmlkZWQgYnkgdGhlIFJlbEFnZ0luZm8gc3RydWN0dXJlLgorICovCit2b2lkCitn ZW5lcmF0ZV9ncm91cGVkX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWxf Z3JvdXBlZCwKKwkJCQkJICAgUmVsT3B0SW5mbyAqcmVsX3BsYWluLCBSZWxBZ2dJbmZvICphZ2df aW5mbykKK3sKKwlBZ2dDbGF1c2VDb3N0cyBhZ2dfY29zdHM7CisJYm9vbAkJY2FuX2hhc2g7CisJ Ym9vbAkJY2FuX3NvcnQ7CisJUGF0aAkgICAqY2hlYXBlc3RfdG90YWxfcGF0aCA9IE5VTEw7CisJ UGF0aAkgICAqY2hlYXBlc3RfcGFydGlhbF9wYXRoID0gTlVMTDsKKwlkb3VibGUJCWROdW1Hcm91 cHMgPSAwOworCWRvdWJsZQkJZE51bVBhcnRpYWxHcm91cHMgPSAwOworCisJaWYgKElTX0RVTU1Z X1JFTChyZWxfcGxhaW4pKQorCXsKKwkJbWFya19kdW1teV9yZWwocmVsX2dyb3VwZWQpOworCQly ZXR1cm47CisJfQorCisJTWVtU2V0KCZhZ2dfY29zdHMsIDAsIHNpemVvZihBZ2dDbGF1c2VDb3N0 cykpOworCWdldF9hZ2dfY2xhdXNlX2Nvc3RzKHJvb3QsIEFHR1NQTElUX0lOSVRJQUxfU0VSSUFM LCAmYWdnX2Nvc3RzKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBwb3NzaWJs ZSB0byBwZXJmb3JtIHNvcnQtYmFzZWQgaW1wbGVtZW50YXRpb25zCisJICogb2YgZ3JvdXBpbmcu CisJICovCisJY2FuX3NvcnQgPSBncm91cGluZ19pc19zb3J0YWJsZShhZ2dfaW5mby0+Z3JvdXBf Y2xhdXNlcyk7CisKKwkvKgorCSAqIERldGVybWluZSB3aGV0aGVyIHdlIHNob3VsZCBjb25zaWRl ciBoYXNoLWJhc2VkIGltcGxlbWVudGF0aW9ucyBvZgorCSAqIGdyb3VwaW5nLgorCSAqLworCUFz c2VydChyb290LT5udW1PcmRlcmVkQWdncyA9PSAwKTsKKwljYW5faGFzaCA9IChhZ2dfaW5mby0+ Z3JvdXBfY2xhdXNlcyAhPSBOSUwgJiYKKwkJCQlncm91cGluZ19pc19oYXNoYWJsZShhZ2dfaW5m by0+Z3JvdXBfY2xhdXNlcykpOworCisJLyoKKwkgKiBDb25zaWRlciB3aGV0aGVyIHdlIHNob3Vs ZCBnZW5lcmF0ZSBwYXJ0aWFsbHkgYWdncmVnYXRlZCBub24tcGFydGlhbAorCSAqIHBhdGhzLiAg V2UgY2FuIG9ubHkgZG8gdGhpcyBpZiB3ZSBoYXZlIGEgbm9uLXBhcnRpYWwgcGF0aC4KKwkgKi8K KwlpZiAocmVsX3BsYWluLT5wYXRobGlzdCAhPSBOSUwpCisJeworCQljaGVhcGVzdF90b3RhbF9w YXRoID0gcmVsX3BsYWluLT5jaGVhcGVzdF90b3RhbF9wYXRoOworCQlBc3NlcnQoY2hlYXBlc3Rf dG90YWxfcGF0aCAhPSBOVUxMKTsKKwl9CisKKwkvKgorCSAqIElmIHBhcmFsbGVsaXNtIGlzIHBv c3NpYmxlIGZvciByZWxfZ3JvdXBlZCwgdGhlbiB3ZSBzaG91bGQgY29uc2lkZXIKKwkgKiBnZW5l cmF0aW5nIHBhcnRpYWxseS1ncm91cGVkIHBhcnRpYWwgcGF0aHMuICBIb3dldmVyLCBpZiB0aGUg cGxhaW4gcmVsCisJICogaGFzIG5vIHBhcnRpYWwgcGF0aHMsIHRoZW4gd2UgY2FuJ3QuCisJICov CisJaWYgKHJlbF9ncm91cGVkLT5jb25zaWRlcl9wYXJhbGxlbCAmJiByZWxfcGxhaW4tPnBhcnRp YWxfcGF0aGxpc3QgIT0gTklMKQorCXsKKwkJY2hlYXBlc3RfcGFydGlhbF9wYXRoID0gbGluaXRp YWwocmVsX3BsYWluLT5wYXJ0aWFsX3BhdGhsaXN0KTsKKwkJQXNzZXJ0KGNoZWFwZXN0X3BhcnRp YWxfcGF0aCAhPSBOVUxMKTsKKwl9CisKKwkvKiBFc3RpbWF0ZSBudW1iZXIgb2YgcGFydGlhbCBn cm91cHMuICovCisJaWYgKGNoZWFwZXN0X3RvdGFsX3BhdGggIT0gTlVMTCkKKwkJZE51bUdyb3Vw cyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKKwkJCQkJCQkJCQkgYWdnX2luZm8tPmdyb3Vw X2V4cHJzLAorCQkJCQkJCQkJCSBjaGVhcGVzdF90b3RhbF9wYXRoLT5yb3dzLAorCQkJCQkJCQkJ CSBOVUxMLCBOVUxMKTsKKwlpZiAoY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwpCisJCWRO dW1QYXJ0aWFsR3JvdXBzID0gZXN0aW1hdGVfbnVtX2dyb3Vwcyhyb290LAorCQkJCQkJCQkJCQkJ YWdnX2luZm8tPmdyb3VwX2V4cHJzLAorCQkJCQkJCQkJCQkJY2hlYXBlc3RfcGFydGlhbF9wYXRo LT5yb3dzLAorCQkJCQkJCQkJCQkJTlVMTCwgTlVMTCk7CisKKwlpZiAoY2FuX3NvcnQgJiYgY2hl YXBlc3RfdG90YWxfcGF0aCAhPSBOVUxMKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJLyoK KwkJICogVXNlIGFueSBhdmFpbGFibGUgc3VpdGFibHktc29ydGVkIHBhdGggYXMgaW5wdXQsIGFu ZCBhbHNvIGNvbnNpZGVyCisJCSAqIHNvcnRpbmcgdGhlIGNoZWFwZXN0LXRvdGFsIHBhdGguCisJ CSAqLworCQlmb3JlYWNoKGxjLCByZWxfcGxhaW4tPnBhdGhsaXN0KQorCQl7CisJCQlQYXRoCSAg ICppbnB1dF9wYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsKKwkJCVBhdGgJICAgKnBhdGg7CisJ CQlib29sCQlpc19zb3J0ZWQ7CisJCQlpbnQJCQlwcmVzb3J0ZWRfa2V5czsKKworCQkJLyoKKwkJ CSAqIFNpbmNlIHRoZSBwYXRoIG9yaWdpbmF0ZXMgZnJvbSBhIG5vbi1ncm91cGVkIHJlbGF0aW9u IHRoYXQgaXMKKwkJCSAqIG5vdCBhd2FyZSBvZiBlYWdlciBhZ2dyZWdhdGlvbiwgd2UgbXVzdCBl bnN1cmUgdGhhdCBpdCBwcm92aWRlcworCQkJICogdGhlIGNvcnJlY3QgaW5wdXQgZm9yIHBhcnRp YWwgYWdncmVnYXRpb24uCisJCQkgKi8KKwkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfcHJvamVj dGlvbl9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkgICByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJ CSAgIGlucHV0X3BhdGgsCisJCQkJCQkJCQkJCQkgICBhZ2dfaW5mby0+YWdnX2lucHV0KTsKKwor CQkJaXNfc29ydGVkID0gcGF0aGtleXNfY291bnRfY29udGFpbmVkX2luKGFnZ19pbmZvLT5ncm91 cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQlwYXRoLT5wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkm cHJlc29ydGVkX2tleXMpOworCQkJaWYgKCFpc19zb3J0ZWQpCisJCQl7CisJCQkJLyoKKwkJCQkg KiBUcnkgYXQgbGVhc3Qgc29ydGluZyB0aGUgY2hlYXBlc3QgcGF0aCBhbmQgYWxzbyB0cnkKKwkJ CQkgKiBpbmNyZW1lbnRhbGx5IHNvcnRpbmcgYW55IHBhdGggd2hpY2ggaXMgcGFydGlhbGx5IHNv cnRlZAorCQkJCSAqIGFscmVhZHkgKG5vIG5lZWQgdG8gZGVhbCB3aXRoIHBhdGhzIHdoaWNoIGhh dmUgcHJlc29ydGVkCisJCQkJICoga2V5cyB3aGVuIGluY3JlbWVudGFsIHNvcnQgaXMgZGlzYWJs ZWQgdW5sZXNzIGl0J3MgdGhlCisJCQkJICogY2hlYXBlc3QgaW5wdXQgcGF0aCkuCisJCQkJICov CisJCQkJaWYgKGlucHV0X3BhdGggIT0gY2hlYXBlc3RfdG90YWxfcGF0aCAmJgorCQkJCQkocHJl c29ydGVkX2tleXMgPT0gMCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpKQorCQkJCQljb250 aW51ZTsKKworCQkJCS8qCisJCQkJICogV2UndmUgbm8gbmVlZCB0byBjb25zaWRlciBib3RoIGEg c29ydCBhbmQgaW5jcmVtZW50YWwgc29ydC4KKwkJCQkgKiBXZSdsbCBqdXN0IGRvIGEgc29ydCBp ZiB0aGVyZSBhcmUgbm8gcHJlc29ydGVkIGtleXMgYW5kIGFuCisJCQkJICogaW5jcmVtZW50YWwg c29ydCB3aGVuIHRoZXJlIGFyZSBwcmVzb3J0ZWQga2V5cy4KKwkJCQkgKi8KKwkJCQlpZiAocHJl c29ydGVkX2tleXMgPT0gMCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpCisJCQkJCXBhdGgg PSAoUGF0aCAqKSBjcmVhdGVfc29ydF9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJIHJlbF9ncm91 cGVkLAorCQkJCQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJCQkJCQkJCSBhZ2dfaW5mby0+Z3JvdXBf cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJIC0xLjApOworCQkJCWVsc2UKKwkJCQkJcGF0aCA9IChQ YXRoICopIGNyZWF0ZV9pbmNyZW1lbnRhbF9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCQkJ CQkgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJCQkJ IGFnZ19pbmZvLT5ncm91cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJCQkgcHJlc29ydGVkX2tl eXMsCisJCQkJCQkJCQkJCQkJCQkJIC0xLjApOworCQkJfQorCisJCQkvKgorCQkJICogcXVhbCBp cyBOSUwgYmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVzZSBjYW5ub3QgYmUgZXZhbHVhdGVkIHVudGls CisJCQkgKiB0aGUgZmluYWwgdmFsdWUgb2YgdGhlIGFnZ3JlZ2F0ZSBpcyBrbm93bi4KKwkJCSAq LworCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJCQkJCQly ZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJcGF0aCwKKwkJCQkJCQkJCQkJYWdnX2luZm8tPnRhcmdl dCwKKwkJCQkJCQkJCQkJQUdHX1NPUlRFRCwKKwkJCQkJCQkJCQkJQUdHU1BMSVRfSU5JVElBTF9T RVJJQUwsCisJCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCQlO SUwsCisJCQkJCQkJCQkJCSZhZ2dfY29zdHMsCisJCQkJCQkJCQkJCWROdW1Hcm91cHMpOworCisJ CQlhZGRfcGF0aChyZWxfZ3JvdXBlZCwgcGF0aCk7CisJCX0KKwl9CisKKwlpZiAoY2FuX3NvcnQg JiYgY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwpCisJeworCQlMaXN0Q2VsbCAgICpsYzsK KworCQkvKiBTaW1pbGFyIHRvIGFib3ZlIGxvZ2ljLCBidXQgZm9yIHBhcnRpYWwgcGF0aHMuICov CisJCWZvcmVhY2gobGMsIHJlbF9wbGFpbi0+cGFydGlhbF9wYXRobGlzdCkKKwkJeworCQkJUGF0 aAkgICAqaW5wdXRfcGF0aCA9IChQYXRoICopIGxmaXJzdChsYyk7CisJCQlQYXRoCSAgICpwYXRo OworCQkJYm9vbAkJaXNfc29ydGVkOworCQkJaW50CQkJcHJlc29ydGVkX2tleXM7CisKKwkJCS8q CisJCQkgKiBTaW5jZSB0aGUgcGF0aCBvcmlnaW5hdGVzIGZyb20gYSBub24tZ3JvdXBlZCByZWxh dGlvbiB0aGF0IGlzCisJCQkgKiBub3QgYXdhcmUgb2YgZWFnZXIgYWdncmVnYXRpb24sIHdlIG11 c3QgZW5zdXJlIHRoYXQgaXQgcHJvdmlkZXMKKwkJCSAqIHRoZSBjb3JyZWN0IGlucHV0IGZvciBw YXJ0aWFsIGFnZ3JlZ2F0aW9uLgorCQkJICovCisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3By b2plY3Rpb25fcGF0aChyb290LAorCQkJCQkJCQkJCQkJICAgcmVsX2dyb3VwZWQsCisJCQkJCQkJ CQkJCQkgICBpbnB1dF9wYXRoLAorCQkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19pbnB1dCk7 CisKKwkJCWlzX3NvcnRlZCA9IHBhdGhrZXlzX2NvdW50X2NvbnRhaW5lZF9pbihhZ2dfaW5mby0+ Z3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJcGF0aC0+cGF0aGtleXMsCisJCQkJCQkJCQkJ CQkJJnByZXNvcnRlZF9rZXlzKTsKKworCQkJaWYgKCFpc19zb3J0ZWQpCisJCQl7CisJCQkJLyoK KwkJCQkgKiBUcnkgYXQgbGVhc3Qgc29ydGluZyB0aGUgY2hlYXBlc3QgcGF0aCBhbmQgYWxzbyB0 cnkKKwkJCQkgKiBpbmNyZW1lbnRhbGx5IHNvcnRpbmcgYW55IHBhdGggd2hpY2ggaXMgcGFydGlh bGx5IHNvcnRlZAorCQkJCSAqIGFscmVhZHkgKG5vIG5lZWQgdG8gZGVhbCB3aXRoIHBhdGhzIHdo aWNoIGhhdmUgcHJlc29ydGVkCisJCQkJICoga2V5cyB3aGVuIGluY3JlbWVudGFsIHNvcnQgaXMg ZGlzYWJsZWQgdW5sZXNzIGl0J3MgdGhlCisJCQkJICogY2hlYXBlc3QgaW5wdXQgcGF0aCkuCisJ CQkJICovCisJCQkJaWYgKGlucHV0X3BhdGggIT0gY2hlYXBlc3RfcGFydGlhbF9wYXRoICYmCisJ CQkJCShwcmVzb3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkpCisJ CQkJCWNvbnRpbnVlOworCisJCQkJLyoKKwkJCQkgKiBXZSd2ZSBubyBuZWVkIHRvIGNvbnNpZGVy IGJvdGggYSBzb3J0IGFuZCBpbmNyZW1lbnRhbCBzb3J0LgorCQkJCSAqIFdlJ2xsIGp1c3QgZG8g YSBzb3J0IGlmIHRoZXJlIGFyZSBubyBwcmVzb3J0ZWQga2V5cyBhbmQgYW4KKwkJCQkgKiBpbmNy ZW1lbnRhbCBzb3J0IHdoZW4gdGhlcmUgYXJlIHByZXNvcnRlZCBrZXlzLgorCQkJCSAqLworCQkJ CWlmIChwcmVzb3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkKKwkJ CQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCQkg cmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJIGFnZ19pbmZv LT5ncm91cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQkJZWxzZQorCQkJCQlw YXRoID0gKFBhdGggKikgY3JlYXRlX2luY3JlbWVudGFsX3NvcnRfcGF0aChyb290LAorCQkJCQkJ CQkJCQkJCQkJCSByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJ CQkJCQkJCQkgYWdnX2luZm8tPmdyb3VwX3BhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJCSBwcmVz b3J0ZWRfa2V5cywKKwkJCQkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQl9CisKKwkJCS8qCisJCQkg KiBxdWFsIGlzIE5JTCBiZWNhdXNlIHRoZSBIQVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0 ZWQgdW50aWwKKwkJCSAqIHRoZSBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3du LgorCQkJICovCisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJ CQkJCQkJCXJlbF9ncm91cGVkLAorCQkJCQkJCQkJCQlwYXRoLAorCQkJCQkJCQkJCQlhZ2dfaW5m by0+dGFyZ2V0LAorCQkJCQkJCQkJCQlBR0dfU09SVEVELAorCQkJCQkJCQkJCQlBR0dTUExJVF9J TklUSUFMX1NFUklBTCwKKwkJCQkJCQkJCQkJYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJ CQkJCQkJCU5JTCwKKwkJCQkJCQkJCQkJJmFnZ19jb3N0cywKKwkJCQkJCQkJCQkJZE51bVBhcnRp YWxHcm91cHMpOworCisJCQlhZGRfcGFydGlhbF9wYXRoKHJlbF9ncm91cGVkLCBwYXRoKTsKKwkJ fQorCX0KKworCS8qCisJICogQWRkIGEgcGFydGlhbGx5LWdyb3VwZWQgSGFzaEFnZyBQYXRoIHdo ZXJlIHBvc3NpYmxlCisJICovCisJaWYgKGNhbl9oYXNoICYmIGNoZWFwZXN0X3RvdGFsX3BhdGgg IT0gTlVMTCkKKwl7CisJCVBhdGgJICAgKnBhdGg7CisKKwkJLyoKKwkJICogU2luY2UgdGhlIHBh dGggb3JpZ2luYXRlcyBmcm9tIGEgbm9uLWdyb3VwZWQgcmVsYXRpb24gdGhhdCBpcyBub3QKKwkJ ICogYXdhcmUgb2YgZWFnZXIgYWdncmVnYXRpb24sIHdlIG11c3QgZW5zdXJlIHRoYXQgaXQgcHJv dmlkZXMgdGhlCisJCSAqIGNvcnJlY3QgaW5wdXQgZm9yIHBhcnRpYWwgYWdncmVnYXRpb24uCisJ CSAqLworCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290LAorCQkJ CQkJCQkJCQkgICByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJICAgY2hlYXBlc3RfdG90YWxfcGF0 aCwKKwkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19pbnB1dCk7CisKKwkJLyoKKwkJICogcXVh bCBpcyBOSUwgYmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVzZSBjYW5ub3QgYmUgZXZhbHVhdGVkIHVu dGlsIHRoZQorCQkgKiBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3duLgorCQkg Ki8KKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJCQkJCXJl bF9ncm91cGVkLAorCQkJCQkJCQkJCXBhdGgsCisJCQkJCQkJCQkJYWdnX2luZm8tPnRhcmdldCwK KwkJCQkJCQkJCQlBR0dfSEFTSEVELAorCQkJCQkJCQkJCUFHR1NQTElUX0lOSVRJQUxfU0VSSUFM LAorCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCU5JTCwKKwkJ CQkJCQkJCQkmYWdnX2Nvc3RzLAorCQkJCQkJCQkJCWROdW1Hcm91cHMpOworCisJCWFkZF9wYXRo KHJlbF9ncm91cGVkLCBwYXRoKTsKKwl9CisKKwkvKgorCSAqIE5vdyBhZGQgYSBwYXJ0aWFsbHkt Z3JvdXBlZCBIYXNoQWdnIHBhcnRpYWwgUGF0aCB3aGVyZSBwb3NzaWJsZQorCSAqLworCWlmIChj YW5faGFzaCAmJiBjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCkKKwl7CisJCVBhdGgJICAg KnBhdGg7CisKKwkJLyoKKwkJICogU2luY2UgdGhlIHBhdGggb3JpZ2luYXRlcyBmcm9tIGEgbm9u LWdyb3VwZWQgcmVsYXRpb24gdGhhdCBpcyBub3QKKwkJICogYXdhcmUgb2YgZWFnZXIgYWdncmVn YXRpb24sIHdlIG11c3QgZW5zdXJlIHRoYXQgaXQgcHJvdmlkZXMgdGhlCisJCSAqIGNvcnJlY3Qg aW5wdXQgZm9yIHBhcnRpYWwgYWdncmVnYXRpb24uCisJCSAqLworCQlwYXRoID0gKFBhdGggKikg Y3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290LAorCQkJCQkJCQkJCQkgICByZWxfZ3JvdXBlZCwK KwkJCQkJCQkJCQkJICAgY2hlYXBlc3RfcGFydGlhbF9wYXRoLAorCQkJCQkJCQkJCQkgICBhZ2df aW5mby0+YWdnX2lucHV0KTsKKworCQkvKgorCQkgKiBxdWFsIGlzIE5JTCBiZWNhdXNlIHRoZSBI QVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0ZWQgdW50aWwgdGhlCisJCSAqIGZpbmFsIHZh bHVlIG9mIHRoZSBhZ2dyZWdhdGUgaXMga25vd24uCisJCSAqLworCQlwYXRoID0gKFBhdGggKikg Y3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJCQkJCQkJcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJ cGF0aCwKKwkJCQkJCQkJCQlhZ2dfaW5mby0+dGFyZ2V0LAorCQkJCQkJCQkJCUFHR19IQVNIRUQs CisJCQkJCQkJCQkJQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwsCisJCQkJCQkJCQkJYWdnX2luZm8t Pmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJTklMLAorCQkJCQkJCQkJCSZhZ2dfY29zdHMsCisJ CQkJCQkJCQkJZE51bVBhcnRpYWxHcm91cHMpOworCisJCWFkZF9wYXJ0aWFsX3BhdGgocmVsX2dy b3VwZWQsIHBhdGgpOworCX0KK30KKwogLyoKICAqIG1ha2VfcmVsX2Zyb21fam9pbmxpc3QKICAq CSAgQnVpbGQgYWNjZXNzIHBhdGhzIHVzaW5nIGEgImpvaW5saXN0IiB0byBndWlkZSB0aGUgam9p biBwYXRoIHNlYXJjaC4KQEAgLTM0NjIsNiArMzg1NSwxMCBAQCBzdGFuZGFyZF9qb2luX3NlYXJj aChQbGFubmVySW5mbyAqcm9vdCwgaW50IGxldmVsc19uZWVkZWQsIExpc3QgKmluaXRpYWxfcmVs cykKIAkJICoKIAkJICogQWZ0ZXIgdGhhdCwgd2UncmUgZG9uZSBjcmVhdGluZyBwYXRocyBmb3Ig dGhlIGpvaW5yZWwsIHNvIHJ1bgogCQkgKiBzZXRfY2hlYXBlc3QoKS4KKwkJICoKKwkJICogSW4g YWRkaXRpb24sIHdlIGFsc28gcnVuIGdlbmVyYXRlX2dyb3VwZWRfcGF0aHMoKSBmb3IgdGhlIGdy b3VwZWQKKwkJICogcmVsYXRpb24gb2YgZWFjaCBqdXN0LXByb2Nlc3NlZCBqb2lucmVsLCBhbmQg cnVuIHNldF9jaGVhcGVzdCgpIGZvcgorCQkgKiB0aGUgZ3JvdXBlZCByZWxhdGlvbiBhZnRlcndh cmRzLgogCQkgKi8KIAkJZm9yZWFjaChsYywgcm9vdC0+am9pbl9yZWxfbGV2ZWxbbGV2XSkKIAkJ ewpAQCAtMzQ4Miw2ICszODc5LDI3IEBAIHN0YW5kYXJkX2pvaW5fc2VhcmNoKFBsYW5uZXJJbmZv ICpyb290LCBpbnQgbGV2ZWxzX25lZWRlZCwgTGlzdCAqaW5pdGlhbF9yZWxzKQogCQkJLyogRmlu ZCBhbmQgc2F2ZSB0aGUgY2hlYXBlc3QgcGF0aHMgZm9yIHRoaXMgcmVsICovCiAJCQlzZXRfY2hl YXBlc3QocmVsKTsKIAorCQkJLyoKKwkJCSAqIEV4Y2VwdCBmb3IgdGhlIHRvcG1vc3Qgc2Nhbi9q b2luIHJlbCwgY29uc2lkZXIgZ2VuZXJhdGluZworCQkJICogcGFydGlhbCBhZ2dyZWdhdGlvbiBw YXRocyBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24gb24gdG9wIG9mCisJCQkgKiB0aGUgcGF0aHMg b2YgdGhpcyByZWwuICBBZnRlciB0aGF0LCB3ZSdyZSBkb25lIGNyZWF0aW5nIHBhdGhzCisJCQkg KiBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24sIHNvIHJ1biBzZXRfY2hlYXBlc3QoKS4KKwkJCSAq LworCQkJaWYgKCFibXNfZXF1YWwocmVsLT5yZWxpZHMsIHJvb3QtPmFsbF9xdWVyeV9yZWxzKSkK KwkJCXsKKwkJCQlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKwkJCQlSZWxBZ2dJbmZvICphZ2df aW5mbzsKKworCQkJCXJlbF9ncm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCByZWwtPnJl bGlkcywKKwkJCQkJCQkJCQkJICAgJmFnZ19pbmZvKTsKKwkJCQlpZiAocmVsX2dyb3VwZWQpCisJ CQkJeworCQkJCQlnZW5lcmF0ZV9ncm91cGVkX3BhdGhzKHJvb3QsIHJlbF9ncm91cGVkLCByZWws CisJCQkJCQkJCQkJICAgYWdnX2luZm8pOworCQkJCQlzZXRfY2hlYXBlc3QocmVsX2dyb3VwZWQp OworCQkJCX0KKwkJCX0KKwogI2lmZGVmIE9QVElNSVpFUl9ERUJVRwogCQkJcHByaW50KHJlbCk7 CiAjZW5kaWYKQEAgLTQzNTAsNiArNDc2OCwyOSBAQCBnZW5lcmF0ZV9wYXJ0aXRpb253aXNlX2pv aW5fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKIAkJaWYgKElTX0RV TU1ZX1JFTChjaGlsZF9yZWwpKQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogRXhjZXB0IGZv ciB0aGUgdG9wbW9zdCBzY2FuL2pvaW4gcmVsLCBjb25zaWRlciBnZW5lcmF0aW5nIHBhcnRpYWwK KwkJICogYWdncmVnYXRpb24gcGF0aHMgZm9yIHRoZSBncm91cGVkIHJlbGF0aW9uIG9uIHRvcCBv ZiB0aGUgcGF0aHMgb2YKKwkJICogdGhpcyBwYXJ0aXRpb25lZCBjaGlsZC1qb2luLiAgQWZ0ZXIg dGhhdCwgd2UncmUgZG9uZSBjcmVhdGluZyBwYXRocworCQkgKiBmb3IgdGhlIGdyb3VwZWQgcmVs YXRpb24sIHNvIHJ1biBzZXRfY2hlYXBlc3QoKS4KKwkJICovCisJCWlmICghYm1zX2VxdWFsKElT X09USEVSX1JFTChyZWwpID8KKwkJCQkJICAgcmVsLT50b3BfcGFyZW50X3JlbGlkcyA6IHJlbC0+ cmVsaWRzLAorCQkJCQkgICByb290LT5hbGxfcXVlcnlfcmVscykpCisJCXsKKwkJCVJlbE9wdElu Zm8gKnJlbF9ncm91cGVkOworCQkJUmVsQWdnSW5mbyAqYWdnX2luZm87CisKKwkJCXJlbF9ncm91 cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCBjaGlsZF9yZWwtPnJlbGlkcywKKwkJCQkJCQkJ CQkgICAmYWdnX2luZm8pOworCQkJaWYgKHJlbF9ncm91cGVkKQorCQkJeworCQkJCWdlbmVyYXRl X2dyb3VwZWRfcGF0aHMocm9vdCwgcmVsX2dyb3VwZWQsIGNoaWxkX3JlbCwKKwkJCQkJCQkJCSAg IGFnZ19pbmZvKTsKKwkJCQlzZXRfY2hlYXBlc3QocmVsX2dyb3VwZWQpOworCQkJfQorCQl9CisK ICNpZmRlZiBPUFRJTUlaRVJfREVCVUcKIAkJcHByaW50KGNoaWxkX3JlbCk7CiAjZW5kaWYKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCmluZGV4IDdkYjVlMzBlZWYuLmUxYTJkM2I0 MTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwpAQCAtMTYsMTEgKzE2LDEz IEBACiAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvYXBwZW5k aW5mby5oIgorI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L2pvaW5pbmZvLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCiAjaW5jbHVkZSAi b3B0aW1pemVyL3BhdGhzLmgiCiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRib3VuZHMuaCIK ICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3NlbGZ1bmNzLmgi CiAKIAogc3RhdGljIHZvaWQgbWFrZV9yZWxzX2J5X2NsYXVzZV9qb2lucyhQbGFubmVySW5mbyAq cm9vdCwKQEAgLTM1LDYgKzM3LDkgQEAgc3RhdGljIGJvb2wgaGFzX2xlZ2FsX2pvaW5jbGF1c2Uo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCk7CiBzdGF0aWMgYm9vbCByZXN0cmlj dGlvbl9pc19jb25zdGFudF9mYWxzZShMaXN0ICpyZXN0cmljdGxpc3QsCiAJCQkJCQkJCQkJICBS ZWxPcHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQkJCSAgYm9vbCBvbmx5X3B1c2hlZF9kb3duKTsK K3N0YXRpYyB2b2lkIG1ha2VfZ3JvdXBlZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsMSwKKwkJCQkJCQkJICBSZWxPcHRJbmZvICpyZWwyLCBSZWxPcHRJbmZvICpq b2lucmVsLAorCQkJCQkJCQkgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBMaXN0ICpyZXN0cmlj dGxpc3QpOwogc3RhdGljIHZvaWQgcG9wdWxhdGVfam9pbnJlbF93aXRoX3BhdGhzKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLAogCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbDIs IFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJCQkJCQkJU3BlY2lhbEpvaW5JbmZvICpzamluZm8s IExpc3QgKnJlc3RyaWN0bGlzdCk7CkBAIC03NzEsNiArNzc2LDEwIEBAIG1ha2Vfam9pbl9yZWwo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIpCiAJ CXJldHVybiBqb2lucmVsOwogCX0KIAorCS8qIEJ1aWxkIGEgZ3JvdXBlZCBqb2luIHJlbGF0aW9u IGZvciAnam9pbnJlbCcgaWYgcG9zc2libGUuICovCisJbWFrZV9ncm91cGVkX2pvaW5fcmVsKHJv b3QsIHJlbDEsIHJlbDIsIGpvaW5yZWwsIHNqaW5mbywKKwkJCQkJCSAgcmVzdHJpY3RsaXN0KTsK KwogCS8qIEFkZCBwYXRocyB0byB0aGUgam9pbiByZWxhdGlvbi4gKi8KIAlwb3B1bGF0ZV9qb2lu cmVsX3dpdGhfcGF0aHMocm9vdCwgcmVsMSwgcmVsMiwgam9pbnJlbCwgc2ppbmZvLAogCQkJCQkJ CQlyZXN0cmljdGxpc3QpOwpAQCAtODgyLDYgKzg5MSwxMjcgQEAgYWRkX291dGVyX2pvaW5zX3Rv X3JlbGlkcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIGlucHV0X3JlbGlkcywKIAlyZXR1cm4g aW5wdXRfcmVsaWRzOwogfQogCisvKgorICogbWFrZV9ncm91cGVkX2pvaW5fcmVsCisgKgkgIEJ1 aWxkIGEgZ3JvdXBlZCBqb2luIHJlbGF0aW9uIG91dCBvZiAnam9pbnJlbCcgaWYgZWFnZXIgYWdn cmVnYXRpb24gaXMKKyAqCSAgcG9zc2libGUgYW5kIHRoZSAnam9pbnJlbCcgY2FuIHByb2R1Y2Ug Z3JvdXBlZCBwYXRocy4KKyAqCisgKiBXZSBhbHNvIGdlbmVyYXRlIHBhcnRpYWwgYWdncmVnYXRp b24gcGF0aHMgZm9yIHRoZSBncm91cGVkIHJlbGF0aW9uIGJ5CisgKiBqb2luaW5nIHRoZSBncm91 cGVkIHBhdGhzIG9mICdyZWwxJyB0byB0aGUgcGxhaW4gcGF0aHMgb2YgJ3JlbDInLCBvciBieQor ICogam9pbmluZyB0aGUgZ3JvdXBlZCBwYXRocyBvZiAncmVsMicgdG8gdGhlIHBsYWluIHBhdGhz IG9mICdyZWwxJy4KKyAqLworc3RhdGljIHZvaWQKK21ha2VfZ3JvdXBlZF9qb2luX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwKKwkJCQkJICBSZWxPcHRJbmZvICpyZWwy LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBM aXN0ICpyZXN0cmljdGxpc3QpCit7CisJUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisJUmVsQWdn SW5mbyAqYWdnX2luZm8gPSBOVUxMOworCVJlbE9wdEluZm8gKnJlbDFfZ3JvdXBlZDsKKwlSZWxP cHRJbmZvICpyZWwyX2dyb3VwZWQ7CisJYm9vbAkJcmVsMV9lbXB0eTsKKwlib29sCQlyZWwyX2Vt cHR5OworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gYWdncmVnYXRlIGV4cHJlc3Npb25zIG9y IGdyb3VwaW5nIGV4cHJlc3Npb25zLCBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uIGlzIG5vdCBwb3Nz aWJsZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdnX2NsYXVzZV9saXN0ID09IE5JTCB8fAorCQlyb290 LT5ncm91cF9leHByX2xpc3QgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFNlZSBpZiB3 ZSBhbHJlYWR5IGhhdmUgYSBncm91cGVkIGpvaW5yZWwgZm9yIHRoaXMgam9pbnJlbC4KKwkgKi8K KwlyZWxfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9yZWwocm9vdCwgam9pbnJlbC0+cmVsaWRzLCAm YWdnX2luZm8pOworCisJLyoKKwkgKiBDb25zdHJ1Y3QgYSBuZXcgUmVsT3B0SW5mbyBmb3IgdGhl IGdyb3VwZWQgam9pbiByZWxhdGlvbiBpZiB0aGVyZSBpcyBubworCSAqIGV4aXN0aW5nIG9uZS4K KwkgKi8KKwlpZiAocmVsX2dyb3VwZWQgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFByZXBhcmUg dGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjcmVhdGUgZ3JvdXBlZCBwYXRocyBmb3IgdGhpcwor CQkgKiBqb2luIHJlbGF0aW9uLgorCQkgKi8KKwkJYWdnX2luZm8gPSBjcmVhdGVfcmVsX2FnZ19p bmZvKHJvb3QsIGpvaW5yZWwpOworCQlpZiAoYWdnX2luZm8gPT0gTlVMTCkKKwkJCXJldHVybjsK KworCQkvKiBidWlsZCBhIGdyb3VwZWQgcmVsYXRpb24gb3V0IG9mIHRoZSBwbGFpbiByZWxhdGlv biAqLworCQlyZWxfZ3JvdXBlZCA9IGJ1aWxkX2dyb3VwZWRfcmVsKHJvb3QsIGpvaW5yZWwpOwor CQlyZWxfZ3JvdXBlZC0+cmVsdGFyZ2V0ID0gYWdnX2luZm8tPnRhcmdldDsKKwkJcmVsX2dyb3Vw ZWQtPnJvd3MgPSBhZ2dfaW5mby0+Z3JvdXBlZF9yb3dzOworCisJCS8qCisJCSAqIE1ha2UgdGhl IGdyb3VwZWQgcmVsYXRpb24gYXZhaWxhYmxlIGZvciBmdXJ0aGVyIGpvaW5pbmcgb3IgZm9yCisJ CSAqIGFjdGluZyBhcyB0aGUgdXBwZXIgcmVsIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHBh cnRpYWwKKwkJICogYWdncmVnYXRpb24uCisJCSAqLworCQlhZGRfZ3JvdXBlZF9yZWwocm9vdCwg cmVsX2dyb3VwZWQsIGFnZ19pbmZvKTsKKwl9CisKKwlBc3NlcnQoYWdnX2luZm8gIT0gTlVMTCk7 CisKKwkvKiBXZSBtYXkgaGF2ZSBhbHJlYWR5IHByb3ZlbiB0aGlzIGdyb3VwZWQgam9pbiByZWxh dGlvbiB0byBiZSBkdW1teS4gKi8KKwlpZiAoSVNfRFVNTVlfUkVMKHJlbF9ncm91cGVkKSkKKwkJ cmV0dXJuOworCisJLyogUmV0cmlldmUgdGhlIGdyb3VwZWQgcmVsYXRpb25zIGZvciB0aGUgdHdv IGlucHV0IHJlbHMgKi8KKwlyZWwxX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3QsIHJl bDEtPnJlbGlkcywgTlVMTCk7CisJcmVsMl9ncm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290 LCByZWwyLT5yZWxpZHMsIE5VTEwpOworCisJcmVsMV9lbXB0eSA9IChyZWwxX2dyb3VwZWQgPT0g TlVMTCB8fCBJU19EVU1NWV9SRUwocmVsMV9ncm91cGVkKSk7CisJcmVsMl9lbXB0eSA9IChyZWwy X2dyb3VwZWQgPT0gTlVMTCB8fCBJU19EVU1NWV9SRUwocmVsMl9ncm91cGVkKSk7CisKKwkvKiBO b3RoaW5nIHRvIGRvIGlmIHRoZXJlJ3Mgbm8gZ3JvdXBlZCByZWxhdGlvbi4gKi8KKwlpZiAocmVs MV9lbXB0eSAmJiByZWwyX2VtcHR5KQorCQlyZXR1cm47CisKKwkvKgorCSAqIEpvaW5pbmcgdHdv IGdyb3VwZWQgcmVsYXRpb25zIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLiAgR3JvdXBpbmcg b25lCisJICogc2lkZSB3b3VsZCBhbHRlciB0aGUgb2NjdXJyZW5jZSBvZiB0aGUgb3RoZXIgc2lk ZSdzIGFnZ3JlZ2F0ZSB0cmFuc2llbnQKKwkgKiBzdGF0ZXMgaW4gdGhlIGZpbmFsIGFnZ3JlZ2F0 aW9uIGlucHV0LiAgV2hpbGUgdGhpcyBpc3N1ZSBjb3VsZCBiZQorCSAqIGFkZHJlc3NlZCBieSBh ZGp1c3RpbmcgdGhlIHRyYW5zaWVudCBzdGF0ZXMsIGl0IGlzIG5vdCBkZWVtZWQKKwkgKiB3b3J0 aHdoaWxlIGZvciBub3cuCisJICovCisJaWYgKCFyZWwxX2VtcHR5ICYmICFyZWwyX2VtcHR5KQor CQlyZXR1cm47CisKKwkvKiBHZW5lcmF0ZSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciB0 aGUgZ3JvdXBlZCByZWxhdGlvbiAqLworCWlmICghcmVsMV9lbXB0eSkKKwl7CisJCXNldF9qb2lu cmVsX3NpemVfZXN0aW1hdGVzKHJvb3QsIHJlbF9ncm91cGVkLCByZWwxX2dyb3VwZWQsIHJlbDIs CisJCQkJCQkJCSAgIHNqaW5mbywgcmVzdHJpY3RsaXN0KTsKKwkJcG9wdWxhdGVfam9pbnJlbF93 aXRoX3BhdGhzKHJvb3QsIHJlbDFfZ3JvdXBlZCwgcmVsMiwgcmVsX2dyb3VwZWQsCisJCQkJCQkJ CQlzamluZm8sIHJlc3RyaWN0bGlzdCk7CisKKwkJLyoKKwkJICogSXQgc2hvdWxkbid0IGhhcHBl biB0aGF0IHdlIGhhdmUgbWFya2VkIHJlbDFfZ3JvdXBlZCBhcyBkdW1teSBpbgorCQkgKiBwb3B1 bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMgZHVlIHRvIHByb3ZhYmx5IGNvbnN0YW50LWZhbHNlIGpv aW4KKwkJICogcmVzdHJpY3Rpb25zLCBoZW5jZSB3ZSB3b3VsZG4ndCBlbmQgdXAgd2l0aCBhIHBs YW4gdGhhdCBoYXMgQWdncmVmCisJCSAqIGluIG5vbi1BZ2cgcGxhbiBub2RlLgorCQkgKi8KKwkJ QXNzZXJ0KCFJU19EVU1NWV9SRUwocmVsMV9ncm91cGVkKSk7CisJfQorCWVsc2UgaWYgKCFyZWwy X2VtcHR5KQorCXsKKwkJc2V0X2pvaW5yZWxfc2l6ZV9lc3RpbWF0ZXMocm9vdCwgcmVsX2dyb3Vw ZWQsIHJlbDEsIHJlbDJfZ3JvdXBlZCwKKwkJCQkJCQkJICAgc2ppbmZvLCByZXN0cmljdGxpc3Qp OworCQlwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMocm9vdCwgcmVsMSwgcmVsMl9ncm91cGVk LCByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCXNqaW5mbywgcmVzdHJpY3RsaXN0KTsKKworCQkvKgor CQkgKiBJdCBzaG91bGRuJ3QgaGFwcGVuIHRoYXQgd2UgaGF2ZSBtYXJrZWQgcmVsMl9ncm91cGVk IGFzIGR1bW15IGluCisJCSAqIHBvcHVsYXRlX2pvaW5yZWxfd2l0aF9wYXRocyBkdWUgdG8gcHJv dmFibHkgY29uc3RhbnQtZmFsc2Ugam9pbgorCQkgKiByZXN0cmljdGlvbnMsIGhlbmNlIHdlIHdv dWxkbid0IGVuZCB1cCB3aXRoIGEgcGxhbiB0aGF0IGhhcyBBZ2dyZWYKKwkJICogaW4gbm9uLUFn ZyBwbGFuIG5vZGUuCisJCSAqLworCQlBc3NlcnQoIUlTX0RVTU1ZX1JFTChyZWwyX2dyb3VwZWQp KTsKKwl9Cit9CisKIC8qCiAgKiBwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMKICAqCSAgQWRk IHBhdGhzIHRvIHRoZSBnaXZlbiBqb2lucmVsIGZvciBnaXZlbiBwYWlyIG9mIGpvaW5pbmcgcmVs YXRpb25zLiBUaGUKQEAgLTE2NzQsNiArMTgwNCwxMSBAQCB0cnlfcGFydGl0aW9ud2lzZV9qb2lu KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyLAog CQkJCQkJIGFkanVzdF9jaGlsZF9yZWxpZHMoam9pbnJlbC0+cmVsaWRzLAogCQkJCQkJCQkJCQkg bmFwcGluZm9zLCBhcHBpbmZvcykpKTsKIAorCQkvKiBCdWlsZCBhIGdyb3VwZWQgam9pbiByZWxh dGlvbiBmb3IgJ2NoaWxkX2pvaW5yZWwnIGlmIHBvc3NpYmxlICovCisJCW1ha2VfZ3JvdXBlZF9q b2luX3JlbChyb290LCBjaGlsZF9yZWwxLCBjaGlsZF9yZWwyLAorCQkJCQkJCSAgY2hpbGRfam9p bnJlbCwgY2hpbGRfc2ppbmZvLAorCQkJCQkJCSAgY2hpbGRfcmVzdHJpY3RsaXN0KTsKKwogCQkv KiBBbmQgbWFrZSBwYXRocyBmb3IgdGhlIGNoaWxkIGpvaW4gKi8KIAkJcG9wdWxhdGVfam9pbnJl bF93aXRoX3BhdGhzKHJvb3QsIGNoaWxkX3JlbDEsIGNoaWxkX3JlbDIsCiAJCQkJCQkJCQljaGls ZF9qb2lucmVsLCBjaGlsZF9zamluZm8sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9pbml0c3BsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxh bi5jCmluZGV4IGUyYzY4ZmU2ZjkuLjJjYTAzNWRkODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2luaXRzcGxhbi5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jl cy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf dHlwZS5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25v ZGVGdW5jcy5oIgpAQCAtODAsNiArODEsOCBAQCB0eXBlZGVmIHN0cnVjdCBKb2luVHJlZUl0ZW0K IH0gSm9pblRyZWVJdGVtOwogCiAKK3N0YXRpYyB2b2lkIGNyZWF0ZV9hZ2dfY2xhdXNlX2luZm9z KFBsYW5uZXJJbmZvICpyb290KTsKK3N0YXRpYyB2b2lkIGNyZWF0ZV9ncm91cGluZ19leHByX2lu Zm9zKFBsYW5uZXJJbmZvICpyb290KTsKIHN0YXRpYyB2b2lkIGV4dHJhY3RfbGF0ZXJhbF9yZWZl cmVuY2VzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpicmVsLAogCQkJCQkJCQkJICAg SW5kZXggcnRpbmRleCk7CiBzdGF0aWMgTGlzdCAqZGVjb25zdHJ1Y3RfcmVjdXJzZShQbGFubmVy SW5mbyAqcm9vdCwgTm9kZSAqanRub2RlLApAQCAtMzI3LDYgKzMzMCwyNTUgQEAgYWRkX3ZhcnNf dG9fdGFyZ2V0bGlzdChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqdmFycywKIAl9CiB9CiAKKy8q CisgKiBzZXR1cF9lYWdlcl9hZ2dyZWdhdGlvbgorICoJICBDaGVjayBpZiBlYWdlciBhZ2dyZWdh dGlvbiBpcyBhcHBsaWNhYmxlLCBhbmQgaWYgc28gY29sbGVjdCBzdWl0YWJsZQorICoJICBhZ2dy ZWdhdGUgZXhwcmVzc2lvbnMgYW5kIGdyb3VwaW5nIGV4cHJlc3Npb25zIGluIHRoZSBxdWVyeS4K KyAqLwordm9pZAorc2V0dXBfZWFnZXJfYWdncmVnYXRpb24oUGxhbm5lckluZm8gKnJvb3QpCit7 CisJLyoKKwkgKiBEb24ndCBhcHBseSBlYWdlciBhZ2dyZWdhdGlvbiBpZiBkaXNhYmxlZCBieSB1 c2VyLgorCSAqLworCWlmICghZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSkKKwkJcmV0dXJuOworCisJ LyoKKwkgKiBEb24ndCBhcHBseSBlYWdlciBhZ2dyZWdhdGlvbiBpZiB0aGVyZSBhcmUgbm8gYXZh aWxhYmxlIEdST1VQIEJZCisJICogY2xhdXNlcy4KKwkgKi8KKwlpZiAoIXJvb3QtPnByb2Nlc3Nl ZF9ncm91cENsYXVzZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBGb3Igbm93IHdlIGRvbid0IHRy eSB0byBzdXBwb3J0IGdyb3VwaW5nIHNldHMuCisJICovCisJaWYgKHJvb3QtPnBhcnNlLT5ncm91 cGluZ1NldHMpCisJCXJldHVybjsKKworCS8qCisJICogRm9yIG5vdyB3ZSBkb24ndCB0cnkgdG8g c3VwcG9ydCBESVNUSU5DVCBvciBPUkRFUiBCWSBhZ2dyZWdhdGVzLgorCSAqLworCWlmIChyb290 LT5udW1PcmRlcmVkQWdncyA+IDApCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhlcmUgYXJl IGFueSBhZ2dyZWdhdGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgcGFydGlhbCBtb2RlLCBvciBhbnkK KwkgKiBwYXJ0aWFsIGFnZ3JlZ2F0ZXMgdGhhdCBhcmUgbm9uLXNlcmlhbGl6YWJsZSwgZG8gbm90 IGFwcGx5IGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICovCisJaWYgKHJvb3QtPmhhc05vblBh cnRpYWxBZ2dzIHx8IHJvb3QtPmhhc05vblNlcmlhbEFnZ3MpCisJCXJldHVybjsKKworCS8qCisJ ICogV2UgZG9uJ3QgdHJ5IHRvIGFwcGx5IGVhZ2VyIGFnZ3JlZ2F0aW9uIGlmIHRoZXJlIGFyZSBz ZXQtcmV0dXJuaW5nCisJICogZnVuY3Rpb25zIGluIHRhcmdldGxpc3QuCisJICovCisJaWYgKHJv b3QtPnBhcnNlLT5oYXNUYXJnZXRTUkZzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENvbGxlY3Qg YWdncmVnYXRlIGV4cHJlc3Npb25zIGFuZCBwbGFpbiBWYXJzIHRoYXQgYXBwZWFyIGluIHRhcmdl dGxpc3QKKwkgKiBhbmQgaGF2aW5nUXVhbC4KKwkgKi8KKwljcmVhdGVfYWdnX2NsYXVzZV9pbmZv cyhyb290KTsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIHN1aXRhYmxlIGFnZ3JlZ2F0ZSBl eHByZXNzaW9ucywgd2UgY2Fubm90IGFwcGx5IGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICov CisJaWYgKHJvb3QtPmFnZ19jbGF1c2VfbGlzdCA9PSBOSUwpCisJCXJldHVybjsKKworCS8qCisJ ICogQ29sbGVjdCBncm91cGluZyBleHByZXNzaW9ucyB0aGF0IGFwcGVhciBpbiBncm91cGluZyBj bGF1c2VzLgorCSAqLworCWNyZWF0ZV9ncm91cGluZ19leHByX2luZm9zKHJvb3QpOworfQorCisv KgorICogY3JlYXRlX2FnZ19jbGF1c2VfaW5mb3MKKyAqCSAgU2VhcmNoIHRoZSB0YXJnZXRsaXN0 IGFuZCBoYXZpbmdRdWFsIGZvciBBZ2dyZWZzIGFuZCBwbGFpbiBWYXJzLCBhbmQKKyAqCSAgY3Jl YXRlIGFuIEFnZ0NsYXVzZUluZm8gZm9yIGVhY2ggQWdncmVmIG5vZGUuCisgKi8KK3N0YXRpYyB2 b2lkCitjcmVhdGVfYWdnX2NsYXVzZV9pbmZvcyhQbGFubmVySW5mbyAqcm9vdCkKK3sKKwlMaXN0 CSAgICp0bGlzdF9leHByczsKKwlMaXN0Q2VsbCAgICpsYzsKKworCUFzc2VydChyb290LT5hZ2df Y2xhdXNlX2xpc3QgPT0gTklMKTsKKwlBc3NlcnQocm9vdC0+dGxpc3RfdmFycyA9PSBOSUwpOwor CisJdGxpc3RfZXhwcnMgPSBwdWxsX3Zhcl9jbGF1c2UoKE5vZGUgKikgcm9vdC0+cHJvY2Vzc2Vk X3RsaXN0LAorCQkJCQkJCQkgIFBWQ19JTkNMVURFX0FHR1JFR0FURVMgfAorCQkJCQkJCQkgIFBW Q19SRUNVUlNFX1dJTkRPV0ZVTkNTIHwKKwkJCQkJCQkJICBQVkNfUkVDVVJTRV9QTEFDRUhPTERF UlMpOworCisJLyoKKwkgKiBGb3Igbm93IHdlIGRvbid0IHRyeSB0byBzdXBwb3J0IEdST1VQSU5H KCkgZXhwcmVzc2lvbnMuCisJICovCisJZm9yZWFjaChsYywgdGxpc3RfZXhwcnMpCisJeworCQlF eHByCSAgICpleHByID0gKEV4cHIgKikgbGZpcnN0KGxjKTsKKworCQlpZiAoSXNBKGV4cHIsIEdy b3VwaW5nRnVuYykpCisJCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBBZ2dyZWdhdGVzIHdpdGhp biB0aGUgSEFWSU5HIGNsYXVzZSBuZWVkIHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUgc2FtZQorCSAq IHdheSBhcyB0aG9zZSBpbiB0aGUgdGFyZ2V0bGlzdC4gIE5vdGUgdGhhdCBIQVZJTkcgY2FuIGNv bnRhaW4gQWdncmVmcworCSAqIGJ1dCBub3QgV2luZG93RnVuY3MuCisJICovCisJaWYgKHJvb3Qt PnBhcnNlLT5oYXZpbmdRdWFsICE9IE5VTEwpCisJeworCQlMaXN0CSAgICpoYXZpbmdfZXhwcnM7 CisKKwkJaGF2aW5nX2V4cHJzID0gcHVsbF92YXJfY2xhdXNlKChOb2RlICopIHJvb3QtPnBhcnNl LT5oYXZpbmdRdWFsLAorCQkJCQkJCQkJICAgUFZDX0lOQ0xVREVfQUdHUkVHQVRFUyB8CisJCQkJ CQkJCQkgICBQVkNfUkVDVVJTRV9QTEFDRUhPTERFUlMpOworCQlpZiAoaGF2aW5nX2V4cHJzICE9 IE5JTCkKKwkJeworCQkJdGxpc3RfZXhwcnMgPSBsaXN0X2NvbmNhdCh0bGlzdF9leHBycywgaGF2 aW5nX2V4cHJzKTsKKwkJCWxpc3RfZnJlZShoYXZpbmdfZXhwcnMpOworCQl9CisJfQorCisJZm9y ZWFjaChsYywgdGxpc3RfZXhwcnMpCisJeworCQlFeHByCSAgICpleHByID0gKEV4cHIgKikgbGZp cnN0KGxjKTsKKwkJQWdncmVmCSAgICphZ2dyZWY7CisJCUFnZ0NsYXVzZUluZm8gKmFjX2luZm87 CisKKwkJLyoKKwkJICogY29sbGVjdCBwbGFpbiBWYXJzIGZvciBmdXR1cmUgcmVmZXJlbmNlCisJ CSAqLworCQlpZiAoSXNBKGV4cHIsIFZhcikpCisJCXsKKwkJCXJvb3QtPnRsaXN0X3ZhcnMgPSBs aXN0X2FwcGVuZF91bmlxdWUocm9vdC0+dGxpc3RfdmFycywgZXhwcik7CisJCQljb250aW51ZTsK KwkJfQorCisJCWFnZ3JlZiA9IGNhc3ROb2RlKEFnZ3JlZiwgZXhwcik7CisKKwkJQXNzZXJ0KGFn Z3JlZi0+YWdnb3JkZXIgPT0gTklMKTsKKwkJQXNzZXJ0KGFnZ3JlZi0+YWdnZGlzdGluY3QgPT0g TklMKTsKKworCQlhY19pbmZvID0gbWFrZU5vZGUoQWdnQ2xhdXNlSW5mbyk7CisJCWFjX2luZm8t PmFnZ3JlZiA9IGFnZ3JlZjsKKwkJYWNfaW5mby0+YWdnX2V2YWxfYXQgPSBwdWxsX3Zhcm5vcyhy b290LCAoTm9kZSAqKSBhZ2dyZWYpOworCisJCXJvb3QtPmFnZ19jbGF1c2VfbGlzdCA9CisJCQls aXN0X2FwcGVuZF91bmlxdWUocm9vdC0+YWdnX2NsYXVzZV9saXN0LCBhY19pbmZvKTsKKwl9CisK KwlsaXN0X2ZyZWUodGxpc3RfZXhwcnMpOworfQorCisvKgorICogY3JlYXRlX2dyb3VwaW5nX2V4 cHJfaW5mb3MKKyAqCSAgQ3JlYXRlIEdyb3VwRXhwckluZm8gZm9yIGVhY2ggZXhwcmVzc2lvbiB1 c2FibGUgYXMgZ3JvdXBpbmcga2V5LgorICoKKyAqIElmIGFueSBncm91cGluZyBleHByZXNzaW9u IGlzIG5vdCBzdWl0YWJsZSwgd2Ugd2lsbCBqdXN0IHJldHVybiB3aXRoCisgKiByb290LT5ncm91 cF9leHByX2xpc3QgYmVpbmcgTklMLgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX2dyb3VwaW5n X2V4cHJfaW5mb3MoUGxhbm5lckluZm8gKnJvb3QpCit7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7 CisJTGlzdAkgICAqc29ydGdyb3VwcmVmcyA9IE5JTDsKKwlMaXN0CSAgICpidHJlZV9vcGZhbWls aWVzID0gTklMOworCUxpc3RDZWxsICAgKmxjLAorCQkJICAgKmxjMSwKKwkJCSAgICpsYzIsCisJ CQkgICAqbGMzOworCisJQXNzZXJ0KHJvb3QtPmdyb3VwX2V4cHJfbGlzdCA9PSBOSUwpOworCisJ Zm9yZWFjaChsYywgcm9vdC0+cHJvY2Vzc2VkX2dyb3VwQ2xhdXNlKQorCXsKKwkJU29ydEdyb3Vw Q2xhdXNlICpzZ2MgPSBsZmlyc3Rfbm9kZShTb3J0R3JvdXBDbGF1c2UsIGxjKTsKKwkJVGFyZ2V0 RW50cnkgKnRsZSA9IGdldF9zb3J0Z3JvdXBjbGF1c2VfdGxlKHNnYywgcm9vdC0+cHJvY2Vzc2Vk X3RsaXN0KTsKKwkJVHlwZUNhY2hlRW50cnkgKnRjZTsKKwkJT2lkCQkJZXF1YWxpbWFnZXByb2M7 CisJCU9pZAkJCWVxX29wOworCQlMaXN0CSAgICplcV9vcGZhbWlsaWVzOworCQlPaWQJCQlidHJl ZV9vcGZhbWlseTsKKworCQlBc3NlcnQodGxlLT5yZXNzb3J0Z3JvdXByZWYgPiAwKTsKKworCQkv KgorCQkgKiBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBwbGFpbiBWYXJzIGFzIGdyb3VwaW5nIGV4 cHJlc3Npb25zLgorCQkgKi8KKwkJaWYgKCFJc0EodGxlLT5leHByLCBWYXIpKQorCQkJcmV0dXJu OworCisJCS8qCisJCSAqIEVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIG9ubHkgcG9zc2libGUgaWYgZXF1 YWxpdHkgb2YgZ3JvdXBpbmcga2V5cywgYXMKKwkJICogZGVmaW5lZCBieSB0aGUgZXF1YWxpdHkg b3BlcmF0b3IsIGltcGxpZXMgYml0d2lzZSBlcXVhbGl0eS4KKwkJICogT3RoZXJ3aXNlLCBpZiB3 ZSBwdXQga2V5cyB3aXRoIGRpZmZlcmVudCBieXRlIGltYWdlcyBpbnRvIHRoZSBzYW1lCisJCSAq IGdyb3VwLCB3ZSBtYXkgbG9zZSBzb21lIGluZm9ybWF0aW9uIHRoYXQgY291bGQgYmUgbmVlZGVk IHRvCisJCSAqIGV2YWx1YXRlIHVwcGVyIHF1YWwgY2xhdXNlcy4KKwkJICoKKwkJICogRm9yIGV4 YW1wbGUsIHRoZSBOVU1FUklDIGRhdGEgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGJlY2F1c2UgdmFs dWVzCisJCSAqIHRoYXQgZmFsbCBpbnRvIHRoZSBzYW1lIGdyb3VwIGFjY29yZGluZyB0byB0aGUg ZXF1YWxpdHkgb3BlcmF0b3IKKwkJICogKGUuZy4gMCBhbmQgMC4wKSBjYW4gaGF2ZSBkaWZmZXJl bnQgc2NhbGUuCisJCSAqLworCQl0Y2UgPSBsb29rdXBfdHlwZV9jYWNoZShleHByVHlwZSgoTm9k ZSAqKSB0bGUtPmV4cHIpLAorCQkJCQkJCQlUWVBFQ0FDSEVfQlRSRUVfT1BGQU1JTFkpOworCQlp ZiAoIU9pZElzVmFsaWQodGNlLT5idHJlZV9vcGYpIHx8CisJCQkhT2lkSXNWYWxpZCh0Y2UtPmJ0 cmVlX29waW50eXBlKSkKKwkJCXJldHVybjsKKworCQllcXVhbGltYWdlcHJvYyA9IGdldF9vcGZh bWlseV9wcm9jKHRjZS0+YnRyZWVfb3BmLAorCQkJCQkJCQkJCSAgIHRjZS0+YnRyZWVfb3BpbnR5 cGUsCisJCQkJCQkJCQkJICAgdGNlLT5idHJlZV9vcGludHlwZSwKKwkJCQkJCQkJCQkgICBCVEVR VUFMSU1BR0VfUFJPQyk7CisJCWlmICghT2lkSXNWYWxpZChlcXVhbGltYWdlcHJvYykgfHwKKwkJ CSFEYXR1bUdldEJvb2woT2lkRnVuY3Rpb25DYWxsMUNvbGwoZXF1YWxpbWFnZXByb2MsCisJCQkJ CQkJCQkJCSAgIHRjZS0+dHlwY29sbGF0aW9uLAorCQkJCQkJCQkJCQkgICBPYmplY3RJZEdldERh dHVtKHRjZS0+YnRyZWVfb3BpbnR5cGUpKSkpCisJCQlyZXR1cm47CisKKwkJLyoKKwkJICogR2V0 IHRoZSBvcGVyYXRvciBpbiB0aGUgYnRyZWUncyBvcGZhbWlseS4KKwkJICovCisJCWVxX29wID0g Z2V0X29wZmFtaWx5X21lbWJlcih0Y2UtPmJ0cmVlX29wZiwKKwkJCQkJCQkJCXRjZS0+YnRyZWVf b3BpbnR5cGUsCisJCQkJCQkJCQl0Y2UtPmJ0cmVlX29waW50eXBlLAorCQkJCQkJCQkJQlRFcXVh bFN0cmF0ZWd5TnVtYmVyKTsKKwkJaWYgKCFPaWRJc1ZhbGlkKGVxX29wKSkKKwkJCXJldHVybjsK KwkJZXFfb3BmYW1pbGllcyA9IGdldF9tZXJnZWpvaW5fb3BmYW1pbGllcyhlcV9vcCk7CisJCWlm ICghZXFfb3BmYW1pbGllcykKKwkJCXJldHVybjsKKwkJYnRyZWVfb3BmYW1pbHkgPSBsaW5pdGlh bF9vaWQoZXFfb3BmYW1pbGllcyk7CisKKwkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCB0bGUtPmV4 cHIpOworCQlzb3J0Z3JvdXByZWZzID0gbGFwcGVuZF9pbnQoc29ydGdyb3VwcmVmcywgdGxlLT5y ZXNzb3J0Z3JvdXByZWYpOworCQlidHJlZV9vcGZhbWlsaWVzID0gbGFwcGVuZF9vaWQoYnRyZWVf b3BmYW1pbGllcywgYnRyZWVfb3BmYW1pbHkpOworCX0KKworCS8qCisJICogQ29uc3RydWN0IEdy b3VwRXhwckluZm8gZm9yIGVhY2ggZXhwcmVzc2lvbi4KKwkgKi8KKwlmb3J0aHJlZShsYzEsIGV4 cHJzLCBsYzIsIHNvcnRncm91cHJlZnMsIGxjMywgYnRyZWVfb3BmYW1pbGllcykKKwl7CisJCUV4 cHIJICAgKmV4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMxKTsKKwkJaW50CQkJc29ydGdyb3VwcmVm ID0gbGZpcnN0X2ludChsYzIpOworCQlPaWQJCQlidHJlZV9vcGZhbWlseSA9IGxmaXJzdF9vaWQo bGMzKTsKKwkJR3JvdXBFeHBySW5mbyAqZ2VfaW5mbzsKKworCQlnZV9pbmZvID0gbWFrZU5vZGUo R3JvdXBFeHBySW5mbyk7CisJCWdlX2luZm8tPmV4cHIgPSAoRXhwciAqKSBjb3B5T2JqZWN0KGV4 cHIpOworCQlnZV9pbmZvLT5zb3J0Z3JvdXByZWYgPSBzb3J0Z3JvdXByZWY7CisJCWdlX2luZm8t PmJ0cmVlX29wZmFtaWx5ID0gYnRyZWVfb3BmYW1pbHk7CisKKwkJcm9vdC0+Z3JvdXBfZXhwcl9s aXN0ID0gbGFwcGVuZChyb290LT5ncm91cF9leHByX2xpc3QsIGdlX2luZm8pOworCX0KK30KIAog LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vcGxhbm1haW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWlu LmMKaW5kZXggZmQ4YjJiMGNhMy4uZWNlNjkzNmUyMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubWFpbi5jCkBAIC02Nyw2ICs2Nyw5IEBAIHF1ZXJ5X3BsYW5uZXIoUGxhbm5lckluZm8g KnJvb3QsCiAJcm9vdC0+am9pbl9yZWxfbGlzdCA9IG1ha2VOb2RlKFJlbEluZm9MaXN0KTsKIAly b290LT5qb2luX3JlbF9saXN0LT5pdGVtcyA9IE5JTDsKIAlyb290LT5qb2luX3JlbF9saXN0LT5o YXNoID0gTlVMTDsKKwlyb290LT5hZ2dfaW5mb19saXN0ID0gbWFrZU5vZGUoUmVsSW5mb0xpc3Qp OworCXJvb3QtPmFnZ19pbmZvX2xpc3QtPml0ZW1zID0gTklMOworCXJvb3QtPmFnZ19pbmZvX2xp c3QtPmhhc2ggPSBOVUxMOwogCXJvb3QtPmpvaW5fcmVsX2xldmVsID0gTlVMTDsKIAlyb290LT5q b2luX2N1cl9sZXZlbCA9IDA7CiAJcm9vdC0+Y2Fub25fcGF0aGtleXMgPSBOSUw7CkBAIC03Nyw2 ICs4MCw5IEBAIHF1ZXJ5X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJcm9vdC0+cGxhY2Vo b2xkZXJfbGlzdCA9IE5JTDsKIAlyb290LT5wbGFjZWhvbGRlcl9hcnJheSA9IE5VTEw7CiAJcm9v dC0+cGxhY2Vob2xkZXJfYXJyYXlfc2l6ZSA9IDA7CisJcm9vdC0+YWdnX2NsYXVzZV9saXN0ID0g TklMOworCXJvb3QtPmdyb3VwX2V4cHJfbGlzdCA9IE5JTDsKKwlyb290LT50bGlzdF92YXJzID0g TklMOwogCXJvb3QtPmZrZXlfbGlzdCA9IE5JTDsKIAlyb290LT5pbml0aWFsX3JlbHMgPSBOSUw7 CiAKQEAgLTI1OCw2ICsyNjQsMTIgQEAgcXVlcnlfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwK IAkgKi8KIAlleHRyYWN0X3Jlc3RyaWN0aW9uX29yX2NsYXVzZXMocm9vdCk7CiAKKwkvKgorCSAq IENoZWNrIGlmIGVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGFwcGxpY2FibGUsIGFuZCBpZiBzbywgc2V0 IHVwCisJICogcm9vdC0+YWdnX2NsYXVzZV9saXN0IGFuZCByb290LT5ncm91cF9leHByX2xpc3Qu CisJICovCisJc2V0dXBfZWFnZXJfYWdncmVnYXRpb24ocm9vdCk7CisKIAkvKgogCSAqIE5vdyBl eHBhbmQgYXBwZW5kcmVscyBieSBhZGRpbmcgIm90aGVycmVscyIgZm9yIHRoZWlyIGNoaWxkcmVu LiAgV2UKIAkgKiBkZWxheSB0aGlzIHRvIHRoZSBlbmQgc28gdGhhdCB3ZSBoYXZlIGFzIG11Y2gg aW5mb3JtYXRpb24gYXMgcG9zc2libGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpp bmRleCA5NDhhZmQ5MDk0Li44OWE4ZjM5MDMxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jCkBAIC0yMjUsNyArMjI1LDYgQEAgc3RhdGljIHZvaWQgYWRkX3BhdGhzX3RvX2dyb3Vw aW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJ CQkJICBSZWxPcHRJbmZvICpwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCiAJCQkJCQkJCQkgIGNvbnN0 IEFnZ0NsYXVzZUNvc3RzICphZ2dfY29zdHMsCiAJCQkJCQkJCQkgIGdyb3VwaW5nX3NldHNfZGF0 YSAqZ2QsCi0JCQkJCQkJCQkgIGRvdWJsZSBkTnVtR3JvdXBzLAogCQkJCQkJCQkJICBHcm91cFBh dGhFeHRyYURhdGEgKmV4dHJhKTsKIHN0YXRpYyBSZWxPcHRJbmZvICpjcmVhdGVfcGFydGlhbF9n cm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSBSZWxPcHRJbmZv ICpncm91cGVkX3JlbCwKQEAgLTM5OTksOSArMzk5OCw3IEBAIGNyZWF0ZV9vcmRpbmFyeV9ncm91 cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJ CQkJCSAgIEdyb3VwUGF0aEV4dHJhRGF0YSAqZXh0cmEsCiAJCQkJCQkJICAgUmVsT3B0SW5mbyAq KnBhcnRpYWxseV9ncm91cGVkX3JlbF9wKQogewotCVBhdGgJICAgKmNoZWFwZXN0X3BhdGggPSBp bnB1dF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGg7CiAJUmVsT3B0SW5mbyAqcGFydGlhbGx5X2dy b3VwZWRfcmVsID0gTlVMTDsKLQlkb3VibGUJCWROdW1Hcm91cHM7CiAJUGFydGl0aW9ud2lzZUFn Z3JlZ2F0ZVR5cGUgcGF0eXBlID0gUEFSVElUSU9OV0lTRV9BR0dSRUdBVEVfTk9ORTsKIAogCS8q CkBAIC00MDgyLDIzICs0MDc5LDE2IEBAIGNyZWF0ZV9vcmRpbmFyeV9ncm91cGluZ19wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCiAJLyogR2F0aGVyIGFu eSBwYXJ0aWFsbHkgZ3JvdXBlZCBwYXJ0aWFsIHBhdGhzLiAqLwogCWlmIChwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wYXJ0aWFsX3BhdGhsaXN0KQotCXsK IAkJZ2F0aGVyX2dyb3VwaW5nX3BhdGhzKHJvb3QsIHBhcnRpYWxseV9ncm91cGVkX3JlbCk7Ci0J CXNldF9jaGVhcGVzdChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwpOwotCX0KIAotCS8qCi0JICogRXN0 aW1hdGUgbnVtYmVyIG9mIGdyb3Vwcy4KLQkgKi8KLQlkTnVtR3JvdXBzID0gZ2V0X251bWJlcl9v Zl9ncm91cHMocm9vdCwKLQkJCQkJCQkJCSAgY2hlYXBlc3RfcGF0aC0+cm93cywKLQkJCQkJCQkJ CSAgZ2QsCi0JCQkJCQkJCQkgIGV4dHJhLT50YXJnZXRMaXN0KTsKKwkvKiBOb3cgY2hvb3NlIHRo ZSBiZXN0IHBhdGgocykgZm9yIHBhcnRpYWxseV9ncm91cGVkX3JlbC4gKi8KKwlpZiAocGFydGlh bGx5X2dyb3VwZWRfcmVsICYmIHBhcnRpYWxseV9ncm91cGVkX3JlbC0+cGF0aGxpc3QpCisJCXNl dF9jaGVhcGVzdChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwpOwogCiAJLyogQnVpbGQgZmluYWwgZ3Jv dXBpbmcgcGF0aHMgKi8KIAlhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVsKHJvb3QsIGlucHV0X3Jl bCwgZ3JvdXBlZF9yZWwsCiAJCQkJCQkJICBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIGFnZ19jb3N0 cywgZ2QsCi0JCQkJCQkJICBkTnVtR3JvdXBzLCBleHRyYSk7CisJCQkJCQkJICBleHRyYSk7CiAK IAkvKiBHaXZlIGEgaGVscGZ1bCBlcnJvciBpZiB3ZSBmYWlsZWQgdG8gZmluZCBhbnkgaW1wbGVt ZW50YXRpb24gKi8KIAlpZiAoZ3JvdXBlZF9yZWwtPnBhdGhsaXN0ID09IE5JTCkKQEAgLTY5NjYs MTYgKzY5NTYsNDIgQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJICBSZWxPcHRJbmZvICpncm91cGVkX3Jl bCwKIAkJCQkJCSAgUmVsT3B0SW5mbyAqcGFydGlhbGx5X2dyb3VwZWRfcmVsLAogCQkJCQkJICBj b25zdCBBZ2dDbGF1c2VDb3N0cyAqYWdnX2Nvc3RzLAotCQkJCQkJICBncm91cGluZ19zZXRzX2Rh dGEgKmdkLCBkb3VibGUgZE51bUdyb3VwcywKKwkJCQkJCSAgZ3JvdXBpbmdfc2V0c19kYXRhICpn ZCwKIAkJCQkJCSAgR3JvdXBQYXRoRXh0cmFEYXRhICpleHRyYSkKIHsKIAlRdWVyeQkgICAqcGFy c2UgPSByb290LT5wYXJzZTsKIAlQYXRoCSAgICpjaGVhcGVzdF9wYXRoID0gaW5wdXRfcmVsLT5j aGVhcGVzdF90b3RhbF9wYXRoOworCVBhdGgJICAgKmNoZWFwZXN0X3BhcnRpYWxseV9ncm91cGVk X3BhdGggPSBOVUxMOwogCUxpc3RDZWxsICAgKmxjOwogCWJvb2wJCWNhbl9oYXNoID0gKGV4dHJh LT5mbGFncyAmIEdST1VQSU5HX0NBTl9VU0VfSEFTSCkgIT0gMDsKIAlib29sCQljYW5fc29ydCA9 IChleHRyYS0+ZmxhZ3MgJiBHUk9VUElOR19DQU5fVVNFX1NPUlQpICE9IDA7CiAJTGlzdAkgICAq aGF2aW5nUXVhbCA9IChMaXN0ICopIGV4dHJhLT5oYXZpbmdRdWFsOwogCUFnZ0NsYXVzZUNvc3Rz ICphZ2dfZmluYWxfY29zdHMgPSAmZXh0cmEtPmFnZ19maW5hbF9jb3N0czsKKwlkb3VibGUJCWRO dW1Hcm91cHMgPSAwOworCWRvdWJsZQkJZE51bUZpbmFsR3JvdXBzID0gMDsKKworCS8qCisJICog RXN0aW1hdGUgbnVtYmVyIG9mIGdyb3VwcyBmb3Igbm9uLXNwbGl0IGFnZ3JlZ2F0aW9uLgorCSAq LworCWROdW1Hcm91cHMgPSBnZXRfbnVtYmVyX29mX2dyb3Vwcyhyb290LAorCQkJCQkJCQkJICBj aGVhcGVzdF9wYXRoLT5yb3dzLAorCQkJCQkJCQkJICBnZCwKKwkJCQkJCQkJCSAgZXh0cmEtPnRh cmdldExpc3QpOworCisJaWYgKHBhcnRpYWxseV9ncm91cGVkX3JlbCAmJiBwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwtPnBhdGhsaXN0KQorCXsKKwkJY2hlYXBlc3RfcGFydGlhbGx5X2dyb3VwZWRfcGF0 aCA9CisJCQlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGg7CisKKwkJ LyoKKwkJICogRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3VwcyBmb3IgZmluYWwgcGhhc2Ugb2YgcGFy dGlhbCBhZ2dyZWdhdGlvbi4KKwkJICovCisJCWROdW1GaW5hbEdyb3VwcyA9CisJCQlnZXRfbnVt YmVyX29mX2dyb3Vwcyhyb290LAorCQkJCQkJCQkgY2hlYXBlc3RfcGFydGlhbGx5X2dyb3VwZWRf cGF0aC0+cm93cywKKwkJCQkJCQkJIGdkLAorCQkJCQkJCQkgZXh0cmEtPnRhcmdldExpc3QpOwor CX0KIAogCWlmIChjYW5fc29ydCkKIAl7CkBAIC03MDg3LDcgKzcxMDMsNyBAQCBhZGRfcGF0aHNf dG9fZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWws CiAJCQkJCXBhdGggPSBtYWtlX29yZGVyZWRfcGF0aChyb290LAogCQkJCQkJCQkJCQkgZ3JvdXBl ZF9yZWwsCiAJCQkJCQkJCQkJCSBwYXRoLAotCQkJCQkJCQkJCQkgcGFydGlhbGx5X2dyb3VwZWRf cmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoLAorCQkJCQkJCQkJCQkgY2hlYXBlc3RfcGFydGlhbGx5 X2dyb3VwZWRfcGF0aCwKIAkJCQkJCQkJCQkJIGluZm8tPnBhdGhrZXlzKTsKIAogCQkJCQlpZiAo cGF0aCA9PSBOVUxMKQpAQCAtNzEwNCw3ICs3MTIwLDcgQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5n X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJCQkJ CQkJIGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJCQkgaGF2aW5nUXVhbCwKIAkJCQkJCQkJCQkJ CSBhZ2dfZmluYWxfY29zdHMsCi0JCQkJCQkJCQkJCQkgZE51bUdyb3VwcykpOworCQkJCQkJCQkJ CQkJIGROdW1GaW5hbEdyb3VwcykpOwogCQkJCQllbHNlCiAJCQkJCQlhZGRfcGF0aChncm91cGVk X3JlbCwgKFBhdGggKikKIAkJCQkJCQkJIGNyZWF0ZV9ncm91cF9wYXRoKHJvb3QsCkBAIC03MTEy LDcgKzcxMjgsNyBAQCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCQkJCQkJCQkJCQkgICBwYXRoLAogCQkJCQkJCQkJ CQkJICAgaW5mby0+Y2xhdXNlcywKIAkJCQkJCQkJCQkJCSAgIGhhdmluZ1F1YWwsCi0JCQkJCQkJ CQkJCQkgICBkTnVtR3JvdXBzKSk7CisJCQkJCQkJCQkJCQkgICBkTnVtRmluYWxHcm91cHMpKTsK IAogCQkJCX0KIAkJCX0KQEAgLTcxNTQsMTkgKzcxNzAsMTcgQEAgYWRkX3BhdGhzX3RvX2dyb3Vw aW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkgKi8K IAkJaWYgKHBhcnRpYWxseV9ncm91cGVkX3JlbCAmJiBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnBh dGhsaXN0KQogCQl7Ci0JCQlQYXRoCSAgICpwYXRoID0gcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5j aGVhcGVzdF90b3RhbF9wYXRoOwotCiAJCQlhZGRfcGF0aChncm91cGVkX3JlbCwgKFBhdGggKikK IAkJCQkJIGNyZWF0ZV9hZ2dfcGF0aChyb290LAogCQkJCQkJCQkJIGdyb3VwZWRfcmVsLAotCQkJ CQkJCQkJIHBhdGgsCisJCQkJCQkJCQkgY2hlYXBlc3RfcGFydGlhbGx5X2dyb3VwZWRfcGF0aCwK IAkJCQkJCQkJCSBncm91cGVkX3JlbC0+cmVsdGFyZ2V0LAogCQkJCQkJCQkJIEFHR19IQVNIRUQs CiAJCQkJCQkJCQkgQUdHU1BMSVRfRklOQUxfREVTRVJJQUwsCiAJCQkJCQkJCQkgcm9vdC0+cHJv Y2Vzc2VkX2dyb3VwQ2xhdXNlLAogCQkJCQkJCQkJIGhhdmluZ1F1YWwsCiAJCQkJCQkJCQkgYWdn X2ZpbmFsX2Nvc3RzLAotCQkJCQkJCQkJIGROdW1Hcm91cHMpKTsKKwkJCQkJCQkJCSBkTnVtRmlu YWxHcm91cHMpKTsKIAkJfQogCX0KIApAQCAtNzIxNiw2ICs3MjMwLDIxIEBAIGNyZWF0ZV9wYXJ0 aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCWJvb2wJCWNhbl9oYXNoID0g KGV4dHJhLT5mbGFncyAmIEdST1VQSU5HX0NBTl9VU0VfSEFTSCkgIT0gMDsKIAlib29sCQljYW5f c29ydCA9IChleHRyYS0+ZmxhZ3MgJiBHUk9VUElOR19DQU5fVVNFX1NPUlQpICE9IDA7CiAKKwkv KgorCSAqIFRoZSBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgY291bGQgaGF2ZSBiZWVuIGFscmVhZHkg Y3JlYXRlZCBkdWUgdG8gZWFnZXIKKwkgKiBhZ2dyZWdhdGlvbi4KKwkgKi8KKwlwYXJ0aWFsbHlf Z3JvdXBlZF9yZWwgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3QsIGlucHV0X3JlbC0+cmVsaWRzLCBO VUxMKTsKKwlBc3NlcnQoZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSB8fCBwYXJ0aWFsbHlfZ3JvdXBl ZF9yZWwgPT0gTlVMTCk7CisKKwkvKgorCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHBhcnRp YWxseV9ncm91cGVkX3JlbCBjcmVhdGVkIGJ5IGVhZ2VyCisJICogYWdncmVnYXRpb24gaXMgZHVt bXkuICBJbiB0aGlzIGNhc2Ugd2UganVzdCBzZXQgaXQgdG8gTlVMTC4gIEl0IG1pZ2h0CisJICog YmUgY3JlYXRlZCBhZ2FpbiBieSB0aGUgZm9sbG93aW5nIGxvZ2ljIGlmIHBvc3NpYmxlLgorCSAq LworCWlmIChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgJiYgSVNfRFVNTVlfUkVMKHBhcnRpYWxseV9n cm91cGVkX3JlbCkpCisJCXBhcnRpYWxseV9ncm91cGVkX3JlbCA9IE5VTEw7CisKIAkvKgogCSAq IENvbnNpZGVyIHdoZXRoZXIgd2Ugc2hvdWxkIGdlbmVyYXRlIHBhcnRpYWxseSBhZ2dyZWdhdGVk IG5vbi1wYXJ0aWFsCiAJICogcGF0aHMuICBXZSBjYW4gb25seSBkbyB0aGlzIGlmIHdlIGhhdmUg YSBub24tcGFydGlhbCBwYXRoLCBhbmQgb25seSBpZgpAQCAtNzIzOSwxOSArNzI2OCwyNyBAQCBj cmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkgKiBJZiB3 ZSBjYW4ndCBwYXJ0aWFsbHkgYWdncmVnYXRlIHBhcnRpYWwgcGF0aHMsIGFuZCB3ZSBjYW4ndCBw YXJ0aWFsbHkKIAkgKiBhZ2dyZWdhdGUgbm9uLXBhcnRpYWwgcGF0aHMsIHRoZW4gZG9uJ3QgYm90 aGVyIGNyZWF0aW5nIHRoZSBuZXcKIAkgKiBSZWxPcHRJbmZvIGF0IGFsbCwgdW5sZXNzIHRoZSBj YWxsZXIgc3BlY2lmaWVkIGZvcmNlX3JlbF9jcmVhdGlvbi4KKwkgKgorCSAqIE5vdGUgdGhhdCB0 aGUgcGFydGlhbGx5X2dyb3VwZWRfcmVsIGNvdWxkIGhhdmUgYmVlbiBhbHJlYWR5IGNyZWF0ZWQg YW5kCisJICogcG9wdWxhdGVkIHdpdGggYXBwcm9wcmlhdGUgcGF0aHMgYnkgZWFnZXIgYWdncmVn YXRpb24uCiAJICovCiAJaWYgKGNoZWFwZXN0X3RvdGFsX3BhdGggPT0gTlVMTCAmJgogCQljaGVh cGVzdF9wYXJ0aWFsX3BhdGggPT0gTlVMTCAmJgorCQkocGFydGlhbGx5X2dyb3VwZWRfcmVsID09 IE5VTEwgfHwKKwkJIHBhcnRpYWxseV9ncm91cGVkX3JlbC0+cGF0aGxpc3QgPT0gTklMKSAmJgog CQkhZm9yY2VfcmVsX2NyZWF0aW9uKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogQnVpbGQg YSBuZXcgdXBwZXIgcmVsYXRpb24gdG8gcmVwcmVzZW50IHRoZSByZXN1bHQgb2YgcGFydGlhbGx5 Ci0JICogYWdncmVnYXRpbmcgdGhlIHJvd3MgZnJvbSB0aGUgaW5wdXQgcmVsYXRpb24uCi0JICov Ci0JcGFydGlhbGx5X2dyb3VwZWRfcmVsID0gZmV0Y2hfdXBwZXJfcmVsKHJvb3QsCi0JCQkJCQkJ CQkJCVVQUEVSUkVMX1BBUlRJQUxfR1JPVVBfQUdHLAotCQkJCQkJCQkJCQlncm91cGVkX3JlbC0+ cmVsaWRzKTsKKwkgKiBhZ2dyZWdhdGluZyB0aGUgcm93cyBmcm9tIHRoZSBpbnB1dCByZWxhdGlv bi4gIFRoZSByZWxhdGlvbiBtYXkgYWxyZWFkeQorCSAqIGV4aXN0IGR1ZSB0byBlYWdlciBhZ2dy ZWdhdGlvbiwgaW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZQorCSAqIGl0Lgor CSAqLworCWlmIChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgPT0gTlVMTCkKKwkJcGFydGlhbGx5X2dy b3VwZWRfcmVsID0gZmV0Y2hfdXBwZXJfcmVsKHJvb3QsCisJCQkJCQkJCQkJCQlVUFBFUlJFTF9Q QVJUSUFMX0dST1VQX0FHRywKKwkJCQkJCQkJCQkJCWdyb3VwZWRfcmVsLT5yZWxpZHMpOwogCXBh cnRpYWxseV9ncm91cGVkX3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPQogCQlncm91cGVkX3JlbC0+ Y29uc2lkZXJfcGFyYWxsZWw7CiAJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5yZWxvcHRraW5kID0g Z3JvdXBlZF9yZWwtPnJlbG9wdGtpbmQ7CkBAIC03MjYwLDYgKzcyOTcsMTQgQEAgY3JlYXRlX3Bh cnRpYWxfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJcGFydGlhbGx5X2dyb3Vw ZWRfcmVsLT51c2VyaWRpc2N1cnJlbnQgPSBncm91cGVkX3JlbC0+dXNlcmlkaXNjdXJyZW50Owog CXBhcnRpYWxseV9ncm91cGVkX3JlbC0+ZmR3cm91dGluZSA9IGdyb3VwZWRfcmVsLT5mZHdyb3V0 aW5lOwogCisJLyoKKwkgKiBQYXJ0aWFsbHktZ3JvdXBlZCBwYXJ0aWFsIHBhdGhzIG1heSBoYXZl IGJlZW4gZ2VuZXJhdGVkIGJ5IGVhZ2VyCisJICogYWdncmVnYXRpb24uICBJZiB3ZSBmaW5kIHRo YXQgcGFyYWxsZWxpc20gaXMgbm90IHBvc3NpYmxlIGZvcgorCSAqIHBhcnRpYWxseV9ncm91cGVk X3JlbCwgd2UgbmVlZCB0byBkcm9wIHRoZXNlIHBhcnRpYWwgcGF0aHMuCisJICovCisJaWYgKCFw YXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsKQorCQlwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBOSUw7CisKIAkvKgogCSAqIEJ1aWxkIHRhcmdl dCBsaXN0IGZvciBwYXJ0aWFsIGFnZ3JlZ2F0ZSBwYXRocy4gIFRoZXNlIHBhdGhzIGNhbm5vdCBq dXN0CiAJICogZW1pdCB0aGUgc2FtZSB0bGlzdCBhcyByZWd1bGFyIGFnZ3JlZ2F0ZSBwYXRocywg YmVjYXVzZSAoMSkgd2UgbXVzdApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvYXBwZW5kaW5mby5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5j CmluZGV4IDQ5ODk3MjI2MzcuLjQ4ODRkOWRkZWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL2FwcGVuZGluZm8uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9hcHBlbmRpbmZvLmMKQEAgLTQ5OSw2ICs0OTksNjYgQEAgYWRqdXN0X2FwcGVuZHJlbF9hdHRy c19tdXRhdG9yKE5vZGUgKm5vZGUsCiAJCXJldHVybiAoTm9kZSAqKSBuZXdpbmZvOwogCX0KIAor CS8qCisJICogV2UgaGF2ZSB0byBwcm9jZXNzIFJlbEFnZ0luZm8gbm9kZXMgc3BlY2lhbGx5Lgor CSAqLworCWlmIChJc0Eobm9kZSwgUmVsQWdnSW5mbykpCisJeworCQlSZWxBZ2dJbmZvICpvbGRp bmZvID0gKFJlbEFnZ0luZm8gKikgbm9kZTsKKwkJUmVsQWdnSW5mbyAqbmV3aW5mbyA9IG1ha2VO b2RlKFJlbEFnZ0luZm8pOworCisJCS8qIENvcHkgYWxsIGZsYXQtY29waWFibGUgZmllbGRzICov CisJCW1lbWNweShuZXdpbmZvLCBvbGRpbmZvLCBzaXplb2YoUmVsQWdnSW5mbykpOworCisJCW5l d2luZm8tPnJlbGlkcyA9IGFkanVzdF9jaGlsZF9yZWxpZHMob2xkaW5mby0+cmVsaWRzLAorCQkJ CQkJCQkJCQkgIGNvbnRleHQtPm5hcHBpbmZvcywKKwkJCQkJCQkJCQkJICBjb250ZXh0LT5hcHBp bmZvcyk7CisKKwkJbmV3aW5mby0+dGFyZ2V0ID0gKFBhdGhUYXJnZXQgKikKKwkJCWFkanVzdF9h cHBlbmRyZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBvbGRpbmZvLT50YXJnZXQsCisJCQkJCQkJ CQkJICAgY29udGV4dCk7CisKKwkJbmV3aW5mby0+YWdnX2lucHV0ID0gKFBhdGhUYXJnZXQgKikK KwkJCWFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBvbGRpbmZvLT5hZ2df aW5wdXQsCisJCQkJCQkJCQkJICAgY29udGV4dCk7CisKKwkJbmV3aW5mby0+Z3JvdXBfY2xhdXNl cyA9IChMaXN0ICopCisJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikg b2xkaW5mby0+Z3JvdXBfY2xhdXNlcywKKwkJCQkJCQkJCQkgICBjb250ZXh0KTsKKworCQluZXdp bmZvLT5ncm91cF9leHBycyA9IChMaXN0ICopCisJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211 dGF0b3IoKE5vZGUgKikgb2xkaW5mby0+Z3JvdXBfZXhwcnMsCisJCQkJCQkJCQkJICAgY29udGV4 dCk7CisKKwkJcmV0dXJuIChOb2RlICopIG5ld2luZm87CisJfQorCisJLyoKKwkgKiBXZSBoYXZl IHRvIHByb2Nlc3MgUGF0aFRhcmdldCBub2RlcyBzcGVjaWFsbHkuCisJICovCisJaWYgKElzQShu b2RlLCBQYXRoVGFyZ2V0KSkKKwl7CisJCVBhdGhUYXJnZXQgKm9sZHRhcmdldCA9IChQYXRoVGFy Z2V0ICopIG5vZGU7CisJCVBhdGhUYXJnZXQgKm5ld3RhcmdldCA9IG1ha2VOb2RlKFBhdGhUYXJn ZXQpOworCisJCS8qIENvcHkgYWxsIGZsYXQtY29waWFibGUgZmllbGRzICovCisJCW1lbWNweShu ZXd0YXJnZXQsIG9sZHRhcmdldCwgc2l6ZW9mKFBhdGhUYXJnZXQpKTsKKworCQlpZiAob2xkdGFy Z2V0LT5zb3J0Z3JvdXByZWZzKQorCQl7CisJCQlTaXplCQluYnl0ZXMgPSBsaXN0X2xlbmd0aChv bGR0YXJnZXQtPmV4cHJzKSAqIHNpemVvZihJbmRleCk7CisKKwkJCW5ld3RhcmdldC0+ZXhwcnMg PSAoTGlzdCAqKQorCQkJCWFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBv bGR0YXJnZXQtPmV4cHJzLAorCQkJCQkJCQkJCQkgICBjb250ZXh0KTsKKworCQkJbmV3dGFyZ2V0 LT5zb3J0Z3JvdXByZWZzID0gKEluZGV4ICopIHBhbGxvYyhuYnl0ZXMpOworCQkJbWVtY3B5KG5l d3RhcmdldC0+c29ydGdyb3VwcmVmcywgb2xkdGFyZ2V0LT5zb3J0Z3JvdXByZWZzLCBuYnl0ZXMp OworCQl9CisKKwkJcmV0dXJuIChOb2RlICopIG5ld3RhcmdldDsKKwl9CisKIAkvKgogCSAqIE5P VEU6IHdlIGRvIG5vdCBuZWVkIHRvIHJlY3Vyc2UgaW50byBzdWJsaW5rcywgYmVjYXVzZSB0aGV5 IHNob3VsZAogCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBzdWJwbGFucyBiZWZv cmUgd2Ugc2VlIHRoZW0uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCA1 NGUwNDJhOGE1Li4zY2I0NTBiMzc2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2Rl LmMKQEAgLTI3MDIsOCArMjcwMiw3IEBAIGNyZWF0ZV9wcm9qZWN0aW9uX3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsCiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX1Jlc3VsdDsKIAlwYXRobm9k ZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHRhcmdldCA9IHRhcmdl dDsKLQkvKiBGb3Igbm93LCBhc3N1bWUgd2UgYXJlIGFib3ZlIGFueSBqb2lucywgc28gbm8gcGFy YW1ldGVyaXphdGlvbiAqLwotCXBhdGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBOVUxMOworCXBh dGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBzdWJwYXRoLT5wYXJhbV9pbmZvOwogCXBhdGhub2Rl LT5wYXRoLnBhcmFsbGVsX2F3YXJlID0gZmFsc2U7CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxf c2FmZSA9IHJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYKIAkJc3VicGF0aC0+cGFyYWxsZWxfc2Fm ZSAmJgpAQCAtMjk1NSw4ICsyOTU0LDcgQEAgY3JlYXRlX2luY3JlbWVudGFsX3NvcnRfcGF0aChQ bGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJLyogU29y dCBkb2Vzbid0IHByb2plY3QsIHNvIHVzZSBzb3VyY2UgcGF0aCdzIHBhdGh0YXJnZXQgKi8KIAlw YXRobm9kZS0+cGF0aC5wYXRodGFyZ2V0ID0gc3VicGF0aC0+cGF0aHRhcmdldDsKLQkvKiBGb3Ig bm93LCBhc3N1bWUgd2UgYXJlIGFib3ZlIGFueSBqb2lucywgc28gbm8gcGFyYW1ldGVyaXphdGlv biAqLwotCXBhdGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBOVUxMOworCXBhdGhub2RlLT5wYXRo LnBhcmFtX2luZm8gPSBzdWJwYXRoLT5wYXJhbV9pbmZvOwogCXBhdGhub2RlLT5wYXRoLnBhcmFs bGVsX2F3YXJlID0gZmFsc2U7CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfc2FmZSA9IHJlbC0+ Y29uc2lkZXJfcGFyYWxsZWwgJiYKIAkJc3VicGF0aC0+cGFyYWxsZWxfc2FmZTsKQEAgLTMwMDIs OCArMzAwMCw3IEBAIGNyZWF0ZV9zb3J0X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJcGF0aG5v ZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCS8qIFNvcnQgZG9lc24ndCBwcm9qZWN0LCBzbyB1c2Ug c291cmNlIHBhdGgncyBwYXRodGFyZ2V0ICovCiAJcGF0aG5vZGUtPnBhdGgucGF0aHRhcmdldCA9 IHN1YnBhdGgtPnBhdGh0YXJnZXQ7Ci0JLyogRm9yIG5vdywgYXNzdW1lIHdlIGFyZSBhYm92ZSBh bnkgam9pbnMsIHNvIG5vIHBhcmFtZXRlcml6YXRpb24gKi8KLQlwYXRobm9kZS0+cGF0aC5wYXJh bV9pbmZvID0gTlVMTDsKKwlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0gc3VicGF0aC0+cGFy YW1faW5mbzsKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9hd2FyZSA9IGZhbHNlOwogCXBhdGhu b2RlLT5wYXRoLnBhcmFsbGVsX3NhZmUgPSByZWwtPmNvbnNpZGVyX3BhcmFsbGVsICYmCiAJCXN1 YnBhdGgtPnBhcmFsbGVsX3NhZmU7CkBAIC0zMTYxLDggKzMxNTgsNyBAQCBjcmVhdGVfYWdnX3Bh dGgoUGxhbm5lckluZm8gKnJvb3QsCiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX0FnZzsK IAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHRhcmdl dCA9IHRhcmdldDsKLQkvKiBGb3Igbm93LCBhc3N1bWUgd2UgYXJlIGFib3ZlIGFueSBqb2lucywg c28gbm8gcGFyYW1ldGVyaXphdGlvbiAqLwotCXBhdGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBO VUxMOworCXBhdGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBzdWJwYXRoLT5wYXJhbV9pbmZvOwog CXBhdGhub2RlLT5wYXRoLnBhcmFsbGVsX2F3YXJlID0gZmFsc2U7CiAJcGF0aG5vZGUtPnBhdGgu cGFyYWxsZWxfc2FmZSA9IHJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYKIAkJc3VicGF0aC0+cGFy YWxsZWxfc2FmZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5v ZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCA3NmUxMzk3 MWY3Li4yOTgwNmEzOTY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9y ZWxub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC0x Niw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KIAorI2luY2x1ZGUgImNhdGFsb2cv cGdfY29uc3RyYWludC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVz L25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9hcHBlbmRpbmZvLmgiCkBAIC0yNywy MiArMjgsMjUgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRlICJvcHRp bWl6ZXIvcGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgorI2lu Y2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3Jlc3RyaWN0 aW5mby5oIgogI2luY2x1ZGUgIm9wdGltaXplci90bGlzdC5oIgorI2luY2x1ZGUgInBhcnNlci9w YXJzZV9vcGVyLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCiAjaW5jbHVk ZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAj aW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvc2VsZnVuY3MuaCIK IAogCiAvKgotICogQW4gZW50cnkgb2YgYSBoYXNoIHRhYmxlIHRoYXQgd2UgdXNlIHRvIG1ha2Ug bG9va3VwIGZvciBSZWxPcHRJbmZvCi0gKiBzdHJ1Y3R1cmVzIG1vcmUgZWZmaWNpZW50LgorICog QW4gZW50cnkgb2YgYSBoYXNoIHRhYmxlIHRoYXQgd2UgdXNlIHRvIG1ha2UgbG9va3VwIGZvciBS ZWxPcHRJbmZvIG9yCisgKiBSZWxBZ2dJbmZvIHN0cnVjdHVyZXMgbW9yZSBlZmZpY2llbnQuCiAg Ki8KIHR5cGVkZWYgc3RydWN0IFJlbEluZm9FbnRyeQogewogCVJlbGlkcwkJcmVsaWRzOwkJCS8q IGhhc2gga2V5IC0tLSBNVVNUIEJFIEZJUlNUICovCi0JUmVsT3B0SW5mbyAqcmVsOworCXZvaWQJ ICAgKmRhdGE7CiB9IFJlbEluZm9FbnRyeTsKIAogc3RhdGljIHZvaWQgYnVpbGRfam9pbnJlbF90 bGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKQEAgLTg3LDYgKzkx LDE0IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX2NoaWxkX2pvaW5fcmVsdGFyZ2V0KFBsYW5uZXJJbmZv ICpyb290LAogCQkJCQkJCQkJICAgUmVsT3B0SW5mbyAqY2hpbGRyZWwsCiAJCQkJCQkJCQkgICBp bnQgbmFwcGluZm9zLAogCQkJCQkJCQkJICAgQXBwZW5kUmVsSW5mbyAqKmFwcGluZm9zKTsKK3N0 YXRpYyBib29sIGVhZ2VyX2FnZ3JlZ2F0aW9uX3Bvc3NpYmxlX2Zvcl9yZWxhdGlvbihQbGFubmVy SW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwpOworc3RhdGljIGJvb2wg aW5pdF9ncm91cGluZ190YXJnZXRzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CisJCQkJCQkJCSAgUGF0aFRhcmdldCAqdGFyZ2V0LCBQYXRoVGFyZ2V0ICphZ2dfaW5wdXQsCisJ CQkJCQkJCSAgTGlzdCAqKmdyb3VwX2NsYXVzZXMsIExpc3QgKipncm91cF9leHBycyk7CitzdGF0 aWMgYm9vbCBpc192YXJfaW5fYWdncmVmX29ubHkoUGxhbm5lckluZm8gKnJvb3QsIFZhciAqdmFy KTsKK3N0YXRpYyBib29sIGlzX3Zhcl9uZWVkZWRfYnlfam9pbihQbGFubmVySW5mbyAqcm9vdCwg VmFyICp2YXIsIFJlbE9wdEluZm8gKnJlbCk7CitzdGF0aWMgSW5kZXggZ2V0X2V4cHJlc3Npb25f c29ydGdyb3VwcmVmKFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHByKTsKIAogCiAvKgpAQCAt NDEwLDYgKzQyMiwxMDEgQEAgYnVpbGRfc2ltcGxlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50 IHJlbGlkLCBSZWxPcHRJbmZvICpwYXJlbnQpCiAJcmV0dXJuIHJlbDsKIH0KIAorLyoKKyAqIGJ1 aWxkX3NpbXBsZV9ncm91cGVkX3JlbAorICoJICBDb25zdHJ1Y3QgYSBuZXcgUmVsT3B0SW5mbyBm b3IgYSBncm91cGVkIGJhc2UgcmVsYXRpb24gb3V0IG9mIGFuIGV4aXN0aW5nCisgKgkgIG5vbi1n cm91cGVkIGJhc2UgcmVsYXRpb24uCisgKgorICogT24gc3VjY2VzcywgdGhlIG5ldyBSZWxPcHRJ bmZvIGlzIHJldHVybmVkIGFuZCB0aGUgY29ycmVzcG9uZGluZyBSZWxBZ2dJbmZvCisgKiBpcyBz dG9yZWQgaW4gKmFnZ19pbmZvX3AuCisgKi8KK1JlbE9wdEluZm8gKgorYnVpbGRfc2ltcGxlX2dy b3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsCisJCQkJCQkgUmVsQWdnSW5m byAqKmFnZ19pbmZvX3ApCit7CisJUmVsT3B0SW5mbyAqcmVsX3BsYWluOworCVJlbE9wdEluZm8g KnJlbF9ncm91cGVkOworCVJlbEFnZ0luZm8gKmFnZ19pbmZvOworCisJLyoKKwkgKiBXZSBzaG91 bGQgaGF2ZSBhdmFpbGFibGUgYWdncmVnYXRlIGV4cHJlc3Npb25zIGFuZCBncm91cGluZworCSAq IGV4cHJlc3Npb25zLCBvdGhlcndpc2Ugd2UgY2Fubm90IHJlYWNoIGhlcmUuCisJICovCisJQXNz ZXJ0KHJvb3QtPmFnZ19jbGF1c2VfbGlzdCAhPSBOSUwpOworCUFzc2VydChyb290LT5ncm91cF9l eHByX2xpc3QgIT0gTklMKTsKKworCXJlbF9wbGFpbiA9IGZpbmRfYmFzZV9yZWwocm9vdCwgcmVs aWQpOworCisJLyogbm90aGluZyB0byBkbyBmb3IgZHVtbXkgcmVsICovCisJaWYgKElTX0RVTU1Z X1JFTChyZWxfcGxhaW4pKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogUHJlcGFyZSB0aGUg aW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSBncm91cGVkIHBhdGhzIGZvciB0aGlzIGJhc2UK KwkgKiByZWxhdGlvbi4KKwkgKi8KKwlhZ2dfaW5mbyA9IGNyZWF0ZV9yZWxfYWdnX2luZm8ocm9v dCwgcmVsX3BsYWluKTsKKwlpZiAoYWdnX2luZm8gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisK KwkvKiBidWlsZCBhIGdyb3VwZWQgcmVsYXRpb24gb3V0IG9mIHRoZSBwbGFpbiByZWxhdGlvbiAq LworCXJlbF9ncm91cGVkID0gYnVpbGRfZ3JvdXBlZF9yZWwocm9vdCwgcmVsX3BsYWluKTsKKwly ZWxfZ3JvdXBlZC0+cmVsdGFyZ2V0ID0gYWdnX2luZm8tPnRhcmdldDsKKwlyZWxfZ3JvdXBlZC0+ cm93cyA9IGFnZ19pbmZvLT5ncm91cGVkX3Jvd3M7CisKKwkvKiByZXR1cm4gdGhlIFJlbEFnZ0lu Zm8gc3RydWN0dXJlICovCisJKmFnZ19pbmZvX3AgPSBhZ2dfaW5mbzsKKworCXJldHVybiByZWxf Z3JvdXBlZDsKK30KKworLyoKKyAqIGJ1aWxkX2dyb3VwZWRfcmVsCisgKgkgIEJ1aWxkIGEgZ3Jv dXBlZCByZWxhdGlvbiBieSBmbGF0IGNvcHlpbmcgYSBwbGFpbiByZWxhdGlvbiBhbmQgcmVzZXR0 aW5nCisgKgkgIHRoZSBuZWNlc3NhcnkgZmllbGRzLgorICovCitSZWxPcHRJbmZvICoKK2J1aWxk X2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWxfcGxhaW4pCit7 CisJUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisKKwlyZWxfZ3JvdXBlZCA9IG1ha2VOb2RlKFJl bE9wdEluZm8pOworCW1lbWNweShyZWxfZ3JvdXBlZCwgcmVsX3BsYWluLCBzaXplb2YoUmVsT3B0 SW5mbykpOworCisJLyoKKwkgKiBjbGVhciBwYXRoIGluZm8KKwkgKi8KKwlyZWxfZ3JvdXBlZC0+ cGF0aGxpc3QgPSBOSUw7CisJcmVsX2dyb3VwZWQtPnBwaWxpc3QgPSBOSUw7CisJcmVsX2dyb3Vw ZWQtPnBhcnRpYWxfcGF0aGxpc3QgPSBOSUw7CisJcmVsX2dyb3VwZWQtPmNoZWFwZXN0X3N0YXJ0 dXBfcGF0aCA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPmNoZWFwZXN0X3RvdGFsX3BhdGggPSBOVUxM OworCXJlbF9ncm91cGVkLT5jaGVhcGVzdF91bmlxdWVfcGF0aCA9IE5VTEw7CisJcmVsX2dyb3Vw ZWQtPmNoZWFwZXN0X3BhcmFtZXRlcml6ZWRfcGF0aHMgPSBOSUw7CisKKwkvKgorCSAqIGNsZWFy IHBhcnRpdGlvbiBpbmZvCisJICovCisJcmVsX2dyb3VwZWQtPnBhcnRfc2NoZW1lID0gTlVMTDsK KwlyZWxfZ3JvdXBlZC0+bnBhcnRzID0gLTE7CisJcmVsX2dyb3VwZWQtPmJvdW5kaW5mbyA9IE5V TEw7CisJcmVsX2dyb3VwZWQtPnBhcnRib3VuZHNfbWVyZ2VkID0gZmFsc2U7CisJcmVsX2dyb3Vw ZWQtPnBhcnRpdGlvbl9xdWFsID0gTklMOworCXJlbF9ncm91cGVkLT5wYXJ0X3JlbHMgPSBOVUxM OworCXJlbF9ncm91cGVkLT5saXZlX3BhcnRzID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+YWxsX3Bh cnRyZWxzID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+cGFydGV4cHJzID0gTlVMTDsKKwlyZWxfZ3Jv dXBlZC0+bnVsbGFibGVfcGFydGV4cHJzID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+Y29uc2lkZXJf cGFydGl0aW9ud2lzZV9qb2luID0gZmFsc2U7CisKKwkvKgorCSAqIGNsZWFyIHNpemUgZXN0aW1h dGVzCisJICovCisJcmVsX2dyb3VwZWQtPnJvd3MgPSAwOworCisJcmV0dXJuIHJlbF9ncm91cGVk OworfQorCiAvKgogICogZmluZF9iYXNlX3JlbAogICoJICBGaW5kIGEgYmFzZSBvciBvdGhlcnJl bCByZWxhdGlvbiBlbnRyeSwgd2hpY2ggbXVzdCBhbHJlYWR5IGV4aXN0LgpAQCAtNDg0LDcgKzU5 MSw3IEBAIGZpbmRfYmFzZV9yZWxfaWdub3JlX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIGludCBy ZWxpZCkKIAogLyoKICAqIGJ1aWxkX3JlbF9oYXNoCi0gKgkgIENvbnN0cnVjdCB0aGUgYXV4aWxp YXJ5IGhhc2ggdGFibGUgZm9yIHJlbGF0aW9ucy4KKyAqCSAgQ29uc3RydWN0IHRoZSBhdXhpbGlh cnkgaGFzaCB0YWJsZSBmb3IgcmVsYXRpb24tc3BlY2lmaWMgZW50cmllcy4KICAqLwogc3RhdGlj IHZvaWQKIGJ1aWxkX3JlbF9oYXNoKFJlbEluZm9MaXN0ICpsaXN0KQpAQCAtNTA0LDE5ICs2MTEs MjcgQEAgYnVpbGRfcmVsX2hhc2goUmVsSW5mb0xpc3QgKmxpc3QpCiAJCQkJCQkgICZoYXNoX2N0 bCwKIAkJCQkJCSAgSEFTSF9FTEVNIHwgSEFTSF9GVU5DVElPTiB8IEhBU0hfQ09NUEFSRSB8IEhB U0hfQ09OVEVYVCk7CiAKLQkvKiBJbnNlcnQgYWxsIHRoZSBhbHJlYWR5LWV4aXN0aW5nIHJlbGF0 aW9ucyAqLworCS8qIEluc2VydCBhbGwgdGhlIGFscmVhZHktZXhpc3RpbmcgcmVsYXRpb24tc3Bl Y2lmaWMgZW50cmllcyAqLwogCWZvcmVhY2gobCwgbGlzdC0+aXRlbXMpCiAJewotCQlSZWxPcHRJ bmZvICpyZWwgPSAoUmVsT3B0SW5mbyAqKSBsZmlyc3QobCk7CisJCXZvaWQJICAgKml0ZW0gPSBs Zmlyc3QobCk7CiAJCVJlbEluZm9FbnRyeSAqaGVudHJ5OwogCQlib29sCQlmb3VuZDsKKwkJUmVs aWRzCQlyZWxpZHM7CisKKwkJQXNzZXJ0KElzQShpdGVtLCBSZWxPcHRJbmZvKSB8fCBJc0EoaXRl bSwgUmVsQWdnSW5mbykpOworCisJCWlmIChJc0EoaXRlbSwgUmVsT3B0SW5mbykpCisJCQlyZWxp ZHMgPSAoKFJlbE9wdEluZm8gKikgaXRlbSktPnJlbGlkczsKKwkJZWxzZQorCQkJcmVsaWRzID0g KChSZWxBZ2dJbmZvICopIGl0ZW0pLT5yZWxpZHM7CiAKIAkJaGVudHJ5ID0gKFJlbEluZm9FbnRy eSAqKSBoYXNoX3NlYXJjaChoYXNodGFiLAotCQkJCQkJCQkJCQkgICYocmVsLT5yZWxpZHMpLAor CQkJCQkJCQkJCQkgICZyZWxpZHMsCiAJCQkJCQkJCQkJCSAgSEFTSF9FTlRFUiwKIAkJCQkJCQkJ CQkJICAmZm91bmQpOwogCQlBc3NlcnQoIWZvdW5kKTsKLQkJaGVudHJ5LT5yZWwgPSByZWw7CisJ CWhlbnRyeS0+ZGF0YSA9IGl0ZW07CiAJfQogCiAJbGlzdC0+aGFzaCA9IGhhc2h0YWI7CkBAIC01 MjQsOSArNjM5LDkgQEAgYnVpbGRfcmVsX2hhc2goUmVsSW5mb0xpc3QgKmxpc3QpCiAKIC8qCiAg KiBmaW5kX3JlbF9pbmZvCi0gKgkgIEZpbmQgYW4gUmVsT3B0SW5mbyBlbnRyeS4KKyAqCSAgRmlu ZCBhIFJlbE9wdEluZm8gb3IgYSBSZWxBZ2dJbmZvIGVudHJ5LgogICovCi1zdGF0aWMgUmVsT3B0 SW5mbyAqCitzdGF0aWMgdm9pZCAqCiBmaW5kX3JlbF9pbmZvKFJlbEluZm9MaXN0ICpsaXN0LCBS ZWxpZHMgcmVsaWRzKQogewogCWlmIChsaXN0ID09IE5VTEwpCkBAIC01NTcsNyArNjcyLDcgQEAg ZmluZF9yZWxfaW5mbyhSZWxJbmZvTGlzdCAqbGlzdCwgUmVsaWRzIHJlbGlkcykKIAkJCQkJCQkJ CQkJICBIQVNIX0ZJTkQsCiAJCQkJCQkJCQkJCSAgTlVMTCk7CiAJCWlmIChoZW50cnkpCi0JCQly ZXR1cm4gaGVudHJ5LT5yZWw7CisJCQlyZXR1cm4gaGVudHJ5LT5kYXRhOwogCX0KIAllbHNlCiAJ ewpAQCAtNTY1LDEwICs2ODAsMTggQEAgZmluZF9yZWxfaW5mbyhSZWxJbmZvTGlzdCAqbGlzdCwg UmVsaWRzIHJlbGlkcykKIAogCQlmb3JlYWNoKGwsIGxpc3QtPml0ZW1zKQogCQl7Ci0JCQlSZWxP cHRJbmZvICpyZWwgPSAoUmVsT3B0SW5mbyAqKSBsZmlyc3QobCk7CisJCQl2b2lkCSAgICppdGVt ID0gbGZpcnN0KGwpOworCQkJUmVsaWRzCQlpdGVtX3JlbGlkczsKKworCQkJQXNzZXJ0KElzQShp dGVtLCBSZWxPcHRJbmZvKSB8fCBJc0EoaXRlbSwgUmVsQWdnSW5mbykpOwogCi0JCQlpZiAoYm1z X2VxdWFsKHJlbC0+cmVsaWRzLCByZWxpZHMpKQotCQkJCXJldHVybiByZWw7CisJCQlpZiAoSXNB KGl0ZW0sIFJlbE9wdEluZm8pKQorCQkJCWl0ZW1fcmVsaWRzID0gKChSZWxPcHRJbmZvICopIGl0 ZW0pLT5yZWxpZHM7CisJCQllbHNlCisJCQkJaXRlbV9yZWxpZHMgPSAoKFJlbEFnZ0luZm8gKikg aXRlbSktPnJlbGlkczsKKworCQkJaWYgKGJtc19lcXVhbChpdGVtX3JlbGlkcywgcmVsaWRzKSkK KwkJCQlyZXR1cm4gaXRlbTsKIAkJfQogCX0KIApAQCAtNTgzLDQ0ICs3MDYsNDYgQEAgZmluZF9y ZWxfaW5mbyhSZWxJbmZvTGlzdCAqbGlzdCwgUmVsaWRzIHJlbGlkcykKIFJlbE9wdEluZm8gKgog ZmluZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcykKIHsKLQlyZXR1 cm4gZmluZF9yZWxfaW5mbyhyb290LT5qb2luX3JlbF9saXN0LCByZWxpZHMpOworCXJldHVybiAo UmVsT3B0SW5mbyAqKSBmaW5kX3JlbF9pbmZvKHJvb3QtPmpvaW5fcmVsX2xpc3QsIHJlbGlkcyk7 CiB9CiAKIC8qCi0gKiBhZGRfcmVsX2luZm8KLSAqCQlBZGQgZ2l2ZW4gcmVsYXRpb24gdG8gdGhl IGdpdmVuIGxpc3QuIEFsc28gYWRkIGl0IHRvIHRoZSBhdXhpbGlhcnkKLSAqCQloYXNodGFibGUg aWYgdGhlcmUgaXMgb25lLgorICogZmluZF9ncm91cGVkX3JlbAorICoJICBSZXR1cm5zIHJlbGF0 aW9uIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gJ3JlbGlkcycgKGEgc2V0IG9mIFJUIGluZGV4ZXMp LAorICoJICBvciBOVUxMIGlmIG5vbmUgZXhpc3RzLiAgVGhpcyBpcyBmb3IgZ3JvdXBlZCByZWxh dGlvbnMuCisgKgorICogSWYgYWdnX2luZm9fcCBpcyBub3QgTlVMTCwgdGhlbiBhbHNvIHRoZSBj b3JyZXNwb25kaW5nIFJlbEFnZ0luZm8gKGlmIG9uZQorICogZXhpc3RzKSB3aWxsIGJlIHJldHVy bmVkIGluICphZ2dfaW5mb19wLgogICovCi1zdGF0aWMgdm9pZAotYWRkX3JlbF9pbmZvKFJlbElu Zm9MaXN0ICpsaXN0LCBSZWxPcHRJbmZvICpyZWwpCitSZWxPcHRJbmZvICoKK2ZpbmRfZ3JvdXBl ZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMsIFJlbEFnZ0luZm8gKiphZ2df aW5mb19wKQogewotCS8qIEdFUU8gcmVxdWlyZXMgdXMgdG8gYXBwZW5kIHRoZSBuZXcgcmVsYXRp b24gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCEgKi8KLQlsaXN0LT5pdGVtcyA9IGxhcHBlbmQobGlz dC0+aXRlbXMsIHJlbCk7CisJUmVsT3B0SW5mbyAqcmVsOwogCi0JLyogc3RvcmUgaXQgaW50byB0 aGUgYXV4aWxpYXJ5IGhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUuICovCi0JaWYgKGxpc3QtPmhh c2gpCisJcmVsID0gKFJlbE9wdEluZm8gKikgZmluZF9yZWxfaW5mbygmcm9vdC0+dXBwZXJfcmVs c1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10sCisJCQkJCQkJCQkgICByZWxpZHMpOworCWlm IChyZWwgPT0gTlVMTCkKIAl7Ci0JCVJlbEluZm9FbnRyeSAqaGVudHJ5OwotCQlib29sCQlmb3Vu ZDsKKwkJaWYgKGFnZ19pbmZvX3ApCisJCQkqYWdnX2luZm9fcCA9IE5VTEw7CiAKLQkJaGVudHJ5 ID0gKFJlbEluZm9FbnRyeSAqKSBoYXNoX3NlYXJjaChsaXN0LT5oYXNoLAotCQkJCQkJCQkJCQkg ICYocmVsLT5yZWxpZHMpLAotCQkJCQkJCQkJCQkgIEhBU0hfRU5URVIsCi0JCQkJCQkJCQkJCSAg JmZvdW5kKTsKLQkJQXNzZXJ0KCFmb3VuZCk7Ci0JCWhlbnRyeS0+cmVsID0gcmVsOworCQlyZXR1 cm4gTlVMTDsKIAl9Ci19CiAKLS8qCi0gKiBhZGRfam9pbl9yZWwKLSAqCQlBZGQgZ2l2ZW4gam9p biByZWxhdGlvbiB0byB0aGUgbGlzdCBvZiBqb2luIHJlbGF0aW9ucyBpbiB0aGUgZ2l2ZW4KLSAq CQlQbGFubmVySW5mby4KLSAqLwotc3RhdGljIHZvaWQKLWFkZF9qb2luX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCkKLXsKLQlhZGRfcmVsX2luZm8ocm9vdC0+am9p bl9yZWxfbGlzdCwgam9pbnJlbCk7CisJLyogYWxzbyByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcg UmVsQWdnSW5mbywgaWYgYXNrZWQgKi8KKwlpZiAoYWdnX2luZm9fcCkKKwl7CisJCVJlbEFnZ0lu Zm8gKmFnZ19pbmZvOworCisJCWFnZ19pbmZvID0gKFJlbEFnZ0luZm8gKikgZmluZF9yZWxfaW5m byhyb290LT5hZ2dfaW5mb19saXN0LCByZWxpZHMpOworCisJCS8qIFRoZSByZWxhdGlvbiBleGlz dHMsIHNvIHRoZSBhZ2dfaW5mbyBzaG91bGQgYmUgdGhlcmUgdG9vLiAqLworCQlBc3NlcnQoYWdn X2luZm8gIT0gTlVMTCk7CisKKwkJKmFnZ19pbmZvX3AgPSBhZ2dfaW5mbzsKKwl9CisKKwlyZXR1 cm4gcmVsOwogfQogCiAvKgpAQCAtNjcyLDYgKzc5Nyw2NCBAQCBzZXRfZm9yZWlnbl9yZWxfcHJv cGVydGllcyhSZWxPcHRJbmZvICpqb2lucmVsLCBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCiAJfQog fQogCisvKgorICogYWRkX3JlbF9pbmZvCisgKgkJQWRkIHJlbGF0aW9uLXNwZWNpZmljIGVudHJ5 IHRvIGEgbGlzdCwgYW5kIGFsc28gYWRkIGl0IHRvIHRoZSBhdXhpbGlhcnkKKyAqCQloYXNodGFi bGUgaWYgdGhlcmUgaXMgb25lLgorICovCitzdGF0aWMgdm9pZAorYWRkX3JlbF9pbmZvKFJlbElu Zm9MaXN0ICpsaXN0LCB2b2lkICpkYXRhKQoreworCUFzc2VydChJc0EoZGF0YSwgUmVsT3B0SW5m bykgfHwgSXNBKGRhdGEsIFJlbEFnZ0luZm8pKTsKKworCS8qIEdFUU8gcmVxdWlyZXMgdXMgdG8g YXBwZW5kIHRoZSBuZXcgcmVsYXRpb24gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCEgKi8KKwlsaXN0 LT5pdGVtcyA9IGxhcHBlbmQobGlzdC0+aXRlbXMsIGRhdGEpOworCisJLyogc3RvcmUgaXQgaW50 byB0aGUgYXV4aWxpYXJ5IGhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUuICovCisJaWYgKGxpc3Qt Pmhhc2gpCisJeworCQlSZWxJbmZvRW50cnkgKmhlbnRyeTsKKwkJYm9vbAkJZm91bmQ7CisJCVJl bGlkcwkJcmVsaWRzOworCisJCWlmIChJc0EoZGF0YSwgUmVsT3B0SW5mbykpCisJCQlyZWxpZHMg PSAoKFJlbE9wdEluZm8gKikgZGF0YSktPnJlbGlkczsKKwkJZWxzZQorCQkJcmVsaWRzID0gKChS ZWxBZ2dJbmZvICopIGRhdGEpLT5yZWxpZHM7CisKKwkJaGVudHJ5ID0gKFJlbEluZm9FbnRyeSAq KSBoYXNoX3NlYXJjaChsaXN0LT5oYXNoLAorCQkJCQkJCQkJCQkgICZyZWxpZHMsCisJCQkJCQkJ CQkJCSAgSEFTSF9FTlRFUiwKKwkJCQkJCQkJCQkJICAmZm91bmQpOworCQlBc3NlcnQoIWZvdW5k KTsKKwkJaGVudHJ5LT5kYXRhID0gZGF0YTsKKwl9Cit9CisKKy8qCisgKiBhZGRfam9pbl9yZWwK KyAqCQlBZGQgZ2l2ZW4gam9pbiByZWxhdGlvbiB0byB0aGUgbGlzdCBvZiBqb2luIHJlbGF0aW9u cyBpbiB0aGUgZ2l2ZW4KKyAqCQlQbGFubmVySW5mby4KKyAqLworc3RhdGljIHZvaWQKK2FkZF9q b2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCkKK3sKKwlhZGRf cmVsX2luZm8ocm9vdC0+am9pbl9yZWxfbGlzdCwgam9pbnJlbCk7Cit9CisKKy8qCisgKiBhZGRf Z3JvdXBlZF9yZWwKKyAqCQlBZGQgZ2l2ZW4gZ3JvdXBlZCByZWxhdGlvbiB0byB0aGUgbGlzdCBv ZiBncm91cGVkIHJlbGF0aW9ucyBpbiB0aGUKKyAqCQlnaXZlbiBQbGFubmVySW5mby4gIEFsc28g YWRkIHRoZSBjb3JyZXNwb25kaW5nIFJlbEFnZ0luZm8gdG8KKyAqCQlyb290LT5hZ2dfaW5mb19s aXN0LgorICovCit2b2lkCithZGRfZ3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwgUmVsQWdnSW5mbyAqYWdnX2luZm8pCit7CisJYWRkX3JlbF9pbmZvKCZyb290 LT51cHBlcl9yZWxzW1VQUEVSUkVMX1BBUlRJQUxfR1JPVVBfQUdHXSwgcmVsKTsKKwlhZGRfcmVs X2luZm8ocm9vdC0+YWdnX2luZm9fbGlzdCwgYWdnX2luZm8pOworfQorCiAvKgogICogYnVpbGRf am9pbl9yZWwKICAqCSAgUmV0dXJucyByZWxhdGlvbiBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRo ZSB1bmlvbiBvZiB0d28gZ2l2ZW4gcmVscywKQEAgLTE0OTEsNyArMTY3NCw3IEBAIGZldGNoX3Vw cGVyX3JlbChQbGFubmVySW5mbyAqcm9vdCwgVXBwZXJSZWxhdGlvbktpbmQga2luZCwgUmVsaWRz IHJlbGlkcykKIAkvKiBJZiB3ZSBhbHJlYWR5IG1hZGUgdGhpcyB1cHBlcnJlbCBmb3IgdGhlIHF1 ZXJ5LCByZXR1cm4gaXQgKi8KIAlpZiAobGlzdCkKIAl7Ci0JCXVwcGVycmVsID0gZmluZF9yZWxf aW5mbyhsaXN0LCByZWxpZHMpOworCQl1cHBlcnJlbCA9IChSZWxPcHRJbmZvICopIGZpbmRfcmVs X2luZm8obGlzdCwgcmVsaWRzKTsKIAkJaWYgKHVwcGVycmVsKQogCQkJcmV0dXJuIHVwcGVycmVs OwogCX0KQEAgLTI1MjgsMyArMjcxMSw0NzEgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWx0YXJnZXQo UGxhbm5lckluZm8gKnJvb3QsCiAJY2hpbGRyZWwtPnJlbHRhcmdldC0+Y29zdC5wZXJfdHVwbGUg PSBwYXJlbnRyZWwtPnJlbHRhcmdldC0+Y29zdC5wZXJfdHVwbGU7CiAJY2hpbGRyZWwtPnJlbHRh cmdldC0+d2lkdGggPSBwYXJlbnRyZWwtPnJlbHRhcmdldC0+d2lkdGg7CiB9CisKKy8qCisgKiBj cmVhdGVfcmVsX2FnZ19pbmZvCisgKgkgIENyZWF0ZSB0aGUgUmVsQWdnSW5mbyBzdHJ1Y3R1cmUg Zm9yIHRoZSBnaXZlbiByZWxhdGlvbiBpZiBpdCBjYW4gcHJvZHVjZQorICoJICBncm91cGVkIHBh dGhzLiAgVGhlIGdpdmVuIHJlbGF0aW9uIGlzIHRoZSBub24tZ3JvdXBlZCBvbmUgd2hpY2ggaGFz IHRoZQorICoJICByZWx0YXJnZXQgYWxyZWFkeSBjb25zdHJ1Y3RlZC4KKyAqLworUmVsQWdnSW5m byAqCitjcmVhdGVfcmVsX2FnZ19pbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwpCit7CisJTGlzdENlbGwgICAqbGM7CisJUmVsQWdnSW5mbyAqcmVzdWx0OworCVBhdGhUYXJn ZXQgKmFnZ19pbnB1dDsKKwlQYXRoVGFyZ2V0ICp0YXJnZXQ7CisJTGlzdAkgICAqZ3JvdXBfY2xh dXNlcyA9IE5JTDsKKwlMaXN0CSAgICpncm91cF9leHBycyA9IE5JTDsKKworCS8qCisJICogVGhl IGxpc3RzIG9mIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBhbmQgZ3JvdXBpbmcgZXhwcmVzc2lvbnMg c2hvdWxkIGhhdmUKKwkgKiBiZWVuIGNvbnN0cnVjdGVkLgorCSAqLworCUFzc2VydChyb290LT5h Z2dfY2xhdXNlX2xpc3QgIT0gTklMKTsKKwlBc3NlcnQocm9vdC0+Z3JvdXBfZXhwcl9saXN0ICE9 IE5JTCk7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBjaGlsZCByZWwsIHRoZSBncm91cGVkIHJl bCBmb3IgaXRzIHBhcmVudCByZWwgbXVzdCBoYXZlCisJICogYmVlbiBjcmVhdGVkIGlmIGl0IGNh bi4gIFNvIHdlIGNhbiBqdXN0IHVzZSBwYXJlbnQncyBSZWxBZ2dJbmZvIGlmCisJICogdGhlcmUg aXMgb25lLCB3aXRoIGFwcHJvcHJpYXRlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbnMuCisJICovCisJ aWYgKElTX09USEVSX1JFTChyZWwpKQorCXsKKwkJUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisJ CVJlbEFnZ0luZm8gKmFnZ19pbmZvOworCisJCUFzc2VydCghYm1zX2lzX2VtcHR5KHJlbC0+dG9w X3BhcmVudF9yZWxpZHMpKTsKKwkJcmVsX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3Qs IHJlbC0+dG9wX3BhcmVudF9yZWxpZHMsICZhZ2dfaW5mbyk7CisKKwkJaWYgKHJlbF9ncm91cGVk ID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKworCQlBc3NlcnQoYWdnX2luZm8gIT0gTlVMTCk7 CisJCS8qIE11c3QgZG8gbXVsdGktbGV2ZWwgdHJhbnNmb3JtYXRpb24gKi8KKwkJYWdnX2luZm8g PSAoUmVsQWdnSW5mbyAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdWx0aWxldmVsKHJv b3QsCisJCQkJCQkJCQkJCSAgKE5vZGUgKikgYWdnX2luZm8sCisJCQkJCQkJCQkJCSAgcmVsLAor CQkJCQkJCQkJCQkgIHJlbC0+dG9wX3BhcmVudCk7CisKKwkJYWdnX2luZm8tPmdyb3VwZWRfcm93 cyA9CisJCQllc3RpbWF0ZV9udW1fZ3JvdXBzKHJvb3QsIGFnZ19pbmZvLT5ncm91cF9leHBycywK KwkJCQkJCQkJcmVsLT5yb3dzLCBOVUxMLCBOVUxMKTsKKworCQlyZXR1cm4gYWdnX2luZm87CisJ fQorCisJLyogQ2hlY2sgaWYgaXQncyBwb3NzaWJsZSB0byBwcm9kdWNlIGdyb3VwZWQgcGF0aHMg Zm9yIHRoaXMgcmVsYXRpb24uICovCisJaWYgKCFlYWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9m b3JfcmVsYXRpb24ocm9vdCwgcmVsKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIENyZWF0 ZSB0YXJnZXRzIGZvciB0aGUgZ3JvdXBlZCBwYXRocyBhbmQgZm9yIHRoZSBpbnB1dCBwYXRocyBv ZiB0aGUKKwkgKiBncm91cGVkIHBhdGhzLgorCSAqLworCXRhcmdldCA9IGNyZWF0ZV9lbXB0eV9w YXRodGFyZ2V0KCk7CisJYWdnX2lucHV0ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJnZXQoKTsKKwor CS8qIC4uLiBhbmQgaW5pdGlhbGl6ZSB0aGVzZSB0YXJnZXRzICovCisJaWYgKCFpbml0X2dyb3Vw aW5nX3RhcmdldHMocm9vdCwgcmVsLCB0YXJnZXQsIGFnZ19pbnB1dCwKKwkJCQkJCQkgICAmZ3Jv dXBfY2xhdXNlcywgJmdyb3VwX2V4cHJzKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIEVh Z2VyIGFnZ3JlZ2F0aW9uIGlzIG5vdCBhcHBsaWNhYmxlIGlmIHRoZXJlIGFyZSBubyBhdmFpbGFi bGUgZ3JvdXBpbmcKKwkgKiBleHByZXNzaW9ucy4KKwkgKi8KKwlpZiAobGlzdF9sZW5ndGgoZ3Jv dXBfY2xhdXNlcykgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBidWlsZCB0aGUgUmVsQWdn SW5mbyByZXN1bHQgKi8KKwlyZXN1bHQgPSBtYWtlTm9kZShSZWxBZ2dJbmZvKTsKKworCXJlc3Vs dC0+Z3JvdXBfY2xhdXNlcyA9IGdyb3VwX2NsYXVzZXM7CisJcmVzdWx0LT5ncm91cF9leHBycyA9 IGdyb3VwX2V4cHJzOworCisJLyogQ2FsY3VsYXRlIHBhdGhrZXlzIHRoYXQgcmVwcmVzZW50IHRo aXMgZ3JvdXBpbmcgcmVxdWlyZW1lbnRzICovCisJcmVzdWx0LT5ncm91cF9wYXRoa2V5cyA9CisJ CW1ha2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1c2VzKHJvb3QsIHJlc3VsdC0+Z3JvdXBfY2xhdXNl cywKKwkJCQkJCQkJCSAgbWFrZV90bGlzdF9mcm9tX3BhdGh0YXJnZXQodGFyZ2V0KSk7CisKKwkv KiBBZGQgYWdncmVnYXRlcyB0byB0aGUgZ3JvdXBpbmcgdGFyZ2V0ICovCisJZm9yZWFjaChsYywg cm9vdC0+YWdnX2NsYXVzZV9saXN0KQorCXsKKwkJQWdnQ2xhdXNlSW5mbyAqYWNfaW5mbyA9IGxm aXJzdF9ub2RlKEFnZ0NsYXVzZUluZm8sIGxjKTsKKwkJQWdncmVmCSAgICphZ2dyZWY7CisKKwkJ QXNzZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYsIEFnZ3JlZikpOworCisJCWFnZ3JlZiA9IChBZ2dy ZWYgKikgY29weU9iamVjdChhY19pbmZvLT5hZ2dyZWYpOworCQltYXJrX3BhcnRpYWxfYWdncmVm KGFnZ3JlZiwgQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwpOworCisJCWFkZF9jb2x1bW5fdG9fcGF0 aHRhcmdldCh0YXJnZXQsIChFeHByICopIGFnZ3JlZiwgMCk7CisJfQorCisJLyogU2V0IHRoZSBl c3RpbWF0ZWQgZXZhbCBjb3N0IGFuZCBvdXRwdXQgd2lkdGggZm9yIGJvdGggdGFyZ2V0cyAqLwor CXNldF9wYXRodGFyZ2V0X2Nvc3Rfd2lkdGgocm9vdCwgdGFyZ2V0KTsKKwlzZXRfcGF0aHRhcmdl dF9jb3N0X3dpZHRoKHJvb3QsIGFnZ19pbnB1dCk7CisKKwlyZXN1bHQtPnJlbGlkcyA9IGJtc19j b3B5KHJlbC0+cmVsaWRzKTsKKwlyZXN1bHQtPnRhcmdldCA9IHRhcmdldDsKKwlyZXN1bHQtPmFn Z19pbnB1dCA9IGFnZ19pbnB1dDsKKwlyZXN1bHQtPmdyb3VwZWRfcm93cyA9IGVzdGltYXRlX251 bV9ncm91cHMocm9vdCwgcmVzdWx0LT5ncm91cF9leHBycywKKwkJCQkJCQkJCQkJICAgcmVsLT5y b3dzLCBOVUxMLCBOVUxMKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBlYWdlcl9h Z2dyZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVsYXRpb24KKyAqIAkgIENoZWNrIGlmIGl0J3MgcG9z c2libGUgdG8gcHJvZHVjZSBncm91cGVkIHBhdGhzIGZvciB0aGUgZ2l2ZW4gcmVsYXRpb24uCisg Ki8KK3N0YXRpYyBib29sCitlYWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVsYXRpb24o UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsK KwlpbnQJCQljdXJfcmVsaWQ7CisKKwkvKgorCSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgZ2l2ZW4g cmVsYXRpb24gaXMgaW4gdGhlIG51bGxhYmxlIHNpZGUgb2YgYW4gb3V0ZXIKKwkgKiBqb2luLiAg SW4gdGhpcyBjYXNlLCB3ZSBjYW5ub3QgcHVzaCBhIHBhcnRpYWwgYWdncmVnYXRpb24gZG93biB0 byB0aGUKKwkgKiByZWxhdGlvbiwgYmVjYXVzZSB0aGUgTlVMTC1leHRlbmRlZCByb3dzIHByb2R1 Y2VkIGJ5IHRoZSBvdXRlciBqb2luCisJICogd291bGQgbm90IGJlIGF2YWlsYWJsZSB3aGVuIHdl IHBlcmZvcm0gdGhlIHBhcnRpYWwgYWdncmVnYXRpb24sIHdoaWxlCisJICogd2l0aCBhIG5vbi1l YWdlci1hZ2dyZWdhdGlvbiBwbGFuIHRoZXNlIHJvd3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlCisJ ICogdG9wLWxldmVsIGFnZ3JlZ2F0aW9uLiAgRG9pbmcgc28gbWF5IHJlc3VsdCBpbiB0aGUgcm93 cyBiZWluZyBncm91cGVkCisJICogZGlmZmVyZW50bHkgdGhhbiBleHBlY3RlZCwgb3IgcHJvZHVj ZSBpbmNvcnJlY3QgdmFsdWVzIGZyb20gdGhlCisJICogYWdncmVnYXRlIGZ1bmN0aW9ucy4KKwkg Ki8KKwljdXJfcmVsaWQgPSAtMTsKKwl3aGlsZSAoKGN1cl9yZWxpZCA9IGJtc19uZXh0X21lbWJl cihyZWwtPnJlbGlkcywgY3VyX3JlbGlkKSkgPj0gMCkKKwl7CisJCVJlbE9wdEluZm8gKmJhc2Vy ZWwgPSBmaW5kX2Jhc2VfcmVsX2lnbm9yZV9qb2luKHJvb3QsIGN1cl9yZWxpZCk7CisKKwkJaWYg KGJhc2VyZWwgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwkJCS8qIGlnbm9yZSBvdXRlciBqb2lucyBp biByZWwtPnJlbGlkcyAqLworCisJCWlmICghYm1zX2lzX3N1YnNldChiYXNlcmVsLT5udWxsaW5n X3JlbGlkcywgcmVsLT5yZWxpZHMpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICog Rm9yIG5vdyB3ZSBkb24ndCB0cnkgdG8gc3VwcG9ydCBQbGFjZUhvbGRlclZhcnMuCisJICovCisJ Zm9yZWFjaChsYywgcmVsLT5yZWx0YXJnZXQtPmV4cHJzKQorCXsKKwkJRXhwcgkgICAqZXhwciA9 IGxmaXJzdChsYyk7CisKKwkJaWYgKElzQShleHByLCBQbGFjZUhvbGRlclZhcikpCisJCQlyZXR1 cm4gZmFsc2U7CisJfQorCisJLyogQ2FsbGVyIHNob3VsZCBvbmx5IHBhc3MgYmFzZSByZWxhdGlv bnMgb3Igam9pbnMuICovCisJQXNzZXJ0KHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJF TCB8fAorCQkgICByZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX0pPSU5SRUwpOworCisJLyoKKwkg KiBDaGVjayBpZiBhbGwgYWdncmVnYXRlIGV4cHJlc3Npb25zIGNhbiBiZSBldmFsdWF0ZWQgb24g dGhpcyByZWxhdGlvbgorCSAqIGxldmVsLgorCSAqLworCWZvcmVhY2gobGMsIHJvb3QtPmFnZ19j bGF1c2VfbGlzdCkKKwl7CisJCUFnZ0NsYXVzZUluZm8gKmFjX2luZm8gPSBsZmlyc3Rfbm9kZShB Z2dDbGF1c2VJbmZvLCBsYyk7CisKKwkJQXNzZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYsIEFnZ3Jl ZikpOworCisJCS8qCisJCSAqIEdpdmUgdXAgaWYgYW55IGFnZ3JlZ2F0ZSBuZWVkcyByZWxhdGlv bnMgb3RoZXIgdGhhbiB0aGUgY3VycmVudAorCQkgKiBvbmUuCisJCSAqCisJCSAqIElmIHRoZSBh Z2dyZWdhdGUgbmVlZHMgdGhlIGN1cnJlbnQgcmVsIHBsdXMgYW55dGhpbmcgZWxzZSwgZ3JvdXBp bmcKKwkJICogdGhlIGN1cnJlbnQgcmVsIGNvdWxkIG1ha2Ugc29tZSBpbnB1dCB2YXJpYWJsZXMg dW5hdmFpbGFibGUgZm9yIHRoZQorCQkgKiBoaWdoZXIgYWdncmVnYXRlIGFuZCBhbHNvIHJlZHVj ZSB0aGUgbnVtYmVyIG9mIGlucHV0IHJvd3MgaXQKKwkJICogcmVjZWl2ZXMuCisJCSAqCisJCSAq IElmIHRoZSBhZ2dyZWdhdGUgZG9lcyBub3QgbmVlZCB0aGUgY3VycmVudCByZWwgYXQgYWxsLCB0 aGVuIHRoZQorCQkgKiBjdXJyZW50IHJlbCBzaG91bGQgbm90IGJlIGdyb3VwZWQsIGFzIHdlIGRv IG5vdCBzdXBwb3J0IGpvaW5pbmcgdHdvCisJCSAqIGdyb3VwZWQgcmVsYXRpb25zLgorCQkgKi8K KwkJaWYgKCFibXNfaXNfc3Vic2V0KGFjX2luZm8tPmFnZ19ldmFsX2F0LCByZWwtPnJlbGlkcykp CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBpbml0 X2dyb3VwaW5nX3RhcmdldHMKKyAqCSAgSW5pdGlhbGl6ZSB0aGUgdGFyZ2V0IGZvciBncm91cGVk IHBhdGhzICh0YXJnZXQpIGFzIHdlbGwgYXMgdGhlIHRhcmdldAorICoJICBmb3IgcGF0aHMgdGhh dCBnZW5lcmF0ZSBpbnB1dCBmb3IgdGhlIGdyb3VwZWQgcGF0aHMgKGFnZ19pbnB1dCkuCisgKgor ICogV2UgYWxzbyBjb25zdHJ1Y3QgdGhlIGxpc3Qgb2YgU29ydEdyb3VwQ2xhdXNlcyBhbmQgdGhl IGxpc3Qgb2YgZ3JvdXBpbmcKKyAqIGV4cHJlc3Npb25zIGZvciB0aGUgcGFydGlhbCBhZ2dyZWdh dGlvbiwgYW5kIHJldHVybiB0aGVtIGluICpncm91cF9jbGF1c2UKKyAqIGFuZCAqZ3JvdXBfZXhw cnMuCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIHRhcmdldHMgY291bGQgYmUgaW5pdGlhbGl6 ZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wKK2luaXRfZ3JvdXBpbmdfdGFy Z2V0cyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkgIFBhdGhUYXJn ZXQgKnRhcmdldCwgUGF0aFRhcmdldCAqYWdnX2lucHV0LAorCQkJCQkgIExpc3QgKipncm91cF9j bGF1c2VzLCBMaXN0ICoqZ3JvdXBfZXhwcnMpCit7CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkg ICAqcG9zc2libHlfZGVwZW5kZW50ID0gTklMOworCUluZGV4CQltYXhTb3J0R3JvdXBSZWY7CisK KwkvKiBJZGVudGlmeSB0aGUgbWF4IHNvcnRncm91cHJlZiAqLworCW1heFNvcnRHcm91cFJlZiA9 IDA7CisJZm9yZWFjaChsYywgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0KQorCXsKKwkJSW5kZXgJCXJl ZiA9ICgoVGFyZ2V0RW50cnkgKikgbGZpcnN0KGxjKSktPnJlc3NvcnRncm91cHJlZjsKKworCQlp ZiAocmVmID4gbWF4U29ydEdyb3VwUmVmKQorCQkJbWF4U29ydEdyb3VwUmVmID0gcmVmOworCX0K KworCWZvcmVhY2gobGMsIHJlbC0+cmVsdGFyZ2V0LT5leHBycykKKwl7CisJCUV4cHIJICAgKmV4 cHIgPSAoRXhwciAqKSBsZmlyc3QobGMpOworCQlJbmRleAkJc29ydGdyb3VwcmVmOworCisJCS8q CisJCSAqIEdpdmVuIHRoYXQgUGxhY2VIb2xkZXJWYXIgY3VycmVudGx5IHByZXZlbnRzIHVzIGZy b20gZG9pbmcgZWFnZXIKKwkJICogYWdncmVnYXRpb24sIHRoZSBzb3VyY2UgdGFyZ2V0IGNhbm5v dCBjb250YWluIGFueXRoaW5nIG1vcmUgY29tcGxleAorCQkgKiB0aGFuIGEgVmFyLgorCQkgKi8K KwkJQXNzZXJ0KElzQShleHByLCBWYXIpKTsKKworCQkvKiBHZXQgdGhlIHNvcnRncm91cHJlZiBp ZiB0aGUgZXhwciBjYW4gYWN0IGFzIGdyb3VwaW5nIGV4cHJlc3Npb24uICovCisJCXNvcnRncm91 cHJlZiA9IGdldF9leHByZXNzaW9uX3NvcnRncm91cHJlZihyb290LCBleHByKTsKKwkJaWYgKHNv cnRncm91cHJlZiA+IDApCisJCXsKKwkJCVNvcnRHcm91cENsYXVzZSAqc2djOworCisJCQkvKiBG aW5kIHRoZSBtYXRjaGluZyBTb3J0R3JvdXBDbGF1c2UgKi8KKwkJCXNnYyA9IGdldF9zb3J0Z3Jv dXByZWZfY2xhdXNlKHNvcnRncm91cHJlZiwgcm9vdC0+cHJvY2Vzc2VkX2dyb3VwQ2xhdXNlKTsK KwkJCUFzc2VydChzZ2MtPnRsZVNvcnRHcm91cFJlZiA8PSBtYXhTb3J0R3JvdXBSZWYpOworCisJ CQkvKgorCQkJICogSWYgdGhlIHRhcmdldCBleHByZXNzaW9uIGNhbiBiZSB1c2VkIGFzIGEgZ3Jv dXBpbmcga2V5LCBpdAorCQkJICogc2hvdWxkIGJlIGVtaXR0ZWQgYnkgdGhlIGdyb3VwZWQgcGF0 aHMgdGhhdCBoYXZlIGJlZW4gcHVzaGVkCisJCQkgKiBkb3duIHRvIHRoaXMgcmVsYXRpb24gbGV2 ZWwuCisJCQkgKi8KKwkJCWFkZF9jb2x1bW5fdG9fcGF0aHRhcmdldCh0YXJnZXQsIGV4cHIsIHNv cnRncm91cHJlZik7CisKKwkJCS8qCisJCQkgKiAuLi4gYW5kIGl0IGFsc28gc2hvdWxkIGJlIGVt aXR0ZWQgYnkgdGhlIGlucHV0IHBhdGhzLgorCQkJICovCisJCQlhZGRfY29sdW1uX3RvX3BhdGh0 YXJnZXQoYWdnX2lucHV0LCBleHByLCBzb3J0Z3JvdXByZWYpOworCisJCQkvKgorCQkJICogUmVj b3JkIHRoaXMgU29ydEdyb3VwQ2xhdXNlIGFuZCBncm91cGluZyBleHByZXNzaW9uLiAgTm90ZSB0 aGF0CisJCQkgKiB0aGlzIFNvcnRHcm91cENsYXVzZSBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBy ZWNvcmRlZC4KKwkJCSAqLworCQkJaWYgKCFsaXN0X21lbWJlcigqZ3JvdXBfY2xhdXNlcywgc2dj KSkKKwkJCXsKKwkJCQkqZ3JvdXBfY2xhdXNlcyA9IGxhcHBlbmQoKmdyb3VwX2NsYXVzZXMsIHNn Yyk7CisJCQkJKmdyb3VwX2V4cHJzID0gbGFwcGVuZCgqZ3JvdXBfZXhwcnMsIGV4cHIpOworCQkJ fQorCQl9CisJCWVsc2UgaWYgKGlzX3Zhcl9uZWVkZWRfYnlfam9pbihyb290LCAoVmFyICopIGV4 cHIsIHJlbCkpCisJCXsKKwkJCS8qCisJCQkgKiBUaGUgZXhwcmVzc2lvbiBpcyBuZWVkZWQgZm9y IGFuIHVwcGVyIGpvaW4gYnV0IGlzIG5laXRoZXIgaW4KKwkJCSAqIHRoZSBHUk9VUCBCWSBjbGF1 c2Ugbm9yIGRlcml2YWJsZSBmcm9tIGl0IHVzaW5nIEVDIChvdGhlcndpc2UsCisJCQkgKiBpdCB3 b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBpbmNsdWRlZCBpbiB0aGUgdGFyZ2V0cyBhYm92ZSkuICBX ZQorCQkJICogbmVlZCB0byBjcmVhdGUgYSBzcGVjaWFsIFNvcnRHcm91cENsYXVzZSBmb3IgdGhp cyBleHByZXNzaW9uLgorCQkJICovCisJCQlTb3J0R3JvdXBDbGF1c2UgKnNnYyA9IG1ha2VOb2Rl KFNvcnRHcm91cENsYXVzZSk7CisKKwkJCS8qIEluaXRpYWxpemUgdGhlIFNvcnRHcm91cENsYXVz ZS4gKi8KKwkJCXNnYy0+dGxlU29ydEdyb3VwUmVmID0gKyttYXhTb3J0R3JvdXBSZWY7CisJCQln ZXRfc29ydF9ncm91cF9vcGVyYXRvcnMoKGNhc3ROb2RlKFZhciwgZXhwcikpLT52YXJ0eXBlLAor CQkJCQkJCQkJIGZhbHNlLCB0cnVlLCBmYWxzZSwKKwkJCQkJCQkJCSAmc2djLT5zb3J0b3AsICZz Z2MtPmVxb3AsIE5VTEwsCisJCQkJCQkJCQkgJnNnYy0+aGFzaGFibGUpOworCisJCQkvKiBUaGlz IGV4cHJlc3Npb24gc2hvdWxkIGJlIGVtaXR0ZWQgYnkgdGhlIGdyb3VwZWQgcGF0aHMgKi8KKwkJ CWFkZF9jb2x1bW5fdG9fcGF0aHRhcmdldCh0YXJnZXQsIGV4cHIsIHNnYy0+dGxlU29ydEdyb3Vw UmVmKTsKKworCQkJLyogLi4uIGFuZCBpdCBhbHNvIHNob3VsZCBiZSBlbWl0dGVkIGJ5IHRoZSBp bnB1dCBwYXRocy4gKi8KKwkJCWFkZF9jb2x1bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIGV4 cHIsIHNnYy0+dGxlU29ydEdyb3VwUmVmKTsKKworCQkJLyogUmVjb3JkIHRoaXMgU29ydEdyb3Vw Q2xhdXNlIGFuZCBncm91cGluZyBleHByZXNzaW9uICovCisJCQkqZ3JvdXBfY2xhdXNlcyA9IGxh cHBlbmQoKmdyb3VwX2NsYXVzZXMsIHNnYyk7CisJCQkqZ3JvdXBfZXhwcnMgPSBsYXBwZW5kKCpn cm91cF9leHBycywgZXhwcik7CisJCX0KKwkJZWxzZSBpZiAoaXNfdmFyX2luX2FnZ3JlZl9vbmx5 KHJvb3QsIChWYXIgKikgZXhwcikpCisJCXsKKwkJCS8qCisJCQkgKiBUaGUgZXhwcmVzc2lvbiBp cyByZWZlcmVuY2VkIGJ5IGFuIGFnZ3JlZ2F0ZSBmdW5jdGlvbiBwdXNoZWQKKwkJCSAqIGRvd24g dG8gdGhpcyByZWxhdGlvbiBhbmQgZG9lcyBub3QgYXBwZWFyIGVsc2V3aGVyZSBpbiB0aGUKKwkJ CSAqIHRhcmdldGxpc3Qgb3IgaGF2aW5nUXVhbC4gIEFkZCBpdCB0byAnYWdnX2lucHV0JyBidXQg bm90IHRvCisJCQkgKiAndGFyZ2V0Jy4KKwkJCSAqLworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0 aHRhcmdldChhZ2dfaW5wdXQsIGV4cHIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAq IFRoZSBleHByZXNzaW9uIG1heSBiZSBmdW5jdGlvbmFsbHkgZGVwZW5kZW50IG9uIG90aGVyCisJ CQkgKiBleHByZXNzaW9ucyBpbiB0aGUgdGFyZ2V0LCBidXQgd2UgY2Fubm90IHZlcmlmeSB0aGlz IHVudGlsIGFsbAorCQkJICogdGFyZ2V0IGV4cHJlc3Npb25zIGhhdmUgYmVlbiBjb25zdHJ1Y3Rl ZC4KKwkJCSAqLworCQkJcG9zc2libHlfZGVwZW5kZW50ID0gbGFwcGVuZChwb3NzaWJseV9kZXBl bmRlbnQsIGV4cHIpOworCQl9CisJfQorCisJLyoKKwkgKiBOb3cgd2UgY2FuIHZlcmlmeSB3aGV0 aGVyIGFuIGV4cHJlc3Npb24gaXMgZnVuY3Rpb25hbGx5IGRlcGVuZGVudCBvbgorCSAqIG90aGVy cy4KKwkgKi8KKwlmb3JlYWNoKGxjLCBwb3NzaWJseV9kZXBlbmRlbnQpCisJeworCQlWYXIJCSAg ICp0dmFyOworCQlMaXN0CSAgICpkZXBzID0gTklMOworCQlSYW5nZVRibEVudHJ5ICpydGU7CisK KwkJdHZhciA9IGxmaXJzdF9ub2RlKFZhciwgbGMpOworCQlydGUgPSByb290LT5zaW1wbGVfcnRl X2FycmF5W3R2YXItPnZhcm5vXTsKKworCQlpZiAoY2hlY2tfZnVuY3Rpb25hbF9ncm91cGluZyhy dGUtPnJlbGlkLCB0dmFyLT52YXJubywKKwkJCQkJCQkJCSAgdHZhci0+dmFybGV2ZWxzdXAsCisJ CQkJCQkJCQkgIHRhcmdldC0+ZXhwcnMsICZkZXBzKSkKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBl eHByZXNzaW9uIGlzIGZ1bmN0aW9uYWxseSBkZXBlbmRlbnQgb24gb3RoZXIgdGFyZ2V0CisJCQkg KiBleHByZXNzaW9ucywgc28gaXQgY2FuIGJlIGluY2x1ZGVkIGluIHRoZSB0YXJnZXRzLiAgU2lu Y2UgaXQKKwkJCSAqIHdpbGwgbm90IGJlIHVzZWQgYXMgYSBncm91cGluZyBrZXksIGEgc29ydGdy b3VwcmVmIGlzIG5vdAorCQkJICogbmVlZGVkIGZvciBpdC4KKwkJCSAqLworCQkJYWRkX25ld19j b2x1bW5fdG9fcGF0aHRhcmdldCh0YXJnZXQsIChFeHByICopIHR2YXIpOworCQkJYWRkX25ld19j b2x1bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIChFeHByICopIHR2YXIpOworCQl9CisJCWVs c2UKKwkJeworCQkJLyoKKwkJCSAqIFdlIG1heSBhcnJpdmUgaGVyZSB3aXRoIGEgZ3JvdXBpbmcg ZXhwcmVzc2lvbiB0aGF0IGlzIHByb3ZlbgorCQkJICogcmVkdW5kYW50IGJ5IEVxdWl2YWxlbmNl Q2xhc3MgcHJvY2Vzc2luZywgc3VjaCBhcyAndDEuYScgaW4gdGhlCisJCQkgKiBxdWVyeSBiZWxv dy4KKwkJCSAqCisJCQkgKiBzZWxlY3QgbWF4KHQxLmMpIGZyb20gdCB0MSwgdCB0MiB3aGVyZSB0 MS5hID0gMSBncm91cCBieSB0MS5hLAorCQkJICogdDEuYjsKKwkJCSAqCisJCQkgKiBGb3Igbm93 IHdlIGp1c3QgZ2l2ZSB1cCBpbiB0aGlzIGNhc2UuCisJCQkgKi8KKwkJCXJldHVybiBmYWxzZTsK KwkJfQorCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogaXNfdmFyX2luX2FnZ3JlZl9v bmx5CisgKgkgIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIFZhciBhcHBlYXJzIGluIGFnZ3JlZ2F0 ZSBleHByZXNzaW9ucyBhbmQgbm90CisgKgkgIGVsc2V3aGVyZSBpbiB0aGUgdGFyZ2V0bGlzdCBv ciBoYXZpbmdRdWFsLgorICovCitzdGF0aWMgYm9vbAoraXNfdmFyX2luX2FnZ3JlZl9vbmx5KFBs YW5uZXJJbmZvICpyb290LCBWYXIgKnZhcikKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qCisJ ICogU2VhcmNoIHRoZSBsaXN0IG9mIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBmb3IgdGhlIFZhci4K KwkgKi8KKwlmb3JlYWNoKGxjLCByb290LT5hZ2dfY2xhdXNlX2xpc3QpCisJeworCQlBZ2dDbGF1 c2VJbmZvICphY19pbmZvID0gbGZpcnN0X25vZGUoQWdnQ2xhdXNlSW5mbywgbGMpOworCQlMaXN0 CSAgICp2YXJzOworCisJCUFzc2VydChJc0EoYWNfaW5mby0+YWdncmVmLCBBZ2dyZWYpKTsKKwor CQlpZiAoIWJtc19pc19tZW1iZXIodmFyLT52YXJubywgYWNfaW5mby0+YWdnX2V2YWxfYXQpKQor CQkJY29udGludWU7CisKKwkJdmFycyA9IHB1bGxfdmFyX2NsYXVzZSgoTm9kZSAqKSBhY19pbmZv LT5hZ2dyZWYsCisJCQkJCQkJICAgUFZDX1JFQ1VSU0VfQUdHUkVHQVRFUyB8CisJCQkJCQkJICAg UFZDX1JFQ1VSU0VfV0lORE9XRlVOQ1MgfAorCQkJCQkJCSAgIFBWQ19SRUNVUlNFX1BMQUNFSE9M REVSUyk7CisKKwkJaWYgKGxpc3RfbWVtYmVyKHZhcnMsIHZhcikpCisJCXsKKwkJCWxpc3RfZnJl ZSh2YXJzKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbGlzdF9mcmVlKHZhcnMpOworCX0KKworCXJl dHVybiAobGMgIT0gTlVMTCAmJiAhbGlzdF9tZW1iZXIocm9vdC0+dGxpc3RfdmFycywgdmFyKSk7 Cit9CisKKy8qCisgKiBpc192YXJfbmVlZGVkX2J5X2pvaW4KKyAqCSAgQ2hlY2sgaWYgdGhlIGdp dmVuIFZhciBpcyBuZWVkZWQgYnkgam9pbnMgYWJvdmUgdGhlIGN1cnJlbnQgcmVsLgorICoKKyAq IENvbnNpZGVyIHB1c2hpbmcgdGhlIGFnZ3JlZ2F0ZSBhdmcoYi55KSBkb3duIHRvIHJlbGF0aW9u IGIgZm9yIHRoZSBmb2xsb3dpbmcKKyAqIHF1ZXJ5OgorICoKKyAqICAgIFNFTEVDVCBhLmksIGF2 ZyhiLnkpCisgKiAgICBGUk9NIGEgSk9JTiBiIE9OIGEuaiA9IGIuagorICogICAgR1JPVVAgQlkg YS5pOworICoKKyAqIENvbHVtbiBiLmogbmVlZHMgdG8gYmUgdXNlZCBhcyB0aGUgZ3JvdXBpbmcg a2V5IGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IGNhbm5vdAorICogZmluZCBpdHMgd2F5IHRvIHRoZSBp bnB1dCBvZiB0aGUgam9pbiBleHByZXNzaW9uLgorICovCitzdGF0aWMgYm9vbAoraXNfdmFyX25l ZWRlZF9ieV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhciwgUmVsT3B0SW5mbyAqcmVs KQoreworCVJlbGlkcwkJcmVsaWRzOworCWludAkJCWF0dG5vOworCVJlbE9wdEluZm8gKmJhc2Vy ZWw7CisKKwkvKgorCSAqIE5vdGUgdGhhdCB3aGVuIGNoZWNraW5nIGlmIHRoZSBWYXIgaXMgbmVl ZGVkIGJ5IGpvaW5zIGFib3ZlLCB3ZSB3YW50IHRvCisJICogZXhjbHVkZSBjYXNlcyB3aGVyZSB0 aGUgVmFyIGlzIG9ubHkgbmVlZGVkIGluIHRoZSBmaW5hbCBvdXRwdXQuICBTbworCSAqIGluY2x1 ZGUgInJlbGF0aW9uIDAiIGluIHRoZSBjaGVjay4KKwkgKi8KKwlyZWxpZHMgPSBibXNfY29weShy ZWwtPnJlbGlkcyk7CisJcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCAwKTsKKworCWJh c2VyZWwgPSBmaW5kX2Jhc2VfcmVsKHJvb3QsIHZhci0+dmFybm8pOworCWF0dG5vID0gdmFyLT52 YXJhdHRubyAtIGJhc2VyZWwtPm1pbl9hdHRyOworCisJcmV0dXJuIGJtc19ub25lbXB0eV9kaWZm ZXJlbmNlKGJhc2VyZWwtPmF0dHJfbmVlZGVkW2F0dG5vXSwgcmVsaWRzKTsKK30KKworLyoKKyAq IGdldF9leHByZXNzaW9uX3NvcnRncm91cHJlZgorICoJICBSZXR1cm4gc29ydGdyb3VwcmVmIGlm IHRoZSBnaXZlbiAnZXhwcicgY2FuIGJlIHVzZWQgYXMgYSBncm91cGluZyBrZXkgaW4KKyAqCSAg Z3JvdXBlZCBwYXRocyBmb3IgYmFzZSBvciBqb2luIHJlbGF0aW9ucywgb3IgMCBvdGhlcndpc2Uu CisgKgorICogV2UgZmlyc3QgY2hlY2sgaWYgJ2V4cHInIGlzIGFtb25nIHRoZSBncm91cGluZyBl eHByZXNzaW9ucy4gIElmIGl0IGlzIG5vdCwKKyAqIHdlIHRoZW4gY2hlY2sgaWYgJ2V4cHInIGlz IGtub3duIGVxdWFsIHRvIGFueSBvZiB0aGUgZ3JvdXBpbmcgZXhwcmVzc2lvbnMKKyAqIGR1ZSB0 byBlcXVpdmFsZW5jZSByZWxhdGlvbnNoaXBzLgorICovCitzdGF0aWMgSW5kZXgKK2dldF9leHBy ZXNzaW9uX3NvcnRncm91cHJlZihQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwcikKK3sKKwlM aXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIHJvb3QtPmdyb3VwX2V4cHJfbGlzdCkKKwl7 CisJCUdyb3VwRXhwckluZm8gKmdlX2luZm8gPSBsZmlyc3Rfbm9kZShHcm91cEV4cHJJbmZvLCBs Yyk7CisKKwkJQXNzZXJ0KElzQShnZV9pbmZvLT5leHByLCBWYXIpKTsKKworCQlpZiAoZXF1YWwo Z2VfaW5mby0+ZXhwciwgZXhwcikgfHwKKwkJCWV4cHJzX2tub3duX2VxdWFsKHJvb3QsIChOb2Rl ICopIGV4cHIsIChOb2RlICopIGdlX2luZm8tPmV4cHIsCisJCQkJCQkJICBnZV9pbmZvLT5idHJl ZV9vcGZhbWlseSkpCisJCXsKKwkJCUFzc2VydChnZV9pbmZvLT5zb3J0Z3JvdXByZWYgPiAwKTsK KworCQkJcmV0dXJuIGdlX2luZm8tPnNvcnRncm91cHJlZjsKKwkJfQorCX0KKworCS8qIFRoZSBl eHByZXNzaW9uIGNhbm5vdCBiZSB1c2VkIGFzIGEgZ3JvdXBpbmcga2V5LiAqLworCXJldHVybiAw OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCBhZjIyN2IxZjI0Li4yNzk2 NDQ4MDU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtOTI5LDYgKzkyOSwx NiBAQCBzdHJ1Y3QgY29uZmlnX2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQlmYWxzZSwK IAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCisJeworCQl7ImVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUi LCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgiRW5h YmxlcyBlYWdlciBhZ2dyZWdhdGlvbi4iKSwKKwkJCU5VTEwsCisJCQlHVUNfRVhQTEFJTgorCQl9 LAorCQkmZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSwKKwkJZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5V TEwKKwl9LAogCXsKIAkJeyJlbmFibGVfcGFyYWxsZWxfYXBwZW5kIiwgUEdDX1VTRVJTRVQsIFFV RVJZX1RVTklOR19NRVRIT0QsCiAJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIn cyB1c2Ugb2YgcGFyYWxsZWwgYXBwZW5kIHBsYW5zLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IDY2N2UwZGM0MGEuLjJlOWRmNTZjZjQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBs ZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAg LTQxMyw2ICs0MTMsNyBAQAogI2VuYWJsZV9zb3J0ID0gb24KICNlbmFibGVfdGlkc2NhbiA9IG9u CiAjZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmcgPSBvbgorI2VuYWJsZV9lYWdlcl9hZ2dyZWdh dGUgPSBvZmYKIAogIyAtIFBsYW5uZXIgQ29zdCBDb25zdGFudHMgLQogCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oCmluZGV4IDE5NTFhZTdjMTEuLjgxNWMxNGM3MWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBA IC0zODcsNiArMzg3LDE1IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCS8qIGxpc3Qgb2YgUGxhY2VI b2xkZXJJbmZvcyAqLwogCUxpc3QJICAgKnBsYWNlaG9sZGVyX2xpc3Q7CiAKKwkvKiBsaXN0IG9m IEFnZ0NsYXVzZUluZm9zICovCisJTGlzdAkgICAqYWdnX2NsYXVzZV9saXN0OworCisJLyogbGlz dCBvZiBHcm91cEV4cHJJbmZvcyAqLworCUxpc3QJICAgKmdyb3VwX2V4cHJfbGlzdDsKKworCS8q IGxpc3Qgb2YgcGxhaW4gVmFycyBjb250YWluZWQgaW4gdGFyZ2V0bGlzdCBhbmQgaGF2aW5nUXVh bCAqLworCUxpc3QJICAgKnRsaXN0X3ZhcnM7CisKIAkvKiBhcnJheSBvZiBQbGFjZUhvbGRlcklu Zm9zIGluZGV4ZWQgYnkgcGhpZCAqLwogCXN0cnVjdCBQbGFjZUhvbGRlckluZm8gKipwbGFjZWhv bGRlcl9hcnJheSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUsIGFycmF5X3NpemUocGxh Y2Vob2xkZXJfYXJyYXlfc2l6ZSkpOwogCS8qIGFsbG9jYXRlZCBzaXplIG9mIGFycmF5ICovCkBA IC00MjksNiArNDM4LDEyIEBAIHN0cnVjdCBQbGFubmVySW5mbwogCSAqLwogCVJlbEluZm9MaXN0 IHVwcGVyX3JlbHNbVVBQRVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9p Z25vcmUpOwogCisJLyoKKwkgKiBsaXN0IG9mIGdyb3VwZWQtcmVsYXRpb24gUmVsQWdnSW5mb3Ms IHdpdGggb25lIGluc3RhbmNlIHBlciBpdGVtIG9mIHRoZQorCSAqIHVwcGVyX3JlbHNbVVBQRVJS RUxfUEFSVElBTF9HUk9VUF9BR0ddIGxpc3QuCisJICovCisJUmVsSW5mb0xpc3QgKmFnZ19pbmZv X2xpc3Q7CisKIAkvKiBSZXN1bHQgdGxpc3RzIGNob3NlbiBieSBncm91cGluZ19wbGFubmVyIGZv ciB1cHBlci1zdGFnZSBwcm9jZXNzaW5nICovCiAJc3RydWN0IFBhdGhUYXJnZXQgKnVwcGVyX3Rh cmdldHNbVVBQRVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUp OwogCkBAIC0xMDc5LDYgKzEwOTQsNTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCSgo cmVsKS0+cGFydF9zY2hlbWUgJiYgKHJlbCktPmJvdW5kaW5mbyAmJiAocmVsKS0+bnBhcnRzID4g MCAmJiBcCiAJIChyZWwpLT5wYXJ0X3JlbHMgJiYgKHJlbCktPnBhcnRleHBycyAmJiAocmVsKS0+ bnVsbGFibGVfcGFydGV4cHJzKQogCisvKgorICogUmVsQWdnSW5mbworICoJCUluZm9ybWF0aW9u IG5lZWRlZCB0byBjcmVhdGUgZ3JvdXBlZCBwYXRocyBmb3IgYmFzZSBhbmQgam9pbiByZWxzLgor ICoKKyAqICJyZWxpZHMiIGlzIHRoZSBzZXQgb2YgcmVsYXRpb24gaWRlbnRpZmllcnMgKFJUIGlu ZGV4ZXMpLgorICoKKyAqICJ0YXJnZXQiIGlzIHRoZSBvdXRwdXQgdGxpc3QgZm9yIHRoZSBncm91 cGVkIHBhdGhzLgorICoKKyAqICJhZ2dfaW5wdXQiIGlzIHRoZSBvdXRwdXQgdGxpc3QgZm9yIHRo ZSBwYXRocyB0aGF0IHByb3ZpZGUgaW5wdXQgdG8gdGhlCisgKiBncm91cGVkIHBhdGhzLiAgT25l IGRpZmZlcmVuY2UgZnJvbSB0aGUgcmVsdGFyZ2V0IG9mIHRoZSBub24tZ3JvdXBlZAorICogcmVs YXRpb24gaXMgdGhhdCBhZ2dfaW5wdXQgaGFzIGl0cyBzb3J0Z3JvdXByZWZzW10gaW5pdGlhbGl6 ZWQuCisgKgorICogImdyb3VwZWRfcm93cyIgaXMgdGhlIGVzdGltYXRlZCBudW1iZXIgb2YgcmVz dWx0IHR1cGxlcyBvZiB0aGUgZ3JvdXBlZAorICogcmVsYXRpb24uCisgKgorICogImdyb3VwX2Ns YXVzZXMiLCAiZ3JvdXBfZXhwcnMiIGFuZCAiZ3JvdXBfcGF0aGtleXMiIGFyZSBsaXN0cyBvZgor ICogU29ydEdyb3VwQ2xhdXNlcywgdGhlIGNvcnJlc3BvbmRpbmcgZ3JvdXBpbmcgZXhwcmVzc2lv bnMgYW5kIFBhdGhLZXlzCisgKiByZXNwZWN0aXZlbHkuCisgKi8KK3R5cGVkZWYgc3RydWN0IFJl bEFnZ0luZm8KK3sKKwlwZ19ub2RlX2F0dHIobm9fY29weV9lcXVhbCwgbm9fcmVhZCwgbm9fcXVl cnlfanVtYmxlKQorCisJTm9kZVRhZwkJdHlwZTsKKworCS8qIHNldCBvZiBiYXNlICsgT0ogcmVs aWRzIChyYW5nZXRhYmxlIGluZGV4ZXMpICovCisJUmVsaWRzCQlyZWxpZHM7CisKKwkvKgorCSAq IGRlZmF1bHQgcmVzdWx0IHRhcmdldGxpc3QgZm9yIFBhdGhzIHNjYW5uaW5nIHRoaXMgZ3JvdXBl ZCByZWxhdGlvbjsKKwkgKiBsaXN0IG9mIFZhcnMvRXhwcnMsIGNvc3QsIHdpZHRoCisJICovCisJ c3RydWN0IFBhdGhUYXJnZXQgKnRhcmdldDsKKworCS8qCisJICogdGhlIHRhcmdldGxpc3QgZm9y IFBhdGhzIHRoYXQgcHJvdmlkZSBpbnB1dCB0byB0aGUgZ3JvdXBlZCBwYXRocworCSAqLworCXN0 cnVjdCBQYXRoVGFyZ2V0ICphZ2dfaW5wdXQ7CisKKwkvKiBlc3RpbWF0ZWQgbnVtYmVyIG9mIHJl c3VsdCB0dXBsZXMgKi8KKwlDYXJkaW5hbGl0eSBncm91cGVkX3Jvd3M7CisKKwkvKiBhIGxpc3Qg b2YgU29ydEdyb3VwQ2xhdXNlcyAqLworCUxpc3QJICAgKmdyb3VwX2NsYXVzZXM7CisJLyogYSBs aXN0IG9mIGdyb3VwaW5nIGV4cHJlc3Npb25zICovCisJTGlzdAkgICAqZ3JvdXBfZXhwcnM7CisJ LyogYSBsaXN0IG9mIFBhdGhLZXlzICovCisJTGlzdAkgICAqZ3JvdXBfcGF0aGtleXM7Cit9IFJl bEFnZ0luZm87CisKIC8qCiAgKiBJbmRleE9wdEluZm8KICAqCQlQZXItaW5kZXggaW5mb3JtYXRp b24gZm9yIHBsYW5uaW5nL29wdGltaXphdGlvbgpAQCAtMzE0Nyw2ICszMjEyLDQxIEBAIHR5cGVk ZWYgc3RydWN0IE1pbk1heEFnZ0luZm8KIAlQYXJhbQkgICAqcGFyYW07CiB9IE1pbk1heEFnZ0lu Zm87CiAKKy8qCisgKiBUaGUgYWdncmVnYXRlIGV4cHJlc3Npb25zIHRoYXQgYXBwZWFyIGluIHRh cmdldGxpc3QgYW5kIGhhdmluZyBjbGF1c2VzCisgKi8KK3R5cGVkZWYgc3RydWN0IEFnZ0NsYXVz ZUluZm8KK3sKKwlwZ19ub2RlX2F0dHIobm9fcmVhZCwgbm9fcXVlcnlfanVtYmxlKQorCisJTm9k ZVRhZwkJdHlwZTsKKworCS8qIHRoZSBBZ2dyZWYgZXhwciAqLworCUFnZ3JlZgkgICAqYWdncmVm OworCisJLyogbG93ZXN0IGxldmVsIHdlIGNhbiBldmFsdWF0ZSB0aGlzIGFnZ3JlZ2F0ZSBhdCAq LworCVJlbGlkcwkJYWdnX2V2YWxfYXQ7Cit9IEFnZ0NsYXVzZUluZm87CisKKy8qCisgKiBUaGUg Z3JvdXBpbmcgZXhwcmVzc2lvbnMgdGhhdCBhcHBlYXIgaW4gZ3JvdXBpbmcgY2xhdXNlcworICov Cit0eXBlZGVmIHN0cnVjdCBHcm91cEV4cHJJbmZvCit7CisJcGdfbm9kZV9hdHRyKG5vX3JlYWQs IG5vX3F1ZXJ5X2p1bWJsZSkKKworCU5vZGVUYWcJCXR5cGU7CisKKwkvKiB0aGUgcmVwcmVzZW50 ZWQgZXhwcmVzc2lvbiAqLworCUV4cHIJICAgKmV4cHI7CisKKwkvKiB0aGUgdGxlU29ydEdyb3Vw UmVmIG9mIHRoZSBjb3JyZXNwb25kaW5nIFNvcnRHcm91cENsYXVzZSAqLworCUluZGV4CQlzb3J0 Z3JvdXByZWY7CisKKwkvKiBidHJlZSBvcGZhbWlseSBkZWZpbmluZyB0aGUgb3JkZXJpbmcgKi8K KwlPaWQJCQlidHJlZV9vcGZhbWlseTsKK30gR3JvdXBFeHBySW5mbzsKKwogLyoKICAqIEF0IHJ1 bnRpbWUsIFBBUkFNX0VYRUMgc2xvdHMgYXJlIHVzZWQgdG8gcGFzcyB2YWx1ZXMgYXJvdW5kIGZy b20gb25lIHBsYW4KICAqIG5vZGUgdG8gYW5vdGhlci4gIFRoZXkgY2FuIGJlIHVzZWQgdG8gcGFz cyB2YWx1ZXMgZG93biBpbnRvIHN1YnF1ZXJpZXMgKGZvcgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUu aAppbmRleCBmMDBiZDU1ZjM5Li5kNTI4MmU5MTZiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUu aApAQCAtMzEwLDEwICszMTAsMTggQEAgZXh0ZXJuIHZvaWQgc2V0dXBfc2ltcGxlX3JlbF9hcnJh eXMoUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIHZvaWQgZXhwYW5kX3BsYW5uZXJfYXJyYXlz KFBsYW5uZXJJbmZvICpyb290LCBpbnQgYWRkX3NpemUpOwogZXh0ZXJuIFJlbE9wdEluZm8gKmJ1 aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwKIAkJCQkJCQkJCVJl bE9wdEluZm8gKnBhcmVudCk7CitleHRlcm4gUmVsT3B0SW5mbyAqYnVpbGRfc2ltcGxlX2dyb3Vw ZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsCisJCQkJCQkJCQkJCVJlbEFnZ0lu Zm8gKiphZ2dfaW5mb19wKTsKK2V4dGVybiBSZWxPcHRJbmZvICpidWlsZF9ncm91cGVkX3JlbChQ bGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCSBSZWxPcHRJbmZvICpyZWxfcGxhaW4pOwogZXh0 ZXJuIFJlbE9wdEluZm8gKmZpbmRfYmFzZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxp ZCk7CiBleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9iYXNlX3JlbF9ub2VycihQbGFubmVySW5mbyAq cm9vdCwgaW50IHJlbGlkKTsKIGV4dGVybiBSZWxPcHRJbmZvICpmaW5kX2Jhc2VfcmVsX2lnbm9y ZV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQpOwogZXh0ZXJuIFJlbE9wdEluZm8g KmZpbmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMpOworZXh0ZXJu IHZvaWQgYWRkX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CisJCQkJCQkJUmVsQWdnSW5mbyAqYWdnX2luZm8pOworZXh0ZXJuIFJlbE9wdEluZm8gKmZpbmRf Z3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMsCisJCQkJCQkJCQlS ZWxBZ2dJbmZvICoqYWdnX2luZm9fcCk7CiBleHRlcm4gUmVsT3B0SW5mbyAqYnVpbGRfam9pbl9y ZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgUmVsaWRzIGpvaW5yZWxpZHMsCiAJCQkJ CQkJCSAgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLApAQCAtMzQ5LDQgKzM1Nyw1IEBAIGV4dGVybiBS ZWxPcHRJbmZvICpidWlsZF9jaGlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJ CQkJCQlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKIAkJCQkJCQkJCQlpbnQgbmFwcGluZm9zLCBB cHBlbmRSZWxJbmZvICoqYXBwaW5mb3MpOwogCitleHRlcm4gUmVsQWdnSW5mbyAqY3JlYXRlX3Jl bF9hZ2dfaW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKTsKICNlbmRpZgkJ CQkJCQkvKiBQQVRITk9ERV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv cGF0aHMuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCmluZGV4IDk3MDQ5OWM0Njku LjkzOTJhMjdhNGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCisr KyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCkBAIC0yMSw2ICsyMSw3IEBACiAgKiBh bGxwYXRocy5jCiAgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9nZXFvOworZXh0 ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZTsKIGV4dGVybiBQR0RM TElNUE9SVCBpbnQgZ2Vxb190aHJlc2hvbGQ7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1pbl9w YXJhbGxlbF90YWJsZV9zY2FuX3NpemU7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1pbl9wYXJh bGxlbF9pbmRleF9zY2FuX3NpemU7CkBAIC01Nyw2ICs1OCwxMCBAQCBleHRlcm4gdm9pZCBnZW5l cmF0ZV9nYXRoZXJfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJ CQkJCQkJICBib29sIG92ZXJyaWRlX3Jvd3MpOwogZXh0ZXJuIHZvaWQgZ2VuZXJhdGVfdXNlZnVs X2dhdGhlcl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJ CQkJCSBib29sIG92ZXJyaWRlX3Jvd3MpOworZXh0ZXJuIHZvaWQgZ2VuZXJhdGVfZ3JvdXBlZF9w YXRocyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJICAgUmVsT3B0SW5mbyAqcmVsX2dyb3Vw ZWQsCisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJlbF9wbGFpbiwKKwkJCQkJCQkJICAgUmVsQWdn SW5mbyAqYWdnX2luZm8pOwogZXh0ZXJuIGludAljb21wdXRlX3BhcmFsbGVsX3dvcmtlcihSZWxP cHRJbmZvICpyZWwsIGRvdWJsZSBoZWFwX3BhZ2VzLAogCQkJCQkJCQkJZG91YmxlIGluZGV4X3Bh Z2VzLCBpbnQgbWF4X3dvcmtlcnMpOwogZXh0ZXJuIHZvaWQgY3JlYXRlX3BhcnRpYWxfYml0bWFw X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9w bGFubWFpbi5oCmluZGV4IGFhZmMxNzM3OTIuLmNlZGNkODhlYmYgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9w bGFubWFpbi5oCkBAIC03Miw2ICs3Miw3IEBAIGV4dGVybiB2b2lkIGFkZF9vdGhlcl9yZWxzX3Rv X3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVybiB2b2lkIGJ1aWxkX2Jhc2VfcmVsX3Rs aXN0cyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqZmluYWxfdGxpc3QpOwogZXh0ZXJuIHZvaWQg YWRkX3ZhcnNfdG9fdGFyZ2V0bGlzdChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqdmFycywKIAkJ CQkJCQkJICAgUmVsaWRzIHdoZXJlX25lZWRlZCk7CitleHRlcm4gdm9pZCBzZXR1cF9lYWdlcl9h Z2dyZWdhdGlvbihQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4gdm9pZCBmaW5kX2xhdGVyYWxf cmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4gdm9pZCBjcmVhdGVfbGF0ZXJh bF9qb2luX2luZm8oUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIExpc3QgKmRlY29uc3RydWN0 X2pvaW50cmVlKFBsYW5uZXJJbmZvICpyb290KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvZWFnZXJfYWdncmVnYXRlLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvZWFnZXJfYWdncmVnYXRlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi45ZjYzNDcyZWZmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9lYWdlcl9hZ2dyZWdhdGUub3V0CkBAIC0wLDAgKzEsMTMwOCBAQAorLS0KKy0tIEVBR0VS IEFHR1JFR0FUSU9OCistLSBUZXN0IHdlIGNhbiBwdXNoIGFnZ3JlZ2F0aW9uIGRvd24gYmVsb3cg am9pbgorLS0KKy0tIEVuYWJsZSBlYWdlciBhZ2dyZWdhdGlvbiwgd2hpY2ggYnkgZGVmYXVsdCBp cyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfZWFnZXJfYWdncmVnYXRlIFRPIG9uOworQ1JFQVRFIFRB QkxFIGVhZ2VyX2FnZ190MSAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNpb24pOworQ1JF QVRFIFRBQkxFIGVhZ2VyX2FnZ190MiAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNpb24p OworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190MyAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVj aXNpb24pOworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3QxIFNFTEVDVCBpLCBpLCBpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMDApaTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190MiBTRUxFQ1Qg aSwgaSUxMCwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKWk7CitJTlNFUlQgSU5UTyBl YWdlcl9hZ2dfdDMgU0VMRUNUIGklMTAsIGklMTAsIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwg MTAwMClpOworQU5BTFlaRSBlYWdlcl9hZ2dfdDE7CitBTkFMWVpFIGVhZ2VyX2FnZ190MjsKK0FO QUxZWkUgZWFnZXJfYWdnX3QzOworLS0KKy0tIFRlc3QgZWFnZXIgYWdncmVnYXRpb24gb3ZlciBi YXNlIHJlbAorLS0KKy0tIFBlcmZvcm0gc2NhbiBvZiBhIHRhYmxlLCBhZ2dyZWdhdGUgdGhlIHJl c3VsdCwgam9pbiBpdCB0byB0aGUgb3RoZXIgdGFibGUKKy0tIGFuZCBmaW5hbGl6ZSB0aGUgYWdn cmVnYXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZn KHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIg PSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDEuYSwgYXZnKHQyLmMpCisg ICBHcm91cCBLZXk6IHQxLmEKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQ QVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAg SGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5j KSkKKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5iKQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEKKyAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDEuYSwgdDEuYiwgdDEuYworICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJQUwgYXZnKHQyLmMpKQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2Zyh0Mi5jKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MiB0MgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5hLCB0Mi5iLCB0Mi5jCisoMTggcm93 cykKKworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVh Z2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7 CisgYSB8IGF2ZyAKKy0tLSstLS0tLQorIDEgfCA0OTYKKyAyIHwgNDk3CisgMyB8IDQ5OAorIDQg fCA0OTkKKyA1IHwgNTAwCisgNiB8IDUwMQorIDcgfCA1MDIKKyA4IHwgNTAzCisgOSB8IDUwNAor KDkgcm93cykKKworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGluZyBhZ2dyZWdhdGlvbgor U0VUIGVuYWJsZV9oYXNoYWdnIFRPIG9mZjsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9h Z2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQor ICAgT3V0cHV0OiB0MS5hLCBhdmcodDIuYykKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNv cnQKKyAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAg U29ydCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91 dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0 MS5jCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Mi5iLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFy dGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Mi5iLCBQQVJUSUFMIGF2Zyh0Mi5jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0Mi5iCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDIuYgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYgorKDIx IHJvd3MpCisKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9J TiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0 MS5hOworIGEgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk2CisgMiB8IDQ5NworIDMgfCA0OTgK KyA0IHwgNDk5CisgNSB8IDUwMAorIDYgfCA1MDEKKyA3IHwgNTAyCisgOCB8IDUwMworIDkgfCA1 MDQKKyg5IHJvd3MpCisKK1JFU0VUIGVuYWJsZV9oYXNoYWdnOworLS0KKy0tIFRlc3QgZWFnZXIg YWdncmVnYXRpb24gb3ZlciBqb2luIHJlbAorLS0KKy0tIFBlcmZvcm0gam9pbiBvZiB0YWJsZXMs IGFnZ3JlZ2F0ZSB0aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQorLS0gYW5k IGZpbmFsaXplIHRoZSBhZ2dyZWdhdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4g ZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQy LmEgPSB0My5hIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAg IE91dHB1dDogdDEuYSwgYXZnKCh0Mi5jICsgdDMuYykpCisgICBHcm91cCBLZXk6IHQxLmEKKyAg IC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2ZygodDIuYyArIHQz LmMpKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMpKSkK KyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5iKQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEKKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDEuYSwgdDEuYiwgdDEuYworICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMu YykpKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2ZygodDIuYyAr IHQzLmMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQzLmMKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQzLmEgPSB0Mi5hKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDMgdDMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDMuYSwgdDMu YiwgdDMuYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYiwgdDIu YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYiwgdDIuYQorKDI1IHJvd3MpCisKK1NFTEVD VCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJf YWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEgPSB0 My5hIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisg MSB8IDQ5NworIDIgfCA0OTkKKyAzIHwgNTAxCisgNCB8IDUwMworIDUgfCA1MDUKKyA2IHwgNTA3 CisgNyB8IDUwOQorIDggfCA1MTEKKyA5IHwgNTEzCisoOSByb3dzKQorCistLSBQcm9kdWNlIHJl c3VsdHMgd2l0aCBzb3J0aW5nIGFnZ3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2Zm OworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsg dDMuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9 IHQyLmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBP UkRFUiBCWSB0MS5hOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0MS5h LCBhdmcoKHQyLmMgKyB0My5jKSkKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNvcnQKKyAg ICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAg ICAgU29ydCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg IE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MS5hLCB0MS5iLCB0MS5jCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Mi5iLCAoUEFSVElBTCBhdmcoKHQyLmMgKyB0My5jKSkpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMpKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Mi5jLCB0Mi5iLCB0My5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT b3J0IEtleTogdDIuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5j LCB0Mi5iLCB0My5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNo IENvbmQ6ICh0My5hID0gdDIuYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QzIHQzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLmEsIHQzLmIsIHQzLmMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIs IHQyLmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEKKygy OCByb3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190 MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190 MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgYSB8IGF2 ZyAKKy0tLSstLS0tLQorIDEgfCA0OTcKKyAyIHwgNDk5CisgMyB8IDUwMQorIDQgfCA1MDMKKyA1 IHwgNTA1CisgNiB8IDUwNworIDcgfCA1MDkKKyA4IHwgNTExCisgOSB8IDUxMworKDkgcm93cykK KworUkVTRVQgZW5hYmxlX2hhc2hhZ2c7CistLQorLS0gVGVzdCB0aGF0IGVhZ2VyIGFnZ3JlZ2F0 aW9uIHdvcmtzIGZvciBvdXRlciBqb2luCistLQorLS0gRW5zdXJlIGFnZ3JlZ2F0aW9uIGNhbiBi ZSBwdXNoZWQgZG93biB0byB0aGUgbm9uLW51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0Us IENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEg UklHSFQgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBP UkRFUiBCWSB0MS5hOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3Jl Z2F0ZQorICAgT3V0cHV0OiB0MS5hLCBhdmcodDIuYykKKyAgIEdyb3VwIEtleTogdDEuYQorICAg LT4gIFNvcnQKKyAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAg ICAgICAgU29ydCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBIYXNoIFJpZ2h0IEpvaW4KKyAgICAg ICAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MS5hLCB0MS5iLCB0MS5jCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Mi5iLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAg ICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyLmIsIFBBUlRJQUwgYXZnKHQyLmMpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBHcm91cCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIsIHQyLmMKKygxOCByb3dzKQorCitTRUxFQ1QgdDEu YSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJfYWdnX3Qy IHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyBhIHwgYXZn IAorLS0tKy0tLS0tCisgMSB8IDQ5NgorIDIgfCA0OTcKKyAzIHwgNDk4CisgNCB8IDQ5OQorIDUg fCA1MDAKKyA2IHwgNTAxCisgNyB8IDUwMgorIDggfCA1MDMKKyA5IHwgNTA0CisgICB8IDUwNQor KDEwIHJvd3MpCisKKy0tIEVuc3VyZSBhZ2dyZWdhdGlvbiBjYW5ub3QgYmUgcHVzaGVkIGRvd24g dG8gdGhlIG51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCB0Mi5iLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgTEVGVCBKT0lOIGVhZ2VyX2Fn Z190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0Mi5iIE9SREVSIEJZIHQyLmI7CisgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDIuYiwgKGF2Zyh0Mi5jKSkKKyAgIFNvcnQgS2V5OiB0 Mi5iCisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0Mi5iLCBhdmcodDIu YykKKyAgICAgICAgIEdyb3VwIEtleTogdDIuYgorICAgICAgICAgLT4gIEhhc2ggUmlnaHQgSm9p bgorICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCB0Mi5jCisgICAgICAgICAgICAgICBIYXNo IENvbmQ6ICh0Mi5iID0gdDEuYikKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEsIHQy LmIsIHQyLmMKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQxLmIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3QxIHQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmIK KygxNSByb3dzKQorCitTRUxFQ1QgdDIuYiwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQx IExFRlQgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDIuYiBP UkRFUiBCWSB0Mi5iOworIGIgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk2CisgMiB8IDQ5Nwor IDMgfCA0OTgKKyA0IHwgNDk5CisgNSB8IDUwMAorIDYgfCA1MDEKKyA3IHwgNTAyCisgOCB8IDUw MworIDkgfCA1MDQKKyAgIHwgICAgCisoMTAgcm93cykKKworLS0KKy0tIFRlc3QgdGhhdCBlYWdl ciBhZ2dyZWdhdGlvbiB3b3JrcyBmb3IgcGFyYWxsZWwgcGxhbnMKKy0tCitTRVQgcGFyYWxsZWxf c2V0dXBfY29zdD0wOworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3Q9MDsKK1NFVCBtaW5fcGFyYWxs ZWxfdGFibGVfc2Nhbl9zaXplPTA7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl cj00OworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5j KSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIu YiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEdyb3VwQWdncmVnYXRlCisgICBP dXRwdXQ6IHQxLmEsIGF2Zyh0Mi5jKQorICAgR3JvdXAgS2V5OiB0MS5hCisgICAtPiAgR2F0aGVy IE1lcmdlCisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAg ICAgIFdvcmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAg IE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgU29ydCBL ZXk6IHQxLmEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0MS5jCisgICAgICAgICAg ICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Mi5iLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyLmIsIFBBUlRJQUwgYXZnKHQyLmMpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQy CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEsIHQy LmIsIHQyLmMKKygyMSByb3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJf YWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQx LmEgT1JERVIgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8IDQ5NgorIDIgfCA0 OTcKKyAzIHwgNDk4CisgNCB8IDQ5OQorIDUgfCA1MDAKKyA2IHwgNTAxCisgNyB8IDUwMgorIDgg fCA1MDMKKyA5IHwgNTA0CisoOSByb3dzKQorCitSRVNFVCBwYXJhbGxlbF9zZXR1cF9jb3N0Owor UkVTRVQgcGFyYWxsZWxfdHVwbGVfY29zdDsKK1JFU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9zY2Fu X3NpemU7CitSRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOworRFJPUCBUQUJM RSBlYWdlcl9hZ2dfdDE7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MjsKK0RST1AgVEFCTEUgZWFn ZXJfYWdnX3QzOworLS0KKy0tIFRlc3QgZWFnZXIgYWdncmVnYXRpb24gZm9yIHBhcnRpdGlvbndp c2Ugam9pbgorLS0KKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0ZSwgd2hpY2ggYnkg ZGVmYXVsdCBpcyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9hZ2dyZWdhdGUg VE8gdHJ1ZTsKKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGpvaW4sIHdoaWNoIGJ5IGRlZmF1bHQg aXMgZGlzYWJsZWQuCitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOworQ1JF QVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIxKHggaW50LCB5IGludCkgUEFSVElUSU9OIEJZIFJBTkdF KHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIxX3AxIFBBUlRJVElPTiBPRiBlYWdlcl9h Z2dfdGFiMSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJf YWdnX3RhYjFfcDIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAo MTApIFRPICgyMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDMgUEFSVElUSU9OIE9G IGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRPICgzMCk7CitDUkVBVEUgVEFC TEUgZWFnZXJfYWdnX3RhYjIoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoeSk7CitD UkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjJfcDEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIy IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFi Ml9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8g KDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMyBQQVJUSVRJT04gT0YgZWFnZXJf YWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKTsKK0lOU0VSVCBJTlRPIGVhZ2Vy X2FnZ190YWIxIFNFTEVDVCBpICUgMzAsIGkgJSAyMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLCAy OTksIDIpIGk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiMiBTRUxFQ1QgaSAlIDIwLCBpICUg MzAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCwgMjk5LCAzKSBpOworQU5BTFlaRSBlYWdlcl9hZ2df dGFiMTsKK0FOQUxZWkUgZWFnZXJfYWdnX3RhYjI7CistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBt YXRjaGVzOyBmdWxsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24u CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQxLnkpLCBj b3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0 MS54ID0gdDIueSBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAg IE91dHB1dDogdDEueCwgKHN1bSh0MS55KSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0MS54 CisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAg ICAgICAgICAgICAgT3V0cHV0OiB0MS54LCBzdW0odDEueSksIGNvdW50KCopCisgICAgICAgICAg ICAgICBHcm91cCBLZXk6IHQxLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKHQxLnkpKSwgKFBBUlRJ QUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi55ID0gdDEu eCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYjJfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueQorICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKHQxLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIFBBUlRJQUwgc3VtKHQxLnkp LCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91 cCBLZXk6IHQxLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDEKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDEueCwgdDEueQorICAgICAgICAgLT4gIEZpbmFsaXpl IEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBzdW0odDFfMS55 KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAg ICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwg KFBBUlRJQUwgc3VtKHQxXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQyXzEueSA9IHQxXzEueCkKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDIgdDJfMQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnkKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJ QUwgc3VtKHQxXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDFfMS54LCBQQVJUSUFMIHN1bSh0MV8xLnkpLCBQQVJUSUFMIGNv dW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzEu eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy5lYWdlcl9hZ2dfdGFiMV9wMiB0MV8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxXzEueCwgdDFfMS55CisgICAgICAgICAtPiAgRmluYWxpemUgSGFz aEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIHN1bSh0MV8yLnkpLCBj b3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAgICAgICAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFS VElBTCBzdW0odDFfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDJfMi55ID0gdDFfMi54KQorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMyB0Ml8yCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueQorICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBz dW0odDFfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MV8yLngsIFBBUlRJQUwgc3VtKHQxXzIueSksIFBBUlRJQUwgY291bnQo KikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMi54Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWIxX3AzIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDFfMi54LCB0MV8yLnkKKyg0OSByb3dzKQorCitTRUxFQ1QgdDEueCwgc3Vt KHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0 MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgeCAgfCBz dW0gIHwgY291bnQgCistLS0tKy0tLS0tLSstLS0tLS0tCisgIDAgfCAgNTAwIHwgICAxMDAKKyAg NiB8IDExMDAgfCAgIDEwMAorIDEyIHwgIDcwMCB8ICAgMTAwCisgMTggfCAxMzAwIHwgICAxMDAK KyAyNCB8ICA5MDAgfCAgIDEwMAorKDUgcm93cykKKworLS0gR1JPVVAgQlkgaGF2aW5nIG90aGVy IG1hdGNoaW5nIGtleQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQyLnks IHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3Rh YjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueSBPUkRFUiBCWSB0Mi55OworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBTb3J0CisgICBPdXRwdXQ6IHQyLnksIChzdW0odDEueSkpLCAoY291bnQoKikpCisgICBT b3J0IEtleTogdDIueQorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hB Z2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwgc3VtKHQxLnkpLCBjb3VudCgq KQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi55CisgICAgICAgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIChQQVJUSUFMIHN1bSh0 MS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDIueSA9IHQxLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmVhZ2VyX2FnZ190YWIyX3AxIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyLnkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxLngsIChQQVJUSUFMIHN1bSh0MS55KSksIChQQVJUSUFMIGNv dW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCBQQVJU SUFMIHN1bSh0MS55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR3JvdXAgS2V5OiB0MS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQxCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLnksIHQxLngKKyAgICAgICAg IC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEu eSwgc3VtKHQxXzEueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEu eQorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml8xLnksIChQQVJUSUFMIHN1bSh0MV8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8xLnkgPSB0MV8xLngpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIyX3AyIHQy XzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55CisgICAgICAgICAg ICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MV8xLngsIChQQVJUSUFMIHN1bSh0MV8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgUEFSVElBTCBzdW0odDFfMS55 KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDFfMQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLnksIHQxXzEueAorICAgICAgICAgLT4g IEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCBz dW0odDFfMi55KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMi55Cisg ICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzIueSwgKFBBUlRJQUwgc3VtKHQxXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAg ICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueSA9IHQxXzIueCkKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDMgdDJfMgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnkKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIu eCwgKFBBUlRJQUwgc3VtKHQxXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCBQQVJUSUFMIHN1bSh0MV8yLnkpLCBQ QVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBL ZXk6IHQxXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMyB0MV8yCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueSwgdDFfMi54CisoNDkgcm93cykKKworU0VM RUNUIHQyLnksIHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFn ZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueSBPUkRFUiBCWSB0 Mi55OworIHkgIHwgc3VtICB8IGNvdW50IAorLS0tLSstLS0tLS0rLS0tLS0tLQorICAwIHwgIDUw MCB8ICAgMTAwCisgIDYgfCAxMTAwIHwgICAxMDAKKyAxMiB8ICA3MDAgfCAgIDEwMAorIDE4IHwg MTMwMCB8ICAgMTAwCisgMjQgfCAgOTAwIHwgICAxMDAKKyg1IHJvd3MpCisKKy0tIFdoZW4gR1JP VVAgQlkgY2xhdXNlIGRvZXMgbm90IG1hdGNoOyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZv cm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitT RUxFQ1QgdDIueCwgc3VtKHQxLngpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBl YWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi54IEhBVklORyBh dmcodDEueCkgPiAxMCBPUkRFUiBCWSB0Mi54OworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBPdXRwdXQ6IHQyLngsIChzdW0odDEueCkp LCAoY291bnQoKikpCisgICBTb3J0IEtleTogdDIueAorICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgIE91dHB1dDogdDIueCwgc3VtKHQxLngpLCBjb3VudCgqKQorICAgICAg ICAgR3JvdXAgS2V5OiB0Mi54CisgICAgICAgICBGaWx0ZXI6IChhdmcodDEueCkgPiAnMTAnOjpu dW1lcmljKQorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIChQQVJUSUFMIHN1bSh0MV8x LngpKSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMS54KSkKKyAgICAgICAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueSA9IHQxXzEueCkKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDEgdDJfMQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIHQyXzEueQorICAgICAgICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDFfMS54LCAoUEFSVElBTCBzdW0odDFfMS54KSksIChQQVJUSUFMIGNvdW50KCopKSwgKFBBUlRJ QUwgYXZnKHQxXzEueCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBI YXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQx XzEueCwgUEFSVElBTCBzdW0odDFfMS54KSwgUEFSVElBTCBjb3VudCgqKSwgUEFSVElBTCBhdmco dDFfMS54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8x LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYjFfcDEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCAoUEFSVElBTCBzdW0odDFfMi54KSks IChQQVJUSUFMIGNvdW50KCopKSwgKFBBUlRJQUwgYXZnKHQxXzIueCkpCisgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLnkgPSB0MV8yLngpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIyX3AyIHQyXzIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCB0Ml8yLnkKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIu eCwgKFBBUlRJQUwgc3VtKHQxXzIueCkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQQVJUSUFMIGF2 Zyh0MV8yLngpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngs IFBBUlRJQUwgc3VtKHQxXzIueCksIFBBUlRJQUwgY291bnQoKiksIFBBUlRJQUwgYXZnKHQxXzIu eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMi54Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWIxX3AyIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgKFBBUlRJQUwgc3VtKHQxXzMueCkpLCAoUEFS VElBTCBjb3VudCgqKSksIChQQVJUSUFMIGF2Zyh0MV8zLngpKQorICAgICAgICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDJfMy55ID0gdDFfMy54KQorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMyB0Ml8zCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgdDJfMy55CisgICAgICAgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngsIChQ QVJUSUFMIHN1bSh0MV8zLngpKSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFf My54KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54LCBQQVJU SUFMIHN1bSh0MV8zLngpLCBQQVJUSUFMIGNvdW50KCopLCBQQVJUSUFMIGF2Zyh0MV8zLngpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzMueAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiMV9wMyB0MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQxXzMueAorKDQ0IHJvd3MpCisKK1NFTEVDVCB0Mi54LCBzdW0odDEueCksIGNvdW50 KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLngg PSB0Mi55IEdST1VQIEJZIHQyLnggSEFWSU5HIGF2Zyh0MS54KSA+IDEwIE9SREVSIEJZIHQyLng7 CisgeCAgfCBzdW0gIHwgY291bnQgCistLS0tKy0tLS0tLSstLS0tLS0tCisgIDIgfCAgNjAwIHwg ICAgNTAKKyAgNCB8IDEyMDAgfCAgICA1MAorICA4IHwgIDkwMCB8ICAgIDUwCisgMTIgfCAgNjAw IHwgICAgNTAKKyAxNCB8IDEyMDAgfCAgICA1MAorIDE4IHwgIDkwMCB8ICAgIDUwCisoNiByb3dz KQorCistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0tIGZ1 bGwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS54 LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2df dGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0 My54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0Cisg ICBPdXRwdXQ6IHQxLngsIChzdW0oKHQyLnkgKyB0My55KSkpCisgICBTb3J0IEtleTogdDEueAor ICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAg ICAgICAgICAgIE91dHB1dDogdDEueCwgc3VtKCh0Mi55ICsgdDMueSkpCisgICAgICAgICAgICAg ICBHcm91cCBLZXk6IHQxLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpKQor ICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEueCA9IHQyLngpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQxCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLngsIHQz LngsIChQQVJUSUFMIHN1bSgodDIueSArIHQzLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDIueCwgdDMueCwgUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIueAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54LCB0My55LCB0My54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi54ID0gdDMu eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwgdDIueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDMueSwgdDMueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiMV9wMSB0MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0My55LCB0My54CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIHN1bSgodDJfMS55ICsgdDNf MS55KSkKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAgICAt PiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJ QUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29u ZDogKHQxXzEueCA9IHQyXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS54LCAoUEFSVElBTCBzdW0o KHQyXzEueSArIHQzXzEueSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRp YWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8xLngsIHQzXzEueCwgUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18xLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEu eCA9IHQzXzEueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDJfMQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0M18xLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDNfMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAg ICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDog dDFfMi54LCBzdW0oKHQyXzIueSArIHQzXzIueSkpCisgICAgICAgICAgICAgICBHcm91cCBLZXk6 IHQxXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8yLngsIChQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSkpCisgICAg ICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQxXzIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8y LngsIHQzXzIueCwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCB0M18yLngsIFBBUlRJQUwgc3VtKCh0 Ml8yLnkgKyB0M18yLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55 LCB0Ml8yLngsIHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLnggPSB0M18yLngpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIx X3AzIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQz XzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDNfMi55LCB0M18yLngKKyg3MCByb3dzKQorCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkg KyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04g dDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBC WSB0MS54IE9SREVSIEJZIHQxLng7CisgeCAgfCAgc3VtICAKKy0tLS0rLS0tLS0tLQorICAwIHwg MTAwMDAKKyAgMiB8IDE0MDAwCisgIDQgfCAxODAwMAorICA2IHwgMjIwMDAKKyAgOCB8IDI2MDAw CisgMTAgfCAxMDAwMAorIDEyIHwgMTQwMDAKKyAxNCB8IDE4MDAwCisgMTYgfCAyMjAwMAorIDE4 IHwgMjYwMDAKKyAyMCB8IDEwMDAwCisgMjIgfCAxNDAwMAorIDI0IHwgMTgwMDAKKyAyNiB8IDIy MDAwCisgMjggfCAyNjAwMAorKDE1IHJvd3MpCisKKy0tIHBhcnRpYWwgYWdncmVnYXRpb24KK1NF VCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitT RUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4g ZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBP TiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDMueSwgc3VtKCh0Mi55ICsg dDMueSkpCisgICBHcm91cCBLZXk6IHQzLnkKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6 IHQzLnksIChQQVJUSUFMIHN1bSgodDIueSArIHQzLnkpKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0 My55CisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgKFBBUlRJQUwgc3VtKCh0Ml8xLnkg KyB0M18xLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueCA9IHQx XzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEdyb3VwQWdncmVnYXRlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS55LCB0M18xLngs IFBBUlRJQUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgR3JvdXAgS2V5OiB0Ml8xLngsIHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgSW5jcmVtZW50YWwgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18xLngKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Ml8xLngsIHQzXzEueQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHJlc29ydGVkIEtleTogdDJfMS54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgTWVyZ2UgSm9pbgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18x LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0 Ml8xLnggPSB0M18xLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml8xLnksIHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU29ydCBLZXk6IHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0 Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzEueSwgdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU29ydCBLZXk6IHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFi MV9wMSB0M18xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEg dDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAg ICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDNfMi55LCAoUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKQorICAgICAgICAgICAgICAg ICAgICAgSGFzaCBDb25kOiAodDJfMi54ID0gdDFfMi54KQorICAgICAgICAgICAgICAgICAgICAg LT4gIFBhcnRpYWwgR3JvdXBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfMi54LCB0M18yLnksIHQzXzIueCwgUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIu eSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzIueCwgdDNfMi55 LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBJbmNyZW1lbnRhbCBTb3J0 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54 LCB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBL ZXk6IHQyXzIueCwgdDNfMi55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVz b3J0ZWQgS2V5OiB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBN ZXJnZSBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzIueSwgdDJfMi54LCB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTWVyZ2UgQ29uZDogKHQyXzIueCA9IHQzXzIueCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDJfMi54Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDNf Mi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQzXzIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0MV8yCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIChQQVJUSUFMIHN1bSgodDJfMy55 ICsgdDNfMy55KSkpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8zLnggPSB0 MV8zLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIHQzXzMueSwgdDNfMy54 LCBQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdyb3VwIEtleTogdDJfMy54LCB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIEluY3JlbWVudGFsIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngsIHQzXzMueSwgdDNfMy54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDJfMy54LCB0M18zLnkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNvcnRlZCBLZXk6IHQyXzMueAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIE1lcmdlIEpvaW4KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngsIHQzXzMueSwgdDNf My54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAo dDJfMy54ID0gdDNfMy54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNvcnQgS2V5OiB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMg dDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Ml8zLnksIHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Rh YjFfcDMgdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3Az IHQxXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54Ciso ODggcm93cykKKworU0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSkgRlJPTSBlYWdlcl9hZ2df dGFiMSB0MSBKT0lOIGVhZ2VyX2FnZ190YWIxIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJf YWdnX3RhYjEgdDMgT04gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRFUiBCWSB0My55Owor IHkgIHwgIHN1bSAgCistLS0tKy0tLS0tLS0KKyAgMCB8ICA3NTAwCisgIDIgfCAxMzUwMAorICA0 IHwgMTk1MDAKKyAgNiB8IDI1NTAwCisgIDggfCAzMTUwMAorIDEwIHwgMjI1MDAKKyAxMiB8IDI4 NTAwCisgMTQgfCAzNDUwMAorIDE2IHwgNDA1MDAKKyAxOCB8IDQ2NTAwCisoMTAgcm93cykKKwor UkVTRVQgZW5hYmxlX2hhc2hhZ2c7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190YWIxOworRFJPUCBU QUJMRSBlYWdlcl9hZ2dfdGFiMjsKKy0tCistLSBUZXN0IHdpdGggbXVsdGktbGV2ZWwgcGFydGl0 aW9uaW5nIHNjaGVtZQorLS0KK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sKHggaW50LCB5 IGludCkgUEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJf bWxfcDEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9NICgwKSBU TyAoMTApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDIgUEFSVElUSU9OIE9GIGVh Z2VyX2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIwKSBQQVJUSVRJT04gQlkg UkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSBQQVJUSVRJT04g T0YgZWFnZXJfYWdnX3RhYl9tbF9wMiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpOworQ1JF QVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDJfczIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190 YWJfbWxfcDIgRk9SIFZBTFVFUyBGUk9NICgxNSkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdl cl9hZ2dfdGFiX21sX3AzIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sIEZPUiBWQUxVRVMg RlJPTSAoMjApIFRPICgzMCkgUEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVh Z2VyX2FnZ190YWJfbWxfcDNfczEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDMgRk9S IFZBTFVFUyBGUk9NICgyMCkgVE8gKDI1KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21s X3AzX3MyIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sX3AzIEZPUiBWQUxVRVMgRlJPTSAo MjUpIFRPICgzMCk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiX21sIFNFTEVDVCBpICUgMzAs IGkgJSAzMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBpOworQU5BTFlaRSBlYWdlcl9h Z2dfdGFiX21sOworLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgbWF0Y2hlczsgZnVsbCBhZ2dyZWdh dGlvbiBpcyBwZXJmb3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9h Z2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9V UCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDEueCwg KHN1bSh0Mi55KSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0MS54CisgICAtPiAgQXBwZW5k CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0 cHV0OiB0MS54LCBzdW0odDIueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6 IHQxLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKHQyLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS54ID0gdDIueCkKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54CisgICAgICAgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi54LCAo UEFSVElBTCBzdW0odDIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDIueCwgUEFSVElBTCBzdW0odDIueSksIFBBUlRJQUwgY291 bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiX21sX3AxIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyLnksIHQyLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVn YXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgc3VtKHQyXzEueSksIGNvdW50KCop CisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzEueAorICAgICAgICAgICAgICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIChQQVJUSUFMIHN1 bSh0Ml8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNo IENvbmQ6ICh0MV8xLnggPSB0Ml8xLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDFfMQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgKFBBUlRJQUwgc3Vt KHQyXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMS54LCBQQVJUSUFMIHN1bSh0Ml8xLnkpLCBQQVJUSUFMIGNvdW50KCop CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdGFiX21sX3AyX3MxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMS55LCB0Ml8xLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNo QWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgc3VtKHQyXzIueSksIGNv dW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzIueAorICAgICAgICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIChQQVJU SUFMIHN1bSh0Ml8yLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDFfMgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgKFBBUlRJ QUwgc3VtKHQyXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfMi54LCBQQVJUSUFMIHN1bSh0Ml8yLnkpLCBQQVJUSUFMIGNv dW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzIu eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgIC0+ICBGaW5hbGl6 ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMueCwgc3VtKHQyXzMu eSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzMueAorICAgICAgICAg ICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngs IChQQVJUSUFMIHN1bSh0Ml8zLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0MV8zLnggPSB0Ml8zLngpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDFfMworICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwg KFBBUlRJQUwgc3VtKHQyXzMueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCBQQVJUSUFMIHN1bSh0Ml8zLnkpLCBQQVJU SUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6 IHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQyXzMKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgIC0+ICBG aW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueCwgc3Vt KHQyXzQueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzQueAorICAg ICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MV80LngsIChQQVJUSUFMIHN1bSh0Ml80LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV80LnggPSB0Ml80LngpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDFf NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzQueCwgKFBBUlRJQUwgc3VtKHQyXzQueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC54LCBQQVJUSUFMIHN1bSh0Ml80Lnkp LCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91 cCBLZXk6IHQyXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQyXzQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC55LCB0Ml80LngKKyg3OSByb3dz KQorCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJf bWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEdST1VQIEJZIHQx LnggT1JERVIgQlkgdDEueDsKKyB4ICB8ICBzdW0gIHwgY291bnQgCistLS0tKy0tLS0tLS0rLS0t LS0tLQorICAwIHwgICAgIDAgfCAgMTA4OQorICAxIHwgIDExNTYgfCAgMTE1NgorICAyIHwgIDIz MTIgfCAgMTE1NgorICAzIHwgIDM0NjggfCAgMTE1NgorICA0IHwgIDQ2MjQgfCAgMTE1NgorICA1 IHwgIDU3ODAgfCAgMTE1NgorICA2IHwgIDY5MzYgfCAgMTE1NgorICA3IHwgIDgwOTIgfCAgMTE1 NgorICA4IHwgIDkyNDggfCAgMTE1NgorICA5IHwgMTA0MDQgfCAgMTE1NgorIDEwIHwgMTE1NjAg fCAgMTE1NgorIDExIHwgMTE5NzkgfCAgMTA4OQorIDEyIHwgMTMwNjggfCAgMTA4OQorIDEzIHwg MTQxNTcgfCAgMTA4OQorIDE0IHwgMTUyNDYgfCAgMTA4OQorIDE1IHwgMTYzMzUgfCAgMTA4OQor IDE2IHwgMTc0MjQgfCAgMTA4OQorIDE3IHwgMTg1MTMgfCAgMTA4OQorIDE4IHwgMTk2MDIgfCAg MTA4OQorIDE5IHwgMjA2OTEgfCAgMTA4OQorIDIwIHwgMjE3ODAgfCAgMTA4OQorIDIxIHwgMjI4 NjkgfCAgMTA4OQorIDIyIHwgMjM5NTggfCAgMTA4OQorIDIzIHwgMjUwNDcgfCAgMTA4OQorIDI0 IHwgMjYxMzYgfCAgMTA4OQorIDI1IHwgMjcyMjUgfCAgMTA4OQorIDI2IHwgMjgzMTQgfCAgMTA4 OQorIDI3IHwgMjk0MDMgfCAgMTA4OQorIDI4IHwgMzA0OTIgfCAgMTA4OQorIDI5IHwgMzE1ODEg fCAgMTA4OQorKDMwIHJvd3MpCisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNlIGRvZXMgbm90IG1h dGNoOyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24u CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueSwgc3VtKHQyLnkpLCBj b3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQy IE9OIHQxLnggPSB0Mi54IEdST1VQIEJZIHQxLnkgT1JERVIgQlkgdDEueTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29y dAorICAgT3V0cHV0OiB0MS55LCAoc3VtKHQyLnkpKSwgKGNvdW50KCopKQorICAgU29ydCBLZXk6 IHQxLnkKKyAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQx LnksIHN1bSh0Mi55KSwgY291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogdDEueQorICAgICAg ICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0MV8xLnksIChQQVJUSUFMIHN1bSh0Ml8xLnkpKSwgKFBBUlRJQUwg Y291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8xLnggPSB0Ml8x LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWJfbWxfcDEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8x LnksIHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCAoUEFSVElBTCBzdW0odDJfMS55KSksIChQQVJU SUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFz aEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8x LngsIFBBUlRJQUwgc3VtKHQyXzEueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMS54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEg dDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8x LnksIHQyXzEueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MV8yLnksIChQQVJUSUFMIHN1bSh0Ml8yLnkpKSwgKFBBUlRJQUwgY291 bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngp CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190 YWJfbWxfcDJfczEgdDFfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8y LnksIHQxXzIueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCAoUEFSVElBTCBzdW0odDJfMi55KSksIChQQVJU SUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFz aEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8y LngsIFBBUlRJQUwgc3VtKHQyXzIueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMi54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJf czEgdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml8yLnksIHQyXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0MV8zLnksIChQQVJUSUFMIHN1bSh0Ml8zLnkpKSwgKFBBUlRJQUwg Y291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8zLnggPSB0Ml8z LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWJfbWxfcDJfczIgdDFfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MV8zLnksIHQxXzMueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCAoUEFSVElBTCBzdW0odDJfMy55KSksIChQ QVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwg SGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml8zLngsIFBBUlRJQUwgc3VtKHQyXzMueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMy54CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxf cDJfczIgdDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8zLnksIHQyXzMueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0MV80LnksIChQQVJUSUFMIHN1bSh0Ml80LnkpKSwgKFBBUlRJ QUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV80LnggPSB0 Ml80LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190YWJfbWxfcDNfczEgdDFfNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV80LnksIHQxXzQueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC54LCAoUEFSVElBTCBzdW0odDJfNC55KSks IChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRp YWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml80LngsIFBBUlRJQUwgc3VtKHQyXzQueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfNC54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJf bWxfcDNfczEgdDJfNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml80LnksIHQyXzQueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0MV81LnksIChQQVJUSUFMIHN1bSh0Ml81LnkpKSwgKFBB UlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV81Lngg PSB0Ml81LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWJfbWxfcDNfczIgdDFfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0MV81LnksIHQxXzUueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNS54LCAoUEFSVElBTCBzdW0odDJfNS55 KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBh cnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml81LngsIFBBUlRJQUwgc3VtKHQyXzUueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfNS54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190 YWJfbWxfcDNfczIgdDJfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Ml81LnksIHQyXzUueAorKDY3IHJvd3MpCisKK1NFTEVDVCB0MS55LCBzdW0odDIu eSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJf bWwgdDIgT04gdDEueCA9IHQyLnggR1JPVVAgQlkgdDEueSBPUkRFUiBCWSB0MS55OworIHkgIHwg IHN1bSAgfCBjb3VudCAKKy0tLS0rLS0tLS0tLSstLS0tLS0tCisgIDAgfCAgICAgMCB8ICAxMDg5 CisgIDEgfCAgMTE1NiB8ICAxMTU2CisgIDIgfCAgMjMxMiB8ICAxMTU2CisgIDMgfCAgMzQ2OCB8 ICAxMTU2CisgIDQgfCAgNDYyNCB8ICAxMTU2CisgIDUgfCAgNTc4MCB8ICAxMTU2CisgIDYgfCAg NjkzNiB8ICAxMTU2CisgIDcgfCAgODA5MiB8ICAxMTU2CisgIDggfCAgOTI0OCB8ICAxMTU2Cisg IDkgfCAxMDQwNCB8ICAxMTU2CisgMTAgfCAxMTU2MCB8ICAxMTU2CisgMTEgfCAxMTk3OSB8ICAx MDg5CisgMTIgfCAxMzA2OCB8ICAxMDg5CisgMTMgfCAxNDE1NyB8ICAxMDg5CisgMTQgfCAxNTI0 NiB8ICAxMDg5CisgMTUgfCAxNjMzNSB8ICAxMDg5CisgMTYgfCAxNzQyNCB8ICAxMDg5CisgMTcg fCAxODUxMyB8ICAxMDg5CisgMTggfCAxOTYwMiB8ICAxMDg5CisgMTkgfCAyMDY5MSB8ICAxMDg5 CisgMjAgfCAyMTc4MCB8ICAxMDg5CisgMjEgfCAyMjg2OSB8ICAxMDg5CisgMjIgfCAyMzk1OCB8 ICAxMDg5CisgMjMgfCAyNTA0NyB8ICAxMDg5CisgMjQgfCAyNjEzNiB8ICAxMDg5CisgMjUgfCAy NzIyNSB8ICAxMDg5CisgMjYgfCAyODMxNCB8ICAxMDg5CisgMjcgfCAyOTQwMyB8ICAxMDg5Cisg MjggfCAzMDQ5MiB8ICAxMDg5CisgMjkgfCAzMTU4MSB8ICAxMDg5CisoMzAgcm93cykKKworLS0g Q2hlY2sgd2l0aCBlYWdlciBhZ2dyZWdhdGlvbiBvdmVyIGpvaW4gcmVsCistLSBmdWxsIGFnZ3Jl Z2F0aW9uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQy LnkgKyB0My55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJf YWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24g dDIueCA9IHQzLnggR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDEueCwgKHN1 bSgodDIueSArIHQzLnkpKSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0MS54CisgICAtPiAg QXBwZW5kCisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgT3V0cHV0OiB0MS54LCBzdW0oKHQyLnkgKyB0My55KSksIGNvdW50KCopCisgICAgICAgICAg ICAgICBHcm91cCBLZXk6IHQxLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkp KSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0 MS54ID0gdDIueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYl9tbF9wMSB0MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Mi54LCB0My54LCAoUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSkp LCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0 aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDIueCwgdDMueCwgUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSksIFBBUlRJQUwgY291bnQo KikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54LCB0My55LCB0My54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi54 ID0gdDMueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0My55LCB0My54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LmVhZ2VyX2FnZ190YWJfbWxfcDEgdDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDMueSwgdDMueAorICAgICAgICAgLT4gIEZpbmFs aXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBzdW0oKHQy XzEueSArIHQzXzEueSkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8x LngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDFfMS54LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpKSwgKFBBUlRJQUwg Y291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8xLnggPSB0Ml8x LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWJfbWxfcDJfczEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS54LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQz XzEueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzEueCwgdDNfMS54LCBQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSks IFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vw IEtleTogdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEu eSwgdDJfMS54LCB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAodDJfMS54ID0gdDNfMS54KQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFi X21sX3AyX3MxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMS55LCB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJf bWxfcDJfczEgdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhh c2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCBzdW0oKHQyXzIueSAr IHQzXzIueSkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAg ICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDFfMi54LCAoUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKSwgKFBBUlRJQUwgY291bnQo KikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJf bWxfcDJfczIgdDFfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzIueCwgdDNfMi54LCAoUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkp KSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFy dGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzIueCwgdDNfMi54LCBQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSksIFBBUlRJ QUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTog dDJfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJf Mi54LCB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDJfMi54ID0gdDNfMi54KQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3Ay X3MyIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJf czIgdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0M18yLnksIHQzXzIueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54LCBzdW0oKHQyXzMueSArIHQzXzMu eSkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8zLngKKyAgICAgICAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54 LCAoUEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8zLnggPSB0Ml8zLngpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNf czEgdDFfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzMueCwgdDNfMy54LCAoUEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMueSkpKSwgKFBB UlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBI YXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzMueCwgdDNfMy54LCBQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSksIFBBUlRJQUwgY291 bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMy54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54LCB0 M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFz aCBDb25kOiAodDJfMy54ID0gdDNfMy54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQy XzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDJfMy55LCB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDNf MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0M18zLnksIHQzXzMueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUK KyAgICAgICAgICAgICAgIE91dHB1dDogdDFfNC54LCBzdW0oKHQyXzQueSArIHQzXzQueSkpLCBj b3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV80LngKKyAgICAgICAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNC54LCAoUEFS VElBTCBzdW0oKHQyXzQueSArIHQzXzQueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV80LnggPSB0Ml80LngpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDFf NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzQueCwgdDNfNC54LCAoUEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQueSkpKSwgKFBBUlRJQUwg Y291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdn cmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueCwg dDNfNC54LCBQQVJUSUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSksIFBBUlRJQUwgY291bnQoKikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfNC54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueSwgdDJfNC54LCB0M180Lnks IHQzXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDJfNC54ID0gdDNfNC54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQyXzQKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC55 LCB0Ml80LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQz XzQueSwgdDNfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDNfNAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 M180LnksIHQzXzQueAorKDExNCByb3dzKQorCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55 KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9t bCB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQz LnggR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworIHggIHwgICBzdW0gICB8IGNvdW50IAor LS0tLSstLS0tLS0tLS0rLS0tLS0tLQorICAwIHwgICAgICAgMCB8IDM1OTM3CisgIDEgfCAgIDc4 NjA4IHwgMzkzMDQKKyAgMiB8ICAxNTcyMTYgfCAzOTMwNAorICAzIHwgIDIzNTgyNCB8IDM5MzA0 CisgIDQgfCAgMzE0NDMyIHwgMzkzMDQKKyAgNSB8ICAzOTMwNDAgfCAzOTMwNAorICA2IHwgIDQ3 MTY0OCB8IDM5MzA0CisgIDcgfCAgNTUwMjU2IHwgMzkzMDQKKyAgOCB8ICA2Mjg4NjQgfCAzOTMw NAorICA5IHwgIDcwNzQ3MiB8IDM5MzA0CisgMTAgfCAgNzg2MDgwIHwgMzkzMDQKKyAxMSB8ICA3 OTA2MTQgfCAzNTkzNworIDEyIHwgIDg2MjQ4OCB8IDM1OTM3CisgMTMgfCAgOTM0MzYyIHwgMzU5 MzcKKyAxNCB8IDEwMDYyMzYgfCAzNTkzNworIDE1IHwgMTA3ODExMCB8IDM1OTM3CisgMTYgfCAx MTQ5OTg0IHwgMzU5MzcKKyAxNyB8IDEyMjE4NTggfCAzNTkzNworIDE4IHwgMTI5MzczMiB8IDM1 OTM3CisgMTkgfCAxMzY1NjA2IHwgMzU5MzcKKyAyMCB8IDE0Mzc0ODAgfCAzNTkzNworIDIxIHwg MTUwOTM1NCB8IDM1OTM3CisgMjIgfCAxNTgxMjI4IHwgMzU5MzcKKyAyMyB8IDE2NTMxMDIgfCAz NTkzNworIDI0IHwgMTcyNDk3NiB8IDM1OTM3CisgMjUgfCAxNzk2ODUwIHwgMzU5MzcKKyAyNiB8 IDE4Njg3MjQgfCAzNTkzNworIDI3IHwgMTk0MDU5OCB8IDM1OTM3CisgMjggfCAyMDEyNDcyIHwg MzU5MzcKKyAyOSB8IDIwODQzNDYgfCAzNTkzNworKDMwIHJvd3MpCisKKy0tIHBhcnRpYWwgYWdn cmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0My55LCBzdW0o dDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdl cl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBv biB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAg IE91dHB1dDogdDMueSwgKHN1bSgodDIueSArIHQzLnkpKSksIChjb3VudCgqKSkKKyAgIFNvcnQg S2V5OiB0My55CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0 OiB0My55LCBzdW0oKHQyLnkgKyB0My55KSksIGNvdW50KCopCisgICAgICAgICBHcm91cCBLZXk6 IHQzLnkKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCAoUEFSVElBTCBzdW0oKHQyXzEu eSArIHQzXzEueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBI YXNoIENvbmQ6ICh0MV8xLnggPSB0Ml8xLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDFfMQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS55LCB0M18x LngsIChQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCB0M18xLnksIHQz XzEueCwgUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpLCBQQVJUSUFMIGNvdW50KCopCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueCwgdDNfMS55 LCB0M18xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0 Ml8xLngsIHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBIYXNoIENvbmQ6ICh0Ml8xLnggPSB0M18xLngpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxf cDEgdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml8xLnksIHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDNfMS55LCB0M18xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0 M18xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0 M18yLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDFfMi54ID0gdDJfMi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQxXzIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQzXzIueSwgdDNfMi54 LCAoUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgdDNfMi55LCB0M18y LngsIFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSwgUEFSVElBTCBjb3VudCgqKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8yLngsIHQzXzIueSwg dDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJf Mi54LCB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDJfMi54ID0gdDNfMi54KQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3Ay X3MxIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJf czEgdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIChQQVJUSUFMIHN1bSgodDJfMy55 ICsgdDNfMy55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhh c2ggQ29uZDogKHQxXzMueCA9IHQyXzMueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0MV8zCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCB0M18zLnksIHQz XzMueCwgKFBBUlRJQUwgc3VtKCh0Ml8zLnkgKyB0M18zLnkpKSksIChQQVJUSUFMIGNvdW50KCop KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIHQzXzMueSwg dDNfMy54LCBQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSksIFBBUlRJQUwgY291bnQoKikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMy54LCB0M18z LnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnks IHQyXzMueCwgdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQyXzMueCA9IHQzXzMueCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9t bF9wMl9zMiB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21s X3AyX3MyIHQzXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNC55LCAoUEFSVElBTCBzdW0oKHQy XzQueSArIHQzXzQueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0MV80LnggPSB0Ml80LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDFfNAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueCwgdDNfNC55 LCB0M180LngsIChQQVJUSUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSkpLCAoUEFSVElBTCBjb3Vu dCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC54LCB0M180 LnksIHQzXzQueCwgUEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQueSkpLCBQQVJUSUFMIGNvdW50 KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzQueCwg dDNfNC55LCB0M180LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo IEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf NC55LCB0Ml80LngsIHQzXzQueSwgdDNfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml80LnggPSB0M180LngpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190 YWJfbWxfcDNfczEgdDJfNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml80LnksIHQyXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDNfNC55LCB0M180LngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Rh Yl9tbF9wM19zMSB0M180CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQzXzQueSwgdDNfNC54CisgICAgICAgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzUueSwgKFBBUlRJQUwgc3Vt KCh0Ml81LnkgKyB0M181LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAg ICAgICAgSGFzaCBDb25kOiAodDFfNS54ID0gdDJfNS54KQorICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQxXzUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNS54CisgICAgICAgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml81LngsIHQz XzUueSwgdDNfNS54LCAoUEFSVElBTCBzdW0oKHQyXzUueSArIHQzXzUueSkpKSwgKFBBUlRJQUwg Y291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdn cmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzUueCwg dDNfNS55LCB0M181LngsIFBBUlRJQUwgc3VtKCh0Ml81LnkgKyB0M181LnkpKSwgUEFSVElBTCBj b3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml81 LngsIHQzXzUueSwgdDNfNS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg SGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzUueSwgdDJfNS54LCB0M181LnksIHQzXzUueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfNS54ID0gdDNfNS54KQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiX21sX3AzX3MyIHQyXzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfNS55LCB0Ml81LngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzUueSwgdDNfNS54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWJfbWxfcDNfczIgdDNfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0M181LnksIHQzXzUueAorKDEwMiByb3dzKQorCitTRUxF Q1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21s IHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2Fn Z190YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRFUiBCWSB0My55Owor IHkgIHwgICBzdW0gICB8IGNvdW50IAorLS0tLSstLS0tLS0tLS0rLS0tLS0tLQorICAwIHwgICAg ICAgMCB8IDM1OTM3CisgIDEgfCAgIDc4NjA4IHwgMzkzMDQKKyAgMiB8ICAxNTcyMTYgfCAzOTMw NAorICAzIHwgIDIzNTgyNCB8IDM5MzA0CisgIDQgfCAgMzE0NDMyIHwgMzkzMDQKKyAgNSB8ICAz OTMwNDAgfCAzOTMwNAorICA2IHwgIDQ3MTY0OCB8IDM5MzA0CisgIDcgfCAgNTUwMjU2IHwgMzkz MDQKKyAgOCB8ICA2Mjg4NjQgfCAzOTMwNAorICA5IHwgIDcwNzQ3MiB8IDM5MzA0CisgMTAgfCAg Nzg2MDgwIHwgMzkzMDQKKyAxMSB8ICA3OTA2MTQgfCAzNTkzNworIDEyIHwgIDg2MjQ4OCB8IDM1 OTM3CisgMTMgfCAgOTM0MzYyIHwgMzU5MzcKKyAxNCB8IDEwMDYyMzYgfCAzNTkzNworIDE1IHwg MTA3ODExMCB8IDM1OTM3CisgMTYgfCAxMTQ5OTg0IHwgMzU5MzcKKyAxNyB8IDEyMjE4NTggfCAz NTkzNworIDE4IHwgMTI5MzczMiB8IDM1OTM3CisgMTkgfCAxMzY1NjA2IHwgMzU5MzcKKyAyMCB8 IDE0Mzc0ODAgfCAzNTkzNworIDIxIHwgMTUwOTM1NCB8IDM1OTM3CisgMjIgfCAxNTgxMjI4IHwg MzU5MzcKKyAyMyB8IDE2NTMxMDIgfCAzNTkzNworIDI0IHwgMTcyNDk3NiB8IDM1OTM3CisgMjUg fCAxNzk2ODUwIHwgMzU5MzcKKyAyNiB8IDE4Njg3MjQgfCAzNTkzNworIDI3IHwgMTk0MDU5OCB8 IDM1OTM3CisgMjggfCAyMDEyNDcyIHwgMzU5MzcKKyAyOSB8IDIwODQzNDYgfCAzNTkzNworKDMw IHJvd3MpCisKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbDsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zeXN2aWV3cy5vdXQKaW5kZXggZmFkN2ZjM2E3ZS4uMWRkYTY5ZTdjMiAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE1MCw2ICsxNTAsNyBAQCBzZWxlY3Qg bmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7 CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0KICBlbmFibGVfYXN5 bmNfYXBwZW5kICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9iaXRtYXBzY2FuICAgICAgICAgICAg ICB8IG9uCisgZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSAgICAgICAgIHwgb2ZmCiAgZW5hYmxlX2dh dGhlcm1lcmdlICAgICAgICAgICAgIHwgb24KICBlbmFibGVfZ3JvdXBfYnlfcmVvcmRlcmluZyAg ICAgfCBvbgogIGVuYWJsZV9oYXNoYWdnICAgICAgICAgICAgICAgICB8IG9uCkBAIC0xNzAsNyAr MTcxLDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1l IGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAg ZW5hYmxlX3NvcnQgICAgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAg ICAgICAgICAgICAgfCBvbgotKDIyIHJvd3MpCisoMjMgcm93cykKIAogLS0gVGhlcmUgYXJlIGFs d2F5cyB3YWl0IGV2ZW50IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlv blBvaW50CiAtLSBtYXkgYmUgcHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5 IHNpbmNlIGxhc3QgcG9zdG1hc3RlciBzdGFydC4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxl CmluZGV4IDI0MjllYzJiYmEuLmQ1Njk3ZTU2NTUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hl ZHVsZQpAQCAtMTE5LDcgKzExOSw3IEBAIHRlc3Q6IHBsYW5jYWNoZSBsaW1pdCBwbHBnc3FsIGNv cHkyIHRlbXAgZG9tYWluIHJhbmdlZnVuY3MgcHJlcGFyZSBjb252ZXJzaW9uIHRyCiAjIFRoZSBz dGF0cyB0ZXN0IHJlc2V0cyBzdGF0cywgc28gbm90aGluZyBlbHNlIG5lZWRpbmcgc3RhdHMgYWNj ZXNzIGNhbiBiZSBpbgogIyB0aGlzIGdyb3VwLgogIyAtLS0tLS0tLS0tCi10ZXN0OiBwYXJ0aXRp b25fbWVyZ2UgcGFydGl0aW9uX3NwbGl0IHBhcnRpdGlvbl9qb2luIHBhcnRpdGlvbl9wcnVuZSBy ZWxvcHRpb25zIGhhc2hfcGFydCBpbmRleGluZyBwYXJ0aXRpb25fYWdncmVnYXRlIHBhcnRpdGlv bl9pbmZvIHR1cGxlc29ydCBleHBsYWluIGNvbXByZXNzaW9uIG1lbW9pemUgc3RhdHMgcHJlZGlj YXRlCit0ZXN0OiBwYXJ0aXRpb25fbWVyZ2UgcGFydGl0aW9uX3NwbGl0IHBhcnRpdGlvbl9qb2lu IHBhcnRpdGlvbl9wcnVuZSByZWxvcHRpb25zIGhhc2hfcGFydCBpbmRleGluZyBwYXJ0aXRpb25f YWdncmVnYXRlIHBhcnRpdGlvbl9pbmZvIHR1cGxlc29ydCBleHBsYWluIGNvbXByZXNzaW9uIG1l bW9pemUgc3RhdHMgcHJlZGljYXRlIGVhZ2VyX2FnZ3JlZ2F0ZQogCiAjIGV2ZW50X3RyaWdnZXIg ZGVwZW5kcyBvbiBjcmVhdGVfYW0gYW5kIGNhbm5vdCBydW4gY29uY3VycmVudGx5IHdpdGgKICMg YW55IHRlc3QgdGhhdCBydW5zIERETApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv ZWFnZXJfYWdncmVnYXRlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VhZ2VyX2FnZ3JlZ2F0 ZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDA1MGU0ZGY0NAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VhZ2VyX2FnZ3JlZ2F0ZS5z cWwKQEAgLTAsMCArMSwxOTIgQEAKKy0tCistLSBFQUdFUiBBR0dSRUdBVElPTgorLS0gVGVzdCB3 ZSBjYW4gcHVzaCBhZ2dyZWdhdGlvbiBkb3duIGJlbG93IGpvaW4KKy0tCisKKy0tIEVuYWJsZSBl YWdlciBhZ2dyZWdhdGlvbiwgd2hpY2ggYnkgZGVmYXVsdCBpcyBkaXNhYmxlZC4KK1NFVCBlbmFi bGVfZWFnZXJfYWdncmVnYXRlIFRPIG9uOworCitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QxIChh IGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdn X3QyIChhIGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFCTEUgZWFn ZXJfYWdnX3QzIChhIGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CisKK0lOU0VSVCBJ TlRPIGVhZ2VyX2FnZ190MSBTRUxFQ1QgaSwgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAx MDAwKWk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdDIgU0VMRUNUIGksIGklMTAsIGkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMClpOworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3QzIFNFTEVD VCBpJTEwLCBpJTEwLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApaTsKKworQU5BTFla RSBlYWdlcl9hZ2dfdDE7CitBTkFMWVpFIGVhZ2VyX2FnZ190MjsKK0FOQUxZWkUgZWFnZXJfYWdn X3QzOworCisKKy0tCistLSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgYmFzZSByZWwKKy0t CisKKy0tIFBlcmZvcm0gc2NhbiBvZiBhIHRhYmxlLCBhZ2dyZWdhdGUgdGhlIHJlc3VsdCwgam9p biBpdCB0byB0aGUgb3RoZXIgdGFibGUKKy0tIGFuZCBmaW5hbGl6ZSB0aGUgYWdncmVnYXRpb24u CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZS T00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdS T1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBl YWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAg QlkgdDEuYSBPUkRFUiBCWSB0MS5hOworCistLSBQcm9kdWNlIHJlc3VsdHMgd2l0aCBzb3J0aW5n IGFnZ3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2ZmOworCitFWFBMQUlOIChWRVJC T1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3Qx IHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JE RVIgQlkgdDEuYTsKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEg Sk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBC WSB0MS5hOworCitSRVNFVCBlbmFibGVfaGFzaGFnZzsKKworCistLQorLS0gVGVzdCBlYWdlciBh Z2dyZWdhdGlvbiBvdmVyIGpvaW4gcmVsCistLQorCistLSBQZXJmb3JtIGpvaW4gb2YgdGFibGVz LCBhZ2dyZWdhdGUgdGhlIHJlc3VsdCwgam9pbiBpdCB0byB0aGUgb3RoZXIgdGFibGUKKy0tIGFu ZCBmaW5hbGl6ZSB0aGUgYWdncmVnYXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYp CitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lO IGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0 Mi5hID0gdDMuYSBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CitTRUxFQ1QgdDEuYSwgYXZn KHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBP TiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBC WSB0MS5hIE9SREVSIEJZIHQxLmE7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcg YWdncmVnYXRpb24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7CisKK0VYUExBSU4gKFZFUkJP U0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJf YWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJf YWdnX3QzIHQzIE9OIHQyLmEgPSB0My5hIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKK1NF TEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFn ZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEg PSB0My5hIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKworUkVTRVQgZW5hYmxlX2hhc2hh Z2c7CisKKworLS0KKy0tIFRlc3QgdGhhdCBlYWdlciBhZ2dyZWdhdGlvbiB3b3JrcyBmb3Igb3V0 ZXIgam9pbgorLS0KKworLS0gRW5zdXJlIGFnZ3JlZ2F0aW9uIGNhbiBiZSBwdXNoZWQgZG93biB0 byB0aGUgbm9uLW51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgUklHSFQgSk9JTiBlYWdl cl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOwor U0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBSSUdIVCBKT0lOIGVh Z2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7 CisKKy0tIEVuc3VyZSBhZ2dyZWdhdGlvbiBjYW5ub3QgYmUgcHVzaGVkIGRvd24gdG8gdGhlIG51 bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0Mi5iLCBh dmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgTEVGVCBKT0lOIGVhZ2VyX2FnZ190MiB0MiBP TiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0Mi5iIE9SREVSIEJZIHQyLmI7CitTRUxFQ1QgdDIuYiwg YXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIExFRlQgSk9JTiBlYWdlcl9hZ2dfdDIgdDIg T04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDIuYiBPUkRFUiBCWSB0Mi5iOworCisKKy0tCistLSBU ZXN0IHRoYXQgZWFnZXIgYWdncmVnYXRpb24gd29ya3MgZm9yIHBhcmFsbGVsIHBsYW5zCistLQor CitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdD0wOworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3Q9MDsK K1NFVCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplPTA7CitTRVQgbWF4X3BhcmFsbGVsX3dv cmtlcnNfcGVyX2dhdGhlcj00OworCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxF Q1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3Qy IHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKK1NFTEVDVCB0 MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIg T04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworCitSRVNFVCBwYXJh bGxlbF9zZXR1cF9jb3N0OworUkVTRVQgcGFyYWxsZWxfdHVwbGVfY29zdDsKK1JFU0VUIG1pbl9w YXJhbGxlbF90YWJsZV9zY2FuX3NpemU7CitSRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyOworCisKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3QxOworRFJPUCBUQUJMRSBlYWdlcl9h Z2dfdDI7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MzsKKworCistLQorLS0gVGVzdCBlYWdlciBh Z2dyZWdhdGlvbiBmb3IgcGFydGl0aW9ud2lzZSBqb2luCistLQorCistLSBFbmFibGUgcGFydGl0 aW9ud2lzZSBhZ2dyZWdhdGUsIHdoaWNoIGJ5IGRlZmF1bHQgaXMgZGlzYWJsZWQuCitTRVQgZW5h YmxlX3BhcnRpdGlvbndpc2VfYWdncmVnYXRlIFRPIHRydWU7CistLSBFbmFibGUgcGFydGl0aW9u d2lzZSBqb2luLCB3aGljaCBieSBkZWZhdWx0IGlzIGRpc2FibGVkLgorU0VUIGVuYWJsZV9wYXJ0 aXRpb253aXNlX2pvaW4gVE8gdHJ1ZTsKKworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIxKHgg aW50LCB5IGludCkgUEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2Fn Z190YWIxX3AxIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMSBGT1IgVkFMVUVTIEZST00gKDAp IFRPICgxMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDIgUEFSVElUSU9OIE9GIGVh Z2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgyMCk7CitDUkVBVEUgVEFCTEUg ZWFnZXJfYWdnX3RhYjFfcDMgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxVRVMg RlJPTSAoMjApIFRPICgzMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjIoeCBpbnQsIHkg aW50KSBQQVJUSVRJT04gQlkgUkFOR0UoeSk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjJf cDEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIyIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEw KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdn X3RhYjIgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9h Z2dfdGFiMl9wMyBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9NICgy MCkgVE8gKDMwKTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWIxIFNFTEVDVCBpICUgMzAsIGkg JSAyMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLCAyOTksIDIpIGk7CitJTlNFUlQgSU5UTyBlYWdl cl9hZ2dfdGFiMiBTRUxFQ1QgaSAlIDIwLCBpICUgMzAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCwg Mjk5LCAzKSBpOworCitBTkFMWVpFIGVhZ2VyX2FnZ190YWIxOworQU5BTFlaRSBlYWdlcl9hZ2df dGFiMjsKKworLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgbWF0Y2hlczsgZnVsbCBhZ2dyZWdhdGlv biBpcyBwZXJmb3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09T VFMgT0ZGKQorU0VMRUNUIHQxLngsIHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2df dGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDEu eCBPUkRFUiBCWSB0MS54OworU0VMRUNUIHQxLngsIHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBl YWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JP VVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworCistLSBHUk9VUCBCWSBoYXZpbmcgb3RoZXIgbWF0 Y2hpbmcga2V5CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDIueSwgc3Vt KHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0 MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi55IE9SREVSIEJZIHQyLnk7CitTRUxFQ1Qg dDIueSwgc3VtKHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9h Z2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi55IE9SREVSIEJZIHQyLnk7 CisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNlIGRvZXMgbm90IG1hdGNoOyBwYXJ0aWFsIGFnZ3Jl Z2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NF LCBDT1NUUyBPRkYpCitTRUxFQ1QgdDIueCwgc3VtKHQxLngpLCBjb3VudCgqKSBGUk9NIGVhZ2Vy X2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBC WSB0Mi54IEhBVklORyBhdmcodDEueCkgPiAxMCBPUkRFUiBCWSB0Mi54OworU0VMRUNUIHQyLngs IHN1bSh0MS54KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3Rh YjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueCBIQVZJTkcgYXZnKHQxLngpID4g MTAgT1JERVIgQlkgdDIueDsKKworLS0gQ2hlY2sgd2l0aCBlYWdlciBhZ2dyZWdhdGlvbiBvdmVy IGpvaW4gcmVsCistLSBmdWxsIGFnZ3JlZ2F0aW9uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQx IEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFi MSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CitTRUxFQ1Qg dDEueCwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJf YWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54 ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisKKy0tIHBhcnRpYWwgYWdncmVn YXRpb24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpCitTRUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIx IHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2df dGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CitTRUxF Q1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFn ZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0 Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CitSRVNFVCBlbmFibGVfaGFz aGFnZzsKKworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdGFiMTsKK0RST1AgVEFCTEUgZWFnZXJfYWdn X3RhYjI7CisKKworLS0KKy0tIFRlc3Qgd2l0aCBtdWx0aS1sZXZlbCBwYXJ0aXRpb25pbmcgc2No ZW1lCistLQorQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWwoeCBpbnQsIHkgaW50KSBQQVJU SVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMSBQQVJU SVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7CitD UkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3Rh Yl9tbCBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApIFBBUlRJVElPTiBCWSBSQU5HRSh4KTsK K0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AyX3MxIFBBUlRJVElPTiBPRiBlYWdlcl9h Z2dfdGFiX21sX3AyIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSk7CitDUkVBVEUgVEFCTEUg ZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9wMiBG T1IgVkFMVUVTIEZST00gKDE1KSBUTyAoMjApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJf bWxfcDMgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9NICgyMCkg VE8gKDMwKSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3Rh Yl9tbF9wM19zMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9wMyBGT1IgVkFMVUVTIEZS T00gKDIwKSBUTyAoMjUpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDNfczIgUEFS VElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDMgRk9SIFZBTFVFUyBGUk9NICgyNSkgVE8gKDMw KTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWJfbWwgU0VMRUNUIGkgJSAzMCwgaSAlIDMwIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CisKK0FOQUxZWkUgZWFnZXJfYWdnX3RhYl9t bDsKKworLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgbWF0Y2hlczsgZnVsbCBhZ2dyZWdhdGlvbiBp cyBwZXJmb3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMg T0ZGKQorU0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFi X21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0 MS54IE9SREVSIEJZIHQxLng7CitTRUxFQ1QgdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9N IGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0 Mi54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKworLS0gV2hlbiBHUk9VUCBCWSBjbGF1 c2UgZG9lcyBub3QgbWF0Y2g7IHBhcnRpYWwgYWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZvciBl YWNoIHBhcnRpdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS55 LCBzdW0odDIueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2Vy X2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggR1JPVVAgQlkgdDEueSBPUkRFUiBCWSB0MS55 OworU0VMRUNUIHQxLnksIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21s IHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS55 IE9SREVSIEJZIHQxLnk7CisKKy0tIENoZWNrIHdpdGggZWFnZXIgYWdncmVnYXRpb24gb3ZlciBq b2luIHJlbAorLS0gZnVsbCBhZ2dyZWdhdGlvbgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZG KQorU0VMRUNUIHQxLngsIHN1bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdn X3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggSk9JTiBl YWdlcl9hZ2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQxLnggT1JERVIgQlkg dDEueDsKK1NFTEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2Vy X2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpP SU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVS IEJZIHQxLng7CisKKy0tIHBhcnRpYWwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENP U1RTIE9GRikKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVh Z2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54 IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9S REVSIEJZIHQzLnk7CitTRUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSwgY291bnQoKikgRlJP TSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0g dDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMu eSBPUkRFUiBCWSB0My55OworCitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWw7CmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CmluZGV4IDUwMmM3NDhlY2QuLjdlZWMxMjgxZTYgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC00MSw2ICs0MSw3IEBAIEFmdGVyVHJpZ2dlcnNUYWJsZURhdGEK IEFmdGVyVHJpZ2dlcnNUcmFuc0RhdGEKIEFnZwogQWdnQ2xhdXNlQ29zdHMKK0FnZ0NsYXVzZUlu Zm8KIEFnZ0luZm8KIEFnZ1BhdGgKIEFnZ1NwbGl0CkBAIC0xMDYxLDYgKzEwNjIsNyBAQCBHcmFu dFRhcmdldFR5cGUKIEdyb3VwCiBHcm91cEJ5T3JkZXJpbmcKIEdyb3VwQ2xhdXNlCitHcm91cEV4 cHJJbmZvCiBHcm91cFBhdGgKIEdyb3VwUGF0aEV4dHJhRGF0YQogR3JvdXBSZXN1bHRQYXRoCkBA IC0yMzcxLDYgKzIzNzMsNyBAQCBSZWluZGV4T2JqZWN0VHlwZQogUmVpbmRleFBhcmFtcwogUmVp bmRleFN0bXQKIFJlaW5kZXhUeXBlCitSZWxBZ2dJbmZvCiBSZWxGaWxlTG9jYXRvcgogUmVsRmls ZUxvY2F0b3JCYWNrZW5kCiBSZWxGaWxlTnVtYmVyCkBAIC0yMzc5LDYgKzIzODIsNyBAQCBSZWxJ bmZvCiBSZWxJbmZvQXJyCiBSZWxJbmZvRW50cnkKIFJlbEluZm9MaXN0CitSZWxJbmZvTGlzdElu Zm8KIFJlbE1hcEZpbGUKIFJlbE1hcHBpbmcKIFJlbE9wdEluZm8KLS0gCjIuNDMuMAoK --000000000000cbbc8f06202c3e36--