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 1sHfVF-009xJS-H7 for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Jun 2024 08:08:14 +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 1sHfVD-00FIw0-9E for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Jun 2024 08:08:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sHfVC-00FIvI-7S for pgsql-hackers@lists.postgresql.org; Thu, 13 Jun 2024 08:08:11 +0000 Received: from mail-yw1-x112d.google.com ([2607:f8b0:4864:20::112d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sHfV9-0015dR-5i for pgsql-hackers@lists.postgresql.org; Thu, 13 Jun 2024 08:08:09 +0000 Received: by mail-yw1-x112d.google.com with SMTP id 00721157ae682-631458848b3so2905417b3.3 for ; Thu, 13 Jun 2024 01:08:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718266086; x=1718870886; 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=aiBnGJ+2H38A92f0Er4JUIDpjXVnACD/er0YvsJUmow=; b=ixhep58dqh61zCrK2fjm6mVzI/GtEmOdP4sV0xywkxE4f9sxPh0rwqpVoDZXin+ZdS cUBKdpUuGQMuWfKah7XzG6s/vinc8EMPsYJgUgmsXM63q5gguMV1AptlmSm6MI4RlyfJ GlbFqjNW1NMEBqszbkxdj9I/QzVCw9xLZP/eoNO8RD1w7wsyRZ1QmWwyrkZSJF6slE46 5KFEO3h96dUsm7gMqLtyzT3wITPAefOG5LCElWEGTfuWpNVZiP1kkyugtxcRZWqGLpVt Sl2nFuMEDk/Fwxresalk5zPwLxixBz6oB3orwg5T56hRYOWRiD0gLqg0qEqfpuDwOnzq eNnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718266086; x=1718870886; 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=aiBnGJ+2H38A92f0Er4JUIDpjXVnACD/er0YvsJUmow=; b=c2i5WO9iVf8N8yTHI/QyXSdare9Jh9QvhHjGlxM926W4YQyG+SkEGyXlbdz0BcBU28 J6+bSoFRS+ooJdPcaUz/bxLkjRgmx3STAQSeQdjNXXoX3aPIAWPD3ATAjxJYiLZ0yUKM MLq+odHE508uHcf769U8nQnPfs1/k2zKQnq/BuP9KR9n9AEMKaD3XqtcEFavu8m56DST AEQcQjKYmFNseCUgjUmdp6Bzd7qX6jgq6J4vTshWwZGSbnnk1QRP3Zkc8MyeeuNxtNUb W9A5DL3UkUoGtJeRFO66nvfyIo7y2Uf+W9ha1Ul2ktZ9RWpXuy89rnbkEB8rz4hoOKLn b9nQ== X-Forwarded-Encrypted: i=1; AJvYcCXI5d7VzOuYE81g9SHUfr+i3o3IePpoQeGYr+eZioSMlu69VZD6GgCpm8jcZ5VsCIkunzSRMvbbB6yLAhezt641xlr4s3boprNk+v0eoJ/XGSxv X-Gm-Message-State: AOJu0YxXmX9bNwm1IWmSpcskmgl+9lkMgKB6UHLfpjH8eAVOY4vnG5M2 RcNQ3UGmpN1CAn/LxECk5mUxn9PFJ39B7U6wDhGj6s+KNF9+R3eyHpqHM0sq7ukW+NmtotUJAGT AJbuFonCT7jrTjXfa/3+BzHbIK08= X-Google-Smtp-Source: AGHT+IGG+zMfw3Ubjv1xVZpX9BKk001ZwpNqnbAYPpZTWf4y/R+zJ9cQ1BKEC476lr1dMR7QNYLMI/UnFQ/kp7dJY8c= X-Received: by 2002:a0d:c843:0:b0:61a:b038:6d34 with SMTP id 00721157ae682-62fb96efb2dmr42503187b3.24.1718266086151; Thu, 13 Jun 2024 01:08:06 -0700 (PDT) MIME-Version: 1.0 References: <87il22cj51.fsf@163.com> In-Reply-To: From: Richard Guo Date: Thu, 13 Jun 2024 16:07:51 +0800 Message-ID: Subject: Re: Eager aggregation, take 3 To: Andy Fan Cc: PostgreSQL-development , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000b2a431061ac0ff96" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b2a431061ac0ff96 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, May 20, 2024 at 4:12=E2=80=AFPM Richard Guo wrote: > Another rebase is needed after d1d286d83c. Also I realized that the > partially_grouped_rel generated by eager aggregation might be dummy, > such as in query: > > select count(t2.c) from t t1 join t t2 on t1.b =3D t2.b where false group= by t1.a; > > If somehow we choose this dummy path with a Finalize Agg Path on top of > it as the final cheapest path (a very rare case), we would encounter the > "Aggref found in non-Agg plan node" error. The v7 patch fixes this > issue. I spent some time testing this patchset and found a few more issues. One issue is that partially-grouped partial paths may have already been generated in the process of building up the grouped join relations by eager aggregation, in which case the partially_grouped_rel would contain valid partial paths by the time we reach create_partial_grouping_paths. If we subsequently find that parallelism is not possible for partially_grouped_rel, we need to drop these partial paths; otherwise we risk encountering Assert(subpath->parallel_safe) when creating gather / gather merge path. This issue can be reproduced with the query below on v7 patch. create function parallel_restricted_func(a int) returns int as $$ begin return a; end; $$ parallel restricted language plpgsql; create table t (a int, b int, c int) with (parallel_workers =3D 2); set enable_eager_aggregate to on; explain (costs off) select parallel_restricted_func(1) * count(t2.c) from t t1, t t2 where t1.b =3D t2.b group by t2.c; Another issue I found is that when we check to see whether a given Var appears only within Aggrefs, we need to account for havingQual in addition to targetlist; otherwise there's a risk of omitting this Var from the targetlist of the partial Agg node, leading to 'ERROR: variable not found in subplan target list'. This error can be reproduced with the query below on v7. create table t (a int primary key, b int, c int); set enable_eager_aggregate to on; explain (costs off) select count(*) from t t1, t t2 group by t1.a having min(t1.b) < t1.b; ERROR: variable not found in subplan target list A third issue I found is that with v7 we might push the Partial Agg to the nullable side of an outer join, which is not correct. This happens because when determining whether a Partial Agg can be pushed down to a relation, the v7 patchset indeed checks if the aggregate expressions can be evaluated at this relation level. However, it overlooks checking the grouping expressions. The grouping expressions can originate from two sources: the original GROUP BY clauses, or constructed from join conditions. In either case, we must verify that the grouping expressions cannot be nulled by outer joins that are above the current relation, otherwise the Partial Agg cannot be pushed down to this rel. Hence here is the v8 patchset, with fixes for all the above issues. Thanks Richard --000000000000b2a431061ac0ff96 Content-Type: application/octet-stream; name="v8-0001-Introduce-RelInfoList-structure.patch" Content-Disposition: attachment; filename="v8-0001-Introduce-RelInfoList-structure.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxcz5um40 RnJvbSAyYjIxYjM4YjA4N2JlNzVmMWI2OThkNzhjZjhhZjRmZWEwY2EwMmQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNTo1OToxOSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjgg MS85XSBJbnRyb2R1Y2UgUmVsSW5mb0xpc3Qgc3RydWN0dXJlCgpUaGlzIGNvbW1pdCBpbnRyb2R1 Y2VzIHRoZSBSZWxJbmZvTGlzdCBzdHJ1Y3R1cmUsIHdoaWNoIGVuY2Fwc3VsYXRlcwpib3RoIGEg bGlzdCBhbmQgYSBoYXNoIHRhYmxlLCBzbyB0aGF0IHdlIGNhbiBsZXZlcmFnZSB0aGUgaGFzaCB0 YWJsZSBmb3IKZmFzdGVyIGxvb2t1cHMgbm90IG9ubHkgZm9yIGpvaW4gcmVsYXRpb25zIGJ1dCBh bHNvIGZvciB1cHBlciByZWxhdGlvbnMuCi0tLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdy ZXNfZmR3LmMgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZh bC5jIHwgIDIwICstLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgfCAg IDcgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMgIHwgICA1ICstCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMgICB8IDE2NCArKysrKysrKysrKysr Ky0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICB8ICAz MSArKystLQogNiBmaWxlcyBjaGFuZ2VkLCAxMzMgaW5zZXJ0aW9ucygrKSwgOTcgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwppbmRleCAwYmI5YTVhZThmLi5lODJl MWJiNTU4IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwor KysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtNjA2OSw3ICs2MDY5 LDggQEAgZm9yZWlnbl9qb2luX29rKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lu cmVsLCBKb2luVHlwZSBqb2ludHlwZSwKIAkgKi8KIAlBc3NlcnQoZnBpbmZvLT5yZWxhdGlvbl9p bmRleCA9PSAwKTsJLyogc2hvdWxkbid0IGJlIHNldCB5ZXQgKi8KIAlmcGluZm8tPnJlbGF0aW9u X2luZGV4ID0KLQkJbGlzdF9sZW5ndGgocm9vdC0+cGFyc2UtPnJ0YWJsZSkgKyBsaXN0X2xlbmd0 aChyb290LT5qb2luX3JlbF9saXN0KTsKKwkJbGlzdF9sZW5ndGgocm9vdC0+cGFyc2UtPnJ0YWJs ZSkgKworCQlsaXN0X2xlbmd0aChyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyk7CiAKIAlyZXR1 cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9f ZXZhbC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMKaW5kZXggZDJm N2Y0ZTVmMy4uMTE0MTE1Njg5OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dl cW8vZ2Vxb19ldmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFs LmMKQEAgLTg1LDE4ICs4NSwxOCBAQCBnZXFvX2V2YWwoUGxhbm5lckluZm8gKnJvb3QsIEdlbmUg KnRvdXIsIGludCBudW1fZ2VuZSkKIAkgKiB0cnVuY2F0aW5nIHRoZSBsaXN0IHRvIGl0cyBvcmln aW5hbCBsZW5ndGguICBOT1RFIHRoaXMgYXNzdW1lcyB0aGF0IGFueQogCSAqIGFkZGVkIGVudHJp ZXMgYXJlIGFwcGVuZGVkIGF0IHRoZSBlbmQhCiAJICoKLQkgKiBXZSBhbHNvIG11c3QgdGFrZSBj YXJlIG5vdCB0byBtZXNzIHVwIHRoZSBvdXRlciBqb2luX3JlbF9oYXNoLCBpZiB0aGVyZQotCSAq IGlzIG9uZS4gIFdlIGNhbiBkbyB0aGlzIGJ5IGp1c3QgdGVtcG9yYXJpbHkgc2V0dGluZyB0aGUg bGluayB0byBOVUxMLgotCSAqIChJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGVub3VnaCBqb2luIHJl bHMsIHdoaWNoIHdlIHZlcnkgbGlrZWx5IGFyZSwgYQotCSAqIG5ldyBoYXNoIHRhYmxlIHdpbGwg Z2V0IGJ1aWx0IGFuZCB1c2VkIGxvY2FsbHkuKQorCSAqIFdlIGFsc28gbXVzdCB0YWtlIGNhcmUg bm90IHRvIG1lc3MgdXAgdGhlIG91dGVyIGpvaW5fcmVsX2xpc3QtPmhhc2gsIGlmCisJICogdGhl cmUgaXMgb25lLiAgV2UgY2FuIGRvIHRoaXMgYnkganVzdCB0ZW1wb3JhcmlseSBzZXR0aW5nIHRo ZSBsaW5rIHRvCisJICogTlVMTC4gIChJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGVub3VnaCBqb2lu IHJlbHMsIHdoaWNoIHdlIHZlcnkgbGlrZWx5CisJICogYXJlLCBhIG5ldyBoYXNoIHRhYmxlIHdp bGwgZ2V0IGJ1aWx0IGFuZCB1c2VkIGxvY2FsbHkuKQogCSAqCiAJICogam9pbl9yZWxfbGV2ZWxb XSBzaG91bGRuJ3QgYmUgaW4gdXNlLCBzbyBqdXN0IEFzc2VydCBpdCBpc24ndC4KIAkgKi8KLQlz YXZlbGVuZ3RoID0gbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdCk7Ci0Jc2F2ZWhhc2gg PSByb290LT5qb2luX3JlbF9oYXNoOworCXNhdmVsZW5ndGggPSBsaXN0X2xlbmd0aChyb290LT5q b2luX3JlbF9saXN0LT5pdGVtcyk7CisJc2F2ZWhhc2ggPSByb290LT5qb2luX3JlbF9saXN0LT5o YXNoOwogCUFzc2VydChyb290LT5qb2luX3JlbF9sZXZlbCA9PSBOVUxMKTsKIAotCXJvb3QtPmpv aW5fcmVsX2hhc2ggPSBOVUxMOworCXJvb3QtPmpvaW5fcmVsX2xpc3QtPmhhc2ggPSBOVUxMOwog CiAJLyogY29uc3RydWN0IHRoZSBiZXN0IHBhdGggZm9yIHRoZSBnaXZlbiBjb21iaW5hdGlvbiBv ZiByZWxhdGlvbnMgKi8KIAlqb2lucmVsID0gZ2ltbWVfdHJlZShyb290LCB0b3VyLCBudW1fZ2Vu ZSk7CkBAIC0xMjEsOSArMTIxLDkgQEAgZ2Vxb19ldmFsKFBsYW5uZXJJbmZvICpyb290LCBHZW5l ICp0b3VyLCBpbnQgbnVtX2dlbmUpCiAJICogUmVzdG9yZSBqb2luX3JlbF9saXN0IHRvIGl0cyBm b3JtZXIgc3RhdGUsIGFuZCBwdXQgYmFjayBvcmlnaW5hbAogCSAqIGhhc2h0YWJsZSBpZiBhbnku CiAJICovCi0Jcm9vdC0+am9pbl9yZWxfbGlzdCA9IGxpc3RfdHJ1bmNhdGUocm9vdC0+am9pbl9y ZWxfbGlzdCwKLQkJCQkJCQkJCQlzYXZlbGVuZ3RoKTsKLQlyb290LT5qb2luX3JlbF9oYXNoID0g c2F2ZWhhc2g7CisJcm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMgPSBsaXN0X3RydW5jYXRlKHJv b3QtPmpvaW5fcmVsX2xpc3QtPml0ZW1zLAorCQkJCQkJCQkJCQkgICBzYXZlbGVuZ3RoKTsKKwly b290LT5qb2luX3JlbF9saXN0LT5oYXNoID0gc2F2ZWhhc2g7CiAKIAkvKiByZWxlYXNlIGFsbCB0 aGUgbWVtb3J5IGFjcXVpcmVkIHdpdGhpbiBnaW1tZV90cmVlICovCiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN4dCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9h bGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCA0 ODk1Y2VlOTk0Li43MGUyYjU4ZDhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMKQEAgLTM0MDMsOSArMzQwMywxMCBAQCBtYWtlX3JlbF9mcm9tX2pvaW5saXN0KFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpqb2lubGlzdCkKICAqIG5lZWRlZCBmb3IgdGhlc2UgcGF0aHMgbmVl ZCBoYXZlIGJlZW4gaW5zdGFudGlhdGVkLgogICoKICAqIE5vdGUgdG8gcGx1Z2luIGF1dGhvcnM6 IHRoZSBmdW5jdGlvbnMgaW52b2tlZCBkdXJpbmcgc3RhbmRhcmRfam9pbl9zZWFyY2goKQotICog bW9kaWZ5IHJvb3QtPmpvaW5fcmVsX2xpc3QgYW5kIHJvb3QtPmpvaW5fcmVsX2hhc2guICBJZiB5 b3Ugd2FudCB0byBkbyBtb3JlCi0gKiB0aGFuIG9uZSBqb2luLW9yZGVyIHNlYXJjaCwgeW91J2xs IHByb2JhYmx5IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUKLSAqIG9yaWdpbmFsIHN0YXRl cyBvZiB0aG9zZSBkYXRhIHN0cnVjdHVyZXMuICBTZWUgZ2Vxb19ldmFsKCkgZm9yIGFuIGV4YW1w bGUuCisgKiBtb2RpZnkgcm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMgYW5kIHJvb3QtPmpvaW5f cmVsX2xpc3QtPmhhc2guICBJZiB5b3UKKyAqIHdhbnQgdG8gZG8gbW9yZSB0aGFuIG9uZSBqb2lu LW9yZGVyIHNlYXJjaCwgeW91J2xsIHByb2JhYmx5IG5lZWQgdG8gc2F2ZSBhbmQKKyAqIHJlc3Rv cmUgdGhlIG9yaWdpbmFsIHN0YXRlcyBvZiB0aG9zZSBkYXRhIHN0cnVjdHVyZXMuICBTZWUgZ2Vx b19ldmFsKCkgZm9yCisgKiBhbiBleGFtcGxlLgogICovCiBSZWxPcHRJbmZvICoKIHN0YW5kYXJk X2pvaW5fc2VhcmNoKFBsYW5uZXJJbmZvICpyb290LCBpbnQgbGV2ZWxzX25lZWRlZCwgTGlzdCAq aW5pdGlhbF9yZWxzKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm1haW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKaW5kZXggZTE3 ZDMxYTVjMy4uZmQ4YjJiMGNhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vcGxhbm1haW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5j CkBAIC02NCw4ICs2NCw5IEBAIHF1ZXJ5X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJICog Tk9URTogYXBwZW5kX3JlbF9saXN0IHdhcyBzZXQgdXAgYnkgc3VicXVlcnlfcGxhbm5lciwgc28g ZG8gbm90IHRvdWNoCiAJICogaGVyZS4KIAkgKi8KLQlyb290LT5qb2luX3JlbF9saXN0ID0gTklM OwotCXJvb3QtPmpvaW5fcmVsX2hhc2ggPSBOVUxMOworCXJvb3QtPmpvaW5fcmVsX2xpc3QgPSBt YWtlTm9kZShSZWxJbmZvTGlzdCk7CisJcm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMgPSBOSUw7 CisJcm9vdC0+am9pbl9yZWxfbGlzdC0+aGFzaCA9IE5VTEw7CiAJcm9vdC0+am9pbl9yZWxfbGV2 ZWwgPSBOVUxMOwogCXJvb3QtPmpvaW5fY3VyX2xldmVsID0gMDsKIAlyb290LT5jYW5vbl9wYXRo a2V5cyA9IE5JTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5v ZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCBlMDViMjFj ODg0Li44Mjc5YWIwZTExIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9y ZWxub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC0z NSwxMSArMzUsMTUgQEAKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKIAogCi10eXBlZGVm IHN0cnVjdCBKb2luSGFzaEVudHJ5CisvKgorICogQW4gZW50cnkgb2YgYSBoYXNoIHRhYmxlIHRo YXQgd2UgdXNlIHRvIG1ha2UgbG9va3VwIGZvciBSZWxPcHRJbmZvCisgKiBzdHJ1Y3R1cmVzIG1v cmUgZWZmaWNpZW50LgorICovCit0eXBlZGVmIHN0cnVjdCBSZWxJbmZvRW50cnkKIHsKLQlSZWxp ZHMJCWpvaW5fcmVsaWRzOwkvKiBoYXNoIGtleSAtLS0gTVVTVCBCRSBGSVJTVCAqLwotCVJlbE9w dEluZm8gKmpvaW5fcmVsOwotfSBKb2luSGFzaEVudHJ5OworCVJlbGlkcwkJcmVsaWRzOwkJCS8q IGhhc2gga2V5IC0tLSBNVVNUIEJFIEZJUlNUICovCisJUmVsT3B0SW5mbyAqcmVsOworfSBSZWxJ bmZvRW50cnk7CiAKIHN0YXRpYyB2b2lkIGJ1aWxkX2pvaW5yZWxfdGxpc3QoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJCQkJCVJlbE9wdEluZm8gKmlucHV0X3Jl bCwKQEAgLTQ3OSwxMSArNDgzLDExIEBAIGZpbmRfYmFzZV9yZWxfaWdub3JlX2pvaW4oUGxhbm5l ckluZm8gKnJvb3QsIGludCByZWxpZCkKIH0KIAogLyoKLSAqIGJ1aWxkX2pvaW5fcmVsX2hhc2gK LSAqCSAgQ29uc3RydWN0IHRoZSBhdXhpbGlhcnkgaGFzaCB0YWJsZSBmb3Igam9pbiByZWxhdGlv bnMuCisgKiBidWlsZF9yZWxfaGFzaAorICoJICBDb25zdHJ1Y3QgdGhlIGF1eGlsaWFyeSBoYXNo IHRhYmxlIGZvciByZWxhdGlvbnMuCiAgKi8KIHN0YXRpYyB2b2lkCi1idWlsZF9qb2luX3JlbF9o YXNoKFBsYW5uZXJJbmZvICpyb290KQorYnVpbGRfcmVsX2hhc2goUmVsSW5mb0xpc3QgKmxpc3Qp CiB7CiAJSFRBQgkgICAqaGFzaHRhYjsKIAlIQVNIQ1RMCQloYXNoX2N0bDsKQEAgLTQ5MSw0NyAr NDk1LDQ5IEBAIGJ1aWxkX2pvaW5fcmVsX2hhc2goUGxhbm5lckluZm8gKnJvb3QpCiAKIAkvKiBD cmVhdGUgdGhlIGhhc2ggdGFibGUgKi8KIAloYXNoX2N0bC5rZXlzaXplID0gc2l6ZW9mKFJlbGlk cyk7Ci0JaGFzaF9jdGwuZW50cnlzaXplID0gc2l6ZW9mKEpvaW5IYXNoRW50cnkpOworCWhhc2hf Y3RsLmVudHJ5c2l6ZSA9IHNpemVvZihSZWxJbmZvRW50cnkpOwogCWhhc2hfY3RsLmhhc2ggPSBi aXRtYXBfaGFzaDsKIAloYXNoX2N0bC5tYXRjaCA9IGJpdG1hcF9tYXRjaDsKIAloYXNoX2N0bC5o Y3h0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7Ci0JaGFzaHRhYiA9IGhhc2hfY3JlYXRlKCJKb2lu UmVsSGFzaFRhYmxlIiwKKwloYXNodGFiID0gaGFzaF9jcmVhdGUoIlJlbEhhc2hUYWJsZSIsCiAJ CQkJCQkgIDI1NkwsCiAJCQkJCQkgICZoYXNoX2N0bCwKIAkJCQkJCSAgSEFTSF9FTEVNIHwgSEFT SF9GVU5DVElPTiB8IEhBU0hfQ09NUEFSRSB8IEhBU0hfQ09OVEVYVCk7CiAKLQkvKiBJbnNlcnQg YWxsIHRoZSBhbHJlYWR5LWV4aXN0aW5nIGpvaW5yZWxzICovCi0JZm9yZWFjaChsLCByb290LT5q b2luX3JlbF9saXN0KQorCS8qIEluc2VydCBhbGwgdGhlIGFscmVhZHktZXhpc3RpbmcgcmVsYXRp b25zICovCisJZm9yZWFjaChsLCBsaXN0LT5pdGVtcykKIAl7CiAJCVJlbE9wdEluZm8gKnJlbCA9 IChSZWxPcHRJbmZvICopIGxmaXJzdChsKTsKLQkJSm9pbkhhc2hFbnRyeSAqaGVudHJ5OworCQlS ZWxJbmZvRW50cnkgKmhlbnRyeTsKIAkJYm9vbAkJZm91bmQ7CiAKLQkJaGVudHJ5ID0gKEpvaW5I YXNoRW50cnkgKikgaGFzaF9zZWFyY2goaGFzaHRhYiwKLQkJCQkJCQkJCQkJICAgJihyZWwtPnJl bGlkcyksCi0JCQkJCQkJCQkJCSAgIEhBU0hfRU5URVIsCi0JCQkJCQkJCQkJCSAgICZmb3VuZCk7 CisJCWhlbnRyeSA9IChSZWxJbmZvRW50cnkgKikgaGFzaF9zZWFyY2goaGFzaHRhYiwKKwkJCQkJ CQkJCQkJICAmKHJlbC0+cmVsaWRzKSwKKwkJCQkJCQkJCQkJICBIQVNIX0VOVEVSLAorCQkJCQkJ CQkJCQkgICZmb3VuZCk7CiAJCUFzc2VydCghZm91bmQpOwotCQloZW50cnktPmpvaW5fcmVsID0g cmVsOworCQloZW50cnktPnJlbCA9IHJlbDsKIAl9CiAKLQlyb290LT5qb2luX3JlbF9oYXNoID0g aGFzaHRhYjsKKwlsaXN0LT5oYXNoID0gaGFzaHRhYjsKIH0KIAogLyoKLSAqIGZpbmRfam9pbl9y ZWwKLSAqCSAgUmV0dXJucyByZWxhdGlvbiBlbnRyeSBjb3JyZXNwb25kaW5nIHRvICdyZWxpZHMn IChhIHNldCBvZiBSVCBpbmRleGVzKSwKLSAqCSAgb3IgTlVMTCBpZiBub25lIGV4aXN0cy4gIFRo aXMgaXMgZm9yIGpvaW4gcmVsYXRpb25zLgorICogZmluZF9yZWxfaW5mbworICoJICBGaW5kIGFu IFJlbE9wdEluZm8gZW50cnkuCiAgKi8KLVJlbE9wdEluZm8gKgotZmluZF9qb2luX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcykKK3N0YXRpYyBSZWxPcHRJbmZvICoKK2ZpbmRf cmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIFJlbGlkcyByZWxpZHMpCiB7CisJaWYgKGxpc3Qg PT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKIAkvKgogCSAqIFN3aXRjaCB0byB1c2luZyBoYXNo IGxvb2t1cCB3aGVuIGxpc3QgZ3Jvd3MgInRvbyBsb25nIi4gIFRoZSB0aHJlc2hvbGQKIAkgKiBp cyBhcmJpdHJhcnkgYW5kIGlzIGtub3duIG9ubHkgaGVyZS4KIAkgKi8KLQlpZiAoIXJvb3QtPmpv aW5fcmVsX2hhc2ggJiYgbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdCkgPiAzMikKLQkJ YnVpbGRfam9pbl9yZWxfaGFzaChyb290KTsKKwlpZiAoIWxpc3QtPmhhc2ggJiYgbGlzdF9sZW5n dGgobGlzdC0+aXRlbXMpID4gMzIpCisJCWJ1aWxkX3JlbF9oYXNoKGxpc3QpOwogCiAJLyoKIAkg KiBVc2UgZWl0aGVyIGhhc2h0YWJsZSBsb29rdXAgb3IgbGluZWFyIHNlYXJjaCwgYXMgYXBwcm9w cmlhdGUuCkBAIC01NDEsMjMgKzU0NywyMyBAQCBmaW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpy b290LCBSZWxpZHMgcmVsaWRzKQogCSAqIHNvIHdvdWxkIGZvcmNlIHJlbGlkcyBvdXQgb2YgYSBy ZWdpc3RlciBhbmQgdGh1cyBwcm9iYWJseSBzbG93IGRvd24gdGhlCiAJICogbGlzdC1zZWFyY2gg Y2FzZS4KIAkgKi8KLQlpZiAocm9vdC0+am9pbl9yZWxfaGFzaCkKKwlpZiAobGlzdC0+aGFzaCkK IAl7CiAJCVJlbGlkcwkJaGFzaGtleSA9IHJlbGlkczsKLQkJSm9pbkhhc2hFbnRyeSAqaGVudHJ5 OworCQlSZWxJbmZvRW50cnkgKmhlbnRyeTsKIAotCQloZW50cnkgPSAoSm9pbkhhc2hFbnRyeSAq KSBoYXNoX3NlYXJjaChyb290LT5qb2luX3JlbF9oYXNoLAotCQkJCQkJCQkJCQkgICAmaGFzaGtl eSwKLQkJCQkJCQkJCQkJICAgSEFTSF9GSU5ELAotCQkJCQkJCQkJCQkgICBOVUxMKTsKKwkJaGVu dHJ5ID0gKFJlbEluZm9FbnRyeSAqKSBoYXNoX3NlYXJjaChsaXN0LT5oYXNoLAorCQkJCQkJCQkJ CQkgICZoYXNoa2V5LAorCQkJCQkJCQkJCQkgIEhBU0hfRklORCwKKwkJCQkJCQkJCQkJICBOVUxM KTsKIAkJaWYgKGhlbnRyeSkKLQkJCXJldHVybiBoZW50cnktPmpvaW5fcmVsOworCQkJcmV0dXJu IGhlbnRyeS0+cmVsOwogCX0KIAllbHNlCiAJewogCQlMaXN0Q2VsbCAgICpsOwogCi0JCWZvcmVh Y2gobCwgcm9vdC0+am9pbl9yZWxfbGlzdCkKKwkJZm9yZWFjaChsLCBsaXN0LT5pdGVtcykKIAkJ ewogCQkJUmVsT3B0SW5mbyAqcmVsID0gKFJlbE9wdEluZm8gKikgbGZpcnN0KGwpOwogCkBAIC01 NjksNiArNTc1LDU0IEBAIGZpbmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyBy ZWxpZHMpCiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiBmaW5kX2pvaW5fcmVsCisgKgkgIFJl dHVybnMgcmVsYXRpb24gZW50cnkgY29ycmVzcG9uZGluZyB0byAncmVsaWRzJyAoYSBzZXQgb2Yg UlQgaW5kZXhlcyksCisgKgkgIG9yIE5VTEwgaWYgbm9uZSBleGlzdHMuICBUaGlzIGlzIGZvciBq b2luIHJlbGF0aW9ucy4KKyAqLworUmVsT3B0SW5mbyAqCitmaW5kX2pvaW5fcmVsKFBsYW5uZXJJ bmZvICpyb290LCBSZWxpZHMgcmVsaWRzKQoreworCXJldHVybiBmaW5kX3JlbF9pbmZvKHJvb3Qt PmpvaW5fcmVsX2xpc3QsIHJlbGlkcyk7Cit9CisKKy8qCisgKiBhZGRfcmVsX2luZm8KKyAqCQlB ZGQgZ2l2ZW4gcmVsYXRpb24gdG8gdGhlIGdpdmVuIGxpc3QuIEFsc28gYWRkIGl0IHRvIHRoZSBh dXhpbGlhcnkKKyAqCQloYXNodGFibGUgaWYgdGhlcmUgaXMgb25lLgorICovCitzdGF0aWMgdm9p ZAorYWRkX3JlbF9pbmZvKFJlbEluZm9MaXN0ICpsaXN0LCBSZWxPcHRJbmZvICpyZWwpCit7CisJ LyogR0VRTyByZXF1aXJlcyB1cyB0byBhcHBlbmQgdGhlIG5ldyByZWxhdGlvbiB0byB0aGUgZW5k IG9mIHRoZSBsaXN0ISAqLworCWxpc3QtPml0ZW1zID0gbGFwcGVuZChsaXN0LT5pdGVtcywgcmVs KTsKKworCS8qIHN0b3JlIGl0IGludG8gdGhlIGF1eGlsaWFyeSBoYXNodGFibGUgaWYgdGhlcmUg aXMgb25lLiAqLworCWlmIChsaXN0LT5oYXNoKQorCXsKKwkJUmVsSW5mb0VudHJ5ICpoZW50cnk7 CisJCWJvb2wJCWZvdW5kOworCisJCWhlbnRyeSA9IChSZWxJbmZvRW50cnkgKikgaGFzaF9zZWFy Y2gobGlzdC0+aGFzaCwKKwkJCQkJCQkJCQkJICAmKHJlbC0+cmVsaWRzKSwKKwkJCQkJCQkJCQkJ ICBIQVNIX0VOVEVSLAorCQkJCQkJCQkJCQkgICZmb3VuZCk7CisJCUFzc2VydCghZm91bmQpOwor CQloZW50cnktPnJlbCA9IHJlbDsKKwl9Cit9CisKKy8qCisgKiBhZGRfam9pbl9yZWwKKyAqCQlB ZGQgZ2l2ZW4gam9pbiByZWxhdGlvbiB0byB0aGUgbGlzdCBvZiBqb2luIHJlbGF0aW9ucyBpbiB0 aGUgZ2l2ZW4KKyAqCQlQbGFubmVySW5mby4KKyAqLworc3RhdGljIHZvaWQKK2FkZF9qb2luX3Jl bChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCkKK3sKKwlhZGRfcmVsX2lu Zm8ocm9vdC0+am9pbl9yZWxfbGlzdCwgam9pbnJlbCk7Cit9CisKIC8qCiAgKiBzZXRfZm9yZWln bl9yZWxfcHJvcGVydGllcwogICoJCVNldCB1cCBmb3JlaWduLWpvaW4gZmllbGRzIGlmIG91dGVy IGFuZCBpbm5lciByZWxhdGlvbiBhcmUgZm9yZWlnbgpAQCAtNjE4LDMyICs2NzIsNiBAQCBzZXRf Zm9yZWlnbl9yZWxfcHJvcGVydGllcyhSZWxPcHRJbmZvICpqb2lucmVsLCBSZWxPcHRJbmZvICpv dXRlcl9yZWwsCiAJfQogfQogCi0vKgotICogYWRkX2pvaW5fcmVsCi0gKgkJQWRkIGdpdmVuIGpv aW4gcmVsYXRpb24gdG8gdGhlIGxpc3Qgb2Ygam9pbiByZWxhdGlvbnMgaW4gdGhlIGdpdmVuCi0g KgkJUGxhbm5lckluZm8uIEFsc28gYWRkIGl0IHRvIHRoZSBhdXhpbGlhcnkgaGFzaHRhYmxlIGlm IHRoZXJlIGlzIG9uZS4KLSAqLwotc3RhdGljIHZvaWQKLWFkZF9qb2luX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCkKLXsKLQkvKiBHRVFPIHJlcXVpcmVzIHVzIHRv IGFwcGVuZCB0aGUgbmV3IGpvaW5yZWwgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCEgKi8KLQlyb290 LT5qb2luX3JlbF9saXN0ID0gbGFwcGVuZChyb290LT5qb2luX3JlbF9saXN0LCBqb2lucmVsKTsK LQotCS8qIHN0b3JlIGl0IGludG8gdGhlIGF1eGlsaWFyeSBoYXNodGFibGUgaWYgdGhlcmUgaXMg b25lLiAqLwotCWlmIChyb290LT5qb2luX3JlbF9oYXNoKQotCXsKLQkJSm9pbkhhc2hFbnRyeSAq aGVudHJ5OwotCQlib29sCQlmb3VuZDsKLQotCQloZW50cnkgPSAoSm9pbkhhc2hFbnRyeSAqKSBo YXNoX3NlYXJjaChyb290LT5qb2luX3JlbF9oYXNoLAotCQkJCQkJCQkJCQkgICAmKGpvaW5yZWwt PnJlbGlkcyksCi0JCQkJCQkJCQkJCSAgIEhBU0hfRU5URVIsCi0JCQkJCQkJCQkJCSAgICZmb3Vu ZCk7Ci0JCUFzc2VydCghZm91bmQpOwotCQloZW50cnktPmpvaW5fcmVsID0gam9pbnJlbDsKLQl9 Ci19Ci0KIC8qCiAgKiBidWlsZF9qb2luX3JlbAogICoJICBSZXR1cm5zIHJlbGF0aW9uIGVudHJ5 IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHVuaW9uIG9mIHR3byBnaXZlbiByZWxzLApAQCAtMTQ2OSwy MiArMTQ5NywxNCBAQCBzdWJidWlsZF9qb2lucmVsX2pvaW5saXN0KFJlbE9wdEluZm8gKmpvaW5y ZWwsCiBSZWxPcHRJbmZvICoKIGZldGNoX3VwcGVyX3JlbChQbGFubmVySW5mbyAqcm9vdCwgVXBw ZXJSZWxhdGlvbktpbmQga2luZCwgUmVsaWRzIHJlbGlkcykKIHsKKwlSZWxJbmZvTGlzdCAqbGlz dCA9ICZyb290LT51cHBlcl9yZWxzW2tpbmRdOwogCVJlbE9wdEluZm8gKnVwcGVycmVsOwotCUxp c3RDZWxsICAgKmxjOwotCi0JLyoKLQkgKiBGb3IgdGhlIG1vbWVudCwgb3VyIGluZGV4aW5nIGRh dGEgc3RydWN0dXJlIGlzIGp1c3QgYSBMaXN0IGZvciBlYWNoCi0JICogcmVsYXRpb24ga2luZC4g IElmIHdlIGV2ZXIgZ2V0IHNvIG1hbnkgb2Ygb25lIGtpbmQgdGhhdCB0aGlzIHN0b3BzCi0JICog d29ya2luZyB3ZWxsLCB3ZSBjYW4gaW1wcm92ZSBpdC4gIE5vIGNvZGUgb3V0c2lkZSB0aGlzIGZ1 bmN0aW9uIHNob3VsZAotCSAqIGFzc3VtZSBhbnl0aGluZyBhYm91dCBob3cgdG8gZmluZCBhIHBh cnRpY3VsYXIgdXBwZXJyZWwuCi0JICovCiAKIAkvKiBJZiB3ZSBhbHJlYWR5IG1hZGUgdGhpcyB1 cHBlcnJlbCBmb3IgdGhlIHF1ZXJ5LCByZXR1cm4gaXQgKi8KLQlmb3JlYWNoKGxjLCByb290LT51 cHBlcl9yZWxzW2tpbmRdKQorCWlmIChsaXN0KQogCXsKLQkJdXBwZXJyZWwgPSAoUmVsT3B0SW5m byAqKSBsZmlyc3QobGMpOwotCi0JCWlmIChibXNfZXF1YWwodXBwZXJyZWwtPnJlbGlkcywgcmVs aWRzKSkKKwkJdXBwZXJyZWwgPSBmaW5kX3JlbF9pbmZvKGxpc3QsIHJlbGlkcyk7CisJCWlmICh1 cHBlcnJlbCkKIAkJCXJldHVybiB1cHBlcnJlbDsKIAl9CiAKQEAgLTE1MDMsNyArMTUyMyw3IEBA IGZldGNoX3VwcGVyX3JlbChQbGFubmVySW5mbyAqcm9vdCwgVXBwZXJSZWxhdGlvbktpbmQga2lu ZCwgUmVsaWRzIHJlbGlkcykKIAl1cHBlcnJlbC0+Y2hlYXBlc3RfdW5pcXVlX3BhdGggPSBOVUxM OwogCXVwcGVycmVsLT5jaGVhcGVzdF9wYXJhbWV0ZXJpemVkX3BhdGhzID0gTklMOwogCi0Jcm9v dC0+dXBwZXJfcmVsc1traW5kXSA9IGxhcHBlbmQocm9vdC0+dXBwZXJfcmVsc1traW5kXSwgdXBw ZXJyZWwpOworCWFkZF9yZWxfaW5mbygmcm9vdC0+dXBwZXJfcmVsc1traW5kXSwgdXBwZXJyZWwp OwogCiAJcmV0dXJuIHVwcGVycmVsOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv cGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCAyYmEyOTdj MTE3Li4wODA1ZGU2NGQ1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtODAsNiArODAsMjUgQEAg dHlwZWRlZiBlbnVtIFVwcGVyUmVsYXRpb25LaW5kCiAJLyogTkI6IFVQUEVSUkVMX0ZJTkFMIG11 c3QgYmUgbGFzdCBlbnVtIGVudHJ5OyBpdCdzIHVzZWQgdG8gc2l6ZSBhcnJheXMgKi8KIH0gVXBw ZXJSZWxhdGlvbktpbmQ7CiAKKy8qCisgKiBIYXNoZWQgbGlzdCB0byBzdG9yZSByZWxhdGlvbiBz cGVjaWZpYyBpbmZvIGFuZCB0byByZXRyaWV2ZSBpdCBieSByZWxpZHMuCisgKgorICogRm9yIHNt YWxsIHByb2JsZW1zIHdlIGp1c3Qgc2NhbiB0aGUgbGlzdCB0byBkbyBsb29rdXBzLCBidXQgd2hl biB0aGVyZSBhcmUKKyAqIG1hbnkgcmVsYXRpb25zIHdlIGJ1aWxkIGEgaGFzaCB0YWJsZSBmb3Ig ZmFzdGVyIGxvb2t1cHMuICBUaGUgaGFzaCB0YWJsZSBpcworICogcHJlc2VudCBhbmQgdmFsaWQg d2hlbiAnaGFzaCcgaXMgbm90IE5VTEwuICBOb3RlIHRoYXQgd2Ugc3RpbGwgbWFpbnRhaW4gdGhl CisgKiBsaXN0IGV2ZW4gd2hlbiB1c2luZyB0aGUgaGFzaCB0YWJsZSBmb3IgbG9va3VwczsgdGhp cyBzaW1wbGlmaWVzIGxpZmUgZm9yCisgKiBHRVFPLgorICovCit0eXBlZGVmIHN0cnVjdCBSZWxJ bmZvTGlzdAoreworCXBnX25vZGVfYXR0cihub19jb3B5X2VxdWFsLCBub19yZWFkKQorCisJTm9k ZVRhZwkJdHlwZTsKKworCUxpc3QJICAgKml0ZW1zOworCXN0cnVjdCBIVEFCICpoYXNoIHBnX25v ZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7Cit9IFJlbEluZm9MaXN0OworCiAvKi0tLS0tLS0t LS0KICAqIFBsYW5uZXJHbG9iYWwKICAqCQlHbG9iYWwgaW5mb3JtYXRpb24gZm9yIHBsYW5uaW5n L29wdGltaXphdGlvbgpAQCAtMjcwLDE1ICsyODksOSBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAog CS8qCiAJICogam9pbl9yZWxfbGlzdCBpcyBhIGxpc3Qgb2YgYWxsIGpvaW4tcmVsYXRpb24gUmVs T3B0SW5mb3Mgd2UgaGF2ZQotCSAqIGNvbnNpZGVyZWQgaW4gdGhpcyBwbGFubmluZyBydW4uICBG b3Igc21hbGwgcHJvYmxlbXMgd2UganVzdCBzY2FuIHRoZQotCSAqIGxpc3QgdG8gZG8gbG9va3Vw cywgYnV0IHdoZW4gdGhlcmUgYXJlIG1hbnkgam9pbiByZWxhdGlvbnMgd2UgYnVpbGQgYQotCSAq IGhhc2ggdGFibGUgZm9yIGZhc3RlciBsb29rdXBzLiAgVGhlIGhhc2ggdGFibGUgaXMgcHJlc2Vu dCBhbmQgdmFsaWQKLQkgKiB3aGVuIGpvaW5fcmVsX2hhc2ggaXMgbm90IE5VTEwuICBOb3RlIHRo YXQgd2Ugc3RpbGwgbWFpbnRhaW4gdGhlIGxpc3QKLQkgKiBldmVuIHdoZW4gdXNpbmcgdGhlIGhh c2ggdGFibGUgZm9yIGxvb2t1cHM7IHRoaXMgc2ltcGxpZmllcyBsaWZlIGZvcgotCSAqIEdFUU8u CisJICogY29uc2lkZXJlZCBpbiB0aGlzIHBsYW5uaW5nIHJ1bi4KIAkgKi8KLQlMaXN0CSAgICpq b2luX3JlbF9saXN0OwotCXN0cnVjdCBIVEFCICpqb2luX3JlbF9oYXNoIHBnX25vZGVfYXR0cihy ZWFkX3dyaXRlX2lnbm9yZSk7CisJUmVsSW5mb0xpc3QgKmpvaW5fcmVsX2xpc3Q7CS8qIGxpc3Qg b2Ygam9pbi1yZWxhdGlvbiBSZWxPcHRJbmZvcyAqLwogCiAJLyoKIAkgKiBXaGVuIGRvaW5nIGEg ZHluYW1pYy1wcm9ncmFtbWluZy1zdHlsZSBqb2luIHNlYXJjaCwgam9pbl9yZWxfbGV2ZWxba10K QEAgLTQxMyw3ICs0MjYsNyBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAkgKiBVcHBlci1yZWwgUmVs T3B0SW5mb3MuIFVzZSBmZXRjaF91cHBlcl9yZWwoKSB0byBnZXQgYW55IHBhcnRpY3VsYXIKIAkg KiB1cHBlciByZWwuCiAJICovCi0JTGlzdAkgICAqdXBwZXJfcmVsc1tVUFBFUlJFTF9GSU5BTCAr IDFdIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CisJUmVsSW5mb0xpc3QJCXVwcGVy X3JlbHNbVVBQRVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUp OwogCiAJLyogUmVzdWx0IHRsaXN0cyBjaG9zZW4gYnkgZ3JvdXBpbmdfcGxhbm5lciBmb3IgdXBw ZXItc3RhZ2UgcHJvY2Vzc2luZyAqLwogCXN0cnVjdCBQYXRoVGFyZ2V0ICp1cHBlcl90YXJnZXRz W1VQUEVSUkVMX0ZJTkFMICsgMV0gcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKLS0g CjIuNDMuMAoK --000000000000b2a431061ac0ff96 Content-Type: application/octet-stream; name="v8-0002-Introduce-RelAggInfo-structure-to-store-info-for-grouped-paths.patch" Content-Disposition: attachment; filename="v8-0002-Introduce-RelAggInfo-structure-to-store-info-for-grouped-paths.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxcz67li1 RnJvbSA4YzMyZDMxNzJkZmI2MWQxNDg2OTM4YWUxNjc5ZDNiZjA3NjVkYjIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNjowMToyNiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjgg Mi85XSBJbnRyb2R1Y2UgUmVsQWdnSW5mbyBzdHJ1Y3R1cmUgdG8gc3RvcmUgaW5mbyBmb3IKIGdy b3VwZWQgcGF0aHMKClRoaXMgY29tbWl0IGludHJvZHVjZXMgUmVsQWdnSW5mbyBzdHJ1Y3R1cmUg dG8gc3RvcmUgaW5mb3JtYXRpb24gbmVlZGVkCnRvIGNyZWF0ZSBncm91cGVkIHBhdGhzIGZvciBi YXNlIGFuZCBqb2luIHJlbHMuICBJdCBhbHNvIHJldmlzZXMgdGhlClJlbEluZm9MaXN0IHJlbGF0 ZWQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZAp3aXRo IFJlbEFnZ0luZm9zLgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyB8 IDY2ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oICAgICAgICB8IDczICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hh bmdlZCwgMTE4IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL3JlbG5vZGUuYwppbmRleCA4Mjc5YWIwZTExLi44NDIwYjg5MzZlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC0zNiwxMyArMzYsMTMgQEAKIAogCiAvKgotICog QW4gZW50cnkgb2YgYSBoYXNoIHRhYmxlIHRoYXQgd2UgdXNlIHRvIG1ha2UgbG9va3VwIGZvciBS ZWxPcHRJbmZvCi0gKiBzdHJ1Y3R1cmVzIG1vcmUgZWZmaWNpZW50LgorICogQW4gZW50cnkgb2Yg YSBoYXNoIHRhYmxlIHRoYXQgd2UgdXNlIHRvIG1ha2UgbG9va3VwIGZvciBSZWxPcHRJbmZvIG9y CisgKiBSZWxBZ2dJbmZvIHN0cnVjdHVyZXMgbW9yZSBlZmZpY2llbnQuCiAgKi8KIHR5cGVkZWYg c3RydWN0IFJlbEluZm9FbnRyeQogewogCVJlbGlkcwkJcmVsaWRzOwkJCS8qIGhhc2gga2V5IC0t LSBNVVNUIEJFIEZJUlNUICovCi0JUmVsT3B0SW5mbyAqcmVsOworCXZvaWQJICAgKmRhdGE7CiB9 IFJlbEluZm9FbnRyeTsKIAogc3RhdGljIHZvaWQgYnVpbGRfam9pbnJlbF90bGlzdChQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKQEAgLTQ4NCw3ICs0ODQsNyBAQCBmaW5k X2Jhc2VfcmVsX2lnbm9yZV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQpCiAKIC8q CiAgKiBidWlsZF9yZWxfaGFzaAotICoJICBDb25zdHJ1Y3QgdGhlIGF1eGlsaWFyeSBoYXNoIHRh YmxlIGZvciByZWxhdGlvbnMuCisgKgkgIENvbnN0cnVjdCB0aGUgYXV4aWxpYXJ5IGhhc2ggdGFi bGUgZm9yIHJlbGF0aW9uIHNwZWNpZmljIGRhdGEuCiAgKi8KIHN0YXRpYyB2b2lkCiBidWlsZF9y ZWxfaGFzaChSZWxJbmZvTGlzdCAqbGlzdCkKQEAgLTUwNCwxOSArNTA0LDI3IEBAIGJ1aWxkX3Jl bF9oYXNoKFJlbEluZm9MaXN0ICpsaXN0KQogCQkJCQkJICAmaGFzaF9jdGwsCiAJCQkJCQkgIEhB U0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04gfCBIQVNIX0NPTVBBUkUgfCBIQVNIX0NPTlRFWFQpOwog Ci0JLyogSW5zZXJ0IGFsbCB0aGUgYWxyZWFkeS1leGlzdGluZyByZWxhdGlvbnMgKi8KKwkvKiBJ bnNlcnQgYWxsIHRoZSBhbHJlYWR5LWV4aXN0aW5nIHJlbGF0aW9uIHNwZWNpZmljIGluZm9zICov CiAJZm9yZWFjaChsLCBsaXN0LT5pdGVtcykKIAl7Ci0JCVJlbE9wdEluZm8gKnJlbCA9IChSZWxP cHRJbmZvICopIGxmaXJzdChsKTsKKwkJdm9pZAkgICAqaXRlbSA9IGxmaXJzdChsKTsKIAkJUmVs SW5mb0VudHJ5ICpoZW50cnk7CiAJCWJvb2wJCWZvdW5kOworCQlSZWxpZHMJCXJlbGlkczsKKwor CQlBc3NlcnQoSXNBKGl0ZW0sIFJlbE9wdEluZm8pIHx8IElzQShpdGVtLCBSZWxBZ2dJbmZvKSk7 CisKKwkJaWYgKElzQShpdGVtLCBSZWxPcHRJbmZvKSkKKwkJCXJlbGlkcyA9ICgoUmVsT3B0SW5m byAqKSBpdGVtKS0+cmVsaWRzOworCQllbHNlCisJCQlyZWxpZHMgPSAoKFJlbEFnZ0luZm8gKikg aXRlbSktPnJlbGlkczsKIAogCQloZW50cnkgPSAoUmVsSW5mb0VudHJ5ICopIGhhc2hfc2VhcmNo KGhhc2h0YWIsCi0JCQkJCQkJCQkJCSAgJihyZWwtPnJlbGlkcyksCisJCQkJCQkJCQkJCSAgJnJl bGlkcywKIAkJCQkJCQkJCQkJICBIQVNIX0VOVEVSLAogCQkJCQkJCQkJCQkgICZmb3VuZCk7CiAJ CUFzc2VydCghZm91bmQpOwotCQloZW50cnktPnJlbCA9IHJlbDsKKwkJaGVudHJ5LT5kYXRhID0g aXRlbTsKIAl9CiAKIAlsaXN0LT5oYXNoID0gaGFzaHRhYjsKQEAgLTUyNCw5ICs1MzIsOSBAQCBi dWlsZF9yZWxfaGFzaChSZWxJbmZvTGlzdCAqbGlzdCkKIAogLyoKICAqIGZpbmRfcmVsX2luZm8K LSAqCSAgRmluZCBhbiBSZWxPcHRJbmZvIGVudHJ5LgorICoJICBGaW5kIGFuIFJlbE9wdEluZm8g b3IgYSBSZWxBZ2dJbmZvIGVudHJ5LgogICovCi1zdGF0aWMgUmVsT3B0SW5mbyAqCitzdGF0aWMg dm9pZCAqCiBmaW5kX3JlbF9pbmZvKFJlbEluZm9MaXN0ICpsaXN0LCBSZWxpZHMgcmVsaWRzKQog ewogCWlmIChsaXN0ID09IE5VTEwpCkBAIC01NTcsNyArNTY1LDcgQEAgZmluZF9yZWxfaW5mbyhS ZWxJbmZvTGlzdCAqbGlzdCwgUmVsaWRzIHJlbGlkcykKIAkJCQkJCQkJCQkJICBIQVNIX0ZJTkQs CiAJCQkJCQkJCQkJCSAgTlVMTCk7CiAJCWlmIChoZW50cnkpCi0JCQlyZXR1cm4gaGVudHJ5LT5y ZWw7CisJCQlyZXR1cm4gaGVudHJ5LT5kYXRhOwogCX0KIAllbHNlCiAJewpAQCAtNTY1LDEwICs1 NzMsMTggQEAgZmluZF9yZWxfaW5mbyhSZWxJbmZvTGlzdCAqbGlzdCwgUmVsaWRzIHJlbGlkcykK IAogCQlmb3JlYWNoKGwsIGxpc3QtPml0ZW1zKQogCQl7Ci0JCQlSZWxPcHRJbmZvICpyZWwgPSAo UmVsT3B0SW5mbyAqKSBsZmlyc3QobCk7CisJCQl2b2lkCSAgICppdGVtID0gbGZpcnN0KGwpOwor CQkJUmVsaWRzCQlpdGVtX3JlbGlkcyA9IE5VTEw7CisKKwkJCUFzc2VydChJc0EoaXRlbSwgUmVs T3B0SW5mbykgfHwgSXNBKGl0ZW0sIFJlbEFnZ0luZm8pKTsKIAotCQkJaWYgKGJtc19lcXVhbChy ZWwtPnJlbGlkcywgcmVsaWRzKSkKLQkJCQlyZXR1cm4gcmVsOworCQkJaWYgKElzQShpdGVtLCBS ZWxPcHRJbmZvKSkKKwkJCQlpdGVtX3JlbGlkcyA9ICgoUmVsT3B0SW5mbyAqKSBpdGVtKS0+cmVs aWRzOworCQkJZWxzZSBpZiAoSXNBKGl0ZW0sIFJlbEFnZ0luZm8pKQorCQkJCWl0ZW1fcmVsaWRz ID0gKChSZWxBZ2dJbmZvICopIGl0ZW0pLT5yZWxpZHM7CisKKwkJCWlmIChibXNfZXF1YWwoaXRl bV9yZWxpZHMsIHJlbGlkcykpCisJCQkJcmV0dXJuIGl0ZW07CiAJCX0KIAl9CiAKQEAgLTU4Mywz MiArNTk5LDQwIEBAIGZpbmRfcmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIFJlbGlkcyByZWxp ZHMpCiBSZWxPcHRJbmZvICoKIGZpbmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlk cyByZWxpZHMpCiB7Ci0JcmV0dXJuIGZpbmRfcmVsX2luZm8ocm9vdC0+am9pbl9yZWxfbGlzdCwg cmVsaWRzKTsKKwlyZXR1cm4gKFJlbE9wdEluZm8gKikgZmluZF9yZWxfaW5mbyhyb290LT5qb2lu X3JlbF9saXN0LCByZWxpZHMpOwogfQogCiAvKgogICogYWRkX3JlbF9pbmZvCi0gKgkJQWRkIGdp dmVuIHJlbGF0aW9uIHRvIHRoZSBnaXZlbiBsaXN0LiBBbHNvIGFkZCBpdCB0byB0aGUgYXV4aWxp YXJ5CisgKgkJQWRkIHJlbGF0aW9uIHNwZWNpZmljIGluZm8gdG8gYSBsaXN0LCBhbmQgYWxzbyBh ZGQgaXQgdG8gdGhlIGF1eGlsaWFyeQogICoJCWhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUuCiAg Ki8KIHN0YXRpYyB2b2lkCi1hZGRfcmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIFJlbE9wdElu Zm8gKnJlbCkKK2FkZF9yZWxfaW5mbyhSZWxJbmZvTGlzdCAqbGlzdCwgdm9pZCAqZGF0YSkKIHsK KwlBc3NlcnQoSXNBKGRhdGEsIFJlbE9wdEluZm8pIHx8IElzQShkYXRhLCBSZWxBZ2dJbmZvKSk7 CisKIAkvKiBHRVFPIHJlcXVpcmVzIHVzIHRvIGFwcGVuZCB0aGUgbmV3IHJlbGF0aW9uIHRvIHRo ZSBlbmQgb2YgdGhlIGxpc3QhICovCi0JbGlzdC0+aXRlbXMgPSBsYXBwZW5kKGxpc3QtPml0ZW1z LCByZWwpOworCWxpc3QtPml0ZW1zID0gbGFwcGVuZChsaXN0LT5pdGVtcywgZGF0YSk7CiAKIAkv KiBzdG9yZSBpdCBpbnRvIHRoZSBhdXhpbGlhcnkgaGFzaHRhYmxlIGlmIHRoZXJlIGlzIG9uZS4g Ki8KIAlpZiAobGlzdC0+aGFzaCkKIAl7CisJCVJlbGlkcwkJcmVsaWRzOwogCQlSZWxJbmZvRW50 cnkgKmhlbnRyeTsKIAkJYm9vbAkJZm91bmQ7CiAKKwkJaWYgKElzQShkYXRhLCBSZWxPcHRJbmZv KSkKKwkJCXJlbGlkcyA9ICgoUmVsT3B0SW5mbyAqKSBkYXRhKS0+cmVsaWRzOworCQllbHNlCisJ CQlyZWxpZHMgPSAoKFJlbEFnZ0luZm8gKikgZGF0YSktPnJlbGlkczsKKwogCQloZW50cnkgPSAo UmVsSW5mb0VudHJ5ICopIGhhc2hfc2VhcmNoKGxpc3QtPmhhc2gsCi0JCQkJCQkJCQkJCSAgJihy ZWwtPnJlbGlkcyksCisJCQkJCQkJCQkJCSAgJnJlbGlkcywKIAkJCQkJCQkJCQkJICBIQVNIX0VO VEVSLAogCQkJCQkJCQkJCQkgICZmb3VuZCk7CiAJCUFzc2VydCghZm91bmQpOwotCQloZW50cnkt PnJlbCA9IHJlbDsKKwkJaGVudHJ5LT5kYXRhID0gZGF0YTsKIAl9CiB9CiAKQEAgLTE1MDMsNyAr MTUyNyw3IEBAIGZldGNoX3VwcGVyX3JlbChQbGFubmVySW5mbyAqcm9vdCwgVXBwZXJSZWxhdGlv bktpbmQga2luZCwgUmVsaWRzIHJlbGlkcykKIAkvKiBJZiB3ZSBhbHJlYWR5IG1hZGUgdGhpcyB1 cHBlcnJlbCBmb3IgdGhlIHF1ZXJ5LCByZXR1cm4gaXQgKi8KIAlpZiAobGlzdCkKIAl7Ci0JCXVw cGVycmVsID0gZmluZF9yZWxfaW5mbyhsaXN0LCByZWxpZHMpOworCQl1cHBlcnJlbCA9IChSZWxP cHRJbmZvICopIGZpbmRfcmVsX2luZm8obGlzdCwgcmVsaWRzKTsKIAkJaWYgKHVwcGVycmVsKQog CQkJcmV0dXJuIHVwcGVycmVsOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh dGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggMDgwNWRlNjRk NS4uMThkMWFlOGNiYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTEwNzgsNiArMTA3OCw3OSBA QCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJKChyZWwpLT5wYXJ0X3NjaGVtZSAmJiAocmVs KS0+Ym91bmRpbmZvICYmIChyZWwpLT5ucGFydHMgPiAwICYmIFwKIAkgKHJlbCktPnBhcnRfcmVs cyAmJiAocmVsKS0+cGFydGV4cHJzICYmIChyZWwpLT5udWxsYWJsZV9wYXJ0ZXhwcnMpCiAKKy8q CisgKiBSZWxBZ2dJbmZvCisgKgkJSW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSBncm91cGVk IHBhdGhzIGZvciBiYXNlIGFuZCBqb2luIHJlbHMuCisgKgorICogInJlbGlkcyIgaXMgdGhlIHNl dCBvZiByZWxhdGlvbiBpZGVudGlmaWVycyAoUlQgaW5kZXhlcyksIGp1c3QgbGlrZSB3aXRoCisg KiBSZWxPcHRJbmZvLgorICoKKyAqICJ0YXJnZXQiIHdpbGwgYmUgdXNlZCBhcyBwYXRodGFyZ2V0 IGlmIHBhcnRpYWwgYWdncmVnYXRpb24gaXMgYXBwbGllZCB0bworICogYmFzZSByZWxhdGlvbiBv ciBqb2luLiBUaGUgc2FtZSB0YXJnZXQgd2lsbCBhbHNvIC0tLSBpZiB0aGUgcmVsYXRpb24gaXMg YQorICogam9pbiAtLS0gYmUgdXNlZCB0byBqb2luIGdyb3VwZWQgcGF0aCB0byBhIG5vbi1ncm91 cGVkIG9uZS4gIFRoaXMgdGFyZ2V0IGNhbgorICogY29udGFpbiBwbGFpbi1WYXIgZ3JvdXBpbmcg ZXhwcmVzc2lvbnMgYW5kIEFnZ3JlZiBub2Rlcy4KKyAqCisgKiBOb3RlOiBUaGVyZSdzIGEgY29u dmVudGlvbiB0aGF0IEFnZ3JlZiBleHByZXNzaW9ucyBhcmUgc3VwcG9zZWQgdG8gZm9sbG93Cisg KiB0aGUgb3RoZXIgZXhwcmVzc2lvbnMgb2YgdGhlIHRhcmdldC4gSXRlcmF0aW9ucyBvZiAtPmV4 cHJzIG1heSByZWx5IG9uIHRoaXMKKyAqIGFycmFuZ2VtZW50LgorICoKKyAqICJhZ2dfaW5wdXQi IGNvbnRhaW5zIFZhcnMgdXNlZCBlaXRoZXIgYXMgZ3JvdXBpbmcgZXhwcmVzc2lvbnMgb3IgYWdn cmVnYXRlCisgKiBhcmd1bWVudHMuIFBhdGhzIHByb3ZpZGluZyB0aGUgYWdncmVnYXRpb24gcGxh biB3aXRoIGlucHV0IGRhdGEgc2hvdWxkIHVzZQorICogdGhpcyB0YXJnZXQuIFRoZSBvbmx5IGRp ZmZlcmVuY2UgZnJvbSByZWx0YXJnZXQgb2YgdGhlIG5vbi1ncm91cGVkIHJlbGF0aW9uCisgKiBp cyB0aGF0IHNvbWUgaXRlbXMgY2FuIGhhdmUgc29ydGdyb3VwcmVmIGluaXRpYWxpemVkLgorICoK KyAqICJpbnB1dF9yb3dzIiBpcyB0aGUgZXN0aW1hdGVkIG51bWJlciBvZiBpbnB1dCByb3dzIGZv ciBBZ2dQYXRoLiBJdCdzCisgKiBhY3R1YWxseSBqdXN0IGEgd29ya3NwYWNlIGZvciB1c2VycyBv ZiB0aGUgc3RydWN0dXJlLCBpLmUuIG5vdCBpbml0aWFsaXplZAorICogd2hlbiBpbnN0YW5jZSBv ZiB0aGUgc3RydWN0dXJlIGlzIGNyZWF0ZWQuCisgKgorICogImdyb3VwZWRfcm93cyIgaXMgdGhl IGVzdGltYXRlZCBudW1iZXIgb2YgcmVzdWx0IHJvd3Mgb2YgdGhlIEFnZ1BhdGguCisgKgorICog Imdyb3VwX2NsYXVzZXMiLCAiZ3JvdXBfZXhwcnMiIGFuZCAiZ3JvdXBfcGF0aGtleXMiIGFyZSBs aXN0cyBvZgorICogU29ydEdyb3VwQ2xhdXNlLCB0aGUgY29ycmVzcG9uZGluZyBncm91cGluZyBl eHByZXNzaW9ucyBhbmQgUGF0aEtleQorICogcmVzcGVjdGl2ZWx5LgorICoKKyAqICJhZ2dfZXhw cnMiIGlzIGEgbGlzdCBvZiBBZ2dyZWYgbm9kZXMgZm9yIHRoZSBhZ2dyZWdhdGlvbiBvZiB0aGUg cmVsYXRpb24ncworICogcGF0aHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IFJlbEFnZ0luZm8KK3sK KwlwZ19ub2RlX2F0dHIobm9fY29weV9lcXVhbCwgbm9fcmVhZCwgbm9fcXVlcnlfanVtYmxlKQor CisJTm9kZVRhZwkJdHlwZTsKKworCS8qCisJICogdGhlIHNhbWUgYXMgaW4gUmVsT3B0SW5mbzsg c2V0IG9mIGJhc2UgKyBPSiByZWxpZHMgKHJhbmdldGFibGUgaW5kZXhlcykKKwkgKi8KKwlSZWxp ZHMJCXJlbGlkczsKKworCS8qCisJICogdGhlIHRhcmdldGxpc3QgZm9yIFBhdGhzIHNjYW5uaW5n IHRoaXMgZ3JvdXBlZCByZWw7IGxpc3Qgb2YgVmFycy9FeHBycywKKwkgKiBjb3N0LCB3aWR0aAor CSAqLworCXN0cnVjdCBQYXRoVGFyZ2V0ICp0YXJnZXQ7CisKKwkvKgorCSAqIHRoZSB0YXJnZXRs aXN0IGZvciBQYXRocyB0aGF0IGdlbmVyYXRlIGlucHV0IGZvciB0aGUgZ3JvdXBlZCBwYXRocwor CSAqLworCXN0cnVjdCBQYXRoVGFyZ2V0ICphZ2dfaW5wdXQ7CisKKwkvKiBlc3RpbWF0ZWQgbnVt YmVyIG9mIGlucHV0IHR1cGxlcyBmb3IgdGhlIGdyb3VwZWQgcGF0aHMgKi8KKwlDYXJkaW5hbGl0 eQkJaW5wdXRfcm93czsKKworCS8qIGVzdGltYXRlZCBudW1iZXIgb2YgcmVzdWx0IHR1cGxlcyBv ZiB0aGUgZ3JvdXBlZCByZWxhdGlvbiovCisJQ2FyZGluYWxpdHkJCWdyb3VwZWRfcm93czsKKwor CS8qIGEgbGlzdCBvZiBTb3J0R3JvdXBDbGF1c2UncyAqLworCUxpc3QJICAgKmdyb3VwX2NsYXVz ZXM7CisJLyogYSBsaXN0IG9mIGdyb3VwaW5nIGV4cHJlc3Npb25zICovCisJTGlzdAkgICAqZ3Jv dXBfZXhwcnM7CisJLyogYSBsaXN0IG9mIFBhdGhLZXlzICovCisJTGlzdAkgICAqZ3JvdXBfcGF0 aGtleXM7CisKKwkvKiBhIGxpc3Qgb2YgQWdncmVmIG5vZGVzICovCisJTGlzdAkgICAqYWdnX2V4 cHJzOworfSBSZWxBZ2dJbmZvOworCiAvKgogICogSW5kZXhPcHRJbmZvCiAgKgkJUGVyLWluZGV4 IGluZm9ybWF0aW9uIGZvciBwbGFubmluZy9vcHRpbWl6YXRpb24KLS0gCjIuNDMuMAoK --000000000000b2a431061ac0ff96 Content-Type: application/octet-stream; name="v8-0003-Set-up-for-eager-aggregation-by-collecting-needed-infos.patch" Content-Disposition: attachment; filename="v8-0003-Set-up-for-eager-aggregation-by-collecting-needed-infos.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxcz6sqs2 RnJvbSBmNjgzMDQ5YWY4NzE2MzFjMTVhNTg3YWY2YzMyOWEzODFlNWQzMGZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNjowMzowMCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjgg My85XSBTZXQgdXAgZm9yIGVhZ2VyIGFnZ3JlZ2F0aW9uIGJ5IGNvbGxlY3RpbmcgbmVlZGVkCiBp bmZvcwoKVGhpcyBjb21taXQgY2hlY2tzIGlmIGVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGFwcGxpY2Fi bGUsIGFuZCBpZiBzbywgc2V0cwp1cCByb290LT5hZ2dfY2xhdXNlX2xpc3QgYW5kIHJvb3QtPmdy b3VwX2V4cHJfbGlzdCBieSBjb2xsZWN0aW5nCnN1aXRhYmxlIGFnZ3JlZ2F0ZSBleHByZXNzaW9u cyBhbmQgZ3JvdXBpbmcgZXhwcmVzc2lvbnMgaW4gdGhlIHF1ZXJ5LgotLS0KIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYyAgICAgICAgfCAyNTAgKysrKysrKysrKysrKysrKysr CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jICAgICAgICAgfCAgIDggKwog c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgIHwgIDEwICsKIHNy Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgNDEgKysrCiBzcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAgICB8ICAgMyArLQogOSBmaWxlcyBj aGFuZ2VkLCAzMTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IDcwZTJiNThkOGYuLmQxYjk3NDM2N2IgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAtNzcsNiArNzcsNyBAQCB0eXBlZGVmIGVu dW0gcHVzaGRvd25fc2FmZV90eXBlCiAKIC8qIFRoZXNlIHBhcmFtZXRlcnMgYXJlIHNldCBieSBH VUMgKi8KIGJvb2wJCWVuYWJsZV9nZXFvID0gZmFsc2U7CS8qIGp1c3QgaW4gY2FzZSBHVUMgZG9l c24ndCBzZXQgaXQgKi8KK2Jvb2wJCWVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgPSBmYWxzZTsKIGlu dAkJCWdlcW9fdGhyZXNob2xkOwogaW50CQkJbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZTsK IGludAkJCW1pbl9wYXJhbGxlbF9pbmRleF9zY2FuX3NpemU7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2luaXRzcGxhbi5jCmluZGV4IGUyYzY4ZmU2ZjkuLjAyODEzMzY0NjkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KICNpbmNs dWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1 ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgpAQCAtODAsNiArODEsOCBAQCB0eXBlZGVmIHN0cnVjdCBK b2luVHJlZUl0ZW0KIH0gSm9pblRyZWVJdGVtOwogCiAKK3N0YXRpYyB2b2lkIGNyZWF0ZV9hZ2df Y2xhdXNlX2luZm9zKFBsYW5uZXJJbmZvICpyb290KTsKK3N0YXRpYyB2b2lkIGNyZWF0ZV9ncm91 cGluZ19leHByX2luZm9zKFBsYW5uZXJJbmZvICpyb290KTsKIHN0YXRpYyB2b2lkIGV4dHJhY3Rf bGF0ZXJhbF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpicmVsLAog CQkJCQkJCQkJICAgSW5kZXggcnRpbmRleCk7CiBzdGF0aWMgTGlzdCAqZGVjb25zdHJ1Y3RfcmVj dXJzZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqanRub2RlLApAQCAtMzI3LDYgKzMzMCwyNTMg QEAgYWRkX3ZhcnNfdG9fdGFyZ2V0bGlzdChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqdmFycywK IAl9CiB9CiAKKy8qCisgKiBzZXR1cF9lYWdlcl9hZ2dyZWdhdGlvbgorICoJICBDaGVjayBpZiBl YWdlciBhZ2dyZWdhdGlvbiBpcyBhcHBsaWNhYmxlLCBhbmQgaWYgc28gY29sbGVjdCBzdWl0YWJs ZQorICoJICBhZ2dyZWdhdGUgZXhwcmVzc2lvbnMgYW5kIGdyb3VwaW5nIGV4cHJlc3Npb25zIGlu IHRoZSBxdWVyeS4KKyAqLwordm9pZAorc2V0dXBfZWFnZXJfYWdncmVnYXRpb24oUGxhbm5lcklu Zm8gKnJvb3QpCit7CisJLyoKKwkgKiBEb24ndCBhcHBseSBlYWdlciBhZ2dyZWdhdGlvbiBpZiBk aXNhYmxlZCBieSB1c2VyLgorCSAqLworCWlmICghZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSkKKwkJ cmV0dXJuOworCisJLyoKKwkgKiBEb24ndCBhcHBseSBlYWdlciBhZ2dyZWdhdGlvbiBpZiB0aGVy ZSBhcmUgbm8gR1JPVVAgQlkgY2xhdXNlcy4KKwkgKi8KKwlpZiAoIXJvb3QtPnBhcnNlLT5ncm91 cENsYXVzZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBGb3Igbm93IHdlIGRvbid0IHRyeSB0byBz dXBwb3J0IGdyb3VwaW5nIHNldHMuCisJICovCisJaWYgKHJvb3QtPnBhcnNlLT5ncm91cGluZ1Nl dHMpCisJCXJldHVybjsKKworCS8qCisJICogRm9yIG5vdyB3ZSBkb24ndCB0cnkgdG8gc3VwcG9y dCBESVNUSU5DVCBvciBPUkRFUiBCWSBhZ2dyZWdhdGVzLgorCSAqLworCWlmIChyb290LT5udW1P cmRlcmVkQWdncyA+IDApCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIGFueSBh Z2dyZWdhdGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgcGFydGlhbCBtb2RlLCBvciBhbnkKKwkgKiBw YXJ0aWFsIGFnZ3JlZ2F0ZXMgdGhhdCBhcmUgbm9uLXNlcmlhbGl6YWJsZSwgZG8gbm90IGFwcGx5 IGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICovCisJaWYgKHJvb3QtPmhhc05vblBhcnRpYWxB Z2dzIHx8IHJvb3QtPmhhc05vblNlcmlhbEFnZ3MpCisJCXJldHVybjsKKworCS8qCisJICogU1JG IGlzIG5vdCBhbGxvd2VkIGluIHRoZSBhZ2dyZWdhdGUgYXJndW1lbnQgYW5kIHdlIGRvbid0IGV2 ZW4gd2FudCBpdAorCSAqIGluIHRoZSBHUk9VUCBCWSBjbGF1c2UsIHNvIGZvcmJpZCBpdCBpbiBn ZW5lcmFsLiBJdCBuZWVkcyB0byBiZQorCSAqIGFuYWx5emVkIGlmIGV2YWx1YXRpb24gb2YgYSBH Uk9VUCBCWSBjbGF1c2UgY29udGFpbmluZyBTUkYgYmVsb3cgdGhlCisJICogcXVlcnkgdGFyZ2V0 bGlzdCB3b3VsZCBiZSBjb3JyZWN0LiBDdXJyZW50bHkgaXQgZG9lcyBub3Qgc2VlbSB0byBiZSBh bgorCSAqIGltcG9ydGFudCB1c2UgY2FzZS4KKwkgKi8KKwlpZiAocm9vdC0+cGFyc2UtPmhhc1Rh cmdldFNSRnMpCisJCXJldHVybjsKKworCS8qCisJICogQ29sbGVjdCBhZ2dyZWdhdGUgZXhwcmVz c2lvbnMgdGhhdCBhcHBlYXIgaW4gdGFyZ2V0bGlzdCBhbmQgaGF2aW5nCisJICogY2xhdXNlcy4K KwkgKi8KKwljcmVhdGVfYWdnX2NsYXVzZV9pbmZvcyhyb290KTsKKworCS8qCisJICogSWYgdGhl cmUgYXJlIG5vIHN1aXRhYmxlIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucywgd2UgY2Fubm90IGFwcGx5 IGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICovCisJaWYgKHJvb3QtPmFnZ19jbGF1c2VfbGlz dCA9PSBOSUwpCisJCXJldHVybjsKKworCS8qCisJICogQ29sbGVjdCBncm91cGluZyBleHByZXNz aW9ucyB0aGF0IGFwcGVhciBpbiBncm91cGluZyBjbGF1c2VzLgorCSAqLworCWNyZWF0ZV9ncm91 cGluZ19leHByX2luZm9zKHJvb3QpOworfQorCisvKgorICogQ3JlYXRlIEFnZ0NsYXVzZUluZm8g Zm9yIGVhY2ggYWdncmVnYXRlLgorICoKKyAqIElmIGFueSBhZ2dyZWdhdGUgaXMgbm90IHN1aXRh YmxlLCBzZXQgcm9vdC0+YWdnX2NsYXVzZV9saXN0IHRvIE5JTCBhbmQKKyAqIHJldHVybi4KKyAq Lworc3RhdGljIHZvaWQKK2NyZWF0ZV9hZ2dfY2xhdXNlX2luZm9zKFBsYW5uZXJJbmZvICpyb290 KQoreworCUxpc3QJICAgKnRsaXN0X2V4cHJzOworCUxpc3RDZWxsICAgKmxjOworCisJQXNzZXJ0 KHJvb3QtPmFnZ19jbGF1c2VfbGlzdCA9PSBOSUwpOworCisJdGxpc3RfZXhwcnMgPSBwdWxsX3Zh cl9jbGF1c2UoKE5vZGUgKikgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0LAorCQkJCQkJCQkgIFBWQ19J TkNMVURFX0FHR1JFR0FURVMgfAorCQkJCQkJCQkgIFBWQ19SRUNVUlNFX1dJTkRPV0ZVTkNTIHwK KwkJCQkJCQkJICBQVkNfUkVDVVJTRV9QTEFDRUhPTERFUlMpOworCisJLyoKKwkgKiBGb3Igbm93 IHdlIGRvbid0IHRyeSB0byBzdXBwb3J0IEdST1VQSU5HKCkgZXhwcmVzc2lvbnMuCisJICovCisJ Zm9yZWFjaChsYywgdGxpc3RfZXhwcnMpCisJeworCQlFeHByCSAgICpleHByID0gKEV4cHIgKikg bGZpcnN0KGxjKTsKKworCQlpZiAoSXNBKGV4cHIsIEdyb3VwaW5nRnVuYykpCisJCQlyZXR1cm47 CisJfQorCisJLyoKKwkgKiBBZ2dyZWdhdGVzIHdpdGhpbiB0aGUgSEFWSU5HIGNsYXVzZSBuZWVk IHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUgc2FtZSB3YXkKKwkgKiBhcyB0aG9zZSBpbiB0aGUgdGFy Z2V0bGlzdC4gIE5vdGUgdGhhdCBIQVZJTkcgY2FuIGNvbnRhaW4gQWdncmVmcyBidXQKKwkgKiBu b3QgV2luZG93RnVuY3MuCisJICovCisJaWYgKHJvb3QtPnBhcnNlLT5oYXZpbmdRdWFsICE9IE5V TEwpCisJeworCQlMaXN0CSAgICpoYXZpbmdfZXhwcnM7CisKKwkJaGF2aW5nX2V4cHJzID0gcHVs bF92YXJfY2xhdXNlKChOb2RlICopIHJvb3QtPnBhcnNlLT5oYXZpbmdRdWFsLAorCQkJCQkJCQkJ ICAgUFZDX0lOQ0xVREVfQUdHUkVHQVRFUyB8CisJCQkJCQkJCQkgICBQVkNfUkVDVVJTRV9QTEFD RUhPTERFUlMpOworCQlpZiAoaGF2aW5nX2V4cHJzICE9IE5JTCkKKwkJeworCQkJdGxpc3RfZXhw cnMgPSBsaXN0X2NvbmNhdCh0bGlzdF9leHBycywgaGF2aW5nX2V4cHJzKTsKKwkJCWxpc3RfZnJl ZShoYXZpbmdfZXhwcnMpOworCQl9CisJfQorCisJZm9yZWFjaChsYywgdGxpc3RfZXhwcnMpCisJ eworCQlFeHByCSAgICpleHByID0gKEV4cHIgKikgbGZpcnN0KGxjKTsKKwkJQWdncmVmCSAgICph Z2dyZWY7CisJCUFnZ0NsYXVzZUluZm8gKmFjX2luZm87CisKKwkJLyoKKwkJICogdGxpc3RfZXhw cnMgbWF5IGFsc28gY29udGFpbiBWYXJzLCBidXQgd2Ugb25seSBuZWVkIEFnZ3JlZnMuCisJCSAq LworCQlpZiAoSXNBKGV4cHIsIFZhcikpCisJCQljb250aW51ZTsKKworCQlhZ2dyZWYgPSBjYXN0 Tm9kZShBZ2dyZWYsIGV4cHIpOworCisJCUFzc2VydChhZ2dyZWYtPmFnZ29yZGVyID09IE5JTCk7 CisJCUFzc2VydChhZ2dyZWYtPmFnZ2Rpc3RpbmN0ID09IE5JTCk7CisKKwkJYWNfaW5mbyA9IG1h a2VOb2RlKEFnZ0NsYXVzZUluZm8pOworCQlhY19pbmZvLT5hZ2dyZWYgPSBhZ2dyZWY7CisJCWFj X2luZm8tPmFnZ19ldmFsX2F0ID0gcHVsbF92YXJub3Mocm9vdCwgKE5vZGUgKikgYWdncmVmKTsK KworCQlyb290LT5hZ2dfY2xhdXNlX2xpc3QgPQorCQkJbGlzdF9hcHBlbmRfdW5pcXVlKHJvb3Qt PmFnZ19jbGF1c2VfbGlzdCwgYWNfaW5mbyk7CisJfQorCisJbGlzdF9mcmVlKHRsaXN0X2V4cHJz KTsKK30KKworLyoKKyAqIENyZWF0ZSBHcm91cEV4cHJJbmZvIGZvciBlYWNoIGV4cHJlc3Npb24g dXNhYmxlIGFzIGdyb3VwaW5nIGtleS4KKyAqCisgKiBJZiBhbnkgZ3JvdXBpbmcgZXhwcmVzc2lv biBpcyBub3Qgc3VpdGFibGUsIHNldCByb290LT5ncm91cF9leHByX2xpc3QgdG8gTklMCisgKiBh bmQgcmV0dXJuLgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX2dyb3VwaW5nX2V4cHJfaW5mb3Mo UGxhbm5lckluZm8gKnJvb3QpCit7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisJTGlzdAkgICAq c29ydGdyb3VwcmVmcyA9IE5JTDsKKwlMaXN0CSAgICpidHJlZV9vcGZhbWlsaWVzID0gTklMOwor CUxpc3RDZWxsICAgKmxjLAorCQkJICAgKmxjMSwKKwkJCSAgICpsYzIsCisJCQkgICAqbGMzOwor CisJQXNzZXJ0KHJvb3QtPmdyb3VwX2V4cHJfbGlzdCA9PSBOSUwpOworCisJZm9yZWFjaChsYywg cm9vdC0+cGFyc2UtPmdyb3VwQ2xhdXNlKQorCXsKKwkJU29ydEdyb3VwQ2xhdXNlICpzZ2MgPSBs Zmlyc3Rfbm9kZShTb3J0R3JvdXBDbGF1c2UsIGxjKTsKKwkJVGFyZ2V0RW50cnkgKnRsZSA9IGdl dF9zb3J0Z3JvdXBjbGF1c2VfdGxlKHNnYywgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0KTsKKwkJVHlw ZUNhY2hlRW50cnkgKnRjZTsKKwkJT2lkCQkJCWVxdWFsaW1hZ2Vwcm9jOworCQlPaWQJCQkJZXFf b3A7CisJCUxpc3QJCSAgICplcV9vcGZhbWlsaWVzOworCQlPaWQJCQkJYnRyZWVfb3BmYW1pbHk7 CisKKwkJQXNzZXJ0KHRsZS0+cmVzc29ydGdyb3VwcmVmID4gMCk7CisKKwkJLyoKKwkJICogRm9y IG5vdyB3ZSBvbmx5IHN1cHBvcnQgcGxhaW4gVmFycyBhcyBncm91cGluZyBleHByZXNzaW9ucy4K KwkJICovCisJCWlmICghSXNBKHRsZS0+ZXhwciwgVmFyKSkKKwkJCXJldHVybjsKKworCQkvKgor CQkgKiBFYWdlciBhZ2dyZWdhdGlvbiBpcyBvbmx5IHBvc3NpYmxlIGlmIGVxdWFsaXR5IG9mIGdy b3VwaW5nIGtleXMKKwkJICogcGVyIHRoZSBlcXVhbGl0eSBvcGVyYXRvciBpbXBsaWVzIGJpdHdp c2UgZXF1YWxpdHkuIE90aGVyd2lzZSwgaWYKKwkJICogd2UgcHV0IGtleXMgb2YgZGlmZmVyZW50 IGJ5dGUgaW1hZ2VzIGludG8gdGhlIHNhbWUgZ3JvdXAsIHdlIGxvc2UKKwkJICogc29tZSBpbmZv cm1hdGlvbiB0aGF0IG1heSBiZSBuZWVkZWQgdG8gZXZhbHVhdGUgam9pbiBjbGF1c2VzIGFib3Zl CisJCSAqIHRoZSBwdXNoZWQtZG93biBhZ2dyZWdhdGUgbm9kZSwgb3IgdGhlIFdIRVJFIGNsYXVz ZS4KKwkJICoKKwkJICogRm9yIGV4YW1wbGUsIHRoZSBOVU1FUklDIGRhdGEgdHlwZSBpcyBub3Qg c3VwcG9ydGVkIGJlY2F1c2UgdmFsdWVzCisJCSAqIHRoYXQgZmFsbCBpbnRvIHRoZSBzYW1lIGdy b3VwIGFjY29yZGluZyB0byB0aGUgZXF1YWxpdHkgb3BlcmF0b3IKKwkJICogKGUuZy4gMCBhbmQg MC4wKSBjYW4gaGF2ZSBkaWZmZXJlbnQgc2NhbGUuCisJCSAqLworCQl0Y2UgPSBsb29rdXBfdHlw ZV9jYWNoZShleHByVHlwZSgoTm9kZSAqKSB0bGUtPmV4cHIpLAorCQkJCQkJCQlUWVBFQ0FDSEVf QlRSRUVfT1BGQU1JTFkpOworCQlpZiAoIU9pZElzVmFsaWQodGNlLT5idHJlZV9vcGYpIHx8CisJ CQkhT2lkSXNWYWxpZCh0Y2UtPmJ0cmVlX29waW50eXBlKSkKKwkJCXJldHVybjsKKworCQllcXVh bGltYWdlcHJvYyA9IGdldF9vcGZhbWlseV9wcm9jKHRjZS0+YnRyZWVfb3BmLAorCQkJCQkJCQkJ CSAgIHRjZS0+YnRyZWVfb3BpbnR5cGUsCisJCQkJCQkJCQkJICAgdGNlLT5idHJlZV9vcGludHlw ZSwKKwkJCQkJCQkJCQkgICBCVEVRVUFMSU1BR0VfUFJPQyk7CisJCWlmICghT2lkSXNWYWxpZChl cXVhbGltYWdlcHJvYykgfHwKKwkJCSFEYXR1bUdldEJvb2woT2lkRnVuY3Rpb25DYWxsMUNvbGwo ZXF1YWxpbWFnZXByb2MsCisJCQkJCQkJCQkJCSAgIHRjZS0+dHlwY29sbGF0aW9uLAorCQkJCQkJ CQkJCQkgICBPYmplY3RJZEdldERhdHVtKHRjZS0+YnRyZWVfb3BpbnR5cGUpKSkpCisJCQlyZXR1 cm47CisKKwkJLyoKKwkJICogR2V0IHRoZSBvcGVyYXRvciBpbiB0aGUgYnRyZWUncyBvcGZhbWls eS4KKwkJICovCisJCWVxX29wID0gZ2V0X29wZmFtaWx5X21lbWJlcih0Y2UtPmJ0cmVlX29wZiwK KwkJCQkJCQkJCXRjZS0+YnRyZWVfb3BpbnR5cGUsCisJCQkJCQkJCQl0Y2UtPmJ0cmVlX29waW50 eXBlLAorCQkJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyKTsKKwkJaWYgKCFPaWRJc1ZhbGlk KGVxX29wKSkKKwkJCXJldHVybjsKKwkJZXFfb3BmYW1pbGllcyA9IGdldF9tZXJnZWpvaW5fb3Bm YW1pbGllcyhlcV9vcCk7CisJCWlmICghZXFfb3BmYW1pbGllcykKKwkJCXJldHVybjsKKwkJYnRy ZWVfb3BmYW1pbHkgPSBsaW5pdGlhbF9vaWQoZXFfb3BmYW1pbGllcyk7CisKKwkJZXhwcnMgPSBs YXBwZW5kKGV4cHJzLCB0bGUtPmV4cHIpOworCQlzb3J0Z3JvdXByZWZzID0gbGFwcGVuZF9pbnQo c29ydGdyb3VwcmVmcywgdGxlLT5yZXNzb3J0Z3JvdXByZWYpOworCQlidHJlZV9vcGZhbWlsaWVz ID0gbGFwcGVuZF9vaWQoYnRyZWVfb3BmYW1pbGllcywgYnRyZWVfb3BmYW1pbHkpOworCX0KKwor CS8qCisJICogQ29uc3RydWN0IEdyb3VwRXhwckluZm8gZm9yIGVhY2ggZXhwcmVzc2lvbi4KKwkg Ki8KKwlmb3J0aHJlZShsYzEsIGV4cHJzLCBsYzIsIHNvcnRncm91cHJlZnMsIGxjMywgYnRyZWVf b3BmYW1pbGllcykKKwl7CisJCUV4cHIJICAgKmV4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMxKTsK KwkJaW50CQkJc29ydGdyb3VwcmVmID0gbGZpcnN0X2ludChsYzIpOworCQlPaWQJCQlidHJlZV9v cGZhbWlseSA9IGxmaXJzdF9vaWQobGMzKTsKKwkJR3JvdXBFeHBySW5mbyAqZ2VfaW5mbzsKKwor CQlnZV9pbmZvID0gbWFrZU5vZGUoR3JvdXBFeHBySW5mbyk7CisJCWdlX2luZm8tPmV4cHIgPSAo RXhwciAqKSBjb3B5T2JqZWN0KGV4cHIpOworCQlnZV9pbmZvLT5zb3J0Z3JvdXByZWYgPSBzb3J0 Z3JvdXByZWY7CisJCWdlX2luZm8tPmJ0cmVlX29wZmFtaWx5ID0gYnRyZWVfb3BmYW1pbHk7CisK KwkJcm9vdC0+Z3JvdXBfZXhwcl9saXN0ID0gbGFwcGVuZChyb290LT5ncm91cF9leHByX2xpc3Qs IGdlX2luZm8pOworCX0KK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3BsYW5tYWluLmMKaW5kZXggZmQ4YjJiMGNhMy4uNWQyYmNhOTE0YiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jCkBAIC03Nyw2ICs3Nyw4IEBAIHF1ZXJ5 X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJcm9vdC0+cGxhY2Vob2xkZXJfbGlzdCA9IE5J TDsKIAlyb290LT5wbGFjZWhvbGRlcl9hcnJheSA9IE5VTEw7CiAJcm9vdC0+cGxhY2Vob2xkZXJf YXJyYXlfc2l6ZSA9IDA7CisJcm9vdC0+YWdnX2NsYXVzZV9saXN0ID0gTklMOworCXJvb3QtPmdy b3VwX2V4cHJfbGlzdCA9IE5JTDsKIAlyb290LT5ma2V5X2xpc3QgPSBOSUw7CiAJcm9vdC0+aW5p dGlhbF9yZWxzID0gTklMOwogCkBAIC0yNTgsNiArMjYwLDEyIEBAIHF1ZXJ5X3BsYW5uZXIoUGxh bm5lckluZm8gKnJvb3QsCiAJICovCiAJZXh0cmFjdF9yZXN0cmljdGlvbl9vcl9jbGF1c2VzKHJv b3QpOwogCisJLyoKKwkgKiBDaGVjayBpZiBlYWdlciBhZ2dyZWdhdGlvbiBpcyBhcHBsaWNhYmxl LCBhbmQgaWYgc28sIHNldCB1cAorCSAqIHJvb3QtPmFnZ19jbGF1c2VfbGlzdCBhbmQgcm9vdC0+ Z3JvdXBfZXhwcl9saXN0LgorCSAqLworCXNldHVwX2VhZ2VyX2FnZ3JlZ2F0aW9uKHJvb3QpOwor CiAJLyoKIAkgKiBOb3cgZXhwYW5kIGFwcGVuZHJlbHMgYnkgYWRkaW5nICJvdGhlcnJlbHMiIGZv ciB0aGVpciBjaGlsZHJlbi4gIFdlCiAJICogZGVsYXkgdGhpcyB0byB0aGUgZW5kIHNvIHRoYXQg d2UgaGF2ZSBhcyBtdWNoIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jCmluZGV4IDQ2YzI1OGJlMjguLmFhNzY0MWQxMzMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3RhYmxlcy5jCkBAIC05MjksNiArOTI5LDE2IEBAIHN0cnVjdCBjb25maWdfYm9v bCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCWZhbHNlLAogCQlOVUxMLCBOVUxMLCBOVUxMCiAJ fSwKKwl7CisJCXsiZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSIsIFBHQ19VU0VSU0VULCBRVUVSWV9U VU5JTkdfTUVUSE9ELAorCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIGVhZ2VyIGFnZ3JlZ2F0aW9u LiIpLAorCQkJTlVMTCwKKwkJCUdVQ19FWFBMQUlOCisJCX0sCisJCSZlbmFibGVfZWFnZXJfYWdn cmVnYXRlLAorCQlmYWxzZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCiAJewogCQl7ImVuYWJs ZV9wYXJhbGxlbF9hcHBlbmQiLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKIAkJ CWdldHRleHRfbm9vcCgiRW5hYmxlcyB0aGUgcGxhbm5lcidzIHVzZSBvZiBwYXJhbGxlbCBhcHBl bmQgcGxhbnMuIiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5z YW1wbGUKaW5kZXggZTA1NjdkZTIxOS4uOTYxZThjM2Y5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNDEzLDYgKzQxMyw3IEBACiAjZW5h YmxlX3NvcnQgPSBvbgogI2VuYWJsZV90aWRzY2FuID0gb24KICNlbmFibGVfZ3JvdXBfYnlfcmVv cmRlcmluZyA9IG9uCisjZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSA9IG9mZgogCiAjIC0gUGxhbm5l ciBDb3N0IENvbnN0YW50cyAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggMThkMWFlOGNiYy4u NjgzYWI1MWU2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTM4Niw2ICszODYsMTIgQEAgc3Ry dWN0IFBsYW5uZXJJbmZvCiAJLyogbGlzdCBvZiBQbGFjZUhvbGRlckluZm9zICovCiAJTGlzdAkg ICAqcGxhY2Vob2xkZXJfbGlzdDsKIAorCS8qIGxpc3Qgb2YgQWdnQ2xhdXNlSW5mb3MgKi8KKwlM aXN0CSAgICphZ2dfY2xhdXNlX2xpc3Q7CisKKwkvKiBMaXN0IG9mIEdyb3VwRXhwckluZm9zICov CisJTGlzdAkgICAqZ3JvdXBfZXhwcl9saXN0OworCiAJLyogYXJyYXkgb2YgUGxhY2VIb2xkZXJJ bmZvcyBpbmRleGVkIGJ5IHBoaWQgKi8KIAlzdHJ1Y3QgUGxhY2VIb2xkZXJJbmZvICoqcGxhY2Vo b2xkZXJfYXJyYXkgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlLCBhcnJheV9zaXplKHBs YWNlaG9sZGVyX2FycmF5X3NpemUpKTsKIAkvKiBhbGxvY2F0ZWQgc2l6ZSBvZiBhcnJheSAqLwpA QCAtMzIxOSw2ICszMjI1LDQxIEBAIHR5cGVkZWYgc3RydWN0IE1pbk1heEFnZ0luZm8KIAlQYXJh bQkgICAqcGFyYW07CiB9IE1pbk1heEFnZ0luZm87CiAKKy8qCisgKiBUaGUgYWdncmVnYXRlIGV4 cHJlc3Npb25zIHRoYXQgYXBwZWFyIGluIHRhcmdldGxpc3QgYW5kIGhhdmluZyBjbGF1c2VzCisg Ki8KK3R5cGVkZWYgc3RydWN0IEFnZ0NsYXVzZUluZm8KK3sKKwlwZ19ub2RlX2F0dHIobm9fcmVh ZCwgbm9fcXVlcnlfanVtYmxlKQorCisJTm9kZVRhZwkJdHlwZTsKKworCS8qIHRoZSBBZ2dyZWYg ZXhwciAqLworCUFnZ3JlZgkgICAqYWdncmVmOworCisJLyogbG93ZXN0IGxldmVsIHdlIGNhbiBl dmFsdWF0ZSB0aGlzIGFnZ3JlZ2F0ZSBhdCAqLworCVJlbGlkcwkJYWdnX2V2YWxfYXQ7Cit9IEFn Z0NsYXVzZUluZm87CisKKy8qCisgKiBUaGUgZ3JvdXBpbmcgZXhwcmVzc2lvbnMgdGhhdCBhcHBl YXIgaW4gZ3JvdXBpbmcgY2xhdXNlcworICovCit0eXBlZGVmIHN0cnVjdCBHcm91cEV4cHJJbmZv Cit7CisJcGdfbm9kZV9hdHRyKG5vX3JlYWQsIG5vX3F1ZXJ5X2p1bWJsZSkKKworCU5vZGVUYWcJ CXR5cGU7CisKKwkvKiB0aGUgcmVwcmVzZW50ZWQgZXhwcmVzc2lvbiAqLworCUV4cHIJICAgKmV4 cHI7CisKKwkvKiB0aGUgdGxlU29ydEdyb3VwUmVmIG9mIHRoZSBjb3JyZXNwb25kaW5nIFNvcnRH cm91cENsYXVzZSAqLworCUluZGV4CQlzb3J0Z3JvdXByZWY7CisKKwkvKiBidHJlZSBvcGZhbWls eSBkZWZpbmluZyB0aGUgb3JkZXJpbmcgKi8KKwlPaWQJCQlidHJlZV9vcGZhbWlseTsKK30gR3Jv dXBFeHBySW5mbzsKKwogLyoKICAqIEF0IHJ1bnRpbWUsIFBBUkFNX0VYRUMgc2xvdHMgYXJlIHVz ZWQgdG8gcGFzcyB2YWx1ZXMgYXJvdW5kIGZyb20gb25lIHBsYW4KICAqIG5vZGUgdG8gYW5vdGhl ci4gIFRoZXkgY2FuIGJlIHVzZWQgdG8gcGFzcyB2YWx1ZXMgZG93biBpbnRvIHN1YnF1ZXJpZXMg KGZvcgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggYi9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRleCA1ZTg4YzAyMjRhLi5kODE5OTMzM2M5IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAorKysgYi9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvcGF0aHMuaApAQCAtMjEsNiArMjEsNyBAQAogICogYWxscGF0aHMuYwogICovCiBl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfZ2VxbzsKK2V4dGVybiBQR0RMTElNUE9SVCBi b29sIGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGU7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IGdlcW9f dGhyZXNob2xkOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nh bl9zaXplOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9z aXplOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmggYi9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaAppbmRleCBhYWZjMTczNzkyLi5jZWRjZDg4ZWJm IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaAorKysgYi9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaApAQCAtNzIsNiArNzIsNyBAQCBleHRlcm4gdm9p ZCBhZGRfb3RoZXJfcmVsc190b19xdWVyeShQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4gdm9p ZCBidWlsZF9iYXNlX3JlbF90bGlzdHMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmZpbmFsX3Rs aXN0KTsKIGV4dGVybiB2b2lkIGFkZF92YXJzX3RvX3RhcmdldGxpc3QoUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKnZhcnMsCiAJCQkJCQkJCSAgIFJlbGlkcyB3aGVyZV9uZWVkZWQpOworZXh0ZXJu IHZvaWQgc2V0dXBfZWFnZXJfYWdncmVnYXRpb24oUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJu IHZvaWQgZmluZF9sYXRlcmFsX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJu IHZvaWQgY3JlYXRlX2xhdGVyYWxfam9pbl9pbmZvKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVy biBMaXN0ICpkZWNvbnN0cnVjdF9qb2ludHJlZShQbGFubmVySW5mbyAqcm9vdCk7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IGRiZmQwYzEzZDQuLjVlMmIxOWQ2OTMg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xMzYsNiArMTM2LDcg QEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2Ug J2VuYWJsZSUnOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tCiAg ZW5hYmxlX2FzeW5jX2FwcGVuZCAgICAgICAgICAgIHwgb24KICBlbmFibGVfYml0bWFwc2NhbiAg ICAgICAgICAgICAgfCBvbgorIGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgICAgICAgICB8IG9mZgog IGVuYWJsZV9nYXRoZXJtZXJnZSAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2dyb3VwX2J5X3Jl b3JkZXJpbmcgICAgIHwgb24KICBlbmFibGVfaGFzaGFnZyAgICAgICAgICAgICAgICAgfCBvbgpA QCAtMTU2LDcgKzE1Nyw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mg d2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAg ICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3Rp ZHNjYW4gICAgICAgICAgICAgICAgIHwgb24KLSgyMiByb3dzKQorKDIzIHJvd3MpCiAKIC0tIFRo ZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBkZXNjcmlwdGlvbnMgZm9yIHZhcmlvdXMgdHlwZXMu CiBzZWxlY3QgdHlwZSwgY291bnQoKikgPiAwIGFzIG9rIEZST00gcGdfd2FpdF9ldmVudHMKLS0g CjIuNDMuMAoK --000000000000b2a431061ac0ff96 Content-Type: application/octet-stream; name="v8-0004-Implement-functions-that-create-RelAggInfos-if-applicable.patch" Content-Disposition: attachment; filename="v8-0004-Implement-functions-that-create-RelAggInfos-if-applicable.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxcz770o3 RnJvbSA1YTJmMTFkYWMwYmZhMzAxZDliYjg1YTI1YWRlN2NlOGNlNTQzMDI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNjowNDo0MSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjgg NC85XSBJbXBsZW1lbnQgZnVuY3Rpb25zIHRoYXQgY3JlYXRlIFJlbEFnZ0luZm9zIGlmCiBhcHBs aWNhYmxlCgpUaGlzIGNvbW1pdCBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbnMgdGhhdCBjaGVjayBp ZiBlYWdlciBhZ2dyZWdhdGlvbiBpcwphcHBsaWNhYmxlIGZvciBhIGdpdmVuIHJlbGF0aW9uLCBh bmQgaWYgc28sIGNyZWF0ZSBSZWxBZ2dJbmZvIHN0cnVjdHVyZQpmb3IgdGhlIHJlbGF0aW9uLCB1 c2luZyB0aGUgaW5mb3MgYWJvdXQgYWdncmVnYXRlIGV4cHJlc3Npb25zIGFuZApncm91cGluZyBl eHByZXNzaW9ucyB3ZSBjb2xsZWN0ZWQgZWFybGllci4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9lcXVpdmNsYXNzLmMgfCAgMjYgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2luaXRzcGxhbi5jICB8ICAyNCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1h aW4uYyAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyAgICB8 IDY0NyArKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxm dW5jcy5jICAgICAgICB8ICAgNSArLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAg ICAgICAgIHwgIDExICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAgICAgICAg fCAgIDUgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggICAgICAgICAgIHwgICAzICst CiA4IGZpbGVzIGNoYW5nZWQsIDcwNCBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMKaW5kZXggNTFkODA2MzI2ZS4uZDg3 MTM5NmUyMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZjbGFz cy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYwpAQCAtMjQ0 MywxNSArMjQ0MywxNyBAQCBmaW5kX2pvaW5fZG9tYWluKFBsYW5uZXJJbmZvICpyb290LCBSZWxp ZHMgcmVsaWRzKQogICoJICBEZXRlY3Qgd2hldGhlciB0d28gZXhwcmVzc2lvbnMgYXJlIGtub3du IGVxdWFsIGR1ZSB0byBlcXVpdmFsZW5jZQogICoJICByZWxhdGlvbnNoaXBzLgogICoKLSAqIEFj dHVhbGx5LCB0aGlzIG9ubHkgc2hvd3MgdGhhdCB0aGUgZXhwcmVzc2lvbnMgYXJlIGVxdWFsIGFj Y29yZGluZwotICogdG8gc29tZSBvcGZhbWlseSdzIG5vdGlvbiBvZiBlcXVhbGl0eSAtLS0gYnV0 IHdlIG9ubHkgdXNlIGl0IGZvcgotICogc2VsZWN0aXZpdHkgZXN0aW1hdGlvbiwgc28gYSBmdXp6 eSBpZGVhIG9mIGVxdWFsaXR5IGlzIE9LLgorICogSWYgb3BmYW1pbHkgaXMgZ2l2ZW4sIHRoZSBl eHByZXNzaW9ucyBtdXN0IGJlIGtub3duIGVxdWFsIHBlciB0aGUgc2VtYW50aWNzCisgKiBvZiB0 aGF0IG9wZmFtaWx5IChub3RlIGl0IGhhcyB0byBiZSBhIGJ0cmVlIG9wZmFtaWx5LCBzaW5jZSB0 aG9zZSBhcmUgdGhlCisgKiBvbmx5IG9wZmFtaWxpZXMgZXF1aXZjbGFzcy5jIGRlYWxzIHdpdGgp LiAgSWYgb3BmYW1pbHkgaXMgSW52YWxpZE9pZCwgd2UnbGwKKyAqIHJldHVybiB0cnVlIGlmIHRo ZXkncmUgZXF1YWwgYWNjb3JkaW5nIHRvIGFueSBvcGZhbWlseSwgd2hpY2ggaXMgZnV6enkgYnV0 CisgKiBPSyBmb3IgZXN0aW1hdGlvbiBwdXJwb3Nlcy4KICAqCiAgKiBOb3RlOiBkb2VzIG5vdCBi b3RoZXIgdG8gY2hlY2sgZm9yICJlcXVhbChpdGVtMSwgaXRlbTIpIjsgY2FsbGVyIG11c3QKICAq IGNoZWNrIHRoYXQgY2FzZSBpZiBpdCdzIHBvc3NpYmxlIHRvIHBhc3MgaWRlbnRpY2FsIGl0ZW1z LgogICovCiBib29sCi1leHByc19rbm93bl9lcXVhbChQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAq aXRlbTEsIE5vZGUgKml0ZW0yKQorZXhwcnNfa25vd25fZXF1YWwoUGxhbm5lckluZm8gKnJvb3Qs IE5vZGUgKml0ZW0xLCBOb2RlICppdGVtMiwgT2lkIG9wZmFtaWx5KQogewogCUxpc3RDZWxsICAg KmxjMTsKIApAQCAtMjQ2Niw2ICsyNDY4LDE3IEBAIGV4cHJzX2tub3duX2VxdWFsKFBsYW5uZXJJ bmZvICpyb290LCBOb2RlICppdGVtMSwgTm9kZSAqaXRlbTIpCiAJCWlmIChlYy0+ZWNfaGFzX3Zv bGF0aWxlKQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogSXQncyBva2F5IHRvIGNvbnNpZGVy IGVjX2Jyb2tlbiBFQ3MgaGVyZS4gIEJyb2tlbm5lc3MganVzdCBtZWFucyB3ZQorCQkgKiBjb3Vs ZG4ndCBkZXJpdmUgYWxsIHRoZSBpbXBsaWVkIGNsYXVzZXMgd2UnZCBoYXZlIGxpa2VkIHRvOyBp dCBkb2VzCisJCSAqIG5vdCBpbnZhbGlkYXRlIG91ciBrbm93bGVkZ2UgdGhhdCB0aGUgbWVtYmVy cyBhcmUgZXF1YWwuCisJCSAqLworCisJCS8qIElnbm9yZSBpZiB0aGlzIEVDIGRvZXNuJ3QgdXNl IHNwZWNpZmllZCBvcGZhbWlseSAqLworCQlpZiAoT2lkSXNWYWxpZChvcGZhbWlseSkgJiYKKwkJ CSFsaXN0X21lbWJlcl9vaWQoZWMtPmVjX29wZmFtaWxpZXMsIG9wZmFtaWx5KSkKKwkJCWNvbnRp bnVlOworCiAJCWZvcmVhY2gobGMyLCBlYy0+ZWNfbWVtYmVycykKIAkJewogCQkJRXF1aXZhbGVu Y2VNZW1iZXIgKmVtID0gKEVxdWl2YWxlbmNlTWVtYmVyICopIGxmaXJzdChsYzIpOwpAQCAtMjQ5 NCw4ICsyNTA3LDcgQEAgZXhwcnNfa25vd25fZXF1YWwoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUg Kml0ZW0xLCBOb2RlICppdGVtMikKICAqIChJbiBwcmluY2lwbGUgdGhlcmUgbWlnaHQgYmUgbW9y ZSB0aGFuIG9uZSBtYXRjaGluZyBlY2xhc3MgaWYgbXVsdGlwbGUKICAqIGNvbGxhdGlvbnMgYXJl IGludm9sdmVkLCBidXQgc2luY2UgY29sbGF0aW9uIGRvZXNuJ3QgbWF0dGVyIGZvciBlcXVhbGl0 eSwKICAqIHdlIGlnbm9yZSB0aGF0IGZpbmUgcG9pbnQgaGVyZS4pICBUaGlzIGlzIG11Y2ggbGlr ZSBleHByc19rbm93bl9lcXVhbCwKLSAqIGV4Y2VwdCB0aGF0IHdlIGluc2lzdCBvbiB0aGUgY29t cGFyaXNvbiBvcGVyYXRvciBtYXRjaGluZyB0aGUgZWNsYXNzLCBzbwotICogdGhhdCB0aGUgcmVz dWx0IGlzIGRlZmluaXRlIG5vdCBhcHByb3hpbWF0ZS4KKyAqIGV4Y2VwdCBmb3IgdGhlIGZvcm1h dCBvZiB0aGUgaW5wdXQuCiAgKgogICogT24gc3VjY2Vzcywgd2UgYWxzbyBzZXQgZmtpbmZvLT5l Y2xhc3NbY29sbm9dIHRvIHRoZSBtYXRjaGluZyBlY2xhc3MsCiAgKiBhbmQgc2V0IGZraW5mby0+ ZmtfZWNsYXNzX21lbWJlcltjb2xub10gdG8gdGhlIGVjbGFzcyBtZW1iZXIgZm9yIHRoZQpAQCAt MjUzNiw3ICsyNTQ4LDcgQEAgbWF0Y2hfZWNsYXNzZXNfdG9fZm9yZWlnbl9rZXlfY29sKFBsYW5u ZXJJbmZvICpyb290LAogCQkvKiBOZXZlciBtYXRjaCB0byBhIHZvbGF0aWxlIEVDICovCiAJCWlm IChlYy0+ZWNfaGFzX3ZvbGF0aWxlKQogCQkJY29udGludWU7Ci0JCS8qIE5vdGU6IGl0IHNlZW1z IG9rYXkgdG8gbWF0Y2ggdG8gImJyb2tlbiIgZWNsYXNzZXMgaGVyZSAqLworCQkvKiBJdCdzIG9r YXkgdG8gY29uc2lkZXIgImJyb2tlbiIgRUNzIGhlcmUsIHNlZSBleHByc19rbm93bl9lcXVhbCAq LwogCiAJCWZvcmVhY2gobGMyLCBlYy0+ZWNfbWVtYmVycykKIAkJewpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9pbml0c3BsYW4uYwppbmRleCAwMjgxMzM2NDY5Li40ZjMwYWZkNjE1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYworKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYwpAQCAtMzgxLDggKzM4MSw4IEBAIHNldHVw X2VhZ2VyX2FnZ3JlZ2F0aW9uKFBsYW5uZXJJbmZvICpyb290KQogCQlyZXR1cm47CiAKIAkvKgot CSAqIENvbGxlY3QgYWdncmVnYXRlIGV4cHJlc3Npb25zIHRoYXQgYXBwZWFyIGluIHRhcmdldGxp c3QgYW5kIGhhdmluZwotCSAqIGNsYXVzZXMuCisJICogQ29sbGVjdCBhZ2dyZWdhdGUgZXhwcmVz c2lvbnMgYW5kIHBsYWluIFZhcnMgdGhhdCBhcHBlYXIgaW4gdGFyZ2V0bGlzdAorCSAqIGFuZCBo YXZpbmcgY2xhdXNlcy4KIAkgKi8KIAljcmVhdGVfYWdnX2NsYXVzZV9pbmZvcyhyb290KTsKIApA QCAtNDAwLDEwICs0MDAsOSBAQCBzZXR1cF9lYWdlcl9hZ2dyZWdhdGlvbihQbGFubmVySW5mbyAq cm9vdCkKIH0KIAogLyoKLSAqIENyZWF0ZSBBZ2dDbGF1c2VJbmZvIGZvciBlYWNoIGFnZ3JlZ2F0 ZS4KLSAqCi0gKiBJZiBhbnkgYWdncmVnYXRlIGlzIG5vdCBzdWl0YWJsZSwgc2V0IHJvb3QtPmFn Z19jbGF1c2VfbGlzdCB0byBOSUwgYW5kCi0gKiByZXR1cm4uCisgKiBjcmVhdGVfYWdnX2NsYXVz ZV9pbmZvcworICoJICBTZWFyY2ggdGhlIHRhcmdldGxpc3QgYW5kIGhhdmluZ1F1YWwgZm9yIEFn Z3JlZnMgYW5kIHBsYWluIFZhcnMsIGFuZAorICoJICBjcmVhdGUgYW4gQWdnQ2xhdXNlSW5mbyBm b3IgZWFjaCBBZ2dyZWYgbm9kZS4KICAqLwogc3RhdGljIHZvaWQKIGNyZWF0ZV9hZ2dfY2xhdXNl X2luZm9zKFBsYW5uZXJJbmZvICpyb290KQpAQCAtNDEyLDYgKzQxMSw3IEBAIGNyZWF0ZV9hZ2df Y2xhdXNlX2luZm9zKFBsYW5uZXJJbmZvICpyb290KQogCUxpc3RDZWxsICAgKmxjOwogCiAJQXNz ZXJ0KHJvb3QtPmFnZ19jbGF1c2VfbGlzdCA9PSBOSUwpOworCUFzc2VydChyb290LT50bGlzdF92 YXJzID09IE5JTCk7CiAKIAl0bGlzdF9leHBycyA9IHB1bGxfdmFyX2NsYXVzZSgoTm9kZSAqKSBy b290LT5wcm9jZXNzZWRfdGxpc3QsCiAJCQkJCQkJCSAgUFZDX0lOQ0xVREVfQUdHUkVHQVRFUyB8 CkBAIC00NTUsMTAgKzQ1NSwxMyBAQCBjcmVhdGVfYWdnX2NsYXVzZV9pbmZvcyhQbGFubmVySW5m byAqcm9vdCkKIAkJQWdnQ2xhdXNlSW5mbyAqYWNfaW5mbzsKIAogCQkvKgotCQkgKiB0bGlzdF9l eHBycyBtYXkgYWxzbyBjb250YWluIFZhcnMsIGJ1dCB3ZSBvbmx5IG5lZWQgQWdncmVmcy4KKwkJ ICogY29sbGVjdCBwbGFpbiBWYXJzIGZvciBmdXR1cmUgcmVmZXJlbmNlCiAJCSAqLwogCQlpZiAo SXNBKGV4cHIsIFZhcikpCisJCXsKKwkJCXJvb3QtPnRsaXN0X3ZhcnMgPSBsaXN0X2FwcGVuZF91 bmlxdWUocm9vdC0+dGxpc3RfdmFycywgZXhwcik7CiAJCQljb250aW51ZTsKKwkJfQogCiAJCWFn Z3JlZiA9IGNhc3ROb2RlKEFnZ3JlZiwgZXhwcik7CiAKQEAgLTQ3NywxMCArNDgwLDExIEBAIGNy ZWF0ZV9hZ2dfY2xhdXNlX2luZm9zKFBsYW5uZXJJbmZvICpyb290KQogfQogCiAvKgotICogQ3Jl YXRlIEdyb3VwRXhwckluZm8gZm9yIGVhY2ggZXhwcmVzc2lvbiB1c2FibGUgYXMgZ3JvdXBpbmcg a2V5LgorICogY3JlYXRlX2dyb3VwaW5nX2V4cHJfaW5mb3MKKyAqCSAgQ3JlYXRlIEdyb3VwRXhw ckluZm8gZm9yIGVhY2ggZXhwcmVzc2lvbiB1c2FibGUgYXMgZ3JvdXBpbmcga2V5LgogICoKLSAq IElmIGFueSBncm91cGluZyBleHByZXNzaW9uIGlzIG5vdCBzdWl0YWJsZSwgc2V0IHJvb3QtPmdy b3VwX2V4cHJfbGlzdCB0byBOSUwKLSAqIGFuZCByZXR1cm4uCisgKiBJZiBhbnkgZ3JvdXBpbmcg ZXhwcmVzc2lvbiBpcyBub3Qgc3VpdGFibGUsIHdlIHdpbGwganVzdCByZXR1cm4gd2l0aAorICog cm9vdC0+Z3JvdXBfZXhwcl9saXN0IGJlaW5nIE5JTC4KICAqLwogc3RhdGljIHZvaWQKIGNyZWF0 ZV9ncm91cGluZ19leHByX2luZm9zKFBsYW5uZXJJbmZvICpyb290KQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3BsYW5tYWluLmMKaW5kZXggNWQyYmNhOTE0Yi4uZWNlNjkzNmUyMyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jCkBAIC02Nyw2ICs2Nyw5IEBAIHF1ZXJ5X3BsYW5u ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJcm9vdC0+am9pbl9yZWxfbGlzdCA9IG1ha2VOb2RlKFJl bEluZm9MaXN0KTsKIAlyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyA9IE5JTDsKIAlyb290LT5q b2luX3JlbF9saXN0LT5oYXNoID0gTlVMTDsKKwlyb290LT5hZ2dfaW5mb19saXN0ID0gbWFrZU5v ZGUoUmVsSW5mb0xpc3QpOworCXJvb3QtPmFnZ19pbmZvX2xpc3QtPml0ZW1zID0gTklMOworCXJv b3QtPmFnZ19pbmZvX2xpc3QtPmhhc2ggPSBOVUxMOwogCXJvb3QtPmpvaW5fcmVsX2xldmVsID0g TlVMTDsKIAlyb290LT5qb2luX2N1cl9sZXZlbCA9IDA7CiAJcm9vdC0+Y2Fub25fcGF0aGtleXMg PSBOSUw7CkBAIC03OSw2ICs4Miw3IEBAIHF1ZXJ5X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3Qs CiAJcm9vdC0+cGxhY2Vob2xkZXJfYXJyYXlfc2l6ZSA9IDA7CiAJcm9vdC0+YWdnX2NsYXVzZV9s aXN0ID0gTklMOwogCXJvb3QtPmdyb3VwX2V4cHJfbGlzdCA9IE5JTDsKKwlyb290LT50bGlzdF92 YXJzID0gTklMOwogCXJvb3QtPmZrZXlfbGlzdCA9IE5JTDsKIAlyb290LT5pbml0aWFsX3JlbHMg PSBOSUw7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCA4NDIwYjg5MzZl Li4yN2Y3NzlkNzc4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxu b2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC04Nyw2 ICs4NywxNSBAQCBzdGF0aWMgdm9pZCBidWlsZF9jaGlsZF9qb2luX3JlbHRhcmdldChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCSAgIFJlbE9wdEluZm8gKmNoaWxkcmVsLAogCQkJCQkJCQkJ ICAgaW50IG5hcHBpbmZvcywKIAkJCQkJCQkJCSAgIEFwcGVuZFJlbEluZm8gKiphcHBpbmZvcyk7 CitzdGF0aWMgYm9vbCBlYWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVsYXRpb24oUGxh bm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsKTsKK3N0YXRpYyBi b29sIGluaXRfZ3JvdXBpbmdfdGFyZ2V0cyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsLAorCQkJCQkJCQkgIFBhdGhUYXJnZXQgKnRhcmdldCwgUGF0aFRhcmdldCAqYWdnX2lucHV0 LAorCQkJCQkJCQkgIExpc3QgKipncm91cF9leHByc19leHRyYV9wKTsKK3N0YXRpYyBib29sIGlz X3Zhcl9pbl9hZ2dyZWZfb25seShQbGFubmVySW5mbyAqcm9vdCwgVmFyICp2YXIpOworc3RhdGlj IGJvb2wgaXNfdmFyX25lZWRlZF9ieV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhciwg UmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJCQkgIGJvb2wgKnNhZmVfdG9fcHVzaCk7CitzdGF0aWMg SW5kZXggZ2V0X2V4cHJlc3Npb25fc29ydGdyb3VwcmVmKFBsYW5uZXJJbmZvICpyb290LCBFeHBy ICpleHByKTsKIAogCiAvKgpAQCAtNjQ3LDYgKzY1Niw1OCBAQCBhZGRfam9pbl9yZWwoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwpCiAJYWRkX3JlbF9pbmZvKHJvb3QtPmpv aW5fcmVsX2xpc3QsIGpvaW5yZWwpOwogfQogCisvKgorICogYWRkX2dyb3VwZWRfcmVsCisgKgkJ QWRkIGdyb3VwZWQgYmFzZSBvciBqb2luIHJlbGF0aW9uIHRvIHRoZSBsaXN0IG9mIGdyb3VwZWQg cmVsYXRpb25zIGluCisgKgkJdGhlIGdpdmVuIFBsYW5uZXJJbmZvLiAgQWxzbyBhZGQgdGhlIGNv cnJlc3BvbmRpbmcgUmVsQWdnSW5mbyB0bworICoJCXJvb3QtPmFnZ19pbmZvX2xpc3QuCisgKi8K K3ZvaWQKK2FkZF9ncm91cGVkX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LCBSZWxBZ2dJbmZvICphZ2dfaW5mbykKK3sKKwlhZGRfcmVsX2luZm8oJnJvb3QtPnVwcGVyX3Jl bHNbVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9BR0ddLCByZWwpOworCWFkZF9yZWxfaW5mbyhyb290 LT5hZ2dfaW5mb19saXN0LCBhZ2dfaW5mbyk7Cit9CisKKy8qCisgKiBmaW5kX2dyb3VwZWRfcmVs CisgKgkgIFJldHVybnMgZ3JvdXBlZCByZWxhdGlvbiBlbnRyeSAoYmFzZSBvciBqb2luIHJlbGF0 aW9uKSBjb3JyZXNwb25kaW5nIHRvCisgKgkgICdyZWxpZHMnIG9yIE5VTEwgaWYgbm9uZSBleGlz dHMuCisgKgorICogSWYgYWdnX2luZm9fcCBpcyBub3QgTlVMTCwgdGhlbiBhbHNvIHRoZSBjb3Jy ZXNwb25kaW5nIFJlbEFnZ0luZm8gKGlmIG9uZQorICogZXhpc3RzKSB3aWxsIGJlIHJldHVybmVk IGluICphZ2dfaW5mb19wLgorICovCitSZWxPcHRJbmZvICoKK2ZpbmRfZ3JvdXBlZF9yZWwoUGxh bm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMsIFJlbEFnZ0luZm8gKiphZ2dfaW5mb19wKQor eworCVJlbE9wdEluZm8gKnJlbDsKKworCXJlbCA9IChSZWxPcHRJbmZvICopIGZpbmRfcmVsX2lu Zm8oJnJvb3QtPnVwcGVyX3JlbHNbVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9BR0ddLAorCQkJCQkJ CQkJICAgcmVsaWRzKTsKKwlpZiAocmVsID09IE5VTEwpCisJeworCQlpZiAoYWdnX2luZm9fcCkK KwkJCSphZ2dfaW5mb19wID0gTlVMTDsKKworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBhbHNv IHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBSZWxBZ2dJbmZvLCBpZiBhc2tlZCAqLworCWlmIChh Z2dfaW5mb19wKQorCXsKKwkJUmVsQWdnSW5mbyAqYWdnX2luZm87CisKKwkJYWdnX2luZm8gPSAo UmVsQWdnSW5mbyAqKSBmaW5kX3JlbF9pbmZvKHJvb3QtPmFnZ19pbmZvX2xpc3QsIHJlbGlkcyk7 CisKKwkJLyogVGhlIHJlbGF0aW9uIGV4aXN0cywgc28gdGhlIGFnZ19pbmZvIHNob3VsZCBiZSB0 aGVyZSB0b28uICovCisJCUFzc2VydChhZ2dfaW5mbyAhPSBOVUxMKTsKKworCQkqYWdnX2luZm9f cCA9IGFnZ19pbmZvOworCX0KKworCXJldHVybiByZWw7Cit9CisKIC8qCiAgKiBzZXRfZm9yZWln bl9yZWxfcHJvcGVydGllcwogICoJCVNldCB1cCBmb3JlaWduLWpvaW4gZmllbGRzIGlmIG91dGVy IGFuZCBpbm5lciByZWxhdGlvbiBhcmUgZm9yZWlnbgpAQCAtMjQ4MywzICsyNTQ0LDU4OSBAQCBi dWlsZF9jaGlsZF9qb2luX3JlbHRhcmdldChQbGFubmVySW5mbyAqcm9vdCwKIAljaGlsZHJlbC0+ cmVsdGFyZ2V0LT5jb3N0LnBlcl90dXBsZSA9IHBhcmVudHJlbC0+cmVsdGFyZ2V0LT5jb3N0LnBl cl90dXBsZTsKIAljaGlsZHJlbC0+cmVsdGFyZ2V0LT53aWR0aCA9IHBhcmVudHJlbC0+cmVsdGFy Z2V0LT53aWR0aDsKIH0KKworLyoKKyAqIGNyZWF0ZV9yZWxfYWdnX2luZm8KKyAqCSAgQ2hlY2sg aWYgdGhlIGdpdmVuIHJlbGF0aW9uIGNhbiBwcm9kdWNlIGdyb3VwZWQgcGF0aHMgYW5kIHJldHVy biB0aGUKKyAqCSAgaW5mb3JtYXRpb24gaXQnbGwgbmVlZCBmb3IgaXQuICBUaGUgZ2l2ZW4gcmVs YXRpb24gaXMgdGhlIG5vbi1ncm91cGVkIG9uZQorICoJICB3aGljaCBoYXMgdGhlIHJlbHRhcmdl dCBhbHJlYWR5IGNvbnN0cnVjdGVkLgorICovCitSZWxBZ2dJbmZvICoKK2NyZWF0ZV9yZWxfYWdn X2luZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwlMaXN0Q2VsbCAg ICpsYzsKKwlSZWxBZ2dJbmZvICpyZXN1bHQ7CisJUGF0aFRhcmdldCAqYWdnX2lucHV0OworCVBh dGhUYXJnZXQgKnRhcmdldDsKKwlMaXN0CSAgICpncnBfZXhwcnNfZXh0cmEgPSBOSUw7CisJTGlz dAkgICAqZ3JvdXBfY2xhdXNlc19maW5hbDsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBUaGUgbGlz dHMgb2YgYWdncmVnYXRlIGV4cHJlc3Npb25zIGFuZCBncm91cGluZyBleHByZXNzaW9ucyBzaG91 bGQgaGF2ZQorCSAqIGJlZW4gY29uc3RydWN0ZWQuCisJICovCisJQXNzZXJ0KHJvb3QtPmFnZ19j bGF1c2VfbGlzdCAhPSBOSUwpOworCUFzc2VydChyb290LT5ncm91cF9leHByX2xpc3QgIT0gTklM KTsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIGNoaWxkIHJlbCwgdGhlIGdyb3VwZWQgcmVsIGZv ciBpdHMgcGFyZW50IHJlbCBtdXN0IGhhdmUKKwkgKiBiZWVuIGNyZWF0ZWQgaWYgaXQgY2FuLiAg U28gd2UgY2FuIGp1c3QgdXNlIHBhcmVudCdzIFJlbEFnZ0luZm8gaWYgdGhlcmUKKwkgKiBpcyBv bmUsIHdpdGggYXBwcm9wcmlhdGUgdmFyaWFibGUgc3Vic3RpdHV0aW9ucy4KKwkgKi8KKwlpZiAo SVNfT1RIRVJfUkVMKHJlbCkpCisJeworCQlSZWxPcHRJbmZvCSAgICpyZWxfZ3JvdXBlZDsKKwkJ UmVsQWdnSW5mbwkgICAqYWdnX2luZm87CisKKwkJQXNzZXJ0KCFibXNfaXNfZW1wdHkocmVsLT50 b3BfcGFyZW50X3JlbGlkcykpOworCQlyZWxfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9yZWwocm9v dCwgcmVsLT50b3BfcGFyZW50X3JlbGlkcywgJmFnZ19pbmZvKTsKKworCQlpZiAocmVsX2dyb3Vw ZWQgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCisJCUFzc2VydChhZ2dfaW5mbyAhPSBOVUxM KTsKKwkJLyogTXVzdCBkbyBtdWx0aS1sZXZlbCB0cmFuc2Zvcm1hdGlvbiAqLworCQlhZ2dfaW5m byA9IChSZWxBZ2dJbmZvICopCisJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211bHRpbGV2ZWwo cm9vdCwKKwkJCQkJCQkJCQkJICAoTm9kZSAqKSBhZ2dfaW5mbywKKwkJCQkJCQkJCQkJICByZWws CisJCQkJCQkJCQkJCSAgcmVsLT50b3BfcGFyZW50KTsKKworCQlhZ2dfaW5mby0+aW5wdXRfcm93 cyA9IHJlbC0+cm93czsKKwkJYWdnX2luZm8tPmdyb3VwZWRfcm93cyA9CisJCQllc3RpbWF0ZV9u dW1fZ3JvdXBzKHJvb3QsIGFnZ19pbmZvLT5ncm91cF9leHBycywKKwkJCQkJCQkJYWdnX2luZm8t PmlucHV0X3Jvd3MsIE5VTEwsIE5VTEwpOworCisJCXJldHVybiBhZ2dfaW5mbzsKKwl9CisKKwkv KiBDaGVjayBpZiBpdCdzIHBvc3NpYmxlIHRvIHByb2R1Y2UgZ3JvdXBlZCBwYXRocyBmb3IgdGhp cyByZWxhdGlvbi4gKi8KKwlpZiAoIWVhZ2VyX2FnZ3JlZ2F0aW9uX3Bvc3NpYmxlX2Zvcl9yZWxh dGlvbihyb290LCByZWwpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogQ3JlYXRlIHRhcmdl dHMgZm9yIHRoZSBncm91cGVkIHBhdGhzIGFuZCBmb3IgdGhlIGlucHV0IHBhdGhzIG9mIHRoZQor CSAqIGdyb3VwZWQgcGF0aHMuCisJICovCisJdGFyZ2V0ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJn ZXQoKTsKKwlhZ2dfaW5wdXQgPSBjcmVhdGVfZW1wdHlfcGF0aHRhcmdldCgpOworCisJLyogaW5p dGlhbGl6ZSAndGFyZ2V0JyBhbmQgJ2FnZ19pbnB1dCcgKi8KKwlpZiAoIWluaXRfZ3JvdXBpbmdf dGFyZ2V0cyhyb290LCByZWwsIHRhcmdldCwgYWdnX2lucHV0LCAmZ3JwX2V4cHJzX2V4dHJhKSkK KwkJcmV0dXJuIE5VTEw7CisKKwkvKiBFYWdlciBhZ2dyZWdhdGlvbiBtYWtlcyBubyBzZW5zZSB3 L28gZ3JvdXBpbmcgZXhwcmVzc2lvbnMgKi8KKwlpZiAoKGxpc3RfbGVuZ3RoKHRhcmdldC0+ZXhw cnMpICsgbGlzdF9sZW5ndGgoZ3JwX2V4cHJzX2V4dHJhKSkgPT0gMCkKKwkJcmV0dXJuIE5VTEw7 CisKKwlncm91cF9jbGF1c2VzX2ZpbmFsID0gcm9vdC0+cGFyc2UtPmdyb3VwQ2xhdXNlOworCisJ LyoKKwkgKiBJZiB0aGUgYWdncmVnYXRpb24gdGFyZ2V0IHNob3VsZCBoYXZlIGV4dHJhIGdyb3Vw aW5nIGV4cHJlc3Npb25zIChpbgorCSAqIG9yZGVyIHRvIGVtaXQgaW5wdXQgdmFycyBmb3Igam9p biBjb25kaXRpb25zKSwgYWRkIHRoZW0gbm93LiBUaGlzIHN0ZXAKKwkgKiBpbmNsdWRlcyBhc3Np Z25tZW50IG9mIHRsZVNvcnRHcm91cFJlZidzIHdoaWNoIHdlIGNhbiBnZW5lcmF0ZSBub3cuCisJ ICovCisJaWYgKGxpc3RfbGVuZ3RoKGdycF9leHByc19leHRyYSkgPiAwKQorCXsKKwkJSW5kZXgJ CXNvcnRncm91cHJlZjsKKworCQkvKgorCQkgKiBNYWtlIGEgY29weSBvZiB0aGUgZ3JvdXAgY2xh dXNlcyBhcyB3ZSdsbCBuZWVkIHRvIGFkZCBzb21lIG1vcmUKKwkJICogY2xhdXNlcy4KKwkJICov CisJCWdyb3VwX2NsYXVzZXNfZmluYWwgPSBsaXN0X2NvcHkoZ3JvdXBfY2xhdXNlc19maW5hbCk7 CisKKwkJLyogZmluZCBvdXQgdGhlIGN1cnJlbnQgbWF4IHNvcnRncm91cHJlZiAqLworCQlzb3J0 Z3JvdXByZWYgPSAwOworCQlmb3JlYWNoKGxjLCByb290LT5wcm9jZXNzZWRfdGxpc3QpCisJCXsK KwkJCUluZGV4CQlyZWYgPSAoKFRhcmdldEVudHJ5ICopIGxmaXJzdChsYykpLT5yZXNzb3J0Z3Jv dXByZWY7CisKKwkJCWlmIChyZWYgPiBzb3J0Z3JvdXByZWYpCisJCQkJc29ydGdyb3VwcmVmID0g cmVmOworCQl9CisKKwkJLyoKKwkJICogR2VuZXJhdGUgdGhlIFNvcnRHcm91cENsYXVzZSdzIGFu ZCBhZGQgdGhlIGV4cHJlc3Npb25zIHRvIHRoZQorCQkgKiB0YXJnZXQuCisJCSAqLworCQlmb3Jl YWNoKGxjLCBncnBfZXhwcnNfZXh0cmEpCisJCXsKKwkJCVZhcgkJICAgKnZhciA9IGxmaXJzdF9u b2RlKFZhciwgbGMpOworCQkJU29ydEdyb3VwQ2xhdXNlICpjbCA9IG1ha2VOb2RlKFNvcnRHcm91 cENsYXVzZSk7CisKKwkJCS8qCisJCQkgKiBJbml0aWFsaXplIHRoZSBTb3J0R3JvdXBDbGF1c2Uu CisJCQkgKgorCQkJICogQXMgdGhlIGZpbmFsIGFnZ3JlZ2F0aW9uIHdpbGwgbm90IHVzZSB0aGlz IGdyb3VwaW5nIGV4cHJlc3Npb24sCisJCQkgKiB3ZSBkb24ndCBjYXJlIHdoZXRoZXIgc29ydG9w IGlzIDwgb3IgPi4gVGhlIHZhbHVlIG9mIG51bGxzX2ZpcnN0CisJCQkgKiBzaG91bGQgbm90IG1h dHRlciBmb3IgdGhlIHNhbWUgcmVhc29uLgorCQkJICovCisJCQljbC0+dGxlU29ydEdyb3VwUmVm ID0gKytzb3J0Z3JvdXByZWY7CisJCQlnZXRfc29ydF9ncm91cF9vcGVyYXRvcnModmFyLT52YXJ0 eXBlLAorCQkJCQkJCQkJIGZhbHNlLCB0cnVlLCBmYWxzZSwKKwkJCQkJCQkJCSAmY2wtPnNvcnRv cCwgJmNsLT5lcW9wLCBOVUxMLAorCQkJCQkJCQkJICZjbC0+aGFzaGFibGUpOworCQkJZ3JvdXBf Y2xhdXNlc19maW5hbCA9IGxhcHBlbmQoZ3JvdXBfY2xhdXNlc19maW5hbCwgY2wpOworCQkJYWRk X2NvbHVtbl90b19wYXRodGFyZ2V0KHRhcmdldCwgKEV4cHIgKikgdmFyLAorCQkJCQkJCQkJIGNs LT50bGVTb3J0R3JvdXBSZWYpOworCisJCQkvKgorCQkJICogVGhlIGFnZ3JlZ2F0aW9uIGlucHV0 IHRhcmdldCBtdXN0IGVtaXQgdGhpcyB2YXIgdG9vLgorCQkJICovCisJCQlhZGRfY29sdW1uX3Rv X3BhdGh0YXJnZXQoYWdnX2lucHV0LCAoRXhwciAqKSB2YXIsCisJCQkJCQkJCQkgY2wtPnRsZVNv cnRHcm91cFJlZik7CisJCX0KKwl9CisKKwkvKgorCSAqIEJ1aWxkIGEgbGlzdCBvZiBncm91cGlu ZyBleHByZXNzaW9ucyBhbmQgYSBsaXN0IG9mIHRoZSBjb3JyZXNwb25kaW5nCisJICogU29ydEdy b3VwQ2xhdXNlcy4KKwkgKi8KKwlpID0gMDsKKwlyZXN1bHQgPSBtYWtlTm9kZShSZWxBZ2dJbmZv KTsKKwlmb3JlYWNoKGxjLCB0YXJnZXQtPmV4cHJzKQorCXsKKwkJSW5kZXgJCXNvcnRncm91cHJl ZiA9IDA7CisJCVNvcnRHcm91cENsYXVzZSAqY2w7CisJCUV4cHIJICAgKnRleHByOworCisJCXRl eHByID0gKEV4cHIgKikgbGZpcnN0KGxjKTsKKworCQlBc3NlcnQoSXNBKHRleHByLCBWYXIpKTsK KworCQlzb3J0Z3JvdXByZWYgPSB0YXJnZXQtPnNvcnRncm91cHJlZnNbaSsrXTsKKwkJaWYgKHNv cnRncm91cHJlZiA9PSAwKQorCQkJY29udGludWU7CisKKwkJLyogZmluZCB0aGUgU29ydEdyb3Vw Q2xhdXNlIGluIGdyb3VwX2NsYXVzZXNfZmluYWwgKi8KKwkJY2wgPSBnZXRfc29ydGdyb3VwcmVm X2NsYXVzZShzb3J0Z3JvdXByZWYsIGdyb3VwX2NsYXVzZXNfZmluYWwpOworCisJCS8qIGRvIG5v dCBhZGQgdGhpcyBTb3J0R3JvdXBDbGF1c2UgaWYgaXQgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCAq LworCQlpZiAobGlzdF9tZW1iZXIocmVzdWx0LT5ncm91cF9jbGF1c2VzLCBjbCkpCisJCQljb250 aW51ZTsKKworCQlyZXN1bHQtPmdyb3VwX2NsYXVzZXMgPSBsYXBwZW5kKHJlc3VsdC0+Z3JvdXBf Y2xhdXNlcywgY2wpOworCQlyZXN1bHQtPmdyb3VwX2V4cHJzID0gbGlzdF9hcHBlbmRfdW5pcXVl KHJlc3VsdC0+Z3JvdXBfZXhwcnMsCisJCQkJCQkJCQkJCQkgdGV4cHIpOworCX0KKworCS8qCisJ ICogQ2FsY3VsYXRlIHBhdGhrZXlzIHRoYXQgcmVwcmVzZW50IHRoaXMgZ3JvdXBpbmcgcmVxdWly ZW1lbnRzLgorCSAqLworCXJlc3VsdC0+Z3JvdXBfcGF0aGtleXMgPQorCQltYWtlX3BhdGhrZXlz X2Zvcl9zb3J0Y2xhdXNlcyhyb290LCByZXN1bHQtPmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkg IG1ha2VfdGxpc3RfZnJvbV9wYXRodGFyZ2V0KHRhcmdldCkpOworCisJLyoKKwkgKiBBZGQgYWdn cmVnYXRlcyB0byB0aGUgZ3JvdXBpbmcgdGFyZ2V0LgorCSAqLworCWZvcmVhY2gobGMsIHJvb3Qt PmFnZ19jbGF1c2VfbGlzdCkKKwl7CisJCUFnZ0NsYXVzZUluZm8gKmFjX2luZm8gPSBsZmlyc3Rf bm9kZShBZ2dDbGF1c2VJbmZvLCBsYyk7CisJCUFnZ3JlZiAgICphZ2dyZWY7CisKKwkJQXNzZXJ0 KElzQShhY19pbmZvLT5hZ2dyZWYsIEFnZ3JlZikpOworCisJCWFnZ3JlZiA9IChBZ2dyZWYgKikg Y29weU9iamVjdChhY19pbmZvLT5hZ2dyZWYpOworCQltYXJrX3BhcnRpYWxfYWdncmVmKGFnZ3Jl ZiwgQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwpOworCisJCWFkZF9jb2x1bW5fdG9fcGF0aHRhcmdl dCh0YXJnZXQsIChFeHByICopIGFnZ3JlZiwgMCk7CisKKwkJcmVzdWx0LT5hZ2dfZXhwcnMgPSBs YXBwZW5kKHJlc3VsdC0+YWdnX2V4cHJzLCBhZ2dyZWYpOworCX0KKworCS8qCisJICogU2luY2Ug bmVpdGhlciB0YXJnZXQgbm9yIGFnZ19pbnB1dCBpcyBzdXBwb3NlZCB0byBiZSBpZGVudGljYWwg dG8gdGhlCisJICogc291cmNlIHJlbHRhcmdldCwgY29tcHV0ZSB0aGUgd2lkdGggYW5kIGNvc3Qg YWdhaW4uCisJICovCisJc2V0X3BhdGh0YXJnZXRfY29zdF93aWR0aChyb290LCB0YXJnZXQpOwor CXNldF9wYXRodGFyZ2V0X2Nvc3Rfd2lkdGgocm9vdCwgYWdnX2lucHV0KTsKKworCXJlc3VsdC0+ cmVsaWRzID0gYm1zX2NvcHkocmVsLT5yZWxpZHMpOworCXJlc3VsdC0+dGFyZ2V0ID0gdGFyZ2V0 OworCXJlc3VsdC0+YWdnX2lucHV0ID0gYWdnX2lucHV0OworCisJLyoKKwkgKiBUaGUgbnVtYmVy IG9mIGFnZ3JlZ2F0aW9uIGlucHV0IHJvd3MgaXMgc2ltcGx5IHRoZSBudW1iZXIgb2Ygcm93cyBv ZiB0aGUKKwkgKiBub24tZ3JvdXBlZCByZWxhdGlvbiwgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBl c3RpbWF0ZWQgYnkgbm93LgorCSAqLworCXJlc3VsdC0+aW5wdXRfcm93cyA9IHJlbC0+cm93czsK KworCS8qIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgZ3JvdXBzIHdpdGggZXF1YWwgZ3JvdXBlZCBl eHBycy4gKi8KKwlyZXN1bHQtPmdyb3VwZWRfcm93cyA9IGVzdGltYXRlX251bV9ncm91cHMocm9v dCwgcmVzdWx0LT5ncm91cF9leHBycywKKwkJCQkJCQkJCQkJICAgcmVzdWx0LT5pbnB1dF9yb3dz LCBOVUxMLCBOVUxMKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBlYWdlcl9hZ2dy ZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVsYXRpb24KKyAqIAkgIENoZWNrIGlmIGl0J3MgcG9zc2li bGUgdG8gcHJvZHVjZSBncm91cGVkIHBhdGhzIGZvciB0aGUgZ2l2ZW4gcmVsYXRpb24uCisgKi8K K3N0YXRpYyBib29sCitlYWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVsYXRpb24oUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwor CS8qCisJICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgZWFnZXIgYWdncmVnYXRpb24g Y2Fubm90IGhhbmRsZQorCSAqIFBsYWNlSG9sZGVyVmFyIChQSFYpLgorCSAqCisJICogSWYgd2Ug a25ldyB0aGF0IHRoZSBQSFYgc2hvdWxkIGJlIGV2YWx1YXRlZCBpbiB0aGlzIHRhcmdldCAoYW5k IG9mCisJICogY291cnNlLCBpZiBpdHMgZXhwcmVzc2lvbiBtYXRjaGVkIHNvbWUgQWdncmVmIGFy Z3VtZW50KSwgd2UnZCBqdXN0IGxldAorCSAqIGluaXRfZ3JvdXBpbmdfdGFyZ2V0cyBhZGQgdGhh dCBBZ2dyZWYuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBrbmV3CisJICogdGhhdCB0aGUgUEhW IGlzIGV2YWx1YXRlZCBiZWxvdyB0aGUgY3VycmVudCByZWwsIHdlIGNvdWxkIGlnbm9yZSBpdAor CSAqIGJlY2F1c2UgdGhlIHJlZmVyZW5jaW5nIEFnZ3JlZiB3b3VsZCB0YWtlIGNhcmUgb2YgcHJv cGFnYXRpb24gb2YgdGhlCisJICogdmFsdWUgdG8gdXBwZXIgam9pbnMuCisJICoKKwkgKiBUaGUg cHJvYmxlbSBpcyB0aGF0IHRoZSBzYW1lIFBIViBjYW4gYmUgZXZhbHVhdGVkIGluIHRoZSB0YXJn ZXQgb2YgdGhlCisJICogY3VycmVudCByZWwgb3IgaW4gdGhhdCBvZiBsb3dlciByZWwgLS0tIGRl cGVuZGluZyBvbiB0aGUgaW5wdXQgcGF0aHMuCisJICogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHJl bC0+cmVsaWRzID0ge0EsIEIsIEN9IGFuZCBpZiBwaF9ldmFsX2F0ID0ge0IsCisJICogQ30uIFBh dGggIkEgSk9JTiAoQiBKT0lOIEMpIiBpbXBsaWVzIHRoYXQgdGhlIFBIViBpcyBldmFsdWF0ZWQg YnkgdGhlCisJICogIihCIEpPSU4gQykiLCB3aGlsZSBwYXRoICIoQSBKT0lOIEIpIEpPSU4gQyIg ZXZhbHVhdGVzIHRoZSBQSFYgaXRzZWxmLgorCSAqLworCWZvcmVhY2gobGMsIHJlbC0+cmVsdGFy Z2V0LT5leHBycykKKwl7CisJCUV4cHIJICAgKmV4cHIgPSBsZmlyc3QobGMpOworCisJCWlmIChJ c0EoZXhwciwgUGxhY2VIb2xkZXJWYXIpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChJ U19TSU1QTEVfUkVMKHJlbCkpCisJeworCQlSYW5nZVRibEVudHJ5ICpydGUgPSByb290LT5zaW1w bGVfcnRlX2FycmF5W3JlbC0+cmVsaWRdOworCisJCS8qCisJCSAqIHJ0ZWtpbmQgIT0gUlRFX1JF TEFUSU9OIGNhc2UgaXMgbm90IHN1cHBvcnRlZCB5ZXQuCisJCSAqLworCQlpZiAocnRlLT5ydGVr aW5kICE9IFJURV9SRUxBVElPTikKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBDYWxsZXIg c2hvdWxkIG9ubHkgcGFzcyBiYXNlIHJlbGF0aW9ucyBvciBqb2lucy4gKi8KKwlBc3NlcnQocmVs LT5yZWxvcHRraW5kID09IFJFTE9QVF9CQVNFUkVMIHx8CisJCSAgIHJlbC0+cmVsb3B0a2luZCA9 PSBSRUxPUFRfSk9JTlJFTCk7CisKKwkvKgorCSAqIENoZWNrIGlmIGFsbCBhZ2dyZWdhdGUgZXhw cmVzc2lvbnMgY2FuIGJlIGV2YWx1YXRlZCBvbiB0aGlzIHJlbGF0aW9uCisJICogbGV2ZWwuCisJ ICovCisJZm9yZWFjaChsYywgcm9vdC0+YWdnX2NsYXVzZV9saXN0KQorCXsKKwkJQWdnQ2xhdXNl SW5mbyAqYWNfaW5mbyA9IGxmaXJzdF9ub2RlKEFnZ0NsYXVzZUluZm8sIGxjKTsKKworCQlBc3Nl cnQoSXNBKGFjX2luZm8tPmFnZ3JlZiwgQWdncmVmKSk7CisKKwkJLyoKKwkJICogR2l2ZSB1cCBp ZiBhbnkgYWdncmVnYXRlIG5lZWRzIHJlbGF0aW9ucyBvdGhlciB0aGFuIHRoZSBjdXJyZW50IG9u ZS4KKwkJICoKKwkJICogSWYgdGhlIGFnZ3JlZ2F0ZSBuZWVkcyB0aGUgY3VycmVudCByZWwgcGx1 cyBhbnl0aGluZyBlbHNlLCB0aGVuIHRoZQorCQkgKiBwcm9ibGVtIGlzIHRoYXQgZ3JvdXBpbmcg b2YgdGhlIGN1cnJlbnQgcmVsYXRpb24gY291bGQgbWFrZSBzb21lCisJCSAqIGlucHV0IHZhcmlh YmxlcyB1bmF2YWlsYWJsZSBmb3IgdGhlICJoaWdoZXIgYWdncmVnYXRlIiwgYW5kIGl0J2QKKwkJ ICogYWxzbyBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIGlucHV0IHJvd3MgdGhlICJoaWdoZXIgYWdn cmVnYXRlIgorCQkgKiByZWNlaXZlcy4KKwkJICoKKwkJICogSWYgdGhlIGFnZ3JlZ2F0ZSBkb2Vz IG5vdCBldmVuIG5lZWQgdGhlIGN1cnJlbnQgcmVsLCB0aGVuIHRoZQorCQkgKiBjdXJyZW50IHJl bCBzaG91bGQgYmUgZ3JvdXBlZCBiZWNhdXNlIHdlIGRvIG5vdCBzdXBwb3J0IGpvaW4gb2YgdHdv CisJCSAqIGdyb3VwZWQgcmVsYXRpb25zLgorCQkgKi8KKwkJaWYgKCFibXNfaXNfc3Vic2V0KGFj X2luZm8tPmFnZ19ldmFsX2F0LCByZWwtPnJlbGlkcykpCisJCQlyZXR1cm4gZmFsc2U7CisJfQor CisJLyoKKwkgKiBDaGVjayBpZiBhbGwgZ3JvdXBpbmcgZXhwcmVzc2lvbnMgdGhhdCBhcmUgYXBw bGlhYmxlIHRvIHRoaXMgcmVsYXRpb24KKwkgKiBjYW4gYmUgZXZhbHVhdGVkIG9uIHRoaXMgcmVs YXRpb24gbGV2ZWwuCisJICovCisJZm9yZWFjaChsYywgcm9vdC0+Z3JvdXBfZXhwcl9saXN0KQor CXsKKwkJR3JvdXBFeHBySW5mbyAqZ2VfaW5mbyA9IGxmaXJzdF9ub2RlKEdyb3VwRXhwckluZm8s IGxjKTsKKwkJVmFyCQkgICAqZ2VfdmFyID0gY2FzdE5vZGUoVmFyLCBnZV9pbmZvLT5leHByKTsK KworCQkvKgorCQkgKiBOb3QgaW50ZXJlc3RlZCBpZiB0aGUgZ3JvdXBpbmcgZXhwcmVzc2lvbiBp cyBub3QgYXBwbGlhYmxlIHRvIHRoaXMKKwkJICogcmVsYXRpb24uCisJCSAqLworCQlpZiAoIWJt c19pc19tZW1iZXIoZ2VfdmFyLT52YXJubywgcmVsLT5yZWxpZHMpKQorCQkJY29udGludWU7CisK KwkJLyoKKwkJICogR2l2ZSB1cCBpZiBhbnkgZ3JvdXBpbmcgZXhwcmVzc2lvbiBjYW4gYmUgbnVs bGVkIGJ5IGFuIG91dGVyIGpvaW4KKwkJICogYWJvdmUgdGhpcyByZWxhdGlvbi4KKwkJICovCisJ CWlmICghYm1zX2lzX3N1YnNldChnZV92YXItPnZhcm51bGxpbmdyZWxzLCByZWwtPnJlbGlkcykp CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBpbml0 X2dyb3VwaW5nX3RhcmdldHMKKyAqCSAgSW5pdGlhbGl6ZSB0YXJnZXQgZm9yIGdyb3VwZWQgcGF0 aHMgKHRhcmdldCkgYXMgd2VsbCBhcyBhIHRhcmdldCBmb3IKKyAqCSAgcGF0aHMgdGhhdCBnZW5l cmF0ZSBpbnB1dCBmb3IgdGhlIGdyb3VwZWQgcGF0aHMgKGFnZ19pbnB1dCkuCisgKgorICogZ3Jv dXBfZXhwcnNfZXh0cmFfcCByZWNlaXZlcyBhIGxpc3Qgb2YgVmFyIG5vZGVzIGZvciB3aGljaCB3 ZSBuZWVkIHRvCisgKiBjb25zdHJ1Y3QgU29ydEdyb3VwQ2xhdXNlLiAgVGhvc2UgVmFycyB3aWxs IHRoZW4gYmUgdXNlZCBhcyBhZGRpdGlvbmFsCisgKiBncm91cGluZyBleHByZXNzaW9ucywgZm9y IHRoZSBzYWtlIG9mIGpvaW4gY2xhdXNlcy4KKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZmYgdGhlIHRh cmdldHMgY291bGQgYmUgaW5pdGlhbGl6ZWQuCisgKi8KK3N0YXRpYyBib29sCitpbml0X2dyb3Vw aW5nX3RhcmdldHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJICBQ YXRoVGFyZ2V0ICp0YXJnZXQsIFBhdGhUYXJnZXQgKmFnZ19pbnB1dCwKKwkJCQkJICBMaXN0ICoq Z3JvdXBfZXhwcnNfZXh0cmFfcCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpwb3Nz aWJseV9kZXBlbmRlbnQgPSBOSUw7CisKKwlmb3JlYWNoKGxjLCByZWwtPnJlbHRhcmdldC0+ZXhw cnMpCisJeworCQlFeHByCSAgICpleHByID0gKEV4cHIgKikgbGZpcnN0KGxjKTsKKwkJSW5kZXgJ CXNvcnRncm91cHJlZjsKKworCQkvKgorCQkgKiBHaXZlbiB0aGF0IFBsYWNlSG9sZGVyVmFyIGN1 cnJlbnRseSBwcmV2ZW50cyB1cyBmcm9tIGRvaW5nIGVhZ2VyCisJCSAqIGFnZ3JlZ2F0aW9uLCB0 aGUgc291cmNlIHRhcmdldCBjYW5ub3QgY29udGFpbiBhbnl0aGluZyBtb3JlIGNvbXBsZXgKKwkJ ICogdGhhbiBhIFZhci4KKwkJICovCisJCUFzc2VydChJc0EoZXhwciwgVmFyKSk7CisKKwkJLyog R2V0IHRoZSBzb3J0Z3JvdXByZWYgaWYgdGhlIGV4cHIgY2FuIGFjdCBhcyBncm91cGluZyBleHBy ZXNzaW9uLiAqLworCQlzb3J0Z3JvdXByZWYgPSBnZXRfZXhwcmVzc2lvbl9zb3J0Z3JvdXByZWYo cm9vdCwgZXhwcik7CisJCWlmIChzb3J0Z3JvdXByZWYgPiAwKQorCQl7CisJCQkvKgorCQkJICog SWYgdGhlIHRhcmdldCBleHByZXNzaW9uIGNhbiBiZSB1c2VkIGFzIHRoZSBncm91cGluZyBrZXks IGl0CisJCQkgKiBzaG91bGQgYmUgZW1pdHRlZCBieSB0aGUgZ3JvdXBlZCBwYXRocyB0aGF0IGhh dmUgYmVlbiBwdXNoZWQKKwkJCSAqIGRvd24gdG8gdGhpcyByZWxhdGlvbiBsZXZlbC4KKwkJCSAq LworCQkJYWRkX2NvbHVtbl90b19wYXRodGFyZ2V0KHRhcmdldCwgZXhwciwgc29ydGdyb3VwcmVm KTsKKworCQkJLyoKKwkJCSAqIC4uLiBhbmQgaXQgYWxzbyBzaG91bGQgYmUgZW1pdHRlZCBieSB0 aGUgaW5wdXQgcGF0aHMKKwkJCSAqLworCQkJYWRkX2NvbHVtbl90b19wYXRodGFyZ2V0KGFnZ19p bnB1dCwgZXhwciwgc29ydGdyb3VwcmVmKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWJvb2wJc2Fm ZV90b19wdXNoOworCisJCQlpZiAoaXNfdmFyX25lZWRlZF9ieV9qb2luKHJvb3QsIChWYXIgKikg ZXhwciwgcmVsLCAmc2FmZV90b19wdXNoKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEdpdmUgdXAg aWYgdGhpcyBleHByZXNzaW9uIGlzIG5vdCBzYWZlIHRvIGJlIHVzZWQgYXMgYQorCQkJCSAqIGdy b3VwaW5nIGtleSBhdCB0aGlzIHJlbGF0aW9uIGxldmVsLgorCQkJCSAqLworCQkJCWlmICghc2Fm ZV90b19wdXNoKQorCQkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBleHBy ZXNzaW9uIGlzIG5lZWRlZCBmb3IgYSBqb2luLCBob3dldmVyIGl0J3MgbmVpdGhlciBpbgorCQkJ CSAqIHRoZSBHUk9VUCBCWSBjbGF1c2Ugbm9yIGNhbiBpdCBiZSBkZXJpdmVkIGZyb20gaXQgdXNp bmcgRUMuCisJCQkJICogKE90aGVyd2lzZSBpdCB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBhZGRl ZCB0byB0aGUgdGFyZ2V0cworCQkJCSAqIGFib3ZlLikgIFdlIG5lZWQgdG8gY29uc3RydWN0IGEg c3BlY2lhbCBTb3J0R3JvdXBDbGF1c2UgZm9yCisJCQkJICogdGhpcyBleHByZXNzaW9uLgorCQkJ CSAqCisJCQkJICogTm90ZSB0aGF0IGl0cyB0bGVTb3J0R3JvdXBSZWYgbmVlZHMgdG8gYmUgdW5p cXVlIHdpdGhpbgorCQkJCSAqIGFnZ19pbnB1dCwgc28gd2UgbmVlZCB0byBwb3N0cG9uZSBjcmVh dGlvbiBvZiB0aGlzCisJCQkJICogU29ydEdyb3VwQ2xhdXNlIHVudGlsIHdlJ3JlIGRvbmUgd2l0 aCB0aGUgaXRlcmF0aW9uIG9mCisJCQkJICogcmVsLT5yZWx0YXJnZXQtPmV4cHJzLiAgQW5kIGl0 IG1ha2VzIHNlbnNlIGZvciB0aGUgY2FsbGVyIHRvCisJCQkJICogZG8gc29tZSBtb3JlIGNoZWNr cyBiZWZvcmUgaXQgc3RhcnRzIHRvIGNyZWF0ZSB0aG9zZQorCQkJCSAqIFNvcnRHcm91cENsYXVz ZXMuCisJCQkJICovCisJCQkJKmdyb3VwX2V4cHJzX2V4dHJhX3AgPSBsYXBwZW5kKCpncm91cF9l eHByc19leHRyYV9wLCBleHByKTsKKwkJCX0KKwkJCWVsc2UgaWYgKGlzX3Zhcl9pbl9hZ2dyZWZf b25seShyb290LCAoVmFyICopIGV4cHIpKQorCQkJeworCQkJCS8qCisJCQkJICogQW5vdGhlciBy ZWFzb24gd2UgbWlnaHQgbmVlZCB0aGlzIHZhcmlhYmxlIGlzIHRoYXQgc29tZQorCQkJCSAqIGFn Z3JlZ2F0ZSBwdXNoZWQgZG93biB0byB0aGlzIHJlbGF0aW9uIHJlZmVyZW5jZXMgaXQuIEluCisJ CQkJICogc3VjaCBhIGNhc2UsIGFkZCBpdCB0byAiYWdnX2lucHV0IiwgYnV0IG5vdCB0byAidGFy Z2V0Ii4KKwkJCQkgKiBIb3dldmVyLCBpZiB0aGUgYWdncmVnYXRlIGlzIG5vdCB0aGUgb25seSBy ZWFzb24gZm9yIHRoZSB2YXIKKwkJCQkgKiB0byBiZSBpbiB0aGUgdGFyZ2V0LCBzb21lIG1vcmUg Y2hlY2tzIG5lZWQgdG8gYmUgcGVyZm9ybWVkCisJCQkJICogYmVsb3cuCisJCQkJICovCisJCQkJ YWRkX25ld19jb2x1bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIGV4cHIpOworCQkJfQorCQkJ ZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogVGhlIFZhciBjYW4gYmUgZnVuY3Rpb25hbGx5IGRl cGVuZGVudCBvbiBhbm90aGVyIGV4cHJlc3Npb24KKwkJCQkgKiBvZiB0aGUgdGFyZ2V0LCBidXQg d2UgY2Fubm90IGNoZWNrIHRoYXQgdW50aWwgd2UndmUgYnVpbHQKKwkJCQkgKiBhbGwgdGhlIGV4 cHJlc3Npb25zIGZvciB0aGUgdGFyZ2V0LgorCQkJCSAqLworCQkJCXBvc3NpYmx5X2RlcGVuZGVu dCA9IGxhcHBlbmQocG9zc2libHlfZGVwZW5kZW50LCBleHByKTsKKwkJCX0KKwkJfQorCX0KKwor CS8qCisJICogTm93IHdlIGNhbiBjaGVjayB3aGV0aGVyIHRoZSBleHByZXNzaW9uIGlzIGZ1bmN0 aW9uYWxseSBkZXBlbmRlbnQgb24KKwkgKiBhbm90aGVyIG9uZS4KKwkgKi8KKwlmb3JlYWNoKGxj LCBwb3NzaWJseV9kZXBlbmRlbnQpCisJeworCQlWYXIJCSAgICp0dmFyOworCQlMaXN0CSAgICpk ZXBzID0gTklMOworCQlSYW5nZVRibEVudHJ5ICpydGU7CisKKwkJdHZhciA9IGxmaXJzdF9ub2Rl KFZhciwgbGMpOworCQlydGUgPSByb290LT5zaW1wbGVfcnRlX2FycmF5W3R2YXItPnZhcm5vXTsK KworCQkvKgorCQkgKiBDaGVjayBpZiB0aGUgVmFyIGNhbiBiZSBpbiB0aGUgZ3JvdXBpbmcga2V5 IGV2ZW4gdGhvdWdoIGl0J3Mgbm90CisJCSAqIG1lbnRpb25lZCBieSB0aGUgR1JPVVAgQlkgY2xh dXNlIChhbmQgY291bGQgbm90IGJlIGRlcml2ZWQgdXNpbmcKKwkJICogRUNzKS4KKwkJICovCisJ CWlmIChjaGVja19mdW5jdGlvbmFsX2dyb3VwaW5nKHJ0ZS0+cmVsaWQsIHR2YXItPnZhcm5vLAor CQkJCQkJCQkJICB0dmFyLT52YXJsZXZlbHN1cCwKKwkJCQkJCQkJCSAgdGFyZ2V0LT5leHBycywg JmRlcHMpKQorCQl7CisJCQkvKgorCQkJICogVGhlIHZhciBzaG91bGRuJ3QgYmUgYWN0dWFsbHkg dXNlZCBmb3IgZ3JvdXBpbmcga2V5IGV2YWx1YXRpb24KKwkJCSAqIChpbnN0ZWFkLCB0aGUgb25l IHRoaXMgZGVwZW5kcyBvbiB3aWxsIGJlKSwgc28gc29ydGdyb3VwcmVmCisJCQkgKiBzaG91bGQg bm90IGJlIGltcG9ydGFudC4KKwkJCSAqLworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0aHRhcmdl dCh0YXJnZXQsIChFeHByICopIHR2YXIpOworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0aHRhcmdl dChhZ2dfaW5wdXQsIChFeHByICopIHR2YXIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJ CSAqIEFzIGxvbmcgYXMgdGhlIHF1ZXJ5IGlzIHNlbWFudGljYWxseSBjb3JyZWN0LCBhcnJpdmlu ZyBoZXJlCisJCQkgKiBtZWFucyB0aGF0IHRoZSB2YXIgaXMgcmVmZXJlbmNlZCBieSBhIGdlbmVy aWMgZ3JvdXBpbmcKKwkJCSAqIGV4cHJlc3Npb24gYnV0IG5vdCByZWZlcmVuY2VkIGJ5IGFueSBq b2luLgorCQkJICoKKwkJCSAqIElmIHRoZSBlYWdlciBhZ2dyZWdhdGlvbiB3aWxsIHN1cHBvcnQg Z2VuZXJpYyBncm91cGluZworCQkJICogZXhwcmVzc2lvbiBpbiB0aGUgZnV0dXJlLCBjcmVhdGVf cmVsX2FnZ19pbmZvKCkgd2lsbCBoYXZlIHRvIGFkZAorCQkJICogdGhpcyB2YXJpYWJsZSB0byAi YWdnX2lucHV0IiB0YXJnZXQgYW5kIGFsc28gYWRkIHRoZSB3aG9sZQorCQkJICogZ2VuZXJpYyBl eHByZXNzaW9uIHRvICJ0YXJnZXQiLgorCQkJICovCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIGlzX3Zhcl9pbl9hZ2dyZWZfb25seQorICoJ ICBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBWYXIgYXBwZWFycyBpbiBhZ2dyZWdhdGUgZXhwcmVz c2lvbnMgYW5kIG5vdAorICoJICBlbHNld2hlcmUgaW4gdGhlIHRhcmdldGxpc3QgYW5kIGhhdmlu Z1F1YWwuCisgKi8KK3N0YXRpYyBib29sCitpc192YXJfaW5fYWdncmVmX29ubHkoUGxhbm5lcklu Zm8gKnJvb3QsIFZhciAqdmFyKQoreworCUxpc3RDZWxsICAgKmxjOworCisJLyoKKwkgKiBTZWFy Y2ggdGhlIGxpc3Qgb2YgYWdncmVnYXRlIGV4cHJlc3Npb25zIGZvciB0aGUgVmFyLgorCSAqLwor CWZvcmVhY2gobGMsIHJvb3QtPmFnZ19jbGF1c2VfbGlzdCkKKwl7CisJCUFnZ0NsYXVzZUluZm8g KmFjX2luZm8gPSBsZmlyc3Rfbm9kZShBZ2dDbGF1c2VJbmZvLCBsYyk7CisJCUxpc3QJCSAgKnZh cnM7CisKKwkJQXNzZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYsIEFnZ3JlZikpOworCisJCWlmICgh Ym1zX2lzX21lbWJlcih2YXItPnZhcm5vLCBhY19pbmZvLT5hZ2dfZXZhbF9hdCkpCisJCQljb250 aW51ZTsKKworCQl2YXJzID0gcHVsbF92YXJfY2xhdXNlKChOb2RlICopIGFjX2luZm8tPmFnZ3Jl ZiwKKwkJCQkJCQkgICBQVkNfUkVDVVJTRV9BR0dSRUdBVEVTIHwKKwkJCQkJCQkgICBQVkNfUkVD VVJTRV9XSU5ET1dGVU5DUyB8CisJCQkJCQkJICAgUFZDX1JFQ1VSU0VfUExBQ0VIT0xERVJTKTsK KworCQlpZiAobGlzdF9tZW1iZXIodmFycywgdmFyKSkKKwkJeworCQkJbGlzdF9mcmVlKHZhcnMp OworCQkJYnJlYWs7CisJCX0KKworCQlsaXN0X2ZyZWUodmFycyk7CisJfQorCisJcmV0dXJuIChs YyAhPSBOVUxMICYmICFsaXN0X21lbWJlcihyb290LT50bGlzdF92YXJzLCB2YXIpKTsKK30KKwor LyoKKyAqIGlzX3Zhcl9uZWVkZWRfYnlfam9pbgorICoJICBDaGVjayBpZiB0aGUgZ2l2ZW4gVmFy IGlzIG5lZWRlZCBieSBqb2lucyBhYm92ZSB0aGUgY3VycmVudCByZWwuICBXZSBhbHNvCisgKgkg IHJldHVybiBpbiAnKnNhZmVfdG9fcHVzaCcgd2hldGhlciBpdCdzIHNhZmUgdG8gdXNlIHRoaXMg VmFyIGFzIGEgZ3JvdXBpbmcKKyAqCSAga2V5IGF0IHRoaXMgcmVsIGxldmVsLgorICoKKyAqIENv bnNpZGVyIHB1c2hpbmcgdGhlIGFnZ3JlZ2F0ZSBhdmcoYi55KSBkb3duIHRvIHJlbGF0aW9uIGIg Zm9yIHRoZSBmb2xsb3dpbmcKKyAqIHF1ZXJ5OgorICoKKyAqICAgIFNFTEVDVCBhLmksIGF2Zyhi LnkpCisgKiAgICBGUk9NIGEgSk9JTiBiIE9OIGEuaiA9IGIuagorICogICAgR1JPVVAgQlkgYS5p OworICoKKyAqIENvbHVtbiBiLmogbmVlZHMgdG8gYmUgdXNlZCBhcyB0aGUgZ3JvdXBpbmcga2V5 IGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IGNhbm5vdAorICogZmluZCBpdHMgd2F5IHRvIHRoZSBpbnB1 dCBvZiB0aGUgam9pbiBleHByZXNzaW9uLgorICovCitzdGF0aWMgYm9vbAoraXNfdmFyX25lZWRl ZF9ieV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhciwgUmVsT3B0SW5mbyAqcmVsLAor CQkJCQkgIGJvb2wgKnNhZmVfdG9fcHVzaCkKK3sKKwlSZWxpZHMJCXJlbGlkczsKKwlpbnQJCQlh dHRubzsKKwlSZWxPcHRJbmZvICpiYXNlcmVsOworCisJLyoKKwkgKiBOb3RlIHRoYXQgd2hlbiB3 ZSBhcmUgY2hlY2tpbmcgaWYgdGhlIFZhciBpcyBuZWVkZWQgYnkgam9pbnMgYWJvdmUsIHdlCisJ ICogd2FudCB0byBleGNsdWRlIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlIFZhciBpcyBvbmx5IG5l ZWRlZCBpbiBmaW5hbAorCSAqIG91dHB1dC4gIFNvIGluY2x1ZGUgInJlbGF0aW9uIDAiIGhlcmUu CisJICovCisJcmVsaWRzID0gYm1zX2NvcHkocmVsLT5yZWxpZHMpOworCXJlbGlkcyA9IGJtc19h ZGRfbWVtYmVyKHJlbGlkcywgMCk7CisKKwliYXNlcmVsID0gZmluZF9iYXNlX3JlbChyb290LCB2 YXItPnZhcm5vKTsKKwlhdHRubyA9IHZhci0+dmFyYXR0bm8gLSBiYXNlcmVsLT5taW5fYXR0cjsK KworCS8qCisJICogSWYgdGhlIGJhc2VyZWwgdGhpcyBWYXIgYmVsb25ncyB0byBjYW4gYmUgbnVs bGVkIGJ5IG91dGVyIGpvaW5zIHRoYXQgYXJlCisJICogYWJvdmUgdGhlIGN1cnJlbnQgcmVsLCB0 aGVuIGl0IGlzIG5vdCBzYWZlIHRvIHVzZSB0aGlzIFZhciBhcyBhIGdyb3VwaW5nCisJICoga2V5 IGF0IGN1cnJlbnQgcmVsIGxldmVsLgorCSAqLworCSpzYWZlX3RvX3B1c2ggPSBibXNfaXNfc3Vi c2V0KGJhc2VyZWwtPm51bGxpbmdfcmVsaWRzLCByZWwtPnJlbGlkcyk7CisKKwlyZXR1cm4gYm1z X25vbmVtcHR5X2RpZmZlcmVuY2UoYmFzZXJlbC0+YXR0cl9uZWVkZWRbYXR0bm9dLCByZWxpZHMp OworfQorCisvKgorICogZ2V0X2V4cHJlc3Npb25fc29ydGdyb3VwcmVmCisgKgkgIFJldHVybiBz b3J0Z3JvdXByZWYgaWYgdGhlIGdpdmVuICdleHByJyBjYW4gYmUgdXNlZCBhcyBhIGdyb3VwaW5n CisgKgkgIGV4cHJlc3Npb24gaW4gZ3JvdXBlZCBwYXRocyBmb3IgYmFzZSBvciBqb2luIHJlbGF0 aW9ucywgb3IgMCBvdGhlcndpc2UuCisgKgorICogTm90ZSB0aGF0IHdlIGFsc28gbmVlZCB0byBj aGVjayBpZiB0aGUgJ2V4cHInIGlzIGtub3duIGVxdWFsIHRvIG90aGVyIGV4cHJzCisgKiBkdWUg dG8gZXF1aXZhbGVuY2UgcmVsYXRpb25zaGlwcyB0aGF0IGNhbiBhY3QgYXMgZ3JvdXBpbmcgZXhw cmVzc2lvbnMuCisgKi8KK3N0YXRpYyBJbmRleAorZ2V0X2V4cHJlc3Npb25fc29ydGdyb3VwcmVm KFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHByKQoreworCUxpc3RDZWxsICAgKmxjOworCisJ Zm9yZWFjaChsYywgcm9vdC0+Z3JvdXBfZXhwcl9saXN0KQorCXsKKwkJR3JvdXBFeHBySW5mbyAq Z2VfaW5mbyA9IGxmaXJzdF9ub2RlKEdyb3VwRXhwckluZm8sIGxjKTsKKworCQlBc3NlcnQoSXNB KGdlX2luZm8tPmV4cHIsIFZhcikpOworCisJCWlmIChlcXVhbChnZV9pbmZvLT5leHByLCBleHBy KSB8fAorCQkJZXhwcnNfa25vd25fZXF1YWwocm9vdCwgKE5vZGUgKikgZXhwciwgKE5vZGUgKikg Z2VfaW5mby0+ZXhwciwKKwkJCQkJCQkgIGdlX2luZm8tPmJ0cmVlX29wZmFtaWx5KSkKKwkJewor CQkJQXNzZXJ0KGdlX2luZm8tPnNvcnRncm91cHJlZiA+IDApOworCisJCQlyZXR1cm4gZ2VfaW5m by0+c29ydGdyb3VwcmVmOworCQl9CisJfQorCisJLyogVGhlIGV4cHJlc3Npb24gY2Fubm90IGJl IHVzZWQgYXMgZ3JvdXBpbmcga2V5LiAqLworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2Vs ZnVuY3MuYwppbmRleCA1ZjVkNzk1OWQ4Li44NzdhNjJhNjJlIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2Vs ZnVuY3MuYwpAQCAtMzMxMywxMCArMzMxMywxMSBAQCBhZGRfdW5pcXVlX2dyb3VwX3ZhcihQbGFu bmVySW5mbyAqcm9vdCwgTGlzdCAqdmFyaW5mb3MsCiAKIAkJLyoKIAkJICogRHJvcCBrbm93bi1l cXVhbCB2YXJzLCBidXQgb25seSBpZiB0aGV5IGJlbG9uZyB0byBkaWZmZXJlbnQKLQkJICogcmVs YXRpb25zIChzZWUgY29tbWVudHMgZm9yIGVzdGltYXRlX251bV9ncm91cHMpCisJCSAqIHJlbGF0 aW9ucyAoc2VlIGNvbW1lbnRzIGZvciBlc3RpbWF0ZV9udW1fZ3JvdXBzKS4gIFdlIGFyZW4ndCB0 b28KKwkJICogZnVzc3kgYWJvdXQgdGhlIHNlbWFudGljcyBvZiAiZXF1YWwiIGhlcmUuCiAJCSAq LwogCQlpZiAodmFyZGF0YS0+cmVsICE9IHZhcmluZm8tPnJlbCAmJgotCQkJZXhwcnNfa25vd25f ZXF1YWwocm9vdCwgdmFyLCB2YXJpbmZvLT52YXIpKQorCQkJZXhwcnNfa25vd25fZXF1YWwocm9v dCwgdmFyLCB2YXJpbmZvLT52YXIsIEludmFsaWRPaWQpKQogCQl7CiAJCQlpZiAodmFyaW5mby0+ bmRpc3RpbmN0IDw9IG5kaXN0aW5jdCkKIAkJCXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNjgz YWI1MWU2Yi4uZmQxMDQ5ODAyOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5v ZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTM4OSw5ICszODks MTIgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAJLyogbGlzdCBvZiBBZ2dDbGF1c2VJbmZvcyAqLwog CUxpc3QJICAgKmFnZ19jbGF1c2VfbGlzdDsKIAotCS8qIExpc3Qgb2YgR3JvdXBFeHBySW5mb3Mg Ki8KKwkvKiBsaXN0IG9mIEdyb3VwRXhwckluZm9zICovCiAJTGlzdAkgICAqZ3JvdXBfZXhwcl9s aXN0OwogCisJLyogbGlzdCBvZiBwbGFpbiBWYXJzIGNvbnRhaW5lZCBpbiB0YXJnZXRsaXN0IGFu ZCBoYXZpbmdRdWFsICovCisJTGlzdAkgICAqdGxpc3RfdmFyczsKKwogCS8qIGFycmF5IG9mIFBs YWNlSG9sZGVySW5mb3MgaW5kZXhlZCBieSBwaGlkICovCiAJc3RydWN0IFBsYWNlSG9sZGVySW5m byAqKnBsYWNlaG9sZGVyX2FycmF5IHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSwgYXJy YXlfc2l6ZShwbGFjZWhvbGRlcl9hcnJheV9zaXplKSk7CiAJLyogYWxsb2NhdGVkIHNpemUgb2Yg YXJyYXkgKi8KQEAgLTQzNCw2ICs0MzcsMTIgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAJICovCiAJ UmVsSW5mb0xpc3QJCXVwcGVyX3JlbHNbVVBQRVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0dHIo cmVhZF93cml0ZV9pZ25vcmUpOwogCisJLyoKKwkgKiBsaXN0IG9mIGdyb3VwZWQgcmVsYXRpb24g UmVsQWdnSW5mb3MuIE9uZSBpbnN0YW5jZSBvZiBSZWxBZ2dJbmZvIHBlcgorCSAqIGl0ZW0gb2Yg dGhlIHVwcGVyX3JlbHNbVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9BR0ddIGxpc3QuCisJICovCisJ UmVsSW5mb0xpc3QgKmFnZ19pbmZvX2xpc3Q7CisKIAkvKiBSZXN1bHQgdGxpc3RzIGNob3NlbiBi eSBncm91cGluZ19wbGFubmVyIGZvciB1cHBlci1zdGFnZSBwcm9jZXNzaW5nICovCiAJc3RydWN0 IFBhdGhUYXJnZXQgKnVwcGVyX3RhcmdldHNbVVBQRVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0 dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IDEx MmU3YzIzZDQuLjAyZGE2OGE3NTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9w YXRobm9kZS5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCkBAIC0zMTQs NiArMzE0LDEwIEBAIGV4dGVybiBSZWxPcHRJbmZvICpmaW5kX2Jhc2VfcmVsKFBsYW5uZXJJbmZv ICpyb290LCBpbnQgcmVsaWQpOwogZXh0ZXJuIFJlbE9wdEluZm8gKmZpbmRfYmFzZV9yZWxfbm9l cnIoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCk7CiBleHRlcm4gUmVsT3B0SW5mbyAqZmlu ZF9iYXNlX3JlbF9pZ25vcmVfam9pbihQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkKTsKIGV4 dGVybiBSZWxPcHRJbmZvICpmaW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMg cmVsaWRzKTsKK2V4dGVybiB2b2lkIGFkZF9ncm91cGVkX3JlbChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJCVJlbEFnZ0luZm8gKmFnZ19pbmZvKTsKK2V4dGVybiBS ZWxPcHRJbmZvICpmaW5kX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVs aWRzLAorCQkJCQkJCQkJUmVsQWdnSW5mbyAqKmFnZ19pbmZvX3ApOwogZXh0ZXJuIFJlbE9wdElu Zm8gKmJ1aWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgIFJlbGlkcyBq b2lucmVsaWRzLAogCQkJCQkJCQkgIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKQEAgLTM0OCw0ICsz NTIsNSBAQCBleHRlcm4gUmVsT3B0SW5mbyAqYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcGFyZW50X2pvaW5yZWwsIExpc3QgKnJl c3RyaWN0bGlzdCwKIAkJCQkJCQkJCQlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbyk7CiAKK2V4dGVy biBSZWxBZ2dJbmZvICpjcmVhdGVfcmVsX2FnZ19pbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwpOwogI2VuZGlmCQkJCQkJCS8qIFBBVEhOT0RFX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Bh dGhzLmgKaW5kZXggZDgxOTkzMzNjOS4uYWU3YThlZDc0MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvb3B0aW1pemVyL3BhdGhzLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgK QEAgLTE1OSw3ICsxNTksOCBAQCBleHRlcm4gTGlzdCAqZ2VuZXJhdGVfam9pbl9pbXBsaWVkX2Vx dWFsaXRpZXNfZm9yX2VjcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCQkgIFJlbGlk cyBqb2luX3JlbGlkcywKIAkJCQkJCQkJCQkJCQkgIFJlbGlkcyBvdXRlcl9yZWxpZHMsCiAJCQkJ CQkJCQkJCQkJICBSZWxPcHRJbmZvICppbm5lcl9yZWwpOwotZXh0ZXJuIGJvb2wgZXhwcnNfa25v d25fZXF1YWwoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKml0ZW0xLCBOb2RlICppdGVtMik7Citl eHRlcm4gYm9vbCBleHByc19rbm93bl9lcXVhbChQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqaXRl bTEsIE5vZGUgKml0ZW0yLAorCQkJCQkJCSAgT2lkIG9wZmFtaWx5KTsKIGV4dGVybiBFcXVpdmFs ZW5jZUNsYXNzICptYXRjaF9lY2xhc3Nlc190b19mb3JlaWduX2tleV9jb2woUGxhbm5lckluZm8g KnJvb3QsCiAJCQkJCQkJCQkJCQkJCSAgIEZvcmVpZ25LZXlPcHRJbmZvICpma2luZm8sCiAJCQkJ CQkJCQkJCQkJCSAgIGludCBjb2xubyk7Ci0tIAoyLjQzLjAKCg== --000000000000b2a431061ac0ff96 Content-Type: application/octet-stream; name="v8-0005-Implement-functions-that-generate-paths-for-grouped-relations.patch" Content-Disposition: attachment; filename="v8-0005-Implement-functions-that-generate-paths-for-grouped-relations.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxcz7gst4 RnJvbSA4YTJmZTc0Y2MyOTY0MjMwNjFjYzg0OTkxYzMzY2JlYjliNDhhZGU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNjowNTo1MCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjgg NS85XSBJbXBsZW1lbnQgZnVuY3Rpb25zIHRoYXQgZ2VuZXJhdGUgcGF0aHMgZm9yIGdyb3VwZWQK IHJlbGF0aW9ucwoKVGhpcyBjb21taXQgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb25zIHRoYXQgZ2Vu ZXJhdGUgcGF0aHMgZm9yIGdyb3VwZWQKcmVsYXRpb25zIGJ5IGFkZGluZyBzb3J0ZWQgYW5kIGhh c2hlZCBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcApvZiBwYXRocyBvZiB0aGUgcGxh aW4gYmFzZSBvciBqb2luIHJlbGF0aW9ucy4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9hbGxwYXRocy5jIHwgMzA3ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIHwgIDEyICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aHMuaCAgICAgICAgIHwgICA0ICsKIDMgZmlsZXMgY2hhbmdlZCwgMzE1IGluc2VydGlv bnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMK aW5kZXggZDFiOTc0MzY3Yi4uMGMyZmFlOTYwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9h bGxwYXRocy5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhzLmgi CiAjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5jYXQuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxh bm5lci5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wcmVwLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3RsaXN0LmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUgInBh cnNlci9wYXJzZXRyZWUuaCIKQEAgLTQ3LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJwb3J0L3BnX2Jp dHV0aWxzLmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNpbmNsdWRlICJ1 dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5oIgogCiAKIC8qIEJp dG1hc2sgZmxhZ3MgZm9yIHB1c2hkb3duX3NhZmV0eV9pbmZvLnVuc2FmZUZsYWdzICovCkBAIC0z Mjk2LDYgKzMyOTgsMzExIEBAIGdlbmVyYXRlX3VzZWZ1bF9nYXRoZXJfcGF0aHMoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgYm9vbCBvdmVycmlkZV9yCiAJfQogfQogCisvKgor ICogZ2VuZXJhdGVfZ3JvdXBlZF9wYXRocworICoJCUdlbmVyYXRlIHBhdGhzIGZvciBhIGdyb3Vw ZWQgcmVsYXRpb24gYnkgYWRkaW5nIHNvcnRlZCBhbmQgaGFzaGVkCisgKgkJcGFydGlhbCBhZ2dy ZWdhdGlvbiBwYXRocyBvbiB0b3Agb2YgcGF0aHMgb2YgdGhlIHBsYWluIGJhc2Ugb3Igam9pbgor ICoJCXJlbGF0aW9uLgorICoKKyAqIFRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYXJlIHByb3ZpZGVk IGJ5IHRoZSBSZWxBZ2dJbmZvIHN0cnVjdHVyZS4KKyAqLwordm9pZAorZ2VuZXJhdGVfZ3JvdXBl ZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQsCisJCQkJ CSAgIFJlbE9wdEluZm8gKnJlbF9wbGFpbiwgUmVsQWdnSW5mbyAqYWdnX2luZm8pCit7CisJQWdn Q2xhdXNlQ29zdHMgYWdnX2Nvc3RzOworCWJvb2wJCWNhbl9oYXNoOworCWJvb2wJCWNhbl9zb3J0 OworCVBhdGgJICAgKmNoZWFwZXN0X3RvdGFsX3BhdGggPSBOVUxMOworCVBhdGgJICAgKmNoZWFw ZXN0X3BhcnRpYWxfcGF0aCA9IE5VTEw7CisJZG91YmxlCQlkTnVtR3JvdXBzID0gMDsKKwlkb3Vi bGUJCWROdW1QYXJ0aWFsR3JvdXBzID0gMDsKKworCWlmIChJU19EVU1NWV9SRUwocmVsX3BsYWlu KSkKKwl7CisJCW1hcmtfZHVtbXlfcmVsKHJlbF9ncm91cGVkKTsKKwkJcmV0dXJuOworCX0KKwor CU1lbVNldCgmYWdnX2Nvc3RzLCAwLCBzaXplb2YoQWdnQ2xhdXNlQ29zdHMpKTsKKwlnZXRfYWdn X2NsYXVzZV9jb3N0cyhyb290LCBBR0dTUExJVF9JTklUSUFMX1NFUklBTCwgJmFnZ19jb3N0cyk7 CisKKwkvKgorCSAqIERldGVybWluZSB3aGV0aGVyIGl0J3MgcG9zc2libGUgdG8gcGVyZm9ybSBz b3J0LWJhc2VkIGltcGxlbWVudGF0aW9ucyBvZgorCSAqIGdyb3VwaW5nLgorCSAqLworCWNhbl9z b3J0ID0gZ3JvdXBpbmdfaXNfc29ydGFibGUoYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMpOworCisJ LyoKKwkgKiBEZXRlcm1pbmUgd2hldGhlciB3ZSBzaG91bGQgY29uc2lkZXIgaGFzaC1iYXNlZCBp bXBsZW1lbnRhdGlvbnMgb2YKKwkgKiBncm91cGluZy4KKwkgKi8KKwlBc3NlcnQocm9vdC0+bnVt T3JkZXJlZEFnZ3MgPT0gMCk7CisJY2FuX2hhc2ggPSAoYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMg IT0gTklMICYmCisJCQkJZ3JvdXBpbmdfaXNfaGFzaGFibGUoYWdnX2luZm8tPmdyb3VwX2NsYXVz ZXMpKTsKKworCS8qCisJICogQ29uc2lkZXIgd2hldGhlciB3ZSBzaG91bGQgZ2VuZXJhdGUgcGFy dGlhbGx5IGFnZ3JlZ2F0ZWQgbm9uLXBhcnRpYWwKKwkgKiBwYXRocy4gIFdlIGNhbiBvbmx5IGRv IHRoaXMgaWYgd2UgaGF2ZSBhIG5vbi1wYXJ0aWFsIHBhdGguCisJICovCisJaWYgKHJlbF9wbGFp bi0+cGF0aGxpc3QgIT0gTklMKQorCXsKKwkJY2hlYXBlc3RfdG90YWxfcGF0aCA9IHJlbF9wbGFp bi0+Y2hlYXBlc3RfdG90YWxfcGF0aDsKKwkJQXNzZXJ0KGNoZWFwZXN0X3RvdGFsX3BhdGggIT0g TlVMTCk7CisJfQorCisJLyoKKwkgKiBJZiBwYXJhbGxlbGlzbSBpcyBwb3NzaWJsZSBmb3IgcmVs X2dyb3VwZWQsIHRoZW4gd2Ugc2hvdWxkIGNvbnNpZGVyCisJICogZ2VuZXJhdGluZyBwYXJ0aWFs bHktZ3JvdXBlZCBwYXJ0aWFsIHBhdGhzLiAgSG93ZXZlciwgaWYgdGhlIHBsYWluIHJlbAorCSAq IGhhcyBubyBwYXJ0aWFsIHBhdGhzLCB0aGVuIHdlIGNhbid0LgorCSAqLworCWlmIChyZWxfZ3Jv dXBlZC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYgcmVsX3BsYWluLT5wYXJ0aWFsX3BhdGhsaXN0ICE9 IE5JTCkKKwl7CisJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aCA9IGxpbml0aWFsKHJlbF9wbGFpbi0+ cGFydGlhbF9wYXRobGlzdCk7CisJCUFzc2VydChjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVM TCk7CisJfQorCisJLyogRXN0aW1hdGUgbnVtYmVyIG9mIHBhcnRpYWwgZ3JvdXBzLiAqLworCWlm IChjaGVhcGVzdF90b3RhbF9wYXRoICE9IE5VTEwpCisJCWROdW1Hcm91cHMgPSBlc3RpbWF0ZV9u dW1fZ3JvdXBzKHJvb3QsCisJCQkJCQkJCQkJIGFnZ19pbmZvLT5ncm91cF9leHBycywKKwkJCQkJ CQkJCQkgY2hlYXBlc3RfdG90YWxfcGF0aC0+cm93cywKKwkJCQkJCQkJCQkgTlVMTCwgTlVMTCk7 CisJaWYgKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKQorCQlkTnVtUGFydGlhbEdyb3Vw cyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKKwkJCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91 cF9leHBycywKKwkJCQkJCQkJCQkJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aC0+cm93cywKKwkJCQkJ CQkJCQkJCU5VTEwsIE5VTEwpOworCisJaWYgKGNhbl9zb3J0ICYmIGNoZWFwZXN0X3RvdGFsX3Bh dGggIT0gTlVMTCkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCisJCS8qCisJCSAqIFVzZSBhbnkg YXZhaWxhYmxlIHN1aXRhYmx5LXNvcnRlZCBwYXRoIGFzIGlucHV0LCBhbmQgYWxzbyBjb25zaWRl cgorCQkgKiBzb3J0aW5nIHRoZSBjaGVhcGVzdC10b3RhbCBwYXRoLgorCQkgKi8KKwkJZm9yZWFj aChsYywgcmVsX3BsYWluLT5wYXRobGlzdCkKKwkJeworCQkJUGF0aAkgICAqaW5wdXRfcGF0aCA9 IChQYXRoICopIGxmaXJzdChsYyk7CisJCQlQYXRoCSAgICpwYXRoOworCQkJYm9vbAkJaXNfc29y dGVkOworCQkJaW50CQkJcHJlc29ydGVkX2tleXM7CisKKwkJCS8qCisJCQkgKiBTaW5jZSB0aGUg cGF0aCBvcmlnaW5hdGVzIGZyb20gdGhlIG5vbi1ncm91cGVkIHJlbGF0aW9uIHdoaWNoIGlzCisJ CQkgKiBub3QgYXdhcmUgb2YgZWFnZXIgYWdncmVnYXRpb24sIHdlIG11c3QgZW5zdXJlIHRoYXQg aXQgcHJvdmlkZXMKKwkJCSAqIHRoZSBjb3JyZWN0IGlucHV0IGZvciB0aGUgcGFydGlhbCBhZ2dy ZWdhdGlvbi4KKwkJCSAqLworCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9wcm9qZWN0aW9uX3Bh dGgocm9vdCwKKwkJCQkJCQkJCQkJCSAgIHJlbF9ncm91cGVkLAorCQkJCQkJCQkJCQkJICAgaW5w dXRfcGF0aCwKKwkJCQkJCQkJCQkJCSAgIGFnZ19pbmZvLT5hZ2dfaW5wdXQpOworCisJCQlpc19z b3J0ZWQgPSBwYXRoa2V5c19jb3VudF9jb250YWluZWRfaW4oYWdnX2luZm8tPmdyb3VwX3BhdGhr ZXlzLAorCQkJCQkJCQkJCQkJCXBhdGgtPnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJCSZwcmVzb3J0 ZWRfa2V5cyk7CisJCQlpZiAoIWlzX3NvcnRlZCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFRyeSBh dCBsZWFzdCBzb3J0aW5nIHRoZSBjaGVhcGVzdCBwYXRoIGFuZCBhbHNvIHRyeQorCQkJCSAqIGlu Y3JlbWVudGFsbHkgc29ydGluZyBhbnkgcGF0aCB3aGljaCBpcyBwYXJ0aWFsbHkgc29ydGVkCisJ CQkJICogYWxyZWFkeSAobm8gbmVlZCB0byBkZWFsIHdpdGggcGF0aHMgd2hpY2ggaGF2ZSBwcmVz b3J0ZWQKKwkJCQkgKiBrZXlzIHdoZW4gaW5jcmVtZW50YWwgc29ydCBpcyBkaXNhYmxlZCB1bmxl c3MgaXQncyB0aGUKKwkJCQkgKiBjaGVhcGVzdCBpbnB1dCBwYXRoKS4KKwkJCQkgKi8KKwkJCQlp ZiAoaW5wdXRfcGF0aCAhPSBjaGVhcGVzdF90b3RhbF9wYXRoICYmCisJCQkJCShwcmVzb3J0ZWRf a2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkpCisJCQkJCWNvbnRpbnVlOwor CisJCQkJLyoKKwkJCQkgKiBXZSd2ZSBubyBuZWVkIHRvIGNvbnNpZGVyIGJvdGggYSBzb3J0IGFu ZCBpbmNyZW1lbnRhbCBzb3J0LgorCQkJCSAqIFdlJ2xsIGp1c3QgZG8gYSBzb3J0IGlmIHRoZXJl IGFyZSBubyBwcmVzb3J0ZWQga2V5cyBhbmQgYW4KKwkJCQkgKiBpbmNyZW1lbnRhbCBzb3J0IHdo ZW4gdGhlcmUgYXJlIHByZXNvcnRlZCBrZXlzLgorCQkJCSAqLworCQkJCWlmIChwcmVzb3J0ZWRf a2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkKKwkJCQkJcGF0aCA9IChQYXRo ICopIGNyZWF0ZV9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCQkgcmVsX2dyb3VwZWQsCisJ CQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJIGFnZ19pbmZvLT5ncm91cF9wYXRoa2V5 cywKKwkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQkJZWxzZQorCQkJCQlwYXRoID0gKFBhdGggKikg Y3JlYXRlX2luY3JlbWVudGFsX3NvcnRfcGF0aChyb290LAorCQkJCQkJCQkJCQkJCQkJCSByZWxf Z3JvdXBlZCwKKwkJCQkJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJCQkJCQkJCQkgYWdnX2lu Zm8tPmdyb3VwX3BhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJCSBwcmVzb3J0ZWRfa2V5cywKKwkJ CQkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBxdWFsIGlzIE5JTCBi ZWNhdXNlIHRoZSBIQVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0ZWQgdW50aWwgdGhlCisJ CQkgKiBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3duLgorCQkJICovCisJCQlw YXRoID0gKFBhdGggKikgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJCQkJCQkJCXJlbF9ncm91 cGVkLAorCQkJCQkJCQkJCQlwYXRoLAorCQkJCQkJCQkJCQlhZ2dfaW5mby0+dGFyZ2V0LAorCQkJ CQkJCQkJCQlBR0dfU09SVEVELAorCQkJCQkJCQkJCQlBR0dTUExJVF9JTklUSUFMX1NFUklBTCwK KwkJCQkJCQkJCQkJYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJCU5JTCwKKwkJ CQkJCQkJCQkJJmFnZ19jb3N0cywKKwkJCQkJCQkJCQkJZE51bUdyb3Vwcyk7CisKKwkJCWFkZF9w YXRoKHJlbF9ncm91cGVkLCBwYXRoKTsKKwkJfQorCX0KKworCWlmIChjYW5fc29ydCAmJiBjaGVh cGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCisJCS8q IFNpbWlsYXIgdG8gYWJvdmUgbG9naWMsIGJ1dCBmb3IgcGFydGlhbCBwYXRocy4gKi8KKwkJZm9y ZWFjaChsYywgcmVsX3BsYWluLT5wYXJ0aWFsX3BhdGhsaXN0KQorCQl7CisJCQlQYXRoCSAgICpp bnB1dF9wYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsKKwkJCVBhdGgJICAgKnBhdGg7CisJCQli b29sCQlpc19zb3J0ZWQ7CisJCQlpbnQJCQlwcmVzb3J0ZWRfa2V5czsKKworCQkJLyoKKwkJCSAq IFNpbmNlIHRoZSBwYXRoIG9yaWdpbmF0ZXMgZnJvbSB0aGUgbm9uLWdyb3VwZWQgcmVsYXRpb24g d2hpY2ggaXMKKwkJCSAqIG5vdCBhd2FyZSBvZiBlYWdlciBhZ2dyZWdhdGlvbiwgd2UgbXVzdCBl bnN1cmUgdGhhdCBpdCBwcm92aWRlcworCQkJICogdGhlIGNvcnJlY3QgaW5wdXQgZm9yIHRoZSBw 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 ZWQgdW50aWwgdGhlCisJCQkgKiBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3du LgorCQkJICovCisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJ CQkJCQkJCXJlbF9ncm91cGVkLAorCQkJCQkJCQkJCQlwYXRoLAorCQkJCQkJCQkJCQlhZ2dfaW5m by0+dGFyZ2V0LAorCQkJCQkJCQkJCQlBR0dfU09SVEVELAorCQkJCQkJCQkJCQlBR0dTUExJVF9J TklUSUFMX1NFUklBTCwKKwkJCQkJCQkJCQkJYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJ CQkJCQkJCU5JTCwKKwkJCQkJCQkJCQkJJmFnZ19jb3N0cywKKwkJCQkJCQkJCQkJZE51bVBhcnRp YWxHcm91cHMpOworCisJCQlhZGRfcGFydGlhbF9wYXRoKHJlbF9ncm91cGVkLCBwYXRoKTsKKwkJ fQorCX0KKworCS8qCisJICogQWRkIGEgcGFydGlhbGx5LWdyb3VwZWQgSGFzaEFnZyBQYXRoIHdo ZXJlIHBvc3NpYmxlCisJICovCisJaWYgKGNhbl9oYXNoICYmIGNoZWFwZXN0X3RvdGFsX3BhdGgg IT0gTlVMTCkKKwl7CisJCVBhdGggICAqcGF0aDsKKworCQkvKgorCQkgKiBTaW5jZSB0aGUgcGF0 aCBvcmlnaW5hdGVzIGZyb20gdGhlIG5vbi1ncm91cGVkIHJlbGF0aW9uIHdoaWNoIGlzCisJCSAq IG5vdCBhd2FyZSBvZiBlYWdlciBhZ2dyZWdhdGlvbiwgd2UgbXVzdCBlbnN1cmUgdGhhdCBpdCBw cm92aWRlcworCQkgKiB0aGUgY29ycmVjdCBpbnB1dCBmb3IgdGhlIHBhcnRpYWwgYWdncmVnYXRp b24uCisJCSAqLworCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290 LAorCQkJCQkJCQkJCQkgICByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJICAgY2hlYXBlc3RfdG90 YWxfcGF0aCwKKwkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19pbnB1dCk7CisKKwkJLyoKKwkJ ICogcXVhbCBpcyBOSUwgYmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVzZSBjYW5ub3QgYmUgZXZhbHVh dGVkIHVudGlsCisJCSAqIHRoZSBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3du LgorCQkgKi8KKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJ CQkJCXJlbF9ncm91cGVkLAorCQkJCQkJCQkJCXBhdGgsCisJCQkJCQkJCQkJYWdnX2luZm8tPnRh cmdldCwKKwkJCQkJCQkJCQlBR0dfSEFTSEVELAorCQkJCQkJCQkJCUFHR1NQTElUX0lOSVRJQUxf U0VSSUFMLAorCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCU5J TCwKKwkJCQkJCQkJCQkmYWdnX2Nvc3RzLAorCQkJCQkJCQkJCWROdW1Hcm91cHMpOworCisJCWFk ZF9wYXRoKHJlbF9ncm91cGVkLCBwYXRoKTsKKwl9CisKKwkvKgorCSAqIE5vdyBhZGQgYSBwYXJ0 aWFsbHktZ3JvdXBlZCBIYXNoQWdnIHBhcnRpYWwgUGF0aCB3aGVyZSBwb3NzaWJsZQorCSAqLwor CWlmIChjYW5faGFzaCAmJiBjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCkKKwl7CisJCVBh dGggICAqcGF0aDsKKworCQkvKgorCQkgKiBTaW5jZSB0aGUgcGF0aCBvcmlnaW5hdGVzIGZyb20g dGhlIG5vbi1ncm91cGVkIHJlbGF0aW9uIHdoaWNoIGlzCisJCSAqIG5vdCBhd2FyZSBvZiBlYWdl ciBhZ2dyZWdhdGlvbiwgd2UgbXVzdCBlbnN1cmUgdGhhdCBpdCBwcm92aWRlcworCQkgKiB0aGUg Y29ycmVjdCBpbnB1dCBmb3IgdGhlIHBhcnRpYWwgYWdncmVnYXRpb24uCisJCSAqLworCQlwYXRo ID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290LAorCQkJCQkJCQkJCQkgICBy ZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJICAgY2hlYXBlc3RfcGFydGlhbF9wYXRoLAorCQkJCQkJ CQkJCQkgICBhZ2dfaW5mby0+YWdnX2lucHV0KTsKKworCQkvKgorCQkgKiBxdWFsIGlzIE5JTCBi ZWNhdXNlIHRoZSBIQVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0ZWQgdW50aWwKKwkJICog dGhlIGZpbmFsIHZhbHVlIG9mIHRoZSBhZ2dyZWdhdGUgaXMga25vd24uCisJCSAqLworCQlwYXRo ID0gKFBhdGggKikgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJCQkJCQkJcmVsX2dyb3VwZWQs CisJCQkJCQkJCQkJcGF0aCwKKwkJCQkJCQkJCQlhZ2dfaW5mby0+dGFyZ2V0LAorCQkJCQkJCQkJ CUFHR19IQVNIRUQsCisJCQkJCQkJCQkJQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwsCisJCQkJCQkJ CQkJYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJTklMLAorCQkJCQkJCQkJCSZh Z2dfY29zdHMsCisJCQkJCQkJCQkJZE51bVBhcnRpYWxHcm91cHMpOworCisJCWFkZF9wYXJ0aWFs X3BhdGgocmVsX2dyb3VwZWQsIHBhdGgpOworCX0KK30KKwogLyoKICAqIG1ha2VfcmVsX2Zyb21f am9pbmxpc3QKICAqCSAgQnVpbGQgYWNjZXNzIHBhdGhzIHVzaW5nIGEgImpvaW5saXN0IiB0byBn dWlkZSB0aGUgam9pbiBwYXRoIHNlYXJjaC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9k ZS5jCmluZGV4IDM0OTFjM2FmMWMuLjk3N2MwZWE0ZWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BhdGhub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGF0aG5vZGUuYwpAQCAtMjcwOSw4ICsyNzA5LDcgQEAgY3JlYXRlX3Byb2plY3Rpb25fcGF0 aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfUmVzdWx0 OwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9kZS0+cGF0aC5wYXRodGFy Z2V0ID0gdGFyZ2V0OwotCS8qIEZvciBub3csIGFzc3VtZSB3ZSBhcmUgYWJvdmUgYW55IGpvaW5z LCBzbyBubyBwYXJhbWV0ZXJpemF0aW9uICovCi0JcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9 IE5VTEw7CisJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IHN1YnBhdGgtPnBhcmFtX2luZm87 CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsKIAlwYXRobm9kZS0+cGF0 aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbCAmJgogCQlzdWJwYXRoLT5w YXJhbGxlbF9zYWZlICYmCkBAIC0yOTYyLDggKzI5NjEsNyBAQCBjcmVhdGVfaW5jcmVtZW50YWxf c29ydF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJl bDsKIAkvKiBTb3J0IGRvZXNuJ3QgcHJvamVjdCwgc28gdXNlIHNvdXJjZSBwYXRoJ3MgcGF0aHRh cmdldCAqLwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJnZXQgPSBzdWJwYXRoLT5wYXRodGFyZ2V0 OwotCS8qIEZvciBub3csIGFzc3VtZSB3ZSBhcmUgYWJvdmUgYW55IGpvaW5zLCBzbyBubyBwYXJh bWV0ZXJpemF0aW9uICovCi0JcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IE5VTEw7CisJcGF0 aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IHN1YnBhdGgtPnBhcmFtX2luZm87CiAJcGF0aG5vZGUt PnBhdGgucGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9z YWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbCAmJgogCQlzdWJwYXRoLT5wYXJhbGxlbF9zYWZl OwpAQCAtMzAwOSw4ICszMDA3LDcgQEAgY3JlYXRlX3NvcnRfcGF0aChQbGFubmVySW5mbyAqcm9v dCwKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJLyogU29ydCBkb2Vzbid0IHByb2pl Y3QsIHNvIHVzZSBzb3VyY2UgcGF0aCdzIHBhdGh0YXJnZXQgKi8KIAlwYXRobm9kZS0+cGF0aC5w YXRodGFyZ2V0ID0gc3VicGF0aC0+cGF0aHRhcmdldDsKLQkvKiBGb3Igbm93LCBhc3N1bWUgd2Ug YXJlIGFib3ZlIGFueSBqb2lucywgc28gbm8gcGFyYW1ldGVyaXphdGlvbiAqLwotCXBhdGhub2Rl LT5wYXRoLnBhcmFtX2luZm8gPSBOVUxMOworCXBhdGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBz dWJwYXRoLT5wYXJhbV9pbmZvOwogCXBhdGhub2RlLT5wYXRoLnBhcmFsbGVsX2F3YXJlID0gZmFs c2U7CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfc2FmZSA9IHJlbC0+Y29uc2lkZXJfcGFyYWxs ZWwgJiYKIAkJc3VicGF0aC0+cGFyYWxsZWxfc2FmZTsKQEAgLTMxNjgsOCArMzE2NSw3IEBAIGNy ZWF0ZV9hZ2dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlw ZSA9IFRfQWdnOwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9kZS0+cGF0 aC5wYXRodGFyZ2V0ID0gdGFyZ2V0OwotCS8qIEZvciBub3csIGFzc3VtZSB3ZSBhcmUgYWJvdmUg YW55IGpvaW5zLCBzbyBubyBwYXJhbWV0ZXJpemF0aW9uICovCi0JcGF0aG5vZGUtPnBhdGgucGFy YW1faW5mbyA9IE5VTEw7CisJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IHN1YnBhdGgtPnBh cmFtX2luZm87CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsKIAlwYXRo bm9kZS0+cGF0aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbCAmJgogCQlz dWJwYXRoLT5wYXJhbGxlbF9zYWZlOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhzLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRleCBhZTdhOGVkNzQy Li40MTNjMjY5MDkxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAor KysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaApAQCAtNTgsNiArNTgsMTAgQEAgZXh0 ZXJuIHZvaWQgZ2VuZXJhdGVfZ2F0aGVyX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCQkJCQkJCSAgYm9vbCBvdmVycmlkZV9yb3dzKTsKIGV4dGVybiB2b2lkIGdl bmVyYXRlX3VzZWZ1bF9nYXRoZXJfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbCwKIAkJCQkJCQkJCQkgYm9vbCBvdmVycmlkZV9yb3dzKTsKK2V4dGVybiB2b2lkIGdlbmVy YXRlX2dyb3VwZWRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSAgIFJlbE9wdElu Zm8gKnJlbF9ncm91cGVkLAorCQkJCQkJCQkgICBSZWxPcHRJbmZvICpyZWxfcGxhaW4sCisJCQkJ CQkJCSAgIFJlbEFnZ0luZm8gKmFnZ19pbmZvKTsKIGV4dGVybiBpbnQJY29tcHV0ZV9wYXJhbGxl bF93b3JrZXIoUmVsT3B0SW5mbyAqcmVsLCBkb3VibGUgaGVhcF9wYWdlcywKIAkJCQkJCQkJCWRv dWJsZSBpbmRleF9wYWdlcywgaW50IG1heF93b3JrZXJzKTsKIGV4dGVybiB2b2lkIGNyZWF0ZV9w YXJ0aWFsX2JpdG1hcF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAot LSAKMi40My4wCgo= --000000000000b2a431061ac0ff96 Content-Type: application/octet-stream; name="v8-0006-Build-grouped-relations-out-of-base-relations.patch" Content-Disposition: attachment; filename="v8-0006-Build-grouped-relations-out-of-base-relations.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxcz7qb15 RnJvbSAxZTgxZjJmMjliZTdjYWJiMmQxMjU1NzQ3MzFhZDQwNzRjYWEyMjI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNjowNzozMiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjgg Ni85XSBCdWlsZCBncm91cGVkIHJlbGF0aW9ucyBvdXQgb2YgYmFzZSByZWxhdGlvbnMKClRoaXMg Y29tbWl0IGJ1aWxkcyBncm91cGVkIHJlbGF0aW9ucyBmb3IgZWFjaCBiYXNlIHJlbGF0aW9uIGlm IHBvc3NpYmxlLAphbmQgZ2VuZXJhdGVzIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciB0aGUgZ3JvdXBl ZCBiYXNlIHJlbGF0aW9ucy4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRo cy5jIHwgIDkxICsrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9yZWxub2RlLmMgIHwgMTAxICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAgICAgIHwgICA0ICsKIDMgZmlsZXMgY2hhbmdlZCwg MTk2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRl eCAwYzJmYWU5NjA4Li45MjE5ODE1ZTNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBh dGhzLmMKQEAgLTkzLDYgKzkzLDcgQEAgam9pbl9zZWFyY2hfaG9va190eXBlIGpvaW5fc2VhcmNo X2hvb2sgPSBOVUxMOwogCiBzdGF0aWMgdm9pZCBzZXRfYmFzZV9yZWxfY29uc2lkZXJfc3RhcnR1 cChQbGFubmVySW5mbyAqcm9vdCk7CiBzdGF0aWMgdm9pZCBzZXRfYmFzZV9yZWxfc2l6ZXMoUGxh bm5lckluZm8gKnJvb3QpOworc3RhdGljIHZvaWQgc2V0dXBfYmFzZV9ncm91cGVkX3JlbHMoUGxh bm5lckluZm8gKnJvb3QpOwogc3RhdGljIHZvaWQgc2V0X2Jhc2VfcmVsX3BhdGhsaXN0cyhQbGFu bmVySW5mbyAqcm9vdCk7CiBzdGF0aWMgdm9pZCBzZXRfcmVsX3NpemUoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCSBJbmRleCBydGksIFJhbmdlVGJsRW50cnkgKnJ0 ZSk7CkBAIC0xMTcsNiArMTE4LDcgQEAgc3RhdGljIHZvaWQgc2V0X2FwcGVuZF9yZWxfc2l6ZShQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQlJbmRleCBydGksIFJh bmdlVGJsRW50cnkgKnJ0ZSk7CiBzdGF0aWMgdm9pZCBzZXRfYXBwZW5kX3JlbF9wYXRobGlzdChQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJSW5kZXggcnRpLCBS YW5nZVRibEVudHJ5ICpydGUpOworc3RhdGljIHZvaWQgc2V0X2dyb3VwZWRfcmVsX3BhdGhsaXN0 KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpOwogc3RhdGljIHZvaWQgZ2VuZXJh dGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCQkJCQkJCQkJCSBMaXN0ICpsaXZlX2NoaWxkcmVscywKIAkJCQkJCQkJCQkgTGlzdCAqYWxs X2NoaWxkX3BhdGhrZXlzKTsKQEAgLTE4NSw2ICsxODcsMTEgQEAgbWFrZV9vbmVfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBMaXN0ICpqb2lubGlzdCkKIAkgKi8KIAlzZXRfYmFzZV9yZWxfc2l6ZXMo cm9vdCk7CiAKKwkvKgorCSAqIEJ1aWxkIGdyb3VwZWQgYmFzZSByZWxhdGlvbnMgZm9yIGVhY2gg YmFzZSByZWwgaWYgcG9zc2libGUuCisJICovCisJc2V0dXBfYmFzZV9ncm91cGVkX3JlbHMocm9v dCk7CisKIAkvKgogCSAqIFdlIHNob3VsZCBub3cgaGF2ZSBzaXplIGVzdGltYXRlcyBmb3IgZXZl cnkgYWN0dWFsIHRhYmxlIGludm9sdmVkIGluCiAJICogdGhlIHF1ZXJ5LCBhbmQgd2UgYWxzbyBr bm93IHdoaWNoIGlmIGFueSBoYXZlIGJlZW4gZGVsZXRlZCBmcm9tIHRoZQpAQCAtMzI2LDYgKzMz Myw1OSBAQCBzZXRfYmFzZV9yZWxfc2l6ZXMoUGxhbm5lckluZm8gKnJvb3QpCiAJfQogfQogCisv KgorICogc2V0dXBfYmFzZV9ncm91cGVkX3JlbHMKKyAqCSAgRm9yIGVhY2ggInBsYWluIiBiYXNl IHJlbGF0aW9uIGJ1aWxkIGEgZ3JvdXBlZCBiYXNlIHJlbGF0aW9uIGlmIGVhZ2VyCisgKgkgIGFn Z3JlZ2F0aW9uIGlzIHBvc3NpYmxlIGFuZCBpZiB0aGlzIHJlbGF0aW9uIGNhbiBwcm9kdWNlIGdy b3VwZWQgcGF0aHMuCisgKi8KK3N0YXRpYyB2b2lkCitzZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhQ bGFubmVySW5mbyAqcm9vdCkKK3sKKwlJbmRleAkJcnRpOworCisJLyoKKwkgKiBJZiB0aGVyZSBh cmUgbm8gYWdncmVnYXRlIGV4cHJlc3Npb25zIG9yIGdyb3VwaW5nIGV4cHJlc3Npb25zLCBlYWdl cgorCSAqIGFnZ3JlZ2F0aW9uIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdn X2NsYXVzZV9saXN0ID09IE5JTCB8fAorCQlyb290LT5ncm91cF9leHByX2xpc3QgPT0gTklMKQor CQlyZXR1cm47CisKKwkvKgorCSAqIEVhZ2VyIGFnZ3JlZ2F0aW9uIG9ubHkgbWFrZXMgc2Vuc2Ug aWYgdGhlcmUgYXJlIG11bHRpcGxlIGJhc2UgcmVscyBpbgorCSAqIHRoZSBxdWVyeS4KKwkgKi8K KwlpZiAoYm1zX21lbWJlcnNoaXAocm9vdC0+YWxsX2Jhc2VyZWxzKSAhPSBCTVNfTVVMVElQTEUp CisJCXJldHVybjsKKworCWZvciAocnRpID0gMTsgcnRpIDwgcm9vdC0+c2ltcGxlX3JlbF9hcnJh eV9zaXplOyBydGkrKykKKwl7CisJCVJlbE9wdEluZm8JICAgKnJlbCA9IHJvb3QtPnNpbXBsZV9y ZWxfYXJyYXlbcnRpXTsKKwkJUmVsT3B0SW5mbwkgICAqcmVsX2dyb3VwZWQ7CisJCVJlbEFnZ0lu Zm8JICAgKmFnZ19pbmZvOworCisJCS8qIHRoZXJlIG1heSBiZSBlbXB0eSBzbG90cyBjb3JyZXNw b25kaW5nIHRvIG5vbi1iYXNlcmVsIFJURXMgKi8KKwkJaWYgKHJlbCA9PSBOVUxMKQorCQkJY29u dGludWU7CisKKwkJQXNzZXJ0KHJlbC0+cmVsaWQgPT0gcnRpKTsgLyogc2FuaXR5IGNoZWNrIG9u IGFycmF5ICovCisKKwkJLyoKKwkJICogSWdub3JlIFJURXMgdGhhdCBhcmUgbm90IHNpbXBsZSBy ZWxzLiAgTm90ZSB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIKKwkJICogIm90aGVyIHJlbHMiIGhl cmUuCisJCSAqLworCQlpZiAoIUlTX1NJTVBMRV9SRUwocmVsKSkKKwkJCWNvbnRpbnVlOworCisJ CXJlbF9ncm91cGVkID0gYnVpbGRfc2ltcGxlX2dyb3VwZWRfcmVsKHJvb3QsIHJlbC0+cmVsaWQs ICZhZ2dfaW5mbyk7CisJCWlmIChyZWxfZ3JvdXBlZCkKKwkJeworCQkJLyogTWFrZSB0aGUgZ3Jv dXBlZCByZWxhdGlvbiBhdmFpbGFibGUgZm9yIGpvaW5pbmcuICovCisJCQlhZGRfZ3JvdXBlZF9y ZWwocm9vdCwgcmVsX2dyb3VwZWQsIGFnZ19pbmZvKTsKKwkJfQorCX0KK30KKwogLyoKICAqIHNl dF9iYXNlX3JlbF9wYXRobGlzdHMKICAqCSAgRmluZHMgYWxsIHBhdGhzIGF2YWlsYWJsZSBmb3Ig c2Nhbm5pbmcgZWFjaCBiYXNlLXJlbGF0aW9uIGVudHJ5LgpAQCAtNTYyLDYgKzYyMiwxNSBAQCBz ZXRfcmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJLyog Tm93IGZpbmQgdGhlIGNoZWFwZXN0IG9mIHRoZSBwYXRocyBmb3IgdGhpcyByZWwgKi8KIAlzZXRf Y2hlYXBlc3QocmVsKTsKIAorCS8qCisJICogSWYgYSBncm91cGVkIHJlbGF0aW9uIGZvciB0aGlz IHJlbCBleGlzdHMsIGJ1aWxkIHBhcnRpYWwgYWdncmVnYXRpb24KKwkgKiBwYXRocyBmb3IgaXQu CisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyBjYW4gb25seSBoYXBwZW4gYWZ0ZXIgd2UndmUgY2Fs bGVkIHNldF9jaGVhcGVzdCgpIGZvcgorCSAqIHRoaXMgYmFzZSByZWwsIGJlY2F1c2Ugd2UgbmVl ZCBpdHMgY2hlYXBlc3QgcGF0aHMuCisJICovCisJc2V0X2dyb3VwZWRfcmVsX3BhdGhsaXN0KHJv b3QsIHJlbCk7CisKICNpZmRlZiBPUFRJTUlaRVJfREVCVUcKIAlwcHJpbnQocmVsKTsKICNlbmRp ZgpAQCAtMTI4OSw2ICsxMzU4LDI4IEBAIHNldF9hcHBlbmRfcmVsX3BhdGhsaXN0KFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwocm9v dCwgcmVsLCBsaXZlX2NoaWxkcmVscyk7CiB9CiAKKy8qCisgKiBzZXRfZ3JvdXBlZF9yZWxfcGF0 aGxpc3QKKyAqCSAgSWYgYSBncm91cGVkIHJlbGF0aW9uIGZvciB0aGUgZ2l2ZW4gJ3JlbCcgZXhp c3RzLCBidWlsZCBwYXJ0aWFsCisgKgkgIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciBpdC4KKyAqLwor c3RhdGljIHZvaWQKK3NldF9ncm91cGVkX3JlbF9wYXRobGlzdChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcmVsKQoreworCVJlbE9wdEluZm8gICAqcmVsX2dyb3VwZWQ7CisJUmVsQWdn SW5mbyAgICphZ2dfaW5mbzsKKworCS8qIEFkZCBwYXRocyB0byB0aGUgZ3JvdXBlZCBiYXNlIHJl bGF0aW9uIGlmIG9uZSBleGlzdHMuICovCisJcmVsX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVs KHJvb3QsIHJlbC0+cmVsaWRzLAorCQkJCQkJCQkgICAmYWdnX2luZm8pOworCWlmIChyZWxfZ3Jv dXBlZCkKKwl7CisJCWdlbmVyYXRlX2dyb3VwZWRfcGF0aHMocm9vdCwgcmVsX2dyb3VwZWQsIHJl bCwKKwkJCQkJCQkgICBhZ2dfaW5mbyk7CisJCXNldF9jaGVhcGVzdChyZWxfZ3JvdXBlZCk7CisJ fQorfQorCiAKIC8qCiAgKiBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcmVsbm9kZS5jCmluZGV4IDI3Zjc3OWQ3NzguLmY4ZjBjMGZjNjkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxp bWl0cy5oPgogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0 aW1pemVyL2FwcGVuZGluZm8uaCIKQEAgLTI3LDEyICsyOCwxNSBAQAogI2luY2x1ZGUgIm9wdGlt aXplci9wYXRocy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFjZWhvbGRlci5oIgogI2luY2x1 ZGUgIm9wdGltaXplci9wbGFuY2F0LmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIK ICNpbmNsdWRlICJvcHRpbWl6ZXIvcmVzdHJpY3RpbmZvLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3RsaXN0LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX29wZXIuaCIKICNpbmNsdWRlICJwYXJz ZXIvcGFyc2VfcmVsYXRpb24uaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgog I2luY2x1ZGUgInV0aWxzL2hzZWFyY2guaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIK KyNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5oIgogCiAKIC8qCkBAIC00MTksNiArNDIzLDEwMyBA QCBidWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFJlbE9wdElu Zm8gKnBhcmVudCkKIAlyZXR1cm4gcmVsOwogfQogCisvKgorICogYnVpbGRfc2ltcGxlX2dyb3Vw ZWRfcmVsCisgKgkgIENvbnN0cnVjdCBhIG5ldyBSZWxPcHRJbmZvIGZvciBhIGdyb3VwZWQgYmFz ZSByZWxhdGlvbiBvdXQgb2YgYW4gZXhpc3RpbmcKKyAqCSAgbm9uLWdyb3VwZWQgYmFzZSByZWxh dGlvbi4KKyAqCisgKiBPbiBzdWNjZXNzLCB0aGUgbmV3IFJlbE9wdEluZm8gaXMgcmV0dXJuZWQg YW5kIHRoZSBjb3JyZXNwb25kaW5nIFJlbEFnZ0luZm8KKyAqIGlzIHN0b3JlZCBpbiAqYWdnX2lu Zm9fcC4KKyAqLworUmVsT3B0SW5mbyAqCitidWlsZF9zaW1wbGVfZ3JvdXBlZF9yZWwoUGxhbm5l ckluZm8gKnJvb3QsIGludCByZWxpZCwKKwkJCQkJCSBSZWxBZ2dJbmZvICoqYWdnX2luZm9fcCkK K3sKKwlSZWxPcHRJbmZvCSAgICpyZWxfcGxhaW47CisJUmVsT3B0SW5mbwkgICAqcmVsX2dyb3Vw ZWQ7CisJUmVsQWdnSW5mbwkgICAqYWdnX2luZm87CisKKwkvKgorCSAqIFdlIHNob3VsZCBoYXZl IGF2YWlsYWJsZSBhZ2dyZWdhdGUgZXhwcmVzc2lvbnMgYW5kIGdyb3VwaW5nIGV4cHJlc3Npb25z LAorCSAqIG90aGVyd2lzZSB3ZSBjYW5ub3QgcmVhY2ggaGVyZS4KKwkgKi8KKwlBc3NlcnQocm9v dC0+YWdnX2NsYXVzZV9saXN0ICE9IE5JTCk7CisJQXNzZXJ0KHJvb3QtPmdyb3VwX2V4cHJfbGlz dCAhPSBOSUwpOworCisJcmVsX3BsYWluID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtyZWxpZF07 CisJQXNzZXJ0KHJlbF9wbGFpbiAhPSBOVUxMKTsKKwlBc3NlcnQoSVNfU0lNUExFX1JFTChyZWxf cGxhaW4pKTsKKworCS8qIG5vdGhpbmcgdG8gZG8gZm9yIGR1bW15IHJlbCAqLworCWlmIChJU19E VU1NWV9SRUwocmVsX3BsYWluKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIFByZXBhcmUg dGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgdG8gY3JlYXRlIGdyb3VwZWQgcGF0aHMgZm9yIHRoaXMg YmFzZQorCSAqIHJlbGF0aW9uLgorCSAqLworCWFnZ19pbmZvID0gY3JlYXRlX3JlbF9hZ2dfaW5m byhyb290LCByZWxfcGxhaW4pOworCWlmIChhZ2dfaW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gTlVM TDsKKworCS8qIGJ1aWxkIGEgZ3JvdXBlZCByZWxhdGlvbiBvdXQgb2YgdGhlIHBsYWluIHJlbGF0 aW9uICovCisJcmVsX2dyb3VwZWQgPSBidWlsZF9ncm91cGVkX3JlbChyb290LCByZWxfcGxhaW4p OworCXJlbF9ncm91cGVkLT5yZWx0YXJnZXQgPSBhZ2dfaW5mby0+dGFyZ2V0OworCXJlbF9ncm91 cGVkLT5yb3dzID0gYWdnX2luZm8tPmdyb3VwZWRfcm93czsKKworCS8qIHJldHVybiB0aGUgUmVs QWdnSW5mbyBzdHJ1Y3R1cmUgKi8KKwkqYWdnX2luZm9fcCA9IGFnZ19pbmZvOworCisJcmV0dXJu IHJlbF9ncm91cGVkOworfQorCisvKgorICogYnVpbGRfZ3JvdXBlZF9yZWwKKyAqCSAgQnVpbGQg YSBncm91cGVkIHJlbGF0aW9uIGJ5IGZsYXQgY29weWluZyBhIHBsYWluIHJlbGF0aW9uIGFuZCBy ZXNldHRpbmcKKyAqCSAgdGhlIG5lY2Vzc2FyeSBmaWVsZHMuCisgKi8KK1JlbE9wdEluZm8gKgor YnVpbGRfZ3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbF9wbGFp bikKK3sKKwlSZWxPcHRJbmZvICAgKnJlbF9ncm91cGVkOworCisJcmVsX2dyb3VwZWQgPSBtYWtl Tm9kZShSZWxPcHRJbmZvKTsKKwltZW1jcHkocmVsX2dyb3VwZWQsIHJlbF9wbGFpbiwgc2l6ZW9m KFJlbE9wdEluZm8pKTsKKworCS8qCisJICogY2xlYXIgcGF0aCBpbmZvCisJICovCisJcmVsX2dy b3VwZWQtPnBhdGhsaXN0ID0gTklMOworCXJlbF9ncm91cGVkLT5wcGlsaXN0ID0gTklMOworCXJl bF9ncm91cGVkLT5wYXJ0aWFsX3BhdGhsaXN0ID0gTklMOworCXJlbF9ncm91cGVkLT5jaGVhcGVz dF9zdGFydHVwX3BhdGggPSBOVUxMOworCXJlbF9ncm91cGVkLT5jaGVhcGVzdF90b3RhbF9wYXRo ID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+Y2hlYXBlc3RfdW5pcXVlX3BhdGggPSBOVUxMOworCXJl bF9ncm91cGVkLT5jaGVhcGVzdF9wYXJhbWV0ZXJpemVkX3BhdGhzID0gTklMOworCisJLyoKKwkg KiBjbGVhciBwYXJ0aXRpb24gaW5mbworCSAqLworCXJlbF9ncm91cGVkLT5wYXJ0X3NjaGVtZSA9 IE5VTEw7CisJcmVsX2dyb3VwZWQtPm5wYXJ0cyA9IC0xOworCXJlbF9ncm91cGVkLT5ib3VuZGlu Zm8gPSBOVUxMOworCXJlbF9ncm91cGVkLT5wYXJ0Ym91bmRzX21lcmdlZCA9IGZhbHNlOworCXJl bF9ncm91cGVkLT5wYXJ0aXRpb25fcXVhbCA9IE5JTDsKKwlyZWxfZ3JvdXBlZC0+cGFydF9yZWxz ID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+bGl2ZV9wYXJ0cyA9IE5VTEw7CisJcmVsX2dyb3VwZWQt PmFsbF9wYXJ0cmVscyA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPnBhcnRleHBycyA9IE5VTEw7CisJ cmVsX2dyb3VwZWQtPm51bGxhYmxlX3BhcnRleHBycyA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPmNv bnNpZGVyX3BhcnRpdGlvbndpc2Vfam9pbiA9IGZhbHNlOworCisJLyoKKwkgKiBjbGVhciBzaXpl IGVzdGltYXRlcworCSAqLworCXJlbF9ncm91cGVkLT5yb3dzID0gMDsKKworCXJldHVybiByZWxf Z3JvdXBlZDsKK30KKwogLyoKICAqIGZpbmRfYmFzZV9yZWwKICAqCSAgRmluZCBhIGJhc2Ugb3Ig b3RoZXJyZWwgcmVsYXRpb24gZW50cnksIHdoaWNoIG11c3QgYWxyZWFkeSBleGlzdC4KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhub2RlLmgKaW5kZXggMDJkYTY4YTc1My4uNTI1NDgxZjI5NiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhub2RlLmgKQEAgLTMxMCw2ICszMTAsMTAgQEAgZXh0ZXJuIHZvaWQgc2V0dXBf c2ltcGxlX3JlbF9hcnJheXMoUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIHZvaWQgZXhwYW5k X3BsYW5uZXJfYXJyYXlzKFBsYW5uZXJJbmZvICpyb290LCBpbnQgYWRkX3NpemUpOwogZXh0ZXJu IFJlbE9wdEluZm8gKmJ1aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxp ZCwKIAkJCQkJCQkJCVJlbE9wdEluZm8gKnBhcmVudCk7CitleHRlcm4gUmVsT3B0SW5mbyAqYnVp bGRfc2ltcGxlX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsCisJCQkJ CQkJCQkJCVJlbEFnZ0luZm8gKiphZ2dfaW5mb19wKTsKK2V4dGVybiBSZWxPcHRJbmZvICpidWls ZF9ncm91cGVkX3JlbChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCSBSZWxPcHRJbmZvICpy ZWxfcGxhaW4pOwogZXh0ZXJuIFJlbE9wdEluZm8gKmZpbmRfYmFzZV9yZWwoUGxhbm5lckluZm8g KnJvb3QsIGludCByZWxpZCk7CiBleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9iYXNlX3JlbF9ub2Vy cihQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkKTsKIGV4dGVybiBSZWxPcHRJbmZvICpmaW5k X2Jhc2VfcmVsX2lnbm9yZV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQpOwotLSAK Mi40My4wCgo= --000000000000b2a431061ac0ff96 Content-Type: application/octet-stream; name="v8-0007-Build-grouped-relations-out-of-join-relations.patch" Content-Disposition: attachment; filename="v8-0007-Build-grouped-relations-out-of-join-relations.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxcz81kj6 RnJvbSAxMGE1ZDZiNGMxNDg0MTYwZDVlZTZhMWU2OTU5ZjBmZTM0ZWVhYjIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNjowODoyMyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjgg Ny85XSBCdWlsZCBncm91cGVkIHJlbGF0aW9ucyBvdXQgb2Ygam9pbiByZWxhdGlvbnMKClRoaXMg Y29tbWl0IGJ1aWxkcyBncm91cGVkIHJlbGF0aW9ucyBmb3IgZWFjaCBqdXN0LXByb2Nlc3NlZCBq b2luCnJlbGF0aW9uIGlmIHBvc3NpYmxlLCBhbmQgZ2VuZXJhdGVzIGFnZ3JlZ2F0aW9uIHBhdGhz IGZvciB0aGUgZ3JvdXBlZApqb2luIHJlbGF0aW9ucy4KClRoZSBjaGFuZ2VzIG1hZGUgdG8gbWFr ZV9qb2luX3JlbCgpIGFyZSByZWxhdGl2ZWx5IG1pbm9yLCB3aXRoIHRoZQphZGRpdGlvbiBvZiBh IG5ldyBmdW5jdGlvbiBtYWtlX2dyb3VwZWRfam9pbl9yZWwoKSwgd2hpY2ggZmluZHMgb3IKY3Jl YXRlcyBhIGdyb3VwZWQgcmVsYXRpb24gZm9yIHRoZSBqdXN0LXByb2Nlc3NlZCBqb2lucmVsLCBh bmQgZ2VuZXJhdGVzCmdyb3VwZWQgcGF0aHMgYnkgam9pbmluZyBhIGdyb3VwZWQgaW5wdXQgcmVs YXRpb24gd2l0aCBhIG5vbi1ncm91cGVkCmlucHV0IHJlbGF0aW9uLgoKVGhlIG90aGVyIHdheSB0 byBnZW5lcmF0ZSBncm91cGVkIHBhdGhzIGlzIGJ5IGFkZGluZyBzb3J0ZWQgYW5kIGhhc2hlZApw YXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBvZiBwYXRocyBvZiB0aGUgam9pbnJlbC4g IFRoaXMgb2NjdXJzCmluIHN0YW5kYXJkX2pvaW5fc2VhcmNoKCksIGFmdGVyIHdlJ3ZlIHJ1biBz ZXRfY2hlYXBlc3QoKSBmb3IgdGhlCmpvaW5yZWwuICBUaGUgcmVhc29uIGZvciBwZXJmb3JtaW5n IHRoaXMgc3RlcCBhZnRlciBzZXRfY2hlYXBlc3QoKSBpcwp0aGF0IHdlIG5lZWQgdG8ga25vdyB0 aGUgam9pbnJlbCdzIGNoZWFwZXN0IHBhdGhzIChzZWUKZ2VuZXJhdGVfZ3JvdXBlZF9wYXRocygp KS4KClRoaXMgcGF0Y2ggYWxzbyBtYWtlcyB0aGUgZ3JvdXBlZCByZWxhdGlvbiBmb3IgdGhlIHRv cG1vc3Qgam9pbiByZWwgYWN0CmFzIHRoZSB1cHBlciByZWwgcmVwcmVzZW50aW5nIHRoZSByZXN1 bHQgb2YgcGFydGlhbCBhZ2dyZWdhdGlvbiwgc28gdGhhdAp3ZSBjYW4gYWRkIHRoZSBmaW5hbCBh Z2dyZWdhdGlvbiBvbiB0b3Agb2YgdGhhdC4gIEFkZGl0aW9uYWxseSwgdGhpcwpwYXRjaCBleHRl bmRzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGVhZ2VyIGFnZ3JlZ2F0aW9uIHRvIHdvcmsgd2l0aApw YXJ0aXRpb253aXNlIGpvaW4gYW5kIGdlcW8uCgpUaGlzIHBhdGNoIGFsc28gbWFrZXMgZWFnZXIg YWdncmVnYXRpb24gd29yayB3aXRoIG91dGVyIGpvaW5zLiAgV2l0aApvdXRlciBqb2lucywgdGhl IGFnZ3JlZ2F0ZSBjYW5ub3QgYmUgcHVzaGVkIGRvd24gaWYgYW55IGNvbHVtbgpyZWZlcmVuY2Vk IGJ5IGdyb3VwaW5nIGV4cHJlc3Npb25zIG9yIGFnZ3JlZ2F0ZSBmdW5jdGlvbnMgaXMgbnVsbGFi bGUgYnkKYW4gb3V0ZXIgam9pbiBhYm92ZSB0aGUgcmVsYXRpb24gdG8gd2hpY2ggd2Ugd2FudCB0 byBhcHBseSB0aGUgcGFydGlhbAphZ2dyZWdhdGlvbi4gIFRoYW5rcyB0byBUb20ncyBvdXRlci1q b2luLWF3YXJlLVZhciBpbmZyYXN0cnVjdHVyZSwgd2UKY2FuIGVhc2lseSBpZGVudGlmeSBzdWNo IHNpdHVhdGlvbnMgYW5kIHN1YnNlcXVlbnRseSByZWZyYWluIGZyb20KcHVzaGluZyBkb3duIHRo ZSBhZ2dyZWdhdGVzLgoKU3RhcnRpbmcgZnJvbSB0aGlzIHBhdGNoLCB5b3Ugc2hvdWxkIGJlIGFi bGUgdG8gc2VlIHBsYW5zIHdpdGggZWFnZXIKYWdncmVnYXRpb24uCi0tLQogc3JjL2JhY2tlbmQv b3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMgIHwgIDg0ICsrKysrKysrKysrLS0tLQogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgIHwgIDQ4ICsrKysrKysrKwogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYyAgIHwgMTM2ICsrKysrKysrKysrKysrKysr KysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgMTAwICsr KysrKysrKysrKy0tLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMg fCAgNjAgKysrKysrKysrKysKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyAg ICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgfCAgIDYg LS0KIDcgZmlsZXMgY2hhbmdlZCwgMzg1IGluc2VydGlvbnMoKyksIDUxIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZhbC5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMKaW5kZXggMTE0MTE1Njg5OS4uMjc4 ODU3ZDc2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFs LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMKQEAgLTYwLDgg KzYwLDEyIEBAIGdlcW9fZXZhbChQbGFubmVySW5mbyAqcm9vdCwgR2VuZSAqdG91ciwgaW50IG51 bV9nZW5lKQogCU1lbW9yeUNvbnRleHQgb2xkY3h0OwogCVJlbE9wdEluZm8gKmpvaW5yZWw7CiAJ Q29zdAkJZml0bmVzczsKLQlpbnQJCQlzYXZlbGVuZ3RoOwotCXN0cnVjdCBIVEFCICpzYXZlaGFz aDsKKwlpbnQJCQlzYXZlbGVuZ3RoX2pvaW5fcmVsOworCXN0cnVjdCBIVEFCICpzYXZlaGFzaF9q b2luX3JlbDsKKwlpbnQJCQlzYXZlbGVuZ3RoX2dyb3VwZWRfcmVsOworCXN0cnVjdCBIVEFCICpz YXZlaGFzaF9ncm91cGVkX3JlbDsKKwlpbnQJCQlzYXZlbGVuZ3RoX2dyb3VwZWRfaW5mbzsKKwlz dHJ1Y3QgSFRBQiAqc2F2ZWhhc2hfZ3JvdXBlZF9pbmZvOwogCiAJLyoKIAkgKiBDcmVhdGUgYSBw cml2YXRlIG1lbW9yeSBjb250ZXh0IHRoYXQgd2lsbCBob2xkIGFsbCB0ZW1wIHN0b3JhZ2UKQEAg LTc4LDI1ICs4MiwzOCBAQCBnZXFvX2V2YWwoUGxhbm5lckluZm8gKnJvb3QsIEdlbmUgKnRvdXIs IGludCBudW1fZ2VuZSkKIAlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8obXljb250ZXh0 KTsKIAogCS8qCi0JICogZ2ltbWVfdHJlZSB3aWxsIGFkZCBlbnRyaWVzIHRvIHJvb3QtPmpvaW5f cmVsX2xpc3QsIHdoaWNoIG1heSBvciBtYXkKLQkgKiBub3QgYWxyZWFkeSBjb250YWluIHNvbWUg ZW50cmllcy4gIFRoZSBuZXdseSBhZGRlZCBlbnRyaWVzIHdpbGwgYmUKLQkgKiByZWN5Y2xlZCBi eSB0aGUgTWVtb3J5Q29udGV4dERlbGV0ZSBiZWxvdywgc28gd2UgbXVzdCBlbnN1cmUgdGhhdCB0 aGUKLQkgKiBsaXN0IGlzIHJlc3RvcmVkIHRvIGl0cyBmb3JtZXIgc3RhdGUgYmVmb3JlIGV4aXRp bmcuICBXZSBjYW4gZG8gdGhpcyBieQotCSAqIHRydW5jYXRpbmcgdGhlIGxpc3QgdG8gaXRzIG9y aWdpbmFsIGxlbmd0aC4gIE5PVEUgdGhpcyBhc3N1bWVzIHRoYXQgYW55Ci0JICogYWRkZWQgZW50 cmllcyBhcmUgYXBwZW5kZWQgYXQgdGhlIGVuZCEKKwkgKiBnaW1tZV90cmVlIHdpbGwgYWRkIGVu dHJpZXMgdG8gcm9vdC0+am9pbl9yZWxfbGlzdCwgcm9vdC0+YWdnX2luZm9fbGlzdAorCSAqIGFu ZCByb290LT51cHBlcl9yZWxzW1VQUEVSUkVMX1BBUlRJQUxfR1JPVVBfQUdHXSwgd2hpY2ggbWF5 IG9yIG1heSBub3QKKwkgKiBhbHJlYWR5IGNvbnRhaW4gc29tZSBlbnRyaWVzLiAgVGhlIG5ld2x5 IGFkZGVkIGVudHJpZXMgd2lsbCBiZSByZWN5Y2xlZAorCSAqIGJ5IHRoZSBNZW1vcnlDb250ZXh0 RGVsZXRlIGJlbG93LCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0IGVhY2ggbGlzdCBvZgorCSAqIHRo ZSBSZWxJbmZvTGlzdCBzdHJ1Y3R1cmVzIGlzIHJlc3RvcmVkIHRvIGl0cyBmb3JtZXIgc3RhdGUg YmVmb3JlCisJICogZXhpdGluZy4gIFdlIGNhbiBkbyB0aGlzIGJ5IHRydW5jYXRpbmcgZWFjaCBs aXN0IHRvIGl0cyBvcmlnaW5hbCBsZW5ndGguCisJICogTk9URSB0aGlzIGFzc3VtZXMgdGhhdCBh bnkgYWRkZWQgZW50cmllcyBhcmUgYXBwZW5kZWQgYXQgdGhlIGVuZCEKIAkgKgotCSAqIFdlIGFs c28gbXVzdCB0YWtlIGNhcmUgbm90IHRvIG1lc3MgdXAgdGhlIG91dGVyIGpvaW5fcmVsX2xpc3Qt Pmhhc2gsIGlmCi0JICogdGhlcmUgaXMgb25lLiAgV2UgY2FuIGRvIHRoaXMgYnkganVzdCB0ZW1w b3JhcmlseSBzZXR0aW5nIHRoZSBsaW5rIHRvCi0JICogTlVMTC4gIChJZiB3ZSBhcmUgZGVhbGlu ZyB3aXRoIGVub3VnaCBqb2luIHJlbHMsIHdoaWNoIHdlIHZlcnkgbGlrZWx5Ci0JICogYXJlLCBh IG5ldyBoYXNoIHRhYmxlIHdpbGwgZ2V0IGJ1aWx0IGFuZCB1c2VkIGxvY2FsbHkuKQorCSAqIFdl IGFsc28gbXVzdCB0YWtlIGNhcmUgbm90IHRvIG1lc3MgdXAgdGhlIG91dGVyIGhhc2ggdGFibGVz IG9mIHRoZQorCSAqIFJlbEluZm9MaXN0IHN0cnVjdHVyZXMsIGlmIGFueS4gIFdlIGNhbiBkbyB0 aGlzIGJ5IGp1c3QgdGVtcG9yYXJpbHkKKwkgKiBzZXR0aW5nIGVhY2ggbGluayB0byBOVUxMLiAg KElmIHdlIGFyZSBkZWFsaW5nIHdpdGggZW5vdWdoIGpvaW4gcmVscywKKwkgKiB3aGljaCB3ZSB2 ZXJ5IGxpa2VseSBhcmUsIG5ldyBoYXNoIHRhYmxlcyB3aWxsIGdldCBidWlsdCBhbmQgdXNlZAor CSAqIGxvY2FsbHkuKQogCSAqCiAJICogam9pbl9yZWxfbGV2ZWxbXSBzaG91bGRuJ3QgYmUgaW4g dXNlLCBzbyBqdXN0IEFzc2VydCBpdCBpc24ndC4KIAkgKi8KLQlzYXZlbGVuZ3RoID0gbGlzdF9s ZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMpOwotCXNhdmVoYXNoID0gcm9vdC0+am9p bl9yZWxfbGlzdC0+aGFzaDsKKwlzYXZlbGVuZ3RoX2pvaW5fcmVsID0gbGlzdF9sZW5ndGgocm9v dC0+am9pbl9yZWxfbGlzdC0+aXRlbXMpOworCXNhdmVoYXNoX2pvaW5fcmVsID0gcm9vdC0+am9p bl9yZWxfbGlzdC0+aGFzaDsKKworCXNhdmVsZW5ndGhfZ3JvdXBlZF9yZWwgPQorCQlsaXN0X2xl bmd0aChyb290LT51cHBlcl9yZWxzW1VQUEVSUkVMX1BBUlRJQUxfR1JPVVBfQUdHXS5pdGVtcyk7 CisJc2F2ZWhhc2hfZ3JvdXBlZF9yZWwgPQorCQlyb290LT51cHBlcl9yZWxzW1VQUEVSUkVMX1BB UlRJQUxfR1JPVVBfQUdHXS5oYXNoOworCisJc2F2ZWxlbmd0aF9ncm91cGVkX2luZm8gPSBsaXN0 X2xlbmd0aChyb290LT5hZ2dfaW5mb19saXN0LT5pdGVtcyk7CisJc2F2ZWhhc2hfZ3JvdXBlZF9p bmZvID0gcm9vdC0+YWdnX2luZm9fbGlzdC0+aGFzaDsKKwogCUFzc2VydChyb290LT5qb2luX3Jl bF9sZXZlbCA9PSBOVUxMKTsKIAogCXJvb3QtPmpvaW5fcmVsX2xpc3QtPmhhc2ggPSBOVUxMOwor CXJvb3QtPnVwcGVyX3JlbHNbVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9BR0ddLmhhc2ggPSBOVUxM OworCXJvb3QtPmFnZ19pbmZvX2xpc3QtPmhhc2ggPSBOVUxMOwogCiAJLyogY29uc3RydWN0IHRo ZSBiZXN0IHBhdGggZm9yIHRoZSBnaXZlbiBjb21iaW5hdGlvbiBvZiByZWxhdGlvbnMgKi8KIAlq b2lucmVsID0gZ2ltbWVfdHJlZShyb290LCB0b3VyLCBudW1fZ2VuZSk7CkBAIC0xMTgsMTIgKzEz NSwyMiBAQCBnZXFvX2V2YWwoUGxhbm5lckluZm8gKnJvb3QsIEdlbmUgKnRvdXIsIGludCBudW1f Z2VuZSkKIAkJZml0bmVzcyA9IERCTF9NQVg7CiAKIAkvKgotCSAqIFJlc3RvcmUgam9pbl9yZWxf bGlzdCB0byBpdHMgZm9ybWVyIHN0YXRlLCBhbmQgcHV0IGJhY2sgb3JpZ2luYWwKLQkgKiBoYXNo dGFibGUgaWYgYW55LgorCSAqIFJlc3RvcmUgZWFjaCBvZiB0aGUgbGlzdCBpbiBqb2luX3JlbF9s aXN0LCBhZ2dfaW5mb19saXN0IGFuZAorCSAqIHVwcGVyX3JlbHNbVVBQRVJSRUxfUEFSVElBTF9H Uk9VUF9BR0ddIHRvIGl0cyBmb3JtZXIgc3RhdGUsIGFuZCBwdXQgYmFjaworCSAqIG9yaWdpbmFs IGhhc2h0YWJsZSBpZiBhbnkuCiAJICovCiAJcm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMgPSBs aXN0X3RydW5jYXRlKHJvb3QtPmpvaW5fcmVsX2xpc3QtPml0ZW1zLAotCQkJCQkJCQkJCQkgICBz YXZlbGVuZ3RoKTsKLQlyb290LT5qb2luX3JlbF9saXN0LT5oYXNoID0gc2F2ZWhhc2g7CisJCQkJ CQkJCQkJCSAgIHNhdmVsZW5ndGhfam9pbl9yZWwpOworCXJvb3QtPmpvaW5fcmVsX2xpc3QtPmhh c2ggPSBzYXZlaGFzaF9qb2luX3JlbDsKKworCXJvb3QtPnVwcGVyX3JlbHNbVVBQRVJSRUxfUEFS VElBTF9HUk9VUF9BR0ddLml0ZW1zID0KKwkJbGlzdF90cnVuY2F0ZShyb290LT51cHBlcl9yZWxz W1VQUEVSUkVMX1BBUlRJQUxfR1JPVVBfQUdHXS5pdGVtcywKKwkJCQkJICBzYXZlbGVuZ3RoX2dy b3VwZWRfcmVsKTsKKwlyb290LT51cHBlcl9yZWxzW1VQUEVSUkVMX1BBUlRJQUxfR1JPVVBfQUdH XS5oYXNoID0gc2F2ZWhhc2hfZ3JvdXBlZF9yZWw7CisKKwlyb290LT5hZ2dfaW5mb19saXN0LT5p dGVtcyA9IGxpc3RfdHJ1bmNhdGUocm9vdC0+YWdnX2luZm9fbGlzdC0+aXRlbXMsCisJCQkJCQkJ CQkJCSAgIHNhdmVsZW5ndGhfZ3JvdXBlZF9pbmZvKTsKKwlyb290LT5hZ2dfaW5mb19saXN0LT5o YXNoID0gc2F2ZWhhc2hfZ3JvdXBlZF9pbmZvOwogCiAJLyogcmVsZWFzZSBhbGwgdGhlIG1lbW9y eSBhY3F1aXJlZCB3aXRoaW4gZ2ltbWVfdHJlZSAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjeHQpOwpAQCAtMjc5LDYgKzMwNiwyNyBAQCBtZXJnZV9jbHVtcChQbGFubmVySW5mbyAqcm9v dCwgTGlzdCAqY2x1bXBzLCBDbHVtcCAqbmV3X2NsdW1wLCBpbnQgbnVtX2dlbmUsCiAJCQkJLyog RmluZCBhbmQgc2F2ZSB0aGUgY2hlYXBlc3QgcGF0aHMgZm9yIHRoaXMgam9pbnJlbCAqLwogCQkJ CXNldF9jaGVhcGVzdChqb2lucmVsKTsKIAorCQkJCS8qCisJCQkJICogRXhjZXB0IGZvciB0aGUg dG9wbW9zdCBzY2FuL2pvaW4gcmVsLCBjb25zaWRlciBnZW5lcmF0aW5nCisJCQkJICogcGFydGlh bCBhZ2dyZWdhdGlvbiBwYXRocyBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24gb24gdG9wIG9mIHRo ZQorCQkJCSAqIHBhdGhzIG9mIHRoaXMgcmVsLiAgQWZ0ZXIgdGhhdCwgd2UncmUgZG9uZSBjcmVh dGluZyBwYXRocyBmb3IKKwkJCQkgKiB0aGUgZ3JvdXBlZCByZWxhdGlvbiwgc28gcnVuIHNldF9j aGVhcGVzdCgpLgorCQkJCSAqLworCQkJCWlmICghYm1zX2VxdWFsKGpvaW5yZWwtPnJlbGlkcywg cm9vdC0+YWxsX3F1ZXJ5X3JlbHMpKQorCQkJCXsKKwkJCQkJUmVsT3B0SW5mbyAgICpyZWxfZ3Jv dXBlZDsKKwkJCQkJUmVsQWdnSW5mbyAgICphZ2dfaW5mbzsKKworCQkJCQlyZWxfZ3JvdXBlZCA9 IGZpbmRfZ3JvdXBlZF9yZWwocm9vdCwgam9pbnJlbC0+cmVsaWRzLAorCQkJCQkJCQkJCQkJICAg JmFnZ19pbmZvKTsKKwkJCQkJaWYgKHJlbF9ncm91cGVkKQorCQkJCQl7CisJCQkJCQlnZW5lcmF0 ZV9ncm91cGVkX3BhdGhzKHJvb3QsIHJlbF9ncm91cGVkLCBqb2lucmVsLAorCQkJCQkJCQkJCQkg ICBhZ2dfaW5mbyk7CisJCQkJCQlzZXRfY2hlYXBlc3QocmVsX2dyb3VwZWQpOworCQkJCQl9CisJ CQkJfQorCiAJCQkJLyogQWJzb3JiIG5ldyBjbHVtcCBpbnRvIG9sZCAqLwogCQkJCW9sZF9jbHVt cC0+am9pbnJlbCA9IGpvaW5yZWw7CiAJCQkJb2xkX2NsdW1wLT5zaXplICs9IG5ld19jbHVtcC0+ c2l6ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IDkyMTk4MTVlM2Qu LjM1OWVlZTM0ODYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBh dGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAtMzg1 NCw2ICszODU0LDEwIEBAIHN0YW5kYXJkX2pvaW5fc2VhcmNoKFBsYW5uZXJJbmZvICpyb290LCBp bnQgbGV2ZWxzX25lZWRlZCwgTGlzdCAqaW5pdGlhbF9yZWxzKQogCQkgKgogCQkgKiBBZnRlciB0 aGF0LCB3ZSdyZSBkb25lIGNyZWF0aW5nIHBhdGhzIGZvciB0aGUgam9pbnJlbCwgc28gcnVuCiAJ CSAqIHNldF9jaGVhcGVzdCgpLgorCQkgKgorCQkgKiBJbiBhZGRpdGlvbiwgd2UgYWxzbyBydW4g Z2VuZXJhdGVfZ3JvdXBlZF9wYXRocygpIGZvciB0aGUgZ3JvdXBlZAorCQkgKiByZWxhdGlvbiBv ZiBlYWNoIGp1c3QtcHJvY2Vzc2VkIGpvaW5yZWwsIGFuZCBydW4gc2V0X2NoZWFwZXN0KCkgZm9y CisJCSAqIHRoZSBncm91cGVkIHJlbGF0aW9uIGFmdGVyd2FyZHMuCiAJCSAqLwogCQlmb3JlYWNo KGxjLCByb290LT5qb2luX3JlbF9sZXZlbFtsZXZdKQogCQl7CkBAIC0zODc0LDYgKzM4NzgsMjcg QEAgc3RhbmRhcmRfam9pbl9zZWFyY2goUGxhbm5lckluZm8gKnJvb3QsIGludCBsZXZlbHNfbmVl ZGVkLCBMaXN0ICppbml0aWFsX3JlbHMpCiAJCQkvKiBGaW5kIGFuZCBzYXZlIHRoZSBjaGVhcGVz dCBwYXRocyBmb3IgdGhpcyByZWwgKi8KIAkJCXNldF9jaGVhcGVzdChyZWwpOwogCisJCQkvKgor CQkJICogRXhjZXB0IGZvciB0aGUgdG9wbW9zdCBzY2FuL2pvaW4gcmVsLCBjb25zaWRlciBnZW5l cmF0aW5nCisJCQkgKiBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciB0aGUgZ3JvdXBlZCBy ZWxhdGlvbiBvbiB0b3Agb2YgdGhlCisJCQkgKiBwYXRocyBvZiB0aGlzIHJlbC4gIEFmdGVyIHRo YXQsIHdlJ3JlIGRvbmUgY3JlYXRpbmcgcGF0aHMgZm9yCisJCQkgKiB0aGUgZ3JvdXBlZCByZWxh dGlvbiwgc28gcnVuIHNldF9jaGVhcGVzdCgpLgorCQkJICovCisJCQlpZiAoIWJtc19lcXVhbChy ZWwtPnJlbGlkcywgcm9vdC0+YWxsX3F1ZXJ5X3JlbHMpKQorCQkJeworCQkJCVJlbE9wdEluZm8g ICAqcmVsX2dyb3VwZWQ7CisJCQkJUmVsQWdnSW5mbyAgICphZ2dfaW5mbzsKKworCQkJCXJlbF9n cm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCByZWwtPnJlbGlkcywKKwkJCQkJCQkJCQkJ ICAgJmFnZ19pbmZvKTsKKwkJCQlpZiAocmVsX2dyb3VwZWQpCisJCQkJeworCQkJCQlnZW5lcmF0 ZV9ncm91cGVkX3BhdGhzKHJvb3QsIHJlbF9ncm91cGVkLCByZWwsCisJCQkJCQkJCQkJICAgYWdn X2luZm8pOworCQkJCQlzZXRfY2hlYXBlc3QocmVsX2dyb3VwZWQpOworCQkJCX0KKwkJCX0KKwog I2lmZGVmIE9QVElNSVpFUl9ERUJVRwogCQkJcHByaW50KHJlbCk7CiAjZW5kaWYKQEAgLTQ3NDIs NiArNDc2NywyOSBAQCBnZW5lcmF0ZV9wYXJ0aXRpb253aXNlX2pvaW5fcGF0aHMoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKIAkJaWYgKElTX0RVTU1ZX1JFTChjaGlsZF9yZWwp KQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogRXhjZXB0IGZvciB0aGUgdG9wbW9zdCBzY2Fu L2pvaW4gcmVsLCBjb25zaWRlciBnZW5lcmF0aW5nIHBhcnRpYWwKKwkJICogYWdncmVnYXRpb24g cGF0aHMgZm9yIHRoZSBncm91cGVkIHJlbGF0aW9uIG9uIHRvcCBvZiB0aGUgcGF0aHMgb2YKKwkJ ICogdGhpcyBwYXJ0aXRpb25lZCBjaGlsZC1qb2luLiAgQWZ0ZXIgdGhhdCwgd2UncmUgZG9uZSBj cmVhdGluZyBwYXRocworCQkgKiBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24sIHNvIHJ1biBzZXRf Y2hlYXBlc3QoKS4KKwkJICovCisJCWlmICghYm1zX2VxdWFsKElTX09USEVSX1JFTChyZWwpID8K KwkJCQkJICAgcmVsLT50b3BfcGFyZW50X3JlbGlkcyA6IHJlbC0+cmVsaWRzLAorCQkJCQkgICBy b290LT5hbGxfcXVlcnlfcmVscykpCisJCXsKKwkJCVJlbE9wdEluZm8gICAqcmVsX2dyb3VwZWQ7 CisJCQlSZWxBZ2dJbmZvICAgKmFnZ19pbmZvOworCisJCQlyZWxfZ3JvdXBlZCA9IGZpbmRfZ3Jv dXBlZF9yZWwocm9vdCwgY2hpbGRfcmVsLT5yZWxpZHMsCisJCQkJCQkJCQkJICAgJmFnZ19pbmZv KTsKKwkJCWlmIChyZWxfZ3JvdXBlZCkKKwkJCXsKKwkJCQlnZW5lcmF0ZV9ncm91cGVkX3BhdGhz KHJvb3QsIHJlbF9ncm91cGVkLCBjaGlsZF9yZWwsCisJCQkJCQkJCQkgICBhZ2dfaW5mbyk7CisJ CQkJc2V0X2NoZWFwZXN0KHJlbF9ncm91cGVkKTsKKwkJCX0KKwkJfQorCiAjaWZkZWYgT1BUSU1J WkVSX0RFQlVHCiAJCXBwcmludChjaGlsZF9yZWwpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvam9pbnJlbHMuYwppbmRleCBkYjQ3NWUyNWIxLi43OGE4OGM5ZDNiIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTE2LDExICsxNiwxMyBAQAogCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2FwcGVuZGluZm8uaCIKKyNpbmNs dWRlICJvcHRpbWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgIm9wdGltaXplci9qb2luaW5mby5oIgog I2luY2x1ZGUgIm9wdGltaXplci9wYXRobm9kZS5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wYXRo cy5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0Ym91bmRzLmgiCiAjaW5jbHVkZSAidXRp bHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5oIgogCiAKIHN0YXRpYyB2 b2lkIG1ha2VfcmVsc19ieV9jbGF1c2Vfam9pbnMoUGxhbm5lckluZm8gKnJvb3QsCkBAIC0zNSw2 ICszNyw5IEBAIHN0YXRpYyBib29sIGhhc19sZWdhbF9qb2luY2xhdXNlKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpyZWwpOwogc3RhdGljIGJvb2wgcmVzdHJpY3Rpb25faXNfY29uc3Rh bnRfZmFsc2UoTGlzdCAqcmVzdHJpY3RsaXN0LAogCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqam9p bnJlbCwKIAkJCQkJCQkJCQkgIGJvb2wgb25seV9wdXNoZWRfZG93bik7CitzdGF0aWMgdm9pZCBt YWtlX2dyb3VwZWRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEs CisJCQkJCQkJCSAgUmVsT3B0SW5mbyAqcmVsMiwgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJ CQkJICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywgTGlzdCAqcmVzdHJpY3RsaXN0KTsKIHN0YXRp YyB2b2lkIHBvcHVsYXRlX2pvaW5yZWxfd2l0aF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsMSwKIAkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwyLCBSZWxPcHRJbmZvICpq b2lucmVsLAogCQkJCQkJCQkJCVNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBMaXN0ICpyZXN0cmlj dGxpc3QpOwpAQCAtNzcxLDYgKzc3NiwxMCBAQCBtYWtlX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyKQogCQlyZXR1cm4gam9pbnJl bDsKIAl9CiAKKwkvKiBCdWlsZCBhIGdyb3VwZWQgam9pbiByZWxhdGlvbiBmb3IgJ2pvaW5yZWwn IGlmIHBvc3NpYmxlLiAqLworCW1ha2VfZ3JvdXBlZF9qb2luX3JlbChyb290LCByZWwxLCByZWwy LCBqb2lucmVsLCBzamluZm8sCisJCQkJCQkgIHJlc3RyaWN0bGlzdCk7CisKIAkvKiBBZGQgcGF0 aHMgdG8gdGhlIGpvaW4gcmVsYXRpb24uICovCiAJcG9wdWxhdGVfam9pbnJlbF93aXRoX3BhdGhz KHJvb3QsIHJlbDEsIHJlbDIsIGpvaW5yZWwsIHNqaW5mbywKIAkJCQkJCQkJcmVzdHJpY3RsaXN0 KTsKQEAgLTg4Miw2ICs4OTEsMTI4IEBAIGFkZF9vdXRlcl9qb2luc190b19yZWxpZHMoUGxhbm5l ckluZm8gKnJvb3QsIFJlbGlkcyBpbnB1dF9yZWxpZHMsCiAJcmV0dXJuIGlucHV0X3JlbGlkczsK IH0KIAorLyoKKyAqIG1ha2VfZ3JvdXBlZF9qb2luX3JlbAorICoJICBCdWlsZCBhIGdyb3VwZWQg am9pbiByZWxhdGlvbiBvdXQgb2YgJ2pvaW5yZWwnIGlmIGVhZ2VyIGFnZ3JlZ2F0aW9uIGlzCisg KgkgIHBvc3NpYmxlIGFuZCB0aGUgJ2pvaW5yZWwnIGNhbiBwcm9kdWNlIGdyb3VwZWQgcGF0aHMu CisgKgorICogV2UgYWxzbyBnZW5lcmF0ZSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciB0 aGUgZ3JvdXBlZCByZWxhdGlvbiBieQorICogam9pbmluZyB0aGUgZ3JvdXBlZCBwYXRocyBvZiAn cmVsMScgdG8gdGhlIHBsYWluIHBhdGhzIG9mICdyZWwyJywgb3IgYnkKKyAqIGpvaW5pbmcgdGhl IGdyb3VwZWQgcGF0aHMgb2YgJ3JlbDInIHRvIHRoZSBwbGFpbiBwYXRocyBvZiAncmVsMScuCisg Ki8KK3N0YXRpYyB2b2lkCittYWtlX2dyb3VwZWRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbDEsCisJCQkJCSAgUmVsT3B0SW5mbyAqcmVsMiwgUmVsT3B0SW5mbyAq am9pbnJlbCwKKwkJCQkJICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywgTGlzdCAqcmVzdHJpY3Rs aXN0KQoreworCVJlbE9wdEluZm8JICAgKnJlbF9ncm91cGVkOworCVJlbEFnZ0luZm8JICAgKmFn Z19pbmZvID0gTlVMTDsKKwlSZWxPcHRJbmZvCSAgICpyZWwxX2dyb3VwZWQ7CisJUmVsT3B0SW5m bwkgICAqcmVsMl9ncm91cGVkOworCWJvb2wJCQlyZWwxX2VtcHR5OworCWJvb2wJCQlyZWwyX2Vt cHR5OworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gYWdncmVnYXRlIGV4cHJlc3Npb25zIG9y IGdyb3VwaW5nIGV4cHJlc3Npb25zLCBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uIGlzIG5vdCBwb3Nz aWJsZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdnX2NsYXVzZV9saXN0ID09IE5JTCB8fAorCQlyb290 LT5ncm91cF9leHByX2xpc3QgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFNlZSBpZiB3 ZSBhbHJlYWR5IGhhdmUgYSBncm91cGVkIGpvaW5yZWwgZm9yIHRoaXMgam9pbnJlbC4KKwkgKi8K KwlyZWxfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9yZWwocm9vdCwgam9pbnJlbC0+cmVsaWRzLCAm YWdnX2luZm8pOworCisJLyoKKwkgKiBDb25zdHJ1Y3QgYSBuZXcgUmVsT3B0SW5mbyBmb3IgdGhl IGdyb3VwZWQgam9pbiByZWxhdGlvbiBpZiB0aGVyZSBpcyBubworCSAqIGV4aXN0aW5nIG9uZS4K KwkgKi8KKwlpZiAocmVsX2dyb3VwZWQgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFByZXBhcmUg dGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgdG8gY3JlYXRlIGdyb3VwZWQgcGF0aHMgZm9yIHRoaXMK KwkJICogam9pbiByZWxhdGlvbi4KKwkJICovCisJCWFnZ19pbmZvID0gY3JlYXRlX3JlbF9hZ2df aW5mbyhyb290LCBqb2lucmVsKTsKKwkJaWYgKGFnZ19pbmZvID09IE5VTEwpCisJCQlyZXR1cm47 CisKKwkJLyogYnVpbGQgYSBncm91cGVkIHJlbGF0aW9uIG91dCBvZiB0aGUgcGxhaW4gcmVsYXRp b24gKi8KKwkJcmVsX2dyb3VwZWQgPSBidWlsZF9ncm91cGVkX3JlbChyb290LCBqb2lucmVsKTsK KwkJcmVsX2dyb3VwZWQtPnJlbHRhcmdldCA9IGFnZ19pbmZvLT50YXJnZXQ7CisJCXJlbF9ncm91 cGVkLT5yb3dzID0gYWdnX2luZm8tPmdyb3VwZWRfcm93czsKKworCQkvKgorCQkgKiBNYWtlIHRo ZSBncm91cGVkIHJlbGF0aW9uIGF2YWlsYWJsZSBmb3IgZnVydGhlciBqb2luaW5nIG9yIGZvcgor CQkgKiBhY3RpbmcgYXMgdGhlIHVwcGVyIHJlbCByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiBw YXJ0aWFsCisJCSAqIGFnZ3JlZ2F0aW9uLgorCQkgKi8KKwkJYWRkX2dyb3VwZWRfcmVsKHJvb3Qs IHJlbF9ncm91cGVkLCBhZ2dfaW5mbyk7CisJfQorCisJQXNzZXJ0KGFnZ19pbmZvICE9IE5VTEwp OworCisJLyoKKwkgKiBJZiB3ZSd2ZSBhbHJlYWR5IHByb3ZlbiB0aGlzIGdyb3VwZWQgam9pbiBy ZWxhdGlvbiBpcyBlbXB0eSwgd2UgbmVlZG4ndAorCSAqIGNvbnNpZGVyIGFueSBtb3JlIHBhdGhz IGZvciBpdC4KKwkgKi8KKwlpZiAoSVNfRFVNTVlfUkVMKHJlbF9ncm91cGVkKSkKKwkJcmV0dXJu OworCisJLyogcmV0cmlldmUgdGhlIGdyb3VwZWQgcmVsYXRpb25zIGZvciB0aGUgdHdvIGlucHV0 IHJlbHMgKi8KKwlyZWwxX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3QsIHJlbDEtPnJl bGlkcywgTlVMTCk7CisJcmVsMl9ncm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCByZWwy LT5yZWxpZHMsIE5VTEwpOworCisJcmVsMV9lbXB0eSA9IChyZWwxX2dyb3VwZWQgPT0gTlVMTCB8 fCBJU19EVU1NWV9SRUwocmVsMV9ncm91cGVkKSk7CisJcmVsMl9lbXB0eSA9IChyZWwyX2dyb3Vw ZWQgPT0gTlVMTCB8fCBJU19EVU1NWV9SRUwocmVsMl9ncm91cGVkKSk7CisKKwkvKiBOb3RoaW5n IHRvIGRvIGlmIHRoZXJlJ3Mgbm8gZ3JvdXBlZCByZWxhdGlvbi4gKi8KKwlpZiAocmVsMV9lbXB0 eSAmJiByZWwyX2VtcHR5KQorCQlyZXR1cm47CisKKwkvKgorCSAqIEpvaW4gb2YgdHdvIGdyb3Vw ZWQgcmVsYXRpb25zIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLiAgSW4gc3VjaCBhCisJICog Y2FzZSwgZ3JvdXBpbmcgb2Ygb25lIHNpZGUgd291bGQgY2hhbmdlIHRoZSBvY2N1cnJlbmNlIG9m IHRoZSBvdGhlcgorCSAqIHNpZGUncyBhZ2dyZWdhdGUgdHJhbnNpZW50IHN0YXRlcyBvbiB0aGUg aW5wdXQgb2YgdGhlIGZpbmFsIGFnZ3JlZ2F0aW9uLgorCSAqIFRoaXMgY2FuIGJlIGhhbmRsZWQg YnkgYWRqdXN0aW5nIHRoZSB0cmFuc2llbnQgc3RhdGVzLCBidXQgaXQncyBub3QKKwkgKiB3b3J0 aCB0aGUgZWZmb3J0IGZvciBub3cuCisJICovCisJaWYgKCFyZWwxX2VtcHR5ICYmICFyZWwyX2Vt cHR5KQorCQlyZXR1cm47CisKKwkvKiBnZW5lcmF0ZSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhz IGZvciB0aGUgZ3JvdXBlZCByZWxhdGlvbiAqLworCWlmICghcmVsMV9lbXB0eSkKKwl7CisJCXNl dF9qb2lucmVsX3NpemVfZXN0aW1hdGVzKHJvb3QsIHJlbF9ncm91cGVkLCByZWwxX2dyb3VwZWQs IHJlbDIsCisJCQkJCQkJCSAgIHNqaW5mbywgcmVzdHJpY3RsaXN0KTsKKwkJcG9wdWxhdGVfam9p bnJlbF93aXRoX3BhdGhzKHJvb3QsIHJlbDFfZ3JvdXBlZCwgcmVsMiwgcmVsX2dyb3VwZWQsCisJ CQkJCQkJCQlzamluZm8sIHJlc3RyaWN0bGlzdCk7CisJCS8qCisJCSAqIEl0IHNob3VsZG4ndCBo YXBwZW4gdGhhdCB3ZSBoYXZlIG1hcmtlZCByZWwxX2dyb3VwZWQgYXMgZHVtbXkgaW4KKwkJICog cG9wdWxhdGVfam9pbnJlbF93aXRoX3BhdGhzIGR1ZSB0byBwcm92YWJseSBjb25zdGFudC1mYWxz ZSBqb2luCisJCSAqIHJlc3RyaWN0aW9ucywgaGVuY2Ugd2Ugd291bGRuJ3QgZW5kIHVwIHdpdGgg YSBwbGFuIHRoYXQgaGFzIEFnZ3JlZgorCQkgKiBpbiBub24tQWdnIHBsYW4gbm9kZS4KKwkJICov CisJCUFzc2VydCghSVNfRFVNTVlfUkVMKHJlbDFfZ3JvdXBlZCkpOworCX0KKwllbHNlIGlmICgh cmVsMl9lbXB0eSkKKwl7CisJCXNldF9qb2lucmVsX3NpemVfZXN0aW1hdGVzKHJvb3QsIHJlbF9n cm91cGVkLCByZWwxLCByZWwyX2dyb3VwZWQsCisJCQkJCQkJCSAgIHNqaW5mbywgcmVzdHJpY3Rs aXN0KTsKKwkJcG9wdWxhdGVfam9pbnJlbF93aXRoX3BhdGhzKHJvb3QsIHJlbDEsIHJlbDJfZ3Jv dXBlZCwgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQlzamluZm8sIHJlc3RyaWN0bGlzdCk7CisJCS8q CisJCSAqIEl0IHNob3VsZG4ndCBoYXBwZW4gdGhhdCB3ZSBoYXZlIG1hcmtlZCByZWwyX2dyb3Vw ZWQgYXMgZHVtbXkgaW4KKwkJICogcG9wdWxhdGVfam9pbnJlbF93aXRoX3BhdGhzIGR1ZSB0byBw cm92YWJseSBjb25zdGFudC1mYWxzZSBqb2luCisJCSAqIHJlc3RyaWN0aW9ucywgaGVuY2Ugd2Ug d291bGRuJ3QgZW5kIHVwIHdpdGggYSBwbGFuIHRoYXQgaGFzIEFnZ3JlZgorCQkgKiBpbiBub24t QWdnIHBsYW4gbm9kZS4KKwkJICovCisJCUFzc2VydCghSVNfRFVNTVlfUkVMKHJlbDJfZ3JvdXBl ZCkpOworCX0KK30KKwogLyoKICAqIHBvcHVsYXRlX2pvaW5yZWxfd2l0aF9wYXRocwogICoJICBB ZGQgcGF0aHMgdG8gdGhlIGdpdmVuIGpvaW5yZWwgZm9yIGdpdmVuIHBhaXIgb2Ygam9pbmluZyBy ZWxhdGlvbnMuIFRoZQpAQCAtMTY3MSw2ICsxODAyLDExIEBAIHRyeV9wYXJ0aXRpb253aXNlX2pv aW4oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIs CiAJCQkJCQkgYWRqdXN0X2NoaWxkX3JlbGlkcyhqb2lucmVsLT5yZWxpZHMsCiAJCQkJCQkJCQkJ CSBuYXBwaW5mb3MsIGFwcGluZm9zKSkpOwogCisJCS8qIEJ1aWxkIGEgZ3JvdXBlZCBqb2luIHJl bGF0aW9uIGZvciAnY2hpbGRfam9pbnJlbCcgaWYgcG9zc2libGUgKi8KKwkJbWFrZV9ncm91cGVk X2pvaW5fcmVsKHJvb3QsIGNoaWxkX3JlbDEsIGNoaWxkX3JlbDIsCisJCQkJCQkJICBjaGlsZF9q b2lucmVsLCBjaGlsZF9zamluZm8sCisJCQkJCQkJICBjaGlsZF9yZXN0cmljdGxpc3QpOworCiAJ CS8qIEFuZCBtYWtlIHBhdGhzIGZvciB0aGUgY2hpbGQgam9pbiAqLwogCQlwb3B1bGF0ZV9qb2lu cmVsX3dpdGhfcGF0aHMocm9vdCwgY2hpbGRfcmVsMSwgY2hpbGRfcmVsMiwKIAkJCQkJCQkJCWNo aWxkX2pvaW5yZWwsIGNoaWxkX3NqaW5mbywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIu YwppbmRleCA0NzExZjkxMjM5Li5iNjllZmIzY2QxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jCkBAIC0yMjUsNyArMjI1LDYgQEAgc3RhdGljIHZvaWQgYWRkX3BhdGhzX3RvX2dy b3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJ CQkJCQkJICBSZWxPcHRJbmZvICpwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCiAJCQkJCQkJCQkgIGNv bnN0IEFnZ0NsYXVzZUNvc3RzICphZ2dfY29zdHMsCiAJCQkJCQkJCQkgIGdyb3VwaW5nX3NldHNf ZGF0YSAqZ2QsCi0JCQkJCQkJCQkgIGRvdWJsZSBkTnVtR3JvdXBzLAogCQkJCQkJCQkJICBHcm91 cFBhdGhFeHRyYURhdGEgKmV4dHJhKTsKIHN0YXRpYyBSZWxPcHRJbmZvICpjcmVhdGVfcGFydGlh bF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSBSZWxPcHRJ bmZvICpncm91cGVkX3JlbCwKQEAgLTM5OTksOSArMzk5OCw3IEBAIGNyZWF0ZV9vcmRpbmFyeV9n cm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAog CQkJCQkJCSAgIEdyb3VwUGF0aEV4dHJhRGF0YSAqZXh0cmEsCiAJCQkJCQkJICAgUmVsT3B0SW5m byAqKnBhcnRpYWxseV9ncm91cGVkX3JlbF9wKQogewotCVBhdGgJICAgKmNoZWFwZXN0X3BhdGgg PSBpbnB1dF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGg7CiAJUmVsT3B0SW5mbyAqcGFydGlhbGx5 X2dyb3VwZWRfcmVsID0gTlVMTDsKLQlkb3VibGUJCWROdW1Hcm91cHM7CiAJUGFydGl0aW9ud2lz ZUFnZ3JlZ2F0ZVR5cGUgcGF0eXBlID0gUEFSVElUSU9OV0lTRV9BR0dSRUdBVEVfTk9ORTsKIAog CS8qCkBAIC00MDgyLDIzICs0MDc5LDIxIEBAIGNyZWF0ZV9vcmRpbmFyeV9ncm91cGluZ19wYXRo cyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCiAJLyogR2F0aGVy IGFueSBwYXJ0aWFsbHkgZ3JvdXBlZCBwYXJ0aWFsIHBhdGhzLiAqLwogCWlmIChwYXJ0aWFsbHlf Z3JvdXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wYXJ0aWFsX3BhdGhsaXN0KQot CXsKIAkJZ2F0aGVyX2dyb3VwaW5nX3BhdGhzKHJvb3QsIHBhcnRpYWxseV9ncm91cGVkX3JlbCk7 Ci0JCXNldF9jaGVhcGVzdChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwpOwotCX0KIAogCS8qCi0JICog RXN0aW1hdGUgbnVtYmVyIG9mIGdyb3Vwcy4KKwkgKiBOb3cgY2hvb3NlIHRoZSBiZXN0IHBhdGgo cykgZm9yIHBhcnRpYWxseV9ncm91cGVkX3JlbC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGUgbm9u LXBhcnRpYWwgcGF0aHMgY2FuIGNvbWUgZWl0aGVyIGZyb20gdGhlIEdhdGhlciBhYm92ZSBvcgor CSAqIGZyb20gZWFnZXIgYWdncmVnYXRpb24uCiAJICovCi0JZE51bUdyb3VwcyA9IGdldF9udW1i ZXJfb2ZfZ3JvdXBzKHJvb3QsCi0JCQkJCQkJCQkgIGNoZWFwZXN0X3BhdGgtPnJvd3MsCi0JCQkJ CQkJCQkgIGdkLAotCQkJCQkJCQkJICBleHRyYS0+dGFyZ2V0TGlzdCk7CisJaWYgKHBhcnRpYWxs eV9ncm91cGVkX3JlbCAmJiBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnBhdGhsaXN0KQorCQlzZXRf Y2hlYXBlc3QocGFydGlhbGx5X2dyb3VwZWRfcmVsKTsKIAogCS8qIEJ1aWxkIGZpbmFsIGdyb3Vw aW5nIHBhdGhzICovCiAJYWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChyb290LCBpbnB1dF9yZWws IGdyb3VwZWRfcmVsLAogCQkJCQkJCSAgcGFydGlhbGx5X2dyb3VwZWRfcmVsLCBhZ2dfY29zdHMs IGdkLAotCQkJCQkJCSAgZE51bUdyb3VwcywgZXh0cmEpOworCQkJCQkJCSAgZXh0cmEpOwogCiAJ LyogR2l2ZSBhIGhlbHBmdWwgZXJyb3IgaWYgd2UgZmFpbGVkIHRvIGZpbmQgYW55IGltcGxlbWVu dGF0aW9uICovCiAJaWYgKGdyb3VwZWRfcmVsLT5wYXRobGlzdCA9PSBOSUwpCkBAIC02OTY3LDE2 ICs2OTYyLDQyIEBAIGFkZF9wYXRoc190b19ncm91cGluZ19yZWwoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCSAgUmVsT3B0SW5mbyAqZ3JvdXBlZF9yZWws CiAJCQkJCQkgIFJlbE9wdEluZm8gKnBhcnRpYWxseV9ncm91cGVkX3JlbCwKIAkJCQkJCSAgY29u c3QgQWdnQ2xhdXNlQ29zdHMgKmFnZ19jb3N0cywKLQkJCQkJCSAgZ3JvdXBpbmdfc2V0c19kYXRh ICpnZCwgZG91YmxlIGROdW1Hcm91cHMsCisJCQkJCQkgIGdyb3VwaW5nX3NldHNfZGF0YSAqZ2Qs CiAJCQkJCQkgIEdyb3VwUGF0aEV4dHJhRGF0YSAqZXh0cmEpCiB7CiAJUXVlcnkJICAgKnBhcnNl ID0gcm9vdC0+cGFyc2U7CiAJUGF0aAkgICAqY2hlYXBlc3RfcGF0aCA9IGlucHV0X3JlbC0+Y2hl YXBlc3RfdG90YWxfcGF0aDsKKwlQYXRoCSAgICpjaGVhcGVzdF9wYXJ0aWFsbHlfZ3JvdXBlZF9w YXRoID0gTlVMTDsKIAlMaXN0Q2VsbCAgICpsYzsKIAlib29sCQljYW5faGFzaCA9IChleHRyYS0+ ZmxhZ3MgJiBHUk9VUElOR19DQU5fVVNFX0hBU0gpICE9IDA7CiAJYm9vbAkJY2FuX3NvcnQgPSAo ZXh0cmEtPmZsYWdzICYgR1JPVVBJTkdfQ0FOX1VTRV9TT1JUKSAhPSAwOwogCUxpc3QJICAgKmhh dmluZ1F1YWwgPSAoTGlzdCAqKSBleHRyYS0+aGF2aW5nUXVhbDsKIAlBZ2dDbGF1c2VDb3N0cyAq YWdnX2ZpbmFsX2Nvc3RzID0gJmV4dHJhLT5hZ2dfZmluYWxfY29zdHM7CisJZG91YmxlCQlkTnVt R3JvdXBzID0gMDsKKwlkb3VibGUJCWROdW1GaW5hbEdyb3VwcyA9IDA7CisKKwkvKgorCSAqIEVz dGltYXRlIG51bWJlciBvZiBncm91cHMgZm9yIG5vbi1zcGxpdCBhZ2dyZWdhdGlvbi4KKwkgKi8K KwlkTnVtR3JvdXBzID0gZ2V0X251bWJlcl9vZl9ncm91cHMocm9vdCwKKwkJCQkJCQkJCSAgY2hl YXBlc3RfcGF0aC0+cm93cywKKwkJCQkJCQkJCSAgZ2QsCisJCQkJCQkJCQkgIGV4dHJhLT50YXJn ZXRMaXN0KTsKKworCWlmIChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3Vw ZWRfcmVsLT5wYXRobGlzdCkKKwl7CisJCWNoZWFwZXN0X3BhcnRpYWxseV9ncm91cGVkX3BhdGgg PQorCQkJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoOworCisJCS8q CisJCSAqIEVzdGltYXRlIG51bWJlciBvZiBncm91cHMgZm9yIGZpbmFsIHBoYXNlIG9mIHBhcnRp YWwgYWdncmVnYXRpb24uCisJCSAqLworCQlkTnVtRmluYWxHcm91cHMgPQorCQkJZ2V0X251bWJl cl9vZl9ncm91cHMocm9vdCwKKwkJCQkJCQkJIGNoZWFwZXN0X3BhcnRpYWxseV9ncm91cGVkX3Bh dGgtPnJvd3MsCisJCQkJCQkJCSBnZCwKKwkJCQkJCQkJIGV4dHJhLT50YXJnZXRMaXN0KTsKKwl9 CiAKIAlpZiAoY2FuX3NvcnQpCiAJewpAQCAtNzA4OCw3ICs3MTA5LDcgQEAgYWRkX3BhdGhzX3Rv X2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAog CQkJCQlwYXRoID0gbWFrZV9vcmRlcmVkX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJIGdyb3VwZWRf cmVsLAogCQkJCQkJCQkJCQkgcGF0aCwKLQkJCQkJCQkJCQkJIHBhcnRpYWxseV9ncm91cGVkX3Jl bC0+Y2hlYXBlc3RfdG90YWxfcGF0aCwKKwkJCQkJCQkJCQkJIGNoZWFwZXN0X3BhcnRpYWxseV9n cm91cGVkX3BhdGgsCiAJCQkJCQkJCQkJCSBpbmZvLT5wYXRoa2V5cyk7CiAKIAkJCQkJaWYgKHBh dGggPT0gTlVMTCkKQEAgLTcxMDUsNyArNzEyNiw3IEBAIGFkZF9wYXRoc190b19ncm91cGluZ19y ZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkJCQkJ CSBpbmZvLT5jbGF1c2VzLAogCQkJCQkJCQkJCQkJIGhhdmluZ1F1YWwsCiAJCQkJCQkJCQkJCQkg YWdnX2ZpbmFsX2Nvc3RzLAotCQkJCQkJCQkJCQkJIGROdW1Hcm91cHMpKTsKKwkJCQkJCQkJCQkJ CSBkTnVtRmluYWxHcm91cHMpKTsKIAkJCQkJZWxzZQogCQkJCQkJYWRkX3BhdGgoZ3JvdXBlZF9y ZWwsIChQYXRoICopCiAJCQkJCQkJCSBjcmVhdGVfZ3JvdXBfcGF0aChyb290LApAQCAtNzExMyw3 ICs3MTM0LDcgQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJCQkJCQkJICAgcGF0aCwKIAkJCQkJCQkJCQkJ CSAgIGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJCQkgICBoYXZpbmdRdWFsLAotCQkJCQkJCQkJ CQkJICAgZE51bUdyb3VwcykpOworCQkJCQkJCQkJCQkJICAgZE51bUZpbmFsR3JvdXBzKSk7CiAK IAkJCQl9CiAJCQl9CkBAIC03MTU1LDE5ICs3MTc2LDE3IEBAIGFkZF9wYXRoc190b19ncm91cGlu Z19yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJICovCiAJ CWlmIChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wYXRo bGlzdCkKIAkJewotCQkJUGF0aAkgICAqcGF0aCA9IHBhcnRpYWxseV9ncm91cGVkX3JlbC0+Y2hl YXBlc3RfdG90YWxfcGF0aDsKLQogCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCiAJ CQkJCSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKIAkJCQkJCQkJCSBncm91cGVkX3JlbCwKLQkJCQkJ CQkJCSBwYXRoLAorCQkJCQkJCQkJIGNoZWFwZXN0X3BhcnRpYWxseV9ncm91cGVkX3BhdGgsCiAJ CQkJCQkJCQkgZ3JvdXBlZF9yZWwtPnJlbHRhcmdldCwKIAkJCQkJCQkJCSBBR0dfSEFTSEVELAog CQkJCQkJCQkJIEFHR1NQTElUX0ZJTkFMX0RFU0VSSUFMLAogCQkJCQkJCQkJIHJvb3QtPnByb2Nl c3NlZF9ncm91cENsYXVzZSwKIAkJCQkJCQkJCSBoYXZpbmdRdWFsLAogCQkJCQkJCQkJIGFnZ19m aW5hbF9jb3N0cywKLQkJCQkJCQkJCSBkTnVtR3JvdXBzKSk7CisJCQkJCQkJCQkgZE51bUZpbmFs R3JvdXBzKSk7CiAJCX0KIAl9CiAKQEAgLTcyMTcsNiArNzIzNiwyMSBAQCBjcmVhdGVfcGFydGlh bF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAlib29sCQljYW5faGFzaCA9IChl eHRyYS0+ZmxhZ3MgJiBHUk9VUElOR19DQU5fVVNFX0hBU0gpICE9IDA7CiAJYm9vbAkJY2FuX3Nv cnQgPSAoZXh0cmEtPmZsYWdzICYgR1JPVVBJTkdfQ0FOX1VTRV9TT1JUKSAhPSAwOwogCisJLyoK KwkgKiBUaGUgcGFydGlhbGx5X2dyb3VwZWRfcmVsIGNvdWxkIGhhdmUgYmVlbiBhbHJlYWR5IGNy ZWF0ZWQgZHVlIHRvIGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICovCisJcGFydGlhbGx5X2dy b3VwZWRfcmVsID0gZmluZF9ncm91cGVkX3JlbChyb290LCBpbnB1dF9yZWwtPnJlbGlkcywgTlVM TCk7CisJQXNzZXJ0KGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgfHwgcGFydGlhbGx5X2dyb3VwZWRf cmVsID09IE5VTEwpOworCisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBwYXJ0aWFs bHlfZ3JvdXBlZF9yZWwgY3JlYXRlZCBieSBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uIGlzIGR1bW15 LiAgSW4gdGhpcyBjYXNlIHdlIGp1c3Qgc2V0IGl0IHRvIE5VTEwuICBJdCBtaWdodCBiZQorCSAq IGNyZWF0ZWQgYWdhaW4gYnkgdGhlIGZvbGxvd2luZyBsb2dpYyBpZiBwb3NzaWJsZS4KKwkgKi8K KwlpZiAocGFydGlhbGx5X2dyb3VwZWRfcmVsICYmIElTX0RVTU1ZX1JFTChwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwpKQorCQlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgPSBOVUxMOworCiAJLyoKIAkgKiBD b25zaWRlciB3aGV0aGVyIHdlIHNob3VsZCBnZW5lcmF0ZSBwYXJ0aWFsbHkgYWdncmVnYXRlZCBu b24tcGFydGlhbAogCSAqIHBhdGhzLiAgV2UgY2FuIG9ubHkgZG8gdGhpcyBpZiB3ZSBoYXZlIGEg bm9uLXBhcnRpYWwgcGF0aCwgYW5kIG9ubHkgaWYKQEAgLTcyNDAsMTkgKzcyNzQsMjcgQEAgY3Jl YXRlX3BhcnRpYWxfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJICogSWYgd2Ug Y2FuJ3QgcGFydGlhbGx5IGFnZ3JlZ2F0ZSBwYXJ0aWFsIHBhdGhzLCBhbmQgd2UgY2FuJ3QgcGFy dGlhbGx5CiAJICogYWdncmVnYXRlIG5vbi1wYXJ0aWFsIHBhdGhzLCB0aGVuIGRvbid0IGJvdGhl ciBjcmVhdGluZyB0aGUgbmV3CiAJICogUmVsT3B0SW5mbyBhdCBhbGwsIHVubGVzcyB0aGUgY2Fs bGVyIHNwZWNpZmllZCBmb3JjZV9yZWxfY3JlYXRpb24uCisJICoKKwkgKiBOb3RlIHRoYXQgdGhl IHBhcnRpYWxseV9ncm91cGVkX3JlbCBjb3VsZCBoYXZlIGJlZW4gYWxyZWFkeSBjcmVhdGVkIGFu ZAorCSAqIHBvcHVsYXRlZCB3aXRoIGFwcHJvcHJpYXRlIHBhdGhzIGJ5IGVhZ2VyIGFnZ3JlZ2F0 aW9uLgogCSAqLwogCWlmIChjaGVhcGVzdF90b3RhbF9wYXRoID09IE5VTEwgJiYKIAkJY2hlYXBl c3RfcGFydGlhbF9wYXRoID09IE5VTEwgJiYKKwkJKHBhcnRpYWxseV9ncm91cGVkX3JlbCA9PSBO VUxMIHx8CisJCSBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnBhdGhsaXN0ID09IE5JTCkgJiYKIAkJ IWZvcmNlX3JlbF9jcmVhdGlvbikKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIEJ1aWxkIGEg bmV3IHVwcGVyIHJlbGF0aW9uIHRvIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHBhcnRpYWxseQot CSAqIGFnZ3JlZ2F0aW5nIHRoZSByb3dzIGZyb20gdGhlIGlucHV0IHJlbGF0aW9uLgotCSAqLwot CXBhcnRpYWxseV9ncm91cGVkX3JlbCA9IGZldGNoX3VwcGVyX3JlbChyb290LAotCQkJCQkJCQkJ CQlVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHRywKLQkJCQkJCQkJCQkJZ3JvdXBlZF9yZWwtPnJl bGlkcyk7CisJICogYWdncmVnYXRpbmcgdGhlIHJvd3MgZnJvbSB0aGUgaW5wdXQgcmVsYXRpb24u ICBUaGUgcmVsYXRpb24gbWF5IGFscmVhZHkKKwkgKiBleGlzdCBkdWUgdG8gZWFnZXIgYWdncmVn YXRpb24sIGluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUKKwkgKiBpdC4KKwkg Ki8KKwlpZiAocGFydGlhbGx5X2dyb3VwZWRfcmVsID09IE5VTEwpCisJCXBhcnRpYWxseV9ncm91 cGVkX3JlbCA9IGZldGNoX3VwcGVyX3JlbChyb290LAorCQkJCQkJCQkJCQkJVVBQRVJSRUxfUEFS VElBTF9HUk9VUF9BR0csCisJCQkJCQkJCQkJCQlncm91cGVkX3JlbC0+cmVsaWRzKTsKIAlwYXJ0 aWFsbHlfZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0KIAkJZ3JvdXBlZF9yZWwtPmNv bnNpZGVyX3BhcmFsbGVsOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+cmVsb3B0a2luZCA9IGdy b3VwZWRfcmVsLT5yZWxvcHRraW5kOwpAQCAtNzI2MSw2ICs3MzAzLDE0IEBAIGNyZWF0ZV9wYXJ0 aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCXBhcnRpYWxseV9ncm91cGVk X3JlbC0+dXNlcmlkaXNjdXJyZW50ID0gZ3JvdXBlZF9yZWwtPnVzZXJpZGlzY3VycmVudDsKIAlw YXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmZkd3JvdXRpbmUgPSBncm91cGVkX3JlbC0+ZmR3cm91dGlu ZTsKIAorCS8qCisJICogUGFydGlhbGx5LWdyb3VwZWQgcGFydGlhbCBwYXRocyBtYXkgaGF2ZSBi ZWVuIGdlbmVyYXRlZCBieSBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uLiAgSWYgd2UgZmluZCB0aGF0 IHBhcmFsbGVsaXNtIGlzIG5vdCBwb3NzaWJsZSBmb3IKKwkgKiBwYXJ0aWFsbHlfZ3JvdXBlZF9y ZWwsIHdlIG5lZWQgdG8gZHJvcCB0aGVzZSBwYXJ0aWFsIHBhdGhzLgorCSAqLworCWlmICghcGFy dGlhbGx5X2dyb3VwZWRfcmVsLT5jb25zaWRlcl9wYXJhbGxlbCkKKwkJcGFydGlhbGx5X2dyb3Vw ZWRfcmVsLT5wYXJ0aWFsX3BhdGhsaXN0ID0gTklMOworCiAJLyoKIAkgKiBCdWlsZCB0YXJnZXQg bGlzdCBmb3IgcGFydGlhbCBhZ2dyZWdhdGUgcGF0aHMuICBUaGVzZSBwYXRocyBjYW5ub3QganVz dAogCSAqIGVtaXQgdGhlIHNhbWUgdGxpc3QgYXMgcmVndWxhciBhZ2dyZWdhdGUgcGF0aHMsIGJl Y2F1c2UgKDEpIHdlIG11c3QKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L2FwcGVuZGluZm8uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2FwcGVuZGluZm8uYwpp bmRleCA2YmE0ZWJhMjI0Li4wOGRlNzdkNDM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv YXBwZW5kaW5mby5jCkBAIC00OTUsNiArNDk1LDY2IEBAIGFkanVzdF9hcHBlbmRyZWxfYXR0cnNf bXV0YXRvcihOb2RlICpub2RlLAogCQlyZXR1cm4gKE5vZGUgKikgbmV3aW5mbzsKIAl9CiAKKwkv KgorCSAqIFdlIGhhdmUgdG8gcHJvY2VzcyBSZWxBZ2dJbmZvIG5vZGVzIHNwZWNpYWxseS4KKwkg Ki8KKwlpZiAoSXNBKG5vZGUsIFJlbEFnZ0luZm8pKQorCXsKKwkJUmVsQWdnSW5mbyAqb2xkaW5m byA9IChSZWxBZ2dJbmZvICopIG5vZGU7CisJCVJlbEFnZ0luZm8gKm5ld2luZm8gPSBtYWtlTm9k ZShSZWxBZ2dJbmZvKTsKKworCQkvKiBDb3B5IGFsbCBmbGF0LWNvcGlhYmxlIGZpZWxkcyAqLwor CQltZW1jcHkobmV3aW5mbywgb2xkaW5mbywgc2l6ZW9mKFJlbEFnZ0luZm8pKTsKKworCQluZXdp bmZvLT5yZWxpZHMgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKG9sZGluZm8tPnJlbGlkcywKKwkJCQkJ CQkJCQkJICBjb250ZXh0LT5uYXBwaW5mb3MsCisJCQkJCQkJCQkJCSAgY29udGV4dC0+YXBwaW5m b3MpOworCisJCW5ld2luZm8tPnRhcmdldCA9IChQYXRoVGFyZ2V0ICopCisJCQlhZGp1c3RfYXBw ZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikgb2xkaW5mby0+dGFyZ2V0LAorCQkJCQkJCQkJ CSAgIGNvbnRleHQpOworCisJCW5ld2luZm8tPmFnZ19pbnB1dCA9IChQYXRoVGFyZ2V0ICopCisJ CQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikgb2xkaW5mby0+YWdnX2lu cHV0LAorCQkJCQkJCQkJCSAgIGNvbnRleHQpOworCisJCW5ld2luZm8tPmdyb3VwX2NsYXVzZXMg PSAoTGlzdCAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yKChOb2RlICopIG9s ZGluZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJICAgY29udGV4dCk7CisKKwkJbmV3aW5m by0+Z3JvdXBfZXhwcnMgPSAoTGlzdCAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRh dG9yKChOb2RlICopIG9sZGluZm8tPmdyb3VwX2V4cHJzLAorCQkJCQkJCQkJCSAgIGNvbnRleHQp OworCisJCXJldHVybiAoTm9kZSAqKSBuZXdpbmZvOworCX0KKworCS8qCisJICogV2UgaGF2ZSB0 byBwcm9jZXNzIFBhdGhUYXJnZXQgbm9kZXMgc3BlY2lhbGx5LgorCSAqLworCWlmIChJc0Eobm9k ZSwgUGF0aFRhcmdldCkpCisJeworCQlQYXRoVGFyZ2V0ICpvbGR0YXJnZXQgPSAoUGF0aFRhcmdl dCAqKSBub2RlOworCQlQYXRoVGFyZ2V0ICpuZXd0YXJnZXQgPSBtYWtlTm9kZShQYXRoVGFyZ2V0 KTsKKworCQkvKiBDb3B5IGFsbCBmbGF0LWNvcGlhYmxlIGZpZWxkcyAqLworCQltZW1jcHkobmV3 dGFyZ2V0LCBvbGR0YXJnZXQsIHNpemVvZihQYXRoVGFyZ2V0KSk7CisKKwkJaWYgKG9sZHRhcmdl dC0+c29ydGdyb3VwcmVmcykKKwkJeworCQkJU2l6ZQluYnl0ZXMgPSBsaXN0X2xlbmd0aChvbGR0 YXJnZXQtPmV4cHJzKSAqIHNpemVvZihJbmRleCk7CisKKwkJCW5ld3RhcmdldC0+ZXhwcnMgPSAo TGlzdCAqKQorCQkJCWFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBvbGR0 YXJnZXQtPmV4cHJzLAorCQkJCQkJCQkJCQkgICBjb250ZXh0KTsKKworCQkJbmV3dGFyZ2V0LT5z b3J0Z3JvdXByZWZzID0gKEluZGV4ICopIHBhbGxvYyhuYnl0ZXMpOworCQkJbWVtY3B5KG5ld3Rh cmdldC0+c29ydGdyb3VwcmVmcywgb2xkdGFyZ2V0LT5zb3J0Z3JvdXByZWZzLCBuYnl0ZXMpOwor CQl9CisKKwkJcmV0dXJuIChOb2RlICopIG5ld3RhcmdldDsKKwl9CisKIAkvKgogCSAqIE5PVEU6 IHdlIGRvIG5vdCBuZWVkIHRvIHJlY3Vyc2UgaW50byBzdWJsaW5rcywgYmVjYXVzZSB0aGV5IHNo b3VsZAogCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBzdWJwbGFucyBiZWZvcmUg d2Ugc2VlIHRoZW0uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxu b2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKaW5kZXggZjhmMGMw ZmM2OS4uOTEwMTNlMWE4MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwpAQCAt MjgzNCw4ICsyODM0LDYgQEAgY3JlYXRlX3JlbF9hZ2dfaW5mbyhQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcmVsKQogCQltYXJrX3BhcnRpYWxfYWdncmVmKGFnZ3JlZiwgQUdHU1BMSVRf SU5JVElBTF9TRVJJQUwpOwogCiAJCWFkZF9jb2x1bW5fdG9fcGF0aHRhcmdldCh0YXJnZXQsIChF eHByICopIGFnZ3JlZiwgMCk7Ci0KLQkJcmVzdWx0LT5hZ2dfZXhwcnMgPSBsYXBwZW5kKHJlc3Vs dC0+YWdnX2V4cHJzLCBhZ2dyZWYpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4 IGZkMTA0OTgwMjguLjRjZTcwZjI1NmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh dGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xMTIzLDkg KzExMjMsNiBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAgKiAiZ3JvdXBfY2xhdXNlcyIs ICJncm91cF9leHBycyIgYW5kICJncm91cF9wYXRoa2V5cyIgYXJlIGxpc3RzIG9mCiAgKiBTb3J0 R3JvdXBDbGF1c2UsIHRoZSBjb3JyZXNwb25kaW5nIGdyb3VwaW5nIGV4cHJlc3Npb25zIGFuZCBQ YXRoS2V5CiAgKiByZXNwZWN0aXZlbHkuCi0gKgotICogImFnZ19leHBycyIgaXMgYSBsaXN0IG9m IEFnZ3JlZiBub2RlcyBmb3IgdGhlIGFnZ3JlZ2F0aW9uIG9mIHRoZSByZWxhdGlvbidzCi0gKiBw YXRocy4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgUmVsQWdnSW5mbwogewpAQCAtMTE2MSw5ICsxMTU4 LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsQWdnSW5mbwogCUxpc3QJICAgKmdyb3VwX2V4cHJzOwog CS8qIGEgbGlzdCBvZiBQYXRoS2V5cyAqLwogCUxpc3QJICAgKmdyb3VwX3BhdGhrZXlzOwotCi0J LyogYSBsaXN0IG9mIEFnZ3JlZiBub2RlcyAqLwotCUxpc3QJICAgKmFnZ19leHByczsKIH0gUmVs QWdnSW5mbzsKIAogLyoKLS0gCjIuNDMuMAoK --000000000000b2a431061ac0ff96 Content-Type: application/octet-stream; name="v8-0008-Add-test-cases.patch" Content-Disposition: attachment; filename="v8-0008-Add-test-cases.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxcz8bbm7 RnJvbSBmNjEzZjlmZTZhY2M0NzFjODY5YmQ0NWJhZTYxZTE1ZTRkZmIyZDkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNjoxNjoxNSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjgg OC85XSBBZGQgdGVzdCBjYXNlcwoKLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VhZ2Vy X2FnZ3JlZ2F0ZS5vdXQgfCAxMjkzICsrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNz L3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9lYWdlcl9hZ2dyZWdhdGUuc3FsICAgICAgfCAgMTkyICsrKwogMyBmaWxlcyBjaGFuZ2Vk LCAxNDg2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VhZ2VyX2FnZ3JlZ2F0ZS5vdXQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9lYWdlcl9hZ2dyZWdhdGUuc3FsCgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lYWdlcl9hZ2dyZWdhdGUub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lYWdlcl9hZ2dyZWdhdGUub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjdhMjgyODc1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VhZ2VyX2FnZ3JlZ2F0ZS5vdXQKQEAgLTAsMCArMSwx MjkzIEBACistLQorLS0gRUFHRVIgQUdHUkVHQVRJT04KKy0tIFRlc3Qgd2UgY2FuIHB1c2ggYWdn cmVnYXRpb24gZG93biBiZWxvdyBqb2luCistLQorLS0gRW5hYmxlIGVhZ2VyIGFnZ3JlZ2F0aW9u LCB3aGljaCBieSBkZWZhdWx0IGlzIGRpc2FibGVkLgorU0VUIGVuYWJsZV9lYWdlcl9hZ2dyZWdh dGUgVE8gb247CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QxIChhIGludCwgYiBpbnQsIGMgZG91 YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QyIChhIGludCwgYiBpbnQs IGMgZG91YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QzIChhIGludCwg YiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdDEgU0VM RUNUIGksIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMClpOworSU5TRVJUIElOVE8g ZWFnZXJfYWdnX3QyIFNFTEVDVCBpLCBpJTEwLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEw MDApaTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190MyBTRUxFQ1QgaSUxMCwgaSUxMCwgaSBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKWk7CitBTkFMWVpFIGVhZ2VyX2FnZ190MTsKK0FOQUxZ WkUgZWFnZXJfYWdnX3QyOworQU5BTFlaRSBlYWdlcl9hZ2dfdDM7CistLQorLS0gVGVzdCBlYWdl ciBhZ2dyZWdhdGlvbiBvdmVyIGJhc2UgcmVsCistLQorLS0gUGVyZm9ybSBzY2FuIG9mIGEgdGFi bGUsIGFnZ3JlZ2F0ZSB0aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQorLS0g YW5kIGZpbmFsaXplIHRoZSBhZ2dyZWdhdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9G RikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdl cl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAgT3V0cHV0 OiB0MS5hLCBhdmcodDIuYykKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNvcnQKKyAgICAg ICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgU29ydCBLZXk6 IHQxLmEKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDEu YSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEuYiA9 IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190 MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0MS5jCisgICAg ICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCAo UEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNo QWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIFBBUlRJ QUwgYXZnKHQyLmMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyLmIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJf YWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEs IHQyLmIsIHQyLmMKKygxOCByb3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFn ZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZ IHQxLmEgT1JERVIgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8IDQ5NgorIDIg fCA0OTcKKyAzIHwgNDk4CisgNCB8IDQ5OQorIDUgfCA1MDAKKyA2IHwgNTAxCisgNyB8IDUwMgor IDggfCA1MDMKKyA5IHwgNTA0CisoOSByb3dzKQorCistLSBQcm9kdWNlIHJlc3VsdHMgd2l0aCBz b3J0aW5nIGFnZ3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2ZmOworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2Fn Z190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5h IE9SREVSIEJZIHQxLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFs aXplIEdyb3VwQWdncmVnYXRlCisgICBPdXRwdXQ6IHQxLmEsIGF2Zyh0Mi5jKQorICAgR3JvdXAg S2V5OiB0MS5hCisgICAtPiAgU29ydAorICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBh dmcodDIuYykpCisgICAgICAgICBTb3J0IEtleTogdDEuYQorICAgICAgICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAg ICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5iID0gdDIuYikKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QxIHQxCisgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQxLmEsIHQxLmIsIHQxLmMKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEdyb3VwQWdncmVnYXRlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIFBBUlRJQUwgYXZnKHQyLmMpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMs IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Mi5iCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190MiB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Mi5jLCB0Mi5iCisoMjEgcm93cykKKworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9N IGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9V UCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgYSB8IGF2ZyAKKy0tLSstLS0tLQorIDEgfCA0OTYK KyAyIHwgNDk3CisgMyB8IDQ5OAorIDQgfCA0OTkKKyA1IHwgNTAwCisgNiB8IDUwMQorIDcgfCA1 MDIKKyA4IHwgNTAzCisgOSB8IDUwNAorKDkgcm93cykKKworUkVTRVQgZW5hYmxlX2hhc2hhZ2c7 CistLQorLS0gVGVzdCBlYWdlciBhZ2dyZWdhdGlvbiBvdmVyIGpvaW4gcmVsCistLQorLS0gUGVy Zm9ybSBqb2luIG9mIHRhYmxlcywgYWdncmVnYXRlIHRoZSByZXN1bHQsIGpvaW4gaXQgdG8gdGhl IG90aGVyIHRhYmxlCistLSBhbmQgZmluYWxpemUgdGhlIGFnZ3JlZ2F0aW9uLgorRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBl YWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgSk9JTiBl YWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5h OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6 ZSBHcm91cEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0MS5hLCBhdmcoKHQyLmMgKyB0My5jKSkKKyAg IEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNvcnQKKyAgICAgICAgIE91dHB1dDogdDEuYSwgKFBB UlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAgICAgU29ydCBLZXk6IHQxLmEKKyAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwg YXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEuYiA9IHQy LmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MSB0 MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0MS5jCisgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCAoUEFS VElBTCBhdmcoKHQyLmMgKyB0My5jKSkpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlh bCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIs IFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH cm91cCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDMuYywgdDIu YgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDMuYSA9IHQy LmEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmVhZ2VyX2FnZ190MyB0MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0My5hLCB0My5iLCB0My5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Mi5jLCB0Mi5iLCB0Mi5hCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MiB0MgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0Mi5iLCB0Mi5h CisoMjUgcm93cykKKworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBlYWdlcl9h Z2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgSk9JTiBlYWdlcl9h Z2dfdDMgdDMgT04gdDIuYSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworIGEg fCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk3CisgMiB8IDQ5OQorIDMgfCA1MDEKKyA0IHwgNTAz CisgNSB8IDUwNQorIDYgfCA1MDcKKyA3IHwgNTA5CisgOCB8IDUxMQorIDkgfCA1MTMKKyg5IHJv d3MpCisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcgYWdncmVnYXRpb24KK1NFVCBl bmFibGVfaGFzaGFnZyBUTyBvZmY7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxF Q1QgdDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2Vy X2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0g dDMuYSBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEdyb3VwQWdncmVn YXRlCisgICBPdXRwdXQ6IHQxLmEsIGF2ZygodDIuYyArIHQzLmMpKQorICAgR3JvdXAgS2V5OiB0 MS5hCisgICAtPiAgU29ydAorICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmcoKHQy LmMgKyB0My5jKSkpCisgICAgICAgICBTb3J0IEtleTogdDEuYQorICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmcoKHQyLmMgKyB0 My5jKSkpCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5iID0gdDIuYikKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QxIHQxCisgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIHQxLmIsIHQxLmMKKyAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIChQQVJUSUFMIGF2ZygodDIu YyArIHQzLmMpKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEdyb3VwQWdncmVn YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIFBBUlRJQUwgYXZn KCh0Mi5jICsgdDMuYykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQy LmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQzLmMsIHQyLmIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyLmMsIHQzLmMsIHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQzLmEgPSB0Mi5hKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dDMgdDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDMuYSwgdDMuYiwgdDMuYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDIuYywgdDIuYiwgdDIuYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDIuYywgdDIuYiwgdDIuYQorKDI4IHJvd3MpCisKK1NFTEVDVCB0MS5hLCBhdmcodDIuYyArIHQz LmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0 Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEgPSB0My5hIEdST1VQIEJZIHQxLmEgT1JE RVIgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8IDQ5NworIDIgfCA0OTkKKyAz IHwgNTAxCisgNCB8IDUwMworIDUgfCA1MDUKKyA2IHwgNTA3CisgNyB8IDUwOQorIDggfCA1MTEK KyA5IHwgNTEzCisoOSByb3dzKQorCitSRVNFVCBlbmFibGVfaGFzaGFnZzsKKy0tCistLSBUZXN0 IHRoYXQgZWFnZXIgYWdncmVnYXRpb24gd29ya3MgZm9yIG91dGVyIGpvaW4KKy0tCistLSBFbnN1 cmUgYWdncmVnYXRpb24gY2FuIGJlIHB1c2hlZCBkb3duIHRvIHRoZSBub24tbnVsbGFibGUgc2lk ZQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBG Uk9NIGVhZ2VyX2FnZ190MSB0MSBSSUdIVCBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0g dDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEZpbmFsaXplIEdyb3VwQWdncmVnYXRlCisgICBPdXRwdXQ6IHQxLmEsIGF2Zyh0Mi5jKQorICAg R3JvdXAgS2V5OiB0MS5hCisgICAtPiAgU29ydAorICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFS VElBTCBhdmcodDIuYykpCisgICAgICAgICBTb3J0IEtleTogdDEuYQorICAgICAgICAgLT4gIEhh c2ggUmlnaHQgSm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmco dDIuYykpCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5iID0gdDIuYikKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QxIHQxCisgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIHQxLmIsIHQxLmMKKyAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIChQQVJUSUFMIGF2Zyh0Mi5j KSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgUEFSVElBTCBhdmcodDIuYykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIuYgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYSwgdDIuYiwgdDIuYworKDE4 IHJvd3MpCisKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgUklH SFQgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRF UiBCWSB0MS5hOworIGEgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk2CisgMiB8IDQ5NworIDMg fCA0OTgKKyA0IHwgNDk5CisgNSB8IDUwMAorIDYgfCA1MDEKKyA3IHwgNTAyCisgOCB8IDUwMwor IDkgfCA1MDQKKyAgIHwgNTA1CisoMTAgcm93cykKKworLS0gRW5zdXJlIGFnZ3JlZ2F0aW9uIGNh bm5vdCBiZSBwdXNoZWQgZG93biB0byB0aGUgbnVsbGFibGUgc2lkZQorRVhQTEFJTiAoVkVSQk9T RSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQyLmIsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0 MSBMRUZUIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQyLmIg T1JERVIgQlkgdDIuYjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgT3V0cHV0OiB0Mi5iLCAoYXZnKHQy LmMpKQorICAgU29ydCBLZXk6IHQyLmIKKyAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBP dXRwdXQ6IHQyLmIsIGF2Zyh0Mi5jKQorICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAg ICAtPiAgSGFzaCBSaWdodCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIHQyLmMK KyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyLmIgPSB0MS5iKQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDIuYSwgdDIuYiwgdDIuYworICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEuYgorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDEuYgorKDE1IHJvd3MpCisKK1NFTEVDVCB0Mi5iLCBhdmcodDIuYykg RlJPTSBlYWdlcl9hZ2dfdDEgdDEgTEVGVCBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0g dDIuYiBHUk9VUCBCWSB0Mi5iIE9SREVSIEJZIHQyLmI7CisgYiB8IGF2ZyAKKy0tLSstLS0tLQor IDEgfCA0OTYKKyAyIHwgNDk3CisgMyB8IDQ5OAorIDQgfCA0OTkKKyA1IHwgNTAwCisgNiB8IDUw MQorIDcgfCA1MDIKKyA4IHwgNTAzCisgOSB8IDUwNAorICAgfCAgICAKKygxMCByb3dzKQorCist LQorLS0gVGVzdCB0aGF0IGVhZ2VyIGFnZ3JlZ2F0aW9uIHdvcmtzIGZvciBwYXJhbGxlbCBwbGFu cworLS0KK1NFVCBwYXJhbGxlbF9zZXR1cF9jb3N0PTA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29z dD0wOworU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemU9MDsKK1NFVCBtYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyPTQ7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitT RUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdn X3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUg R3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDEuYSwgYXZnKHQyLmMpCisgICBHcm91cCBLZXk6 IHQxLmEKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0 Mi5jKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAgR2F0aGVyCisgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgICAg ICAgIFdvcmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmcodDIu YykpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5iID0gdDIuYikKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3QxIHQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIHQxLmIsIHQx LmMKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgUEFSVElBTCBhdmcodDIuYykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIuYgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdDIgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDIuYSwgdDIuYiwgdDIuYworKDIxIHJvd3MpCisKK1NFTEVDVCB0MS5hLCBhdmcodDIu YykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQy LmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworIGEgfCBhdmcgCistLS0rLS0tLS0KKyAx IHwgNDk2CisgMiB8IDQ5NworIDMgfCA0OTgKKyA0IHwgNDk5CisgNSB8IDUwMAorIDYgfCA1MDEK KyA3IHwgNTAyCisgOCB8IDUwMworIDkgfCA1MDQKKyg5IHJvd3MpCisKK1JFU0VUIHBhcmFsbGVs X3NldHVwX2Nvc3Q7CitSRVNFVCBwYXJhbGxlbF90dXBsZV9jb3N0OworUkVTRVQgbWluX3BhcmFs bGVsX3RhYmxlX3NjYW5fc2l6ZTsKK1JFU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRo ZXI7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MTsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3QyOwor RFJPUCBUQUJMRSBlYWdlcl9hZ2dfdDM7CistLQorLS0gVGVzdCBlYWdlciBhZ2dyZWdhdGlvbiBm b3IgcGFydGl0aW9ud2lzZSBqb2luCistLQorLS0gRW5hYmxlIHBhcnRpdGlvbndpc2UgYWdncmVn YXRlLCB3aGljaCBieSBkZWZhdWx0IGlzIGRpc2FibGVkLgorU0VUIGVuYWJsZV9wYXJ0aXRpb253 aXNlX2FnZ3JlZ2F0ZSBUTyB0cnVlOworLS0gRW5hYmxlIHBhcnRpdGlvbndpc2Ugam9pbiwgd2hp Y2ggYnkgZGVmYXVsdCBpcyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2lu IFRPIHRydWU7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjEoeCBpbnQsIHkgaW50KSBQQVJU SVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDEgUEFSVElU SU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFU RSBUQUJMRSBlYWdlcl9hZ2dfdGFiMV9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjEgRk9S IFZBTFVFUyBGUk9NICgxMCkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMV9w MyBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjEgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMw KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMih4IGludCwgeSBpbnQpIFBBUlRJVElPTiBC WSBSQU5HRSh5KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMSBQQVJUSVRJT04gT0Yg ZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTApOworQ1JFQVRFIFRBQkxF IGVhZ2VyX2FnZ190YWIyX3AyIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMiBGT1IgVkFMVUVT IEZST00gKDEwKSBUTyAoMjApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIyX3AzIFBBUlRJ VElPTiBPRiBlYWdlcl9hZ2dfdGFiMiBGT1IgVkFMVUVTIEZST00gKDIwKSBUTyAoMzApOworSU5T RVJUIElOVE8gZWFnZXJfYWdnX3RhYjEgU0VMRUNUIGkgJSAzMCwgaSAlIDIwIEZST00gZ2VuZXJh dGVfc2VyaWVzKDAsIDI5OSwgMikgaTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWIyIFNFTEVD VCBpICUgMjAsIGkgJSAzMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLCAyOTksIDMpIGk7CitBTkFM WVpFIGVhZ2VyX2FnZ190YWIxOworQU5BTFlaRSBlYWdlcl9hZ2dfdGFiMjsKKy0tIFdoZW4gR1JP VVAgQlkgY2xhdXNlIG1hdGNoZXM7IGZ1bGwgYWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZvciBl YWNoIHBhcnRpdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS54 LCBzdW0odDEueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190 YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgU29ydAorICAgT3V0cHV0OiB0MS54LCAoc3VtKHQxLnkpKSwgKGNvdW50KCopKQorICAg U29ydCBLZXk6IHQxLngKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNo QWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIHN1bSh0MS55KSwgY291bnQo KikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDEueAorICAgICAgICAgICAgICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0o dDEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29u ZDogKHQyLnkgPSB0MS54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMSB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Mi55CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0odDEueSkpLCAoUEFSVElBTCBj b3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueCwgUEFS VElBTCBzdW0odDEueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdyb3VwIEtleTogdDEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCB0MS55CisgICAgICAg ICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8x LngsIHN1bSh0MV8xLnkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8x LngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDFfMS54LCAoUEFSVElBTCBzdW0odDFfMS55KSksIChQQVJUSUFMIGNvdW50KCopKQor ICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMS55ID0gdDFfMS54KQorICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMiB0 Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueQorICAgICAgICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDFfMS54LCAoUEFSVElBTCBzdW0odDFfMS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIFBBUlRJQUwgc3VtKHQxXzEu eSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdy b3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQxXzEKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCB0MV8xLnkKKyAgICAgICAgIC0+ ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwg c3VtKHQxXzIueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzIueAor ICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV8yLngsIChQQVJUSUFMIHN1bSh0MV8yLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAg ICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLnkgPSB0MV8yLngpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIyX3AzIHQyXzIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55CisgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8y LngsIChQQVJUSUFMIHN1bSh0MV8yLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgUEFSVElBTCBzdW0odDFfMi55KSwg UEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMgdDFfMgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIHQxXzIueQorKDQ5IHJvd3MpCisKK1NF TEVDVCB0MS54LCBzdW0odDEueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVh Z2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQxLnggT1JERVIgQlkg dDEueDsKKyB4ICB8IHN1bSAgfCBjb3VudCAKKy0tLS0rLS0tLS0tKy0tLS0tLS0KKyAgMCB8ICA1 MDAgfCAgIDEwMAorICA2IHwgMTEwMCB8ICAgMTAwCisgMTIgfCAgNzAwIHwgICAxMDAKKyAxOCB8 IDEzMDAgfCAgIDEwMAorIDI0IHwgIDkwMCB8ICAgMTAwCisoNSByb3dzKQorCistLSBHUk9VUCBC WSBoYXZpbmcgb3RoZXIgbWF0Y2hpbmcga2V5CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYp CitTRUxFQ1QgdDIueSwgc3VtKHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQx LCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi55IE9SREVS IEJZIHQyLnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDIueSwgKHN1bSh0MS55KSksIChj b3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0Mi55CisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAg RmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCBzdW0o dDEueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyLnkKKyAgICAgICAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwg KFBBUlRJQUwgc3VtKHQxLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAg ICAgICBIYXNoIENvbmQ6ICh0Mi55ID0gdDEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDEgdDIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDIueQorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKHQxLnkp KSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFy dGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxLngsIFBBUlRJQUwgc3VtKHQxLnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxLngKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEg dDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueSwg dDEueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg IE91dHB1dDogdDJfMS55LCBzdW0odDFfMS55KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdy b3VwIEtleTogdDJfMS55CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgKFBBUlRJQUwgc3VtKHQxXzEueSkpLCAoUEFSVElB TCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueSA9IHQx XzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJf YWdnX3RhYjJfcDIgdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8x LnkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJQUwgc3VtKHQxXzEueSkpLCAoUEFSVElBTCBjb3Vu dCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBQQVJU SUFMIHN1bSh0MV8xLnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHcm91cCBLZXk6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0MV8xCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueSwgdDFfMS54 CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml8yLnksIHN1bSh0MV8yLnkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0Ml8yLnkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMi55LCAoUEFSVElBTCBzdW0odDFfMi55KSksIChQQVJUSUFMIGNv dW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMi55ID0gdDFfMi54 KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiMl9wMyB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueQor ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0odDFfMi55KSksIChQQVJUSUFMIGNvdW50KCop KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIFBBUlRJQUwg c3VtKHQxXzIueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdyb3VwIEtleTogdDFfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQxXzIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi55LCB0MV8yLngKKyg0 OSByb3dzKQorCitTRUxFQ1QgdDIueSwgc3VtKHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2Fn Z190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0 Mi55IE9SREVSIEJZIHQyLnk7CisgeSAgfCBzdW0gIHwgY291bnQgCistLS0tKy0tLS0tLSstLS0t LS0tCisgIDAgfCAgNTAwIHwgICAxMDAKKyAgNiB8IDExMDAgfCAgIDEwMAorIDEyIHwgIDcwMCB8 ICAgMTAwCisgMTggfCAxMzAwIHwgICAxMDAKKyAyNCB8ICA5MDAgfCAgIDEwMAorKDUgcm93cykK KworLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgZG9lcyBub3QgbWF0Y2g7IHBhcnRpYWwgYWdncmVn YXRpb24gaXMgcGVyZm9ybWVkIGZvciBlYWNoIHBhcnRpdGlvbi4KK0VYUExBSU4gKFZFUkJPU0Us IENPU1RTIE9GRikKK1NFTEVDVCB0Mi54LCBzdW0odDEueCksIGNvdW50KCopIEZST00gZWFnZXJf YWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZ IHQyLnggSEFWSU5HIGF2Zyh0MS54KSA+IDEwIE9SREVSIEJZIHQyLng7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDIu eCwgKHN1bSh0MS54KSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0Mi54CisgICAtPiAgRmlu YWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0Mi54LCBzdW0odDEueCksIGNv dW50KCopCisgICAgICAgICBHcm91cCBLZXk6IHQyLngKKyAgICAgICAgIEZpbHRlcjogKGF2Zyh0 MS54KSA+ICcxMCc6Om51bWVyaWMpCisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgKFBB UlRJQUwgc3VtKHQxXzEueCkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQQVJUSUFMIGF2Zyh0MV8x LngpKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMS55ID0gdDFfMS54KQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFi Ml9wMSB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDJf MS55CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MV8xLngsIChQQVJUSUFMIHN1bSh0MV8xLngpKSwgKFBBUlRJQUwgY291 bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMS54KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDFfMS54LCBQQVJUSUFMIHN1bSh0MV8xLngpLCBQQVJUSUFMIGNvdW50KCop LCBQQVJUSUFMIGF2Zyh0MV8xLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH cm91cCBLZXk6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MV8xCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIChQQVJUSUFM IHN1bSh0MV8yLngpKSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMi54KSkK KyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueSA9IHQxXzIueCkKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDIg dDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQyXzIueQor ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0odDFfMi54KSksIChQQVJUSUFMIGNvdW50KCop KSwgKFBBUlRJQUwgYXZnKHQxXzIueCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg UGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQxXzIueCwgUEFSVElBTCBzdW0odDFfMi54KSwgUEFSVElBTCBjb3VudCgqKSwgUEFS VElBTCBhdmcodDFfMi54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDFfMgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNo IEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCAoUEFSVElBTCBzdW0o dDFfMy54KSksIChQQVJUSUFMIGNvdW50KCopKSwgKFBBUlRJQUwgYXZnKHQxXzMueCkpCisgICAg ICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8zLnkgPSB0MV8zLngpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIyX3AzIHQyXzMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCB0Ml8zLnkKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzMueCwgKFBBUlRJQUwgc3VtKHQxXzMueCkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQ QVJUSUFMIGF2Zyh0MV8zLngpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRp YWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV8zLngsIFBBUlRJQUwgc3VtKHQxXzMueCksIFBBUlRJQUwgY291bnQoKiksIFBBUlRJQUwg YXZnKHQxXzMueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTog dDFfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQxXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDFfMy54CisoNDQgcm93cykKKworU0VMRUNUIHQyLngsIHN1 bSh0MS54KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIg dDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueCBIQVZJTkcgYXZnKHQxLngpID4gMTAg T1JERVIgQlkgdDIueDsKKyB4ICB8IHN1bSAgfCBjb3VudCAKKy0tLS0rLS0tLS0tKy0tLS0tLS0K KyAgMiB8ICA2MDAgfCAgICA1MAorICA0IHwgMTIwMCB8ICAgIDUwCisgIDggfCAgOTAwIHwgICAg NTAKKyAxMiB8ICA2MDAgfCAgICA1MAorIDE0IHwgMTIwMCB8ICAgIDUwCisgMTggfCAgOTAwIHwg ICAgNTAKKyg2IHJvd3MpCisKKy0tIENoZWNrIHdpdGggZWFnZXIgYWdncmVnYXRpb24gb3ZlciBq b2luIHJlbAorLS0gZnVsbCBhZ2dyZWdhdGlvbgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZG KQorU0VMRUNUIHQxLngsIHN1bSh0Mi55ICsgdDMueSkgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSBK T0lOIGVhZ2VyX2FnZ190YWIxIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYjEg dDMgT04gdDIueCA9IHQzLnggR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDEueCwgKHN1bSgodDIueSArIHQzLnkpKSkKKyAgIFNv cnQgS2V5OiB0MS54CisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCBzdW0oKHQyLnkgKyB0My55KSkK KyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDEueAorICAgICAgICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0oKHQy LnkgKyB0My55KSkpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS54ID0gdDIu eCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYjFfcDEgdDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueAorICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDIueCwgdDMueCwgKFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi54LCB0My54LCBQQVJUSUFMIHN1bSgodDIu eSArIHQzLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0 Mi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIHQyLngsIHQz LnksIHQzLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29u ZDogKHQyLnggPSB0My54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0My55LCB0My54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLnksIHQzLngKKyAgICAgICAgIC0+ICBG aW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgc3Vt KCh0Ml8xLnkgKyB0M18xLnkpKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngKKyAg ICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDFfMS54LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpKQorICAgICAgICAgICAgICAg ICAgICAgSGFzaCBDb25kOiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0MV8xCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgLT4g IEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCB0M18xLngs IChQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS54LCBQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNf MS55KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMS54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54LCB0 M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFz aCBDb25kOiAodDJfMS54ID0gdDNfMS54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0Ml8xCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEu eSwgdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0M18xCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEu eSwgdDNfMS54CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAg ICAgICAgT3V0cHV0OiB0MV8yLngsIHN1bSgodDJfMi55ICsgdDNfMi55KSkKKyAgICAgICAgICAg ICAgIEdyb3VwIEtleTogdDFfMi54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0 M18yLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzIueCA9IHQyXzIu eCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYjFfcDMgdDFfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzIueCwgdDNfMi54LCAoUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkp KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQzXzIueCwg UEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHcm91cCBLZXk6IHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Ml8yLnksIHQyXzIueCwgdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueCA9IHQzXzIueCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYjFfcDMgdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJf YWdnX3RhYjFfcDMgdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIHQzXzIueAorKDcwIHJvd3MpCisKK1NFTEVDVCB0 MS54LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9h Z2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLngg PSB0My54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKyB4ICB8ICBzdW0gIAorLS0tLSst LS0tLS0tCisgIDAgfCAxMDAwMAorICAyIHwgMTQwMDAKKyAgNCB8IDE4MDAwCisgIDYgfCAyMjAw MAorICA4IHwgMjYwMDAKKyAxMCB8IDEwMDAwCisgMTIgfCAxNDAwMAorIDE0IHwgMTgwMDAKKyAx NiB8IDIyMDAwCisgMTggfCAyNjAwMAorIDIwIHwgMTAwMDAKKyAyMiB8IDE0MDAwCisgMjQgfCAx ODAwMAorIDI2IHwgMjIwMDAKKyAyOCB8IDI2MDAwCisoMTUgcm93cykKKworLS0gcGFydGlhbCBh Z2dyZWdhdGlvbgorU0VUIGVuYWJsZV9oYXNoYWdnIFRPIG9mZjsKK0VYUExBSU4gKFZFUkJPU0Us IENPU1RTIE9GRikKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdn X3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2Vy X2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnkgT1JERVIgQlkgdDMueTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0My55 LCBzdW0oKHQyLnkgKyB0My55KSkKKyAgIEdyb3VwIEtleTogdDMueQorICAgLT4gIFNvcnQKKyAg ICAgICAgIE91dHB1dDogdDMueSwgKFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpKQorICAgICAg ICAgU29ydCBLZXk6IHQzLnkKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCAoUEFSVElB TCBzdW0oKHQyXzEueSArIHQzXzEueSkpKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDJfMS54ID0gdDFfMS54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgR3Jv dXBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0 Ml8xLngsIHQzXzEueCwgUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQzXzEueSwgdDJfMS54LCB0M18xLngKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDNfMS55LCB0Ml8xLngsIHQzXzEueAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQzXzEueSwgdDJfMS54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDNfMS55LCB0Ml8xLngsIHQz XzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo dDJfMS54ID0gdDNfMS54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0Ml8xCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQz XzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0M18xCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgdDNfMS54 CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDFfMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCAoUEFSVElBTCBzdW0oKHQyXzIu eSArIHQzXzIueSkpKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMi54ID0g dDFfMi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgR3JvdXBBZ2dyZWdhdGUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0Ml8yLngsIHQzXzIu eCwgUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBHcm91cCBLZXk6IHQzXzIueSwgdDJfMi54LCB0M18yLngKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzIueSwgdDNfMi55LCB0Ml8yLngsIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU29ydCBLZXk6IHQzXzIueSwgdDJfMi54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDNfMi55LCB0Ml8yLngsIHQzXzIueAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMi54ID0gdDNf Mi54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIHQzXzIueAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAgICAgICAg ICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MV8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYjFfcDIgdDFfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0MV8yLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDNfMy55LCAoUEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMueSkp KQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMy54ID0gdDFfMy54KQorICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgR3JvdXBBZ2dyZWdhdGUKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMy55LCB0Ml8zLngsIHQzXzMueCwgUEFSVElBTCBz dW0oKHQyXzMueSArIHQzXzMueSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBL ZXk6IHQzXzMueSwgdDJfMy54LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwg dDNfMy55LCB0Ml8zLngsIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U29ydCBLZXk6IHQzXzMueSwgdDJfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzMueSwgdDNfMy55LCB0Ml8zLngsIHQzXzMueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMy54ID0gdDNfMy54KQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiMV9wMyB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiMV9wMyB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Rh YjFfcDMgdDFfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8z LngKKyg3MyByb3dzKQorCitTRUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2Vy X2FnZ190YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBl YWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQz Lnk7CisgeSAgfCAgc3VtICAKKy0tLS0rLS0tLS0tLQorICAwIHwgIDc1MDAKKyAgMiB8IDEzNTAw CisgIDQgfCAxOTUwMAorICA2IHwgMjU1MDAKKyAgOCB8IDMxNTAwCisgMTAgfCAyMjUwMAorIDEy IHwgMjg1MDAKKyAxNCB8IDM0NTAwCisgMTYgfCA0MDUwMAorIDE4IHwgNDY1MDAKKygxMCByb3dz KQorCitSRVNFVCBlbmFibGVfaGFzaGFnZzsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3RhYjE7CitE Uk9QIFRBQkxFIGVhZ2VyX2FnZ190YWIyOworLS0KKy0tIFRlc3Qgd2l0aCBtdWx0aS1sZXZlbCBw YXJ0aXRpb25pbmcgc2NoZW1lCistLQorQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWwoeCBp bnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdn X3RhYl9tbF9wMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00g KDApIFRPICgxMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMiBQQVJUSVRJT04g T0YgZWFnZXJfYWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApIFBBUlRJVElP TiBCWSBSQU5HRSh4KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AyX3MxIFBBUlRJ VElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sX3AyIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSk7 CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiBQQVJUSVRJT04gT0YgZWFnZXJf YWdnX3RhYl9tbF9wMiBGT1IgVkFMVUVTIEZST00gKDE1KSBUTyAoMjApOworQ1JFQVRFIFRBQkxF IGVhZ2VyX2FnZ190YWJfbWxfcDMgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwgRk9SIFZB TFVFUyBGUk9NICgyMCkgVE8gKDMwKSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFC TEUgZWFnZXJfYWdnX3RhYl9tbF9wM19zMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9w MyBGT1IgVkFMVUVTIEZST00gKDIwKSBUTyAoMjUpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190 YWJfbWxfcDNfczIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDMgRk9SIFZBTFVFUyBG Uk9NICgyNSkgVE8gKDMwKTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWJfbWwgU0VMRUNUIGkg JSAzMCwgaSAlIDMwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CitBTkFMWVpFIGVh Z2VyX2FnZ190YWJfbWw7CistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBtYXRjaGVzOyBmdWxsIGFn Z3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChWRVJC T1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVh Z2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54 IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgT3V0cHV0OiB0 MS54LCAoc3VtKHQyLnkpKSwgKGNvdW50KCopKQorICAgU29ydCBLZXk6IHQxLngKKyAgIC0+ICBB cHBlbmQKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3Vw IEtleTogdDEueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0odDIueSkpLCAoUEFSVElBTCBjb3VudCgq KSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLnggPSB0Mi54KQorICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3Ax IHQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy LngsIChQQVJUSUFMIHN1bSh0Mi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi54LCBQQVJUSUFMIHN1bSh0Mi55KSwgUEFSVElB TCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0 Mi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDIueSwgdDIueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hB Z2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBzdW0odDJfMS55KSwgY291 bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAgICAt PiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJ QUwgc3VtKHQyXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAg IEhhc2ggQ29uZDogKHQxXzEueCA9IHQyXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSB0MV8xCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgLT4g IEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCAoUEFSVElB TCBzdW0odDJfMS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIFBBUlRJQUwgc3VtKHQyXzEueSksIFBBUlRJQUwgY291 bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMS54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueAorICAgICAgICAgLT4gIEZpbmFsaXpl IEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCBzdW0odDJfMi55 KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMi54CisgICAgICAgICAg ICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwg KFBBUlRJQUwgc3VtKHQyXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQxXzIueCA9IHQyXzIueCkKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0MV8yCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueAorICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCAo UEFSVElBTCBzdW0odDJfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIFBBUlRJQUwgc3VtKHQyXzIueSksIFBBUlRJ QUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTog dDJfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDJfMgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueAorICAgICAgICAgLT4gIEZp bmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54LCBzdW0o dDJfMy55KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMy54CisgICAg ICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQx XzMueCwgKFBBUlRJQUwgc3VtKHQyXzMueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzMueCA9IHQyXzMueCkKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMSB0MV8z CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMueAorICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf My54LCAoUEFSVElBTCBzdW0odDJfMy55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIFBBUlRJQUwgc3VtKHQyXzMueSks IFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vw IEtleTogdDJfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDJfMworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQyXzMueAorICAgICAgICAg LT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfNC54 LCBzdW0odDJfNC55KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfNC54 CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzQueCwgKFBBUlRJQUwgc3VtKHQyXzQueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAg ICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzQueCA9IHQyXzQueCkKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19z MiB0MV80CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueAorICAgICAg ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfNC54LCAoUEFSVElBTCBzdW0odDJfNC55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80LngsIFBBUlRJQUwgc3VtKHQy XzQueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdyb3VwIEtleTogdDJfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDJfNAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80LnksIHQyXzQueAorKDc5 IHJvd3MpCisKK1NFTEVDVCB0MS54LCBzdW0odDIueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdn X3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggR1JPVVAg QlkgdDEueCBPUkRFUiBCWSB0MS54OworIHggIHwgIHN1bSAgfCBjb3VudCAKKy0tLS0rLS0tLS0t LSstLS0tLS0tCisgIDAgfCAgICAgMCB8ICAxMDg5CisgIDEgfCAgMTE1NiB8ICAxMTU2CisgIDIg fCAgMjMxMiB8ICAxMTU2CisgIDMgfCAgMzQ2OCB8ICAxMTU2CisgIDQgfCAgNDYyNCB8ICAxMTU2 CisgIDUgfCAgNTc4MCB8ICAxMTU2CisgIDYgfCAgNjkzNiB8ICAxMTU2CisgIDcgfCAgODA5MiB8 ICAxMTU2CisgIDggfCAgOTI0OCB8ICAxMTU2CisgIDkgfCAxMDQwNCB8ICAxMTU2CisgMTAgfCAx MTU2MCB8ICAxMTU2CisgMTEgfCAxMTk3OSB8ICAxMDg5CisgMTIgfCAxMzA2OCB8ICAxMDg5Cisg MTMgfCAxNDE1NyB8ICAxMDg5CisgMTQgfCAxNTI0NiB8ICAxMDg5CisgMTUgfCAxNjMzNSB8ICAx MDg5CisgMTYgfCAxNzQyNCB8ICAxMDg5CisgMTcgfCAxODUxMyB8ICAxMDg5CisgMTggfCAxOTYw MiB8ICAxMDg5CisgMTkgfCAyMDY5MSB8ICAxMDg5CisgMjAgfCAyMTc4MCB8ICAxMDg5CisgMjEg fCAyMjg2OSB8ICAxMDg5CisgMjIgfCAyMzk1OCB8ICAxMDg5CisgMjMgfCAyNTA0NyB8ICAxMDg5 CisgMjQgfCAyNjEzNiB8ICAxMDg5CisgMjUgfCAyNzIyNSB8ICAxMDg5CisgMjYgfCAyODMxNCB8 ICAxMDg5CisgMjcgfCAyOTQwMyB8ICAxMDg5CisgMjggfCAzMDQ5MiB8ICAxMDg5CisgMjkgfCAz MTU4MSB8ICAxMDg5CisoMzAgcm93cykKKworLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgZG9lcyBu b3QgbWF0Y2g7IHBhcnRpYWwgYWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZvciBlYWNoIHBhcnRp dGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS55LCBzdW0odDIu eSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJf bWwgdDIgT04gdDEueCA9IHQyLnggR1JPVVAgQlkgdDEueSBPUkRFUiBCWSB0MS55OworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTb3J0CisgICBPdXRwdXQ6IHQxLnksIChzdW0odDIueSkpLCAoY291bnQoKikpCisgICBTb3J0 IEtleTogdDEueQorICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIE91dHB1 dDogdDEueSwgc3VtKHQyLnkpLCBjb3VudCgqKQorICAgICAgICAgR3JvdXAgS2V5OiB0MS55Cisg ICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueSwgKFBBUlRJQUwgc3VtKHQyXzEueSkpLCAoUEFS VElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzEueCA9 IHQyXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYl9tbF9wMSB0MV8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQxXzEueSwgdDFfMS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIChQQVJUSUFMIHN1bSh0Ml8xLnkpKSwg KFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlh bCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzEueCwgUEFSVElBTCBzdW0odDJfMS55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8xLngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9t bF9wMSB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzEueSwgdDJfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxXzIueSwgKFBBUlRJQUwgc3VtKHQyXzIueSkpLCAoUEFSVElB TCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzIueCA9IHQy XzIueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJf YWdnX3RhYl9tbF9wMl9zMSB0MV8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQxXzIueSwgdDFfMi54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIChQQVJUSUFMIHN1bSh0Ml8yLnkpKSwg KFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlh bCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzIueCwgUEFSVElBTCBzdW0odDJfMi55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8yLngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9t bF9wMl9zMSB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzIueSwgdDJfMi54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMueSwgKFBBUlRJQUwgc3VtKHQyXzMueSkpLCAoUEFS VElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzMueCA9 IHQyXzMueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYl9tbF9wMl9zMiB0MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzMueSwgdDFfMy54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIChQQVJUSUFMIHN1bSh0Ml8zLnkp KSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFy dGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzMueCwgUEFSVElBTCBzdW0odDJfMy55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8zLngKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Rh Yl9tbF9wMl9zMiB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzMueSwgdDJfMy54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueSwgKFBBUlRJQUwgc3VtKHQyXzQueSkpLCAo UEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzQu eCA9IHQyXzQueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYl9tbF9wM19zMSB0MV80CisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQxXzQueSwgdDFfNC54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80LngsIChQQVJUSUFMIHN1bSh0Ml80 LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg UGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzQueCwgUEFSVElBTCBzdW0odDJfNC55KSwgUEFSVElBTCBjb3VudCgqKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml80LngKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYl9tbF9wM19zMSB0Ml80CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzQueSwgdDJfNC54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzUueSwgKFBBUlRJQUwgc3VtKHQyXzUueSkp LCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQx XzUueCA9IHQyXzUueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMiB0MV81CisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxXzUueSwgdDFfNS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml81LngsIChQQVJUSUFMIHN1bSh0 Ml81LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzUueCwgUEFSVElBTCBzdW0odDJfNS55KSwgUEFSVElBTCBjb3VudCgqKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml81LngKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJf YWdnX3RhYl9tbF9wM19zMiB0Ml81CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyXzUueSwgdDJfNS54CisoNjcgcm93cykKKworU0VMRUNUIHQxLnksIHN1 bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdn X3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS55IE9SREVSIEJZIHQxLnk7Cisg eSAgfCAgc3VtICB8IGNvdW50IAorLS0tLSstLS0tLS0tKy0tLS0tLS0KKyAgMCB8ICAgICAwIHwg IDEwODkKKyAgMSB8ICAxMTU2IHwgIDExNTYKKyAgMiB8ICAyMzEyIHwgIDExNTYKKyAgMyB8ICAz NDY4IHwgIDExNTYKKyAgNCB8ICA0NjI0IHwgIDExNTYKKyAgNSB8ICA1NzgwIHwgIDExNTYKKyAg NiB8ICA2OTM2IHwgIDExNTYKKyAgNyB8ICA4MDkyIHwgIDExNTYKKyAgOCB8ICA5MjQ4IHwgIDEx NTYKKyAgOSB8IDEwNDA0IHwgIDExNTYKKyAxMCB8IDExNTYwIHwgIDExNTYKKyAxMSB8IDExOTc5 IHwgIDEwODkKKyAxMiB8IDEzMDY4IHwgIDEwODkKKyAxMyB8IDE0MTU3IHwgIDEwODkKKyAxNCB8 IDE1MjQ2IHwgIDEwODkKKyAxNSB8IDE2MzM1IHwgIDEwODkKKyAxNiB8IDE3NDI0IHwgIDEwODkK KyAxNyB8IDE4NTEzIHwgIDEwODkKKyAxOCB8IDE5NjAyIHwgIDEwODkKKyAxOSB8IDIwNjkxIHwg IDEwODkKKyAyMCB8IDIxNzgwIHwgIDEwODkKKyAyMSB8IDIyODY5IHwgIDEwODkKKyAyMiB8IDIz OTU4IHwgIDEwODkKKyAyMyB8IDI1MDQ3IHwgIDEwODkKKyAyNCB8IDI2MTM2IHwgIDEwODkKKyAy NSB8IDI3MjI1IHwgIDEwODkKKyAyNiB8IDI4MzE0IHwgIDEwODkKKyAyNyB8IDI5NDAzIHwgIDEw ODkKKyAyOCB8IDMwNDkyIHwgIDEwODkKKyAyOSB8IDMxNTgxIHwgIDEwODkKKygzMCByb3dzKQor CistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0tIGZ1bGwg YWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS54LCBz dW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBl YWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0 MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgT3V0cHV0OiB0MS54 LCAoc3VtKCh0Mi55ICsgdDMueSkpKSwgKGNvdW50KCopKQorICAgU29ydCBLZXk6IHQxLngKKyAg IC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxLngsIHN1bSgodDIueSArIHQzLnkpKSwgY291bnQoKikKKyAgICAg ICAgICAgICAgIEdyb3VwIEtleTogdDEueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0oKHQyLnkgKyB0 My55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29u ZDogKHQxLnggPSB0Mi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQxLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyLngsIHQzLngsIChQQVJUSUFMIHN1bSgodDIueSArIHQz LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Mi54LCB0My54LCBQQVJUSUFMIHN1bSgodDIueSArIHQzLnkpKSwgUEFSVElBTCBj b3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIHQyLngsIHQzLnks IHQzLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQyLnggPSB0My54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQyCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIHQyLngKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLnksIHQzLngKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0My55LCB0My54CisgICAgICAgICAtPiAg RmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIHN1 bSgodDJfMS55ICsgdDNfMS55KSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6 IHQxXzEueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8xLngsIChQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkpLCAoUEFS VElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzEueCA9 IHQyXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYl9tbF9wMl9zMSB0MV8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCB0M18xLngsIChQQVJUSUFMIHN1bSgodDJfMS55 ICsgdDNfMS55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMS54LCB0M18xLngsIFBBUlRJQUwgc3VtKCh0Ml8xLnkgKyB0M18x LnkpKSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R3JvdXAgS2V5OiB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDJfMS55LCB0Ml8xLngsIHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8xLnggPSB0M18xLngpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWJfbWxfcDJfczEgdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0M18xLngKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYl9tbF9wMl9zMSB0M18xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgdDNfMS54CisgICAgICAgICAtPiAgRmluYWxp emUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIHN1bSgodDJf Mi55ICsgdDNfMi55KSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzIu eAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0MV8yLngsIChQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSkpLCAoUEFSVElBTCBj b3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzIueCA9IHQyXzIu eCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYl9tbF9wMl9zMiB0MV8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQx XzIueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMi54LCB0M18yLngsIChQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNf Mi55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMi54LCB0M18yLngsIFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSwg UEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55 LCB0Ml8yLngsIHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLnggPSB0M18yLngpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJf bWxfcDJfczIgdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9t bF9wMl9zMiB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAgICAgICAtPiAgRmluYWxpemUgSGFz aEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngsIHN1bSgodDJfMy55ICsg dDNfMy55KSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzMueAorICAg ICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MV8zLngsIChQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSkpLCAoUEFSVElBTCBjb3VudCgq KSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzMueCA9IHQyXzMueCkKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9t bF9wM19zMSB0MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMueAor ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMy54LCB0M18zLngsIChQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSkp LCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0 aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfMy54LCB0M18zLngsIFBBUlRJQUwgc3VtKCh0Ml8zLnkgKyB0M18zLnkpKSwgUEFSVElB TCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0 Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8z LngsIHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0Ml8zLnggPSB0M18zLngpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNf czEgdDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml8zLnksIHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19z MSB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQzXzMueSwgdDNfMy54CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngsIHN1bSgodDJfNC55ICsgdDNfNC55 KSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzQueAorICAgICAgICAg ICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80Lngs IChQQVJUSUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAg ICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzQueCA9IHQyXzQueCkKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19z MiB0MV80CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueAorICAgICAg ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfNC54LCB0M180LngsIChQQVJUSUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSkpLCAoUEFS VElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhh c2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf NC54LCB0M180LngsIFBBUlRJQUwgc3VtKCh0Ml80LnkgKyB0M180LnkpKSwgUEFSVElBTCBjb3Vu dCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml80LngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC55LCB0Ml80LngsIHQz XzQueSwgdDNfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNo IENvbmQ6ICh0Ml80LnggPSB0M180LngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDJf NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml80LnksIHQyXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDNfNC55LCB0M180LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMiB0M180 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQzXzQueSwgdDNfNC54CisoMTE0IHJvd3MpCisKK1NFTEVDVCB0MS54LCBzdW0odDIueSAr IHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2df dGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54 ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgeCAgfCAgIHN1bSAgIHwgY291 bnQgCistLS0tKy0tLS0tLS0tLSstLS0tLS0tCisgIDAgfCAgICAgICAwIHwgMzU5MzcKKyAgMSB8 ICAgNzg2MDggfCAzOTMwNAorICAyIHwgIDE1NzIxNiB8IDM5MzA0CisgIDMgfCAgMjM1ODI0IHwg MzkzMDQKKyAgNCB8ICAzMTQ0MzIgfCAzOTMwNAorICA1IHwgIDM5MzA0MCB8IDM5MzA0CisgIDYg fCAgNDcxNjQ4IHwgMzkzMDQKKyAgNyB8ICA1NTAyNTYgfCAzOTMwNAorICA4IHwgIDYyODg2NCB8 IDM5MzA0CisgIDkgfCAgNzA3NDcyIHwgMzkzMDQKKyAxMCB8ICA3ODYwODAgfCAzOTMwNAorIDEx IHwgIDc5MDYxNCB8IDM1OTM3CisgMTIgfCAgODYyNDg4IHwgMzU5MzcKKyAxMyB8ICA5MzQzNjIg fCAzNTkzNworIDE0IHwgMTAwNjIzNiB8IDM1OTM3CisgMTUgfCAxMDc4MTEwIHwgMzU5MzcKKyAx NiB8IDExNDk5ODQgfCAzNTkzNworIDE3IHwgMTIyMTg1OCB8IDM1OTM3CisgMTggfCAxMjkzNzMy IHwgMzU5MzcKKyAxOSB8IDEzNjU2MDYgfCAzNTkzNworIDIwIHwgMTQzNzQ4MCB8IDM1OTM3Cisg MjEgfCAxNTA5MzU0IHwgMzU5MzcKKyAyMiB8IDE1ODEyMjggfCAzNTkzNworIDIzIHwgMTY1MzEw MiB8IDM1OTM3CisgMjQgfCAxNzI0OTc2IHwgMzU5MzcKKyAyNSB8IDE3OTY4NTAgfCAzNTkzNwor IDI2IHwgMTg2ODcyNCB8IDM1OTM3CisgMjcgfCAxOTQwNTk4IHwgMzU5MzcKKyAyOCB8IDIwMTI0 NzIgfCAzNTkzNworIDI5IHwgMjA4NDM0NiB8IDM1OTM3CisoMzAgcm93cykKKworLS0gcGFydGlh bCBhZ2dyZWdhdGlvbgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQzLnks IHN1bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lO IGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21s IHQzIG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnkgT1JERVIgQlkgdDMueTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29y dAorICAgT3V0cHV0OiB0My55LCAoc3VtKCh0Mi55ICsgdDMueSkpKSwgKGNvdW50KCopKQorICAg U29ydCBLZXk6IHQzLnkKKyAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBP dXRwdXQ6IHQzLnksIHN1bSgodDIueSArIHQzLnkpKSwgY291bnQoKikKKyAgICAgICAgIEdyb3Vw IEtleTogdDMueQorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIChQQVJUSUFMIHN1bSgo dDJfMS55ICsgdDNfMS55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHQxXzEueCA9IHQyXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MV8xCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgLT4g IEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0Ml8xLngs IHQzXzEueCwgKFBBUlRJQUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKSksIChQQVJUSUFMIGNvdW50 KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0 ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQyXzEu eCwgdDNfMS54LCBQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSksIFBBUlRJQUwgY291bnQo KikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDNfMS55LCB0 Ml8xLngsIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8x LnksIHQzXzEueSwgdDJfMS54LCB0M18xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueCA9IHQzXzEueCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Rh Yl9tbF9wMSB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21s X3AxIHQzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDNfMS55LCB0M18xLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCAoUEFSVElBTCBzdW0oKHQyXzIu eSArIHQzXzIueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBI YXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDFfMgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDJfMi54LCB0 M18yLngsIChQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSkpLCAoUEFSVElBTCBjb3VudCgq KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0Ml8yLngs IHQzXzIueCwgUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpLCBQQVJUSUFMIGNvdW50KCop CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQzXzIueSwgdDJf Mi54LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55 LCB0M18yLnksIHQyXzIueCwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLnggPSB0M18yLngpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJf bWxfcDJfczEgdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9t bF9wMl9zMSB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgKFBBUlRJQUwgc3VtKCh0 Ml8zLnkgKyB0M18zLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDFfMy54ID0gdDJfMy54KQorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQxXzMKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54CisgICAgICAgICAgICAgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIHQyXzMu eCwgdDNfMy54LCAoUEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMueSkpKSwgKFBBUlRJQUwgY291 bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVn YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDJf My54LCB0M18zLngsIFBBUlRJQUwgc3VtKCh0Ml8zLnkgKyB0M18zLnkpKSwgUEFSVElBTCBjb3Vu dCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0M18zLnks IHQyXzMueCwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzMueSwgdDNfMy55LCB0Ml8zLngsIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMy54ID0gdDNfMy54KQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiX21sX3AyX3MyIHQyXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190 YWJfbWxfcDJfczIgdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M180LnksIChQQVJUSUFMIHN1 bSgodDJfNC55ICsgdDNfNC55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQxXzQueCA9IHQyXzQueCkKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMSB0MV80CisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueAorICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNC55LCB0 Ml80LngsIHQzXzQueCwgKFBBUlRJQUwgc3VtKCh0Ml80LnkgKyB0M180LnkpKSksIChQQVJUSUFM IGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M180Lnks IHQyXzQueCwgdDNfNC54LCBQQVJUSUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSksIFBBUlRJQUwg Y291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDNf NC55LCB0Ml80LngsIHQzXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml80LnksIHQzXzQueSwgdDJfNC54LCB0M180LngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzQueCA9IHQzXzQueCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJf YWdnX3RhYl9tbF9wM19zMSB0Ml80CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzQueSwgdDJfNC54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0M180LnksIHQzXzQueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiX21sX3AzX3MxIHQzXzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNC55LCB0M180LngKKyAgICAgICAgICAgICAgIC0+ ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNS55LCAoUEFSVElB TCBzdW0oKHQyXzUueSArIHQzXzUueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV81LnggPSB0Ml81LngpCisgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDFfNQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV81LngKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzUu eSwgdDJfNS54LCB0M181LngsIChQQVJUSUFMIHN1bSgodDJfNS55ICsgdDNfNS55KSkpLCAoUEFS VElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhh c2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNf NS55LCB0Ml81LngsIHQzXzUueCwgUEFSVElBTCBzdW0oKHQyXzUueSArIHQzXzUueSkpLCBQQVJU SUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6 IHQzXzUueSwgdDJfNS54LCB0M181LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfNS55LCB0M181LnksIHQyXzUueCwgdDNfNS54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml81LnggPSB0M181LngpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWJfbWxfcDNfczIgdDJfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml81LnksIHQyXzUueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNS55LCB0M181LngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYl9tbF9wM19zMiB0M181CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzUueSwgdDNfNS54CisoMTAyIHJvd3MpCisK K1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190 YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFn ZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQz Lnk7CisgeSAgfCAgIHN1bSAgIHwgY291bnQgCistLS0tKy0tLS0tLS0tLSstLS0tLS0tCisgIDAg fCAgICAgICAwIHwgMzU5MzcKKyAgMSB8ICAgNzg2MDggfCAzOTMwNAorICAyIHwgIDE1NzIxNiB8 IDM5MzA0CisgIDMgfCAgMjM1ODI0IHwgMzkzMDQKKyAgNCB8ICAzMTQ0MzIgfCAzOTMwNAorICA1 IHwgIDM5MzA0MCB8IDM5MzA0CisgIDYgfCAgNDcxNjQ4IHwgMzkzMDQKKyAgNyB8ICA1NTAyNTYg fCAzOTMwNAorICA4IHwgIDYyODg2NCB8IDM5MzA0CisgIDkgfCAgNzA3NDcyIHwgMzkzMDQKKyAx MCB8ICA3ODYwODAgfCAzOTMwNAorIDExIHwgIDc5MDYxNCB8IDM1OTM3CisgMTIgfCAgODYyNDg4 IHwgMzU5MzcKKyAxMyB8ICA5MzQzNjIgfCAzNTkzNworIDE0IHwgMTAwNjIzNiB8IDM1OTM3Cisg MTUgfCAxMDc4MTEwIHwgMzU5MzcKKyAxNiB8IDExNDk5ODQgfCAzNTkzNworIDE3IHwgMTIyMTg1 OCB8IDM1OTM3CisgMTggfCAxMjkzNzMyIHwgMzU5MzcKKyAxOSB8IDEzNjU2MDYgfCAzNTkzNwor IDIwIHwgMTQzNzQ4MCB8IDM1OTM3CisgMjEgfCAxNTA5MzU0IHwgMzU5MzcKKyAyMiB8IDE1ODEy MjggfCAzNTkzNworIDIzIHwgMTY1MzEwMiB8IDM1OTM3CisgMjQgfCAxNzI0OTc2IHwgMzU5MzcK KyAyNSB8IDE3OTY4NTAgfCAzNTkzNworIDI2IHwgMTg2ODcyNCB8IDM1OTM3CisgMjcgfCAxOTQw NTk4IHwgMzU5MzcKKyAyOCB8IDIwMTI0NzIgfCAzNTkzNworIDI5IHwgMjA4NDM0NiB8IDM1OTM3 CisoMzAgcm93cykKKworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFy YWxsZWxfc2NoZWR1bGUKaW5kZXggOTY5Y2VkOTk0Zi4uMDYzNjJhZTFlNyAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0xMTksNyArMTE5LDcgQEAgdGVzdDogcGxhbmNhY2hlIGxp bWl0IHBscGdzcWwgY29weTIgdGVtcCBkb21haW4gcmFuZ2VmdW5jcyBwcmVwYXJlIGNvbnZlcnNp b24gdHIKICMgVGhlIHN0YXRzIHRlc3QgcmVzZXRzIHN0YXRzLCBzbyBub3RoaW5nIGVsc2UgbmVl ZGluZyBzdGF0cyBhY2Nlc3MgY2FuIGJlIGluCiAjIHRoaXMgZ3JvdXAuCiAjIC0tLS0tLS0tLS0K LXRlc3Q6IHBhcnRpdGlvbl9tZXJnZSBwYXJ0aXRpb25fc3BsaXQgcGFydGl0aW9uX2pvaW4gcGFy dGl0aW9uX3BydW5lIHJlbG9wdGlvbnMgaGFzaF9wYXJ0IGluZGV4aW5nIHBhcnRpdGlvbl9hZ2dy ZWdhdGUgcGFydGl0aW9uX2luZm8gdHVwbGVzb3J0IGV4cGxhaW4gY29tcHJlc3Npb24gbWVtb2l6 ZSBzdGF0cyBwcmVkaWNhdGUKK3Rlc3Q6IHBhcnRpdGlvbl9tZXJnZSBwYXJ0aXRpb25fc3BsaXQg cGFydGl0aW9uX2pvaW4gcGFydGl0aW9uX3BydW5lIHJlbG9wdGlvbnMgaGFzaF9wYXJ0IGluZGV4 aW5nIHBhcnRpdGlvbl9hZ2dyZWdhdGUgcGFydGl0aW9uX2luZm8gdHVwbGVzb3J0IGV4cGxhaW4g Y29tcHJlc3Npb24gbWVtb2l6ZSBzdGF0cyBwcmVkaWNhdGUgZWFnZXJfYWdncmVnYXRlCiAKICMg ZXZlbnRfdHJpZ2dlciBkZXBlbmRzIG9uIGNyZWF0ZV9hbSBhbmQgY2Fubm90IHJ1biBjb25jdXJy ZW50bHkgd2l0aAogIyBhbnkgdGVzdCB0aGF0IHJ1bnMgRERMCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9lYWdlcl9hZ2dyZWdhdGUuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv ZWFnZXJfYWdncmVnYXRlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li40MDUwZTRkZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZWFn ZXJfYWdncmVnYXRlLnNxbApAQCAtMCwwICsxLDE5MiBAQAorLS0KKy0tIEVBR0VSIEFHR1JFR0FU SU9OCistLSBUZXN0IHdlIGNhbiBwdXNoIGFnZ3JlZ2F0aW9uIGRvd24gYmVsb3cgam9pbgorLS0K KworLS0gRW5hYmxlIGVhZ2VyIGFnZ3JlZ2F0aW9uLCB3aGljaCBieSBkZWZhdWx0IGlzIGRpc2Fi bGVkLgorU0VUIGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgVE8gb247CisKK0NSRUFURSBUQUJMRSBl YWdlcl9hZ2dfdDEgKGEgaW50LCBiIGludCwgYyBkb3VibGUgcHJlY2lzaW9uKTsKK0NSRUFURSBU QUJMRSBlYWdlcl9hZ2dfdDIgKGEgaW50LCBiIGludCwgYyBkb3VibGUgcHJlY2lzaW9uKTsKK0NS RUFURSBUQUJMRSBlYWdlcl9hZ2dfdDMgKGEgaW50LCBiIGludCwgYyBkb3VibGUgcHJlY2lzaW9u KTsKKworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3QxIFNFTEVDVCBpLCBpLCBpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDApaTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190MiBTRUxFQ1QgaSwg aSUxMCwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKWk7CitJTlNFUlQgSU5UTyBlYWdl cl9hZ2dfdDMgU0VMRUNUIGklMTAsIGklMTAsIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAw MClpOworCitBTkFMWVpFIGVhZ2VyX2FnZ190MTsKK0FOQUxZWkUgZWFnZXJfYWdnX3QyOworQU5B TFlaRSBlYWdlcl9hZ2dfdDM7CisKKworLS0KKy0tIFRlc3QgZWFnZXIgYWdncmVnYXRpb24gb3Zl ciBiYXNlIHJlbAorLS0KKworLS0gUGVyZm9ybSBzY2FuIG9mIGEgdGFibGUsIGFnZ3JlZ2F0ZSB0 aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQorLS0gYW5kIGZpbmFsaXplIHRo ZSBhZ2dyZWdhdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5h LCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04g dDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworU0VMRUNUIHQxLmEsIGF2 Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5i ID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisKKy0tIFByb2R1Y2UgcmVzdWx0 cyB3aXRoIHNvcnRpbmcgYWdncmVnYXRpb24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7CisK K0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJP TSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JP VVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVh Z2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBC WSB0MS5hIE9SREVSIEJZIHQxLmE7CisKK1JFU0VUIGVuYWJsZV9oYXNoYWdnOworCisKKy0tCist LSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0tCisKKy0tIFBlcmZvcm0g am9pbiBvZiB0YWJsZXMsIGFnZ3JlZ2F0ZSB0aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhl ciB0YWJsZQorLS0gYW5kIGZpbmFsaXplIHRoZSBhZ2dyZWdhdGlvbi4KK0VYUExBSU4gKFZFUkJP U0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJf YWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJf YWdnX3QzIHQzIE9OIHQyLmEgPSB0My5hIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKK1NF TEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFn ZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEg PSB0My5hIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKworLS0gUHJvZHVjZSByZXN1bHRz IHdpdGggc29ydGluZyBhZ2dyZWdhdGlvbgorU0VUIGVuYWJsZV9oYXNoYWdnIFRPIG9mZjsKKwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsgdDMu YykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQy LmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBPUkRF UiBCWSB0MS5hOworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBlYWdlcl9hZ2df dDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgSk9JTiBlYWdlcl9hZ2df dDMgdDMgT04gdDIuYSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworCitSRVNF VCBlbmFibGVfaGFzaGFnZzsKKworCistLQorLS0gVGVzdCB0aGF0IGVhZ2VyIGFnZ3JlZ2F0aW9u IHdvcmtzIGZvciBvdXRlciBqb2luCistLQorCistLSBFbnN1cmUgYWdncmVnYXRpb24gY2FuIGJl IHB1c2hlZCBkb3duIHRvIHRoZSBub24tbnVsbGFibGUgc2lkZQorRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBS SUdIVCBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9S REVSIEJZIHQxLmE7CitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQx IFJJR0hUIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEg T1JERVIgQlkgdDEuYTsKKworLS0gRW5zdXJlIGFnZ3JlZ2F0aW9uIGNhbm5vdCBiZSBwdXNoZWQg ZG93biB0byB0aGUgbnVsbGFibGUgc2lkZQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUIHQyLmIsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBMRUZUIEpPSU4gZWFn ZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQyLmIgT1JERVIgQlkgdDIuYjsK K1NFTEVDVCB0Mi5iLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgTEVGVCBKT0lOIGVh Z2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0Mi5iIE9SREVSIEJZIHQyLmI7 CisKKworLS0KKy0tIFRlc3QgdGhhdCBlYWdlciBhZ2dyZWdhdGlvbiB3b3JrcyBmb3IgcGFyYWxs ZWwgcGxhbnMKKy0tCisKK1NFVCBwYXJhbGxlbF9zZXR1cF9jb3N0PTA7CitTRVQgcGFyYWxsZWxf dHVwbGVfY29zdD0wOworU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemU9MDsKK1NFVCBt YXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyPTQ7CisKK0VYUExBSU4gKFZFUkJPU0UsIENP U1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9J TiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0 MS5hOworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVh Z2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7 CisKK1JFU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3Q7CitSRVNFVCBwYXJhbGxlbF90dXBsZV9jb3N0 OworUkVTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZTsKK1JFU0VUIG1heF9wYXJhbGxl bF93b3JrZXJzX3Blcl9nYXRoZXI7CisKKworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdDE7CitEUk9Q IFRBQkxFIGVhZ2VyX2FnZ190MjsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3QzOworCisKKy0tCist LSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIGZvciBwYXJ0aXRpb253aXNlIGpvaW4KKy0tCisKKy0t IEVuYWJsZSBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0ZSwgd2hpY2ggYnkgZGVmYXVsdCBpcyBkaXNh YmxlZC4KK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9hZ2dyZWdhdGUgVE8gdHJ1ZTsKKy0tIEVu YWJsZSBwYXJ0aXRpb253aXNlIGpvaW4sIHdoaWNoIGJ5IGRlZmF1bHQgaXMgZGlzYWJsZWQuCitT RVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOworCitDUkVBVEUgVEFCTEUgZWFn ZXJfYWdnX3RhYjEoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUg VEFCTEUgZWFnZXJfYWdnX3RhYjFfcDEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBW QUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMV9wMiBQ QVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjEgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIwKTsK K0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMV9wMyBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3Rh YjEgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2df dGFiMih4IGludCwgeSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSh5KTsKK0NSRUFURSBUQUJMRSBl YWdlcl9hZ2dfdGFiMl9wMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBG Uk9NICgwKSBUTyAoMTApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIyX3AyIFBBUlRJVElP TiBPRiBlYWdlcl9hZ2dfdGFiMiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApOworQ1JFQVRF IFRBQkxFIGVhZ2VyX2FnZ190YWIyX3AzIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMiBGT1Ig VkFMVUVTIEZST00gKDIwKSBUTyAoMzApOworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3RhYjEgU0VM RUNUIGkgJSAzMCwgaSAlIDIwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsIDI5OSwgMikgaTsKK0lO U0VSVCBJTlRPIGVhZ2VyX2FnZ190YWIyIFNFTEVDVCBpICUgMjAsIGkgJSAzMCBGUk9NIGdlbmVy YXRlX3NlcmllcygwLCAyOTksIDMpIGk7CisKK0FOQUxZWkUgZWFnZXJfYWdnX3RhYjE7CitBTkFM WVpFIGVhZ2VyX2FnZ190YWIyOworCistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBtYXRjaGVzOyBm dWxsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlO IChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQxLnkpLCBjb3VudCgqKSBG Uk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIu eSBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CitTRUxFQ1QgdDEueCwgc3VtKHQxLnkpLCBj b3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0 MS54ID0gdDIueSBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisKKy0tIEdST1VQIEJZIGhh dmluZyBvdGhlciBtYXRjaGluZyBrZXkKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0Mi55LCBzdW0odDEueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVh Z2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQyLnkgT1JERVIgQlkg dDIueTsKK1NFTEVDVCB0Mi55LCBzdW0odDEueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3Rh YjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQyLnkg T1JERVIgQlkgdDIueTsKKworLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgZG9lcyBub3QgbWF0Y2g7 IHBhcnRpYWwgYWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZvciBlYWNoIHBhcnRpdGlvbi4KK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0Mi54LCBzdW0odDEueCksIGNvdW50 KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLngg PSB0Mi55IEdST1VQIEJZIHQyLnggSEFWSU5HIGF2Zyh0MS54KSA+IDEwIE9SREVSIEJZIHQyLng7 CitTRUxFQ1QgdDIueCwgc3VtKHQxLngpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQx LCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi54IEhBVklO RyBhdmcodDEueCkgPiAxMCBPUkRFUiBCWSB0Mi54OworCistLSBDaGVjayB3aXRoIGVhZ2VyIGFn Z3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0tIGZ1bGwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZF UkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFn ZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lO IGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQxLnggT1JERVIgQlkg dDEueDsKK1NFTEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEg dDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190 YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKworLS0g cGFydGlhbCBhZ2dyZWdhdGlvbgorU0VUIGVuYWJsZV9oYXNoYWdnIFRPIG9mZjsKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpIEZST00g ZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBK T0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnkgT1JERVIg QlkgdDMueTsKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3Rh YjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2Fn Z190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnkgT1JERVIgQlkgdDMueTsKK1JF U0VUIGVuYWJsZV9oYXNoYWdnOworCitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190YWIxOworRFJPUCBU QUJMRSBlYWdlcl9hZ2dfdGFiMjsKKworCistLQorLS0gVGVzdCB3aXRoIG11bHRpLWxldmVsIHBh cnRpdGlvbmluZyBzY2hlbWUKKy0tCitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbCh4IGlu dCwgeSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSh4KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2df dGFiX21sX3AxIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sIEZPUiBWQUxVRVMgRlJPTSAo MCkgVE8gKDEwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AyIFBBUlRJVElPTiBP RiBlYWdlcl9hZ2dfdGFiX21sIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgyMCkgUEFSVElUSU9O IEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDJfczEgUEFSVElU SU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDIgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDE1KTsK K0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AyX3MyIFBBUlRJVElPTiBPRiBlYWdlcl9h Z2dfdGFiX21sX3AyIEZPUiBWQUxVRVMgRlJPTSAoMTUpIFRPICgyMCk7CitDUkVBVEUgVEFCTEUg ZWFnZXJfYWdnX3RhYl9tbF9wMyBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbCBGT1IgVkFM VUVTIEZST00gKDIwKSBUTyAoMzApIFBBUlRJVElPTiBCWSBSQU5HRSh4KTsKK0NSRUFURSBUQUJM RSBlYWdlcl9hZ2dfdGFiX21sX3AzX3MxIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sX3Az IEZPUiBWQUxVRVMgRlJPTSAoMjApIFRPICgyNSk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3Rh Yl9tbF9wM19zMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9wMyBGT1IgVkFMVUVTIEZS T00gKDI1KSBUTyAoMzApOworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3RhYl9tbCBTRUxFQ1QgaSAl IDMwLCBpICUgMzAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgaTsKKworQU5BTFlaRSBl YWdlcl9hZ2dfdGFiX21sOworCistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBtYXRjaGVzOyBmdWxs IGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9N IGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0 Mi54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKK1NFTEVDVCB0MS54LCBzdW0odDIueSks IGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwg dDIgT04gdDEueCA9IHQyLnggR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworCistLSBXaGVu IEdST1VQIEJZIGNsYXVzZSBkb2VzIG5vdCBtYXRjaDsgcGFydGlhbCBhZ2dyZWdhdGlvbiBpcyBw ZXJmb3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZG KQorU0VMRUNUIHQxLnksIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21s IHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS55 IE9SREVSIEJZIHQxLnk7CitTRUxFQ1QgdDEueSwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVh Z2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54 IEdST1VQIEJZIHQxLnkgT1JERVIgQlkgdDEueTsKKworLS0gQ2hlY2sgd2l0aCBlYWdlciBhZ2dy ZWdhdGlvbiBvdmVyIGpvaW4gcmVsCistLSBmdWxsIGFnZ3JlZ2F0aW9uCitFWFBMQUlOIChWRVJC T1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55KSwgY291bnQoKikg RlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54 ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAgQlkg dDEueCBPUkRFUiBCWSB0MS54OworU0VMRUNUIHQxLngsIHN1bSh0Mi55ICsgdDMueSksIGNvdW50 KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04g dDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdST1VQ IEJZIHQxLnggT1JERVIgQlkgdDEueDsKKworLS0gcGFydGlhbCBhZ2dyZWdhdGlvbgorRVhQTEFJ TiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSksIGNv dW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIg T04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdS T1VQIEJZIHQzLnkgT1JERVIgQlkgdDMueTsKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkp LCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21s IHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMu eCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CisKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3Rh Yl9tbDsKLS0gCjIuNDMuMAoK --000000000000b2a431061ac0ff96 Content-Type: application/octet-stream; name="v8-0009-Add-README.patch" Content-Disposition: attachment; filename="v8-0009-Add-README.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxcz8jw98 RnJvbSA0NGI2Yjc3NGNiOGIwZWFmYzAxMDY3YzM0MDVjZWEwOTNlOTFhY2RjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNjoxNzoyNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjgg OS85XSBBZGQgUkVBRE1FCgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9SRUFETUUgfCA4OCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA4OCBp bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL1JFQURNRSBi L3NyYy9iYWNrZW5kL29wdGltaXplci9SRUFETUUKaW5kZXggMmFiNGYzZGJmMy4uZGFlN2I4N2Yz MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL1JFQURNRQorKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvUkVBRE1FCkBAIC0xNDk3LDMgKzE0OTcsOTEgQEAgYnJlYWtpbmcgZG93 biBhZ2dyZWdhdGlvbiBvciBncm91cGluZyBvdmVyIGEgcGFydGl0aW9uZWQgcmVsYXRpb24gaW50 bwogYWdncmVnYXRpb24gb3IgZ3JvdXBpbmcgb3ZlciBpdHMgcGFydGl0aW9ucyBpcyBjYWxsZWQg cGFydGl0aW9ud2lzZQogYWdncmVnYXRpb24uICBFc3BlY2lhbGx5IHdoZW4gdGhlIHBhcnRpdGlv biBrZXlzIG1hdGNoIHRoZSBHUk9VUCBCWSBjbGF1c2UsCiB0aGlzIGNhbiBiZSBzaWduaWZpY2Fu dGx5IGZhc3RlciB0aGFuIHRoZSByZWd1bGFyIG1ldGhvZC4KKworRWFnZXIgYWdncmVnYXRpb24K Ky0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG9idmlvdXMgd2F5IHRvIGV2YWx1YXRlIGFnZ3Jl Z2F0ZXMgaXMgdG8gZXZhbHVhdGUgdGhlIEZST00gY2xhdXNlIG9mIHRoZQorU1FMIHF1ZXJ5ICh0 aGlzIGlzIHdoYXQgcXVlcnlfcGxhbm5lciBkb2VzKSBhbmQgdXNlIHRoZSByZXN1bHRpbmcgcGF0 aHMgYXMgdGhlCitpbnB1dCBvZiBBZ2cgbm9kZS4gSG93ZXZlciwgaWYgdGhlIGdyb3VwcyBhcmUg bGFyZ2UgZW5vdWdoLCBpdCBtYXkgYmUgbW9yZQorZWZmaWNpZW50IHRvIGFwcGx5IHRoZSBwYXJ0 aWFsIGFnZ3JlZ2F0aW9uIHRvIHRoZSBvdXRwdXQgb2YgYmFzZSByZWxhdGlvbgorc2NhbiwgYW5k IGZpbmFsaXplIGl0IHdoZW4gd2UgaGF2ZSBhbGwgcmVsYXRpb25zIG9mIHRoZSBxdWVyeSBqb2lu ZWQ6CisKKyBFWFBMQUlOIChDT1NUUyBPRkYpCisgU0VMRUNUIGEuaSwgYXZnKGIueSkKKyBGUk9N IGEgSk9JTiBiIE9OIGEuaSA9IGIuagorIEdST1VQIEJZIGEuaTsKKworIEZpbmFsaXplIEhhc2hB Z2dyZWdhdGUKKyAgIEdyb3VwIEtleTogYS5pCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAg IC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogYi5q CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYgorICAgICAgICAgLT4gIEluZGV4IE9u bHkgU2NhbiB1c2luZyBhX3BrZXkgb24gYQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGkg PSBiLmopCisKK1RodXMgdGhlIGpvaW4gYWJvdmUgdGhlIHBhcnRpYWwgYWdncmVnYXRlIG5vZGUg cmVjZWl2ZXMgZmV3ZXIgaW5wdXQgcm93cywgYW5kCitzbyB0aGUgbnVtYmVyIG9mIG91dGVyLXRv LWlubmVyIHBhaXJzIG9mIHR1cGxlcyB0byBiZSBjaGVja2VkIGNhbiBiZQorc2lnbmlmaWNhbnRs eSBsb3dlciwgd2hpY2ggY2FuIGluIHR1cm4gbGVhZCB0byBjb25zaWRlcmFibHkgbG93ZXIgam9p biBjb3N0LgorCitOb3RlIHRoYXQgdGhlIEdST1VQIEJZIGV4cHJlc3Npb24gbWlnaHQgbm90IGJl IHVzZWZ1bCBmb3IgdGhlIHBhcnRpYWwKK2FnZ3JlZ2F0ZS4gSW4gdGhlIGV4YW1wbGUgYWJvdmUs IHRoZSBhZ2dyZWdhdGUgYXZnKGIueSkgcmVmZXJlbmNlcyB0YWJsZSAiYiIsCitidXQgdGhlIEdS T1VQIEJZIGV4cHJlc3Npb24gbWVudGlvbnMgImEiLiBIb3dldmVyLCB0aGUgZXF1aXZhbGVuY2Ug Y2xhc3Mge2EuaSwKK2Iuan0gYWxsb3dzIHVzIHRvIHVzZSB0aGUgYi5qIGNvbHVtbiBhcyBhIGdy b3VwaW5nIGtleSBmb3IgdGhlIHBhcnRpYWwKK2FnZ3JlZ2F0aW9uIG9mIHRoZSAiYiIgdGFibGUu IFRoZSBlcXVpdmFsZW5jZSBjbGFzcyBtZWNoYW5pc20gaXMgc3VpdGFibGUKK2JlY2F1c2UgaXQn cyBkZXNpZ25lZCB0byBkZXJpdmUgam9pbiBjbGF1c2VzLCBhbmQgYXQgdGhlIHNhbWUgdGltZSB0 aGUgam9pbgorY2xhdXNlcyBkZXRlcm1pbmUgdGhlIGNob2ljZSBvZiBncm91cGluZyBjb2x1bW5z IG9mIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0ZTogdGhlCitvbmx5IHdheSBmb3IgdGhlIHBhcnRpYWwg YWdncmVnYXRlIHRvIHByb3ZpZGUgdXBwZXIgam9pbihzKSB3aXRoIGlucHV0IHZhbHVlcworaXMg dG8gaGF2ZSB0aGUgam9pbiBpbnB1dCBleHByZXNzaW9uKHMpIGluIHRoZSBncm91cGluZyBrZXk7 IGJlc2lkZXMgZ3JvdXBpbmcKK2NvbHVtbnMsIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0ZSBjYW4gb25s eSBwcm9kdWNlIHRoZSB0cmFuc2llbnQgc3RhdGVzIG9mIHRoZQorYWdncmVnYXRlIGZ1bmN0aW9u cywgYnV0IGFnZ3JlZ2F0ZSBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZmVyZW5jZWQgYnkgdGhlIEpP SU4KK2NsYXVzZXMuCisKK1JlZ2FyZGluZyBjb3JyZWN0bmVzcywgam9pbiBub2RlIGNvbnNpZGVy cyB0aGUgb3V0cHV0IG9mIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0ZQordG8gYmUgZXF1aXZhbGVudCB0 byB0aGUgb3V0cHV0IG9mIGEgcGxhaW4gKG5vbi1hZ2dyZWdhdGVkKSByZWxhdGlvbiBzY2FuLiBU aGF0CitpcywgYSBncm91cCAoaS5lLiBhIHJvdyBvZiB0aGUgcGFydGlhbCBhZ2dyZWdhdGUgb3V0 cHV0KSBtYXRjaGVzIHRoZSBvdGhlcgorc2lkZSBvZiB0aGUgam9pbiBpZiBhbmQgb25seSBpZiBl YWNoIHJvdyBvZiB0aGUgbm9uLWFnZ3JlZ2F0ZSByZWxhdGlvbgorZG9lcy4gSW4gb3RoZXIgd29y ZHMsIGFsbCByb3dzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBncm91cCBoYXZlIHRoZSBzYW1lIHZh bHVlCitvZiB0aGUgam9pbiBjb2x1bW5zIChBcyBtZW50aW9uZWQgYWJvdmUsIGEgam9pbiBjYW5u b3QgcmVmZXJlbmNlIG90aGVyIG91dHB1dAorZXhwcmVzc2lvbnMgb2YgdGhlIHBhcnRpYWwgYWdn cmVnYXRlIHRoYW4gdGhlIGdyb3VwaW5nIGV4cHJlc3Npb25zLikuCisKK0hvd2V2ZXIsIHRoZXJl J3MgYSByZXN0cmljdGlvbiBmcm9tIHRoZSBhZ2dyZWdhdGUncyBwZXJzcGVjdGl2ZTogdGhlIGFn Z3JlZ2F0ZQorY2Fubm90IGJlIHB1c2hlZCBkb3duIGlmIGFueSBjb2x1bW4gcmVmZXJlbmNlZCBi eSBlaXRoZXIgZ3JvdXBpbmcgZXhwcmVzc2lvbgorb3IgYWdncmVnYXRlIGZ1bmN0aW9uIGNhbiBi ZSBzZXQgdG8gTlVMTCBieSBhbiBvdXRlciBqb2luIGFib3ZlIHRoZSByZWxhdGlvbgordG8gd2hp Y2ggd2Ugd2FudCB0byBhcHBseSB0aGUgcGFydGlhbCBhZ2dyZWdhdGlvbi4gVGhlIHBvaW50IGlz IHRoYXQgdGhvc2UKK05VTEwgdmFsdWVzIHdvdWxkIG5vdCBhcHBlYXIgb24gdGhlIGlucHV0IG9m IHRoZSBwdXNoZWQtZG93biwgc28gaXQgY291bGQKK2VpdGhlciBwdXQgdGhlIHJvd3MgaW50byBn cm91cHMgaW4gYSBkaWZmZXJlbnQgd2F5IHRoYW4gdGhlIGFnZ3JlZ2F0ZSBhdCB0aGUKK3RvcCBv ZiB0aGUgcGxhbiwgb3IgaXQgY291bGQgY29tcHV0ZSB3cm9uZyB2YWx1ZXMgb2YgdGhlIGFnZ3Jl Z2F0ZSBmdW5jdGlvbnMuCisKK0Jlc2lkZXMgYmFzZSByZWxhdGlvbiwgdGhlIGFnZ3JlZ2F0aW9u IGNhbiBhbHNvIGJlIHB1c2hlZCBkb3duIHRvIGpvaW46CisKKyBFWFBMQUlOIChDT1NUUyBPRkYp CisgU0VMRUNUIGEuaSwgYXZnKGIueSArIGMueikKKyBGUk9NIGEgSk9JTiBiIE9OIGEuaSA9IGIu agorICAgICAgICBKT0lOIGMgT04gYi5qID0gYy5pCisgR1JPVVAgQlkgYS5pOworCisgRmluYWxp emUgSGFzaEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBhLmkKKyAgIC0+ICBOZXN0ZWQgTG9vcAor ICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3JvdXAg S2V5OiBiLmoKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKGIuaiA9IGMuaSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBiCisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGMKKyAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNj YW4gdXNpbmcgYV9wa2V5IG9uIGEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpID0gYi5q KQorCitXaGV0aGVyIHRoZSBBZ2cgbm9kZSBpcyBjcmVhdGVkIG91dCBvZiBiYXNlIHJlbGF0aW9u IG9yIG91dCBvZiBqb2luLCBpdCdzCithZGRlZCB0byBhIHNlcGFyYXRlIFJlbE9wdEluZm8gdGhh dCB3ZSBjYWxsICJncm91cGVkIHJlbGF0aW9uIi4gR3JvdXBlZAorcmVsYXRpb24gY2FuIGJlIGpv aW5lZCB0byBhIG5vbi1ncm91cGVkIHJlbGF0aW9uLCB3aGljaCByZXN1bHRzIGluIGEgZ3JvdXBl ZAorcmVsYXRpb24gdG9vLiBKb2luIG9mIHR3byBncm91cGVkIHJlbGF0aW9ucyBkb2VzIG5vdCBz ZWVtIHRvIGJlIHZlcnkgdXNlZnVsCithbmQgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCisK K0lmIHF1ZXJ5X3BsYW5uZXIgcHJvZHVjZXMgYSBncm91cGVkIHJlbGF0aW9uIHRoYXQgY29udGFp bnMgdmFsaWQgcGF0aHMsIHRoZXNlCithcmUgc2ltcGx5IGFkZGVkIHRvIHRoZSBVUFBFUlJFTF9Q QVJUSUFMX0dST1VQX0FHRyByZWxhdGlvbi4gRnVydGhlcgorcHJvY2Vzc2luZyBvZiB0aGVzZSBw YXRocyB0aGVuIGRvZXMgbm90IGRpZmZlciBmcm9tIHByb2Nlc3Npbmcgb2Ygb3RoZXIKK3BhcnRp YWxseSBncm91cGVkIHBhdGhzLgotLSAKMi40My4wCgo= --000000000000b2a431061ac0ff96--