From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28460 invoked by alias); 2 Jul 2014 23:26:38 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 28437 invoked by uid 89); 2 Jul 2014 23:26:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_40,RCVD_IN_DNSWL_LOW,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail-qa0-f44.google.com Received: from mail-qa0-f44.google.com (HELO mail-qa0-f44.google.com) (209.85.216.44) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Wed, 02 Jul 2014 23:26:33 +0000 Received: by mail-qa0-f44.google.com with SMTP id hw13so9675871qab.31 for ; Wed, 02 Jul 2014 16:26:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=idVl6EnT1Qw2FZ9ja/NlWwmJibfn4iFu1j+mExy5Dlo=; b=DTj7w8c6JtM/SckSFRMYHLJLhY2BW8iBJo7I2OLWI8/67Bs2s7CMs6xgnRSTV6w0C/ 6j15BT06J8acJuPb2xr338ZOcdSnWbbFNMogwP2MB/GFpormCnApvssth8txKc3ezK8Y ejrdo+HXM7A+zbFfGJrOUYYQ0i6Jj1QEhzkGTcTRmBhi7/KnIpQXhOQDcIe+5xwF09v8 hI5qwLMZk+TbrQlWVIHP/QT049Lgm4YdANyiNTt82aFl7uD67h5vk+f+kuyLYIMIcRj4 y/ZeDbXke6+6fQmhA+oeseQ2oUPOHM9KBJm0Ic/E1C9m4rUcDyHECs50ZagN468TkEDZ L6yQ== X-Gm-Message-State: ALoCoQn9jH34GGwHzyAGw5Fu7Nfj+J8ZA4szP4HgB2JRCwbMFumGolym4YMiaoZfUAUe2DEegicH MIME-Version: 1.0 X-Received: by 10.224.147.80 with SMTP id k16mr461267qav.99.1404343590724; Wed, 02 Jul 2014 16:26:30 -0700 (PDT) Received: by 10.140.85.47 with HTTP; Wed, 2 Jul 2014 16:26:30 -0700 (PDT) In-Reply-To: References: Date: Wed, 02 Jul 2014 23:26:00 -0000 Message-ID: Subject: Re: [gold] First patch for aarch64 backend From: Cary Coutant To: Jing Yu Cc: Andrew Pinski , Yufeng Zhang , binutils , Han Shen , Doug Kwan Content-Type: multipart/mixed; boundary=089e01495134de5a7304fd3e3897 X-IsSubscribed: yes X-SW-Source: 2014-07/txt/msg00044.txt.bz2 --089e01495134de5a7304fd3e3897 Content-Type: text/plain; charset=UTF-8 Content-length: 824 I've committed the attached patch on your behalf. Thanks, and looking forward to more aarch64 patches! -cary 2014-07-02 Jing Yu Initial patch to enable gold aarch64 backend. This patch is just a skeleton which almost does nothing. It does not support ILP32 now. gold/ChangeLog: * aarch64.cc: New file * Makefile.am (TARGETSOURCES): Add aarch64.cc (ALL_TARGETOBJS): Add aarch64.$(OBJEXT) * Makefile.in: Regenerate. * configure.tgt: Add entries for aarch64*. * configure.ac: Likewise. * configure: Likewise. elfcpp/ChangeLog: * aarch64.h: New file. New enums for aarch64-elf64 relocations. * elfcpp.h (EM_AARCH64, SHT_AARCH64_ATTRIBUTES, PT_AARCH64_ARCHEXT, PT_AARCH64_UNWIND): New enum constant. --089e01495134de5a7304fd3e3897 Content-Type: application/octet-stream; name="gold_aarch64.patch1" Content-Disposition: attachment; filename="gold_aarch64.patch1" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hx59wqr50 Content-length: 78540 Y29tbWl0IGViOWViZWE4YzkzMTAyYWU0NGNhODU2YjNhMGFlN2M3YmU4ODNl YTcKQXV0aG9yOiBKaW5nIFl1IDxqaW5neXVAZ29vZ2xlLmNvbT4KRGF0ZTog ICBXZWQgSnVsIDIgMTA6NTQ6NTMgMjAxNCAtMDcwMAoKICAgIEluaXRpYWwg cGF0Y2ggdG8gZW5hYmxlIGdvbGQgYWFyY2g2NCBiYWNrZW5kLgogICAgCiAg ICBUaGlzIHBhdGNoIGlzIGp1c3QgYSBza2VsZXRvbiB3aGljaCBhbG1vc3Qg ZG9lcyBub3RoaW5nLgogICAgSXQgZG9lcyBub3Qgc3VwcG9ydCBJTFAzMiBu b3cuCiAgICAKICAgIGdvbGQvQ2hhbmdlTG9nOgogICAgCSogYWFyY2g2NC5j YzogTmV3IGZpbGUKICAgIAkqIE1ha2VmaWxlLmFtIChUQVJHRVRTT1VSQ0VT KTogQWRkIGFhcmNoNjQuY2MKICAgIAkoQUxMX1RBUkdFVE9CSlMpOiBBZGQg YWFyY2g2NC4kKE9CSkVYVCkKICAgIAkqIE1ha2VmaWxlLmluOiBSZWdlbmVy YXRlLgogICAgCSogY29uZmlndXJlLnRndDogQWRkIGVudHJpZXMgZm9yIGFh cmNoNjQqLgogICAgCSogY29uZmlndXJlLmFjOiAgTGlrZXdpc2UuCiAgICAJ KiBjb25maWd1cmU6IExpa2V3aXNlLgogICAgCiAgICBlbGZjcHAvQ2hhbmdl TG9nOgogICAgCSogYWFyY2g2NC5oOiBOZXcgZmlsZS4gTmV3IGVudW1zIGZv ciBhYXJjaDY0LWVsZjY0IHJlbG9jYXRpb25zLgogICAgCSogZWxmY3BwLmgg KEVNX0FBUkNINjQsIFNIVF9BQVJDSDY0X0FUVFJJQlVURVMsIFBUX0FBUkNI NjRfQVJDSEVYVCwKICAgIAlQVF9BQVJDSDY0X1VOV0lORCk6IE5ldyBlbnVt IGNvbnN0YW50LgoKZGlmZiAtLWdpdCBhL2VsZmNwcC9hYXJjaDY0LmggYi9l bGZjcHAvYWFyY2g2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjRkMTg5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9lbGZjcHAvYWFy Y2g2NC5oCkBAIC0wLDAgKzEsMTgzIEBACisvLyBhYXJjaDY0LmggLS0gRUxG IGRlZmluaXRpb25zIHNwZWNpZmljIHRvIEFBUkNINjQgIC0qLSBDKysgLSot CisKKy8vIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKy8vIFdyaXR0ZW4gYnkgSmluZyBZdSAoamluZ3l1QGdv b2dsZS5jb20pCisKKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVsZmNwcC4K KworLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorLy8gbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorLy8gYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yCisvLyAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBJbiBhZGRpdGlvbiB0 byB0aGUgcGVybWlzc2lvbnMgaW4gdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg UHVibGljCisvLyBMaWNlbnNlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uIGdpdmVzIHlvdSB1bmxpbWl0ZWQKKy8vIHBlcm1pc3Npb24gdG8gbGlu ayB0aGUgY29tcGlsZWQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaW50bworLy8g Y29tYmluYXRpb25zIHdpdGggb3RoZXIgcHJvZ3JhbXMsIGFuZCB0byBkaXN0 cmlidXRlIHRob3NlCisvLyBjb21iaW5hdGlvbnMgd2l0aG91dCBhbnkgcmVz dHJpY3Rpb24gY29taW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzCisvLyBmaWxl LiAgKFRoZSBMaWJyYXJ5IFB1YmxpYyBMaWNlbnNlIHJlc3RyaWN0aW9ucyBk byBhcHBseSBpbiBvdGhlcgorLy8gcmVzcGVjdHM7IGZvciBleGFtcGxlLCB0 aGV5IGNvdmVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZSwgYW5kCisvLy8g ZGlzdHJpYnV0aW9uIHdoZW4gbm90IGxpbmtlZCBpbnRvIGEgY29tYmluZWQg ZXhlY3V0YWJsZS4pCisKKy8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8v IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBM aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy8vIExpY2Vuc2UgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisvLyAwMjExMC0x MzAxLCBVU0EuCisKKyNpZm5kZWYgRUxGQ1BQX0FBUkNINjRfSAorI2RlZmlu ZSBFTEZDUFBfQUFSQ0g2NF9ICisKK25hbWVzcGFjZSBlbGZjcHAKK3sKKwor Ly8gVGhlIHJlbG9jYXRpb24gdHlwZSBpbmZvcm1hdGlvbiBpcyB0YWtlbiBm cm9tOgorLy8KKy8vICAgRUxGIGZvciB0aGUgQVJNIDY0LWJpdCBBcmNoaXRl Y3R1cmUgKEFBcmNoNjQpCisvLyAgIERvY3VtZW50IG51bWJlcjogQVJNIElI SSAwMDU2QiwgY3VycmVudCB0aHJvdWdoIEFBcmNoNjQgQUJJIHJlbGVhc2Ug MS4wCisvLyAgIERhdGUgb2YgSXNzdWU6IDIybmQgTWF5LCAyMDEzCisvLwor CitlbnVtCit7CisgIC8vIE51bGwgcmVsb2NhdGlvbiBjb2RlcworICBSX0FB UkNINjRfTk9ORSA9IDAsCQkvLyBOb25lCisgIHdpdGhkcmF3biA9IDI1NiwJ CS8vIFRyZWF0IGFzIFJfQUFSQ0g2NF9OT05FCisKKyAgLy8gU3RhdGljIHJl bG9jYXRpb25zCisgIFJfQUFSQ0g2NF9BQlM2NCA9IDI1NywJLy8gUyArIEEK KyAgUl9BQVJDSDY0X0FCUzMyID0gMjU4LAkvLyBTICsgQQorICBSX0FBUkNI NjRfQUJTMTYgPSAyNTksCS8vIFMgKyBBCisgIFJfQUFSQ0g2NF9QUkVMNjQg PSAyNjAsCS8vIFMgKyBBIC0gUAorICBSX0FBUkNINjRfUFJFTDMyID0gMjYx LAkvLyBTICsgQSAtIFAKKyAgUl9BQVJDSDY0X1BSRUwxNiA9IDI2MiwJLy8g UyArIEEgLSBQCisgIFJfQUFSQ0g2NF9NT1ZXX1VBQlNfRzAgPSAyNjMsCQkv LyBTICsgQQorICBSX0FBUkNINjRfTU9WV19VQUJTX0cwX05DID0gMjY0LAkv LyBTICsgQQorICBSX0FBUkNINjRfTU9WV19VQUJTX0cxID0gMjY1LAkJLy8g UyArIEEKKyAgUl9BQVJDSDY0X01PVldfVUFCU19HMV9OQyA9IDI2NiwJLy8g UyArIEEKKyAgUl9BQVJDSDY0X01PVldfVUFCU19HMiA9IDI2NywJCS8vIFMg KyBBCisgIFJfQUFSQ0g2NF9NT1ZXX1VBQlNfRzJfTkMgPSAyNjgsCS8vIFMg KyBBCisgIFJfQUFSQ0g2NF9NT1ZXX1VBQlNfRzMgPSAyNjksCQkvLyBTICsg QQorICBSX0FBUkNINjRfTU9WV19TQUJTX0cwID0gMjcwLAkJLy8gUyArIEEK KyAgUl9BQVJDSDY0X01PVldfU0FCU19HMSA9IDI3MSwJCS8vIFMgKyBBCisg IFJfQUFSQ0g2NF9NT1ZXX1NBQlNfRzIgPSAyNzIsCQkvLyBTICsgQQorICBS X0FBUkNINjRfTERfUFJFTF9MTzE5ID0gMjczLAkJLy8gUyArIEEgLSBQCisg IFJfQUFSQ0g2NF9BRFJfUFJFTF9MTzIxID0gMjc0LAkvLyBTICsgQSAtIFAK KyAgUl9BQVJDSDY0X0FEUl9QUkVMX1BHX0hJMjEgPSAyNzUsCS8vIFBhZ2Uo UytBKSAtIFBhZ2UoUCkKKyAgUl9BQVJDSDY0X0FEUl9QUkVMX1BHX0hJMjFf TkMgPSAyNzYsCS8vIFBhZ2UoUytBKSAtIFBhZ2UoUCkKKyAgUl9BQVJDSDY0 X0FERF9BQlNfTE8xMl9OQyA9IDI3NywJLy8gUyArIEEKKyAgUl9BQVJDSDY0 X0xEU1Q4X0FCU19MTzEyX05DID0gMjc4LAkvLyBTICsgQQorICBSX0FBUkNI NjRfVFNUQlIxNCA9IDI3OSwJCS8vIFMgKyBBIC0gUAorICBSX0FBUkNINjRf Q09OREJSMTkgPSAyODAsCQkvLyBTICsgQSAtIFAKKyAgUl9BQVJDSDY0X0pV TVAyNiA9IDI4MiwJCS8vIFMgKyBBIC0gUAorICBSX0FBUkNINjRfQ0FMTDI2 ID0gMjgzLAkJLy8gUyArIEEgLSBQCisgIFJfQUFSQ0g2NF9MRFNUMTZfQUJT X0xPMTJfTkMgPSAyODQsCS8vIFMgKyBBCisgIFJfQUFSQ0g2NF9MRFNUMzJf QUJTX0xPMTJfTkMgPSAyODUsCS8vIFMgKyBBCisgIFJfQUFSQ0g2NF9MRFNU NjRfQUJTX0xPMTJfTkMgPSAyODYsCS8vIFMgKyBBCisgIFJfQUFSQ0g2NF9N T1ZXX1BSRUxfRzAgPSAyODcsCQkvLyBTICsgQSAtIFAKKyAgUl9BQVJDSDY0 X01PVldfUFJFTF9HMF9OQyA9IDI4OCwJLy8gUyArIEEgLSBQCisgIFJfQUFS Q0g2NF9NT1ZXX1BSRUxfRzEgPSAyODksCQkvLyBTICsgQSAtIFAKKyAgUl9B QVJDSDY0X01PVldfUFJFTF9HMV9OQyA9IDI5MCwJLy8gUyArIEEgLSBQCisg IFJfQUFSQ0g2NF9NT1ZXX1BSRUxfRzIgPSAyOTEsCQkvLyBTICsgQSAtIFAK KyAgUl9BQVJDSDY0X01PVldfUFJFTF9HMl9OQyA9IDI5MiwJLy8gUyArIEEg LSBQCisgIFJfQUFSQ0g2NF9NT1ZXX1BSRUxfRzMgPSAyOTMsCQkvLyBTICsg QSAtIFAKKyAgUl9BQVJDSDY0X0xEU1QxMjhfQUJTX0xPMTJfTkMgPSAyOTks CS8vIFMgKyBBCisgIFJfQUFSQ0g2NF9NT1ZXX0dPVE9GRl9HMCA9IDMwMCwJ Ly8gRyhHREFUKFMrQSkpLUdPVAorICBSX0FBUkNINjRfTU9WV19HT1RPRkZf RzBfTkMgPSAzMDEsCS8vIEcoR0RBVChTK0EpKS1HT1QKKyAgUl9BQVJDSDY0 X01PVldfR09UT0ZGX0cxID0gMzAyLAkvLyBHKEdEQVQoUytBKSktR09UCisg IFJfQUFSQ0g2NF9NT1ZXX0dPVE9GRl9HMV9OQyA9IDMwMywJLy8gRyhHREFU KFMrQSkpLUdPVAorICBSX0FBUkNINjRfTU9WV19HT1RPRkZfRzIgPSAzMDQs CS8vIEcoR0RBVChTK0EpKS1HT1QKKyAgUl9BQVJDSDY0X01PVldfR09UT0ZG X0cyX05DID0gMzA1LAkvLyBHKEdEQVQoUytBKSktR09UCisgIFJfQUFSQ0g2 NF9NT1ZXX0dPVE9GRl9HMyA9IDMwNiwJLy8gRyhHREFUKFMrQSkpLUdPVAor ICBSX0FBUkNINjRfR09UUkVMNjQgPSAzMDcsCQkvLyBTICsgQSAtIEdPVAor ICBSX0FBUkNINjRfR09UUkVMMzIgPSAzMDgsCQkvLyBTICsgQSAtIEdPVAor ICBSX0FBUkNINjRfR09UX0xEX1BSRUwxOSA9IDMwOSwJLy8gRyhHREFUKFMr QSkpLVAKKyAgUl9BQVJDSDY0X0xENjRfR09UT0ZGX0xPMTUgPSAzMTAsCS8v IEcoR0RBVChTK0EpKS1HT1QKKyAgUl9BQVJDSDY0X0FEUl9HT1RfUEFHRSA9 IDMxMSwJCS8vIFBhZ2UoRyhHREFUKFMrQSkpKS1QYWdlKFApCisgIFJfQUFS Q0g2NF9MRDY0X0dPVF9MTzEyX05DID0gMzEyLAkvLyBHKEdEQVQoUytBKSkK KyAgUl9BQVJDSDY0X0xENjRfR09UUEFHRV9MTzE1ID0gMzEzLAkvLyBHKEdE QVQoUytBKSktUGFnZShHT1QpCisKKyAgLy8gUmVsb2NhdGlvbnMgZm9yIHRo cmVhZC1sb2NhbCBzdG9yYWdlCisgIFJfQUFSQ0g2NF9UTFNHRF9BRFJfUFJF TDIxID0gNTEyLAkJLy8gRyhHVExTSURYKFMsQSkpIC0gUAorICBSX0FBUkNI NjRfVExTR0RfQURSX1BBR0UyMSA9IDUxMywJCS8vIFBhZ2UoRyhHVExTSURY KFMsQSkpKS1QYWdlKFApCisgIFJfQUFSQ0g2NF9UTFNHRF9BRERfTE8xMl9O QyA9IDUxNCwJCS8vIEcoR1RMU0lDWChTLEEpKQorICBSX0FBUkNINjRfVExT R0RfTU9WV19HMSA9IDUxNSwJCS8vIEcoR1RMU0lEWChTLEEpKSAtIEdPVAor ICBSX0FBUkNINjRfVExTR0RfTU9WV19HMF9OQyA9IDUxNiwJCS8vIEcoR1RM U0lEWChTLEEpKSAtIEdPVAorCisgIFJfQUFSQ0g2NF9UTFNMRF9BRFJfUFJF TDIxID0gNTE3LAkJLy8gRyhHTERNKFMpKSAtIFAKKyAgUl9BQVJDSDY0X1RM U0xEX0FEUl9QQUdFMjEgPSA1MTgsCQkvLyBQYWdlKEcoR0xETShTKSkpIC0g UGFnZShQKQorICBSX0FBUkNINjRfVExTTERfQUREX0xPMTJfTkMgPSA1MTks CQkvLyBHKEdMRE0oUykpCisgIFJfQUFSQ0g2NF9UTFNMRF9NT1ZXX0cxID0g NTIwLAkJLy8gRyhHTERNKFMpKSAtIEdPVAorICBSX0FBUkNINjRfVExTTERf TU9WV19HMF9OQyA9IDUyMSwJCS8vIEcoR0xETShTKSkgLSBHT1QKKyAgUl9B QVJDSDY0X1RMU0xEX0xEX1BSRUwxOSA9IDUyMiwJCS8vIEcoR0xETShTKSkg LSBQCisgIFJfQUFSQ0g2NF9UTFNMRF9NT1ZXX0RUUFJFTF9HMiA9IDUyMywJ CS8vIERUUFJFTChTK0EpCisgIFJfQUFSQ0g2NF9UTFNMRF9NT1ZXX0RUUFJF TF9HMSA9IDUyNCwJCS8vIERUUFJFTChTK0EpCisgIFJfQUFSQ0g2NF9UTFNM RF9NT1ZXX0RUUFJFTF9HMV9OQyA9IDUyNSwJLy8gRFRQUkVMKFMrQSkKKyAg Ul9BQVJDSDY0X1RMU0xEX01PVldfRFRQUkVMX0cwID0gNTI2LAkJLy8gRFRQ UkVMKFMrQSkKKyAgUl9BQVJDSDY0X1RMU0xEX01PVldfRFRQUkVMX0cwX05D ID0gNTI3LAkvLyBEVFBSRUwoUytBKQorICBSX0FBUkNINjRfVExTTERfQURE X0RUUFJFTF9ISTEyID0gNTI4LAkvLyBEVFBSRUwoUytBKQorICBSX0FBUkNI NjRfVExTTERfQUREX0RUUFJFTF9MTzEyID0gNTI5LAkvLyBEVFBSRUwoUytB KQorICBSX0FBUkNINjRfVExTTERfQUREX0RUUFJFTF9MTzEyX05DID0gNTMw LAkvLyBEVFBSRUwoUytBKQorICBSX0FBUkNINjRfVExTTERfTERTVDhfRFRQ UkVMX0xPMTIgPSA1MzEsCS8vIERUUFJFTChTK0EpCisgIFJfQUFSQ0g2NF9U TFNMRF9MRFNUOF9EVFBSRUxfTE8xMl9OQyA9IDUzMiwJLy8gRFRQUkVMKFMr QSkKKyAgUl9BQVJDSDY0X1RMU0xEX0xEU1QxNl9EVFBSRUxfTE8xMiA9IDUz MywJLy8gRFRQUkVMKFMrQSkKKyAgUl9BQVJDSDY0X1RMU0xEX0xEU1QxNl9E VFBSRUxfTE8xMl9OQyA9IDUzNCwJLy8gRFRQUkVMKFMrQSkKKyAgUl9BQVJD SDY0X1RMU0xEX0xEU1QzMl9EVFBSRUxfTE8xMiA9IDUzNSwJLy8gRFRQUkVM KFMrQSkKKyAgUl9BQVJDSDY0X1RMU0xEX0xEU1QzMl9EVFBSRUxfTE8xMl9O QyA9IDUzNiwJLy8gRFRQUkVMKFMrQSkKKyAgUl9BQVJDSDY0X1RMU0xEX0xE U1Q2NF9EVFBSRUxfTE8xMiA9IDUzNywJLy8gRFRQUkVMKFMrQSkKKyAgUl9B QVJDSDY0X1RMU0xEX0xEU1Q2NF9EVFBSRUxfTE8xMl9OQyA9IDUzOCwJLy8g RFRQUkVMKFMrQSkKKyAgUl9BQVJDSDY0X1RMU0lFX01PVldfR09UVFBSRUxf RzEgPSA1MzksCS8vIEcoR1RQUkVMKFMrQSkpIC0gR09UCisgIFJfQUFSQ0g2 NF9UTFNJRV9NT1ZXX0dPVFRQUkVMX0cwX05DID0gNTQwLAkvLyBHKEdUUFJF TChTK0EpKSAtIEdPVAorICBSX0FBUkNINjRfVExTSUVfQURSX0dPVFRQUkVM X1BBR0UyMSA9IDU0MSwJLy8gUGFnZShHKEdUUFJFTChTK0EpKSktUGFnZShQ KQorICBSX0FBUkNINjRfVExTSUVfTEQ2NF9HT1RUUFJFTF9MTzEyX05DID0g NTQyLAkvLyBHKEdUUFJFTChTK0EpKQorICBSX0FBUkNINjRfVExTSUVfTERf R09UVFBSRUxfUFJFTDE5ID0gNTQzLAkvLyBHKEdUUFJFTChTK0EpKSAtIFAK KyAgUl9BQVJDSDY0X1RMU0xFX01PVldfVFBSRUxfRzIgPSA1NDQsCQkvLyBU UFJFTChTK0EpCisgIFJfQUFSQ0g2NF9UTFNMRV9NT1ZXX1RQUkVMX0cxID0g NTQ1LAkJLy8gVFBSRUwoUytBKQorICBSX0FBUkNINjRfVExTTEVfTU9WV19U UFJFTF9HMV9OQyA9IDU0NiwJLy8gVFBSRUwoUytBKQorICBSX0FBUkNINjRf VExTTEVfTU9WV19UUFJFTF9HMCA9IDU0NywJCS8vIFRQUkVMKFMrQSkKKyAg Ul9BQVJDSDY0X1RMU0xFX01PVldfVFBSRUxfRzBfTkMgPSA1NDgsCS8vIFRQ UkVMKFMrQSkKKyAgUl9BQVJDSDY0X1RMU0xFX0FERF9UUFJFTF9ISTEyID0g NTQ5LAkJLy8gVFBSRUwoUytBKQorICBSX0FBUkNINjRfVExTTEVfQUREX1RQ UkVMX0xPMTIgPSA1NTAsCQkvLyBUUFJFTChTK0EpCisgIFJfQUFSQ0g2NF9U TFNMRV9BRERfVFBSRUxfTE8xMl9OQyA9IDU1MSwJLy8gVFBSRUwoUytBKQor ICBSX0FBUkNINjRfVExTTEVfTERTVDhfVFBSRUxfTE8xMiA9IDU1MiwJLy8g VFBSRUwoUytBKQorICBSX0FBUkNINjRfVExTTEVfTERTVDhfVFBSRUxfTE8x Ml9OQyA9IDU1MywJLy8gVFBSRUwoUytBKQorICBSX0FBUkNINjRfVExTTEVf TERTVDE2X1RQUkVMX0xPMTIgPSA1NTQsCS8vIFRQUkVMKFMrQSkKKyAgUl9B QVJDSDY0X1RMU0xFX0xTRFQxNl9UUFJFTF9MTzEyX05DID0gNTU1LAkvLyBU UFJFTChTK0EpCisgIFJfQUFSQ0g2NF9UTFNMRV9MRFNUMzJfVFBSRUxfTE8x MiA9IDU1NiwJLy8gVFBSRUwoUytBKQorICBSX0FBUkNINjRfVExTTEVfTERT VDMyX1RQUkVMX0xPMTJfTkMgPSA1NTcsCS8vIFRQUkVMKFMrQSkKKyAgUl9B QVJDSDY0X1RMU0xFX0xEU1Q2NF9UUFJFTF9MTzEyID0gNTU4LAkvLyBUUFJF TChTK0EpCisgIFJfQUFSQ0g2NF9UTFNMRV9MRFNUNjRfVFBSRUxfTE8xMl9O QyA9IDU1OSwJLy8gVFBSRUwoUytBKQorICBSX0FBUkNINjRfVExTREVTQ19M RF9QUkVMMTkgPSA1NjAsCS8vIEcoR1RMU0RFU0MoUytBKSkgLSBQCisgIFJf QUFSQ0g2NF9UTFNERVNDX0FEUl9QUkVMMjEgPSA1NjEsCS8vIEcoR1RMU0RF U0MoUytBKSkgLSBQCisgIFJfQUFSQ0g2NF9UTFNERVNDX0FEUl9QQUdFMjEg PSA1NjIsCS8vIFBhZ2UoRyhHVExTREVTQyhTK0EpKSktUGFnZShQKQorICBS X0FBUkNINjRfVExTREVTQ19MRDY0X0xPMTIgPSA1NjMsCS8vIEcoR1RMU0RF U0MoUytBKSkKKyAgUl9BQVJDSDY0X1RMU0RFU0NfQUREX0xPMTIgPSA1NjQs CS8vIEcoR1RMU0RFU0MoUytBKSkKKyAgUl9BQVJDSDY0X1RMU0RFU0NfT0ZG X0cxID0gNTY1LAkvLyBHKEdUTFNERVNDKFMrQSkpIC0gR09UCisgIFJfQUFS Q0g2NF9UTFNERVNDX09GRl9HMF9OQyA9IDU2NiwJLy8gRyhHVExTREVTQyhT K0EpKSAtIEdPVAorICBSX0FBUkNINjRfVExTREVTQ19MRFIgPSA1NjcsCQkv LyBOb25lCisgIFJfQUFSQ0g2NF9UTFNERVNDX0FERCA9IDU2OCwJCS8vIE5v bmUKKyAgUl9BQVJDSDY0X1RMU0RFU0NfQ0FMTCA9IDU2OSwJCS8vIE5vbmUK KyAgUl9BQVJDSDY0X1RMU0xFX0xEU1QxMjhfVFBSRUxfTE8xMiA9IDU3MCwJ Ly8gVFBSRUwoUytBKQorICBSX0FBUkNINjRfVExTTEVfTERTVDEyOF9UUFJF TF9MTzEyX05DID0gNTcxLAkvLyBUUFJFTChTK0EpCisgIFJfQUFSQ0g2NF9U TFNMRF9MRFNUMTI4X0RUUFJFTF9MTzEyID0gNTcyLAkvLyBEVFBSRUwoUytB KQorICBSX0FBUkNINjRfVExTTERfTERTVDEyOF9EVFBSRUxfTE8xMl9OQyA9 IDU3MywJLy8gRFRQUkVMKFMrQSkKKworICAvLyBEeW5hbWljIHJlbG9jYXRp b25zCisgIFJfQUFSQ0g2NF9DT1BZID0gMTAyNCwKKyAgUl9BQVJDSDY0X0dM T0JfREFUID0gMTAyNSwJCS8vIFMgKyBBCisgIFJfQUFSQ0g2NF9KVU1QX1NM T1QgPSAxMDI2LAkJLy8gUyArIEEKKyAgUl9BQVJDSDY0X1JFTEFUSVZFID0g MTAyNywJCS8vIERlbHRhKFMpICsgQQorICBSX0FBUkNINjRfVExTX0RUUFJF TDY0ID0gMTAyOCwJLy8gRFRQUkVMKFMrQSkKKyAgUl9BQVJDSDY0X1RMU19E VFBNT0Q2NCA9IDEwMjksCS8vIExETShTKQorICBSX0FBUkNINjRfVExTX1RQ UkVMNjQgPSAxMDMwLAkJLy8gVFBSRUwoUytBKQorICBSX0FBUkNINjRfVExT REVTQyA9IDEwMzEsCQkvLyBUTFNERVNDKFMrQSkKKyAgUl9BQVJDSDY0X0lS RUxBVElWRSA9IDEwMzIsCQkvLyBJbmRpcmVjdChEZWx0YShTKSArIEEpCit9 OworCit9IC8vIEVuZCBuYW1lc3BhY2UgZWxmY3BwLgorCisjZW5kaWYgLy8g IWRlZmluZWQoRUxGQ1BQX0FBUkNINjRfSCkKZGlmZiAtLWdpdCBhL2VsZmNw cC9lbGZjcHAuaCBiL2VsZmNwcC9lbGZjcHAuaAppbmRleCA1NjFiNTRhLi44 ZThlNjc1IDEwMDY0NAotLS0gYS9lbGZjcHAvZWxmY3BwLmgKKysrIGIvZWxm Y3BwL2VsZmNwcC5oCkBAIC0yNjgsNiArMjY4LDcgQEAgZW51bSBFTQogICBF TV9VTklDT1JFID0gMTEwLAogICBFTV9BTFRFUkFfTklPUzIgPSAxMTMsCiAg IEVNX0NSWCA9IDExNCwKKyAgRU1fQUFSQ0g2NCA9IDE4MywKICAgRU1fVElM RUdYID0gMTkxLAogICAvLyBUaGUgTW9ycGggTVQuCiAgIEVNX01UID0gMHgy NTMwLApAQCAtNDA2LDYgKzQwNyw5IEBAIGVudW0gU0hUCiAgIC8vIFNlY3Rp b24gY29udGFpbnMgbWlzY2VsbGFuZW91cyBvcHRpb25zLgogICBTSFRfTUlQ U19PUFRJT05TID0gMHg3MDAwMDAwZCwKIAorICAvLyBBQVJDSDY0LXNwZWNp ZmljIHNlY3Rpb24gdHlwZS4KKyAgU0hUX0FBUkNINjRfQVRUUklCVVRFUyA9 IDB4NzAwMDAwMDMsCisKICAgLy8gTGluayBlZGl0b3IgaXMgdG8gc29ydCB0 aGUgZW50cmllcyBpbiB0aGlzIHNlY3Rpb24gYmFzZWQgb24gdGhlCiAgIC8v IGFkZHJlc3Mgc3BlY2lmaWVkIGluIHRoZSBhc3NvY2lhdGVkIHN5bWJvbCB0 YWJsZSBlbnRyeS4KICAgU0hUX09SREVSRUQgPSAweDdmZmZmZmZmCkBAIC00 OTAsNyArNDk0LDExIEBAIGVudW0gUFQKICAgLy8gUnVudGltZSBwcm9jZWR1 cmUgdGFibGUuCiAgIFBUX01JUFNfUlRQUk9DID0gMHg3MDAwMDAwMSwKICAg Ly8gLk1JUFMub3B0aW9ucyBzZWN0aW9uLgotICBQVF9NSVBTX09QVElPTlMg PSAweDcwMDAwMDAyCisgIFBUX01JUFNfT1BUSU9OUyA9IDB4NzAwMDAwMDIs CisgIC8vIFBsYXRmb3JtIGFyY2hpdGVjdHVyZSBjb21wYXRpYmlsaXR5IGlu Zm9ybWF0aW9uCisgIFBUX0FBUkNINjRfQVJDSEVYVCA9IDB4NzAwMDAwMDAs CisgIC8vIEV4Y2VwdGlvbiB1bndpbmQgdGFibGVzCisgIFBUX0FBUkNINjRf VU5XSU5EID0gMHg3MDAwMDAwMQogfTsKIAogLy8gVGhlIHZhbGlkIGJpdCBm bGFncyBmb3VuZCBpbiB0aGUgUGhkciBwX2ZsYWdzIGZpZWxkLgpkaWZmIC0t Z2l0IGEvZ29sZC9NYWtlZmlsZS5hbSBiL2dvbGQvTWFrZWZpbGUuYW0KaW5k ZXggZGQwNWU4Mi4uMTdiYTRiNCAxMDA2NDQKLS0tIGEvZ29sZC9NYWtlZmls ZS5hbQorKysgYi9nb2xkL01ha2VmaWxlLmFtCkBAIC0xNjQsMTEgKzE2NCwx MiBAQCBFWFRSQV9ESVNUID0geXlzY3JpcHQuYyB5eXNjcmlwdC5oCiAKIFRB UkdFVFNPVVJDRVMgPSBcCiAJaTM4Ni5jYyB4ODZfNjQuY2Mgc3BhcmMuY2Mg cG93ZXJwYy5jYyBhcm0uY2MgYXJtLXJlbG9jLXByb3BlcnR5LmNjIHRpbGVn eC5jYyBcCi0JbWlwcy5jYworCW1pcHMuY2MgYWFyY2g2NC5jYwogCiBBTExf VEFSR0VUT0JKUyA9IFwKIAlpMzg2LiQoT0JKRVhUKSB4ODZfNjQuJChPQkpF WFQpIHNwYXJjLiQoT0JKRVhUKSBwb3dlcnBjLiQoT0JKRVhUKSBcCi0JYXJt LiQoT0JKRVhUKSBhcm0tcmVsb2MtcHJvcGVydHkuJChPQkpFWFQpIHRpbGVn eC4kKE9CSkVYVCkgbWlwcy4kKE9CSkVYVCkKKwlhcm0uJChPQkpFWFQpIGFy bS1yZWxvYy1wcm9wZXJ0eS4kKE9CSkVYVCkgdGlsZWd4LiQoT0JKRVhUKSBc CisJbWlwcy4kKE9CSkVYVCkgYWFyY2g2NC4kKE9CSkVYVCkKIAogbGliZ29s ZF9hX1NPVVJDRVMgPSAkKENDRklMRVMpICQoSEZJTEVTKSAkKFlGSUxFUykg JChERUZGSUxFUykKIGxpYmdvbGRfYV9MSUJBREQgPSAkKExJQk9CSlMpCmRp ZmYgLS1naXQgYS9nb2xkL2FhcmNoNjQuY2MgYi9nb2xkL2FhcmNoNjQuY2MK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdmZTAzMQot LS0gL2Rldi9udWxsCisrKyBiL2dvbGQvYWFyY2g2NC5jYwpAQCAtMCwwICsx LDE0NDcgQEAKKy8vIGFhcmNoNjQuY2MgLS0gYWFyY2g2NCB0YXJnZXQgc3Vw cG9ydCBmb3IgZ29sZC4KKworLy8gQ29weXJpZ2h0IChDKSAyMDE0IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8gV3JpdHRlbiBieSBKaW5n IFl1IDxqaW5neXVAZ29vZ2xlLmNvbT4uCisKKy8vIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIGdvbGQuCisKKy8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisv LyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IKKy8vIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisKKy8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisvLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3Rv biwKKy8vIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworI2luY2x1ZGUgImdvbGQu aCIKKworI2luY2x1ZGUgPGNzdHJpbmc+CisKKyNpbmNsdWRlICJlbGZjcHAu aCIKKyNpbmNsdWRlICJkd2FyZi5oIgorI2luY2x1ZGUgInBhcmFtZXRlcnMu aCIKKyNpbmNsdWRlICJyZWxvYy5oIgorI2luY2x1ZGUgImFhcmNoNjQuaCIK KyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJzeW10YWIuaCIKKyNp bmNsdWRlICJsYXlvdXQuaCIKKyNpbmNsdWRlICJvdXRwdXQuaCIKKyNpbmNs dWRlICJjb3B5LXJlbG9jcy5oIgorI2luY2x1ZGUgInRhcmdldC5oIgorI2lu Y2x1ZGUgInRhcmdldC1yZWxvYy5oIgorI2luY2x1ZGUgInRhcmdldC1zZWxl Y3QuaCIKKyNpbmNsdWRlICJ0bHMuaCIKKyNpbmNsdWRlICJmcmVlYnNkLmgi CisjaW5jbHVkZSAibmFjbC5oIgorI2luY2x1ZGUgImdjLmgiCisjaW5jbHVk ZSAiaWNmLmgiCisKKy8vIFRoZSBmaXJzdCB0aHJlZSAuZ290LnBsdCBlbnRy aWVzIGFyZSByZXNlcnZlZC4KK2NvbnN0IGludDMyX3QgQUFSQ0g2NF9HT1RQ TFRfUkVTRVJWRV9DT1VOVCA9IDM7CisKK25hbWVzcGFjZQoreworCit1c2lu ZyBuYW1lc3BhY2UgZ29sZDsKKwordGVtcGxhdGU8aW50IHNpemUsIGJvb2wg YmlnX2VuZGlhbj4KK2NsYXNzIE91dHB1dF9kYXRhX3BsdF9hYXJjaDY0Owor Cit0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgorY2xhc3Mg T3V0cHV0X2RhdGFfcGx0X2FhcmNoNjRfc3RhbmRhcmQ7CisKK3RlbXBsYXRl PGludCBzaXplLCBib29sIGJpZ19lbmRpYW4+CitjbGFzcyBUYXJnZXRfYWFy Y2g2NDsKKworLy8gT3V0cHV0X2RhdGFfZ290X2FhcmNoNjQgY2xhc3MuCisK K3RlbXBsYXRlPGludCBzaXplLCBib29sIGJpZ19lbmRpYW4+CitjbGFzcyBP dXRwdXRfZGF0YV9nb3RfYWFyY2g2NCA6IHB1YmxpYyBPdXRwdXRfZGF0YV9n b3Q8c2l6ZSwgYmlnX2VuZGlhbj4KK3sKKyBwdWJsaWM6CisgIHR5cGVkZWYg dHlwZW5hbWUgZWxmY3BwOjpFbGZfdHlwZXM8c2l6ZT46OkVsZl9BZGRyIFZh bHR5cGU7CisgIE91dHB1dF9kYXRhX2dvdF9hYXJjaDY0KFN5bWJvbF90YWJs ZSogc3ltdGFiLCBMYXlvdXQqIGxheW91dCkKKyAgICA6IE91dHB1dF9kYXRh X2dvdDxzaXplLCBiaWdfZW5kaWFuPigpLCBsYXlvdXRfKGxheW91dCkKKyAg eyB9CisKKyBwcm90ZWN0ZWQ6CisgIC8vIFdyaXRlIG91dCB0aGUgR09UIHRh YmxlLgorICB2b2lkCisgIGRvX3dyaXRlKE91dHB1dF9maWxlKiBvZikgewor ICAgIC8vIFRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgR09UIGlzIHRoZSBhZGRy ZXNzIG9mIHRoZSAuZHluYW1pYyBzZWN0aW9uLgorICAgIGdvbGRfYXNzZXJ0 KHRoaXMtPmRhdGFfc2l6ZSgpID49IHNpemUgLyA4KTsKKyAgICBPdXRwdXRf c2VjdGlvbiogZHluYW1pYyA9IHRoaXMtPmxheW91dF8tPmR5bmFtaWNfc2Vj dGlvbigpOworICAgIFZhbHR5cGUgZHluYW1pY19hZGRyID0gZHluYW1pYyA9 PSBOVUxMID8gMCA6IGR5bmFtaWMtPmFkZHJlc3MoKTsKKyAgICB0aGlzLT5y ZXBsYWNlX2NvbnN0YW50KDAsIGR5bmFtaWNfYWRkcik7CisgICAgT3V0cHV0 X2RhdGFfZ290PHNpemUsIGJpZ19lbmRpYW4+Ojpkb193cml0ZShvZik7Cisg IH0KKworIHByaXZhdGU6CisgIC8vIEEgcG9pbnRlciB0byB0aGUgTGF5b3V0 IGNsYXNzLCBzbyB0aGF0IHdlIGNhbiBmaW5kIHRoZSAuZHluYW1pYworICAv LyBzZWN0aW9uIHdoZW4gd2Ugd3JpdGUgb3V0IHRoZSBHT1Qgc2VjdGlvbi4K KyAgTGF5b3V0KiBsYXlvdXRfOworfTsKKworLy8gVGhlIGFhcmNoNjQgdGFy Z2V0IGNsYXNzLgorLy8gU2VlIHRoZSBBQkkgYXQKKy8vIGh0dHA6Ly9pbmZv Y2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5paGkwMDU2 Yi9JSEkwMDU2Ql9hYWVsZjY0LnBkZgordGVtcGxhdGU8aW50IHNpemUsIGJv b2wgYmlnX2VuZGlhbj4KK2NsYXNzIFRhcmdldF9hYXJjaDY0IDogcHVibGlj IFNpemVkX3RhcmdldDxzaXplLCBiaWdfZW5kaWFuPgoreworIHB1YmxpYzoK KyAgdHlwZWRlZiBPdXRwdXRfZGF0YV9yZWxvYzxlbGZjcHA6OlNIVF9SRUxB LCB0cnVlLCBzaXplLCBiaWdfZW5kaWFuPgorICAgICAgUmVsb2Nfc2VjdGlv bjsKKyAgdHlwZWRlZiB0eXBlbmFtZSBlbGZjcHA6OkVsZl90eXBlczxzaXpl Pjo6RWxmX0FkZHIgQWRkcmVzczsKKworICBUYXJnZXRfYWFyY2g2NChjb25z dCBUYXJnZXQ6OlRhcmdldF9pbmZvKiBpbmZvID0gJmFhcmNoNjRfaW5mbykK KyAgICA6IFNpemVkX3RhcmdldDxzaXplLCBiaWdfZW5kaWFuPihpbmZvKSwK KyAgICAgIGdvdF8oTlVMTCksIHBsdF8oTlVMTCksIGdvdF9wbHRfKE5VTEwp LAorICAgICAgZ2xvYmFsX29mZnNldF90YWJsZV8oTlVMTCksIHJlbGFfZHlu XyhOVUxMKSwKKyAgICAgIGNvcHlfcmVsb2NzXyhlbGZjcHA6OlJfQUFSQ0g2 NF9DT1BZKQorICB7IH0KKworICAvLyBTY2FuIHRoZSByZWxvY2F0aW9ucyB0 byBkZXRlcm1pbmUgdW5yZWZlcmVuY2VkIHNlY3Rpb25zIGZvcgorICAvLyBn YXJiYWdlIGNvbGxlY3Rpb24uCisgIHZvaWQKKyAgZ2NfcHJvY2Vzc19yZWxv Y3MoU3ltYm9sX3RhYmxlKiBzeW10YWIsCisJCSAgICBMYXlvdXQqIGxheW91 dCwKKwkJICAgIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+ KiBvYmplY3QsCisJCSAgICB1bnNpZ25lZCBpbnQgZGF0YV9zaG5keCwKKwkJ ICAgIHVuc2lnbmVkIGludCBzaF90eXBlLAorCQkgICAgY29uc3QgdW5zaWdu ZWQgY2hhciogcHJlbG9jcywKKwkJICAgIHNpemVfdCByZWxvY19jb3VudCwK KwkJICAgIE91dHB1dF9zZWN0aW9uKiBvdXRwdXRfc2VjdGlvbiwKKwkJICAg IGJvb2wgbmVlZHNfc3BlY2lhbF9vZmZzZXRfaGFuZGxpbmcsCisJCSAgICBz aXplX3QgbG9jYWxfc3ltYm9sX2NvdW50LAorCQkgICAgY29uc3QgdW5zaWdu ZWQgY2hhciogcGxvY2FsX3N5bWJvbHMpOworCisgIC8vIFNjYW4gdGhlIHJl bG9jYXRpb25zIHRvIGxvb2sgZm9yIHN5bWJvbCBhZGp1c3RtZW50cy4KKyAg dm9pZAorICBzY2FuX3JlbG9jcyhTeW1ib2xfdGFibGUqIHN5bXRhYiwKKwkg ICAgICBMYXlvdXQqIGxheW91dCwKKwkgICAgICBTaXplZF9yZWxvYmpfZmls ZTxzaXplLCBiaWdfZW5kaWFuPiogb2JqZWN0LAorCSAgICAgIHVuc2lnbmVk IGludCBkYXRhX3NobmR4LAorCSAgICAgIHVuc2lnbmVkIGludCBzaF90eXBl LAorCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHByZWxvY3MsCisJICAg ICAgc2l6ZV90IHJlbG9jX2NvdW50LAorCSAgICAgIE91dHB1dF9zZWN0aW9u KiBvdXRwdXRfc2VjdGlvbiwKKwkgICAgICBib29sIG5lZWRzX3NwZWNpYWxf b2Zmc2V0X2hhbmRsaW5nLAorCSAgICAgIHNpemVfdCBsb2NhbF9zeW1ib2xf Y291bnQsCisJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcGxvY2FsX3N5 bWJvbHMpOworCisgIC8vIEZpbmFsaXplIHRoZSBzZWN0aW9ucy4KKyAgdm9p ZAorICBkb19maW5hbGl6ZV9zZWN0aW9ucyhMYXlvdXQqLCBjb25zdCBJbnB1 dF9vYmplY3RzKiwgU3ltYm9sX3RhYmxlKik7CisKKyAgLy8gUmVsb2NhdGUg YSBzZWN0aW9uLgorICB2b2lkCisgIHJlbG9jYXRlX3NlY3Rpb24oY29uc3Qg UmVsb2NhdGVfaW5mbzxzaXplLCBiaWdfZW5kaWFuPiosCisJCSAgIHVuc2ln bmVkIGludCBzaF90eXBlLAorCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBw cmVsb2NzLAorCQkgICBzaXplX3QgcmVsb2NfY291bnQsCisJCSAgIE91dHB1 dF9zZWN0aW9uKiBvdXRwdXRfc2VjdGlvbiwKKwkJICAgYm9vbCBuZWVkc19z cGVjaWFsX29mZnNldF9oYW5kbGluZywKKwkJICAgdW5zaWduZWQgY2hhciog dmlldywKKwkJICAgdHlwZW5hbWUgZWxmY3BwOjpFbGZfdHlwZXM8c2l6ZT46 OkVsZl9BZGRyIHZpZXdfYWRkcmVzcywKKwkJICAgc2VjdGlvbl9zaXplX3R5 cGUgdmlld19zaXplLAorCQkgICBjb25zdCBSZWxvY19zeW1ib2xfY2hhbmdl cyopOworCisgIC8vIFNjYW4gdGhlIHJlbG9jcyBkdXJpbmcgYSByZWxvY2F0 YWJsZSBsaW5rLgorICB2b2lkCisgIHNjYW5fcmVsb2NhdGFibGVfcmVsb2Nz KFN5bWJvbF90YWJsZSogc3ltdGFiLAorCQkJICBMYXlvdXQqIGxheW91dCwK KwkJCSAgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj4qIG9i amVjdCwKKwkJCSAgdW5zaWduZWQgaW50IGRhdGFfc2huZHgsCisJCQkgIHVu c2lnbmVkIGludCBzaF90eXBlLAorCQkJICBjb25zdCB1bnNpZ25lZCBjaGFy KiBwcmVsb2NzLAorCQkJICBzaXplX3QgcmVsb2NfY291bnQsCisJCQkgIE91 dHB1dF9zZWN0aW9uKiBvdXRwdXRfc2VjdGlvbiwKKwkJCSAgYm9vbCBuZWVk c19zcGVjaWFsX29mZnNldF9oYW5kbGluZywKKwkJCSAgc2l6ZV90IGxvY2Fs X3N5bWJvbF9jb3VudCwKKwkJCSAgY29uc3QgdW5zaWduZWQgY2hhciogcGxv Y2FsX3N5bWJvbHMsCisJCQkgIFJlbG9jYXRhYmxlX3JlbG9jcyopOworCisg IC8vIFJlbG9jYXRlIGEgc2VjdGlvbiBkdXJpbmcgYSByZWxvY2F0YWJsZSBs aW5rLgorICB2b2lkCisgIHJlbG9jYXRlX3JlbG9jcygKKyAgICAgIGNvbnN0 IFJlbG9jYXRlX2luZm88c2l6ZSwgYmlnX2VuZGlhbj4qLAorICAgICAgdW5z aWduZWQgaW50IHNoX3R5cGUsCisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy KiBwcmVsb2NzLAorICAgICAgc2l6ZV90IHJlbG9jX2NvdW50LAorICAgICAg T3V0cHV0X3NlY3Rpb24qIG91dHB1dF9zZWN0aW9uLAorICAgICAgdHlwZW5h bWUgZWxmY3BwOjpFbGZfdHlwZXM8c2l6ZT46OkVsZl9PZmYgb2Zmc2V0X2lu X291dHB1dF9zZWN0aW9uLAorICAgICAgY29uc3QgUmVsb2NhdGFibGVfcmVs b2NzKiwKKyAgICAgIHVuc2lnbmVkIGNoYXIqIHZpZXcsCisgICAgICB0eXBl bmFtZSBlbGZjcHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0FkZHIgdmlld19h ZGRyZXNzLAorICAgICAgc2VjdGlvbl9zaXplX3R5cGUgdmlld19zaXplLAor ICAgICAgdW5zaWduZWQgY2hhciogcmVsb2NfdmlldywKKyAgICAgIHNlY3Rp b25fc2l6ZV90eXBlIHJlbG9jX3ZpZXdfc2l6ZSk7CisKKyAgLy8gUmV0dXJu IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgUExULgorICB1bnNpZ25l ZCBpbnQKKyAgcGx0X2VudHJ5X2NvdW50KCkgY29uc3Q7CisKKyAgLy9SZXR1 cm4gdGhlIG9mZnNldCBvZiB0aGUgZmlyc3Qgbm9uLXJlc2VydmVkIFBMVCBl bnRyeS4KKyAgdW5zaWduZWQgaW50CisgIGZpcnN0X3BsdF9lbnRyeV9vZmZz ZXQoKSBjb25zdDsKKworICAvLyBSZXR1cm4gdGhlIHNpemUgb2YgZWFjaCBQ TFQgZW50cnkuCisgIHVuc2lnbmVkIGludAorICBwbHRfZW50cnlfc2l6ZSgp IGNvbnN0OworCisgcHJpdmF0ZToKKyAgLy8gVGhlIGNsYXNzIHdoaWNoIHNj YW5zIHJlbG9jYXRpb25zLgorICBjbGFzcyBTY2FuCisgIHsKKyAgcHVibGlj OgorICAgIFNjYW4oKQorICAgICAgOiBpc3N1ZWRfbm9uX3BpY19lcnJvcl8o ZmFsc2UpCisgICAgeyB9CisKKyAgICBzdGF0aWMgaW5saW5lIGludAorICAg IGdldF9yZWZlcmVuY2VfZmxhZ3ModW5zaWduZWQgaW50IHJfdHlwZSk7CisK KyAgICBpbmxpbmUgdm9pZAorICAgIGxvY2FsKFN5bWJvbF90YWJsZSogc3lt dGFiLCBMYXlvdXQqIGxheW91dCwgVGFyZ2V0X2FhcmNoNjQqIHRhcmdldCwK KwkgIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+KiBvYmpl Y3QsCisJICB1bnNpZ25lZCBpbnQgZGF0YV9zaG5keCwKKwkgIE91dHB1dF9z ZWN0aW9uKiBvdXRwdXRfc2VjdGlvbiwKKwkgIGNvbnN0IGVsZmNwcDo6UmVs YTxzaXplLCBiaWdfZW5kaWFuPiYgcmVsb2MsIHVuc2lnbmVkIGludCByX3R5 cGUsCisJICBjb25zdCBlbGZjcHA6OlN5bTxzaXplLCBiaWdfZW5kaWFuPiYg bHN5bSwKKwkgIGJvb2wgaXNfZGlzY2FyZGVkKTsKKworICAgIGlubGluZSB2 b2lkCisgICAgZ2xvYmFsKFN5bWJvbF90YWJsZSogc3ltdGFiLCBMYXlvdXQq IGxheW91dCwgVGFyZ2V0X2FhcmNoNjQqIHRhcmdldCwKKwkgICBTaXplZF9y ZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPiogb2JqZWN0LAorCSAgIHVu c2lnbmVkIGludCBkYXRhX3NobmR4LAorCSAgIE91dHB1dF9zZWN0aW9uKiBv dXRwdXRfc2VjdGlvbiwKKwkgICBjb25zdCBlbGZjcHA6OlJlbGE8c2l6ZSwg YmlnX2VuZGlhbj4mIHJlbG9jLCB1bnNpZ25lZCBpbnQgcl90eXBlLAorCSAg IFN5bWJvbCogZ3N5bSk7CisKKyAgICBpbmxpbmUgYm9vbAorICAgIGxvY2Fs X3JlbG9jX21heV9iZV9mdW5jdGlvbl9wb2ludGVyKFN5bWJvbF90YWJsZSog LCBMYXlvdXQqICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPiogLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpemVk X3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+KiAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXRfc2VjdGlvbiogLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGVsZmNwcDo6UmVsYTxzaXplLCBiaWdfZW5kaWFu PiYgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCByX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgZWxmY3BwOjpTeW08c2l6ZSwgYmln X2VuZGlhbj4mKTsKKworICAgIGlubGluZSBib29sCisgICAgZ2xvYmFsX3Jl bG9jX21heV9iZV9mdW5jdGlvbl9wb2ludGVyKFN5bWJvbF90YWJsZSogLCBM YXlvdXQqICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj4qICwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZWRf cmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj4qICwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0X3NlY3Rpb24qICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgZWxmY3BwOjpSZWxhPHNpemUsIGJpZ19lbmRp YW4+JiAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCByX3R5cGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbCogZ3N5bSk7CisKKyAgcHJp dmF0ZToKKyAgICBzdGF0aWMgdm9pZAorICAgIHVuc3VwcG9ydGVkX3JlbG9j X2xvY2FsKFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+KiwK KwkJCSAgICB1bnNpZ25lZCBpbnQgcl90eXBlKTsKKworICAgIHN0YXRpYyB2 b2lkCisgICAgdW5zdXBwb3J0ZWRfcmVsb2NfZ2xvYmFsKFNpemVkX3JlbG9i al9maWxlPHNpemUsIGJpZ19lbmRpYW4+KiwKKwkJCSAgICAgdW5zaWduZWQg aW50IHJfdHlwZSwgU3ltYm9sKik7CisKKyAgICBpbmxpbmUgYm9vbAorICAg IHBvc3NpYmxlX2Z1bmN0aW9uX3BvaW50ZXJfcmVsb2ModW5zaWduZWQgaW50 IHJfdHlwZSk7CisKKyAgICB2b2lkCisgICAgY2hlY2tfbm9uX3BpYyhSZWxv YmoqLCB1bnNpZ25lZCBpbnQgcl90eXBlKTsKKworICAgIC8vIFdoZXRoZXIg d2UgaGF2ZSBpc3N1ZWQgYW4gZXJyb3IgYWJvdXQgYSBub24tUElDIGNvbXBp bGF0aW9uLgorICAgIGJvb2wgaXNzdWVkX25vbl9waWNfZXJyb3JfOworICB9 OworCisgIC8vIFRoZSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHJlbG9jYXRp b24uCisgIGNsYXNzIFJlbG9jYXRlCisgIHsKKyAgIHB1YmxpYzoKKyAgICBS ZWxvY2F0ZSgpCisgICAgeyB9CisKKyAgICB+UmVsb2NhdGUoKQorICAgIHsg fQorCisgICAgLy8gRG8gYSByZWxvY2F0aW9uLiAgUmV0dXJuIGZhbHNlIGlm IHRoZSBjYWxsZXIgc2hvdWxkIG5vdCBpc3N1ZQorICAgIC8vIGFueSB3YXJu aW5ncyBhYm91dCB0aGlzIHJlbG9jYXRpb24uCisgICAgaW5saW5lIGJvb2wK KyAgICByZWxvY2F0ZShjb25zdCBSZWxvY2F0ZV9pbmZvPHNpemUsIGJpZ19l bmRpYW4+KiwgVGFyZ2V0X2FhcmNoNjQqLAorCSAgICAgT3V0cHV0X3NlY3Rp b24qLAorCSAgICAgc2l6ZV90IHJlbG51bSwgY29uc3QgZWxmY3BwOjpSZWxh PHNpemUsIGJpZ19lbmRpYW4+JiwKKwkgICAgIHVuc2lnbmVkIGludCByX3R5 cGUsIGNvbnN0IFNpemVkX3N5bWJvbDxzaXplPiosCisJICAgICBjb25zdCBT eW1ib2xfdmFsdWU8c2l6ZT4qLAorCSAgICAgdW5zaWduZWQgY2hhciosIHR5 cGVuYW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNpemU+OjpFbGZfQWRkciwKKwkg ICAgIHNlY3Rpb25fc2l6ZV90eXBlKTsKKworICB9OworCisgIC8vIEEgY2xh c3Mgd2hpY2ggcmV0dXJucyB0aGUgc2l6ZSByZXF1aXJlZCBmb3IgYSByZWxv Y2F0aW9uIHR5cGUsCisgIC8vIHVzZWQgd2hpbGUgc2Nhbm5pbmcgcmVsb2Nz IGR1cmluZyBhIHJlbG9jYXRhYmxlIGxpbmsuCisgIGNsYXNzIFJlbG9jYXRh YmxlX3NpemVfZm9yX3JlbG9jCisgIHsKKyAgIHB1YmxpYzoKKyAgICB1bnNp Z25lZCBpbnQKKyAgICBnZXRfc2l6ZV9mb3JfcmVsb2ModW5zaWduZWQgaW50 LCBSZWxvYmoqKTsKKyAgfTsKKworICAvLyBBZGp1c3QgVExTIHJlbG9jYXRp b24gdHlwZSBiYXNlZCBvbiB0aGUgb3B0aW9ucyBhbmQgd2hldGhlciB0aGlz CisgIC8vIGlzIGEgbG9jYWwgc3ltYm9sLgorICBzdGF0aWMgdGxzOjpUbHNf b3B0aW1pemF0aW9uCisgIG9wdGltaXplX3Rsc19yZWxvYyhib29sIGlzX2Zp bmFsLCBpbnQgcl90eXBlKTsKKworICAvLyBHZXQgdGhlIEdPVCBzZWN0aW9u LCBjcmVhdGluZyBpdCBpZiBuZWNlc3NhcnkuCisgIE91dHB1dF9kYXRhX2dv dF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+KgorICBnb3Rfc2VjdGlvbihT eW1ib2xfdGFibGUqLCBMYXlvdXQqKTsKKworICAvLyBHZXQgdGhlIEdPVCBQ TFQgc2VjdGlvbi4KKyAgT3V0cHV0X2RhdGFfc3BhY2UqCisgIGdvdF9wbHRf c2VjdGlvbigpIGNvbnN0CisgIHsKKyAgICBnb2xkX2Fzc2VydCh0aGlzLT5n b3RfcGx0XyAhPSBOVUxMKTsKKyAgICByZXR1cm4gdGhpcy0+Z290X3BsdF87 CisgIH0KKworICAvLyBDcmVhdGUgdGhlIFBMVCBzZWN0aW9uLgorICB2b2lk CisgIG1ha2VfcGx0X3NlY3Rpb24oU3ltYm9sX3RhYmxlKiBzeW10YWIsIExh eW91dCogbGF5b3V0KTsKKworICAvLyBDcmVhdGUgYSBQTFQgZW50cnkgZm9y IGEgZ2xvYmFsIHN5bWJvbC4KKyAgdm9pZAorICBtYWtlX3BsdF9lbnRyeShT eW1ib2xfdGFibGUqLCBMYXlvdXQqLCBTeW1ib2wqKTsKKworICAvLyBHZXQg dGhlIFBMVCBzZWN0aW9uLgorICBPdXRwdXRfZGF0YV9wbHRfYWFyY2g2NDxz aXplLCBiaWdfZW5kaWFuPioKKyAgcGx0X3NlY3Rpb24oKSBjb25zdAorICB7 CisgICAgZ29sZF9hc3NlcnQodGhpcy0+cGx0XyAhPSBOVUxMKTsKKyAgICBy ZXR1cm4gdGhpcy0+cGx0XzsKKyAgfQorCisgIC8vIEdldCB0aGUgZHluYW1p YyByZWxvYyBzZWN0aW9uLCBjcmVhdGluZyBpdCBpZiBuZWNlc3NhcnkuCisg IFJlbG9jX3NlY3Rpb24qCisgIHJlbGFfZHluX3NlY3Rpb24oTGF5b3V0Kik7 CisKKyAgLy8gQWRkIGEgcG90ZW50aWFsIGNvcHkgcmVsb2NhdGlvbi4KKyAg dm9pZAorICBjb3B5X3JlbG9jKFN5bWJvbF90YWJsZSogc3ltdGFiLCBMYXlv dXQqIGxheW91dCwKKwkgICAgIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJp Z19lbmRpYW4+KiBvYmplY3QsCisJICAgICB1bnNpZ25lZCBpbnQgc2huZHgs IE91dHB1dF9zZWN0aW9uKiBvdXRwdXRfc2VjdGlvbiwKKwkgICAgIFN5bWJv bCogc3ltLCBjb25zdCBlbGZjcHA6OlJlbGE8c2l6ZSwgYmlnX2VuZGlhbj4m IHJlbG9jKQorICB7CisgICAgdGhpcy0+Y29weV9yZWxvY3NfLmNvcHlfcmVs b2Moc3ltdGFiLCBsYXlvdXQsCisJCQkJICBzeW10YWItPmdldF9zaXplZF9z eW1ib2w8c2l6ZT4oc3ltKSwKKwkJCQkgIG9iamVjdCwgc2huZHgsIG91dHB1 dF9zZWN0aW9uLAorCQkJCSAgcmVsb2MsIHRoaXMtPnJlbGFfZHluX3NlY3Rp b24obGF5b3V0KSk7CisgIH0KKworICAvLyBJbmZvcm1hdGlvbiBhYm91dCB0 aGlzIHNwZWNpZmljIHRhcmdldCB3aGljaCB3ZSBwYXNzIHRvIHRoZQorICAv LyBnZW5lcmFsIFRhcmdldCBzdHJ1Y3R1cmUuCisgIHN0YXRpYyBjb25zdCBU YXJnZXQ6OlRhcmdldF9pbmZvIGFhcmNoNjRfaW5mbzsKKworICAvLyBUaGUg dHlwZXMgb2YgR09UIGVudHJpZXMgbmVlZGVkIGZvciB0aGlzIHBsYXRmb3Jt LgorICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGV4cG9zZWQgdG8gdGhlIEFCSSBp biBhbiBpbmNyZW1lbnRhbCBsaW5rLgorICAvLyBEbyBub3QgcmVudW1iZXIg ZXhpc3RpbmcgdmFsdWVzIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHZlcnNpb24K KyAgLy8gbnVtYmVyIG9mIHRoZSAuZ251X2luY3JlbWVudGFsX2lucHV0cyBz ZWN0aW9uLgorICBlbnVtIEdvdF90eXBlCisgIHsKKyAgICBHT1RfVFlQRV9T VEFOREFSRCA9IDAsICAgICAgLy8gR09UIGVudHJ5IGZvciBhIHJlZ3VsYXIg c3ltYm9sCisgICAgR09UX1RZUEVfVExTX09GRlNFVCA9IDEsICAgIC8vIEdP VCBlbnRyeSBmb3IgVExTIG9mZnNldAorICAgIEdPVF9UWVBFX1RMU19QQUlS ID0gMiwgICAgICAvLyBHT1QgZW50cnkgZm9yIFRMUyBtb2R1bGUvb2Zmc2V0 IHBhaXIKKyAgICBHT1RfVFlQRV9UTFNfREVTQyA9IDMgICAgICAgLy8gR09U IGVudHJ5IGZvciBUTFNfREVTQyBwYWlyCisgIH07CisKKyAgLy8gVGhlIEdP VCBzZWN0aW9uLgorICBPdXRwdXRfZGF0YV9nb3RfYWFyY2g2NDxzaXplLCBi aWdfZW5kaWFuPiogZ290XzsKKyAgLy8gVGhlIFBMVCBzZWN0aW9uLgorICBP dXRwdXRfZGF0YV9wbHRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPiogcGx0 XzsKKyAgLy8gVGhlIEdPVCBQTFQgc2VjdGlvbi4KKyAgT3V0cHV0X2RhdGFf c3BhY2UqIGdvdF9wbHRfOworICAvLyBUaGUgX0dMT0JBTF9PRkZTRVRfVEFC TEVfIHN5bWJvbC4KKyAgU3ltYm9sKiBnbG9iYWxfb2Zmc2V0X3RhYmxlXzsK KyAgLy8gVGhlIGR5bmFtaWMgcmVsb2Mgc2VjdGlvbi4KKyAgUmVsb2Nfc2Vj dGlvbiogcmVsYV9keW5fOworICAvLyBSZWxvY3Mgc2F2ZWQgdG8gYXZvaWQg YSBDT1BZIHJlbG9jLgorICBDb3B5X3JlbG9jczxlbGZjcHA6OlNIVF9SRUxB LCBzaXplLCBiaWdfZW5kaWFuPiBjb3B5X3JlbG9jc187Cit9OworCit0ZW1w bGF0ZTw+Citjb25zdCBUYXJnZXQ6OlRhcmdldF9pbmZvIFRhcmdldF9hYXJj aDY0PDY0LCBmYWxzZT46OmFhcmNoNjRfaW5mbyA9Cit7CisgIDY0LAkJCS8v IHNpemUKKyAgZmFsc2UsCQkvLyBpc19iaWdfZW5kaWFuCisgIGVsZmNwcDo6 RU1fQUFSQ0g2NCwJLy8gbWFjaGluZV9jb2RlCisgIGZhbHNlLAkJLy8gaGFz X21ha2Vfc3ltYm9sCisgIGZhbHNlLAkJLy8gaGFzX3Jlc29sdmUKKyAgZmFs c2UsCQkvLyBoYXNfY29kZV9maWxsCisgIHRydWUsCQkJLy8gaXNfZGVmYXVs dF9zdGFja19leGVjdXRhYmxlCisgIGZhbHNlLAkJLy8gY2FuX2ljZl9pbmxp bmVfbWVyZ2Vfc2VjdGlvbnMKKyAgJ1wwJywJCQkvLyB3cmFwX2NoYXIKKyAg Ii9saWIvbGQuc28uMSIsCS8vIHByb2dyYW0gaW50ZXJwcmV0ZXIKKyAgMHg0 MDAwMDAsCQkvLyBkZWZhdWx0X3RleHRfc2VnbWVudF9hZGRyZXNzCisgIDB4 MTAwMCwJCS8vIGFiaV9wYWdlc2l6ZSAob3ZlcnJpZGFibGUgYnkgLXogbWF4 LXBhZ2Utc2l6ZSkKKyAgMHgxMDAwLAkJLy8gY29tbW9uX3BhZ2VzaXplIChv dmVycmlkYWJsZSBieSAteiBjb21tb24tcGFnZS1zaXplKQorICBmYWxzZSwg ICAgICAgICAgICAgICAgLy8gaXNvbGF0ZV9leGVjaW5zdHIKKyAgMCwgICAg ICAgICAgICAgICAgICAgIC8vIHJvc2VnbWVudF9nYXAKKyAgZWxmY3BwOjpT SE5fVU5ERUYsCS8vIHNtYWxsX2NvbW1vbl9zaG5keAorICBlbGZjcHA6OlNI Tl9VTkRFRiwJLy8gbGFyZ2VfY29tbW9uX3NobmR4CisgIDAsCQkJLy8gc21h bGxfY29tbW9uX3NlY3Rpb25fZmxhZ3MKKyAgMCwJCQkvLyBsYXJnZV9jb21t b25fc2VjdGlvbl9mbGFncworICBOVUxMLAkJCS8vIGF0dHJpYnV0ZXNfc2Vj dGlvbgorICBOVUxMLAkJCS8vIGF0dHJpYnV0ZXNfdmVuZG9yCisgICJfc3Rh cnQiCQkvLyBlbnRyeV9zeW1ib2xfbmFtZQorfTsKKwordGVtcGxhdGU8Pgor Y29uc3QgVGFyZ2V0OjpUYXJnZXRfaW5mbyBUYXJnZXRfYWFyY2g2NDwzMiwg ZmFsc2U+OjphYXJjaDY0X2luZm8gPQoreworICAzMiwJCQkvLyBzaXplCisg IGZhbHNlLAkJLy8gaXNfYmlnX2VuZGlhbgorICBlbGZjcHA6OkVNX0FBUkNI NjQsCS8vIG1hY2hpbmVfY29kZQorICBmYWxzZSwJCS8vIGhhc19tYWtlX3N5 bWJvbAorICBmYWxzZSwJCS8vIGhhc19yZXNvbHZlCisgIGZhbHNlLAkJLy8g aGFzX2NvZGVfZmlsbAorICB0cnVlLAkJCS8vIGlzX2RlZmF1bHRfc3RhY2tf ZXhlY3V0YWJsZQorICBmYWxzZSwJCS8vIGNhbl9pY2ZfaW5saW5lX21lcmdl X3NlY3Rpb25zCisgICdcMCcsCQkJLy8gd3JhcF9jaGFyCisgICIvbGliL2xk LnNvLjEiLAkvLyBwcm9ncmFtIGludGVycHJldGVyCisgIDB4NDAwMDAwLAkJ Ly8gZGVmYXVsdF90ZXh0X3NlZ21lbnRfYWRkcmVzcworICAweDEwMDAsCQkv LyBhYmlfcGFnZXNpemUgKG92ZXJyaWRhYmxlIGJ5IC16IG1heC1wYWdlLXNp emUpCisgIDB4MTAwMCwJCS8vIGNvbW1vbl9wYWdlc2l6ZSAob3ZlcnJpZGFi bGUgYnkgLXogY29tbW9uLXBhZ2Utc2l6ZSkKKyAgZmFsc2UsICAgICAgICAg ICAgICAgIC8vIGlzb2xhdGVfZXhlY2luc3RyCisgIDAsICAgICAgICAgICAg ICAgICAgICAvLyByb3NlZ21lbnRfZ2FwCisgIGVsZmNwcDo6U0hOX1VOREVG LAkvLyBzbWFsbF9jb21tb25fc2huZHgKKyAgZWxmY3BwOjpTSE5fVU5ERUYs CS8vIGxhcmdlX2NvbW1vbl9zaG5keAorICAwLAkJCS8vIHNtYWxsX2NvbW1v bl9zZWN0aW9uX2ZsYWdzCisgIDAsCQkJLy8gbGFyZ2VfY29tbW9uX3NlY3Rp b25fZmxhZ3MKKyAgTlVMTCwJCQkvLyBhdHRyaWJ1dGVzX3NlY3Rpb24KKyAg TlVMTCwJCQkvLyBhdHRyaWJ1dGVzX3ZlbmRvcgorICAiX3N0YXJ0IgkJLy8g ZW50cnlfc3ltYm9sX25hbWUKK307CisKK3RlbXBsYXRlPD4KK2NvbnN0IFRh cmdldDo6VGFyZ2V0X2luZm8gVGFyZ2V0X2FhcmNoNjQ8NjQsIHRydWU+Ojph YXJjaDY0X2luZm8gPQoreworICA2NCwJCQkvLyBzaXplCisgIHRydWUsCQkJ Ly8gaXNfYmlnX2VuZGlhbgorICBlbGZjcHA6OkVNX0FBUkNINjQsCS8vIG1h Y2hpbmVfY29kZQorICBmYWxzZSwJCS8vIGhhc19tYWtlX3N5bWJvbAorICBm YWxzZSwJCS8vIGhhc19yZXNvbHZlCisgIGZhbHNlLAkJLy8gaGFzX2NvZGVf ZmlsbAorICB0cnVlLAkJCS8vIGlzX2RlZmF1bHRfc3RhY2tfZXhlY3V0YWJs ZQorICBmYWxzZSwJCS8vIGNhbl9pY2ZfaW5saW5lX21lcmdlX3NlY3Rpb25z CisgICdcMCcsCQkJLy8gd3JhcF9jaGFyCisgICIvbGliL2xkLnNvLjEiLAkv LyBwcm9ncmFtIGludGVycHJldGVyCisgIDB4NDAwMDAwLAkJLy8gZGVmYXVs dF90ZXh0X3NlZ21lbnRfYWRkcmVzcworICAweDEwMDAsCQkvLyBhYmlfcGFn ZXNpemUgKG92ZXJyaWRhYmxlIGJ5IC16IG1heC1wYWdlLXNpemUpCisgIDB4 MTAwMCwJCS8vIGNvbW1vbl9wYWdlc2l6ZSAob3ZlcnJpZGFibGUgYnkgLXog Y29tbW9uLXBhZ2Utc2l6ZSkKKyAgZmFsc2UsICAgICAgICAgICAgICAgIC8v IGlzb2xhdGVfZXhlY2luc3RyCisgIDAsICAgICAgICAgICAgICAgICAgICAv LyByb3NlZ21lbnRfZ2FwCisgIGVsZmNwcDo6U0hOX1VOREVGLAkvLyBzbWFs bF9jb21tb25fc2huZHgKKyAgZWxmY3BwOjpTSE5fVU5ERUYsCS8vIGxhcmdl X2NvbW1vbl9zaG5keAorICAwLAkJCS8vIHNtYWxsX2NvbW1vbl9zZWN0aW9u X2ZsYWdzCisgIDAsCQkJLy8gbGFyZ2VfY29tbW9uX3NlY3Rpb25fZmxhZ3MK KyAgTlVMTCwJCQkvLyBhdHRyaWJ1dGVzX3NlY3Rpb24KKyAgTlVMTCwJCQkv LyBhdHRyaWJ1dGVzX3ZlbmRvcgorICAiX3N0YXJ0IgkJLy8gZW50cnlfc3lt Ym9sX25hbWUKK307CisKK3RlbXBsYXRlPD4KK2NvbnN0IFRhcmdldDo6VGFy Z2V0X2luZm8gVGFyZ2V0X2FhcmNoNjQ8MzIsIHRydWU+OjphYXJjaDY0X2lu Zm8gPQoreworICAzMiwJCQkvLyBzaXplCisgIHRydWUsCQkJLy8gaXNfYmln X2VuZGlhbgorICBlbGZjcHA6OkVNX0FBUkNINjQsCS8vIG1hY2hpbmVfY29k ZQorICBmYWxzZSwJCS8vIGhhc19tYWtlX3N5bWJvbAorICBmYWxzZSwJCS8v IGhhc19yZXNvbHZlCisgIGZhbHNlLAkJLy8gaGFzX2NvZGVfZmlsbAorICB0 cnVlLAkJCS8vIGlzX2RlZmF1bHRfc3RhY2tfZXhlY3V0YWJsZQorICBmYWxz ZSwJCS8vIGNhbl9pY2ZfaW5saW5lX21lcmdlX3NlY3Rpb25zCisgICdcMCcs CQkJLy8gd3JhcF9jaGFyCisgICIvbGliL2xkLnNvLjEiLAkvLyBwcm9ncmFt IGludGVycHJldGVyCisgIDB4NDAwMDAwLAkJLy8gZGVmYXVsdF90ZXh0X3Nl Z21lbnRfYWRkcmVzcworICAweDEwMDAsCQkvLyBhYmlfcGFnZXNpemUgKG92 ZXJyaWRhYmxlIGJ5IC16IG1heC1wYWdlLXNpemUpCisgIDB4MTAwMCwJCS8v IGNvbW1vbl9wYWdlc2l6ZSAob3ZlcnJpZGFibGUgYnkgLXogY29tbW9uLXBh Z2Utc2l6ZSkKKyAgZmFsc2UsICAgICAgICAgICAgICAgIC8vIGlzb2xhdGVf ZXhlY2luc3RyCisgIDAsICAgICAgICAgICAgICAgICAgICAvLyByb3NlZ21l bnRfZ2FwCisgIGVsZmNwcDo6U0hOX1VOREVGLAkvLyBzbWFsbF9jb21tb25f c2huZHgKKyAgZWxmY3BwOjpTSE5fVU5ERUYsCS8vIGxhcmdlX2NvbW1vbl9z aG5keAorICAwLAkJCS8vIHNtYWxsX2NvbW1vbl9zZWN0aW9uX2ZsYWdzCisg IDAsCQkJLy8gbGFyZ2VfY29tbW9uX3NlY3Rpb25fZmxhZ3MKKyAgTlVMTCwJ CQkvLyBhdHRyaWJ1dGVzX3NlY3Rpb24KKyAgTlVMTCwJCQkvLyBhdHRyaWJ1 dGVzX3ZlbmRvcgorICAiX3N0YXJ0IgkJLy8gZW50cnlfc3ltYm9sX25hbWUK K307CisKKy8vIEdldCB0aGUgR09UIHNlY3Rpb24sIGNyZWF0aW5nIGl0IGlm IG5lY2Vzc2FyeS4KKwordGVtcGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2Vu ZGlhbj4KK091dHB1dF9kYXRhX2dvdF9hYXJjaDY0PHNpemUsIGJpZ19lbmRp YW4+KgorVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OmdvdF9z ZWN0aW9uKFN5bWJvbF90YWJsZSogc3ltdGFiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dCogbGF5b3V0 KQoreworICBpZiAodGhpcy0+Z290XyA9PSBOVUxMKQorICAgIHsKKyAgICAg IGdvbGRfYXNzZXJ0KHN5bXRhYiAhPSBOVUxMICYmIGxheW91dCAhPSBOVUxM KTsKKworICAgICAgLy8gV2hlbiB1c2luZyAteiBub3csIHdlIGNhbiB0cmVh dCAuZ290LnBsdCBhcyBhIHJlbHJvIHNlY3Rpb24uCisgICAgICAvLyBXaXRo b3V0IC16IG5vdywgaXQgaXMgbW9kaWZpZWQgYWZ0ZXIgcHJvZ3JhbSBzdGFy dHVwIGJ5IGxhenkKKyAgICAgIC8vIFBMVCByZWxvY2F0aW9ucy4KKyAgICAg IGJvb2wgaXNfZ290X3BsdF9yZWxybyA9IHBhcmFtZXRlcnMtPm9wdGlvbnMo KS5ub3coKTsKKyAgICAgIE91dHB1dF9zZWN0aW9uX29yZGVyIGdvdF9vcmRl ciA9IChpc19nb3RfcGx0X3JlbHJvCisJCQkJCT8gT1JERVJfUkVMUk8KKwkJ CQkJOiBPUkRFUl9SRUxST19MQVNUKTsKKyAgICAgIE91dHB1dF9zZWN0aW9u X29yZGVyIGdvdF9wbHRfb3JkZXIgPSAoaXNfZ290X3BsdF9yZWxybworCQkJ CQkgICAgPyBPUkRFUl9SRUxSTworCQkJCQkgICAgOiBPUkRFUl9OT05fUkVM Uk9fRklSU1QpOworCisgICAgICAvLyBMYXlvdXQgb2YgLmdvdCBhbmQgLmdv dC5wbHQgc2VjdGlvbnMuCisgICAgICAvLyAuZ290WzBdICZfRFlOQU1JQyAg ICAgICAgICAgICAgICAgICAgICAgICAgPC1fR0xPQkFMX09GRlNFVF9UQUJM RV8KKyAgICAgIC8vIC4uLgorICAgICAgLy8gLmdvdHBsdFswXSByZXNlcnZl ZCBmb3IgbGQuc28gKCZsaW5rbWFwKSAgIDwtLURUX1BMVEdPVAorICAgICAg Ly8gLmdvdHBsdFsxXSByZXNlcnZlZCBmb3IgbGQuc28gKHJlc29sdmVyKQor ICAgICAgLy8gLmdvdHBsdFsyXSByZXNlcnZlZAorCisgICAgICAvLyBHZW5l cmF0ZSAuZ290IHNlY3Rpb24uCisgICAgICB0aGlzLT5nb3RfID0gbmV3IE91 dHB1dF9kYXRhX2dvdF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+KHN5bXRh YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0KTsKKyAgICAgIGxheW91 dC0+YWRkX291dHB1dF9zZWN0aW9uX2RhdGEoIi5nb3QiLCBlbGZjcHA6OlNI VF9QUk9HQklUUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGVsZmNwcDo6U0hGX0FMTE9DIHwgZWxmY3BwOjpTSEZfV1JJVEUp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz LT5nb3RfLCBnb3Rfb3JkZXIsIHRydWUpOworICAgICAgLy8gVGhlIGZpcnN0 IHdvcmQgb2YgR09UIGlzIHJlc2VydmVkIGZvciB0aGUgYWRkcmVzcyBvZiAu ZHluYW1pYy4KKyAgICAgIC8vIFdlIHB1dCAwIGhlcmUgbm93LiBUaGUgdmFs dWUgd2lsbCBiZSByZXBsYWNlZCBsYXRlciBpbgorICAgICAgLy8gT3V0cHV0 X2RhdGFfZ290X2FhcmNoNjQ6OmRvX3dyaXRlLgorICAgICAgdGhpcy0+Z290 Xy0+YWRkX2NvbnN0YW50KDApOworCisgICAgICAvLyBEZWZpbmUgX0dMT0JB TF9PRkZTRVRfVEFCTEVfIGF0IHRoZSBzdGFydCBvZiB0aGUgUExULgorICAg ICAgLy8gX0dMT0JBTF9PRkZTRVRfVEFCTEVfIHZhbHVlIHBvaW50cyB0byB0 aGUgc3RhcnQgb2YgdGhlIC5nb3Qgc2VjdGlvbiwKKyAgICAgIC8vIGV2ZW4g aWYgdGhlcmUgaXMgYSAuZ290LnBsdCBzZWN0aW9uLgorICAgICAgdGhpcy0+ Z2xvYmFsX29mZnNldF90YWJsZV8gPQorICAgICAgICBzeW10YWItPmRlZmlu ZV9pbl9vdXRwdXRfZGF0YSgiX0dMT0JBTF9PRkZTRVRfVEFCTEVfIiwgTlVM TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lt Ym9sX3RhYmxlOjpQUkVERUZJTkVELAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGlzLT5nb3RfLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBlbGZjcHA6OlNUVF9PQkpF Q1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs ZmNwcDo6U1RCX0xPQ0FMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlbGZjcHA6OlNUVl9ISURERU4sIDAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBmYWxzZSk7CisK KyAgICAgIC8vIEdlbmVyYXRlIC5nb3QucGx0IHNlY3Rpb24uCisgICAgICB0 aGlzLT5nb3RfcGx0XyA9IG5ldyBPdXRwdXRfZGF0YV9zcGFjZShzaXplIC8g OCwgIioqIEdPVCBQTFQiKTsKKyAgICAgIGxheW91dC0+YWRkX291dHB1dF9z ZWN0aW9uX2RhdGEoIi5nb3QucGx0IiwgZWxmY3BwOjpTSFRfUFJPR0JJVFMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbGZj cHA6OlNIRl9BTExPQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCBlbGZjcHA6OlNIRl9XUklURSksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdvdF9wbHRfLCBnb3Rf cGx0X29yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpc19nb3RfcGx0X3JlbHJvKTsKKworICAgICAgLy8gVGhlIGZpcnN0 IHRocmVlIGVudHJpZXMgYXJlIHJlc2VydmVkLgorICAgICAgdGhpcy0+Z290 X3BsdF8tPnNldF9jdXJyZW50X2RhdGFfc2l6ZQorICAgICAgICAgIChBQVJD SDY0X0dPVFBMVF9SRVNFUlZFX0NPVU5UICogKHNpemUgLyA4KSk7CisKKyAg ICAgIGlmICghaXNfZ290X3BsdF9yZWxybykKKyAgICAgICAgeworICAgICAg ICAgIC8vIFRob3NlIGJ5dGVzIGNhbiBnbyBpbnRvIHRoZSByZWxybyBzZWdt ZW50LgorICAgICAgICAgIGxheW91dC0+aW5jcmVhc2VfcmVscm8KKyAgICAg ICAgICAgICAgKEFBUkNINjRfR09UUExUX1JFU0VSVkVfQ09VTlQgKiAoc2l6 ZSAvIDgpKTsKKyAgICAgICAgfQorCisgICAgfQorICByZXR1cm4gdGhpcy0+ Z290XzsKK30KKworLy8gR2V0IHRoZSBkeW5hbWljIHJlbG9jIHNlY3Rpb24s IGNyZWF0aW5nIGl0IGlmIG5lY2Vzc2FyeS4KKwordGVtcGxhdGU8aW50IHNp emUsIGJvb2wgYmlnX2VuZGlhbj4KK3R5cGVuYW1lIFRhcmdldF9hYXJjaDY0 PHNpemUsIGJpZ19lbmRpYW4+OjpSZWxvY19zZWN0aW9uKgorVGFyZ2V0X2Fh cmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OnJlbGFfZHluX3NlY3Rpb24oTGF5 b3V0KiBsYXlvdXQpCit7CisgIGlmICh0aGlzLT5yZWxhX2R5bl8gPT0gTlVM TCkKKyAgICB7CisgICAgICBnb2xkX2Fzc2VydChsYXlvdXQgIT0gTlVMTCk7 CisgICAgICB0aGlzLT5yZWxhX2R5bl8gPSBuZXcgUmVsb2Nfc2VjdGlvbihw YXJhbWV0ZXJzLT5vcHRpb25zKCkuY29tYnJlbG9jKCkpOworICAgICAgbGF5 b3V0LT5hZGRfb3V0cHV0X3NlY3Rpb25fZGF0YSgiLnJlbGEuZHluIiwgZWxm Y3BwOjpTSFRfUkVMQSwKKwkJCQkgICAgICBlbGZjcHA6OlNIRl9BTExPQywg dGhpcy0+cmVsYV9keW5fLAorCQkJCSAgICAgIE9SREVSX0RZTkFNSUNfUkVM T0NTLCBmYWxzZSk7CisgICAgfQorICByZXR1cm4gdGhpcy0+cmVsYV9keW5f OworfQorCisvLyBBIGNsYXNzIHRvIGhhbmRsZSB0aGUgUExUIGRhdGEuCisv LyBUaGlzIGlzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgdGhhdCBoYW5kbGVz IG1vc3Qgb2YgdGhlIGxpbmtlciBkZXRhaWxzCisvLyBidXQgZG9lcyBub3Qg a25vdyB0aGUgYWN0dWFsIGNvbnRlbnRzIG9mIFBMVCBlbnRyaWVzLiAgVGhl IGRlcml2ZWQKKy8vIGNsYXNzZXMgYmVsb3cgZmlsbCBpbiB0aG9zZSBkZXRh aWxzLgorCit0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgor Y2xhc3MgT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjQgOiBwdWJsaWMgT3V0cHV0 X3NlY3Rpb25fZGF0YQoreworIHB1YmxpYzoKKyAgdHlwZWRlZiBPdXRwdXRf ZGF0YV9yZWxvYzxlbGZjcHA6OlNIVF9SRUxBLCB0cnVlLCBzaXplLCBiaWdf ZW5kaWFuPgorICAgICAgUmVsb2Nfc2VjdGlvbjsKKyAgdHlwZWRlZiB0eXBl bmFtZSBlbGZjcHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0FkZHIgQWRkcmVz czsKKworICBPdXRwdXRfZGF0YV9wbHRfYWFyY2g2NChMYXlvdXQqIGxheW91 dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgYWRkcmFs aWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRfZGF0YV9z cGFjZSogZ290X3BsdCkKKyAgICA6IE91dHB1dF9zZWN0aW9uX2RhdGEoYWRk cmFsaWduKSwKKyAgICAgIGdvdF9wbHRfKGdvdF9wbHQpLAorICAgICAgY291 bnRfKDApCisgIHsgdGhpcy0+aW5pdChsYXlvdXQpOyB9CisKKyAgLy8gSW5p dGlhbGl6ZSB0aGUgUExUIHNlY3Rpb24uCisgIHZvaWQKKyAgaW5pdChMYXlv dXQqIGxheW91dCk7CisKKyAgLy8gQWRkIGFuIGVudHJ5IHRvIHRoZSBQTFQu CisgIHZvaWQKKyAgYWRkX2VudHJ5KFN5bWJvbCogZ3N5bSk7CisKKyAgLy8g UmV0dXJuIHRoZSAucmVsYS5wbHQgc2VjdGlvbiBkYXRhLgorICBSZWxvY19z ZWN0aW9uKgorICByZWxhX3BsdCgpCisgIHsgcmV0dXJuIHRoaXMtPnJlbF87 IH0KKworICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBQTFQgZW50cmllcy4K KyAgdW5zaWduZWQgaW50CisgIGVudHJ5X2NvdW50KCkgY29uc3QKKyAgeyBy ZXR1cm4gdGhpcy0+Y291bnRfOyB9CisKKyAgLy8gUmV0dXJuIHRoZSBvZmZz ZXQgb2YgdGhlIGZpcnN0IG5vbi1yZXNlcnZlZCBQTFQgZW50cnkuCisgIHVu c2lnbmVkIGludAorICBmaXJzdF9wbHRfZW50cnlfb2Zmc2V0KCkKKyAgeyBy ZXR1cm4gdGhpcy0+ZG9fZmlyc3RfcGx0X2VudHJ5X29mZnNldCgpOyB9CisK KyAgLy8gUmV0dXJuIHRoZSBzaXplIG9mIGEgUExUIGVudHJ5LgorICB1bnNp Z25lZCBpbnQKKyAgZ2V0X3BsdF9lbnRyeV9zaXplKCkgY29uc3QKKyAgeyBy ZXR1cm4gdGhpcy0+ZG9fZ2V0X3BsdF9lbnRyeV9zaXplKCk7IH0KKworIHBy b3RlY3RlZDoKKyAgLy8gRmlsbCBpbiB0aGUgZmlyc3QgUExUIGVudHJ5Lgor ICB2b2lkCisgIGZpbGxfZmlyc3RfcGx0X2VudHJ5KHVuc2lnbmVkIGNoYXIq IHBvdiwKKwkJICAgICAgIEFkZHJlc3MgZ290X2FkZHJlc3MsCisJCSAgICAg ICBBZGRyZXNzIHBsdF9hZGRyZXNzKQorICB7IHRoaXMtPmRvX2ZpbGxfZmly c3RfcGx0X2VudHJ5KHBvdiwgZ290X2FkZHJlc3MsIHBsdF9hZGRyZXNzKTsg fQorCisgIC8vIEZpbGwgaW4gYSBub3JtYWwgUExUIGVudHJ5LgorICB2b2lk CisgIGZpbGxfcGx0X2VudHJ5KHVuc2lnbmVkIGNoYXIqIHBvdiwKKwkJIEFk ZHJlc3MgZ290X2FkZHJlc3MsCisJCSBBZGRyZXNzIHBsdF9hZGRyZXNzLAor CQkgdW5zaWduZWQgaW50IGdvdF9vZmZzZXQsCisJCSB1bnNpZ25lZCBpbnQg cGx0X29mZnNldCkKKyAgeworICAgIHRoaXMtPmRvX2ZpbGxfcGx0X2VudHJ5 KHBvdiwgZ290X2FkZHJlc3MsIHBsdF9hZGRyZXNzLAorCQkJICAgIGdvdF9v ZmZzZXQsIHBsdF9vZmZzZXQpOworICB9CisKKyAgdmlydHVhbCB1bnNpZ25l ZCBpbnQKKyAgZG9fZmlyc3RfcGx0X2VudHJ5X29mZnNldCgpIGNvbnN0ID0g MDsKKworICB2aXJ0dWFsIHVuc2lnbmVkIGludAorICBkb19nZXRfcGx0X2Vu dHJ5X3NpemUoKSBjb25zdCA9IDA7CisKKyAgdmlydHVhbCB2b2lkCisgIGRv X2ZpbGxfZmlyc3RfcGx0X2VudHJ5KHVuc2lnbmVkIGNoYXIqIHBvdiwKKwkJ CSAgQWRkcmVzcyBnb3RfYWRkciwKKwkJCSAgQWRkcmVzcyBwbHRfYWRkcikg PSAwOworCisgIHZpcnR1YWwgdm9pZAorICBkb19maWxsX3BsdF9lbnRyeSh1 bnNpZ25lZCBjaGFyKiBwb3YsCisJCSAgICBBZGRyZXNzIGdvdF9hZGRyZXNz LAorCQkgICAgQWRkcmVzcyBwbHRfYWRkcmVzcywKKwkJICAgIHVuc2lnbmVk IGludCBnb3Rfb2Zmc2V0LAorCQkgICAgdW5zaWduZWQgaW50IHBsdF9vZmZz ZXQpID0gMDsKKworICB2b2lkCisgIGRvX2FkanVzdF9vdXRwdXRfc2VjdGlv bihPdXRwdXRfc2VjdGlvbiogb3MpOworCisgIC8vIFdyaXRlIHRvIGEgbWFw IGZpbGUuCisgIHZvaWQKKyAgZG9fcHJpbnRfdG9fbWFwZmlsZShNYXBmaWxl KiBtYXBmaWxlKSBjb25zdAorICB7IG1hcGZpbGUtPnByaW50X291dHB1dF9k YXRhKHRoaXMsIF8oIioqIFBMVCIpKTsgfQorCisgcHJpdmF0ZToKKyAgLy8g U2V0IHRoZSBmaW5hbCBzaXplLgorICB2b2lkCisgIHNldF9maW5hbF9kYXRh X3NpemUoKTsKKworICAvLyBXcml0ZSBvdXQgdGhlIFBMVCBkYXRhLgorICB2 b2lkCisgIGRvX3dyaXRlKE91dHB1dF9maWxlKik7CisKKyAgLy8gVGhlIHJl bG9jIHNlY3Rpb24uCisgIFJlbG9jX3NlY3Rpb24qIHJlbF87CisgIC8vIFRo ZSAuZ290IHNlY3Rpb24uCisgIE91dHB1dF9kYXRhX2dvdF9hYXJjaDY0PHNp emUsIGJpZ19lbmRpYW4+KiBnb3RfOworICAvLyBUaGUgLmdvdC5wbHQgc2Vj dGlvbi4KKyAgT3V0cHV0X2RhdGFfc3BhY2UqIGdvdF9wbHRfOworICAvLyBU aGUgbnVtYmVyIG9mIFBMVCBlbnRyaWVzLgorICB1bnNpZ25lZCBpbnQgY291 bnRfOworfTsKKworLy8gSW5pdGlhbGl6ZSB0aGUgUExUIHNlY3Rpb24uCisK K3RlbXBsYXRlPGludCBzaXplLCBib29sIGJpZ19lbmRpYW4+Cit2b2lkCitP dXRwdXRfZGF0YV9wbHRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6aW5p dChMYXlvdXQqIGxheW91dCkKK3sKKyAgdGhpcy0+cmVsXyA9IG5ldyBSZWxv Y19zZWN0aW9uKGZhbHNlKTsKKyAgbGF5b3V0LT5hZGRfb3V0cHV0X3NlY3Rp b25fZGF0YSgiLnJlbGEucGx0IiwgZWxmY3BwOjpTSFRfUkVMQSwKKwkJCQkg IGVsZmNwcDo6U0hGX0FMTE9DLCB0aGlzLT5yZWxfLAorCQkJCSAgT1JERVJf RFlOQU1JQ19QTFRfUkVMT0NTLCBmYWxzZSk7Cit9CisKK3RlbXBsYXRlPGlu dCBzaXplLCBib29sIGJpZ19lbmRpYW4+Cit2b2lkCitPdXRwdXRfZGF0YV9w bHRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fYWRqdXN0X291dHB1 dF9zZWN0aW9uKAorICAgIE91dHB1dF9zZWN0aW9uKiBvcykKK3sKKyAgb3Mt PnNldF9lbnRzaXplKHRoaXMtPmdldF9wbHRfZW50cnlfc2l6ZSgpKTsKK30K KworLy8gQWRkIGFuIGVudHJ5IHRvIHRoZSBQTFQuCisKK3RlbXBsYXRlPGlu dCBzaXplLCBib29sIGJpZ19lbmRpYW4+Cit2b2lkCitPdXRwdXRfZGF0YV9w bHRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6YWRkX2VudHJ5KFN5bWJv bCogZ3N5bSkKK3sKKyAgZ29sZF9hc3NlcnQoIWdzeW0tPmhhc19wbHRfb2Zm c2V0KCkpOworICAvL1RPRE8KK30KKworLy8gU2V0IHRoZSBmaW5hbCBzaXpl LgordGVtcGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KK3ZvaWQK K091dHB1dF9kYXRhX3BsdF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+Ojpz ZXRfZmluYWxfZGF0YV9zaXplKCkKK3sKKyAgdGhpcy0+c2V0X2RhdGFfc2l6 ZSh0aGlzLT5maXJzdF9wbHRfZW50cnlfb2Zmc2V0KCkKKyAgICAgICAgICAg ICAgICAgICAgICArIHRoaXMtPmNvdW50ICogdGhpcy0+Z2V0X3BsdF9lbnRy eV9zaXplKCkpOworfQorCit0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdf ZW5kaWFuPgorY2xhc3MgT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjRfc3RhbmRh cmQgOgorICBwdWJsaWMgT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjQ8c2l6ZSwg YmlnX2VuZGlhbj4KK3sKKyBwdWJsaWM6CisgIHR5cGVkZWYgdHlwZW5hbWUg ZWxmY3BwOjpFbGZfdHlwZXM8c2l6ZT46OkVsZl9BZGRyIEFkZHJlc3M7Cisg IE91dHB1dF9kYXRhX3BsdF9hYXJjaDY0X3N0YW5kYXJkKExheW91dCogbGF5 b3V0LCBPdXRwdXRfZGF0YV9zcGFjZSogZ290X3BsdCkKKyAgICA6IE91dHB1 dF9kYXRhX3BsdF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+KGxheW91dCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemUgPT0gMzIgPyA0IDogOCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9wbHQpCisgIHsgfQor CisgcHJvdGVjdGVkOgorICAvLyBSZXR1cm4gdGhlIG9mZnNldCBvZiB0aGUg Zmlyc3Qgbm9uLXJlc2VydmVkIFBMVCBlbnRyeS4KKyAgdmlydHVhbCB1bnNp Z25lZCBpbnQKKyAgZG9fZmlyc3RfcGx0X2VudHJ5X29mZnNldCgpIGNvbnN0 CisgIHsgcmV0dXJuIHRoaXMtPmZpcnN0X3BsdF9lbnRyeV9zaXplOyB9CisK KyAgLy8gUmV0dXJuIHRoZSBzaXplIG9mIGEgUExUIGVudHJ5CisgIHZpcnR1 YWwgdW5zaWduZWQgaW50CisgIGRvX2dldF9wbHRfZW50cnlfc2l6ZSgpIGNv bnN0CisgIHsgcmV0dXJuIHRoaXMtPnBsdF9lbnRyeV9zaXplOyB9CisKKyAg dmlydHVhbCB2b2lkCisgIGRvX2ZpbGxfZmlyc3RfcGx0X2VudHJ5KHVuc2ln bmVkIGNoYXIqIHBvdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQWRk cmVzcyBnb3RfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg QWRkcmVzcyBwbHRfYWRkcmVzcyk7CisKKyAgdmlydHVhbCB2b2lkCisgIGRv X2ZpbGxfcGx0X2VudHJ5KHVuc2lnbmVkIGNoYXIqIHBvdiwKKyAgICAgICAg ICAgICAgICAgICAgQWRkcmVzcyBnb3RfYWRkcmVzcywKKyAgICAgICAgICAg ICAgICAgICAgQWRkcmVzcyBwbHRfYWRkcmVzcywKKyAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IGdvdF9vZmZzZXQsCisgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBwbHRfb2Zmc2V0KTsKKworIHByaXZhdGU6 CisgIC8vIFRoZSBzaXplIG9mIHRoZSBmaXJzdCBwbHQgZW50cnkgc2l6ZS4K KyAgc3RhdGljIGNvbnN0IGludCBmaXJzdF9wbHRfZW50cnlfc2l6ZSA9IDMy OworICAvLyBUaGUgc2l6ZSBvZiB0aGUgcGx0IGVudHJ5IHNpemUuCisgIHN0 YXRpYyBjb25zdCBpbnQgcGx0X2VudHJ5X3NpemUgPSAxNjsKKyAgLy8gVGVt cGxhdGUgZm9yIHRoZSBmaXJzdCBQTFQgZW50cnkuCisgIHN0YXRpYyBjb25z dCB1aW50MzJfdCBmaXJzdF9wbHRfZW50cnlbZmlyc3RfcGx0X2VudHJ5X3Np emUgLyA0XTsKKyAgLy8gVGVtcGxhdGUgZm9yIHN1YnNlcXVlbnQgUExUIGVu dHJpZXMuCisgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBwbHRfZW50cnlbcGx0 X2VudHJ5X3NpemUgLyA0XTsKK307CisKKy8vIFRoZSBmaXJzdCBlbnRyeSBp biB0aGUgUExUIGZvciBhbiBleGVjdXRhYmxlLgorCit0ZW1wbGF0ZTw+Citj b25zdCB1aW50MzJfdAorT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjRfc3RhbmRh cmQ8MzIsIGZhbHNlPjo6CisgICAgZmlyc3RfcGx0X2VudHJ5W2ZpcnN0X3Bs dF9lbnRyeV9zaXplIC8gNF0gPQoreworICAweGE5YmY3YmYwLAkvKiBzdHAg eDE2LCB4MzAsIFtzcCwgIy0xNl0hICAqLworICAweDkwMDAwMDEwLAkvKiBh ZHJwIHgxNiwgUExUX0dPVCsweDggICovCisgIDB4Yjk0MDBBMTEsCS8qIGxk ciB3MTcsIFt4MTYsICNQTFRfR09UKzB4OF0gICovCisgIDB4MTEwMDIyMTAs CS8qIGFkZCB3MTYsIHcxNiwjUExUX0dPVCsweDggICAqLworICAweGQ2MWYw MjIwLAkvKiBiciB4MTcgICovCisgIDB4ZDUwMzIwMWYsCS8qIG5vcCAqLwor ICAweGQ1MDMyMDFmLAkvKiBub3AgKi8KKyAgMHhkNTAzMjAxZiwJLyogbm9w ICovCit9OworCit0ZW1wbGF0ZTw+Citjb25zdCB1aW50MzJfdAorT3V0cHV0 X2RhdGFfcGx0X2FhcmNoNjRfc3RhbmRhcmQ8MzIsIHRydWU+OjoKKyAgICBm aXJzdF9wbHRfZW50cnlbZmlyc3RfcGx0X2VudHJ5X3NpemUgLyA0XSA9Cit7 CisgIDB4YTliZjdiZjAsCS8qIHN0cCB4MTYsIHgzMCwgW3NwLCAjLTE2XSEg ICovCisgIDB4OTAwMDAwMTAsCS8qIGFkcnAgeDE2LCBQTFRfR09UKzB4OCAg Ki8KKyAgMHhiOTQwMEExMSwJLyogbGRyIHcxNywgW3gxNiwgI1BMVF9HT1Qr MHg4XSAgKi8KKyAgMHgxMTAwMjIxMCwJLyogYWRkIHcxNiwgdzE2LCNQTFRf R09UKzB4OCAgICovCisgIDB4ZDYxZjAyMjAsCS8qIGJyIHgxNyAgKi8KKyAg MHhkNTAzMjAxZiwJLyogbm9wICovCisgIDB4ZDUwMzIwMWYsCS8qIG5vcCAq LworICAweGQ1MDMyMDFmLAkvKiBub3AgKi8KK307CisKK3RlbXBsYXRlPD4K K2NvbnN0IHVpbnQzMl90CitPdXRwdXRfZGF0YV9wbHRfYWFyY2g2NF9zdGFu ZGFyZDw2NCwgZmFsc2U+OjoKKyAgICBmaXJzdF9wbHRfZW50cnlbZmlyc3Rf cGx0X2VudHJ5X3NpemUgLyA0XSA9Cit7CisgIDB4YTliZjdiZjAsCS8qIHN0 cCB4MTYsIHgzMCwgW3NwLCAjLTE2XSEgICovCisgIDB4OTAwMDAwMTAsCS8q IGFkcnAgeDE2LCBQTFRfR09UKzE2ICAqLworICAweGY5NDAwQTExLAkvKiBs ZHIgeDE3LCBbeDE2LCAjUExUX0dPVCsweDEwXSAgKi8KKyAgMHg5MTAwNDIx MCwJLyogYWRkIHgxNiwgeDE2LCNQTFRfR09UKzB4MTAgICAqLworICAweGQ2 MWYwMjIwLAkvKiBiciB4MTcgICovCisgIDB4ZDUwMzIwMWYsCS8qIG5vcCAq LworICAweGQ1MDMyMDFmLAkvKiBub3AgKi8KKyAgMHhkNTAzMjAxZiwJLyog bm9wICovCit9OworCit0ZW1wbGF0ZTw+Citjb25zdCB1aW50MzJfdAorT3V0 cHV0X2RhdGFfcGx0X2FhcmNoNjRfc3RhbmRhcmQ8NjQsIHRydWU+OjoKKyAg ICBmaXJzdF9wbHRfZW50cnlbZmlyc3RfcGx0X2VudHJ5X3NpemUgLyA0XSA9 Cit7CisgIDB4YTliZjdiZjAsCS8qIHN0cCB4MTYsIHgzMCwgW3NwLCAjLTE2 XSEgICovCisgIDB4OTAwMDAwMTAsCS8qIGFkcnAgeDE2LCBQTFRfR09UKzE2 ICAqLworICAweGY5NDAwQTExLAkvKiBsZHIgeDE3LCBbeDE2LCAjUExUX0dP VCsweDEwXSAgKi8KKyAgMHg5MTAwNDIxMCwJLyogYWRkIHgxNiwgeDE2LCNQ TFRfR09UKzB4MTAgICAqLworICAweGQ2MWYwMjIwLAkvKiBiciB4MTcgICov CisgIDB4ZDUwMzIwMWYsCS8qIG5vcCAqLworICAweGQ1MDMyMDFmLAkvKiBu b3AgKi8KKyAgMHhkNTAzMjAxZiwJLyogbm9wICovCit9OworCit0ZW1wbGF0 ZTw+Citjb25zdCB1aW50MzJfdAorT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjRf c3RhbmRhcmQ8MzIsIGZhbHNlPjo6CisgICAgcGx0X2VudHJ5W3BsdF9lbnRy eV9zaXplIC8gNF0gPQoreworICAweDkwMDAwMDEwLAkvKiBhZHJwIHgxNiwg UExUR09UICsgbiAqIDQgICovCisgIDB4Yjk0MDAyMTEsCS8qIGxkciB3MTcs IFt3MTYsIFBMVEdPVCArIG4gKiA0XSAqLworICAweDExMDAwMjEwLAkvKiBh ZGQgdzE2LCB3MTYsIDpsbzEyOlBMVEdPVCArIG4gKiA0ICAqLworICAweGQ2 MWYwMjIwLAkvKiBiciB4MTcuICAqLworfTsKKwordGVtcGxhdGU8PgorY29u c3QgdWludDMyX3QKK091dHB1dF9kYXRhX3BsdF9hYXJjaDY0X3N0YW5kYXJk PDMyLCB0cnVlPjo6CisgICAgcGx0X2VudHJ5W3BsdF9lbnRyeV9zaXplIC8g NF0gPQoreworICAweDkwMDAwMDEwLAkvKiBhZHJwIHgxNiwgUExUR09UICsg biAqIDQgICovCisgIDB4Yjk0MDAyMTEsCS8qIGxkciB3MTcsIFt3MTYsIFBM VEdPVCArIG4gKiA0XSAqLworICAweDExMDAwMjEwLAkvKiBhZGQgdzE2LCB3 MTYsIDpsbzEyOlBMVEdPVCArIG4gKiA0ICAqLworICAweGQ2MWYwMjIwLAkv KiBiciB4MTcuICAqLworfTsKKwordGVtcGxhdGU8PgorY29uc3QgdWludDMy X3QKK091dHB1dF9kYXRhX3BsdF9hYXJjaDY0X3N0YW5kYXJkPDY0LCBmYWxz ZT46OgorICAgIHBsdF9lbnRyeVtwbHRfZW50cnlfc2l6ZSAvIDRdID0KK3sK KyAgMHg5MDAwMDAxMCwJLyogYWRycCB4MTYsIFBMVEdPVCArIG4gKiA4ICAq LworICAweGY5NDAwMjExLAkvKiBsZHIgeDE3LCBbeDE2LCBQTFRHT1QgKyBu ICogOF0gKi8KKyAgMHg5MTAwMDIxMCwJLyogYWRkIHgxNiwgeDE2LCA6bG8x MjpQTFRHT1QgKyBuICogOCAgKi8KKyAgMHhkNjFmMDIyMCwJLyogYnIgeDE3 LiAgKi8KK307CisKK3RlbXBsYXRlPD4KK2NvbnN0IHVpbnQzMl90CitPdXRw dXRfZGF0YV9wbHRfYWFyY2g2NF9zdGFuZGFyZDw2NCwgdHJ1ZT46OgorICAg IHBsdF9lbnRyeVtwbHRfZW50cnlfc2l6ZSAvIDRdID0KK3sKKyAgMHg5MDAw MDAxMCwJLyogYWRycCB4MTYsIFBMVEdPVCArIG4gKiA4ICAqLworICAweGY5 NDAwMjExLAkvKiBsZHIgeDE3LCBbeDE2LCBQTFRHT1QgKyBuICogOF0gKi8K KyAgMHg5MTAwMDIxMCwJLyogYWRkIHgxNiwgeDE2LCA6bG8xMjpQTFRHT1Qg KyBuICogOCAgKi8KKyAgMHhkNjFmMDIyMCwJLyogYnIgeDE3LiAgKi8KK307 CisKK3RlbXBsYXRlPGludCBzaXplLCBib29sIGJpZ19lbmRpYW4+Cit2b2lk CitPdXRwdXRfZGF0YV9wbHRfYWFyY2g2NF9zdGFuZGFyZDxzaXplLCBiaWdf ZW5kaWFuPjo6ZG9fZmlsbF9maXJzdF9wbHRfZW50cnkoCisgICAgdW5zaWdu ZWQgY2hhciogcG92LAorICAgIEFkZHJlc3MgLyogZ290X2FkZHJlc3MgKi8s CisgICAgQWRkcmVzcyAvKiBwbHRfYWRkcmVzcyAqLykKK3sKKyAgLy8gUExU MCBvZiB0aGUgc21hbGwgUExUIGxvb2tzIGxpa2UgdGhpcyBpbiBFTEY2NCAt CisgIC8vIHN0cCB4MTYsIHgzMCwgW3NwLCAjLTE2XSEJIAlTYXZlIHRoZSBy ZWxvYyBhbmQgbHIgb24gc3RhY2suCisgIC8vIGFkcnAgeDE2LCBQTFRfR09U ICsgMTYJCUdldCB0aGUgcGFnZSBiYXNlIG9mIHRoZSBHT1RQTFQKKyAgLy8g bGRyICB4MTcsIFt4MTYsICM6bG8xMjpQTFRfR09UKzE2XQlMb2FkIHRoZSBh ZGRyZXNzIG9mIHRoZQorICAvLyAJCQkJCXN5bWJvbCByZXNvbHZlcgorICAv LyBhZGQgIHgxNiwgeDE2LCAjOmxvMTI6UExUX0dPVCsxNglMb2FkIHRoZSBs bzEyIGJpdHMgb2YgdGhlCisgIC8vIAkJCQkJR09UUExUIGVudHJ5IGZvciB0 aGlzLgorICAvLyBiciAgIHgxNworICAvLyBQTFQwIHdpbGwgYmUgc2xpZ2h0 bHkgZGlmZmVyZW50IGluIEVMRjMyIGR1ZSB0byBkaWZmZXJlbnQgZ290IGVu dHJ5CisgIC8vIHNpemUuCisgIG1lbWNweShwb3YsIHRoaXMtPmZpcnN0X3Bs dF9lbnRyeSwgdGhpcy0+Zmlyc3RfcGx0X2VudHJ5X3NpemUpOworICAvLyBU T0RPCit9CisKKy8vIFN1YnNlcXVlbnQgZW50cmllcyBpbiB0aGUgUExUIGZv ciBhbiBleGVjdXRhYmxlLgorCit0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBi aWdfZW5kaWFuPgordm9pZAorT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjRfc3Rh bmRhcmQ8c2l6ZSwgYmlnX2VuZGlhbj46OmRvX2ZpbGxfcGx0X2VudHJ5KAor ICAgIHVuc2lnbmVkIGNoYXIqIHBvdiwKKyAgICBBZGRyZXNzIC8qIGdvdF9h ZGRyZXNzKi8sCisgICAgQWRkcmVzcyAvKiBwbHRfYWRkcmVzcyAqLywKKyAg ICB1bnNpZ25lZCBpbnQgLyogZ290X29mZnNldCAqLywKKyAgICB1bnNpZ25l ZCBpbnQgLyogcGx0X29mZnNldCAqLykKK3sKKyAgbWVtY3B5KHBvdiwgdGhp cy0+cGx0X2VudHJ5LCB0aGlzLT5wbHRfZW50cnlfc2l6ZSk7CisgIC8vVE9E TworfQorCisvLyBXcml0ZSBvdXQgdGhlIFBMVC4gIFRoaXMgdXNlcyB0aGUg aGFuZC1jb2RlZCBpbnN0cnVjdGlvbnMgYWJvdmUsCisvLyBhbmQgYWRqdXN0 cyB0aGVtIGFzIG5lZWRlZC4gIFRoaXMgaXMgc3BlY2lmaWVkIGJ5IHRoZSBB TUQ2NCBBQkkuCisKK3RlbXBsYXRlPGludCBzaXplLCBib29sIGJpZ19lbmRp YW4+Cit2b2lkCitPdXRwdXRfZGF0YV9wbHRfYWFyY2g2NDxzaXplLCBiaWdf ZW5kaWFuPjo6ZG9fd3JpdGUoT3V0cHV0X2ZpbGUqIG9mKQoreworICBjb25z dCBvZmZfdCBvZmZzZXQgPSB0aGlzLT5vZmZzZXQoKTsKKyAgY29uc3Qgc2Vj dGlvbl9zaXplX3R5cGUgb3ZpZXdfc2l6ZSA9CisgICAgY29udmVydF90b19z ZWN0aW9uX3NpemVfdHlwZSh0aGlzLT5kYXRhX3NpemUoKSk7CisgIHVuc2ln bmVkIGNoYXIqIGNvbnN0IG92aWV3ID0gb2YtPmdldF9vdXRwdXRfdmlldyhv ZmZzZXQsIG92aWV3X3NpemUpOworCisgIGNvbnN0IG9mZl90IGdvdF9maWxl X29mZnNldCA9IHRoaXMtPmdvdF9wbHRfLT5vZmZzZXQoKTsKKyAgY29uc3Qg c2VjdGlvbl9zaXplX3R5cGUgZ290X3NpemUgPQorICAgIGNvbnZlcnRfdG9f c2VjdGlvbl9zaXplX3R5cGUodGhpcy0+Z290X3BsdF8tPmRhdGFfc2l6ZSgp KTsKKyAgdW5zaWduZWQgY2hhciogY29uc3QgZ290X3ZpZXcgPSBvZi0+Z2V0 X291dHB1dF92aWV3KGdvdF9maWxlX29mZnNldCwKKwkJCQkJCSAgICAgIGdv dF9zaXplKTsKKworICB1bnNpZ25lZCBjaGFyKiBwb3YgPSBvdmlldzsKKwor ICAvLyBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSAucGx0IHNlY3Rpb24uCisg IHR5cGVuYW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNpemU+OjpFbGZfQWRkciBw bHRfYWRkcmVzcyA9IHRoaXMtPmFkZHJlc3MoKTsKKyAgLy8gVGhlIGJhc2Ug YWRkcmVzcyBvZiB0aGUgLmdvdCBzZWN0aW9uLgorICB0eXBlbmFtZSBlbGZj cHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0FkZHIgZ290X2Jhc2UgPSB0aGlz LT5nb3RfLT5hZGRyZXNzKCk7CisgIC8vIFRoZSBiYXNlIGFkZHJlc3Mgb2Yg dGhlIFBMVCBwb3J0aW9uIG9mIHRoZSAuZ290IHNlY3Rpb24uCisgIHR5cGVu YW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNpemU+OjpFbGZfQWRkciBnb3RfYWRk cmVzcworICAgID0gdGhpcy0+Z290X3BsdF8tPmFkZHJlc3MoKTsKKworICB0 aGlzLT5maWxsX2ZpcnN0X3BsdF9lbnRyeShwb3YsIGdvdF9hZGRyZXNzLCBw bHRfYWRkcmVzcyk7CisgIHBvdiArPSB0aGlzLT5maXJzdF9wbHRfZW50cnlf b2Zmc2V0KCk7CisKKyAgLy8gVGhlIGZpcnN0IHRocmVlIGVudHJpZXMgaW4g LmdvdC5wbHQgYXJlIHJlc2VydmVkLgorICB1bnNpZ25lZCBjaGFyKiBnb3Rf cG92ID0gZ290X3ZpZXc7CisgIG1lbXNldChnb3RfcG92LCAwLCBzaXplIC8g OCAqIEFBUkNINjRfR09UUExUX1JFU0VSVkVfQ09VTlQpOworICBnb3RfcG92 ICs9IChzaXplIC8gOCkgKiBBQVJDSDY0X0dPVFBMVF9SRVNFUlZFX0NPVU5U OworCisgIHVuc2lnbmVkIGludCBwbHRfb2Zmc2V0ID0gdGhpcy0+Zmlyc3Rf cGx0X2VudHJ5X29mZnNldCgpOworICB1bnNpZ25lZCBpbnQgZ290X29mZnNl dCA9IChzaXplIC8gOCkgKiBBQVJDSDY0X0dPVFBMVF9SRVNFUlZFX0NPVU5U OworICBjb25zdCB1bnNpZ25lZCBpbnQgY291bnQgPSB0aGlzLT5jb3VudF87 CisgIGZvciAodW5zaWduZWQgaW50IHBsdF9pbmRleCA9IDA7CisgICAgICAg cGx0X2luZGV4IDwgY291bnQ7CisgICAgICAgKytwbHRfaW5kZXgsCisJIHBv diArPSB0aGlzLT5nZXRfcGx0X2VudHJ5X3NpemUoKSwKKwkgZ290X3BvdiAr PSBzaXplIC8gOCwKKwkgcGx0X29mZnNldCArPSB0aGlzLT5nZXRfcGx0X2Vu dHJ5X3NpemUoKSwKKwkgZ290X29mZnNldCArPSBzaXplIC8gOCkKKyAgICB7 CisgICAgICAvLyBTZXQgYW5kIGFkanVzdCB0aGUgUExUIGVudHJ5IGl0c2Vs Zi4KKyAgICAgIHRoaXMtPmZpbGxfcGx0X2VudHJ5KHBvdiwgZ290X2FkZHJl c3MsIHBsdF9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg Z290X29mZnNldCwgcGx0X29mZnNldCk7CisKKyAgICAgIC8vIFNldCB0aGUg ZW50cnkgaW4gdGhlIEdPVC4KKyAgICAgIGVsZmNwcDo6U3dhcDxzaXplLCBi aWdfZW5kaWFuPjo6d3JpdGV2YWwoZ290X3BvdiwKKyAgICAgICAgICBwbHRf YWRkcmVzcyArIHBsdF9vZmZzZXQpOworICAgIH0KKworICBnb2xkX2Fzc2Vy dChzdGF0aWNfY2FzdDxzZWN0aW9uX3NpemVfdHlwZT4ocG92IC0gb3ZpZXcp ID09IG92aWV3X3NpemUpOworICBnb2xkX2Fzc2VydChzdGF0aWNfY2FzdDxz ZWN0aW9uX3NpemVfdHlwZT4oZ290X3BvdiAtIGdvdF92aWV3KSA9PSBnb3Rf c2l6ZSk7CisKKyAgb2YtPndyaXRlX291dHB1dF92aWV3KG9mZnNldCwgb3Zp ZXdfc2l6ZSwgb3ZpZXcpOworICBvZi0+d3JpdGVfb3V0cHV0X3ZpZXcoZ290 X2ZpbGVfb2Zmc2V0LCBnb3Rfc2l6ZSwgZ290X3ZpZXcpOworfQorCisvLyBS ZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBQTFQuCisKK3Rl bXBsYXRlPGludCBzaXplLCBib29sIGJpZ19lbmRpYW4+Cit1bnNpZ25lZCBp bnQKK1RhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpwbHRfZW50 cnlfY291bnQoKSBjb25zdAoreworICBpZiAodGhpcy0+cGx0XyA9PSBOVUxM KQorICAgIHJldHVybiAwOworICByZXR1cm4gdGhpcy0+cGx0Xy0+ZW50cnlf Y291bnQoKTsKK30KKworLy8gUmV0dXJuIHRoZSBvZmZzZXQgb2YgdGhlIGZp cnN0IG5vbi1yZXNlcnZlZCBQTFQgZW50cnkuCisKK3RlbXBsYXRlPGludCBz aXplLCBib29sIGJpZ19lbmRpYW4+Cit1bnNpZ25lZCBpbnQKK1RhcmdldF9h YXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpmaXJzdF9wbHRfZW50cnlfb2Zm c2V0KCkgY29uc3QKK3sKKyAgcmV0dXJuIHRoaXMtPnBsdF8tPmZpcnN0X3Bs dF9lbnRyeV9vZmZzZXQoKTsKK30KKworLy8gUmV0dXJuIHRoZSBzaXplIG9m IGVhY2ggUExUIGVudHJ5LgorCit0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBi aWdfZW5kaWFuPgordW5zaWduZWQgaW50CitUYXJnZXRfYWFyY2g2NDxzaXpl LCBiaWdfZW5kaWFuPjo6cGx0X2VudHJ5X3NpemUoKSBjb25zdAoreworICBy ZXR1cm4gdGhpcy0+cGx0Xy0+Z2V0X3BsdF9lbnRyeV9zaXplKCk7Cit9CisK Ky8vIE9wdGltaXplIHRoZSBUTFMgcmVsb2NhdGlvbiB0eXBlIGJhc2VkIG9u IHdoYXQgd2Uga25vdyBhYm91dCB0aGUKKy8vIHN5bWJvbC4gIElTX0ZJTkFM IGlzIHRydWUgaWYgdGhlIGZpbmFsIGFkZHJlc3Mgb2YgdGhpcyBzeW1ib2wg aXMKKy8vIGtub3duIGF0IGxpbmsgdGltZS4KKwordGVtcGxhdGU8aW50IHNp emUsIGJvb2wgYmlnX2VuZGlhbj4KK3Rsczo6VGxzX29wdGltaXphdGlvbgor VGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46Om9wdGltaXplX3Rs c19yZWxvYyhib29sIC8qIGlzX2ZpbmFsICovLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgLyog cl90eXBlICovKQoreworICAvL1RPRE8KKyAgcmV0dXJuIHRsczo6VExTT1BU X05PTkU7Cit9CisKKy8vIEdldCB0aGUgUmVmZXJlbmNlX2ZsYWdzIGZvciBh IHBhcnRpY3VsYXIgcmVsb2NhdGlvbi4KK3RlbXBsYXRlPGludCBzaXplLCBi b29sIGJpZ19lbmRpYW4+CitpbnQKK1RhcmdldF9hYXJjaDY0PHNpemUsIGJp Z19lbmRpYW4+OjpTY2FuOjpnZXRfcmVmZXJlbmNlX2ZsYWdzKHVuc2lnbmVk IGludCByX3R5cGUpCit7CisgIHN3aXRjaCAocl90eXBlKQorICAgIHsKKyAg ICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X05PTkU6CisgICAgICAvLyBObyBz eW1ib2wgcmVmZXJlbmNlLgorICAgICAgcmV0dXJuIDA7CisgICAgLy9UT0RP CisgICAgZGVmYXVsdDoKKyAgICAgIC8vIE5vdCBleHBlY3RlZC4gV2Ugd2ls bCBnaXZlIGFuIGVycm9yIGxhdGVyLgorICAgIHJldHVybiAwOworICAgIH0K K30KKworLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcmVsb2NhdGlvbiB0eXBl IGNvdWxkIGJlIHRoYXQgb2YgYSBmdW5jdGlvbiBwb2ludGVyLgorCit0ZW1w bGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgoraW5saW5lIGJvb2wK K1RhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpTY2FuOjpwb3Nz aWJsZV9mdW5jdGlvbl9wb2ludGVyX3JlbG9jKAorICB1bnNpZ25lZCBpbnQg cl90eXBlKQoreworICBzd2l0Y2ggKHJfdHlwZSkKKyAgICB7CisgICAgY2Fz ZSBlbGZjcHA6OlJfQUFSQ0g2NF9BQlM2NDoKKyAgICAvL1RPRE8KKyAgICAg IHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICBy ZXR1cm4gZmFsc2U7Cit9CisKKy8vIEZvciBzYWZlIElDRiwgc2NhbiBhIHJl bG9jYXRpb24gZm9yIGEgbG9jYWwgc3ltYm9sIHRvIGNoZWNrIGlmIGl0Cisv LyBjb3JyZXNwb25kcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgYmVpbmcgdGFr ZW4uICBJbiB0aGF0IGNhc2UgbWFyaworLy8gdGhlIGZ1bmN0aW9uIHdob3Nl IHBvaW50ZXIgd2FzIHRha2VuIGFzIG5vdCBmb2xkYWJsZS4KKwordGVtcGxh dGU8aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KK2lubGluZSBib29sCitU YXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6U2Nhbjo6bG9jYWxf cmVsb2NfbWF5X2JlX2Z1bmN0aW9uX3BvaW50ZXIoCisgIFN5bWJvbF90YWJs ZSogLAorICBMYXlvdXQqICwKKyAgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmln X2VuZGlhbj4qICwKKyAgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2Vu ZGlhbj4qICwKKyAgdW5zaWduZWQgaW50ICwKKyAgT3V0cHV0X3NlY3Rpb24q ICwKKyAgY29uc3QgZWxmY3BwOjpSZWxhPHNpemUsIGJpZ19lbmRpYW4+JiAs CisgIHVuc2lnbmVkIGludCByX3R5cGUsCisgIGNvbnN0IGVsZmNwcDo6U3lt PHNpemUsIGJpZ19lbmRpYW4+JikKK3sKKyAgLy8gV2hlbiBidWlsZGluZyBh IHNoYXJlZCBsaWJyYXJ5LCBkbyBub3QgZm9sZCBhbnkgbG9jYWwgc3ltYm9s cyBhcyBpdCBpcworICAvLyBub3QgcG9zc2libGUgdG8gZGlzdGluZ3Vpc2gg cG9pbnRlciB0YWtlbiB2ZXJzdXMgYSBjYWxsIGJ5IGxvb2tpbmcgYXQKKyAg Ly8gdGhlIHJlbG9jYXRpb24gdHlwZXMuCisgIHJldHVybiAocGFyYW1ldGVy cy0+b3B0aW9ucygpLnNoYXJlZCgpCisgICAgICAgICAgfHwgcG9zc2libGVf ZnVuY3Rpb25fcG9pbnRlcl9yZWxvYyhyX3R5cGUpKTsKK30KKworLy8gRm9y IHNhZmUgSUNGLCBzY2FuIGEgcmVsb2NhdGlvbiBmb3IgYSBnbG9iYWwgc3lt Ym9sIHRvIGNoZWNrIGlmIGl0CisvLyBjb3JyZXNwb25kcyB0byBhIGZ1bmN0 aW9uIHBvaW50ZXIgYmVpbmcgdGFrZW4uICBJbiB0aGF0IGNhc2UgbWFyawor Ly8gdGhlIGZ1bmN0aW9uIHdob3NlIHBvaW50ZXIgd2FzIHRha2VuIGFzIG5v dCBmb2xkYWJsZS4KKwordGVtcGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2Vu ZGlhbj4KK2lubGluZSBib29sCitUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdf ZW5kaWFuPjo6U2Nhbjo6Z2xvYmFsX3JlbG9jX21heV9iZV9mdW5jdGlvbl9w b2ludGVyKAorICBTeW1ib2xfdGFibGUqICwKKyAgTGF5b3V0KiAsCisgIFRh cmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+KiAsCisgIFNpemVkX3Jl bG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+KiAsCisgIHVuc2lnbmVkIGlu dCAsCisgIE91dHB1dF9zZWN0aW9uKiAsCisgIGNvbnN0IGVsZmNwcDo6UmVs YTxzaXplLCBiaWdfZW5kaWFuPiYgLAorICB1bnNpZ25lZCBpbnQgcl90eXBl LAorICBTeW1ib2wqIGdzeW0pCit7CisgIC8vIFdoZW4gYnVpbGRpbmcgYSBz aGFyZWQgbGlicmFyeSwgZG8gbm90IGZvbGQgc3ltYm9scyB3aG9zZSB2aXNp YmlsaXR5CisgIC8vIGlzIGhpZGRlbiwgaW50ZXJuYWwgb3IgcHJvdGVjdGVk LgorICByZXR1cm4gKChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuc2hhcmVkKCkK KyAgICAgICAgICAgJiYgKGdzeW0tPnZpc2liaWxpdHkoKSA9PSBlbGZjcHA6 OlNUVl9JTlRFUk5BTAorICAgICAgICAgICAgICAgfHwgZ3N5bS0+dmlzaWJp bGl0eSgpID09IGVsZmNwcDo6U1RWX1BST1RFQ1RFRAorICAgICAgICAgICAg ICAgfHwgZ3N5bS0+dmlzaWJpbGl0eSgpID09IGVsZmNwcDo6U1RWX0hJRERF TikpCisgICAgICAgICAgfHwgcG9zc2libGVfZnVuY3Rpb25fcG9pbnRlcl9y ZWxvYyhyX3R5cGUpKTsKK30KKworLy8gUmVwb3J0IGFuIHVuc3VwcG9ydGVk IHJlbG9jYXRpb24gYWdhaW5zdCBhIGxvY2FsIHN5bWJvbC4KKwordGVtcGxh dGU8aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KK3ZvaWQKK1RhcmdldF9h YXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpTY2FuOjp1bnN1cHBvcnRlZF9y ZWxvY19sb2NhbCgKKyAgICAgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmln X2VuZGlhbj4qIG9iamVjdCwKKyAgICAgdW5zaWduZWQgaW50IHJfdHlwZSkK K3sKKyAgZ29sZF9lcnJvcihfKCIlczogdW5zdXBwb3J0ZWQgcmVsb2MgJXUg YWdhaW5zdCBsb2NhbCBzeW1ib2wiKSwKKwkgICAgIG9iamVjdC0+bmFtZSgp LmNfc3RyKCksIHJfdHlwZSk7Cit9CisKKy8vIFdlIGFyZSBhYm91dCB0byBl bWl0IGEgZHluYW1pYyByZWxvY2F0aW9uIG9mIHR5cGUgUl9UWVBFLiAgSWYg dGhlCisvLyBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGl0LCBp c3N1ZSBhbiBlcnJvci4KKwordGVtcGxhdGU8aW50IHNpemUsIGJvb2wgYmln X2VuZGlhbj4KK3ZvaWQKK1RhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRp YW4+OjpTY2FuOjpjaGVja19ub25fcGljKFJlbG9iaiogb2JqZWN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IHJfdHlwZSkKK3sKKyAgZ29sZF9hc3NlcnQo cl90eXBlICE9IGVsZmNwcDo6Ul9BQVJDSDY0X05PTkUpOworCisgIHN3aXRj aCAocl90eXBlKQorICAgIHsKKyAgICAvLyBUaGVzZSBhcmUgdGhlIHJlbG9j YXRpb24gdHlwZXMgc3VwcG9ydGVkIGJ5IGdsaWJjIGZvciBBQVJDSDY0Lgor ICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfTk9ORToKKyAgICBjYXNlIGVs ZmNwcDo6Ul9BQVJDSDY0X0NPUFk6CisgICAgY2FzZSBlbGZjcHA6OlJfQUFS Q0g2NF9HTE9CX0RBVDoKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0pV TVBfU0xPVDoKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X1JFTEFUSVZF OgorICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfVExTX0RUUFJFTDY0Ogor ICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfVExTX0RUUE1PRDY0OgorICAg IGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfVExTX1RQUkVMNjQ6CisgICAgY2Fz ZSBlbGZjcHA6OlJfQUFSQ0g2NF9UTFNERVNDOgorICAgIGNhc2UgZWxmY3Bw OjpSX0FBUkNINjRfSVJFTEFUSVZFOgorICAgIGNhc2UgZWxmY3BwOjpSX0FB UkNINjRfQUJTMzI6CisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9BQlM2 NDoKKyAgICAgIHJldHVybjsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVh azsKKyAgICB9CisKKyAgLy8gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIGlzc3Vp bmcgbW9yZSB0aGFuIG9uZSBlcnJvciBwZXIgcmVsb2MKKyAgLy8gc2VjdGlv bi4gQnV0IHdlIGNhbiBzdGlsbCB3aW5kIHVwIGlzc3VpbmcgbW9yZSB0aGFu IG9uZQorICAvLyBlcnJvciBwZXIgb2JqZWN0IGZpbGUuCisgIGlmICh0aGlz LT5pc3N1ZWRfbm9uX3BpY19lcnJvcl8pCisgICAgcmV0dXJuOworICBnb2xk X2Fzc2VydChwYXJhbWV0ZXJzLT5vcHRpb25zKCkub3V0cHV0X2lzX3Bvc2l0 aW9uX2luZGVwZW5kZW50KCkpOworICBvYmplY3QtPmVycm9yKF8oInJlcXVp cmVzIHVuc3VwcG9ydGVkIGR5bmFtaWMgcmVsb2M7ICIKKyAgICAgICAgICAg ICAgICAgICJyZWNvbXBpbGUgd2l0aCAtZlBJQyIpKTsKKyAgdGhpcy0+aXNz dWVkX25vbl9waWNfZXJyb3JfID0gdHJ1ZTsKKyAgcmV0dXJuOworfQorCisv LyBTY2FuIGEgcmVsb2NhdGlvbiBmb3IgYSBsb2NhbCBzeW1ib2wuCisKK3Rl bXBsYXRlPGludCBzaXplLCBib29sIGJpZ19lbmRpYW4+CitpbmxpbmUgdm9p ZAorVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OlNjYW46Omxv Y2FsKAorICAgIFN5bWJvbF90YWJsZSogLyogc3ltdGFiICovLAorICAgIExh eW91dCogLyogbGF5b3V0ICovLAorICAgIFRhcmdldF9hYXJjaDY0PHNpemUs IGJpZ19lbmRpYW4+KiAvKiB0YXJnZXQgKi8sCisgICAgU2l6ZWRfcmVsb2Jq X2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj4qIC8qIG9iamVjdCAqLywKKyAgICB1 bnNpZ25lZCBpbnQgLyogZGF0YV9zaG5keCAqLywKKyAgICBPdXRwdXRfc2Vj dGlvbiogLyogb3V0cHV0X3NlY3Rpb24gKi8sCisgICAgY29uc3QgZWxmY3Bw OjpSZWxhPHNpemUsIGJpZ19lbmRpYW4+JiAvKiByZWxvYyAqLywKKyAgICB1 bnNpZ25lZCBpbnQgcl90eXBlLAorICAgIGNvbnN0IGVsZmNwcDo6U3ltPHNp emUsIGJpZ19lbmRpYW4+JiAvKiBsc3ltICovLAorICAgIGJvb2wgaXNfZGlz Y2FyZGVkKQoreworICBpZiAoaXNfZGlzY2FyZGVkKQorICAgIHJldHVybjsK KworICBzd2l0Y2ggKHJfdHlwZSkKKyAgICB7CisgICAgY2FzZSBlbGZjcHA6 OlJfQUFSQ0g2NF9OT05FOgorICAgICAgYnJlYWs7CisKKyAgICAgIC8vVE9E TworICAgIH0KK30KKworCisvLyBSZXBvcnQgYW4gdW5zdXBwb3J0ZWQgcmVs b2NhdGlvbiBhZ2FpbnN0IGEgZ2xvYmFsIHN5bWJvbC4KKwordGVtcGxhdGU8 aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KK3ZvaWQKK1RhcmdldF9hYXJj aDY0PHNpemUsIGJpZ19lbmRpYW4+OjpTY2FuOjp1bnN1cHBvcnRlZF9yZWxv Y19nbG9iYWwoCisgICAgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2Vu ZGlhbj4qIG9iamVjdCwKKyAgICB1bnNpZ25lZCBpbnQgcl90eXBlLAorICAg IFN5bWJvbCogZ3N5bSkKK3sKKyAgZ29sZF9lcnJvcihfKCIlczogdW5zdXBw b3J0ZWQgcmVsb2MgJXUgYWdhaW5zdCBnbG9iYWwgc3ltYm9sICVzIiksCisJ ICAgICBvYmplY3QtPm5hbWUoKS5jX3N0cigpLCByX3R5cGUsIGdzeW0tPmRl bWFuZ2xlZF9uYW1lKCkuY19zdHIoKSk7Cit9CisKK3RlbXBsYXRlPGludCBz aXplLCBib29sIGJpZ19lbmRpYW4+CitpbmxpbmUgdm9pZAorVGFyZ2V0X2Fh cmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OlNjYW46Omdsb2JhbCgKKyAgICBT eW1ib2xfdGFibGUqIC8qIHN5bXRhYiAqLywKKyAgICBMYXlvdXQqIC8qIGxh eW91dCAqLywKKyAgICBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFu PiogLyogdGFyZ2V0ICovLAorICAgIFNpemVkX3JlbG9ial9maWxlPHNpemUs IGJpZ19lbmRpYW4+KiAvKiBvYmplY3QgKi8sCisgICAgdW5zaWduZWQgaW50 IC8qIGRhdGFfc2huZHggKi8sCisgICAgT3V0cHV0X3NlY3Rpb24qIC8qIG91 dHB1dF9zZWN0aW9uICovLAorICAgIGNvbnN0IGVsZmNwcDo6UmVsYTxzaXpl LCBiaWdfZW5kaWFuPiYgLyogcmVsb2MgKi8sCisgICAgdW5zaWduZWQgaW50 IC8qIHJfdHlwZSAqLywKKyAgICBTeW1ib2wqIC8qIGdzeW0gKi8pCit7Cisg IC8vVE9ETworICByZXR1cm47Cit9CisKK3RlbXBsYXRlPGludCBzaXplLCBi b29sIGJpZ19lbmRpYW4+Cit2b2lkCitUYXJnZXRfYWFyY2g2NDxzaXplLCBi aWdfZW5kaWFuPjo6Z2NfcHJvY2Vzc19yZWxvY3MoCisgICAgU3ltYm9sX3Rh YmxlKiBzeW10YWIsCisgICAgTGF5b3V0KiBsYXlvdXQsCisgICAgU2l6ZWRf cmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj4qIG9iamVjdCwKKyAgICB1 bnNpZ25lZCBpbnQgZGF0YV9zaG5keCwKKyAgICB1bnNpZ25lZCBpbnQgc2hf dHlwZSwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwcmVsb2NzLAorICAg IHNpemVfdCByZWxvY19jb3VudCwKKyAgICBPdXRwdXRfc2VjdGlvbiogb3V0 cHV0X3NlY3Rpb24sCisgICAgYm9vbCBuZWVkc19zcGVjaWFsX29mZnNldF9o YW5kbGluZywKKyAgICBzaXplX3QgbG9jYWxfc3ltYm9sX2NvdW50LAorICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIqIHBsb2NhbF9zeW1ib2xzKQoreworICBp ZiAoc2hfdHlwZSA9PSBlbGZjcHA6OlNIVF9SRUwpCisgICAgeworICAgICAg cmV0dXJuOworICAgIH0KKworICBnb2xkOjpnY19wcm9jZXNzX3JlbG9jczxz aXplLCBiaWdfZW5kaWFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBU YXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgZWxmY3BwOjpTSFRfUkVMQSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgdHlwZW5hbWUgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwg YmlnX2VuZGlhbj46OlNjYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg IHR5cGVuYW1lIFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpS ZWxvY2F0YWJsZV9zaXplX2Zvcl9yZWxvYz4oCisgICAgc3ltdGFiLAorICAg IGxheW91dCwKKyAgICB0aGlzLAorICAgIG9iamVjdCwKKyAgICBkYXRhX3No bmR4LAorICAgIHByZWxvY3MsCisgICAgcmVsb2NfY291bnQsCisgICAgb3V0 cHV0X3NlY3Rpb24sCisgICAgbmVlZHNfc3BlY2lhbF9vZmZzZXRfaGFuZGxp bmcsCisgICAgbG9jYWxfc3ltYm9sX2NvdW50LAorICAgIHBsb2NhbF9zeW1i b2xzKTsKK30KKworLy8gU2NhbiByZWxvY2F0aW9ucyBmb3IgYSBzZWN0aW9u LgorCit0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgordm9p ZAorVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OnNjYW5fcmVs b2NzKAorICAgIFN5bWJvbF90YWJsZSogc3ltdGFiLAorICAgIExheW91dCog bGF5b3V0LAorICAgIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRp YW4+KiBvYmplY3QsCisgICAgdW5zaWduZWQgaW50IGRhdGFfc2huZHgsCisg ICAgdW5zaWduZWQgaW50IHNoX3R5cGUsCisgICAgY29uc3QgdW5zaWduZWQg Y2hhciogcHJlbG9jcywKKyAgICBzaXplX3QgcmVsb2NfY291bnQsCisgICAg T3V0cHV0X3NlY3Rpb24qIG91dHB1dF9zZWN0aW9uLAorICAgIGJvb2wgbmVl ZHNfc3BlY2lhbF9vZmZzZXRfaGFuZGxpbmcsCisgICAgc2l6ZV90IGxvY2Fs X3N5bWJvbF9jb3VudCwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwbG9j YWxfc3ltYm9scykKK3sKKyAgaWYgKHNoX3R5cGUgPT0gZWxmY3BwOjpTSFRf UkVMKQorICAgIHsKKyAgICAgIGdvbGRfZXJyb3IoXygiJXM6IHVuc3VwcG9y dGVkIFJFTCByZWxvYyBzZWN0aW9uIiksCisJCSBvYmplY3QtPm5hbWUoKS5j X3N0cigpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgZ29sZDo6c2Nh bl9yZWxvY3M8c2l6ZSwgYmlnX2VuZGlhbiwgVGFyZ2V0X2FhcmNoNjQ8c2l6 ZSwgYmlnX2VuZGlhbj4sCisgICAgICAgICAgICAgICAgICAgIGVsZmNwcDo6 U0hUX1JFTEEsCisgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIFRhcmdl dF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpTY2FuPigKKyAgICBzeW10 YWIsCisgICAgbGF5b3V0LAorICAgIHRoaXMsCisgICAgb2JqZWN0LAorICAg IGRhdGFfc2huZHgsCisgICAgcHJlbG9jcywKKyAgICByZWxvY19jb3VudCwK KyAgICBvdXRwdXRfc2VjdGlvbiwKKyAgICBuZWVkc19zcGVjaWFsX29mZnNl dF9oYW5kbGluZywKKyAgICBsb2NhbF9zeW1ib2xfY291bnQsCisgICAgcGxv Y2FsX3N5bWJvbHMpOworfQorCisvLyBGaW5hbGl6ZSB0aGUgc2VjdGlvbnMu CisKK3RlbXBsYXRlPGludCBzaXplLCBib29sIGJpZ19lbmRpYW4+Cit2b2lk CitUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fZmluYWxp emVfc2VjdGlvbnMoCisgICAgTGF5b3V0KiAvKiBsYXlvdXQgKi8sCisgICAg Y29uc3QgSW5wdXRfb2JqZWN0cyosCisgICAgU3ltYm9sX3RhYmxlKiAvKiBz eW10YWIgKi8pCit7CisgIC8vVE9ETworICByZXR1cm47Cit9CisKKy8vIFBl cmZvcm0gYSByZWxvY2F0aW9uLgorCit0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9v bCBiaWdfZW5kaWFuPgoraW5saW5lIGJvb2wKK1RhcmdldF9hYXJjaDY0PHNp emUsIGJpZ19lbmRpYW4+OjpSZWxvY2F0ZTo6cmVsb2NhdGUoCisgICAgY29u c3QgUmVsb2NhdGVfaW5mbzxzaXplLCBiaWdfZW5kaWFuPiogLyogcmVsaW5m byAqLywKKyAgICBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPiog LyogdGFyZ2V0ICovLAorICAgIE91dHB1dF9zZWN0aW9uKiAsCisgICAgc2l6 ZV90IC8qIHJlbG51bSAqLywKKyAgICBjb25zdCBlbGZjcHA6OlJlbGE8c2l6 ZSwgYmlnX2VuZGlhbj4mIC8qIHJlbGEgKi8sCisgICAgdW5zaWduZWQgaW50 IC8qIHJfdHlwZSAqLywKKyAgICBjb25zdCBTaXplZF9zeW1ib2w8c2l6ZT4q IC8qIGdzeW0gKi8sCisgICAgY29uc3QgU3ltYm9sX3ZhbHVlPHNpemU+KiAv KiBwc3ltdmFsICovLAorICAgIHVuc2lnbmVkIGNoYXIqIC8qIHZpZXcgKi8s CisgICAgdHlwZW5hbWUgZWxmY3BwOjpFbGZfdHlwZXM8c2l6ZT46OkVsZl9B ZGRyIC8qIGFkZHJlc3MgKi8sCisgICAgc2VjdGlvbl9zaXplX3R5cGUgLyog dmlld19zaXplICovKQoreworICAvL1RPRE8KKyAgcmV0dXJuIHRydWU7Cit9 CisKKy8vIFJlbG9jYXRlIHNlY3Rpb24gZGF0YS4KKwordGVtcGxhdGU8aW50 IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KK3ZvaWQKK1RhcmdldF9hYXJjaDY0 PHNpemUsIGJpZ19lbmRpYW4+OjpyZWxvY2F0ZV9zZWN0aW9uKAorICAgIGNv bnN0IFJlbG9jYXRlX2luZm88c2l6ZSwgYmlnX2VuZGlhbj4qIC8qIHJlbGlu Zm8gKi8sCisgICAgdW5zaWduZWQgaW50IHNoX3R5cGUsCisgICAgY29uc3Qg dW5zaWduZWQgY2hhciogLyogcHJlbG9jcyAqLywKKyAgICBzaXplX3QgLyog cmVsb2NfY291bnQgKi8sCisgICAgT3V0cHV0X3NlY3Rpb24qIC8qIG91dHB1 dF9zZWN0aW9uICovLAorICAgIGJvb2wgLypuZWVkc19zcGVjaWFsX29mZnNl dF9oYW5kbGluZyAqLywKKyAgICB1bnNpZ25lZCBjaGFyKiAvKiB2aWV3ICov LAorICAgIHR5cGVuYW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNpemU+OjpFbGZf QWRkciAvKiBhZGRyZXNzICovLAorICAgIHNlY3Rpb25fc2l6ZV90eXBlIC8q IHZpZXdfc2l6ZSAqLywKKyAgICBjb25zdCBSZWxvY19zeW1ib2xfY2hhbmdl cyogLyogcmVsb2Nfc3ltYm9sX2NoYW5nZXMgKi8pCit7CisgIC8vVE9ETwor ICBnb2xkX2Fzc2VydChzaF90eXBlID09IGVsZmNwcDo6U0hUX1JFTEEpOwor fQorCisvLyBSZXR1cm4gdGhlIHNpemUgb2YgYSByZWxvY2F0aW9uIHdoaWxl IHNjYW5uaW5nIGR1cmluZyBhIHJlbG9jYXRhYmxlCisvLyBsaW5rLgorCit0 ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgordW5zaWduZWQg aW50CitUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6UmVsb2Nh dGFibGVfc2l6ZV9mb3JfcmVsb2M6OgorZ2V0X3NpemVfZm9yX3JlbG9jKAor ICAgIHVuc2lnbmVkIGludCAsCisgICAgUmVsb2JqKiApCit7CisgIC8vIFdl IHdpbGwgbmV2ZXIgc3VwcG9ydCBTSFRfUkVMIHJlbG9jYXRpb25zLgorICBn b2xkX3VucmVhY2hhYmxlKCk7CisgIHJldHVybiAwOworfQorCisvLyBTY2Fu IHRoZSByZWxvY3MgZHVyaW5nIGEgcmVsb2NhdGFibGUgbGluay4KKwordGVt cGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KK3ZvaWQKK1Rhcmdl dF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpzY2FuX3JlbG9jYXRhYmxl X3JlbG9jcygKKyAgICBTeW1ib2xfdGFibGUqIC8qIHN5bXRhYiAqLywKKyAg ICBMYXlvdXQqIC8qIGxheW91dCAqLywKKyAgICBTaXplZF9yZWxvYmpfZmls ZTxzaXplLCBiaWdfZW5kaWFuPiogLyogb2JqZWN0ICovLAorICAgIHVuc2ln bmVkIGludCAvKiBkYXRhX3NobmR4ICovLAorICAgIHVuc2lnbmVkIGludCBz aF90eXBlLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIC8qIHByZWxvY3Mg Ki8sCisgICAgc2l6ZV90IC8qIHJlbG9jX2NvdW50ICovLAorICAgIE91dHB1 dF9zZWN0aW9uKiAvKiBvdXRwdXRfc2VjdGlvbiAqLywKKyAgICBib29sIC8q IG5lZWRzX3NwZWNpYWxfb2Zmc2V0X2hhbmRsaW5nICovLAorICAgIHNpemVf dCAvKiBsb2NhbF9zeW1ib2xfY291bnQgKi8sCisgICAgY29uc3QgdW5zaWdu ZWQgY2hhciogLyogcGxvY2FsX3N5bWJvbHMgKi8sCisgICAgUmVsb2NhdGFi bGVfcmVsb2NzKiAvKiByciAqLykKK3sKKyAgLy9UT0RPCisgIGdvbGRfYXNz ZXJ0KHNoX3R5cGUgPT0gZWxmY3BwOjpTSFRfUkVMQSk7Cit9CisKKy8vIFJl bG9jYXRlIGEgc2VjdGlvbiBkdXJpbmcgYSByZWxvY2F0YWJsZSBsaW5rLgor Cit0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgordm9pZAor VGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OnJlbG9jYXRlX3Jl bG9jcygKKyAgICBjb25zdCBSZWxvY2F0ZV9pbmZvPHNpemUsIGJpZ19lbmRp YW4+KiAvKiByZWxpbmZvICovLAorICAgIHVuc2lnbmVkIGludCBzaF90eXBl LAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIC8qIHByZWxvY3MgKi8sCisg ICAgc2l6ZV90IC8qIHJlbG9jX2NvdW50ICovLAorICAgIE91dHB1dF9zZWN0 aW9uKiAvKiBvdXRwdXRfc2VjdGlvbiAqLywKKyAgICB0eXBlbmFtZSBlbGZj cHA6OkVsZl90eXBlczxzaXplPjo6RWxmX09mZiAvKiBvZmZzZXRfaW5fb3V0 cHV0X3NlY3Rpb24gKi8sCisgICAgY29uc3QgUmVsb2NhdGFibGVfcmVsb2Nz KiAvKiByciAqLywKKyAgICB1bnNpZ25lZCBjaGFyKiAvKiB2aWV3ICovLAor ICAgIHR5cGVuYW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNpemU+OjpFbGZfQWRk ciAvKiB2aWV3X2FkZHJlc3MgKi8sCisgICAgc2VjdGlvbl9zaXplX3R5cGUg Lyogdmlld19zaXplICovLAorICAgIHVuc2lnbmVkIGNoYXIqIC8qIHJlbG9j X3ZpZXcgKi8sCisgICAgc2VjdGlvbl9zaXplX3R5cGUgLyogcmVsb2Nfdmll d19zaXplICovKQoreworICAvL1RPRE8KKyAgZ29sZF9hc3NlcnQoc2hfdHlw ZSA9PSBlbGZjcHA6OlNIVF9SRUxBKTsKK30KKworCisvLyBUaGUgc2VsZWN0 b3IgZm9yIGFhcmNoNjQgb2JqZWN0IGZpbGVzLgorCit0ZW1wbGF0ZTxpbnQg c2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgorY2xhc3MgVGFyZ2V0X3NlbGVjdG9y X2FhcmNoNjQgOiBwdWJsaWMgVGFyZ2V0X3NlbGVjdG9yCit7CisgcHVibGlj OgorICBUYXJnZXRfc2VsZWN0b3JfYWFyY2g2NCgpCisgICAgOiBUYXJnZXRf c2VsZWN0b3IoZWxmY3BwOjpFTV9BQVJDSDY0LCBzaXplLCBiaWdfZW5kaWFu LAorICAgICAgICAgICAgICAgICAgICAgIChzaXplID09IDY0CisgICAgICAg ICAgICAgICAgICAgICAgID8gKGJpZ19lbmRpYW4gPyAiZWxmNjQtYmlnYWFy Y2g2NCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 ICJlbGY2NC1saXR0bGVhYXJjaDY0IikKKyAgICAgICAgICAgICAgICAgICAg ICAgOiAoYmlnX2VuZGlhbiA/ICJlbGYzMi1iaWdhYXJjaDY0IgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImVsZjMyLWxpdHRs ZWFhcmNoNjQiKSksCisgICAgICAgICAgICAgICAgICAgICAgKHNpemUgPT0g NjQKKyAgICAgICAgICAgICAgICAgICAgICAgPyAoYmlnX2VuZGlhbiA/ICJh YXJjaDY0X2VsZjY0X2JlX3ZlYyIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6ICJhYXJjaDY0X2VsZjY0X2xlX3ZlYyIpCisgICAg ICAgICAgICAgICAgICAgICAgIDogKGJpZ19lbmRpYW4gPyAiYWFyY2g2NF9l bGYzMl9iZV92ZWMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiAiYWFyY2g2NF9lbGYzMl9sZV92ZWMiKSkpCisgIHsgfQorCisg IHZpcnR1YWwgVGFyZ2V0KgorICBkb19pbnN0YW50aWF0ZV90YXJnZXQoKQor ICB7IHJldHVybiBuZXcgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlh bj4oKTsgfQorfTsKKworVGFyZ2V0X3NlbGVjdG9yX2FhcmNoNjQ8MzIsIHRy dWU+IHRhcmdldF9zZWxlY3Rvcl9hYXJjaDY0ZWxmMzJiOworVGFyZ2V0X3Nl bGVjdG9yX2FhcmNoNjQ8MzIsIGZhbHNlPiB0YXJnZXRfc2VsZWN0b3JfYWFy Y2g2NGVsZjMyOworVGFyZ2V0X3NlbGVjdG9yX2FhcmNoNjQ8NjQsIHRydWU+ IHRhcmdldF9zZWxlY3Rvcl9hYXJjaDY0ZWxmYjsKK1RhcmdldF9zZWxlY3Rv cl9hYXJjaDY0PDY0LCBmYWxzZT4gdGFyZ2V0X3NlbGVjdG9yX2FhcmNoNjRl bGY7CisKKworfSAvLyBFbmQgYW5vbnltb3VzIG5hbWVzcGFjZS4KZGlmZiAt LWdpdCBhL2dvbGQvY29uZmlndXJlLmFjIGIvZ29sZC9jb25maWd1cmUuYWMK aW5kZXggMTRlY2Q3Mi4uMDQ3ODAxMSAxMDA2NDQKLS0tIGEvZ29sZC9jb25m aWd1cmUuYWMKKysrIGIvZ29sZC9jb25maWd1cmUuYWMKQEAgLTE5OSw2ICsx OTksNyBAQCBmb3IgdGFyZyBpbiAkdGFyZ2V0ICRjYW5vbl90YXJnZXRzOyBk bwogCWRlZmF1bHRfYmlnX2VuZGlhbj0kdGFyZ19iaWdfZW5kaWFuCiAJZGVm YXVsdF9vc2FiaT0kdGFyZ19vc2FiaQogCisJQU1fQ09ORElUSU9OQUwoREVG QVVMVF9UQVJHRVRfQUFSQ0g2NCwgdGVzdCAiJHRhcmdfb2JqIiA9ICJhYXJj aDY0IikKIAlBTV9DT05ESVRJT05BTChERUZBVUxUX1RBUkdFVF9BUk0sIHRl c3QgIiR0YXJnX29iaiIgPSAiYXJtIikKIAlBTV9DT05ESVRJT05BTChERUZB VUxUX1RBUkdFVF9JMzg2LCB0ZXN0ICIkdGFyZ19vYmoiID0gImkzODYiKQog CUFNX0NPTkRJVElPTkFMKERFRkFVTFRfVEFSR0VUX1BPV0VSUEMsIHRlc3Qg IiR0YXJnX29iaiIgPSAicG93ZXJwYyIpCmRpZmYgLS1naXQgYS9nb2xkL2Nv bmZpZ3VyZS50Z3QgYi9nb2xkL2NvbmZpZ3VyZS50Z3QKaW5kZXggOTNkNjIy ZC4uOWE3NTA3MCAxMDA2NDQKLS0tIGEvZ29sZC9jb25maWd1cmUudGd0Cisr KyBiL2dvbGQvY29uZmlndXJlLnRndApAQCAtMTQ0LDYgKzE0NCwxNCBAQCBh cm0qLSotKikKICB0YXJnX2JpZ19lbmRpYW49ZmFsc2UKICB0YXJnX2V4dHJh X2JpZ19lbmRpYW49dHJ1ZQogIDs7CithYXJjaDY0Ki0qKQorIHRhcmdfb2Jq PWFhcmNoNjQKKyB0YXJnX21hY2hpbmU9RU1fQUFSQ0g2NAorIHRhcmdfc2l6 ZT02NAorIHRhcmdfZXh0cmFfc2l6ZT0zMgorIHRhcmdfYmlnX2VuZGlhbj1m YWxzZQorIHRhcmdfZXh0cmFfYmlnX2VuZGlhbj10cnVlCisgOzsKIG1pcHMq ZWwqLSotKnxtaXBzKmxlKi0qLSopCiAgdGFyZ19vYmo9bWlwcwogIHRhcmdf bWFjaGluZT1FTV9NSVBTX1JTM19MRQo= --089e01495134de5a7304fd3e3897--