Received: from localhost (maia-2.hub.org [200.46.204.187]) by postgresql.org (Postfix) with ESMTP id D07939FB2A4 for ; Sat, 12 May 2007 22:32:38 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.187]) (amavisd-maia, port 10024) with ESMTP id 76136-04 for ; Sat, 12 May 2007 22:32:24 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.5 Received: from westnet.com (westnet.com [216.187.52.2]) by postgresql.org (Postfix) with ESMTP id C02AF9FB2A3 for ; Sat, 12 May 2007 22:32:29 -0300 (ADT) Received: from westnet.com (localhost [127.0.0.1]) by westnet.com (8.14.0/8.14.0) with ESMTP id l4D1WTke028634 for ; Sat, 12 May 2007 21:32:29 -0400 (EDT) Received: from localhost (gsmith@localhost) by westnet.com (8.14.0/8.13.2/Submit) with ESMTP id l4D1WTea028631 for ; Sat, 12 May 2007 21:32:29 -0400 (EDT) X-Authentication-Warning: westnet.com: gsmith owned process doing -bs Date: Sat, 12 May 2007 21:32:29 -0400 (EDT) From: Greg Smith X-X-Sender: gsmith@westnet.com To: pgsql-patches@postgresql.org Subject: Re: Automatic adjustment of bgwriter_lru_maxpages In-Reply-To: <461E108D.6080709@enterprisedb.com> Message-ID: References: <20070227141958.638D.ITAGAKI.TAKAHIRO@oss.ntt.co.jp> <20070227170613.GK29041@nasby.net> <20070305131046.C4A6.ITAGAKI.TAKAHIRO@oss.ntt.co.jp> <461E108D.6080709@enterprisedb.com> MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-559023410-758783491-1179012583=:9615" Content-ID: X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200705/143 X-Sequence-Number: 2243 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---559023410-758783491-1179012583=:9615 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; FORMAT=flowed Content-ID: Attached are two patches that try to recast the ideas of Itagaki Takahiro's auto bgwriter_lru_maxpages patch in the direction I think this code needs to move. Epic-length commentary follows. The original code came from before there was a pg_stat_bgwriter. The first patch (buf-alloc-stats) takes the two most interesting pieces of data the original patch collected, the number of buffers allocated recently and the number that the clients wrote out, and ties all that into the new stats structure. With this patch applied, you can get a feel for things like churn/turnover in the buffer pool that were very hard to quantify before. Also, it makes it easy to measure how well your background writer is doing at writing buffers so the clients don't have to. Applying this would complete one of my personal goals for the 8.3 release, which was having stats to track every type of buffer write. I split this out because I think it's very useful to have regardless of whether the automatic tuning portion is accepted, and I think these smaller patches make the review easier. The main thing I would recommend someone check is how am_bg_writer is (mis?)used here. I spliced some of the debugging-only code from the original patch, and I can't tell if the result is a robust enough approach to solving the problem of having every client indirectly report their activity to the background writer. Other than that, I think this code is ready for review and potentially comitting. The second patch (limit-lru) adds on top of that a constraint of the LRU writer so that it doesn't do any more work than it has to. Note that I left verbose debugging code in here because I'm much less confident this patch is complete. It predicts upcoming buffer allocations using a 16-period weighted moving average of recent activity, which you can think of as the last 3.2 seconds at the default interval. After testing a few systems that seemed a decent compromise of smoothing in both directions. I found the 2X overallocation fudge factor of the original patch way too aggressive, and just pick the larger of the most recent allocation amount or the smoothed value. The main thing that throws off the allocation estimation is when you hit a checkpoint, which can give a big spike after the background writer returns to BgBufferSync and notices all the buffers that were allocated during the checkpoint write; the code then tries to find more buffers it can recycle than it needs to. Since the checkpoint itself normally leaves a large wake of reusable buffers behind it, I didn't find this to be a serious problem. There's another communication issue here, which is that SyncOneBuffer needs to return more information about the buffer than it currently does once it gets it locked. The background writer needs to know more than just if it was written to tune itself. The original patch used a clever trick for this which worked but I found confusing. I happen to have a bunch of other background writer tuning code I'm working on, and I had to come up with a more robust way to communicate buffer internals back via this channel. I used that code here, it's a bitmask setup similar to how flags like BM_DIRTY are used. It's overkill for solving this particular problem, but I think the interface is clean and it helps support future enhancements in intelligent background writing. Now we get to the controversial part. The original patch removed the bgwriter_lru_maxpages parameter and updated the documentation accordingly. I didn't do that here. The reason is that after playing around in this area I'm not convinced yet I can satisfy all the tuning scenarios I'd like to be able to handle that way. I describe this patch as enforcing a constraint instead; it allows you to set the LRU parameters much higher than was reasonable before without having to be as concerned about the LRU writer wasting resources. I already brought up some issues in this area on -hackers ( http://archives.postgresql.org/pgsql-hackers/2007-04/msg00781.php ) but my work hasn't advanced as fast as I'd hoped. I wanted to submit what I've finished anyway because I think any approach here is going to have cope with the issues addressed in these two patches, and I'm happy now with how they're solved here. It's only a one-line delete to disable the LRU limiting behavior of the second patch, at which point it's strictly internals code with no expected functional impact that alternate approaches might be built on. -- * Greg Smith gsmith@gregsmith.com http://www.gregsmith.com Baltimore, MD ---559023410-758783491-1179012583=:9615 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME=limit-lru.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME=limit-lru.patch SW5kZXg6IHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2QzL3Bnc3FsL2N2 cy9wZ3NxbC1sb2NhbC9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZt Z3IuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjENCmRpZmYgLWMg LXIxLjEuMS4xIGJ1Zm1nci5jDQoqKiogc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvYnVmbWdyLmMJNyBNYXkgMjAwNyAwMTo0ODo0OSAtMDAwMAkxLjEu MS4xDQotLS0gc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMJ MTIgTWF5IDIwMDcgMjI6MjY6NTYgLTAwMDANCioqKioqKioqKioqKioqKg0K KioqIDY3LDcyICoqKioNCi0tLSA2Nyw3OSAtLS0tDQogIC8qIGludGVydmFs IGZvciBjYWxsaW5nIEFic29yYkZzeW5jUmVxdWVzdHMgaW4gQnVmZmVyU3lu YyAqLw0KICAjZGVmaW5lIFdSSVRFU19QRVJfQUJTT1JCCQkxMDAwDQogIA0K KyAvKiBSZXR1cm4gY29kZXMgZGVzY3JpYmluZyB3aGF0IFN5bmNPbmVCdWZm ZXIgZm91bmQgb3V0IGFuZCBkaWQgd2l0aCB0aGUNCisgICogYnVmZmVyIGl0 IHByb2Nlc3NlZC4gIFRoZSB3YXkgY29kZSBoZXJlIHRlc3RzIGZvciB3aGV0 aGVyIGEgd3JpdGUNCisgICogd2FzIGRvbmUgZGVwZW5kcyBvbiBCVUZfV1JJ VFRFTiBiZWluZyB0aGUgaGlnaGVzdCBiaXQgdmFsdWUgaW4gdGhpcyBzZXQu ICovDQorICNkZWZpbmUgQlVGX1dSSVRURU4JCQkJMHg4MA0KKyAjZGVmaW5l IEJVRl9DTEVBTgkJCQkweDQwDQorICNkZWZpbmUgQlVGX1JFVVNBQkxFCQkJ MHgyMA0KKyAjZGVmaW5lIEJVRl9VU0FHRV9DT1VOVAkJCTB4MUYNCiAgDQog IC8qIEdVQyB2YXJpYWJsZXMgKi8NCiAgYm9vbAkJemVyb19kYW1hZ2VkX3Bh Z2VzID0gZmFsc2U7DQoqKioqKioqKioqKioqKioNCioqKiAxMDEsMTA3ICoq KioNCiAgc3RhdGljIHZvaWQgUGluQnVmZmVyX0xvY2tlZCh2b2xhdGlsZSBC dWZmZXJEZXNjICpidWYpOw0KICBzdGF0aWMgdm9pZCBVbnBpbkJ1ZmZlcih2 b2xhdGlsZSBCdWZmZXJEZXNjICpidWYsDQogIAkJCWJvb2wgZml4T3duZXIs IGJvb2wgbm9ybWFsQWNjZXNzKTsNCiEgc3RhdGljIGJvb2wgU3luY09uZUJ1 ZmZlcihpbnQgYnVmX2lkLCBib29sIHNraXBfcGlubmVkKTsNCiAgc3RhdGlj IHZvaWQgV2FpdElPKHZvbGF0aWxlIEJ1ZmZlckRlc2MgKmJ1Zik7DQogIHN0 YXRpYyBib29sIFN0YXJ0QnVmZmVySU8odm9sYXRpbGUgQnVmZmVyRGVzYyAq YnVmLCBib29sIGZvcklucHV0KTsNCiAgc3RhdGljIHZvaWQgVGVybWluYXRl QnVmZmVySU8odm9sYXRpbGUgQnVmZmVyRGVzYyAqYnVmLCBib29sIGNsZWFy X2RpcnR5LA0KLS0tIDEwOCwxMTQgLS0tLQ0KICBzdGF0aWMgdm9pZCBQaW5C dWZmZXJfTG9ja2VkKHZvbGF0aWxlIEJ1ZmZlckRlc2MgKmJ1Zik7DQogIHN0 YXRpYyB2b2lkIFVucGluQnVmZmVyKHZvbGF0aWxlIEJ1ZmZlckRlc2MgKmJ1 ZiwNCiAgCQkJYm9vbCBmaXhPd25lciwgYm9vbCBub3JtYWxBY2Nlc3MpOw0K ISBzdGF0aWMgaW50IFN5bmNPbmVCdWZmZXIoaW50IGJ1Zl9pZCwgYm9vbCBz a2lwX3JlY2VudGx5X3VzZWQpOw0KICBzdGF0aWMgdm9pZCBXYWl0SU8odm9s YXRpbGUgQnVmZmVyRGVzYyAqYnVmKTsNCiAgc3RhdGljIGJvb2wgU3RhcnRC dWZmZXJJTyh2b2xhdGlsZSBCdWZmZXJEZXNjICpidWYsIGJvb2wgZm9ySW5w dXQpOw0KICBzdGF0aWMgdm9pZCBUZXJtaW5hdGVCdWZmZXJJTyh2b2xhdGls ZSBCdWZmZXJEZXNjICpidWYsIGJvb2wgY2xlYXJfZGlydHksDQoqKioqKioq KioqKioqKioNCioqKiAxMDA3LDEwMTMgKioqKg0KICAJYWJzb3JiX2NvdW50 ZXIgPSBXUklURVNfUEVSX0FCU09SQjsNCiAgCXdoaWxlIChudW1fdG9fc2Nh bi0tID4gMCkNCiAgCXsNCiEgCQlpZiAoU3luY09uZUJ1ZmZlcihidWZfaWQs IGZhbHNlKSkNCiAgCQl7DQogIAkJCUJnV3JpdGVyU3RhdHMubV9idWZfd3Jp dHRlbl9jaGVja3BvaW50cysrOw0KICANCi0tLSAxMDE0LDEwMjAgLS0tLQ0K ICAJYWJzb3JiX2NvdW50ZXIgPSBXUklURVNfUEVSX0FCU09SQjsNCiAgCXdo aWxlIChudW1fdG9fc2Nhbi0tID4gMCkNCiAgCXsNCiEgCQlpZiAoU3luY09u ZUJ1ZmZlcihidWZfaWQsIGZhbHNlKT49QlVGX1dSSVRURU4pDQogIAkJew0K ICAJCQlCZ1dyaXRlclN0YXRzLm1fYnVmX3dyaXR0ZW5fY2hlY2twb2ludHMr KzsNCiAgDQoqKioqKioqKioqKioqKioNCioqKiAxMDQwLDEwNDcgKioqKg0K ICAJaW50CQkJYnVmX2lkMjsNCiAgCWludAkJCW51bV90b19zY2FuOw0KICAJ aW50CQkJbnVtX3dyaXR0ZW47DQohIAlpbnQJCQlyZWNlbnRfYWxsb2M7DQog IAlpbnQJCQludW1fY2xpZW50X3dyaXRlczsNCiAgDQogIAkvKiBNYWtlIHN1 cmUgd2UgY2FuIGhhbmRsZSB0aGUgcGluIGluc2lkZSBTeW5jT25lQnVmZmVy ICovDQogIAlSZXNvdXJjZU93bmVyRW5sYXJnZUJ1ZmZlcnMoQ3VycmVudFJl c291cmNlT3duZXIpOw0KLS0tIDEwNDcsMTA2MyAtLS0tDQogIAlpbnQJCQli dWZfaWQyOw0KICAJaW50CQkJbnVtX3RvX3NjYW47DQogIAlpbnQJCQludW1f d3JpdHRlbjsNCiEgDQohIAkvKiBTdGF0aXN0aWNzIHJldHVybmVkIGJ5IHRo ZSBmcmVlbGlzdCBzdHJhdGVneSBjb2RlICovDQogIAlpbnQJCQludW1fY2xp ZW50X3dyaXRlczsNCisgCWludAkJCXJlY2VudF9hbGxvYzsNCisgCQ0KKyAN CisgCS8qIFVzZWQgdG8gZXN0aW1hdGUgdGhlIHVwY29taW5nIExSVSBldmlj dGlvbiBhY3Rpdml0eSAqLw0KKyAJc3RhdGljIGludAlzbW9vdGhlZF9hbGxv YyA9IDA7DQorIAlpbnQJCQl1cGNvbWluZ19hbGxvY19lc3RpbWF0ZTsNCisg CWludAkJCXJldXNhYmxlX2J1ZmZlcnM7DQorIAlpbnQJCQlidWZmZXJfc3Rh dGU7DQogIA0KICAJLyogTWFrZSBzdXJlIHdlIGNhbiBoYW5kbGUgdGhlIHBp biBpbnNpZGUgU3luY09uZUJ1ZmZlciAqLw0KICAJUmVzb3VyY2VPd25lckVu bGFyZ2VCdWZmZXJzKEN1cnJlbnRSZXNvdXJjZU93bmVyKTsNCioqKioqKioq KioqKioqKg0KKioqIDEwNzMsMTA3OSAqKioqDQogIAkJew0KICAJCQlpZiAo KytidWZfaWQxID49IE5CdWZmZXJzKQ0KICAJCQkJYnVmX2lkMSA9IDA7DQoh IAkJCWlmIChTeW5jT25lQnVmZmVyKGJ1Zl9pZDEsIGZhbHNlKSkNCiAgCQkJ ew0KICAJCQkJaWYgKCsrbnVtX3dyaXR0ZW4gPj0gYmd3cml0ZXJfYWxsX21h eHBhZ2VzKQ0KICAJCQkJew0KLS0tIDEwODksMTA5NSAtLS0tDQogIAkJew0K ICAJCQlpZiAoKytidWZfaWQxID49IE5CdWZmZXJzKQ0KICAJCQkJYnVmX2lk MSA9IDA7DQohIAkJCWlmIChTeW5jT25lQnVmZmVyKGJ1Zl9pZDEsIGZhbHNl KT49QlVGX1dSSVRURU4pDQogIAkJCXsNCiAgCQkJCWlmICgrK251bV93cml0 dGVuID49IGJnd3JpdGVyX2FsbF9tYXhwYWdlcykNCiAgCQkJCXsNCioqKioq KioqKioqKioqKg0KKioqIDEwOTIsMTA5NyAqKioqDQotLS0gMTEwOCwxMTQy IC0tLS0NCiAgCUJnV3JpdGVyU3RhdHMubV9idWZfYWxsb2MrPXJlY2VudF9h bGxvYzsNCiAgCUJnV3JpdGVyU3RhdHMubV9idWZfd3JpdHRlbl9jbGllbnQr PW51bV9jbGllbnRfd3JpdGVzOw0KICANCisgCS8qIEVzdGltYXRlIG51bWJl ciBvZiBidWZmZXJzIHRvIHdyaXRlIGJhc2VkIG9uIGEgc21vb3RoZWQgd2Vp Z2h0ZWQNCisgCSAqIGF2ZXJhZ2Ugb2YgcHJldmlvdXMgYW5kIHJlY2VudCBi dWZmZXIgYWxsb2NhdGlvbnMgKi8NCisgCXNtb290aGVkX2FsbG9jID0gc21v b3RoZWRfYWxsb2MgKiAxNSAvIDE2ICsgcmVjZW50X2FsbG9jIC8gMTY7DQor IA0KKyAJLyogRXhwZWN0IHdlIHdpbGwgc29vbiBuZWVkIGVpdGhlciB0aGUg c21vb3RoZWQgYW1vdW50IG9yIHRoZSByZWNlbnQgYWxsb2NhdGlvbiBhbW91 bnQsIA0KKyAJICogd2hpY2hldmVyIGlzIGxhcmdlciAqLw0KKyAJdXBjb21p bmdfYWxsb2NfZXN0aW1hdGUgPSBzbW9vdGhlZF9hbGxvYzsNCisgCWlmIChy ZWNlbnRfYWxsb2MgPiB1cGNvbWluZ19hbGxvY19lc3RpbWF0ZSkNCisgCQl1 cGNvbWluZ19hbGxvY19lc3RpbWF0ZSA9IHJlY2VudF9hbGxvYzsNCisgDQor IAkvKioqKiBERUJVRyBzaG93IHRoZSBzbW9vdGhpbmcgaW4gYWN0aW9uICoq Ki8NCisgCWlmICgxKSAgDQorIAl7DQorIAkJc3RhdGljIGludCBjb3VudCA9 IDA7DQorIAkJc3RhdGljIGludCBhbGxvY1sxMF07DQorIAkJc3RhdGljIGlu dCBzbW9vdGhlZFsxMF07DQorIAkJYWxsb2NbY291bnQgJSAxMF09cmVjZW50 X2FsbG9jOw0KKyAJCXNtb290aGVkW2NvdW50ICUgMTBdPXNtb290aGVkX2Fs bG9jOw0KKyAJCWlmICgrK2NvdW50ICUgMTAgPT0gOSkNCisgCQkJew0KKyAJ CQllbG9nKExPRywiYWxsb2MgPSAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAl ZCAlZCIsDQorIAkJCWFsbG9jWzBdLGFsbG9jWzFdLGFsbG9jWzJdLGFsbG9j WzNdLGFsbG9jWzRdLA0KKyAJCQlhbGxvY1s1XSxhbGxvY1s2XSxhbGxvY1s3 XSxhbGxvY1s4XSxhbGxvY1s5XSk7DQorIAkJCWVsb2coTE9HLCJzbW9vdGhl ZCA9ICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkIiwNCisgCQkJc21v b3RoZWRbMF0sc21vb3RoZWRbMV0sc21vb3RoZWRbMl0sc21vb3RoZWRbM10s c21vb3RoZWRbNF0sDQorIAkJCXNtb290aGVkWzVdLHNtb290aGVkWzZdLHNt b290aGVkWzddLHNtb290aGVkWzhdLHNtb290aGVkWzldKTsNCisgCQkJfQ0K KyAJfQ0KKyANCiAgCS8qDQogIAkgKiBUaGlzIGxvb3AgY29uc2lkZXJzIG9u bHkgdW5waW5uZWQgYnVmZmVycyBjbG9zZSB0byB0aGUgY2xvY2sgc3dlZXAN CiAgCSAqIHBvaW50Lg0KKioqKioqKioqKioqKioqDQoqKiogMTEwMCwxMTM5 ICoqKioNCiAgCXsNCiAgCQludW1fdG9fc2NhbiA9IChpbnQpICgoTkJ1ZmZl cnMgKiBiZ3dyaXRlcl9scnVfcGVyY2VudCArIDk5KSAvIDEwMCk7DQogIAkJ bnVtX3dyaXR0ZW4gPSAwOw0KISANCiAgCQl3aGlsZSAobnVtX3RvX3NjYW4t LSA+IDApDQogIAkJew0KISAJCQlpZiAoU3luY09uZUJ1ZmZlcihidWZfaWQy LCB0cnVlKSkNCiAgCQkJew0KICAJCQkJaWYgKCsrbnVtX3dyaXR0ZW4gPj0g Ymd3cml0ZXJfbHJ1X21heHBhZ2VzKQ0KICAJCQkJew0KICAJCQkJCUJnV3Jp dGVyU3RhdHMubV9tYXh3cml0dGVuX2xydSsrOw0KICAJCQkJCWJyZWFrOw0K ICAJCQkJfQ0KICAJCQl9DQogIAkJCWlmICgrK2J1Zl9pZDIgPj0gTkJ1ZmZl cnMpDQogIAkJCQlidWZfaWQyID0gMDsNCiAgCQl9DQogIAkJQmdXcml0ZXJT dGF0cy5tX2J1Zl93cml0dGVuX2xydSArPSBudW1fd3JpdHRlbjsNCiAgCX0N CiAgfQ0KICANCiAgLyoNCiAgICogU3luY09uZUJ1ZmZlciAtLSBwcm9jZXNz IGEgc2luZ2xlIGJ1ZmZlciBkdXJpbmcgc3luY2luZy4NCiAgICoNCiEgICog SWYgc2tpcF9waW5uZWQgaXMgdHJ1ZSwgd2UgZG9uJ3Qgd3JpdGUgY3VycmVu dGx5LXBpbm5lZCBidWZmZXJzLCBub3INCiAgICogYnVmZmVycyBtYXJrZWQg cmVjZW50bHkgdXNlZCwgYXMgdGhlc2UgYXJlIG5vdCByZXBsYWNlbWVudCBj YW5kaWRhdGVzLg0KICAgKg0KISAgKiBSZXR1cm5zIHRydWUgaWYgYnVmZmVy IHdhcyB3cml0dGVuLCBlbHNlIGZhbHNlLgkoVGhpcyBjb3VsZCBiZSBpbiBl cnJvcg0KISAgKiBpZiBGbHVzaEJ1ZmZlcnMgZmluZHMgdGhlIGJ1ZmZlciBj bGVhbiBhZnRlciBsb2NraW5nIGl0LCBidXQgd2UgZG9uJ3QNCiEgICogY2Fy ZSBhbGwgdGhhdCBtdWNoLikNCiAgICoNCiAgICogTm90ZTogY2FsbGVyIG11 c3QgaGF2ZSBkb25lIFJlc291cmNlT3duZXJFbmxhcmdlQnVmZmVycy4NCiAg ICovDQohIHN0YXRpYyBib29sDQohIFN5bmNPbmVCdWZmZXIoaW50IGJ1Zl9p ZCwgYm9vbCBza2lwX3Bpbm5lZCkNCiAgew0KICAJdm9sYXRpbGUgQnVmZmVy RGVzYyAqYnVmSGRyID0gJkJ1ZmZlckRlc2NyaXB0b3JzW2J1Zl9pZF07DQog IA0KICAJLyoNCiAgCSAqIENoZWNrIHdoZXRoZXIgYnVmZmVyIG5lZWRzIHdy aXRpbmcuDQotLS0gMTE0NSwxMjA3IC0tLS0NCiAgCXsNCiAgCQludW1fdG9f c2NhbiA9IChpbnQpICgoTkJ1ZmZlcnMgKiBiZ3dyaXRlcl9scnVfcGVyY2Vu dCArIDk5KSAvIDEwMCk7DQogIAkJbnVtX3dyaXR0ZW4gPSAwOw0KISAJCXJl dXNhYmxlX2J1ZmZlcnMgPSAwOw0KICAJCXdoaWxlIChudW1fdG9fc2Nhbi0t ID4gMCkNCiAgCQl7DQohIAkJCWJ1ZmZlcl9zdGF0ZT1TeW5jT25lQnVmZmVy KGJ1Zl9pZDIsIHRydWUpOw0KISAJCQlpZiAoYnVmZmVyX3N0YXRlPj1CVUZf V1JJVFRFTikNCiAgCQkJew0KKyAJCQkJcmV1c2FibGVfYnVmZmVycysrOw0K ICAJCQkJaWYgKCsrbnVtX3dyaXR0ZW4gPj0gYmd3cml0ZXJfbHJ1X21heHBh Z2VzKQ0KICAJCQkJew0KICAJCQkJCUJnV3JpdGVyU3RhdHMubV9tYXh3cml0 dGVuX2xydSsrOw0KICAJCQkJCWJyZWFrOw0KICAJCQkJfQ0KICAJCQl9DQor IAkJCWVsc2UgaWYgKGJ1ZmZlcl9zdGF0ZSAmIEJVRl9SRVVTQUJMRSkgcmV1 c2FibGVfYnVmZmVycysrOw0KKyANCiAgCQkJaWYgKCsrYnVmX2lkMiA+PSBO QnVmZmVycykNCiAgCQkJCWJ1Zl9pZDIgPSAwOw0KKyANCisgCQkJLyogRXhp dCB3aGVuIHRhcmdldCBmb3IgdXBjb21pbmcgYWxsb2NhdGlvbnMgcmVhY2hl ZCAqLw0KKyAJCQlpZiAocmV1c2FibGVfYnVmZmVycz49dXBjb21pbmdfYWxs b2NfZXN0aW1hdGUpIGJyZWFrOw0KICAJCX0NCiAgCQlCZ1dyaXRlclN0YXRz Lm1fYnVmX3dyaXR0ZW5fbHJ1ICs9IG51bV93cml0dGVuOw0KKyANCisgCQlp ZiAoMSAmJiBudW1fd3JpdHRlbj4wKSAvKioqKiBERUJVRyBTaG93IHdoYXQg aGFwcGVuZWQgdGhpcyBwYXNzICovDQorIAkJCXsNCisgCQkJZWxvZyhMT0cs InNjYW5uZWQ9JWQgd3JpdHRlbj0lZCBjbGllbnQgd3JpdGU9JWQgYWxsb2Nf ZXN0PSVkIHJldXNhYmxlPSVkIiwNCisgCQkJCShpbnQpICgoTkJ1ZmZlcnMg KiBiZ3dyaXRlcl9scnVfcGVyY2VudCArIDk5KSAvIDEwMCkgLSBudW1fdG9f c2NhbiwNCisgCQkJCW51bV93cml0dGVuLG51bV9jbGllbnRfd3JpdGVzLHVw Y29taW5nX2FsbG9jX2VzdGltYXRlLHJldXNhYmxlX2J1ZmZlcnMpOw0KKyAJ CQl9DQorIA0KICAJfQ0KICB9DQogIA0KICAvKg0KICAgKiBTeW5jT25lQnVm ZmVyIC0tIHByb2Nlc3MgYSBzaW5nbGUgYnVmZmVyIGR1cmluZyBzeW5jaW5n Lg0KICAgKg0KISAgKiBJZiBza2lwX3JlY2VudGx5X3VzZWQgaXMgdHJ1ZSwg d2UgZG9uJ3Qgd3JpdGUgY3VycmVudGx5LXBpbm5lZCBidWZmZXJzLCBub3IN CiAgICogYnVmZmVycyBtYXJrZWQgcmVjZW50bHkgdXNlZCwgYXMgdGhlc2Ug YXJlIG5vdCByZXBsYWNlbWVudCBjYW5kaWRhdGVzLg0KICAgKg0KISAgKiBS ZXR1cm5zIGFuIGludGVnZXIgY29kZSBkZXNjcmliaW5nIGJvdGggdGhlIHN0 YXRlIHRoZSBidWZmZXIgd2FzDQohICAqIGluIHdoZW4gZXhhbWluZWQgYW5k IHdoYXQgd2FzIGRvbmUgd2l0aCBpdC4gIFRoZSBsb3dlci1vcmRlciBiaXRz DQohICAqIGFyZSBzZXQgdG8gdGhlIHVzYWdlX2NvdW50IG9mIHRoZSBidWZm ZXIsIGFuZCB0aGUgZm9sbG93aW5nDQohICAqIGJpdCBtYXNrcyBhcmUgc2V0 IGFjY29yZGluZ2x5OiAgQlVGX1dSSVRURU4sIEJVRl9DTEVBTiwgQlVGX1JF VVNBQkxFDQohICAqDQohICAqIChUaGlzIGNvdWxkIGJlIGluIGVycm9yIGlm IEZsdXNoQnVmZmVycyBmaW5kcyB0aGUgYnVmZmVyIGNsZWFuIGFmdGVyIA0K ISAgKiBsb2NraW5nIGl0LCBidXQgd2UgZG9uJ3QgY2FyZSBhbGwgdGhhdCBt dWNoLikNCiEgICogDQohICAqIFRoZSByZXN1bHRzIGFyZSBvcmRlcmVkIHN1 Y2ggdGhhdCB0aGUgc2ltcGxlIHRlc3QgZm9yIHdoZXRoZXIgYSBidWZmZXIg d2FzIA0KISAgKiB3cml0dGVuIGlzIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHJl dHVybiBjb2RlIGlzID49QlVGX1dSSVRURU4NCiAgICoNCiAgICogTm90ZTog Y2FsbGVyIG11c3QgaGF2ZSBkb25lIFJlc291cmNlT3duZXJFbmxhcmdlQnVm ZmVycy4NCiAgICovDQohIHN0YXRpYyBpbnQNCiEgU3luY09uZUJ1ZmZlcihp bnQgYnVmX2lkLCBib29sIHNraXBfcmVjZW50bHlfdXNlZCkNCiAgew0KICAJ dm9sYXRpbGUgQnVmZmVyRGVzYyAqYnVmSGRyID0gJkJ1ZmZlckRlc2NyaXB0 b3JzW2J1Zl9pZF07DQorIAlpbnQgYnVmZmVyX3N0YXRlOw0KICANCiAgCS8q DQogIAkgKiBDaGVjayB3aGV0aGVyIGJ1ZmZlciBuZWVkcyB3cml0aW5nLg0K KioqKioqKioqKioqKioqDQoqKiogMTE0NSwxMTYwICoqKioNCiAgCSAqIHVw Y29taW5nIGNoYW5nZXMgYW5kIHNvIHdlIGFyZSBub3QgcmVxdWlyZWQgdG8g d3JpdGUgc3VjaCBkaXJ0eSBidWZmZXIuDQogIAkgKi8NCiAgCUxvY2tCdWZI ZHIoYnVmSGRyKTsNCiAgCWlmICghKGJ1Zkhkci0+ZmxhZ3MgJiBCTV9WQUxJ RCkgfHwgIShidWZIZHItPmZsYWdzICYgQk1fRElSVFkpKQ0KICAJew0KICAJ CVVubG9ja0J1ZkhkcihidWZIZHIpOw0KISAJCXJldHVybiBmYWxzZTsNCiAg CX0NCiEgCWlmIChza2lwX3Bpbm5lZCAmJg0KISAJCShidWZIZHItPnJlZmNv dW50ICE9IDAgfHwgYnVmSGRyLT51c2FnZV9jb3VudCAhPSAwKSkNCiAgCXsN CiAgCQlVbmxvY2tCdWZIZHIoYnVmSGRyKTsNCiEgCQlyZXR1cm4gZmFsc2U7 DQogIAl9DQogIA0KICAJLyoNCi0tLSAxMjEzLDEyMzcgLS0tLQ0KICAJICog dXBjb21pbmcgY2hhbmdlcyBhbmQgc28gd2UgYXJlIG5vdCByZXF1aXJlZCB0 byB3cml0ZSBzdWNoIGRpcnR5IGJ1ZmZlci4NCiAgCSAqLw0KICAJTG9ja0J1 ZkhkcihidWZIZHIpOw0KKyANCisgCS8qIFN0YXJ0aW5nIHN0YXRlIHNheXMg dGhpcyBidWZmZXIgaXMgZGlydHksIG5vdCByZXVzYWJsZSwgYW5kIHVud3Jp dHRlbiAqLw0KKyAJYnVmZmVyX3N0YXRlID0gYnVmSGRyLT51c2FnZV9jb3Vu dDsNCisgDQogIAlpZiAoIShidWZIZHItPmZsYWdzICYgQk1fVkFMSUQpIHx8 ICEoYnVmSGRyLT5mbGFncyAmIEJNX0RJUlRZKSkNCisgCQlidWZmZXJfc3Rh dGV8PUJVRl9DTEVBTjsNCisgDQorIAlpZiAoYnVmSGRyLT5yZWZjb3VudCA9 PSAwICYmIGJ1Zkhkci0+dXNhZ2VfY291bnQgPT0gMCkgDQorIAkJYnVmZmVy X3N0YXRlfD1CVUZfUkVVU0FCTEU7DQorIAllbHNlIGlmIChza2lwX3JlY2Vu dGx5X3VzZWQpDQogIAl7DQogIAkJVW5sb2NrQnVmSGRyKGJ1Zkhkcik7DQoh IAkJcmV0dXJuIGJ1ZmZlcl9zdGF0ZTsNCiAgCX0NCiEgDQohIAlpZiAoYnVm ZmVyX3N0YXRlICYgQlVGX0NMRUFOKQ0KICAJew0KICAJCVVubG9ja0J1Zkhk cihidWZIZHIpOw0KISAJCXJldHVybiBidWZmZXJfc3RhdGU7DQogIAl9DQog IA0KICAJLyoNCioqKioqKioqKioqKioqKg0KKioqIDExNjksMTE3NSAqKioq DQogIAlMV0xvY2tSZWxlYXNlKGJ1Zkhkci0+Y29udGVudF9sb2NrKTsNCiAg CVVucGluQnVmZmVyKGJ1ZkhkciwgdHJ1ZSwgZmFsc2UgLyogZG9uJ3QgY2hh bmdlIGZyZWVsaXN0ICovICk7DQogIA0KISAJcmV0dXJuIHRydWU7DQogIH0N CiAgDQogIA0KLS0tIDEyNDYsMTI1MiAtLS0tDQogIAlMV0xvY2tSZWxlYXNl KGJ1Zkhkci0+Y29udGVudF9sb2NrKTsNCiAgCVVucGluQnVmZmVyKGJ1Zkhk ciwgdHJ1ZSwgZmFsc2UgLyogZG9uJ3QgY2hhbmdlIGZyZWVsaXN0ICovICk7 DQogIA0KISAJcmV0dXJuIGJ1ZmZlcl9zdGF0ZSB8IEJVRl9XUklUVEVOOw0K ICB9DQogIA0KICANCg== ---559023410-758783491-1179012583=:9615 Content-Type: APPLICATION/OCTET-STREAM; NAME=buf-alloc-stats.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME=buf-alloc-stats.patch SW5kZXg6IGRvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Byb2plY3RzL2N2c3Jvb3QvcGdz cWwvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS41MApkaWZmIC1jIC1yMS41MCBtb25pdG9yaW5nLnNnbWwK KioqIGRvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwJMjcgQXByIDIwMDcg MjA6MDg6NDMgLTAwMDAJMS41MAotLS0gZG9jL3NyYy9zZ21sL21vbml0b3Jp bmcuc2dtbAk3IE1heSAyMDA3IDAxOjMwOjE5IC0wMDAwCioqKioqKioqKioq KioqKgoqKiogMjUwLDI1OCAqKioqCiAgICAgICA8cm93PgogICAgICAgIDxl bnRyeT48c3RydWN0bmFtZT5wZ19zdGF0X2Jnd3JpdGVyPC8+PC9lbnRyeT4K ICAgICAgICA8ZW50cnk+T25lIHJvdyBvbmx5LCBzaG93aW5nIGNsdXN0ZXIt d2lkZSBzdGF0aXN0aWNzIGZyb20gdGhlCiEgICAgICAgYmFja2dyb3VuZCB3 cml0ZXI6IG51bWJlciBvZiBzY2hlZHVsZWQgY2hlY2twb2ludHMsIHJlcXVl c3RlZAohICAgICAgIGNoZWNrcG9pbnRzLCBidWZmZXJzIHdyaXR0ZW4gYnkg Y2hlY2twb2ludHMsIGxydS1zY2FucyBhbmQgYWxsLXNjYW5zLAohICAgICAg IGFuZCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBiZ3dyaXRlciBhYm9ydGVk IGEgcm91bmQgYmVjYXVzZSBpdCBoYWQKICAgICAgICB3cml0dGVuIHRvbyBt YW55IGJ1ZmZlcnMgZHVyaW5nIGxydS1zY2FucyBhbmQgYWxsLXNjYW5zLgog ICAgICAgPC9lbnRyeT4KICAgICAgIDwvcm93PgotLS0gMjUwLDI1OSAtLS0t CiAgICAgICA8cm93PgogICAgICAgIDxlbnRyeT48c3RydWN0bmFtZT5wZ19z dGF0X2Jnd3JpdGVyPC8+PC9lbnRyeT4KICAgICAgICA8ZW50cnk+T25lIHJv dyBvbmx5LCBzaG93aW5nIGNsdXN0ZXItd2lkZSBzdGF0aXN0aWNzIGZyb20g dGhlCiEgICAgICAgYmFja2dyb3VuZCB3cml0ZXIgYW5kIHNoYXJlZCBidWZm ZXIgcG9vbDogbnVtYmVyIG9mIHNjaGVkdWxlZCAKISAgICAgICBjaGVja3Bv aW50cywgcmVxdWVzdGVkIGNoZWNrcG9pbnRzLCBidWZmZXJzIHdyaXR0ZW4g YnkgY2hlY2twb2ludHMsIAohICAgICAgIGxydS1zY2FucywgYWxsLXNjYW5z LCBhbmQgY2xpZW50cywgdG90YWwgYnVmZmVycyBhbGxvY2F0ZWQsIGFuZCB0 aGUgCiEgICAgICAgbnVtYmVyIG9mIHRpbWVzIHRoZSBiZ3dyaXRlciBhYm9y dGVkIGEgcm91bmQgYmVjYXVzZSBpdCBoYWQKICAgICAgICB3cml0dGVuIHRv byBtYW55IGJ1ZmZlcnMgZHVyaW5nIGxydS1zY2FucyBhbmQgYWxsLXNjYW5z LgogICAgICAgPC9lbnRyeT4KICAgICAgIDwvcm93PgoqKioqKioqKioqKioq KioKKioqIDgxNSw4MjAgKioqKgotLS0gODE2LDgzOSAtLS0tCiAgICAgICA8 L3Jvdz4KICAKICAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PjxsaXRlcmFs PjxmdW5jdGlvbj5wZ19zdGF0X2dldF9iZ3dyaXRlcl9idWZfd3JpdHRlbl9j bGllbnQ8L2Z1bmN0aW9uPigpPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg PGVudHJ5Pjx0eXBlPmJpZ2ludDwvdHlwZT48L2VudHJ5PgorICAgICAgIDxl bnRyeT4KKyAgICAgICAgVGhlIG51bWJlciBvZiBidWZmZXJzIHdyaXR0ZW4g YnkgY2xpZW50cyBiZWNhdXNlIHRoZXkgbmVlZGVkCisgICAgICAgIHRvIGFs bG9jYXRlIGEgbmV3IGJ1ZmZlcgorICAgICAgIDwvZW50cnk+CisgICAgICA8 L3Jvdz4KKyAKKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PjxsaXRlcmFs PjxmdW5jdGlvbj5wZ19zdGF0X2dldF9iZ3dyaXRlcl9idWZfYWxsb2M8L2Z1 bmN0aW9uPigpPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0 eXBlPmJpZ2ludDwvdHlwZT48L2VudHJ5PgorICAgICAgIDxlbnRyeT4KKyAg ICAgICAgVGhlIHRvdGFsIG51bWJlciBvZiBidWZmZXJzIGFsbG9jYXRlZCBp bnRvIHRoZSBzaGFyZWQgYnVmZmVyIAorICAgICAgICBjYWNoZQorICAgICAg IDwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAKKyAgICAgIDxyb3c+CiAgICAg ICAgPGVudHJ5PjxsaXRlcmFsPjxmdW5jdGlvbj5wZ19zdGF0X2NsZWFyX3Nu YXBzaG90PC9mdW5jdGlvbj4oKTwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAg IDxlbnRyeT48dHlwZT52b2lkPC90eXBlPjwvZW50cnk+CiAgICAgICAgPGVu dHJ5PgpJbmRleDogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Mu c3FsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9wcm9qZWN0 cy9jdnNyb290L3Bnc3FsL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3Zp ZXdzLnNxbCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNwpkaWZmIC1jIC1y MS4zNyBzeXN0ZW1fdmlld3Muc3FsCioqKiBzcmMvYmFja2VuZC9jYXRhbG9n L3N5c3RlbV92aWV3cy5zcWwJMzAgTWFyIDIwMDcgMTg6MzQ6NTUgLTAwMDAJ MS4zNwotLS0gc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3Fs CTcgTWF5IDIwMDcgMDE6MzA6MjAgLTAwMDAKKioqKioqKioqKioqKioqCioq KiAzNzMsMzc2ICoqKioKICAJCQlwZ19zdGF0X2dldF9iZ3dyaXRlcl9idWZf d3JpdHRlbl9scnUoKSBBUyBidWZmZXJzX2xydSwKICAJCQlwZ19zdGF0X2dl dF9iZ3dyaXRlcl9idWZfd3JpdHRlbl9hbGwoKSBBUyBidWZmZXJzX2FsbCwK ICAJCQlwZ19zdGF0X2dldF9iZ3dyaXRlcl9tYXh3cml0dGVuX2xydSgpIEFT IG1heHdyaXR0ZW5fbHJ1LAohIAkJCXBnX3N0YXRfZ2V0X2Jnd3JpdGVyX21h eHdyaXR0ZW5fYWxsKCkgQVMgbWF4d3JpdHRlbl9hbGw7Ci0tLSAzNzMsMzc5 IC0tLS0KICAJCQlwZ19zdGF0X2dldF9iZ3dyaXRlcl9idWZfd3JpdHRlbl9s cnUoKSBBUyBidWZmZXJzX2xydSwKICAJCQlwZ19zdGF0X2dldF9iZ3dyaXRl cl9idWZfd3JpdHRlbl9hbGwoKSBBUyBidWZmZXJzX2FsbCwKICAJCQlwZ19z dGF0X2dldF9iZ3dyaXRlcl9tYXh3cml0dGVuX2xydSgpIEFTIG1heHdyaXR0 ZW5fbHJ1LAohIAkJCXBnX3N0YXRfZ2V0X2Jnd3JpdGVyX21heHdyaXR0ZW5f YWxsKCkgQVMgbWF4d3JpdHRlbl9hbGwsCiEgCQkJcGdfc3RhdF9nZXRfYmd3 cml0ZXJfYnVmX3dyaXR0ZW5fY2xpZW50KCkgQVMgYnVmZmVyc19jbGllbnQs CiEgCQkJcGdfc3RhdF9nZXRfYmd3cml0ZXJfYnVmX2FsbG9jKCkgQVMgYnVm ZmVyc19hbGxvYwohIDsKSW5kZXg6IHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv Ymd3cml0ZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv cHJvamVjdHMvY3Zzcm9vdC9wZ3NxbC9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2Jnd3JpdGVyLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzcKZGlmZiAt YyAtcjEuMzcgYmd3cml0ZXIuYwoqKiogc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9iZ3dyaXRlci5jCTMwIE1hciAyMDA3IDE4OjM0OjU1IC0wMDAwCTEuMzcK LS0tIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuYwk3IE1heSAy MDA3IDAxOjMwOjIxIC0wMDAwCioqKioqKioqKioqKioqKgoqKiogMTQ3LDE1 NiAqKioqCiAgc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBzaHV0ZG93 bl9yZXF1ZXN0ZWQgPSBmYWxzZTsKICAKICAvKgohICAqIFByaXZhdGUgc3Rh dGUKICAgKi8KISBzdGF0aWMgYm9vbCBhbV9iZ193cml0ZXIgPSBmYWxzZTsK ICAKICBzdGF0aWMgYm9vbCBja3B0X2FjdGl2ZSA9IGZhbHNlOwogIAogIHN0 YXRpYyB0aW1lX3QgbGFzdF9jaGVja3BvaW50X3RpbWU7Ci0tLSAxNDcsMTYw IC0tLS0KICBzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHNodXRkb3du X3JlcXVlc3RlZCA9IGZhbHNlOwogIAogIC8qCiEgICogQnVmZmVyIGFuZCBm c3luYyBhY3Rpdml0eSBhbmQgc3RhdGlzdGljcyBubmVkIHRvIHdvcmsgZGlm ZmVyZW50bHkgCiEgICogd2hlbiB0aGUgY3VycmVudCBwcm9jZXNzIGlzIHRo ZSBiYWNrZ3JvdW5kIHdyaXRlcgogICAqLwohIGJvb2wgYW1fYmdfd3JpdGVy ID0gZmFsc2U7CiAgCisgLyoKKyAgKiBQcml2YXRlIHN0YXRlCisgICovCiAg c3RhdGljIGJvb2wgY2twdF9hY3RpdmUgPSBmYWxzZTsKICAKICBzdGF0aWMg dGltZV90IGxhc3RfY2hlY2twb2ludF90aW1lOwpJbmRleDogc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9wZ3N0YXQuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9wZ3NxbC9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3Bnc3RhdC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAx LjE1NQpkaWZmIC1jIC1yMS4xNTUgcGdzdGF0LmMKKioqIHNyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcGdzdGF0LmMJMzAgQXByIDIwMDcgMTY6Mzc6MDggLTAw MDAJMS4xNTUKLS0tIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdzdGF0LmMJ NyBNYXkgMjAwNyAwMTozMDoyMyAtMDAwMAoqKioqKioqKioqKioqKioKKioq IDE3MzYsMTc0MiAqKioqCiAgCQlCZ1dyaXRlclN0YXRzLm1fYnVmX3dyaXR0 ZW5fbHJ1ID09IDAgJiYKICAJCUJnV3JpdGVyU3RhdHMubV9idWZfd3JpdHRl bl9hbGwgPT0gMCAmJgogIAkJQmdXcml0ZXJTdGF0cy5tX21heHdyaXR0ZW5f bHJ1ID09IDAgJiYKISAJCUJnV3JpdGVyU3RhdHMubV9tYXh3cml0dGVuX2Fs bCA9PSAwKQogIAkJcmV0dXJuOwogIAogIAkvKgotLS0gMTczNiwxNzQ0IC0t LS0KICAJCUJnV3JpdGVyU3RhdHMubV9idWZfd3JpdHRlbl9scnUgPT0gMCAm JgogIAkJQmdXcml0ZXJTdGF0cy5tX2J1Zl93cml0dGVuX2FsbCA9PSAwICYm CiAgCQlCZ1dyaXRlclN0YXRzLm1fbWF4d3JpdHRlbl9scnUgPT0gMCAmJgoh IAkJQmdXcml0ZXJTdGF0cy5tX21heHdyaXR0ZW5fYWxsID09IDAgJiYKISAJ CUJnV3JpdGVyU3RhdHMubV9idWZfd3JpdHRlbl9jbGllbnQgPT0gMCAmJgoh IAkJQmdXcml0ZXJTdGF0cy5tX2J1Zl9hbGxvYyA9PSAwKQogIAkJcmV0dXJu OwogIAogIAkvKgoqKioqKioqKioqKioqKioKKioqIDI4MDUsMjgwOCAqKioq Ci0tLSAyODA3LDI4MTIgLS0tLQogIAlnbG9iYWxTdGF0cy5idWZfd3JpdHRl bl9hbGwgKz0gbXNnLT5tX2J1Zl93cml0dGVuX2FsbDsKICAJZ2xvYmFsU3Rh dHMubWF4d3JpdHRlbl9scnUgKz0gbXNnLT5tX21heHdyaXR0ZW5fbHJ1Owog IAlnbG9iYWxTdGF0cy5tYXh3cml0dGVuX2FsbCArPSBtc2ctPm1fbWF4d3Jp dHRlbl9hbGw7CisgCWdsb2JhbFN0YXRzLmJ1Zl93cml0dGVuX2NsaWVudCAr PSBtc2ctPm1fYnVmX3dyaXR0ZW5fY2xpZW50OworIAlnbG9iYWxTdGF0cy5i dWZfYWxsb2MgKz0gbXNnLT5tX2J1Zl9hbGxvYzsKICB9CkluZGV4OiBzcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9wZ3NxbC9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS4yMTgKZGlmZiAtYyAtcjEuMjE4IGJ1Zm1nci5jCioq KiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwkyIE1heSAy MDA3IDIzOjM0OjQ4IC0wMDAwCTEuMjE4Ci0tLSBzcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYwk3IE1heSAyMDA3IDAxOjMwOjI0IC0wMDAw CioqKioqKioqKioqKioqKgoqKiogOTg3LDk5NyAqKioqCiAgCWludAkJCWJ1 Zl9pZDsKICAJaW50CQkJbnVtX3RvX3NjYW47CiAgCWludAkJCWFic29yYl9j b3VudGVyOwogIAogIAkvKgogIAkgKiBGaW5kIG91dCB3aGVyZSB0byBzdGFy dCB0aGUgY2lyY3VsYXIgc2Nhbi4KICAJICovCiEgCWJ1Zl9pZCA9IFN0cmF0 ZWd5U3luY1N0YXJ0KCk7CiAgCiAgCS8qIE1ha2Ugc3VyZSB3ZSBjYW4gaGFu ZGxlIHRoZSBwaW4gaW5zaWRlIFN5bmNPbmVCdWZmZXIgKi8KICAJUmVzb3Vy Y2VPd25lckVubGFyZ2VCdWZmZXJzKEN1cnJlbnRSZXNvdXJjZU93bmVyKTsK LS0tIDk4NywxMDAxIC0tLS0KICAJaW50CQkJYnVmX2lkOwogIAlpbnQJCQlu dW1fdG9fc2NhbjsKICAJaW50CQkJYWJzb3JiX2NvdW50ZXI7CisgCWludAkJ CXJlY2VudF9hbGxvYzsKKyAJaW50CQkJbnVtX2NsaWVudF93cml0ZXM7CiAg CiAgCS8qCiAgCSAqIEZpbmQgb3V0IHdoZXJlIHRvIHN0YXJ0IHRoZSBjaXJj dWxhciBzY2FuLgogIAkgKi8KISAJYnVmX2lkID0gU3RyYXRlZ3lTeW5jU3Rh cnQoJnJlY2VudF9hbGxvYywmbnVtX2NsaWVudF93cml0ZXMpOwohIAlCZ1dy aXRlclN0YXRzLm1fYnVmX2FsbG9jKz1yZWNlbnRfYWxsb2M7CiEgCUJnV3Jp dGVyU3RhdHMubV9idWZfd3JpdHRlbl9jbGllbnQrPW51bV9jbGllbnRfd3Jp dGVzOwogIAogIAkvKiBNYWtlIHN1cmUgd2UgY2FuIGhhbmRsZSB0aGUgcGlu IGluc2lkZSBTeW5jT25lQnVmZmVyICovCiAgCVJlc291cmNlT3duZXJFbmxh cmdlQnVmZmVycyhDdXJyZW50UmVzb3VyY2VPd25lcik7CioqKioqKioqKioq KioqKgoqKiogMTAzNiwxMDQxICoqKioKLS0tIDEwNDAsMTA0NyAtLS0tCiAg CWludAkJCWJ1Zl9pZDI7CiAgCWludAkJCW51bV90b19zY2FuOwogIAlpbnQJ CQludW1fd3JpdHRlbjsKKyAJaW50CQkJcmVjZW50X2FsbG9jOworIAlpbnQJ CQludW1fY2xpZW50X3dyaXRlczsKICAKICAJLyogTWFrZSBzdXJlIHdlIGNh biBoYW5kbGUgdGhlIHBpbiBpbnNpZGUgU3luY09uZUJ1ZmZlciAqLwogIAlS ZXNvdXJjZU93bmVyRW5sYXJnZUJ1ZmZlcnMoQ3VycmVudFJlc291cmNlT3du ZXIpOwoqKioqKioqKioqKioqKioKKioqIDEwODAsMTA4NSAqKioqCi0tLSAx MDg2LDEwOTggLS0tLQogIAl9CiAgCiAgCS8qCisgCSAqIEZpbmQgb3V0IHdo ZXJlIHRvIHN0YXJ0IHRoZSBjaXJjdWxhciBzY2FuLgorIAkgKi8KKyAJYnVm X2lkMiA9IFN0cmF0ZWd5U3luY1N0YXJ0KCZyZWNlbnRfYWxsb2MsJm51bV9j bGllbnRfd3JpdGVzKTsKKyAJQmdXcml0ZXJTdGF0cy5tX2J1Zl9hbGxvYys9 cmVjZW50X2FsbG9jOworIAlCZ1dyaXRlclN0YXRzLm1fYnVmX3dyaXR0ZW5f Y2xpZW50Kz1udW1fY2xpZW50X3dyaXRlczsKKyAKKyAJLyoKICAJICogVGhp cyBsb29wIGNvbnNpZGVycyBvbmx5IHVucGlubmVkIGJ1ZmZlcnMgY2xvc2Ug dG8gdGhlIGNsb2NrIHN3ZWVwCiAgCSAqIHBvaW50LgogIAkgKi8KKioqKioq KioqKioqKioqCioqKiAxMDg4LDEwOTUgKioqKgogIAkJbnVtX3RvX3NjYW4g PSAoaW50KSAoKE5CdWZmZXJzICogYmd3cml0ZXJfbHJ1X3BlcmNlbnQgKyA5 OSkgLyAxMDApOwogIAkJbnVtX3dyaXR0ZW4gPSAwOwogIAotIAkJYnVmX2lk MiA9IFN0cmF0ZWd5U3luY1N0YXJ0KCk7Ci0gCiAgCQl3aGlsZSAobnVtX3Rv X3NjYW4tLSA+IDApCiAgCQl7CiAgCQkJaWYgKFN5bmNPbmVCdWZmZXIoYnVm X2lkMiwgdHJ1ZSkpCi0tLSAxMTAxLDExMDYgLS0tLQoqKioqKioqKioqKioq KioKKioqIDE0NTEsMTQ1NiAqKioqCi0tLSAxNDYyLDE0NjggLS0tLQogIAkJ CSAgZmFsc2UpOwogIAogIAlCdWZmZXJGbHVzaENvdW50Kys7CisgCVN0cmF0 ZWd5UmVwb3J0V3JpdGUoKTsKICAKICAJLyoKICAJICogTWFyayB0aGUgYnVm ZmVyIGFzIGNsZWFuICh1bmxlc3MgQk1fSlVTVF9ESVJUSUVEIGhhcyBiZWNv bWUgc2V0KSBhbmQKSW5kZXg6IHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2ZyZWVsaXN0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L3Byb2plY3RzL2N2c3Jvb3QvcGdzcWwvc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvZnJlZWxpc3QuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41OApk aWZmIC1jIC1yMS41OCBmcmVlbGlzdC5jCioqKiBzcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9mcmVlbGlzdC5jCTUgSmFuIDIwMDcgMjI6MTk6MzcgLTAw MDAJMS41OAotLS0gc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxp c3QuYwk3IE1heSAyMDA3IDAxOjMwOjI0IC0wMDAwCioqKioqKioqKioqKioq KgoqKiogMjksMzQgKioqKgotLS0gMjksMzYgLS0tLQogIAogIAlpbnQJCQlm aXJzdEZyZWVCdWZmZXI7CS8qIEhlYWQgb2YgbGlzdCBvZiB1bnVzZWQgYnVm ZmVycyAqLwogIAlpbnQJCQlsYXN0RnJlZUJ1ZmZlcjsgLyogVGFpbCBvZiBs aXN0IG9mIHVudXNlZCBidWZmZXJzICovCisgCWludAkJCW51bUdldEJ1ZmZl cjsgLyogQ2FsbHMgdG8gQnVmZmVyQWxsb2Mgc2luY2UgbGFzdCByZXNldCAq LworIAlpbnQJCQludW1DbGllbnRXcml0ZXM7IC8qIEJ1ZmZlcnMgd3JpdHRl biBieSBjbGllbnRzIHNpbmNlIGxhc3QgcmVzZXQgKi8KICAKICAJLyoKICAJ ICogTk9URTogbGFzdEZyZWVCdWZmZXIgaXMgdW5kZWZpbmVkIHdoZW4gZmly c3RGcmVlQnVmZmVyIGlzIC0xICh0aGF0IGlzLAoqKioqKioqKioqKioqKioK KioqIDQyLDQ3ICoqKioKLS0tIDQ0LDUxIC0tLS0KICAvKiBCYWNrZW5kLWxv Y2FsIHN0YXRlIGFib3V0IHdoZXRoZXIgY3VycmVudGx5IHZhY3V1bWluZyAq LwogIGJvb2wJCXN0cmF0ZWd5X2hpbnRfdmFjdXVtID0gZmFsc2U7CiAgCisg LyogVXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggdHlwZSBvZiBwcm9jZXNzIHdl J3JlIHJ1bm5pbmcgYXMgKi8KKyBleHRlcm4gYm9vbCBhbV9iZ193cml0ZXI7 CiAgCiAgLyoKICAgKiBTdHJhdGVneUdldEJ1ZmZlcgoqKioqKioqKioqKioq KioKKioqIDYyLDY3ICoqKioKLS0tIDY2LDcyIC0tLS0KICAJaW50CQkJdHJ5 Y291bnRlcjsKICAKICAJTFdMb2NrQWNxdWlyZShCdWZGcmVlbGlzdExvY2ss IExXX0VYQ0xVU0lWRSk7CisgCVN0cmF0ZWd5Q29udHJvbC0+bnVtR2V0QnVm ZmVyKys7CiAgCiAgCS8qCiAgCSAqIFRyeSB0byBnZXQgYSBidWZmZXIgZnJv bSB0aGUgZnJlZWxpc3QuICBOb3RlIHRoYXQgdGhlIGZyZWVOZXh0IGZpZWxk cwoqKioqKioqKioqKioqKioKKioqIDE3NiwxODIgKioqKgogICAqIEJ1ZmZl clN5bmMoKSB3aWxsIHByb2NlZWQgY2lyY3VsYXJseSBhcm91bmQgdGhlIGJ1 ZmZlciBhcnJheSBmcm9tIHRoZXJlLgogICAqLwogIGludAohIFN0cmF0ZWd5 U3luY1N0YXJ0KHZvaWQpCiAgewogIAlpbnQJCQlyZXN1bHQ7CiAgCi0tLSAx ODEsMTg3IC0tLS0KICAgKiBCdWZmZXJTeW5jKCkgd2lsbCBwcm9jZWVkIGNp cmN1bGFybHkgYXJvdW5kIHRoZSBidWZmZXIgYXJyYXkgZnJvbSB0aGVyZS4K ICAgKi8KICBpbnQKISBTdHJhdGVneVN5bmNTdGFydChpbnQgKm51bV9idWZf YWxsb2MsaW50ICpudW1fY2xpZW50X3dyaXRlcykKICB7CiAgCWludAkJCXJl c3VsdDsKICAKKioqKioqKioqKioqKioqCioqKiAxODYsMTk2ICoqKioKLS0t IDE5MSwyMjAgLS0tLQogIAkgKi8KICAJTFdMb2NrQWNxdWlyZShCdWZGcmVl bGlzdExvY2ssIExXX0VYQ0xVU0lWRSk7CiAgCXJlc3VsdCA9IFN0cmF0ZWd5 Q29udHJvbC0+bmV4dFZpY3RpbUJ1ZmZlcjsKKyAKKyAJLyogUmV0dXJuIGFu ZCByZXNldCBzdGF0aXN0aWNzIGZvciBhY3Rpdml0eSBzaW5jZSBsYXN0IGNh bGwgKi8KKyAJaWYgKG51bV9idWZfYWxsb2MhPU5VTEwpICpudW1fYnVmX2Fs bG9jPVN0cmF0ZWd5Q29udHJvbC0+bnVtR2V0QnVmZmVyOworIAlpZiAobnVt X2NsaWVudF93cml0ZXMhPU5VTEwpICpudW1fY2xpZW50X3dyaXRlcz1TdHJh dGVneUNvbnRyb2wtPm51bUNsaWVudFdyaXRlczsKKyAJU3RyYXRlZ3lDb250 cm9sLT5udW1HZXRCdWZmZXIgPSAwOworIAlTdHJhdGVneUNvbnRyb2wtPm51 bUNsaWVudFdyaXRlcyA9IDA7CisgCiAgCUxXTG9ja1JlbGVhc2UoQnVmRnJl ZWxpc3RMb2NrKTsKICAJcmV0dXJuIHJlc3VsdDsKICB9CiAgCiAgLyoKKyAg KiBTdHJhdGVneVJlcG9ydFdyaXRlIC0tIEFmdGVyIGEgYnVmZmVyIGlzIHdy aXR0ZW4gb3V0LCB1cGRhdGUKKyAgKiBsb2NhbCBzdGF0aXN0aWNzIGJhc2Vk IG9uIHdobyBkaWQgdGhlIHdyaXRpbmcKKyAgKi8KKyB2b2lkCisgU3RyYXRl Z3lSZXBvcnRXcml0ZSh2b2lkKQorIHsKKyAvKiBUaGUgYmFja2dyb3VuZCB3 cml0ZXIga2VlcHMgdHJhY2sgb2YgYnVmZmVycyBpdCB3cml0ZXMgYWxyZWFk eSwKKyAgICBvbmx5IGNvdW50IGNsaWVudCB3cml0ZXMgKi8KKyAgIGlmICgh YW1fYmdfd3JpdGVyKSBTdHJhdGVneUNvbnRyb2wtPm51bUNsaWVudFdyaXRl cysrOworIH0KKyAKKyAvKgogICAqIFN0cmF0ZWd5SGludFZhY3V1bSAtLSB0 ZWxsIHVzIHdoZXRoZXIgVkFDVVVNIGlzIGFjdGl2ZQogICAqLwogIHZvaWQK KioqKioqKioqKioqKioqCioqKiAyNzAsMjc1ICoqKioKLS0tIDI5NCwzMDEg LS0tLQogIAogIAkJLyogSW5pdGlhbGl6ZSB0aGUgY2xvY2sgc3dlZXAgcG9p bnRlciAqLwogIAkJU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVy ID0gMDsKKyAJCVN0cmF0ZWd5Q29udHJvbC0+bnVtR2V0QnVmZmVyID0gMDsK KyAJCVN0cmF0ZWd5Q29udHJvbC0+bnVtQ2xpZW50V3JpdGVzID0gMDsKICAJ fQogIAllbHNlCiAgCQlBc3NlcnQoIWluaXQpOwpJbmRleDogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL3Byb2plY3RzL2N2c3Jvb3QvcGdzcWwvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMsdgpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuNDEKZGlmZiAtYyAtcjEuNDEgcGdzdGF0ZnVuY3MuYwoqKiog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMJMzAgTWFyIDIw MDcgMTg6MzQ6NTUgLTAwMDAJMS40MQotLS0gc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3Bnc3RhdGZ1bmNzLmMJNyBNYXkgMjAwNyAwMTozMDoyNSAtMDAwMAoq KioqKioqKioqKioqKioKKioqIDY4LDczICoqKioKLS0tIDY4LDc1IC0tLS0K ICBleHRlcm4gRGF0dW0gcGdfc3RhdF9nZXRfYmd3cml0ZXJfYnVmX3dyaXR0 ZW5fYWxsKFBHX0ZVTkNUSU9OX0FSR1MpOwogIGV4dGVybiBEYXR1bSBwZ19z dGF0X2dldF9iZ3dyaXRlcl9tYXh3cml0dGVuX2xydShQR19GVU5DVElPTl9B UkdTKTsKICBleHRlcm4gRGF0dW0gcGdfc3RhdF9nZXRfYmd3cml0ZXJfbWF4 d3JpdHRlbl9hbGwoUEdfRlVOQ1RJT05fQVJHUyk7CisgZXh0ZXJuIERhdHVt IHBnX3N0YXRfZ2V0X2Jnd3JpdGVyX2J1Zl93cml0dGVuX2NsaWVudChQR19G VU5DVElPTl9BUkdTKTsKKyBleHRlcm4gRGF0dW0gcGdfc3RhdF9nZXRfYmd3 cml0ZXJfYnVmX2FsbG9jKFBHX0ZVTkNUSU9OX0FSR1MpOwogIAogIGV4dGVy biBEYXR1bSBwZ19zdGF0X2NsZWFyX3NuYXBzaG90KFBHX0ZVTkNUSU9OX0FS R1MpOwogIGV4dGVybiBEYXR1bSBwZ19zdGF0X3Jlc2V0KFBHX0ZVTkNUSU9O X0FSR1MpOwoqKioqKioqKioqKioqKioKKioqIDgwOCw4MTMgKioqKgotLS0g ODEwLDgyNiAtLS0tCiAgCVBHX1JFVFVSTl9JTlQ2NChwZ3N0YXRfZmV0Y2hf Z2xvYmFsKCktPm1heHdyaXR0ZW5fYWxsKTsKICB9CiAgCisgRGF0dW0KKyBw Z19zdGF0X2dldF9iZ3dyaXRlcl9idWZfd3JpdHRlbl9jbGllbnQoUEdfRlVO Q1RJT05fQVJHUykKKyB7CisgCVBHX1JFVFVSTl9JTlQ2NChwZ3N0YXRfZmV0 Y2hfZ2xvYmFsKCktPmJ1Zl93cml0dGVuX2NsaWVudCk7CisgfQorIAorIERh dHVtCisgcGdfc3RhdF9nZXRfYmd3cml0ZXJfYnVmX2FsbG9jKFBHX0ZVTkNU SU9OX0FSR1MpCisgeworIAlQR19SRVRVUk5fSU5UNjQocGdzdGF0X2ZldGNo X2dsb2JhbCgpLT5idWZfYWxsb2MpOworIH0KICAKICAvKiBEaXNjYXJkIHRo ZSBhY3RpdmUgc3RhdGlzdGljcyBzbmFwc2hvdCAqLwogIERhdHVtCkluZGV4 OiBzcmMvaW5jbHVkZS9wZ3N0YXQuaAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9wZ3NxbC9zcmMvaW5jbHVk ZS9wZ3N0YXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41OApkaWZmIC1j IC1yMS41OCBwZ3N0YXQuaAoqKiogc3JjL2luY2x1ZGUvcGdzdGF0LmgJMzAg QXByIDIwMDcgMTY6Mzc6MDggLTAwMDAJMS41OAotLS0gc3JjL2luY2x1ZGUv cGdzdGF0LmgJNyBNYXkgMjAwNyAwMTozMDoyNiAtMDAwMAoqKioqKioqKioq KioqKioKKioqIDIyOCwyMzMgKioqKgotLS0gMjI4LDIzNSAtLS0tCiAgCVBn U3RhdF9Db3VudGVyCW1fYnVmX3dyaXR0ZW5fYWxsOwogIAlQZ1N0YXRfQ291 bnRlcgltX21heHdyaXR0ZW5fbHJ1OwogIAlQZ1N0YXRfQ291bnRlcgltX21h eHdyaXR0ZW5fYWxsOworIAlQZ1N0YXRfQ291bnRlcgltX2J1Zl93cml0dGVu X2NsaWVudDsKKyAJUGdTdGF0X0NvdW50ZXIJbV9idWZfYWxsb2M7CiAgfSBQ Z1N0YXRfTXNnQmdXcml0ZXI7CiAgCiAgCioqKioqKioqKioqKioqKgoqKiog MzI5LDMzNCAqKioqCi0tLSAzMzEsMzM4IC0tLS0KICAJUGdTdGF0X0NvdW50 ZXIgIGJ1Zl93cml0dGVuX2FsbDsKICAJUGdTdGF0X0NvdW50ZXIgIG1heHdy aXR0ZW5fbHJ1OwogIAlQZ1N0YXRfQ291bnRlciAgbWF4d3JpdHRlbl9hbGw7 CisgCVBnU3RhdF9Db3VudGVyICBidWZfd3JpdHRlbl9jbGllbnQ7CisgCVBn U3RhdF9Db3VudGVyICBidWZfYWxsb2M7CiAgfSBQZ1N0YXRfR2xvYmFsU3Rh dHM7CiAgCiAgCkluZGV4OiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcHJvamVjdHMv Y3Zzcm9vdC9wZ3NxbC9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuaCx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NTQKZGlmZiAtYyAtcjEuNDU0IHBn X3Byb2MuaAoqKiogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgJMiBB cHIgMjAwNyAwMzo0OTo0MCAtMDAwMAkxLjQ1NAotLS0gc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmgJNyBNYXkgMjAwNyAwMTozMDozMyAtMDAwMAoq KioqKioqKioqKioqKioKKioqIDMwMDEsMzAwNiAqKioqCi0tLSAzMDAxLDMw MTAgLS0tLQogIERFU0NSKCJTdGF0aXN0aWNzOiBOdW1iZXIgb2YgdGltZXMg dGhlIGJnd3JpdGVyIHN0b3BwZWQgcHJvY2Vzc2luZyB3aGVuIGl0IGhhZCB3 cml0dGVuIHRvbyBtYW55IGJ1ZmZlcnMgZHVyaW5nIExSVSBzY2FucyIpOwog IERBVEEoaW5zZXJ0IE9JRCA9IDI3NzUgKCBwZ19zdGF0X2dldF9iZ3dyaXRl cl9tYXh3cml0dGVuX2FsbCBQR05TUCBQR1VJRCAxMiAxIDAgZiBmIHQgZiBz IDAgMjAgIiIgX251bGxfIF9udWxsXyBfbnVsbF8gcGdfc3RhdF9nZXRfYmd3 cml0ZXJfbWF4d3JpdHRlbl9hbGwgLSBfbnVsbF8gKSk7CiAgREVTQ1IoIlN0 YXRpc3RpY3M6IE51bWJlciBvZiB0aW1lcyB0aGUgYmd3cml0ZXIgc3RvcHBl ZCBwcm9jZXNzaW5nIHdoZW4gaXQgaGFkIHdyaXR0ZW4gdG9vIG1hbnkgYnVm ZmVycyBkdXJpbmcgYWxsLWJ1ZmZlciBzY2FucyIpOworIERBVEEoaW5zZXJ0 IE9JRCA9IDI3NzYgKCBwZ19zdGF0X2dldF9iZ3dyaXRlcl9idWZfd3JpdHRl bl9jbGllbnQgUEdOU1AgUEdVSUQgMTIgMSAwIGYgZiB0IGYgcyAwIDIwICIi IF9udWxsXyBfbnVsbF8gX251bGxfIHBnX3N0YXRfZ2V0X2Jnd3JpdGVyX2J1 Zl93cml0dGVuX2NsaWVudCAtIF9udWxsXyApKTsKKyBERVNDUigiU3RhdGlz dGljczogTnVtYmVyIG9mIGJ1ZmZlcnMgd3JpdHRlbiBieSBjbGllbnQgYmFj a2VuZHMiKTsKKyBEQVRBKGluc2VydCBPSUQgPSAyNzc3ICggcGdfc3RhdF9n ZXRfYmd3cml0ZXJfYnVmX2FsbG9jIFBHTlNQIFBHVUlEIDEyIDEgMCBmIGYg dCBmIHMgMCAyMCAiIiBfbnVsbF8gX251bGxfIF9udWxsXyBwZ19zdGF0X2dl dF9iZ3dyaXRlcl9idWZfYWxsb2MgLSBfbnVsbF8gKSk7CisgREVTQ1IoIlN0 YXRpc3RpY3M6IE51bWJlciBvZiBidWZmZXJzIGFsbG9jYXRlZCBmb3IgdGhl IHNoYXJlZCBidWZmZXIgY2FjaGUiKTsKICBEQVRBKGluc2VydCBPSUQgPSAy MjMwICggIHBnX3N0YXRfY2xlYXJfc25hcHNob3QJCVBHTlNQIFBHVUlEIDEy IDEgMCBmIGYgZiBmIHYgMCAyMjc4ICAiIiBfbnVsbF8gX251bGxfIF9udWxs XwlwZ19zdGF0X2NsZWFyX3NuYXBzaG90IC0gX251bGxfICkpOwogIERFU0NS KCJTdGF0aXN0aWNzOiBEaXNjYXJkIGN1cnJlbnQgdHJhbnNhY3Rpb24ncyBz dGF0aXN0aWNzIHNuYXBzaG90Iik7CiAgREFUQShpbnNlcnQgT0lEID0gMjI3 NCAoICBwZ19zdGF0X3Jlc2V0CQkJCQlQR05TUCBQR1VJRCAxMiAxIDAgZiBm IGYgZiB2IDAgMjI3OCAgIiIgX251bGxfIF9udWxsXyBfbnVsbF8JcGdfc3Rh dF9yZXNldCAtIF9udWxsXyApKTsKSW5kZXg6IHNyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmX2ludGVybmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvYnVmX2ludGVybmFscy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx Ljg5CmRpZmYgLWMgLXIxLjg5IGJ1Zl9pbnRlcm5hbHMuaAoqKiogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgJNSBKYW4gMjAwNyAyMjox OTo1NyAtMDAwMAkxLjg5Ci0tLSBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9p bnRlcm5hbHMuaAk3IE1heSAyMDA3IDAxOjMwOjMzIC0wMDAwCioqKioqKioq KioqKioqKgoqKiogMTg2LDE5MiAqKioqCiAgLyogZnJlZWxpc3QuYyAqLwog IGV4dGVybiB2b2xhdGlsZSBCdWZmZXJEZXNjICpTdHJhdGVneUdldEJ1ZmZl cih2b2lkKTsKICBleHRlcm4gdm9pZCBTdHJhdGVneUZyZWVCdWZmZXIodm9s YXRpbGUgQnVmZmVyRGVzYyAqYnVmLCBib29sIGF0X2hlYWQpOwohIGV4dGVy biBpbnQJU3RyYXRlZ3lTeW5jU3RhcnQodm9pZCk7CiAgZXh0ZXJuIFNpemUg U3RyYXRlZ3lTaG1lbVNpemUodm9pZCk7CiAgZXh0ZXJuIHZvaWQgU3RyYXRl Z3lJbml0aWFsaXplKGJvb2wgaW5pdCk7CiAgCi0tLSAxODYsMTkzIC0tLS0K ICAvKiBmcmVlbGlzdC5jICovCiAgZXh0ZXJuIHZvbGF0aWxlIEJ1ZmZlckRl c2MgKlN0cmF0ZWd5R2V0QnVmZmVyKHZvaWQpOwogIGV4dGVybiB2b2lkIFN0 cmF0ZWd5RnJlZUJ1ZmZlcih2b2xhdGlsZSBCdWZmZXJEZXNjICpidWYsIGJv b2wgYXRfaGVhZCk7CiEgZXh0ZXJuIGludAlTdHJhdGVneVN5bmNTdGFydChp bnQgKm51bV9idWZfYWxsb2MsIGludCAqbnVtX2NsaWVudF93cml0ZXMpOwoh IGV4dGVybiB2b2lkCVN0cmF0ZWd5UmVwb3J0V3JpdGUoKTsKICBleHRlcm4g U2l6ZSBTdHJhdGVneVNobWVtU2l6ZSh2b2lkKTsKICBleHRlcm4gdm9pZCBT dHJhdGVneUluaXRpYWxpemUoYm9vbCBpbml0KTsKICAKSW5kZXg6IHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0Cj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0LHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjEyNwpkaWZmIC1jIC1yMS4xMjcgcnVsZXMub3V0Cioq KiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAkzMCBNYXIg MjAwNyAxODozNDo1NiAtMDAwMAkxLjEyNwotLS0gc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9ydWxlcy5vdXQJNyBNYXkgMjAwNyAwMTozMDozNiAtMDAw MAoqKioqKioqKioqKioqKioKKioqIDEyOTIsMTI5OCAqKioqCiAgIHBnX3N0 YXRfYWN0aXZpdHkgICAgICAgICB8IFNFTEVDVCBkLm9pZCBBUyBkYXRpZCwg ZC5kYXRuYW1lLCBwZ19zdGF0X2dldF9iYWNrZW5kX3BpZChzLmJhY2tlbmRp ZCkgQVMgcHJvY3BpZCwgcGdfc3RhdF9nZXRfYmFja2VuZF91c2VyaWQocy5i YWNrZW5kaWQpIEFTIHVzZXN5c2lkLCB1LnJvbG5hbWUgQVMgdXNlbmFtZSwg cGdfc3RhdF9nZXRfYmFja2VuZF9hY3Rpdml0eShzLmJhY2tlbmRpZCkgQVMg Y3VycmVudF9xdWVyeSwgcGdfc3RhdF9nZXRfYmFja2VuZF93YWl0aW5nKHMu YmFja2VuZGlkKSBBUyB3YWl0aW5nLCBwZ19zdGF0X2dldF9iYWNrZW5kX3R4 bl9zdGFydChzLmJhY2tlbmRpZCkgQVMgdHhuX3N0YXJ0LCBwZ19zdGF0X2dl dF9iYWNrZW5kX2FjdGl2aXR5X3N0YXJ0KHMuYmFja2VuZGlkKSBBUyBxdWVy eV9zdGFydCwgcGdfc3RhdF9nZXRfYmFja2VuZF9zdGFydChzLmJhY2tlbmRp ZCkgQVMgYmFja2VuZF9zdGFydCwgcGdfc3RhdF9nZXRfYmFja2VuZF9jbGll bnRfYWRkcihzLmJhY2tlbmRpZCkgQVMgY2xpZW50X2FkZHIsIHBnX3N0YXRf Z2V0X2JhY2tlbmRfY2xpZW50X3BvcnQocy5iYWNrZW5kaWQpIEFTIGNsaWVu dF9wb3J0IEZST00gcGdfZGF0YWJhc2UgZCwgKFNFTEVDVCBwZ19zdGF0X2dl dF9iYWNrZW5kX2lkc2V0KCkgQVMgYmFja2VuZGlkKSBzLCBwZ19hdXRoaWQg dSBXSEVSRSAoKHBnX3N0YXRfZ2V0X2JhY2tlbmRfZGJpZChzLmJhY2tlbmRp ZCkgPSBkLm9pZCkgQU5EIChwZ19zdGF0X2dldF9iYWNrZW5kX3VzZXJpZChz LmJhY2tlbmRpZCkgPSB1Lm9pZCkpOwogICBwZ19zdGF0X2FsbF9pbmRleGVz ICAgICAgfCBTRUxFQ1QgYy5vaWQgQVMgcmVsaWQsIGkub2lkIEFTIGluZGV4 cmVsaWQsIG4ubnNwbmFtZSBBUyBzY2hlbWFuYW1lLCBjLnJlbG5hbWUsIGku cmVsbmFtZSBBUyBpbmRleHJlbG5hbWUsIHBnX3N0YXRfZ2V0X251bXNjYW5z KGkub2lkKSBBUyBpZHhfc2NhbiwgcGdfc3RhdF9nZXRfdHVwbGVzX3JldHVy bmVkKGkub2lkKSBBUyBpZHhfdHVwX3JlYWQsIHBnX3N0YXRfZ2V0X3R1cGxl c19mZXRjaGVkKGkub2lkKSBBUyBpZHhfdHVwX2ZldGNoIEZST00gKCgocGdf Y2xhc3MgYyBKT0lOIHBnX2luZGV4IHggT04gKChjLm9pZCA9IHguaW5kcmVs aWQpKSkgSk9JTiBwZ19jbGFzcyBpIE9OICgoaS5vaWQgPSB4LmluZGV4cmVs aWQpKSkgTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBuIE9OICgobi5vaWQgPSBj LnJlbG5hbWVzcGFjZSkpKSBXSEVSRSAoYy5yZWxraW5kID0gQU5ZIChBUlJB WVsncic6OiJjaGFyIiwgJ3QnOjoiY2hhciJdKSk7CiAgIHBnX3N0YXRfYWxs X3RhYmxlcyAgICAgICB8IFNFTEVDVCBjLm9pZCBBUyByZWxpZCwgbi5uc3Bu YW1lIEFTIHNjaGVtYW5hbWUsIGMucmVsbmFtZSwgcGdfc3RhdF9nZXRfbnVt c2NhbnMoYy5vaWQpIEFTIHNlcV9zY2FuLCBwZ19zdGF0X2dldF90dXBsZXNf cmV0dXJuZWQoYy5vaWQpIEFTIHNlcV90dXBfcmVhZCwgKHN1bShwZ19zdGF0 X2dldF9udW1zY2FucyhpLmluZGV4cmVsaWQpKSk6OmJpZ2ludCBBUyBpZHhf c2NhbiwgKChzdW0ocGdfc3RhdF9nZXRfdHVwbGVzX2ZldGNoZWQoaS5pbmRl eHJlbGlkKSkpOjpiaWdpbnQgKyBwZ19zdGF0X2dldF90dXBsZXNfZmV0Y2hl ZChjLm9pZCkpIEFTIGlkeF90dXBfZmV0Y2gsIHBnX3N0YXRfZ2V0X3R1cGxl c19pbnNlcnRlZChjLm9pZCkgQVMgbl90dXBfaW5zLCBwZ19zdGF0X2dldF90 dXBsZXNfdXBkYXRlZChjLm9pZCkgQVMgbl90dXBfdXBkLCBwZ19zdGF0X2dl dF90dXBsZXNfZGVsZXRlZChjLm9pZCkgQVMgbl90dXBfZGVsLCBwZ19zdGF0 X2dldF9saXZlX3R1cGxlcyhjLm9pZCkgQVMgbl9saXZlX3R1cCwgcGdfc3Rh dF9nZXRfZGVhZF90dXBsZXMoYy5vaWQpIEFTIG5fZGVhZF90dXAsIHBnX3N0 YXRfZ2V0X2xhc3RfdmFjdXVtX3RpbWUoYy5vaWQpIEFTIGxhc3RfdmFjdXVt LCBwZ19zdGF0X2dldF9sYXN0X2F1dG92YWN1dW1fdGltZShjLm9pZCkgQVMg bGFzdF9hdXRvdmFjdXVtLCBwZ19zdGF0X2dldF9sYXN0X2FuYWx5emVfdGlt ZShjLm9pZCkgQVMgbGFzdF9hbmFseXplLCBwZ19zdGF0X2dldF9sYXN0X2F1 dG9hbmFseXplX3RpbWUoYy5vaWQpIEFTIGxhc3RfYXV0b2FuYWx5emUgRlJP TSAoKHBnX2NsYXNzIGMgTEVGVCBKT0lOIHBnX2luZGV4IGkgT04gKChjLm9p ZCA9IGkuaW5kcmVsaWQpKSkgTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBuIE9O ICgobi5vaWQgPSBjLnJlbG5hbWVzcGFjZSkpKSBXSEVSRSAoYy5yZWxraW5k ID0gQU5ZIChBUlJBWVsncic6OiJjaGFyIiwgJ3QnOjoiY2hhciJdKSkgR1JP VVAgQlkgYy5vaWQsIG4ubnNwbmFtZSwgYy5yZWxuYW1lOwohICBwZ19zdGF0 X2Jnd3JpdGVyICAgICAgICAgfCBTRUxFQ1QgcGdfc3RhdF9nZXRfYmd3cml0 ZXJfdGltZWRfY2hlY2twb2ludHMoKSBBUyBjaGVja3BvaW50c190aW1lZCwg cGdfc3RhdF9nZXRfYmd3cml0ZXJfcmVxdWVzdGVkX2NoZWNrcG9pbnRzKCkg QVMgY2hlY2twb2ludHNfcmVxLCBwZ19zdGF0X2dldF9iZ3dyaXRlcl9idWZf d3JpdHRlbl9jaGVja3BvaW50cygpIEFTIGJ1ZmZlcnNfY2hlY2twb2ludCwg cGdfc3RhdF9nZXRfYmd3cml0ZXJfYnVmX3dyaXR0ZW5fbHJ1KCkgQVMgYnVm ZmVyc19scnUsIHBnX3N0YXRfZ2V0X2Jnd3JpdGVyX2J1Zl93cml0dGVuX2Fs bCgpIEFTIGJ1ZmZlcnNfYWxsLCBwZ19zdGF0X2dldF9iZ3dyaXRlcl9tYXh3 cml0dGVuX2xydSgpIEFTIG1heHdyaXR0ZW5fbHJ1LCBwZ19zdGF0X2dldF9i Z3dyaXRlcl9tYXh3cml0dGVuX2FsbCgpIEFTIG1heHdyaXR0ZW5fYWxsOwog ICBwZ19zdGF0X2RhdGFiYXNlICAgICAgICAgfCBTRUxFQ1QgZC5vaWQgQVMg ZGF0aWQsIGQuZGF0bmFtZSwgcGdfc3RhdF9nZXRfZGJfbnVtYmFja2VuZHMo ZC5vaWQpIEFTIG51bWJhY2tlbmRzLCBwZ19zdGF0X2dldF9kYl94YWN0X2Nv bW1pdChkLm9pZCkgQVMgeGFjdF9jb21taXQsIHBnX3N0YXRfZ2V0X2RiX3hh Y3Rfcm9sbGJhY2soZC5vaWQpIEFTIHhhY3Rfcm9sbGJhY2ssIChwZ19zdGF0 X2dldF9kYl9ibG9ja3NfZmV0Y2hlZChkLm9pZCkgLSBwZ19zdGF0X2dldF9k Yl9ibG9ja3NfaGl0KGQub2lkKSkgQVMgYmxrc19yZWFkLCBwZ19zdGF0X2dl dF9kYl9ibG9ja3NfaGl0KGQub2lkKSBBUyBibGtzX2hpdCwgcGdfc3RhdF9n ZXRfZGJfdHVwbGVzX3JldHVybmVkKGQub2lkKSBBUyB0dXBfcmV0dXJuZWQs IHBnX3N0YXRfZ2V0X2RiX3R1cGxlc19mZXRjaGVkKGQub2lkKSBBUyB0dXBf ZmV0Y2hlZCwgcGdfc3RhdF9nZXRfZGJfdHVwbGVzX2luc2VydGVkKGQub2lk KSBBUyB0dXBfaW5zZXJ0ZWQsIHBnX3N0YXRfZ2V0X2RiX3R1cGxlc191cGRh dGVkKGQub2lkKSBBUyB0dXBfdXBkYXRlZCwgcGdfc3RhdF9nZXRfZGJfdHVw bGVzX2RlbGV0ZWQoZC5vaWQpIEFTIHR1cF9kZWxldGVkIEZST00gcGdfZGF0 YWJhc2UgZDsKICAgcGdfc3RhdF9zeXNfaW5kZXhlcyAgICAgIHwgU0VMRUNU IHBnX3N0YXRfYWxsX2luZGV4ZXMucmVsaWQsIHBnX3N0YXRfYWxsX2luZGV4 ZXMuaW5kZXhyZWxpZCwgcGdfc3RhdF9hbGxfaW5kZXhlcy5zY2hlbWFuYW1l LCBwZ19zdGF0X2FsbF9pbmRleGVzLnJlbG5hbWUsIHBnX3N0YXRfYWxsX2lu ZGV4ZXMuaW5kZXhyZWxuYW1lLCBwZ19zdGF0X2FsbF9pbmRleGVzLmlkeF9z Y2FuLCBwZ19zdGF0X2FsbF9pbmRleGVzLmlkeF90dXBfcmVhZCwgcGdfc3Rh dF9hbGxfaW5kZXhlcy5pZHhfdHVwX2ZldGNoIEZST00gcGdfc3RhdF9hbGxf aW5kZXhlcyBXSEVSRSAocGdfc3RhdF9hbGxfaW5kZXhlcy5zY2hlbWFuYW1l ID0gQU5ZIChBUlJBWVsncGdfY2F0YWxvZyc6OiJuYW1lIiwgJ3BnX3RvYXN0 Jzo6Im5hbWUiLCAnaW5mb3JtYXRpb25fc2NoZW1hJzo6Im5hbWUiXSkpOwog ICBwZ19zdGF0X3N5c190YWJsZXMgICAgICAgfCBTRUxFQ1QgcGdfc3RhdF9h bGxfdGFibGVzLnJlbGlkLCBwZ19zdGF0X2FsbF90YWJsZXMuc2NoZW1hbmFt ZSwgcGdfc3RhdF9hbGxfdGFibGVzLnJlbG5hbWUsIHBnX3N0YXRfYWxsX3Rh Ymxlcy5zZXFfc2NhbiwgcGdfc3RhdF9hbGxfdGFibGVzLnNlcV90dXBfcmVh ZCwgcGdfc3RhdF9hbGxfdGFibGVzLmlkeF9zY2FuLCBwZ19zdGF0X2FsbF90 YWJsZXMuaWR4X3R1cF9mZXRjaCwgcGdfc3RhdF9hbGxfdGFibGVzLm5fdHVw X2lucywgcGdfc3RhdF9hbGxfdGFibGVzLm5fdHVwX3VwZCwgcGdfc3RhdF9h bGxfdGFibGVzLm5fdHVwX2RlbCwgcGdfc3RhdF9hbGxfdGFibGVzLm5fbGl2 ZV90dXAsIHBnX3N0YXRfYWxsX3RhYmxlcy5uX2RlYWRfdHVwLCBwZ19zdGF0 X2FsbF90YWJsZXMubGFzdF92YWN1dW0sIHBnX3N0YXRfYWxsX3RhYmxlcy5s YXN0X2F1dG92YWN1dW0sIHBnX3N0YXRfYWxsX3RhYmxlcy5sYXN0X2FuYWx5 emUsIHBnX3N0YXRfYWxsX3RhYmxlcy5sYXN0X2F1dG9hbmFseXplIEZST00g cGdfc3RhdF9hbGxfdGFibGVzIFdIRVJFIChwZ19zdGF0X2FsbF90YWJsZXMu c2NoZW1hbmFtZSA9IEFOWSAoQVJSQVlbJ3BnX2NhdGFsb2cnOjoibmFtZSIs ICdwZ190b2FzdCc6OiJuYW1lIiwgJ2luZm9ybWF0aW9uX3NjaGVtYSc6OiJu YW1lIl0pKTsKLS0tIDEyOTIsMTI5OCAtLS0tCiAgIHBnX3N0YXRfYWN0aXZp dHkgICAgICAgICB8IFNFTEVDVCBkLm9pZCBBUyBkYXRpZCwgZC5kYXRuYW1l LCBwZ19zdGF0X2dldF9iYWNrZW5kX3BpZChzLmJhY2tlbmRpZCkgQVMgcHJv Y3BpZCwgcGdfc3RhdF9nZXRfYmFja2VuZF91c2VyaWQocy5iYWNrZW5kaWQp IEFTIHVzZXN5c2lkLCB1LnJvbG5hbWUgQVMgdXNlbmFtZSwgcGdfc3RhdF9n ZXRfYmFja2VuZF9hY3Rpdml0eShzLmJhY2tlbmRpZCkgQVMgY3VycmVudF9x dWVyeSwgcGdfc3RhdF9nZXRfYmFja2VuZF93YWl0aW5nKHMuYmFja2VuZGlk KSBBUyB3YWl0aW5nLCBwZ19zdGF0X2dldF9iYWNrZW5kX3R4bl9zdGFydChz LmJhY2tlbmRpZCkgQVMgdHhuX3N0YXJ0LCBwZ19zdGF0X2dldF9iYWNrZW5k X2FjdGl2aXR5X3N0YXJ0KHMuYmFja2VuZGlkKSBBUyBxdWVyeV9zdGFydCwg cGdfc3RhdF9nZXRfYmFja2VuZF9zdGFydChzLmJhY2tlbmRpZCkgQVMgYmFj a2VuZF9zdGFydCwgcGdfc3RhdF9nZXRfYmFja2VuZF9jbGllbnRfYWRkcihz LmJhY2tlbmRpZCkgQVMgY2xpZW50X2FkZHIsIHBnX3N0YXRfZ2V0X2JhY2tl bmRfY2xpZW50X3BvcnQocy5iYWNrZW5kaWQpIEFTIGNsaWVudF9wb3J0IEZS T00gcGdfZGF0YWJhc2UgZCwgKFNFTEVDVCBwZ19zdGF0X2dldF9iYWNrZW5k X2lkc2V0KCkgQVMgYmFja2VuZGlkKSBzLCBwZ19hdXRoaWQgdSBXSEVSRSAo KHBnX3N0YXRfZ2V0X2JhY2tlbmRfZGJpZChzLmJhY2tlbmRpZCkgPSBkLm9p ZCkgQU5EIChwZ19zdGF0X2dldF9iYWNrZW5kX3VzZXJpZChzLmJhY2tlbmRp ZCkgPSB1Lm9pZCkpOwogICBwZ19zdGF0X2FsbF9pbmRleGVzICAgICAgfCBT RUxFQ1QgYy5vaWQgQVMgcmVsaWQsIGkub2lkIEFTIGluZGV4cmVsaWQsIG4u bnNwbmFtZSBBUyBzY2hlbWFuYW1lLCBjLnJlbG5hbWUsIGkucmVsbmFtZSBB UyBpbmRleHJlbG5hbWUsIHBnX3N0YXRfZ2V0X251bXNjYW5zKGkub2lkKSBB UyBpZHhfc2NhbiwgcGdfc3RhdF9nZXRfdHVwbGVzX3JldHVybmVkKGkub2lk KSBBUyBpZHhfdHVwX3JlYWQsIHBnX3N0YXRfZ2V0X3R1cGxlc19mZXRjaGVk KGkub2lkKSBBUyBpZHhfdHVwX2ZldGNoIEZST00gKCgocGdfY2xhc3MgYyBK T0lOIHBnX2luZGV4IHggT04gKChjLm9pZCA9IHguaW5kcmVsaWQpKSkgSk9J TiBwZ19jbGFzcyBpIE9OICgoaS5vaWQgPSB4LmluZGV4cmVsaWQpKSkgTEVG VCBKT0lOIHBnX25hbWVzcGFjZSBuIE9OICgobi5vaWQgPSBjLnJlbG5hbWVz cGFjZSkpKSBXSEVSRSAoYy5yZWxraW5kID0gQU5ZIChBUlJBWVsncic6OiJj aGFyIiwgJ3QnOjoiY2hhciJdKSk7CiAgIHBnX3N0YXRfYWxsX3RhYmxlcyAg ICAgICB8IFNFTEVDVCBjLm9pZCBBUyByZWxpZCwgbi5uc3BuYW1lIEFTIHNj aGVtYW5hbWUsIGMucmVsbmFtZSwgcGdfc3RhdF9nZXRfbnVtc2NhbnMoYy5v aWQpIEFTIHNlcV9zY2FuLCBwZ19zdGF0X2dldF90dXBsZXNfcmV0dXJuZWQo Yy5vaWQpIEFTIHNlcV90dXBfcmVhZCwgKHN1bShwZ19zdGF0X2dldF9udW1z Y2FucyhpLmluZGV4cmVsaWQpKSk6OmJpZ2ludCBBUyBpZHhfc2NhbiwgKChz dW0ocGdfc3RhdF9nZXRfdHVwbGVzX2ZldGNoZWQoaS5pbmRleHJlbGlkKSkp OjpiaWdpbnQgKyBwZ19zdGF0X2dldF90dXBsZXNfZmV0Y2hlZChjLm9pZCkp IEFTIGlkeF90dXBfZmV0Y2gsIHBnX3N0YXRfZ2V0X3R1cGxlc19pbnNlcnRl ZChjLm9pZCkgQVMgbl90dXBfaW5zLCBwZ19zdGF0X2dldF90dXBsZXNfdXBk YXRlZChjLm9pZCkgQVMgbl90dXBfdXBkLCBwZ19zdGF0X2dldF90dXBsZXNf ZGVsZXRlZChjLm9pZCkgQVMgbl90dXBfZGVsLCBwZ19zdGF0X2dldF9saXZl X3R1cGxlcyhjLm9pZCkgQVMgbl9saXZlX3R1cCwgcGdfc3RhdF9nZXRfZGVh ZF90dXBsZXMoYy5vaWQpIEFTIG5fZGVhZF90dXAsIHBnX3N0YXRfZ2V0X2xh c3RfdmFjdXVtX3RpbWUoYy5vaWQpIEFTIGxhc3RfdmFjdXVtLCBwZ19zdGF0 X2dldF9sYXN0X2F1dG92YWN1dW1fdGltZShjLm9pZCkgQVMgbGFzdF9hdXRv dmFjdXVtLCBwZ19zdGF0X2dldF9sYXN0X2FuYWx5emVfdGltZShjLm9pZCkg QVMgbGFzdF9hbmFseXplLCBwZ19zdGF0X2dldF9sYXN0X2F1dG9hbmFseXpl X3RpbWUoYy5vaWQpIEFTIGxhc3RfYXV0b2FuYWx5emUgRlJPTSAoKHBnX2Ns YXNzIGMgTEVGVCBKT0lOIHBnX2luZGV4IGkgT04gKChjLm9pZCA9IGkuaW5k cmVsaWQpKSkgTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBuIE9OICgobi5vaWQg PSBjLnJlbG5hbWVzcGFjZSkpKSBXSEVSRSAoYy5yZWxraW5kID0gQU5ZIChB UlJBWVsncic6OiJjaGFyIiwgJ3QnOjoiY2hhciJdKSkgR1JPVVAgQlkgYy5v aWQsIG4ubnNwbmFtZSwgYy5yZWxuYW1lOwohICBwZ19zdGF0X2Jnd3JpdGVy ICAgICAgICAgfCBTRUxFQ1QgcGdfc3RhdF9nZXRfYmd3cml0ZXJfdGltZWRf Y2hlY2twb2ludHMoKSBBUyBjaGVja3BvaW50c190aW1lZCwgcGdfc3RhdF9n ZXRfYmd3cml0ZXJfcmVxdWVzdGVkX2NoZWNrcG9pbnRzKCkgQVMgY2hlY2tw b2ludHNfcmVxLCBwZ19zdGF0X2dldF9iZ3dyaXRlcl9idWZfd3JpdHRlbl9j aGVja3BvaW50cygpIEFTIGJ1ZmZlcnNfY2hlY2twb2ludCwgcGdfc3RhdF9n ZXRfYmd3cml0ZXJfYnVmX3dyaXR0ZW5fbHJ1KCkgQVMgYnVmZmVyc19scnUs IHBnX3N0YXRfZ2V0X2Jnd3JpdGVyX2J1Zl93cml0dGVuX2FsbCgpIEFTIGJ1 ZmZlcnNfYWxsLCBwZ19zdGF0X2dldF9iZ3dyaXRlcl9tYXh3cml0dGVuX2xy dSgpIEFTIG1heHdyaXR0ZW5fbHJ1LCBwZ19zdGF0X2dldF9iZ3dyaXRlcl9t YXh3cml0dGVuX2FsbCgpIEFTIG1heHdyaXR0ZW5fYWxsLCBwZ19zdGF0X2dl dF9iZ3dyaXRlcl9idWZfd3JpdHRlbl9jbGllbnQoKSBBUyBidWZmZXJzX2Ns aWVudCwgcGdfc3RhdF9nZXRfYmd3cml0ZXJfYnVmX2FsbG9jKCkgQVMgYnVm ZmVyc19hbGxvYzsKICAgcGdfc3RhdF9kYXRhYmFzZSAgICAgICAgIHwgU0VM RUNUIGQub2lkIEFTIGRhdGlkLCBkLmRhdG5hbWUsIHBnX3N0YXRfZ2V0X2Ri X251bWJhY2tlbmRzKGQub2lkKSBBUyBudW1iYWNrZW5kcywgcGdfc3RhdF9n ZXRfZGJfeGFjdF9jb21taXQoZC5vaWQpIEFTIHhhY3RfY29tbWl0LCBwZ19z dGF0X2dldF9kYl94YWN0X3JvbGxiYWNrKGQub2lkKSBBUyB4YWN0X3JvbGxi YWNrLCAocGdfc3RhdF9nZXRfZGJfYmxvY2tzX2ZldGNoZWQoZC5vaWQpIC0g cGdfc3RhdF9nZXRfZGJfYmxvY2tzX2hpdChkLm9pZCkpIEFTIGJsa3NfcmVh ZCwgcGdfc3RhdF9nZXRfZGJfYmxvY2tzX2hpdChkLm9pZCkgQVMgYmxrc19o aXQsIHBnX3N0YXRfZ2V0X2RiX3R1cGxlc19yZXR1cm5lZChkLm9pZCkgQVMg dHVwX3JldHVybmVkLCBwZ19zdGF0X2dldF9kYl90dXBsZXNfZmV0Y2hlZChk Lm9pZCkgQVMgdHVwX2ZldGNoZWQsIHBnX3N0YXRfZ2V0X2RiX3R1cGxlc19p bnNlcnRlZChkLm9pZCkgQVMgdHVwX2luc2VydGVkLCBwZ19zdGF0X2dldF9k Yl90dXBsZXNfdXBkYXRlZChkLm9pZCkgQVMgdHVwX3VwZGF0ZWQsIHBnX3N0 YXRfZ2V0X2RiX3R1cGxlc19kZWxldGVkKGQub2lkKSBBUyB0dXBfZGVsZXRl ZCBGUk9NIHBnX2RhdGFiYXNlIGQ7CiAgIHBnX3N0YXRfc3lzX2luZGV4ZXMg ICAgICB8IFNFTEVDVCBwZ19zdGF0X2FsbF9pbmRleGVzLnJlbGlkLCBwZ19z dGF0X2FsbF9pbmRleGVzLmluZGV4cmVsaWQsIHBnX3N0YXRfYWxsX2luZGV4 ZXMuc2NoZW1hbmFtZSwgcGdfc3RhdF9hbGxfaW5kZXhlcy5yZWxuYW1lLCBw Z19zdGF0X2FsbF9pbmRleGVzLmluZGV4cmVsbmFtZSwgcGdfc3RhdF9hbGxf aW5kZXhlcy5pZHhfc2NhbiwgcGdfc3RhdF9hbGxfaW5kZXhlcy5pZHhfdHVw X3JlYWQsIHBnX3N0YXRfYWxsX2luZGV4ZXMuaWR4X3R1cF9mZXRjaCBGUk9N IHBnX3N0YXRfYWxsX2luZGV4ZXMgV0hFUkUgKHBnX3N0YXRfYWxsX2luZGV4 ZXMuc2NoZW1hbmFtZSA9IEFOWSAoQVJSQVlbJ3BnX2NhdGFsb2cnOjoibmFt ZSIsICdwZ190b2FzdCc6OiJuYW1lIiwgJ2luZm9ybWF0aW9uX3NjaGVtYSc6 OiJuYW1lIl0pKTsKICAgcGdfc3RhdF9zeXNfdGFibGVzICAgICAgIHwgU0VM RUNUIHBnX3N0YXRfYWxsX3RhYmxlcy5yZWxpZCwgcGdfc3RhdF9hbGxfdGFi bGVzLnNjaGVtYW5hbWUsIHBnX3N0YXRfYWxsX3RhYmxlcy5yZWxuYW1lLCBw Z19zdGF0X2FsbF90YWJsZXMuc2VxX3NjYW4sIHBnX3N0YXRfYWxsX3RhYmxl cy5zZXFfdHVwX3JlYWQsIHBnX3N0YXRfYWxsX3RhYmxlcy5pZHhfc2Nhbiwg cGdfc3RhdF9hbGxfdGFibGVzLmlkeF90dXBfZmV0Y2gsIHBnX3N0YXRfYWxs X3RhYmxlcy5uX3R1cF9pbnMsIHBnX3N0YXRfYWxsX3RhYmxlcy5uX3R1cF91 cGQsIHBnX3N0YXRfYWxsX3RhYmxlcy5uX3R1cF9kZWwsIHBnX3N0YXRfYWxs X3RhYmxlcy5uX2xpdmVfdHVwLCBwZ19zdGF0X2FsbF90YWJsZXMubl9kZWFk X3R1cCwgcGdfc3RhdF9hbGxfdGFibGVzLmxhc3RfdmFjdXVtLCBwZ19zdGF0 X2FsbF90YWJsZXMubGFzdF9hdXRvdmFjdXVtLCBwZ19zdGF0X2FsbF90YWJs ZXMubGFzdF9hbmFseXplLCBwZ19zdGF0X2FsbF90YWJsZXMubGFzdF9hdXRv YW5hbHl6ZSBGUk9NIHBnX3N0YXRfYWxsX3RhYmxlcyBXSEVSRSAocGdfc3Rh dF9hbGxfdGFibGVzLnNjaGVtYW5hbWUgPSBBTlkgKEFSUkFZWydwZ19jYXRh bG9nJzo6Im5hbWUiLCAncGdfdG9hc3QnOjoibmFtZSIsICdpbmZvcm1hdGlv bl9zY2hlbWEnOjoibmFtZSJdKSk7Cg== ---559023410-758783491-1179012583=:9615--