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 1tIKXC-00Dgsd-0n for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Dec 2024 04:29: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 1tIKX8-006kX6-7Y for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Dec 2024 04:29:11 +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 1tIKX7-006kWy-GE for pgsql-hackers@lists.postgresql.org; Tue, 03 Dec 2024 04:29:11 +0000 Received: from mail-ua1-x935.google.com ([2607:f8b0:4864:20::935]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tIKX3-000lQr-Vs for pgsql-hackers@lists.postgresql.org; Tue, 03 Dec 2024 04:29:09 +0000 Received: by mail-ua1-x935.google.com with SMTP id a1e0cc1a2514c-85b8d1fd1bbso936483241.1 for ; Mon, 02 Dec 2024 20:29:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733200145; x=1733804945; 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=FHyBDdlzEkTL55HAkSmgvkJDtiPDyoyEjSvfuWR723Y=; b=XNT7F3M93vlZofrILFEwCPI3GXCQmMESs2e8I5+CfgWAG/CpQzMB1sL7doG1qGZbvL 52SowKN0jgvjduntoxGfJYYPBuk+B1ZC5w+A20EE4yTAJYrvQstThSR7V0pwSq4vWOiY +yKGUoQlvTXb29dXsr8OtV5oZO8gI2IaGwo5XiTnXHPLrzQu1L3VmoJW/ohxvWla4o0b hBfoYYCpl2uzsE6eWrpVSnx6jKUGz+EggXGMg6GJ80aKkAC3PtDhhysrx9GbSHXK0NEt 3ZUukzoflNgmKt7RFWX1tsOYwbTO//X5B3MP8851WDSW/wqK+J+at2mZfbwIb7kcDnpC MNbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733200145; x=1733804945; 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=FHyBDdlzEkTL55HAkSmgvkJDtiPDyoyEjSvfuWR723Y=; b=MbxeYfPj46WACLKjoeGUM91WjMqgSNCAbA6kwpBBvfZjlnFsmXJ2v81bArSjgvadEX XelMwQSMrh43I6v7md3npDE2TJm+Whs1KnzPOOMSQ99LYt2EPqE/UlSsniodOjhW1wtC zDs7owGrIRvy6JRunsvlXo5Jy68r/GtAz3PQ5IbFan/kpnURWIwYm3M9lUcG9pM3CyCs bbG0COE4nUxQHkoNkOojGVrhPykrkBDm/1sHkFja/xaC04SQr3FtsDMY+pMFvmocjvYo Zn2IDpdI00VuYOxrfIE9rORdE4LR//7XQPtItDgcgJK1FPv5wVrZ7HH9bQ11wlXJu0MD u3Ng== X-Gm-Message-State: AOJu0YzjUtVkTbobUulBjR5o7tfsMmfV1PivIXF4IIFO1KVdNKuTPeDQ W2AwqH4Z9g52vhKlLsWYzs+fLpWg3KfKkOn0HSzALFEmzGjMDPhrx4kmJ6D4Ls1K07Gey/vMkpy H8O4+V3x92bXrsvHje+amLp5332E= X-Gm-Gg: ASbGncsB8wlP6j9XAgRDnWjvKgWIgPYOqFvNtcIVXthsH+yxkWtAiXleGHjhQpnFfY2 EoSQ6MKVVPkW0Hd98+FCQZskGsEwYlpql X-Google-Smtp-Source: AGHT+IGrZO3JlcBLG4vjNlAIMYV6hTGT8Ppjm9Ua6EkFvVb7+hEY6OmfcSE+Qzby/nlRetMYMdsztUSP4QldOBnBy8c= X-Received: by 2002:a05:6102:b03:b0:4af:4945:9b0d with SMTP id ada2fe7eead31-4af97377204mr2068646137.23.1733200144819; Mon, 02 Dec 2024 20:29:04 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: jian he Date: Tue, 3 Dec 2024 12:28:53 +0800 Message-ID: Subject: Re: on_error table, saving error info to a table To: Nishant Sharma Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000f50bd00628561a4f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f50bd00628561a4f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Nov 5, 2024 at 6:30=E2=80=AFPM Nishant Sharma wrote: > > Thanks for the v2 patch! > > I see v1 review comments got addressed in v2 along with some > further improvements. > > 1) v2 Patch again needs re-base. > > 2) I think we need not worry whether table name is unique or not, > table name can be provided by user and we can check if it does > not exists then simply we can create it with appropriate columns, > if it exists we use it to check if its correct on_error table and > proceed. "simply we can create it with appropriate columns," that would be more work. so i stick to if there is a table can use to error saving then use it, otherwise error out. > > 3) Using #define in between the code? I don't see that style in > copyfromparse.c file. I do see such style in other src file. So, not > sure if committer would allow it or not. > #define ERROR_TBL_COLUMNS 10 > let's wait and see. > 4) Below appears redundant to me, it was not the case in v1 patch > set, where it had only one return and one increment of error as new > added code was at the end of the block:- > + cstate->num_errors++; > + return true; > + } > cstate->num_errors++; > changed per your advice. > I was not able to test the v2 due to conflicts in v2, I did attempt to > resolve but I saw many failures in make world. > I get rid of all the SPI code. Instead, now I iterate through AttributeRelationId to check if the error saving table is ok or not, using DirectFunctionCall3 to do the privilege check. removed gram.y change, turns out it is not necessary. and other kinds of refactoring. please check attached. --000000000000f50bd00628561a4f Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-introduce-on_error-table-option-for-COPY-FROM.patch" Content-Disposition: attachment; filename="v3-0001-introduce-on_error-table-option-for-COPY-FROM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m47yhxmn0 RnJvbSBiNjJkZmEzMzNjYjBiYzdlZmQ0NWYyMjE2NjJjMDFhNWRiNmQ1YzI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMyBEZWMgMjAyNCAxMjoxMzoyOSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjMg MS8xXSBpbnRyb2R1Y2Ugb25fZXJyb3IgdGFibGUgb3B0aW9uIGZvciBDT1BZIEZST00uCgp0aGUg c3ludGF4IGlzIHtvbl9lcnJvciB0YWJsZSwgdGFibGUgZXJyb3Jfc2F2aW5nX3RibH0uCgp3ZSBm aXJzdCBjaGVjayB0YWJsZSBlcnJvcl9zYXZpbmdfdGJsJ3MgZXhpc3RlbmNlIGFuZCBkYXRhIGRl ZmluaXRpb24uICBpZiBpdApkb2VzIG5vdCBtZWV0IG91ciBjcml0ZXJpYSwgdGhlbiB3ZSBxdWlj a2x5IGVycm9yIG91dC4KCndlIGFsc28gZGlkIHByZWxpbWluYXJ5IGNoZWNrIHRoZSBsb2NrIG9m IGVycm9yIHNhdmluZyB0YWJsZSBzbyB0aGUgaW5zZXJ0IHRvCmVycm9yIHNhdmluZyB0YWJsZSB3 b24ndCBzdHVjay4KCm9uY2UgdGhlcmUgaXMgYSBlcnJvciBoYXBwZW5lZCwgd2Ugc2F2ZSB0aGUg ZXJyb3IgbWV0ZWRhdGEgYW5kIGluc2VydCBpdCB0byB0aGUKZXJyb3Jfc2F2aW5nX3RhYmxlLiBh bmQgY29udGludWUgdG8gdGhlIG5leHQgcm93LiAgVGhhdCBtZWFucyBmb3Igb25lIHJvdywgd2UK Y2FuIG9ubHkgY2F0Y2ggdGhlIGZpcnN0IGZpbGVkIHRoYXQgaGF2ZSBlcnJvcnMuCgpkaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBQ0p1ZnhIX09KcFZyYSUzRDBjNG93OGZieEhqN2hl TWNWYVRORVBhNXZBdXJTZU5BLTZRJTQwbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwv cmVmL2NvcHkuc2dtbCAgICAgICAgICAgICAgIHwgMTE4ICsrKysrKysrKysrKy0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2NvcHkuYyAgICAgICAgICAgICAgfCAgMzEgKysrKwogc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29weWZyb20uYyAgICAgICAgICB8IDIwMyArKysrKysrKysrKysrKysrKysrKysr LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jICAgICB8ICA0NSArKysrKwog c3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5j bHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvY29weTIub3V0ICAgICAgfCAxMDggKysrKysrKysrKysrCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9jb3B5Mi5zcWwgICAgICAgICAgIHwgIDkxICsrKysrKysrKysKIDggZmlsZXMg Y2hhbmdlZCwgNTkwIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbApp bmRleCA4Mzk0NDAyZjA5Li43MmFkNDQ2MWFjIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVm L2NvcHkuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbApAQCAtNDQsNiArNDQs NyBAQCBDT1BZIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3Jl cGxhY2VhYmxlPiBbICggPHJlcGxhY2VhYmxlCiAgICAgRk9SQ0VfTk9UX05VTEwgeyAoIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IFssIC4u Ll0gKSB8ICogfQogICAgIEZPUkNFX05VTEwgeyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSB8ICogfQogICAgIE9OX0VS Uk9SIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5lcnJvcl9hY3Rpb248L3JlcGxhY2Vh YmxlPgorICAgIFRBQkxFICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXJyb3Jfc2F2 aW5nX3RhYmxlPC9yZXBsYWNlYWJsZT4nCiAgICAgUkVKRUNUX0xJTUlUIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5tYXhlcnJvcjwvcmVwbGFjZWFibGU+CiAgICAgRU5DT0RJTkcgJzxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5lbmNvZGluZ19uYW1lPC9yZXBsYWNlYWJsZT4n CiAgICAgTE9HX1ZFUkJPU0lUWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dmVyYm9z aXR5PC9yZXBsYWNlYWJsZT4KQEAgLTM5NSwxMSArMzk2LDEzIEBAIENPUFkgeyA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKCA8cmVwbGFj ZWFibGUKICAgICAgIGlucHV0IHZhbHVlIGludG8gaXRzIGRhdGEgdHlwZS4KICAgICAgIEFuIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5lcnJvcl9hY3Rpb248L3JlcGxhY2VhYmxlPiB2 YWx1ZSBvZgogICAgICAgPGxpdGVyYWw+c3RvcDwvbGl0ZXJhbD4gbWVhbnMgZmFpbCB0aGUgY29t bWFuZCwgd2hpbGUKLSAgICAgIDxsaXRlcmFsPmlnbm9yZTwvbGl0ZXJhbD4gbWVhbnMgZGlzY2Fy ZCB0aGUgaW5wdXQgcm93IGFuZCBjb250aW51ZSB3aXRoIHRoZSBuZXh0IG9uZS4KKyAgICAgIDxs aXRlcmFsPmlnbm9yZTwvbGl0ZXJhbD4gbWVhbnMgZGlzY2FyZCB0aGUgaW5wdXQgcm93IGFuZCBj b250aW51ZSB3aXRoIHRoZSBuZXh0IG9uZSwKKyAgICAgIDxsaXRlcmFsPnRhYmxlPC9saXRlcmFs PiBtZWFucyA8Y29tbWFuZD5DT1BZPC9jb21tYW5kPiBpbnNlcnQgZXJyb3IgcmVsYXRlZCBpbmZv cm1hdGlvbiB0byA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXJyb3Jfc2F2aW5nX3Rh YmxlPC9yZXBsYWNlYWJsZT4KKyAgICAgIGFuZCBjb250aW51ZSB3aXRoIHRoZSBuZXh0IG9uZS4K ICAgICAgIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPnN0b3A8L2xpdGVyYWw+LgogICAgICA8L3Bh cmE+CiAgICAgIDxwYXJhPgotICAgICAgVGhlIDxsaXRlcmFsPmlnbm9yZTwvbGl0ZXJhbD4gb3B0 aW9uIGlzIGFwcGxpY2FibGUgb25seSBmb3IgPGNvbW1hbmQ+Q09QWSBGUk9NPC9jb21tYW5kPgor ICAgICAgVGhlIDxsaXRlcmFsPmlnbm9yZTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPnRhYmxlPC9s aXRlcmFsPiBvcHRpb24gaXMgYXBwbGljYWJsZSBvbmx5IGZvciA8Y29tbWFuZD5DT1BZIEZST008 L2NvbW1hbmQ+CiAgICAgICB3aGVuIHRoZSA8bGl0ZXJhbD5GT1JNQVQ8L2xpdGVyYWw+IGlzIDxs aXRlcmFsPnRleHQ8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPmNzdjwvbGl0ZXJhbD4uCiAgICAgIDwv cGFyYT4KICAgICAgPHBhcmE+CkBAIC00NjMsNiArNDY2LDExNyBAQCBDT1BZIHsgPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICggPHJlcGxh Y2VhYmxlCiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogCisgICA8dmFybGlz dGVudHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFsPlRBQkxFPC9saXRlcmFsPjwvdGVybT4KKyAgICA8 bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICAgU2F2ZSBlcnJvciBjb250ZXh0IGRldGFp bHMgdG8gdGhlIHRhYmxlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5lcnJvcl9zYXZp bmdfdGFibGU8L3JlcGxhY2VhYmxlPgorICAgICAgICB3aGVuIGVycm9ycyBvY2N1ciBkdXJpbmcg dGhlIGNvbnZlcnNpb24gb2YgYSBjb2x1bW4ncyBpbnB1dCB2YWx1ZSBpbnRvIGl0cyBkYXRhIHR5 cGUgaW4gYSA8Y29tbWFuZD5DT1BZIEZST008L2NvbW1hbmQ+IG9wZXJhdGlvbi4KKyAgICAgIDwv cGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+ZXJyb3Jfc2F2aW5nX3RhYmxlPC9yZXBsYWNlYWJsZT4gbXVzdCBleGlzdCBpbiB0 aGUgY3VycmVudCBkYXRhYmFzZQorICAgICAgICBhbmQgc2hhcmUgdGhlIHNhbWUgc2NoZW1hIGFz IHRoZSBkZXN0aW5hdGlvbiB0YWJsZSBvZiB0aGUgPGNvbW1hbmQ+Q09QWSBGUk9NPC9jb21tYW5k PiBvcGVyYXRpb24uCisgICAgICAgIFRoaXMgb3B0aW9uIGlzIGFsbG93ZWQgb25seSBpbiA8Y29t bWFuZD5DT1BZIEZST008L2NvbW1hbmQ+IGFuZAorICAgICAgICA8bGl0ZXJhbD5PTl9FUlJPUjwv bGl0ZXJhbD4gaXMgc3BlY2lmaWVkIHdpdGggPGxpdGVyYWw+VEFCTEU8L2xpdGVyYWw+LgorCisg ICAgICAgIFRoZSB1c2VyIHBlcmZvcm1pbmcgdGhlIDxjb21tYW5kPkNPUFkgRlJPTTwvY29tbWFu ZD4KKyAgICAgICAgb3BlcmF0aW9uIG11c3QgaGF2ZSA8bGl0ZXJhbD5JTlNFUlQ8L2xpdGVyYWw+ IHByaXZpbGVnZXMgZm9yIGFsbCBjb2x1bW5zCisgICAgICAgIGluIHRoZSA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+ZXJyb3Jfc2F2aW5nX3RhYmxlPC9yZXBsYWNlYWJsZT4uCisgICAg ICAgIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSA8bGl0ZXJhbD5PTl9FUlJP UjwvbGl0ZXJhbD4gcGFyYW1ldGVyIGNhbm5vdCBiZSBzZXQgdG8gPGxpdGVyYWw+VEFCTEU8L2xp dGVyYWw+LgorICAgICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBJZiB0YWJsZSA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXJyb3Jfc2F2aW5nX3RhYmxlPC9yZXBsYWNlYWJsZT4g ZG9lcyBtZWV0IHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbgorICAgIChjb2x1bW4gb3JkaW5hbCBw b3NpdGlvbiBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIGJlbG93IHRhYmxlKSwgYW4gZXJyb3Ig d2lsbCBiZSByYWlzZWQuCisKKzxpbmZvcm1hbHRhYmxlPgorICAgIDx0Z3JvdXAgY29scz0iMyI+ CisgICAgIDx0aGVhZD4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PkNvbHVtbiBuYW1lPC9l bnRyeT4KKyAgICAgICA8ZW50cnk+RGF0YSB0eXBlPC9lbnRyeT4KKyAgICAgICA8ZW50cnk+RGVz Y3JpcHRpb248L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgIDwvdGhlYWQ+CisKKyAgICAgIDx0 Ym9keT4KKyAgICAgICA8cm93PgorICAgICAgIDxlbnRyeT4gPGxpdGVyYWw+dXNlcmlkPC9saXRl cmFsPiA8L2VudHJ5PgorICAgICAgIDxlbnRyeT48dHlwZT5vaWQ8L3R5cGU+PC9lbnRyeT4KKyAg ICAgICA8ZW50cnk+VGhlIHVzZXIgZ2VuZXJhdGVkIHRoZSBlcnJvci4KKyAgICAgICBSZWZlcmVu Y2UgPGxpbmsgbGlua2VuZD0iY2F0YWxvZy1wZy1hdXRoaWQiPjxzdHJ1Y3RuYW1lPnBnX2F1dGhp ZDwvc3RydWN0bmFtZT48L2xpbms+LjxzdHJ1Y3RmaWVsZD5vaWQ8L3N0cnVjdGZpZWxkPiwKKyAg ICAgICBob3dldmVyIHRoZXJlIGlzIG5vIGhhcmQgZGVwZW5kZW5jeSB3aXRoIGNhdGFsb2cgPGxp dGVyYWw+cGdfYXV0aGlkPC9saXRlcmFsPi4KKyAgICAgICBJZiB0aGUgY29ycmVzcG9uZGluZyBy b3cgb24gPGxpdGVyYWw+cGdfYXV0aGlkPC9saXRlcmFsPiBpcyBkZWxldGVkLCB0aGlzIHZhbHVl IGJlY29tZXMgc3RhbGUuCisgICAgPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKworICAgICAgIDxy b3c+CisgICAgICAgPGVudHJ5PiA8bGl0ZXJhbD5jb3B5X3RibDwvbGl0ZXJhbD4gPC9lbnRyeT4K KyAgICAgICA8ZW50cnk+PHR5cGU+b2lkPC90eXBlPjwvZW50cnk+CisgICAgICAgPGVudHJ5PlRo ZSA8Y29tbWFuZD5DT1BZIEZST008L2NvbW1hbmQ+IG9wZXJhdGlvbiBkZXN0aW5hdGlvbiB0YWJs ZSBvaWQuCisgICAgICAgIFJlZmVyZW5jZSA8bGluayBsaW5rZW5kPSJjYXRhbG9nLXBnLWNsYXNz Ij48c3RydWN0bmFtZT5wZ19jbGFzczwvc3RydWN0bmFtZT48L2xpbms+LjxzdHJ1Y3RmaWVsZD5v aWQ8L3N0cnVjdGZpZWxkPiwKKyAgICAgICAgaG93ZXZlciB0aGVyZSBpcyBubyBoYXJkIGRlcGVu ZGVuY3kgd2l0aCBjYXRhbG9nIDxsaXRlcmFsPnBnX2NsYXNzPC9saXRlcmFsPi4KKyAgICAgICAg SWYgdGhlIGNvcnJlc3BvbmRpbmcgcm93IG9uIDxsaXRlcmFsPnBnX2NsYXNzPC9saXRlcmFsPiBp cyBkZWxldGVkLCB0aGlzIHZhbHVlIGJlY29tZXMgc3RhbGUuCisgICAgICAgIDwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisKKyAgICAgICA8cm93PgorICAgICAgIDxlbnRyeT4gPGxpdGVyYWw+Zmls ZW5hbWU8L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8L3R5cGU+ PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+VGhlIHBhdGggbmFtZSBvZiB0aGUgPGNvbW1hbmQ+Q09Q WSBGUk9NPC9jb21tYW5kPiBpbnB1dDwvZW50cnk+CisgICAgICAgPC9yb3c+CisKKyAgICAgICA8 cm93PgorICAgICAgIDxlbnRyeT4gPGxpdGVyYWw+bGluZW5vPC9saXRlcmFsPiA8L2VudHJ5Pgor ICAgICAgIDxlbnRyeT48dHlwZT5iaWdpbnQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+ TGluZSBudW1iZXIgd2hlcmUgdGhlIGVycm9yIG9jY3VycmVkLCBjb3VudGluZyBmcm9tIDE8L2Vu dHJ5PgorICAgICAgIDwvcm93PgorCisgICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnk+IDxsaXRl cmFsPmxpbmU8L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8L3R5 cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+UmF3IGNvbnRlbnQgb2YgdGhlIGVycm9yIG9jY3Vy cmVkIGxpbmU8L2VudHJ5PgorICAgICAgIDwvcm93PgorCisgICAgICAgPHJvdz4KKyAgICAgICA8 ZW50cnk+IDxsaXRlcmFsPmNvbG5hbWU8L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5 Pjx0eXBlPnRleHQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+RmllbGQgd2hlcmUgdGhl IGVycm9yIG9jY3VycmVkPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKworICAgICAgIDxyb3c+Cisg ICAgICAgPGVudHJ5PiA8bGl0ZXJhbD5yYXdfZmllbGRfdmFsdWU8L2xpdGVyYWw+IDwvZW50cnk+ CisgICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+ UmF3IGNvbnRlbnQgb2YgdGhlIGVycm9yIG9jY3VycmVkIGZpZWxkPC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKworICAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PiA8bGl0ZXJhbD5lcnJfbWVzc2Fn ZSA8L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8L3R5cGU+PC9l bnRyeT4KKyAgICAgICA8ZW50cnk+VGhlIGVycm9yIG1lc3NhZ2U8L2VudHJ5PgorICAgICAgIDwv cm93PgorCisgICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnk+IDxsaXRlcmFsPmVycl9kZXRhaWw8 L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8L3R5cGU+PC9lbnRy eT4KKyAgICAgICA8ZW50cnk+RGV0YWlsZWQgZXJyb3IgbWVzc2FnZSA8L2VudHJ5PgorICAgICAg IDwvcm93PgorCisgICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnk+IDxsaXRlcmFsPmVycm9yY29k ZSA8L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8L3R5cGU+PC9l bnRyeT4KKyAgICAgICA8ZW50cnk+VGhlIGVycm9yIGNvZGUgPC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKworICAgICAgPC90Ym9keT4KKyAgICAgPC90Z3JvdXA+CisgICA8L2luZm9ybWFsdGFibGU+ CisKKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKwog ICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT48bGl0ZXJhbD5XSEVSRTwvbGl0ZXJhbD48L3Rl cm0+CiAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29w eS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCmluZGV4IDJkOThlY2YzZjQuLmYxNTk1 MDJhOWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9jb3B5LmMKQEAgLTQxMCw2ICs0MTAsOCBAQCBkZWZHZXRDb3B5T25F cnJvckNob2ljZShEZWZFbGVtICpkZWYsIFBhcnNlU3RhdGUgKnBzdGF0ZSwgYm9vbCBpc19mcm9t KQogCWlmIChwZ19zdHJjYXNlY21wKHN2YWwsICJpZ25vcmUiKSA9PSAwKQogCQlyZXR1cm4gQ09Q WV9PTl9FUlJPUl9JR05PUkU7CiAKKwlpZiAocGdfc3RyY2FzZWNtcChzdmFsLCAidGFibGUiKSA9 PSAwKQorCQlyZXR1cm4gQ09QWV9PTl9FUlJPUl9UQUJMRTsKIAllcmVwb3J0KEVSUk9SLAogCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJLyotIHRyYW5zbGF0 b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4gT05fRVJST1Ig Ki8KQEAgLTUwMiw2ICs1MDQsNyBAQCBQcm9jZXNzQ29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0 YXRlLAogCWJvb2wJCWZyZWV6ZV9zcGVjaWZpZWQgPSBmYWxzZTsKIAlib29sCQloZWFkZXJfc3Bl Y2lmaWVkID0gZmFsc2U7CiAJYm9vbAkJb25fZXJyb3Jfc3BlY2lmaWVkID0gZmFsc2U7CisJYm9v bAkJb25fZXJyb3JfdGJsX3NwZWNpZmllZCA9IGZhbHNlOwogCWJvb2wJCWxvZ192ZXJib3NpdHlf c3BlY2lmaWVkID0gZmFsc2U7CiAJYm9vbAkJcmVqZWN0X2xpbWl0X3NwZWNpZmllZCA9IGZhbHNl OwogCUxpc3RDZWxsICAgKm9wdGlvbjsKQEAgLTY3Nyw2ICs2ODAsMTQgQEAgUHJvY2Vzc0NvcHlP cHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCXJlamVjdF9saW1pdF9zcGVjaWZpZWQgPSB0 cnVlOwogCQkJb3B0c19vdXQtPnJlamVjdF9saW1pdCA9IGRlZkdldENvcHlSZWplY3RMaW1pdE9w dGlvbihkZWZlbCk7CiAJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidGFi bGUiKSA9PSAwKQorCQl7CisJCQlpZiAob25fZXJyb3JfdGJsX3NwZWNpZmllZCkKKwkJCQllcnJv ckNvbmZsaWN0aW5nRGVmRWxlbShkZWZlbCwgcHN0YXRlKTsKKwkJCW9uX2Vycm9yX3RibF9zcGVj aWZpZWQgPSB0cnVlOworCisJCQlvcHRzX291dC0+b25fZXJyb3JfdGJsID0gZGVmR2V0U3RyaW5n KGRlZmVsKTsKKwkJfQogCQllbHNlCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShF UlJDT0RFX1NZTlRBWF9FUlJPUiksCkBAIC02ODUsNiArNjk2LDI2IEBAIFByb2Nlc3NDb3B5T3B0 aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRl LCBkZWZlbC0+bG9jYXRpb24pKSk7CiAJfQogCisJaWYgKG9wdHNfb3V0LT5vbl9lcnJvciA9PSBD T1BZX09OX0VSUk9SX1RBQkxFICYmIG9wdHNfb3V0LT5vbl9lcnJvcl90YmwgPT0gTlVMTCkKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkgZXJybXNnKCJDT1BZICVzIFwidGFibGVcIiByZXF1aXJlcyBhIGN1c3RvbSBz cGVjaWZpZWQgZXJyb3Igc2F2aW5nIHRhYmxlIiwgIk9OX0VSUk9SIiksCisJCQkJIGVycmhpbnQo IllvdSBuZWVkIGFsc28gc3BlY2lmeSBcIlRBQkxFXCIgb3B0aW9uLiIpKSk7CisKKwlpZiAob3B0 c19vdXQtPm9uX2Vycm9yID09IENPUFlfT05fRVJST1JfVEFCTEUgJiYgb3B0c19vdXQtPnJlamVj dF9saW1pdCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSAlcyBvcHRpb24g d2hlbiAlcyBvcHRpb24gaXMgc3BlY2lmaWVkIGFzIFwidGFibGVcIiIsICJSRUpFQ1RfTElNSVQi LCAiT05fRVJST1IiKSkpOworCisJaWYgKG9wdHNfb3V0LT5vbl9lcnJvciA9PSBDT1BZX09OX0VS Uk9SX1RBQkxFICYmIG9wdHNfb3V0LT5sb2dfdmVyYm9zaXR5ID09IENPUFlfTE9HX1ZFUkJPU0lU WV9WRVJCT1NFKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5ICVzIGFzIFwi dmVyYm9zZVwiIHdoZW4gJXMgb3B0aW9uIGlzIHNwZWNpZmllZCBhcyBcInRhYmxlXCIiLCAibG9n X3ZlcmJvc2l0eSIsICJPTl9FUlJPUiIpKSk7CisKKwlpZiAob3B0c19vdXQtPm9uX2Vycm9yICE9 IENPUFlfT05fRVJST1JfVEFCTEUgJiYgb3B0c19vdXQtPm9uX2Vycm9yX3RibCAhPSBOVUxMKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCSBlcnJtc2coIkNPUFkgXCJUQUJMRVwiIG9wdGlvbiBjYW4gb25seSBiZSB1 c2VkIHdoZW4gJXMgb3B0aW9uIGlzIHNwZWNpZmllZCBhcyBcInRhYmxlXCIiLCAiT05fRVJST1Ii KSkpOwogCS8qCiAJICogQ2hlY2sgZm9yIGluY29tcGF0aWJsZSBvcHRpb25zIChtdXN0IGRvIHRo ZXNlIHRocmVlIGJlZm9yZSBpbnNlcnRpbmcKIAkgKiBkZWZhdWx0cykKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 ZnJvbS5jCmluZGV4IDRkNTJjOTNjMzAuLjM3NmQzZjA0YzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZy b20uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2NvcHkuaCIKICNp bmNsdWRlICJjb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgImNvbW1hbmRz L3Byb2dyZXNzLmgiCkBAIC00NCw3ICs0NSwxMCBAQAogI2luY2x1ZGUgInBnc3RhdC5oIgogI2lu Y2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgi CisjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgor I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIK ICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5o IgogI2luY2x1ZGUgInV0aWxzL3BvcnRhbC5oIgpAQCAtMTAyOSw2ICsxMDMzLDE2IEBAIENvcHlG cm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQkJY29udGludWU7CiAJCX0KIAorCQlpZiAoY3N0 YXRlLT5vcHRzLm9uX2Vycm9yID09IENPUFlfT05fRVJST1JfVEFCTEUgJiYKKwkJCWNzdGF0ZS0+ ZXNjb250ZXh0LT5lcnJvcl9vY2N1cnJlZCkKKwkJeworCQkJY3N0YXRlLT5lc2NvbnRleHQtPmVy cm9yX29jY3VycmVkID0gZmFsc2U7CisJCQljc3RhdGUtPmVzY29udGV4dC0+ZGV0YWlsc193YW50 ZWQgPSB0cnVlOworCQkJbWVtc2V0KGNzdGF0ZS0+ZXNjb250ZXh0LT5lcnJvcl9kYXRhLCAwLCBz aXplb2YoRXJyb3JEYXRhKSk7CisJCQkvKiBSZXBlYXQgTmV4dENvcHlGcm9tKCkgdW50aWwgbm8g c29mdCBlcnJvciBvY2N1cnMgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKIAkJRXhlY1N0b3JlVmly dHVhbFR1cGxlKG15c2xvdCk7CiAKIAkJLyoKQEAgLTEzMjEsMTQgKzEzMzUsMzEgQEAgQ29weUZy b20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJLyogRG9uZSwgY2xlYW4gdXAgKi8KIAllcnJvcl9j b250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7CiAKLQlpZiAoY3N0YXRlLT5vcHRz Lm9uX2Vycm9yICE9IENPUFlfT05fRVJST1JfU1RPUCAmJgotCQljc3RhdGUtPm51bV9lcnJvcnMg PiAwICYmCisJaWYgKGNzdGF0ZS0+bnVtX2Vycm9ycyA+IDAgJiYKIAkJY3N0YXRlLT5vcHRzLmxv Z192ZXJib3NpdHkgPj0gQ09QWV9MT0dfVkVSQk9TSVRZX0RFRkFVTFQpCi0JCWVyZXBvcnQoTk9U SUNFLAotCQkJCWVycm1zZ19wbHVyYWwoIiVsbHUgcm93IHdhcyBza2lwcGVkIGR1ZSB0byBkYXRh IHR5cGUgaW5jb21wYXRpYmlsaXR5IiwKLQkJCQkJCQkgICIlbGx1IHJvd3Mgd2VyZSBza2lwcGVk IGR1ZSB0byBkYXRhIHR5cGUgaW5jb21wYXRpYmlsaXR5IiwKLQkJCQkJCQkgICh1bnNpZ25lZCBs b25nIGxvbmcpIGNzdGF0ZS0+bnVtX2Vycm9ycywKLQkJCQkJCQkgICh1bnNpZ25lZCBsb25nIGxv bmcpIGNzdGF0ZS0+bnVtX2Vycm9ycykpOworCXsKKwkJaWYoY3N0YXRlLT5vcHRzLm9uX2Vycm9y ID09IENPUFlfT05fRVJST1JfSUdOT1JFKQorCQkJZXJlcG9ydChOT1RJQ0UsCisJCQkJCWVycm1z Z19wbHVyYWwoIiVsbHUgcm93IHdhcyBza2lwcGVkIGR1ZSB0byBkYXRhIHR5cGUgaW5jb21wYXRp YmlsaXR5IiwKKwkJCQkJCQkJIiVsbHUgcm93cyB3ZXJlIHNraXBwZWQgZHVlIHRvIGRhdGEgdHlw ZSBpbmNvbXBhdGliaWxpdHkiLAorCQkJCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBjc3RhdGUt Pm51bV9lcnJvcnMsCisJCQkJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGNzdGF0ZS0+bnVtX2Vy cm9ycykpOworCQllbHNlIGlmKGNzdGF0ZS0+b3B0cy5vbl9lcnJvciA9PSBDT1BZX09OX0VSUk9S X1RBQkxFKQorCQkJZXJlcG9ydChOT1RJQ0UsCisJCQkJCWVycm1zZ19wbHVyYWwoIiVsbHUgcm93 IHdhcyBzYXZlZCB0byB0YWJsZSBcIiVzXCIgZHVlIHRvIGRhdGEgdHlwZSBpbmNvbXBhdGliaWxp dHkiLAorCQkJCQkJCQkgICIlbGx1IHJvd3Mgd2VyZSBzYXZlZCB0byB0YWJsZSBcIiVzXCIgZHVl IHRvIGRhdGEgdHlwZSBpbmNvbXBhdGliaWxpdHkiLAorCQkJCQkJCQkgICh1bnNpZ25lZCBsb25n IGxvbmcpIGNzdGF0ZS0+bnVtX2Vycm9ycywKKwkJCQkJCQkJICAodW5zaWduZWQgbG9uZyBsb25n KSBjc3RhdGUtPm51bV9lcnJvcnMsCisJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo Y3N0YXRlLT5lcnJvcl9zYXZpbmdfcmVsKSkpOworCX0KKworCS8qCisJICogc2ltaWxhciB0byBj b21taXQgYTljZjQ4YQorCSAqIChodHRwczovL3Bvc3Rnci5lcy9tLzdiY2ZjMzlkNDE3NmZhZjg1 YWIzMTdkMGMyNjc4Njk1MzY0NmE0MTEuY2FtZWxAY3liZXJ0ZWMuYXQpCisJICogaW4gQ09QWSBG Uk9NIGtlZXAgZXJyb3Igc2F2aW5nIHRhYmxlIGxvY2tzIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBl bmQuCisJKi8KKwlpZiAoY3N0YXRlLT5lcnJvcl9zYXZpbmdfcmVsICE9IE5VTEwpCisJCXRhYmxl X2Nsb3NlKGNzdGF0ZS0+ZXJyb3Jfc2F2aW5nX3JlbCwgTm9Mb2NrKTsKIAogCWlmIChiaXN0YXRl ICE9IE5VTEwpCiAJCUZyZWVCdWxrSW5zZXJ0U3RhdGUoYmlzdGF0ZSk7CkBAIC0xNDgzLDYgKzE1 MTQsMTY0IEBAIEJlZ2luQ29weUZyb20oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCWVsc2UKIAkJY3N0 YXRlLT5lc2NvbnRleHQgPSBOVUxMOwogCisJaWYgKGNzdGF0ZS0+b3B0cy5vbl9lcnJvciA9PSBD T1BZX09OX0VSUk9SX1RBQkxFKQorCXsKKwkJY29uc3QgY2hhciAqY29weV9uc3BuYW1lOworCQlE YXR1bQkJaW5zX3ByZXY7CisJCU9pZAkJCWVycl90Ymxfb2lkOworCQlPaWQJCQljb3B5X25zcG9p ZDsKKwkJYm9vbAkJb25fZXJyb3JfdGJsX29rID0gdHJ1ZTsKKwkJUmVsYXRpb24JYXJlbDsKKwkJ U2NhbktleURhdGEgYWtleTsKKwkJU3lzU2NhbkRlc2MgYXNjYW47CisJCUhlYXBUdXBsZQlhdHVw OworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRGb3JtOworCQlpbnQJCQltYXhhdHRudW0gPSAwOwor CisJCUFzc2VydChjc3RhdGUtPmVzY29udGV4dCAhPSBOVUxMKTsKKwkJQXNzZXJ0KGNzdGF0ZS0+ b3B0cy5vbl9lcnJvcl90YmwgIT0gTlVMTCk7CisKKwkJY29weV9uc3BuYW1lID0gZ2V0X25hbWVz cGFjZV9uYW1lKFJlbGF0aW9uR2V0TmFtZXNwYWNlKGNzdGF0ZS0+cmVsKSk7CisJCWNvcHlfbnNw b2lkID0gZ2V0X25hbWVzcGFjZV9vaWQoY29weV9uc3BuYW1lLCBmYWxzZSk7CisJCWVycl90Ymxf b2lkID0gZ2V0X3JlbG5hbWVfcmVsaWQoY3N0YXRlLT5vcHRzLm9uX2Vycm9yX3RibCwgY29weV9u c3BvaWQpOworCisJCWlmICghT2lkSXNWYWxpZChlcnJfdGJsX29pZCkpCisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJIGVycm1zZygiZXJyb3Igc2F2aW5nIHRhYmxlIFwiJXNcIi5cIiVzXCIgZG9lcyBub3QgZXhp c3QiLAorCQkJCQkJCWNvcHlfbnNwbmFtZSwgY3N0YXRlLT5vcHRzLm9uX2Vycm9yX3RibCkpKTsK KworCQkvKiBlcnJvciBzYXZpbmcgdGFibGUgbXVzdCBiZSBhIG5vcm1hbCByZWFsdGlvbiBraW5k ICovCisJCWlmIChnZXRfcmVsX3JlbGtpbmQoZXJyX3RibF9vaWQpICE9IFJFTEtJTkRfUkVMQVRJ T04pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVD VF9UWVBFKSwKKwkJCQkJIGVycm1zZygiQ09QWSAlcyBjYW5ub3QgdXNlIHJlbGF0aW9uIFwiJXNc IiBmb3IgZXJyb3Igc2F2aW5nIiwKKwkJCQkJCQkiT05fRVJST1IiLCBjc3RhdGUtPm9wdHMub25f ZXJyb3JfdGJsKSwKKwkJCQkJIGVycmRldGFpbF9yZWxraW5kX25vdF9zdXBwb3J0ZWQoZ2V0X3Jl bF9yZWxraW5kKGVycl90Ymxfb2lkKSkpKTsKKworCQkvKiBjdXJyZW50IHVzZXIgc2hvdWxkIGhh dmUgSU5TRVJUIHByaXZpbGVnZSBvbiBlcnJvcl9zYXZpbmcgdGFibGUgKi8KKwkJaW5zX3ByZXYg PSBEaXJlY3RGdW5jdGlvbkNhbGwzKGhhc190YWJsZV9wcml2aWxlZ2VfaWRfaWQsCisJCQkJCQkJ CQkJT2JqZWN0SWRHZXREYXR1bShHZXRVc2VySWQoKSksCisJCQkJCQkJCQkJT2JqZWN0SWRHZXRE YXR1bShlcnJfdGJsX29pZCksCisJCQkJCQkJCQkJQ1N0cmluZ0dldFRleHREYXR1bSgiSU5TRVJU IikpOworCQlpZiAoIURhdHVtR2V0Qm9vbChpbnNfcHJldikpCisJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKKwkJCQkJCSBl cnJtc2coInBlcm1pc3Npb24gZGVuaWVkIHRvIHNldCB0YWJsZSBcIiVzXCIuXCIlc1wiIGZvciBD T1BZIEZST00gZXJyb3Igc2F2aW5nIiwKKwkJCQkJCQkJIGNvcHlfbnNwbmFtZSwgY3N0YXRlLT5v cHRzLm9uX2Vycm9yX3RibCksCisJCQkJCQkgZXJyaGludCgiRW5zdXJlIGN1cnJlbnQgdXNlciBo YXZlIGVub3VnaCBwcml2aWxlZ2Ugb24gXCIlc1wiLlwiJXNcIiBmb3IgQ09QWSBGUk9NIGVycm9y IHNhdmluZyIsCisJCQkJCQkJCSAgY29weV9uc3BuYW1lLCBjc3RhdGUtPm9wdHMub25fZXJyb3Jf dGJsKSkpOworCisJCS8qCisJCSAqIHdlIG1heSBpbnNlcnQgdHVwbGVzIHRvIGVycm9yLXNhdmlu ZyB0YWJsZSwgdG8gZG8gdGhhdCB3ZSBuZWVkIGZpcnN0CisJCSAqIGNoZWNrIGl0J3MgbG9jayBz aXR1YXRpb24uIElmIGl0IGlzIGFscmVhZHkgdW5kZXIgaGVhdnkgbG9jaywgdGhlbgorCQkgKiBv dXIgQ09QWSBvcGVyYXRpb24gd291bGQgYmUgc3R1Y2suIGluc3RlYWQgb2YgbGV0IENPUFkgc3R1 Y2ssIGp1c3QKKwkJICogZXJyb3IgcmVwb3J0IHRoZSBlcnJvci1zYXZpbmcgdGFibGUgaXMgaW4g aGVhdnkgbG9jay4KKwkJKi8KKwkJaWYgKCFDb25kaXRpb25hbExvY2tSZWxhdGlvbk9pZChlcnJf dGJsX29pZCwgUm93RXhjbHVzaXZlTG9jaykpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygidGFi bGUgXCIlc1wiLlwiJXNcIiB3YXMgbG9ja2VkLCBjYW5ub3QgYmUgdXNlZCBmb3IgZXJyb3Igc2F2 aW5nIiwKKwkJCQkJCQkgY29weV9uc3BuYW1lLCBjc3RhdGUtPm9wdHMub25fZXJyb3JfdGJsKSkp OworCQljc3RhdGUtPmVycm9yX3NhdmluZ19yZWwgPSB0YWJsZV9vcGVuKGVycl90Ymxfb2lkLCBO b0xvY2spOworCisJCS8qCisJCSAqIGNhbiB0aGlzIGVycm9yIHNhdmluZyB0YWJsZSAoY3N0YXRl LT5lcnJvcl9zYXZpbmdfcmVsKSBiZSB1c2VkIGZvcgorCQkgKiBlcnJvciBzYXZpbmcgb3Igbm90 PyBmb3IgdGhhdCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSB0YWJsZSdzIChjb2x1bW4KKwkJICogbmFt ZSwgY29sdW1uIGRhdGEgdHlwZXMsIG51bWJlciBvZiBjb2x1bW4pCisJCSAqCisJCSovCisJCWFy ZWwgPSB0YWJsZV9vcGVuKEF0dHJpYnV0ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ CVNjYW5LZXlJbml0KCZha2V5LAorCQkJCQlBbnVtX3BnX2F0dHJpYnV0ZV9hdHRyZWxpZCwKKwkJ CQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVt KGVycl90Ymxfb2lkKSk7CisKKwkJYXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oYXJlbCwgQXR0 cmlidXRlUmVsaWROdW1JbmRleElkLCB0cnVlLAorCQkJCQkJCQkgICBTbmFwc2hvdFNlbGYsIDEs ICZha2V5KTsKKwkJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoYXR1cCA9IHN5c3RhYmxlX2dldG5l eHQoYXNjYW4pKSkKKwkJeworCQkJYXR0Rm9ybSA9IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RS VUNUKGF0dXApOworCQkJaWYgKGF0dEZvcm0tPmF0dG51bSA8IDEgfHwgYXR0Rm9ybS0+YXR0aXNk cm9wcGVkKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAobWF4YXR0bnVtIDw9IGF0dEZvcm0tPmF0 dG51bSkKKwkJCQltYXhhdHRudW0gPSBhdHRGb3JtLT5hdHRudW07CisKKwkJCXN3aXRjaCAoYXR0 Rm9ybS0+YXR0bnVtKQorCQkJeworCQkJCWNhc2UgMToKKwkJCQkJaWYoKGF0dEZvcm0tPmF0dHR5 cGlkICE9IE9JRE9JRCkgfHwKKwkJCQkJCShzdHJjbXAoTmFtZVN0cihhdHRGb3JtLT5hdHRuYW1l KSwgInVzZXJpZCIpICE9IDApKQorCQkJCQkJb25fZXJyb3JfdGJsX29rID0gZmFsc2U7CisJCQkJ CWJyZWFrOworCQkJCWNhc2UgMjoKKwkJCQkJaWYgKChhdHRGb3JtLT5hdHR0eXBpZCAhPSBPSURP SUQpIHx8CisJCQkJCQkoc3RyY21wKE5hbWVTdHIoYXR0Rm9ybS0+YXR0bmFtZSksICJjb3B5X3Ri bCIpICE9IDApKQorCQkJCQkJb25fZXJyb3JfdGJsX29rID0gZmFsc2U7CisJCQkJCWJyZWFrOwor CQkJCWNhc2UgMzoKKwkJCQkJaWYgKChhdHRGb3JtLT5hdHR0eXBpZCAhPSBURVhUT0lEKSB8fAor CQkJCQkJKHN0cmNtcChOYW1lU3RyKGF0dEZvcm0tPmF0dG5hbWUpLCAiZmlsZW5hbWUiKSAhPSAw KSkKKwkJCQkJCW9uX2Vycm9yX3RibF9vayA9IGZhbHNlOworCQkJCQlicmVhazsKKwkJCQljYXNl IDQ6CisJCQkJCWlmICgoYXR0Rm9ybS0+YXR0dHlwaWQgIT0gSU5UOE9JRCkgfHwKKwkJCQkJCShz dHJjbXAoTmFtZVN0cihhdHRGb3JtLT5hdHRuYW1lKSwgImxpbmVubyIpICE9IDApKQorCQkJCQkJ b25fZXJyb3JfdGJsX29rID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgNToKKwkJCQkJ aWYgKChhdHRGb3JtLT5hdHR0eXBpZCAhPSBURVhUT0lEKSB8fAorCQkJCQkJKHN0cmNtcChOYW1l U3RyKGF0dEZvcm0tPmF0dG5hbWUpLCAibGluZSIpICE9IDApKQorCQkJCQkJb25fZXJyb3JfdGJs X29rID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgNjoKKwkJCQkJaWYgKChhdHRGb3Jt LT5hdHR0eXBpZCAhPSBURVhUT0lEKSB8fAorCQkJCQkJKHN0cmNtcChOYW1lU3RyKGF0dEZvcm0t PmF0dG5hbWUpLCAiY29sbmFtZSIpICE9IDApKQorCQkJCQkJb25fZXJyb3JfdGJsX29rID0gZmFs c2U7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgNzoKKwkJCQkJaWYgKChhdHRGb3JtLT5hdHR0eXBp ZCAhPSBURVhUT0lEKSB8fAorCQkJCQkJKHN0cmNtcChOYW1lU3RyKGF0dEZvcm0tPmF0dG5hbWUp LCAicmF3X2ZpZWxkX3ZhbHVlIikgIT0gMCkpCisJCQkJCQlvbl9lcnJvcl90Ymxfb2sgPSBmYWxz ZTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA4OgorCQkJCQlpZiAoKGF0dEZvcm0tPmF0dHR5cGlk ICE9IFRFWFRPSUQpIHx8CisJCQkJCQkoc3RyY21wKE5hbWVTdHIoYXR0Rm9ybS0+YXR0bmFtZSks ICJlcnJfbWVzc2FnZSIpICE9IDApKQorCQkJCQkJb25fZXJyb3JfdGJsX29rID0gZmFsc2U7CisJ CQkJCWJyZWFrOworCQkJCWNhc2UgOToKKwkJCQkJaWYgKChhdHRGb3JtLT5hdHR0eXBpZCAhPSBU RVhUT0lEKSB8fAorCQkJCQkJKHN0cmNtcChOYW1lU3RyKGF0dEZvcm0tPmF0dG5hbWUpLCAiZXJy X2RldGFpbCIpICE9IDApKQorCQkJCQkJb25fZXJyb3JfdGJsX29rID0gZmFsc2U7CisJCQkJCWJy ZWFrOworCQkJCWNhc2UgMTA6CisJCQkJCWlmICgoYXR0Rm9ybS0+YXR0dHlwaWQgIT0gVEVYVE9J RCkgfHwKKwkJCQkJCShzdHJjbXAoTmFtZVN0cihhdHRGb3JtLT5hdHRuYW1lKSwgImVycm9yY29k ZSIpICE9IDApKQorCQkJCQkJb25fZXJyb3JfdGJsX29rID0gZmFsc2U7CisJCQkJCWJyZWFrOwor CQkJCWRlZmF1bHQ6CisJCQkJCW9uX2Vycm9yX3RibF9vayA9IGZhbHNlOworCQkJCQlicmVhazsK KwkJCX0KKwkJfQorCQlpZiAobWF4YXR0bnVtICE9IDEwKQorCQkJb25fZXJyb3JfdGJsX29rID0g ZmFsc2U7CisKKwkJc3lzdGFibGVfZW5kc2Nhbihhc2Nhbik7CisJCXRhYmxlX2Nsb3NlKGFyZWws IEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJaWYoIW9uX2Vycm9yX3RibF9vaykKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAor CQkJCQkgZXJybXNnKCJ0YWJsZSBcIiVzXCIuXCIlc1wiIGNhbm5vdCBiZSB1c2VkIGZvciBDT1BZ IEZST00gZXJyb3Igc2F2aW5nIiwKKwkJCQkJCQljb3B5X25zcG5hbWUsIGNzdGF0ZS0+b3B0cy5v bl9lcnJvcl90YmwpLAorCQkJCQkgZXJyZGV0YWlsKCJUYWJsZSBcIiVzXCIuXCIlc1wiIGRhdGEg ZGVmaW5pdGlvbiBjYW5ub3QgYmUgdXNlZCBmb3IgZXJyb3Igc2F2aW5nIiwKKwkJCQkJCQkgICBj b3B5X25zcG5hbWUsIGNzdGF0ZS0+b3B0cy5vbl9lcnJvcl90YmwpKSk7CisKKwkJY3N0YXRlLT5l c2NvbnRleHQtPmRldGFpbHNfd2FudGVkID0gdHJ1ZTsKKwl9CisKIAkvKiBDb252ZXJ0IEZPUkNF X05VTEwgbmFtZSBsaXN0IHRvIHBlci1jb2x1bW4gZmxhZ3MsIGNoZWNrIHZhbGlkaXR5ICovCiAJ Y3N0YXRlLT5vcHRzLmZvcmNlX251bGxfZmxhZ3MgPSAoYm9vbCAqKSBwYWxsb2MwKG51bV9waHlz X2F0dHJzICogc2l6ZW9mKGJvb2wpKTsKIAlpZiAoY3N0YXRlLT5vcHRzLmZvcmNlX251bGxfYWxs KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCmluZGV4IGQxZDQzYjUzZDguLjFmMWJm MjQ3ODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKQEAgLTY2LDYgKzY2LDcg QEAKICNpbmNsdWRlICJjb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgImNv bW1hbmRzL3Byb2dyZXNzLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKKyNpbmNs dWRlICJhY2Nlc3MvaGVhcGFtLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRl ICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCkBAIC05NTksNyAr OTYwLDUxIEBAIE5leHRDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRXhwckNvbnRleHQg KmVjb250ZXh0LAogCQkJCQkJCQkJCQkmdmFsdWVzW21dKSkKIAkJCXsKIAkJCQlBc3NlcnQoY3N0 YXRlLT5vcHRzLm9uX2Vycm9yICE9IENPUFlfT05fRVJST1JfU1RPUCk7CisJCQkJQXNzZXJ0KGNz dGF0ZS0+ZXNjb250ZXh0LT5lcnJvcl9vY2N1cnJlZCk7CiAKKwkJCQlpZiAoY3N0YXRlLT5vcHRz Lm9uX2Vycm9yID09IENPUFlfT05fRVJST1JfVEFCTEUpCisJCQkJeworCQkJCQkvKgorCQkJCQkg KiB3ZSBtb3N0bHkgdXNlIEVycm9yU2F2ZUNvbnRleHQncyBpbmZvIHRvIGZvcm0gYSB0dXBsZSBh bmQKKwkJCQkJICogaW5zZXJ0IGl0IHRvIHRoZSBlcnJvciBzYXZpbmcgdGFibGUuIHdlIGFscmVh ZHkgYWNxdWlyZWQKKwkJCQkJICogbG9jayBvbiBlcnJvcl9zYXZpbmdfcmVsIGluIEJlZ2luQ29w eUZyb20uCisJCQkJCSovCisJCQkJCSNkZWZpbmUgRVJST1JfVEJMX0NPTFVNTlMJMTAKKwkJCQkJ SGVhcFR1cGxlCW9uX2Vycm9yX3R1cDsKKwkJCQkJVHVwbGVEZXNjCW9uX2Vycm9yX3R1cERlc2M7 CisJCQkJCWNoYXIJKmVycl9kZXRhaWw7CisJCQkJCWNoYXIJKmVycl9jb2RlOworCQkJCQlEYXR1 bQl0X3ZhbHVlc1tFUlJPUl9UQkxfQ09MVU1OU10gPSB7MH07CisJCQkJCWJvb2wJdF9pc251bGxb RVJST1JfVEJMX0NPTFVNTlNdID0gezB9OworCQkJCQlpbnQJCWogPSAwOworCisJCQkJCUFzc2Vy dChjc3RhdGUtPnJlbCAhPSBOVUxMKTsKKwkJCQkJdF92YWx1ZXNbaisrXSA9IE9iamVjdElkR2V0 RGF0dW0oR2V0VXNlcklkKCkpOworCQkJCQl0X3ZhbHVlc1tqKytdID0gT2JqZWN0SWRHZXREYXR1 bShjc3RhdGUtPnJlbC0+cmRfcmVsLT5vaWQpOworCQkJCQl0X3ZhbHVlc1tqKytdID0gQ1N0cmlu Z0dldFRleHREYXR1bShjc3RhdGUtPmZpbGVuYW1lID8gY3N0YXRlLT5maWxlbmFtZSA6ICJTVERJ TiIpOworCQkJCQl0X3ZhbHVlc1tqKytdID0gSW50NjRHZXREYXR1bSgobG9uZyBsb25nKSBjc3Rh dGUtPmN1cl9saW5lbm8pOworCQkJCQl0X3ZhbHVlc1tqKytdID0gQ1N0cmluZ0dldFRleHREYXR1 bShjc3RhdGUtPmxpbmVfYnVmLmRhdGEpOworCQkJCQl0X3ZhbHVlc1tqKytdID0gQ1N0cmluZ0dl dFRleHREYXR1bShjc3RhdGUtPmN1cl9hdHRuYW1lKTsKKwkJCQkJdF92YWx1ZXNbaisrXSA9IENT dHJpbmdHZXRUZXh0RGF0dW0oc3RyaW5nKTsKKwkJCQkJdF92YWx1ZXNbaisrXSA9IENTdHJpbmdH ZXRUZXh0RGF0dW0oY3N0YXRlLT5lc2NvbnRleHQtPmVycm9yX2RhdGEtPm1lc3NhZ2UpOworCisJ CQkJCWlmICghY3N0YXRlLT5lc2NvbnRleHQtPmVycm9yX2RhdGEtPmRldGFpbCkKKwkJCQkJCWVy cl9kZXRhaWwgPSBOVUxMOworCQkJCQllbHNlCisJCQkJCQllcnJfZGV0YWlsID0gY3N0YXRlLT5l c2NvbnRleHQtPmVycm9yX2RhdGEtPmRldGFpbDsKKwkJCQkJdF92YWx1ZXNbal0gICA9IGVycl9k ZXRhaWwgPyBDU3RyaW5nR2V0VGV4dERhdHVtKGVycl9kZXRhaWwpIDogKERhdHVtKSAwOworCQkJ CQl0X2lzbnVsbFtqKytdID0gZXJyX2RldGFpbCA/IGZhbHNlIDogdHJ1ZTsKKworCQkJCQllcnJf Y29kZSA9IHVucGFja19zcWxfc3RhdGUoY3N0YXRlLT5lc2NvbnRleHQtPmVycm9yX2RhdGEtPnNx bGVycmNvZGUpOworCQkJCQl0X3ZhbHVlc1tqKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShlcnJf Y29kZSk7CisKKwkJCQkJQXNzZXJ0KGogPT0gRVJST1JfVEJMX0NPTFVNTlMpOworCQkJCQkjdW5k ZWYgRVJST1JfVEJMX0NPTFVNTlMKKworCQkJCQlvbl9lcnJvcl90dXBEZXNjID0gIGNzdGF0ZS0+ ZXJyb3Jfc2F2aW5nX3JlbC0+cmRfYXR0OworCQkJCQlvbl9lcnJvcl90dXAgPSBoZWFwX2Zvcm1f dHVwbGUob25fZXJyb3JfdHVwRGVzYywgdF92YWx1ZXMsIHRfaXNudWxsKTsKKwkJCQkJc2ltcGxl X2hlYXBfaW5zZXJ0KGNzdGF0ZS0+ZXJyb3Jfc2F2aW5nX3JlbCwgb25fZXJyb3JfdHVwKTsKKwkJ CQl9CiAJCQkJY3N0YXRlLT5udW1fZXJyb3JzKys7CiAKIAkJCQlpZiAoY3N0YXRlLT5vcHRzLmxv Z192ZXJib3NpdHkgPT0gQ09QWV9MT0dfVkVSQk9TSVRZX1ZFUkJPU0UpCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgK aW5kZXggNDAwMmE3ZjUzOC4uNTkzNjVjODFkYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvY29weS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaApAQCAtMzgsNiAr MzgsNyBAQCB0eXBlZGVmIGVudW0gQ29weU9uRXJyb3JDaG9pY2UKIHsKIAlDT1BZX09OX0VSUk9S X1NUT1AgPSAwLAkJLyogaW1tZWRpYXRlbHkgdGhyb3cgZXJyb3JzLCBkZWZhdWx0ICovCiAJQ09Q WV9PTl9FUlJPUl9JR05PUkUsCQkvKiBpZ25vcmUgZXJyb3JzICovCisJQ09QWV9PTl9FUlJPUl9U QUJMRSwJCS8qIHNhdmluZyBlcnJvcnMgaW5mbyB0byB0YWJsZSAqLwogfSBDb3B5T25FcnJvckNo b2ljZTsKIAogLyoKQEAgLTg2LDYgKzg3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29weUZvcm1hdE9w dGlvbnMKIAlDb3B5T25FcnJvckNob2ljZSBvbl9lcnJvcjsgLyogd2hhdCB0byBkbyB3aGVuIGVy cm9yIGhhcHBlbmVkICovCiAJQ29weUxvZ1ZlcmJvc2l0eUNob2ljZSBsb2dfdmVyYm9zaXR5Owkv KiB2ZXJib3NpdHkgb2YgbG9nZ2VkIG1lc3NhZ2VzICovCiAJaW50NjQJCXJlamVjdF9saW1pdDsJ LyogbWF4aW11bSB0b2xlcmFibGUgbnVtYmVyIG9mIGVycm9ycyAqLworCWNoYXIJCSpvbl9lcnJv cl90Ymw7IC8qIG9uIGVycm9yLCBzYXZlIGVycm9yIGluZm8gdG8gdGhlIHRhYmxlLCB0YWJsZSBu YW1lICovCiAJTGlzdAkgICAqY29udmVydF9zZWxlY3Q7IC8qIGxpc3Qgb2YgY29sdW1uIG5hbWVz IChjYW4gYmUgTklMKSAqLwogfSBDb3B5Rm9ybWF0T3B0aW9uczsKIApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2NvcHlmcm9tX2ludGVybmFsLmgKaW5kZXggY2FkNTJmY2M3OC4uNzc5Zjg2ZDFjZSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaAorKysgYi9z cmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oCkBAIC03MCw2ICs3MCw3IEBA IHR5cGVkZWYgc3RydWN0IENvcHlGcm9tU3RhdGVEYXRhCiAKIAkvKiBwYXJhbWV0ZXJzIGZyb20g dGhlIENPUFkgY29tbWFuZCAqLwogCVJlbGF0aW9uCXJlbDsJCQkvKiByZWxhdGlvbiB0byBjb3B5 IGZyb20gKi8KKwlSZWxhdGlvbgllcnJvcl9zYXZpbmdfcmVsOyAvKiByZWxhdGlvbiBmb3IgY29w eSBmcm9tIGVycm9yIHNhdmluZyAqLwogCUxpc3QJICAgKmF0dG51bWxpc3Q7CQkvKiBpbnRlZ2Vy IGxpc3Qgb2YgYXR0bnVtcyB0byBjb3B5ICovCiAJY2hhcgkgICAqZmlsZW5hbWU7CQkvKiBmaWxl bmFtZSwgb3IgTlVMTCBmb3IgU1RESU4gKi8KIAlib29sCQlpc19wcm9ncmFtOwkJLyogaXMgJ2Zp bGVuYW1lJyBhIHByb2dyYW0gdG8gcG9wZW4/ICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2NvcHkyLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIu b3V0CmluZGV4IDY0ZWEzM2FlYWUuLjZhNTI5MGI1M2YgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Y29weTIub3V0CkBAIC04MTMsNiArODEzLDExMCBAQCBFUlJPUjogIHNraXBwZWQgbW9yZSB0aGFu IFJFSkVDVF9MSU1JVCAoMykgcm93cyBkdWUgdG8gZGF0YSB0eXBlIGluY29tcGF0aWJpbGl0eQog Q09OVEVYVDogIENPUFkgY2hlY2tfaWduX2VyciwgbGluZSA1LCBjb2x1bW4gbjogIiIKIENPUFkg Y2hlY2tfaWduX2VyciBGUk9NIFNURElOIFdJVEggKG9uX2Vycm9yIGlnbm9yZSwgcmVqZWN0X2xp bWl0IDQpOwogTk9USUNFOiAgNCByb3dzIHdlcmUgc2tpcHBlZCBkdWUgdG8gZGF0YSB0eXBlIGlu Y29tcGF0aWJpbGl0eQorY3JlYXRlIHRhYmxlIGVycl90YmwoCisgIHVzZXJpZCBvaWQsICAgLS0g dGhlIHVzZXIgb2lkIHdoaWxlIGNvcHkgZ2VuZXJhdGVkIHRoaXMgZW50cnkKKyAgY29weV90Ymwg b2lkLCAtLWNvcHkgdGFibGUKKyAgZmlsZW5hbWUgdGV4dCwKKyAgbGluZW5vICBiaWdpbnQsCisg IGxpbmUgICAgdGV4dCwKKyAgY29sbmFtZSB0ZXh0LAorICByYXdfZmllbGRfdmFsdWUgdGV4dCwK KyAgZXJyX21lc3NhZ2UgdGV4dCwKKyAgZXJyX2RldGFpbCB0ZXh0LAorICBlcnJvcmNvZGUgdGV4 dAorKTsKKy0tY2Fubm90IHVzZSBmb3IgZXJyb3Igc2F2aW5nLgorY3JlYXRlIHRhYmxlIGVycl90 YmxfMSgKK3VzZXJpZCAgICBvaWQsCitjb3B5X3RibCAgb2lkLAorZmlsZW5hbWUgIHRleHQsCits aW5lbm8gICAgYmlnaW50LAorbGluZSAgICAgIHRleHQsCitjb2xuYW1lICAgdGV4dCwKK3Jhd19m aWVsZF92YWx1ZSB0ZXh0LAorZXJyX21lc3NhZ2UgICAgIHRleHQsCitlcnJfZGV0YWlsICAgICAg dGV4dAorKTsKKy0tY2Fubm90IHVzZSBmb3IgZXJyb3Igc2F2aW5nLgorY3JlYXRlIHRhYmxlIGVy cl90YmxfMigKKyAgdXNlcmlkIG9pZCwgY29weV90Ymwgb2lkLCBmaWxlbmFtZSB0ZXh0LCBsaW5l bm8gYmlnaW50LGxpbmUgdGV4dCwKKyAgY29sbmFtZSB0ZXh0LCByYXdfZmllbGRfdmFsdWUgdGV4 dCwgZXJyX21lc3NhZ2UgdGV4dCwKKyAgZXJyX2RldGFpbCB0ZXh0LAorICBlcnJvcmNvZGUgdGV4 dCwKKyAgZXJyb3Jjb2RlMSB0ZXh0CispOworY3JlYXRlIHRhYmxlIHRfY29weV90YmwoYSBpbnQs IGIgaW50LCBjIGludCk7CitjcmVhdGUgdmlldyBzMSBhcyBzZWxlY3QgMSBhcyBhOworLS0tLWlu dmFsaWQgb3B0aW9ucywgdGhlIGJlbG93IGFsbCBzaG91bGQgIGZhaWxzCitDT1BZIHRfY29weV90 YmwgRlJPTSBTVERJTiBXSVRIIChvbl9lcnJvciAndGFibGUnKTsKK0VSUk9SOiAgQ09QWSBPTl9F UlJPUiAidGFibGUiIHJlcXVpcmVzIGEgY3VzdG9tIHNwZWNpZmllZCBlcnJvciBzYXZpbmcgdGFi bGUKK0hJTlQ6ICBZb3UgbmVlZCBhbHNvIHNwZWNpZnkgIlRBQkxFIiBvcHRpb24uCitDT1BZIHRf Y29weV90YmwgRlJPTSBTVERJTiBXSVRIICh0YWJsZSBlcnJfdGJsKTsKK0VSUk9SOiAgQ09QWSAi VEFCTEUiIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIHdoZW4gT05fRVJST1Igb3B0aW9uIGlzIHNw ZWNpZmllZCBhcyAidGFibGUiCitDT1BZIHRfY29weV90YmwgVE8gU1RESU4gV0lUSCAob25fZXJy b3IgJ3RhYmxlJyk7CitFUlJPUjogIENPUFkgT05fRVJST1IgY2Fubm90IGJlIHVzZWQgd2l0aCBD T1BZIFRPCitMSU5FIDE6IENPUFkgdF9jb3B5X3RibCBUTyBTVERJTiBXSVRIIChvbl9lcnJvciAn dGFibGUnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0NPUFkg dF9jb3B5X3RibChhLGIpIEZST00gU1RESU4gV0lUSCAob25fZXJyb3IgJ3RhYmxlJywgcmVqZWN0 X2xpbWl0IDEwLCB0YWJsZSBlcnJfdGJsKTsKK0VSUk9SOiAgY2Fubm90IHNwZWNpZnkgUkVKRUNU X0xJTUlUIG9wdGlvbiB3aGVuIE9OX0VSUk9SIG9wdGlvbiBpcyBzcGVjaWZpZWQgYXMgInRhYmxl IgorQ09QWSB0X2NvcHlfdGJsKGEsYikgRlJPTSBTVERJTiBXSVRIIChvbl9lcnJvciAndGFibGUn LCBsb2dfdmVyYm9zaXR5IHZlcmJvc2UsIHRhYmxlIGVycl90YmwpOworRVJST1I6ICBjYW5ub3Qg c3BlY2lmeSBsb2dfdmVyYm9zaXR5IGFzICJ2ZXJib3NlIiB3aGVuIE9OX0VSUk9SIG9wdGlvbiBp cyBzcGVjaWZpZWQgYXMgInRhYmxlIgorQ09QWSB0X2NvcHlfdGJsKGEsYikgRlJPTSBTVERJTiBX SVRIIChvbl9lcnJvciAndGFibGUnLCB0YWJsZSBub3RfZXhpc3RzKTsKK0VSUk9SOiAgZXJyb3Ig c2F2aW5nIHRhYmxlICJwdWJsaWMiLiJub3RfZXhpc3RzIiBkb2VzIG5vdCBleGlzdAorQ09QWSB0 X2NvcHlfdGJsKGEpIEZST00gU1RESU4gV0lUSCAob25fZXJyb3IgJ3RhYmxlJywgdGFibGUgczEp OworRVJST1I6ICBDT1BZIE9OX0VSUk9SIGNhbm5vdCB1c2UgcmVsYXRpb24gInMxIiBmb3IgZXJy b3Igc2F2aW5nCitERVRBSUw6ICBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB2 aWV3cy4KKy0tLS1pbnZhbGlkIG9wdGlvbnMsIHRoZSBhYm92ZSBhbGwgc2hvdWxkIGZhaWxzCitk cm9wIHZpZXcgczE7CistLXNob3VsZCBmYWlsLiBlcnJfdGJsXzEgZG9lcyBub3QgbWVldCBjcml0 ZXJpYQorQ09QWSB0X2NvcHlfdGJsKGEsYikgRlJPTSBTVERJTiBXSVRIIChvbl9lcnJvciAndGFi bGUnLCB0YWJsZSBlcnJfdGJsXzEpOworRVJST1I6ICB0YWJsZSAicHVibGljIi4iZXJyX3RibF8x IiBjYW5ub3QgYmUgdXNlZCBmb3IgQ09QWSBGUk9NIGVycm9yIHNhdmluZworREVUQUlMOiAgVGFi bGUgInB1YmxpYyIuImVycl90YmxfMSIgZGF0YSBkZWZpbml0aW9uIGNhbm5vdCBiZSB1c2VkIGZv ciBlcnJvciBzYXZpbmcKKy0tc2hvdWxkIGZhaWwuIGVycl90YmxfMiBkb2VzIG5vdCBtZWV0IGNy aXRlcmlhCitDT1BZIHRfY29weV90YmwoYSxiKSBGUk9NIFNURElOIFdJVEggKG9uX2Vycm9yICd0 YWJsZScsIHRhYmxlIGVycl90YmxfMik7CitFUlJPUjogIHRhYmxlICJwdWJsaWMiLiJlcnJfdGJs XzIiIGNhbm5vdCBiZSB1c2VkIGZvciBDT1BZIEZST00gZXJyb3Igc2F2aW5nCitERVRBSUw6ICBU YWJsZSAicHVibGljIi4iZXJyX3RibF8yIiBkYXRhIGRlZmluaXRpb24gY2Fubm90IGJlIHVzZWQg Zm9yIGVycm9yIHNhdmluZworLS1zaG91bGQgZmFpbCwgY29waWVkIGRhdGEgaGF2ZSBleHRyYSBj b2x1bW5zCitDT1BZIHRfY29weV90YmwoYSxiKSBGUk9NIFNURElOIFdJVEggKERFTElNSVRFUiAn LCcsIG9uX2Vycm9yICd0YWJsZScsIHRhYmxlIGVycl90YmwpOworRVJST1I6ICBleHRyYSBkYXRh IGFmdGVyIGxhc3QgZXhwZWN0ZWQgY29sdW1uCitDT05URVhUOiAgQ09QWSB0X2NvcHlfdGJsLCBs aW5lIDE6ICIxLDIsMyw0IgorLS1zaG91bGQgZmFpbCwgY29waWVkIGRhdGEgaGF2ZSBsZXNzIGNv bHVtbnMKK0NPUFkgdF9jb3B5X3RibChhLGIpIEZST00gU1RESU4gV0lUSCAoREVMSU1JVEVSICcs Jywgb25fZXJyb3IgJ3RhYmxlJywgdGFibGUgZXJyX3RibCk7CitFUlJPUjogIGV4dHJhIGRhdGEg YWZ0ZXIgbGFzdCBleHBlY3RlZCBjb2x1bW4KK0NPTlRFWFQ6ICBDT1BZIHRfY29weV90YmwsIGxp bmUgMTogIjEsMiwiCistLW9rIGNhc2VzLgorQ09QWSB0X2NvcHlfdGJsIEZST00gU1RESU4gV0lU SCAoREVMSU1JVEVSICcsJywgb25fZXJyb3IgJ3RhYmxlJywgdGFibGUgZXJyX3RibCk7CitOT1RJ Q0U6ICA0IHJvd3Mgd2VyZSBzYXZlZCB0byB0YWJsZSAiZXJyX3RibCIgZHVlIHRvIGRhdGEgdHlw ZSBpbmNvbXBhdGliaWxpdHkKKy0tc2hvdWxkIGZhaWwuIGxhY2sgcHJpdmlsZWdlCitiZWdpbjsK K2NyZWF0ZSB1c2VyIHJlZ3Jlc3NfdXNlcjIwOworZ3JhbnQgaW5zZXJ0KHVzZXJpZCxjb3B5X3Ri bCxmaWxlbmFtZSxsaW5lbm8sbGluZSkgb24gdGFibGUgZXJyX3RibCB0byByZWdyZXNzX3VzZXIy MDsKK2dyYW50IGluc2VydCBvbiB0YWJsZSB0X2NvcHlfdGJsIHRvIHJlZ3Jlc3NfdXNlcjIwOwor c2V0IHJvbGUgcmVncmVzc191c2VyMjA7CitDT1BZIHRfY29weV90YmwgRlJPTSBTVERJTiBXSVRI IChkZWxpbWl0ZXIgJywnLCBvbl9lcnJvciAndGFibGUnLCB0YWJsZSBlcnJfdGJsKTsKK0VSUk9S OiAgcGVybWlzc2lvbiBkZW5pZWQgdG8gc2V0IHRhYmxlICJwdWJsaWMiLiJlcnJfdGJsIiBmb3Ig Q09QWSBGUk9NIGVycm9yIHNhdmluZworSElOVDogIEVuc3VyZSBjdXJyZW50IHVzZXIgaGF2ZSBl bm91Z2ggcHJpdmlsZWdlIG9uICJwdWJsaWMiLiJlcnJfdGJsIiBmb3IgQ09QWSBGUk9NIGVycm9y IHNhdmluZworUk9MTEJBQ0s7CitzZWxlY3QJcGdfY2xhc3MucmVsbmFtZSBhcyBjb3B5X2Rlc3Rp bmF0aW9uCisgICAgICAgICxmaWxlbmFtZSxsaW5lbm8gLGxpbmUKKyAgICAgICAgLGNvbG5hbWUs cmF3X2ZpZWxkX3ZhbHVlLGVycl9tZXNzYWdlCisgICAgICAgICxlcnJfZGV0YWlsLGVycm9yY29k ZQorZnJvbSBlcnJfdGJsIGpvaW4gcGdfY2xhc3Mgb24gY29weV90YmwgPSBwZ19jbGFzcy5vaWQ7 CisgY29weV9kZXN0aW5hdGlvbiB8IGZpbGVuYW1lIHwgbGluZW5vIHwgICAgICAgICAgIGxpbmUg ICAgICAgICAgIHwgY29sbmFtZSB8ICAgcmF3X2ZpZWxkX3ZhbHVlICAgfCAgICAgICAgICAgICAg ICAgICAgICAgICBlcnJfbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcnJfZGV0 YWlsIHwgZXJyb3Jjb2RlIAorLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0KKyB0X2NvcHlfdGJsICAgICAgIHwgU1RE SU4gICAgfCAgICAgIDEgfCAxLDIsYSAgICAgICAgICAgICAgICAgICAgfCBjICAgICAgIHwgYSAg ICAgICAgICAgICAgICAgICB8IGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6 ICJhIiAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAyMlAwMgorIHRfY29weV90Ymwg ICAgICAgfCBTVERJTiAgICB8ICAgICAgMyB8IDEsX2p1bmssdGVzdCAgICAgICAgICAgICB8IGIg ICAgICAgfCBfanVuayAgICAgICAgICAgICAgIHwgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5 cGUgaW50ZWdlcjogIl9qdW5rIiAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8IDIyUDAyCisg dF9jb3B5X3RibCAgICAgICB8IFNURElOICAgIHwgICAgICA0IHwgY29sYSxjb2xiLGNvbGMgICAg ICAgICAgIHwgYSAgICAgICB8IGNvbGEgICAgICAgICAgICAgICAgfCBpbnZhbGlkIGlucHV0IHN5 bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiY29sYSIgICAgICAgICAgICAgICAgfCAgICAgICAgICAg IHwgMjJQMDIKKyB0X2NvcHlfdGJsICAgICAgIHwgU1RESU4gICAgfCAgICAgIDYgfCAxLDExLDQy Mzg2Nzk3MzI0ODk4Nzk4NzkgfCBjICAgICAgIHwgNDIzODY3OTczMjQ4OTg3OTg3OSB8IHZhbHVl ICI0MjM4Njc5NzMyNDg5ODc5ODc5IiBpcyBvdXQgb2YgcmFuZ2UgZm9yIHR5cGUgaW50ZWdlciB8 ICAgICAgICAgICAgfCAyMjAwMworKDQgcm93cykKKworc2VsZWN0ICogZnJvbSB0X2NvcHlfdGJs OworIGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tCisgMSB8IDIgfCAzCisgNCB8IDUgfCA2CisoMiBy b3dzKQorCiAtLSBjbGVhbiB1cAogRFJPUCBUQUJMRSBmb3JjZXRlc3Q7CiBEUk9QIFRBQkxFIHZp c3Rlc3Q7CkBAIC04MzEsNiArOTM1LDEwIEBAIERST1AgVEFCTEUgY2hlY2tfaWduX2VycjsKIERS T1AgVEFCTEUgY2hlY2tfaWduX2VycjI7CiBEUk9QIERPTUFJTiBkY2hlY2tfaWduX2VycjI7CiBE Uk9QIFRBQkxFIGhhcmRfZXJyOworRFJPUCBUQUJMRSBlcnJfdGJsOworRFJPUCBUQUJMRSBlcnJf dGJsXzE7CitEUk9QIFRBQkxFIGVycl90YmxfMjsKK0RST1AgVEFCTEUgdF9jb3B5X3RibDsKIC0t CiAtLSBDT1BZIEZST00gLi4uIERFRkFVTFQKIC0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9jb3B5Mi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5Mi5zcWwKaW5kZXgg NDUyNzM1NTdjZS4uYWE1ZmMxMmNiMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Y29weTIuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkyLnNxbApAQCAtNTg4LDYg KzU4OCw5MyBAQCBhCXs3fQk3CiAxMAl7MTB9CTEwCiBcLgogCitjcmVhdGUgdGFibGUgZXJyX3Ri bCgKKyAgdXNlcmlkIG9pZCwgICAtLSB0aGUgdXNlciBvaWQgd2hpbGUgY29weSBnZW5lcmF0ZWQg dGhpcyBlbnRyeQorICBjb3B5X3RibCBvaWQsIC0tY29weSB0YWJsZQorICBmaWxlbmFtZSB0ZXh0 LAorICBsaW5lbm8gIGJpZ2ludCwKKyAgbGluZSAgICB0ZXh0LAorICBjb2xuYW1lIHRleHQsCisg IHJhd19maWVsZF92YWx1ZSB0ZXh0LAorICBlcnJfbWVzc2FnZSB0ZXh0LAorICBlcnJfZGV0YWls IHRleHQsCisgIGVycm9yY29kZSB0ZXh0CispOworLS1jYW5ub3QgdXNlIGZvciBlcnJvciBzYXZp bmcuCitjcmVhdGUgdGFibGUgZXJyX3RibF8xKAordXNlcmlkICAgIG9pZCwKK2NvcHlfdGJsICBv aWQsCitmaWxlbmFtZSAgdGV4dCwKK2xpbmVubyAgICBiaWdpbnQsCitsaW5lICAgICAgdGV4dCwK K2NvbG5hbWUgICB0ZXh0LAorcmF3X2ZpZWxkX3ZhbHVlIHRleHQsCitlcnJfbWVzc2FnZSAgICAg dGV4dCwKK2Vycl9kZXRhaWwgICAgICB0ZXh0CispOworLS1jYW5ub3QgdXNlIGZvciBlcnJvciBz YXZpbmcuCitjcmVhdGUgdGFibGUgZXJyX3RibF8yKAorICB1c2VyaWQgb2lkLCBjb3B5X3RibCBv aWQsIGZpbGVuYW1lIHRleHQsIGxpbmVubyBiaWdpbnQsbGluZSB0ZXh0LAorICBjb2xuYW1lIHRl eHQsIHJhd19maWVsZF92YWx1ZSB0ZXh0LCBlcnJfbWVzc2FnZSB0ZXh0LAorICBlcnJfZGV0YWls IHRleHQsCisgIGVycm9yY29kZSB0ZXh0LAorICBlcnJvcmNvZGUxIHRleHQKKyk7CitjcmVhdGUg dGFibGUgdF9jb3B5X3RibChhIGludCwgYiBpbnQsIGMgaW50KTsKK2NyZWF0ZSB2aWV3IHMxIGFz IHNlbGVjdCAxIGFzIGE7CisKKy0tLS1pbnZhbGlkIG9wdGlvbnMsIHRoZSBiZWxvdyBhbGwgc2hv dWxkICBmYWlscworQ09QWSB0X2NvcHlfdGJsIEZST00gU1RESU4gV0lUSCAob25fZXJyb3IgJ3Rh YmxlJyk7CitDT1BZIHRfY29weV90YmwgRlJPTSBTVERJTiBXSVRIICh0YWJsZSBlcnJfdGJsKTsK K0NPUFkgdF9jb3B5X3RibCBUTyBTVERJTiBXSVRIIChvbl9lcnJvciAndGFibGUnKTsKK0NPUFkg dF9jb3B5X3RibChhLGIpIEZST00gU1RESU4gV0lUSCAob25fZXJyb3IgJ3RhYmxlJywgcmVqZWN0 X2xpbWl0IDEwLCB0YWJsZSBlcnJfdGJsKTsKK0NPUFkgdF9jb3B5X3RibChhLGIpIEZST00gU1RE SU4gV0lUSCAob25fZXJyb3IgJ3RhYmxlJywgbG9nX3ZlcmJvc2l0eSB2ZXJib3NlLCB0YWJsZSBl cnJfdGJsKTsKK0NPUFkgdF9jb3B5X3RibChhLGIpIEZST00gU1RESU4gV0lUSCAob25fZXJyb3Ig J3RhYmxlJywgdGFibGUgbm90X2V4aXN0cyk7CitDT1BZIHRfY29weV90YmwoYSkgRlJPTSBTVERJ TiBXSVRIIChvbl9lcnJvciAndGFibGUnLCB0YWJsZSBzMSk7CistLS0taW52YWxpZCBvcHRpb25z LCB0aGUgYWJvdmUgYWxsIHNob3VsZCBmYWlscworCitkcm9wIHZpZXcgczE7CistLXNob3VsZCBm YWlsLiBlcnJfdGJsXzEgZG9lcyBub3QgbWVldCBjcml0ZXJpYQorQ09QWSB0X2NvcHlfdGJsKGEs YikgRlJPTSBTVERJTiBXSVRIIChvbl9lcnJvciAndGFibGUnLCB0YWJsZSBlcnJfdGJsXzEpOwor CistLXNob3VsZCBmYWlsLiBlcnJfdGJsXzIgZG9lcyBub3QgbWVldCBjcml0ZXJpYQorQ09QWSB0 X2NvcHlfdGJsKGEsYikgRlJPTSBTVERJTiBXSVRIIChvbl9lcnJvciAndGFibGUnLCB0YWJsZSBl cnJfdGJsXzIpOworCistLXNob3VsZCBmYWlsLCBjb3BpZWQgZGF0YSBoYXZlIGV4dHJhIGNvbHVt bnMKK0NPUFkgdF9jb3B5X3RibChhLGIpIEZST00gU1RESU4gV0lUSCAoREVMSU1JVEVSICcsJywg b25fZXJyb3IgJ3RhYmxlJywgdGFibGUgZXJyX3RibCk7CisxLDIsMyw0CitcLgorCistLXNob3Vs ZCBmYWlsLCBjb3BpZWQgZGF0YSBoYXZlIGxlc3MgY29sdW1ucworQ09QWSB0X2NvcHlfdGJsKGEs YikgRlJPTSBTVERJTiBXSVRIIChERUxJTUlURVIgJywnLCBvbl9lcnJvciAndGFibGUnLCB0YWJs ZSBlcnJfdGJsKTsKKzEsMiwKK1wuCisKKy0tb2sgY2FzZXMuCitDT1BZIHRfY29weV90YmwgRlJP TSBTVERJTiBXSVRIIChERUxJTUlURVIgJywnLCBvbl9lcnJvciAndGFibGUnLCB0YWJsZSBlcnJf dGJsKTsKKzEsMixhCisxLDIsMworMSxfanVuayx0ZXN0Citjb2xhLGNvbGIsY29sYworNCw1LDYK KzEsMTEsNDIzODY3OTczMjQ4OTg3OTg3OQorXC4KKworLS1zaG91bGQgZmFpbC4gbGFjayBwcml2 aWxlZ2UKK2JlZ2luOworY3JlYXRlIHVzZXIgcmVncmVzc191c2VyMjA7CitncmFudCBpbnNlcnQo dXNlcmlkLGNvcHlfdGJsLGZpbGVuYW1lLGxpbmVubyxsaW5lKSBvbiB0YWJsZSBlcnJfdGJsIHRv IHJlZ3Jlc3NfdXNlcjIwOworZ3JhbnQgaW5zZXJ0IG9uIHRhYmxlIHRfY29weV90YmwgdG8gcmVn cmVzc191c2VyMjA7CitzZXQgcm9sZSByZWdyZXNzX3VzZXIyMDsKK0NPUFkgdF9jb3B5X3RibCBG Uk9NIFNURElOIFdJVEggKGRlbGltaXRlciAnLCcsIG9uX2Vycm9yICd0YWJsZScsIHRhYmxlIGVy cl90YmwpOworUk9MTEJBQ0s7CisKK3NlbGVjdAlwZ19jbGFzcy5yZWxuYW1lIGFzIGNvcHlfZGVz dGluYXRpb24KKyAgICAgICAgLGZpbGVuYW1lLGxpbmVubyAsbGluZQorICAgICAgICAsY29sbmFt ZSxyYXdfZmllbGRfdmFsdWUsZXJyX21lc3NhZ2UKKyAgICAgICAgLGVycl9kZXRhaWwsZXJyb3Jj b2RlCitmcm9tIGVycl90Ymwgam9pbiBwZ19jbGFzcyBvbiBjb3B5X3RibCA9IHBnX2NsYXNzLm9p ZDsKK3NlbGVjdCAqIGZyb20gdF9jb3B5X3RibDsKIC0tIGNsZWFuIHVwCiBEUk9QIFRBQkxFIGZv cmNldGVzdDsKIERST1AgVEFCTEUgdmlzdGVzdDsKQEAgLTYwNiw2ICs2OTMsMTAgQEAgRFJPUCBU QUJMRSBjaGVja19pZ25fZXJyOwogRFJPUCBUQUJMRSBjaGVja19pZ25fZXJyMjsKIERST1AgRE9N QUlOIGRjaGVja19pZ25fZXJyMjsKIERST1AgVEFCTEUgaGFyZF9lcnI7CitEUk9QIFRBQkxFIGVy cl90Ymw7CitEUk9QIFRBQkxFIGVycl90YmxfMTsKK0RST1AgVEFCTEUgZXJyX3RibF8yOworRFJP UCBUQUJMRSB0X2NvcHlfdGJsOwogCiAtLQogLS0gQ09QWSBGUk9NIC4uLiBERUZBVUxUCi0tIAoy LjM0LjEKCg== --000000000000f50bd00628561a4f--