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.96) (envelope-from ) id 1vkJ5t-00DQwP-0A for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Jan 2026 09:41:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vkJ5r-007C8S-30 for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Jan 2026 09:41:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vkJ5r-007C8J-0g for pgsql-hackers@lists.postgresql.org; Mon, 26 Jan 2026 09:41:11 +0000 Received: from mail-lj1-x229.google.com ([2a00:1450:4864:20::229]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vkJ5m-002N1A-1b for pgsql-hackers@lists.postgresql.org; Mon, 26 Jan 2026 09:41:09 +0000 Received: by mail-lj1-x229.google.com with SMTP id 38308e7fff4ca-383122fbc9bso31651311fa.1 for ; Mon, 26 Jan 2026 01:41:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769420464; cv=none; d=google.com; s=arc-20240605; b=DRZVGLJFoBKBdNfjJ7ADcnKPszpKtBwmiLzxS77qJiz+soTjasgNT+LXRVD1Nxs9KN TdJDOrBolqePZyQluVuGc6QnlOgpLR5jQzAXPyvyNWBaUMgPdgkUPoi8qacED9ACyULq pSO/UJGrff4v7D1Q+lWVt1nXVac5zLDag+/eMNMdFCkp1EQACYnPXcNrUGWl5mwsoJbB vYRgQNkGM1b+sGL7JxqMjG59eUJGdcZs/ypndjZbcgOAyxmjTeLTLHg+EyrRceZQ6wu0 mXKKxF2y3nnZCEBDDbx3XJng2WgEiZ+Ew6SIWmEnt5ByfpwGDfbFKeO8kTm+PdJxWZEw tQgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=o23dz53CS3ypnIcMNeJJ7BnWzqzFTmShMl6zzeFsQxE=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=GeBicZJhDQXTw8et7Ks+3AvznrD5iZhA73m3tEot+zUhPhAn32TWaXNvLE2NM39qjY 6czCUqhZscvmBfTaVGmJBiGuMpTvf0KQJEAouUeR0zj8P+TnimZtePz/MNcE0fHpcAia Sez6SGnsYsjN/DqnsgquVq5chVMoxcVVJv1fUK8nvbXyNphYBrDYshYZY62CXJ3fDN7G 7mA6ylL+RUwlsSDU3xG/p6izWGl1wg1M0w1UcLs6pOIEKTAp8OlbCMGmO04PRabRWtet cMpKIYuyKSvHjhMH1pMwHGzDMC2IWGmN4jQf0QjGo5bPIpjSkSH6oC3o4YwW9Nz9mhZZ nDuQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1769420464; x=1770025264; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=o23dz53CS3ypnIcMNeJJ7BnWzqzFTmShMl6zzeFsQxE=; b=MlF+o1fCkNs0f1oJEHyZvQt5NRcuPE/VDccEuuS4E4HRx0qob9PBPNwhid331Bm3gg wf6utiUDIaUfyz8t/dfDSOaVGZEe0v45Y1nKOIGf70Wpd5Zew/rtJJidkFjBIl8q7p5l oiM4mBKZhOpqE1AUz6QiJaCTNJ6mKLqTskGE1CkA9CXiHQjDTdd/VDxe8lHcHVTAuo69 lyVmNLriSXMB8eq0N+4Uk/8+s2JTsHCbBslu/nAWSXkFWBrK/da7k8/AFCjMYcf2f1rJ oQO7uO3uOc0fwXonmnxpNnCc/vMRwjqr+yk9sTS6/OnwHplte92kO4vA6e+yb5BuQXIT VfIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769420464; x=1770025264; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=o23dz53CS3ypnIcMNeJJ7BnWzqzFTmShMl6zzeFsQxE=; b=qn1jwn6qk2dQmhyTGt4SEnPbJUdSxgrGTrUgz32TcfxE8NXhqYl8aKThw9mhuQjPam zaLJIEPNjSmUU9BDXfSjydrR65GReDaODTISYdjNP1MFcE+8qrvpsLzfd2IMArRZriwM H0wjWhByojxhUCgSJKm1pbBxywxntvj5pWLFJBi/+gqE4nNp05uHB4faEjcTu/6Vgv3M wUgZzty2WddCjOVImzflDVw24rAL5rk/XssNZAeZwDNzyzpGbgwKnrSJlO8hdYgZxpAi W3/ebTWerHdUfk7DVkDVFH2X31dP0IA9EIF5ijngxHYd98rcbvpIhsOUDWunUGOEya5E SVhg== X-Gm-Message-State: AOJu0Yw9I0sGl4UeeeaQJFBuqPnVQPcIwMeDTbKMeBf0j9dofsRUCP3b b30esXeiSOq8Vl4j4EOJARMJ8vBkAX3cswMQ2xXdTxsPgV/sb5R1wX1SeZwAnYI0X6CWwuXNHuq ZO3WLkeQmD8XyBsDFCAdr51XL3ZIDyN9jKw6AWBWDZxfHFBzg6BFLRw== X-Gm-Gg: AZuq6aJrQv4Cw/3AaJZ0kgpBRLPV99pdKz/0SNoRWqqh8/FLEy7ku/du/JB3HJHFvsR GDSg+mOjd7qh1mBL+8ME6nYlmBLWZH+y2Zj8MJxogX0SM7K6xaURsUu0wnZR04xMHTop8BSAcrp cweHnSVczpmkfTYuZS/liND+XUu8rRXaOheCmhaJ45EH0U++lvQrRKHpACs7kw0MEMau1TX5eGR gddyPZrtlE0u1NUwngpJ7YTvlKTjp0i7EtuSqLcjshJfZJH6tQF+sqegN+FoFePxtJq/A7iPGEy AQsMMxD5n4oAJ95uJIGYgcFbi9LlW/wZxBMHm05AH59m/ir6SmrAW4N9fYenHKB7ew== X-Received: by 2002:a05:6512:b8b:b0:59d:e7ac:619f with SMTP id 2adb3069b0e04-59df361c3bamr1186139e87.18.1769420463670; Mon, 26 Jan 2026 01:41:03 -0800 (PST) MIME-Version: 1.0 From: Jakub Wartak Date: Mon, 26 Jan 2026 10:40:52 +0100 X-Gm-Features: AZwV_QiQMjQ0SJvabqyRT3pxsy6qckp3HTILiOr6xi3pheWo-6wQHbCgCMKQIlk Message-ID: Subject: pg_stat_io_histogram To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000322dc60649474e9d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000322dc60649474e9d Content-Type: text/plain; charset="UTF-8" I'm proposing that we add pg_stat_io_histogram that would track/show I/O latencies profile, so we could quickly identify I/O outliers. From time to time users complain that 'PostgreSQL is slow or stuck' (usually COMMIT is slow), when it is quite apparent that it is down to somewhere in the I/O stack. It is quite easy to prove once one has proper measurement tools in place and is able to correlate, but it takes IMHO way too much time and energy to cross-correlate all of that information (iostat -x 1s, wait events 1s, and so on), especially if one would like to provide rapid response. Right now the patch does not include per-backend/PID tracking, hopefully if there will be interest in this, I'll add it, but I would like to first hear if that's a good idea. The current implementation uses fast bucket calculation to avoid overheads and tries to cover most useful range of devices via buckets (128us..256ms, so that covers both NVMe/SSD/HDD and abnormally high latency too as from time to time I'm try to help with I/O stuck for *seconds*, usually a sign of some I/O multipath issues, device resetting, or hypervisor woes). postgres=# select substring(backend_type,1,8) as backend,object,context,io_type, bucket_latency_us as lat_us, round(bucket_latency_us/1000.0, 3) as lat_ms, bucket_count as count from pg_stat_get_io_histogram() where bucket_count > 0 order by 1,2,3,4,5; backend | object | context | io_type | lat_us | lat_ms | count ----------+----------+-----------+-----------+--------+--------+------- autovacu | relation | normal | read | 128 | 0.128 | 54 autovacu | relation | normal | read | 256 | 0.256 | 7 autovacu | relation | normal | read | 512 | 0.512 | 1 autovacu | relation | vacuum | read | 128 | 0.128 | 8 autovacu | relation | vacuum | read | 256 | 0.256 | 5 backgrou | relation | bulkread | read | 128 | 0.128 | 658 backgrou | relation | normal | read | 128 | 0.128 | 5 checkpoi | relation | normal | fsync | 2048 | 2.048 | 37 checkpoi | relation | normal | fsync | 4096 | 4.096 | 7 checkpoi | relation | normal | fsync | 16384 | 16.384 | 4 checkpoi | relation | normal | fsync | 32768 | 32.768 | 1 checkpoi | relation | normal | fsync | 65536 | 65.536 | 1 checkpoi | relation | normal | write | 128 | 0.128 | 2059 checkpoi | relation | normal | write | 256 | 0.256 | 2 checkpoi | relation | normal | write | 512 | 0.512 | 1 checkpoi | relation | normal | writeback | 128 | 0.128 | 64 checkpoi | relation | normal | writeback | 256 | 0.256 | 1 client b | relation | bulkread | read | 128 | 0.128 | 675 client b | relation | bulkread | read | 256 | 0.256 | 1 client b | relation | bulkwrite | extend | 128 | 0.128 | 260 client b | relation | bulkwrite | extend | 512 | 0.512 | 1 client b | relation | bulkwrite | write | 128 | 0.128 | 14404 client b | relation | normal | extend | 128 | 0.128 | 6 client b | relation | normal | read | 128 | 0.128 | 273 client b | relation | normal | read | 256 | 0.256 | 6 client b | relation | vacuum | read | 128 | 0.128 | 907 client b | relation | vacuum | read | 256 | 0.256 | 3 client b | relation | vacuum | read | 512 | 0.512 | 2 Of course most of the I/O calls today are hitting page cache, so one would expect they'll be < 128us most of the time, but above you can see here degraded fsync/fdatasync as well (BTW that was achieved via device mapper delayed device). My hope that above would help tremendously when dealing with flaky storage, or I/O path issues, or even hypervisors being paused. Alternative idea I was having would be simply to add logging of slow I/O outliers, but meh.. then one would to answer all those questions: what should be the threshold (=>guc?), risk of spamming the log and so on (and I wouldn't be fond of proposing yet another log_* GUC ;)) Any hints, co-authors, or help are more than welcome! -J. --000000000000322dc60649474e9d Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Add-pg_stat_io_histogram-view-to-provide-more-det.patch" Content-Disposition: attachment; filename="v1-0001-Add-pg_stat_io_histogram-view-to-provide-more-det.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkuz4fey0 RnJvbSBiYzgxYjRlMWZmZjIyZTU5OGRmNTkyNThiYzViNGJjMWY5NzAzMWM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRha0BlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDA4OjEwOjA5ICswMTAwClN1YmplY3Q6IFtQ QVRDSCB2MV0gQWRkIHBnX3N0YXRfaW9faGlzdG9ncmFtIHZpZXcgdG8gcHJvdmlkZSBtb3JlIGRl dGFpbGVkCiBpbnNpZ2h0IGludG8gSU8gcHJvZmlsZQoKcGdfc3RhdF9pb19oaXN0b2dyYW0gZGlz cGxheXMgYSBoaXN0b2dyYW0gb2YgSU8gbGF0ZW5jaWVzIGZvciBzcGVjaWZpYwpiYWNrZW5kX3R5 cGUsIG9iamVjdCwgY29udGV4dCBhbmQgaW9fdHlwZS4gVGhlIGhpc3RvZ3JhbSBoYXMgYnVja2V0 cyB0aGF0IGFsbG93CmZhc3RlciBpZGVudGlmaWNhdGlvbiBvZiBJL08gbGF0ZW5jeSBvdXRsaWVy cyBkdWUgdG8gZmF1bHR5IGhhcmR3YXJlIGFuZC9vcgptaXNiZWhhdmluZyBJL08gc3RhY2suIFN1 Y2ggSS9PIG91dGxpZXJzIGUuZy4gc2xvdyBmc3luY3MgY291bGQgc29tZXRpbWVzCmNhdXNlIGlu dGVybWl0dGVudCBpc3N1ZXMgZS5nLiBmb3IgQ09NTUlUIG9yIGFmZmVjdCB0aGUgc3luY2hyb25v dXMgc3RhbmRieXMKcGVyZm9ybWFuY2UuCgpBdXRob3I6IEpha3ViIFdhcnRhayA8amFrdWIud2Fy dGFrQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL1hYWAotLS0KIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAg IHwgIDEyICstCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAgICAgICB8IDI1NyAr KysrKysrKysrKysrKysrKysrKysrKystCiBkb2Mvc3JjL3NnbWwvd2FsLnNnbWwgICAgICAgICAg ICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsICAg fCAgMTEgKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9pby4gIHwgICAwCiBz cmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfaW8uYyB8ICA3MiArKysrKysrCiBzcmMv YmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYyAgICB8IDEyMyArKysrKysrKysrKysKIHNy Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgIHwgICA5ICsKIHNyYy9pbmNsdWRl L3Bnc3RhdC5oICAgICAgICAgICAgICAgICAgIHwgIDE0ICsrCiBzcmMvaW5jbHVkZS9wb3J0L3Bn X2JpdHV0aWxzLmggICAgICAgICB8ICAyNyArKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cnVsZXMub3V0ICAgIHwgICA4ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHMub3V0 ICAgIHwgIDIzICsrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHMuc3FsICAgICAgICAgfCAg MTUgKysKIDEzIGZpbGVzIGNoYW5nZWQsIDU2OSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9p by4KCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwv Y29uZmlnLnNnbWwKaW5kZXggNTU2MGI5NWVlNjAuLjYxNGFmMzg3ZWU1IDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBA IC04NzI5LDkgKzg3MjksMTEgQEAgQ09QWSBwb3N0Z3Jlc19sb2cgRlJPTSAnL2Z1bGwvcGF0aC90 by9sb2dmaWxlLmNzdicgV0lUSCBjc3Y7CiAgICAgICAgIGRpc3BsYXllZCBpbiA8bGluayBsaW5r ZW5kPSJtb25pdG9yaW5nLXBnLXN0YXQtZGF0YWJhc2UtdmlldyI+CiAgICAgICAgIDxzdHJ1Y3Ru YW1lPnBnX3N0YXRfZGF0YWJhc2U8L3N0cnVjdG5hbWU+PC9saW5rPiwKICAgICAgICAgPGxpbmsg bGlua2VuZD0ibW9uaXRvcmluZy1wZy1zdGF0LWlvLXZpZXciPgotICAgICAgICA8c3RydWN0bmFt ZT5wZ19zdGF0X2lvPC9zdHJ1Y3RuYW1lPjwvbGluaz4gKGlmIDx2YXJuYW1lPm9iamVjdDwvdmFy bmFtZT4KLSAgICAgICAgaXMgbm90IDxsaXRlcmFsPndhbDwvbGl0ZXJhbD4pLCBpbiB0aGUgb3V0 cHV0IG9mIHRoZQotICAgICAgICA8bGluayBsaW5rZW5kPSJwZy1zdGF0LWdldC1iYWNrZW5kLWlv Ij4KKyAgICAgICAgPHN0cnVjdG5hbWU+cGdfc3RhdF9pbzwvc3RydWN0bmFtZT48L2xpbms+IGFu ZAorICAgICAgICA8bGluayBsaW5rZW5kPSJtb25pdG9yaW5nLXBnLXN0YXQtaW8taGlzdG9ncmFt LXZpZXciPgorICAgICAgICA8c3RydWN0bmFtZT5wZ19zdGF0X2lvX2hpc3RvZ3JhbTwvc3RydWN0 bmFtZT48L2xpbms+CisgICAgICAgIChpZiA8dmFybmFtZT5vYmplY3Q8L3Zhcm5hbWU+IGlzIG5v dCA8bGl0ZXJhbD53YWw8L2xpdGVyYWw+KSwKKyAgICAgICAgaW4gdGhlIG91dHB1dCBvZiB0aGUg PGxpbmsgbGlua2VuZD0icGctc3RhdC1nZXQtYmFja2VuZC1pbyI+CiAgICAgICAgIDxmdW5jdGlv bj5wZ19zdGF0X2dldF9iYWNrZW5kX2lvKCk8L2Z1bmN0aW9uPjwvbGluaz4gZnVuY3Rpb24gKGlm CiAgICAgICAgIDx2YXJuYW1lPm9iamVjdDwvdmFybmFtZT4gaXMgbm90IDxsaXRlcmFsPndhbDwv bGl0ZXJhbD4pLCBpbiB0aGUKICAgICAgICAgb3V0cHV0IG9mIDx4cmVmIGxpbmtlbmQ9InNxbC1l eHBsYWluIi8+IHdoZW4gdGhlIDxsaXRlcmFsPkJVRkZFUlM8L2xpdGVyYWw+CkBAIC04NzYxLDcg Kzg3NjMsOSBAQCBDT1BZIHBvc3RncmVzX2xvZyBGUk9NICcvZnVsbC9wYXRoL3RvL2xvZ2ZpbGUu Y3N2JyBXSVRIIGNzdjsKICAgICAgICAgbWVhc3VyZSB0aGUgb3ZlcmhlYWQgb2YgdGltaW5nIG9u IHlvdXIgc3lzdGVtLgogICAgICAgICBJL08gdGltaW5nIGluZm9ybWF0aW9uIGlzIGRpc3BsYXll ZCBpbgogICAgICAgICA8bGluayBsaW5rZW5kPSJtb25pdG9yaW5nLXBnLXN0YXQtaW8tdmlldyI+ Ci0gICAgICAgIDxzdHJ1Y3RuYW1lPnBnX3N0YXRfaW88L3N0cnVjdG5hbWU+PC9saW5rPiBmb3Ig dGhlCisgICAgICAgIDxzdHJ1Y3RuYW1lPnBnX3N0YXRfaW88L3N0cnVjdG5hbWU+PC9saW5rPiBh bmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ibW9uaXRvcmluZy1wZy1zdGF0LWlvLWhpc3RvZ3Jh bS12aWV3Ij4KKyAgICAgICAgPHN0cnVjdG5hbWU+cGdfc3RhdF9pb19oaXN0b2dyYW08L3N0cnVj dG5hbWU+PC9saW5rPiBmb3IgdGhlCiAgICAgICAgIDx2YXJuYW1lPm9iamVjdDwvdmFybmFtZT4g PGxpdGVyYWw+d2FsPC9saXRlcmFsPiBhbmQgaW4gdGhlIG91dHB1dCBvZgogICAgICAgICB0aGUg PGxpbmsgbGlua2VuZD0icGctc3RhdC1nZXQtYmFja2VuZC1pbyI+CiAgICAgICAgIDxmdW5jdGlv bj5wZ19zdGF0X2dldF9iYWNrZW5kX2lvKCk8L2Z1bmN0aW9uPjwvbGluaz4gZnVuY3Rpb24gZm9y IHRoZQpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCBiL2RvYy9zcmMv c2dtbC9tb25pdG9yaW5nLnNnbWwKaW5kZXggODg0NTBmYWNlYmQuLjIxYWNlZGJkMzk0IDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9t b25pdG9yaW5nLnNnbWwKQEAgLTQ5Myw2ICs0OTMsMTcgQEAgcG9zdGdyZXMgICAyNzA5MyAgMC4w ICAwLjAgIDMwMDk2ICAyNzUyID8gICAgICAgIFNzICAgMTE6MzQgICAwOjAwIHBvc3RncmVzOiBz ZXIKICAgICAgPC9lbnRyeT4KICAgICAgPC9yb3c+CiAKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRy eT48c3RydWN0bmFtZT5wZ19zdGF0X2lvX2hpc3RvZ3JhbTwvc3RydWN0bmFtZT48aW5kZXh0ZXJt PjxwcmltYXJ5PnBnX3N0YXRfaW9faGlzdG9ncmFtPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwvZW50 cnk+CisgICAgICA8ZW50cnk+CisgICAgICAgT25lIHJvdyBmb3IgZWFjaCBjb21iaW5hdGlvbiBv ZiBiYWNrZW5kIHR5cGUsIGNvbnRleHQsIHRhcmdldCBvYmplY3QsCisgICAgICAgSU8gb3BlcmF0 aW9uIHR5cGUgYW5kIGxhdGVuY3kgYnVja2V0IChpbiBtaWNyb3NlY29uZHMpIGNvbnRhaW5pbmcK KyAgICAgICBjbHVzdGVyLXdpZGUgSS9PIHN0YXRpc3RpY3MuCisgICAgICAgU2VlIDxsaW5rIGxp bmtlbmQ9Im1vbml0b3JpbmctcGctc3RhdC1pby1oaXN0b2dyYW0tdmlldyI+CisgICAgICAgPHN0 cnVjdG5hbWU+cGdfc3RhdF9pb19oaXN0b2dyYW08L3N0cnVjdG5hbWU+PC9saW5rPiBmb3IgZGV0 YWlscy4KKyAgICAgPC9lbnRyeT4KKyAgICAgPC9yb3c+CisKICAgICAgPHJvdz4KICAgICAgIDxl bnRyeT48c3RydWN0bmFtZT5wZ19zdGF0X3JlcGxpY2F0aW9uX3Nsb3RzPC9zdHJ1Y3RuYW1lPjxp bmRleHRlcm0+PHByaW1hcnk+cGdfc3RhdF9yZXBsaWNhdGlvbl9zbG90czwvcHJpbWFyeT48L2lu ZGV4dGVybT48L2VudHJ5PgogICAgICAgPGVudHJ5Pk9uZSByb3cgcGVyIHJlcGxpY2F0aW9uIHNs b3QsIHNob3dpbmcgc3RhdGlzdGljcyBhYm91dCB0aGUKQEAgLTY5MCw3ICs3MDEsNyBAQCBwb3N0 Z3JlcyAgIDI3MDkzICAwLjAgIDAuMCAgMzAwOTYgIDI3NTIgPyAgICAgICAgU3MgICAxMTozNCAg IDA6MDAgcG9zdGdyZXM6IHNlcgogCiAgIDxwYXJhPgogICAgVGhlIDxzdHJ1Y3RuYW1lPnBnX3N0 YXRfaW88L3N0cnVjdG5hbWU+IGFuZAotICAgPHN0cnVjdG5hbWU+cGdfc3RhdGlvXzwvc3RydWN0 bmFtZT4gc2V0IG9mIHZpZXdzIGFyZSB1c2VmdWwgZm9yIGRldGVybWluaW5nCisgICA8c3RydWN0 bmFtZT5wZ19zdGF0aW9faGlzdG9ncmFtPC9zdHJ1Y3RuYW1lPiBzZXQgb2Ygdmlld3MgYXJlIHVz ZWZ1bCBmb3IgZGV0ZXJtaW5pbmcKICAgIHRoZSBlZmZlY3RpdmVuZXNzIG9mIHRoZSBidWZmZXIg Y2FjaGUuIFRoZXkgY2FuIGJlIHVzZWQgdG8gY2FsY3VsYXRlIGEgY2FjaGUKICAgIGhpdCByYXRp by4gTm90ZSB0aGF0IHdoaWxlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4n cyBJL08KICAgIHN0YXRpc3RpY3MgY2FwdHVyZSBtb3N0IGluc3RhbmNlcyBpbiB3aGljaCB0aGUg a2VybmVsIHdhcyBpbnZva2VkIGluIG9yZGVyCkBAIC02OTksNiArNzEwLDggQEAgcG9zdGdyZXMg ICAyNzA5MyAgMC4wICAwLjAgIDMwMDk2ICAyNzUyID8gICAgICAgIFNzICAgMTE6MzQgICAwOjAw IHBvc3RncmVzOiBzZXIKICAgIFVzZXJzIGFyZSBhZHZpc2VkIHRvIHVzZSB0aGUgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPgogICAgc3RhdGlzdGljcyB2aWV3cyBpbiBjb21i aW5hdGlvbiB3aXRoIG9wZXJhdGluZyBzeXN0ZW0gdXRpbGl0aWVzIGZvciBhIG1vcmUKICAgIGNv bXBsZXRlIHBpY3R1cmUgb2YgdGhlaXIgZGF0YWJhc2UncyBJL08gcGVyZm9ybWFuY2UuCisgICBG dXJ0aGVybW9yZSB0aGUgPHN0cnVjdG5hbWU+cGdfc3RhdF9pb19oaXN0b2dyYW08L3N0cnVjdG5h bWU+IHZpZXcgY2FuIGJlIGhlbHBmdWwKKyAgIGlkZW50aWZpbmcgbGF0ZW5jeSBvdXRsaWVycyBm b3Igc3BlY2lmaWMgSS9PIG9wZXJhdGlvbnMuCiAgIDwvcGFyYT4KIAogIDwvc2VjdDI+CkBAIC0z MTE4LDYgKzMxMzEsMjQ4IEBAIGRlc2NyaXB0aW9uIHwgV2FpdGluZyBmb3IgYSBuZXdseSBpbml0 aWFsaXplZCBXQUwgZmlsZSB0byByZWFjaCBkdXJhYmxlIHN0b3JhZ2UKIAogIDwvc2VjdDI+CiAK KyA8c2VjdDIgaWQ9Im1vbml0b3JpbmctcGctc3RhdC1pby1oaXN0b2dyYW0tdmlldyI+CisgIDx0 aXRsZT48c3RydWN0bmFtZT5wZ19zdGF0X2lvPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisKKyAgPGlu ZGV4dGVybT4KKyAgIDxwcmltYXJ5PnBnX3N0YXRfaW9faGlzdG9ncmFtPC9wcmltYXJ5PgorICA8 L2luZGV4dGVybT4KKworICA8cGFyYT4KKyAgIFRoZSA8c3RydWN0bmFtZT5wZ19zdGF0X2lvX2hp c3RvZ3JhbTwvc3RydWN0bmFtZT4gdmlldyB3aWxsIGNvbnRhaW4gb25lIHJvdyBmb3IgZWFjaAor ICAgY29tYmluYXRpb24gb2YgYmFja2VuZCB0eXBlLCB0YXJnZXQgSS9PIG9iamVjdCwgYW5kIEkv TyBjb250ZXh0LCBJTyBvcGVyYXRpb24KKyAgIHR5cGUsIGJ1Y2tldCBsYXRlbmN5IGNsdXN0ZXIt d2lkZSBJL08gc3RhdGlzdGljcy4gQ29tYmluYXRpb25zIHdoaWNoIGRvIG5vdCBtYWtlIHNlbnNl CisgICBhcmUgb21pdHRlZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQ3VycmVudGx5LCBJ L08gb24gcmVsYXRpb25zIChlLmcuIHRhYmxlcywgaW5kZXhlcykgYW5kIFdBTCBhY3Rpdml0eSBh cmUKKyAgIHRyYWNrZWQuIEhvd2V2ZXIsIHJlbGF0aW9uIEkvTyB3aGljaCBieXBhc3NlcyBzaGFy ZWQgYnVmZmVycworICAgKGUuZy4gd2hlbiBtb3ZpbmcgYSB0YWJsZSBmcm9tIG9uZSB0YWJsZXNw YWNlIHRvIGFub3RoZXIpIGlzIGN1cnJlbnRseQorICAgbm90IHRyYWNrZWQuCisgIDwvcGFyYT4K KworICA8dGFibGUgaWQ9InBnLXN0YXQtaW8taGlzdG9ncmFtLXZpZXciIHhyZWZsYWJlbD0icGdf c3RhdF9pbyI+CisgICA8dGl0bGU+PHN0cnVjdG5hbWU+cGdfc3RhdF9pb19oaXN0b2dyYW08L3N0 cnVjdG5hbWU+IFZpZXc8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIxIj4KKyAgICA8dGhlYWQ+ CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+Cisg ICAgICAgPHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgICBDb2x1bW4gVHlw ZQorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRGVzY3JpcHRpb24KKyAg ICAgICA8L3BhcmE+CisgICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICA8L3RoZWFkPgor ICAgIDx0Ym9keT4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxl X2VudHJ5Ij4KKyAgICAgICA8cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAg IDxzdHJ1Y3RmaWVsZD5iYWNrZW5kX3R5cGU8L3N0cnVjdGZpZWxkPiA8dHlwZT50ZXh0PC90eXBl PgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVHlwZSBvZiBiYWNrZW5k IChlLmcuIGJhY2tncm91bmQgd29ya2VyLCBhdXRvdmFjdXVtIHdvcmtlcikuIFNlZSA8bGluawor ICAgICAgICBsaW5rZW5kPSJtb25pdG9yaW5nLXBnLXN0YXQtYWN0aXZpdHktdmlldyI+CisgICAg ICAgIDxzdHJ1Y3RuYW1lPnBnX3N0YXRfYWN0aXZpdHk8L3N0cnVjdG5hbWU+PC9saW5rPiBmb3Ig bW9yZSBpbmZvcm1hdGlvbgorICAgICAgICBvbiA8dmFybmFtZT5iYWNrZW5kX3R5cGU8L3Zhcm5h bWU+cy4gU29tZQorICAgICAgICA8dmFybmFtZT5iYWNrZW5kX3R5cGU8L3Zhcm5hbWU+cyBkbyBu b3QgYWNjdW11bGF0ZSBJL08gb3BlcmF0aW9uCisgICAgICAgIHN0YXRpc3RpY3MgYW5kIHdpbGwg bm90IGJlIGluY2x1ZGVkIGluIHRoZSB2aWV3LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvZW50 cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxv Z190YWJsZV9lbnRyeSI+CisgICAgICAgPHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgor ICAgICAgICA8c3RydWN0ZmllbGQ+b2JqZWN0PC9zdHJ1Y3RmaWVsZD4gPHR5cGU+dGV4dDwvdHlw ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRhcmdldCBvYmplY3Qg b2YgYW4gSS9PIG9wZXJhdGlvbi4gUG9zc2libGUgdmFsdWVzIGFyZToKKyAgICAgICA8aXRlbWl6 ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8 bGl0ZXJhbD5yZWxhdGlvbjwvbGl0ZXJhbD46IFBlcm1hbmVudCByZWxhdGlvbnMuCisgICAgICAg ICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAg ICAgIDxwYXJhPgorICAgICAgICAgIDxsaXRlcmFsPnRlbXAgcmVsYXRpb248L2xpdGVyYWw+OiBU ZW1wb3JhcnkgcmVsYXRpb25zLgorICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVt PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8bGl0ZXJh bD53YWw8L2xpdGVyYWw+OiBXcml0ZSBBaGVhZCBMb2dzLgorICAgICAgICAgPC9wYXJhPgorICAg ICAgICA8L2xpc3RpdGVtPgorICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgIDwvcGFyYT4K KyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkg cm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+CisgICAgICAgPHBhcmEgcm9sZT0iY29sdW1uX2Rl ZmluaXRpb24iPgorICAgICAgICA8c3RydWN0ZmllbGQ+Y29udGV4dDwvc3RydWN0ZmllbGQ+IDx0 eXBlPnRleHQ8L3R5cGU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBU aGUgY29udGV4dCBvZiBhbiBJL08gb3BlcmF0aW9uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgorICAg ICAgIDwvcGFyYT4KKyAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8bGl0ZXJhbD5ub3JtYWw8L2xpdGVyYWw+OiBUaGUg ZGVmYXVsdCBvciBzdGFuZGFyZAorICAgICAgICAgIDx2YXJuYW1lPmNvbnRleHQ8L3Zhcm5hbWU+ IGZvciBhIHR5cGUgb2YgSS9PIG9wZXJhdGlvbi4gRm9yCisgICAgICAgICAgZXhhbXBsZSwgYnkg ZGVmYXVsdCwgcmVsYXRpb24gZGF0YSBpcyByZWFkIGludG8gYW5kIHdyaXR0ZW4gb3V0IGZyb20K KyAgICAgICAgICBzaGFyZWQgYnVmZmVycy4gVGh1cywgcmVhZHMgYW5kIHdyaXRlcyBvZiByZWxh dGlvbiBkYXRhIHRvIGFuZCBmcm9tCisgICAgICAgICAgc2hhcmVkIGJ1ZmZlcnMgYXJlIHRyYWNr ZWQgaW4gPHZhcm5hbWU+Y29udGV4dDwvdmFybmFtZT4KKyAgICAgICAgICA8bGl0ZXJhbD5ub3Jt YWw8L2xpdGVyYWw+LgorICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAg ICAgICA8bGlzdGl0ZW0+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8bGl0ZXJhbD5pbml0 PC9saXRlcmFsPjogSS9PIG9wZXJhdGlvbnMgcGVyZm9ybWVkIHdoaWxlIGNyZWF0aW5nIHRoZQor ICAgICAgICAgIFdBTCBzZWdtZW50cyBhcmUgdHJhY2tlZCBpbiA8dmFybmFtZT5jb250ZXh0PC92 YXJuYW1lPgorICAgICAgICAgIDxsaXRlcmFsPmluaXQ8L2xpdGVyYWw+LgorICAgICAgICAgPC9w YXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICA8 cGFyYT4KKyAgICAgICAgICA8bGl0ZXJhbD52YWN1dW08L2xpdGVyYWw+OiBJL08gb3BlcmF0aW9u cyBwZXJmb3JtZWQgb3V0c2lkZSBvZiBzaGFyZWQKKyAgICAgICAgICBidWZmZXJzIHdoaWxlIHZh Y3V1bWluZyBhbmQgYW5hbHl6aW5nIHBlcm1hbmVudCByZWxhdGlvbnMuIFRlbXBvcmFyeQorICAg ICAgICAgIHRhYmxlIHZhY3V1bXMgdXNlIHRoZSBzYW1lIGxvY2FsIGJ1ZmZlciBwb29sIGFzIG90 aGVyIHRlbXBvcmFyeSB0YWJsZQorICAgICAgICAgIEkvTyBvcGVyYXRpb25zIGFuZCBhcmUgdHJh Y2tlZCBpbiA8dmFybmFtZT5jb250ZXh0PC92YXJuYW1lPgorICAgICAgICAgIDxsaXRlcmFsPm5v cm1hbDwvbGl0ZXJhbD4uCisgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxsaXRlcmFsPmJ1 bGtyZWFkPC9saXRlcmFsPjogQ2VydGFpbiBsYXJnZSByZWFkIEkvTyBvcGVyYXRpb25zCisgICAg ICAgICAgZG9uZSBvdXRzaWRlIG9mIHNoYXJlZCBidWZmZXJzLCBmb3IgZXhhbXBsZSwgYSBzZXF1 ZW50aWFsIHNjYW4gb2YgYQorICAgICAgICAgIGxhcmdlIHRhYmxlLgorICAgICAgICAgPC9wYXJh PgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICA8cGFy YT4KKyAgICAgICAgICA8bGl0ZXJhbD5idWxrd3JpdGU8L2xpdGVyYWw+OiBDZXJ0YWluIGxhcmdl IHdyaXRlIEkvTyBvcGVyYXRpb25zCisgICAgICAgICAgZG9uZSBvdXRzaWRlIG9mIHNoYXJlZCBi dWZmZXJzLCBzdWNoIGFzIDxjb21tYW5kPkNPUFk8L2NvbW1hbmQ+LgorICAgICAgICAgPC9wYXJh PgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgPC9l bnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRh bG9nX3RhYmxlX2VudHJ5Ij4KKyAgICAgICA8cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+ CisgICAgICAgIDxzdHJ1Y3RmaWVsZD5pb190eXBlPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+dGV4dDwv dHlwZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFR5cGUgb2YgSU8g b3BlcmF0aW9uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBGSVhNRSEKKyAgICAgICA8L3BhcmE+Cisg ICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJv bGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPgorICAgICAgIDxwYXJhIHJvbGU9ImNvbHVtbl9kZWZp bml0aW9uIj4KKyAgICAgICAgPHN0cnVjdGZpZWxkPmJ1Y2tldF9sYXRlbmN5X3VzPC9zdHJ1Y3Rm aWVsZD4gPHR5cGU+YmlnaW50PC90eXBlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgVGhlIGhpZ2hlciB2YWx1ZSBvZiBsYXRlbmN5IGJ1Y2tldCAoaW4gbWljcm9zZWNv bmRzKS4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAg ICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPgorICAgICAg IDxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICAgPHN0cnVjdGZpZWxkPmJ1 Y2tldF9jb3VudDwvc3RydWN0ZmllbGQ+IDx0eXBlPmJpZ2ludDwvdHlwZT4KKyAgICAgICA8L3Bh cmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIE51bWVyIG9mIHRpbWVzIGxhdGVuY3kgb2YgdGhl IEkvTyBvcGVyYXRpb24gaGl0IHRoaXMgc3BlY2lmaWMgYnVja2V0ICh3aXRoCisgICAgICAgIHVw IHRvIDx2YXJuYW1lPmJ1Y2tldF9sYXRlbmN5X3VzPC92YXJuYW1lPiBtaWNyb3NlY29uZHMpLgor ICAgICAgIDwvcGFyYT4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+ CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+CisgICAgICAgPHBhcmEg cm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgICA8c3RydWN0ZmllbGQ+c3RhdHNfcmVz ZXQ8L3N0cnVjdGZpZWxkPiA8dHlwZT50aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmU8L3R5cGU+Cisg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaW1lIGF0IHdoaWNoIHRoZXNl IHN0YXRpc3RpY3Mgd2VyZSBsYXN0IHJlc2V0LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvZW50 cnk+CisgICAgIDwvcm93PgorICAgIDwvdGJvZHk+CisgICA8L3Rncm91cD4KKyAgPC90YWJsZT4K KworICA8cGFyYT4KKyAgIFNvbWUgYmFja2VuZCB0eXBlcyBuZXZlciBwZXJmb3JtIEkvTyBvcGVy YXRpb25zIG9uIHNvbWUgSS9PIG9iamVjdHMgYW5kL29yCisgICBpbiBzb21lIEkvTyBjb250ZXh0 cy4gVGhlc2Ugcm93cyBhcmUgb21pdHRlZCBmcm9tIHRoZSB2aWV3LiBGb3IgZXhhbXBsZSwgdGhl CisgICBjaGVja3BvaW50ZXIgZG9lcyBub3QgY2hlY2twb2ludCB0ZW1wb3JhcnkgdGFibGVzLCBz byB0aGVyZSB3aWxsIGJlIG5vIHJvd3MKKyAgIGZvciA8dmFybmFtZT5iYWNrZW5kX3R5cGU8L3Zh cm5hbWU+IDxsaXRlcmFsPmNoZWNrcG9pbnRlcjwvbGl0ZXJhbD4gYW5kCisgICA8dmFybmFtZT5v YmplY3Q8L3Zhcm5hbWU+IDxsaXRlcmFsPnRlbXAgcmVsYXRpb248L2xpdGVyYWw+LgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBJbiBhZGRpdGlvbiwgc29tZSBJL08gb3BlcmF0aW9ucyB3aWxs IG5ldmVyIGJlIHBlcmZvcm1lZCBlaXRoZXIgYnkgY2VydGFpbgorICAgYmFja2VuZCB0eXBlcyBv ciBvbiBjZXJ0YWluIEkvTyBvYmplY3RzIGFuZC9vciBpbiBjZXJ0YWluIEkvTyBjb250ZXh0cy4K KyAgIFRoZXNlIGNlbGxzIHdpbGwgYmUgTlVMTC4gRm9yIGV4YW1wbGUsIHRlbXBvcmFyeSB0YWJs ZXMgYXJlIG5vdAorICAgPGxpdGVyYWw+ZnN5bmM8L2xpdGVyYWw+ZWQsIHNvIDx2YXJuYW1lPmZz eW5jczwvdmFybmFtZT4gd2lsbCBiZSBOVUxMIGZvcgorICAgPHZhcm5hbWU+b2JqZWN0PC92YXJu YW1lPiA8bGl0ZXJhbD50ZW1wIHJlbGF0aW9uPC9saXRlcmFsPi4gQWxzbywgdGhlCisgICBiYWNr Z3JvdW5kIHdyaXRlciBkb2VzIG5vdCBwZXJmb3JtIHJlYWRzLCBzbyA8dmFybmFtZT5yZWFkczwv dmFybmFtZT4gd2lsbAorICAgYmUgTlVMTCBpbiByb3dzIGZvciA8dmFybmFtZT5iYWNrZW5kX3R5 cGU8L3Zhcm5hbWU+IDxsaXRlcmFsPmJhY2tncm91bmQKKyAgIHdyaXRlcjwvbGl0ZXJhbD4uCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEZvciB0aGUgPHZhcm5hbWU+b2JqZWN0PC92YXJuYW1l PiA8bGl0ZXJhbD53YWw8L2xpdGVyYWw+LAorICAgPHZhcm5hbWU+ZnN5bmNzPC92YXJuYW1lPiBh bmQgPHZhcm5hbWU+ZnN5bmNfdGltZTwvdmFybmFtZT4gdHJhY2sgdGhlCisgICBmc3luYyBhY3Rp dml0eSBvZiBXQUwgZmlsZXMgZG9uZSBpbiA8ZnVuY3Rpb24+aXNzdWVfeGxvZ19mc3luYzwvZnVu Y3Rpb24+LgorICAgPHZhcm5hbWU+d3JpdGVzPC92YXJuYW1lPiBhbmQgPHZhcm5hbWU+d3JpdGVf dGltZTwvdmFybmFtZT4KKyAgIHRyYWNrIHRoZSB3cml0ZSBhY3Rpdml0eSBvZiBXQUwgZmlsZXMg ZG9uZSBpbgorICAgPGZ1bmN0aW9uPlhMb2dXcml0ZTwvZnVuY3Rpb24+LgorICAgU2VlIDx4cmVm IGxpbmtlbmQ9IndhbC1jb25maWd1cmF0aW9uIi8+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICA8 L3BhcmE+CisKKyAgPHBhcmE+CisgICA8c3RydWN0bmFtZT5wZ19zdGF0X2lvX2hpc3RvZ3JhbTwv c3RydWN0bmFtZT4gY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkKKyAgIEkvTyBzdG9yYWdlIGlzc3Vl cworICAgRm9yIGV4YW1wbGU6CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAg ICAgPHBhcmE+CisgICAgICBQcmVzZW5jZSBvZiBhYm5vcm1hbGx5IGhpZ2ggbGF0ZW5jeSBmb3Ig PHZhcm5hbWU+ZnN5bmNzPC92YXJuYW1lPiBtaWdodAorICAgICAgaW5kaWNhdGUgSS9PIHNhdHVy YXRpb24sIG92ZXJzdWJzY3JpcHRpb24gb3IgaGFyZHdhcmUgY29ubmVjdGl2aXR5IGlzc3Vlcy4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFy YT4KKyAgICAgIFVudXN1YWxseSBoaWdoIGxhdGVuY3kgZm9yIDx2YXJuYW1lPmZzeW5jczwvdmFy bmFtZT4gb24gc3RhbmRieSdzIHN0YXJ0dXAKKyAgICAgIGJhY2tlbmQgdHlwZSwgbWlnaHQgYmUg cmVzcG9uc2libGUgZm9yIGhpZ2ggZHVyYXRpb24gb2YgY29tbWl0cyBpbgorICAgICAgc3luY2hy b25vdXMgcmVwbGljYXRpb24gc2V0dXBzLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4K KyAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3BhcmE+CisKKyAgPG5vdGU+CisgICA8cGFyYT4KKyAg ICBDb2x1bW5zIHRyYWNraW5nIEkvTyB3YWl0IHRpbWUgd2lsbCBvbmx5IGJlIG5vbi16ZXJvIHdo ZW4KKyAgICA8eHJlZiBsaW5rZW5kPSJndWMtdHJhY2staW8tdGltaW5nIi8+IGlzIGVuYWJsZWQu IFRoZSB1c2VyIHNob3VsZCBiZQorICAgIGNhcmVmdWwgd2hlbiByZWZlcmVuY2luZyB0aGVzZSBj b2x1bW5zIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlaXIKKyAgICBjb3JyZXNwb25kaW5nIEkvTyBv cGVyYXRpb25zIGluIGNhc2UgPHZhcm5hbWU+dHJhY2tfaW9fdGltaW5nPC92YXJuYW1lPgorICAg IHdhcyBub3QgZW5hYmxlZCBmb3IgdGhlIGVudGlyZSB0aW1lIHNpbmNlIHRoZSBsYXN0IHN0YXRz IHJlc2V0LgorICAgPC9wYXJhPgorICA8L25vdGU+CisgPC9zZWN0Mj4KKwogIDxzZWN0MiBpZD0i bW9uaXRvcmluZy1wZy1zdGF0LWJnd3JpdGVyLXZpZXciPgogICA8dGl0bGU+PHN0cnVjdG5hbWU+ cGdfc3RhdF9iZ3dyaXRlcjwvc3RydWN0bmFtZT48L3RpdGxlPgogCmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvd2FsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvd2FsLnNnbWwKaW5kZXggZjNiODZiMjZi ZTkuLjhiOGM0MDdlNjlmIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvd2FsLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL3dhbC5zZ21sCkBAIC04MzIsOCArODMyLDkgQEAKICAgIG9mIHRpbWVzIDxm dW5jdGlvbj5YTG9nV3JpdGU8L2Z1bmN0aW9uPiB3cml0ZXMgYW5kCiAgICA8ZnVuY3Rpb24+aXNz dWVfeGxvZ19mc3luYzwvZnVuY3Rpb24+IHN5bmNzIFdBTCBkYXRhIHRvIGRpc2sgYXJlIGFsc28K ICAgIGNvdW50ZWQgYXMgPHZhcm5hbWU+d3JpdGVzPC92YXJuYW1lPiBhbmQgPHZhcm5hbWU+ZnN5 bmNzPC92YXJuYW1lPgotICAgaW4gPHN0cnVjdG5hbWU+cGdfc3RhdF9pbzwvc3RydWN0bmFtZT4g Zm9yIHRoZSA8dmFybmFtZT5vYmplY3Q8L3Zhcm5hbWU+Ci0gICA8bGl0ZXJhbD53YWw8L2xpdGVy YWw+LCByZXNwZWN0aXZlbHkuCisgICBpbiA8c3RydWN0bmFtZT5wZ19zdGF0X2lvPC9zdHJ1Y3Ru YW1lPiBhbmQKKyAgIDxzdHJ1Y3RuYW1lPnBnX3N0YXRfaW9faGlzdG9ncmFtPC9zdHJ1Y3RuYW1l PiBmb3IgdGhlCisgICA8dmFybmFtZT5vYmplY3Q8L3Zhcm5hbWU+IDxsaXRlcmFsPndhbDwvbGl0 ZXJhbD4sIHJlc3BlY3RpdmVseS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IDc1NTNmMzFmZWYwLi5jNDRjNDE2NzY0NiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMTIxOSw2ICsxMjE5LDE3IEBAIFNFTEVD VAogICAgICAgIGIuc3RhdHNfcmVzZXQKIEZST00gcGdfc3RhdF9nZXRfaW8oKSBiOwogCitDUkVB VEUgVklFVyBwZ19zdGF0X2lvX2hpc3RvZ3JhbSBBUworU0VMRUNUCisgICAgICAgYi5iYWNrZW5k X3R5cGUsCisgICAgICAgYi5vYmplY3QsCisgICAgICAgYi5jb250ZXh0LAorICAgICAgIGIuaW9f dHlwZSwKKyAgICAgICBiLmJ1Y2tldF9sYXRlbmN5X3VzLAorICAgICAgIGIuYnVja2V0X2NvdW50 LAorICAgICAgIGIuc3RhdHNfcmVzZXQKK0ZST00gcGdfc3RhdF9nZXRfaW9faGlzdG9ncmFtKCkg YjsKKwogQ1JFQVRFIFZJRVcgcGdfc3RhdF93YWwgQVMKICAgICBTRUxFQ1QKICAgICAgICAgdy53 YWxfcmVjb3JkcywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3Rh dF9pby4gYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfaW8uCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X2lvLmMgYi9zcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS9wZ3N0YXRfaW8uYwppbmRleCAyOGRlMjQ1MzhkYy4uN2NlNDNmNTllOGIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9pby5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9pby5jCkBAIC0xMDcsNiArMTA3LDQyIEBAIHBn c3RhdF9wcmVwYXJlX2lvX3RpbWUoYm9vbCB0cmFja19pb19ndWMpCiAJcmV0dXJuIGlvX3N0YXJ0 OwogfQogCisKKy8qCisgKiBDYWxjdWxhdGUgYnVja2V0IGluZGV4IGJhc2VkIG9uIHZhbHVlIGlu IG1pY3Jvc2Vjb25kcy4gV2UgaGF2ZSB1cCB0bworICogUEdTVEFUX0lPX0hJU1RfQlVDS0VUUyBi dWNrZXRzLgorICoJSWYgPCAxMjggKDJeNykgLT4gYnVja2V0IDAKKyAqCUlmIDwgMjU2ICgyXig3 KzEpKSAtPiBidWNrZXQgMQorICoJSWYgPCA1MTIgKDJeKDcrMikpIC0+IGJ1Y2tldCAyCisgKgku LgorICoJSWYgPCAyNjIxNDQgKDJeKDcrMTEpPTUxMm1zISkgLT4gYnVja2V0IDExCisgKi8KK3N0 YXRpYyBpbmxpbmUgaW50IGdldF9idWNrZXRfaW5kZXgodWludDMyX3QgdmFsKSB7CisjZGVmaW5l IE1JTl9QR19TVEFUX0lPX0hJU1RfTEFURU5DWSAxMjcKKwljb25zdCB1aW50MzJfdCBtYXhfaW5k ZXggPSBQR1NUQVRfSU9fSElTVF9CVUNLRVRTIC0gMTsKKwkvKgorCSAqIGhvcGVmdWxseSBjYWxj dWxhdGVkIHRvIGJlIDI1IGJ5IHRoZSBjb21waWxlcjoKKwkgKiBjbHooMTI3KSA9IGNseigwMTEx MTExMWIgb24gdWludDMyKSA9IDI1CisJICovCisJY29uc3QgdWludDMyX3QgbWluX2xhdGVuY3lf bGVhZGluZ196ZXJvcyA9CisJCXBnX2xlYWRpbmdfemVyb19iaXRzMzIoTUlOX1BHX1NUQVRfSU9f SElTVF9MQVRFTkNZKTsKKworCS8qCisJICogbWFrZSBzdXJlIHRoZSB0bXAgdmFsdWUgYXQgbGVh c3QgMTI3IChvdXIgbWluaW11bSBidWNrZXQgc2l6ZSkKKwkgKiBhcyBfX2J1aWx0aW5fY2x6IG1p Z2h0IHJldHVybiB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiBvcGVyYXRpbmcgb24gMAorCSAqLwor CXVpbnQzMl90IHRtcCA9IHZhbCB8IE1JTl9QR19TVEFUX0lPX0hJU1RfTEFURU5DWTsKKworCS8q IGNvdW50IGxlYWRpbmcgemVyb3MgKi8KKwlpbnQgbGVhZGluZ196ZXJvcyA9IHBnX2xlYWRpbmdf emVyb19iaXRzMzIodG1wKTsKKworCS8qIG5vcm1hbGl6ZSB0aGUgaW5kZXggKi8KKwl1aW50MzJf dCBpbmRleCA9IG1pbl9sYXRlbmN5X2xlYWRpbmdfemVyb3MgLSBsZWFkaW5nX3plcm9zOworCisJ LyogY2xhbXAgaXQgdG8gdGhlIG1heGltdW0gKi8KKwlyZXR1cm4gKGluZGV4ID4gbWF4X2luZGV4 KSA/IG1heF9pbmRleCA6IGluZGV4OworfQorCiAvKgogICogTGlrZSBwZ3N0YXRfY291bnRfaW9f b3AoKSBleGNlcHQgaXQgYWxzbyBhY2N1bXVsYXRlcyB0aW1lLgogICoKQEAgLTEyNSw2ICsxNjEs NyBAQCBwZ3N0YXRfY291bnRfaW9fb3BfdGltZShJT09iamVjdCBpb19vYmplY3QsIElPQ29udGV4 dCBpb19jb250ZXh0LCBJT09wIGlvX29wLAogCWlmICghSU5TVFJfVElNRV9JU19aRVJPKHN0YXJ0 X3RpbWUpKQogCXsKIAkJaW5zdHJfdGltZQlpb190aW1lOworCQlpbnQgYnVja2V0X2luZGV4Owog CiAJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoaW9fdGltZSk7CiAJCUlOU1RSX1RJTUVfU1VCVFJB Q1QoaW9fdGltZSwgc3RhcnRfdGltZSk7CkBAIC0xNTIsNiArMTg5LDEwIEBAIHBnc3RhdF9jb3Vu dF9pb19vcF90aW1lKElPT2JqZWN0IGlvX29iamVjdCwgSU9Db250ZXh0IGlvX2NvbnRleHQsIElP T3AgaW9fb3AsCiAJCUlOU1RSX1RJTUVfQUREKFBlbmRpbmdJT1N0YXRzLnBlbmRpbmdfdGltZXNb aW9fb2JqZWN0XVtpb19jb250ZXh0XVtpb19vcF0sCiAJCQkJCSAgIGlvX3RpbWUpOwogCisJCS8q IGNhbGN1bGF0ZSB0aGUgYnVja2V0X2luZGV4IGJhc2VkIG9uIGxhdGVuY3kgaW4gdXMgKi8KKwkJ YnVja2V0X2luZGV4ID0gZ2V0X2J1Y2tldF9pbmRleChJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhp b190aW1lKSk7CisJCVBlbmRpbmdJT1N0YXRzLnBlbmRpbmdfaGlzdF90aW1lX2J1Y2tldHNbaW9f b2JqZWN0XVtpb19jb250ZXh0XVtpb19vcF1bYnVja2V0X2luZGV4XSsrOworCiAJCS8qIEFkZCB0 aGUgcGVyLWJhY2tlbmQgY291bnQgKi8KIAkJcGdzdGF0X2NvdW50X2JhY2tlbmRfaW9fb3BfdGlt ZShpb19vYmplY3QsIGlvX2NvbnRleHQsIGlvX29wLAogCQkJCQkJCQkJCWlvX3RpbWUpOwpAQCAt MjIxLDYgKzI2MiwxMCBAQCBwZ3N0YXRfaW9fZmx1c2hfY2IoYm9vbCBub3dhaXQpCiAKIAkJCQli a3R5cGVfc2hzdGF0cy0+dGltZXNbaW9fb2JqZWN0XVtpb19jb250ZXh0XVtpb19vcF0gKz0KIAkJ CQkJSU5TVFJfVElNRV9HRVRfTUlDUk9TRUModGltZSk7CisKKwkJCQlmb3IoaW50IGIgPSAwOyBi IDwgUEdTVEFUX0lPX0hJU1RfQlVDS0VUUzsgYisrKQorCQkJCQlia3R5cGVfc2hzdGF0cy0+aGlz dF90aW1lX2J1Y2tldHNbaW9fb2JqZWN0XVtpb19jb250ZXh0XVtpb19vcF1bYl0gKz0KKwkJCQkJ CVBlbmRpbmdJT1N0YXRzLnBlbmRpbmdfaGlzdF90aW1lX2J1Y2tldHNbaW9fb2JqZWN0XVtpb19j b250ZXh0XVtpb19vcF1bYl07CiAJCQl9CiAJCX0KIAl9CkBAIC0yNzQsNiArMzE5LDMzIEBAIHBn c3RhdF9nZXRfaW9fb2JqZWN0X25hbWUoSU9PYmplY3QgaW9fb2JqZWN0KQogCXBnX3VucmVhY2hh YmxlKCk7CiB9CiAKK2NvbnN0IGNoYXIgKgorcGdzdGF0X2dldF9pb19vcF9uYW1lKElPT3AgaW9f b3ApCit7CisJc3dpdGNoIChpb19vcCkKKwl7CisJCWNhc2UgSU9PUF9FVklDVDoKKwkJCXJldHVy biAiZXZpY3QiOworCQljYXNlIElPT1BfRlNZTkM6CisJCQlyZXR1cm4gImZzeW5jIjsKKwkJY2Fz ZSBJT09QX0hJVDoKKwkJCXJldHVybiAiaGl0PyI7CisJCWNhc2UgSU9PUF9SRVVTRToKKwkJCXJl dHVybiAicmV1c2UiOworCQljYXNlIElPT1BfV1JJVEVCQUNLOgorCQkJcmV0dXJuICJ3cml0ZWJh Y2siOworCQljYXNlIElPT1BfRVhURU5EOgorCQkJcmV0dXJuICJleHRlbmQiOworCQljYXNlIElP T1BfUkVBRDoKKwkJCXJldHVybiAicmVhZCI7CisJCWNhc2UgSU9PUF9XUklURToKKwkJCXJldHVy biAid3JpdGUiOworCX0KKworCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgSU9PcCB2YWx1ZTog JWQiLCBpb19vcCk7CisJcGdfdW5yZWFjaGFibGUoKTsKK30KKwogdm9pZAogcGdzdGF0X2lvX2lu aXRfc2htZW1fY2Iodm9pZCAqc3RhdHMpCiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcGdzdGF0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5j CmluZGV4IDczY2EwYmIwYjdmLi5hMjNmMjdiMzJhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3Rh dGZ1bmNzLmMKQEAgLTEzNTYsNiArMTM1NiwyNCBAQCB0eXBlZGVmIGVudW0gaW9fc3RhdF9jb2wK IAlJT19OVU1fQ09MVU1OUywKIH0gaW9fc3RhdF9jb2w7CiAKKy8qCisqIFdoZW4gYWRkaW5nIGEg bmV3IGNvbHVtbiB0byB0aGUgcGdfc3RhdF9pbyB2aWV3IGFuZCB0aGUKKyogcGdfc3RhdF9nZXRf YmFja2VuZF9pbygpIGZ1bmN0aW9uLCBhZGQgYSBuZXcgZW51bSB2YWx1ZSBoZXJlIGFib3ZlCisq IElPX05VTV9DT0xVTU5TLgorKi8KK3R5cGVkZWYgZW51bSBoaXN0X2lvX3N0YXRfY29sCit7CisJ SElTVF9JT19DT0xfSU5WQUxJRCA9IC0xLAorCUhJU1RfSU9fQ09MX0JBQ0tFTkRfVFlQRSwKKwlI SVNUX0lPX0NPTF9PQkpFQ1QsCisJSElTVF9JT19DT0xfQ09OVEVYVCwKKwlISVNUX0lPX0NPTF9J T1RZUEUsCisJSElTVF9JT19DT0xfQlVDS0VUX1VTLAorCUhJU1RfSU9fQ09MX0NPVU5ULAorCUhJ U1RfSU9fQ09MX1JFU0VUX1RJTUUsCisJSElTVF9JT19OVU1fQ09MVU1OUworfSBoaXN0b3J5X2dl dF9oaXN0b3J5X3N0YXRlOworCiAvKgogICogV2hlbiBhZGRpbmcgYSBuZXcgSU9PcCwgYWRkIGEg bmV3IGlvX3N0YXRfY29sIGFuZCBhZGQgYSBjYXNlIHRvIHRoaXMKICAqIGZ1bmN0aW9uIHJldHVy bmluZyB0aGUgY29ycmVzcG9uZGluZyBpb19zdGF0X2NvbC4KQEAgLTE2MjcsNiArMTY0NSwxMTEg QEAgcGdfc3RhdF9nZXRfYmFja2VuZF9pbyhQR19GVU5DVElPTl9BUkdTKQogCXJldHVybiAoRGF0 dW0pIDA7CiB9CiAKKy8qCisgKiBwZ19zdGF0X2lvX2hpc3RvZ3JhbV9idWlsZF90dXBsZXMKKyAq CisgKiBIZWxwZXIgcm91dGluZSBmb3IgcGdfc3RhdF9nZXRfaW9faGlzdG9ncmFtKCkgYW5kIHBn X3N0YXRfZ2V0X2JhY2tlbmRfaW8oKVhYWAorICogZmlsbGluZyBhIHJlc3VsdCB0dXBsZXN0b3Jl IHdpdGggb25lIHR1cGxlIGZvciBlYWNoIG9iamVjdCBhbmQgZWFjaAorICogY29udGV4dCBzdXBw b3J0ZWQgYnkgdGhlIGNhbGxlciwgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mIGJrdHlwZV9zdGF0 cy4KKyAqLworc3RhdGljIHZvaWQKK3BnX3N0YXRfaW9faGlzdG9ncmFtX2J1aWxkX3R1cGxlcyhS ZXR1cm5TZXRJbmZvICpyc2luZm8sCisJCQkJCQlQZ1N0YXRfQmt0eXBlSU8gKmJrdHlwZV9zdGF0 cywKKwkJCQkJCUJhY2tlbmRUeXBlIGJrdHlwZSwKKwkJCQkJCVRpbWVzdGFtcFR6IHN0YXRfcmVz ZXRfdGltZXN0YW1wKQoreworCURhdHVtCQlia3R5cGVfZGVzYyA9IENTdHJpbmdHZXRUZXh0RGF0 dW0oR2V0QmFja2VuZFR5cGVEZXNjKGJrdHlwZSkpOworCisJZm9yIChpbnQgaW9fb2JqID0gMDsg aW9fb2JqIDwgSU9PQkpFQ1RfTlVNX1RZUEVTOyBpb19vYmorKykKKwl7CisJCWNvbnN0IGNoYXIg Km9ial9uYW1lID0gcGdzdGF0X2dldF9pb19vYmplY3RfbmFtZShpb19vYmopOworCisJCWZvciAo aW50IGlvX2NvbnRleHQgPSAwOyBpb19jb250ZXh0IDwgSU9DT05URVhUX05VTV9UWVBFUzsgaW9f Y29udGV4dCsrKQorCQl7CisJCQljb25zdCBjaGFyICpjb250ZXh0X25hbWUgPSBwZ3N0YXRfZ2V0 X2lvX2NvbnRleHRfbmFtZShpb19jb250ZXh0KTsKKworCQkJLyoKKwkJCSAqIFNvbWUgY29tYmlu YXRpb25zIG9mIEJhY2tlbmRUeXBlLCBJT09iamVjdCwgYW5kIElPQ29udGV4dCBhcmUKKwkJCSAq IG5vdCB2YWxpZCBmb3IgYW55IHR5cGUgb2YgSU9PcC4gSW4gc3VjaCBjYXNlcywgb21pdCB0aGUg ZW50aXJlCisJCQkgKiByb3cgZnJvbSB0aGUgdmlldy4KKwkJCSAqLworCQkJaWYgKCFwZ3N0YXRf dHJhY2tzX2lvX29iamVjdChia3R5cGUsIGlvX29iaiwgaW9fY29udGV4dCkpCisJCQkJY29udGlu dWU7CisKKwkJCWZvciAoaW50IGlvX29wID0gMDsgaW9fb3AgPCBJT09QX05VTV9UWVBFUzsgaW9f b3ArKykKKwkJCXsKKwkJCQljb25zdCBjaGFyICpvcF9uYW1lID0gcGdzdGF0X2dldF9pb19vcF9u YW1lKGlvX29wKTsKKworCQkJCWZvcihpbnQgYiA9IDA7IGIgPCBQR1NUQVRfSU9fSElTVF9CVUNL RVRTOyBiKyspIHsKKwkJCQkJRGF0dW0JCXZhbHVlc1tISVNUX0lPX05VTV9DT0xVTU5TXSA9IHsw fTsKKwkJCQkJYm9vbAkJbnVsbHNbSElTVF9JT19OVU1fQ09MVU1OU10gPSB7MH07CisKKwkJCQkJ dmFsdWVzW0hJU1RfSU9fQ09MX0JBQ0tFTkRfVFlQRV0gPSBia3R5cGVfZGVzYzsKKwkJCQkJdmFs dWVzW0hJU1RfSU9fQ09MX09CSkVDVF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKG9ial9uYW1lKTsK KwkJCQkJdmFsdWVzW0hJU1RfSU9fQ09MX0NPTlRFWFRdID0gQ1N0cmluZ0dldFRleHREYXR1bShj b250ZXh0X25hbWUpOworCQkJCQl2YWx1ZXNbSElTVF9JT19DT0xfSU9UWVBFXSA9IENTdHJpbmdH ZXRUZXh0RGF0dW0ob3BfbmFtZSk7CisKKwkJCQkJLyoKKwkJCQkJICogdGhpcyBidWNrZXQncyBt YXggbGF0ZW5jeToKKwkJCQkJICogMl43ID0gTUlOX1BHX1NUQVRfSU9fSElTVF9MQVRFTkNZID0g MTI4KHVzKQorCQkJCQkgKi8KKwkJCQkJdmFsdWVzW0hJU1RfSU9fQ09MX0JVQ0tFVF9VU10gPSBJ bnQ2NEdldERhdHVtKDEgPDwgKDcgKyBiKSk7CisKKwkJCQkJLyogYnVja2V0IGNvdW50ICovCisJ CQkJCXZhbHVlc1tISVNUX0lPX0NPTF9DT1VOVF0gPSBJbnQ2NEdldERhdHVtKAorCQkJCQkJYmt0 eXBlX3N0YXRzLT5oaXN0X3RpbWVfYnVja2V0c1tpb19vYmpdW2lvX2NvbnRleHRdW2lvX29wXVti XSk7CisKKwkJCQkJaWYgKHN0YXRfcmVzZXRfdGltZXN0YW1wICE9IDApCisJCQkJCQl2YWx1ZXNb SElTVF9JT19DT0xfUkVTRVRfVElNRV0gPSBUaW1lc3RhbXBUekdldERhdHVtKHN0YXRfcmVzZXRf dGltZXN0YW1wKTsKKwkJCQkJZWxzZQorCQkJCQkJbnVsbHNbSElTVF9JT19DT0xfUkVTRVRfVElN RV0gPSB0cnVlOworCisJCQkJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0 LCByc2luZm8tPnNldERlc2MsCisJCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKKwkJCQl9CisJCQl9 CisJCX0KKwl9Cit9CisKK0RhdHVtCitwZ19zdGF0X2dldF9pb19oaXN0b2dyYW0oUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2luZm87CisJUGdTdGF0X0lPICAqYmFja2Vu ZHNfaW9fc3RhdHM7CisKKwlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisJcnNpbmZv ID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOworCisJYmFja2VuZHNfaW9f c3RhdHMgPSBwZ3N0YXRfZmV0Y2hfc3RhdF9pbygpOworCisJZm9yIChpbnQgYmt0eXBlID0gMDsg Ymt0eXBlIDwgQkFDS0VORF9OVU1fVFlQRVM7IGJrdHlwZSsrKQorCXsKKwkJUGdTdGF0X0JrdHlw ZUlPICpia3R5cGVfc3RhdHMgPSAmYmFja2VuZHNfaW9fc3RhdHMtPnN0YXRzW2JrdHlwZV07CisK KwkJLyoKKwkJICogSW4gQXNzZXJ0IGJ1aWxkcywgd2UgY2FuIGFmZm9yZCBhbiBleHRyYSBsb29w IHRocm91Z2ggYWxsIG9mIHRoZQorCQkgKiBjb3VudGVycyAoaW4gcGdfc3RhdF9pb19idWlsZF90 dXBsZXMoKSksIGNoZWNraW5nIHRoYXQgb25seQorCQkgKiBleHBlY3RlZCBzdGF0cyBhcmUgbm9u LXplcm8sIHNpbmNlIGl0IGtlZXBzIHRoZSBub24tQXNzZXJ0IGNvZGUKKwkJICogY2xlYW5lci4K KwkJICovCisJCUFzc2VydChwZ3N0YXRfYmt0eXBlX2lvX3N0YXRzX3ZhbGlkKGJrdHlwZV9zdGF0 cywgYmt0eXBlKSk7CisKKwkJLyoKKwkJICogRm9yIHRob3NlIEJhY2tlbmRUeXBlcyB3aXRob3V0 IElPIE9wZXJhdGlvbiBzdGF0cywgc2tpcAorCQkgKiByZXByZXNlbnRpbmcgdGhlbSBpbiB0aGUg dmlldyBhbHRvZ2V0aGVyLgorCQkgKi8KKwkJaWYgKCFwZ3N0YXRfdHJhY2tzX2lvX2JrdHlwZShi a3R5cGUpKQorCQkJY29udGludWU7CisKKwkJLyogc2F2ZSB0dXBsZXMgd2l0aCBkYXRhIGZyb20g dGhpcyBQZ1N0YXRfQmt0eXBlSU8gKi8KKwkJcGdfc3RhdF9pb19oaXN0b2dyYW1fYnVpbGRfdHVw bGVzKHJzaW5mbywgYmt0eXBlX3N0YXRzLCBia3R5cGUsCisJCQkJCQkJCWJhY2tlbmRzX2lvX3N0 YXRzLT5zdGF0X3Jlc2V0X3RpbWVzdGFtcCk7CisJfQorCisJcmV0dXJuIChEYXR1bSkgMDsKK30K KwogLyoKICAqIHBnX3N0YXRfd2FsX2J1aWxkX3R1cGxlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKaW5kZXggODk0YjZhMWI2ZDYuLjMyMTAyNTQ5OTk2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKQEAgLTYwMjYsNiArNjAyNiwxNSBAQAogICBwcm9hcmduYW1lcyA9PiAne2JhY2tlbmRfdHlw ZSxvYmplY3QsY29udGV4dCxyZWFkcyxyZWFkX2J5dGVzLHJlYWRfdGltZSx3cml0ZXMsd3JpdGVf Ynl0ZXMsd3JpdGVfdGltZSx3cml0ZWJhY2tzLHdyaXRlYmFja190aW1lLGV4dGVuZHMsZXh0ZW5k X2J5dGVzLGV4dGVuZF90aW1lLGhpdHMsZXZpY3Rpb25zLHJldXNlcyxmc3luY3MsZnN5bmNfdGlt ZSxzdGF0c19yZXNldH0nLAogICBwcm9zcmMgPT4gJ3BnX3N0YXRfZ2V0X2lvJyB9LAogCit7IG9p ZCA9PiAnNjE0OScsIGRlc2NyID0+ICdzdGF0aXN0aWNzOiBwZXIgYmFja2VuZCB0eXBlIElPIGxh dGVuY3kgaGlzdG9ncmFtJywKKyAgcHJvbmFtZSA9PiAncGdfc3RhdF9nZXRfaW9faGlzdG9ncmFt JywgcHJvcm93cyA9PiAnMzAnLCBwcm9yZXRzZXQgPT4gJ3QnLAorICBwcm92b2xhdGlsZSA9PiAn dicsIHByb3BhcmFsbGVsID0+ICdyJywgcHJvcmV0dHlwZSA9PiAncmVjb3JkJywKKyAgcHJvYXJn dHlwZXMgPT4gJycsCisgIHByb2FsbGFyZ3R5cGVzID0+ICd7dGV4dCx0ZXh0LHRleHQsdGV4dCxp bnQ4LGludDgsdGltZXN0YW1wdHp9JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tvLG8sbyxvLG8sbyxv fScsCisgIHByb2FyZ25hbWVzID0+ICd7YmFja2VuZF90eXBlLG9iamVjdCxjb250ZXh0LGlvX3R5 cGUsYnVja2V0X2xhdGVuY3lfdXMsYnVja2V0X2NvdW50LHN0YXRzX3Jlc2V0fScsCisgIHByb3Ny YyA9PiAncGdfc3RhdF9nZXRfaW9faGlzdG9ncmFtJyB9LAorCiB7IG9pZCA9PiAnNjM4NicsIGRl c2NyID0+ICdzdGF0aXN0aWNzOiBiYWNrZW5kIElPIHN0YXRpc3RpY3MnLAogICBwcm9uYW1lID0+ ICdwZ19zdGF0X2dldF9iYWNrZW5kX2lvJywgcHJvcm93cyA9PiAnNScsIHByb3JldHNldCA9PiAn dCcsCiAgIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcGFyYWxsZWwgPT4gJ3InLCBwcm9yZXR0eXBl ID0+ICdyZWNvcmQnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGdzdGF0LmggYi9zcmMvaW5j bHVkZS9wZ3N0YXQuaAppbmRleCBmZmY3ZWNjMjUzMy4uNjViN2I3Mjk2Y2EgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3Bnc3RhdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCkBAIC0zMjIs MTEgKzMyMiwyMyBAQCB0eXBlZGVmIGVudW0gSU9PcAogCSgoKHVuc2lnbmVkIGludCkgKGlvX29w KSkgPCBJT09QX05VTV9UWVBFUyAmJiBcCiAJICgodW5zaWduZWQgaW50KSAoaW9fb3ApKSA+PSBJ T09QX0VYVEVORCkKIAorLyoKKyAqIFRoaXMgc2hvdWxkIHJlcHJlc2VudCBiYWxhbmNlIGJldHdl ZW4gYmVpbmcgZmFzdCBhbmQgcHJvdmlkaW5nIHZhbHVlCisgKiB0byB0aGUgdXNlcnM6CisgKiAx LiBXZSB3YW50IHRvIGNvdmVyIHZhcmlvdXMgZmFzdCBhbmQgc2xvdyBkZXZpY2UgdHlwZXMgKDAu MW1zIC0gMTVtcykKKyAqIDIuIFdlIHdhbnQgdG8gYWxzbyBjb3ZlciBzcG9yYWRpYyBsb25nIHRh aWwgbGF0ZW5jaWVzIChoYXJkd2FyZSBpc3N1ZXMsCisgKiAgICBkZWxheWVkIGZzeW5jcywgc3R1 Y2sgSS9PKQorICogMy4gV2Ugd2FudCB0byBiZSBiZWxvdyBjYWNoZWxpbmUgc2l6ZSBoZXJlIHBy b2JhYmx5OgorICogICAgMTIgKiBzaXplb2YodWludDY0KSA9IDQ4IHdoaWNoIHNob3VsZCBiZSBs ZXNzIHRoYW4gY2FjaGVsaW5lIHNpemUgKDY0YikKKyAqLworI2RlZmluZSBQR1NUQVRfSU9fSElT VF9CVUNLRVRTIDEyCisKIHR5cGVkZWYgc3RydWN0IFBnU3RhdF9Ca3R5cGVJTwogewogCXVpbnQ2 NAkJYnl0ZXNbSU9PQkpFQ1RfTlVNX1RZUEVTXVtJT0NPTlRFWFRfTlVNX1RZUEVTXVtJT09QX05V TV9UWVBFU107CiAJUGdTdGF0X0NvdW50ZXIgY291bnRzW0lPT0JKRUNUX05VTV9UWVBFU11bSU9D T05URVhUX05VTV9UWVBFU11bSU9PUF9OVU1fVFlQRVNdOwogCVBnU3RhdF9Db3VudGVyIHRpbWVz W0lPT0JKRUNUX05VTV9UWVBFU11bSU9DT05URVhUX05VTV9UWVBFU11bSU9PUF9OVU1fVFlQRVNd OworCXVpbnQ2NAkJaGlzdF90aW1lX2J1Y2tldHNbSU9PQkpFQ1RfTlVNX1RZUEVTXVtJT0NPTlRF WFRfTlVNX1RZUEVTXVtJT09QX05VTV9UWVBFU11bUEdTVEFUX0lPX0hJU1RfQlVDS0VUU107CiB9 IFBnU3RhdF9Ca3R5cGVJTzsKIAogdHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X1BlbmRpbmdJTwpAQCAt MzM0LDYgKzM0Niw3IEBAIHR5cGVkZWYgc3RydWN0IFBnU3RhdF9QZW5kaW5nSU8KIAl1aW50NjQJ CWJ5dGVzW0lPT0JKRUNUX05VTV9UWVBFU11bSU9DT05URVhUX05VTV9UWVBFU11bSU9PUF9OVU1f VFlQRVNdOwogCVBnU3RhdF9Db3VudGVyIGNvdW50c1tJT09CSkVDVF9OVU1fVFlQRVNdW0lPQ09O VEVYVF9OVU1fVFlQRVNdW0lPT1BfTlVNX1RZUEVTXTsKIAlpbnN0cl90aW1lCXBlbmRpbmdfdGlt ZXNbSU9PQkpFQ1RfTlVNX1RZUEVTXVtJT0NPTlRFWFRfTlVNX1RZUEVTXVtJT09QX05VTV9UWVBF U107CisJdWludDY0CQlwZW5kaW5nX2hpc3RfdGltZV9idWNrZXRzW0lPT0JKRUNUX05VTV9UWVBF U11bSU9DT05URVhUX05VTV9UWVBFU11bSU9PUF9OVU1fVFlQRVNdW1BHU1RBVF9JT19ISVNUX0JV Q0tFVFNdOwogfSBQZ1N0YXRfUGVuZGluZ0lPOwogCiB0eXBlZGVmIHN0cnVjdCBQZ1N0YXRfSU8K QEAgLTYwNiw2ICs2MTksNyBAQCBleHRlcm4gdm9pZCBwZ3N0YXRfY291bnRfaW9fb3BfdGltZShJ T09iamVjdCBpb19vYmplY3QsIElPQ29udGV4dCBpb19jb250ZXh0LAogZXh0ZXJuIFBnU3RhdF9J TyAqcGdzdGF0X2ZldGNoX3N0YXRfaW8odm9pZCk7CiBleHRlcm4gY29uc3QgY2hhciAqcGdzdGF0 X2dldF9pb19jb250ZXh0X25hbWUoSU9Db250ZXh0IGlvX2NvbnRleHQpOwogZXh0ZXJuIGNvbnN0 IGNoYXIgKnBnc3RhdF9nZXRfaW9fb2JqZWN0X25hbWUoSU9PYmplY3QgaW9fb2JqZWN0KTsKK2V4 dGVybiBjb25zdCBjaGFyICpwZ3N0YXRfZ2V0X2lvX29wX25hbWUoSU9PcCBpb19vcCk7CiAKIGV4 dGVybiBib29sIHBnc3RhdF90cmFja3NfaW9fYmt0eXBlKEJhY2tlbmRUeXBlIGJrdHlwZSk7CiBl eHRlcm4gYm9vbCBwZ3N0YXRfdHJhY2tzX2lvX29iamVjdChCYWNrZW5kVHlwZSBia3R5cGUsCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3J0L3BnX2JpdHV0aWxzLmggYi9zcmMvaW5jbHVkZS9w b3J0L3BnX2JpdHV0aWxzLmgKaW5kZXggMzU3NjFmNTA5ZWMuLmY0NTZiY2VmMWJkIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9wb3J0L3BnX2JpdHV0aWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9y dC9wZ19iaXR1dGlscy5oCkBAIC0zMiw2ICszMiwzMyBAQCBleHRlcm4gUEdETExJTVBPUlQgY29u c3QgdWludDggcGdfbGVmdG1vc3Rfb25lX3Bvc1syNTZdOwogZXh0ZXJuIFBHRExMSU1QT1JUIGNv bnN0IHVpbnQ4IHBnX3JpZ2h0bW9zdF9vbmVfcG9zWzI1Nl07CiBleHRlcm4gUEdETExJTVBPUlQg Y29uc3QgdWludDggcGdfbnVtYmVyX29mX29uZXNbMjU2XTsKIAorCisvKgorICogcGdfbGVhZGlu Z196ZXJvX2JpdHMzMgorICoJCVJldHVybnMgdGhlIG51bWJlciBvZiBsZWFkaW5nIDAtYml0cyBp biB4LCBzdGFydGluZyBhdCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgcG9zaXRpb24uCisgKgkJ V29yZCBtdXN0IG5vdCBiZSAwIChhcyBpdCBpcyB1bmRlZmluZWQgYmVoYXZpb3IpLgorICovCitz dGF0aWMgaW5saW5lIGludAorcGdfbGVhZGluZ196ZXJvX2JpdHMzMih1aW50MzIgd29yZCkKK3sK KyNpZmRlZiBIQVZFX19CVUlMVElOX0NMWgorCUFzc2VydCh3b3JkICE9IDApOworCisJcmV0dXJu IF9fYnVpbHRpbl9jbHood29yZCk7CisjZWxzZQorCWludCBuID0gMzI7CisJdWludDMyIHk7CisJ aWYgKHdvcmQgPT0gMCkKKwkJcmV0dXJuIDMyOworCisJeSA9IHdvcmQgPj4gMTY7IGlmICh5ICE9 IDApIHsgbiAtPSAxNjsgd29yZCA9IHk7IH0KKwl5ID0gd29yZCA+PiA4OyAgaWYgKHkgIT0gMCkg eyBuIC09IDg7ICB3b3JkID0geTsgfQorCXkgPSB3b3JkID4+IDQ7ICBpZiAoeSAhPSAwKSB7IG4g LT0gNDsgIHdvcmQgPSB5OyB9CisJeSA9IHdvcmQgPj4gMjsgIGlmICh5ICE9IDApIHsgbiAtPSAy OyAgd29yZCA9IHk7IH0KKwl5ID0gd29yZCA+PiAxOyAgaWYgKHkgIT0gMCkgeyByZXR1cm4gbiAt IDI7IH0KKyNlbmRpZgorfQorCiAvKgogICogcGdfbGVmdG1vc3Rfb25lX3BvczMyCiAgKgkJUmV0 dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgc2V0IGJpdCBpbiAid29y ZCIsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IGY0ZWUyYmQ3NDU5Li44OGRj NzAzYmJkZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKQEAgLTE5NTEsNiArMTk1 MSwxNCBAQCBwZ19zdGF0X2lvfCBTRUxFQ1QgYmFja2VuZF90eXBlLAogICAgIGZzeW5jX3RpbWUs CiAgICAgc3RhdHNfcmVzZXQKICAgIEZST00gcGdfc3RhdF9nZXRfaW8oKSBiKGJhY2tlbmRfdHlw ZSwgb2JqZWN0LCBjb250ZXh0LCByZWFkcywgcmVhZF9ieXRlcywgcmVhZF90aW1lLCB3cml0ZXMs IHdyaXRlX2J5dGVzLCB3cml0ZV90aW1lLCB3cml0ZWJhY2tzLCB3cml0ZWJhY2tfdGltZSwgZXh0 ZW5kcywgZXh0ZW5kX2J5dGVzLCBleHRlbmRfdGltZSwgaGl0cywgZXZpY3Rpb25zLCByZXVzZXMs IGZzeW5jcywgZnN5bmNfdGltZSwgc3RhdHNfcmVzZXQpOworcGdfc3RhdF9pb19oaXN0b2dyYW18 IFNFTEVDVCBiYWNrZW5kX3R5cGUsCisgICAgb2JqZWN0LAorICAgIGNvbnRleHQsCisgICAgaW9f dHlwZSwKKyAgICBidWNrZXRfbGF0ZW5jeV91cywKKyAgICBidWNrZXRfY291bnQsCisgICAgc3Rh dHNfcmVzZXQKKyAgIEZST00gcGdfc3RhdF9nZXRfaW9faGlzdG9ncmFtKCkgYihiYWNrZW5kX3R5 cGUsIG9iamVjdCwgY29udGV4dCwgaW9fdHlwZSwgYnVja2V0X2xhdGVuY3lfdXMsIGJ1Y2tldF9j b3VudCwgc3RhdHNfcmVzZXQpOwogcGdfc3RhdF9wcm9ncmVzc19hbmFseXplfCBTRUxFQ1Qgcy5w aWQsCiAgICAgcy5kYXRpZCwKICAgICBkLmRhdG5hbWUsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3N0YXRzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Rh dHMub3V0CmluZGV4IGNkMDBmMzViZjdhLi40Yzk1ZjA5ZDY1MSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zdGF0cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zdGF0cy5vdXQKQEAgLTE3NjUsNiArMTc2NSwyOSBAQCBTRUxFQ1QgOm15X2lvX3N0YXRz X3ByZV9yZXNldCA+IDpteV9pb19zdGF0c19wb3N0X2JhY2tlbmRfcmVzZXQ7CiAgdAogKDEgcm93 KQogCistLSBDaGVjayB0aGF0IHBnX3N0YXRfaW9faGlzdG9ncmFtcyBzZWVzIHNvbWUgZ3Jvd2lu ZyBjb3VudHMgaW4gYnVja2V0cworLS0gV2UgY291bGQgYWxzbyB0cnkgd2l0aCBjaGVja3BvaW50 ZXIsIGJ1dCBpdCBvZnRlbiBydW5zIHdpdGggZnN5bmM9b2ZmCistLSBkdXJpbmcgdGVzdC4KK1NF VCB0cmFja19pb190aW1pbmcgVE8gJ29uJzsKK1NFTEVDVCBzdW0oYnVja2V0X2NvdW50KSBBUyBo aXN0X2J1Y2tldF9jb3VudF9zdW0gRlJPTSBwZ19zdGF0X2dldF9pb19oaXN0b2dyYW0oKQorV0hF UkUgYmFja2VuZF90eXBlPSdjbGllbnQgYmFja2VuZCcgQU5EIG9iamVjdD0ncmVsYXRpb24nIEFO RCBjb250ZXh0PSdub3JtYWwnIFxnc2V0CitDUkVBVEUgVEFCTEUgdGVzdF9pb19oaXN0KGlkIGJp Z2ludCk7CitJTlNFUlQgSU5UTyB0ZXN0X2lvX2hpc3QgU0VMRUNUIGdlbmVyYXRlX3Nlcmllcygx LCAxMDApIHM7CitTRUxFQ1QgcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CisgcGdfc3RhdF9m b3JjZV9uZXh0X2ZsdXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykK KworU0VMRUNUIHN1bShidWNrZXRfY291bnQpIEFTIGhpc3RfYnVja2V0X2NvdW50X3N1bTIgRlJP TSBwZ19zdGF0X2dldF9pb19oaXN0b2dyYW0oKQorV0hFUkUgYmFja2VuZF90eXBlPSdjbGllbnQg YmFja2VuZCcgQU5EIG9iamVjdD0ncmVsYXRpb24nIEFORCBjb250ZXh0PSdub3JtYWwnIFxnc2V0 CitTRUxFQ1QgOmhpc3RfYnVja2V0X2NvdW50X3N1bTIgPiA6aGlzdF9idWNrZXRfY291bnRfc3Vt OworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworUkVTRVQgdHJhY2tfaW9f dGltaW5nOwogLS0gQ2hlY2sgaW52YWxpZCBpbnB1dCBmb3IgcGdfc3RhdF9nZXRfYmFja2VuZF9p bygpCiBTRUxFQ1QgcGdfc3RhdF9nZXRfYmFja2VuZF9pbyhOVUxMKTsKICBwZ19zdGF0X2dldF9i YWNrZW5kX2lvIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHMuc3FsIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHMuc3FsCmluZGV4IDg3NjhlMGYyN2ZkLi4wNjNiMTAx MWQ3ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHMuc3FsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzLnNxbApAQCAtODQxLDYgKzg0MSwyMSBAQCBTRUxFQ1Qg c3VtKGV2aWN0aW9ucykgKyBzdW0ocmV1c2VzKSArIHN1bShleHRlbmRzKSArIHN1bShmc3luY3Mp ICsgc3VtKHJlYWRzKSArCiAgIEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF9pbyhwZ19iYWNrZW5k X3BpZCgpKSBcZ3NldAogU0VMRUNUIDpteV9pb19zdGF0c19wcmVfcmVzZXQgPiA6bXlfaW9fc3Rh dHNfcG9zdF9iYWNrZW5kX3Jlc2V0OwogCisKKy0tIENoZWNrIHRoYXQgcGdfc3RhdF9pb19oaXN0 b2dyYW1zIHNlZXMgc29tZSBncm93aW5nIGNvdW50cyBpbiBidWNrZXRzCistLSBXZSBjb3VsZCBh bHNvIHRyeSB3aXRoIGNoZWNrcG9pbnRlciwgYnV0IGl0IG9mdGVuIHJ1bnMgd2l0aCBmc3luYz1v ZmYKKy0tIGR1cmluZyB0ZXN0LgorU0VUIHRyYWNrX2lvX3RpbWluZyBUTyAnb24nOworU0VMRUNU IHN1bShidWNrZXRfY291bnQpIEFTIGhpc3RfYnVja2V0X2NvdW50X3N1bSBGUk9NIHBnX3N0YXRf Z2V0X2lvX2hpc3RvZ3JhbSgpCitXSEVSRSBiYWNrZW5kX3R5cGU9J2NsaWVudCBiYWNrZW5kJyBB TkQgb2JqZWN0PSdyZWxhdGlvbicgQU5EIGNvbnRleHQ9J25vcm1hbCcgXGdzZXQKK0NSRUFURSBU QUJMRSB0ZXN0X2lvX2hpc3QoaWQgYmlnaW50KTsKK0lOU0VSVCBJTlRPIHRlc3RfaW9faGlzdCBT RUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgczsKK1NFTEVDVCBwZ19zdGF0X2ZvcmNlX25l eHRfZmx1c2goKTsKK1NFTEVDVCBzdW0oYnVja2V0X2NvdW50KSBBUyBoaXN0X2J1Y2tldF9jb3Vu dF9zdW0yIEZST00gcGdfc3RhdF9nZXRfaW9faGlzdG9ncmFtKCkKK1dIRVJFIGJhY2tlbmRfdHlw ZT0nY2xpZW50IGJhY2tlbmQnIEFORCBvYmplY3Q9J3JlbGF0aW9uJyBBTkQgY29udGV4dD0nbm9y bWFsJyBcZ3NldAorU0VMRUNUIDpoaXN0X2J1Y2tldF9jb3VudF9zdW0yID4gOmhpc3RfYnVja2V0 X2NvdW50X3N1bTsKK1JFU0VUIHRyYWNrX2lvX3RpbWluZzsKKwogLS0gQ2hlY2sgaW52YWxpZCBp bnB1dCBmb3IgcGdfc3RhdF9nZXRfYmFja2VuZF9pbygpCiBTRUxFQ1QgcGdfc3RhdF9nZXRfYmFj a2VuZF9pbyhOVUxMKTsKIFNFTEVDVCBwZ19zdGF0X2dldF9iYWNrZW5kX2lvKDApOwotLSAKMi40 My4wCgo= --000000000000322dc60649474e9d--