From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4309 invoked by alias); 22 Jun 2011 19:56:18 -0000 Received: (qmail 4149 invoked by uid 22791); 22 Jun 2011 19:56:17 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RFC_ABUSE_POST X-Spam-Check-By: sourceware.org Received: from mail-pz0-f48.google.com (HELO mail-pz0-f48.google.com) (209.85.210.48) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 22 Jun 2011 19:56:02 +0000 Received: by pzk10 with SMTP id 10so968376pzk.21 for ; Wed, 22 Jun 2011 12:56:01 -0700 (PDT) MIME-Version: 1.0 Received: by 10.143.59.1 with SMTP id m1mr282308wfk.192.1308772561569; Wed, 22 Jun 2011 12:56:01 -0700 (PDT) Received: by 10.143.4.7 with HTTP; Wed, 22 Jun 2011 12:56:01 -0700 (PDT) In-Reply-To: References: Date: Wed, 22 Jun 2011 20:17:00 -0000 Message-ID: Subject: Re: RFC: __gnu_cxx::__alloc_traits extension From: Jonathan Wakely To: "libstdc++" , gcc-patches Content-Type: multipart/mixed; boundary=0015174015449fc78804a6525bd4 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-06/txt/msg01710.txt.bz2 --0015174015449fc78804a6525bd4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 902 On 11 June 2011 16:41, Jonathan Wakely wrote: > > 2011-06-11 =A0Jonathan Wakely =A0 > > =A0 =A0 =A0 =A0* include/Makefile.am: Add alloc_traits.h headers. > =A0 =A0 =A0 =A0* include/Makefile.in: Regenerate. > =A0 =A0 =A0 =A0* include/std/memory: Include uses_allocator.h explicitly. > =A0 =A0 =A0 =A0* include/bits/allocator.h (allocator_traits): Move to ... > =A0 =A0 =A0 =A0* include/bits/alloc_traits.h: New header. > =A0 =A0 =A0 =A0* include/ext/alloc_traits.h (__alloc_traits): Extension t= o provide > =A0 =A0 =A0 =A0a common allocator interface for C++98 and C++0x. > =A0 =A0 =A0 =A0* include/bits/stl_construct.h: Use __alloc_traits. > =A0 =A0 =A0 =A0* include/bits/stl_uninitialized.h: Likewise. > Re-tested on x86_64-linux and committed as attached (the same as the patch I sent 11 days ago but with one additional doxygen comment in the new ext/alloc_traits.h header) --0015174015449fc78804a6525bd4 Content-Type: application/octet-stream; name=patch Content-Disposition: attachment; filename=patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_gp8pda0q1 Content-length: 53005 SW5kZXg6IGluY2x1ZGUvTWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gaW5jbHVkZS9NYWtlZmlsZS5hbQkocmV2aXNpb24gMTc1Mjc2 KQorKysgaW5jbHVkZS9NYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAt NzksNiArNzksNyBAQAogYml0c19idWlsZGRpciA9IC4vYml0cwogYml0c19o ZWFkZXJzID0gXAogICAgICAgICAke2JpdHNfc3JjZGlyfS9hbGdvcml0aG1m d2QuaCBcCisJJHtiaXRzX3NyY2Rpcn0vYWxsb2NfdHJhaXRzLmggXAogCSR7 Yml0c19zcmNkaXJ9L2FsbG9jYXRvci5oIFwKIAkke2JpdHNfc3JjZGlyfS9h dG9taWNfYmFzZS5oIFwKIAkke2JpdHNfc3JjZGlyfS9hdG9taWNfMC5oIFwK QEAgLTQ5Myw2ICs0OTQsNyBAQAogZXh0X2J1aWxkZGlyID0gLi9leHQKIGV4 dF9oZWFkZXJzID0gXAogCSR7ZXh0X3NyY2Rpcn0vYWxnb3JpdGhtIFwKKwkk e2V4dF9zcmNkaXJ9L2FsbG9jX3RyYWl0cy5oIFwKIAkke2V4dF9zcmNkaXJ9 L2F0b21pY2l0eS5oIFwKIAkke2V4dF9zcmNkaXJ9L2FycmF5X2FsbG9jYXRv ci5oIFwKIAkke2V4dF9zcmNkaXJ9L2JpdG1hcF9hbGxvY2F0b3IuaCBcCklu ZGV4OiBpbmNsdWRlL3N0ZC9tZW1vcnkKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gaW5jbHVkZS9zdGQvbWVtb3J5CShyZXZpc2lvbiAxNzUyNzYpCisr KyBpbmNsdWRlL3N0ZC9tZW1vcnkJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYg Kzc2LDcgQEAKICMgIGluY2x1ZGUgPGV4dC9jb25jdXJyZW5jZS5oPgogIyAg aW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgogIyAgaW5jbHVkZSA8Yml0 cy9zdGxfZnVuY3Rpb24uaD4gIC8vIHN0ZDo6bGVzcworIyAgaW5jbHVkZSA8 Yml0cy91c2VzX2FsbG9jYXRvci5oPgogIyAgaW5jbHVkZSA8dHlwZV90cmFp dHM+CiAjICBpbmNsdWRlIDxmdW5jdGlvbmFsPgogIyAgaW5jbHVkZSA8ZGVi dWcvZGVidWcuaD4KSW5kZXg6IGluY2x1ZGUvYml0cy9hbGxvY2F0b3IuaAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL2JpdHMvYWxsb2Nh dG9yLmgJKHJldmlzaW9uIDE3NTI3NikKKysrIGluY2x1ZGUvYml0cy9hbGxv Y2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTIgKzQ3LDYgQEAKIC8v IERlZmluZSB0aGUgYmFzZSBjbGFzcyB0byBzdGQ6OmFsbG9jYXRvci4KICNp bmNsdWRlIDxiaXRzL2MrK2FsbG9jYXRvci5oPgogCi0jaWZkZWYgX19HWFhf RVhQRVJJTUVOVEFMX0NYWDBYX18KLSNpbmNsdWRlIDxiaXRzL3B0cl90cmFp dHMuaD4KLSNpbmNsdWRlIDxiaXRzL3VzZXNfYWxsb2NhdG9yLmg+Ci0jaW5j bHVkZSA8ZXh0L251bWVyaWNfdHJhaXRzLmg+Ci0jZW5kaWYKLQogbmFtZXNw YWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCiB7CiBfR0xJ QkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgpAQCAtNjIsNiArNTYsOCBA QAogICAgKiBAaW5ncm91cCBtZW1vcnkKICAgICoKICAgICogQ2xhc3NlcyBl bmNhcHN1bGF0aW5nIG1lbW9yeSBvcGVyYXRpb25zLgorICAgKgorICAgKiBA ewogICAgKi8KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CkBAIC04NSw3 ICs4MSw2IEBACiAKICAgLyoqCiAgICAqIEBicmllZiAgVGhlIEBhIHN0YW5k YXJkIGFsbG9jYXRvciwgYXMgcGVyIFsyMC40XS4KLSAgICogQGluZ3JvdXAg YWxsb2NhdG9ycwogICAgKgogICAgKiAgU2VlIGh0dHA6Ly9nY2MuZ251Lm9y Zy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MDRjaDExLmh0 bWwKICAgICogIGZvciBmdXJ0aGVyIGRldGFpbHMuCkBAIC0xMzksNiArMTM0 LDEwIEBACiAgICAgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1RwPiYs IGNvbnN0IGFsbG9jYXRvcjxfVHA+JikKICAgICB7IHJldHVybiBmYWxzZTsg fQogCisgIC8qKgorICAgKiBAfQorICAgKi8KKwogICAvLyBJbmhpYml0IGlt cGxpY2l0IGluc3RhbnRpYXRpb25zIGZvciByZXF1aXJlZCBpbnN0YW50aWF0 aW9ucywKICAgLy8gd2hpY2ggYXJlIGRlZmluZWQgdmlhIGV4cGxpY2l0IGlu c3RhbnRpYXRpb25zIGVsc2V3aGVyZS4KICNpZiBfR0xJQkNYWF9FWFRFUk5f VEVNUExBVEUKQEAgLTIwNyw0MDQgKzIwNiw5IEBACiAgICAgICB9CiAgICAg fTsKIAotICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9U cD4KLSAgICBjbGFzcyBfX2FsbG9jdHJfcmViaW5kX2hlbHBlcgotICAgIHsK LSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYzIsIHR5cGVuYW1lIF9U cDI+Ci0Jc3RhdGljIGNvbnN0ZXhwciBib29sCi0gICAgICAgCV9TX2Noayh0 eXBlbmFtZSBfQWxsb2MyOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwMj46Om90aGVy KikKLQl7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgIHRlbXBsYXRlPHR5cGVu YW1lLCB0eXBlbmFtZT4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s Ci0gICAgICAgCV9TX2NoayguLi4pCi0gICAgICAgCXsgcmV0dXJuIGZhbHNl OyB9Ci0KLSAgICBwdWJsaWM6Ci0gICAgICBzdGF0aWMgY29uc3QgYm9vbCBf X3ZhbHVlID0gX1NfY2hrPF9BbGxvYywgX1RwPihudWxscHRyKTsKLSAgICB9 OwotCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1Rw LAotICAgICAgICAgICBib29sID0gX19hbGxvY3RyX3JlYmluZF9oZWxwZXI8 X0FsbG9jLCBfVHA+OjpfX3ZhbHVlPgotICAgIHN0cnVjdCBfX2FsbG9jdHJf cmViaW5kOwotCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYywgdHlwZW5h bWUgX1RwPgotICAgIHN0cnVjdCBfX2FsbG9jdHJfcmViaW5kPF9BbGxvYywg X1RwLCB0cnVlPgotICAgIHsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs bG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgX190eXBlOwotICAg IH07Ci0KLSAgdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1l Li4uPiBjbGFzcyBfQWxsb2MsIHR5cGVuYW1lIF9UcCwKLSAgICAgICAgICAg IHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUuLi4gX0FyZ3M+Ci0gICAgc3RydWN0 IF9fYWxsb2N0cl9yZWJpbmQ8X0FsbG9jPF9VcCwgX0FyZ3MuLi4+LCBfVHAs IGZhbHNlPgotICAgIHsKLSAgICAgIHR5cGVkZWYgX0FsbG9jPF9UcCwgX0Fy Z3MuLi4+IF9fdHlwZTsKLSAgICB9OwotCi0gIC8qKgotICAgKiBAYnJpZWYg IFVuaWZvcm0gaW50ZXJmYWNlIHRvIGFsbCBhbGxvY2F0b3IgdHlwZXMuCi0g ICAqIEBpbmdyb3VwIGFsbG9jYXRvcnMKLSAgKi8KLSAgdGVtcGxhdGU8dHlw ZW5hbWUgX0FsbG9jPgotICAgIHN0cnVjdCBhbGxvY2F0b3JfdHJhaXRzCi0g ICAgewotICAgICAgLy8vIFRoZSBhbGxvY2F0b3IgdHlwZQotICAgICAgdHlw ZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7Ci0gICAgICAvLy8gVGhlIGFs bG9jYXRlZCB0eXBlCi0gICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6 dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwotCi0jZGVmaW5lIF9HTElCQ1hYX0FM TE9DX1RSX05FU1RFRF9UWVBFKF9OVFlQRSwgX0FMVCkgXAotICBwcml2YXRl OiBcCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gXAotICAgIHN0YXRpYyB0 eXBlbmFtZSBfVHA6Ol9OVFlQRSBfU18jI19OVFlQRSMjX2hlbHBlcihfVHAq KTsgXAotICBzdGF0aWMgX0FMVCBfU18jI19OVFlQRSMjX2hlbHBlciguLi4p OyBcCi0gICAgdHlwZWRlZiBkZWNsdHlwZShfU18jI19OVFlQRSMjX2hlbHBl cigoX0FsbG9jKikwKSkgX18jI19OVFlQRTsgXAotICBwdWJsaWM6Ci0KLV9H TElCQ1hYX0FMTE9DX1RSX05FU1RFRF9UWVBFKHBvaW50ZXIsIHZhbHVlX3R5 cGUqKQotCi0gICAgICAvKioKLSAgICAgICAqIEBicmllZiAgIFRoZSBhbGxv Y2F0b3IncyBwb2ludGVyIHR5cGUuCi0gICAgICAgKgotICAgICAgICogQGMg QWxsb2M6OnBvaW50ZXIgaWYgdGhhdCB0eXBlIGV4aXN0cywgb3RoZXJ3aXNl IEBjIHZhbHVlX3R5cGUqCi0gICAgICAqLwotICAgICAgdHlwZWRlZiBfX3Bv aW50ZXIgcG9pbnRlcjsKLQotLy8gVE9ETzogVXNlIHBvaW50ZXJfdHJhaXRz OjpyZWJpbmQgYWxpYXMgdGVtcGxhdGUuCi0KLV9HTElCQ1hYX0FMTE9DX1RS X05FU1RFRF9UWVBFKGNvbnN0X3BvaW50ZXIsCi0gIHR5cGVuYW1lIHBvaW50 ZXJfdHJhaXRzPHBvaW50ZXI+Ojp0ZW1wbGF0ZSBfX3JlYmluZDxjb25zdCB2 YWx1ZV90eXBlPjo6X190eXBlKQotCi0gICAgICAvKioKLSAgICAgICAqIEBi cmllZiAgIFRoZSBhbGxvY2F0b3IncyBjb25zdCBwb2ludGVyIHR5cGUuCi0g ICAgICAgKgotICAgICAgICogQGMgQWxsb2M6OmNvbnN0X3BvaW50ZXIgaWYg dGhhdCB0eXBlIGV4aXN0cywgb3RoZXJ3aXNlCi0gICAgICAgKiA8dHQ+IHBv aW50ZXJfdHJhaXRzPHBvaW50ZXI+OjpyZWJpbmQ8Y29uc3QgdmFsdWVfdHlw ZT4gPC90dD4KLSAgICAgICovCi0gICAgICB0eXBlZGVmIF9fY29uc3RfcG9p bnRlciBjb25zdF9wb2ludGVyOwotCi1fR0xJQkNYWF9BTExPQ19UUl9ORVNU RURfVFlQRSh2b2lkX3BvaW50ZXIsCi0gIHR5cGVuYW1lIHBvaW50ZXJfdHJh aXRzPHBvaW50ZXI+Ojp0ZW1wbGF0ZSBfX3JlYmluZDx2b2lkPjo6X190eXBl KQotCi0gICAgICAvKioKLSAgICAgICAqIEBicmllZiAgIFRoZSBhbGxvY2F0 b3IncyB2b2lkIHBvaW50ZXIgdHlwZS4KLSAgICAgICAqCi0gICAgICAgKiBA YyBBbGxvYzo6dm9pZF9wb2ludGVyIGlmIHRoYXQgdHlwZSBleGlzdHMsIG90 aGVyd2lzZQotICAgICAgICogPHR0PiBwb2ludGVyX3RyYWl0czxwb2ludGVy Pjo6cmViaW5kPHZvaWQ+IDwvdHQ+Ci0gICAgICAqLwotICAgICAgdHlwZWRl ZiBfX3ZvaWRfcG9pbnRlciB2b2lkX3BvaW50ZXI7Ci0KLV9HTElCQ1hYX0FM TE9DX1RSX05FU1RFRF9UWVBFKGNvbnN0X3ZvaWRfcG9pbnRlciwKLSAgdHlw ZW5hbWUgcG9pbnRlcl90cmFpdHM8cG9pbnRlcj46OnRlbXBsYXRlIF9fcmVi aW5kPGNvbnN0IHZvaWQ+OjpfX3R5cGUpCi0KLSAgICAgIC8qKgotICAgICAg ICogQGJyaWVmICAgVGhlIGFsbG9jYXRvcidzIGNvbnN0IHZvaWQgcG9pbnRl ciB0eXBlLgotICAgICAgICoKLSAgICAgICAqIEBjIEFsbG9jOjpjb25zdF92 b2lkX3BvaW50ZXIgaWYgdGhhdCB0eXBlIGV4aXN0cywgb3RoZXJ3aXNlCi0g ICAgICAgKiA8dHQ+IHBvaW50ZXJfdHJhaXRzPHBvaW50ZXI+OjpyZWJpbmQ8 Y29uc3Qgdm9pZD4gPC90dD4KLSAgICAgICovCi0gICAgICB0eXBlZGVmIF9f Y29uc3Rfdm9pZF9wb2ludGVyIGNvbnN0X3ZvaWRfcG9pbnRlcjsKLQotX0dM SUJDWFhfQUxMT0NfVFJfTkVTVEVEX1RZUEUoZGlmZmVyZW5jZV90eXBlLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgcG9pbnRl cl90cmFpdHM8cG9pbnRlcj46OmRpZmZlcmVuY2VfdHlwZSkKLQotICAgICAg LyoqCi0gICAgICAgKiBAYnJpZWYgICBUaGUgYWxsb2NhdG9yJ3MgZGlmZmVy ZW5jZSB0eXBlCi0gICAgICAgKgotICAgICAgICogQGMgQWxsb2M6OmRpZmZl cmVuY2VfdHlwZSBpZiB0aGF0IHR5cGUgZXhpc3RzLCBvdGhlcndpc2UKLSAg ICAgICAqIDx0dD4gcG9pbnRlcl90cmFpdHM8cG9pbnRlcj46OmRpZmZlcmVu Y2VfdHlwZSA8L3R0PgotICAgICAgKi8KLSAgICAgIHR5cGVkZWYgX19kaWZm ZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwotCi1fR0xJQkNYWF9BTExP Q19UUl9ORVNURURfVFlQRShzaXplX3R5cGUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0eXBlbmFtZSBtYWtlX3Vuc2lnbmVkPGRpZmZlcmVu Y2VfdHlwZT46OnR5cGUpCi0KLSAgICAgIC8qKgotICAgICAgICogQGJyaWVm ICAgVGhlIGFsbG9jYXRvcidzIHNpemUgdHlwZQotICAgICAgICoKLSAgICAg ICAqIEBjIEFsbG9jOjpzaXplX3R5cGUgaWYgdGhhdCB0eXBlIGV4aXN0cywg b3RoZXJ3aXNlCi0gICAgICAgKiA8dHQ+IG1ha2VfdW5zaWduZWQ8ZGlmZmVy ZW5jZV90eXBlPjo6dHlwZSA8L3R0PgotICAgICAgKi8KLSAgICAgIHR5cGVk ZWYgX19zaXplX3R5cGUgc2l6ZV90eXBlOwotCi1fR0xJQkNYWF9BTExPQ19U Ul9ORVNURURfVFlQRShwcm9wYWdhdGVfb25fY29udGFpbmVyX2NvcHlfYXNz aWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNl X3R5cGUpCi0KLSAgICAgIC8qKgotICAgICAgICogQGJyaWVmICAgSG93IHRo ZSBhbGxvY2F0b3IgaXMgcHJvcGFnYXRlZCBvbiBjb3B5IGFzc2lnbm1lbnQK LSAgICAgICAqCi0gICAgICAgKiBAYyBBbGxvYzo6cHJvcGFnYXRlX29uX2Nv bnRhaW5lcl9jb3B5X2Fzc2lnbm1lbnQgaWYgdGhhdCB0eXBlIGV4aXN0cywK LSAgICAgICAqIG90aGVyd2lzZSBAYyBmYWxzZV90eXBlCi0gICAgICAqLwot ICAgICAgdHlwZWRlZiBfX3Byb3BhZ2F0ZV9vbl9jb250YWluZXJfY29weV9h c3NpZ25tZW50Ci0gICAgICAgCXByb3BhZ2F0ZV9vbl9jb250YWluZXJfY29w eV9hc3NpZ25tZW50OwotCi1fR0xJQkNYWF9BTExPQ19UUl9ORVNURURfVFlQ RShwcm9wYWdhdGVfb25fY29udGFpbmVyX21vdmVfYXNzaWdubWVudCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlX3R5cGUpCi0KLSAg ICAgIC8qKgotICAgICAgICogQGJyaWVmICAgSG93IHRoZSBhbGxvY2F0b3Ig aXMgcHJvcGFnYXRlZCBvbiBtb3ZlIGFzc2lnbm1lbnQKLSAgICAgICAqCi0g ICAgICAgKiBAYyBBbGxvYzo6cHJvcGFnYXRlX29uX2NvbnRhaW5lcl9tb3Zl X2Fzc2lnbm1lbnQgaWYgdGhhdCB0eXBlIGV4aXN0cywKLSAgICAgICAqIG90 aGVyd2lzZSBAYyBmYWxzZV90eXBlCi0gICAgICAqLwotICAgICAgdHlwZWRl ZiBfX3Byb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50Ci0g ICAgICAgCXByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50 OwotCi1fR0xJQkNYWF9BTExPQ19UUl9ORVNURURfVFlQRShwcm9wYWdhdGVf b25fY29udGFpbmVyX3N3YXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmYWxzZV90eXBlKQotCi0gICAgICAvKioKLSAgICAgICAqIEBicmll ZiAgIEhvdyB0aGUgYWxsb2NhdG9yIGlzIHByb3BhZ2F0ZWQgb24gc3dhcAot ICAgICAgICoKLSAgICAgICAqIEBjIEFsbG9jOjpwcm9wYWdhdGVfb25fY29u dGFpbmVyX3N3YXAgaWYgdGhhdCB0eXBlIGV4aXN0cywKLSAgICAgICAqIG90 aGVyd2lzZSBAYyBmYWxzZV90eXBlCi0gICAgICAqLwotICAgICAgdHlwZWRl ZiBfX3Byb3BhZ2F0ZV9vbl9jb250YWluZXJfc3dhcCBwcm9wYWdhdGVfb25f Y29udGFpbmVyX3N3YXA7Ci0KLSN1bmRlZiBfR0xJQkNYWF9BTExPQ19UUl9O RVNURURfVFlQRQotCi0gICAgICAvKiBUT0RPOiB1c2UgdGVtcGxhdGUgYWxp YXMgCi0gICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+Ci0gICAgICAgIHVz aW5nIHJlYmluZF9hbGxvYyA9IF9fYWxsb2N0cl9yZWJpbmQ8X0FsbG9jLCBf VHA+OjpfX3R5cGU7Ci0gICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+Ci0g ICAgICAgIHVzaW5nIHJlYmluZF90cmFpdHMgPSBhbGxvY2F0b3JfdHJhaXRz PHJlYmluZF9hbGxvYzxfVHA+PjsKLSAgICAgICovCi0gICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+Ci0gICAgICAgIHN0cnVjdCBfX3JlYmluZF9hbGxv YwotCXsKLSAgCSAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbG9jdHJfcmViaW5k PF9BbGxvYywgX1RwPjo6X190eXBlIF9fdHlwZTsKLSAgICAgICAJfTsKLQot ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgotICAgICAgICBzdHJ1Y3Qg X19yZWJpbmRfdHJhaXRzCi0JewotCSAgdHlwZWRlZiBhbGxvY2F0b3JfdHJh aXRzPHR5cGVuYW1lIF9fcmViaW5kX2FsbG9jPF9UcD46Ol9fdHlwZT4gX190 eXBlOwotCX07Ci0KLSAgICBwcml2YXRlOgotICAgICAgdGVtcGxhdGU8dHlw ZW5hbWUgX0FsbG9jMj4KLQlzdHJ1Y3QgX19hbGxvY2F0ZV9oZWxwZXIKLQl7 Ci0JICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MzLAotCSAgICB0eXBlbmFt ZSA9IGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxfQWxsb2MzKj4oKS0+YWxsb2Nh dGUoCi0JCSAgc3RkOjpkZWNsdmFsPHNpemVfdHlwZT4oKSwKLQkJICBzdGQ6 OmRlY2x2YWw8Y29uc3Rfdm9pZF9wb2ludGVyPigpKSk+Ci0JICAgIHN0YXRp YyB0cnVlX3R5cGUgX190ZXN0KGludCk7Ci0KLQkgIHRlbXBsYXRlPHR5cGVu YW1lPgotCSAgICBzdGF0aWMgZmFsc2VfdHlwZSBfX3Rlc3QoLi4uKTsKLQot CSAgdHlwZWRlZiBkZWNsdHlwZShfX3Rlc3Q8X0FsbG9jPigwKSkgdHlwZTsK LQkgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHlwZTo6dmFsdWU7Ci0J fTsKLQotICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMj4KLQlzdGF0 aWMgdHlwZW5hbWUKLSAgICAgICAJZW5hYmxlX2lmPF9fYWxsb2NhdGVfaGVs cGVyPF9BbGxvYzI+Ojp2YWx1ZSwgcG9pbnRlcj46OnR5cGUKLSAgICAgICAJ X1NfYWxsb2NhdGUoX0FsbG9jMiYgX19hLCBzaXplX3R5cGUgX19uLCBjb25z dF92b2lkX3BvaW50ZXIgX19oaW50KQotCXsgcmV0dXJuIF9fYS5hbGxvY2F0 ZShfX24sIF9faGludCk7IH0KLQotICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg X0FsbG9jMj4KLQlzdGF0aWMgdHlwZW5hbWUKLSAgICAgICAJZW5hYmxlX2lm PCFfX2FsbG9jYXRlX2hlbHBlcjxfQWxsb2MyPjo6dmFsdWUsIHBvaW50ZXI+ Ojp0eXBlCi0gICAgICAgCV9TX2FsbG9jYXRlKF9BbGxvYzImIF9fYSwgc2l6 ZV90eXBlIF9fbiwgLi4uKQotCXsgcmV0dXJuIF9fYS5hbGxvY2F0ZShfX24p OyB9Ci0KLSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUu Li4gX0FyZ3M+Ci0Jc3RydWN0IF9fY29uc3RydWN0X2hlbHBlcgotCXsKLQkg IHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYzIsCi0JICAgIHR5cGVuYW1lID0g ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9BbGxvYzIqPigpLT5jb25zdHJ1Y3Qo Ci0JCSAgc3RkOjpkZWNsdmFsPF9UcCo+KCksIHN0ZDo6ZGVjbHZhbDxfQXJn cz4oKS4uLikpPgotCSAgICBzdGF0aWMgdHJ1ZV90eXBlIF9fdGVzdChpbnQp OwotCi0JICB0ZW1wbGF0ZTx0eXBlbmFtZT4KLQkgICAgc3RhdGljIGZhbHNl X3R5cGUgX190ZXN0KC4uLik7Ci0KLQkgIHR5cGVkZWYgZGVjbHR5cGUoX190 ZXN0PF9BbGxvYz4oMCkpIHR5cGU7Ci0JICBzdGF0aWMgY29uc3QgYm9vbCB2 YWx1ZSA9IHR5cGU6OnZhbHVlOwotCX07Ci0KLSAgICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+Ci0Jc3RhdGljIHR5cGVu YW1lCi0gICAgICAgCWVuYWJsZV9pZjxfX2NvbnN0cnVjdF9oZWxwZXI8X1Rw LCBfQXJncy4uLj46OnZhbHVlLCB2b2lkPjo6dHlwZQotICAgICAgIAlfU19j b25zdHJ1Y3QoX0FsbG9jJiBfX2EsIF9UcCogX19wLCBfQXJncyYmLi4uIF9f YXJncykKLQl7IF9fYS5jb25zdHJ1Y3QoX19wLCBzdGQ6OmZvcndhcmQ8X0Fy Z3M+KF9fYXJncykuLi4pOyB9Ci0KLSAgICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+Ci0Jc3RhdGljIHR5cGVuYW1lCi0g ICAgICAgCWVuYWJsZV9pZjwhX19jb25zdHJ1Y3RfaGVscGVyPF9UcCwgX0Fy Z3MuLi4+Ojp2YWx1ZSwgdm9pZD46OnR5cGUKLSAgICAgICAJX1NfY29uc3Ry dWN0KF9BbGxvYyYsIF9UcCogX19wLCBfQXJncyYmLi4uIF9fYXJncykKLQl7 IDo6bmV3KCh2b2lkKilfX3ApIF9UcChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9f YXJncykuLi4pOyB9Ci0KLSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K LQlzdHJ1Y3QgX19kZXN0cm95X2hlbHBlcgotCXsKLQkgIHRlbXBsYXRlPHR5 cGVuYW1lIF9BbGxvYzIsCi0JICAgIHR5cGVuYW1lID0gZGVjbHR5cGUoc3Rk OjpkZWNsdmFsPF9BbGxvYzIqPigpLT5kZXN0cm95KAotCQkgIHN0ZDo6ZGVj bHZhbDxfVHAqPigpKSk+Ci0JICAgIHN0YXRpYyB0cnVlX3R5cGUgX190ZXN0 KGludCk7Ci0KLQkgIHRlbXBsYXRlPHR5cGVuYW1lPgotCSAgICBzdGF0aWMg ZmFsc2VfdHlwZSBfX3Rlc3QoLi4uKTsKLQotCSAgdHlwZWRlZiBkZWNsdHlw ZShfX3Rlc3Q8X0FsbG9jPigwKSkgdHlwZTsKLQkgIHN0YXRpYyBjb25zdCBi b29sIHZhbHVlID0gdHlwZTo6dmFsdWU7Ci0JfTsKLQotICAgICAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgotCXN0YXRpYyB0eXBlbmFtZSBlbmFibGVfaWY8 X19kZXN0cm95X2hlbHBlcjxfVHA+Ojp2YWx1ZSwgdm9pZD46OnR5cGUKLSAg ICAgICAJX1NfZGVzdHJveShfQWxsb2MmIF9fYSwgX1RwKiBfX3ApCi0JeyBf X2EuZGVzdHJveShfX3ApOyB9Ci0KLSAgICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KLQlzdGF0aWMgdHlwZW5hbWUgZW5hYmxlX2lmPCFfX2Rlc3Ryb3lf aGVscGVyPF9UcD46OnZhbHVlLCB2b2lkPjo6dHlwZQotICAgICAgIAlfU19k ZXN0cm95KF9BbGxvYyYsIF9UcCogX19wKQotCXsgX19wLT5+X1RwKCk7IH0K LQotICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMj4KLQlzdHJ1Y3Qg X19tYXhzaXplX2hlbHBlcgotCXsKLQkgIHRlbXBsYXRlPHR5cGVuYW1lIF9B bGxvYzMsCi0JICAgIHR5cGVuYW1lID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFs PF9BbGxvYzMqPigpLT5tYXhfc2l6ZSgpKT4KLQkgICAgc3RhdGljIHRydWVf dHlwZSBfX3Rlc3QoaW50KTsKLQotCSAgdGVtcGxhdGU8dHlwZW5hbWU+Ci0J ICAgIHN0YXRpYyBmYWxzZV90eXBlIF9fdGVzdCguLi4pOwotCi0JICB0eXBl ZGVmIGRlY2x0eXBlKF9fdGVzdDxfQWxsb2MyPigwKSkgdHlwZTsKLQkgIHN0 YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHlwZTo6dmFsdWU7Ci0JfTsKLQot ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMj4KLQlzdGF0aWMgdHlw ZW5hbWUKLSAgICAgICAJZW5hYmxlX2lmPF9fbWF4c2l6ZV9oZWxwZXI8X0Fs bG9jMj46OnZhbHVlLCBzaXplX3R5cGU+Ojp0eXBlCi0gICAgICAgCV9TX21h eF9zaXplKF9BbGxvYzImIF9fYSkKLQl7IHJldHVybiBfX2EubWF4X3NpemUo KTsgfQotCi0gICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MyPgotCXN0 YXRpYyB0eXBlbmFtZQotICAgICAgIAllbmFibGVfaWY8IV9fbWF4c2l6ZV9o ZWxwZXI8X0FsbG9jMj46OnZhbHVlLCBzaXplX3R5cGU+Ojp0eXBlCi0JX1Nf bWF4X3NpemUoX0FsbG9jMiYpCi0JeyByZXR1cm4gX19nbnVfY3h4OjpfX251 bWVyaWNfdHJhaXRzPHNpemVfdHlwZT46Ol9fbWF4OyB9Ci0KLSAgICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9BbGxvYzI+Ci0Jc3RydWN0IF9fc2VsZWN0X2hl bHBlcgotCXsKLQkgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYzMsIHR5cGVu YW1lCi0JICAgID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9BbGxvYzMqPigp Ci0JCS0+c2VsZWN0X29uX2NvbnRhaW5lcl9jb3B5X2NvbnN0cnVjdGlvbigp KT4KLQkgICAgc3RhdGljIHRydWVfdHlwZSBfX3Rlc3QoaW50KTsKLQotCSAg dGVtcGxhdGU8dHlwZW5hbWU+Ci0JICAgIHN0YXRpYyBmYWxzZV90eXBlIF9f dGVzdCguLi4pOwotCi0JICB0eXBlZGVmIGRlY2x0eXBlKF9fdGVzdDxfQWxs b2MyPigwKSkgdHlwZTsKLQkgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g dHlwZTo6dmFsdWU7Ci0JfTsKLSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9B bGxvYzI+Ci0Jc3RhdGljIHR5cGVuYW1lCi0gICAgICAgCWVuYWJsZV9pZjxf X3NlbGVjdF9oZWxwZXI8X0FsbG9jMj46OnZhbHVlLCBfQWxsb2MyPjo6dHlw ZQotICAgICAgIAlfU19zZWxlY3QoX0FsbG9jMiYgX19hKQotCXsgcmV0dXJu IF9fYS5zZWxlY3Rfb25fY29udGFpbmVyX2NvcHlfY29uc3RydWN0aW9uKCk7 IH0KLQotICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMj4KLQlzdGF0 aWMgdHlwZW5hbWUKLSAgICAgICAJZW5hYmxlX2lmPCFfX3NlbGVjdF9oZWxw ZXI8X0FsbG9jMj46OnZhbHVlLCBfQWxsb2MyPjo6dHlwZQotICAgICAgIAlf U19zZWxlY3QoX0FsbG9jMiYgX19hKQotCXsgcmV0dXJuIF9fYTsgfQotCi0g ICAgcHVibGljOgotCi0gICAgICAvKioKLSAgICAgICAqICBAYnJpZWYgIEFs bG9jYXRlIG1lbW9yeS4KLSAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9j YXRvci4KLSAgICAgICAqICBAcGFyYW0gIG4gIFRoZSBudW1iZXIgb2Ygb2Jq ZWN0cyB0byBhbGxvY2F0ZSBzcGFjZSBmb3IuCi0gICAgICAgKgotICAgICAg ICogIENhbGxzIEBjIGEuYWxsb2NhdGUobikKLSAgICAgICovCi0gICAgICBz dGF0aWMgcG9pbnRlcgotICAgICAgYWxsb2NhdGUoX0FsbG9jJiBfX2EsIHNp emVfdHlwZSBfX24pCi0gICAgICB7IHJldHVybiBfX2EuYWxsb2NhdGUoX19u KTsgfQotCi0gICAgICAvKioKLSAgICAgICAqICBAYnJpZWYgIEFsbG9jYXRl IG1lbW9yeS4KLSAgICAgICAqICBAcGFyYW0gIGEgIEFuIGFsbG9jYXRvci4K LSAgICAgICAqICBAcGFyYW0gIG4gIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0 byBhbGxvY2F0ZSBzcGFjZSBmb3IuCi0gICAgICAgKiAgQHBhcmFtICBoaW50 IEFpZCB0byBsb2NhbGl0eS4KLSAgICAgICAqICBAcmV0dXJuIE1lbW9yeSBv ZiBzdWl0YWJsZSBzaXplIGFuZCBhbGlnbm1lbnQgZm9yIEBhIG4gb2JqZWN0 cwotICAgICAgICogICAgICAgICAgb2YgdHlwZSBAYyB2YWx1ZV90eXBlCi0g ICAgICAgKgotICAgICAgICogIFJldHVybnMgPHR0PiBhLmFsbG9jYXRlKG4s IGhpbnQpIDwvdHQ+IGlmIHRoYXQgZXhwcmVzc2lvbiBpcwotICAgICAgICog IHdlbGwtZm9ybWVkLCBvdGhlcndpc2UgcmV0dXJucyBAYyBhLmFsbG9jYXRl KG4pCi0gICAgICAqLwotICAgICAgc3RhdGljIHBvaW50ZXIKLSAgICAgIGFs bG9jYXRlKF9BbGxvYyYgX19hLCBzaXplX3R5cGUgX19uLCBjb25zdF92b2lk X3BvaW50ZXIgX19oaW50KQotICAgICAgeyByZXR1cm4gX1NfYWxsb2NhdGUo X19hLCBfX24sIF9faGludCk7IH0KLQotICAgICAgLyoqCi0gICAgICAgKiAg QGJyaWVmICBEZWFsbG9jYXRlIG1lbW9yeS4KLSAgICAgICAqICBAcGFyYW0g IGEgIEFuIGFsbG9jYXRvci4KLSAgICAgICAqICBAcGFyYW0gIHAgIFBvaW50 ZXIgdG8gdGhlIG1lbW9yeSB0byBkZWFsbG9jYXRlLgotICAgICAgICogIEBw YXJhbSAgbiAgVGhlIG51bWJlciBvZiBvYmplY3RzIHNwYWNlIHdhcyBhbGxv Y2F0ZWQgZm9yLgotICAgICAgICoKLSAgICAgICAqICBDYWxscyA8dHQ+IGEu ZGVhbGxvY2F0ZShwLCBuKSA8L3R0PgotICAgICAgKi8KLSAgICAgIHN0YXRp YyB2b2lkIGRlYWxsb2NhdGUoX0FsbG9jJiBfX2EsIHBvaW50ZXIgX19wLCBz aXplX3R5cGUgX19uKQotICAgICAgeyBfX2EuZGVhbGxvY2F0ZShfX3AsIF9f bik7IH0KLQotICAgICAgLyoqCi0gICAgICAgKiAgQGJyaWVmICBDb25zdHJ1 Y3QgYW4gb2JqZWN0IG9mIHR5cGUgQGEgVHAKLSAgICAgICAqICBAcGFyYW0g IGEgIEFuIGFsbG9jYXRvci4KLSAgICAgICAqICBAcGFyYW0gIHAgIFBvaW50 ZXIgdG8gbWVtb3J5IG9mIHN1aXRhYmxlIHNpemUgYW5kIGFsaWdubWVudCBm b3IgVHAKLSAgICAgICAqICBAcGFyYW0gIGFyZ3MgQ29uc3RydWN0b3IgYXJn dW1lbnRzLgotICAgICAgICoKLSAgICAgICAqICBDYWxscyA8dHQ+IGEuY29u c3RydWN0KHAsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikgPC90dD4K LSAgICAgICAqICBpZiB0aGF0IGV4cHJlc3Npb24gaXMgd2VsbC1mb3JtZWQs IG90aGVyd2lzZSB1c2VzIHBsYWNlbWVudC1uZXcKLSAgICAgICAqICB0byBj b25zdHJ1Y3QgYW4gb2JqZWN0IG9mIHR5cGUgQGEgVHAgYXQgbG9jYXRpb24g QGEgcCBmcm9tIHRoZQotICAgICAgICogIGFyZ3VtZW50cyBAYSBhcmdzLi4u Ci0gICAgICAqLwotICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBl bmFtZS4uLiBfQXJncz4KLQlzdGF0aWMgdm9pZCBjb25zdHJ1Y3QoX0FsbG9j JiBfX2EsIF9UcCogX19wLCBfQXJncyYmLi4uIF9fYXJncykKLQl7IF9TX2Nv bnN0cnVjdChfX2EsIF9fcCwgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3Mp Li4uKTsgfQotCi0gICAgICAvKioKLSAgICAgICAqICBAYnJpZWYgIERlc3Ry b3kgYW4gb2JqZWN0IG9mIHR5cGUgQGEgVHAKLSAgICAgICAqICBAcGFyYW0g IGEgIEFuIGFsbG9jYXRvci4KLSAgICAgICAqICBAcGFyYW0gIHAgIFBvaW50 ZXIgdG8gdGhlIG9iamVjdCB0byBkZXN0cm95Ci0gICAgICAgKgotICAgICAg ICogIENhbGxzIEBjIGEuZGVzdHJveShwKSBpZiB0aGF0IGV4cHJlc3Npb24g aXMgd2VsbC1mb3JtZWQsCi0gICAgICAgKiAgb3RoZXJ3aXNlIGNhbGxzIEBj IHAtPn5UcCgpCi0gICAgICAqLwotICAgICAgdGVtcGxhdGUgPGNsYXNzIF9U cD4KLQlzdGF0aWMgdm9pZCBkZXN0cm95KF9BbGxvYyYgX19hLCBfVHAqIF9f cCkKLQl7IF9TX2Rlc3Ryb3koX19hLCBfX3ApOyB9Ci0KLSAgICAgIC8qKgot ICAgICAgICogIEBicmllZiAgVGhlIG1heGltdW0gc3VwcG9ydGVkIGFsbG9j YXRpb24gc2l6ZQotICAgICAgICogIEBwYXJhbSAgYSAgQW4gYWxsb2NhdG9y LgotICAgICAgICogIEByZXR1cm4gQGMgYS5tYXhfc2l6ZSgpIG9yIEBjICVu dW1lcmljX2xpbWl0czxzaXplX3R5cGU+OjptYXgoKQotICAgICAgICoKLSAg ICAgICAqICBSZXR1cm5zIEBjIGEubWF4X3NpemUoKSBpZiB0aGF0IGV4cHJl c3Npb24gaXMgd2VsbC1mb3JtZWQsCi0gICAgICAgKiAgb3RoZXJ3aXNlIHJl dHVybnMgQGMgJW51bWVyaWNfbGltaXRzPHNpemVfdHlwZT46Om1heCgpCi0g ICAgICAqLwotICAgICAgc3RhdGljIHNpemVfdHlwZSBtYXhfc2l6ZShjb25z dCBfQWxsb2MmIF9fYSkKLSAgICAgIHsgcmV0dXJuIF9TX21heF9zaXplKF9f YSk7IH0KLQotICAgICAgLyoqCi0gICAgICAgKiAgQGJyaWVmICBPYnRhaW4g YW4gYWxsb2NhdG9yIHRvIHVzZSB3aGVuIGNvcHlpbmcgYSBjb250YWluZXIu Ci0gICAgICAgKiAgQHBhcmFtICByaHMgIEFuIGFsbG9jYXRvci4KLSAgICAg ICAqICBAcmV0dXJuIEBjIHJocy5zZWxlY3Rfb25fY29udGFpbmVyX2NvcHlf Y29uc3RydWN0aW9uKCkgb3IgQGEgcmhzCi0gICAgICAgKgotICAgICAgICog IFJldHVybnMgQGMgcmhzLnNlbGVjdF9vbl9jb250YWluZXJfY29weV9jb25z dHJ1Y3Rpb24oKSBpZiB0aGF0Ci0gICAgICAgKiAgZXhwcmVzc2lvbiBpcyB3 ZWxsLWZvcm1lZCwgb3RoZXJ3aXNlIHJldHVybnMgQGEgcmhzCi0gICAgICAq LwotICAgICAgc3RhdGljIF9BbGxvYwotICAgICAgc2VsZWN0X29uX2NvbnRh aW5lcl9jb3B5X2NvbnN0cnVjdGlvbihjb25zdCBfQWxsb2MmIF9fcmhzKQot ICAgICAgeyByZXR1cm4gX1Nfc2VsZWN0KF9fcmhzKTsgfQotICAgIH07Ci0K KyAgLy8gRGVjbGFyZSB1c2VzX2FsbG9jYXRvciBzbyBpdCBjYW4gYmUgc3Bl Y2lhbGl6ZWQgaW4gPHF1ZXVlPiBldGMuCisgIHRlbXBsYXRlPHR5cGVuYW1l LCB0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgdXNlc19hbGxvY2F0b3I7CiAjZW5k aWYKIAogX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCkluZGV4OiBp bmNsdWRlL2JpdHMvYWxsb2NfdHJhaXRzLmgKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gaW5jbHVkZS9iaXRzL2FsbG9jX3RyYWl0cy5oCShyZXZpc2lv biAwKQorKysgaW5jbHVkZS9iaXRzL2FsbG9jX3RyYWl0cy5oCShyZXZpc2lv biAwKQpAQCAtMCwwICsxLDQ5OSBAQAorLy8gQWxsb2NhdG9yIHRyYWl0cyAt Ki0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBh cnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkg aXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lv bi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2Vj dGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRp dGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBS dW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor CisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0 aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBD T1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8v IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworI2lmbmRlZiBf QUxMT0NfVFJBSVRTX0gKKyNkZWZpbmUgX0FMTE9DX1RSQUlUU19IIDEKKwor I2lmZGVmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fCisKKyNpbmNsdWRl IDxiaXRzL3B0cl90cmFpdHMuaD4KKyNpbmNsdWRlIDxleHQvbnVtZXJpY190 cmFpdHMuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZ KGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP TgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1Rw PgorICAgIGNsYXNzIF9fYWxsb2N0cl9yZWJpbmRfaGVscGVyCisgICAgewor ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMiwgdHlwZW5hbWUgX1Rw Mj4KKwlzdGF0aWMgY29uc3RleHByIGJvb2wKKyAgICAgICAJX1NfY2hrKHR5 cGVuYW1lIF9BbGxvYzI6OnRlbXBsYXRlIHJlYmluZDxfVHAyPjo6b3RoZXIq KQorCXsgcmV0dXJuIHRydWU7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5h bWUsIHR5cGVuYW1lPgorICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wK KyAgICAgICAJX1NfY2hrKC4uLikKKyAgICAgICAJeyByZXR1cm4gZmFsc2U7 IH0KKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIF9f dmFsdWUgPSBfU19jaGs8X0FsbG9jLCBfVHA+KG51bGxwdHIpOworICAgIH07 CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfVHAs CisgICAgICAgICAgIGJvb2wgPSBfX2FsbG9jdHJfcmViaW5kX2hlbHBlcjxf QWxsb2MsIF9UcD46Ol9fdmFsdWU+CisgICAgc3RydWN0IF9fYWxsb2N0cl9y ZWJpbmQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFt ZSBfVHA+CisgICAgc3RydWN0IF9fYWxsb2N0cl9yZWJpbmQ8X0FsbG9jLCBf VHAsIHRydWU+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs b2M6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBfX3R5cGU7CisgICAg fTsKKworICB0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUu Li4+IGNsYXNzIF9BbGxvYywgdHlwZW5hbWUgX1RwLAorICAgICAgICAgICAg dHlwZW5hbWUgX1VwLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBzdHJ1Y3Qg X19hbGxvY3RyX3JlYmluZDxfQWxsb2M8X1VwLCBfQXJncy4uLj4sIF9UcCwg ZmFsc2U+CisgICAgeworICAgICAgdHlwZWRlZiBfQWxsb2M8X1RwLCBfQXJn cy4uLj4gX190eXBlOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiAg VW5pZm9ybSBpbnRlcmZhY2UgdG8gYWxsIGFsbG9jYXRvciB0eXBlcy4KKyAg ICogQGluZ3JvdXAgYWxsb2NhdG9ycworICAqLworICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQWxsb2M+CisgICAgc3RydWN0IGFsbG9jYXRvcl90cmFpdHMKKyAg ICB7CisgICAgICAvLy8gVGhlIGFsbG9jYXRvciB0eXBlCisgICAgICB0eXBl ZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIC8vLyBUaGUgYWxs b2NhdGVkIHR5cGUKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp2 YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisKKyNkZWZpbmUgX0dMSUJDWFhfQUxM T0NfVFJfTkVTVEVEX1RZUEUoX05UWVBFLCBfQUxUKSBcCisgIHByaXZhdGU6 IFwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBcCisgICAgc3RhdGljIHR5 cGVuYW1lIF9UcDo6X05UWVBFIF9TXyMjX05UWVBFIyNfaGVscGVyKF9UcCop OyBcCisgIHN0YXRpYyBfQUxUIF9TXyMjX05UWVBFIyNfaGVscGVyKC4uLik7 IFwKKyAgICB0eXBlZGVmIGRlY2x0eXBlKF9TXyMjX05UWVBFIyNfaGVscGVy KChfQWxsb2MqKTApKSBfXyMjX05UWVBFOyBcCisgIHB1YmxpYzoKKworX0dM SUJDWFhfQUxMT0NfVFJfTkVTVEVEX1RZUEUocG9pbnRlciwgdmFsdWVfdHlw ZSopCisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmICAgVGhlIGFsbG9j YXRvcidzIHBvaW50ZXIgdHlwZS4KKyAgICAgICAqCisgICAgICAgKiBAYyBB bGxvYzo6cG9pbnRlciBpZiB0aGF0IHR5cGUgZXhpc3RzLCBvdGhlcndpc2Ug QGMgdmFsdWVfdHlwZSoKKyAgICAgICovCisgICAgICB0eXBlZGVmIF9fcG9p bnRlciBwb2ludGVyOworCisvLyBUT0RPOiBVc2UgcG9pbnRlcl90cmFpdHM6 OnJlYmluZCBhbGlhcyB0ZW1wbGF0ZS4KKworX0dMSUJDWFhfQUxMT0NfVFJf TkVTVEVEX1RZUEUoY29uc3RfcG9pbnRlciwKKyAgdHlwZW5hbWUgcG9pbnRl cl90cmFpdHM8cG9pbnRlcj46OnRlbXBsYXRlIF9fcmViaW5kPGNvbnN0IHZh bHVlX3R5cGU+OjpfX3R5cGUpCisKKyAgICAgIC8qKgorICAgICAgICogQGJy aWVmICAgVGhlIGFsbG9jYXRvcidzIGNvbnN0IHBvaW50ZXIgdHlwZS4KKyAg ICAgICAqCisgICAgICAgKiBAYyBBbGxvYzo6Y29uc3RfcG9pbnRlciBpZiB0 aGF0IHR5cGUgZXhpc3RzLCBvdGhlcndpc2UKKyAgICAgICAqIDx0dD4gcG9p bnRlcl90cmFpdHM8cG9pbnRlcj46OnJlYmluZDxjb25zdCB2YWx1ZV90eXBl PiA8L3R0PgorICAgICAgKi8KKyAgICAgIHR5cGVkZWYgX19jb25zdF9wb2lu dGVyIGNvbnN0X3BvaW50ZXI7CisKK19HTElCQ1hYX0FMTE9DX1RSX05FU1RF RF9UWVBFKHZvaWRfcG9pbnRlciwKKyAgdHlwZW5hbWUgcG9pbnRlcl90cmFp dHM8cG9pbnRlcj46OnRlbXBsYXRlIF9fcmViaW5kPHZvaWQ+OjpfX3R5cGUp CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmICAgVGhlIGFsbG9jYXRv cidzIHZvaWQgcG9pbnRlciB0eXBlLgorICAgICAgICoKKyAgICAgICAqIEBj IEFsbG9jOjp2b2lkX3BvaW50ZXIgaWYgdGhhdCB0eXBlIGV4aXN0cywgb3Ro ZXJ3aXNlCisgICAgICAgKiA8dHQ+IHBvaW50ZXJfdHJhaXRzPHBvaW50ZXI+ OjpyZWJpbmQ8dm9pZD4gPC90dD4KKyAgICAgICovCisgICAgICB0eXBlZGVm IF9fdm9pZF9wb2ludGVyIHZvaWRfcG9pbnRlcjsKKworX0dMSUJDWFhfQUxM T0NfVFJfTkVTVEVEX1RZUEUoY29uc3Rfdm9pZF9wb2ludGVyLAorICB0eXBl bmFtZSBwb2ludGVyX3RyYWl0czxwb2ludGVyPjo6dGVtcGxhdGUgX19yZWJp bmQ8Y29uc3Qgdm9pZD46Ol9fdHlwZSkKKworICAgICAgLyoqCisgICAgICAg KiBAYnJpZWYgICBUaGUgYWxsb2NhdG9yJ3MgY29uc3Qgdm9pZCBwb2ludGVy IHR5cGUuCisgICAgICAgKgorICAgICAgICogQGMgQWxsb2M6OmNvbnN0X3Zv aWRfcG9pbnRlciBpZiB0aGF0IHR5cGUgZXhpc3RzLCBvdGhlcndpc2UKKyAg ICAgICAqIDx0dD4gcG9pbnRlcl90cmFpdHM8cG9pbnRlcj46OnJlYmluZDxj b25zdCB2b2lkPiA8L3R0PgorICAgICAgKi8KKyAgICAgIHR5cGVkZWYgX19j b25zdF92b2lkX3BvaW50ZXIgY29uc3Rfdm9pZF9wb2ludGVyOworCitfR0xJ QkNYWF9BTExPQ19UUl9ORVNURURfVFlQRShkaWZmZXJlbmNlX3R5cGUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBwb2ludGVy X3RyYWl0czxwb2ludGVyPjo6ZGlmZmVyZW5jZV90eXBlKQorCisgICAgICAv KioKKyAgICAgICAqIEBicmllZiAgIFRoZSBhbGxvY2F0b3IncyBkaWZmZXJl bmNlIHR5cGUKKyAgICAgICAqCisgICAgICAgKiBAYyBBbGxvYzo6ZGlmZmVy ZW5jZV90eXBlIGlmIHRoYXQgdHlwZSBleGlzdHMsIG90aGVyd2lzZQorICAg ICAgICogPHR0PiBwb2ludGVyX3RyYWl0czxwb2ludGVyPjo6ZGlmZmVyZW5j ZV90eXBlIDwvdHQ+CisgICAgICAqLworICAgICAgdHlwZWRlZiBfX2RpZmZl cmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisKK19HTElCQ1hYX0FMTE9D X1RSX05FU1RFRF9UWVBFKHNpemVfdHlwZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHR5cGVuYW1lIG1ha2VfdW5zaWduZWQ8ZGlmZmVyZW5j ZV90eXBlPjo6dHlwZSkKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYg ICBUaGUgYWxsb2NhdG9yJ3Mgc2l6ZSB0eXBlCisgICAgICAgKgorICAgICAg ICogQGMgQWxsb2M6OnNpemVfdHlwZSBpZiB0aGF0IHR5cGUgZXhpc3RzLCBv dGhlcndpc2UKKyAgICAgICAqIDx0dD4gbWFrZV91bnNpZ25lZDxkaWZmZXJl bmNlX3R5cGU+Ojp0eXBlIDwvdHQ+CisgICAgICAqLworICAgICAgdHlwZWRl ZiBfX3NpemVfdHlwZSBzaXplX3R5cGU7CisKK19HTElCQ1hYX0FMTE9DX1RS X05FU1RFRF9UWVBFKHByb3BhZ2F0ZV9vbl9jb250YWluZXJfY29weV9hc3Np Z25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2Vf dHlwZSkKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgICBIb3cgdGhl IGFsbG9jYXRvciBpcyBwcm9wYWdhdGVkIG9uIGNvcHkgYXNzaWdubWVudAor ICAgICAgICoKKyAgICAgICAqIEBjIEFsbG9jOjpwcm9wYWdhdGVfb25fY29u dGFpbmVyX2NvcHlfYXNzaWdubWVudCBpZiB0aGF0IHR5cGUgZXhpc3RzLAor ICAgICAgICogb3RoZXJ3aXNlIEBjIGZhbHNlX3R5cGUKKyAgICAgICovCisg ICAgICB0eXBlZGVmIF9fcHJvcGFnYXRlX29uX2NvbnRhaW5lcl9jb3B5X2Fz c2lnbm1lbnQKKyAgICAgICAJcHJvcGFnYXRlX29uX2NvbnRhaW5lcl9jb3B5 X2Fzc2lnbm1lbnQ7CisKK19HTElCQ1hYX0FMTE9DX1RSX05FU1RFRF9UWVBF KHByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VfdHlwZSkKKworICAg ICAgLyoqCisgICAgICAgKiBAYnJpZWYgICBIb3cgdGhlIGFsbG9jYXRvciBp cyBwcm9wYWdhdGVkIG9uIG1vdmUgYXNzaWdubWVudAorICAgICAgICoKKyAg ICAgICAqIEBjIEFsbG9jOjpwcm9wYWdhdGVfb25fY29udGFpbmVyX21vdmVf YXNzaWdubWVudCBpZiB0aGF0IHR5cGUgZXhpc3RzLAorICAgICAgICogb3Ro ZXJ3aXNlIEBjIGZhbHNlX3R5cGUKKyAgICAgICovCisgICAgICB0eXBlZGVm IF9fcHJvcGFnYXRlX29uX2NvbnRhaW5lcl9tb3ZlX2Fzc2lnbm1lbnQKKyAg ICAgICAJcHJvcGFnYXRlX29uX2NvbnRhaW5lcl9tb3ZlX2Fzc2lnbm1lbnQ7 CisKK19HTElCQ1hYX0FMTE9DX1RSX05FU1RFRF9UWVBFKHByb3BhZ2F0ZV9v bl9jb250YWluZXJfc3dhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZhbHNlX3R5cGUpCisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVm ICAgSG93IHRoZSBhbGxvY2F0b3IgaXMgcHJvcGFnYXRlZCBvbiBzd2FwCisg ICAgICAgKgorICAgICAgICogQGMgQWxsb2M6OnByb3BhZ2F0ZV9vbl9jb250 YWluZXJfc3dhcCBpZiB0aGF0IHR5cGUgZXhpc3RzLAorICAgICAgICogb3Ro ZXJ3aXNlIEBjIGZhbHNlX3R5cGUKKyAgICAgICovCisgICAgICB0eXBlZGVm IF9fcHJvcGFnYXRlX29uX2NvbnRhaW5lcl9zd2FwIHByb3BhZ2F0ZV9vbl9j b250YWluZXJfc3dhcDsKKworI3VuZGVmIF9HTElCQ1hYX0FMTE9DX1RSX05F U1RFRF9UWVBFCisKKyAgICAgIC8qIFRPRE86IHVzZSB0ZW1wbGF0ZSBhbGlh cyAKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgdXNp bmcgcmViaW5kX2FsbG9jID0gX19hbGxvY3RyX3JlYmluZDxfQWxsb2MsIF9U cD46Ol9fdHlwZTsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAg ICAgICAgdXNpbmcgcmViaW5kX3RyYWl0cyA9IGFsbG9jYXRvcl90cmFpdHM8 cmViaW5kX2FsbG9jPF9UcD4+OworICAgICAgKi8KKyAgICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RydWN0IF9fcmViaW5kX2FsbG9j CisJeworICAJICB0eXBlZGVmIHR5cGVuYW1lIF9fYWxsb2N0cl9yZWJpbmQ8 X0FsbG9jLCBfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgIAl9OworCisg ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0cnVjdCBf X3JlYmluZF90cmFpdHMKKwl7CisJICB0eXBlZGVmIGFsbG9jYXRvcl90cmFp dHM8dHlwZW5hbWUgX19yZWJpbmRfYWxsb2M8X1RwPjo6X190eXBlPiBfX3R5 cGU7CisJfTsKKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQWxsb2MyPgorCXN0cnVjdCBfX2FsbG9jYXRlX2hlbHBlcgorCXsK KwkgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYzMsCisJICAgIHR5cGVuYW1l ID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9BbGxvYzMqPigpLT5hbGxvY2F0 ZSgKKwkJICBzdGQ6OmRlY2x2YWw8c2l6ZV90eXBlPigpLAorCQkgIHN0ZDo6 ZGVjbHZhbDxjb25zdF92b2lkX3BvaW50ZXI+KCkpKT4KKwkgICAgc3RhdGlj IHRydWVfdHlwZSBfX3Rlc3QoaW50KTsKKworCSAgdGVtcGxhdGU8dHlwZW5h bWU+CisJICAgIHN0YXRpYyBmYWxzZV90eXBlIF9fdGVzdCguLi4pOworCisJ ICB0eXBlZGVmIGRlY2x0eXBlKF9fdGVzdDxfQWxsb2M+KDApKSB0eXBlOwor CSAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0eXBlOjp2YWx1ZTsKKwl9 OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MyPgorCXN0YXRp YyB0eXBlbmFtZQorICAgICAgIAllbmFibGVfaWY8X19hbGxvY2F0ZV9oZWxw ZXI8X0FsbG9jMj46OnZhbHVlLCBwb2ludGVyPjo6dHlwZQorICAgICAgIAlf U19hbGxvY2F0ZShfQWxsb2MyJiBfX2EsIHNpemVfdHlwZSBfX24sIGNvbnN0 X3ZvaWRfcG9pbnRlciBfX2hpbnQpCisJeyByZXR1cm4gX19hLmFsbG9jYXRl KF9fbiwgX19oaW50KTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf QWxsb2MyPgorCXN0YXRpYyB0eXBlbmFtZQorICAgICAgIAllbmFibGVfaWY8 IV9fYWxsb2NhdGVfaGVscGVyPF9BbGxvYzI+Ojp2YWx1ZSwgcG9pbnRlcj46 OnR5cGUKKyAgICAgICAJX1NfYWxsb2NhdGUoX0FsbG9jMiYgX19hLCBzaXpl X3R5cGUgX19uLCAuLi4pCisJeyByZXR1cm4gX19hLmFsbG9jYXRlKF9fbik7 IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4u LiBfQXJncz4KKwlzdHJ1Y3QgX19jb25zdHJ1Y3RfaGVscGVyCisJeworCSAg dGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMiwKKwkgICAgdHlwZW5hbWUgPSBk ZWNsdHlwZShzdGQ6OmRlY2x2YWw8X0FsbG9jMio+KCktPmNvbnN0cnVjdCgK KwkJICBzdGQ6OmRlY2x2YWw8X1RwKj4oKSwgc3RkOjpkZWNsdmFsPF9Bcmdz PigpLi4uKSk+CisJICAgIHN0YXRpYyB0cnVlX3R5cGUgX190ZXN0KGludCk7 CisKKwkgIHRlbXBsYXRlPHR5cGVuYW1lPgorCSAgICBzdGF0aWMgZmFsc2Vf dHlwZSBfX3Rlc3QoLi4uKTsKKworCSAgdHlwZWRlZiBkZWNsdHlwZShfX3Rl c3Q8X0FsbG9jPigwKSkgdHlwZTsKKwkgIHN0YXRpYyBjb25zdCBib29sIHZh bHVlID0gdHlwZTo6dmFsdWU7CisJfTsKKworICAgICAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KKwlzdGF0aWMgdHlwZW5h bWUKKyAgICAgICAJZW5hYmxlX2lmPF9fY29uc3RydWN0X2hlbHBlcjxfVHAs IF9BcmdzLi4uPjo6dmFsdWUsIHZvaWQ+Ojp0eXBlCisgICAgICAgCV9TX2Nv bnN0cnVjdChfQWxsb2MmIF9fYSwgX1RwKiBfX3AsIF9BcmdzJiYuLi4gX19h cmdzKQorCXsgX19hLmNvbnN0cnVjdChfX3AsIHN0ZDo6Zm9yd2FyZDxfQXJn cz4oX19hcmdzKS4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KKwlzdGF0aWMgdHlwZW5hbWUKKyAg ICAgICAJZW5hYmxlX2lmPCFfX2NvbnN0cnVjdF9oZWxwZXI8X1RwLCBfQXJn cy4uLj46OnZhbHVlLCB2b2lkPjo6dHlwZQorICAgICAgIAlfU19jb25zdHJ1 Y3QoX0FsbG9jJiwgX1RwKiBfX3AsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsg OjpuZXcoKHZvaWQqKV9fcCkgX1RwKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19h cmdzKS4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgor CXN0cnVjdCBfX2Rlc3Ryb3lfaGVscGVyCisJeworCSAgdGVtcGxhdGU8dHlw ZW5hbWUgX0FsbG9jMiwKKwkgICAgdHlwZW5hbWUgPSBkZWNsdHlwZShzdGQ6 OmRlY2x2YWw8X0FsbG9jMio+KCktPmRlc3Ryb3koCisJCSAgc3RkOjpkZWNs dmFsPF9UcCo+KCkpKT4KKwkgICAgc3RhdGljIHRydWVfdHlwZSBfX3Rlc3Qo aW50KTsKKworCSAgdGVtcGxhdGU8dHlwZW5hbWU+CisJICAgIHN0YXRpYyBm YWxzZV90eXBlIF9fdGVzdCguLi4pOworCisJICB0eXBlZGVmIGRlY2x0eXBl KF9fdGVzdDxfQWxsb2M+KDApKSB0eXBlOworCSAgc3RhdGljIGNvbnN0IGJv b2wgdmFsdWUgPSB0eXBlOjp2YWx1ZTsKKwl9OworCisgICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CisJc3RhdGljIHR5cGVuYW1lIGVuYWJsZV9pZjxf X2Rlc3Ryb3lfaGVscGVyPF9UcD46OnZhbHVlLCB2b2lkPjo6dHlwZQorICAg ICAgIAlfU19kZXN0cm95KF9BbGxvYyYgX19hLCBfVHAqIF9fcCkKKwl7IF9f YS5kZXN0cm95KF9fcCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgorCXN0YXRpYyB0eXBlbmFtZSBlbmFibGVfaWY8IV9fZGVzdHJveV9o ZWxwZXI8X1RwPjo6dmFsdWUsIHZvaWQ+Ojp0eXBlCisgICAgICAgCV9TX2Rl c3Ryb3koX0FsbG9jJiwgX1RwKiBfX3ApCisJeyBfX3AtPn5fVHAoKTsgfQor CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MyPgorCXN0cnVjdCBf X21heHNpemVfaGVscGVyCisJeworCSAgdGVtcGxhdGU8dHlwZW5hbWUgX0Fs bG9jMywKKwkgICAgdHlwZW5hbWUgPSBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8 X0FsbG9jMyo+KCktPm1heF9zaXplKCkpPgorCSAgICBzdGF0aWMgdHJ1ZV90 eXBlIF9fdGVzdChpbnQpOworCisJICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKwkg ICAgc3RhdGljIGZhbHNlX3R5cGUgX190ZXN0KC4uLik7CisKKwkgIHR5cGVk ZWYgZGVjbHR5cGUoX190ZXN0PF9BbGxvYzI+KDApKSB0eXBlOworCSAgc3Rh dGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0eXBlOjp2YWx1ZTsKKwl9OworCisg ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MyPgorCXN0YXRpYyB0eXBl bmFtZQorICAgICAgIAllbmFibGVfaWY8X19tYXhzaXplX2hlbHBlcjxfQWxs b2MyPjo6dmFsdWUsIHNpemVfdHlwZT46OnR5cGUKKyAgICAgICAJX1NfbWF4 X3NpemUoX0FsbG9jMiYgX19hKQorCXsgcmV0dXJuIF9fYS5tYXhfc2l6ZSgp OyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYzI+CisJc3Rh dGljIHR5cGVuYW1lCisgICAgICAgCWVuYWJsZV9pZjwhX19tYXhzaXplX2hl bHBlcjxfQWxsb2MyPjo6dmFsdWUsIHNpemVfdHlwZT46OnR5cGUKKwlfU19t YXhfc2l6ZShfQWxsb2MyJikKKwl7IHJldHVybiBfX2dudV9jeHg6Ol9fbnVt ZXJpY190cmFpdHM8c2l6ZV90eXBlPjo6X19tYXg7IH0KKworICAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX0FsbG9jMj4KKwlzdHJ1Y3QgX19zZWxlY3RfaGVs cGVyCisJeworCSAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMywgdHlwZW5h bWUKKwkgICAgPSBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8X0FsbG9jMyo+KCkK KwkJLT5zZWxlY3Rfb25fY29udGFpbmVyX2NvcHlfY29uc3RydWN0aW9uKCkp PgorCSAgICBzdGF0aWMgdHJ1ZV90eXBlIF9fdGVzdChpbnQpOworCisJICB0 ZW1wbGF0ZTx0eXBlbmFtZT4KKwkgICAgc3RhdGljIGZhbHNlX3R5cGUgX190 ZXN0KC4uLik7CisKKwkgIHR5cGVkZWYgZGVjbHR5cGUoX190ZXN0PF9BbGxv YzI+KDApKSB0eXBlOworCSAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0 eXBlOjp2YWx1ZTsKKwl9OworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Fs bG9jMj4KKwlzdGF0aWMgdHlwZW5hbWUKKyAgICAgICAJZW5hYmxlX2lmPF9f c2VsZWN0X2hlbHBlcjxfQWxsb2MyPjo6dmFsdWUsIF9BbGxvYzI+Ojp0eXBl CisgICAgICAgCV9TX3NlbGVjdChfQWxsb2MyJiBfX2EpCisJeyByZXR1cm4g X19hLnNlbGVjdF9vbl9jb250YWluZXJfY29weV9jb25zdHJ1Y3Rpb24oKTsg fQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MyPgorCXN0YXRp YyB0eXBlbmFtZQorICAgICAgIAllbmFibGVfaWY8IV9fc2VsZWN0X2hlbHBl cjxfQWxsb2MyPjo6dmFsdWUsIF9BbGxvYzI+Ojp0eXBlCisgICAgICAgCV9T X3NlbGVjdChfQWxsb2MyJiBfX2EpCisJeyByZXR1cm4gX19hOyB9CisKKyAg ICBwdWJsaWM6CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWxs b2NhdGUgbWVtb3J5LgorICAgICAgICogIEBwYXJhbSAgYSAgQW4gYWxsb2Nh dG9yLgorICAgICAgICogIEBwYXJhbSAgbiAgVGhlIG51bWJlciBvZiBvYmpl Y3RzIHRvIGFsbG9jYXRlIHNwYWNlIGZvci4KKyAgICAgICAqCisgICAgICAg KiAgQ2FsbHMgQGMgYS5hbGxvY2F0ZShuKQorICAgICAgKi8KKyAgICAgIHN0 YXRpYyBwb2ludGVyCisgICAgICBhbGxvY2F0ZShfQWxsb2MmIF9fYSwgc2l6 ZV90eXBlIF9fbikKKyAgICAgIHsgcmV0dXJuIF9fYS5hbGxvY2F0ZShfX24p OyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWxsb2NhdGUg bWVtb3J5LgorICAgICAgICogIEBwYXJhbSAgYSAgQW4gYWxsb2NhdG9yLgor ICAgICAgICogIEBwYXJhbSAgbiAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRv IGFsbG9jYXRlIHNwYWNlIGZvci4KKyAgICAgICAqICBAcGFyYW0gIGhpbnQg QWlkIHRvIGxvY2FsaXR5LgorICAgICAgICogIEByZXR1cm4gTWVtb3J5IG9m IHN1aXRhYmxlIHNpemUgYW5kIGFsaWdubWVudCBmb3IgQGEgbiBvYmplY3Rz CisgICAgICAgKiAgICAgICAgICBvZiB0eXBlIEBjIHZhbHVlX3R5cGUKKyAg ICAgICAqCisgICAgICAgKiAgUmV0dXJucyA8dHQ+IGEuYWxsb2NhdGUobiwg aGludCkgPC90dD4gaWYgdGhhdCBleHByZXNzaW9uIGlzCisgICAgICAgKiAg d2VsbC1mb3JtZWQsIG90aGVyd2lzZSByZXR1cm5zIEBjIGEuYWxsb2NhdGUo bikKKyAgICAgICovCisgICAgICBzdGF0aWMgcG9pbnRlcgorICAgICAgYWxs b2NhdGUoX0FsbG9jJiBfX2EsIHNpemVfdHlwZSBfX24sIGNvbnN0X3ZvaWRf cG9pbnRlciBfX2hpbnQpCisgICAgICB7IHJldHVybiBfU19hbGxvY2F0ZShf X2EsIF9fbiwgX19oaW50KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBA YnJpZWYgIERlYWxsb2NhdGUgbWVtb3J5LgorICAgICAgICogIEBwYXJhbSAg YSAgQW4gYWxsb2NhdG9yLgorICAgICAgICogIEBwYXJhbSAgcCAgUG9pbnRl ciB0byB0aGUgbWVtb3J5IHRvIGRlYWxsb2NhdGUuCisgICAgICAgKiAgQHBh cmFtICBuICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgc3BhY2Ugd2FzIGFsbG9j YXRlZCBmb3IuCisgICAgICAgKgorICAgICAgICogIENhbGxzIDx0dD4gYS5k ZWFsbG9jYXRlKHAsIG4pIDwvdHQ+CisgICAgICAqLworICAgICAgc3RhdGlj IHZvaWQgZGVhbGxvY2F0ZShfQWxsb2MmIF9fYSwgcG9pbnRlciBfX3AsIHNp emVfdHlwZSBfX24pCisgICAgICB7IF9fYS5kZWFsbG9jYXRlKF9fcCwgX19u KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVj dCBhbiBvYmplY3Qgb2YgdHlwZSBAYSBUcAorICAgICAgICogIEBwYXJhbSAg YSAgQW4gYWxsb2NhdG9yLgorICAgICAgICogIEBwYXJhbSAgcCAgUG9pbnRl ciB0byBtZW1vcnkgb2Ygc3VpdGFibGUgc2l6ZSBhbmQgYWxpZ25tZW50IGZv ciBUcAorICAgICAgICogIEBwYXJhbSAgYXJncyBDb25zdHJ1Y3RvciBhcmd1 bWVudHMuCisgICAgICAgKgorICAgICAgICogIENhbGxzIDx0dD4gYS5jb25z dHJ1Y3QocCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSA8L3R0Pgor ICAgICAgICogIGlmIHRoYXQgZXhwcmVzc2lvbiBpcyB3ZWxsLWZvcm1lZCwg b3RoZXJ3aXNlIHVzZXMgcGxhY2VtZW50LW5ldworICAgICAgICogIHRvIGNv bnN0cnVjdCBhbiBvYmplY3Qgb2YgdHlwZSBAYSBUcCBhdCBsb2NhdGlvbiBA YSBwIGZyb20gdGhlCisgICAgICAgKiAgYXJndW1lbnRzIEBhIGFyZ3MuLi4K KyAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu YW1lLi4uIF9BcmdzPgorCXN0YXRpYyB2b2lkIGNvbnN0cnVjdChfQWxsb2Mm IF9fYSwgX1RwKiBfX3AsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsgX1NfY29u c3RydWN0KF9fYSwgX19wLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncyku Li4pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVzdHJv eSBhbiBvYmplY3Qgb2YgdHlwZSBAYSBUcAorICAgICAgICogIEBwYXJhbSAg YSAgQW4gYWxsb2NhdG9yLgorICAgICAgICogIEBwYXJhbSAgcCAgUG9pbnRl ciB0byB0aGUgb2JqZWN0IHRvIGRlc3Ryb3kKKyAgICAgICAqCisgICAgICAg KiAgQ2FsbHMgQGMgYS5kZXN0cm95KHApIGlmIHRoYXQgZXhwcmVzc2lvbiBp cyB3ZWxsLWZvcm1lZCwKKyAgICAgICAqICBvdGhlcndpc2UgY2FsbHMgQGMg cC0+flRwKCkKKyAgICAgICovCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgorCXN0YXRpYyB2b2lkIGRlc3Ryb3koX0FsbG9jJiBfX2EsIF9UcCogX19w KQorCXsgX1NfZGVzdHJveShfX2EsIF9fcCk7IH0KKworICAgICAgLyoqCisg ICAgICAgKiAgQGJyaWVmICBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgYWxsb2Nh dGlvbiBzaXplCisgICAgICAgKiAgQHBhcmFtICBhICBBbiBhbGxvY2F0b3Iu CisgICAgICAgKiAgQHJldHVybiBAYyBhLm1heF9zaXplKCkgb3IgQGMgbnVt ZXJpY19saW1pdHM8c2l6ZV90eXBlPjo6bWF4KCkKKyAgICAgICAqCisgICAg ICAgKiAgUmV0dXJucyBAYyBhLm1heF9zaXplKCkgaWYgdGhhdCBleHByZXNz aW9uIGlzIHdlbGwtZm9ybWVkLAorICAgICAgICogIG90aGVyd2lzZSByZXR1 cm5zIEBjIG51bWVyaWNfbGltaXRzPHNpemVfdHlwZT46Om1heCgpCisgICAg ICAqLworICAgICAgc3RhdGljIHNpemVfdHlwZSBtYXhfc2l6ZShjb25zdCBf QWxsb2MmIF9fYSkKKyAgICAgIHsgcmV0dXJuIF9TX21heF9zaXplKF9fYSk7 IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBPYnRhaW4gYW4g YWxsb2NhdG9yIHRvIHVzZSB3aGVuIGNvcHlpbmcgYSBjb250YWluZXIuCisg ICAgICAgKiAgQHBhcmFtICByaHMgIEFuIGFsbG9jYXRvci4KKyAgICAgICAq ICBAcmV0dXJuIEBjIHJocy5zZWxlY3Rfb25fY29udGFpbmVyX2NvcHlfY29u c3RydWN0aW9uKCkgb3IgQGEgcmhzCisgICAgICAgKgorICAgICAgICogIFJl dHVybnMgQGMgcmhzLnNlbGVjdF9vbl9jb250YWluZXJfY29weV9jb25zdHJ1 Y3Rpb24oKSBpZiB0aGF0CisgICAgICAgKiAgZXhwcmVzc2lvbiBpcyB3ZWxs LWZvcm1lZCwgb3RoZXJ3aXNlIHJldHVybnMgQGEgcmhzCisgICAgICAqLwor ICAgICAgc3RhdGljIF9BbGxvYworICAgICAgc2VsZWN0X29uX2NvbnRhaW5l cl9jb3B5X2NvbnN0cnVjdGlvbihjb25zdCBfQWxsb2MmIF9fcmhzKQorICAg ICAgeyByZXR1cm4gX1Nfc2VsZWN0KF9fcmhzKTsgfQorICAgIH07CisKKyAg dGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisg ICAgX19kb19hbGxvY19vbl9jb3B5KF9BbGxvYyYgX19vbmUsIGNvbnN0IF9B bGxvYyYgX190d28sIHRydWVfdHlwZSkKKyAgICB7IF9fb25lID0gX190d287 IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5l IHZvaWQKKyAgICBfX2RvX2FsbG9jX29uX2NvcHkoX0FsbG9jJiwgY29uc3Qg X0FsbG9jJiwgZmFsc2VfdHlwZSkKKyAgICB7IH0KKworICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQgX19hbGxvY19vbl9j b3B5KF9BbGxvYyYgX19vbmUsIGNvbnN0IF9BbGxvYyYgX190d28pCisgICAg eworICAgICAgdHlwZWRlZiBhbGxvY2F0b3JfdHJhaXRzPF9BbGxvYz4gX190 cmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzOjpwcm9w YWdhdGVfb25fY29udGFpbmVyX2NvcHlfYXNzaWdubWVudCBfX3BvY2NhOwor ICAgICAgX19kb19hbGxvY19vbl9jb3B5KF9fb25lLCBfX3R3bywgX19wb2Nj YSgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgor ICAgIGlubGluZSBfQWxsb2MgX19hbGxvY19vbl9jb3B5KGNvbnN0IF9BbGxv YyYgX19hKQorICAgIHsKKyAgICAgIHR5cGVkZWYgYWxsb2NhdG9yX3RyYWl0 czxfQWxsb2M+IF9fdHJhaXRzOworICAgICAgcmV0dXJuIF9fdHJhaXRzOjpz ZWxlY3Rfb25fY29udGFpbmVyX2NvcHlfY29uc3RydWN0aW9uKF9fYSk7Cisg ICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxp bmUgdm9pZCBfX2RvX2FsbG9jX29uX21vdmUoX0FsbG9jJiBfX29uZSwgX0Fs bG9jJiBfX3R3bywgdHJ1ZV90eXBlKQorICAgIHsgX19vbmUgPSBzdGQ6Om1v dmUoX190d28pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgor ICAgIGlubGluZSB2b2lkIF9fZG9fYWxsb2Nfb25fbW92ZShfQWxsb2MmLCBf QWxsb2MmLCBmYWxzZV90eXBlKQorICAgIHsgfQorCisgIHRlbXBsYXRlPHR5 cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZCBfX2FsbG9jX29uX21v dmUoX0FsbG9jJiBfX29uZSwgX0FsbG9jJiBfX3R3bykKKyAgICB7CisgICAg ICB0eXBlZGVmIGFsbG9jYXRvcl90cmFpdHM8X0FsbG9jPiBfX3RyYWl0czsK KyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHM6OnByb3BhZ2F0ZV9v bl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50IF9fcG9jbWE7CisgICAgICBf X2RvX2FsbG9jX29uX21vdmUoX19vbmUsIF9fdHdvLCBfX3BvY21hKCkpOwor ICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5s aW5lIHZvaWQgX19kb19hbGxvY19vbl9zd2FwKF9BbGxvYyYgX19vbmUsIF9B bGxvYyYgX190d28sIHRydWVfdHlwZSkKKyAgICB7CisgICAgICB1c2luZyBz dGQ6OnN3YXA7CisgICAgICBzd2FwKF9fb25lLCBfX3R3byk7CisgICAgfQor CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9p ZCBfX2RvX2FsbG9jX29uX3N3YXAoX0FsbG9jJiwgX0FsbG9jJiwgZmFsc2Vf dHlwZSkKKyAgICB7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+ CisgICAgaW5saW5lIHZvaWQgX19hbGxvY19vbl9zd2FwKF9BbGxvYyYgX19v bmUsIF9BbGxvYyYgX190d28pCisgICAgeworICAgICAgdHlwZWRlZiBhbGxv Y2F0b3JfdHJhaXRzPF9BbGxvYz4gX190cmFpdHM7CisgICAgICB0eXBlZGVm IHR5cGVuYW1lIF9fdHJhaXRzOjpwcm9wYWdhdGVfb25fY29udGFpbmVyX3N3 YXAgX19wb2NzOworICAgICAgX19kb19hbGxvY19vbl9zd2FwKF9fb25lLCBf X3R3bywgX19wb2NzKCkpOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVT UEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCisj ZW5kaWYKSW5kZXg6IGluY2x1ZGUvZXh0L2FsbG9jX3RyYWl0cy5oCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUvZXh0L2FsbG9jX3RyYWl0 cy5oCShyZXZpc2lvbiAwKQorKysgaW5jbHVkZS9leHQvYWxsb2NfdHJhaXRz LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACisvLyBBbGxvY2F0 b3IgdHJhaXRzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAx MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlz IGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRo aXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBs YXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisv LyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBn cmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBp biB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24K Ky8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8g YSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09Q WUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBu b3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor CisvKiogQGZpbGUgZXh0L2FsbG9jX3RyYWl0cy5oCisgKiAgVGhpcyBmaWxl IGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJh cnkuCisgKi8KKworI2lmbmRlZiBfRVhUX0FMTE9DX1RSQUlUU19ICisjZGVm aW5lIF9FWFRfQUxMT0NfVFJBSVRTX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0 ZW1faGVhZGVyCisKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhf XworIyBpbmNsdWRlIDxiaXRzL2FsbG9jX3RyYWl0cy5oPgorI2Vsc2UKKyMg aW5jbHVkZSA8Yml0cy9hbGxvY2F0b3IuaD4gIC8vIGZvciBfX2FsbG9jX3N3 YXAKKyNlbmRpZgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJ U0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFD RV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBicmllZiAgVW5pZm9ybSBpbnRl cmZhY2UgdG8gQysrOTggYW5kIEMrKzB4IGFsbG9jYXRvcnMuCisgICAqIEBp bmdyb3VwIGFsbG9jYXRvcnMKKyAgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIF9B bGxvYz4KKyAgc3RydWN0IF9fYWxsb2NfdHJhaXRzCisjaWZkZWYgX19HWFhf RVhQRVJJTUVOVEFMX0NYWDBYX18KKyAgOiBzdGQ6OmFsbG9jYXRvcl90cmFp dHM8X0FsbG9jPgorI2VuZGlmCisgIHsKKyAgICB0eXBlZGVmIF9BbGxvYyBh bGxvY2F0b3JfdHlwZTsKKyNpZmRlZiBfX0dYWF9FWFBFUklNRU5UQUxfQ1hY MFhfXworICAgIHR5cGVkZWYgc3RkOjphbGxvY2F0b3JfdHJhaXRzPF9BbGxv Yz4gICAgICAgICAgIF9CYXNlX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFt ZSBfQmFzZV90eXBlOjp2YWx1ZV90eXBlICAgICAgICAgdmFsdWVfdHlwZTsK KyAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlX3R5cGU6OnBvaW50ZXIgICAg ICAgICAgICBwb2ludGVyOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2Vf dHlwZTo6Y29uc3RfcG9pbnRlciAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAg dHlwZWRlZiB0eXBlbmFtZSBfQmFzZV90eXBlOjpzaXplX3R5cGUgICAgICAg ICAgc2l6ZV90eXBlOworICAgIC8vIEMrKzB4IGFsbG9jYXRvcnMgZG8gbm90 IGRlZmluZSByZWZlcmVuY2Ugb3IgY29uc3RfcmVmZXJlbmNlCisgICAgdHlw ZWRlZiB2YWx1ZV90eXBlJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVmZXJlbmNlOworICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICB1c2lu ZyBfQmFzZV90eXBlOjphbGxvY2F0ZTsKKyAgICB1c2luZyBfQmFzZV90eXBl OjpkZWFsbG9jYXRlOworICAgIHVzaW5nIF9CYXNlX3R5cGU6OmNvbnN0cnVj dDsKKyAgICB1c2luZyBfQmFzZV90eXBlOjpkZXN0cm95OworCisgICAgc3Rh dGljIF9BbGxvYyBfU19zZWxlY3Rfb25fY29weShjb25zdCBfQWxsb2MmIF9f YSkKKyAgICB7IHJldHVybiBfQmFzZV90eXBlOjpzZWxlY3Rfb25fY29udGFp bmVyX2NvcHlfY29uc3RydWN0aW9uKF9fYSk7IH0KKworICAgIHN0YXRpYyB2 b2lkIF9TX29uX3N3YXAoX0FsbG9jJiBfX2EsIF9BbGxvYyYgX19iKQorICAg IHsgc3RkOjpfX2FsbG9jX29uX3N3YXAoX19hLCBfX2IpOyB9CisKKyAgICBz dGF0aWMgY29uc3RleHByIGJvb2wgX1NfcHJvcGFnYXRlX29uX2NvcHlfYXNz aWduKCkKKyAgICB7IHJldHVybiBfQmFzZV90eXBlOjpwcm9wYWdhdGVfb25f Y29udGFpbmVyX2NvcHlfYXNzaWdubWVudDo6dmFsdWU7IH0KKworICAgIHN0 YXRpYyBjb25zdGV4cHIgYm9vbCBfU19wcm9wYWdhdGVfb25fbW92ZV9hc3Np Z24oKQorICAgIHsgcmV0dXJuIF9CYXNlX3R5cGU6OnByb3BhZ2F0ZV9vbl9j b250YWluZXJfbW92ZV9hc3NpZ25tZW50Ojp2YWx1ZTsgfQorCisgICAgc3Rh dGljIGNvbnN0ZXhwciBib29sIF9TX3Byb3BhZ2F0ZV9vbl9zd2FwKCkKKyAg ICB7IHJldHVybiBfQmFzZV90eXBlOjpwcm9wYWdhdGVfb25fY29udGFpbmVy X3N3YXA6OnZhbHVlOyB9CisKKyNlbHNlCisKKyAgICB0eXBlZGVmIHR5cGVu YW1lIF9BbGxvYzo6cG9pbnRlciAgICAgICAgICAgICAgICBwb2ludGVyOwor ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVyICAg ICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBf QWxsb2M6OnZhbHVlX3R5cGUgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAg ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlICAgICAgICAg ICAgICByZWZlcmVuY2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6 OmNvbnN0X3JlZmVyZW5jZSAgICAgICAgY29uc3RfcmVmZXJlbmNlOworICAg IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgICAgICAgICAg ICAgIHNpemVfdHlwZTsKKworICAgIHN0YXRpYyBwb2ludGVyCisgICAgYWxs b2NhdGUoX0FsbG9jJiBfX2EsIHNpemVfdHlwZSBfX24pCisgICAgeyByZXR1 cm4gX19hLmFsbG9jYXRlKF9fbik7IH0KKworICAgIHN0YXRpYyB2b2lkIGRl YWxsb2NhdGUoX0FsbG9jJiBfX2EsIHBvaW50ZXIgX19wLCBzaXplX3R5cGUg X19uKQorICAgIHsgX19hLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9CisKKyAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBzdGF0aWMgdm9pZCBj b25zdHJ1Y3QoX0FsbG9jJiBfX2EsIHBvaW50ZXIgX19wLCBjb25zdCBfVHAm IF9fYXJnKQorICAgICAgeyBfX2EuY29uc3RydWN0KF9fcCwgX19hcmcpOyB9 CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KF9BbGxvYyYgX19hLCBwb2lu dGVyIF9fcCkKKyAgICB7IF9fYS5kZXN0cm95KF9fcCk7IH0KKworICAgIHN0 YXRpYyBjb25zdCBfQWxsb2MmIF9TX3NlbGVjdF9vbl9jb3B5KGNvbnN0IF9B bGxvYyYgX19hKSB7IHJldHVybiBfX2E7IH0KKworICAgIHN0YXRpYyB2b2lk IF9TX29uX3N3YXAoX0FsbG9jJiBfX2EsIF9BbGxvYyYgX19iKQorICAgIHsK KyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAg IC8vIDQzMS4gU3dhcHBpbmcgY29udGFpbmVycyB3aXRoIHVuZXF1YWwgYWxs b2NhdG9ycy4KKyAgICAgIHN0ZDo6X19hbGxvY19zd2FwPF9BbGxvYz46Ol9T X2RvX2l0KF9fYSwgX19iKTsKKyAgICB9CisjZW5kaWYKKyAgfTsKKworX0dM SUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQor CisjZW5kaWYKSW5kZXg6IGluY2x1ZGUvYml0cy9zdGxfY29uc3RydWN0LmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9iaXRzL3N0bF9j b25zdHJ1Y3QuaAkocmV2aXNpb24gMTc1Mjc2KQorKysgaW5jbHVkZS9iaXRz L3N0bF9jb25zdHJ1Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAs NyBAQAogCiAjaW5jbHVkZSA8bmV3PgogI2luY2x1ZGUgPGJpdHMvbW92ZS5o PgorI2luY2x1ZGUgPGV4dC9hbGxvY190cmFpdHMuaD4KIAogbmFtZXNwYWNl IHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCiB7CkBAIC0xNDEs OCArMTQyLDkgQEAKICAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogCSAgICAgX0FsbG9j YXRvciYgX19hbGxvYykKICAgICB7CisgICAgICB0eXBlZGVmIF9fZ251X2N4 eDo6X19hbGxvY190cmFpdHM8X0FsbG9jYXRvcj4gX190cmFpdHM7CiAgICAg ICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKLQlfX2Fs bG9jLmRlc3Ryb3koc3RkOjpfX2FkZHJlc3NvZigqX19maXJzdCkpOworCV9f dHJhaXRzOjpkZXN0cm95KF9fYWxsb2MsIHN0ZDo6X19hZGRyZXNzb2YoKl9f Zmlyc3QpKTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgpJbmRleDogaW5jbHVkZS9iaXRz L3N0bF91bmluaXRpYWxpemVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gaW5jbHVkZS9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgJKHJldmlzaW9u IDE3NTI3NikKKysrIGluY2x1ZGUvYml0cy9zdGxfdW5pbml0aWFsaXplZC5o CSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsOCArMjQxLDkgQEAKICAgICAgIF9G b3J3YXJkSXRlcmF0b3IgX19jdXIgPSBfX3Jlc3VsdDsKICAgICAgIF9fdHJ5 CiAJeworCSAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fYWxsb2NfdHJhaXRzPF9B bGxvY2F0b3I+IF9fdHJhaXRzOwogCSAgZm9yICg7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QsICsrX19jdXIpCi0JICAgIF9fYWxsb2MuY29uc3Ry dWN0KHN0ZDo6X19hZGRyZXNzb2YoKl9fY3VyKSwgKl9fZmlyc3QpOworCSAg ICBfX3RyYWl0czo6Y29uc3RydWN0KF9fYWxsb2MsIHN0ZDo6X19hZGRyZXNz b2YoKl9fY3VyKSwgKl9fZmlyc3QpOwogCSAgcmV0dXJuIF9fY3VyOwogCX0K ICAgICAgIF9fY2F0Y2goLi4uKQpAQCAtMjkwLDggKzI5MSw5IEBACiAgICAg ICBfRm9yd2FyZEl0ZXJhdG9yIF9fY3VyID0gX19maXJzdDsKICAgICAgIF9f dHJ5CiAJeworCSAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fYWxsb2NfdHJhaXRz PF9BbGxvY2F0b3I+IF9fdHJhaXRzOwogCSAgZm9yICg7IF9fY3VyICE9IF9f bGFzdDsgKytfX2N1cikKLQkgICAgX19hbGxvYy5jb25zdHJ1Y3Qoc3RkOjpf X2FkZHJlc3NvZigqX19jdXIpLCBfX3gpOworCSAgICBfX3RyYWl0czo6Y29u c3RydWN0KF9fYWxsb2MsIHN0ZDo6X19hZGRyZXNzb2YoKl9fY3VyKSwgX194 KTsKIAl9CiAgICAgICBfX2NhdGNoKC4uLikKIAl7CkBAIC0zMTUsOCArMzE3 LDkgQEAKICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19jdXIgPSBfX2ZpcnN0 OwogICAgICAgX190cnkKIAl7CisJICB0eXBlZGVmIF9fZ251X2N4eDo6X19h bGxvY190cmFpdHM8X0FsbG9jYXRvcj4gX190cmFpdHM7CiAJICBmb3IgKDsg X19uID4gMDsgLS1fX24sICsrX19jdXIpCi0JICAgIF9fYWxsb2MuY29uc3Ry dWN0KHN0ZDo6X19hZGRyZXNzb2YoKl9fY3VyKSwgX194KTsKKwkgICAgX190 cmFpdHM6OmNvbnN0cnVjdChfX2FsbG9jLCBzdGQ6Ol9fYWRkcmVzc29mKCpf X2N1ciksIF9feCk7CiAJfQogICAgICAgX19jYXRjaCguLi4pCiAJewpAQCAt NTU2LDggKzU1OSw5IEBACiAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fY3Vy ID0gX19maXJzdDsKICAgICAgIF9fdHJ5CiAJeworCSAgdHlwZWRlZiBfX2du dV9jeHg6Ol9fYWxsb2NfdHJhaXRzPF9BbGxvY2F0b3I+IF9fdHJhaXRzOwog CSAgZm9yICg7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKLQkgICAgX19h bGxvYy5jb25zdHJ1Y3Qoc3RkOjpfX2FkZHJlc3NvZigqX19jdXIpKTsKKwkg ICAgX190cmFpdHM6OmNvbnN0cnVjdChfX2FsbG9jLCBzdGQ6Ol9fYWRkcmVz c29mKCpfX2N1cikpOwogCX0KICAgICAgIF9fY2F0Y2goLi4uKQogCXsKQEAg LTU4NSw4ICs1ODksOSBAQAogICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2N1 ciA9IF9fZmlyc3Q7CiAgICAgICBfX3RyeQogCXsKKwkgIHR5cGVkZWYgX19n bnVfY3h4OjpfX2FsbG9jX3RyYWl0czxfQWxsb2NhdG9yPiBfX3RyYWl0czsK IAkgIGZvciAoOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKLQkgICAgX19h bGxvYy5jb25zdHJ1Y3Qoc3RkOjpfX2FkZHJlc3NvZigqX19jdXIpKTsKKwkg ICAgX190cmFpdHM6OmNvbnN0cnVjdChfX2FsbG9jLCBzdGQ6Ol9fYWRkcmVz c29mKCpfX2N1cikpOwogCX0KICAgICAgIF9fY2F0Y2goLi4uKQogCXsK --0015174015449fc78804a6525bd4--