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 1u4bnN-004adE-OC for pgsql-hackers@arkaria.postgresql.org; Tue, 15 Apr 2025 08:37:30 +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 1u4bnL-006bJY-VS for pgsql-hackers@arkaria.postgresql.org; Tue, 15 Apr 2025 08:37:28 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u4bnL-006bJL-Dm for pgsql-hackers@lists.postgresql.org; Tue, 15 Apr 2025 08:37:28 +0000 Received: from mail-ua1-x930.google.com ([2607:f8b0:4864:20::930]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u4bnI-000B8c-2D for pgsql-hackers@lists.postgresql.org; Tue, 15 Apr 2025 08:37:27 +0000 Received: by mail-ua1-x930.google.com with SMTP id a1e0cc1a2514c-86d42f08219so2042739241.0 for ; Tue, 15 Apr 2025 01:37:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744706244; x=1745311044; 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=weSDOqVW4zjyIccxmZZmDVGLpkC+TROq1WnqMzF453I=; b=AhYbUVL9Xg2zzdvK1uNHpM7PXwybBN3mCy7jNWqHPoCxgdQNhY+mTJFryW0uavww97 5eBffmkqankjP8ULRdwb4L9X7w4xVwhvpXm53Xzk5AEn5mUPbZCqyqU56g9dfmGlAtmb ALgDUO+/Asqg+/B3qFoSDTI6xnzW3HNcl0LQ4Rctm7/aWnPbjEQef5F3RqoPFVjhab9i m8Jekz2XaJkU/464nTpg17X6av1/DiKmNN96VYVypphP3aVQ+orlcvytU0wQZZlzyMWJ jz1PcUM0N9pzUr/Uub2QLmJ9k3CKzE/nV2rcZMefZfCMIIO4STfxIewZf8KHfhmZxdVq +3Xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744706244; x=1745311044; 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=weSDOqVW4zjyIccxmZZmDVGLpkC+TROq1WnqMzF453I=; b=TBHY5zGpijVwRKtii5z0XbUz8w/SB5N+frU1VJ+ljYMsvUy9f/eoxMdtTrNXBI5Uwj FyH3Fiu2I0w0Jl/IGdLVcc4G/blmLQGKvmbS4O80cN+C9Lx62+287LP17medmpG9lkIG IM70bC0msc8sqItPUaAH4IWzHaLt55JokuRyo2A7tieNKlNflI23uMnuJ7zTvHTyvRCk 3emnQE45HnuXVDufrEWWorBpExMFHUZY/Mto4lA5X/PBUJDgySgND/Ze6If7s9GwoPig VDELdf40sflQ1rRbZBhPw5CPLkkWq4HObkeWofc9aeKmYDzO3rsx9Htqoy9kUwac6thW OCiQ== X-Gm-Message-State: AOJu0Yy/PoQavNw5Aq/ptZDOv6IP0xabNNnKr9z2l6MmwjUYhFo0t5Ka d4Bo41GSktX/vYgVIkvFM1IvvBB2uyNF2OBeBEdI6Un+iK1Rdh5Vd9mqNUEbudCu0ygb0lQ+Jor L7lKSWH+KtjztY55HW+a71V9HYYc= X-Gm-Gg: ASbGncuSDwP6Q3FMHKq7eTBAdznIZvNfYTCLctMDO8d2bMITXgK5G19ZNFhsgMqt1YE FV9UcN6IftJd98zzfo4ybZLXejPn/eju94AeReywYnsA3sjwizxXnUgt7ac+hh2AlZtw24+DFTg k28VrU9801S6eV5HqaZAH+ZWobIMLDRMcN2zwmXeN8G4i4sQGpSbdGzh/gXWtQ4W0f X-Google-Smtp-Source: AGHT+IFGbU6DbdexXshf2LI6Bve4DBXk3vS5qNwBf1bu7Y9ehBMbNJsBMkcGUvoarzN+fY3lmb99QTk7U1+DiTEF51c= X-Received: by 2002:a05:6102:5488:b0:4b6:5e0f:6ddc with SMTP id ada2fe7eead31-4c9e4f224a4mr10063560137.14.1744706243954; Tue, 15 Apr 2025 01:37:23 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: jian he Date: Tue, 15 Apr 2025 16:36:46 +0800 X-Gm-Features: ATxdqUHY98oeYELO6hNFMirmFD2_0SJcovVmaCAIwKDTOGZSjFBhMaNwDllr8nA Message-ID: Subject: Re: support create index on virtual generated column. To: Kirill Reshke Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000e8acab0632cd1327" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e8acab0632cd1327 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Apr 14, 2025 at 8:05=E2=80=AFPM Kirill Reshke wrote: > > On Mon, 14 Apr 2025 at 16:10, jian he wrote= : > > > > new patch attached. Now, > > ALTER TABLE DROP COLUMN works fine. > > ALTER INDEX ATTACH PARTITION works fine. > > creating such an index on a partitioned table works just fine. > > for table inheritance: create index on parent table will not cascade > > to child table, > > so we don't need to worry about this. > > Hi! I reviewed v2, and it seems to be working now. > > But there are tests that are comment-out, what is their purpose? I > note that commit 83ea6c5 also included some commented tests, so > perhaps there's a reason I'm not aware of. > > ``` > ALTER TABLE gtest22c DROP COLUMN e; > \d gtest22c > > -- EXPLAIN (COSTS OFF) SELECT * FROM gtest22c WHERE b * 3 =3D 6; > -- SELECT * FROM gtest22c WHERE b * 3 =3D 6; > -- EXPLAIN (COSTS OFF) SELECT * FROM gtest22c WHERE a =3D 1 AND b > 0; > -- SELECT * FROM gtest22c WHERE a =3D 1 AND b > 0; > ``` comment out tests are for to be implemented feature. There are some test changes that are indeed not necessary, I restored it ba= ck, please check attached. --000000000000e8acab0632cd1327 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-index-on-virtual-generated-column.patch" Content-Disposition: attachment; filename="v3-0001-index-on-virtual-generated-column.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9i8xsat0 RnJvbSBjM2YzOTg1ODc5OGMyN2RlN2FmZGY1MTU2YzQxNzQyMTc5MjBjNjc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTUgQXByIDIwMjUgMTY6Mjg6NDYgKzA4MDAKU3ViamVjdDogW1BBVENIIHYz IDEvMV0gaW5kZXggb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uCgoqIGludGVybmFsbHkgc3Vj aCBpbmRleCB0cmFuc2Zvcm1lZCBpbnRvIGV4cHJlc3Npb24gaW5kZXguCiAgRm9yIGV4YW1wbGUs IGFuIGluZGV4IG9uIChiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChhICogMikgVklSVFVBTCkK ICBpbnRlcm5hbCByZXByZXNlbnRhdGlvbjogYW4gZXhwcmVzc2lvbiBpbmRleCBvbiAoKGEgKiAy KSkuCiogaW4gcGFnZWluc3BlY3QgbW9kdWxlLCBhZGQgc29tZSB0ZXN0IHRvIGNoZWNrIHRoZSBp bmRleCBjb250ZW50IG9mIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbi4KKiBwcmltYXJ5IGtleSwg dW5pcXVlIGluZGV4IG92ZXIgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIGFyZSBub3Qgc3VwcG9y dGVkLgoqIGV4cHJlc3Npb24gaW5kZXggYW5kIHByZWRpY2F0ZSBpbmRleCBvdmVyIHZpcnR1YWwg Z2VuZXJhdGVkIGNvbHVtbnMgYXJlCiAgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCiogdmlydHVh bCBnZW5lcmF0ZWQgY29sdW1uIGNhbiBub3QgYmUgaW4gImluY2x1ZGUgY29sdW1uIgoqIGFsbCB0 eXBlcyBvZiBpbmRleGVzIGFyZSBzdXBwb3J0ZWQsIGhhc2ggaW5kZXgsIGdpc3QgaW5kZXggcmVn cmVzcyB0ZXN0IGFkZGVkLgoqIFRvIHN1cHBvcnQgQUxURVIgVEFCTEUgU0VUIEVYUFJFU1NJT04s IGluIHBnX2luZGV4LCB3ZSBuZWVkIHRvIHRyYWNrIHRoZSBvcmlnaW5hbAogIHZpcnR1YWwgZ2Vu ZXJhdGVkIGNvbHVtbiBhdHRyaWJ1dGUgbnVtYmVyLCBzbyBBTFRFUiBUQUJMRSBTRVQgRVhQUkVT U0lPTiBjYW4KICBpZGVudGlmeSB3aGljaCBpbmRleCBuZWVkcyB0byBiZSByZWJ1aWx0LgoqIEFM VEVSIENPTFVNTiBTRVQgREFUQSBUWVBFIHdpbGwgYWxzbyBjYXVzZSB0YWJsZSByZXdyaXRlLCBz byB3ZSByZWFsbHkKICBuZWVkIHRvIHRyYWNrIHRoZSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4g YXR0cmlidXRlIG51bWJlciB0aGF0IGluZGV4IHdhcyBidWlsdCBvbi4KCiogaWYgdGhlIHBhcnRp dGlvbmVkIHRhYmxlIGFuZCBwYXJ0aXRpb24gYm90aCBoYXZlIGFuIGluZGV4LCB0aGVuIHRoZSBp bmRleCBvdmVyIHRoZSB2aXJ0dWFsCiAgZ2VuZXJhdGVkIGNvbHVtbiBzaG91bGQgYmUgdGhlIHNh bWUgZXhwcmVzc2lvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgbGFzdAogIGNvbW1hbmQg c2hvdWxkIGVycm9yIG91dC4KCiAgICBDUkVBVEUgVEFCTEUgcGFydGVkIChiIGludGVnZXIsYyBp bnRlZ2VyLGEgaW50ZWdlciBHRU5FUkFURUQgQUxXQVlTIEFTIChjKzEpKSBQQVJUSVRJT04gQlkg UkFOR0UgKGIpOwogICAgQ1JFQVRFIFRBQkxFIHBhcnQgKGIgaW50ZWdlcixjIGludGVnZXIsYSBp bnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgKGMpKTsKICAgIGNyZWF0ZSBpbmRleCBvbiBwYXJ0 KGEpOwogICAgY3JlYXRlIGluZGV4IG9uIHBhcnRlZChhKTsKICAgIGFsdGVyIHRhYmxlIHBhcnRl ZCBBVFRBQ0ggcGFydGl0aW9uIHBhcnQgZm9yIHZhbHVlcyBmcm9tICgxKSB0byAoMTApOwoKZGlz Y3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUNKdWZ4R2FvLWN5cGROaGlmSEFkdDhqSGZL Ni1IWD10UkJvdkJrZ1J1eHcwNjNHYUFAbWFpbC5nbWFpbC5jb20KY29tbWl0ZmVzdCBlbnRyeTog aHR0cHM6Ly9jb21taXRmZXN0LnBvc3RncmVzcWwub3JnL3BhdGNoLzU2NjcvCi0tLQogY29udHJp Yi9wYWdlaW5zcGVjdC9leHBlY3RlZC9idHJlZS5vdXQgICAgICAgIHwgIDMzICsrCiBjb250cmli L3BhZ2VpbnNwZWN0L3NxbC9idHJlZS5zcWwgICAgICAgICAgICAgfCAgMjEgKysKIGRvYy9zcmMv c2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgICAgICB8ICAxNSArCiBzcmMvYmFja2Vu ZC9jYXRhbG9nL2luZGV4LmMgICAgICAgICAgICAgICAgICAgfCAgNjkgKysrKwogc3JjL2JhY2tl bmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAgICAgIHwgMzAxICsrKysrKysrKysrKysr Ky0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgIDYx ICsrKysKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMgICAgICAgICAgICB8ICAy NSArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICAgICAgIHwgIDI4 ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAgICAgICAgICAgICAgICAgfCAgIDYg Kwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmRleC5oICAgICAgICAgICAgICAgIHwgICAxICsK IHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zhc3RfZGVmYXVsdC5vdXQgICAgfCAgIDggKwogLi4u L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0ICAgIHwgMTg3ICsrKysrKysr KystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9mYXN0X2RlZmF1bHQuc3FsICAgICAgICAgfCAgIDYg Kwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsICAgIHwgIDk0ICsr KysrLQogMTUgZmlsZXMgY2hhbmdlZCwgNzg4IGluc2VydGlvbnMoKyksIDY4IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGFnZWluc3BlY3QvZXhwZWN0ZWQvYnRyZWUub3V0IGIv Y29udHJpYi9wYWdlaW5zcGVjdC9leHBlY3RlZC9idHJlZS5vdXQKaW5kZXggMGFhNWQ3MzMyMmYu LjU2ZDU3ODQ4Y2Y3IDEwMDY0NAotLS0gYS9jb250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2J0 cmVlLm91dAorKysgYi9jb250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2J0cmVlLm91dApAQCAt MTgzLDYgKzE4MywzOSBAQCB0aWRzICAgICAgIHwKIAogU0VMRUNUICogRlJPTSBidF9wYWdlX2l0 ZW1zKGdldF9yYXdfcGFnZSgndGVzdDFfYV9pZHgnLCAyKSk7CiBFUlJPUjogIGJsb2NrIG51bWJl ciAyIGlzIG91dCBvZiByYW5nZSBmb3IgcmVsYXRpb24gInRlc3QxX2FfaWR4IgorLS0tdGVzdCBp bmRleCBvdmVyIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbgorQ1JFQVRFIFRBQkxFIHRlc3QzIChh IGludDgsIGIgaW50NHJhbmdlLCBjIGludDggZ2VuZXJhdGVkIGFsd2F5cyBhcyAoYSsxKSB2aXJ0 dWFsKTsKK0lOU0VSVCBJTlRPIHRlc3QzIFZBTFVFUyAoNzIwNTc1OTQwMzc5Mjc5MzYsICdbMCwx KScpOworQ1JFQVRFIElOREVYIHRlc3QzX2FfaWR4IE9OIHRlc3QzIFVTSU5HIGJ0cmVlIChjKTsK K1NFTEVDVCAqIEZST00gYnRfcGFnZV9pdGVtcygndGVzdDNfYV9pZHgnLCAxKTsKKy1bIFJFQ09S RCAxIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraXRlbW9mZnNldCB8IDEKK2N0aWQgICAgICAg fCAoMCwxKQoraXRlbWxlbiAgICB8IDE2CitudWxscyAgICAgIHwgZgordmFycyAgICAgICB8IGYK K2RhdGEgICAgICAgfCAwMSAwMCAwMCAwMCAwMCAwMCAwMCAwMQorZGVhZCAgICAgICB8IGYKK2h0 aWQgICAgICAgfCAoMCwxKQordGlkcyAgICAgICB8IAorCistLWV4cGVjdCB6ZXJvIHJvdy4KK1NF TEVDVCAqIEZST00gYnRfcGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2UoJ3Rlc3QxX2FfaWR4JywgMSkp CitFWENFUFQgQUxMCitTRUxFQ1QgKiBGUk9NIGJ0X3BhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCd0 ZXN0M19hX2lkeCcsIDEpKTsKKygwIHJvd3MpCisKK0NSRUFURSBUQUJMRSB0ZXN0NChhIGludCwg YiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSArIDEpLCBjIHRleHQpOworSU5TRVJUIElOVE8g dGVzdDQoYSxjKSBWQUxVRVMgKDEwLDExKSwgKDEwLDExKTsKK0NSRUFURSBJTkRFWCB0ZXN0NF9i IE9OIHRlc3Q0IFVTSU5HIGJ0cmVlIChiKTsKK0NSRUFURSBJTkRFWCB0ZXN0NF9jIE9OIHRlc3Q0 IFVTSU5HIGJ0cmVlIChjKTsKK0FMVEVSIFRBQkxFIHRlc3Q0IGFsdGVyIGNvbHVtbiBiIHNldCBk YXRhIHR5cGUgdGV4dDsKKy0tLXNob3VsZCByZXR1cm4gemVybyByb3cuCitTRUxFQ1QgKiBGUk9N IGJ0X3BhZ2VfaXRlbXMoJ3Rlc3Q0X2InLCAxKQorRVhDRVBUIEFMTAorU0VMRUNUICogRlJPTSBi dF9wYWdlX2l0ZW1zKCd0ZXN0NF9jJywgMSk7CisoMCByb3dzKQorCiAtLSBGYWlsdXJlIHdoZW4g dXNpbmcgYSBub24tYnRyZWUgaW5kZXguCiBDUkVBVEUgSU5ERVggdGVzdDFfYV9oYXNoIE9OIHRl c3QxIFVTSU5HIGhhc2goYSk7CiBTRUxFQ1QgYnRfbWV0YXAoJ3Rlc3QxX2FfaGFzaCcpOwpkaWZm IC0tZ2l0IGEvY29udHJpYi9wYWdlaW5zcGVjdC9zcWwvYnRyZWUuc3FsIGIvY29udHJpYi9wYWdl aW5zcGVjdC9zcWwvYnRyZWUuc3FsCmluZGV4IDEwMmViZGVmZTNjLi5kMzM5MmMxMWQ1ZiAxMDA2 NDQKLS0tIGEvY29udHJpYi9wYWdlaW5zcGVjdC9zcWwvYnRyZWUuc3FsCisrKyBiL2NvbnRyaWIv cGFnZWluc3BlY3Qvc3FsL2J0cmVlLnNxbApAQCAtMzIsNiArMzIsMjcgQEAgU0VMRUNUICogRlJP TSBidF9wYWdlX2l0ZW1zKGdldF9yYXdfcGFnZSgndGVzdDFfYV9pZHgnLCAwKSk7CiBTRUxFQ1Qg KiBGUk9NIGJ0X3BhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCd0ZXN0MV9hX2lkeCcsIDEpKTsKIFNF TEVDVCAqIEZST00gYnRfcGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2UoJ3Rlc3QxX2FfaWR4JywgMikp OwogCistLS10ZXN0IGluZGV4IG92ZXIgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uCitDUkVBVEUg VEFCTEUgdGVzdDMgKGEgaW50OCwgYiBpbnQ0cmFuZ2UsIGMgaW50OCBnZW5lcmF0ZWQgYWx3YXlz IGFzIChhKzEpIHZpcnR1YWwpOworSU5TRVJUIElOVE8gdGVzdDMgVkFMVUVTICg3MjA1NzU5NDAz NzkyNzkzNiwgJ1swLDEpJyk7CitDUkVBVEUgSU5ERVggdGVzdDNfYV9pZHggT04gdGVzdDMgVVNJ TkcgYnRyZWUgKGMpOworU0VMRUNUICogRlJPTSBidF9wYWdlX2l0ZW1zKCd0ZXN0M19hX2lkeCcs IDEpOworCistLWV4cGVjdCB6ZXJvIHJvdy4KK1NFTEVDVCAqIEZST00gYnRfcGFnZV9pdGVtcyhn ZXRfcmF3X3BhZ2UoJ3Rlc3QxX2FfaWR4JywgMSkpCitFWENFUFQgQUxMCitTRUxFQ1QgKiBGUk9N IGJ0X3BhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCd0ZXN0M19hX2lkeCcsIDEpKTsKKworQ1JFQVRF IFRBQkxFIHRlc3Q0KGEgaW50LCBiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChhICsgMSksIGMg dGV4dCk7CitJTlNFUlQgSU5UTyB0ZXN0NChhLGMpIFZBTFVFUyAoMTAsMTEpLCAoMTAsMTEpOwor Q1JFQVRFIElOREVYIHRlc3Q0X2IgT04gdGVzdDQgVVNJTkcgYnRyZWUgKGIpOworQ1JFQVRFIElO REVYIHRlc3Q0X2MgT04gdGVzdDQgVVNJTkcgYnRyZWUgKGMpOworQUxURVIgVEFCTEUgdGVzdDQg YWx0ZXIgY29sdW1uIGIgc2V0IGRhdGEgdHlwZSB0ZXh0OworLS0tc2hvdWxkIHJldHVybiB6ZXJv IHJvdy4KK1NFTEVDVCAqIEZST00gYnRfcGFnZV9pdGVtcygndGVzdDRfYicsIDEpCitFWENFUFQg QUxMCitTRUxFQ1QgKiBGUk9NIGJ0X3BhZ2VfaXRlbXMoJ3Rlc3Q0X2MnLCAxKTsKKwogLS0gRmFp bHVyZSB3aGVuIHVzaW5nIGEgbm9uLWJ0cmVlIGluZGV4LgogQ1JFQVRFIElOREVYIHRlc3QxX2Ff aGFzaCBPTiB0ZXN0MSBVU0lORyBoYXNoKGEpOwogU0VMRUNUIGJ0X21ldGFwKCd0ZXN0MV9hX2hh c2gnKTsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9z Z21sL2NhdGFsb2dzLnNnbWwKaW5kZXggY2JkNGU0MGEzMjAuLmQ3ZWU3MzM3M2Y1IDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY2F0YWxv Z3Muc2dtbApAQCAtNDU5NSw2ICs0NTk1LDIxIEBAIFNDUkFNLVNIQS0yNTYkPHJlcGxhY2VhYmxl PiZsdDtpdGVyYXRpb24gY291bnQmZ3Q7PC9yZXBsYWNlYWJsZT46PHJlcGxhY2VhYmxlPiZsCiAg ICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CiAKKyAgICAgPHJvdz4KKyAgICAgIDxl bnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5p dGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPmluZGF0dHJnZW5lcmF0ZWQ8L3N0cnVjdGZpZWxk PiA8dHlwZT5pbnQydmVjdG9yPC90eXBlPgorICAgICAgIChyZWZlcmVuY2VzIDxsaW5rIGxpbmtl bmQ9ImNhdGFsb2ctcGctYXR0cmlidXRlIj48c3RydWN0bmFtZT5wZ19hdHRyaWJ1dGU8L3N0cnVj dG5hbWU+PC9saW5rPi48c3RydWN0ZmllbGQ+YXR0bnVtPC9zdHJ1Y3RmaWVsZD4pCisgICAgICA8 L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGlzIGlzIGFuIGFycmF5IG9mIDxzdHJ1Y3Rm aWVsZD5pbmRuYXR0czwvc3RydWN0ZmllbGQ+IHZhbHVlcyB0aGF0CisgICAgICAgaW5kaWNhdGUg d2hpY2ggdGFibGUgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyB0aGlzIGluZGV4IGluZGV4ZXMu CisgICAgICAgRm9yIGV4YW1wbGUsIGEgdmFsdWUgb2YgPGxpdGVyYWw+MSAzPC9saXRlcmFsPiB3 b3VsZCBtZWFuIHRoYXQgdGhlIGZpcnN0CisgICAgICAgYW5kIHRoZSB0aGlyZCB0YWJsZSBjb2x1 bW5zIG9mIHRoaXMgaW5kZXggZW50cmllcyBhcmUgdmlydHVhbCBnZW5lcmF0ZWQKKyAgICAgICBj b2x1bW4uIEEgemVybyBpbiB0aGlzIGFycmF5IGluZGljYXRlcyB0aGF0IHRoZSBjb3JyZXNwb25k aW5nIGluZGV4CisgICAgICAgYXR0cmlidXRlIGlzIG5vdCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1 bW4gcmVmZXJlbmNlLgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCiAgICAg IDxyb3c+CiAgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9s ZT0iY29sdW1uX2RlZmluaXRpb24iPgogICAgICAgIDxzdHJ1Y3RmaWVsZD5pbmRleHByczwvc3Ry dWN0ZmllbGQ+IDx0eXBlPnBnX25vZGVfdHJlZTwvdHlwZT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCA3 MzlhOTJiZGNjMS4uZGQzNzljMmI3OWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv aW5kZXguYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTU4NCw2ICs1ODQs MTIgQEAgVXBkYXRlSW5kZXhSZWxhdGlvbihPaWQgaW5kZXhvaWQsCiAJUmVsYXRpb24JcGdfaW5k ZXg7CiAJSGVhcFR1cGxlCXR1cGxlOwogCWludAkJCWk7CisJaW50MnZlY3RvciAqaW5kZ2Vua2V5 OworCWludDE2CSAgICpjb2xnZW5lcmF0ZWQ7CisKKwljb2xnZW5lcmF0ZWQgPSBwYWxsb2NfYXJy YXkoaW50MTYsIGluZGV4SW5mby0+aWlfTnVtSW5kZXhBdHRycyk7CisJZm9yIChpID0gMDsgaSA8 IGluZGV4SW5mby0+aWlfTnVtSW5kZXhBdHRyczsgaSsrKQorCQljb2xnZW5lcmF0ZWRbaV0gPSBp bmRleEluZm8tPmlpX0luZGV4QXR0ckdlbmVyYXRlZE51bWJlcnNbaV07CiAKIAkvKgogCSAqIENv cHkgdGhlIGluZGV4IGtleSwgb3BjbGFzcywgYW5kIGluZG9wdGlvbiBpbmZvIGludG8gYXJyYXlz IChzaG91bGQgd2UKQEAgLTU5Niw2ICs2MDIsNyBAQCBVcGRhdGVJbmRleFJlbGF0aW9uKE9pZCBp bmRleG9pZCwKIAlpbmRjbGFzcyA9IGJ1aWxkb2lkdmVjdG9yKG9wY2xhc3NPaWRzLCBpbmRleElu Zm8tPmlpX051bUluZGV4S2V5QXR0cnMpOwogCWluZG9wdGlvbiA9IGJ1aWxkaW50MnZlY3Rvcihj b2xvcHRpb25zLCBpbmRleEluZm8tPmlpX051bUluZGV4S2V5QXR0cnMpOwogCisJaW5kZ2Vua2V5 ID0gYnVpbGRpbnQydmVjdG9yKGNvbGdlbmVyYXRlZCwgaW5kZXhJbmZvLT5paV9OdW1JbmRleEF0 dHJzKTsKIAkvKgogCSAqIENvbnZlcnQgdGhlIGluZGV4IGV4cHJlc3Npb25zIChpZiBhbnkpIHRv IGEgdGV4dCBkYXR1bQogCSAqLwpAQCAtNjUzLDYgKzY2MCw3IEBAIFVwZGF0ZUluZGV4UmVsYXRp b24oT2lkIGluZGV4b2lkLAogCXZhbHVlc1tBbnVtX3BnX2luZGV4X2luZGNvbGxhdGlvbiAtIDFd ID0gUG9pbnRlckdldERhdHVtKGluZGNvbGxhdGlvbik7CiAJdmFsdWVzW0FudW1fcGdfaW5kZXhf aW5kY2xhc3MgLSAxXSA9IFBvaW50ZXJHZXREYXR1bShpbmRjbGFzcyk7CiAJdmFsdWVzW0FudW1f cGdfaW5kZXhfaW5kb3B0aW9uIC0gMV0gPSBQb2ludGVyR2V0RGF0dW0oaW5kb3B0aW9uKTsKKwl2 YWx1ZXNbQW51bV9wZ19pbmRleF9pbmRhdHRyZ2VuZXJhdGVkIC0gMV0gPSBQb2ludGVyR2V0RGF0 dW0oaW5kZ2Vua2V5KTsKIAl2YWx1ZXNbQW51bV9wZ19pbmRleF9pbmRleHBycyAtIDFdID0gZXhw cnNEYXR1bTsKIAlpZiAoZXhwcnNEYXR1bSA9PSAoRGF0dW0pIDApCiAJCW51bGxzW0FudW1fcGdf aW5kZXhfaW5kZXhwcnMgLSAxXSA9IHRydWU7CkBAIC0xMTM0LDYgKzExNDIsMjggQEAgaW5kZXhf Y3JlYXRlKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQl9CiAJCQl9CiAKKwkJCS8qCisJCQkg KiBJbnRlcm5hbGx5LCB3ZSBjb252ZXJ0IGluZGV4IG9mIHZpcnR1YWwgZ2VuZXJhdGlvbiBjb2x1 bW4gaW50byBhbgorCQkJICogZXhwcmVzc2lvbiBpbmRleC4gRm9yIGV4YW1wbGUsIGlmIGNvbHVt biAnYicgaXMgZGVmaW5lZCBhcyAoYiBJTlQKKwkJCSAqIEdFTkVSQVRFRCBBTFdBWVMgQVMgKGEg KiAyKSBWSVJUVUFMKSB0aGVuIGluZGV4IG92ZXIgJ2InIHdvdWxkCisJCQkgKiB0cmFuc2Zvcm1l ZCBpbnRvIGFuIGV4cHJlc3Npb24gaW5kZXggYXMgKChhICogMikpLiBBcyBhIHJlc3VsdCwKKwkJ CSAqIHRoZSBwZ19kZXBlbmQgcmVmb2Jqc3ViaWQgZG9lcyBub3QgcmV0YWluIHRoZSBvcmlnaW5h bCBhdHRyaWJ1dGUKKwkJCSAqIG51bWJlciBvZiB0aGUgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1u LiBCdXQgd2UgbmVlZCByZWJ1aWxkIGFueQorCQkJICogaW5kZXggdGhhdCB3YXMgYnVpbGQgb24g dmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uLiBzbyB3ZSBuZWVkIGF1dG8KKwkJCSAqIGRlcGVuZGVu Y2llcyBvbiByZWZlcmVuY2VkIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMuCisJCQkqLworCQkJ Zm9yIChpID0gMDsgaSA8IGluZGV4SW5mby0+aWlfTnVtSW5kZXhBdHRyczsgaSsrKQorCQkJewor CQkJCWlmIChpbmRleEluZm8tPmlpX0luZGV4QXR0ckdlbmVyYXRlZE51bWJlcnNbaV0gIT0gMCkK KwkJCQl7CisJCQkJCU9iamVjdEFkZHJlc3NTdWJTZXQocmVmZXJlbmNlZCwgUmVsYXRpb25SZWxh dGlvbklkLAorCQkJCQkJCQkJCWhlYXBSZWxhdGlvbklkLAorCQkJCQkJCQkJCWluZGV4SW5mby0+ aWlfSW5kZXhBdHRyR2VuZXJhdGVkTnVtYmVyc1tpXSk7CisJCQkJCWFkZF9leGFjdF9vYmplY3Rf YWRkcmVzcygmcmVmZXJlbmNlZCwgYWRkcnMpOworCQkJCQloYXZlX3NpbXBsZV9jb2wgPSBmYWxz ZTsKKwkJCQl9CisJCQl9CisKIAkJCS8qCiAJCQkgKiBJZiB0aGVyZSBhcmUgbm8gc2ltcGx5LXJl ZmVyZW5jZWQgY29sdW1ucywgZ2l2ZSB0aGUgaW5kZXggYW4KIAkJCSAqIGF1dG8gZGVwZW5kZW5j eSBvbiB0aGUgd2hvbGUgdGFibGUuICBJbiBtb3N0IGNhc2VzLCB0aGlzIHdpbGwKQEAgLTI0Mjgs OSArMjQ1OCwxMiBAQCBJbmRleEluZm8gKgogQnVpbGRJbmRleEluZm8oUmVsYXRpb24gaW5kZXgp CiB7CiAJSW5kZXhJbmZvICAqaWk7CisJSGVhcFR1cGxlCWh0X2lkeDsKIAlGb3JtX3BnX2luZGV4 IGluZGV4U3RydWN0ID0gaW5kZXgtPnJkX2luZGV4OwogCWludAkJCWk7CiAJaW50CQkJbnVtQXR0 czsKKwlEYXR1bQkJaW5kZ2Vua2V5RGF0dW07CisJaW50MnZlY3RvciAqaW5kZ2Vua2V5OwogCiAJ LyogY2hlY2sgdGhlIG51bWJlciBvZiBrZXlzLCBhbmQgY29weSBhdHRyIG51bWJlcnMgaW50byB0 aGUgSW5kZXhJbmZvICovCiAJbnVtQXR0cyA9IGluZGV4U3RydWN0LT5pbmRuYXR0czsKQEAgLTI0 NTQsOSArMjQ4NywxOSBAQCBCdWlsZEluZGV4SW5mbyhSZWxhdGlvbiBpbmRleCkKIAkJCQkJICAg aW5kZXgtPnJkX2luZGFtLT5hbXN1bW1hcml6aW5nLAogCQkJCQkgICBpbmRleFN0cnVjdC0+aW5k aXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmluZGlzdW5pcXVlKTsKIAorCWh0X2lkeCA9IFNl YXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKGluZGV4U3RydWN0LT5p bmRleHJlbGlkKSk7CisJaW5kZ2Vua2V5RGF0dW0gPSBTeXNDYWNoZUdldEF0dHJOb3ROdWxsKElO REVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCQkJQW51bV9wZ19pbmRleF9pbmRhdHRyZ2VuZXJh dGVkKTsKKwlpbmRnZW5rZXkgPSAoaW50MnZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kZ2Vu a2V5RGF0dW0pOworCiAJLyogZmlsbCBpbiBhdHRyaWJ1dGUgbnVtYmVycyAqLwogCWZvciAoaSA9 IDA7IGkgPCBudW1BdHRzOyBpKyspCisJewogCQlpaS0+aWlfSW5kZXhBdHRyTnVtYmVyc1tpXSA9 IGluZGV4U3RydWN0LT5pbmRrZXkudmFsdWVzW2ldOworCQlpaS0+aWlfSW5kZXhBdHRyR2VuZXJh dGVkTnVtYmVyc1tpXSA9IGluZGdlbmtleS0+dmFsdWVzW2ldOworCX0KKworCVJlbGVhc2VTeXND YWNoZShodF9pZHgpOwogCiAJLyogZmV0Y2ggZXhjbHVzaW9uIGNvbnN0cmFpbnQgaW5mbyBpZiBh bnkgKi8KIAlpZiAoaW5kZXhTdHJ1Y3QtPmluZGlzZXhjbHVzaW9uKQpAQCAtMjUyMyw2ICsyNTY2 LDIzIEBAIEJ1aWxkRHVtbXlJbmRleEluZm8oUmVsYXRpb24gaW5kZXgpCiAJcmV0dXJuIGlpOwog fQogCisvKgorICogSW5kZXhPdmVyVmlydHVhbEdlbmVyYXRlZAorICoJCVJldHVybiB3aGV0aGVy IHRoaXMgaW5kZXggaXMgYnVpbHQgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uLgorICovCiti b29sCitJc0luZGV4T3ZlclZpcnR1YWxHZW5lcmF0ZWQoY29uc3QgSW5kZXhJbmZvICppbmZvKQor eworCWludAkJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+aWlfTnVtSW5kZXhBdHRyczsg aSsrKQorCXsKKwkJaWYgKEF0dHJpYnV0ZU51bWJlcklzVmFsaWQoaW5mby0+aWlfSW5kZXhBdHRy R2VuZXJhdGVkTnVtYmVyc1tpXSkpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNl OworfQorCiAvKgogICogQ29tcGFyZUluZGV4SW5mbwogICoJCVJldHVybiB3aGV0aGVyIHRoZSBw cm9wZXJ0aWVzIG9mIHR3byBpbmRleGVzIChpbiBkaWZmZXJlbnQgdGFibGVzKQpAQCAtMjU4NSw2 ICsyNjQ1LDE1IEBAIENvbXBhcmVJbmRleEluZm8oY29uc3QgSW5kZXhJbmZvICppbmZvMSwgY29u c3QgSW5kZXhJbmZvICppbmZvMiwKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAorCQlpZiAoQXR0 cmlidXRlTnVtYmVySXNWYWxpZChpbmZvMS0+aWlfSW5kZXhBdHRyR2VuZXJhdGVkTnVtYmVyc1tp XSkgfHwKKwkJCUF0dHJpYnV0ZU51bWJlcklzVmFsaWQoaW5mbzItPmlpX0luZGV4QXR0ckdlbmVy YXRlZE51bWJlcnNbaV0pKQorCQl7CisJCQkvKiBmYWlsIGlmIGluZGV4IG92ZXIgdmlydHVhbCBn ZW5lcmF0ZWQgY29sdW1uIGF0dHJpYnV0ZSBkb2VzIG5vdCBtYXRjaCAqLworCQkJaWYgKGF0dG1h cC0+YXR0bnVtc1tpbmZvMi0+aWlfSW5kZXhBdHRyR2VuZXJhdGVkTnVtYmVyc1tpXSAtIDFdICE9 CisJCQkJaW5mbzEtPmlpX0luZGV4QXR0ckdlbmVyYXRlZE51bWJlcnNbaV0pCisJCQkJcmV0dXJu IGZhbHNlOworCQl9CisKIAkJLyogY29sbGF0aW9uIGFuZCBvcGZhbWlseSBhcmUgbm90IHZhbGlk IGZvciBpbmNsdWRlZCBjb2x1bW5zICovCiAJCWlmIChpID49IGluZm8xLT5paV9OdW1JbmRleEtl eUF0dHJzKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9p bmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IDMzYzIx MDZjMTdjLi5mMzZlZGFmNWUzOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5k ZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKQEAgLTU0LDYg KzU0LDcgQEAKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfdXRpbGNtZC5oIgogI2luY2x1ZGUgInBh cnRpdGlvbmluZy9wYXJ0ZGVzYy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJl d3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5o IgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgpA QCAtOTAsOSArOTEsMTUgQEAgc3RhdGljIHZvaWQgQ29tcHV0ZUluZGV4QXR0cnMoSW5kZXhJbmZv ICppbmRleEluZm8sCiAJCQkJCQkJICBib29sIGFtY2Fub3JkZXIsCiAJCQkJCQkJICBib29sIGlz Y29uc3RyYWludCwKIAkJCQkJCQkgIGJvb2wgaXN3aXRob3V0b3ZlcmxhcHMsCisJCQkJCQkJICBi b29sIGlzX3ByaW1hcnksCiAJCQkJCQkJICBPaWQgZGRsX3VzZXJpZCwKIAkJCQkJCQkgIGludCBk ZGxfc2VjX2NvbnRleHQsCiAJCQkJCQkJICBpbnQgKmRkbF9zYXZlX25lc3RsZXZlbCk7CitzdGF0 aWMgdm9pZCBjb21wdXRlX2dlbmVyYXRlZF9pbmRleGF0dHJzKEluZGV4SW5mbyAqaW5kZXhJbmZv LAorCQkJCQkJCQkJCSBSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJIGJvb2wgaXNfcHJpbWFyeSwK KwkJCQkJCQkJCQkgaW50IGF0dG4sCisJCQkJCQkJCQkJIGludCBhdHRudW0pOwogc3RhdGljIGNo YXIgKkNob29zZUluZGV4TmFtZShjb25zdCBjaGFyICp0YWJuYW1lLCBPaWQgbmFtZXNwYWNlSWQs CiAJCQkJCQkJIGNvbnN0IExpc3QgKmNvbG5hbWVzLCBjb25zdCBMaXN0ICpleGNsdXNpb25PcE5h bWVzLAogCQkJCQkJCSBib29sIHByaW1hcnksIGJvb2wgaXNjb25zdHJhaW50KTsKQEAgLTE4Miw2 ICsxODksNyBAQCBDaGVja0luZGV4Q29tcGF0aWJsZShPaWQgb2xkSWQsCiAJCQkJCSBib29sIGlz V2l0aG91dE92ZXJsYXBzKQogewogCWJvb2wJCWlzY29uc3RyYWludDsKKwlib29sCQlpc19wcmlt YXJ5OwogCU9pZAkJICAgKnR5cGVJZHM7CiAJT2lkCQkgICAqY29sbGF0aW9uSWRzOwogCU9pZAkJ ICAgKm9wY2xhc3NJZHM7CkBAIC0yMTQsNiArMjIyLDEyIEBAIENoZWNrSW5kZXhDb21wYXRpYmxl KE9pZCBvbGRJZCwKIAkgKi8KIAlpc2NvbnN0cmFpbnQgPSBmYWxzZTsKIAorCS8qCisJICogV2Ug Y2FuIHByZXRlbmQgaXNfcHJpbWFyeSA9IGZhbHNlIHVuY29uZGl0aW9uYWxseS4gIEl0IG9ubHkg c2VydmVzIHRvCisJICogZGVjaWRlIHRoZSB0ZXh0IG9mIGFuIGVycm9yIG1lc3NhZ2UgdGhhdCBz aG91bGQgbmV2ZXIgaGFwcGVuIGZvciB1cy4KKwkgKi8KKwlpc19wcmltYXJ5ID0gZmFsc2U7CisK IAludW1iZXJPZkF0dHJpYnV0ZXMgPSBsaXN0X2xlbmd0aChhdHRyaWJ1dGVMaXN0KTsKIAlBc3Nl cnQobnVtYmVyT2ZBdHRyaWJ1dGVzID4gMCk7CiAJQXNzZXJ0KG51bWJlck9mQXR0cmlidXRlcyA8 PSBJTkRFWF9NQVhfS0VZUyk7CkBAIC0yNTQsNyArMjY4LDcgQEAgQ2hlY2tJbmRleENvbXBhdGli bGUoT2lkIG9sZElkLAogCQkJCQkgIGNvbG9wdGlvbnMsIGF0dHJpYnV0ZUxpc3QsCiAJCQkJCSAg ZXhjbHVzaW9uT3BOYW1lcywgcmVsYXRpb25JZCwKIAkJCQkJICBhY2Nlc3NNZXRob2ROYW1lLCBh Y2Nlc3NNZXRob2RJZCwKLQkJCQkJICBhbWNhbm9yZGVyLCBpc2NvbnN0cmFpbnQsIGlzV2l0aG91 dE92ZXJsYXBzLCBJbnZhbGlkT2lkLAorCQkJCQkgIGFtY2Fub3JkZXIsIGlzY29uc3RyYWludCwg aXNXaXRob3V0T3ZlcmxhcHMsIGlzX3ByaW1hcnksIEludmFsaWRPaWQsCiAJCQkJCSAgMCwgTlVM TCk7CiAKIAkvKiBHZXQgdGhlIHNvb24tb2Jzb2xldGUgcGdfaW5kZXggdHVwbGUuICovCkBAIC05 MDUsNiArOTE5LDMxIEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCWlmIChzdG10LT53aGVy ZUNsYXVzZSkKIAkJQ2hlY2tQcmVkaWNhdGUoKEV4cHIgKikgc3RtdC0+d2hlcmVDbGF1c2UpOwog CisJLyogdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIG92ZXIgcHJlZGljYXRlIGluZGV4ZXMgYXJl IG5vdCBzdXBwb3J0ZWQgKi8KKwlpZiAoUmVsYXRpb25HZXREZXNjcihyZWwpLT5jb25zdHIgJiYK KwkJUmVsYXRpb25HZXREZXNjcihyZWwpLT5jb25zdHItPmhhc19nZW5lcmF0ZWRfdmlydHVhbCAm JgorCQlzdG10LT53aGVyZUNsYXVzZSkKKwl7CisJCUJpdG1hcHNldCAgKmluZGV4YXR0cnNfcHJl ZCA9IE5VTEw7CisJCWludAkJCWo7CisKKwkJcHVsbF92YXJhdHRub3Moc3RtdC0+d2hlcmVDbGF1 c2UsIDEsICZpbmRleGF0dHJzX3ByZWQpOworCisJCWogPSAtMTsKKwkJd2hpbGUgKChqID0gYm1z X25leHRfbWVtYmVyKGluZGV4YXR0cnNfcHJlZCwgaikpID49IDApCisJCXsKKwkJCUF0dHJOdW1i ZXIJYXR0bm8gPSBqICsgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsKKworCQkJ aWYgKFR1cGxlRGVzY0F0dHIoUmVsYXRpb25HZXREZXNjcihyZWwpLCBhdHRubyAtIDEpLT5hdHRn ZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKQorCQkJeworCQkJCWVyZXBv cnQoRVJST1IsCisJCQkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwK KwkJCQkJCWVycm1zZygicGFydGlhbCBpbmRleCBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5z IGFyZSBub3Qgc3VwcG9ydGVkIikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCiAJLyoK IAkgKiBQYXJzZSBBTS1zcGVjaWZpYyBvcHRpb25zLCBjb252ZXJ0IHRvIHRleHQgYXJyYXkgZm9y bSwgdmFsaWRhdGUuCiAJICovCkBAIC05NDEsNiArOTgwLDcgQEAgRGVmaW5lSW5kZXgoT2lkIHRh YmxlSWQsCiAJCQkJCSAgc3RtdC0+ZXhjbHVkZU9wTmFtZXMsIHRhYmxlSWQsCiAJCQkJCSAgYWNj ZXNzTWV0aG9kTmFtZSwgYWNjZXNzTWV0aG9kSWQsCiAJCQkJCSAgYW1jYW5vcmRlciwgc3RtdC0+ aXNjb25zdHJhaW50LCBzdG10LT5pc3dpdGhvdXRvdmVybGFwcywKKwkJCQkJICBzdG10LT5wcmlt YXJ5LAogCQkJCQkgIHJvb3Rfc2F2ZV91c2VyaWQsIHJvb3Rfc2F2ZV9zZWNfY29udGV4dCwKIAkJ CQkJICAmcm9vdF9zYXZlX25lc3RsZXZlbCk7CiAKQEAgLTExMDIsOSArMTE0Miw2IEBAIERlZmlu ZUluZGV4KE9pZCB0YWJsZUlkLAogCS8qCiAJICogV2UgZGlzYWxsb3cgaW5kZXhlcyBvbiBzeXN0 ZW0gY29sdW1ucy4gIFRoZXkgd291bGQgbm90IG5lY2Vzc2FyaWx5IGdldAogCSAqIHVwZGF0ZWQg Y29ycmVjdGx5LCBhbmQgdGhleSBkb24ndCBzZWVtIHVzZWZ1bCBhbnl3YXkuCi0JICoKLQkgKiBB bHNvIGRpc2FsbG93IHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgaW4gaW5kZXhlcyAodXNlIGV4 cHJlc3Npb24KLQkgKiBpbmRleCBpbnN0ZWFkKS4KIAkgKi8KIAlmb3IgKGludCBpID0gMDsgaSA8 IGluZGV4SW5mby0+aWlfTnVtSW5kZXhBdHRyczsgaSsrKQogCXsKQEAgLTExMTQsMjYgKzExNTEs MTQgQEAgRGVmaW5lSW5kZXgoT2lkIHRhYmxlSWQsCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJCSBlcnJtc2coImlu ZGV4IGNyZWF0aW9uIG9uIHN5c3RlbSBjb2x1bW5zIGlzIG5vdCBzdXBwb3J0ZWQiKSkpOwotCi0K LQkJaWYgKFR1cGxlRGVzY0F0dHIoUmVsYXRpb25HZXREZXNjcihyZWwpLCBhdHRubyAtIDEpLT5h dHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKQotCQkJZXJlcG9ydChF UlJPUiwKLQkJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJ CXN0bXQtPnByaW1hcnkgPwotCQkJCQllcnJtc2coInByaW1hcnkga2V5cyBvbiB2aXJ0dWFsIGdl bmVyYXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkIikgOgotCQkJCQlzdG10LT5pc2NvbnN0 cmFpbnQgPwotCQkJCQllcnJtc2coInVuaXF1ZSBjb25zdHJhaW50cyBvbiB2aXJ0dWFsIGdlbmVy YXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkIikgOgotCQkJCQllcnJtc2coImluZGV4ZXMg b24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBvcnRlZCIpKTsKIAl9CiAK IAkvKgotCSAqIEFsc28gY2hlY2sgZm9yIHN5c3RlbSBhbmQgZ2VuZXJhdGVkIGNvbHVtbnMgdXNl ZCBpbiBleHByZXNzaW9ucyBvcgotCSAqIHByZWRpY2F0ZXMuCisJICogQWxzbyBjaGVjayBmb3Ig c3lzdGVtIGNvbHVtbnMgdXNlZCBpbiBleHByZXNzaW9ucyBvciBwcmVkaWNhdGVzLgogCSAqLwog CWlmIChpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zIHx8IGluZGV4SW5mby0+aWlfUHJlZGljYXRl KQogCXsKIAkJQml0bWFwc2V0ICAqaW5kZXhhdHRycyA9IE5VTEw7Ci0JCWludAkJCWo7CiAKIAkJ cHVsbF92YXJhdHRub3MoKE5vZGUgKikgaW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucywgMSwgJmlu ZGV4YXR0cnMpOwogCQlwdWxsX3ZhcmF0dG5vcygoTm9kZSAqKSBpbmRleEluZm8tPmlpX1ByZWRp Y2F0ZSwgMSwgJmluZGV4YXR0cnMpOwpAQCAtMTE0NiwyNCArMTE3MSw2IEBAIERlZmluZUluZGV4 KE9pZCB0YWJsZUlkLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAogCQkJCQkJIGVycm1zZygiaW5kZXggY3JlYXRpb24gb24gc3lzdGVtIGNvbHVtbnMgaXMg bm90IHN1cHBvcnRlZCIpKSk7CiAJCX0KLQotCQkvKgotCQkgKiBYWFggVmlydHVhbCBnZW5lcmF0 ZWQgY29sdW1ucyBpbiBpbmRleCBleHByZXNzaW9ucyBvciBwcmVkaWNhdGVzCi0JCSAqIGNvdWxk IGJlIHN1cHBvcnRlZCwgYnV0IGl0IG5lZWRzIHN1cHBvcnQgaW4KLQkJICogUmVsYXRpb25HZXRJ bmRleEV4cHJlc3Npb25zKCkgYW5kIFJlbGF0aW9uR2V0SW5kZXhQcmVkaWNhdGUoKS4KLQkJICov Ci0JCWogPSAtMTsKLQkJd2hpbGUgKChqID0gYm1zX25leHRfbWVtYmVyKGluZGV4YXR0cnMsIGop KSA+PSAwKQotCQl7Ci0JCQlBdHRyTnVtYmVyCWF0dG5vID0gaiArIEZpcnN0TG93SW52YWxpZEhl YXBBdHRyaWJ1dGVOdW1iZXI7Ci0KLQkJCWlmIChUdXBsZURlc2NBdHRyKFJlbGF0aW9uR2V0RGVz Y3IocmVsKSwgYXR0bm8gLSAxKS0+YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURf VklSVFVBTCkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQkJIHN0bXQtPmlzY29uc3RyYWludCA/Ci0JCQkJCQkg ZXJybXNnKCJ1bmlxdWUgY29uc3RyYWludHMgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBh cmUgbm90IHN1cHBvcnRlZCIpIDoKLQkJCQkJCSBlcnJtc2coImluZGV4ZXMgb24gdmlydHVhbCBn ZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBvcnRlZCIpKSk7Ci0JCX0KIAl9CiAKIAkvKiBJ cyBpbmRleCBzYWZlIGZvciBvdGhlcnMgdG8gaWdub3JlPyAgU2VlIHNldF9pbmRleHNhZmVfcHJv Y2ZsYWdzKCkgKi8KQEAgLTEzMDcsNiArMTMxNCw3IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlk LAogCQkJYm9vbAkJaW52YWxpZGF0ZV9wYXJlbnQgPSBmYWxzZTsKIAkJCVJlbGF0aW9uCXBhcmVu dEluZGV4OwogCQkJVHVwbGVEZXNjCXBhcmVudERlc2M7CisJCQlib29sCQlwYXJlbnRfaWR4X3Zp cnR1YWw7CiAKIAkJCS8qCiAJCQkgKiBSZXBvcnQgdGhlIHRvdGFsIG51bWJlciBvZiBwYXJ0aXRp b25zIGF0IHRoZSBzdGFydCBvZiB0aGUKQEAgLTEzNTMsNiArMTM2MSw4IEBAIERlZmluZUluZGV4 KE9pZCB0YWJsZUlkLAogCQkJcGFyZW50SW5kZXggPSBpbmRleF9vcGVuKGluZGV4UmVsYXRpb25J ZCwgbG9ja21vZGUpOwogCQkJaW5kZXhJbmZvID0gQnVpbGRJbmRleEluZm8ocGFyZW50SW5kZXgp OwogCisJCQlwYXJlbnRfaWR4X3ZpcnR1YWwgPSBJc0luZGV4T3ZlclZpcnR1YWxHZW5lcmF0ZWQo aW5kZXhJbmZvKTsKKwogCQkJcGFyZW50RGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKIAog CQkJLyoKQEAgLTE0MTIsNiArMTQyMiwxNCBAQCBEZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkJ CQkJCQkJCQkgIHBhcmVudERlc2MsCiAJCQkJCQkJCQkJICBmYWxzZSk7CiAKKwkJCQkvKgorCQkJ CSAqIGNoaWxkIGRvbid0IGhhdmUgYW55IGluZGV4LCBidXQgcGFyZW50IGhhdmUgaW5kZXggb3Zl cgorCQkJCSAqIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbi4gV2UgbmVlZCBlbnN1cmUgdGhlIGlu ZGV4ZWQKKwkJCQkgKiBnZW5lcmF0ZWQgZXhwcmVzc2lvbiBvbiBwYXJlbnQgbWF0Y2ggd2l0aCBj aGlsZC4KKwkJCQkqLworCQkJCWlmIChjaGlsZGlkeHMgPT0gTklMICYmIHBhcmVudF9pZHhfdmly dHVhbCkKKwkJCQkJY2hlY2tfZ2VuZXJhdGVkX2luZGV4YXR0cnMoaW5kZXhJbmZvLCByZWwsIGNo aWxkcmVsLCBhdHRtYXAsIGZhbHNlKTsKKwogCQkJCWZvcmVhY2goY2VsbCwgY2hpbGRpZHhzKQog CQkJCXsKIAkJCQkJT2lkCQkJY2xkaWR4aWQgPSBsZmlyc3Rfb2lkKGNlbGwpOwpAQCAtMTQ4MSw2 ICsxNDk5LDIzIEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCQkJCQkJaW5kZXhfY2xvc2Uo Y2xkaWR4LCBOb0xvY2spOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7 CisJCQkJCQlib29sCWNsZGlkeF92aXJ0dWFsOworCQkJCQkJYm9vbAlpbmRleF92aXJ0dWFsOwor CQkJCQkJaW5kZXhfdmlydHVhbCA9IElzSW5kZXhPdmVyVmlydHVhbEdlbmVyYXRlZChpbmRleElu Zm8pOworCQkJCQkJY2xkaWR4X3ZpcnR1YWwgPSBJc0luZGV4T3ZlclZpcnR1YWxHZW5lcmF0ZWQo Y2xkSWR4SW5mbyk7CisKKwkJCQkJCS8qIHNob3VsZCBmYWlsLiBvdGhlcndpc2UgcGdfZHVtcCB3 b24ndCB3b3JrICovCisJCQkJCQlpZiAoaW5kZXhfdmlydHVhbCB8fCBjbGRpZHhfdmlydHVhbCkK KwkJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkJZXJyY29kZShFUlJDT0RFX1dST05HX09C SkVDVF9UWVBFKSwKKwkJCQkJCQkJCWVycm1zZygiY2Fubm90IGNyZWF0ZSBpbmRleCBvbiBwYXJ0 aXRpb25lZCB0YWJsZSBcIiVzXCIiLAorCQkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHJlbCkpLAorCQkJCQkJCQkJZXJyZGV0YWlsKCJUaGUgaW5kZXggZGVmaW5pdGlvbiBvZiBw YXJ0aXRpb25lZCB0YWJsZSBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggdGFibGUgXCIlc1wiIiwKKwkJ CQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkgIFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKGNoaWxkcmVsKSkpOworCQkJCQl9CiAKIAkJCQkJaW5kZXhf Y2xvc2UoY2xkaWR4LCBsb2NrbW9kZSk7CiAJCQkJfQpAQCAtMTg1Nyw2ICsxODkyLDcyIEBAIENo ZWNrUHJlZGljYXRlKEV4cHIgKnByZWRpY2F0ZSkKIAkJCQkgZXJybXNnKCJmdW5jdGlvbnMgaW4g aW5kZXggcHJlZGljYXRlIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRSIpKSk7CiB9CiAKKy8qCisg KiByZWxfaWR4X2luZm86IHRoZSBJbmRleEluZm8gdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggcmVs LgorICogImNoaWxkcmVsIjogdGhlIHJlbGF0aW9uIHRvIGJlIGF0dGFjaGVkIHRvICJyZWwiIG9y IHRoZSBjaGlsZCBvZiAicmVsIi4KKyAqIGF0dG1hcDogQXR0cmlidXRlIG1hcHBpbmcgYmV0d2Vl biBjaGlsZHJlbCBhbmQgcmVsLgorICogaXNfYXR0YWNoOiBpcyB0aGlzIGNvbW1hbmQgb2YgQUxU RVIgVEFCTEUgQVRUQUNIIFBBUlRJVElPTgorICoKKyAqIFVzZSBidWlsZF9hdHRybWFwX2J5X25h bWUoY2hpbGRyZWwsIHJlbCkgdG8gYnVpbGQgdGhlIGF0dG1hcC4KKyovCit2b2lkIGNoZWNrX2dl bmVyYXRlZF9pbmRleGF0dHJzKGNvbnN0IEluZGV4SW5mbyAqcmVsX2lkeF9pbmZvLAorCQkJCQkJ CQlSZWxhdGlvbiByZWwsCisJCQkJCQkJCVJlbGF0aW9uIGNoaWxkcmVsLAorCQkJCQkJCQljb25z dCBBdHRyTWFwICphdHRtYXAsCisJCQkJCQkJCWJvb2wgaXNfYXR0YWNoKQoreworCWludAlpOwor CisJLyogaWYgcGFyZW50IGhhdmUgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uLCBjaGlsZCBtdXN0 IGFsc28gaGF2ZSAqLworCUFzc2VydChyZWwtPnJkX2F0dC0+Y29uc3RyLT5oYXNfZ2VuZXJhdGVk X3ZpcnR1YWwpOworCUFzc2VydChjaGlsZHJlbC0+cmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0 ZWRfdmlydHVhbCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVsX2lkeF9pbmZvLT5paV9OdW1JbmRl eEF0dHJzOyBpKyspCisJeworCQlpZiAoQXR0cmlidXRlTnVtYmVySXNWYWxpZChyZWxfaWR4X2lu Zm8tPmlpX0luZGV4QXR0ckdlbmVyYXRlZE51bWJlcnNbaV0pKQorCQl7CisJCQlOb2RlCSAgICpu b2RlX3JlbDsKKwkJCU5vZGUJICAgKm5vZGVfYXR0YWNoOworCQkJQXR0ck51bWJlcglhdHRubzsK KwkJCWJvb2wJCWZvdW5kX3dob2xlX3JvdzsKKworCQkJYXR0bm8JPSByZWxfaWR4X2luZm8tPmlp X0luZGV4QXR0ckdlbmVyYXRlZE51bWJlcnNbaV07CisKKwkJCW5vZGVfcmVsID0gCWJ1aWxkX2dl bmVyYXRpb25fZXhwcmVzc2lvbihyZWwsIGF0dG5vKTsKKwkJCW5vZGVfcmVsID0gbWFwX3Zhcmlh YmxlX2F0dG5vcyhub2RlX3JlbCwKKwkJCQkJCQkJCQkgICAxLCAwLAorCQkJCQkJCQkJCSAgIGF0 dG1hcCwKKwkJCQkJCQkJCQkgICBJbnZhbGlkT2lkLCAmZm91bmRfd2hvbGVfcm93KTsKKwkJCWlm IChmb3VuZF93aG9sZV9yb3cpCisJCQkJZWxvZyhFUlJPUiwgIkluZGV4IGNvbnRhaW5zIGEgd2hv bGUtcm93IHRhYmxlIHJlZmVyZW5jZSIpOworCisJCQlub2RlX2F0dGFjaCA9IGJ1aWxkX2dlbmVy YXRpb25fZXhwcmVzc2lvbihjaGlsZHJlbCwKKwkJCQkJCQkJCQkJCQkgIGF0dG1hcC0+YXR0bnVt c1thdHRubyAtIDFdKTsKKworCQkJaWYgKCFlcXVhbChub2RlX3JlbCwgbm9kZV9hdHRhY2gpKQor CQkJeworCQkJCWlmIChpc19hdHRhY2gpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJZXJy Y29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKKwkJCQkJCQllcnJtc2coImNhbm5vdCBh dHRhY2ggdGFibGUgXCIlc1wiIGFzIHBhcnRpdGlvbiBvZiBwYXJ0aXRpb25lZCB0YWJsZSBcIiVz XCIiLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShjaGlsZHJlbCksCisJCQkJ CQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOworCQkJCQkJCWVycmRldGFpbCgi VGhlIGluZGV4IGRlZmluaXRpb24gb2YgcGFydGl0aW9uZWQgdGFibGUgXCIlc1wiIGRvZXMgbm90 IG1hdGNoIHRhYmxlIFwiJXNcIiIsCisJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCksCisJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGNoaWxkcmVsKSkpOwor CQkJCWVsc2UKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQllcnJjb2RlKEVSUkNPREVfV1JP TkdfT0JKRUNUX1RZUEUpLAorCQkJCQkJCWVycm1zZygiY2Fubm90IGNyZWF0ZSBpbmRleCBvbiBw YXJ0aXRpb25lZCB0YWJsZSBcIiVzXCIiLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpKSwKKwkJCQkJCQllcnJkZXRhaWwoIlRoZSBpbmRleCBkZWZpbml0aW9uIG9mIHBh cnRpdGlvbmVkIHRhYmxlIFwiJXNcIiBkb2VzIG5vdCBtYXRjaCB0YWJsZSBcIiVzXCIiLAorCQkJ CQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJICBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShjaGlsZHJlbCkpKTsKKwkJCX0KKwkJfQorCX0KK30KKwogLyoKICAq IENvbXB1dGUgcGVyLWluZGV4LWNvbHVtbiBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIGluZGV4ZWQg Y29sdW1uIG51bWJlcnMKICAqIG9yIGluZGV4IGV4cHJlc3Npb25zLCBvcGNsYXNzZXMgYW5kIHRo ZWlyIG9wdGlvbnMuIE5vdGUsIGFsbCBvdXRwdXQgdmVjdG9ycwpAQCAtMTg4MSw2ICsxOTgyLDcg QEAgQ29tcHV0ZUluZGV4QXR0cnMoSW5kZXhJbmZvICppbmRleEluZm8sCiAJCQkJICBib29sIGFt Y2Fub3JkZXIsCiAJCQkJICBib29sIGlzY29uc3RyYWludCwKIAkJCQkgIGJvb2wgaXN3aXRob3V0 b3ZlcmxhcHMsCisJCQkJICBib29sIGlzX3ByaW1hcnksCiAJCQkJICBPaWQgZGRsX3VzZXJpZCwK IAkJCQkgIGludCBkZGxfc2VjX2NvbnRleHQsCiAJCQkJICBpbnQgKmRkbF9zYXZlX25lc3RsZXZl bCkKQEAgLTE4OTEsNiArMTk5MywyOCBAQCBDb21wdXRlSW5kZXhBdHRycyhJbmRleEluZm8gKmlu ZGV4SW5mbywKIAlpbnQJCQlua2V5Y29scyA9IGluZGV4SW5mby0+aWlfTnVtSW5kZXhLZXlBdHRy czsKIAlPaWQJCQlzYXZlX3VzZXJpZDsKIAlpbnQJCQlzYXZlX3NlY19jb250ZXh0OworCVJlbGF0 aW9uCXJlbDsKKwlUdXBsZURlc2MJcmVsdHVwbGRlc2M7CisJTGlzdAkJKnZpcnR1YWxfZ2VuZXJh dGVkID0gTklMOworCisJcmVsCT0gdGFibGVfb3BlbihyZWxJZCwgTm9Mb2NrKTsKKwlyZWx0dXBs ZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKworCS8qCisJICogY3VycmVudGx5LCB3ZSBk byBub3Qgc3VwcG9ydCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIG92ZXIgZXhwcmVzc2lvbgor CSAqIGluZGV4ZXMuICB3ZSBhY2N1bXVsYXRlIHRoZSBhdHRyaWJ1dGUgbnVtYmVyIG9mIHZpcnR1 YWwgZ2VuZXJhdGVkIGNvbHVtbnMKKwkgKiBzbyB3ZSBjYW4gdmVyaWZ5IGl0IGxhdGVyLgorCSov CisJaWYgKHJlbHR1cGxkZXNjLT5jb25zdHIgJiYgcmVsdHVwbGRlc2MtPmNvbnN0ci0+aGFzX2dl bmVyYXRlZF92aXJ0dWFsKQorCXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWx0dXBsZGVzYy0+ bmF0dHM7IGkrKykKKwkJeworCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0 dHIocmVsdHVwbGRlc2MsIGkpOworCisJCQlpZiAoYXR0ci0+YXR0Z2VuZXJhdGVkID09IEFUVFJJ QlVURV9HRU5FUkFURURfVklSVFVBTCkKKwkJCQl2aXJ0dWFsX2dlbmVyYXRlZCA9IGxhcHBlbmRf aW50KHZpcnR1YWxfZ2VuZXJhdGVkLCBhdHRyLT5hdHRudW0pOworCQl9CisJfQogCiAJLyogQWxs b2NhdGUgc3BhY2UgZm9yIGV4Y2x1c2lvbiBvcGVyYXRvciBpbmZvLCBpZiBuZWVkZWQgKi8KIAlp ZiAoZXhjbHVzaW9uT3BOYW1lcykKQEAgLTE5MzMsNiArMjA1Nyw3IEBAIENvbXB1dGVJbmRleEF0 dHJzKEluZGV4SW5mbyAqaW5kZXhJbmZvLAogCQlJbmRleEVsZW0gICphdHRyaWJ1dGUgPSAoSW5k ZXhFbGVtICopIGxmaXJzdChsYyk7CiAJCU9pZAkJCWF0dHR5cGU7CiAJCU9pZAkJCWF0dGNvbGxh dGlvbjsKKwkJY2hhcgkJYXR0Z2VuZXJhdGVkID0gJ1wwJzsKIAogCQkvKgogCQkgKiBQcm9jZXNz IHRoZSBjb2x1bW4tb3ItZXhwcmVzc2lvbiB0byBiZSBpbmRleGVkLgpAQCAtMTk0Miw2ICsyMDY3 LDcgQEAgQ29tcHV0ZUluZGV4QXR0cnMoSW5kZXhJbmZvICppbmRleEluZm8sCiAJCQkvKiBTaW1w bGUgaW5kZXggYXR0cmlidXRlICovCiAJCQlIZWFwVHVwbGUJYXR0dHVwbGU7CiAJCQlGb3JtX3Bn X2F0dHJpYnV0ZSBhdHRmb3JtOworCQkJQXR0ck51bWJlcglhdHRudW07CiAKIAkJCUFzc2VydChh dHRyaWJ1dGUtPmV4cHIgPT0gTlVMTCk7CiAJCQlhdHR0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQXR0 TmFtZShyZWxJZCwgYXR0cmlidXRlLT5uYW1lKTsKQEAgLTE5NjAsMTAgKzIwODYsMTcgQEAgQ29t cHV0ZUluZGV4QXR0cnMoSW5kZXhJbmZvICppbmRleEluZm8sCiAJCQkJCQkJCQlhdHRyaWJ1dGUt Pm5hbWUpKSk7CiAJCQl9CiAJCQlhdHRmb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJV Q1QoYXR0dHVwbGUpOworCQkJYXR0bnVtID0gYXR0Zm9ybS0+YXR0bnVtOwogCQkJaW5kZXhJbmZv LT5paV9JbmRleEF0dHJOdW1iZXJzW2F0dG5dID0gYXR0Zm9ybS0+YXR0bnVtOwogCQkJYXR0dHlw ZSA9IGF0dGZvcm0tPmF0dHR5cGlkOwogCQkJYXR0Y29sbGF0aW9uID0gYXR0Zm9ybS0+YXR0Y29s bGF0aW9uOworCQkJYXR0Z2VuZXJhdGVkID0gYXR0Zm9ybS0+YXR0Z2VuZXJhdGVkOwogCQkJUmVs ZWFzZVN5c0NhY2hlKGF0dHR1cGxlKTsKKworCQkJaWYgKGF0dGdlbmVyYXRlZCA9PSBBVFRSSUJV VEVfR0VORVJBVEVEX1ZJUlRVQUwpCisJCQkJY29tcHV0ZV9nZW5lcmF0ZWRfaW5kZXhhdHRycyhp bmRleEluZm8sIHJlbCwgaXNfcHJpbWFyeSwgYXR0biwgYXR0bnVtKTsKKwkJCWVsc2UKKwkJCQlp bmRleEluZm8tPmlpX0luZGV4QXR0ckdlbmVyYXRlZE51bWJlcnNbYXR0bl0gPSAwOwogCQl9CiAJ CWVsc2UKIAkJewpAQCAtMTk4NiwxOCArMjExOSw0MiBAQCBDb21wdXRlSW5kZXhBdHRycyhJbmRl eEluZm8gKmluZGV4SW5mbywKIAkJCXdoaWxlIChJc0EoZXhwciwgQ29sbGF0ZUV4cHIpKQogCQkJ CWV4cHIgPSAoTm9kZSAqKSAoKENvbGxhdGVFeHByICopIGV4cHIpLT5hcmc7CiAKKwkJCWlmICgh SXNBKGV4cHIsIFZhcikpCisJCQl7CisJCQkJQml0bWFwc2V0ICAqaWR4YXR0cnMgPSBOVUxMOwor CQkJCWludAkJCWogPSAtMTsKKworCQkJCXB1bGxfdmFyYXR0bm9zKGV4cHIsIDEsICZpZHhhdHRy cyk7CisJCQkJd2hpbGUgKChqID0gYm1zX25leHRfbWVtYmVyKGlkeGF0dHJzLCBqKSkgPj0gMCkK KwkJCQl7CisJCQkJCUF0dHJOdW1iZXIJYXR0bm8gPSBqICsgRmlyc3RMb3dJbnZhbGlkSGVhcEF0 dHJpYnV0ZU51bWJlcjsKKwkJCQkJaWYgKGxpc3RfbWVtYmVyX2ludCh2aXJ0dWFsX2dlbmVyYXRl ZCwgYXR0bm8pKQorCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCQkJCWVycm1zZygiZXhwcmVzc2lvbiBpbmRl eCBvdmVyIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKSk7CisJ CQkJfQorCQkJfQorCiAJCQlpZiAoSXNBKGV4cHIsIFZhcikgJiYKIAkJCQkoKFZhciAqKSBleHBy KS0+dmFyYXR0bm8gIT0gSW52YWxpZEF0dHJOdW1iZXIpCiAJCQl7CisJCQkJaW50CQkJYXR0bnVt ID0gKChWYXIgKikgZXhwciktPnZhcmF0dG5vOworCiAJCQkJLyoKIAkJCQkgKiBVc2VyIHdyb3Rl ICIoY29sdW1uKSIgb3IgIihjb2x1bW4gQ09MTEFURSBzb21ldGhpbmcpIi4KIAkJCQkgKiBUcmVh dCBpdCBsaWtlIHNpbXBsZSBhdHRyaWJ1dGUgYW55d2F5LgogCQkJCSAqLwotCQkJCWluZGV4SW5m by0+aWlfSW5kZXhBdHRyTnVtYmVyc1thdHRuXSA9ICgoVmFyICopIGV4cHIpLT52YXJhdHRubzsK KwkJCQlpbmRleEluZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbYXR0bl0gPSBhdHRudW07CisKKwkJ CQlpZiAobGlzdF9tZW1iZXJfaW50KHZpcnR1YWxfZ2VuZXJhdGVkLCBhdHRudW0pKQorCQkJCQlj b21wdXRlX2dlbmVyYXRlZF9pbmRleGF0dHJzKGluZGV4SW5mbywgcmVsLCBpc19wcmltYXJ5LCBh dHRuLCBhdHRudW0pOworCQkJCWVsc2UKKwkJCQkJaW5kZXhJbmZvLT5paV9JbmRleEF0dHJHZW5l cmF0ZWROdW1iZXJzW2F0dG5dID0gMDsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKIAkJCQlpbmRleElu Zm8tPmlpX0luZGV4QXR0ck51bWJlcnNbYXR0bl0gPSAwOwkvKiBtYXJrcyBleHByZXNzaW9uICov CisJCQkJaW5kZXhJbmZvLT5paV9JbmRleEF0dHJHZW5lcmF0ZWROdW1iZXJzW2F0dG5dID0gMDsK IAkJCQlpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zID0gbGFwcGVuZChpbmRleEluZm8tPmlpX0V4 cHJlc3Npb25zLAogCQkJCQkJCQkJCQkJCWV4cHIpOwogCkBAIC0yMjQ4LDYgKzI0MDUsNzggQEAg Q29tcHV0ZUluZGV4QXR0cnMoSW5kZXhJbmZvICppbmRleEluZm8sCiAKIAkJYXR0bisrOwogCX0K Kwl0YWJsZV9jbG9zZShyZWwsIE5vTG9jayk7Cit9CisKKy8qCisgKiBpbmRleEluZm86IHRoaXMg SW5kZXhJbmZvIHRvIGJlIGJ1aWxkLgorICogcmVsOiB0aGUgcmVsYXRpb24gdGhpcyBpbmRleElu Zm8gaXMgYmFzZWQgb24uCisgKiBpc19wcmltYXJ5OiBpcyB0aGlzIGluZGV4IGEgcHJpbWFyeSBr ZXkuCisgKiBhdHRuOiBpbmRpY2VzIG9mIHRoZSBpbmRleCBrZXkgYXR0cmlidXRlLCAwIGJhc2Vk LgorICogYXR0bnVtOiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gYXR0cmlidXRlIG51bWJlci4K KyovCitzdGF0aWMgdm9pZAorY29tcHV0ZV9nZW5lcmF0ZWRfaW5kZXhhdHRycyhJbmRleEluZm8g KmluZGV4SW5mbywgUmVsYXRpb24gcmVsLAorCQkJCQkJCSBib29sIGlzX3ByaW1hcnksIGludCBh dHRuLCBpbnQgYXR0bnVtKQoreworCU5vZGUJICAgKm5vZGU7CisJQml0bWFwc2V0ICAqZ2VuYXR0 cnMgPSBOVUxMOworCisJaWYgKGlzX3ByaW1hcnkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJZXJybXNnKCJwcmltYXJ5 IGtleXMgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBvcnRlZCIpKTsK KworCWlmIChpbmRleEluZm8tPmlpX1VuaXF1ZSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQllcnJtc2coInVuaXF1ZSBj b25zdHJhaW50cyBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVk IikpOworCisJaWYgKGF0dG4gPj0gaW5kZXhJbmZvLT5paV9OdW1JbmRleEtleUF0dHJzKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAorCQkJCWVycm1zZygidmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIGFyZSBub3Qgc3VwcG9ydGVk IGluIGluZGV4IGluY2x1ZGVkIGNvbHVtbnMiKSk7CisKKwkvKiBGZXRjaCB0aGUgR0VORVJBVEVE IEFTIGV4cHJlc3Npb24gdHJlZSAqLworCW5vZGUgPSBidWlsZF9nZW5lcmF0aW9uX2V4cHJlc3Np b24ocmVsLCBhdHRudW0pOworCisJLyoKKwkgKiBpZiB0aGUgZ2VuZXJhdGlvbiBleHByZXNzaW9u IGp1c3QgcmVmZXJlbmNlIGFub3RoZXIgVmFyIG5vZGUsIHRoZW4gc2V0CisJICogaWlfSW5kZXhB dHRyTnVtYmVycyB0byB0aGF0IFZhci0+dmFyYXR0bm8uCisJKi8KKwlpZiAoSXNBKG5vZGUsIFZh cikpCisJeworCQlWYXIJCSAgICp2YXIgPSAoVmFyICopIG5vZGU7CisKKwkJQXNzZXJ0KHZhci0+ dmFyYXR0bm8gPiAwKTsKKwkJaW5kZXhJbmZvLT5paV9JbmRleEF0dHJOdW1iZXJzW2F0dG5dID0g dmFyLT52YXJhdHRubzsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogU3RyaXAgYW55IHRvcC1s ZXZlbCBDT0xMQVRFIGNsYXVzZS4gIFRoaXMgZW5zdXJlcyB0aGF0IHdlIHRyZWF0CisJCSAqICJ4 IENPTExBVEUgeSIgYW5kICIoeCBDT0xMQVRFIHkpIiBhbGlrZS4KKwkJKi8KKwkJd2hpbGUgKElz QShub2RlLCBDb2xsYXRlRXhwcikpCisJCQlub2RlID0gKE5vZGUgKikgKChDb2xsYXRlRXhwciAq KSBub2RlKS0+YXJnOworCisJCS8qIGdlbmVyYXRpb24gZXhwcmVzc2lvbiBhcmUgaW1tdXRhYmxl LCBzbyB0aGlzIHVubGlrZWx5IHRvIGhhcHBlbiAqLworCQlpZiAoY29udGFpbl9tdXRhYmxlX2Z1 bmN0aW9uc19hZnRlcl9wbGFubmluZygoRXhwciAqKSBub2RlKSkKKwkJCWVsb2coRVJST1IsImZ1 bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRSIpOwor CisJCXB1bGxfdmFyYXR0bm9zKG5vZGUsIDEsICZnZW5hdHRycyk7CisKKwkJaWYgKGdlbmF0dHJz ID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJZXJybXNnKCJjYW4gbm90IGNyZWF0ZSBpbmRleCBiYXNl ZCBvbiB2YXJpYWJsZSBmcmVlIGdlbmVyYXRpb24gZXhwcmVzc2lvbiIpKTsKKworCQlpbmRleElu Zm8tPmlpX0luZGV4QXR0ck51bWJlcnNbYXR0bl0gPSAwOwkvKiBtYXJrIGFzIGV4cHJlc3Npb24g aW5kZXggKi8KKwkJaW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucyA9IGxhcHBlbmQoaW5kZXhJbmZv LT5paV9FeHByZXNzaW9ucywKKwkJCQkJCQkJCQkJbm9kZSk7CisJfQorCisJaW5kZXhJbmZvLT5p aV9JbmRleEF0dHJHZW5lcmF0ZWROdW1iZXJzW2F0dG5dID0gYXR0bnVtOwogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYwppbmRleCBiM2VkNjk0NTdmYy4uMjdhYTM2ODZlNjUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC04NjUyLDYgKzg2NTIsMzIgQEAgQVRFeGVjU2V0RXhw cmVzc2lvbihBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAq Y29sTmFtZSwKIAkJICovCiAJCVJlbWVtYmVyQWxsRGVwZW5kZW50Rm9yUmVidWlsZGluZyh0YWIs IEFUX1NldEV4cHJlc3Npb24sIHJlbCwgYXR0bnVtLCBjb2xOYW1lKTsKIAl9CisJZWxzZQorCXsK KwkJQXNzZXJ0KGF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwpOwor CisJCVJlbWVtYmVyQWxsRGVwZW5kZW50Rm9yUmVidWlsZGluZyh0YWIsIEFUX1NldEV4cHJlc3Np b24sIHJlbCwgYXR0bnVtLCBjb2xOYW1lKTsKKworCQkvKgorCQkgKiBDaGFuZ2luZyB0aGUgZ2Vu ZXJhdGlvbiBleHByZXNzaW9uIG9mIHRoZSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4KKwkJICog ZG9lcyBub3QgcmVxdWlyZSB0YWJsZSByZXdyaXRlLiBIb3dldmVyLCBpZiBhbiBpbmRleCBpcyBi dWlsdCBvbiB0b3AKKwkJICogb2YgaXQsIHRhYmxlIHJld3JpdGUgaXMgbmVjZXNzYXJ5LiBTbyBp biBwaGFzZSAzLCBpbmRleF9yZWJ1aWxkIGNhbgorCQkgKiBzdWNjZXNzZnVsbHkgcmVidWlsZCB0 aGUgaW5kZXggYmFzZWQgb24gdGhlIG5ldyBnZW5lcmF0aW9uIGV4cHJlc3Npb24KKwkJKi8KKwkJ aWYgKHRhYi0+Y2hhbmdlZEluZGV4T2lkcyAhPSBOSUwpCisJCXsKKwkJCXJld3JpdGUgPSB0cnVl OworCisJCQkvKgorCQkJICogQ2xlYXIgYWxsIHRoZSBtaXNzaW5nIHZhbHVlcyBpZiB3ZSdyZSBy ZXdyaXRpbmcgdGhlIHRhYmxlLCBzaW5jZQorCQkJICogdGhpcyByZW5kZXJzIHRoZW0gcG9pbnRs ZXNzLgorCQkJKi8KKwkJCVJlbGF0aW9uQ2xlYXJNaXNzaW5nKHJlbCk7CisKKwkJCS8qIG1ha2Ug c3VyZSB3ZSBkb24ndCBjb25mbGljdCB3aXRoIGxhdGVyIGF0dHJpYnV0ZSBtb2RpZmljYXRpb25z ICovCisJCQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworCQl9CisJfQogCiAJLyoKIAkgKiBE cm9wIHRoZSBkZXBlbmRlbmN5IHJlY29yZHMgb2YgdGhlIEdFTkVSQVRFRCBleHByZXNzaW9uLCBp biBwYXJ0aWN1bGFyCkBAIC0xNDc1NSw2ICsxNDc4MSwxNCBAQCBBVEV4ZWNBbHRlckNvbHVtblR5 cGUoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAJICovCiAJUmVtZW1iZXJB bGxEZXBlbmRlbnRGb3JSZWJ1aWxkaW5nKHRhYiwgQVRfQWx0ZXJDb2x1bW5UeXBlLCByZWwsIGF0 dG51bSwgY29sTmFtZSk7CiAKKwkvKgorCSAqIHRlbGwgcGhhc2UzIGRvIHRhYmxlIHJld3JpdGUg aWYgdGhlcmUgYXJlIGFueSBpbmRleCBiYXNlZCBvbiB2aXJ0dWFsCisJICogZ2VuZXJhdGVkIGNv bHVtLgorCSovCisJaWYgKGF0dFR1cC0+YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFU RURfVklSVFVBTCAmJgorCQl0YWItPmNoYW5nZWRJbmRleE9pZHMgIT0gTklMKQorCQl0YWItPnJl d3JpdGUgfD0gQVRfUkVXUklURV9DT0xVTU5fUkVXUklURTsKKwogCS8qCiAJICogTm93IHNjYW4g Zm9yIGRlcGVuZGVuY2llcyBvZiB0aGlzIGNvbHVtbiBvbiBvdGhlciB0aGluZ3MuICBUaGUgb25s eQogCSAqIHRoaW5ncyB3ZSBzaG91bGQgZmluZCBhcmUgdGhlIGRlcGVuZGVuY3kgb24gdGhlIGNv bHVtbiBkYXRhdHlwZSBhbmQKQEAgLTIwNTIxLDYgKzIwNTU1LDcgQEAgQXR0YWNoUGFydGl0aW9u RW5zdXJlSW5kZXhlcyhMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGF0dGFj aHJlbCkKIAkJQXR0ck1hcCAgICAqYXR0bWFwOwogCQlib29sCQlmb3VuZCA9IGZhbHNlOwogCQlP aWQJCQljb25zdHJhaW50T2lkOworCQlib29sCQlwYXJlbnRfaWR4X3ZpcnR1YWw7CiAKIAkJLyoK IAkJICogSWdub3JlIGluZGV4ZXMgaW4gdGhlIHBhcnRpdGlvbmVkIHRhYmxlIG90aGVyIHRoYW4g cGFydGl0aW9uZWQKQEAgLTIwNTM0LDkgKzIwNTY5LDE5IEBAIEF0dGFjaFBhcnRpdGlvbkVuc3Vy ZUluZGV4ZXMoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBhdHRhY2hyZWwp CiAKIAkJLyogY29uc3RydWN0IGFuIGluZGV4aW5mbyB0byBjb21wYXJlIGV4aXN0aW5nIGluZGV4 ZXMgYWdhaW5zdCAqLwogCQlpbmZvID0gQnVpbGRJbmRleEluZm8oaWR4UmVsKTsKKwkJcGFyZW50 X2lkeF92aXJ0dWFsID0gSXNJbmRleE92ZXJWaXJ0dWFsR2VuZXJhdGVkKGluZm8pOwogCQlhdHRt YXAgPSBidWlsZF9hdHRybWFwX2J5X25hbWUoUmVsYXRpb25HZXREZXNjcihhdHRhY2hyZWwpLAog CQkJCQkJCQkJICAgUmVsYXRpb25HZXREZXNjcihyZWwpLAogCQkJCQkJCQkJICAgZmFsc2UpOwor CisJCS8qCisJCSAqIFRoZSBhdHRhY2ggcGFydGl0aW9uIGRvbid0IGhhdmUgaW5kZXgsIGJ1dCBw YXJlbnQgaGF2ZSBpbmRleCBvdmVyCisJCSAqIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbi4gV2Ug bmVlZCBlbnN1cmUgZ2VuZXJhdGVkIGV4cHJlc3Npb24gb24KKwkJICogcGFyZW50IHRoYXQgaW5k ZXggd2FzIGJhc2VkIG9uIGl0IG1hdGNoIHdpdGggYXR0YWNoIHBhcnRpdGlvbi4KKwkJKi8KKwkJ aWYgKGF0dGFjaFJlbElkeHMgPT0gTklMICYmIHBhcmVudF9pZHhfdmlydHVhbCkKKwkJCWNoZWNr X2dlbmVyYXRlZF9pbmRleGF0dHJzKGluZm8sIHJlbCwgYXR0YWNocmVsLCBhdHRtYXAsIHRydWUp OworCiAJCWNvbnN0cmFpbnRPaWQgPSBnZXRfcmVsYXRpb25faWR4X2NvbnN0cmFpbnRfb2lkKFJl bGF0aW9uR2V0UmVsaWQocmVsKSwgaWR4KTsKIAogCQkvKgpAQCAtMjA1OTUsNiArMjA2NDAsMjIg QEAgQXR0YWNoUGFydGl0aW9uRW5zdXJlSW5kZXhlcyhMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiBy ZWwsIFJlbGF0aW9uIGF0dGFjaHJlbCkKIAkJCQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwog CQkJCWJyZWFrOwogCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWJvb2wJCWF0dGFjaF9pZHhfdmly dHVhbDsKKwkJCQlhdHRhY2hfaWR4X3ZpcnR1YWwgPSBJc0luZGV4T3ZlclZpcnR1YWxHZW5lcmF0 ZWQoYXR0YWNoSW5mb3NbaV0pOworCisJCQkJLyogc2hvdWxkIGZhaWwuIGRpZmZlcmVudCBpbmRl eCBkZWZpbml0aW9uIGNhbm5vdCBtZXJnZSAqLworCQkJCWlmIChhdHRhY2hfaWR4X3ZpcnR1YWwg fHwgcGFyZW50X2lkeF92aXJ0dWFsKQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCWVycmNv ZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJCQkJZXJybXNnKCJjYW5ub3QgYXR0 YWNoIHRhYmxlIFwiJXNcIiBhcyBwYXJ0aXRpb24gb2YgcGFydGl0aW9uZWQgdGFibGUgXCIlc1wi IiwKKwkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGF0dGFjaHJlbCksCisJCQkJCQkJ CQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSwKKwkJCQkJCQllcnJkZXRhaWwoIlRoZSBp bmRleCBkZWZpbml0aW9uIG9mIHBhcnRpdGlvbmVkIHRhYmxlIFwiJXNcIiBkb2VzIG5vdCBtYXRj aCB0YWJsZSBcIiVzXCIiLAorCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwK KwkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGF0dGFjaHJlbCkpKTsKKwkJCX0KIAkJ fQogCiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5j IGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwppbmRleCA2MjAxNTQzMWZkZi4u M2M3YWYyNjA1YjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21k LmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwpAQCAtMTY4MSw2ICsx NjgxLDcgQEAgZ2VuZXJhdGVDbG9uZWRJbmRleFN0bXQoUmFuZ2VWYXIgKmhlYXBSZWwsIFJlbGF0 aW9uIHNvdXJjZV9pZHgsCiAJRm9ybV9wZ19hbQlhbXJlYzsKIAlvaWR2ZWN0b3IgICppbmRjb2xs YXRpb247CiAJb2lkdmVjdG9yICAqaW5kY2xhc3M7CisJaW50MnZlY3RvcgkqaW5kZ2Vua2V5Owog CUluZGV4U3RtdCAgKmluZGV4OwogCUxpc3QJICAgKmluZGV4cHJzOwogCUxpc3RDZWxsICAgKmlu ZGV4cHJfaXRlbTsKQEAgLTE2ODgsNiArMTY4OSw3IEBAIGdlbmVyYXRlQ2xvbmVkSW5kZXhTdG10 KFJhbmdlVmFyICpoZWFwUmVsLCBSZWxhdGlvbiBzb3VyY2VfaWR4LAogCWludAkJCWtleW5vOwog CU9pZAkJCWtleWNvbHR5cGU7CiAJRGF0dW0JCWRhdHVtOworCURhdHVtCQlpbmRnZW5rZXlEYXR1 bTsKIAlib29sCQlpc251bGw7CiAKIAlpZiAoY29uc3RyYWludE9pZCkKQEAgLTE3MjMsNiArMTcy NSwxMSBAQCBnZW5lcmF0ZUNsb25lZEluZGV4U3RtdChSYW5nZVZhciAqaGVhcFJlbCwgUmVsYXRp b24gc291cmNlX2lkeCwKIAlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0ck5vdE51bGwoSU5ERVhSRUxJ RCwgaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGNsYXNzKTsKIAlpbmRjbGFzcyA9IChvaWR2ZWN0 b3IgKikgRGF0dW1HZXRQb2ludGVyKGRhdHVtKTsKIAorCS8qIEV4dHJhY3QgaW5kYXR0cmdlbmVy YXRlZCBmcm9tIHRoZSBwZ19pbmRleCB0dXBsZSAqLworCWluZGdlbmtleURhdHVtID0gU3lzQ2Fj aGVHZXRBdHRyTm90TnVsbChJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkJCUFudW1fcGdf aW5kZXhfaW5kYXR0cmdlbmVyYXRlZCk7CisJaW5kZ2Vua2V5ID0gKGludDJ2ZWN0b3IgKikgRGF0 dW1HZXRQb2ludGVyKGluZGdlbmtleURhdHVtKTsKKwogCS8qIEJlZ2luIGJ1aWxkaW5nIHRoZSBJ bmRleFN0bXQgKi8KIAlpbmRleCA9IG1ha2VOb2RlKEluZGV4U3RtdCk7CiAJaW5kZXgtPnJlbGF0 aW9uID0gaGVhcFJlbDsKQEAgLTE4NTQsMTMgKzE4NjEsMjkgQEAgZ2VuZXJhdGVDbG9uZWRJbmRl eFN0bXQoUmFuZ2VWYXIgKmhlYXBSZWwsIFJlbGF0aW9uIHNvdXJjZV9pZHgsCiAJewogCQlJbmRl eEVsZW0gICppcGFyYW07CiAJCUF0dHJOdW1iZXIJYXR0bnVtID0gaWR4cmVjLT5pbmRrZXkudmFs dWVzW2tleW5vXTsKKwkJQXR0ck51bWJlcglnZW5udW0gPSBpbmRnZW5rZXktPnZhbHVlc1trZXlu b107CiAJCUZvcm1fcGdfYXR0cmlidXRlIGF0dHIgPSBUdXBsZURlc2NBdHRyKFJlbGF0aW9uR2V0 RGVzY3Ioc291cmNlX2lkeCksCiAJCQkJCQkJCQkJCSAgIGtleW5vKTsKIAkJaW50MTYJCW9wdCA9 IHNvdXJjZV9pZHgtPnJkX2luZG9wdGlvbltrZXlub107CiAKIAkJaXBhcmFtID0gbWFrZU5vZGUo SW5kZXhFbGVtKTsKIAotCQlpZiAoQXR0cmlidXRlTnVtYmVySXNWYWxpZChhdHRudW0pKQorCQlp ZiAoQXR0cmlidXRlTnVtYmVySXNWYWxpZChnZW5udW0pKQorCQl7CisJCQkvKgorCQkJICogaW5k ZXggb3ZlciB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gd2FzIGNvbnZlcnRlZCBpbnRvIGEKKwkJ CSAqIGV4cHJlc3Npb24gaW5kZXgsIGJ1dCB3ZSBuZWVkIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGF0 dHJpYnV0ZQorCQkJICogbnVtYmVyIGZvciByZWNyZWF0ZSBpdC4KKwkJCSovCisJCQljaGFyCSAg ICp2aXJ0dWFsX2F0dG5hbWU7CisKKwkJCXZpcnR1YWxfYXR0bmFtZSA9IGdldF9hdHRuYW1lKGlu ZHJlbGlkLCBnZW5udW0sIGZhbHNlKTsKKwkJCWtleWNvbHR5cGUgPSBnZXRfYXR0dHlwZShpbmRy ZWxpZCwgZ2VubnVtKTsKKworCQkJaXBhcmFtLT5uYW1lID0gdmlydHVhbF9hdHRuYW1lOworCQkJ aXBhcmFtLT5leHByID0gTlVMTDsKKwkJfQorCQllbHNlIGlmIChBdHRyaWJ1dGVOdW1iZXJJc1Zh bGlkKGF0dG51bSkpCiAJCXsKIAkJCS8qIFNpbXBsZSBpbmRleCBjb2x1bW4gKi8KIAkJCWNoYXIJ ICAgKmF0dG5hbWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggOWU5MGFjZWRiOTEu LmFlM2RiODYyOTRkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC0xMjkwLDkgKzEy OTAsMTEgQEAgcGdfZ2V0X2luZGV4ZGVmX3dvcmtlcihPaWQgaW5kZXhyZWxpZCwgaW50IGNvbG5v LAogCURhdHVtCQlpbmRjb2xsRGF0dW07CiAJRGF0dW0JCWluZGNsYXNzRGF0dW07CiAJRGF0dW0J CWluZG9wdGlvbkRhdHVtOworCURhdHVtCQlpbmRnZW5rZXlEYXR1bTsKIAlvaWR2ZWN0b3IgICpp bmRjb2xsYXRpb247CiAJb2lkdmVjdG9yICAqaW5kY2xhc3M7CiAJaW50MnZlY3RvciAqaW5kb3B0 aW9uOworCWludDJ2ZWN0b3IgKmluZGdlbmtleTsKIAlTdHJpbmdJbmZvRGF0YSBidWY7CiAJY2hh cgkgICAqc3RyOwogCWNoYXIJICAgKnNlcDsKQEAgLTEzMjUsNiArMTMyNywxMCBAQCBwZ19nZXRf aW5kZXhkZWZfd29ya2VyKE9pZCBpbmRleHJlbGlkLCBpbnQgY29sbm8sCiAJCQkJCQkJCQkJCUFu dW1fcGdfaW5kZXhfaW5kb3B0aW9uKTsKIAlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1 bUdldFBvaW50ZXIoaW5kb3B0aW9uRGF0dW0pOwogCisJaW5kZ2Vua2V5RGF0dW0gPSBTeXNDYWNo ZUdldEF0dHJOb3ROdWxsKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCQkJQW51bV9wZ19p bmRleF9pbmRhdHRyZ2VuZXJhdGVkKTsKKwlpbmRnZW5rZXkgPSAoaW50MnZlY3RvciAqKSBEYXR1 bUdldFBvaW50ZXIoaW5kZ2Vua2V5RGF0dW0pOworCiAJLyoKIAkgKiBGZXRjaCB0aGUgcGdfY2xh c3MgdHVwbGUgb2YgdGhlIGluZGV4IHJlbGF0aW9uCiAJICovCkBAIC0xMzk4LDYgKzE0MDQsNyBA QCBwZ19nZXRfaW5kZXhkZWZfd29ya2VyKE9pZCBpbmRleHJlbGlkLCBpbnQgY29sbm8sCiAJZm9y IChrZXlubyA9IDA7IGtleW5vIDwgaWR4cmVjLT5pbmRuYXR0czsga2V5bm8rKykKIAl7CiAJCUF0 dHJOdW1iZXIJYXR0bnVtID0gaWR4cmVjLT5pbmRrZXkudmFsdWVzW2tleW5vXTsKKwkJQXR0ck51 bWJlcglnZW5udW0gPSBpbmRnZW5rZXktPnZhbHVlc1trZXlub107CiAJCU9pZAkJCWtleWNvbHR5 cGU7CiAJCU9pZAkJCWtleWNvbGNvbGxhdGlvbjsKIApAQCAtMTQxOCw3ICsxNDI1LDI2IEBAIHBn X2dldF9pbmRleGRlZl93b3JrZXIoT2lkIGluZGV4cmVsaWQsIGludCBjb2xubywKIAkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmJ1Ziwgc2VwKTsKIAkJc2VwID0gIiwgIjsKIAotCQlpZiAoYXR0 bnVtICE9IDApCisJCWlmICghQXR0cmlidXRlTnVtYmVySXNWYWxpZChhdHRudW0pICYmIEF0dHJp YnV0ZU51bWJlcklzVmFsaWQoZ2VubnVtKSkKKwkJCWluZGV4cHJfaXRlbSA9IGxuZXh0KGluZGV4 cHJzLCBpbmRleHByX2l0ZW0pOworCisJCWlmIChBdHRyaWJ1dGVOdW1iZXJJc1ZhbGlkKGdlbm51 bSkpCisJCXsKKwkJCS8qCisJCQkgKiBUaGlzIGluZGV4IGlzIGNyZWF0ZWQgb24gdmlydHVhbCBn ZW5lcmF0ZWQgY29sdW1uCisJCQkqLworCQkJY2hhcgkgICAqdmlydHVhbF9hdHRuYW1lOworCQkJ aW50MzIJCWdlbmV5Y29sdHlwbW9kOworCisJCQl2aXJ0dWFsX2F0dG5hbWUgPSBnZXRfYXR0bmFt ZShpbmRyZWxpZCwgZ2VubnVtLCBmYWxzZSk7CisJCQlpZiAoIWNvbG5vIHx8IGNvbG5vID09IGtl eW5vICsgMSkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsIHF1b3RlX2lkZW50aWZp ZXIodmlydHVhbF9hdHRuYW1lKSk7CisKKwkJCWdldF9hdHR0eXBldHlwbW9kY29sbChpbmRyZWxp ZCwgZ2VubnVtLAorCQkJCQkJCQkgICZrZXljb2x0eXBlLCAmZ2VuZXljb2x0eXBtb2QsCisJCQkJ CQkJCSAgJmtleWNvbGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZSBpZiAoYXR0bnVtICE9IDApCiAJ CXsKIAkJCS8qIFNpbXBsZSBpbmRleCBjb2x1bW4gKi8KIAkJCWNoYXIJICAgKmF0dG5hbWU7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggYi9zcmMvaW5jbHVkZS9jYXRh bG9nL2luZGV4LmgKaW5kZXggNGRhYThiZWY1ZWUuLmE3ZTkzZjNhMTA3IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRl eC5oCkBAIC0xMjYsNiArMTI2LDcgQEAgZXh0ZXJuIEluZGV4SW5mbyAqQnVpbGRJbmRleEluZm8o UmVsYXRpb24gaW5kZXgpOwogCiBleHRlcm4gSW5kZXhJbmZvICpCdWlsZER1bW15SW5kZXhJbmZv KFJlbGF0aW9uIGluZGV4KTsKIAorZXh0ZXJuIGJvb2wgSXNJbmRleE92ZXJWaXJ0dWFsR2VuZXJh dGVkKGNvbnN0IEluZGV4SW5mbyAqaW5mbyk7CiBleHRlcm4gYm9vbCBDb21wYXJlSW5kZXhJbmZv KGNvbnN0IEluZGV4SW5mbyAqaW5mbzEsIGNvbnN0IEluZGV4SW5mbyAqaW5mbzIsCiAJCQkJCQkJ IGNvbnN0IE9pZCAqY29sbGF0aW9uczEsIGNvbnN0IE9pZCAqY29sbGF0aW9uczIsCiAJCQkJCQkJ IGNvbnN0IE9pZCAqb3BmYW1pbGllczEsIGNvbnN0IE9pZCAqb3BmYW1pbGllczIsCkBAIC0xNzUs NiArMTc2LDExIEBAIGV4dGVybiB2b2lkIFJlc3RvcmVSZWluZGV4U3RhdGUoY29uc3Qgdm9pZCAq cmVpbmRleHN0YXRlKTsKIAogZXh0ZXJuIHZvaWQgSW5kZXhTZXRQYXJlbnRJbmRleChSZWxhdGlv biBwYXJ0aXRpb25JZHgsIE9pZCBwYXJlbnRPaWQpOwogCitleHRlcm4gdm9pZCBjaGVja19nZW5l cmF0ZWRfaW5kZXhhdHRycyhjb25zdCBJbmRleEluZm8gKnJlbF9pZHhfaW5mbywKKwkJCQkJCQkJ CSAgIFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCSAgIFJlbGF0aW9uIGNoaWxkcmVsLAorCQkJCQkJ CQkJICAgY29uc3QgQXR0ck1hcCAqYXR0bWFwLAorCQkJCQkJCQkJICAgYm9vbAlpc19hdHRhY2gp OwogCiAvKgogICogaXRlbXB0cl9lbmNvZGUgLSBFbmNvZGUgSXRlbVBvaW50ZXIgYXMgaW50NjQv aW50OApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmRleC5oIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19pbmRleC5oCmluZGV4IDQzOTJiOWQyMjFkLi43ZWQ3NGE1OTNhNCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmRleC5oCisrKyBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfaW5kZXguaApAQCAtNTQsNiArNTQsNyBAQCBDQVRBTE9HKHBnX2luZGV4 LDI2MTAsSW5kZXhSZWxhdGlvbklkKSBCS0lfU0NIRU1BX01BQ1JPCiAJb2lkdmVjdG9yCWluZGNs YXNzIEJLSV9MT09LVVAocGdfb3BjbGFzcykgQktJX0ZPUkNFX05PVF9OVUxMOyAvKiBvcGNsYXNz IGlkZW50aWZpZXJzICovCiAJaW50MnZlY3RvcglpbmRvcHRpb24gQktJX0ZPUkNFX05PVF9OVUxM OwkvKiBwZXItY29sdW1uIGZsYWdzCiAJCQkJCQkJCQkJCQkgKiAoQU0tc3BlY2lmaWMgbWVhbmlu Z3MpICovCisJaW50MnZlY3RvcglpbmRhdHRyZ2VuZXJhdGVkIEJLSV9GT1JDRV9OT1RfTlVMTDsg LyogdGhlIGF0dHJpYnV0ZSBvZiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4/ICovCiAJcGdfbm9k ZV90cmVlIGluZGV4cHJzOwkJLyogZXhwcmVzc2lvbiB0cmVlcyBmb3IgaW5kZXggYXR0cmlidXRl cyB0aGF0CiAJCQkJCQkJCSAqIGFyZSBub3Qgc2ltcGxlIGNvbHVtbiByZWZlcmVuY2VzOyBvbmUg Zm9yCiAJCQkJCQkJCSAqIGVhY2ggemVybyBlbnRyeSBpbiBpbmRrZXlbXSAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVj bm9kZXMuaAppbmRleCA1YjZjYWRiNWE2Yy4uZWE0MjQwYjM2ZTQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oCkBAIC0xOTYsNiArMTk2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhJbmZvCiAJaW50CQkJ aWlfTnVtSW5kZXhBdHRyczsJLyogdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gaW5kZXggKi8K IAlpbnQJCQlpaV9OdW1JbmRleEtleUF0dHJzOwkvKiBudW1iZXIgb2Yga2V5IGNvbHVtbnMgaW4g aW5kZXggKi8KIAlBdHRyTnVtYmVyCWlpX0luZGV4QXR0ck51bWJlcnNbSU5ERVhfTUFYX0tFWVNd OworCUF0dHJOdW1iZXIJaWlfSW5kZXhBdHRyR2VuZXJhdGVkTnVtYmVyc1tJTkRFWF9NQVhfS0VZ U107IC8qIFhYWCBtb3JlIGJldHRlciBjb21tZW50cyAqLwogCUxpc3QJICAgKmlpX0V4cHJlc3Np b25zOyAvKiBsaXN0IG9mIEV4cHIgKi8KIAlMaXN0CSAgICppaV9FeHByZXNzaW9uc1N0YXRlOwkv KiBsaXN0IG9mIEV4cHJTdGF0ZSAqLwogCUxpc3QJICAgKmlpX1ByZWRpY2F0ZTsJLyogbGlzdCBv ZiBFeHByICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zhc3RfZGVm YXVsdC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zhc3RfZGVmYXVsdC5vdXQKaW5k ZXggY2NiY2RmODQwM2YuLmVmMTlmNjY3Y2MxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2Zhc3RfZGVmYXVsdC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9mYXN0X2RlZmF1bHQub3V0CkBAIC03MCw2ICs3MCwxNCBAQCBOT1RJQ0U6ICByZXdyaXRpbmcg dGFibGUgaGFzX3ZvbGF0aWxlIGZvciByZWFzb24gNAogLS0gc3RvcmVkIGdlbmVyYXRlZCBjb2x1 bW5zIG5lZWQgYSByZXdyaXRlCiBBTFRFUiBUQUJMRSBoYXNfdm9sYXRpbGUgQUREIGNvbDcgaW50 IEdFTkVSQVRFRCBBTFdBWVMgQVMgKDU1KSBzdG9yZWQ7CiBOT1RJQ0U6ICByZXdyaXRpbmcgdGFi bGUgaGFzX3ZvbGF0aWxlIGZvciByZWFzb24gMgorLS0gaWYgdGhlcmUgaXMgYW55IGluZGV4IG92 ZXIgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucywKKy0tIGNoYW5nZSBnZW5lcmF0aW9uIGV4cHJl c3Npb24gbmVlZCByZXdyaXRlCitDUkVBVEUgSU5ERVggb24gaGFzX3ZvbGF0aWxlKGNvbDYpOwor QUxURVIgVEFCTEUgaGFzX3ZvbGF0aWxlIEFMVEVSIENPTFVNTiBjb2w2IFNFVCBFWFBSRVNTSU9O IEFTIChjb2wxICogMyk7CitOT1RJQ0U6ICByZXdyaXRpbmcgdGFibGUgaGFzX3ZvbGF0aWxlIGZv ciByZWFzb24gMgorLS0gdGFibGUgcmV3cml0ZSBhZ2Fpbi4KK0FMVEVSIFRBQkxFIGhhc192b2xh dGlsZSBBTFRFUiBDT0xVTU4gY29sNiBTRVQgREFUQSBUWVBFIElOVDg7CitOT1RJQ0U6ICByZXdy aXRpbmcgdGFibGUgaGFzX3ZvbGF0aWxlIGZvciByZWFzb24gNAogLS0gVGVzdCBhIGxhcmdlIHNh bXBsZSBvZiBkaWZmZXJlbnQgZGF0YXR5cGVzCiBDUkVBVEUgVEFCTEUgVChwayBJTlQgTk9UIE5V TEwgUFJJTUFSWSBLRVksIGNfaW50IElOVCBERUZBVUxUIDEpOwogU0VMRUNUIHNldCgndCcpOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFsLm91dAppbmRl eCAyNmJiZTFlOWMzMS4uZDM1MjVhMTM1MmUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0CkBAIC03NDIsMzAgKzc0MiwxNzUgQEAgRVJST1I6 ICBwcmltYXJ5IGtleXMgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBv cnRlZAogLS1JTlNFUlQgSU5UTyBndGVzdDIyYiBWQUxVRVMgKDIpOwogLS1JTlNFUlQgSU5UTyBn dGVzdDIyYiBWQUxVRVMgKDIpOwogLS0gaW5kZXhlcwotQ1JFQVRFIFRBQkxFIGd0ZXN0MjJjIChh IGludCwgYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSAqIDIpIFZJUlRVQUwpOwotLS1DUkVB VEUgSU5ERVggZ3Rlc3QyMmNfYl9pZHggT04gZ3Rlc3QyMmMgKGIpOworQ1JFQVRFIFRBQkxFIGd0 ZXN0cGFydGVkIChiIGludGVnZXIsIGMgaW50ZWdlcixhIGludGVnZXIgR0VORVJBVEVEIEFMV0FZ UyBBUyAoYysxKSlQQVJUSVRJT04gQlkgUkFOR0UgKGIpOworQ1JFQVRFIFRBQkxFIGd0ZXN0cGFy dDEgKGIgaW50ZWdlciwgYyBpbnRlZ2VyLCBhIGludGVnZXIgR0VORVJBVEVEIEFMV0FZUyBBUyAo YykpOworQ1JFQVRFIFRBQkxFIGd0ZXN0cGFydDIgKGIgaW50ZWdlciwgYSBpbnRlZ2VyIEdFTkVS QVRFRCBBTFdBWVMgQVMgKGMrMSksIGMgaW50ZWdlcik7CitDUkVBVEUgVEFCTEUgZ3Rlc3RwYXJ0 MyAoYiBpbnRlZ2VyLCBjIGludGVnZXIsIGEgaW50ZWdlciBHRU5FUkFURUQgQUxXQVlTIEFTIChj KSk7CitBTFRFUiBUQUJMRSBndGVzdHBhcnRlZCBBVFRBQ0ggUEFSVElUSU9OIGd0ZXN0cGFydDMg Zm9yIHZhbHVlcyBmcm9tICgxKSB0byAoMTApOworLS1lcnJvci4gcGFydGl0aW9uZWQgYW5kIHBh cnRpdGlvbiBoYXZlIGRpZmZlcmVudCBnZW5lcmF0aW9uIGV4cHJlc3Npb24sIGNhbiBub3QKKy0t YnVpbGQgaW5kZXggb24gaXQuCitDUkVBVEUgSU5ERVggZ3Rlc3RwYXJ0ZWRfYV9pZHhfZXJyb3Ig b24gZ3Rlc3RwYXJ0ZWQoYSk7IC0tZXJyb3IKK0VSUk9SOiAgY2Fubm90IGNyZWF0ZSBpbmRleCBv biBwYXJ0aXRpb25lZCB0YWJsZSAiZ3Rlc3RwYXJ0ZWQiCitERVRBSUw6ICBUaGUgaW5kZXggZGVm aW5pdGlvbiBvZiBwYXJ0aXRpb25lZCB0YWJsZSAiZ3Rlc3RwYXJ0ZWQiIGRvZXMgbm90IG1hdGNo IHRhYmxlICJndGVzdHBhcnQzIgorQUxURVIgVEFCTEUgZ3Rlc3RwYXJ0ZWQgREVUQUNIIFBBUlRJ VElPTiBndGVzdHBhcnQzOworQ1JFQVRFIElOREVYIGd0ZXN0cGFydDFfYV9pZHggb24gZ3Rlc3Rw YXJ0MShhKTsKK0NSRUFURSBJTkRFWCBndGVzdHBhcnQyX2FfaWR4IG9uIGd0ZXN0cGFydDIoYSk7 CitDUkVBVEUgSU5ERVggZ3Rlc3RwYXJ0Ml9hX2lkeF9jb3B5IG9uIGd0ZXN0cGFydDIoYSk7CitD UkVBVEUgSU5ERVggZ3Rlc3RwYXJ0ZWRfYV9pZHggb24gZ3Rlc3RwYXJ0ZWQoYSk7CistLWVycm9y LiBpbmRleCBvdmVyIGRpZmZlcmVudCBnZW5lcmF0aW9uIGV4cHJlc3Npb24gc2hvdWxkIG5vdCBh bGxvd2VkCitBTFRFUiBUQUJMRSBndGVzdHBhcnRlZCBBVFRBQ0ggUEFSVElUSU9OIGd0ZXN0cGFy dDEgZm9yIHZhbHVlcyBmcm9tICgxKSB0byAoMTApOyAtLWVycm9yCitFUlJPUjogIGNhbm5vdCBh dHRhY2ggdGFibGUgImd0ZXN0cGFydDEiIGFzIHBhcnRpdGlvbiBvZiBwYXJ0aXRpb25lZCB0YWJs ZSAiZ3Rlc3RwYXJ0ZWQiCitERVRBSUw6ICBUaGUgaW5kZXggZGVmaW5pdGlvbiBvZiBwYXJ0aXRp b25lZCB0YWJsZSAiZ3Rlc3RwYXJ0ZWQiIGRvZXMgbm90IG1hdGNoIHRhYmxlICJndGVzdHBhcnQx IgorQUxURVIgVEFCTEUgZ3Rlc3RwYXJ0ZWQgQVRUQUNIIFBBUlRJVElPTiBndGVzdHBhcnQyIGZv ciB2YWx1ZXMgZnJvbSAoMSkgdG8gKDEwKTsgLS1vaworU0VMRUNUICogRlJPTSBwZ19wYXJ0aXRp b25fdHJlZSgnZ3Rlc3RwYXJ0ZWRfYV9pZHgnOjpyZWdjbGFzcyk7CisgICAgICAgcmVsaWQgICAg ICAgfCAgICBwYXJlbnRyZWxpZCAgICB8IGlzbGVhZiB8IGxldmVsIAorLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0KKyBndGVzdHBhcnRlZF9h X2lkeCB8ICAgICAgICAgICAgICAgICAgIHwgZiAgICAgIHwgICAgIDAKKyBndGVzdHBhcnQyX2Ff aWR4ICB8IGd0ZXN0cGFydGVkX2FfaWR4IHwgdCAgICAgIHwgICAgIDEKKygyIHJvd3MpCisKK0FM VEVSIElOREVYIGd0ZXN0cGFydGVkX2FfaWR4IEFUVEFDSCBQQVJUSVRJT04gZ3Rlc3RwYXJ0Ml9h X2lkeDsgLS1vaworQUxURVIgSU5ERVggZ3Rlc3RwYXJ0ZWRfYV9pZHggQVRUQUNIIFBBUlRJVElP TiBndGVzdHBhcnQyX2FfaWR4X2NvcHk7IC0tZXJyb3IKK0VSUk9SOiAgY2Fubm90IGF0dGFjaCBp bmRleCAiZ3Rlc3RwYXJ0Ml9hX2lkeF9jb3B5IiBhcyBhIHBhcnRpdGlvbiBvZiBpbmRleCAiZ3Rl c3RwYXJ0ZWRfYV9pZHgiCitERVRBSUw6ICBBbm90aGVyIGluZGV4IGlzIGFscmVhZHkgYXR0YWNo ZWQgZm9yIHBhcnRpdGlvbiAiZ3Rlc3RwYXJ0MiIuCitDUkVBVEUgSU5ERVggZ3Rlc3RwYXJ0ZWRf YV9pZHhfMSBvbiBndGVzdHBhcnRlZChhKTsKKy0tbm93IGluZGV4IGd0ZXN0cGFydDJfYV9pZHhf Y29weSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwYXJ0aXRpb24gdHJlZS4KK1NFTEVDVCAqIEZST00g cGdfcGFydGl0aW9uX3RyZWUoJ2d0ZXN0cGFydGVkX2FfaWR4XzEnOjpyZWdjbGFzcyk7CisgICAg ICAgICByZWxpZCAgICAgICAgIHwgICAgIHBhcmVudHJlbGlkICAgICB8IGlzbGVhZiB8IGxldmVs IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t Ky0tLS0tLS0KKyBndGVzdHBhcnRlZF9hX2lkeF8xICAgfCAgICAgICAgICAgICAgICAgICAgIHwg ZiAgICAgIHwgICAgIDAKKyBndGVzdHBhcnQyX2FfaWR4X2NvcHkgfCBndGVzdHBhcnRlZF9hX2lk eF8xIHwgdCAgICAgIHwgICAgIDEKKygyIHJvd3MpCisKKy0tY3JlYXRlIHRhYmxlIGxpa2Ugc2hv dWxkIHdvcmsganVzdCBmaW5lCitDUkVBVEUgVEFCTEUgZ3Rlc3RwYXJ0ZWRfbGlrZSAoTElLRSBn dGVzdHBhcnRlZCBpbmNsdWRpbmcgYWxsKTsKK1xkIGd0ZXN0cGFydGVkX2xpa2UKKyAgICAgICAg ICAgVGFibGUgImdlbmVyYXRlZF92aXJ0dWFsX3Rlc3RzLmd0ZXN0cGFydGVkX2xpa2UiCisgQ29s dW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgICAgICAgICAgIERlZmF1bHQg ICAgICAgICAgIAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBiICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAg IHwgICAgICAgICAgfCAKKyBjICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAg fCAKKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCBnZW5lcmF0ZWQg YWx3YXlzIGFzIChjICsgMSkKK0luZGV4ZXM6CisgICAgImd0ZXN0cGFydGVkX2xpa2VfYV9pZHgi IGJ0cmVlIChhKQorICAgICJndGVzdHBhcnRlZF9saWtlX2FfaWR4MSIgYnRyZWUgKGEpCisKK0NS RUFURSBUQUJMRSBndGVzdDIyYyAoYSBpbnQsIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGEg KiAyKSBWSVJUVUFMCisgICAgICAgICAgICAgICAgICAgICAgLGMgaW50IEdFTkVSQVRFRCBBTFdB WVMgQVMgKDExKSBWSVJUVUFMCisgICAgICAgICAgICAgICAgICAgICAgLGQgaW50IEdFTkVSQVRF RCBBTFdBWVMgQVMgKGEgKjMpIFZJUlRVQUwKKyAgICAgICAgICAgICAgICAgICAgICAsZSBpbnQ0 cmFuZ2UgR0VORVJBVEVEIEFMV0FZUyBBUyAoaW50NHJhbmdlKGEsIGErMTApKSBWSVJUVUFMCisg ICAgICAgICAgICAgICAgICAgICAgLGYgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGEpIFZJUlRV QUwpOworQ1JFQVRFIElOREVYIGd0ZXN0MjJjX2JfaWR4IE9OIGd0ZXN0MjJjIChiKTsKKy0tdmFy aWFibGUgZnJlZSBnZW5lcmF0aW9uIGV4cHJlc3Npb24gaGF2ZSBubyBwcmF0aWNhbCB1c2FnZSwg c28gZXJyb3Igb3V0LgorQ1JFQVRFIElOREVYIGd0ZXN0MjJjX2NfaWR4IE9OIGd0ZXN0MjJjIChj KTsKK0VSUk9SOiAgY2FuIG5vdCBjcmVhdGUgaW5kZXggYmFzZWQgb24gdmFyaWFibGUgZnJlZSBn ZW5lcmF0aW9uIGV4cHJlc3Npb24KK0NSRUFURSBJTkRFWCBndGVzdDIyY19kX2lkeCBPTiBndGVz dDIyYyBVU0lORyBoYXNoKGQpOworQ1JFQVRFIElOREVYIGd0ZXN0MjJjX2VfaWR4IE9OIGd0ZXN0 MjJjIFVTSU5HIGdpc3QoZSk7CistLWVycm9yLiBpbmNsdWRlIGNvbHVtbnMgYXJlIG5vdCBzdXBw b3J0ZWQuCitDUkVBVEUgSU5ERVggZ3Rlc3QyMmNfaWR4MSBPTiBndGVzdDIyYyBVU0lORyBidHJl ZShhKSBpbmNsdWRlIChiLGMpOworRVJST1I6ICB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gYXJl IG5vdCBzdXBwb3J0ZWQgaW4gaW5kZXggaW5jbHVkZWQgY29sdW1ucworQ1JFQVRFIElOREVYIGd0 ZXN0MjJjX2lkeDEgT04gZ3Rlc3QyMmMgVVNJTkcgYnRyZWUoYSkgaW5jbHVkZSAoZik7CitFUlJP UjogIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleCBp bmNsdWRlZCBjb2x1bW5zCiAtLUNSRUFURSBJTkRFWCBndGVzdDIyY19leHByX2lkeCBPTiBndGVz dDIyYyAoKGIgKiAzKSk7CiAtLUNSRUFURSBJTkRFWCBndGVzdDIyY19wcmVkX2lkeCBPTiBndGVz dDIyYyAoYSkgV0hFUkUgYiA+IDA7Ci0tLVxkIGd0ZXN0MjJjCi0tLUlOU0VSVCBJTlRPIGd0ZXN0 MjJjIFZBTFVFUyAoMSksICgyKSwgKDMpOwotLS1TRVQgZW5hYmxlX3NlcXNjYW4gVE8gb2ZmOwot LS1TRVQgZW5hYmxlX2JpdG1hcHNjYW4gVE8gb2ZmOwotLS1FWFBMQUlOIChDT1NUUyBPRkYpIFNF TEVDVCAqIEZST00gZ3Rlc3QyMmMgV0hFUkUgYiA9IDQ7Ci0tLVNFTEVDVCAqIEZST00gZ3Rlc3Qy MmMgV0hFUkUgYiA9IDQ7CitcZCBndGVzdDIyYworICAgICAgICAgICAgICAgICAgICAgICAgVGFi bGUgImdlbmVyYXRlZF92aXJ0dWFsX3Rlc3RzLmd0ZXN0MjJjIgorIENvbHVtbiB8ICAgVHlwZSAg ICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgICAgICAgICAgICAgICAgICBEZWZhdWx0ICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGEgICAgICB8 IGludGVnZXIgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYiAgICAgIHwgaW50ZWdlciAg IHwgICAgICAgICAgIHwgICAgICAgICAgfCBnZW5lcmF0ZWQgYWx3YXlzIGFzIChhICogMikKKyBj ICAgICAgfCBpbnRlZ2VyICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IGdlbmVyYXRlZCBhbHdh eXMgYXMgKDExKQorIGQgICAgICB8IGludGVnZXIgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwg Z2VuZXJhdGVkIGFsd2F5cyBhcyAoYSAqIDMpCisgZSAgICAgIHwgaW50NHJhbmdlIHwgICAgICAg ICAgIHwgICAgICAgICAgfCBnZW5lcmF0ZWQgYWx3YXlzIGFzIChpbnQ0cmFuZ2UoYSwgYSArIDEw KSkKKyBmICAgICAgfCBpbnRlZ2VyICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IGdlbmVyYXRl ZCBhbHdheXMgYXMgKGEpCitJbmRleGVzOgorICAgICJndGVzdDIyY19iX2lkeCIgYnRyZWUgKGIp CisgICAgImd0ZXN0MjJjX2RfaWR4IiBoYXNoIChkKQorICAgICJndGVzdDIyY19lX2lkeCIgZ2lz dCAoZSkKKworSU5TRVJUIElOVE8gZ3Rlc3QyMmMoYSkgVkFMVUVTICgxKSwgKDIpLCAoMyksICgx MCk7CitTRVQgZW5hYmxlX3NlcXNjYW4gVE8gb2ZmOworU0VUIGVuYWJsZV9iaXRtYXBzY2FuIFRP IG9mZjsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBndGVzdDIyYyBXSEVSRSBi ID0gNDsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1 c2luZyBndGVzdDIyY19iX2lkeCBvbiBndGVzdDIyYworICAgSW5kZXggQ29uZDogKChhICogMikg PSA0KQorKDIgcm93cykKKworU0VMRUNUICogRlJPTSBndGVzdDIyYyBXSEVSRSBiID0gNDsKKyBh IHwgYiB8IGMgIHwgZCB8ICAgZSAgICB8IGYgCistLS0rLS0tKy0tLS0rLS0tKy0tLS0tLS0tKy0t LQorIDIgfCA0IHwgMTEgfCA2IHwgWzIsMTIpIHwgMgorKDEgcm93KQorCitFWFBMQUlOIChDT1NU UyBPRkYpIFNFTEVDVCAqIEZST00gZ3Rlc3QyMmMgV0hFUkUgZCA9IDY7CisgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgZ3Rlc3QyMmNfZF9pZHgg b24gZ3Rlc3QyMmMKKyAgIEluZGV4IENvbmQ6ICgoYSAqIDMpID0gNikKKygyIHJvd3MpCisKK1NF TEVDVCAqIEZST00gZ3Rlc3QyMmMgV0hFUkUgZCA9IDY7CisgYSB8IGIgfCBjICB8IGQgfCAgIGUg ICAgfCBmIAorLS0tKy0tLSstLS0tKy0tLSstLS0tLS0tLSstLS0KKyAyIHwgNCB8IDExIHwgNiB8 IFsyLDEyKSB8IDIKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgY291bnQo KikgRlJPTSBndGVzdDIyYyBXSEVSRSBlIEA+IDEyOworICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEluZGV4IFNjYW4g dXNpbmcgZ3Rlc3QyMmNfZV9pZHggb24gZ3Rlc3QyMmMKKyAgICAgICAgIEluZGV4IENvbmQ6IChp bnQ0cmFuZ2UoYSwgKGEgKyAxMCkpIEA+IDEyKQorKDMgcm93cykKKworU0VMRUNUIGNvdW50KCop IGZyb20gZ3Rlc3QyMmMgd2hlcmUgZSBAPiAxMjsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMgor KDEgcm93KQorCistLWNvbHVtbiBkcm9wIHRoZW4gdGhlIGluZGV4IG92ZXIgdGhhdCBjb2x1bW4g c2hvdWxkIGFsc28gYmVpbmcgZHJvcHBlZAorQUxURVIgVEFCTEUgZ3Rlc3QyMmMgRFJPUCBDT0xV TU4gZTsKK1xkIGd0ZXN0MjJjCisgICAgICAgICAgICAgICBUYWJsZSAiZ2VuZXJhdGVkX3ZpcnR1 YWxfdGVzdHMuZ3Rlc3QyMmMiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxh YmxlIHwgICAgICAgICAgIERlZmF1bHQgICAgICAgICAgIAorLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBhICAg ICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyBiICAgICAgfCBpbnRlZ2Vy IHwgICAgICAgICAgIHwgICAgICAgICAgfCBnZW5lcmF0ZWQgYWx3YXlzIGFzIChhICogMikKKyBj ICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCBnZW5lcmF0ZWQgYWx3YXlz IGFzICgxMSkKKyBkICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCBnZW5l cmF0ZWQgYWx3YXlzIGFzIChhICogMykKKyBmICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwg ICAgICAgICAgfCBnZW5lcmF0ZWQgYWx3YXlzIGFzIChhKQorSW5kZXhlczoKKyAgICAiZ3Rlc3Qy MmNfYl9pZHgiIGJ0cmVlIChiKQorICAgICJndGVzdDIyY19kX2lkeCIgaGFzaCAoZCkKKwogLS1F WFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gZ3Rlc3QyMmMgV0hFUkUgYiAqIDMgPSA2 OwogLS1TRUxFQ1QgKiBGUk9NIGd0ZXN0MjJjIFdIRVJFIGIgKiAzID0gNjsKIC0tRVhQTEFJTiAo Q09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGd0ZXN0MjJjIFdIRVJFIGEgPSAxIEFORCBiID4gMDsK IC0tU0VMRUNUICogRlJPTSBndGVzdDIyYyBXSEVSRSBhID0gMSBBTkQgYiA+IDA7Ci0tLUFMVEVS IFRBQkxFIGd0ZXN0MjJjIEFMVEVSIENPTFVNTiBiIFNFVCBFWFBSRVNTSU9OIEFTIChhICogNCk7 Ci0tLUFOQUxZWkUgZ3Rlc3QyMmM7Ci0tLUVYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJP TSBndGVzdDIyYyBXSEVSRSBiID0gODsKLS0tU0VMRUNUICogRlJPTSBndGVzdDIyYyBXSEVSRSBi ID0gODsKK0FMVEVSIFRBQkxFIGd0ZXN0MjJjIEFMVEVSIENPTFVNTiBiIFNFVCBFWFBSRVNTSU9O IEFTIChhICogNCk7CitBTkFMWVpFIGd0ZXN0MjJjOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgKiBGUk9NIGd0ZXN0MjJjIFdIRVJFIGIgPSA4OworICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIGd0ZXN0MjJjX2JfaWR4IG9uIGd0ZXN0MjJj CisgICBJbmRleCBDb25kOiAoKGEgKiA0KSA9IDgpCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9N IGd0ZXN0MjJjIFdIRVJFIGIgPSA4OworIGEgfCBiIHwgYyAgfCBkIHwgZiAKKy0tLSstLS0rLS0t LSstLS0rLS0tCisgMiB8IDggfCAxMSB8IDYgfCAyCisoMSByb3cpCisKIC0tRVhQTEFJTiAoQ09T VFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGd0ZXN0MjJjIFdIRVJFIGIgKiAzID0gMTI7CiAtLVNFTEVD VCAqIEZST00gZ3Rlc3QyMmMgV0hFUkUgYiAqIDMgPSAxMjsKIC0tRVhQTEFJTiAoQ09TVFMgT0ZG KSBTRUxFQ1QgKiBGUk9NIGd0ZXN0MjJjIFdIRVJFIGEgPSAxIEFORCBiID4gMDsKIC0tU0VMRUNU ICogRlJPTSBndGVzdDIyYyBXSEVSRSBhID0gMSBBTkQgYiA+IDA7Ci0tLVJFU0VUIGVuYWJsZV9z ZXFzY2FuOwotLS1SRVNFVCBlbmFibGVfYml0bWFwc2NhbjsKK1JFU0VUIGVuYWJsZV9zZXFzY2Fu OworUkVTRVQgZW5hYmxlX2JpdG1hcHNjYW47CiAtLSBmb3JlaWduIGtleXMKIENSRUFURSBUQUJM RSBndGVzdDIzYSAoeCBpbnQgUFJJTUFSWSBLRVksIHkgaW50KTsKIC0tSU5TRVJUIElOVE8gZ3Rl c3QyM2EgVkFMVUVTICgxLCAxMSksICgyLCAyMiksICgzLCAzMyk7CkBAIC0xNTg3LDMgKzE3MzIs MTcgQEAgc2VsZWN0ICogZnJvbSBndGVzdDMyIHQgZ3JvdXAgYnkgZ3JvdXBpbmcgc2V0cyAoYSwg YiwgYywgZCkgaGF2aW5nIGMgPSAyMDsKICgxIHJvdykKIAogZHJvcCB0YWJsZSBndGVzdDMyOwor LS0gc2FuaXR5IGNoZWNrIG9mIHN5c3RlbSBjYXRhbG9nCistLSBJZiB0aGUgaW5kZXggaXMgYmFz ZWQgb24gYSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4sIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcK Ky0tIGF0dHJpYnV0ZSdzIGF0dGdlbmVyYXRlZCBzaG91bGQgYmUgJ3YnLgorc2VsZWN0IHBpLmlu ZHJlbGlkOjpyZWdjbGFzcywgcGEuYXR0bnVtLAorICAgICAgIHBhLmF0dG5hbWUsCisgICAgICAg cGEuYXR0Z2VuZXJhdGVkCitmcm9tIHBnX2luZGV4IHBpLCB1bm5lc3QoaW5kYXR0cmdlbmVyYXRl ZCkgc3ViKGEpLCBwZ19hdHRyaWJ1dGUgcGEKK3doZXJlIDAgPD4gYQorYW5kIHBhLmF0dHJlbGlk ID0gcGkuaW5kcmVsaWQgYW5kIHBhLmF0dG51bSA9IHN1Yi5hCithbmQgKHBhLmF0dGdlbmVyYXRl ZCA8PiAndicgb3IgcGkuaW5kbmF0dHMgPD4gcGkuaW5kbmtleWF0dHMpOworIGluZHJlbGlkIHwg YXR0bnVtIHwgYXR0bmFtZSB8IGF0dGdlbmVyYXRlZCAKKy0tLS0tLS0tLS0rLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9mYXN0X2RlZmF1bHQuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZmFzdF9k ZWZhdWx0LnNxbAppbmRleCAwNjhkZDBiYzhhYS4uYjM5ZTc2YmNmYzMgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zhc3RfZGVmYXVsdC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvZmFzdF9kZWZhdWx0LnNxbApAQCAtNzcsNiArNzcsMTIgQEAgQUxURVIgVEFCTEUgaGFz X3ZvbGF0aWxlIEFMVEVSIENPTFVNTiBjb2wxIFNFVCBEQVRBIFRZUEUgZmxvYXQ4LAogLS0gc3Rv cmVkIGdlbmVyYXRlZCBjb2x1bW5zIG5lZWQgYSByZXdyaXRlCiBBTFRFUiBUQUJMRSBoYXNfdm9s YXRpbGUgQUREIGNvbDcgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKDU1KSBzdG9yZWQ7CiAKKy0t IGlmIHRoZXJlIGlzIGFueSBpbmRleCBvdmVyIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMsCist LSBjaGFuZ2UgZ2VuZXJhdGlvbiBleHByZXNzaW9uIG5lZWQgcmV3cml0ZQorQ1JFQVRFIElOREVY IG9uIGhhc192b2xhdGlsZShjb2w2KTsKK0FMVEVSIFRBQkxFIGhhc192b2xhdGlsZSBBTFRFUiBD T0xVTU4gY29sNiBTRVQgRVhQUkVTU0lPTiBBUyAoY29sMSAqIDMpOworLS0gdGFibGUgcmV3cml0 ZSBhZ2Fpbi4KK0FMVEVSIFRBQkxFIGhhc192b2xhdGlsZSBBTFRFUiBDT0xVTU4gY29sNiBTRVQg REFUQSBUWVBFIElOVDg7CiAKIAogLS0gVGVzdCBhIGxhcmdlIHNhbXBsZSBvZiBkaWZmZXJlbnQg ZGF0YXR5cGVzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmly dHVhbC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwKaW5k ZXggMTNjZmJkNzY4NTkuLjA0ZGQ1NmU1OGNmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2Vu ZXJhdGVkX3ZpcnR1YWwuc3FsCkBAIC0xLDYgKzEsNCBAQAogLS0ga2VlcCB0aGVzZSB0ZXN0cyBh bGlnbmVkIHdpdGggZ2VuZXJhdGVkX3N0b3JlZC5zcWwKLQotCiBDUkVBVEUgU0NIRU1BIGdlbmVy YXRlZF92aXJ0dWFsX3Rlc3RzOwogR1JBTlQgVVNBR0UgT04gU0NIRU1BIGdlbmVyYXRlZF92aXJ0 dWFsX3Rlc3RzIFRPIFBVQkxJQzsKIFNFVCBzZWFyY2hfcGF0aCA9IGdlbmVyYXRlZF92aXJ0dWFs X3Rlc3RzOwpAQCAtMzkxLDMyICszODksODUgQEAgQ1JFQVRFIFRBQkxFIGd0ZXN0MjJiIChhIGlu dCwgYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSAvIDIpIFZJUlRVQUwsIFBSSU1BUlkKIC0t SU5TRVJUIElOVE8gZ3Rlc3QyMmIgVkFMVUVTICgyKTsKIAogLS0gaW5kZXhlcwotQ1JFQVRFIFRB QkxFIGd0ZXN0MjJjIChhIGludCwgYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSAqIDIpIFZJ UlRVQUwpOwotLS1DUkVBVEUgSU5ERVggZ3Rlc3QyMmNfYl9pZHggT04gZ3Rlc3QyMmMgKGIpOwor Q1JFQVRFIFRBQkxFIGd0ZXN0cGFydGVkIChiIGludGVnZXIsIGMgaW50ZWdlcixhIGludGVnZXIg R0VORVJBVEVEIEFMV0FZUyBBUyAoYysxKSlQQVJUSVRJT04gQlkgUkFOR0UgKGIpOworQ1JFQVRF IFRBQkxFIGd0ZXN0cGFydDEgKGIgaW50ZWdlciwgYyBpbnRlZ2VyLCBhIGludGVnZXIgR0VORVJB VEVEIEFMV0FZUyBBUyAoYykpOworQ1JFQVRFIFRBQkxFIGd0ZXN0cGFydDIgKGIgaW50ZWdlciwg YSBpbnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgKGMrMSksIGMgaW50ZWdlcik7CitDUkVBVEUg VEFCTEUgZ3Rlc3RwYXJ0MyAoYiBpbnRlZ2VyLCBjIGludGVnZXIsIGEgaW50ZWdlciBHRU5FUkFU RUQgQUxXQVlTIEFTIChjKSk7CisKK0FMVEVSIFRBQkxFIGd0ZXN0cGFydGVkIEFUVEFDSCBQQVJU SVRJT04gZ3Rlc3RwYXJ0MyBmb3IgdmFsdWVzIGZyb20gKDEpIHRvICgxMCk7CistLWVycm9yLiBw YXJ0aXRpb25lZCBhbmQgcGFydGl0aW9uIGhhdmUgZGlmZmVyZW50IGdlbmVyYXRpb24gZXhwcmVz c2lvbiwgY2FuIG5vdAorLS1idWlsZCBpbmRleCBvbiBpdC4KK0NSRUFURSBJTkRFWCBndGVzdHBh cnRlZF9hX2lkeF9lcnJvciBvbiBndGVzdHBhcnRlZChhKTsgLS1lcnJvcgorQUxURVIgVEFCTEUg Z3Rlc3RwYXJ0ZWQgREVUQUNIIFBBUlRJVElPTiBndGVzdHBhcnQzOworCitDUkVBVEUgSU5ERVgg Z3Rlc3RwYXJ0MV9hX2lkeCBvbiBndGVzdHBhcnQxKGEpOworQ1JFQVRFIElOREVYIGd0ZXN0cGFy dDJfYV9pZHggb24gZ3Rlc3RwYXJ0MihhKTsKK0NSRUFURSBJTkRFWCBndGVzdHBhcnQyX2FfaWR4 X2NvcHkgb24gZ3Rlc3RwYXJ0MihhKTsKK0NSRUFURSBJTkRFWCBndGVzdHBhcnRlZF9hX2lkeCBv biBndGVzdHBhcnRlZChhKTsKKworLS1lcnJvci4gaW5kZXggb3ZlciBkaWZmZXJlbnQgZ2VuZXJh dGlvbiBleHByZXNzaW9uIHNob3VsZCBub3QgYWxsb3dlZAorQUxURVIgVEFCTEUgZ3Rlc3RwYXJ0 ZWQgQVRUQUNIIFBBUlRJVElPTiBndGVzdHBhcnQxIGZvciB2YWx1ZXMgZnJvbSAoMSkgdG8gKDEw KTsgLS1lcnJvcgorQUxURVIgVEFCTEUgZ3Rlc3RwYXJ0ZWQgQVRUQUNIIFBBUlRJVElPTiBndGVz dHBhcnQyIGZvciB2YWx1ZXMgZnJvbSAoMSkgdG8gKDEwKTsgLS1vaworCitTRUxFQ1QgKiBGUk9N IHBnX3BhcnRpdGlvbl90cmVlKCdndGVzdHBhcnRlZF9hX2lkeCc6OnJlZ2NsYXNzKTsKK0FMVEVS IElOREVYIGd0ZXN0cGFydGVkX2FfaWR4IEFUVEFDSCBQQVJUSVRJT04gZ3Rlc3RwYXJ0Ml9hX2lk eDsgLS1vaworQUxURVIgSU5ERVggZ3Rlc3RwYXJ0ZWRfYV9pZHggQVRUQUNIIFBBUlRJVElPTiBn dGVzdHBhcnQyX2FfaWR4X2NvcHk7IC0tZXJyb3IKK0NSRUFURSBJTkRFWCBndGVzdHBhcnRlZF9h X2lkeF8xIG9uIGd0ZXN0cGFydGVkKGEpOworLS1ub3cgaW5kZXggZ3Rlc3RwYXJ0Ml9hX2lkeF9j b3B5IHNob3VsZCBhdHRhY2ggdG8gdGhlIHBhcnRpdGlvbiB0cmVlLgorU0VMRUNUICogRlJPTSBw Z19wYXJ0aXRpb25fdHJlZSgnZ3Rlc3RwYXJ0ZWRfYV9pZHhfMSc6OnJlZ2NsYXNzKTsKKworLS1j cmVhdGUgdGFibGUgbGlrZSBzaG91bGQgd29yayBqdXN0IGZpbmUKK0NSRUFURSBUQUJMRSBndGVz dHBhcnRlZF9saWtlIChMSUtFIGd0ZXN0cGFydGVkIGluY2x1ZGluZyBhbGwpOworXGQgZ3Rlc3Rw YXJ0ZWRfbGlrZQorCitDUkVBVEUgVEFCTEUgZ3Rlc3QyMmMgKGEgaW50LCBiIGludCBHRU5FUkFU RUQgQUxXQVlTIEFTIChhICogMikgVklSVFVBTAorICAgICAgICAgICAgICAgICAgICAgICxjIGlu dCBHRU5FUkFURUQgQUxXQVlTIEFTICgxMSkgVklSVFVBTAorICAgICAgICAgICAgICAgICAgICAg ICxkIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChhICozKSBWSVJUVUFMCisgICAgICAgICAgICAg ICAgICAgICAgLGUgaW50NHJhbmdlIEdFTkVSQVRFRCBBTFdBWVMgQVMgKGludDRyYW5nZShhLCBh KzEwKSkgVklSVFVBTAorICAgICAgICAgICAgICAgICAgICAgICxmIGludCBHRU5FUkFURUQgQUxX QVlTIEFTIChhKSBWSVJUVUFMKTsKK0NSRUFURSBJTkRFWCBndGVzdDIyY19iX2lkeCBPTiBndGVz dDIyYyAoYik7CistLXZhcmlhYmxlIGZyZWUgZ2VuZXJhdGlvbiBleHByZXNzaW9uIGhhdmUgbm8g cHJhdGljYWwgdXNhZ2UsIHNvIGVycm9yIG91dC4KK0NSRUFURSBJTkRFWCBndGVzdDIyY19jX2lk eCBPTiBndGVzdDIyYyAoYyk7CitDUkVBVEUgSU5ERVggZ3Rlc3QyMmNfZF9pZHggT04gZ3Rlc3Qy MmMgVVNJTkcgaGFzaChkKTsKK0NSRUFURSBJTkRFWCBndGVzdDIyY19lX2lkeCBPTiBndGVzdDIy YyBVU0lORyBnaXN0KGUpOworLS1lcnJvci4gaW5jbHVkZSBjb2x1bW5zIGFyZSBub3Qgc3VwcG9y dGVkLgorQ1JFQVRFIElOREVYIGd0ZXN0MjJjX2lkeDEgT04gZ3Rlc3QyMmMgVVNJTkcgYnRyZWUo YSkgaW5jbHVkZSAoYixjKTsKK0NSRUFURSBJTkRFWCBndGVzdDIyY19pZHgxIE9OIGd0ZXN0MjJj IFVTSU5HIGJ0cmVlKGEpIGluY2x1ZGUgKGYpOworCiAtLUNSRUFURSBJTkRFWCBndGVzdDIyY19l eHByX2lkeCBPTiBndGVzdDIyYyAoKGIgKiAzKSk7CiAtLUNSRUFURSBJTkRFWCBndGVzdDIyY19w cmVkX2lkeCBPTiBndGVzdDIyYyAoYSkgV0hFUkUgYiA+IDA7Ci0tLVxkIGd0ZXN0MjJjCitcZCBn dGVzdDIyYworCitJTlNFUlQgSU5UTyBndGVzdDIyYyhhKSBWQUxVRVMgKDEpLCAoMiksICgzKSwg KDEwKTsKK1NFVCBlbmFibGVfc2Vxc2NhbiBUTyBvZmY7CitTRVQgZW5hYmxlX2JpdG1hcHNjYW4g VE8gb2ZmOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGd0ZXN0MjJjIFdIRVJF IGIgPSA0OworU0VMRUNUICogRlJPTSBndGVzdDIyYyBXSEVSRSBiID0gNDsKK0VYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUICogRlJPTSBndGVzdDIyYyBXSEVSRSBkID0gNjsKK1NFTEVDVCAqIEZS T00gZ3Rlc3QyMmMgV0hFUkUgZCA9IDY7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCBjb3Vu dCgqKSBGUk9NIGd0ZXN0MjJjIFdIRVJFIGUgQD4gMTI7CitTRUxFQ1QgY291bnQoKikgZnJvbSBn dGVzdDIyYyB3aGVyZSBlIEA+IDEyOworCistLWNvbHVtbiBkcm9wIHRoZW4gdGhlIGluZGV4IG92 ZXIgdGhhdCBjb2x1bW4gc2hvdWxkIGFsc28gYmVpbmcgZHJvcHBlZAorQUxURVIgVEFCTEUgZ3Rl c3QyMmMgRFJPUCBDT0xVTU4gZTsKK1xkIGd0ZXN0MjJjCiAKLS0tSU5TRVJUIElOVE8gZ3Rlc3Qy MmMgVkFMVUVTICgxKSwgKDIpLCAoMyk7Ci0tLVNFVCBlbmFibGVfc2Vxc2NhbiBUTyBvZmY7Ci0t LVNFVCBlbmFibGVfYml0bWFwc2NhbiBUTyBvZmY7Ci0tLUVYUExBSU4gKENPU1RTIE9GRikgU0VM RUNUICogRlJPTSBndGVzdDIyYyBXSEVSRSBiID0gNDsKLS0tU0VMRUNUICogRlJPTSBndGVzdDIy YyBXSEVSRSBiID0gNDsKIC0tRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGd0ZXN0 MjJjIFdIRVJFIGIgKiAzID0gNjsKIC0tU0VMRUNUICogRlJPTSBndGVzdDIyYyBXSEVSRSBiICog MyA9IDY7CiAtLUVYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBndGVzdDIyYyBXSEVS RSBhID0gMSBBTkQgYiA+IDA7CiAtLVNFTEVDVCAqIEZST00gZ3Rlc3QyMmMgV0hFUkUgYSA9IDEg QU5EIGIgPiAwOwogCi0tLUFMVEVSIFRBQkxFIGd0ZXN0MjJjIEFMVEVSIENPTFVNTiBiIFNFVCBF WFBSRVNTSU9OIEFTIChhICogNCk7Ci0tLUFOQUxZWkUgZ3Rlc3QyMmM7Ci0tLUVYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUICogRlJPTSBndGVzdDIyYyBXSEVSRSBiID0gODsKLS0tU0VMRUNUICog RlJPTSBndGVzdDIyYyBXSEVSRSBiID0gODsKK0FMVEVSIFRBQkxFIGd0ZXN0MjJjIEFMVEVSIENP TFVNTiBiIFNFVCBFWFBSRVNTSU9OIEFTIChhICogNCk7CitBTkFMWVpFIGd0ZXN0MjJjOworRVhQ TEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGd0ZXN0MjJjIFdIRVJFIGIgPSA4OworU0VM RUNUICogRlJPTSBndGVzdDIyYyBXSEVSRSBiID0gODsKIC0tRVhQTEFJTiAoQ09TVFMgT0ZGKSBT RUxFQ1QgKiBGUk9NIGd0ZXN0MjJjIFdIRVJFIGIgKiAzID0gMTI7CiAtLVNFTEVDVCAqIEZST00g Z3Rlc3QyMmMgV0hFUkUgYiAqIDMgPSAxMjsKIC0tRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1Qg KiBGUk9NIGd0ZXN0MjJjIFdIRVJFIGEgPSAxIEFORCBiID4gMDsKIC0tU0VMRUNUICogRlJPTSBn dGVzdDIyYyBXSEVSRSBhID0gMSBBTkQgYiA+IDA7Ci0tLVJFU0VUIGVuYWJsZV9zZXFzY2FuOwot LS1SRVNFVCBlbmFibGVfYml0bWFwc2NhbjsKKworUkVTRVQgZW5hYmxlX3NlcXNjYW47CitSRVNF VCBlbmFibGVfYml0bWFwc2NhbjsKIAogLS0gZm9yZWlnbiBrZXlzCiBDUkVBVEUgVEFCTEUgZ3Rl c3QyM2EgKHggaW50IFBSSU1BUlkgS0VZLCB5IGludCk7CkBAIC04MjgsMyArODc5LDE0IEBAIHNl bGVjdCAqIGZyb20gZ3Rlc3QzMiB0IGdyb3VwIGJ5IGdyb3VwaW5nIHNldHMgKGEsIGIsIGMsIGQp IGhhdmluZyBjID0gMjA7CiBzZWxlY3QgKiBmcm9tIGd0ZXN0MzIgdCBncm91cCBieSBncm91cGlu ZyBzZXRzIChhLCBiLCBjLCBkKSBoYXZpbmcgYyA9IDIwOwogCiBkcm9wIHRhYmxlIGd0ZXN0MzI7 CisKKy0tIHNhbml0eSBjaGVjayBvZiBzeXN0ZW0gY2F0YWxvZworLS0gSWYgdGhlIGluZGV4IGlz IGJhc2VkIG9uIGEgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uLCB0aGVuIHRoZSBjb3JyZXNwb25k aW5nCistLSBhdHRyaWJ1dGUncyBhdHRnZW5lcmF0ZWQgc2hvdWxkIGJlICd2Jy4KK3NlbGVjdCBw aS5pbmRyZWxpZDo6cmVnY2xhc3MsIHBhLmF0dG51bSwKKyAgICAgICBwYS5hdHRuYW1lLAorICAg ICAgIHBhLmF0dGdlbmVyYXRlZAorZnJvbSBwZ19pbmRleCBwaSwgdW5uZXN0KGluZGF0dHJnZW5l cmF0ZWQpIHN1YihhKSwgcGdfYXR0cmlidXRlIHBhCit3aGVyZSAwIDw+IGEKK2FuZCBwYS5hdHRy ZWxpZCA9IHBpLmluZHJlbGlkIGFuZCBwYS5hdHRudW0gPSBzdWIuYQorYW5kIChwYS5hdHRnZW5l cmF0ZWQgPD4gJ3YnIG9yIHBpLmluZG5hdHRzIDw+IHBpLmluZG5rZXlhdHRzKTsKLS0gCjIuMzQu MQoK --000000000000e8acab0632cd1327--